commit c14f4de8805421a0ca25d1d5cee18bf349f07093 Author: 耗子 Date: Thu Jun 22 00:09:56 2023 +0800 feat: v2 Initial commit diff --git a/.air.toml b/.air.toml new file mode 100644 index 00000000..1aad93a2 --- /dev/null +++ b/.air.toml @@ -0,0 +1,32 @@ +root = "." +tmp_dir = "storage/temp" + +[build] +bin = "./storage/temp/main" +cmd = "go build -o ./storage/temp/main ." +delay = 1000 +exclude_dir = ["storage", "database"] +exclude_file = [] +exclude_regex = [] +exclude_unchanged = false +follow_symlink = false +full_bin = "" +include_dir = [] +include_ext = ["go", "tpl", "tmpl", "html"] +kill_delay = "0s" +log = "build-errors.log" +send_interrupt = false +stop_on_error = true + +[color] +app = "" +build = "yellow" +main = "magenta" +runner = "green" +watcher = "cyan" + +[log] +time = false + +[misc] +clean_on_exit = false diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..abf959b9 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +APP_ENV=local +APP_KEY= +APP_DEBUG=true + +JWT_SECRET= diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..6b0f8d54 --- /dev/null +++ b/.gitignore @@ -0,0 +1,72 @@ +tmp +.env +.history + +# Golang # +# `go test -c` 生成的二进制文件 +*.test +# go coverage 工具 +*.out +*.prof +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +# 编译文件 # +*.com +*.class +*.dll +*.exe +*.o +*.so + +# 压缩包 # +# Git 自带压缩,如果这些压缩包里有代码,建议解压后 commit +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip + +# 日志文件和数据库 # +*.log +*.sqlite +*.db + +# 临时文件 # +tmp/ +.tmp/ + +# 系统生成文件 # +.DS_Store +.DS_Store? +.AppleDouble +.LSOverride +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db +.TemporaryItems +.fseventsd +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# IDE 和编辑器 # +.idea/ +/go_build_* +out/ +.vscode/ +.vscode/settings.json +*.sublime* +__debug_bin +.project + +# 前端工具链 # +.sass-cache/* +node_modules/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..c76a5725 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [2022] [HaoZi Technology Co., Ltd.] + + 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. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..690cb9b7 --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# 耗子Linux面板 + +这是耗子Linux面板的开源仓库,基于Apache License 2.0协议进行开源,目前处于积极开发状态。 + +#### 我们正在进行基于 Golang 的 V2 版本的开发,加入我们的 交流QQ群:[12370907](https://jq.qq.com/?_wv=1027&k=I1oJKSTH) | QQ频道:[耗子](https://pd.qq.com/s/fyol46wfy) 获取最新动态。 + +广告: [`WeAvatar` —统一头像服务](https://weavatar.com) + +## 运行环境 + +面板仅支持主流 `amd64` | `arm64` 系统的最新版本,且随着系统版本的更新,面板也会逐步停止对旧版本的支持。 + +不支持 `Ubuntu`,因为其发版太频繁,难以维护。 + +低配机器建议使用 `Debian`,资源占用较 `RHEL` 系更低。其他机器建议使用 `RockyLinux` | `AlmaLinux`,维护周期更长。 + +不在下表中的其他 `RHEL` 系统,可自行尝试安装,但不保证能够正常运行,且不提供技术支持。 + +| 系统 | 版本 | +|------------|----| +| RockyLinux | 9 | +| AlmaLinux | 9 | +| Debian | 12 | + +## 安装面板 + +```shell +TODO +``` + +## 日常维护 + +```shell +TODO +``` + +## 问题反馈 + +使用类问题,可在 [WePublish社区论坛](https://wepublish.cn/forum) 提问寻求帮助。 + +对于面板自身问题,可在 GitHub 的`Issues` +页面提交问题反馈,注意[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md)。 + +交流QQ群:[12370907](https://jq.qq.com/?_wv=1027&k=I1oJKSTH) | QQ频道:[耗子](https://pd.qq.com/s/fyol46wfy) + +## 赞助商 + +### 服务器 + +- [盾云](https://www.ddunyun.com/) + +### CDN + +- [盾云CDN](http://cdn.ddunyun.com/) + +- [又拍云](https://www.upyun.com/) + +#### 接受云资源和资金赞助,可通过QQ群咨询联系 + +## Star 趋势 + +[![Star 趋势](https://starchart.cc/HaoZi-Team/Panel.svg)](https://starchart.cc/HaoZi-Team/Panel) diff --git a/app/console/commands/monitoring.go b/app/console/commands/monitoring.go new file mode 100644 index 00000000..41fd9125 --- /dev/null +++ b/app/console/commands/monitoring.go @@ -0,0 +1,78 @@ +package commands + +import ( + "strconv" + + "github.com/gookit/color" + + "github.com/goravel/framework/contracts/console" + "github.com/goravel/framework/contracts/console/command" + "github.com/goravel/framework/facades" + "github.com/goravel/framework/support/carbon" + "panel/app/models" + "panel/packages/helpers" +) + +type Monitoring struct { +} + +// Signature The name and signature of the console command. +func (receiver *Monitoring) Signature() string { + return "panel:monitoring" +} + +// Description The console command description. +func (receiver *Monitoring) Description() string { + return "[面板] 系统监控" +} + +// Extend The console command extend. +func (receiver *Monitoring) Extend() command.Extend { + return command.Extend{ + Category: "panel", + } +} + +// Handle Execute the console command. +func (receiver *Monitoring) Handle(ctx console.Context) error { + var setting models.Setting + if err := facades.Orm().Query().Where("key", "monitor").First(&setting); err != nil { + return nil + } + if setting.Value == "0" || len(setting.Value) == 0 { + return nil + } + + info, err := helpers.GetMonitoringInfo() + if err != nil { + facades.Log().Errorf("[面板] 系统监控失败: %s", err.Error()) + color.Redf("[面板] 系统监控失败: %s", err.Error()) + return nil + } + + err = facades.Orm().Query().Create(&models.Monitor{ + Info: info, + }) + if err != nil { + facades.Log().Errorf("[面板] 系统监控保存失败: %s", err.Error()) + color.Redf("[面板] 系统监控保存失败: %s", err.Error()) + return nil + } + + // 删除过期数据 + err = facades.Orm().Query().Where("key", "monitor_days").First(&setting) + if err != nil { + return nil + } + if setting.Value == "0" || len(setting.Value) == 0 { + return nil + } + + days, err := strconv.Atoi(setting.Value) + if err != nil { + return nil + } + _, err = facades.Orm().Query().Where("created_at < ?", carbon.Now().SubDays(days).ToDateTimeString()).Delete(&models.Monitor{}) + + return nil +} diff --git a/app/console/kernel.go b/app/console/kernel.go new file mode 100644 index 00000000..275f6dba --- /dev/null +++ b/app/console/kernel.go @@ -0,0 +1,20 @@ +package console + +import ( + "github.com/goravel/framework/contracts/console" + "github.com/goravel/framework/contracts/schedule" + "panel/app/console/commands" +) + +type Kernel struct { +} + +func (kernel *Kernel) Schedule() []schedule.Event { + return []schedule.Event{} +} + +func (kernel *Kernel) Commands() []console.Command { + return []console.Command{ + &commands.Monitoring{}, + } +} diff --git a/app/http/controllers/user_controller.go b/app/http/controllers/user_controller.go new file mode 100644 index 00000000..6edfc4a4 --- /dev/null +++ b/app/http/controllers/user_controller.go @@ -0,0 +1,94 @@ +package controllers + +import ( + "github.com/goravel/framework/contracts/http" + "github.com/goravel/framework/facades" + models "panel/app/Models" + "panel/app/http/requests" +) + +type UserController struct { + //Dependent services +} + +func NewUserController() *UserController { + return &UserController{ + //Inject services + } +} + +func (r *UserController) Login(ctx http.Context) { + var loginRequest requests.LoginRequest + errors, err := ctx.Request().ValidateRequest(&loginRequest) + if err != nil { + ctx.Response().Json(http.StatusUnprocessableEntity, http.Json{ + "code": 422, + "message": err.Error(), + }) + return + } + if errors != nil { + ctx.Response().Json(http.StatusUnprocessableEntity, http.Json{ + "code": 422, + "message": errors.All(), + }) + return + } + + var user models.User + err = facades.Orm().Query().Where("username", loginRequest.Username).First(&user) + if err != nil { + facades.Log().Error("[面板][UserController] 查询用户失败 ", err) + ctx.Response().Json(http.StatusInternalServerError, http.Json{ + "code": 500, + "message": "系统内部错误", + }) + return + } + + if user.ID == 0 || !facades.Hash().Check(loginRequest.Password, user.Password) { + ctx.Response().Json(http.StatusUnauthorized, http.Json{ + "code": 401, + "message": "用户名或密码错误", + }) + return + } + + // 检查密码是否需要重新哈希 + if facades.Hash().NeedsRehash(user.Password) { + // 更新密码 + user.Password, err = facades.Hash().Make(loginRequest.Password) + if err != nil { + facades.Log().Error("[面板][UserController] 更新密码失败 ", err) + ctx.Response().Json(http.StatusInternalServerError, http.Json{ + "code": 500, + "message": "系统内部错误", + }) + return + } + } + + token, loginErr := facades.Auth().LoginUsingID(ctx, user.ID) + if loginErr != nil { + facades.Log().Error("[面板][UserController] 登录失败 ", loginErr) + ctx.Response().Json(http.StatusInternalServerError, http.Json{ + "code": 500, + "message": loginErr.Error(), + }) + return + } + + ctx.Response().Success().Json(http.Json{ + "code": 0, + "message": "登录成功", + "data": http.Json{ + "access_token": token, + }, + }) +} + +func (r *UserController) Info(ctx http.Context) { + ctx.Response().Success().Json(http.Json{ + "Hello": "Goravel", + }) +} diff --git a/app/http/kernel.go b/app/http/kernel.go new file mode 100644 index 00000000..3ac27bf9 --- /dev/null +++ b/app/http/kernel.go @@ -0,0 +1,18 @@ +package http + +import ( + "github.com/goravel/framework/contracts/http" + + "panel/app/http/middleware" +) + +type Kernel struct { +} + +// The application's global HTTP middleware stack. +// These middleware are run during every request to your application. +func (kernel Kernel) Middleware() []http.Middleware { + return []http.Middleware{ + middleware.Static(), + } +} diff --git a/app/http/middleware/.gitignore b/app/http/middleware/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/app/http/middleware/jwt.go b/app/http/middleware/jwt.go new file mode 100644 index 00000000..d3041257 --- /dev/null +++ b/app/http/middleware/jwt.go @@ -0,0 +1,63 @@ +package middleware + +import ( + "errors" + + "github.com/goravel/framework/auth" + "github.com/goravel/framework/contracts/http" + "github.com/goravel/framework/facades" + + "panel/app/models" +) + +// Jwt 确保通过 JWT 鉴权 +func Jwt() http.Middleware { + return func(ctx http.Context) { + token := ctx.Request().Header("Authorization", "") + if len(token) == 0 { + ctx.Request().AbortWithStatusJson(http.StatusUnauthorized, http.Json{ + "code": 401, + "message": "未登录", + }) + return + } + + // JWT 鉴权 + if _, err := facades.Auth().Parse(ctx, token); err != nil { + if errors.Is(err, auth.ErrorTokenExpired) { + token, err = facades.Auth().Refresh(ctx) + if err != nil { + // Refresh time exceeded + ctx.Request().AbortWithStatusJson(http.StatusUnauthorized, http.Json{ + "code": 401, + "message": "登录已过期", + }) + return + } + + token = "Bearer " + token + } else { + ctx.Request().AbortWithStatusJson(http.StatusUnauthorized, http.Json{ + "code": 401, + "message": "登录已过期", + }) + return + } + } + + // 取出用户信息 + var user models.User + if err := facades.Auth().User(ctx, &user); err != nil { + ctx.Request().AbortWithStatusJson(http.StatusForbidden, http.Json{ + "code": 403, + "message": "用户不存在", + }) + return + } + + ctx.WithValue("user", user) + + ctx.Response().Header("Authorization", token) + ctx.Request().Next() + } +} diff --git a/app/http/middleware/static.go b/app/http/middleware/static.go new file mode 100644 index 00000000..395f6d91 --- /dev/null +++ b/app/http/middleware/static.go @@ -0,0 +1,16 @@ +package middleware + +import ( + "github.com/gin-contrib/static" + + contractshttp "github.com/goravel/framework/contracts/http" + frameworkhttp "github.com/goravel/framework/http" +) + +func Static() contractshttp.Middleware { + return func(ctx contractshttp.Context) { + static.Serve("/", static.LocalFile("./public", false))(ctx.(*frameworkhttp.GinContext).Instance()) + + ctx.Request().Next() + } +} diff --git a/app/http/requests/login_request.go b/app/http/requests/login_request.go new file mode 100644 index 00000000..4617d0f9 --- /dev/null +++ b/app/http/requests/login_request.go @@ -0,0 +1,38 @@ +package requests + +import ( + "github.com/goravel/framework/contracts/http" + "github.com/goravel/framework/contracts/validation" +) + +type LoginRequest struct { + Username string `json:"username" form:"username"` + Password string `json:"password" form:"password"` +} + +func (r *LoginRequest) Authorize(ctx http.Context) error { + return nil +} + +func (r *LoginRequest) Rules(ctx http.Context) map[string]string { + return map[string]string{ + "login": "required", + "password": "required|min_len:8", + } +} + +func (r *LoginRequest) Messages(ctx http.Context) map[string]string { + return map[string]string{ + "login.required": "登录名不能为空", + "password.required": "密码不能为空", + "password.min_len": "密码长度不能小于 8 位", + } +} + +func (r *LoginRequest) Attributes(ctx http.Context) map[string]string { + return map[string]string{} +} + +func (r *LoginRequest) PrepareForValidation(ctx http.Context, data validation.Data) error { + return nil +} diff --git a/app/models/cron.go b/app/models/cron.go new file mode 100644 index 00000000..a1254187 --- /dev/null +++ b/app/models/cron.go @@ -0,0 +1,15 @@ +package models + +import ( + "github.com/goravel/framework/database/orm" +) + +type Cron struct { + orm.Model + Name string `gorm:"not null;unique"` + Status bool `gorm:"not null;default:false"` + Type string `gorm:"not null"` + Time string `gorm:"not null"` + Shell string `gorm:"default:null"` + Log string `gorm:"default:null"` +} diff --git a/app/models/database.go b/app/models/database.go new file mode 100644 index 00000000..924c4e9e --- /dev/null +++ b/app/models/database.go @@ -0,0 +1,16 @@ +package models + +import ( + "github.com/goravel/framework/database/orm" +) + +type Database struct { + orm.Model + Name string `gorm:"unique;not null"` + Type string `gorm:"not null;index"` + Host string `gorm:"not null"` + Port int `gorm:"not null"` + Username string `gorm:"not null"` + Password string `gorm:"default:null"` + Remark string `gorm:"default:null"` +} diff --git a/app/models/monitor.go b/app/models/monitor.go new file mode 100644 index 00000000..79aa1aff --- /dev/null +++ b/app/models/monitor.go @@ -0,0 +1,12 @@ +package models + +import ( + "panel/packages/helpers" + + "github.com/goravel/framework/database/orm" +) + +type Monitor struct { + orm.Model + Info helpers.MonitoringInfo `gorm:"type:json;serializer:json"` +} diff --git a/app/models/plugin.go b/app/models/plugin.go new file mode 100644 index 00000000..acee0b27 --- /dev/null +++ b/app/models/plugin.go @@ -0,0 +1,13 @@ +package models + +import ( + "github.com/goravel/framework/database/orm" +) + +type Plugin struct { + orm.Model + Slug string `gorm:"unique;not null"` + Version string `gorm:"not null"` + Show bool `gorm:"default:false;not null"` + ShowOrder int `gorm:"default:0;not null"` +} diff --git a/app/models/setting.go b/app/models/setting.go new file mode 100644 index 00000000..93a64db0 --- /dev/null +++ b/app/models/setting.go @@ -0,0 +1,11 @@ +package models + +import ( + "github.com/goravel/framework/database/orm" +) + +type Setting struct { + orm.Model + Key string `gorm:"unique;not null"` + Value string `gorm:"default:null"` +} diff --git a/app/models/task.go b/app/models/task.go new file mode 100644 index 00000000..ffba4afc --- /dev/null +++ b/app/models/task.go @@ -0,0 +1,13 @@ +package models + +import ( + "github.com/goravel/framework/database/orm" +) + +type Task struct { + orm.Model + Name string `gorm:"not null"` + Status string `gorm:"not null;default:'waiting'"` + Shell string `gorm:"default:null"` + Log string `gorm:"default:null"` +} diff --git a/app/models/user.go b/app/models/user.go new file mode 100644 index 00000000..fde3d31a --- /dev/null +++ b/app/models/user.go @@ -0,0 +1,13 @@ +package models + +import ( + "github.com/goravel/framework/database/orm" +) + +type User struct { + orm.Model + Username string `gorm:"unique;not null"` + Password string `gorm:"not null"` + Email string `gorm:"default:null"` + orm.SoftDeletes +} diff --git a/app/models/website.go b/app/models/website.go new file mode 100644 index 00000000..ebcad1bb --- /dev/null +++ b/app/models/website.go @@ -0,0 +1,15 @@ +package models + +import ( + "github.com/goravel/framework/database/orm" +) + +type Website struct { + orm.Model + Name string `gorm:"unique;not null"` + Status bool `gorm:"default:true;not null;index"` + Path string `gorm:"not null"` + Php int `gorm:"default:0;not null;index"` + Ssl bool `gorm:"default:false;not null;index"` + Remark string `gorm:"default:null"` +} diff --git a/app/providers/app_service_provider.go b/app/providers/app_service_provider.go new file mode 100644 index 00000000..a4dd934d --- /dev/null +++ b/app/providers/app_service_provider.go @@ -0,0 +1,16 @@ +package providers + +import ( + "github.com/goravel/framework/contracts/foundation" +) + +type AppServiceProvider struct { +} + +func (receiver *AppServiceProvider) Register(app foundation.Application) { + +} + +func (receiver *AppServiceProvider) Boot(app foundation.Application) { + +} diff --git a/app/providers/auth_service_provider.go b/app/providers/auth_service_provider.go new file mode 100644 index 00000000..6bdc039e --- /dev/null +++ b/app/providers/auth_service_provider.go @@ -0,0 +1,16 @@ +package providers + +import ( + "github.com/goravel/framework/contracts/foundation" +) + +type AuthServiceProvider struct { +} + +func (receiver *AuthServiceProvider) Register(app foundation.Application) { + +} + +func (receiver *AuthServiceProvider) Boot(app foundation.Application) { + +} diff --git a/app/providers/console_service_provider.go b/app/providers/console_service_provider.go new file mode 100644 index 00000000..b0f1d6f0 --- /dev/null +++ b/app/providers/console_service_provider.go @@ -0,0 +1,21 @@ +package providers + +import ( + "github.com/goravel/framework/contracts/foundation" + "github.com/goravel/framework/facades" + + "panel/app/console" +) + +type ConsoleServiceProvider struct { +} + +func (receiver *ConsoleServiceProvider) Register(app foundation.Application) { + kernel := console.Kernel{} + facades.Schedule().Register(kernel.Schedule()) + facades.Artisan().Register(kernel.Commands()) +} + +func (receiver *ConsoleServiceProvider) Boot(app foundation.Application) { + +} diff --git a/app/providers/event_service_provider.go b/app/providers/event_service_provider.go new file mode 100644 index 00000000..75c95ee7 --- /dev/null +++ b/app/providers/event_service_provider.go @@ -0,0 +1,22 @@ +package providers + +import ( + "github.com/goravel/framework/contracts/event" + "github.com/goravel/framework/contracts/foundation" + "github.com/goravel/framework/facades" +) + +type EventServiceProvider struct { +} + +func (receiver *EventServiceProvider) Register(app foundation.Application) { + facades.Event().Register(receiver.listen()) +} + +func (receiver *EventServiceProvider) Boot(app foundation.Application) { + +} + +func (receiver *EventServiceProvider) listen() map[event.Event][]event.Listener { + return map[event.Event][]event.Listener{} +} diff --git a/app/providers/queue_service_provider.go b/app/providers/queue_service_provider.go new file mode 100644 index 00000000..d65f2113 --- /dev/null +++ b/app/providers/queue_service_provider.go @@ -0,0 +1,22 @@ +package providers + +import ( + "github.com/goravel/framework/contracts/foundation" + "github.com/goravel/framework/contracts/queue" + "github.com/goravel/framework/facades" +) + +type QueueServiceProvider struct { +} + +func (receiver *QueueServiceProvider) Register(app foundation.Application) { + facades.Queue().Register(receiver.Jobs()) +} + +func (receiver *QueueServiceProvider) Boot(app foundation.Application) { + +} + +func (receiver *QueueServiceProvider) Jobs() []queue.Job { + return []queue.Job{} +} diff --git a/app/providers/route_service_provider.go b/app/providers/route_service_provider.go new file mode 100644 index 00000000..032d1e24 --- /dev/null +++ b/app/providers/route_service_provider.go @@ -0,0 +1,27 @@ +package providers + +import ( + "github.com/goravel/framework/contracts/foundation" + "github.com/goravel/framework/facades" + + "panel/app/http" + "panel/routes" +) + +type RouteServiceProvider struct { +} + +func (receiver *RouteServiceProvider) Register(app foundation.Application) { + //Add HTTP middlewares + facades.Route().GlobalMiddleware(http.Kernel{}.Middleware()...) +} + +func (receiver *RouteServiceProvider) Boot(app foundation.Application) { + receiver.configureRateLimiting() + + routes.Web() +} + +func (receiver *RouteServiceProvider) configureRateLimiting() { + +} diff --git a/app/providers/validation_service_provider.go b/app/providers/validation_service_provider.go new file mode 100644 index 00000000..583a29ec --- /dev/null +++ b/app/providers/validation_service_provider.go @@ -0,0 +1,24 @@ +package providers + +import ( + "github.com/goravel/framework/contracts/foundation" + "github.com/goravel/framework/contracts/validation" + "github.com/goravel/framework/facades" +) + +type ValidationServiceProvider struct { +} + +func (receiver *ValidationServiceProvider) Register(app foundation.Application) { + +} + +func (receiver *ValidationServiceProvider) Boot(app foundation.Application) { + if err := facades.Validation().AddRules(receiver.rules()); err != nil { + facades.Log().Errorf("add rules error: %+v", err) + } +} + +func (receiver *ValidationServiceProvider) rules() []validation.Rule { + return []validation.Rule{} +} diff --git a/bootstrap/app.go b/bootstrap/app.go new file mode 100644 index 00000000..8b3afaff --- /dev/null +++ b/bootstrap/app.go @@ -0,0 +1,17 @@ +package bootstrap + +import ( + "github.com/goravel/framework/foundation" + + "panel/config" +) + +func Boot() { + app := foundation.NewApplication() + + //Bootstrap the application + app.Boot() + + //Bootstrap the config. + config.Boot() +} diff --git a/bootstrap/plugins.go b/bootstrap/plugins.go new file mode 100644 index 00000000..82394537 --- /dev/null +++ b/bootstrap/plugins.go @@ -0,0 +1,7 @@ +package bootstrap + +import "panel/plugins/openresty" + +func Plugins() { + openresty.Boot() +} diff --git a/config/app.go b/config/app.go new file mode 100644 index 00000000..f2687a52 --- /dev/null +++ b/config/app.go @@ -0,0 +1,90 @@ +package config + +import ( + "github.com/goravel/framework/auth" + "github.com/goravel/framework/cache" + "github.com/goravel/framework/console" + "github.com/goravel/framework/contracts/foundation" + "github.com/goravel/framework/crypt" + "github.com/goravel/framework/database" + "github.com/goravel/framework/event" + "github.com/goravel/framework/facades" + "github.com/goravel/framework/hash" + "github.com/goravel/framework/http" + "github.com/goravel/framework/log" + "github.com/goravel/framework/mail" + "github.com/goravel/framework/queue" + "github.com/goravel/framework/route" + "github.com/goravel/framework/schedule" + "github.com/goravel/framework/support/carbon" + "github.com/goravel/framework/validation" + + "panel/app/providers" +) + +// Boot Start all init methods of the current folder to bootstrap all config. +func Boot() {} + +func init() { + config := facades.Config() + config.Add("app", map[string]any{ + // Application Name + // + // This value is the name of your application. This value is used when the + // framework needs to place the application's name in a notification or + // any other location as required by the application or its packages. + "name": "Panel", + + // Application Environment + // + // This value determines the "environment" your application is currently + // running in. This may determine how you prefer to configure various + // services the application utilizes. Set this in your ".env" file. + "env": config.Env("APP_ENV", "production"), + + // Application Debug Mode + "debug": config.Env("APP_DEBUG", false), + + // Application Timezone + // + // Here you may specify the default timezone for your application. + // Example: UTC, Asia/Shanghai + // More: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones + "timezone": carbon.UTC, + + // Encryption Key + // + // 32 character string, otherwise these encrypted strings + // will not be safe. Please do this before deploying an application! + "key": config.Env("APP_KEY", ""), + + // Autoload service providers + // + // The service providers listed here will be automatically loaded on the + // request to your application. Feel free to add your own services to + // this array to grant expanded functionality to your applications. + "providers": []foundation.ServiceProvider{ + &log.ServiceProvider{}, + &console.ServiceProvider{}, + &database.ServiceProvider{}, + &cache.ServiceProvider{}, + &http.ServiceProvider{}, + &route.ServiceProvider{}, + &schedule.ServiceProvider{}, + &event.ServiceProvider{}, + &queue.ServiceProvider{}, + &mail.ServiceProvider{}, + &auth.ServiceProvider{}, + &hash.ServiceProvider{}, + &crypt.ServiceProvider{}, + &validation.ServiceProvider{}, + &providers.AppServiceProvider{}, + &providers.AuthServiceProvider{}, + &providers.RouteServiceProvider{}, + &providers.ConsoleServiceProvider{}, + &providers.QueueServiceProvider{}, + &providers.EventServiceProvider{}, + &providers.ValidationServiceProvider{}, + }, + }) +} diff --git a/config/auth.go b/config/auth.go new file mode 100644 index 00000000..c05b7a6e --- /dev/null +++ b/config/auth.go @@ -0,0 +1,36 @@ +package config + +import ( + "github.com/goravel/framework/facades" +) + +func init() { + config := facades.Config() + config.Add("auth", map[string]any{ + // Authentication Defaults + // + // This option controls the default authentication "guard" + // reset options for your application. You may change these defaults + // as required, but they're a perfect start for most applications. + "defaults": map[string]any{ + "guard": "user", + }, + + // Authentication Guards + // + // Next, you may define every authentication guard for your application. + // Of course, a great default configuration has been defined for you + // here which uses session storage and the Eloquent user provider. + // + // All authentication drivers have a user provider. This defines how the + // users are actually retrieved out of your database or other storage + // mechanisms used by this application to persist your user's data. + // + // Supported: "jwt" + "guards": map[string]any{ + "user": map[string]any{ + "driver": "jwt", + }, + }, + }) +} diff --git a/config/cache.go b/config/cache.go new file mode 100644 index 00000000..dfd9240b --- /dev/null +++ b/config/cache.go @@ -0,0 +1,37 @@ +package config + +import ( + "github.com/goravel/framework/facades" +) + +func init() { + config := facades.Config() + config.Add("cache", map[string]any{ + // Default Cache Store + // + // This option controls the default cache connection that gets used while + // using this caching library. This connection is used when another is + // not explicitly specified when executing a given caching function. + "default": config.Env("CACHE_STORE", "memory"), + + // Cache Stores + // + // Here you may define all the cache "stores" for your application as + // well as their drivers. You may even define multiple stores for the + // same cache driver to group types of items stored in your caches. + // Available Drivers: "memory", "redis", "custom" + "stores": map[string]any{ + "memory": map[string]any{ + "driver": "memory", + }, + }, + + // Cache Key Prefix + // + // When utilizing a RAM based store such as APC or Memcached, there might + // be other applications utilizing the same cache. So, we'll specify a + // value to get prefixed to all our keys, so we can avoid collisions. + // Must: a-zA-Z0-9_- + "prefix": "panel_cache", + }) +} diff --git a/config/cors.go b/config/cors.go new file mode 100644 index 00000000..be084ead --- /dev/null +++ b/config/cors.go @@ -0,0 +1,24 @@ +package config + +import ( + "github.com/goravel/framework/facades" +) + +func init() { + config := facades.Config() + config.Add("cors", map[string]any{ + // Cross-Origin Resource Sharing (CORS) Configuration + // + // Here you may configure your settings for cross-origin resource sharing + // or "CORS". This determines what cross-origin operations may execute + // in web browsers. You are free to adjust these settings as needed. + // + // To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS + "allowed_methods": []string{"*"}, + "allowed_origins": []string{"*"}, + "allowed_headers": []string{"*"}, + "exposed_headers": []string{"*"}, + "max_age": 0, + "supports_credentials": false, + }) +} diff --git a/config/database.go b/config/database.go new file mode 100644 index 00000000..8c8dbddc --- /dev/null +++ b/config/database.go @@ -0,0 +1,78 @@ +package config + +import ( + "github.com/goravel/framework/facades" +) + +func init() { + config := facades.Config() + config.Add("database", map[string]any{ + // Default database connection name + "default": "panel", + + // Database connections + "connections": map[string]any{ + "panel": map[string]any{ + "driver": "sqlite", + "database": "database/panel.db", + "prefix": "", + "singular": false, // Table name is singular + }, + }, + + // Set pool configuration + "pool": map[string]any{ + // Sets the maximum number of connections in the idle + // connection pool. + // + // If MaxOpenConns is greater than 0 but less than the new MaxIdleConns, + // then the new MaxIdleConns will be reduced to match the MaxOpenConns limit. + // + // If n <= 0, no idle connections are retained. + "max_idle_conns": 10, + // Sets the maximum number of open connections to the database. + // + // If MaxIdleConns is greater than 0 and the new MaxOpenConns is less than + // MaxIdleConns, then MaxIdleConns will be reduced to match the new + // MaxOpenConns limit. + // + // If n <= 0, then there is no limit on the number of open connections. + "max_open_conns": 100, + // Sets the maximum amount of time a connection may be idle. + // + // Expired connections may be closed lazily before reuse. + // + // If d <= 0, connections are not closed due to a connection's idle time. + // Unit: Second + "conn_max_idletime": 3600, + // Sets the maximum amount of time a connection may be reused. + // + // Expired connections may be closed lazily before reuse. + // + // If d <= 0, connections are not closed due to a connection's age. + // Unit: Second + "conn_max_lifetime": 3600, + }, + + // Migration Repository Table + // + // This table keeps track of all the migrations that have already run for + // your application. Using this information, we can determine which of + // the migrations on disk haven't actually been run in the database. + "migrations": "migrations", + + // Redis Databases + // + // Redis is an open source, fast, and advanced key-value store that also + // provides a richer body of commands than a typical key-value system + // such as APC or Memcached. + "redis": map[string]any{ + "default": map[string]any{ + "host": config.Env("REDIS_HOST", ""), + "password": config.Env("REDIS_PASSWORD", ""), + "port": config.Env("REDIS_PORT", 6379), + "database": config.Env("REDIS_DB", 0), + }, + }, + }) +} diff --git a/config/filesystems.go b/config/filesystems.go new file mode 100644 index 00000000..f6426747 --- /dev/null +++ b/config/filesystems.go @@ -0,0 +1,32 @@ +package config + +import ( + "github.com/goravel/framework/facades" +) + +func init() { + config := facades.Config() + config.Add("filesystems", map[string]any{ + // Default Filesystem Disk + // + // Here you may specify the default filesystem disk that should be used + // by the framework. The "local" disk, as well as a variety of cloud + // based disks are available to your application. Just store away! + "default": config.Env("FILESYSTEM_DISK", "local"), + + // Filesystem Disks + // + // Here you may configure as many filesystem "disks" as you wish, and you + // may even configure multiple disks of the same driver. Defaults have + // been set up for each driver as an example of the required values. + // + // Supported Drivers: "local", "s3", "oss", "cos", "minio", "custom" + "disks": map[string]any{ + "local": map[string]any{ + "driver": "local", + "root": "storage/app", + "url": "http://localhost/storage", + }, + }, + }) +} diff --git a/config/hashing.go b/config/hashing.go new file mode 100644 index 00000000..b87d4626 --- /dev/null +++ b/config/hashing.go @@ -0,0 +1,40 @@ +package config + +import ( + "github.com/goravel/framework/facades" +) + +func init() { + config := facades.Config() + config.Add("hashing", map[string]any{ + // Hashing Driver + // + // This option controls the default diver that gets used + // by the framework hash facade. + // Default driver is "bcrypt". + // + // Supported Drivers: "bcrypt", "argon2id" + "driver": "bcrypt", + + // Bcrypt Hashing Options + // rounds: The cost factor that should be used to compute the bcrypt hash. + // The cost factor controls how much time is needed to compute a single bcrypt hash. + // The higher the cost factor, the more hashing rounds are done. Increasing the cost + // factor by 1 doubles the necessary time. After a certain point, the returns on + // hashing time versus attacker time are diminishing, so choose your cost factor wisely. + "bcrypt": map[string]any{ + "rounds": 10, + }, + + // Argon2id Hashing Options + // memory: A memory cost, which defines the memory usage, given in kibibytes. + // time: A time cost, which defines the amount of computation + // realized and therefore the execution time, given in number of iterations. + // threads: A parallelism degree, which defines the number of parallel threads. + "argon2id": map[string]any{ + "memory": 65536, + "time": 4, + "threads": 1, + }, + }) +} diff --git a/config/http.go b/config/http.go new file mode 100644 index 00000000..d42d311b --- /dev/null +++ b/config/http.go @@ -0,0 +1,31 @@ +package config + +import ( + "github.com/goravel/framework/facades" +) + +func init() { + config := facades.Config() + config.Add("http", map[string]any{ + // HTTP URL + "url": "http://localhost", + // HTTP Host + "host": "0.0.0.0", + // HTTP Port + "port": "8888", + // HTTPS Configuration + "tls": map[string]any{ + // HTTPS Host + "host": "0.0.0.0", + // HTTPS Port + "port": "8899", + // SSL Certificate + "ssl": map[string]any{ + // ca.pem + "cert": "", + // ca.key + "key": "", + }, + }, + }) +} diff --git a/config/jwt.go b/config/jwt.go new file mode 100644 index 00000000..79370f4d --- /dev/null +++ b/config/jwt.go @@ -0,0 +1,41 @@ +package config + +import ( + "github.com/goravel/framework/facades" +) + +func init() { + config := facades.Config() + config.Add("jwt", map[string]any{ + // JWT Authentication Secret + // + // Don't forget to set this in your .env file, as it will be used to sign + // your tokens. A helper command is provided for this: + // `go run . artisan jwt:secret` + "secret": config.Env("JWT_SECRET", ""), + + // JWT time to live + // + // Specify the length of time (in minutes) that the token will be valid for. + // Defaults to 1 hour. + // + // You can also set this to 0, to yield a never expiring token. + // Some people may want this behaviour for e.g. a mobile app. + // This is not particularly recommended, so make sure you have appropriate + // systems in place to revoke the token if necessary. + "ttl": config.Env("JWT_TTL", 60), + + // Refresh time to live + // + // Specify the length of time (in minutes) that the token can be refreshed + // within. I.E. The user can refresh their token within a 2 week window of + // the original token being created until they must re-authenticate. + // Defaults to 2 weeks. + // + // You can also set this to null, to yield an infinite refresh time. + // Some may want this instead of never expiring tokens for e.g. a mobile app. + // This is not particularly recommended, so make sure you have appropriate + // systems in place to revoke the token if necessary. + "refresh_ttl": config.Env("JWT_REFRESH_TTL", 20160), + }) +} diff --git a/config/logging.go b/config/logging.go new file mode 100644 index 00000000..f92cc17f --- /dev/null +++ b/config/logging.go @@ -0,0 +1,42 @@ +package config + +import ( + "github.com/goravel/framework/facades" +) + +func init() { + config := facades.Config() + config.Add("logging", map[string]any{ + // Default Log Channel + // + // This option defines the default log channel that gets used when writing + // messages to the logs. The name specified in this option should match + // one of the channels defined in the "channels" configuration array. + "default": "stack", + + // Log Channels + // + // Here you may configure the log channels for your application. + // Available Drivers: "single", "daily", "custom", "stack" + // Available Level: "debug", "info", "warning", "error", "fatal", "panic" + "channels": map[string]any{ + "stack": map[string]any{ + "driver": "stack", + "channels": []string{"daily"}, + }, + "single": map[string]any{ + "driver": "single", + "path": "storage/logs/goravel.log", + "level": "info", + "print": true, + }, + "daily": map[string]any{ + "driver": "daily", + "path": "storage/logs/goravel.log", + "level": "info", + "days": 7, + "print": true, + }, + }, + }) +} diff --git a/config/mail.go b/config/mail.go new file mode 100644 index 00000000..0439cd60 --- /dev/null +++ b/config/mail.go @@ -0,0 +1,43 @@ +package config + +import "github.com/goravel/framework/facades" + +func init() { + config := facades.Config() + config.Add("mail", map[string]any{ + // SMTP Host Address + // + // Here you may provide the host address of the SMTP server used by your + // applications. A default option is provided that is compatible with + // the Mailgun mail service which will provide reliable deliveries. + "host": config.Env("MAIL_HOST", ""), + + // SMTP Host Port + // + // This is the SMTP port used by your application to deliver e-mails to + // users of the application. Like the host we have set this value to + // stay compatible with the Mailgun e-mail application by default. + "port": config.Env("MAIL_PORT", 587), + + // -------------------------------------------------------------------------- + // Global "From" Address + // -------------------------------------------------------------------------- + // + // You may wish for all e-mails sent by your application to be sent from + // the same address. Here, you may specify a name and address that is + // used globally for all e-mails that are sent by your application. + "from": map[string]any{ + "address": config.Env("MAIL_FROM_ADDRESS", "hello@example.com"), + "name": config.Env("MAIL_FROM_NAME", "Example"), + }, + + // SMTP Server Username + // + // If your SMTP server requires a username for authentication, you should + // set it here. This will get used to authenticate with your server on + // connection. You may also set the "password" value below this one. + "username": config.Env("MAIL_USERNAME"), + + "password": config.Env("MAIL_PASSWORD"), + }) +} diff --git a/config/queue.go b/config/queue.go new file mode 100644 index 00000000..ff79c6d3 --- /dev/null +++ b/config/queue.go @@ -0,0 +1,28 @@ +package config + +import ( + "github.com/goravel/framework/facades" +) + +func init() { + config := facades.Config() + config.Add("queue", map[string]any{ + // Default Queue Connection Name + "default": config.Env("QUEUE_CONNECTION", "sync"), + + // Queue Connections + // + // Here you may configure the connection information for each server that is used by your application. + // Drivers: "sync", "redis" + "connections": map[string]any{ + "sync": map[string]any{ + "driver": "sync", + }, + "redis": map[string]any{ + "driver": "redis", + "connection": "default", + "queue": config.Env("REDIS_QUEUE", "default"), + }, + }, + }) +} diff --git a/database/migrations/.gitignore b/database/migrations/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/database/migrations/20230621124710_create_users_table.down.sql b/database/migrations/20230621124710_create_users_table.down.sql new file mode 100644 index 00000000..c99ddcdc --- /dev/null +++ b/database/migrations/20230621124710_create_users_table.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS users; diff --git a/database/migrations/20230621124710_create_users_table.up.sql b/database/migrations/20230621124710_create_users_table.up.sql new file mode 100644 index 00000000..bcb90168 --- /dev/null +++ b/database/migrations/20230621124710_create_users_table.up.sql @@ -0,0 +1,11 @@ +CREATE TABLE users +( + id integer PRIMARY KEY AUTOINCREMENT NOT NULL, + username varchar(255) NOT NULL, + password varchar(255) NOT NULL, + email varchar(255) DEFAULT NULL, + created_at datetime NOT NULL, + updated_at datetime NOT NULL +); + +CREATE UNIQUE INDEX users_username_unique ON users (username); diff --git a/database/migrations/20230621124737_create_websites_table.down.sql b/database/migrations/20230621124737_create_websites_table.down.sql new file mode 100644 index 00000000..5a91c3f1 --- /dev/null +++ b/database/migrations/20230621124737_create_websites_table.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS websites; diff --git a/database/migrations/20230621124737_create_websites_table.up.sql b/database/migrations/20230621124737_create_websites_table.up.sql new file mode 100644 index 00000000..3f6f63b7 --- /dev/null +++ b/database/migrations/20230621124737_create_websites_table.up.sql @@ -0,0 +1,17 @@ +CREATE TABLE websites +( + id integer PRIMARY KEY AUTOINCREMENT NOT NULL, + name varchar(255) NOT NULL, + status boolean DEFAULT 1 NOT NULL, + path varchar(255) NOT NULL, + php integer DEFAULT 0 NOT NULL, + ssl boolean DEFAULT 0 NOT NULL, + remark text DEFAULT NULL, + created_at datetime NOT NULL, + updated_at datetime NOT NULL +); + +CREATE UNIQUE INDEX websites_name_unique ON websites (name); +CREATE INDEX websites_status_index ON websites (status); +CREATE INDEX websites_php_index ON websites (php); +CREATE INDEX websites_ssl_index ON websites (ssl); diff --git a/database/migrations/20230621124750_create_settings_table.down.sql b/database/migrations/20230621124750_create_settings_table.down.sql new file mode 100644 index 00000000..4596c6a0 --- /dev/null +++ b/database/migrations/20230621124750_create_settings_table.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS settings; diff --git a/database/migrations/20230621124750_create_settings_table.up.sql b/database/migrations/20230621124750_create_settings_table.up.sql new file mode 100644 index 00000000..0004eb8c --- /dev/null +++ b/database/migrations/20230621124750_create_settings_table.up.sql @@ -0,0 +1,10 @@ +CREATE TABLE settings +( + id integer PRIMARY KEY AUTOINCREMENT NOT NULL, + key varchar(255) NOT NULL, + value varchar(255) DEFAULT NULL, + created_at datetime NOT NULL, + updated_at datetime NOT NULL +); + +CREATE UNIQUE INDEX settings_key_unique ON settings (key); diff --git a/database/migrations/20230621124806_create_databases_table.down.sql b/database/migrations/20230621124806_create_databases_table.down.sql new file mode 100644 index 00000000..84d770ee --- /dev/null +++ b/database/migrations/20230621124806_create_databases_table.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS databases; diff --git a/database/migrations/20230621124806_create_databases_table.up.sql b/database/migrations/20230621124806_create_databases_table.up.sql new file mode 100644 index 00000000..83c3d0e1 --- /dev/null +++ b/database/migrations/20230621124806_create_databases_table.up.sql @@ -0,0 +1,16 @@ +CREATE TABLE databases +( + id integer PRIMARY KEY AUTOINCREMENT NOT NULL, + name varchar(255) NOT NULL, + type varchar(255) NOT NULL, + host varchar(255) NOT NULL, + port integer NOT NULL, + username varchar(255) NOT NULL, + password varchar(255) DEFAULT NULL, + remark text DEFAULT NULL, + created_at datetime NOT NULL, + updated_at datetime NOT NULL +); + +CREATE UNIQUE INDEX databases_name_unique ON databases (name); +CREATE INDEX databases_type_index ON databases (type); diff --git a/database/migrations/20230621124816_create_plugins_table.down.sql b/database/migrations/20230621124816_create_plugins_table.down.sql new file mode 100644 index 00000000..5e1da1f9 --- /dev/null +++ b/database/migrations/20230621124816_create_plugins_table.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS plugins; diff --git a/database/migrations/20230621124816_create_plugins_table.up.sql b/database/migrations/20230621124816_create_plugins_table.up.sql new file mode 100644 index 00000000..7df34062 --- /dev/null +++ b/database/migrations/20230621124816_create_plugins_table.up.sql @@ -0,0 +1,14 @@ +CREATE TABLE plugins +( + id integer PRIMARY KEY AUTOINCREMENT NOT NULL, + slug varchar(255) NOT NULL, + version varchar(255) NOT NULL, + show boolean DEFAULT 0 NOT NULL, + show_order integer DEFAULT 0 NOT NULL, + created_at datetime NOT NULL, + updated_at datetime NOT NULL +); + +CREATE UNIQUE INDEX plugins_slug_unique ON plugins (slug); +CREATE INDEX plugins_show_index ON plugins (show); +CREATE INDEX plugins_show_order_index ON plugins (show_order); diff --git a/database/migrations/20230621124826_create_tasks_table.down.sql b/database/migrations/20230621124826_create_tasks_table.down.sql new file mode 100644 index 00000000..2ff13806 --- /dev/null +++ b/database/migrations/20230621124826_create_tasks_table.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS tasks; diff --git a/database/migrations/20230621124826_create_tasks_table.up.sql b/database/migrations/20230621124826_create_tasks_table.up.sql new file mode 100644 index 00000000..c1bd47d3 --- /dev/null +++ b/database/migrations/20230621124826_create_tasks_table.up.sql @@ -0,0 +1,12 @@ +CREATE TABLE tasks +( + id integer PRIMARY KEY AUTOINCREMENT NOT NULL, + name varchar(255) NOT NULL, + status varchar(255) DEFAULT 'waiting' NOT NULL, + shell varchar(255) DEFAULT NULL, + log varchar(255) DEFAULT NULL, + created_at datetime NOT NULL, + updated_at datetime NOT NULL +); + +CREATE INDEX tasks_status_index ON tasks (status); diff --git a/database/migrations/20230621124844_create_monitors_table.down.sql b/database/migrations/20230621124844_create_monitors_table.down.sql new file mode 100644 index 00000000..7de47d07 --- /dev/null +++ b/database/migrations/20230621124844_create_monitors_table.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS monitors; diff --git a/database/migrations/20230621124844_create_monitors_table.up.sql b/database/migrations/20230621124844_create_monitors_table.up.sql new file mode 100644 index 00000000..db046fdb --- /dev/null +++ b/database/migrations/20230621124844_create_monitors_table.up.sql @@ -0,0 +1,7 @@ +CREATE TABLE monitors +( + id integer PRIMARY KEY AUTOINCREMENT NOT NULL, + info text NOT NULL, + created_at datetime NOT NULL, + updated_at datetime NOT NULL +); diff --git a/database/migrations/20230621124930_create_crons_table.down.sql b/database/migrations/20230621124930_create_crons_table.down.sql new file mode 100644 index 00000000..27af0b2c --- /dev/null +++ b/database/migrations/20230621124930_create_crons_table.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS crons; diff --git a/database/migrations/20230621124930_create_crons_table.up.sql b/database/migrations/20230621124930_create_crons_table.up.sql new file mode 100644 index 00000000..5160e757 --- /dev/null +++ b/database/migrations/20230621124930_create_crons_table.up.sql @@ -0,0 +1,16 @@ +CREATE TABLE crons +( + id integer PRIMARY KEY AUTOINCREMENT NOT NULL, + name varchar(255) NOT NULL, + status boolean DEFAULT 0 NOT NULL, + type varchar(255) NOT NULL, + time varchar(255) NOT NULL, + shell varchar(255) DEFAULT NULL, + log varchar(255) DEFAULT NULL, + created_at datetime NOT NULL, + updated_at datetime NOT NULL +); + +CREATE UNIQUE INDEX crons_name_unique ON crons (name); +CREATE INDEX crons_status_index ON crons (status); +CREATE INDEX crons_type_index ON crons (type); diff --git a/go.mod b/go.mod new file mode 100644 index 00000000..57e9c10f --- /dev/null +++ b/go.mod @@ -0,0 +1,171 @@ +module panel + +go 1.18 + +require ( + github.com/goravel/framework v1.12.2 + google.golang.org/grpc v1.56.0 +) + +require ( + cloud.google.com/go v0.110.0 // indirect + cloud.google.com/go/compute v1.19.1 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v0.13.0 // indirect + cloud.google.com/go/pubsub v1.30.0 // indirect + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect + github.com/Azure/go-autorest v14.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.16 // indirect + github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect + github.com/Azure/go-autorest/logger v0.2.1 // indirect + github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect + github.com/RichardKnop/logging v0.0.0-20190827224416-1a693bdd4fae // indirect + github.com/RichardKnop/machinery/v2 v2.0.11 // indirect + github.com/aws/aws-sdk-go v1.37.16 // indirect + github.com/bytedance/sonic v1.9.1 // indirect + github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/containerd/continuity v0.3.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/docker/cli v20.10.22+incompatible // indirect + github.com/docker/docker v20.10.24+incompatible // indirect + github.com/docker/go-connections v0.4.0 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/gin-contrib/static v0.0.1 // indirect + github.com/gin-gonic/gin v1.9.1 // indirect + github.com/glebarez/go-sqlite v1.21.1 // indirect + github.com/glebarez/sqlite v1.8.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.14.1 // indirect + github.com/go-redis/redis/v8 v8.11.5 // indirect + github.com/go-redsync/redsync/v4 v4.0.4 // indirect + github.com/go-sql-driver/mysql v1.7.1 // indirect + github.com/go-stack/stack v1.8.0 // indirect + github.com/goccy/go-json v0.10.2 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang-migrate/migrate/v4 v4.16.2 // indirect + github.com/golang-module/carbon/v2 v2.2.3 // indirect + github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect + github.com/golang-sql/sqlexp v0.1.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/gomodule/redigo v2.0.0+incompatible // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/s2a-go v0.1.3 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/google/wire v0.5.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect + github.com/googleapis/gax-go/v2 v2.8.0 // indirect + github.com/gookit/color v1.5.3 // indirect + github.com/gookit/filter v1.1.4 // indirect + github.com/gookit/goutil v0.5.15 // indirect + github.com/gookit/validate v1.4.6 // indirect + github.com/goravel/file-rotatelogs v0.0.0-20211215053220-2ab31dd9575c // indirect + github.com/goravel/file-rotatelogs/v2 v2.4.1 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/imdario/mergo v0.3.13 // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jackc/pgx/v5 v5.3.1 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kelseyhightower/envconfig v1.4.0 // indirect + github.com/klauspost/compress v1.16.6 // indirect + github.com/klauspost/cpuid/v2 v2.2.5 // indirect + github.com/leodido/go-urn v1.2.4 // indirect + github.com/lestrrat-go/strftime v1.0.5 // indirect + github.com/lib/pq v1.10.2 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/microsoft/go-mssqldb v1.1.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/moby/term v0.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.0.2 // indirect + github.com/opencontainers/runc v1.1.5 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/ory/dockertest/v3 v3.10.0 // indirect + github.com/patrickmn/go-cache v2.1.0+incompatible // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 // indirect + github.com/robfig/cron/v3 v3.0.1 // indirect + github.com/rs/cors v1.9.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/spf13/afero v1.9.5 // indirect + github.com/spf13/cast v1.5.1 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.16.0 // indirect + github.com/streadway/amqp v1.0.0 // indirect + github.com/stretchr/objx v0.5.0 // indirect + github.com/stretchr/testify v1.8.4 // indirect + github.com/subosito/gotenv v1.4.2 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect + github.com/unrolled/secure v1.13.0 // indirect + github.com/urfave/cli/v2 v2.25.6 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.1.1 // indirect + github.com/xdg-go/stringprep v1.0.3 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.2.0 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect + go.mongodb.org/mongo-driver v1.7.5 // indirect + go.opencensus.io v0.24.0 // indirect + go.uber.org/atomic v1.11.0 // indirect + golang.org/x/arch v0.3.0 // indirect + golang.org/x/crypto v0.10.0 // indirect + golang.org/x/mod v0.10.0 // indirect + golang.org/x/net v0.11.0 // indirect + golang.org/x/oauth2 v0.7.0 // indirect + golang.org/x/sync v0.2.0 // indirect + golang.org/x/sys v0.9.0 // indirect + golang.org/x/text v0.10.0 // indirect + golang.org/x/tools v0.9.1 // indirect + google.golang.org/api v0.122.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20230525234025-438c736192d0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect + google.golang.org/protobuf v1.30.0 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + gorm.io/driver/mysql v1.5.1 // indirect + gorm.io/driver/postgres v1.5.2 // indirect + gorm.io/driver/sqlserver v1.5.1 // indirect + gorm.io/gorm v1.25.1 // indirect + gorm.io/plugin/dbresolver v1.4.1 // indirect + modernc.org/libc v1.22.3 // indirect + modernc.org/mathutil v1.5.0 // indirect + modernc.org/memory v1.5.0 // indirect + modernc.org/sqlite v1.21.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 00000000..ed9b670a --- /dev/null +++ b/go.sum @@ -0,0 +1,1093 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.110.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/iam v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/kms v1.10.1 h1:7hm1bRqGCA1GBRQUrp831TwJ9TWhP+tvLuP497CQS2g= +cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.10.0/go.mod h1:eNpTrkOy7dCpkNyaSNetMa6udbgecJMd0ZsTJS/cuNo= +cloud.google.com/go/pubsub v1.30.0 h1:vCge8m7aUKBJYOgrZp7EsNDf6QMd2CAlXZqWTn3yq6s= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest/adal v0.9.16 h1:P8An8Z9rH1ldbOLdFpxYorgOt2sywL9V24dAwWHPuGc= +github.com/Azure/go-autorest/autorest/adal v0.9.16/go.mod h1:tGMin8I49Yij6AQ+rvV+Xa/zwxYQB5hmsd6DkfAx2+A= +github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= +github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= +github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +github.com/RichardKnop/logging v0.0.0-20190827224416-1a693bdd4fae h1:DcFpTQBYQ9Ct2d6sC7ol0/ynxc2pO1cpGUM+f4t5adg= +github.com/RichardKnop/logging v0.0.0-20190827224416-1a693bdd4fae/go.mod h1:rJJ84PyA/Wlmw1hO+xTzV2wsSUon6J5ktg0g8BF2PuU= +github.com/RichardKnop/machinery/v2 v2.0.11 h1:BTfLGOmOju3W/OtlZmLX26OjYNZsU4PJo04pQReycdc= +github.com/RichardKnop/machinery/v2 v2.0.11/go.mod h1:b5Q6cT/w7YLlIl4Vi+jpdEoyYiqhTgx+0USoKb1wzqU= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= +github.com/aws/aws-sdk-go v1.37.16 h1:Q4YOP2s00NpB9wfmTDZArdcLRuG9ijbnoAwTW3ivleI= +github.com/aws/aws-sdk-go v1.37.16/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/dhui/dktest v0.3.16 h1:i6gq2YQEtcrjKbeJpBkWjE8MmLZPYllcjOFbTZuPDnw= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/docker/cli v20.10.22+incompatible h1:0E7UqWPcn4SlvLImMHyh6xwyNRUGdPxhstpHeh0bFL0= +github.com/docker/cli v20.10.22+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE= +github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= +github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +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-contrib/static v0.0.1 h1:JVxuvHPuUfkoul12N7dtQw7KRn/pSMq7Ue1Va9Swm1U= +github.com/gin-contrib/static v0.0.1/go.mod h1:CSxeF+wep05e0kCOsqWdAWbSszmc31zTIbD8TvWl7Hs= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/glebarez/go-sqlite v1.21.1 h1:7MZyUPh2XTrHS7xNEHQbrhfMZuPSzhkm2A1qgg0y5NY= +github.com/glebarez/go-sqlite v1.21.1/go.mod h1:ISs8MF6yk5cL4n/43rSOmVMGJJjHYr7L2MbZZ5Q4E2E= +github.com/glebarez/sqlite v1.8.0 h1:02X12E2I/4C1n+v90yTqrjRa8yuo7c3KeHI3FRznCvc= +github.com/glebarez/sqlite v1.8.0/go.mod h1:bpET16h1za2KOOMb8+jCp6UBP/iahDpfPQqSaYLTLx8= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-playground/validator/v10 v10.14.1 h1:9c50NUPC30zyuKprjL3vNZ0m5oG+jU0zvx4AqHGnv4k= +github.com/go-playground/validator/v10 v10.14.1/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= +github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-redis/redis/v7 v7.4.0 h1:7obg6wUoj05T0EpY0o8B59S9w5yeMWql7sw2kwNW1x4= +github.com/go-redis/redis/v7 v7.4.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= +github.com/go-redis/redis/v8 v8.1.1/go.mod h1:ysgGY09J/QeDYbu3HikWEIPCwaeOkuNoTgKayTEaEOw= +github.com/go-redis/redis/v8 v8.6.0/go.mod h1:DQ9q4Rk2HtwkrwVrdgmphoOQDMfpvcd/nHEwRsicg8s= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= +github.com/go-redsync/redsync/v4 v4.0.4 h1:ru0qG+VCefaZSx3a5ADmlKZXkNdgeeYWIuymDu/tzV8= +github.com/go-redsync/redsync/v4 v4.0.4/go.mod h1:QBOJAs1k8O6Eyrre4a++pxQgHe5eQ+HF56KuTVv+8Bs= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= +github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= +github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-migrate/migrate/v4 v4.16.2 h1:8coYbMKUyInrFk1lfGfRovTLAW7PhWp8qQDT2iKfuoA= +github.com/golang-migrate/migrate/v4 v4.16.2/go.mod h1:pfcJX4nPHaVdc5nmdCikFBWtm+UBpiZjRNNsyBbp0/o= +github.com/golang-module/carbon/v2 v2.2.3 h1:WvGIc5+qzq9drNzH+Gnjh1TZ0JgDY/IA+m2Dvk7Qm4Q= +github.com/golang-module/carbon/v2 v2.2.3/go.mod h1:LdzRApgmDT/wt0eNT8MEJbHfJdSqCtT46uZhfF30dqI= +github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA= +github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A= +github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/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/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +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/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= +github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= +github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +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.4.1/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/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= +github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8= +github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= +github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gookit/color v1.5.2/go.mod h1:w8h4bGiHeeBpvQVePTutdbERIUf3oJE5lZ8HM0UgXyg= +github.com/gookit/color v1.5.3 h1:twfIhZs4QLCtimkP7MOxlF3A0U/5cDPseRT9M/+2SCE= +github.com/gookit/color v1.5.3/go.mod h1:NUzwzeehUfl7GIb36pqId+UGmRfQcU/WiiyTTeNjHtE= +github.com/gookit/filter v1.1.4 h1:SXd6PEumiP/0jtF2crQRaz1wmKwHbW9xg5Ds6/ZP16w= +github.com/gookit/filter v1.1.4/go.mod h1:0CEPQvudso375RitQf9X8HerUg9cz8N7c/yn6b1RMzM= +github.com/gookit/goutil v0.5.12/go.mod h1:6vhWm/bSYXGE8poqFbFz6IGM7jV2r6qVhyK567SX/AI= +github.com/gookit/goutil v0.5.15 h1:FaRyj0uVqi7j92QHsG+2Sc1VZ7/7ma77UD3/wBpwyTc= +github.com/gookit/goutil v0.5.15/go.mod h1:ozPE16eJS9f89aVbVk05ocEJsia3KPrYUqPTs8GvUTw= +github.com/gookit/validate v1.4.6 h1:Ix8NRy2+6z4YGHWXgZL9+emy9wRI2GWyhW2smPcIlSU= +github.com/gookit/validate v1.4.6/go.mod h1:1rjeYaYlMK/8od4oge5C+Gt/3DnHkXymLPda7+3urC8= +github.com/goravel/file-rotatelogs v0.0.0-20211215053220-2ab31dd9575c h1:obhFK91JAhcf7s6h5sggZishm1VyGW/gBCreo+7/SwQ= +github.com/goravel/file-rotatelogs v0.0.0-20211215053220-2ab31dd9575c/go.mod h1:YSWsLXlG16u5CWFaXNZHhEQD10+NwF3xfgDV816OwLE= +github.com/goravel/file-rotatelogs/v2 v2.4.1 h1:ogkeIFcTHSBRUBpZYiyJbpul8hkVXxHPuDbOaP78O1M= +github.com/goravel/file-rotatelogs/v2 v2.4.1/go.mod h1:euk9qr52WrzM8ICs1hecFcR4CZ/ZZOPdacHfvHgbOf0= +github.com/goravel/framework v1.12.2 h1:2d+RQEVzcky6ff6LxlcPvnAj0tZPc0Y4yQAXQk88+nA= +github.com/goravel/framework v1.12.2/go.mod h1:96GRS8270PKLfJU9zrrLE7XKlp20S2TJ9RB337jBMy4= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.3.1 h1:Fcr8QJ1ZeLi5zsPZqQeUZhNhxfkkKBOgJuYkJHoBOtU= +github.com/jackc/pgx/v5 v5.3.1/go.mod h1:t3JDKnCBlYIc0ewLF0Q7B8MXmoIaBOZj/ic7iHozM/8= +github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= +github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= +github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= +github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= +github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs= +github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= +github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag= +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.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible h1:jdpOPRN1zP63Td1hDQbZW73xKmzDvZHzVdNYxhnTMDA= +github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible/go.mod h1:1c7szIrayyPPB/987hsnvNzLushdWf4o/79s3P08L8A= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= +github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.16.6 h1:91SKEy4K37vkp255cJ8QesJhjyRO0hn9i9G0GoUwLsk= +github.com/klauspost/compress v1.16.6/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= +github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8= +github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is= +github.com/lestrrat-go/strftime v0.0.0-20180821113735-8b31f9c59b0f/go.mod h1:RMlXygAD3c48Psmr06d2G75L4E4xxzxkIe/+ppX9eAU= +github.com/lestrrat-go/strftime v1.0.5 h1:A7H3tT8DhTz8u65w+JRpiBxM4dINQhUXAZnhBa2xeOE= +github.com/lestrrat-go/strftime v1.0.5/go.mod h1:E1nN3pCbtMSu1yjSVeyuRFVm/U0xoR76fd03sz+Qz4g= +github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= +github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/microsoft/go-mssqldb v1.1.0 h1:jsV+tpvcPTbNNKW0o3kiCD69kOHICsfjZ2VcVu2lKYc= +github.com/microsoft/go-mssqldb v1.1.0/go.mod h1:LzkFdl4z2Ck+Hi+ycGOTbL56VEfgoyA2DvYejrNGbRk= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= +github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +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/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.1/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.2/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= +github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v1.1.5 h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs= +github.com/opencontainers/runc v1.1.5/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/ory/dockertest/v3 v3.10.0 h1:4K3z2VMe8Woe++invjaTB7VRyQXQy5UY+loujO4aNE4= +github.com/ory/dockertest/v3 v3.10.0/go.mod h1:nr57ZbRWMqfsdGdFNLHz5jjNdDb7VVFnzAeW1n5N1Lg= +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +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/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 h1:mZHayPoR0lNmnHyvtYjDeq0zlVHn9K/ZXoy17ylucdo= +github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5/go.mod h1:GEXHk5HgEKCvEIIrSpFI3ozzG5xOKA2DVlEX/gGnewM= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rs/cors v1.9.0 h1:l9HGsTsHJcvW14Nk7J9KFz8bzeAWXn3CG6bgt7LsrAE= +github.com/rs/cors v1.9.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= +github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= +github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= +github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= +github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= +github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= +github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +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/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203 h1:QVqDTf3h2WHt08YuiTGPZLls0Wq99X9bWd0Q5ZSBesM= +github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203/go.mod h1:oqN97ltKNihBbwlX8dLpwxCl3+HnXKV/R0e+sRLd9C8= +github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= +github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/tebeka/strftime v0.1.3/go.mod h1:7wJm3dZlpr4l/oVK0t1HYIc4rMzQ2XJlOMIUJUJH6XQ= +github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/unrolled/secure v1.13.0 h1:sdr3Phw2+f8Px8HE5sd1EHdj1aV3yUwed/uZXChLFsk= +github.com/unrolled/secure v1.13.0/go.mod h1:BmF5hyM6tXczk3MpQkFf1hpKSRqCyhqcbiQtiAF7+40= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.25.6 h1:yuSkgDSZfH3L1CjF2/5fNNg2KbM47pY2EvjBq4ESQnU= +github.com/urfave/cli/v2 v2.25.6/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= +github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo= +github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.mongodb.org/mongo-driver v1.4.6/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= +go.mongodb.org/mongo-driver v1.7.5 h1:ny3p0reEpgsR2cfA5cjgwFZg3Cv/ofFh/8jbhGtz9VI= +go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/otel v0.11.0/go.mod h1:G8UCk+KooF2HLkgo8RHX9epABH/aRGYET7gQOqBVdB0= +go.opentelemetry.io/otel v0.17.0/go.mod h1:Oqtdxmf7UtEvL037ohlgnaYa1h7GtMh0NcSd9eqkC9s= +go.opentelemetry.io/otel/metric v0.17.0/go.mod h1:hUz9lH1rNXyEwWAhIWCMFWKhYtpASgSnObJFnU26dJ0= +go.opentelemetry.io/otel/oteltest v0.17.0/go.mod h1:JT/LGFxPwpN+nlsTiinSYjdIx3hZIGqHCpChcIZmdoE= +go.opentelemetry.io/otel/trace v0.17.0/go.mod h1:bIujpqg6ZL6xUTubIUgziI1jSaUPthmabA/ygf/6Cfg= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0 h1:pVgRXcIictcr+lBQIFeiwuwtDIs4eL21OuM9nyAADmo= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +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-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +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-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/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-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210113205817-d3ed898aa8a3/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +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-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/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-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +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-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.39.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= +google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +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/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210207032614-bba0dbe2a9ea/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20230525234025-438c736192d0 h1:x1vNwUhVOcsYoKyEGCZBH694SBmmBjA2EfauFVEI2+M= +google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a h1:HiYVD+FGJkTo+9zj1gqz0anapsa1JxjiSrN+BJKyUmE= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.56.0 h1:+y7Bs8rtMd07LeXmL3NxcTLn7mUkbKZqEpPhMNkwJEE= +google.golang.org/grpc v1.56.0/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= +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/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.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= +gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/mysql v1.4.3/go.mod h1:sSIebwZAVPiT+27jK9HIwvsqOGKx3YMPmrA3mBJR10c= +gorm.io/driver/mysql v1.5.1 h1:WUEH5VF9obL/lTtzjmML/5e6VfFR/788coz2uaVCAZw= +gorm.io/driver/mysql v1.5.1/go.mod h1:Jo3Xu7mMhCyj8dlrb3WoCaRd1FhsVh+yMXb1jUInf5o= +gorm.io/driver/postgres v1.5.2 h1:ytTDxxEv+MplXOfFe3Lzm7SjG09fcdb3Z/c056DTBx0= +gorm.io/driver/postgres v1.5.2/go.mod h1:fmpX0m2I1PKuR7mKZiEluwrP3hbs+ps7JIGMUBpCgl8= +gorm.io/driver/sqlserver v1.5.1 h1:wpyW/pR26U94uaujltiFGXY7fd2Jw5hC9PB1ZF/Y5s4= +gorm.io/driver/sqlserver v1.5.1/go.mod h1:AYHzzte2msKTmYBYsSIq8ZUsznLJwBdkB2wpI+kt0nM= +gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/gorm v1.24.3/go.mod h1:DVrVomtaYTbqs7gB/x2uVvqnXzv0nqjB396B8cG4dBA= +gorm.io/gorm v1.25.1 h1:nsSALe5Pr+cM3V1qwwQ7rOkw+6UeLrX5O4v3llhHa64= +gorm.io/gorm v1.25.1/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +gorm.io/plugin/dbresolver v1.4.1 h1:Ug4LcoPhrvqq71UhxtF346f+skTYoCa/nEsdjvHwEzk= +gorm.io/plugin/dbresolver v1.4.1/go.mod h1:CTbCtMWhsjXSiJqiW2R8POvJ2cq18RVOl4WGyT5nhNc= +gotest.tools/v3 v3.3.0 h1:MfDY1b1/0xN1CyMlQDac0ziEy9zJQd9CXBRRDHw2jJo= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY= +modernc.org/libc v1.22.3/go.mod h1:MQrloYP209xa2zHome2a8HLiLm6k0UT8CoHpV74tOFw= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/sqlite v1.21.1 h1:GyDFqNnESLOhwwDRaHGdp2jKLDzpyT/rNLglX3ZkMSU= +modernc.org/sqlite v1.21.1/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/main.go b/main.go new file mode 100644 index 00000000..30e4b37b --- /dev/null +++ b/main.go @@ -0,0 +1,39 @@ +/* +Copyright [2022] [HaoZi Technology Co., Ltd.] + +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. +*/ +package main + +import ( + "github.com/goravel/framework/facades" + + "panel/bootstrap" +) + +func main() { + // 启动框架 + bootstrap.Boot() + + // 加载插件 + bootstrap.Plugins() + + // 启动 HTTP 服务 + go func() { + if err := facades.Route().Run(); err != nil { + facades.Log().Errorf("Route run error: %v", err) + } + }() + + select {} +} diff --git a/packages/helpers/helpers.go b/packages/helpers/helpers.go new file mode 100644 index 00000000..b7cf2924 --- /dev/null +++ b/packages/helpers/helpers.go @@ -0,0 +1,285 @@ +// Package helpers 存放辅助方法 +package helpers + +import ( + "bufio" + "bytes" + "crypto/md5" + "crypto/rand" + "fmt" + "io" + "os" + "os/exec" + "reflect" + "regexp" + "sort" + "strconv" + "strings" + "time" + "unicode/utf8" +) + +// Empty 类似于 PHP 的 empty() 函数 +func Empty(val interface{}) bool { + if val == nil { + return true + } + v := reflect.ValueOf(val) + switch v.Kind() { + case reflect.String, reflect.Array: + return v.Len() == 0 + case reflect.Map, reflect.Slice: + return v.Len() == 0 || v.IsNil() + case reflect.Bool: + return !v.Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.Interface, reflect.Ptr: + return v.IsNil() + } + return reflect.DeepEqual(val, reflect.Zero(v.Type()).Interface()) +} + +// FirstElement 安全地获取 args[0],避免 panic: runtime error: index out of range +func FirstElement(args []string) string { + if len(args) > 0 { + return args[0] + } + return "" +} + +// RandomNumber 生成长度为 length 随机数字字符串 +func RandomNumber(length int) string { + table := [...]byte{'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'} + b := make([]byte, length) + n, err := io.ReadAtLeast(rand.Reader, b, length) + if n != length { + panic(err) + } + for i := 0; i < len(b); i++ { + b[i] = table[int(b[i])%len(table)] + } + return string(b) +} + +// RandomString 生成长度为 length 的随机字符串 +func RandomString(length int) string { + b := make([]byte, length) + _, err := rand.Read(b) + if err != nil { + panic(err) + } + letters := "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + for i, v := range b { + b[i] = letters[v%byte(len(letters))] + } + return string(b) +} + +// MD5 生成字符串的 MD5 值 +func MD5(str string) string { + return fmt.Sprintf("%x", md5.Sum([]byte(str))) +} + +// FormatBytes 格式化bytes +func FormatBytes(size float64) string { + units := []string{"B", "KB", "MB", "GB", "TB"} + + i := 0 + for ; size >= 1024 && i < 4; i++ { + size /= 1024 + } + + return fmt.Sprintf("%.2f %s", size, units[i]) +} + +// Cut 裁剪字符串 +func Cut(begin, end, str string) string { + b := utf8.RuneCountInString(str[:strings.Index(str, begin)]) + utf8.RuneCountInString(begin) + e := utf8.RuneCountInString(str[:strings.Index(str, end)]) - b + return string([]rune(str)[b : b+e]) +} + +// GetNetInfo 获取网络统计信息 +func GetNetInfo() (uint64, uint64) { + file, err := os.Open("/proc/net/dev") + if err != nil { + panic(err) + } + defer file.Close() + + scanner := bufio.NewScanner(file) + allRs := make(map[string][]string) + lineNumber := 0 + + for scanner.Scan() { + lineNumber++ + if lineNumber < 3 { + continue + } + + line := strings.TrimSpace(scanner.Text()) + line = strings.Replace(line, ":", " ", -1) + re := regexp.MustCompile("[ ]+") + line = re.ReplaceAllString(line, " ") + arr := strings.Split(line, " ") + + if len(arr) > 0 && arr[0] != "" { + allRs[arr[0]+strconv.Itoa(lineNumber)] = []string{arr[0], arr[1], arr[9]} + } + } + + var keys []string + for key := range allRs { + keys = append(keys, key) + } + sort.Strings(keys) + + tx := uint64(0) + rx := uint64(0) + + for _, key := range keys { + if strings.Contains(key, "lo") { + continue + } + val := allRs[key] + txValue, err := strconv.ParseUint(val[2], 10, 64) + if err == nil { + tx += txValue + } + rxValue, err := strconv.ParseUint(val[1], 10, 64) + if err == nil { + rx += rxValue + } + } + + return tx, rx +} + +// MonitoringInfo 监控信息 +type MonitoringInfo struct { + CpuUse float64 `json:"cpu_use"` + Uptime float64 `json:"uptime"` + UptimePercent float64 `json:"uptime_percent"` + MemTotal float64 `json:"mem_total"` + MemUse float64 `json:"mem_use"` + MemUsePercent float64 `json:"mem_use_percent"` + SwapTotal float64 `json:"swap_total"` + SwapUse float64 `json:"swap_use"` + SwapUsePercent float64 `json:"swap_use_percent"` + NetTx uint64 `json:"net_tx"` + NetRx uint64 `json:"net_rx"` +} + +// GetMonitoringInfo 获取监控数据 +func GetMonitoringInfo() (MonitoringInfo, error) { + var res MonitoringInfo + + // 网络流量 + netTx1, netRx1 := GetNetInfo() + time.Sleep(time.Second) + netTx2, netRx2 := GetNetInfo() + res.NetTx = netTx2 - netTx1 + res.NetRx = netRx2 - netRx1 + + // CPU 信息 + cpuInfoRaw, err := os.ReadFile("/proc/cpuinfo") + if err != nil { + return MonitoringInfo{}, err + } + physicalArr := make(map[string]struct{}) + var siblingsSum float64 + var re = regexp.MustCompile(`\d+\.\d+`) + uptimeOutput, err := exec.Command("uptime").Output() + if err != nil { + return MonitoringInfo{}, err + } + uptimeValues := re.FindAllString(string(uptimeOutput), -1) + uptime1, _ := strconv.ParseFloat(uptimeValues[0], 64) + res.Uptime = uptime1 + processors := bytes.Split(cpuInfoRaw, []byte("\nprocessor")) + rePhysical := regexp.MustCompile(`physical id\s*:\s(.*)`) + reSiblings := regexp.MustCompile(`siblings\s*:\s(.*)`) + for _, v := range processors { + physical := rePhysical.FindSubmatch(v) + siblings := reSiblings.FindSubmatch(v) + if len(physical) > 1 { + pid := string(physical[1]) + if _, found := physicalArr[pid]; !found { + if len(siblings) > 1 { + siblingsValue, _ := strconv.ParseFloat(string(siblings[1]), 64) + siblingsSum += siblingsValue + } + physicalArr[pid] = struct{}{} + } + } + } + + // CPU 使用率 + cpuUse := 0.1 + psOutput, err := exec.Command("ps", "aux").Output() + if err != nil { + return MonitoringInfo{}, err + } + cpuRaw := strings.Split(string(psOutput), "\n") + pid := os.Getpid() + for _, v := range cpuRaw { + v = strings.TrimSpace(v) + v = regexp.MustCompile(`\s+`).ReplaceAllString(v, " ") + values := strings.Split(v, " ") + if len(values) > 2 { + p, _ := strconv.Atoi(values[1]) + if p == pid { + continue + } + cpu, _ := strconv.ParseFloat(values[2], 64) + cpuUse += cpu + } + } + cpuUse = cpuUse / siblingsSum + if cpuUse > 100 { + cpuUse = 100 + } + res.CpuUse = cpuUse + + // 内存使用率 + freeOutput, err := exec.Command("free", "-m").Output() + if err != nil { + return MonitoringInfo{}, err + } + memRaw := strings.Split(string(freeOutput), "\n") + var memList, swapList string + for _, v := range memRaw { + if strings.Contains(v, "Mem") { + memList = regexp.MustCompile(`\s+`).ReplaceAllString(v, " ") + } else if strings.Contains(v, "Swap") { + swapList = regexp.MustCompile(`\s+`).ReplaceAllString(v, " ") + } + } + memArr := strings.Split(memList, " ") + swapArr := strings.Split(swapList, " ") + memTotal, _ := strconv.ParseFloat(memArr[1], 64) + swapTotal, _ := strconv.ParseFloat(swapArr[1], 64) + memUse, _ := strconv.ParseFloat(memArr[2], 64) + swapUse, _ := strconv.ParseFloat(swapArr[2], 64) + memUseP := (memUse / memTotal) * 100 + swapUseP := (swapUse / swapTotal) * 100 + uptime1P := uptime1 * 10 + if uptime1P > 100 { + uptime1P = 100 + } + + res.MemTotal = memTotal + res.MemUse = memUse + res.MemUsePercent = memUseP + res.SwapTotal = swapTotal + res.SwapUse = swapUse + res.SwapUsePercent = swapUseP + res.UptimePercent = uptime1P + + return res, nil +} diff --git a/plugins/openresty/http/controllers/openresty_controller.go b/plugins/openresty/http/controllers/openresty_controller.go new file mode 100644 index 00000000..69f09258 --- /dev/null +++ b/plugins/openresty/http/controllers/openresty_controller.go @@ -0,0 +1,21 @@ +package controllers + +import ( + "github.com/goravel/framework/contracts/http" +) + +type OpenRestyController struct { + //Dependent services +} + +func NewOpenrestyController() *OpenRestyController { + return &OpenRestyController{ + //Inject services + } +} + +func (r *OpenRestyController) Show(ctx http.Context) { + ctx.Response().Success().Json(http.Json{ + "Hello": "Goravel", + }) +} diff --git a/plugins/openresty/openresty.go b/plugins/openresty/openresty.go new file mode 100644 index 00000000..19d2c92e --- /dev/null +++ b/plugins/openresty/openresty.go @@ -0,0 +1,13 @@ +package openresty + +const ( + Name = "OpenResty" + Author = "耗子" + Description = "OpenResty® 是一款基于 NGINX 和 LuaJIT 的 Web 平台。" + Slug = "openresty" + Version = "1.21.4.1" +) + +func Boot() { + Route() +} diff --git a/plugins/openresty/routes.go b/plugins/openresty/routes.go new file mode 100644 index 00000000..de46aff8 --- /dev/null +++ b/plugins/openresty/routes.go @@ -0,0 +1,22 @@ +package openresty + +import ( + "github.com/goravel/framework/contracts/http" + "github.com/goravel/framework/contracts/route" + "github.com/goravel/framework/facades" + + "panel/plugins/openresty/http/controllers" +) + +func Route() { + facades.Route().Prefix("api/plugins/openresty").Group(func(route route.Route) { + route.Get("/openresty", func(ctx http.Context) { + ctx.Response().Json(http.StatusOK, http.Json{ + "Hello": "Openresty", + }) + }) + + openRestyController := controllers.NewOpenrestyController() + route.Get("/openresty/users/{id}", openRestyController.Show) + }) +} diff --git a/public/.gitignore b/public/.gitignore new file mode 100644 index 00000000..d3085248 --- /dev/null +++ b/public/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +.env +pnpm-lock.yaml diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 00000000..9161b3eb Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 00000000..b8e1ea94 --- /dev/null +++ b/public/index.html @@ -0,0 +1,52 @@ + + + + + + + 加载中... + + + + + + + +
+ + + + diff --git a/public/res/adminui/src/css/admin.css b/public/res/adminui/src/css/admin.css new file mode 100644 index 00000000..a27cee07 --- /dev/null +++ b/public/res/adminui/src/css/admin.css @@ -0,0 +1,1576 @@ +/** + * admin.css + */ + +html #layuicss-layuiAdmin { + display: none; + position: absolute; + width: 1989px; +} + + +/* 系统 */ +::-webkit-input-placeholder { + color: #ccc +} + +/** 滚动条 **/ +/* +::-webkit-scrollbar{width: 10px; height: 10px;} +::-webkit-scrollbar-button:vertical{display: none;} +::-webkit-scrollbar-track, ::-webkit-scrollbar-corner{background-color: #e2e2e2;} +::-webkit-scrollbar-thumb{border-radius: 0; background-color: rgba(0,0,0,.3);} +::-webkit-scrollbar-thumb:vertical:hover{background-color: rgba(0,0,0,.35);} +::-webkit-scrollbar-thumb:vertical:active{background-color: rgba(0,0,0,.38);} +*/ + + +/* 全局 */ +html { + background-color: #f2f2f2; + color: #5F5F5F; +} + +*[template], +.layadmin-tabsbody-item { + display: none; +} + +*[lay-href], +*[lay-tips], +*[layadmin-event] { + cursor: pointer; +} + +/* 重置布局结构 */ +.layui-layout-admin .layui-header { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 50px; +} + +/* +.layui-layout-admin .layui-header .layui-layout-right .layui-nav-item a{color: #fff;} +.layui-layout-admin .layui-header .layui-layout-right .layui-nav-item a cite{color: rgba(255,255,255,.7);} +*/ + +.layui-layout-admin .layui-header .layui-nav .layui-nav-child a { + color: #333; +} + +.layui-layout-admin .layui-side { + width: 220px; + top: 0; + z-index: 1001; +} + +.layui-layout-admin .layui-logo, +.layui-layout-admin .layui-header .layui-nav .layui-nav-item { + height: 50px; + line-height: 50px; +} + +.layui-layout-admin .layui-logo { + position: fixed; + left: 0; + top: 0; + z-index: 1002; + width: 220px; + height: 49px; + padding: 0 15px; + box-sizing: border-box; + overflow: hidden; + font-weight: 300; + background-repeat: no-repeat; + background-position: center center; +} + +.layui-layout-admin .layui-layout-left, +.layadmin-pagetabs, +.layui-layout-admin .layui-body, +.layui-layout-admin .layui-footer { + left: 220px; +} + +.layadmin-pagetabs { + position: fixed; + top: 50px; + right: 0; + z-index: 999; +} + +.layadmin-pagetabs .layui-breadcrumb { + padding: 0 15px; +} + +.layui-layout-admin .layui-body { + position: fixed; + top: 90px; + bottom: 0; +} + +.layui-layout-admin .layui-body .layadmin-tabsbody-item { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + overflow: hidden; + overflow-y: auto; +} + +.layui-layout-admin .layui-header .layui-nav-img { + width: 26px; + height: 26px; +} + +.layui-layout-admin .layui-header .layui-nav-child { + top: 55px; +} + +.layui-layout-admin .layui-header .layui-layout-right .layui-nav-child { + left: auto; + right: 0; +} + +.layui-layout-admin .layui-header .layui-nav .layui-nav-child dd.layui-this a, +.layui-layout-admin .layui-header .layui-nav .layui-nav-child dd.layui-this { + background: none +} + +/* 统一动画 */ +.layui-layout-admin .layui-header .layui-nav .layui-nav-item, +.layui-layout-admin .layui-layout-left, +.layadmin-pagetabs, +.layui-layout-admin .layui-body, +.layui-layout-admin .layui-footer, +.layui-layout-admin .layui-side, +.layui-layout-admin .layui-logo, +.layui-layout-admin .layui-header .layui-layout-right { + transition: all .3s; + -webkit-transition: all .3s; +} + +/* 图标 */ +.layui-icon-login-qq { + color: #3492ED; +} + +.layui-icon-login-wechat { + color: #4DAF29; +} + +.layui-icon-login-weibo { + color: #CF1900; +} + +/* 重置表格风格 */ +/* +.layui-table th, +.layui-table td, +.layui-table[lay-skin="line"], +.layui-table[lay-skin="row"], +.layui-table-view, +.layui-table-header, +.layui-table-tool, +.layui-table-page, +.layui-table-fixed-r, +.layui-table-tips-main{border-color: #f5f5f5;} + +.layui-table thead tr, +.layui-table-header, +.layui-table-tool, +.layui-table-patch, +.layui-table-mend{background-color: #fff;} + +.layui-table[lay-even] tr:nth-child(even), +.layui-table tbody tr:hover, +.layui-table-hover, +.layui-table-click{background-color: #f8f8f8;} +*/ + +/* 表单 */ +.layui-form[wid100] .layui-form-label { + width: 100px; +} + +.layui-form[wid100] .layui-input-block { + margin-left: 130px; +} + +@media screen and (max-width: 450px) { + .layui-form[wid100] .layui-form-item .layui-input-inline { + margin-left: 132px; + } + + .layui-form[wid100] .layui-form-item .layui-input-inline + .layui-form-mid { + margin-left: 130px; + } +} + +.layui-form-item .layui-input-company { + width: auto; + padding-right: 10px; + line-height: 38px; +} + +/* 辅助 */ +.layadmin-flexible { +} + +.layui-bg-white { + background-color: #fff; +} + +.layadmin-loading { + position: absolute; + left: 50%; + top: 50%; + margin: -16px -15px; + font-size: 30px; + color: #c2c2c2; +} + +.layadmin-fixed { + position: fixed; + left: 0; + top: 0; + z-index: 999; +} + +.layadmin-link { + color: #029789 !important; +} + +.layadmin-link:hover { + opacity: 0.8; +} + +/* 弹出面板 */ +.layui-layer-admin .layui-layer-title { + height: 50px; + line-height: 50px; + border: none 0; + background-color: #20222A; + color: #fff; +} + +.layui-layer-admin i[close] { + position: absolute; + padding: 5px; + right: 10px; + top: 12px; + color: #fff; + cursor: pointer; +} + +.layui-layer-admin .layui-layer-content { + padding: 20px; + line-height: 22px; +} + +.layui-layer-admin .layui-layer-content cite { + font-style: normal; + color: #FF5722; +} + +/* 右侧面板 */ +.layui-layer-adminRight { + top: 50px !important; + bottom: 0; + box-shadow: 1px 1px 10px rgba(0, 0, 0, .1); + border-radius: 0; + overflow: auto; +} + +/* 弹出便签 */ +.layadmin-note .layui-layer-content { + padding: 0; +} + +.layadmin-note textarea { + display: block; + width: 300px; + height: 132px; + min-width: 300px; + min-height: 132px; + line-height: 20px; + padding: 10px 20px; + border: none; + box-sizing: border-box; + color: #5F5F5F; + word-wrap: break-word; +} + +/* 头部导航 */ +.layui-layout-admin .layui-layout-left { + padding: 0 10px; +} + +.layui-layout-admin .layui-layout-left .layui-nav-item { + margin: 0 20px; +} + +.layui-layout-admin .layui-input-search { + display: inline-block; + vertical-align: middle; + height: 32px; + border: none; + cursor: text; +} + +.layui-layout-admin .layui-layout-left a { + padding: 0; +} + +.layui-layout-admin .layui-layout-right { + padding: 0; +} + +.layui-header .layui-nav-item:hover { +} + +.layui-header .layui-layout-right .layui-badge-dot { + margin-left: 0px; +} + +.layui-header .layui-nav .layui-this:after, +.layui-layout-admin .layui-header .layui-nav-bar { + top: 0 !important; + bottom: auto; + height: 3px; + background-color: #fff; + background-color: rgba(255, 255, 255, .3); +} + +/* 遮罩 */ +.layadmin-body-shade { + position: fixed; + display: none; + left: 0; + right: 0; + top: 0; + bottom: 0; + background-color: rgba(0, 0, 0, .3); + z-index: 1000; +} + +/* 侧边菜单 */ +.layui-side-menu .layui-side-scroll { + width: 240px; +} + +.layui-side-menu .layui-nav { + width: 220px; + margin-top: 50px; + background: none; +} + +.layui-side-menu .layui-nav .layui-nav-item a { + padding-left: 45px; + padding-right: 30px; +} + +.layui-side-menu .layui-nav .layui-nav-item a:hover { + background: none; +} + +.layui-side-menu .layui-nav .layui-nav-itemed > .layui-nav-child { + padding: 5px 0; +} + +.layui-side-menu .layui-nav > .layui-nav-item .layui-icon:first-child { + position: absolute; + top: 50%; + left: 20px; + margin-top: -19px; +} + +.layui-side-menu .layui-nav .layui-nav-child .layui-nav-child { + background: none !important; +} + +.layui-side-menu .layui-nav .layui-nav-child .layui-nav-child a { + padding-left: 60px +} + +/* 侧边菜单 - 平板移动设备 */ +@media screen and (max-width: 992px) { + .layui-layout-admin .layui-side { + transform: translate3d(-220px, 0, 0); + -webkit-transform: translate3d(-220px, 0, 0); + width: 220px; + } + + .layui-layout-admin .layui-layout-left, + .layadmin-pagetabs, + .layui-layout-admin .layui-body, + .layui-layout-admin .layui-footer { + left: 0; + } +} + +/* 侧边收缩模式 */ +.layadmin-side-shrink .layui-layout-admin .layui-logo { + width: 60px; + background-image: url(res/logo.png); /*background-size: 20px;)*/ +} + +.layadmin-side-shrink .layui-layout-admin .layui-logo span { + display: none; +} + +.layadmin-side-shrink .layui-side { + left: 0; + width: 60px; +} + +.layadmin-side-shrink .layui-layout-admin .layui-layout-left, +.layadmin-side-shrink .layadmin-pagetabs, +.layadmin-side-shrink .layui-layout-admin .layui-body, +.layadmin-side-shrink .layui-layout-admin .layui-footer { + left: 60px; +} + +.layadmin-side-shrink .layui-side-menu .layui-nav { + position: static; + width: 60px; +} + +.layadmin-side-shrink .layui-side-menu .layui-nav-item { + position: static; +} + +.layadmin-side-shrink .layui-side-menu .layui-nav-item > a { + padding-right: 0; +} + +.layadmin-side-shrink .layui-side-menu .layui-nav-item cite, +.layadmin-side-shrink .layui-side-menu .layui-nav > .layui-nav-item > a .layui-nav-more, +.layadmin-side-shrink .layui-side-menu .layui-nav > .layui-nav-item > .layui-nav-child { + display: none; + padding: 8px 0; + width: 200px; +} + +.layadmin-side-shrink .layui-side-menu .layui-nav > .layui-nav-itemed > a { + background: rgba(0, 0, 0, .3); +} + +/* 移动端展开模式 */ +.layadmin-side-spread-sm .layui-layout-admin .layui-layout-left, +.layadmin-side-spread-sm .layadmin-pagetabs, +.layadmin-side-spread-sm .layui-layout-admin .layui-body, +.layadmin-side-spread-sm .layui-layout-admin .layui-footer { + left: 0; + transform: translate3d(220px, 0, 0); + -webkit-transform: translate3d(220px, 0, 0); +} + +.layadmin-side-spread-sm .layui-layout-admin .layui-layout-right { + transform: translate3d(220px, 0, 0); + -webkit-transform: translate3d(220px, 0, 0); +} + +.layadmin-side-spread-sm .layui-side { + transform: translate3d(0, 0, 0); + -webkit-transform: translate3d(0, 0, 0); +} + +.layadmin-side-spread-sm .layadmin-body-shade { + display: block; +} + + +/* 页面标签 */ +.layadmin-pagetabs { + height: 40px; + line-height: 40px; + padding: 0 80px 0 40px; /*border-bottom: 2px solid #292B34;*/ + background-color: #fff; + box-sizing: border-box; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .1); +} + +.layadmin-pagetabs .layadmin-tabs-control { + position: absolute; + top: 0; + width: 40px; + height: 100%; + text-align: center; + cursor: pointer; + transition: all .3s; + -webkit-transition: all .3s; + box-sizing: border-box; + border-left: 1px solid #f5f5f5; +} + +.layadmin-pagetabs .layadmin-tabs-control:hover { + background-color: #f5f5f5; +} + +.layadmin-pagetabs .layui-icon-prev { + left: 0; + border-left: none; + border-right: 1px solid #f5f5f5; +} + +.layadmin-pagetabs .layui-icon-next { + right: 40px; + right: 40px; +} + +.layadmin-pagetabs .layui-icon-down { + right: 0; +} + +.layadmin-tabs-select.layui-nav { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + padding: 0; + background: none; +} + +.layadmin-tabs-select.layui-nav .layui-nav-item { + line-height: 40px; +} + +.layadmin-tabs-select.layui-nav .layui-nav-item > a { + height: 40px; +} + +.layadmin-tabs-select.layui-nav .layui-nav-item a { + color: #5F5F5F; +} + +.layadmin-tabs-select.layui-nav .layui-nav-child { + top: 40px; + left: auto; + right: 0; +} + +.layadmin-tabs-select.layui-nav .layui-nav-child dd.layui-this, +.layadmin-tabs-select.layui-nav .layui-nav-child dd.layui-this a { + background-color: #f2f2f2 !important; + color: #333; +} + +.layadmin-tabs-select.layui-nav .layui-nav-more, +.layadmin-tabs-select.layui-nav .layui-nav-bar { + display: none; +} + +.layadmin-pagetabs .layui-tab { + margin: 0; + overflow: hidden; +} + +.layadmin-pagetabs .layui-tab-title { + height: 40px; + border: none; +} + +.layadmin-pagetabs .layui-tab-title li { + min-width: 0; + line-height: 40px; + max-width: 160px; + text-overflow: ellipsis; + padding-right: 40px; + overflow: hidden; + border-right: 1px solid #f5f5f5; + vertical-align: top; +} + +.layadmin-pagetabs .layui-tab-title li:first-child { + padding-right: 15px; +} + +.layadmin-pagetabs .layui-tab-title li:first-child .layui-tab-close { + display: none; +} + +.layadmin-pagetabs .layui-tab-title li .layui-tab-close { + position: absolute; + right: 8px; + top: 50%; + margin: -7px 0 0 0; + width: 16px; + height: 16px; + line-height: 16px; + border-radius: 50%; + font-size: 12px; +} + +.layadmin-pagetabs .layui-tab-title li:after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 0; + height: 2px; + border-radius: 0; + background-color: #292B34; + transition: all .3s; + -webkit-transition: all .3s; +} + +.layadmin-pagetabs .layui-tab-title li:hover:after { + width: 100%; +} + +.layadmin-pagetabs .layui-tab-title li:hover, +.layadmin-pagetabs .layui-tab-title li.layui-this { + color: #16b777; +} + +.layadmin-pagetabs .layui-tab-title li.layui-this:after { + width: 100%; + border: none; + height: 2px; + background-color: #292B34; +} + +/* 不开启页面标签时 */ +.layadmin-tabspage-none .layui-layout-admin .layui-header { + border-bottom: none; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .05); +} + +.layadmin-tabspage-none .layui-layout-admin .layui-body { + top: 50px; +} + +.layadmin-tabspage-none .layadmin-header { + display: block; +} + +.layadmin-tabspage-none .layadmin-header .layui-breadcrumb { + border-top: 1px solid #f5f5f5; +} + +/* 底部固定区域 */ +.layui-layout-admin .layui-footer { + padding: 10px 0; + text-align: center; +} + +/* 默认主题修饰 */ +.layui-layout-admin .layui-header { + border-bottom: 1px solid #f5f5f5; + box-sizing: border-box; + background-color: #fff; +} + +.layui-layout-admin .layui-header a, +.layui-layout-admin .layui-header a cite { + color: #333; +} + +.layui-layout-admin .layui-header a:hover { + color: #000; +} + +.layui-layout-admin .layui-header .layui-nav .layui-nav-more { + border-top-color: #5F5F5F +} + +.layui-layout-admin .layui-header .layui-nav .layui-nav-mored { + border-color: transparent; + border-bottom-color: #5F5F5F; +} + +.layui-layout-admin .layui-header .layui-nav .layui-this:after, +.layui-layout-admin .layui-header .layui-nav-bar { + height: 2px; + background-color: #20222A +} + +.layui-layout-admin .layui-logo { + background-color: #20222A; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .15); +} + +.layui-layout-admin .layui-logo, +.layui-layout-admin .layui-logo a { + color: #fff; + color: rgba(255, 255, 255, .8) +} + +.layui-side-menu { + box-shadow: 1px 0 2px 0 rgba(0, 0, 0, .05); +} + +.layui-layout-admin .layui-footer { + box-shadow: 0 -1px 2px 0 rgba(0, 0, 0, .05); +} + +.layui-side-menu, +.layadmin-setTheme-side { + background-color: #20222A; + color: #fff; +} + +.layadmin-setTheme-header { + background-color: #fff; +} + +.layui-layout-admin .layui-footer { + background-color: #fff; +} + +.layui-tab-admin .layui-tab-title { + background-color: #393D49; + color: #fff; +} + + +/* + + 格局 + +*/ + +.layui-fluid { + padding: 15px; +} + +.layadmin-header { + display: none; + height: 50px; + line-height: 50px; + margin-bottom: 0; + border-radius: 0; +} + +.layadmin-header .layui-breadcrumb { + padding: 0 15px; +} + +.layui-card-header { + position: relative; +} + +.layui-card-header .layui-icon { + line-height: initial; + position: absolute; + right: 15px; + top: 50%; + margin-top: -7px; +} + +.layadmin-iframe { + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + right: 0; + bottom: 0; +} + + +/* + + 控制台 + +*/ + + +/* 重置轮播样式 */ +.layadmin-carousel { + height: 185px !important; + background-color: #fff; +} + +.layadmin-carousel .layui-carousel-ind li { + background-color: #e2e2e2; +} + +.layadmin-carousel .layui-carousel-ind li:hover { + background-color: #c2c2c2; +} + +.layadmin-carousel .layui-carousel-ind li.layui-this { + background-color: #999; +} + +.layadmin-carousel .layui-carousel, +.layadmin-carousel > *[carousel-item] > * { + background-color: #fff; +} + +.layadmin-carousel .layui-col-space10 { + margin: 0; +} + +.layadmin-carousel .layui-carousel-ind { + position: absolute; + top: -41px; + text-align: right; +} + +.layadmin-carousel .layui-carousel-ind ul { + background: none; +} + +/* 重置tab样式 */ +.layui-card .layui-tab-brief .layui-tab-title { + height: 42px; + border-bottom-color: #f5f5f5; +} + +.layui-card .layui-tab-brief .layui-tab-title li { + margin: 0 15px; + padding: 0; + line-height: 42px; +} + +.layui-card .layui-tab-brief .layui-tab-title li.layui-this { + color: #333; +} + +.layui-card .layui-tab-brief .layui-tab-title .layui-this:after { + height: 43px; +} + +.layui-card .layui-tab-brief .layui-tab-content { + padding: 15px; +} + +.layui-card .layui-table-view { + margin: 0; +} + +/* 快捷方式 */ +.layadmin-shortcut li { + text-align: center; +} + +.layadmin-shortcut li .layui-icon { + display: inline-block; + width: 100%; + height: 60px; + line-height: 60px; + text-align: center; + border-radius: 2px; + font-size: 30px; + background-color: #F8F8F8; + color: #333; + transition: all .3s; + -webkit-transition: all .3s; +} + +.layadmin-shortcut li cite { + position: relative; + top: 2px; + display: block; + color: #5F5F5F; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + font-size: 14px; +} + +.layadmin-shortcut li:hover .layui-icon { + background-color: #f2f2f2; +} + +/* 待办事项 */ +.layadmin-backlog .layadmin-backlog-body { + display: block; + padding: 10px 15px; + background-color: #f8f8f8; + color: #999; + border-radius: 2px; + transition: all .3s; + -webkit-transition: all .3s; +} + +.layadmin-backlog-body h3 { + padding-bottom: 10px; + font-size: 12px; +} + +.layadmin-backlog-body p cite { + font-style: normal; + font-size: 30px; + font-weight: 300; + color: #16baaa; +} + +.layadmin-backlog-body:hover { + background-color: #f2f2f2; + color: #888; +} + +/* 版本信息 */ +.layadmin-version .layui-table { + padding: 6px 0; +} + +.layadmin-version .layui-table td, +.layadmin-version .layui-table th { + line-height: 25px; +} + +/* 数据概览 */ +.layadmin-dataview { + height: 332px !important; +} + +.layadmin-dataview > *[carousel-item]:before { + display: none; +} + +.layadmin-dataview > *[carousel-item] > div { + height: 332px; +} + +/* 控制台效果报告 */ +.layadmin-takerates { + padding-top: 5px; +} + +.layadmin-takerates .layui-progress { + margin: 50px 0 60px; +} + +.layadmin-takerates .layui-progress:last-child { + margin-bottom: 10px; +} + +.layadmin-takerates .layui-progress h3 { + position: absolute; + right: 0; + top: -35px; + color: #999; + font-size: 14px; +} + +.layadmin-takerates .layui-progress-bar { + text-align: left; +} + +.layadmin-takerates .layui-progress-text { + top: -35px; + line-height: 26px; + font-size: 26px; +} + +/* 产品动态 */ +.layadmin-news { + height: 60px !important; + padding: 5px 0; +} + +.layadmin-news a { + display: block; + line-height: 60px; + text-align: center; +} + +.layadmin-news .layui-carousel-ind { + height: 45px; +} + +/* 文字列表 */ +.layadmin-list li { + margin-bottom: 6px; + padding-bottom: 6px; + border-bottom-color: #f5f5f5; + list-style-position: inside; + list-style-type: disc; +} + +.layadmin-list li { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} + +.layadmin-list li a { + color: #5F5F5F; +} + +.layadmin-list li a:hover { + color: #16baaa; +} + +.layadmin-list li:last-child { + border: none; + padding: 0; + margin: 0; +} + +/* 文本区域 */ +.layadmin-text p { + margin-bottom: 10px; + text-indent: 2em; +} + +.layadmin-text p:last-child { + margin: 0; +} + +.layadmin-font-em { + font-size: 13px; + color: #758697; +} + + +/******************************** + + 其它主页开始 + +*******************************/ + +/* 主页示例一 */ +/* 进行中的项目 */ +.layui-card-header .layui-a-tips { + position: absolute; + right: 15px; + color: #01AAED; +} + +.layuiadmin-card-text { + background-color: #f8f8f8; + color: #777; + padding: 24px; +} + +.layuiadmin-card-text .layui-text-top { + padding-bottom: 10px; +} + +.layuiadmin-card-text .layui-text-top i { + margin-right: 10px; + font-size: 24px; + color: #16baaa; +} + +.layuiadmin-card-text .layui-text-top a { + line-height: 24px; + font-size: 16px; + vertical-align: top; +} + +.layuiadmin-card-text .layui-text-center { + height: 44px; + line-height: 22px; + margin-bottom: 10px; + overflow: hidden; +} + +.layuiadmin-card-text .layui-text-bottom { + position: relative; +} + +.layuiadmin-card-text .layui-text-bottom a { + color: #777; + font-size: 12px; + text-overflow: ellipsis; + word-break: break-all; +} + +.layuiadmin-card-text .layui-text-bottom span { + color: #CCC; + font-size: 12px; + position: absolute; + right: 0; +} + +.layuiadmin-card-text a:hover, +.layuiadmin-card-link a:hover, +.layuiadmin-card-team li a:hover { + color: #01AAED; + transition: all 300ms; +} + +/* 动态 */ +.layuiadmin-card-status { + padding: 0 10px 10px 10px; +} + +.layuiadmin-card-status dd { + padding: 15px 0; + border-bottom: 1px solid #EEE; + display: -webkit-flex; + display: flex; +} + +.layuiadmin-card-status dd:last-child { + border: none; +} + +.layuiadmin-card-status dd div.layui-status-img, +.layuiadmin-card-team .layui-team-img { + width: 32px; + height: 32px; + border-radius: 50%; + background-color: #16baaa; + margin-right: 15px; +} + +.layuiadmin-card-status dd div.layui-status-img a { + width: 100%; + height: 100%; + display: inline-block; + text-align: center; + line-height: 32px; +} + +.layuiadmin-card-status dd div.layui-status-img img, +.layuiadmin-card-team .layui-team-img img { + width: 50%; + height: 50%; +} + +.layuiadmin-card-status dd div a { + color: #01AAED; +} + +.layuiadmin-card-status dd div span { + color: #BBB; +} + +/* 便捷导航 */ +.layuiadmin-card-link { + padding-left: 10px; + font-size: 0 +} + +.layuiadmin-card-link a { + display: inline-block; + width: 25%; + color: #5F5F5F; + font-size: 14px; + margin-bottom: 12px; +} + +.layuiadmin-card-link button { + vertical-align: top; +} + +.layuiadmin-card-link button:hover { + color: #16baaa; +} + +/* 团队 */ +.layuiadmin-card-team li { + padding: 10px 0 10px 10px; +} + +.layuiadmin-card-team .layui-team-img { + display: inline-block; + margin-right: 8px; + width: 24px; + height: 24px; + text-align: center; + line-height: 24px; +} + +.layuiadmin-card-team span { + color: #777; +} + + +/* 主页示例二 */ +.layuiadmin-badge { + position: absolute; + top: 50%; + margin-top: -9px; + right: 15px; + color: #01AAED; +} + +.layuiadmin-card-list { + padding: 15px; +} + +.layuiadmin-card-list p.layuiadmin-big-font { + font-size: 36px; + color: #5F5F5F; + line-height: 36px; + padding: 5px 0 10px; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + white-space: nowrap; +} + +.layuiadmin-card-list p.layuiadmin-normal-font { + padding-bottom: 10px; + font-size: 20px; + color: #5F5F5F; + line-height: 24px; +} + +.layuiadmin-span-color { + font-size: 14px; + position: absolute; + right: 15px; +} + +.layuiadmin-span-color i { + padding-left: 5px; +} + +.layuiadmin-btn-group { + position: absolute; + right: 15px; +} + +.layuiadmin-card-status li { + position: relative; + padding: 10px 0; + border-bottom: 1px solid #EEE; +} + +.layuiadmin-card-status li h3 { + padding-bottom: 5px; + font-weight: 700; +} + +.layuiadmin-card-status li p { + padding-bottom: 10px; +} + +.layuiadmin-card-status li > span { + color: #999; +} + +.layuiadmin-home2-usernote .layuiadmin-reply { + display: none; + position: absolute; + right: 0; + bottom: 12px; +} + +.layuiadmin-home2-usernote li:hover .layuiadmin-reply { + display: block; +} + +.layuiadmin-page-table td span { + color: #2F4056; +} + +.layuiadmin-page-table td span.first { + color: #FF5722; +} + +.layuiadmin-page-table td span.second { + color: #FFB800; +} + +.layuiadmin-page-table td span.third { + color: #16b777; +} + + +/****** 其它主页结束 ******/ + + +/* + + 应用 + +*/ + + +/* 消息中心 */ +.layuiAdmin-msg-detail h1 { + font-size: 16px; +} + +.layuiAdmin-msg-detail .layui-card-header { + height: auto; + line-height: 30px; + padding: 15px; +} + +.layuiAdmin-msg-detail .layui-card-header span { + padding: 0 5px; + color: #999; +} + +.layuiAdmin-msg-detail .layui-card-header span:first-child { + padding-left: 0; +} + +.layuiAdmin-msg-detail .layui-card-body { + padding: 15px; +} + +/* 文章列表 */ +.layuiadmin-content-bread { + padding-bottom: 20px; +} + +/* 进度条样式 */ +.layuiadmin-order-progress { + position: relative; + top: 12px; +} + + +/* + + 系统 + +*/ + + +/* 头部图标重置 */ +.layui-card-header.layuiadmin-card-header-auto { + padding-top: 15px; + padding-bottom: 15px; + height: auto; +} + +.layuiadmin-card-header-auto i.layuiadmin-button-btn { + position: relative; + right: 0; + top: 0; + vertical-align: middle; +} + +.layuiadmin-card-header-auto .layui-form-item:last-child { + margin-bottom: 0; +} + + +/* 主题设置 */ +.layadmin-setTheme { + padding: 15px; + overflow-x: hidden; +} + +.layadmin-setTheme > h5 { + padding: 20px 0 10px; + color: #000; +} + +.layadmin-setTheme > h5:first-child { + padding-top: 0; +} + +.layadmin-setTheme-color { + width: 330px; + font-size: 0; +} + +.layadmin-setTheme-color li { + position: relative; + display: inline-block; + vertical-align: top; + width: 80px; + height: 50px; + margin: 0 15px 15px 0; + background-color: #f2f2f2; + cursor: pointer; + font-size: 12px; + color: #5F5F5F; +} + +.layadmin-setTheme-color li:after { + content: ''; + position: absolute; + z-index: 20; + top: 50%; + left: 50%; + width: 1px; + height: 0; + border: 1px solid #f2f2f2; + transition: all .3s; + -webkit-transition: all .3s; + opacity: 0; +} + +.layadmin-setTheme-color li.layui-this:after, +.layadmin-setTheme-color li:hover:after { + width: 100%; + height: 100%; + padding: 4px; + top: -5px; + left: -5px; + border-color: #16b777; + opacity: 1; +} + +.layadmin-setTheme-header { + position: relative; + z-index: 10; + height: 10px; + border-top: 1px solid #f2f2f2; + border-right: 1px solid #f2f2f2; +} + +.layadmin-setTheme-side { + position: absolute; + left: 0; + top: 0; + width: 20px; + height: 100%; + z-index: 11; + box-shadow: 1px 0 2px 0 rgba(0, 0, 0, .05); +} + +.layadmin-setTheme-logo { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 10px; + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, .15); +} + +.layadmin-form-right { + text-align: right; +} + + +/* 关于 */ +.layadmin-about p { + margin-bottom: 10px; +} + +/* 菜单列表 */ +.layadmin-menu-list .layui-card-header { + height: 50px; + line-height: 50px; + font-size: 16px; +} + +.layadmin-menu-list .layui-card-header:active { + background-color: #f2f2f2; +} + +.layadmin-menu-list .layui-card-header .layui-icon { + position: relative; + top: 1px; + left: 0; + display: inline-block; + margin: 0 10px 0; + font-size: 18px; +} + + +/* 动画 */ +@-webkit-keyframes layui-rl { /* 从右往左滑入 */ + from { + -webkit-transform: translate3d(100%, 0, 0); + } + to { + -webkit-transform: translate3d(0, 0, 0); + } +} + +@keyframes layui-rl { + from { + transform: translate3d(100%, 0, 0); + } + to { + transform: translate3d(0, 0, 0); + } +} + +.layui-anim-rl { + -webkit-animation-name: layui-rl; + animation-name: layui-rl; +} + +@-webkit-keyframes layui-lr { /* 从右往左滑入 */ + from { + -webkit-transform: translate3d(0 0, 0); + opacity: 1; + } + to { + -webkit-transform: translate3d(100%, 0, 0); + opacity: 1; + } +} + +@keyframes layui-lr { + from { + transform: translate3d(0, 0, 0); + } + to { + transform: translate3d(100%, 0, 0); + } +} + +.layui-anim-lr { + -webkit-animation-name: layui-lr; + animation-name: layui-lr; +} + +.layui-anim-rl.layer-anim-close { + -webkit-animation-name: layui-lr; + animation-name: layui-lr; +} + + +/* 提示页 */ +.layadmin-tips { + margin-top: 30px; + text-align: center; +} + +.layadmin-tips .layui-icon[face] { + display: inline-block; + font-size: 300px; + color: #393D49; +} + +.layadmin-tips .layui-text { + width: 500px; + margin: 30px auto; + padding-top: 20px; + border-top: 5px solid #16baaa; + font-size: 16px; +} + +.layadmin-tips h1 { + font-size: 100px; + line-height: 100px; + color: #16baaa; +} + +.layadmin-tips .layui-text .layui-anim { + display: inline-block; +} + + +/* + + 响应式补充 + +*/ + +@media screen and (max-width: 768px) { + + /* 产品清单模板 */ + .layadmin-panel-selection { + margin: 0; + width: auto; + } + + /* 导航 */ + .layui-body .layui-nav .layui-nav-item { + display: block; + } + + /* 主体容器 */ + .layui-layout-admin .layui-body .layadmin-tabsbody-item { + -webkit-overflow-scrolling: touch; + overflow: auto; + } +} + + + diff --git a/public/res/adminui/src/css/login.css b/public/res/adminui/src/css/login.css new file mode 100644 index 00000000..474bcf73 --- /dev/null +++ b/public/res/adminui/src/css/login.css @@ -0,0 +1,182 @@ +/** + * admin.login.css + */ + +html, body, #Panel_app { + height: 100%; +} + +.layui-layout-body { + overflow: auto; +} + +#LAY-user-login, +.layadmin-user-display-show { + display: block !important; +} + +.layadmin-user-login { + position: relative; + left: 0; + top: 0; + padding: 110px 0; + min-height: 100%; + box-sizing: border-box; +} + +.layadmin-user-login-main { + width: 375px; + margin: 0 auto; + box-sizing: border-box; +} + +.layadmin-user-login-box { + padding: 20px; +} + +.layadmin-user-login-header { + text-align: center; +} + +.layadmin-user-login-header h2 { + margin-bottom: 10px; + font-weight: 300; + font-size: 30px; + color: #000; +} + +.layadmin-user-login-header p { + font-weight: 300; + color: #999; +} + +.layadmin-user-login-body .layui-form-item { + position: relative; +} + +.layadmin-user-login-icon { + position: absolute; + left: 1px; + top: 1px; + width: 38px; + line-height: 36px; + text-align: center; + color: #d2d2d2; +} + +.layadmin-user-login-body .layui-form-item .layui-input { + padding-left: 38px; +} + +.layadmin-user-login-codeimg { + max-height: 38px; + width: 100%; + cursor: pointer; + box-sizing: border-box; +} + +.layadmin-user-login-other { + position: relative; + font-size: 0; + line-height: 38px; + padding-top: 20px; +} + +.layadmin-user-login-other > * { + display: inline-block; + vertical-align: middle; + margin-right: 10px; + font-size: 14px; +} + +.layadmin-user-login-other .layui-icon { + position: relative; + top: 2px; + font-size: 26px; +} + +.layadmin-user-login-other a:hover { + opacity: 0.8; +} + +.layadmin-user-jump-change { + float: right; +} + +.layadmin-user-login-footer { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + line-height: 30px; + padding: 20px; + text-align: center; + box-sizing: border-box; + color: rgba(0, 0, 0, .5) +} + +.layadmin-user-login-footer span { + padding: 0 5px; +} + +.layadmin-user-login-footer a { + padding: 0 5px; + color: rgba(0, 0, 0, .5); +} + +.layadmin-user-login-footer a:hover { + color: rgba(0, 0, 0, 1); +} + +/* 有背景图时 */ +.layadmin-user-login-main[bgimg] { + background-color: #fff; + box-shadow: 0 0 5px rgba(0, 0, 0, 0.05); +} + +/* 主题背景 */ +.ladmin-user-login-theme { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + text-align: center; +} + +.ladmin-user-login-theme ul { + display: inline-block; + padding: 5px; + background-color: #fff; +} + +.ladmin-user-login-theme ul li { + display: inline-block; + vertical-align: top; + width: 64px; + height: 43px; + cursor: pointer; + transition: all .3s; + -webkit-transition: all .3s; + background-color: #f2f2f2; +} + +.ladmin-user-login-theme ul li:hover { + opacity: 0.9 +} + +@media screen and (max-width: 768px) { + .layadmin-user-login { + padding-top: 60px; + } + + .layadmin-user-login-main { + width: 300px; + } + + .layadmin-user-login-box { + padding: 10px; + } +} + + + diff --git a/public/res/adminui/src/modules/admin.js b/public/res/adminui/src/modules/admin.js new file mode 100644 index 00000000..21af6554 --- /dev/null +++ b/public/res/adminui/src/modules/admin.js @@ -0,0 +1,869 @@ +/** + * 界面核心模块 + */ + +layui.define('view', function (exports) { + var $ = layui.jquery + , laytpl = layui.laytpl + , element = layui.element + , table = layui.table + , upload = layui.upload + , setter = layui.setter + , view = layui.view + , device = layui.device() + + , $win = $(window), $body = $('body') + , container = $('#' + setter.container) + + , SHOW = 'layui-show', HIDE = 'layui-hide', THIS = 'layui-this', DISABLED = 'layui-disabled', TEMP = 'template' + , APP_BODY = '#Panel_app_body', APP_FLEXIBLE = 'Panel_app_flexible' + , FILTER_TAB_TBAS = 'layadmin-layout-tabs' + , APP_SPREAD_SM = 'layadmin-side-spread-sm', TABS_BODY = 'layadmin-tabsbody-item' + , ICON_SHRINK = 'layui-icon-shrink-right', ICON_SPREAD = 'layui-icon-spread-left' + , SIDE_SHRINK = 'layadmin-side-shrink', SIDE_MENU = 'LAY-system-side-menu' + + //通用方法 + , admin = { + v: '2.0.0' + , mode: 'spa' + + //数据的异步请求 + , req: view.req + + //清除本地 token,并跳转到登入页 + , exit: view.exit + + //xss 转义 + , escape: function (html) { + return String(html || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&') + .replace(//g, '>') + .replace(/'/g, ''').replace(/"/g, '"') + } + + //事件 + , on: function (events, callback) { + return layui.onevent.call(this, setter.MOD_NAME, events, callback) + } + + //弹出面板 + , popup: view.popup + + //右侧面板 + , popupRight: function (options) { + //layer.close(admin.popup.index); + return admin.popup.index = layer.open($.extend({ + type: 1 + , id: 'LAY_adminPopupR' + , anim: -1 + , title: false + , closeBtn: false + , offset: 'r' + , shade: 0.1 + , shadeClose: true + , skin: 'layui-anim layui-anim-rl layui-layer-adminRight' + , area: '300px' + }, options)) + } + + //发送验证码 + , sendAuthCode: function (options) { + options = $.extend({ + seconds: 60 + , elemPhone: '#LAY_phone' + , elemVercode: '#LAY_vercode' + }, options) + + var seconds = options.seconds + , token = null + , timer, countDown = function (loop) { + var btn = $(options.elem) + seconds-- + if (seconds < 0) { + btn.removeClass(DISABLED).html('获取验证码') + seconds = options.seconds + clearInterval(timer) + } else { + btn.addClass(DISABLED).html(seconds + '秒后重获') + } + + if (!loop) { + timer = setInterval(function () { + countDown(true) + }, 1000) + } + } + + $body.off('click', options.elem).on('click', options.elem, function () { + options.elemPhone = $(options.elemPhone) + options.elemVercode = $(options.elemVercode) + + var elemPhone = options.elemPhone + , value = elemPhone.val() + + if (seconds !== options.seconds || $(this).hasClass(DISABLED)) return + + if (!/^1\d{10}$/.test(value)) { + elemPhone.focus() + return layer.msg('请输入正确的手机号') + } + + if (typeof options.ajax === 'object') { + var success = options.ajax.success + delete options.ajax.success + } + + admin.req($.extend(true, { + url: '/auth/code' + , type: 'get' + , data: { + phone: value + } + , success: function (res) { + layer.msg('验证码已发送至你的手机,请注意查收', { + icon: 1 + , shade: 0 + }) + options.elemVercode.focus() + countDown() + success && success(res) + } + }, options.ajax)) + }) + } + + //屏幕类型 + , screen: function () { + var width = $win.width() + if (width > 1200) { + return 3 //大屏幕 + } else if (width > 992) { + return 2 //中屏幕 + } else if (width > 768) { + return 1 //小屏幕 + } else { + return 0 //超小屏幕 + } + } + + //侧边伸缩 + , sideFlexible: function (status) { + var app = container + , iconElem = $('#' + APP_FLEXIBLE) + , screen = admin.screen() + + //设置状态,PC:默认展开、移动:默认收缩 + if (status === 'spread') { + //切换到展开状态的 icon,箭头:← + iconElem.removeClass(ICON_SPREAD).addClass(ICON_SHRINK) + + //移动:从左到右位移;PC:清除多余选择器恢复默认 + if (screen < 2) { + app.addClass(APP_SPREAD_SM) + } else { + app.removeClass(APP_SPREAD_SM) + } + + app.removeClass(SIDE_SHRINK) + } else { + //切换到搜索状态的 icon,箭头:→ + iconElem.removeClass(ICON_SHRINK).addClass(ICON_SPREAD) + + //移动:清除多余选择器恢复默认;PC:从右往左收缩 + if (screen < 2) { + app.removeClass(SIDE_SHRINK) + } else { + app.addClass(SIDE_SHRINK) + } + + app.removeClass(APP_SPREAD_SM) + } + + layui.event.call(this, setter.MOD_NAME, 'side({*})', { + status: status + }) + } + + //重置主体区域表格尺寸 + , resizeTable: function (delay) { + var that = this, runResizeTable = function () { + that.tabsBody(admin.tabsPage.index).find('.layui-table-view').each(function () { + var tableID = $(this).attr('lay-id') + layui.table.resize(tableID) + }) + } + if (!layui.table) return + delay ? setTimeout(runResizeTable, delay) : runResizeTable() + } + + //主题设置 + , theme: function (options) { + var theme = setter.theme + , local = layui.data(setter.tableName) + , id = 'LAY_layadmin_theme' + , style = document.createElement('style') + , styleText = laytpl([ + //主题色 + '.layui-side-menu,' + , '.layui-layer-admin .layui-layer-title,' + , '.layadmin-side-shrink .layui-side-menu .layui-nav>.layui-nav-item>.layui-nav-child' + , '{background-color:{{d.color.main}} !important;}' + + //背景选中色 + , '.layadmin-pagetabs .layui-tab-title li:after,' + , '.layadmin-pagetabs .layui-tab-title li.layui-this:after,' + , '.layui-nav-tree .layui-this,' + , '.layui-nav-tree .layui-this>a,' + , '.layui-nav-tree .layui-nav-child dd.layui-this,' + , '.layui-nav-tree .layui-nav-child dd.layui-this a,' + , '.layui-nav-tree .layui-nav-bar' + , '{background-color:{{d.color.selected}} !important;}' + + //logo + , '.layui-layout-admin .layui-logo{background-color:{{d.color.logo || d.color.main}} !important;}' + + //文字选中色 + , '.layadmin-pagetabs .layui-tab-title li:hover,' + , '.layadmin-pagetabs .layui-tab-title li.layui-this' + , '{color: {{d.color.selected}} !important;}' + + //头部色 + , '{{# if(d.color.header){ }}' + , '.layui-layout-admin .layui-header{background-color:{{ d.color.header }};}' + , '.layui-layout-admin .layui-header a,' + , '.layui-layout-admin .layui-header a cite{color: #f8f8f8;}' + , '.layui-layout-admin .layui-header a:hover{color: #fff;}' + , '.layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-top-color: #fbfbfb;}' + , '.layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color: transparent; border-bottom-color: #fbfbfb;}' + , '.layui-layout-admin .layui-header .layui-nav .layui-this:after, .layui-layout-admin .layui-header .layui-nav-bar{background-color: #fff; background-color: rgba(255,255,255,.5);}' + , '.layadmin-pagetabs .layui-tab-title li:after{display: none;}' + , '{{# } }}' + ].join('')).render(options = $.extend({}, local.theme, options)) + , styleElem = document.getElementById(id) + + //添加主题样式 + if ('styleSheet' in style) { + style.setAttribute('type', 'text/css') + style.styleSheet.cssText = styleText + } else { + style.innerHTML = styleText + } + style.id = id + + styleElem && $body[0].removeChild(styleElem) + $body[0].appendChild(style) + $body.attr('layadmin-themealias', options.color.alias) + + //本地存储记录 + local.theme = local.theme || {} + layui.each(options, function (key, value) { + local.theme[key] = value + }) + layui.data(setter.tableName, { + key: 'theme' + , value: local.theme + }) + } + + //初始化主题 + , initTheme: function (index) { + var theme = setter.theme + index = index || 0 + if (theme.color[index]) { + theme.color[index].index = index + admin.theme({ + color: theme.color[index] + }) + } + } + + //记录最近一次点击的页面标签数据 + , tabsPage: {} + + //获取标签页的头元素 + , tabsHeader: function (index) { + return $('#Panel_app_tabsheader').children('li').eq(index || 0) + } + + //获取页面标签主体元素 + , tabsBody: function (index) { + return $(APP_BODY).find('.' + TABS_BODY).eq(index || 0) + } + + //切换页面标签主体 + , tabsBodyChange: function (index) { + admin.tabsHeader(index).attr('lay-attr', layui.router().href) + admin.tabsBody(index).addClass(SHOW).siblings().removeClass(SHOW) + events.rollPage('auto', index) + } + + //resize事件管理 + , resize: function (fn) { + var router = layui.router() + , key = router.path.join('-') + + if (admin.resizeFn[key]) { + $win.off('resize', admin.resizeFn[key]) + delete admin.resizeFn[key] + } + + if (fn === 'off') return //如果是清除 resize 事件,则终止往下执行 + + fn(), admin.resizeFn[key] = fn + $win.on('resize', admin.resizeFn[key]) + } + , resizeFn: {} + , runResize: function () { + var router = layui.router() + , key = router.path.join('-') + admin.resizeFn[key] && admin.resizeFn[key]() + } + , delResize: function () { + this.resize('off') + } + + //关闭当前 pageTabs + , closeThisTabs: function () { + if (!admin.tabsPage.index) return + $(TABS_HEADER).eq(admin.tabsPage.index).find('.layui-tab-close').trigger('click') + } + + //全屏 + , fullScreen: function () { + var ele = document.documentElement + , reqFullScreen = ele.requestFullScreen || ele.webkitRequestFullScreen + || ele.mozRequestFullScreen || ele.msRequestFullscreen + if (typeof reqFullScreen !== 'undefined' && reqFullScreen) { + reqFullScreen.call(ele) + } + + } + + //退出全屏 + , exitScreen: function () { + var ele = document.documentElement + if (document.exitFullscreen) { + document.exitFullscreen() + } else if (document.mozCancelFullScreen) { + document.mozCancelFullScreen() + } else if (document.webkitCancelFullScreen) { + document.webkitCancelFullScreen() + } else if (document.msExitFullscreen) { + document.msExitFullscreen() + } + } + + //纠正单页路由格式 + , correctRouter: function (href) { + if (!/^\//.test(href)) href = '/' + href + + //纠正首尾 + return href.replace(/^(\/+)/, '/') + .replace(new RegExp('\/' + setter.entry + '$'), '/') //过滤路由最后的默认视图文件名(如:index) + } + + //…… + } + + //事件 + var events = admin.events = { + //伸缩 + flexible: function (othis) { + var iconElem = othis.find('#' + APP_FLEXIBLE) + , isSpread = iconElem.hasClass(ICON_SPREAD) + admin.sideFlexible(isSpread ? 'spread' : null) //控制伸缩 + admin.resizeTable(350) + } + + //刷新 + , refresh: function () { + admin.render() + } + + //输入框搜索 + , serach: function (othis) { + othis.off('keypress').on('keypress', function (e) { + if (!this.value.replace(/\s/g, '')) return + //回车跳转 + if (e.keyCode === 13) { + var href = othis.attr('lay-action') + , text = othis.attr('lay-text') || '搜索' + + href = href + this.value + text = text + ' ' + admin.escape(this.value) + '' + + //打开标签页 + location.hash = admin.correctRouter(href) + + //如果搜索关键词已经打开,则刷新页面即可 + events.serach.keys || (events.serach.keys = {}) + events.serach.keys[admin.tabsPage.index] = this.value + if (this.value === events.serach.keys[admin.tabsPage.index]) { + events.refresh(othis) + } + + //清空输入框 + this.value = '' + } + }) + } + + //点击消息 + , message: function (othis) { + othis.find('.layui-badge-dot').remove() + } + + //弹出主题面板 + , theme: function () { + admin.popupRight({ + id: 'LAY_adminPopupTheme' + , success: function () { + view(this.id).render('system/theme') + } + }) + } + + //便签 + , note: function (othis) { + var mobile = admin.screen() < 2 + , note = layui.data(setter.tableName).note + + events.note.index = admin.popup({ + title: '便签' + , shade: 0 + , offset: [ + '41px' + , (mobile ? null : (othis.offset().left - 250) + 'px') + ] + , anim: -1 + , id: 'LAY_adminNote' + , skin: 'layadmin-note layui-anim layui-anim-upbit' + , content: '' + , resize: false + , success: function (layero, index) { + var textarea = layero.find('textarea') + , + value = note === undefined ? '便签中的内容会存储在本地,这样即便你关掉了浏览器,在下次打开时,依然会读取到上一次的记录。是个非常小巧实用的本地备忘录' : note + + textarea.val(value).focus().on('keyup', function () { + layui.data(setter.tableName, { + key: 'note' + , value: this.value + }) + }) + } + }) + } + + //全屏 + , fullscreen: function (othis) { + var SCREEN_FULL = 'layui-icon-screen-full' + , SCREEN_REST = 'layui-icon-screen-restore' + , iconElem = othis.children('i') + + if (iconElem.hasClass(SCREEN_FULL)) { + admin.fullScreen() + iconElem.addClass(SCREEN_REST).removeClass(SCREEN_FULL) + } else { + admin.exitScreen() + iconElem.addClass(SCREEN_FULL).removeClass(SCREEN_REST) + } + } + + //弹出关于面板 + , about: function () { + admin.popupRight({ + id: 'LAY_adminPopupAbout' + , success: function () { + view(this.id).render('system/about') + } + }) + } + + //弹出更多面板 + , more: function () { + admin.popupRight({ + id: 'LAY_adminPopupMore' + , success: function () { + view(this.id).render('system/more') + } + }) + } + + //返回上一页 + , back: function () { + history.back() + } + + //主题设置 + , setTheme: function (othis) { + var index = othis.data('index') + , nextIndex = othis.siblings('.layui-this').data('index') + + if (othis.hasClass(THIS)) return + + othis.addClass(THIS).siblings('.layui-this').removeClass(THIS) + admin.initTheme(index) + } + + //左右滚动页面标签 + , rollPage: function (type, index) { + var tabsHeader = $('#Panel_app_tabsheader') + , liItem = tabsHeader.children('li') + , scrollWidth = tabsHeader.prop('scrollWidth') + , outerWidth = tabsHeader.outerWidth() + , tabsLeft = parseFloat(tabsHeader.css('left')) + + //右左往右 + if (type === 'left') { + if (!tabsLeft && tabsLeft <= 0) return + + //当前的left减去可视宽度,用于与上一轮的页标比较 + var prefLeft = -tabsLeft - outerWidth + + liItem.each(function (index, item) { + var li = $(item) + , left = li.position().left + + if (left >= prefLeft) { + tabsHeader.css('left', -left) + return false + } + }) + } else if (type === 'auto') { //自动滚动 + (function () { + var thisLi = liItem.eq(index), thisLeft + + if (!thisLi[0]) return + thisLeft = thisLi.position().left + + //当目标标签在可视区域左侧时 + if (thisLeft < -tabsLeft) { + return tabsHeader.css('left', -thisLeft) + } + + //当目标标签在可视区域右侧时 + if (thisLeft + thisLi.outerWidth() >= outerWidth - tabsLeft) { + var subLeft = thisLeft + thisLi.outerWidth() - (outerWidth - tabsLeft) + liItem.each(function (i, item) { + var li = $(item) + , left = li.position().left + + //从当前可视区域的最左第二个节点遍历,如果减去最左节点的差 > 目标在右侧不可见的宽度,则将该节点放置可视区域最左 + if (left + tabsLeft > 0) { + if (left - tabsLeft > subLeft) { + tabsHeader.css('left', -left) + return false + } + } + }) + } + }()) + } else { + //默认向左滚动 + liItem.each(function (i, item) { + var li = $(item) + , left = li.position().left + + if (left + li.outerWidth() >= outerWidth - tabsLeft) { + tabsHeader.css('left', -left) + return false + } + }) + } + } + + //向右滚动页面标签 + , leftPage: function () { + events.rollPage('left') + } + + //向左滚动页面标签 + , rightPage: function () { + events.rollPage() + } + + //关闭当前标签页 + , closeThisTabs: function () { + admin.closeThisTabs() + } + + //关闭其它标签页 + , closeOtherTabs: function (type) { + var TABS_REMOVE = 'LAY-system-pagetabs-remove' + if (type === 'all') { + $(TABS_HEADER + ':gt(0)').remove() + $(APP_BODY).find('.' + TABS_BODY + ':gt(0)').remove() + } else { + $(TABS_HEADER).each(function (index, item) { + if (index && index != admin.tabsPage.index) { + $(item).addClass(TABS_REMOVE) + admin.tabsBody(index).addClass(TABS_REMOVE) + } + }) + $('.' + TABS_REMOVE).remove() + } + } + + //关闭全部标签页 + , closeAllTabs: function () { + events.closeOtherTabs('all') + location.hash = '' + } + + //遮罩 + , shade: function () { + admin.sideFlexible() + } + } + + //初始 + !function () { + //主题初始化,本地主题记录优先,其次为 initColorIndex + var local = layui.data(setter.tableName) + if (local.theme) { + admin.theme(local.theme) + } else if (setter.theme) { + admin.initTheme(setter.theme.initColorIndex) + } + + //禁止水平滚动 + $body.addClass('layui-layout-body') + + //移动端强制不开启页面标签功能 + if (admin.screen() < 1) { + delete setter.pageTabs + } + + //不开启页面标签时 + if (!setter.pageTabs) { + container.addClass('layadmin-tabspage-none') + } + + //低版本IE提示 + if (device.ie && device.ie < 10) { + view.error('IE' + device.ie + '下访问可能不佳,推荐使用:Chrome / Firefox / Edge 等高级浏览器', { + offset: 'auto' + , id: 'LAY_errorIE' + }) + } + + }() + + //admin.prevRouter = {}; //上一个路由 + + // hash 改变侧边状态 + admin.on('hash(side)', function (router) { + var path = router.path, getData = function (item) { + return { + list: item.children('.layui-nav-child') + , name: item.data('name') + , jump: item.data('jump') + } + } + , sideMenu = $('#' + SIDE_MENU) + , SIDE_NAV_ITEMD = 'layui-nav-itemed' + + //捕获对应菜单 + , matchMenu = function (list) { + var pathURL = admin.correctRouter(path.join('/')) + list.each(function (index1, item1) { + var othis1 = $(item1) + , data1 = getData(othis1) + , listChildren1 = data1.list.children('dd') + , matched1 = path[0] == data1.name || (index1 === 0 && !path[0]) + || (data1.jump && pathURL == admin.correctRouter(data1.jump)) + + listChildren1.each(function (index2, item2) { + var othis2 = $(item2) + , data2 = getData(othis2) + , listChildren2 = data2.list.children('dd') + , matched2 = (path[0] == data1.name && path[1] == data2.name) + || (data2.jump && pathURL == admin.correctRouter(data2.jump)) + + listChildren2.each(function (index3, item3) { + var othis3 = $(item3) + , data3 = getData(othis3) + , matched3 = (path[0] == data1.name && path[1] == data2.name && path[2] == data3.name) + || (data3.jump && pathURL == admin.correctRouter(data3.jump)) + + if (matched3) { + var selected = data3.list[0] ? SIDE_NAV_ITEMD : THIS + othis3.addClass(selected).siblings().removeClass(selected) //标记选择器 + return false + } + + }) + + if (matched2) { + var selected = data2.list[0] ? SIDE_NAV_ITEMD : THIS + othis2.addClass(selected).siblings().removeClass(selected) //标记选择器 + return false + } + + }) + + if (matched1) { + var selected = data1.list[0] ? SIDE_NAV_ITEMD : THIS + othis1.addClass(selected).siblings().removeClass(selected) //标记选择器 + return false + } + + }) + } + + //重置状态 + sideMenu.find('.' + THIS).removeClass(THIS) + + //移动端点击菜单时自动收缩 + if (admin.screen() < 2) admin.sideFlexible() + + //开始捕获 + matchMenu(sideMenu.children('li')) + }) + + //侧边导航点击事件 + element.on('nav(layadmin-system-side-menu)', function (elem) { + if (elem.siblings('.layui-nav-child')[0] && container.hasClass(SIDE_SHRINK)) { + admin.sideFlexible('spread') + layer.close(elem.data('index')) + } + + admin.tabsPage.type = 'nav' + }) + + //选项卡的更多操作 + element.on('nav(layadmin-pagetabs-nav)', function (elem) { + var dd = elem.parent() + dd.removeClass(THIS) + dd.parent().removeClass(SHOW) + }) + + //同步路由 + var setThisRouter = function (othis) { + var layid = othis.attr('lay-id') + , attr = othis.attr('lay-attr') + , index = othis.index() + + location.hash = layid === setter.entry ? '/' : (attr || '/') + admin.tabsBodyChange(index) + } + , TABS_HEADER = '#Panel_app_tabsheader>li' + + //页面标签点击 + $body.on('click', TABS_HEADER, function () { + var othis = $(this) + , index = othis.index() + + admin.tabsPage.type = 'tab' + admin.tabsPage.index = index + + //如果是iframe类型的标签页 + if (othis.attr('lay-attr') === 'iframe') { + return admin.tabsBodyChange(index) + } + + setThisRouter(othis) //同步路由 + admin.runResize() //执行resize事件,如果存在的话 + admin.resizeTable() //重置当前主体区域的表格尺寸 + }) + + // tabspage 删除 + element.on('tabDelete(layadmin-layout-tabs)', function (obj) { + var othis = $(TABS_HEADER + '.layui-this') + + obj.index && admin.tabsBody(obj.index).remove() + setThisRouter(othis) + + //移除resize事件 + admin.delResize() + }) + + // 页面跳转 + $body.on('click', '*[lay-href]', function () { + var othis = $(this) + var href = othis.attr('lay-href') + var router = layui.router() + + admin.tabsPage.elem = othis + // admin.prevRouter[router.path[0]] = router.href; //记录上一次各菜单的路由信息 + + // 执行跳转 + location.hash = admin.correctRouter(href) + + // 如果为当前页,则执行刷新 + if (setter.refreshCurrPage) { + if (admin.correctRouter(href) === router.href) { + admin.events.refresh() + } + } + }) + + //点击事件 + $body.on('click', '*[layadmin-event]', function () { + var othis = $(this) + , attrEvent = othis.attr('layadmin-event') + events[attrEvent] && events[attrEvent].call(this, othis) + }) + + //tips + $body.on('mouseenter', '*[lay-tips]', function () { + var othis = $(this) + + if (othis.parent().hasClass('layui-nav-item') && !container.hasClass(SIDE_SHRINK)) return + + var tips = othis.attr('lay-tips') + , offset = othis.attr('lay-offset') + , direction = othis.attr('lay-direction') + , index = layer.tips(tips, this, { + tips: direction || 1 + , time: -1 + , success: function (layero, index) { + if (offset) { + layero.css('margin-left', offset + 'px') + } + } + }) + othis.data('index', index) + }).on('mouseleave', '*[lay-tips]', function () { + layer.close($(this).data('index')) + }) + + //窗口resize事件 + var resizeSystem = layui.data.resizeSystem = function () { + //layer.close(events.note.index); + layer.closeAll('tips') + + if (!resizeSystem.lock) { + setTimeout(function () { + admin.sideFlexible(admin.screen() < 2 ? '' : 'spread') + delete resizeSystem.lock + }, 100) + } + + resizeSystem.lock = true + } + $win.on('resize', layui.data.resizeSystem) + + //设置组件全局 token + !function () { + var request = setter.request + if (request.tokenName) { + var obj = {} + obj[request.tokenName] = layui.data(setter.tableName)[request.tokenName] || '' + + //table + table.set({ + headers: obj, //通过 request 头传递 + where: obj //通过参数传递 + }) + //upload + upload.set({ + headers: obj, //通过 request 头传递 + data: obj //通过参数传递 + }) + } + }() + + //接口输出 + exports('admin', admin) +}) \ No newline at end of file diff --git a/public/res/adminui/src/modules/index.js b/public/res/adminui/src/modules/index.js new file mode 100644 index 00000000..cb626d54 --- /dev/null +++ b/public/res/adminui/src/modules/index.js @@ -0,0 +1,198 @@ +/** + * 界面入口模块 + */ + +layui.define('admin', function (exports) { + var setter = layui.setter + var element = layui.element + var admin = layui.admin + var tabsPage = admin.tabsPage + var view = layui.view + + //根据路由渲染页面 + var renderPage = function () { + var router = layui.router() + , path = router.path + , pathURL = admin.correctRouter(router.path.join('/')) + + //默认读取主页 + if (!path.length) path = [''] + + //如果最后一项为空字符,则读取默认文件 + if (path[path.length - 1] === '') { + path[path.length - 1] = setter.entry + } + + //重置状态 + var reset = function (type) { + //renderPage.haveInit && layer.closeAll(); + if (renderPage.haveInit) { + $('.layui-layer').each(function () { + var othis = $(this), + index = othis.attr('times') + if (!(othis.hasClass('layui-layim') || othis.hasClass('layui-layim-chat'))) { + layer.close(index) + } + }) + } + renderPage.haveInit = true + + $(APP_BODY).scrollTop(0) + delete tabsPage.type //重置页面标签的来源类型 + } + + //如果路由来自于 tab 切换,则不重新请求视图 + if (tabsPage.type === 'tab') { + //切换到非主页、或者切换到主页且主页必须有内容。方可阻止请求 + if (pathURL !== '/' || (pathURL === '/' && admin.tabsBody().html())) { + admin.tabsBodyChange(tabsPage.index) + return reset(tabsPage.type) + } + } + + //请求视图渲染 + view().render(path.join('/')).then(function (res) { + + //遍历页签选项卡 + var matchTo + , tabs = $('#Panel_app_tabsheader>li') + + tabs.each(function (index) { + var li = $(this) + , layid = li.attr('lay-id') + + if (layid === pathURL) { + matchTo = true + tabsPage.index = index + } + }) + + //如果未在选项卡中匹配到,则追加选项卡 + if (setter.pageTabs && pathURL !== '/') { + if (!matchTo) { + $(APP_BODY).append('
') + tabsPage.index = tabs.length + element.tabAdd(FILTER_TAB_TBAS, { + title: '' + (res.title || '新标签页') + '' + , id: pathURL + , attr: router.href + }) + } + } + + this.container = admin.tabsBody(tabsPage.index) + setter.pageTabs || this.container.scrollTop(0) //如果不开启标签页,则跳转时重置滚动条 + + //定位当前tabs + element.tabChange(FILTER_TAB_TBAS, pathURL) + admin.tabsBodyChange(tabsPage.index) + + }).done(function () { + layui.use('common', layui.cache.callback.common) + $win.on('resize', layui.data.resize) + + element.render('breadcrumb', 'breadcrumb') + + //容器 scroll 事件,剔除吸附层 + admin.tabsBody(tabsPage.index).on('scroll', function () { + var othis = $(this) + , elemDate = $('.layui-laydate') + , layerOpen = $('.layui-layer')[0] + + //关闭 layDate + if (elemDate[0]) { + elemDate.each(function () { + var thisElemDate = $(this) + thisElemDate.hasClass('layui-laydate-static') || thisElemDate.remove() + }) + othis.find('input').blur() + } + + //关闭 Tips 层 + layerOpen && layer.closeAll('tips') + }) + }) + + reset() + } + + //入口页面 + var entryPage = function (fn) { + var router = layui.router() + , container = view(setter.container) + , pathURL = admin.correctRouter(router.path.join('/')) + , isIndPage + + //检查是否属于独立页面 + layui.each(setter.indPage, function (index, item) { + if (pathURL === item) { + return isIndPage = true + } + }) + + //将模块根路径设置为 modules 目录 + layui.config({ + base: setter.paths.base + 'modules/' + }) + + //独立页面 + if (isIndPage || pathURL === '/user/login') { //此处单独判断登入页,是为了兼容旧版(即未在 config.js 配置 indPage 的情况) + container.render(router.path.join('/')).done(function () { + admin.pageType = 'alone' + }) + } else { //后台框架页面 + + //强制拦截未登入 + if (setter.interceptor) { + var local = layui.data(setter.tableName) + if (!local[setter.request.tokenName]) { + return location.hash = '/user/login/redirect=' + encodeURIComponent(pathURL) //跳转到登入页 + } + } + + //渲染后台结构 + if (admin.pageType === 'console') { //后台主体页 + renderPage() + } else { //初始控制台结构 + container.render('layout').done(function () { + renderPage() + layui.element.render() + + if (admin.screen() < 2) { + admin.sideFlexible() + } + admin.pageType = 'console' + }) + } + + } + } + + var APP_BODY = '#Panel_app_body' + var FILTER_TAB_TBAS = 'layadmin-layout-tabs' + var $ = layui.$, $win = $(window) + + //初始主体结构 + layui.link( + setter.paths.core + 'css/admin.css?v=' + admin.v + , function () { + entryPage() + } + , 'layuiAdmin' + ) + + //Hash改变 + window.onhashchange = function () { + entryPage() + //执行 {setter.MOD_NAME}.hash 下的事件 + layui.event.call(this, setter.MOD_NAME, 'hash({*})', layui.router()) + } + + // 对外输出 + var adminuiIndex = { + render: renderPage + } + + $.extend(admin, adminuiIndex) + exports('adminIndex', adminuiIndex) +}) diff --git a/public/res/adminui/src/modules/view.js b/public/res/adminui/src/modules/view.js new file mode 100644 index 00000000..e0ed0423 --- /dev/null +++ b/public/res/adminui/src/modules/view.js @@ -0,0 +1,346 @@ +/** + * 界面视图模块 + */ + +layui.define(['laytpl', 'layer'], function (exports) { + var $ = layui.jquery + , laytpl = layui.laytpl + , layer = layui.layer + , setter = layui.setter + , device = layui.device() + , hint = layui.hint() + + //对外接口 + , view = function (id) { + return new Class(id) + } + + , SHOW = 'layui-show', LAY_BODY = 'Panel_app_body' + + //构造器 + , Class = function (id) { + this.id = id + this.container = $('#' + (id || LAY_BODY)) + } + + //加载中 + view.loading = function (elem) { + elem.append( + this.elemLoad = $('') + ) + } + + //移除加载 + view.removeLoad = function () { + this.elemLoad && this.elemLoad.remove() + } + + //清除 token,并跳转到登入页 + view.exit = function () { + //清空本地记录的 token + layui.data(setter.tableName, { + key: setter.request.tokenName + , remove: true + }) + + //跳转到登入页 + location.hash = '/user/login' + } + + //Ajax请求 + view.req = function (options) { + var that = this + , success = options.success + , error = options.error + , request = setter.request + , response = setter.response + , debug = function () { + return setter.debug + ? '
URL:' + options.url + : '' + } + + options.data = options.data || {} + options.headers = options.headers || {} + + if (request.tokenName) { + var sendData = typeof options.data === 'string' + ? JSON.parse(options.data) + : options.data + + //自动给参数传入默认 token + options.data[request.tokenName] = request.tokenName in sendData + ? options.data[request.tokenName] + : (layui.data(setter.tableName)[request.tokenName] || '') + + //自动给 Request Headers 传入 token + options.headers[request.tokenName] = request.tokenName in options.headers + ? options.headers[request.tokenName] + : (layui.data(setter.tableName)[request.tokenName] || '') + } + + delete options.success + delete options.error + + return $.ajax($.extend({ + type: 'get' + , dataType: 'json' + , success: function (res) { + var statusCode = response.statusCode + + //只有 response 的 code 一切正常才执行 done + if (res[response.statusName] == statusCode.ok) { + typeof options.done === 'function' && options.done(res) + } + + //登录状态失效,清除本地 access_token,并强制跳转到登入页 + else if (res[response.statusName] == statusCode.logout) { + view.exit() + } + + //其它异常 + else { + var errorText = [ + 'Error: ' + (res[response.msgName] || '返回状态码异常') + , debug() + ].join('') + view.error(errorText) + } + + //只要 http 状态码正常,无论 response 的 code 是否正常都执行 success + typeof success === 'function' && success(res) + } + , error: function (e, code) { + var errorText = [ + '请求异常,请重试
错误信息:' + code + , debug() + ].join('') + view.error(errorText) + + typeof error === 'function' && error.apply(this, arguments) + } + }, options)) + } + + //弹窗 + view.popup = function (options) { + var success = options.success + , skin = options.skin + + delete options.success + delete options.skin + + return layer.open($.extend({ + type: 1 + , title: '提示' + , content: '' + , id: 'LAY-system-view-popup' + , skin: 'layui-layer-admin' + (skin ? ' ' + skin : '') + , shadeClose: true + , closeBtn: false + , success: function (layero, index) { + var elemClose = $('') + layero.append(elemClose) + elemClose.on('click', function () { + layer.close(index) + }) + typeof success === 'function' && success.apply(this, arguments) + } + }, options)) + } + + //异常提示 + view.error = function (content, options) { + return view.popup($.extend({ + content: content + , maxWidth: 300 + //,shade: 0.01 + , offset: 't' + , anim: 6 + , id: 'LAY_adminError' + }, options)) + } + + //请求模板文件渲染 + Class.prototype.render = function (views, params) { + var that = this, router = layui.router() + views = ( + setter.paths && setter.paths.views + ? setter.paths.views + : setter.views + ) + views + setter.engine + + $('#' + LAY_BODY).children('.layadmin-loading').remove() + view.loading(that.container) //loading + + //请求模板 + $.ajax({ + url: views + , type: 'get' + , dataType: 'html' + , data: { + v: layui.cache.version + } + , success: function (html) { + html = '
' + html + '
' + + var elemTitle = $(html).find('title') + , title = elemTitle.text() || (html.match(/\([\s\S]*)\<\/title>/) || [])[1] + + var res = { + title: title + , body: html + } + + elemTitle.remove() + that.params = params || {} //获取参数 + + if (that.then) { + that.then(res) + delete that.then + } + + that.parse(html) + view.removeLoad() + + if (that.done) { + that.done(res) + delete that.done + } + + } + , error: function (e) { + view.removeLoad() + + if (that.render.isError) { + return view.error('请求视图文件异常,状态:' + e.status) + } + + if (e.status === 404) { + that.render('template/tips/404') + } else { + that.render('template/tips/error') + } + + that.render.isError = true + } + }) + return that + } + + //解析模板 + Class.prototype.parse = function (html, refresh, callback) { + var that = this + , isScriptTpl = typeof html === 'object' //是否模板元素 + , elem = isScriptTpl ? html : $(html) + , elemTemp = isScriptTpl ? html : elem.find('*[template]') + , fn = function (options) { + var tpl = laytpl(options.dataElem.html()) + , res = $.extend({ + params: router.params + }, options.res) + + options.dataElem.after(tpl.render(res)) + typeof callback === 'function' && callback() + + try { + options.done && new Function('d', options.done)(res) + } catch (e) { + console.error(options.dataElem[0], '\n存在错误回调脚本\n\n', e) + } + } + , router = layui.router() + + elem.find('title').remove() + that.container[refresh ? 'after' : 'html'](elem.children()) + + router.params = that.params || {} + + //遍历模板区块 + for (var i = elemTemp.length; i > 0; i--) { + (function () { + var dataElem = elemTemp.eq(i - 1) + , layDone = dataElem.attr('lay-done') || dataElem.attr('lay-then') //获取回调 + , url = laytpl(dataElem.attr('lay-url') || '').render(router) //接口 url + , data = laytpl(dataElem.attr('lay-data') || '').render(router) //接口参数 + , headers = laytpl(dataElem.attr('lay-headers') || '').render(router) //接口请求的头信息 + + try { + data = new Function('return ' + data + ';')() + } catch (e) { + hint.error('lay-data: ' + e.message) + data = {} + } + + try { + headers = new Function('return ' + headers + ';')() + } catch (e) { + hint.error('lay-headers: ' + e.message) + headers = headers || {} + } + + if (url) { + view.req({ + type: dataElem.attr('lay-type') || 'get' + , url: url + , data: data + , dataType: 'json' + , headers: headers + , success: function (res) { + fn({ + dataElem: dataElem + , res: res + , done: layDone + }) + } + }) + } else { + fn({ + dataElem: dataElem + , done: layDone + }) + } + }()) + } + + return that + } + + //直接渲染字符 + Class.prototype.send = function (views, data) { + var tpl = laytpl(views || this.container.html()).render(data || {}) + this.container.html(tpl) + return this + } + + //局部刷新模板 + Class.prototype.refresh = function (callback) { + var that = this + , next = that.container.next() + , templateid = next.attr('lay-templateid') + + if (that.id != templateid) return that + + that.parse(that.container, 'refresh', function () { + that.container.siblings('[lay-templateid="' + that.id + '"]:last').remove() + typeof callback === 'function' && callback() + }) + + return that + } + + //视图请求成功后的回调 + Class.prototype.then = function (callback) { + this.then = callback + return this + } + + //视图渲染完毕后的回调 + Class.prototype.done = function (callback) { + this.done = callback + return this + } + + //对外接口 + exports('view', view) +}) \ No newline at end of file diff --git a/public/res/config.js b/public/res/config.js new file mode 100644 index 00000000..e7a7d7e9 --- /dev/null +++ b/public/res/config.js @@ -0,0 +1,154 @@ +/** + * setter + */ + +// 初始化配置 +layui.define(['all'], function (exports) { + exports('setter', { + paths: { // v1.9.0 及以上版本的写法 + core: layui.cache.base + 'adminui/src/', // 核心库所在目录 + views: layui.cache.base + 'views/', // 业务视图所在目录 + modules: layui.cache.base + 'modules/', // 业务模块所在目录 + base: layui.cache.base // 记录静态资源所在基础目录 + }, + + container: 'Panel_app', // 容器ID + entry: 'index', // 默认视图文件名 + engine: '.html', // 视图文件后缀名 + pageTabs: true, // 是否开启页面选项卡功能。单页版不推荐开启 + refreshCurrPage: true, // 当跳转页面 url 与当前页 url 相同时,是否自动执行刷新 + + name: '耗子Linux面板', + tableName: 'HaoZiPanel', // 本地存储表名 + MOD_NAME: 'admin', // 模块事件名 + + debug: true, // 是否开启调试模式。如开启,接口异常时会抛出异常 URL 等信息 + interceptor: true, // 是否开启未登入拦截 + + // 自定义请求字段 + request: { + tokenName: 'access_token' // 自动携带 token 的字段名。可设置 false 不携带。 + }, + + // 自定义响应字段 + response: { + statusName: 'code', // 数据状态的字段名称 + statusCode: { + ok: 0, // 数据状态一切正常的状态码 + logout: 1001 // 登录状态失效的状态码 + }, + msgName: 'message', // 状态信息的字段名称 + dataName: 'data' // 数据详情的字段名称 + }, + + // 独立页面路由,可随意添加(无需写参数) + indPage: [ + '/user/login', // 登入页 + ], + + // 配置业务模块目录中的特殊模块 + extend: { + layim: 'layim/layim' // layim + }, + + // 主题配置 + theme: { + // 内置主题配色方案 + color: [{ + main: '#20222A', // 主题色 + selected: '#16baaa', // 选中色 + alias: 'default' // 默认别名 + }, { + main: '#03152A', + selected: '#3B91FF', + alias: 'dark-blue' // 藏蓝 + }, { + main: '#2E241B', + selected: '#A48566', + alias: 'coffee' // 咖啡 + }, { + main: '#50314F', + selected: '#7A4D7B', + alias: 'purple-red' // 紫红 + }, { + main: '#344058', + logo: '#1E9FFF', + selected: '#1E9FFF', + alias: 'ocean' // 海洋 + }, { + main: '#3A3D49', + logo: '#2F9688', + selected: '#16b777', + alias: 'green' // 墨绿 + }, { + main: '#20222A', + logo: '#F78400', + selected: '#F78400', + alias: 'red' // 橙色 + }, { + main: '#28333E', + logo: '#AA3130', + selected: '#AA3130', + alias: 'fashion-red' // 时尚红 + }, { + main: '#24262F', + logo: '#3A3D49', + selected: '#16baaa', + alias: 'classic-black' // 经典黑 + }, { + logo: '#226A62', + header: '#2F9688', + alias: 'green-header' // 墨绿头 + }, { + main: '#344058', + logo: '#0085E8', + selected: '#1E9FFF', + header: '#1E9FFF', + alias: 'ocean-header' // 海洋头 + }, { + header: '#393D49', + alias: 'classic-black-header' // 经典黑 + }, { + main: '#50314F', + logo: '#50314F', + selected: '#7A4D7B', + header: '#50314F', + alias: 'purple-red-header' // 紫红头 + }, { + main: '#28333E', + logo: '#28333E', + selected: '#AA3130', + header: '#AA3130', + alias: 'fashion-red-header' // 时尚红头 + }, { + main: '#28333E', + logo: '#16baaa', + selected: '#16baaa', + header: '#16baaa', + alias: 'green-header' // 墨绿头 + }, { + main: '#393D49', + logo: '#393D49', + selected: '#16baaa', + header: '#23262E', + alias: 'Classic-style1' // 经典风格1 + }, { + main: '#001529', + logo: '#001529', + selected: '#1890FF', + header: '#1890FF', + alias: 'Classic-style2' // 经典风格2 + }, { + main: '#25282A', + logo: '#25282A', + selected: '#35BDB2', + header: '#35BDB2', + alias: 'Classic-style3' // 经典风格3 + }], + + // 初始的颜色索引,对应上面的配色方案数组索引 + // 如果本地已经有主题色记录,则以本地记录为优先,除非请求本地数据(localStorage) + initColorIndex: 0 + } + }) +}) diff --git a/public/res/index.js b/public/res/index.js new file mode 100644 index 00000000..c39fc1d5 --- /dev/null +++ b/public/res/index.js @@ -0,0 +1,40 @@ +/** + * 初始化主题入口模块 + */ + +layui.extend({ + setter: 'config' // 将 config.js 扩展到 layui 模块 +}).define(['setter'], function (exports) { + var setter = layui.setter + + // 将核心库扩展到 layui 模块 + layui.each({ + admin: 'admin', + view: 'view', + adminIndex: 'index' + }, function (modName, fileName) { + var libs = {} + libs[modName] = '{/}' + setter.paths.core + '/modules/' + fileName + layui.extend(libs) + }) + + // 指定业务模块基础目录 + layui.config({ + base: setter.paths.modules + }) + + // 将业务模块中的特殊模块扩展到 layui 模块 + layui.each(setter.extend, function (key, value) { + var mods = {} + mods[key] = '{/}' + layui.cache.base + value + layui.extend(mods) + }) + + // 加载主题核心库入口模块 + layui.use('adminIndex', function () { + layui.use('common') // 加载公共业务模块,如不需要可剔除 + + // 输出模块 / 模块加载完毕标志 + exports('index', layui.admin) + }) +}) \ No newline at end of file diff --git a/public/res/layui/css/layui.css b/public/res/layui/css/layui.css new file mode 100644 index 00000000..f20e2a6d --- /dev/null +++ b/public/res/layui/css/layui.css @@ -0,0 +1 @@ +blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{display:inline-block;border:none;vertical-align:middle}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h1,h2,h3,h4{font-weight:700}h5,h6{font-weight:500;font-size:100%}button,input,select,textarea{font-size:100%}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}body{line-height:1.6;color:#333;color:rgba(0,0,0,.85);font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{height:0;line-height:0;margin:10px 0;padding:0;border:none!important;border-bottom:1px solid #eee!important;clear:both;overflow:hidden;background:0 0}a{color:#333;text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-clear-space{word-spacing:-5px}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.layui-edge{position:relative;display:inline-block;vertical-align:middle;width:0;height:0;border-width:6px;border-style:dashed;border-color:transparent;overflow:hidden}.layui-edge-top{top:-4px;border-bottom-color:#999;border-bottom-style:solid}.layui-edge-right{border-left-color:#999;border-left-style:solid}.layui-edge-bottom{top:2px;border-top-color:#999;border-top-style:solid}.layui-edge-left{border-right-color:#999;border-right-style:solid}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-disabled,.layui-icon,.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-disabled,.layui-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-show-v{visibility:visible!important}.layui-hide-v{visibility:hidden!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=282);src:url(../font/iconfont.eot?v=282#iefix) format('embedded-opentype'),url(../font/iconfont.woff2?v=282) format('woff2'),url(../font/iconfont.woff?v=282) format('woff'),url(../font/iconfont.ttf?v=282) format('truetype'),url(../font/iconfont.svg?v=282#layui-icon) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-icon-leaf:before{content:"\e701"}.layui-icon-folder:before{content:"\eabe"}.layui-icon-folder-open:before{content:"\eac1"}.layui-icon-gitee:before{content:"\e69b"}.layui-icon-github:before{content:"\e6a7"}.layui-icon-disabled:before{content:"\e6cc"}.layui-icon-moon:before{content:"\e6c2"}.layui-icon-error:before{content:"\e693"}.layui-icon-success:before{content:"\e697"}.layui-icon-question:before{content:"\e699"}.layui-icon-lock:before{content:"\e69a"}.layui-icon-eye:before{content:"\e695"}.layui-icon-eye-invisible:before{content:"\e696"}.layui-icon-backspace:before{content:"\e694"}.layui-icon-tips-fill:before{content:"\eb2e"}.layui-icon-test:before{content:"\e692"}.layui-icon-clear:before{content:"\e788"}.layui-icon-heart-fill:before{content:"\e68f"}.layui-icon-light:before{content:"\e748"}.layui-icon-music:before{content:"\e690"}.layui-icon-time:before{content:"\e68d"}.layui-icon-ie:before{content:"\e7bb"}.layui-icon-firefox:before{content:"\e686"}.layui-icon-at:before{content:"\e687"}.layui-icon-bluetooth:before{content:"\e689"}.layui-icon-chrome:before{content:"\e68a"}.layui-icon-edge:before{content:"\e68b"}.layui-icon-heart:before{content:"\e68c"}.layui-icon-key:before{content:"\e683"}.layui-icon-android:before{content:"\e684"}.layui-icon-mike:before{content:"\e6dc"}.layui-icon-mute:before{content:"\e685"}.layui-icon-gift:before{content:"\e627"}.layui-icon-windows:before{content:"\e67f"}.layui-icon-ios:before{content:"\e680"}.layui-icon-logout:before{content:"\e682"}.layui-icon-wifi:before{content:"\e7e0"}.layui-icon-rss:before{content:"\e808"}.layui-icon-email:before{content:"\e618"}.layui-icon-reduce-circle:before{content:"\e616"}.layui-icon-transfer:before{content:"\e691"}.layui-icon-service:before{content:"\e626"}.layui-icon-addition:before{content:"\e624"}.layui-icon-subtraction:before{content:"\e67e"}.layui-icon-slider:before{content:"\e714"}.layui-icon-print:before{content:"\e66d"}.layui-icon-export:before{content:"\e67d"}.layui-icon-cols:before{content:"\e610"}.layui-icon-screen-full:before{content:"\e622"}.layui-icon-screen-restore:before{content:"\e758"}.layui-icon-rate-half:before{content:"\e6c9"}.layui-icon-rate-solid:before{content:"\e67a"}.layui-icon-rate:before{content:"\e67b"}.layui-icon-cellphone:before{content:"\e678"}.layui-icon-vercode:before{content:"\e679"}.layui-icon-login-weibo:before{content:"\e675"}.layui-icon-login-qq:before{content:"\e676"}.layui-icon-login-wechat:before{content:"\e677"}.layui-icon-username:before{content:"\e66f"}.layui-icon-password:before{content:"\e673"}.layui-icon-refresh-3:before{content:"\e9aa"}.layui-icon-auz:before{content:"\e672"}.layui-icon-shrink-right:before{content:"\e668"}.layui-icon-spread-left:before{content:"\e66b"}.layui-icon-snowflake:before{content:"\e6b1"}.layui-icon-tips:before{content:"\e702"}.layui-icon-note:before{content:"\e66e"}.layui-icon-senior:before{content:"\e674"}.layui-icon-refresh-1:before{content:"\e666"}.layui-icon-refresh:before{content:"\e669"}.layui-icon-flag:before{content:"\e66c"}.layui-icon-theme:before{content:"\e66a"}.layui-icon-notice:before{content:"\e667"}.layui-icon-console:before{content:"\e665"}.layui-icon-website:before{content:"\e7ae"}.layui-icon-face-surprised:before{content:"\e664"}.layui-icon-set:before{content:"\e716"}.layui-icon-template:before{content:"\e663"}.layui-icon-app:before{content:"\e653"}.layui-icon-template-1:before{content:"\e656"}.layui-icon-home:before{content:"\e68e"}.layui-icon-female:before{content:"\e661"}.layui-icon-male:before{content:"\e662"}.layui-icon-tread:before{content:"\e6c5"}.layui-icon-praise:before{content:"\e6c6"}.layui-icon-rmb:before{content:"\e65e"}.layui-icon-more:before{content:"\e65f"}.layui-icon-camera:before{content:"\e660"}.layui-icon-cart-simple:before{content:"\e698"}.layui-icon-face-cry:before{content:"\e69c"}.layui-icon-face-smile:before{content:"\e6af"}.layui-icon-survey:before{content:"\e6b2"}.layui-icon-read:before{content:"\e705"}.layui-icon-location:before{content:"\e715"}.layui-icon-dollar:before{content:"\e659"}.layui-icon-diamond:before{content:"\e735"}.layui-icon-return:before{content:"\e65c"}.layui-icon-camera-fill:before{content:"\e65d"}.layui-icon-fire:before{content:"\e756"}.layui-icon-more-vertical:before{content:"\e671"}.layui-icon-cart:before{content:"\e657"}.layui-icon-star-fill:before{content:"\e658"}.layui-icon-prev:before{content:"\e65a"}.layui-icon-next:before{content:"\e65b"}.layui-icon-upload:before{content:"\e67c"}.layui-icon-upload-drag:before{content:"\e681"}.layui-icon-user:before{content:"\e770"}.layui-icon-file-b:before{content:"\e655"}.layui-icon-component:before{content:"\e857"}.layui-icon-find-fill:before{content:"\e670"}.layui-icon-loading:before{content:"\e63d"}.layui-icon-loading-1:before{content:"\e63e"}.layui-icon-add-1:before{content:"\e654"}.layui-icon-pause:before{content:"\e651"}.layui-icon-play:before{content:"\e652"}.layui-icon-video:before{content:"\e6ed"}.layui-icon-headset:before{content:"\e6fc"}.layui-icon-voice:before{content:"\e688"}.layui-icon-speaker:before{content:"\e645"}.layui-icon-fonts-del:before{content:"\e64f"}.layui-icon-fonts-html:before{content:"\e64b"}.layui-icon-fonts-code:before{content:"\e64e"}.layui-icon-fonts-strong:before{content:"\e62b"}.layui-icon-unlink:before{content:"\e64d"}.layui-icon-picture:before{content:"\e64a"}.layui-icon-link:before{content:"\e64c"}.layui-icon-face-smile-b:before{content:"\e650"}.layui-icon-align-center:before{content:"\e647"}.layui-icon-align-right:before{content:"\e648"}.layui-icon-align-left:before{content:"\e649"}.layui-icon-fonts-u:before{content:"\e646"}.layui-icon-fonts-i:before{content:"\e644"}.layui-icon-tabs:before{content:"\e62a"}.layui-icon-circle:before{content:"\e63f"}.layui-icon-radio:before{content:"\e643"}.layui-icon-share:before{content:"\e641"}.layui-icon-edit:before{content:"\e642"}.layui-icon-delete:before{content:"\e640"}.layui-icon-engine:before{content:"\e628"}.layui-icon-chart-screen:before{content:"\e629"}.layui-icon-chart:before{content:"\e62c"}.layui-icon-table:before{content:"\e62d"}.layui-icon-tree:before{content:"\e62e"}.layui-icon-upload-circle:before{content:"\e62f"}.layui-icon-templeate-1:before{content:"\e630"}.layui-icon-util:before{content:"\e631"}.layui-icon-layouts:before{content:"\e632"}.layui-icon-prev-circle:before{content:"\e633"}.layui-icon-carousel:before{content:"\e634"}.layui-icon-code-circle:before{content:"\e635"}.layui-icon-water:before{content:"\e636"}.layui-icon-date:before{content:"\e637"}.layui-icon-layer:before{content:"\e638"}.layui-icon-fonts-clear:before{content:"\e639"}.layui-icon-dialogue:before{content:"\e63a"}.layui-icon-cellphone-fine:before{content:"\e63b"}.layui-icon-form:before{content:"\e63c"}.layui-icon-file:before{content:"\e621"}.layui-icon-triangle-r:before{content:"\e623"}.layui-icon-triangle-d:before{content:"\e625"}.layui-icon-set-sm:before{content:"\e620"}.layui-icon-add-circle:before{content:"\e61f"}.layui-icon-layim-download:before{content:"\e61e"}.layui-icon-layim-uploadfile:before{content:"\e61d"}.layui-icon-404:before{content:"\e61c"}.layui-icon-about:before{content:"\e60b"}.layui-icon-layim-theme:before{content:"\e61b"}.layui-icon-down:before{content:"\e61a"}.layui-icon-up:before{content:"\e619"}.layui-icon-circle-dot:before{content:"\e617"}.layui-icon-set-fill:before{content:"\e614"}.layui-icon-search:before{content:"\e615"}.layui-icon-friends:before{content:"\e612"}.layui-icon-group:before{content:"\e613"}.layui-icon-reply-fill:before{content:"\e611"}.layui-icon-menu-fill:before{content:"\e60f"}.layui-icon-face-smile-fine:before{content:"\e60c"}.layui-icon-picture-fine:before{content:"\e60d"}.layui-icon-log:before{content:"\e60e"}.layui-icon-list:before{content:"\e60a"}.layui-icon-release:before{content:"\e609"}.layui-icon-add-circle-fine:before{content:"\e608"}.layui-icon-ok:before{content:"\e605"}.layui-icon-help:before{content:"\e607"}.layui-icon-chat:before{content:"\e606"}.layui-icon-top:before{content:"\e604"}.layui-icon-right:before{content:"\e602"}.layui-icon-left:before{content:"\e603"}.layui-icon-star:before{content:"\e600"}.layui-icon-download-circle:before{content:"\e601"}.layui-icon-close:before{content:"\1006"}.layui-icon-close-fill:before{content:"\1007"}.layui-icon-ok-circle:before{content:"\1005"}.layui-main{position:relative;width:1160px;margin:0 auto}.layui-header{position:relative;z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;left:0;top:0;bottom:0;z-index:999;width:200px;overflow-x:hidden}.layui-side-scroll{position:relative;width:220px;height:100%;overflow-x:hidden}.layui-body{position:relative;left:200px;right:0;top:0;bottom:0;z-index:900;width:auto;box-sizing:border-box}.layui-layout-body{overflow-x:hidden}.layui-layout-admin .layui-header{position:fixed;top:0;left:0;right:0;background-color:#23292e}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{position:absolute;top:60px;padding-bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;z-index:990;height:44px;line-height:44px;padding:0 15px;box-shadow:-1px 0 4px rgb(0 0 0 / 12%);background-color:#fafafa}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#16baaa;font-size:16px;box-shadow:0 1px 2px 0 rgb(0 0 0 / 15%)}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:"";display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xl1,.layui-col-xl10,.layui-col-xl11,.layui-col-xl12,.layui-col-xl2,.layui-col-xl3,.layui-col-xl4,.layui-col-xl5,.layui-col-xl6,.layui-col-xl7,.layui-col-xl8,.layui-col-xl9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:767.98px){.layui-container{padding:0 15px}.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:720px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:960px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:25%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1150px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}@media screen and (min-width:1400px){.layui-container{width:1330px}.layui-hide-xl{display:none!important}.layui-show-xl-block{display:block!important}.layui-show-xl-inline{display:inline!important}.layui-show-xl-inline-block{display:inline-block!important}.layui-col-xl1,.layui-col-xl10,.layui-col-xl11,.layui-col-xl12,.layui-col-xl2,.layui-col-xl3,.layui-col-xl4,.layui-col-xl5,.layui-col-xl6,.layui-col-xl7,.layui-col-xl8,.layui-col-xl9{float:left}.layui-col-xl1{width:8.33333333%}.layui-col-xl2{width:16.66666667%}.layui-col-xl3{width:25%}.layui-col-xl4{width:33.33333333%}.layui-col-xl5{width:41.66666667%}.layui-col-xl6{width:50%}.layui-col-xl7{width:58.33333333%}.layui-col-xl8{width:66.66666667%}.layui-col-xl9{width:75%}.layui-col-xl10{width:83.33333333%}.layui-col-xl11{width:91.66666667%}.layui-col-xl12{width:100%}.layui-col-xl-offset1{margin-left:8.33333333%}.layui-col-xl-offset2{margin-left:16.66666667%}.layui-col-xl-offset3{margin-left:25%}.layui-col-xl-offset4{margin-left:33.33333333%}.layui-col-xl-offset5{margin-left:41.66666667%}.layui-col-xl-offset6{margin-left:50%}.layui-col-xl-offset7{margin-left:58.33333333%}.layui-col-xl-offset8{margin-left:66.66666667%}.layui-col-xl-offset9{margin-left:75%}.layui-col-xl-offset10{margin-left:83.33333333%}.layui-col-xl-offset11{margin-left:91.66666667%}.layui-col-xl-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space2{margin:-1px}.layui-col-space2>*{padding:1px}.layui-col-space4{margin:-2px}.layui-col-space4>*{padding:2px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space6{margin:-3px}.layui-col-space6>*{padding:3px}.layui-col-space8{margin:-4px}.layui-col-space8>*{padding:4px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space14{margin:-7px}.layui-col-space14>*{padding:7px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space16{margin:-8px}.layui-col-space16>*{padding:8px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space24{margin:-12px}.layui-col-space24>*{padding:12px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space26{margin:-13px}.layui-col-space26>*{padding:13px}.layui-col-space28{margin:-14px}.layui-col-space28>*{padding:14px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-col-space32{margin:-16px}.layui-col-space32>*{padding:16px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:1.8;border-left:5px solid #16b777;border-radius:0 2px 2px 0;background-color:#fafafa}.layui-quote-nm{border-style:solid;border-width:1px;border-left-width:5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border-width:1px;border-style:solid}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px}.layui-field-title{margin:16px 0;border-width:0;border-top-width:1px}.layui-field-box{padding:15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#eee}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#16b777;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-20px;line-height:18px;font-size:12px;color:#5f5f5f}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border-width:1px;border-style:solid;border-radius:2px}.layui-colla-content,.layui-colla-item{border-top-width:1px;border-top-style:solid}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#fafafa;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:1.6;color:#5f5f5f}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-card{margin-bottom:15px;border-radius:2px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layui-card:last-child{margin-bottom:0}.layui-card-header{position:relative;height:42px;line-height:42px;padding:0 15px;border-bottom:1px solid #f8f8f8;color:#333;border-radius:2px 2px 0 0;font-size:14px}.layui-card-body{position:relative;padding:10px 15px;line-height:24px}.layui-card-body[pad15]{padding:15px}.layui-card-body[pad20]{padding:20px}.layui-card-body .layui-table{margin:5px 0}.layui-card .layui-tab{margin:0}.layui-panel{position:relative;border-width:1px;border-style:solid;border-radius:2px;box-shadow:1px 1px 4px rgb(0 0 0 / 8%);background-color:#fff;color:#5f5f5f}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #eee;background-color:#fff}.layui-auxiliar-moving{position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;background:0 0;z-index:9999999999}.layui-scollbar-hide{overflow:hidden!important}.layui-bg-red{background-color:#ff5722!important;color:#fff!important}.layui-bg-orange{background-color:#ffb800!important;color:#fff!important}.layui-bg-green{background-color:#16baaa!important;color:#fff!important}.layui-bg-cyan{background-color:#2f4056!important;color:#fff!important}.layui-bg-blue{background-color:#1e9fff!important;color:#fff!important}.layui-bg-purple{background-color:#a233c6!important;color:#fff!important}.layui-bg-black{background-color:#2f363c!important;color:#fff!important}.layui-bg-gray{background-color:#fafafa!important;color:#5f5f5f!important}.layui-badge-rim,.layui-border,.layui-colla-content,.layui-colla-item,.layui-collapse,.layui-elem-field,.layui-form-pane .layui-form-item[pane],.layui-form-pane .layui-form-label,.layui-input,.layui-input-split,.layui-panel,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#eee}.layui-border{border-width:1px;border-style:solid;color:#5f5f5f!important}.layui-border-red{border-width:1px;border-style:solid;border-color:#ff5722!important;color:#ff5722!important}.layui-border-orange{border-width:1px;border-style:solid;border-color:#ffb800!important;color:#ffb800!important}.layui-border-green{border-width:1px;border-style:solid;border-color:#16baaa!important;color:#16baaa!important}.layui-border-cyan{border-width:1px;border-style:solid;border-color:#2f4056!important;color:#2f4056!important}.layui-border-blue{border-width:1px;border-style:solid;border-color:#1e9fff!important;color:#1e9fff!important}.layui-border-purple{border-width:1px;border-style:solid;border-color:#a233c6!important;color:#a233c6!important}.layui-border-black{border-width:1px;border-style:solid;border-color:#2f363c!important;color:#2f363c!important}.layui-timeline-item:before{background-color:#eee}.layui-text{line-height:1.8;font-size:14px}.layui-text h1,.layui-text h2,.layui-text h3,.layui-text h4,.layui-text h5,.layui-text h6{color:#3a3a3a}.layui-text h1{font-size:32px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text h4{font-size:16px}.layui-text h5{font-size:14px}.layui-text h6{font-size:13px}.layui-text ol,.layui-text ul{padding-left:15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text ol li{margin-top:5px;list-style-type:decimal}.layui-text-em,.layui-word-aux{color:#999!important;padding-left:5px!important;padding-right:5px!important}.layui-text p{margin:15px 0}.layui-text p:first-child{margin-top:0}.layui-text p:last-child{margin-bottom:0}.layui-text a:not(.layui-btn){color:#01aaed}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text blockquote:not(.layui-elem-quote){padding:5px 15px;border-left:5px solid #eee}.layui-text pre>code:not(.layui-code){padding:15px;font-family:Courier New,Lucida Console,Consolas;background-color:#fafafa}.layui-font-12{font-size:12px!important}.layui-font-13{font-size:13px!important}.layui-font-14{font-size:14px!important}.layui-font-16{font-size:16px!important}.layui-font-18{font-size:18px!important}.layui-font-20{font-size:20px!important}.layui-font-22{font-size:22px!important}.layui-font-24{font-size:24px!important}.layui-font-26{font-size:26px!important}.layui-font-28{font-size:28px!important}.layui-font-30{font-size:30px!important}.layui-font-32{font-size:32px!important}.layui-font-red{color:#ff5722!important}.layui-font-orange{color:#ffb800!important}.layui-font-green{color:#16baaa!important}.layui-font-cyan{color:#2f4056!important}.layui-font-blue{color:#01aaed!important}.layui-font-purple{color:#a233c6!important}.layui-font-black{color:#000!important}.layui-font-gray{color:#c2c2c2!important}.layui-btn{display:inline-block;vertical-align:middle;height:38px;line-height:38px;border:1px solid transparent;padding:0 18px;background-color:#16baaa;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border-radius:2px;cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-container{word-spacing:-5px}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px;word-spacing:normal}.layui-btn-container .layui-btn+.layui-btn{margin-left:0}.layui-table .layui-btn-container .layui-btn{margin-bottom:9px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{padding:0 2px;vertical-align:middle\0;vertical-align:bottom}.layui-btn-primary{border-color:#d2d2d2;background:0 0;color:#5f5f5f}.layui-btn-primary:hover{border-color:#16baaa;color:#333}.layui-btn-normal{background-color:#1e9fff}.layui-btn-warm{background-color:#ffb800}.layui-btn-danger{background-color:#ff5722}.layui-btn-checked{background-color:#16b777}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border-color:#eee!important;background-color:#fbfbfb!important;color:#d2d2d2!important;cursor:not-allowed!important;opacity:1}.layui-btn-lg{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-sm{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:12px!important}.layui-btn-group{display:inline-block;vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#d2d2d2;color:#16baaa}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #d2d2d2}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-btn-fluid{width:100%}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\9;border-width:1px;border-style:solid;background-color:#fff;color:rgba(0,0,0,.85);border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#d2d2d2!important}.layui-input:focus,.layui-textarea:focus{border-color:#16b777!important;box-shadow:0 0 0 3px rgba(22,183,119,.08)}.layui-textarea{position:relative;min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form [lay-ignore]{display:initial}.layui-form-item{position:relative;margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{position:relative;float:left;display:block;padding:9px 15px;width:80px;font-weight:400;line-height:20px;text-align:right}.layui-form-label-col{display:block;float:none;padding:9px 0;line-height:20px;text-align:left}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block,.layui-input-inline{position:relative}.layui-input-block{margin-left:110px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{position:relative;float:left;display:block;padding:9px 0!important;line-height:20px;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border-color:#ff5722!important;box-shadow:0 0 0 3px rgba(255,87,34,.08)}.layui-input-prefix,.layui-input-split,.layui-input-suffix,.layui-input-suffix .layui-input-affix{position:absolute;right:0;top:0;padding:0 10px;width:35px;height:100%;text-align:center;transition:all .3s;box-sizing:border-box}.layui-input-prefix{left:0;border-radius:2px 0 0 2px}.layui-input-suffix{right:0;border-radius:0 2px 2px 0}.layui-input-split{border-width:1px;border-style:solid}.layui-input-prefix .layui-icon,.layui-input-split .layui-icon,.layui-input-suffix .layui-icon{position:relative;font-size:16px;color:#5f5f5f;transition:all .3s}.layui-input-group{position:relative;display:table;box-sizing:border-box}.layui-input-group>*{display:table-cell;vertical-align:middle;position:relative}.layui-input-group .layui-input{padding-right:15px}.layui-input-group .layui-input-prefix{width:auto;border-right:0}.layui-input-group .layui-input-suffix{width:auto;border-left:0}.layui-input-group .layui-input-split{white-space:nowrap}.layui-input-wrap{position:relative;line-height:38px}.layui-input-wrap .layui-input{padding-right:35px}.layui-input-wrap .layui-input::-ms-clear,.layui-input-wrap .layui-input::-ms-reveal{display:none}.layui-input-wrap .layui-input-prefix+.layui-input,.layui-input-wrap .layui-input-prefix~* .layui-input{padding-left:35px}.layui-input-wrap .layui-input-split+.layui-input,.layui-input-wrap .layui-input-split~* .layui-input{padding-left:45px}.layui-input-wrap .layui-input-prefix~.layui-form-select{position:static}.layui-input-wrap .layui-input-prefix,.layui-input-wrap .layui-input-split,.layui-input-wrap .layui-input-suffix{pointer-events:none}.layui-input-wrap .layui-input:focus+.layui-input-split{border-color:#16b777}.layui-input-wrap .layui-input-prefix.layui-input-split{border-width:0;border-right-width:1px}.layui-input-affix{line-height:38px}.layui-input-suffix .layui-input-affix{right:auto;left:-35px}.layui-input-affix .layui-icon{color:rgba(0,0,0,.8);pointer-events:auto!important;cursor:pointer}.layui-input-affix .layui-icon-clear{color:rgba(0,0,0,.3)}.layui-input-affix .layui-icon:hover{color:rgba(0,0,0,.6)}.layui-form-select{position:relative;color:#5f5f5f}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #eee;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:1px 1px 4px rgb(0 0 0 / 8%);box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#f8f8f8;-webkit-transition:.5s all;transition:.5s all}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#f8f8f8;color:#16b777;font-weight:700}.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.layui-form-selected .layui-edge{margin-top:-3px\0}:root .layui-form-selected .layui-edge{margin-top:-9px\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;display:inline-block;vertical-align:middle;height:30px;line-height:30px;margin-right:10px;padding-right:30px;background-color:#fff;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox>*{display:inline-block;vertical-align:middle}.layui-form-checkbox>div{padding:0 11px;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.layui-form-checkbox:hover>div{background-color:#c2c2c2}.layui-form-checkbox>i{position:absolute;right:0;top:0;width:30px;height:100%;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;color:rgba(255,255,255,0);font-size:20px;text-align:center;box-sizing:border-box}.layui-form-checkbox:hover>i{border-color:#c2c2c2;color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#16b777}.layui-form-checked:hover>div,.layui-form-checked>div{background-color:#16b777}.layui-form-checked:hover>i,.layui-form-checked>i{color:#16b777}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox.layui-checkbox-disabled>div{background-color:#eee!important}.layui-form [lay-checkbox]{display:none}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;min-width:18px;min-height:18px;border:none!important;margin-right:0;padding-left:24px;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary]>div{margin-top:-1px;padding-left:0;padding-right:15px;line-height:18px;background:0 0;color:#5f5f5f}.layui-form-checkbox[lay-skin=primary]>i{right:auto;left:0;width:16px;height:16px;line-height:14px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover>i{border-color:#16b777;color:#fff}.layui-form-checked[lay-skin=primary]>i{border-color:#16b777!important;background-color:#16b777;color:#fff}.layui-checkbox-disabled[lay-skin=primary]>div{background:0 0!important}.layui-form-checked.layui-checkbox-disabled[lay-skin=primary]>i{background:#eee!important;border-color:#eee!important}.layui-checkbox-disabled[lay-skin=primary]:hover>i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-checkbox[lay-skin=primary]>.layui-icon-indeterminate{border-color:#16b777}.layui-form-checkbox[lay-skin=primary]>.layui-icon-indeterminate:before{content:'';display:inline-block;vertical-align:middle;position:relative;width:50%;height:1px;margin:-1px auto 0;background-color:#16b777}.layui-form-switch{position:relative;display:inline-block;vertical-align:middle;height:24px;line-height:22px;min-width:44px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;box-sizing:border-box;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch>i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch>div{position:relative;top:0;margin-left:21px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#16b777;background-color:#16b777}.layui-form-onswitch>i{left:100%;margin-left:-21px;background-color:#fff}.layui-form-onswitch>div{margin-left:0;margin-right:21px;color:#fff!important}.layui-checkbox-disabled{border-color:#eee!important}.layui-checkbox-disabled>div{color:#c2c2c2!important}.layui-checkbox-disabled>i{border-color:#eee!important}.layui-checkbox-disabled:hover>i{color:#fff!important}.layui-form-radio{display:inline-block;vertical-align:middle;line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio>*{display:inline-block;vertical-align:middle;font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio:hover>*,.layui-form-radioed,.layui-form-radioed>i{color:#16b777}.layui-radio-disabled>i{color:#eee!important}.layui-radio-disabled>*{color:#c2c2c2!important}.layui-form [lay-radio]{display:none}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border-width:1px;border-style:solid;border-radius:2px 0 0 2px;text-align:center;background-color:#fafafa;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border-width:1px;border-style:solid}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0;border-right-width:1px}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto!important;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #eee}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-laypage a[data-page]{color:#333}.layui-laypage a{text-decoration:none!important;cursor:pointer}.layui-laypage a:hover{color:#16baaa}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#16baaa}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh{vertical-align:top}.layui-laypage .layui-laypage-refresh i{font-size:18px;cursor:pointer}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{display:inline-block;width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#16baaa!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px;clear:both}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{display:inline-block;vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;margin:10px 0;background-color:#fff;color:#5f5f5f}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:600}.layui-table-mend{background-color:#fff}.layui-table-click,.layui-table-hover,.layui-table[lay-even] tbody tr:nth-child(even){background-color:#f8f8f8}.layui-table-checked{background-color:#dbfbf0}.layui-table-checked.layui-table-click,.layui-table-checked.layui-table-hover{background-color:#abf8dd}.layui-table td,.layui-table th,.layui-table-col-set,.layui-table-fixed-r,.layui-table-grid-down,.layui-table-header,.layui-table-mend,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-total,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-width:1px;border-style:solid;border-color:#eee}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0;border-bottom-width:1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0;border-right-width:1px}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding-top:15px;padding-right:30px;padding-bottom:15px;padding-left:30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:50px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{padding-top:5px;padding-right:10px;padding-bottom:5px;padding-left:10px;font-size:12px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:30px;line-height:20px;padding-top:5px;padding-left:11px;padding-right:11px}.layui-table[lay-data],.layui-table[lay-options]{display:none}.layui-table-box{position:relative;overflow:hidden}.layui-table-view{clear:both}.layui-table-view .layui-table{position:relative;width:auto;margin:0;border:0;border-collapse:separate}.layui-table-view .layui-table[lay-skin=line]{border-width:0;border-right-width:1px}.layui-table-view .layui-table[lay-skin=row]{border-width:0;border-bottom-width:1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:0;border-top:none;border-left:none}.layui-table-view .layui-table th [lay-event],.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor:pointer}.layui-table-view .layui-table td,.layui-table-view .layui-table th span{cursor:default}.layui-table-view .layui-table td[data-edit]{cursor:text}.layui-table-view .layui-table td[data-edit]:hover:after{position:absolute;left:0;top:0;width:100%;height:100%;box-sizing:border-box;border:1px solid #16b777;pointer-events:none;content:""}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px;line-height:16px}.layui-table-view .layui-form-radio{line-height:0;padding:0}.layui-table-view .layui-form-radio>i{margin:0;font-size:20px}.layui-table-init{position:absolute;left:0;top:0;width:100%;height:100%;text-align:center;z-index:199}.layui-table-init .layui-icon{position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:30px;color:#c2c2c2}.layui-table-header{border-width:0;border-bottom-width:1px;overflow:hidden}.layui-table-header .layui-table{margin-bottom:-1px}.layui-table-column{position:relative;width:100%;min-height:41px;padding:8px 16px;border-width:0;border-bottom-width:1px}.layui-table-column .layui-btn-container{margin-bottom:-8px}.layui-table-column .layui-btn-container .layui-btn{margin-right:8px;margin-bottom:8px}.layui-table-tool .layui-inline[lay-event]{position:relative;width:26px;height:26px;padding:5px;line-height:16px;margin-right:10px;text-align:center;color:#333;border:1px solid #ccc;cursor:pointer;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool .layui-inline[lay-event]:hover{border:1px solid #999}.layui-table-tool-temp{padding-right:120px}.layui-table-tool-self{position:absolute;right:17px;top:10px}.layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{margin:0 0 0 10px}.layui-table-tool-panel{position:absolute;top:29px;left:-1px;z-index:399;padding:5px 0!important;min-width:150px;min-height:40px;border:1px solid #d2d2d2;text-align:left;overflow-y:auto;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-table-tool-panel li{padding:0 10px;margin:0!important;line-height:30px;list-style-type:none!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%}.layui-table-tool-panel li:hover{background-color:#f8f8f8}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{padding-left:28px}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] i{position:absolute;left:0;top:0}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] span{padding:0}.layui-table-tool .layui-table-tool-self .layui-table-tool-panel{left:auto;right:-1px}.layui-table-col-set{position:absolute;right:0;top:0;width:20px;height:100%;border-width:0;border-left-width:1px;background-color:#fff}.layui-table-sort{width:10px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{position:absolute;left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:3px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#5f5f5f}.layui-table-sort .layui-table-sort-desc{bottom:5px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#5f5f5f}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:38px;line-height:28px;padding:6px 15px;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;padding:0}.layui-table-cell .layui-table-link{color:#01aaed}.layui-table-cell .layui-btn{vertical-align:inherit}.layui-table-cell[align=center]{-webkit-box-pack:center}.layui-table-cell[align=right]{-webkit-box-pack:end}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-radio,.laytable-cell-space{text-align:center;-webkit-box-pack:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px;margin-bottom:-1px}.layui-table-body .layui-none{line-height:26px;padding:30px 15px;text-align:center;color:#999}.layui-table-fixed{position:absolute;left:0;top:0;z-index:101}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-l{box-shadow:1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0;border-left-width:1px;box-shadow:-1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px;border-width:0;border-left-width:1px}.layui-table-tool{position:relative;width:100%;min-height:50px;line-height:30px;padding:10px 15px;border-width:0;border-bottom-width:1px}.layui-table-tool .layui-btn-container{margin-bottom:-10px}.layui-table-total{margin-bottom:-1px;border-width:0;border-top-width:1px;overflow:hidden}.layui-table-page{border-width:0;border-top-width:1px;margin-bottom:-1px;white-space:nowrap;overflow:hidden}.layui-table-page>div{height:26px}.layui-table-page .layui-laypage{margin:0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{height:26px;line-height:26px;margin-bottom:10px;border:none;background:0 0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span.layui-laypage-curr{padding:0 12px}.layui-table-page .layui-laypage span{margin-left:0;padding:0}.layui-table-page .layui-laypage .layui-laypage-prev{margin-left:-11px!important}.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left:0;top:0;padding:0}.layui-table-page .layui-laypage button,.layui-table-page .layui-laypage input{height:26px;line-height:26px}.layui-table-page .layui-laypage input{width:40px}.layui-table-page .layui-laypage button{padding:0 10px}.layui-table-page select{height:18px}.layui-table-pagebar{float:right;line-height:23px}.layui-table-pagebar .layui-btn-sm{margin-top:-1px}.layui-table-pagebar .layui-btn-xs{margin-top:2px}.layui-table-view select[lay-ignore]{display:inline-block}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;z-index:189;min-width:100%;min-height:100%;padding:5px 14px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15);background-color:#fff}.layui-table-edit:focus{border-color:#16b777!important}input.layui-input.layui-table-edit{height:100%}select.layui-table-edit{padding:0 0 0 10px;border-color:#d2d2d2}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0}.layui-table-view .layui-form-checkbox{top:-1px;height:26px;line-height:26px}.layui-table-view .layui-form-checkbox i{height:26px}.layui-table-grid .layui-table-cell{overflow:visible}.layui-table-grid-down{position:absolute;top:0;right:0;width:26px;height:100%;padding:5px 0;border-width:0;border-left-width:1px;text-align:center;background-color:#fff;color:#999;cursor:pointer}.layui-table-grid-down .layui-icon{position:absolute;top:50%;left:50%;margin:-8px 0 0 -8px}.layui-table-grid-down:hover{background-color:#fbfbfb}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.12)}.layui-table-tips-main{margin:-49px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#5f5f5f}.layui-table-tips-c{position:absolute;right:-3px;top:-13px;width:20px;height:20px;padding:3px;cursor:pointer;background-color:#5f5f5f;border-radius:50%;color:#fff}.layui-table-tips-c:hover{background-color:#777}.layui-table-tips-c:before{position:relative;right:-2px}.layui-table-tree-nodeIcon{max-width:20px}.layui-table-tree-nodeIcon>*{width:100%}.layui-table-tree-flexIcon,.layui-table-tree-nodeIcon{margin-right:2px}.layui-table-tree-flexIcon{cursor:pointer}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-list{margin:11px 0}.layui-upload-choose{max-width:200px;padding:0 10px;color:#999;font-size:14px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-upload-drag{position:relative;display:inline-block;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#16baaa}.layui-upload-drag[lay-over]{border-color:#16baaa}.layui-upload-form{display:inline-block}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;display:inline-block;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-btn-container .layui-upload-choose{padding-left:0}.layui-menu{position:relative;margin:5px 0;background-color:#fff;box-sizing:border-box}.layui-menu *{box-sizing:border-box}.layui-menu li,.layui-menu-body-title,.layui-menu-body-title a{padding:5px 15px;color:initial}.layui-menu li{position:relative;margin:1px 0;line-height:26px;color:rgba(0,0,0,.8);font-size:14px;white-space:nowrap;cursor:pointer;transition:all .3s}.layui-menu li:hover{background-color:#f8f8f8}.layui-menu li.layui-disabled,.layui-menu li.layui-disabled *{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important}.layui-menu-item-parent:hover>.layui-menu-body-panel{display:block;animation-name:layui-fadein;animation-duration:.3s;animation-fill-mode:both;animation-delay:.2s}.layui-menu-item-group>.layui-menu-body-title,.layui-menu-item-parent>.layui-menu-body-title{padding-right:38px}.layui-menu .layui-menu-item-divider:hover,.layui-menu .layui-menu-item-group:hover,.layui-menu .layui-menu-item-none:hover{background:0 0;cursor:default}.layui-menu .layui-menu-item-group>ul{margin:5px 0 -5px}.layui-menu .layui-menu-item-group>.layui-menu-body-title{color:rgba(0,0,0,.35);user-select:none}.layui-menu .layui-menu-item-none{color:rgba(0,0,0,.35);cursor:default}.layui-menu .layui-menu-item-none{text-align:center}.layui-menu .layui-menu-item-divider{margin:5px 0;padding:0;height:0;line-height:0;border-bottom:1px solid #eee;overflow:hidden}.layui-menu .layui-menu-item-down:hover,.layui-menu .layui-menu-item-up:hover{cursor:pointer}.layui-menu .layui-menu-item-up>.layui-menu-body-title{color:rgba(0,0,0,.8)}.layui-menu .layui-menu-item-up>ul{visibility:hidden;height:0;overflow:hidden}.layui-menu .layui-menu-item-down:hover>.layui-menu-body-title>.layui-icon,.layui-menu .layui-menu-item-up>.layui-menu-body-title:hover>.layui-icon{color:#000}.layui-menu .layui-menu-item-down>ul{visibility:visible;height:auto}.layui-menu .layui-menu-item-checked,.layui-menu .layui-menu-item-checked2{background-color:#f8f8f8!important;color:#16b777}.layui-menu .layui-menu-item-checked a,.layui-menu .layui-menu-item-checked2 a{color:#16b777}.layui-menu .layui-menu-item-checked:after{position:absolute;right:-1px;top:0;bottom:0;border-right:3px solid #16b777;content:""}.layui-menu-body-title{position:relative;margin:-5px -15px;overflow:hidden;text-overflow:ellipsis}.layui-menu-body-title a{display:block;margin:-5px -15px;color:rgba(0,0,0,.8)}.layui-menu-body-title a:hover{transition:all .3s}.layui-menu-body-title>.layui-icon{position:absolute;right:15px;top:50%;margin-top:-6px;line-height:normal;font-size:14px}.layui-menu-body-title>.layui-icon:hover{transition:all .3s}.layui-menu-body-title>.layui-icon-right{right:14px}.layui-menu-body-panel{display:none;position:absolute;top:-7px;left:100%;z-index:1000;margin-left:13px;padding:5px 0}.layui-menu-body-panel:before{content:"";position:absolute;width:20px;left:-16px;top:0;bottom:0}.layui-menu-body-panel-left{left:auto;right:100%;margin:0 13px 0}.layui-menu-body-panel-left:before{left:auto;right:-16px}.layui-menu-lg li{line-height:32px}.layui-menu-lg .layui-menu-body-title a:hover,.layui-menu-lg li:hover{background:0 0;color:#16b777}.layui-menu-lg li .layui-menu-body-panel{margin-left:14px}.layui-menu-lg li .layui-menu-body-panel-left{margin:0 15px 0}.layui-dropdown{position:absolute;left:-999999px;top:-999999px;z-index:77777777;margin:5px 0;min-width:100px}.layui-dropdown:before{content:"";position:absolute;width:100%;height:6px;left:0;top:-6px}.layui-dropdown-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px");position:fixed;_position:absolute;pointer-events:auto}.layui-nav{position:relative;padding:0 15px;background-color:#2f363c;color:#fff;border-radius:2px;font-size:0;box-sizing:border-box}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;margin-top:0;list-style:none;vertical-align:middle;line-height:60px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);transition:all .3s;-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar{content:"";position:absolute;left:0;top:0;width:0;height:3px;background-color:#16b777;transition:all .2s;-webkit-transition:all .2s;pointer-events:none}.layui-nav-bar{z-index:1000}.layui-nav[lay-bar=disabled] .layui-nav-bar{display:none}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff;text-decoration:none}.layui-nav .layui-this:after{top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{position:absolute;top:0;right:3px;left:auto!important;margin-top:0;font-size:12px;cursor:pointer;transition:all .2s;-webkit-transition:all .2s}.layui-nav .layui-nav-mored,.layui-nav-itemed>a .layui-nav-more{transform:rotate(180deg)}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #eee;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap;box-sizing:border-box}.layui-nav .layui-nav-child a{color:#5f5f5f;color:rgba(0,0,0,.8)}.layui-nav .layui-nav-child a:hover{background-color:#f8f8f8;color:rgba(0,0,0,.8)}.layui-nav-child dd{margin:1px 0;position:relative}.layui-nav-child dd.layui-this{background-color:#f8f8f8;color:#000}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-child-r{left:auto;right:0}.layui-nav-child-c{text-align:center}.layui-nav.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:40px}.layui-nav-tree .layui-nav-item a{position:relative;height:40px;line-height:40px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item>a{padding-top:5px;padding-bottom:5px}.layui-nav-tree .layui-nav-more{right:15px}.layui-nav-tree .layui-nav-item>a .layui-nav-more{padding:5px 0}.layui-nav-tree .layui-nav-bar{width:5px;height:0}.layui-side .layui-nav-tree .layui-nav-bar{width:2px}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#16baaa;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-bar{background-color:#16baaa}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child dd{margin:0}.layui-nav-tree .layui-nav-child a{color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-itemed>.layui-nav-child{display:block;background-color:rgba(0,0,0,.3)!important}.layui-nav-itemed>.layui-nav-child>.layui-this>.layui-nav-child{display:block}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-nav-tree.layui-bg-gray a,.layui-nav.layui-bg-gray .layui-nav-item a{color:rgba(0,0,0,.8)}.layui-nav-tree.layui-bg-gray{padding:6px 0}.layui-nav-tree.layui-bg-gray .layui-nav-itemed>a{color:#000!important}.layui-nav.layui-bg-gray .layui-this a{color:#16b777}.layui-nav-tree.layui-bg-gray .layui-nav-itemed>.layui-nav-child{padding-left:11px;background:0 0!important}.layui-nav-tree.layui-bg-gray .layui-nav-item>a{padding-top:0;padding-bottom:0}.layui-nav-tree.layui-bg-gray .layui-nav-item>a .layui-nav-more{padding:0}.layui-nav-tree.layui-bg-gray .layui-nav-child dd.layui-this,.layui-nav-tree.layui-bg-gray .layui-nav-child dd.layui-this a,.layui-nav-tree.layui-bg-gray .layui-this,.layui-nav-tree.layui-bg-gray .layui-this>a{background:0 0!important;color:#16b777!important;font-weight:700}.layui-nav-tree.layui-bg-gray .layui-nav-bar{background-color:#16b777}.layui-breadcrumb{visibility:hidden;font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999!important}.layui-breadcrumb a:hover{color:#16b777!important}.layui-breadcrumb a cite{color:#5f5f5f;font-style:normal}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:#999}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab .layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom-width:1px;border-bottom-style:solid;transition:all .2s;-webkit-transition:all .2s}.layui-tab .layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s}.layui-tab .layui-tab-title li{position:relative;line-height:40px;min-width:65px;margin:0;padding:0 15px;text-align:center;cursor:pointer}.layui-tab .layui-tab-title li a{display:block;padding:0 15px;margin:0 -15px}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:"";width:100%;height:41px;border-width:1px;border-style:solid;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border-width:1px;border-style:solid;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#eee;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\0;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:15px 0}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#ff5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#16baaa}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #16b777}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border-width:1px;border-style:solid;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#fafafa}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#16b777}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#16b777;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#ff5722}.layui-timeline-item:before{content:"";position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%}.layui-timeline-item:first-child:before{display:block}.layui-timeline-item:last-child:before{display:none}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px;line-height:22px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;padding:0 6px;font-size:12px;text-align:center;background-color:#ff5722;color:#fff;border-radius:2px}.layui-badge{height:18px;line-height:18px}.layui-badge-dot{width:8px;height:8px;padding:0;border-radius:50%}.layui-badge-rim{height:18px;line-height:18px;border-width:1px;border-style:solid;background-color:#fff;color:#5f5f5f}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-5px 6px 0}.layui-nav .layui-badge{margin-top:-10px}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f8f8f8}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#c2c2c2;font-family:layui-icon!important;font-size:30px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f8f8f8;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\0;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:none 0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\0;opacity:1;left:20px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind ul li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#eee;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind ul li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind ul li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:16px;bottom:16px;z-index:999999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9f9f9f;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#5f5f5f;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #d9d9d9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-code{position:relative;margin:10px 0;padding:15px;line-height:20px;border:1px solid #eee;border-left-width:6px;background-color:#fafafa;color:#333;font-family:Courier New,Lucida Console,Consolas;font-size:12px}.layui-transfer-box,.layui-transfer-header,.layui-transfer-search{border-width:0;border-style:solid;border-color:#eee}.layui-transfer-box{position:relative;display:inline-block;vertical-align:middle;border-width:1px;width:200px;height:360px;border-radius:2px;background-color:#fff}.layui-transfer-box .layui-form-checkbox{width:100%;margin:0!important}.layui-transfer-header{height:38px;line-height:38px;padding:0 11px;border-bottom-width:1px}.layui-transfer-search{position:relative;padding:11px;border-bottom-width:1px}.layui-transfer-search .layui-input{height:32px;padding-left:30px;font-size:12px}.layui-transfer-search .layui-icon-search{position:absolute;left:20px;top:50%;line-height:normal;margin-top:-8px;color:#5f5f5f}.layui-transfer-active{margin:0 15px;display:inline-block;vertical-align:middle}.layui-transfer-active .layui-btn{display:block;margin:0;padding:0 15px;background-color:#16b777;border-color:#16b777;color:#fff}.layui-transfer-active .layui-btn-disabled{background-color:#fbfbfb;border-color:#eee;color:#d2d2d2}.layui-transfer-active .layui-btn:first-child{margin-bottom:15px}.layui-transfer-active .layui-btn .layui-icon{margin:0;font-size:14px!important}.layui-transfer-data{padding:5px 0;overflow:auto}.layui-transfer-data li{height:32px;line-height:32px;margin-top:0!important;padding:0 11px;list-style-type:none!important}.layui-transfer-data li:hover{background-color:#f8f8f8;transition:.5s all}.layui-transfer-data .layui-none{padding:15px 11px;text-align:center;color:#999}.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:11px 6px 11px 0;font-size:0}.layui-rate li{margin-top:0!important}.layui-rate li i.layui-icon{font-size:20px;color:#ffb800}.layui-rate li i.layui-icon{margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-colorpicker{width:38px;height:38px;border:1px solid #eee;padding:5px;border-radius:2px;line-height:24px;display:inline-block;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-colorpicker:hover{border-color:#d2d2d2}.layui-colorpicker.layui-colorpicker-lg{width:44px;height:44px;line-height:30px}.layui-colorpicker.layui-colorpicker-sm{width:30px;height:30px;line-height:20px;padding:3px}.layui-colorpicker.layui-colorpicker-xs{width:22px;height:22px;line-height:16px;padding:1px}.layui-colorpicker-trigger-bgcolor{display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);border-radius:2px}.layui-colorpicker-trigger-span{display:block;height:100%;box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;text-align:center}.layui-colorpicker-trigger-i{display:inline-block;color:#fff;font-size:12px}.layui-colorpicker-trigger-i.layui-icon-close{color:#999}.layui-colorpicker-main{position:absolute;left:-999999px;top:-999999px;z-index:77777777;width:280px;margin:5px 0;padding:7px;background:#fff;border:1px solid #d2d2d2;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-colorpicker-main-wrapper{height:180px;position:relative}.layui-colorpicker-basis{width:260px;height:100%;position:relative}.layui-colorpicker-basis-white{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.layui-colorpicker-basis-black{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(0deg,#000,transparent)}.layui-colorpicker-basis-cursor{width:10px;height:10px;border:1px solid #fff;border-radius:50%;position:absolute;top:-3px;right:-3px;cursor:pointer}.layui-colorpicker-side{position:absolute;top:0;right:0;width:12px;height:100%;background:linear-gradient(red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.layui-colorpicker-side-slider{width:100%;height:5px;box-shadow:0 0 1px #888;box-sizing:border-box;background:#fff;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;left:0}.layui-colorpicker-main-alpha{display:none;height:12px;margin-top:7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-alpha-bgcolor{height:100%;position:relative}.layui-colorpicker-alpha-slider{width:5px;height:100%;box-shadow:0 0 1px #888;box-sizing:border-box;background:#fff;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;top:0}.layui-colorpicker-main-pre{padding-top:7px;font-size:0}.layui-colorpicker-pre{width:20px;height:20px;border-radius:2px;display:inline-block;margin-left:6px;margin-bottom:7px;cursor:pointer}.layui-colorpicker-pre:nth-child(11n+1){margin-left:0}.layui-colorpicker-pre-isalpha{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-pre.layui-this{box-shadow:0 0 3px 2px rgba(0,0,0,.15)}.layui-colorpicker-pre>div{height:100%;border-radius:2px}.layui-colorpicker-main-input{text-align:right;padding-top:7px}.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin:0 0 0 10px}.layui-colorpicker-main-input div.layui-inline{float:left;margin-right:10px;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:150px;height:30px;color:#5f5f5f}.layui-slider{height:4px;background:#eee;border-radius:3px;position:relative;cursor:pointer}.layui-slider-bar{border-radius:3px;position:absolute;height:100%}.layui-slider-step{position:absolute;top:0;width:4px;height:4px;border-radius:50%;background:#fff;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.layui-slider-wrap{width:36px;height:36px;position:absolute;top:-16px;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10;text-align:center}.layui-slider-wrap-btn{width:12px;height:12px;border-radius:50%;background:#fff;display:inline-block;vertical-align:middle;cursor:pointer;transition:.3s}.layui-slider-wrap:after{content:"";height:100%;display:inline-block;vertical-align:middle}.layui-slider-wrap-btn.layui-slider-hover,.layui-slider-wrap-btn:hover{transform:scale(1.2)}.layui-slider-wrap-btn.layui-disabled:hover{transform:scale(1)!important}.layui-slider-tips{position:absolute;top:-42px;z-index:77777777;white-space:nowrap;display:none;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#fff;background:#000;border-radius:3px;height:25px;line-height:25px;padding:0 10px}.layui-slider-tips:after{content:"";position:absolute;bottom:-12px;left:50%;margin-left:-6px;width:0;height:0;border-width:6px;border-style:solid;border-color:#000 transparent transparent transparent}.layui-slider-input{width:70px;height:32px;border:1px solid #eee;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-14px}.layui-slider-input-btn{position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #eee}.layui-slider-input-btn i{cursor:pointer;position:absolute;right:0;bottom:0;width:20px;height:50%;font-size:12px;line-height:16px;text-align:center;color:#999}.layui-slider-input-btn i:first-child{top:0;border-bottom:1px solid #eee}.layui-slider-input-txt{height:100%;font-size:14px}.layui-slider-input-txt input{height:100%;border:none}.layui-slider-input-btn i:hover{color:#16baaa}.layui-slider-vertical{width:4px;margin-left:33px}.layui-slider-vertical .layui-slider-bar{width:4px}.layui-slider-vertical .layui-slider-step{top:auto;left:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-wrap{top:auto;left:-16px;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-tips{top:auto;left:2px}@media \0screen{.layui-slider-wrap-btn{margin-left:-20px}.layui-slider-vertical .layui-slider-wrap-btn{margin-left:0;margin-bottom:-20px}.layui-slider-vertical .layui-slider-tips{margin-left:-8px}.layui-slider>span{margin-left:8px}}.layui-tree{line-height:22px}.layui-tree .layui-form-checkbox{margin:0!important}.layui-tree-set{width:100%;position:relative}.layui-tree-pack{display:none;padding-left:20px;position:relative}.layui-tree-line .layui-tree-pack{padding-left:27px}.layui-tree-line .layui-tree-set .layui-tree-set:after{content:"";position:absolute;top:14px;left:-9px;width:17px;height:0;border-top:1px dotted #c0c4cc}.layui-tree-entry{position:relative;padding:3px 0;height:20px;white-space:nowrap}.layui-tree-entry:hover{background-color:#eee}.layui-tree-line .layui-tree-entry:hover{background-color:rgba(0,0,0,0)}.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color:#999;text-decoration:underline;transition:.3s}.layui-tree-main{display:inline-block;vertical-align:middle;cursor:pointer;padding-right:10px}.layui-tree-line .layui-tree-set:before{content:"";position:absolute;top:0;left:-9px;width:0;height:100%;border-left:1px dotted #c0c4cc}.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height:13px}.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height:0}.layui-tree-iconClick{display:inline-block;vertical-align:middle;position:relative;height:20px;line-height:20px;margin:0 10px;color:#c0c4cc}.layui-tree-icon{height:12px;line-height:12px;width:12px;text-align:center;border:1px solid #c0c4cc}.layui-tree-iconClick .layui-icon{font-size:18px}.layui-tree-icon .layui-icon{font-size:12px;color:#5f5f5f}.layui-tree-iconArrow{padding:0 5px}.layui-tree-iconArrow:after{content:"";position:absolute;left:4px;top:3px;z-index:100;width:0;height:0;border-width:5px;border-style:solid;border-color:transparent transparent transparent #c0c4cc;transition:.5s}.layui-tree-spread>.layui-tree-entry .layui-tree-iconClick>.layui-tree-iconArrow:after{transform:rotate(90deg) translate(3px,4px)}.layui-tree-txt{display:inline-block;vertical-align:middle;color:#555}.layui-tree-search{margin-bottom:15px;color:#5f5f5f}.layui-tree-btnGroup{visibility:hidden;display:inline-block;vertical-align:middle;position:relative}.layui-tree-btnGroup .layui-icon{display:inline-block;vertical-align:middle;padding:0 2px;cursor:pointer}.layui-tree-btnGroup .layui-icon:hover{color:#999;transition:.3s}.layui-tree-entry:hover .layui-tree-btnGroup{visibility:visible}.layui-tree-editInput{position:relative;display:inline-block;vertical-align:middle;height:20px;line-height:20px;padding:0 3px;border:none;background-color:rgba(0,0,0,.05)}.layui-tree-emptyText{text-align:center;color:#999}.layui-anim{-webkit-animation-duration:.3s;-webkit-animation-fill-mode:both;animation-duration:.3s;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.layui-trans,.layui-trans a{transition:all .2s;-webkit-transition:all .2s}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,15px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,15px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@keyframes layui-down{0%{opacity:.3;transform:translate3d(0,-100%,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-down{animation-name:layui-down}@keyframes layui-downbit{0%{opacity:.3;transform:translate3d(0,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-downbit{animation-name:layui-downbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@keyframes layui-scalesmall{0%{opacity:.3;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall{animation-name:layui-scalesmall}@keyframes layui-scalesmall-spring{0%{opacity:.3;transform:scale(1.5)}80%{opacity:.8;transform:scale(.9)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall-spring{animation-name:layui-scalesmall-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout}html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-view{display:block;position:relative;margin:11px 0;padding:0;border:1px solid #eee;border-left-width:6px;background-color:#fafafa;color:#333;font-family:Courier New;font-size:13px}.layui-code-title{position:relative;padding:0 10px;height:40px;line-height:40px;border-bottom:1px solid #eee;font-size:12px}.layui-code-title>.layui-code-about{position:absolute;right:10px;top:0;color:#b7b7b7}.layui-code-about>a{padding-left:10px}.layui-code-view>.layui-code-ol,.layui-code-view>.layui-code-ul{max-height:100%;padding:0!important;position:relative;overflow:auto}.layui-code-view>.layui-code-ol>li{position:relative;margin-top:0!important;margin-left:45px!important;line-height:20px;padding:0 10px!important;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view>.layui-code-ol>li:first-child,.layui-code-view>.layui-code-ul>li:first-child{padding-top:10px!important}.layui-code-view>.layui-code-ol>li:last-child,.layui-code-view>.layui-code-ul>li:last-child{padding-bottom:10px!important}.layui-code-view>.layui-code-ul>li{position:relative;line-height:20px;padding:0 10px!important;list-style-type:none;*list-style-type:none;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-dark{border:1px solid #0c0c0c;border-left-color:#3f3f3f;background-color:#0c0c0c;color:#c2be9e}.layui-code-dark>.layui-code-title{border-bottom:none}.layui-code-dark>.layui-code-ol>li,.layui-code-dark>.layui-code-ul>li{background-color:#3f3f3f;border-left:none}.layui-code-dark>.layui-code-ul>li{margin-left:6px}.layui-code textarea{display:none}.layui-code-preview>.layui-code{margin:0}.layui-code-preview>.layui-tab{position:relative;z-index:1;margin-bottom:0}.layui-code-preview>.layui-tab>.layui-tab-title{border-bottom:none}.layui-code-preview>.layui-code>.layui-code-title{display:none}.layui-code-preview .layui-code-item{display:none}.layui-code-item-preview{position:relative;padding:16px}.layui-code-item-preview>iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:none}.layui-code-tools{position:absolute;right:11px;top:3px}.layui-code-tools>i{display:inline-block;margin-left:6px;padding:3px;cursor:pointer}.layui-code-tools>i.layui-icon-file-b{color:#999}.layui-code-tools>i:hover{color:#16b777}.layui-code-copy{position:absolute;right:6px;top:6px;cursor:pointer;display:none}.layui-code-copy .layui-icon{color:#777;transition:all .3s}.layui-code-copy:hover .layui-icon{color:#16b777}.layui-code-view:hover>.layui-code-copy{display:block}.layui-code-copy-offset{margin-right:17px}.layui-code-preview>.layui-code-view>.layui-code-copy{display:none!important}.layui-code-full{position:fixed;left:0;top:0;z-index:1111111;width:100%;height:100%;background-color:#fff}.layui-code-full .layui-code-item{width:100%!important;border-width:0!important;border-top-width:1px!important}.layui-code-full .layui-code-item,.layui-code-full .layui-code-ol,.layui-code-full .layui-code-ul{height:calc(100vh - 51px)!important;box-sizing:border-box}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate,.layui-laydate *{box-sizing:border-box}.layui-laydate{position:absolute;z-index:99999999;margin:5px 0;border-radius:2px;font-size:14px;line-height:normal;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}.layui-laydate-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px");position:fixed;_position:absolute;pointer-events:auto}@keyframes laydate-downbit{0%{opacity:.3;transform:translate3d(0,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-laydate{animation-name:laydate-downbit}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;padding:0 5px;color:#999;font-size:18px;cursor:pointer}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-set-ym span{padding:0 10px;cursor:pointer}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:0;text-align:center}.layui-laydate-content th{font-weight:400}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.laydate-day-holidays:before{position:absolute;left:0;top:0;font-size:12px;transform:scale(.7)}.laydate-day-holidays:before{content:'\4F11';color:#ff5722}.laydate-day-holidays[type=work]:before{content:'\73ED';color:inherit}.layui-laydate .layui-this .laydate-day-holidays:before{color:#fff}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px}.layui-laydate-footer span{display:inline-block;vertical-align:top;height:26px;line-height:24px;padding:0 10px;border:1px solid #c9c9c9;border-radius:2px;background-color:#fff;font-size:12px;cursor:pointer;white-space:nowrap;transition:all .3s}.layui-laydate-footer span:hover{color:#16b777}.layui-laydate-footer span.layui-laydate-preview{cursor:default;border-color:transparent!important}.layui-laydate-footer span.layui-laydate-preview:hover{color:#777}.layui-laydate-footer span:first-child.layui-laydate-preview{padding-left:0}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{margin:0 0 0 -1px;border-radius:0}.laydate-footer-btns span:first-child{border-radius:2px 0 0 2px}.laydate-footer-btns span:last-child{border-radius:0 2px 2px 0}.layui-laydate-shortcut{width:80px;padding:6px 0;display:inline-block;vertical-align:top;overflow:auto;max-height:276px;text-align:center}.layui-laydate-shortcut+.layui-laydate-main{display:inline-block;border-left:1px solid #e2e2e2}.layui-laydate-shortcut>li{padding:5px 8px;cursor:pointer;line-height:18px}.layui-laydate .layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;box-sizing:border-box;background-color:#fff}.layui-laydate .layui-laydate-list>li{position:relative;display:inline-block;width:33.3%;height:36px;line-height:36px;margin:3px 0;vertical-align:middle;text-align:center;cursor:pointer;list-style:none}.layui-laydate .laydate-month-list>li{width:25%;margin:17px 0}.layui-laydate .laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.layui-laydate .laydate-time-list p{position:relative;top:-4px;margin:0;line-height:29px}.layui-laydate .laydate-time-list ol{height:181px;overflow:hidden}.layui-laydate .laydate-time-list>li:hover ol{overflow-y:auto}.layui-laydate .laydate-time-list ol li{width:130%;padding-left:33px;height:30px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px;color:#ff5722}.layui-laydate-range{width:546px}.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle;max-width:50%}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content,.layui-laydate-range .laydate-main-list-1 .layui-laydate-header{border-left:1px solid #e2e2e2}.layui-laydate-range.layui-laydate-linkage .laydate-main-list-0 .laydate-next-m,.layui-laydate-range.layui-laydate-linkage .laydate-main-list-0 .laydate-next-y,.layui-laydate-range.layui-laydate-linkage .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range.layui-laydate-linkage .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#777}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#16b777}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{color:#333}.layui-laydate-content td{color:#777}.layui-laydate-content td.laydate-day-now{color:#16b777}.layui-laydate-content td.laydate-day-now:after{content:'';position:absolute;width:100%;height:30px;left:0;top:0;border:1px solid #16b777;box-sizing:border-box}.layui-laydate-linkage .layui-laydate-content td.laydate-selected>div{background-color:#00f7de}.layui-laydate-linkage .laydate-selected:hover>div{background-color:#00f7de!important}.layui-laydate-content td.laydate-selected:after,.layui-laydate-content td:hover:after{content:none}.layui-laydate-content td>div:hover,.layui-laydate-list li:hover,.layui-laydate-shortcut>li:hover{background-color:#eee;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.layui-laydate-linkage .laydate-selected.laydate-day-next>div,.layui-laydate-linkage .laydate-selected.laydate-day-prev>div{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#ff5722}.laydate-day-mark::after{background-color:#16b777}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#16b777}.layui-laydate .layui-this,.layui-laydate .layui-this>div{background-color:#16baaa!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content td>div{padding:7px 0;height:100%}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#16baaa}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead{border:1px solid #e2e2e2}.layui-laydate-linkage.laydate-theme-grid .laydate-selected,.layui-laydate-linkage.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#16baaa!important}.layui-laydate-linkage.laydate-theme-grid .laydate-selected.laydate-day-next,.layui-laydate-linkage.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px}.laydate-theme-grid .layui-laydate-content td>div{height:29px;margin-top:-1px}.laydate-theme-circle .layui-laydate-content td.layui-this>div,.laydate-theme-circle .layui-laydate-content td>div{width:28px;height:28px;line-height:28px;border-radius:14px;margin:0 4px;padding:0}.layui-laydate.laydate-theme-circle .layui-laydate-content table td.layui-this{background-color:transparent!important}.laydate-theme-grid.laydate-theme-circle .layui-laydate-content td>div{margin:0 3.5px}.laydate-theme-fullpanel .layui-laydate-main{width:526px}.laydate-theme-fullpanel .layui-laydate-list{width:252px;left:272px}.laydate-theme-fullpanel .laydate-set-ym span{display:none}.laydate-theme-fullpanel .laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-theme-fullpanel .laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-theme-fullpanel .laydate-time-show .layui-laydate-header .layui-icon{display:inline-block!important}.laydate-theme-fullpanel .laydate-btns-time{display:none}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch}.layui-layer{top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #b2b2b2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-btn a,.layui-layer-setwin span{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes layer-slide-down{from{transform:translate3d(0,-100%,0)}to{transform:translate3d(0,0,0)}}@keyframes layer-slide-down-out{from{transform:translate3d(0,0,0)}to{transform:translate3d(0,-100%,0)}}.layer-anim-slide-down{animation-name:layer-slide-down}.layer-anim-slide-down-out{animation-name:layer-slide-down-out}@keyframes layer-slide-left{from{transform:translate3d(100%,0,0)}to{transform:translate3d(0,0,0)}}@keyframes layer-slide-left-out{from{transform:translate3d(0,0,0)}to{transform:translate3d(100%,0,0)}}.layer-anim-slide-left{animation-name:layer-slide-left}.layer-anim-slide-left-out{animation-name:layer-slide-left-out}@keyframes layer-slide-up{from{transform:translate3d(0,100%,0)}to{transform:translate3d(0,0,0)}}@keyframes layer-slide-up-out{from{transform:translate3d(0,0,0)}to{transform:translate3d(0,100%,0)}}.layer-anim-slide-up{animation-name:layer-slide-up}.layer-anim-slide-up-out{animation-name:layer-slide-up-out}@keyframes layer-slide-right{from{transform:translate3d(-100%,0,0)}to{transform:translate3d(0,0,0)}}@keyframes layer-slide-right-out{from{transform:translate3d(0,0,0)}to{transform:translate3d(-100%,0,0)}}.layer-anim-slide-right{animation-name:layer-slide-right}.layer-anim-slide-right-out{animation-name:layer-slide-right-out}.layui-layer-title{padding:0 81px 0 16px;height:50px;line-height:50px;border-bottom:1px solid #f0f0f0;font-size:14px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:16px;font-size:0;line-height:initial}.layui-layer-setwin span{position:relative;width:16px;height:16px;line-height:18px;margin-left:10px;text-align:center;font-size:16px;cursor:pointer;color:#000;_overflow:hidden}.layui-layer-setwin .layui-layer-min:before{content:'';position:absolute;width:12px;height:1px;left:50%;top:50%;margin:-.5px 0 0 -6px;background-color:#2e2d3c;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover:before{background-color:#2d93ca}.layui-layer-setwin .layui-layer-max:after,.layui-layer-setwin .layui-layer-max:before{content:'';position:absolute;left:50%;top:50%;z-index:1;width:9px;height:9px;margin:-5px 0 0 -5px;border:1px solid #2e2d3c}.layui-layer-setwin .layui-layer-max:hover:after,.layui-layer-setwin .layui-layer-max:hover:before{border-color:#2d93ca}.layui-layer-setwin .layui-layer-min:hover:before{background-color:#2d93ca}.layui-layer-setwin .layui-layer-maxmin:after,.layui-layer-setwin .layui-layer-maxmin:before{width:7px;height:7px;margin:-3px 0 0 -3px;background-color:#fff}.layui-layer-setwin .layui-layer-maxmin:after{z-index:0;margin:-5px 0 0 -1px}.layui-layer-setwin .layui-layer-close{cursor:pointer}.layui-layer-setwin .layui-layer-close:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;color:#fff;background-color:#787878;padding:3px;border:3px solid;width:18px;height:18px;font-size:18px;font-weight:bolder;border-radius:50%;margin-left:0;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{opacity:unset;background-color:#3888f6}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1e9fff;background-color:#1e9fff;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:240px}.layui-layer-dialog .layui-layer-content{position:relative;padding:16px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-face{position:absolute;top:18px;left:16px;color:#959595;font-size:32px;_left:-40px}.layui-layer-dialog .layui-layer-content .layui-icon-tips{color:#f39b12}.layui-layer-dialog .layui-layer-content .layui-icon-success{color:#16b777}.layui-layer-dialog .layui-layer-content .layui-icon-error{top:19px;color:#ff5722}.layui-layer-dialog .layui-layer-content .layui-icon-question{color:#ffb800}.layui-layer-dialog .layui-layer-content .layui-icon-lock{color:#787878}.layui-layer-dialog .layui-layer-content .layui-icon-face-cry{color:#ff5722}.layui-layer-dialog .layui-layer-content .layui-icon-face-smile{color:#16b777}.layui-layer-rim{border:6px solid #8d8d8d;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #d3d4d3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-close{color:#fff}.layui-layer-hui .layui-layer-content{padding:11px 24px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:18px 24px 18px 58px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:76px;height:38px;line-height:38px;text-align:center}.layui-layer-loading-icon{font-size:38px;color:#959595}.layui-layer-loading2{text-align:center}.layui-layer-loading-2{position:relative;height:38px}.layui-layer-loading-2:after,.layui-layer-loading-2:before{content:'';position:absolute;left:50%;top:50%;width:38px;height:38px;margin:-19px 0 0 -19px;border-radius:50%;border:3px solid #d2d2d2;box-sizing:border-box}.layui-layer-loading-2:after{border-color:transparent;border-left-color:#1e9fff}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan .layui-layer-title{background:#4476a7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;border-top:1px solid #e9e7e7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#e9e7e7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#c9c5c5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92b8b1}.layui-layer-lan .layui-layer-setwin .layui-icon,.layui-layer-molv .layui-layer-setwin .layui-icon{color:#fff}.layui-layer-win10{border:1px solid #aaa;box-shadow:1px 1px 6px rgba(0,0,0,.3);border-radius:none}.layui-layer-win10 .layui-layer-title{height:32px;line-height:32px;padding-left:8px;border-bottom:none;font-size:12px}.layui-layer-win10 .layui-layer-setwin{right:0;top:0}.layui-layer-win10 .layui-layer-setwin span{margin-left:0;padding:8px}.layui-layer-win10.layui-layer-page .layui-layer-setwin span{padding:8px 11px}.layui-layer-win10 .layui-layer-setwin span:hover{background-color:#e5e5e5}.layui-layer-win10 .layui-layer-setwin span.layui-icon-close:hover{background-color:#e81123;color:#fff}.layui-layer-win10.layui-layer-dialog .layui-layer-content{padding:8px 16px 32px;color:#0033bc}.layui-layer-win10.layui-layer-dialog .layui-layer-padding{padding-top:18px;padding-left:58px}.layui-layer-win10 .layui-layer-btn{padding:5px 5px 10px;border-top:1px solid #dfdfdf;background-color:#f0f0f0}.layui-layer-win10 .layui-layer-btn a{height:18px;line-height:18px;background-color:#e1e1e1;border-color:#adadad;color:#000;font-size:12px;transition:all .3s}.layui-layer-win10 .layui-layer-btn a:hover{border-color:#2a8edd;background-color:#e5f1fb}.layui-layer-win10 .layui-layer-btn .layui-layer-btn0{border-color:#0078d7}.layui-layer-prompt .layui-layer-input{display:block;width:260px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:16px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;display:inline-block;vertical-align:top;border-left:1px solid transparent;border-right:1px solid transparent;min-width:80px;max-width:300px;padding:0 16px;text-align:center;cursor:default;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:51px;border-left-color:#eee;border-right-color:#eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left-color:transparent}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{background:0 0;box-shadow:none}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgnext,.layui-layer-imgprev{position:fixed;top:50%;width:52px;height:52px;line-height:52px;margin-top:-26px;cursor:pointer;font-size:52px;color:#717171}.layui-layer-imgprev{left:32px}.layui-layer-imgnext{right:32px}.layui-layer-imgnext:hover,.layui-layer-imgprev:hover{color:#959595}.layui-layer-imgbar{position:fixed;left:0;right:0;bottom:0;width:100%;height:40px;line-height:40px;background-color:#000\9;filter:Alpha(opacity=60);background-color:rgba(2,0,0,.35);color:#fff;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;padding:0 5px;font-size:12px;color:#fff}.layui-layer-imgtit h3{max-width:65%;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-weight:300}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}} \ No newline at end of file diff --git a/public/res/layui/font/iconfont.eot b/public/res/layui/font/iconfont.eot new file mode 100644 index 00000000..3f5e98bb Binary files /dev/null and b/public/res/layui/font/iconfont.eot differ diff --git a/public/res/layui/font/iconfont.svg b/public/res/layui/font/iconfont.svg new file mode 100644 index 00000000..d317092a --- /dev/null +++ b/public/res/layui/font/iconfont.svg @@ -0,0 +1,790 @@ + + + + Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/res/layui/font/iconfont.ttf b/public/res/layui/font/iconfont.ttf new file mode 100644 index 00000000..6e84a89e Binary files /dev/null and b/public/res/layui/font/iconfont.ttf differ diff --git a/public/res/layui/font/iconfont.woff b/public/res/layui/font/iconfont.woff new file mode 100644 index 00000000..acd7ed60 Binary files /dev/null and b/public/res/layui/font/iconfont.woff differ diff --git a/public/res/layui/font/iconfont.woff2 b/public/res/layui/font/iconfont.woff2 new file mode 100644 index 00000000..5badd6e3 Binary files /dev/null and b/public/res/layui/font/iconfont.woff2 differ diff --git a/public/res/layui/layui.js b/public/res/layui/layui.js new file mode 100644 index 00000000..fe749d37 --- /dev/null +++ b/public/res/layui/layui.js @@ -0,0 +1 @@ +/** v2.8.8 | MIT Licensed */;!function(d){"use strict";var t,h=d.document,m={modules:{},status:{},timeout:10,event:{}},o=function(){this.v="2.8.8"},e=d.LAYUI_GLOBAL||{},v=(t=h.currentScript?h.currentScript.src:function(){for(var t,e=h.scripts,n=e.length-1,o=n;01e3*m.timeout/4?g(u+" is not a valid module","error"):void(m.status[u]?c():setTimeout(o,4))}())}function c(){e.push(layui[u]),11e3*m.timeout/4?g(u+" is not a valid module","error"):void("string"==typeof m.modules[u]&&m.status[u]?c():setTimeout(f,4))}():((p=h.createElement("script"))["async"]=!0,p.charset="utf-8",p.src=y+((i=!0===m.version?m.v||(new Date).getTime():m.version||"")?"?v="+i:""),a.appendChild(p),!p.attachEvent||p.attachEvent.toString&&p.attachEvent.toString().indexOf("[native code")<0||b?p.addEventListener("load",function(t){s(t,y)},!1):p.attachEvent("onreadystatechange",function(t){s(t,y)}),m.modules[u]=y),r},o.prototype.disuse=function(t){var n=this;return t=n.isArray(t)?t:[t],n.each(t,function(t,e){m.status[e],delete n[e],delete N[e],delete n.modules[e],delete m.status[e],delete m.modules[e]}),n},o.prototype.getStyle=function(t,e){t=t.currentStyle||d.getComputedStyle(t,null);return t[t.getPropertyValue?"getPropertyValue":"getAttribute"](e)},o.prototype.link=function(n,o,t){var r=this,e=h.getElementsByTagName("head")[0],i=h.createElement("link"),a="layuicss-"+((t="string"==typeof o?o:t)||n).replace(/\.|\//g,""),u="creating",l=0;return i.href=n+(m.debug?"?v="+(new Date).getTime():""),i.rel="stylesheet",i.id=a,i.media="all",h.getElementById(a)||e.appendChild(i),"function"!=typeof o||function s(t){var e=h.getElementById(a);return++l>1e3*m.timeout/100?g(n+" timeout"):void(1989===parseInt(r.getStyle(e,"width"))?(t===u&&e.removeAttribute("lay-status"),e.getAttribute("lay-status")===u?setTimeout(s,100):o()):(e.setAttribute("lay-status",u),setTimeout(function(){s(u)},100)))}(),r},o.prototype.addcss=function(t,e,n){return layui.link(m.dir+"css/"+t,e,n)},m.callback={},o.prototype.factory=function(t){if(layui[t])return"function"==typeof m.callback[t]?m.callback[t]:null},o.prototype.img=function(t,e,n){var o=new Image;if(o.src=t,o.complete)return e(o);o.onload=function(){o.onload=null,"function"==typeof e&&e(o)},o.onerror=function(t){o.onerror=null,"function"==typeof n&&n(t)}},o.prototype.config=function(t){for(var e in t=t||{})m[e]=t[e];return this},o.prototype.modules=function(){var t,e={};for(t in N)e[t]=N[t];return e}(),o.prototype.extend=function(t){for(var e in t=t||{})this[e]||this.modules[e]?g(e+" Module already exists","error"):this.modules[e]=t[e];return this},o.prototype.router=o.prototype.hash=function(t){var n={path:[],search:{},hash:((t=t||location.hash).match(/[^#](#.*$)/)||[])[1]||""};return/^#\//.test(t)&&(t=t.replace(/^#\//,""),n.href="/"+t,t=t.replace(/([^#])(#.*$)/,"$1").split("/")||[],this.each(t,function(t,e){/^\w+=/.test(e)?(e=e.split("="),n.search[e[0]]=e[1]):n.path.push(e)})),n},o.prototype.url=function(t){var r,e,n=this;return{pathname:(t?((t.match(/\.[^.]+?\/.+/)||[])[0]||"").replace(/^[^\/]+/,"").replace(/\?.+/,""):location.pathname).replace(/^\//,"").split("/"),search:(r={},e=(t?((t.match(/\?.+/)||[])[0]||"").replace(/\#.+/,""):location.search).replace(/^\?+/,"").split("&"),n.each(e,function(t,e){var n=e.indexOf("="),o=n<0?e.substr(0,e.length):0!==n&&e.substr(0,n);o&&(r[o]=0(s.innerHeight||l.documentElement.clientHeight)},h.position=function(t,e,n){var i,r,o,c,u,a,f;e&&(n=n||{},t!==l&&t!==h("body")[0]||(n.clickType="right"),u="right"===n.clickType?{left:(u=n.e||s.event||{}).clientX,top:u.clientY,right:u.clientX,bottom:u.clientY}:t.getBoundingClientRect(),a=e.offsetWidth,f=e.offsetHeight,i=function(t){return l.body[t=t?"scrollLeft":"scrollTop"]|l.documentElement[t]},o=u.left,c=u.bottom,"center"===n.align?o-=(a-t.offsetWidth)/2:"right"===n.align&&(o=o-a+t.offsetWidth),(o=o+a+5>(r=function(t){return l.documentElement[t?"clientWidth":"clientHeight"]})("width")?r("width")-a-5:o)<5&&(o=5),c+f+5>r()&&(u.top>f+5?c=u.top-f-10:"right"===n.clickType?(c=r()-f-10)<0&&(c=0):c=5),(a=n.position)&&(e.style.position=a),e.style.left=o+("fixed"===a?0:i(1))+"px",e.style.top=c+("fixed"===a?0:i())+"px",h.hasScrollbar()||(f=e.getBoundingClientRect(),!n.SYSTEM_RELOAD&&f.bottom+5>r()&&(n.SYSTEM_RELOAD=!0,setTimeout(function(){h.position(t,e,n)},50))))},h.options=function(t,e){if(e="object"==typeof e?e:{attr:e},t===l)return{};var t=h(t),n=e.attr||"lay-options",t=t.attr(n);try{return new Function("return "+(t||"{}"))()}catch(i){return layui.hint().error(e.errorText||[n+'="'+t+'"',"\n parseerror: "+i].join("\n"),"error"),{}}},h.isTopElem=function(n){var t=[l,h("body")[0]],i=!1;return h.each(t,function(t,e){if(e===n)return i=!0}),i},r.addStr=function(n,t){return n=n.replace(/\s+/," "),t=t.replace(/\s+/," ").split(" "),h.each(t,function(t,e){new RegExp("\\b"+e+"\\b").test(n)||(n=n+" "+e)}),n.replace(/^\s|\s$/,"")},r.removeStr=function(n,t){return n=n.replace(/\s+/," "),t=t.replace(/\s+/," ").split(" "),h.each(t,function(t,e){e=new RegExp("\\b"+e+"\\b");e.test(n)&&(n=n.replace(e,""))}),n.replace(/\s+/," ").replace(/^\s|\s$/,"")},r.fn.find=function(n){var i=[],r="object"==typeof n;return this.each(function(t,e){e=r&&e.contains(n)?n:e.querySelectorAll(n||null);h.each(e,function(t,e){i.push(e)})}),h(i)},r.fn.each=function(t){return h.each.call(this,this,t)},r.fn.addClass=function(n,i){return this.each(function(t,e){e.className=r[i?"removeStr":"addStr"](e.className,n)})},r.fn.removeClass=function(t){return this.addClass(t,!0)},r.fn.hasClass=function(n){var i=!1;return this.each(function(t,e){new RegExp("\\b"+n+"\\b").test(e.className)&&(i=!0)}),i},r.fn.css=function(e,i){var t=this,r=function(t){return isNaN(t)?t:t+"px"};return"string"!=typeof e||i!==undefined?t.each(function(t,n){"object"==typeof e?h.each(e,function(t,e){n.style[t]=r(e)}):n.style[e]=r(i)}):0]|&(?=#[a-zA-Z0-9]+)/g.test(e+="")?e.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,"""):e}},i=function(e){return new RegExp(e,"g")},u=function(e,r){var n="Laytpl Error: ";return"object"==typeof console&&console.error(n+e+"\n"+(r||"")),n+e},n=function(e,r){var n=this,e=(n.config=n.config||{},n.template=e,function(e){for(var r in e)n.config[r]=e[r]});e(c),e(r)},r=(n.prototype.tagExp=function(e,r,n){var c=this.config;return i((r||"")+c.open+["#([\\s\\S])+?","([^{#}])*?"][e||0]+c.close+(n||""))},n.prototype.parse=function(e,r){var n=this,c=n.config,t=e,o=i("^"+c.open+"#",""),p=i(c.close+"$","");if("string"!=typeof e)return e;e='"use strict";var view = "'+(e=e.replace(/\s+|\r|\t|\n/g," ").replace(i(c.open+"#"),c.open+"# ").replace(i(c.close+"}"),"} "+c.close).replace(/\\/g,"\\\\").replace(i(c.open+"!(.+?)!"+c.close),function(e){return e=e.replace(i("^"+c.open+"!"),"").replace(i("!"+c.close),"").replace(i(c.open+"|"+c.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(n.tagExp(),function(e){return'";'+(e=e.replace(o,"").replace(p,"")).replace(/\\(.)/g,"$1")+';view+="'}).replace(n.tagExp(1),function(e){var r='"+laytpl.escape(';return e.replace(/\s/g,"")===c.open+c.close?"":(e=e.replace(i(c.open+"|"+c.close),""),/^=/.test(e)?e=e.replace(/^=/,""):/^-/.test(e)&&(e=e.replace(/^-/,""),r='"+('),r+e.replace(/\\(.)/g,"$1")+')+"')}))+'";return view;';try{return n.cache=e=new Function("d, laytpl",e),e(r,l)}catch(a){return delete n.cache,u(a,t)}},n.prototype.render=function(e,r){e=e||{};var n=this,e=n.cache?n.cache(e,l):n.parse(n.template,e);return"function"==typeof r&&r(e),e},function(e,r){return new n(e,r)});r.config=function(e){for(var r in e=e||{})c[r]=e[r]},r.v="2.0.0",e("laytpl",r)});layui.define(function(e){"use strict";var r=document,u="getElementById",c="getElementsByTagName",a="layui-disabled",t=function(e){var a=this;a.config=e||{},a.config.index=++o.index,a.render(!0)},o=(t.prototype.type=function(){var e=this.config;if("object"==typeof e.elem)return e.elem.length===undefined?2:3},t.prototype.view=function(){var t,i,n=this.config,r=n.groups="groups"in n?Number(n.groups)||0:5,u=(n.layout="object"==typeof n.layout?n.layout:["prev","page","next"],n.count=Number(n.count)||0,n.curr=Number(n.curr)||1,n.limits="object"==typeof n.limits?n.limits:[10,20,30,40,50],n.limit=Number(n.limit)||10,n.pages=Math.ceil(n.count/n.limit)||1,n.curr>n.pages?n.curr=n.pages:n.curr<1&&(n.curr=1),r<0?r=1:r>n.pages&&(r=n.pages),n.prev="prev"in n?n.prev:"上一页",n.next="next"in n?n.next:"下一页",n.pages>r?Math.ceil((n.curr+(1'+n.prev+"":"",page:function(){var e=[];if(n.count<1)return"";1'+(n.first||1)+"");var a=Math.floor((r-1)/2),t=1n.pages?n.pages:a:r;for(i-t…');t<=i;t++)t===n.curr?e.push('"+t+""):e.push(''+t+"");return n.pages>r&&n.pages>i&&!1!==n.last&&(i+1…'),0!==r&&e.push(''+(n.last||n.pages)+"")),e.join("")}(),next:n.next?''+n.next+"":"",count:'\u5171 '+n.count+" \u6761",limit:(t=['"),refresh:['','',""].join(""),skip:['到第','','页',""].join("")};return['
',(i=[],layui.each(n.layout,function(e,a){l[a]&&i.push(l[a])}),i.join("")),"
"].join("")},t.prototype.jump=function(e,a){if(e){var t=this,i=t.config,n=e.children,r=e[c]("button")[0],u=e[c]("input")[0],e=e[c]("select")[0],l=function(){var e=Number(u.value.replace(/\s|\D/g,""));e&&(i.curr=e,t.render())};if(a)return l();for(var s=0,p=n.length;si.pages||(i.curr=e,t.render())});e&&o.on(e,"change",function(){var e=this.value;i.curr*e>i.count&&(i.curr=Math.ceil(i.count/e)),i.limit=e,t.render()}),r&&o.on(r,"click",function(){l()})}},t.prototype.skip=function(t){var i,e;t&&(i=this,(e=t[c]("input")[0])&&o.on(e,"keyup",function(e){var a=this.value,e=e.keyCode;/^(37|38|39|40)$/.test(e)||(/\D/.test(a)&&(this.value=a.replace(/\D/,"")),13===e&&i.jump(t,!0))}))},t.prototype.render=function(e){var a=this,t=a.config,i=a.type(),n=a.view(),i=(2===i?t.elem&&(t.elem.innerHTML=n):3===i?t.elem.html(n):r[u](t.elem)&&(r[u](t.elem).innerHTML=n),t.jump&&t.jump(t,e),r[u]("layui-laypage-"+t.index));a.jump(i),t.hash&&!e&&(location.hash="!"+t.hash+"="+t.curr),a.skip(i)},{render:function(e){return new t(e).index},index:layui.laypage?layui.laypage.index+1e4:0,on:function(a,e,t){return a.attachEvent?a.attachEvent("on"+e,function(e){e.target=e.srcElement,t.call(a,e)}):a.addEventListener(e,t,!1),this}});e("laypage",o)});!function(i,v){"use strict";var n=i.layui&&layui.define,l={getPath:i.lay&&lay.getPath?lay.getPath:"",link:function(e,t,a){D.path&&i.lay&&lay.layui&&lay.layui.link(D.path+e,t,a)}},e=i.LAYUI_GLOBAL||{},d="layui-laydate-id",D={v:"5.5.0",config:{weekStart:0},index:i.laydate&&i.laydate.v?1e5:0,path:e.laydate_dir||l.getPath,set:function(e){var t=this;return t.config=lay.extend({},t.config,e),t},ready:function(e){var t="laydate",a=(n?"modules/":"")+"laydate.css?v="+D.v;return n?layui["layui.all"]?"function"==typeof e&&e():layui.addcss(a,e,t):l.link(a,e,t),this}},s=function(){var t=this,e=t.config.id;return(s.that[e]=t).inst={hint:function(e){t.hint.call(t,e)},reload:function(e){t.reload.call(t,e)},config:t.config}},a="laydate",x="layui-this",k="laydate-disabled",h=[100,2e5],T="layui-laydate-static",w="layui-laydate-list",o="laydate-selected",r="layui-laydate-hint",y="laydate-day-prev",m="laydate-day-next",C=".laydate-btns-confirm",M="laydate-time-text",L="laydate-btns-time",E="layui-laydate-preview",S="layui-laydate-shade",I=function(e){var t,a=this,n=(a.index=++D.index,a.config=lay.extend({},a.config,D.config,e),lay(e.elem||a.config.elem));return 1\u8bf7\u91cd\u65b0\u9009\u62e9",invalidDate:"\u4e0d\u5728\u6709\u6548\u65e5\u671f\u6216\u65f6\u95f4\u8303\u56f4\u5185",formatError:["\u65e5\u671f\u683c\u5f0f\u4e0d\u5408\u6cd5
\u5fc5\u987b\u9075\u5faa\u4e0b\u8ff0\u683c\u5f0f\uff1a
","
\u5df2\u4e3a\u4f60\u91cd\u7f6e"],preview:"\u5f53\u524d\u9009\u4e2d\u7684\u7ed3\u679c"},en:{weeks:["Su","Mo","Tu","We","Th","Fr","Sa"],time:["Hours","Minutes","Seconds"],timeTips:"Select Time",startTime:"Start Time",endTime:"End Time",dateTips:"Select Date",month:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],tools:{confirm:"Confirm",clear:"Clear",now:"Now"},timeout:"End time cannot be less than start Time
Please re-select",invalidDate:"Invalid date",formatError:["The date format error
Must be followed\uff1a
","
It has been reset"],preview:"The selected result"}};return e[this.config.lang]||e.cn},I.prototype.reload=function(e){this.config=lay.extend({},this.config,e),this.init()},I.prototype.init=function(){var r=this,o=r.config,e="static"===o.position,t={year:"yyyy",month:"yyyy-MM",date:"yyyy-MM-dd",time:"HH:mm:ss",datetime:"yyyy-MM-dd HH:mm:ss"};o.elem=lay(o.elem),o.eventElem=lay(o.eventElem),o.elem[0]&&("array"!==layui.type(o.theme)&&(o.theme=[o.theme]),o.fullPanel&&("datetime"!==o.type||o.range)&&delete o.fullPanel,r.rangeStr=o.range?"string"==typeof o.range?o.range:"-":"",r.rangeLinked=!(!o.range||!o.rangeLinked||"date"!==o.type&&"datetime"!==o.type),r.autoCalendarModel=function(){var e=r.rangeLinked;return r.rangeLinked=o.range&&("date"===o.type||"datetime"===o.type)&&(!r.startDate||!r.endDate||r.startDate&&r.endDate&&r.startDate.year===r.endDate.year&&r.startDate.month===r.endDate.month),lay(r.elem)[r.rangeLinked?"addClass":"removeClass"]("layui-laydate-linkage"),r.rangeLinked!=e},r.autoCalendarModel.auto=r.rangeLinked&&"auto"===o.rangeLinked,"array"===layui.type(o.range)&&(r.rangeElem=[lay(o.range[0]),lay(o.range[1])]),t[o.type]||(i.console&&console.error&&console.error("laydate type error:'"+o.type+"' is not supported"),o.type="date"),o.format===t.date&&(o.format=t[o.type]||t.date),r.format=s.formatArr(o.format),o.weekStart&&!/^[0-6]$/.test(o.weekStart)&&(t=r.lang(),o.weekStart=t.weeks.indexOf(o.weekStart),-1===o.weekStart&&(o.weekStart=0)),r.EXP_IF="",r.EXP_SPLIT="",lay.each(r.format,function(e,t){e=new RegExp(c).test(t)?"\\d{"+(new RegExp(c).test(r.format[0===e?e+1:e-1]||"")?/^yyyy|y$/.test(t)?4:t.length:/^yyyy$/.test(t)?"1,4":/^y$/.test(t)?"1,308":"1,2")+"}":"\\"+t;r.EXP_IF=r.EXP_IF+e,r.EXP_SPLIT=r.EXP_SPLIT+"("+e+")"}),r.EXP_IF_ONE=new RegExp("^"+r.EXP_IF+"$"),r.EXP_IF=new RegExp("^"+(o.range?r.EXP_IF+"\\s\\"+r.rangeStr+"\\s"+r.EXP_IF:r.EXP_IF)+"$"),r.EXP_SPLIT=new RegExp("^"+r.EXP_SPLIT+"$",""),r.isInput(o.elem[0])||"focus"===o.trigger&&(o.trigger="click"),o.elem.attr("lay-key",r.index),o.eventElem.attr("lay-key",r.index),o.elem.attr(d,o.id),o.mark=lay.extend({},o.calendar&&"cn"===o.lang?{"0-1-1":"\u5143\u65e6","0-2-14":"\u60c5\u4eba","0-3-8":"\u5987\u5973","0-3-12":"\u690d\u6811","0-4-1":"\u611a\u4eba","0-5-1":"\u52b3\u52a8","0-5-4":"\u9752\u5e74","0-6-1":"\u513f\u7ae5","0-9-10":"\u6559\u5e08","0-10-1":"\u56fd\u5e86","0-12-25":"\u5723\u8bde"}:{},o.mark),lay.each(["min","max"],function(e,t){var a=[],n=[];if("number"==typeof o[t])var i=o[t],l=new Date,l=r.newDate({year:l.getFullYear(),month:l.getMonth(),date:l.getDate(),hours:e?23:0,minutes:e?59:0,seconds:e?59:0}).getTime(),e=new Date(i?i<864e5?l+864e5*i:i:l),a=[e.getFullYear(),e.getMonth()+1,e.getDate()],n=[e.getHours(),e.getMinutes(),e.getSeconds()];else if("string"==typeof o[t])a=(o[t].match(/\d+-\d+-\d+/)||[""])[0].split("-"),n=(o[t].match(/\d+:\d+:\d+/)||[""])[0].split(":");else if("object"==typeof o[t])return o[t];o[t]={year:0|a[0]||(new Date).getFullYear(),month:a[1]?(0|a[1])-1:(new Date).getMonth(),date:0|a[2]||(new Date).getDate(),hours:0|n[0],minutes:0|n[1],seconds:0|n[2]}}),r.elemID="layui-laydate"+o.elem.attr("lay-key"),(o.show||e)&&r.render(),e||r.events(),o.value&&o.isInitValue&&("date"===layui.type(o.value)?r.setValue(r.parse(0,r.systemDate(o.value))):r.setValue(o.value)))},I.prototype.render=function(){var a,n,i,l,r=this,o=r.config,d=r.lang(),s="static"===o.position,y=r.elem=lay.elem("div",{id:r.elemID,"class":["layui-laydate",o.range?" layui-laydate-range":"",r.rangeLinked?" layui-laydate-linkage":"",s?" "+T:"",o.fullPanel?" laydate-theme-fullpanel":"",(a="",lay.each(o.theme,function(e,t){"default"===t||/^#/.test(t)||(a+=" laydate-theme-"+t)}),a)].join("")}),m=r.elemMain=[],c=r.elemHeader=[],u=r.elemCont=[],h=r.table=[],e=r.footer=lay.elem("div",{"class":"layui-laydate-footer"}),t=r.shortcut=lay.elem("ul",{"class":"layui-laydate-shortcut"}),f=(o.zIndex&&(y.style.zIndex=o.zIndex),lay.each(new Array(2),function(e){if(!o.range&&0'+d.timeTips+""),(o.range||"datetime"!==o.type||o.fullPanel)&&f.push(''),lay.each(o.btns,function(e,t){var a=d.tools[t]||"btn";o.range&&"now"===t||(s&&"clear"===t&&(a="cn"===o.lang?"\u91cd\u7f6e":"Reset"),n.push(''+a+""))}),f.push('"),f.join(""))),o.shortcuts&&(y.appendChild(t),lay(t).html((i=[],lay.each(o.shortcuts,function(e,t){i.push('
  • '+t.text+"
  • ")}),i.join(""))).find("li").on("click",function(e){var t=(o.shortcuts[this.dataset.index]||{}).value||[],n=(layui.isArray(t)||(t=[t]),o.type),t=(lay.each(t,function(e,t){var a=[o.dateTime,r.endDate][e];"time"===n&&"date"!==layui.type(t)?r.EXP_IF.test(t)&&(t=(t.match(r.EXP_SPLIT)||[]).slice(1),lay.extend(a,{hours:0|t[0],minutes:0|t[2],seconds:0|t[4]})):lay.extend(a,r.systemDate("date"===layui.type(t)?t:new Date(t))),"time"!==n&&"datetime"!==n||(r[["startTime","endTime"][e]]={hours:a.hours,minutes:a.minutes,seconds:a.seconds}),0===e?r.startDate=lay.extend({},a):r.endState=!0,"year"===n||"month"===n||"time"===n?r.listYM[e]=[a.year,a.month+1]:e&&r.autoCalendarModel.auto&&r.autoCalendarModel()}),r.checkDate("limit").calendar(null,null,"init"),lay(r.footer).find("."+L).removeClass(k));t&&"date"===t.attr("lay-type")&&t[0].click(),r.done(null,"change"),lay(this).addClass(x),"static"!==o.position&&r.setValue(r.parse()).done().remove()})),lay.each(m,function(e,t){y.appendChild(t)}),o.showBottom&&y.appendChild(e),lay.elem("style")),p=[],g=!0,t=(lay.each(o.theme,function(e,t){if(g&&/^#/.test(t))return g=!(l=!0),void p.push(["#{{id}} .layui-laydate-header{background-color:{{theme}};}","#{{id}} li.layui-this,#{{id}} td.layui-this>div{background-color:{{theme}} !important;}",-1!==o.theme.indexOf("circle")?"":"#{{id}} .layui-this{background-color:{{theme}} !important;}","#{{id}} .laydate-day-now{color:{{theme}} !important;}","#{{id}} .laydate-day-now:after{border-color:{{theme}} !important;}"].join("").replace(/{{id}}/g,r.elemID).replace(/{{theme}}/g,t));!g&&/^#/.test(t)&&p.push(["#{{id}} .laydate-selected>div{background-color:{{theme}} !important;}","#{{id}} .laydate-selected:hover>div{background-color:{{theme}} !important;}"].join("").replace(/{{id}}/g,r.elemID).replace(/{{theme}}/g,t))}),o.shortcuts&&o.range&&p.push("#{{id}}.layui-laydate-range{width: 628px;}".replace(/{{id}}/g,r.elemID)),p.length&&(p=p.join(""),"styleSheet"in f?(f.setAttribute("type","text/css"),f.styleSheet.cssText=p):f.innerHTML=p,l&&lay(y).addClass("laydate-theme-molv"),y.appendChild(f)),r.remove(I.thisElemDate),D.thisId=o.id,s?o.elem.append(y):(v.body.appendChild(y),r.position()),o.shade?'
    ':"");y.insertAdjacentHTML("beforebegin",t),r.checkDate().calendar(null,0,"init"),r.changeEvent(),I.thisElemDate=r.elemID,r.renderAdditional(),"function"==typeof o.ready&&o.ready(lay.extend({},o.dateTime,{month:o.dateTime.month+1})),r.preview()},I.prototype.remove=function(e){var t=this,a=t.config,n=lay("#"+(e||t.elemID));return n[0]&&(n.hasClass(T)||t.checkDate(function(){n.remove(),delete t.startDate,delete t.endDate,delete t.endState,delete t.startTime,delete t.endTime,delete D.thisId,"function"==typeof a.close&&a.close(t)}),lay("."+S).remove()),t},I.prototype.position=function(){var e=this.config;return lay.position(e.elem[0],this.elem,{position:e.position}),this},I.prototype.hint=function(e){var t=this,a=(t.config,lay.elem("div",{"class":r}));t.elem&&(a.innerHTML=(e="object"==typeof e?e||{}:{content:e}).content||"",lay(t.elem).find("."+r).remove(),t.elem.appendChild(a),clearTimeout(t.hinTimer),t.hinTimer=setTimeout(function(){lay(t.elem).find("."+r).remove()},"ms"in e?e.ms:3e3))},I.prototype.getAsYM=function(e,t,a){return a?t--:t++,t<0&&(t=11,e--),11h[1]&&(e.year=h[1],o=!0),11t&&(e.date=t,o=!0))},r=function(n,i,l){var r=["startTime","endTime"];i=(i.match(d.EXP_SPLIT)||[]).slice(1),l=l||0,s.range&&(d[r[l]]=d[r[l]]||{}),lay.each(d.format,function(e,t){var a=parseFloat(i[e]);i[e].lengthd.getDateTime(s.max)?(n=s.dateTime=lay.extend({},s.max),c=!0):d.getDateTime(n)d.getDateTime(s.max))&&(d.endDate=lay.extend({},s.max),c=!0),d.startTime={hours:s.dateTime.hours,minutes:s.dateTime.minutes,seconds:s.dateTime.seconds},d.endTime={hours:d.endDate.hours,minutes:d.endDate.minutes,seconds:d.endDate.seconds},"month"===s.type&&(s.dateTime.date=1,d.endDate.date=1)),c&&l&&(d.setValue(d.parse()),d.hint("value "+a.invalidDate+a.formatError[1])),d.startDate=d.startDate||l&&lay.extend({},s.dateTime),d.autoCalendarModel.auto&&d.autoCalendarModel(),d.endState=!s.range||!d.rangeLinked||!(!d.startDate||!d.endDate),e&&e(),d},I.prototype.mark=function(e,a){var n,t=this.config;return lay.each(t.mark,function(e,t){e=e.split("-");e[0]!=a[0]&&0!=e[0]||e[1]!=a[1]&&0!=e[1]||e[2]!=a[2]||(n=t||a[2])}),n&&e.find("div").html(''+n+""),this},I.prototype.holidays=function(n,i){var e=this.config,l=["","work"];return"array"!==layui.type(e.holidays)||lay.each(e.holidays,function(a,e){lay.each(e,function(e,t){t===n.attr("lay-ymd")&&n.find("div").html('"+i[2]+"")})}),this},I.prototype.limit=function(t){t=t||{};var i=this,e=i.config,l={},a=t.index>(t.time?0:41)?i.endDate:e.dateTime;return lay.each({now:lay.extend({},a,t.date||{}),min:e.min,max:e.max},function(e,a){var n;l[e]=i.newDate(lay.extend({year:a.year,month:"year"===t.type?0:a.month,date:"year"===t.type||"month"===t.type?1:a.date},(n={},lay.each(t.time,function(e,t){n[t]=a[t]}),n))).getTime()}),a=l.nowl.max,t.elem&&t.elem[a?"addClass":"removeClass"](k),a},I.prototype.thisDateTime=function(e){var t=this.config;return e?this.endDate:t.dateTime},I.prototype.calendar=function(e,t,a){var i,l,r,o=this,n=o.config,t=t?1:0,d=e||o.thisDateTime(t),s=new Date,y=o.lang(),m="date"!==n.type&&"datetime"!==n.type,c=lay(o.table[t]).find("td"),u=lay(o.elemHeader[t][2]).find("span");return d.yearh[1]&&(d.year=h[1],o.hint(y.invalidDate)),o.firstDate||(o.firstDate=lay.extend({},d)),s.setFullYear(d.year,d.month,1),i=(s.getDay()+(7-n.weekStart))%7,l=D.getEndDate(d.month||12,d.year),r=D.getEndDate(d.month+1,d.year),lay.each(c,function(e,t){var a=[d.year,d.month],n=0;(t=lay(t)).removeAttr("class"),e"+a[2]+""),o.mark(t,a).holidays(t,a).limit({elem:t,date:{year:a[0],month:a[1]-1,date:a[2]},index:e})}),lay(u[0]).attr("lay-ym",d.year+"-"+(d.month+1)),lay(u[1]).attr("lay-ym",d.year+"-"+(d.month+1)),"cn"===n.lang?(lay(u[0]).attr("lay-type","year").html(d.year+" \u5e74"),lay(u[1]).attr("lay-type","month").html(d.month+1+" \u6708")):(lay(u[0]).attr("lay-type","month").html(y.month[d.month]),lay(u[1]).attr("lay-type","year").html(d.year)),m&&(n.range?!e&&"init"===a||(o.listYM=[[(o.startDate||n.dateTime).year,(o.startDate||n.dateTime).month+1],[o.endDate.year,o.endDate.month+1]],o.list(n.type,0).list(n.type,1),"time"===n.type?o.setBtnStatus("\u65f6\u95f4",lay.extend({},o.systemDate(),o.startTime),lay.extend({},o.systemDate(),o.endTime)):o.setBtnStatus(!0)):(o.listYM=[[d.year,d.month+1]],o.list(n.type,0))),n.range&&"init"===a&&(o.rangeLinked?(s=o.getAsYM(d.year,d.month,t?"sub":null),o.calendar(lay.extend({},d,{year:s[0],month:s[1]}),1-t)):o.calendar(null,1-t)),n.range||(c=["hours","minutes","seconds"],o.limit({elem:lay(o.footer).find(".laydate-btns-now"),date:o.systemDate(),index:0,time:c}),o.limit({elem:lay(o.footer).find(C),index:0,time:c})),o.setBtnStatus(),lay(o.shortcut).find("li."+x).removeClass(x),n.range&&!m&&"init"!==a&&o.stampRange(),o},I.prototype.list=function(n,i){var l,r,e,o,d=this,s=d.config,y=d.rangeLinked?s.dateTime:[s.dateTime,d.endDate][i],m=d.lang(),t=s.range&&"date"!==s.type&&"datetime"!==s.type,c=lay.elem("ul",{"class":w+" "+{year:"laydate-year-list",month:"laydate-month-list",time:"laydate-time-list"}[n]}),a=d.elemHeader[i],u=lay(a[2]).find("span"),h=d.elemCont[i||0],f=lay(h).find("."+w)[0],p="cn"===s.lang,g=p?"\u5e74":"",v=d.listYM[i]||{},D=["hours","minutes","seconds"],T=["startTime","endTime"][i];return v[0]<1&&(v[0]=1),"year"===n?(e=l=v[0]-7,l<1&&(e=l=1),lay.each(new Array(15),function(e){var t=lay.elem("li",{"lay-ym":l}),a={year:l,month:0,date:1};l==v[0]&&lay(t).addClass(x),t.innerHTML=l+g,c.appendChild(t),d.limit({elem:lay(t),date:a,index:i,type:n}),l++}),lay(u[p?0:1]).attr("lay-ym",l-8+"-"+v[1]).html(e+g+" - "+(l-1)+g)):"month"===n?(lay.each(new Array(12),function(e){var t=lay.elem("li",{"lay-ym":e}),a={year:v[0],month:e,date:1};e+1==v[1]&&lay(t).addClass(x),t.innerHTML=m.month[e]+(p?"\u6708":""),c.appendChild(t),d.limit({elem:lay(t),date:a,index:i,type:n})}),lay(u[p?0:1]).attr("lay-ym",v[0]+"-"+v[1]).html(v[0]+g)):"time"===n&&(r=function(){lay(c).find("ol").each(function(a,e){lay(e).find("li").each(function(e,t){d.limit({elem:lay(t),date:[{hours:e},{hours:d[T].hours,minutes:e},{hours:d[T].hours,minutes:d[T].minutes,seconds:e}][a],index:i,time:[["hours"],["hours","minutes"],["hours","minutes","seconds"]][a]})})}),s.range||d.limit({elem:lay(d.footer).find(C),date:d[T],inedx:0,time:["hours","minutes","seconds"]})},s.range?d[T]||(d[T]="startTime"===T?y:d.endDate):d[T]=y,lay.each([24,60,60],function(t,e){var a=lay.elem("li"),n=["

    "+m.time[t]+"

      "];lay.each(new Array(e),function(e){n.push(""+lay.digit(e,2)+"")}),a.innerHTML=n.join("")+"
    ",c.appendChild(a)}),r()),f&&h.removeChild(f),h.appendChild(c),"year"===n||"month"===n?(lay(d.elemMain[i]).addClass("laydate-ym-show"),lay(c).find("li").on("click",function(){var e=0|lay(this).attr("lay-ym");lay(this).hasClass(k)||(d.rangeLinked?lay.extend(y,{year:"year"===n?e:v[0],month:"year"===n?v[1]-1:e}):y[n]=e,"year"===s.type||"month"===s.type?(lay(c).find("."+x).removeClass(x),lay(this).addClass(x),"month"===s.type&&"year"===n&&(d.listYM[i][0]=e,t&&((i?d.endDate:y).year=e),d.list("month",i))):(d.checkDate("limit").calendar(y,i,"init"),d.closeList()),d.setBtnStatus(),!s.range&&s.autoConfirm&&("month"===s.type&&"month"===n||"year"===s.type&&"year"===n)&&d.setValue(d.parse()).done().remove(),d.autoCalendarModel.auto&&!d.rangeLinked?d.choose(lay(h).find("td.layui-this"),i):d.endState&&d.done(null,"change"),lay(d.footer).find("."+L).removeClass(k))})):(e=lay.elem("span",{"class":M}),o=function(){lay(c).find("ol").each(function(e){var a=this,t=lay(a).find("li");a.scrollTop=30*(d[T][D[e]]-2),a.scrollTop<=0&&t.each(function(e,t){if(!lay(this).hasClass(k))return a.scrollTop=30*(e-2),!0})})},u=lay(a[2]).find("."+M),o(),e.innerHTML=s.range?[m.startTime,m.endTime][i]:m.timeTips,lay(d.elemMain[i]).addClass("laydate-time-show"),u[0]&&u.remove(),a[2].appendChild(e),lay(c).find("ol").each(function(t){var a=this;lay(a).find("li").on("click",function(){var e=0|this.innerHTML;lay(this).hasClass(k)||(s.range?d[T][D[t]]=e:y[D[t]]=e,lay(a).find("."+x).removeClass(x),lay(this).addClass(x),r(),o(),(d.endDate||"time"===s.type||"datetime"===s.type&&s.fullPanel)&&d.done(null,"change"),d.setBtnStatus())})})),d},I.prototype.listYM=[],I.prototype.closeList=function(){var a=this;a.config;lay.each(a.elemCont,function(e,t){lay(this).find("."+w).remove(),lay(a.elemMain[e]).removeClass("laydate-ym-show laydate-time-show")}),lay(a.elem).find("."+M).remove()},I.prototype.setBtnStatus=function(e,t,a){var n=this,i=n.config,l=n.lang(),r=lay(n.footer).find(C);i.range&&"time"!==i.type&&(t=t||(n.rangeLinked?n.startDate:i.dateTime),a=a||n.endDate,i=!n.endState||n.newDate(t).getTime()>n.newDate(a).getTime(),n.limit({date:t})||n.limit({date:a})?r.addClass(k):r[i?"addClass":"removeClass"](k),e&&i&&n.hint("string"==typeof e?l.timeout.replace(/\u65e5\u671f/g,e):l.timeout))},I.prototype.parse=function(e,t){var a=this,n=a.config,t=t||("end"==e?lay.extend({},a.endDate,a.endTime):n.range?lay.extend({},a.rangeLinked?a.startDate:n.dateTime,a.startTime):n.dateTime),t=D.parse(t,a.format,1);return n.range&&e===undefined?t+" "+a.rangeStr+" "+a.parse("end"):t},I.prototype.newDate=function(e){return e=e||{},new Date(e.year||1,e.month||0,e.date||1,e.hours||0,e.minutes||0,e.seconds||0)},I.prototype.getDateTime=function(e){return this.newDate(e).getTime()},I.prototype.setValue=function(e){var t=this,a=t.config,n=a.elem[0];return"static"===a.position||(e=e||"",t.isInput(n)?lay(n).val(e):(a=t.rangeElem)?("array"!==layui.type(e)&&(e=e.split(" "+t.rangeStr+" ")),a[0].val(e[0]||""),a[1].val(e[1]||"")):(0===lay(n).find("*").length&&lay(n).html(e),lay(n).attr("lay-date",e))),t},I.prototype.preview=function(){var e,t=this,a=t.config;a.isPreview&&(e=lay(t.elem).find("."+E),a=!a.range||(t.rangeLinked?t.endState:t.endDate)?t.parse():"",e.html(a),e.html()&&(e.css({color:"#16b777"}),setTimeout(function(){e.css({color:"#777"})},300)))},I.prototype.renderAdditional=function(){this.config.fullPanel&&this.list("time",0)},I.prototype.stampRange=function(){var n,i=this,l=i.config,r=i.rangeLinked?i.startDate:l.dateTime,e=lay(i.elem).find("td");l.range&&!i.endState&&lay(i.footer).find(C).addClass(k),r=r&&i.newDate({year:r.year,month:r.month,date:r.date}).getTime(),n=i.endState&&i.endDate&&i.newDate({year:i.endDate.year,month:i.endDate.month,date:i.endDate.date}).getTime(),lay.each(e,function(e,t){var a=lay(t).attr("lay-ymd").split("-"),a=i.newDate({year:a[0],month:a[1]-1,date:a[2]}).getTime();l.rangeLinked&&!i.startDate&&a===i.newDate(i.systemDate()).getTime()&&lay(t).addClass(lay(t).hasClass(y)||lay(t).hasClass(m)?"":"laydate-day-now"),lay(t).removeClass(o+" "+x),a!==r&&a!==n||(i.rangeLinked||!i.rangeLinked&&(e<42?a===r:a===n))&&lay(t).addClass(lay(t).hasClass(y)||lay(t).hasClass(m)?o:x),rn.getDateTime(i.max)&&(n[t]={hours:i.max.hours,minutes:i.max.minutes,seconds:i.max.seconds},lay.extend(l,n[t])))}),a||(n.startDate=lay.extend({},l)),n.endState&&!n.limit({date:n.thisDateTime(1-a)})&&(((r=n.endState&&n.autoCalendarModel.auto?n.autoCalendarModel():r)||n.rangeLinked&&n.endState)&&n.newDate(n.startDate)>n.newDate(n.endDate)&&(e=n.startDate.year===n.endDate.year&&n.startDate.month===n.endDate.month&&n.startDate.date===n.endDate.date,o=n.startDate,n.startDate=lay.extend({},n.endDate,e?{}:n.startTime),i.dateTime=lay.extend({},n.startDate),n.endDate=lay.extend({},o,e?{}:n.endTime),e&&(o=n.startTime,n.startTime=n.endTime,n.endTime=o)),r&&(i.dateTime=lay.extend({},n.startDate))),n.rangeLinked?(e=lay.extend({},l),!t||a||r||(o=n.getAsYM(l.year,l.month,"sub"),lay.extend(i.dateTime,{year:o[0],month:o[1]})),n.calendar(e,t,r?"init":null)):n.calendar(null,a,r?"init":null),n.endState&&n.done(null,"change")):"static"===i.position?n.calendar().done().done(null,"change"):"date"===i.type?i.autoConfirm?n.setValue(n.parse()).done().remove():n.calendar().done(null,"change"):"datetime"===i.type&&n.calendar().done(null,"change"))},I.prototype.tool=function(t,e){var a=this,n=a.config,i=a.lang(),l=n.dateTime,r="static"===n.position,o={datetime:function(){lay(t).hasClass(k)||(a.list("time",0),n.range&&a.list("time",1),lay(t).attr("lay-type","date").html(a.lang().dateTips))},date:function(){a.closeList(),lay(t).attr("lay-type","datetime").html(a.lang().timeTips)},clear:function(){r&&(lay.extend(l,a.firstDate),a.calendar()),n.range&&(delete n.dateTime,delete a.endDate,delete a.startTime,delete a.endTime),a.setValue(""),a.done(null,"onClear").done(["",{},{}]).remove()},now:function(){var e=new Date;if(lay(t).hasClass(k))return a.hint(i.tools.now+", "+i.invalidDate);lay.extend(l,a.systemDate(),{hours:e.getHours(),minutes:e.getMinutes(),seconds:e.getSeconds()}),a.setValue(a.parse()),r&&a.calendar(),a.done(null,"onNow").done().remove()},confirm:function(){if(n.range){if(lay(t).hasClass(k))return a.hint("time"===n.type?i.timeout.replace(/\u65e5\u671f/g,"\u65f6\u95f4"):i.timeout)}else if(lay(t).hasClass(k))return a.hint(i.invalidDate);a.setValue(a.parse()),a.done(null,"onConfirm").done().remove()}};o[e]&&o[e]()},I.prototype.change=function(n){var i=this,l=i.config,r=i.thisDateTime(n),o=l.range&&("year"===l.type||"month"===l.type),d=i.elemCont[n||0],s=i.listYM[n],e=function(e){var t=lay(d).find(".laydate-year-list")[0],a=lay(d).find(".laydate-month-list")[0];return t&&(s[0]=e?s[0]-15:s[0]+15,i.list("year",n)),a&&(e?s[0]--:s[0]++,i.list("month",n)),(t||a)&&(lay.extend(r,{year:s[0]}),o&&(r.year=s[0]),l.range||i.done(null,"change"),l.range||i.limit({elem:lay(i.footer).find(C),date:{year:s[0]}})),i.setBtnStatus(),t||a};return{prevYear:function(){e("sub")||(i.rangeLinked?(l.dateTime.year--,i.checkDate("limit").calendar(null,null,"init")):(r.year--,i.checkDate("limit").calendar(null,n),i.autoCalendarModel.auto?i.choose(lay(d).find("td.layui-this"),n):i.done(null,"change")))},prevMonth:function(){i.rangeLinked&&(r=l.dateTime);var e=i.getAsYM(r.year,r.month,"sub");lay.extend(r,{year:e[0],month:e[1]}),i.checkDate("limit").calendar(null,null,"init"),i.rangeLinked||(i.autoCalendarModel.auto?i.choose(lay(d).find("td.layui-this"),n):i.done(null,"change"))},nextMonth:function(){i.rangeLinked&&(r=l.dateTime);var e=i.getAsYM(r.year,r.month);lay.extend(r,{year:e[0],month:e[1]}),i.checkDate("limit").calendar(null,null,"init"),i.rangeLinked||(i.autoCalendarModel.auto?i.choose(lay(d).find("td.layui-this"),n):i.done(null,"change"))},nextYear:function(){e()||(i.rangeLinked?(l.dateTime.year++,i.checkDate("limit").calendar(null,0,"init")):(r.year++,i.checkDate("limit").calendar(null,n),i.autoCalendarModel.auto?i.choose(lay(d).find("td.layui-this"),n):i.done(null,"change")))}}},I.prototype.changeEvent=function(){var i=this;i.config;lay(i.elem).on("click",function(e){lay.stope(e)}).on("mousedown",function(e){lay.stope(e)}),lay.each(i.elemHeader,function(n,e){lay(e[0]).on("click",function(e){i.change(n).prevYear()}),lay(e[1]).on("click",function(e){i.change(n).prevMonth()}),lay(e[2]).find("span").on("click",function(e){var t=lay(this),a=t.attr("lay-ym"),t=t.attr("lay-type");a&&(a=a.split("-"),i.listYM[n]=[0|a[0],0|a[1]],i.list(t,n),lay(i.footer).find("."+L).addClass(k))}),lay(e[3]).on("click",function(e){i.change(n).nextMonth()}),lay(e[4]).on("click",function(e){i.change(n).nextYear()})}),lay.each(i.table,function(e,t){lay(t).find("td").on("click",function(){i.choose(lay(this),e)})}),lay(i.footer).find("span").on("click",function(){var e=lay(this).attr("lay-type");i.tool(this,e)})},I.prototype.isInput=function(e){return/input|textarea/.test(e.tagName.toLocaleLowerCase())||/INPUT|TEXTAREA/.test(e.tagName)},I.prototype.events=function(){var e,t=this,a=t.config;a.elem[0]&&!a.elem[0].eventHandler&&(a.elem.on(a.trigger,e=function(){D.thisId!==a.id&&t.render()}),a.elem[0].eventHandler=!0,a.eventElem.on(a.trigger,e),t.unbind=function(){t.remove(),a.elem.off(a.trigger,e),a.elem.removeAttr("lay-key"),a.elem.removeAttr(d),a.elem[0].eventHandler=!1,a.eventElem.off(a.trigger,e),a.eventElem.removeAttr("lay-key"),delete s.that[a.id]})},s.that={},s.getThis=function(e){var t=s.that[e];return!t&&n&&layui.hint().error(e?a+" instance with ID '"+e+"' not found":"ID argument required"),t},l.run=function(n){n(v).on("mousedown",function(e){var t,a;!D.thisId||(t=s.getThis(D.thisId))&&(a=t.config,e.target!==a.elem[0]&&e.target!==a.eventElem[0]&&e.target!==n(a.closeStop)[0]&&t.remove())}).on("keydown",function(e){var t;!D.thisId||(t=s.getThis(D.thisId))&&"static"!==t.config.position&&13===e.keyCode&&n("#"+t.elemID)[0]&&t.elemID===I.thisElemDate&&(e.preventDefault(),n(t.footer).find(C)[0].click())}),n(i).on("resize",function(){if(D.thisId){var e=s.getThis(D.thisId);if(e)return!(!e.elem||!n(".layui-laydate")[0])&&void e.position()}})},D.render=function(e){e=new I(e);return s.call(e)},D.reload=function(e,t){e=s.getThis(e);if(e)return e.reload(t)},D.getInst=function(e){e=s.getThis(e);if(e)return e.inst},D.hint=function(e,t){e=s.getThis(e);if(e)return e.hint(t)},D.unbind=function(e){e=s.getThis(e);if(e)return e.unbind()},D.close=function(e){e=s.getThis(e||D.thisId);if(e)return e.remove()},D.parse=function(a,n,i){return a=a||{},n=((n="string"==typeof n?s.formatArr(n):n)||[]).concat(),lay.each(n,function(e,t){/yyyy|y/.test(t)?n[e]=lay.digit(a.year,t.length):/MM|M/.test(t)?n[e]=lay.digit(a.month+(i||0),t.length):/dd|d/.test(t)?n[e]=lay.digit(a.date,t.length):/HH|H/.test(t)?n[e]=lay.digit(a.hours,t.length):/mm|m/.test(t)?n[e]=lay.digit(a.minutes,t.length):/ss|s/.test(t)&&(n[e]=lay.digit(a.seconds,t.length))}),n.join("")},D.getEndDate=function(e,t){var a=new Date;return a.setFullYear(t||a.getFullYear(),e||a.getMonth()+1,1),new Date(a.getTime()-864e5).getDate()},n?(D.ready(),layui.define("lay",function(e){D.path=layui.cache.dir,l.run(lay),e(a,D)})):"function"==typeof define&&define.amd?define(function(){return l.run(lay),D}):(D.ready(),l.run(i.lay),i.laydate=D)}(window,window.document);!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e):function(e){if(e.document)return t(e);throw new Error("jQuery requires a window with a document")}:t(e)}("undefined"!=typeof window?window:this,function(T,M){var f=[],g=T.document,c=f.slice,O=f.concat,R=f.push,P=f.indexOf,B={},W=B.toString,m=B.hasOwnProperty,y={},e="1.12.4",C=function(e,t){return new C.fn.init(e,t)},I=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,$=/^-ms-/,z=/-([\da-z])/gi,X=function(e,t){return t.toUpperCase()};function U(e){var t=!!e&&"length"in e&&e.length,n=C.type(e);return"function"!==n&&!C.isWindow(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+a+")"+a+"*"),ee=new RegExp("="+a+"*([^\\]'\"]*?)"+a+"*\\]","g"),te=new RegExp(G),ne=new RegExp("^"+s+"$"),f={ID:new RegExp("^#("+s+")"),CLASS:new RegExp("^\\.("+s+")"),TAG:new RegExp("^("+s+"|[*])"),ATTR:new RegExp("^"+J),PSEUDO:new RegExp("^"+G),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+a+"*(even|odd|(([+-]|)(\\d*)n|)"+a+"*(?:([+-]|)"+a+"*(\\d+)|))"+a+"*\\)|)","i"),bool:new RegExp("^(?:"+Y+")$","i"),needsContext:new RegExp("^"+a+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+a+"*((?:-\\d)?\\d*)"+a+"*\\)|)(?=[^-]|$)","i")},re=/^(?:input|select|textarea|button)$/i,ie=/^h\d$/i,c=/^[^{]+\{\s*\[native \w/,oe=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ae=/[+~]/,se=/'|\\/g,d=new RegExp("\\\\([\\da-f]{1,6}"+a+"?|("+a+")|.)","ig"),p=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(65536+r):String.fromCharCode(r>>10|55296,1023&r|56320)},ue=function(){C()};try{D.apply(n=V.call(v.childNodes),v.childNodes),n[v.childNodes.length].nodeType}catch(F){D={apply:n.length?function(e,t){U.apply(e,V.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function H(e,t,n,r){var i,o,a,s,u,l,c,f,d=t&&t.ownerDocument,p=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==p&&9!==p&&11!==p)return n;if(!r&&((t?t.ownerDocument||t:v)!==E&&C(t),t=t||E,N)){if(11!==p&&(l=oe.exec(e)))if(i=l[1]){if(9===p){if(!(a=t.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(d&&(a=d.getElementById(i))&&y(t,a)&&a.id===i)return n.push(a),n}else{if(l[2])return D.apply(n,t.getElementsByTagName(e)),n;if((i=l[3])&&g.getElementsByClassName&&t.getElementsByClassName)return D.apply(n,t.getElementsByClassName(i)),n}if(g.qsa&&!A[e+" "]&&(!m||!m.test(e))){if(1!==p)d=t,f=e;else if("object"!==t.nodeName.toLowerCase()){for((s=t.getAttribute("id"))?s=s.replace(se,"\\$&"):t.setAttribute("id",s=k),o=(c=w(e)).length,u=ne.test(s)?"#"+s:"[id='"+s+"']";o--;)c[o]=u+" "+_(c[o]);f=c.join(","),d=ae.test(e)&&de(t.parentNode)||t}if(f)try{return D.apply(n,d.querySelectorAll(f)),n}catch(h){}finally{s===k&&t.removeAttribute("id")}}}return P(e.replace(L,"$1"),t,n,r)}function le(){var n=[];function r(e,t){return n.push(e+" ")>b.cacheLength&&delete r[n.shift()],r[e+" "]=t}return r}function q(e){return e[k]=!0,e}function h(e){var t=E.createElement("div");try{return!!e(t)}catch(F){return!1}finally{t.parentNode&&t.parentNode.removeChild(t)}}function ce(e,t){for(var n=e.split("|"),r=n.length;r--;)b.attrHandle[n[r]]=t}function fe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||1<<31)-(~e.sourceIndex||1<<31);if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function x(a){return q(function(o){return o=+o,q(function(e,t){for(var n,r=a([],e.length,o),i=r.length;i--;)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function de(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in g=H.support={},O=H.isXML=function(e){e=e&&(e.ownerDocument||e).documentElement;return!!e&&"HTML"!==e.nodeName},C=H.setDocument=function(e){var e=e?e.ownerDocument||e:v;return e!==E&&9===e.nodeType&&e.documentElement&&(t=(E=e).documentElement,N=!O(E),(e=E.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",ue,!1):e.attachEvent&&e.attachEvent("onunload",ue)),g.attributes=h(function(e){return e.className="i",!e.getAttribute("className")}),g.getElementsByTagName=h(function(e){return e.appendChild(E.createComment("")),!e.getElementsByTagName("*").length}),g.getElementsByClassName=c.test(E.getElementsByClassName),g.getById=h(function(e){return t.appendChild(e).id=k,!E.getElementsByName||!E.getElementsByName(k).length}),g.getById?(b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&N)return(e=t.getElementById(e))?[e]:[]},b.filter.ID=function(e){var t=e.replace(d,p);return function(e){return e.getAttribute("id")===t}}):(delete b.find.ID,b.filter.ID=function(e){var t=e.replace(d,p);return function(e){e="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return e&&e.value===t}}),b.find.TAG=g.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):g.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"!==e)return o;for(;n=o[i++];)1===n.nodeType&&r.push(n);return r},b.find.CLASS=g.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&N)return t.getElementsByClassName(e)},r=[],m=[],(g.qsa=c.test(E.querySelectorAll))&&(h(function(e){t.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&m.push("[*^$]="+a+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||m.push("\\["+a+"*(?:value|"+Y+")"),e.querySelectorAll("[id~="+k+"-]").length||m.push("~="),e.querySelectorAll(":checked").length||m.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||m.push(".#.+[+~]")}),h(function(e){var t=E.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&m.push("name"+a+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||m.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),m.push(",.*:")})),(g.matchesSelector=c.test(i=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.msMatchesSelector))&&h(function(e){g.disconnectedMatch=i.call(e,"div"),i.call(e,"[s!='']:x"),r.push("!=",G)}),m=m.length&&new RegExp(m.join("|")),r=r.length&&new RegExp(r.join("|")),e=c.test(t.compareDocumentPosition),y=e||c.test(t.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,t=t&&t.parentNode;return e===t||!(!t||1!==t.nodeType||!(n.contains?n.contains(t):e.compareDocumentPosition&&16&e.compareDocumentPosition(t)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},$=e?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)||!g.sortDetached&&t.compareDocumentPosition(e)===n?e===E||e.ownerDocument===v&&y(v,e)?-1:t===E||t.ownerDocument===v&&y(v,t)?1:u?j(u,e)-j(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===E?-1:t===E?1:i?-1:o?1:u?j(u,e)-j(u,t):0;if(i===o)return fe(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?fe(a[r],s[r]):a[r]===v?-1:s[r]===v?1:0}),E},H.matches=function(e,t){return H(e,null,null,t)},H.matchesSelector=function(e,t){if((e.ownerDocument||e)!==E&&C(e),t=t.replace(ee,"='$1']"),g.matchesSelector&&N&&!A[t+" "]&&(!r||!r.test(t))&&(!m||!m.test(t)))try{var n=i.call(e,t);if(n||g.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(F){}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(d,p),e[3]=(e[3]||e[4]||e[5]||"").replace(d,p),"~="===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]||H.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]&&H.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return f.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&te.test(n)&&(t=w(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(d,p).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=W[e+" "];return t||(t=new RegExp("(^|"+a+")"+e+"("+a+"|$)"))&&W(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(t,n,r){return function(e){e=H.attr(e,t);return null==e?"!="===n:!n||(e+="","="===n?e===r:"!="===n?e!==r:"^="===n?r&&0===e.indexOf(r):"*="===n?r&&-1(?:<\/\1>|)$/,G=/^.[^:#\[\.,]*$/;function K(e,n,r){if(C.isFunction(n))return C.grep(e,function(e,t){return!!n.call(e,t,e)!==r});if(n.nodeType)return C.grep(e,function(e){return e===n!==r});if("string"==typeof n){if(G.test(n))return C.filter(n,e,r);n=C.filter(n,e)}return C.grep(e,function(e){return-1)[^>]*|#([\w-]*))$/,ee=((C.fn.init=function(e,t,n){if(!e)return this;if(n=n||Q,"string"!=typeof e)return e.nodeType?(this.context=this[0]=e,this.length=1,this):C.isFunction(e)?"undefined"!=typeof n.ready?n.ready(e):e(C):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),C.makeArray(e,this));if(!(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&3<=e.length?[null,e,null]:Z.exec(e))||!r[1]&&t)return(!t||t.jquery?t||n:this.constructor(t)).find(e);if(r[1]){if(t=t instanceof C?t[0]:t,C.merge(this,C.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:g,!0)),J.test(r[1])&&C.isPlainObject(t))for(var r in t)C.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}if((n=g.getElementById(r[2]))&&n.parentNode){if(n.id!==r[2])return Q.find(e);this.length=1,this[0]=n}return this.context=g,this.selector=e,this}).prototype=C.fn,Q=C(g),/^(?:parents|prev(?:Until|All))/),te={children:!0,contents:!0,next:!0,prev:!0};function ne(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}C.fn.extend({has:function(e){var t,n=C(e,this),r=n.length;return this.filter(function(){for(t=0;t
    a",y.leadingWhitespace=3===S.firstChild.nodeType,y.tbody=!S.getElementsByTagName("tbody").length,y.htmlSerialize=!!S.getElementsByTagName("link").length,y.html5Clone="<:nav>"!==g.createElement("nav").cloneNode(!0).outerHTML,q.type="checkbox",q.checked=!0,k.appendChild(q),y.appendChecked=q.checked,S.innerHTML="",y.noCloneChecked=!!S.cloneNode(!0).lastChild.defaultValue,k.appendChild(S),(q=g.createElement("input")).setAttribute("type","radio"),q.setAttribute("checked","checked"),q.setAttribute("name","t"),S.appendChild(q),y.checkClone=S.cloneNode(!0).cloneNode(!0).lastChild.checked,y.noCloneEvent=!!S.addEventListener,S[C.expando]=1,y.attributes=!S.getAttribute(C.expando);var x={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:y.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]};function b(e,t){var n,r,i=0,o="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):undefined;if(!o)for(o=[],n=e.childNodes||e;null!=(r=n[i]);i++)!t||C.nodeName(r,t)?o.push(r):C.merge(o,b(r,t));return t===undefined||t&&C.nodeName(e,t)?C.merge([e],o):o}function we(e,t){for(var n,r=0;null!=(n=e[r]);r++)C._data(n,"globalEval",!t||C._data(t[r],"globalEval"))}x.optgroup=x.option,x.tbody=x.tfoot=x.colgroup=x.caption=x.thead,x.th=x.td;var Te=/<|&#?\w+;/,Ce=/"!==f[1]||Ce.test(a)?0:u:u.firstChild)&&a.childNodes.length;o--;)C.nodeName(c=a.childNodes[o],"tbody")&&!c.childNodes.length&&a.removeChild(c);for(C.merge(h,u.childNodes),u.textContent="";u.firstChild;)u.removeChild(u.firstChild);u=p.lastChild}else h.push(t.createTextNode(a));for(u&&p.removeChild(u),y.appendChecked||C.grep(b(h,"input"),Ee),g=0;a=h[g++];)if(r&&-1]","i"),Pe=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,Be=/\s*$/g,ze=be(g).appendChild(g.createElement("div"));function Xe(e,t){return C.nodeName(e,"table")&&C.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ue(e){return e.type=(null!==C.find.attr(e,"type"))+"/"+e.type,e}function Ve(e){var t=Ie.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Ye(e,t){if(1===t.nodeType&&C.hasData(e)){var n,r,i,e=C._data(e),o=C._data(t,e),a=e.events;if(a)for(n in delete o.handle,o.events={},a)for(r=0,i=a[n].length;r")},clone:function(e,t,n){var r,i,o,a,s,u=C.contains(e.ownerDocument,e);if(y.html5Clone||C.isXMLDoc(e)||!Re.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(ze.innerHTML=e.outerHTML,ze.removeChild(o=ze.firstChild)),!(y.noCloneEvent&&y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||C.isXMLDoc(e)))for(r=b(o),s=b(e),a=0;null!=(i=s[a]);++a)if(r[a]){f=c=l=p=d=void 0;var l,c,f,d=i,p=r[a];if(1===p.nodeType){if(l=p.nodeName.toLowerCase(),!y.noCloneEvent&&p[C.expando]){for(c in(f=C._data(p)).events)C.removeEvent(p,c,f.handle);p.removeAttribute(C.expando)}"script"===l&&p.text!==d.text?(Ue(p).text=d.text,Ve(p)):"object"===l?(p.parentNode&&(p.outerHTML=d.outerHTML),y.html5Clone&&d.innerHTML&&!C.trim(p.innerHTML)&&(p.innerHTML=d.innerHTML)):"input"===l&&ge.test(d.type)?(p.defaultChecked=p.checked=d.checked,p.value!==d.value&&(p.value=d.value)):"option"===l?p.defaultSelected=p.selected=d.defaultSelected:"input"!==l&&"textarea"!==l||(p.defaultValue=d.defaultValue)}}if(t)if(n)for(s=s||b(e),r=r||b(o),a=0;null!=(i=s[a]);a++)Ye(i,r[a]);else Ye(e,o);return 0<(r=b(o,"script")).length&&we(r,!u&&b(e,"script")),r=s=i=null,o},cleanData:function(e,t){for(var n,r,i,o,a=0,s=C.expando,u=C.cache,l=y.attributes,c=C.event.special;null!=(n=e[a]);a++)if((t||v(n))&&(o=(i=n[s])&&u[i])){if(o.events)for(r in o.events)c[r]?C.event.remove(n,r):C.removeEvent(n,r,o.handle);u[i]&&(delete u[i],l||"undefined"==typeof n.removeAttribute?n[s]=undefined:n.removeAttribute(s),f.push(i))}}}),C.fn.extend({domManip:w,detach:function(e){return Je(this,e,!0)},remove:function(e){return Je(this,e)},text:function(e){return d(this,function(e){return e===undefined?C.text(this):this.empty().append((this[0]&&this[0].ownerDocument||g).createTextNode(e))},null,e,arguments.length)},append:function(){return w(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Xe(this,e).appendChild(e)})},prepend:function(){return w(this,arguments,function(e){var t;1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(t=Xe(this,e)).insertBefore(e,t.firstChild)})},before:function(){return w(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return w(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&C.cleanData(b(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&C.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return C.clone(this,e,t)})},html:function(e){return d(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined)return 1===t.nodeType?t.innerHTML.replace(Oe,""):undefined;if("string"==typeof e&&!Be.test(e)&&(y.htmlSerialize||!Re.test(e))&&(y.leadingWhitespace||!ve.test(e))&&!x[(me.exec(e)||["",""])[1].toLowerCase()]){e=C.htmlPrefilter(e);try{for(;n")).appendTo(t.documentElement))[0].contentWindow||Ge[0].contentDocument).document).write(),t.close(),n=Qe(e,t),Ge.detach()),Ke[e]=n),n}var n,et,tt,nt,rt,it,ot,a,at=/^margin/,st=new RegExp("^("+e+")(?!px)[a-z%]+$","i"),ut=function(e,t,n,r){var i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.apply(e,r||[]),t)e.style[i]=o[i];return r},lt=g.documentElement;function t(){var e,t=g.documentElement;t.appendChild(ot),a.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",n=tt=it=!1,et=rt=!0,T.getComputedStyle&&(e=T.getComputedStyle(a),n="1%"!==(e||{}).top,it="2px"===(e||{}).marginLeft,tt="4px"===(e||{width:"4px"}).width,a.style.marginRight="50%",et="4px"===(e||{marginRight:"4px"}).marginRight,(e=a.appendChild(g.createElement("div"))).style.cssText=a.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",e.style.marginRight=e.style.width="0",a.style.width="1px",rt=!parseFloat((T.getComputedStyle(e)||{}).marginRight),a.removeChild(e)),a.style.display="none",(nt=0===a.getClientRects().length)&&(a.style.display="",a.innerHTML="
    t
    ",a.childNodes[0].style.borderCollapse="separate",(e=a.getElementsByTagName("td"))[0].style.cssText="margin:0;border:0;padding:0;display:none",(nt=0===e[0].offsetHeight)&&(e[0].style.display="",e[1].style.display="none",nt=0===e[0].offsetHeight)),t.removeChild(ot)}ot=g.createElement("div"),(a=g.createElement("div")).style&&(a.style.cssText="float:left;opacity:.5",y.opacity="0.5"===a.style.opacity,y.cssFloat=!!a.style.cssFloat,a.style.backgroundClip="content-box",a.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===a.style.backgroundClip,(ot=g.createElement("div")).style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",a.innerHTML="",ot.appendChild(a),y.boxSizing=""===a.style.boxSizing||""===a.style.MozBoxSizing||""===a.style.WebkitBoxSizing,C.extend(y,{reliableHiddenOffsets:function(){return null==n&&t(),nt},boxSizingReliable:function(){return null==n&&t(),tt},pixelMarginRight:function(){return null==n&&t(),et},pixelPosition:function(){return null==n&&t(),n},reliableMarginRight:function(){return null==n&&t(),rt},reliableMarginLeft:function(){return null==n&&t(),it}}));var l,p,ct=/^(top|right|bottom|left)$/;function ft(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}T.getComputedStyle?(l=function(e){var t=e.ownerDocument.defaultView;return(t=t&&t.opener?t:T).getComputedStyle(e)},p=function(e,t,n){var r,i,o=e.style;return""!==(i=(n=n||l(e))?n.getPropertyValue(t)||n[t]:undefined)&&i!==undefined||C.contains(e.ownerDocument,e)||(i=C.style(e,t)),n&&!y.pixelMarginRight()&&st.test(i)&&at.test(t)&&(e=o.width,t=o.minWidth,r=o.maxWidth,o.minWidth=o.maxWidth=o.width=i,i=n.width,o.width=e,o.minWidth=t,o.maxWidth=r),i===undefined?i:i+""}):lt.currentStyle&&(l=function(e){return e.currentStyle},p=function(e,t,n){var r,i,o,a=e.style;return null==(n=(n=n||l(e))?n[t]:undefined)&&a&&a[t]&&(n=a[t]),st.test(n)&&!ct.test(t)&&(r=a.left,(o=(i=e.runtimeStyle)&&i.left)&&(i.left=e.currentStyle.left),a.left="fontSize"===t?"1em":n,n=a.pixelLeft+"px",a.left=r,o&&(i.left=o)),n===undefined?n:n+""||"auto"});var dt=/alpha\([^)]*\)/i,pt=/opacity\s*=\s*([^)]*)/i,ht=/^(none|table(?!-c[ea]).+)/,gt=new RegExp("^("+e+")(.*)$","i"),mt={position:"absolute",visibility:"hidden",display:"block"},yt={letterSpacing:"0",fontWeight:"400"},vt=["Webkit","O","Moz","ms"],xt=g.createElement("div").style;function bt(e){if(e in xt)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=vt.length;n--;)if((e=vt[n]+t)in xt)return e}function wt(e,t){for(var n,r,i,o=[],a=0,s=e.length;a
    a",F=q.getElementsByTagName("a")[0],k.setAttribute("type","checkbox"),q.appendChild(k),(F=q.getElementsByTagName("a")[0]).style.cssText="top:1px",y.getSetAttribute="t"!==q.className,y.style=/top/.test(F.getAttribute("style")),y.hrefNormalized="/a"===F.getAttribute("href"),y.checkOn=!!k.value,y.optSelected=e.selected,y.enctype=!!g.createElement("form").enctype,S.disabled=!0,y.optDisabled=!e.disabled,(k=g.createElement("input")).setAttribute("value",""),y.input=""===k.getAttribute("value"),k.value="t",k.setAttribute("type","radio"),y.radioValue="t"===k.value;var Lt=/\r/g,Ht=/[\x20\t\r\n\f]+/g;C.fn.extend({val:function(t){var n,e,r,i=this[0];return arguments.length?(r=C.isFunction(t),this.each(function(e){1===this.nodeType&&(null==(e=r?t.call(this,e,C(this).val()):t)?e="":"number"==typeof e?e+="":C.isArray(e)&&(e=C.map(e,function(e){return null==e?"":e+""})),(n=C.valHooks[this.type]||C.valHooks[this.nodeName.toLowerCase()])&&"set"in n&&n.set(this,e,"value")!==undefined||(this.value=e))})):i?(n=C.valHooks[i.type]||C.valHooks[i.nodeName.toLowerCase()])&&"get"in n&&(e=n.get(i,"value"))!==undefined?e:"string"==typeof(e=i.value)?e.replace(Lt,""):null==e?"":e:void 0}}),C.extend({valHooks:{option:{get:function(e){var t=C.find.attr(e,"value");return null!=t?t:C.trim(C.text(e)).replace(Ht," ")}},select:{get:function(e){for(var t,n=e.options,r=e.selectedIndex,i="select-one"===e.type||r<0,o=i?null:[],a=i?r+1:n.length,s=r<0?a:i?r:0;s").append(C.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},C.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){C.fn[t]=function(e){return this.on(t,e)}}),C.expr.filters.animated=function(t){return C.grep(C.timers,function(e){return t===e.elem}).length},C.offset={setOffset:function(e,t,n){var r,i,o,a,s=C.css(e,"position"),u=C(e),l={};"static"===s&&(e.style.position="relative"),o=u.offset(),r=C.css(e,"top"),a=C.css(e,"left"),s=("absolute"===s||"fixed"===s)&&-1'+(s?a.title[0]:a.title)+"":"";return a.zIndex=o,t([a.shade?'
    ':"",'
    '+(e&&2!=a.type?"":s)+"'+(n=["layui-icon-tips","layui-icon-success","layui-icon-error","layui-icon-question","layui-icon-lock","layui-icon-face-cry","layui-icon-face-smile"],o="layui-anim layui-anim-rotate layui-anim-loop",0==a.type&&-1!==a.icon?'':3==a.type?(i=["layui-icon-loading","layui-icon-loading-1"],2==a.icon?'
    ':''):"")+((1!=a.type||!e)&&a.content||"")+'
    '+(n=[],l&&(n.push(''),n.push('')),a.closeBtn&&n.push(''),n.join(""))+"
    "+(a.btn?function(){var e="";"string"==typeof a.btn&&(a.btn=[a.btn]);for(var t=0,i=a.btn.length;t'+a.btn[t]+"";return'
    '+e+"
    "}():"")+(a.resize?'':"")+""],s,m('
    ')),this},t.pt.creat=function(){var e,t,i,n,a,o=this,s=o.config,l=o.index,r="object"==typeof(f=s.content),c=m("body");if(s.id&&m("."+y[0]).find("#"+s.id)[0])return e=m("#"+s.id).closest("."+y[0]),t=e.attr("times"),i=e.data("config"),n=m("#"+y.SHADE+t),void("min"===(e.data("maxminStatus")||{})?h.restore(t):i.hideOnClose&&(n.show(),e.show()));switch(s.removeFocus&&document.activeElement.blur(),"string"==typeof s.area&&(s.area="auto"===s.area?["",""]:[s.area,""]),s.shift&&(s.anim=s.shift),6==h.ie&&(s.fixed=!1),s.type){case 0:s.btn="btn"in s?s.btn:u.btn[0],h.closeAll("dialog");break;case 2:var f=s.content=r?s.content:[s.content||"","auto"];s.content='';break;case 3:delete s.title,delete s.closeBtn,-1===s.icon&&s.icon,h.closeAll("loading");break;case 4:r||(s.content=[s.content,"body"]),s.follow=s.content[1],s.content=s.content[0]+'',delete s.title,s.tips="object"==typeof s.tips?s.tips:[s.tips,!0],s.tipsMore||h.closeAll("tips")}o.vessel(r,function(e,t,i){c.append(e[0]),r?2==s.type||4==s.type?m("body").append(e[1]):f.parents("."+y[0])[0]||(f.data("display",f.css("display")).show().addClass("layui-layer-wrap").wrap(e[1]),m("#"+y[0]+l).find("."+y[5]).before(t)):c.append(e[1]),m("#"+y.MOVE)[0]||c.append(u.moveElem=i),o.layero=m("#"+y[0]+l),o.shadeo=m("#"+y.SHADE+l),s.scrollbar||y.html.css("overflow","hidden").attr("layer-full",l)}).auto(l),o.shadeo.css({"background-color":s.shade[1]||"#000",opacity:s.shade[0]||s.shade}),2==s.type&&6==h.ie&&o.layero.find("iframe").attr("src",f[0]),4==s.type?o.tips():(o.offset(),parseInt(u.getStyle(document.getElementById(y.MOVE),"z-index"))||(o.layero.css("visibility","hidden"),h.ready(function(){o.offset(),o.layero.css("visibility","visible")}))),s.fixed&&!u.events.resize[o.index]&&(u.events.resize[o.index]=function(){o.resize()},d.on("resize",u.events.resize[o.index])),s.time<=0||setTimeout(function(){h.close(o.index)},s.time),o.move().callback(),y.anim[s.anim]&&(a="layer-anim "+y.anim[s.anim],o.layero.addClass(a).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){m(this).removeClass(a)})),o.layero.data("config",s)},t.pt.resize=function(){var e=this,t=e.config;e.offset(),(/^\d+%$/.test(t.area[0])||/^\d+%$/.test(t.area[1]))&&e.auto(e.index),4==t.type&&e.tips()},t.pt.auto=function(e){var t=this.config,i=m("#"+y[0]+e),n=(""===t.area[0]&&0t.maxWidth&&i.width(t.maxWidth)),[i.innerWidth(),i.innerHeight()]),a=i.find(y[1]).outerHeight()||0,o=i.find("."+y[6]).outerHeight()||0,e=function(e){(e=i.find(e)).height(n[1]-a-o-2*(0|parseFloat(e.css("padding-top"))))};return 2===t.type?e("iframe"):""===t.area[1]?0t.maxHeight?(n[1]=t.maxHeight,e("."+y[5])):t.fixed&&n[1]>=d.height()&&(n[1]=d.height(),e("."+y[5])):e("."+y[5]),this},t.pt.offset=function(){var e=this,t=e.config,i=e.layero,n=[i.outerWidth(),i.outerHeight()],a="object"==typeof t.offset;e.offsetTop=(d.height()-n[1])/2,e.offsetLeft=(d.width()-n[0])/2,a?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):"auto"!==t.offset&&("t"===t.offset?e.offsetTop=0:"r"===t.offset?e.offsetLeft=d.width()-n[0]:"b"===t.offset?e.offsetTop=d.height()-n[1]:"l"===t.offset?e.offsetLeft=0:"lt"===t.offset?(e.offsetTop=0,e.offsetLeft=0):"lb"===t.offset?(e.offsetTop=d.height()-n[1],e.offsetLeft=0):"rt"===t.offset?(e.offsetTop=0,e.offsetLeft=d.width()-n[0]):"rb"===t.offset?(e.offsetTop=d.height()-n[1],e.offsetLeft=d.width()-n[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?d.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?d.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=d.scrollTop(),e.offsetLeft+=d.scrollLeft()),"min"===i.data("maxminStatus")&&(e.offsetTop=d.height()-(i.find(y[1]).outerHeight()||0),e.offsetLeft=i.css("left")),i.css({top:e.offsetTop,left:e.offsetLeft})},t.pt.tips=function(){var e=this.config,t=this.layero,i=[t.outerWidth(),t.outerHeight()],n=m(e.follow),a={width:(n=n[0]?n:m("body")).outerWidth(),height:n.outerHeight(),top:n.offset().top,left:n.offset().left},o=t.find(".layui-layer-TipsG"),n=e.tips[0];e.tips[1]||o.remove(),a.autoLeft=function(){0d.width()&&(o=d.width()-180-(u.minStackArr.edgeIndex=u.minStackArr.edgeIndex||0,u.minStackArr.edgeIndex+=3))<0&&(o=0),t.minStack&&(l.left=o,l.top=d.height()-n,a||u.minStackIndex++,r.attr("minLeft",o)),r.attr("position",s),h.style(e,l,!0),i.hide(),"page"===r.attr("type")&&r.find(y[4]).hide(),u.rescollbar(e),c.hide())},h.restore=function(e){var t=m("#"+y[0]+e),i=m("#"+y.SHADE+e),n=t.attr("area").split(","),a=t.attr("type");t.removeData("maxminStatus"),h.style(e,{width:n[0],height:n[1],top:parseFloat(n[2]),left:parseFloat(n[3]),position:t.attr("position"),overflow:"visible"},!0),t.find(".layui-layer-max").removeClass("layui-layer-maxmin"),t.find(".layui-layer-min").show(),"page"===a&&t.find(y[4]).show(),u.rescollbar(e),i.show()},h.full=function(t){var i=m("#"+y[0]+t),e=i.data("maxminStatus");"max"!==e&&("min"===e&&h.restore(t),i.data("maxminStatus","max"),u.record(i),y.html.attr("layer-full")||y.html.css("overflow","hidden").attr("layer-full",t),setTimeout(function(){var e="fixed"===i.css("position");h.style(t,{top:e?0:d.scrollTop(),left:e?0:d.scrollLeft(),width:"100%",height:"100%"},!0),i.find(".layui-layer-min").hide()},100))},h.title=function(e,t){m("#"+y[0]+(t||h.index)).find(y[1]).html(e)},h.close=function(o,s){var l,e,r=(t=m("."+y[0]).find("#"+o).closest("."+y[0]))[0]?(o=t.attr("times"),t):m("#"+y[0]+o),c=r.attr("type"),t=r.data("config")||{},f=t.id&&t.hideOnClose;r[0]&&(l={slideDown:"layer-anim-slide-down-out",slideLeft:"layer-anim-slide-left-out",slideUp:"layer-anim-slide-up-out",slideRight:"layer-anim-slide-right-out"}[t.anim]||"layer-anim-close",e=function(){var e="layui-layer-wrap";if(f)return r.removeClass("layer-anim "+l),r.hide();if(c===u.type[1]&&"object"===r.attr("conType")){r.children(":not(."+y[5]+")").remove();for(var t=r.find("."+e),i=0;i<2;i++)t.unwrap();t.css("display",t.data("display")).removeClass(e)}else{if(c===u.type[2])try{var n=m("#"+y[4]+o)[0];n.contentWindow.document.write(""),n.contentWindow.close(),r.find("."+y[5])[0].removeChild(n)}catch(a){}r[0].innerHTML="",r.remove()}"function"==typeof u.end[o]&&u.end[o](),delete u.end[o],"function"==typeof s&&s(),u.events.resize[o]&&(d.off("resize",u.events.resize[o]),delete u.events.resize[o])},m("#"+y.SHADE+o)[f?"hide":"remove"](),t.isOutAnim&&r.addClass("layer-anim "+l),6==h.ie&&u.reselect(),u.rescollbar(o),"string"==typeof r.attr("minLeft")&&(u.minStackIndex--,u.minStackArr.push(r.attr("minLeft"))),h.ie&&h.ie<10||!t.isOutAnim?e():setTimeout(function(){e()},200))},h.closeAll=function(n,a){"function"==typeof n&&(a=n,n=null);var o=m("."+y[0]);m.each(o,function(e){var t=m(this),i=n?t.attr("type")===n:1;i&&h.close(t.attr("times"),e===o.length-1?a:null)}),0===o.length&&"function"==typeof a&&a()},h.closeLast=function(e){h.close(m(".layui-layer-"+(e=e||"page")+":last").attr("times"))},h.cache||{}),g=function(e){return i.skin?" "+i.skin+" "+i.skin+"-"+e:""};h.prompt=function(i,n){var e="",t="";"function"==typeof(i=i||{})&&(n=i),i.area&&(e='style="width: '+(o=i.area)[0]+"; height: "+o[1]+';"',delete i.area),i.placeholder&&(t=' placeholder="'+i.placeholder+'"');var a,o=2==i.formType?'":'",s=i.success;return delete i.success,h.open(m.extend({type:1,btn:["确定","取消"],content:o,skin:"layui-layer-prompt"+g("prompt"),maxWidth:d.width(),success:function(e){(a=e.find(".layui-layer-input")).val(i.value||"").focus(),"function"==typeof s&&s(e)},resize:!1,yes:function(e){var t=a.val();t.length>(i.maxlength||500)?h.tips("最多输入"+(i.maxlength||500)+"个字数",a,{tips:1}):n&&n(t,e,a)}},i))},h.tab=function(n){var a=(n=n||{}).tab||{},o="layui-this",s=n.success;return delete n.success,h.open(m.extend({type:1,skin:"layui-layer-tab"+g("tab"),resize:!1,title:function(){var e=a.length,t=1,i="";if(0'+a[0].title+"";t"+a[t].title+"";return i}(),content:'
      '+function(){var e=a.length,t=1,i="";if(0'+(a[0].content||"no content")+"";t'+(a[t].content||"no content")+"";return i}()+"
    ",success:function(e){var t=e.find(".layui-layer-title").children(),i=e.find(".layui-layer-tabmain").children();t.on("mousedown",function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0;var e=m(this),t=e.index();e.addClass(o).siblings().removeClass(o),i.eq(t).show().siblings().hide(),"function"==typeof n.change&&n.change(t)}),"function"==typeof s&&s(e)}},n))},h.photos=function(n,e,a){var o={};if((n=n||{}).photos){var t=!("string"==typeof n.photos||n.photos instanceof m),i=t?n.photos:{},s=i.data||[],l=i.start||0,r=(o.imgIndex=1+(0|l),n.img=n.img||"img",n.success);if(delete n.success,t){if(0===s.length)return h.msg("没有图片")}else{var c=m(n.photos),f=function(){s=[],c.find(n.img).each(function(e){var t=m(this);t.attr("layer-index",e),s.push({alt:t.attr("alt"),pid:t.attr("layer-pid"),src:t.attr("lay-src")||t.attr("layer-src")||t.attr("src"),thumb:t.attr("src")})})};if(f(),0===s.length)return;if(e||c.on("click",n.img,function(){f();var e=m(this).attr("layer-index");h.photos(m.extend(n,{photos:{start:e,data:s,tab:n.tab},full:n.full}),!0)}),!e)return}o.imgprev=function(e){o.imgIndex--,o.imgIndex<1&&(o.imgIndex=s.length),o.tabimg(e)},o.imgnext=function(e,t){o.imgIndex++,o.imgIndex>s.length&&(o.imgIndex=1,t)||o.tabimg(e)},o.keyup=function(e){var t;o.end||(t=e.keyCode,e.preventDefault(),37===t?o.imgprev(!0):39===t?o.imgnext(!0):27===t&&h.close(o.index))},o.tabimg=function(e){if(!(s.length<=1))return i.start=o.imgIndex-1,h.close(o.index),h.photos(n,!0,e)},o.event=function(){o.bigimg.find(".layui-layer-imgprev").on("click",function(e){e.preventDefault(),o.imgprev(!0)}),o.bigimg.find(".layui-layer-imgnext").on("click",function(e){e.preventDefault(),o.imgnext(!0)}),m(document).on("keyup",o.keyup)},o.loadi=h.load(1,{shade:!("shade"in n)&&.9,scrollbar:!1});var t=s[l].src,d=function(e){h.close(o.loadi);var t,i=s[l].alt||"";a&&(n.anim=-1),o.index=h.open(m.extend({type:1,id:"layui-layer-photos",area:(e=[e.width,e.height],t=[m(p).width()-100,m(p).height()-100],!n.full&&(e[0]>t[0]||e[1]>t[1])&&((t=[e[0]/t[0],e[1]/t[1]])[1]'+i+''+(t=['
    '],1','','',"
    "].join("")),n.hideFooter||t.push(['
    ','
    ',"

    "+i+"

    ",""+o.imgIndex+" / "+s.length+"",'\u67e5\u770b\u539f\u56fe',"
    ","
    "].join("")),t.push(""),t.join(""))+"",success:function(e,t){o.bigimg=e.find(".layui-layer-phimg"),o.imgsee=e.find(".layui-layer-imgbar"),o.event(e),n.tab&&n.tab(s[l],e),"function"==typeof r&&r(e)},end:function(){o.end=!0,m(document).off("keyup",o.keyup)}},n))},u=function(){h.close(o.loadi),h.msg("当前图片地址异常
    是否继续查看下一张?",{time:3e4,btn:["下一张","不看了"],yes:function(){1").addClass(a));layui.each(i.bars,function(e,t){var n=s('
  • ');n.addClass(t.icon).attr({"lay-type":t.type,style:t.style||(i.bgcolor?"background-color: "+i.bgcolor:"")}).html(t.content),n.on("click",function(){var e=s(this).attr("lay-type");"top"===e&&("body"===i.target?s("html,body"):c).animate({scrollTop:0},i.duration),"function"==typeof i.click&&i.click.call(this,e)}),"object"===layui.type(i.on)&&layui.each(i.on,function(e,t){n.on(e,function(){var e=s(this).attr("lay-type");"function"==typeof t&&t.call(this,e)})}),"top"===t.type&&(n.addClass("layui-fixbar-top"),o=n),u.append(n)}),l.find("."+a).remove(),"object"==typeof i.css&&u.css(i.css),l.append(u),o&&(t=function t(){return c.scrollTop()>=i.margin?e||(o.show(),e=1):e&&(o.hide(),e=0),t}()),c.on("scroll",function(){t&&(clearTimeout(n),n=setTimeout(function(){t()},100))})},countdown:function(e,t,n){var i=this,o="function"==typeof t,a=new Date(e).getTime(),r=new Date(!t||o?(new Date).getTime():t).getTime(),a=a-r,l=[Math.floor(a/864e5),Math.floor(a/36e5)%24,Math.floor(a/6e4)%60,Math.floor(a/1e3)%60],o=(o&&(n=t),setTimeout(function(){i.countdown(e,r+1e3,n)},1e3));return n&&n(0]|&(?=#[a-zA-Z0-9]+)/g.test(e+="")?e.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,"""):e},unescape:function(e){return e!==undefined&&null!==e||(e=""),(e+="").replace(/\&/g,"&").replace(/\</g,"<").replace(/\>/g,">").replace(/\'/g,"'").replace(/\"/g,'"')},openWin:function(e){var t=(e=e||{}).window||window.open(e.url||"",e.target,e.specs);e.url||(t.document.open("text/html","replace"),t.document.write(e.content||""),t.document.close())},toVisibleArea:function(e){var t,n,i,o,a,r,l,c;(e=s.extend({margin:160,duration:200,type:"y"},e)).scrollElem[0]&&e.thisElem[0]&&(t=e.scrollElem,l=e.thisElem,i=(a="y"===e.type)?"top":"left",o=t[n=a?"scrollTop":"scrollLeft"](),a=t[a?"height":"width"](),r=t.offset()[i],c={},((l=l.offset()[i]-r)>a-e.margin||l."+h,k=function(e){var i=this;i.index=++p.index,i.config=s.extend({},i.config,p.config,e),i.init()};k.prototype.config={trigger:"click",content:"",className:"",style:"",show:!1,isAllowSpread:!0,isSpreadItem:!0,data:[],delay:300,shade:0},k.prototype.reload=function(e,i){var t=this;t.config=s.extend({},t.config,e),t.init(!0,i)},k.prototype.init=function(e,i){var t,n=this,a=n.config,l=s(a.elem);return 1');return 0No data
  • '),e},u=function(r,e){return layui.each(e,function(e,i){var t,n=i.child&&0",(t="href"in i?''+l+"":l,n?'
    '+t+("parent"===o?'':"group"===o&&d.isAllowSpread?'':"")+"
    ":'
    '+t+"
    "),""].join(""))).data("item",i),n&&(a=s('
    '),t=s("
      "),"parent"===o?(a.append(u(t,i.child)),l.append(a)):l.append(u(t,i.child))),r.append(l))}),r},a=['
      ',"
      "].join("");!(e="contextmenu"!==d.trigger&&!lay.isTopElem(d.elem[0])?e:!0)&&d.elem.data(m+"_opened")||(l.elemView=s("."+f+'[lay-id="'+d.id+'"]'),"reloadData"===i&&l.elemView.length?l.elemView.html(d.content||n()):(l.elemView=s(a),l.elemView.append(d.content||n()),d.className&&l.elemView.addClass(d.className),d.style&&l.elemView.attr("style",d.style),p.thisId=d.id,l.remove(),t.append(l.elemView),d.elem.data(m+"_opened",!0),e=d.shade?'
      ':"",l.elemView.before(e),"mouseenter"===d.trigger&&l.elemView.on("mouseenter",function(){clearTimeout(y.timer)}).on("mouseleave",function(){l.delayRemove()})),l.position(),(y.prevElem=l.elemView).data("prevElem",d.elem),l.elemView.find(".layui-menu").on(o,function(e){layui.stope(e)}),l.elemView.find(".layui-menu li").on("click",function(e){var i=s(this),t=i.data("item")||{},n=t.child&&0n.width()&&(t.addClass(V),(i=t[0].getBoundingClientRect()).left<0&&t.removeClass(V)),i.bottom>n.height()&&t.eq(0).css("margin-top",-(i.bottom-n.height()+5)))}).on("mouseleave",t,function(e){var i=s(this).children("."+C);i.removeClass(V),i.css("margin-top",0)}),p.close=function(e){e=y.getThis(e);return e?(e.remove(),y.call(e)):this},p.reload=function(e,i,t){e=y.getThis(e);return e?(e.reload(i,t),y.call(e)):this},p.reloadData=function(){var t=s.extend([],arguments),n=(t[2]="reloadData",new RegExp("^("+["data","templet","content"].join("|")+")$"));return layui.each(t[1],function(e,i){n.test(e)||delete t[1][e]}),p.reload.apply(null,t)},p.render=function(e){e=new k(e);return y.call(e)},e(r,p)});layui.define(["jquery","lay"],function(e){"use strict";var g=layui.$,c=layui.lay,m={config:{},index:layui.slider?layui.slider.index+1e4:0,set:function(e){var i=this;return i.config=g.extend({},i.config,e),i},on:function(e,i){return layui.onevent.call(this,t,e,i)}},t="slider",v="layui-disabled",x="layui-slider-bar",b="layui-slider-wrap",T="layui-slider-wrap-btn",w="layui-slider-tips",M="layui-slider-input-txt",L="layui-slider-hover",i=function(e){var i=this;i.index=++m.index,i.config=g.extend({},i.config,m.config,e),i.render()};i.prototype.config={type:"default",min:0,max:100,value:0,step:1,showstep:!1,tips:!0,input:!1,range:!1,height:200,disabled:!1,theme:"#16baaa"},i.prototype.render=function(){var a=this,n=a.config,e=g(n.elem);if(1n.min?e:n.min,n.value[1]=i>n.min?i:n.min,n.value[0]=n.value[0]>n.max?n.max:n.value[0],n.value[1]=n.value[1]>n.max?n.max:n.value[1],i=Math.floor((n.value[0]-n.min)/(n.max-n.min)*100),t=(s=Math.floor((n.value[1]-n.min)/(n.max-n.min)*100))-i+"%",i+="%",s+="%"):("object"==typeof n.value&&(n.value=Math.min.apply(null,n.value)),n.valuen.max&&(n.value=n.max),t=Math.floor((n.value-n.min)/(n.max-n.min)*100)+"%");var l,e=n.disabled?"#c2c2c2":n.theme,i='
      '+(n.tips?'
      ':"")+'
      '+(n.range?'
      ':"")+"
      ",t=g(n.elem),s=t.next(".layui-slider");if(s[0]&&s.remove(),a.elemTemp=g(i),n.range?(a.elemTemp.find("."+b).eq(0).data("value",n.value[0]),a.elemTemp.find("."+b).eq(1).data("value",n.value[1])):a.elemTemp.find("."+b).data("value",n.value),t.html(a.elemTemp),"vertical"===n.type&&a.elemTemp.height(n.height+"px"),n.showstep){for(var o=(n.max-n.min)/n.step,r="",u=1;u<1+o;u++){var d=100*u/o;d<100&&(r+='
      ')}a.elemTemp.append(r)}n.input&&!n.range&&(e=g('
      '),t.css("position","relative"),t.append(e),t.find("."+M).children("input").val(n.value),"vertical"===n.type?e.css({left:0,top:-48}):a.elemTemp.css("margin-right",e.outerWidth()+15)),n.disabled?(a.elemTemp.addClass(v),a.elemTemp.find("."+T).addClass(v)):a.slide(),a.elemTemp.find("."+T).on("mouseover",function(){var e="vertical"===n.type?n.height:a.elemTemp[0].offsetWidth,i=a.elemTemp.find("."+b),t=("vertical"===n.type?e-g(this).parent()[0].offsetTop-i.height():g(this).parent()[0].offsetLeft)/e*100,i=g(this).parent().data("value"),e=n.setTips?n.setTips(i):i;a.elemTemp.find("."+w).html(e),clearTimeout(l),l=setTimeout(function(){"vertical"===n.type?a.elemTemp.find("."+w).css({bottom:t+"%","margin-bottom":"20px",display:"inline-block"}):a.elemTemp.find("."+w).css({left:t+"%",display:"inline-block"})},300)}).on("mouseout",function(){clearTimeout(l),a.elemTemp.find("."+w).css("display","none")})},i.prototype.slide=function(e,i,t){var o=this,r=o.config,u=o.elemTemp,d=function(){return"vertical"===r.type?r.height:u[0].offsetWidth},c=u.find("."+b),m=u.next(".layui-slider-input"),v=m.children("."+M).children("input").val(),p=100/((r.max-r.min)/Math.ceil(r.step)),f=function(e,i,t){e=(e=100<(e=100a[1]&&a.reverse(),o.value=r.range?a:l,r.change&&r.change(o.value),"done"===t&&r.done&&r.done(o.value)},h=function(e){var i=e/d()*100/p,t=Math.round(i)*p;return t=e==d()?Math.ceil(i)*p:t},y=g(['
      d()?d():i)/d()*100/p;f(i,l),s.addClass(L),u.find("."+w).show(),e.preventDefault()},i=function(){s.removeClass(L),u.find("."+w).hide()},t=function(){i&&i(),y.remove(),r.done&&r.done(o.value)},g("#LAY-slider-moving")[0]||g("body").append(y),y.on("mousemove",e),y.on("mouseup",t).on("mouseleave",t)})}),u.on("click",function(e){var i=g("."+T),t=g(this);!i.is(event.target)&&0===i.has(event.target).length&&i.length&&(t=(i=(i=(i="vertical"===r.type?d()-e.clientY+t.offset().top-g(window).scrollTop():e.clientX-t.offset().left-g(window).scrollLeft())<0?0:i)>d()?d():i)/d()*100/p,i=r.range?"vertical"===r.type?Math.abs(i-parseInt(g(c[0]).css("bottom")))>Math.abs(i-parseInt(g(c[1]).css("bottom")))?1:0:Math.abs(i-c[0].offsetLeft)>Math.abs(i-c[1].offsetLeft)?1:0:0,f(t,i,"done"),e.preventDefault())}),m.children(".layui-slider-input-btn").children("i").each(function(i){g(this).on("click",function(){v=m.children("."+M).children("input").val();var e=((v=1==i?v-r.stepr.max?r.max:Number(v)+r.step)-r.min)/(r.max-r.min)*100/p;f(e,0,"done")})});var a=function(){var e=this.value,e=(e=(e=(e=isNaN(e)?0:e)r.max?r.max:e,((this.value=e)-r.min)/(r.max-r.min)*100/p);f(e,0,"done")};m.children("."+M).children("input").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),a.call(this))}).on("change",a)},i.prototype.events=function(){this.config},m.render=function(e){e=new i(e);return function(){var t=this,a=t.config;return{setValue:function(e,i){return e=(e=e>a.max?a.max:e)',"",'','',"","","
      "].join("")),r=i.elem=m(i.elem);i.size&&o.addClass("layui-colorpicker-"+i.size),r.addClass("layui-inline").html(e.elemColorBox=o),i.id="id"in i?i.id:r.attr("id")||e.index,e.color=e.elemColorBox.find("."+C)[0].style.background,e.events()},d.prototype.renderPicker=function(){var o,e=this,i=e.config,r=e.elemColorBox[0],t=e.elemPicker=m(['
      ','
      ','
      ','
      ','
      ','
      ',"
      ",'
      ','
      ',"
      ","
      ",'
      ','
      ','
      ',"
      ","
      ",i.predefine?(o=['
      '],layui.each(i.colors,function(e,i){o.push(['
      ','
      ',"
      "].join(""))}),o.push("
      "),o.join("")):"",'
      ','
      ','',"
      ",'
      ','','',"","
      "].join(""));e.elemColorBox.find("."+C)[0];m(a)[0]&&m(a).data("index")==e.index?e.removePicker(d.thisElemInd):(e.removePicker(d.thisElemInd),m("body").append(t)),n.thisId=i.id,d.thisElemInd=e.index,d.thisColor=r.style.background,e.position(),e.pickerEvents()},d.prototype.removePicker=function(e){var i=this.config,e=m("#layui-colorpicker"+(e||this.index));return e[0]&&(e.remove(),delete n.thisId,"function"==typeof i.close&&i.close(this.color)),this},d.prototype.position=function(){var e=this,i=e.config;return t.position(e.bindElem||e.elemColorBox[0],e.elemPicker[0],{position:i.position,align:"center"}),e},d.prototype.val=function(){var e,i=this,o=(i.config,i.elemColorBox.find("."+C)),r=i.elemPicker.find("."+M),t=o[0].style.backgroundColor;t?(e=Y(L(t)),o=o.attr("lay-type"),i.select(e.h,e.s,e.b),"torgb"===o?r.find("input").val(t):"rgba"===o?(o=L(t),3===(t.match(/[0-9]{1,3}/g)||[]).length?(r.find("input").val("rgba("+o.r+", "+o.g+", "+o.b+", 1)"),i.elemPicker.find("."+T).css("left",280)):(r.find("input").val(t),t=280*t.slice(t.lastIndexOf(",")+1,t.length-1),i.elemPicker.find("."+T).css("left",t)),i.elemPicker.find("."+D)[0].style.background="linear-gradient(to right, rgba("+o.r+", "+o.g+", "+o.b+", 0), rgb("+o.r+", "+o.g+", "+o.b+"))"):r.find("input").val("#"+F(e))):(i.select(0,100,100),r.find("input").val(""),i.elemPicker.find("."+D)[0].style.background="",i.elemPicker.find("."+T).css("left",280))},d.prototype.side=function(){var n=this,l=n.config,c=n.elemColorBox.find("."+C),a=c.attr("lay-type"),s=n.elemPicker.find(".layui-colorpicker-side"),e=n.elemPicker.find("."+B),d=n.elemPicker.find("."+I),r=n.elemPicker.find("."+E),f=n.elemPicker.find("."+D),u=n.elemPicker.find("."+T),g=e[0].offsetTop/180*360,p=100-(r[0].offsetTop+3)/180*100,h=(r[0].offsetLeft+3)/260*100,v=Math.round(u[0].offsetLeft/280*100)/100,b=n.elemColorBox.find("."+w),i=n.elemPicker.find(".layui-colorpicker-pre").children("div"),y=function(e,i,o,r){n.select(e,i,o);var t=j({h:e,s:i,b:o}),e=F({h:e,s:i,b:o}),i=n.elemPicker.find("."+M).find("input");b.addClass(x).removeClass(P),c[0].style.background="rgb("+t.r+", "+t.g+", "+t.b+")","torgb"===a?i.val("rgb("+t.r+", "+t.g+", "+t.b+")"):"rgba"===a?(u.css("left",280*r),i.val("rgba("+t.r+", "+t.g+", "+t.b+", "+r+")"),c[0].style.background="rgba("+t.r+", "+t.g+", "+t.b+", "+r+")",f[0].style.background="linear-gradient(to right, rgba("+t.r+", "+t.g+", "+t.b+", 0), rgb("+t.r+", "+t.g+", "+t.b+"))"):i.val("#"+e),l.change&&l.change(n.elemPicker.find("."+M).find("input").val())},o=m(['
      '].join("")),k=function(e){m("#LAY-colorpicker-moving")[0]||m("body").append(o),o.on("mousemove",e),o.on("mouseup",function(){o.remove()}).on("mouseleave",function(){o.remove()})};e.on("mousedown",function(e){var r=this.offsetTop,t=e.clientY;k(function(e){var i=r+(e.clientY-t),o=s[0].offsetHeight,o=(i=o<(i=i<0?0:i)?o:i)/180*360;y(g=o,h,p,v),e.preventDefault()}),e.preventDefault()}),s.on("click",function(e){var i=e.clientY-m(this).offset().top+H.scrollTop(),i=(i=(i=i<0?0:i)>this.offsetHeight?this.offsetHeight:i)/180*360;y(g=i,h,p,v),e.preventDefault()}),r.on("mousedown",function(e){var n=this.offsetTop,l=this.offsetLeft,c=e.clientY,a=e.clientX;layui.stope(e),k(function(e){var i=n+(e.clientY-c),o=l+(e.clientX-a),r=d[0].offsetHeight-3,t=d[0].offsetWidth-3,t=((o=t<(o=o<-3?-3:o)?t:o)+3)/260*100,o=100-((i=r<(i=i<-3?-3:i)?r:i)+3)/180*100;y(g,h=t,p=o,v),e.preventDefault()}),e.preventDefault()}),d.on("mousedown",function(e){var i=e.clientY-m(this).offset().top-3+H.scrollTop(),o=e.clientX-m(this).offset().left-3+H.scrollLeft(),o=((i=i<-3?-3:i)>this.offsetHeight-3&&(i=this.offsetHeight-3),((o=(o=o<-3?-3:o)>this.offsetWidth-3?this.offsetWidth-3:o)+3)/260*100),i=100-(i+3)/180*100;y(g,h=o,p=i,v),layui.stope(e),e.preventDefault(),r.trigger(e,"mousedown")}),u.on("mousedown",function(e){var r=this.offsetLeft,t=e.clientX;k(function(e){var i=r+(e.clientX-t),o=f[0].offsetWidth,o=(o<(i=i<0?0:i)&&(i=o),Math.round(i/280*100)/100);y(g,h,p,v=o),e.preventDefault()}),e.preventDefault()}),f.on("click",function(e){var i=e.clientX-m(this).offset().left,i=((i=i<0?0:i)>this.offsetWidth&&(i=this.offsetWidth),Math.round(i/280*100)/100);y(g,h,p,v=i),e.preventDefault()}),i.each(function(){m(this).on("click",function(){m(this).parent(".layui-colorpicker-pre").addClass("selected").siblings().removeClass("selected");var e=this.style.backgroundColor,i=Y(L(e)),o=e.slice(e.lastIndexOf(",")+1,e.length-1);g=i.h,h=i.s,p=i.b,3===(e.match(/[0-9]{1,3}/g)||[]).length&&(o=1),v=o,y(i.h,i.s,i.b,o)})})},d.prototype.select=function(e,i,o,r){this.config;var t=F({h:e,s:100,b:100}),e=(F({h:e,s:i,b:o}),e/360*180),o=180-o/100*180-3,i=i/100*260-3;this.elemPicker.find("."+B).css("top",e),this.elemPicker.find("."+I)[0].style.background="#"+t,this.elemPicker.find("."+E).css({top:o,left:i})},d.prototype.pickerEvents=function(){var c=this,a=c.config,s=c.elemColorBox.find("."+C),d=c.elemPicker.find("."+M+" input"),o={clear:function(e){s[0].style.background="",c.elemColorBox.find("."+w).removeClass(x).addClass(P),c.color="",a.done&&a.done(""),c.removePicker()},confirm:function(e,i){var o,r,t,n,l=d.val();if(-1>16,g:(65280&t)>>8,b:255&t},r=Y(n),s[0].style.background=o="#"+F(r),c.elemColorBox.find("."+w).removeClass(P).addClass(x)),"change"===i)return c.select(r.h,r.s,r.b,i),void(a.change&&a.change(o));c.color=l,a.done&&a.done(l),c.removePicker()}};c.elemPicker.on("click","*[colorpicker-events]",function(){var e=m(this),i=e.attr("colorpicker-events");o[i]&&o[i].call(this,e)}),d.on("keyup",function(e){var i=m(this);o.confirm.call(this,i,13===e.keyCode?null:"change")})},d.prototype.events=function(){var e=this;e.config;e.elemColorBox.on("click",function(){e.renderPicker(),m(a)[0]&&(e.val(),e.side())})},s.on(i,function(e){var i,o,r;!n.thisId||(i=l.getThis(n.thisId))&&(o=i.config,r=i.elemColorBox.find("."+C),m(e.target).hasClass(c)||m(e.target).parents("."+c)[0]||m(e.target).hasClass(a.replace(/\./g,""))||m(e.target).parents(a)[0]||i.elemPicker&&(i.color?(e=Y(L(i.color)),i.select(e.h,e.s,e.b)):i.elemColorBox.find("."+w).removeClass(x).addClass(P),r[0].style.background=i.color||"","function"==typeof o.cancel&&o.cancel(i.color),i.removePicker()))}),H.on("resize",function(){if(n.thisId){var e=l.getThis(n.thisId);if(e)return!(!e.elemPicker||!m(a)[0])&&void e.position()}}),l.that={},l.getThis=function(e){var i=l.that[e];return i||o.error(e?r+" instance with ID '"+e+"' not found":"ID argument required"),i},n.render=function(e){e=new d(e);return l.call(e)},e(r,n)});layui.define("jquery",function(t){"use strict";var u=layui.$,d=(layui.hint(),layui.device()),o="element",c="layui-this",h="layui-show",r=".layui-tab-title",i=function(){this.config={}},y=(i.prototype.set=function(t){return u.extend(!0,this.config,t),this},i.prototype.on=function(t,i){return layui.onevent.call(this,o,t,i)},i.prototype.tabAdd=function(t,i){var a,e=u(".layui-tab[lay-filter="+t+"]"),l=e.children(r),n=l.children(".layui-tab-bar"),e=e.children(".layui-tab-content"),s=""+(i.title||"unnaming")+"";return n[0]?n.before(s):l.append(s),e.append('
      '+(i.content||"")+"
      "),i.change&&this.tabChange(t,i.id),l.data("LAY_TAB_CHANGE",i.change),g.tabAuto(i.change?"change":null),this},i.prototype.tabDelete=function(t,i){t=u(".layui-tab[lay-filter="+t+"]").children(r).find('>li[lay-id="'+i+'"]');return g.tabDelete(null,t),this},i.prototype.tabChange=function(t,i){t=u(".layui-tab[lay-filter="+t+"]").children(r).find('>li[lay-id="'+i+'"]');return g.tabClick.call(t[0],{liElem:t}),this},i.prototype.tab=function(a){a=a||{},e.on("click",a.headerElem,function(t){var i=u(this).index();g.tabClick.call(this,{index:i,options:a})})},i.prototype.progress=function(t,i){var a="layui-progress",t=u("."+a+"[lay-filter="+t+"]").find("."+a+"-bar"),a=t.find("."+a+"-text");return t.css("width",function(){return/^.+\/.+$/.test(i)?100*new Function("return "+i)()+"%":i}).attr("lay-percent",i),a.text(i),this},".layui-nav"),f="layui-nav-item",l="layui-nav-bar",p="layui-nav-tree",b="layui-nav-child",v="layui-nav-more",m="layui-anim layui-anim-upbit",g={tabClick:function(t){var i=(t=t||{}).options||{},a=t.liElem||u(this),e=i.headerElem?a.parent():a.parents(".layui-tab").eq(0),i=i.bodyElem?u(i.bodyElem):e.children(".layui-tab-content").children(".layui-tab-item"),l=a.find("a"),l="javascript:;"!==l.attr("href")&&"_blank"===l.attr("target"),n="string"==typeof a.attr("lay-unselect"),s=e.attr("lay-filter"),t="index"in t?t.index:a.parent().children("li").index(a);l||n||(a.addClass(c).siblings().removeClass(c),i.eq(t).addClass(h).siblings().removeClass(h)),layui.event.call(this,o,"tab("+s+")",{elem:e,index:t})},tabDelete:function(t,i){var i=i||u(this).parent(),a=i.parent().children("li").index(i),e=i.closest(".layui-tab"),l=e.children(".layui-tab-content").children(".layui-tab-item"),n=e.attr("lay-filter");i.hasClass(c)&&(i.next()[0]&&i.next().is("li")?g.tabClick.call(i.next()[0],{index:a+1}):i.prev()[0]&&i.prev().is("li")&&g.tabClick.call(i.prev()[0],null,a-1)),i.remove(),l.eq(a).remove(),setTimeout(function(){g.tabAuto()},50),layui.event.call(this,o,"tabDelete("+n+")",{elem:e,index:a})},tabAuto:function(l){var n="layui-tab-more",s="layui-tab-bar",o="layui-tab-close",c=this;u(".layui-tab").each(function(){var t,i=u(this),a=i.children(".layui-tab-title"),e=(i.children(".layui-tab-content").children(".layui-tab-item"),'lay-stope="tabmore"'),e=u('');c===window&&d.ie,i.attr("lay-allowclose")&&a.find("li").each(function(){var t,i=u(this);i.find("."+o)[0]||((t=u('')).on("click",g.tabDelete),i.append(t))}),"string"!=typeof i.attr("lay-unauto")&&(a.prop("scrollWidth")>a.outerWidth()+1||a.find("li").length&&a.height()>(t=a.find("li").eq(0).height())+t/2?("change"===l&&a.data("LAY_TAB_CHANGE")&&a.addClass(n),a.find("."+s)[0]||(a.append(e),i.attr("overflow",""),e.on("click",function(t){var i=a.hasClass(n);a[i?"removeClass":"addClass"](n)}))):(a.find("."+s).remove(),i.removeAttr("overflow")))})},hideTabMore:function(t){var i=u(".layui-tab-title");!0!==t&&"tabmore"===u(t.target).attr("lay-stope")||(i.removeClass("layui-tab-more"),i.find(".layui-tab-bar").attr("title",""))},clickThis:function(){var t=u(this),i=t.parents(y),a=i.attr("lay-filter"),e=t.parent(),l=t.siblings("."+b),n="string"==typeof e.attr("lay-unselect");"javascript:;"!==t.attr("href")&&"_blank"===t.attr("target")||n||l[0]||(i.find("."+c).removeClass(c),e.addClass(c)),i.hasClass(p)&&(l.removeClass(m),l[0]&&(e["none"===l.css("display")?"addClass":"removeClass"](f+"ed"),"all"===i.attr("lay-shrink")&&e.siblings().removeClass(f+"ed"))),layui.event.call(this,o,"nav("+a+")",t)},collapse:function(){var t=u(this),i=t.find(".layui-colla-icon"),a=t.siblings(".layui-colla-content"),e=t.parents(".layui-collapse").eq(0),l=e.attr("lay-filter"),n="none"===a.css("display");"string"==typeof e.attr("lay-accordion")&&((e=e.children(".layui-colla-item").children("."+h)).siblings(".layui-colla-title").children(".layui-colla-icon").html(""),e.removeClass(h)),a[n?"addClass":"removeClass"](h),i.html(n?"":""),layui.event.call(this,o,"collapse("+l+")",{title:t,content:a,show:n})}},a=(i.prototype.render=i.prototype.init=function(t,i){var a=i?'[lay-filter="'+i+'"]':"",i={tab:function(){g.tabAuto.call({})},nav:function(){var s={},o={},c={},r="layui-nav-title";u(y+a).each(function(t){var i=u(this),a=u(''),e=i.find("."+f);i.find("."+l)[0]||(i.append(a),(i.hasClass(p)?e.find("dd,>."+r):e).on("mouseenter",function(){!function(t,i,a){var e,l=u(this),n=l.find("."+b);i.hasClass(p)?n[0]||(e=l.children("."+r),t.css({top:l.offset().top-i.offset().top,height:(e[0]?e:l).outerHeight(),opacity:1})):(n.addClass(m),n.hasClass("layui-nav-child-c")&&n.css({left:-(n.outerWidth()-l.width())/2}),n[0]?t.css({left:t.position().left+t.width()/2,width:0,opacity:0}):t.css({left:l.position().left+parseFloat(l.css("marginLeft")),top:l.position().top+l.height()-t.height()}),s[a]=setTimeout(function(){t.css({width:n[0]?0:l.width(),opacity:n[0]?0:1})},d.ie&&d.ie<10?0:200),clearTimeout(c[a]),"block"===n.css("display")&&clearTimeout(o[a]),o[a]=setTimeout(function(){n.addClass(h),l.find("."+v).addClass(v+"d")},300))}.call(this,a,i,t)}).on("mouseleave",function(){i.hasClass(p)?a.css({height:0,opacity:0}):(clearTimeout(o[t]),o[t]=setTimeout(function(){i.find("."+b).removeClass(h),i.find("."+v).removeClass(v+"d")},300))}),i.on("mouseleave",function(){clearTimeout(s[t]),c[t]=setTimeout(function(){i.hasClass(p)||a.css({width:0,left:a.position().left+a.width()/2,opacity:0})},200)})),e.find("a").each(function(){var t=u(this);t.parent();t.siblings("."+b)[0]&&!t.children("."+v)[0]&&t.append(''),t.off("click",g.clickThis).on("click",g.clickThis)})})},breadcrumb:function(){u(".layui-breadcrumb"+a).each(function(){var t=u(this),i="lay-separator",a=t.attr(i)||"/",e=t.find("a");e.next("span["+i+"]")[0]||(e.each(function(t){t!==e.length-1&&u(this).after(""+a+"")}),t.css("visibility","visible"))})},progress:function(){var e="layui-progress";u("."+e+a).each(function(){var t=u(this),i=t.find(".layui-progress-bar"),a=i.attr("lay-percent");i.css("width",function(){return/^.+\/.+$/.test(a)?100*new Function("return "+a)()+"%":a}),t.attr("lay-showpercent")&&setTimeout(function(){i.html(''+a+"")},350)})},collapse:function(){u(".layui-collapse"+a).each(function(){u(this).find(".layui-colla-item").each(function(){var t=u(this),i=t.find(".layui-colla-title"),t="none"===t.find(".layui-colla-content").css("display");i.find(".layui-colla-icon").remove(),i.append(''+(t?"":"")+""),i.off("click",g.collapse).on("click",g.collapse)})})}};return i[t]?i[t]():layui.each(i,function(t,i){i()})},new i),e=u(document);u(function(){a.render()}),e.on("click",".layui-tab-title li",g.tabClick),u(window).on("resize",g.tabAuto),t(o,a)});layui.define(["lay","layer"],function(e){"use strict";var y=layui.$,i=layui.layer,x=layui.device(),t={config:{},set:function(e){var i=this;return i.config=y.extend({},i.config,e),i},on:function(e,i){return layui.onevent.call(this,n,e,i)}},n="upload",a="layui-upload-file",o="layui-upload-form",F="layui-upload-iframe",b="layui-upload-choose",w=function(e){var i=this;i.config=y.extend({},i.config,t.config,e),i.render()};w.prototype.config={accept:"images",exts:"",auto:!0,bindAction:"",url:"",force:"",field:"file",acceptMime:"",method:"post",data:{},drag:!0,size:0,number:0,multiple:!1},w.prototype.render=function(e){var i=this;(e=i.config).elem=y(e.elem),e.bindAction=y(e.bindAction),i.file(),i.events()},w.prototype.file=function(){var e=this,i=e.config,t=e.elemFile=y(['"].join("")),n=i.elem.next();(n.hasClass(a)||n.hasClass(o))&&n.remove(),x.ie&&x.ie<10&&i.elem.wrap('
      '),e.isFile()?(e.elemFile=i.elem,i.field=i.elem[0].name):i.elem.after(t),x.ie&&x.ie<10&&e.initIE()},w.prototype.initIE=function(){var t,e=this.config,i=y(''),n=y(['
      ',"
      "].join(""));y("#"+F)[0]||y("body").append(i),e.elem.next().hasClass(o)||(this.elemFile.wrap(n),e.elem.next("."+o).append((t=[],layui.each(e.data,function(e,i){i="function"==typeof i?i():i,t.push('')}),t.join(""))))},w.prototype.msg=function(e){return i.msg(e,{icon:2,shift:6})},w.prototype.isFile=function(){var e=this.config.elem[0];if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type},w.prototype.preview=function(n){window.FileReader&&layui.each(this.chooseFiles,function(e,i){var t=new FileReader;t.readAsDataURL(i),t.onload=function(){n&&n(e,i,this.result)}})},w.prototype.upload=function(e,i){var t,n,a,o,r=this,u=r.config,l=r.elemFile[0],c=function(){return e||r.files||r.chooseFiles||l.files},f=function(){var i=0,a=0,o=c(),l=function(){u.multiple&&i+a===r.fileLength&&"function"==typeof u.allDone&&u.allDone({total:r.fileLength,successful:i,failed:a})},t=function(t){var n=new FormData,e=(layui.each(u.data,function(e,i){i="function"==typeof i?i():i,n.append(e,i)}),t.unified?layui.each(o,function(e,i){n.append(u.field,i)}):n.append(u.field,t.file),{url:u.url,type:"post",data:n,contentType:!1,processData:!1,dataType:"json",headers:u.headers||{},success:function(e){u.unified?i+=r.fileLength:i++,p(t.index,e),l()},error:function(e){u.unified?a+=r.fileLength:a++,r.msg(["Upload failed, please try again.","status: "+(e.status||"")+" - "+(e.statusText||"error")].join("
      ")),d(t.index),l()}});"function"==typeof u.progress&&(e.xhr=function(){var e=y.ajaxSettings.xhr();return e.upload.addEventListener("progress",function(e){var i;e.lengthComputable&&(i=Math.floor(e.loaded/e.total*100),u.progress(i,(u.item||u.elem)[0],e,t.index))}),e}),y.ajax(e)};u.unified?t({unified:!0,index:0}):layui.each(o,function(e,i){t({index:e,file:i})})},s=function(){var n=y("#"+F);r.elemFile.parent().submit(),clearInterval(w.timer),w.timer=setInterval(function(){var e,i=n.contents().find("body");try{e=i.text()}catch(t){r.msg("Cross-domain requests are not supported"),clearInterval(w.timer),d()}e&&(clearInterval(w.timer),i.html(""),p(0,e))},30)},p=function(e,i){if(r.elemFile.next("."+b).remove(),l.value="","json"===u.force&&"object"!=typeof i)try{i=JSON.parse(i)}catch(t){return i={},r.msg("Please return JSON data format")}"function"==typeof u.done&&u.done(i,e||0,function(e){r.upload(e)})},d=function(e){u.auto&&(l.value=""),"function"==typeof u.error&&u.error(e||0,function(e){r.upload(e)})},m=u.exts,h=(n=[],layui.each(e||r.chooseFiles,function(e,i){n.push(i.name)}),n),g={preview:function(e){r.preview(e)},upload:function(e,i){var t={};t[e]=i,r.upload(t)},pushFile:function(){return r.files=r.files||{},layui.each(r.chooseFiles,function(e,i){r.files[e]=i}),r.files},resetFile:function(e,i,t){i=new File([i],t);r.files=r.files||{},r.files[e]=i}},v={file:"\u6587\u4ef6",images:"\u56fe\u7247",video:"\u89c6\u9891",audio:"\u97f3\u9891"}[u.accept]||"\u6587\u4ef6",h=0===h.length?l.value.match(/[^\/\\]+\..+/g)||[]||"":h;if(0!==h.length){switch(u.accept){case"file":layui.each(h,function(e,i){if(m&&!RegExp(".\\.("+m+")$","i").test(escape(i)))return t=!0});break;case"video":layui.each(h,function(e,i){if(!RegExp(".\\.("+(m||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(i)))return t=!0});break;case"audio":layui.each(h,function(e,i){if(!RegExp(".\\.("+(m||"mp3|wav|mid")+")$","i").test(escape(i)))return t=!0});break;default:layui.each(h,function(e,i){if(!RegExp(".\\.("+(m||"jpg|png|gif|bmp|jpeg|svg")+")$","i").test(escape(i)))return t=!0})}if(t)return r.msg("\u9009\u62e9\u7684"+v+"\u4e2d\u5305\u542b\u4e0d\u652f\u6301\u7684\u683c\u5f0f"),l.value="";if("choose"!==i&&!u.auto||(u.choose&&u.choose(g),"choose"!==i)){if(r.fileLength=(a=0,v=c(),layui.each(v,function(){a++}),a),u.number&&r.fileLength>u.number)return r.msg("\u540c\u65f6\u6700\u591a\u53ea\u80fd\u4e0a\u4f20: "+u.number+" \u4e2a\u6587\u4ef6
      \u60a8\u5f53\u524d\u5df2\u7ecf\u9009\u62e9\u4e86: "+r.fileLength+" \u4e2a\u6587\u4ef6");if(01024*u.size&&(i=1<=(i=u.size/1024)?i.toFixed(2)+"MB":u.size+"KB",l.value="",o=i)}),o)return r.msg("\u6587\u4ef6\u5927\u5c0f\u4e0d\u80fd\u8d85\u8fc7 "+o);if(!u.before||!1!==u.before(g))x.ie?(9'+e+"")},r=function(){var e=y(this);(e.attr("lay-data")||e.attr("lay-options"))&&(n.config=y.extend({},a,lay.options(this,{attr:e.attr("lay-data")?"lay-data":null})))};a.elem.off("upload.start").on("upload.start",function(){var e=y(this);r.call(this),n.config.item=e,n.elemFile[0].click()}),x.ie&&x.ie<10||a.elem.off("upload.over").on("upload.over",function(){y(this).attr("lay-over","")}).off("upload.leave").on("upload.leave",function(){y(this).removeAttr("lay-over")}).off("upload.drop").on("upload.drop",function(e,i){var t=y(this),i=i.originalEvent.dataTransfer.files||[];t.removeAttr("lay-over"),r.call(this),o(i),a.auto?n.upload():l(i)}),n.elemFile.off("upload.change").on("upload.change",function(){var e=this.files||[];r.call(this),o(e),a.auto?n.upload():l(e)}),a.bindAction.off("upload.action").on("upload.action",function(){n.upload()}),a.elem.data("haveEvents")||(n.elemFile.on("change",function(){y(this).trigger("upload.change")}),a.elem.on("click",function(){n.isFile()||y(this).trigger("upload.start")}),a.drag&&a.elem.on("dragover",function(e){e.preventDefault(),y(this).trigger("upload.over")}).on("dragleave",function(e){y(this).trigger("upload.leave")}).on("drop",function(e){e.preventDefault(),y(this).trigger("upload.drop",e)}),a.bindAction.on("click",function(){y(this).trigger("upload.action")}),a.elem.data("haveEvents",!0))},t.render=function(e){e=new w(e);return function(){var i=this;return{upload:function(e){i.upload.call(i,e)},reload:function(e){i.reload.call(i,e)},config:i.config}}.call(e)},e(n,t)});layui.define(["lay","layer","util"],function(e){"use strict";var b=layui.$,y=layui.layer,d=layui.util,l=layui.hint(),w=(layui.device(),"form"),o=".layui-form",T="layui-this",$="layui-hide",q="layui-disabled",t=function(){this.config={verify:{required:[/[\S]+/,"\u5fc5\u586b\u9879\u4e0d\u80fd\u4e3a\u7a7a"],phone:[/^1\d{10}$/,"\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u624b\u673a\u53f7"],email:[/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,"\u90ae\u7bb1\u683c\u5f0f\u4e0d\u6b63\u786e"],url:[/^(#|(http(s?)):\/\/|\/\/)[^\s]+\.[^\s]+$/,"\u94fe\u63a5\u683c\u5f0f\u4e0d\u6b63\u786e"],number:function(e){if(isNaN(e))return"\u53ea\u80fd\u586b\u5199\u6570\u5b57"},date:[/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/,"\u65e5\u671f\u683c\u5f0f\u4e0d\u6b63\u786e"],identity:[/(^\d{15}$)|(^\d{17}(x|X|\d)$)/,"\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u8eab\u4efd\u8bc1\u53f7"]},verIncludelRequired:!1,autocomplete:null}},i=(t.prototype.set=function(e){return b.extend(!0,this.config,e),this},t.prototype.verify=function(e){return b.extend(!0,this.config.verify,e),this},t.prototype.getFormElem=function(e){return b(o+(e?'[lay-filter="'+e+'"]':""))},t.prototype.on=function(e,t){return layui.onevent.call(this,w,e,t)},t.prototype.val=function(e,i){return this.getFormElem(e).each(function(e,t){var a=b(this);layui.each(i,function(e,t){var i,e=a.find('[name="'+e+'"]');e[0]&&("checkbox"===(i=e[0].type)?e[0].checked=t:"radio"===i?e.each(function(){this.checked=this.value==t}):e.val(t))})}),r.render(null,e),this.getValue(e)},t.prototype.getValue=function(e,t){t=t||this.getFormElem(e);var a={},n={},e=t.find("input,select,textarea");return layui.each(e,function(e,t){var i;b(this);t.name=(t.name||"").replace(/^\s*|\s*&/,""),t.name&&(/^.*\[\]$/.test(t.name)&&(i=t.name.match(/^(.*)\[\]$/g)[0],a[i]=0|a[i],i=t.name.replace(/^(.*)\[\]$/,"$1["+a[i]+++"]")),/^(checkbox|radio)$/.test(t.type)&&!t.checked||(n[i||t.name]=t.value))}),n},t.prototype.render=function(e,t){var i=this.config,a=b(o+(t?'[lay-filter="'+t+'"]':"")),n={input:function(e){e=e||a.find("input,textarea");i.autocomplete&&e.attr("autocomplete",i.autocomplete),a.find("input[lay-affix],textarea[lay-affix]").each(function(){var l=b(this),r=l.attr("lay-affix"),s="layui-input-suffix",o="layui-input-affix",e=l.is("[disabled]")||l.is("[readonly]"),c=function(e,t){(e=b(e))[0]&&e[b.trim(t)?"removeClass":"addClass"]($)},n=function(t){t=b.extend({},u[r]||{value:r},t,lay.options(l[0]));var i=b('
      '),e=b(''),a=(i.append(e),t.split&&i.addClass("layui-input-split"),l.next("."+o)),n=(a[0]&&a.remove(),l.next("."+s));n[0]?((a=n.find("."+o))[0]&&a.remove(),n.prepend(i),l.css("padding-right",function(){return(l.closest(".layui-input-group")[0]?0:n.outerWidth())+i.outerWidth()})):(i.addClass(s),l.after(i)),"auto"===t.show&&c(i,l.val()),l.on("input propertychange",function(){var e=this.value;"auto"===t.show&&c(i,e)}),e.on("click",function(){var e=l.attr("lay-filter");b(this).hasClass(q)||("function"==typeof t.click&&t.click.call(this,l,t),layui.event.call(this,w,"input-affix("+e+")",{elem:l[0],affix:r,options:t}))})},u={eye:{value:"eye-invisible",click:function(e,t){var i="LAY_FORM_INPUT_AFFIX_SHOW",a=e.data(i);e.attr("type",a?"password":"text").data(i,!a),n({value:a?"eye-invisible":"eye"})}},clear:{value:"clear",click:function(e){e.val("").focus(),c(b(this).parent(),null)},show:"auto",disabled:e}};n()})},select:function(e){var p,c="\u8bf7\u9009\u62e9",m="layui-form-select",g="layui-select-title",x="layui-select-none",k="",e=e||a.find("select"),C=function(e,t){b(e.target).parent().hasClass(g)&&!t||(b("."+m).removeClass(m+"ed "+m+"up"),p&&k&&p.val(k)),p=null},u=function(a,e,t){var s,r,i,n,o,l,c=b(this),u=a.find("."+g),d=u.find("input"),f=a.find("dl"),h=f.children("dd"),y=f.children("dt"),v=this.selectedIndex;e||(r=c.attr("lay-search"),i=function(){var e=a.offset().top+a.outerHeight()+5-F.scrollTop(),t=f.outerHeight();v=c[0].selectedIndex,a.addClass(m+"ed"),h.removeClass($),y.removeClass($),s=null,h.removeClass(T),0<=v&&h.eq(v).addClass(T),e+t>F.height()&&t<=e&&a.addClass(m+"up"),o()},n=function(e){a.removeClass(m+"ed "+m+"up"),d.blur(),s=null,e||l(d.val(),function(e){var t=c[0].selectedIndex;e&&(k=b(c[0].options[t]).html(),0===t&&k===d.attr("placeholder")&&(k=""),d.val(k||""))})},o=function(){var e,t,i=f.children("dd."+T);i[0]&&(e=i.position().top,t=f.height(),i=i.height(),t\u65e0\u5339\u914d\u9879

      '):f.find("."+x).remove()},"keyup"),""===t&&(c.val(""),f.find("."+T).removeClass(T),(c[0].options[0]||{}).value||f.children("dd:eq(0)").addClass(T),f.find("."+x).remove()),o()}).on("blur",function(e){var t=c[0].selectedIndex;p=d,k=b(c[0].options[t]).text(),0===t&&k===d.attr("placeholder")&&(k=""),setTimeout(function(){l(d.val(),function(e){k||d.val("")},"blur")},200)}),h.on("click",function(){var e=b(this),t=e.attr("lay-value"),i=c.attr("lay-filter");return e.hasClass(q)||(e.hasClass("layui-select-tips")?d.val(""):(d.val(e.text()),e.addClass(T)),e.siblings().removeClass(T),c.val(t).removeClass("layui-form-danger"),layui.event.call(this,w,"select("+i+")",{elem:c[0],value:t,othis:a}),n(!0)),!1}),a.find("dl>dt").on("click",function(e){return!1}),b(document).off("click",C).on("click",C))};e.each(function(e,t){var i=b(this),a=i.next("."+m),n=this.disabled,l=t.value,r=b(t.options[t.selectedIndex]),t=t.options[0];if("string"==typeof i.attr("lay-ignore"))return i.show();var s,o="string"==typeof i.attr("lay-search"),t=t&&!t.value&&t.innerHTML||c,r=b(['
      ','
      ','','
      ','
      ',(t=i.find("*"),s=[],layui.each(t,function(e,t){var i=t.tagName.toLowerCase();0!==e||t.value||"optgroup"===i?"optgroup"===i?s.push("
      "+t.label+"
      "):s.push('
      '+b.trim(t.innerHTML)+"
      "):s.push('
      '+b.trim(t.innerHTML||c)+"
      ")}),0===s.length&&s.push('
      \u6ca1\u6709\u9009\u9879
      '),s.join("")+"
      "),"
      "].join(""));a[0]&&a.remove(),i.after(r),u.call(this,r,n,o)})},checkbox:function(e){var o={checkbox:["layui-form-checkbox","layui-form-checked","checkbox"],"switch":["layui-form-switch","layui-form-onswitch","switch"],SUBTRA:"layui-icon-indeterminate"},e=e||a.find("input[type=checkbox]");e.each(function(e,t){var i=b(this),a=i.attr("lay-skin")||"primary",n=d.escape(b.trim(t.title||(t.title=i.attr("lay-text")||""))),l=this.disabled,r=o[a]||o.checkbox,s=i.next("."+r[0]);if(s[0]&&s.remove(),i.next("[lay-checkbox]")[0]&&(n=i.next().html()||""),n="switch"===a?n.split("|"):[n],"string"==typeof i.attr("lay-ignore"))return i.show();l=b(['
      ",(s={checkbox:[n[0]?"
      "+n[0]+"
      ":"primary"===a?"":"
      ",''].join(""),"switch":"
      "+((t.checked?n[0]:n[1])||"")+"
      "})[a]||s.checkbox,"
      "].join(""));i.after(l),function(a,n){var l=b(this);a.on("click",function(){var e=b(this),t=l.attr("lay-filter"),e=e.next("*[lay-checkbox]")[0]?e.next().html():l.attr("title")||"",i=l.attr("lay-skin")||"primary",e="switch"===i?e.split("|"):[e];l[0].disabled||(l[0].indeterminate&&(l[0].indeterminate=!1,a.find("."+o.SUBTRA).removeClass(o.SUBTRA).addClass("layui-icon-ok")),l[0].checked?(l[0].checked=!1,a.removeClass(n[1]),"switch"===i&&a.children("div").html(e[1])):(l[0].checked=!0,a.addClass(n[1]),"switch"===i&&a.children("div").html(e[0])),layui.event.call(l[0],w,n[2]+"("+t+")",{elem:l[0],value:l[0].value,othis:a}))})}.call(this,l,r)})},radio:function(e){var r="layui-form-radio",s=["layui-icon-radio","layui-icon-circle"],e=e||a.find("input[type=radio]");e.each(function(e,t){var i=b(this),a=i.next("."+r),n=this.disabled;if("string"==typeof i.attr("lay-ignore"))return i.show();a[0]&&a.remove();n=b(['
      ','',"
      "+(a=d.escape(t.title||""),a=i.next("[lay-radio]")[0]?i.next().html():a)+"
      ","
      "].join(""));i.after(n),function(a){var n=b(this),l="layui-anim-scaleSpring";a.on("click",function(){var e=n[0].name,t=n.parents(o),i=n.attr("lay-filter"),e=t.find("input[name="+e.replace(/(\.|#|\[|\])/g,"\\$1")+"]");n[0].disabled||(layui.each(e,function(){var e=b(this).next("."+r);this.checked=!1,e.removeClass(r+"ed"),e.find(".layui-icon").removeClass(l+" "+s[0]).addClass(s[1])}),n[0].checked=!0,a.addClass(r+"ed"),a.find(".layui-icon").addClass(l+" "+s[0]),layui.event.call(n[0],w,"radio("+i+")",{elem:n[0],value:n[0].value,othis:a}))})}.call(this,n)})}},t=function(){layui.each(n,function(e,t){t()})};return"object"===layui.type(e)?b(e).is(o)?(a=b(e),t()):e.each(function(e,t){var i=b(t);i.closest(o).length&&("SELECT"===t.tagName?n.select(i):"INPUT"===t.tagName&&("checkbox"===(t=t.type)||"radio"===t?n[t](i):n.input(i)))}):e?n[e]?n[e]():l.error('\u4e0d\u652f\u6301\u7684 "'+e+'" \u8868\u5355\u6e32\u67d3'):t(),this},t.prototype.validate=function(e){var u=null,d=this.config,f=d.verify,h="layui-form-danger";return!(e=b(e))[0]||(e.attr("lay-verify")!==undefined||!1!==this.validate(e.find("*[lay-verify]")))&&(layui.each(e,function(e,r){var s=b(this),t=(s.attr("lay-verify")||"").split("|"),o=s.attr("lay-vertype"),c=b.trim(s.val());if(s.removeClass(h),layui.each(t,function(e,t){var i="",a=f[t];if(a){var n="function"==typeof a?i=a(c,r):!a[0].test(c),l="select"===r.tagName.toLowerCase()||/^(checkbox|radio)$/.test(r.type),i=i||a[1];if("required"===t&&(i=s.attr("lay-reqtext")||i),n&&(d.verIncludelRequired||"required"===t||c&&"required"!==t))return"tips"===o?y.tips(i,"string"!=typeof s.attr("lay-ignore")&&l?s.next():s,{tips:1}):"alert"===o?y.alert(i,{title:"\u63d0\u793a",shadeClose:!0}):/\b(string|number)\b/.test(typeof i)&&y.msg(i,{icon:5,shift:6}),setTimeout(function(){(l?s.next().find("input"):r).focus()},7),s.addClass(h),u=!0}}),u)return u}),!u)},t.prototype.submit=function(e,t){var i=b(this),e="string"==typeof e?e:i.attr("lay-filter"),a=this.getFormElem?this.getFormElem(e):i.parents(o).eq(0),n=a.find("*[lay-verify]");if(!r.validate(n))return!1;n=r.getValue(null,a),a={elem:this.getFormElem?window.event&&window.event.target:this,form:(this.getFormElem?a:i.parents("form"))[0],field:n};return"function"==typeof t&&t(a),layui.event.call(this,w,"submit("+e+")",a)}),r=new t,t=b(document),F=b(window);b(function(){r.render()}),t.on("reset",o,function(){var e=b(this).attr("lay-filter");setTimeout(function(){r.render(null,e)},50)}),t.on("submit",o,i).on("click","*[lay-submit]",i),e(w,r)});layui.define(["lay","laytpl","laypage","form","util"],function(n){"use strict";var p=layui.$,r=layui.lay,m=layui.laytpl,z=layui.laypage,f=layui.layer,v=layui.form,g=layui.util,y=layui.hint(),b=layui.device(),x={config:{checkName:"LAY_CHECKED",indexName:"LAY_INDEX",numbersName:"LAY_NUM",disabledName:"LAY_DISABLED"},cache:{},index:layui.table?layui.table.index+1e4:0,set:function(e){var t=this;return t.config=p.extend({},t.config,e),t},on:function(e,t){return layui.onevent.call(this,T,e,t)}},k=function(){var a=this,e=a.config,i=e.id||e.index;return{config:e,reload:function(e,t){a.reload.call(a,e,t)},reloadData:function(e,t){x.reloadData(i,e,t)},setColsWidth:function(){a.setColsWidth.call(a)},resize:function(){a.resize.call(a)}}},C=function(e){var t=k.that[e];return t||y.error(e?"The table instance with ID '"+e+"' not found":"ID argument required"),t||null},l=function(e){var t=k.config[e];return t||y.error(e?"The table instance with ID '"+e+"' not found":"ID argument required"),t||null},w=function(e){var t=this.config||{},a=(e=e||{}).item3,i=e.content;"numbers"===a.type&&(i=e.tplData[x.config.numbersName]);("escape"in a?a:t).escape&&(i=g.escape(i));t=e.text&&a.exportTemplet||a.templet||a.toolbar;return t&&(i="function"==typeof t?t.call(a,e.tplData,e.obj):m(p(t).html()||String(i)).render(p.extend({LAY_COL:a},e.tplData))),e.text?p("
      "+i+"
      ").text():i},T="table",t=".layui-table",N="layui-hide",h="layui-hide-v",L="layui-none",R="layui-table-view",o=".layui-table-header",D=".layui-table-body",_=".layui-table-pageview",A=".layui-table-sort",E="layui-table-checked",W="layui-table-edit",j="layui-table-hover",H="laytable-cell-group",M="layui-table-col-special",S="layui-table-tool-panel",I="LAY_TABLE_MOVE_DICT",e=function(e){return['',"","{{# layui.each(d.data.cols, function(i1, item1){ }}","","{{# layui.each(item1, function(i2, item2){ }}",'{{# if(item2.fixed && item2.fixed !== "right"){ left = true; } }}','{{# if(item2.fixed === "right"){ right = true; } }}',(e=e||{}).fixed&&"right"!==e.fixed?'{{# if(item2.fixed && item2.fixed !== "right"){ }}':"right"===e.fixed?'{{# if(item2.fixed === "right"){ }}':"","{{# var isSort = !(item2.colGroup) && item2.sort; }}",'",e.fixed?"{{# }; }}":"","{{# }); }}","","{{# }); }}","","
      ','
      ','{{# if(item2.type === "checkbox"){ }}','',"{{# } else { }}",'{{-item2.title||""}}',"{{# if(isSort){ }}",'',"{{# } }}","{{# } }}","
      ","
      "].join("")},a=['',"","
      "].join(""),c=[,"{{# if(d.data.toolbar){ }}",'
      ','
      ','
      ',"
      ","{{# } }}",'
      ',"{{# if(d.data.loading){ }}",'
      ','',"
      ","{{# } }}","{{# var left, right; }}",'
      ',e(),"
      ",'
      ',a,"
      ","{{# if(left){ }}",'
      ','
      ',e({fixed:!0}),"
      ",'
      ',a,"
      ","
      ","{{# }; }}","{{# if(right){ }}",'
      ','
      ',e({fixed:"right"}),'
      ',"
      ",'
      ',a,"
      ","
      ","{{# }; }}","
      ","{{# if(d.data.totalRow){ }}",'
      ','','',"
      ","
      ","{{# } }}",'
      ','
      ',"
      ",""].join(""),O=p(window),P=p(document),i=function(e){this.index=++x.index,this.config=p.extend({},this.config,x.config,e),this.render()},d=(i.prototype.config={limit:10,loading:!0,escape:!0,cellMinWidth:60,cellMaxWidth:Number.MAX_VALUE,editTrigger:"click",defaultToolbar:["filter","exports","print"],defaultContextmenu:!0,autoSort:!0,text:{none:"\u65e0\u6570\u636e"},cols:[]},i.prototype.render=function(e){var t=this,a=t.config,i=(a.elem=p(a.elem),a.where=a.where||{},a.id="id"in a?a.id:a.elem.attr("id")||t.index);if(k.that[i]=t,(k.config[i]=a).request=p.extend({pageName:"page",limitName:"limit"},a.request),a.response=p.extend({statusName:"code",statusCode:0,msgName:"msg",dataName:"data",totalRowName:"totalRow",countName:"count"},a.response),null!==a.page&&"object"==typeof a.page&&(a.limit=a.page.limit||a.limit,a.limits=a.page.limits||a.limits,t.page=a.page.curr=a.page.curr||1,delete a.page.elem,delete a.page.jump),!a.elem[0])return t;if(a.elem.attr("lay-filter")||a.elem.attr("lay-filter",a.id),"reloadData"===e)return t.pullData(t.page,{type:"reloadData"});a.index=t.index,t.key=a.id||a.index,t.setInit(),a.height&&/^full-\d+$/.test(a.height)?(t.fullHeightGap=a.height.split("-")[1],a.height=O.height()-t.fullHeightGap):a.height&&/^#\w+\S*-\d+$/.test(a.height)&&(i=a.height.split("-"),t.parentHeightGap=i.pop(),t.parentDiv=i.join("-"),a.height=p(t.parentDiv).height()-t.parentHeightGap);var l,e=a.elem,i=e.next("."+R),n=t.elem=p("
      ");n.addClass((l=[R,R+"-"+t.index,"layui-form","layui-border-box"],a.className&&l.push(a.className),l.join(" "))).attr({"lay-filter":"LAY-TABLE-FORM-DF-"+t.index,"lay-id":a.id,style:(l=[],a.width&&l.push("width:"+a.width+"px;"),l.join(""))}).html(m(c,{open:"{{",close:"}}"}).render({data:a,index:t.index})),i[0]&&i.remove(),e.after(n),t.layTool=n.find(".layui-table-tool"),t.layBox=n.find(".layui-table-box"),t.layHeader=n.find(o),t.layMain=n.find(".layui-table-main"),t.layBody=n.find(D),t.layFixed=n.find(".layui-table-fixed"),t.layFixLeft=n.find(".layui-table-fixed-l"),t.layFixRight=n.find(".layui-table-fixed-r"),t.layTotal=n.find(".layui-table-total"),t.layPage=n.find(".layui-table-page"),t.renderToolbar(),t.renderPagebar(),t.fullSize(),t.pullData(t.page),t.events()},i.prototype.initOpts=function(e){this.config;e.checkbox&&(e.type="checkbox"),e.space&&(e.type="space"),e.type||(e.type="normal"),"normal"!==e.type&&(e.unresize=!0,e.width=e.width||{checkbox:50,radio:50,space:30,numbers:60}[e.type])},i.prototype.setInit=function(e){var l,a,d=this,r=d.config;if(r.clientWidth=r.width||(l=function(e){var t,a=(e=e||r.elem.parent()).width();try{t="none"===e.css("display")}catch(i){}return!e[0]||a&&!t?a:l(e.parent())})(),"width"===e)return r.clientWidth;r.height=r.maxHeight||r.height,r.css&&-1===r.css.indexOf(R)&&(a=r.css.split("}"),layui.each(a,function(e,t){t&&(a[e]="."+R+"-"+d.index+" "+t)}),r.css=a.join("}"));var c=function(a,e,i,l){var n,o;l?(l.key=[r.index,a,i].join("-"),l.colspan=l.colspan||0,l.rowspan=l.rowspan||0,d.initOpts(l),(n=a+(parseInt(l.rowspan)||1))
      ','
      ','
      '].join(""),a=this.layTool.find(".layui-table-tool-temp"),i=("default"===e.toolbar?a.html(t):"string"==typeof e.toolbar&&(t=p(e.toolbar).html()||"")&&a.html(m(t).render(e)),{filter:{title:"\u7b5b\u9009\u5217",layEvent:"LAYTABLE_COLS",icon:"layui-icon-cols"},exports:{title:"\u5bfc\u51fa",layEvent:"LAYTABLE_EXPORT",icon:"layui-icon-export"},print:{title:"\u6253\u5370",layEvent:"LAYTABLE_PRINT",icon:"layui-icon-print"}}),l=[];"object"==typeof e.defaultToolbar&&layui.each(e.defaultToolbar,function(e,t){t="string"==typeof t?i[t]:t;t&&l.push('
      ')}),this.layTool.find(".layui-table-tool-self").html(l.join(""))},i.prototype.renderPagebar=function(){var e,t=this.config,a=this.layPagebar=p('
      ');t.pagebar&&((e=p(t.pagebar).html()||"")&&a.append(m(e).render(t)),this.layPage.append(a))},i.prototype.setParentCol=function(e,t){var a=this.config,i=this.layHeader.find('th[data-key="'+t+'"]'),l=parseInt(i.attr("colspan"))||0;i[0]&&(t=t.split("-"),t=a.cols[t[1]][t[2]],e?l--:l++,i.attr("colspan",l),i[l?"removeClass":"addClass"](N),t.colspan2=l,t.hide=l<1,(a=i.data("parentkey"))&&this.setParentCol(e,a))},i.prototype.setColsPatch=function(){var a=this,e=a.config;layui.each(e.cols,function(e,t){layui.each(t,function(e,t){t.hide&&a.setParentCol(t.hide,t.parentKey)})})},i.prototype.setGroupWidth=function(i){var e,l=this;l.config.cols.length<=1||((e=l.layHeader.find((i?"th[data-key="+i.data("parentkey")+"]>":"")+"."+H)).css("width",0),layui.each(e.get().reverse(),function(){var e=p(this),t=e.parent().data("key"),a=0;l.layHeader.eq(0).find("th[data-parentkey="+t+"]").width(function(e,t){p(this).hasClass(N)||0 tr:first-child > th:last-child")).data("field")&&e.prev()[0]?t(e.prev()):e})()).data("key"),n.getCssRule(e,function(e){var t=e.style.width||a.outerWidth();e.style.width=parseFloat(t)+l+"px",0'+(e||"Error")+"
      ");a[0]&&(t.layNone.remove(),a.remove()),t.layFixed.addClass(N),t.layMain.find("tbody").html(""),t.layMain.append(t.layNone=e),t.layTotal.addClass(h),t.layPage.find(_).addClass(h),x.cache[t.key]=[],t.syncCheckAll(),t.renderForm(),t.setColsWidth()},i.prototype.page=1,i.prototype.pullData=function(a,t){var e,i,l=this,n=l.config,o=(n.HAS_SET_COLS_PATCH||l.setColsPatch(),n.HAS_SET_COLS_PATCH=!0,n.request),d=n.response,r=function(){"object"==typeof n.initSort&&l.sort({field:n.initSort.field,type:n.initSort.type,reloadType:t.type})},c=function(e,t){l.setColsWidth(),"function"==typeof n.done&&n.done(e,a,e[d.countName],t)};t=t||{},"function"==typeof n.before&&n.before(n),l.startTime=(new Date).getTime(),t.renderData?((e={})[d.dataName]=x.cache[l.key],e[d.countName]=n.url?"object"===layui.type(n.page)?n.page.count:e[d.dataName].length:n.data.length,"object"==typeof n.totalRow&&(e[d.totalRowName]=p.extend({},l.totalRow)),l.renderData({res:e,curr:a,count:e[d.countName],type:t.type}),r(),c(e,"renderData")):n.url?(i={},n.page&&(i[o.pageName]=a,i[o.limitName]=n.limit),o=p.extend(i,n.where),n.contentType&&0==n.contentType.indexOf("application/json")&&(o=JSON.stringify(o)),l.loading(),p.ajax({type:n.method||"get",url:n.url,contentType:n.contentType,data:o,dataType:n.dataType||"json",jsonpCallback:n.jsonpCallback,headers:n.headers||{},success:function(e){(e="function"==typeof n.parseData?n.parseData(e)||e:e)[d.statusName]!=d.statusCode?l.errorView(e[d.msgName]||'\u8fd4\u56de\u7684\u6570\u636e\u4e0d\u7b26\u5408\u89c4\u8303\uff0c\u6b63\u786e\u7684\u6210\u529f\u72b6\u6001\u7801\u5e94\u4e3a\uff1a"'+d.statusName+'": '+d.statusCode):(l.totalRow=e[d.totalRowName],l.renderData({res:e,curr:a,count:e[d.countName],type:t.type}),r(),n.time=(new Date).getTime()-l.startTime+" ms"),c(e)},error:function(e,t){l.errorView("\u8bf7\u6c42\u5f02\u5e38\uff0c\u9519\u8bef\u63d0\u793a\uff1a"+t),"function"==typeof n.error&&n.error(e,t)}})):"array"===layui.type(n.data)&&(e={},i=a*n.limit-n.limit,o=n.data.concat(),e[d.dataName]=n.page?o.splice(i,n.limit):o,e[d.countName]=n.data.length,"object"==typeof n.totalRow&&(e[d.totalRowName]=p.extend({},n.totalRow)),l.totalRow=e[d.totalRowName],l.renderData({res:e,curr:a,count:e[d.countName],type:t.type}),r(),c(e))},i.prototype.eachCols=function(e){return x.eachCols(null,e,this.config.cols),this},i.prototype.col=function(e){try{return e=e.split("-"),this.config.cols[e[1]][e[2]]||{}}catch(t){return y.error(t),{}}},i.prototype.getTrHtml=function(a,l,n,e){var s=this,u=s.config,y=e&&e.trs||[],h=e&&e.trs_fixed||[],f=e&&e.trs_fixed_r||[];return n=n||1,layui.each(a,function(e,o){var i=[],d=[],r=[],c=e+u.limit*(n-1)+1;if("object"!=typeof o){a[e]=o={LAY_KEY:o};try{x.cache[s.key][e]=o}catch(t){}}"array"===layui.type(o)&&0===o.length||(o[x.config.numbersName]=c,l||(o[x.config.indexName]=e),s.eachCols(function(e,l){var t,e=l.field||e,a=l.key,n=o[e];n!==undefined&&null!==n||(n=""),l.colGroup||(t=['','
      "+function(){var e,t=p.extend(!0,{LAY_COL:l},o),a=x.config.checkName,i=x.config.disabledName;switch(l.type){case"checkbox":return'';case"radio":return'';case"numbers":return c}return l.toolbar?m(p(l.toolbar).html()||"").render(t):w.call(s,{item3:l,content:n,tplData:t})}(),"
      "].join(""),i.push(t),l.fixed&&"right"!==l.fixed&&d.push(t),"right"===l.fixed&&r.push(t))}),e=['data-index="'+e+'"'],o[x.config.checkName]&&e.push('class="'+E+'"'),e=e.join(" "),y.push(""+i.join("")+""),h.push(""+d.join("")+""),f.push(""+r.join("")+""))}),{trs:y,trs_fixed:h,trs_fixed_r:f}},x.getTrHtml=function(e,t){e=C(e);return e.getTrHtml(t,null,e.page)},i.prototype.renderData=function(e){var a=this,i=a.config,t=e.res,l=e.curr,n=a.count=e.count,o=e.sort,d=t[i.response.dataName]||[],t=t[i.response.totalRowName],r=[],c=[],s=[],u=function(){if(!o&&a.sortKey)return a.sort({field:a.sortKey.field,type:a.sortKey.sort,pull:!0,reloadType:e.type});a.getTrHtml(d,o,l,{trs:r,trs_fixed:c,trs_fixed_r:s}),"fixed"===i.scrollPos&&"reloadData"===e.type||a.layBody.scrollTop(0),"reset"===i.scrollPos&&a.layBody.scrollLeft(0),a.layMain.find("."+L).remove(),a.layMain.find("tbody").html(r.join("")),a.layFixLeft.find("tbody").html(c.join("")),a.layFixRight.find("tbody").html(s.join("")),a.syncCheckAll(),a.renderForm(),a.fullSize(),a.haveInit?a.scrollPatch():setTimeout(function(){a.scrollPatch()},50),a.haveInit=!0,f.close(a.tipsIndex)};return x.cache[a.key]=d,a.layTotal[0==d.length?"addClass":"removeClass"](h),a.layPage[i.page||i.pagebar?"removeClass":"addClass"](N),a.layPage.find(_)[!i.page||0==n||0===d.length&&1==l?"addClass":"removeClass"](h),0===d.length?a.errorView(i.text.none):(a.layFixLeft.removeClass(N),o?u():(u(),a.renderTotal(d,t),a.layTotal&&a.layTotal.removeClass(N),void(i.page&&(i.page=p.extend({elem:"layui-table-page"+i.index,count:n,limit:i.limit,limits:i.limits||[10,20,30,40,50,60,70,80,90],groups:3,layout:["prev","page","next","skip","count","limit"],prev:'',next:'',jump:function(e,t){t||(a.page=e.curr,i.limit=e.limit,a.pullData(e.curr))}},i.page),i.page.count=n,z.render(i.page)))))},x.renderData=function(e){e=C(e);e&&e.pullData(e.page,{renderData:!0,type:"reloadData"})},i.prototype.renderTotal=function(e,o){var d,r=this,c=r.config,s={};c.totalRow&&(layui.each(e,function(e,i){"array"===layui.type(i)&&0===i.length||r.eachCols(function(e,t){var e=t.field||e,a=i[e];t.totalRow&&(s[e]=(s[e]||0)+(parseFloat(a)||0))})}),r.dataTotal=[],d=[],r.eachCols(function(e,t){var a,e=t.field||e,i=o&&o[t.field],l="totalRowDecimals"in t?t.totalRowDecimals:2,l=s[e]?parseFloat(s[e]||0).toFixed(l):"",l=(a=t.totalRowText||"",(n={LAY_COL:t})[e]=l,n=t.totalRow&&w.call(r,{item3:t,content:l,tplData:n})||a,i||n),n=(t.field&&r.dataTotal.push({field:t.field,total:p("
      "+l+"
      ").text()}),['','
      "+("string"==typeof(a=t.totalRow||c.totalRow)?m(a).render(p.extend({TOTAL_NUMS:i||s[e],TOTAL_ROW:o||{},LAY_COL:t},t)):l),"
      "].join(""));d.push(n)}),e=r.layTotal.find(".layui-table-patch"),r.layTotal.find("tbody").html(""+d.join("")+(e.length?e.get(0).outerHTML:"")+""))},i.prototype.getColElem=function(e,t){this.config;return e.eq(0).find(".laytable-cell-"+t+":eq(0)")},i.prototype.renderForm=function(e){this.config;var t=this.elem.attr("lay-filter");v.render(e,t)},i.prototype.syncCheckAll=function(){var a,e=this,i=e.config,t=e.layHeader.find('input[name="layTableCheckbox"]'),l=x.checkStatus(e.key);t[0]&&(a=l.isAll,e.eachCols(function(e,t){"checkbox"===t.type&&(t[i.checkName]=a)}),t.prop({checked:l.isAll,indeterminate:!l.isAll&&l.data.length}),v.render(t))},i.prototype.setRowActive=function(e,t){this.config;this.layBody.find('tr[data-index="'+e+'"]').addClass(t=t||"layui-table-click").siblings("tr").removeClass(t)},i.prototype.setRowChecked=function(a){var e=this,i=e.config,l=e.layBody.find("tr"+("all"===a.index?"":'[data-index="'+a.index+'"]')),t=(a=p.extend({type:"checkbox"},a),x.cache[e.key]),n="checked"in a,o=function(e){return"radio"===a.type||(n?a.checked:!e)},t=(layui.each(t,function(e,t){"array"!==layui.type(t)&&(Number(a.index)===e||"all"===a.index?(e=t[i.checkName]=o(t[i.checkName]),l[e?"addClass":"removeClass"](E),"radio"===a.type&&l.siblings().removeClass(E)):"radio"===a.type&&delete t[i.checkName])}),l.find('input[lay-type="'+({radio:"layTableRadio",checkbox:"layTableCheckbox"}[a.type]||"checkbox")+'"]'));t.prop("checked",o(t.last().prop("checked"))),e.syncCheckAll(),e.renderForm(a.type)},i.prototype.sort=function(l){var e,t=this,a={},i=t.config,n=i.elem.attr("lay-filter"),o=x.cache[t.key];"string"==typeof(l=l||{}).field&&(d=l.field,t.layHeader.find("th").each(function(e,t){var a=p(this),i=a.data("field");if(i===l.field)return l.field=a,d=i,!1}));try{var d=d||l.field.data("field"),r=l.field.data("key");if(t.sortKey&&!l.pull&&d===t.sortKey.field&&l.type===t.sortKey.sort)return;var c=t.layHeader.find("th .laytable-cell-"+r).find(A);t.layHeader.find("th").find(A).removeAttr("lay-sort"),c.attr("lay-sort",l.type||null),t.layFixed.find("th")}catch(s){y.error("Table modules: sort field '"+d+"' not matched")}t.sortKey={field:d,sort:l.type},i.autoSort&&("asc"===l.type?e=layui.sort(o,d,null,!0):"desc"===l.type?e=layui.sort(o,d,!0,!0):(e=layui.sort(o,x.config.indexName,null,!0),delete t.sortKey,delete i.initSort)),a[i.response.dataName]=e||o,t.renderData({res:a,curr:t.page,count:t.count,sort:!0,type:l.reloadType}),l.fromEvent&&(i.initSort={field:d,type:l.type},layui.event.call(l.field,T,"sort("+n+")",p.extend({config:i},i.initSort)))},i.prototype.loading=function(e){var t=this;t.config.loading&&(e?(t.layInit&&t.layInit.remove(),delete t.layInit,t.layBox.find(".layui-table-init").remove()):(t.layInit=p(['
      ','',"
      "].join("")),t.layBox.append(t.layInit)))},i.prototype.getCssRule=function(a,i){var e=this.elem.find("style")[0],e=e.sheet||e.styleSheet||{},e=e.cssRules||e.rules;layui.each(e,function(e,t){if(t.selectorText===".laytable-cell-"+a)return i(t),!0})},i.prototype.fullSize=function(){var e,a,i=this,t=i.config,l=t.height;i.fullHeightGap?(l=O.height()-i.fullHeightGap)<135&&(l=135):i.parentDiv&&i.parentHeightGap&&(l=p(i.parentDiv).height()-i.parentHeightGap)<135&&(l=135),1
      ')).find("div").css({width:a}),e.find("tr").append(t)):e.find(".layui-table-patch").remove()};n(e.layHeader),n(e.layTotal);n=e.layMain.height()-i;e.layFixed.find(D).css("height",t.height()>=n?n:"auto"),e.layFixRight[x.cache[e.key]&&x.cache[e.key].length&&0');a.html(t),u.height&&a.css("max-height",u.height-(s.layTool.outerHeight()||50)),i.find("."+S)[0]||i.append(a),s.renderForm(),a.on("click",function(e){layui.stope(e)}),e.done&&e.done(a,t)};switch(layui.stope(e),P.trigger("table.tool.panel.remove"),f.close(s.tipsIndex),t){case"LAYTABLE_COLS":l({list:(a=[],s.eachCols(function(e,t){t.field&&"normal"==t.type&&a.push('
    • "+(t.fieldTitle||t.title||t.field)+"
    • ").text())+'" lay-filter="LAY_TABLE_TOOL_COLS">')}),a.join("")),done:function(){v.on("checkbox(LAY_TABLE_TOOL_COLS)",function(e){var e=p(e.elem),t=this.checked,a=e.data("key"),i=s.col(a),l=i.hide,e=e.data("parentkey");i.key&&(i.hide=!t,s.elem.find('*[data-key="'+a+'"]')[t?"removeClass":"addClass"](N),l!=i.hide&&s.setParentCol(!t,e),s.resize(),layui.event.call(this,T,"colToggled("+r+")",{col:i,config:u}))})}});break;case"LAYTABLE_EXPORT":b.ie?f.tips("\u5bfc\u51fa\u529f\u80fd\u4e0d\u652f\u6301 IE\uff0c\u8bf7\u7528 Chrome \u7b49\u9ad8\u7ea7\u6d4f\u89c8\u5668\u5bfc\u51fa",this,{tips:3}):l({list:['
    • \u5bfc\u51fa csv \u683c\u5f0f\u6587\u4ef6
    • ','
    • \u5bfc\u51fa xls \u683c\u5f0f\u6587\u4ef6
    • '].join(""),done:function(e,t){t.on("click",function(){var e=p(this).data("type");x.exportFile.call(s,u.id,null,e)})}});break;case"LAYTABLE_PRINT":var n=window.open("about:blank","_blank"),o=[""].join(""),d=p(s.layHeader.html());d.append(s.layMain.find("table").html()),d.append(s.layTotal.find("table").html()),d.find("th.layui-table-patch").remove(),d.find("thead>tr>th."+M).filter(function(e,t){return!p(t).children("."+H).length}).remove(),d.find("tbody>tr>td."+M).remove(),n.document.write(o+d.prop("outerHTML")),n.document.close(),layui.device("edg").edg?(n.onafterprint=n.close,n.print()):(n.print(),n.close())}layui.event.call(this,T,"toolbar("+r+")",p.extend({event:t,config:u},{}))}),s.layHeader.on("click","*[lay-event]",function(e){var t=p(this),a=t.attr("lay-event"),t=t.closest("th").data("key"),t=s.col(t);layui.event.call(this,T,"colTool("+r+")",p.extend({event:a,config:u,col:t},{}))}),s.layPagebar.on("click","*[lay-event]",function(e){var t=p(this).attr("lay-event");layui.event.call(this,T,"pagebar("+r+")",p.extend({event:t,config:u},{}))}),e.on("mousemove",function(e){var t=p(this),a=t.offset().left,e=e.clientX-a;t.data("unresize")||k.eventMoveElem||(d.allowResize=t.width()-e<=10,o.css("cursor",d.allowResize?"col-resize":""))}).on("mouseleave",function(){p(this);k.eventMoveElem||o.css("cursor","")}).on("mousedown",function(e){var t,a=p(this);d.allowResize&&(t=a.data("key"),e.preventDefault(),d.offset=[e.clientX,e.clientY],s.getCssRule(t,function(e){var t=e.style.width||a.outerWidth();d.rule=e,d.ruleWidth=parseFloat(t),d.minWidth=a.data("minwidth")||u.cellMinWidth,d.maxWidth=a.data("maxwidth")||u.cellMaxWidth}),a.data(I,d),k.eventMoveElem=a)}),k.docEvent||P.on("mousemove",function(e){var t,a;k.eventMoveElem&&(t=k.eventMoveElem.data(I)||{},k.eventMoveElem.data("resizing",1),e.preventDefault(),t.rule&&(e=t.ruleWidth+e.clientX-t.offset[0],a=k.eventMoveElem.closest("."+R).attr("lay-id"),(a=C(a))&&((e=et.maxWidth&&(e=t.maxWidth),t.rule.style.width=e+"px",a.setGroupWidth(k.eventMoveElem),f.close(s.tipsIndex))))}).on("mouseup",function(e){var t,a,i,l,n;k.eventMoveElem&&(i=(t=k.eventMoveElem).closest("."+R).attr("lay-id"),(a=C(i))&&(i=t.data("key"),l=a.col(i),n=a.config.elem.attr("lay-filter"),d={},o.css("cursor",""),a.scrollPatch(),t.removeData(I),delete k.eventMoveElem,a.getCssRule(i,function(e){l.width=parseFloat(e.style.width),layui.event.call(t[0],T,"colResized("+n+")",{col:l,config:a.config})})))}),k.docEvent=!0,e.on("click",function(e){var t=p(this),a=t.find(A),i=a.attr("lay-sort");if(!a[0]||1===t.data("resizing"))return t.removeData("resizing");s.sort({field:t,type:"asc"===i?"desc":"desc"===i?null:"asc",fromEvent:!0})}).find(A+" .layui-edge ").on("click",function(e){var t=p(this),a=t.index(),t=t.parents("th").eq(0).data("field");layui.stope(e),0===a?s.sort({field:t,type:"asc",fromEvent:!0}):s.sort({field:t,type:"desc",fromEvent:!0})}),s.commonMember=function(e){var t=p(this).parents("tr").eq(0).data("index"),r=s.layBody.find('tr[data-index="'+t+'"]'),c=(c=x.cache[s.key]||[])[t]||{},a={tr:r,config:u,data:x.clearCacheKey(c),dataCache:c,index:t,del:function(){x.cache[s.key][t]=[],r.remove(),s.scrollPatch()},update:function(e,d){e=e||{},layui.each(e,function(i,l){var n=r.children('td[data-field="'+i+'"]'),o=n.children(y);c[i]=a.data[i]=l,s.eachCols(function(e,t){var a;t.field==i?(o.html(w.call(s,{item3:t,content:l,tplData:p.extend({LAY_COL:t},c)})),n.data("content",l)):d&&(t.templet||t.toolbar)&&(e=r.children('td[data-field="'+(t.field||e)+'"]'),a=c[t.field],e.children(y).html(w.call(s,{item3:t,content:a,tplData:p.extend({LAY_COL:t},c)})),e.data("content",a))})}),s.renderForm()},setRowChecked:function(e){s.setRowChecked(p.extend({index:t},e))}};return p.extend(a,e)}),a=(s.elem.on("click",'input[name="layTableCheckbox"]+',function(e){var t=p(this),a=t.closest("td"),t=t.prev(),i=(s.layBody.find('input[name="layTableCheckbox"]'),t.parents("tr").eq(0).data("index")),l=t[0].checked,n="layTableAllChoose"===t.attr("lay-filter");t[0].disabled||(n?s.setRowChecked({index:"all",checked:l}):(s.setRowChecked({index:i,checked:l}),layui.stope(e)),layui.event.call(t[0],T,"checkbox("+r+")",c.call(t[0],{checked:l,type:n?"all":"one",getCol:function(){return s.col(a.data("key"))}})))}),s.elem.on("click",'input[lay-type="layTableRadio"]+',function(e){var t=p(this),a=t.closest("td"),t=t.prev(),i=t[0].checked,l=t.parents("tr").eq(0).data("index");if(layui.stope(e),t[0].disabled)return!1;s.setRowChecked({type:"radio",index:l}),layui.event.call(t[0],T,"radio("+r+")",c.call(t[0],{checked:i,getCol:function(){return s.col(a.data("key"))}}))}),s.layBody.on("mouseenter","tr",function(){var e=p(this),t=e.index();e.data("off")||s.layBody.find("tr:eq("+t+")").addClass(j)}).on("mouseleave","tr",function(){var e=p(this),t=e.index();e.data("off")||s.layBody.find("tr:eq("+t+")").removeClass(j)}).on("click","tr",function(e){var t=".layui-form-checkbox,.layui-form-switch,.layui-form-radio,[lay-unrow]";p(e.target).is(t)||p(e.target).closest(t)[0]||a.call(this,"row")}).on("dblclick","tr",function(){a.call(this,"rowDouble")}).on("contextmenu","tr",function(e){u.defaultContextmenu||e.preventDefault(),a.call(this,"rowContextmenu")}),function(e){var t=p(this);t.data("off")||layui.event.call(this,T,e+"("+r+")",c.call(t.children("td")[0]))}),n=function(e,t){var a,i,l,n;(e=p(e)).data("off")||(a=e.data("field"),n=e.data("key"),n=s.col(n),i=e.closest("tr").data("index"),i=x.cache[s.key][i],l=e.children(y),(n="function"==typeof n.edit?n.edit(i):n.edit)&&((n=p("textarea"===n?'':''))[0].value=e.data("content")||i[a]||l.text(),e.find("."+W)[0]||e.append(n),n.focus(),t&&layui.stope(t)))},i=(s.layBody.on("change","."+W,function(){var e=p(this),t=e.parent(),a=this.value,i=e.parent().data("field"),e=e.closest("tr").data("index"),e=x.cache[s.key][e],l=c.call(t[0],{value:a,field:i,oldValue:e[i],td:t,reedit:function(){setTimeout(function(){n(l.td);var e={};e[i]=l.oldValue,l.update(e)})},getCol:function(){return s.col(t.data("key"))}}),e={};e[i]=a,l.update(e),layui.event.call(t[0],T,"edit("+r+")",l)}).on("blur","."+W,function(){p(this).remove()}),s.layBody.on(u.editTrigger,"td",function(e){n(this,e)}).on("mouseenter","td",function(){t.call(this)}).on("mouseleave","td",function(){t.call(this,"hide")}),s.layTotal.on("mouseenter","td",function(){t.call(this)}).on("mouseleave","td",function(){t.call(this,"hide")}),"layui-table-grid-down"),t=function(e){var t=p(this),a=t.children(y);t.data("off")||(e?t.find(".layui-table-grid-down").remove():!(a.prop("scrollWidth")>a.outerWidth()||0'))},l=function(e){var t=p(this).parent().children(y);s.tipsIndex=f.tips(['
      ',t.html(),"
      ",''].join(""),t[0],{tips:[3,""],time:-1,anim:-1,maxWidth:b.ios||b.android?300:s.elem.width()/2,isOutAnim:!1,skin:"layui-table-tips",success:function(e,t){e.find(".layui-table-tips-c").on("click",function(){f.close(t)})}}),layui.stope(e)},h=(s.layBody.on("click","."+i,function(e){l.call(this,e)}),s.layTotal.on("click","."+i,function(e){l.call(this,e)}),function(e){var t=p(this),a=t.closest("td"),i=t.parents("tr").eq(0).data("index");s.setRowActive(i),layui.event.call(this,T,(e||"tool")+"("+r+")",c.call(this,{event:t.attr("lay-event"),getCol:function(){return s.col(a.data("key"))}}))});s.layBody.on("click","*[lay-event]",function(e){h.call(this),layui.stope(e)}).on("dblclick","*[lay-event]",function(e){h.call(this,"toolDouble"),layui.stope(e)}),s.layMain.on("scroll",function(){var e=p(this),t=e.scrollLeft(),e=e.scrollTop();s.layHeader.scrollLeft(t),s.layTotal.scrollLeft(t),s.layFixed.find(D).scrollTop(e),f.close(s.tipsIndex)}),O.on("resize",function(){s.resize()})},P.on("click",function(){P.trigger("table.remove.tool.panel")}),P.on("table.remove.tool.panel",function(){p("."+S).remove()}),x.init=function(i,o){o=o||{};var e="object"==typeof i?i:p("string"==typeof i?'table[lay-filter="'+i+'"]':t+"[lay-data], "+t+"[lay-options]"),d="Table element property lay-data configuration item has a syntax error: ";return e.each(function(){var l,e=p(this),t=e.attr("lay-data"),t=r.options(this,{attr:t?"lay-data":null,errorText:d+(t||e.attr("lay-options"))}),n=p.extend({elem:this,cols:[],data:[],skin:e.attr("lay-skin"),size:e.attr("lay-size"),even:"string"==typeof e.attr("lay-even")},x.config,o,t),a=(i&&e.hide(),e.find("thead>tr").each(function(i){n.cols[i]=[],p(this).children().each(function(e){var t=p(this),a=t.attr("lay-data"),a=r.options(this,{attr:a?"lay-data":null,errorText:d+(a||t.attr("lay-options"))}),t=p.extend({title:t.text(),colspan:parseInt(t.attr("colspan"))||0,rowspan:parseInt(t.attr("rowspan"))||0},a);n.cols[i].push(t)})}),e.find("tbody>tr")),t=x.render(n);!a.length||o.data||t.config.url||(l=0,x.eachCols(t.config.id,function(e,i){a.each(function(e){n.data[e]=n.data[e]||{};var t=p(this),a=i.field;n.data[e][a]=t.children("td").eq(l).html()}),l++}),t.reloadData({data:n.data}))}),this},k.that={},k.config={},function(a,i,e,l){var n,o;l.colGroup&&(n=0,a++,l.CHILD_COLS=[],o=e+(parseInt(l.rowspan)||1),layui.each(i[o],function(e,t){t.parentKey?t.parentKey===l.key&&(t.PARENT_COL_INDEX=a,l.CHILD_COLS.push(t),d(a,i,o,t)):t.PARENT_COL_INDEX||1<=n&&n==(l.colspan||1)||(t.PARENT_COL_INDEX=a,l.CHILD_COLS.push(t),n+=parseInt(1td').filter('[data-field="'+e+'"]')}}})).replace(/"/g,'""'),n.push(a='"'+a+'"')))}),d.push(n.join(","))}),c&&layui.each(c.dataTotal,function(e,t){r[t.field]||i.push(t.total)}),o.join(",")+"\r\n"+d.join("\r\n")+"\r\n"+i.join(","))),u.download=(a.title||n.title||"table_"+(n.index||""))+"."+l,document.body.appendChild(u),u.click(),document.body.removeChild(u)},x.getOptions=l,x.hideCol=function(e,l){var n=C(e);n&&("boolean"===layui.type(l)?n.eachCols(function(e,t){var a=t.key,i=n.col(a),t=t.parentKey;i.hide!=l&&(i=i.hide=l,n.elem.find('*[data-key="'+a+'"]')[i?"addClass":"removeClass"](N),n.setParentCol(i,t))}):(l=layui.isArray(l)?l:[l],layui.each(l,function(e,l){n.eachCols(function(e,t){var a,i;l.field===t.field&&(a=t.key,i=n.col(a),t=t.parentKey,"hide"in l&&i.hide!=l.hide&&(i=i.hide=!!l.hide,n.elem.find('*[data-key="'+a+'"]')[i?"addClass":"removeClass"](N),n.setParentCol(i,t)))})})),p("."+S).remove(),n.resize())},x.reload=function(e,t,a,i){if(l(e))return e=C(e),e.reload(t,a,i),k.call(e)},x.reloadData=function(){var a=p.extend([],arguments),i=(a[3]="reloadData",new RegExp("^("+["elem","id","cols","width","height","maxHeight","toolbar","defaultToolbar","className","css","totalRow","pagebar"].join("|")+")$"));return layui.each(a[1],function(e,t){i.test(e)&&delete a[1][e]}),x.reload.apply(null,a)},x.render=function(e){e=new i(e);return k.call(e)},x.clearCacheKey=function(e){return delete(e=p.extend({},e))[x.config.checkName],delete e[x.config.indexName],delete e[x.config.numbersName],delete e[x.config.disabledName],e},p(function(){x.init()}),n(T,x)});layui.define(["table"],function(e){"use strict";var B=layui.$,x=layui.form,j=layui.table,y=layui.hint(),P={config:{},on:j.on,eachCols:j.eachCols,index:j.index,set:function(e){var t=this;return t.config=B.extend({},t.config,e),t},resize:j.resize,getOptions:j.getOptions,hideCol:j.hideCol,renderData:j.renderData},i=function(){var a=this,e=a.config,n=e.id||e.index;return{config:e,reload:function(e,t){a.reload.call(a,e,t)},reloadData:function(e,t){P.reloadData(n,e,t)}}},F=function(e){var t=i.that[e];return t||y.error(e?"The treeTable instance with ID '"+e+"' not found":"ID argument required"),t||null},q="layui-hide",L=".layui-table-main",Y=".layui-table-fixed-l",R=".layui-table-fixed-r",h="layui-table-tree",H="LAY_DATA_INDEX",m="LAY_DATA_INDEX_HISTORY",f="LAY_PARENT_INDEX",b="LAY_CHECKBOX_HALF",X="LAY_EXPAND",z="LAY_HAS_EXPANDED",V="LAY_ASYNC_STATUS",t=function(e){var t=this;t.index=++P.index,t.config=B.extend(!0,{},t.config,P.config,e),t.init(),t.render()},u=function(n,i,e){var l=j.cache[n];layui.each(e||l,function(e,t){var a=t[H];-1!==a.indexOf("-")&&(l[a]=t),t[i]&&u(n,i,t[i])})},l=function(i,a,e){var l=F(i),t=("reloadData"!==e&&(l.status={expand:{}}),B.extend(!0,{},l.getOptions(),a)),n=t.tree,r=n.customName.children,d=n.customName.id,o=(delete a.hasNumberCol,delete a.hasChecboxCol,delete a.hasRadioCol,j.eachCols(null,function(e,t){"numbers"===t.type?a.hasNumberCol=!0:"checkbox"===t.type?a.hasChecboxCol=!0:"radio"===t.type&&(a.hasRadioCol=!0)},t.cols),a.parseData),c=a.done;t.url?e&&(!o||o.mod)||(a.parseData=function(){var e=this,t=arguments,a=t[0],t=("function"===layui.type(o)&&(a=o.apply(e,t)||t[0]),e.response.dataName);return n.data.isSimpleData&&!n["async"].enable&&(a[t]=l.flatToTree(a[t])),s(a[t],function(e){e[X]=X in e?e[X]:e[d]!==undefined&&l.status.expand[e[d]]},r),e.autoSort&&e.initSort&&e.initSort.type&&layui.sort(a[t],e.initSort.field,"desc"===e.initSort.type,!0),l.initData(a[t]),a},a.parseData.mod=!0):(a.data=a.data||[],n.data.isSimpleData&&(a.data=l.flatToTree(a.data)),l.initData(a.data)),e&&(!c||c.mod)||(a.done=function(){var e,t=arguments,a=(t[3]||delete l.isExpandAll,this.elem.next()),n=(l.updateStatus(null,{LAY_HAS_EXPANDED:!1}),u(i,r),a.find('[name="layTableCheckbox"][lay-filter="layTableAllChoose"]'));if(n.length&&(e=P.checkStatus(i),n.prop({checked:e.isAll&&e.data.length,indeterminate:!e.isAll&&e.data.length})),l.renderTreeTable(a),"function"===layui.type(c))return c.apply(this,t)},a.done.mod=!0)};t.prototype.init=function(){var e=this.config,t=j.render(B.extend({},e,{data:[],url:"",done:null})),a=t.config.id;(i.that[a]=this).tableIns=t,l(a,e)},t.prototype.config={tree:{customName:{children:"children",isParent:"isParent",name:"name",id:"id",pid:"parentId",icon:"icon"},view:{indent:14,flexIconClose:'',flexIconOpen:'',showIcon:!0,icon:"",iconClose:'',iconOpen:'',iconLeaf:'',showFlexIconIfNotParent:!1,dblClickExpand:!0,expandAllDefault:!1},data:{isSimpleData:!1,rootPid:null},"async":{enable:!1,url:"",type:null,contentType:null,headers:null,where:null,autoParam:[]},callback:{beforeExpand:null,onExpand:null}}},t.prototype.getOptions=function(){return this.tableIns?j.getOptions(this.tableIns.config.id):this.config},t.prototype.flatToTree=function(e){var a,n,i,t,l,r,d,o=this.getOptions(),c=o.tree,u=c.customName,o=o.id;return e=e||j.cache[o],o=e,a=u.id,n=u.pid,i=u.children,t=c.data.rootPid,a=a||"id",n=n||"parentId",i=i||"children",d={},layui.each(o,function(e,t){l=a+t[a],d[l]=B.extend({},t),d[l][i]=[]}),layui.each(d,function(e,t){(r=a+t[n])&&d[r]&&d[r][i].push(t)}),Object.values(d).filter(function(e){return t?e[n]===t:!e[n]})},t.prototype.treeToFlat=function(e,n,i){var l=this,r=l.getOptions().tree.customName,d=r.children,o=r.pid,c=[];return layui.each(e,function(e,t){var e=(i?i+"-":"")+e,a=B.extend({},t);a[d]=null,a[o]=t[o]||n,c.push(a),c=c.concat(l.treeToFlat(t[d],t[r.id],e))}),c},t.prototype.getTreeNode=function(e){var t=this;if(!e)return y.error("\u627e\u4e0d\u5230\u8282\u70b9\u6570\u636e");var a=t.getOptions(),n=a.tree;a.id,n.customName;return{data:e,dataIndex:e[H],getParentNode:function(){return t.getNodeByIndex(e[f])}}},t.prototype.getNodeByIndex=function(t){var e=this,a=e.getNodeDataByIndex(t);if(!a)return y.error("\u627e\u4e0d\u5230\u8282\u70b9\u6570\u636e");var n=e.getOptions(),i=(n.tree.customName.parent,n.id),n={data:a,dataIndex:a[H],getParentNode:function(){return e.getNodeByIndex(a[f])},update:function(e){return P.updateNode(i,t,e)},remove:function(){return P.removeNode(i,t)},expand:function(e){return P.expandNode(i,B.extend({},e,{index:t}))},setChecked:function(e){return P.setRowChecked(i,B.extend({},e,{index:t}))}};return n.dataIndex=t,n},t.prototype.getNodeById=function(a){var e=this.getOptions(),n=e.tree.customName.id,i="",e=P.getData(e.id,!0);if(layui.each(e,function(e,t){if(t[n]===a)return i=t[H],!0}),i)return this.getNodeByIndex(i)},t.prototype.getNodeDataByIndex=function(a,e,t){var n=this.getOptions(),i=n.tree,l=n.id,r=j.cache[l][a];if("delete"!==t&&r)return B.extend(r,t),e?B.extend({},r):r;for(var r=this.getTableData(),d=(a+="").split("-"),o=r,c=n.url||1');var D=function(e){y[V]="success",y[f.children]=e,c.initData(y[f.children],y[H]),J(t,!0,!p&&n,i,l)},T=b.format;if("function"===layui.type(T))return T(y,o,D),h;var _=B.extend({},b.where||o.where),T=b.autoParam,T=(layui.each(T,function(e,t){t=t.split("=");_[t[0].trim()]=y[(t[1]||t[0]).trim()]}),b.contentType||o.contentType),k=(T&&0==T.indexOf("application/json")&&(_=JSON.stringify(_)),b.method||o.method),O=b.dataType||o.dataType,w=b.jsonpCallback||o.jsonpCallback,S=b.headers||o.headers,A=b.parseData||o.parseData,E=b.response||o.response;return B.ajax({type:k||"get",url:C,contentType:T,data:_,dataType:O||"json",jsonpCallback:w,headers:S||{},success:function(e){(e="function"==typeof A?A.call(o,e)||e:e)[E.statusName]!=E.statusCode?(y[V]="error",g.html('')):D(e[E.dataName])},error:function(e,t){y[V]="error","function"==typeof o.error&&o.error(e,t)}}),h}m=y[z]=!0,v.length&&(!o.initSort||o.url&&!o.autoSort||((b=o.initSort).type?layui.sort(v,b.field,"desc"===b.type,!0):layui.sort(v,j.config.indexName,null,!0)),c.initData(y[f.children],y[H]),k=j.getTrHtml(d,v,null,null,e),N={trs:B(k.trs.join("")),trs_fixed:B(k.trs_fixed.join("")),trs_fixed_r:B(k.trs_fixed_r.join(""))},I=(e.split("-").length-1||0)+1,layui.each(v,function(e,t){N.trs.eq(e).attr({"data-index":t[H],"lay-data-index":t[H],"data-level":I}),N.trs_fixed.eq(e).attr({"data-index":t[H],"lay-data-index":t[H],"data-level":I}),N.trs_fixed_r.eq(e).attr({"data-index":t[H],"lay-data-index":t[H],"data-level":I})}),r.find(L).find('tbody tr[lay-data-index="'+e+'"]').after(N.trs),r.find(Y).find('tbody tr[lay-data-index="'+e+'"]').after(N.trs_fixed),r.find(R).find('tbody tr[lay-data-index="'+e+'"]').after(N.trs_fixed_r),c.renderTreeTable(N.trs,I),n&&!p&&layui.each(v,function(e,t){J({dataIndex:t[H],trElem:r.find('tr[lay-data-index="'+t[H]+'"]').first(),tableViewElem:r,tableId:d,options:o},a,n,i,l)}))}else c.isExpandAll=!1,n&&!p?(layui.each(v,function(e,t){J({dataIndex:t[H],trElem:r.find('tr[lay-data-index="'+t[H]+'"]').first(),tableViewElem:r,tableId:d,options:o},a,n,i,l)}),r.find(v.map(function(e,t,a){return'tr[lay-data-index="'+e[H]+'"]'}).join(",")).addClass(q)):(C=c.treeToFlat(v,y[f.id],e),r.find(C.map(function(e,t,a){return'tr[lay-data-index="'+e[H]+'"]'}).join(",")).addClass(q));return U("resize-"+d,function(){P.resize(d)},0)(),l&&"loading"!==y[V]&&(T=u.callback.onExpand,"function"===layui.type(T)&&T(d,y,x)),h},g=(P.expandNode=function(e,t){var a,n,i,e=F(e);if(e)return a=(t=t||{}).index,n=t.expandFlag,i=t.inherit,t=t.callbackFlag,e=e.getOptions().elem.next(),J({trElem:e.find('tr[lay-data-index="'+a+'"]').first()},n,i,null,t)},P.expandAll=function(a,e){if("boolean"!==layui.type(e))return y.error("expandAll \u7684\u5c55\u5f00\u72b6\u6001\u53c2\u6570\u53ea\u63a5\u6536true/false");var t=F(a);if(t){t.isExpandAll=e;var n=t.getOptions(),i=n.tree,l=n.elem.next(),r=i.customName.isParent,d=i.customName.id,o=i.view.showFlexIconIfNotParent;if(e){e=P.getData(a,!0);if(i["async"].enable){var c=!0;if(layui.each(e,function(e,t){if(t[r]&&!t[V])return!(c=!1)}),!c)return void layui.each(P.getData(a),function(e,t){P.expandNode(a,{index:t[H],expandFlag:!0,inherit:!0})})}var u=!0;if(layui.each(e,function(e,t){if(t[r]&&!t[z])return!(u=!1)}),u)t.updateStatus(null,function(e){(e[r]||o)&&(e[X]=!0,e[d]!==undefined&&(t.status.expand[e[d]]=!0))}),l.find('tbody tr[data-level!="0"]').removeClass(q),l.find(".layui-table-tree-flexIcon").html(i.view.flexIconOpen),i.view.showIcon&&l.find(".layui-table-tree-nodeIcon:not(.layui-table-tree-iconCustom,.layui-table-tree-iconLeaf)").html(i.view.iconOpen);else{if(t.updateStatus(null,function(e){(e[r]||o)&&(e[X]=!0,e[z]=!0,e[d]!==undefined&&(t.status.expand[e[d]]=!0))}),n.initSort&&n.initSort.type&&(!n.url||n.autoSort))return P.sort(a);var f,n=j.getTrHtml(a,e),s={trs:B(n.trs.join("")),trs_fixed:B(n.trs_fixed.join("")),trs_fixed_r:B(n.trs_fixed_r.join(""))};layui.each(e,function(e,t){var a=t[H].split("-").length-1;f={"data-index":t[H],"lay-data-index":t[H],"data-level":a},s.trs.eq(e).attr(f),s.trs_fixed.eq(e).attr(f),s.trs_fixed_r.eq(e).attr(f)}),layui.each(["main","fixed-l","fixed-r"],function(e,t){l.find(".layui-table-"+t+" tbody").html(s[["trs","trs_fixed","trs_fixed_r"][e]])}),t.renderTreeTable(l,0,!1)}}else t.updateStatus(null,function(e){(e[r]||o)&&(e[X]=!1,e[d]!==undefined&&(t.status.expand[e[d]]=!1))}),l.find('.layui-table-box tbody tr[data-level!="0"]').addClass(q),l.find(".layui-table-tree-flexIcon").html(i.view.flexIconClose),i.view.showIcon&&l.find(".layui-table-tree-nodeIcon:not(.layui-table-tree-iconCustom,.layui-table-tree-iconLeaf)").html(i.view.iconClose);P.resize(a)}},t.prototype.renderTreeTable=function(e,t,a){var n=this,i=n.getOptions(),l=i.elem.next(),r=(l.hasClass(h)||l.addClass(h),i.id),d=i.tree||{},o=(d.data,d.view||{}),c=d.customName||{},u=c.isParent,f=(l.attr("lay-filter"),n),s=((t=t||0)||(l.find(".layui-table-body tr:not([data-level])").attr("data-level",t),layui.each(j.cache[r],function(e,t){l.find('.layui-table-main tbody tr[data-level="0"]:eq('+e+")").attr("lay-data-index",t[H]),l.find('.layui-table-fixed-l tbody tr[data-level="0"]:eq('+e+")").attr("lay-data-index",t[H]),l.find('.layui-table-fixed-r tbody tr[data-level="0"]:eq('+e+")").attr("lay-data-index",t[H])})),null),y=c.name,p=o.indent||14;if(layui.each(e.find('td[data-field="'+y+'"]'),function(e,t){var a,n,i=(t=B(t)).closest("tr"),t=t.children(".layui-table-cell");t.hasClass("layui-table-tree-item")||(n=i.attr("lay-data-index"))&&(i=l.find('tr[lay-data-index="'+n+'"]'),(a=f.getNodeDataByIndex(n))[X]&&a[u]&&((s=s||{})[n]=!0),a[b]&&i.find('input[type="checkbox"][name="layTableCheckbox"]').prop("indeterminate",!0),n=t.html(),(t=i.find('td[data-field="'+y+'"]>div.layui-table-cell')).addClass("layui-table-tree-item"),t.html(['
      ',a[X]?o.flexIconOpen:o.flexIconClose,"
      ",o.showIcon?'
      '+(a[c.icon]||o.icon||(a[u]?a[X]?o.iconOpen:o.iconClose:o.iconLeaf)||"")+"
      ":"",n].join("")).find(".layui-table-tree-flexIcon").on("click",function(e){layui.stope(e),J({trElem:i},null,null,null,!0)}))}),!t&&d.view.expandAllDefault&&n.isExpandAll===undefined)return P.expandAll(r,!0);!1!==a&&s?layui.each(s,function(e,t){e=l.find('tr[lay-data-index="'+e+'"]');e.find(".layui-table-tree-flexIcon").html(o.flexIconOpen),J({trElem:e.first()},!0)}):U("renderTreeTable-"+r,function(){i.hasNumberCol&&g(n),x.render(B('.layui-table-tree[lay-id="'+r+'"]'))},0)()},function(a){var e=a.getOptions(),t=e.elem.next(),n=0,i=t.find(".layui-table-main tbody tr"),l=t.find(".layui-table-fixed-l tbody tr"),r=t.find(".layui-table-fixed-r tbody tr");layui.each(a.treeToFlat(j.cache[e.id]),function(e,t){a.getNodeDataByIndex(t[H]).LAY_NUM=++n,i.eq(e).find(".laytable-cell-numbers").html(n),l.eq(e).find(".laytable-cell-numbers").html(n),r.eq(e).find(".laytable-cell-numbers").html(n)})}),s=(t.prototype.render=function(e){var t=this;t.tableIns=j["reloadData"===e?"reloadData":"reload"](t.tableIns.config.id,B.extend(!0,{},t.config)),t.config=t.tableIns.config},t.prototype.reload=function(e,t,a){var n=this;e=e||{},delete n.haveInit,layui.each(e,function(e,t){"array"===layui.type(t)&&delete n.config[e]}),l(n.getOptions().id,e,a||!0),n.config=B.extend(t,{},n.config,e),n.render(a)},P.reloadData=function(){var e=B.extend(!0,[],arguments);return e[3]="reloadData",P.reload.apply(null,e)},function(e,a,n){var i=[];return layui.each(e,function(e,t){"function"===layui.type(a)?a(t):B.extend(t,a),i.push(B.extend({},t)),i=i.concat(s(t[n],a,n))}),i}),r=(t.prototype.updateStatus=function(e,t){var a=this.getOptions(),n=a.tree;return e=e||j.cache[a.id],s(e,t,n.customName.children)},t.prototype.getTableData=function(){var e=this.getOptions();return e.url?j.cache[e.id]:e.data},P.updateStatus=function(e,t,a){var e=F(e),n=e.getOptions();return a=a||(n.url?j.cache[n.id]:n.data),e.updateStatus(a,t)},P.sort=function(e){var t,a=F(e);!a||(t=a.getOptions()).url&&!t.autoSort||(a.initData(),P.renderData(e))},function(n){var t=n.config.id,i=F(t),a=n.data=P.getNodeDataByIndex(t,n.index),l=a[H],r=(n.dataIndex=l,n.update);n.update=function(){var e=arguments,t=(B.extend(i.getNodeDataByIndex(l),e[0]),r.apply(this,e)),a=n.config.tree.customName.name;return a in e[0]&&n.tr.find('td[data-field="'+a+'"]').children("div.layui-table-cell").removeClass("layui-table-tree-item"),i.renderTreeTable(n.tr,n.tr.attr("data-level"),!1),t},n.del=function(){P.removeNode(t,a)},n.setRowChecked=function(e){P.setRowChecked(t,{index:a,checked:e})}}),o=(P.updateNode=function(e,a,t){var n,i,l,r,d,o=F(e);o&&((r=o.getOptions()).tree,r=(n=r.elem.next()).find('tr[lay-data-index="'+a+'"]'),i=r.attr("data-index"),l=r.attr("data-level"),t&&(r=o.getNodeDataByIndex(a,!1,t),d=j.getTrHtml(e,[r]),layui.each(["main","fixed-l","fixed-r"],function(e,t){n.find(".layui-table-"+t+' tbody tr[lay-data-index="'+a+'"]').replaceWith(B(d[["trs","trs_fixed","trs_fixed_r"][e]].join("")).attr({"data-index":i,"lay-data-index":a,"data-level":l}))}),o.renderTreeTable(n.find('tr[lay-data-index="'+a+'"]'),l)))},P.removeNode=function(e,t){var a,n,i,l,r,d=F(e);d&&(r=(a=d.getOptions()).tree,n=a.elem.next(),i=[],t=d.getNodeDataByIndex("string"===layui.type(t)?t:t[H],!1,"delete"),l=d.getNodeDataByIndex(t[f]),d.updateCheckStatus(l),l=d.treeToFlat([t],t[r.customName.pid],t[f]),layui.each(l,function(e,t){i.push('tr[lay-data-index="'+t[H]+'"]')}),n.find(i.join(",")).remove(),r=d.initData(),layui.each(d.treeToFlat(r),function(e,t){t[m]&&t[m]!==t[H]&&n.find('tr[lay-data-index="'+t[m]+'"]').attr({"data-index":t[H],"lay-data-index":t[H]})}),layui.each(j.cache[e],function(e,t){n.find('tr[data-level="0"][lay-data-index="'+t[H]+'"]').attr("data-index",e)}),a.hasNumberCol&&g(d))},P.addNodes=function(e,t){var a=F(e);if(a){var n=a.getOptions(),i=n.tree,l=n.elem.next(),r=(t=t||{}).parentIndex,d=t.index,o=t.data,t=t.focus,c=(r="number"===layui.type(r)?r.toString():r)?a.getNodeDataByIndex(r):null,d="number"===layui.type(d)?d:-1,o=B.extend(!0,[],layui.isArray(o)?o:[o]);a.getTableData();if(c){var u=i.customName.isParent,f=i.customName.children;c[u]=!0;var s=(s=c[f])?(y=s.splice(-1===d?s.length:d),c[f]=s.concat(o,y)):c[f]=o,f=(a.updateStatus(s,function(e){(e[u]||i.view.showFlexIconIfNotParent)&&(e[z]=!1)}),a.treeToFlat(s));l.find(f.map(function(e){return'tr[lay-data-index="'+e[H]+'"]'}).join(",")).remove(),a.initData(),c[z]=!1,c[V]="local",J({trElem:l.find('tr[lay-data-index="'+r+'"]')},!0)}else{var y=j.cache[e].splice(-1===d?j.cache[e].length:d);if(j.cache[e]=j.cache[e].concat(o,y),n.url||(n.page?(s=n.page,n.data.splice.apply(n.data,[s.limit*(s.curr-1),s.limit].concat(j.cache[e]))):n.data=j.cache[e]),a.initData(),l.find(".layui-none").length)return j.renderData(e),o;var p,f=j.getTrHtml(e,o),x={trs:B(f.trs.join("")),trs_fixed:B(f.trs_fixed.join("")),trs_fixed_r:B(f.trs_fixed_r.join(""))},r=(layui.each(o,function(e,t){p={"data-index":t[H],"lay-data-index":t[H],"data-level":"0"},x.trs.eq(e).attr(p),x.trs_fixed.eq(e).attr(p),x.trs_fixed_r.eq(e).attr(p)}),parseInt(o[0][H])-1),s=l.find(L),n=l.find(Y),f=l.find(R);-1==r?(s.find('tr[data-level="0"][data-index="0"]').before(x.trs),n.find('tr[data-level="0"][data-index="0"]').before(x.trs_fixed),f.find('tr[data-level="0"][data-index="0"]').before(x.trs_fixed_r)):-1===d?(s.find("tbody").append(x.trs),n.find("tbody").append(x.trs_fixed),f.find("tbody").append(x.trs_fixed_r)):(r=y[0][m],s.find('tr[data-level="0"][data-index="'+r+'"]').before(x.trs),n.find('tr[data-level="0"][data-index="'+r+'"]').before(x.trs_fixed),f.find('tr[data-level="0"][data-index="'+r+'"]').before(x.trs_fixed_r)),layui.each(j.cache[e],function(e,t){l.find('tr[data-level="0"][lay-data-index="'+t[H]+'"]').attr("data-index",e)}),a.renderTreeTable(l.find(o.map(function(e,t,a){return'tr[lay-data-index="'+e[H]+'"]'}).join(",")))}return a.updateCheckStatus(c),P.resize(e),t&&l.find(L).find('tr[lay-data-index="'+o[0][H]+'"]').get(0).scrollIntoViewIfNeeded(),o}},P.checkStatus=function(e,n){var i,t,a;if(F(e))return i=j.config.checkName,t=P.getData(e,!0).filter(function(e,t,a){return e[i]||n&&e[b]}),a=!0,layui.each(j.cache[e],function(e,t){if(!t[i])return!(a=!1)}),{data:t,isAll:a}},P.on("sort",function(e){var e=e.config,t=e.elem.next(),e=e.id;t.hasClass(h)&&P.sort(e)}),P.on("row",function(e){e.config.elem.next().hasClass(h)&&r(e)}),P.on("rowDouble",function(e){var t=e.config,a=t.elem.next();t.id;a.hasClass(h)&&(r(e),(t.tree||{}).view.dblClickExpand&&J({trElem:e.tr.first()},null,null,null,!0))}),P.on("rowContextmenu",function(e){var t=e.config,a=t.elem.next();t.id;a.hasClass(h)&&r(e)}),P.on("tool",function(e){var t=e.config,a=t.elem.next();t.id;a.hasClass(h)&&r(e)}),P.on("edit",function(e){var t=e.config,a=t.elem.next();t.id;a.hasClass(h)&&(r(e),e.field===t.tree.customName.name&&((a={})[e.field]=e.value,e.update(a)))}),P.on("radio",function(e){var t=e.config,a=t.elem.next(),t=t.id;a.hasClass(h)&&(a=F(t),r(e),o.call(a,e.tr,e.checked))}),t.prototype.updateCheckStatus=function(e,t){var a=this.getOptions(),n=(a.tree,a.id),i=a.elem.next(),l=j.config.checkName,r=(e&&(a=this.updateParentCheckStatus(e,"boolean"===layui.type(t)?t:null),layui.each(a,function(e,t){x.render(i.find('tr[lay-data-index="'+t[H]+'"] input[name="layTableCheckbox"]:not(:disabled)').prop({checked:t[l],indeterminate:t[b]}))})),!0),d=!1;return layui.each(j.cache[n],function(e,t){(t[l]||t[b])&&(d=!0),t[l]||(r=!1)}),d=d&&!r,x.render(i.find('input[name="layTableCheckbox"][lay-filter="layTableAllChoose"]').prop({checked:r,indeterminate:d})),r},t.prototype.updateParentCheckStatus=function(a,n){var i,e=this.getOptions(),t=e.tree,e=e.id,l=j.config.checkName,t=t.customName.children,r=[];return!(a[b]=!1)===n?a[t].length?layui.each(a[t],function(e,t){if(!t[l])return n=!1,a[b]=!0}):n=!1:!1===n?layui.each(a[t],function(e,t){if(t[l]||t[b])return a[b]=!0}):(n=!1,i=0,layui.each(a[t],function(e,t){t[l]&&i++}),n=a[t].length?a[t].length===i:a[l],a[b]=!n&&0')),a=(e.tree(n),i.elem=u(i.elem));if(a[0]){if(e.key=i.id||e.index,e.elem=n,e.elemNone=u('
      '+i.text.none+"
      "),a.html(e.elem),0==e.elem.find(".layui-tree-set").length)return e.elem.append(e.elemNone);i.showCheckbox&&e.renderForm("checkbox"),e.elem.find(".layui-tree-set").each(function(){var e=u(this);e.parent(".layui-tree-pack")[0]||e.addClass("layui-tree-setHide"),!e.next()[0]&&e.parents(".layui-tree-pack").eq(1).hasClass("layui-tree-lineExtend")&&e.addClass(N),e.next()[0]||e.parents(".layui-tree-set").eq(0).next()[0]||e.addClass(N)}),e.events()}},l.prototype.renderForm=function(e){i.render(e,"LAY-tree-"+this.index)},l.prototype.tree=function(l,e){var r=this,c=r.config,e=e||c.data;layui.each(e,function(e,i){var n=i.children&&0"),t=u(['
      ','
      ','
      ',c.showLine?n?'':'':'',c.showCheckbox?'':"",c.isJump&&i.href?''+(i.title||i.label||c.text.defaultNodeName)+"":''+(i.title||i.label||c.text.defaultNodeName)+"","
      ",function(){if(!c.edit)return"";var n={add:'',update:'',del:''},a=['
      '];return!0===c.edit&&(c.edit=["update","del"]),"object"==typeof c.edit?(layui.each(c.edit,function(e,i){a.push(n[i]||"")}),a.join("")+"
      "):void 0}(),"
      "].join(""));n&&(t.append(a),r.tree(a,i.children)),l.append(t),t.prev("."+f)[0]&&t.prev().children(".layui-tree-pack").addClass("layui-tree-showLine"),n||t.parent(".layui-tree-pack").addClass("layui-tree-lineExtend"),r.spread(t,i),c.showCheckbox&&(i.checked&&r.checkids.push(i.id),r.checkClick(t,i)),c.edit&&r.operate(t,i)})},l.prototype.spread=function(a,e){var t=this.config,i=a.children("."+m),n=i.children("."+x),l=i.find("."+C),i=i.find("."+b),r=t.onlyIconControl?l:n,c="";r.on("click",function(e){var i=a.children("."+g),n=(r.children(".layui-icon")[0]?r:r.find(".layui-tree-icon")).children(".layui-icon");i[0]?a.hasClass(w)?(a.removeClass(w),i.slideUp(200),n.removeClass(v).addClass(k)):(a.addClass(w),i.slideDown(200),n.addClass(v).removeClass(k),t.accordion&&((i=a.siblings("."+f)).removeClass(w),i.children("."+g).slideUp(200),i.find(".layui-tree-icon").children(".layui-icon").removeClass(v).addClass(k))):c="normal"}),i.on("click",function(){u(this).hasClass(d)||(c=a.hasClass(w)?t.onlyIconControl?"open":"close":t.onlyIconControl?"close":"open",t.click&&t.click({elem:a,state:c,data:e}))})},l.prototype.setCheckbox=function(e,i,n){this.config;var t,l=n.prop("checked");n.prop("disabled")||("object"!=typeof i.children&&!e.find("."+g)[0]||e.find("."+g).find('input[same="layuiTreeCheck"]').each(function(){this.disabled||(this.checked=l)}),(t=function(e){var i,n,a;e.parents("."+f)[0]&&(n=(e=e.parent("."+g)).parent(),a=e.prev().find('input[same="layuiTreeCheck"]'),l?a.prop("checked",l):(e.find('input[same="layuiTreeCheck"]').each(function(){this.checked&&(i=!0)}),i||a.prop("checked",!1)),t(n))})(e),this.renderForm("checkbox"))},l.prototype.checkClick=function(n,a){var t=this,l=t.config;n.children("."+m).children("."+x).on("click",'input[same="layuiTreeCheck"]+',function(e){layui.stope(e);var e=u(this).prev(),i=e.prop("checked");e.prop("disabled")||(t.setCheckbox(n,a,e),l.oncheck&&l.oncheck({elem:n,checked:i,data:a}))})},l.prototype.operate=function(c,d){var s=this,o=s.config,e=c.children("."+m),h=e.children("."+x);e.children(".layui-tree-btnGroup").on("click",".layui-icon",function(e){layui.stope(e);var i,e=u(this).data("type"),a=c.children("."+g),t={data:d,type:e,elem:c};if("add"==e){a[0]||(o.showLine?(h.find("."+C).addClass("layui-tree-icon"),h.find("."+C).children(".layui-icon").addClass(k).removeClass("layui-icon-file")):h.find(".layui-tree-iconArrow").removeClass(y),c.append('
      '));var n,l=o.operate&&o.operate(t),r={};if(r.title=o.text.defaultNodeName,r.id=l,s.tree(c.children("."+g),[r]),o.showLine&&(a[0]?(a.hasClass(L)||a.addClass(L),c.find("."+g).each(function(){u(this).children("."+f).last().addClass(N)}),(a.children("."+f).last().prev().hasClass(N)?a.children("."+f).last().prev():a.children("."+f).last()).removeClass(N),!c.parent("."+g)[0]&&c.next()[0]&&a.children("."+f).last().removeClass(N)):(l=c.siblings("."+f),n=1,r=c.parent("."+g),layui.each(l,function(e,i){u(i).children("."+g)[0]||(n=0)}),1==n?(l.children("."+g).addClass(T),l.children("."+g).children("."+f).removeClass(N),c.children("."+g).addClass(T),r.removeClass(L),r.children("."+f).last().children("."+g).children("."+f).last().addClass(N)):c.children("."+g).children("."+f).addClass(N))),!o.showCheckbox)return;h.find('input[same="layuiTreeCheck"]')[0].checked&&(c.children("."+g).children("."+f).last().find('input[same="layuiTreeCheck"]')[0].checked=!0),s.renderForm("checkbox")}else"update"==e?(l=h.children("."+b).html(),h.children("."+b).html(""),h.append(''),h.children(".layui-tree-editInput").val(l).focus(),i=function(e){var i=(i=e.val().trim())||o.text.defaultNodeName;e.remove(),h.children("."+b).html(i),t.data.title=i,o.operate&&o.operate(t)},h.children(".layui-tree-editInput").blur(function(){i(u(this))}),h.children(".layui-tree-editInput").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),i(u(this)))})):p.confirm('\u786e\u8ba4\u5220\u9664\u8be5\u8282\u70b9 "'+(d.title||"")+'" \u5417\uff1f',function(e){if(o.operate&&o.operate(t),t.status="remove",p.close(e),!c.prev("."+f)[0]&&!c.next("."+f)[0]&&!c.parent("."+g)[0])return c.remove(),void s.elem.append(s.elemNone);var l,n,i;c.siblings("."+f).children("."+m)[0]?(o.showCheckbox&&(l=function(e){var i,n,a,t;e.parents("."+f)[0]&&(i=e.siblings("."+f).children("."+m),n=(e=e.parent("."+g).prev()).find('input[same="layuiTreeCheck"]')[0],a=1,(t=0)==n.checked&&(i.each(function(e,i){i=u(i).find('input[same="layuiTreeCheck"]')[0];0!=i.checked||i.disabled||(a=0),i.disabled||(t=1)}),1==a&&1==t&&(n.checked=!0,s.renderForm("checkbox"),l(e.parent("."+f)))))})(c),o.showLine&&(e=c.siblings("."+f),n=1,i=c.parent("."+g),layui.each(e,function(e,i){u(i).children("."+g)[0]||(n=0)}),1==n?(a[0]||(i.removeClass(L),e.children("."+g).addClass(T),e.children("."+g).children("."+f).removeClass(N)),(c.next()[0]?i.children("."+f).last():c.prev()).children("."+g).children("."+f).last().addClass(N),c.next()[0]||c.parents("."+f)[1]||c.parents("."+f).eq(0).next()[0]||c.prev("."+f).addClass(N)):!c.next()[0]&&c.hasClass(N)&&c.prev().addClass(N))):(e=c.parent("."+g).prev(),o.showLine?(e.find("."+C).removeClass("layui-tree-icon"),e.find("."+C).children(".layui-icon").removeClass(v).addClass("layui-icon-file"),(i=e.parents("."+g).eq(0)).addClass(L),i.children("."+f).each(function(){u(this).children("."+g).children("."+f).last().addClass(N)})):e.find(".layui-tree-iconArrow").addClass(y),c.parents("."+f).eq(0).removeClass(w),c.parent("."+g).remove()),c.remove()})})},l.prototype.events=function(){var i=this,t=i.config;i.elem.find(".layui-tree-checkedFirst");i.setChecked(i.checkids),i.elem.find(".layui-tree-search").on("keyup",function(){var e=u(this),n=e.val(),e=e.nextAll(),a=[];e.find("."+b).each(function(){var i,e=u(this).parents("."+m);-1!=u(this).html().indexOf(n)&&(a.push(u(this).parent()),(i=function(e){e.addClass("layui-tree-searchShow"),e.parent("."+g)[0]&&i(e.parent("."+g).parent("."+f))})(e.parent("."+f)))}),e.find("."+m).each(function(){var e=u(this).parent("."+f);e.hasClass("layui-tree-searchShow")||e.addClass(y)}),0==e.find(".layui-tree-searchShow").length&&i.elem.append(i.elemNone),t.onsearch&&t.onsearch({elem:a})}),i.elem.find(".layui-tree-search").on("keydown",function(){u(this).nextAll().find("."+m).each(function(){u(this).parent("."+f).removeClass("layui-tree-searchShow "+y)}),u(".layui-tree-emptyText")[0]&&u(".layui-tree-emptyText").remove()})},l.prototype.getChecked=function(){var e=this.config,i=[],n=[],t=(this.elem.find(".layui-form-checked").each(function(){i.push(u(this).prev()[0].value)}),function(e,a){layui.each(e,function(e,n){layui.each(i,function(e,i){if(n.id==i)return delete(i=u.extend({},n)).children,a.push(i),n.children&&(i.children=[],t(n.children,i.children)),!0})})});return t(u.extend({},e.data),n),n},l.prototype.setChecked=function(l){this.config;this.elem.find("."+f).each(function(e,i){var n=u(this).data("id"),a=u(i).children("."+m).find('input[same="layuiTreeCheck"]'),t=a.next();if("number"==typeof l){if(n.toString()==l.toString())return a[0].checked||t.click(),!1}else"object"==typeof l&&layui.each(l,function(e,i){if(i.toString()==n.toString()&&!a[0].checked)return t.click(),!0})})},t.that={},t.config={},a.reload=function(e,i){e=t.that[e];return e.reload(i),t.call(e)},a.getChecked=function(e){return t.that[e].getChecked()},a.setChecked=function(e,i){return t.that[e].setChecked(i)},a.render=function(e){e=new l(e);return t.call(e)},e(n,a)});layui.define(["laytpl","form"],function(e){"use strict";var s=layui.$,n=layui.laytpl,t=layui.form,a="transfer",i={config:{},index:layui[a]?layui[a].index+1e4:0,set:function(e){var t=this;return t.config=s.extend({},t.config,e),t},on:function(e,t){return layui.onevent.call(this,a,e,t)}},l=function(){var t=this,e=t.config,a=e.id||t.index;return l.that[a]=t,{config:l.config[a]=e,reload:function(e){t.reload.call(t,e)},getData:function(){return t.getData.call(t)}}},d="layui-hide",h="layui-btn-disabled",r="layui-none",c="layui-transfer-box",u="layui-transfer-header",o="layui-transfer-search",f="layui-transfer-data",y=function(e){return['
      ','
      ','","
      ","{{# if(d.data.showSearch){ }}",'","{{# } }}",'
        ',"
        "].join("")},p=['
        ',y({index:0,checkAllName:"layTransferLeftCheckAll"}),'
        ','",'","
        ",y({index:1,checkAllName:"layTransferRightCheckAll"}),"
        "].join(""),v=function(e){var t=this;t.index=++i.index,t.config=s.extend({},t.config,i.config,e),t.render()};v.prototype.config={title:["\u5217\u8868\u4e00","\u5217\u8868\u4e8c"],width:200,height:360,data:[],value:[],showSearch:!1,id:"",text:{none:"\u65e0\u6570\u636e",searchNone:"\u65e0\u5339\u914d\u6570\u636e"}},v.prototype.reload=function(e){var t=this;t.config=s.extend({},t.config,e),t.render()},v.prototype.render=function(){var e=this,t=e.config,a=e.elem=s(n(p,{open:"{{",close:"}}"}).render({data:t,index:e.index})),i=t.elem=s(t.elem);i[0]&&(t.data=t.data||[],t.value=t.value||[],t.id="id"in t?t.id:elem.attr("id")||e.index,e.key=t.id,i.html(e.elem),e.layBox=e.elem.find("."+c),e.layHeader=e.elem.find("."+u),e.laySearch=e.elem.find("."+o),e.layData=a.find("."+f),e.layBtn=a.find(".layui-transfer-active .layui-btn"),e.layBox.css({width:t.width,height:t.height}),e.layData.css({height:(i=t.height-e.layHeader.outerHeight(),t.showSearch&&(i-=e.laySearch.outerHeight()),i-2)}),e.renderData(),e.events())},v.prototype.renderData=function(){var e=this,t=e.config,l=[{checkName:"layTransferLeftCheck",views:[]},{checkName:"layTransferRightCheck",views:[]}];e.parseData(function(a){var i=a.selected?1:0,n=["
      • ",'',"
      • "].join("");i?layui.each(t.value,function(e,t){t==a.value&&a.selected&&(l[i].views[e]=n)}):l[i].views.push(n),delete a.selected}),e.layData.eq(0).html(l[0].views.join("")),e.layData.eq(1).html(l[1].views.join("")),e.renderCheckBtn()},v.prototype.renderForm=function(e){t.render(e,"LAY-transfer-"+this.index)},v.prototype.renderCheckBtn=function(r){var c=this,o=c.config;r=r||{},c.layBox.each(function(e){var t=s(this),a=t.find("."+f),t=t.find("."+u).find('input[type="checkbox"]'),i=a.find('input[type="checkbox"]'),n=0,l=!1;i.each(function(){var e=s(this).data("hide");(this.checked||this.disabled||e)&&n++,this.checked&&!e&&(l=!0)}),t.prop("checked",l&&n===i.length),c.layBtn.eq(e)[l?"removeClass":"addClass"](h),r.stopNone||(i=a.children("li:not(."+d+")").length,c.noneView(a,i?"":o.text.none))}),c.renderForm("checkbox")},v.prototype.noneView=function(e,t){var a=s('

        '+(t||"")+"

        ");e.find("."+r)[0]&&e.find("."+r).remove(),t.replace(/\s/g,"")&&e.append(a)},v.prototype.setValue=function(){var e=this.config,t=[];return this.layBox.eq(1).find("."+f+' input[type="checkbox"]').each(function(){s(this).data("hide")||t.push(this.value)}),e.value=t,this},v.prototype.parseData=function(t){var i=this.config,n=[];return layui.each(i.data,function(e,a){a=("function"==typeof i.parseData?i.parseData(a):a)||a,n.push(a=s.extend({},a)),layui.each(i.value,function(e,t){t==a.value&&(a.selected=!0)}),t&&t(a)}),i.data=n,this},v.prototype.getData=function(e){var t=this.config,i=[];return this.setValue(),layui.each(e||t.value,function(e,a){layui.each(t.data,function(e,t){delete t.selected,a==t.value&&i.push(t)})}),i},v.prototype.transfer=function(e,t){var a,i=this,n=i.config,l=i.layBox.eq(e),r=[],t=(t?((a=(t=t).find('input[type="checkbox"]'))[0].checked=!1,l.siblings("."+c).find("."+f).append(t.clone()),t.remove(),r.push(a[0].value),i.setValue()):l.each(function(e){s(this).find("."+f).children("li").each(function(){var e=s(this),t=e.find('input[type="checkbox"]'),a=t.data("hide");t[0].checked&&!a&&(t[0].checked=!1,l.siblings("."+c).find("."+f).append(e.clone()),e.remove(),r.push(t[0].value)),i.setValue()})}),i.renderCheckBtn(),l.siblings("."+c).find("."+o+" input"));""!==t.val()&&t.trigger("keyup"),n.onchange&&n.onchange(i.getData(r),e)},v.prototype.events=function(){var n=this,l=n.config;n.elem.on("click",'input[lay-filter="layTransferCheckbox"]+',function(){var e=s(this).prev(),t=e[0].checked,a=e.parents("."+c).eq(0).find("."+f);e[0].disabled||("all"===e.attr("lay-type")&&a.find('input[type="checkbox"]').each(function(){this.disabled||(this.checked=t)}),setTimeout(function(){n.renderCheckBtn({stopNone:!0})},0))}),n.elem.on("dblclick","."+f+">li",function(e){var t=s(this),a=t.children('input[type="checkbox"]'),i=t.parent().parent();a[0].disabled||n.transfer(i.data("index"),t)}),n.layBtn.on("click",function(){var e=s(this),t=e.data("index");e.hasClass(h)||n.transfer(t)}),n.laySearch.find("input").on("keyup",function(){var i=this.value,e=s(this).parents("."+o).eq(0).siblings("."+f),t=e.children("li"),t=(t.each(function(){var e=s(this),t=e.find('input[type="checkbox"]'),a=t[0].title,a=("cs"!==l.showSearch&&(a=a.toLowerCase(),i=i.toLowerCase()),-1!==a.indexOf(i));e[a?"removeClass":"addClass"](d),t.data("hide",!a)}),n.renderCheckBtn(),t.length===e.children("li."+d).length);n.noneView(e,t?l.text.searchNone:"")})},l.that={},l.config={},i.reload=function(e,t){e=l.that[e];return e.reload(t),l.call(e)},i.getData=function(e){return l.that[e].getData()},i.render=function(e){e=new v(e);return l.call(e)},e(a,i)});layui.define(["jquery","lay"],function(e){"use strict";var a=layui.$,t=layui.lay,o=(layui.hint(),layui.device(),{config:{},set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,i){return layui.onevent.call(this,r,e,i)}}),r="carousel",d="layui-this",s="layui-carousel-left",u="layui-carousel-right",c="layui-carousel-prev",m="layui-carousel-next",l="layui-carousel-arrow",f="layui-carousel-ind",i=function(e){var i=this;i.config=a.extend({},i.config,o.config,e),i.render()};i.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},i.prototype.render=function(){var e=this,i=e.config,n=a(i.elem);if(1*[carousel-item]>*"),i.index<0&&(i.index=0),i.index>=e.elemItem.length&&(i.index=e.elemItem.length-1),i.interval<800&&(i.interval=800),i.full?i.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):i.elem.css({width:i.width,height:i.height}),i.elem.attr("lay-anim",i.anim),e.elemItem.eq(i.index).addClass(d),e.elemItem.length<=1||(e.indicator(),e.arrow(),e.autoplay(),e.events()))},i.prototype.reload=function(e){var i=this;clearInterval(i.timer),i.config=a.extend({},i.config,e),i.render()},i.prototype.prevIndex=function(){var e=this.config.index-1;return e=e<0?this.elemItem.length-1:e},i.prototype.nextIndex=function(){var e=this.config.index+1;return e=e>=this.elemItem.length?0:e},i.prototype.addIndex=function(e){var i=this.config;i.index=i.index+(e=e||1),i.index>=this.elemItem.length&&(i.index=0)},i.prototype.subIndex=function(e){var i=this.config;i.index=i.index-(e=e||1),i.index<0&&(i.index=this.elemItem.length-1)},i.prototype.autoplay=function(){var e=this,i=e.config;i.autoplay&&(clearInterval(e.timer),e.timer=setInterval(function(){e.slide()},i.interval))},i.prototype.arrow=function(){var i=this,e=i.config,n=a(['",'"].join(""));e.elem.attr("lay-arrow",e.arrow),e.elem.find("."+l)[0]&&e.elem.find("."+l).remove(),e.elem.append(n),n.on("click",function(){var e=a(this).attr("lay-type");i.slide(e)})},i.prototype["goto"]=function(e){var i=this,n=i.config;e>n.index?i.slide("add",e-n.index):e
          ',(i=[],layui.each(e.elemItem,function(e){i.push("")}),i.join("")),"
        "].join(""));n.elem.attr("lay-indicator",n.indicator),n.elem.find("."+f)[0]&&n.elem.find("."+f).remove(),n.elem.append(t),"updown"===n.anim&&t.css("margin-top",-t.height()/2),t.find("li").on("hover"===n.trigger?"mouseover":n.trigger,function(){e["goto"](a(this).index())})},i.prototype.slide=function(e,i){var n=this,t=n.elemItem,a=n.config,o=a.index,l=a.elem.attr("lay-filter");n.haveSlide||("sub"===e?(n.subIndex(i),t.eq(a.index).addClass(c),setTimeout(function(){t.eq(o).addClass(u),t.eq(a.index).addClass(u)},50)):(n.addIndex(i),t.eq(a.index).addClass(m),setTimeout(function(){t.eq(o).addClass(s),t.eq(a.index).addClass(s)},50)),setTimeout(function(){t.removeClass(d+" "+c+" "+m+" "+s+" "+u),t.eq(a.index).addClass(d),n.haveSlide=!1},300),n.elemInd.find("li").eq(a.index).addClass(d).siblings().removeClass(d),n.haveSlide=!0,e={index:a.index,prevIndex:o,item:t.eq(a.index)},"function"==typeof a.change&&a.change(e),layui.event.call(this,r,"change("+l+")",e))},i.prototype.events=function(){var e=this,i=e.config;i.elem.data("haveEvents")||(i.elem.on("mouseenter",function(){"always"!==e.config.autoplay&&clearInterval(e.timer)}).on("mouseleave",function(){"always"!==e.config.autoplay&&e.autoplay()}),i.elem.data("haveEvents",!0))},o.render=function(e){return new i(e)},e(r,o)});layui.define(["jquery","lay"],function(e){"use strict";var s=layui.jquery,r=layui.lay,c={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var a=this;return a.config=s.extend({},a.config,e),a},on:function(e,a){return layui.onevent.call(this,l,e,a)}},l="rate",f="layui-icon-rate",h="layui-icon-rate-solid",o="layui-icon-rate-half",u="layui-icon-rate-solid layui-icon-rate-half",v="layui-icon-rate layui-icon-rate-half",a=function(e){var a=this;a.index=++c.index,a.config=s.extend({},a.config,c.config,e),a.render()};a.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},a.prototype.render=function(){var e=this,a=e.config,l=s(a.elem);if(1a.length&&(a.value=a.length),parseInt(a.value)===a.value||a.half||(a.value=Math.ceil(a.value)-a.value<.5?Math.ceil(a.value):Math.floor(a.value)),'
          "),t=1;t<=a.length;t++){var o='
        • ";a.half&&parseInt(a.value)!==a.value&&t==Math.ceil(a.value)?n=n+'
        • ":n+=o}n+="
        "+(a.text?''+a.value+"\u661f":"")+"";var l=a.elem,u=l.next(".layui-rate");u[0]&&u.remove(),e.elemTemp=s(n),a.span=e.elemTemp.next("span"),a.setText&&a.setText(a.value),l.html(e.elemTemp),l.addClass("layui-inline"),a.readonly||e.action()},a.prototype.setvalue=function(e){this.config.value=e,this.render()},a.prototype.action=function(){var i=this.config,n=this.elemTemp,t=n.find("i").width();n.children("li").each(function(e){var a=e+1,l=s(this);l.on("click",function(e){i.value=a,i.half&&e.pageX-s(this).offset().left<=t/2&&(i.value=i.value-.5),i.text&&n.next("span").text(i.value+"\u661f"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),l.on("mousemove",function(e){n.find("i").each(function(){s(this).addClass(f).removeClass(u)}),n.find("i:lt("+a+")").each(function(){s(this).addClass(h).removeClass(v)}),i.half&&e.pageX-s(this).offset().left<=t/2&&l.children("i").addClass(o).removeClass(h)}),l.on("mouseleave",function(){n.find("i").each(function(){s(this).addClass(f).removeClass(u)}),n.find("i:lt("+Math.floor(i.value)+")").each(function(){s(this).addClass(h).removeClass(v)}),i.half&&parseInt(i.value)!==i.value&&n.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(o).removeClass("layui-icon-rate-solid layui-icon-rate")})})},a.prototype.events=function(){this.config},c.render=function(e){e=new a(e);return function(){var a=this;return{setvalue:function(e){a.setvalue.call(a,e)},config:a.config}}.call(e)},e(l,c)});layui.define("jquery",function(l){"use strict";var g=layui.$,e=function(l){};e.prototype.load=function(l){var t,i,n,e,r,o,a,c,m,s,u,f,y,d=this,p=0,h=g((l=l||{}).elem);if(h[0])return e=g(l.scrollElem||document),r=l.mb||50,o=!("isAuto"in l)||l.isAuto,a=l.end||"\u6ca1\u6709\u66f4\u591a\u4e86",c=l.scrollElem&&l.scrollElem!==document,m="\u52a0\u8f7d\u66f4\u591a",s=g('"),h.find(".layui-flow-more")[0]||h.append(s),u=function(l,e){l=g(l),s.before(l),(e=0==e||null)?s.html(a):s.find("a").html(m),i=e,t=null,y&&y()},f=function(){t=!0,s.find("a").html(''),"function"==typeof l.done&&l.done(++p,u)},f(),s.find("a").on("click",function(){g(this);i||t||f()}),l.isLazyimg&&(y=d.lazyimg({elem:l.elem+" img",scrollElem:l.scrollElem})),o&&e.on("scroll",function(){var e=g(this),o=e.scrollTop();n&&clearTimeout(n),!i&&h.width()&&(n=setTimeout(function(){var l=(c?e:g(window)).height();(c?e.prop("scrollHeight"):document.documentElement.scrollHeight)-o-l<=r&&(t||f())},100))}),d},e.prototype.lazyimg=function(l){var e,c=this,m=0,s=g((l=l||{}).scrollElem||document),u=l.elem||"img",f=l.scrollElem&&l.scrollElem!==document,y=function(e,l){var o,t=s.scrollTop(),l=t+l,i=f?e.offset().top-s.offset().top+t:e.offset().top;t<=i&&i<=l&&e.attr("lay-src")&&(o=e.attr("lay-src"),layui.img(o,function(){var l=c.lazyimg.elem.eq(m);e.attr("src",o).removeAttr("lay-src"),l[0]&&n(l),m++},function(){c.lazyimg.elem.eq(m);e.removeAttr("lay-src")}))},n=function(l,e){var o=(f?e||s:g(window)).height(),t=s.scrollTop(),i=t+o;if(c.lazyimg.elem=g(u),l)y(l,o);else for(var n=0;n"),preview:"Preview"}},x=function(e){return _.trim(e).replace(/^\n|\n$/,"")};e("code",function(e){var M=e=_.extend(!0,{},a,e);e.elem=_(e.elem),e.elem[0]&&layui.each(e.elem.get().reverse(),function(e,a){var t,l,i,o,n,s,c,d,r,u,y=_(a),E=_.extend(!0,{},M,lay.options(a),(t={},layui.each(["title","height","encode","skin","about"],function(e,a){var i=y.attr("lay-"+a);"string"==typeof i&&(t[a]=i)}),t)),p=y.data("code")||(i=[],y.children("textarea").each(function(){i.push(x(this.value))}),0===i.length&&i.push(x(y.html())),i),f=(y.data("code",p),{copy:{className:"file-b",title:["\u590d\u5236\u4ee3\u7801"],event:function(e,a){if("function"==typeof E.onCopy)E.onCopy(l);else try{navigator.clipboard.writeText(C.unescape(l)).then(function(){g.msg("\u5df2\u590d\u5236",{icon:1})})}catch(i){g.msg("\u590d\u5236\u5931\u8d25",{icon:2})}}}}),v=(E.preview&&(a="LAY-CODE-DF-"+e,r=E.layout||["code","preview"],o="iframe"===E.preview,L=_('
        '),d=_('
        '),n=_('
        '),u=_('
        '),s=_('
        '),m=y.parent("."+T.ELEM_PREVIEW),v=y.prev("."+T.ELEM_TAB),h=y.next("."+T.ELEM_ITEM+"-preview"),E.id&&L.attr("id",E.id),L.addClass(E.className),d.attr("lay-filter",a),E.encode=!0,layui.each(r,function(e,a){var i=_('
      • ');0===e&&i.addClass("layui-this"),i.html(E.text[a]),n.append(i)}),_.extend(f,{full:{className:"screen-full",title:["\u6700\u5927\u5316\u663e\u793a","\u8fd8\u539f\u663e\u793a"],event:function(e,a){var i=e.closest("."+T.ELEM_PREVIEW),t="layui-icon-"+this.className,l="layui-icon-screen-restore",o=this.title,n=_("html,body"),s="layui-scollbar-hide";e.hasClass(t)?(i.addClass(T.ELEM_FULL),e.removeClass(t).addClass(l),e.attr("title",o[1]),n.addClass(s)):(i.removeClass(T.ELEM_FULL),e.removeClass(l).addClass(t),e.attr("title",o[0]),n.removeClass(s))}},window:{className:"release",title:["\u5728\u65b0\u7a97\u53e3\u9884\u89c8"],event:function(e,a){C.openWin({content:l})}}}),E.copy&&("array"===layui.type(E.tools)?-1===E.tools.indexOf("copy")&&E.tools.unshift("copy"):E.tools=["copy"]),s.on("click",">i",function(){var e=_(this),a=e.data("type");"function"==typeof f[a].event&&f[a].event(e,a),"function"==typeof E.toolsEvent&&E.toolsEvent(e,a)}),layui.each(E.tools,function(e,a){var i=f[a]&&f[a].className||a,t=f[a].title||[""];s.append('')}),v[0]&&v.remove(),h[0]&&h.remove(),m[0]&&y.unwrap(),d.append(n),E.tools&&d.append(s),y.wrap(L).addClass(T.ELEM_ITEM).before(d),o&&u.html(''),c=function(e){var a=e.children("iframe")[0],i=(o&&a?a.srcdoc=p.join(""):e.html(p.join("")),{container:e,render:function(){b.render(e.find(".layui-form")),w.render()}});setTimeout(function(){"function"==typeof E.done&&E.done(i)},3)},"preview"===r[0]?(u.addClass(T.ELEM_SHOW),y.before(u),c(u)):y.addClass(T.ELEM_SHOW).after(u),E.codeStyle=[E.style,E.codeStyle].join(""),E.previewStyle=[E.style,E.previewStyle].join(""),u.attr("style",E.previewStyle),w.on("tab("+a+")",function(e){var a=_(this),i=_(e.elem).closest("."+T.ELEM_PREVIEW).find("."+T.ELEM_ITEM),e=i.eq(e.index);i.removeClass(T.ELEM_SHOW),e.addClass(T.ELEM_SHOW),"preview"===a.attr("lay-id")&&c(e)})),E.ln?"ol":"ul"),h=_("<"+v+' class="layui-code-'+v+'">'),m=_('
        '),L=(y.addClass("layui-code-view layui-box"),E.skin&&("notepad"===E.skin&&(E.skin="dark"),y.removeClass("layui-code-dark layui-code-light"),y.addClass("layui-code-"+E.skin)),l=p.join(""));"function"==typeof E.codeParse&&(L=l=E.codeParse(L)),L=(L=E.encode?C.escape(L):L).replace(/[\r\t\n]+/g,"
      • "),y.html(h.html("
      • "+L+"
      • ")),E.header&&!y.children("."+T.ELEM_TITLE)[0]&&(m.html((E.title||E.text.code)+(E.about?'
        '+E.about+"
        ":"")),y.prepend(m)),E.elem.length===e+1&&"function"==typeof E.allDone&&E.allDone(),0<(d=Math.floor(h.find("li").length/100))&&h.css("margin-left",d+"px"),E.height&&h.css("max-height",E.height),h.attr("style",E.codeStyle),E.copy&&!E.preview&&(r=_(['','',""].join("")),u=y.children("."+T.ELEM_COPY),(h[0].style.height||h[0].style.maxHeight)&&r.addClass(T.ELEM_COPY+"-offset"),u[0]&&u.remove(),y.append(r),r.on("click",function(){f.copy.event()}))})})}),layui["layui.all"]||layui.addcss("modules/code.css?v=3","skincodecss"); \ No newline at end of file diff --git a/public/res/modules/common.js b/public/res/modules/common.js new file mode 100644 index 00000000..bc551d85 --- /dev/null +++ b/public/res/modules/common.js @@ -0,0 +1,33 @@ +/** + * common + */ + +layui.define(function (exports) { + var $ = layui.$ + , layer = layui.layer + , laytpl = layui.laytpl + , setter = layui.setter + , view = layui.view + , admin = layui.admin + + //公共业务的逻辑处理可以写在此处,切换任何页面都会执行 + //…… + + //退出 + admin.events.logout = function () { + //执行退出接口 + admin.req({ + url: './res/json/user/logout.js' + , type: 'get' + , data: {} + , done: function (res) { //这里要说明一下:done 是只有 response 的 code 正常才会执行。而 succese 则是只要 http 为 200 就会执行 + + //清空本地记录的 token,并跳转到登入页 + admin.exit() + } + }) + } + + //对外暴露的接口 + exports('common', {}) +}) \ No newline at end of file diff --git a/public/res/modules/console.js b/public/res/modules/console.js new file mode 100644 index 00000000..21d7bf90 --- /dev/null +++ b/public/res/modules/console.js @@ -0,0 +1,330 @@ +/** + * console + */ + +layui.define(function (exports) { + + /* + 下面通过 layui.use 分段加载不同的模块,实现不同区域的同时渲染,从而保证视图的快速呈现 + */ + + //区块轮播切换 + layui.use(['admin', 'carousel'], function () { + var $ = layui.$ + , admin = layui.admin + , carousel = layui.carousel + , element = layui.element + , device = layui.device() + + //轮播切换 + $('.layadmin-carousel').each(function () { + var othis = $(this) + carousel.render({ + elem: this + , width: '100%' + , arrow: 'none' + , interval: othis.data('interval') + , autoplay: othis.data('autoplay') === true + , trigger: (device.ios || device.android) ? 'click' : 'hover' + , anim: othis.data('anim') + }) + }) + + element.render('progress') + + }) + + //数据概览 + layui.use(['admin', 'carousel', 'echarts'], function () { + var $ = layui.$ + , admin = layui.admin + , carousel = layui.carousel + , echarts = layui.echarts + + var echartsApp = [], options = [ + //今日流量趋势 + { + title: { + text: '今日流量趋势', + x: 'center', + textStyle: { + fontSize: 14 + } + }, + tooltip: { + trigger: 'axis' + }, + legend: { + data: ['', ''] + }, + xAxis: [{ + type: 'category', + boundaryGap: false, + data: ['06:00', '06:30', '07:00', '07:30', '08:00', '08:30', '09:00', '09:30', '10:00', '11:30', '12:00', '12:30', '13:00', '13:30', '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00', '17:30', '18:00', '18:30', '19:00', '19:30', '20:00', '20:30', '21:00', '21:30', '22:00', '22:30', '23:00', '23:30'] + }], + yAxis: [{ + type: 'value' + }], + series: [{ + name: 'PV', + type: 'line', + smooth: true, + itemStyle: { normal: { areaStyle: { type: 'default' } } }, + data: [111, 222, 333, 444, 555, 777, 3333, 33333, 55555, 88888, 33333, 3333, 7777, 11888, 28888, 38888, 58888, 42222, 39999, 28888, 17777, 9777, 6555, 5555, 3333, 2222, 3111, 6999, 5888, 2777, 1777, 999, 888, 777] + }, { + name: 'UV', + type: 'line', + smooth: true, + itemStyle: { normal: { areaStyle: { type: 'default' } } }, + data: [11, 22, 33, 44, 55, 66, 333, 3333, 5555, 12312, 3333, 333, 777, 1188, 2777, 3888, 7777, 4222, 3999, 2888, 1777, 966, 655, 555, 333, 222, 311, 699, 588, 277, 166, 99, 88, 77] + }] + }, + + /* + //访客浏览器分布 + { + title : { + text: '访客浏览器分布', + x: 'center', + textStyle: { + fontSize: 14 + } + }, + tooltip : { + trigger: 'item', + formatter: "{a}
        {b} : {c} ({d}%)" + }, + legend: { + orient : 'vertical', + x : 'left', + data:['Chrome','Firefox','IE 8.0','Safari','其它浏览器'] + }, + series : [{ + name:'访问来源', + type:'pie', + radius : '55%', + center: ['50%', '50%'], + data:[ + {value:9052, name:'Chrome'}, + {value:1610, name:'Firefox'}, + {value:3200, name:'IE 8.0'}, + {value:535, name:'Safari'}, + {value:1700, name:'其它浏览器'} + ] + }] + }, + */ + + //新增的用户量 + { + title: { + text: '最近一周新增的用户量', + x: 'center', + textStyle: { + fontSize: 14 + } + }, + tooltip: { //提示框 + trigger: 'axis', + formatter: '{b}
        新增用户:{c}' + }, + xAxis: [{ //X轴 + type: 'category', + data: ['11-07', '11-08', '11-09', '11-10', '11-11', '11-12', '11-13'] + }], + yAxis: [{ //Y轴 + type: 'value' + }], + series: [{ //内容 + type: 'line', + data: [200, 300, 400, 610, 150, 270, 380], + }] + } + ] + , elemDataView = $('#LAY-index-dataview').children('div') + , renderDataView = function (index) { + echartsApp[index] = echarts.init(elemDataView[index], layui.echartsTheme) + echartsApp[index].setOption(options[index]) + //window.onresize = echartsApp[index].resize; + admin.resize(function () { + echartsApp[index].resize() + }) + } + + //没找到DOM,终止执行 + if (!elemDataView[0]) return + + renderDataView(0) + + //触发数据概览轮播 + var carouselIndex = 0 + carousel.on('change(LAY-index-dataview)', function (obj) { + renderDataView(carouselIndex = obj.index) + }) + + //触发侧边伸缩 + layui.admin.on('side', function () { + setTimeout(function () { + renderDataView(carouselIndex) + }, 300) + }) + + //触发路由 + layui.admin.on('hash(tab)', function () { + layui.router().path.join('') || renderDataView(carouselIndex) + }) + }) + + //地图 + layui.use(['carousel', 'echarts'], function () { + var $ = layui.$ + , carousel = layui.carousel + , echarts = layui.echarts + + var echartsApp = [], options = [ + { + title: { + text: '访客地区分布', + subtext: '不完全统计' + }, + tooltip: { + trigger: 'item' + }, + dataRange: { + orient: 'horizontal', + min: 0, + max: 60000, + text: ['高', '低'], + splitNumber: 0 + }, + series: [ + { + name: '访客地区分布', + type: 'map', + mapType: 'china', + selectedMode: 'multiple', + itemStyle: { + normal: { label: { show: true } }, + emphasis: { label: { show: true } } + }, + data: [ + { name: '西藏', value: 60 }, + { name: '青海', value: 167 }, + { name: '宁夏', value: 210 }, + { name: '海南', value: 252 }, + { name: '甘肃', value: 502 }, + { name: '贵州', value: 570 }, + { name: '新疆', value: 661 }, + { name: '云南', value: 8890 }, + { name: '重庆', value: 10010 }, + { name: '吉林', value: 5056 }, + { name: '山西', value: 2123 }, + { name: '天津', value: 9130 }, + { name: '江西', value: 10170 }, + { name: '广西', value: 6172 }, + { name: '陕西', value: 9251 }, + { name: '黑龙江', value: 5125 }, + { name: '内蒙古', value: 1435 }, + { name: '安徽', value: 9530 }, + { name: '北京', value: 51919 }, + { name: '福建', value: 3756 }, + { name: '上海', value: 59190 }, + { name: '湖北', value: 37109 }, + { name: '湖南', value: 8966 }, + { name: '四川', value: 31020 }, + { name: '辽宁', value: 7222 }, + { name: '河北', value: 3451 }, + { name: '河南', value: 9693 }, + { name: '浙江', value: 62310 }, + { name: '山东', value: 39231 }, + { name: '江苏', value: 35911 }, + { name: '广东', value: 55891 } + ] + } + ] + } + ] + , elemDataView = $('#LAY-index-pagethree-home').children('div') + , renderDataView = function (index) { + echartsApp[index] = echarts.init(elemDataView[index], layui.echartsTheme) + echartsApp[index].setOption(options[index]) + window.onresize = echartsApp[index].resize + } + //没找到DOM,终止执行 + if (!elemDataView[0]) return + + renderDataView(0) + }) + + //table + layui.use('table', function () { + var $ = layui.$ + , table = layui.table + + //今日热搜 + table.render({ + elem: '#LAY-index-topSearch' + , url: './res/json/console/top-search.js' //模拟接口 + , page: true + , cols: [[ + { type: 'numbers', fixed: 'left' } + , { + field: 'keywords', + title: '关键词', + minWidth: 300, + templet: '' + } + , { field: 'frequency', title: '搜索次数', minWidth: 120, sort: true } + , { field: 'userNums', title: '用户数', sort: true } + ]] + , skin: 'line' + }) + + //今日热贴 + table.render({ + elem: '#LAY-index-topCard' + , url: './res/json/console/top-card.js' //模拟接口 + , page: true + , cellMinWidth: 120 + , cols: [[ + { type: 'numbers', fixed: 'left' } + , { + field: 'title', + title: '标题', + minWidth: 300, + templet: '' + } + , { field: 'username', title: '发帖者' } + , { field: 'channel', title: '类别' } + , { field: 'crt', title: '点击率', sort: true } + ]] + , skin: 'line' + }) + + //项目进展 + table.render({ + elem: '#LAY-home-homepage-console' + , url: './res/json/console/prograss.js' //模拟接口 + , cols: [[ + { type: 'checkbox', fixed: 'left' } + , { field: 'prograss', title: '任务' } + , { field: 'time', title: '所需时间' } + , { + field: 'complete', title: '完成情况' + , templet: function (d) { + if (d.complete == '已完成') { + return '' + d.complete + '' + } else if (d.complete == '进行中') { + return '' + d.complete + '' + } else { + return '' + d.complete + '' + } + } + } + ]] + , skin: 'line' + }) + }) + + exports('console', {}) +}) \ No newline at end of file diff --git a/public/res/modules/contlist.js b/public/res/modules/contlist.js new file mode 100644 index 00000000..e4e0d3fe --- /dev/null +++ b/public/res/modules/contlist.js @@ -0,0 +1,160 @@ +/** + * 内容系统 demo + */ + +layui.define(['table', 'form'], function (exports) { + var $ = layui.$ + , admin = layui.admin + , view = layui.view + , table = layui.table + , form = layui.form + + //文章管理 + table.render({ + elem: '#LAY-app-content-list' + , url: './res/json/content/list.js' //模拟接口 + , cols: [[ + { type: 'checkbox', fixed: 'left' } + , { field: 'id', width: 100, title: '文章ID', sort: true } + , { field: 'label', title: '文章标签', minWidth: 100 } + , { field: 'title', title: '文章标题' } + , { field: 'author', title: '作者' } + , { field: 'uploadtime', title: '上传时间', sort: true } + , { field: 'status', title: '发布状态', templet: '#buttonTpl', minWidth: 80, align: 'center' } + , { title: '操作', minWidth: 150, align: 'center', fixed: 'right', toolbar: '#table-content-list' } + ]] + , page: true + , limit: 10 + , limits: [10, 15, 20, 25, 30] + , text: '对不起,加载出现异常!' + }) + + //工具条 + table.on('tool(LAY-app-content-list)', function (obj) { + var data = obj.data + if (obj.event === 'del') { + layer.confirm('确定删除此文章?', function (index) { + obj.del() + layer.close(index) + }) + } else if (obj.event === 'edit') { + admin.popup({ + title: '编辑文章' + , area: ['550px', '550px'] + , id: 'LAY-popup-content-edit' + , success: function (layero, index) { + view(this.id).render('app/content/listform', data).done(function () { + form.render(null, 'layuiadmin-app-form-list') + + //提交 + form.on('submit(layuiadmin-app-form-submit)', function (data) { + var field = data.field //获取提交的字段 + + //提交 Ajax 成功后,关闭当前弹层并重载表格 + //$.ajax({}); + layui.table.reload('LAY-app-content-list') //重载表格 + layer.close(index) //执行关闭 + }) + }) + } + }) + } + }) + + //分类管理 + table.render({ + elem: '#LAY-app-content-tags' + , url: './res/json/content/tags.js' //模拟接口 + , cols: [[ + { type: 'numbers', fixed: 'left' } + , { field: 'id', width: 100, title: 'ID', sort: true } + , { field: 'tags', title: '分类名', minWidth: 100 } + , { title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#layuiadmin-app-cont-tagsbar' } + ]] + , text: '对不起,加载出现异常!' + }) + + //工具条 + table.on('tool(LAY-app-content-tags)', function (obj) { + var data = obj.data + if (obj.event === 'del') { + layer.confirm('确定删除此分类?', function (index) { + obj.del() + layer.close(index) + }) + } else if (obj.event === 'edit') { + admin.popup({ + title: '编辑分类' + , area: ['450px', '200px'] + , id: 'LAY-popup-content-tags' + , success: function (layero, index) { + view(this.id).render('app/content/tagsform', data).done(function () { + form.render(null, 'layuiadmin-form-tags') + + //提交 + form.on('submit(layuiadmin-app-tags-submit)', function (data) { + var field = data.field //获取提交的字段 + + //提交 Ajax 成功后,关闭当前弹层并重载表格 + //$.ajax({}); + layui.table.reload('LAY-app-content-tags') //重载表格 + layer.close(index) //执行关闭 + }) + }) + } + }) + } + }) + + //评论管理 + table.render({ + elem: '#LAY-app-content-comm' + , url: './res/json/content/comment.js' //模拟接口 + , cols: [[ + { type: 'checkbox', fixed: 'left' } + , { field: 'id', width: 100, title: 'ID', sort: true } + , { field: 'reviewers', title: '评论者', minWidth: 100 } + , { field: 'content', title: '评论内容', minWidth: 100 } + , { field: 'commtime', title: '评论时间', minWidth: 100, sort: true } + , { title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#table-content-com' } + ]] + , page: true + , limit: 10 + , limits: [10, 15, 20, 25, 30] + , text: '对不起,加载出现异常!' + }) + + //工具条 + table.on('tool(LAY-app-content-comm)', function (obj) { + var data = obj.data + if (obj.event === 'del') { + layer.confirm('确定删除此条评论?', function (index) { + obj.del() + layer.close(index) + }) + } else if (obj.event === 'edit') { + admin.popup({ + title: '编辑评论' + , area: ['450px', '300px'] + , id: 'LAY-popup-content-comm' + , success: function (layero, index) { + view(this.id).render('app/content/contform', data).done(function () { + form.render(null, 'layuiadmin-form-comment') + + //提交 + form.on('submit(layuiadmin-app-com-submit)', function (data) { + var field = data.field //获取提交的字段 + + //提交 Ajax 成功后,关闭当前弹层并重载表格 + //$.ajax({}); + layui.table.reload('LAY-app-content-comm') //重载表格 + layer.close(index) //执行关闭 + }) + }) + } + }) + } + }) + + exports('contlist', {}) +}) \ No newline at end of file diff --git a/public/res/modules/echarts.js b/public/res/modules/echarts.js new file mode 100644 index 00000000..ced0777c --- /dev/null +++ b/public/res/modules/echarts.js @@ -0,0 +1,21411 @@ +!function (e) { + var t, i + !function () { + function e (e, t) { + if (!t) return e + if (0 === e.indexOf('.')) { + var i = t.split('/'), n = e.split('/'), a = i.length - 1, o = n.length, r = 0, s = 0 + e:for (var l = 0; o > l; l++) switch (n[l]) { + case'..': + if (!(a > r)) break e + r++, s++ + break + case'.': + s++ + break + default: + break e + } + return i.length = a - r, n = n.slice(s), i.concat(n).join('/') + } + return e + } + + function n (t) { + function i (i, r) { + if ('string' == typeof i) { + var s = n[i] + return s || (s = o(e(i, t)), n[i] = s), s + } + i instanceof Array && (r = r || function () { + }, r.apply(this, a(i, r, t))) + } + + var n = {} + return i + } + + function a (i, n, a) { + for (var s = [], l = r[a], h = 0, m = Math.min(i.length, n.length); m > h; h++) { + var V, U = e(i[h], a) + switch (U) { + case'require': + V = l && l.require || t + break + case'exports': + V = l.exports + break + case'module': + V = l + break + default: + V = o(U) + } + s.push(V) + } + return s + } + + function o (e) { + var t = r[e] + if (!t) throw new Error('No ' + e) + if (!t.defined) { + var i = t.factory, n = i.apply(this, a(t.deps || [], i, e)) + 'undefined' != typeof n && (t.exports = n), t.defined = 1 + } + return t.exports + } + + var r = {} + i = function (e, t, i) { + r[e] = { id: e, deps: t, factory: i, defined: 0, exports: {}, require: n(e) } + }, t = n('') + }(), i('echarts', ['echarts/echarts'], function (e) { + return e + }), i('echarts/echarts', ['require', './config', 'zrender/tool/util', 'zrender/tool/event', 'zrender/tool/env', 'zrender', 'zrender/config', './chart/island', './component/toolbox', './component', './component/title', './component/tooltip', './component/legend', './util/ecData', './chart', 'zrender/tool/color', './component/timeline', 'zrender/shape/Image', 'zrender/loadingEffect/Bar', 'zrender/loadingEffect/Bubble', 'zrender/loadingEffect/DynamicLine', 'zrender/loadingEffect/Ring', 'zrender/loadingEffect/Spin', 'zrender/loadingEffect/Whirling', './theme/macarons', './theme/infographic'], function (e) { + function t () { + r.Dispatcher.call(this) + } + + function i (e) { + e.innerHTML = '', this._themeConfig = {}, this.dom = e, this._connected = !1, this._status = { + dragIn: !1, + dragOut: !1, + needRefresh: !1 + }, this._curEventType = !1, this._chartList = [], this._messageCenter = new t, this._messageCenterOutSide = new t, this.resize = this.resize(), this._init() + } + + function n (e, t, i, n, a) { + for (var o = e._chartList, r = o.length; r--;) { + var s = o[r] + 'function' == typeof s[t] && s[t](i, n, a) + } + } + + var a = e('./config'), o = e('zrender/tool/util'), r = e('zrender/tool/event'), s = {}, + l = e('zrender/tool/env').canvasSupported, h = new Date - 0, m = {}, V = '_echarts_instance_' + s.version = '2.2.7', s.dependencies = { zrender: '2.1.1' }, s.init = function (t, n) { + var a = e('zrender') + a.version.replace('.', '') - 0 < s.dependencies.zrender.replace('.', '') - 0 && console.error('ZRender ' + a.version + ' is too old for ECharts ' + s.version + '. Current version need ZRender ' + s.dependencies.zrender + '+'), t = t instanceof Array ? t[0] : t + var o = t.getAttribute(V) + return o || (o = h++, t.setAttribute(V, o)), m[o] && m[o].dispose(), m[o] = new i(t), m[o].id = o, m[o].canvasSupported = l, m[o].setTheme(n), m[o] + }, s.getInstanceById = function (e) { + return m[e] + }, o.merge(t.prototype, r.Dispatcher.prototype, !0) + var U = e('zrender/config').EVENT, + d = ['CLICK', 'DBLCLICK', 'MOUSEOVER', 'MOUSEOUT', 'DRAGSTART', 'DRAGEND', 'DRAGENTER', 'DRAGOVER', 'DRAGLEAVE', 'DROP'] + return i.prototype = { + _init: function () { + var t = this, i = e('zrender').init(this.dom) + this._zr = i, this._messageCenter.dispatch = function (e, i, n, a) { + n = n || {}, n.type = e, n.event = i, t._messageCenter.dispatchWithContext(e, n, a), t._messageCenterOutSide.dispatchWithContext(e, n, a) + }, this._onevent = function (e) { + return t.__onevent(e) + } + for (var n in a.EVENT) 'CLICK' != n && 'DBLCLICK' != n && 'HOVER' != n && 'MOUSEOUT' != n && 'MAP_ROAM' != n && this._messageCenter.bind(a.EVENT[n], this._onevent, this) + var o = {} + this._onzrevent = function (e) { + return t[o[e.type]](e) + } + for (var r = 0, s = d.length; s > r; r++) { + var l = d[r], h = U[l] + o[h] = '_on' + l.toLowerCase(), i.on(h, this._onzrevent) + } + this.chart = {}, this.component = {} + var m = e('./chart/island') + this._island = new m(this._themeConfig, this._messageCenter, i, {}, this), this.chart.island = this._island + var V = e('./component/toolbox') + this._toolbox = new V(this._themeConfig, this._messageCenter, i, {}, this), this.component.toolbox = this._toolbox + var p = e('./component') + p.define('title', e('./component/title')), p.define('tooltip', e('./component/tooltip')), p.define('legend', e('./component/legend')), (0 === i.getWidth() || 0 === i.getHeight()) && console.error('Dom’s width & height should be ready before init.') + }, __onevent: function (e) { + e.__echartsId = e.__echartsId || this.id + var t = e.__echartsId === this.id + switch (this._curEventType || (this._curEventType = e.type), e.type) { + case a.EVENT.LEGEND_SELECTED: + this._onlegendSelected(e) + break + case a.EVENT.DATA_ZOOM: + if (!t) { + var i = this.component.dataZoom + i && (i.silence(!0), i.absoluteZoom(e.zoom), i.silence(!1)) + } + this._ondataZoom(e) + break + case a.EVENT.DATA_RANGE: + t && this._ondataRange(e) + break + case a.EVENT.MAGIC_TYPE_CHANGED: + if (!t) { + var n = this.component.toolbox + n && (n.silence(!0), n.setMagicType(e.magicType), n.silence(!1)) + } + this._onmagicTypeChanged(e) + break + case a.EVENT.DATA_VIEW_CHANGED: + t && this._ondataViewChanged(e) + break + case a.EVENT.TOOLTIP_HOVER: + t && this._tooltipHover(e) + break + case a.EVENT.RESTORE: + this._onrestore() + break + case a.EVENT.REFRESH: + t && this._onrefresh(e) + break + case a.EVENT.TOOLTIP_IN_GRID: + case a.EVENT.TOOLTIP_OUT_GRID: + if (t) { + if (this._connected) { + var o = this.component.grid + o && (e.x = (e.event.zrenderX - o.getX()) / o.getWidth(), e.y = (e.event.zrenderY - o.getY()) / o.getHeight()) + } + } else { + var o = this.component.grid + o && this._zr.trigger('mousemove', { + connectTrigger: !0, + zrenderX: o.getX() + e.x * o.getWidth(), + zrenderY: o.getY() + e.y * o.getHeight() + }) + } + } + if (this._connected && t && this._curEventType === e.type) { + for (var r in this._connected) this._connected[r].connectedEventHandler(e) + this._curEventType = null + } + (!t || !this._connected && t) && (this._curEventType = null) + }, _onclick: function (e) { + if (n(this, 'onclick', e), e.target) { + var t = this._eventPackage(e.target) + t && null != t.seriesIndex && this._messageCenter.dispatch(a.EVENT.CLICK, e.event, t, this) + } + }, _ondblclick: function (e) { + if (n(this, 'ondblclick', e), e.target) { + var t = this._eventPackage(e.target) + t && null != t.seriesIndex && this._messageCenter.dispatch(a.EVENT.DBLCLICK, e.event, t, this) + } + }, _onmouseover: function (e) { + if (e.target) { + var t = this._eventPackage(e.target) + t && null != t.seriesIndex && this._messageCenter.dispatch(a.EVENT.HOVER, e.event, t, this) + } + }, _onmouseout: function (e) { + if (e.target) { + var t = this._eventPackage(e.target) + t && null != t.seriesIndex && this._messageCenter.dispatch(a.EVENT.MOUSEOUT, e.event, t, this) + } + }, _ondragstart: function (e) { + this._status = { dragIn: !1, dragOut: !1, needRefresh: !1 }, n(this, 'ondragstart', e) + }, _ondragenter: function (e) { + n(this, 'ondragenter', e) + }, _ondragover: function (e) { + n(this, 'ondragover', e) + }, _ondragleave: function (e) { + n(this, 'ondragleave', e) + }, _ondrop: function (e) { + n(this, 'ondrop', e, this._status), this._island.ondrop(e, this._status) + }, _ondragend: function (e) { + if (n(this, 'ondragend', e, this._status), this._timeline && this._timeline.ondragend(e, this._status), this._island.ondragend(e, this._status), this._status.needRefresh) { + this._syncBackupData(this._option) + var t = this._messageCenter + t.dispatch(a.EVENT.DATA_CHANGED, e.event, this._eventPackage(e.target), this), t.dispatch(a.EVENT.REFRESH, null, null, this) + } + }, _onlegendSelected: function (e) { + this._status.needRefresh = !1, n(this, 'onlegendSelected', e, this._status), this._status.needRefresh && this._messageCenter.dispatch(a.EVENT.REFRESH, null, null, this) + }, _ondataZoom: function (e) { + this._status.needRefresh = !1, n(this, 'ondataZoom', e, this._status), this._status.needRefresh && this._messageCenter.dispatch(a.EVENT.REFRESH, null, null, this) + }, _ondataRange: function (e) { + this._clearEffect(), this._status.needRefresh = !1, n(this, 'ondataRange', e, this._status), this._status.needRefresh && this._zr.refreshNextFrame() + }, _onmagicTypeChanged: function () { + this._clearEffect(), this._render(this._toolbox.getMagicOption()) + }, _ondataViewChanged: function (e) { + this._syncBackupData(e.option), this._messageCenter.dispatch(a.EVENT.DATA_CHANGED, null, e, this), this._messageCenter.dispatch(a.EVENT.REFRESH, null, null, this) + }, _tooltipHover: function (e) { + var t = [] + n(this, 'ontooltipHover', e, t) + }, _onrestore: function () { + this.restore() + }, _onrefresh: function (e) { + this._refreshInside = !0, this.refresh(e), this._refreshInside = !1 + }, _syncBackupData: function (e) { + this.component.dataZoom && this.component.dataZoom.syncBackupData(e) + }, _eventPackage: function (t) { + if (t) { + var i = e('./util/ecData'), n = i.get(t, 'seriesIndex'), a = i.get(t, 'dataIndex') + return a = -1 != n && this.component.dataZoom ? this.component.dataZoom.getRealDataIndex(n, a) : a, { + seriesIndex: n, + seriesName: (i.get(t, 'series') || {}).name, + dataIndex: a, + data: i.get(t, 'data'), + name: i.get(t, 'name'), + value: i.get(t, 'value'), + special: i.get(t, 'special') + } + } + }, _noDataCheck: function (e) { + for (var t = e.series, i = 0, n = t.length; n > i; i++) if (t[i].type == a.CHART_TYPE_MAP || t[i].data && t[i].data.length > 0 || t[i].markPoint && t[i].markPoint.data && t[i].markPoint.data.length > 0 || t[i].markLine && t[i].markLine.data && t[i].markLine.data.length > 0 || t[i].nodes && t[i].nodes.length > 0 || t[i].links && t[i].links.length > 0 || t[i].matrix && t[i].matrix.length > 0 || t[i].eventList && t[i].eventList.length > 0) return !1 + var o = this._option && this._option.noDataLoadingOption || this._themeConfig.noDataLoadingOption || a.noDataLoadingOption || { + text: this._option && this._option.noDataText || this._themeConfig.noDataText || a.noDataText, + effect: this._option && this._option.noDataEffect || this._themeConfig.noDataEffect || a.noDataEffect + } + return this.clear(), this.showLoading(o), !0 + }, _render: function (t) { + if (this._mergeGlobalConifg(t), !this._noDataCheck(t)) { + var i = t.backgroundColor + if (i) if (l || -1 == i.indexOf('rgba')) this.dom.style.backgroundColor = i else { + var n = i.split(',') + this.dom.style.filter = 'alpha(opacity=' + 100 * n[3].substring(0, n[3].lastIndexOf(')')) + ')', n.length = 3, n[0] = n[0].replace('a', ''), this.dom.style.backgroundColor = n.join(',') + ')' + } + this._zr.clearAnimation(), this._chartList = [] + var o = e('./chart'), r = e('./component'); + (t.xAxis || t.yAxis) && (t.grid = t.grid || {}, t.dataZoom = t.dataZoom || {}) + for (var s, h, m, V = ['title', 'legend', 'tooltip', 'dataRange', 'roamController', 'grid', 'dataZoom', 'xAxis', 'yAxis', 'polar'], U = 0, d = V.length; d > U; U++) h = V[U], m = this.component[h], t[h] ? (m ? m.refresh && m.refresh(t) : (s = r.get(/^[xy]Axis$/.test(h) ? 'axis' : h), m = new s(this._themeConfig, this._messageCenter, this._zr, t, this, h), this.component[h] = m), this._chartList.push(m)) : m && (m.dispose(), this.component[h] = null, delete this.component[h]) + for (var p, c, u, y = {}, U = 0, d = t.series.length; d > U; U++) c = t.series[U].type, c ? y[c] || (y[c] = !0, p = o.get(c), p ? (this.chart[c] ? (u = this.chart[c], u.refresh(t)) : u = new p(this._themeConfig, this._messageCenter, this._zr, t, this), this._chartList.push(u), this.chart[c] = u) : console.error(c + ' has not been required.')) : console.error('series[' + U + '] chart type has not been defined.') + for (c in this.chart) c == a.CHART_TYPE_ISLAND || y[c] || (this.chart[c].dispose(), this.chart[c] = null, delete this.chart[c]) + this.component.grid && this.component.grid.refixAxisShape(this.component), this._island.refresh(t), this._toolbox.refresh(t), t.animation && !t.renderAsImage ? this._zr.refresh() : this._zr.render() + var g = 'IMG' + this.id, b = document.getElementById(g) + t.renderAsImage && l ? (b ? b.src = this.getDataURL(t.renderAsImage) : (b = this.getImage(t.renderAsImage), b.id = g, b.style.position = 'absolute', b.style.left = 0, b.style.top = 0, this.dom.firstChild.appendChild(b)), this.un(), this._zr.un(), this._disposeChartList(), this._zr.clear()) : b && b.parentNode.removeChild(b), b = null, this._option = t + } + }, restore: function () { + this._clearEffect(), this._option = o.clone(this._optionRestore), this._disposeChartList(), this._island.clear(), this._toolbox.reset(this._option, !0), this._render(this._option) + }, refresh: function (e) { + this._clearEffect(), e = e || {} + var t = e.option + !this._refreshInside && t && (t = this.getOption(), o.merge(t, e.option, !0), o.merge(this._optionRestore, e.option, !0), this._toolbox.reset(t)), this._island.refresh(t), this._toolbox.refresh(t), this._zr.clearAnimation() + for (var i = 0, n = this._chartList.length; n > i; i++) this._chartList[i].refresh && this._chartList[i].refresh(t) + this.component.grid && this.component.grid.refixAxisShape(this.component), this._zr.refresh() + }, _disposeChartList: function () { + this._clearEffect(), this._zr.clearAnimation() + for (var e = this._chartList.length; e--;) { + var t = this._chartList[e] + if (t) { + var i = t.type + this.chart[i] && delete this.chart[i], this.component[i] && delete this.component[i], t.dispose && t.dispose() + } + } + this._chartList = [] + }, _mergeGlobalConifg: function (t) { + for (var i = ['backgroundColor', 'calculable', 'calculableColor', 'calculableHolderColor', 'nameConnector', 'valueConnector', 'animation', 'animationThreshold', 'animationDuration', 'animationDurationUpdate', 'animationEasing', 'addDataAnimation', 'symbolList', 'DRAG_ENABLE_TIME'], n = i.length; n--;) { + var o = i[n] + null == t[o] && (t[o] = null != this._themeConfig[o] ? this._themeConfig[o] : a[o]) + } + var r = t.color + r && r.length || (r = this._themeConfig.color || a.color), this._zr.getColor = function (t) { + var i = e('zrender/tool/color') + return i.getColor(t, r) + }, l || (t.animation = !1, t.addDataAnimation = !1) + }, setOption: function (e, t) { + return e.timeline ? this._setTimelineOption(e) : this._setOption(e, t) + }, _setOption: function (e, t, i) { + return !t && this._option ? this._option = o.merge(this.getOption(), o.clone(e), !0) : (this._option = o.clone(e), !i && this._timeline && this._timeline.dispose()), this._optionRestore = o.clone(this._option), this._option.series && 0 !== this._option.series.length ? (this.component.dataZoom && (this._option.dataZoom || this._option.toolbox && this._option.toolbox.feature && this._option.toolbox.feature.dataZoom && this._option.toolbox.feature.dataZoom.show) && this.component.dataZoom.syncOption(this._option), this._toolbox.reset(this._option), this._render(this._option), this) : void this._zr.clear() + }, getOption: function () { + function e (e) { + var n = i._optionRestore[e] + if (n) if (n instanceof Array) for (var a = n.length; a--;) t[e][a].data = o.clone(n[a].data) else t[e].data = o.clone(n.data) + } + + var t = o.clone(this._option), i = this + return e('xAxis'), e('yAxis'), e('series'), t + }, setSeries: function (e, t) { + return t ? (this._option.series = e, this.setOption(this._option, t)) : this.setOption({ series: e }), this + }, getSeries: function () { + return this.getOption().series + }, _setTimelineOption: function (t) { + this._timeline && this._timeline.dispose() + var i = e('./component/timeline'), n = new i(this._themeConfig, this._messageCenter, this._zr, t, this) + return this._timeline = n, this.component.timeline = this._timeline, this + }, addData: function (e, t, i, n, r) { + function s () { + if (V._zr) { + V._zr.clearAnimation() + for (var e = 0, t = X.length; t > e; e++) X[e].motionlessOnce = h.addDataAnimation && X[e].addDataAnimation + V._messageCenter.dispatch(a.EVENT.REFRESH, null, { option: h }, V) + } + } + + for (var l = e instanceof Array ? e : [[e, t, i, n, r]], h = this.getOption(), m = this._optionRestore, V = this, U = 0, d = l.length; d > U; U++) { + e = l[U][0], t = l[U][1], i = l[U][2], n = l[U][3], r = l[U][4] + var p = m.series[e], c = i ? 'unshift' : 'push', u = i ? 'pop' : 'shift' + if (p) { + var y = p.data, g = h.series[e].data + if (y[c](t), g[c](t), n || (y[u](), t = g[u]()), null != r) { + var b, f + if (p.type === a.CHART_TYPE_PIE && (b = m.legend) && (f = b.data)) { + var k = h.legend.data + if (f[c](r), k[c](r), !n) { + var x = o.indexOf(f, t.name); + -1 != x && f.splice(x, 1), x = o.indexOf(k, t.name), -1 != x && k.splice(x, 1) + } + } else if (null != m.xAxis && null != m.yAxis) { + var _, L, W = p.xAxisIndex || 0; + (null == m.xAxis[W].type || 'category' === m.xAxis[W].type) && (_ = m.xAxis[W].data, L = h.xAxis[W].data, _[c](r), L[c](r), n || (_[u](), L[u]())), W = p.yAxisIndex || 0, 'category' === m.yAxis[W].type && (_ = m.yAxis[W].data, L = h.yAxis[W].data, _[c](r), L[c](r), n || (_[u](), L[u]())) + } + } + this._option.series[e].data = h.series[e].data + } + } + this._zr.clearAnimation() + for (var X = this._chartList, v = 0, w = function () { + v--, 0 === v && s() + }, U = 0, d = X.length; d > U; U++) h.addDataAnimation && X[U].addDataAnimation && (v++, X[U].addDataAnimation(l, w)) + return this.component.dataZoom && this.component.dataZoom.syncOption(h), this._option = h, h.addDataAnimation || setTimeout(s, 0), this + }, addMarkPoint: function (e, t) { + return this._addMark(e, t, 'markPoint') + }, addMarkLine: function (e, t) { + return this._addMark(e, t, 'markLine') + }, _addMark: function (e, t, i) { + var n, a = this._option.series + if (a && (n = a[e])) { + var r = this._optionRestore.series, s = r[e], l = n[i], h = s[i] + l = n[i] = l || { data: [] }, h = s[i] = h || { data: [] } + for (var m in t) 'data' === m ? (l.data = l.data.concat(t.data), h.data = h.data.concat(t.data)) : 'object' != typeof t[m] || null == l[m] ? l[m] = h[m] = t[m] : (o.merge(l[m], t[m], !0), o.merge(h[m], t[m], !0)) + var V = this.chart[n.type] + V && V.addMark(e, t, i) + } + return this + }, delMarkPoint: function (e, t) { + return this._delMark(e, t, 'markPoint') + }, delMarkLine: function (e, t) { + return this._delMark(e, t, 'markLine') + }, _delMark: function (e, t, i) { + var n, a, o, r = this._option.series + if (!(r && (n = r[e]) && (a = n[i]) && (o = a.data))) return this + t = t.split(' > ') + for (var s = -1, l = 0, h = o.length; h > l; l++) { + var m = o[l] + if (m instanceof Array) { + if (m[0].name === t[0] && m[1].name === t[1]) { + s = l + break + } + } else if (m.name === t[0]) { + s = l + break + } + } + if (s > -1) { + o.splice(s, 1), this._optionRestore.series[e][i].data.splice(s, 1) + var V = this.chart[n.type] + V && V.delMark(e, t.join(' > '), i) + } + return this + }, getDom: function () { + return this.dom + }, getZrender: function () { + return this._zr + }, getDataURL: function (e) { + if (!l) return '' + if (0 === this._chartList.length) { + var t = 'IMG' + this.id, i = document.getElementById(t) + if (i) return i.src + } + var n = this.component.tooltip + switch (n && n.hideTip(), e) { + case'jpeg': + break + default: + e = 'png' + } + var a = this._option.backgroundColor + return a && 'rgba(0,0,0,0)' === a.replace(' ', '') && (a = '#fff'), this._zr.toDataURL('image/' + e, a) + }, getImage: function (e) { + var t = this._optionRestore.title, i = document.createElement('img') + return i.src = this.getDataURL(e), i.title = t && t.text || 'ECharts', i + }, getConnectedDataURL: function (t) { + if (!this.isConnected()) return this.getDataURL(t) + var i = this.dom, n = { + self: { + img: this.getDataURL(t), + left: i.offsetLeft, + top: i.offsetTop, + right: i.offsetLeft + i.offsetWidth, + bottom: i.offsetTop + i.offsetHeight + } + }, a = n.self.left, o = n.self.top, r = n.self.right, s = n.self.bottom + for (var l in this._connected) i = this._connected[l].getDom(), n[l] = { + img: this._connected[l].getDataURL(t), + left: i.offsetLeft, + top: i.offsetTop, + right: i.offsetLeft + i.offsetWidth, + bottom: i.offsetTop + i.offsetHeight + }, a = Math.min(a, n[l].left), o = Math.min(o, n[l].top), r = Math.max(r, n[l].right), s = Math.max(s, n[l].bottom) + var h = document.createElement('div') + h.style.position = 'absolute', h.style.left = '-4000px', h.style.width = r - a + 'px', h.style.height = s - o + 'px', document.body.appendChild(h) + var m = e('zrender').init(h), V = e('zrender/shape/Image') + for (var l in n) m.addShape(new V({ style: { x: n[l].left - a, y: n[l].top - o, image: n[l].img } })) + m.render() + var U = this._option.backgroundColor + U && 'rgba(0,0,0,0)' === U.replace(/ /g, '') && (U = '#fff') + var d = m.toDataURL('image/png', U) + return setTimeout(function () { + m.dispose(), h.parentNode.removeChild(h), h = null + }, 100), d + }, getConnectedImage: function (e) { + var t = this._optionRestore.title, i = document.createElement('img') + return i.src = this.getConnectedDataURL(e), i.title = t && t.text || 'ECharts', i + }, on: function (e, t) { + return this._messageCenterOutSide.bind(e, t, this), this + }, un: function (e, t) { + return this._messageCenterOutSide.unbind(e, t), this + }, connect: function (e) { + if (!e) return this + if (this._connected || (this._connected = {}), e instanceof Array) for (var t = 0, i = e.length; i > t; t++) this._connected[e[t].id] = e[t] else this._connected[e.id] = e + return this + }, disConnect: function (e) { + if (!e || !this._connected) return this + if (e instanceof Array) for (var t = 0, i = e.length; i > t; t++) delete this._connected[e[t].id] else delete this._connected[e.id] + for (var n in this._connected) return this + return this._connected = !1, this + }, connectedEventHandler: function (e) { + e.__echartsId != this.id && this._onevent(e) + }, isConnected: function () { + return !!this._connected + }, showLoading: function (t) { + var i = { + bar: e('zrender/loadingEffect/Bar'), + bubble: e('zrender/loadingEffect/Bubble'), + dynamicLine: e('zrender/loadingEffect/DynamicLine'), + ring: e('zrender/loadingEffect/Ring'), + spin: e('zrender/loadingEffect/Spin'), + whirling: e('zrender/loadingEffect/Whirling') + } + this._toolbox.hideDataView(), t = t || {} + var n = t.textStyle || {} + t.textStyle = n + var r = o.merge(o.merge(o.clone(n), this._themeConfig.textStyle), a.textStyle) + n.textFont = r.fontStyle + ' ' + r.fontWeight + ' ' + r.fontSize + 'px ' + r.fontFamily, n.text = t.text || this._option && this._option.loadingText || this._themeConfig.loadingText || a.loadingText, null != t.x && (n.x = t.x), null != t.y && (n.y = t.y), t.effectOption = t.effectOption || {}, t.effectOption.textStyle = n + var s = t.effect + return ('string' == typeof s || null == s) && (s = i[t.effect || this._option && this._option.loadingEffect || this._themeConfig.loadingEffect || a.loadingEffect] || i.spin), this._zr.showLoading(new s(t.effectOption)), this + }, hideLoading: function () { + return this._zr.hideLoading(), this + }, setTheme: function (t) { + if (t) { + if ('string' == typeof t) switch (t) { + case'macarons': + t = e('./theme/macarons') + break + case'infographic': + t = e('./theme/infographic') + break + default: + t = {} + } else t = t || {} + this._themeConfig = t + } + if (!l) { + var i = this._themeConfig.textStyle + i && i.fontFamily && i.fontFamily2 && (i.fontFamily = i.fontFamily2), i = a.textStyle, i.fontFamily = i.fontFamily2 + } + this._timeline && this._timeline.setTheme(!0), this._optionRestore && this.restore() + }, resize: function () { + var e = this + return function () { + if (e._clearEffect(), e._zr.resize(), e._option && e._option.renderAsImage && l) return e._render(e._option), e + e._zr.clearAnimation(), e._island.resize(), e._toolbox.resize(), e._timeline && e._timeline.resize() + for (var t = 0, i = e._chartList.length; i > t; t++) e._chartList[t].resize && e._chartList[t].resize() + return e.component.grid && e.component.grid.refixAxisShape(e.component), e._zr.refresh(), e._messageCenter.dispatch(a.EVENT.RESIZE, null, null, e), e + } + }, _clearEffect: function () { + this._zr.modLayer(a.EFFECT_ZLEVEL, { motionBlur: !1 }), this._zr.painter.clearLayer(a.EFFECT_ZLEVEL) + }, clear: function () { + return this._disposeChartList(), this._zr.clear(), this._option = {}, this._optionRestore = {}, this.dom.style.backgroundColor = null, this + }, dispose: function () { + var e = this.dom.getAttribute(V) + e && delete m[e], this._island.dispose(), this._toolbox.dispose(), this._timeline && this._timeline.dispose(), this._messageCenter.unbind(), this.clear(), this._zr.dispose(), this._zr = null + } + }, s + }), i('echarts/config', [], function () { + var e = { + CHART_TYPE_LINE: 'line', + CHART_TYPE_BAR: 'bar', + CHART_TYPE_SCATTER: 'scatter', + CHART_TYPE_PIE: 'pie', + CHART_TYPE_RADAR: 'radar', + CHART_TYPE_VENN: 'venn', + CHART_TYPE_TREEMAP: 'treemap', + CHART_TYPE_TREE: 'tree', + CHART_TYPE_MAP: 'map', + CHART_TYPE_K: 'k', + CHART_TYPE_ISLAND: 'island', + CHART_TYPE_FORCE: 'force', + CHART_TYPE_CHORD: 'chord', + CHART_TYPE_GAUGE: 'gauge', + CHART_TYPE_FUNNEL: 'funnel', + CHART_TYPE_EVENTRIVER: 'eventRiver', + CHART_TYPE_WORDCLOUD: 'wordCloud', + CHART_TYPE_HEATMAP: 'heatmap', + COMPONENT_TYPE_TITLE: 'title', + COMPONENT_TYPE_LEGEND: 'legend', + COMPONENT_TYPE_DATARANGE: 'dataRange', + COMPONENT_TYPE_DATAVIEW: 'dataView', + COMPONENT_TYPE_DATAZOOM: 'dataZoom', + COMPONENT_TYPE_TOOLBOX: 'toolbox', + COMPONENT_TYPE_TOOLTIP: 'tooltip', + COMPONENT_TYPE_GRID: 'grid', + COMPONENT_TYPE_AXIS: 'axis', + COMPONENT_TYPE_POLAR: 'polar', + COMPONENT_TYPE_X_AXIS: 'xAxis', + COMPONENT_TYPE_Y_AXIS: 'yAxis', + COMPONENT_TYPE_AXIS_CATEGORY: 'categoryAxis', + COMPONENT_TYPE_AXIS_VALUE: 'valueAxis', + COMPONENT_TYPE_TIMELINE: 'timeline', + COMPONENT_TYPE_ROAMCONTROLLER: 'roamController', + backgroundColor: 'rgba(0,0,0,0)', + color: ['#ff7f50', '#87cefa', '#da70d6', '#32cd32', '#6495ed', '#ff69b4', '#ba55d3', '#cd5c5c', '#ffa500', '#40e0d0', '#1e90ff', '#ff6347', '#7b68ee', '#00fa9a', '#ffd700', '#6699FF', '#ff6666', '#3cb371', '#b8860b', '#30e0e0'], + markPoint: { + clickable: !0, + symbol: 'pin', + symbolSize: 10, + large: !1, + effect: { show: !1, loop: !0, period: 15, type: 'scale', scaleSize: 2, bounceDistance: 10 }, + itemStyle: { + normal: { borderWidth: 2, label: { show: !0, position: 'inside' } }, + emphasis: { label: { show: !0 } } + } + }, + markLine: { + clickable: !0, + symbol: ['circle', 'arrow'], + symbolSize: [2, 4], + smoothness: .2, + precision: 2, + effect: { show: !1, loop: !0, period: 15, scaleSize: 2 }, + bundling: { enable: !1, maxTurningAngle: 45 }, + itemStyle: { + normal: { borderWidth: 1.5, label: { show: !0, position: 'end' }, lineStyle: { type: 'dashed' } }, + emphasis: { label: { show: !1 }, lineStyle: {} } + } + }, + textStyle: { + decoration: 'none', + fontFamily: 'Arial, Verdana, sans-serif', + fontFamily2: '微软雅黑', + fontSize: 12, + fontStyle: 'normal', + fontWeight: 'normal' + }, + EVENT: { + REFRESH: 'refresh', + RESTORE: 'restore', + RESIZE: 'resize', + CLICK: 'click', + DBLCLICK: 'dblclick', + HOVER: 'hover', + MOUSEOUT: 'mouseout', + DATA_CHANGED: 'dataChanged', + DATA_ZOOM: 'dataZoom', + DATA_RANGE: 'dataRange', + DATA_RANGE_SELECTED: 'dataRangeSelected', + DATA_RANGE_HOVERLINK: 'dataRangeHoverLink', + LEGEND_SELECTED: 'legendSelected', + LEGEND_HOVERLINK: 'legendHoverLink', + MAP_SELECTED: 'mapSelected', + PIE_SELECTED: 'pieSelected', + MAGIC_TYPE_CHANGED: 'magicTypeChanged', + DATA_VIEW_CHANGED: 'dataViewChanged', + TIMELINE_CHANGED: 'timelineChanged', + MAP_ROAM: 'mapRoam', + FORCE_LAYOUT_END: 'forceLayoutEnd', + TOOLTIP_HOVER: 'tooltipHover', + TOOLTIP_IN_GRID: 'tooltipInGrid', + TOOLTIP_OUT_GRID: 'tooltipOutGrid', + ROAMCONTROLLER: 'roamController' + }, + DRAG_ENABLE_TIME: 120, + EFFECT_ZLEVEL: 10, + effectBlendAlpha: .95, + symbolList: ['circle', 'rectangle', 'triangle', 'diamond', 'emptyCircle', 'emptyRectangle', 'emptyTriangle', 'emptyDiamond'], + loadingEffect: 'spin', + loadingText: '数据读取中...', + noDataEffect: 'bubble', + noDataText: '暂无数据', + calculable: !1, + calculableColor: 'rgba(255,165,0,0.6)', + calculableHolderColor: '#ccc', + nameConnector: ' & ', + valueConnector: ': ', + animation: !0, + addDataAnimation: !0, + animationThreshold: 2e3, + animationDuration: 2e3, + animationDurationUpdate: 500, + animationEasing: 'ExponentialOut' + } + return e + }), i('zrender/tool/util', ['require', '../dep/excanvas'], function (e) { + function t (e) { + return e && 1 === e.nodeType && 'string' == typeof e.nodeName + } + + function i (e) { + if ('object' == typeof e && null !== e) { + var n = e + if (e instanceof Array) { + n = [] + for (var a = 0, o = e.length; o > a; a++) n[a] = i(e[a]) + } else if (!y[g.call(e)] && !t(e)) { + n = {} + for (var r in e) e.hasOwnProperty(r) && (n[r] = i(e[r])) + } + return n + } + return e + } + + function n (e, i, n, o) { + if (i.hasOwnProperty(n)) { + var r = e[n] + 'object' != typeof r || y[g.call(r)] || t(r) ? !o && n in e || (e[n] = i[n]) : a(e[n], i[n], o) + } + } + + function a (e, t, i) { + for (var a in t) n(e, t, a, i) + return e + } + + function o () { + if (!U) if (e('../dep/excanvas'), window.G_vmlCanvasManager) { + var t = document.createElement('div') + t.style.position = 'absolute', t.style.top = '-1000px', document.body.appendChild(t), U = G_vmlCanvasManager.initElement(t).getContext('2d') + } else U = document.createElement('canvas').getContext('2d') + return U + } + + function r (e, t) { + if (e.indexOf) return e.indexOf(t) + for (var i = 0, n = e.length; n > i; i++) if (e[i] === t) return i + return -1 + } + + function s (e, t) { + function i () { + } + + var n = e.prototype + i.prototype = t.prototype, e.prototype = new i + for (var a in n) e.prototype[a] = n[a] + e.constructor = e + } + + function l (e, t, i) { + if (e && t) if (e.forEach && e.forEach === p) e.forEach(t, i) else if (e.length === +e.length) for (var n = 0, a = e.length; a > n; n++) t.call(i, e[n], n, e) else for (var o in e) e.hasOwnProperty(o) && t.call(i, e[o], o, e) + } + + function h (e, t, i) { + if (e && t) { + if (e.map && e.map === c) return e.map(t, i) + for (var n = [], a = 0, o = e.length; o > a; a++) n.push(t.call(i, e[a], a, e)) + return n + } + } + + function m (e, t, i) { + if (e && t) { + if (e.filter && e.filter === u) return e.filter(t, i) + for (var n = [], a = 0, o = e.length; o > a; a++) t.call(i, e[a], a, e) && n.push(e[a]) + return n + } + } + + function V (e, t) { + return function () { + e.apply(t, arguments) + } + } + + var U, d = Array.prototype, p = d.forEach, c = d.map, u = d.filter, y = { + '[object Function]': 1, + '[object RegExp]': 1, + '[object Date]': 1, + '[object Error]': 1, + '[object CanvasGradient]': 1 + }, g = Object.prototype.toString + return { inherits: s, clone: i, merge: a, getContext: o, indexOf: r, each: l, map: h, filter: m, bind: V } + }), i('zrender/tool/event', ['require', '../mixin/Eventful'], function (e) { + 'use strict' + + function t (e) { + return 'undefined' != typeof e.zrenderX && e.zrenderX || 'undefined' != typeof e.offsetX && e.offsetX || 'undefined' != typeof e.layerX && e.layerX || 'undefined' != typeof e.clientX && e.clientX + } + + function i (e) { + return 'undefined' != typeof e.zrenderY && e.zrenderY || 'undefined' != typeof e.offsetY && e.offsetY || 'undefined' != typeof e.layerY && e.layerY || 'undefined' != typeof e.clientY && e.clientY + } + + function n (e) { + return 'undefined' != typeof e.zrenderDelta && e.zrenderDelta || 'undefined' != typeof e.wheelDelta && e.wheelDelta || 'undefined' != typeof e.detail && -e.detail + } + + var a = e('../mixin/Eventful'), o = 'function' == typeof window.addEventListener ? function (e) { + e.preventDefault(), e.stopPropagation(), e.cancelBubble = !0 + } : function (e) { + e.returnValue = !1, e.cancelBubble = !0 + } + return { getX: t, getY: i, getDelta: n, stop: o, Dispatcher: a } + }), i('zrender/tool/env', [], function () { + function e (e) { + var t = this.os = {}, i = this.browser = {}, n = e.match(/Web[kK]it[\/]{0,1}([\d.]+)/), + a = e.match(/(Android);?[\s\/]+([\d.]+)?/), o = e.match(/(iPad).*OS\s([\d_]+)/), + r = e.match(/(iPod)(.*OS\s([\d_]+))?/), s = !o && e.match(/(iPhone\sOS)\s([\d_]+)/), + l = e.match(/(webOS|hpwOS)[\s\/]([\d.]+)/), h = l && e.match(/TouchPad/), + m = e.match(/Kindle\/([\d.]+)/), V = e.match(/Silk\/([\d._]+)/), + U = e.match(/(BlackBerry).*Version\/([\d.]+)/), d = e.match(/(BB10).*Version\/([\d.]+)/), + p = e.match(/(RIM\sTablet\sOS)\s([\d.]+)/), c = e.match(/PlayBook/), + u = e.match(/Chrome\/([\d.]+)/) || e.match(/CriOS\/([\d.]+)/), y = e.match(/Firefox\/([\d.]+)/), + g = e.match(/MSIE ([\d.]+)/), b = n && e.match(/Mobile\//) && !u, + f = e.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !u, g = e.match(/MSIE\s([\d.]+)/) + return (i.webkit = !!n) && (i.version = n[1]), a && (t.android = !0, t.version = a[2]), s && !r && (t.ios = t.iphone = !0, t.version = s[2].replace(/_/g, '.')), o && (t.ios = t.ipad = !0, t.version = o[2].replace(/_/g, '.')), r && (t.ios = t.ipod = !0, t.version = r[3] ? r[3].replace(/_/g, '.') : null), l && (t.webos = !0, t.version = l[2]), h && (t.touchpad = !0), U && (t.blackberry = !0, t.version = U[2]), d && (t.bb10 = !0, t.version = d[2]), p && (t.rimtabletos = !0, t.version = p[2]), c && (i.playbook = !0), m && (t.kindle = !0, t.version = m[1]), V && (i.silk = !0, i.version = V[1]), !V && t.android && e.match(/Kindle Fire/) && (i.silk = !0), u && (i.chrome = !0, i.version = u[1]), y && (i.firefox = !0, i.version = y[1]), g && (i.ie = !0, i.version = g[1]), b && (e.match(/Safari/) || t.ios) && (i.safari = !0), f && (i.webview = !0), g && (i.ie = !0, i.version = g[1]), t.tablet = !!(o || c || a && !e.match(/Mobile/) || y && e.match(/Tablet/) || g && !e.match(/Phone/) && e.match(/Touch/)), t.phone = !(t.tablet || t.ipod || !(a || s || l || U || d || u && e.match(/Android/) || u && e.match(/CriOS\/([\d.]+)/) || y && e.match(/Mobile/) || g && e.match(/Touch/))), { + browser: i, + os: t, + canvasSupported: document.createElement('canvas').getContext ? !0 : !1 + } + } + + return e(navigator.userAgent) + }), i('zrender', ['zrender/zrender'], function (e) { + return e + }), i('zrender/zrender', ['require', './dep/excanvas', './tool/util', './tool/log', './tool/guid', './Handler', './Painter', './Storage', './animation/Animation', './tool/env'], function (e) { + function t (e) { + return function () { + e._needsRefreshNextFrame && e.refresh() + } + } + + e('./dep/excanvas') + var i = e('./tool/util'), n = e('./tool/log'), a = e('./tool/guid'), o = e('./Handler'), r = e('./Painter'), + s = e('./Storage'), l = e('./animation/Animation'), h = {}, m = {} + m.version = '2.1.1', m.init = function (e) { + var t = new V(a(), e) + return h[t.id] = t, t + }, m.dispose = function (e) { + if (e) e.dispose() else { + for (var t in h) h[t].dispose() + h = {} + } + return m + }, m.getInstance = function (e) { + return h[e] + }, m.delInstance = function (e) { + return delete h[e], m + } + var V = function (i, n) { + this.id = i, this.env = e('./tool/env'), this.storage = new s, this.painter = new r(n, this.storage), this.handler = new o(n, this.storage, this.painter), this.animation = new l({ stage: { update: t(this) } }), this.animation.start() + var a = this + this.painter.refreshNextFrame = function () { + a.refreshNextFrame() + }, this._needsRefreshNextFrame = !1 + var a = this, h = this.storage, m = h.delFromMap + h.delFromMap = function (e) { + var t = h.get(e) + a.stopAnimation(t), m.call(h, e) + } + } + return V.prototype.getId = function () { + return this.id + }, V.prototype.addShape = function (e) { + return this.addElement(e), this + }, V.prototype.addGroup = function (e) { + return this.addElement(e), this + }, V.prototype.delShape = function (e) { + return this.delElement(e), this + }, V.prototype.delGroup = function (e) { + return this.delElement(e), this + }, V.prototype.modShape = function (e, t) { + return this.modElement(e, t), this + }, V.prototype.modGroup = function (e, t) { + return this.modElement(e, t), this + }, V.prototype.addElement = function (e) { + return this.storage.addRoot(e), this._needsRefreshNextFrame = !0, this + }, V.prototype.delElement = function (e) { + return this.storage.delRoot(e), this._needsRefreshNextFrame = !0, this + }, V.prototype.modElement = function (e, t) { + return this.storage.mod(e, t), this._needsRefreshNextFrame = !0, this + }, V.prototype.modLayer = function (e, t) { + return this.painter.modLayer(e, t), this._needsRefreshNextFrame = !0, this + }, V.prototype.addHoverShape = function (e) { + return this.storage.addHover(e), this + }, V.prototype.render = function (e) { + return this.painter.render(e), this._needsRefreshNextFrame = !1, this + }, V.prototype.refresh = function (e) { + return this.painter.refresh(e), this._needsRefreshNextFrame = !1, this + }, V.prototype.refreshNextFrame = function () { + return this._needsRefreshNextFrame = !0, this + }, V.prototype.refreshHover = function (e) { + return this.painter.refreshHover(e), this + }, V.prototype.refreshShapes = function (e, t) { + return this.painter.refreshShapes(e, t), this + }, V.prototype.resize = function () { + return this.painter.resize(), this + }, V.prototype.animate = function (e, t, a) { + var o = this + if ('string' == typeof e && (e = this.storage.get(e)), e) { + var r + if (t) { + for (var s = t.split('.'), l = e, h = 0, m = s.length; m > h; h++) l && (l = l[s[h]]) + l && (r = l) + } else r = e + if (!r) return void n('Property "' + t + '" is not existed in element ' + e.id) + + null == e.__animators && (e.__animators = []) + var V = e.__animators, U = this.animation.animate(r, { loop: a }).during(function () { + o.modShape(e) + }).done(function () { + var t = i.indexOf(e.__animators, U) + t >= 0 && V.splice(t, 1) + }) + return V.push(U), U + } + n('Element not existed') + }, V.prototype.stopAnimation = function (e) { + if (e.__animators) { + for (var t = e.__animators, i = t.length, n = 0; i > n; n++) t[n].stop() + t.length = 0 + } + return this + }, V.prototype.clearAnimation = function () { + return this.animation.clear(), this + }, V.prototype.showLoading = function (e) { + return this.painter.showLoading(e), this + }, V.prototype.hideLoading = function () { + return this.painter.hideLoading(), this + }, V.prototype.getWidth = function () { + return this.painter.getWidth() + }, V.prototype.getHeight = function () { + return this.painter.getHeight() + }, V.prototype.toDataURL = function (e, t, i) { + return this.painter.toDataURL(e, t, i) + }, V.prototype.shapeToImage = function (e, t, i) { + var n = a() + return this.painter.shapeToImage(n, e, t, i) + }, V.prototype.on = function (e, t, i) { + return this.handler.on(e, t, i), this + }, V.prototype.un = function (e, t) { + return this.handler.un(e, t), this + }, V.prototype.trigger = function (e, t) { + return this.handler.trigger(e, t), this + }, V.prototype.clear = function () { + return this.storage.delRoot(), this.painter.clear(), this + }, V.prototype.dispose = function () { + this.animation.stop(), this.clear(), this.storage.dispose(), this.painter.dispose(), this.handler.dispose(), this.animation = this.storage = this.painter = this.handler = null, m.delInstance(this.id) + }, m + }), i('zrender/config', [], function () { + var e = { + EVENT: { + RESIZE: 'resize', + CLICK: 'click', + DBLCLICK: 'dblclick', + MOUSEWHEEL: 'mousewheel', + MOUSEMOVE: 'mousemove', + MOUSEOVER: 'mouseover', + MOUSEOUT: 'mouseout', + MOUSEDOWN: 'mousedown', + MOUSEUP: 'mouseup', + GLOBALOUT: 'globalout', + DRAGSTART: 'dragstart', + DRAGEND: 'dragend', + DRAGENTER: 'dragenter', + DRAGOVER: 'dragover', + DRAGLEAVE: 'dragleave', + DROP: 'drop', + touchClickDelay: 300 + }, + elementClassName: 'zr-element', + catchBrushException: !1, + debugMode: 0, + devicePixelRatio: Math.max(window.devicePixelRatio || 1, 1) + } + return e + }), i('echarts/chart/island', ['require', './base', 'zrender/shape/Circle', '../config', '../util/ecData', 'zrender/tool/util', 'zrender/tool/event', 'zrender/tool/color', '../util/accMath', '../chart'], function (e) { + function t (e, t, n, a, r) { + i.call(this, e, t, n, a, r), this._nameConnector, this._valueConnector, this._zrHeight = this.zr.getHeight(), this._zrWidth = this.zr.getWidth() + var l = this + l.shapeHandler.onmousewheel = function (e) { + var t = e.target, i = e.event, n = s.getDelta(i) + n = n > 0 ? -1 : 1, t.style.r -= n, t.style.r = t.style.r < 5 ? 5 : t.style.r + var a = o.get(t, 'value'), r = a * l.option.island.calculateStep + a = r > 1 ? Math.round(a - r * n) : +(a - r * n).toFixed(2) + var h = o.get(t, 'name') + t.style.text = h + ':' + a, o.set(t, 'value', a), o.set(t, 'name', h), l.zr.modShape(t.id), l.zr.refreshNextFrame(), s.stop(i) + } + } + + var i = e('./base'), n = e('zrender/shape/Circle'), a = e('../config') + a.island = { zlevel: 0, z: 5, r: 15, calculateStep: .1 } + var o = e('../util/ecData'), r = e('zrender/tool/util'), s = e('zrender/tool/event') + return t.prototype = { + type: a.CHART_TYPE_ISLAND, _combine: function (t, i) { + var n = e('zrender/tool/color'), a = e('../util/accMath'), + r = a.accAdd(o.get(t, 'value'), o.get(i, 'value')), + s = o.get(t, 'name') + this._nameConnector + o.get(i, 'name') + t.style.text = s + this._valueConnector + r, o.set(t, 'value', r), o.set(t, 'name', s), t.style.r = this.option.island.r, t.style.color = n.mix(t.style.color, i.style.color) + }, refresh: function (e) { + e && (e.island = this.reformOption(e.island), this.option = e, this._nameConnector = this.option.nameConnector, this._valueConnector = this.option.valueConnector) + }, getOption: function () { + return this.option + }, resize: function () { + var e = this.zr.getWidth(), t = this.zr.getHeight(), i = e / (this._zrWidth || e), + n = t / (this._zrHeight || t) + if (1 !== i || 1 !== n) { + this._zrWidth = e, this._zrHeight = t + for (var a = 0, o = this.shapeList.length; o > a; a++) this.zr.modShape(this.shapeList[a].id, { + style: { + x: Math.round(this.shapeList[a].style.x * i), + y: Math.round(this.shapeList[a].style.y * n) + } + }) + } + }, add: function (e) { + var t = o.get(e, 'name'), i = o.get(e, 'value'), + a = null != o.get(e, 'series') ? o.get(e, 'series').name : '', + r = this.getFont(this.option.island.textStyle), s = this.option.island, l = { + zlevel: s.zlevel, + z: s.z, + style: { + x: e.style.x, + y: e.style.y, + r: this.option.island.r, + color: e.style.color || e.style.strokeColor, + text: t + this._valueConnector + i, + textFont: r + }, + draggable: !0, + hoverable: !0, + onmousewheel: this.shapeHandler.onmousewheel, + _type: 'island' + } + '#fff' === l.style.color && (l.style.color = e.style.strokeColor), this.setCalculable(l), l.dragEnableTime = 0, o.pack(l, { name: a }, -1, i, -1, t), l = new n(l), this.shapeList.push(l), this.zr.addShape(l) + }, del: function (e) { + this.zr.delShape(e.id) + for (var t = [], i = 0, n = this.shapeList.length; n > i; i++) this.shapeList[i].id != e.id && t.push(this.shapeList[i]) + this.shapeList = t + }, ondrop: function (e, t) { + if (this.isDrop && e.target) { + var i = e.target, n = e.dragged + this._combine(i, n), this.zr.modShape(i.id), t.dragIn = !0, this.isDrop = !1 + } + }, ondragend: function (e, t) { + var i = e.target + this.isDragend ? t.dragIn && (this.del(i), t.needRefresh = !0) : t.dragIn || (i.style.x = s.getX(e.event), i.style.y = s.getY(e.event), this.add(i), t.needRefresh = !0), this.isDragend = !1 + } + }, r.inherits(t, i), e('../chart').define('island', t), t + }), i('echarts/component/toolbox', ['require', './base', 'zrender/shape/Line', 'zrender/shape/Image', 'zrender/shape/Rectangle', '../util/shape/Icon', '../config', 'zrender/tool/util', 'zrender/config', 'zrender/tool/event', './dataView', '../component'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.dom = o.dom, this._magicType = {}, this._magicMap = {}, this._isSilence = !1, this._iconList, this._iconShapeMap = {}, this._featureTitle = {}, this._featureIcon = {}, this._featureColor = {}, this._featureOption = {}, this._enableColor = 'red', this._disableColor = '#ccc', this._markShapeList = [] + var r = this + r._onMark = function (e) { + r.__onMark(e) + }, r._onMarkUndo = function (e) { + r.__onMarkUndo(e) + }, r._onMarkClear = function (e) { + r.__onMarkClear(e) + }, r._onDataZoom = function (e) { + r.__onDataZoom(e) + }, r._onDataZoomReset = function (e) { + r.__onDataZoomReset(e) + }, r._onDataView = function (e) { + r.__onDataView(e) + }, r._onRestore = function (e) { + r.__onRestore(e) + }, r._onSaveAsImage = function (e) { + r.__onSaveAsImage(e) + }, r._onMagicType = function (e) { + r.__onMagicType(e) + }, r._onCustomHandler = function (e) { + r.__onCustomHandler(e) + }, r._onmousemove = function (e) { + return r.__onmousemove(e) + }, r._onmousedown = function (e) { + return r.__onmousedown(e) + }, r._onmouseup = function (e) { + return r.__onmouseup(e) + }, r._onclick = function (e) { + return r.__onclick(e) + } + } + + var i = e('./base'), n = e('zrender/shape/Line'), a = e('zrender/shape/Image'), + o = e('zrender/shape/Rectangle'), r = e('../util/shape/Icon'), s = e('../config') + s.toolbox = { + zlevel: 0, + z: 6, + show: !1, + orient: 'horizontal', + x: 'right', + y: 'top', + color: ['#1e90ff', '#22bb22', '#4b0082', '#d2691e'], + disableColor: '#ddd', + effectiveColor: 'red', + backgroundColor: 'rgba(0,0,0,0)', + borderColor: '#ccc', + borderWidth: 0, + padding: 5, + itemGap: 10, + itemSize: 16, + showTitle: !0, + feature: { + mark: { + show: !1, + title: { mark: '辅助线开关', markUndo: '删除辅助线', markClear: '清空辅助线' }, + lineStyle: { width: 1, color: '#1e90ff', type: 'dashed' } + }, + dataZoom: { show: !1, title: { dataZoom: '区域缩放', dataZoomReset: '区域缩放后退' } }, + dataView: { show: !1, title: '数据视图', readOnly: !1, lang: ['数据视图', '关闭', '刷新'] }, + magicType: { + show: !1, + title: { + line: '折线图切换', + bar: '柱形图切换', + stack: '堆积', + tiled: '平铺', + force: '力导向布局图切换', + chord: '和弦图切换', + pie: '饼图切换', + funnel: '漏斗图切换' + }, + type: [] + }, + restore: { show: !1, title: '还原' }, + saveAsImage: { show: !1, title: '保存为图片', type: 'png', lang: ['点击保存'] } + } + } + var l = e('zrender/tool/util'), h = e('zrender/config'), m = e('zrender/tool/event'), V = 'stack', U = 'tiled' + return t.prototype = { + type: s.COMPONENT_TYPE_TOOLBOX, _buildShape: function () { + this._iconList = [] + var e = this.option.toolbox + this._enableColor = e.effectiveColor, this._disableColor = e.disableColor + var t = e.feature, i = [] + for (var n in t) if (t[n].show) switch (n) { + case'mark': + i.push({ key: n, name: 'mark' }), i.push({ key: n, name: 'markUndo' }), i.push({ + key: n, + name: 'markClear' + }) + break + case'magicType': + for (var a = 0, o = t[n].type.length; o > a; a++) t[n].title[t[n].type[a] + 'Chart'] = t[n].title[t[n].type[a]], t[n].option && (t[n].option[t[n].type[a] + 'Chart'] = t[n].option[t[n].type[a]]), i.push({ + key: n, + name: t[n].type[a] + 'Chart' + }) + break + case'dataZoom': + i.push({ key: n, name: 'dataZoom' }), i.push({ key: n, name: 'dataZoomReset' }) + break + case'saveAsImage': + this.canvasSupported && i.push({ key: n, name: 'saveAsImage' }) + break + default: + i.push({ key: n, name: n }) + } + if (i.length > 0) { + for (var r, n, a = 0, o = i.length; o > a; a++) r = i[a].name, n = i[a].key, this._iconList.push(r), this._featureTitle[r] = t[n].title[r] || t[n].title, t[n].icon && (this._featureIcon[r] = t[n].icon[r] || t[n].icon), t[n].color && (this._featureColor[r] = t[n].color[r] || t[n].color), t[n].option && (this._featureOption[r] = t[n].option[r] || t[n].option) + this._itemGroupLocation = this._getItemGroupLocation(), this._buildBackground(), this._buildItem() + for (var a = 0, o = this.shapeList.length; o > a; a++) this.zr.addShape(this.shapeList[a]) + this._iconShapeMap.mark && (this._iconDisable(this._iconShapeMap.markUndo), this._iconDisable(this._iconShapeMap.markClear)), this._iconShapeMap.dataZoomReset && 0 === this._zoomQueue.length && this._iconDisable(this._iconShapeMap.dataZoomReset) + } + }, _buildItem: function () { + var t, i, n, o, s = this.option.toolbox, l = this._iconList.length, h = this._itemGroupLocation.x, + m = this._itemGroupLocation.y, V = s.itemSize, U = s.itemGap, + d = s.color instanceof Array ? s.color : [s.color], p = this.getFont(s.textStyle) + 'horizontal' === s.orient ? (i = this._itemGroupLocation.y / this.zr.getHeight() < .5 ? 'bottom' : 'top', n = this._itemGroupLocation.x / this.zr.getWidth() < .5 ? 'left' : 'right', o = this._itemGroupLocation.y / this.zr.getHeight() < .5 ? 'top' : 'bottom') : i = this._itemGroupLocation.x / this.zr.getWidth() < .5 ? 'right' : 'left', this._iconShapeMap = {} + for (var c = this, u = 0; l > u; u++) { + switch (t = { + type: 'icon', + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { + x: h, + y: m, + width: V, + height: V, + iconType: this._iconList[u], + lineWidth: 1, + strokeColor: this._featureColor[this._iconList[u]] || d[u % d.length], + brushType: 'stroke' + }, + highlightStyle: { + lineWidth: 1, + text: s.showTitle ? this._featureTitle[this._iconList[u]] : void 0, + textFont: p, + textPosition: i, + strokeColor: this._featureColor[this._iconList[u]] || d[u % d.length] + }, + hoverable: !0, + clickable: !0 + }, this._featureIcon[this._iconList[u]] && (t.style.image = this._featureIcon[this._iconList[u]].replace(new RegExp('^image:\\/\\/'), ''), t.style.opacity = .8, t.highlightStyle.opacity = 1, t.type = 'image'), 'horizontal' === s.orient && (0 === u && 'left' === n && (t.highlightStyle.textPosition = 'specific', t.highlightStyle.textAlign = n, t.highlightStyle.textBaseline = o, t.highlightStyle.textX = h, t.highlightStyle.textY = 'top' === o ? m + V + 10 : m - 10), u === l - 1 && 'right' === n && (t.highlightStyle.textPosition = 'specific', t.highlightStyle.textAlign = n, t.highlightStyle.textBaseline = o, t.highlightStyle.textX = h + V, t.highlightStyle.textY = 'top' === o ? m + V + 10 : m - 10)), this._iconList[u]) { + case'mark': + t.onclick = c._onMark + break + case'markUndo': + t.onclick = c._onMarkUndo + break + case'markClear': + t.onclick = c._onMarkClear + break + case'dataZoom': + t.onclick = c._onDataZoom + break + case'dataZoomReset': + t.onclick = c._onDataZoomReset + break + case'dataView': + if (!this._dataView) { + var y = e('./dataView') + this._dataView = new y(this.ecTheme, this.messageCenter, this.zr, this.option, this.myChart) + } + t.onclick = c._onDataView + break + case'restore': + t.onclick = c._onRestore + break + case'saveAsImage': + t.onclick = c._onSaveAsImage + break + default: + this._iconList[u].match('Chart') ? (t._name = this._iconList[u].replace('Chart', ''), t.onclick = c._onMagicType) : t.onclick = c._onCustomHandler + } + 'icon' === t.type ? t = new r(t) : 'image' === t.type && (t = new a(t)), this.shapeList.push(t), this._iconShapeMap[this._iconList[u]] = t, 'horizontal' === s.orient ? h += V + U : m += V + U + } + }, _buildBackground: function () { + var e = this.option.toolbox, t = this.reformCssArray(this.option.toolbox.padding) + this.shapeList.push(new o({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + x: this._itemGroupLocation.x - t[3], + y: this._itemGroupLocation.y - t[0], + width: this._itemGroupLocation.width + t[3] + t[1], + height: this._itemGroupLocation.height + t[0] + t[2], + brushType: 0 === e.borderWidth ? 'fill' : 'both', + color: e.backgroundColor, + strokeColor: e.borderColor, + lineWidth: e.borderWidth + } + })) + }, _getItemGroupLocation: function () { + var e = this.option.toolbox, t = this.reformCssArray(this.option.toolbox.padding), + i = this._iconList.length, n = e.itemGap, a = e.itemSize, o = 0, r = 0 + 'horizontal' === e.orient ? (o = (a + n) * i - n, r = a) : (r = (a + n) * i - n, o = a) + var s, l = this.zr.getWidth() + switch (e.x) { + case'center': + s = Math.floor((l - o) / 2) + break + case'left': + s = t[3] + e.borderWidth + break + case'right': + s = l - o - t[1] - e.borderWidth + break + default: + s = e.x - 0, s = isNaN(s) ? 0 : s + } + var h, m = this.zr.getHeight() + switch (e.y) { + case'top': + h = t[0] + e.borderWidth + break + case'bottom': + h = m - r - t[2] - e.borderWidth + break + case'center': + h = Math.floor((m - r) / 2) + break + default: + h = e.y - 0, h = isNaN(h) ? 0 : h + } + return { x: s, y: h, width: o, height: r } + }, __onmousemove: function (e) { + this._marking && (this._markShape.style.xEnd = m.getX(e.event), this._markShape.style.yEnd = m.getY(e.event), this.zr.addHoverShape(this._markShape)), this._zooming && (this._zoomShape.style.width = m.getX(e.event) - this._zoomShape.style.x, this._zoomShape.style.height = m.getY(e.event) - this._zoomShape.style.y, this.zr.addHoverShape(this._zoomShape), this.dom.style.cursor = 'crosshair', m.stop(e.event)), this._zoomStart && 'pointer' != this.dom.style.cursor && 'move' != this.dom.style.cursor && (this.dom.style.cursor = 'crosshair') + }, __onmousedown: function (e) { + if (!e.target) { + this._zooming = !0 + var t = m.getX(e.event), i = m.getY(e.event), n = this.option.dataZoom || {} + return this._zoomShape = new o({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { x: t, y: i, width: 1, height: 1, brushType: 'both' }, + highlightStyle: { + lineWidth: 2, + color: n.fillerColor || s.dataZoom.fillerColor, + strokeColor: n.handleColor || s.dataZoom.handleColor, + brushType: 'both' + } + }), this.zr.addHoverShape(this._zoomShape), !0 + } + }, __onmouseup: function () { + if (!this._zoomShape || Math.abs(this._zoomShape.style.width) < 10 || Math.abs(this._zoomShape.style.height) < 10) return this._zooming = !1, !0 + if (this._zooming && this.component.dataZoom) { + this._zooming = !1 + var e = this.component.dataZoom.rectZoom(this._zoomShape.style) + e && (this._zoomQueue.push({ + start: e.start, + end: e.end, + start2: e.start2, + end2: e.end2 + }), this._iconEnable(this._iconShapeMap.dataZoomReset), this.zr.refreshNextFrame()) + } + return !0 + }, __onclick: function (e) { + if (!e.target) if (this._marking) this._marking = !1, this._markShapeList.push(this._markShape), this._iconEnable(this._iconShapeMap.markUndo), this._iconEnable(this._iconShapeMap.markClear), this.zr.addShape(this._markShape), this.zr.refreshNextFrame() else if (this._markStart) { + this._marking = !0 + var t = m.getX(e.event), i = m.getY(e.event) + this._markShape = new n({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { + xStart: t, + yStart: i, + xEnd: t, + yEnd: i, + lineWidth: this.query(this.option, 'toolbox.feature.mark.lineStyle.width'), + strokeColor: this.query(this.option, 'toolbox.feature.mark.lineStyle.color'), + lineType: this.query(this.option, 'toolbox.feature.mark.lineStyle.type') + } + }), this.zr.addHoverShape(this._markShape) + } + }, __onMark: function (e) { + var t = e.target + if (this._marking || this._markStart) this._resetMark(), this.zr.refreshNextFrame() else { + this._resetZoom(), this.zr.modShape(t.id, { style: { strokeColor: this._enableColor } }), this.zr.refreshNextFrame(), this._markStart = !0 + var i = this + setTimeout(function () { + i.zr && i.zr.on(h.EVENT.CLICK, i._onclick) && i.zr.on(h.EVENT.MOUSEMOVE, i._onmousemove) + }, 10) + } + return !0 + }, __onMarkUndo: function () { + if (this._marking) this._marking = !1 else { + var e = this._markShapeList.length + if (e >= 1) { + var t = this._markShapeList[e - 1] + this.zr.delShape(t.id), this.zr.refreshNextFrame(), this._markShapeList.pop(), 1 === e && (this._iconDisable(this._iconShapeMap.markUndo), this._iconDisable(this._iconShapeMap.markClear)) + } + } + return !0 + }, __onMarkClear: function () { + this._marking && (this._marking = !1) + var e = this._markShapeList.length + if (e > 0) { + for (; e--;) this.zr.delShape(this._markShapeList.pop().id) + this._iconDisable(this._iconShapeMap.markUndo), this._iconDisable(this._iconShapeMap.markClear), this.zr.refreshNextFrame() + } + return !0 + }, __onDataZoom: function (e) { + var t = e.target + if (this._zooming || this._zoomStart) this._resetZoom(), this.zr.refreshNextFrame(), this.dom.style.cursor = 'default' else { + this._resetMark(), this.zr.modShape(t.id, { style: { strokeColor: this._enableColor } }), this.zr.refreshNextFrame(), this._zoomStart = !0 + var i = this + setTimeout(function () { + i.zr && i.zr.on(h.EVENT.MOUSEDOWN, i._onmousedown) && i.zr.on(h.EVENT.MOUSEUP, i._onmouseup) && i.zr.on(h.EVENT.MOUSEMOVE, i._onmousemove) + }, 10), this.dom.style.cursor = 'crosshair' + } + return !0 + }, __onDataZoomReset: function () { + return this._zooming && (this._zooming = !1), this._zoomQueue.pop(), this._zoomQueue.length > 0 ? this.component.dataZoom.absoluteZoom(this._zoomQueue[this._zoomQueue.length - 1]) : (this.component.dataZoom.rectZoom(), this._iconDisable(this._iconShapeMap.dataZoomReset), this.zr.refreshNextFrame()), !0 + }, _resetMark: function () { + this._marking = !1, this._markStart && (this._markStart = !1, this._iconShapeMap.mark && this.zr.modShape(this._iconShapeMap.mark.id, { style: { strokeColor: this._iconShapeMap.mark.highlightStyle.strokeColor } }), this.zr.un(h.EVENT.CLICK, this._onclick), this.zr.un(h.EVENT.MOUSEMOVE, this._onmousemove)) + }, _resetZoom: function () { + this._zooming = !1, this._zoomStart && (this._zoomStart = !1, this._iconShapeMap.dataZoom && this.zr.modShape(this._iconShapeMap.dataZoom.id, { style: { strokeColor: this._iconShapeMap.dataZoom.highlightStyle.strokeColor } }), this.zr.un(h.EVENT.MOUSEDOWN, this._onmousedown), this.zr.un(h.EVENT.MOUSEUP, this._onmouseup), this.zr.un(h.EVENT.MOUSEMOVE, this._onmousemove)) + }, _iconDisable: function (e) { + 'image' != e.type ? this.zr.modShape(e.id, { + hoverable: !1, + clickable: !1, + style: { strokeColor: this._disableColor } + }) : this.zr.modShape(e.id, { hoverable: !1, clickable: !1, style: { opacity: .3 } }) + }, _iconEnable: function (e) { + 'image' != e.type ? this.zr.modShape(e.id, { + hoverable: !0, + clickable: !0, + style: { strokeColor: e.highlightStyle.strokeColor } + }) : this.zr.modShape(e.id, { hoverable: !0, clickable: !0, style: { opacity: .8 } }) + }, __onDataView: function () { + return this._dataView.show(this.option), !0 + }, __onRestore: function () { + return this._resetMark(), this._resetZoom(), this.messageCenter.dispatch(s.EVENT.RESTORE, null, null, this.myChart), !0 + }, __onSaveAsImage: function () { + var e = this.option.toolbox.feature.saveAsImage, t = e.type || 'png' + 'png' != t && 'jpeg' != t && (t = 'png') + var i + i = this.myChart.isConnected() ? this.myChart.getConnectedDataURL(t) : this.zr.toDataURL('image/' + t, this.option.backgroundColor && 'rgba(0,0,0,0)' === this.option.backgroundColor.replace(' ', '') ? '#fff' : this.option.backgroundColor) + var n = document.createElement('div') + n.id = '__echarts_download_wrap__', n.style.cssText = 'position:fixed;z-index:99999;display:block;top:0;left:0;background-color:rgba(33,33,33,0.5);text-align:center;width:100%;height:100%;line-height:' + document.documentElement.clientHeight + 'px;' + var a = document.createElement('a') + a.href = i, a.setAttribute('download', (e.name ? e.name : this.option.title && (this.option.title.text || this.option.title.subtext) ? this.option.title.text || this.option.title.subtext : 'ECharts') + '.' + t), a.innerHTML = '', n.appendChild(a), document.body.appendChild(n), a = null, n = null, setTimeout(function () { + var e = document.getElementById('__echarts_download_wrap__') + e && (e.onclick = function () { + var e = document.getElementById('__echarts_download_wrap__') + e.onclick = null, e.innerHTML = '', document.body.removeChild(e), e = null + }, e = null) + }, 500) + }, __onMagicType: function (e) { + this._resetMark() + var t = e.target._name + return this._magicType[t] || (this._magicType[t] = !0, t === s.CHART_TYPE_LINE ? this._magicType[s.CHART_TYPE_BAR] = !1 : t === s.CHART_TYPE_BAR && (this._magicType[s.CHART_TYPE_LINE] = !1), t === s.CHART_TYPE_PIE ? this._magicType[s.CHART_TYPE_FUNNEL] = !1 : t === s.CHART_TYPE_FUNNEL && (this._magicType[s.CHART_TYPE_PIE] = !1), t === s.CHART_TYPE_FORCE ? this._magicType[s.CHART_TYPE_CHORD] = !1 : t === s.CHART_TYPE_CHORD && (this._magicType[s.CHART_TYPE_FORCE] = !1), t === V ? this._magicType[U] = !1 : t === U && (this._magicType[V] = !1), this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED, e.event, { magicType: this._magicType }, this.myChart)), !0 + }, setMagicType: function (e) { + this._resetMark(), this._magicType = e, !this._isSilence && this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED, null, { magicType: this._magicType }, this.myChart) + }, __onCustomHandler: function (e) { + var t = e.target.style.iconType, i = this.option.toolbox.feature[t].onclick + 'function' == typeof i && i.call(this, this.option) + }, reset: function (e, t) { + if (t && this.clear(), this.query(e, 'toolbox.show') && this.query(e, 'toolbox.feature.magicType.show')) { + var i = e.toolbox.feature.magicType.type, n = i.length + for (this._magicMap = {}; n--;) this._magicMap[i[n]] = !0 + n = e.series.length + for (var a, o; n--;) a = e.series[n].type, this._magicMap[a] && (o = e.xAxis instanceof Array ? e.xAxis[e.series[n].xAxisIndex || 0] : e.xAxis, o && 'category' === (o.type || 'category') && (o.__boundaryGap = null != o.boundaryGap ? o.boundaryGap : !0), o = e.yAxis instanceof Array ? e.yAxis[e.series[n].yAxisIndex || 0] : e.yAxis, o && 'category' === o.type && (o.__boundaryGap = null != o.boundaryGap ? o.boundaryGap : !0), e.series[n].__type = a, e.series[n].__itemStyle = l.clone(e.series[n].itemStyle || {})), (this._magicMap[V] || this._magicMap[U]) && (e.series[n].__stack = e.series[n].stack) + } + this._magicType = t ? {} : this._magicType || {} + for (var r in this._magicType) if (this._magicType[r]) { + this.option = e, this.getMagicOption() + break + } + var s = e.dataZoom + if (s && s.show) { + var h = null != s.start && s.start >= 0 && s.start <= 100 ? s.start : 0, + m = null != s.end && s.end >= 0 && s.end <= 100 ? s.end : 100 + h > m && (h += m, m = h - m, h -= m), this._zoomQueue = [{ start: h, end: m, start2: 0, end2: 100 }] + } else this._zoomQueue = [] + }, getMagicOption: function () { + var e, t + if (this._magicType[s.CHART_TYPE_LINE] || this._magicType[s.CHART_TYPE_BAR]) { + for (var i = this._magicType[s.CHART_TYPE_LINE] ? !1 : !0, n = 0, a = this.option.series.length; a > n; n++) t = this.option.series[n].type, (t == s.CHART_TYPE_LINE || t == s.CHART_TYPE_BAR) && (e = this.option.xAxis instanceof Array ? this.option.xAxis[this.option.series[n].xAxisIndex || 0] : this.option.xAxis, e && 'category' === (e.type || 'category') && (e.boundaryGap = i ? !0 : e.__boundaryGap), e = this.option.yAxis instanceof Array ? this.option.yAxis[this.option.series[n].yAxisIndex || 0] : this.option.yAxis, e && 'category' === e.type && (e.boundaryGap = i ? !0 : e.__boundaryGap)) + this._defaultMagic(s.CHART_TYPE_LINE, s.CHART_TYPE_BAR) + } + if (this._defaultMagic(s.CHART_TYPE_CHORD, s.CHART_TYPE_FORCE), this._defaultMagic(s.CHART_TYPE_PIE, s.CHART_TYPE_FUNNEL), this._magicType[V] || this._magicType[U]) for (var n = 0, a = this.option.series.length; a > n; n++) this._magicType[V] ? (this.option.series[n].stack = '_ECHARTS_STACK_KENER_2014_', t = V) : this._magicType[U] && (this.option.series[n].stack = null, t = U), this._featureOption[t + 'Chart'] && l.merge(this.option.series[n], this._featureOption[t + 'Chart'] || {}, !0) + return this.option + }, _defaultMagic: function (e, t) { + if (this._magicType[e] || this._magicType[t]) for (var i = 0, n = this.option.series.length; n > i; i++) { + var a = this.option.series[i].type; + (a == e || a == t) && (this.option.series[i].type = this._magicType[e] ? e : t, this.option.series[i].itemStyle = l.clone(this.option.series[i].__itemStyle), a = this.option.series[i].type, this._featureOption[a + 'Chart'] && l.merge(this.option.series[i], this._featureOption[a + 'Chart'] || {}, !0)) + } + }, silence: function (e) { + this._isSilence = e + }, resize: function () { + this._resetMark(), this.clear(), this.option && this.option.toolbox && this.option.toolbox.show && this._buildShape(), this._dataView && this._dataView.resize() + }, hideDataView: function () { + this._dataView && this._dataView.hide() + }, clear: function (e) { + this.zr && (this.zr.delShape(this.shapeList), this.shapeList = [], e || (this.zr.delShape(this._markShapeList), this._markShapeList = [])) + }, onbeforDispose: function () { + this._dataView && (this._dataView.dispose(), this._dataView = null), this._markShapeList = null + }, refresh: function (e) { + e && (this._resetMark(), this._resetZoom(), e.toolbox = this.reformOption(e.toolbox), this.option = e, this.clear(!0), e.toolbox.show && this._buildShape(), this.hideDataView()) + } + }, l.inherits(t, i), e('../component').define('toolbox', t), t + }), i('echarts/component', [], function () { + var e = {}, t = {} + return e.define = function (i, n) { + return t[i] = n, e + }, e.get = function (e) { + return t[e] + }, e + }), i('echarts/component/title', ['require', './base', 'zrender/shape/Text', 'zrender/shape/Rectangle', '../config', 'zrender/tool/util', 'zrender/tool/area', 'zrender/tool/color', '../component'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Text'), a = e('zrender/shape/Rectangle'), o = e('../config') + o.title = { + zlevel: 0, + z: 6, + show: !0, + text: '', + subtext: '', + x: 'left', + y: 'top', + backgroundColor: 'rgba(0,0,0,0)', + borderColor: '#ccc', + borderWidth: 0, + padding: 5, + itemGap: 5, + textStyle: { fontSize: 18, fontWeight: 'bolder', color: '#333' }, + subtextStyle: { color: '#aaa' } + } + var r = e('zrender/tool/util'), s = e('zrender/tool/area'), l = e('zrender/tool/color') + return t.prototype = { + type: o.COMPONENT_TYPE_TITLE, _buildShape: function () { + if (this.titleOption.show) { + this._itemGroupLocation = this._getItemGroupLocation(), this._buildBackground(), this._buildItem() + for (var e = 0, t = this.shapeList.length; t > e; e++) this.zr.addShape(this.shapeList[e]) + } + }, _buildItem: function () { + var e = this.titleOption.text, t = this.titleOption.link, i = this.titleOption.target, + a = this.titleOption.subtext, o = this.titleOption.sublink, r = this.titleOption.subtarget, + s = this.getFont(this.titleOption.textStyle), h = this.getFont(this.titleOption.subtextStyle), + m = this._itemGroupLocation.x, V = this._itemGroupLocation.y, U = this._itemGroupLocation.width, + d = this._itemGroupLocation.height, p = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { y: V, color: this.titleOption.textStyle.color, text: e, textFont: s, textBaseline: 'top' }, + highlightStyle: { color: l.lift(this.titleOption.textStyle.color, 1), brushType: 'fill' }, + hoverable: !1 + } + t && (p.hoverable = !0, p.clickable = !0, p.onclick = function () { + i && 'self' == i ? window.location = t : window.open(t) + }) + var c = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { + y: V + d, + color: this.titleOption.subtextStyle.color, + text: a, + textFont: h, + textBaseline: 'bottom' + }, + highlightStyle: { color: l.lift(this.titleOption.subtextStyle.color, 1), brushType: 'fill' }, + hoverable: !1 + } + switch (o && (c.hoverable = !0, c.clickable = !0, c.onclick = function () { + r && 'self' == r ? window.location = o : window.open(o) + }), this.titleOption.x) { + case'center': + p.style.x = c.style.x = m + U / 2, p.style.textAlign = c.style.textAlign = 'center' + break + case'left': + p.style.x = c.style.x = m, p.style.textAlign = c.style.textAlign = 'left' + break + case'right': + p.style.x = c.style.x = m + U, p.style.textAlign = c.style.textAlign = 'right' + break + default: + m = this.titleOption.x - 0, m = isNaN(m) ? 0 : m, p.style.x = c.style.x = m + } + this.titleOption.textAlign && (p.style.textAlign = c.style.textAlign = this.titleOption.textAlign), this.shapeList.push(new n(p)), '' !== a && this.shapeList.push(new n(c)) + }, _buildBackground: function () { + var e = this.reformCssArray(this.titleOption.padding) + this.shapeList.push(new a({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + x: this._itemGroupLocation.x - e[3], + y: this._itemGroupLocation.y - e[0], + width: this._itemGroupLocation.width + e[3] + e[1], + height: this._itemGroupLocation.height + e[0] + e[2], + brushType: 0 === this.titleOption.borderWidth ? 'fill' : 'both', + color: this.titleOption.backgroundColor, + strokeColor: this.titleOption.borderColor, + lineWidth: this.titleOption.borderWidth + } + })) + }, _getItemGroupLocation: function () { + var e, t = this.reformCssArray(this.titleOption.padding), i = this.titleOption.text, + n = this.titleOption.subtext, a = this.getFont(this.titleOption.textStyle), + o = this.getFont(this.titleOption.subtextStyle), + r = Math.max(s.getTextWidth(i, a), s.getTextWidth(n, o)), + l = s.getTextHeight(i, a) + ('' === n ? 0 : this.titleOption.itemGap + s.getTextHeight(n, o)), + h = this.zr.getWidth() + switch (this.titleOption.x) { + case'center': + e = Math.floor((h - r) / 2) + break + case'left': + e = t[3] + this.titleOption.borderWidth + break + case'right': + e = h - r - t[1] - this.titleOption.borderWidth + break + default: + e = this.titleOption.x - 0, e = isNaN(e) ? 0 : e + } + var m, V = this.zr.getHeight() + switch (this.titleOption.y) { + case'top': + m = t[0] + this.titleOption.borderWidth + break + case'bottom': + m = V - l - t[2] - this.titleOption.borderWidth + break + case'center': + m = Math.floor((V - l) / 2) + break + default: + m = this.titleOption.y - 0, m = isNaN(m) ? 0 : m + } + return { x: e, y: m, width: r, height: l } + }, refresh: function (e) { + e && (this.option = e, this.option.title = this.reformOption(this.option.title), this.titleOption = this.option.title, this.titleOption.textStyle = this.getTextStyle(this.titleOption.textStyle), this.titleOption.subtextStyle = this.getTextStyle(this.titleOption.subtextStyle)), this.clear(), this._buildShape() + } + }, r.inherits(t, i), e('../component').define('title', t), t + }), i('echarts/component/tooltip', ['require', './base', '../util/shape/Cross', 'zrender/shape/Line', 'zrender/shape/Rectangle', '../config', '../util/ecData', 'zrender/config', 'zrender/tool/event', 'zrender/tool/area', 'zrender/tool/color', 'zrender/tool/util', 'zrender/shape/Base', '../component'], function (e) { + function t (e, t, o, r, s) { + i.call(this, e, t, o, r, s), this.dom = s.dom + var l = this + l._onmousemove = function (e) { + return l.__onmousemove(e) + }, l._onglobalout = function (e) { + return l.__onglobalout(e) + }, this.zr.on(h.EVENT.MOUSEMOVE, l._onmousemove), this.zr.on(h.EVENT.GLOBALOUT, l._onglobalout), l._hide = function (e) { + return l.__hide(e) + }, l._tryShow = function (e) { + return l.__tryShow(e) + }, l._refixed = function (e) { + return l.__refixed(e) + }, l._setContent = function (e, t) { + return l.__setContent(e, t) + }, this._tDom = this._tDom || document.createElement('div'), this._tDom.onselectstart = function () { + return !1 + }, this._tDom.onmouseover = function () { + l._mousein = !0 + }, this._tDom.onmouseout = function () { + l._mousein = !1 + }, this._tDom.className = 'echarts-tooltip', this._tDom.style.position = 'absolute', this.hasAppend = !1, this._axisLineShape && this.zr.delShape(this._axisLineShape.id), this._axisLineShape = new a({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + invisible: !0, + hoverable: !1 + }), this.shapeList.push(this._axisLineShape), this.zr.addShape(this._axisLineShape), this._axisShadowShape && this.zr.delShape(this._axisShadowShape.id), this._axisShadowShape = new a({ + zlevel: this.getZlevelBase(), + z: 1, + invisible: !0, + hoverable: !1 + }), this.shapeList.push(this._axisShadowShape), this.zr.addShape(this._axisShadowShape), this._axisCrossShape && this.zr.delShape(this._axisCrossShape.id), this._axisCrossShape = new n({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + invisible: !0, + hoverable: !1 + }), this.shapeList.push(this._axisCrossShape), this.zr.addShape(this._axisCrossShape), this.showing = !1, this.refresh(r) + } + + var i = e('./base'), n = e('../util/shape/Cross'), a = e('zrender/shape/Line'), + o = e('zrender/shape/Rectangle'), r = new o({}), s = e('../config') + s.tooltip = { + zlevel: 1, + z: 8, + show: !0, + showContent: !0, + trigger: 'item', + islandFormatter: '{a}
        {b} : {c}', + showDelay: 20, + hideDelay: 100, + transitionDuration: .4, + enterable: !1, + backgroundColor: 'rgba(0,0,0,0.7)', + borderColor: '#333', + borderRadius: 4, + borderWidth: 0, + padding: 5, + axisPointer: { + type: 'line', + lineStyle: { color: '#48b', width: 2, type: 'solid' }, + crossStyle: { color: '#1e90ff', width: 1, type: 'dashed' }, + shadowStyle: { color: 'rgba(150,150,150,0.3)', width: 'auto', type: 'default' } + }, + textStyle: { color: '#fff' } + } + var l = e('../util/ecData'), h = e('zrender/config'), m = e('zrender/tool/event'), V = e('zrender/tool/area'), + U = e('zrender/tool/color'), d = e('zrender/tool/util'), p = e('zrender/shape/Base') + return t.prototype = { + type: s.COMPONENT_TYPE_TOOLTIP, + _gCssText: 'position:absolute;display:block;border-style:solid;white-space:nowrap;', + _style: function (e) { + if (!e) return '' + var t = [] + if (e.transitionDuration) { + var i = 'left ' + e.transitionDuration + 's,top ' + e.transitionDuration + 's' + t.push('transition:' + i), t.push('-moz-transition:' + i), t.push('-webkit-transition:' + i), t.push('-o-transition:' + i) + } + e.backgroundColor && (t.push('background-Color:' + U.toHex(e.backgroundColor)), t.push('filter:alpha(opacity=70)'), t.push('background-Color:' + e.backgroundColor)), null != e.borderWidth && t.push('border-width:' + e.borderWidth + 'px'), null != e.borderColor && t.push('border-color:' + e.borderColor), null != e.borderRadius && (t.push('border-radius:' + e.borderRadius + 'px'), t.push('-moz-border-radius:' + e.borderRadius + 'px'), t.push('-webkit-border-radius:' + e.borderRadius + 'px'), t.push('-o-border-radius:' + e.borderRadius + 'px')) + var n = e.textStyle + n && (n.color && t.push('color:' + n.color), n.decoration && t.push('text-decoration:' + n.decoration), n.align && t.push('text-align:' + n.align), n.fontFamily && t.push('font-family:' + n.fontFamily), n.fontSize && t.push('font-size:' + n.fontSize + 'px'), n.fontSize && t.push('line-height:' + Math.round(3 * n.fontSize / 2) + 'px'), n.fontStyle && t.push('font-style:' + n.fontStyle), n.fontWeight && t.push('font-weight:' + n.fontWeight)) + var a = e.padding + return null != a && (a = this.reformCssArray(a), t.push('padding:' + a[0] + 'px ' + a[1] + 'px ' + a[2] + 'px ' + a[3] + 'px')), t = t.join(';') + ';' + }, + __hide: function () { + this._lastDataIndex = -1, this._lastSeriesIndex = -1, this._lastItemTriggerId = -1, this._tDom && (this._tDom.style.display = 'none') + var e = !1 + this._axisLineShape.invisible || (this._axisLineShape.invisible = !0, + this.zr.modShape(this._axisLineShape.id), e = !0), this._axisShadowShape.invisible || (this._axisShadowShape.invisible = !0, this.zr.modShape(this._axisShadowShape.id), e = !0), this._axisCrossShape.invisible || (this._axisCrossShape.invisible = !0, this.zr.modShape(this._axisCrossShape.id), e = !0), this._lastTipShape && this._lastTipShape.tipShape.length > 0 && (this.zr.delShape(this._lastTipShape.tipShape), this._lastTipShape = !1, this.shapeList.length = 2), e && this.zr.refreshNextFrame(), this.showing = !1 + }, + _show: function (e, t, i, n) { + var a = this._tDom.offsetHeight, o = this._tDom.offsetWidth + e && ('function' == typeof e && (e = e([t, i])), e instanceof Array && (t = e[0], i = e[1])), t + o > this._zrWidth && (t -= o + 40), i + a > this._zrHeight && (i -= a - 20), 20 > i && (i = 0), this._tDom.style.cssText = this._gCssText + this._defaultCssText + (n ? n : '') + 'left:' + t + 'px;top:' + i + 'px;', (10 > a || 10 > o) && setTimeout(this._refixed, 20), this.showing = !0 + }, + __refixed: function () { + if (this._tDom) { + var e = '', t = this._tDom.offsetHeight, i = this._tDom.offsetWidth + this._tDom.offsetLeft + i > this._zrWidth && (e += 'left:' + (this._zrWidth - i - 20) + 'px;'), this._tDom.offsetTop + t > this._zrHeight && (e += 'top:' + (this._zrHeight - t - 10) + 'px;'), '' !== e && (this._tDom.style.cssText += e) + } + }, + __tryShow: function () { + var e, t + if (this._curTarget) { + if ('island' === this._curTarget._type && this.option.tooltip.show) return void this._showItemTrigger() + var i = l.get(this._curTarget, 'series'), n = l.get(this._curTarget, 'data') + e = this.deepQuery([n, i, this.option], 'tooltip.show'), null != i && null != n && e ? (t = this.deepQuery([n, i, this.option], 'tooltip.trigger'), 'axis' === t ? this._showAxisTrigger(i.xAxisIndex, i.yAxisIndex, l.get(this._curTarget, 'dataIndex')) : this._showItemTrigger()) : (clearTimeout(this._hidingTicket), clearTimeout(this._showingTicket), this._hidingTicket = setTimeout(this._hide, this._hideDelay)) + } else this._findPolarTrigger() || this._findAxisTrigger() + }, + _findAxisTrigger: function () { + if (!this.component.xAxis || !this.component.yAxis) return void (this._hidingTicket = setTimeout(this._hide, this._hideDelay)) + for (var e, t, i = this.option.series, n = 0, a = i.length; a > n; n++) if ('axis' === this.deepQuery([i[n], this.option], 'tooltip.trigger')) return e = i[n].xAxisIndex || 0, t = i[n].yAxisIndex || 0, this.component.xAxis.getAxis(e) && this.component.xAxis.getAxis(e).type === s.COMPONENT_TYPE_AXIS_CATEGORY ? void this._showAxisTrigger(e, t, this._getNearestDataIndex('x', this.component.xAxis.getAxis(e))) : this.component.yAxis.getAxis(t) && this.component.yAxis.getAxis(t).type === s.COMPONENT_TYPE_AXIS_CATEGORY ? void this._showAxisTrigger(e, t, this._getNearestDataIndex('y', this.component.yAxis.getAxis(t))) : void this._showAxisTrigger(e, t, -1) + 'cross' === this.option.tooltip.axisPointer.type && this._showAxisTrigger(-1, -1, -1) + }, + _findPolarTrigger: function () { + if (!this.component.polar) return !1 + var e, t = m.getX(this._event), i = m.getY(this._event), + n = this.component.polar.getNearestIndex([t, i]) + return n ? (e = n.valueIndex, n = n.polarIndex) : n = -1, -1 != n ? this._showPolarTrigger(n, e) : !1 + }, + _getNearestDataIndex: function (e, t) { + var i = -1, n = m.getX(this._event), a = m.getY(this._event) + if ('x' === e) { + for (var o, r, s = this.component.grid.getXend(), l = t.getCoordByIndex(i); s > l && (r = l, n >= l);) o = l, l = t.getCoordByIndex(++i) + return 0 >= i ? i = 0 : r - n >= n - o ? i -= 1 : null == t.getNameByIndex(i) && (i -= 1), i + } + for (var h, V, U = this.component.grid.getY(), l = t.getCoordByIndex(i); l > U && (h = l, l >= a);) V = l, l = t.getCoordByIndex(++i) + return 0 >= i ? i = 0 : a - h >= V - a ? i -= 1 : null == t.getNameByIndex(i) && (i -= 1), i + }, + _showAxisTrigger: function (e, t, i) { + if (!this._event.connectTrigger && this.messageCenter.dispatch(s.EVENT.TOOLTIP_IN_GRID, this._event, null, this.myChart), null == this.component.xAxis || null == this.component.yAxis || null == e || null == t) return clearTimeout(this._hidingTicket), clearTimeout(this._showingTicket), void (this._hidingTicket = setTimeout(this._hide, this._hideDelay)) + var n, a, o, r, l = this.option.series, h = [], V = [], U = '' + if ('axis' === this.option.tooltip.trigger) { + if (!this.option.tooltip.show) return + a = this.option.tooltip.formatter, o = this.option.tooltip.position + } + var d, p, + c = -1 != e && this.component.xAxis.getAxis(e).type === s.COMPONENT_TYPE_AXIS_CATEGORY ? 'xAxis' : -1 != t && this.component.yAxis.getAxis(t).type === s.COMPONENT_TYPE_AXIS_CATEGORY ? 'yAxis' : !1 + if (c) { + var u = 'xAxis' == c ? e : t + n = this.component[c].getAxis(u) + for (var y = 0, g = l.length; g > y; y++) this._isSelected(l[y].name) && l[y][c + 'Index'] === u && 'axis' === this.deepQuery([l[y], this.option], 'tooltip.trigger') && (r = this.query(l[y], 'tooltip.showContent') || r, a = this.query(l[y], 'tooltip.formatter') || a, o = this.query(l[y], 'tooltip.position') || o, U += this._style(this.query(l[y], 'tooltip')), null != l[y].stack && 'xAxis' == c ? (h.unshift(l[y]), V.unshift(y)) : (h.push(l[y]), V.push(y))) + this.messageCenter.dispatch(s.EVENT.TOOLTIP_HOVER, this._event, { + seriesIndex: V, + dataIndex: i + }, this.myChart) + var b + 'xAxis' == c ? (d = this.subPixelOptimize(n.getCoordByIndex(i), this._axisLineWidth), p = m.getY(this._event), b = [d, this.component.grid.getY(), d, this.component.grid.getYend()]) : (d = m.getX(this._event), p = this.subPixelOptimize(n.getCoordByIndex(i), this._axisLineWidth), b = [this.component.grid.getX(), p, this.component.grid.getXend(), p]), this._styleAxisPointer(h, b[0], b[1], b[2], b[3], n.getGap(), d, p) + } else d = m.getX(this._event), p = m.getY(this._event), this._styleAxisPointer(l, this.component.grid.getX(), p, this.component.grid.getXend(), p, 0, d, p), i >= 0 ? this._showItemTrigger(!0) : (clearTimeout(this._hidingTicket), clearTimeout(this._showingTicket), this._tDom.style.display = 'none') + if (h.length > 0) { + if (this._lastItemTriggerId = -1, this._lastDataIndex != i || this._lastSeriesIndex != V[0]) { + this._lastDataIndex = i, this._lastSeriesIndex = V[0] + var f, k + if ('function' == typeof a) { + for (var x = [], y = 0, g = h.length; g > y; y++) f = h[y].data[i], k = this.getDataFromOption(f, '-'), x.push({ + seriesIndex: V[y], + seriesName: h[y].name || '', + series: h[y], + dataIndex: i, + data: f, + name: n.getNameByIndex(i), + value: k, + 0: h[y].name || '', + 1: n.getNameByIndex(i), + 2: k, + 3: f + }) + this._curTicket = 'axis:' + i, this._tDom.innerHTML = a.call(this.myChart, x, this._curTicket, this._setContent) + } else if ('string' == typeof a) { + this._curTicket = 0 / 0, a = a.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}') + for (var y = 0, g = h.length; g > y; y++) a = a.replace('{a' + y + '}', this._encodeHTML(h[y].name || '')), a = a.replace('{b' + y + '}', this._encodeHTML(n.getNameByIndex(i))), f = h[y].data[i], f = this.getDataFromOption(f, '-'), a = a.replace('{c' + y + '}', f instanceof Array ? f : this.numAddCommas(f)) + this._tDom.innerHTML = a + } else { + this._curTicket = 0 / 0, a = this._encodeHTML(n.getNameByIndex(i)) + for (var y = 0, g = h.length; g > y; y++) a += '
        ' + this._encodeHTML(h[y].name || '') + ' : ', f = h[y].data[i], f = this.getDataFromOption(f, '-'), a += f instanceof Array ? f : this.numAddCommas(f) + this._tDom.innerHTML = a + } + } + if (r === !1 || !this.option.tooltip.showContent) return + this.hasAppend || (this._tDom.style.left = this._zrWidth / 2 + 'px', this._tDom.style.top = this._zrHeight / 2 + 'px', this.dom.firstChild.appendChild(this._tDom), this.hasAppend = !0), this._show(o, d + 10, p + 10, U) + } + }, + _showPolarTrigger: function (e, t) { + if (null == this.component.polar || null == e || null == t || 0 > t) return !1 + var i, n, a, o = this.option.series, r = [], s = [], l = '' + if ('axis' === this.option.tooltip.trigger) { + if (!this.option.tooltip.show) return !1 + i = this.option.tooltip.formatter, n = this.option.tooltip.position + } + for (var h = this.option.polar[e].indicator[t].text, V = 0, U = o.length; U > V; V++) this._isSelected(o[V].name) && o[V].polarIndex === e && 'axis' === this.deepQuery([o[V], this.option], 'tooltip.trigger') && (a = this.query(o[V], 'tooltip.showContent') || a, i = this.query(o[V], 'tooltip.formatter') || i, n = this.query(o[V], 'tooltip.position') || n, l += this._style(this.query(o[V], 'tooltip')), r.push(o[V]), s.push(V)) + if (r.length > 0) { + for (var d, p, c, u = [], V = 0, U = r.length; U > V; V++) { + d = r[V].data + for (var y = 0, g = d.length; g > y; y++) p = d[y], this._isSelected(p.name) && (p = null != p ? p : { + name: '', + value: { dataIndex: '-' } + }, c = this.getDataFromOption(p.value[t]), u.push({ + seriesIndex: s[V], + seriesName: r[V].name || '', + series: r[V], + dataIndex: t, + data: p, + name: p.name, + indicator: h, + value: c, + 0: r[V].name || '', + 1: p.name, + 2: c, + 3: h + })) + } + if (u.length <= 0) return + if (this._lastItemTriggerId = -1, this._lastDataIndex != t || this._lastSeriesIndex != s[0]) if (this._lastDataIndex = t, this._lastSeriesIndex = s[0], 'function' == typeof i) this._curTicket = 'axis:' + t, this._tDom.innerHTML = i.call(this.myChart, u, this._curTicket, this._setContent) else if ('string' == typeof i) { + i = i.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{d}', '{d0}') + for (var V = 0, U = u.length; U > V; V++) i = i.replace('{a' + V + '}', this._encodeHTML(u[V].seriesName)), i = i.replace('{b' + V + '}', this._encodeHTML(u[V].name)), i = i.replace('{c' + V + '}', this.numAddCommas(u[V].value)), i = i.replace('{d' + V + '}', this._encodeHTML(u[V].indicator)) + this._tDom.innerHTML = i + } else { + i = this._encodeHTML(u[0].name) + '
        ' + this._encodeHTML(u[0].indicator) + ' : ' + this.numAddCommas(u[0].value) + for (var V = 1, U = u.length; U > V; V++) i += '
        ' + this._encodeHTML(u[V].name) + '
        ', i += this._encodeHTML(u[V].indicator) + ' : ' + this.numAddCommas(u[V].value) + this._tDom.innerHTML = i + } + if (a === !1 || !this.option.tooltip.showContent) return + return this.hasAppend || (this._tDom.style.left = this._zrWidth / 2 + 'px', this._tDom.style.top = this._zrHeight / 2 + 'px', this.dom.firstChild.appendChild(this._tDom), this.hasAppend = !0), this._show(n, m.getX(this._event), m.getY(this._event), l), !0 + } + }, + _showItemTrigger: function (e) { + if (this._curTarget) { + var t, i, n, a = l.get(this._curTarget, 'series'), o = l.get(this._curTarget, 'seriesIndex'), + r = l.get(this._curTarget, 'data'), h = l.get(this._curTarget, 'dataIndex'), + V = l.get(this._curTarget, 'name'), U = l.get(this._curTarget, 'value'), + d = l.get(this._curTarget, 'special'), p = l.get(this._curTarget, 'special2'), + c = [r, a, this.option], u = '' + if ('island' != this._curTarget._type) { + var y = e ? 'axis' : 'item' + this.option.tooltip.trigger === y && (t = this.option.tooltip.formatter, i = this.option.tooltip.position), this.query(a, 'tooltip.trigger') === y && (n = this.query(a, 'tooltip.showContent') || n, t = this.query(a, 'tooltip.formatter') || t, i = this.query(a, 'tooltip.position') || i, u += this._style(this.query(a, 'tooltip'))), n = this.query(r, 'tooltip.showContent') || n, t = this.query(r, 'tooltip.formatter') || t, i = this.query(r, 'tooltip.position') || i, u += this._style(this.query(r, 'tooltip')) + } else this._lastItemTriggerId = 0 / 0, n = this.deepQuery(c, 'tooltip.showContent'), t = this.deepQuery(c, 'tooltip.islandFormatter'), i = this.deepQuery(c, 'tooltip.islandPosition') + this._lastDataIndex = -1, this._lastSeriesIndex = -1, this._lastItemTriggerId !== this._curTarget.id && (this._lastItemTriggerId = this._curTarget.id, 'function' == typeof t ? (this._curTicket = (a.name || '') + ':' + h, this._tDom.innerHTML = t.call(this.myChart, { + seriesIndex: o, + seriesName: a.name || '', + series: a, + dataIndex: h, + data: r, + name: V, + value: U, + percent: d, + indicator: d, + value2: p, + indicator2: p, + 0: a.name || '', + 1: V, + 2: U, + 3: d, + 4: p, + 5: r, + 6: o, + 7: h + }, this._curTicket, this._setContent)) : 'string' == typeof t ? (this._curTicket = 0 / 0, t = t.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}'), t = t.replace('{a0}', this._encodeHTML(a.name || '')).replace('{b0}', this._encodeHTML(V)).replace('{c0}', U instanceof Array ? U : this.numAddCommas(U)), t = t.replace('{d}', '{d0}').replace('{d0}', d || ''), t = t.replace('{e}', '{e0}').replace('{e0}', l.get(this._curTarget, 'special2') || ''), this._tDom.innerHTML = t) : (this._curTicket = 0 / 0, this._tDom.innerHTML = a.type === s.CHART_TYPE_RADAR && d ? this._itemFormatter.radar.call(this, a, V, U, d) : a.type === s.CHART_TYPE_EVENTRIVER ? this._itemFormatter.eventRiver.call(this, a, V, U, r) : '' + (null != a.name ? this._encodeHTML(a.name) + '
        ' : '') + ('' === V ? '' : this._encodeHTML(V) + ' : ') + (U instanceof Array ? U : this.numAddCommas(U)))) + var g = m.getX(this._event), b = m.getY(this._event) + this.deepQuery(c, 'tooltip.axisPointer.show') && this.component.grid ? this._styleAxisPointer([a], this.component.grid.getX(), b, this.component.grid.getXend(), b, 0, g, b) : this._hide(), n !== !1 && this.option.tooltip.showContent && (this.hasAppend || (this._tDom.style.left = this._zrWidth / 2 + 'px', this._tDom.style.top = this._zrHeight / 2 + 'px', this.dom.firstChild.appendChild(this._tDom), this.hasAppend = !0), this._show(i, g + 20, b - 20, u)) + } + }, + _itemFormatter: { + radar: function (e, t, i, n) { + var a = '' + a += this._encodeHTML('' === t ? e.name || '' : t), a += '' === a ? '' : '
        ' + for (var o = 0; o < n.length; o++) a += this._encodeHTML(n[o].text) + ' : ' + this.numAddCommas(i[o]) + '
        ' + return a + }, chord: function (e, t, i, n, a) { + if (null == a) return this._encodeHTML(t) + ' (' + this.numAddCommas(i) + ')' + var o = this._encodeHTML(t), r = this._encodeHTML(n) + return '' + (null != e.name ? this._encodeHTML(e.name) + '
        ' : '') + o + ' -> ' + r + ' (' + this.numAddCommas(i) + ')
        ' + r + ' -> ' + o + ' (' + this.numAddCommas(a) + ')' + }, eventRiver: function (e, t, i, n) { + var a = '' + a += this._encodeHTML('' === e.name ? '' : e.name + ' : '), a += this._encodeHTML(t), a += '' === a ? '' : '
        ', n = n.evolution + for (var o = 0, r = n.length; r > o; o++) a += '
        ') + return a + } + }, + _styleAxisPointer: function (e, t, i, n, a, o, r, s) { + if (e.length > 0) { + var l, h, m = this.option.tooltip.axisPointer, V = m.type, U = { line: {}, cross: {}, shadow: {} } + for (var d in U) U[d].color = m[d + 'Style'].color, U[d].width = m[d + 'Style'].width, U[d].type = m[d + 'Style'].type + for (var p = 0, c = e.length; c > p; p++) l = e[p], h = this.query(l, 'tooltip.axisPointer.type'), V = h || V, h && (U[h].color = this.query(l, 'tooltip.axisPointer.' + h + 'Style.color') || U[h].color, U[h].width = this.query(l, 'tooltip.axisPointer.' + h + 'Style.width') || U[h].width, U[h].type = this.query(l, 'tooltip.axisPointer.' + h + 'Style.type') || U[h].type) + if ('line' === V) { + var u = U.line.width, y = t == n + this._axisLineShape.style = { + xStart: y ? this.subPixelOptimize(t, u) : t, + yStart: y ? i : this.subPixelOptimize(i, u), + xEnd: y ? this.subPixelOptimize(n, u) : n, + yEnd: y ? a : this.subPixelOptimize(a, u), + strokeColor: U.line.color, + lineWidth: u, + lineType: U.line.type + }, this._axisLineShape.invisible = !1, this.zr.modShape(this._axisLineShape.id) + } else if ('cross' === V) { + var g = U.cross.width + this._axisCrossShape.style = { + brushType: 'stroke', + rect: this.component.grid.getArea(), + x: this.subPixelOptimize(r, g), + y: this.subPixelOptimize(s, g), + text: ('( ' + this.component.xAxis.getAxis(0).getValueFromCoord(r) + ' , ' + this.component.yAxis.getAxis(0).getValueFromCoord(s) + ' )').replace(' , ', ' ').replace(' , ', ' '), + textPosition: 'specific', + strokeColor: U.cross.color, + lineWidth: g, + lineType: U.cross.type + }, this.component.grid.getXend() - r > 100 ? (this._axisCrossShape.style.textAlign = 'left', this._axisCrossShape.style.textX = r + 10) : (this._axisCrossShape.style.textAlign = 'right', this._axisCrossShape.style.textX = r - 10), s - this.component.grid.getY() > 50 ? (this._axisCrossShape.style.textBaseline = 'bottom', this._axisCrossShape.style.textY = s - 10) : (this._axisCrossShape.style.textBaseline = 'top', this._axisCrossShape.style.textY = s + 10), this._axisCrossShape.invisible = !1, this.zr.modShape(this._axisCrossShape.id) + } else 'shadow' === V && ((null == U.shadow.width || 'auto' === U.shadow.width || isNaN(U.shadow.width)) && (U.shadow.width = o), t === n ? Math.abs(this.component.grid.getX() - t) < 2 ? (U.shadow.width /= 2, t = n += U.shadow.width / 2) : Math.abs(this.component.grid.getXend() - t) < 2 && (U.shadow.width /= 2, t = n -= U.shadow.width / 2) : i === a && (Math.abs(this.component.grid.getY() - i) < 2 ? (U.shadow.width /= 2, i = a += U.shadow.width / 2) : Math.abs(this.component.grid.getYend() - i) < 2 && (U.shadow.width /= 2, i = a -= U.shadow.width / 2)), this._axisShadowShape.style = { + xStart: t, + yStart: i, + xEnd: n, + yEnd: a, + strokeColor: U.shadow.color, + lineWidth: U.shadow.width + }, this._axisShadowShape.invisible = !1, this.zr.modShape(this._axisShadowShape.id)) + this.zr.refreshNextFrame() + } + }, + __onmousemove: function (e) { + if (clearTimeout(this._hidingTicket), clearTimeout(this._showingTicket), !this._mousein || !this._enterable) { + var t = e.target, i = m.getX(e.event), n = m.getY(e.event) + if (t) { + this._curTarget = t, this._event = e.event, this._event.zrenderX = i, this._event.zrenderY = n + var a + if (this._needAxisTrigger && this.component.polar && -1 != (a = this.component.polar.isInside([i, n]))) for (var o = this.option.series, l = 0, h = o.length; h > l; l++) if (o[l].polarIndex === a && 'axis' === this.deepQuery([o[l], this.option], 'tooltip.trigger')) { + this._curTarget = null + break + } + this._showingTicket = setTimeout(this._tryShow, this._showDelay) + } else this._curTarget = !1, this._event = e.event, this._event.zrenderX = i, this._event.zrenderY = n, this._needAxisTrigger && this.component.grid && V.isInside(r, this.component.grid.getArea(), i, n) ? this._showingTicket = setTimeout(this._tryShow, this._showDelay) : this._needAxisTrigger && this.component.polar && -1 != this.component.polar.isInside([i, n]) ? this._showingTicket = setTimeout(this._tryShow, this._showDelay) : (!this._event.connectTrigger && this.messageCenter.dispatch(s.EVENT.TOOLTIP_OUT_GRID, this._event, null, this.myChart), this._hidingTicket = setTimeout(this._hide, this._hideDelay)) + } + }, + __onglobalout: function () { + clearTimeout(this._hidingTicket), clearTimeout(this._showingTicket), this._hidingTicket = setTimeout(this._hide, this._hideDelay) + }, + __setContent: function (e, t) { + this._tDom && (e === this._curTicket && (this._tDom.innerHTML = t), setTimeout(this._refixed, 20)) + }, + ontooltipHover: function (e, t) { + if (!this._lastTipShape || this._lastTipShape && this._lastTipShape.dataIndex != e.dataIndex) { + this._lastTipShape && this._lastTipShape.tipShape.length > 0 && (this.zr.delShape(this._lastTipShape.tipShape), this.shapeList.length = 2) + for (var i = 0, n = t.length; n > i; i++) t[i].zlevel = this.getZlevelBase(), t[i].z = this.getZBase(), t[i].style = p.prototype.getHighlightStyle(t[i].style, t[i].highlightStyle), t[i].draggable = !1, t[i].hoverable = !1, t[i].clickable = !1, t[i].ondragend = null, t[i].ondragover = null, t[i].ondrop = null, this.shapeList.push(t[i]), this.zr.addShape(t[i]) + this._lastTipShape = { dataIndex: e.dataIndex, tipShape: t } + } + }, + ondragend: function () { + this._hide() + }, + onlegendSelected: function (e) { + this._selectedMap = e.selected + }, + _setSelectedMap: function () { + this._selectedMap = this.component.legend ? d.clone(this.component.legend.getSelectedMap()) : {} + }, + _isSelected: function (e) { + return null != this._selectedMap[e] ? this._selectedMap[e] : !0 + }, + showTip: function (e) { + if (e) { + var t, i = this.option.series + if (null != e.seriesIndex) t = e.seriesIndex else for (var n = e.seriesName, a = 0, o = i.length; o > a; a++) if (i[a].name === n) { + t = a + break + } + var r = i[t] + if (null != r) { + var m = this.myChart.chart[r.type], + V = 'axis' === this.deepQuery([r, this.option], 'tooltip.trigger') + if (m) if (V) { + var U = e.dataIndex + switch (m.type) { + case s.CHART_TYPE_LINE: + case s.CHART_TYPE_BAR: + case s.CHART_TYPE_K: + case s.CHART_TYPE_RADAR: + if (null == this.component.polar || r.data[0].value.length <= U) return + var d = r.polarIndex || 0, p = this.component.polar.getVector(d, U, 'max') + this._event = { zrenderX: p[0], zrenderY: p[1] }, this._showPolarTrigger(d, U) + } + } else { + var c, u, y = m.shapeList + switch (m.type) { + case s.CHART_TYPE_LINE: + case s.CHART_TYPE_BAR: + case s.CHART_TYPE_K: + case s.CHART_TYPE_TREEMAP: + case s.CHART_TYPE_SCATTER: + for (var U = e.dataIndex, a = 0, o = y.length; o > a; a++) if (null == y[a]._mark && l.get(y[a], 'seriesIndex') == t && l.get(y[a], 'dataIndex') == U) { + this._curTarget = y[a], c = y[a].style.x, u = m.type != s.CHART_TYPE_K ? y[a].style.y : y[a].style.y[0] + break + } + break + case s.CHART_TYPE_RADAR: + for (var U = e.dataIndex, a = 0, o = y.length; o > a; a++) if ('polygon' === y[a].type && l.get(y[a], 'seriesIndex') == t && l.get(y[a], 'dataIndex') == U) { + this._curTarget = y[a] + var p = this.component.polar.getCenter(r.polarIndex || 0) + c = p[0], u = p[1] + break + } + break + case s.CHART_TYPE_PIE: + for (var g = e.name, a = 0, o = y.length; o > a; a++) if ('sector' === y[a].type && l.get(y[a], 'seriesIndex') == t && l.get(y[a], 'name') == g) { + this._curTarget = y[a] + var b = this._curTarget.style, + f = (b.startAngle + b.endAngle) / 2 * Math.PI / 180 + c = this._curTarget.style.x + Math.cos(f) * b.r / 1.5, u = this._curTarget.style.y - Math.sin(f) * b.r / 1.5 + break + } + break + case s.CHART_TYPE_MAP: + for (var g = e.name, k = r.mapType, a = 0, o = y.length; o > a; a++) if ('text' === y[a].type && y[a]._mapType === k && y[a].style._name === g) { + this._curTarget = y[a], c = this._curTarget.style.x + this._curTarget.position[0], u = this._curTarget.style.y + this._curTarget.position[1] + break + } + break + case s.CHART_TYPE_CHORD: + for (var g = e.name, a = 0, o = y.length; o > a; a++) if ('sector' === y[a].type && l.get(y[a], 'name') == g) { + this._curTarget = y[a] + var b = this._curTarget.style, + f = (b.startAngle + b.endAngle) / 2 * Math.PI / 180 + return c = this._curTarget.style.x + Math.cos(f) * (b.r - 2), u = this._curTarget.style.y - Math.sin(f) * (b.r - 2), void this.zr.trigger(h.EVENT.MOUSEMOVE, { + zrenderX: c, + zrenderY: u + }) + } + break + case s.CHART_TYPE_FORCE: + for (var g = e.name, a = 0, o = y.length; o > a; a++) if ('circle' === y[a].type && l.get(y[a], 'name') == g) { + this._curTarget = y[a], c = this._curTarget.position[0], u = this._curTarget.position[1] + break + } + } + null != c && null != u && (this._event = { + zrenderX: c, + zrenderY: u + }, this.zr.addHoverShape(this._curTarget), this.zr.refreshHover(), this._showItemTrigger()) + } + } + } + }, + hideTip: function () { + this._hide() + }, + refresh: function (e) { + if (this._zrHeight = this.zr.getHeight(), this._zrWidth = this.zr.getWidth(), this._lastTipShape && this._lastTipShape.tipShape.length > 0 && this.zr.delShape(this._lastTipShape.tipShape), this._lastTipShape = !1, this.shapeList.length = 2, this._lastDataIndex = -1, this._lastSeriesIndex = -1, this._lastItemTriggerId = -1, e) { + this.option = e, this.option.tooltip = this.reformOption(this.option.tooltip), this.option.tooltip.textStyle = d.merge(this.option.tooltip.textStyle, this.ecTheme.textStyle), this._needAxisTrigger = !1, 'axis' === this.option.tooltip.trigger && (this._needAxisTrigger = !0) + for (var t = this.option.series, i = 0, n = t.length; n > i; i++) if ('axis' === this.query(t[i], 'tooltip.trigger')) { + this._needAxisTrigger = !0 + break + } + this._showDelay = this.option.tooltip.showDelay, this._hideDelay = this.option.tooltip.hideDelay, this._defaultCssText = this._style(this.option.tooltip), this._setSelectedMap(), this._axisLineWidth = this.option.tooltip.axisPointer.lineStyle.width, this._enterable = this.option.tooltip.enterable, !this._enterable && this._tDom.className.indexOf(h.elementClassName) < 0 && (this._tDom.className += ' ' + h.elementClassName) + } + if (this.showing) { + var a = this + setTimeout(function () { + a.zr.trigger(h.EVENT.MOUSEMOVE, a.zr.handler._event) + }, 50) + } + }, + onbeforDispose: function () { + this._lastTipShape && this._lastTipShape.tipShape.length > 0 && this.zr.delShape(this._lastTipShape.tipShape), clearTimeout(this._hidingTicket), clearTimeout(this._showingTicket), this.zr.un(h.EVENT.MOUSEMOVE, this._onmousemove), this.zr.un(h.EVENT.GLOBALOUT, this._onglobalout), this.hasAppend && this.dom.firstChild && this.dom.firstChild.removeChild(this._tDom), this._tDom = null + }, + _encodeHTML: function (e) { + return String(e).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, ''') + } + }, d.inherits(t, i), e('../component').define('tooltip', t), t + }), i('echarts/component/legend', ['require', './base', 'zrender/shape/Text', 'zrender/shape/Rectangle', 'zrender/shape/Sector', '../util/shape/Icon', '../util/shape/Candle', '../config', 'zrender/tool/util', 'zrender/tool/area', '../component'], function (e) { + function t (e, t, n, a, o) { + if (!this.query(a, 'legend.data')) return void console.error('option.legend.data has not been defined.') + i.call(this, e, t, n, a, o) + var r = this + r._legendSelected = function (e) { + r.__legendSelected(e) + }, r._dispatchHoverLink = function (e) { + return r.__dispatchHoverLink(e) + }, this._colorIndex = 0, this._colorMap = {}, this._selectedMap = {}, this._hasDataMap = {}, this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Text'), a = e('zrender/shape/Rectangle'), + o = e('zrender/shape/Sector'), r = e('../util/shape/Icon'), s = e('../util/shape/Candle'), + l = e('../config') + l.legend = { + zlevel: 0, + z: 4, + show: !0, + orient: 'horizontal', + x: 'center', + y: 'top', + backgroundColor: 'rgba(0,0,0,0)', + borderColor: '#ccc', + borderWidth: 0, + padding: 5, + itemGap: 10, + itemWidth: 20, + itemHeight: 14, + textStyle: { color: '#333' }, + selectedMode: !0 + } + var h = e('zrender/tool/util'), m = e('zrender/tool/area') + t.prototype = { + type: l.COMPONENT_TYPE_LEGEND, _buildShape: function () { + if (this.legendOption.show) { + this._itemGroupLocation = this._getItemGroupLocation(), this._buildBackground(), this._buildItem() + for (var e = 0, t = this.shapeList.length; t > e; e++) this.zr.addShape(this.shapeList[e]) + } + }, _buildItem: function () { + var e, t, i, a, o, s, l, V, U = this.legendOption.data, d = U.length, p = this.legendOption.textStyle, + c = this.zr.getWidth(), u = this.zr.getHeight(), y = this._itemGroupLocation.x, + g = this._itemGroupLocation.y, b = this.legendOption.itemWidth, f = this.legendOption.itemHeight, + k = this.legendOption.itemGap + 'vertical' === this.legendOption.orient && 'right' === this.legendOption.x && (y = this._itemGroupLocation.x + this._itemGroupLocation.width - b) + for (var x = 0; d > x; x++) o = h.merge(U[x].textStyle || {}, p), s = this.getFont(o), e = this._getName(U[x]), l = this._getFormatterName(e), '' !== e ? (t = U[x].icon || this._getSomethingByName(e).type, V = this.getColor(e), 'horizontal' === this.legendOption.orient ? 200 > c - y && b + 5 + m.getTextWidth(l, s) + (x === d - 1 || '' === U[x + 1] ? 0 : k) >= c - y && (y = this._itemGroupLocation.x, g += f + k) : 200 > u - g && f + (x === d - 1 || '' === U[x + 1] ? 0 : k) >= u - g && ('right' === this.legendOption.x ? y -= this._itemGroupLocation.maxWidth + k : y += this._itemGroupLocation.maxWidth + k, g = this._itemGroupLocation.y), i = this._getItemShapeByType(y, g, b, f, this._selectedMap[e] && this._hasDataMap[e] ? V : '#ccc', t, V), i._name = e, i = new r(i), a = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { + x: y + b + 5, + y: g + f / 2, + color: this._selectedMap[e] ? 'auto' === o.color ? V : o.color : '#ccc', + text: l, + textFont: s, + textBaseline: 'middle' + }, + highlightStyle: { color: V, brushType: 'fill' }, + hoverable: !!this.legendOption.selectedMode, + clickable: !!this.legendOption.selectedMode + }, 'vertical' === this.legendOption.orient && 'right' === this.legendOption.x && (a.style.x -= b + 10, a.style.textAlign = 'right'), a._name = e, a = new n(a), this.legendOption.selectedMode && (i.onclick = a.onclick = this._legendSelected, i.onmouseover = a.onmouseover = this._dispatchHoverLink, i.hoverConnect = a.id, a.hoverConnect = i.id), this.shapeList.push(i), this.shapeList.push(a), 'horizontal' === this.legendOption.orient ? y += b + 5 + m.getTextWidth(l, s) + k : g += f + k) : 'horizontal' === this.legendOption.orient ? (y = this._itemGroupLocation.x, g += f + k) : ('right' === this.legendOption.x ? y -= this._itemGroupLocation.maxWidth + k : y += this._itemGroupLocation.maxWidth + k, g = this._itemGroupLocation.y) + 'horizontal' === this.legendOption.orient && 'center' === this.legendOption.x && g != this._itemGroupLocation.y && this._mLineOptimize() + }, _getName: function (e) { + return 'undefined' != typeof e.name ? e.name : e + }, _getFormatterName: function (e) { + var t, i = this.legendOption.formatter + return t = 'function' == typeof i ? i.call(this.myChart, e) : 'string' == typeof i ? i.replace('{name}', e) : e + }, _getFormatterNameFromData: function (e) { + var t = this._getName(e) + return this._getFormatterName(t) + }, _mLineOptimize: function () { + for (var e = [], t = this._itemGroupLocation.x, i = 2, n = this.shapeList.length; n > i; i++) this.shapeList[i].style.x === t ? e.push((this._itemGroupLocation.width - (this.shapeList[i - 1].style.x + m.getTextWidth(this.shapeList[i - 1].style.text, this.shapeList[i - 1].style.textFont) - t)) / 2) : i === n - 1 && e.push((this._itemGroupLocation.width - (this.shapeList[i].style.x + m.getTextWidth(this.shapeList[i].style.text, this.shapeList[i].style.textFont) - t)) / 2) + for (var a = -1, i = 1, n = this.shapeList.length; n > i; i++) this.shapeList[i].style.x === t && a++, 0 !== e[a] && (this.shapeList[i].style.x += e[a]) + }, _buildBackground: function () { + var e = this.reformCssArray(this.legendOption.padding) + this.shapeList.push(new a({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + x: this._itemGroupLocation.x - e[3], + y: this._itemGroupLocation.y - e[0], + width: this._itemGroupLocation.width + e[3] + e[1], + height: this._itemGroupLocation.height + e[0] + e[2], + brushType: 0 === this.legendOption.borderWidth ? 'fill' : 'both', + color: this.legendOption.backgroundColor, + strokeColor: this.legendOption.borderColor, + lineWidth: this.legendOption.borderWidth + } + })) + }, _getItemGroupLocation: function () { + var e = this.legendOption.data, t = e.length, i = this.legendOption.itemGap, + n = this.legendOption.itemWidth + 5, a = this.legendOption.itemHeight, + o = this.legendOption.textStyle, r = this.getFont(o), s = 0, l = 0, + V = this.reformCssArray(this.legendOption.padding), U = this.zr.getWidth() - V[1] - V[3], + d = this.zr.getHeight() - V[0] - V[2], p = 0, c = 0 + if ('horizontal' === this.legendOption.orient) { + l = a + for (var u = 0; t > u; u++) if ('' !== this._getName(e[u])) { + var y = m.getTextWidth(this._getFormatterNameFromData(e[u]), e[u].textStyle ? this.getFont(h.merge(e[u].textStyle || {}, o)) : r) + p + n + y + i > U ? (p -= i, s = Math.max(s, p), l += a + i, p = 0) : (p += n + y + i, s = Math.max(s, p - i)) + } else p -= i, s = Math.max(s, p), l += a + i, p = 0 + } else { + for (var u = 0; t > u; u++) c = Math.max(c, m.getTextWidth(this._getFormatterNameFromData(e[u]), e[u].textStyle ? this.getFont(h.merge(e[u].textStyle || {}, o)) : r)) + c += n, s = c + for (var u = 0; t > u; u++) '' !== this._getName(e[u]) ? p + a + i > d ? (s += c + i, p -= i, l = Math.max(l, p), p = 0) : (p += a + i, l = Math.max(l, p - i)) : (s += c + i, p -= i, l = Math.max(l, p), p = 0) + } + U = this.zr.getWidth(), d = this.zr.getHeight() + var g + switch (this.legendOption.x) { + case'center': + g = Math.floor((U - s) / 2) + break + case'left': + g = V[3] + this.legendOption.borderWidth + break + case'right': + g = U - s - V[1] - V[3] - 2 * this.legendOption.borderWidth + break + default: + g = this.parsePercent(this.legendOption.x, U) + } + var b + switch (this.legendOption.y) { + case'top': + b = V[0] + this.legendOption.borderWidth + break + case'bottom': + b = d - l - V[0] - V[2] - 2 * this.legendOption.borderWidth + break + case'center': + b = Math.floor((d - l) / 2) + break + default: + b = this.parsePercent(this.legendOption.y, d) + } + return { x: g, y: b, width: s, height: l, maxWidth: c } + }, _getSomethingByName: function (e) { + for (var t, i = this.option.series, n = 0, a = i.length; a > n; n++) { + if (i[n].name === e) return { + type: i[n].type, + series: i[n], + seriesIndex: n, + data: null, + dataIndex: -1 + } + if (i[n].type === l.CHART_TYPE_PIE || i[n].type === l.CHART_TYPE_RADAR || i[n].type === l.CHART_TYPE_CHORD || i[n].type === l.CHART_TYPE_FORCE || i[n].type === l.CHART_TYPE_FUNNEL || i[n].type === l.CHART_TYPE_TREEMAP) { + t = i[n].categories || i[n].data || i[n].nodes + for (var o = 0, r = t.length; r > o; o++) if (t[o].name === e) return { + type: i[n].type, + series: i[n], + seriesIndex: n, + data: t[o], + dataIndex: o + } + } + } + return { type: 'bar', series: null, seriesIndex: -1, data: null, dataIndex: -1 } + }, _getItemShapeByType: function (e, t, i, n, a, o, r) { + var s, h = '#ccc' === a ? r : a, m = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { + iconType: 'legendicon' + o, + x: e, + y: t, + width: i, + height: n, + color: a, + strokeColor: a, + lineWidth: 2 + }, + highlightStyle: { color: h, strokeColor: h, lineWidth: 1 }, + hoverable: this.legendOption.selectedMode, + clickable: this.legendOption.selectedMode + } + if (o.match('image')) { + var s = o.replace(new RegExp('^image:\\/\\/'), '') + o = 'image' + } + switch (o) { + case'line': + m.style.brushType = 'stroke', m.highlightStyle.lineWidth = 3 + break + case'radar': + case'venn': + case'tree': + case'treemap': + case'scatter': + m.highlightStyle.lineWidth = 3 + break + case'k': + m.style.brushType = 'both', m.highlightStyle.lineWidth = 3, m.highlightStyle.color = m.style.color = this.deepQuery([this.ecTheme, l], 'k.itemStyle.normal.color') || '#fff', m.style.strokeColor = '#ccc' != a ? this.deepQuery([this.ecTheme, l], 'k.itemStyle.normal.lineStyle.color') || '#ff3200' : a + break + case'image': + m.style.iconType = 'image', m.style.image = s, '#ccc' === a && (m.style.opacity = .5) + } + return m + }, __legendSelected: function (e) { + var t = e.target._name + if ('single' === this.legendOption.selectedMode) for (var i in this._selectedMap) this._selectedMap[i] = !1 + this._selectedMap[t] = !this._selectedMap[t], this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED, e.event, { + selected: this._selectedMap, + target: t + }, this.myChart) + }, __dispatchHoverLink: function (e) { + this.messageCenter.dispatch(l.EVENT.LEGEND_HOVERLINK, e.event, { target: e.target._name }, this.myChart) + }, refresh: function (e) { + if (e) { + this.option = e || this.option, this.option.legend = this.reformOption(this.option.legend), this.legendOption = this.option.legend + var t, i, n, a, o = this.legendOption.data || [] + if (this.legendOption.selected) for (var r in this.legendOption.selected) this._selectedMap[r] = 'undefined' != typeof this._selectedMap[r] ? this._selectedMap[r] : this.legendOption.selected[r] + for (var s = 0, h = o.length; h > s; s++) t = this._getName(o[s]), '' !== t && (i = this._getSomethingByName(t), i.series ? (this._hasDataMap[t] = !0, a = !i.data || i.type !== l.CHART_TYPE_PIE && i.type !== l.CHART_TYPE_FORCE && i.type !== l.CHART_TYPE_FUNNEL ? [i.series] : [i.data, i.series], n = this.getItemStyleColor(this.deepQuery(a, 'itemStyle.normal.color'), i.seriesIndex, i.dataIndex, i.data), n && i.type != l.CHART_TYPE_K && this.setColor(t, n), this._selectedMap[t] = null != this._selectedMap[t] ? this._selectedMap[t] : !0) : this._hasDataMap[t] = !1) + } + this.clear(), this._buildShape() + }, getRelatedAmount: function (e) { + for (var t, i = 0, n = this.option.series, a = 0, o = n.length; o > a; a++) if (n[a].name === e && i++, n[a].type === l.CHART_TYPE_PIE || n[a].type === l.CHART_TYPE_RADAR || n[a].type === l.CHART_TYPE_CHORD || n[a].type === l.CHART_TYPE_FORCE || n[a].type === l.CHART_TYPE_FUNNEL) { + t = n[a].type != l.CHART_TYPE_FORCE ? n[a].data : n[a].categories + for (var r = 0, s = t.length; s > r; r++) t[r].name === e && '-' != t[r].value && i++ + } + return i + }, setColor: function (e, t) { + this._colorMap[e] = t + }, getColor: function (e) { + return this._colorMap[e] || (this._colorMap[e] = this.zr.getColor(this._colorIndex++)), this._colorMap[e] + }, hasColor: function (e) { + return this._colorMap[e] ? this._colorMap[e] : !1 + }, add: function (e, t) { + for (var i = this.legendOption.data, n = 0, a = i.length; a > n; n++) if (this._getName(i[n]) === e) return + this.legendOption.data.push(e), this.setColor(e, t), this._selectedMap[e] = !0, this._hasDataMap[e] = !0 + }, del: function (e) { + for (var t = this.legendOption.data, i = 0, n = t.length; n > i; i++) if (this._getName(t[i]) === e) return this.legendOption.data.splice(i, 1) + }, getItemShape: function (e) { + if (null != e) for (var t, i = 0, n = this.shapeList.length; n > i; i++) if (t = this.shapeList[i], t._name === e && 'text' != t.type) return t + }, setItemShape: function (e, t) { + for (var i, n = 0, a = this.shapeList.length; a > n; n++) i = this.shapeList[n], i._name === e && 'text' != i.type && (this._selectedMap[e] || (t.style.color = '#ccc', t.style.strokeColor = '#ccc'), this.zr.modShape(i.id, t)) + }, isSelected: function (e) { + return 'undefined' != typeof this._selectedMap[e] ? this._selectedMap[e] : !0 + }, getSelectedMap: function () { + return this._selectedMap + }, setSelected: function (e, t) { + if ('single' === this.legendOption.selectedMode) for (var i in this._selectedMap) this._selectedMap[i] = !1 + this._selectedMap[e] = t, this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED, null, { + selected: this._selectedMap, + target: e + }, this.myChart) + }, onlegendSelected: function (e, t) { + var i = e.selected + for (var n in i) this._selectedMap[n] != i[n] && (t.needRefresh = !0), this._selectedMap[n] = i[n] + } + } + var V = { + line: function (e, t) { + var i = t.height / 2 + e.moveTo(t.x, t.y + i), e.lineTo(t.x + t.width, t.y + i) + }, pie: function (e, t) { + var i = t.x, n = t.y, a = t.width, r = t.height + o.prototype.buildPath(e, { x: i + a / 2, y: n + r + 2, r: r, r0: 6, startAngle: 45, endAngle: 135 }) + }, eventRiver: function (e, t) { + var i = t.x, n = t.y, a = t.width, o = t.height + e.moveTo(i, n + o), e.bezierCurveTo(i + a, n + o, i, n + 4, i + a, n + 4), e.lineTo(i + a, n), e.bezierCurveTo(i, n, i + a, n + o - 4, i, n + o - 4), e.lineTo(i, n + o) + }, k: function (e, t) { + var i = t.x, n = t.y, a = t.width, o = t.height + s.prototype.buildPath(e, { x: i + a / 2, y: [n + 1, n + 1, n + o - 6, n + o], width: a - 6 }) + }, bar: function (e, t) { + var i = t.x, n = t.y + 1, a = t.width, o = t.height - 2, r = 3 + e.moveTo(i + r, n), e.lineTo(i + a - r, n), e.quadraticCurveTo(i + a, n, i + a, n + r), e.lineTo(i + a, n + o - r), e.quadraticCurveTo(i + a, n + o, i + a - r, n + o), e.lineTo(i + r, n + o), e.quadraticCurveTo(i, n + o, i, n + o - r), e.lineTo(i, n + r), e.quadraticCurveTo(i, n, i + r, n) + }, force: function (e, t) { + r.prototype.iconLibrary.circle(e, t) + }, radar: function (e, t) { + var i = 6, n = t.x + t.width / 2, a = t.y + t.height / 2, o = t.height / 2, r = 2 * Math.PI / i, + s = -Math.PI / 2, l = n + o * Math.cos(s), h = a + o * Math.sin(s) + e.moveTo(l, h), s += r + for (var m = 0, V = i - 1; V > m; m++) e.lineTo(n + o * Math.cos(s), a + o * Math.sin(s)), s += r + e.lineTo(l, h) + } + } + V.chord = V.pie, V.map = V.bar + for (var U in V) r.prototype.iconLibrary['legendicon' + U] = V[U] + return h.inherits(t, i), e('../component').define('legend', t), t + }), i('echarts/util/ecData', [], function () { + function e (e, t, i, n, a, o, r, s) { + var l + return 'undefined' != typeof n && (l = null == n.value ? n : n.value), e._echartsData = { + _series: t, + _seriesIndex: i, + _data: n, + _dataIndex: a, + _name: o, + _value: l, + _special: r, + _special2: s + }, e._echartsData + } + + function t (e, t) { + var i = e._echartsData + if (!t) return i + switch (t) { + case'series': + case'seriesIndex': + case'data': + case'dataIndex': + case'name': + case'value': + case'special': + case'special2': + return i && i['_' + t] + } + return null + } + + function i (e, t, i) { + switch (e._echartsData = e._echartsData || {}, t) { + case'series': + case'seriesIndex': + case'data': + case'dataIndex': + case'name': + case'value': + case'special': + case'special2': + e._echartsData['_' + t] = i + } + } + + function n (e, t) { + t._echartsData = { + _series: e._echartsData._series, + _seriesIndex: e._echartsData._seriesIndex, + _data: e._echartsData._data, + _dataIndex: e._echartsData._dataIndex, + _name: e._echartsData._name, + _value: e._echartsData._value, + _special: e._echartsData._special, + _special2: e._echartsData._special2 + } + } + + return { pack: e, set: i, get: t, clone: n } + }), i('echarts/chart', [], function () { + var e = {}, t = {} + return e.define = function (i, n) { + return t[i] = n, e + }, e.get = function (e) { + return t[e] + }, e + }), i('zrender/tool/color', ['require', '../tool/util'], function (e) { + function t (e) { + D = e + } + + function i () { + D = N + } + + function n (e, t) { + return e = 0 | e, t = t || D, t[e % t.length] + } + + function a (e) { + B = e + } + + function o () { + H = B + } + + function r () { + return B + } + + function s (e, t, i, n, a, o, r) { + O || (O = P.getContext()) + for (var s = O.createRadialGradient(e, t, i, n, a, o), l = 0, h = r.length; h > l; l++) s.addColorStop(r[l][0], r[l][1]) + return s.__nonRecursion = !0, s + } + + function l (e, t, i, n, a) { + O || (O = P.getContext()) + for (var o = O.createLinearGradient(e, t, i, n), r = 0, s = a.length; s > r; r++) o.addColorStop(a[r][0], a[r][1]) + return o.__nonRecursion = !0, o + } + + function h (e, t, i) { + e = p(e), t = p(t), e = I(e), t = I(t) + for (var n = [], a = (t[0] - e[0]) / i, o = (t[1] - e[1]) / i, r = (t[2] - e[2]) / i, s = (t[3] - e[3]) / i, l = 0, h = e[0], m = e[1], U = e[2], d = e[3]; i > l; l++) n[l] = V([S(Math.floor(h), [0, 255]), S(Math.floor(m), [0, 255]), S(Math.floor(U), [0, 255]), d.toFixed(4) - 0], 'rgba'), h += a, m += o, U += r, d += s + return h = t[0], m = t[1], U = t[2], d = t[3], n[l] = V([h, m, U, d], 'rgba'), n + } + + function m (e, t) { + var i = [], n = e.length + if (void 0 === t && (t = 20), 1 === n) i = h(e[0], e[0], t) else if (n > 1) for (var a = 0, o = n - 1; o > a; a++) { + var r = h(e[a], e[a + 1], t) + o - 1 > a && r.pop(), i = i.concat(r) + } + return i + } + + function V (e, t) { + if (t = t || 'rgb', e && (3 === e.length || 4 === e.length)) { + if (e = C(e, function (e) { + return e > 1 ? Math.ceil(e) : e + }), t.indexOf('hex') > -1) return '#' + ((1 << 24) + (e[0] << 16) + (e[1] << 8) + +e[2]).toString(16).slice(1) + if (t.indexOf('hs') > -1) { + var i = C(e.slice(1, 3), function (e) { + return e + '%' + }) + e[1] = i[0], e[2] = i[1] + } + return t.indexOf('a') > -1 ? (3 === e.length && e.push(1), e[3] = S(e[3], [0, 1]), t + '(' + e.slice(0, 4).join(',') + ')') : t + '(' + e.slice(0, 3).join(',') + ')' + } + } + + function U (e) { + e = L(e), e.indexOf('rgba') < 0 && (e = p(e)) + var t = [], i = 0 + return e.replace(/[\d.]+/g, function (e) { + e = 3 > i ? 0 | e : +e, t[i++] = e + }), t + } + + function d (e, t) { + if (!E(e)) return e + var i = I(e), n = i[3] + return 'undefined' == typeof n && (n = 1), e.indexOf('hsb') > -1 ? i = F(i) : e.indexOf('hsl') > -1 && (i = T(i)), t.indexOf('hsb') > -1 || t.indexOf('hsv') > -1 ? i = A(i) : t.indexOf('hsl') > -1 && (i = M(i)), i[3] = n, V(i, t) + } + + function p (e) { + return d(e, 'rgba') + } + + function c (e) { + return d(e, 'rgb') + } + + function u (e) { + return d(e, 'hex') + } + + function y (e) { + return d(e, 'hsva') + } + + function g (e) { + return d(e, 'hsv') + } + + function b (e) { + return d(e, 'hsba') + } + + function f (e) { + return d(e, 'hsb') + } + + function k (e) { + return d(e, 'hsla') + } + + function x (e) { + return d(e, 'hsl') + } + + function _ (e) { + for (var t in G) if (u(G[t]) === u(e)) return t + return null + } + + function L (e) { + return String(e).replace(/\s+/g, '') + } + + function W (e) { + if (G[e] && (e = G[e]), e = L(e), e = e.replace(/hsv/i, 'hsb'), /^#[\da-f]{3}$/i.test(e)) { + e = parseInt(e.slice(1), 16) + var t = (3840 & e) << 8, i = (240 & e) << 4, n = 15 & e + e = '#' + ((1 << 24) + (t << 4) + t + (i << 4) + i + (n << 4) + n).toString(16).slice(1) + } + return e + } + + function X (e, t) { + if (!E(e)) return e + var i = t > 0 ? 1 : -1 + 'undefined' == typeof t && (t = 0), t = Math.abs(t) > 1 ? 1 : Math.abs(t), e = c(e) + for (var n = I(e), a = 0; 3 > a; a++) n[a] = 1 === i ? n[a] * (1 - t) | 0 : (255 - n[a]) * t + n[a] | 0 + return 'rgb(' + n.join(',') + ')' + } + + function v (e) { + if (!E(e)) return e + var t = I(p(e)) + return t = C(t, function (e) { + return 255 - e + }), V(t, 'rgb') + } + + function w (e, t, i) { + if (!E(e) || !E(t)) return e + 'undefined' == typeof i && (i = .5), i = 1 - S(i, [0, 1]) + for (var n = 2 * i - 1, a = I(p(e)), o = I(p(t)), r = a[3] - o[3], s = ((n * r === -1 ? n : (n + r) / (1 + n * r)) + 1) / 2, l = 1 - s, h = [], m = 0; 3 > m; m++) h[m] = a[m] * s + o[m] * l + var U = a[3] * i + o[3] * (1 - i) + return U = Math.max(0, Math.min(1, U)), 1 === a[3] && 1 === o[3] ? V(h, 'rgb') : (h[3] = U, V(h, 'rgba')) + } + + function K () { + return '#' + (Math.random().toString(16) + '0000').slice(2, 8) + } + + function I (e) { + e = W(e) + var t = e.match(R) + if (null === t) throw new Error('The color format error') + var i, n, a, o = [] + if (t[2]) i = t[2].replace('#', '').split(''), a = [i[0] + i[1], i[2] + i[3], i[4] + i[5]], o = C(a, function (e) { + return S(parseInt(e, 16), [0, 255]) + }) else if (t[4]) { + var r = t[4].split(',') + n = r[3], a = r.slice(0, 3), o = C(a, function (e) { + return e = Math.floor(e.indexOf('%') > 0 ? 2.55 * parseInt(e, 0) : e), S(e, [0, 255]) + }), 'undefined' != typeof n && o.push(S(parseFloat(n), [0, 1])) + } else if (t[5] || t[6]) { + var s = (t[5] || t[6]).split(','), l = parseInt(s[0], 0) / 360, h = s[1], m = s[2] + n = s[3], o = C([h, m], function (e) { + return S(parseFloat(e) / 100, [0, 1]) + }), o.unshift(l), 'undefined' != typeof n && o.push(S(parseFloat(n), [0, 1])) + } + return o + } + + function J (e, t) { + if (!E(e)) return e + null === t && (t = 1) + var i = I(p(e)) + return i[3] = S(Number(t).toFixed(4), [0, 1]), V(i, 'rgba') + } + + function C (e, t) { + if ('function' != typeof t) throw new TypeError + for (var i = e ? e.length : 0, n = 0; i > n; n++) e[n] = t(e[n]) + return e + } + + function S (e, t) { + return e <= t[0] ? e = t[0] : e >= t[1] && (e = t[1]), e + } + + function E (e) { + return e instanceof Array || 'string' == typeof e + } + + function F (e) { + var t, i, n, a = e[0], o = e[1], r = e[2] + if (0 === o) t = 255 * r, i = 255 * r, n = 255 * r else { + var s = 6 * a + 6 === s && (s = 0) + var l = 0 | s, h = r * (1 - o), m = r * (1 - o * (s - l)), V = r * (1 - o * (1 - (s - l))), U = 0, + d = 0, p = 0 + 0 === l ? (U = r, d = V, p = h) : 1 === l ? (U = m, d = r, p = h) : 2 === l ? (U = h, d = r, p = V) : 3 === l ? (U = h, d = m, p = r) : 4 === l ? (U = V, d = h, p = r) : (U = r, d = h, p = m), t = 255 * U, i = 255 * d, n = 255 * p + } + return [t, i, n] + } + + function T (e) { + var t, i, n, a = e[0], o = e[1], r = e[2] + if (0 === o) t = 255 * r, i = 255 * r, n = 255 * r else { + var s + s = .5 > r ? r * (1 + o) : r + o - o * r + var l = 2 * r - s + t = 255 * z(l, s, a + 1 / 3), i = 255 * z(l, s, a), n = 255 * z(l, s, a - 1 / 3) + } + return [t, i, n] + } + + function z (e, t, i) { + return 0 > i && (i += 1), i > 1 && (i -= 1), 1 > 6 * i ? e + 6 * (t - e) * i : 1 > 2 * i ? t : 2 > 3 * i ? e + (t - e) * (2 / 3 - i) * 6 : e + } + + function A (e) { + var t, i, n = e[0] / 255, a = e[1] / 255, o = e[2] / 255, r = Math.min(n, a, o), s = Math.max(n, a, o), + l = s - r, h = s + if (0 === l) t = 0, i = 0 else { + i = l / s + var m = ((s - n) / 6 + l / 2) / l, V = ((s - a) / 6 + l / 2) / l, U = ((s - o) / 6 + l / 2) / l + n === s ? t = U - V : a === s ? t = 1 / 3 + m - U : o === s && (t = 2 / 3 + V - m), 0 > t && (t += 1), t > 1 && (t -= 1) + } + return t = 360 * t, i = 100 * i, h = 100 * h, [t, i, h] + } + + function M (e) { + var t, i, n = e[0] / 255, a = e[1] / 255, o = e[2] / 255, r = Math.min(n, a, o), s = Math.max(n, a, o), + l = s - r, h = (s + r) / 2 + if (0 === l) t = 0, i = 0 else { + i = .5 > h ? l / (s + r) : l / (2 - s - r) + var m = ((s - n) / 6 + l / 2) / l, V = ((s - a) / 6 + l / 2) / l, U = ((s - o) / 6 + l / 2) / l + n === s ? t = U - V : a === s ? t = 1 / 3 + m - U : o === s && (t = 2 / 3 + V - m), 0 > t && (t += 1), t > 1 && (t -= 1) + } + return t = 360 * t, i = 100 * i, h = 100 * h, [t, i, h] + } + + var O, P = e('../tool/util'), + D = ['#ff9277', ' #dddd00', ' #ffc877', ' #bbe3ff', ' #d5ffbb', '#bbbbff', ' #ddb000', ' #b0dd00', ' #e2bbff', ' #ffbbe3', '#ff7777', ' #ff9900', ' #83dd00', ' #77e3ff', ' #778fff', '#c877ff', ' #ff77ab', ' #ff6600', ' #aa8800', ' #77c7ff', '#ad77ff', ' #ff77ff', ' #dd0083', ' #777700', ' #00aa00', '#0088aa', ' #8400dd', ' #aa0088', ' #dd0000', ' #772e00'], + N = D, B = 'rgba(255,255,0,0.5)', H = B, + R = /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i, + G = { + aliceblue: '#f0f8ff', + antiquewhite: '#faebd7', + aqua: '#0ff', + aquamarine: '#7fffd4', + azure: '#f0ffff', + beige: '#f5f5dc', + bisque: '#ffe4c4', + black: '#000', + blanchedalmond: '#ffebcd', + blue: '#00f', + blueviolet: '#8a2be2', + brown: '#a52a2a', + burlywood: '#deb887', + cadetblue: '#5f9ea0', + chartreuse: '#7fff00', + chocolate: '#d2691e', + coral: '#ff7f50', + cornflowerblue: '#6495ed', + cornsilk: '#fff8dc', + crimson: '#dc143c', + cyan: '#0ff', + darkblue: '#00008b', + darkcyan: '#008b8b', + darkgoldenrod: '#b8860b', + darkgray: '#a9a9a9', + darkgrey: '#a9a9a9', + darkgreen: '#006400', + darkkhaki: '#bdb76b', + darkmagenta: '#8b008b', + darkolivegreen: '#556b2f', + darkorange: '#ff8c00', + darkorchid: '#9932cc', + darkred: '#8b0000', + darksalmon: '#e9967a', + darkseagreen: '#8fbc8f', + darkslateblue: '#483d8b', + darkslategray: '#2f4f4f', + darkslategrey: '#2f4f4f', + darkturquoise: '#00ced1', + darkviolet: '#9400d3', + deeppink: '#ff1493', + deepskyblue: '#00bfff', + dimgray: '#696969', + dimgrey: '#696969', + dodgerblue: '#1e90ff', + firebrick: '#b22222', + floralwhite: '#fffaf0', + forestgreen: '#228b22', + fuchsia: '#f0f', + gainsboro: '#dcdcdc', + ghostwhite: '#f8f8ff', + gold: '#ffd700', + goldenrod: '#daa520', + gray: '#808080', + grey: '#808080', + green: '#008000', + greenyellow: '#adff2f', + honeydew: '#f0fff0', + hotpink: '#ff69b4', + indianred: '#cd5c5c', + indigo: '#4b0082', + ivory: '#fffff0', + khaki: '#f0e68c', + lavender: '#e6e6fa', + lavenderblush: '#fff0f5', + lawngreen: '#7cfc00', + lemonchiffon: '#fffacd', + lightblue: '#add8e6', + lightcoral: '#f08080', + lightcyan: '#e0ffff', + lightgoldenrodyellow: '#fafad2', + lightgray: '#d3d3d3', + lightgrey: '#d3d3d3', + lightgreen: '#90ee90', + lightpink: '#ffb6c1', + lightsalmon: '#ffa07a', + lightseagreen: '#20b2aa', + lightskyblue: '#87cefa', + lightslategray: '#789', + lightslategrey: '#789', + lightsteelblue: '#b0c4de', + lightyellow: '#ffffe0', + lime: '#0f0', + limegreen: '#32cd32', + linen: '#faf0e6', + magenta: '#f0f', + maroon: '#800000', + mediumaquamarine: '#66cdaa', + mediumblue: '#0000cd', + mediumorchid: '#ba55d3', + mediumpurple: '#9370d8', + mediumseagreen: '#3cb371', + mediumslateblue: '#7b68ee', + mediumspringgreen: '#00fa9a', + mediumturquoise: '#48d1cc', + mediumvioletred: '#c71585', + midnightblue: '#191970', + mintcream: '#f5fffa', + mistyrose: '#ffe4e1', + moccasin: '#ffe4b5', + navajowhite: '#ffdead', + navy: '#000080', + oldlace: '#fdf5e6', + olive: '#808000', + olivedrab: '#6b8e23', + orange: '#ffa500', + orangered: '#ff4500', + orchid: '#da70d6', + palegoldenrod: '#eee8aa', + palegreen: '#98fb98', + paleturquoise: '#afeeee', + palevioletred: '#d87093', + papayawhip: '#ffefd5', + peachpuff: '#ffdab9', + peru: '#cd853f', + pink: '#ffc0cb', + plum: '#dda0dd', + powderblue: '#b0e0e6', + purple: '#800080', + red: '#f00', + rosybrown: '#bc8f8f', + royalblue: '#4169e1', + saddlebrown: '#8b4513', + salmon: '#fa8072', + sandybrown: '#f4a460', + seagreen: '#2e8b57', + seashell: '#fff5ee', + sienna: '#a0522d', + silver: '#c0c0c0', + skyblue: '#87ceeb', + slateblue: '#6a5acd', + slategray: '#708090', + slategrey: '#708090', + snow: '#fffafa', + springgreen: '#00ff7f', + steelblue: '#4682b4', + tan: '#d2b48c', + teal: '#008080', + thistle: '#d8bfd8', + tomato: '#ff6347', + turquoise: '#40e0d0', + violet: '#ee82ee', + wheat: '#f5deb3', + white: '#fff', + whitesmoke: '#f5f5f5', + yellow: '#ff0', + yellowgreen: '#9acd32' + } + return { + customPalette: t, + resetPalette: i, + getColor: n, + getHighlightColor: r, + customHighlight: a, + resetHighlight: o, + getRadialGradient: s, + getLinearGradient: l, + getGradientColors: m, + getStepColors: h, + reverse: v, + mix: w, + lift: X, + trim: L, + random: K, + toRGB: c, + toRGBA: p, + toHex: u, + toHSL: x, + toHSLA: k, + toHSB: f, + toHSBA: b, + toHSV: g, + toHSVA: y, + toName: _, + toColor: V, + toArray: U, + alpha: J, + getData: I + } + }), i('echarts/component/timeline', ['require', './base', 'zrender/shape/Rectangle', '../util/shape/Icon', '../util/shape/Chain', '../config', 'zrender/tool/util', 'zrender/tool/area', 'zrender/tool/event', '../component'], function (e) { + function t (e, t, i, a, o) { + n.call(this, e, t, i, a, o) + var r = this + if (r._onclick = function (e) { + return r.__onclick(e) + }, r._ondrift = function (e, t) { + return r.__ondrift(this, e, t) + }, r._ondragend = function () { + return r.__ondragend() + }, r._setCurrentOption = function () { + var e = r.timelineOption + r.currentIndex %= e.data.length + var t = r.options[r.currentIndex] || {} + r.myChart._setOption(t, e.notMerge, !0), r.messageCenter.dispatch(s.EVENT.TIMELINE_CHANGED, null, { + currentIndex: r.currentIndex, + data: null != e.data[r.currentIndex].name ? e.data[r.currentIndex].name : e.data[r.currentIndex] + }, r.myChart) + }, r._onFrame = function () { + r._setCurrentOption(), r._syncHandleShape(), r.timelineOption.autoPlay && (r.playTicket = setTimeout(function () { + return r.currentIndex += 1, !r.timelineOption.loop && r.currentIndex >= r.timelineOption.data.length ? (r.currentIndex = r.timelineOption.data.length - 1, void r.stop()) : void r._onFrame() + }, r.timelineOption.playInterval)) + }, this.setTheme(!1), this.options = this.option.options, this.currentIndex = this.timelineOption.currentIndex % this.timelineOption.data.length, this.timelineOption.notMerge || 0 === this.currentIndex || (this.options[this.currentIndex] = l.merge(this.options[this.currentIndex], this.options[0])), this.timelineOption.show && (this._buildShape(), this._syncHandleShape()), this._setCurrentOption(), this.timelineOption.autoPlay) { + var r = this + this.playTicket = setTimeout(function () { + r.play() + }, null != this.ecTheme.animationDuration ? this.ecTheme.animationDuration : s.animationDuration) + } + } + + function i (e, t) { + var i = 2, n = t.x + i, a = t.y + i + 2, r = t.width - i, s = t.height - i, l = t.symbol + if ('last' === l) e.moveTo(n + r - 2, a + s / 3), e.lineTo(n + r - 2, a), e.lineTo(n + 2, a + s / 2), e.lineTo(n + r - 2, a + s), e.lineTo(n + r - 2, a + s / 3 * 2), e.moveTo(n, a), e.lineTo(n, a) else if ('next' === l) e.moveTo(n + 2, a + s / 3), e.lineTo(n + 2, a), e.lineTo(n + r - 2, a + s / 2), e.lineTo(n + 2, a + s), e.lineTo(n + 2, a + s / 3 * 2), e.moveTo(n, a), e.lineTo(n, a) else if ('play' === l) if ('stop' === t.status) e.moveTo(n + 2, a), e.lineTo(n + r - 2, a + s / 2), e.lineTo(n + 2, a + s), e.lineTo(n + 2, a) else { + var h = 'both' === t.brushType ? 2 : 3 + e.rect(n + 2, a, h, s), e.rect(n + r - h - 2, a, h, s) + } else if (l.match('image')) { + var m = '' + m = l.replace(new RegExp('^image:\\/\\/'), ''), l = o.prototype.iconLibrary.image, l(e, { + x: n, + y: a, + width: r, + height: s, + image: m + }) + } + } + + var n = e('./base'), a = e('zrender/shape/Rectangle'), o = e('../util/shape/Icon'), + r = e('../util/shape/Chain'), s = e('../config') + s.timeline = { + zlevel: 0, + z: 4, + show: !0, + type: 'time', + notMerge: !1, + realtime: !0, + x: 80, + x2: 80, + y2: 0, + height: 50, + backgroundColor: 'rgba(0,0,0,0)', + borderColor: '#ccc', + borderWidth: 0, + padding: 5, + controlPosition: 'left', + autoPlay: !1, + loop: !0, + playInterval: 2e3, + lineStyle: { width: 1, color: '#666', type: 'dashed' }, + label: { show: !0, interval: 'auto', rotate: 0, textStyle: { color: '#333' } }, + checkpointStyle: { + symbol: 'auto', + symbolSize: 'auto', + color: 'auto', + borderColor: 'auto', + borderWidth: 'auto', + label: { show: !1, textStyle: { color: 'auto' } } + }, + controlStyle: { itemSize: 15, itemGap: 5, normal: { color: '#333' }, emphasis: { color: '#1e90ff' } }, + symbol: 'emptyDiamond', + symbolSize: 4, + currentIndex: 0 + } + var l = e('zrender/tool/util'), h = e('zrender/tool/area'), m = e('zrender/tool/event') + return t.prototype = { + type: s.COMPONENT_TYPE_TIMELINE, _buildShape: function () { + if (this._location = this._getLocation(), this._buildBackground(), this._buildControl(), this._chainPoint = this._getChainPoint(), this.timelineOption.label.show) for (var e = this._getInterval(), t = 0, i = this._chainPoint.length; i > t; t += e) this._chainPoint[t].showLabel = !0 + this._buildChain(), this._buildHandle() + for (var t = 0, n = this.shapeList.length; n > t; t++) this.zr.addShape(this.shapeList[t]) + }, _getLocation: function () { + var e, t = this.timelineOption, i = this.reformCssArray(this.timelineOption.padding), + n = this.zr.getWidth(), a = this.parsePercent(t.x, n), o = this.parsePercent(t.x2, n) + null == t.width ? (e = n - a - o, o = n - o) : (e = this.parsePercent(t.width, n), o = a + e) + var r, s, l = this.zr.getHeight(), h = this.parsePercent(t.height, l) + return null != t.y ? (r = this.parsePercent(t.y, l), s = r + h) : (s = l - this.parsePercent(t.y2, l), r = s - h), { + x: a + i[3], + y: r + i[0], + x2: o - i[1], + y2: s - i[2], + width: e - i[1] - i[3], + height: h - i[0] - i[2] + } + }, _getReformedLabel: function (e) { + var t = this.timelineOption, i = null != t.data[e].name ? t.data[e].name : t.data[e], + n = t.data[e].formatter || t.label.formatter + return n && ('function' == typeof n ? i = n.call(this.myChart, i) : 'string' == typeof n && (i = n.replace('{value}', i))), i + }, _getInterval: function () { + var e = this._chainPoint, t = this.timelineOption, i = t.label.interval + if ('auto' === i) { + var n = t.label.textStyle.fontSize, a = t.data, o = t.data.length + if (o > 3) { + var r, s, l = !1 + for (i = 0; !l && o > i;) { + i++, l = !0 + for (var m = i; o > m; m += i) { + if (r = e[m].x - e[m - i].x, 0 !== t.label.rotate) s = n else if (a[m].textStyle) s = h.getTextWidth(e[m].name, e[m].textFont) else { + var V = e[m].name + '', U = (V.match(/\w/g) || '').length, d = V.length - U + s = U * n * 2 / 3 + d * n + } + if (s > r) { + l = !1 + break + } + } + } + } else i = 1 + } else i = i - 0 + 1 + return i + }, _getChainPoint: function () { + function e (e) { + return null != h[e].name ? h[e].name : h[e] + '' + } + + var t, i = this.timelineOption, n = i.symbol.toLowerCase(), a = i.symbolSize, o = i.label.rotate, + r = i.label.textStyle, s = this.getFont(r), h = i.data, m = this._location.x, + V = this._location.y + this._location.height / 4 * 3, U = this._location.x2 - this._location.x, + d = h.length, p = [] + if (d > 1) { + var c = U / d + if (c = c > 50 ? 50 : 20 > c ? 5 : c, U -= 2 * c, 'number' === i.type) for (var u = 0; d > u; u++) p.push(m + c + U / (d - 1) * u) else { + p[0] = new Date(e(0).replace(/-/g, '/')), p[d - 1] = new Date(e(d - 1).replace(/-/g, '/')) - p[0] + for (var u = 1; d > u; u++) p[u] = m + c + U * (new Date(e(u).replace(/-/g, '/')) - p[0]) / p[d - 1] + p[0] = m + c + } + } else p.push(m + U / 2) + for (var y, g, b, f, k, x = [], u = 0; d > u; u++) m = p[u], y = h[u].symbol && h[u].symbol.toLowerCase() || n, y.match('empty') ? (y = y.replace('empty', ''), b = !0) : b = !1, y.match('star') && (g = y.replace('star', '') - 0 || 5, y = 'star'), t = h[u].textStyle ? l.merge(h[u].textStyle || {}, r) : r, f = t.align || 'center', o ? (f = o > 0 ? 'right' : 'left', k = [o * Math.PI / 180, m, V - 5]) : k = !1, x.push({ + x: m, + n: g, + isEmpty: b, + symbol: y, + symbolSize: h[u].symbolSize || a, + color: h[u].color, + borderColor: h[u].borderColor, + borderWidth: h[u].borderWidth, + name: this._getReformedLabel(u), + textColor: t.color, + textAlign: f, + textBaseline: t.baseline || 'middle', + textX: m, + textY: V - (o ? 5 : 0), + textFont: h[u].textStyle ? this.getFont(t) : s, + rotation: k, + showLabel: !1 + }) + return x + }, _buildBackground: function () { + var e = this.timelineOption, t = this.reformCssArray(this.timelineOption.padding), + i = this._location.width, n = this._location.height; + (0 !== e.borderWidth || 'rgba(0,0,0,0)' != e.backgroundColor.replace(/\s/g, '')) && this.shapeList.push(new a({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + x: this._location.x - t[3], + y: this._location.y - t[0], + width: i + t[1] + t[3], + height: n + t[0] + t[2], + brushType: 0 === e.borderWidth ? 'fill' : 'both', + color: e.backgroundColor, + strokeColor: e.borderColor, + lineWidth: e.borderWidth + } + })) + }, _buildControl: function () { + var e = this, t = this.timelineOption, i = t.lineStyle, n = t.controlStyle + if ('none' !== t.controlPosition) { + var a, r = n.itemSize, s = n.itemGap + 'left' === t.controlPosition ? (a = this._location.x, this._location.x += 3 * (r + s)) : (a = this._location.x2 - (3 * (r + s) - s), this._location.x2 -= 3 * (r + s)) + var h = this._location.y, m = { + zlevel: this.getZlevelBase(), + z: this.getZBase() + 1, + style: { + iconType: 'timelineControl', + symbol: 'last', + x: a, + y: h, + width: r, + height: r, + brushType: 'stroke', + color: n.normal.color, + strokeColor: n.normal.color, + lineWidth: i.width + }, + highlightStyle: { + color: n.emphasis.color, + strokeColor: n.emphasis.color, + lineWidth: i.width + 1 + }, + clickable: !0 + } + this._ctrLastShape = new o(m), this._ctrLastShape.onclick = function () { + e.last() + }, this.shapeList.push(this._ctrLastShape), a += r + s, this._ctrPlayShape = new o(l.clone(m)), this._ctrPlayShape.style.brushType = 'fill', this._ctrPlayShape.style.symbol = 'play', this._ctrPlayShape.style.status = this.timelineOption.autoPlay ? 'playing' : 'stop', this._ctrPlayShape.style.x = a, this._ctrPlayShape.onclick = function () { + 'stop' === e._ctrPlayShape.style.status ? e.play() : e.stop() + }, this.shapeList.push(this._ctrPlayShape), a += r + s, this._ctrNextShape = new o(l.clone(m)), this._ctrNextShape.style.symbol = 'next', this._ctrNextShape.style.x = a, this._ctrNextShape.onclick = function () { + e.next() + }, this.shapeList.push(this._ctrNextShape) + } + }, _buildChain: function () { + var e = this.timelineOption, t = e.lineStyle + this._timelineShae = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { + x: this._location.x, + y: this.subPixelOptimize(this._location.y, t.width), + width: this._location.x2 - this._location.x, + height: this._location.height, + chainPoint: this._chainPoint, + brushType: 'both', + strokeColor: t.color, + lineWidth: t.width, + lineType: t.type + }, + hoverable: !1, + clickable: !0, + onclick: this._onclick + }, this._timelineShae = new r(this._timelineShae), this.shapeList.push(this._timelineShae) + }, _buildHandle: function () { + var e = this._chainPoint[this.currentIndex], t = e.symbolSize + 1 + t = 5 > t ? 5 : t, this._handleShape = { + zlevel: this.getZlevelBase(), + z: this.getZBase() + 1, + hoverable: !1, + draggable: !0, + style: { + iconType: 'diamond', + n: e.n, + x: e.x - t, + y: this._location.y + this._location.height / 4 - t, + width: 2 * t, + height: 2 * t, + brushType: 'both', + textPosition: 'specific', + textX: e.x, + textY: this._location.y - this._location.height / 4, + textAlign: 'center', + textBaseline: 'middle' + }, + highlightStyle: {}, + ondrift: this._ondrift, + ondragend: this._ondragend + }, this._handleShape = new o(this._handleShape), this.shapeList.push(this._handleShape) + }, _syncHandleShape: function () { + if (this.timelineOption.show) { + var e = this.timelineOption, t = e.checkpointStyle, i = this._chainPoint[this.currentIndex] + this._handleShape.style.text = t.label.show ? i.name : '', this._handleShape.style.textFont = i.textFont, this._handleShape.style.n = i.n, 'auto' === t.symbol ? this._handleShape.style.iconType = 'none' != i.symbol ? i.symbol : 'diamond' : (this._handleShape.style.iconType = t.symbol, t.symbol.match('star') && (this._handleShape.style.n = t.symbol.replace('star', '') - 0 || 5, this._handleShape.style.iconType = 'star')) + var n + 'auto' === t.symbolSize ? (n = i.symbolSize + 2, n = 5 > n ? 5 : n) : n = t.symbolSize - 0, this._handleShape.style.color = 'auto' === t.color ? i.color ? i.color : e.controlStyle.emphasis.color : t.color, this._handleShape.style.textColor = 'auto' === t.label.textStyle.color ? this._handleShape.style.color : t.label.textStyle.color, this._handleShape.highlightStyle.strokeColor = this._handleShape.style.strokeColor = 'auto' === t.borderColor ? i.borderColor ? i.borderColor : '#fff' : t.borderColor, this._handleShape.style.lineWidth = 'auto' === t.borderWidth ? i.borderWidth ? i.borderWidth : 0 : t.borderWidth - 0, this._handleShape.highlightStyle.lineWidth = this._handleShape.style.lineWidth + 1, this.zr.animate(this._handleShape.id, 'style').when(500, { + x: i.x - n, + textX: i.x, + y: this._location.y + this._location.height / 4 - n, + width: 2 * n, + height: 2 * n + }).start('ExponentialOut') + } + }, _findChainIndex: function (e) { + var t = this._chainPoint, i = t.length + if (e <= t[0].x) return 0 + if (e >= t[i - 1].x) return i - 1 + for (var n = 0; i - 1 > n; n++) if (e >= t[n].x && e <= t[n + 1].x) return Math.abs(e - t[n].x) < Math.abs(e - t[n + 1].x) ? n : n + 1 + }, __onclick: function (e) { + var t = m.getX(e.event), i = this._findChainIndex(t) + return i === this.currentIndex ? !0 : (this.currentIndex = i, this.timelineOption.autoPlay && this.stop(), clearTimeout(this.playTicket), void this._onFrame()) + }, __ondrift: function (e, t) { + this.timelineOption.autoPlay && this.stop() + var i, n = this._chainPoint, a = n.length + e.style.x + t <= n[0].x - n[0].symbolSize ? (e.style.x = n[0].x - n[0].symbolSize, i = 0) : e.style.x + t >= n[a - 1].x - n[a - 1].symbolSize ? (e.style.x = n[a - 1].x - n[a - 1].symbolSize, i = a - 1) : (e.style.x += t, i = this._findChainIndex(e.style.x)) + var o = n[i], r = o.symbolSize + 2 + if (e.style.iconType = o.symbol, e.style.n = o.n, e.style.textX = e.style.x + r / 2, e.style.y = this._location.y + this._location.height / 4 - r, e.style.width = 2 * r, e.style.height = 2 * r, e.style.text = o.name, i === this.currentIndex) return !0 + if (this.currentIndex = i, this.timelineOption.realtime) { + clearTimeout(this.playTicket) + var s = this + this.playTicket = setTimeout(function () { + s._setCurrentOption() + }, 200) + } + return !0 + }, __ondragend: function () { + this.isDragend = !0 + }, ondragend: function (e, t) { + this.isDragend && e.target && (!this.timelineOption.realtime && this._setCurrentOption(), t.dragOut = !0, t.dragIn = !0, t.needRefresh = !1, this.isDragend = !1, this._syncHandleShape()) + }, last: function () { + return this.timelineOption.autoPlay && this.stop(), this.currentIndex -= 1, this.currentIndex < 0 && (this.currentIndex = this.timelineOption.data.length - 1), this._onFrame(), this.currentIndex + }, next: function () { + return this.timelineOption.autoPlay && this.stop(), this.currentIndex += 1, this.currentIndex >= this.timelineOption.data.length && (this.currentIndex = 0), this._onFrame(), this.currentIndex + }, play: function (e, t) { + return this._ctrPlayShape && 'playing' != this._ctrPlayShape.style.status && (this._ctrPlayShape.style.status = 'playing', this.zr.modShape(this._ctrPlayShape.id), this.zr.refreshNextFrame()), this.timelineOption.autoPlay = null != t ? t : !0, this.timelineOption.autoPlay || clearTimeout(this.playTicket), this.currentIndex = null != e ? e : this.currentIndex + 1, this.currentIndex >= this.timelineOption.data.length && (this.currentIndex = 0), this._onFrame(), this.currentIndex + }, stop: function () { + return this._ctrPlayShape && 'stop' != this._ctrPlayShape.style.status && (this._ctrPlayShape.style.status = 'stop', this.zr.modShape(this._ctrPlayShape.id), this.zr.refreshNextFrame()), this.timelineOption.autoPlay = !1, clearTimeout(this.playTicket), this.currentIndex + }, resize: function () { + this.timelineOption.show && (this.clear(), this._buildShape(), this._syncHandleShape()) + }, setTheme: function (e) { + this.timelineOption = this.reformOption(l.clone(this.option.timeline)), this.timelineOption.label.textStyle = this.getTextStyle(this.timelineOption.label.textStyle), this.timelineOption.checkpointStyle.label.textStyle = this.getTextStyle(this.timelineOption.checkpointStyle.label.textStyle), this.myChart.canvasSupported || (this.timelineOption.realtime = !1), this.timelineOption.show && e && (this.clear(), this._buildShape(), this._syncHandleShape()) + }, onbeforDispose: function () { + clearTimeout(this.playTicket) + } + }, o.prototype.iconLibrary.timelineControl = i, l.inherits(t, n), e('../component').define('timeline', t), t + }), i('zrender/shape/Image', ['require', './Base', '../tool/util'], function (e) { + var t = e('./Base'), i = function (e) { + t.call(this, e) + } + return i.prototype = { + type: 'image', brush: function (e, t, i) { + var n = this.style || {} + t && (n = this.getHighlightStyle(n, this.highlightStyle || {})) + var a = n.image, o = this + if (this._imageCache || (this._imageCache = {}), 'string' == typeof a) { + var r = a + this._imageCache[r] ? a = this._imageCache[r] : (a = new Image, a.onload = function () { + a.onload = null, o.modSelf(), i() + }, a.src = r, this._imageCache[r] = a) + } + if (a) { + if ('IMG' == a.nodeName.toUpperCase()) if (window.ActiveXObject) { + if ('complete' != a.readyState) return + } else if (!a.complete) return + var s = n.width || a.width, l = n.height || a.height, h = n.x, m = n.y + if (!a.width || !a.height) return + if (e.save(), this.doClip(e), this.setContext(e, n), this.setTransform(e), n.sWidth && n.sHeight) { + var V = n.sx || 0, U = n.sy || 0 + e.drawImage(a, V, U, n.sWidth, n.sHeight, h, m, s, l) + } else if (n.sx && n.sy) { + var V = n.sx, U = n.sy, d = s - V, p = l - U + e.drawImage(a, V, U, d, p, h, m, s, l) + } else e.drawImage(a, h, m, s, l) + n.width || (n.width = s), n.height || (n.height = l), this.style.width || (this.style.width = s), this.style.height || (this.style.height = l), this.drawText(e, n, this.style), e.restore() + } + }, getRect: function (e) { + return { x: e.x, y: e.y, width: e.width, height: e.height } + }, clearCache: function () { + this._imageCache = {} + } + }, e('../tool/util').inherits(i, t), i + }), i('zrender/loadingEffect/Bar', ['require', './Base', '../tool/util', '../tool/color', '../shape/Rectangle'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('./Base'), n = e('../tool/util'), a = e('../tool/color'), o = e('../shape/Rectangle') + return n.inherits(t, i), t.prototype._start = function (e, t) { + var i = n.merge(this.options, { + textStyle: { color: '#888' }, + backgroundColor: 'rgba(250, 250, 250, 0.8)', + effectOption: { + x: 0, + y: this.canvasHeight / 2 - 30, + width: this.canvasWidth, + height: 5, + brushType: 'fill', + timeInterval: 100 + } + }), r = this.createTextShape(i.textStyle), s = this.createBackgroundShape(i.backgroundColor), + l = i.effectOption, h = new o({ highlightStyle: n.clone(l) }) + return h.highlightStyle.color = l.color || a.getLinearGradient(l.x, l.y, l.x + l.width, l.y + l.height, [[0, '#ff6400'], [.5, '#ffe100'], [1, '#b1ff00']]), null != i.progress ? (e(s), h.highlightStyle.width = this.adjust(i.progress, [0, 1]) * i.effectOption.width, e(h), e(r), void t()) : (h.highlightStyle.width = 0, setInterval(function () { + e(s), h.highlightStyle.width < l.width ? h.highlightStyle.width += 8 : h.highlightStyle.width = 0, e(h), e(r), t() + }, l.timeInterval)) + }, t + }), i('zrender/loadingEffect/Bubble', ['require', './Base', '../tool/util', '../tool/color', '../shape/Circle'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('./Base'), n = e('../tool/util'), a = e('../tool/color'), o = e('../shape/Circle') + return n.inherits(t, i), t.prototype._start = function (e, t) { + for (var i = n.merge(this.options, { + textStyle: { color: '#888' }, + backgroundColor: 'rgba(250, 250, 250, 0.8)', + effect: { n: 50, lineWidth: 2, brushType: 'stroke', color: 'random', timeInterval: 100 } + }), r = this.createTextShape(i.textStyle), s = this.createBackgroundShape(i.backgroundColor), l = i.effect, h = l.n, m = l.brushType, V = l.lineWidth, U = [], d = this.canvasWidth, p = this.canvasHeight, c = 0; h > c; c++) { + var u = 'random' == l.color ? a.alpha(a.random(), .3) : l.color + U[c] = new o({ + highlightStyle: { + x: Math.ceil(Math.random() * d), + y: Math.ceil(Math.random() * p), + r: Math.ceil(40 * Math.random()), + brushType: m, + color: u, + strokeColor: u, + lineWidth: V + }, animationY: Math.ceil(20 * Math.random()) + }) + } + return setInterval(function () { + e(s) + for (var i = 0; h > i; i++) { + var n = U[i].highlightStyle + n.y - U[i].animationY + n.r <= 0 && (U[i].highlightStyle.y = p + n.r, U[i].highlightStyle.x = Math.ceil(Math.random() * d)), U[i].highlightStyle.y -= U[i].animationY, e(U[i]) + } + e(r), t() + }, l.timeInterval) + }, t + }), i('zrender/loadingEffect/DynamicLine', ['require', './Base', '../tool/util', '../tool/color', '../shape/Line'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('./Base'), n = e('../tool/util'), a = e('../tool/color'), o = e('../shape/Line') + return n.inherits(t, i), t.prototype._start = function (e, t) { + for (var i = n.merge(this.options, { + textStyle: { color: '#fff' }, + backgroundColor: 'rgba(0, 0, 0, 0.8)', + effectOption: { n: 30, lineWidth: 1, color: 'random', timeInterval: 100 } + }), r = this.createTextShape(i.textStyle), s = this.createBackgroundShape(i.backgroundColor), l = i.effectOption, h = l.n, m = l.lineWidth, V = [], U = this.canvasWidth, d = this.canvasHeight, p = 0; h > p; p++) { + var c = -Math.ceil(1e3 * Math.random()), u = Math.ceil(400 * Math.random()), + y = Math.ceil(Math.random() * d), g = 'random' == l.color ? a.random() : l.color + V[p] = new o({ + highlightStyle: { + xStart: c, + yStart: y, + xEnd: c + u, + yEnd: y, + strokeColor: g, + lineWidth: m + }, animationX: Math.ceil(100 * Math.random()), len: u + }) + } + return setInterval(function () { + e(s) + for (var i = 0; h > i; i++) { + var n = V[i].highlightStyle + n.xStart >= U && (V[i].len = Math.ceil(400 * Math.random()), n.xStart = -400, n.xEnd = -400 + V[i].len, n.yStart = Math.ceil(Math.random() * d), n.yEnd = n.yStart), n.xStart += V[i].animationX, n.xEnd += V[i].animationX, e(V[i]) + } + e(r), t() + }, l.timeInterval) + }, t + }), i('zrender/loadingEffect/Ring', ['require', './Base', '../tool/util', '../tool/color', '../shape/Ring', '../shape/Sector'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('./Base'), n = e('../tool/util'), a = e('../tool/color'), o = e('../shape/Ring'), + r = e('../shape/Sector') + return n.inherits(t, i), t.prototype._start = function (e, t) { + var i = n.merge(this.options, { + textStyle: { color: '#07a' }, + backgroundColor: 'rgba(250, 250, 250, 0.8)', + effect: { + x: this.canvasWidth / 2, + y: this.canvasHeight / 2, + r0: 60, + r: 100, + color: '#bbdcff', + brushType: 'fill', + textPosition: 'inside', + textFont: 'normal 30px verdana', + textColor: 'rgba(30, 144, 255, 0.6)', + timeInterval: 100 + } + }), s = i.effect, l = i.textStyle + + null == l.x && (l.x = s.x), null == l.y && (l.y = s.y + (s.r0 + s.r) / 2 - 5) + for (var h = this.createTextShape(i.textStyle), m = this.createBackgroundShape(i.backgroundColor), V = s.x, U = s.y, d = s.r0 + 6, p = s.r - 6, c = s.color, u = a.lift(c, .1), y = new o({ highlightStyle: n.clone(s) }), g = [], b = a.getGradientColors(['#ff6400', '#ffe100', '#97ff00'], 25), f = 15, k = 240, x = 0; 16 > x; x++) g.push(new r({ + highlightStyle: { + x: V, + y: U, + r0: d, + r: p, + startAngle: k - f, + endAngle: k, + brushType: 'fill', + color: u + }, + _color: a.getLinearGradient(V + d * Math.cos(k, !0), U - d * Math.sin(k, !0), V + d * Math.cos(k - f, !0), U - d * Math.sin(k - f, !0), [[0, b[2 * x]], [1, b[2 * x + 1]]]) + })), k -= f + k = 360 + for (var x = 0; 4 > x; x++) g.push(new r({ + highlightStyle: { + x: V, + y: U, + r0: d, + r: p, + startAngle: k - f, + endAngle: k, + brushType: 'fill', + color: u + }, + _color: a.getLinearGradient(V + d * Math.cos(k, !0), U - d * Math.sin(k, !0), V + d * Math.cos(k - f, !0), U - d * Math.sin(k - f, !0), [[0, b[2 * x + 32]], [1, b[2 * x + 33]]]) + })), k -= f + var _ = 0 + if (null != i.progress) { + e(m), _ = 100 * this.adjust(i.progress, [0, 1]).toFixed(2) / 5, y.highlightStyle.text = 5 * _ + '%', e(y) + for (var x = 0; 20 > x; x++) g[x].highlightStyle.color = _ > x ? g[x]._color : u, e(g[x]) + return e(h), void t() + } + return setInterval(function () { + e(m), _ += _ >= 20 ? -20 : 1, e(y) + for (var i = 0; 20 > i; i++) g[i].highlightStyle.color = _ > i ? g[i]._color : u, e(g[i]) + e(h), t() + }, s.timeInterval) + }, t + }), i('zrender/loadingEffect/Spin', ['require', './Base', '../tool/util', '../tool/color', '../tool/area', '../shape/Sector'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('./Base'), n = e('../tool/util'), a = e('../tool/color'), o = e('../tool/area'), + r = e('../shape/Sector') + return n.inherits(t, i), t.prototype._start = function (e, t) { + var i = n.merge(this.options, { + textStyle: { color: '#fff', textAlign: 'start' }, + backgroundColor: 'rgba(0, 0, 0, 0.8)' + }), s = this.createTextShape(i.textStyle), l = 10, + h = o.getTextWidth(s.highlightStyle.text, s.highlightStyle.textFont), + m = o.getTextHeight(s.highlightStyle.text, s.highlightStyle.textFont), + V = n.merge(this.options.effect || {}, { r0: 9, r: 15, n: 18, color: '#fff', timeInterval: 100 }), + U = this.getLocation(this.options.textStyle, h + l + 2 * V.r, Math.max(2 * V.r, m)) + V.x = U.x + V.r, V.y = s.highlightStyle.y = U.y + U.height / 2, s.highlightStyle.x = V.x + V.r + l + for (var d = this.createBackgroundShape(i.backgroundColor), p = V.n, c = V.x, u = V.y, y = V.r0, g = V.r, b = V.color, f = [], k = Math.round(180 / p), x = 0; p > x; x++) f[x] = new r({ + highlightStyle: { + x: c, + y: u, + r0: y, + r: g, + startAngle: k * x * 2, + endAngle: k * x * 2 + k, + color: a.alpha(b, (x + 1) / p), + brushType: 'fill' + } + }) + var _ = [0, c, u] + return setInterval(function () { + e(d), _[0] -= .3 + for (var i = 0; p > i; i++) f[i].rotation = _, e(f[i]) + e(s), t() + }, V.timeInterval) + }, t + }), i('zrender/loadingEffect/Whirling', ['require', './Base', '../tool/util', '../tool/area', '../shape/Ring', '../shape/Droplet', '../shape/Circle'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('./Base'), n = e('../tool/util'), a = e('../tool/area'), o = e('../shape/Ring'), + r = e('../shape/Droplet'), s = e('../shape/Circle') + return n.inherits(t, i), t.prototype._start = function (e, t) { + var i = n.merge(this.options, { + textStyle: { color: '#888', textAlign: 'start' }, + backgroundColor: 'rgba(250, 250, 250, 0.8)' + }), l = this.createTextShape(i.textStyle), h = 10, + m = a.getTextWidth(l.highlightStyle.text, l.highlightStyle.textFont), + V = a.getTextHeight(l.highlightStyle.text, l.highlightStyle.textFont), + U = n.merge(this.options.effect || {}, { + r: 18, + colorIn: '#fff', + colorOut: '#555', + colorWhirl: '#6cf', + timeInterval: 50 + }), d = this.getLocation(this.options.textStyle, m + h + 2 * U.r, Math.max(2 * U.r, V)) + U.x = d.x + U.r, U.y = l.highlightStyle.y = d.y + d.height / 2, l.highlightStyle.x = U.x + U.r + h + var p = this.createBackgroundShape(i.backgroundColor), c = new r({ + highlightStyle: { + a: Math.round(U.r / 2), + b: Math.round(U.r - U.r / 6), + brushType: 'fill', + color: U.colorWhirl + } + }), u = new s({ highlightStyle: { r: Math.round(U.r / 6), brushType: 'fill', color: U.colorIn } }), y = new o({ + highlightStyle: { + r0: Math.round(U.r - U.r / 3), + r: U.r, + brushType: 'fill', + color: U.colorOut + } + }), g = [0, U.x, U.y] + return c.highlightStyle.x = u.highlightStyle.x = y.highlightStyle.x = g[1], c.highlightStyle.y = u.highlightStyle.y = y.highlightStyle.y = g[2], setInterval(function () { + e(p), e(y), g[0] -= .3, c.rotation = g, e(c), e(u), e(l), t() + }, U.timeInterval) + }, t + }), i('echarts/theme/macarons', [], function () { + var e = { + color: ['#2ec7c9', '#b6a2de', '#5ab1ef', '#ffb980', '#d87a80', '#8d98b3', '#e5cf0d', '#97b552', '#95706d', '#dc69aa', '#07a2a4', '#9a7fd1', '#588dd5', '#f5994e', '#c05050', '#59678c', '#c9ab00', '#7eb00a', '#6f5553', '#c14089'], + title: { textStyle: { fontWeight: 'normal', color: '#008acd' } }, + dataRange: { itemWidth: 15, color: ['#5ab1ef', '#e0ffff'] }, + toolbox: { color: ['#1e90ff', '#1e90ff', '#1e90ff', '#1e90ff'], effectiveColor: '#ff4500' }, + tooltip: { + backgroundColor: 'rgba(50,50,50,0.5)', + axisPointer: { + type: 'line', + lineStyle: { color: '#008acd' }, + crossStyle: { color: '#008acd' }, + shadowStyle: { color: 'rgba(200,200,200,0.2)' } + } + }, + dataZoom: { dataBackgroundColor: '#efefff', fillerColor: 'rgba(182,162,222,0.2)', handleColor: '#008acd' }, + grid: { borderColor: '#eee' }, + categoryAxis: { axisLine: { lineStyle: { color: '#008acd' } }, splitLine: { lineStyle: { color: ['#eee'] } } }, + valueAxis: { + axisLine: { lineStyle: { color: '#008acd' } }, + splitArea: { show: !0, areaStyle: { color: ['rgba(250,250,250,0.1)', 'rgba(200,200,200,0.1)'] } }, + splitLine: { lineStyle: { color: ['#eee'] } } + }, + polar: { + axisLine: { lineStyle: { color: '#ddd' } }, + splitArea: { show: !0, areaStyle: { color: ['rgba(250,250,250,0.2)', 'rgba(200,200,200,0.2)'] } }, + splitLine: { lineStyle: { color: '#ddd' } } + }, + timeline: { + lineStyle: { color: '#008acd' }, + controlStyle: { normal: { color: '#008acd' }, emphasis: { color: '#008acd' } }, + symbol: 'emptyCircle', + symbolSize: 3 + }, + bar: { itemStyle: { normal: { barBorderRadius: 5 }, emphasis: { barBorderRadius: 5 } } }, + line: { smooth: !0, symbol: 'emptyCircle', symbolSize: 3 }, + k: { + itemStyle: { + normal: { + color: '#d87a80', + color0: '#2ec7c9', + lineStyle: { color: '#d87a80', color0: '#2ec7c9' } + } + } + }, + scatter: { symbol: 'circle', symbolSize: 4 }, + radar: { symbol: 'emptyCircle', symbolSize: 3 }, + map: { + itemStyle: { + normal: { areaStyle: { color: '#ddd' }, label: { textStyle: { color: '#d87a80' } } }, + emphasis: { areaStyle: { color: '#fe994e' } } + } + }, + force: { itemStyle: { normal: { linkStyle: { color: '#1e90ff' } } } }, + chord: { + itemStyle: { + normal: { + borderWidth: 1, + borderColor: 'rgba(128, 128, 128, 0.5)', + chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } } + }, + emphasis: { + borderWidth: 1, + borderColor: 'rgba(128, 128, 128, 0.5)', + chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } } + } + } + }, + gauge: { + axisLine: { lineStyle: { color: [[.2, '#2ec7c9'], [.8, '#5ab1ef'], [1, '#d87a80']], width: 10 } }, + axisTick: { splitNumber: 10, length: 15, lineStyle: { color: 'auto' } }, + splitLine: { length: 22, lineStyle: { color: 'auto' } }, + pointer: { width: 5 } + }, + textStyle: { fontFamily: '微软雅黑, Arial, Verdana, sans-serif' } + } + return e + }), i('echarts/theme/infographic', [], function () { + var e = { + color: ['#C1232B', '#B5C334', '#FCCE10', '#E87C25', '#27727B', '#FE8463', '#9BCA63', '#FAD860', '#F3A43B', '#60C0DD', '#D7504B', '#C6E579', '#F4E001', '#F0805A', '#26C0C0'], + title: { textStyle: { fontWeight: 'normal', color: '#27727B' } }, + dataRange: { x: 'right', y: 'center', itemWidth: 5, itemHeight: 25, color: ['#C1232B', '#FCCE10'] }, + toolbox: { + color: ['#C1232B', '#B5C334', '#FCCE10', '#E87C25', '#27727B', '#FE8463', '#9BCA63', '#FAD860', '#F3A43B', '#60C0DD'], + effectiveColor: '#ff4500' + }, + tooltip: { + backgroundColor: 'rgba(50,50,50,0.5)', + axisPointer: { + type: 'line', + lineStyle: { color: '#27727B', type: 'dashed' }, + crossStyle: { color: '#27727B' }, + shadowStyle: { color: 'rgba(200,200,200,0.3)' } + } + }, + dataZoom: { + dataBackgroundColor: 'rgba(181,195,52,0.3)', + fillerColor: 'rgba(181,195,52,0.2)', + handleColor: '#27727B' + }, + grid: { borderWidth: 0 }, + categoryAxis: { axisLine: { lineStyle: { color: '#27727B' } }, splitLine: { show: !1 } }, + valueAxis: { + axisLine: { show: !1 }, + splitArea: { show: !1 }, + splitLine: { lineStyle: { color: ['#ccc'], type: 'dashed' } } + }, + polar: { + axisLine: { lineStyle: { color: '#ddd' } }, + splitArea: { show: !0, areaStyle: { color: ['rgba(250,250,250,0.2)', 'rgba(200,200,200,0.2)'] } }, + splitLine: { lineStyle: { color: '#ddd' } } + }, + timeline: { + lineStyle: { color: '#27727B' }, + controlStyle: { normal: { color: '#27727B' }, emphasis: { color: '#27727B' } }, + symbol: 'emptyCircle', + symbolSize: 3 + }, + line: { + itemStyle: { + normal: { borderWidth: 2, borderColor: '#fff', lineStyle: { width: 3 } }, + emphasis: { borderWidth: 0 } + }, symbol: 'circle', symbolSize: 3.5 + }, + k: { + itemStyle: { + normal: { + color: '#C1232B', + color0: '#B5C334', + lineStyle: { width: 1, color: '#C1232B', color0: '#B5C334' } + } + } + }, + scatter: { + itemStyle: { + normal: { borderWidth: 1, borderColor: 'rgba(200,200,200,0.5)' }, + emphasis: { borderWidth: 0 } + }, symbol: 'star4', symbolSize: 4 + }, + radar: { symbol: 'emptyCircle', symbolSize: 3 }, + map: { + itemStyle: { + normal: { areaStyle: { color: '#ddd' }, label: { textStyle: { color: '#C1232B' } } }, + emphasis: { areaStyle: { color: '#fe994e' }, label: { textStyle: { color: 'rgb(100,0,0)' } } } + } + }, + force: { itemStyle: { normal: { linkStyle: { color: '#27727B' } } } }, + chord: { + itemStyle: { + normal: { + borderWidth: 1, + borderColor: 'rgba(128, 128, 128, 0.5)', + chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } } + }, + emphasis: { + borderWidth: 1, + borderColor: 'rgba(128, 128, 128, 0.5)', + chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } } + } + } + }, + gauge: { + center: ['50%', '80%'], + radius: '100%', + startAngle: 180, + endAngle: 0, + axisLine: { + show: !0, + lineStyle: { color: [[.2, '#B5C334'], [.8, '#27727B'], [1, '#C1232B']], width: '40%' } + }, + axisTick: { splitNumber: 2, length: 5, lineStyle: { color: '#fff' } }, + axisLabel: { textStyle: { color: '#fff', fontWeight: 'bolder' } }, + splitLine: { length: '5%', lineStyle: { color: '#fff' } }, + pointer: { width: '40%', length: '80%', color: '#fff' }, + title: { offsetCenter: [0, -20], textStyle: { color: 'auto', fontSize: 20 } }, + detail: { offsetCenter: [0, 0], textStyle: { color: 'auto', fontSize: 40 } } + }, + textStyle: { fontFamily: '微软雅黑, Arial, Verdana, sans-serif' } + } + return e + }), i('zrender/dep/excanvas', ['require'], function () { + return document.createElement('canvas').getContext ? G_vmlCanvasManager = !1 : !function () { + function e () { + return this.context_ || (this.context_ = new f(this)) + } + + function t (e, t) { + var i = O.call(arguments, 2) + return function () { + return e.apply(t, i.concat(O.call(arguments))) + } + } + + function i (e) { + return String(e).replace(/&/g, '&').replace(/"/g, '"') + } + + function n (e, t, i) { + e.namespaces[t] || e.namespaces.add(t, i, '#default#VML') + } + + function a (e) { + if (n(e, 'g_vml_', 'urn:schemas-microsoft-com:vml'), n(e, 'g_o_', 'urn:schemas-microsoft-com:office:office'), !e.styleSheets.ex_canvas_) { + var t = e.createStyleSheet() + t.owningElement.id = 'ex_canvas_', t.cssText = 'canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}' + } + } + + function o (e) { + var t = e.srcElement + switch (e.propertyName) { + case'width': + t.getContext().clearRect(), t.style.width = t.attributes.width.nodeValue + 'px', t.firstChild.style.width = t.clientWidth + 'px' + break + case'height': + t.getContext().clearRect(), t.style.height = t.attributes.height.nodeValue + 'px', t.firstChild.style.height = t.clientHeight + 'px' + } + } + + function r (e) { + var t = e.srcElement + t.firstChild && (t.firstChild.style.width = t.clientWidth + 'px', t.firstChild.style.height = t.clientHeight + 'px') + } + + function s () { + return [[1, 0, 0], [0, 1, 0], [0, 0, 1]] + } + + function l (e, t) { + for (var i = s(), n = 0; 3 > n; n++) for (var a = 0; 3 > a; a++) { + for (var o = 0, r = 0; 3 > r; r++) o += e[n][r] * t[r][a] + i[n][a] = o + } + return i + } + + function h (e, t) { + t.fillStyle = e.fillStyle, t.lineCap = e.lineCap, t.lineJoin = e.lineJoin, t.lineWidth = e.lineWidth, t.miterLimit = e.miterLimit, t.shadowBlur = e.shadowBlur, t.shadowColor = e.shadowColor, t.shadowOffsetX = e.shadowOffsetX, t.shadowOffsetY = e.shadowOffsetY, t.strokeStyle = e.strokeStyle, t.globalAlpha = e.globalAlpha, t.font = e.font, t.textAlign = e.textAlign, t.textBaseline = e.textBaseline, t.scaleX_ = e.scaleX_, t.scaleY_ = e.scaleY_, t.lineScale_ = e.lineScale_ + } + + function m (e) { + var t = e.indexOf('(', 3), i = e.indexOf(')', t + 1), n = e.substring(t + 1, i).split(',') + return (4 != n.length || 'a' != e.charAt(3)) && (n[3] = 1), n + } + + function V (e) { + return parseFloat(e) / 100 + } + + function U (e, t, i) { + return Math.min(i, Math.max(t, e)) + } + + function d (e) { + var t, i, n, a, o, r + if (a = parseFloat(e[0]) / 360 % 360, 0 > a && a++, o = U(V(e[1]), 0, 1), r = U(V(e[2]), 0, 1), 0 == o) t = i = n = r else { + var s = .5 > r ? r * (1 + o) : r + o - r * o, l = 2 * r - s + t = p(l, s, a + 1 / 3), i = p(l, s, a), n = p(l, s, a - 1 / 3) + } + return '#' + D[Math.floor(255 * t)] + D[Math.floor(255 * i)] + D[Math.floor(255 * n)] + } + + function p (e, t, i) { + return 0 > i && i++, i > 1 && i--, 1 > 6 * i ? e + 6 * (t - e) * i : 1 > 2 * i ? t : 2 > 3 * i ? e + (t - e) * (2 / 3 - i) * 6 : e + } + + function c (e) { + if (e in R) return R[e] + var t, i = 1 + if (e = String(e), '#' == e.charAt(0)) t = e else if (/^rgb/.test(e)) { + for (var n, a = m(e), t = '#', o = 0; 3 > o; o++) n = -1 != a[o].indexOf('%') ? Math.floor(255 * V(a[o])) : +a[o], t += D[U(n, 0, 255)] + i = +a[3] + } else if (/^hsl/.test(e)) { + var a = m(e) + t = d(a), i = a[3] + } else t = H[e] || e + return R[e] = { color: t, alpha: i } + } + + function u (e) { + if (Y[e]) return Y[e] + var t, i = document.createElement('div'), n = i.style + try { + n.font = e, t = n.fontFamily.split(',')[0] + } catch (a) { + } + return Y[e] = { + style: n.fontStyle || G.style, + variant: n.fontVariant || G.variant, + weight: n.fontWeight || G.weight, + size: n.fontSize || G.size, + family: t || G.family + } + } + + function y (e, t) { + var i = {} + for (var n in e) i[n] = e[n] + var a = parseFloat(t.currentStyle.fontSize), o = parseFloat(e.size) + return i.size = 'number' == typeof e.size ? e.size : -1 != e.size.indexOf('px') ? o : -1 != e.size.indexOf('em') ? a * o : -1 != e.size.indexOf('%') ? a / 100 * o : -1 != e.size.indexOf('pt') ? o / .75 : a, i + } + + function g (e) { + return e.style + ' ' + e.variant + ' ' + e.weight + ' ' + e.size + 'px \'' + e.family + '\'' + } + + function b (e) { + return Q[e] || 'square' + } + + function f (e) { + this.m_ = s(), this.mStack_ = [], this.aStack_ = [], this.currentPath_ = [], this.strokeStyle = '#000', this.fillStyle = '#000', this.lineWidth = 1, this.lineJoin = 'miter', this.lineCap = 'butt', this.miterLimit = 1 * A, this.globalAlpha = 1, this.font = '12px 微软雅黑', this.textAlign = 'left', this.textBaseline = 'alphabetic', this.canvas = e + var t = 'width:' + e.clientWidth + 'px;height:' + e.clientHeight + 'px;overflow:hidden;position:absolute', + i = e.ownerDocument.createElement('div') + i.style.cssText = t, e.appendChild(i) + var n = i.cloneNode(!1) + n.style.backgroundColor = '#fff', n.style.filter = 'alpha(opacity=0)', e.appendChild(n), this.element_ = i, this.scaleX_ = 1, this.scaleY_ = 1, this.lineScale_ = 1 + } + + function k (e, t, i, n) { + e.currentPath_.push({ + type: 'bezierCurveTo', + cp1x: t.x, + cp1y: t.y, + cp2x: i.x, + cp2y: i.y, + x: n.x, + y: n.y + }), e.currentX_ = n.x, e.currentY_ = n.y + } + + function x (e, t) { + var i = c(e.strokeStyle), n = i.color, a = i.alpha * e.globalAlpha, o = e.lineScale_ * e.lineWidth + 1 > o && (a *= o), t.push('') + } + + function _ (e, t, i, n) { + var a = e.fillStyle, o = e.scaleX_, r = e.scaleY_, s = n.x - i.x, l = n.y - i.y + if (a instanceof v) { + var h = 0, m = { x: 0, y: 0 }, V = 0, U = 1 + if ('gradient' == a.type_) { + var d = a.x0_ / o, p = a.y0_ / r, u = a.x1_ / o, y = a.y1_ / r, g = L(e, d, p), b = L(e, u, y), + f = b.x - g.x, k = b.y - g.y + h = 180 * Math.atan2(f, k) / Math.PI, 0 > h && (h += 360), 1e-6 > h && (h = 0) + } else { + var g = L(e, a.x0_, a.y0_) + m = { x: (g.x - i.x) / s, y: (g.y - i.y) / l }, s /= o * A, l /= r * A + var x = C.max(s, l) + V = 2 * a.r0_ / x, U = 2 * a.r1_ / x - V + } + var _ = a.colors_ + _.sort(function (e, t) { + return e.offset - t.offset + }) + for (var W = _.length, X = _[0].color, K = _[W - 1].color, I = _[0].alpha * e.globalAlpha, J = _[W - 1].alpha * e.globalAlpha, S = [], E = 0; W > E; E++) { + var F = _[E] + S.push(F.offset * U + V + ' ' + F.color) + } + t.push('') + } else if (a instanceof w) { + if (s && l) { + var T = -i.x, z = -i.y + t.push('') + } + } else { + var M = c(e.fillStyle), O = M.color, P = M.alpha * e.globalAlpha + t.push('') + } + } + + function L (e, t, i) { + var n = e.m_ + return { + x: A * (t * n[0][0] + i * n[1][0] + n[2][0]) - M, + y: A * (t * n[0][1] + i * n[1][1] + n[2][1]) - M + } + } + + function W (e) { + return isFinite(e[0][0]) && isFinite(e[0][1]) && isFinite(e[1][0]) && isFinite(e[1][1]) && isFinite(e[2][0]) && isFinite(e[2][1]) + } + + function X (e, t, i) { + if (W(t) && (e.m_ = t, e.scaleX_ = Math.sqrt(t[0][0] * t[0][0] + t[0][1] * t[0][1]), e.scaleY_ = Math.sqrt(t[1][0] * t[1][0] + t[1][1] * t[1][1]), i)) { + var n = t[0][0] * t[1][1] - t[0][1] * t[1][0] + e.lineScale_ = z(T(n)) + } + } + + function v (e) { + this.type_ = e, this.x0_ = 0, this.y0_ = 0, this.r0_ = 0, this.x1_ = 0, this.y1_ = 0, this.r1_ = 0, this.colors_ = [] + } + + function w (e, t) { + switch (I(e), t) { + case'repeat': + case null: + case'': + this.repetition_ = 'repeat' + break + case'repeat-x': + case'repeat-y': + case'no-repeat': + this.repetition_ = t + break + default: + K('SYNTAX_ERR') + } + this.src_ = e.src, this.width_ = e.width, this.height_ = e.height + } + + function K (e) { + throw new J(e) + } + + function I (e) { + e && 1 == e.nodeType && 'IMG' == e.tagName || K('TYPE_MISMATCH_ERR'), 'complete' != e.readyState && K('INVALID_STATE_ERR') + } + + function J (e) { + this.code = this[e], this.message = e + ': DOM Exception ' + this.code + } + + var C = Math, S = C.round, E = C.sin, F = C.cos, T = C.abs, z = C.sqrt, A = 10, M = A / 2, + O = (+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1], Array.prototype.slice) + a(document) + var P = { + init: function (e) { + var i = e || document + i.createElement('canvas'), i.attachEvent('onreadystatechange', t(this.init_, this, i)) + }, init_: function (e) { + for (var t = e.getElementsByTagName('canvas'), i = 0; i < t.length; i++) this.initElement(t[i]) + }, initElement: function (t) { + if (!t.getContext) { + t.getContext = e, a(t.ownerDocument), t.innerHTML = '', t.attachEvent('onpropertychange', o), t.attachEvent('onresize', r) + var i = t.attributes + i.width && i.width.specified ? t.style.width = i.width.nodeValue + 'px' : t.width = t.clientWidth, i.height && i.height.specified ? t.style.height = i.height.nodeValue + 'px' : t.height = t.clientHeight + } + return t + } + } + P.init() + for (var D = [], N = 0; 16 > N; N++) for (var B = 0; 16 > B; B++) D[16 * N + B] = N.toString(16) + B.toString(16) + var H = { + aliceblue: '#F0F8FF', + antiquewhite: '#FAEBD7', + aquamarine: '#7FFFD4', + azure: '#F0FFFF', + beige: '#F5F5DC', + bisque: '#FFE4C4', + black: '#000000', + blanchedalmond: '#FFEBCD', + blueviolet: '#8A2BE2', + brown: '#A52A2A', + burlywood: '#DEB887', + cadetblue: '#5F9EA0', + chartreuse: '#7FFF00', + chocolate: '#D2691E', + coral: '#FF7F50', + cornflowerblue: '#6495ED', + cornsilk: '#FFF8DC', + crimson: '#DC143C', + cyan: '#00FFFF', + darkblue: '#00008B', + darkcyan: '#008B8B', + darkgoldenrod: '#B8860B', + darkgray: '#A9A9A9', + darkgreen: '#006400', + darkgrey: '#A9A9A9', + darkkhaki: '#BDB76B', + darkmagenta: '#8B008B', + darkolivegreen: '#556B2F', + darkorange: '#FF8C00', + darkorchid: '#9932CC', + darkred: '#8B0000', + darksalmon: '#E9967A', + darkseagreen: '#8FBC8F', + darkslateblue: '#483D8B', + darkslategray: '#2F4F4F', + darkslategrey: '#2F4F4F', + darkturquoise: '#00CED1', + darkviolet: '#9400D3', + deeppink: '#FF1493', + deepskyblue: '#00BFFF', + dimgray: '#696969', + dimgrey: '#696969', + dodgerblue: '#1E90FF', + firebrick: '#B22222', + floralwhite: '#FFFAF0', + forestgreen: '#228B22', + gainsboro: '#DCDCDC', + ghostwhite: '#F8F8FF', + gold: '#FFD700', + goldenrod: '#DAA520', + grey: '#808080', + greenyellow: '#ADFF2F', + honeydew: '#F0FFF0', + hotpink: '#FF69B4', + indianred: '#CD5C5C', + indigo: '#4B0082', + ivory: '#FFFFF0', + khaki: '#F0E68C', + lavender: '#E6E6FA', + lavenderblush: '#FFF0F5', + lawngreen: '#7CFC00', + lemonchiffon: '#FFFACD', + lightblue: '#ADD8E6', + lightcoral: '#F08080', + lightcyan: '#E0FFFF', + lightgoldenrodyellow: '#FAFAD2', + lightgreen: '#90EE90', + lightgrey: '#D3D3D3', + lightpink: '#FFB6C1', + lightsalmon: '#FFA07A', + lightseagreen: '#20B2AA', + lightskyblue: '#87CEFA', + lightslategray: '#778899', + lightslategrey: '#778899', + lightsteelblue: '#B0C4DE', + lightyellow: '#FFFFE0', + limegreen: '#32CD32', + linen: '#FAF0E6', + magenta: '#FF00FF', + mediumaquamarine: '#66CDAA', + mediumblue: '#0000CD', + mediumorchid: '#BA55D3', + mediumpurple: '#9370DB', + mediumseagreen: '#3CB371', + mediumslateblue: '#7B68EE', + mediumspringgreen: '#00FA9A', + mediumturquoise: '#48D1CC', + mediumvioletred: '#C71585', + midnightblue: '#191970', + mintcream: '#F5FFFA', + mistyrose: '#FFE4E1', + moccasin: '#FFE4B5', + navajowhite: '#FFDEAD', + oldlace: '#FDF5E6', + olivedrab: '#6B8E23', + orange: '#FFA500', + orangered: '#FF4500', + orchid: '#DA70D6', + palegoldenrod: '#EEE8AA', + palegreen: '#98FB98', + paleturquoise: '#AFEEEE', + palevioletred: '#DB7093', + papayawhip: '#FFEFD5', + peachpuff: '#FFDAB9', + peru: '#CD853F', + pink: '#FFC0CB', + plum: '#DDA0DD', + powderblue: '#B0E0E6', + rosybrown: '#BC8F8F', + royalblue: '#4169E1', + saddlebrown: '#8B4513', + salmon: '#FA8072', + sandybrown: '#F4A460', + seagreen: '#2E8B57', + seashell: '#FFF5EE', + sienna: '#A0522D', + skyblue: '#87CEEB', + slateblue: '#6A5ACD', + slategray: '#708090', + slategrey: '#708090', + snow: '#FFFAFA', + springgreen: '#00FF7F', + steelblue: '#4682B4', + tan: '#D2B48C', + thistle: '#D8BFD8', + tomato: '#FF6347', + turquoise: '#40E0D0', + violet: '#EE82EE', + wheat: '#F5DEB3', + whitesmoke: '#F5F5F5', + yellowgreen: '#9ACD32' + }, R = {}, G = { style: 'normal', variant: 'normal', weight: 'normal', size: 12, family: '微软雅黑' }, Y = {}, + Q = { butt: 'flat', round: 'round' }, Z = f.prototype + Z.clearRect = function () { + this.textMeasureEl_ && (this.textMeasureEl_.removeNode(!0), this.textMeasureEl_ = null), this.element_.innerHTML = '' + }, Z.beginPath = function () { + this.currentPath_ = [] + }, Z.moveTo = function (e, t) { + var i = L(this, e, t) + this.currentPath_.push({ type: 'moveTo', x: i.x, y: i.y }), this.currentX_ = i.x, this.currentY_ = i.y + }, Z.lineTo = function (e, t) { + var i = L(this, e, t) + this.currentPath_.push({ type: 'lineTo', x: i.x, y: i.y }), this.currentX_ = i.x, this.currentY_ = i.y + }, Z.bezierCurveTo = function (e, t, i, n, a, o) { + var r = L(this, a, o), s = L(this, e, t), l = L(this, i, n) + k(this, s, l, r) + }, Z.quadraticCurveTo = function (e, t, i, n) { + var a = L(this, e, t), o = L(this, i, n), r = { + x: this.currentX_ + 2 / 3 * (a.x - this.currentX_), + y: this.currentY_ + 2 / 3 * (a.y - this.currentY_) + }, s = { x: r.x + (o.x - this.currentX_) / 3, y: r.y + (o.y - this.currentY_) / 3 } + k(this, r, s, o) + }, Z.arc = function (e, t, i, n, a, o) { + i *= A + var r = o ? 'at' : 'wa', s = e + F(n) * i - M, l = t + E(n) * i - M, h = e + F(a) * i - M, + m = t + E(a) * i - M + s != h || o || (s += .125) + var V = L(this, e, t), U = L(this, s, l), d = L(this, h, m) + this.currentPath_.push({ + type: r, + x: V.x, + y: V.y, + radius: i, + xStart: U.x, + yStart: U.y, + xEnd: d.x, + yEnd: d.y + }) + }, Z.rect = function (e, t, i, n) { + this.moveTo(e, t), this.lineTo(e + i, t), this.lineTo(e + i, t + n), this.lineTo(e, t + n), this.closePath() + }, Z.strokeRect = function (e, t, i, n) { + var a = this.currentPath_ + this.beginPath(), this.moveTo(e, t), this.lineTo(e + i, t), this.lineTo(e + i, t + n), this.lineTo(e, t + n), this.closePath(), this.stroke(), this.currentPath_ = a + }, Z.fillRect = function (e, t, i, n) { + var a = this.currentPath_ + this.beginPath(), this.moveTo(e, t), this.lineTo(e + i, t), this.lineTo(e + i, t + n), this.lineTo(e, t + n), this.closePath(), this.fill(), this.currentPath_ = a + }, Z.createLinearGradient = function (e, t, i, n) { + var a = new v('gradient') + return a.x0_ = e, a.y0_ = t, a.x1_ = i, a.y1_ = n, a + }, Z.createRadialGradient = function (e, t, i, n, a, o) { + var r = new v('gradientradial') + return r.x0_ = e, r.y0_ = t, r.r0_ = i, r.x1_ = n, r.y1_ = a, r.r1_ = o, r + }, Z.drawImage = function (e) { + var t, i, n, a, o, r, s, l, h = e.runtimeStyle.width, m = e.runtimeStyle.height + e.runtimeStyle.width = 'auto', e.runtimeStyle.height = 'auto' + var V = e.width, U = e.height + if (e.runtimeStyle.width = h, e.runtimeStyle.height = m, 3 == arguments.length) t = arguments[1], i = arguments[2], o = r = 0, s = n = V, l = a = U else if (5 == arguments.length) t = arguments[1], i = arguments[2], n = arguments[3], a = arguments[4], o = r = 0, s = V, l = U else { + if (9 != arguments.length) throw Error('Invalid number of arguments') + o = arguments[1], r = arguments[2], s = arguments[3], l = arguments[4], t = arguments[5], i = arguments[6], n = arguments[7], a = arguments[8] + } + var d = L(this, t, i), p = [], c = 10, u = 10, y = b = 1 + if (p.push(' '), (o || r) && p.push('
        '), p.push('
        '), (o || r) && p.push('
        '), p.push('
        '), this.element_.insertAdjacentHTML('BeforeEnd', p.join('')) + }, Z.stroke = function (e) { + var t = [], i = 10, n = 10 + t.push(''), e ? _(this, t, a, o) : x(this, t), t.push(''), this.element_.insertAdjacentHTML('beforeEnd', t.join('')) + }, Z.fill = function () { + this.stroke(!0) + }, Z.closePath = function () { + this.currentPath_.push({ type: 'close' }) + }, Z.save = function () { + var e = {} + h(this, e), this.aStack_.push(e), this.mStack_.push(this.m_), this.m_ = l(s(), this.m_) + }, Z.restore = function () { + this.aStack_.length && (h(this.aStack_.pop(), this), this.m_ = this.mStack_.pop()) + }, Z.translate = function (e, t) { + var i = [[1, 0, 0], [0, 1, 0], [e, t, 1]] + X(this, l(i, this.m_), !1) + }, Z.rotate = function (e) { + var t = F(e), i = E(e), n = [[t, i, 0], [-i, t, 0], [0, 0, 1]] + X(this, l(n, this.m_), !1) + }, Z.scale = function (e, t) { + var i = [[e, 0, 0], [0, t, 0], [0, 0, 1]] + X(this, l(i, this.m_), !0) + }, Z.transform = function (e, t, i, n, a, o) { + var r = [[e, t, 0], [i, n, 0], [a, o, 1]] + X(this, l(r, this.m_), !0) + }, Z.setTransform = function (e, t, i, n, a, o) { + var r = [[e, t, 0], [i, n, 0], [a, o, 1]] + X(this, r, !0) + }, Z.drawText_ = function (e, t, n, a, o) { + var r = this.m_, s = 1e3, l = 0, h = s, m = { x: 0, y: 0 }, V = [], U = y(u(this.font), this.element_), + d = g(U), p = this.element_.currentStyle, c = this.textAlign.toLowerCase() + switch (c) { + case'left': + case'center': + case'right': + break + case'end': + c = 'ltr' == p.direction ? 'right' : 'left' + break + case'start': + c = 'rtl' == p.direction ? 'right' : 'left' + break + default: + c = 'left' + } + switch (this.textBaseline) { + case'hanging': + case'top': + m.y = U.size / 1.75 + break + case'middle': + break + default: + case null: + case'alphabetic': + case'ideographic': + case'bottom': + m.y = -U.size / 2.25 + } + switch (c) { + case'right': + l = s, h = .05 + break + case'center': + l = h = s / 2 + } + var b = L(this, t + m.x, n + m.y) + V.push(''), o ? x(this, V) : _(this, V, { + x: -l, + y: 0 + }, { x: h, y: U.size }) + var f = r[0][0].toFixed(3) + ',' + r[1][0].toFixed(3) + ',' + r[0][1].toFixed(3) + ',' + r[1][1].toFixed(3) + ',0,0', + k = S(b.x / A) + ',' + S(b.y / A) + V.push('', '', ''), this.element_.insertAdjacentHTML('beforeEnd', V.join('')) + }, Z.fillText = function (e, t, i, n) { + this.drawText_(e, t, i, n, !1) + }, Z.strokeText = function (e, t, i, n) { + this.drawText_(e, t, i, n, !0) + }, Z.measureText = function (e) { + if (!this.textMeasureEl_) { + var t = '' + this.element_.insertAdjacentHTML('beforeEnd', t), this.textMeasureEl_ = this.element_.lastChild + } + var i = this.element_.ownerDocument + this.textMeasureEl_.innerHTML = '' + try { + this.textMeasureEl_.style.font = this.font + } catch (n) { + } + return this.textMeasureEl_.appendChild(i.createTextNode(e)), { width: this.textMeasureEl_.offsetWidth } + }, Z.clip = function () { + }, Z.arcTo = function () { + }, Z.createPattern = function (e, t) { + return new w(e, t) + }, v.prototype.addColorStop = function (e, t) { + t = c(t), this.colors_.push({ offset: e, color: t.color, alpha: t.alpha }) + } + var q = J.prototype = new Error + q.INDEX_SIZE_ERR = 1, q.DOMSTRING_SIZE_ERR = 2, q.HIERARCHY_REQUEST_ERR = 3, q.WRONG_DOCUMENT_ERR = 4, q.INVALID_CHARACTER_ERR = 5, q.NO_DATA_ALLOWED_ERR = 6, q.NO_MODIFICATION_ALLOWED_ERR = 7, q.NOT_FOUND_ERR = 8, q.NOT_SUPPORTED_ERR = 9, q.INUSE_ATTRIBUTE_ERR = 10, q.INVALID_STATE_ERR = 11, q.SYNTAX_ERR = 12, q.INVALID_MODIFICATION_ERR = 13, q.NAMESPACE_ERR = 14, q.INVALID_ACCESS_ERR = 15, q.VALIDATION_ERR = 16, q.TYPE_MISMATCH_ERR = 17, G_vmlCanvasManager = P, CanvasRenderingContext2D = f, CanvasGradient = v, CanvasPattern = w, DOMException = J + }(), G_vmlCanvasManager + }), i('zrender/mixin/Eventful', ['require'], function () { + var e = function () { + this._handlers = {} + } + return e.prototype.one = function (e, t, i) { + var n = this._handlers + return t && e ? (n[e] || (n[e] = []), n[e].push({ h: t, one: !0, ctx: i || this }), this) : this + }, e.prototype.bind = function (e, t, i) { + var n = this._handlers + return t && e ? (n[e] || (n[e] = []), n[e].push({ h: t, one: !1, ctx: i || this }), this) : this + }, e.prototype.unbind = function (e, t) { + var i = this._handlers + if (!e) return this._handlers = {}, this + if (t) { + if (i[e]) { + for (var n = [], a = 0, o = i[e].length; o > a; a++) i[e][a].h != t && n.push(i[e][a]) + i[e] = n + } + i[e] && 0 === i[e].length && delete i[e] + } else delete i[e] + return this + }, e.prototype.dispatch = function (e) { + if (this._handlers[e]) { + var t = arguments, i = t.length + i > 3 && (t = Array.prototype.slice.call(t, 1)) + for (var n = this._handlers[e], a = n.length, o = 0; a > o;) { + switch (i) { + case 1: + n[o].h.call(n[o].ctx) + break + case 2: + n[o].h.call(n[o].ctx, t[1]) + break + case 3: + n[o].h.call(n[o].ctx, t[1], t[2]) + break + default: + n[o].h.apply(n[o].ctx, t) + } + n[o].one ? (n.splice(o, 1), a--) : o++ + } + } + return this + }, e.prototype.dispatchWithContext = function (e) { + if (this._handlers[e]) { + var t = arguments, i = t.length + i > 4 && (t = Array.prototype.slice.call(t, 1, t.length - 1)) + for (var n = t[t.length - 1], a = this._handlers[e], o = a.length, r = 0; o > r;) { + switch (i) { + case 1: + a[r].h.call(n) + break + case 2: + a[r].h.call(n, t[1]) + break + case 3: + a[r].h.call(n, t[1], t[2]) + break + default: + a[r].h.apply(n, t) + } + a[r].one ? (a.splice(r, 1), o--) : r++ + } + } + return this + }, e + }), i('zrender/tool/log', ['require', '../config'], function (e) { + var t = e('../config') + return function () { + if (0 !== t.debugMode) if (1 == t.debugMode) for (var e in arguments) throw new Error(arguments[e]) else if (t.debugMode > 1) for (var e in arguments) console.log(arguments[e]) + } + }), i('zrender/tool/guid', [], function () { + var e = 2311 + return function () { + return 'zrender__' + e++ + } + }), i('zrender/Handler', ['require', './config', './tool/env', './tool/event', './tool/util', './tool/vector', './tool/matrix', './mixin/Eventful'], function (e) { + 'use strict' + + function t (e, t) { + return function (i, n) { + return e.call(t, i, n) + } + } + + function i (e, t) { + return function (i, n, a) { + return e.call(t, i, n, a) + } + } + + function n (e) { + for (var i = d.length; i--;) { + var n = d[i] + e['_' + n + 'Handler'] = t(c[n], e) + } + } + + function a (e, t, i) { + if (this._draggingTarget && this._draggingTarget.id == e.id || e.isSilent()) return !1 + var n = this._event + if (e.isCover(t, i)) { + e.hoverable && this.storage.addHover(e) + for (var a = e.parent; a;) { + if (a.clipShape && !a.clipShape.isCover(this._mouseX, this._mouseY)) return !1 + a = a.parent + } + return this._lastHover != e && (this._processOutShape(n), this._processDragLeave(n), this._lastHover = e, this._processDragEnter(n)), this._processOverShape(n), this._processDragOver(n), this._hasfound = 1, !0 + } + return !1 + } + + var o = e('./config'), r = e('./tool/env'), s = e('./tool/event'), l = e('./tool/util'), h = e('./tool/vector'), + m = e('./tool/matrix'), V = o.EVENT, U = e('./mixin/Eventful'), + d = ['resize', 'click', 'dblclick', 'mousewheel', 'mousemove', 'mouseout', 'mouseup', 'mousedown', 'touchstart', 'touchend', 'touchmove'], + p = function (e) { + if (window.G_vmlCanvasManager) return !0 + e = e || window.event + var t = e.toElement || e.relatedTarget || e.srcElement || e.target + return t && t.className.match(o.elementClassName) + }, c = { + resize: function (e) { + e = e || window.event, this._lastHover = null, this._isMouseDown = 0, this.dispatch(V.RESIZE, e) + }, click: function (e, t) { + if (p(e) || t) { + e = this._zrenderEventFixed(e) + var i = this._lastHover; + (i && i.clickable || !i) && this._clickThreshold < 5 && this._dispatchAgency(i, V.CLICK, e), this._mousemoveHandler(e) + } + }, dblclick: function (e, t) { + if (p(e) || t) { + e = e || window.event, e = this._zrenderEventFixed(e) + var i = this._lastHover; + (i && i.clickable || !i) && this._clickThreshold < 5 && this._dispatchAgency(i, V.DBLCLICK, e), this._mousemoveHandler(e) + } + }, mousewheel: function (e, t) { + if (p(e) || t) { + e = this._zrenderEventFixed(e) + var i = e.wheelDelta || -e.detail, n = i > 0 ? 1.1 : 1 / 1.1, a = !1, o = this._mouseX, + r = this._mouseY + this.painter.eachBuildinLayer(function (t) { + var i = t.position + if (t.zoomable) { + t.__zoom = t.__zoom || 1 + var l = t.__zoom + l *= n, l = Math.max(Math.min(t.maxZoom, l), t.minZoom), n = l / t.__zoom, t.__zoom = l, i[0] -= (o - i[0]) * (n - 1), i[1] -= (r - i[1]) * (n - 1), t.scale[0] *= n, t.scale[1] *= n, t.dirty = !0, a = !0, s.stop(e) + } + }), a && this.painter.refresh(), this._dispatchAgency(this._lastHover, V.MOUSEWHEEL, e), this._mousemoveHandler(e) + } + }, mousemove: function (e, t) { + if ((p(e) || t) && !this.painter.isLoading()) { + e = this._zrenderEventFixed(e), this._lastX = this._mouseX, this._lastY = this._mouseY, this._mouseX = s.getX(e), this._mouseY = s.getY(e) + var i = this._mouseX - this._lastX, n = this._mouseY - this._lastY + this._processDragStart(e), this._hasfound = 0, this._event = e, this._iterateAndFindHover(), this._hasfound || ((!this._draggingTarget || this._lastHover && this._lastHover != this._draggingTarget) && (this._processOutShape(e), + this._processDragLeave(e)), this._lastHover = null, this.storage.delHover(), this.painter.clearHover()) + var a = 'default' + if (this._draggingTarget) this.storage.drift(this._draggingTarget.id, i, n), this._draggingTarget.modSelf(), this.storage.addHover(this._draggingTarget), this._clickThreshold++ else if (this._isMouseDown) { + var o = !1 + this.painter.eachBuildinLayer(function (e) { + e.panable && (a = 'move', e.position[0] += i, e.position[1] += n, o = !0, e.dirty = !0) + }), o && this.painter.refresh() + } + this._draggingTarget || this._hasfound && this._lastHover.draggable ? a = 'move' : this._hasfound && this._lastHover.clickable && (a = 'pointer'), this.root.style.cursor = a, this._dispatchAgency(this._lastHover, V.MOUSEMOVE, e), (this._draggingTarget || this._hasfound || this.storage.hasHoverShape()) && this.painter.refreshHover() + } + }, mouseout: function (e, t) { + if (p(e) || t) { + e = this._zrenderEventFixed(e) + var i = e.toElement || e.relatedTarget + if (i != this.root) for (; i && 9 != i.nodeType;) { + if (i == this.root) return void this._mousemoveHandler(e) + i = i.parentNode + } + e.zrenderX = this._lastX, e.zrenderY = this._lastY, this.root.style.cursor = 'default', this._isMouseDown = 0, this._processOutShape(e), this._processDrop(e), this._processDragEnd(e), this.painter.isLoading() || this.painter.refreshHover(), this.dispatch(V.GLOBALOUT, e) + } + }, mousedown: function (e, t) { + if (p(e) || t) { + if (this._clickThreshold = 0, 2 == this._lastDownButton) return this._lastDownButton = e.button, void (this._mouseDownTarget = null) + this._lastMouseDownMoment = new Date, e = this._zrenderEventFixed(e), this._isMouseDown = 1, this._mouseDownTarget = this._lastHover, this._dispatchAgency(this._lastHover, V.MOUSEDOWN, e), this._lastDownButton = e.button + } + }, mouseup: function (e, t) { + (p(e) || t) && (e = this._zrenderEventFixed(e), this.root.style.cursor = 'default', this._isMouseDown = 0, this._mouseDownTarget = null, this._dispatchAgency(this._lastHover, V.MOUSEUP, e), this._processDrop(e), this._processDragEnd(e)) + }, touchstart: function (e, t) { + (p(e) || t) && (e = this._zrenderEventFixed(e, !0), this._lastTouchMoment = new Date, this._mobileFindFixed(e), this._mousedownHandler(e)) + }, touchmove: function (e, t) { + (p(e) || t) && (e = this._zrenderEventFixed(e, !0), this._mousemoveHandler(e), this._isDragging && s.stop(e)) + }, touchend: function (e, t) { + if (p(e) || t) { + e = this._zrenderEventFixed(e, !0), this._mouseupHandler(e) + var i = new Date + i - this._lastTouchMoment < V.touchClickDelay && (this._mobileFindFixed(e), this._clickHandler(e), i - this._lastClickMoment < V.touchClickDelay / 2 && (this._dblclickHandler(e), this._lastHover && this._lastHover.clickable && s.stop(e)), this._lastClickMoment = i), this.painter.clearHover() + } + } + }, u = function (e, t, o) { + U.call(this), this.root = e, this.storage = t, this.painter = o, this._lastX = this._lastY = this._mouseX = this._mouseY = 0, this._findHover = i(a, this), this._domHover = o.getDomHover(), n(this), window.addEventListener ? (window.addEventListener('resize', this._resizeHandler), r.os.tablet || r.os.phone ? (e.addEventListener('touchstart', this._touchstartHandler), e.addEventListener('touchmove', this._touchmoveHandler), e.addEventListener('touchend', this._touchendHandler)) : (e.addEventListener('click', this._clickHandler), e.addEventListener('dblclick', this._dblclickHandler), e.addEventListener('mousewheel', this._mousewheelHandler), e.addEventListener('mousemove', this._mousemoveHandler), e.addEventListener('mousedown', this._mousedownHandler), e.addEventListener('mouseup', this._mouseupHandler)), e.addEventListener('DOMMouseScroll', this._mousewheelHandler), e.addEventListener('mouseout', this._mouseoutHandler)) : (window.attachEvent('onresize', this._resizeHandler), e.attachEvent('onclick', this._clickHandler), e.ondblclick = this._dblclickHandler, e.attachEvent('onmousewheel', this._mousewheelHandler), e.attachEvent('onmousemove', this._mousemoveHandler), e.attachEvent('onmouseout', this._mouseoutHandler), e.attachEvent('onmousedown', this._mousedownHandler), e.attachEvent('onmouseup', this._mouseupHandler)) + } + u.prototype.on = function (e, t, i) { + return this.bind(e, t, i), this + }, u.prototype.un = function (e, t) { + return this.unbind(e, t), this + }, u.prototype.trigger = function (e, t) { + switch (e) { + case V.RESIZE: + case V.CLICK: + case V.DBLCLICK: + case V.MOUSEWHEEL: + case V.MOUSEMOVE: + case V.MOUSEDOWN: + case V.MOUSEUP: + case V.MOUSEOUT: + this['_' + e + 'Handler'](t, !0) + } + }, u.prototype.dispose = function () { + var e = this.root + window.removeEventListener ? (window.removeEventListener('resize', this._resizeHandler), r.os.tablet || r.os.phone ? (e.removeEventListener('touchstart', this._touchstartHandler), e.removeEventListener('touchmove', this._touchmoveHandler), e.removeEventListener('touchend', this._touchendHandler)) : (e.removeEventListener('click', this._clickHandler), e.removeEventListener('dblclick', this._dblclickHandler), e.removeEventListener('mousewheel', this._mousewheelHandler), e.removeEventListener('mousemove', this._mousemoveHandler), e.removeEventListener('mousedown', this._mousedownHandler), e.removeEventListener('mouseup', this._mouseupHandler)), e.removeEventListener('DOMMouseScroll', this._mousewheelHandler), e.removeEventListener('mouseout', this._mouseoutHandler)) : (window.detachEvent('onresize', this._resizeHandler), e.detachEvent('onclick', this._clickHandler), e.detachEvent('dblclick', this._dblclickHandler), e.detachEvent('onmousewheel', this._mousewheelHandler), e.detachEvent('onmousemove', this._mousemoveHandler), e.detachEvent('onmouseout', this._mouseoutHandler), e.detachEvent('onmousedown', this._mousedownHandler), e.detachEvent('onmouseup', this._mouseupHandler)), this.root = this._domHover = this.storage = this.painter = null, this.un() + }, u.prototype._processDragStart = function (e) { + var t = this._lastHover + if (this._isMouseDown && t && t.draggable && !this._draggingTarget && this._mouseDownTarget == t) { + if (t.dragEnableTime && new Date - this._lastMouseDownMoment < t.dragEnableTime) return + var i = t + this._draggingTarget = i, this._isDragging = 1, i.invisible = !0, this.storage.mod(i.id), this._dispatchAgency(i, V.DRAGSTART, e), this.painter.refresh() + } + }, u.prototype._processDragEnter = function (e) { + this._draggingTarget && this._dispatchAgency(this._lastHover, V.DRAGENTER, e, this._draggingTarget) + }, u.prototype._processDragOver = function (e) { + this._draggingTarget && this._dispatchAgency(this._lastHover, V.DRAGOVER, e, this._draggingTarget) + }, u.prototype._processDragLeave = function (e) { + this._draggingTarget && this._dispatchAgency(this._lastHover, V.DRAGLEAVE, e, this._draggingTarget) + }, u.prototype._processDrop = function (e) { + this._draggingTarget && (this._draggingTarget.invisible = !1, this.storage.mod(this._draggingTarget.id), this.painter.refresh(), this._dispatchAgency(this._lastHover, V.DROP, e, this._draggingTarget)) + }, u.prototype._processDragEnd = function (e) { + this._draggingTarget && (this._dispatchAgency(this._draggingTarget, V.DRAGEND, e), this._lastHover = null), this._isDragging = 0, this._draggingTarget = null + }, u.prototype._processOverShape = function (e) { + this._dispatchAgency(this._lastHover, V.MOUSEOVER, e) + }, u.prototype._processOutShape = function (e) { + this._dispatchAgency(this._lastHover, V.MOUSEOUT, e) + }, u.prototype._dispatchAgency = function (e, t, i, n) { + var a = 'on' + t, o = { type: t, event: i, target: e, cancelBubble: !1 }, r = e + for (n && (o.dragged = n); r && (r[a] && (o.cancelBubble = r[a](o)), r.dispatch(t, o), r = r.parent, !o.cancelBubble);) + if (e) o.cancelBubble || this.dispatch(t, o) else if (!n) { + var s = { type: t, event: i } + this.dispatch(t, s), this.painter.eachOtherLayer(function (e) { + 'function' == typeof e[a] && e[a](s), e.dispatch && e.dispatch(t, s) + }) + } + }, u.prototype._iterateAndFindHover = function () { + var e = m.create() + return function () { + for (var t, i, n = this.storage.getShapeList(), a = [0, 0], o = n.length - 1; o >= 0; o--) { + var r = n[o] + if (t !== r.zlevel && (i = this.painter.getLayer(r.zlevel, i), a[0] = this._mouseX, a[1] = this._mouseY, i.needTransform && (m.invert(e, i.transform), h.applyTransform(a, a, e))), this._findHover(r, a[0], a[1])) break + } + } + }() + var y = [{ x: 10 }, { x: -20 }, { x: 10, y: 10 }, { y: -20 }] + return u.prototype._mobileFindFixed = function (e) { + this._lastHover = null, this._mouseX = e.zrenderX, this._mouseY = e.zrenderY, this._event = e, this._iterateAndFindHover() + for (var t = 0; !this._lastHover && t < y.length; t++) { + var i = y[t] + i.x && (this._mouseX += i.x), i.y && (this._mouseY += i.y), this._iterateAndFindHover() + } + this._lastHover && (e.zrenderX = this._mouseX, e.zrenderY = this._mouseY) + }, u.prototype._zrenderEventFixed = function (e, t) { + if (e.zrenderFixed) return e + if (t) { + var i = 'touchend' != e.type ? e.targetTouches[0] : e.changedTouches[0] + if (i) { + var n = this.painter._domRoot.getBoundingClientRect() + e.zrenderX = i.clientX - n.left, e.zrenderY = i.clientY - n.top + } + } else { + e = e || window.event + var a = e.toElement || e.relatedTarget || e.srcElement || e.target + a && a != this._domHover && (e.zrenderX = ('undefined' != typeof e.offsetX ? e.offsetX : e.layerX) + a.offsetLeft, e.zrenderY = ('undefined' != typeof e.offsetY ? e.offsetY : e.layerY) + a.offsetTop) + } + return e.zrenderFixed = 1, e + }, l.merge(u.prototype, U.prototype, !0), u + }), i('zrender/Painter', ['require', './config', './tool/util', './tool/log', './loadingEffect/Base', './Layer', './shape/Image'], function (e) { + 'use strict' + + function t () { + return !1 + } + + function i () { + } + + function n (e) { + return e ? e.isBuildin ? !0 : 'function' != typeof e.resize || 'function' != typeof e.refresh ? !1 : !0 : !1 + } + + var a = e('./config'), o = e('./tool/util'), r = e('./tool/log'), s = e('./loadingEffect/Base'), + l = e('./Layer'), h = function (e, i) { + this.root = e, e.style['-webkit-tap-highlight-color'] = 'transparent', e.style['-webkit-user-select'] = 'none', e.style['user-select'] = 'none', e.style['-webkit-touch-callout'] = 'none', this.storage = i, e.innerHTML = '', this._width = this._getWidth(), this._height = this._getHeight() + var n = document.createElement('div') + this._domRoot = n, n.style.position = 'relative', n.style.overflow = 'hidden', n.style.width = this._width + 'px', n.style.height = this._height + 'px', e.appendChild(n), this._layers = {}, this._zlevelList = [], this._layerConfig = {}, this._loadingEffect = new s({}), this.shapeToImage = this._createShapeToImageProcessor(), this._bgDom = document.createElement('div'), this._bgDom.style.cssText = ['position:absolute;left:0px;top:0px;width:', this._width, 'px;height:', this._height + 'px;', '-webkit-user-select:none;user-select;none;', '-webkit-touch-callout:none;'].join(''), this._bgDom.setAttribute('data-zr-dom-id', 'bg'), this._bgDom.className = a.elementClassName, n.appendChild(this._bgDom), this._bgDom.onselectstart = t + var o = new l('_zrender_hover_', this) + this._layers.hover = o, n.appendChild(o.dom), o.initContext(), o.dom.onselectstart = t, o.dom.style['-webkit-user-select'] = 'none', o.dom.style['user-select'] = 'none', o.dom.style['-webkit-touch-callout'] = 'none', this.refreshNextFrame = null + } + return h.prototype.render = function (e) { + return this.isLoading() && this.hideLoading(), this.refresh(e, !0), this + }, h.prototype.refresh = function (e, t) { + var i = this.storage.getShapeList(!0) + this._paintList(i, t) + for (var n = 0; n < this._zlevelList.length; n++) { + var a = this._zlevelList[n], o = this._layers[a] + !o.isBuildin && o.refresh && o.refresh() + } + return 'function' == typeof e && e(), this + }, h.prototype._preProcessLayer = function (e) { + e.unusedCount++, e.updateTransform() + }, h.prototype._postProcessLayer = function (e) { + e.dirty = !1, 1 == e.unusedCount && e.clear() + }, h.prototype._paintList = function (e, t) { + 'undefined' == typeof t && (t = !1), this._updateLayerStatus(e) + var i, n, o + this.eachBuildinLayer(this._preProcessLayer) + for (var s = 0, l = e.length; l > s; s++) { + var h = e[s] + if (n !== h.zlevel && (i && (i.needTransform && o.restore(), o.flush && o.flush()), n = h.zlevel, i = this.getLayer(n), i.isBuildin || r('ZLevel ' + n + ' has been used by unkown layer ' + i.id), o = i.ctx, i.unusedCount = 0, (i.dirty || t) && i.clear(), i.needTransform && (o.save(), i.setTransform(o))), (i.dirty || t) && !h.invisible && (!h.onbrush || h.onbrush && !h.onbrush(o, !1))) if (a.catchBrushException) try { + h.brush(o, !1, this.refreshNextFrame) + } catch (m) { + r(m, 'brush error of ' + h.type, h) + } else h.brush(o, !1, this.refreshNextFrame) + h.__dirty = !1 + } + i && (i.needTransform && o.restore(), o.flush && o.flush()), this.eachBuildinLayer(this._postProcessLayer) + }, h.prototype.getLayer = function (e) { + var t = this._layers[e] + return t || (t = new l(e, this), t.isBuildin = !0, this._layerConfig[e] && o.merge(t, this._layerConfig[e], !0), t.updateTransform(), this.insertLayer(e, t), t.initContext()), t + }, h.prototype.insertLayer = function (e, t) { + if (this._layers[e]) return void r('ZLevel ' + e + ' has been used already') + if (!n(t)) return void r('Layer of zlevel ' + e + ' is not valid') + var i = this._zlevelList.length, a = null, o = -1 + if (i > 0 && e > this._zlevelList[0]) { + for (o = 0; i - 1 > o && !(this._zlevelList[o] < e && this._zlevelList[o + 1] > e); o++) + a = this._layers[this._zlevelList[o]] + } + this._zlevelList.splice(o + 1, 0, e) + var s = a ? a.dom : this._bgDom + s.nextSibling ? s.parentNode.insertBefore(t.dom, s.nextSibling) : s.parentNode.appendChild(t.dom), this._layers[e] = t + }, h.prototype.eachLayer = function (e, t) { + for (var i = 0; i < this._zlevelList.length; i++) { + var n = this._zlevelList[i] + e.call(t, this._layers[n], n) + } + }, h.prototype.eachBuildinLayer = function (e, t) { + for (var i = 0; i < this._zlevelList.length; i++) { + var n = this._zlevelList[i], a = this._layers[n] + a.isBuildin && e.call(t, a, n) + } + }, h.prototype.eachOtherLayer = function (e, t) { + for (var i = 0; i < this._zlevelList.length; i++) { + var n = this._zlevelList[i], a = this._layers[n] + a.isBuildin || e.call(t, a, n) + } + }, h.prototype.getLayers = function () { + return this._layers + }, h.prototype._updateLayerStatus = function (e) { + var t = this._layers, i = {} + this.eachBuildinLayer(function (e, t) { + i[t] = e.elCount, e.elCount = 0 + }) + for (var n = 0, a = e.length; a > n; n++) { + var o = e[n], r = o.zlevel, s = t[r] + if (s) { + if (s.elCount++, s.dirty) continue + s.dirty = o.__dirty + } + } + this.eachBuildinLayer(function (e, t) { + i[t] !== e.elCount && (e.dirty = !0) + }) + }, h.prototype.refreshShapes = function (e, t) { + for (var i = 0, n = e.length; n > i; i++) { + var a = e[i] + a.modSelf() + } + return this.refresh(t), this + }, h.prototype.setLoadingEffect = function (e) { + return this._loadingEffect = e, this + }, h.prototype.clear = function () { + return this.eachBuildinLayer(this._clearLayer), this + }, h.prototype._clearLayer = function (e) { + e.clear() + }, h.prototype.modLayer = function (e, t) { + if (t) { + this._layerConfig[e] ? o.merge(this._layerConfig[e], t, !0) : this._layerConfig[e] = t + var i = this._layers[e] + i && o.merge(i, this._layerConfig[e], !0) + } + }, h.prototype.delLayer = function (e) { + var t = this._layers[e] + t && (this.modLayer(e, { + position: t.position, + rotation: t.rotation, + scale: t.scale + }), t.dom.parentNode.removeChild(t.dom), delete this._layers[e], this._zlevelList.splice(o.indexOf(this._zlevelList, e), 1)) + }, h.prototype.refreshHover = function () { + this.clearHover() + for (var e = this.storage.getHoverShapes(!0), t = 0, i = e.length; i > t; t++) this._brushHover(e[t]) + var n = this._layers.hover.ctx + return n.flush && n.flush(), this.storage.delHover(), this + }, h.prototype.clearHover = function () { + var e = this._layers.hover + return e && e.clear(), this + }, h.prototype.showLoading = function (e) { + return this._loadingEffect && this._loadingEffect.stop(), e && this.setLoadingEffect(e), this._loadingEffect.start(this), this.loading = !0, this + }, h.prototype.hideLoading = function () { + return this._loadingEffect.stop(), this.clearHover(), this.loading = !1, this + }, h.prototype.isLoading = function () { + return this.loading + }, h.prototype.resize = function () { + var e = this._domRoot + e.style.display = 'none' + var t = this._getWidth(), i = this._getHeight() + if (e.style.display = '', this._width != t || i != this._height) { + this._width = t, this._height = i, e.style.width = t + 'px', e.style.height = i + 'px' + for (var n in this._layers) this._layers[n].resize(t, i) + this.refresh(null, !0) + } + return this + }, h.prototype.clearLayer = function (e) { + var t = this._layers[e] + t && t.clear() + }, h.prototype.dispose = function () { + this.isLoading() && this.hideLoading(), this.root.innerHTML = '', this.root = this.storage = this._domRoot = this._layers = null + }, h.prototype.getDomHover = function () { + return this._layers.hover.dom + }, h.prototype.toDataURL = function (e, t, i) { + if (window.G_vmlCanvasManager) return null + var n = new l('image', this) + this._bgDom.appendChild(n.dom), n.initContext() + var o = n.ctx + n.clearColor = t || '#fff', n.clear() + var s = this + this.storage.iterShape(function (e) { + if (!e.invisible && (!e.onbrush || e.onbrush && !e.onbrush(o, !1))) if (a.catchBrushException) try { + e.brush(o, !1, s.refreshNextFrame) + } catch (t) { + r(t, 'brush error of ' + e.type, e) + } else e.brush(o, !1, s.refreshNextFrame) + }, { normal: 'up', update: !0 }) + var h = n.dom.toDataURL(e, i) + return o = null, this._bgDom.removeChild(n.dom), h + }, h.prototype.getWidth = function () { + return this._width + }, h.prototype.getHeight = function () { + return this._height + }, h.prototype._getWidth = function () { + var e = this.root, t = e.currentStyle || document.defaultView.getComputedStyle(e) + return ((e.clientWidth || parseInt(t.width, 10)) - parseInt(t.paddingLeft, 10) - parseInt(t.paddingRight, 10)).toFixed(0) - 0 + }, h.prototype._getHeight = function () { + var e = this.root, t = e.currentStyle || document.defaultView.getComputedStyle(e) + return ((e.clientHeight || parseInt(t.height, 10)) - parseInt(t.paddingTop, 10) - parseInt(t.paddingBottom, 10)).toFixed(0) - 0 + }, h.prototype._brushHover = function (e) { + var t = this._layers.hover.ctx + if (!e.onbrush || e.onbrush && !e.onbrush(t, !0)) { + var i = this.getLayer(e.zlevel) + if (i.needTransform && (t.save(), i.setTransform(t)), a.catchBrushException) try { + e.brush(t, !0, this.refreshNextFrame) + } catch (n) { + r(n, 'hoverBrush error of ' + e.type, e) + } else e.brush(t, !0, this.refreshNextFrame) + i.needTransform && t.restore() + } + }, h.prototype._shapeToImage = function (t, i, n, a, o) { + var r = document.createElement('canvas'), s = r.getContext('2d') + r.style.width = n + 'px', r.style.height = a + 'px', r.setAttribute('width', n * o), r.setAttribute('height', a * o), s.clearRect(0, 0, n * o, a * o) + var l = { position: i.position, rotation: i.rotation, scale: i.scale } + i.position = [0, 0, 0], i.rotation = 0, i.scale = [1, 1], i && i.brush(s, !1) + var h = e('./shape/Image'), m = new h({ id: t, style: { x: 0, y: 0, image: r } }) + return null != l.position && (m.position = i.position = l.position), null != l.rotation && (m.rotation = i.rotation = l.rotation), null != l.scale && (m.scale = i.scale = l.scale), m + }, h.prototype._createShapeToImageProcessor = function () { + if (window.G_vmlCanvasManager) return i + var e = this + return function (t, i, n, o) { + return e._shapeToImage(t, i, n, o, a.devicePixelRatio) + } + }, h + }), i('zrender/Storage', ['require', './tool/util', './Group'], function (e) { + 'use strict' + + function t (e, t) { + return e.zlevel == t.zlevel ? e.z == t.z ? e.__renderidx - t.__renderidx : e.z - t.z : e.zlevel - t.zlevel + } + + var i = e('./tool/util'), n = e('./Group'), a = { hover: !1, normal: 'down', update: !1 }, o = function () { + this._elements = {}, this._hoverElements = [], this._roots = [], this._shapeList = [], this._shapeListOffset = 0 + } + return o.prototype.iterShape = function (e, t) { + if (t || (t = a), t.hover) for (var i = 0, n = this._hoverElements.length; n > i; i++) { + var o = this._hoverElements[i] + if (o.updateTransform(), e(o)) return this + } + switch (t.update && this.updateShapeList(), t.normal) { + case'down': + for (var n = this._shapeList.length; n--;) if (e(this._shapeList[n])) return this + break + default: + for (var i = 0, n = this._shapeList.length; n > i; i++) if (e(this._shapeList[i])) return this + } + return this + }, o.prototype.getHoverShapes = function (e) { + for (var i = [], n = 0, a = this._hoverElements.length; a > n; n++) { + i.push(this._hoverElements[n]) + var o = this._hoverElements[n].hoverConnect + if (o) { + var r + o = o instanceof Array ? o : [o] + for (var s = 0, l = o.length; l > s; s++) r = o[s].id ? o[s] : this.get(o[s]), r && i.push(r) + } + } + if (i.sort(t), e) for (var n = 0, a = i.length; a > n; n++) i[n].updateTransform() + return i + }, o.prototype.getShapeList = function (e) { + return e && this.updateShapeList(), this._shapeList + }, o.prototype.updateShapeList = function () { + this._shapeListOffset = 0 + for (var e = 0, i = this._roots.length; i > e; e++) { + var n = this._roots[e] + this._updateAndAddShape(n) + } + this._shapeList.length = this._shapeListOffset + for (var e = 0, i = this._shapeList.length; i > e; e++) this._shapeList[e].__renderidx = e + this._shapeList.sort(t) + }, o.prototype._updateAndAddShape = function (e, t) { + if (!e.ignore) if (e.updateTransform(), e.clipShape && (e.clipShape.parent = e, e.clipShape.updateTransform(), t ? (t = t.slice(), t.push(e.clipShape)) : t = [e.clipShape]), 'group' == e.type) { + for (var i = 0; i < e._children.length; i++) { + var n = e._children[i] + n.__dirty = e.__dirty || n.__dirty, this._updateAndAddShape(n, t) + } + e.__dirty = !1 + } else e.__clipShapes = t, this._shapeList[this._shapeListOffset++] = e + }, o.prototype.mod = function (e, t) { + if ('string' == typeof e && (e = this._elements[e]), e && (e.modSelf(), t)) if (t.parent || t._storage || t.__clipShapes) { + var n = {} + for (var a in t) 'parent' !== a && '_storage' !== a && '__clipShapes' !== a && t.hasOwnProperty(a) && (n[a] = t[a]) + i.merge(e, n, !0) + } else i.merge(e, t, !0) + return this + }, o.prototype.drift = function (e, t, i) { + var n = this._elements[e] + return n && (n.needTransform = !0, 'horizontal' === n.draggable ? i = 0 : 'vertical' === n.draggable && (t = 0), (!n.ondrift || n.ondrift && !n.ondrift(t, i)) && n.drift(t, i)), this + }, o.prototype.addHover = function (e) { + return e.updateNeedTransform(), this._hoverElements.push(e), this + }, o.prototype.delHover = function () { + return this._hoverElements = [], this + }, o.prototype.hasHoverShape = function () { + return this._hoverElements.length > 0 + }, o.prototype.addRoot = function (e) { + this._elements[e.id] || (e instanceof n && e.addChildrenToStorage(this), this.addToMap(e), this._roots.push(e)) + }, o.prototype.delRoot = function (e) { + if ('undefined' == typeof e) { + for (var t = 0; t < this._roots.length; t++) { + var a = this._roots[t] + a instanceof n && a.delChildrenFromStorage(this) + } + return this._elements = {}, this._hoverElements = [], this._roots = [], this._shapeList = [], void (this._shapeListOffset = 0) + } + if (e instanceof Array) for (var t = 0, o = e.length; o > t; t++) this.delRoot(e[t]) else { + var r + r = 'string' == typeof e ? this._elements[e] : e + var s = i.indexOf(this._roots, r) + s >= 0 && (this.delFromMap(r.id), this._roots.splice(s, 1), r instanceof n && r.delChildrenFromStorage(this)) + } + }, o.prototype.addToMap = function (e) { + return e instanceof n && (e._storage = this), e.modSelf(), this._elements[e.id] = e, this + }, o.prototype.get = function (e) { + return this._elements[e] + }, o.prototype.delFromMap = function (e) { + var t = this._elements[e] + return t && (delete this._elements[e], t instanceof n && (t._storage = null)), this + }, o.prototype.dispose = function () { + this._elements = this._renderList = this._roots = this._hoverElements = null + }, o + }), i('zrender/animation/Animation', ['require', './Clip', '../tool/color', '../tool/util', '../tool/event'], function (e) { + 'use strict' + + function t (e, t) { + return e[t] + } + + function i (e, t, i) { + e[t] = i + } + + function n (e, t, i) { + return (t - e) * i + e + } + + function a (e, t, i, a, o) { + var r = e.length + if (1 == o) for (var s = 0; r > s; s++) a[s] = n(e[s], t[s], i) else for (var l = e[0].length, s = 0; r > s; s++) for (var h = 0; l > h; h++) a[s][h] = n(e[s][h], t[s][h], i) + } + + function o (e) { + switch (typeof e) { + case'undefined': + case'string': + return !1 + } + return 'undefined' != typeof e.length + } + + function r (e, t, i, n, a, o, r, l, h) { + var m = e.length + if (1 == h) for (var V = 0; m > V; V++) l[V] = s(e[V], t[V], i[V], n[V], a, o, r) else for (var U = e[0].length, V = 0; m > V; V++) for (var d = 0; U > d; d++) l[V][d] = s(e[V][d], t[V][d], i[V][d], n[V][d], a, o, r) + } + + function s (e, t, i, n, a, o, r) { + var s = .5 * (i - e), l = .5 * (n - t) + return (2 * (t - i) + s + l) * r + (-3 * (t - i) - 2 * s - l) * o + s * a + t + } + + function l (e) { + if (o(e)) { + var t = e.length + if (o(e[0])) { + for (var i = [], n = 0; t > n; n++) i.push(c.call(e[n])) + return i + } + return c.call(e) + } + return e + } + + function h (e) { + return e[0] = Math.floor(e[0]), e[1] = Math.floor(e[1]), e[2] = Math.floor(e[2]), 'rgba(' + e.join(',') + ')' + } + + var m = e('./Clip'), V = e('../tool/color'), U = e('../tool/util'), d = e('../tool/event').Dispatcher, + p = window.requestAnimationFrame || window.msRequestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (e) { + setTimeout(e, 16) + }, c = Array.prototype.slice, u = function (e) { + e = e || {}, this.stage = e.stage || {}, this.onframe = e.onframe || function () { + }, this._clips = [], this._running = !1, this._time = 0, d.call(this) + } + u.prototype = { + add: function (e) { + this._clips.push(e) + }, remove: function (e) { + if (e.__inStep) e.__needsRemove = !0 else { + var t = U.indexOf(this._clips, e) + t >= 0 && this._clips.splice(t, 1) + } + }, _update: function () { + for (var e = (new Date).getTime(), t = e - this._time, i = this._clips, n = i.length, a = [], o = [], r = 0; n > r; r++) { + var s = i[r] + s.__inStep = !0 + var l = s.step(e) + s.__inStep = !1, l && (a.push(l), o.push(s)) + } + for (var r = 0; n > r;) i[r].__needsRemove ? (i[r] = i[n - 1], i.pop(), n--) : r++ + n = a.length + for (var r = 0; n > r; r++) o[r].fire(a[r]) + this._time = e, this.onframe(t), this.dispatch('frame', t), this.stage.update && this.stage.update() + }, start: function () { + function e () { + t._running && (p(e), t._update()) + } + + var t = this + this._running = !0, this._time = (new Date).getTime(), p(e) + }, stop: function () { + this._running = !1 + }, clear: function () { + this._clips = [] + }, animate: function (e, t) { + t = t || {} + var i = new y(e, t.loop, t.getter, t.setter) + return i.animation = this, i + }, constructor: u + }, U.merge(u.prototype, d.prototype, !0) + var y = function (e, n, a, o) { + this._tracks = {}, this._target = e, this._loop = n || !1, this._getter = a || t, this._setter = o || i, this._clipCount = 0, this._delay = 0, this._doneList = [], this._onframeList = [], this._clipList = [] + } + return y.prototype = { + when: function (e, t) { + for (var i in t) this._tracks[i] || (this._tracks[i] = [], 0 !== e && this._tracks[i].push({ + time: 0, + value: l(this._getter(this._target, i)) + })), this._tracks[i].push({ time: parseInt(e, 10), value: t[i] }) + return this + }, during: function (e) { + return this._onframeList.push(e), this + }, start: function (e) { + var t = this, i = this._setter, l = this._getter, U = 'spline' === e, d = function () { + if (t._clipCount--, 0 === t._clipCount) { + t._tracks = {} + for (var e = t._doneList.length, i = 0; e > i; i++) t._doneList[i].call(t) + } + }, p = function (p, c) { + var u = p.length + if (u) { + var y = p[0].value, g = o(y), b = !1, f = g && o(y[0]) ? 2 : 1 + p.sort(function (e, t) { + return e.time - t.time + }) + var k + if (u) { + k = p[u - 1].time + for (var x = [], _ = [], L = 0; u > L; L++) { + x.push(p[L].time / k) + var W = p[L].value + 'string' == typeof W && (W = V.toArray(W), 0 === W.length && (W[0] = W[1] = W[2] = 0, W[3] = 1), b = !0), _.push(W) + } + var X, L, v, w, K, I, J, C = 0, S = 0 + if (b) var E = [0, 0, 0, 0] + var F = function (e, o) { + if (S > o) { + for (X = Math.min(C + 1, u - 1), L = X; L >= 0 && !(x[L] <= o); L--) + L = Math.min(L, u - 2) + } else { + for (L = C; u > L && !(x[L] > o); L++) + L = Math.min(L - 1, u - 2) + } + C = L, S = o + var m = x[L + 1] - x[L] + if (0 !== m) { + if (v = (o - x[L]) / m, U) if (K = _[L], w = _[0 === L ? L : L - 1], I = _[L > u - 2 ? u - 1 : L + 1], J = _[L > u - 3 ? u - 1 : L + 2], g) r(w, K, I, J, v, v * v, v * v * v, l(e, c), f) else { + var V + b ? (V = r(w, K, I, J, v, v * v, v * v * v, E, 1), V = h(E)) : V = s(w, K, I, J, v, v * v, v * v * v), i(e, c, V) + } else if (g) a(_[L], _[L + 1], v, l(e, c), f) else { + var V + b ? (a(_[L], _[L + 1], v, E, 1), V = h(E)) : V = n(_[L], _[L + 1], v), i(e, c, V) + } + for (L = 0; L < t._onframeList.length; L++) t._onframeList[L](e, o) + } + }, T = new m({ + target: t._target, + life: k, + loop: t._loop, + delay: t._delay, + onframe: F, + ondestroy: d + }) + e && 'spline' !== e && (T.easing = e), t._clipList.push(T), t._clipCount++, t.animation.add(T) + } + } + } + for (var c in this._tracks) p(this._tracks[c], c) + return this + }, stop: function () { + for (var e = 0; e < this._clipList.length; e++) { + var t = this._clipList[e] + this.animation.remove(t) + } + this._clipList = [] + }, delay: function (e) { + return this._delay = e, this + }, done: function (e) { + return e && this._doneList.push(e), this + } + }, u + }), i('zrender/tool/vector', [], function () { + var e = 'undefined' == typeof Float32Array ? Array : Float32Array, t = { + create: function (t, i) { + var n = new e(2) + return n[0] = t || 0, n[1] = i || 0, n + }, copy: function (e, t) { + return e[0] = t[0], e[1] = t[1], e + }, clone: function (t) { + var i = new e(2) + return i[0] = t[0], i[1] = t[1], i + }, set: function (e, t, i) { + return e[0] = t, e[1] = i, e + }, add: function (e, t, i) { + return e[0] = t[0] + i[0], e[1] = t[1] + i[1], e + }, scaleAndAdd: function (e, t, i, n) { + return e[0] = t[0] + i[0] * n, e[1] = t[1] + i[1] * n, e + }, sub: function (e, t, i) { + return e[0] = t[0] - i[0], e[1] = t[1] - i[1], e + }, len: function (e) { + return Math.sqrt(this.lenSquare(e)) + }, lenSquare: function (e) { + return e[0] * e[0] + e[1] * e[1] + }, mul: function (e, t, i) { + return e[0] = t[0] * i[0], e[1] = t[1] * i[1], e + }, div: function (e, t, i) { + return e[0] = t[0] / i[0], e[1] = t[1] / i[1], e + }, dot: function (e, t) { + return e[0] * t[0] + e[1] * t[1] + }, scale: function (e, t, i) { + return e[0] = t[0] * i, e[1] = t[1] * i, e + }, normalize: function (e, i) { + var n = t.len(i) + return 0 === n ? (e[0] = 0, e[1] = 0) : (e[0] = i[0] / n, e[1] = i[1] / n), e + }, distance: function (e, t) { + return Math.sqrt((e[0] - t[0]) * (e[0] - t[0]) + (e[1] - t[1]) * (e[1] - t[1])) + }, distanceSquare: function (e, t) { + return (e[0] - t[0]) * (e[0] - t[0]) + (e[1] - t[1]) * (e[1] - t[1]) + }, negate: function (e, t) { + return e[0] = -t[0], e[1] = -t[1], e + }, lerp: function (e, t, i, n) { + return e[0] = t[0] + n * (i[0] - t[0]), e[1] = t[1] + n * (i[1] - t[1]), e + }, applyTransform: function (e, t, i) { + var n = t[0], a = t[1] + return e[0] = i[0] * n + i[2] * a + i[4], e[1] = i[1] * n + i[3] * a + i[5], e + }, min: function (e, t, i) { + return e[0] = Math.min(t[0], i[0]), e[1] = Math.min(t[1], i[1]), e + }, max: function (e, t, i) { + return e[0] = Math.max(t[0], i[0]), e[1] = Math.max(t[1], i[1]), e + } + } + return t.length = t.len, t.lengthSquare = t.lenSquare, t.dist = t.distance, t.distSquare = t.distanceSquare, t + }), i('zrender/tool/matrix', [], function () { + var e = 'undefined' == typeof Float32Array ? Array : Float32Array, t = { + create: function () { + var i = new e(6) + return t.identity(i), i + }, identity: function (e) { + return e[0] = 1, e[1] = 0, e[2] = 0, e[3] = 1, e[4] = 0, e[5] = 0, e + }, copy: function (e, t) { + return e[0] = t[0], e[1] = t[1], e[2] = t[2], e[3] = t[3], e[4] = t[4], e[5] = t[5], e + }, mul: function (e, t, i) { + return e[0] = t[0] * i[0] + t[2] * i[1], e[1] = t[1] * i[0] + t[3] * i[1], e[2] = t[0] * i[2] + t[2] * i[3], e[3] = t[1] * i[2] + t[3] * i[3], e[4] = t[0] * i[4] + t[2] * i[5] + t[4], e[5] = t[1] * i[4] + t[3] * i[5] + t[5], e + }, translate: function (e, t, i) { + return e[0] = t[0], e[1] = t[1], e[2] = t[2], e[3] = t[3], e[4] = t[4] + i[0], e[5] = t[5] + i[1], e + }, rotate: function (e, t, i) { + var n = t[0], a = t[2], o = t[4], r = t[1], s = t[3], l = t[5], h = Math.sin(i), m = Math.cos(i) + return e[0] = n * m + r * h, e[1] = -n * h + r * m, e[2] = a * m + s * h, e[3] = -a * h + m * s, e[4] = m * o + h * l, e[5] = m * l - h * o, e + }, scale: function (e, t, i) { + var n = i[0], a = i[1] + return e[0] = t[0] * n, e[1] = t[1] * a, e[2] = t[2] * n, e[3] = t[3] * a, e[4] = t[4] * n, e[5] = t[5] * a, e + }, invert: function (e, t) { + var i = t[0], n = t[2], a = t[4], o = t[1], r = t[3], s = t[5], l = i * r - o * n + return l ? (l = 1 / l, e[0] = r * l, e[1] = -o * l, e[2] = -n * l, e[3] = i * l, e[4] = (n * s - r * a) * l, e[5] = (o * a - i * s) * l, e) : null + } + } + return t + }), i('zrender/loadingEffect/Base', ['require', '../tool/util', '../shape/Text', '../shape/Rectangle'], function (e) { + function t (e) { + this.setOptions(e) + } + + var i = e('../tool/util'), n = e('../shape/Text'), a = e('../shape/Rectangle'), o = 'Loading...', + r = 'normal 16px Arial' + return t.prototype.createTextShape = function (e) { + return new n({ + highlightStyle: i.merge({ + x: this.canvasWidth / 2, + y: this.canvasHeight / 2, + text: o, + textAlign: 'center', + textBaseline: 'middle', + textFont: r, + color: '#333', + brushType: 'fill' + }, e, !0) + }) + }, t.prototype.createBackgroundShape = function (e) { + return new a({ + highlightStyle: { + x: 0, + y: 0, + width: this.canvasWidth, + height: this.canvasHeight, + brushType: 'fill', + color: e + } + }) + }, t.prototype.start = function (e) { + function t (t) { + e.storage.addHover(t) + } + + function i () { + e.refreshHover() + } + + this.canvasWidth = e._width, this.canvasHeight = e._height, this.loadingTimer = this._start(t, i) + }, t.prototype._start = function () { + return setInterval(function () { + }, 1e4) + }, t.prototype.stop = function () { + clearInterval(this.loadingTimer) + }, t.prototype.setOptions = function (e) { + this.options = e || {} + }, t.prototype.adjust = function (e, t) { + return e <= t[0] ? e = t[0] : e >= t[1] && (e = t[1]), e + }, t.prototype.getLocation = function (e, t, i) { + var n = null != e.x ? e.x : 'center' + switch (n) { + case'center': + n = Math.floor((this.canvasWidth - t) / 2) + break + case'left': + n = 0 + break + case'right': + n = this.canvasWidth - t + } + var a = null != e.y ? e.y : 'center' + switch (a) { + case'center': + a = Math.floor((this.canvasHeight - i) / 2) + break + case'top': + a = 0 + break + case'bottom': + a = this.canvasHeight - i + } + return { x: n, y: a, width: t, height: i } + }, t + }), i('zrender/Layer', ['require', './mixin/Transformable', './tool/util', './config'], function (e) { + function t () { + return !1 + } + + function i (e, t, i) { + var n = document.createElement(t), a = i.getWidth(), o = i.getHeight() + return n.style.position = 'absolute', n.style.left = 0, n.style.top = 0, n.style.width = a + 'px', n.style.height = o + 'px', n.width = a * r.devicePixelRatio, n.height = o * r.devicePixelRatio, n.setAttribute('data-zr-dom-id', e), n + } + + var n = e('./mixin/Transformable'), a = e('./tool/util'), o = window.G_vmlCanvasManager, r = e('./config'), + s = function (e, a) { + this.id = e, this.dom = i(e, 'canvas', a), this.dom.onselectstart = t, this.dom.style['-webkit-user-select'] = 'none', this.dom.style['user-select'] = 'none', this.dom.style['-webkit-touch-callout'] = 'none', this.dom.style['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)', this.dom.className = r.elementClassName, o && o.initElement(this.dom), this.domBack = null, this.ctxBack = null, this.painter = a, this.unusedCount = 0, this.config = null, this.dirty = !0, this.elCount = 0, this.clearColor = 0, this.motionBlur = !1, this.lastFrameAlpha = .7, this.zoomable = !1, this.panable = !1, this.maxZoom = 1 / 0, this.minZoom = 0, n.call(this) + } + return s.prototype.initContext = function () { + this.ctx = this.dom.getContext('2d') + var e = r.devicePixelRatio + 1 != e && this.ctx.scale(e, e) + }, s.prototype.createBackBuffer = function () { + if (!o) { + this.domBack = i('back-' + this.id, 'canvas', this.painter), this.ctxBack = this.domBack.getContext('2d') + var e = r.devicePixelRatio + 1 != e && this.ctxBack.scale(e, e) + } + }, s.prototype.resize = function (e, t) { + var i = r.devicePixelRatio + this.dom.style.width = e + 'px', this.dom.style.height = t + 'px', this.dom.setAttribute('width', e * i), this.dom.setAttribute('height', t * i), 1 != i && this.ctx.scale(i, i), this.domBack && (this.domBack.setAttribute('width', e * i), this.domBack.setAttribute('height', t * i), 1 != i && this.ctxBack.scale(i, i)) + }, s.prototype.clear = function () { + var e = this.dom, t = this.ctx, i = e.width, n = e.height, a = this.clearColor && !o, + s = this.motionBlur && !o, l = this.lastFrameAlpha, h = r.devicePixelRatio + if (s && (this.domBack || this.createBackBuffer(), this.ctxBack.globalCompositeOperation = 'copy', this.ctxBack.drawImage(e, 0, 0, i / h, n / h)), t.clearRect(0, 0, i / h, n / h), a && (t.save(), t.fillStyle = this.clearColor, t.fillRect(0, 0, i / h, n / h), t.restore()), s) { + var m = this.domBack + t.save(), t.globalAlpha = l, t.drawImage(m, 0, 0, i / h, n / h), t.restore() + } + }, a.merge(s.prototype, n.prototype), s + }), i('zrender/shape/Text', ['require', '../tool/area', './Base', '../tool/util'], function (e) { + var t = e('../tool/area'), i = e('./Base'), n = function (e) { + i.call(this, e) + } + return n.prototype = { + type: 'text', brush: function (e, i) { + var n = this.style + if (i && (n = this.getHighlightStyle(n, this.highlightStyle || {})), 'undefined' != typeof n.text && n.text !== !1) { + e.save(), this.doClip(e), this.setContext(e, n), this.setTransform(e), n.textFont && (e.font = n.textFont), e.textAlign = n.textAlign || 'start', e.textBaseline = n.textBaseline || 'middle' + var a, o = (n.text + '').split('\n'), r = t.getTextHeight('国', n.textFont), s = this.getRect(n), + l = n.x + a = 'top' == n.textBaseline ? s.y : 'bottom' == n.textBaseline ? s.y + r : s.y + r / 2 + for (var h = 0, m = o.length; m > h; h++) { + if (n.maxWidth) switch (n.brushType) { + case'fill': + e.fillText(o[h], l, a, n.maxWidth) + break + case'stroke': + e.strokeText(o[h], l, a, n.maxWidth) + break + case'both': + e.fillText(o[h], l, a, n.maxWidth), e.strokeText(o[h], l, a, n.maxWidth) + break + default: + e.fillText(o[h], l, a, n.maxWidth) + } else switch (n.brushType) { + case'fill': + e.fillText(o[h], l, a) + break + case'stroke': + e.strokeText(o[h], l, a) + break + case'both': + e.fillText(o[h], l, a), e.strokeText(o[h], l, a) + break + default: + e.fillText(o[h], l, a) + } + a += r + } + e.restore() + } + }, getRect: function (e) { + if (e.__rect) return e.__rect + var i = t.getTextWidth(e.text, e.textFont), n = t.getTextHeight(e.text, e.textFont), a = e.x + 'end' == e.textAlign || 'right' == e.textAlign ? a -= i : 'center' == e.textAlign && (a -= i / 2) + var o + return o = 'top' == e.textBaseline ? e.y : 'bottom' == e.textBaseline ? e.y - n : e.y - n / 2, e.__rect = { + x: a, + y: o, + width: i, + height: n + }, e.__rect + } + }, e('../tool/util').inherits(n, i), n + }), i('zrender/shape/Rectangle', ['require', './Base', '../tool/util'], function (e) { + var t = e('./Base'), i = function (e) { + t.call(this, e) + } + return i.prototype = { + type: 'rectangle', _buildRadiusPath: function (e, t) { + var i, n, a, o, r = t.x, s = t.y, l = t.width, h = t.height, m = t.radius + 'number' == typeof m ? i = n = a = o = m : m instanceof Array ? 1 === m.length ? i = n = a = o = m[0] : 2 === m.length ? (i = a = m[0], n = o = m[1]) : 3 === m.length ? (i = m[0], n = o = m[1], a = m[2]) : (i = m[0], n = m[1], a = m[2], o = m[3]) : i = n = a = o = 0 + var V + i + n > l && (V = i + n, i *= l / V, n *= l / V), a + o > l && (V = a + o, a *= l / V, o *= l / V), n + a > h && (V = n + a, n *= h / V, a *= h / V), i + o > h && (V = i + o, i *= h / V, o *= h / V), e.moveTo(r + i, s), e.lineTo(r + l - n, s), 0 !== n && e.quadraticCurveTo(r + l, s, r + l, s + n), e.lineTo(r + l, s + h - a), 0 !== a && e.quadraticCurveTo(r + l, s + h, r + l - a, s + h), e.lineTo(r + o, s + h), 0 !== o && e.quadraticCurveTo(r, s + h, r, s + h - o), e.lineTo(r, s + i), 0 !== i && e.quadraticCurveTo(r, s, r + i, s) + }, buildPath: function (e, t) { + t.radius ? this._buildRadiusPath(e, t) : (e.moveTo(t.x, t.y), e.lineTo(t.x + t.width, t.y), e.lineTo(t.x + t.width, t.y + t.height), e.lineTo(t.x, t.y + t.height), e.lineTo(t.x, t.y)), e.closePath() + }, getRect: function (e) { + if (e.__rect) return e.__rect + var t + return t = 'stroke' == e.brushType || 'fill' == e.brushType ? e.lineWidth || 1 : 0, e.__rect = { + x: Math.round(e.x - t / 2), + y: Math.round(e.y - t / 2), + width: e.width + t, + height: e.height + t + }, e.__rect + } + }, e('../tool/util').inherits(i, t), i + }), i('zrender/tool/area', ['require', './util', './curve'], function (e) { + 'use strict' + + function t (e) { + return e %= C, 0 > e && (e += C), e + } + + function i (e, t, i, o) { + if (!t || !e) return !1 + var r = e.type + L = L || W.getContext() + var s = n(e, t, i, o) + if ('undefined' != typeof s) return s + if (e.buildPath && L.isPointInPath) return a(e, L, t, i, o) + switch (r) { + case'ellipse': + return !0 + case'trochoid': + var l = 'out' == t.location ? t.r1 + t.r2 + t.d : t.r1 - t.r2 + t.d + return d(t, i, o, l) + case'rose': + return d(t, i, o, t.maxr) + default: + return !1 + } + } + + function n (e, t, i, n) { + var a = e.type + switch (a) { + case'bezier-curve': + return 'undefined' == typeof t.cpX2 ? l(t.xStart, t.yStart, t.cpX1, t.cpY1, t.xEnd, t.yEnd, t.lineWidth, i, n) : s(t.xStart, t.yStart, t.cpX1, t.cpY1, t.cpX2, t.cpY2, t.xEnd, t.yEnd, t.lineWidth, i, n) + case'line': + return r(t.xStart, t.yStart, t.xEnd, t.yEnd, t.lineWidth, i, n) + case'polyline': + return m(t.pointList, t.lineWidth, i, n) + case'ring': + return V(t.x, t.y, t.r0, t.r, i, n) + case'circle': + return d(t.x, t.y, t.r, i, n) + case'sector': + var o = t.startAngle * Math.PI / 180, h = t.endAngle * Math.PI / 180 + return t.clockWise || (o = -o, h = -h), p(t.x, t.y, t.r0, t.r, o, h, !t.clockWise, i, n) + case'path': + return t.pathArray && k(t.pathArray, Math.max(t.lineWidth, 5), t.brushType, i, n) + case'polygon': + case'star': + case'isogon': + return c(t.pointList, i, n) + case'text': + var u = t.__rect || e.getRect(t) + return U(u.x, u.y, u.width, u.height, i, n) + case'rectangle': + case'image': + return U(t.x, t.y, t.width, t.height, i, n) + } + } + + function a (e, t, i, n, a) { + return t.beginPath(), e.buildPath(t, i), t.closePath(), t.isPointInPath(n, a) + } + + function o (e, t, n, a) { + return !i(e, t, n, a) + } + + function r (e, t, i, n, a, o, r) { + if (0 === a) return !1 + var s = Math.max(a, 5), l = 0, h = e + if (r > t + s && r > n + s || t - s > r && n - s > r || o > e + s && o > i + s || e - s > o && i - s > o) return !1 + if (e === i) return Math.abs(o - e) <= s / 2 + l = (t - n) / (e - i), h = (e * n - i * t) / (e - i) + var m = l * o - r + h, V = m * m / (l * l + 1) + return s / 2 * s / 2 >= V + } + + function s (e, t, i, n, a, o, r, s, l, h, m) { + if (0 === l) return !1 + var V = Math.max(l, 5) + if (m > t + V && m > n + V && m > o + V && m > s + V || t - V > m && n - V > m && o - V > m && s - V > m || h > e + V && h > i + V && h > a + V && h > r + V || e - V > h && i - V > h && a - V > h && r - V > h) return !1 + var U = X.cubicProjectPoint(e, t, i, n, a, o, r, s, h, m, null) + return V / 2 >= U + } + + function l (e, t, i, n, a, o, r, s, l) { + if (0 === r) return !1 + var h = Math.max(r, 5) + if (l > t + h && l > n + h && l > o + h || t - h > l && n - h > l && o - h > l || s > e + h && s > i + h && s > a + h || e - h > s && i - h > s && a - h > s) return !1 + var m = X.quadraticProjectPoint(e, t, i, n, a, o, s, l, null) + return h / 2 >= m + } + + function h (e, i, n, a, o, r, s, l, h) { + if (0 === s) return !1 + var m = Math.max(s, 5) + l -= e, h -= i + var V = Math.sqrt(l * l + h * h) + if (V - m > n || n > V + m) return !1 + if (Math.abs(a - o) >= C) return !0 + if (r) { + var U = a + a = t(o), o = t(U) + } else a = t(a), o = t(o) + a > o && (o += C) + var d = Math.atan2(h, l) + return 0 > d && (d += C), d >= a && o >= d || d + C >= a && o >= d + C + } + + function m (e, t, i, n) { + for (var t = Math.max(t, 10), a = 0, o = e.length - 1; o > a; a++) { + var s = e[a][0], l = e[a][1], h = e[a + 1][0], m = e[a + 1][1] + if (r(s, l, h, m, t, i, n)) return !0 + } + return !1 + } + + function V (e, t, i, n, a, o) { + var r = (a - e) * (a - e) + (o - t) * (o - t) + return n * n > r && r > i * i + } + + function U (e, t, i, n, a, o) { + return a >= e && e + i >= a && o >= t && t + n >= o + } + + function d (e, t, i, n, a) { + return i * i > (n - e) * (n - e) + (a - t) * (a - t) + } + + function p (e, t, i, n, a, o, r, s, l) { + return h(e, t, (i + n) / 2, a, o, r, n - i, s, l) + } + + function c (e, t, i) { + for (var n = e.length, a = 0, o = 0, r = n - 1; n > o; o++) { + var s = e[r][0], l = e[r][1], h = e[o][0], m = e[o][1] + a += u(s, l, h, m, t, i), r = o + } + return 0 !== a + } + + function u (e, t, i, n, a, o) { + if (o > t && o > n || t > o && n > o) return 0 + if (n == t) return 0 + var r = t > n ? 1 : -1, s = (o - t) / (n - t), l = s * (i - e) + e + return l > a ? r : 0 + } + + function y () { + var e = E[0] + E[0] = E[1], E[1] = e + } + + function g (e, t, i, n, a, o, r, s, l, h) { + if (h > t && h > n && h > o && h > s || t > h && n > h && o > h && s > h) return 0 + var m = X.cubicRootAt(t, n, o, s, h, S) + if (0 === m) return 0 + for (var V, U, d = 0, p = -1, c = 0; m > c; c++) { + var u = S[c], g = X.cubicAt(e, i, a, r, u) + l > g || (0 > p && (p = X.cubicExtrema(t, n, o, s, E), E[1] < E[0] && p > 1 && y(), V = X.cubicAt(t, n, o, s, E[0]), p > 1 && (U = X.cubicAt(t, n, o, s, E[1]))), d += 2 == p ? u < E[0] ? t > V ? 1 : -1 : u < E[1] ? V > U ? 1 : -1 : U > s ? 1 : -1 : u < E[0] ? t > V ? 1 : -1 : V > s ? 1 : -1) + } + return d + } + + function b (e, t, i, n, a, o, r, s) { + if (s > t && s > n && s > o || t > s && n > s && o > s) return 0 + var l = X.quadraticRootAt(t, n, o, s, S) + if (0 === l) return 0 + var h = X.quadraticExtremum(t, n, o) + if (h >= 0 && 1 >= h) { + for (var m = 0, V = X.quadraticAt(t, n, o, h), U = 0; l > U; U++) { + var d = X.quadraticAt(e, i, a, S[U]) + r > d || (m += S[U] < h ? t > V ? 1 : -1 : V > o ? 1 : -1) + } + return m + } + var d = X.quadraticAt(e, i, a, S[0]) + return r > d ? 0 : t > o ? 1 : -1 + } + + function f (e, i, n, a, o, r, s, l) { + if (l -= i, l > n || -n > l) return 0 + var h = Math.sqrt(n * n - l * l) + if (S[0] = -h, S[1] = h, Math.abs(a - o) >= C) { + a = 0, o = C + var m = r ? 1 : -1 + return s >= S[0] + e && s <= S[1] + e ? m : 0 + } + if (r) { + var h = a + a = t(o), o = t(h) + } else a = t(a), o = t(o) + a > o && (o += C) + for (var V = 0, U = 0; 2 > U; U++) { + var d = S[U] + if (d + e > s) { + var p = Math.atan2(l, d), m = r ? 1 : -1 + 0 > p && (p = C + p), (p >= a && o >= p || p + C >= a && o >= p + C) && (p > Math.PI / 2 && p < 1.5 * Math.PI && (m = -m), V += m) + } + } + return V + } + + function k (e, t, i, n, a) { + var o = 0, m = 0, V = 0, U = 0, d = 0, p = !0, c = !0 + i = i || 'fill' + for (var y = 'stroke' === i || 'both' === i, k = 'fill' === i || 'both' === i, x = 0; x < e.length; x++) { + var _ = e[x], L = _.points + if (p || 'M' === _.command) { + if (x > 0 && (k && (o += u(m, V, U, d, n, a)), 0 !== o)) return !0 + U = L[L.length - 2], d = L[L.length - 1], p = !1, c && 'A' !== _.command && (c = !1, m = U, V = d) + } + switch (_.command) { + case'M': + m = L[0], V = L[1] + break + case'L': + if (y && r(m, V, L[0], L[1], t, n, a)) return !0 + k && (o += u(m, V, L[0], L[1], n, a)), m = L[0], V = L[1] + break + case'C': + if (y && s(m, V, L[0], L[1], L[2], L[3], L[4], L[5], t, n, a)) return !0 + k && (o += g(m, V, L[0], L[1], L[2], L[3], L[4], L[5], n, a)), m = L[4], V = L[5] + break + case'Q': + if (y && l(m, V, L[0], L[1], L[2], L[3], t, n, a)) return !0 + k && (o += b(m, V, L[0], L[1], L[2], L[3], n, a)), m = L[2], V = L[3] + break + case'A': + var W = L[0], X = L[1], v = L[2], w = L[3], K = L[4], I = L[5], J = Math.cos(K) * v + W, + C = Math.sin(K) * w + X + c ? (c = !1, U = J, d = C) : o += u(m, V, J, C) + var S = (n - W) * w / v + W + if (y && h(W, X, w, K, K + I, 1 - L[7], t, S, a)) return !0 + k && (o += f(W, X, w, K, K + I, 1 - L[7], S, a)), m = Math.cos(K + I) * v + W, V = Math.sin(K + I) * w + X + break + case'z': + if (y && r(m, V, U, d, t, n, a)) return !0 + p = !0 + } + } + return k && (o += u(m, V, U, d, n, a)), 0 !== o + } + + function x (e, t) { + var i = e + ':' + t + if (v[i]) return v[i] + L = L || W.getContext(), L.save(), t && (L.font = t), e = (e + '').split('\n') + for (var n = 0, a = 0, o = e.length; o > a; a++) n = Math.max(L.measureText(e[a]).width, n) + return L.restore(), v[i] = n, ++K > J && (K = 0, v = {}), n + } + + function _ (e, t) { + var i = e + ':' + t + if (w[i]) return w[i] + L = L || W.getContext(), L.save(), t && (L.font = t), e = (e + '').split('\n') + var n = (L.measureText('国').width + 2) * e.length + return L.restore(), w[i] = n, ++I > J && (I = 0, w = {}), n + } + + var L, W = e('./util'), X = e('./curve'), v = {}, w = {}, K = 0, I = 0, J = 5e3, C = 2 * Math.PI, + S = [-1, -1, -1], E = [-1, -1] + return { + isInside: i, + isOutside: o, + getTextWidth: x, + getTextHeight: _, + isInsidePath: k, + isInsidePolygon: c, + isInsideSector: p, + isInsideCircle: d, + isInsideLine: r, + isInsideRect: U, + isInsidePolyline: m, + isInsideCubicStroke: s, + isInsideQuadraticStroke: l + } + }), i('zrender/shape/Base', ['require', '../tool/matrix', '../tool/guid', '../tool/util', '../tool/log', '../mixin/Transformable', '../mixin/Eventful', '../tool/area', '../tool/color'], function (e) { + function t (t, n, a, o, r, s, l) { + r && (t.font = r), t.textAlign = s, t.textBaseline = l + var h = i(n, a, o, r, s, l) + n = (n + '').split('\n') + var m = e('../tool/area').getTextHeight('国', r) + switch (l) { + case'top': + o = h.y + break + case'bottom': + o = h.y + m + break + default: + o = h.y + m / 2 + } + for (var V = 0, U = n.length; U > V; V++) t.fillText(n[V], a, o), o += m + } + + function i (t, i, n, a, o, r) { + var s = e('../tool/area'), l = s.getTextWidth(t, a), h = s.getTextHeight('国', a) + switch (t = (t + '').split('\n'), o) { + case'end': + case'right': + i -= l + break + case'center': + i -= l / 2 + } + switch (r) { + case'top': + break + case'bottom': + n -= h * t.length + break + default: + n -= h * t.length / 2 + } + return { x: i, y: n, width: l, height: h * t.length } + } + + var n = window.G_vmlCanvasManager, a = e('../tool/matrix'), o = e('../tool/guid'), r = e('../tool/util'), + s = e('../tool/log'), l = e('../mixin/Transformable'), h = e('../mixin/Eventful'), m = function (e) { + e = e || {}, this.id = e.id || o() + for (var t in e) this[t] = e[t] + this.style = this.style || {}, this.highlightStyle = this.highlightStyle || null, this.parent = null, this.__dirty = !0, this.__clipShapes = [], l.call(this), h.call(this) + } + m.prototype.invisible = !1, m.prototype.ignore = !1, m.prototype.zlevel = 0, m.prototype.draggable = !1, m.prototype.clickable = !1, m.prototype.hoverable = !0, m.prototype.z = 0, m.prototype.brush = function (e, t) { + var i = this.beforeBrush(e, t) + switch (e.beginPath(), this.buildPath(e, i), i.brushType) { + case'both': + e.fill() + case'stroke': + i.lineWidth > 0 && e.stroke() + break + default: + e.fill() + } + this.drawText(e, i, this.style), this.afterBrush(e) + }, m.prototype.beforeBrush = function (e, t) { + var i = this.style + return this.brushTypeOnly && (i.brushType = this.brushTypeOnly), t && (i = this.getHighlightStyle(i, this.highlightStyle || {}, this.brushTypeOnly)), 'stroke' == this.brushTypeOnly && (i.strokeColor = i.strokeColor || i.color), e.save(), this.doClip(e), this.setContext(e, i), this.setTransform(e), i + }, m.prototype.afterBrush = function (e) { + e.restore() + } + var V = [['color', 'fillStyle'], ['strokeColor', 'strokeStyle'], ['opacity', 'globalAlpha'], ['lineCap', 'lineCap'], ['lineJoin', 'lineJoin'], ['miterLimit', 'miterLimit'], ['lineWidth', 'lineWidth'], ['shadowBlur', 'shadowBlur'], ['shadowColor', 'shadowColor'], ['shadowOffsetX', 'shadowOffsetX'], ['shadowOffsetY', 'shadowOffsetY']] + m.prototype.setContext = function (e, t) { + for (var i = 0, n = V.length; n > i; i++) { + var a = V[i][0], o = t[a], r = V[i][1] + 'undefined' != typeof o && (e[r] = o) + } + } + var U = a.create() + return m.prototype.doClip = function (e) { + if (this.__clipShapes && !n) for (var t = 0; t < this.__clipShapes.length; t++) { + var i = this.__clipShapes[t] + if (i.needTransform) { + var o = i.transform + a.invert(U, o), e.transform(o[0], o[1], o[2], o[3], o[4], o[5]) + } + if (e.beginPath(), i.buildPath(e, i.style), e.clip(), i.needTransform) { + var o = U + e.transform(o[0], o[1], o[2], o[3], o[4], o[5]) + } + } + }, m.prototype.getHighlightStyle = function (t, i, n) { + var a = {} + for (var o in t) a[o] = t[o] + var r = e('../tool/color'), s = r.getHighlightColor() + 'stroke' != t.brushType ? (a.strokeColor = s, a.lineWidth = (t.lineWidth || 1) + this.getHighlightZoom(), a.brushType = 'both') : 'stroke' != n ? (a.strokeColor = s, a.lineWidth = (t.lineWidth || 1) + this.getHighlightZoom()) : a.strokeColor = i.strokeColor || r.mix(t.strokeColor, r.toRGB(s)) + for (var o in i) 'undefined' != typeof i[o] && (a[o] = i[o]) + return a + }, m.prototype.getHighlightZoom = function () { + return 'text' != this.type ? 6 : 2 + }, m.prototype.drift = function (e, t) { + this.position[0] += e, this.position[1] += t + }, m.prototype.buildPath = function () { + s('buildPath not implemented in ' + this.type) + }, m.prototype.getRect = function () { + s('getRect not implemented in ' + this.type) + }, m.prototype.isCover = function (t, i) { + var n = this.transformCoordToLocal(t, i) + return t = n[0], i = n[1], this.isCoverRect(t, i) ? e('../tool/area').isInside(this, this.style, t, i) : !1 + }, m.prototype.isCoverRect = function (e, t) { + var i = this.style.__rect + return i || (i = this.style.__rect = this.getRect(this.style)), e >= i.x && e <= i.x + i.width && t >= i.y && t <= i.y + i.height + }, m.prototype.drawText = function (e, i, n) { + if ('undefined' != typeof i.text && i.text !== !1) { + var a = i.textColor || i.color || i.strokeColor + e.fillStyle = a + var o, r, s, l, h = 10, m = i.textPosition || this.textPosition || 'top' + switch (m) { + case'inside': + case'top': + case'bottom': + case'left': + case'right': + if (this.getRect) { + var V = (n || i).__rect || this.getRect(n || i) + switch (m) { + case'inside': + s = V.x + V.width / 2, l = V.y + V.height / 2, o = 'center', r = 'middle', 'stroke' != i.brushType && a == i.color && (e.fillStyle = '#fff') + break + case'left': + s = V.x - h, l = V.y + V.height / 2, o = 'end', r = 'middle' + break + case'right': + s = V.x + V.width + h, l = V.y + V.height / 2, o = 'start', r = 'middle' + break + case'top': + s = V.x + V.width / 2, l = V.y - h, o = 'center', r = 'bottom' + break + case'bottom': + s = V.x + V.width / 2, l = V.y + V.height + h, o = 'center', r = 'top' + } + } + break + case'start': + case'end': + var U = i.pointList || [[i.xStart || 0, i.yStart || 0], [i.xEnd || 0, i.yEnd || 0]], + d = U.length + if (2 > d) return + var p, c, u, y + switch (m) { + case'start': + p = U[1][0], c = U[0][0], u = U[1][1], y = U[0][1] + break + case'end': + p = U[d - 2][0], c = U[d - 1][0], u = U[d - 2][1], y = U[d - 1][1] + } + s = c, l = y + var g = Math.atan((u - y) / (c - p)) / Math.PI * 180 + 0 > c - p ? g += 180 : 0 > u - y && (g += 360), h = 5, g >= 30 && 150 >= g ? (o = 'center', r = 'bottom', l -= h) : g > 150 && 210 > g ? (o = 'right', r = 'middle', s -= h) : g >= 210 && 330 >= g ? (o = 'center', r = 'top', l += h) : (o = 'left', r = 'middle', s += h) + break + case'specific': + s = i.textX || 0, l = i.textY || 0, o = 'start', r = 'middle' + } + null != s && null != l && t(e, i.text, s, l, i.textFont, i.textAlign || o, i.textBaseline || r) + } + }, m.prototype.modSelf = function () { + this.__dirty = !0, this.style && (this.style.__rect = null), this.highlightStyle && (this.highlightStyle.__rect = null) + }, m.prototype.isSilent = function () { + return !(this.hoverable || this.draggable || this.clickable || this.onmousemove || this.onmouseover || this.onmouseout || this.onmousedown || this.onmouseup || this.onclick || this.ondragenter || this.ondragover || this.ondragleave || this.ondrop) + }, r.merge(m.prototype, l.prototype, !0), r.merge(m.prototype, h.prototype, !0), m + }), i('zrender/tool/curve', ['require', './vector'], function (e) { + function t (e) { + return e > -u && u > e + } + + function i (e) { + return e > u || -u > e + } + + function n (e, t, i, n, a) { + var o = 1 - a + return o * o * (o * e + 3 * a * t) + a * a * (a * n + 3 * o * i) + } + + function a (e, t, i, n, a) { + var o = 1 - a + return 3 * (((t - e) * o + 2 * (i - t) * a) * o + (n - i) * a * a) + } + + function o (e, i, n, a, o, r) { + var s = a + 3 * (i - n) - e, l = 3 * (n - 2 * i + e), h = 3 * (i - e), m = e - o, V = l * l - 3 * s * h, + U = l * h - 9 * s * m, d = h * h - 3 * l * m, p = 0 + if (t(V) && t(U)) if (t(l)) r[0] = 0 else { + var c = -h / l + c >= 0 && 1 >= c && (r[p++] = c) + } else { + var u = U * U - 4 * V * d + if (t(u)) { + var b = U / V, c = -l / s + b, f = -b / 2 + c >= 0 && 1 >= c && (r[p++] = c), f >= 0 && 1 >= f && (r[p++] = f) + } else if (u > 0) { + var k = Math.sqrt(u), x = V * l + 1.5 * s * (-U + k), _ = V * l + 1.5 * s * (-U - k) + x = 0 > x ? -Math.pow(-x, g) : Math.pow(x, g), _ = 0 > _ ? -Math.pow(-_, g) : Math.pow(_, g) + var c = (-l - (x + _)) / (3 * s) + c >= 0 && 1 >= c && (r[p++] = c) + } else { + var L = (2 * V * l - 3 * s * U) / (2 * Math.sqrt(V * V * V)), W = Math.acos(L) / 3, + X = Math.sqrt(V), v = Math.cos(W), c = (-l - 2 * X * v) / (3 * s), + f = (-l + X * (v + y * Math.sin(W))) / (3 * s), w = (-l + X * (v - y * Math.sin(W))) / (3 * s) + c >= 0 && 1 >= c && (r[p++] = c), f >= 0 && 1 >= f && (r[p++] = f), w >= 0 && 1 >= w && (r[p++] = w) + } + } + return p + } + + function r (e, n, a, o, r) { + var s = 6 * a - 12 * n + 6 * e, l = 9 * n + 3 * o - 3 * e - 9 * a, h = 3 * n - 3 * e, m = 0 + if (t(l)) { + if (i(s)) { + var V = -h / s + V >= 0 && 1 >= V && (r[m++] = V) + } + } else { + var U = s * s - 4 * l * h + if (t(U)) r[0] = -s / (2 * l) else if (U > 0) { + var d = Math.sqrt(U), V = (-s + d) / (2 * l), p = (-s - d) / (2 * l) + V >= 0 && 1 >= V && (r[m++] = V), p >= 0 && 1 >= p && (r[m++] = p) + } + } + return m + } + + function s (e, t, i, n, a, o) { + var r = (t - e) * a + e, s = (i - t) * a + t, l = (n - i) * a + i, h = (s - r) * a + r, m = (l - s) * a + s, + V = (m - h) * a + h + o[0] = e, o[1] = r, o[2] = h, o[3] = V, o[4] = V, o[5] = m, o[6] = l, o[7] = n + } + + function l (e, t, i, a, o, r, s, l, h, m, V) { + var U, d = .005, p = 1 / 0 + b[0] = h, b[1] = m + for (var y = 0; 1 > y; y += .05) { + f[0] = n(e, i, o, s, y), f[1] = n(t, a, r, l, y) + var g = c.distSquare(b, f) + p > g && (U = y, p = g) + } + p = 1 / 0 + for (var x = 0; 32 > x && !(u > d); x++) { + var _ = U - d, L = U + d + f[0] = n(e, i, o, s, _), f[1] = n(t, a, r, l, _) + var g = c.distSquare(f, b) + if (_ >= 0 && p > g) U = _, p = g else { + k[0] = n(e, i, o, s, L), k[1] = n(t, a, r, l, L) + var W = c.distSquare(k, b) + 1 >= L && p > W ? (U = L, p = W) : d *= .5 + } + } + return V && (V[0] = n(e, i, o, s, U), V[1] = n(t, a, r, l, U)), Math.sqrt(p) + } + + function h (e, t, i, n) { + var a = 1 - n + return a * (a * e + 2 * n * t) + n * n * i + } + + function m (e, t, i, n) { + return 2 * ((1 - n) * (t - e) + n * (i - t)) + } + + function V (e, n, a, o, r) { + var s = e - 2 * n + a, l = 2 * (n - e), h = e - o, m = 0 + if (t(s)) { + if (i(l)) { + var V = -h / l + V >= 0 && 1 >= V && (r[m++] = V) + } + } else { + var U = l * l - 4 * s * h + if (t(U)) { + var V = -l / (2 * s) + V >= 0 && 1 >= V && (r[m++] = V) + } else if (U > 0) { + var d = Math.sqrt(U), V = (-l + d) / (2 * s), p = (-l - d) / (2 * s) + V >= 0 && 1 >= V && (r[m++] = V), p >= 0 && 1 >= p && (r[m++] = p) + } + } + return m + } + + function U (e, t, i) { + var n = e + i - 2 * t + return 0 === n ? .5 : (e - t) / n + } + + function d (e, t, i, n, a) { + var o = (t - e) * n + e, r = (i - t) * n + t, s = (r - o) * n + o + a[0] = e, a[1] = o, a[2] = s, a[3] = s, a[4] = r, a[5] = i + } + + function p (e, t, i, n, a, o, r, s, l) { + var m, V = .005, U = 1 / 0 + b[0] = r, b[1] = s + for (var d = 0; 1 > d; d += .05) { + f[0] = h(e, i, a, d), f[1] = h(t, n, o, d) + var p = c.distSquare(b, f) + U > p && (m = d, U = p) + } + U = 1 / 0 + for (var y = 0; 32 > y && !(u > V); y++) { + var g = m - V, x = m + V + f[0] = h(e, i, a, g), f[1] = h(t, n, o, g) + var p = c.distSquare(f, b) + if (g >= 0 && U > p) m = g, U = p else { + k[0] = h(e, i, a, x), k[1] = h(t, n, o, x) + var _ = c.distSquare(k, b) + 1 >= x && U > _ ? (m = x, U = _) : V *= .5 + } + } + return l && (l[0] = h(e, i, a, m), l[1] = h(t, n, o, m)), Math.sqrt(U) + } + + var c = e('./vector'), u = 1e-4, y = Math.sqrt(3), g = 1 / 3, b = c.create(), f = c.create(), k = c.create() + return { + cubicAt: n, + cubicDerivativeAt: a, + cubicRootAt: o, + cubicExtrema: r, + cubicSubdivide: s, + cubicProjectPoint: l, + quadraticAt: h, + quadraticDerivativeAt: m, + quadraticRootAt: V, + quadraticExtremum: U, + quadraticSubdivide: d, + quadraticProjectPoint: p + } + }), i('zrender/mixin/Transformable', ['require', '../tool/matrix', '../tool/vector'], function (e) { + 'use strict' + + function t (e) { + return e > -s && s > e + } + + function i (e) { + return e > s || -s > e + } + + var n = e('../tool/matrix'), a = e('../tool/vector'), o = [0, 0], r = n.translate, s = 5e-5, l = function () { + this.position || (this.position = [0, 0]), 'undefined' == typeof this.rotation && (this.rotation = [0, 0, 0]), this.scale || (this.scale = [1, 1, 0, 0]), this.needLocalTransform = !1, this.needTransform = !1 + } + return l.prototype = { + constructor: l, updateNeedTransform: function () { + this.needLocalTransform = i(this.rotation[0]) || i(this.position[0]) || i(this.position[1]) || i(this.scale[0] - 1) || i(this.scale[1] - 1) + }, updateTransform: function () { + this.updateNeedTransform() + var e = this.parent && this.parent.needTransform + if (this.needTransform = this.needLocalTransform || e, this.needTransform) { + var t = this.transform || n.create() + if (n.identity(t), this.needLocalTransform) { + var a = this.scale + if (i(a[0]) || i(a[1])) { + o[0] = -a[2] || 0, o[1] = -a[3] || 0 + var s = i(o[0]) || i(o[1]) + s && r(t, t, o), n.scale(t, t, a), s && (o[0] = -o[0], o[1] = -o[1], r(t, t, o)) + } + if (this.rotation instanceof Array) { + if (0 !== this.rotation[0]) { + o[0] = -this.rotation[1] || 0, o[1] = -this.rotation[2] || 0 + var s = i(o[0]) || i(o[1]) + s && r(t, t, o), n.rotate(t, t, this.rotation[0]), s && (o[0] = -o[0], o[1] = -o[1], r(t, t, o)) + } + } else 0 !== this.rotation && n.rotate(t, t, this.rotation); + (i(this.position[0]) || i(this.position[1])) && r(t, t, this.position) + } + e && (this.needLocalTransform ? n.mul(t, this.parent.transform, t) : n.copy(t, this.parent.transform)), this.transform = t, this.invTransform = this.invTransform || n.create(), n.invert(this.invTransform, t) + } + }, setTransform: function (e) { + if (this.needTransform) { + var t = this.transform + e.transform(t[0], t[1], t[2], t[3], t[4], t[5]) + } + }, lookAt: function () { + var e = a.create() + return function (i) { + this.transform || (this.transform = n.create()) + var o = this.transform + if (a.sub(e, i, this.position), !t(e[0]) || !t(e[1])) { + a.normalize(e, e) + var r = this.scale + o[2] = e[0] * r[1], o[3] = e[1] * r[1], o[0] = e[1] * r[0], o[1] = -e[0] * r[0], o[4] = this.position[0], o[5] = this.position[1], this.decomposeTransform() + } + } + }(), decomposeTransform: function () { + if (this.transform) { + var e = this.transform, t = e[0] * e[0] + e[1] * e[1], n = this.position, a = this.scale, + o = this.rotation + i(t - 1) && (t = Math.sqrt(t)) + var r = e[2] * e[2] + e[3] * e[3] + i(r - 1) && (r = Math.sqrt(r)), n[0] = e[4], n[1] = e[5], a[0] = t, a[1] = r, a[2] = a[3] = 0, o[0] = Math.atan2(-e[1] / r, e[0] / t), o[1] = o[2] = 0 + } + }, transformCoordToLocal: function (e, t) { + var i = [e, t] + return this.needTransform && this.invTransform && a.applyTransform(i, i, this.invTransform), i + } + }, l + }), i('zrender/Group', ['require', './tool/guid', './tool/util', './mixin/Transformable', './mixin/Eventful'], function (e) { + var t = e('./tool/guid'), i = e('./tool/util'), n = e('./mixin/Transformable'), a = e('./mixin/Eventful'), + o = function (e) { + e = e || {}, this.id = e.id || t() + for (var i in e) this[i] = e[i] + this.type = 'group', this.clipShape = null, this._children = [], this._storage = null, this.__dirty = !0, n.call(this), a.call(this) + } + return o.prototype.ignore = !1, o.prototype.children = function () { + return this._children.slice() + }, o.prototype.childAt = function (e) { + return this._children[e] + }, o.prototype.addChild = function (e) { + e != this && e.parent != this && (e.parent && e.parent.removeChild(e), this._children.push(e), e.parent = this, this._storage && this._storage !== e._storage && (this._storage.addToMap(e), e instanceof o && e.addChildrenToStorage(this._storage))) + }, o.prototype.removeChild = function (e) { + var t = i.indexOf(this._children, e) + t >= 0 && this._children.splice(t, 1), e.parent = null, this._storage && (this._storage.delFromMap(e.id), e instanceof o && e.delChildrenFromStorage(this._storage)) + }, o.prototype.clearChildren = function () { + for (var e = 0; e < this._children.length; e++) { + var t = this._children[e] + this._storage && (this._storage.delFromMap(t.id), t instanceof o && t.delChildrenFromStorage(this._storage)) + } + this._children.length = 0 + }, o.prototype.eachChild = function (e, t) { + for (var i = !!t, n = 0; n < this._children.length; n++) { + var a = this._children[n] + i ? e.call(t, a) : e(a) + } + }, o.prototype.traverse = function (e, t) { + for (var i = !!t, n = 0; n < this._children.length; n++) { + var a = this._children[n] + i ? e.call(t, a) : e(a), 'group' === a.type && a.traverse(e, t) + } + }, o.prototype.addChildrenToStorage = function (e) { + for (var t = 0; t < this._children.length; t++) { + var i = this._children[t] + e.addToMap(i), i instanceof o && i.addChildrenToStorage(e) + } + }, o.prototype.delChildrenFromStorage = function (e) { + for (var t = 0; t < this._children.length; t++) { + var i = this._children[t] + e.delFromMap(i.id), i instanceof o && i.delChildrenFromStorage(e) + } + }, o.prototype.modSelf = function () { + this.__dirty = !0 + }, i.merge(o.prototype, n.prototype, !0), i.merge(o.prototype, a.prototype, !0), o + }), i('zrender/animation/Clip', ['require', './easing'], function (e) { + function t (e) { + this._targetPool = e.target || {}, this._targetPool instanceof Array || (this._targetPool = [this._targetPool]), this._life = e.life || 1e3, this._delay = e.delay || 0, this._startTime = (new Date).getTime() + this._delay, this._endTime = this._startTime + 1e3 * this._life, this.loop = 'undefined' == typeof e.loop ? !1 : e.loop, this.gap = e.gap || 0, this.easing = e.easing || 'Linear', this.onframe = e.onframe, this.ondestroy = e.ondestroy, this.onrestart = e.onrestart + } + + var i = e('./easing') + return t.prototype = { + step: function (e) { + var t = (e - this._startTime) / this._life + if (!(0 > t)) { + t = Math.min(t, 1) + var n = 'string' == typeof this.easing ? i[this.easing] : this.easing, + a = 'function' == typeof n ? n(t) : t + return this.fire('frame', a), 1 == t ? this.loop ? (this.restart(), 'restart') : (this.__needsRemove = !0, 'destroy') : null + } + }, restart: function () { + var e = (new Date).getTime(), t = (e - this._startTime) % this._life + this._startTime = (new Date).getTime() - t + this.gap, this.__needsRemove = !1 + }, fire: function (e, t) { + for (var i = 0, n = this._targetPool.length; n > i; i++) this['on' + e] && this['on' + e](this._targetPool[i], t) + }, constructor: t + }, t + }), i('zrender/animation/easing', [], function () { + var e = { + Linear: function (e) { + return e + }, QuadraticIn: function (e) { + return e * e + }, QuadraticOut: function (e) { + return e * (2 - e) + }, QuadraticInOut: function (e) { + return (e *= 2) < 1 ? .5 * e * e : -.5 * (--e * (e - 2) - 1) + }, CubicIn: function (e) { + return e * e * e + }, CubicOut: function (e) { + return --e * e * e + 1 + }, CubicInOut: function (e) { + return (e *= 2) < 1 ? .5 * e * e * e : .5 * ((e -= 2) * e * e + 2) + }, QuarticIn: function (e) { + return e * e * e * e + }, QuarticOut: function (e) { + return 1 - --e * e * e * e + }, QuarticInOut: function (e) { + return (e *= 2) < 1 ? .5 * e * e * e * e : -.5 * ((e -= 2) * e * e * e - 2) + }, QuinticIn: function (e) { + return e * e * e * e * e + }, QuinticOut: function (e) { + return --e * e * e * e * e + 1 + }, QuinticInOut: function (e) { + return (e *= 2) < 1 ? .5 * e * e * e * e * e : .5 * ((e -= 2) * e * e * e * e + 2) + }, SinusoidalIn: function (e) { + return 1 - Math.cos(e * Math.PI / 2) + }, SinusoidalOut: function (e) { + return Math.sin(e * Math.PI / 2) + }, SinusoidalInOut: function (e) { + return .5 * (1 - Math.cos(Math.PI * e)) + }, ExponentialIn: function (e) { + return 0 === e ? 0 : Math.pow(1024, e - 1) + }, ExponentialOut: function (e) { + return 1 === e ? 1 : 1 - Math.pow(2, -10 * e) + }, ExponentialInOut: function (e) { + return 0 === e ? 0 : 1 === e ? 1 : (e *= 2) < 1 ? .5 * Math.pow(1024, e - 1) : .5 * (-Math.pow(2, -10 * (e - 1)) + 2) + }, CircularIn: function (e) { + return 1 - Math.sqrt(1 - e * e) + }, CircularOut: function (e) { + return Math.sqrt(1 - --e * e) + }, CircularInOut: function (e) { + return (e *= 2) < 1 ? -.5 * (Math.sqrt(1 - e * e) - 1) : .5 * (Math.sqrt(1 - (e -= 2) * e) + 1) + }, ElasticIn: function (e) { + var t, i = .1, n = .4 + return 0 === e ? 0 : 1 === e ? 1 : (!i || 1 > i ? (i = 1, t = n / 4) : t = n * Math.asin(1 / i) / (2 * Math.PI), -(i * Math.pow(2, 10 * (e -= 1)) * Math.sin(2 * (e - t) * Math.PI / n))) + }, ElasticOut: function (e) { + var t, i = .1, n = .4 + return 0 === e ? 0 : 1 === e ? 1 : (!i || 1 > i ? (i = 1, t = n / 4) : t = n * Math.asin(1 / i) / (2 * Math.PI), i * Math.pow(2, -10 * e) * Math.sin(2 * (e - t) * Math.PI / n) + 1) + }, ElasticInOut: function (e) { + var t, i = .1, n = .4 + return 0 === e ? 0 : 1 === e ? 1 : (!i || 1 > i ? (i = 1, t = n / 4) : t = n * Math.asin(1 / i) / (2 * Math.PI), (e *= 2) < 1 ? -.5 * i * Math.pow(2, 10 * (e -= 1)) * Math.sin(2 * (e - t) * Math.PI / n) : i * Math.pow(2, -10 * (e -= 1)) * Math.sin(2 * (e - t) * Math.PI / n) * .5 + 1) + }, BackIn: function (e) { + var t = 1.70158 + return e * e * ((t + 1) * e - t) + }, BackOut: function (e) { + var t = 1.70158 + return --e * e * ((t + 1) * e + t) + 1 + }, BackInOut: function (e) { + var t = 2.5949095 + return (e *= 2) < 1 ? .5 * e * e * ((t + 1) * e - t) : .5 * ((e -= 2) * e * ((t + 1) * e + t) + 2) + }, BounceIn: function (t) { + return 1 - e.BounceOut(1 - t) + }, BounceOut: function (e) { + return 1 / 2.75 > e ? 7.5625 * e * e : 2 / 2.75 > e ? 7.5625 * (e -= 1.5 / 2.75) * e + .75 : 2.5 / 2.75 > e ? 7.5625 * (e -= 2.25 / 2.75) * e + .9375 : 7.5625 * (e -= 2.625 / 2.75) * e + .984375 + }, BounceInOut: function (t) { + return .5 > t ? .5 * e.BounceIn(2 * t) : .5 * e.BounceOut(2 * t - 1) + .5 + } + } + return e + }), i('echarts/chart/base', ['require', 'zrender/shape/Image', '../util/shape/Icon', '../util/shape/MarkLine', '../util/shape/Symbol', 'zrender/shape/Polyline', 'zrender/shape/ShapeBundle', '../config', '../util/ecData', '../util/ecAnimation', '../util/ecEffect', '../util/accMath', '../component/base', '../layout/EdgeBundling', 'zrender/tool/util', 'zrender/tool/area'], function (e) { + function t (e) { + return null != e.x && null != e.y + } + + function i (e, t, i, n, a) { + p.call(this, e, t, i, n, a) + var o = this + this.selectedMap = {}, this.lastShapeList = [], this.shapeHandler = { + onclick: function () { + o.isClick = !0 + }, ondragover: function (e) { + var t = e.target + t.highlightStyle = t.highlightStyle || {} + var i = t.highlightStyle, n = i.brushTyep, a = i.strokeColor, r = i.lineWidth + i.brushType = 'stroke', i.strokeColor = o.ecTheme.calculableColor || h.calculableColor, i.lineWidth = 'icon' === t.type ? 30 : 10, o.zr.addHoverShape(t), setTimeout(function () { + i && (i.brushType = n, i.strokeColor = a, i.lineWidth = r) + }, 20) + }, ondrop: function (e) { + null != m.get(e.dragged, 'data') && (o.isDrop = !0) + }, ondragend: function () { + o.isDragend = !0 + } + } + } + + var n = e('zrender/shape/Image'), a = e('../util/shape/Icon'), o = e('../util/shape/MarkLine'), + r = e('../util/shape/Symbol'), s = e('zrender/shape/Polyline'), l = e('zrender/shape/ShapeBundle'), + h = e('../config'), m = e('../util/ecData'), V = e('../util/ecAnimation'), U = e('../util/ecEffect'), + d = e('../util/accMath'), p = e('../component/base'), c = e('../layout/EdgeBundling'), + u = e('zrender/tool/util'), y = e('zrender/tool/area') + return i.prototype = { + setCalculable: function (e) { + return e.dragEnableTime = this.ecTheme.DRAG_ENABLE_TIME || h.DRAG_ENABLE_TIME, e.ondragover = this.shapeHandler.ondragover, e.ondragend = this.shapeHandler.ondragend, e.ondrop = this.shapeHandler.ondrop, e + }, ondrop: function (e, t) { + if (this.isDrop && e.target && !t.dragIn) { + var i, n = e.target, a = e.dragged, o = m.get(n, 'seriesIndex'), r = m.get(n, 'dataIndex'), + s = this.series, l = this.component.legend + if (-1 === r) { + if (m.get(a, 'seriesIndex') == o) return t.dragOut = t.dragIn = t.needRefresh = !0, void (this.isDrop = !1) + i = { + value: m.get(a, 'value'), + name: m.get(a, 'name') + }, this.type === h.CHART_TYPE_PIE && i.value < 0 && (i.value = 0) + for (var V = !1, U = s[o].data, p = 0, c = U.length; c > p; p++) U[p].name === i.name && '-' === U[p].value && (s[o].data[p].value = i.value, V = !0) + !V && s[o].data.push(i), l && l.add(i.name, a.style.color || a.style.strokeColor) + } else i = s[o].data[r] || '-', null != i.value ? (s[o].data[r].value = '-' != i.value ? d.accAdd(s[o].data[r].value, m.get(a, 'value')) : m.get(a, 'value'), (this.type === h.CHART_TYPE_FUNNEL || this.type === h.CHART_TYPE_PIE) && (l && 1 === l.getRelatedAmount(i.name) && this.component.legend.del(i.name), i.name += this.option.nameConnector + m.get(a, 'name'), l && l.add(i.name, a.style.color || a.style.strokeColor))) : s[o].data[r] = '-' != i ? d.accAdd(s[o].data[r], m.get(a, 'value')) : m.get(a, 'value') + t.dragIn = t.dragIn || !0, this.isDrop = !1 + var u = this + setTimeout(function () { + u.zr.trigger('mousemove', e.event) + }, 300) + } + }, ondragend: function (e, t) { + if (this.isDragend && e.target && !t.dragOut) { + var i = e.target, n = m.get(i, 'seriesIndex'), a = m.get(i, 'dataIndex'), o = this.series + if (null != o[n].data[a].value) { + o[n].data[a].value = '-' + var r = o[n].data[a].name, s = this.component.legend + s && 0 === s.getRelatedAmount(r) && s.del(r) + } else o[n].data[a] = '-' + t.dragOut = !0, t.needRefresh = !0, this.isDragend = !1 + } + }, onlegendSelected: function (e, t) { + var i = e.selected + for (var n in this.selectedMap) this.selectedMap[n] != i[n] && (t.needRefresh = !0), this.selectedMap[n] = i[n] + }, _buildPosition: function () { + this._symbol = this.option.symbolList, this._sIndex2ShapeMap = {}, this._sIndex2ColorMap = {}, this.selectedMap = {}, this.xMarkMap = {} + for (var e, t, i, n, a = this.series, o = { + top: [], + bottom: [], + left: [], + right: [], + other: [] + }, r = 0, s = a.length; s > r; r++) a[r].type === this.type && (a[r] = this.reformOption(a[r]), this.legendHoverLink = a[r].legendHoverLink || this.legendHoverLink, e = a[r].xAxisIndex, t = a[r].yAxisIndex, i = this.component.xAxis.getAxis(e), n = this.component.yAxis.getAxis(t), i.type === h.COMPONENT_TYPE_AXIS_CATEGORY ? o[i.getPosition()].push(r) : n.type === h.COMPONENT_TYPE_AXIS_CATEGORY ? o[n.getPosition()].push(r) : o.other.push(r)) + for (var l in o) o[l].length > 0 && this._buildSinglePosition(l, o[l]) + this.addShapeList() + }, _buildSinglePosition: function (e, t) { + var i = this._mapData(t), n = i.locationMap, a = i.maxDataLength + if (0 !== a && 0 !== n.length) { + switch (e) { + case'bottom': + case'top': + this._buildHorizontal(t, a, n, this.xMarkMap) + break + case'left': + case'right': + this._buildVertical(t, a, n, this.xMarkMap) + break + case'other': + this._buildOther(t, a, n, this.xMarkMap) + } + for (var o = 0, r = t.length; r > o; o++) this.buildMark(t[o]) + } + }, _mapData: function (e) { + for (var t, i, n, a, o = this.series, r = 0, s = {}, l = '__kener__stack__', m = this.component.legend, V = [], U = 0, d = 0, p = e.length; p > d; d++) { + if (t = o[e[d]], n = t.name, this._sIndex2ShapeMap[e[d]] = this._sIndex2ShapeMap[e[d]] || this.query(t, 'symbol') || this._symbol[d % this._symbol.length], m) { + if (this.selectedMap[n] = m.isSelected(n), this._sIndex2ColorMap[e[d]] = m.getColor(n), a = m.getItemShape(n)) { + var c = a.style + if (this.type == h.CHART_TYPE_LINE) c.iconType = 'legendLineIcon', c.symbol = this._sIndex2ShapeMap[e[d]] else if (t.itemStyle.normal.barBorderWidth > 0) { + var u = a.highlightStyle + c.brushType = 'both', c.x += 1, c.y += 1, c.width -= 2, c.height -= 2, c.strokeColor = u.strokeColor = t.itemStyle.normal.barBorderColor, u.lineWidth = 3 + } + m.setItemShape(n, a) + } + } else this.selectedMap[n] = !0, this._sIndex2ColorMap[e[d]] = this.zr.getColor(e[d]) + this.selectedMap[n] && (i = t.stack || l + e[d], null == s[i] ? (s[i] = r, V[r] = [e[d]], r++) : V[s[i]].push(e[d])), U = Math.max(U, t.data.length) + } + return { locationMap: V, maxDataLength: U } + }, _calculMarkMapXY: function (e, t, i) { + for (var n = this.series, a = 0, o = t.length; o > a; a++) for (var r = 0, s = t[a].length; s > r; r++) { + var l = t[a][r], h = 'xy' == i ? 0 : '', m = this.component.grid, V = e[l] + if ('-1' != i.indexOf('x')) { + V['counter' + h] > 0 && (V['average' + h] = V['sum' + h] / V['counter' + h]) + var U = this.component.xAxis.getAxis(n[l].xAxisIndex || 0).getCoord(V['average' + h]) + V['averageLine' + h] = [[U, m.getYend()], [U, m.getY()]], V['minLine' + h] = [[V['minX' + h], m.getYend()], [V['minX' + h], m.getY()]], V['maxLine' + h] = [[V['maxX' + h], m.getYend()], [V['maxX' + h], m.getY()]], V.isHorizontal = !1 + } + if (h = 'xy' == i ? 1 : '', '-1' != i.indexOf('y')) { + V['counter' + h] > 0 && (V['average' + h] = V['sum' + h] / V['counter' + h]) + var d = this.component.yAxis.getAxis(n[l].yAxisIndex || 0).getCoord(V['average' + h]) + V['averageLine' + h] = [[m.getX(), d], [m.getXend(), d]], V['minLine' + h] = [[m.getX(), V['minY' + h]], [m.getXend(), V['minY' + h]]], V['maxLine' + h] = [[m.getX(), V['maxY' + h]], [m.getXend(), V['maxY' + h]]], V.isHorizontal = !0 + } + } + }, addLabel: function (e, t, i, n, a) { + var o = [i, t], r = this.deepMerge(o, 'itemStyle.normal.label'), + s = this.deepMerge(o, 'itemStyle.emphasis.label'), l = r.textStyle || {}, h = s.textStyle || {} + + if (r.show) { + var m = e.style + m.text = this._getLabelText(t, i, n, 'normal'), m.textPosition = null == r.position ? 'horizontal' === a ? 'right' : 'top' : r.position, m.textColor = l.color, m.textFont = this.getFont(l), m.textAlign = l.align, m.textBaseline = l.baseline + } + if (s.show) { + var V = e.highlightStyle + V.text = this._getLabelText(t, i, n, 'emphasis'), V.textPosition = r.show ? e.style.textPosition : null == s.position ? 'horizontal' === a ? 'right' : 'top' : s.position, V.textColor = h.color, V.textFont = this.getFont(h), V.textAlign = h.align, V.textBaseline = h.baseline + } + return e + }, _getLabelText: function (e, t, i, n) { + var a = this.deepQuery([t, e], 'itemStyle.' + n + '.label.formatter') + a || 'emphasis' !== n || (a = this.deepQuery([t, e], 'itemStyle.normal.label.formatter')) + var o = this.getDataFromOption(t, '-') + return a ? 'function' == typeof a ? a.call(this.myChart, { + seriesName: e.name, + series: e, + name: i, + value: o, + data: t, + status: n + }) : 'string' == typeof a ? a = a.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{a0}', e.name).replace('{b0}', i).replace('{c0}', this.numAddCommas(o)) : void 0 : o instanceof Array ? null != o[2] ? this.numAddCommas(o[2]) : o[0] + ' , ' + o[1] : this.numAddCommas(o) + }, buildMark: function (e) { + var t = this.series[e] + this.selectedMap[t.name] && (t.markLine && this._buildMarkLine(e), t.markPoint && this._buildMarkPoint(e)) + }, _buildMarkPoint: function (e) { + for (var t, i, n = (this.markAttachStyle || {})[e], a = this.series[e], o = u.clone(a.markPoint), r = 0, s = o.data.length; s > r; r++) t = o.data[r], i = this.getMarkCoord(e, t), t.x = null != t.x ? t.x : i[0], t.y = null != t.y ? t.y : i[1], !t.type || 'max' !== t.type && 'min' !== t.type || (t.value = i[3], t.name = t.name || t.type, t.symbolSize = t.symbolSize || y.getTextWidth(i[3], this.getFont()) / 2 + 5) + for (var l = this._markPoint(e, o), r = 0, s = l.length; s > r; r++) { + var m = l[r] + m.zlevel = a.zlevel, m.z = a.z + 1 + for (var V in n) m[V] = u.clone(n[V]) + this.shapeList.push(m) + } + if (this.type === h.CHART_TYPE_FORCE || this.type === h.CHART_TYPE_CHORD) for (var r = 0, s = l.length; s > r; r++) this.zr.addShape(l[r]) + }, _buildMarkLine: function (e) { + for (var t, i = (this.markAttachStyle || {})[e], n = this.series[e], a = u.clone(n.markLine), o = 0, r = a.data.length; r > o; o++) { + var s = a.data[o] + !s.type || 'max' !== s.type && 'min' !== s.type && 'average' !== s.type ? t = [this.getMarkCoord(e, s[0]), this.getMarkCoord(e, s[1])] : (t = this.getMarkCoord(e, s), a.data[o] = [u.clone(s), {}], a.data[o][0].name = s.name || s.type, a.data[o][0].value = 'average' !== s.type ? t[3] : +t[3].toFixed(null != a.precision ? a.precision : this.deepQuery([this.ecTheme, h], 'markLine.precision')), t = t[2], s = [{}, {}]), null != t && null != t[0] && null != t[1] && (a.data[o][0].x = null != s[0].x ? s[0].x : t[0][0], a.data[o][0].y = null != s[0].y ? s[0].y : t[0][1], a.data[o][1].x = null != s[1].x ? s[1].x : t[1][0], a.data[o][1].y = null != s[1].y ? s[1].y : t[1][1]) + } + var m = this._markLine(e, a), V = a.large + if (V) { + var U = new l({ style: { shapeList: m } }), d = m[0] + if (d) { + u.merge(U.style, d.style), u.merge(U.highlightStyle = {}, d.highlightStyle), U.style.brushType = 'stroke', U.zlevel = n.zlevel, U.z = n.z + 1, U.hoverable = !1 + for (var p in i) U[p] = u.clone(i[p]) + } + this.shapeList.push(U), this.zr.addShape(U), U._mark = 'largeLine' + var c = a.effect + c.show && (U.effect = c) + } else { + for (var o = 0, r = m.length; r > o; o++) { + var y = m[o] + y.zlevel = n.zlevel, y.z = n.z + 1 + for (var p in i) y[p] = u.clone(i[p]) + this.shapeList.push(y) + } + if (this.type === h.CHART_TYPE_FORCE || this.type === h.CHART_TYPE_CHORD) for (var o = 0, r = m.length; r > o; o++) this.zr.addShape(m[o]) + } + }, _markPoint: function (e, t) { + var i = this.series[e], n = this.component + u.merge(u.merge(t, u.clone(this.ecTheme.markPoint || {})), u.clone(h.markPoint)), t.name = i.name + var a, o, r, s, l, V, U, d = [], p = t.data, c = n.dataRange, y = n.legend, g = this.zr.getWidth(), + b = this.zr.getHeight() + if (t.large) a = this.getLargeMarkPointShape(e, t), a._mark = 'largePoint', a && d.push(a) else for (var f = 0, k = p.length; k > f; f++) null != p[f].x && null != p[f].y && (r = null != p[f].value ? p[f].value : '', y && (o = y.getColor(i.name)), c && (o = isNaN(r) ? o : c.getColor(r), s = [p[f], t], l = this.deepQuery(s, 'itemStyle.normal.color') || o, V = this.deepQuery(s, 'itemStyle.emphasis.color') || l, null == l && null == V) || (o = null == o ? this.zr.getColor(e) : o, p[f].tooltip = p[f].tooltip || t.tooltip || { trigger: 'item' }, p[f].name = null != p[f].name ? p[f].name : '', p[f].value = r, a = this.getSymbolShape(t, e, p[f], f, p[f].name, this.parsePercent(p[f].x, g), this.parsePercent(p[f].y, b), 'pin', o, 'rgba(0,0,0,0)', 'horizontal'), a._mark = 'point', U = this.deepMerge([p[f], t], 'effect'), U.show && (a.effect = U), i.type === h.CHART_TYPE_MAP && (a._geo = this.getMarkGeo(p[f])), m.pack(a, i, e, p[f], f, p[f].name, r), d.push(a))) + return d + }, _markLine: function () { + function e (e, t) { + e[t] = e[t] instanceof Array ? e[t].length > 1 ? e[t] : [e[t][0], e[t][0]] : [e[t], e[t]] + } + + return function (i, n) { + var a = this.series[i], o = this.component, r = o.dataRange, s = o.legend + u.merge(u.merge(n, u.clone(this.ecTheme.markLine || {})), u.clone(h.markLine)) + var l = s ? s.getColor(a.name) : this.zr.getColor(i) + e(n, 'symbol'), e(n, 'symbolSize'), e(n, 'symbolRotate') + for (var V = n.data, U = [], d = this.zr.getWidth(), p = this.zr.getHeight(), y = 0; y < V.length; y++) { + var g = V[y] + if (t(g[0]) && t(g[1])) { + var b = this.deepMerge(g), f = [b, n], k = l, x = null != b.value ? b.value : '' + if (r) { + k = isNaN(x) ? k : r.getColor(x) + var _ = this.deepQuery(f, 'itemStyle.normal.color') || k, + L = this.deepQuery(f, 'itemStyle.emphasis.color') || _ + if (null == _ && null == L) continue + } + g[0].tooltip = b.tooltip || n.tooltip || { trigger: 'item' }, g[0].name = g[0].name || '', g[1].name = g[1].name || '', g[0].value = x, U.push({ + points: [[this.parsePercent(g[0].x, d), this.parsePercent(g[0].y, p)], [this.parsePercent(g[1].x, d), this.parsePercent(g[1].y, p)]], + rawData: g, + color: k + }) + } + } + var W = this.query(n, 'bundling.enable') + if (W) { + var X = new c + X.maxTurningAngle = this.query(n, 'bundling.maxTurningAngle') / 180 * Math.PI, U = X.run(U) + } + n.name = a.name + for (var v = [], y = 0, w = U.length; w > y; y++) { + var K = U[y], I = K.rawEdge || K, g = I.rawData, x = null != g.value ? g.value : '', + J = this.getMarkLineShape(n, i, g, y, K.points, W, I.color) + J._mark = 'line' + var C = this.deepMerge([g[0], g[1], n], 'effect') + C.show && (J.effect = C, J.effect.large = n.large), a.type === h.CHART_TYPE_MAP && (J._geo = [this.getMarkGeo(g[0]), this.getMarkGeo(g[1])]), m.pack(J, a, i, g[0], y, g[0].name + ('' !== g[1].name ? ' > ' + g[1].name : ''), x), v.push(J) + } + return v + } + }(), getMarkCoord: function () { + return [0, 0] + }, getSymbolShape: function (e, t, i, o, r, s, l, h, V, U, d) { + var p = [i, e], c = this.getDataFromOption(i, '-') + h = this.deepQuery(p, 'symbol') || h + var u = this.deepQuery(p, 'symbolSize') + u = 'function' == typeof u ? u(c) : u, 'number' == typeof u && (u = [u, u]) + var y = this.deepQuery(p, 'symbolRotate'), g = this.deepMerge(p, 'itemStyle.normal'), + b = this.deepMerge(p, 'itemStyle.emphasis'), + f = null != g.borderWidth ? g.borderWidth : g.lineStyle && g.lineStyle.width + null == f && (f = h.match('empty') ? 2 : 0) + var k = null != b.borderWidth ? b.borderWidth : b.lineStyle && b.lineStyle.width + null == k && (k = f + 2) + var x = this.getItemStyleColor(g.color, t, o, i), _ = this.getItemStyleColor(b.color, t, o, i), + L = u[0], W = u[1], X = new a({ + style: { + iconType: h.replace('empty', '').toLowerCase(), + x: s - L, + y: l - W, + width: 2 * L, + height: 2 * W, + brushType: 'both', + color: h.match('empty') ? U : x || V, + strokeColor: g.borderColor || x || V, + lineWidth: f + }, + highlightStyle: { + color: h.match('empty') ? U : _ || x || V, + strokeColor: b.borderColor || g.borderColor || _ || x || V, + lineWidth: k + }, + clickable: this.deepQuery(p, 'clickable') + }) + return h.match('image') && (X.style.image = h.replace(new RegExp('^image:\\/\\/'), ''), X = new n({ + style: X.style, + highlightStyle: X.highlightStyle, + clickable: this.deepQuery(p, 'clickable') + })), null != y && (X.rotation = [y * Math.PI / 180, s, l]), h.match('star') && (X.style.iconType = 'star', X.style.n = h.replace('empty', '').replace('star', '') - 0 || 5), 'none' === h && (X.invisible = !0, X.hoverable = !1), X = this.addLabel(X, e, i, r, d), h.match('empty') && (null == X.style.textColor && (X.style.textColor = X.style.strokeColor), null == X.highlightStyle.textColor && (X.highlightStyle.textColor = X.highlightStyle.strokeColor)), m.pack(X, e, t, i, o, r), X._x = s, X._y = l, X._dataIndex = o, X._seriesIndex = t, X + }, getMarkLineShape: function (e, t, i, n, a, r, l) { + var h = null != i[0].value ? i[0].value : '-', m = null != i[1].value ? i[1].value : '-', + V = [i[0].symbol || e.symbol[0], i[1].symbol || e.symbol[1]], + U = [i[0].symbolSize || e.symbolSize[0], i[1].symbolSize || e.symbolSize[1]] + U[0] = 'function' == typeof U[0] ? U[0](h) : U[0], U[1] = 'function' == typeof U[1] ? U[1](m) : U[1] + var d = [this.query(i[0], 'symbolRotate') || e.symbolRotate[0], this.query(i[1], 'symbolRotate') || e.symbolRotate[1]], + p = [i[0], i[1], e], c = this.deepMerge(p, 'itemStyle.normal') + c.color = this.getItemStyleColor(c.color, t, n, i) + var u = this.deepMerge(p, 'itemStyle.emphasis') + u.color = this.getItemStyleColor(u.color, t, n, i) + var y = c.lineStyle, g = u.lineStyle, b = y.width + null == b && (b = c.borderWidth) + var f = g.width + null == f && (f = null != u.borderWidth ? u.borderWidth : b + 2) + var k = this.deepQuery(p, 'smoothness') + this.deepQuery(p, 'smooth') || (k = 0) + var x = r ? s : o, _ = new x({ + style: { + symbol: V, + symbolSize: U, + symbolRotate: d, + brushType: 'both', + lineType: y.type, + shadowColor: y.shadowColor || y.color || c.borderColor || c.color || l, + shadowBlur: y.shadowBlur, + shadowOffsetX: y.shadowOffsetX, + shadowOffsetY: y.shadowOffsetY, + color: c.color || l, + strokeColor: y.color || c.borderColor || c.color || l, + lineWidth: b, + symbolBorderColor: c.borderColor || c.color || l, + symbolBorder: c.borderWidth + }, + highlightStyle: { + shadowColor: g.shadowColor, + shadowBlur: g.shadowBlur, + shadowOffsetX: g.shadowOffsetX, + shadowOffsetY: g.shadowOffsetY, + color: u.color || c.color || l, + strokeColor: g.color || y.color || u.borderColor || c.borderColor || u.color || c.color || l, + lineWidth: f, + symbolBorderColor: u.borderColor || c.borderColor || u.color || c.color || l, + symbolBorder: null == u.borderWidth ? c.borderWidth + 2 : u.borderWidth + }, + clickable: this.deepQuery(p, 'clickable') + }), L = _.style + return r ? (L.pointList = a, L.smooth = k) : (L.xStart = a[0][0], L.yStart = a[0][1], L.xEnd = a[1][0], L.yEnd = a[1][1], L.curveness = k, _.updatePoints(_.style)), _ = this.addLabel(_, e, i[0], i[0].name + ' : ' + i[1].name) + }, getLargeMarkPointShape: function (e, t) { + var i, n, a, o, s, l, h = this.series[e], m = this.component, V = t.data, U = m.dataRange, d = m.legend, + p = [V[0], t] + if (d && (n = d.getColor(h.name)), !U || (a = null != V[0].value ? V[0].value : '', n = isNaN(a) ? n : U.getColor(a), o = this.deepQuery(p, 'itemStyle.normal.color') || n, s = this.deepQuery(p, 'itemStyle.emphasis.color') || o, null != o || null != s)) { + n = this.deepMerge(p, 'itemStyle.normal').color || n + var c = this.deepQuery(p, 'symbol') || 'circle' + c = c.replace('empty', '').replace(/\d/g, ''), l = this.deepMerge([V[0], t], 'effect') + var u = window.devicePixelRatio || 1 + return i = new r({ + style: { + pointList: V, + color: n, + strokeColor: n, + shadowColor: l.shadowColor || n, + shadowBlur: (null != l.shadowBlur ? l.shadowBlur : 8) * u, + size: this.deepQuery(p, 'symbolSize'), + iconType: c, + brushType: 'fill', + lineWidth: 1 + }, draggable: !1, hoverable: !1 + }), l.show && (i.effect = l), i + } + }, backupShapeList: function () { + this.shapeList && this.shapeList.length > 0 ? (this.lastShapeList = this.shapeList, this.shapeList = []) : this.lastShapeList = [] + }, addShapeList: function () { + var e, t, i = this.option.animationThreshold / (this.canvasSupported ? 2 : 4), n = this.lastShapeList, + a = this.shapeList, o = n.length > 0, + r = o ? this.query(this.option, 'animationDurationUpdate') : this.query(this.option, 'animationDuration'), + s = this.query(this.option, 'animationEasing'), l = {}, m = {} + if (this.option.animation && !this.option.renderAsImage && a.length < i && !this.motionlessOnce) { + for (var V = 0, U = n.length; U > V; V++) t = this._getAnimationKey(n[V]), t.match('undefined') ? this.zr.delShape(n[V].id) : (t += n[V].type, l[t] ? this.zr.delShape(n[V].id) : l[t] = n[V]) + for (var V = 0, U = a.length; U > V; V++) t = this._getAnimationKey(a[V]), t.match('undefined') ? this.zr.addShape(a[V]) : (t += a[V].type, m[t] = a[V]) + for (t in l) m[t] || this.zr.delShape(l[t].id) + for (t in m) l[t] ? (this.zr.delShape(l[t].id), this._animateMod(l[t], m[t], r, s, 0, o)) : (e = this.type != h.CHART_TYPE_LINE && this.type != h.CHART_TYPE_RADAR || 0 === t.indexOf('icon') ? 0 : r / 2, this._animateMod(!1, m[t], r, s, e, o)) + this.zr.refresh(), this.animationEffect() + } else { + this.motionlessOnce = !1, this.zr.delShape(n) + for (var V = 0, U = a.length; U > V; V++) this.zr.addShape(a[V]) + } + }, _getAnimationKey: function (e) { + return this.type != h.CHART_TYPE_MAP && this.type != h.CHART_TYPE_TREEMAP && this.type != h.CHART_TYPE_VENN && this.type != h.CHART_TYPE_TREE ? m.get(e, 'seriesIndex') + '_' + m.get(e, 'dataIndex') + (e._mark ? e._mark : '') + (this.type === h.CHART_TYPE_RADAR ? m.get(e, 'special') : '') : m.get(e, 'seriesIndex') + '_' + m.get(e, 'dataIndex') + (e._mark ? e._mark : 'undefined') + }, _animateMod: function (e, t, i, n, a, o) { + switch (t.type) { + case'polyline': + case'half-smooth-polygon': + V.pointList(this.zr, e, t, i, n) + break + case'rectangle': + V.rectangle(this.zr, e, t, i, n) + break + case'image': + case'icon': + V.icon(this.zr, e, t, i, n, a) + break + case'candle': + o ? this.zr.addShape(t) : V.candle(this.zr, e, t, i, n) + break + case'ring': + case'sector': + case'circle': + o ? 'sector' === t.type ? V.sector(this.zr, e, t, i, n) : this.zr.addShape(t) : V.ring(this.zr, e, t, i + (m.get(t, 'dataIndex') || 0) % 20 * 100, n) + break + case'text': + V.text(this.zr, e, t, i, n) + break + case'polygon': + o ? V.pointList(this.zr, e, t, i, n) : V.polygon(this.zr, e, t, i, n) + break + case'ribbon': + V.ribbon(this.zr, e, t, i, n) + break + case'gauge-pointer': + V.gaugePointer(this.zr, e, t, i, n) + break + case'mark-line': + V.markline(this.zr, e, t, i, n) + break + case'bezier-curve': + case'line': + V.line(this.zr, e, t, i, n) + break + default: + this.zr.addShape(t) + } + }, animationMark: function (e, t, i) { + for (var i = i || this.shapeList, n = 0, a = i.length; a > n; n++) i[n]._mark && this._animateMod(!1, i[n], e, t, 0, !0) + this.animationEffect(i) + }, animationEffect: function (e) { + if (!e && this.clearEffectShape(), e = e || this.shapeList, null != e) { + var t = h.EFFECT_ZLEVEL + this.canvasSupported && this.zr.modLayer(t, { + motionBlur: !0, + lastFrameAlpha: this.option.effectBlendAlpha || h.effectBlendAlpha + }) + for (var i, n = 0, a = e.length; a > n; n++) i = e[n], i._mark && i.effect && i.effect.show && U[i._mark] && (U[i._mark](this.zr, this.effectList, i, t), this.effectList[this.effectList.length - 1]._mark = i._mark) + } + }, clearEffectShape: function (e) { + var t = this.effectList + if (this.zr && t && t.length > 0) { + e && this.zr.modLayer(h.EFFECT_ZLEVEL, { motionBlur: !1 }), this.zr.delShape(t) + for (var i = 0; i < t.length; i++) t[i].effectAnimator && t[i].effectAnimator.stop() + } + this.effectList = [] + }, addMark: function (e, t, i) { + var n = this.series[e] + if (this.selectedMap[n.name]) { + var a = this.query(this.option, 'animationDurationUpdate'), + o = this.query(this.option, 'animationEasing'), r = n[i].data, s = this.shapeList.length + if (n[i].data = t.data, this['_build' + i.replace('m', 'M')](e), this.option.animation && !this.option.renderAsImage) this.animationMark(a, o, this.shapeList.slice(s)) else { + for (var l = s, h = this.shapeList.length; h > l; l++) this.zr.addShape(this.shapeList[l]) + this.zr.refreshNextFrame() + } + n[i].data = r + } + }, delMark: function (e, t, i) { + i = i.replace('mark', '').replace('large', '').toLowerCase() + var n = this.series[e] + if (this.selectedMap[n.name]) { + for (var a = !1, o = [this.shapeList, this.effectList], r = 2; r--;) for (var s = 0, l = o[r].length; l > s; s++) if (o[r][s]._mark == i && m.get(o[r][s], 'seriesIndex') == e && m.get(o[r][s], 'name') == t) { + this.zr.delShape(o[r][s].id), o[r].splice(s, 1), a = !0 + break + } + a && this.zr.refreshNextFrame() + } + } + }, u.inherits(i, p), i + }), i('zrender/shape/Circle', ['require', './Base', '../tool/util'], function (e) { + 'use strict' + var t = e('./Base'), i = function (e) { + t.call(this, e) + } + return i.prototype = { + type: 'circle', buildPath: function (e, t) { + e.moveTo(t.x + t.r, t.y), e.arc(t.x, t.y, t.r, 0, 2 * Math.PI, !0) + }, getRect: function (e) { + if (e.__rect) return e.__rect + var t + return t = 'stroke' == e.brushType || 'fill' == e.brushType ? e.lineWidth || 1 : 0, e.__rect = { + x: Math.round(e.x - e.r - t / 2), + y: Math.round(e.y - e.r - t / 2), + width: 2 * e.r + t, + height: 2 * e.r + t + }, e.__rect + } + }, e('../tool/util').inherits(i, t), i + }), i('echarts/util/accMath', [], function () { + function e (e, t) { + var i = e.toString(), n = t.toString(), a = 0 + try { + a = n.split('.')[1].length + } catch (o) { + } + try { + a -= i.split('.')[1].length + } catch (o) { + } + return (i.replace('.', '') - 0) / (n.replace('.', '') - 0) * Math.pow(10, a) + } + + function t (e, t) { + var i = e.toString(), n = t.toString(), a = 0 + try { + a += i.split('.')[1].length + } catch (o) { + } + try { + a += n.split('.')[1].length + } catch (o) { + } + return (i.replace('.', '') - 0) * (n.replace('.', '') - 0) / Math.pow(10, a) + } + + function i (e, t) { + var i = 0, n = 0 + try { + i = e.toString().split('.')[1].length + } catch (a) { + } + try { + n = t.toString().split('.')[1].length + } catch (a) { + } + var o = Math.pow(10, Math.max(i, n)) + return (Math.round(e * o) + Math.round(t * o)) / o + } + + function n (e, t) { + return i(e, -t) + } + + return { accDiv: e, accMul: t, accAdd: i, accSub: n } + }), i('echarts/util/shape/Icon', ['require', 'zrender/tool/util', 'zrender/shape/Star', 'zrender/shape/Heart', 'zrender/shape/Droplet', 'zrender/shape/Image', 'zrender/shape/Base'], function (e) { + function t (e, t) { + var i = t.x, n = t.y, a = t.width / 16, o = t.height / 16 + e.moveTo(i, n + t.height), e.lineTo(i + 5 * a, n + 14 * o), e.lineTo(i + t.width, n + 3 * o), e.lineTo(i + 13 * a, n), e.lineTo(i + 2 * a, n + 11 * o), e.lineTo(i, n + t.height), e.moveTo(i + 6 * a, n + 10 * o), e.lineTo(i + 14 * a, n + 2 * o), e.moveTo(i + 10 * a, n + 13 * o), e.lineTo(i + t.width, n + 13 * o), e.moveTo(i + 13 * a, n + 10 * o), e.lineTo(i + 13 * a, n + t.height) + } + + function i (e, t) { + var i = t.x, n = t.y, a = t.width / 16, o = t.height / 16 + e.moveTo(i, n + t.height), e.lineTo(i + 5 * a, n + 14 * o), e.lineTo(i + t.width, n + 3 * o), e.lineTo(i + 13 * a, n), e.lineTo(i + 2 * a, n + 11 * o), e.lineTo(i, n + t.height), e.moveTo(i + 6 * a, n + 10 * o), e.lineTo(i + 14 * a, n + 2 * o), e.moveTo(i + 10 * a, n + 13 * o), e.lineTo(i + t.width, n + 13 * o) + } + + function n (e, t) { + var i = t.x, n = t.y, a = t.width / 16, o = t.height / 16 + e.moveTo(i + 4 * a, n + 15 * o), e.lineTo(i + 9 * a, n + 13 * o), e.lineTo(i + 14 * a, n + 8 * o), e.lineTo(i + 11 * a, n + 5 * o), e.lineTo(i + 6 * a, n + 10 * o), e.lineTo(i + 4 * a, n + 15 * o), e.moveTo(i + 5 * a, n), e.lineTo(i + 11 * a, n), e.moveTo(i + 5 * a, n + o), e.lineTo(i + 11 * a, n + o), e.moveTo(i, n + 2 * o), e.lineTo(i + t.width, n + 2 * o), e.moveTo(i, n + 5 * o), e.lineTo(i + 3 * a, n + t.height), e.lineTo(i + 13 * a, n + t.height), e.lineTo(i + t.width, n + 5 * o) + } + + function a (e, t) { + var i = t.x, n = t.y, a = t.width / 16, o = t.height / 16 + e.moveTo(i, n + 3 * o), e.lineTo(i + 6 * a, n + 3 * o), e.moveTo(i + 3 * a, n), e.lineTo(i + 3 * a, n + 6 * o), e.moveTo(i + 3 * a, n + 8 * o), e.lineTo(i + 3 * a, n + t.height), e.lineTo(i + t.width, n + t.height), e.lineTo(i + t.width, n + 3 * o), e.lineTo(i + 8 * a, n + 3 * o) + } + + function o (e, t) { + var i = t.x, n = t.y, a = t.width / 16, o = t.height / 16 + e.moveTo(i + 6 * a, n), e.lineTo(i + 2 * a, n + 3 * o), e.lineTo(i + 6 * a, n + 6 * o), e.moveTo(i + 2 * a, n + 3 * o), e.lineTo(i + 14 * a, n + 3 * o), e.lineTo(i + 14 * a, n + 11 * o), e.moveTo(i + 2 * a, n + 5 * o), e.lineTo(i + 2 * a, n + 13 * o), e.lineTo(i + 14 * a, n + 13 * o), e.moveTo(i + 10 * a, n + 10 * o), e.lineTo(i + 14 * a, n + 13 * o), e.lineTo(i + 10 * a, n + t.height) + } + + function r (e, t) { + var i = t.x, n = t.y, a = t.width / 16, o = t.height / 16, r = t.width / 2 + e.lineWidth = 1.5, e.arc(i + r, n + r, r - a, 0, 2 * Math.PI / 3), e.moveTo(i + 3 * a, n + t.height), e.lineTo(i + 0 * a, n + 12 * o), e.lineTo(i + 5 * a, n + 11 * o), e.moveTo(i, n + 8 * o), e.arc(i + r, n + r, r - a, Math.PI, 5 * Math.PI / 3), e.moveTo(i + 13 * a, n), e.lineTo(i + t.width, n + 4 * o), e.lineTo(i + 11 * a, n + 5 * o) + } + + function s (e, t) { + var i = t.x, n = t.y, a = t.width / 16, o = t.height / 16 + e.moveTo(i, n), e.lineTo(i, n + t.height), e.lineTo(i + t.width, n + t.height), e.moveTo(i + 2 * a, n + 14 * o), e.lineTo(i + 7 * a, n + 6 * o), e.lineTo(i + 11 * a, n + 11 * o), e.lineTo(i + 15 * a, n + 2 * o) + } + + function l (e, t) { + var i = t.x, n = t.y, a = t.width / 16, o = t.height / 16 + e.moveTo(i, n), e.lineTo(i, n + t.height), e.lineTo(i + t.width, n + t.height), e.moveTo(i + 3 * a, n + 14 * o), e.lineTo(i + 3 * a, n + 6 * o), e.lineTo(i + 4 * a, n + 6 * o), e.lineTo(i + 4 * a, n + 14 * o), e.moveTo(i + 7 * a, n + 14 * o), e.lineTo(i + 7 * a, n + 2 * o), e.lineTo(i + 8 * a, n + 2 * o), e.lineTo(i + 8 * a, n + 14 * o), e.moveTo(i + 11 * a, n + 14 * o), e.lineTo(i + 11 * a, n + 9 * o), e.lineTo(i + 12 * a, n + 9 * o), e.lineTo(i + 12 * a, n + 14 * o) + } + + function h (e, t) { + var i = t.x, n = t.y, a = t.width - 2, o = t.height - 2, r = Math.min(a, o) / 2 + n += 2, e.moveTo(i + r + 3, n + r - 3), e.arc(i + r + 3, n + r - 3, r - 1, 0, -Math.PI / 2, !0), e.lineTo(i + r + 3, n + r - 3), e.moveTo(i + r, n), e.lineTo(i + r, n + r), e.arc(i + r, n + r, r, -Math.PI / 2, 2 * Math.PI, !0), e.lineTo(i + r, n + r), e.lineWidth = 1.5 + } + + function m (e, t) { + var i = t.x, n = t.y, a = t.width / 16, o = t.height / 16 + n -= o, e.moveTo(i + 1 * a, n + 2 * o), e.lineTo(i + 15 * a, n + 2 * o), e.lineTo(i + 14 * a, n + 3 * o), e.lineTo(i + 2 * a, n + 3 * o), e.moveTo(i + 3 * a, n + 6 * o), e.lineTo(i + 13 * a, n + 6 * o), e.lineTo(i + 12 * a, n + 7 * o), e.lineTo(i + 4 * a, n + 7 * o), e.moveTo(i + 5 * a, n + 10 * o), e.lineTo(i + 11 * a, n + 10 * o), e.lineTo(i + 10 * a, n + 11 * o), e.lineTo(i + 6 * a, n + 11 * o), e.moveTo(i + 7 * a, n + 14 * o), e.lineTo(i + 9 * a, n + 14 * o), e.lineTo(i + 8 * a, n + 15 * o), e.lineTo(i + 7 * a, n + 15 * o) + } + + function V (e, t) { + var i = t.x, n = t.y, a = t.width, o = t.height, r = a / 16, s = o / 16, l = 2 * Math.min(r, s) + e.moveTo(i + r + l, n + s + l), e.arc(i + r, n + s, l, Math.PI / 4, 3 * Math.PI), e.lineTo(i + 7 * r - l, n + 6 * s - l), e.arc(i + 7 * r, n + 6 * s, l, Math.PI / 4 * 5, 4 * Math.PI), e.arc(i + 7 * r, n + 6 * s, l / 2, Math.PI / 4 * 5, 4 * Math.PI), e.moveTo(i + 7 * r - l / 2, n + 6 * s + l), e.lineTo(i + r + l, n + 14 * s - l), e.arc(i + r, n + 14 * s, l, -Math.PI / 4, 2 * Math.PI), e.moveTo(i + 7 * r + l / 2, n + 6 * s), e.lineTo(i + 14 * r - l, n + 10 * s - l / 2), e.moveTo(i + 16 * r, n + 10 * s), e.arc(i + 14 * r, n + 10 * s, l, 0, 3 * Math.PI), e.lineWidth = 1.5 + } + + function U (e, t) { + var i = t.x, n = t.y, a = t.width, o = t.height, r = Math.min(a, o) / 2 + e.moveTo(i + a, n + o / 2), e.arc(i + r, n + r, r, 0, 2 * Math.PI), e.arc(i + r, n, r, Math.PI / 4, Math.PI / 5 * 4), e.arc(i, n + r, r, -Math.PI / 3, Math.PI / 3), e.arc(i + a, n + o, r, Math.PI, Math.PI / 2 * 3), e.lineWidth = 1.5 + } + + function d (e, t) { + for (var i = t.x, n = t.y, a = t.width, o = t.height, r = Math.round(o / 3), s = Math.round((r - 2) / 2), l = 3; l--;) e.rect(i, n + r * l + s, a, 2) + } + + function p (e, t) { + for (var i = t.x, n = t.y, a = t.width, o = t.height, r = Math.round(a / 3), s = Math.round((r - 2) / 2), l = 3; l--;) e.rect(i + r * l + s, n, 2, o) + } + + function c (e, t) { + var i = t.x, n = t.y, a = t.width / 16 + e.moveTo(i + a, n), e.lineTo(i + a, n + t.height), e.lineTo(i + 15 * a, n + t.height), e.lineTo(i + 15 * a, n), e.lineTo(i + a, n), e.moveTo(i + 3 * a, n + 3 * a), e.lineTo(i + 13 * a, n + 3 * a), e.moveTo(i + 3 * a, n + 6 * a), e.lineTo(i + 13 * a, n + 6 * a), e.moveTo(i + 3 * a, n + 9 * a), e.lineTo(i + 13 * a, n + 9 * a), e.moveTo(i + 3 * a, n + 12 * a), e.lineTo(i + 9 * a, n + 12 * a) + } + + function u (e, t) { + var i = t.x, n = t.y, a = t.width / 16, o = t.height / 16 + e.moveTo(i, n), e.lineTo(i, n + t.height), e.lineTo(i + t.width, n + t.height), e.lineTo(i + t.width, n), e.lineTo(i, n), e.moveTo(i + 4 * a, n), e.lineTo(i + 4 * a, n + 8 * o), e.lineTo(i + 12 * a, n + 8 * o), e.lineTo(i + 12 * a, n), e.moveTo(i + 6 * a, n + 11 * o), e.lineTo(i + 6 * a, n + 13 * o), e.lineTo(i + 10 * a, n + 13 * o), e.lineTo(i + 10 * a, n + 11 * o), e.lineTo(i + 6 * a, n + 11 * o) + } + + function y (e, t) { + var i = t.x, n = t.y, a = t.width, o = t.height + e.moveTo(i, n + o / 2), e.lineTo(i + a, n + o / 2), e.moveTo(i + a / 2, n), e.lineTo(i + a / 2, n + o) + } + + function g (e, t) { + var i = t.width / 2, n = t.height / 2, a = Math.min(i, n) + e.moveTo(t.x + i + a, t.y + n), e.arc(t.x + i, t.y + n, a, 0, 2 * Math.PI), e.closePath() + } + + function b (e, t) { + e.rect(t.x, t.y, t.width, t.height), e.closePath() + } + + function f (e, t) { + var i = t.width / 2, n = t.height / 2, a = t.x + i, o = t.y + n, r = Math.min(i, n) + e.moveTo(a, o - r), e.lineTo(a + r, o + r), e.lineTo(a - r, o + r), e.lineTo(a, o - r), e.closePath() + } + + function k (e, t) { + var i = t.width / 2, n = t.height / 2, a = t.x + i, o = t.y + n, r = Math.min(i, n) + e.moveTo(a, o - r), e.lineTo(a + r, o), e.lineTo(a, o + r), e.lineTo(a - r, o), e.lineTo(a, o - r), e.closePath() + } + + function x (e, t) { + var i = t.x, n = t.y, a = t.width / 16 + e.moveTo(i + 8 * a, n), e.lineTo(i + a, n + t.height), e.lineTo(i + 8 * a, n + t.height / 4 * 3), e.lineTo(i + 15 * a, n + t.height), e.lineTo(i + 8 * a, n), e.closePath() + } + + function _ (t, i) { + var n = e('zrender/shape/Star'), a = i.width / 2, o = i.height / 2 + n.prototype.buildPath(t, { x: i.x + a, y: i.y + o, r: Math.min(a, o), n: i.n || 5 }) + } + + function L (t, i) { + var n = e('zrender/shape/Heart') + n.prototype.buildPath(t, { x: i.x + i.width / 2, y: i.y + .2 * i.height, a: i.width / 2, b: .8 * i.height }) + } + + function W (t, i) { + var n = e('zrender/shape/Droplet') + n.prototype.buildPath(t, { x: i.x + .5 * i.width, y: i.y + .5 * i.height, a: .5 * i.width, b: .8 * i.height }) + } + + function X (e, t) { + var i = t.x, n = t.y - t.height / 2 * 1.5, a = t.width / 2, o = t.height / 2, r = Math.min(a, o) + e.arc(i + a, n + o, r, Math.PI / 5 * 4, Math.PI / 5), e.lineTo(i + a, n + o + 1.5 * r), e.closePath() + } + + function v (t, i, n) { + var a = e('zrender/shape/Image') + this._imageShape = this._imageShape || new a({ style: {} }) + for (var o in i) this._imageShape.style[o] = i[o] + this._imageShape.brush(t, !1, n) + } + + function w (e) { + I.call(this, e) + } + + var K = e('zrender/tool/util'), I = e('zrender/shape/Base') + return w.prototype = { + type: 'icon', + iconLibrary: { + mark: t, + markUndo: i, + markClear: n, + dataZoom: a, + dataZoomReset: o, + restore: r, + lineChart: s, + barChart: l, + pieChart: h, + funnelChart: m, + forceChart: V, + chordChart: U, + stackChart: d, + tiledChart: p, + dataView: c, + saveAsImage: u, + cross: y, + circle: g, + rectangle: b, + triangle: f, + diamond: k, + arrow: x, + star: _, + heart: L, + droplet: W, + pin: X, + image: v + }, + brush: function (t, i, n) { + var a = i ? this.highlightStyle : this.style + a = a || {} + var o = a.iconType || this.style.iconType + if ('image' === o) { + var r = e('zrender/shape/Image') + r.prototype.brush.call(this, t, i, n) + } else { + var a = this.beforeBrush(t, i) + switch (t.beginPath(), this.buildPath(t, a, n), a.brushType) { + case'both': + t.fill() + case'stroke': + a.lineWidth > 0 && t.stroke() + break + default: + t.fill() + } + this.drawText(t, a, this.style), this.afterBrush(t) + } + }, + buildPath: function (e, t, i) { + this.iconLibrary[t.iconType] ? this.iconLibrary[t.iconType].call(this, e, t, i) : (e.moveTo(t.x, t.y), e.lineTo(t.x + t.width, t.y), e.lineTo(t.x + t.width, t.y + t.height), e.lineTo(t.x, t.y + t.height), e.lineTo(t.x, t.y), e.closePath()) + }, + getRect: function (e) { + return e.__rect ? e.__rect : (e.__rect = { + x: Math.round(e.x), + y: Math.round(e.y - ('pin' == e.iconType ? e.height / 2 * 1.5 : 0)), + width: e.width, + height: e.height * ('pin' === e.iconType ? 1.25 : 1) + }, e.__rect) + }, + isCover: function (e, t) { + var i = this.transformCoordToLocal(e, t) + e = i[0], t = i[1] + var n = this.style.__rect + n || (n = this.style.__rect = this.getRect(this.style)) + var a = n.height < 8 || n.width < 8 ? 4 : 0 + return e >= n.x - a && e <= n.x + n.width + a && t >= n.y - a && t <= n.y + n.height + a + } + }, K.inherits(w, I), w + }), i('echarts/util/shape/MarkLine', ['require', 'zrender/shape/Base', './Icon', 'zrender/shape/Line', 'zrender/shape/BezierCurve', 'zrender/tool/area', 'zrender/shape/util/dashedLineTo', 'zrender/tool/util', 'zrender/tool/curve'], function (e) { + function t (e) { + i.call(this, e), this.style.curveness > 0 && this.updatePoints(this.style), this.highlightStyle.curveness > 0 && this.updatePoints(this.highlightStyle) + } + + var i = e('zrender/shape/Base'), n = e('./Icon'), a = e('zrender/shape/Line'), o = new a({}), + r = e('zrender/shape/BezierCurve'), s = new r({}), l = e('zrender/tool/area'), + h = e('zrender/shape/util/dashedLineTo'), m = e('zrender/tool/util'), V = e('zrender/tool/curve') + return t.prototype = { + type: 'mark-line', brush: function (e, t) { + var i = this.style + t && (i = this.getHighlightStyle(i, this.highlightStyle || {})), e.save(), this.setContext(e, i), this.setTransform(e), e.save(), e.beginPath(), this.buildPath(e, i), e.stroke(), e.restore(), this.brushSymbol(e, i, 0), this.brushSymbol(e, i, 1), this.drawText(e, i, this.style), e.restore() + }, buildPath: function (e, t) { + var i = t.lineType || 'solid' + if (e.moveTo(t.xStart, t.yStart), t.curveness > 0) { + var n = null + switch (i) { + case'dashed': + n = [5, 5] + break + case'dotted': + n = [1, 1] + } + n && e.setLineDash && e.setLineDash(n), e.quadraticCurveTo(t.cpX1, t.cpY1, t.xEnd, t.yEnd) + } else if ('solid' == i) e.lineTo(t.xEnd, t.yEnd) else { + var a = (t.lineWidth || 1) * ('dashed' == t.lineType ? 5 : 1) + h(e, t.xStart, t.yStart, t.xEnd, t.yEnd, a) + } + }, updatePoints: function (e) { + var t = e.curveness || 0, i = 1, n = e.xStart, a = e.yStart, o = e.xEnd, r = e.yEnd, + s = (n + o) / 2 - i * (a - r) * t, l = (a + r) / 2 - i * (o - n) * t + e.cpX1 = s, e.cpY1 = l + }, brushSymbol: function (e, t, i) { + if ('none' != t.symbol[i]) { + e.save(), e.beginPath(), e.lineWidth = t.symbolBorder, e.strokeStyle = t.symbolBorderColor + var a = t.symbol[i].replace('empty', '').toLowerCase() + t.symbol[i].match('empty') && (e.fillStyle = '#fff') + var o = t.xStart, r = t.yStart, s = t.xEnd, l = t.yEnd, h = 0 === i ? o : s, m = 0 === i ? r : l, + U = t.curveness || 0, d = null != t.symbolRotate[i] ? t.symbolRotate[i] - 0 : 0 + if (d = d / 180 * Math.PI, 'arrow' == a && 0 === d) if (0 === U) { + var p = 0 === i ? -1 : 1 + d = Math.PI / 2 + Math.atan2(p * (l - r), p * (s - o)) + } else { + var c = t.cpX1, u = t.cpY1, y = V.quadraticDerivativeAt, g = y(o, c, s, i), b = y(r, u, l, i) + d = Math.PI / 2 + Math.atan2(b, g) + } + e.translate(h, m), 0 !== d && e.rotate(d) + var f = t.symbolSize[i] + n.prototype.buildPath(e, { + x: -f, + y: -f, + width: 2 * f, + height: 2 * f, + iconType: a + }), e.closePath(), e.fill(), e.stroke(), e.restore() + } + }, getRect: function (e) { + return e.curveness > 0 ? s.getRect(e) : o.getRect(e), e.__rect + }, isCover: function (e, t) { + var i = this.transformCoordToLocal(e, t) + return e = i[0], t = i[1], this.isCoverRect(e, t) ? this.style.curveness > 0 ? l.isInside(s, this.style, e, t) : l.isInside(o, this.style, e, t) : !1 + } + }, m.inherits(t, i), t + }), i('echarts/util/shape/Symbol', ['require', 'zrender/shape/Base', 'zrender/shape/Polygon', 'zrender/tool/util', './normalIsCover'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('zrender/shape/Base'), n = e('zrender/shape/Polygon'), a = new n({}), o = e('zrender/tool/util') + return t.prototype = { + type: 'symbol', buildPath: function (e, t) { + var i = t.pointList, n = i.length + if (0 !== n) for (var a, o, r, s, l, h = 1e4, m = Math.ceil(n / h), V = i[0] instanceof Array, U = t.size ? t.size : 2, d = U, p = U / 2, c = 2 * Math.PI, u = 0; m > u; u++) { + e.beginPath(), a = u * h, o = a + h, o = o > n ? n : o + for (var y = a; o > y; y++) if (t.random && (r = t['randomMap' + y % 20] / 100, d = U * r * r, p = d / 2), V ? (s = i[y][0], l = i[y][1]) : (s = i[y].x, l = i[y].y), 3 > d) e.rect(s - p, l - p, d, d) else switch (t.iconType) { + case'circle': + e.moveTo(s, l), e.arc(s, l, p, 0, c, !0) + break + case'diamond': + e.moveTo(s, l - p), e.lineTo(s + p / 3, l - p / 3), e.lineTo(s + p, l), e.lineTo(s + p / 3, l + p / 3), e.lineTo(s, l + p), e.lineTo(s - p / 3, l + p / 3), e.lineTo(s - p, l), e.lineTo(s - p / 3, l - p / 3), e.lineTo(s, l - p) + break + default: + e.rect(s - p, l - p, d, d) + } + if (e.closePath(), m - 1 > u) switch (t.brushType) { + case'both': + e.fill(), t.lineWidth > 0 && e.stroke() + break + case'stroke': + t.lineWidth > 0 && e.stroke() + break + default: + e.fill() + } + } + }, getRect: function (e) { + return e.__rect || a.getRect(e) + }, isCover: e('./normalIsCover') + }, o.inherits(t, i), t + }), i('zrender/shape/Polyline', ['require', './Base', './util/smoothSpline', './util/smoothBezier', './util/dashedLineTo', './Polygon', '../tool/util'], function (e) { + var t = e('./Base'), i = e('./util/smoothSpline'), n = e('./util/smoothBezier'), a = e('./util/dashedLineTo'), + o = function (e) { + this.brushTypeOnly = 'stroke', this.textPosition = 'end', t.call(this, e) + } + return o.prototype = { + type: 'polyline', buildPath: function (e, t) { + var n = t.pointList + if (!(n.length < 2)) { + var o = Math.min(t.pointList.length, Math.round(t.pointListLength || t.pointList.length)) + if (t.smooth && 'spline' !== t.smooth) { + t.controlPointList || this.updateControlPoints(t) + var r = t.controlPointList + e.moveTo(n[0][0], n[0][1]) + for (var s, l, h, m = 0; o - 1 > m; m++) s = r[2 * m], l = r[2 * m + 1], h = n[m + 1], e.bezierCurveTo(s[0], s[1], l[0], l[1], h[0], h[1]) + } else if ('spline' === t.smooth && (n = i(n), o = n.length), t.lineType && 'solid' != t.lineType) { + if ('dashed' == t.lineType || 'dotted' == t.lineType) { + var V = (t.lineWidth || 1) * ('dashed' == t.lineType ? 5 : 1) + e.moveTo(n[0][0], n[0][1]) + for (var m = 1; o > m; m++) a(e, n[m - 1][0], n[m - 1][1], n[m][0], n[m][1], V) + } + } else { + e.moveTo(n[0][0], n[0][1]) + for (var m = 1; o > m; m++) e.lineTo(n[m][0], n[m][1]) + } + } + }, updateControlPoints: function (e) { + e.controlPointList = n(e.pointList, e.smooth, !1, e.smoothConstraint) + }, getRect: function (t) { + return e('./Polygon').prototype.getRect(t) + } + }, e('../tool/util').inherits(o, t), o + }), i('zrender/shape/ShapeBundle', ['require', './Base', '../tool/util'], function (e) { + var t = e('./Base'), i = function (e) { + t.call(this, e) + } + return i.prototype = { + constructor: i, type: 'shape-bundle', brush: function (e, t) { + var i = this.beforeBrush(e, t) + e.beginPath() + for (var n = 0; n < i.shapeList.length; n++) { + var a = i.shapeList[n], o = a.style + t && (o = a.getHighlightStyle(o, a.highlightStyle || {}, a.brushTypeOnly)), a.buildPath(e, o) + } + switch (i.brushType) { + case'both': + e.fill() + case'stroke': + i.lineWidth > 0 && e.stroke() + break + default: + e.fill() + } + this.drawText(e, i, this.style), this.afterBrush(e) + }, getRect: function (e) { + if (e.__rect) return e.__rect + for (var t = 1 / 0, i = -(1 / 0), n = 1 / 0, a = -(1 / 0), o = 0; o < e.shapeList.length; o++) var r = e.shapeList[o], s = r.getRect(r.style), t = Math.min(s.x, t), n = Math.min(s.y, n), i = Math.max(s.x + s.width, i), a = Math.max(s.y + s.height, a); + return e.__rect = { x: t, y: n, width: i - t, height: a - n }, e.__rect + }, isCover: function (e, t) { + var i = this.transformCoordToLocal(e, t) + if (e = i[0], t = i[1], this.isCoverRect(e, t)) for (var n = 0; n < this.style.shapeList.length; n++) { + var a = this.style.shapeList[n] + if (a.isCover(e, t)) return !0 + } + return !1 + } + }, e('../tool/util').inherits(i, t), i + }), i('echarts/util/ecAnimation', ['require', 'zrender/tool/util', 'zrender/tool/curve', 'zrender/shape/Polygon'], function (e) { + function t (e, t, i, n, a) { + var o, r = i.style.pointList, s = r.length + if (!t) { + if (o = [], 'vertical' != i._orient) for (var l = r[0][1], h = 0; s > h; h++) o[h] = [r[h][0], l] else for (var m = r[0][0], h = 0; s > h; h++) o[h] = [m, r[h][1]] + 'half-smooth-polygon' == i.type && (o[s - 1] = p.clone(r[s - 1]), o[s - 2] = p.clone(r[s - 2])), t = { style: { pointList: o } } + } + o = t.style.pointList + var V = o.length + i.style.pointList = V == s ? o : s > V ? o.concat(r.slice(V)) : o.slice(0, s), e.addShape(i), i.__animating = !0, e.animate(i.id, 'style').when(n, { pointList: r }).during(function () { + i.updateControlPoints && i.updateControlPoints(i.style) + }).done(function () { + i.__animating = !1 + }).start(a) + } + + function i (e, t) { + for (var i = arguments.length, n = 2; i > n; n++) { + var a = arguments[n] + e.style[a] = t.style[a] + } + } + + function n (e, t, n, a, o) { + var r = n.style + t || (t = { + position: n.position, + style: { + x: r.x, + y: 'vertical' == n._orient ? r.y + r.height : r.y, + width: 'vertical' == n._orient ? r.width : 0, + height: 'vertical' != n._orient ? r.height : 0 + } + }) + var s = r.x, l = r.y, h = r.width, m = r.height, V = [n.position[0], n.position[1]] + i(n, t, 'x', 'y', 'width', 'height'), n.position = t.position, e.addShape(n), (V[0] != t.position[0] || V[1] != t.position[1]) && e.animate(n.id, '').when(a, { position: V }).start(o), n.__animating = !0, e.animate(n.id, 'style').when(a, { + x: s, + y: l, + width: h, + height: m + }).done(function () { + n.__animating = !1 + }).start(o) + } + + function a (e, t, i, n, a) { + if (!t) { + var o = i.style.y + t = { style: { y: [o[0], o[0], o[0], o[0]] } } + } + var r = i.style.y + i.style.y = t.style.y, e.addShape(i), i.__animating = !0, e.animate(i.id, 'style').when(n, { y: r }).done(function () { + i.__animating = !1 + }).start(a) + } + + function o (e, t, i, n, a) { + var o = i.style.x, r = i.style.y, s = i.style.r0, l = i.style.r + i.__animating = !0, 'r' != i._animationAdd ? (i.style.r0 = 0, i.style.r = 0, i.rotation = [2 * Math.PI, o, r], e.addShape(i), e.animate(i.id, 'style').when(n, { + r0: s, + r: l + }).done(function () { + i.__animating = !1 + }).start(a), e.animate(i.id, '').when(n, { rotation: [0, o, r] }).start(a)) : (i.style.r0 = i.style.r, e.addShape(i), e.animate(i.id, 'style').when(n, { r0: s }).done(function () { + i.__animating = !1 + }).start(a)) + } + + function r (e, t, n, a, o) { + t || (t = 'r' != n._animationAdd ? { + style: { startAngle: n.style.startAngle, endAngle: n.style.startAngle } + } : { style: { r0: n.style.r } }) + var r = n.style.startAngle, s = n.style.endAngle + i(n, t, 'startAngle', 'endAngle'), e.addShape(n), n.__animating = !0, e.animate(n.id, 'style').when(a, { + startAngle: r, + endAngle: s + }).done(function () { + n.__animating = !1 + }).start(o) + } + + function s (e, t, n, a, o) { + t || (t = { style: { x: 'left' == n.style.textAlign ? n.style.x + 100 : n.style.x - 100, y: n.style.y } }) + var r = n.style.x, s = n.style.y + i(n, t, 'x', 'y'), e.addShape(n), n.__animating = !0, e.animate(n.id, 'style').when(a, { + x: r, + y: s + }).done(function () { + n.__animating = !1 + }).start(o) + } + + function l (t, i, n, a, o) { + var r = e('zrender/shape/Polygon').prototype.getRect(n.style), s = r.x + r.width / 2, + l = r.y + r.height / 2 + n.scale = [.1, .1, s, l], t.addShape(n), n.__animating = !0, t.animate(n.id, '').when(a, { scale: [1, 1, s, l] }).done(function () { + n.__animating = !1 + }).start(o) + } + + function h (e, t, n, a, o) { + t || (t = { + style: { + source0: 0, + source1: n.style.source1 > 0 ? 360 : -360, + target0: 0, + target1: n.style.target1 > 0 ? 360 : -360 + } + }) + var r = n.style.source0, s = n.style.source1, l = n.style.target0, h = n.style.target1 + t.style && i(n, t, 'source0', 'source1', 'target0', 'target1'), e.addShape(n), n.__animating = !0, e.animate(n.id, 'style').when(a, { + source0: r, + source1: s, + target0: l, + target1: h + }).done(function () { + n.__animating = !1 + }).start(o) + } + + function m (e, t, i, n, a) { + t || (t = { style: { angle: i.style.startAngle } }) + var o = i.style.angle + i.style.angle = t.style.angle, e.addShape(i), i.__animating = !0, e.animate(i.id, 'style').when(n, { angle: o }).done(function () { + i.__animating = !1 + }).start(a) + } + + function V (e, t, i, a, o, r) { + if (i.style._x = i.style.x, i.style._y = i.style.y, i.style._width = i.style.width, i.style._height = i.style.height, t) n(e, t, i, a, o) else { + var s = i._x || 0, l = i._y || 0 + i.scale = [.01, .01, s, l], e.addShape(i), i.__animating = !0, e.animate(i.id, '').delay(r).when(a, { scale: [1, 1, s, l] }).done(function () { + i.__animating = !1 + }).start(o || 'QuinticOut') + } + } + + function U (e, t, n, a, o) { + t || (t = { + style: { + xStart: n.style.xStart, + yStart: n.style.yStart, + xEnd: n.style.xStart, + yEnd: n.style.yStart + } + }) + var r = n.style.xStart, s = n.style.xEnd, l = n.style.yStart, h = n.style.yEnd + i(n, t, 'xStart', 'xEnd', 'yStart', 'yEnd'), e.addShape(n), n.__animating = !0, e.animate(n.id, 'style').when(a, { + xStart: r, + xEnd: s, + yStart: l, + yEnd: h + }).done(function () { + n.__animating = !1 + }).start(o) + } + + function d (e, t, i, n, a) { + a = a || 'QuinticOut', i.__animating = !0, e.addShape(i) + var o = i.style, r = function () { + i.__animating = !1 + }, s = o.xStart, l = o.yStart, h = o.xEnd, m = o.yEnd + if (o.curveness > 0) { + i.updatePoints(o) + var V = { p: 0 }, U = o.cpX1, d = o.cpY1, p = [], u = [], y = c.quadraticSubdivide + e.animation.animate(V).when(n, { p: 1 }).during(function () { + y(s, U, h, V.p, p), y(l, d, m, V.p, u), o.cpX1 = p[1], o.cpY1 = u[1], o.xEnd = p[2], o.yEnd = u[2], e.modShape(i) + }).done(r).start(a) + } else e.animate(i.id, 'style').when(0, { xEnd: s, yEnd: l }).when(n, { xEnd: h, yEnd: m }).done(r).start(a) + } + + var p = e('zrender/tool/util'), c = e('zrender/tool/curve') + return { + pointList: t, + rectangle: n, + candle: a, + ring: o, + sector: r, + text: s, + polygon: l, + ribbon: h, + gaugePointer: m, + icon: V, + line: U, + markline: d + } + }), i('echarts/util/ecEffect', ['require', '../util/ecData', 'zrender/shape/Circle', 'zrender/shape/Image', 'zrender/tool/curve', '../util/shape/Icon', '../util/shape/Symbol', 'zrender/shape/ShapeBundle', 'zrender/shape/Polyline', 'zrender/tool/vector', 'zrender/tool/env'], function (e) { + function t (e, t, i, n) { + var a, r = i.effect, l = r.color || i.style.strokeColor || i.style.color, m = r.shadowColor || l, + V = r.scaleSize, U = r.bounceDistance, d = 'undefined' != typeof r.shadowBlur ? r.shadowBlur : V + 'image' !== i.type ? (a = new h({ + zlevel: n, + style: { + brushType: 'stroke', + iconType: 'droplet' != i.style.iconType ? i.style.iconType : 'circle', + x: d + 1, + y: d + 1, + n: i.style.n, + width: i.style._width * V, + height: i.style._height * V, + lineWidth: 1, + strokeColor: l, + shadowColor: m, + shadowBlur: d + }, + draggable: !1, + hoverable: !1 + }), 'pin' == i.style.iconType && (a.style.y += a.style.height / 2 * 1.5), p && (a.style.image = e.shapeToImage(a, a.style.width + 2 * d + 2, a.style.height + 2 * d + 2).style.image, a = new s({ + zlevel: a.zlevel, + style: a.style, + draggable: !1, + hoverable: !1 + }))) : a = new s({ + zlevel: n, + style: i.style, + draggable: !1, + hoverable: !1 + }), o.clone(i, a), a.position = i.position, t.push(a), e.addShape(a) + var c = 'image' !== i.type ? window.devicePixelRatio || 1 : 1, u = (a.style.width / c - i.style._width) / 2 + a.style.x = i.style._x - u, a.style.y = i.style._y - u, 'pin' == i.style.iconType && (a.style.y -= i.style.height / 2 * 1.5) + var y = 100 * (r.period + 10 * Math.random()) + e.modShape(i.id, { invisible: !0 }) + var g = a.style.x + a.style.width / 2 / c, b = a.style.y + a.style.height / 2 / c + 'scale' === r.type ? (e.modShape(a.id, { scale: [.1, .1, g, b] }), e.animate(a.id, '', r.loop).when(y, { scale: [1, 1, g, b] }).done(function () { + i.effect.show = !1, e.delShape(a.id) + }).start()) : e.animate(a.id, 'style', r.loop).when(y, { y: a.style.y - U }).when(2 * y, { y: a.style.y }).done(function () { + i.effect.show = !1, e.delShape(a.id) + }).start() + } + + function i (e, t, i, n) { + var a = i.effect, o = a.color || i.style.strokeColor || i.style.color, r = a.scaleSize, + s = a.shadowColor || o, l = 'undefined' != typeof a.shadowBlur ? a.shadowBlur : 2 * r, + h = window.devicePixelRatio || 1, V = new m({ + zlevel: n, + position: i.position, + scale: i.scale, + style: { + pointList: i.style.pointList, + iconType: i.style.iconType, + color: o, + strokeColor: o, + shadowColor: s, + shadowBlur: l * h, + random: !0, + brushType: 'fill', + lineWidth: 1, + size: i.style.size + }, + draggable: !1, + hoverable: !1 + }) + t.push(V), e.addShape(V), e.modShape(i.id, { invisible: !0 }) + for (var U = Math.round(100 * a.period), d = {}, p = {}, c = 0; 20 > c; c++) V.style['randomMap' + c] = 0, d = {}, d['randomMap' + c] = 100, p = {}, p['randomMap' + c] = 0, V.style['randomMap' + c] = 100 * Math.random(), e.animate(V.id, 'style', !0).when(U, d).when(2 * U, p).when(3 * U, d).when(4 * U, d).delay(Math.random() * U * c).start() + } + + function n (e, t, i, n, a) { + var s = i.effect, h = i.style, m = s.color || h.strokeColor || h.color, + V = s.shadowColor || h.strokeColor || m, c = h.lineWidth * s.scaleSize, + u = 'undefined' != typeof s.shadowBlur ? s.shadowBlur : c, y = new r({ + zlevel: n, + style: { x: u, y: u, r: c, color: m, shadowColor: V, shadowBlur: u }, + hoverable: !1 + }), g = 0 + if (p && !a) { + var n = y.zlevel + y = e.shapeToImage(y, 2 * (c + u), 2 * (c + u)), y.zlevel = n, y.hoverable = !1, g = u + } + a || (o.clone(i, y), y.position = i.position, t.push(y), e.addShape(y)) + var b = function () { + a || (i.effect.show = !1, e.delShape(y.id)), y.effectAnimator = null + } + if (i instanceof U) { + for (var f = [0], k = 0, x = h.pointList, _ = h.controlPointList, L = 1; L < x.length; L++) { + if (_) { + var W = _[2 * (L - 1)], X = _[2 * (L - 1) + 1] + k += d.dist(x[L - 1], W) + d.dist(W, X) + d.dist(X, x[L]) + } else k += d.dist(x[L - 1], x[L]) + f.push(k) + } + for (var v = { p: 0 }, w = e.animation.animate(v, { loop: s.loop }), L = 0; L < f.length; L++) w.when(f[L] * s.period, { p: L }) + w.during(function () { + var t, i, n = Math.floor(v.p) + if (n == x.length - 1) t = x[n][0], i = x[n][1] else { + var o = v.p - n, r = x[n], s = x[n + 1] + if (_) { + var h = _[2 * n], m = _[2 * n + 1] + t = l.cubicAt(r[0], h[0], m[0], s[0], o), i = l.cubicAt(r[1], h[1], m[1], s[1], o) + } else t = (s[0] - r[0]) * o + r[0], i = (s[1] - r[1]) * o + r[1] + } + y.style.x = t, y.style.y = i, a || e.modShape(y) + }).done(b).start(), w.duration = k * s.period, y.effectAnimator = w + } else { + var K = h.xStart - g, I = h.yStart - g, J = h.xEnd - g, C = h.yEnd - g + y.style.x = K, y.style.y = I + var S = (J - K) * (J - K) + (C - I) * (C - I), + E = Math.round(Math.sqrt(Math.round(S * s.period * s.period))) + if (i.style.curveness > 0) { + var F = h.cpX1 - g, T = h.cpY1 - g + y.effectAnimator = e.animation.animate(y, { loop: s.loop }).when(E, { p: 1 }).during(function (t, i) { + y.style.x = l.quadraticAt(K, F, J, i), y.style.y = l.quadraticAt(I, T, C, i), a || e.modShape(y) + }).done(b).start() + } else y.effectAnimator = e.animation.animate(y.style, { loop: s.loop }).when(E, { + x: J, + y: C + }).during(function () { + a || e.modShape(y) + }).done(b).start() + y.effectAnimator.duration = E + } + return y + } + + function a (e, t, i, a) { + var o = new V({ style: { shapeList: [] }, zlevel: a, hoverable: !1 }), r = i.style.shapeList, s = i.effect + o.position = i.position + for (var l = 0, h = [], m = 0; m < r.length; m++) { + r[m].effect = s + var U = n(e, null, r[m], a, !0), d = U.effectAnimator + o.style.shapeList.push(U), d.duration > l && (l = d.duration), 0 === m && (o.style.color = U.style.color, o.style.shadowBlur = U.style.shadowBlur, o.style.shadowColor = U.style.shadowColor), h.push(d) + } + t.push(o), e.addShape(o) + var p = function () { + for (var e = 0; e < h.length; e++) h[e].stop() + } + if (l) { + o.__dummy = 0 + var c = e.animate(o.id, '', s.loop).when(l, { __dummy: 1 }).during(function () { + e.modShape(o) + }).done(function () { + i.effect.show = !1, e.delShape(o.id) + }).start(), u = c.stop + c.stop = function () { + p(), u.call(this) + } + } + } + + var o = e('../util/ecData'), r = e('zrender/shape/Circle'), s = e('zrender/shape/Image'), + l = e('zrender/tool/curve'), h = e('../util/shape/Icon'), m = e('../util/shape/Symbol'), + V = e('zrender/shape/ShapeBundle'), U = e('zrender/shape/Polyline'), d = e('zrender/tool/vector'), + p = e('zrender/tool/env').canvasSupported + return { point: t, largePoint: i, line: n, largeLine: a } + }), i('echarts/component/base', ['require', '../config', '../util/ecData', '../util/ecQuery', '../util/number', 'zrender/tool/util', 'zrender/tool/env'], function (e) { + function t (e, t, a, o, r) { + this.ecTheme = e, this.messageCenter = t, this.zr = a, this.option = o, this.series = o.series, this.myChart = r, this.component = r.component, this.shapeList = [], this.effectList = [] + var s = this + s._onlegendhoverlink = function (e) { + if (s.legendHoverLink) for (var t, a = e.target, o = s.shapeList.length - 1; o >= 0; o--) t = s.type == i.CHART_TYPE_PIE || s.type == i.CHART_TYPE_FUNNEL ? n.get(s.shapeList[o], 'name') : (n.get(s.shapeList[o], 'series') || {}).name, t != a || s.shapeList[o].invisible || s.shapeList[o].__animating || s.zr.addHoverShape(s.shapeList[o]) + }, t && t.bind(i.EVENT.LEGEND_HOVERLINK, this._onlegendhoverlink) + } + + var i = e('../config'), n = e('../util/ecData'), a = e('../util/ecQuery'), o = e('../util/number'), + r = e('zrender/tool/util') + return t.prototype = { + canvasSupported: e('zrender/tool/env').canvasSupported, + _getZ: function (e) { + if (null != this[e]) return this[e] + var t = this.ecTheme[this.type] + return t && null != t[e] ? t[e] : (t = i[this.type], t && null != t[e] ? t[e] : 0) + }, + getZlevelBase: function () { + return this._getZ('zlevel') + }, + getZBase: function () { + return this._getZ('z') + }, + reformOption: function (e) { + return e = r.merge(r.merge(e || {}, r.clone(this.ecTheme[this.type] || {})), r.clone(i[this.type] || {})), this.z = e.z, this.zlevel = e.zlevel, e + }, + reformCssArray: function (e) { + if (!(e instanceof Array)) return [e, e, e, e] + switch (e.length + '') { + case'4': + return e + case'3': + return [e[0], e[1], e[2], e[1]] + case'2': + return [e[0], e[1], e[0], e[1]] + case'1': + return [e[0], e[0], e[0], e[0]] + case'0': + return [0, 0, 0, 0] + } + }, + getShapeById: function (e) { + for (var t = 0, i = this.shapeList.length; i > t; t++) if (this.shapeList[t].id === e) return this.shapeList[t] + return null + }, + getFont: function (e) { + var t = this.getTextStyle(r.clone(e)) + return t.fontStyle + ' ' + t.fontWeight + ' ' + t.fontSize + 'px ' + t.fontFamily + }, + getTextStyle: function (e) { + return r.merge(r.merge(e || {}, this.ecTheme.textStyle), i.textStyle) + }, + getItemStyleColor: function (e, t, i, n) { + return 'function' == typeof e ? e.call(this.myChart, { + seriesIndex: t, + series: this.series[t], + dataIndex: i, + data: n + }) : e + }, + getDataFromOption: function (e, t) { + return null != e ? null != e.value ? e.value : e : t + }, + subPixelOptimize: function (e, t) { + return e = t % 2 === 1 ? Math.floor(e) + .5 : Math.round(e) + }, + resize: function () { + this.refresh && this.refresh(), this.clearEffectShape && this.clearEffectShape(!0) + var e = this + setTimeout(function () { + e.animationEffect && e.animationEffect() + }, 200) + }, + clear: function () { + this.clearEffectShape && this.clearEffectShape(), this.zr && this.zr.delShape(this.shapeList), this.shapeList = [] + }, + dispose: function () { + this.onbeforDispose && this.onbeforDispose(), this.clear(), this.shapeList = null, this.effectList = null, this.messageCenter && this.messageCenter.unbind(i.EVENT.LEGEND_HOVERLINK, this._onlegendhoverlink), this.onafterDispose && this.onafterDispose() + }, + query: a.query, + deepQuery: a.deepQuery, + deepMerge: a.deepMerge, + parsePercent: o.parsePercent, + parseCenter: o.parseCenter, + parseRadius: o.parseRadius, + numAddCommas: o.addCommas, + getPrecision: o.getPrecision + }, t + }), i('echarts/layout/EdgeBundling', ['require', '../data/KDTree', 'zrender/tool/vector'], function (e) { + function t (e, t) { + e = e.array, t = t.array + var i = t[0] - e[0], n = t[1] - e[1], a = t[2] - e[2], o = t[3] - e[3] + return i * i + n * n + a * a + o * o + } + + function i (e) { + this.points = [e.mp0, e.mp1], this.group = e + } + + function n (e) { + var t = e.points + t[0][1] < t[1][1] || e instanceof i ? (this.array = [t[0][0], t[0][1], t[1][0], t[1][1]], this._startPoint = t[0], this._endPoint = t[1]) : (this.array = [t[1][0], t[1][1], t[0][0], t[0][1]], this._startPoint = t[1], this._endPoint = t[0]), this.ink = m(t[0], t[1]), this.edge = e, this.group = null + } + + function a () { + this.edgeList = [], this.mp0 = l(), this.mp1 = l(), this.ink = 0 + } + + function o () { + this.maxNearestEdge = 6, this.maxTurningAngle = Math.PI / 4, this.maxIteration = 20 + } + + var r = e('../data/KDTree'), s = e('zrender/tool/vector'), l = s.create, h = s.distSquare, m = s.dist, + V = s.copy, U = s.clone + return n.prototype.getStartPoint = function () { + return this._startPoint + }, n.prototype.getEndPoint = function () { + return this._endPoint + }, a.prototype.addEdge = function (e) { + e.group = this, this.edgeList.push(e) + }, a.prototype.removeEdge = function (e) { + e.group = null, this.edgeList.splice(this.edgeList.indexOf(e), 1) + }, o.prototype = { + constructor: o, run: function (e) { + function t (e, t) { + return h(e, t) < 1e-10 + } + + function n (e, i) { + for (var n = [], a = 0, o = 0; o < e.length; o++) a > 0 && t(e[o], n[a - 1]) || (n[a++] = U(e[o])) + return i[0] && !t(n[0], i[0]) && (n = n.reverse()), n + } + + for (var a = this._iterate(e), o = 0; o++ < this.maxIteration;) { + for (var r = [], s = 0; s < a.groups.length; s++) r.push(new i(a.groups[s])) + var l = this._iterate(r) + if (l.savedInk <= 0) break + a = l + } + var m = [], V = function (e, t) { + for (var a, o = 0; o < e.length; o++) { + var r = e[o] + if (r.edgeList[0] && r.edgeList[0].edge instanceof i) { + for (var s = [], l = 0; l < r.edgeList.length; l++) s.push(r.edgeList[l].edge.group) + a = t ? t.slice() : [], a.unshift(r.mp0), a.push(r.mp1), V(s, a) + } else for (var l = 0; l < r.edgeList.length; l++) { + var h = r.edgeList[l] + a = t ? t.slice() : [], a.unshift(r.mp0), a.push(r.mp1), a.unshift(h.getStartPoint()), a.push(h.getEndPoint()), m.push({ + points: n(a, h.edge.points), + rawEdge: h.edge + }) + } + } + } + return V(a.groups), m + }, _iterate: function (e) { + for (var i = [], o = [], s = 0, h = 0; h < e.length; h++) { + var m = new n(e[h]) + i.push(m) + } + for (var U = new r(i, 4), d = [], p = l(), c = l(), u = 0, y = l(), g = l(), b = 0, h = 0; h < i.length; h++) { + var m = i[h] + if (!m.group) { + U.nearestN(m, this.maxNearestEdge, t, d) + for (var f = 0, k = null, x = null, _ = 0; _ < d.length; _++) { + var L = d[_], W = 0 + L.group ? L.group !== x && (x = L.group, u = this._calculateGroupEdgeInk(L.group, m, p, c), W = L.group.ink + m.ink - u) : (u = this._calculateEdgeEdgeInk(m, L, p, c), W = L.ink + m.ink - u), W > f && (f = W, k = L, V(g, c), V(y, p), b = u) + } + if (k) { + s += f + var X + k.group || (X = new a, o.push(X), X.addEdge(k)), X = k.group, V(X.mp0, y), V(X.mp1, g), X.ink = b, k.group.addEdge(m) + } else { + var X = new a + o.push(X), V(X.mp0, m.getStartPoint()), V(X.mp1, m.getEndPoint()), X.ink = m.ink, X.addEdge(m) + } + } + } + return { groups: o, edges: i, savedInk: s } + }, _calculateEdgeEdgeInk: function () { + var e = [], t = [] + return function (i, n, a, o) { + e[0] = i.getStartPoint(), e[1] = n.getStartPoint(), t[0] = i.getEndPoint(), t[1] = n.getEndPoint(), this._calculateMeetPoints(e, t, a, o) + var r = m(e[0], a) + m(a, o) + m(o, t[0]) + m(e[1], a) + m(o, t[1]) + return r + } + }(), _calculateGroupEdgeInk: function (e, t, i, n) { + for (var a = [], o = [], r = 0; r < e.edgeList.length; r++) { + var s = e.edgeList[r] + a.push(s.getStartPoint()), o.push(s.getEndPoint()) + } + a.push(t.getStartPoint()), o.push(t.getEndPoint()), this._calculateMeetPoints(a, o, i, n) + for (var l = m(i, n), r = 0; r < a.length; r++) l += m(a[r], i) + m(o[r], n) + return l + }, _calculateMeetPoints: function () { + var e = l(), t = l() + return function (i, n, a, o) { + s.set(e, 0, 0), s.set(t, 0, 0) + for (var r = i.length, l = 0; r > l; l++) s.add(e, e, i[l]) + s.scale(e, e, 1 / r), r = n.length + for (var l = 0; r > l; l++) s.add(t, t, n[l]) + s.scale(t, t, 1 / r), this._limitTurningAngle(i, e, t, a), this._limitTurningAngle(n, t, e, o) + } + }(), _limitTurningAngle: function () { + var e = l(), t = l(), i = l(), n = l() + return function (a, o, r, l) { + var V = Math.cos(this.maxTurningAngle), U = Math.tan(this.maxTurningAngle) + s.sub(e, o, r), s.normalize(e, e), s.copy(l, o) + for (var d = 0, p = 0; p < a.length; p++) { + var c = a[p] + s.sub(t, c, o) + var u = s.len(t) + s.scale(t, t, 1 / u) + var y = s.dot(t, e) + if (V > y) { + s.scaleAndAdd(i, o, e, u * y) + var g = m(i, c), b = g / U + s.scaleAndAdd(n, i, e, -b) + var f = h(n, o) + f > d && (d = f, s.copy(l, n)) + } + } + } + }() + }, o + }), i('zrender/shape/Star', ['require', '../tool/math', './Base', '../tool/util'], function (e) { + var t = e('../tool/math'), i = t.sin, n = t.cos, a = Math.PI, o = e('./Base'), r = function (e) { + o.call(this, e) + } + return r.prototype = { + type: 'star', buildPath: function (e, t) { + var o = t.n + if (o && !(2 > o)) { + var r = t.x, s = t.y, l = t.r, h = t.r0 + null == h && (h = o > 4 ? l * n(2 * a / o) / n(a / o) : l / 3) + var m = a / o, V = -a / 2, U = r + l * n(V), d = s + l * i(V) + V += m + var p = t.pointList = [] + p.push([U, d]) + for (var c, u = 0, y = 2 * o - 1; y > u; u++) c = u % 2 === 0 ? h : l, p.push([r + c * n(V), s + c * i(V)]), V += m + p.push([U, d]), e.moveTo(p[0][0], p[0][1]) + for (var u = 0; u < p.length; u++) e.lineTo(p[u][0], p[u][1]) + e.closePath() + } + }, getRect: function (e) { + if (e.__rect) return e.__rect + var t + return t = 'stroke' == e.brushType || 'fill' == e.brushType ? e.lineWidth || 1 : 0, e.__rect = { + x: Math.round(e.x - e.r - t / 2), + y: Math.round(e.y - e.r - t / 2), + width: 2 * e.r + t, + height: 2 * e.r + t + }, e.__rect + } + }, e('../tool/util').inherits(r, o), r + }), i('zrender/shape/Heart', ['require', './Base', './util/PathProxy', '../tool/area', '../tool/util'], function (e) { + 'use strict' + var t = e('./Base'), i = e('./util/PathProxy'), n = e('../tool/area'), a = function (e) { + t.call(this, e), this._pathProxy = new i + } + return a.prototype = { + type: 'heart', buildPath: function (e, t) { + var n = this._pathProxy || new i + n.begin(e), n.moveTo(t.x, t.y), n.bezierCurveTo(t.x + t.a / 2, t.y - 2 * t.b / 3, t.x + 2 * t.a, t.y + t.b / 3, t.x, t.y + t.b), n.bezierCurveTo(t.x - 2 * t.a, t.y + t.b / 3, t.x - t.a / 2, t.y - 2 * t.b / 3, t.x, t.y), n.closePath() + }, getRect: function (e) { + return e.__rect ? e.__rect : (this._pathProxy.isEmpty() || this.buildPath(null, e), this._pathProxy.fastBoundingRect()) + }, isCover: function (e, t) { + var i = this.transformCoordToLocal(e, t) + return e = i[0], t = i[1], this.isCoverRect(e, t) ? n.isInsidePath(this._pathProxy.pathCommands, this.style.lineWidth, this.style.brushType, e, t) : void 0 + } + }, e('../tool/util').inherits(a, t), a + }), i('zrender/shape/Droplet', ['require', './Base', './util/PathProxy', '../tool/area', '../tool/util'], function (e) { + 'use strict' + var t = e('./Base'), i = e('./util/PathProxy'), n = e('../tool/area'), a = function (e) { + t.call(this, e), this._pathProxy = new i + } + return a.prototype = { + type: 'droplet', buildPath: function (e, t) { + var n = this._pathProxy || new i + n.begin(e), n.moveTo(t.x, t.y + t.a), n.bezierCurveTo(t.x + t.a, t.y + t.a, t.x + 3 * t.a / 2, t.y - t.a / 3, t.x, t.y - t.b), n.bezierCurveTo(t.x - 3 * t.a / 2, t.y - t.a / 3, t.x - t.a, t.y + t.a, t.x, t.y + t.a), n.closePath() + }, getRect: function (e) { + return e.__rect ? e.__rect : (this._pathProxy.isEmpty() || this.buildPath(null, e), this._pathProxy.fastBoundingRect()) + }, isCover: function (e, t) { + var i = this.transformCoordToLocal(e, t) + return e = i[0], t = i[1], this.isCoverRect(e, t) ? n.isInsidePath(this._pathProxy.pathCommands, this.style.lineWidth, this.style.brushType, e, t) : void 0 + } + }, e('../tool/util').inherits(a, t), a + }), i('zrender/tool/math', [], function () { + function e (e, t) { + return Math.sin(t ? e * a : e) + } + + function t (e, t) { + return Math.cos(t ? e * a : e) + } + + function i (e) { + return e * a + } + + function n (e) { + return e / a + } + + var a = Math.PI / 180 + return { sin: e, cos: t, degreeToRadian: i, radianToDegree: n } + }), i('zrender/shape/util/PathProxy', ['require', '../../tool/vector'], function (e) { + var t = e('../../tool/vector'), i = function (e, t) { + this.command = e, this.points = t || null + }, n = function () { + this.pathCommands = [], this._ctx = null, this._min = [], this._max = [] + } + return n.prototype.fastBoundingRect = function () { + var e = this._min, i = this._max + e[0] = e[1] = 1 / 0, i[0] = i[1] = -(1 / 0) + for (var n = 0; n < this.pathCommands.length; n++) { + var a = this.pathCommands[n], o = a.points + switch (a.command) { + case'M': + t.min(e, e, o), t.max(i, i, o) + break + case'L': + t.min(e, e, o), t.max(i, i, o) + break + case'C': + for (var r = 0; 6 > r; r += 2) e[0] = Math.min(e[0], e[0], o[r]), e[1] = Math.min(e[1], e[1], o[r + 1]), i[0] = Math.max(i[0], i[0], o[r]), i[1] = Math.max(i[1], i[1], o[r + 1]) + break + case'Q': + for (var r = 0; 4 > r; r += 2) e[0] = Math.min(e[0], e[0], o[r]), e[1] = Math.min(e[1], e[1], o[r + 1]), i[0] = Math.max(i[0], i[0], o[r]), i[1] = Math.max(i[1], i[1], o[r + 1]) + break + case'A': + var s = o[0], l = o[1], h = o[2], m = o[3] + e[0] = Math.min(e[0], e[0], s - h), e[1] = Math.min(e[1], e[1], l - m), i[0] = Math.max(i[0], i[0], s + h), i[1] = Math.max(i[1], i[1], l + m) + } + } + return { x: e[0], y: e[1], width: i[0] - e[0], height: i[1] - e[1] } + }, n.prototype.begin = function (e) { + return this._ctx = e || null, this.pathCommands.length = 0, this + }, n.prototype.moveTo = function (e, t) { + return this.pathCommands.push(new i('M', [e, t])), this._ctx && this._ctx.moveTo(e, t), this + }, n.prototype.lineTo = function (e, t) { + return this.pathCommands.push(new i('L', [e, t])), this._ctx && this._ctx.lineTo(e, t), this + }, n.prototype.bezierCurveTo = function (e, t, n, a, o, r) { + return this.pathCommands.push(new i('C', [e, t, n, a, o, r])), this._ctx && this._ctx.bezierCurveTo(e, t, n, a, o, r), this + }, n.prototype.quadraticCurveTo = function (e, t, n, a) { + return this.pathCommands.push(new i('Q', [e, t, n, a])), this._ctx && this._ctx.quadraticCurveTo(e, t, n, a), this + }, n.prototype.arc = function (e, t, n, a, o, r) { + return this.pathCommands.push(new i('A', [e, t, n, n, a, o - a, 0, r ? 0 : 1])), this._ctx && this._ctx.arc(e, t, n, a, o, r), this + }, n.prototype.arcTo = function (e, t, i, n, a) { + return this._ctx && this._ctx.arcTo(e, t, i, n, a), this + }, n.prototype.rect = function (e, t, i, n) { + return this._ctx && this._ctx.rect(e, t, i, n), this + }, n.prototype.closePath = function () { + return this.pathCommands.push(new i('z')), this._ctx && this._ctx.closePath(), this + }, n.prototype.isEmpty = function () { + return 0 === this.pathCommands.length + }, n.PathSegment = i, n + }), i('zrender/shape/Line', ['require', './Base', './util/dashedLineTo', '../tool/util'], function (e) { + var t = e('./Base'), i = e('./util/dashedLineTo'), n = function (e) { + this.brushTypeOnly = 'stroke', this.textPosition = 'end', t.call(this, e) + } + return n.prototype = { + type: 'line', buildPath: function (e, t) { + if (t.lineType && 'solid' != t.lineType) { + if ('dashed' == t.lineType || 'dotted' == t.lineType) { + var n = (t.lineWidth || 1) * ('dashed' == t.lineType ? 5 : 1) + i(e, t.xStart, t.yStart, t.xEnd, t.yEnd, n) + } + } else e.moveTo(t.xStart, t.yStart), e.lineTo(t.xEnd, t.yEnd) + }, getRect: function (e) { + if (e.__rect) return e.__rect + var t = e.lineWidth || 1 + return e.__rect = { + x: Math.min(e.xStart, e.xEnd) - t, + y: Math.min(e.yStart, e.yEnd) - t, + width: Math.abs(e.xStart - e.xEnd) + t, + height: Math.abs(e.yStart - e.yEnd) + t + }, e.__rect + } + }, e('../tool/util').inherits(n, t), n + }), i('zrender/shape/BezierCurve', ['require', './Base', '../tool/util'], function (e) { + 'use strict' + var t = e('./Base'), i = function (e) { + this.brushTypeOnly = 'stroke', this.textPosition = 'end', t.call(this, e) + } + return i.prototype = { + type: 'bezier-curve', buildPath: function (e, t) { + e.moveTo(t.xStart, t.yStart), 'undefined' != typeof t.cpX2 && 'undefined' != typeof t.cpY2 ? e.bezierCurveTo(t.cpX1, t.cpY1, t.cpX2, t.cpY2, t.xEnd, t.yEnd) : e.quadraticCurveTo(t.cpX1, t.cpY1, t.xEnd, t.yEnd) + }, getRect: function (e) { + if (e.__rect) return e.__rect + var t = Math.min(e.xStart, e.xEnd, e.cpX1), i = Math.min(e.yStart, e.yEnd, e.cpY1), + n = Math.max(e.xStart, e.xEnd, e.cpX1), a = Math.max(e.yStart, e.yEnd, e.cpY1), o = e.cpX2, + r = e.cpY2 + 'undefined' != typeof o && 'undefined' != typeof r && (t = Math.min(t, o), i = Math.min(i, r), n = Math.max(n, o), a = Math.max(a, r)) + var s = e.lineWidth || 1 + return e.__rect = { x: t - s, y: i - s, width: n - t + s, height: a - i + s }, e.__rect + } + }, e('../tool/util').inherits(i, t), i + }), i('zrender/shape/util/dashedLineTo', [], function () { + var e = [5, 5] + return function (t, i, n, a, o, r) { + if (t.setLineDash) return e[0] = e[1] = r, t.setLineDash(e), t.moveTo(i, n), void t.lineTo(a, o) + r = 'number' != typeof r ? 5 : r + var s = a - i, l = o - n, h = Math.floor(Math.sqrt(s * s + l * l) / r) + s /= h, l /= h + for (var m = !0, V = 0; h > V; ++V) m ? t.moveTo(i, n) : t.lineTo(i, n), m = !m, i += s, n += l + t.lineTo(a, o) + } + }), i('zrender/shape/Polygon', ['require', './Base', './util/smoothSpline', './util/smoothBezier', './util/dashedLineTo', '../tool/util'], function (e) { + var t = e('./Base'), i = e('./util/smoothSpline'), n = e('./util/smoothBezier'), a = e('./util/dashedLineTo'), + o = function (e) { + t.call(this, e) + } + return o.prototype = { + type: 'polygon', buildPath: function (e, t) { + var o = t.pointList + if (!(o.length < 2)) { + if (t.smooth && 'spline' !== t.smooth) { + var r = n(o, t.smooth, !0, t.smoothConstraint) + e.moveTo(o[0][0], o[0][1]) + for (var s, l, h, m = o.length, V = 0; m > V; V++) s = r[2 * V], l = r[2 * V + 1], h = o[(V + 1) % m], e.bezierCurveTo(s[0], s[1], l[0], l[1], h[0], h[1]) + } else if ('spline' === t.smooth && (o = i(o, !0)), t.lineType && 'solid' != t.lineType) { + if ('dashed' == t.lineType || 'dotted' == t.lineType) { + var U = t._dashLength || (t.lineWidth || 1) * ('dashed' == t.lineType ? 5 : 1) + t._dashLength = U, e.moveTo(o[0][0], o[0][1]) + for (var V = 1, d = o.length; d > V; V++) a(e, o[V - 1][0], o[V - 1][1], o[V][0], o[V][1], U) + a(e, o[o.length - 1][0], o[o.length - 1][1], o[0][0], o[0][1], U) + } + } else { + e.moveTo(o[0][0], o[0][1]) + for (var V = 1, d = o.length; d > V; V++) e.lineTo(o[V][0], o[V][1]) + e.lineTo(o[0][0], o[0][1]) + } + e.closePath() + } + }, getRect: function (e) { + if (e.__rect) return e.__rect + for (var t = Number.MAX_VALUE, i = Number.MIN_VALUE, n = Number.MAX_VALUE, a = Number.MIN_VALUE, o = e.pointList, r = 0, s = o.length; s > r; r++) o[r][0] < t && (t = o[r][0]), o[r][0] > i && (i = o[r][0]), o[r][1] < n && (n = o[r][1]), o[r][1] > a && (a = o[r][1]) + var l + return l = 'stroke' == e.brushType || 'fill' == e.brushType ? e.lineWidth || 1 : 0, e.__rect = { + x: Math.round(t - l / 2), + y: Math.round(n - l / 2), + width: i - t + l, + height: a - n + l + }, e.__rect + } + }, e('../tool/util').inherits(o, t), o + }), i('echarts/util/shape/normalIsCover', [], function () { + return function (e, t) { + var i = this.transformCoordToLocal(e, t) + return e = i[0], t = i[1], this.isCoverRect(e, t) + } + }), i('zrender/shape/util/smoothSpline', ['require', '../../tool/vector'], function (e) { + function t (e, t, i, n, a, o, r) { + var s = .5 * (i - e), l = .5 * (n - t) + return (2 * (t - i) + s + l) * r + (-3 * (t - i) - 2 * s - l) * o + s * a + t + } + + var i = e('../../tool/vector') + return function (e, n) { + for (var a = e.length, o = [], r = 0, s = 1; a > s; s++) r += i.distance(e[s - 1], e[s]) + var l = r / 5 + l = a > l ? a : l + for (var s = 0; l > s; s++) { + var h, m, V, U = s / (l - 1) * (n ? a : a - 1), d = Math.floor(U), p = U - d, c = e[d % a] + n ? (h = e[(d - 1 + a) % a], m = e[(d + 1) % a], V = e[(d + 2) % a]) : (h = e[0 === d ? d : d - 1], m = e[d > a - 2 ? a - 1 : d + 1], V = e[d > a - 3 ? a - 1 : d + 2]) + var u = p * p, y = p * u + o.push([t(h[0], c[0], m[0], V[0], p, u, y), t(h[1], c[1], m[1], V[1], p, u, y)]) + } + return o + } + }), i('zrender/shape/util/smoothBezier', ['require', '../../tool/vector'], function (e) { + var t = e('../../tool/vector') + return function (e, i, n, a) { + var o, r, s, l, h = [], m = [], V = [], U = [], d = !!a + if (d) { + s = [1 / 0, 1 / 0], l = [-(1 / 0), -(1 / 0)] + for (var p = 0, c = e.length; c > p; p++) t.min(s, s, e[p]), t.max(l, l, e[p]) + t.min(s, s, a[0]), t.max(l, l, a[1]) + } + for (var p = 0, c = e.length; c > p; p++) { + var o, r, u = e[p] + if (n) o = e[p ? p - 1 : c - 1], r = e[(p + 1) % c] else { + if (0 === p || p === c - 1) { + h.push(t.clone(e[p])) + continue + } + o = e[p - 1], r = e[p + 1] + } + t.sub(m, r, o), t.scale(m, m, i) + var y = t.distance(u, o), g = t.distance(u, r), b = y + g + 0 !== b && (y /= b, g /= b), t.scale(V, m, -y), t.scale(U, m, g) + var f = t.add([], u, V), k = t.add([], u, U) + d && (t.max(f, f, s), t.min(f, f, l), t.max(k, k, s), t.min(k, k, l)), h.push(f), h.push(k) + } + return n && h.push(t.clone(h.shift())), h + } + }), i('echarts/util/ecQuery', ['require', 'zrender/tool/util'], function (e) { + function t (e, t) { + if ('undefined' != typeof e) { + if (!t) return e + t = t.split('.') + for (var i = t.length, n = 0; i > n;) { + if (e = e[t[n]], 'undefined' == typeof e) return + n++ + } + return e + } + } + + function i (e, i) { + for (var n, a = 0, o = e.length; o > a; a++) if (n = t(e[a], i), 'undefined' != typeof n) return n + } + + function n (e, i) { + for (var n, o = e.length; o--;) { + var r = t(e[o], i) + 'undefined' != typeof r && ('undefined' == typeof n ? n = a.clone(r) : a.merge(n, r, !0)) + } + return n + } + + var a = e('zrender/tool/util') + return { query: t, deepQuery: i, deepMerge: n } + }), i('echarts/util/number', [], function () { + function e (e) { + return e.replace(/^\s+/, '').replace(/\s+$/, '') + } + + function t (t, i) { + return 'string' == typeof t ? e(t).match(/%$/) ? parseFloat(t) / 100 * i : parseFloat(t) : t + } + + function i (e, i) { + return [t(i[0], e.getWidth()), t(i[1], e.getHeight())] + } + + function n (e, i) { + i instanceof Array || (i = [0, i]) + var n = Math.min(e.getWidth(), e.getHeight()) / 2 + return [t(i[0], n), t(i[1], n)] + } + + function a (e) { + return isNaN(e) ? '-' : (e = (e + '').split('.'), e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, '$1,') + (e.length > 1 ? '.' + e[1] : '')) + } + + function o (e) { + for (var t = 1, i = 0; Math.round(e * t) / t !== e;) t *= 10, i++ + return i + } + + return { parsePercent: t, parseCenter: i, parseRadius: n, addCommas: a, getPrecision: o } + }), i('echarts/data/KDTree', ['require', './quickSelect'], function (e) { + function t (e, t) { + this.left = null, this.right = null, this.axis = e, this.data = t + } + + var i = e('./quickSelect'), n = function (e, t) { + e.length && (t || (t = e[0].array.length), this.dimension = t, this.root = this._buildTree(e, 0, e.length - 1, 0), this._stack = [], this._nearstNList = []) + } + return n.prototype._buildTree = function (e, n, a, o) { + if (n > a) return null + var r = Math.floor((n + a) / 2) + r = i(e, n, a, r, function (e, t) { + return e.array[o] - t.array[o] + }) + var s = e[r], l = new t(o, s) + return o = (o + 1) % this.dimension, a > n && (l.left = this._buildTree(e, n, r - 1, o), l.right = this._buildTree(e, r + 1, a, o)), l + }, n.prototype.nearest = function (e, t) { + var i = this.root, n = this._stack, a = 0, o = 1 / 0, r = null + for (i.data !== e && (o = t(i.data, e), r = i), e.array[i.axis] < i.data.array[i.axis] ? (i.right && (n[a++] = i.right), i.left && (n[a++] = i.left)) : (i.left && (n[a++] = i.left), i.right && (n[a++] = i.right)); a--;) { + i = n[a] + var s = e.array[i.axis] - i.data.array[i.axis], l = 0 > s, h = !1 + s *= s, o > s && (s = t(i.data, e), o > s && i.data !== e && (o = s, r = i), h = !0), l ? (h && i.right && (n[a++] = i.right), i.left && (n[a++] = i.left)) : (h && i.left && (n[a++] = i.left), i.right && (n[a++] = i.right)) + } + return r.data + }, n.prototype._addNearest = function (e, t, i) { + for (var n = this._nearstNList, a = e - 1; a > 0 && !(t >= n[a - 1].dist); a--) n[a].dist = n[a - 1].dist, n[a].node = n[a - 1].node + n[a].dist = t, n[a].node = i + }, n.prototype.nearestN = function (e, t, i, n) { + if (0 >= t) return n.length = 0, n + for (var a = this.root, o = this._stack, r = 0, s = this._nearstNList, l = 0; t > l; l++) s[l] || (s[l] = {}), s[l].dist = 0, s[l].node = null + var h = i(a.data, e), m = 0 + for (a.data !== e && (m++, this._addNearest(m, h, a)), e.array[a.axis] < a.data.array[a.axis] ? (a.right && (o[r++] = a.right), a.left && (o[r++] = a.left)) : (a.left && (o[r++] = a.left), a.right && (o[r++] = a.right)); r--;) { + a = o[r] + var h = e.array[a.axis] - a.data.array[a.axis], V = 0 > h, U = !1 + h *= h, (t > m || h < s[m - 1].dist) && (h = i(a.data, e), (t > m || h < s[m - 1].dist) && a.data !== e && (t > m && m++, this._addNearest(m, h, a)), U = !0), V ? (U && a.right && (o[r++] = a.right), a.left && (o[r++] = a.left)) : (U && a.left && (o[r++] = a.left), a.right && (o[r++] = a.right)) + } + for (var l = 0; m > l; l++) n[l] = s[l].node.data + return n.length = m, n + }, n + }), i('echarts/data/quickSelect', ['require'], function () { + function e (e, t) { + return e - t + } + + function t (e, t, i) { + var n = e[t] + e[t] = e[i], e[i] = n + } + + function i (e, i, n, a, o) { + for (var r = i; n > i;) { + var r = Math.round((n + i) / 2), s = e[r] + t(e, r, n), r = i + for (var l = i; n - 1 >= l; l++) o(s, e[l]) >= 0 && (t(e, l, r), r++) + if (t(e, n, r), r === a) return r + a > r ? i = r + 1 : n = r - 1 + } + return i + } + + function n (t, n, a, o, r) { + return arguments.length <= 3 && (o = n, r = 2 == arguments.length ? e : a, n = 0, a = t.length - 1), i(t, n, a, o, r) + } + + return n + }), i('echarts/component/dataView', ['require', './base', '../config', 'zrender/tool/util', '../component'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.dom = o.dom, this._tDom = document.createElement('div'), this._textArea = document.createElement('textArea'), this._buttonRefresh = document.createElement('button'), this._buttonRefresh.setAttribute('type', 'button'), this._buttonClose = document.createElement('button'), this._buttonClose.setAttribute('type', 'button'), this._hasShow = !1, this._zrHeight = n.getHeight(), this._zrWidth = n.getWidth(), this._tDom.className = 'echarts-dataview', this.hide(), this.dom.firstChild.appendChild(this._tDom), window.addEventListener ? (this._tDom.addEventListener('click', this._stop), this._tDom.addEventListener('mousewheel', this._stop), this._tDom.addEventListener('mousemove', this._stop), this._tDom.addEventListener('mousedown', this._stop), this._tDom.addEventListener('mouseup', this._stop), this._tDom.addEventListener('touchstart', this._stop), this._tDom.addEventListener('touchmove', this._stop), this._tDom.addEventListener('touchend', this._stop)) : (this._tDom.attachEvent('onclick', this._stop), this._tDom.attachEvent('onmousewheel', this._stop), this._tDom.attachEvent('onmousemove', this._stop), this._tDom.attachEvent('onmousedown', this._stop), this._tDom.attachEvent('onmouseup', this._stop)) + } + + var i = e('./base'), n = e('../config'), a = e('zrender/tool/util') + return t.prototype = { + type: n.COMPONENT_TYPE_DATAVIEW, + _lang: ['Data View', 'close', 'refresh'], + _gCssText: 'position:absolute;display:block;overflow:hidden;transition:height 0.8s,background-color 1s;-moz-transition:height 0.8s,background-color 1s;-webkit-transition:height 0.8s,background-color 1s;-o-transition:height 0.8s,background-color 1s;z-index:1;left:0;top:0;', + hide: function () { + this._sizeCssText = 'width:' + this._zrWidth + 'px;height:0px;background-color:#f0ffff;', this._tDom.style.cssText = this._gCssText + this._sizeCssText + }, + show: function (e) { + this._hasShow = !0 + var t = this.query(this.option, 'toolbox.feature.dataView.lang') || this._lang + this.option = e, this._tDom.innerHTML = '

        ' + (t[0] || this._lang[0]) + '

        ' + var i = this.query(this.option, 'toolbox.feature.dataView.optionToContent') + 'function' != typeof i ? this._textArea.value = this._optionToContent() : (this._textArea = document.createElement('div'), this._textArea.innerHTML = i(this.option)), this._textArea.style.cssText = 'display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:' + (this._zrHeight - 100) + 'px;', this._tDom.appendChild(this._textArea), this._buttonClose.style.cssText = 'float:right;padding:1px 6px;', this._buttonClose.innerHTML = t[1] || this._lang[1] + var n = this + this._buttonClose.onclick = function () { + n.hide() + }, this._tDom.appendChild(this._buttonClose), this.query(this.option, 'toolbox.feature.dataView.readOnly') === !1 ? (this._buttonRefresh.style.cssText = 'float:right;margin-right:10px;padding:1px 6px;', this._buttonRefresh.innerHTML = t[2] || this._lang[2], this._buttonRefresh.onclick = function () { + n._save() + }, this._textArea.readOnly = !1, this._textArea.style.cursor = 'default') : (this._buttonRefresh.style.cssText = 'display:none', + this._textArea.readOnly = !0, this._textArea.style.cursor = 'text'), this._tDom.appendChild(this._buttonRefresh), this._sizeCssText = 'width:' + this._zrWidth + 'px;height:' + this._zrHeight + 'px;background-color:#fff;', this._tDom.style.cssText = this._gCssText + this._sizeCssText + }, + _optionToContent: function () { + var e, t, i, a, o, r, s = [], l = '' + if (this.option.xAxis) for (s = this.option.xAxis instanceof Array ? this.option.xAxis : [this.option.xAxis], e = 0, a = s.length; a > e; e++) if ('category' == (s[e].type || 'category')) { + for (r = [], t = 0, i = s[e].data.length; i > t; t++) r.push(this.getDataFromOption(s[e].data[t])) + l += r.join(', ') + '\n\n' + } + if (this.option.yAxis) for (s = this.option.yAxis instanceof Array ? this.option.yAxis : [this.option.yAxis], e = 0, a = s.length; a > e; e++) if ('category' == s[e].type) { + for (r = [], t = 0, i = s[e].data.length; i > t; t++) r.push(this.getDataFromOption(s[e].data[t])) + l += r.join(', ') + '\n\n' + } + var h, m = this.option.series + for (e = 0, a = m.length; a > e; e++) { + for (r = [], t = 0, i = m[e].data.length; i > t; t++) o = m[e].data[t], h = m[e].type == n.CHART_TYPE_PIE || m[e].type == n.CHART_TYPE_MAP ? (o.name || '-') + ':' : '', m[e].type == n.CHART_TYPE_SCATTER && (o = this.getDataFromOption(o).join(', ')), r.push(h + this.getDataFromOption(o)) + l += (m[e].name || '-') + ' : \n', l += r.join(m[e].type == n.CHART_TYPE_SCATTER ? '\n' : ', '), l += '\n\n' + } + return l + }, + _save: function () { + var e = this.query(this.option, 'toolbox.feature.dataView.contentToOption') + if ('function' != typeof e) { + for (var t = this._textArea.value.split('\n'), i = [], a = 0, o = t.length; o > a; a++) t[a] = this._trim(t[a]), '' !== t[a] && i.push(t[a]) + this._contentToOption(i) + } else e(this._textArea, this.option) + this.hide() + var r = this + setTimeout(function () { + r.messageCenter && r.messageCenter.dispatch(n.EVENT.DATA_VIEW_CHANGED, null, { option: r.option }, r.myChart) + }, r.canvasSupported ? 800 : 100) + }, + _contentToOption: function (e) { + var t, i, a, o, r, s, l, h = [], m = 0 + if (this.option.xAxis) for (h = this.option.xAxis instanceof Array ? this.option.xAxis : [this.option.xAxis], t = 0, o = h.length; o > t; t++) if ('category' == (h[t].type || 'category')) { + for (s = e[m].split(','), i = 0, a = h[t].data.length; a > i; i++) l = this._trim(s[i] || ''), r = h[t].data[i], 'undefined' != typeof h[t].data[i].value ? h[t].data[i].value = l : h[t].data[i] = l + m++ + } + if (this.option.yAxis) for (h = this.option.yAxis instanceof Array ? this.option.yAxis : [this.option.yAxis], t = 0, o = h.length; o > t; t++) if ('category' == h[t].type) { + for (s = e[m].split(','), i = 0, a = h[t].data.length; a > i; i++) l = this._trim(s[i] || ''), r = h[t].data[i], 'undefined' != typeof h[t].data[i].value ? h[t].data[i].value = l : h[t].data[i] = l + m++ + } + var V = this.option.series + for (t = 0, o = V.length; o > t; t++) if (m++, V[t].type == n.CHART_TYPE_SCATTER) for (var i = 0, a = V[t].data.length; a > i; i++) s = e[m], l = s.replace(' ', '').split(','), 'undefined' != typeof V[t].data[i].value ? V[t].data[i].value = l : V[t].data[i] = l, m++ else { + s = e[m].split(',') + for (var i = 0, a = V[t].data.length; a > i; i++) l = (s[i] || '').replace(/.*:/, ''), l = this._trim(l), l = '-' != l && '' !== l ? l - 0 : '-', 'undefined' != typeof V[t].data[i].value ? V[t].data[i].value = l : V[t].data[i] = l + m++ + } + }, + _trim: function (e) { + var t = new RegExp('(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)', 'g') + return e.replace(t, '') + }, + _stop: function (e) { + e = e || window.event, e.stopPropagation ? e.stopPropagation() : e.cancelBubble = !0 + }, + resize: function () { + this._zrHeight = this.zr.getHeight(), this._zrWidth = this.zr.getWidth(), this._tDom.offsetHeight > 10 && (this._sizeCssText = 'width:' + this._zrWidth + 'px;height:' + this._zrHeight + 'px;background-color:#fff;', this._tDom.style.cssText = this._gCssText + this._sizeCssText, this._textArea.style.cssText = 'display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:' + (this._zrHeight - 100) + 'px;') + }, + dispose: function () { + window.removeEventListener ? (this._tDom.removeEventListener('click', this._stop), this._tDom.removeEventListener('mousewheel', this._stop), this._tDom.removeEventListener('mousemove', this._stop), this._tDom.removeEventListener('mousedown', this._stop), this._tDom.removeEventListener('mouseup', this._stop), this._tDom.removeEventListener('touchstart', this._stop), this._tDom.removeEventListener('touchmove', this._stop), this._tDom.removeEventListener('touchend', this._stop)) : (this._tDom.detachEvent('onclick', this._stop), this._tDom.detachEvent('onmousewheel', this._stop), this._tDom.detachEvent('onmousemove', this._stop), this._tDom.detachEvent('onmousedown', this._stop), this._tDom.detachEvent('onmouseup', this._stop)), this._buttonRefresh.onclick = null, this._buttonClose.onclick = null, this._hasShow && (this._tDom.removeChild(this._textArea), this._tDom.removeChild(this._buttonRefresh), this._tDom.removeChild(this._buttonClose)), this._textArea = null, this._buttonRefresh = null, this._buttonClose = null, this.dom.firstChild.removeChild(this._tDom), this._tDom = null + } + }, a.inherits(t, i), e('../component').define('dataView', t), t + }), i('echarts/util/shape/Cross', ['require', 'zrender/shape/Base', 'zrender/shape/Line', 'zrender/tool/util', './normalIsCover'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('zrender/shape/Base'), n = e('zrender/shape/Line'), a = e('zrender/tool/util') + return t.prototype = { + type: 'cross', buildPath: function (e, t) { + var i = t.rect + t.xStart = i.x, t.xEnd = i.x + i.width, t.yStart = t.yEnd = t.y, n.prototype.buildPath(e, t), t.xStart = t.xEnd = t.x, t.yStart = i.y, t.yEnd = i.y + i.height, n.prototype.buildPath(e, t) + }, getRect: function (e) { + return e.rect + }, isCover: e('./normalIsCover') + }, a.inherits(t, i), t + }), i('zrender/shape/Sector', ['require', '../tool/math', '../tool/computeBoundingBox', '../tool/vector', './Base', '../tool/util'], function (e) { + var t = e('../tool/math'), i = e('../tool/computeBoundingBox'), n = e('../tool/vector'), a = e('./Base'), + o = n.create(), r = n.create(), s = n.create(), l = n.create(), h = function (e) { + a.call(this, e) + } + return h.prototype = { + type: 'sector', buildPath: function (e, i) { + var n = i.x, a = i.y, o = i.r0 || 0, r = i.r, s = i.startAngle, l = i.endAngle, h = i.clockWise || !1 + s = t.degreeToRadian(s), l = t.degreeToRadian(l), h || (s = -s, l = -l) + var m = t.cos(s), V = t.sin(s) + e.moveTo(m * o + n, V * o + a), e.lineTo(m * r + n, V * r + a), e.arc(n, a, r, s, l, !h), e.lineTo(t.cos(l) * o + n, t.sin(l) * o + a), 0 !== o && e.arc(n, a, o, l, s, h), e.closePath() + }, getRect: function (e) { + if (e.__rect) return e.__rect + var a = e.x, h = e.y, m = e.r0 || 0, V = e.r, U = t.degreeToRadian(e.startAngle), + d = t.degreeToRadian(e.endAngle), p = e.clockWise + return p || (U = -U, d = -d), m > 1 ? i.arc(a, h, m, U, d, !p, o, s) : (o[0] = s[0] = a, o[1] = s[1] = h), i.arc(a, h, V, U, d, !p, r, l), n.min(o, o, r), n.max(s, s, l), e.__rect = { + x: o[0], + y: o[1], + width: s[0] - o[0], + height: s[1] - o[1] + }, e.__rect + } + }, e('../tool/util').inherits(h, a), h + }), i('echarts/util/shape/Candle', ['require', 'zrender/shape/Base', 'zrender/tool/util', './normalIsCover'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('zrender/shape/Base'), n = e('zrender/tool/util') + return t.prototype = { + type: 'candle', _numberOrder: function (e, t) { + return t - e + }, buildPath: function (e, t) { + var i = n.clone(t.y).sort(this._numberOrder) + e.moveTo(t.x, i[3]), e.lineTo(t.x, i[2]), e.moveTo(t.x - t.width / 2, i[2]), e.rect(t.x - t.width / 2, i[2], t.width, i[1] - i[2]), e.moveTo(t.x, i[1]), e.lineTo(t.x, i[0]) + }, getRect: function (e) { + if (!e.__rect) { + var t = 0; + ('stroke' == e.brushType || 'fill' == e.brushType) && (t = e.lineWidth || 1) + var i = n.clone(e.y).sort(this._numberOrder) + e.__rect = { + x: Math.round(e.x - e.width / 2 - t / 2), + y: Math.round(i[3] - t / 2), + width: e.width + t, + height: i[0] - i[3] + t + } + } + return e.__rect + }, isCover: e('./normalIsCover') + }, n.inherits(t, i), t + }), i('zrender/tool/computeBoundingBox', ['require', './vector', './curve'], function (e) { + function t (e, t, i) { + if (0 !== e.length) { + for (var n = e[0][0], a = e[0][0], o = e[0][1], r = e[0][1], s = 1; s < e.length; s++) { + var l = e[s] + l[0] < n && (n = l[0]), l[0] > a && (a = l[0]), l[1] < o && (o = l[1]), l[1] > r && (r = l[1]) + } + t[0] = n, t[1] = o, i[0] = a, i[1] = r + } + } + + function i (e, t, i, n, a, r) { + var s = [] + o.cubicExtrema(e[0], t[0], i[0], n[0], s) + for (var l = 0; l < s.length; l++) s[l] = o.cubicAt(e[0], t[0], i[0], n[0], s[l]) + var h = [] + o.cubicExtrema(e[1], t[1], i[1], n[1], h) + for (var l = 0; l < h.length; l++) h[l] = o.cubicAt(e[1], t[1], i[1], n[1], h[l]) + s.push(e[0], n[0]), h.push(e[1], n[1]) + var m = Math.min.apply(null, s), V = Math.max.apply(null, s), U = Math.min.apply(null, h), + d = Math.max.apply(null, h) + a[0] = m, a[1] = U, r[0] = V, r[1] = d + } + + function n (e, t, i, n, a) { + var r = o.quadraticExtremum(e[0], t[0], i[0]), s = o.quadraticExtremum(e[1], t[1], i[1]) + r = Math.max(Math.min(r, 1), 0), s = Math.max(Math.min(s, 1), 0) + var l = 1 - r, h = 1 - s, m = l * l * e[0] + 2 * l * r * t[0] + r * r * i[0], + V = l * l * e[1] + 2 * l * r * t[1] + r * r * i[1], U = h * h * e[0] + 2 * h * s * t[0] + s * s * i[0], + d = h * h * e[1] + 2 * h * s * t[1] + s * s * i[1] + n[0] = Math.min(e[0], i[0], m, U), n[1] = Math.min(e[1], i[1], V, d), a[0] = Math.max(e[0], i[0], m, U), a[1] = Math.max(e[1], i[1], V, d) + } + + var a = e('./vector'), o = e('./curve'), r = a.create(), s = a.create(), l = a.create(), + h = function (e, t, i, n, o, h, m, V) { + if (Math.abs(n - o) >= 2 * Math.PI) return m[0] = e - i, m[1] = t - i, V[0] = e + i, void (V[1] = t + i) + if (r[0] = Math.cos(n) * i + e, r[1] = Math.sin(n) * i + t, s[0] = Math.cos(o) * i + e, s[1] = Math.sin(o) * i + t, a.min(m, r, s), a.max(V, r, s), n %= 2 * Math.PI, 0 > n && (n += 2 * Math.PI), o %= 2 * Math.PI, 0 > o && (o += 2 * Math.PI), n > o && !h ? o += 2 * Math.PI : o > n && h && (n += 2 * Math.PI), h) { + var U = o + o = n, n = U + } + for (var d = 0; o > d; d += Math.PI / 2) d > n && (l[0] = Math.cos(d) * i + e, l[1] = Math.sin(d) * i + t, a.min(m, l, m), a.max(V, l, V)) + } + return t.cubeBezier = i, t.quadraticBezier = n, t.arc = h, t + }), i('echarts/util/shape/Chain', ['require', 'zrender/shape/Base', './Icon', 'zrender/shape/util/dashedLineTo', 'zrender/tool/util', 'zrender/tool/matrix'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('zrender/shape/Base'), n = e('./Icon'), a = e('zrender/shape/util/dashedLineTo'), + o = e('zrender/tool/util'), r = e('zrender/tool/matrix') + return t.prototype = { + type: 'chain', brush: function (e, t) { + var i = this.style + t && (i = this.getHighlightStyle(i, this.highlightStyle || {})), e.save(), this.setContext(e, i), this.setTransform(e), e.save(), e.beginPath(), this.buildLinePath(e, i), e.stroke(), e.restore(), this.brushSymbol(e, i), e.restore() + }, buildLinePath: function (e, t) { + var i = t.x, n = t.y + 5, o = t.width, r = t.height / 2 - 10 + if (e.moveTo(i, n), e.lineTo(i, n + r), e.moveTo(i + o, n), e.lineTo(i + o, n + r), e.moveTo(i, n + r / 2), t.lineType && 'solid' != t.lineType) { + if ('dashed' == t.lineType || 'dotted' == t.lineType) { + var s = (t.lineWidth || 1) * ('dashed' == t.lineType ? 5 : 1) + a(e, i, n + r / 2, i + o, n + r / 2, s) + } + } else e.lineTo(i + o, n + r / 2) + }, brushSymbol: function (e, t) { + var i = t.y + t.height / 4 + e.save() + for (var a, o = t.chainPoint, r = 0, s = o.length; s > r; r++) { + if (a = o[r], 'none' != a.symbol) { + e.beginPath() + var l = a.symbolSize + n.prototype.buildPath(e, { + iconType: a.symbol, + x: a.x - l, + y: i - l, + width: 2 * l, + height: 2 * l, + n: a.n + }), e.fillStyle = a.isEmpty ? '#fff' : t.strokeColor, e.closePath(), e.fill(), e.stroke() + } + a.showLabel && (e.font = a.textFont, e.fillStyle = a.textColor, e.textAlign = a.textAlign, e.textBaseline = a.textBaseline, a.rotation ? (e.save(), this._updateTextTransform(e, a.rotation), e.fillText(a.name, a.textX, a.textY), e.restore()) : e.fillText(a.name, a.textX, a.textY)) + } + e.restore() + }, _updateTextTransform: function (e, t) { + var i = r.create() + if (r.identity(i), 0 !== t[0]) { + var n = t[1] || 0, a = t[2] || 0; + (n || a) && r.translate(i, i, [-n, -a]), r.rotate(i, i, t[0]), (n || a) && r.translate(i, i, [n, a]) + } + e.transform.apply(e, i) + }, isCover: function (e, t) { + var i = this.style + return e >= i.x && e <= i.x + i.width && t >= i.y && t <= i.y + i.height ? !0 : !1 + } + }, o.inherits(t, i), t + }), i('zrender/shape/Ring', ['require', './Base', '../tool/util'], function (e) { + var t = e('./Base'), i = function (e) { + t.call(this, e) + } + return i.prototype = { + type: 'ring', buildPath: function (e, t) { + e.arc(t.x, t.y, t.r, 0, 2 * Math.PI, !1), e.moveTo(t.x + t.r0, t.y), e.arc(t.x, t.y, t.r0, 0, 2 * Math.PI, !0) + }, getRect: function (e) { + if (e.__rect) return e.__rect + var t + return t = 'stroke' == e.brushType || 'fill' == e.brushType ? e.lineWidth || 1 : 0, e.__rect = { + x: Math.round(e.x - e.r - t / 2), + y: Math.round(e.y - e.r - t / 2), + width: 2 * e.r + t, + height: 2 * e.r + t + }, e.__rect + } + }, e('../tool/util').inherits(i, t), i + }), i('echarts/component/axis', ['require', './base', 'zrender/shape/Line', '../config', '../util/ecData', 'zrender/tool/util', 'zrender/tool/color', './categoryAxis', './valueAxis', '../component'], function (e) { + function t (e, t, n, a, o, r) { + i.call(this, e, t, n, a, o), this.axisType = r, this._axisList = [], this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Line'), a = e('../config'), o = e('../util/ecData'), + r = e('zrender/tool/util'), s = e('zrender/tool/color') + return t.prototype = { + type: a.COMPONENT_TYPE_AXIS, axisBase: { + _buildAxisLine: function () { + var e = this.option.axisLine.lineStyle.width, t = e / 2, i = { + _axisShape: 'axisLine', + zlevel: this.getZlevelBase(), + z: this.getZBase() + 3, + hoverable: !1 + }, a = this.grid + switch (this.option.position) { + case'left': + i.style = { + xStart: a.getX() - t, + yStart: a.getYend(), + xEnd: a.getX() - t, + yEnd: a.getY(), + lineCap: 'round' + } + break + case'right': + i.style = { + xStart: a.getXend() + t, + yStart: a.getYend(), + xEnd: a.getXend() + t, + yEnd: a.getY(), + lineCap: 'round' + } + break + case'bottom': + i.style = { + xStart: a.getX(), + yStart: a.getYend() + t, + xEnd: a.getXend(), + yEnd: a.getYend() + t, + lineCap: 'round' + } + break + case'top': + i.style = { + xStart: a.getX(), + yStart: a.getY() - t, + xEnd: a.getXend(), + yEnd: a.getY() - t, + lineCap: 'round' + } + } + var o = i.style + '' !== this.option.name && (o.text = this.option.name, o.textPosition = this.option.nameLocation, o.textFont = this.getFont(this.option.nameTextStyle), this.option.nameTextStyle.align && (o.textAlign = this.option.nameTextStyle.align), this.option.nameTextStyle.baseline && (o.textBaseline = this.option.nameTextStyle.baseline), this.option.nameTextStyle.color && (o.textColor = this.option.nameTextStyle.color)), o.strokeColor = this.option.axisLine.lineStyle.color, o.lineWidth = e, this.isHorizontal() ? o.yStart = o.yEnd = this.subPixelOptimize(o.yEnd, e) : o.xStart = o.xEnd = this.subPixelOptimize(o.xEnd, e), o.lineType = this.option.axisLine.lineStyle.type, i = new n(i), this.shapeList.push(i) + }, _axisLabelClickable: function (e, t) { + return e ? (o.pack(t, void 0, -1, void 0, -1, t.style.text), t.hoverable = !0, t.clickable = !0, t.highlightStyle = { + color: s.lift(t.style.color, 1), + brushType: 'fill' + }, t) : t + }, refixAxisShape: function (e, t) { + if (this.option.axisLine.onZero) { + var i + if (this.isHorizontal() && null != t) for (var n = 0, a = this.shapeList.length; a > n; n++) 'axisLine' === this.shapeList[n]._axisShape ? (this.shapeList[n].style.yStart = this.shapeList[n].style.yEnd = this.subPixelOptimize(t, this.shapeList[n].stylelineWidth), this.zr.modShape(this.shapeList[n].id)) : 'axisTick' === this.shapeList[n]._axisShape && (i = this.shapeList[n].style.yEnd - this.shapeList[n].style.yStart, this.shapeList[n].style.yStart = t - i, this.shapeList[n].style.yEnd = t, this.zr.modShape(this.shapeList[n].id)) + if (!this.isHorizontal() && null != e) for (var n = 0, a = this.shapeList.length; a > n; n++) 'axisLine' === this.shapeList[n]._axisShape ? (this.shapeList[n].style.xStart = this.shapeList[n].style.xEnd = this.subPixelOptimize(e, this.shapeList[n].stylelineWidth), this.zr.modShape(this.shapeList[n].id)) : 'axisTick' === this.shapeList[n]._axisShape && (i = this.shapeList[n].style.xEnd - this.shapeList[n].style.xStart, this.shapeList[n].style.xStart = e, this.shapeList[n].style.xEnd = e + i, this.zr.modShape(this.shapeList[n].id)) + } + }, getPosition: function () { + return this.option.position + }, isHorizontal: function () { + return 'bottom' === this.option.position || 'top' === this.option.position + } + }, reformOption: function (e) { + if (!e || e instanceof Array && 0 === e.length ? e = [{ type: a.COMPONENT_TYPE_AXIS_VALUE }] : e instanceof Array || (e = [e]), e.length > 2 && (e = [e[0], e[1]]), 'xAxis' === this.axisType) { + (!e[0].position || 'bottom' != e[0].position && 'top' != e[0].position) && (e[0].position = 'bottom'), e.length > 1 && (e[1].position = 'bottom' === e[0].position ? 'top' : 'bottom') + for (var t = 0, i = e.length; i > t; t++) e[t].type = e[t].type || 'category', e[t].xAxisIndex = t, e[t].yAxisIndex = -1 + } else { + (!e[0].position || 'left' != e[0].position && 'right' != e[0].position) && (e[0].position = 'left'), e.length > 1 && (e[1].position = 'left' === e[0].position ? 'right' : 'left') + for (var t = 0, i = e.length; i > t; t++) e[t].type = e[t].type || 'value', e[t].xAxisIndex = -1, e[t].yAxisIndex = t + } + return e + }, refresh: function (t) { + var i + t && (this.option = t, 'xAxis' === this.axisType ? (this.option.xAxis = this.reformOption(t.xAxis), i = this.option.xAxis) : (this.option.yAxis = this.reformOption(t.yAxis), i = this.option.yAxis), this.series = t.series) + for (var n = e('./categoryAxis'), a = e('./valueAxis'), o = Math.max(i && i.length || 0, this._axisList.length), r = 0; o > r; r++) !this._axisList[r] || !t || i[r] && this._axisList[r].type == i[r].type || (this._axisList[r].dispose && this._axisList[r].dispose(), this._axisList[r] = !1), this._axisList[r] ? this._axisList[r].refresh && this._axisList[r].refresh(i ? i[r] : !1, this.series) : i && i[r] && (this._axisList[r] = 'category' === i[r].type ? new n(this.ecTheme, this.messageCenter, this.zr, i[r], this.myChart, this.axisBase) : new a(this.ecTheme, this.messageCenter, this.zr, i[r], this.myChart, this.axisBase, this.series)) + }, getAxis: function (e) { + return this._axisList[e] + }, getAxisCount: function () { + return this._axisList.length + }, clear: function () { + for (var e = 0, t = this._axisList.length; t > e; e++) this._axisList[e].dispose && this._axisList[e].dispose() + this._axisList = [] + } + }, r.inherits(t, i), e('../component').define('axis', t), t + }), i('echarts/component/grid', ['require', './base', 'zrender/shape/Rectangle', '../config', 'zrender/tool/util', '../component'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Rectangle'), a = e('../config') + a.grid = { + zlevel: 0, + z: 0, + x: 80, + y: 60, + x2: 80, + y2: 60, + backgroundColor: 'rgba(0,0,0,0)', + borderWidth: 1, + borderColor: '#ccc' + } + var o = e('zrender/tool/util') + return t.prototype = { + type: a.COMPONENT_TYPE_GRID, getX: function () { + return this._x + }, getY: function () { + return this._y + }, getWidth: function () { + return this._width + }, getHeight: function () { + return this._height + }, getXend: function () { + return this._x + this._width + }, getYend: function () { + return this._y + this._height + }, getArea: function () { + return { x: this._x, y: this._y, width: this._width, height: this._height } + }, getBbox: function () { + return [[this._x, this._y], [this.getXend(), this.getYend()]] + }, refixAxisShape: function (e) { + for (var t, i, n, o = e.xAxis._axisList.concat(e.yAxis ? e.yAxis._axisList : []), r = o.length; r--;) n = o[r], n.type == a.COMPONENT_TYPE_AXIS_VALUE && n._min < 0 && n._max >= 0 && (n.isHorizontal() ? t = n.getCoord(0) : i = n.getCoord(0)) + if ('undefined' != typeof t || 'undefined' != typeof i) for (r = o.length; r--;) o[r].refixAxisShape(t, i) + }, refresh: function (e) { + if (e || this._zrWidth != this.zr.getWidth() || this._zrHeight != this.zr.getHeight()) { + this.clear(), this.option = e || this.option, this.option.grid = this.reformOption(this.option.grid) + var t = this.option.grid + this._zrWidth = this.zr.getWidth(), this._zrHeight = this.zr.getHeight(), this._x = this.parsePercent(t.x, this._zrWidth), this._y = this.parsePercent(t.y, this._zrHeight) + var i = this.parsePercent(t.x2, this._zrWidth), a = this.parsePercent(t.y2, this._zrHeight) + this._width = 'undefined' == typeof t.width ? this._zrWidth - this._x - i : this.parsePercent(t.width, this._zrWidth), this._width = this._width <= 0 ? 10 : this._width, this._height = 'undefined' == typeof t.height ? this._zrHeight - this._y - a : this.parsePercent(t.height, this._zrHeight), this._height = this._height <= 0 ? 10 : this._height, this._x = this.subPixelOptimize(this._x, t.borderWidth), this._y = this.subPixelOptimize(this._y, t.borderWidth), this.shapeList.push(new n({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + x: this._x, + y: this._y, + width: this._width, + height: this._height, + brushType: t.borderWidth > 0 ? 'both' : 'fill', + color: t.backgroundColor, + strokeColor: t.borderColor, + lineWidth: t.borderWidth + } + })), this.zr.addShape(this.shapeList[0]) + } + } + }, o.inherits(t, i), e('../component').define('grid', t), t + }), i('echarts/component/dataZoom', ['require', './base', 'zrender/shape/Rectangle', 'zrender/shape/Polygon', '../util/shape/Icon', '../config', '../util/date', 'zrender/tool/util', '../component'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o) + var r = this + r._ondrift = function (e, t) { + return r.__ondrift(this, e, t) + }, r._ondragend = function () { + return r.__ondragend() + }, this._fillerSize = 30, this._isSilence = !1, this._zoom = {}, this.option.dataZoom = this.reformOption(this.option.dataZoom), this.zoomOption = this.option.dataZoom, this._handleSize = this.zoomOption.handleSize, this.myChart.canvasSupported || (this.zoomOption.realtime = !1), this._location = this._getLocation(), this._zoom = this._getZoom(), this._backupData(), this.option.dataZoom.show && this._buildShape(), this._syncData() + } + + var i = e('./base'), n = e('zrender/shape/Rectangle'), a = e('zrender/shape/Polygon'), + o = e('../util/shape/Icon'), r = e('../config') + r.dataZoom = { + zlevel: 0, + z: 4, + show: !1, + orient: 'horizontal', + backgroundColor: 'rgba(0,0,0,0)', + dataBackgroundColor: '#eee', + fillerColor: 'rgba(144,197,237,0.2)', + handleColor: 'rgba(70,130,180,0.8)', + handleSize: 8, + showDetail: !0, + realtime: !0 + } + var s = e('../util/date'), l = e('zrender/tool/util') + return t.prototype = { + type: r.COMPONENT_TYPE_DATAZOOM, _buildShape: function () { + this._buildBackground(), this._buildFiller(), this._buildHandle(), this._buildFrame() + for (var e = 0, t = this.shapeList.length; t > e; e++) this.zr.addShape(this.shapeList[e]) + this._syncFrameShape() + }, _getLocation: function () { + var e, t, i, n, a = this.component.grid + return 'horizontal' == this.zoomOption.orient ? (i = this.zoomOption.width || a.getWidth(), n = this.zoomOption.height || this._fillerSize, e = null != this.zoomOption.x ? this.zoomOption.x : a.getX(), t = null != this.zoomOption.y ? this.zoomOption.y : this.zr.getHeight() - n - 2) : (i = this.zoomOption.width || this._fillerSize, n = this.zoomOption.height || a.getHeight(), e = null != this.zoomOption.x ? this.zoomOption.x : 2, t = null != this.zoomOption.y ? this.zoomOption.y : a.getY()), { + x: e, + y: t, + width: i, + height: n + } + }, _getZoom: function () { + var e = this.option.series, t = this.option.xAxis + !t || t instanceof Array || (t = [t], this.option.xAxis = t) + var i = this.option.yAxis + !i || i instanceof Array || (i = [i], this.option.yAxis = i) + var n, a, o = [], s = this.zoomOption.xAxisIndex + if (t && null == s) { + n = [] + for (var l = 0, h = t.length; h > l; l++) ('category' == t[l].type || null == t[l].type) && n.push(l) + } else n = s instanceof Array ? s : null != s ? [s] : [] + if (s = this.zoomOption.yAxisIndex, i && null == s) { + a = [] + for (var l = 0, h = i.length; h > l; l++) 'category' == i[l].type && a.push(l) + } else a = s instanceof Array ? s : null != s ? [s] : [] + for (var m, l = 0, h = e.length; h > l; l++) if (m = e[l], m.type == r.CHART_TYPE_LINE || m.type == r.CHART_TYPE_BAR || m.type == r.CHART_TYPE_SCATTER || m.type == r.CHART_TYPE_K) { + for (var V = 0, U = n.length; U > V; V++) if (n[V] == (m.xAxisIndex || 0)) { + o.push(l) + break + } + for (var V = 0, U = a.length; U > V; V++) if (a[V] == (m.yAxisIndex || 0)) { + o.push(l) + break + } + null == this.zoomOption.xAxisIndex && null == this.zoomOption.yAxisIndex && m.data && this.getDataFromOption(m.data[0]) instanceof Array && (m.type == r.CHART_TYPE_SCATTER || m.type == r.CHART_TYPE_LINE || m.type == r.CHART_TYPE_BAR) && o.push(l) + } + var d = null != this._zoom.start ? this._zoom.start : null != this.zoomOption.start ? this.zoomOption.start : 0, + p = null != this._zoom.end ? this._zoom.end : null != this.zoomOption.end ? this.zoomOption.end : 100 + d > p && (d += p, p = d - p, d -= p) + var c = Math.round((p - d) / 100 * ('horizontal' == this.zoomOption.orient ? this._location.width : this._location.height)) + return { + start: d, + end: p, + start2: 0, + end2: 100, + size: c, + xAxisIndex: n, + yAxisIndex: a, + seriesIndex: o, + scatterMap: this._zoom.scatterMap || {} + } + }, _backupData: function () { + this._originalData = { xAxis: {}, yAxis: {}, series: {} } + for (var e = this.option.xAxis, t = this._zoom.xAxisIndex, i = 0, n = t.length; n > i; i++) this._originalData.xAxis[t[i]] = e[t[i]].data + for (var a = this.option.yAxis, o = this._zoom.yAxisIndex, i = 0, n = o.length; n > i; i++) this._originalData.yAxis[o[i]] = a[o[i]].data + for (var s, l = this.option.series, h = this._zoom.seriesIndex, i = 0, n = h.length; n > i; i++) s = l[h[i]], this._originalData.series[h[i]] = s.data, s.data && this.getDataFromOption(s.data[0]) instanceof Array && (s.type == r.CHART_TYPE_SCATTER || s.type == r.CHART_TYPE_LINE || s.type == r.CHART_TYPE_BAR) && (this._backupScale(), this._calculScatterMap(h[i])) + }, _calculScatterMap: function (t) { + this._zoom.scatterMap = this._zoom.scatterMap || {}, this._zoom.scatterMap[t] = this._zoom.scatterMap[t] || {} + var i = e('../component'), n = i.get('axis'), a = l.clone(this.option.xAxis) + 'category' == a[0].type && (a[0].type = 'value'), a[1] && 'category' == a[1].type && (a[1].type = 'value') + var o = new n(this.ecTheme, null, !1, { xAxis: a, series: this.option.series }, this, 'xAxis'), + r = this.option.series[t].xAxisIndex || 0 + this._zoom.scatterMap[t].x = o.getAxis(r).getExtremum(), o.dispose(), a = l.clone(this.option.yAxis), 'category' == a[0].type && (a[0].type = 'value'), a[1] && 'category' == a[1].type && (a[1].type = 'value'), o = new n(this.ecTheme, null, !1, { + yAxis: a, + series: this.option.series + }, this, 'yAxis'), r = this.option.series[t].yAxisIndex || 0, this._zoom.scatterMap[t].y = o.getAxis(r).getExtremum(), o.dispose() + }, _buildBackground: function () { + var e = this._location.width, t = this._location.height + this.shapeList.push(new n({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + x: this._location.x, + y: this._location.y, + width: e, + height: t, + color: this.zoomOption.backgroundColor + } + })) + for (var i = 0, o = this._originalData.xAxis, s = this._zoom.xAxisIndex, l = 0, h = s.length; h > l; l++) i = Math.max(i, o[s[l]].length) + for (var m = this._originalData.yAxis, V = this._zoom.yAxisIndex, l = 0, h = V.length; h > l; l++) i = Math.max(i, m[V[l]].length) + for (var U, d = this._zoom.seriesIndex[0], p = this._originalData.series[d], c = Number.MIN_VALUE, u = Number.MAX_VALUE, l = 0, h = p.length; h > l; l++) U = this.getDataFromOption(p[l], 0), this.option.series[d].type == r.CHART_TYPE_K && (U = U[1]), isNaN(U) && (U = 0), c = Math.max(c, U), u = Math.min(u, U) + var y = c - u, g = [], b = e / (i - (i > 1 ? 1 : 0)), f = t / (i - (i > 1 ? 1 : 0)), k = 1 + 'horizontal' == this.zoomOption.orient && 1 > b ? k = Math.floor(3 * i / e) : 'vertical' == this.zoomOption.orient && 1 > f && (k = Math.floor(3 * i / t)) + for (var l = 0, h = i; h > l; l += k) U = this.getDataFromOption(p[l], 0), this.option.series[d].type == r.CHART_TYPE_K && (U = U[1]), isNaN(U) && (U = 0), g.push('horizontal' == this.zoomOption.orient ? [this._location.x + b * l, this._location.y + t - 1 - Math.round((U - u) / y * (t - 10))] : [this._location.x + 1 + Math.round((U - u) / y * (e - 10)), this._location.y + f * (h - l - 1)]) + 'horizontal' == this.zoomOption.orient ? (g.push([this._location.x + e, this._location.y + t]), g.push([this._location.x, this._location.y + t])) : (g.push([this._location.x, this._location.y]), g.push([this._location.x, this._location.y + t])), this.shapeList.push(new a({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { pointList: g, color: this.zoomOption.dataBackgroundColor }, + hoverable: !1 + })) + }, _buildFiller: function () { + this._fillerShae = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + draggable: !0, + ondrift: this._ondrift, + ondragend: this._ondragend, + _type: 'filler' + }, this._fillerShae.style = 'horizontal' == this.zoomOption.orient ? { + x: this._location.x + Math.round(this._zoom.start / 100 * this._location.width) + this._handleSize, + y: this._location.y, + width: this._zoom.size - 2 * this._handleSize, + height: this._location.height, + color: this.zoomOption.fillerColor, + text: ':::', + textPosition: 'inside' + } : { + x: this._location.x, + y: this._location.y + Math.round(this._zoom.start / 100 * this._location.height) + this._handleSize, + width: this._location.width, + height: this._zoom.size - 2 * this._handleSize, + color: this.zoomOption.fillerColor, + text: '::', + textPosition: 'inside' + }, this._fillerShae.highlightStyle = { + brushType: 'fill', + color: 'rgba(0,0,0,0)' + }, this._fillerShae = new n(this._fillerShae), this.shapeList.push(this._fillerShae) + }, _buildHandle: function () { + var e = this.zoomOption.showDetail ? this._getDetail() : { start: '', end: '' } + this._startShape = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + draggable: !0, + style: { + iconType: 'rectangle', + x: this._location.x, + y: this._location.y, + width: this._handleSize, + height: this._handleSize, + color: this.zoomOption.handleColor, + text: '=', + textPosition: 'inside' + }, + highlightStyle: { text: e.start, brushType: 'fill', textPosition: 'left' }, + ondrift: this._ondrift, + ondragend: this._ondragend + }, 'horizontal' == this.zoomOption.orient ? (this._startShape.style.height = this._location.height, this._endShape = l.clone(this._startShape), this._startShape.style.x = this._fillerShae.style.x - this._handleSize, this._endShape.style.x = this._fillerShae.style.x + this._fillerShae.style.width, this._endShape.highlightStyle.text = e.end, this._endShape.highlightStyle.textPosition = 'right') : (this._startShape.style.width = this._location.width, this._endShape = l.clone(this._startShape), this._startShape.style.y = this._fillerShae.style.y + this._fillerShae.style.height, this._startShape.highlightStyle.textPosition = 'bottom', this._endShape.style.y = this._fillerShae.style.y - this._handleSize, this._endShape.highlightStyle.text = e.end, this._endShape.highlightStyle.textPosition = 'top'), this._startShape = new o(this._startShape), this._endShape = new o(this._endShape), this.shapeList.push(this._startShape), this.shapeList.push(this._endShape) + }, _buildFrame: function () { + var e = this.subPixelOptimize(this._location.x, 1), t = this.subPixelOptimize(this._location.y, 1) + this._startFrameShape = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + x: e, + y: t, + width: this._location.width - (e > this._location.x ? 1 : 0), + height: this._location.height - (t > this._location.y ? 1 : 0), + lineWidth: 1, + brushType: 'stroke', + strokeColor: this.zoomOption.handleColor + } + }, this._endFrameShape = l.clone(this._startFrameShape), this._startFrameShape = new n(this._startFrameShape), this._endFrameShape = new n(this._endFrameShape), this.shapeList.push(this._startFrameShape), this.shapeList.push(this._endFrameShape) + }, _syncHandleShape: function () { + 'horizontal' == this.zoomOption.orient ? (this._startShape.style.x = this._fillerShae.style.x - this._handleSize, this._endShape.style.x = this._fillerShae.style.x + this._fillerShae.style.width, this._zoom.start = (this._startShape.style.x - this._location.x) / this._location.width * 100, this._zoom.end = (this._endShape.style.x + this._handleSize - this._location.x) / this._location.width * 100) : (this._startShape.style.y = this._fillerShae.style.y + this._fillerShae.style.height, this._endShape.style.y = this._fillerShae.style.y - this._handleSize, this._zoom.start = (this._location.y + this._location.height - this._startShape.style.y) / this._location.height * 100, this._zoom.end = (this._location.y + this._location.height - this._endShape.style.y - this._handleSize) / this._location.height * 100), this.zr.modShape(this._startShape.id), this.zr.modShape(this._endShape.id), this._syncFrameShape(), this.zr.refreshNextFrame() + }, _syncFillerShape: function () { + var e, t + 'horizontal' == this.zoomOption.orient ? (e = this._startShape.style.x, t = this._endShape.style.x, this._fillerShae.style.x = Math.min(e, t) + this._handleSize, this._fillerShae.style.width = Math.abs(e - t) - this._handleSize, this._zoom.start = (Math.min(e, t) - this._location.x) / this._location.width * 100, this._zoom.end = (Math.max(e, t) + this._handleSize - this._location.x) / this._location.width * 100) : (e = this._startShape.style.y, t = this._endShape.style.y, this._fillerShae.style.y = Math.min(e, t) + this._handleSize, this._fillerShae.style.height = Math.abs(e - t) - this._handleSize, this._zoom.start = (this._location.y + this._location.height - Math.max(e, t)) / this._location.height * 100, this._zoom.end = (this._location.y + this._location.height - Math.min(e, t) - this._handleSize) / this._location.height * 100), this.zr.modShape(this._fillerShae.id), this._syncFrameShape(), this.zr.refreshNextFrame() + }, _syncFrameShape: function () { + 'horizontal' == this.zoomOption.orient ? (this._startFrameShape.style.width = this._fillerShae.style.x - this._location.x, this._endFrameShape.style.x = this._fillerShae.style.x + this._fillerShae.style.width, this._endFrameShape.style.width = this._location.x + this._location.width - this._endFrameShape.style.x) : (this._startFrameShape.style.y = this._fillerShae.style.y + this._fillerShae.style.height, this._startFrameShape.style.height = this._location.y + this._location.height - this._startFrameShape.style.y, this._endFrameShape.style.height = this._fillerShae.style.y - this._location.y), this.zr.modShape(this._startFrameShape.id), this.zr.modShape(this._endFrameShape.id) + }, _syncShape: function () { + this.zoomOption.show && ('horizontal' == this.zoomOption.orient ? (this._startShape.style.x = this._location.x + this._zoom.start / 100 * this._location.width, this._endShape.style.x = this._location.x + this._zoom.end / 100 * this._location.width - this._handleSize, this._fillerShae.style.x = this._startShape.style.x + this._handleSize, this._fillerShae.style.width = this._endShape.style.x - this._startShape.style.x - this._handleSize) : (this._startShape.style.y = this._location.y + this._location.height - this._zoom.start / 100 * this._location.height, this._endShape.style.y = this._location.y + this._location.height - this._zoom.end / 100 * this._location.height - this._handleSize, this._fillerShae.style.y = this._endShape.style.y + this._handleSize, this._fillerShae.style.height = this._startShape.style.y - this._endShape.style.y - this._handleSize), this.zr.modShape(this._startShape.id), this.zr.modShape(this._endShape.id), this.zr.modShape(this._fillerShae.id), this._syncFrameShape(), this.zr.refresh()) + }, _syncData: function (e) { + var t, i, n, a, o + for (var s in this._originalData) { + t = this._originalData[s] + for (var l in t) o = t[l], null != o && (a = o.length, i = Math.floor(this._zoom.start / 100 * a), n = Math.ceil(this._zoom.end / 100 * a), this.getDataFromOption(o[0]) instanceof Array && this.option[s][l].type != r.CHART_TYPE_K ? (this._setScale(), this.option[s][l].data = this._synScatterData(l, o)) : this.option[s][l].data = o.slice(i, n)) + } + this._isSilence || !this.zoomOption.realtime && !e || this.messageCenter.dispatch(r.EVENT.DATA_ZOOM, null, { zoom: this._zoom }, this.myChart) + }, _synScatterData: function (e, t) { + if (0 === this._zoom.start && 100 == this._zoom.end && 0 === this._zoom.start2 && 100 == this._zoom.end2) return t + var i, n, a, o, r, s = [], l = this._zoom.scatterMap[e] + + 'horizontal' == this.zoomOption.orient ? (i = l.x.max - l.x.min, n = this._zoom.start / 100 * i + l.x.min, a = this._zoom.end / 100 * i + l.x.min, i = l.y.max - l.y.min, o = this._zoom.start2 / 100 * i + l.y.min, r = this._zoom.end2 / 100 * i + l.y.min) : (i = l.x.max - l.x.min, n = this._zoom.start2 / 100 * i + l.x.min, a = this._zoom.end2 / 100 * i + l.x.min, i = l.y.max - l.y.min, o = this._zoom.start / 100 * i + l.y.min, r = this._zoom.end / 100 * i + l.y.min) + var h; + (h = l.x.dataMappingMethods) && (n = h.coord2Value(n), a = h.coord2Value(a)), (h = l.y.dataMappingMethods) && (o = h.coord2Value(o), r = h.coord2Value(r)) + for (var m, V = 0, U = t.length; U > V; V++) m = t[V].value || t[V], m[0] >= n && m[0] <= a && m[1] >= o && m[1] <= r && s.push(t[V]) + return s + }, _setScale: function () { + var e = 0 !== this._zoom.start || 100 !== this._zoom.end || 0 !== this._zoom.start2 || 100 !== this._zoom.end2, + t = { xAxis: this.option.xAxis, yAxis: this.option.yAxis } + for (var i in t) for (var n = 0, a = t[i].length; a > n; n++) t[i][n].scale = e || t[i][n]._scale + }, _backupScale: function () { + var e = { xAxis: this.option.xAxis, yAxis: this.option.yAxis } + for (var t in e) for (var i = 0, n = e[t].length; n > i; i++) e[t][i]._scale = e[t][i].scale + }, _getDetail: function () { + for (var e = ['xAxis', 'yAxis'], t = 0, i = e.length; i > t; t++) { + var n = this._originalData[e[t]] + for (var a in n) { + var o = n[a] + if (null != o) { + var r = o.length, l = Math.floor(this._zoom.start / 100 * r), + h = Math.ceil(this._zoom.end / 100 * r) + return h -= h > 0 ? 1 : 0, { + start: this.getDataFromOption(o[l]), + end: this.getDataFromOption(o[h]) + } + } + } + } + e = 'horizontal' == this.zoomOption.orient ? 'xAxis' : 'yAxis' + var m = this._zoom.seriesIndex[0], V = this.option.series[m][e + 'Index'] || 0, + U = this.option[e][V].type, d = this._zoom.scatterMap[m][e.charAt(0)].min, + p = this._zoom.scatterMap[m][e.charAt(0)].max, c = p - d + if ('value' == U) return { start: d + c * this._zoom.start / 100, end: d + c * this._zoom.end / 100 } + if ('time' == U) { + p = d + c * this._zoom.end / 100, d += c * this._zoom.start / 100 + var u = s.getAutoFormatter(d, p).formatter + return { start: s.format(u, d), end: s.format(u, p) } + } + return { start: '', end: '' } + }, __ondrift: function (e, t, i) { + this.zoomOption.zoomLock && (e = this._fillerShae) + var n = 'filler' == e._type ? this._handleSize : 0 + if ('horizontal' == this.zoomOption.orient ? e.style.x + t - n <= this._location.x ? e.style.x = this._location.x + n : e.style.x + t + e.style.width + n >= this._location.x + this._location.width ? e.style.x = this._location.x + this._location.width - e.style.width - n : e.style.x += t : e.style.y + i - n <= this._location.y ? e.style.y = this._location.y + n : e.style.y + i + e.style.height + n >= this._location.y + this._location.height ? e.style.y = this._location.y + this._location.height - e.style.height - n : e.style.y += i, 'filler' == e._type ? this._syncHandleShape() : this._syncFillerShape(), this.zoomOption.realtime && this._syncData(), this.zoomOption.showDetail) { + var a = this._getDetail() + this._startShape.style.text = this._startShape.highlightStyle.text = a.start, this._endShape.style.text = this._endShape.highlightStyle.text = a.end, this._startShape.style.textPosition = this._startShape.highlightStyle.textPosition, this._endShape.style.textPosition = this._endShape.highlightStyle.textPosition + } + return !0 + }, __ondragend: function () { + this.zoomOption.showDetail && (this._startShape.style.text = this._endShape.style.text = '=', this._startShape.style.textPosition = this._endShape.style.textPosition = 'inside', this.zr.modShape(this._startShape.id), this.zr.modShape(this._endShape.id), this.zr.refreshNextFrame()), this.isDragend = !0 + }, ondragend: function (e, t) { + this.isDragend && e.target && (!this.zoomOption.realtime && this._syncData(), t.dragOut = !0, t.dragIn = !0, this._isSilence || this.zoomOption.realtime || this.messageCenter.dispatch(r.EVENT.DATA_ZOOM, null, { zoom: this._zoom }, this.myChart), t.needRefresh = !1, this.isDragend = !1) + }, ondataZoom: function (e, t) { + t.needRefresh = !0 + }, absoluteZoom: function (e) { + this._zoom.start = e.start, this._zoom.end = e.end, this._zoom.start2 = e.start2, this._zoom.end2 = e.end2, this._syncShape(), this._syncData(!0) + }, rectZoom: function (e) { + if (!e) return this._zoom.start = this._zoom.start2 = 0, this._zoom.end = this._zoom.end2 = 100, this._syncShape(), this._syncData(!0), this._zoom + var t = this.component.grid.getArea(), i = { x: e.x, y: e.y, width: e.width, height: e.height } + if (i.width < 0 && (i.x += i.width, i.width = -i.width), i.height < 0 && (i.y += i.height, i.height = -i.height), i.x > t.x + t.width || i.y > t.y + t.height) return !1 + i.x < t.x && (i.x = t.x), i.x + i.width > t.x + t.width && (i.width = t.x + t.width - i.x), i.y + i.height > t.y + t.height && (i.height = t.y + t.height - i.y) + var n, a = (i.x - t.x) / t.width, o = 1 - (i.x + i.width - t.x) / t.width, + r = 1 - (i.y + i.height - t.y) / t.height, s = (i.y - t.y) / t.height + return 'horizontal' == this.zoomOption.orient ? (n = this._zoom.end - this._zoom.start, this._zoom.start += n * a, this._zoom.end -= n * o, n = this._zoom.end2 - this._zoom.start2, this._zoom.start2 += n * r, this._zoom.end2 -= n * s) : (n = this._zoom.end - this._zoom.start, this._zoom.start += n * r, this._zoom.end -= n * s, n = this._zoom.end2 - this._zoom.start2, this._zoom.start2 += n * a, this._zoom.end2 -= n * o), this._syncShape(), this._syncData(!0), this._zoom + }, syncBackupData: function (e) { + for (var t, i, n = this._originalData.series, a = e.series, o = 0, r = a.length; r > o; o++) { + i = a[o].data || a[o].eventList, t = n[o] ? Math.floor(this._zoom.start / 100 * n[o].length) : 0 + for (var s = 0, l = i.length; l > s; s++) n[o] && (n[o][s + t] = i[s]) + } + }, syncOption: function (e) { + this.silence(!0), this.option = e, this.option.dataZoom = this.reformOption(this.option.dataZoom), this.zoomOption = this.option.dataZoom, this.myChart.canvasSupported || (this.zoomOption.realtime = !1), this.clear(), this._location = this._getLocation(), this._zoom = this._getZoom(), this._backupData(), this.option.dataZoom && this.option.dataZoom.show && this._buildShape(), this._syncData(), this.silence(!1) + }, silence: function (e) { + this._isSilence = e + }, getRealDataIndex: function (e, t) { + if (!this._originalData || 0 === this._zoom.start && 100 == this._zoom.end) return t + var i = this._originalData.series + return i[e] ? Math.floor(this._zoom.start / 100 * i[e].length) + t : -1 + }, resize: function () { + this.clear(), this._location = this._getLocation(), this._zoom = this._getZoom(), this.option.dataZoom.show && this._buildShape() + } + }, l.inherits(t, i), e('../component').define('dataZoom', t), t + }), i('echarts/component/categoryAxis', ['require', './base', 'zrender/shape/Text', 'zrender/shape/Line', 'zrender/shape/Rectangle', '../config', 'zrender/tool/util', 'zrender/tool/area', '../component'], function (e) { + function t (e, t, n, a, o, r) { + if (a.data.length < 1) return void console.error('option.data.length < 1.') + i.call(this, e, t, n, a, o), this.grid = this.component.grid + for (var s in r) this[s] = r[s] + this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Text'), a = e('zrender/shape/Line'), o = e('zrender/shape/Rectangle'), + r = e('../config') + r.categoryAxis = { + zlevel: 0, + z: 0, + show: !0, + position: 'bottom', + name: '', + nameLocation: 'end', + nameTextStyle: {}, + boundaryGap: !0, + axisLine: { show: !0, onZero: !0, lineStyle: { color: '#48b', width: 2, type: 'solid' } }, + axisTick: { show: !0, interval: 'auto', inside: !1, length: 5, lineStyle: { color: '#333', width: 1 } }, + axisLabel: { show: !0, interval: 'auto', rotate: 0, margin: 8, textStyle: { color: '#333' } }, + splitLine: { show: !0, lineStyle: { color: ['#ccc'], width: 1, type: 'solid' } }, + splitArea: { show: !1, areaStyle: { color: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'] } } + } + var s = e('zrender/tool/util'), l = e('zrender/tool/area') + return t.prototype = { + type: r.COMPONENT_TYPE_AXIS_CATEGORY, _getReformedLabel: function (e) { + var t = this.getDataFromOption(this.option.data[e]), + i = this.option.data[e].formatter || this.option.axisLabel.formatter + return i && ('function' == typeof i ? t = i.call(this.myChart, t) : 'string' == typeof i && (t = i.replace('{value}', t))), t + }, _getInterval: function () { + var e = this.option.axisLabel.interval + if ('auto' == e) { + var t = this.option.axisLabel.textStyle.fontSize, i = this.option.data, n = this.option.data.length + if (this.isHorizontal()) if (n > 3) { + var a, o, r = this.getGap(), h = !1, m = Math.floor(.5 / r) + for (m = 1 > m ? 1 : m, e = Math.floor(15 / r); !h && n > e;) { + e += m, h = !0, a = Math.floor(r * e) + for (var V = Math.floor((n - 1) / e) * e; V >= 0; V -= e) { + if (0 !== this.option.axisLabel.rotate) o = t else if (i[V].textStyle) o = l.getTextWidth(this._getReformedLabel(V), this.getFont(s.merge(i[V].textStyle, this.option.axisLabel.textStyle))) else { + var U = this._getReformedLabel(V) + '', d = (U.match(/\w/g) || '').length, + p = U.length - d + o = d * t * 2 / 3 + p * t + } + if (o > a) { + h = !1 + break + } + } + } + } else e = 1 else if (n > 3) { + var r = this.getGap() + for (e = Math.floor(11 / r); t > r * e - 6 && n > e;) e++ + } else e = 1 + } else e = 'function' == typeof e ? 1 : e - 0 + 1 + return e + }, _buildShape: function () { + if (this._interval = this._getInterval(), this.option.show) { + this.option.splitArea.show && this._buildSplitArea(), this.option.splitLine.show && this._buildSplitLine(), this.option.axisLine.show && this._buildAxisLine(), this.option.axisTick.show && this._buildAxisTick(), this.option.axisLabel.show && this._buildAxisLabel() + for (var e = 0, t = this.shapeList.length; t > e; e++) this.zr.addShape(this.shapeList[e]) + } + }, _buildAxisTick: function () { + var e, t = this.option.data, i = this.option.data.length, n = this.option.axisTick, o = n.length, + r = n.lineStyle.color, s = n.lineStyle.width, + l = 'function' == typeof n.interval ? n.interval : 'auto' == n.interval && 'function' == typeof this.option.axisLabel.interval ? this.option.axisLabel.interval : !1, + h = l ? 1 : 'auto' == n.interval ? this._interval : n.interval - 0 + 1, m = n.onGap, + V = m ? this.getGap() / 2 : 'undefined' == typeof m && this.option.boundaryGap ? this.getGap() / 2 : 0, + U = V > 0 ? -h : 0 + if (this.isHorizontal()) for (var d, p = 'bottom' == this.option.position ? n.inside ? this.grid.getYend() - o - 1 : this.grid.getYend() + 1 : n.inside ? this.grid.getY() + 1 : this.grid.getY() - o - 1, c = U; i > c; c += h) (!l || l(c, t[c])) && (d = this.subPixelOptimize(this.getCoordByIndex(c) + (c >= 0 ? V : 0), s), e = { + _axisShape: 'axisTick', + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { xStart: d, yStart: p, xEnd: d, yEnd: p + o, strokeColor: r, lineWidth: s } + }, this.shapeList.push(new a(e))) else for (var u, y = 'left' == this.option.position ? n.inside ? this.grid.getX() + 1 : this.grid.getX() - o - 1 : n.inside ? this.grid.getXend() - o - 1 : this.grid.getXend() + 1, c = U; i > c; c += h) (!l || l(c, t[c])) && (u = this.subPixelOptimize(this.getCoordByIndex(c) - (c >= 0 ? V : 0), s), e = { + _axisShape: 'axisTick', + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { xStart: y, yStart: u, xEnd: y + o, yEnd: u, strokeColor: r, lineWidth: s } + }, this.shapeList.push(new a(e))) + }, _buildAxisLabel: function () { + var e, t, i = this.option.data, a = this.option.data.length, o = this.option.axisLabel, r = o.rotate, + l = o.margin, h = o.clickable, m = o.textStyle, + V = 'function' == typeof o.interval ? o.interval : !1 + if (this.isHorizontal()) { + var U, d + 'bottom' == this.option.position ? (U = this.grid.getYend() + l, d = 'top') : (U = this.grid.getY() - l, d = 'bottom') + for (var p = 0; a > p; p += this._interval) V && !V(p, i[p]) || '' === this._getReformedLabel(p) || (t = s.merge(i[p].textStyle || {}, m), e = { + zlevel: this.getZlevelBase(), + z: this.getZBase() + 3, + hoverable: !1, + style: { + x: this.getCoordByIndex(p), + y: U, + color: t.color, + text: this._getReformedLabel(p), + textFont: this.getFont(t), + textAlign: t.align || 'center', + textBaseline: t.baseline || d + } + }, r && (e.style.textAlign = r > 0 ? 'bottom' == this.option.position ? 'right' : 'left' : 'bottom' == this.option.position ? 'left' : 'right', e.rotation = [r * Math.PI / 180, e.style.x, e.style.y]), this.shapeList.push(new n(this._axisLabelClickable(h, e)))) + } else { + var c, u + 'left' == this.option.position ? (c = this.grid.getX() - l, u = 'right') : (c = this.grid.getXend() + l, u = 'left') + for (var p = 0; a > p; p += this._interval) V && !V(p, i[p]) || '' === this._getReformedLabel(p) || (t = s.merge(i[p].textStyle || {}, m), e = { + zlevel: this.getZlevelBase(), + z: this.getZBase() + 3, + hoverable: !1, + style: { + x: c, + y: this.getCoordByIndex(p), + color: t.color, + text: this._getReformedLabel(p), + textFont: this.getFont(t), + textAlign: t.align || u, + textBaseline: t.baseline || 0 === p && '' !== this.option.name ? 'bottom' : p == a - 1 && '' !== this.option.name ? 'top' : 'middle' + } + }, r && (e.rotation = [r * Math.PI / 180, e.style.x, e.style.y]), this.shapeList.push(new n(this._axisLabelClickable(h, e)))) + } + }, _buildSplitLine: function () { + var e, t = this.option.data, i = this.option.data.length, n = this.option.splitLine, + o = n.lineStyle.type, r = n.lineStyle.width, s = n.lineStyle.color + s = s instanceof Array ? s : [s] + var l = s.length, + h = 'function' == typeof this.option.axisLabel.interval ? this.option.axisLabel.interval : !1, + m = n.onGap, + V = m ? this.getGap() / 2 : 'undefined' == typeof m && this.option.boundaryGap ? this.getGap() / 2 : 0 + if (i -= m || 'undefined' == typeof m && this.option.boundaryGap ? 1 : 0, this.isHorizontal()) for (var U, d = this.grid.getY(), p = this.grid.getYend(), c = 0; i > c; c += this._interval) (!h || h(c, t[c])) && (U = this.subPixelOptimize(this.getCoordByIndex(c) + V, r), e = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + xStart: U, + yStart: d, + xEnd: U, + yEnd: p, + strokeColor: s[c / this._interval % l], + lineType: o, + lineWidth: r + } + }, this.shapeList.push(new a(e))) else for (var u, y = this.grid.getX(), g = this.grid.getXend(), c = 0; i > c; c += this._interval) (!h || h(c, t[c])) && (u = this.subPixelOptimize(this.getCoordByIndex(c) - V, r), e = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + xStart: y, + yStart: u, + xEnd: g, + yEnd: u, + strokeColor: s[c / this._interval % l], + lineType: o, + lineWidth: r + } + }, this.shapeList.push(new a(e))) + }, _buildSplitArea: function () { + var e, t = this.option.data, i = this.option.splitArea, n = i.areaStyle.color + if (n instanceof Array) { + var a = n.length, r = this.option.data.length, + s = 'function' == typeof this.option.axisLabel.interval ? this.option.axisLabel.interval : !1, + l = i.onGap, + h = l ? this.getGap() / 2 : 'undefined' == typeof l && this.option.boundaryGap ? this.getGap() / 2 : 0 + if (this.isHorizontal()) for (var m, V = this.grid.getY(), U = this.grid.getHeight(), d = this.grid.getX(), p = 0; r >= p; p += this._interval) s && !s(p, t[p]) && r > p || (m = r > p ? this.getCoordByIndex(p) + h : this.grid.getXend(), e = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { x: d, y: V, width: m - d, height: U, color: n[p / this._interval % a] } + }, this.shapeList.push(new o(e)), d = m) else for (var c, u = this.grid.getX(), y = this.grid.getWidth(), g = this.grid.getYend(), p = 0; r >= p; p += this._interval) s && !s(p, t[p]) && r > p || (c = r > p ? this.getCoordByIndex(p) - h : this.grid.getY(), e = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { x: u, y: c, width: y, height: g - c, color: n[p / this._interval % a] } + }, this.shapeList.push(new o(e)), g = c) + } else e = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + x: this.grid.getX(), + y: this.grid.getY(), + width: this.grid.getWidth(), + height: this.grid.getHeight(), + color: n + } + }, this.shapeList.push(new o(e)) + }, refresh: function (e) { + e && (this.option = this.reformOption(e), this.option.axisLabel.textStyle = this.getTextStyle(this.option.axisLabel.textStyle)), this.clear(), this._buildShape() + }, getGap: function () { + var e = this.option.data.length, t = this.isHorizontal() ? this.grid.getWidth() : this.grid.getHeight() + return this.option.boundaryGap ? t / e : t / (e > 1 ? e - 1 : 1) + }, getCoord: function (e) { + for (var t = this.option.data, i = t.length, n = this.getGap(), a = this.option.boundaryGap ? n / 2 : 0, o = 0; i > o; o++) { + if (this.getDataFromOption(t[o]) == e) return a = this.isHorizontal() ? this.grid.getX() + a : this.grid.getYend() - a + a += n + } + }, getCoordByIndex: function (e) { + if (0 > e) return this.isHorizontal() ? this.grid.getX() : this.grid.getYend() + if (e > this.option.data.length - 1) return this.isHorizontal() ? this.grid.getXend() : this.grid.getY() + var t = this.getGap(), i = this.option.boundaryGap ? t / 2 : 0 + return i += e * t, i = this.isHorizontal() ? this.grid.getX() + i : this.grid.getYend() - i + }, getNameByIndex: function (e) { + return this.getDataFromOption(this.option.data[e]) + }, getIndexByName: function (e) { + for (var t = this.option.data, i = t.length, n = 0; i > n; n++) if (this.getDataFromOption(t[n]) == e) return n + return -1 + }, getValueFromCoord: function () { + return '' + }, isMainAxis: function (e) { + return e % this._interval === 0 + } + }, s.inherits(t, i), e('../component').define('categoryAxis', t), t + }), i('echarts/component/valueAxis', ['require', './base', 'zrender/shape/Text', 'zrender/shape/Line', 'zrender/shape/Rectangle', '../config', '../util/date', 'zrender/tool/util', '../util/smartSteps', '../util/accMath', '../util/smartLogSteps', '../component'], function (e) { + function t (e, t, n, a, o, r, s) { + if (!s || 0 === s.length) return void console.err('option.series.length == 0.') + i.call(this, e, t, n, a, o), this.series = s, this.grid = this.component.grid + for (var l in r) this[l] = r[l] + this.refresh(a, s) + } + + var i = e('./base'), n = e('zrender/shape/Text'), a = e('zrender/shape/Line'), o = e('zrender/shape/Rectangle'), + r = e('../config') + r.valueAxis = { + zlevel: 0, + z: 0, + show: !0, + position: 'left', + name: '', + nameLocation: 'end', + nameTextStyle: {}, + boundaryGap: [0, 0], + axisLine: { show: !0, onZero: !0, lineStyle: { color: '#48b', width: 2, type: 'solid' } }, + axisTick: { show: !1, inside: !1, length: 5, lineStyle: { color: '#333', width: 1 } }, + axisLabel: { show: !0, rotate: 0, margin: 8, textStyle: { color: '#333' } }, + splitLine: { show: !0, lineStyle: { color: ['#ccc'], width: 1, type: 'solid' } }, + splitArea: { show: !1, areaStyle: { color: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'] } } + } + var s = e('../util/date'), l = e('zrender/tool/util') + return t.prototype = { + type: r.COMPONENT_TYPE_AXIS_VALUE, _buildShape: function () { + if (this._hasData = !1, this._calculateValue(), this._hasData && this.option.show) { + this.option.splitArea.show && this._buildSplitArea(), this.option.splitLine.show && this._buildSplitLine(), this.option.axisLine.show && this._buildAxisLine(), this.option.axisTick.show && this._buildAxisTick(), this.option.axisLabel.show && this._buildAxisLabel() + for (var e = 0, t = this.shapeList.length; t > e; e++) this.zr.addShape(this.shapeList[e]) + } + }, _buildAxisTick: function () { + var e, t = this._valueList, i = this._valueList.length, n = this.option.axisTick, o = n.length, + r = n.lineStyle.color, s = n.lineStyle.width + if (this.isHorizontal()) for (var l, h = 'bottom' === this.option.position ? n.inside ? this.grid.getYend() - o - 1 : this.grid.getYend() + 1 : n.inside ? this.grid.getY() + 1 : this.grid.getY() - o - 1, m = 0; i > m; m++) l = this.subPixelOptimize(this.getCoord(t[m]), s), e = { + _axisShape: 'axisTick', + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { xStart: l, yStart: h, xEnd: l, yEnd: h + o, strokeColor: r, lineWidth: s } + }, this.shapeList.push(new a(e)) else for (var V, U = 'left' === this.option.position ? n.inside ? this.grid.getX() + 1 : this.grid.getX() - o - 1 : n.inside ? this.grid.getXend() - o - 1 : this.grid.getXend() + 1, m = 0; i > m; m++) V = this.subPixelOptimize(this.getCoord(t[m]), s), e = { + _axisShape: 'axisTick', + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { xStart: U, yStart: V, xEnd: U + o, yEnd: V, strokeColor: r, lineWidth: s } + }, this.shapeList.push(new a(e)) + }, _buildAxisLabel: function () { + var e, t = this._valueList, i = this._valueList.length, a = this.option.axisLabel.rotate, + o = this.option.axisLabel.margin, r = this.option.axisLabel.clickable, + s = this.option.axisLabel.textStyle + if (this.isHorizontal()) { + var l, h + 'bottom' === this.option.position ? (l = this.grid.getYend() + o, h = 'top') : (l = this.grid.getY() - o, h = 'bottom') + for (var m = 0; i > m; m++) e = { + zlevel: this.getZlevelBase(), + z: this.getZBase() + 3, + hoverable: !1, + style: { + x: this.getCoord(t[m]), + y: l, + color: 'function' == typeof s.color ? s.color(t[m]) : s.color, + text: this._valueLabel[m], + textFont: this.getFont(s), + textAlign: s.align || 'center', + textBaseline: s.baseline || h + } + }, a && (e.style.textAlign = a > 0 ? 'bottom' === this.option.position ? 'right' : 'left' : 'bottom' === this.option.position ? 'left' : 'right', e.rotation = [a * Math.PI / 180, e.style.x, e.style.y]), this.shapeList.push(new n(this._axisLabelClickable(r, e))) + } else { + var V, U + 'left' === this.option.position ? (V = this.grid.getX() - o, U = 'right') : (V = this.grid.getXend() + o, U = 'left') + for (var m = 0; i > m; m++) e = { + zlevel: this.getZlevelBase(), + z: this.getZBase() + 3, + hoverable: !1, + style: { + x: V, + y: this.getCoord(t[m]), + color: 'function' == typeof s.color ? s.color(t[m]) : s.color, + text: this._valueLabel[m], + textFont: this.getFont(s), + textAlign: s.align || U, + textBaseline: s.baseline || (0 === m && '' !== this.option.name ? 'bottom' : m === i - 1 && '' !== this.option.name ? 'top' : 'middle') + } + }, a && (e.rotation = [a * Math.PI / 180, e.style.x, e.style.y]), this.shapeList.push(new n(this._axisLabelClickable(r, e))) + } + }, _buildSplitLine: function () { + var e, t = this._valueList, i = this._valueList.length, n = this.option.splitLine, o = n.lineStyle.type, + r = n.lineStyle.width, s = n.lineStyle.color + s = s instanceof Array ? s : [s] + var l = s.length + if (this.isHorizontal()) for (var h, m = this.grid.getY(), V = this.grid.getYend(), U = 0; i > U; U++) h = this.subPixelOptimize(this.getCoord(t[U]), r), e = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { xStart: h, yStart: m, xEnd: h, yEnd: V, strokeColor: s[U % l], lineType: o, lineWidth: r } + }, this.shapeList.push(new a(e)) else for (var d, p = this.grid.getX(), c = this.grid.getXend(), U = 0; i > U; U++) d = this.subPixelOptimize(this.getCoord(t[U]), r), e = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { xStart: p, yStart: d, xEnd: c, yEnd: d, strokeColor: s[U % l], lineType: o, lineWidth: r } + }, this.shapeList.push(new a(e)) + }, _buildSplitArea: function () { + var e, t = this.option.splitArea.areaStyle.color + if (t instanceof Array) { + var i = t.length, n = this._valueList, a = this._valueList.length + if (this.isHorizontal()) for (var r, s = this.grid.getY(), l = this.grid.getHeight(), h = this.grid.getX(), m = 0; a >= m; m++) r = a > m ? this.getCoord(n[m]) : this.grid.getXend(), e = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { x: h, y: s, width: r - h, height: l, color: t[m % i] } + }, this.shapeList.push(new o(e)), h = r else for (var V, U = this.grid.getX(), d = this.grid.getWidth(), p = this.grid.getYend(), m = 0; a >= m; m++) V = a > m ? this.getCoord(n[m]) : this.grid.getY(), e = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { x: U, y: V, width: d, height: p - V, color: t[m % i] } + }, this.shapeList.push(new o(e)), p = V + } else e = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + x: this.grid.getX(), + y: this.grid.getY(), + width: this.grid.getWidth(), + height: this.grid.getHeight(), + color: t + } + }, this.shapeList.push(new o(e)) + }, _calculateValue: function () { + if (isNaN(this.option.min - 0) || isNaN(this.option.max - 0)) { + for (var e, t, i = {}, n = this.component.legend, a = 0, o = this.series.length; o > a; a++) !(this.series[a].type != r.CHART_TYPE_LINE && this.series[a].type != r.CHART_TYPE_BAR && this.series[a].type != r.CHART_TYPE_SCATTER && this.series[a].type != r.CHART_TYPE_K && this.series[a].type != r.CHART_TYPE_EVENTRIVER || n && !n.isSelected(this.series[a].name) || (e = this.series[a].xAxisIndex || 0, t = this.series[a].yAxisIndex || 0, this.option.xAxisIndex != e && this.option.yAxisIndex != t || !this._calculSum(i, a))) + var s + for (var a in i) { + s = i[a] + for (var l = 0, h = s.length; h > l; l++) if (!isNaN(s[l])) { + this._hasData = !0, this._min = s[l], this._max = s[l] + break + } + if (this._hasData) break + } + for (var a in i) { + s = i[a] + for (var l = 0, h = s.length; h > l; l++) isNaN(s[l]) || (this._min = Math.min(this._min, s[l]), this._max = Math.max(this._max, s[l])) + } + var m = 'log' !== this.option.type ? this.option.boundaryGap : [0, 0], + V = Math.abs(this._max - this._min) + this._min = isNaN(this.option.min - 0) ? this._min - Math.abs(V * m[0]) : this.option.min - 0, this._max = isNaN(this.option.max - 0) ? this._max + Math.abs(V * m[1]) : this.option.max - 0, this._min === this._max && (0 === this._max ? this._max = 1 : this._max > 0 ? this._min = this._max / this.option.splitNumber != null ? this.option.splitNumber : 5 : this._max = this._max / this.option.splitNumber != null ? this.option.splitNumber : 5), 'time' === this.option.type ? this._reformTimeValue() : 'log' === this.option.type ? this._reformLogValue() : this._reformValue(this.option.scale) + } else this._hasData = !0, this._min = this.option.min - 0, this._max = this.option.max - 0, 'time' === this.option.type ? this._reformTimeValue() : 'log' === this.option.type ? this._reformLogValue() : this._customerValue() + }, _calculSum: function (e, t) { + var i, n, a = this.series[t].name || 'kener' + if (this.series[t].stack) { + var o = '__Magic_Key_Positive__' + this.series[t].stack, + l = '__Magic_Key_Negative__' + this.series[t].stack + e[o] = e[o] || [], e[l] = e[l] || [], e[a] = e[a] || [], n = this.series[t].data + for (var h = 0, m = n.length; m > h; h++) i = this.getDataFromOption(n[h]), '-' !== i && (i -= 0, i >= 0 ? null != e[o][h] ? e[o][h] += i : e[o][h] = i : null != e[l][h] ? e[l][h] += i : e[l][h] = i, this.option.scale && e[a].push(i)) + } else if (e[a] = e[a] || [], this.series[t].type != r.CHART_TYPE_EVENTRIVER) { + n = this.series[t].data + for (var h = 0, m = n.length; m > h; h++) i = this.getDataFromOption(n[h]), this.series[t].type === r.CHART_TYPE_K ? (e[a].push(i[0]), e[a].push(i[1]), e[a].push(i[2]), e[a].push(i[3])) : i instanceof Array ? (-1 != this.option.xAxisIndex && e[a].push('time' != this.option.type ? i[0] : s.getNewDate(i[0])), -1 != this.option.yAxisIndex && e[a].push('time' != this.option.type ? i[1] : s.getNewDate(i[1]))) : e[a].push(i) + } else { + n = this.series[t].data + for (var h = 0, m = n.length; m > h; h++) for (var V = n[h].evolution, U = 0, d = V.length; d > U; U++) e[a].push(s.getNewDate(V[U].time)) + } + }, _reformValue: function (t) { + var i = e('../util/smartSteps'), n = this.option.splitNumber + !t && this._min >= 0 && this._max >= 0 && (this._min = 0), !t && this._min <= 0 && this._max <= 0 && (this._max = 0) + var a = i(this._min, this._max, n) + n = null != n ? n : a.secs, this._min = a.min, this._max = a.max, this._valueList = a.pnts, this._reformLabelData() + }, _reformTimeValue: function () { + var e = null != this.option.splitNumber ? this.option.splitNumber : 5, + t = s.getAutoFormatter(this._min, this._max, e), i = t.formatter, n = t.gapValue + this._valueList = [s.getNewDate(this._min)] + var a + switch (i) { + case'week': + a = s.nextMonday(this._min) + break + case'month': + a = s.nextNthOnMonth(this._min, 1) + break + case'quarter': + a = s.nextNthOnQuarterYear(this._min, 1) + break + case'half-year': + a = s.nextNthOnHalfYear(this._min, 1) + break + case'year': + a = s.nextNthOnYear(this._min, 1) + break + default: + 72e5 >= n ? a = (Math.floor(this._min / n) + 1) * n : (a = s.getNewDate(this._min - -n), a.setHours(6 * Math.round(a.getHours() / 6)), a.setMinutes(0), a.setSeconds(0)) + } + for (a - this._min < n / 2 && (a -= -n), t = s.getNewDate(a), e *= 1.5; e-- >= 0 && (("month" == i || "quarter" == i || "half-year" == i || "year" == i) && t.setDate(1), !(this._max - t < n / 2));) this._valueList.push(t), t = s.getNewDate(t - -n) + this._valueList.push(s.getNewDate(this._max)), this._reformLabelData(function (e) { + return function (t) { + return s.format(e, t) + } + }(i)) + }, _customerValue: function () { + var t = e('../util/accMath'), i = null != this.option.splitNumber ? this.option.splitNumber : 5, + n = (this._max - this._min) / i + this._valueList = [] + for (var a = 0; i >= a; a++) this._valueList.push(t.accAdd(this._min, t.accMul(n, a))) + this._reformLabelData() + }, _reformLogValue: function () { + var t = this.option, i = e('../util/smartLogSteps')({ + dataMin: this._min, + dataMax: this._max, + logPositive: t.logPositive, + logLabelBase: t.logLabelBase, + splitNumber: t.splitNumber + }) + this._min = i.dataMin, this._max = i.dataMax, this._valueList = i.tickList, this._dataMappingMethods = i.dataMappingMethods, this._reformLabelData(i.labelFormatter) + }, _reformLabelData: function (e) { + this._valueLabel = [] + var t = this.option.axisLabel.formatter + if (t) for (var i = 0, n = this._valueList.length; n > i; i++) 'function' == typeof t ? this._valueLabel.push(e ? t.call(this.myChart, this._valueList[i], e) : t.call(this.myChart, this._valueList[i])) : 'string' == typeof t && this._valueLabel.push(e ? s.format(t, this._valueList[i]) : t.replace('{value}', this._valueList[i])) else for (var i = 0, n = this._valueList.length; n > i; i++) this._valueLabel.push(e ? e(this._valueList[i]) : this.numAddCommas(this._valueList[i])) + }, getExtremum: function () { + this._calculateValue() + var e = this._dataMappingMethods + return { min: this._min, max: this._max, dataMappingMethods: e ? l.merge({}, e) : null } + }, refresh: function (e, t) { + e && (this.option = this.reformOption(e), this.option.axisLabel.textStyle = l.merge(this.option.axisLabel.textStyle || {}, this.ecTheme.textStyle), this.series = t), this.zr && (this.clear(), this._buildShape()) + }, getCoord: function (e) { + this._dataMappingMethods && (e = this._dataMappingMethods.value2Coord(e)), e = e < this._min ? this._min : e, e = e > this._max ? this._max : e + var t + return t = this.isHorizontal() ? this.grid.getX() + (e - this._min) / (this._max - this._min) * this.grid.getWidth() : this.grid.getYend() - (e - this._min) / (this._max - this._min) * this.grid.getHeight() + }, getCoordSize: function (e) { + return Math.abs(this.isHorizontal() ? e / (this._max - this._min) * this.grid.getWidth() : e / (this._max - this._min) * this.grid.getHeight()) + }, getValueFromCoord: function (e) { + var t + return this.isHorizontal() ? (e = e < this.grid.getX() ? this.grid.getX() : e, e = e > this.grid.getXend() ? this.grid.getXend() : e, t = this._min + (e - this.grid.getX()) / this.grid.getWidth() * (this._max - this._min)) : (e = e < this.grid.getY() ? this.grid.getY() : e, e = e > this.grid.getYend() ? this.grid.getYend() : e, t = this._max - (e - this.grid.getY()) / this.grid.getHeight() * (this._max - this._min)), this._dataMappingMethods && (t = this._dataMappingMethods.coord2Value(t)), t.toFixed(2) - 0 + }, isMaindAxis: function (e) { + for (var t = 0, i = this._valueList.length; i > t; t++) if (this._valueList[t] === e) return !0 + return !1 + } + }, l.inherits(t, i), e('../component').define('valueAxis', t), t + }), i('echarts/util/date', [], function () { + function e (e, t, i) { + i = i > 1 ? i : 2 + for (var n, a, o, r, s = 0, l = m.length; l > s; s++) if (n = m[s].value, a = Math.ceil(t / n) * n - Math.floor(e / n) * n, Math.round(a / n) <= 1.2 * i) { + o = m[s].formatter, r = m[s].value + break + } + return null == o && (o = 'year', n = 317088e5, a = Math.ceil(t / n) * n - Math.floor(e / n) * n, r = Math.round(a / (i - 1) / n) * n), { + formatter: o, + gapValue: r + } + } + + function t (e) { + return 10 > e ? '0' + e : e + } + + function i (e, i) { + ('week' == e || 'month' == e || 'quarter' == e || 'half-year' == e || 'year' == e) && (e = 'MM - dd\nyyyy') + var n = h(i), a = n.getFullYear(), o = n.getMonth() + 1, r = n.getDate(), s = n.getHours(), + l = n.getMinutes(), m = n.getSeconds() + return e = e.replace('MM', t(o)), e = e.toLowerCase(), e = e.replace('yyyy', a), e = e.replace('yy', a % 100), e = e.replace('dd', t(r)), e = e.replace('d', r), e = e.replace('hh', t(s)), e = e.replace('h', s), e = e.replace('mm', t(l)), e = e.replace('m', l), e = e.replace('ss', t(m)), e = e.replace('s', m) + } + + function n (e) { + return e = h(e), e.setDate(e.getDate() + 8 - e.getDay()), e + } + + function a (e, t, i) { + return e = h(e), e.setMonth(Math.ceil((e.getMonth() + 1) / i) * i), e.setDate(t), e + } + + function o (e, t) { + return a(e, t, 1) + } + + function r (e, t) { + return a(e, t, 3) + } + + function s (e, t) { + return a(e, t, 6) + } + + function l (e, t) { + return a(e, t, 12) + } + + function h (e) { + return e instanceof Date ? e : new Date('string' == typeof e ? e.replace(/-/g, '/') : e) + } + + var m = [{ formatter: 'hh : mm : ss', value: 1e3 }, { + formatter: 'hh : mm : ss', + value: 5e3 + }, { formatter: 'hh : mm : ss', value: 1e4 }, { + formatter: 'hh : mm : ss', + value: 15e3 + }, { formatter: 'hh : mm : ss', value: 3e4 }, { + formatter: 'hh : mm\nMM - dd', + value: 6e4 + }, { formatter: 'hh : mm\nMM - dd', value: 3e5 }, { + formatter: 'hh : mm\nMM - dd', + value: 6e5 + }, { formatter: 'hh : mm\nMM - dd', value: 9e5 }, { + formatter: 'hh : mm\nMM - dd', + value: 18e5 + }, { formatter: 'hh : mm\nMM - dd', value: 36e5 }, { + formatter: 'hh : mm\nMM - dd', + value: 72e5 + }, { formatter: 'hh : mm\nMM - dd', value: 216e5 }, { + formatter: 'hh : mm\nMM - dd', + value: 432e5 + }, { formatter: 'MM - dd\nyyyy', value: 864e5 }, { formatter: 'week', value: 6048e5 }, { + formatter: 'month', + value: 26784e5 + }, { formatter: 'quarter', value: 8208e6 }, { formatter: 'half-year', value: 16416e6 }, { + formatter: 'year', + value: 32832e6 + }] + return { + getAutoFormatter: e, + getNewDate: h, + format: i, + nextMonday: n, + nextNthPerNmonth: a, + nextNthOnMonth: o, + nextNthOnQuarterYear: r, + nextNthOnHalfYear: s, + nextNthOnYear: l + } + }), i('echarts/util/smartSteps', [], function () { + function e (e) { + return X.log(I(e)) / X.LN10 + } + + function t (e) { + return X.pow(10, e) + } + + function i (e) { + return e === w(e) + } + + function n (e, t, n, a) { + b = a || {}, f = b.steps || L, k = b.secs || W, n = v(+n || 0) % 99, e = +e || 0, t = +t || 0, x = _ = 0, 'min' in b && (e = +b.min || 0, x = 1), 'max' in b && (t = +b.max || 0, _ = 1), e > t && (t = [e, e = t][0]) + var o = t - e + if (x && _) return g(e, t, n) + if ((n || 5) > o) { + if (i(e) && i(t)) return d(e, t, n) + if (0 === o) return p(e, t, n) + } + return h(e, t, n) + } + + function a (e, i, n, a) { + a = a || 0 + var s = o((i - e) / n, -1), l = o(e, -1, 1), h = o(i, -1), m = X.min(s.e, l.e, h.e) + 0 === l.c ? m = X.min(s.e, h.e) : 0 === h.c && (m = X.min(s.e, l.e)), r(s, { + c: 0, + e: m + }), r(l, s, 1), r(h, s), a += m, e = l.c, i = h.c + for (var V = (i - e) / n, U = t(a), d = 0, p = [], c = n + 1; c--;) p[c] = (e + V * c) * U + if (0 > a) { + d = u(U), V = +(V * U).toFixed(d), e = +(e * U).toFixed(d), i = +(i * U).toFixed(d) + for (var c = p.length; c--;) p[c] = p[c].toFixed(d), 0 === +p[c] && (p[c] = '0') + } else e *= U, i *= U, V *= U + return k = 0, f = 0, b = 0, { min: e, max: i, secs: n, step: V, fix: d, exp: a, pnts: p } + } + + function o (n, a, o) { + a = v(a % 10) || 2, 0 > a && (i(n) ? a = ('' + I(n)).replace(/0+$/, '').length || 1 : (n = n.toFixed(15).replace(/0+$/, ''), a = n.replace('.', '').replace(/^[-0]+/, '').length, n = +n)) + var r = w(e(n)) - a + 1, s = +(n * t(-r)).toFixed(15) || 0 + return s = o ? w(s) : K(s), !s && (r = 0), ('' + I(s)).length > a && (r += 1, s /= 10), { c: s, e: r } + } + + function r (e, i, n) { + var a = i.e - e.e + a && (e.e += a, e.c *= t(-a), e.c = n ? w(e.c) : K(e.c)) + } + + function s (e, t, i) { + e.e < t.e ? r(t, e, i) : r(e, t, i) + } + + function l (e, t) { + t = t || L, e = o(e) + for (var i = e.c, n = 0; i > t[n];) n++ + if (!t[n]) for (i /= 10, e.e += 1, n = 0; i > t[n];) n++ + return e.c = t[n], e + } + + function h (e, t, n) { + var s, h = n || +k.slice(-1), p = l((t - e) / h, f), u = o(t - e), g = o(e, -1, 1), b = o(t, -1) + if (r(u, p), r(g, p, 1), r(b, p), n ? s = V(g, b, h) : h = m(g, b), i(e) && i(t) && e * t >= 0) { + if (h > t - e) return d(e, t, h) + h = U(e, t, n, g, b, h) + } + var L = c(e, t, g.c, b.c) + return g.c = L[0], b.c = L[1], (x || _) && y(e, t, g, b), a(g.c, b.c, h, b.e) + } + + function m (e, i) { + for (var n, a, o, r, s = [], h = k.length; h--;) n = k[h], a = l((i.c - e.c) / n, f), a = a.c * t(a.e), o = w(e.c / a) * a, r = K(i.c / a) * a, s[h] = { + min: o, + max: r, + step: a, + span: r - o + } + return s.sort(function (e, t) { + var i = e.span - t.span + return 0 === i && (i = e.step - t.step), i + }), s = s[0], n = s.span / s.step, e.c = s.min, i.c = s.max, 3 > n ? 2 * n : n + } + + function V (e, i, n) { + for (var a, o, r = i.c, s = (i.c - e.c) / n - 1; r > e.c;) s = l(s + 1, f), s = s.c * t(s.e), a = s * n, o = K(i.c / s) * s, r = o - a + var h = e.c - r, m = o - i.c, V = h - m + return V > 1.1 * s && (V = v(V / s / 2) * s, r += V, o += V), e.c = r, i.c = o, s + } + + function U (e, n, a, o, r, s) { + var l = r.c - o.c, h = l / s * t(r.e) + if (!i(h) && (h = w(h), l = h * s, n - e > l && (h += 1, l = h * s, !a && h * (s - 1) >= n - e && (s -= 1, l = h * s)), l >= n - e)) { + var m = l - (n - e) + o.c = v(e - m / 2), r.c = v(n + m / 2), o.e = 0, r.e = 0 + } + return s + } + + function d (e, t, i) { + if (i = i || 5, x) t = e + i else if (_) e = t - i else { + var n = i - (t - e), o = v(e - n / 2), r = v(t + n / 2), s = c(e, t, o, r) + e = s[0], t = s[1] + } + return a(e, t, i) + } + + function p (e, t, i) { + i = i || 5 + var n = X.min(I(t / i), i) / 2.1 + return x ? t = e + n : _ ? e = t - n : (e -= n, t += n), h(e, t, i) + } + + function c (e, t, i, n) { + return e >= 0 && 0 > i ? (n -= i, i = 0) : 0 >= t && n > 0 && (i -= n, n = 0), [i, n] + } + + function u (e) { + return e = (+e).toFixed(15).split('.'), e.pop().replace(/0+$/, '').length + } + + function y (e, t, i, n) { + if (x) { + var a = o(e, 4, 1) + i.e - a.e > 6 && (a = { c: 0, e: i.e }), s(i, a), s(n, a), n.c += a.c - i.c, i.c = a.c + } else if (_) { + var r = o(t, 4) + n.e - r.e > 6 && (r = { c: 0, e: n.e }), s(i, r), s(n, r), i.c += r.c - n.c, n.c = r.c + } + } + + function g (e, t, i) { + var n = i ? [i] : k, s = t - e + if (0 === s) return t = o(t, 3), i = n[0], t.c = v(t.c + i / 2), a(t.c - i, t.c, i, t.e) + I(t / s) < 1e-6 && (t = 0), I(e / s) < 1e-6 && (e = 0) + var l, h, m, V = [[5, 10], [10, 2], [50, 10], [100, 2]], U = [], d = [], p = o(t - e, 3), c = o(e, -1, 1), + u = o(t, -1) + r(c, p, 1), r(u, p), s = u.c - c.c, p.c = s + for (var y = n.length; y--;) { + i = n[y], l = K(s / i), h = l * i - s, m = 3 * (h + 3), m += 2 * (i - n[0] + 2), i % 5 === 0 && (m -= 10) + for (var g = V.length; g--;) l % V[g][0] === 0 && (m /= V[g][1]) + d[y] = [i, l, h, m].join(), U[y] = { secs: i, step: l, delta: h, score: m } + } + return U.sort(function (e, t) { + return e.score - t.score + }), U = U[0], c.c = v(c.c - U.delta / 2), u.c = v(u.c + U.delta / 2), a(c.c, u.c, U.secs, p.e) + } + + var b, f, k, x, _, L = [10, 20, 25, 50], W = [4, 5, 6], X = Math, v = X.round, w = X.floor, K = X.ceil, + I = X.abs + return n + }), i('echarts/util/smartLogSteps', ['require', './number'], function (e) { + function t (e) { + return i(), u = e || {}, n(), a(), [o(), i()][0] + } + + function i () { + U = u = g = c = b = f = y = k = d = p = null + } + + function n () { + d = u.logLabelBase, null == d ? (p = 'plain', d = 10, c = I) : (d = +d, 1 > d && (d = 10), p = 'exponent', c = L(d)), y = u.splitNumber, null == y && (y = E) + var e = parseFloat(u.dataMin), t = parseFloat(u.dataMax) + isFinite(e) || isFinite(t) ? isFinite(e) ? isFinite(t) ? e > t && (t = [e, e = t][0]) : t = e : e = t : e = t = 1, U = u.logPositive, null == U && (U = t > 0 || 0 === e), b = U ? e : -t, f = U ? t : -e, S > b && (b = S), S > f && (f = S) + } + + function a () { + function e () { + y > m && (y = m) + var e = w(l(m / y)), t = v(l(m / e)), i = e * t, n = (i - U) / 2, a = w(l(r - n)) + V(a - r) && (a -= 1), g = -a * c + for (var s = a; o >= s - e; s += e) k.push(W(d, s)) + } + + function t () { + for (var e = i(h, 0), t = e + 2; t > e && a(e + 1) + n(e + 1) * C < r;) e++ + for (var l = i(s, 0), t = l - 2; l > t && a(l - 1) + n(l - 1) * C > o;) l-- + g = -(a(e) * I + n(e) * J) + for (var m = e; l >= m; m++) { + var V = a(m), U = n(m) + k.push(W(10, V) * W(2, U)) + } + } + + function i (e, t) { + return 3 * e + t + } + + function n (e) { + return e - 3 * a(e) + } + + function a (e) { + return w(l(e / 3)) + } + + k = [] + var o = l(L(f) / c), r = l(L(b) / c), s = v(o), h = w(r), m = s - h, U = o - r + 'exponent' === p ? e() : F >= m && y > F ? t() : e() + } + + function o () { + for (var e = [], t = 0, i = k.length; i > t; t++) e[t] = (U ? 1 : -1) * k[t] + !U && e.reverse() + var n = s(), a = n.value2Coord, o = a(e[0]), l = a(e[e.length - 1]) + return o === l && (o -= 1, l += 1), { + dataMin: o, + dataMax: l, + tickList: e, + logPositive: U, + labelFormatter: r(), + dataMappingMethods: n + } + } + + function r () { + if ('exponent' === p) { + var e = d, t = c + return function (i) { + if (!isFinite(parseFloat(i))) return '' + var n = '' + return 0 > i && (i = -i, n = '-'), n + e + m(L(i) / t) + } + } + return function (e) { + return isFinite(parseFloat(e)) ? x.addCommas(h(e)) : '' + } + } + + function s () { + var e = U, t = g + return { + value2Coord: function (i) { + return null == i || isNaN(i) || !isFinite(i) ? i : (i = parseFloat(i), isFinite(i) ? e && S > i ? i = S : !e && i > -S && (i = -S) : i = S, i = X(i), (e ? 1 : -1) * (L(i) + t)) + }, coord2Value: function (i) { + return null == i || isNaN(i) || !isFinite(i) ? i : (i = parseFloat(i), isFinite(i) || (i = S), e ? W(K, i - t) : -W(K, -i + t)) + } + } + } + + function l (e) { + return +Number(+e).toFixed(14) + } + + function h (e) { + return Number(e).toFixed(15).replace(/\.?0*$/, '') + } + + function m (e) { + e = h(Math.round(e)) + for (var t = [], i = 0, n = e.length; n > i; i++) { + var a = e.charAt(i) + t.push(T[a] || '') + } + return t.join('') + } + + function V (e) { + return e > -S && S > e + } + + var U, d, p, c, u, y, g, b, f, k, x = e('./number'), _ = Math, L = _.log, W = _.pow, X = _.abs, v = _.ceil, + w = _.floor, K = _.E, I = _.LN10, J = _.LN2, C = J / I, S = 1e-9, E = 5, F = 2, + T = { 0: '⁰', 1: '¹', 2: '²', 3: '³', 4: '⁴', 5: '⁵', 6: '⁶', 7: '⁷', 8: '⁸', 9: '⁹', '-': '⁻' } + return t + }), i('echarts/chart/line', ['require', './base', 'zrender/shape/Polyline', '../util/shape/Icon', '../util/shape/HalfSmoothPolygon', '../component/axis', '../component/grid', '../component/dataZoom', '../config', '../util/ecData', 'zrender/tool/util', 'zrender/tool/color', '../chart'], function (e) { + function t (e, t, i, a, o) { + n.call(this, e, t, i, a, o), this.refresh(a) + } + + function i (e, t, i) { + var n = t.x, a = t.y, r = t.width, s = t.height, l = s / 2 + t.symbol.match('empty') && (e.fillStyle = '#fff'), t.brushType = 'both' + var h = t.symbol.replace('empty', '').toLowerCase() + h.match('star') ? (l = h.replace('star', '') - 0 || 5, a -= 1, h = 'star') : ('rectangle' === h || 'arrow' === h) && (n += (r - s) / 2, r = s) + var m = '' + if (h.match('image') && (m = h.replace(new RegExp('^image:\\/\\/'), ''), h = 'image', n += Math.round((r - s) / 2) - 1, r = s += 2), h = o.prototype.iconLibrary[h]) { + var V = t.x, U = t.y + e.moveTo(V, U + l), e.lineTo(V + 5, U + l), e.moveTo(V + t.width - 5, U + l), e.lineTo(V + t.width, U + l) + var d = this + h(e, { x: n + 4, y: a + 4, width: r - 8, height: s - 8, n: l, image: m }, function () { + d.modSelf(), i() + }) + } else e.moveTo(n, a + l), e.lineTo(n + r, a + l) + } + + var n = e('./base'), a = e('zrender/shape/Polyline'), o = e('../util/shape/Icon'), + r = e('../util/shape/HalfSmoothPolygon') + e('../component/axis'), e('../component/grid'), e('../component/dataZoom') + var s = e('../config') + s.line = { + zlevel: 0, + z: 2, + clickable: !0, + legendHoverLink: !0, + xAxisIndex: 0, + yAxisIndex: 0, + dataFilter: 'nearest', + itemStyle: { + normal: { + label: { show: !1 }, + lineStyle: { + width: 2, + type: 'solid', + shadowColor: 'rgba(0,0,0,0)', + shadowBlur: 0, + shadowOffsetX: 0, + shadowOffsetY: 0 + } + }, emphasis: { label: { show: !1 } } + }, + symbolSize: 2, + showAllSymbol: !1 + } + var l = e('../util/ecData'), h = e('zrender/tool/util'), m = e('zrender/tool/color') + return t.prototype = { + type: s.CHART_TYPE_LINE, _buildShape: function () { + this.finalPLMap = {}, this._buildPosition() + }, _buildHorizontal: function (e, t, i, n) { + for (var a, o, r, s, l, h, m, V, U, d = this.series, p = i[0][0], c = d[p], u = this.component.xAxis.getAxis(c.xAxisIndex || 0), y = {}, g = 0, b = t; b > g && null != u.getNameByIndex(g); g++) { + o = u.getCoordByIndex(g) + for (var f = 0, k = i.length; k > f; f++) { + a = this.component.yAxis.getAxis(d[i[f][0]].yAxisIndex || 0), l = s = m = h = a.getCoord(0) + for (var x = 0, _ = i[f].length; _ > x; x++) p = i[f][x], c = d[p], V = c.data[g], U = this.getDataFromOption(V, '-'), y[p] = y[p] || [], n[p] = n[p] || { + min: Number.POSITIVE_INFINITY, + max: Number.NEGATIVE_INFINITY, + sum: 0, + counter: 0, + average: 0 + }, '-' !== U ? (U >= 0 ? (s -= x > 0 ? a.getCoordSize(U) : l - a.getCoord(U), r = s) : 0 > U && (h += x > 0 ? a.getCoordSize(U) : a.getCoord(U) - m, r = h), y[p].push([o, r, g, u.getNameByIndex(g), o, l]), n[p].min > U && (n[p].min = U, n[p].minY = r, n[p].minX = o), n[p].max < U && (n[p].max = U, n[p].maxY = r, n[p].maxX = o), n[p].sum += U, n[p].counter++) : y[p].length > 0 && (this.finalPLMap[p] = this.finalPLMap[p] || [], this.finalPLMap[p].push(y[p]), y[p] = []) + } + s = this.component.grid.getY() + for (var L, f = 0, k = i.length; k > f; f++) for (var x = 0, _ = i[f].length; _ > x; x++) p = i[f][x], c = d[p], V = c.data[g], U = this.getDataFromOption(V, '-'), '-' == U && this.deepQuery([V, c, this.option], 'calculable') && (L = this.deepQuery([V, c], 'symbolSize'), s += 2 * L + 5, r = s, this.shapeList.push(this._getCalculableItem(p, g, u.getNameByIndex(g), o, r, 'horizontal'))) + } + for (var W in y) y[W].length > 0 && (this.finalPLMap[W] = this.finalPLMap[W] || [], this.finalPLMap[W].push(y[W]), y[W] = []) + this._calculMarkMapXY(n, i, 'y'), this._buildBorkenLine(e, this.finalPLMap, u, 'horizontal') + }, _buildVertical: function (e, t, i, n) { + for (var a, o, r, s, l, h, m, V, U, d = this.series, p = i[0][0], c = d[p], u = this.component.yAxis.getAxis(c.yAxisIndex || 0), y = {}, g = 0, b = t; b > g && null != u.getNameByIndex(g); g++) { + r = u.getCoordByIndex(g) + for (var f = 0, k = i.length; k > f; f++) { + a = this.component.xAxis.getAxis(d[i[f][0]].xAxisIndex || 0), l = s = m = h = a.getCoord(0) + for (var x = 0, _ = i[f].length; _ > x; x++) p = i[f][x], c = d[p], V = c.data[g], U = this.getDataFromOption(V, '-'), y[p] = y[p] || [], n[p] = n[p] || { + min: Number.POSITIVE_INFINITY, + max: Number.NEGATIVE_INFINITY, + sum: 0, + counter: 0, + average: 0 + }, '-' !== U ? (U >= 0 ? (s += x > 0 ? a.getCoordSize(U) : a.getCoord(U) - l, o = s) : 0 > U && (h -= x > 0 ? a.getCoordSize(U) : m - a.getCoord(U), o = h), y[p].push([o, r, g, u.getNameByIndex(g), l, r]), n[p].min > U && (n[p].min = U, n[p].minX = o, n[p].minY = r), n[p].max < U && (n[p].max = U, n[p].maxX = o, n[p].maxY = r), n[p].sum += U, n[p].counter++) : y[p].length > 0 && (this.finalPLMap[p] = this.finalPLMap[p] || [], this.finalPLMap[p].push(y[p]), y[p] = []) + } + s = this.component.grid.getXend() + for (var L, f = 0, k = i.length; k > f; f++) for (var x = 0, _ = i[f].length; _ > x; x++) p = i[f][x], c = d[p], V = c.data[g], U = this.getDataFromOption(V, '-'), '-' == U && this.deepQuery([V, c, this.option], 'calculable') && (L = this.deepQuery([V, c], 'symbolSize'), s -= 2 * L + 5, o = s, this.shapeList.push(this._getCalculableItem(p, g, u.getNameByIndex(g), o, r, 'vertical'))) + } + for (var W in y) y[W].length > 0 && (this.finalPLMap[W] = this.finalPLMap[W] || [], this.finalPLMap[W].push(y[W]), y[W] = []) + this._calculMarkMapXY(n, i, 'x'), this._buildBorkenLine(e, this.finalPLMap, u, 'vertical') + }, _buildOther: function (e, t, i, n) { + for (var a, o = this.series, r = {}, s = 0, l = i.length; l > s; s++) for (var h = 0, m = i[s].length; m > h; h++) { + var V = i[s][h], U = o[V] + a = this.component.xAxis.getAxis(U.xAxisIndex || 0) + var d = this.component.yAxis.getAxis(U.yAxisIndex || 0), p = d.getCoord(0) + r[V] = r[V] || [], n[V] = n[V] || { + min0: Number.POSITIVE_INFINITY, + min1: Number.POSITIVE_INFINITY, + max0: Number.NEGATIVE_INFINITY, + max1: Number.NEGATIVE_INFINITY, + sum0: 0, + sum1: 0, + counter0: 0, + counter1: 0, + average0: 0, + average1: 0 + } + for (var c = 0, u = U.data.length; u > c; c++) { + var y = U.data[c], g = this.getDataFromOption(y, '-') + if (g instanceof Array) { + var b = a.getCoord(g[0]), f = d.getCoord(g[1]) + r[V].push([b, f, c, g[0], b, p]), n[V].min0 > g[0] && (n[V].min0 = g[0], n[V].minY0 = f, n[V].minX0 = b), n[V].max0 < g[0] && (n[V].max0 = g[0], n[V].maxY0 = f, n[V].maxX0 = b), n[V].sum0 += g[0], n[V].counter0++, n[V].min1 > g[1] && (n[V].min1 = g[1], n[V].minY1 = f, n[V].minX1 = b), n[V].max1 < g[1] && (n[V].max1 = g[1], n[V].maxY1 = f, n[V].maxX1 = b), n[V].sum1 += g[1], n[V].counter1++ + } + } + } + for (var k in r) r[k].length > 0 && (this.finalPLMap[k] = this.finalPLMap[k] || [], this.finalPLMap[k].push(r[k]), r[k] = []) + this._calculMarkMapXY(n, i, 'xy'), this._buildBorkenLine(e, this.finalPLMap, a, 'other') + }, _buildBorkenLine: function (e, t, i, n) { + for (var o, s = 'other' == n ? 'horizontal' : n, V = this.series, U = e.length - 1; U >= 0; U--) { + var d = e[U], p = V[d], c = t[d] + if (p.type === this.type && null != c) for (var u = this._getBbox(d, s), y = this._sIndex2ColorMap[d], g = this.query(p, 'itemStyle.normal.lineStyle.width'), b = this.query(p, 'itemStyle.normal.lineStyle.type'), f = this.query(p, 'itemStyle.normal.lineStyle.color'), k = this.getItemStyleColor(this.query(p, 'itemStyle.normal.color'), d, -1), x = null != this.query(p, 'itemStyle.normal.areaStyle'), _ = this.query(p, 'itemStyle.normal.areaStyle.color'), L = 0, W = c.length; W > L; L++) { + var X = c[L], v = 'other' != n && this._isLarge(s, X) + if (v) X = this._getLargePointList(s, X, p.dataFilter) else for (var w = 0, K = X.length; K > w; w++) o = p.data[X[w][2]], (this.deepQuery([o, p, this.option], 'calculable') || this.deepQuery([o, p], 'showAllSymbol') || 'categoryAxis' === i.type && i.isMainAxis(X[w][2]) && 'none' != this.deepQuery([o, p], 'symbol')) && this.shapeList.push(this._getSymbol(d, X[w][2], X[w][3], X[w][0], X[w][1], s)) + var I = new a({ + zlevel: p.zlevel, + z: p.z, + style: { + miterLimit: g, + pointList: X, + strokeColor: f || k || y, + lineWidth: g, + lineType: b, + smooth: this._getSmooth(p.smooth), + smoothConstraint: u, + shadowColor: this.query(p, 'itemStyle.normal.lineStyle.shadowColor'), + shadowBlur: this.query(p, 'itemStyle.normal.lineStyle.shadowBlur'), + shadowOffsetX: this.query(p, 'itemStyle.normal.lineStyle.shadowOffsetX'), + shadowOffsetY: this.query(p, 'itemStyle.normal.lineStyle.shadowOffsetY') + }, + hoverable: !1, + _main: !0, + _seriesIndex: d, + _orient: s + }) + if (l.pack(I, V[d], d, 0, L, V[d].name), this.shapeList.push(I), x) { + var J = new r({ + zlevel: p.zlevel, + z: p.z, + style: { + miterLimit: g, + pointList: h.clone(X).concat([[X[X.length - 1][4], X[X.length - 1][5]], [X[0][4], X[0][5]]]), + brushType: 'fill', + smooth: this._getSmooth(p.smooth), + smoothConstraint: u, + color: _ ? _ : m.alpha(y, .5) + }, + highlightStyle: { brushType: 'fill' }, + hoverable: !1, + _main: !0, + _seriesIndex: d, + _orient: s + }) + l.pack(J, V[d], d, 0, L, V[d].name), this.shapeList.push(J) + } + } + } + }, _getBbox: function (e, t) { + var i = this.component.grid.getBbox(), n = this.xMarkMap[e] + return null != n.minX0 ? [[Math.min(n.minX0, n.maxX0, n.minX1, n.maxX1), Math.min(n.minY0, n.maxY0, n.minY1, n.maxY1)], [Math.max(n.minX0, n.maxX0, n.minX1, n.maxX1), Math.max(n.minY0, n.maxY0, n.minY1, n.maxY1)]] : ('horizontal' === t ? (i[0][1] = Math.min(n.minY, n.maxY), i[1][1] = Math.max(n.minY, n.maxY)) : (i[0][0] = Math.min(n.minX, n.maxX), i[1][0] = Math.max(n.minX, n.maxX)), i) + }, _isLarge: function (e, t) { + return t.length < 2 ? !1 : 'horizontal' === e ? Math.abs(t[0][0] - t[1][0]) < .5 : Math.abs(t[0][1] - t[1][1]) < .5 + }, _getLargePointList: function (e, t, i) { + var n + n = 'horizontal' === e ? this.component.grid.getWidth() : this.component.grid.getHeight() + var a = t.length, o = [] + if ('function' != typeof i) switch (i) { + case'min': + i = function (e) { + return Math.max.apply(null, e) + } + break + case'max': + i = function (e) { + return Math.min.apply(null, e) + } + break + case'average': + i = function (e) { + for (var t = 0, i = 0; i < e.length; i++) t += e[i] + return t / e.length + } + break + default: + i = function (e) { + return e[0] + } + } + for (var r = [], s = 0; n > s; s++) { + var l = Math.floor(a / n * s), h = Math.min(Math.floor(a / n * (s + 1)), a) + if (!(l >= h)) { + for (var m = l; h > m; m++) r[m - l] = 'horizontal' === e ? t[m][1] : t[m][0] + r.length = h - l + for (var V = i(r), U = -1, d = 1 / 0, m = l; h > m; m++) { + var p = 'horizontal' === e ? t[m][1] : t[m][0], c = Math.abs(p - V) + d > c && (U = m, d = c) + } + var u = t[U].slice() + 'horizontal' === e ? u[1] = V : u[0] = V, o.push(u) + } + } + return o + }, _getSmooth: function (e) { + return e ? .3 : 0 + }, _getCalculableItem: function (e, t, i, n, a, o) { + var r = this.series, + l = r[e].calculableHolderColor || this.ecTheme.calculableHolderColor || s.calculableHolderColor, + h = this._getSymbol(e, t, i, n, a, o) + return h.style.color = l, h.style.strokeColor = l, h.rotation = [0, 0], h.hoverable = !1, h.draggable = !1, h.style.text = void 0, h + }, _getSymbol: function (e, t, i, n, a, o) { + var r = this.series, s = r[e], l = s.data[t], + h = this.getSymbolShape(s, e, l, t, i, n, a, this._sIndex2ShapeMap[e], this._sIndex2ColorMap[e], '#fff', 'vertical' === o ? 'horizontal' : 'vertical') + return h.zlevel = s.zlevel, h.z = s.z + 1, this.deepQuery([l, s, this.option], 'calculable') && (this.setCalculable(h), h.draggable = !0), h + }, getMarkCoord: function (e, t) { + var i = this.series[e], n = this.xMarkMap[e], a = this.component.xAxis.getAxis(i.xAxisIndex), + o = this.component.yAxis.getAxis(i.yAxisIndex) + if (t.type && ('max' === t.type || 'min' === t.type || 'average' === t.type)) { + var r = null != t.valueIndex ? t.valueIndex : null != n.maxX0 ? '1' : '' + return [n[t.type + 'X' + r], n[t.type + 'Y' + r], n[t.type + 'Line' + r], n[t.type + r]] + } + return ['string' != typeof t.xAxis && a.getCoordByIndex ? a.getCoordByIndex(t.xAxis || 0) : a.getCoord(t.xAxis || 0), 'string' != typeof t.yAxis && o.getCoordByIndex ? o.getCoordByIndex(t.yAxis || 0) : o.getCoord(t.yAxis || 0)] + }, refresh: function (e) { + e && (this.option = e, this.series = e.series), this.backupShapeList(), this._buildShape() + }, ontooltipHover: function (e, t) { + for (var i, n, a = e.seriesIndex, o = e.dataIndex, r = a.length; r--;) if (i = this.finalPLMap[a[r]]) for (var s = 0, l = i.length; l > s; s++) { + n = i[s] + for (var h = 0, m = n.length; m > h; h++) o === n[h][2] && t.push(this._getSymbol(a[r], n[h][2], n[h][3], n[h][0], n[h][1], 'horizontal')) + } + }, addDataAnimation: function (e, t) { + function i () { + c--, 0 === c && t && t() + } + + function n (e) { + e.style.controlPointList = null + } + + for (var a = this.series, o = {}, r = 0, s = e.length; s > r; r++) o[e[r][0]] = e[r] + for (var l, h, m, V, U, d, p, c = 0, r = this.shapeList.length - 1; r >= 0; r--) if (U = this.shapeList[r]._seriesIndex, o[U] && !o[U][3]) { + if (this.shapeList[r]._main && this.shapeList[r].style.pointList.length > 1) { + if (d = this.shapeList[r].style.pointList, h = Math.abs(d[0][0] - d[1][0]), V = Math.abs(d[0][1] - d[1][1]), p = 'horizontal' === this.shapeList[r]._orient, o[U][2]) { + if ('half-smooth-polygon' === this.shapeList[r].type) { + var u = d.length + this.shapeList[r].style.pointList[u - 3] = d[u - 2], this.shapeList[r].style.pointList[u - 3][p ? 0 : 1] = d[u - 4][p ? 0 : 1], this.shapeList[r].style.pointList[u - 2] = d[u - 1] + } + this.shapeList[r].style.pointList.pop(), p ? (l = h, m = 0) : (l = 0, m = -V) + } else { + if (this.shapeList[r].style.pointList.shift(), 'half-smooth-polygon' === this.shapeList[r].type) { + var y = this.shapeList[r].style.pointList.pop() + p ? y[0] = d[0][0] : y[1] = d[0][1], this.shapeList[r].style.pointList.push(y) + } + p ? (l = -h, m = 0) : (l = 0, m = V) + } + this.shapeList[r].style.controlPointList = null, this.zr.modShape(this.shapeList[r]) + } else { + if (o[U][2] && this.shapeList[r]._dataIndex === a[U].data.length - 1) { + this.zr.delShape(this.shapeList[r].id) + continue + } + if (!o[U][2] && 0 === this.shapeList[r]._dataIndex) { + this.zr.delShape(this.shapeList[r].id) + continue + } + } + this.shapeList[r].position = [0, 0], c++, this.zr.animate(this.shapeList[r].id, '').when(this.query(this.option, 'animationDurationUpdate'), { position: [l, m] }).during(n).done(i).start() + } + c || t && t() + } + }, o.prototype.iconLibrary.legendLineIcon = i, h.inherits(t, n), e('../chart').define('line', t), t + }), i('echarts/util/shape/HalfSmoothPolygon', ['require', 'zrender/shape/Base', 'zrender/shape/util/smoothBezier', 'zrender/tool/util', 'zrender/shape/Polygon'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('zrender/shape/Base'), n = e('zrender/shape/util/smoothBezier'), a = e('zrender/tool/util') + return t.prototype = { + type: 'half-smooth-polygon', buildPath: function (t, i) { + var a = i.pointList + if (!(a.length < 2)) if (i.smooth) { + var o = n(a.slice(0, -2), i.smooth, !1, i.smoothConstraint) + t.moveTo(a[0][0], a[0][1]) + for (var r, s, l, h = a.length, m = 0; h - 3 > m; m++) r = o[2 * m], s = o[2 * m + 1], l = a[m + 1], t.bezierCurveTo(r[0], r[1], s[0], s[1], l[0], l[1]) + t.lineTo(a[h - 2][0], a[h - 2][1]), t.lineTo(a[h - 1][0], a[h - 1][1]), t.lineTo(a[0][0], a[0][1]) + } else e('zrender/shape/Polygon').prototype.buildPath(t, i) + } + }, a.inherits(t, i), t + }), i('echarts/chart/bar', ['require', './base', 'zrender/shape/Rectangle', '../component/axis', '../component/grid', '../component/dataZoom', '../config', '../util/ecData', 'zrender/tool/util', 'zrender/tool/color', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Rectangle') + e('../component/axis'), e('../component/grid'), e('../component/dataZoom') + var a = e('../config') + a.bar = { + zlevel: 0, + z: 2, + clickable: !0, + legendHoverLink: !0, + xAxisIndex: 0, + yAxisIndex: 0, + barMinHeight: 0, + barGap: '30%', + barCategoryGap: '20%', + itemStyle: { + normal: { barBorderColor: '#fff', barBorderRadius: 0, barBorderWidth: 0, label: { show: !1 } }, + emphasis: { barBorderColor: '#fff', barBorderRadius: 0, barBorderWidth: 0, label: { show: !1 } } + } + } + var o = e('../util/ecData'), r = e('zrender/tool/util'), s = e('zrender/tool/color') + return t.prototype = { + type: a.CHART_TYPE_BAR, _buildShape: function () { + this._buildPosition() + }, _buildNormal: function (e, t, i, o, r) { + for (var s, l, h, m, V, U, d, p, c, u, y, g, b = this.series, f = i[0][0], k = b[f], x = 'horizontal' == r, _ = this.component.xAxis, L = this.component.yAxis, W = x ? _.getAxis(k.xAxisIndex) : L.getAxis(k.yAxisIndex), X = this._mapSize(W, i), v = X.gap, w = X.barGap, K = X.barWidthMap, I = X.barMaxWidthMap, J = X.barWidth, C = X.barMinHeightMap, S = X.interval, E = this.deepQuery([this.ecTheme, a], 'island.r'), F = 0, T = t; T > F && null != W.getNameByIndex(F); F++) { + x ? m = W.getCoordByIndex(F) - v / 2 : V = W.getCoordByIndex(F) + v / 2 + for (var z = 0, A = i.length; A > z; z++) { + var M = b[i[z][0]].yAxisIndex || 0, O = b[i[z][0]].xAxisIndex || 0 + s = x ? L.getAxis(M) : _.getAxis(O), d = U = c = p = s.getCoord(0) + for (var P = 0, D = i[z].length; D > P; P++) f = i[z][P], k = b[f], y = k.data[F], g = this.getDataFromOption(y, '-'), o[f] = o[f] || { + min: Number.POSITIVE_INFINITY, + max: Number.NEGATIVE_INFINITY, + sum: 0, + counter: 0, + average: 0 + }, h = Math.min(I[f] || Number.MAX_VALUE, K[f] || J), '-' !== g && (g > 0 ? (l = P > 0 ? s.getCoordSize(g) : x ? d - s.getCoord(g) : s.getCoord(g) - d, 1 === D && C[f] > l && (l = C[f]), x ? (U -= l, V = U) : (m = U, U += l)) : 0 > g ? (l = P > 0 ? s.getCoordSize(g) : x ? s.getCoord(g) - c : c - s.getCoord(g), 1 === D && C[f] > l && (l = C[f]), x ? (V = p, p += l) : (p -= l, m = p)) : (l = 0, x ? (U -= l, V = U) : (m = U, U += l)), o[f][F] = x ? m + h / 2 : V - h / 2, o[f].min > g && (o[f].min = g, x ? (o[f].minY = V, o[f].minX = o[f][F]) : (o[f].minX = m + l, o[f].minY = o[f][F])), o[f].max < g && (o[f].max = g, x ? (o[f].maxY = V, o[f].maxX = o[f][F]) : (o[f].maxX = m + l, o[f].maxY = o[f][F])), o[f].sum += g, o[f].counter++, F % S === 0 && (u = this._getBarItem(f, F, W.getNameByIndex(F), m, V - (x ? 0 : h), x ? h : l, x ? l : h, x ? 'vertical' : 'horizontal'), this.shapeList.push(new n(u)))) + for (var P = 0, D = i[z].length; D > P; P++) f = i[z][P], k = b[f], y = k.data[F], g = this.getDataFromOption(y, '-'), h = Math.min(I[f] || Number.MAX_VALUE, K[f] || J), '-' == g && this.deepQuery([y, k, this.option], 'calculable') && (x ? (U -= E, V = U) : (m = U, U += E), u = this._getBarItem(f, F, W.getNameByIndex(F), m, V - (x ? 0 : h), x ? h : E, x ? E : h, x ? 'vertical' : 'horizontal'), u.hoverable = !1, u.draggable = !1, u.style.lineWidth = 1, u.style.brushType = 'stroke', u.style.strokeColor = k.calculableHolderColor || this.ecTheme.calculableHolderColor || a.calculableHolderColor, this.shapeList.push(new n(u))) + x ? m += h + w : V -= h + w + } + } + this._calculMarkMapXY(o, i, x ? 'y' : 'x') + }, _buildHorizontal: function (e, t, i, n) { + return this._buildNormal(e, t, i, n, 'horizontal') + }, _buildVertical: function (e, t, i, n) { + return this._buildNormal(e, t, i, n, 'vertical') + }, _buildOther: function (e, t, i, a) { + for (var o = this.series, r = 0, s = i.length; s > r; r++) for (var l = 0, h = i[r].length; h > l; l++) { + var m = i[r][l], V = o[m], U = V.xAxisIndex || 0, d = this.component.xAxis.getAxis(U), + p = d.getCoord(0), c = V.yAxisIndex || 0, u = this.component.yAxis.getAxis(c), + y = u.getCoord(0) + a[m] = a[m] || { + min0: Number.POSITIVE_INFINITY, + min1: Number.POSITIVE_INFINITY, + max0: Number.NEGATIVE_INFINITY, + max1: Number.NEGATIVE_INFINITY, + sum0: 0, + sum1: 0, + counter0: 0, + counter1: 0, + average0: 0, + average1: 0 + } + for (var g = 0, b = V.data.length; b > g; g++) { + var f = V.data[g], k = this.getDataFromOption(f, '-') + if (k instanceof Array) { + var x, _, L = d.getCoord(k[0]), W = u.getCoord(k[1]), X = [f, V], + v = this.deepQuery(X, 'barWidth') || 10, w = this.deepQuery(X, 'barHeight') + null != w ? (x = 'horizontal', k[0] > 0 ? (v = L - p, L -= v) : v = k[0] < 0 ? p - L : 0, _ = this._getBarItem(m, g, k[0], L, W - w / 2, v, w, x)) : (x = 'vertical', k[1] > 0 ? w = y - W : k[1] < 0 ? (w = W - y, W -= w) : w = 0, _ = this._getBarItem(m, g, k[0], L - v / 2, W, v, w, x)), this.shapeList.push(new n(_)), L = d.getCoord(k[0]), W = u.getCoord(k[1]), a[m].min0 > k[0] && (a[m].min0 = k[0], a[m].minY0 = W, a[m].minX0 = L), a[m].max0 < k[0] && (a[m].max0 = k[0], a[m].maxY0 = W, a[m].maxX0 = L), a[m].sum0 += k[0], a[m].counter0++, a[m].min1 > k[1] && (a[m].min1 = k[1], a[m].minY1 = W, a[m].minX1 = L), a[m].max1 < k[1] && (a[m].max1 = k[1], a[m].maxY1 = W, a[m].maxX1 = L), a[m].sum1 += k[1], a[m].counter1++ + } + } + } + this._calculMarkMapXY(a, i, 'xy') + }, _mapSize: function (e, t, i) { + var n, a, o = this._findSpecialBarSzie(t, i), r = o.barWidthMap, s = o.barMaxWidthMap, + l = o.barMinHeightMap, h = o.sBarWidthCounter, m = o.sBarWidthTotal, V = o.barGap, + U = o.barCategoryGap, d = 1 + if (t.length != h) { + if (i) n = e.getGap(), V = 0, a = +(n / t.length).toFixed(2), 0 >= a && (d = Math.floor(t.length / n), a = 1) else if (n = 'string' == typeof U && U.match(/%$/) ? (e.getGap() * (100 - parseFloat(U)) / 100).toFixed(2) - 0 : e.getGap() - U, 'string' == typeof V && V.match(/%$/) ? (V = parseFloat(V) / 100, a = +((n - m) / ((t.length - 1) * V + t.length - h)).toFixed(2), V = a * V) : (V = parseFloat(V), a = +((n - m - V * (t.length - 1)) / (t.length - h)).toFixed(2)), 0 >= a) return this._mapSize(e, t, !0) + } else if (n = h > 1 ? 'string' == typeof U && U.match(/%$/) ? +(e.getGap() * (100 - parseFloat(U)) / 100).toFixed(2) : e.getGap() - U : m, a = 0, V = h > 1 ? +((n - m) / (h - 1)).toFixed(2) : 0, 0 > V) return this._mapSize(e, t, !0) + return this._recheckBarMaxWidth(t, r, s, l, n, a, V, d) + }, _findSpecialBarSzie: function (e, t) { + for (var i, n, a, o, r = this.series, s = {}, l = {}, h = {}, m = 0, V = 0, U = 0, d = e.length; d > U; U++) for (var p = { + barWidth: !1, + barMaxWidth: !1 + }, c = 0, u = e[U].length; u > c; c++) { + var y = e[U][c], g = r[y] + if (!t) { + if (p.barWidth) s[y] = i else if (i = this.query(g, 'barWidth'), null != i) { + s[y] = i, V += i, m++, p.barWidth = !0 + for (var b = 0, f = c; f > b; b++) { + var k = e[U][b] + s[k] = i + } + } + if (p.barMaxWidth) l[y] = n else if (n = this.query(g, 'barMaxWidth'), null != n) { + l[y] = n, p.barMaxWidth = !0 + for (var b = 0, f = c; f > b; b++) { + var k = e[U][b] + l[k] = n + } + } + } + h[y] = this.query(g, 'barMinHeight'), a = null != a ? a : this.query(g, 'barGap'), o = null != o ? o : this.query(g, 'barCategoryGap') + } + return { + barWidthMap: s, + barMaxWidthMap: l, + barMinHeightMap: h, + sBarWidth: i, + sBarMaxWidth: n, + sBarWidthCounter: m, + sBarWidthTotal: V, + barGap: a, + barCategoryGap: o + } + }, _recheckBarMaxWidth: function (e, t, i, n, a, o, r, s) { + for (var l = 0, h = e.length; h > l; l++) { + var m = e[l][0] + i[m] && i[m] < o && (a -= o - i[m]) + } + return { + barWidthMap: t, + barMaxWidthMap: i, + barMinHeightMap: n, + gap: a, + barWidth: o, + barGap: r, + interval: s + } + }, _getBarItem: function (e, t, i, n, a, r, l, h) { + var m, V = this.series, U = V[e], d = U.data[t], p = this._sIndex2ColorMap[e], c = [d, U], + u = this.deepMerge(c, 'itemStyle.normal'), y = this.deepMerge(c, 'itemStyle.emphasis'), + g = u.barBorderWidth + m = { + zlevel: U.zlevel, + z: U.z, + clickable: this.deepQuery(c, 'clickable'), + style: { + x: n, + y: a, + width: r, + height: l, + brushType: 'both', + color: this.getItemStyleColor(this.deepQuery(c, 'itemStyle.normal.color') || p, e, t, d), + radius: u.barBorderRadius, + lineWidth: g, + strokeColor: u.barBorderColor + }, + highlightStyle: { + color: this.getItemStyleColor(this.deepQuery(c, 'itemStyle.emphasis.color'), e, t, d), + radius: y.barBorderRadius, + lineWidth: y.barBorderWidth, + strokeColor: y.barBorderColor + }, + _orient: h + } + var b = m.style + m.highlightStyle.color = m.highlightStyle.color || ('string' == typeof b.color ? s.lift(b.color, -.3) : b.color), b.x = Math.floor(b.x), b.y = Math.floor(b.y), b.height = Math.ceil(b.height), b.width = Math.ceil(b.width), g > 0 && b.height > g && b.width > g ? (b.y += g / 2, b.height -= g, b.x += g / 2, b.width -= g) : b.brushType = 'fill', m.highlightStyle.textColor = m.highlightStyle.color, m = this.addLabel(m, U, d, i, h) + for (var f = [b, m.highlightStyle], k = 0, x = f.length; x > k; k++) { + var _ = f[k].textPosition + if ('insideLeft' === _ || 'insideRight' === _ || 'insideTop' === _ || 'insideBottom' === _) { + var L = 5 + switch (_) { + case'insideLeft': + f[k].textX = b.x + L, f[k].textY = b.y + b.height / 2, f[k].textAlign = 'left', f[k].textBaseline = 'middle' + break + case'insideRight': + f[k].textX = b.x + b.width - L, f[k].textY = b.y + b.height / 2, f[k].textAlign = 'right', f[k].textBaseline = 'middle' + break + case'insideTop': + f[k].textX = b.x + b.width / 2, f[k].textY = b.y + L / 2, f[k].textAlign = 'center', f[k].textBaseline = 'top' + break + case'insideBottom': + f[k].textX = b.x + b.width / 2, f[k].textY = b.y + b.height - L / 2, f[k].textAlign = 'center', f[k].textBaseline = 'bottom' + } + f[k].textPosition = 'specific', f[k].textColor = f[k].textColor || '#fff' + } + } + return this.deepQuery([d, U, this.option], 'calculable') && (this.setCalculable(m), m.draggable = !0), o.pack(m, V[e], e, V[e].data[t], t, i), m + }, getMarkCoord: function (e, t) { + var i, n, a = this.series[e], o = this.xMarkMap[e], r = this.component.xAxis.getAxis(a.xAxisIndex), + s = this.component.yAxis.getAxis(a.yAxisIndex) + if (!t.type || 'max' !== t.type && 'min' !== t.type && 'average' !== t.type) if (o.isHorizontal) { + i = 'string' == typeof t.xAxis && r.getIndexByName ? r.getIndexByName(t.xAxis) : t.xAxis || 0 + var l = o[i] + l = null != l ? l : 'string' != typeof t.xAxis && r.getCoordByIndex ? r.getCoordByIndex(t.xAxis || 0) : r.getCoord(t.xAxis || 0), n = [l, s.getCoord(t.yAxis || 0)] + } else { + i = 'string' == typeof t.yAxis && s.getIndexByName ? s.getIndexByName(t.yAxis) : t.yAxis || 0 + var h = o[i] + h = null != h ? h : 'string' != typeof t.yAxis && s.getCoordByIndex ? s.getCoordByIndex(t.yAxis || 0) : s.getCoord(t.yAxis || 0), n = [r.getCoord(t.xAxis || 0), h] + } else { + var m = null != t.valueIndex ? t.valueIndex : null != o.maxX0 ? '1' : '' + n = [o[t.type + 'X' + m], o[t.type + 'Y' + m], o[t.type + 'Line' + m], o[t.type + m]] + } + return n + }, refresh: function (e) { + e && (this.option = e, this.series = e.series), this.backupShapeList(), this._buildShape() + }, addDataAnimation: function (e, t) { + function i () { + c--, 0 === c && t && t() + } + + for (var n = this.series, a = {}, r = 0, s = e.length; s > r; r++) a[e[r][0]] = e[r] + for (var l, h, m, V, U, d, p, c = 0, r = this.shapeList.length - 1; r >= 0; r--) if (d = o.get(this.shapeList[r], 'seriesIndex'), a[d] && !a[d][3] && 'rectangle' === this.shapeList[r].type) { + if (p = o.get(this.shapeList[r], 'dataIndex'), U = n[d], a[d][2] && p === U.data.length - 1) { + this.zr.delShape(this.shapeList[r].id) + continue + } + if (!a[d][2] && 0 === p) { + this.zr.delShape(this.shapeList[r].id) + continue + } + 'horizontal' === this.shapeList[r]._orient ? (V = this.component.yAxis.getAxis(U.yAxisIndex || 0).getGap(), m = a[d][2] ? -V : V, l = 0) : (h = this.component.xAxis.getAxis(U.xAxisIndex || 0).getGap(), l = a[d][2] ? h : -h, m = 0), this.shapeList[r].position = [0, 0], c++, this.zr.animate(this.shapeList[r].id, '').when(this.query(this.option, 'animationDurationUpdate'), { position: [l, m] }).done(i).start() + } + c || t && t() + } + }, r.inherits(t, i), e('../chart').define('bar', t), t + }), i('echarts/chart/scatter', ['require', './base', '../util/shape/Symbol', '../component/axis', '../component/grid', '../component/dataZoom', '../component/dataRange', '../config', 'zrender/tool/util', 'zrender/tool/color', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = e('../util/shape/Symbol') + e('../component/axis'), e('../component/grid'), e('../component/dataZoom'), e('../component/dataRange') + var a = e('../config') + a.scatter = { + zlevel: 0, + z: 2, + clickable: !0, + legendHoverLink: !0, + xAxisIndex: 0, + yAxisIndex: 0, + symbolSize: 4, + large: !1, + largeThreshold: 2e3, + itemStyle: { normal: { label: { show: !1 } }, emphasis: { label: { show: !1 } } } + } + var o = e('zrender/tool/util'), r = e('zrender/tool/color') + return t.prototype = { + type: a.CHART_TYPE_SCATTER, _buildShape: function () { + var e = this.series + this._sIndex2ColorMap = {}, this._symbol = this.option.symbolList, this._sIndex2ShapeMap = {}, this.selectedMap = {}, this.xMarkMap = {} + for (var t, i, n, o, s = this.component.legend, l = [], h = 0, m = e.length; m > h; h++) if (t = e[h], i = t.name, t.type === a.CHART_TYPE_SCATTER) { + if (e[h] = this.reformOption(e[h]), this.legendHoverLink = e[h].legendHoverLink || this.legendHoverLink, this._sIndex2ShapeMap[h] = this.query(t, 'symbol') || this._symbol[h % this._symbol.length], s) { + if (this.selectedMap[i] = s.isSelected(i), this._sIndex2ColorMap[h] = r.alpha(s.getColor(i), .5), n = s.getItemShape(i)) { + var o = this._sIndex2ShapeMap[h] + n.style.brushType = o.match('empty') ? 'stroke' : 'both', o = o.replace('empty', '').toLowerCase(), o.match('rectangle') && (n.style.x += Math.round((n.style.width - n.style.height) / 2), n.style.width = n.style.height), o.match('star') && (n.style.n = o.replace('star', '') - 0 || 5, o = 'star'), o.match('image') && (n.style.image = o.replace(new RegExp('^image:\\/\\/'), ''), n.style.x += Math.round((n.style.width - n.style.height) / 2), n.style.width = n.style.height, o = 'image'), n.style.iconType = o, s.setItemShape(i, n) + } + } else this.selectedMap[i] = !0, this._sIndex2ColorMap[h] = r.alpha(this.zr.getColor(h), .5) + this.selectedMap[i] && l.push(h) + } + this._buildSeries(l), this.addShapeList() + }, _buildSeries: function (e) { + if (0 !== e.length) { + for (var t, i, n, a, o, r, s, l, h = this.series, m = {}, V = 0, U = e.length; U > V; V++) if (t = e[V], i = h[t], 0 !== i.data.length) { + o = this.component.xAxis.getAxis(i.xAxisIndex || 0), r = this.component.yAxis.getAxis(i.yAxisIndex || 0), m[t] = [] + for (var d = 0, p = i.data.length; p > d; d++) n = i.data[d], a = this.getDataFromOption(n, '-'), '-' === a || a.length < 2 || (s = o.getCoord(a[0]), l = r.getCoord(a[1]), m[t].push([s, l, d, n.name || ''])) + this.xMarkMap[t] = this._markMap(o, r, i.data, m[t]), this.buildMark(t) + } + this._buildPointList(m) + } + }, _markMap: function (e, t, i, n) { + for (var a, o = { + min0: Number.POSITIVE_INFINITY, + max0: Number.NEGATIVE_INFINITY, + sum0: 0, + counter0: 0, + average0: 0, + min1: Number.POSITIVE_INFINITY, + max1: Number.NEGATIVE_INFINITY, + sum1: 0, + counter1: 0, + average1: 0 + }, r = 0, s = n.length; s > r; r++) a = i[n[r][2]].value || i[n[r][2]], o.min0 > a[0] && (o.min0 = a[0], o.minY0 = n[r][1], o.minX0 = n[r][0]), o.max0 < a[0] && (o.max0 = a[0], o.maxY0 = n[r][1], o.maxX0 = n[r][0]), o.sum0 += a[0], o.counter0++, o.min1 > a[1] && (o.min1 = a[1], o.minY1 = n[r][1], o.minX1 = n[r][0]), o.max1 < a[1] && (o.max1 = a[1], o.maxY1 = n[r][1], o.maxX1 = n[r][0]), o.sum1 += a[1], o.counter1++ + var l = this.component.grid.getX(), h = this.component.grid.getXend(), m = this.component.grid.getY(), + V = this.component.grid.getYend() + o.average0 = o.sum0 / o.counter0 + var U = e.getCoord(o.average0) + o.averageLine0 = [[U, V], [U, m]], o.minLine0 = [[o.minX0, V], [o.minX0, m]], o.maxLine0 = [[o.maxX0, V], [o.maxX0, m]], o.average1 = o.sum1 / o.counter1 + var d = t.getCoord(o.average1) + return o.averageLine1 = [[l, d], [h, d]], o.minLine1 = [[l, o.minY1], [h, o.minY1]], o.maxLine1 = [[l, o.maxY1], [h, o.maxY1]], o + }, _buildPointList: function (e) { + var t, i, n, a, o = this.series + for (var r in e) if (t = o[r], i = e[r], t.large && t.data.length > t.largeThreshold) this.shapeList.push(this._getLargeSymbol(t, i, this.getItemStyleColor(this.query(t, 'itemStyle.normal.color'), r, -1) || this._sIndex2ColorMap[r])) else for (var s = 0, l = i.length; l > s; s++) n = i[s], a = this._getSymbol(r, n[2], n[3], n[0], n[1]), a && this.shapeList.push(a) + }, _getSymbol: function (e, t, i, n, a) { + var o, r = this.series, s = r[e], l = s.data[t], h = this.component.dataRange + if (h) { + if (o = isNaN(l[2]) ? this._sIndex2ColorMap[e] : h.getColor(l[2]), !o) return null + } else o = this._sIndex2ColorMap[e] + var m = this.getSymbolShape(s, e, l, t, i, n, a, this._sIndex2ShapeMap[e], o, 'rgba(0,0,0,0)', 'vertical') + return m.zlevel = s.zlevel, m.z = s.z, m._main = !0, m + }, _getLargeSymbol: function (e, t, i) { + return new n({ + zlevel: e.zlevel, + z: e.z, + _main: !0, + hoverable: !1, + style: { pointList: t, color: i, strokeColor: i }, + highlightStyle: { pointList: [] } + }) + }, getMarkCoord: function (e, t) { + var i, n = this.series[e], a = this.xMarkMap[e], o = this.component.xAxis.getAxis(n.xAxisIndex), + r = this.component.yAxis.getAxis(n.yAxisIndex) + if (!t.type || 'max' !== t.type && 'min' !== t.type && 'average' !== t.type) i = ['string' != typeof t.xAxis && o.getCoordByIndex ? o.getCoordByIndex(t.xAxis || 0) : o.getCoord(t.xAxis || 0), 'string' != typeof t.yAxis && r.getCoordByIndex ? r.getCoordByIndex(t.yAxis || 0) : r.getCoord(t.yAxis || 0)] else { + var s = null != t.valueIndex ? t.valueIndex : 1 + i = [a[t.type + 'X' + s], a[t.type + 'Y' + s], a[t.type + 'Line' + s], a[t.type + s]] + } + return i + }, refresh: function (e) { + e && (this.option = e, this.series = e.series), this.backupShapeList(), this._buildShape() + }, ondataRange: function (e, t) { + this.component.dataRange && (this.refresh(), t.needRefresh = !0) + } + }, o.inherits(t, i), e('../chart').define('scatter', t), t + }), i('echarts/component/dataRange', ['require', './base', 'zrender/shape/Text', 'zrender/shape/Rectangle', '../util/shape/HandlePolygon', '../config', 'zrender/tool/util', 'zrender/tool/event', 'zrender/tool/area', 'zrender/tool/color', '../component'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o) + var s = this + s._ondrift = function (e, t) { + return s.__ondrift(this, e, t) + }, s._ondragend = function () { + return s.__ondragend() + }, s._dataRangeSelected = function (e) { + return s.__dataRangeSelected(e) + }, s._dispatchHoverLink = function (e) { + return s.__dispatchHoverLink(e) + }, s._onhoverlink = function (e) { + return s.__onhoverlink(e) + + }, this._selectedMap = {}, this._range = {}, this.refresh(a), t.bind(r.EVENT.HOVER, this._onhoverlink) + } + + var i = e('./base'), n = e('zrender/shape/Text'), a = e('zrender/shape/Rectangle'), + o = e('../util/shape/HandlePolygon'), r = e('../config') + r.dataRange = { + zlevel: 0, + z: 4, + show: !0, + orient: 'vertical', + x: 'left', + y: 'bottom', + backgroundColor: 'rgba(0,0,0,0)', + borderColor: '#ccc', + borderWidth: 0, + padding: 5, + itemGap: 10, + itemWidth: 20, + itemHeight: 14, + precision: 0, + splitNumber: 5, + splitList: null, + calculable: !1, + selectedMode: !0, + hoverLink: !0, + realtime: !0, + color: ['#006edd', '#e0ffff'], + textStyle: { color: '#333' } + } + var s = e('zrender/tool/util'), l = e('zrender/tool/event'), h = e('zrender/tool/area'), + m = e('zrender/tool/color') + return t.prototype = { + type: r.COMPONENT_TYPE_DATARANGE, _textGap: 10, _buildShape: function () { + if (this._itemGroupLocation = this._getItemGroupLocation(), this._buildBackground(), this._isContinuity() ? this._buildGradient() : this._buildItem(), this.dataRangeOption.show) for (var e = 0, t = this.shapeList.length; t > e; e++) this.zr.addShape(this.shapeList[e]) + this._syncShapeFromRange() + }, _buildItem: function () { + var e, t, i, o, r = this._valueTextList, s = r.length, l = this.getFont(this.dataRangeOption.textStyle), + m = this._itemGroupLocation.x, V = this._itemGroupLocation.y, U = this.dataRangeOption.itemWidth, + d = this.dataRangeOption.itemHeight, p = this.dataRangeOption.itemGap, c = h.getTextHeight('国', l) + 'vertical' == this.dataRangeOption.orient && 'right' == this.dataRangeOption.x && (m = this._itemGroupLocation.x + this._itemGroupLocation.width - U) + var u = !0 + this.dataRangeOption.text && (u = !1, this.dataRangeOption.text[0] && (i = this._getTextShape(m, V, this.dataRangeOption.text[0]), 'horizontal' == this.dataRangeOption.orient ? m += h.getTextWidth(this.dataRangeOption.text[0], l) + this._textGap : (V += c + this._textGap, i.style.y += c / 2 + this._textGap, i.style.textBaseline = 'bottom'), this.shapeList.push(new n(i)))) + for (var y = 0; s > y; y++) e = r[y], o = this.getColorByIndex(y), t = this._getItemShape(m, V, U, d, this._selectedMap[y] ? o : '#ccc'), t._idx = y, t.onmousemove = this._dispatchHoverLink, this.dataRangeOption.selectedMode && (t.clickable = !0, t.onclick = this._dataRangeSelected), this.shapeList.push(new a(t)), u && (i = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { + x: m + U + 5, + y: V, + color: this._selectedMap[y] ? this.dataRangeOption.textStyle.color : '#ccc', + text: r[y], + textFont: l, + textBaseline: 'top' + }, + highlightStyle: { brushType: 'fill' } + }, 'vertical' == this.dataRangeOption.orient && 'right' == this.dataRangeOption.x && (i.style.x -= U + 10, i.style.textAlign = 'right'), i._idx = y, i.onmousemove = this._dispatchHoverLink, this.dataRangeOption.selectedMode && (i.clickable = !0, i.onclick = this._dataRangeSelected), this.shapeList.push(new n(i))), 'horizontal' == this.dataRangeOption.orient ? m += U + (u ? 5 : 0) + (u ? h.getTextWidth(e, l) : 0) + p : V += d + p + !u && this.dataRangeOption.text[1] && ('horizontal' == this.dataRangeOption.orient ? m = m - p + this._textGap : V = V - p + this._textGap, i = this._getTextShape(m, V, this.dataRangeOption.text[1]), 'horizontal' != this.dataRangeOption.orient && (i.style.y -= 5, i.style.textBaseline = 'top'), this.shapeList.push(new n(i))) + }, _buildGradient: function () { + var t, i, o = this.getFont(this.dataRangeOption.textStyle), r = this._itemGroupLocation.x, + s = this._itemGroupLocation.y, l = this.dataRangeOption.itemWidth, + m = this.dataRangeOption.itemHeight, V = h.getTextHeight('国', o), U = 10, d = !0 + this.dataRangeOption.text && (d = !1, this.dataRangeOption.text[0] && (i = this._getTextShape(r, s, this.dataRangeOption.text[0]), 'horizontal' == this.dataRangeOption.orient ? r += h.getTextWidth(this.dataRangeOption.text[0], o) + this._textGap : (s += V + this._textGap, i.style.y += V / 2 + this._textGap, i.style.textBaseline = 'bottom'), this.shapeList.push(new n(i)))) + for (var p = e('zrender/tool/color'), c = 1 / (this.dataRangeOption.color.length - 1), u = [], y = 0, g = this.dataRangeOption.color.length; g > y; y++) u.push([y * c, this.dataRangeOption.color[y]]) + 'horizontal' == this.dataRangeOption.orient ? (t = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { x: r, y: s, width: l * U, height: m, color: p.getLinearGradient(r, s, r + l * U, s, u) }, + hoverable: !1 + }, r += l * U + this._textGap) : (t = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { x: r, y: s, width: l, height: m * U, color: p.getLinearGradient(r, s, r, s + m * U, u) }, + hoverable: !1 + }, s += m * U + this._textGap), this.shapeList.push(new a(t)), this._calculableLocation = t.style, this.dataRangeOption.calculable && (this._buildFiller(), this._bulidMask(), this._bulidHandle()), this._buildIndicator(), !d && this.dataRangeOption.text[1] && (i = this._getTextShape(r, s, this.dataRangeOption.text[1]), this.shapeList.push(new n(i))) + }, _buildIndicator: function () { + var e, t, i = this._calculableLocation.x, n = this._calculableLocation.y, + a = this._calculableLocation.width, r = this._calculableLocation.height, s = 5 + 'horizontal' == this.dataRangeOption.orient ? 'bottom' != this.dataRangeOption.y ? (e = [[i, n + r], [i - s, n + r + s], [i + s, n + r + s]], t = 'bottom') : (e = [[i, n], [i - s, n - s], [i + s, n - s]], t = 'top') : 'right' != this.dataRangeOption.x ? (e = [[i + a, n], [i + a + s, n - s], [i + a + s, n + s]], t = 'right') : (e = [[i, n], [i - s, n - s], [i - s, n + s]], t = 'left'), this._indicatorShape = { + style: { + pointList: e, + color: '#fff', + __rect: { + x: Math.min(e[0][0], e[1][0]), + y: Math.min(e[0][1], e[1][1]), + width: s * ('horizontal' == this.dataRangeOption.orient ? 2 : 1), + height: s * ('horizontal' == this.dataRangeOption.orient ? 1 : 2) + } + }, + highlightStyle: { + brushType: 'fill', + textPosition: t, + textColor: this.dataRangeOption.textStyle.color + }, + hoverable: !1 + }, this._indicatorShape = new o(this._indicatorShape) + }, _buildFiller: function () { + this._fillerShape = { + zlevel: this.getZlevelBase(), + z: this.getZBase() + 1, + style: { + x: this._calculableLocation.x, + y: this._calculableLocation.y, + width: this._calculableLocation.width, + height: this._calculableLocation.height, + color: 'rgba(255,255,255,0)' + }, + highlightStyle: { strokeColor: 'rgba(255,255,255,0.5)', lineWidth: 1 }, + draggable: !0, + ondrift: this._ondrift, + ondragend: this._ondragend, + onmousemove: this._dispatchHoverLink, + _type: 'filler' + }, this._fillerShape = new a(this._fillerShape), this.shapeList.push(this._fillerShape) + }, _bulidHandle: function () { + var e, t, i, n, a, r, s, l, m = this._calculableLocation.x, V = this._calculableLocation.y, + U = this._calculableLocation.width, d = this._calculableLocation.height, + p = this.getFont(this.dataRangeOption.textStyle), c = h.getTextHeight('国', p), + u = Math.max(h.getTextWidth(this._textFormat(this.dataRangeOption.max), p), h.getTextWidth(this._textFormat(this.dataRangeOption.min), p)) + 2 + 'horizontal' == this.dataRangeOption.orient ? 'bottom' != this.dataRangeOption.y ? (e = [[m, V], [m, V + d + c], [m - c, V + d + c], [m - 1, V + d], [m - 1, V]], t = m - u / 2 - c, i = V + d + c / 2 + 2, n = { + x: m - u - c, + y: V + d, + width: u + c, + height: c + }, a = [[m + U, V], [m + U, V + d + c], [m + U + c, V + d + c], [m + U + 1, V + d], [m + U + 1, V]], r = m + U + u / 2 + c, s = i, l = { + x: m + U, + y: V + d, + width: u + c, + height: c + }) : (e = [[m, V + d], [m, V - c], [m - c, V - c], [m - 1, V], [m - 1, V + d]], t = m - u / 2 - c, i = V - c / 2 - 2, n = { + x: m - u - c, + y: V - c, + width: u + c, + height: c + }, a = [[m + U, V + d], [m + U, V - c], [m + U + c, V - c], [m + U + 1, V], [m + U + 1, V + d]], r = m + U + u / 2 + c, s = i, l = { + x: m + U, + y: V - c, + width: u + c, + height: c + }) : (u += c, 'right' != this.dataRangeOption.x ? (e = [[m, V], [m + U + c, V], [m + U + c, V - c], [m + U, V - 1], [m, V - 1]], t = m + U + u / 2 + c / 2, i = V - c / 2, n = { + x: m + U, + y: V - c, + width: u + c, + height: c + }, a = [[m, V + d], [m + U + c, V + d], [m + U + c, V + c + d], [m + U, V + 1 + d], [m, V + d + 1]], r = t, s = V + d + c / 2, l = { + x: m + U, + y: V + d, + width: u + c, + height: c + }) : (e = [[m + U, V], [m - c, V], [m - c, V - c], [m, V - 1], [m + U, V - 1]], t = m - u / 2 - c / 2, i = V - c / 2, n = { + x: m - u - c, + y: V - c, + width: u + c, + height: c + }, a = [[m + U, V + d], [m - c, V + d], [m - c, V + c + d], [m, V + 1 + d], [m + U, V + d + 1]], r = t, s = V + d + c / 2, l = { + x: m - u - c, + y: V + d, + width: u + c, + height: c + })), this._startShape = { + style: { + pointList: e, + text: this._textFormat(this.dataRangeOption.max), + textX: t, + textY: i, + textFont: p, + color: this.getColor(this.dataRangeOption.max), + rect: n, + x: e[0][0], + y: e[0][1], + _x: e[0][0], + _y: e[0][1] + } + }, this._startShape.highlightStyle = { + strokeColor: this._startShape.style.color, + lineWidth: 1 + }, this._endShape = { + style: { + pointList: a, + text: this._textFormat(this.dataRangeOption.min), + textX: r, + textY: s, + textFont: p, + color: this.getColor(this.dataRangeOption.min), + rect: l, + x: a[0][0], + y: a[0][1], + _x: a[0][0], + _y: a[0][1] + } + }, this._endShape.highlightStyle = { + strokeColor: this._endShape.style.color, + lineWidth: 1 + }, this._startShape.zlevel = this._endShape.zlevel = this.getZlevelBase(), this._startShape.z = this._endShape.z = this.getZBase() + 1, this._startShape.draggable = this._endShape.draggable = !0, this._startShape.ondrift = this._endShape.ondrift = this._ondrift, this._startShape.ondragend = this._endShape.ondragend = this._ondragend, this._startShape.style.textColor = this._endShape.style.textColor = this.dataRangeOption.textStyle.color, this._startShape.style.textAlign = this._endShape.style.textAlign = 'center', this._startShape.style.textPosition = this._endShape.style.textPosition = 'specific', this._startShape.style.textBaseline = this._endShape.style.textBaseline = 'middle', this._startShape.style.width = this._endShape.style.width = 0, this._startShape.style.height = this._endShape.style.height = 0, this._startShape.style.textPosition = this._endShape.style.textPosition = 'specific', this._startShape = new o(this._startShape), this._endShape = new o(this._endShape), this.shapeList.push(this._startShape), this.shapeList.push(this._endShape) + }, _bulidMask: function () { + var e = this._calculableLocation.x, t = this._calculableLocation.y, i = this._calculableLocation.width, + n = this._calculableLocation.height + this._startMask = { + zlevel: this.getZlevelBase(), + z: this.getZBase() + 1, + style: { + x: e, + y: t, + width: 'horizontal' == this.dataRangeOption.orient ? 0 : i, + height: 'horizontal' == this.dataRangeOption.orient ? n : 0, + color: '#ccc' + }, + hoverable: !1 + }, this._endMask = { + zlevel: this.getZlevelBase(), + z: this.getZBase() + 1, + style: { + x: 'horizontal' == this.dataRangeOption.orient ? e + i : e, + y: 'horizontal' == this.dataRangeOption.orient ? t : t + n, + width: 'horizontal' == this.dataRangeOption.orient ? 0 : i, + height: 'horizontal' == this.dataRangeOption.orient ? n : 0, + color: '#ccc' + }, + hoverable: !1 + }, this._startMask = new a(this._startMask), this._endMask = new a(this._endMask), this.shapeList.push(this._startMask), this.shapeList.push(this._endMask) + }, _buildBackground: function () { + var e = this.reformCssArray(this.dataRangeOption.padding) + this.shapeList.push(new a({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + x: this._itemGroupLocation.x - e[3], + y: this._itemGroupLocation.y - e[0], + width: this._itemGroupLocation.width + e[3] + e[1], + height: this._itemGroupLocation.height + e[0] + e[2], + brushType: 0 === this.dataRangeOption.borderWidth ? 'fill' : 'both', + color: this.dataRangeOption.backgroundColor, + strokeColor: this.dataRangeOption.borderColor, + lineWidth: this.dataRangeOption.borderWidth + } + })) + }, _getItemGroupLocation: function () { + var e = this._valueTextList, t = e.length, i = this.dataRangeOption.itemGap, + n = this.dataRangeOption.itemWidth, a = this.dataRangeOption.itemHeight, o = 0, r = 0, + s = this.getFont(this.dataRangeOption.textStyle), l = h.getTextHeight('国', s), m = 10 + if ('horizontal' == this.dataRangeOption.orient) { + if (this.dataRangeOption.text || this._isContinuity()) o = (this._isContinuity() ? n * m + i : t * (n + i)) + (this.dataRangeOption.text && 'undefined' != typeof this.dataRangeOption.text[0] ? h.getTextWidth(this.dataRangeOption.text[0], s) + this._textGap : 0) + (this.dataRangeOption.text && 'undefined' != typeof this.dataRangeOption.text[1] ? h.getTextWidth(this.dataRangeOption.text[1], s) + this._textGap : 0) else { + n += 5 + for (var V = 0; t > V; V++) o += n + h.getTextWidth(e[V], s) + i + } + o -= i, r = Math.max(l, a) + } else { + var U + if (this.dataRangeOption.text || this._isContinuity()) r = (this._isContinuity() ? a * m + i : t * (a + i)) + (this.dataRangeOption.text && 'undefined' != typeof this.dataRangeOption.text[0] ? this._textGap + l : 0) + (this.dataRangeOption.text && 'undefined' != typeof this.dataRangeOption.text[1] ? this._textGap + l : 0), U = Math.max(h.getTextWidth(this.dataRangeOption.text && this.dataRangeOption.text[0] || '', s), h.getTextWidth(this.dataRangeOption.text && this.dataRangeOption.text[1] || '', s)), o = Math.max(n, U) else { + r = (a + i) * t, n += 5, U = 0 + for (var V = 0; t > V; V++) U = Math.max(U, h.getTextWidth(e[V], s)) + o = n + U + } + r -= i + } + var d, p = this.reformCssArray(this.dataRangeOption.padding), c = this.zr.getWidth() + switch (this.dataRangeOption.x) { + case'center': + d = Math.floor((c - o) / 2) + break + case'left': + d = p[3] + this.dataRangeOption.borderWidth + break + case'right': + d = c - o - p[1] - this.dataRangeOption.borderWidth + break + default: + d = this.parsePercent(this.dataRangeOption.x, c), d = isNaN(d) ? 0 : d + } + var u, y = this.zr.getHeight() + switch (this.dataRangeOption.y) { + case'top': + u = p[0] + this.dataRangeOption.borderWidth + break + case'bottom': + u = y - r - p[2] - this.dataRangeOption.borderWidth + break + case'center': + u = Math.floor((y - r) / 2) + break + default: + u = this.parsePercent(this.dataRangeOption.y, y), u = isNaN(u) ? 0 : u + } + if (this.dataRangeOption.calculable) { + var g = Math.max(h.getTextWidth(this.dataRangeOption.max, s), h.getTextWidth(this.dataRangeOption.min, s)) + l + 'horizontal' == this.dataRangeOption.orient ? (g > d && (d = g), d + o + g > c && (d -= g)) : (l > u && (u = l), u + r + l > y && (u -= l)) + } + return { x: d, y: u, width: o, height: r } + }, _getTextShape: function (e, t, i) { + return { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { + x: 'horizontal' == this.dataRangeOption.orient ? e : this._itemGroupLocation.x + this._itemGroupLocation.width / 2, + y: 'horizontal' == this.dataRangeOption.orient ? this._itemGroupLocation.y + this._itemGroupLocation.height / 2 : t, + color: this.dataRangeOption.textStyle.color, + text: i, + textFont: this.getFont(this.dataRangeOption.textStyle), + textBaseline: 'horizontal' == this.dataRangeOption.orient ? 'middle' : 'top', + textAlign: 'horizontal' == this.dataRangeOption.orient ? 'left' : 'center' + }, + hoverable: !1 + } + }, _getItemShape: function (e, t, i, n, a) { + return { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { x: e, y: t + 1, width: i, height: n - 2, color: a }, + highlightStyle: { strokeColor: a, lineWidth: 1 } + } + }, __ondrift: function (e, t, i) { + var n = this._calculableLocation.x, a = this._calculableLocation.y, o = this._calculableLocation.width, + r = this._calculableLocation.height + return 'horizontal' == this.dataRangeOption.orient ? e.style.x + t <= n ? e.style.x = n : e.style.x + t + e.style.width >= n + o ? e.style.x = n + o - e.style.width : e.style.x += t : e.style.y + i <= a ? e.style.y = a : e.style.y + i + e.style.height >= a + r ? e.style.y = a + r - e.style.height : e.style.y += i, 'filler' == e._type ? this._syncHandleShape() : this._syncFillerShape(e), this.dataRangeOption.realtime && this._dispatchDataRange(), !0 + }, __ondragend: function () { + this.isDragend = !0 + }, ondragend: function (e, t) { + this.isDragend && e.target && (t.dragOut = !0, t.dragIn = !0, this.dataRangeOption.realtime || this._dispatchDataRange(), t.needRefresh = !1, this.isDragend = !1) + }, _syncShapeFromRange: function () { + var e = this.dataRangeOption.range || {}, t = e.start, i = e.end + if (t > i && (t = [i, i = t][0]), this._range.end = null != t ? t : null != this._range.end ? this._range.end : 0, this._range.start = null != i ? i : null != this._range.start ? this._range.start : 100, 100 != this._range.start || 0 !== this._range.end) { + if ('horizontal' == this.dataRangeOption.orient) { + var n = this._fillerShape.style.width + this._fillerShape.style.x += n * (100 - this._range.start) / 100, this._fillerShape.style.width = n * (this._range.start - this._range.end) / 100 + } else { + var a = this._fillerShape.style.height + this._fillerShape.style.y += a * (100 - this._range.start) / 100, this._fillerShape.style.height = a * (this._range.start - this._range.end) / 100 + } + this.zr.modShape(this._fillerShape.id), this._syncHandleShape() + } + }, _syncHandleShape: function () { + var e = this._calculableLocation.x, t = this._calculableLocation.y, i = this._calculableLocation.width, + n = this._calculableLocation.height + 'horizontal' == this.dataRangeOption.orient ? (this._startShape.style.x = this._fillerShape.style.x, this._startMask.style.width = this._startShape.style.x - e, this._endShape.style.x = this._fillerShape.style.x + this._fillerShape.style.width, this._endMask.style.x = this._endShape.style.x, this._endMask.style.width = e + i - this._endShape.style.x, this._range.start = Math.ceil(100 - (this._startShape.style.x - e) / i * 100), this._range.end = Math.floor(100 - (this._endShape.style.x - e) / i * 100)) : (this._startShape.style.y = this._fillerShape.style.y, this._startMask.style.height = this._startShape.style.y - t, this._endShape.style.y = this._fillerShape.style.y + this._fillerShape.style.height, this._endMask.style.y = this._endShape.style.y, this._endMask.style.height = t + n - this._endShape.style.y, this._range.start = Math.ceil(100 - (this._startShape.style.y - t) / n * 100), this._range.end = Math.floor(100 - (this._endShape.style.y - t) / n * 100)), this._syncShape() + }, _syncFillerShape: function (e) { + var t, i, n = this._calculableLocation.x, a = this._calculableLocation.y, + o = this._calculableLocation.width, r = this._calculableLocation.height + 'horizontal' == this.dataRangeOption.orient ? (t = this._startShape.style.x, i = this._endShape.style.x, e.id == this._startShape.id && t >= i ? (i = t, this._endShape.style.x = t) : e.id == this._endShape.id && t >= i && (t = i, this._startShape.style.x = t), this._fillerShape.style.x = t, this._fillerShape.style.width = i - t, this._startMask.style.width = t - n, this._endMask.style.x = i, this._endMask.style.width = n + o - i, this._range.start = Math.ceil(100 - (t - n) / o * 100), this._range.end = Math.floor(100 - (i - n) / o * 100)) : (t = this._startShape.style.y, i = this._endShape.style.y, e.id == this._startShape.id && t >= i ? (i = t, this._endShape.style.y = t) : e.id == this._endShape.id && t >= i && (t = i, this._startShape.style.y = t), this._fillerShape.style.y = t, this._fillerShape.style.height = i - t, this._startMask.style.height = t - a, this._endMask.style.y = i, this._endMask.style.height = a + r - i, this._range.start = Math.ceil(100 - (t - a) / r * 100), this._range.end = Math.floor(100 - (i - a) / r * 100)), this._syncShape() + }, _syncShape: function () { + this._startShape.position = [this._startShape.style.x - this._startShape.style._x, this._startShape.style.y - this._startShape.style._y], this._startShape.style.text = this._textFormat(this._gap * this._range.start + this.dataRangeOption.min), this._startShape.style.color = this._startShape.highlightStyle.strokeColor = this.getColor(this._gap * this._range.start + this.dataRangeOption.min), this._endShape.position = [this._endShape.style.x - this._endShape.style._x, this._endShape.style.y - this._endShape.style._y], this._endShape.style.text = this._textFormat(this._gap * this._range.end + this.dataRangeOption.min), this._endShape.style.color = this._endShape.highlightStyle.strokeColor = this.getColor(this._gap * this._range.end + this.dataRangeOption.min), this.zr.modShape(this._startShape.id), this.zr.modShape(this._endShape.id), this.zr.modShape(this._startMask.id), this.zr.modShape(this._endMask.id), this.zr.modShape(this._fillerShape.id), this.zr.refreshNextFrame() + }, _dispatchDataRange: function () { + this.messageCenter.dispatch(r.EVENT.DATA_RANGE, null, { + range: { + start: this._range.end, + end: this._range.start + } + }, this.myChart) + }, __dataRangeSelected: function (e) { + if ('single' === this.dataRangeOption.selectedMode) for (var t in this._selectedMap) this._selectedMap[t] = !1 + var i = e.target._idx + this._selectedMap[i] = !this._selectedMap[i] + var n, a + this._useCustomizedSplit() ? (n = this._splitList[i].max, a = this._splitList[i].min) : (n = (this._colorList.length - i) * this._gap + this.dataRangeOption.min, a = n - this._gap), this.messageCenter.dispatch(r.EVENT.DATA_RANGE_SELECTED, e.event, { + selected: this._selectedMap, + target: i, + valueMax: n, + valueMin: a + }, this.myChart), this.messageCenter.dispatch(r.EVENT.REFRESH, null, null, this.myChart) + }, __dispatchHoverLink: function (e) { + var t, i + if (this.dataRangeOption.calculable) { + var n, a = this.dataRangeOption.max - this.dataRangeOption.min + n = 'horizontal' == this.dataRangeOption.orient ? (1 - (l.getX(e.event) - this._calculableLocation.x) / this._calculableLocation.width) * a : (1 - (l.getY(e.event) - this._calculableLocation.y) / this._calculableLocation.height) * a, t = n - .05 * a, i = n + .05 * a + } else if (this._useCustomizedSplit()) { + var o = e.target._idx + i = this._splitList[o].max, t = this._splitList[o].min + } else { + var o = e.target._idx + i = (this._colorList.length - o) * this._gap + this.dataRangeOption.min, t = i - this._gap + } + this.messageCenter.dispatch(r.EVENT.DATA_RANGE_HOVERLINK, e.event, { + valueMin: t, + valueMax: i + }, this.myChart) + }, __onhoverlink: function (e) { + if (this.dataRangeOption.show && this.dataRangeOption.hoverLink && this._indicatorShape && e && null != e.seriesIndex && null != e.dataIndex) { + var t = e.value + if ('' === t || isNaN(t)) return + t < this.dataRangeOption.min ? t = this.dataRangeOption.min : t > this.dataRangeOption.max && (t = this.dataRangeOption.max), this._indicatorShape.position = 'horizontal' == this.dataRangeOption.orient ? [(this.dataRangeOption.max - t) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._calculableLocation.width, 0] : [0, (this.dataRangeOption.max - t) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._calculableLocation.height], this._indicatorShape.style.text = this._textFormat(e.value), this._indicatorShape.style.color = this.getColor(t), this.zr.addHoverShape(this._indicatorShape) + } + }, _textFormat: function (e, t) { + var i = this.dataRangeOption + if (e !== -Number.MAX_VALUE && (e = (+e).toFixed(i.precision)), null != t && t !== Number.MAX_VALUE && (t = (+t).toFixed(i.precision)), i.formatter) { + if ('string' == typeof i.formatter) return i.formatter.replace('{value}', e === -Number.MAX_VALUE ? 'min' : e).replace('{value2}', t === Number.MAX_VALUE ? 'max' : t) + if ('function' == typeof i.formatter) return i.formatter.call(this.myChart, e, t) + } + return null == t ? e : e === -Number.MAX_VALUE ? '< ' + t : t === Number.MAX_VALUE ? '> ' + e : e + ' - ' + t + }, _isContinuity: function () { + var e = this.dataRangeOption + return !(e.splitList ? e.splitList.length > 0 : e.splitNumber > 0) || e.calculable + }, _useCustomizedSplit: function () { + var e = this.dataRangeOption + return e.splitList && e.splitList.length > 0 + }, _buildColorList: function (e) { + if (this._colorList = m.getGradientColors(this.dataRangeOption.color, Math.max((e - this.dataRangeOption.color.length) / (this.dataRangeOption.color.length - 1), 0) + 1), this._colorList.length > e) { + for (var t = this._colorList.length, i = [this._colorList[0]], n = t / (e - 1), a = 1; e - 1 > a; a++) i.push(this._colorList[Math.floor(a * n)]) + i.push(this._colorList[t - 1]), this._colorList = i + } + if (this._useCustomizedSplit()) for (var o = this._splitList, a = 0, t = o.length; t > a; a++) o[a].color && (this._colorList[a] = o[a].color) + }, _buildGap: function (e) { + if (!this._useCustomizedSplit()) { + var t = this.dataRangeOption.precision + for (this._gap = (this.dataRangeOption.max - this.dataRangeOption.min) / e; this._gap.toFixed(t) - 0 != this._gap && 5 > t;) t++ + this.dataRangeOption.precision = t, this._gap = ((this.dataRangeOption.max - this.dataRangeOption.min) / e).toFixed(t) - 0 + } + }, _buildDataList: function (e) { + for (var t = this._valueTextList = [], i = this.dataRangeOption, n = this._useCustomizedSplit(), a = 0; e > a; a++) { + this._selectedMap[a] = !0 + var o = '' + if (n) { + var r = this._splitList[e - 1 - a] + o = null != r.label ? r.label : null != r.single ? this._textFormat(r.single) : this._textFormat(r.min, r.max) + } else o = this._textFormat(a * this._gap + i.min, (a + 1) * this._gap + i.min) + t.unshift(o) + } + }, _buildSplitList: function () { + if (this._useCustomizedSplit()) for (var e = this.dataRangeOption.splitList, t = this._splitList = [], i = 0, n = e.length; n > i; i++) { + var a = e[i] + if (!a || null == a.start && null == a.end) throw new Error('Empty item exists in splitList!') + var o = { label: a.label, color: a.color } + o.min = a.start, o.max = a.end, o.min > o.max && (o.min = [o.max, o.max = o.min][0]), o.min === o.max && (o.single = o.max), null == o.min && (o.min = -Number.MAX_VALUE), null == o.max && (o.max = Number.MAX_VALUE), t.push(o) + } + }, refresh: function (e) { + if (e) { + this.option = e, this.option.dataRange = this.reformOption(this.option.dataRange) + var t = this.dataRangeOption = this.option.dataRange + if (!this._useCustomizedSplit() && (null == t.min || null == t.max)) throw new Error('option.dataRange.min or option.dataRange.max has not been defined.') + this.myChart.canvasSupported || (t.realtime = !1) + var i = this._isContinuity() ? 100 : this._useCustomizedSplit() ? t.splitList.length : t.splitNumber + this._buildSplitList(), this._buildColorList(i), this._buildGap(i), this._buildDataList(i) + } + this.clear(), this._buildShape() + }, getColor: function (e) { + if (isNaN(e)) return null + var t + if (this._useCustomizedSplit()) { + for (var i = this._splitList, n = 0, a = i.length; a > n; n++) if (i[n].min <= e && i[n].max >= e) { + t = n + break + } + } else { + if (this.dataRangeOption.min == this.dataRangeOption.max) return this._colorList[0] + if (e < this.dataRangeOption.min ? e = this.dataRangeOption.min : e > this.dataRangeOption.max && (e = this.dataRangeOption.max), this.dataRangeOption.calculable && (e - (this._gap * this._range.start + this.dataRangeOption.min) > 5e-5 || e - (this._gap * this._range.end + this.dataRangeOption.min) < -5e-5)) return null + t = this._colorList.length - Math.ceil((e - this.dataRangeOption.min) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._colorList.length), t == this._colorList.length && t-- + } + return this._selectedMap[t] ? this._colorList[t] : null + }, getColorByIndex: function (e) { + return e >= this._colorList.length ? e = this._colorList.length - 1 : 0 > e && (e = 0), this._colorList[e] + }, onbeforDispose: function () { + this.messageCenter.unbind(r.EVENT.HOVER, this._onhoverlink) + } + }, s.inherits(t, i), e('../component').define('dataRange', t), t + }), i('echarts/util/shape/HandlePolygon', ['require', 'zrender/shape/Base', 'zrender/shape/Polygon', 'zrender/tool/util'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('zrender/shape/Base'), n = e('zrender/shape/Polygon'), a = e('zrender/tool/util') + return t.prototype = { + type: 'handle-polygon', buildPath: function (e, t) { + n.prototype.buildPath(e, t) + }, isCover: function (e, t) { + var i = this.transformCoordToLocal(e, t) + e = i[0], t = i[1] + var n = this.style.rect + return e >= n.x && e <= n.x + n.width && t >= n.y && t <= n.y + n.height ? !0 : !1 + } + }, a.inherits(t, i), t + }), i('echarts/chart/k', ['require', './base', '../util/shape/Candle', '../component/axis', '../component/grid', '../component/dataZoom', '../config', '../util/ecData', 'zrender/tool/util', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = e('../util/shape/Candle') + e('../component/axis'), e('../component/grid'), e('../component/dataZoom') + var a = e('../config') + a.k = { + zlevel: 0, + z: 2, + clickable: !0, + hoverable: !0, + legendHoverLink: !1, + xAxisIndex: 0, + yAxisIndex: 0, + itemStyle: { + normal: { + color: '#fff', + color0: '#00aa11', + lineStyle: { width: 1, color: '#ff3200', color0: '#00aa11' }, + label: { show: !1 } + }, emphasis: { label: { show: !1 } } + } + } + var o = e('../util/ecData'), r = e('zrender/tool/util') + return t.prototype = { + type: a.CHART_TYPE_K, _buildShape: function () { + var e = this.series + this.selectedMap = {} + for (var t, i = { + top: [], + bottom: [] + }, n = 0, o = e.length; o > n; n++) e[n].type === a.CHART_TYPE_K && (e[n] = this.reformOption(e[n]), this.legendHoverLink = e[n].legendHoverLink || this.legendHoverLink, t = this.component.xAxis.getAxis(e[n].xAxisIndex), t.type === a.COMPONENT_TYPE_AXIS_CATEGORY && i[t.getPosition()].push(n)) + for (var r in i) i[r].length > 0 && this._buildSinglePosition(r, i[r]) + this.addShapeList() + }, _buildSinglePosition: function (e, t) { + var i = this._mapData(t), n = i.locationMap, a = i.maxDataLength + if (0 !== a && 0 !== n.length) { + this._buildHorizontal(t, a, n) + for (var o = 0, r = t.length; r > o; o++) this.buildMark(t[o]) + } + }, _mapData: function (e) { + for (var t, i, n = this.series, a = this.component.legend, o = [], r = 0, s = 0, l = e.length; l > s; s++) t = n[e[s]], i = t.name, this.selectedMap[i] = a ? a.isSelected(i) : !0, this.selectedMap[i] && o.push(e[s]), r = Math.max(r, t.data.length) + return { locationMap: o, maxDataLength: r } + }, _buildHorizontal: function (e, t, i) { + for (var n, a, o, r, s, l, h, m, V, U, d = this.series, p = {}, c = 0, u = i.length; u > c; c++) { + n = i[c], a = d[n], o = a.xAxisIndex || 0, r = this.component.xAxis.getAxis(o), h = a.barWidth || Math.floor(r.getGap() / 2), U = a.barMaxWidth, U && h > U && (h = U), s = a.yAxisIndex || 0, l = this.component.yAxis.getAxis(s), p[n] = [] + for (var y = 0, g = t; g > y && null != r.getNameByIndex(y); y++) m = a.data[y], V = this.getDataFromOption(m, '-'), '-' !== V && 4 == V.length && p[n].push([r.getCoordByIndex(y), h, l.getCoord(V[0]), l.getCoord(V[1]), l.getCoord(V[2]), l.getCoord(V[3]), y, r.getNameByIndex(y)]) + } + this._buildKLine(e, p) + }, _buildKLine: function (e, t) { + for (var i, n, o, r, s, l, h, m, V, U, d, p, c, u, y, g, b, f = this.series, k = 0, x = e.length; x > k; k++) if (b = e[k], d = f[b], u = t[b], this._isLarge(u) && (u = this._getLargePointList(u)), d.type === a.CHART_TYPE_K && null != u) { + p = d, i = this.query(p, 'itemStyle.normal.lineStyle.width'), n = this.query(p, 'itemStyle.normal.lineStyle.color'), o = this.query(p, 'itemStyle.normal.lineStyle.color0'), r = this.query(p, 'itemStyle.normal.color'), s = this.query(p, 'itemStyle.normal.color0'), l = this.query(p, 'itemStyle.emphasis.lineStyle.width'), h = this.query(p, 'itemStyle.emphasis.lineStyle.color'), m = this.query(p, 'itemStyle.emphasis.lineStyle.color0'), V = this.query(p, 'itemStyle.emphasis.color'), U = this.query(p, 'itemStyle.emphasis.color0') + for (var _ = 0, L = u.length; L > _; _++) y = u[_], c = d.data[y[6]], p = c, g = y[3] < y[2], this.shapeList.push(this._getCandle(b, y[6], y[7], y[0], y[1], y[2], y[3], y[4], y[5], g ? this.query(p, 'itemStyle.normal.color') || r : this.query(p, 'itemStyle.normal.color0') || s, this.query(p, 'itemStyle.normal.lineStyle.width') || i, g ? this.query(p, 'itemStyle.normal.lineStyle.color') || n : this.query(p, 'itemStyle.normal.lineStyle.color0') || o, g ? this.query(p, 'itemStyle.emphasis.color') || V || r : this.query(p, 'itemStyle.emphasis.color0') || U || s, this.query(p, 'itemStyle.emphasis.lineStyle.width') || l || i, g ? this.query(p, 'itemStyle.emphasis.lineStyle.color') || h || n : this.query(p, 'itemStyle.emphasis.lineStyle.color0') || m || o)) + } + }, _isLarge: function (e) { + return e[0][1] < .5 + }, _getLargePointList: function (e) { + for (var t = this.component.grid.getWidth(), i = e.length, n = [], a = 0; t > a; a++) n[a] = e[Math.floor(i / t * a)] + return n + }, _getCandle: function (e, t, i, a, r, s, l, h, m, V, U, d, p, c, u) { + var y = this.series, g = y[e], b = g.data[t], f = [b, g], k = { + zlevel: g.zlevel, + z: g.z, + clickable: this.deepQuery(f, 'clickable'), + hoverable: this.deepQuery(f, 'hoverable'), + style: { x: a, y: [s, l, h, m], width: r, color: V, strokeColor: d, lineWidth: U, brushType: 'both' }, + highlightStyle: { color: p, strokeColor: u, lineWidth: c }, + _seriesIndex: e + } + return k = this.addLabel(k, g, b, i), o.pack(k, g, e, b, t, i), k = new n(k) + }, getMarkCoord: function (e, t) { + var i = this.series[e], n = this.component.xAxis.getAxis(i.xAxisIndex), + a = this.component.yAxis.getAxis(i.yAxisIndex) + return ['string' != typeof t.xAxis && n.getCoordByIndex ? n.getCoordByIndex(t.xAxis || 0) : n.getCoord(t.xAxis || 0), 'string' != typeof t.yAxis && a.getCoordByIndex ? a.getCoordByIndex(t.yAxis || 0) : a.getCoord(t.yAxis || 0)] + }, refresh: function (e) { + e && (this.option = e, this.series = e.series), this.backupShapeList(), this._buildShape() + }, addDataAnimation: function (e, t) { + function i () { + p--, 0 === p && t && t() + } + + for (var n = this.series, a = {}, r = 0, s = e.length; s > r; r++) a[e[r][0]] = e[r] + for (var l, h, m, V, U, d, p = 0, r = 0, s = this.shapeList.length; s > r; r++) if (U = this.shapeList[r]._seriesIndex, a[U] && !a[U][3] && 'candle' === this.shapeList[r].type) { + if (d = o.get(this.shapeList[r], 'dataIndex'), V = n[U], a[U][2] && d === V.data.length - 1) { + this.zr.delShape(this.shapeList[r].id) + continue + } + if (!a[U][2] && 0 === d) { + this.zr.delShape(this.shapeList[r].id) + continue + } + h = this.component.xAxis.getAxis(V.xAxisIndex || 0).getGap(), l = a[U][2] ? h : -h, m = 0, p++, this.zr.animate(this.shapeList[r].id, '').when(this.query(this.option, 'animationDurationUpdate'), { position: [l, m] }).done(i).start() + } + p || t && t() + } + }, r.inherits(t, i), e('../chart').define('k', t), t + }), i('echarts/chart/pie', ['require', './base', 'zrender/shape/Text', 'zrender/shape/Ring', 'zrender/shape/Circle', 'zrender/shape/Sector', 'zrender/shape/Polyline', '../config', '../util/ecData', 'zrender/tool/util', 'zrender/tool/math', 'zrender/tool/color', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o) + var r = this + r.shapeHandler.onmouseover = function (e) { + var t = e.target, i = h.get(t, 'seriesIndex'), n = h.get(t, 'dataIndex'), a = h.get(t, 'special'), + o = [t.style.x, t.style.y], s = t.style.startAngle, l = t.style.endAngle, + m = ((l + s) / 2 + 360) % 360, V = t.highlightStyle.color, U = r.getLabel(i, n, a, o, m, V, !0) + U && r.zr.addHoverShape(U) + var d = r.getLabelLine(i, n, o, t.style.r0, t.style.r, m, V, !0) + d && r.zr.addHoverShape(d) + }, this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Text'), a = e('zrender/shape/Ring'), o = e('zrender/shape/Circle'), + r = e('zrender/shape/Sector'), s = e('zrender/shape/Polyline'), l = e('../config') + l.pie = { + zlevel: 0, + z: 2, + clickable: !0, + legendHoverLink: !0, + center: ['50%', '50%'], + radius: [0, '75%'], + clockWise: !0, + startAngle: 90, + minAngle: 0, + selectedOffset: 10, + itemStyle: { + normal: { + borderColor: 'rgba(0,0,0,0)', + borderWidth: 1, + label: { show: !0, position: 'outer' }, + labelLine: { show: !0, length: 20, lineStyle: { width: 1, type: 'solid' } } + }, + emphasis: { + borderColor: 'rgba(0,0,0,0)', + borderWidth: 1, + label: { show: !1 }, + labelLine: { show: !1, length: 20, lineStyle: { width: 1, type: 'solid' } } + } + } + } + var h = e('../util/ecData'), m = e('zrender/tool/util'), V = e('zrender/tool/math'), + U = e('zrender/tool/color') + return t.prototype = { + type: l.CHART_TYPE_PIE, _buildShape: function () { + var e = this.series, t = this.component.legend + this.selectedMap = {}, this._selected = {} + var i, n, r + this._selectedMode = !1 + for (var s, m = 0, V = e.length; V > m; m++) if (e[m].type === l.CHART_TYPE_PIE) { + if (e[m] = this.reformOption(e[m]), this.legendHoverLink = e[m].legendHoverLink || this.legendHoverLink, s = e[m].name || '', this.selectedMap[s] = t ? t.isSelected(s) : !0, !this.selectedMap[s]) continue + i = this.parseCenter(this.zr, e[m].center), n = this.parseRadius(this.zr, e[m].radius), this._selectedMode = this._selectedMode || e[m].selectedMode, this._selected[m] = [], this.deepQuery([e[m], this.option], 'calculable') && (r = { + zlevel: e[m].zlevel, + z: e[m].z, + hoverable: !1, + style: { + x: i[0], + y: i[1], + r0: n[0] <= 10 ? 0 : n[0] - 10, + r: n[1] + 10, + brushType: 'stroke', + lineWidth: 1, + strokeColor: e[m].calculableHolderColor || this.ecTheme.calculableHolderColor || l.calculableHolderColor + } + }, h.pack(r, e[m], m, void 0, -1), this.setCalculable(r), r = n[0] <= 10 ? new o(r) : new a(r), this.shapeList.push(r)), this._buildSinglePie(m), this.buildMark(m) + } + this.addShapeList() + }, _buildSinglePie: function (e) { + for (var t, i = this.series, n = i[e], a = n.data, o = this.component.legend, r = 0, s = 0, l = 0, h = Number.NEGATIVE_INFINITY, m = [], V = 0, U = a.length; U > V; V++) t = a[V].name, + this.selectedMap[t] = o ? o.isSelected(t) : !0, this.selectedMap[t] && !isNaN(a[V].value) && (0 !== +a[V].value ? r++ : s++, l += +a[V].value, h = Math.max(h, +a[V].value)) + if (0 !== l) { + for (var d, p, c, u, y, g, b = 100, f = n.clockWise, k = (n.startAngle.toFixed(2) - 0 + 360) % 360, x = n.minAngle || .01, _ = 360 - x * r - .01 * s, L = n.roseType, V = 0, U = a.length; U > V; V++) if (t = a[V].name, this.selectedMap[t] && !isNaN(a[V].value)) { + if (p = o ? o.getColor(t) : this.zr.getColor(V), b = a[V].value / l, d = 'area' != L ? f ? k - b * _ - (0 !== b ? x : .01) : b * _ + k + (0 !== b ? x : .01) : f ? k - 360 / U : 360 / U + k, d = d.toFixed(2) - 0, b = (100 * b).toFixed(2), c = this.parseCenter(this.zr, n.center), u = this.parseRadius(this.zr, n.radius), y = +u[0], g = +u[1], 'radius' === L ? g = a[V].value / h * (g - y) * .8 + .2 * (g - y) + y : 'area' === L && (g = Math.sqrt(a[V].value / h) * (g - y) + y), f) { + var W + W = k, k = d, d = W + } + this._buildItem(m, e, V, b, a[V].selected, c, y, g, k, d, p), f || (k = d) + } + this._autoLabelLayout(m, c, g) + for (var V = 0, U = m.length; U > V; V++) this.shapeList.push(m[V]) + m = null + } + }, _buildItem: function (e, t, i, n, a, o, r, s, l, m, V) { + var U = this.series, d = ((m + l) / 2 + 360) % 360, p = this.getSector(t, i, n, a, o, r, s, l, m, V) + h.pack(p, U[t], t, U[t].data[i], i, U[t].data[i].name, n), e.push(p) + var c = this.getLabel(t, i, n, o, d, V, !1), u = this.getLabelLine(t, i, o, r, s, d, V, !1) + u && (h.pack(u, U[t], t, U[t].data[i], i, U[t].data[i].name, n), e.push(u)), c && (h.pack(c, U[t], t, U[t].data[i], i, U[t].data[i].name, n), c._labelLine = u, e.push(c)) + }, getSector: function (e, t, i, n, a, o, s, l, h, m) { + var d = this.series, p = d[e], c = p.data[t], u = [c, p], + y = this.deepMerge(u, 'itemStyle.normal') || {}, g = this.deepMerge(u, 'itemStyle.emphasis') || {}, + b = this.getItemStyleColor(y.color, e, t, c) || m, + f = this.getItemStyleColor(g.color, e, t, c) || ('string' == typeof b ? U.lift(b, -.2) : b), k = { + zlevel: p.zlevel, + z: p.z, + clickable: this.deepQuery(u, 'clickable'), + style: { + x: a[0], + y: a[1], + r0: o, + r: s, + startAngle: l, + endAngle: h, + brushType: 'both', + color: b, + lineWidth: y.borderWidth, + strokeColor: y.borderColor, + lineJoin: 'round' + }, + highlightStyle: { color: f, lineWidth: g.borderWidth, strokeColor: g.borderColor, lineJoin: 'round' }, + _seriesIndex: e, + _dataIndex: t + } + if (n) { + var x = ((k.style.startAngle + k.style.endAngle) / 2).toFixed(2) - 0 + k.style._hasSelected = !0, k.style._x = k.style.x, k.style._y = k.style.y + var _ = this.query(p, 'selectedOffset') + k.style.x += V.cos(x, !0) * _, k.style.y -= V.sin(x, !0) * _, this._selected[e][t] = !0 + } else this._selected[e][t] = !1 + return this._selectedMode && (k.onclick = this.shapeHandler.onclick), this.deepQuery([c, p, this.option], 'calculable') && (this.setCalculable(k), k.draggable = !0), (this._needLabel(p, c, !0) || this._needLabelLine(p, c, !0)) && (k.onmouseover = this.shapeHandler.onmouseover), k = new r(k) + }, getLabel: function (e, t, i, a, o, r, s) { + var l = this.series, h = l[e], U = h.data[t] + if (this._needLabel(h, U, s)) { + var d, p, c, u = s ? 'emphasis' : 'normal', y = m.merge(m.clone(U.itemStyle) || {}, h.itemStyle), + g = y[u].label, b = g.textStyle || {}, f = a[0], k = a[1], + x = this.parseRadius(this.zr, h.radius), _ = 'middle' + g.position = g.position || y.normal.label.position, 'center' === g.position ? (d = f, p = k, c = 'center') : 'inner' === g.position || 'inside' === g.position ? (x = (x[0] + x[1]) * (g.distance || .5), d = Math.round(f + x * V.cos(o, !0)), p = Math.round(k - x * V.sin(o, !0)), r = '#fff', c = 'center') : (x = x[1] - -y[u].labelLine.length, d = Math.round(f + x * V.cos(o, !0)), p = Math.round(k - x * V.sin(o, !0)), c = o >= 90 && 270 >= o ? 'right' : 'left'), 'center' != g.position && 'inner' != g.position && 'inside' != g.position && (d += 'left' === c ? 20 : -20), U.__labelX = d - ('left' === c ? 5 : -5), U.__labelY = p + var L = new n({ + zlevel: h.zlevel, + z: h.z + 1, + hoverable: !1, + style: { + x: d, + y: p, + color: b.color || r, + text: this.getLabelText(e, t, i, u), + textAlign: b.align || c, + textBaseline: b.baseline || _, + textFont: this.getFont(b) + }, + highlightStyle: { brushType: 'fill' } + }) + return L._radius = x, L._labelPosition = g.position || 'outer', L._rect = L.getRect(L.style), L._seriesIndex = e, L._dataIndex = t, L + } + }, getLabelText: function (e, t, i, n) { + var a = this.series, o = a[e], r = o.data[t], + s = this.deepQuery([r, o], 'itemStyle.' + n + '.label.formatter') + return s ? 'function' == typeof s ? s.call(this.myChart, { + seriesIndex: e, + seriesName: o.name || '', + series: o, + dataIndex: t, + data: r, + name: r.name, + value: r.value, + percent: i + }) : 'string' == typeof s ? (s = s.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{d}', '{d0}'), s = s.replace('{a0}', o.name).replace('{b0}', r.name).replace('{c0}', r.value).replace('{d0}', i)) : void 0 : r.name + }, getLabelLine: function (e, t, i, n, a, o, r, l) { + var h = this.series, U = h[e], d = U.data[t] + if (this._needLabelLine(U, d, l)) { + var p = l ? 'emphasis' : 'normal', c = m.merge(m.clone(d.itemStyle) || {}, U.itemStyle), + u = c[p].labelLine, y = u.lineStyle || {}, g = i[0], b = i[1], f = a, + k = this.parseRadius(this.zr, U.radius)[1] - -u.length, x = V.cos(o, !0), _ = V.sin(o, !0) + return new s({ + zlevel: U.zlevel, + z: U.z + 1, + hoverable: !1, + style: { + pointList: [[g + f * x, b - f * _], [g + k * x, b - k * _], [d.__labelX, d.__labelY]], + strokeColor: y.color || r, + lineType: y.type, + lineWidth: y.width + }, + _seriesIndex: e, + _dataIndex: t + }) + } + }, _needLabel: function (e, t, i) { + return this.deepQuery([t, e], 'itemStyle.' + (i ? 'emphasis' : 'normal') + '.label.show') + }, _needLabelLine: function (e, t, i) { + return this.deepQuery([t, e], 'itemStyle.' + (i ? 'emphasis' : 'normal') + '.labelLine.show') + }, _autoLabelLayout: function (e, t, i) { + for (var n = [], a = [], o = 0, r = e.length; r > o; o++) ('outer' === e[o]._labelPosition || 'outside' === e[o]._labelPosition) && (e[o]._rect._y = e[o]._rect.y, e[o]._rect.x < t[0] ? n.push(e[o]) : a.push(e[o])) + this._layoutCalculate(n, t, i, -1), this._layoutCalculate(a, t, i, 1) + }, _layoutCalculate: function (e, t, i, n) { + function a (t, i, n) { + for (var a = t; i > a; a++) if (e[a]._rect.y += n, e[a].style.y += n, e[a]._labelLine && (e[a]._labelLine.style.pointList[1][1] += n, e[a]._labelLine.style.pointList[2][1] += n), a > t && i > a + 1 && e[a + 1]._rect.y > e[a]._rect.y + e[a]._rect.height) return void o(a, n / 2) + o(i - 1, n / 2) + } + + function o (t, i) { + for (var n = t; n >= 0 && (e[n]._rect.y -= i, e[n].style.y -= i, e[n]._labelLine && (e[n]._labelLine.style.pointList[1][1] -= i, e[n]._labelLine.style.pointList[2][1] -= i), !(n > 0 && e[n]._rect.y > e[n - 1]._rect.y + e[n - 1]._rect.height)); n--) + } + + function r (e, t, i, n, a) { + for (var o, r, s, l = i[0], h = i[1], m = a > 0 ? t ? Number.MAX_VALUE : 0 : t ? Number.MAX_VALUE : 0, V = 0, U = e.length; U > V; V++) r = Math.abs(e[V]._rect.y - h), s = e[V]._radius - n, o = n + s > r ? Math.sqrt((n + s + 20) * (n + s + 20) - Math.pow(e[V]._rect.y - h, 2)) : Math.abs(e[V]._rect.x + (a > 0 ? 0 : e[V]._rect.width) - l), t && o >= m && (o = m - 10), !t && m >= o && (o = m + 10), e[V]._rect.x = e[V].style.x = l + o * a, e[V]._labelLine && (e[V]._labelLine.style.pointList[2][0] = l + (o - 5) * a, e[V]._labelLine.style.pointList[1][0] = l + (o - 20) * a), m = o + } + + e.sort(function (e, t) { + return e._rect.y - t._rect.y + }) + for (var s, l = 0, h = e.length, m = [], V = [], U = 0; h > U; U++) s = e[U]._rect.y - l, 0 > s && a(U, h, -s, n), l = e[U]._rect.y + e[U]._rect.height + this.zr.getHeight() - l < 0 && o(h - 1, l - this.zr.getHeight()) + for (var U = 0; h > U; U++) e[U]._rect.y >= t[1] ? V.push(e[U]) : m.push(e[U]) + r(V, !0, t, i, n), r(m, !1, t, i, n) + }, reformOption: function (e) { + var t = m.merge + return e = t(t(e || {}, m.clone(this.ecTheme.pie || {})), m.clone(l.pie)), e.itemStyle.normal.label.textStyle = this.getTextStyle(e.itemStyle.normal.label.textStyle), e.itemStyle.emphasis.label.textStyle = this.getTextStyle(e.itemStyle.emphasis.label.textStyle), this.z = e.z, this.zlevel = e.zlevel, e + }, refresh: function (e) { + e && (this.option = e, this.series = e.series), this.backupShapeList(), this._buildShape() + }, addDataAnimation: function (e, t) { + function i () { + s--, 0 === s && t && t() + } + + for (var n = this.series, a = {}, o = 0, r = e.length; r > o; o++) a[e[o][0]] = e[o] + var s = 0, h = {}, m = {}, V = {}, U = this.shapeList + this.shapeList = [] + for (var d, p, c, u = {}, o = 0, r = e.length; r > o; o++) d = e[o][0], p = e[o][2], c = e[o][3], n[d] && n[d].type === l.CHART_TYPE_PIE && (p ? (c || (h[d + '_' + n[d].data.length] = 'delete'), u[d] = 1) : c ? u[d] = 0 : (h[d + '_-1'] = 'delete', u[d] = -1), this._buildSinglePie(d)) + for (var y, g, o = 0, r = this.shapeList.length; r > o; o++) switch (d = this.shapeList[o]._seriesIndex, y = this.shapeList[o]._dataIndex, g = d + '_' + y, this.shapeList[o].type) { + case'sector': + h[g] = this.shapeList[o] + break + case'text': + m[g] = this.shapeList[o] + break + case'polyline': + V[g] = this.shapeList[o] + } + this.shapeList = [] + for (var b, o = 0, r = U.length; r > o; o++) if (d = U[o]._seriesIndex, a[d]) { + if (y = U[o]._dataIndex + u[d], g = d + '_' + y, b = h[g], !b) continue + if ('sector' === U[o].type) 'delete' != b ? (s++, this.zr.animate(U[o].id, 'style').when(400, { + startAngle: b.style.startAngle, + endAngle: b.style.endAngle + }).done(i).start()) : (s++, this.zr.animate(U[o].id, 'style').when(400, u[d] < 0 ? { startAngle: U[o].style.startAngle } : { endAngle: U[o].style.endAngle }).done(i).start()) else if ('text' === U[o].type || 'polyline' === U[o].type) if ('delete' === b) this.zr.delShape(U[o].id) else switch (U[o].type) { + case'text': + s++, b = m[g], this.zr.animate(U[o].id, 'style').when(400, { + x: b.style.x, + y: b.style.y + }).done(i).start() + break + case'polyline': + s++, b = V[g], this.zr.animate(U[o].id, 'style').when(400, { pointList: b.style.pointList }).done(i).start() + } + } + this.shapeList = U, s || t && t() + }, onclick: function (e) { + var t = this.series + if (this.isClick && e.target) { + this.isClick = !1 + for (var i, n = e.target, a = n.style, o = h.get(n, 'seriesIndex'), r = h.get(n, 'dataIndex'), s = 0, m = this.shapeList.length; m > s; s++) if (this.shapeList[s].id === n.id) { + if (o = h.get(n, 'seriesIndex'), r = h.get(n, 'dataIndex'), a._hasSelected) n.style.x = n.style._x, n.style.y = n.style._y, n.style._hasSelected = !1, this._selected[o][r] = !1 else { + var U = ((a.startAngle + a.endAngle) / 2).toFixed(2) - 0 + n.style._hasSelected = !0, this._selected[o][r] = !0, n.style._x = n.style.x, n.style._y = n.style.y, i = this.query(t[o], 'selectedOffset'), n.style.x += V.cos(U, !0) * i, n.style.y -= V.sin(U, !0) * i + } + this.zr.modShape(n.id) + } else this.shapeList[s].style._hasSelected && 'single' === this._selectedMode && (o = h.get(this.shapeList[s], 'seriesIndex'), r = h.get(this.shapeList[s], 'dataIndex'), this.shapeList[s].style.x = this.shapeList[s].style._x, this.shapeList[s].style.y = this.shapeList[s].style._y, this.shapeList[s].style._hasSelected = !1, this._selected[o][r] = !1, this.zr.modShape(this.shapeList[s].id)) + this.messageCenter.dispatch(l.EVENT.PIE_SELECTED, e.event, { + selected: this._selected, + target: h.get(n, 'name') + }, this.myChart), this.zr.refreshNextFrame() + } + } + }, m.inherits(t, i), e('../chart').define('pie', t), t + }),i('echarts/chart/radar', ['require', './base', 'zrender/shape/Polygon', '../component/polar', '../config', '../util/ecData', 'zrender/tool/util', 'zrender/tool/color', '../util/accMath', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Polygon') + e('../component/polar') + var a = e('../config') + a.radar = { + zlevel: 0, + z: 2, + clickable: !0, + legendHoverLink: !0, + polarIndex: 0, + itemStyle: { + normal: { label: { show: !1 }, lineStyle: { width: 2, type: 'solid' } }, + emphasis: { label: { show: !1 } } + }, + symbolSize: 2 + } + var o = e('../util/ecData'), r = e('zrender/tool/util'), s = e('zrender/tool/color') + return t.prototype = { + type: a.CHART_TYPE_RADAR, _buildShape: function () { + this.selectedMap = {}, this._symbol = this.option.symbolList, this._queryTarget, this._dropBoxList = [], this._radarDataCounter = 0 + for (var e, t = this.series, i = this.component.legend, n = 0, o = t.length; o > n; n++) t[n].type === a.CHART_TYPE_RADAR && (this.serie = this.reformOption(t[n]), this.legendHoverLink = t[n].legendHoverLink || this.legendHoverLink, e = this.serie.name || '', this.selectedMap[e] = i ? i.isSelected(e) : !0, this.selectedMap[e] && (this._queryTarget = [this.serie, this.option], this.deepQuery(this._queryTarget, 'calculable') && this._addDropBox(n), this._buildSingleRadar(n), this.buildMark(n))) + this.addShapeList() + }, _buildSingleRadar: function (e) { + for (var t, i, n, a, o = this.component.legend, r = this.serie.data, s = this.deepQuery(this._queryTarget, 'calculable'), l = 0; l < r.length; l++) n = r[l].name || '', this.selectedMap[n] = o ? o.isSelected(n) : !0, this.selectedMap[n] && (o ? (i = o.getColor(n), t = o.getItemShape(n), t && (t.style.brushType = this.deepQuery([r[l], this.serie], 'itemStyle.normal.areaStyle') ? 'both' : 'stroke', o.setItemShape(n, t))) : i = this.zr.getColor(l), a = this._getPointList(this.serie.polarIndex, r[l]), this._addSymbol(a, i, l, e, this.serie.polarIndex), this._addDataShape(a, i, r[l], e, l, s), this._radarDataCounter++) + }, _getPointList: function (e, t) { + for (var i, n, a = [], o = this.component.polar, r = 0, s = t.value.length; s > r; r++) n = this.getDataFromOption(t.value[r]), i = '-' != n ? o.getVector(e, r, n) : !1, i && a.push(i) + return a + }, _addSymbol: function (e, t, i, n, a) { + for (var r, s = this.series, l = this.component.polar, h = 0, m = e.length; m > h; h++) r = this.getSymbolShape(this.deepMerge([s[n].data[i], s[n]]), n, s[n].data[i].value[h], h, l.getIndicatorText(a, h), e[h][0], e[h][1], this._symbol[this._radarDataCounter % this._symbol.length], t, '#fff', 'vertical'), r.zlevel = this.getZlevelBase(), r.z = this.getZBase() + 1, o.set(r, 'data', s[n].data[i]), o.set(r, 'value', s[n].data[i].value), o.set(r, 'dataIndex', i), o.set(r, 'special', h), this.shapeList.push(r) + }, _addDataShape: function (e, t, i, a, r, l) { + var h = this.series, m = [i, this.serie], + V = this.getItemStyleColor(this.deepQuery(m, 'itemStyle.normal.color'), a, r, i), + U = this.deepQuery(m, 'itemStyle.normal.lineStyle.width'), + d = this.deepQuery(m, 'itemStyle.normal.lineStyle.type'), + p = this.deepQuery(m, 'itemStyle.normal.areaStyle.color'), + c = this.deepQuery(m, 'itemStyle.normal.areaStyle'), u = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { + pointList: e, + brushType: c ? 'both' : 'stroke', + color: p || V || ('string' == typeof t ? s.alpha(t, .5) : t), + strokeColor: V || t, + lineWidth: U, + lineType: d + }, + highlightStyle: { + brushType: this.deepQuery(m, 'itemStyle.emphasis.areaStyle') || c ? 'both' : 'stroke', + color: this.deepQuery(m, 'itemStyle.emphasis.areaStyle.color') || p || V || ('string' == typeof t ? s.alpha(t, .5) : t), + strokeColor: this.getItemStyleColor(this.deepQuery(m, 'itemStyle.emphasis.color'), a, r, i) || V || t, + lineWidth: this.deepQuery(m, 'itemStyle.emphasis.lineStyle.width') || U, + lineType: this.deepQuery(m, 'itemStyle.emphasis.lineStyle.type') || d + } + } + o.pack(u, h[a], a, i, r, i.name, this.component.polar.getIndicator(h[a].polarIndex)), l && (u.draggable = !0, this.setCalculable(u)), u = new n(u), this.shapeList.push(u) + }, _addDropBox: function (e) { + var t = this.series, i = this.deepQuery(this._queryTarget, 'polarIndex') + if (!this._dropBoxList[i]) { + var n = this.component.polar.getDropBox(i) + n.zlevel = this.getZlevelBase(), n.z = this.getZBase(), this.setCalculable(n), o.pack(n, t, e, void 0, -1), this.shapeList.push(n), this._dropBoxList[i] = !0 + } + }, ondragend: function (e, t) { + var i = this.series + if (this.isDragend && e.target) { + var n = e.target, a = o.get(n, 'seriesIndex'), r = o.get(n, 'dataIndex') + this.component.legend && this.component.legend.del(i[a].data[r].name), i[a].data.splice(r, 1), t.dragOut = !0, t.needRefresh = !0, this.isDragend = !1 + } + }, ondrop: function (t, i) { + var n = this.series + if (this.isDrop && t.target) { + var a, r, s = t.target, l = t.dragged, h = o.get(s, 'seriesIndex'), m = o.get(s, 'dataIndex'), + V = this.component.legend + if (-1 === m) a = { + value: o.get(l, 'value'), + name: o.get(l, 'name') + }, n[h].data.push(a), V && V.add(a.name, l.style.color || l.style.strokeColor) else { + var U = e('../util/accMath') + a = n[h].data[m], V && V.del(a.name), a.name += this.option.nameConnector + o.get(l, 'name'), r = o.get(l, 'value') + for (var d = 0; d < r.length; d++) a.value[d] = U.accAdd(a.value[d], r[d]) + V && V.add(a.name, l.style.color || l.style.strokeColor) + } + i.dragIn = i.dragIn || !0, this.isDrop = !1 + } + }, refresh: function (e) { + e && (this.option = e, this.series = e.series), this.backupShapeList(), this._buildShape() + } + }, r.inherits(t, i), e('../chart').define('radar', t), t + }),i('echarts/component/polar', ['require', './base', 'zrender/shape/Text', 'zrender/shape/Line', 'zrender/shape/Polygon', 'zrender/shape/Circle', 'zrender/shape/Ring', '../config', 'zrender/tool/util', '../util/coordinates', '../util/accMath', '../util/smartSteps', '../component'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Text'), a = e('zrender/shape/Line'), o = e('zrender/shape/Polygon'), + r = e('zrender/shape/Circle'), s = e('zrender/shape/Ring'), l = e('../config') + l.polar = { + zlevel: 0, + z: 0, + center: ['50%', '50%'], + radius: '75%', + startAngle: 90, + boundaryGap: [0, 0], + splitNumber: 5, + name: { show: !0, textStyle: { color: '#333' } }, + axisLine: { show: !0, lineStyle: { color: '#ccc', width: 1, type: 'solid' } }, + axisLabel: { show: !1, textStyle: { color: '#333' } }, + splitArea: { show: !0, areaStyle: { color: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)'] } }, + splitLine: { show: !0, lineStyle: { width: 1, color: '#ccc' } }, + type: 'polygon' + } + var h = e('zrender/tool/util'), m = e('../util/coordinates') + return t.prototype = { + type: l.COMPONENT_TYPE_POLAR, _buildShape: function () { + for (var e = 0; e < this.polar.length; e++) this._index = e, this.reformOption(this.polar[e]), this._queryTarget = [this.polar[e], this.option], this._createVector(e), this._buildSpiderWeb(e), this._buildText(e), this._adjustIndicatorValue(e), this._addAxisLabel(e) + for (var e = 0; e < this.shapeList.length; e++) this.zr.addShape(this.shapeList[e]) + }, _createVector: function (e) { + for (var t, i = this.polar[e], n = this.deepQuery(this._queryTarget, 'indicator'), a = n.length, o = i.startAngle, r = 2 * Math.PI / a, s = this._getRadius(), l = i.__ecIndicator = [], h = 0; a > h; h++) t = m.polar2cartesian(s, o * Math.PI / 180 + r * h), l.push({ vector: [t[1], -t[0]] }) + }, _getRadius: function () { + var e = this.polar[this._index] + return this.parsePercent(e.radius, Math.min(this.zr.getWidth(), this.zr.getHeight()) / 2) + }, _buildSpiderWeb: function (e) { + var t = this.polar[e], i = t.__ecIndicator, n = t.splitArea, a = t.splitLine, o = this.getCenter(e), + r = t.splitNumber, s = a.lineStyle.color, l = a.lineStyle.width, h = a.show, + m = this.deepQuery(this._queryTarget, 'axisLine') + this._addArea(i, r, o, n, s, l, h), m.show && this._addLine(i, o, m) + }, _addAxisLabel: function (t) { + for (var i, a, o, r, a, s, l, m, V, U, d = e('../util/accMath'), p = this.polar[t], c = this.deepQuery(this._queryTarget, 'indicator'), u = p.__ecIndicator, y = this.deepQuery(this._queryTarget, 'splitNumber'), g = this.getCenter(t), b = 0; b < c.length; b++) if (i = this.deepQuery([c[b], p, this.option], 'axisLabel'), i.show) { + var f = this.deepQuery([i, p, this.option], 'textStyle'), k = this.deepQuery([i, p], 'formatter') + if (o = {}, o.textFont = this.getFont(f), o.color = f.color, o = h.merge(o, i), o.lineWidth = o.width, a = u[b].vector, s = u[b].value, m = b / c.length * 2 * Math.PI, V = i.offset || 10, U = i.interval || 0, !s) return + for (var x = 1; y >= x; x += U + 1) r = h.merge({}, o), l = d.accAdd(s.min, d.accMul(s.step, x)), l = 'function' == typeof k ? k(l) : 'string' == typeof k ? k.replace('{a}', '{a0}').replace('{a0}', l) : this.numAddCommas(l), r.text = l, r.x = x * a[0] / y + Math.cos(m) * V + g[0], r.y = x * a[1] / y + Math.sin(m) * V + g[1], this.shapeList.push(new n({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: r, + draggable: !1, + hoverable: !1 + })) + } + }, _buildText: function (e) { + for (var t, i, a, o, r, s, l, h = this.polar[e], m = h.__ecIndicator, V = this.deepQuery(this._queryTarget, 'indicator'), U = this.getCenter(e), d = 0, p = 0, c = 0; c < V.length; c++) o = this.deepQuery([V[c], h, this.option], 'name'), o.show && (l = this.deepQuery([o, h, this.option], 'textStyle'), i = {}, i.textFont = this.getFont(l), i.color = l.color, i.text = 'function' == typeof o.formatter ? o.formatter.call(this.myChart, V[c].text, c) : 'string' == typeof o.formatter ? o.formatter.replace('{value}', V[c].text) : V[c].text, m[c].text = i.text, t = m[c].vector, a = Math.round(t[0]) > 0 ? 'left' : Math.round(t[0]) < 0 ? 'right' : 'center', null == o.margin ? t = this._mapVector(t, U, 1.1) : (s = o.margin, d = t[0] > 0 ? s : -s, p = t[1] > 0 ? s : -s, d = 0 === t[0] ? 0 : d, p = 0 === t[1] ? 0 : p, t = this._mapVector(t, U, 1)), i.textAlign = a, i.x = t[0] + d, i.y = t[1] + p, r = o.rotate ? [o.rotate / 180 * Math.PI, t[0], t[1]] : [0, 0, 0], this.shapeList.push(new n({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: i, + draggable: !1, + hoverable: !1, + rotation: r + }))) + }, getIndicatorText: function (e, t) { + return this.polar[e] && this.polar[e].__ecIndicator[t] && this.polar[e].__ecIndicator[t].text + }, getDropBox: function (e) { + var t, i, e = e || 0, n = this.polar[e], a = this.getCenter(e), o = n.__ecIndicator, r = o.length, + s = [], l = n.type + if ('polygon' == l) { + for (var h = 0; r > h; h++) t = o[h].vector, s.push(this._mapVector(t, a, 1.2)) + i = this._getShape(s, 'fill', 'rgba(0,0,0,0)', '', 1) + } else 'circle' == l && (i = this._getCircle('', 1, 1.2, a, 'fill', 'rgba(0,0,0,0)')) + return i + }, _addArea: function (e, t, i, n, a, o, r) { + for (var s, l, h, m, V = this.deepQuery(this._queryTarget, 'type'), U = 0; t > U; U++) l = (t - U) / t, r && ('polygon' == V ? (m = this._getPointList(e, l, i), s = this._getShape(m, 'stroke', '', a, o)) : 'circle' == V && (s = this._getCircle(a, o, l, i, 'stroke')), this.shapeList.push(s)), n.show && (h = (t - U - 1) / t, this._addSplitArea(e, n, l, h, i, U)) + }, _getCircle: function (e, t, i, n, a, o) { + var s = this._getRadius() + return new r({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { x: n[0], y: n[1], r: s * i, brushType: a, strokeColor: e, lineWidth: t, color: o }, + hoverable: !1, + draggable: !1 + }) + }, _getRing: function (e, t, i, n) { + var a = this._getRadius() + return new s({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { x: n[0], y: n[1], r: t * a, r0: i * a, color: e, brushType: 'fill' }, + hoverable: !1, + draggable: !1 + }) + }, _getPointList: function (e, t, i) { + for (var n, a = [], o = e.length, r = 0; o > r; r++) n = e[r].vector, a.push(this._mapVector(n, i, t)) + return a + }, _getShape: function (e, t, i, n, a) { + return new o({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { pointList: e, brushType: t, color: i, strokeColor: n, lineWidth: a }, + hoverable: !1, + draggable: !1 + }) + }, _addSplitArea: function (e, t, i, n, a, o) { + var r, s, l, h, m, V = e.length, U = t.areaStyle.color, d = [], V = e.length, + p = this.deepQuery(this._queryTarget, 'type') + if ('string' == typeof U && (U = [U]), s = U.length, r = U[o % s], 'polygon' == p) for (var c = 0; V > c; c++) d = [], l = e[c].vector, h = e[(c + 1) % V].vector, d.push(this._mapVector(l, a, i)), d.push(this._mapVector(l, a, n)), d.push(this._mapVector(h, a, n)), d.push(this._mapVector(h, a, i)), m = this._getShape(d, 'fill', r, '', 1), this.shapeList.push(m) else 'circle' == p && (m = this._getRing(r, i, n, a), this.shapeList.push(m)) + }, _mapVector: function (e, t, i) { + return [e[0] * i + t[0], e[1] * i + t[1]] + }, getCenter: function (e) { + var e = e || 0 + return this.parseCenter(this.zr, this.polar[e].center) + }, _addLine: function (e, t, i) { + for (var n, a, o = e.length, r = i.lineStyle, s = r.color, l = r.width, h = r.type, m = 0; o > m; m++) a = e[m].vector, n = this._getLine(t[0], t[1], a[0] + t[0], a[1] + t[1], s, l, h), this.shapeList.push(n) + }, _getLine: function (e, t, i, n, o, r, s) { + return new a({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { xStart: e, yStart: t, xEnd: i, yEnd: n, strokeColor: o, lineWidth: r, lineType: s }, + hoverable: !1 + }) + }, _adjustIndicatorValue: function (t) { + for (var i, n, a, o = this.polar[t], r = this.deepQuery(this._queryTarget, 'indicator'), s = r.length, l = o.__ecIndicator, h = this._getSeriesData(t), m = o.boundaryGap, V = o.splitNumber, U = o.scale, d = e('../util/smartSteps'), p = 0; s > p; p++) { + if ('number' == typeof r[p].max) i = r[p].max, n = r[p].min || 0, a = { max: i, min: n } else { + var c = this._findValue(h, p, V, m) + n = c.min, i = c.max + } + !U && n >= 0 && i >= 0 && (n = 0), !U && 0 >= n && 0 >= i && (i = 0) + var u = d(n, i, V, a) + l[p].value = { min: u.min, max: u.max, step: u.step } + } + }, _getSeriesData: function (e) { + for (var t, i, n, a = [], o = this.component.legend, r = 0; r < this.series.length; r++) if (t = this.series[r], t.type == l.CHART_TYPE_RADAR) { + i = t.data || [] + for (var s = 0; s < i.length; s++) n = this.deepQuery([i[s], t, this.option], 'polarIndex') || 0, n != e || o && !o.isSelected(i[s].name) || a.push(i[s]) + } + return a + }, _findValue: function (e, t, i, n) { + function a (e) { + (e > o || void 0 === o) && (o = e), (r > e || void 0 === r) && (r = e) + } + + var o, r, s + if (e && 0 !== e.length) { + if (1 == e.length && (r = 0), 1 != e.length) for (var l = 0; l < e.length; l++) a(this.getDataFromOption(e[l].value[t])) else { + s = e[0] + for (var l = 0; l < s.value.length; l++) a(this.getDataFromOption(s.value[l])) + } + var h = Math.abs(o - r) + return r -= Math.abs(h * n[0]), o += Math.abs(h * n[1]), r === o && (0 === o ? o = 1 : o > 0 ? r = o / i : o /= i), { + max: o, + min: r + } + } + }, getVector: function (e, t, i) { + e = e || 0, t = t || 0 + var n = this.polar[e].__ecIndicator + if (!(t >= n.length)) { + var a, o = this.polar[e].__ecIndicator[t], r = this.getCenter(e), s = o.vector, l = o.value.max, + h = o.value.min + if ('undefined' == typeof i) return r + switch (i) { + case'min': + i = h + break + case'max': + i = l + break + case'center': + i = (l + h) / 2 + } + return a = l != h ? (i - h) / (l - h) : .5, this._mapVector(s, r, a) + } + }, isInside: function (e) { + var t = this.getNearestIndex(e) + return t ? t.polarIndex : -1 + }, getNearestIndex: function (e) { + for (var t, i, n, a, o, r, s, l, h, V = 0; V < this.polar.length; V++) { + if (t = this.polar[V], i = this.getCenter(V), e[0] == i[0] && e[1] == i[1]) return { + polarIndex: V, + valueIndex: 0 + } + if (n = this._getRadius(), o = t.startAngle, r = t.indicator, s = r.length, l = 2 * Math.PI / s, a = m.cartesian2polar(e[0] - i[0], i[1] - e[1]), e[0] - i[0] < 0 && (a[1] += Math.PI), a[1] < 0 && (a[1] += 2 * Math.PI), h = a[1] - o / 180 * Math.PI + 2 * Math.PI, Math.abs(Math.cos(h % (l / 2))) * n > a[0]) return { + polarIndex: V, + valueIndex: Math.floor((h + l / 2) / l) % s + } + } + }, getIndicator: function (e) { + var e = e || 0 + return this.polar[e].indicator + }, refresh: function (e) { + e && (this.option = e, this.polar = this.option.polar, this.series = this.option.series), this.clear(), this._buildShape() + } + }, h.inherits(t, i), e('../component').define('polar', t), t + }),i('echarts/util/coordinates', ['require', 'zrender/tool/math'], function (e) { + function t (e, t) { + return [e * n.sin(t), e * n.cos(t)] + } + + function i (e, t) { + return [Math.sqrt(e * e + t * t), Math.atan(t / e)] + } + + var n = e('zrender/tool/math') + return { polar2cartesian: t, cartesian2polar: i } + }),i('echarts/chart/chord', ['require', './base', 'zrender/shape/Text', 'zrender/shape/Line', 'zrender/shape/Sector', '../util/shape/Ribbon', '../util/shape/Icon', 'zrender/shape/BezierCurve', '../config', '../util/ecData', 'zrender/tool/util', 'zrender/tool/vector', '../data/Graph', '../layout/Chord', '../chart'], function (e) { + 'use strict' + + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.scaleLineLength = 4, this.scaleUnitAngle = 4, this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Text'), a = e('zrender/shape/Line'), o = e('zrender/shape/Sector'), + r = e('../util/shape/Ribbon'), s = e('../util/shape/Icon'), l = e('zrender/shape/BezierCurve'), + h = e('../config') + h.chord = { + zlevel: 0, + z: 2, + clickable: !0, + radius: ['65%', '75%'], + center: ['50%', '50%'], + padding: 2, + sort: 'none', + sortSub: 'none', + startAngle: 90, + clockWise: !0, + ribbonType: !0, + minRadius: 10, + maxRadius: 20, + symbol: 'circle', + showScale: !1, + showScaleText: !1, + itemStyle: { + normal: { + borderWidth: 0, + borderColor: '#000', + label: { show: !0, rotate: !1, distance: 5 }, + chordStyle: { width: 1, color: 'black', borderWidth: 1, borderColor: '#999', opacity: .5 } + }, + emphasis: { + borderWidth: 0, + borderColor: '#000', + chordStyle: { width: 1, color: 'black', borderWidth: 1, borderColor: '#999' } + } + } + } + var m = e('../util/ecData'), V = e('zrender/tool/util'), U = e('zrender/tool/vector'), d = e('../data/Graph'), + p = e('../layout/Chord') + return t.prototype = { + type: h.CHART_TYPE_CHORD, _init: function () { + var e = this.series + this.selectedMap = {} + for (var t = {}, i = {}, n = 0, a = e.length; a > n; n++) if (e[n].type === this.type) { + var o = this.isSelected(e[n].name) + this.selectedMap[e[n].name] = o, o && this.buildMark(n), this.reformOption(e[n]), t[e[n].name] = e[n] + } + for (var n = 0, a = e.length; a > n; n++) if (e[n].type === this.type) if (e[n].insertToSerie) { + var r = t[e[n].insertToSerie] + e[n]._referenceSerie = r + } else i[e[n].name] = [e[n]] + for (var n = 0, a = e.length; a > n; n++) if (e[n].type === this.type && e[n].insertToSerie) { + for (var s = e[n]._referenceSerie; s && s._referenceSerie;) s = s._referenceSerie + i[s.name] && this.selectedMap[e[n].name] && i[s.name].push(e[n]) + } + for (var l in i) this._buildChords(i[l]) + this.addShapeList() + }, _getNodeCategory: function (e, t) { + return e.categories && e.categories[t.category || 0] + }, _getNodeQueryTarget: function (e, t) { + var i = this._getNodeCategory(e, t) + return [t, i, e] + }, _getEdgeQueryTarget: function (e, t, i) { + return i = i || 'normal', [t.itemStyle && t.itemStyle[i], e.itemStyle[i].chordStyle] + }, _buildChords: function (e) { + for (var t = [], i = e[0], n = function (e) { + return e.layout.size > 0 + }, a = function (e) { + return function (t) { + return e.getEdge(t.node2, t.node1) + } + }, o = 0; o < e.length; o++) { + var r = e[o] + if (this.selectedMap[r.name]) { + var s + r.matrix ? s = this._getSerieGraphFromDataMatrix(r, i) : r.links && (s = this._getSerieGraphFromNodeLinks(r, i)), s.filterNode(n, this), r.ribbonType && s.filterEdge(a(s)), t.push(s), s.__serie = r + } + } + if (t.length) { + var l = t[0] + if (!i.ribbonType) { + var h = i.minRadius, m = i.maxRadius, V = 1 / 0, U = -(1 / 0) + l.eachNode(function (e) { + U = Math.max(e.layout.size, U), V = Math.min(e.layout.size, V) + }) + var d = (m - h) / (U - V) + l.eachNode(function (e) { + var t = this._getNodeQueryTarget(i, e), n = this.query(t, 'symbolSize') + e.layout.size = U === V ? n || V : n || (e.layout.size - V) * d + h + }, this) + } + var c = new p + c.clockWise = i.clockWise, c.startAngle = i.startAngle * Math.PI / 180, c.clockWise || (c.startAngle = -c.startAngle), c.padding = i.padding * Math.PI / 180, c.sort = i.sort, c.sortSub = i.sortSub, c.directed = i.ribbonType, c.run(t) + var u = this.query(i, 'itemStyle.normal.label.show') + if (i.ribbonType) { + this._buildSectors(i, 0, l, i, t), u && this._buildLabels(i, 0, l, i, t) + for (var o = 0, y = 0; o < e.length; o++) this.selectedMap[e[o].name] && this._buildRibbons(e, o, t[y++], i) + i.showScale && this._buildScales(i, 0, l) + } else { + this._buildNodeIcons(i, 0, l, i, t), u && this._buildLabels(i, 0, l, i, t) + for (var o = 0, y = 0; o < e.length; o++) this.selectedMap[e[o].name] && this._buildEdgeCurves(e, o, t[y++], i, l) + } + this._initHoverHandler(e, t) + } + }, _getSerieGraphFromDataMatrix: function (e, t) { + for (var i = [], n = 0, a = [], o = 0; o < e.matrix.length; o++) a[o] = e.matrix[o].slice() + for (var r = e.data || e.nodes, o = 0; o < r.length; o++) { + var s = {}, l = r[o] + l.rawIndex = o + for (var h in l) 'name' === h ? s.id = l.name : s[h] = l[h] + var m = this._getNodeCategory(t, l), V = m ? m.name : l.name + if (this.selectedMap[V] = this.isSelected(V), this.selectedMap[V]) i.push(s), n++ else { + a.splice(n, 1) + for (var U = 0; U < a.length; U++) a[U].splice(n, 1) + } + } + var p = d.fromMatrix(i, a, !0) + return p.eachNode(function (e) { + e.layout = { size: e.data.outValue }, e.rawIndex = e.data.rawIndex + }), p.eachEdge(function (e) { + e.layout = { weight: e.data.weight } + }), p + }, _getSerieGraphFromNodeLinks: function (e, t) { + for (var i = new d(!0), n = e.data || e.nodes, a = 0, o = n.length; o > a; a++) { + var r = n[a] + if (r && !r.ignore) { + var s = this._getNodeCategory(t, r), l = s ? s.name : r.name + if (this.selectedMap[l] = this.isSelected(l), this.selectedMap[l]) { + var h = i.addNode(r.name, r) + h.rawIndex = a + } + } + } + for (var a = 0, o = e.links.length; o > a; a++) { + var m = e.links[a], V = m.source, U = m.target + 'number' == typeof V && (V = n[V], V && (V = V.name)), 'number' == typeof U && (U = n[U], U && (U = U.name)) + var p = i.addEdge(V, U, m) + p && (p.rawIndex = a) + } + return i.eachNode(function (e) { + var i = e.data.value + if (null == i) if (i = 0, t.ribbonType) for (var n = 0; n < e.outEdges.length; n++) i += e.outEdges[n].data.weight || 0 else for (var n = 0; n < e.edges.length; n++) i += e.edges[n].data.weight || 0 + e.layout = { size: i } + }), i.eachEdge(function (e) { + e.layout = { weight: null == e.data.weight ? 1 : e.data.weight } + }), i + }, _initHoverHandler: function (e, t) { + var i = e[0], n = t[0], a = this + n.eachNode(function (e) { + e.shape.onmouseover = function () { + n.eachNode(function (e) { + e.shape.style.opacity = .1, e.labelShape && (e.labelShape.style.opacity = .1, e.labelShape.modSelf()), e.shape.modSelf() + }) + for (var i = 0; i < t.length; i++) for (var o = 0; o < t[i].edges.length; o++) { + var r = t[i].edges[o], s = a._getEdgeQueryTarget(t[i].__serie, r.data) + r.shape.style.opacity = .1 * a.deepQuery(s, 'opacity'), r.shape.modSelf() + } + e.shape.style.opacity = 1, e.labelShape && (e.labelShape.style.opacity = 1) + for (var i = 0; i < t.length; i++) { + var l = t[i].getNodeById(e.id) + if (l) for (var o = 0; o < l.outEdges.length; o++) { + var r = l.outEdges[o], s = a._getEdgeQueryTarget(t[i].__serie, r.data) + r.shape.style.opacity = a.deepQuery(s, 'opacity') + var h = t[0].getNodeById(r.node2.id) + h && (h.shape && (h.shape.style.opacity = 1), h.labelShape && (h.labelShape.style.opacity = 1)) + } + } + a.zr.refreshNextFrame() + }, e.shape.onmouseout = function () { + n.eachNode(function (e) { + e.shape.style.opacity = 1, e.labelShape && (e.labelShape.style.opacity = 1, e.labelShape.modSelf()), e.shape.modSelf() + }) + for (var e = 0; e < t.length; e++) for (var o = 0; o < t[e].edges.length; o++) { + var r = t[e].edges[o], s = [r.data, i] + r.shape.style.opacity = a.deepQuery(s, 'itemStyle.normal.chordStyle.opacity'), r.shape.modSelf() + } + a.zr.refreshNextFrame() + } + }) + }, _buildSectors: function (e, t, i, n) { + var a = this.parseCenter(this.zr, n.center), r = this.parseRadius(this.zr, n.radius), s = n.clockWise, + l = s ? 1 : -1 + i.eachNode(function (i) { + var h = this._getNodeCategory(n, i.data), V = this.getColor(h ? h.name : i.id), + U = i.layout.startAngle / Math.PI * 180 * l, d = i.layout.endAngle / Math.PI * 180 * l, + p = new o({ + zlevel: e.zlevel, + z: e.z, + style: { + x: a[0], + y: a[1], + r0: r[0], + r: r[1], + startAngle: U, + endAngle: d, + brushType: 'fill', + opacity: 1, + color: V, + clockWise: s + }, + clickable: n.clickable, + highlightStyle: { brushType: 'fill' } + }) + p.style.lineWidth = this.deepQuery([i.data, n], 'itemStyle.normal.borderWidth'), p.highlightStyle.lineWidth = this.deepQuery([i.data, n], 'itemStyle.emphasis.borderWidth'), p.style.strokeColor = this.deepQuery([i.data, n], 'itemStyle.normal.borderColor'), p.highlightStyle.strokeColor = this.deepQuery([i.data, n], 'itemStyle.emphasis.borderColor'), p.style.lineWidth > 0 && (p.style.brushType = 'both'), p.highlightStyle.lineWidth > 0 && (p.highlightStyle.brushType = 'both'), m.pack(p, e, t, i.data, i.rawIndex, i.id, i.category), this.shapeList.push(p), i.shape = p + }, this) + }, _buildNodeIcons: function (e, t, i, n) { + var a = this.parseCenter(this.zr, n.center), o = this.parseRadius(this.zr, n.radius), r = o[1] + i.eachNode(function (i) { + var o = i.layout.startAngle, l = i.layout.endAngle, h = (o + l) / 2, V = r * Math.cos(h), + U = r * Math.sin(h), d = this._getNodeQueryTarget(n, i.data), + p = this._getNodeCategory(n, i.data), c = this.deepQuery(d, 'itemStyle.normal.color') + c || (c = this.getColor(p ? p.name : i.id)) + var u = new s({ + zlevel: e.zlevel, + z: e.z + 1, + style: { + x: -i.layout.size, + y: -i.layout.size, + width: 2 * i.layout.size, + height: 2 * i.layout.size, + iconType: this.deepQuery(d, 'symbol'), + color: c, + brushType: 'both', + lineWidth: this.deepQuery(d, 'itemStyle.normal.borderWidth'), + strokeColor: this.deepQuery(d, 'itemStyle.normal.borderColor') + }, + highlightStyle: { + color: this.deepQuery(d, 'itemStyle.emphasis.color'), + lineWidth: this.deepQuery(d, 'itemStyle.emphasis.borderWidth'), + strokeColor: this.deepQuery(d, 'itemStyle.emphasis.borderColor') + }, + clickable: n.clickable, + position: [V + a[0], U + a[1]] + }) + m.pack(u, e, t, i.data, i.rawIndex, i.id, i.category), this.shapeList.push(u), i.shape = u + }, this) + }, _buildLabels: function (e, t, i, a) { + var o = this.query(a, 'itemStyle.normal.label.rotate'), + r = this.query(a, 'itemStyle.normal.label.distance'), s = this.parseCenter(this.zr, a.center), + l = this.parseRadius(this.zr, a.radius), h = a.clockWise, m = h ? 1 : -1 + + i.eachNode(function (t) { + var i = t.layout.startAngle / Math.PI * 180 * m, h = t.layout.endAngle / Math.PI * 180 * m, + V = (i * -m + h * -m) / 2 + V %= 360, 0 > V && (V += 360) + var d = 90 >= V || V >= 270 + V = V * Math.PI / 180 + var p = [Math.cos(V), -Math.sin(V)], c = 0 + c = a.ribbonType ? a.showScaleText ? 35 + r : r : r + t.layout.size + var u = U.scale([], p, l[1] + c) + U.add(u, u, s) + var y = { + zlevel: e.zlevel, + z: e.z + 1, + hoverable: !1, + style: { text: null == t.data.label ? t.id : t.data.label, textAlign: d ? 'left' : 'right' } + } + o ? (y.rotation = d ? V : Math.PI + V, y.style.x = d ? l[1] + c : -l[1] - c, y.style.y = 0, y.position = s.slice()) : (y.style.x = u[0], y.style.y = u[1]), y.style.color = this.deepQuery([t.data, a], 'itemStyle.normal.label.textStyle.color') || '#000000', y.style.textFont = this.getFont(this.deepQuery([t.data, a], 'itemStyle.normal.label.textStyle')), y = new n(y), this.shapeList.push(y), t.labelShape = y + }, this) + }, _buildRibbons: function (e, t, i, n) { + var a = e[t], o = this.parseCenter(this.zr, n.center), s = this.parseRadius(this.zr, n.radius) + i.eachEdge(function (l, h) { + var V, U = i.getEdge(l.node2, l.node1) + if (U && !l.shape) { + if (U.shape) return void (l.shape = U.shape) + var d = l.layout.startAngle / Math.PI * 180, p = l.layout.endAngle / Math.PI * 180, + c = U.layout.startAngle / Math.PI * 180, u = U.layout.endAngle / Math.PI * 180 + V = this.getColor(1 === e.length ? l.layout.weight <= U.layout.weight ? l.node1.id : l.node2.id : a.name) + var y, g, b = this._getEdgeQueryTarget(a, l.data), + f = this._getEdgeQueryTarget(a, l.data, 'emphasis'), k = new r({ + zlevel: a.zlevel, + z: a.z, + style: { + x: o[0], + y: o[1], + r: s[0], + source0: d, + source1: p, + target0: c, + target1: u, + brushType: 'both', + opacity: this.deepQuery(b, 'opacity'), + color: V, + lineWidth: this.deepQuery(b, 'borderWidth'), + strokeColor: this.deepQuery(b, 'borderColor'), + clockWise: n.clockWise + }, + clickable: n.clickable, + highlightStyle: { + brushType: 'both', + opacity: this.deepQuery(f, 'opacity'), + lineWidth: this.deepQuery(f, 'borderWidth'), + strokeColor: this.deepQuery(f, 'borderColor') + } + }) + l.layout.weight <= U.layout.weight ? (y = U.node1, g = U.node2) : (y = l.node1, g = l.node2), m.pack(k, a, t, l.data, null == l.rawIndex ? h : l.rawIndex, l.data.name || y.id + '-' + g.id, y.id, g.id), this.shapeList.push(k), l.shape = k + } + }, this) + }, _buildEdgeCurves: function (e, t, i, n, a) { + var o = e[t], r = this.parseCenter(this.zr, n.center) + i.eachEdge(function (e, i) { + var n = a.getNodeById(e.node1.id), s = a.getNodeById(e.node2.id), h = n.shape, V = s.shape, + U = this._getEdgeQueryTarget(o, e.data), d = this._getEdgeQueryTarget(o, e.data, 'emphasis'), + p = new l({ + zlevel: o.zlevel, + z: o.z, + style: { + xStart: h.position[0], + yStart: h.position[1], + xEnd: V.position[0], + yEnd: V.position[1], + cpX1: r[0], + cpY1: r[1], + lineWidth: this.deepQuery(U, 'width'), + strokeColor: this.deepQuery(U, 'color'), + opacity: this.deepQuery(U, 'opacity') + }, + highlightStyle: { + lineWidth: this.deepQuery(d, 'width'), + strokeColor: this.deepQuery(d, 'color'), + opacity: this.deepQuery(d, 'opacity') + } + }) + m.pack(p, o, t, e.data, null == e.rawIndex ? i : e.rawIndex, e.data.name || e.node1.id + '-' + e.node2.id, e.node1.id, e.node2.id), this.shapeList.push(p), e.shape = p + }, this) + }, _buildScales: function (e, t, i) { + var o, r, s = e.clockWise, l = this.parseCenter(this.zr, e.center), + h = this.parseRadius(this.zr, e.radius), m = s ? 1 : -1, V = 0, d = -(1 / 0) + e.showScaleText && (i.eachNode(function (e) { + var t = e.data.value + t > d && (d = t), V += t + }), d > 1e10 ? (o = 'b', r = 1e-9) : d > 1e7 ? (o = 'm', r = 1e-6) : d > 1e4 ? (o = 'k', r = .001) : (o = '', r = 1)) + var p = V / (360 - e.padding) + i.eachNode(function (t) { + for (var i = t.layout.startAngle / Math.PI * 180, V = t.layout.endAngle / Math.PI * 180, d = i; ;) { + if (s && d > V || !s && V > d) break + var c = d / 180 * Math.PI, u = [Math.cos(c), Math.sin(c)], y = U.scale([], u, h[1] + 1) + U.add(y, y, l) + var g = U.scale([], u, h[1] + this.scaleLineLength) + U.add(g, g, l) + var b = new a({ + zlevel: e.zlevel, + z: e.z - 1, + hoverable: !1, + style: { + xStart: y[0], + yStart: y[1], + xEnd: g[0], + yEnd: g[1], + lineCap: 'round', + brushType: 'stroke', + strokeColor: '#666', + lineWidth: 1 + } + }) + this.shapeList.push(b), d += m * this.scaleUnitAngle + } + if (e.showScaleText) for (var f = i, k = 5 * p * this.scaleUnitAngle, x = 0; ;) { + if (s && f > V || !s && V > f) break + var c = f + c %= 360, 0 > c && (c += 360) + var _ = 90 >= c || c >= 270, L = new n({ + zlevel: e.zlevel, + z: e.z - 1, + hoverable: !1, + style: { + x: _ ? h[1] + this.scaleLineLength + 4 : -h[1] - this.scaleLineLength - 4, + y: 0, + text: Math.round(10 * x) / 10 + o, + textAlign: _ ? 'left' : 'right' + }, + position: l.slice(), + rotation: _ ? [-c / 180 * Math.PI, 0, 0] : [-(c + 180) / 180 * Math.PI, 0, 0] + }) + this.shapeList.push(L), x += k * r, f += m * this.scaleUnitAngle * 5 + } + }, this) + }, refresh: function (e) { + if (e && (this.option = e, this.series = e.series), this.legend = this.component.legend, this.legend) this.getColor = function (e) { + return this.legend.getColor(e) + }, this.isSelected = function (e) { + return this.legend.isSelected(e) + } else { + var t = {}, i = 0 + this.getColor = function (e) { + return t[e] ? t[e] : (t[e] || (t[e] = this.zr.getColor(i++)), t[e]) + }, this.isSelected = function () { + return !0 + } + } + this.backupShapeList(), this._init() + }, reformOption: function (e) { + var t = V.merge + e = t(t(e || {}, this.ecTheme.chord), h.chord), e.itemStyle.normal.label.textStyle = this.getTextStyle(e.itemStyle.normal.label.textStyle), this.z = e.z, this.zlevel = e.zlevel + } + }, V.inherits(t, i), e('../chart').define('chord', t), t + }),i('echarts/util/shape/Ribbon', ['require', 'zrender/shape/Base', 'zrender/shape/util/PathProxy', 'zrender/tool/util', 'zrender/tool/area'], function (e) { + function t (e) { + i.call(this, e), this._pathProxy = new n + } + + var i = e('zrender/shape/Base'), n = e('zrender/shape/util/PathProxy'), a = e('zrender/tool/util'), + o = e('zrender/tool/area') + return t.prototype = { + type: 'ribbon', buildPath: function (e, t) { + var i = t.clockWise || !1, n = this._pathProxy + n.begin(e) + var a = t.x, o = t.y, r = t.r, s = t.source0 / 180 * Math.PI, l = t.source1 / 180 * Math.PI, + h = t.target0 / 180 * Math.PI, m = t.target1 / 180 * Math.PI, V = a + Math.cos(s) * r, + U = o + Math.sin(s) * r, d = a + Math.cos(l) * r, p = o + Math.sin(l) * r, c = a + Math.cos(h) * r, + u = o + Math.sin(h) * r, y = a + Math.cos(m) * r, g = o + Math.sin(m) * r + n.moveTo(V, U), n.arc(a, o, t.r, s, l, !i), n.bezierCurveTo(.7 * (a - d) + d, .7 * (o - p) + p, .7 * (a - c) + c, .7 * (o - u) + u, c, u), (t.source0 !== t.target0 || t.source1 !== t.target1) && (n.arc(a, o, t.r, h, m, !i), n.bezierCurveTo(.7 * (a - y) + y, .7 * (o - g) + g, .7 * (a - V) + V, .7 * (o - U) + U, V, U)) + }, getRect: function (e) { + return e.__rect ? e.__rect : (this._pathProxy.isEmpty() || this.buildPath(null, e), this._pathProxy.fastBoundingRect()) + }, isCover: function (e, t) { + var i = this.getRect(this.style) + return e >= i.x && e <= i.x + i.width && t >= i.y && t <= i.y + i.height ? o.isInsidePath(this._pathProxy.pathCommands, 0, 'fill', e, t) : void 0 + } + }, a.inherits(t, i), t + }),i('echarts/data/Graph', ['require', 'zrender/tool/util'], function (e) { + var t = e('zrender/tool/util'), i = function (e) { + this._directed = e || !1, this.nodes = [], this.edges = [], this._nodesMap = {}, this._edgesMap = {} + } + i.prototype.isDirected = function () { + return this._directed + }, i.prototype.addNode = function (e, t) { + if (this._nodesMap[e]) return this._nodesMap[e] + var n = new i.Node(e, t) + return this.nodes.push(n), this._nodesMap[e] = n, n + }, i.prototype.getNodeById = function (e) { + return this._nodesMap[e] + }, i.prototype.addEdge = function (e, t, n) { + if ('string' == typeof e && (e = this._nodesMap[e]), 'string' == typeof t && (t = this._nodesMap[t]), e && t) { + var a = e.id + '-' + t.id + if (this._edgesMap[a]) return this._edgesMap[a] + var o = new i.Edge(e, t, n) + return this._directed && (e.outEdges.push(o), t.inEdges.push(o)), e.edges.push(o), e !== t && t.edges.push(o), this.edges.push(o), this._edgesMap[a] = o, o + } + }, i.prototype.removeEdge = function (e) { + var i = e.node1, n = e.node2, a = i.id + '-' + n.id + this._directed && (i.outEdges.splice(t.indexOf(i.outEdges, e), 1), n.inEdges.splice(t.indexOf(n.inEdges, e), 1)), i.edges.splice(t.indexOf(i.edges, e), 1), i !== n && n.edges.splice(t.indexOf(n.edges, e), 1), delete this._edgesMap[a], this.edges.splice(t.indexOf(this.edges, e), 1) + }, i.prototype.getEdge = function (e, t) { + return 'string' != typeof e && (e = e.id), 'string' != typeof t && (t = t.id), this._directed ? this._edgesMap[e + '-' + t] : this._edgesMap[e + '-' + t] || this._edgesMap[t + '-' + e] + }, i.prototype.removeNode = function (e) { + if ('string' != typeof e || (e = this._nodesMap[e])) { + delete this._nodesMap[e.id], this.nodes.splice(t.indexOf(this.nodes, e), 1) + for (var i = 0; i < this.edges.length;) { + var n = this.edges[i] + n.node1 === e || n.node2 === e ? this.removeEdge(n) : i++ + } + } + }, i.prototype.filterNode = function (e, t) { + for (var i = this.nodes.length, n = 0; i > n;) e.call(t, this.nodes[n], n) ? n++ : (this.removeNode(this.nodes[n]), i--) + }, i.prototype.filterEdge = function (e, t) { + for (var i = this.edges.length, n = 0; i > n;) e.call(t, this.edges[n], n) ? n++ : (this.removeEdge(this.edges[n]), i--) + }, i.prototype.eachNode = function (e, t) { + for (var i = this.nodes.length, n = 0; i > n; n++) this.nodes[n] && e.call(t, this.nodes[n], n) + }, i.prototype.eachEdge = function (e, t) { + for (var i = this.edges.length, n = 0; i > n; n++) this.edges[n] && e.call(t, this.edges[n], n) + }, i.prototype.clear = function () { + this.nodes.length = 0, this.edges.length = 0, this._nodesMap = {}, this._edgesMap = {} + }, i.prototype.breadthFirstTraverse = function (e, t, i, n) { + if ('string' == typeof t && (t = this._nodesMap[t]), t) { + var a = 'edges' + 'out' === i ? a = 'outEdges' : 'in' === i && (a = 'inEdges') + for (var o = 0; o < this.nodes.length; o++) this.nodes[o].__visited = !1 + if (!e.call(n, t, null)) for (var r = [t]; r.length;) for (var s = r.shift(), l = s[a], o = 0; o < l.length; o++) { + var h = l[o], m = h.node1 === s ? h.node2 : h.node1 + if (!m.__visited) { + if (e.call(m, m, s)) return + r.push(m), m.__visited = !0 + } + } + } + }, i.prototype.clone = function () { + for (var e = new i(this._directed), t = 0; t < this.nodes.length; t++) e.addNode(this.nodes[t].id, this.nodes[t].data) + for (var t = 0; t < this.edges.length; t++) { + var n = this.edges[t] + e.addEdge(n.node1.id, n.node2.id, n.data) + } + return e + } + var n = function (e, t) { + this.id = e, this.data = t || null, this.inEdges = [], this.outEdges = [], this.edges = [] + } + n.prototype.degree = function () { + return this.edges.length + }, n.prototype.inDegree = function () { + return this.inEdges.length + }, n.prototype.outDegree = function () { + return this.outEdges.length + } + var a = function (e, t, i) { + this.node1 = e, this.node2 = t, this.data = i || null + } + return i.Node = n, i.Edge = a, i.fromMatrix = function (e, t, n) { + if (t && t.length && t[0].length === t.length && e.length === t.length) { + for (var a = t.length, o = new i(n), r = 0; a > r; r++) { + var s = o.addNode(e[r].id, e[r]) + s.data.value = 0, n && (s.data.outValue = s.data.inValue = 0) + } + for (var r = 0; a > r; r++) for (var l = 0; a > l; l++) { + var h = t[r][l] + n && (o.nodes[r].data.outValue += h, o.nodes[l].data.inValue += h), o.nodes[r].data.value += h, o.nodes[l].data.value += h + } + for (var r = 0; a > r; r++) for (var l = r; a > l; l++) { + var h = t[r][l] + if (0 !== h) { + var m = o.nodes[r], V = o.nodes[l], U = o.addEdge(m, V, {}) + if (U.data.weight = h, r !== l && n && t[l][r]) { + var d = o.addEdge(V, m, {}) + d.data.weight = t[l][r] + } + } + } + return o + } + }, i + }),i('echarts/layout/Chord', ['require'], function () { + var e = function (e) { + e = e || {}, this.sort = e.sort || null, this.sortSub = e.sortSub || null, this.padding = .05, this.startAngle = e.startAngle || 0, this.clockWise = null == e.clockWise ? !1 : e.clockWise, this.center = e.center || [0, 0], this.directed = !0 + } + e.prototype.run = function (e) { + e instanceof Array || (e = [e]) + var n = e.length + if (n) { + for (var a = e[0], o = a.nodes.length, r = [], s = 0, l = 0; o > l; l++) { + var h = a.nodes[l], m = { size: 0, subGroups: [], node: h } + r.push(m) + for (var V = 0, U = 0; U < e.length; U++) { + var d = e[U], p = d.getNodeById(h.id) + if (p) { + m.size += p.layout.size + for (var c = this.directed ? p.outEdges : p.edges, u = 0; u < c.length; u++) { + var y = c[u], g = y.layout.weight + m.subGroups.push({ weight: g, edge: y, graph: d }), V += g + } + } + } + s += m.size + for (var b = m.size / V, u = 0; u < m.subGroups.length; u++) m.subGroups[u].weight *= b + 'ascending' === this.sortSub ? m.subGroups.sort(t) : 'descending' === this.sort && (m.subGroups.sort(t), m.subGroups.reverse()) + } + 'ascending' === this.sort ? r.sort(i) : 'descending' === this.sort && (r.sort(i), r.reverse()) + for (var b = (2 * Math.PI - this.padding * o) / s, f = this.startAngle, k = this.clockWise ? 1 : -1, l = 0; o > l; l++) { + var m = r[l] + m.node.layout.startAngle = f, m.node.layout.endAngle = f + k * m.size * b, m.node.layout.subGroups = [] + for (var u = 0; u < m.subGroups.length; u++) { + var x = m.subGroups[u] + x.edge.layout.startAngle = f, f += k * x.weight * b, x.edge.layout.endAngle = f + } + f = m.node.layout.endAngle + k * this.padding + } + } + } + var t = function (e, t) { + return e.weight - t.weight + }, i = function (e, t) { + return e.size - t.size + } + return e + }),i('echarts/chart/force', ['require', './base', '../data/Graph', '../layout/Force', 'zrender/shape/Line', 'zrender/shape/BezierCurve', 'zrender/shape/Image', '../util/shape/Icon', '../config', '../util/ecData', 'zrender/tool/util', 'zrender/config', 'zrender/tool/vector', '../chart'], function (e) { + 'use strict' + + function t (e, t, o, h, m) { + var V = this + r.call(this, e, t, o, h, m), this.__nodePositionMap = {}, this._graph = new s(!0), this._layout = new l, this._layout.onupdate = function () { + V._step() + }, this._steps = 1, this.ondragstart = function () { + i.apply(V, arguments) + }, this.ondragend = function () { + a.apply(V, arguments) + }, this.ondrop = function () { + }, this.shapeHandler.ondragstart = function () { + V.isDragstart = !0 + }, this.onmousemove = function () { + n.apply(V, arguments) + }, this.refresh(h) + } + + function i (e) { + if (this.isDragstart && e.target) { + var t = e.target + t.fixed = !0, this.isDragstart = !1, this.zr.on(u.EVENT.MOUSEMOVE, this.onmousemove) + } + } + + function n () { + this._layout.temperature = .8, this._step() + } + + function a (e, t) { + if (this.isDragend && e.target) { + var i = e.target + i.fixed = !1, t.dragIn = !0, t.needRefresh = !1, this.isDragend = !1, this.zr.un(u.EVENT.MOUSEMOVE, this.onmousemove) + } + } + + function o (e, t, i) { + var n = y.create() + return n[0] = (Math.random() - .5) * i + e, n[1] = (Math.random() - .5) * i + t, n + } + + var r = e('./base'), s = e('../data/Graph'), l = e('../layout/Force'), h = e('zrender/shape/Line'), + m = e('zrender/shape/BezierCurve'), V = e('zrender/shape/Image'), U = e('../util/shape/Icon'), + d = e('../config') + d.force = { + zlevel: 1, + z: 2, + center: ['50%', '50%'], + size: '100%', + preventOverlap: !1, + coolDown: .99, + minRadius: 10, + maxRadius: 20, + ratioScaling: !1, + large: !1, + useWorker: !1, + steps: 1, + scaling: 1, + gravity: 1, + symbol: 'circle', + symbolSize: 0, + linkSymbol: null, + linkSymbolSize: [10, 15], + draggable: !0, + clickable: !0, + roam: !1, + itemStyle: { + normal: { + label: { show: !1, position: 'inside' }, + nodeStyle: { brushType: 'both', borderColor: '#5182ab', borderWidth: 1 }, + linkStyle: { color: '#5182ab', width: 1, type: 'line' } + }, emphasis: { label: { show: !1 }, nodeStyle: {}, linkStyle: { opacity: 0 } } + } + } + var p = e('../util/ecData'), c = e('zrender/tool/util'), u = e('zrender/config'), y = e('zrender/tool/vector') + return t.prototype = { + constructor: t, type: d.CHART_TYPE_FORCE, _init: function () { + this.selectedMap = {} + var e, t = this.component.legend, i = this.series + this.clear() + for (var n = 0, a = i.length; a > n; n++) { + var o = i[n] + if (o.type === d.CHART_TYPE_FORCE) { + if (i[n] = this.reformOption(i[n]), e = i[n].name || '', this.selectedMap[e] = t ? t.isSelected(e) : !0, !this.selectedMap[e]) continue + this.buildMark(n), this._initSerie(o, n) + break + } + } + this.animationEffect() + }, _getNodeCategory: function (e, t) { + return e.categories && e.categories[t.category || 0] + }, _getNodeQueryTarget: function (e, t, i) { + i = i || 'normal' + var n = this._getNodeCategory(e, t) || {} + return [t.itemStyle && t.itemStyle[i], n && n.itemStyle && n.itemStyle[i], e.itemStyle[i].nodeStyle] + }, _getEdgeQueryTarget: function (e, t, i) { + return i = i || 'normal', [t.itemStyle && t.itemStyle[i], e.itemStyle[i].linkStyle] + }, _initSerie: function (e, t) { + this._temperature = 1, e.matrix ? this._graph = this._getSerieGraphFromDataMatrix(e) : e.links && (this._graph = this._getSerieGraphFromNodeLinks(e)), this._buildLinkShapes(e, t), this._buildNodeShapes(e, t) + var i = e.roam === !0 || 'move' === e.roam, n = e.roam === !0 || 'scale' === e.roam + this.zr.modLayer(this.getZlevelBase(), { + panable: i, + zoomable: n + }), (this.query('markPoint.effect.show') || this.query('markLine.effect.show')) && this.zr.modLayer(d.EFFECT_ZLEVEL, { + panable: i, + zoomable: n + }), this._initLayout(e), this._step() + }, _getSerieGraphFromDataMatrix: function (e) { + for (var t = [], i = 0, n = [], a = 0; a < e.matrix.length; a++) n[a] = e.matrix[a].slice() + for (var o = e.data || e.nodes, a = 0; a < o.length; a++) { + var r = {}, l = o[a] + for (var h in l) 'name' === h ? r.id = l.name : r[h] = l[h] + var m = this._getNodeCategory(e, l), V = m ? m.name : l.name + if (this.selectedMap[V] = this.isSelected(V), this.selectedMap[V]) t.push(r), i++ else { + n.splice(i, 1) + for (var U = 0; U < n.length; U++) n[U].splice(i, 1) + } + } + var d = s.fromMatrix(t, n, !0) + return d.eachNode(function (e, t) { + e.layout = { size: e.data.value, mass: 0 }, e.rawIndex = t + }), d.eachEdge(function (e) { + e.layout = { weight: e.data.weight } + }), d + }, _getSerieGraphFromNodeLinks: function (e) { + for (var t = new s(!0), i = e.data || e.nodes, n = 0, a = i.length; a > n; n++) { + var o = i[n] + if (o && !o.ignore) { + var r = this._getNodeCategory(e, o), l = r ? r.name : o.name + if (this.selectedMap[l] = this.isSelected(l), this.selectedMap[l]) { + var h = t.addNode(o.name, o) + h.rawIndex = n + } + } + } + for (var n = 0, a = e.links.length; a > n; n++) { + var m = e.links[n], V = m.source, U = m.target + 'number' == typeof V && (V = i[V], V && (V = V.name)), 'number' == typeof U && (U = i[U], U && (U = U.name)) + var d = t.addEdge(V, U, m) + d && (d.rawIndex = n) + } + return t.eachNode(function (e) { + var t = e.data.value + if (null == t) { + t = 0 + for (var i = 0; i < e.edges.length; i++) t += e.edges[i].data.weight || 0 + } + e.layout = { size: t, mass: 0 } + }), t.eachEdge(function (e) { + e.layout = { weight: null == e.data.weight ? 1 : e.data.weight } + }), t + }, _initLayout: function (e) { + var t = this._graph, i = t.nodes.length, n = this.query(e, 'minRadius'), a = this.query(e, 'maxRadius') + this._steps = e.steps || 1 + var r = this._layout + r.center = this.parseCenter(this.zr, e.center), r.width = this.parsePercent(e.size, this.zr.getWidth()), r.height = this.parsePercent(e.size, this.zr.getHeight()), r.large = e.large, r.scaling = e.scaling, r.ratioScaling = e.ratioScaling, r.gravity = e.gravity, r.temperature = 1, r.coolDown = e.coolDown, r.preventNodeEdgeOverlap = e.preventOverlap, r.preventNodeOverlap = e.preventOverlap + for (var s = 1 / 0, l = -(1 / 0), h = 0; i > h; h++) { + var m = t.nodes[h] + l = Math.max(m.layout.size, l), s = Math.min(m.layout.size, s) + } + for (var V = l - s, h = 0; i > h; h++) { + var m = t.nodes[h] + V > 0 ? (m.layout.size = (m.layout.size - s) * (a - n) / V + n, m.layout.mass = m.layout.size / a) : (m.layout.size = (a - n) / 2, m.layout.mass = .5) + } + for (var h = 0; i > h; h++) { + var m = t.nodes[h] + if ('undefined' != typeof this.__nodePositionMap[m.id]) m.layout.position = y.create(), y.copy(m.layout.position, this.__nodePositionMap[m.id]) else if ('undefined' != typeof m.data.initial) m.layout.position = y.create(), y.copy(m.layout.position, m.data.initial) else { + var U = this._layout.center, d = Math.min(this._layout.width, this._layout.height) + m.layout.position = o(U[0], U[1], .8 * d) + } + var p = m.shape.style, c = m.layout.size + p.width = p.width || 2 * c, p.height = p.height || 2 * c, p.x = -p.width / 2, p.y = -p.height / 2, y.copy(m.shape.position, m.layout.position) + } + i = t.edges.length, l = -(1 / 0) + for (var h = 0; i > h; h++) { + var u = t.edges[h] + u.layout.weight > l && (l = u.layout.weight) + } + for (var h = 0; i > h; h++) { + var u = t.edges[h] + u.layout.weight /= l + } + this._layout.init(t, e.useWorker) + }, _buildNodeShapes: function (e, t) { + var i = this._graph, n = this.query(e, 'categories') + i.eachNode(function (i) { + var a = this._getNodeCategory(e, i.data), o = [i.data, a, e], + r = this._getNodeQueryTarget(e, i.data), s = this._getNodeQueryTarget(e, i.data, 'emphasis'), + l = new U({ + style: { + x: 0, + y: 0, + color: this.deepQuery(r, 'color'), + brushType: 'both', + strokeColor: this.deepQuery(r, 'strokeColor') || this.deepQuery(r, 'borderColor'), + lineWidth: this.deepQuery(r, 'lineWidth') || this.deepQuery(r, 'borderWidth') + }, + highlightStyle: { + color: this.deepQuery(s, 'color'), + strokeColor: this.deepQuery(s, 'strokeColor') || this.deepQuery(s, 'borderColor'), + lineWidth: this.deepQuery(s, 'lineWidth') || this.deepQuery(s, 'borderWidth') + }, + clickable: e.clickable, + zlevel: this.getZlevelBase(), + z: this.getZBase() + }) + l.style.color || (l.style.color = this.getColor(a ? a.name : i.id)), l.style.iconType = this.deepQuery(o, 'symbol') + var h = this.deepQuery(o, 'symbolSize') || 0 + 'number' == typeof h && (h = [h, h]), l.style.width = 2 * h[0], l.style.height = 2 * h[1], l.style.iconType.match('image') && (l.style.image = l.style.iconType.replace(new RegExp('^image:\\/\\/'), ''), l = new V({ + style: l.style, + highlightStyle: l.highlightStyle, + clickable: l.clickable, + zlevel: this.getZlevelBase(), + z: this.getZBase() + })), this.deepQuery(o, 'itemStyle.normal.label.show') && (l.style.text = null == i.data.label ? i.id : i.data.label, l.style.textPosition = this.deepQuery(o, 'itemStyle.normal.label.position'), l.style.textColor = this.deepQuery(o, 'itemStyle.normal.label.textStyle.color'), l.style.textFont = this.getFont(this.deepQuery(o, 'itemStyle.normal.label.textStyle') || {})), this.deepQuery(o, 'itemStyle.emphasis.label.show') && (l.highlightStyle.textPosition = this.deepQuery(o, 'itemStyle.emphasis.label.position'), l.highlightStyle.textColor = this.deepQuery(o, 'itemStyle.emphasis.label.textStyle.color'), l.highlightStyle.textFont = this.getFont(this.deepQuery(o, 'itemStyle.emphasis.label.textStyle') || {})), this.deepQuery(o, 'draggable') && (this.setCalculable(l), l.dragEnableTime = 0, l.draggable = !0, l.ondragstart = this.shapeHandler.ondragstart, l.ondragover = null) + var m = '' + if ('undefined' != typeof i.category) { + var a = n[i.category] + m = a && a.name || '' + } + p.pack(l, e, t, i.data, i.rawIndex, i.data.name || '', i.category), this.shapeList.push(l), this.zr.addShape(l), i.shape = l + }, this) + }, _buildLinkShapes: function (e, t) { + for (var i = this._graph, n = i.edges.length, a = 0; n > a; a++) { + var o = i.edges[a], r = o.data, s = o.node1, l = o.node2, V = i.getEdge(l, s), + d = this._getEdgeQueryTarget(e, r), u = this.deepQuery(d, 'type') + e.linkSymbol && 'none' !== e.linkSymbol && (u = 'line') + var y = 'line' === u ? h : m, g = new y({ + style: { xStart: 0, yStart: 0, xEnd: 0, yEnd: 0 }, + clickable: this.query(e, 'clickable'), + highlightStyle: {}, + zlevel: this.getZlevelBase(), + z: this.getZBase() + }) + if (V && V.shape && (g.style.offset = 4, V.shape.style.offset = 4), c.merge(g.style, this.query(e, 'itemStyle.normal.linkStyle'), !0), c.merge(g.highlightStyle, this.query(e, 'itemStyle.emphasis.linkStyle'), !0), 'undefined' != typeof r.itemStyle && (r.itemStyle.normal && c.merge(g.style, r.itemStyle.normal, !0), r.itemStyle.emphasis && c.merge(g.highlightStyle, r.itemStyle.emphasis, !0)), g.style.lineWidth = g.style.lineWidth || g.style.width, g.style.strokeColor = g.style.strokeColor || g.style.color, g.highlightStyle.lineWidth = g.highlightStyle.lineWidth || g.highlightStyle.width, g.highlightStyle.strokeColor = g.highlightStyle.strokeColor || g.highlightStyle.color, p.pack(g, e, t, o.data, null == o.rawIndex ? a : o.rawIndex, o.data.name || s.id + ' - ' + l.id, s.id, l.id), this.shapeList.push(g), this.zr.addShape(g), o.shape = g, e.linkSymbol && 'none' !== e.linkSymbol) { + var b = new U({ + style: { + x: -5, + y: 0, + width: e.linkSymbolSize[0], + height: e.linkSymbolSize[1], + iconType: e.linkSymbol, + brushType: 'fill', + color: g.style.strokeColor + }, + highlightStyle: { brushType: 'fill' }, + position: [0, 0], + rotation: 0, + zlevel: this.getZlevelBase(), + z: this.getZBase() + }) + g._symbolShape = b, this.shapeList.push(b), this.zr.addShape(b) + } + } + }, _updateLinkShapes: function () { + for (var e = y.create(), t = y.create(), i = y.create(), n = y.create(), a = this._graph.edges, o = 0, r = a.length; r > o; o++) { + var s = a[o], l = s.node1.shape, h = s.node2.shape + y.copy(i, l.position), y.copy(n, h.position) + var m = s.shape.style + if (y.sub(e, i, n), y.normalize(e, e), m.offset ? (t[0] = e[1], t[1] = -e[0], y.scaleAndAdd(i, i, t, m.offset), y.scaleAndAdd(n, n, t, m.offset)) : 'bezier-curve' === s.shape.type && (m.cpX1 = (i[0] + n[0]) / 2 - (n[1] - i[1]) / 4, m.cpY1 = (i[1] + n[1]) / 2 - (i[0] - n[0]) / 4), m.xStart = i[0], m.yStart = i[1], m.xEnd = n[0], m.yEnd = n[1], s.shape.modSelf(), s.shape._symbolShape) { + var V = s.shape._symbolShape + y.copy(V.position, n), y.scaleAndAdd(V.position, V.position, e, h.style.width / 2 + 2) + var U = Math.atan2(e[1], e[0]) + V.rotation = Math.PI / 2 - U, V.modSelf() + } + } + }, _syncNodePositions: function () { + for (var e = this._graph, t = 0; t < e.nodes.length; t++) { + var i = e.nodes[t], n = i.layout.position, a = i.data, o = i.shape, r = o.fixed || a.fixX, + s = o.fixed || a.fixY + r === !0 ? r = 1 : isNaN(r) && (r = 0), s === !0 ? s = 1 : isNaN(s) && (s = 0), o.position[0] += (n[0] - o.position[0]) * (1 - r), o.position[1] += (n[1] - o.position[1]) * (1 - s), y.copy(n, o.position) + var l = a.name + if (l) { + var h = this.__nodePositionMap[l] + h || (h = this.__nodePositionMap[l] = y.create()), y.copy(h, n) + } + o.modSelf() + } + }, _step: function () { + this._syncNodePositions(), this._updateLinkShapes(), this.zr.refreshNextFrame(), this._layout.temperature > .01 ? this._layout.step(this._steps) : this.messageCenter.dispatch(d.EVENT.FORCE_LAYOUT_END, {}, {}, this.myChart) + }, refresh: function (e) { + if (e && (this.option = e, this.series = this.option.series), this.legend = this.component.legend, this.legend) this.getColor = function (e) { + return this.legend.getColor(e) + }, this.isSelected = function (e) { + return this.legend.isSelected(e) + } else { + var t = {}, i = 0 + this.getColor = function (e) { + return t[e] ? t[e] : (t[e] || (t[e] = this.zr.getColor(i++)), t[e]) + }, this.isSelected = function () { + return !0 + } + } + this._init() + }, dispose: function () { + this.clear(), this.shapeList = null, this.effectList = null, this._layout.dispose(), this._layout = null, this.__nodePositionMap = {} + }, getPosition: function () { + var e = [] + return this._graph.eachNode(function (t) { + t.layout && e.push({ name: t.data.name, position: Array.prototype.slice.call(t.layout.position) }) + }), e + } + }, c.inherits(t, r), e('../chart').define('force', t), t + }),i('echarts/layout/Force', ['require', './forceLayoutWorker', 'zrender/tool/vector'], function (e) { + function t () { + if ('undefined' != typeof Worker && 'undefined' != typeof Blob) try { + var e = new Blob([n.getWorkerCode()]) + i = window.URL.createObjectURL(e) + } catch (t) { + i = '' + } + return i + } + + var i, n = e('./forceLayoutWorker'), a = e('zrender/tool/vector'), + o = window.requestAnimationFrame || window.msRequestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (e) { + setTimeout(e, 16) + }, r = 'undefined' == typeof Float32Array ? Array : Float32Array, s = function (e) { + 'undefined' == typeof i && t(), e = e || {}, this.width = e.width || 500, this.height = e.height || 500, this.center = e.center || [this.width / 2, this.height / 2], this.ratioScaling = e.ratioScaling || !1, this.scaling = e.scaling || 1, this.gravity = 'undefined' != typeof e.gravity ? e.gravity : 1, this.large = e.large || !1, this.preventNodeOverlap = e.preventNodeOverlap || !1, this.preventNodeEdgeOverlap = e.preventNodeEdgeOverlap || !1, this.maxSpeedIncrease = e.maxSpeedIncrease || 1, this.onupdate = e.onupdate || function () { + }, this.temperature = e.temperature || 1, this.coolDown = e.coolDown || .99, this._layout = null, this._layoutWorker = null + var n = this, a = this._$onupdate + this._$onupdate = function (e) { + a.call(n, e) + } + } + return s.prototype.updateConfig = function () { + var e = this.width, t = this.height, i = Math.min(e, t), n = { + center: this.center, + width: this.ratioScaling ? e : i, + height: this.ratioScaling ? t : i, + scaling: this.scaling || 1, + gravity: this.gravity || 1, + barnesHutOptimize: this.large, + preventNodeOverlap: this.preventNodeOverlap, + preventNodeEdgeOverlap: this.preventNodeEdgeOverlap, + maxSpeedIncrease: this.maxSpeedIncrease + } + if (this._layoutWorker) this._layoutWorker.postMessage({ + cmd: 'updateConfig', + config: n + }) else for (var a in n) this._layout[a] = n[a] + }, s.prototype.init = function (e, t) { + if (this._layoutWorker && (this._layoutWorker.terminate(), this._layoutWorker = null), i && t) try { + this._layoutWorker || (this._layoutWorker = new Worker(i), this._layoutWorker.onmessage = this._$onupdate), this._layout = null + } catch (a) { + this._layoutWorker = null, this._layout || (this._layout = new n) + } else this._layout || (this._layout = new n) + this.temperature = 1, this.graph = e + for (var o = e.nodes.length, s = new r(2 * o), l = new r(o), h = new r(o), m = 0; o > m; m++) { + var V = e.nodes[m] + s[2 * m] = V.layout.position[0], s[2 * m + 1] = V.layout.position[1], l[m] = 'undefined' == typeof V.layout.mass ? 1 : V.layout.mass, h[m] = 'undefined' == typeof V.layout.size ? 1 : V.layout.size, V.layout.__index = m + } + o = e.edges.length + for (var U = new r(2 * o), d = new r(o), m = 0; o > m; m++) { + var p = e.edges[m] + U[2 * m] = p.node1.layout.__index, U[2 * m + 1] = p.node2.layout.__index, d[m] = p.layout.weight || 1 + } + this._layoutWorker ? this._layoutWorker.postMessage({ + cmd: 'init', + nodesPosition: s, + nodesMass: l, + nodesSize: h, + edges: U, + edgesWeight: d + }) : (this._layout.initNodes(s, l, h), this._layout.initEdges(U, d)), this.updateConfig() + }, s.prototype.step = function (e) { + var t = this.graph.nodes + if (this._layoutWorker) { + for (var i = new r(2 * t.length), n = 0; n < t.length; n++) { + var s = t[n] + i[2 * n] = s.layout.position[0], i[2 * n + 1] = s.layout.position[1] + } + this._layoutWorker.postMessage(i.buffer, [i.buffer]), this._layoutWorker.postMessage({ + cmd: 'update', + steps: e, + temperature: this.temperature, + coolDown: this.coolDown + }) + for (var n = 0; e > n; n++) this.temperature *= this.coolDown + } else { + o(this._$onupdate) + for (var n = 0; n < t.length; n++) { + var s = t[n] + a.copy(this._layout.nodes[n].position, s.layout.position) + } + for (var n = 0; e > n; n++) this._layout.temperature = this.temperature, this._layout.update(), this.temperature *= this.coolDown + } + }, s.prototype._$onupdate = function (e) { + if (this._layoutWorker) { + for (var t = new Float32Array(e.data), i = 0; i < this.graph.nodes.length; i++) { + var n = this.graph.nodes[i] + n.layout.position[0] = t[2 * i], n.layout.position[1] = t[2 * i + 1] + } + this.onupdate && this.onupdate() + } else if (this._layout) { + for (var i = 0; i < this.graph.nodes.length; i++) { + var n = this.graph.nodes[i] + a.copy(n.layout.position, this._layout.nodes[i].position) + } + this.onupdate && this.onupdate() + } + }, s.prototype.dispose = function () { + this._layoutWorker && this._layoutWorker.terminate(), this._layoutWorker = null, this._layout = null + }, s + }),i('echarts/layout/forceLayoutWorker', ['require', 'zrender/tool/vector'], function o (e) { + 'use strict' + + function t () { + this.subRegions = [], this.nSubRegions = 0, this.node = null, this.mass = 0, this.centerOfMass = null, this.bbox = new l(4), this.size = 0 + } + + function i () { + this.position = r.create(), this.force = r.create(), this.forcePrev = r.create(), this.speed = r.create(), this.speedPrev = r.create(), this.mass = 1, this.inDegree = 0, this.outDegree = 0 + } + + function n (e, t) { + this.node1 = e, this.node2 = t, this.weight = 1 + } + + function a () { + this.barnesHutOptimize = !1, this.barnesHutTheta = 1.5, this.repulsionByDegree = !1, this.preventNodeOverlap = !1, this.preventNodeEdgeOverlap = !1, this.strongGravity = !0, this.gravity = 1, this.scaling = 1, this.edgeWeightInfluence = 1, this.center = [0, 0], this.width = 500, this.height = 500, this.maxSpeedIncrease = 1, this.nodes = [], this.edges = [], this.bbox = new l(4), this._rootRegion = new t, this._rootRegion.centerOfMass = r.create(), this._massArr = null, this._k = 0 + } + + var r, s = 'undefined' == typeof window && 'undefined' == typeof e + r = s ? { + create: function (e, t) { + var i = new Float32Array(2) + return i[0] = e || 0, i[1] = t || 0, i + }, dist: function (e, t) { + var i = t[0] - e[0], n = t[1] - e[1] + return Math.sqrt(i * i + n * n) + }, len: function (e) { + var t = e[0], i = e[1] + return Math.sqrt(t * t + i * i) + }, scaleAndAdd: function (e, t, i, n) { + return e[0] = t[0] + i[0] * n, e[1] = t[1] + i[1] * n, e + }, scale: function (e, t, i) { + return e[0] = t[0] * i, e[1] = t[1] * i, e + }, add: function (e, t, i) { + return e[0] = t[0] + i[0], e[1] = t[1] + i[1], e + }, sub: function (e, t, i) { + return e[0] = t[0] - i[0], e[1] = t[1] - i[1], e + }, dot: function (e, t) { + return e[0] * t[0] + e[1] * t[1] + }, normalize: function (e, t) { + var i = t[0], n = t[1], a = i * i + n * n + return a > 0 && (a = 1 / Math.sqrt(a), e[0] = t[0] * a, e[1] = t[1] * a), e + }, negate: function (e, t) { + return e[0] = -t[0], e[1] = -t[1], e + }, copy: function (e, t) { + return e[0] = t[0], e[1] = t[1], e + }, set: function (e, t, i) { + return e[0] = t, e[1] = i, e + } + } : e('zrender/tool/vector') + var l = 'undefined' == typeof Float32Array ? Array : Float32Array + if (t.prototype.beforeUpdate = function () { + for (var e = 0; e < this.nSubRegions; e++) this.subRegions[e].beforeUpdate() + this.mass = 0, this.centerOfMass && (this.centerOfMass[0] = 0, this.centerOfMass[1] = 0), this.nSubRegions = 0, this.node = null + }, t.prototype.afterUpdate = function () { + this.subRegions.length = this.nSubRegions + for (var e = 0; e < this.nSubRegions; e++) this.subRegions[e].afterUpdate() + }, t.prototype.addNode = function (e) { + if (0 === this.nSubRegions) { + if (null == this.node) return void (this.node = e) + this._addNodeToSubRegion(this.node), this.node = null + } + this._addNodeToSubRegion(e), this._updateCenterOfMass(e) + }, t.prototype.findSubRegion = function (e, t) { + for (var i = 0; i < this.nSubRegions; i++) { + var n = this.subRegions[i] + if (n.contain(e, t)) return n + } + }, t.prototype.contain = function (e, t) { + return this.bbox[0] <= e && this.bbox[2] >= e && this.bbox[1] <= t && this.bbox[3] >= t + }, t.prototype.setBBox = function (e, t, i, n) { + this.bbox[0] = e, this.bbox[1] = t, this.bbox[2] = i, this.bbox[3] = n, this.size = (i - e + n - t) / 2 + }, t.prototype._newSubRegion = function () { + var e = this.subRegions[this.nSubRegions] + return e || (e = new t, this.subRegions[this.nSubRegions] = e), this.nSubRegions++, e + }, t.prototype._addNodeToSubRegion = function (e) { + var t = this.findSubRegion(e.position[0], e.position[1]), i = this.bbox + if (!t) { + var n = (i[0] + i[2]) / 2, a = (i[1] + i[3]) / 2, o = (i[2] - i[0]) / 2, r = (i[3] - i[1]) / 2, + s = e.position[0] >= n ? 1 : 0, l = e.position[1] >= a ? 1 : 0, t = this._newSubRegion() + t.setBBox(s * o + i[0], l * r + i[1], (s + 1) * o + i[0], (l + 1) * r + i[1]) + } + t.addNode(e) + }, t.prototype._updateCenterOfMass = function (e) { + null == this.centerOfMass && (this.centerOfMass = r.create()) + var t = this.centerOfMass[0] * this.mass, i = this.centerOfMass[1] * this.mass + t += e.position[0] * e.mass, i += e.position[1] * e.mass, this.mass += e.mass, this.centerOfMass[0] = t / this.mass, this.centerOfMass[1] = i / this.mass + }, a.prototype.nodeToNodeRepulsionFactor = function (e, t, i) { + return i * i * e / t + }, a.prototype.edgeToNodeRepulsionFactor = function (e, t, i) { + return i * e / t + }, a.prototype.attractionFactor = function (e, t, i) { + return e * t / i + }, a.prototype.initNodes = function (e, t, n) { + this.temperature = 1 + var a = e.length / 2 + this.nodes.length = 0 + for (var o = 'undefined' != typeof n, r = 0; a > r; r++) { + var s = new i + s.position[0] = e[2 * r], s.position[1] = e[2 * r + 1], s.mass = t[r], o && (s.size = n[r]), this.nodes.push(s) + } + this._massArr = t, o && (this._sizeArr = n) + }, a.prototype.initEdges = function (e, t) { + var i = e.length / 2 + this.edges.length = 0 + for (var a = 'undefined' != typeof t, o = 0; i > o; o++) { + var r = e[2 * o], s = e[2 * o + 1], l = this.nodes[r], h = this.nodes[s] + if (l && h) { + l.outDegree++, h.inDegree++ + var m = new n(l, h) + a && (m.weight = t[o]), this.edges.push(m) + } + } + }, a.prototype.update = function () { + var e = this.nodes.length + if (this.updateBBox(), this._k = .4 * this.scaling * Math.sqrt(this.width * this.height / e), this.barnesHutOptimize) { + this._rootRegion.setBBox(this.bbox[0], this.bbox[1], this.bbox[2], this.bbox[3]), this._rootRegion.beforeUpdate() + for (var t = 0; e > t; t++) this._rootRegion.addNode(this.nodes[t]) + this._rootRegion.afterUpdate() + } else { + var i = 0, n = this._rootRegion.centerOfMass + r.set(n, 0, 0) + for (var t = 0; e > t; t++) { + var a = this.nodes[t] + i += a.mass, r.scaleAndAdd(n, n, a.position, a.mass) + + } + i > 0 && r.scale(n, n, 1 / i) + } + this.updateForce(), this.updatePosition() + }, a.prototype.updateForce = function () { + for (var e = this.nodes.length, t = 0; e > t; t++) { + var i = this.nodes[t] + r.copy(i.forcePrev, i.force), r.copy(i.speedPrev, i.speed), r.set(i.force, 0, 0) + } + this.updateNodeNodeForce(), this.gravity > 0 && this.updateGravityForce(), this.updateEdgeForce(), this.preventNodeEdgeOverlap && this.updateNodeEdgeForce() + }, a.prototype.updatePosition = function () { + for (var e = this.nodes.length, t = r.create(), i = 0; e > i; i++) { + var n = this.nodes[i], a = n.speed + r.scale(n.force, n.force, 1 / 30) + var o = r.len(n.force) + .1, s = Math.min(o, 500) / o + r.scale(n.force, n.force, s), r.add(a, a, n.force), r.scale(a, a, this.temperature), r.sub(t, a, n.speedPrev) + var l = r.len(t) + if (l > 0) { + r.scale(t, t, 1 / l) + var h = r.len(n.speedPrev) + h > 0 && (l = Math.min(l / h, this.maxSpeedIncrease) * h, r.scaleAndAdd(a, n.speedPrev, t, l)) + } + var m = r.len(a), s = Math.min(m, 100) / (m + .1) + r.scale(a, a, s), r.add(n.position, n.position, a) + } + }, a.prototype.updateNodeNodeForce = function () { + for (var e = this.nodes.length, t = 0; e > t; t++) { + var i = this.nodes[t] + if (this.barnesHutOptimize) this.applyRegionToNodeRepulsion(this._rootRegion, i) else for (var n = t + 1; e > n; n++) { + var a = this.nodes[n] + this.applyNodeToNodeRepulsion(i, a, !1) + } + } + }, a.prototype.updateGravityForce = function () { + for (var e = 0; e < this.nodes.length; e++) this.applyNodeGravity(this.nodes[e]) + }, a.prototype.updateEdgeForce = function () { + for (var e = 0; e < this.edges.length; e++) this.applyEdgeAttraction(this.edges[e]) + }, a.prototype.updateNodeEdgeForce = function () { + for (var e = 0; e < this.nodes.length; e++) for (var t = 0; t < this.edges.length; t++) this.applyEdgeToNodeRepulsion(this.edges[t], this.nodes[e]) + }, a.prototype.applyRegionToNodeRepulsion = function () { + var e = r.create() + return function (t, i) { + if (t.node) this.applyNodeToNodeRepulsion(t.node, i, !0) else { + if (0 === t.mass && 0 === i.mass) return + r.sub(e, i.position, t.centerOfMass) + var n = e[0] * e[0] + e[1] * e[1] + if (n > this.barnesHutTheta * t.size * t.size) { + var a = this._k * this._k * (i.mass + t.mass) / (n + 1) + r.scaleAndAdd(i.force, i.force, e, 2 * a) + } else for (var o = 0; o < t.nSubRegions; o++) this.applyRegionToNodeRepulsion(t.subRegions[o], i) + } + } + }(), a.prototype.applyNodeToNodeRepulsion = function () { + var e = r.create() + return function (t, i, n) { + if (t !== i && (0 !== t.mass || 0 !== i.mass)) { + r.sub(e, t.position, i.position) + var a = e[0] * e[0] + e[1] * e[1] + if (0 !== a) { + var o, s = t.mass + i.mass, l = Math.sqrt(a) + r.scale(e, e, 1 / l), this.preventNodeOverlap ? (l = l - t.size - i.size, l > 0 ? o = this.nodeToNodeRepulsionFactor(s, l, this._k) : 0 >= l && (o = this._k * this._k * 10 * s)) : o = this.nodeToNodeRepulsionFactor(s, l, this._k), n || r.scaleAndAdd(t.force, t.force, e, 2 * o), r.scaleAndAdd(i.force, i.force, e, 2 * -o) + } + } + } + }(), a.prototype.applyEdgeAttraction = function () { + var e = r.create() + return function (t) { + var i = t.node1, n = t.node2 + r.sub(e, i.position, n.position) + var a, o = r.len(e) + a = 0 === this.edgeWeightInfluence ? 1 : 1 == this.edgeWeightInfluence ? t.weight : Math.pow(t.weight, this.edgeWeightInfluence) + var s + if (!(this.preventOverlap && (o = o - i.size - n.size, 0 >= o))) { + var s = this.attractionFactor(a, o, this._k) + r.scaleAndAdd(i.force, i.force, e, -s), r.scaleAndAdd(n.force, n.force, e, s) + } + } + }(), a.prototype.applyNodeGravity = function () { + var e = r.create() + return function (t) { + r.sub(e, this.center, t.position), this.width > this.height ? e[1] *= this.width / this.height : e[0] *= this.height / this.width + var i = r.len(e) / 100 + this.strongGravity ? r.scaleAndAdd(t.force, t.force, e, i * this.gravity * t.mass) : r.scaleAndAdd(t.force, t.force, e, this.gravity * t.mass / (i + 1)) + } + }(), a.prototype.applyEdgeToNodeRepulsion = function () { + var e = r.create(), t = r.create(), i = r.create() + return function (n, a) { + var o = n.node1, s = n.node2 + if (o !== a && s !== a) { + r.sub(e, s.position, o.position), r.sub(t, a.position, o.position) + var l = r.len(e) + r.scale(e, e, 1 / l) + var h = r.dot(e, t) + if (!(0 > h || h > l)) { + r.scaleAndAdd(i, o.position, e, h) + var m = r.dist(i, a.position) - a.size, + V = this.edgeToNodeRepulsionFactor(a.mass, Math.max(m, .1), 100) + r.sub(e, a.position, i), r.normalize(e, e), r.scaleAndAdd(a.force, a.force, e, V), r.scaleAndAdd(o.force, o.force, e, -V), r.scaleAndAdd(s.force, s.force, e, -V) + } + } + } + }(), a.prototype.updateBBox = function () { + for (var e = 1 / 0, t = 1 / 0, i = -(1 / 0), n = -(1 / 0), a = 0; a < this.nodes.length; a++) { + var o = this.nodes[a].position + e = Math.min(e, o[0]), t = Math.min(t, o[1]), i = Math.max(i, o[0]), n = Math.max(n, o[1]) + } + this.bbox[0] = e, this.bbox[1] = t, this.bbox[2] = i, this.bbox[3] = n + }, a.getWorkerCode = function () { + var e = o.toString() + return e.slice(e.indexOf('{') + 1, e.lastIndexOf('return')) + }, s) { + var h = null + self.onmessage = function (e) { + if (e.data instanceof ArrayBuffer) { + if (!h) return + for (var t = new Float32Array(e.data), i = t.length / 2, n = 0; i > n; n++) { + var o = h.nodes[n] + o.position[0] = t[2 * n], o.position[1] = t[2 * n + 1] + } + } else switch (e.data.cmd) { + case'init': + h || (h = new a), h.initNodes(e.data.nodesPosition, e.data.nodesMass, e.data.nodesSize), h.initEdges(e.data.edges, e.data.edgesWeight) + break + case'updateConfig': + if (h) for (var r in e.data.config) h[r] = e.data.config[r] + break + case'update': + var s = e.data.steps + if (h) { + var i = h.nodes.length, t = new Float32Array(2 * i) + h.temperature = e.data.temperature + for (var n = 0; s > n; n++) h.update(), h.temperature *= e.data.coolDown + for (var n = 0; i > n; n++) { + var o = h.nodes[n] + t[2 * n] = o.position[0], t[2 * n + 1] = o.position[1] + } + self.postMessage(t.buffer, [t.buffer]) + } else { + var l = new Float32Array + self.postMessage(l.buffer, [l.buffer]) + } + } + } + } + return a + }),i('echarts/chart/map', ['require', './base', 'zrender/shape/Text', 'zrender/shape/Path', 'zrender/shape/Circle', 'zrender/shape/Rectangle', 'zrender/shape/Line', 'zrender/shape/Polygon', 'zrender/shape/Ellipse', 'zrender/shape/Image', '../component/dataRange', '../component/roamController', '../layer/heatmap', '../config', '../util/ecData', 'zrender/tool/util', 'zrender/config', 'zrender/tool/event', '../util/mapData/params', '../util/mapData/textFixed', '../util/mapData/geoCoord', '../util/projection/svg', '../util/projection/normal', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o) + var r = this + r._onmousewheel = function (e) { + return r.__onmousewheel(e) + }, r._onmousedown = function (e) { + return r.__onmousedown(e) + }, r._onmousemove = function (e) { + return r.__onmousemove(e) + }, r._onmouseup = function (e) { + return r.__onmouseup(e) + }, r._onroamcontroller = function (e) { + return r.__onroamcontroller(e) + }, r._ondrhoverlink = function (e) { + return r.__ondrhoverlink(e) + }, this._isAlive = !0, this._selectedMode = {}, this._activeMapType = {}, this._clickable = {}, this._hoverable = {}, this._showLegendSymbol = {}, this._selected = {}, this._mapTypeMap = {}, this._mapDataMap = {}, this._nameMap = {}, this._specialArea = {}, this._refreshDelayTicket, this._mapDataRequireCounter, this._markAnimation = !1, this._hoverLinkMap = {}, this._roamMap = {}, this._scaleLimitMap = {}, this._mx, this._my, this._mousedown, this._justMove, this._curMapType, this.refresh(a), this.zr.on(c.EVENT.MOUSEWHEEL, this._onmousewheel), this.zr.on(c.EVENT.MOUSEDOWN, this._onmousedown), t.bind(U.EVENT.ROAMCONTROLLER, this._onroamcontroller), t.bind(U.EVENT.DATA_RANGE_HOVERLINK, this._ondrhoverlink) + } + + var i = e('./base'), n = e('zrender/shape/Text'), a = e('zrender/shape/Path'), o = e('zrender/shape/Circle'), + r = e('zrender/shape/Rectangle'), s = e('zrender/shape/Line'), l = e('zrender/shape/Polygon'), + h = e('zrender/shape/Ellipse'), m = e('zrender/shape/Image') + e('../component/dataRange'), e('../component/roamController') + var V = e('../layer/heatmap'), U = e('../config') + U.map = { + zlevel: 0, + z: 2, + mapType: 'china', + showLegendSymbol: !0, + dataRangeHoverLink: !0, + hoverable: !0, + clickable: !0, + itemStyle: { + normal: { + borderColor: 'rgba(0,0,0,0)', + borderWidth: 1, + areaStyle: { color: '#ccc' }, + label: { show: !1, textStyle: { color: 'rgb(139,69,19)' } } + }, + emphasis: { + borderColor: 'rgba(0,0,0,0)', + borderWidth: 1, + areaStyle: { color: 'rgba(255,215,0,0.8)' }, + label: { show: !1, textStyle: { color: 'rgb(100,0,0)' } } + } + } + } + var d = e('../util/ecData'), p = e('zrender/tool/util'), c = e('zrender/config'), u = e('zrender/tool/event'), + y = e('../util/mapData/params').params, g = e('../util/mapData/textFixed'), + b = e('../util/mapData/geoCoord') + return t.prototype = { + type: U.CHART_TYPE_MAP, _buildShape: function () { + var e = this.series + this.selectedMap = {}, this._activeMapType = {} + for (var t, i, n, a, o = this.component.legend, r = {}, s = {}, l = {}, h = {}, m = 0, V = e.length; V > m; m++) if (e[m].type == U.CHART_TYPE_MAP && (e[m] = this.reformOption(e[m]), i = e[m].mapType, s[i] = s[i] || {}, s[i][m] = !0, l[i] = l[i] || e[m].mapValuePrecision, this._scaleLimitMap[i] = this._scaleLimitMap[i] || {}, e[m].scaleLimit && p.merge(this._scaleLimitMap[i], e[m].scaleLimit, !0), this._roamMap[i] = e[m].roam || this._roamMap[i], (null == this._hoverLinkMap[i] || this._hoverLinkMap[i]) && (this._hoverLinkMap[i] = e[m].dataRangeHoverLink), this._nameMap[i] = this._nameMap[i] || {}, e[m].nameMap && p.merge(this._nameMap[i], e[m].nameMap, !0), this._activeMapType[i] = !0, e[m].textFixed && p.merge(g, e[m].textFixed, !0), e[m].geoCoord && p.merge(b, e[m].geoCoord, !0), this._selectedMode[i] = this._selectedMode[i] || e[m].selectedMode, (null == this._hoverable[i] || this._hoverable[i]) && (this._hoverable[i] = e[m].hoverable), (null == this._clickable[i] || this._clickable[i]) && (this._clickable[i] = e[m].clickable), (null == this._showLegendSymbol[i] || this._showLegendSymbol[i]) && (this._showLegendSymbol[i] = e[m].showLegendSymbol), h[i] = h[i] || e[m].mapValueCalculation, t = e[m].name, this.selectedMap[t] = o ? o.isSelected(t) : !0, this.selectedMap[t])) { + r[i] = r[i] || {}, n = e[m].data + for (var d = 0, c = n.length; c > d; d++) { + a = this._nameChange(i, n[d].name), r[i][a] = r[i][a] || { + seriesIndex: [], + valueMap: {}, + precision: 0 + } + for (var u in n[d]) 'value' != u ? r[i][a][u] = n[d][u] : isNaN(n[d].value) || (null == r[i][a].value && (r[i][a].value = 0), r[i][a].precision = Math.max(this.getPrecision(+n[d].value), r[i][a].precision), r[i][a].value += +n[d].value, r[i][a].valueMap[m] = +n[d].value) + r[i][a].seriesIndex.push(m) + } + } + this._mapDataRequireCounter = 0 + for (var f in r) this._mapDataRequireCounter++ + this._clearSelected(), 0 === this._mapDataRequireCounter && (this.clear(), this.zr && this.zr.delShape(this.lastShapeList), this.lastShapeList = []) + for (var f in r) { + for (var c in r[f]) { + 'average' == h[f] && (r[f][c].value /= r[f][c].seriesIndex.length) + var k = r[f][c].value + null != k && (r[f][c].value = k.toFixed(null == l[f] ? r[f][c].precision : l[f]) - 0) + } + this._mapDataMap[f] = this._mapDataMap[f] || {}, this._mapDataMap[f].mapData ? this._mapDataCallback(f, r[f], s[f])(this._mapDataMap[f].mapData) : y[f.replace(/\|.*/, '')].getGeoJson && (this._specialArea[f] = y[f.replace(/\|.*/, '')].specialArea || this._specialArea[f], y[f.replace(/\|.*/, '')].getGeoJson(this._mapDataCallback(f, r[f], s[f]))) + } + }, _mapDataCallback: function (t, i, n) { + var a = this + return function (o) { + a._isAlive && null != a._activeMapType[t] && (-1 != t.indexOf('|') && (o = a._getSubMapData(t, o)), a._mapDataMap[t].mapData = o, o.firstChild ? (a._mapDataMap[t].rate = 1, a._mapDataMap[t].projection = e('../util/projection/svg')) : (a._mapDataMap[t].rate = .75, a._mapDataMap[t].projection = e('../util/projection/normal')), a._buildMap(t, a._getProjectionData(t, o, n), i, n), a._buildMark(t, n), --a._mapDataRequireCounter <= 0 && (a.addShapeList(), a.zr.refreshNextFrame()), a._buildHeatmap(t)) + } + }, _clearSelected: function () { + for (var e in this._selected) this._activeMapType[this._mapTypeMap[e]] || (delete this._selected[e], delete this._mapTypeMap[e]) + }, _getSubMapData: function (e, t) { + for (var i = e.replace(/^.*\|/, ''), n = t.features, a = 0, o = n.length; o > a; a++) if (n[a].properties && n[a].properties.name == i) { + n = n[a], 'United States of America' == i && n.geometry.coordinates.length > 1 && (n = { + geometry: { + coordinates: n.geometry.coordinates.slice(5, 6), + type: n.geometry.type + }, id: n.id, properties: n.properties, type: n.type + }) + break + } + return { type: 'FeatureCollection', features: [n] } + }, _getProjectionData: function (e, t, i) { + var n, a = this._mapDataMap[e].projection, o = [], + r = this._mapDataMap[e].bbox || a.getBbox(t, this._specialArea[e]) + n = this._mapDataMap[e].hasRoam ? this._mapDataMap[e].transform : this._getTransform(r, i, this._mapDataMap[e].rate) + var s, l = this._mapDataMap[e].lastTransform || { scale: {} } + n.left != l.left || n.top != l.top || n.scale.x != l.scale.x || n.scale.y != l.scale.y ? (s = a.geoJson2Path(t, n, this._specialArea[e]), l = p.clone(n)) : (n = this._mapDataMap[e].transform, s = this._mapDataMap[e].pathArray), this._mapDataMap[e].bbox = r, this._mapDataMap[e].transform = n, this._mapDataMap[e].lastTransform = l, this._mapDataMap[e].pathArray = s + for (var h = [n.left, n.top], m = 0, V = s.length; V > m; m++) o.push(this._getSingleProvince(e, s[m], h)) + if (this._specialArea[e]) for (var U in this._specialArea[e]) o.push(this._getSpecialProjectionData(e, t, U, this._specialArea[e][U], h)) + if ('china' == e) { + var d = this.geo2pos(e, b['南海诸岛'] || y['南海诸岛'].textCoord), c = n.scale.x / 10.5, + u = [32 * c + d[0], 83 * c + d[1]] + g['南海诸岛'] && (u[0] += g['南海诸岛'][0], u[1] += g['南海诸岛'][1]), o.push({ + name: this._nameChange(e, '南海诸岛'), + path: y['南海诸岛'].getPath(d, c), + position: h, + textX: u[0], + textY: u[1] + }) + } + return o + }, _getSpecialProjectionData: function (t, i, n, a, o) { + i = this._getSubMapData('x|' + n, i) + var r = e('../util/projection/normal'), s = r.getBbox(i), l = this.geo2pos(t, [a.left, a.top]), + h = this.geo2pos(t, [a.left + a.width, a.top + a.height]), m = Math.abs(h[0] - l[0]), + V = Math.abs(h[1] - l[1]), U = s.width, d = s.height, p = m / .75 / U, c = V / d + p > c ? (p = .75 * c, m = U * p) : (c = p, p = .75 * c, V = d * c) + var u = { OffsetLeft: l[0], OffsetTop: l[1], scale: { x: p, y: c } }, y = r.geoJson2Path(i, u) + return this._getSingleProvince(t, y[0], o) + }, _getSingleProvince: function (e, t, i) { + var n, a = t.properties.name, o = g[a] || [0, 0] + if (b[a]) n = this.geo2pos(e, b[a]) else if (t.cp) n = [t.cp[0] + o[0], t.cp[1] + o[1]] else { + var r = this._mapDataMap[e].bbox + n = this.geo2pos(e, [r.left + r.width / 2, r.top + r.height / 2]), n[0] += o[0], n[1] += o[1] + } + return t.name = this._nameChange(e, a), t.position = i, t.textX = n[0], t.textY = n[1], t + }, _getTransform: function (e, t, i) { + var n, a, o, r, s, l, h, m = this.series, V = this.zr.getWidth(), U = this.zr.getHeight(), + d = Math.round(.02 * Math.min(V, U)) + for (var p in t) n = m[p].mapLocation || {}, o = n.x || o, s = n.y || s, l = n.width || l, h = n.height || h + a = this.parsePercent(o, V), a = isNaN(a) ? d : a, r = this.parsePercent(s, U), r = isNaN(r) ? d : r, l = null == l ? V - a - 2 * d : this.parsePercent(l, V), h = null == h ? U - r - 2 * d : this.parsePercent(h, U) + var c = e.width, u = e.height, y = l / i / c, g = h / u + if (y > g ? (y = g * i, l = c * y) : (g = y, y = g * i, h = u * g), isNaN(o)) switch (o = o || 'center', o + '') { + case'center': + a = Math.floor((V - l) / 2) + break + case'right': + a = V - l + } + if (isNaN(s)) switch (s = s || 'center', s + '') { + case'center': + r = Math.floor((U - h) / 2) + break + case'bottom': + r = U - h + } + return { left: a, top: r, width: l, height: h, baseScale: 1, scale: { x: y, y: g } } + }, _buildMap: function (e, t, i, m) { + for (var V, c, u, y, g, b, f, k, x, _, L, W = this.series, X = this.component.legend, v = this.component.dataRange, w = 0, K = t.length; K > w; w++) { + if (k = p.clone(t[w]), x = { + name: k.name, + path: k.path, + position: p.clone(k.position) + }, c = k.name, u = i[c]) { + g = [u], V = '' + for (var I = 0, J = u.seriesIndex.length; J > I; I++) { + var C = W[u.seriesIndex[I]] + g.push(C), V += C.name + ' ', X && this._showLegendSymbol[e] && X.hasColor(C.name) && this.shapeList.push(new o({ + zlevel: C.zlevel, + z: C.z + 1, + position: p.clone(k.position), + _mapType: e, + style: { x: k.textX + 3 + 7 * I, y: k.textY - 10, r: 3, color: X.getColor(C.name) }, + hoverable: !1 + })) + } + y = u.value + } else { + u = { name: c, value: '-' }, V = '', g = [] + for (var S in m) g.push(W[S]) + y = '-' + } + switch (this.ecTheme.map && g.push(this.ecTheme.map), g.push(U.map), b = v && !isNaN(y) ? v.getColor(y) : null, k.color = k.color || b || this.getItemStyleColor(this.deepQuery(g, 'itemStyle.normal.color'), u.seriesIndex, -1, u) || this.deepQuery(g, 'itemStyle.normal.areaStyle.color'), k.strokeColor = k.strokeColor || this.deepQuery(g, 'itemStyle.normal.borderColor'), k.lineWidth = k.lineWidth || this.deepQuery(g, 'itemStyle.normal.borderWidth'), x.color = this.getItemStyleColor(this.deepQuery(g, 'itemStyle.emphasis.color'), u.seriesIndex, -1, u) || this.deepQuery(g, 'itemStyle.emphasis.areaStyle.color') || k.color, x.strokeColor = this.deepQuery(g, 'itemStyle.emphasis.borderColor') || k.strokeColor, x.lineWidth = this.deepQuery(g, 'itemStyle.emphasis.borderWidth') || k.lineWidth, k.brushType = x.brushType = k.brushType || 'both', k.lineJoin = x.lineJoin = 'round', k._name = x._name = c, f = this.deepQuery(g, 'itemStyle.normal.label.textStyle'), L = { + zlevel: this.getZlevelBase(), + z: this.getZBase() + 1, + position: p.clone(k.position), + _mapType: e, + _geo: this.pos2geo(e, [k.textX, k.textY]), + style: { + brushType: 'fill', + x: k.textX, + y: k.textY, + text: this.getLabelText(c, y, g, 'normal'), + _name: c, + textAlign: 'center', + color: this.deepQuery(g, 'itemStyle.normal.label.show') ? this.deepQuery(g, 'itemStyle.normal.label.textStyle.color') : 'rgba(0,0,0,0)', + textFont: this.getFont(f) + } + }, L._style = p.clone(L.style), L.highlightStyle = p.clone(L.style), this.deepQuery(g, 'itemStyle.emphasis.label.show') ? (L.highlightStyle.text = this.getLabelText(c, y, g, 'emphasis'), L.highlightStyle.color = this.deepQuery(g, 'itemStyle.emphasis.label.textStyle.color') || L.style.color, f = this.deepQuery(g, 'itemStyle.emphasis.label.textStyle') || f, L.highlightStyle.textFont = this.getFont(f)) : L.highlightStyle.color = 'rgba(0,0,0,0)', _ = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + position: p.clone(k.position), + style: k, + highlightStyle: x, + _style: p.clone(k), + _mapType: e + }, null != k.scale && (_.scale = p.clone(k.scale)), L = new n(L), _.style.shapeType) { + case'rectangle': + _ = new r(_) + break + case'line': + _ = new s(_) + break + case'circle': + _ = new o(_) + break + case'polygon': + _ = new l(_) + break + case'ellipse': + _ = new h(_) + break + default: + _ = new a(_), _.buildPathArray && (_.style.pathArray = _.buildPathArray(_.style.path)) + } + (this._selectedMode[e] && this._selected[c] && u.selected !== !1 || u.selected === !0) && (L.style = L.highlightStyle, _.style = _.highlightStyle), L.clickable = _.clickable = this._clickable[e] && (null == u.clickable || u.clickable), this._selectedMode[e] && (this._selected[c] = null != this._selected[c] ? this._selected[c] : u.selected, this._mapTypeMap[c] = e, (null == u.selectable || u.selectable) && (_.clickable = L.clickable = !0, _.onclick = L.onclick = this.shapeHandler.onclick)), this._hoverable[e] && (null == u.hoverable || u.hoverable) ? (L.hoverable = _.hoverable = !0, _.hoverConnect = L.id, L.hoverConnect = _.id) : L.hoverable = _.hoverable = !1, d.pack(L, { + name: V, + tooltip: this.deepQuery(g, 'tooltip') + }, 0, u, 0, c), this.shapeList.push(L), d.pack(_, { + name: V, + tooltip: this.deepQuery(g, 'tooltip') + }, 0, u, 0, c), this.shapeList.push(_) + } + }, _buildMark: function (e, t) { + this._seriesIndexToMapType = this._seriesIndexToMapType || {}, this.markAttachStyle = this.markAttachStyle || {} + var i = [this._mapDataMap[e].transform.left, this._mapDataMap[e].transform.top] + 'none' == e && (i = [0, 0]) + for (var n in t) this._seriesIndexToMapType[n] = e, this.markAttachStyle[n] = { + position: i, + _mapType: e + }, this.buildMark(n) + }, _buildHeatmap: function (e) { + for (var t = this.series, i = 0, n = t.length; n > i; i++) if (t[i].heatmap) { + var a = t[i].heatmap.data + if (t[i].heatmap.needsTransform === !1) { + for (var o = [], r = 0, s = a.length; s > r; ++r) o.push([a[r][3], a[r][4], a[r][2]]) + var l = [0, 0] + } else { + var h = t[i].heatmap._geoData + if (void 0 === h) { + t[i].heatmap._geoData = [] + for (var r = 0, s = a.length; s > r; ++r) t[i].heatmap._geoData[r] = a[r] + h = t[i].heatmap._geoData + } + for (var s = a.length, U = 0; s > U; ++U) a[U] = this.geo2pos(e, [h[U][0], h[U][1]]) + var l = [this._mapDataMap[e].transform.left, this._mapDataMap[e].transform.top] + } + var d = new V(t[i].heatmap), + p = d.getCanvas(a[0][3] ? o : a, this.zr.getWidth(), this.zr.getHeight()), c = new m({ + zlevel: this.getZlevelBase(), + z: this.getZBase() + 1, + position: l, + scale: [1, 1], + hoverable: !1, + style: { x: 0, y: 0, image: p, width: p.width, height: p.height } + }) + c.type = 'heatmap', c._mapType = e, this.shapeList.push(c), this.zr.addShape(c) + } + }, getMarkCoord: function (e, t) { + return t.geoCoord || b[t.name] ? this.geo2pos(this._seriesIndexToMapType[e], t.geoCoord || b[t.name]) : [0, 0] + }, getMarkGeo: function (e) { + return e.geoCoord || b[e.name] + }, _nameChange: function (e, t) { + return this._nameMap[e][t] || t + }, getLabelText: function (e, t, i, n) { + var a = this.deepQuery(i, 'itemStyle.' + n + '.label.formatter') + return a ? 'function' == typeof a ? a.call(this.myChart, e, t) : 'string' == typeof a ? (a = a.replace('{a}', '{a0}').replace('{b}', '{b0}'), a = a.replace('{a0}', e).replace('{b0}', t)) : void 0 : e + }, _findMapTypeByPos: function (e, t) { + var i, n, a, o, r + for (var s in this._mapDataMap) if (i = this._mapDataMap[s].transform, i && this._roamMap[s] && this._activeMapType[s] && (n = i.left, a = i.top, o = i.width, r = i.height, e >= n && n + o >= e && t >= a && a + r >= t)) return s + }, __onmousewheel: function (e) { + function t (e, t) { + for (var i = 0; i < e.pointList.length; i++) { + var n = e.pointList[i] + n[0] *= t, n[1] *= t + } + var a = e.controlPointList + if (a) for (var i = 0; i < a.length; i++) { + var n = a[i] + n[0] *= t, n[1] *= t + } + } + + function i (e, t) { + e.xStart *= t, e.yStart *= t, e.xEnd *= t, e.yEnd *= t, null != e.cpX1 && (e.cpX1 *= t, e.cpY1 *= t) + } + + if (!(this.shapeList.length <= 0)) { + for (var n = 0, a = this.shapeList.length; a > n; n++) { + var o = this.shapeList[n] + if (o.__animating) return + } + var r, s, l = e.event, h = u.getX(l), m = u.getY(l), V = u.getDelta(l), d = e.mapTypeControl + d || (d = {}, s = this._findMapTypeByPos(h, m), s && this._roamMap[s] && 'move' != this._roamMap[s] && (d[s] = !0)) + var p = !1 + for (s in d) if (d[s]) { + p = !0 + var c = this._mapDataMap[s].transform, y = c.left, g = c.top, b = c.width, f = c.height, + k = this.pos2geo(s, [h - y, m - g]) + if (V > 0) { + if (r = 1.2, null != this._scaleLimitMap[s].max && c.baseScale >= this._scaleLimitMap[s].max) continue + } else if (r = 1 / 1.2, null != this._scaleLimitMap[s].min && c.baseScale <= this._scaleLimitMap[s].min) continue + c.baseScale *= r, c.scale.x *= r, c.scale.y *= r, c.width = b * r, c.height = f * r, this._mapDataMap[s].hasRoam = !0, this._mapDataMap[s].transform = c, k = this.geo2pos(s, k), c.left -= k[0] - (h - y), c.top -= k[1] - (m - g), this._mapDataMap[s].transform = c, this.clearEffectShape(!0) + for (var n = 0, a = this.shapeList.length; a > n; n++) { + var o = this.shapeList[n] + if (o._mapType == s) { + var x = o.type, _ = o.style + switch (o.position[0] = c.left, o.position[1] = c.top, x) { + case'path': + case'symbol': + case'circle': + case'rectangle': + case'polygon': + case'line': + case'ellipse': + case'heatmap': + o.scale[0] *= r, o.scale[1] *= r + break + case'mark-line': + i(_, r) + break + case'polyline': + t(_, r) + break + case'shape-bundle': + for (var L = 0; L < _.shapeList.length; L++) { + var W = _.shapeList[L] + 'mark-line' == W.type ? i(W.style, r) : 'polyline' == W.type && t(W.style, r) + } + break + case'icon': + case'image': + k = this.geo2pos(s, o._geo), _.x = _._x = k[0] - _.width / 2, _.y = _._y = k[1] - _.height / 2 + break + default: + k = this.geo2pos(s, o._geo), _.x = k[0], _.y = k[1], 'text' == x && (o._style.x = o.highlightStyle.x = k[0], o._style.y = o.highlightStyle.y = k[1]) + } + this.zr.modShape(o.id) + } + } + } + if (p) { + u.stop(l), this.zr.refreshNextFrame() + var X = this + clearTimeout(this._refreshDelayTicket), this._refreshDelayTicket = setTimeout(function () { + X && X.shapeList && X.animationEffect() + }, 100), this.messageCenter.dispatch(U.EVENT.MAP_ROAM, e.event, { type: 'scale' }, this.myChart) + } + } + }, __onmousedown: function (e) { + if (!(this.shapeList.length <= 0)) { + var t = e.target + if (!t || !t.draggable) { + var i = e.event, n = u.getX(i), a = u.getY(i), o = this._findMapTypeByPos(n, a) + if (o && this._roamMap[o] && 'scale' != this._roamMap[o]) { + this._mousedown = !0, this._mx = n, this._my = a, this._curMapType = o, this.zr.on(c.EVENT.MOUSEUP, this._onmouseup) + var r = this + setTimeout(function () { + r.zr.on(c.EVENT.MOUSEMOVE, r._onmousemove) + }, 100) + } + } + } + }, __onmousemove: function (e) { + if (this._mousedown && this._isAlive) { + var t = e.event, i = u.getX(t), n = u.getY(t), a = this._mapDataMap[this._curMapType].transform + a.hasRoam = !0, a.left -= this._mx - i, a.top -= this._my - n, this._mx = i, this._my = n, this._mapDataMap[this._curMapType].transform = a + for (var o = 0, r = this.shapeList.length; r > o; o++) this.shapeList[o]._mapType == this._curMapType && (this.shapeList[o].position[0] = a.left, this.shapeList[o].position[1] = a.top, this.zr.modShape(this.shapeList[o].id)) + this.messageCenter.dispatch(U.EVENT.MAP_ROAM, e.event, { type: 'move' }, this.myChart), this.clearEffectShape(!0), this.zr.refreshNextFrame(), this._justMove = !0, u.stop(t) + } + }, __onmouseup: function (e) { + var t = e.event + this._mx = u.getX(t), this._my = u.getY(t), this._mousedown = !1 + var i = this + setTimeout(function () { + i._justMove && i.animationEffect(), i._justMove = !1, i.zr.un(c.EVENT.MOUSEMOVE, i._onmousemove), i.zr.un(c.EVENT.MOUSEUP, i._onmouseup) + }, 120) + }, __onroamcontroller: function (e) { + var t = e.event + t.zrenderX = this.zr.getWidth() / 2, t.zrenderY = this.zr.getHeight() / 2 + var i = e.mapTypeControl, n = 0, a = 0, o = e.step + switch (e.roamType) { + case'scaleUp': + return t.zrenderDelta = 1, void this.__onmousewheel({ event: t, mapTypeControl: i }) + case'scaleDown': + return t.zrenderDelta = -1, void this.__onmousewheel({ event: t, mapTypeControl: i }) + case'up': + n = -o + break + case'down': + n = o + break + case'left': + a = -o + break + case'right': + a = o + } + var r, s + for (s in i) this._mapDataMap[s] && this._activeMapType[s] && (r = this._mapDataMap[s].transform, r.hasRoam = !0, r.left -= a, r.top -= n, this._mapDataMap[s].transform = r) + for (var l = 0, h = this.shapeList.length; h > l; l++) s = this.shapeList[l]._mapType, i[s] && this._activeMapType[s] && (r = this._mapDataMap[s].transform, this.shapeList[l].position[0] = r.left, this.shapeList[l].position[1] = r.top, this.zr.modShape(this.shapeList[l].id)) + this.messageCenter.dispatch(U.EVENT.MAP_ROAM, e.event, { type: 'move' }, this.myChart), this.clearEffectShape(!0), this.zr.refreshNextFrame(), clearTimeout(this.dircetionTimer) + var m = this + this.dircetionTimer = setTimeout(function () { + m.animationEffect() + }, 150) + }, __ondrhoverlink: function (e) { + for (var t, i, n = 0, a = this.shapeList.length; a > n; n++) t = this.shapeList[n]._mapType, this._hoverLinkMap[t] && this._activeMapType[t] && (i = d.get(this.shapeList[n], 'value'), null != i && i >= e.valueMin && i <= e.valueMax && this.zr.addHoverShape(this.shapeList[n])) + }, onclick: function (e) { + if (this.isClick && e.target && !this._justMove && 'icon' != e.target.type) { + this.isClick = !1 + var t = e.target, i = t.style._name, n = this.shapeList.length, a = t._mapType || '' + if ('single' == this._selectedMode[a]) for (var o in this._selected) if (this._selected[o] && this._mapTypeMap[o] == a) { + for (var r = 0; n > r; r++) this.shapeList[r].style._name == o && this.shapeList[r]._mapType == a && (this.shapeList[r].style = this.shapeList[r]._style, this.zr.modShape(this.shapeList[r].id)) + o != i && (this._selected[o] = !1) + } + this._selected[i] = !this._selected[i] + for (var r = 0; n > r; r++) this.shapeList[r].style._name == i && this.shapeList[r]._mapType == a && (this.shapeList[r].style = this._selected[i] ? this.shapeList[r].highlightStyle : this.shapeList[r]._style, this.zr.modShape(this.shapeList[r].id)) + this.messageCenter.dispatch(U.EVENT.MAP_SELECTED, e.event, { + selected: this._selected, + target: i + }, this.myChart), this.zr.refreshNextFrame() + var s = this + setTimeout(function () { + s.zr.trigger(c.EVENT.MOUSEMOVE, e.event) + }, 100) + } + }, refresh: function (e) { + e && (this.option = e, this.series = e.series), this._mapDataRequireCounter > 0 ? this.clear() : this.backupShapeList(), this._buildShape(), this.zr.refreshHover() + }, ondataRange: function (e, t) { + this.component.dataRange && (this.refresh(), t.needRefresh = !0) + }, pos2geo: function (e, t) { + return this._mapDataMap[e].transform ? this._mapDataMap[e].projection.pos2geo(this._mapDataMap[e].transform, t) : null + }, getGeoByPos: function (e, t) { + if (!this._mapDataMap[e].transform) return null + var i = [this._mapDataMap[e].transform.left, this._mapDataMap[e].transform.top] + return t instanceof Array ? (t[0] -= i[0], t[1] -= i[1]) : (t.x -= i[0], t.y -= i[1]), this.pos2geo(e, t) + }, geo2pos: function (e, t) { + return this._mapDataMap[e].transform ? this._mapDataMap[e].projection.geo2pos(this._mapDataMap[e].transform, t) : null + }, getPosByGeo: function (e, t) { + if (!this._mapDataMap[e].transform) return null + var i = this.geo2pos(e, t) + return i[0] += this._mapDataMap[e].transform.left, i[1] += this._mapDataMap[e].transform.top, i + }, getMapPosition: function (e) { + return this._mapDataMap[e].transform ? [this._mapDataMap[e].transform.left, this._mapDataMap[e].transform.top] : null + }, onbeforDispose: function () { + this._isAlive = !1, this.zr.un(c.EVENT.MOUSEWHEEL, this._onmousewheel), this.zr.un(c.EVENT.MOUSEDOWN, this._onmousedown), this.messageCenter.unbind(U.EVENT.ROAMCONTROLLER, this._onroamcontroller), this.messageCenter.unbind(U.EVENT.DATA_RANGE_HOVERLINK, this._ondrhoverlink) + } + }, p.inherits(t, i), e('../chart').define('map', t), t + }),i('zrender/shape/Path', ['require', './Base', './util/PathProxy', '../tool/util'], function (e) { + var t = e('./Base'), i = e('./util/PathProxy'), n = i.PathSegment, a = function (e) { + return Math.sqrt(e[0] * e[0] + e[1] * e[1]) + }, o = function (e, t) { + return (e[0] * t[0] + e[1] * t[1]) / (a(e) * a(t)) + }, r = function (e, t) { + return (e[0] * t[1] < e[1] * t[0] ? -1 : 1) * Math.acos(o(e, t)) + }, s = function (e) { + t.call(this, e) + } + return s.prototype = { + type: 'path', buildPathArray: function (e, t, i) { + if (!e) return [] + t = t || 0, i = i || 0 + var a = e, + o = ['m', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z', 'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A'] + a = a.replace(/-/g, ' -'), a = a.replace(/ /g, ' '), a = a.replace(/ /g, ','), a = a.replace(/,,/g, ',') + var r + for (r = 0; r < o.length; r++) a = a.replace(new RegExp(o[r], 'g'), '|' + o[r]) + var s = a.split('|'), l = [], h = 0, m = 0 + for (r = 1; r < s.length; r++) { + var V = s[r], U = V.charAt(0) + V = V.slice(1), V = V.replace(new RegExp('e,-', 'g'), 'e-') + var d = V.split(',') + d.length > 0 && '' === d[0] && d.shift() + for (var p = 0; p < d.length; p++) d[p] = parseFloat(d[p]) + for (; d.length > 0 && !isNaN(d[0]);) { + var c, u, y, g, b, f, k, x, _ = null, L = [], W = h, X = m + switch (U) { + case'l': + h += d.shift(), m += d.shift(), _ = 'L', L.push(h, m) + break + case'L': + h = d.shift(), m = d.shift(), L.push(h, m) + break + case'm': + h += d.shift(), m += d.shift(), _ = 'M', L.push(h, m), U = 'l' + break + case'M': + h = d.shift(), m = d.shift(), _ = 'M', L.push(h, m), U = 'L' + break + case'h': + h += d.shift(), _ = 'L', L.push(h, m) + break + case'H': + h = d.shift(), _ = 'L', L.push(h, m) + break + case'v': + m += d.shift(), _ = 'L', L.push(h, m) + break + case'V': + m = d.shift(), _ = 'L', L.push(h, m) + break + case'C': + L.push(d.shift(), d.shift(), d.shift(), d.shift()), h = d.shift(), m = d.shift(), L.push(h, m) + break + case'c': + L.push(h + d.shift(), m + d.shift(), h + d.shift(), m + d.shift()), h += d.shift(), m += d.shift(), _ = 'C', L.push(h, m) + break + case'S': + c = h, u = m, y = l[l.length - 1], 'C' === y.command && (c = h + (h - y.points[2]), u = m + (m - y.points[3])), L.push(c, u, d.shift(), d.shift()), h = d.shift(), m = d.shift(), _ = 'C', L.push(h, m) + break + case's': + c = h, u = m, y = l[l.length - 1], 'C' === y.command && (c = h + (h - y.points[2]), u = m + (m - y.points[3])), L.push(c, u, h + d.shift(), m + d.shift()), h += d.shift(), m += d.shift(), _ = 'C', L.push(h, m) + break + case'Q': + L.push(d.shift(), d.shift()), h = d.shift(), m = d.shift(), L.push(h, m) + break + case'q': + L.push(h + d.shift(), m + d.shift()), h += d.shift(), m += d.shift(), _ = 'Q', L.push(h, m) + break + case'T': + c = h, u = m, y = l[l.length - 1], 'Q' === y.command && (c = h + (h - y.points[0]), u = m + (m - y.points[1])), h = d.shift(), m = d.shift(), _ = 'Q', L.push(c, u, h, m) + break + case't': + c = h, u = m, y = l[l.length - 1], 'Q' === y.command && (c = h + (h - y.points[0]), u = m + (m - y.points[1])), h += d.shift(), m += d.shift(), _ = 'Q', L.push(c, u, h, m) + break + case'A': + g = d.shift(), b = d.shift(), f = d.shift(), k = d.shift(), x = d.shift(), W = h, X = m, h = d.shift(), m = d.shift(), _ = 'A', L = this._convertPoint(W, X, h, m, k, x, g, b, f) + break + case'a': + g = d.shift(), b = d.shift(), f = d.shift(), k = d.shift(), x = d.shift(), W = h, X = m, h += d.shift(), m += d.shift(), _ = 'A', L = this._convertPoint(W, X, h, m, k, x, g, b, f) + } + for (var v = 0, w = L.length; w > v; v += 2) L[v] += t, L[v + 1] += i + l.push(new n(_ || U, L)) + } + ('z' === U || 'Z' === U) && l.push(new n('z', [])) + } + return l + }, _convertPoint: function (e, t, i, n, a, s, l, h, m) { + var V = m * (Math.PI / 180), U = Math.cos(V) * (e - i) / 2 + Math.sin(V) * (t - n) / 2, + d = -1 * Math.sin(V) * (e - i) / 2 + Math.cos(V) * (t - n) / 2, + p = U * U / (l * l) + d * d / (h * h) + p > 1 && (l *= Math.sqrt(p), h *= Math.sqrt(p)) + var c = Math.sqrt((l * l * h * h - l * l * d * d - h * h * U * U) / (l * l * d * d + h * h * U * U)) + a === s && (c *= -1), isNaN(c) && (c = 0) + var u = c * l * d / h, y = c * -h * U / l, g = (e + i) / 2 + Math.cos(V) * u - Math.sin(V) * y, + b = (t + n) / 2 + Math.sin(V) * u + Math.cos(V) * y, f = r([1, 0], [(U - u) / l, (d - y) / h]), + k = [(U - u) / l, (d - y) / h], x = [(-1 * U - u) / l, (-1 * d - y) / h], _ = r(k, x) + return o(k, x) <= -1 && (_ = Math.PI), o(k, x) >= 1 && (_ = 0), 0 === s && _ > 0 && (_ -= 2 * Math.PI), 1 === s && 0 > _ && (_ += 2 * Math.PI), [g, b, l, h, f, _, V, s] + }, buildPath: function (e, t) { + var i = t.path, n = t.x || 0, a = t.y || 0 + t.pathArray = t.pathArray || this.buildPathArray(i, n, a) + for (var o = t.pathArray, r = t.pointList = [], s = [], l = 0, h = o.length; h > l; l++) { + 'M' == o[l].command.toUpperCase() && (s.length > 0 && r.push(s), s = []) + for (var m = o[l].points, V = 0, U = m.length; U > V; V += 2) s.push([m[V], m[V + 1]]) + } + s.length > 0 && r.push(s) + for (var l = 0, h = o.length; h > l; l++) { + var d = o[l].command, m = o[l].points + switch (d) { + case'L': + e.lineTo(m[0], m[1]) + break + case'M': + e.moveTo(m[0], m[1]) + break + case'C': + e.bezierCurveTo(m[0], m[1], m[2], m[3], m[4], m[5]) + break + case'Q': + e.quadraticCurveTo(m[0], m[1], m[2], m[3]) + break + case'A': + var p = m[0], c = m[1], u = m[2], y = m[3], g = m[4], b = m[5], f = m[6], k = m[7], + x = u > y ? u : y, _ = u > y ? 1 : u / y, L = u > y ? y / u : 1 + e.translate(p, c), e.rotate(f), e.scale(_, L), e.arc(0, 0, x, g, g + b, 1 - k), e.scale(1 / _, 1 / L), e.rotate(-f), e.translate(-p, -c) + break + case'z': + e.closePath() + } + } + }, getRect: function (e) { + if (e.__rect) return e.__rect + var t + t = 'stroke' == e.brushType || 'fill' == e.brushType ? e.lineWidth || 1 : 0 + for (var i = Number.MAX_VALUE, n = Number.MIN_VALUE, a = Number.MAX_VALUE, o = Number.MIN_VALUE, r = e.x || 0, s = e.y || 0, l = e.pathArray || this.buildPathArray(e.path), h = 0; h < l.length; h++) for (var m = l[h].points, V = 0; V < m.length; V++) V % 2 === 0 ? (m[V] + r < i && (i = m[V]), m[V] + r > n && (n = m[V])) : (m[V] + s < a && (a = m[V]), m[V] + s > o && (o = m[V])) + var U + return U = i === Number.MAX_VALUE || n === Number.MIN_VALUE || a === Number.MAX_VALUE || o === Number.MIN_VALUE ? { + x: 0, + y: 0, + width: 0, + height: 0 + } : { + x: Math.round(i - t / 2), + y: Math.round(a - t / 2), + width: n - i + t, + height: o - a + t + }, e.__rect = U, U + } + }, e('../tool/util').inherits(s, t), s + }),i('zrender/shape/Ellipse', ['require', './Base', '../tool/util'], function (e) { + var t = e('./Base'), i = function (e) { + t.call(this, e) + } + return i.prototype = { + type: 'ellipse', buildPath: function (e, t) { + var i = .5522848, n = t.x, a = t.y, o = t.a, r = t.b, s = o * i, l = r * i + e.moveTo(n - o, a), e.bezierCurveTo(n - o, a - l, n - s, a - r, n, a - r), e.bezierCurveTo(n + s, a - r, n + o, a - l, n + o, a), e.bezierCurveTo(n + o, a + l, n + s, a + r, n, a + r), e.bezierCurveTo(n - s, a + r, n - o, a + l, n - o, a), e.closePath() + }, getRect: function (e) { + if (e.__rect) return e.__rect + var t + return t = 'stroke' == e.brushType || 'fill' == e.brushType ? e.lineWidth || 1 : 0, e.__rect = { + x: Math.round(e.x - e.a - t / 2), + y: Math.round(e.y - e.b - t / 2), width: 2 * e.a + t, height: 2 * e.b + t + }, e.__rect + } + }, e('../tool/util').inherits(i, t), i + }),i('echarts/component/roamController', ['require', './base', 'zrender/shape/Rectangle', 'zrender/shape/Sector', 'zrender/shape/Circle', '../config', 'zrender/tool/util', 'zrender/tool/color', 'zrender/tool/event', '../component'], function (e) { + function t (e, t, n, a, o) { + if (this.rcOption = {}, a.roamController && a.roamController.show) { + if (!a.roamController.mapTypeControl) return void console.error('option.roamController.mapTypeControl has not been defined.') + i.call(this, e, t, n, a, o), this.rcOption = a.roamController + var r = this + this._drictionMouseDown = function (e) { + return r.__drictionMouseDown(e) + }, this._drictionMouseUp = function (e) { + return r.__drictionMouseUp(e) + }, this._drictionMouseMove = function (e) { + return r.__drictionMouseMove(e) + }, this._drictionMouseOut = function (e) { + return r.__drictionMouseOut(e) + }, this._scaleHandler = function (e) { + return r.__scaleHandler(e) + }, this.refresh(a) + } + } + + var i = e('./base'), n = e('zrender/shape/Rectangle'), a = e('zrender/shape/Sector'), + o = e('zrender/shape/Circle'), r = e('../config') + r.roamController = { + zlevel: 0, + z: 4, + show: !0, + x: 'left', + y: 'top', + width: 80, + height: 120, + backgroundColor: 'rgba(0,0,0,0)', + borderColor: '#ccc', + borderWidth: 0, + padding: 5, + handleColor: '#6495ed', + fillerColor: '#fff', + step: 15, + mapTypeControl: null + } + var s = e('zrender/tool/util'), l = e('zrender/tool/color'), h = e('zrender/tool/event') + return t.prototype = { + type: r.COMPONENT_TYPE_ROAMCONTROLLER, _buildShape: function () { + if (this.rcOption.show) { + this._itemGroupLocation = this._getItemGroupLocation(), this._buildBackground(), this._buildItem() + for (var e = 0, t = this.shapeList.length; t > e; e++) this.zr.addShape(this.shapeList[e]) + } + }, _buildItem: function () { + this.shapeList.push(this._getDirectionShape('up')), this.shapeList.push(this._getDirectionShape('down')), this.shapeList.push(this._getDirectionShape('left')), this.shapeList.push(this._getDirectionShape('right')), this.shapeList.push(this._getScaleShape('scaleUp')), this.shapeList.push(this._getScaleShape('scaleDown')) + }, _getDirectionShape: function (e) { + var t = this._itemGroupLocation.r, i = this._itemGroupLocation.x + t, n = this._itemGroupLocation.y + t, + o = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { + x: i, + y: n, + r: t, + startAngle: -45, + endAngle: 45, + color: this.rcOption.handleColor, + text: '>', + textX: i + t / 2 + 4, + textY: n - .5, + textAlign: 'center', + textBaseline: 'middle', + textPosition: 'specific', + textColor: this.rcOption.fillerColor, + textFont: Math.floor(t / 2) + 'px arial' + }, + highlightStyle: { color: l.lift(this.rcOption.handleColor, -.2), brushType: 'fill' }, + clickable: !0 + } + switch (e) { + case'up': + o.rotation = [Math.PI / 2, i, n] + break + case'left': + o.rotation = [Math.PI, i, n] + break + case'down': + o.rotation = [-Math.PI / 2, i, n] + } + return o = new a(o), o._roamType = e, o.onmousedown = this._drictionMouseDown, o.onmouseup = this._drictionMouseUp, o.onmousemove = this._drictionMouseMove, o.onmouseout = this._drictionMouseOut, o + }, _getScaleShape: function (e) { + var t = this._itemGroupLocation.width, i = this._itemGroupLocation.height - t + i = 0 > i ? 20 : i + var n = Math.min(t / 2 - 5, i) / 2, a = this._itemGroupLocation.x + ('scaleDown' === e ? t - n : n), + r = this._itemGroupLocation.y + this._itemGroupLocation.height - n, s = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: { + x: a, + y: r, + r: n, + color: this.rcOption.handleColor, + text: 'scaleDown' === e ? '-' : '+', + textX: a, + textY: r - 2, + textAlign: 'center', + textBaseline: 'middle', + textPosition: 'specific', + textColor: this.rcOption.fillerColor, + textFont: Math.floor(n) + 'px verdana' + }, + highlightStyle: { color: l.lift(this.rcOption.handleColor, -.2), brushType: 'fill' }, + clickable: !0 + } + return s = new o(s), s._roamType = e, s.onmousedown = this._scaleHandler, s + }, _buildBackground: function () { + var e = this.reformCssArray(this.rcOption.padding) + this.shapeList.push(new n({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { + x: this._itemGroupLocation.x - e[3], + y: this._itemGroupLocation.y - e[0], + width: this._itemGroupLocation.width + e[3] + e[1], + height: this._itemGroupLocation.height + e[0] + e[2], + brushType: 0 === this.rcOption.borderWidth ? 'fill' : 'both', + color: this.rcOption.backgroundColor, + strokeColor: this.rcOption.borderColor, + lineWidth: this.rcOption.borderWidth + } + })) + }, _getItemGroupLocation: function () { + var e, t = this.reformCssArray(this.rcOption.padding), i = this.rcOption.width, + n = this.rcOption.height, a = this.zr.getWidth(), o = this.zr.getHeight() + switch (this.rcOption.x) { + case'center': + e = Math.floor((a - i) / 2) + break + case'left': + e = t[3] + this.rcOption.borderWidth + break + case'right': + e = a - i - t[1] - t[3] - 2 * this.rcOption.borderWidth + break + default: + e = this.parsePercent(this.rcOption.x, a) + } + var r + switch (this.rcOption.y) { + case'top': + r = t[0] + this.rcOption.borderWidth + break + case'bottom': + r = o - n - t[0] - t[2] - 2 * this.rcOption.borderWidth + break + case'center': + r = Math.floor((o - n) / 2) + break + default: + r = this.parsePercent(this.rcOption.y, o) + } + return { x: e, y: r, r: i / 2, width: i, height: n } + }, __drictionMouseDown: function (e) { + this.mousedown = !0, this._drictionHandlerOn(e) + }, __drictionMouseUp: function (e) { + this.mousedown = !1, this._drictionHandlerOff(e) + }, __drictionMouseMove: function (e) { + this.mousedown && this._drictionHandlerOn(e) + }, __drictionMouseOut: function (e) { + this._drictionHandlerOff(e) + }, _drictionHandlerOn: function (e) { + this._dispatchEvent(e.event, e.target._roamType), clearInterval(this.dircetionTimer) + var t = this + this.dircetionTimer = setInterval(function () { + t._dispatchEvent(e.event, e.target._roamType) + }, 100), h.stop(e.event) + }, _drictionHandlerOff: function () { + clearInterval(this.dircetionTimer) + }, __scaleHandler: function (e) { + this._dispatchEvent(e.event, e.target._roamType), h.stop(e.event) + }, _dispatchEvent: function (e, t) { + this.messageCenter.dispatch(r.EVENT.ROAMCONTROLLER, e, { + roamType: t, + mapTypeControl: this.rcOption.mapTypeControl, + step: this.rcOption.step + }, this.myChart) + }, refresh: function (e) { + e && (this.option = e || this.option, this.option.roamController = this.reformOption(this.option.roamController), this.rcOption = this.option.roamController), this.clear(), this._buildShape() + } + }, s.inherits(t, i), e('../component').define('roamController', t), t + }),i('echarts/layer/heatmap', ['require'], function () { + function e (e) { + if (this.option = e, e) for (var i in t) this.option[i] = void 0 !== e[i] ? e[i] : t[i] else this.option = t + } + + var t = { + blurSize: 30, + gradientColors: ['blue', 'cyan', 'lime', 'yellow', 'red'], + minAlpha: .05, + valueScale: 1, + opacity: 1 + }, i = 20, n = 256 + return e.prototype = { + getCanvas: function (e, t, a) { + var o = this._getBrush(), r = this._getGradient(), s = i + this.option.blurSize, + l = document.createElement('canvas') + l.width = t, l.height = a + for (var h = l.getContext('2d'), m = e.length, V = 0; m > V; ++V) { + var U = e[V], d = U[0], p = U[1], c = U[2], + u = Math.min(1, Math.max(c * this.option.valueScale || this.option.minAlpha, this.option.minAlpha)) + h.globalAlpha = u, h.drawImage(o, d - s, p - s) + } + for (var y = h.getImageData(0, 0, l.width, l.height), g = y.data, m = g.length / 4; m--;) { + var b = 4 * m + 3, u = g[b] / 256, f = Math.floor(u * (n - 1)) + g[b - 3] = r[4 * f], g[b - 2] = r[4 * f + 1], g[b - 1] = r[4 * f + 2], g[b] *= this.option.opacity + } + return h.putImageData(y, 0, 0), l + }, _getBrush: function () { + if (!this._brushCanvas) { + this._brushCanvas = document.createElement('canvas') + var e = i + this.option.blurSize, t = 2 * e + this._brushCanvas.width = t, this._brushCanvas.height = t + var n = this._brushCanvas.getContext('2d') + n.shadowOffsetX = t, n.shadowBlur = this.option.blurSize, n.shadowColor = 'black', n.beginPath(), n.arc(-e, e, i, 0, 2 * Math.PI, !0), n.closePath(), n.fill() + } + return this._brushCanvas + }, _getGradient: function () { + if (!this._gradientPixels) { + var e = n, t = document.createElement('canvas') + t.width = 1, t.height = e + for (var i = t.getContext('2d'), a = i.createLinearGradient(0, 0, 0, e), o = this.option.gradientColors.length, r = 0; o > r; ++r) 'string' == typeof this.option.gradientColors[r] ? a.addColorStop((r + 1) / o, this.option.gradientColors[r]) : a.addColorStop(this.option.gradientColors[r].offset, this.option.gradientColors[r].color) + i.fillStyle = a, i.fillRect(0, 0, 1, e), this._gradientPixels = i.getImageData(0, 0, 1, e).data + } + return this._gradientPixels + } + }, e + }),i('echarts/util/mapData/params', ['require'], function (e) { + function t (e) { + if (!e.UTF8Encoding) return e + for (var t = e.features, n = 0; n < t.length; n++) for (var a = t[n], o = a.geometry.coordinates, r = a.geometry.encodeOffsets, s = 0; s < o.length; s++) { + var l = o[s] + if ('Polygon' === a.geometry.type) o[s] = i(l, r[s]) else if ('MultiPolygon' === a.geometry.type) for (var h = 0; h < l.length; h++) { + var m = l[h] + l[h] = i(m, r[s][h]) + } + } + return e.UTF8Encoding = !1, e + } + + function i (e, t) { + for (var i = [], n = t[0], a = t[1], o = 0; o < e.length; o += 2) { + var r = e.charCodeAt(o) - 64, s = e.charCodeAt(o + 1) - 64 + r = r >> 1 ^ -(1 & r), s = s >> 1 ^ -(1 & s), r += n, s += a, n = r, a = s, i.push([r / 1024, s / 1024]) + } + return i + } + + var n = { + none: { + getGeoJson: function (e) { + e({ + type: 'FeatureCollection', + features: [{ + type: 'Feature', + geometry: { coordinates: [], encodeOffsets: [], type: 'Polygon' }, + properties: {} + }] + }) + } + }, world: { + getGeoJson: function (i) { + e(['./geoJson/world_geo'], function (e) { + i(t(e)) + }) + } + }, china: { + getGeoJson: function (i) { + e(['./geoJson/china_geo'], function (e) { + i(t(e)) + }) + } + }, '南海诸岛': { + textCoord: [126, 25], getPath: function (e, t) { + for (var i = [[[0, 3.5], [7, 11.2], [15, 11.9], [30, 7], [42, .7], [52, .7], [56, 7.7], [59, .7], [64, .7], [64, 0], [5, 0], [0, 3.5]], [[13, 16.1], [19, 14.7], [16, 21.7], [11, 23.1], [13, 16.1]], [[12, 32.2], [14, 38.5], [15, 38.5], [13, 32.2], [12, 32.2]], [[16, 47.6], [12, 53.2], [13, 53.2], [18, 47.6], [16, 47.6]], [[6, 64.4], [8, 70], [9, 70], [8, 64.4], [6, 64.4]], [[23, 82.6], [29, 79.8], [30, 79.8], [25, 82.6], [23, 82.6]], [[37, 70.7], [43, 62.3], [44, 62.3], [39, 70.7], [37, 70.7]], [[48, 51.1], [51, 45.5], [53, 45.5], [50, 51.1], [48, 51.1]], [[51, 35], [51, 28.7], [53, 28.7], [53, 35], [51, 35]], [[52, 22.4], [55, 17.5], [56, 17.5], [53, 22.4], [52, 22.4]], [[58, 12.6], [62, 7], [63, 7], [60, 12.6], [58, 12.6]], [[0, 3.5], [0, 93.1], [64, 93.1], [64, 0], [63, 0], [63, 92.4], [1, 92.4], [1, 3.5], [0, 3.5]]], n = '', a = e[0], o = e[1], r = 0, s = i.length; s > r; r++) { + n += 'M ' + ((i[r][0][0] * t + a).toFixed(2) - 0) + ' ' + ((i[r][0][1] * t + o).toFixed(2) - 0) + ' ' + for (var l = 1, h = i[r].length; h > l; l++) n += 'L ' + ((i[r][l][0] * t + a).toFixed(2) - 0) + ' ' + ((i[r][l][1] * t + o).toFixed(2) - 0) + ' ' + } + return n + ' Z' + } + }, '新疆': { + getGeoJson: function (i) { + e(['./geoJson/xin_jiang_geo'], function (e) { + i(t(e)) + }) + } + }, '西藏': { + getGeoJson: function (i) { + e(['./geoJson/xi_zang_geo'], function (e) { + i(t(e)) + }) + } + }, '内蒙古': { + getGeoJson: function (i) { + e(['./geoJson/nei_meng_gu_geo'], function (e) { + i(t(e)) + }) + } + }, '青海': { + getGeoJson: function (i) { + e(['./geoJson/qing_hai_geo'], function (e) { + i(t(e)) + }) + } + }, '四川': { + getGeoJson: function (i) { + e(['./geoJson/si_chuan_geo'], function (e) { + i(t(e)) + }) + } + }, '黑龙江': { + getGeoJson: function (i) { + e(['./geoJson/hei_long_jiang_geo'], function (e) { + i(t(e)) + }) + } + }, '甘肃': { + getGeoJson: function (i) { + e(['./geoJson/gan_su_geo'], function (e) { + i(t(e)) + }) + } + }, '云南': { + getGeoJson: function (i) { + e(['./geoJson/yun_nan_geo'], function (e) { + i(t(e)) + }) + } + }, '广西': { + getGeoJson: function (i) { + e(['./geoJson/guang_xi_geo'], function (e) { + i(t(e)) + }) + } + }, '湖南': { + getGeoJson: function (i) { + e(['./geoJson/hu_nan_geo'], function (e) { + i(t(e)) + }) + } + }, '陕西': { + getGeoJson: function (i) { + e(['./geoJson/shan_xi_1_geo'], function (e) { + i(t(e)) + }) + } + }, '广东': { + getGeoJson: function (i) { + e(['./geoJson/guang_dong_geo'], function (e) { + i(t(e)) + }) + } + }, '吉林': { + getGeoJson: function (i) { + e(['./geoJson/ji_lin_geo'], function (e) { + i(t(e)) + }) + } + }, '河北': { + getGeoJson: function (i) { + e(['./geoJson/he_bei_geo'], function (e) { + i(t(e)) + }) + } + }, '湖北': { + getGeoJson: function (i) { + e(['./geoJson/hu_bei_geo'], function (e) { + i(t(e)) + }) + } + }, '贵州': { + getGeoJson: function (i) { + e(['./geoJson/gui_zhou_geo'], function (e) { + i(t(e)) + }) + } + }, '山东': { + getGeoJson: function (i) { + e(['./geoJson/shan_dong_geo'], function (e) { + i(t(e)) + }) + } + }, '江西': { + getGeoJson: function (i) { + e(['./geoJson/jiang_xi_geo'], function (e) { + i(t(e)) + }) + } + }, '河南': { + getGeoJson: function (i) { + e(['./geoJson/he_nan_geo'], function (e) { + i(t(e)) + }) + } + }, '辽宁': { + getGeoJson: function (i) { + e(['./geoJson/liao_ning_geo'], function (e) { + i(t(e)) + }) + } + }, '山西': { + getGeoJson: function (i) { + e(['./geoJson/shan_xi_2_geo'], function (e) { + i(t(e)) + }) + } + }, '安徽': { + getGeoJson: function (i) { + e(['./geoJson/an_hui_geo'], function (e) { + i(t(e)) + }) + } + }, '福建': { + getGeoJson: function (i) { + e(['./geoJson/fu_jian_geo'], function (e) { + i(t(e)) + }) + } + }, '浙江': { + getGeoJson: function (i) { + e(['./geoJson/zhe_jiang_geo'], function (e) { + i(t(e)) + }) + } + }, '江苏': { + getGeoJson: function (i) { + e(['./geoJson/jiang_su_geo'], function (e) { + i(t(e)) + }) + } + }, '重庆': { + getGeoJson: function (i) { + e(['./geoJson/chong_qing_geo'], function (e) { + i(t(e)) + }) + } + }, '宁夏': { + getGeoJson: function (i) { + e(['./geoJson/ning_xia_geo'], function (e) { + i(t(e)) + }) + } + }, '海南': { + getGeoJson: function (i) { + e(['./geoJson/hai_nan_geo'], function (e) { + i(t(e)) + }) + } + }, '台湾': { + getGeoJson: function (i) { + e(['./geoJson/tai_wan_geo'], function (e) { + i(t(e)) + }) + } + }, '北京': { + getGeoJson: function (i) { + e(['./geoJson/bei_jing_geo'], function (e) { + i(t(e)) + }) + } + }, '天津': { + getGeoJson: function (i) { + e(['./geoJson/tian_jin_geo'], function (e) { + i(t(e)) + }) + } + }, '上海': { + getGeoJson: function (i) { + e(['./geoJson/shang_hai_geo'], function (e) { + i(t(e)) + }) + } + }, '香港': { + getGeoJson: function (i) { + e(['./geoJson/xiang_gang_geo'], function (e) { + i(t(e)) + }) + } + }, '澳门': { + getGeoJson: function (i) { + e(['./geoJson/ao_men_geo'], function (e) { + i(t(e)) + }) + } + } + } + return { decode: t, params: n } + }),i('echarts/util/mapData/textFixed', [], function () { + return { + '广东': [0, -10], + '香港': [10, 10], + '澳门': [-10, 18], + '黑龙江': [0, 20], + '天津': [5, 5], + '深圳市': [-35, 0], + '红河哈尼族彝族自治州': [0, 20], + '楚雄彝族自治州': [-5, 15], + '石河子市': [-5, 5], + '五家渠市': [0, -10], + '昌吉回族自治州': [10, 10], + '昌江黎族自治县': [0, 20], + '陵水黎族自治县': [0, 20], + '东方市': [0, 20], + '渭南市': [0, 20] + } + }),i('echarts/util/mapData/geoCoord', [], function () { + return { Russia: [100, 60], 'United States of America': [-99, 38] } + }),i('echarts/util/projection/svg', ['require', 'zrender/shape/Path'], function (e) { + function t (e) { + return parseFloat(e || 0) + } + + function i (e) { + for (var i = e.firstChild; "svg" != i.nodeName.toLowerCase() || 1 != i.nodeType;) i = i.nextSibling + var n = t(i.getAttribute('x')), a = t(i.getAttribute('y')), o = t(i.getAttribute('width')), + r = t(i.getAttribute('height')) + return { left: n, top: a, width: o, height: r } + } + + function n (e, t) { + function i (e) { + var t = e.tagName + if (m[t]) { + var o = m[t](e, n) + o && (o.scale = n, o.properties = { name: e.getAttribute('name') || '' }, o.id = e.id, s(o, e), a.push(o)) + } + for (var r = e.childNodes, l = 0, h = r.length; h > l; l++) i(r[l]) + } + + var n = [t.scale.x, t.scale.y], a = [] + return i(e), a + } + + function a (e, t) { + var i = t instanceof Array ? [1 * t[0], 1 * t[1]] : [1 * t.x, 1 * t.y] + return [i[0] / e.scale.x, i[1] / e.scale.y] + } + + function o (e, t) { + var i = t instanceof Array ? [1 * t[0], 1 * t[1]] : [1 * t.x, 1 * t.y] + return [i[0] * e.scale.x, i[1] * e.scale.y] + } + + function r (e) { + return e.replace(/^\s\s*/, '').replace(/\s\s*$/, '') + } + + function s (e, t) { + var i = t.getAttribute('fill'), n = t.getAttribute('stroke'), a = t.getAttribute('stroke-width'), + o = t.getAttribute('opacity') + i && 'none' != i ? (e.color = i, n ? (e.brushType = 'both', e.strokeColor = n) : e.brushType = 'fill') : n && 'none' != n && (e.strokeColor = n, e.brushType = 'stroke'), a && 'none' != a && (e.lineWidth = parseFloat(a)), o && 'none' != o && (e.opacity = parseFloat(o)) + } + + function l (e) { + for (var t = r(e).replace(/,/g, ' ').split(/\s+/), i = [], n = 0; n < t.length;) { + var a = parseFloat(t[n++]), o = parseFloat(t[n++]) + i.push([a, o]) + } + return i + } + + var h = e('zrender/shape/Path'), m = { + path: function (e, t) { + var i = e.getAttribute('d'), n = h.prototype.getRect({ path: i }) + return { shapeType: 'path', path: i, cp: [(n.x + n.width / 2) * t[0], (n.y + n.height / 2) * t[1]] } + }, rect: function (e, i) { + var n = t(e.getAttribute('x')), a = t(e.getAttribute('y')), o = t(e.getAttribute('width')), + r = t(e.getAttribute('height')) + return { + shapeType: 'rectangle', + x: n, + y: a, + width: o, + height: r, + cp: [(n + o / 2) * i[0], (a + r / 2) * i[1]] + } + }, line: function (e, i) { + var n = t(e.getAttribute('x1')), a = t(e.getAttribute('y1')), o = t(e.getAttribute('x2')), + r = t(e.getAttribute('y2')) + return { + shapeType: 'line', + xStart: n, + yStart: a, + xEnd: o, + yEnd: r, + cp: [.5 * (n + o) * i[0], .5 * (a + r) * i[1]] + } + }, circle: function (e, i) { + var n = t(e.getAttribute('cx')), a = t(e.getAttribute('cy')), o = t(e.getAttribute('r')) + return { shapeType: 'circle', x: n, y: a, r: o, cp: [n * i[0], a * i[1]] } + }, ellipse: function (e, t) { + var i = parseFloat(e.getAttribute('cx') || 0), n = parseFloat(e.getAttribute('cy') || 0), + a = parseFloat(e.getAttribute('rx') || 0), o = parseFloat(e.getAttribute('ry') || 0) + return { shapeType: 'ellipse', x: i, y: n, a: a, b: o, cp: [i * t[0], n * t[1]] } + }, polygon: function (e, t) { + var i = e.getAttribute('points'), n = [1 / 0, 1 / 0], a = [-(1 / 0), -(1 / 0)] + if (i) { + i = l(i) + for (var o = 0; o < i.length; o++) { + var r = i[o] + n[0] = Math.min(r[0], n[0]), n[1] = Math.min(r[1], n[1]), a[0] = Math.max(r[0], a[0]), a[1] = Math.max(r[1], a[1]) + } + return { + shapeType: 'polygon', + pointList: i, + cp: [(n[0] + a[0]) / 2 * t[0], (n[1] + a[1]) / 2 * t[0]] + } + } + }, polyline: function (e, t) { + var i = m.polygon(e, t) + return i + } + } + return { getBbox: i, geoJson2Path: n, pos2geo: a, geo2pos: o } + }),i('echarts/util/projection/normal', [], function () { + function e (e, i) { + return i = i || {}, e.srcSize || t(e, i), e.srcSize + } + + function t (e, t) { + t = t || {}, r.xmin = 360, r.xmax = -360, r.ymin = 180, r.ymax = -180 + for (var i, n, a = e.features, o = 0, s = a.length; s > o; o++) if (n = a[o], !n.properties.name || !t[n.properties.name]) switch (n.type) { + case'Feature': + r[n.geometry.type](n.geometry.coordinates) + break + case'GeometryCollection': + i = n.geometries + for (var l = 0, h = i.length; h > l; l++) r[i[l].type](i[l].coordinates) + } + return e.srcSize = { + left: 1 * r.xmin.toFixed(4), + top: 1 * r.ymin.toFixed(4), + width: 1 * (r.xmax - r.xmin).toFixed(4), + height: 1 * (r.ymax - r.ymin).toFixed(4) + }, e + } + + function i (e, i, n) { + function a (e, t) { + c = e.type, u = e.coordinates, o._bbox = { + xmin: 360, + xmax: -360, + ymin: 180, + ymax: -180 + }, y = o[c](u), m.push({ + path: y, + cp: o.makePoint(t.properties.cp ? t.properties.cp : [(o._bbox.xmin + o._bbox.xmax) / 2, (o._bbox.ymin + o._bbox.ymax) / 2]), + properties: t.properties, + id: t.id + }) + } + + n = n || {}, o.scale = null, o.offset = null, e.srcSize || t(e, n), i.offset = { + x: e.srcSize.left, + y: e.srcSize.top, + left: i.OffsetLeft || 0, + top: i.OffsetTop || 0 + }, o.scale = i.scale, o.offset = i.offset + for (var r, s, l, h = e.features, m = [], V = 0, U = h.length; U > V; V++) if (l = h[V], !l.properties.name || !n[l.properties.name]) if ('Feature' == l.type) a(l.geometry, l) else if ('GeometryCollection' == l.type) { + r = l.geometries + for (var d = 0, p = r.length; p > d; d++) s = r[d], a(s, s) + } + var c, u, y + return m + } + + function n (e, t) { + var i, n + return t instanceof Array ? (i = 1 * t[0], n = 1 * t[1]) : (i = 1 * t.x, n = 1 * t.y), i = i / e.scale.x + e.offset.x - 168.5, i = i > 180 ? i - 360 : i, n = 90 - (n / e.scale.y + e.offset.y), [i, n] + } + + function a (e, t) { + return o.offset = e.offset, o.scale = e.scale, o.makePoint(t instanceof Array ? [1 * t[0], 1 * t[1]] : [1 * t.x, 1 * t.y]) + } + + var o = { + formatPoint: function (e) { + return [(e[0] < -168.5 && e[1] > 63.8 ? e[0] + 360 : e[0]) + 168.5, 90 - e[1]] + }, makePoint: function (e) { + var t = this, i = t.formatPoint(e) + t._bbox.xmin > e[0] && (t._bbox.xmin = e[0]), t._bbox.xmax < e[0] && (t._bbox.xmax = e[0]), t._bbox.ymin > e[1] && (t._bbox.ymin = e[1]), t._bbox.ymax < e[1] && (t._bbox.ymax = e[1]) + var n = (i[0] - o.offset.x) * o.scale.x + o.offset.left, + a = (i[1] - o.offset.y) * o.scale.y + o.offset.top + return [n, a] + }, Point: function (e) { + return e = this.makePoint(e), e.join(',') + }, LineString: function (e) { + for (var t, i = '', n = 0, a = e.length; a > n; n++) t = o.makePoint(e[n]), i = 0 === n ? 'M' + t.join(',') : i + 'L' + t.join(',') + return i + }, Polygon: function (e) { + for (var t = '', i = 0, n = e.length; n > i; i++) t = t + o.LineString(e[i]) + 'z' + return t + }, MultiPoint: function (e) { + for (var t = [], i = 0, n = e.length; n > i; i++) t.push(o.Point(e[i])) + return t + }, MultiLineString: function (e) { + for (var t = '', i = 0, n = e.length; n > i; i++) t += o.LineString(e[i]) + return t + }, MultiPolygon: function (e) { + for (var t = '', i = 0, n = e.length; n > i; i++) t += o.Polygon(e[i]) + return t + } + }, r = { + formatPoint: o.formatPoint, makePoint: function (e) { + var t = this, i = t.formatPoint(e), n = i[0], a = i[1] + t.xmin > n && (t.xmin = n), t.xmax < n && (t.xmax = n), t.ymin > a && (t.ymin = a), t.ymax < a && (t.ymax = a) + }, Point: function (e) { + this.makePoint(e) + }, LineString: function (e) { + for (var t = 0, i = e.length; i > t; t++) this.makePoint(e[t]) + }, Polygon: function (e) { + for (var t = 0, i = e.length; i > t; t++) this.LineString(e[t]) + }, MultiPoint: function (e) { + for (var t = 0, i = e.length; i > t; t++) this.Point(e[t]) + }, MultiLineString: function (e) { + for (var t = 0, i = e.length; i > t; t++) this.LineString(e[t]) + }, MultiPolygon: function (e) { + for (var t = 0, i = e.length; i > t; t++) this.Polygon(e[t]) + } + } + return { getBbox: e, geoJson2Path: i, pos2geo: n, geo2pos: a } + }),i('echarts/util/mapData/geoJson/an_hui_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '3415', + properties: { name: '六安市', cp: [116.3123, 31.8329], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„„nJ‚UXUVƒ°U„ÑnU@mlLVaVln@@bn@VU@xlb@lšLnKlšƒVI„JšUVxnI@lVL@b„ްVX@˜b„x„nVVUnVVnU‚›@kX@VwV@„al¥UUnUWa@ƒ@wĸU„LU¥lKUa@aUI@alLVaUƒ¯anƒWkUKm@XV@VaXlW@aU_UWVUƒI¯@ma¯W¯™™I@UU@WWU@U@@UU@VkV@@WUUm@UaU@„lK@IUK„L@KWmXUWaXI@ƒ@a@a@U@U@KV¥lw„k°b²JVIVKlV@UX„la„Ul`œUVLVVVUšJ„U@Lnm@_VK@KUIW@™J@Xk@WW@U—ƒmm™XmWk@kK@aUUƒVmmkUwUmWL™@WmU@™UJmUULkKWakLWVkIƒlƒwULƒW@X°lUJ@°ULƒWV—wmJ@bmb¯Vkm@@WkWm¯wƒL@lkXƒWmXym¯UImJUbkV™@Vn¯„@V@lUbƒ@mk@maUxmlUbULWn@J—LmKUkWKkwUKƒbm„X„WxkVUKmLkVV@JUUWL@xkJUUƒV@X@VVlUbVX@xk¤šx‚¼œxWxn„‚nn@Þ¼„JVb°aVn„@šmlnXU„JlbVlkz@‚lUŽlXJmxVxXnWxXÈWlUŽ@šUxU@VX@xUL@šUÆmLnV@lWXk@@JlbXblnlJ'], + encodeOffsets: [[118710, 33351]] + } + }, { + type: 'Feature', + id: '3408', + properties: { name: '安庆市', cp: [116.7517, 30.5255], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@n°‚znW„XlW@k„K°xXn‚l@Xn@l‚°Una@anI˜xXU„ŽVK@¯VIkW¯X@‚„VK„x„klJXUlKXblLVKnVVIšŽV@Xn‚@šŽXKVnVxlŽnn„UlmV@²óUkV™lW„b„lƒšƒn@VVVIn@lw@WVIXblV„@Èx‚aUaVIVVnKVLšK„ƒln@b²K@»U£ƒÑķƒġÝÅb™K™a@Im@ۍ„@kWÓkkmKÅnóJƒUÅ£›W@w„ĕ@wĉţ¯¯ƒUkK±l¯Uƒ¥UÑkÝUķ»Ý¥¯™JƒIUŽVbUl¯ÈV¼VJU¼Vb@bkLUl@„VJ@bUXǚ@lkVmXmKkLVxš‚Ž„VƒL@VkVVVlzW˜kbmLUUUbVbUV™šlÒnJlUnLllUL@bU„Vx„l‚LXVƦÈVU¦WJ'], + encodeOffsets: [[118834, 31759]] + } + }, { + type: 'Feature', + id: '3411', + properties: { name: '滁州市', cp: [118.1909, 32.536], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@š„@`nnl@„xšK@X°KXV˜IXVlbXVWnX‚lL@šÈ»‚LVan@VJ„êVVn@‚X@laÞbVaƒyn@„_‚xnWVXnWl@VnUVkI@l‚nXKVLVV@V@kW@LlVô„@J@bVnnKnkVa@»lç@ƒnwšKma™UUUVњ@n™mWXalI@alVn@VwUaVU„@„nlaôJnU„VVXlJšaXXVK@UšV@VWx@nXVWšXVšUlLUbV‚ULVVnUVbUbVbš@@a„KÆnnKVK@U@UU@@a„@Vƒ°¯ÈJVIlķ@aa˜UaVKU_@mkxUI@aƒUlyU@@™wkKWmUbUnUVWbkJW_J@bƒn@Vm@@KULk@V@@bVbÅm@LW@UVVbkK@UkKWL@VULUKWIUJUbkK@_WVXU›Jka@XƒVa@kšy@aVIUUW@@m„UlLœKWÑUKVan@UkVmmIXKƒaVaUwVU@UmykU¯@±UUL@WUIVUU@KkIWaƒaU@kUUaǃUó»mKƒk¯@y@kWK@bkI¯`mn™l¯XWlkVUzUJlbUbVJl@nnm„@VULV`XnWƗbmUUn™JmUknƒJ¯km@ƒyk@kU›xL@VUbmnn¤lX@`™z@JmaULUVl@Xn@xllkXWa—aW@UVmUbƒ@mVXšWxXbWbUŽƒÒnVVnVVUL'], + encodeOffsets: [[120004, 33520]] + } + }, { + type: 'Feature', + id: '3418', + properties: { name: '宣城市', cp: [118.8062, 30.6244], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Vb@„XL˜JXxlIXxlVlV@I²¤šnlUnVšU@VULWVUJ@Lnb@lV@UnV@@VVVlLnbnJ‚UVkUUVWn@@anUVnVJVIV‚@@nUJVbUb‚„@VUbVK@bn@VbnIlxkllXVlXKWUXUlL°¤UVVb@bš„UlkXW‚ƒxXz@‚„Ila„UlƒnUlJVInVÆJ„U„LVUnV„K°@VnlVnxV@XLlK@wVL@KnUlJXU˜bnKVLX„lUw@VWlLXKm@@a„@VLnmlIVVnKn@škVašVlwk@@a@k@ƒVIUa™@maUa@wna@kmWƒ™UUmVUIVǗ@aƒKm™aƒ™kU™J@InmUUaVa„k‚lX@Vk@m@VU@wnK@alKVUkUkKƒbmUkmƒ@U£WVk@@UÝbbƒaÇx@b@WVUa¯ƒ@wVwUUV@VwnK@KWaŁ@KšIUyUI@WmXó™UbWaKm™@km@IUyƒIUaWKƒx@zUKUL@llVUnkLVVkJWX@VUKUVƒIkVWakb@VWb@n@JkXUlmL@xkL@`VxšLUÈUJ@Vm@@bmIUlUL@VUVVbknm@mKUw™KVÈ@J@LV±kkJUIƒl'], + encodeOffsets: [[120803, 31247]] + } + }, { + type: 'Feature', + id: '3412', + properties: { name: '阜阳市', cp: [115.7629, 32.9919], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@V™nƒš@ša„k°aš±@‚¥@UUI@aUmlwUUx›b@¥XU@mmI@a@Kn@@_W@@W„I@mšUVVXUl@XaV@‚K@I@a„LX@aVI°K@KVL„UUw‚yXkšK@kšKÆbXnlK@k@a„JlU@w@U@»@aXKWƒn_‚JXkVKnƒ@°LlKXƒW@¯Uƒ@aUK@kmJUw™VƒIUJ™„kŽmL™K@kka@wUVm@@am@UkUbkK@nmVƒÒ¯VU„WVVmIƒƒULk@ƒƒma@kkKƒƒ@nUbUamU™`UUVUkKVkkƒW@@bkmƒnƒmUXVKXVƒL@VƒbU„m‚™bVXJ@nmKÅI@KWKUXVJUL@VUKUX@KUKWL@LUJmaXXm@kVVV@L@VUL@VlK@L@V@LUK@VUb@UUU@°@nVxU`‚Lkn@`@XVJ@X™Vm„k@UKmV¯LVVn±Wm@Ub@JlLUl„@VLk„@lmVVn@bnV@V°IV™šaVJXI°K°V@XXVlVVU„nšKVlUš„bWXnV@bV`U„„@@m@@‚ƒ@nxmn@bXVlL@¤nb„Ul¦šVVUnJVU„Vl@@bÞL'], + encodeOffsets: [[118418, 34392]] + } + }, { + type: 'Feature', + id: '3413', + properties: { name: '宿州市', cp: [117.5208, 33.6841], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@UWU@bkW@aWU@aUIkWV™lLXb„lVIUVV@‚mn@V_n@VaUK@I‚@UašanJVU„@lV„UVnnKVVlaUa„I@wnK‚Lnll@nVlk@wVKXkl@@b„bUJ@V‚U@U„UUyVk@aVUXwlWXX‚WU¹@aU™@WUI@mlUšn„J@Il@šaXbV@VKl@XxVL@W„IšJlb„@„al@„IUUm@@aVK@¥¯—@mUķ¯bWƒk£Vm@akm@VaÅ@UVWaƒ@UJWkƒJ—UƒbWbU@UlƒXk@ƒamV@K¯nk@ƒlU@Uxmz@bU`ÇbUbÅVm£U@Ww™x@akLUK@UlakwUJWVkLmaUal@n_ƒmVUnKVUUmÅXWa™@kJmx@XUJ@bVLXxl@VVUVV„UbkLWbU@@lUVV„VVX„›K@XkJ@nU@@bV@VxUVlb„U@xXLWŽn@UxVbVĊ„V@b@XV`mnkJ@kUKmbƒaU@VbnbÆx@XU@@`k@@bl„™@@bkL@WƒakXWaU@Vmkx@XWW@@wUUUbƒJ™U¯V™@¯ÞU@WxXŽlL@bkb@ŽlVlnb™JW@kkU@mbkaWJ—IVlmz¯`UnU@mb™@@„ƒ`@bkVlœnV@b@šV@„aVxn@Vx‚KXnl@nbVK„bVK@a„_V@Vƒ„w@W„LlwnK@UmIU@VWš@šUÈ@lKnal„wš@@V°@šaUmlUUw@„ƒV@@UXK'], + encodeOffsets: [[119836, 35061]] + } + }, { + type: 'Feature', + id: '3410', + properties: { name: '黄山市', cp: [118.0481, 29.9542], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lXnlWX@VUJVnUJVzXJVx„kVJlI²l‚U@K@IUǚLVxnLn@lmUaVU@UVKVknJ@an@@UVIVǙKUw@_lK@wnKVklW@I@mXa@UlaXblU„JVUVL@UXWlIUUlKVmkU@kVKVL@y„wXLVb„JVz@Jlnš@nŽ‚LXbVaôšnW@la@UVWUa@@a@mk@WIk@VwUa¯¥m@UUVK@ImK@aX£ƒkK›ÅV™a™™ƒ_@±ƒakXWW—LƒƒƒnU@@a@¯mK@L™JUWwUV™VmbXX@lWLn`mzUJUb™Lƒ„k@makVWmkX™ambkKknƒaƒ@ƒaƒb@‚U@Unm@—ƒWVƒ@VbUbUJWIk@@lmL@°UVUVm„nš™@@kmWkb@xƒ_m@@aU@b@JlŽUz™lWxXn„@‚b²@l`„IVl„UlL@VšK„nVbUl@VlIn@@b„bVWUk‚@@bX@Valb@bnb°Vn@„xVKlbVnV@V‚x„L@ln@UXVV‚L˜'], + encodeOffsets: [[120747, 31095]] + } + }, { + type: 'Feature', + id: '3414', + properties: { name: '巢湖市', cp: [117.7734, 31.4978], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VV@blL@ŽXlWnnšnŽ˜„@VXXl@@WšIX@VJ@LšxŎxlnšŽ@bXJVblX@VVbUVn@VbUVlb@LnJVbVLV‚XLšÒVL„ÒšV„bVIVylUXk°Wšknm°_lJ@aXL@l‚z°@„lnLô¼V‚È„VUUaVKU@WW@@UUa@knmVLlaV@„a@kšak±@UmwkKmk™lj™ÝUUkL@mlIVmnÝWkkUÝ@KƑĉ™a@»ƒmma@mX™¤¯Uƒw@ƒ@UU@bU±±L@akmƒ„™LUKmLUUUJVbbÇwƒ@kUWaUJ@Xkxm@UJUUm@™„k„ƒ‚ƒakXUšVl±ôU@kn'], + encodeOffsets: [[119847, 32007]] + } + }, { + type: 'Feature', + id: '3416', + properties: { name: '亳州市', cp: [116.1914, 33.4698], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lU@Un@@anUlw@KVmUwlaX_lKna@KU@@kWKUU@ankW™XK˜@@V²VVIÈU@al@VaÈamK@wU™@klaUƒV@XƒVUU»WUUbkmUkVmk@aÈw@mWU@VkIkVWKUÑķXȭºU¯lƒ@kkLWmÅa™L@l™LWlzVxƒVUK@L¯LUJ@bWƒK@b@JLU@Wbk@WVUU™V@nƒJ@XX@@`m@@L@bnJ@nWV@¦œa‚wVVkxVn@bVJ@V¦@Ž™²¯bƒl™b™@m„UšUŽƒŽ@¼ƒ¦Xb‚UV`@nnxUxWLkUkVWKkV@XV@@VVL@VX„@lVV@L@blL@`šL@xXKVL‚@„VnUš@lwnU@ml@XnV@@UVW°LnalƒUI@aUK@a‚a@U„kXW@I@mWL@UXK@UVW@U‚@@k„Wn‚@@V„@XblaVxšL@bVKXb„IlJ'], + encodeOffsets: [[119183, 34594]] + } + }, { + type: 'Feature', + id: '3417', + properties: { name: '池州市', cp: [117.3889, 30.2014], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„V°°ĊŤ@xƒĖ@xœXƤ„VôIÆmnLllXÔ@lƒÜŽn@@JšbšLÆaĢÞĸ„°VVUUKVanK@UV@VL„VVn„ln@‚xnklxXamk@WV@Xa˜@naVk„Klk™@mkUWwkJWw—IWK@ƒUaUwWIUyVIUmVI@UXWmkkW‚—KUUVWm@@kƒKw@U‚UUmkaULƒwm@¯Uma@akaUbW@@a@VlUXƒa@am@kJ@UVkUaƒm™L@UkKƒVUkƒJk_±@aƒ@WmXwÇkkaVaUa±ƒœwV@VkƒwnyUaW@UU¯amLk@m™@kmmU™™¯K@L@lUX¯ƒWlkXƒŽVb„bƒVUL@J@LVKnlJXnlb@`nXlalV@bnL@Vnb˜¼@lXbWlkL™K@zUJmIUxUVUVmX', '@@llUL@VlxšL@a@UƒwXa¯@'], + encodeOffsets: [[119543, 30781], [120061, 31152]] + } + }, { + type: 'Feature', + id: '3401', + properties: { name: '合肥市', cp: [117.29, 32.0581], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„L„xV‚ĊLÞkšVlVVXaWaXwW™nU„@‚anVVUX@˜bXblWkk@wWmk@VUVKnb@Išy@_kWm£nmVa@U‚KœwlVl@„zn@°l„IlmnVšIVmnV˜aXÅWmU_VK@Unƒmmk@UIVakaƒa™UƒÑUK™ÑWKUUKUamI@KkaVUUam@VUUa@UkWUaWI@a™kmōw™wUL@`mn@KƒV™IUVUUUK›Vk_ƒVkbWƒ@VkUULUJ±I¯aƒlkxU¦@L@V@V@b@b@„WJXbWVXn@LƒKVL@JkLƒŽV@Vbn@VV@XU@UlV@@VV@V@XXV@@VšJ°š°Xnb°@„JUVVXV`@bkXWŽUbU@WŽn@VLXlm„°bV„UbkK@bVJ@bVbkLV¦ƒKķV@x@„XbmVVVk¦'], + encodeOffsets: [[119678, 33323]] + } + }, { + type: 'Feature', + id: '3403', + properties: { name: '蚌埠市', cp: [117.4109, 33.1073], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VÒXLlUlJ@UXV@nÇx@bnlUVllnVaXVV¼UVW„U@V„²wVV@Vl@„VnwlIš@XbÆWVnUVmLUV„nm`k@VbnblKXUVIlxkb@VVLlK@bšwXxV@n¤ÆUVaÈaV_@anyVwV@„kl@°m@LnU„bl@„WVkV@Xa„a˜V„IXl‚IV‚„@XbVUÆ@XKWwUkmW@_UmnIlJXkWKXmV@‚w@_XV@Kl@kU@KlX@@UUUUKWLm@klJVUUmk@mXUWmXwƒ`m@„zUbÝakbW@m@UUƒéUIm@UbKǼ@™kKWXmWUkaWU—JWU¯L@W™Lƒwk@mm@_™ƒÅl™UVkmWUnV@VWLUb™bƑĬ¯l'], + encodeOffsets: [[119543, 33722]] + } + }, { + type: 'Feature', + id: '3402', + properties: { name: '芜湖市', cp: [118.3557, 31.0858], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„bVaV@XllLXU°ŽlL@V@VUnVl¯Ikš›VUVU@@b@lUXUWmb„n@¼šbƒĊ‚LÞ@lVXlmÞUnkJ@nlKVVšÞXklWVaVI@aUKn»lL@Kn@‚XXwlm@mn°@„V@Wy„wXlWVk™ƒ@aUaVU¯£kKWVXVWLUkkWlkkwmJUam@@aULVa@UƒVaUaVI@m‚@UUJUIUmmV@bm@UXVVUlVmImakKUU@UU@VmU@@kma@KVIXUVK@U™VmUkV™m±£@JkU@nlšk‚ƒLUlmb—@WbU@@XnlWb'], + encodeOffsets: [[120814, 31585]] + } + }, { + type: 'Feature', + id: '3406', + properties: { name: '淮北市', cp: [116.6968, 33.6896], childNum: 3 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@lnnK@¦n@@V‚V„@@VV@nIV„V@VW²a@b@bVnUVVV@V™z@lš@°UšV„IVaVV@x@ŽXX@WlwUnV@XblW„b@XlK@aš@kƒ@al@@_V@@WÅwmaUaV@„bnaVL@llInmU_@W@aƒUUĉUaVwm@XWK@wƒVkaVUUwU@@aV@@mlI@WœLWƒUUUƒVU@kV@XalKVaUƒVUUUk@WwUK@aVI@WƒUk@@UUU±xkb@lVš@xnLÇbUbk@@bÇVUJ±U@U—@WLXšml@bVVXL@lV@@LmbkLW`kbVxUn@LkxmV@bm@@VkV'], ['@@VVVkV@¥@UV@U@VUUJƒkWakKUšlXVJ@bXV@blX@aXV@V']], + encodeOffsets: [[[119183, 34594]], [[119836, 35061]]] + } + }, { + type: 'Feature', + id: '3404', + properties: { name: '淮南市', cp: [116.7847, 32.7722], childNum: 2 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°kƒīšaVaXK@U‚UVmnXUlšVÆkVKUUUmmU„ÑkU™UÝlĉKUƒwƒKƒbU@UxW@@lœmVUUVmUUƒmƒw—aW„kL¯K@Žm„ULWlIm`X„WL@b@¼@V@xkVƒI@b@l@lk„V°Ȯ¹ĸW'], + encodeOffsets: [[119543, 33722]] + } + }, { + type: 'Feature', + id: '3405', + properties: { name: '马鞍山市', cp: [118.6304, 31.5363], childNum: 2 }, + geometry: { + type: 'Polygon', + coordinates: ['@@šNJnllLnxV@laXLVKma„aXbVI„bVKVVVIVyn@n_ƒƒW@@ƒ„UnJlUVVXlLnaUWlV@VV„IXW@_W@XK@K@UVUUwVamÑXmmwƒw™KUnUK™çU@ƒJƒU¯@mŽ@nknWxWm@@LkKm¼VL@bUJUbkXWl'], + encodeOffsets: [[121219, 32288]] + } + }, { + type: 'Feature', + id: '3407', + properties: { name: '铜陵市', cp: [117.9382, 30.9375], childNum: 3 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@„ÒV¤@¼V²@aVV@Ž@„„x°Vš£nW‚@nbnaVXVW@k@aV@VUœUl™°JUkVm@U@UkK¯WVkKWkU@Ubƒakwmlwm@ƒkUmƒUUKU@@VmLUbVLUV¯U'], ['@@LllUL@VlxšL@a@UƒwXamK']], + encodeOffsets: [[[120522, 31529]], [[120094, 31146]]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/ao_men_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '8200', + properties: { name: '澳门', cp: [113.5715, 22.1583], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@HQFMDIDGBI@E@EEKEGCEIGGEKEMGSEU@CBEDAJAP@F@LBT@JCHMPOdADCFADAB@LFLDFFP@DAB@@AF@D@B@@FBD@FADHBBHAD@FAJ@JEDCJI`gFIJW'], + encodeOffsets: [[116325, 22699]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/bei_jing_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '110228', + properties: { name: '密云县', cp: [117.0923, 40.5121], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@vIHZDZQtDLNMXIbHRCXXITbJ@H`LGPRDDJNCLHTOCWFGvGBUJMKGFO^IHWXITQCI’Y^AXGfRˆDXF`DJOLB~G\\DZIHHpErUVMhHb]\\M†BVF@FTP`@zTbD\\@~M\\K`H^EVODWICAakAQXoIcCOCIgGYNWFWNGGKKGaJEGMEIKYJUT_J_Go@_SyQaSFMEGTcYOQLIIi@EKAUPCV[EEXQCW|aMUMAaYCYNIDGGACIMGGSKDQGaF_C[GaB@GOIiOKAYL“mI@CN]F[SWWAcKKI@HMUimEKbeYQYISNUOcBKPIFBNgvDPGZYFSf]CMSIWGEUFgDIQ[MeDMJS@RR@LphFPCHaBAJKF@J]IBJO@HlO@@RKAMPJHCNDJTHFP@ZGNANBRFH@J_fM^ONJNF\\VTDJHDON@XRND\\XRCPVETCLBVKDFJINHRGPRV@\\CLJN@VbXbLVT'], + encodeOffsets: [[119561, 41684]] + } + }, { + type: 'Feature', + id: '110116', + properties: { name: '怀柔区', cp: [116.6377, 40.6219], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@JHTVHXCHPfnDJGHNDJSB[JSBGVSAOH@PMPuDEHHXZN@PHF@ZLJ@LHVYJA\\OFWP]BMtMBSRGV[JeVAPQVIFENMD¡–@^NV\\JH@NNL@NM\\kTQ\\I^FNIpBHGTBFFAZQfKDIXQTLXFXNNVMVHRGpCFLlRLEVBBH`IVO\\G`RDPAXLXBXORHZEHTDLLN@VGTMrQNFPeASKG@GMOAKBYMK@GTUHUXSHMVDNMOUEOZMJML@^KRACMZEZMRQLUHE@OFENPR@DI\\ChMHIDG\\GJMDWHCKGMDCIQCHO_K@GaIJSWWQDaGWJMNCKRsCYGYuJUSaKaW@UIMDK@[QUHOGQJMEILCAUDKFSOUQD[WMC‚Q@WPMGCCIUSE[IMPMN]`e@IEGAQBMHM@YEOSGCIDMIGNOLB@QP@GkP@AI^J@ILEBIbADGEOog@KQQWSekWQQUOFKZLF@PUNmIaHIUeBCTSHENcJa@_IWSaGu`GLSBKJQFOXGDXVQVOBIHcDSJWBEFGTMH[^mLaXcHiKElTRKtFXZ`MHMPCNRDxZˆB\\ICIHK@KŽHbIVFZ@BPnGTGbDXRDJaZKRiGEFSFEJhjFNZFjn'], + encodeOffsets: [[119314, 41552]] + } + }, { + type: 'Feature', + id: '110111', + properties: { name: '房山区', cp: [115.8453, 39.7163], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@h@bl@HRJDZ``TA\\VVD^H`\\pF\\JŒ`JGv@ZO\\GPSTEjPTR`FnEbDTDHEhLFMTK@ETSPULKEI@OVISKSJACEQNQbV˜IXGDIN@dMB[IIBcN]ZHNLP@XOWCFWŠCNRHTpATD@^NVNLED@Rh@jCEF}E[OOHUEW]W@QGGDIQSH_MmFmCUT_K]i@MHCMW—FCF‹E{BMHMPOHKS]CFNGBELDH_@BcAKOACESAOBELaXAROB@FODMEDWJAG[aE@UM@DImEWJMC@OeCA{aE[@{L@MINUCQXKfUJORCHqJBF@TCXWNQX]M[EAJO@@KMBQJIC]EWMCCUBEBFHKDOTMBGNGF]MWDBRDdMDQVyE@LPVHDCP@JVVMTG~HNSH[CmRUvHPHBbA\\PTNRC\\YNJ€PRARPJDDR'], + encodeOffsets: [[118343, 40770]] + } + }, { + type: 'Feature', + id: '110229', + properties: { name: '延庆县', cp: [116.1543, 40.5286], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@^AXOPEB[ZIGU@KKI@YGE@OYMGWFGvCNO@OPGTBHUTA\\ITACIGMIHmCOeDGGWSUIGimYEEMgiFITEFEjHLQbYCIWQaCSHmHAOY@UEaJG@LGLDJ[J‡AwYQCDMNONGY_EWLsSQFkMO[NWAIGaIYL@HMBOKiOQDWEUDMQSF_QIUBWdg@[NaAKQ@M]OQ@WhgLUMMFYQDIRCEUZOOCIOJ[KIUMKL@HIDKVEBM`HJAJSJUdBLGNEdMBMO[BYEWJSNKNaD]PE\\SjOT_RQVEZPpƒNQXfŠNA~lNG`@PNLp¼RFLfbdKbATUh@FSNWjGFZVLFHVA~X¨PPROfFJbNJPLFbENJPrEFNPFRHDDJdENJLVEPBJTVTHGHFRFH@PXP\\ORQHW\\BjWFDERLPPBbB\\E`B\\D\\L`@F]FCnJ^AZL'], + encodeOffsets: [[119262, 41751]] + } + }, { + type: 'Feature', + id: '110109', + properties: { name: '门头沟区', cp: [115.8, 39.9957], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@V@XMnGPY²‰JQNEhH\\AZMPDVTTDZCPiJkHSHCjIdFtEHITCNITQEKUAMCEIKCECABYESKFWAKBEIIHABGDCKCAIHMHALKEI\\CFIBILIJQZS]BBEECS@E@@C]COKI@CABAAEEDMGƒCH]A[M@CJWH—JaUMRFRBDTITLUJ@PFJKLOVST@FSLENgKGFSCaCmF_ESQiOSFOT[HYPu@IH‹_[IoE_[]GUC[USB__CYQI@Gakg@qZeHQNMNV\\FVLPgJAFJPRLCH[XcPELUT[JiV_EELFTADBXRTRLJC@fHXHHbPd`fR@NfT`@TLplHMpCEJHJBVLFŽ@JT‚VnG^KXDXHNVGRLRXFJVdDHSNWLGfEzA'], + encodeOffsets: [[118635, 41113]] + } + }, { + type: 'Feature', + id: '110114', + properties: { name: '昌平区', cp: [116.1777, 40.2134], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VNLJI\\JPPDYPFVQDCJZRNEVNhKXgR@^P@NLRbB\\Mh@XcVARJE`RTCNFV€XRCjPPLNA@GZKbJJHXB\\MNPjLdGbWnK\\]NGHSFEXATIdCJGPARUWUHCPWRELITAHKv_E@iYCaW_BQ\\Y@QIO@QDCIGZCEMWGFMFAFgHEDOCSqKCCFGAMKEAC@ODGCGs@WH@KQA@EE@CE@GEA@EH@GGUEEJEAYD@JM@@DAA@FHD@FTJEHUC@JUBKCKG@G[CIIQReAYhO@OXGDO@@FF@IHJFCPEBACBIAAKDOABXARHPNEHGbQAAKQFGIAM[C@WHKaGiCEGOA‹HUKCIokSCUSOCYN[BgGMFIR±ŠOZmHWNU@ShbbXDHVXXGJ^lZ@PZ\\Nb@\\FHJAD'], + encodeOffsets: [[118750, 41232]] + } + }, { + type: 'Feature', + id: '110115', + properties: { name: '大兴区', cp: [116.4716, 39.6352], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@F\\E~DFN@BDFEpHFCHBBEGCDCJBHUDSBB@ELCPbF@B\\J@BJVAFJ\\ADKTCBGECFMT@BMN@@FH@DaNBEnvB@FPBATK@FHEFIAKFBFL@@PKBFJHC@FXBRAFCDMPDTOL@JIVFDHH@DDH@BGRFCDLD@N^@@CNA@KNOAEBCECFEGCFGMGFIPMOEJOLBADBBHGG@GCHIECY@INC@DMGS\\AIOZAAEYA@GT@KKMBEETCGMVINFxA@MJADB@FlA@HJA@NND@DFA@DVAZBBOFKH_JA@K^GBC@EFE„G@gAENMXKJigC@IbSJMqGOP£RGSMGE@kbQFDPEFiBSGGSBK]I{CDWCIDOic[C_G@SuSO@EWKCO@MNY@\\uZOPENQD[LKESSKGBKEG@EJGAGHoH¥CqhifeJkX_XFFGHFNEDFPENKHM^IFIVL^S`DVEnNnG`RTCJHH@R^XFXGVPP'], + encodeOffsets: [[119042, 40704]] + } + }, { + type: 'Feature', + id: '110113', + properties: { name: '顺义区', cp: [116.7242, 40.1619], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@EhEBENXHFNYDJHCD@RJP@R[ZARX`DbjZF@bHXT`Jb@dIFMTGDSfAJVbGnJVM@OKELYPERVXRflXTT@NIfC\\NJRhCVEHFJXNT^DTeZEHYCOhuAMJELOdAVPTMOWBWNMNEJgl]@WGUFIC[T{EEDEHGCIGMI@SECUQI[D{A{GQESPUH]CsiMCmHUeoHENcAaDGCMDGMQCACCBaCGLMAHB@DIEQLOAAEEJ@CW@CDINGAAGKQOCgV@LG@BEGDKNeREFBNCFIDOPKD[@YRW@GFWDAFE@EHDDrLDTCPGF', '@@KrJEH[\\B@FF@CHFBHUN‹AJKADGECBCMAG^E@EbI@BEGP'], + encodeOffsets: [[119283, 41084], [119377, 41046]] + } + }, { + type: 'Feature', + id: '110117', + properties: { name: '平谷区', cp: [117.1706, 40.2052], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ZJZRafFLjn€VGNJ@LLBdXX\\T^EDMJ@”nZKLBjPPJ@HbA\\H`DbERHLCFK^BZaFWXQLAGMHa\\OLO@SBIpBdCLƒVQfElO@GSAKEDQTC@GEBKG@ORIJBDAPDFA@CaOq@GGQAAEJK@KMUGAAGEAa@MGMBGCGSIIW@WSUCMDOJeWOM@IUF{WMWaDIMgIoRoCOKeEOEAG_I[cg@wLIFENQFDVTFJ@HNDJGHCFFFS|D\\EJHV@Xk^IhMFMNAXPX'], + encodeOffsets: [[119748, 41190]] + } + }, { + type: 'Feature', + id: '110112', + properties: { name: '通州区', cp: [116.7297, 39.8131], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@FDAJTGDNDCTDDEDBBE@DT@@EHCDGJ@EIZ@@FDBR@ATFBBVFFE@@HNA\\VE@CLIFNJFNJBCP]A@LJFA@HJEDD\\C@DBCHLAEPF@@DH@APHAERDF\\GIxDTM@CFLBBFJ@CNUPMHECGDBF]BMFPDLRBHHBJMDCX@@DFIBFPBRKJF@CGANBHKbDDABDRDHNNCHDbCdBFMpGHiOYMefKJMC}HWAUNW\\NNBNA„kNU|]HMTMN@MZBLFFF@RIRUT‘BMFIEGaAGGAOIIUGTSFcYKS@MSLYPKRUBU]EWDOI]CKGASgW@MTWKIMCS@uMAKKADMECGAKVUTSDy@IjWLMNBF@hƒHEF@FAD]H@LIBG`ELAPYAUB@CEB@CMC@MIB@GkB@ECAIB@NwBMEUJHNSDFFNALLS@@HZBBFYBJP[BHTCND@JMZ@FDGJHDH@GHAABCKAIPPFONEJNHEHHDEFFDADBFMP@L'], + encodeOffsets: [[119329, 40782]] + } + }, { + type: 'Feature', + id: '110105', + properties: { name: '朝阳区', cp: [116.4977, 39.949], childNum: 2 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@bFGHBHFBFIVFHHG@@FFB@HDFF@@FRB@LXGt@DHCH@PBDLFBNF@BEXCHEX@ZQ\\@LCPOJCDEAMFEfQLMHCAFH@@KhUNE^AAEHCFDNGVODMI@AEKADEN@CSJw[HCEFQGBBOG@@CE@FOKBDGCAD@C[FCGIB@IE@K^BDOIAEMMIJEDKF@[UMB@GF@EEAUEABSQ@CA@EY@FJI@CHGD@FS@@CAFCACFSCCDCMSHBIECMB@D]@@MKCDCQEAHG@CCG@CGUEIJK@SPOCCNEDQBDNDB@DJCDLFCBBALJB@BVGPBKVO@KHCCCD@FE@BNA@FNCTDDJA@FGB@NBDW@CL@hT@@ZHHQDDDAFSAANBC@HG@EFS@@DE@@PCB@Ue@CADNJB@FCBWA@LI^ix@FIHrH'], ['@@HUN‹AJKADGECBCMAG^E@EbI@BEGPKrJEH[\\B@FF@CHFB']], + encodeOffsets: [[[119169, 40992]], [[119398, 41063]]] + } + }, { + type: 'Feature', + id: '110108', + properties: { name: '海淀区', cp: [116.2202, 40.0239], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@plDJVLŒGPBFHjDbHGL@X\\DBNHJREBLRBHaFGŽMGOBQAWPBLCBBAJBDFADOIEJGE@@EP@HCPWP@ZgfBRQJJ\\D@HLHLDVA@IVDFGSI@EGC@EBB@CN@@IZCAGHGaEqGJG@EjwJ]@K@GSA@e_I@NE@CA@Kg@KC@ENCFƒAKQAW@WIMK@V‹@I@@F@^EDFB@HcIaDYCBRRDCHD@EFLN@FE@CJUPEJOJMTBPEDIFCMIAKNOGMRFJNDVBFLSRMJSDGJsFcEiJGDGTIlOjYD'], + encodeOffsets: [[118834, 41050]] + } + }, { + type: 'Feature', + id: '110106', + properties: { name: '丰台区', cp: [116.2683, 39.8309], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@hMN@NFTQCFRCBJFA@HJ@@HJ@HJ\\FTACDŒ@@UNLXJX@@MA@@IECAQlDFEHBDI~D@GXCFMVDFCH@@NF@ANJC@FnAB@AMF@@EDCDDLGP@LUOAUH@AIABKAAEDCKID@CCACMWA@EGDEILA@OK@AELEJBFEEGL@BSOA@EuAFmMACbG@@EM@ANS@ENFDAHSDCL[BEIUBAII@A[E@OaKD@FAACTGVIACDHDAFGAEDoGEFACM@i€g@@QFCMKMU@]SCoBGSMQ‰DEXXDWPO@MKYGM^AdJJA\\cNB\\G^„DNHFCBFABDBJ@PL^D@DF@T@FDAF^A'], + encodeOffsets: [[118958, 40846]] + } + }, { + type: 'Feature', + id: '110107', + properties: { name: '石景山区', cp: [116.1887, 39.9346], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@NQPHLMJBDNJEFCAONSPIFIVODIF@@EKMFEC@DGQCAQZDbCdJ@GEAFC@]@EJ@DCSB[EGII@@GI@@GEBAIQDDESRMEM@gNYTIRKJAJEJ[DFJKLGBGNBJLDCDAHGBJJAFBLEXTLZFBAFDLD'], + encodeOffsets: [[118940, 40953]] + } + }, { + type: 'Feature', + id: '110102', + properties: { name: '西城区', cp: [116.3631, 39.9353], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XBDA@EIACM@IJAD]BC@SFABISAD]H@@OAEDQEW@BLE„MD@FLDh@@LDBF@@M`J@fTB@H'], + encodeOffsets: [[119175, 40932]] + } + }, { + type: 'Feature', + id: '110101', + properties: { name: '东城区', cp: [116.418, 39.9367], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@DBf@@VDA@OF@@CT@FEH@@GADBMTBBECCRCGG@YS@@gDK@A‘C@PG@C^TBAJEB@TADC^IB@J'], + encodeOffsets: [[119182, 40921]] + } + }, { + type: 'Feature', + id: '110104', + properties: { name: '宣武区', cp: [116.3603, 39.8852], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@RBX@RFFCŽBFU@aK@WA}CCJGAEFkCBRFD@JB@@N'], + encodeOffsets: [[119118, 40855]] + } + }, { + type: 'Feature', + id: '110103', + properties: { name: '崇文区', cp: [116.4166, 39.8811], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XBL@@bEV’D@BX@AC@MHA@EIBCCDSEMmB@EIDBME@@MG@EDUCENWD@H'], + encodeOffsets: [[119175, 40829]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/china_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: 'xin_jiang', + properties: { name: '新疆', cp: [84.9023, 41.748], childNum: 18 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@›ρȁôƧƦóəʵסʵóƪԫʵѵͩƧͩړ›υࡓɛʵ@ȃ@óᇑѵƨɝɚôóНѺͩɜ̏ԭʵôƧɞñ@υƩ—݇ȂóƩƧ@ѵȂυœƥŌਗ—॥ɛóʵѵƧѹ˜݇̍ࢯ˜əɞυ˜ρͩ̏óਙƨƧŋôōóš̍ͩóʵן›óŋړͪƧѶ@ɜԭ—ԫƦɛȄ̍›ɝȄöςƩȂ̏œñȀ̏œƩóóŎə˜@Ő̎@ɞȀɝŎôƨóנѵȄƧ@óŏɝœóɜôŎ̍ͨςŎ@ƨóôƨɞ݈ʶóƨφó̎Ȁƨ̍ԮòѸԮמ@ѺȀ@ƪၬֆòȂñ̐òȂɜ˜óƨ̒Ŏ̑߼@φρȀ@Ő๐ς̎Ƨφ@ɝφڔ೦Ԯǿࢰ@ƦŏԮƨƨȄƧ۬ɜʶڔŐɚɚóŐôƨ߼˜ôƧƧó̐ƥóŏѺǿƦȁφƧς˜ƨƧ̒@ɜƥƦυ̐ɛƪͩƩəƪʷ̑ə@ȃƨʵנŋྸōਚԭԪ—@ɝƨŋ̒օςʵôƧ'], + encodeOffsets: [[98730, 43786]] + } + }, { + type: 'Feature', + id: 'xi_zang', + properties: { name: '西藏', cp: [88.7695, 31.6846], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ôŌנœôʶ̎ͪô™óŎƨŌਚƧ̐ôςͪφ—ɚɝࢰ—݈̎Ѻ—Ѷƨôʶ०ɜਘ˜Ʀŋφ›Ѷȁ̍—ôŏɚŋ@̑ə—@ŏò̍ɜ›óƥôʷƧ̍φѹԪ̍ע@Ѹʷɜ@ôñנ@Ѷɛɞô̐ŏѶƨѸƧƥōƦœôŏô—@ƧôƩ̒ŋƨŌƦǿô̎ɜȁ̒—óʶѶôôО̒›ςƥɜНφσɛȁ̎υƨఱƧŏ@ʵƥœ@ŌóóóͩƨƧóŋ̑õóɞóɝԩͪɝρôƧ̍ƧѹͨڑŎ̑ōóƧࢭͩ̏ѵɝóఱóóԪυô@̒ƥŌ̏Ƨ̑Ȅ݇ŎƧ›ѵӏ@ɛõŏɛȄôӒƧŌѵǿɝ˜Ƨŋԫ@̏ʴƥ@óǿ̑Ȁóǿ̍ςóóυô@ʶɛñρƦƩŐó̎óœѵó̑ͪࢯОóɜן˜Ƨ̏ƥȄ߻̎̏̐ןŎɝɜöɞƩȀôöɛȀóͪ̐ƨƪ̍̎ȂƥԪυО@φɞ˜ôƪ'], + encodeOffsets: [[80911, 35146]] + } + }, { + type: 'Feature', + id: 'nei_meng_gu', + properties: { name: '内蒙古', cp: [117.5977, 44.3408], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ኊȁ૊ö߼ƩɜɛנñԮɛѶóԮô@ȁѸóמ̎ගѺၬ@߼ʶԮӒ߼̎@ŐѹӒ̒Ԫƨöග̑ѶȄ̒ς।œѶɚöɞɜʴڔôôȂ̎—ѺȀς—ƨ˜ƪóԪ—ɜôɛОਕڔԭ˜ѵ̍ѹȂԫ›ɛƥ̍Ȃóɜ̎ô@ʶ݊ੲࢮʵږͪנƨôȂƧ˜̐ͪ@ŐƦƨφԬѶɜôƦ@ŐƧôôƦəŐ̏›@ŐڒѶԬô̐ʳԩНςōôŏɞ@ƨȂѶəóƧ̒ػ̎ó̐Őנóƨô̒@ƨɚɚ@עԫɛɛ@ȁυͩƥʳòևρ—̑ࡗƧͪ༃ॣԮփ̎Ʀ@ôô@ôō@š@ȁѵóƨ̍υȃóʵɛƨƥóυȂóəƪ›̐ρƧͩɜԭڔȄ̎عƧȁ̐ŏó̍ɛ›ƥƧ̑óρŐ@Ƨ̏˜ɝəɛ˜߻ͩ̍ͩɝО̍ƪƧóóӓƨóƧʳ݇@ɝςƪœ@ʴƩ—ƧƦôƨɛȄə›Ƨŋυ›óͩѵ@ɝǿóŌן̍ɛ˜óО̍œ̑̏ôȁ̍ŏòȁñóƦͩ@ǿə@ɛƧ̑˜ρȁυô̍օѹœóȃə™@ȂσʵѷƪòƩ̍—ôó߻ۯôʳƧ™óšõʵѵóѹɜ̍ȂѹôɛŌφֈƩͨρóυӑóޟఱ̑݇ͪóƪƨŌóȄڔԬƩςםñ̑ȃѵŐԭŏƨȁɛǿρôõɚɛóƧОə@ѹ̐ѵöԪͨôͪɛ̒ןŏƧƥóôƥƧɛŌôóɝó@̒݇Ӓ̒Ō@Ŏԭࢰ'], + encodeOffsets: [[99540, 43830]] + } + }, { + type: 'Feature', + id: 'qing_hai', + properties: { name: '青海', cp: [96.2402, 35.4199], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƨ@ôƪ݈ȁƪ˜@φɝòóƨԮʶɛ̐ѹͪôОəóƧɞᇒѶ@ôږô@ǿѶ›ƪȁςœɜͩφ˜ςŋɞôѶɛƨŌɞ—@ɚςŐñԪॢͩƨȂɞóƨŐ̎ŏעӏ̎óƧƦôœ̒ȁɜ›ςͩ̒œɚɛƨôƨɝφɛóȁƨŋóóɚͩƨóóƩ@ƧəŋƦƩ̍@ƧƧôǿυ̑@ȁɞǿõŏρƥסɚƧóτԫɞœôƧƦ@ñȃòñƥóυôôѹѵ—@ŏ̏Ȅɝó@ȂəŌóəѹƦ@Ő̍Ōυ݈ԩŐƧóôƧ̑›ôʵɞƧ̑ѵôƩɞƧ̑œóНѵóôʵ̑˜ɛȂó̍ƥȀƧŋ̑Ōóƪ@ƨó˜óŐƥ›ƦŎѷƨѵƧ̏Őɝóѵɜן@óòɛ@ѷʸס@ԩ̎υѺƨ̎óʸôƦɛœñ̎@Őɚ˜@̒əŌóŐ̎˜'], + encodeOffsets: [[91890, 36945]] + } + }, { + type: 'Feature', + id: 'si_chuan', + properties: { name: '四川', cp: [102.9199, 30.1904], childNum: 21 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ô˜ôŋó̑Ԯ̒ɛОמͪƨōöͫ߼ƥôȃƨóóñôƧóƧôōڔŏƨŐ@Ŏô˜òƥѺŎ@ōɜóנ˜ôǿô›ƦôԮ̍ɜôɚ›Ƨ—ñɛɚȁ̍Ƨɛևυ@óóôŋρԭɝ@Ƨʸ̍ŏυɜƧƧóƧƨȁρ̍ƨȃɚ—ôʵφóô̑̏Ȃ̑ʵɜʵɞ@ƨʳסƩóŎə—óɜƧôƩƧρ˜óôôô@ŎƧƨƨƪѹ˜ó̍̍Ʃ@̏ѹНôޟ̍Ʃóƪυɝɛ—əƨôŎɛȀ@Ȃ@ñɝʶ@Ōρנ̏—õóɛͨƨȂѵОɛʵ@̏ƩŐó߼Ƨల̍φɜȂυτɛОρƦɝƨóƪ̒Ѷɝƨóʶ̒œóƨƨôԪŏφ݇̎ŋ@ŏѺƥôɚɚŋ@ȁɞô̐ȃ@ŐѶ˜óѺφóƦôñòòȄ'], + encodeOffsets: [[104220, 34336]] + } + }, { + type: 'Feature', + id: 'hei_long_jiang', + properties: { name: '黑龙江', cp: [128.1445, 48.5156], childNum: 13 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ᇔȂਚНƨŐѶŏöƥςŏñƧƦóƨȁ@óƨ—óȁφӑóóƨ˜óǿ̎̑ôНɞ—ó̑ɜə߼›̎ǿ̒ôڒӑφ@Ƨȁ̎̏ƥƩ̎ρశ˜ôȂςƨφ@נɞ݈˜̑ƥƧɛƨʵƧȃƥ@Ƨƥ@ŏ̑ԩôɝρρóɛƧ›ƩͩƧó߻ʸ̍ʷѹƥɞڕõ̍öɝυ—̍ȂƧ̐̑ŏóƨñŋѹóóȁ̍›̏Ԭõʸ̏ŏ@ǿ̍@ƧОυ@ñƨòȀƥŎ̑ŐѵóɛŌóȂԫōƧŎѹñ̍ʶóОן@Ƨ̎Ѷô@Ȃ@™óŎó@@ó̍ƥԭք༄।ƨͩ̒ࡘς˜ñֈƦʴφͪ@ȂɜɜסԬə@Ƨə̑@Ƨóןô̏ŏ̍ô̑ؼôƨѵɚƧȁɝ@óŐρŎԪО̏ʴ'], + encodeOffsets: [[124380, 54630]] + } + }, { + type: 'Feature', + id: 'gan_su', + properties: { name: '甘肃', cp: [95.7129, 40.166], childNum: 14 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ڔôԮࢯ@ō̑ŋ݈ӑ@̑ɞôóôɜŋƦƨôóƨƦנŐɜ̑óͩԩͧѶõѺ̏ɚ@ƨНɜôöəςóɜȀƧȂԮŐѶŏ̒ȄמòƪρړԫôȃƧŋôƩ݈ͩɚ@@ǿɜ@φͩóŏɜӑƧōôǿ̎›ôƥƪóõ›ö@ô—ƨ˜ôƧƦôó̒ɜ@ɞŌõʶ̏Ő@ȀóôƨȂ@ʶע@@ƥ୾ӑó̑óŋôʵóɛړ@@ƩöóƩóρ—ɛƨ̑@óʷƥƥ̎ɛƧ›ôōƧǿôͩѵôɝȃɞȁõƧρóó—@ōƧŏړŐóŎôƨóƨôòƧôóȄ߻ƦõͬƧŎםͩɜНԭ̑ô̒óŌó—ƥ@óƨɝ›σԬƨôעəςƦöŐɝȀ@Ȃφ̒óȀƨƨ̎@ƥƪɚŌ@ƨôƪƧôəͪôôƧŌôȂυɜƧɞƧóəɜ̑›ρͪɛœ̑Ȃó›ƨƥ̍ôסӐ̍ŐƧŏɝôƧȁॡͪòԩρŏ@əɝ˜ƧŋѵɜɝóρŌυ—ɛͪρ›ƩȂѵœ@Ȁڕó@ȄɜʶφࡔڔœƨͪѶͪԬʶôƩעʶɚʶƥôóƨςȂ'], + encodeOffsets: [[98730, 43740]] + } + }, { + type: 'Feature', + id: 'yun_nan', + properties: { name: '云南', cp: [101.8652, 25.1807], childNum: 16 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ôɞôɝ̒öôŌƧƨôͪôô@ŋƦ›@ʶƨŐô߻ƪŏ@̐ɜʶѶНƧȁɜͧöô̐˜ςן@ŋɞʵ@ò@ȁɜǿóōɚƧɜ˜φɞôƩ̎ƪóޠѺО@̐̎ƪô̎Ѻ—ƧƩƨƧ@ōóóôóς—ƪƨƨóôɛó̑ԭ—ƥŌɛǿɝƨɛͩô›@ǿƨȁѺŌɚɛ̍ןѶНɛƧôóƥȁƦͩôŎɞ—ƨ̑ɜ—òôφ@ƨʵ@ɛѹōóȃəƨυǿóʵρƧƧŌƩɛ̏ȄñƧƧȀɝ̍ԩʶƧ̑υ—óŌƥʳɚӑóНƥô̑›óӒѵʵѹœƧӐןôƪφõŌƪ̒ԫŌƧؼƨƨס›ρȁƧœƨȂóʶó@@ʴƨôôφ̎Ŏ@Ȁƨ—ƪɚƨœóƨôôôςóޤƧŌƩŋƧԪ'], + encodeOffsets: [[100530, 28800]] + } + }, { + type: 'Feature', + id: 'guang_xi', + properties: { name: '广西', cp: [108.2813, 23.6426], childNum: 14 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƦŋѺ̎ڔʵƨŐ@ƦמȄƪôóȂɜŌɚͩɜ@öóɜôôȂƦôɜȁ@ɞφ›óȄ̎›ƨʶɞŋƨʴɚǿ̐̎Ԭ@ôñ@̏ƨ›ρ۫ô›ɚƨƨНƪŐ̎›ƥóƦʵƥŋ@ȃóƥƧ@@ŏɝǿôυƧȁѵɛ@əóŏ̑@@ə̍›óƧó—@ȁƩ˜ρóòНƥô@Ӓ̑@óŎ̍ƥσŎυ@̍ƨ@Ō̑ôóͪƨ̒óŌړœ̏Ŏ@ŌôȄѺŎ@ɜƧʶυ@ñóɛ˜Ƨ̒ɝ˜óōƥͪ'], + encodeOffsets: [[107011, 25335]] + } + }, { + type: 'Feature', + id: 'hu_nan', + properties: { name: '湖南', cp: [111.5332, 27.3779], childNum: 14 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@քɜОƨ@öŐמóƪôƩɚ̒Ő߼ȁςͩɜòƪ—ɜȀò—ñɝò—Ѻͪ@ŏƨŋóɝôǿƨ™ɚȃóəƨȃѵͩó̍@ȃƨóóƥƨƧ@ʵƦ›óͩɜ—ɛóñԭɛōυȂ̍ƧƦō@ɛƥ—ɛȀ̑œóʷóō̍œƩŏƧОəƧóœς۬Ƨœ@̐óòԫ@̏̍əȀƧʳɝŌóɞƧ˜ƨɜóŐƨò@ȄƧŌρŋóôԪОóʶ@̎óȄ'], + encodeOffsets: [[111870, 29161]] + } + }, { + type: 'Feature', + id: 'shan_xi_1', + properties: { name: '陕西', cp: [109.5996, 35.6396], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ςôöƨɝȂɞȄѶóóͪƨȀóŎƨœ̍ɜƦƦôʸ̒@ɜƧς˜ƪôõô@ƪڔ@ôɜóʶôŌô̒୽Ӓ@Ʀ@Ѻ̎ɜѺɛѶôöʶô™ƨšóʴ߼۰óô̎˜ñƪѸƩτʶ@ȁòŋəѹóǿ̑ʵ@ȁ̒ʷυփô݉ôН̏ط@ȁƨóô̏ƪõ@ʳ̐ʵ@ɝɛŋƩŌɛóןôƧŋ̒ó@ŏ̐ƥ@ŏυ@ƧƧôן̏@ƥȂѹɜəœɛóԭ̎ƥóóœóȀן—ɛô@ŎѹōñƦ'], + encodeOffsets: [[108001, 33705]] + } + }, { + type: 'Feature', + id: 'guang_dong', + properties: { name: '广东', cp: [113.4668, 22.8076], childNum: 21 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@Ȃô˜ôƨ̎œ@ɚ̒@ôŐ@ɚѶɜƨȂóφɞȀ@Őƨ@ôƦ@ȄƦŌƥʶƦôôŎôʸ̒›ɜǿƦ˜@ɜƥŎ̎ƨφȁɜŎòƥԮŎƨōóŏɛƧɝəɞƧ߼ɜςȃñȄƦŎ̒ōôòƨəƨ˜ɚН@əƨ̏ƪʵυŌəɛóəԭŏəœóŏѹœρʵɝƦ̏™ƥʳѶ›öō̑óóŋρȀυƧƥɛѹōƧôן—ɛŏѵ@óŋôʵɝ›ƪԩõ@Ƨō̍@Ƨ@@ƦɝԮƪО@@', '@@X¯aWĀ„@l'], + encodeOffsets: [[112411, 21916], [116325, 22697]] + } + }, { + type: 'Feature', + id: 'ji_lin', + properties: { name: '吉林', cp: [126.4746, 43.5938], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@נ@ôН̎ʵѺòƨōԬŎôȁɜŋѶô̒ŏƦōñǿòƧφ@ƨН̎@@Ȁ̐Őöʷ̐ԫ̎œôȂѺôòŌôƧ̒Őƨ̏̎ȁφ˜@ŋƩͩםȃƨ—@ȁ̑ʶ@Ōóôɛœƥѹ̑—συ݇@ɜρƧȃࢯƨôœəȂɛōƩɛ̏υρóõœƪʴυφ@ʶôŌóœρք@ɜƧ@ɝǿƧͪρȀƩó̏ŐƨȂ̍غړȃɛԮƨͪ̏ςƩœôɚφȁƦôɜƧôʶφȄ'], + encodeOffsets: [[126181, 47341]] + } + }, { + type: 'Feature', + id: 'he_bei', + properties: { name: '河北', cp: [115.4004, 37.9688], childNum: 11 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@Ʃ̒̏ŌѺ̒Ʃ˜óȄƧŌƥͪòôñȂ̎ŐóȂ̒̐̎›ôНɜ—נ̎ôŋɞȀѶ@ôͪφœƨŌɚœɜȃóƧƨƥƪ˜@ʳƩ›ɞρ݈@υНφʵɜ˜ƦρƨƧ̍ɝóɛѹ̍ρŏ̑ôóƨ@œƧƦôƨɛ@ƥƨ@ȂƦ@@ôəŐƧʶƨŌυœ̍̎ɛŋôōɝ@óƧ̍›ƦʵѵʳôʵɜŏςôƪŋƨŌɚ@ôНƥƧ@ōѸɛ̐ô̎ʵѵНԭ@̍̍Ƨò@ȁɝ@əρυͩƪ̏ƩõƧŎƧōóšॡȄɛʶɜȀ@ɞςѶƧœƥςɛŐ@ɚɜɜ@Ŏôôςœƪς'], ['@@õə@Ƨɛ˜@ŐóƦφô']], + encodeOffsets: [[[117271, 40455]], [[120061, 41040]]] + } + }, { + type: 'Feature', + id: 'hu_bei', + properties: { name: '湖北', cp: [112.2363, 31.1572], childNum: 17 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ñȄυƦöŐƩ˜óנƨƨφ@@Ő̏Ʀ@Ő̑ôƨŌנóɜôƪŋɜŌѶօڔə݈òɞōɜŎôӏƦóƨô̒óôȃƨó̎ŐôƧƪ@ƨȁςƧə̑̎Н@̍Ƨŏρôԭͩԫ—̍ʵƧšóȀôɞƧŌ@Őѹͩñ˜òɞñ˜ɛǿƩ˜ɛñρͪ߻Ȃ̑ŏƪəƩóםôõŏƧ@ɛНƥȄó›̑ѺƧ›ôφóƨƨƦƪóɜŐôóòôƨóφ̐ƨóƦ̎'], + encodeOffsets: [[112860, 31905]] + } + }, { + type: 'Feature', + id: 'gui_zhou', + properties: { name: '贵州', cp: [106.6113, 26.9385], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ɜȀƦŋԮ˜ô̒ɚ˜ôōעƪƧʴɝ@ɛʶ̒ʶ̐ȁƦœóȂô@ôŏ@ōô—ƨʶѸô@ʶƨ˜ɞó@ōτöòυƨ@@əƨô@ɛ̒@Ʀɜôȃ@̍ôʵԩНôóςŌƨŋ@ȃƧñôŏƧɛƨ—ôɝƧʵ̍œôȃυœ@ɝɛȂƥóóȁɛóõôɛ@əͪɛŋôȁƩóםȃ@ƥƧŏړʶѹ̍ƥŌƦȂóôɜƨѵО̎נəɜѹŋƧȂ@ȀóœɜͪɞƧ'], + encodeOffsets: [[106651, 27901]] + } + }, { + type: 'Feature', + id: 'shan_dong', + properties: { name: '山东', cp: [118.7402, 36.4307], childNum: 17 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ʃ̐φͪɚςɞ@@Ȃƨñ̎̎Ԯ@ѶОƨƧڔ@φН̑ŋ@Ʃ̒ǿ̎@ƨɜԬςôʶ̐ʶöԫƨƧנƥɜŎôō̎@ôŏóρƧŏԫôóƧԩó@ƥɜƧԭóƨʵɛƨ߻ӑɜНԩ˜óô̑óƧʳə™óɛƧ@õȀƧœ̍ȃɛŐóŏυО̍—óɝƩ—ԩ@ƧɚԫȄɚʶƨ˜ɞʶԪ̐ړɛƪ̒'], + encodeOffsets: [[118261, 37036]] + } + }, { + type: 'Feature', + id: 'jiang_xi', + properties: { name: '江西', cp: [116.0156, 27.29], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƧȄôɚəȄ̎ʶԬ˜ԮͪςóƨŐƪ›τɞƦōƥƧ@ŏςôóŐôô̒ʷѶ—ƪƩƩǿ@ō̒ɛôυ@—Ƨȁѹɛəƨѹ̑ƨ̏óƥѵʷô̍ɛȁôŏɝǿƧԫƧ›ôʳƥōòȃρȄ߻ɛɝƨɞɚɜƨôŐƧŎԭōñƦòԮɜôɛ˜ôͪƥœ@ʶƧƨôƦƧô@Ȅô̎Ѷͪ'], + encodeOffsets: [[117e3, 29025]] + } + }, { + type: 'Feature', + id: 'he_nan', + properties: { name: '河南', cp: [113.4668, 33.8818], childNum: 17 }, + geometry: { + type: 'Polygon', + coordinates: ['@@φ˜̎ƪ̐˜ɞȄɚ@@Ȃעó̎ŌѺ̒ôֆॢȃô™ƨŎƨōƪöƩ̑ڔɜԩ̏ɝʵƧ—əʵԬȃƨəԪ@@Ƨ̒ŏô̍υȁƧɚ̍ôóŋ@ɝƧŋõ̑σ—@ŏɜŋôɝ̒ƧɚôôطρóóɛƩ@óƨ̍ŏƧôóȄ̑ôƧóƥôóӐɛōɝŎ݇ñړɚѵֆ@ɞ̏ʶ@ʴƩöó̐'], + encodeOffsets: [[113040, 35416]] + } + }, { + type: 'Feature', + id: 'liao_ning', + properties: { name: '辽宁', cp: [122.3438, 41.0889], childNum: 14 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƨʴƧôôӔƨô̎ƩɞН̎ͪ߼ͪɜ—ɞɚ̐—@ƨςŏ̒ôƦƨɜœô̎ƪôςǿƨͩɞȀƨ@@ɛςփô›óŋ@ʵφυƩʳö›॥փρѹס@əɛ@ͩࢯ@ѹʵρ—ƩʶφȀƧ݈̒۬óʸɝŎѵ@ԭԫןɛƧƨƥςɛ—υʶφО'], + encodeOffsets: [[122131, 42301]] + } + }, { + type: 'Feature', + id: 'shan_xi_2', + properties: { name: '山西', cp: [112.4121, 37.6611], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ɚѺñŌɚšôȄѺ›̎ֆφóςȂ̒—ɜƨɚ@@Ȁƨŋôȃƪ—ѹ̑̐ŋƪ̑Ʃρρ›óó@ōɛɛ@əɜŏƦρƨ›ρѵ@ɝɛǿɜʵóօѹ̑̍ŋסô@ȁə@ɝȃ̏—̍Ʃυ—Ƨô@Ȃ̐ظóОó݊φք̑ʸ@Ȃ̒ʶôȀ'], + encodeOffsets: [[113581, 39645]] + } + }, { + type: 'Feature', + id: 'an_hui', + properties: { name: '安徽', cp: [117.2461, 32.0361], childNum: 17 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ó̎̑Ő@ƨƪ˜Ѷǿɜ̑φ—Ʀʵ̐˜Ƨѵôóƪôôυς—ƨȂɞŏ@̍ԫôò̑ƥ—óȃѶͩƧƥôŏѺœôŏƦ—@›ƥͩƧ—ôȁυó@̑ƧɛѵʵƩƪѵ˜̑ʸóóôŏρó@ŐƦƨƥŎσɝƩœ@̎̍Оɚ̒ρƨƧȂôɜςôóظəó̑ƨóɞɛŌ@Őτ˜ö̒ƨŌ@ɞôŌ̎óƨəφȂ'], + encodeOffsets: [[119431, 34741]] + } + }, { + type: 'Feature', + id: 'fu_jian', + properties: { name: '福建', cp: [118.3008, 25.9277], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@̎›óȁƨӑ̒—̎ɚƨͩφŐƨɝ̎ŋóŏρ—@ōƨ›òʳəóƨō̏˜õɛƧ@ƨѵƧōəŏóŋƧô̑ɝɛʳƥ@@óɛõ@Ƨ̑ƧóȁəƧ̑—Ƨ̐@ɚəОƧ—Ƨɚóñ̑ŎóʴƨœƨԬɞȀóŐɜȂó̎ѶʸôƦƧ̐Ѻ̒ɚƧѺɜƨȂ'], + encodeOffsets: [[121321, 28981]] + } + }, { + type: 'Feature', + id: 'zhe_jiang', + properties: { name: '浙江', cp: [120.498, 29.0918], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ѷʶƨɜ@̒φôóȂƨ˜Ʀͪ@œ̐˜Ѹ̍τȂ̒̑נŐמôƪƧôӑ̑›@ƥρͩƨօ̏@@υɝó@ŋɛ@ôƩəóƧѵυó@ƩɜŋƧ@̍ŌƧɞυŏƧͪ̍ə̑˜ƧӒôȂ̍œ@˜óφ̑ɜ@ŎƪȀ'], + encodeOffsets: [[121051, 30105]] + } + }, { + type: 'Feature', + id: 'jiang_su', + properties: { name: '江苏', cp: [120.0586, 32.915], childNum: 13 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ôɞ̎˜φНôŐɜŏ̎Ȅƨ›öǿƨ@ôɜɚšƨʴ̒ôôó@Ƨ̎əԮȃԪૉöͩ̐ƧòʵφƧôʵ@óړɜóŏɜǿƧ›ɝρσȁѷ̎̏—ƥ˜óŐѹ›óŐƨƦѵͪôȄƦ˜ñ̒Ԭó@̎ɝŐƧȁρ˜óφƩóóôƨѶ̏—ƥʶυ˜ɛ̒ѵȀ'], + encodeOffsets: [[119161, 35460]] + } + }, { + type: 'Feature', + id: 'chong_qing', + properties: { name: '重庆', cp: [107.7539, 30.1904], childNum: 40 }, + geometry: { + type: 'Polygon', + coordinates: ['@@əȂòɜƨ˜ѺɛƦȁ̐@ƪ—õŏφƥòȃƥ̍Ƨôυ̏ƧôñóóôɛŏƩôƧƥôƧóυƨœ̒ѹôœƦȃ@փƥɛ̑@@ɜƧó@ɚƧ@ñφσõ@ŎɝôƧ—@ʵѷóƧʵó˜@ŎóŐó@ôȁƥ›ó̒υôóʶə˜ƧȄς̎ƧȂôƨƨƨφɛ̎Őƨʷɞ@ςԮóŌôôφ@ɜֈ̎ƨ'], + encodeOffsets: [[111150, 32446]] + } + }, { + type: 'Feature', + id: 'ning_xia', + properties: { name: '宁夏', cp: [105.9961, 37.3096], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ల̒ôޠφӒςôƪͧυևɜŋѺó̎ȁ̍ɛ@ѹס@@ʵƧȁôó@ǿ̐ŏöʵɝŋɛ@ô̑ƥóóƨƧ—ó˜ôœó@ƩôóƦ̍œóȀƨŎɛӒôŐυͪɛ@@Ȁə@'], + encodeOffsets: [[106831, 38340]] + } + }, { + type: 'Feature', + id: 'hai_nan', + properties: { name: '海南', cp: [109.9512, 19.2041], childNum: 18 }, + geometry: { + type: 'Polygon', + coordinates: ['@@φɜƦʶ̐ôφô̎@ƨŎö@τʵƦ˜ԩ۫õН̏óƥȃƧ@Ʃəםƨ̑Ʀ@ޤ'], + encodeOffsets: [[111240, 19846]] + } + }, { + type: 'Feature', + id: 'tai_wan', + properties: { name: '台湾', cp: [121.0254, 23.5986], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ô—ƩɝöƧɝѵəޣ̏ρƩԭóōóͪρɞƧОôԪ݈ଦѶɜ̒ɛ'], + encodeOffsets: [[124831, 25650]] + } + }, { + type: 'Feature', + id: 'bei_jing', + properties: { name: '北京', cp: [116.4551, 40.2539], childNum: 19 }, + geometry: { + type: 'Polygon', + coordinates: ['@@óóó›υóôƥ@ŏóóə@ƧŋƩŌρóɛŐóʶѶʴƥʶ̎œôƨɞ@óŎɜŌ̎̍φ›Ƨŋƨʵ'], + encodeOffsets: [[120241, 41176]] + } + }, { + type: 'Feature', + id: 'tian_jin', + properties: { name: '天津', cp: [117.4219, 39.4189], childNum: 18 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ôôɜ—@ƨöɚôœôôɚŏ@óƥ@@ȁƦƧɜ@óƧƨƥ@›ƧóəН̏óѷɜ@ŎƦƨóО'], + encodeOffsets: [[119610, 40545]] + } + }, { + type: 'Feature', + id: 'shang_hai', + properties: { name: '上海', cp: [121.4648, 31.2891], childNum: 19 }, + geometry: { type: 'Polygon', coordinates: ['@@ɞςƨœɛȀôŐڔɛóυô̍ןŏ̑̒'], encodeOffsets: [[123840, 31771]] } + }, { + type: 'Feature', + id: 'xiang_gang', + properties: { name: '香港', cp: [114.2578, 22.3242], childNum: 1 }, + geometry: { type: 'Polygon', coordinates: ['@@óɛƩ@ρ@óœôȀɚŎƨ@ö@@ōƨ@'], encodeOffsets: [[117361, 22950]] } + }, { + type: 'Feature', + id: 'ao_men', + properties: { name: '澳门', cp: [113.5547, 22.1484], childNum: 1 }, + geometry: { type: 'Polygon', coordinates: ['@@X¯aWĀ„@l'], encodeOffsets: [[116325, 22697]] } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/chong_qing_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '500242', + properties: { name: '酉阳土家族苗族自治县', cp: [108.8196, 28.8666], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XJ°œlJX@lbl@XbV@VLnJlxnbšƒUU@IVK@lVIVwnJlU@n@J@L@Jn@l_nWVLVln@@blLšmV@@xœÔ‚`nœ™xV‚ÈLlx„LVxVVšƒV_U»VWn_m¥XwVmnX°ƒlmUUVwÞaVƒk@a@mmIUa@™mwk@™ƒm@@U¯a@UV@@K™@ykkmwkV@kU@ƒÑƒVkKWLÅamaUm@kyU@WkU@Ua™IUašVaUUmUUa@aVLXKWa¯UUbmJXnWnX`l@@xkzWÆ@V„LU¦‚x@b@JkIkJ@LmbUamJwm@óxƒnk@V„@x„ŽVnUVmVUVŽUbVlUbkXWŽ'], + encodeOffsets: [[110914, 29695]] + } + }, { + type: 'Feature', + id: '500236', + properties: { name: '奉节县', cp: [109.3909, 30.9265], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@WVXb‚UnK@x@b‚²kxmKkl¯_ƒVV°™VU@bnKVVV@@nkŽ@n›bn‚@š°@VLČUš@°WV@V™nU@InKVl@nU„b˜KnX„WlknLlKUwnalLša„VlUXmWk@UU@UWWIUyķ¹XaWW@X™ƒKUIVm„U@W@UVU@KV@n»VkUkÇmUmVIUmULUbm@ƒwUaƒKkkm¯ÑUL@bWVnx@VmxUI@„klmkkK@aƒK@IlJ@I¯ƒk@mak@mnkJVL@bV@Ub„„W`UUUV™I@VƒU@VVbUJVLUVVbUX„VVxk¦VJUnVxnVVUšJV@Ubl@@bXV@L'], + encodeOffsets: [[111781, 31658]] + } + }, { + type: 'Feature', + id: '500238', + properties: { name: '巫溪县', cp: [109.3359, 31.4813], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nLWbX‚VLVU„V@KšIVl@b„@lbšU„VnU@JÆU@V@n°KĢUl@VbÞKšVš@„_„V‚KXU‚U@KXƒ@wlkkU@mWKUU@UôJ@XV@œaVmÞIVaVLƒƒ@»kmƒ@ƒUkL™U@aU@WWƒLUUU™™KkbƒwWa@KU@kaƒXmW—LƒamVk@UmL@JmVUšU@¯X™@ċVUK¯@ÅnWK™LkKULWK@UXK@wW@™LkV@bVLƒlXn›`¯xU„°LnŽlV@n°Lnl'], + encodeOffsets: [[111488, 32361]] + } + }, { + type: 'Feature', + id: '500234', + properties: { name: '开县', cp: [108.4131, 31.2561], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@n@na‚I„wš@@VVK„LVbVxnVÆUnanKWXamKmk¯K@mkUm¯KVƒ°w@Wm@UIUUlKUU@a¯KWanwmUXamKkUWUnU@KƒkUwWKXaWLUWkImaUUUƒƒKka±k@lƒ¯w™wmbUƒ™ƒkXm@UJkIW‚XXƒbƒmƒ„UJ™XUV@°šKlšlVXV@xmbnV@blV@VšœU`UL@V™a@bULlb°VXbܚ@V@bƒL@J„xnLVb@lVb@V@@z˜bXWšX„KVLV‚š@@bUVVL@b„„lVna@ll@„zl@@J'], + encodeOffsets: [[111150, 32434]] + } + }, { + type: 'Feature', + id: '500243', + properties: { name: '彭水苗族土家族自治县', cp: [108.2043, 29.3994], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„Jlb@nVV@bXb@ÆlL„Ul`nVKU¼VxkbW„nlUxlXX‚@°°WnnJ@VUn@J„k°L@VlV@nUJ„x@bVVVz@VnLla„KnalVlIUŽ„¼@nV@@anKUwVal@UlJœƒlI@akU@UWXKVI‚¯Uak@@KmkXWÜkXWykIWwXw@laXamkVUUym_XmlkkmmakwmIUKU@Wak@kaW@kI¯›WIk¦VŽƒUUƒmaUV@XkVUV±aUb¯b¯¥m@@ImJ—@mƒmL@kUKUkkJƒbV¦'], + encodeOffsets: [[110408, 29729]] + } + }, { + type: 'Feature', + id: '500235', + properties: { name: '云阳县', cp: [108.8306, 31.0089], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lb„LV„VVnblJVXXKWbXLVx„l@LmVXVVl‚nLWbnVmxXb°L@bVVkLVVVJn@@X‚‚œ_Wm„kUK@alUšKX@@xWL@VXLVKlLšKXLÆm@™mœa@ml@mU@UUmL@aVšUU¯„U°`lknLlw±@a@wmLVWaXU@KWU@ak@VaU@™IUVmUUwVmUIl¥UwƒUVWUaVUUKVIUa@UUUUJƒUUm™kƒ„nl@„@VWV@L¯aUb™Ulxƒ@@b@VULUx@VUxVV™U@bU@mxU„U@mUVŽklkkƒ@WxknlxK@amLƒKU„K'], + encodeOffsets: [[111016, 31742]] + } + }, { + type: 'Feature', + id: '500101', + properties: { name: '万州区', cp: [108.3911, 30.6958], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ĸĊVI„ƒ„n„aWWXlJVIn@lWš„V„našx°xk„l@²Ž‚LVƒ„LnK@b‚LkwlmXw„@lllkUnVV@VƒnwV@@ašVUUVw@UVwVK@U@a„@kwšVVa°b@KXU@U@ƒmk„ƒÇсaml™kUVmn@VULU˜m@kUVkUaƒwUWm@Uw¯„mKUUmVUUULUKU„W@XbWVkaWwkUU™ƒ™k@maUbmbVlk¦ƒxUVUIWVU„kJVVkL@UmJ™UUVU@lLUVU„lx„@@VbƒJ™U™L¯¤@Vƒ„'], + encodeOffsets: [[110464, 31551]] + } + }, { + type: 'Feature', + id: '500229', + properties: { name: '城口县', cp: [108.7756, 31.9098], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VK@w¯L@m@UÅV@ImVƒU™Vkaƒ@@aUk™J@LƒUUVUKmLmbÅVmUUwUaƒKUL@U™@ƒxJmbm@nVJ@X@VkV‚n™lƒLXx™@ƒb@bUVƒLU`UnƒbU@@ŽmVVX@JX@VLVVšklV—„‚`@bUL@V„LVKn@‚U@„UJkn@lmLmK@X@Jn@mb„nÞWVXnJ‚k„KČÑÆ@VK@knaÜmXlUČW°kôÇÆ@a@yÞ_VmƒUnU@K'], + encodeOffsets: [[111893, 32513]] + } + }, { + type: 'Feature', + id: '500116', + properties: { name: '江津区', cp: [106.2158, 28.9874], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„InWUUlU@LVašlX@°²lÒXxlK@Ul@@Un@UaVJ@I@W@UƒUUVUwVIUKUa‚UUVwn@Üx@XUlnn‚bœJ@¥VklKUUlk@ynU@kVƒUUVWnI@¥V£VWVIUKU@UVƒa@n@Vm@@nlUaVkUwƒJ@blLkLW@XWmXkmmLn™@m@U@UVm@™„UVUUlakUVa„ƒVkV@@wnaWUk@VwkƒlmVIkUUxmJ@U„™@KƒIkx±V@IUm@K@IUKkbWKUbn„m„@bmVnbmb@xkxUJ@ULW`@bX@WVXL@Vƒš¯„mk¯@UJ@VmLUaWnX@WJ@nkKkxW@UIV@@KkImmkK@UW@XaWIU@U‚ƒIkbWb„xXŽlLVbnV@bWlX@VxVLnl@nÆÞVÜ'], + encodeOffsets: [[108585, 30032]] + } + }, { + type: 'Feature', + id: '500240', + properties: { name: '石柱土家族自治县', cp: [108.2813, 30.1025], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„š@kl@š¼UbmVXJ@bV@nxVIVJULVVk@@LWbnJVU@bVbUJ@blLXnWV—@mbnV‚@V„„bn@VJVLnaVanbl@„šVšlVXxlbXUWaX@VƒUUVwUUVm@I@WmI@a„mlLœ™lK@alwnUV@kóVaƒÝk@UlbVK@™VU»VUUVWUƒ@U`ULkwm@@KmU@knKƒ»VkJkUmbƒLkbmK@UUyUU@aƒwm@@XXJ@VVLVVUbVnUJVX@K„„k`WXXJWXUbmW@bkL™Um`Xnƒb@JVL@LU@™°VVXKVnUxVLUbmJ'], + encodeOffsets: [[110588, 30769]] + } + }, { + type: 'Feature', + id: '500237', + properties: { name: '巫山县', cp: [109.8853, 31.1188], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@kVƒU™bkKmbVxkLmKkllbV@@LXb„xlašLVšVV„KXXV@@bšVlK„V„@ln@¼°KXa„U@Ulw°JXalIUa„ÝWXW@kVU@ƒVUVWUUUamUw@aVamwn@VUUƒlLXWm£@wÇĉkKklmLUÒ¯ƒWn™@ğ±kwmaWm¼U@@LUV@V@XƒVUnVJ„LWš@‚XXWbĸºVzXJVXV@@VXlWn'], + encodeOffsets: [[112399, 31917]] + } + }, { + type: 'Feature', + id: '500102', + properties: { name: '涪陵区', cp: [107.3364, 29.6796], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nèVblĖVVnLšŽ„@šx‚V„n@nšJ@L„UVVX@lbUJV@@nn@VVVK@z„˜V@nzVJVUlmX@@_VVVbnaVal@@knW@wnaƒVK@aVI„J@£kUVW@‚wXUVJ„amƒ@Ikƒƒƒƒ_X¥ƒ@WwkKkwmŽ™šƒkUxƒnÅmm¥™WV@Um@UlVL@JU@@Xƒ@UVkKVk™KVk™Kkb@bmJVXU„VVUbU@@`W_UV¯b'], + encodeOffsets: [[109508, 30207]] + } + }, { + type: 'Feature', + id: '500230', + properties: { name: '丰都县', cp: [107.8418, 29.9048], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Þè@XUK@LlV@blbUJ@„„V@bnV‚@VVVXU@ƒlbXal@VXnKV@maXUރ@amk@aVKXV‚anbš£°mnIVaUKVwUmWLUUš¯V@@KUK@I„aWmn_šVlK@anXVaXWWIXWl_ƒƒ@LUWVIUmVaUUUK@UWI@Wn@VI@mkU@U¯Kƒl@ImVÅLƒwU¤óbUU@wWXkmm@LU@@VUIWVUL@JUnƒaƒx@Jn„ƒbUIWVx@ŽUXlV@¤ƒIUJ@bUL„Žmb@xmX@lk@UbmbUaUU@`W@kn'], + encodeOffsets: [[110048, 30713]] + } + }, { + type: 'Feature', + id: '500232', + properties: { name: '武隆县', cp: [107.655, 29.35], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@l„„w„bVm@IVKXUVJ@UV@@KnnWlX@xVVôaV£„xÆKnUVm@UmIXm¯¯@WkWVwmkXƒlaUwV»ULmk_ƒVkK@ÅWa@aUU@mkaƒIƒb@‚n¼ƒnm‚_@mmK@UƒLUVVmI@aUJ@XWJ@U`UIkm±kk@@lULmUmKUnVšnlUVmI@VkVlx™bkIƒVmLUxkKUŽ‚Xš‚n¦Æn„mVw„lš™nlxlLXx„@W¦„`„„'], + encodeOffsets: [[110262, 30291]] + } + }, { + type: 'Feature', + id: '500119', + properties: { name: '南川区', cp: [107.1716, 29.1302], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VšUbVJVUn@VLX@WVXVVI@VUVWxU@mš@ĊX@@¼V°aVUX`@_V@VaUUVƒUWnI@alašLUlšLUllLVU„@@WV@@IUKVkn@@VlLVwnK„UlJšakwlU@UnJVUmkU™VmXa@wVK@UUw™@VƒVI@akƒ@alInwlKXUmaUW@wWLk™™KVak_ÇaUƒƒV@šXbƒLVxUlWIk@UK@V™@ƒkU@VbUVUlVnƒLUV@lVXmxkV@L@V@Vk@WbUwmL@JUI@xVxkx'], + encodeOffsets: [[109463, 29830]] + } + }, { + type: 'Feature', + id: '500241', + properties: { name: '秀山土家族苗族自治县', cp: [109.0173, 28.5205], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XlV@lzn@VŽnbÆbXKlL„U„ÒV@@llUnxll@zšŽ@LU@@V°b@Vn@š„l@VÑUƒnK@UšU@aUaƒkVm@K¯wƒklmnn„Ul`nI@almkIUwmWVkUaƒkkJmUUa@K@aU@@_m@@wUyVUUa@Umƒ@awl@Wka±„UkUykIWV™b@bUVk@›aU@UXU‚UIWakUWmUxUV@nUVWbšŽ@XXVVŽmXXŽ@VƒbVLkVWx'], + encodeOffsets: [[111330, 29183]] + } + }, { + type: 'Feature', + id: '500114', + properties: { name: '黔江区', cp: [108.7207, 29.4708], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VX@V@LV@VJUL@lVnnxlb@VXV‚XV@@W„@UIVK@kUKna@£VWUaVUUalIVJVIUW„_lm@bXKV@mn@J„UUw@KnIVll@VanLVmUkVKXLVKUIVamw@UaU_lw„KlwUWV_Ua@aUa@KUšwm›_›Ó@wU@™nkK@am@UkUKmXk`m@@I@K@I@mkVmIUxUJ@kUL@JVV™„lnklWnn`VzUVnlWbkb@WxXxlJXzWŽÛlWXnl@Ll@Vb°UJWLX@VlV@bkJ'], + encodeOffsets: [[111106, 30420]] + } + }, { + type: 'Feature', + id: '500117', + properties: { name: '合川区', cp: [106.3257, 30.108], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XKVXlK„ƒVL@UnV@aValXXK„U@WVwUaVU@IV@@aVW„L@U@anVV@@bVK@UVL@bnJWL@VnUnb˜@@JnIlVl‚@@bXIWbn@UKVLVKXLlaV@VVnK@bVL„m„IVƒ@KmknUUWVI@aVJ@_„WU_VmUwƒU@K™ƒVak@am¯mJU_UJUkU@WkIV`UI@JV@LmmU@@mƒbUzś™@„VK@nUKƒ„ƒb™akb@UWK@bkVVbV„Û@@`ƒXk@WŽ@n@lXL@bmb@VVJUn@JnUlnUlmX@`XLlbkJW@kzlb@`@b@b'], + encodeOffsets: [[108529, 31101]] + } + }, { + type: 'Feature', + id: '500222', + properties: { name: '綦江县', cp: [106.6553, 28.8171], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@¦‚@X„lVX@@UVKl„VUX@lanVlUVbXWVXVƒ„VVUnKVUlwUwU@UJ@nmVkUV™lwXam@VaUUUw@W@kk»mV@UmKkwVKVUU@@LUKVI@mV@XVWxnXVKUUUK@wWU@UUWnUlLXa‚mUI„am@wI@K@amIm‚UUkI@m‚akUkKWUUanƒ@wƒamLVxk@UVmUUL@Vm@kV@I@ak@@bWVXJlLVbVL@š@bn@@`Un„@WbUKULWVXbƒ@UVmbX„WVƒb@bVmxUKUƒV@šUn@V@V@nmšnKlnnWWXX@lKkK@a„IVxUlVb‚k@mn@@U@m„bVUV@VLUJUXU¤'], + encodeOffsets: [[109137, 29779]] + } + }, { + type: 'Feature', + id: '500233', + properties: { name: '忠县', cp: [107.8967, 30.3223], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VLÞĊ„U@Wš@¼V‚„@lk@w²mlšVUœ„llšVnI@VlKUUlIVƒXUVJVU„wl¥UkUKUIm@ƒaUƒ@mUna˜@XUWmkK@aVIUa@aUVmIXa@Kl@UUVKUIUJmwU@@aWInUVa™»k@@lƒ™¯n™¤mabWUUL@bnl@b݄WVnbU@mLUWk@Wbka@„WVUU@UmUmVkUULV„lVUx„l@L@VƒbÈÒlb'], + encodeOffsets: [[110239, 31146]] + } + }, { + type: 'Feature', + id: '500228', + properties: { name: '梁平县', cp: [107.7429, 30.6519], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XLV@VV@b°°nšƒnkb@bƒšnJWVXblIUVšxWnUJnVVLVU„JlUnLVK@UnUVJš²nKVbVKla@aXlJ„k„Klb„ƒ@U°£šKšV„IUa@ƒ@kwVƒVUkKV@VUkk›ƒUVk™±n@xklƒ@U@»™‚@XƒVÝĉUJnxWb@UX›KkVUbUKWUkVmkkLU`›b'], + encodeOffsets: [[109980, 31247]] + } + }, { + type: 'Feature', + id: '500113', + properties: { name: '巴南区', cp: [106.7322, 29.4214], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nxnVlJlUXLƒ¦@x@Vl@nKVVX@V_V@@KlVXU„@lKlxXIl@ÈĊ@Vl@n_VJlŽnVlnb„²VVVJVVmUUkĕUamçU@»W@@ĉn™V@XwVU@UUJWUXUW@UKm@UVUIVaU™UVmLUVƒUU„UWWXUakVmUkbW@UVkƒUL@VW@kUWƒ@mJUXVVU„@lmV@zklVVkLUl@¦›I'], + encodeOffsets: [[108990, 30061]] + } + }, { + type: 'Feature', + id: '500223', + properties: { name: '潼南县', cp: [105.7764, 30.1135], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@a@a@_kalyX@lIkaWK@_nWVkkmmV@IVmUI@Una@aWK@k@mkbWaknmJUk@mk@@kUal@Uaš@Wa@aXLlwUKlkkƒ@KmI@VUJ@Lk@@VUUmL@amJU£kKUaWakLmU@bVVUbnbWV@xkL@bUb‚xUxVbXJVbUVWIUVU@kLWxkKWV@n¯VUbU@@VVX@VmaUL@VUK@VVbn@lVnI‚@@lnLULm@Ub@Žl@na„@lK@XVVkJ@b@zl@@VnV@bVb@J@bnXV`lXXmVI@W@InbV@@aVKUblKVLUanLlmnLlK'], + encodeOffsets: [[108529, 31101]] + } + }, { + type: 'Feature', + id: '500118', + properties: { name: '永川区', cp: [105.8643, 29.2566], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@b܄nWVLX„lxV„VxXxlVn@@bVblK@a@UnLVJV@@UnLVU@VXaVKVXš@n`WUÿ@IUKlaUUUkWyUÛÅÝ@mmkUKUwW@Xk@amUUakKWƒwXaƒK@VVLklƒXVlkxV„UL@bm@Vxn`ƒIVxUVkLVšUšl@@lkXmmƒVUn@VV@Xb'], + encodeOffsets: [[108192, 30038]] + } + }, { + type: 'Feature', + id: '500231', + properties: { name: '垫江县', cp: [107.4573, 30.2454], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@šĊ°¤nҘ¼œaV_lKnllUXVVLValUœLVW‚@XamwVIUKkaÇфa@U@KƒkVwkUUƒVKlVnU@aƒU@ƒVIka@akU@KVL@WÝçUV@Vmbů@L™KƒnnJW„ƒVkxlL@VX@VxmnXVWxUb@bkn'], + encodeOffsets: [[109812, 30961]] + } + }, { + type: 'Feature', + id: '500112', + properties: { name: '渝北区', cp: [106.7212, 29.8499], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@bVVXL‚a@lnbWn@L„@XVlK@VVLUVlbkLUKVVVL@VšnX‚VL@VV@UbVb@x@¦UxVb@bUJƒL@L„VVxlK@™nk@U@W„UVLlKXV„@VblU@UUKVU@wn@VJVanLlkX@VaVK™¯@a@U@U@ƒVaUK„kUUƒ±maUkm@UUkbm@@Vk@@JƒwU@Ub@I@JmwUL@aƒ@@KkVÇLkƒWkƒ@kUU@@xUVmKUnllUb'], + encodeOffsets: [[109013, 30381]] + } + }, { + type: 'Feature', + id: '500115', + properties: { name: '长寿区', cp: [107.1606, 29.9762], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VVšU„bX‚lX„¥l@XnVmlxUx„@@blVnnôĀlm@aVaXwWUnmUwW@@UkKlw„UXƒmI„mšL@Kưna@UUImyU@ƒ—@yULUUm@@mU@VIkaW@UUƒV@K™I@mƒmU™wƒ@™mKUnU‚UIƒlVLUb@„@V@V@bš°ULUbW@klmKUbUIm@@xUVVL'], + encodeOffsets: [[109429, 30747]] + } + }, { + type: 'Feature', + id: '500225', + properties: { name: '大足县', cp: [105.7544, 29.6136], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XUmaVaUU@anVlKXbValU@aV@@IXKš@@bV@VxVK@UXLlUšJXa@_‚@@aVK—ÅWVkwWaƒƒwUa@am@kUWLU@kWmX@ykI@W@UV@na@LlLV@UƒkwWƒUKmXX`mIVl@bXLWVkbkkƒx@`VXm@@J@U@UUKUxk@WbUIVl@VXLW„ƒJUkUlUImxXlmb@X@VUJUnVbšW@UV@@VVX@bnW@LVxUnlJUV@n„@VxVIn@l`„UVVVL'], + encodeOffsets: [[108270, 30578]] + } + }, { + type: 'Feature', + id: '500224', + properties: { name: '铜梁县', cp: [106.0291, 29.8059], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VblLV¤nI@bnKVV@Ul@@KVI@UnJ@Ll„klVLkxWK@bXb™@Vbk@Vb@ll@@nVlnIlmXblaXl@„W@_Ü@UƒUalU@aXL@Vlašb„a„ƒVL@mUL@ƒUUƒƒÇXUW›X_WaƒƒUƒ»m_™@UWULWb@UUVmK@VU@UImK@V@bkL„x‚„XblxXU˜ÆUL@b@@`Wb™IkVWK@VULUwU@@a™@WL@JU@@bkVUb'], + encodeOffsets: [[108316, 30527]] + } + }, { + type: 'Feature', + id: '500226', + properties: { name: '荣昌县', cp: [105.5127, 29.4708], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VI@U@WnaWknwVJVkVl„IXƒWK@UUkVJXal@VwVL@V@V@In@UW@_„wlllaXUWK@aUknJW_ۃ@aWaU@@UVm„UUaUImJVnÅUmVUm`kUUVWLnVU@VVmXƒK@„nxmŽULkx™ImJ@nU`@X@Vkn@`@nlV@nVJVaX„VLnK@bVV@nV@lbXWš@'], + encodeOffsets: [[108012, 30392]] + } + }, { + type: 'Feature', + id: '500227', + properties: { name: '璧山县', cp: [106.2048, 29.5807], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XzVlVVkbVL@JVĀXŽ‚¼V„„„XbW`XœWVȎ„„VVšŽVkV@@UXa@alK@IƒƒU@UKWUyUI@wVUUWVak@VUkƒW¹@WXI@yVIUK@kWwkѯ±W@™kUb@KkVVVmXƒJ'], + encodeOffsets: [[108585, 30032]] + } + }, { + type: 'Feature', + id: '500109', + properties: { name: '北碚区', cp: [106.5674, 29.8883], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@X‚VLV@„„@JkL@bWb@VU@UlƜVy„a@nV@nn@KU@IVJU_lJXV@VlVIV`nIn°@b‚lUbš„„KVI@aUaVw@¥@wUaVaU@@UUKW™m@UUKUUVLlKkaVUUK@UkLWUƒ@@KXmma@kbWKUU@aUamLnÞ@VWLk@@Wm@ULU@@U™KUVWI'], + encodeOffsets: [[108855, 30449]] + } + }, { + type: 'Feature', + id: '500110', + properties: { name: '万盛区', cp: [106.908, 28.9325], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VIV@@wVJ@InKVxXal@@U@U@KlUnwUW@kVU„KUmVkUa@I@KW@@bk@@mƒU@m@k@a@aƒIUxmJk@ƒwULƒwkKmVVX@VXV@xVLVVULmWXwWUU@@nUJVL@KV@UVULlxnL@VnUl¼@l@XVxVVUbn@WbkxUšlVnU@m'], + encodeOffsets: [[109452, 29779]] + } + }, { + type: 'Feature', + id: '500107', + properties: { name: '九龙坡区', cp: [106.3586, 29.4049], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XK‚L@Vš@XbV@lW@UV@@VXIV@U™VKlL@KnnJ@VV@VU@I„@@mVUVWUUmL@V¯LUK@UV@UU@a@U@yU@WLUK@X@KUVmL@ƒ@aXI@w@ammVk@WÛwm@UxVVVbVLUJVxVU„V@V@X@JUIVbm@@Vk@@VkL@lVLUJ@zWJ@X'], + encodeOffsets: [[108799, 30241]] + } + }, { + type: 'Feature', + id: '500106', + properties: { name: '沙坪坝区', cp: [106.3696, 29.6191], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Xºl„UVl@UbVXUV@xVJVzXJVUšL@VV@VKn@@Xl@XK@UmÝnKVbVakkVm@k„ƒUK@UmIm@LkKULVšU@WJ@UU@@VkXU@Wa™@@UKWL'], + encodeOffsets: [[108799, 30241]] + } + }, { + type: 'Feature', + id: '500108', + properties: { name: '南岸区', cp: [106.6663, 29.5367], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VV„JVL@bUVVnl`XIlwXJlw°nnl‚IXW@UÇĉk@WJkwkLƒ@WVkU@LU@U`W@UXUV@n'], + encodeOffsets: [[109092, 30241]] + } + }, { + type: 'Feature', + id: '500105', + properties: { name: '江北区', cp: [106.8311, 29.6191], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nLVU@wV@lV„@Xll„ÈKlU@L„@@bVKnx@I@JVaV@„x@Il@@Un@laVVn@mkUIm`k@WXJmk¯mkxWIkxWJk_UmVUUKƒ@UU™@ƒ„@l'], + encodeOffsets: [[109013, 30319]] + } + }, { + type: 'Feature', + id: '500104', + properties: { name: '大渡口区', cp: [106.4905, 29.4214], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@k@@U@w„¥WKkVkImUmwa@b@xWJ@b@„nKVU@L@WVLXKV@@z@V@bVVU@@VVL°K@U'], + encodeOffsets: [[109080, 30190]] + } + }, { + type: 'Feature', + id: '500111', + properties: { name: '双桥区', cp: [105.7874, 29.4928], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@WwUwU@kK@KmbU@@V@XlJ@znWlXV@XK'], + encodeOffsets: [[108372, 30235]] + } + }, { + type: 'Feature', + id: '500103', + properties: { name: '渝中区', cp: [106.5344, 29.5477], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VLš@VV„@VL@aUKƒIUUƒ@@JUVU@'], + encodeOffsets: [[109036, 30257]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/fu_jian_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '3507', + properties: { name: '南平市', cp: [118.136, 27.2845], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@knyƒk@ƒKU¥šwV@nkƒWƒzUmk@@lKUa@aVI@UƒKUamKUUVaUI‚@Xƒ@UV@K±IUVVlUbUbUL@KWUXmWk@KkXmmkŃKUƒ™a@amUƒbkUkKWUnwUƒÇwV™UUƒÝUKV£U™@ƒnKWwXLVKm¥@wUXkmWk@ƒ@wX@lU„@šyVImaXwVƒƒ@kŽƒnU@mbk@mlUXƒmU@mV@n@bnW@bUIWJ—ImVUKWbUK@nkKƒaU@W_VUUmWmL@UU@™bUWUL@V@bmVUz@`mUUVVbXL@V™L@lmLUxmVamXkW@xWbU„VbUxkU±@ÅUmmkLUbW@@`kLknVlV@lbXxlVUXVV™ŽU„U@UbWŽkIWVUUUJkI@llbUxVL@V™VƒUU°ULUmWXUV@VULWb@™xm@UaVLVKUa@ƒw@V›bkmVambUUm@@VkK@„@b„xlxX@‚„n¤@Xƒ@@lkLWV@Žn„V„kb@bWJXLWx@nkxmm™bXn@VWVUn@VnJ@bVXl@„™VJXnWbX`lL„UlJVI@Žœ@VXV@Vl@bn@@Æmn@VšxXU@mVIlxšVššnI„l@nVJ‚aXI@mlU@aXkVm°klmnVV_naš°@V@xܦXK„V‚nnUlVXbVK‚LXKV@naV@@VVl@@lXblXšWnLlbVK²nš@@‚VLUnlV@lƒXxô°‚V@UnaUUlKXLVUVVUbVVlUnJVX„@VW@an@lb„@nl@VU@anƒšUVW@kƒaUm@InVVKVU@kUW@Uam@km@kVa@a@™nwšU@WlI@mVI@WXaW_nƒ@™nƒlkkW@U‚¥@kV@Uw@wUƒ@@IXK‚¥VIn@nU@`@Xl@VV„LnašW‚bVaUwnU„@VIšKlV'], + encodeOffsets: [[122119, 28086]] + } + }, { + type: 'Feature', + id: '3504', + properties: { name: '三明市', cp: [117.5317, 26.3013], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lL@Un@VVna‚bnUlœa@U‚x@„VbULUKVbn@šw‚@XaVK@UVUXWVnVKV¯„VšU@UUKVwka@klJVIVVXUlJXVaV@VƒšUUVWkUWwkaU@UklmlK@_X@ValKnnÆV²@lVVwUaVƒXa@wlXnW‚bnUVwnK@kšK@UWKUaVUnV@_VynU@a@UVKVXšaV@@VnKnXVV‚UX`V@„blL@mVLXaVLnU˜JXIVJ@amX@a@mnUV@„nVWnkl@naV@„ml„@@KmKUam@UU@ƒ@UlKU™Vk™U™K@aVaUwV™U¥UIkJ@wmI@‚mbkwkVW@UXƒKULU`™IVKUa@LƒkkVmUU@WlULUWÅU@I@ƒWW™nU@@w@a@ƒUam_XyVIVWkkƒ@mwVKXUV@nw˜VXkWƒÅ™U@ƒaƒU¯KUnƒK@ƒ¯šmUƒLXŽVLnWVbVbUVm@Ub¯¼W@amƒ`kb™amLUUUƒ™aUXV`@x@XmJ@n@L@xkJUU@kU@mWm@kUUwUUVWl@VUkIƒy@kkaVUUm™IWVXbWxU@k„mVkK@nWVX¦WxU@@bkx@VU@WŽk@™kUbmJUUmkUW@_kKWKƒ@knV¤kIUKWLUbV‚@Wbk@@VWL@VkI@lUXVxUVU@@mWIƒV@a¯nUaƒaUV@„ƒJ™b@bÞ°VbUš@X™aUVmL@‚VXblŽnV„°˜n@Vnx„@VUUUlK@InJVb@„Vlnn@V™L@VWJU„x@XlJUVVVl@LUUUJ@Lƒ„@lUL°¦k˜V„VnV@„xV„„l@blLnlšLVaXll@šnVUn@‚xn@nml°‚X@lb'], + encodeOffsets: [[119858, 27754]] + } + }, { + type: 'Feature', + id: '3508', + properties: { name: '龙岩市', cp: [116.8066, 25.2026], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ša„I@ƒVU„bVb°m@b„UXJ@nV@VUUwVW@klJ@UXK@Ul@Xa‚@UVaXKVLlJU£lm„@XLlL@`VXnlVVnIVašll@XV@@Ulw@aV@XwW¥XU@mlLnUlƒV@XwWaXUšJVnUVlb@l„zlJUVk@UXVVVxlVn@nXV@@lVVlI@w@K@mnI@W@wU_VWšbV„VVnKšbla„_n‚bX@°»Van@VUUaUamXUKW„K@a@Ukƒ@wWkXƒWW@wUU™Kw@_lyƒwUkU@@Uƒ@kamVmƒXašUVUka@Wk@»UUUVƒKkbWU™VUbk@mkƒxkƒƒKnIVUmW@kUKmXUmVaU@kU@m@KUWVkIWJ@ŽU@UI@wUUUa@KW»nU@mVkUmm@XwWU@ƒUUmL@ƒw@mnƒVUU@aWak@@amxU@UxULWVXbVLU`mbUImVU„ƒbn‚V@@bVn@bnVWxLmyUbƒIUKƒ@aƒVm™akbV‚UXW„UlKWbkV@„WLUlk@@nšbƒb@lkKmU@ƒUIWJkw¯UUVVxm@@XkbWx—›XKƒlUzWJkUUL@bmKkVƒ@@VUIUlWV@X„K@VkbWx°xUb@LUbk@@VWb@LXJ@VWXU@@bUVV„VVn@VVlLn„@l„@‚xk¦Vx@bVJXbƒn@JlnXxV@@„nJ@X@V@lmx„bUn@xVL@VVKlL@l„„nLVaVL@xkl@LƒxVl°š„X„WVX„Vl„œJWnxlJ'], + encodeOffsets: [[119194, 26657]] + } + }, { + type: 'Feature', + id: '3509', + properties: { name: '宁德市', cp: [119.6521, 26.9824], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@LVKVaVaUkVU²J@LVU„@@W‚VJUbVVnLVb„L@VUJ@bVbkL@Žl@Vn„y„XmlU@™xV¦„L@Ž„lmz@lnL@bVVšbVb@l„nšKVk„Vl¤@zXV@šl@XJVLVKnXVK‚VnU@wUm@šKUƒ@UlVlw@U@U@ƒUaUKlU@kXKlmXIWKXaVIVUVK@KU@@k„JVUnLVJUL@V‚IVa@VnLšKUnl`Vb„V„V@š‚Vbn@Vzn@lKnVlI„VVKUalkXJl@XXVWVLVUUmVU@Unm„£lK@Uk@WUXK@U@WVwVkšƒĠkĢǰaUÅUwmaţƒɱUÇa™w„±V¹XalKôx„@„UVaÜʓͿVóbÅLƒJm„¯Vk¦ƒŽk@mamXkKUƒUL›akbk@mV@LkJWb@Vk„mXk@UVmaUV@amLUKUamI@KUaU@WbU@UUUƒUIWJUkm@šƒw™Kk„VJm@kxǁVƒUK@mUVUkmlkkVm@amwƒLVWU@UbVLkšUbƒ@VƒmK@XaVWU_VJnwV@@kUmWakxƒ@kwWakIWxnbUJ™zƒ@kVW@@x@„XllnVW@xn¦ULWKXxmL@„VšU¤VL„ÞVVUšÈxV„mxXVlLlV„anV@bšbV„„LlÆnnlW@LXlWnXV'], + encodeOffsets: [[121816, 27816]] + } + }, { + type: 'Feature', + id: '3501', + properties: { name: '福州市', cp: [119.4543, 25.9222], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lxna@nJ@xlIVJV¦UšVxUb@bšLšVUlVškL@V@„VVn@Vb‚Ln‚@LU„lJXblx„@lwXbVn@lU@mxUIV`UXWb@‚nLU„„@Val™UKVaV@UX„Knx‚bn@lUkllnUVnV‚@VLU„È‚lwn@UIlƒšL„x‚™n@VlXIVJV„VVV@XaV@Vb@LnJVbVLnK@bVUnbVUl@nWlƒ@UXalI@KnUl@laœbVKV„lLnWnbl@„l¥°Unƒ„IÆKôa΀U„a@UUwÇWǓIUWUÅVkƨm@ƒ@£@KmLU¤ULˣJ™kUƒVǟUUķ@ĉVƒKUk@Ѱwôǚç@īšé@Åţ¥mīÛkm¼Å@ƒVķVó°ō¦U°ƒn@bVJXVVL@bUŽƒakLmx@xmxXzW`XbWnXV@bWLÛ@™aƒ@ƒaXbWVkaÝwU@mlWKkLWWkLUKULW@kVmVUU݁UamV—¤›n@xUVUzkJV¦lJU„'], + encodeOffsets: [[121253, 26511]] + } + }, { + type: 'Feature', + id: '3506', + properties: { name: '漳州市', cp: [117.5757, 24.3732], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@bl@Xb@bVVUŽm„@n„x‚@nKVV@„XVWxn@VnUl@nmVX¼@LVbVV@xVJV@@XIlJXU‚V@Ln‚@lVV@UbVnnWVL@lnXUVmJ„Ll„„wnll@VašUXVla„LVUVV@¼Xl@lbUV™VWbn„nUlb„@@VV@„aVUšmlUašUny@kU@Wkk@WaUVk@@ammk@@U@UlU@aUa@wl@šmXLllnL‚U@anVnU@L@VVV@KlXnWVnVanUšw@w@wm›nÅ@wƒaUam@Uk„mUl@@a„a@U@¥škôK‚wȯ°w@ŻkwǕaK›ÑÛk@ĕōřċ£ĵƒUKW»kÅŻLU@Ulġw@¤Vz™VUbkKUbmLmlULU¼UxmbXl@bWVƒb@bUnV‚UšVbULU@@VkbVL@`U@WX@ŽXV@b°„@b¯š@¤@Xm@@b@`U„VVUL'], + encodeOffsets: [[119712, 24953]] + } + }, { + type: 'Feature', + id: '3505', + properties: { name: '泉州市', cp: [118.3228, 25.1147], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Vl„xkz@`‚xšLVV@xXXW„Xl@xl„@V@bnV°™@„„LVm°L„V„bV@ƚX„Wl—UmxU@WVULnx„@llUXUJWzn`Vb@„@b@xV@šmXX@„@JÆVVXVKXkV@nVlU„l@KVbULšJV_VK„LVWX@lUVƒkIU¥lIVyVU@wœm˜£nUVWU@aƒm@UmWw@UX@@am™VUn@@aUUlUVanaWUXWmUnkšK@VšUlVVUUwš@XLWWX™ma@knm‚bVb„VXbVL‚@XJlInlšL„w˜mXóšw@çV»ÇçŋaķƧóƅóKġ°nÅUķƑUÇW@—¯xǰöÆlV„n@llšaš@„Lšbƒ`™@™„VšXVƒVx@V@bULVJUk‚Ç@ƒ¼ƒXUKk@mmULkaWbk@ƒx@UkL@a@K@U@UmKmbU@kV@UmVUbUmmXkW@LUU@U@KmVmU@bVmKkkWK™nk@@xVb@bkV@V@Vl@nn@bl@VUXbl@XlV@@lmz™VVbkŽ™nUVƒb'], + encodeOffsets: [[120398, 25797]] + } + }, { + type: 'Feature', + id: '3503', + properties: { name: '莆田市', cp: [119.0918, 25.3455], childNum: 2 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VbނVVnUlUX@VKVLlKXXlKXL‚‚nkV@ÞxlbXUWa„b„@šbÜ@XK@aWUXmWaX_Wynw@wnwlK„bV@aUKWUUI@a„mV¯Ŏ¥ô¯ĸU„UÆ@n»¯aƿé@ţ¯nĉĬÝK™óó@™ÑU¼@è™xWô—nƒx™KmkkJWI@UKWaƒUUaamn@lnbWšXXWK™@VxUVkU™V@U™LmlnVWXXVmbUbkVVV@bm@UVnš@bW@@VXx‚n@V„n@bV‚UX'], + encodeOffsets: [[121388, 26264]] + } + }, { + type: 'Feature', + id: '3502', + properties: { name: '厦门市', cp: [118.1689, 24.6478], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@VlUV@nanL@V@V@L@blK@V„wl@XalbVKnnl@VL„W„»È@lVUIVK@a@UUw„WUU™šƒš@„_™aƒK™@™bkkm@UƒkõŁxóL™l@¦@Vƒb@bk@VŽƒnVln@Vb„b@xmÆnœ@x@x™x'], + encodeOffsets: [[120747, 25465]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/gan_su_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '6209', + properties: { name: '酒泉市', cp: [96.2622, 40.4517], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÇnÅaĉ@ƒU¯¥›UŹ‚ƒ£™WUýUU±JkkUw‚yÞIČxĊĕĊ¯š¥ÆUkţ™UÅÓ±¼™IUx¯UƒÒƑ‚ݐŰƒKÝnğ°ÅU@Žƒ@Vn@þš¼¯šWnŎ°XLWlnVnbWnƒVXxmbƒa—bóUƒlǕUUa™IUmlU™ƒš¥™kƒ¥ĉwkkƒÝɛa@¯™™U¯°mVƒkVnKlƒōÑÇÑU@kl™UġŽkUŻnUW™@š¯ƒk»šmWV£UKnUƒmUw‚w@ƒUIVaX™šwm»Èmmwn¯ċ™¯LĉŽUƒJUalka±Va@U‚k@ƒÛф¯WmnUaɝ¤Ûmƒn¯m±x@wóxÛLġÒUx¯VƒÈ™JUbóz݃ÇKĉ¯ōlÝUŎWl¯nťbÝ@¯ǩLġmV@ƯĢkÆm™ĊkVťLɃmÝXó°@„ĢbVŽóVݦɱ@Ƨaġ„UV„ĠÇÈV¼UVţwmbJÇwˋa™XmǯKkkmŽƒbXšm¼V¼Ǭڲ¤ôŰÆƴô̐ŤǪnɆӨ¼ɆLÆłUĊšxŎƞȘǔˎǬǪnƨŮǬö°»šġ„„ÞÜÆĸÒĊ„ǀbƾèôÈ@¼¯þŤĸƧ°Vb@lÈĊ‚šʠń̐„ȘKǀŽֲॗţÿǕý@ʊǓƨóÆÑǖŃôw@΋ʈƆÅÈVVĊV„óĊÅ@ÞƒĬV@Þīš@°Ž„V@ĸ̃°XτƜĠ@ÈaÜ¥Őƅ‚™nğóĕVġUůƿŋ—ĕƒa±V—UťÇğÑ'], + encodeOffsets: [[101892, 40821]] + } + }, { + type: 'Feature', + id: '6207', + properties: { name: '张掖市', cp: [99.7998, 38.7433], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÈÒŎÒk„mLUŽlŽU„¯nV°šš@°ɜb„ÞĠaÈ»ĸl‚š„LVUÈ@Ċ@ýUm„@@ÆVĠ¯Þm„LƯޏƒ„ѰVVwšJ²»ÆÔšVlŤÅV™¦ĉ°ĉĖċwÝJzVxll²IVVVþšX„¤źœV°¦„VĊ@ÆbÈmǔLĸĠ¯Ģaô¯ĸmÆÛUƒlÇĸk°XyĊUǔV„ǩnmV»ƒa@ýnK°n@l¥@»ż„Ċ¤m皃@£ČU@mƒmVkÞUƐ±²¹°‚ĠwÅƑŃU¯™›V¯aÈŁšƒÇ»™ġn_°xŎKlxœklx„@Þw‚„„@Æm²b‚DzLlkšWXať¯ĊaœÑšK±w@wƒUÅçV±Uk™@@„¯š¯xƒU™±±UU°ōxVxÅÔō°ó¯UÝ¦óbÝþƒ@ĉÈóUV‚Ux„„@VŽUVÝwÅÈǎóVkk¯JǐkmmL@„™KÇx@bkš™@U°ķ²ó`ƒš™šmn¯°ƒUwlÅkUƒ`™¦ɛô™Žķz@ŽÅnǰU¼¯KmVk²ƒJƒ¼ƏÞķôš¤ULƒ@mnğ`™šÇnUxÇ@Ûÿ™U@ƒƒkŻŽ@x@móJkŃ¥VŹĉóÒĉlċ°ķ„Uƽ܃@›x'], + encodeOffsets: [[99720, 40090]] + } + }, { + type: 'Feature', + id: '6230', + properties: { name: '甘南藏族自治州', cp: [102.9199, 34.6893], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ލš™nKlnšwX¥WÝXk˜xÞUnƒ°aĊVnUUKlÞĶWXnĠ¥ô»„™@nmVL@¤°™Vz„JšanU@aÆwna@k›ƒU¯šyX_›aĉb™ƒ„wƒéXkWwÅaš¯V¥mƒ¯UƒƒI@ƒš@„mšb°aÈçšUš¥@»‚knwɜƇ°I°ÑÈmVU™¯Xa@w‚W@wšV¯Č¥l¯Uwnm@k˜aUaóKkk@™Ça™b@ށÒWa¯IÇxÛam¼™VUƒxÒl‚@zÝÒ¯bÝaĉVĉwDށW›zJ™mJn²mܯUƒ¯ĉ@ġ¤Åb@²nšmlƒ@@Ž„„U„ƒLVxšV™„U¼Ålma™b@ƒ°™l@WIUƒ¯@mƒ™@™™ó„™„@U›zţyƒXÇU™ÇVUUVLkbWakVWmUbkkƒKUÆ»nƒ°Knk@aƒUVmšnk»l¯Ģ›lw@_kKVU@ƒnaƒ@lUk@¯¥mV@kmbW™b¯Åõa@mkU@kƒÇŽkU@›`@™óó—bl¼Uxƒn„¼šlVȄx@blVkVVnƒ`XÈġÈ@ǃK£ÝJmUUnUĖmlU„mKUn™VÅaUw›Uĉ`¯n¯wW¼nxVŽ™š@bĉnƒ‚kIċŘkXUŽ±Ò™xšÈ@ŽX°`l„œV˜IȯĊV„ƒšVVan@VašUVażVmšblkÈW„ƒWIXa„alL@wVb„„V„¦lL@lĠ™n҄U‚nk‚šL@ÆÞkšÞšK‚bñþW¦Û„ċVƒ„ULUºkÈlŎUxÆxÞUUxšÒ‚x„@XbšL@lÆ@„ÒlXVln@„bm¼ƒJ@„Ån„šƒx@bnšĠm„xVXmbÈè@ŽĊ£ČW˜w'], + encodeOffsets: [[105210, 36349]] + } + }, { + type: 'Feature', + id: '6206', + properties: { name: '武威市', cp: [103.0188, 38.1061], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@±¯¥@klwU»ƒƒÞÝmwKm¯™™ç@™kVÇUL¯lVUKġ„ġm@a@U„@X£°l°LŎÇ@aōVÝw™ÔƒKUŽÅš„WJ¯lm@ÛVWa™@klĉUmaƒLUanaƒ™ƒk¯J„™™±KkXóÜÅxƒ²Ç‚@„„nUÒĊb°@™ÆkL™Ž™XÇÆ@xÝn—xWxţ„¯¤ƒI@Æn„ƒVV„VlU²Æè„V@x²x™L›ÒĉbŦ°Wb™Xklބš@l¤šXĊ`„wl@ĢÈŎm@bšnV‚Ubƒ„@șÆÛLƒèǚUÒŦlĸ™`°ĮʟÆǓbĉôϚĊƚĢnŤé΀ÑĸĀĊ¦„@@l°lœ¦Ȯ¦ɆÞĊKŤ™ĵĸů„»mفyġ™ķŭ@Çɱȭ¯mƧUĊķnŁŻ»UaU™˜ƛɞÝƨů'], + encodeOffsets: [[106336, 38543]] + } + }, { + type: 'Feature', + id: '6212', + properties: { name: '陇南市', cp: [105.304, 33.5632], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@šÈÞ@l`UmVƒ¼œŽ‚@nnÆwVlnVVa„LVƒÈ_‚ÿރ@n„a„xÆ@„lš_š@VxnK@llLnxmÈŎJnbUxšI°Žl@n¦‚lÈIlmX¥„k°@šk‚J„k²é˜@klaUaVaU@@ÝnIWnmnx‚k„ºÞ„„aV™°„V@nw‚KšxôbÞ£šVšU„bšþšLn»mƒVw„IšJ°Ž@„nb@°°I„ġUkÇKVƒ™™@ů»lƒ„Lnmƒ£@anK@Ñ܍n@»mL@£™yk„UUmbUÞÝ@kyÇbó»™XUxƒWVzb±mÝbXaƒwUamL¯»@wUKVwm¯ĵJ°ÅUWVk„KVk°wÈVšVуlUšƒ¥škmVamknƒUw¯¯ƒbċ¥ÅKƒk™Kk„™VċVk£kKVw‚Ñ„a@kóyÛ¯ÇVk™ów›š—Xō¥Ç¼ów™Ž¯U±‚k„ƒ@x›IĉÒÅVmÈnšÜ@n°„bUbÝV‚ŽUnnJ¯Į@‚m¦nV܃@„„L°JXb‚Ñ@šaÈb@šllôLVb—b@lmnVxk°ċ¦U°™Ž@xX@xWbš°UVÇn¯Ò¯Jɛƈmxl@¼'], + encodeOffsets: [[106527, 34943]] + } + }, { + type: 'Feature', + id: '6210', + properties: { name: '庆阳市', cp: [107.5342, 36.2], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@kw‚ĉ—»VamƒƒV¯wƒIóVkl¯™Km™Vō¯ÝWkL@bÝKō¦@Ž™„@š™Lx›@b@l™a@km@@l¯nm@UaÅ@ƒ„óWUXm¥™nƒw`@UUxķôǰğ¦@„VJš_n‚‚IVŽnalxkX„JWn¯šnVƒLšxl¤nnVbklVX@xnxmV@bUK@nm@@xƒV—°±aÅnƒŽkUWnUaƒx@m™n@ƒ¯LƒššmUĀlU@lV@blLUblxklkIÇx¯°‚UXbšaVŽUnšV@°‚LUlnbšX@`°nVmbnÆmV‚kLmK™¦UŽ@X„y@kl@U„°K@¼XbW„ƒš@b„WnLVa„VšƒVz@xlVČ¥lbUxލlV„U@nÆWôn²™VJlU„Ƨ„LnmÜLXa˜n@mœw@wlUlV²mšblwšVȃlLލ„±@lVnUlxnkma@mškšJ@kXV‚U@mn@š¼VXUƒVƒlLnmVbôaVnWV»ÈUl°È¯ÆIn›ÆU@kk»mKkÆġk¯@»mƒk—¯@óÇlÇ@—Vykkl™Uml¯Þ™@w'], + encodeOffsets: [[111229, 36383]] + } + }, { + type: 'Feature', + id: '6204', + properties: { name: '白银市', cp: [104.8645, 36.5076], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VKUȚl@šè°šnŽ‚LnxÝބ„V¼kx@l‚¦²°ĊóĠ„™Ċ»š@ÈxšaĊxlwÈVŤa@¯²aÇ£ƒJk£lƒnUÞ@°šô™@y„wl»lIX¥Ǫnw@ÑÞWla„ÅlL@ƒUwĉakƒl@ƒš¯mwna°J„V¯nUVÓÞÑm£²óWaUƒÇ@óÝUçV»ÈkkW@¯‚xV@XlK@wX@Vmm_@wÈݙKU¯ÇwVwÅK¯VƒkƒJ™™™XkWVaƒImޝUk„ÇlVšœĀV°mxóšk„@¼ó„WxĉÜU@Ub‚zÛJÇk@‚ÆnVlԙ@kŽ„x™ô@ĬWL¯ƒƒK@aÛImm™@ƒIUaƒ@™™UŽÇêU¤VÒÇx¯ÒV„šš™lk@Wbĉ¦UbkWV_‚y¯Lƒaó„kŽ@b@nmbkx„°'], + encodeOffsets: [[106077, 37885]] + } + }, { + type: 'Feature', + id: '6211', + properties: { name: '定西市', cp: [104.5569, 35.0848], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„a‚V²wVJV_@„LlanÅllŦçÜӚ_šlnƒWaôk„xUš„bmV@È°lèšnk°l¦„`@nnL‚@ÈlÜIyVaV@ĊÛXwôƒ@»lƒô™nwU¯›ÿU™Èklƒ°Vn„JUblXšWšš„I„l°U„ƒVƒš—@aVVVmnL@„lƒ„UUw‚mkƒš£„bV¥VUVwۂƒlaÇÝރmk£ƒLUy¯L@WlkKW_XaWƒ—mƒ„ġU@a™k™‚ƒakXkmVwmŹVƒU™b™WƒónmwnWW£„KÈnV¥ƒ¥„ƒÆ_k™lW„bU¯„V°aôbnaVwmaōInÇmwkK@kmLUw™@™`ƒkÅ@ƒwƒb@m݄ĀÇ`U„ƒKUbmUUkÅxmm@›„»nUVk_Ý@™Ç™¦™VÇè¯b™aƒn™@@„„JV„°Žn„U¦™°ÆbXxWl„êƒxš„ĊaœbW`™zV°œ„@lmbÅx@bmV™bƒI™`™¦@ÒUVUI@ƃL@bš¼@ššŽ@„šlmxnL„°ULƒŽƒÞğޛ°kLUŽƒL™°™xVŽ„n„KVƒl@šzX@'], + encodeOffsets: [[106122, 36794]] + } + }, { + type: 'Feature', + id: '6205', + properties: { name: '天水市', cp: [105.6445, 34.6289], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@UyȍVƒVUnn@ƒVU„`UblzšJnk‚@Vb„KU„°l„wš„„W°„nkVŽ‚UÈlš£°V@n¥šV„kl™kU˜±U„ƒn™ƒlw¯UkwmKUlmkUmnkym@ō@U„mWÈU°l°anlJškUKlU„¯Èm@kmWV»kkÝLUWUx±b™@¯ma@ƒ¯™IƒJUxn„m¼™K™ýƒa™V™Uݤóa™wLmxU@¯ƒUšƒb݃ƒ¹lmwmnXŽmJ@ÞV@UbVbkblŽ—@±êƒlI™l¯@ƒlW¦knÇJkm¥k@¯™Jmbóa¯bƒUV°ƒakXlšÅ`ƒ„„¦U¦ÇmƒLX¤mXnxm‚„ôšXša„VźUnŽUxlnlW„bššl@bĢV„ƒ˜nX„WbX`lLXk@ްKVz„Kl¤„nÞ݂Èkb„‚܁'], + encodeOffsets: [[108180, 35984]] + } + }, { + type: 'Feature', + id: '6201', + properties: { name: '兰州市', cp: [103.5901, 36.3043], childNum: 5 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@lW²LššƒŽ°I„l„šmbVb„KnbĊVlkš@XbÜU@Žkn°‚XIƒÆ™V„LšÓÞxŎUlôƒ„b°KzU`lXVaĊ¥Xal@šk™™Uƒ°ÑÈwUтV£ÈéVšš„@Vb„Jš@nnÜJ@b„L°„XK@īšóƒwlš@kÓmUÅmK@mƒ_k¥l¯™mkçǯ@nUƒaV™ƒwólXbm„™k™`ÛÔťèkkmÆkbƒK@U`UI±xUƒbWlX„mbVbÅÒólkƒƒIWJkšƒ@ƒz—Kݼ™@™xUx󎃄¯LWb@ŽÅ҄„±¦U`nbťĀUšVb„LšŽ„U'], ['@@ƒ¯lwna@mōȯK¯kW¤ƒ@@V@bĢñVLU‚°k']], + encodeOffsets: [[[105188, 37649]], [[106077, 37885]]] + } + }, { + type: 'Feature', + id: '6208', + properties: { name: '平凉市', cp: [107.0728, 35.321], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÆLUxÈxV°šLÇÞ@xn`Ü@X@nĊŽÆwnJmwUx‚aUkšw@V@w„aVmlLXÝl@X‚VĢmV°@nl@UUUWK@w„ÿVI²Òlmš@nÝĊýVV@nšJ°„„šUłm@kV¼nK›ĢȤôK„blnKllVk²aĠ¥È¯ĸóVw@V‚_„xšmn¦VWôX„ƒÆ@Vbn@°m@kn@@lšb@k‚aœ@‚wšK@™šƒ@UlKVaƒWX™W²¹lӄw@_°›n@@_lKōķW™@ŽmLUWƒn™»Û@›l_Ç`ƒÛmm°ÅbWb@š—VWbƒUUKDŽÅaġlmkUġlƒ»—Lƒl™Um¦@ޝU™¤ÇkVUml¯ƒƒX™ƒƒx¯kVƒƒLUa@ml™IkyVaƒ_UV@„mmUVU„ÇŽVzUxUVU¦ƒa™¤l„nVxƒVk„@ƒmKUnUU@b™˜U„ƒ„', '@@@Žż@™mlkƒġk'], + encodeOffsets: [[107877, 36338], [108439, 36265]] + } + }, { + type: 'Feature', + id: '6229', + properties: { name: '临夏回族自治州', cp: [103.2715, 35.5737], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@š@ż»˜L„y„@l™XI„Jl„ôkÆÑUanaWƒXkW@™yk@U„ƒLƒmUšwš¯„KVlKœ¯Ġ݄݄VKƒ¯mKnw™k@ƒ™@™™»@a„K@ÅVJVU@њ¥š_Uy¯š@£UKmn@‚ƒšó¼ğ¦WmĵXݎkŽVLmVĉU¯bm„ÝV—wWlXÞW¦™xkmmL™šÝŽœ„±U@Vގ™š@„ÅÈW°X„ܼƨyUĮnŽWŽnXÝxUx°lVXJlôV'], + encodeOffsets: [[105548, 37075]] + } + }, { + type: 'Feature', + id: '6203', + properties: { name: '金昌市', cp: [102.074, 38.5126], childNum: 2 }, + geometry: { + type: 'Polygon', + coordinates: ['@@šĢȼ™„Çł°bœU°šV‚ƒń‚ÆǖŰnšÆ„ōĬǔaʠůĭš_kķÆ¥VÑș„çÜKšÅ@DŽƒVaU™m@aōnġÇk@ƒxĉ_™Wk£™@݃±KÈ±aÅnƒ@ƒÝxƒ@kw›lkwōL¯wm`'], + encodeOffsets: [[103849, 38970]] + } + }, { + type: 'Feature', + id: '6202', + properties: { name: '嘉峪关市', cp: [98.1738, 39.8035], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@llĊx„¦šl™¦š„kVVnšJVbǖV„kôV˜a„bnaWw„UXmmamUXkWKō¯Xm°™™»ĉÇ@UVƒK™ķkǼğb'], + encodeOffsets: [[100182, 40664]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/guang_dong_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '4418', + properties: { name: '清远市', cp: [112.9175, 24.3292], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lǯkÿƒaV¯™VaÈU„¥ÆÇ„Ilxšmnb‚Uœxl™„Uôl°kš„„Wl„š@ô™VwUanUl@„xVkšaX¥‚kU»„aš¯±@kka@ƒUwmUkwƒJk™˜„±k@ƒ™™L@ÝWUwV݃—xÇU¯ŽÇX@m™Åƒ@@yĉ£VmUwȗ»ÇšUn„lUnWU¯`Ukƒ@@„™x„Ž@bÇxX¼ƒVVš¯LšĀk‚ÝLƒ„¯@VŽƒĀ¯lnĊW¦kVÇôkUDŽUK@ţ™U@a™™ó܃UU»ƒ@™¦k@Vx„KVb„n‚š@„Æ™„l„@xšƒbWšnlU„lxÈlV„ȰƄ@¼™„@x„šWxœŎ‚V„šK°„š¥ššnƒÆkŎ@ÈÑm™„K@¥šk@™ô@„nôV'], + encodeOffsets: [[115707, 25527]] + } + }, { + type: 'Feature', + id: '4402', + properties: { name: '韶关市', cp: [113.7964, 24.7028], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@W™Xk±Ñ@ƒUw™mUwĉwlmn@Æwn£mkIš¥ÇÅ@¥šaƒón£nWWwš£V`Þ@šnVml@xô¼„IV¥ƒkUmkamUkVWwÛ»móƒ£UVÅKmn@x™@kbmm¯a™Xka›VĉaUb݃ƒ²—‚lš„IlxnVVx@„lb@l²™°ƒbV¼lW¦™bUlƒwk@mVVbUxóš™@kƒƒX™ƒ¯lókƒVkš›wVma™nkwƒJÅȃ¦ÇVUbšŽU°„bl°ŽkÈ@x™¦ÆÜ™°@„°„¦óa™VUôlUlbXl@nÜV„„nKlŽnIVÞ°Wš„°U@bnm@¥šIVƒ²Ulƒ°VnalzXyl_Vyƒ¦lƒœLlxš„@ŽÞbšKm„knVWanwƒÑVwČº˜@n_ÞV„aVŽÜIœl@„˜KȚ„VJ@aš£È@˜™@km™„aV¯W@_ƒa¯KmbkÇkLmwƒ@Å¥'], + encodeOffsets: [[117147, 25549]] + } + }, { + type: 'Feature', + id: '4408', + properties: { name: '湛江市', cp: [110.3577, 20.9894], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@ƒkXƒ™@a„UUċlk„Jƒk„™@wVJXUWk°W@nKnwlUlš²ƒ„blU@‚lI„l@„XbW„šxnm@lW@w„wU‚JX¯VU°`ŎóˋkÝÝkÅ@ÇmğÈřmw™aĵV›xUہ»°™ĠǷnýmóX¥ɅĵҏÇ@°²ĊU˱ĮU¤Ç°™Ā¯ɐnżUĊĊĬV@脎@ԃÒU¼l¤nƒĠb„êVĠ°Èy„zVaV‚nUÆL„ašbVl„wÆ@'], + encodeOffsets: [[113040, 22416]] + } + }, { + type: 'Feature', + id: '4414', + properties: { name: '梅州市', cp: [116.1255, 24.1534], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„‚nԚlW¼x‚¦@lœVl™lLkè„a@zš¤ƒĖ„¼UxlnUKUbÝlU¼lb@„Vx„V„klJÈwV¯š@ĠlÛ˚nƒbkšÆźÞƒUÈôklmšL„¥‚LœW˜„„™nKUkVa°V„x@IVV@x°bUk„a™a@mV@„@y„w‚L„ÑUwVUšV„‚„U‚bÞVVann‚@XwÇÿš¯²aVamkXaÆ»@»nw@¥›UXaƒkbWa¯KUw@¥m@kwmLU»UU™J@kmU@UUWUƒ@ƒyƒanwmçÛl¯ƒŽ¯UƒmKUmƒwVkmÝXbW@XWÝbƒk¯@±‚w@»U@W¯Å@ƒÇ¥UƒU@ƒƒ™IU™ƒakJƒĀ„ꃰšþƒXkamŽ@Žƒ_J°m‚@X'], + encodeOffsets: [[118125, 24419]] + } + }, { + type: 'Feature', + id: '4416', + properties: { name: '河源市', cp: [114.917, 23.9722], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°VlmX¹laĢÒlm„@„„šV𣂂@¦Ģklynn¼lW°z„W„„°VbÈV@lÆbnn‚JškX„šVÆašÅ„W@™ƒUUw@ƒkaV»ÞkVaVLkmVwƒ»„ĕ™£@yƒblçkKkš›U@k¥‚wX»™kmӃ@Wn¯‚I„`@nlb„W™ý„¯ƒé„ÿlI@™XUmWUwƒ@@UJU„Ç„mKUV@x™„ţk¯¯LWƒƒnUxK@ű»Vwa¯š@¤WX@ŽÛ¦@¤ÇIȼWxXŽƒ@Wx—w›ŽUnVbÅèmVa±²UWl@Žk„lȄ¤nôܼXxlUnVlbVn„lU¦ƒJó»@wnkmU™‚Ý@U_™¤XxmXm¤„ô™b@¦Èƙ¦lJn'], + encodeOffsets: [[117057, 25167]] + } + }, { + type: 'Feature', + id: '4412', + properties: { name: '肇庆市', cp: [112.1265, 23.5822], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@l@š¥„@V¼„Vôۚš@bšV@ŤVLȃlVÈólUX¥mĉ°k„ÿU°@„ƒÞKl™ÿ°KU™„UW»Èw@aƒšw@ƒ„@nm@w›£kÓVUVn„Kš™k¥™£Vamƒ@nkKkbÆǫma—kmLU¥™UmƒÛwmVU™mUƒJ—ÇaUxÇIn`mb@Þ¯b@„nJ@nl„U‚V„lVU„L›W¯—Û`Ç_¯`mš¯I™bĉWċzx±J™x𐝯Uƒƒ_k@™šƒJ@Umb„šXôlLš˜n¦@¼ĊxlUXŽ˜xUbL‚Ġ„UnVĊwlšUš„b@lW„X„‚m²˜@ÞWxXš‚Unb'], + encodeOffsets: [[114627, 24818]] + } + }, { + type: 'Feature', + id: '4413', + properties: { name: '惠州市', cp: [114.6204, 23.1647], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lbšW°bnnlaš@@wnmÆLVUkÇlƒ@Xk‚V²±‚bnUÆçUaVmœ˜xXw„@WXwÇ»ÈJ@£Ü¥@XW@£°™‚bUx²¼@ƂLVw„mX„°K°Ťlšƒ@wVUnLȃVƒVIky±wkƒKU¯ƒÅkƒ™XġÑۃlwUwlm@m„nKWašÅm›¯óÇmğb¯alĉUwķbmb@lÞÒVn—šmĀŹ@VŽƒbVŽUnmakLm`@xĉkklVÔVJVn—lV„UnmJmaLUbl‚™zmŽkL™a™‚ō@@zš‚V¦UŽV²kJ„nÜU@˜VXUށL@„lJƒL@bݤUnVŽ—b@xVnlK²„Vx°V„xlI„lkVl²k¤@n'], + encodeOffsets: [[116776, 24492]] + } + }, { + type: 'Feature', + id: '4409', + properties: { name: '茂名市', cp: [111.0059, 22.0221], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@‚LnÇlk„KnkÆL„ƒUm™ÈxlUœJló°n@ššanŽš„„a@ƒ˜@X_@mÝóóU@a™aU¯mL¯ƒƒkV¯™ÇVwkw@V±Ŏ£@™™@šalw±Vk@m„Åm¯™ÿŃƧIÇ`ōô¯_UVW°IV‚ƒx@xkX@Žmn™wXƒWa@ƒƒkkJ@kVƒa±„k™kVmxmL@‚¯XXlWVUI@xƒš„lƒIklVȃV@b„šlW@„@nUxVblVxkôlx™n„‚y„šnIƻư„aXwlK„bVnƒŽXb‚L„¤„k‚L—èƒVV¼ƒŽ²IlĠVX„ynz°KVx°@VlœLlblKœš'], + encodeOffsets: [[113761, 23237]] + } + }, { + type: 'Feature', + id: '4407', + properties: { name: '江门市', cp: [112.6318, 22.1484], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lUXx°JWnnƚXVš„W„X@„šºVLV¯nU‚Vnb™ô„x‚aXmW™XIšŽUb°xlK„l¯œK˜xXÞ°ŽšXÈ¥Ü@„ĉޏU™‚çš»nóƒVma—x‚¯UÅU¥Ý¯@ƒƒç@ș@çĉÅUmU籃ĉKÝxÝ_ÅJƒk¯»ó¯nmèkǀšŽWxœ¼mnUÜġ°@¦@ƒxƒLkŽÇaVnUxV„™šVlnIlbnÆÆKX¦'], + encodeOffsets: [[114852, 22928]] + } + }, { + type: 'Feature', + id: '4417', + properties: { name: '阳江市', cp: [111.8298, 22.0715], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°„nKV°šb@bôVÞô@n„VlÒôÆUnlnn@lmkmVkƒaÈkÆÆ„™k¥‚ÅÞ»ÆKXkW¥ÅLmÅkamJUkš™UƒVwUmÈbl„K„w‚@@¥Ģ¯VÛnm›»Xw™lƿ™@kbW™—aʵ@óL›l¯ƽ@™ƒƒLn°ƒÆ@nUl‚²kx™b@‚š@šō¤U²@ŽlxUxšÈU°lŽ„'], + encodeOffsets: [[114053, 22782]] + } + }, { + type: 'Feature', + id: '4453', + properties: { name: '云浮市', cp: [111.7859, 22.8516], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@V„Iš™l@„`V„°Å™šw²I‚wČyĊXša°Jn™°_È`Ü_°˜œX‚KVƒkUUƒVkƒ@mmI@ƒ°a@Ýnam_ÈJVwlĉX@„šlUšómaUmVU°UK™¹@ƒƒWƒXU™™WmÅXm¯IWwkVWlÅLݼÆl¦ƒšÅÅÇl„bUllnknm@kmVmóÅkуUW`—@@„ƒb™ƒm™b@™¯mkô›IkVÇwnš„VƒÅKmlƒLklmȁKƒšVĊK°²„`n˜¤n„U„bWl„xVx™LUx@°nXm`VklVxmnnx'], + encodeOffsets: [[114053, 23873]] + } + }, { + type: 'Feature', + id: '4401', + properties: { name: '广州市', cp: [113.5107, 23.2196], childNum: 13 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ș¼VxUnĊ¤@z„@šÆ@nÈW°ÈV˜w„ŽUÞVxÞX@ŽšK„šl@ބVaĊbœU@ml£k±lUƒkkJƒw¯UUw±ƒkLUm@w˜aUVmÞ£@a„KkI@ƒ‚KVUW@—ÛVƒmlIU±VU¥™@yğzƧǃƒšƽĠřšÅnī±m@ƒ²¯lƒ°@nÝÆóUll@XnÝVU¦mVV°—„V¼™Jƒn„b@°mbn„ƒ‚@²¯‚¯wVwƒ@@nmxX¤¯L@ŽVLU„m@@l'], + encodeOffsets: [[115673, 24019]] + } + }, { + type: 'Feature', + id: '4415', + properties: { name: '汕尾市', cp: [115.5762, 23.0438], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@‚„@VxnXWV@š„bVššJ„„V@ÞÅU¥Ċxš£UWU‚wÅUU¥WVUkĊÇnkV`°LV™„wƒƒnU@™„ƒlbĊ¯„Vnalšš@@çkUÝ¥ġaó¯ÅaÅLŻÆUýmy¯ó@ĉÆó„ȯw™ÆXbmLƒ‚@nknVxkx܄ĢҚW„Æl„V°„Ll‚²xlz'], + encodeOffsets: [[118193, 23806]] + } + }, { + type: 'Feature', + id: '4452', + properties: { name: '揭阳市', cp: [116.1255, 23.313], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@V„Ȧ„Æ@X°V@@¼‚x²°@„lÞaWXX@‚aÞWlnUŽ„xVnnL„‚°V„@k‚mĢl@„ak™@mlk°aXƒ±„nwm±™²¯JV²@ƒwW˜—_mƒa„V»ƒU@m¯ĉUф™šJl™„ašbVn„lĸLlƅÛDZwÝ@ĉxó@è™@k™mbƒUĉ°kaƒ„@šmV„„ƒxUš¯KU_mlĉÈVlXUV¦ÆVxVŽVX™¤ĉwV¦ÝÆ'], + encodeOffsets: [[118384, 24036]] + } + }, { + type: 'Feature', + id: '4404', + properties: { name: '珠海市', cp: [113.7305, 22.1155], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„è@„Þ°V¦VƁ°˜wnb„UÆ»nçÆ@nxܤ²llU°VnÈJސ°UôéšķUklƒô£VVˌKÞV°£n¥ƒ£ȗ™Ýy¯¯mÅkw¯bÇĔğ@Ýn¯ĊƒVğōŁŻƒķJ@Ț', '@@X¯kmèVbnJ‚™'], + encodeOffsets: [[115774, 22602], [116325, 22697]] + } + }, { + type: 'Feature', + id: '4406', + properties: { name: '佛山市', cp: [112.8955, 23.1097], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Èb˜Ž„InVVšnUÜxn„šVV¦nK˜lnbÅǬlalL@mn„Ubš¤l¦™šƒLUmUVlԜ¤@xmnVl°_XVVmƒkVmș@kn@VƒUK@°KW£nw@m„@Ux°x°@±„mƒna@¯ƒa„mšIU»˜ƒU¯nUV¥ÞUWmk@Vk¯™Ukn›ÑWݐƒĊÛ@Ǧ™W¯Wݗw›Lk°ƒkL¯wVa™WJXšWnbƒwkVƒ™W@kĊ'], + encodeOffsets: [[115088, 23316]] + } + }, { + type: 'Feature', + id: '4451', + properties: { name: '潮州市', cp: [116.7847, 23.8293], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°ŽÜknèmx„b„z„@V‚VX@VnV@lšIVVV¼nKlxn@@¦Vx°LXbla„ŽWbœV°£¯™W@nW@™‚aUñVœwWš»@¥ŤÅUÝǓÝóV@ńǎkUVmƒIUwÅVWÇX¹›—@W„¯bkl@nlšƒb@‚kġށn@l'], + encodeOffsets: [[119161, 24306]] + } + }, { + type: 'Feature', + id: '4405', + properties: { name: '汕头市', cp: [117.1692, 23.3405], childNum: 2 }, + geometry: { + type: 'Polygon', + coordinates: ['@@‚@U±°Iš±n²mx²ƒ˜@œWºXÈÆUVx„JUnlVȍ@ŃôUǔÞVçn»VyĢÛVm@»kaÝUǼóšÛÈķKċ¥X„¥Wwğk™ƒ¯@ƒwķKƒkUm™aƒbkš™IƒšVÒ°Ċ@n„VU¼ƒ‚„bn˜`X—„x'], + encodeOffsets: [[119251, 24059]] + } + }, { + type: 'Feature', + id: '4403', + properties: { name: '深圳市', cp: [114.5435, 22.5439], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÞLš„@xšbV„šVšK°™X°Kô¥Vw@anU„胐š‚lkĊl@wn_lKnbVmU„aUź@nÿ˜™UmÝѯUƒbk„@ÆkxŻ@™aÇX—wƒJƒƒ¯LķÝUĕ™ó™ĸóêWº@b²nmĬ™Æ'], + encodeOffsets: [[116404, 23265]] + } + }, { + type: 'Feature', + id: '4419', + properties: { name: '东莞市', cp: [113.8953, 22.901], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ŏ@ššblKnšykVa‚KnbnIVmUƒ˜kUmUIUә„ƒçmV@bUxó¦¯LW‚¯š™L™UUƒ™a@w™ƒÝKğŚ™ƾ„„ƨÈĠy'], + encodeOffsets: [[116573, 23670]] + } + }, { + type: 'Feature', + id: '4420', + properties: { name: '中山市', cp: [113.4229, 22.478], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@‚XœÒlmšV°ôÞÅ@m„¯°k„±‚@@aX¹¯VݏÇIUmV¯kk‚±Û£mw@‚Őmèżmô™¼èVš'], + encodeOffsets: [[115887, 23209]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/guang_xi_geo', [], function () { + return { + type: 'FeatureCollection', features: [{ + type: 'Feature', + id: '4510', + properties: { name: '百色市', cp: [106.6003, 23.9227], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lklWXL@VšI‚l@XnJn@VUUalk@mK@kny@UlU@a°™„ƒUU@VmaU@Ua@UWw@ƒn@KmLm@alkšmnI‚m@an@VIUamWÅImwU@@a@K„X@JVL„UVmUaVkUa@m„@@Ulmkk°ƒUaVUlKXbVwVIkaVmUk@KVk@a„aW¯m@w„¥laœX@KmaškVmnUl@nxVKšInU@yVaVIV@na°KlxX@@_lmXšUV`VIV™V@„n@lšbn@@WUkValK@²yl@„„VUV@@K°L@KU@@UVaXIVVV@naVkVa@K@UUK@UUa™LWa—w@m@K@UVVƒ@mVUUVKnL„mVL„K‚bVK@UUIk›mI@mUIVK@IUK@VkLƒ@WU@mU@WmUk@ƒI@VƒJk@WwX_@amK@UUWkIƒ„ƒK@LVb@mVmakL@J@bU@Ux@xƒbmI@`ƒIwm@UbmKUaUWa¯UkJWV@XƒJUU¯LUmV@ma@kkamKwƒLUUmWVkkm@aVUUkVKnVVUmXK@UW@km@Ukkm@@W@U™kUy@I@aUUmbƒ¤U@kUmL@bmJU@Ua@wkLWWkL@Uƒ@VaU@ƒLUakKWbkUWVkKkLVLUV@JVbƒz@Vƒ„@ƒVmUU@kVmK¯@VƒU_™VWakVmIUKUaU@@bml@XU@@V@LmKUV„mVUKƒƒKƒbkaUXƒKUL@x@V@l@„mxU¦„V@ŽlL@V@Ln@@VV@„nlKUaV@nLUbmJnL@VWLkbmV„@@L„W‚„XLlx„VVIVV@x@V²blUVm„LVUœK@kWWXUlV@Xl`„LX„l@@VšŽƒn@VnbVš@lVUVUÈVbš@@`UXU`l@@XUVm@kš@xmVknUJVXUbmKULmbx@VlJ@LVbkKUbVLÇUUVƒUVmU@VaUkUKƒVUwmLkUUVVlƒbka™XmwƒKUšVVU@@V±Uk@VWUUm»XamU™bƒKk™`ƒ„™U@UnWW_kKmbUVUVmnUV@„nJVUlšUbU@UV@n@JmI@VmbnVUXlx¯ŽkKmnVV@L@V™bkV™Umm™@Ub¯LmlUƒL@VWLkmkLmmn£WmnKU_mW™š™bnbmxƒ@U¦UJU„@Xmlk¦@‚mnUUm@@Jn@lV„ÔVJnIVW„I@a„ƒÆK@I@aVK„IlŽÞnnl@nl`nbÆX²l@xV„@llbVn²ŽVVl@nn„V@IlW@Un@@kVa°KšnÈmVaVXUlaVƒÈU„VlwôUlynIVašan@lVXb‚Iš@n¥la@Kš_n‚@bÆx@XnJV„nKVz@`VXVšU`@bƒ¦UV@VšIlx„UnV‚K„XÈbšVllšbVbnVn@'], + encodeOffsets: [[109126, 25684]] + } + }, { + type: 'Feature', + id: '4512', + properties: { name: '河池市', cp: [107.8638, 24.5819], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lLVl„bVV@nXVlI@JVX„mšn„W°b„IVV@‚ln„@nalVUb„nW‚@kVkÒlbVKn²°bUŽlV²@˜X@`nb„aUI@ƒ°wlU@aXJVI@aVK@wUamIXm‚@XUV@@bV@Vm„ImnUUwVaVKXU‚nVK@akƒVwV@nL@UV`n@@X‚lnIUJl@X¦˜V@aUIVm@anƒV@UwnL@VlbVL@KVVXUWƒ„wUUVUka@UVJnUlbnalbVVn@°„„LV`Þ@šXVxV@@bVlUVVbXnWlXnmlš@XXWVXJmbUI@V„llUVkn@@VWV@Vnb„@VXUJVnn`lLVk„a„»lVšLnw@WV@lInw@WnU@U@m‚knUVó„K‚wUmUXUƒU@@wVJVIl@XKVVVbVI„J@Un@lŽVLnm„b@U@Ul@nUš°VUVJnnVJV@„@mVU@ƒ@wkUVwkKWk™yUUkU@alkÈ@lJ@x„Ilƒ@UUWVkUw@Kn@@kmaƒVUl™UUL™ÇƒUUKl@UUmL@aXU@mlUUwmKkUUVKVUƒaƒKUnK@U@Vl@XUWU„KlwX@šb@K‚@XkV@UwWJka@aUwmV@U™@@U@wUm@»kLWVkIWŽXnmV@VkbmKƒLUbk™Va@aƒa@@aVU@aVak£@ƒ±UkVU¯V™UUƒJVƒUIƒ@kxmUmWUbL›w@K@aU@@aVU@Kma@aka@_VWkk@UWVUKULWKULUš@KUnƒwVaUKƒxU@UmaƒL—m@kVmVa@UkƒmI@ƒ@KmIkxU@@K™U@mmakI@VƒLkmWkkJ™_U‚@V@L@n˜xXbšKVb@VVL@V@LUbUlmbU@UUWJUb@VV@@L¯K@LU@UVƒƒk@±z@‚kLUbVl@Xm@™akm@ƒU@UšUJU_™VWŽkn@`W@kw¯LmbU@UJUb@zmV™JULmwk@mVUn™lnb@L›Wkbƒ¦@x°nXŽƒb@bUl@LVlUnlbUJUxWakLUVVb¯„llkn@Vƒ@@nVbUlVbUnƒVUK@IƒW@L@bV@nxÆJnXVbUJm@@bnmJ™nkl@b‚nnK@L„m‚@Xx@VVbV@nb@UVVƒ„¯š@bkV@Vmz@lnLl@kŽVbUVm@mI@Wk™J@UWKkXkl'], + encodeOffsets: [[109126, 25684]] + } + }, { + type: 'Feature', + id: '4503', + properties: { name: '桂林市', cp: [110.5554, 25.318], childNum: 13 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nU@J‚X@`XLm¦Vb`lšVXXWš@VblČnVšŽlanLnmVLšK@_Vaƒ¥@kUa„@VmVb„aV@XVVzlVVK@knKVmX£VKšLlbnš@b@llL@xĊôXaV@°È@¤„bn„V@@Wl_„V„U@W„nVamw„wVbn@„K‚VšLX@VmVUxlV@šnVV_nK@m‚I@Wn@@IšUĊ@@wVWX@@I°VVm@wmU@m@IUƒV™kƒlkUmmkÅV@@aV@@Wn_UKla@kšaV„šlVanb@k„@@KlVn@@aV@nIWW™UUaVU@™kKmwU@UImKk@UU@w@W@‚™k@™UkWƒ@mk_W@Ua@a™ƒƒ@—¯ƒmV£@mƒUUam@—kWakƒVama@UUm@nw@alaUmnUlVlIœV‚™šLVyk£Vm@k@UUJkƒK@kmKUw™KkWK@UXImyVwnI@m‚ƒkUlkUKkUVmƒw@kkJWUÈm@_k@@aƒaW@U„UJUwU@@IWKkƒmUUV@nVl@bVb@bU‚UXƒakw@ƒWUkbkKƒbm@™xUlkLm@@wmKUX@‚™UaVW™XVmU@@UUUƒxkmWXkKkUWaUaUb™L@`UL@LV`UXmK@VmakLVbkL‚xUJUIVbUVVb¯KƒV@Xnl@lVXbmÒnV@L@VWKkVUIWJkIƒŽUamUUbm@U„kU@JUbW@X„WxUam@kbVVUnUJmUUV@bƒU@UUV™@ƒVk@ƒbƒmULV¦U@V„U`VLUL@xVbn@UJ@nWJXXVŽVV@bkxVbUx‚Lšš@x„¦@šU‚lXUVVlULV@@šnŽU„ƒb@xl„nJVnlVknUlVUbmŽU@ƒbVš„x'], + encodeOffsets: [[112399, 26500]] + } + }, { + type: 'Feature', + id: '4501', + properties: { name: '南宁市', cp: [108.479, 23.1152], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lKnbnU‚@Ua@K„L„ƒlJVX@VnL@bW`Xxl@„I@U„Jl@nV@X‚V@nXV„@lK@UVL@JULVJ@nnJlœVJ@VULaƒLUKƒnmKULVVUŽ@nU„š`lIXlln„K@UlJnb@nšV@LV@lwnJ@L@„nJl„@VUbUn@l˜n„KnbVŽV@„wVLUb„xVm@LV™VKXLVKVLXU@VllUX@`lb@bnb‚L@ŽUV@bV@@b@Lœx‚KVanXVƒUUmVUUUaVUky‚UUa„ImK@mUUVUkKU_@W@UVVVIUW„UVaVU@UUKnƒ@k@al@ll@bnL@b„VUV˜X@Vœ@@b‚Knblmn@V_@aUalL@a@akK@kVKUKlwUUnV¥VmU_VWVIVaX@Va„alńK@LVJnalL@LnK„wlVUw‚mX@VXšƒlLUVnblaUmVUVwXU@Wm¯Va@ÞKnw@w™mšk„»‚UVW²a@_mW@U@I„y„LVUUKW@@™„LX@VUV@@yVU@UV@nwUUmJka@IU@ƒmƒVkaW@UwUX@`ƒ@kLWUk@mƒkUUm@k‚UUWkUƒkWxk@@VƒK@nV@UVaƒUUJmIkVƒ@UamLUbkVmamLka™@ƒ‚kmL¯WI@wJmwƒx@akU@aUKmbkaW_nW@_U@Wm@a@wkwUKmƒk@ƒbkb›w@mKUkkU@J@bW@kVWz@bVUa›VUx@„ULkJWbXVVXƒ`@œmJUVU@@Lk@WbU@UJlnXlm„Vx@Ln@‚b@K„LX„WJUUW@kƒaUVUbmV@nnV@n@lVLƒVmLX‚mXkV±@kxÅL›šUbJWIÅJ@I‚mXalkUamKkškL±aVwKƒUU@mÞnbWJX„m„@lbmKULWUUVkaƒbnn@Vl@VVV@VƒbVbnLWLXJWxXLV@@VV'], + encodeOffsets: [[109958, 23806]] + } + }, { + type: 'Feature', + id: '4502', + properties: { name: '柳州市', cp: [109.3799, 24.9774], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƒwU™„aV@nVaUVklmkUUmmIkƒ@w„aVƒm@™U@VKUkVUkWV@™ƒ¥@w™™KVwUalw@aUUUWWXI@mVIm@Ua@wVKUKV_UƒV@U¥VK„n„al@„Uš@VU@V„V@aVUnVVIVmUUlan@VbXwWƒX@Va@IlVVƒn@VanVVb„lJXIVJlUXL@U@KmUnÑWakU@mkƒJUI@mk™@wUmmUV@JXaWIXWmaUIƒJƒkk@W„nJ@„ƒaUak@›kkJ@kUKU_ƒ@myUóWUkm¥kUmL@KUKm@k_UmVa@ƒk@@UmU@mm_—JWIUVUŽWLUlbVUJÇVUIVwƒKUVk@mU@n@lUL@Km@@l@L™VƒzJmUU¤m@UbV²U`U@@¼Vn@x@Vš@@VnUVx@blbXIVxU@Wl@@L™aW@kxƒLXVWVk@@U@VmLVŽ„L„bUVULVV‚lnLVxkV@nWV@bnKVVk@VL„VšÈVKšVVk„Unb@lm@@LVxUlVX@Vk„ƒJ@wkIÇ@kl@blVVVšzXllLUxlV@x@„UV@nƒ‚U@UImmUIUV™¯mVk@@V@VƒamnUKkm@@VƒIUJUaUUWLk@UJUI@xV@V„VWVnxƒLUômVV„@VkVVVUnV@UVkL@VVV@bVxla@bkXVJVn„`nU@bƒb@bVL@VnJ@„l@šV„aU@@_lW@UUU@Unƒlll@XLl@@UX@°bVWVanLlknVV@VVX@VVƒnUŽVLmbXJ@nllXX@`VXƒlmaXVWk@Wkƒw—J@„VL@J‚bnU@bn@@bVKUnVJVIVVVL²a@bV@@Vl@nUVakalmš„UL@VUL@V‚a@mXl@nK@UlK„L@Vl@@nkllb@š„Vnn@‚šnV„™V°l„šVInwlKXxlU°Žn@@ƒ‚I@UnVlakUJWkUK@anUWK@_ÞJ@U'], + encodeOffsets: [[112399, 26500]] + } + }, { + type: 'Feature', + id: '4514', + properties: { name: '崇左市', cp: [107.3364, 22.4725], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@JVzšl@V@Xn@ll@VlnX@@VWLnŽUVmUULVlUV@blnUlnXVV„K‚xnLlb@lnbU@Vn°KVV„I@WXUlI°VXb‚VVbnLVan@‚x„J@_nJ„a@wVwV@@a@IU@UU@WKXwWIXKmKUa„a@U‚UUUk@@Umm„albVUXVVKnL‚a@knƒWƒXImanÝV@„V‚LUx²blKl™nLVbklWbn@JÆIXJ‚IVaœ™ÆKlw²@lUnWWnK„UUK@k@mmU@mnUVaVU„b@lVXVXIWƒƒK@Lam@@KUwnƒWkkmVIV@Xal@@KV@VUnI@›„_UWWUkam@kkm@ka@mƒk@wkJWIUU@WXkW™XkWWLUUƒ@UakLƒW™XV±VIVWUU@anUWaUK@IU@Vak@@UUKWaƒ@m@ak@@wUkla@mUaUklakwVƒ¯¯@WWUkLkKmaƒ™kLUnV`UxWX@Jkn@bmlƒakkk@ƒb@l¯bm„ƒbJ›b@VXn„bVV@„ƒbƒJUkkKWVU@mœÛVUUW@UVUJWXkVkKmUL@WW@U„Vl@XXKW„XJ@XVlmbUxnnm@UlVnV@XVm¦VJb@šmLkKÇbXblVkn@l@bWnX`V@@IVV@ŽV„V°n@@_naÆVVbUVVbUJnzlVUl‚XkV@Vlx@X„VnxƒbƒKUK@b¯VVUV™L'], + encodeOffsets: [[109227, 23440]] + } + }, { + type: 'Feature', + id: '4513', + properties: { name: '来宾市', cp: [109.7095, 23.8403], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nVlw„@VJU„„IVVUšV°lU²V@„l¤Ub@bUV@b‚@„b@bUblšVa„KnLla@UnUWmXlJXUlKV@V_U±Van@V£nV‚I„yšU@K@kn@@LVK@k@mnVl@VU„LUxVJÈUVIU‚aVkXKVVUXJ˜In`@nnV@Vl@@„UbVnl`n@VL@LnKlVn¦VlôXV‚nz„@V`VL@llIœll@Vb„b@ƒmIXƒl@„l„IVJnbWXXJWb@IU‚nVVn@xlš@nVJ„I@W„U°LUaVUUaVJVIwlKUalKnb@UnLVWU_@KVK@_šKVa„@VKU¯VLVKn@la„aUkU@maVU„J@k™@Um@XmbkyVaUIUU@KV@laVn@KXKWUkUk@ƒaW™UUVw@aXKmƒVaUUkšmIƒlUU@wUa™xUmmU™¯™U@WƒLUmVIUym@UVmUa@wmw@çm@aWLU„™JUIUamKmL@™aƒx¯¥ƒkU¥U@±„k„UVmKU_mJUbkKm„ƒLÅǙ_@WWUXUmaVUkK™„UWW@nVxkUƒxmL@KkKmbUI@KƒLkƃbUbW@UbUJUXV`UnU¦mŽVVkxVLUL@llL@b@bkKVb@bU`m@knmaL@a›@@U—WVUƒU@amK@akkk@@b@lm„VL@VUVUbƒVVXUJUU@V@XV`lLUVVV@nnLƒJVbVlzUVVbVVnUVVU„'], + encodeOffsets: [[111083, 24599]] + } + }, { + type: 'Feature', + id: '4509', + properties: { name: '玉林市', cp: [110.2148, 22.3792], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VJUXVVXlWX@V™xVnX@@`ššULWŽUXÅbWK@mULUUmJ@n¯b@l@VULVx„x‚XU`VXXJVI„V@nm`@nUŽVXn@lWVn@b@Jn@nU@Lm`@Xn@WJƒ¦U@@VnL„lV@@Xl`nIlJnkVL„w@KVK@UšaVL@bVKX™lUUKVK@I„VšL„a@U@WšLUlVL@bU@@blb@VlbUxVbXUVJ@xVL„U„lV@VU„bVLnKl„XJ@L‚b@an@VanL@`VLšKV_UWl@U_„a@WVInlVUUUVm@I@W@wVakIWm@U@ƒXwlaVbnI@ƒm»Va@aXaVLšU„»@aVa@k™KkL@KmU@WƒzUK@wU@VWUUVUUKUa@mKmbUK@_nWVaUkVaUaVUVLXKVƒVUVmVI@UkKkLm`UkW@UwWW_„UaU@WakXmK@xUXƒJkƒUUWUk@Wl—mJ@km@@aUKzmyVk„a@kkWVUU¯lmU@@w‚kkmV@Vk@mÅIƒ‚Ukƒaƒ@Ub@m@UUU`mUbWaWmb™X™XKWIXUWm@љ@y@UkIUJUUWLUWƒL@UkVUxW@kaWbKWnXxW¦n„m`XLVlUbVbUx™I@JmLUKUb@VW@@bkL@b@VlU@xkš@L@lƒxXxWXX°V@VVVbUVV@UVVbULVnVJUb²b‚aUb@VVVVInlV@VnXaVUšlI„VUb'], + encodeOffsets: [[112478, 22872]] + } + }, { + type: 'Feature', + id: '4504', + properties: { name: '梧州市', cp: [110.9949, 23.5052], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VbXblVlLXWln„wVV@VV@UnšWUXVbš‚@VWXa@kVK„UaVaVkšUlyX@Vaƒ—VmUwUaVU@UÈymI@aU°@š™nWV@VaVaw@IV@VmnLVK@kmmna@™„™VbVI@aV@XbW`U„„LUVVx„@VbUV@bl@VLXblJn¦lL„°°@n™@K@UlLnK„a°LWbnJ„¦UÒV„UllLlVnKnbWnn„V`„w‚@@Xa±™n™l@XKV_„WVkVa@kVyUa@wU£UW@UIVW‚@@a—wWaX_WKkVmUULmak@UJUI@±m»™—k@m»VyUIm™nmmwnkUmVaVIUn_mW@»Vk„@VwkmmUXa@IƒaVm—mƒ@Wm_U@mIUWóLmUk@laXmmkUK@UmKULUUmWULƒ@VakU™@Ub@bƒ¼™VUKWb@bUbn¼@„mJUakbWx@„@VXnlJUb@x@X@JUnVVUVmkUJ@XƒbV`k@VXU`™LUK@_mKUbm@@b@„U`@nlV@b„UnbVbn@@`VbUbVV¯bm@@mJXb@bVnUllVXUlbUl@LU¦VVmŽkLVb@b™l@V@XlK@V@nUJUz„°mށwmLmlXbWVU@UUUlƒIU@VVmV@@¦‚bXbWxX„WlXVWL@LUmkbU@@LVVVJUblzna@WVnš@@lƒIUVnbV@Vlƒbkbm@ULUKV°ULƒ@'], + encodeOffsets: [[112973, 24863]] + } + }, { + type: 'Feature', + id: '4511', + properties: { name: '贺州市', cp: [111.3135, 24.4006], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nL@xn@lKVkšwn@„alLlaXV@„lx„bVWV@aUa@aUk@mVUnVl„XL@JV@VxVIVƒX@„b@bl@@`ÇnXVlI@l„xUnlVVLkllV„@nmJUxnzWJ@VXLlŽšLVxnL@l„LlŽVI@V@lUnl¤Uz™Kš@„Vl@š„L‚l„Lnš‚b@VnVVU@k„a‚Knxn@VkVJ@ńUlakmWIUaVanm@_UK@UVWUa@klXam™U@Vmƒ™VIXW„@lUVknVlKVLXŽVXšW@b@VlšnnVL@KXL‚Kn@lb@UnW°@Va„X„WVb°aVa@I¯aUkUaVKVwƒaXk@a„a‚™@wkm@alanUVw@alK@Umkw@UƒaUmU@WXUaUK@UW@UaVWI@¥Xa@w@WWšVƒXwƒU@mKUXUWVU@a¯kl@akU@UULmK¯VUVW@U_m`U@@xVbUz@lUbUlƒXU`WLk@mš²šWb@ށ@ƒxU_mƒXmmamLkUkKVkUƒVу¥mIXa¯KƒbmLkK@V@Lmš¯@ƒ¯kKm¥kIWaUKk@@aVUUaƒ@UwVUƒKVƒX_WaU@@bUJUaƒš@šmbnn@lULmKUnU@@J‚xUbUbU@mX™š¯@VŽ@bnJÇz@VUVVbVxUn„˜UbW@kz™VUlUbVbƒŽUL@lWb'], + encodeOffsets: [[113220, 24947]] + } + }, { + type: 'Feature', + id: '4507', + properties: { name: '钦州市', cp: [109.0283, 22.0935], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@IlVVlnL‚@œxla„al@n„VLlx@x@bXnV@@`mXX`lbnaVL@blV@b„wnx‚I@xXJ°nK‚l„š@lbnKnblUVanKVb„@lUnJVI„VUb@V‚U@m„L@Ul@Xw„llVVXV@lVnlVn„l@XVlK„@@_VWVxX@lb„U„nV@@JlbnIlmnVV@UwVK@U@k°a@mnIVVVK@nXLÆaVWXVK™™@_W@Umšw@UXWWkUUVWUIVaƒUkJ™UVWbUmU@mkUJUU@UVab±aVaUIUmVKUaVUU@VUUaUUU@W¯XWWw„w@k@Kl™@wkV@U@alK@aX@@UmIUWUIƒ@mmkXU`U_WJUnUJmUk@@amLU@UVW@UkU@@VƒbUWVUk@@wmKkUWLUWX@JmIƒlUkkKWKkLWU@UKWa@bU@@a@_UKWƒUUUmJmw@nV_@ġğKóLmbU¼VÆ@xUXƒ@Um@wklVnUn›lkaUV@„lV²WVklWXXbWlkVkIm`UUƒLƒUU@UWƒx@XU@@lWLU@kbUbV`UXllUV@bmb@LnKVbULm‚šnVVIV`X@'], + encodeOffsets: [[110881, 22742]] + } + }, { + type: 'Feature', + id: '4508', + properties: { name: '贵港市', cp: [109.9402, 23.3459], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@n@VzUJ‚nVŽ„K@XšVš°nVVnšwVb@xVV„knJl™VVUbn„WL@bUxVVXš„bl@lVXkWƒXwWaa@¥‚@nUUUV@„JVkVVV@XUWanknK‚xnƒ¯VyVI@m@UkL@W@Ušk@aUalKnUUV¥@KVkkaWVkUVkUm@aWanI@n@°aUUVaUa@_m@UamaƒV@akU@mV_@ƒa@KWIkƒmLUKƒaUVU@ƒkƒVUK@wUIWVUaVwka@Uka@aV@@aUKVk™K@X@Vƒb™KƒU@JULVLkVWšUL@aUK™b@VUL@LƒxUKmlkImJk_@WU@ƒkmK@UV@„¥XIm@@Wn_@KmVm@@I@aUmkXm@UWV@mn_@mƒUUJWIUWV_WƒwU@mUknVVmxU@@VUV@zU@UVW@ƒK@šX@VLUVƒKƒz@J@VnX@`±bUXVƒ¼™lšn@xmxÝL@‚Ubn°@XWVUxUVVnkbWVXV@Xš`ÆÈ„KnƒlLVanIV`nLVUlƒ²ƒV@V¦„l°¦„w‚b@šnKnLVbVJšIVƒXK@b‚n@ènx@xVbUnV‚'], + encodeOffsets: [[112568, 24255]] + } + }, { + type: 'Feature', + id: '4506', + properties: { name: '防城港市', cp: [108.0505, 21.9287], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XV@X°°U„lxkbVlVb@nkbVl@xl@@b@n„‚XbVL@Vl@UbV@@JVLXbmV@bVVUXUJU²šW„XlKVb„@VVXKlXšWlXXWV@VXJlI@x„l@nlbn@lln@lbXalIVK@ƒVwœUVb‚U@aXylUX@@aW@U_UJmU™nVKUamL@Kna@aVUkkVWU_ValaV@XK@kV@@W„wVXV@„V„KVVn_lJlUXkWaXWlkXU‚±kU@ƒVUlbœkVmUmlk™¯Ý™™W@mb@¦VxULm™kJUU@ma¯wƒmkX@VóJ±bUVUXÝWk™lWXXlƒxUaƒbƒIğ™Ç@U@mVUKkkm@UJm@XnWV@x'], + encodeOffsets: [[110070, 22174]] + } + }, { + type: 'Feature', + id: '4505', + properties: { name: '北海市', cp: [109.314, 21.6211], childNum: 2 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VaVLnK@IšJVwUaVaUkWKn_mƒX¥WwXm‚LXalbU£UyV„Å@ݙwm@™°l›LÅUƒmk™mwÛaƑLÝUUm@ȣƃV_„Ó@£UƒƒUVƒ„™¼U°W̄™ÞVbXbôx@b@bmV@ǃ™UÝ@@ĢU`m@ŽnxnIVV‚VX„VL@`@bV@@aXbVL‚@XVlKXLlLVl„knJ@I‚WVXXKlVnL@xl@UVVX„a@UV@VlX@VUV@nK@bl@nVVIVmXIV`V_lWnn„@VJVXnJ'], + encodeOffsets: [[112242, 22444]] + } + }], UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/gui_zhou_geo', [], function () { + return { + type: 'FeatureCollection', features: [{ + type: 'Feature', + id: '5203', + properties: { name: '遵义市', cp: [106.908, 28.1744], childNum: 14 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@@UnUlJn„w‚JU°VL@bnVšU„wlJ@XƒŽXVlU@klVUJknl„UllL@bUJ@xULUlƒ„UblVkblbnw‚UXmla@„wV@VK@L@UXaVKVLXWƒUVa@U@Im@@W@£UKUakKWIXU@al@@llUnL@W@Un@@VlUV@VIUanKl@Xb@lmxVb@b°bb@nlJVVnnJ@b@L‚V@ln„@LmV@Vx@blnVK„nlJXIlw„J@҄b@nlK@Un@UL@VVVVUUUVK„l„@VUVL„J@UVUUw„@Wm@™„UV„ÈVlbUb@JšLlŽX@@x„„ƒLmŽk@@nlx@bUJUzVJ„@@LVxUV@bWxnLnVVK@_‚K²xVbV@n¥@aVI@b„@l@Va„Knb@n‚`n„mmý„W@ƒU_šwV@VlVV@Vn@n„˜@nI@Jn@°¦VaUU@™„mVVWVaUńU@aVKnƒVbVUmmU@a@kUw™m@aUUmUUJ¯lakU‚aXaWUUaVƒkk„amkmUnVlULƒVlJ@XU@UJWUUw„k@aU@WbkWƒL@U@WU@@XUKmV@aUVwUĕUJUamUUVUÑm™nIVJ@kl@XalJVn@KVLœ¥@UWIXWmU@mVUKnUWLUKUaWUUKVU@U@anUny@UlUkK@w@a@aVUƒ»UkVw@Wmk—JƒÅmUUVmwXalLXWWUnam@XkƒJ@UVU@U@W„@@U@I@Wl@Ènlw@KXLWb„lVUkalKUU„VVaV@@wnIlaUmkUƒKWU@KkUkLWaƒKUUWUn@VƒK@LnnWJUIƒVkUWVnV@V™@@XƒK@VUIUJ@IWJkX@VVJ™IƒVkK@I@UVaUWk@m„@wnUWKk@mxk@@„lV@b„xmb@x@VUmLkUƒJ@nVV@b@VkLVbU`¯I›l@™U_UW@UU@™™ƒK¯wm@™xƒL¯¥kIƒ™ƒ‚@bkbƒ@Ua@ƒm@kkW@XVbmV@ŽkV@bWbUbV@„¦ƒxXlmVk@ƒ¦™bkaWL@KUImK@wUK@VUI™b@bmK@LÅy@akXW@kbWlXblL@ŽULUbƒ`@U™kUymX¯@mšUJUUJƒL@Lm@@WX@lU„VlšXll„@l@Èk°V°Ž„X@VU@UVll@XUJVXUVm@@VXLWlnV@Xƒšk@mVULnxV@@bm‚kL@VWLUbU@UVm@ƒb@ķ¥UnmJ@UUVƒkkJUšlÔU`UIW@ƒ°kLUlUI@WVI™U@mWKkXk@ƒ‚WU@bXšW„@J@xX@l@LVl@xšLVxXX@x‚KnxVknb‚KVV@U„L„WlXU`@nUlšX@llVXšVU„KlkUKlI@anKVLXKVaUIVWV_VK@VnLlU„»VKVL„m'], ['@@@KlKkUUVVX']], + encodeOffsets: [[[108799, 29239]], [[110532, 27822]]] + } + }, { + type: 'Feature', + id: '5226', + properties: { name: '黔东南苗族侗族自治州', cp: [108.4241, 26.4166], childNum: 17 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@VV@XkV@bUbWJU¼Vb@Vnb@bš„@J@bƒL@LV@UVƒlUI@a™KULVb@bkJmx„šlLVxknVJk„‚xnKmnnL@bn`WIXlWLU@UxVbUVmKV„XI@JVIVJ@U„L@Wš@@UmUXUlV„UVJXImm@K„L@UVmVXV‚„LXblKlV@LXV„LlVVnkbmJ@xnXl@šbXa‚@Vana„ÒšL„m‚VnIl‚Þ¦°k@b„@@lV„nJlUnš‚VX_„@lVlK„šV„UUxVLVWVIXJšUlnnWlI@KUaUUVKn@VaVXV@na@ƒmw¯@mUkJUamI@lk@@am@@I„ƒUmVImUUw˜™@anUVaUU@LU@WaWUXWW„wV@VwnU@L@ynbl@@X@a„J@nW@@Vn@„lVLlxnI„lš@@UWKUƒnIlJXIVllIVVš¼XK@aVI„V‚@@bn@VKXLVKVVVInw„J@UWI@mX@WKnI@KmU„UVJUL@V„KW@@k„@aU@@W@InJWUXwWI@Wƒ@¯wkaVaUIl@nŽValIXWWI@UUm@anwWkXWWIUbk@UJmIUamKVUUUVVama¯VkIVVUlKnXVwX@@WVaUUVa@IlƒaVmƒkna›wk™UU@ƒU@mUVƒšUVwœl°LVbnJVU™¯la@mX@@UWKXU@aV_V@@JlkUƒ¯@V™nK@km¯k„U@ƒWUW@mmƒU@™kmlU@wkL@WƒUkL@VmLƒJ@b@V@bknUUVK@UVKUK@Uk@Wa@LUVVnUbmVk@@UU@@aƒV¯K@U@UU@WmUL@aU@WV—w@ƒ˜I„xXll@UX‚K@KXXVJna@wWaƒ£naUKV„m@UU@mUmalm@@XkVm@U@VƒLmWU@kkWxU@@bVV@VkXVlƒVƒ@UUk@@ƒmI@KUw„m@UmVƒUUwU@lwkV@IUa@mUaVIVKVa@w@U@™UJkb@n@bmJ@XmlVUxWXkJmUkUUVW™xUlU@ƒaULUšmbU@@‚WXkmƒL@xUV@nUxÇm@„XLWbnlƒnV‚nnUV˜U‚nVVz„@lbUVVlULVb@V@nUJkwm@Ux@bWbUK@UULka›JbƒU™U@U@lUK@XUJmn™J@bU@UwWa™x@zkJWnUJUUVšVV@bXn@xVb@J™L™m@X™w@`@bkb@VmXUV¯L@mW@@n@V@‚ƒL@K—IW@@aƒaUx¯@U„m@XbW@@L„V@bnVWVkKUzlV@bÆa@lnI@VV@@LnVVKUaV_VJVbnU@bn@‚‚nX@yVIVxXKVLlUVaXU°J', '@@@KlKkUUVVX'], ['@@UUVUkUmV@ln@VXVK@K']], + encodeOffsets: [[[110318, 27214], [110532, 27822]], [[112219, 27394]]] + } + }, { + type: 'Feature', + id: '5224', + properties: { name: '毕节地区', cp: [105.1611, 27.0648], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@UkVƒ@k‚W@Xn@@K„KVIVVIn™°@nWVzšl@V„_VaVK@kKWaXklaX@lW@bÆz@KnL@ašaVJ@UVL@xnLVJ@LXKlbša„¥l@nUWk„wƒ¥U@VaXa@amLkUƒKmƒ¯kƒmkIUaƒKUIWƒkKm@anw@mlwXIƒmƒUk¯@a@amUƒ`kkKWVkxmUUak_mJmw@w„mXUW¯X›_@WnI@aVwkWWýŃU@WLkU™aUbVV@lUVVnm@kUmV¯™kK™LƒwmVUUaWV™aaWw¯wƒÈ@VULUVUUƒK@nWJkI™l@Umxnbm@kbUJƒa¯bUbVxmLUV™aU@VUUWxkVVV@bUV@XWbnlUbƒbUJlbUV¯b@z„`WbXnmbƒaƒwUwVWUƒbUxmbU@Uam™@Vƒk™VaƒwVaUƒWI@mUKóz@lUlÅ@WIƒb@xXxml@XklULWKUmwUa¯KUXWJkaULmKkLWbkKUVƒImƒƒWa@kUaULƒW¯LƒK¯@kbƒL@b™x@J@bmnnlUšlzU`U@@Uƒb@„m‚n¦°bU„Vx@bkVm¼mx@mk™mVV@bkxVn„aVV@bU@mL@b²`lIVV@lXLlš„bVxn@@bl@XllIVšnbVšn°°wlbXw@mVa°lVnU@mš™VLVbn@@b„@@WVnUV@Xlxn`VznJVb@L@bV`V@šUnwšU„@WUXKV@UUlmUUlaXalLšm„bšIVbnJVIlVVaUUnWVXn‚VL‚k@ƒnWnblnlb²x„xVKVXlVXLVW„LlUVJna@wVL„¼@JVX@`@nnx@nWJU@Vx@XXKšŽUblxUš°„LVKVVlL@KnbVUnJ„IlUšƒnKl£VW„x„IlJ@nšVÞUVVnb‚VX@V_°lnK', '@@@UmWUwkU@Um@@VkL@V@„„‚V„VkV@nbVa@ƒ'], + encodeOffsets: [[108552, 28412], [107213, 27445]] + } + }, { + type: 'Feature', + id: '5227', + properties: { name: '黔南布依族苗族自治州', cp: [107.2485, 25.8398], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@‚V@IöalK@UV@@KUaVIVVœLlaVbVWnX@‚@LnUlxl@naVLXVVaVU„J@lUUanWWI„@VlV@Xbƒb@V„n@VmVVbk@kU@V›V@X„J@zn`ULW@kK@_WVUK@LUb@Jlxn@nnWlU@@b„x@XVVU@UbVb‚@n`VI@VVLUlUIUV@KmL@VV@XIV@@lVLVmXV„@WLXLW@U`šnkb@Vl@UL@VVV„L„llX@`lIXb„J˜IXW„L‚aVL@ŽXXW‚Ģ™b@bmK@L@°@Vnxmxšn„K@xVn@VkL@V™Lƒakbl`VnnxVnUlššV@@VVXV`@šœk°JV_UalK@U@aUU@m„IlVnK‚V@U@wnaƒw@akU@ƒl@nwl@XLmV@xnƒl@VXUb@V@JlL„UšJUI@UlWUƒnLVUUaVwV@XKWkXJm_@amKnmmLwlƒUIlmUwkKƒ™nwlI@aUaVKšL@bVJ„kVUU@@K„K@a@I™ƒ@ama@UUaV»XIVa@alU@WUU¯IWVUbkVUKWLUwUJ@zmWm@@amVUaUIU`VbULmU@KU@@UmJ@kÅb@akUVylLXUmU@aƒU@KX@Wan@Vƒ°@Vw„b@bX@˜J@L„K@@U@mX@@n°KVUnW@Ula@a@_šx@WšnšK@IUa@wWm@aUUU™VVVIXmlI@yšwXbVxV@@ašInmVI@WVL@k@VšV„V‚aœIlbVK@VVLXa@aVwn@lxVI@m@UUaVKUkVUkaƒ@UymUV—VUmmU„mmkXaWK@ƒÈnVw@mVU@w„KlnXW@V@naV™VKUk@KVIUWƒ@mk@KXU@Um@@lVƒk@UVJna@UWaƒL@a@ƒXa@kmmVUUk@mkkƒamJ—ImJUUmIm±aUUkambkamVUU@VlbUbVVƒxX„WVUU@VUakU@UmUV‚U@mnUVVnUbVJ@b—UW¥kLVamVkUaWJU_UVWKk@@nl„UVVJUXm@Vm@UnVlmbnmJUbULU@@UUKWVIWxnJVb@xUL@bUJWIkxƒbkb@xVJƒbmU@kW±LkKUkVa@a¯am¥ULkalÑlKXUWƒXƒaVakImVƒ@ka@UUƒJ¯aƒX™mmb—KWU@wUUƒaUa™KmU@UXlWb—¼WLUKUb°„UlVbkbVL@VƒšƒJ@nVlUbUXmJ@VX@lbUbU@@bWb@VnLVJ@bVVUz„ŽVL@lnL@b™VVVULmKUk™Jkbm@ƒxVb@V—kƒKVnnV@b@ŽWXU‚„nV„l‚VVXVJUXlVXbWV@VU@Ubk@@KWbUUmL@JnXV°XJ@_‚`UbkXVVlÆkbƒ@VLXVV@‚V@k„KXX@`V@@n'], + encodeOffsets: [[108912, 26905]] + } + }, { + type: 'Feature', + id: '5222', + properties: { name: '铜仁地区', cp: [108.6218, 28.0096], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°a@aÈbVUlU@aVKnVV„VUlyX¹lWVa@U™VƒnUVU@m™@mUl@„mÞw„@‚xnIVbna@KVI‚J@kwV¥ƒUXÇVkVW@kkKWU@aXUWmnIVa°VXbmL@VVbnVVVUb™VbšJVbVKXkVKVanU@aWnWUWa@U™nk@mVIVK@wXxlLXbVJVlKœbl@VI@mšaXalVV„VbX@@ašalnkx@b@V‚b@Vnx@bVVUXn¤WXn@Vl@Vlzn@š`@I@KUU@ƒV£namVkXa@aVK‚nnU@anVlKƒa@UUU@amk@»kƒU¯@aš„VWnkWmkImU@akaVm@»VUV@UKnkW¯XWlkUKnIWaš@nmlIXmWUnwUwWm@wULmaUJkIUaƒaWa—klwkwmJmU@bkJ@XUJ¯W@XbWbUKUkWJUUVKnn@UmmXUWa@mU@@UI@WmXVykwm@kaULWwU@¯ƒlKUUVU@mU@UkmaUbmV@b—š‚xVnVUJVnƒ„@Jn@@bl@@knJVblInV°@nx@„mbU@UWUbm@ULVVVb@LkJmXkm™VWIUJUXUKVwƒV™UƒŽkLkUƒ@W`Um™kVmIUƒ@kƒ@@a¯lÝ¥kmJUƒn™KƒÑmbUb@Wb™ak@mWU@UbƒUVVkLlbUVƒkXaWK@LkxÇmk@@X@J@Vƒ@@X@VUV@V„IWln@mbXVWXkKWbnxVUnV„ƘInl@XUxVl„¼UV@b@b@xlLkV@VmzmV@b@VUVVLXVVbVLXKmVVLU‚@nnVWXXJ@V›¦UK@LUmkIWbk@@lUImJnšVÒVUnVVbVIVĖUxV‚@bnUVL@WV@@X@V„KlXXaV@@bƒlVxXVVIV@@WkI„UVKUkVmlnnŽƒbllU„VbXVWbblVkb°ŽVInVVV@bšnVx@l@bnVVnUŽUam„UL@bƒVVÆUbUXU‚ƒn@šVVUb'], + encodeOffsets: [[110667, 29785]] + } + }, { + type: 'Feature', + id: '5223', + properties: { name: '黔西南布依族苗族自治州', cp: [105.5347, 25.3949], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VL@Vl@@IXW@kVUVbnW@XlKVVnU„VlL@b„aVbƒb@xX‚°ÔUxV@kbm@VxkxWJœ„V¦ƒŽ@ÈnšVKšxWXJmV@n„Ò@xVbn@@blLk`VX@bššla²JVUlnn@U±lw@wnw@mlwVIX@@m@klKnk‚a„KnwmmXkƍVm„Uš¥l@nb°n@„aVwVmVIVnI@a„¯@mšU°ƒl@@VnI@JV@UV@b@IUbVJmXöºƒzllUbVa@aXUl@„U@llLnKVaUa@UmK@UšwV„bnKV@VwVK@UXƒV@Vbn@‚w@U„WnX‚@„a@m„I„™@UUKlaUaVk¯ƒVaVLXK˜»XaWk¯mƒkğwmW@mIƒVkwƒJUIšÇVwU™UkVKkƒm@UkmU@WÅwm£Vƒ„m¤¯IkJWa™_™lUbmJzÝJk„ƒUÇVU„ƒ‚@bU„Ýn™m¯LUb@`mL@VkL@VƒUmmk@UU±Umka@kUƒ@ķymUkk@mmkÝmUaUakImV@V@VÅLƒ¦ƒJUXmJXšWb@n°Æœx‚¼nV@LlbUŽUbmL¯@ÞbV¤nbVx@bUVlblIœ™@KVVUnVJUn@VlLUlmLUUUxmK@I@@VW@@bU@UJmUkLVVUl@b@V'], + encodeOffsets: [[107157, 25965]] + } + }, { + type: 'Feature', + id: '5202', + properties: { name: '六盘水市', cp: [104.7546, 26.0925], childNum: 5 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ôyVL@nXJV„Ub„x‚bUŽlšU„@ŽšnŽVbV@naVw„a‚VUXVx„x„bnaWmXaƒ_@y°aVUkaVI„aVamkXa@WVU@aUUlUXwVV@UVšbVUnKUwVa°a„bVIlan@manw@VšklJXI@m„LVVVUVK@U„ǃk@KUa@UkaVU@UVWV_XWVXVWlLXKlLXaÆKšwVL@akKm@Uwƒ@@XUVk@VUI@wWK@aUV™I@UkK@ƒmL™Wƒ@kImJƒUÅVmkXUW@UJkx@nmx@xkxV²m@kmUV±Ikb™™@aUWl_kK@am@Ua@wƒÑ@mnUWIX™wULm™@DŽU¥›ƒXIlwUwn@laU@Vw¯ÓW@w„aUaƒb@akKƒUmVUUkL@WmXUaUV@lWX@Jk@@UUKULmLUJmzkKmVX°VšUnWKUL™ƒƒL@mU@UnVJ@b@„UV@Xƒ`m_@l@@bmbXJmnnš@°˜wnn@ŽVLX@V‚@nVl@nk@@b‚l@nn°WlXzW`XXVKnUlxVbUb@‚V„Xb@Ž‚VxÈbVlnbmn@ŽkVUL@„ƒŽmLUVVL'], ['@@@ƒ@UmWUwkU@Um@@VkL@V@„„‚@„V@VkV@nbVa']], + encodeOffsets: [[[107089, 27181]], [[107213, 27479]]] + } + }, { + type: 'Feature', + id: '5204', + properties: { name: '安顺市', cp: [105.9082, 25.9882], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lL@bUK™xÅLWbkKWLkKUXUWWXU`UX@VUVlb@VVb@L„l°xXx‚bšbXUVb‚VnU„xšKlL°šnUlVn@UmVU@kUUVašblVXKV@ƄXþlXUxnU@mVK@_@ml@UU„@šblU@KnLVyUw„@@UmkšWVw@UVK@VXzVK@n„VVUUW@kVJnlaš@nKW™kaWL@U—™õb@JU@mU@@_WWƒL@lUU@WUUK„@lakÅUUlWVa_@`WIU¯mW@InKVVXa@Ll@VaV@@UXUWakUVWUIUW‚UkUƒƒmVXW@@amUUm„L˜l@UUa„wn@lašIVlnLVKUUšU@amK@kUKƒVyUU@aUImK@UXa@aV@VakaW@@UnIVWVaUkƒb@mWƒX@Vxm@UaU@W„@VULUxU@mLƒaUŽ™x@VnL@VVbUbmLkK@kƒVk@WV@bUbVakk„yõ¹nWUIVa@J@aVUU@@ImJ@Uk@¯„™V@nƒ°@bmJUUJUnUxƒbm@¯Žmak@™¦ƒVUnŎWlnnmxƒLbmlkL@l@nWVnlÆU„VnIlJ„@šXnK@„lL@VšJVU@bXL@xVJUl@VU@W„@Vxn@'], + encodeOffsets: [[108237, 26792]] + } + }, { + type: 'Feature', + id: '5201', + properties: { name: '贵阳市', cp: [106.6992, 26.7682], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nŽlLX„VJ„LVblJ„n°ln„„LlVnKlU@nUUa@WlX@l„n@‚Vb„@la@a„„šlJ°¦„Kšwn@°x„LVkUmmwUmk_la„bšK@UlK@UUm@wƒL™mnwmw@U@¯@KnL@aša‚ġXWW@UKbƒKWX—JƒIWakJ@_kWƒkƒKUU@UVKk@@Ula™mV_X@WKXKƒ@WUUnUK@kU@WJU@@UnK@LVUVJVkUK@UUJm_@UaVaV@UU@Wƒw@aV@Xkmmm@kw@IVa@KVLXU@`lLX@VKm_@yƒI@WœU@UlVl@UanU@Uƒm@U„aWaU@Ukƒ@XJmXVbkV@ŽƒIUVUbWUUKmbk@kwmV@K@mWUXUakb›KUUUJVb@LU@@VkL˜š@VXKlbXšmL™@kbm‚UI@lVXUVƒU@mULWy@UUL@VUx™Xnl@Vƒ@VxUzmK@LkV™aƒ@VVk@@n@`UL@nmV@bmJ@Xœ`WX°WVƒn@xnxnIl`VbnVlwXUlLl‚„_nV@b@bl°„V„nWJkx@nmx@b'], + encodeOffsets: [[108945, 27760]] + } + }], UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/hai_nan_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '469003', + properties: { name: '儋州市', cp: [109.3291, 19.5653], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@஼jpnr’``ŽpRVHʘ̤žZt^JÖA˜[†CâlTébQhRPOhMBcRSQiROE[FYdGNOEIH]MgEAMLLIAG_WMCSL@ED]PCLYC[ZIHgjSxJTMbHNEFCMEE_HSDFHSLECRNSFDRICHNADGPI\\RZGIJTIAHLDQOHG`GTNCOIC@eIGDWHIS[kiE[FMbECZS@KKS[FDWsCeRuU_DUQNOE[LKGUBM¨EDQP@HWHGDImXƒCog_~‹I_fGDG|QDUWKBC\\ore|}[KLsISBHVXHCN`lNdQLOnFJSXcUEJMCKSHOUMDIm_‹DI`kNDIGEYFM\\YPEEIPMSGLIKOVAU_EBGQ@CIk`WGGDUM_XcIOLCJphHT_NCISG_R@V]\\OjSGAQSAKF]@q^mGFKSW^cQUC[]T}SGD@^_ˆaRUTO@OHATŸ”'], + encodeOffsets: [[111506, 20018]] + } + }, { + type: 'Feature', + id: '469005', + properties: { name: '文昌市', cp: [110.8905, 19.7823], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@€hIJ¤Ī¯LQDaFßL[VQìw€G‚F~Z^Ab[€¹ZYöpFº lN®D´INQQk]U‘[GSU©S_­c‹}aoSiA£cŁ¡©EiQeU­qWoESKSSOmwŸćõWkàmJMAAMMCWHGoM]gA[FGZLZCTURFNBncVOXCdGB@TSbk\\gDOKMNKWQHIvXDJ\\VDTXPERHJMFNj@OwX@LOTGzL^GHN^@RPHPE^KTDhhtBjZL[Pg@MNGLEdHV[HbRb@JHEV_NKLBRTPZhERHJcH^HDRlZJOPGdDJPOpXTETaV[GOZXTARQTRLBLWDa^QAF`ENUPBP…\\Eji`yºEvåà'], + encodeOffsets: [[113115, 20665]] + } + }, { + type: 'Feature', + id: '469033', + properties: { name: '乐东黎族自治县', cp: [109.0283, 18.6301], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ªVLP`@PEdNRAHOPEAKHEVL`GZBJfvdTAXNNTZJFPrHHNpKTD\\ILHbEVd^J‚OHLh@NNBnHP`\\xH@NBRLJTlŽNv_^CTLd@bNDVFbxdFV€UPBTKOGEOUO@OEBXQP[H_EI\\EbeYa@UO_J‹MEJ_IEDKJUGMDcNUd_FMTEJSGoZ]EIYGO[YW‘gEQ]a@WHEDQKUSDUGAbYBUpSCYNiWqOSQEoF[UcQISWWNMSDe_cLQ_UBiKQOOASQAWgS­ā]ZaŽSPÝZ]XMXSŒ[^oVËNgNKlE RôEø'], + encodeOffsets: [[111263, 19164]] + } + }, { + type: 'Feature', + id: '4602', + properties: { name: '三亚市', cp: [109.3716, 18.3698], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@®ĂhTBXTRPBRPjLVAR`dKf`TC‚NXMTXRJVdE\\FpTRrPjXZMTDVoZABaVHTCLVCRGF@X^bFR’hZXP\\ZHHMA[^wBWXJlW¤EJ[bCTOF‹WWMm@ILMGWQ@DQ^QNWFSHEbF`OXNbO„VNKTEPDTLTCCVTREfvfEHNbRAENH^RJXCFHNFRpVGHWISDOTMVCZeGamaLoLÛD¹¹ėgsia{OųE—Tt‰lɂwr}jŸR±E{L}j]HąKÃT[P'], + encodeOffsets: [[111547, 18737]] + } + }, { + type: 'Feature', + id: '469036', + properties: { name: '琼中黎族苗族自治县', cp: [109.8413, 19.0736], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@bRFnHNbHŒgN@NPEnbXP@bND`NT\\@\\QZb@`@J]V@XhžDpW„nCJGHGXO@CR§FANHVKLF\\MPVR`CvVfQtDPKpGHG@S`WJP~^dSTHWX\\RHTFACQTIAUPOU@MG__IaYSFQK‘NSbORHXCZeTFJg„B`YBMNMFi~IVDV[tGJWXGDQRGF]ˆJrALgESLSAYDGIaFeXQLS\\MKSLSQYJY}eKO[EHiGSaK[Yw[bmdURgEK^_kcSGEOHKIAS]aFSU@Y]IWFUTYlkP_CUOUEkmYbSQK@EMWUuAU\\M@EpK^_ZMDQ^OXwC_ZODBrERURGVVZ\\DTXcFWNIAWJWAYUUFYEWLQQaCIZeDM`cLKRGpanJZQd'], + encodeOffsets: [[112153, 19488]] + } + }, { + type: 'Feature', + id: '469007', + properties: { name: '东方市', cp: [108.8498, 19.0414], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ºŸx‹JYZQ”IŠYXLl@dR\\WZEn]bA\\S~F`KXaDeTiNO^EEKWEDQXITBXaWaDQMUJOIaTWf@NJV@dSxGZ‰Fu_@WMKAUˆ}AQ@MwG_[GOAmMMg@GKP]IUcaFKG[JSCoLGMqGEOYIMSWMSBucIeYA_HUKGFBLOFGPQBcMOF_@KO©UAtERadwZQ\\@ÊJÒgòUĪRlR°KĮVŽLJ'], + encodeOffsets: [[111208, 19833]] + } + }, { + type: 'Feature', + id: '4601', + properties: { name: '海口市', cp: [110.3893, 19.8516], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ńZƂt̬æßFuz¹j_Fi†[AOVOFME_RBb]XCAKQKRSBQWSPY\\HbUFSWSPoIOcCOHIPkYCQ]GdGGIFQYgSOAQLK`MFUIGa@aQ\\GGUFcHKNMh@\\OYKAigsCgLSF]GOQO]@GM]HyKSHKPW@Pxi@EMINYREXWRQ@MQcFGWIAwXGRH\\yDI`KJIdOCGRNPNtd\\UTMbQYi@]JeYOWaL[EcICMUJqWGDNZEXGJWFEXNbZRELFV]XQbAZFrYVUBCLNFCHmJaMIDDHXHEhQNXZ_TARFHVB@DTQIRR@YHAJVnAbKFUEMLd\\c^ÍÞ'], + encodeOffsets: [[112711, 20572]] + } + }, { + type: 'Feature', + id: '469006', + properties: { name: '万宁市', cp: [110.3137, 18.8388], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@^J@ZTVbET^JBGLFPTHld]`FLQhcVanx\\\\ZbLHTGj\\FLP~fIZRZPVTQFSVAFJE^NDLEE[~LjsxVTG\\NZZNGlLRRGLJTV@hPZANN^@T\\NEPPbDZXO`d^HSvcJDIV\\XZAJUFCLNP@PQ¤@[ïKLÑIÏ]ÇE±I{uƒ­YśUćFcYUmsVeBSVgB[RO@aYYPO^]@UVaNeDShMLG\\EfFVE\\F`'], + encodeOffsets: [[112657, 19182]] + } + }, { + type: 'Feature', + id: '469027', + properties: { name: '澄迈县', cp: [109.9937, 19.7314], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@T\\GJCXJH@fJDDPNCNJENN^NLHBNSx@DDYbBLLDRbjZTj@`XXTlG^Xr@PJLW\\WLTlWR@HDJTD@X_PO@STMDNTMVV@NLDM`M\\XM\\JNBH[PYZ‡úYzŸ`Ċ\\ÎÝd]c[NKVFLEBaUmBIZGQ@JQSR@CUAEGBQ`SWYRMFgWGCGJCbNnIDGMEDKVAZUEqBYRa^WEUFKYQMaFWXEHIFWMYHCrXVIIiaK@aMCUYNSIISTwXALKH@XWXIEIJQCG[IEQDE_XSBaa[AIPW@]RS[FWS[CD]PEBYNGFSaSyJG]@ugEUDQlGHiBKHUIoNSKqHFaPMICK]UUHIPDJMuCA[SCPIDIOILGAEmU[POPBVSJDREBGS[QXWSGcT}]IO_X@TGHoHOLCX\\ELT@LYTD‚aFENF\\lj'], + encodeOffsets: [[112385, 19987]] + } + }, { + type: 'Feature', + id: '469030', + properties: { name: '白沙黎族自治县', cp: [109.3703, 19.211], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@D\\RV]dTXELnHr]^@LETBBRTHPi^[@U`QTHDJ`MGSogDIPKdJ`WVNHCXHl_DJR@AH`FBVPUJLHKNTJOFFZON[ZEHFCJlMJ_ŒCn`CJVNGPLTNDFIdVTWEIPmRKMc_kDMWGGUTAtJLK~\\f{pqD[LAVXRCH{HC`eŒJ`}@W^U@I@_Ya[R[@MSC_aMO@aWFmMOM@‹haGGMEmaQ[@MESHaIQJQ……MckBIw[AOSKKAMPSDSLOAV_@@`KJRbKRDfMdHZERgAWVsDMTUHqOUr@VQXTT@Tƒfg‚L^NH\\@heTCZaESNObHPƒHeZF\\X^ElM^F^'], + encodeOffsets: [[111665, 19890]] + } + }, { + type: 'Feature', + id: '469002', + properties: { name: '琼海市', cp: [110.4208, 19.224], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@TP\\pATHTGlZDJGAQjE\\Rb@jVBDCN`JZ[NCNHNXbULPrP\\KNbMTLjJJRFP`“pNLZz^FLRHjVPZ@hxVKbHBHMNNJFRlLzGPnNHhIrHHADcPWdUAmEMVQDSKYHY\\EhBN^HpXGNDBNNBnIß‹Å_g{³So]ã@ORO@KMEDIVYB[WJUICudGTc]P_YWaCOOMFS[]@MMYBgOU@ISHKQQkKMHYY[MSHwUit}KF\\KFMCF]EIUBETSROUKTLT[NKTWREfJbCHBZKTFTKh'], + encodeOffsets: [[112763, 19595]] + } + }, { + type: 'Feature', + id: '469031', + properties: { name: '昌江黎族自治县', cp: [109.0407, 19.2137], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@`ZĤd–`òüˆ˜ “BSPGP@VSbQ`‡@]HC~T^SE]N]FkW]E[fY„GGOPaTMbFDYfS@g[MGK]h„e@SSSRW@UVqrPVGNStCXUhBFQGYNcCeLQQaLI@_`@EUwcEaCUaMc@SK]Du`MSkKI‡~BVNL@X`‚EvYŠwHcTU@MIe@SXJbIPNVCRXbWbSAWJCRXFFL]FMPSjCfWb_L}E[TaBm^YF[XcQk@WK‰Z“JYRIZwŒ¹ '], + encodeOffsets: [[111208, 19833]] + } + }, { + type: 'Feature', + id: '469028', + properties: { name: '临高县', cp: [109.6957, 19.8063], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@jD`hNd\\^dZädĒH´Op@ˆùZY\\OAGIMN[[W_NCNMKU@NUMSNCTSP@`O@WSCCI@GXQSkXKX[IK@OWqH]SkWW@_SiiYQaKCAKZaCCw@MTGAMKM]FMMIMDSM_HGHRPKCBGSJJIYH[QOJCHMBDGQJECMTDQKFGTCEGTF`NFEDMFaGSNwIiTGhYJD\\KZODC^@FTKND`XBHKJNKFBNhG^FJMPcHEZF\\QPRjQTAdgNOPgQaRSê'], + encodeOffsets: [[112122, 20431]] + } + }, { + type: 'Feature', + id: '469034', + properties: { name: '陵水黎族自治县', cp: [109.9924, 18.5415], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@R]NC`YL]FoN@V[vBXVFNL@TRZalnVFVP`DlOZkVSXEE_F[EUFeH[NKTgfCbMVU^@P]ZObZP@\\QhATUfAtUasñiāEoI]eYǯ@aKmaeƒWuCºKÜKpnbHbYfUDSNCPJTRAHJTDJSfDNLHXC``VBNGTYCQDIXMDSP@xLNEFRNXBIpVNLXah@RgF@`qOML@LJNSPLbaHAh@Jdj'], + encodeOffsets: [[112409, 19261]] + } + }, { + type: 'Feature', + id: '469026', + properties: { name: '屯昌县', cp: [110.0377, 19.362], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@\\OnVBFKHPJCJOJTDB\\vDINOCGJVVL^JDONEbrGTLpMVJLGjAHGRkVChF@vH^zIbTETMHAZOFC^\\DXT\\EffAP\\PdAV@UIYfS|S@YPICMeM@sC[_A]VQEwyHSMuNcAUlQJMVGMS@mVBZPFO\\CSFQK[LqDMACiUa@[QiFBRIHYCHkGSBS[oSOqB‡IE^QHCRWHIXsHU\\UC}JEjMNAN_ZƒAIhSEYfWDQGaPMTL’ERZTJb``NHV@'], + encodeOffsets: [[112513, 19852]] + } + }, { + type: 'Feature', + id: '469025', + properties: { name: '定安县', cp: [110.3384, 19.4698], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@JjDNdJ\\FbKPXfZ^Ij@RZNaVSc[MsMOHQPDJcLIJ_zCG[HQxWJBHXdENRR@XQFWZQQGOFSWUCI[WCJuRGLXNMPLhCl[Ta@SqGgJMGOmyHkKEQMINMAGaGULgwY@UOGiKQ]EYyMK”oO_QEIIKiNSMa[LqOKOaVMWMGMDY\\_IKrL\\ERT[DEPYOUA@nNTUHINkRBVMdNvGTxzRF^U`BD\\@tfNDNOJ@Z{TeTJZ@VU€cB[OBOeeQT@^OXBJb\\AbWTF`RCJFH\\RDJIJFXW@WLGBKxWTSJJMTVZND@bbL'], + encodeOffsets: [[112903, 20139]] + } + }, { + type: 'Feature', + id: '469035', + properties: { name: '保亭黎族苗族自治县', cp: [109.6284, 18.6108], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@FJp@fxpQ\\ApN\\GNPNBM`HLMrXLXj\\PEHnI@WUCEM\\GTc\\GZYHTPBHRCPTd€H\\K\\@HXi–BJILJJAVNTOZJNtFPC`YxDPWci@IBgbGKaTOIM@KNKrP@_hE@QbgKWUMJoWAQMFEKM@wTONCJWRCZDHSAM_UD_GWMKeCITSCGIQBGXUHQoMEEGWDQIG]FMQBMaFGueFeSQDUSDSKOCSFMLƒUaPWM_PaEGFETMX]RCRR@HXKN@JNnXXEŒSPaDI\\£FkXWIAX]xB\\GN'], + encodeOffsets: [[112031, 19071]] + } + }, { + type: 'Feature', + id: '469001', + properties: { name: '五指山市', cp: [109.5282, 18.8299], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@TCNOLBTLBPx\\AJdl†NR†RIbJTGNF\\@RcIYbmHoLQdKN_fCJYbDRRXKZFVEZVXBXIJBXMdESW[CUYHUVQFQAqsEIMPYMSBUIIJKAIj•GW[@[LGScDOGQOAGSYZ[HSd[HFNVD@XmJFG[OWiWKNqGKN_MAMO[HoM[BoRewo@Y^HpITSFENc`MVCdHNIVCLJFI`NFIŒP`@VZbaf[FFJG`O\\WRFA@PVPFPPH'], + encodeOffsets: [[111973, 19401]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/hei_long_jiang_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '2311', + properties: { name: '黑河市', cp: [127.1448, 49.2957], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VÈÞ@Žkx˜nXްVÈa°V@kôw„b‚š„JVškXlVUx„„@ŽlL@xkVV°ƒ„VbxlVUnVxk@ƒ„ƒKkŽVb„Il„@°kVl„@„™lÆnkll@@V„VXƒŽš@V„²bUlƒVlV„U„VÇn@nkJšŽlkVbœ@›x²V@n°VUnlKU„n`@n°bWLnVUblVUVVbknV`°kkŽl@@V°@nz„J@XšxlWXb°n@bƒĠlbXb™bVbƒJ@Všb„a@„„@lbUbšVmnœ@lšVmnIW‚œ@WbÞ@„n@x°@š„ĢaƐéϚnœ„‚lȝĠŻÈwm@ôçU™mm£Xy°UV™›@wÈ£Ǫ¯kõÝçUњ™Uķ‚ƒĢkVфÆšÞU°nŎ¥ČUĊx°m°¦żVƐœx°ƒÇ£@y„UônރÆ@Èĉ°Kô¦šW„kWU—bÇ»@™ÈĕWÇÈ£ŤU@›n£ÆUUKVamanwŃmÝJ¯k@JƒIkaVaUUÇbkaÆÑkWmÝUۙ™Ý@™ƒwnU±ƒ@kkV¯KUkƒJƒ¼U¦ƒšÅ@ówķaķůV¥Uaó@Åwmƒƒ_kVƒwĉ‚ĉmmn_V»™a@U™ƒVwķóƒ‚U¦LǫéóXÇmōLǓÇķxÝkƒƒĉ™kmakbUͰ@W¼„@bƒšÈÆ@Ė™L„l@„°J¯„mkl¯L݃±L—amJ@¼ƒ„™VƧUó„™UX˜ċb¯ńVbkÆÝI@llx„k°V²šV@Uxގ˜L@b„@b™`ƒšÇzkókݤ@ğ¯Wƒ™LĉǙLmmnċVkbUaƒL@ޝ„‚bU°ğL݂Ý@'], + encodeOffsets: [[127744, 50102]] + } + }, { + type: 'Feature', + id: '2327', + properties: { name: '大兴安岭地区', cp: [124.1016, 52.2345], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@k›ƒϙmƏêġb™ƒ¯@@wƒmÝ@XV@IlŽl@bUxl¯VlV™bV@ULVlUV™_kx™VVV™ÈÝJ@„¯šU„™lm¯x@xóÒĉ¼m„¯Wƒxţ@Uz¯ƒWwnUwťƒ@knƒWƒ£óVƒUUwğyó¦WI—Vmm™I@±kwÇ@@bƒ@ĉ¼ó@¯wó@¯aó¼›KՃaUwmWUwÅI@aƒKó@Ua™LƒaƒVÅwō¼UUÝl±I—¤VxÇx@zkJmnn‚mbnz™xlŽƒl¯ČkJl™°@„kb„Žmx@x™@kêmVnŽWxôXšxU°„bWLóJnÇWĵ„V¦™ŽƒUUb™b™ÆġK™šk¯™VU±aXmċÑUwĉKġ„k„™ŽVxk„ÇKkbƒIƒ‚ÛXWl¯bƒŽ™X¯K™bĊš„„ÞVƚnŽĸ²lxUްn°òÈb‚¦—xVbƒŽƒ@¯„Vx@¯VķÞČlĊ°KĸŽȘI°¤ČIôŽò»ƨnȰKǬ¦ôWŎÈƨwlƒnKVXmbX`lbšwkVW‚XXŽ„L°a„ƾaĊ£nƒ°@°¥ŎzÞ¥‚»œalwôkƒJ„a@ĶK„£„bU°ĊxźVÈUĠ¥ƨ™VI@XU°x°Ln¥šw°UmwXm݁V¥Ģް@nU@mÆ£š¯lKœšÜw@aÅU‚¥UaÝIkmV²‚nn@Ķ»@Uk¥VKÞ@ÞÛ@ƒkVmĢa@_ƒJómƒǖ¯Æw—óÇa@alƒUwšwĢřšk@wÆWXUWXƒWa™m@_ƒ»ÇéXaĸwVa@ÝKkUWkX‚kšKXxƒn@lĊV@¯m¯nřÆwš¥'], + encodeOffsets: [[130084, 52206]] + } + }, { + type: 'Feature', + id: '2301', + properties: { name: '哈尔滨市', cp: [127.9688, 45.368], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°`„_šJlUšŽ@„„@V¦°JUšŽnLôlnŤ@@šÈaUÒVbkbl¤ƒzk°ÇVÛô°IlVUVôU„xÆU„Ž@bźĀ„º@¦šb@l²‚UVlœ@°ÒĠxšnXxÆVô¼Þ@Üx²KލlƒVѰUȰôlwô@²ƒĸ°„lanV@„šVŎUll@bÈnÜm„wĢ@la@ÝÞb°UXb˜lŎ²ÆškšV‚I@ŽnJnĠްknƒÜbĢwna@a˜kÞKƒĀ„a‚™œ‚‚IVbU¥wĠwkô˜xnLƒċVçkaUƒ±IUmnġW„°WôĉšalƒÞÅĵ¯@W¹XÝaƒb¯a±X¯ºLƒaVƒmkLóƒƒbkaƒVUKVkkKV_@aÝykk±L@ƒÅU@yV_™aU¥ówÇx™@UkVƒn@lƒkÅlwšWVwUkĉmkklW@šašbVwnWWƒ—wWL™™@Ušƒ™UƒÇLšÇmƒ„@wƒJĉƒL¥@ƒÝ_@a¯y„UWw¯ƒ¯Uġx¯aÝXVmaU£ó±›¯nwƒa¯óÅVƒXman™„Uƒ›lUXkWa@mkI„›ğaƒm™IklÇU™„kĊƒƒzkKƒš„lU„ōĬlš™„@ŽnX°@llUxʲmKĉVWwk@UbUK@bmVmI—ƒVmwaWxXlWȁšmºšÞÆbUxV@ĵńWÆĉLkWUbƒaWzkbĉ`U„±LklōwUVÝ£™UW`Uwk@mk¯VkaõVX@WbL™K@XƧºWzxƒK@lmX@bkVVÆk¼Vbk@Vn'], + encodeOffsets: [[128712, 46604]] + } + }, { + type: 'Feature', + id: '2302', + properties: { name: '齐齐哈尔市', cp: [124.541, 47.5818], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Þ@ށĠKV¯a°ƒ@„KVblaČU‚mnnšKĊȚKX„°ŽĠ@Þ£ôllÈy„™š_@a‚ƒ@a—KݍVwU@±™¯Uƒlkw@kÞJlÅUa°ŃČaW—šVôƒƨVšU„ƒ@»nI˜b²Kބ°Klkn°ƒ¯I@ƒƒkšK@ĕÇń™@aƒX»¯@VĵlaÿVamI@aÅÝउýƒĊȗJƒôȁÅkmƑۃ@kxġ@@l™aVk¯»ƒīŹaƒkƒ¥Å¯™JUaWU@@w™aƒ»„KUkÆkUm„UmwÛ±±UUbUŽUXƒwWwÆÝk™lkUanaWwnKl™kal¯ka™ƽa›kÅx™a¯@™amb¯V™lÇwÛĀ™V@x™šmêVƜVV‚aôV„wÈx@šˌx„¦VÞ¯VšlmX@‚ƒL@¯Ua¯LmV@„„°X„ċK™V™ƒ@UƒÈ@‚¥@w—ƒġIU™km¥Źwƒ¦¯lmn@°kxVV@¦óam„n¦l@nx™lĉVóšmx™n™ÒĉĀĊ¼„þ„šǔêÞ°ˌĠÞÒ°ĀɲĀƨźˤȤƨĊ°w@£nymwnkUUV¥ôÑVmkÆmUUVa™mVIkmô„lxkXÞþƒbl„ƒl@kV„ƆƒV„xV@š¼VÒ@šŽUŽšnnނJ'], + encodeOffsets: [[127744, 50102]] + } + }, { + type: 'Feature', + id: '2310', + properties: { name: '牡丹江市', cp: [129.7815, 44.7089], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@U`lLUlVL„Ulb„aô„lKnŽU„„b‚K°¹²W°b„aÞb˜knyUlUkamř²L@m°@lšmš²n`ôÅlK„x„ÜKnxV@„l@œƒ›ÅXyW_k@™wm™ŹĕmƒX™»‚ƒÛ™l°ƒôšÈ„»š—ô˜ô_WW@Uœal»šwU@@wšUVƒš@VƒXI@w‚Ģ͑ÞȻ›aU_@mUkly@¯óV»XmWUXUWmnm¥nUUaWLk»Æ²IÇa™wÅaݰ¯nUa±a™ƒ™@¦õÆğ„@„™@Åb›xU܁nÇłlb¯¦„ôó»mƒ—@±ƒUk@Wwƒa¯xU„V°ƒxXbǎŁUV™™ƒK@¹ƒKUaȯ@ōݙXƒal™ƒlÛkalÇUǫÇńÇakbÝƆ¯nlš¯Ž@¼™VUx@x¯W¼™Æ¯šmĖ„Ĭ¯ČƒVk‚ķÅmxœ°ô²V¤‚bUnÞW°bĢw°V°„XxƒV°z@bÞ`@„‚¦„KĊŽ„I@xƒŽn„™ÈÈK‚„šV™„@VššXK˜xX„mXUx™a™b@‚kXllĊnVlUx™XkxlÆk„m@U„Vlš@ÈwôxV¦šbU`@zÆV@„²KllÞz@b'], + encodeOffsets: [[132672, 46936]] + } + }, { + type: 'Feature', + id: '2312', + properties: { name: '绥化市', cp: [126.7163, 46.8018], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ऊþÆÞ@bnJUb‚ĀnblŽĊš„„ÞlĸwǔÈŎKÈnôWǬê‚KV¥„ĸôUxš„@VšbU¼m`nnĊŽĊ„xlUšmkaVÿšLšwš@°»UmbKmݙUšwUmVknKUUl¯ƒKU™ƒUȃ‚™nK@ĠkX±lX„°„L@¯¥@wV_m›ĵ¯Ww™L¯ƒUkōƒÇVU™l›w—V󁱃¯aƒVka°wVk°mÞ¯Ŧřƙl™²™Ŏk™U@ƒmUkb¯ƒķޱ„ó@kxȯó¯VUÒk„ÝŽ±LÛwÝ@ó»ÅUWw™mğw¯Ñ›@UkV±@k™a@¥ƒ¹Źÿ@aƒÅVƒwóVVUkU¯JÜóÈUl¯„yk£laUaVÑÇb@™ţ@kmómK™V¯IU¥ƒ@@ƒ™kV™Iƒ`@ô™¼„blU„lƒ™bÈb@xÇKkĢɳaÅɆō@ƒŽVƒK@z™@@¥ÆKnÜ@@aۏUw›wnU‚ķ@ƒ_ƒV°Ž@„klVššnULVVÞbVl@°™@nx™n°LŚÆlV„ȃmU²@VmĠLƒx„n¯xkWƒzšJ‚wnLmbXbW°šÆ‚™²™@™Žšx@JVx„L‚Ā²Æ°I¯º‚È@ÒnÈ'], + encodeOffsets: [[128352, 48421]] + } + }, { + type: 'Feature', + id: '2307', + properties: { name: '伊春市', cp: [129.1992, 47.9608], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƒKƒ¯kWW²ğl@ŽmLšÇ„„VVš„Lk°VVmLUlVn™xšVnނLnaVޝ¼™@™x™KUĀlb™n„`n„Æxô@VbU¦ĸŰĸbôxÆ@„™V¥„»„IVl°LUŽll@²„mV„x@ššÞܚÞVnŽlXÅÒlbÈaVVUblb„J@I°lÞIn‚Æ„mxnbUbVLÅVm¤@œţVǤXÈÇĖ@šÈ¼˜aXVÜaXbWŽnzŎašř„KôbšUlw@¯naÆKnUU¯Üa@mkkVUĊm„™żÝ‚ǖŽ‚K„™°L²lÆI@ƒ¯¥ĉƛVaÞk@ÝVaĠlnUVwƒœómaƒ@™wĉ@™a™VƒxamX@aƒ@UaÅLƒaVWƒ_nWm£nWm_ÅV¯ƒm@m„󤁚ݦƒ¯ÅalmX£ƒ™VWUŚw™mÇ@@IV™„WUw@ašI@„k@wŎ»Wƒ„ƒ™ÅVaœK›Ika@¥lUkUlwÅwVyÈwWU@a¯U°m—Ç@UçƒaVa¯mV»ÅwÝUlƒUk™V@k„mUk‚X£šw°@@ǃaÝIƒƒam™Ûam„¯lğmmI@J™U™l±ÅōŽ—kWa¯VÝa@Þkbġ@ƒxÛnÇm@akkōVōl±škšÅšťŚÝ°¯nUl¯xlb„U°b²„ô‚˜Uœxšk‚VÈUŎ„Vl°„šKXxͰnœU`@x°¦@'], + encodeOffsets: [[131637, 48556]] + } + }, { + type: 'Feature', + id: '2308', + properties: { name: '佳木斯市', cp: [133.0005, 47.5763], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nš„b‚„ÞJ„b@ȯ@™xW¤Vlƒn@lšUVlk„ÞVÆxU¼°nUb„bVèÈ@˜ŽnIn‚@šĢmlUw°™żƒ‚VUn@lnL@VôbšwĊ‚lœ„JķĸĢl„wôwƨxVVUƒŦšxšLź™Èš°`nnĠwŎJސĶwôJ„@¤Xn܄ĸlšn°¼È°lŽ„„Uš‚b„xš@„l@ÞÞÈm°„lôwšL°¼ĸ‚°Þ²nĠ@ôwÞ`ŤI„V„ÒĠU„„@„VJĸbƄ²@°ŽĊKšœ„JĶa̐Ȱ@ô¥°nš¤‚bČUš@Vx„mUw@a݁ţƒÇ™ķƒ@ĕķīU¯²@ÆmVÑô¯X¥ċç@™ĉ»U¥ÝţKWVÅkUVÝŎUmǍÝx¯aķxÛUóL¯a±óōb¯™ƒÑŃVÿƒ_Åķ„a@UƒK@wm@Van@UmmLVa—@VImmXUWƒÝUřƒKUwÝUUƒkVƒk@l¯X›‚Å_ƒJ¯k™Jm„ÅLƒa@¥U@¯Vƒz¯@ƒ`@¼šmxƥšŏKÛk@±laÛ@@Xm@™ƒ@xƽ@WŎnšˣĕÅ@@aÅ@@nÝbǏ¯@ƒ_U›kUWƒkb™wÝU@ç„Wlw@anIƒ¯lyœX°m°VšašÛšm@„mVwÞK°ƒšXlaXmm_ƒ@UƒkwÝK@ƒVI™ƒXmV»ƒI@aƒ¯ğW™bġaU_¯JU¯ġŽƒ„ĉ„k„ō`±nÝÆk„™bóĊ¯Xƒ‚ĢX‚mVn²JV„lbUè„ČmK—wlóğx‚xV¦UaJ›šƒbƑÿÝL—l@bmbġx'], + encodeOffsets: [[132615, 47740]] + } + }, { + type: 'Feature', + id: '2303', + properties: { name: '鸡西市', cp: [132.7917, 45.7361], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@‚LšKVVnkšbVšÈb‚²U°VnklVlaÈL@anU°ÜmXV`œnôLƒèšxlŽšLX„˜L²ašVVmÈX@ķ˜lnU„Èl`ȹš@ŤŽ°U@x„KnnV„mlnnUl‚lVnnaŎwlVÞ҄@n¦šLVްlšwVk„Lšaގl„n҄š@xmLÞ¤Wnœ¼‚WÈLVVUxlÈô„„WVaU_VKšKXUÆbn™‚nôK„bÞw°bÆWXamVwœK˜™Uw¯WUk„UlJUwVUa™@@kmyzm›ĉw@kVwškƒW¯ÅKU_Vmƒƒ™xU@aW@@kK@w„a@Kƒ@@kVUƒaky°_Vm™kna¯K@™ƒL™wġk@@IÇóX™ƒwVakmV@mwXUWanƒlĉ@ǙUw™KƒƒóšܛNJۄm°@›w—Å@ƒ±b¯Wƒ¹„WVwŹĕ¯kVmōb¯w@aƒwmV™UUb™V™IkaVwķ™xk¼›b@VXXó`󗙘ƒ¼Çó™¯„kŽÜš„š¼WŽn„źĖnššxl@X`WzœÆ'], + encodeOffsets: [[133921, 46716]] + } + }, { + type: 'Feature', + id: '2305', + properties: { name: '双鸭山市', cp: [133.5938, 46.7523], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@™UƒƒUwó™mÑÞÑUÝÝUkmmŃyV¯ī„¥ƒUÿĉ¯mÇkaWbÅX¯aÝxƒaóLmmšÅaWV™LULV`UbƒXóƒkÇVwUUÇKX›»XmÝ£nK@wƒ™mÑkƒÝ™bƒKUl™x¯kU™Km¥ƒ@ÝÑkUōxmbUmkVkmmnkUƒmmƒL@w¯Vţ™@Ǻk_ƒÇmV—k@ĸVx‚VȰlLkllšUbōwƒnVW¼nlUx¯XmWUnÝ@™xÝUó¼¯J@LVbkJWnkb™W¯„ÝLUxƒn@‚™n™Ü™b¯U¯n›Wkz„°mJ@bkxƒX@èÞVšxlaX„lVVœ„`°@ȐÞa@mÆ@@bÆ@ˤĖm™Xōƾ@@wš„n@@WÜ@kb@²ÜlŐLƦ™nw™@»„_°@„y°UV@@¦„bÆKnƒšI°l„IÆ`œ°W@k„llUV„ÞVVx„LƚÞVX„WVnnUJ˜@UbnKVnm@Ubn@@x„L@VƒbÆĸ„`UĀÆ„„Ò°šŎa²ô°bôKÜVĸw°bÞwȎVnÞōVUÆlXU'], + encodeOffsets: [[137577, 48578]] + } + }, { + type: 'Feature', + id: '2306', + properties: { name: '大庆市', cp: [124.7717, 46.4282], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@mÇ@сǰ¹¯J±ÅÿƒKUw‚I@™wšš@š±Å‚™X¯WanamKx™I„ylX°wƒm„wğKUn±@nVDŽUƒÅkƙ¯Kšmmwš@@¯UkÝaUUVK™mU™lk@ƒ¯„U„`ĸ@V‚mœxVxܐ@bÛ@m‚ÅL@¦š@@y„L‚U„Ŏ@ÆɅɴblġÈL@wÇaša„ƒkkVƒaš»@ó¯_ÝJ™wÇaÅXny›U¯¥Å„@w™bÝa™Lmm@@ƒVUŽlbğVmš™¯Xƒm_ƒ`¯_Ux™m™L™a¯b@mƒaó¦Çk™¤V„@bóJknVx™VXx±aƒLUbVxkLVlLWlƒ@nX@VÅbWlÈnƒx„bWšÅbmŽ@xœbml°b™„XbW„XVmnn`ƒLmšnbmb@šk@mwU@@š¯Jlbk°lbkšmLXxmbVbkllšÅނxX„xVWVVa²VܲnxƒVVnÅlVlƒL„¼šb@xV@XŽVbšIư„¦„lźb„Ĭ°¼Ulšb@kĢ@lw„@ƒÜlnȂƄóȘI„ĉ'], + encodeOffsets: [[128352, 48421]] + } + }, { + type: 'Feature', + id: '2304', + properties: { name: '鹤岗市', cp: [130.4407, 47.7081], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Þ¥‚™ô£nƒn@°„ÆUn`mXn¤mX„`UX„bÆKVb„@@bnW‚b„wšUšbĊ@šx„@nbšWVmƒ_mm@ó»Um„ŘWXkĠ»²¯‚¯nķšwŎ@ĊšŎK°bĸUnјKȦĠÈbÆknJššÆUĢV°IšŽšVƾƒwaV™ƒƒkÇ¯¯»™mķkۃWm@£ƒóIĵxݏōIğxmm¯_Ç™Źš™K™wťŽ„UVUŽƧwóxƒxġkĸķƒIk›ĉ™xóa@UmK@kVmUŻ„¯šVxkŽġn™‚@mmJ¯n°V@bXVÇxUzÆxkxlVkV@¦lbœJ›LUbšÆƒ„X„ō¼@xƒl@™J@bVxƒXUš@JÈ@šn™xVÆUXš‚„W¤knÆb„°'], + encodeOffsets: [[132998, 49478]] + } + }, { + type: 'Feature', + id: '2309', + properties: { name: '七台河市', cp: [131.2756, 45.9558], childNum: 2 }, + geometry: { + type: 'Polygon', + coordinates: ['@@²mŎ_lƒĊƒ„ƒĢV°°IV`ĢbšaĠX„°@b„JU¼Wnš„UJ@„ÞLlxV„„@n`lIUa@K°Iô»ÞVšwÞ@VmnX°WVwmkX»‚U„mŎxVak™lkkKǯUUwÇWUn™U±b—KWƒ™Kk™w„çóK›mU_nW¯ÛmV@bÇKkbkUml¯U±VÇaU™™amlUU™LK›„k@ƒU@mwÛLƒŽƒwkLóÆm_™±™nkޝ@@n±KnŚlbkVV‚mz—lWXº@Ķ°'], + encodeOffsets: [[133369, 47228]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/he_bei_geo', [], function () { + return { + type: 'FeatureCollection', features: [{ + type: 'Feature', + id: '1308', + properties: { name: '承德市', cp: [117.5757, 41.4075], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lLnlmxn„„IVVlUnb@VVxXJWL@LގVnnV„J˜_@wkmšK„b‚x„wXk˜WXXšKlb²K@nVVVb„L@WlU²„lKVnUJVz@VVb@lżmVUVnbôaVX@°Ub@lWbXš@b@bVb°x„@VxÈLVlšaÆ@Þb²k°@lVUŽ@Xn@VW‚LXb@¤VXšKVVVLnm°_ƨ¤@aUIVa„alkX›°k„™V@„alwUVy„U@k󙰃na°UVUUmUÆw@mkLVUƒWVI„WšLnn@xlVnK„myU@ƒU°UXaV@U¥ƒU@Uƙ@aVUkWU¯ƒaU@WLUV@bkbmKULmKkUVUkmVIUwlWV²™Uml°U@W„LUwVm@UUK@_ƒKUUÜaXw@ƒVKUU@mVIUUlmnIVVVbÈVlKnbVKš@nI˜@nVnwVLVK„K„„˜Vnb@aUIVW@In™°@lVnIš@lWĢ@°UVL@b„@VyUUƒa@w@WUnU@Wǯ™K@UkkJWaÛbmk@mVaÞU@amkWƒ@mXUKkÿƒ£@a„kl@Um°UXwla„al@nmlXnW°znW@aƒwV™@ƒakbĉ¥VmU@ƒIƒVƒUƒJkUmWU™KbmkUaƒKkUVU@KV@@klw—™WaU@kmƒXVènbmlUUƒKƒX¯JkbƒI@JmIUWU@ƒLml@XkJ@U™kƒK@aVKwWa—IWwƒmUƒ@mU@J@UaċU™aUUƒVkI±ƒk@UUƒ@UbVVm@UVKƒLƒlkIWaULUWƒXUJU„ƒ@WbUb@lkXUxm@@JVn@J@b„nƒb@Vkx@bšLU‚Æn„JšaVXnKVVmzX‚°V@_lJXxWXƒK¯bÅamUƒ@lUI›bñJ@LÇKkIÇ`kxWL@„ƒ@@bUVUb¯xWKk„Å„VlULW@ƒŽn¦Ul@I™lmUUUVm@kWƒnkKma¯XUKWmnwVwÝL„mŽ™VUbUVWb@Lnxm„xVŽmbXx›¦@„nb@`™„ƒVƒ@kbƒLU„mVUlkbVXkºmnm@@xk¦šbĢÜlš'], + encodeOffsets: [[118868, 42784]] + } + }, { + type: 'Feature', + id: '1307', + properties: { name: '张家口市', cp: [115.1477, 40.8527], childNum: 15 }, + geometry: { + type: 'Polygon', + coordinates: ['@@k™ġۙal¥@wn@nml¹UWlaVknUVƒ„Kla„@„Ušƒ@_ma@ƒœ¥WwnaU‚wnƒmw@KXaVUVašUnmWUk°™lƒnUVUXWVw™IWVóKUI@WXƒxUU@mma@kUKWLkw@yk@ƒaVkUUċaUU@Wk@Unm@UVmLm±IUƒkJ™kWƒ@a„I@m@U„ƒVƒ„Ula„@VXVƒXmVwnkWKƒKU_k@m¥ƒmX_™JmnU@km@U@KmU™VƒU@U™@Umk@@LƒmW@Û£Wƒka@wk™@aƒI@mmk@mUa@UmUƒIƒwW@aWUƒbU@kbÇ@kwƒ@makVUk™U@aƒm@aU@mxkUƒbƒKUXUƒ±KXVWLUK@wkU@V™@WXUa@WbUxƒJIƒŽ@¦VèVVX@±ê¯KUIƒ`¯UULVx@Vƒ@UKƒIƒVkLmVkKmš@nUJÝbkIUJVXšVVxVbU„VJ„Un™°bV„mlU°„XnK@Ul@lVÈVUXšx@W„@VXšV‚KÞb„n@VnbV„m`ƒUx™kW@UVkL™Km¼@lUnUJVnV„XV@Vm@@LV„klƒIkl@VƒWlŽULWKUL@mJ„@blbUVUlmzUJUxm@UUbċÜk@Ub@VšLVV„¦ôbVŽmšUKUkU@m„„@VlVn¼WbUJ¯@@„°šnIllÈl˜@nXšWlLœk‚J@bkxlxkxlXUlklJƒšXL@bW„n`@nƎXxlL@xl@Xb‚LœKlVlIXblVUbUJW@lX@VL@VVŽšXšJšw„n@WnL°K„bVbl@VI@K„@U@nmVmV@XUWI@aXm@™VUUkWmn@lmUUk@mUmK@UnwVĉ@ƒƒmU_V@XJôVVUšLVUn@šllUnJl_n@šml@XŽlLlw²LVJUL@VmbVblVXmVnlš@Ť¦„nn@܎@bšl„@@XV`„Unb@VlLVb²J‚Xn¥ÆÑ@¥Þ@'], + encodeOffsets: [[118868, 42784]] + } + }, { + type: 'Feature', + id: '1306', + properties: { name: '保定市', cp: [115.0488, 39.0948], childNum: 23 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VbXWš@@UlV@xVLXKWU²LV„VW„L„alVnwV@@b„n@bšVVllUnb„@lxÈ@laV@„aXV@b‚X„x„J‚nV@VVb@nnl@n„J@blšl@„ašƒU_VWUwVUškUm™Ukb±mVwœU@VIUW@UWk„@VU@ynL„m@IV@‚bnK„LVaVmnIlaXwV@@WVL°@@xnX„@V`V@VbUVVLVKnwnL@ll@@_V@VVnaÆ@œKVXÆ@nƒ@wƒKmU—™Wm@km@kÜKXU@ÑW±nIUwVƒ„Kla@I°wU±kškmm¯mƒ_ƒJnƒaƒwW@IVaUama@wƒUƒmU@mVw@aXk@mWa@£km@aƒ_kVmUnWW@¯bƒkUmk@ƒVÇm@@kUU™KUU™@UVUamVUaWIkb@xU@@amUkKƒVkam@@kVUkUWmKmUkLUb@xmJƒ™U@UImVÛVmnUwƒJƒU@VƒX@UWm@Ub°¦UšmxklmX@`ULU@@UW@@xkn¯@makV™UmxUb™°ƒlUšƒbUbƒnUJƒUUVƒa™LkbUU›JUU@mUUUƒJkaƒ@™xUIWJƒUnƒJ@V™zƒ@kb@`@bln@l™bƒŽ@X@š@š„@Xl‚bnbVb„@„„VJlInlšbVw@U„K„l@lbnan@Vb‚JôLn‚UzlV@lÈLVbVK@LVx—VWXX`WxXz‚bV`UXV¤nx@„bVlVnVlUL'], + encodeOffsets: [[117304, 40512]] + } + }, { + type: 'Feature', + id: '1302', + properties: { name: '唐山市', cp: [118.4766, 39.6826], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„@VVl@²„lJ„UVVšbČVVb‚@@InV„@‚V„nXx˜JXb‚xUL@b„Lšl@VlI@Wnk„KV@VXnJ@I„Jla°I„W„LVVnkmaUç„WVkôaܯ„@nV°wnJlaV@VUnUUaW¯wXWWwna@£UaWKU¯ƒ¯@aVUkKUamUUƒn»‚an™„IVwUWlkš@„LlWVakU@K„_lƒšbÞU°@šy°n„@„KÈkWW™ţ¥ĉōƒkġWUw¯£¯ƒÇwţwƒ@kK@kƒ¥ÝwÅbǤېťV™lW°@ĸ™x@VVVULVLkl@V@Xƒ`Ub@Xm@UWbƒk@ÆVbnLWV@lnXUbl‚@X¯lmU™VkKWLkK@_UK@U@UmmUxmVXLWVULkU@`W@ULUK@XlJXzV@@xml@VU@UX@Kk@WbUK@Xn`ƒXmJnšmškxUVbUVlVVxUbV@nKlL„kVKÞbVKXI°KVšmVUIUKULVxVJVLkV@Vƒ@UbU@WUU@UbUK@b@nƒV@VkLmb@b'], + encodeOffsets: [[120398, 41159]] + } + }, { + type: 'Feature', + id: '1309', + properties: { name: '沧州市', cp: [116.8286, 38.2104], childNum: 15 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@ln@UȄŽl@Vn„l°aX@mXnVlU„`@bln@¤Xb@nWl@bUx@nnV‚„„V@xnbVbUb@J‚X„x„b‚mXa@k„UVwlW„k„KôVm@w™kkK@kl»Èƒm™VKXkla°@XVV@VI@ml@@Vn@VX@V@J„@VxUzVVšš²blVk¦@šĠ@@»š@VK@VÈLlK@XnJ@alIUl„a„VVbš@„n@a„U@WUIV@mUn@mKXml@lL@LnWšb@XV@@a„VVb„V„@VV„IVWÈb˜IÈ»ƒǟlWšaVUÅUƒƒ™Um@kVU™WVkaUwmaóUƒJUU¯ÑU¥mk™¯UaƒKÅnÇyóXmWÛX¯aċbÛa›J—W™ÝU¯»ƒaóóUm@IƒšVVl@bƒLUJWLX@@xšXUxl¤V@V„nVUV„XVbVš@Ž„@@VVn„°VŽ@ţU¯VƒUmƒUWV@mUXƒaƒbUKUwUaÇKn„ƒVk¦Wb@VnLmV@bkV@n„xW`Å_UVƒV@bƒUklVX@VmlUƒx@VVL@x—VWVL@VW@UUm@'], + encodeOffsets: [[118485, 39280]] + } + }, { + type: 'Feature', + id: '1301', + properties: { name: '石家庄市', cp: [114.4995, 38.1006], childNum: 19 }, + geometry: { + type: 'Polygon', + coordinates: ['@@la„@šy@U„I‚m„VXIVJšw„@lb„IVVnV‚@VVœIVVlašK„bVU„VVI„mVa„aV™„kš¯VanwšVlUnb°@lm@wX@@VV@VK@_nWlknwV™¯¥Van@VX‚@„W@U„V„IVxnmÜUnUVJV@„šnI@wValKnV@k‚mU£na@mVk°K„LVa@UU@UƒmknWWkXU@aWW@@km@UaU@@klK@UkaWaUnamm@U„a¯wWU@UkƒL@ŽUn@x™V™lUXVJUb™LmU@aUWUkmKkLUUm@mW—XƒaƒmmkkWUm@@U¯JUUm™kU¯@mKĉxÝwÝ¥LƒUóŽmwkUUUWVkKm™kKmLX„lxVLVxXJ@nVJnz@VWL@`nX@šƒxƒ@kVUUmJmIXx„JV„ƒnUVƒ@UVV„@LUšƒ`UXVVƒ„ƒlXL@l@b@VmX@b™xn°™UƒbkKWLXlW@@bƒK„mKULmakLUlmb@šXb@xmXU`V„b@`lLx@nWVXL@‚°WlXnlb„KVK„XVb@˜X@l_lJ@V@XnŽ„I'], + encodeOffsets: [[116562, 39691]] + } + }, { + type: 'Feature', + id: '1305', + properties: { name: '邢台市', cp: [114.8071, 37.2821], childNum: 18 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nKlLnšlLXUVVlVnxô„V‚KÞ¦ÞxĊwnL°@lVnšVV°I@Vn@V‚lXnl„n„b˜WnXn@VVlKnLVlVX@bnVšKVaUIVWškšU@wVm@¯@U¥VmU_°lšK„k‚w@LX‚Va„U@wšUƒUUKlUóW@UVUœUlƒ°K„wlKU_na„KVnlKkkšWWa@IœJVa@IlJnU@„KVUUmVlaXUl@lm@kXWÝÑnkƒ™±™k@wğ›@@U@mKĉLmVJ@zmlnŽWLUÝJU_ƒ@@šmJkXUVlbklÝ@Ýa™b¯@¯±JÅwġaUU@ƒkU™@mVI±bUKƒL™WUXƒJkaƒLóKULWbUVkKmnk@@bmLUŽƒl@b@mnmJkUULƒaƒbnŽmn@lVV@¦n@„l@b‚znx@`Vz@b„xnV@xl„lbnKVx'], + encodeOffsets: [[116764, 38346]] + } + }, { + type: 'Feature', + id: '1304', + properties: { name: '邯郸市', cp: [114.4775, 36.535], childNum: 18 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„bVKlVnInm‚@@a„kVnK@al@nmlLVUXaVKôL„Klb„IVWšX„KVL²a‚JnUš@lV@„VVĢbÆx²I°Ž°@šaÞbÞ@lkkaVUlWnI@™„@V`ÞI‚VXKmnk@y‚InUĊKƒÇkUUamUUkƒƒ@aU@U™ƒk@WUwVkVJVkkw°a@„mK@UX@VV„LVW@wšwVa@¯Xm@@lUIWaU@UWkXWmU@UwmUkKmn@lkVƒ²™VƒaULUVmJUUUwƒLma@™UmkIUm›L—mVšmx@b™LUamKÅL@VmbkU¯KÝamzkJUb±Vkb™L@lU@WIkJƒzkKmKƒnUalWkkKW@@nkbk@WW¯XUVUJ@XlJ@Xƒ@XlWLkUƒ`VUnaWa„UV@UVIƒaUxUUmVƒK@I@W@DŽU@@U@bƒ‚@nmKXmx™@UxkVWUX„@`VLlL@`™zX‚Ýb@b‚„@VUVkIUJVz°KVlnLlKnL„xlLVVUVlXUJ@nn‚„I@mVUlbn@@Žm„@bV„nV'], + encodeOffsets: [[116528, 37885]] + } + }, { + type: 'Feature', + id: '1303', + properties: { name: '秦皇岛市', cp: [119.2126, 40.0232], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lnV@Xb˜škx@lU@@LUVlV„LVbnl‚ašLXVVn‚l„I„V„U„JV@UnĊ¦la„bš@nJ°UmƒV@„wn@VU„JVI°bnWlXnWVLVK²b‚akk„lI@aUaVƒUwVUUalaVwnUVak¥šX@W‚kœLVÓm„mUK@_lWš@n_UK@alÅ@ğÅƑŃݍmƒ@їţÇlƒLƒ@¯m™z¯@ÝV™ak„ƒ`@LlVUbkXƒK™@klVXUxƒJmšbm¼V„nVVblLUV@b„°V°XLVb@¤mbXxWX°xXŽVbmVUVU@kbmI¯xmUƒ@Û°óbUl'], + encodeOffsets: [[121411, 41254]] + } + }, { + type: 'Feature', + id: '1311', + properties: { name: '衡水市', cp: [115.8838, 37.7161], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„KVlV@X°xƒb@VnnmbVŽXblb@VkL@lV@Vbn@@l‚@XX@bWVXlmXnlV„V@@VUbƒK¯LUl@nmbV¤n@l‚LXnlVUV@ln@lb„UlLnV@bV@@wlaXJVbnUVbVUš@VVšLVVn@VVX@@U‚KXU˜U@wUK@U„wVnk@UUWlk„V@a„UVUÆ`X_ƒw@mlU@anUmK@UXal¥„UmƒÈLVbVxVL„a„bVW@nXU‚Vn„„V°UŤV@Uƒ¯Um@Uƒ@@U™UaƒWVUmUUƒU@k£Vw™W@wW@XKƒIUa@wU@@al@UK@_mKXKƒbUU@aVKmš@Xmƒƒ±@kbÇakLğVaUw@a@ƒmkUJƒk@ykw@£ƒWX@lknk@WVkbUŽVnUVƒL@‚mVkI@JUb›I@JXb™XllkLUmƒLmbV`kLƒx¯Lk„›VUV@VôXkVVL„V™V@xƒVUbW@Kxƒl™L¯kV`UnV¦°@'], + encodeOffsets: [[118024, 38549]] + } + }, { + type: 'Feature', + id: '1310', + properties: { name: '廊坊市', cp: [116.521, 39.0509], childNum: 9 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@la„Ušš@šUnL@VWbklWxnIVV„V@X„JlbUlšXVbn@@K„mV@@X°WVInJmn²@lmVbnL@amKV_kwlmX@@LVamaXaƒaVU@UnJVanLlUkaW@UaVakK@IlKUU@an@ln@alKUƒkIVa@a@klaUKUV@UkUV¯šKVƒV@kUmƒU@@a¯ImJUU@VV@UL@Uƒ@@WXUWa@Ukwm™@ƒX@@w@al@@aVIUmVUUUVWUknK@I@™l¥kU±a™™UUVyUwƒ@@I@UUWm@@Uk@@nUJU@WU¯@kbWlULnšÇ„k¼@llLšl@xUnóŽƒLƒlkXUxƒV@lWb„I„`°nnn™llŽV²¯x@JkbƒLU„VxmJX²@ÒWVÛL@lln@‚Xn˜šnV„L'], ['@@@kX@Valaa@KWI@UXW@WanaUIW@UaUKķŽk_W@UVUKUš@bƒ@UamxVXnJUbWVXLVbn@W°kb@U@Wó¼mIU¼k`V„@bVbl@„lX@lUôVlUœIV`lX„Vn@lUlVn@„l@UVaƒIUWl£Um™VWU@@UUKlUUUnƒVL@KšUnLVWUa›@™U']], + encodeOffsets: [[[119037, 40467]], [[119970, 40776]]] + } + }], UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/he_nan_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '4113', + properties: { name: '南阳市', cp: [112.4011, 33.0359], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lKl@nVV@„bn„@VVnm‚nL‚LXx@š„‚VLlKVU„IXWÜ@șlbl@XUĊUlwnW„LÞw‚m@ÞUVmnVl@nX‚JXLm@VnnJla„I@VkxVb„@VŽln„J@knKVn„@°aVanal@XK°b„‚@š¯VJXIš„VK@al@nV„k‚@nK„a‚b„@XL@blVVKVLXK„@VaVI°mVaX@V_@a@yUkVw„VšIVašJ°™@anIlaV@nKnXÆm@wUUV±UUWUKnaWwXUWmٝVƒam@kakImƒUKƒ»lan@VXXa˜W@@UlUUa@a@UlwUƒV@Xal@@anIVaUK@V™XmwVmUmV„LXl‚@nalLnal@„šnKlkV@@UnJ‚UXnl@nVl¦V@@VnJ@nUVVVVIn@Va„JƗn@@K@m„kƒa@kmWVaUI@a@™k@@aUL@mmaVIUKUVƒ@@IU@mƒUmmL@K@UUUU@mW@@nU@ğ»mVmbk@klW@UXnV@LƒJm„™lUnUJ™UUUWƒƒ@UnkKƒxmLa@ƒ@@lUU™bmUVWk@@nkUmam@UakJU_ƒVm@ÅlÇLUVmVUwULƒKU@ƒk@UƒVUlU@@Uƒ@UaUUWaŎƒzJƒaWLkl™b@bmL@„kKƒabWŽUVƒ_@mV@b¯JmXUbUK™¤ÇLUU@b@JkLWmkUWIkJ@VmX@JUbVXU`¯VV¯blK@LXKl„UV@Um@@Uk@kxWŽkbƒL@KkbmL@‚UXmaU@@l@x@blX@xUJ@bULUlULÇ@@VšnU`W@@nÛ¼U@@VmKUkm@VVX@@xǚ@bUbVb@VX@@x‚LUb@lƒ¼XLlbUlVVU„Ub@n'], + encodeOffsets: [[113671, 34364]] + } + }, { + type: 'Feature', + id: '4115', + properties: { name: '信阳市', cp: [114.8291, 32.0197], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VllInJlknJVkVU@mXlUÞ`VnV™VU@U@y„@nXlKV„nJVkXKWaXI‚b@yVk„VUkVwn@‚K@nW@k„KlUXVVUlbnUV`n@V_V@llX@@V„b@bV@@nlVUb¯‚WLnbmb@ŽnLnK˜b„U„bVWnLlaX@VVUX@Vln@`kL@ll@VXVJÈIVl@XÞJ°Una„LlylU@UXKlnn@lanLWWnbVI@KXKVL@LVWVL@UVKUIVWX@@XÆJ@In`@lJVI@a„WšÛnK@UlK@UU@VK„nlm„nXal„UllLUbVVšknJ@nV@Vm@a„l@@xnV„„lJVUU@™w@aƒk„@XW@_mWnUlŁUmVKV@VXwW»XƒWaUwnkWUkVUƒU@@@WlaUkkaƒIWVkm¯xmIUmƒLUVƒaUIó»m@mmwXk@a›mk¯¯l™@wƒmkLmmU@UbkUWJ@XUbƒJ@b@l@znÆmK@Xk@Ub@lm@ƒI@akmVKUUVUkU@U±JUbkƒ@IWmkxƒa@UUV™UWVkIUaW@UlLWn@VkJƒI@VkK@L@bmKƒkJmUUaUKWXk¼VxnJ@„V@@VULV¼ƒ@@UkaUlWL@U@W@IkKmL@KULUWULWKUXUJmIƒb—KƒŽƒ²UW™nWKUUkLUƒmUUam@UU™@ƒmUL@xkV@„VV@bmV@Vk@mwkUƒVUx@mbX‚ÇnVb„‚UL¯šWŽnUVLVb@xnlWnU@UVUVVUbVVlVkn@llVUXUWUXVbUJ@bmLUJnb@nVK@bl@@š@bVJUbnX@l„b'], + encodeOffsets: [[116551, 33385]] + } + }, { + type: 'Feature', + id: '4103', + properties: { name: '洛阳市', cp: [112.0605, 34.3158], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VVUllLXl@LWn@J„@bƒKUVmnL@`VblLnbV@„b@JmL@LnV@VV@¯„VJVnXL˜@nm@aÞ@‚a„k@m„IšmVbXL‚ynLšk°@°aVJnUV@UVVXk@WJ@VXLlUnJVnnƒ°U@»°U„wl@šb„WmUXƒÆ@VLXU@m@U„a@I›mkb™a@naWW@_@WXUV@@U‚ƒ²@„K@I±U@¥kKWLóLlƒa@£Um@kWKXU@mlLXUVKUU±J¯_@`UL¯Wmk@Wa„kkƒlUnƒVUVaU@KUU@mmK@_ƒa@KX@VaUIm±™k„aVKVUkw™@kaƒƒW@kbkL±UUaƒK@UUKVak£ƒ@UmmL@lƒIkmUƒ@Ualw@UƒJkbmIUmn@WKImWk@mUUnÝV@ށnÝxƒKmXkxĉVWVk@kaċšÛ@WXƒJUV@zŽm„VWnbUbVbšLlUnŽ‚lUÒnWV—VWnk@@Vm@kxm@Un™l@Ll@@V@šXnƒškJV„šV@nlVXx˜U@l„n@aš@VLnWĊ¦nxš@lbVKXLl@ރVLƒ„XJl@XXl`lIXVl@Xl‚XUVšK„wV@lanx„zUbVJ@VVX@b'], + encodeOffsets: [[114683, 35551]] + } + }, { + type: 'Feature', + id: '4117', + properties: { name: '驻马店市', cp: [114.1589, 32.9041], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@n@„b°UƂXnVlnLÜ@VLœm@n˜@na@J„„m@k„@lVšVxXX@„V`lLV„XVV@VVÞLVV°„²@lašbnxV@@b„Lšmlm„_VWnIWUna@lšLšbnV°ƒVL@KšV„LVUVaVLXK@mÆXna@wVm„a‚@Xw@KlL@a„@Va@wUkaWnIVƒla@Kn@Vn@VUl@nKVn„J@LnK@aVkVUUWƒ@VakUVanI‚²X‚W@UUU°KnUVLl@XaVK@ašU@KUI@W@_lm@KkLUKV_Uƒ@»@UVJ@XV@@mVL@K@U@Kk@VwUUm@kmWL@VkVkzƒKmb¯VÝI@WUkÇJUIUWk@@klK@_km@UVWUUW@kbmKUXƒaƒV—amLmK@namaXK°VakU@mU@@aƒa@UW@kkU@U`m@U_mVkaUVWUkVƒL@lmX@ށLm@UxVlƒUUl@zaWJXbWLUlmIUƒkLmWƒ@@z@VUVUšUmÝ_kVWŽ@nUVUlmIklmIkJUkƒl@n@Lm@؃IUbm@UJUUVU@mmI@UU@k¥mUk@WmVmI@VU@klmLƒ™k@mbkKmb@WkƒKUŽVnUnnxšW@UVLUbmJ@bk@WbU@V„kx@V@bVbkV@V‚@‚—XWbUWm@kb„¼VLn„lJlb'], + encodeOffsets: [[115920, 33863]] + } + }, { + type: 'Feature', + id: '4116', + properties: { name: '周口市', cp: [114.873, 33.6951], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lšnb@xlJ@UnLlKXUlJl_„KnV@xVL@bkbVVUè@šWb@„Ubmš„ŽkšVšmbX„VJnUl@„a°@@b„LVbƒlXx˜InmnLVw‚anJÆw²IlmnXVl°VVbÈaVb„@lkn@VWnLlUVmÞUUklƒkƒVkUaVaVaUw™K@kkaVWmw„_„‚l@nU„VVb@b„aV@VV@zXJl@@kl@šlœk°WVnÆbnbUšVJ„Iš@VKVm@k™K@_kK@a@aU@@wW@@k@aUW@IUWVUnLlUlVXKVwmk@W@—VWa„¥@k@lnƒUIÇKUaU@ƒUUVmIUV™Uk¥ƒVma@¯k@Wanwmƒ„@@n@@m@UIVƒkUVamUXWƒaV™U_™@ƒmUVUImW@aUIĉK@VmI™b@lU@@n™JƒkU™@KƒIUmmLk@UVm@UŽm@@LkbU„mJXlbV‚@xUbƒ@@bkK@LWx@ƒbUn@xmbÅW@nWLUKUbUVƒK™U@LUK¯„mU@šVV@xULUŽVL@bU`WšUz¯aUamKUaƒ@@xkX@x'], + encodeOffsets: [[116832, 34527]] + } + }, { + type: 'Feature', + id: '4114', + properties: { name: '商丘市', cp: [115.741, 34.2828], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XVl@lLȃ„@VkV@V»UanƒWX@VaÆÇô@ÈaVX@xVJXUÞU‚aVLĸbXKl„V@šm°Vn_ny˜XX»mUk¥lK@a„_@yšInaVKVa°_@WXI@ƒ@K‚VnIlbnaV@„l„@‚a@_w@ƒlwUKm™Xa@UV@š»Vƒšw@kUKVUUm@w±VUXUKUwmJUUƒ@km@@±mXkmUI™@mm™KUwkbWakLWaUIkJmŽƒX@l@@VUX@JWbX@VbULWbƒlUVULknlV@bVJk„mb¯KknWmk@@nmVkx™@ƒVmU¯KUnUL™@ƒJUIV™maÅaUm¯X›l™kk@@lk@WI@yUUU@ƒb@aUaƒUmVk@ƒƒ`nxUXlb@lšLVxUbUbVbUll„k„VlÝVUnkVmKUXm@klƒ@ƒnUx@xnxƒn@`VX@V²x@V@b@„Wl@zU`VUVVb„L@Vƒb™W@bkXllkLWV@V„@VVÈwlVœ@@X˜K²Llb„WnnÆL@VnJWn'], + encodeOffsets: [[118024, 35680]] + } + }, { + type: 'Feature', + id: '4112', + properties: { name: '三门峡市', cp: [110.8301, 34.3158], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@WKUmUI°ƒU@@UmU@KnK@IƒaU@makKUa@_‚KnmVU„L@a‚ƒ@IXm@KWkkKVkUU@aUW@UUIVaƒymwkbU@ƒx™LVUWWkk@WUkJk_WWk@WI„ƒUK݄k@WKULka™@mwĉ¥mXUK™@@bƒm@k—VWwkU@m™UUƒlI„™Wm@™@Uk@@KškVmn@lwn@@Ul@Xm˜UXUmVсkmkV™KUaVamaUXnƒ‚@ykLUKƒ@™WwKmKnUm@UmƒƒaU@mUk@kL@lƒxċxUnkVmnXxWb@`kzWJ@V—LmVUn™lmUL@lW@Ub@VšXUbš`VLUbUJ@nmnUlUUm@@bUJlnU„š‚U@lxkbƒ@@XƒJUnƒ@kb¯VVVmlXXlJlzn@VlkVW@bkK™bmškŽUbVb„lƒXVxšKÈnšwÞlĊKlšVnKlwX@lL@xlUnVn„@šl@lmX@ƄÈb°¼ÈwVJlx„_°xšašlšUÈxlUnbVxnL@lllšbm„n@nb‚@@V„L@V„@@„VLšJnIVVlKnV„_'], + encodeOffsets: [[114661, 35911]] + } + }, { + type: 'Feature', + id: '4107', + properties: { name: '新乡市', cp: [114.2029, 35.3595], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XVlL„K°bUblbUbšl@nX@W„XVVKVkš@@Žmb@„Ubn„W`kL„LƒV@VVLnKlVXIlVš@@a„@l£nWlƒkVa„@°bnUlLVlna‚bnUVUXKlU@ƒ@lk@a„I°y„@ôkUU@wšmôšnkWakml™UkVmkUlmUUm@nkUKWanamU„LXW@U‚VnUln„`l„œblL°KXV@ĠJ@L°„šJšUVw„anK@UUImmƒkK@¯±Um@IVmUmmÅnWaUK¯aUk„w@W±kVƒx™U™VƒwƒnÅJUIWaÝJóI—bm`ÝbÅImJUI¯¥¯@mU¯UƒJmnUVóUkl±V@zXl„bWVXL@bm„mº@@XmJUXU°llk„@nWJk@U„@¦U`m¯ŽWx'], + encodeOffsets: [[116100, 36349]] + } + }, { + type: 'Feature', + id: '4104', + properties: { name: '平顶山市', cp: [112.9724, 33.739], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@l¤UbVL@V„LVb²VlKlaX@„„lbš@lxUVULƒbšln²VJUbW@@L„b@`nL@nVV@LVŽUbUVm„kVl„ƒlXbl@Xn°ŽVK@_°`²IVVV@VUVJnInaWK@Uš@„K„LÆ@nmlXXWVUUw@klKVa@knyVkVanI‚JXUl@XbVUl@@aša@mXk‚bnK@UlK@UUUVaXaWmkUm¥n—WmXaWaœkl@VmÞb„KVL@aVI@mUwVm„@KōméUL™KVaUk@kUK@U˜WXI@VlKXU‚@VVnInVV@VLlK@UUƒkKU_@ƒWWUwU™@klƒn@ƒƒ@Imb—@@m›nUKÛ@mKUkWVXxmbVLXŽVVU²VV@xÅnmWmLU@kbmJ@b¯š™IUb™JƒUUxVl@z@bU`W@Ub¯nUJUbƒ@WLUKULkU@aWKƒ@aƒbmL@ƒlmUk@@bUL™ƒWJUI™°@ƒŽ¯aWLk@mbUb¯b'], + encodeOffsets: [[114942, 34527]] + } + }, { + type: 'Feature', + id: '4101', + properties: { name: '郑州市', cp: [113.4668, 34.6234], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@nWVUKÅ@W„nVnI‚ŽV@œkƂšwV@šnn@lxÞlnôJ˜zXJl@nalUČVlƒl@²UlkôVVUnm„I°VnV°@°¦VJnIÆJÞan_VmU@ama™@kU˜¥kaUklw@UIV¥kVUI@ƒmmUÅmUlƒwVU@amU—JWbUakVƒ—Vé¯Im`ƒk—@ƒwVWmLkU¯ŽƒXkWmLmx@UUƒbm@@x™J@LbW@UUVWUkVKƒ@ka™IUamKUkkmmLƒUkJUVWXkWmnÅ@ƒKƒL™@@VXLmbmJUIUVU@ULWVkK@nWVXL@lVn@¤„b‚kôKXKlL@¦²V@JƒL±@„@VU@WV@X@`XXmb@Žšblaœn@Jƒb@V'], + encodeOffsets: [[115617, 35584]] + } + }, { + type: 'Feature', + id: '4105', + properties: { name: '安阳市', cp: [114.5325, 36.0022], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°kVaV¥kVmUkWkWVkVKUwkkmKUU@a„wWWXWakKWkXmlašIVmX¥ƒU@a„@WnK@kƒƒ™V™I¯ƒ@KğI@WU¯LkK›akƒƒ_kmmVU@VWXƒKnVmbXbVLmln@VVknlVUnVlkšlnXbmlmlXblnÈlWbn@@nšK@V„L„bVV°VVzšlnš@V™xƒI™b™ŽU@WLUa¯V™UkWõ@¯kkmxk¼l‚„XUlVbVLnlULmU@lƒLkVUlƒX@xW@¯mUƒ@UmIUW™L@aXa˜kU™¯anƒWk°@k™kKmmUIWaambUkkKmV¯aƒ@UblŽk„mXk¤ƒ@@b™@UbULWVnb@lUVVnmšnVVU„J@bWXX@WJkL@blVU°UV@XlWnXUbW@UVkVšVWbnLUJWLUK@Lnn@blVU‚„nUblxVUVJXU„a˜@Ub„LnUVV@mVIVVn@UbV@‚XbmbUV„_lVXUWanJVI@WkI@WVIVU°WXXl@la@mX@lLXl‚kVbœm‚X„ylIXJV@@kšKla²UVa„IVyÞb°LlVna@UÆKnLVbšK@anwU™'], + encodeOffsets: [[117676, 36917]] + } + }, { + type: 'Feature', + id: '4102', + properties: { name: '开封市', cp: [114.5764, 34.6124], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lUVbXa˜InV@bUV„x‚knVVÆnn@„VJlUU¦VJ@kxVllb—¦lVš@nb@bVŽUn˜aôJÞIXbVJÆI„m„xšUšV„w‚U²l@XƒxVl°bVLXb‚`XklUnmVblLœ@lmšx°LVK@UXIVašWlL@Ukƒ°KkVaVUXmmI@UÅKmmƒXka±K—L@W›@kUÇxUUƒ@@UXUlKkklW@ašX„a@UƒKUaVUUV_@yXk@ƒ@a@U±w@UUW@_„mmw@wVw„mUaÇbUa¯UUkmWkn±JÅxmIbUxmKmn—JWw„kUaƒK@a¯@ƒbk@mVUIWƒ—Lmwm@Ua@WJUb@LUl™@UUmLUbWJ@VL@VmXWWzUJUꄘ'], + encodeOffsets: [[116641, 35280]] + } + }, { + type: 'Feature', + id: '4108', + properties: { name: '焦作市', cp: [112.8406, 35.1508], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@V@VL@x@bXŽWV@XkššlUŽWX@J„@nI@KlL„KšUVaV@œJlL@KUk@KÞL‚l²_‚@nWlL„UVVš@nLWVUJVn@anV@a„wÞUVLVx„b„@lW„@lbXn‚Vn@@¼šL°mšKVn@bnl@nVK@blb„L„W„U@VWLXV@nlKn@lVVbXw°nV_@¥Vƒl@XI@mlƒkkV¯VWnI@W‚@n¹nƒ@aWKXUƒaWk@yk@k„ċUkVmbk@WI—yóImÝkkwm@™mU@™xŁ›lU@mJƒX™ak@ƒx¯V@¼¯Vm„UmmIkVWK@UXIl@UWVUU@mVUI¯b¯@™lmKzWKUa™nƒJ@nƒlbÝ@@b'], + encodeOffsets: [[114728, 35888]] + } + }, { + type: 'Feature', + id: '4110', + properties: { name: '许昌市', cp: [113.6975, 34.0466], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lI„VnKlnVlnLVbšJlb„@ULVlUXVVX@‚a@KšI@wn@„aVV‚@nwnKlX„W°lVnKUX„x˜@„ln_°JVIXy‚XnW@U‚K@UXIVanKVVš@Vk@KVaXI‚@Vbn@nx˜KnaU™l™ƒn™Va@ƒXa@™VçUUla@aUK@wmUƒLk`kIWVkLmK@V@XUlƒn@JXV@nm„™bU‚óIƒmUa±@@ÑóVUUk@UlKVU@akWVUUlUUaUK@UUKWbUkÅJ@XWaƒ@XbmJ@nUJ@bUKƒLÝaUnk@›lXbWbXnm˜n¦lVXnWbUbVV@VkL@VmLaWl@n™b@bk@UVWak@WVImJUbUlmz@lUbkL@lVx'], + encodeOffsets: [[115797, 35089]] + } + }, { + type: 'Feature', + id: '4109', + properties: { name: '濮阳市', cp: [115.1917, 35.799], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lLXbW‚XXƒx@bVVnLllVxULUl‚XXlVlUnlŽU¦Ub¯l˜nœK@V‚bVb@šXbVL„KVxVVnIlašb„a„¥lU@wnalLnVVlVLXnlWVXn@@lVI@WnU@mƒÅW¥—aW_k@WwXy@kmƒ@wU„mš„š¦šlUxVLV@UwšJ°xš@VX„@Vb„@š`VX@VX@llšIVbnJlI„bšV„l„˜J@ƒmѯLóa@ƒƒKUa„k™ƒ™Xƒ@UK@wU@ƒlWUUݯImW¯aƒLUKU@ƒkƒ»k@mƒwƒa@UnKWI@ƒUU@akVWK—k@a±ƒbóUWKXUmk™KUmLƒbUx„„@lmLXŽƒ@@b„VW¦Un™JkbWnXl'], + encodeOffsets: [[117642, 36501]] + } + }, { + type: 'Feature', + id: '4111', + properties: { name: '漯河市', cp: [113.8733, 33.6951], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@Lƒ‚UnVxnIWa„@Xb@WÆIVlXaVL@VVLVbkVVŽUVlX@bUVkLV‚l@VVôU@Ò²@Vb„nôJVšanƒ@mWU@I„mVk@WkI@wmak™@wlW@w„@VbnLVb°bVyX™V_@aUKVVK@wUU@™™a™K@kmbXVmJUXƒ`kn™nƒK@aU@mw™akb±@¯ƒUUÝKUUU@WU@VkLUKU@mUmJUU@WVkL@UWJ—X@VVL@lVlUbšLVKnêÆŽ'], + encodeOffsets: [[116348, 34431]] + } + }, { + type: 'Feature', + id: '4106', + properties: { name: '鹤壁市', cp: [114.3787, 35.744], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ó™™n@xVVólƒ@¯zƒJ@bkl@@„kVWLUVmVXbVJnnlLlš¯@Xlm„°bVš—lWb@bšKVXnJ@VV„°nX@@w„WVklU„K@knVVKmkUKUaVkƒWkl»nwlްlö@lXšV°UVbXKV@šša„Jšw@Um™™kUy¯UUUƒaƒK@U™L@mm@XaÇkkmWank'], + encodeOffsets: [[117158, 36338]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/hu_bei_geo', [], function () { + return { + type: 'FeatureCollection', features: [{ + type: 'Feature', + id: '4228', + properties: { name: '恩施土家族苗族自治州', cp: [109.5007, 30.2563], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VK‚bX@lbUVnL°„@VlVnUl@VUX@„aVƒmaXƒlašUUU@wmaVUn@Vƒnmmk@m™U@kna™aU¥Vam™X_@WƒU™mW@_kƒVaVKnL‚lœ@VVal@k¥@kUW@kUKVUlUVсW@kÇaU»ValmkUVUVak™@aƒV¯_@W‚UkmVUlU@aœƒƒalI@akkVWUaWXUWwœWVbÆ@„„l„alIVK@U™m@UU„W@al²a‚¯UağÇm@ƒbkk@wƒ@@W™aULmxƒIU‚™ƒb¯@U`UX™JmL¯aƒKX›WUL@aknmK™@aWUXaWm@I@UÅmVU@™™aUV@b™VƒI@WkU›bXkm@VakwUKULWKXmJ@XUK@ƒmL@KUwVaUI@KU@mmn™mXka@»V@@UUaƒw¯yVk@ƒUUVmmkÛÈU@mWUnmx„šmlUbV¦UlbWVUL@UUƒ™IUmÇKV„VbUVVxkn™LUxV`VX@š„„kJVVUXWaUVVlUnmKUbkI@WULmK@L@LVlƒLnmUIWV@aknƒ`VXUJIVlUVVbUX@¤mbnLm‚m@UXk@mm@Ukaƒ¥@kV@@KkU@aUKWbkLWVkIVŽk@UbVlmX@bU@@mmL@bn`@Ln@llVLVk„@XVVU@`VXUš‚¼k`VULka@VllVIn¤VU@@bl܃bkx@bkL›škKƒn@bn@@b@JUnV`UnVbVKlVXUlbn@°ƒVx„@@b„nVbUllVn@V—VK@UnW@UVUšlnk‚VÈޚxVb„VVI„xVaÆ@@aka@UVaU@@a„k@Wl@nbVIƎ@Jk@„L@VlXnlla@VJnw@UmwXU@aVK°ÒnllnLlb„xnKVaV@l¦²nVl@llL„x@XVVœ‚͐š@našx@U@al™XUVa‚LÈþV°XxWXkK@šmLnlUb@b‚xnLVlVVkb@UJ@xWXXš'], + encodeOffsets: [[112816, 32052]] + } + }, { + type: 'Feature', + id: '4203', + properties: { name: '十堰市', cp: [110.5115, 32.3877], childNum: 9 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@@a@w@kV@nbVK@ƒnUla„@la„Ål@nlVakwWX@WkLšaVmšwV@anK@UlIXmWkk@@mmLkWlwk@U_mKXwWK@U¯K@UU@ƒVUa™kmƒkI™yUUVUmanU@mlwkƒ@_mWXaƒUWU@ǃ@U@aUaVwUKUIƒVkK@UWIXƒmaV@k@Vm@UnwlƒUamk@V@„ULUamxUJkU@Iƒ`WkkK¯XWak@@W@IUV™LWJkXkaÇVUKƒ@kUmbmUUƒUKƒbkKWUkI@ƒkKÝ@@aƒUm»nI@mƒU@UnWV_@aUmWbkLUl¯b@a›kkk@WkkJm_k@UV±@J@b›nU@@WÝIUJVbXL@nlJkx@„Wn@VkJmb—LmUƒ`VbUL@xVn„@XVƒŽ@„mVVnnJVbU„ƒx@„V„nVUbVVƒx@šn„™bUK@bƒ„@bƒJ„šm²„VU‚lbXzVJV„„JVbn@@Xmb@V@bVJÈ@‚Vnkn@°aVVV@šX„KnalLVmšUnnVKVlnLWlXX„Klk°š™šXŽWškLUVVV@nU@ml¯nmbk@W`Å@mb—LWm¯UƒxnêVèk@mbƒVƒnUK™@kKmXk@@JUI›lÛLllnbVnlJ@LULnlÆaVLnŽV@nkVJ„@lkô@²bÆm°w„L„WV@VXšKšVXI@W°ÆVšK„b°U„JVIVV„¦XKVL@l‚InaVÝnUl@@bX@‚™nmVL@lVL„lVLVUnbVW@xXn˜bœU°¤V@š™„a@kWKUUn@VlnL@UV@Ü»@mX@V_ƒakaÞ@VK‚¯@kkW'], ['@@mUkUUm@nllVKXXVK']], + encodeOffsets: [[[113918, 33739]], [[113817, 32811]]] + } + }, { + type: 'Feature', + id: '4205', + properties: { name: '宜昌市', cp: [111.1707, 30.7617], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°`„U@blšUbUVlVkn‚ŽUbV¼Èb@l‚XUÒkVUVVL@lVX@ll¦k@UbU‚›@kmKULUbl„@`nXšŽ„V@XW`nšUbV¦šbmb@lšV@nnlmnU„m@UVnb@xVV™VkbW„nb‚VnVa@an@UaVU‚JXnWlXX@l„¦@ŽlKÆX„bX‚V@VV„@°¯°xXx‚XV@nV°UVWU_VWXkmaVnWVkn@lln@lb@UVLXWlnX@˜aXUmaVK@UXU„U@WVI‚W„XXV‚U@¥VKœ@‚Uގ„„‚a²LlV@kV@UanKma@UVUnK@UVLXyVL‚knJ@UV@@UXKWUXaV@Vb@mVLnKW„m@aUUm@@UkK@Ula„LXKWaXI@alKlmUk@wVKXL@m@WWn@UVa@K@wna@aW_XWWkXbVW@k@U¯WWwka@UUaVIVƒkU@m±@U@@wVKkaš_@VV@XUVwU¥‚šyUkm@V±ÈUKk»ÇL„m˜mLk@ó£kmWwƒm@U„IkWKXwWU@ƒkLƒwkbmaƒbkK@VƒLkmWIUKkUUƒÇIǫJ™XÅJULVŽÇLUVƒ@UK™@kI@WVI@UaƒWmXVVUL`±kÅLmKkƒƒkƒÅ@Ua›XXxWVXŽVbUXll@bkJ„b›„@bkVUVlnV@X'], + encodeOffsets: [[112906, 30961]] + } + }, { + type: 'Feature', + id: '4206', + properties: { name: '襄樊市', cp: [111.9397, 31.9263], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@Xl@Xb°WlLXl„_@JlVVInwVbVK@ƒ@UnlVbk„mx@VUnl@U@nbW„XJ@VlL„UVJVLUxVb@b@VȄ‚@XV„VWbnX@`l„kx@nmVnbUVVVšzlJn„šlVb„UV@@V°L@VXLWxnLV`l@kxlXnK@nl@XlWn„`Xnl@@UVa@VÈKš£VLVanW°U@UVU„@„`VIn‚mV@„nV@Xa@aVW@UšalkXKšblI„yƍXnlJXbl@@VV@nklU@`„nVK„LVKVb@V„U@UÈK„UVKšIlUX@V`lIVbn@nblVVmV@@XXJšUVV@knKVn@`@X‚VnK„wlLVmUUU@ƒU@aXL@WlU@UUW@UmU@KkLWaXkWmXUWm@U@ƒnk@UmK@U@UaUVUUKV_@al@namWUI@KUƒK@aV@WUIƒbƒ¥ULUJkIm™ƒK@U@K™V@U@a@UkU@K@wVaUwlU@mUƒULmKUkV@@anIWmUK@I¯„mKkl@LUb±lUakLmk@WwUKÝVUIm`¯n@Uk@makJU_@ƒƒJma¯ImwUVkKƒb™aUÅ@wWaU@VU@mXIVmmUkJkwm@mIlUKWzUK@VmLUV@VnbmLVbU@@lkU±KbƒƒÝV›@UL@¦VWUƒWXUJ@XƒVWV@VULnbWV—bW@kmWXUK@Vkam@kkm@UlmXUŽnbWlUXV`UX¯VmUU@Ul@Lll@nnJ@LƒnWmbmš@b™`ƒš', '@@kUUm@nllVKXXVKmU'], + encodeOffsets: [[113423, 32597], [113794, 32800]] + } + }, { + type: 'Feature', + id: '4211', + properties: { name: '黄冈市', cp: [115.2686, 30.6628], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VVUnWVXnVJ@„‚U@V@VXŽV@@IVJUnŽ@V@L@KlIVlVanLVbnVlI„ƒn@@a@Kl@@I„JlI@aXU@KlK„kVblJXU„VlU@V„bVkVKXn@VlxVa²I@VlVUxln@bšJXklaVWnLmÅ@y@k@ašI@W@aXIlVVaV@nnlKnLVW@IUa@a@K„UVVlI@wXKVV@IUƒla„@lUXwWƒnƒnalLlxXLll°@XwVKVaXIl™nb˜@nln@Va@U@k°ƒUmÆUVaXI„JV¯ÇUmmkU@WaKmakVm@U@aVKkkmKkVmIkǰ£@aUUVaVVnKlkX‚mkƒ@ƒlUVaX@@Um@‚™UmlUXV„UVU@w‚K²¥Ua@I@UV™l@U™V±UIUǰ»VkUmVI@a@U™m™ĉ™¯V±bŹĖğaÇL¯lmŽkX@‚óĀ@ŽmšÝêb±WkLƒn@xXx@Ž@b@V@LW@UbƒlţXƒ`kxWnXô¯¦ÆV@L@JVLƒxkK@V@bkz°l‚lXz@J„UlVla@XUV„bVKXnW`XXV@laVV@V„X@V¯xƒx@xULVbUJ@n@LU@VmmakbUK@b™IWWUUVkUmkLm@VJkb@nUJƒ@`V@kX™aUaVmmLkUmJ@Uk@U„±lkzmJUb@b„VUxVXU¤ƒL@JƒX@VlL@JkLUVU@mnUl„¦@V'], + encodeOffsets: [[117181, 32063]] + } + }, { + type: 'Feature', + id: '4210', + properties: { name: '荆州市', cp: [113.291, 30.0092], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÈJV„lVVLXJln„K@UlL„anbla„xlK@„XVWxXLlƒJ@V„nXxlnô¤l@nKn—‚ƒÈKl¼VL²Ç‚Un@Vl™zŽV¦UxWVU@@U™`lbUL@xV@²@@nlVU„UJVb@VlbXx°XVWX_VKUwVKVa@UVKUUVk@KnblaUU@wnWl@UX@lÆ@@a„IVmUk„™šxVJ„U„bܙ@Uk@WWnk@Vƒ„™Vm@I@m@Un@m™XUlVlUnJ@knJVU°@@aÆLX@ƒllL@¦nJV@XblLVa²U@UlWš@VX@`@LV@@bXJlIXml_lJœU°b„KÆLnVVl‚@ö—Vƒ‚mXaVIĢllUlVnLVlX@@b‚ašnnxšV„L‚bn@°ÆXmmkĉƒ¯w±™™™Uċ@KÝÅƧŃÝ癙Uw¯ƒm™¯k@W‚kV@¯UIUJW¼kb™Uƒwk@W`@¦Uônb@VƚlÈ@VU@ƒƒ£UWWnUÆUnmJkUÇ£VWUI@aUU@WkI@Uƒa@JW@k£kaWVUKmnkKƒb™kkVWb—VmUUmwU@kk›@UakUUa@V@nlx@lUb±lUbnnWLUyk@UamœUK™@mlk@Wb@VXL@x@xWI@a¯Ž¯V@bVn@LkKmL@`XmKmVU@@bkL@V±bk@Uaƒa™L™KUVƒIƒ„™W™XamVVbUK@b@Lm@UWkxULWVUnm@UlUX'], + encodeOffsets: [[113918, 30764]] + } + }, { + type: 'Feature', + id: '4208', + properties: { name: '荆门市', cp: [112.6758, 30.9979], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@n@lxlInVUnWJ@nUVV@Xb@xVƚb„alLVUnx°Jnb„I@„V`lInbl@@V°mn_VJÞUVLXx‚@nllKVb²kVa@KlknL°ƒ@JVLXnmJ@bU@VlnLVKV„@nX@lUšKVaXal@VKn@¥°L@Unw˜bnašV@KV@VUX@lVXI@KW@@IXWV@laVL„„KlaXUVVnkVWV@lwXblIXWVkVmšaU£VaUmVIkU@y@WakKUamU@UUK@kmK@w@@mK@LƒV¯™U@WwkmULƒamVVUU@ƒƒIƒbUKUa™kmƒm@UakLmxU@UÒWlULţÿmwkIUm@a‚kÈblW@UVƒUUk@JW@XkWWUkUKUIlw@aUWknWUUmnIWƒ™aUwVaۚƒaƒVUI™wƒšVlUnƒJ@bÅ@@kVWk@mX@xVVkbma@LUlVVUL@VUbULVxULW`UX@V@lUXWaXlWXX`@bmb@x@LUb@VmŽXX@‚@nWKUL@xVlknkL@bWJXbWLƒKkb@VlL@Vn@VV@bƒnX‚mLUK@nUaU@WbXVWL@VU@@V'], + encodeOffsets: [[114548, 31984]] + } + }, { + type: 'Feature', + id: '4212', + properties: { name: '咸宁市', cp: [114.2578, 29.6631], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÞÆ‚LČ@šV‚š²š°xĊ„nlWnŎ¯m@aƒK@„„°‚n„Jšwn™VIUaÆJšÅ@wšwV™XW@aV_l@²V°lĊwlaXLšwlUkalVVaX@lVXI@a˜UXJ@U°UU¥VIVKVklanLVa@VÈIVV@nk@aVa@mV_@a„K@klKUa@UnKWk@@lU@@UW@@nUWUwmaVIXƒ„lV@mLXblJ@kV@kk@KU@WƒkUWVÅwkLmW@UmL@lUL™KULƒak@maUUÝwUJƒIb›KUUƒ@š™aWK@kUWVkUwVw@™mÝ@™I@wkW@a›ww@LU¥™kƒJ@nVJƒIkVVnkV›UkyUIUl@xWUkaW@@°kz„ŽWxkLUWmzk@@bVVVš„b@‚@XlVœ@Vl@bVbUn™`Wn—@Wb„VVI@`„LVbXLV`mnU@@lƒL@LUŽƒak@ƒLk@WbUJn¦@lVb@xVb@n'], + encodeOffsets: [[116303, 30567]] + } + }, { + type: 'Feature', + id: '4213', + properties: { name: '随州市', cp: [113.4338, 31.8768], childNum: 2 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„@nš`lw„k„ƒ„UmUVWX@lk„@VanUĠ¼V@@mX@@nVV‚VXLmJVLnK@b„V@@J„@VUn@VaVUUUVWVLV@@Kk_@almaVkUU@WVƒVUVLXmmk@wUaUKUV@°™@kmaUaÈmW„mUƒVklaX@lVnxl@@UnaUk@ƒVUVwVK„nš@VVn@VbVJUknUmmVmk_Vw„KUUm™Vak¥@UVKVIkW@UmIVWkIVƒkmmLkwmVUƒ@LƒUU@VVXL@JmLUbmK@UUKmkKUUmVUaUnÇlk¯™mJUnmLUaUJUaWL@UkJ™ƒUƒ@ƒaklkU@¯@KWLUmUUWVkbƒLƒŽUKkbU@WX@JX@@LWJkUW@UVU@@L™Umb—amx@V¯K@¦mŽULk@WbUb™LkVW@kVVxUb@x@LlV@V@b@VšU@L@V„LnšlJVIVK„¦„aVJ@XUŽ@b„LV‚@LVJnXmbk@@bU`VLUVV‚b@V@VnL@Vml@„@VXnWVXnWlXblK@LnV@VVX@VkV@XWK@b„VV@VV'], + encodeOffsets: [[115830, 33154]] + } + }, { + type: 'Feature', + id: '4209', + properties: { name: '孝感市', cp: [113.9502, 31.1188], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VnXK@L@°lVlk„b„@„VšlI@VXKVbVIVbnKVmnI°šlŽÈkVmVbnUVVlLnVL@VnLVanK@IWKUUV@„V@KV„nUlxnKlnU„lJUXnJ@VlXUJUL@Vl¦UbnšVVƒLUxl`UnnnmVVlnVK„bšmVX@a°Ý°LšaXJV@VUnKVXVK@LnKlLUbVVX@VwVJVn„@@UU¥V@@UUK@ƒmaUVUkkJ@L@K@UmVUI@JU@W@U@UV@ƒUIWmXUVmUUÇ@UVmIlmnmakK@akaW@UwVUkKVnUlKVwk™ƒVU_WKUkVW@UXaWkUa@w@VU@XaW±@IkbƒKƒb¯L@WƒXkWƒ@UakL@UV@UmVUmL@UXWVL@ašUƒVUUUVU@yUUƒIUa@wUKWVU@kƒ™™Wk¯UkwVKƒLUx™K@nVxUlUUWVUmw@wƒUUyXWlX¦WbUV@„U‚@blbUVVbXXƒl@lVL@bk@lxkVVnVx™¦ƒ`UnkL@V@L@Ž‚@@xnL@lVL@VnVVblLXb@‚@zlVUJVnUbV¤™bUnUlWXkJWakxU@UXml'], + encodeOffsets: [[116033, 32091]] + } + }, { + type: 'Feature', + id: '4201', + properties: { name: '武汉市', cp: [114.3896, 30.6628], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nbnm‚knJVUÈ@@Uƒ¥VknmV@VUlK@IkK@U„W@I„KV£UWVwƒU@aVanIly²kVƒl@@VnIlVnKUnVbšblWU@@_„‚VI@mlaUIn@lKVnUlVVXXšJ@aVLlanbUnV@@K@mVIUaVK@w„w°w@UƒW@UUUkbU@WWX_WmULƒaVU@WkbkUƒV@IWyk¯kly@a@UlL„wUK@I@KÅUW@ѱUm@wl¥kaƒ@@_Vw@ķƒa@akw@ƒkKW£XVUVwVwUaU@VUU™™xWKkbĉx¯k±Uk@U`@bWXUš™x@x™ÆÅIVbUJmš™xƒImƒ¯@ƒ™Umx™nUVVbnJV„@Lƒ@@ŽkV@bVnƒ@UVULlx°VXlššl„V@XUVL@xVb„JVV@zUVVVUV„™V@bUKWX@VnKUVVnU@@VlKVb„@lX„W@X°K„a„Lla@JX²Wb@ŽUV@@xVbXlWb@VUXVlXLV`Uš„lŽUxkLmVUŽlLUVVxX@lb@blL'], + encodeOffsets: [[117e3, 32097]] + } + }, { + type: 'Feature', + id: '4202', + properties: { name: '黄石市', cp: [115.0159, 29.9213], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VšUVV@VbUx„aWUœblUVmnKlX@bXJVIlVUxVVVIU‚zlx¯š@‚VbnL@x‚x@UVaXK„b˜@Xk‚WU_Vm²klW„XVK„Žl@nXV@@w„mlK²X‚aÞén™@ôÿ@lWn°kUKmmUљUmm@ƒwkImWU@UakL@bVLUVċ@™bUK@alIXKWK@™nXnKmkUVwƒ@¯b@L„lUL±W™n@KULUaW@kL@lƒL@bU`@nUb@bmlU@UÇJ@UUbmKkblŽUULUJV¦¯V@VWI—V@bWJkUW@UbkUlbkV'], + encodeOffsets: [[117282, 30685]] + } + }, { + type: 'Feature', + id: '429021', + properties: { name: '神农架林区', cp: [110.4565, 31.5802], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@n`lIXll@lœl@b°aVklKXaVn@bU`mX@V„V@nmJn¼„V@bÞ@lL@„lJXVlL„aVLV„nVnalV„@VLÈUlblWXIšKVU@J„™š_‚@an™na‚X„m@KmI@mkk@KVkWWw¯w¯°ƒ@UUU@WƒaÅWkL@ƒ¥@kWWXkWmIUVVbm@@bUbmUU„ƒbW@UVk@mVkU@U¯ƒmKVUkaW@aULƒÆVbƒb@VÅ@Un@VƒLWl¯Lš„'], + encodeOffsets: [[112624, 32266]] + } + }, { + type: 'Feature', + id: '429006', + properties: { name: '天门市', cp: [113.0273, 30.6409], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@K@UlKVm„_š¥UwUmlUkwl@@aUK@k„kWWUaVUka@aV@ƒVUXaW¥Xk@WWIklm@ÅxmI™VÝUkxkaƒ„@bWJaUL@„W@™l¯UULU‚ƒbƒkV™Ua¯bm¤UnÇUkmUšUx˜b@VkXÇal@bVnlJnxŤĀVKXkVÑV@nwlKVbn@n„šlVbVL„a„J@„VV‚UnU„bVKlnXxV@°š„U@KnL'], + encodeOffsets: [[116056, 31636]] + } + }, { + type: 'Feature', + id: '429004', + properties: { name: '仙桃市', cp: [113.3789, 30.3003], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VK°VškX@@ƒVK‚bXI@a„ƒlblwÞVšUnJÆwn@lkXJ@X‚WVz„V@xnx‚VXUVVVkUw@mšLVw„KVU„@Um@alU@„@@KUƒmIUaVUšmnwmw™mb@aW@UkmKkUkVġkUJWbnU„õ˜@UkmUÅKƒL¯a›VkIk`WnkJƒ@xVLUVVbUbk@WlXbm„VxnxUblbUV™@@VUV@nVL'], + encodeOffsets: [[115662, 31259]] + } + }, { + type: 'Feature', + id: '429005', + properties: { name: '潜江市', cp: [112.7637, 30.3607], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@UbVxšbX„mJVnXVlmVX@bkxVJVLVlXXWlX@@IVl„V‚U—aVwV™lnÈVVmn£°aVbUš„l„aVUK@mVU@Uš@VUkaVamwUwnƒWaXkl@VaUaVUUK@w„WI@aU@@K@_UW™@kX@V±VUbkKWaU@mI@¥kK„kW@ÅK@b¯@UVmI@lmIkVkUWVnšm@@V@n@JUnƒšU„@ŽmlXXl@@V'], + encodeOffsets: [[115234, 31118]] + } + }, { + type: 'Feature', + id: '4207', + properties: { name: '鄂州市', cp: [114.7302, 30.4102], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°¥WóXmlw„_ŤW„kVaX@@K@U@a@WwU@mWk@ƒULƒWkX±lUnV`XWl—@ƒaWLUb@Vw@wmKUa@°™kw‚yVUJUUVwkUUJWI@akWmLUnkV›aXVƒbUxUVWX¤lL@„lx@b„b@ĸUx@`„@lbk¦@x‚n²VƄX@'], + encodeOffsets: [[117541, 31349]] + } + }], UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/hu_nan_geo', [], function () { + return { + type: 'FeatureCollection', features: [{ + type: 'Feature', + id: '4312', + properties: { name: '怀化市', cp: [109.9512, 27.4438], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@n„‚@b@XnJ@k°x@aVUnl‚UXnV@@VnJWUJV„nIVV°ŽUbVVVL@޲LUVa°V@aV@nm‚UXblLXWVXVmVLVK@an_„`@X@l°„VlXXW`nX@Jmn@b„@nV@Lm`„bUb‚n@VUVl@nIVbUlƒV@LkJUnVV@xVblVUbU@ƒzUKU@mx@xUnn@@WV@lbUb@šnVWXX‚V@VIV@VUnJ@VUz@JWbXllI@VXVVL@ŽVn@„„Wlb@„Žl„XVlL„aV@VJ@XX`„kVwVl@bk„‚bUŽlVXIlƒnLVa„mVwV@@nV@XaVJVbX@lwV@n„@nV@VWnIVVUŽÆ@Xx‚a@I„UUKmk@mVƒ„IXmWUš™VJnUVU@anaVwk™›U@UXa@W™@m_@a¯@@K@UVƒ„bnK@blIlbXa@WW_n@VƒU@¯bmyƒUkUJÇÅ@WU@kWKÅwƒnm°KVkmankVWnXVWV@UƒƒwXkV@mƒ„UlLnaƒVaX@VUn@VnVK@xlnXWšU@a™@@klak™Vw™mUaV@™wmIÛ`m—@mVUXmlIXƒV‚I@K@aU@UaV_UK@wkUmmUKWXŽmVkUƒL@mƒƒU_nK‚™@aVU@Ukak»@U™™@ymUƒ„¯™ƒUUƒVKkam@™nka@ƒmwkLWb¯mkaƒ_VaVKUƒ™IUw@kKmU@WK@UnƒmaULkU@wUalWV¹U@@WUI@WU@‚_@W@U@mƒU@WbbUK@Um@@UmbUwWWkk@WU„a@anUUwlWUwUU@wlJVUnnV@@mnI@m‚K@U@w„a@wUm@_mƒVUUaVUkƒƒƒ_kċUk™VWLƒ@mlU@kn¥W@UwUWV@VÝU@lXLWVUbVLXlVIl‚knmU@VUJk@@„ƒ@™kVmwmVkxU@@XmVUb@xnKVLl@VxUxkIU`@bWVXX@JWL@bkb„¤@bmUUU¯Kƒkmb@V™VU„VVn@@„Vb@`lnœxmb„lUn‚bk„@xU„mV@bmWbUV@VJ„Il@nVUb‚K@nn@VbnJVIlJVkXJ@X@lmx@bnnWVXJWXU@UlU@mk@@llb°x„IUbnJ@VWbXVmI@JVX@bk‚@bWL@JUXUK@U@Uƒ`n@@Xm@XVW@@nX@@`ƒImxU@@JUI@KƒLmK@UÅUUV@VW@™¯kUU@UamVUUmJ@n„xmLKƒkmJkwkKm_mKXU@aƒU@b@Wk@ma@zUJVUmbUlU@™xnXlWlXXblK„¤V@@nUVVLkVš„l@Xb@VVK‚nXKVx@znW@X‚@@lVK@X@JXbWbnn@JUamLVVXIVxnK@aWUX@˜x@VnI@WlI@anV„IVxk‚l@lbXXšxVVVJVInbV@@ln¦ml@XXVWbkJWb', '@@XLVKVXVKUa@UUUmV@l'], + encodeOffsets: [[112050, 28384], [112174, 27394]] + } + }, { + type: 'Feature', + id: '4311', + properties: { name: '永州市', cp: [111.709, 25.752], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lxUXV‚lXUVnlVĢ„JVbUXVJV@XUW¯„VIUK@klW@Un@„nl@V`XUVL@l@šVx@„XXW`UnUbšxUlVnUšV„lb@VnJšUVVVInJlUšVnwVklKnw„LVJVšV@nIV@nbVa@KVVVUUa„KV_nVVJ@_VW„nV@n¥lI@anƒl¥X_VKlwVlULUVVVš@šU@VXL˜ƒ@IUmn@VU@wmKXUWU@m²šl@VIXWWkWUkWlkIVamUXamUnmWUU@@Un™lK@XJl@kVUk@mWKXkl@@aVU@UVWUUVa„In`VUVLnw@U@K@Uƒƒ@w@UVmUUƒ™°K@UnV@bV@Xk@KVm@amk„aU£VWUUmUUwm`UbULka›KXU@kVmU™@aV_UWVIn@˜y„XXK@klmV„V_kWVUn@WUU@UƒmaU@™wnwWanUmmXkƒam@UakLmK@b™xUUUU@Km¥Vaƒ¯@ƒkUaVUlm„UU@mUUÇmUk™Uyƒb™bUa™XUWWbÅLmL@V™aL@WWXUKmmk@a@UUK™XW¥kU@VƒUkxmVkUWbUJnVJ@nVJXzWxkŽ@lVbUX@VVL@`mbUnšŽUn™VV¼k@Ulm@mwLƒb@lmLUK@UamƒWkƒK@£Ua@ƒ›UkJkUmbVlkX@bWbUŽVŽnnUVl„@bšbVK@VX@lb„V@nU¤šx‚²„Knblb@x„V„ô@šlŽ@b@l@XWxnVl@„VV@XLVl‚LUŽUXV`šbXXmJU@@bm@UUkLW@UlUKWUUb™wUm™L@nklVVmVXXm@@bUKlÆn„‚XkllVUVVL@nUbV‚@V@nnV@xUn¯U@JW@UX@xĉ@™`m@@LV@b'], + encodeOffsets: [[113671, 26989]] + } + }, { + type: 'Feature', + id: '4305', + properties: { name: '邵阳市', cp: [110.9619, 26.8121], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XIlJšI„VVK@n@VVVKnLVwVmnLVK@U„@šw„J@wVIƚ°X@ÜȄUÈxll@kn@VwVaXJWXn@@WVL@UUKVKV_U@@aVK„x@U„aV@lk„@XylbUaV_šVnal@W„U@a„I@aV@@aVUl@Xm‚UXWaXml@@kk@ma@V_UnUV™UUWJUa@kkaWLUmk@@LUVWUkJWkK@¼UnWJƒIkV@b@JUIm@Ul™V™m@Uw@a@kWƒXWKUknW@ƒWUU@k™mx™UkVmIUJUU™VmI@UkaUƒV™UmVk™wVaVmX_WW@ƒUw@™@kUKWVU_k@ƒmm@@VkX@lVLUJƒX°WVU@UIVWUaƒIUġmkVUkWUVWkwWXk`mI@¥kUVƒUƒUn±@m›XkWknV„UVmmU@@XƒVƒUk`@Xƒƒƒk@¥¯»mbĉó@mkU@kU™ƒƒ™KmX@˜UnmL@lULkKUƒWUU@ƒbUaUnƒ@Vb@l„¦Ub@l™@UKmnƒKUnl„UVVbUVn„@`Vn@xƒb@x@VL@nmJ@nU@mmUVkI@xVVVxkXVxmV@bƒbXVl@Xl‚XVxna@Vn@@VVL‚aXaV@n„‚@@V@X`V@@XVJ@XV@UºkXVb@xlVVKnbm„@VXLV@n‚lL@VxšJV„ULUb„`lb°nXalKnx@„lbšmn@lbULV„„V°š„ƒnV@zšš@Vl¼lb@VUV@bšmLV`„„@n„KlVnU‚XWVLnnlV@xVLU`VbV@'], + encodeOffsets: [[113535, 28322]] + } + }, { + type: 'Feature', + id: '4310', + properties: { name: '郴州市', cp: [113.2361, 25.8673], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@²zVaVlnVl@nšVk„Jl_XJlIVmnL@mV@VXn@lV@‚XzV@lyV¯²U@UlJ@XVKnVVIXl@UVLV`@n@J„I@mlI„KVLnUlVUVVLXašKVLl@nb@ŽW„XV°KUnVV„L@xVJ„L@b@LUVVVU„˜VXbmbVbn@@lUbm@x@XVVVŽ@@˜@bkImx@Vm@Xbƒb@l°XU¤„a‚L„mnL@bl@@™VUX@VxnV˜anLnƒWƒ¥XKVwnUWXmVIUWÆLVx„L„w@wVmlU@¥XƒWUkwlÇn_Uw„WV@VU°wnU—ƒy@aVškVlnL@lVn„w@VlJ@b„X„x@bVKnb@U@WVUl@@Vnbl@XLlK@aVLVKnxÞn@a„LlmUaVU™ƒm@ÅknUmaUKmVk@m™kk@UlWUkVm@w@kUU@W™U¯™¥@w„Ç@aVIlUV@kUWU@UUm»@k@mKVkUKUwƒaUaUa›@k„kUWJkImaU@UK™@maUzk`@zƒy@XmJkL@UUJmUkV@z›@kŽkVmK@¦UbWL@a@UbmKmwUK™Xk›VUUkmVkw@UUKmL@WUIWa—JW_k@@WmI@mk@WkWULUUVKUUVm@šU„bš@‚nUǃ@U@w„™V@Ua@aƒL@ak„›l@k™UƒJƒwó@@L@V@„™`@œƒJ@xnn™šmV@bkJmUó@ƒn—JW„UUmƒU@UV@Lk„WlnnmVXbmxšxV@nbV„V@XVm@UVlXU`ƒUŽkn@lWLƒW—zm@UJVXU`@bVšUn@lWVœLlbVKVan_VxnVVVUXV¤ƒbnl@bUn@LWlU@@amU@V¯L„šVVUn@V@x„„@V@L@VmxUKUVm_ƒJUbVV'], + encodeOffsets: [[114930, 26747]] + } + }, { + type: 'Feature', + id: '4307', + properties: { name: '常德市', cp: [111.4014, 29.2676], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@l™U™mkUwUyV™@VW@¯Va—VmUU@KVUVUVLnaWƒnkUÓV_@mVU@݄w@ƒka@kVmƒUmK@IkaUamKkXWaUW@WUk„™@@KVU@aU@™L@J@XÇVUKVak_mWkLWakVUbmLUUmlUVKUU@kUWW@UImJ@xkLkKm@@Xƒ@ó݃@UUk@UKƒV™ƒULƒKƒXkWWbkaƒIUƒWU@mUk@WLaUJġ™ƒ@@XÈÆVIl‚„Vnz°aV@U„m@X`@XWbkakJ@amLƒaU„@V@L°@@bn`š@@XWb@VœVlšUxmb@bUVmVUI™šXVWnƒJU„@nnlVLƒV@JbWzk`m@UVK²V‚x„k„LVl„@Vn@V„„°xVKVkœVVlUblx@bU„‚Æœ@@nVnUll„kx@VW@@VkLWxUL@bÝ@kKkVõV@bkXVVUVƒ@ƒVkUkV›LkV™a™@@™ƒ¯xUxmX@JVb°WXkK@Vm@k„Vb™bn¤‚xUXkJƒblxnXÆK²l‚_@Wnašn@ŽUL@b‚JnIlV„@lUœ@@¯ô@lWȂIVKVm„U@aXaV@lwVXn@@K@UVKUUnU‚bn@lWšX„ƒlJnUšLšKV@„„l@²a@UlK@aV@naVX„WV_nKlL@KUm@a°U°@VXL@a@wWmXal@„k„@VLn›V@@bl@VnX@mwVa²aVU@mk@'], + encodeOffsets: [[114976, 30201]] + } + }, { + type: 'Feature', + id: '4331', + properties: { name: '湘西土家族苗族自治州', cp: [109.7864, 28.6743], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@KšL@wnK±nƒnm‚—@WUk„ƒÜÈn@n»@mVamk„mšU„„l@V™nmmU@wUan¯VKšLn„VWlInyWUœI@WWk@KXU˜n@mnUmU@WœƒmkV@ƒkXašaVaUm‚Ikƒƒ@kaƒX@ƒUm@UKWU@UkJWkXa@IVy@UmIUVU@UJU@WXWmU@™VakaU@@Xm@Vm@wnwV@VL„yV@VakUUa@wUUVmlI@K„UVkUamJk@VU@UmVaƒan_@KmUƒ@@anm@ImWX_WWUk¯ƒ@k@Wƒ_m`@bULUKUnUWWXkKWaVmnU@@b¯UUbVޱK@UKUUVa¯UUmJUƒVIXmI@UU@WmVmkUV@b¯w@lmI@W@aƒ@m¯LXbmJVLklWL@V@XXŽmbVVU@@VU²Ul@VlX@bš`Xx›zUmkUVÒlŽ@bXLWxXVlš@V„bkLma@nmVmULVbmVUb@lnzmbUÒVl@°nLV„lJkn@bmJk_ƒVmmkblxÈx@LUb„xVb@V™n@JmLVŽUš@„nV@¦VbnJ@lVVbkx™bm@UxVLV@n`UnVVV„kl°z„xVb@VU@@ÆlXnWm¦nbVK@XVVUVVl@X„KUV@nVL@WnIWŽXLVKVLlxUbVKXVWbn@@UnKVLVb„JšU@aVU°b'], + encodeOffsets: [[112354, 30325]] + } + }, { + type: 'Feature', + id: '4304', + properties: { name: '衡阳市', cp: [112.4121, 26.7902], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lšV@XV@„mXVlXL„W‚X@l@bVxn@šŽšUVkn@VJ@I@alU„JXIVm@»‚LXllIXVVU@Kl@VnXKlb@lVbXIVVUšmVVU`@nbl@@lXLVVVKVbnXWJ@VXbWxXb„Ul™VK„¦nLVVUVVbšb„K@U˜LnK@Un@VxlUV`UnnL@VVL@JV@VUnxnKVbV@@VšIVUnJUVUl@nW„XllIUa„KVbÞLV¼²`V@VIUwlaVmXa@IWanK@U@m„kVƒVUVaX@lšnaVLÈ@‚¥@kkJUWJUaƒXkaUm‚wVXJ@_lWUU@¥n_‚KkamUK„™@amKƒnKƒbV£¯W@k„aWan@@UnwlJ@a@—@UUU@W‚wn@Va@km@UanaWa—UVƒUUVU@K@aƒKUI@wƒKUUVm¯LWUXƒ@mak@UK™LWbUKVUkUmVUKƒLkJ@nƒJ@I@mU_UK@VWkUJmUUL@WkI@V±VU°kzU@Wy@kUm@UWU@@nmKUnkJWIk`ƒIUlm™k@mUUkUb±yUX@VUV@bk@WlXL@nVlUl‚k@WI@ŽkLmš@VV@XVmnnVWbnVUblJXkVl‚XXlWXUJk@±™@nXVWVnL@xUVm@Vn@J—„WK@U™V™@UUVUVKUkkxULW`k¦m„@bkJm¦U@ƒmUX@`UImUU`ƒLVbUVUU@LUbmaU@mJU@U™UIƒKmxkLUl'], + encodeOffsets: [[114222, 27484]] + } + }, { + type: 'Feature', + id: '4306', + properties: { name: '岳阳市', cp: [113.2361, 29.1357], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@wUklmUUmU@@UVm@wUaV_mmUKmwkIkJmUUnm@™™@UUƒbUKUƒmÛamm¯xVLkbÇÆƒUƒVUzkVUlƒUUKWLX¦W@ƒVUUUaƒKUbmLKm„@akU@aƒmVaUUVIVWkk@wkƒƒ@@xmLlmÅwmbVlXlÝIWVkK@kkVƒL@VWKU@Ublnaƒƒm@b@bšnW`@XUJk@UUWKƒk@UKƒnn‚@xmLUVm@kbVbV„nV@V„b‚@KnV„LWšXŽÆV̦VblŽš„n„UJWz@ƙVóUVbkV™aÅx@¦lVUbVVknWKƒ„k@ƒwƒK™VU„Å„ƒl@zkb@`m_mJ@xX„mbVbœ@llV@n„@llbXL˜UXalUšl„alVnwnLVKlšVbX@@I„V@blJ@bVL@VVVUXȤ‚VnkVÑXmlbnš‚„VKkÑř@UmaVç@±XUlI„xlV„@VaX¯lUVVUšVJn—V@°°nް„Vxĸł°¦šb²¦lJ@U@aUK@kUm@_m±VIXal@„Kl@„bV@K„K@k„m@UmUUaƒK@_UJƒaXU˜@Xmš_VmUk@WUk›@kU@a@m@UƒaUUU@al@ny‚XXWWwkly@¯n@@bnV@k@mVI‚„œVlUUmlU„JUw„I‚bXƒVaUal@K„b@ƒVKVkXVl@VkUU@ylUœVVaVL'], + encodeOffsets: [[116888, 29526]] + } + }, { + type: 'Feature', + id: '4309', + properties: { name: '益阳市', cp: [111.731, 28.3832], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„ŽÆxXL@l‚V„@̚VI‚bXKl@nVV@„XVŽ„JlbXalX„W„LVKš„„UVLl@VV„@ôބ@@Wn@lLlK@wnIVJX@VX@lVVUL‚VnkVVnKValUXblKnXl`UbVLÈU@W@IšKV@@bUV@Lš@lƒXV‚@VXXblWnLVblb@JnL„VUn@llb@„ƒx@ÞUV@nU`VÔmlX„mbUKUVUV@LVVUn˜ŽUb@°UXš@U‚VzVxnlVškšVnlVnaWƒ@wnIn`@_la@y„kƃVƒšU„L„xl@„ƒXLlmUUVakU@¥ÆwšblUUaôVšU@ÅXyVImƒ™ƒkUaġ¥ÅUWX™ƒKmU@Lƒa@UmUUƒUalan@VUnK@wm„m‚L@V„lXLVVl@VI@WX_™m@a™¯mKUkwW¥UK@_UWWLUVkUWL@WUIkVƒU@JƒwkLUUmJVI@WkXm@VmkKUIU@mmm_@VUV™@™„kJċwUU@KUWkkW@IWW@km@klwkWVkkU™V¯m@kWLU`mIkmkXm@@`@L@xUKWkU@VL@JUU@mbUKVa¯WVnL@`lXUVkU@xW@UbUWVU@UJ@„lnU@m‚nÈmVƒa@bUL™wUb™@@VkxmUUƒ™UV›K@IƒUƒmk@akm@wmIƒŽkK@b™VWXkm@wULUmm@UVW@Ub„mbkKƒVn„U@Wl„xV„U@UXmWUXmlnbUl¯Lmn'], + encodeOffsets: [[113378, 28981]] + } + }, { + type: 'Feature', + id: '4301', + properties: { name: '长沙市', cp: [113.0823, 28.2568], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lVUllXkx@lln@‚XX@JlXXl‚V@LVVČxlIšƒš@VU@Un`nnV@VJlLUnn@lW@XUJnIVVlK„x@I„VlUVJ@XXKlVVUXKVX@`VLX¦lxVŽnLš°‚an@„„‚bkmVaV@XL@U„KlU@llLXUÞJWkUknaÆxnŽ‚knK@w„@l„@xllUXUJVVUb„n@blV@bnƒ‚LnKVa„LVbVV„UX@W¥XKVL„VVklUVy„U„VÈÅlaUK°wnnÜbn‚V„VL„aVVš@šn@VmnVlIlJna„@Valkn@na@amwm@„UXw˜K@aUUVUUaVa—wWK@kU@UaW@kKUUƒƒ@k™W¯XWan@k„™mmÅ@@I@U@KmLkaVUƒKkLWVUƒk@UVmU@am@kkk¥ƒUƒVUK™„maUb@ŽUb™I@aƒKkkWm@W¯K¯b@VmaULVxUXlVk@UxVJVbUb@xULƒ@ULWW—LƒĕmxVVL@šVb™KUwƒaŲWwX@@WƒUWLU@VbkV@aU@@VUnmJ@VUn@VƒLUK@U‚mUIk@UÇmU@@UW@J@LƒbUmVI@aUmW@@bkXUx@lmLUbm@UbkJ@V@XmlUbkKm@ma@kUaVU@aUK@mImJUIkVƒUƒVUakbWwka@UWKkLUamKUXm`Å_U˜ƒULmaU@@lUV@X'], + encodeOffsets: [[114582, 28694]] + } + }, { + type: 'Feature', + id: '4302', + properties: { name: '株洲市', cp: [113.5327, 27.0319], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@X‚‚Unw„Ė˜KXXVK„@VK@wVaUaUIVwl@kUVWUwVKnb@U°a°LXŽ‚@Xnll„L@bšJVa@VanbšƒVL„U„V@al@@UV¯ÅÇ@Ummk™w@¯ƒyVwnUVVVUkmWV—nKVUƒa@WXkVKn@lUVU„VVVXIlV°VnI@VlKnV@mwVm@LXKWkU¥wWwƒƒ@k@m„X@KX¯V@VUVa@VnKWkœƒV@VUkm@aWa@wkUWwkmV£VÿXUVL@mVIXaò@nW@ašUš@@am™@aUU„UmXmWUk@ƒƒnUW@_maVm™wUkamaUL@aƒwƒW@akI@UƒxUm@kmKUk™lUŽ@b„zV˜m¯xUVU@ƒXVxm`kÈlxXVW„@¦kVUn@xƒxƒKUwÅKVXUJWnXŽmVUxWL„¦XŽm„mK—bmUUwW@UV@šk@ƒšVLnŽlbLm`@¦VVkX@`WIUށxVnlb„WVbXIV‚lI@l¦Ç@UKmbk™W@UbUVU„ƒl@n@VmLXb@JWbUnkbVxUJUxWXXlWL@V@V@XXJWx„zUVVVVKnXW`@bkIUl‚„nLVJUbUIWVXlWV@XklVbnn@xlš'], + encodeOffsets: [[115774, 28587]] + } + }, { + type: 'Feature', + id: '4308', + properties: { name: '张家界市', cp: [110.5115, 29.328], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@InWVw°wš„@š@šblUœKlUlV„U„@VUUUlW@aöUlUlLÞ@@aVKXwlK@UX@@UlwkƒVkUm@m›@ÅVƒ@akwVaUk›UUlUL¯wƒƒ@UUmƒ@UkƒKƒlw±UULVn@l_XyWwÅ@VUUmJUXU@@mmƒU@kxW@UaUIWbU@@mU@UxƒnUbmKk„WJkUValƒ@aUkUxƒlW_@WUIU@ƒbkKWUJVnUb™bWb„lU@nl›„@XnVmV@n—mWV@LXl@X›JXVmzkJUXmƒ™KULm°Vb@xnVmnUšk@ƒƒ™VƒnnlUb@nm¼m@Ûǃ„Vl@X˜mnm„²ŽmL@x™K@LUl@nULÆx@V@VXVWbXX˜l„@nLlm@bVKœX‚W„L°bnUš@VaVUš@šmšVw„JnwVK°zn@V‚Vb„a„@Ċ¼'], + encodeOffsets: [[113288, 30471]] + } + }, { + type: 'Feature', + id: '4313', + properties: { name: '娄底市', cp: [111.6431, 27.7185], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lL„nJ@xln@bnlV„‚„@JœLVUšŽV„nVlw@Uš@VašxVK@a„bnUmÇnV@km@ƒ‚I@VUVVXVaX@@wlVVUkW@_mKXU°‚UbVLnaV@‚V@IUKV@XlVL@w@K@_n@lWlnnJV_XK@l°nšU@WVU@kV@nbVK„V—lƒ@nLlƒ„LXU@ƒlmkw@nW@UKVa¯IVn@@aVUUKl@nXVKVn²a˜ŽXblKnLlmVI@KUU@akLUaVa‚UXm@aƒ@wVUVKnLnWlXl‚n@@U@anUVm@U‚Inm@IUK@UmKVmU_kVUwm@@VmL—K@VƒL™aUaVUUUmKƒ¥ULkšƒVWaXwWa@UXImWUaULUUWKk@WnXbWށVWnk@UV@bU@@bƒJ@bƒV@XkŽmb™UU`VbkaWzƒ@klU@ƒb@VƒwUL@bV@U`ULVL@VUK@Xm@XWWIUbUxm@@lkkÇwƒVÛÇW@¯Å™UJ@xƒI™xƒ@@VULmKUnUxmKULUUm@@‚ULƒU™JkIWJ@b@LJUW„kJWnUV@nn˜Ü_nJšxU@VbšnUxlškb@lš@'], + encodeOffsets: [[113682, 28699]] + } + }, { + type: 'Feature', + id: '4303', + properties: { name: '湘潭市', cp: [112.5439, 27.7075], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Æ`n_VWnLVblKXL@VlbXxlaVb„U„VlUVJnInJ‚@VL@bUVVb@lnbn@lLVank@W@UlIVan@VanK@kVwlW@aX@Vn@bUJVn„a@K‚IX@@VV@nŽVÈl@VJn@VVL„K@UVm@UnIVm@UV@@blUUaV@XK„V@XW@XxƱ„bVxšLUa@™UKWk™@wmmUalk@WXUWkXUVJVaUImKƒVklJ@aX_mWULUUVUƒyXwWI@W@U@UXKWkXWVwU@±_U»ÝKUaƒLVbkJkƒWmXk@UVVŽmIUV™J@UU@UamLmwUVU@mnJ@VUnmV@b@Vm@kkWmXmKULUV@x„Ž@bWnVUbVblK@bVV@LUJknmKkLWa—±bUmULmWk@VLUV@bm@U°JUbVLX@@mlxkn@„WVƒKk„mK@k„'], + encodeOffsets: [[114683, 28576]] + } + }], UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/jiang_su_geo', [], function () { + return { + type: 'FeatureCollection', features: [{ + type: 'Feature', + id: '3209', + properties: { name: '盐城市', cp: [120.2234, 33.5577], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„n@‚°ĀÞ°@¦ULWKkx@bkLWb@lUlVXXJVbƒnUKmxXV@bm@@Xš‚„LޚܦXlVnš‚mzVJ@n@‚²ÞôkƃÞaȰĉ‚wnljÜó„éVÛnĊīČlj‚ĉ@ō@KÞUlU@ƒkklÇÈњÑlġXɛ@UġƒƒaU@U_ƒW@n™@kaUL@VW@kKmkUV@bkbWW@bkzma@ƒJWI@KUKULƒ@U¦™`@XUJ™U@KmXƒw¯KXkmy@aUIWJXXmV@K¯UU@@bVL@¤VLXbV@@JVXVK@„„JVn@bkKmakVVXUVVVlI@`U@nzVVƒb@¤n@@UlKXLVVšI@V@nV@V‚@ÈUx@šóVōšƒkÅWó@mU@bk@Ýwk@WbXxm@@J@zV@kVƒbV‚nLWVUX™WUXUŽWLUށ@Wl°z@VkxU@UVWIxWJkbƒĬ„nW@@bUl'], + encodeOffsets: [[122344, 34504]] + } + }, { + type: 'Feature', + id: '3203', + properties: { name: '徐州市', cp: [117.5208, 34.3268], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XKVX@WnIVx@K°Lnll@@I°K„nVašU°x²mlxš@VanU@aƒk@akmV@@w™@Ua@aUwVwUw@w›@UK@£kaĉlóIÇVkޱ@@kUKmVkIkxW@Ua¯UUm@UVI@WVI„JV@ƒ@Um@Uana„U@m‚I@J@XV@XaVlkXƒVaUUWLUyVIXmWak@ƒXkJókƒJUL@KWkk@ULU@Wa™lUIkJmI™mk„VbVš@lV°kXUKWKULU„mb@VUlVnƒb@VV@IVKUUmU@ak@@bmV@xklƒUƒU@UKmV@nƒJVbkXƒKUamLUJ¯UUVmI™bVV—Ll`@LƒLU`m@kXUVU@V„lxUK@xkIWbUKƒx@V‚kVVn™b¯@@U™@ƒxk‚mbkLÇK™b™@@XnJ@LmVklƒ@@XƒlUƒVkxƒakVVb@bVnUbU@@x˜VUšVb@š„ŽnIĊ`šXVVôJš_„K@xlU²Klk„U„@VaVVÈm@kVUVmnamUUaVƒXIVJ„@‚ç@¥nkVLn›„@@XVK@VUX@JVUV@UnVJVLUJVLUVlšnI„b‚KnU@m°™VanI@anV‚KVL„an„lK„blš„KÞk@¦@¤@„VKnLVK„L„KVzlWšLX@VmV@VbnU°@Ualk™˜WXLVU„KWkUUWšƒ@£Wa'], + encodeOffsets: [[121005, 35213]] + } + }, { + type: 'Feature', + id: '3206', + properties: { name: '南通市', cp: [121.1023, 32.1625], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VJ@bnzWl°L„xnW@LšVVI@Wš_V¥„@VKVL@LXJ„I‚@nbly@aXXla@aVUnllLX@@UVKlbš@@m„XV`V@„bĢ„lkČÇÆƒȘ¯šwnĕVĉVÿšUƒUĠƒŦğlXÑVǵ@±ōLʵ˝lÇbÝÞ¯xk@Çkķé™n¯@ğŽġƴǫ@kVVlUbƒL@xULǂóLUl¤@nkVV°VLkxVb@l™aUXUKWĖklVX@¤UšƒUkb'], + encodeOffsets: [[123087, 33385]] + } + }, { + type: 'Feature', + id: '3208', + properties: { name: '淮安市', cp: [118.927, 33.4039], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@šnźUôÒɴ胚l¦nĖV‚kbmš„X@xVlVL@xUb@bUJVnUx‚šœ„lKVLÈx‚m„zXV@lW@XV‚b@bȚVxnb‚ƒVIXa°L„aÆVVaXUlK@aXIƄVlXKVUlIXalK@alwXLVK@¥Ý¯¯ÿ@ƒmVk@aX@ƒm„īlaXI‚wXJVUV@lw@U¯yb›UaƒUġUÅaUKVknaġm@kUm@wÆIV±nLÆw„ÇnUUkƒ@ƅÝU¯JÝI¯¦Ul@bƒ@@VVL@l@LƒLÅmƒL@b™@UaVaUWmLUKV¹KƒLWKX¥WI@mXk@UmaUVUU@VmL@W™bkIUWƒUmVóIkbmm™@UbVLUxmJkU@bkJWbnXU`Wz™KUÞÈlVb™Lmx@„kè@Æ'], + encodeOffsets: [[121062, 33975]] + } + }, { + type: 'Feature', + id: '3205', + properties: { name: '苏州市', cp: [120.6519, 31.3989], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ôèĊVnX°¤²„lxƒÈÜ@²x@J@b@X‚`nIUƙUUV@bl@VVnL@L@xƒJ@X@blJXnW@@`XbW„kVƒ@UbVxƒXUxkV@LóxVbUVWš²šVJĸklUǬ@ĢƳĠ°@šmƒī°»ÈÇ¥ULUU±a@bU@¯ƒU@KnImUVWUk™mXUVU@lIVaUUVWKUbUkWKU¥n£WakJUkUL›K¯L™KkƒVIn@VaUƒVUUƒ›UkVk@ƒU@amUkJƒ@UUlwX¥W@@UkVmk@JUakL›@kk¯ÝmJUn@nmVXlmbVVkn@„UJ@±WUxV¯a¯KōbżÇxUxƒšUUlWL'], + encodeOffsets: [[122794, 31917]] + } + }, { + type: 'Feature', + id: '3213', + properties: { name: '宿迁市', cp: [118.5535, 33.7775], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XbWnUJVzXKVVUbW„klUWbU@@W@IJ@nƒVmbVbn@@V@„UŽƒIUJ@XUJ@VVn°VVbX@lwlJnUVL@l²@lÈUôJĊklb@¤VLœ@@xVxUxVx@bVbš@@xU@ln„mnX˜mXLVmV@X@lxVnVJôL„LXa‚x@b„@@KVL@bn@@m@™@alLUUVaU¥nIV±‚I@mXI@aWWXU@LlUXWW_XWmaUwǙ@aaWUX@@kWUƒynÇwUKkL›ƒ™VwUmVI@aVa@wUKUk@wƒWn™laUmĕk¥„™ɳçóÑŹV™mmzkVmm@a@Ióƒk@@LWU@`—„WbXLWlkImJVn@`nXVbXŽmL@Vn@‚l@nUVl°Xx°U@LVĠ@z°˜@¦UV@Xn@VJmV'], + encodeOffsets: [[121005, 34560]] + } + }, { + type: 'Feature', + id: '3207', + properties: { name: '连云港市', cp: [119.1248, 34.552], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@‚lzXxmÆV„„@@¦„@l`XnlKšXXm‚KnLla„b„@„xmbm@kL@V@Vl@@VUXšJX„mbš@@„°Æ@èÈzlW°XĢJlÈ`lInbšWV_@mš™@UUķnƒôw°ÆmnaVƒVÛVmĸ»Ģw±Ý@@mUIny™UmWkۥݙƒK™@Wn@@aWUnwVL„mUaWIUWVk@kkJUVWLUkŃWJ@bkLWVUbÅUƒb¯KWbUJ„WXX`WXkV@KWVXX@bWJ@nJU²mJV¦UbVVkK@b@š@nm@@aUK@Lƒ@@awWbƒKóKUIUmkwW@U@UnWK—nmWƒn@b„l@bmVUb™@kw±n¯w™VUb'], + encodeOffsets: [[121253, 35264]] + } + }, { + type: 'Feature', + id: '3210', + properties: { name: '扬州市', cp: [119.4653, 32.8162], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VUXblVVV„b@xV@kz„V@l‚wVLUbVV@VU@VbUbl‚b@nkͰIÞV@Ɔ„VlmVƒÈÅxmKU²ÅJ@xVn@lĢnmbUlVLÆbĢV„V‚bœV‚aXk‚@VXKVVWšXVWXUmKU„aWaU@™¥@£XW‚UUV@@ynam_VWkUVUna@ÆV@mnkWmXkWU„W@k„@@akklƒlWUI@UnKl¥™I@VVma@a@I@U@a@anK@UmK@ÅVUnJl™kI@aVwka@mVIUW@UWL@WÅbmIƒƒULka™UWƒUxkLUKWlXL@VƒImƒÅVƒU™mĉL™Uól¯I±l@ÒUbVbUVVXUJUnVV@lnbl@'], + encodeOffsets: [[121928, 33244]] + } + }, { + type: 'Feature', + id: '3201', + properties: { name: '南京市', cp: [118.8062, 31.9208], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@k@ma@kUUVmVIUWVUUaVa@Ѳk°Jôk@Wmk¯KmX¯aUakKƒƒWU„@XU‚LXaV@@mUaVUUl@VmkaUXm@ƒWUUna°IlmV™m™IUW‚@Uk@@aV@VVX@„V‚I°»nm„U@VKVan@m»UaU@U_@WlIUa™aVaUala@¯n@‚ƒkaUkUUWKU@mwkUUmmL@K@ƒLmUUVƒKƒVÅImU—JƒƒVkVVLšèVLVU@W„L„V„š@nVÜULVŽUL@bW@XbWbkJƒUUVUxVXmVk@WUUkVmIƒV@„nbnVWbƒJU„kUULƒa@Jma@XkK@VVL@L@JƒLUVU@V¼ƒnXlƒbm@kbUKmn@lVb@VXXV‚UV@b@LVbÆxXbl@@lV@U„VV@XVK²VlIš`„UbVbUlVVn@WXn@@VUV@„@KmbVLXқLkKƒV@nX@VVUV@b™nVllbšmnb„IWVXU@`lLlknVnmlLlbUmVInK°nUƒU@l@VU@Vn@„ƒ@alI„`VIXaVaVa'], + encodeOffsets: [[121928, 33244]] + } + }, { + type: 'Feature', + id: '3212', + properties: { name: '泰州市', cp: [120.0586, 32.5525], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lUU@@y@In@WwXal@Þxl@@anVô@ÆX„lŎ™ôU@™Vw@ÇUU@@m@U™JUUWKkL@Vm@@£„aUUmyV@@_kJUUVUUWlUnblL@aUmƒI@ƒULUW@IU@WaUK@£UK@aV@°V@LnUWWXIla„VV™@£UWlkXĕVLVWšb@kUalwUKU¯lU@mk£VôKȁVK@w„KVaUkķlUI±™ğ¥ÝUʚ™Ž¯ôm¦ƒĸ™‚@XXK@VVXUJ@nlbUx@blJkšmIUV@ÆnL@VmL@b@b@V@J@bnb‚U@UšJk¦mL@VVJkXk„ll@bƒ@@lƒXXVWlXnml@nÅU@ŽmbUVlVUXn`mb@zU@V‚VWX@¤š¦V@Xb'], + encodeOffsets: [[122592, 34015]] + } + }, { + type: 'Feature', + id: '3202', + properties: { name: '无锡市', cp: [120.3442, 31.5527], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nLƒÒlxUVkL™am@™ƒkVWUULUxVVVbUV@bVLU‚nnź™ÞVĠ¦X™VUUaôw@KlUVw„WUwVa„@lUXƒWa@_X@WmkI@a@W„I@w@KmKUUk@@aVUšVVÅmJ_@W@a@I±wÛ@ƑÇkw±ƒ¯£mWĉUóçƒK¯VkUWK@XkV¯UWabƒmUa™UUb™lln@b@xƒbXŽWX`@„VxUblL@bn@Vb@`m@XbWnn@l¤„n@xnVlU„™VLÆWœkV@VbÞJ‚_nƒl@nKVU@aU™U@mVk°WVLUV¯bVXŽ˜bXlVn@VmL@x—V@bl„š‚@œnW@X@VVJ@²VJVU'], + encodeOffsets: [[123064, 32513]] + } + }, { + type: 'Feature', + id: '3204', + properties: { name: '常州市', cp: [119.4543, 31.5582], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„L˜ŽnxUbVVƒL@xnnW‚nn@VVXn@‚yœImx„„°ƒšL„a‚¥n@VkšKVw„W@nX„VJ@b‚@UVn„ƒ@UnUV@L‚b@`VLklVÞn„Æ@VaXLl™ÈJšmmVUK@aVUUaUUVwVKXVlUš„n@šblKVUkw„ÑmKUVUI@±UI@U@WmX@›™kƒ@a˜U@wnK@UUmWk—aWU°aVUUK¯XUl@nVŽVš@bUVmLk@m„`ÝIUaU@›lÅXUKƒškVmU@wƒmk£m@XmWan@@_Uam@@akKVaUw@ƒW_XW„a@w@akmm@mL@UJmnUKƒ@@XnJWLkKUb@„Vxk„WƒL—aWVUImVULUK@L@lkLVVVllb„m@@°kbVbUbšbVbkJ@XV`V@Vbn¼'], + encodeOffsets: [[122097, 32389]] + } + }, { + type: 'Feature', + id: '3211', + properties: { name: '镇江市', cp: [119.4763, 31.9702], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@šVĊKšn„VÆUn„„J@UWKXkVLlKVwX„šVlbVK„„nJÆaš„ķn¥°óÇIkšWKUbÅ@mƒUÝlkUK@_a@KVUVm„@mƒVU@@aUIWƒ@mƒXUx™LUlm@¦ƒb™K¯„ƒƒnw›Jzm@UW@UmmXmm@w„KUUVamw—ƒKm@UbUL@ŽƒVmn¯¼JƒUW@UUU@@bl@@VŽVXšJšnnU‚‚k¯JmbVV„Xn@VWlbUnk@VVUŽVb@nU@WbKWVƒ@XV„„lLVb°bnW°Lnl@X'], + encodeOffsets: [[122097, 32997]] + } + }], UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/jiang_xi_geo', [], function () { + return { + type: 'FeatureCollection', features: [{ + type: 'Feature', + id: '3607', + properties: { name: '赣州市', cp: [115.2795, 25.8124], childNum: 18 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„`l@Èbln„@„KVLl@„V@bȎlnšKXkVlVL@„lJnb„¦VKVVnX„W@w°@VU„mln„UV`šU„bVUV@„xnKVI°KXKVkVL@al@Xa„LVlULWV™VVL@b„x@VXVmb@x@V™VV@nn¤„šlb°b°KXXWbX`lbXx‚z@x„`VIVUnK„L‚x„WXLVKVbVLVU@wnW°b„@nalX„‚mXVJn@U²mKkVl„U@@xlnœaVmlKnœ@JVLlŽnVššl@XXÆèVlUX@xVLXVšb°W@wnUWmXk@K‚LVwUmUkUKUw@wVaVK@kƒ@WnkUKWkwlmXL@KVUlLVKXmWU„L@ašL@malaVk@aa‚ašƒnXš@VVUblb„Jn˜ƒXa„V‚wn£„K@UWmUk@ƒUaWIV@b™JW@KmmU@aUUUkmKkVKlUU™nKVU„lVaV£Å¥WUUK@UkUUw@m@mIkƒƒUUWƒLƒK¯Uw°¯@wUKUbƒKmƒ@kkKUL@UUKV¥U@manw@k@U@Wm@@U@Wwkm„wWaUU@UUmV¯kwƒ@@kmƒkKkUW@UK@ÅV@XWWkXa@Ul@Va@KVaUUU@ƒaXwla@UkVWaXk@K@lmkUmV@Vmbk@ƒ»XIƒ¥VUkƒVUVU@anKVUƒKUalU@wX@˜™@a@K—@ÝwƒL@ŽUnÇlUIkJmn@ŽƒbVVb@VmnkLƒV¯U@ƒ±l—IWmƒ@kaUI@aÇU@K@KUIkbWbƒJUIUyƒX¯ƒUbU@méUUmUk„WK—xWIkJm@V¥U_UJUwmVkšƒUU@ƒƒƒ@knƒwm@UmkWJkL@n@VW@@‚U@knm@kUml@xÅxƒ@@XUJlb„@VX„JVxn@lbV„@lULnV@VlnV@bWV@bXL@lVLVb„V@blLn@Vl„K@xln@bX@lašLVbnKUVVb„KlXVVkxƒV@nnVUb‚lV@@z—°WWkbƒIk‚WL@LUJ@bUI@b™`@UmI@mkK¯XW™™mUV¯@UUVUUam@@VULWUJƒIm`IUJ›KUkW@Uxn‚WbnnmlXbmIUVmV@Vnb@V™LUKWLnÒVVV@V„UL@„kJUV@bƒÈ@ŽšV°šŽ@XVV@l@xUz'], + encodeOffsets: [[116753, 26596]] + } + }, { + type: 'Feature', + id: '3608', + properties: { name: '吉安市', cp: [114.884, 26.9659], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lxnb@V@bV@ln@‚n„‚lInš@blVXK‚nk¼@VUKWL@b™L@`UXU`ƒ@V¦XLĠ@lJ„¦@„nV@l°nn@‚mVXnaš@nb‚K„n@l„IVƒš@VanJ@_lKVVnš„L@L‚K@Vn@VbšUVanKlLnbnJVbšnWVnVVanI@‚Vb@L„bVKVanXVbVJVU@aXLll„bôlƼXxVLVK@Xn@ƒxnVVVmb@LnVVKVXV@@mnaVXUVnV˜K@_UaUmšwnKV_‚anKVLš»„K@¯ÝU@›™U@kWlUn™lknK‚VnaUkma@ƒUIUwl»Åw@ƒVwV@n™‚n@ÈXlKVmna@kVw@anm‚@n_WWk@™™mUkUK@Im›kLUn›bkm@wV@kƒlUnLV±m@UInWƒkWmbƒ@¯amX@xUVUKUaULWKƒXwƒKmLUVUJƒ_@wyWwkaW_XaWW¯L¯akaƒ™m£@mUUš@U@wnaWU@Uƒw@aUKšUXUVKUkƒKWbk@@bUKUlWL¯LUJmLƒwU@UVƒa™VU_ƒVkmƒnUV¯@@xƒXmWUUULƒ¥makI@ƒUKUkWl™LkmǍ@aƒUk@UKƒLƒ@kmÇak@ƒ_VlkL@`lbnšlLVanLnbmVÆln@škJlbknmKUbÝmmwULUK@bkLWKULUUma@Kk@UV@L@llbVzšxUxnl@bVLmŽšŽ@IVJXœVlƒLV`@bn²@J™@™V@Xmbñ@WbUJ@bm@@LUĬU‚„¦lV@xXb@blnUV'], + encodeOffsets: [[116652, 27608]] + } + }, { + type: 'Feature', + id: '3611', + properties: { name: '上饶市', cp: [117.8613, 28.7292], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„„@„V‚š„„I°`nm¤²@bVJUVVXUl@Vmb@xV@XbmVVœ@lkLmbn`VbnU‚@Va„UnbVllUXV„a@w°VW@_VWšLššnVlbšLVbnl„KšnVK@IUW@_@am@™‚ÑUólK@U@WU@VwU@UI@aUU‚aXƒƒ@kwmJV@yX@k‚anƒƒ@mkwVmmI@aUU@aUUW@kVkV@@anKš»„XVWnIVUl`@_„W@wlUœV@UWKnU‚bnްInJl„UV@VnI‚b„Wn@VklL@l@Vn²m@U`kI@bWJƒnV@°VXnJm„XVmx@VVL@bkLmWULUmU@ƒbWXb@llnX@‚xkxVV„nVV@¤nL‚nVxnJVXX@˜ššbn`VI„b„@„blmlLnaV@„blWXnlUnbl@„ƒšKVanUVmm_XK@kWWnašU@UnaWUXa›ƒXamUkKmXUWƒLX¯WakKm™nUWwXa@KW_„aXWW_@WnIVl@XU‚LnWVknK@ImyUUÆbXK„Û@W@IÆUnƒVÝlkVK@mUIVwkUVaUm@aVIVyXIƒaÈwmmk@UnanVUmÅaó»lwšW@kkUVmUK@WKLƒUmWULkamK™Lk@Wa@wk@UU@U@mbUIWVKUXWmkUmVm›U@LkakKƒw@w@U™¯ƒ‚ƒUUn¯l@bmn@xkJWxkL@VkI@mƒkmJUI@V@b@VVxnbWlkÈkVƒLƒbkKmVƒL@V@²nxW‚kLUL@xlKVx„bXmVnšWJ@ޙ°@n™xUKUw±`UImVmnU@kalm@akwƒU@UUJmxU@@Uƒ@kU@Um@@Kn™ƒVm@k™KmkU@@WUnkLWxkVUwmKmLkU™bmKUbVŽ@xUnkJ@n±ŽšUxVXUšWJ@LUb™lUnm@ƒW@nknUJUVm@kXllknVbÆK„VVbš¼V„@šUl'], + encodeOffsets: [[119194, 29751]] + } + }, { + type: 'Feature', + id: '3604', + properties: { name: '九江市', cp: [115.4224, 29.3774], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@WUkVUkmaƒVUb@mVUam_nalK@kU›nUWaU@@wna@UVkUWVUUI@a‚±n£m¯_ƒJ™ƒU@ƒƒƒĉ¦Ul@UV™Km™mLlm@ğ¹m`Uk¯@@UVK¯™@UUK@amkmKkVVUa@UkUƒKƒŽUa™L@VVXUJ™@ƒnƒ@™š™WUbƒnVb¯V@LÅlÝIƒJÅkݙm@Ua™WUU@UmUXmmwVUUKWUX±mUam@kWƒzUaVmÇw@aÅLmKXƒ‚UWKkL@W¯IƒwVw™lkUƒJ@Um@ÛÈWށKUxWkƒaUU@KkLVl@„UKUX±KUb@nVVUbUVmaUlUL@„ƒaUL@‚@nUlWzX`@„V@lx²„@Vlb@bšVÞ@°nl@UxVL@lUbVV@n²xVUVmnUÞb‚a„J@IšV°xnbl@nbÆ@VwnK@VnXlK°xnUlVX„V@Vl@L@lk@W_XK@KƒkWxUL@J„nVx@aX@VVUa˜IXlmL@bVVX@VbnK‚a²XVWƒk°a„@UnV¤nbmLmW@XbmJUbVL„aÞK„L@K@U@aVKlbV@nXlJœxV@VnšŽVȚ„ÞKôbźĕČmV@ĊšŽ²xÆIšV@Þ¦ĸ¼ÞVlŽVÞnxln°Jœk‚LXWVUVUVwnJVI@yn@lXlaXmWI@w—»ma@UmK@akKkXmW@_kaWakKWk@@K@IšWƒkUa„ƒ'], + encodeOffsets: [[119487, 30319]] + } + }, { + type: 'Feature', + id: '3610', + properties: { name: '抚州市', cp: [116.4441, 27.4933], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°V°UnÜ@n@lnLlV@bšV°L„lnLllVzVVXlV„V@@L@xX@WlX„m@UVƒL@V@n„°škVmVUnKlaXxVbšnlU@lVVnaVI@aX@V„šJš@V„@b„b@šVbš‚@X@lUL@Ž@VlIVm@wUVanLšalVnKnLVxlUXwlKVm@k@Una@mWIXKWUÛVƒk@a@UVWn@@kl@@W„XlW@_Um@UVK@a„LnalInWV@@xnI@¥‚K„—šm@kKmƒnk@mlI„¤laXbVblknV@U‚KXVlUXa‚@@Unw@±mU@ak_±a@ƒUJUIƒVKW_Xa@aWU™šK@mmUVa@IXa@UWmšannlmX¯WKXwVUVwƒ@XUlK@klJXa@kƒkmm@Uwƒw@¯ƒW¯kw@WmbULƒaUUU@mVUU™WmkUb™KmkkK@aƒkUƒ¯¥Uƒl—ƒm@akU@mš@KVIVV@KUkUVUkaƒUWb—„mƒIkaVaUU™@mW™„b‚b@bUlkb‚b@n™K@bƒKXVWnULkKUV@LWKknlxXŽVLml@X„Ž@lULUb@xVxVLVlVnUxK@LWlXnmV@x¯X™aWUUK@wVWUkÅçm`@mn@bUx@lmbUnkLÇWm@mšU@Ux@„Æxk¼VxVJ@„nbVlmbUmLklmškVlX@‚VœšV@°Þ'], + encodeOffsets: [[118508, 28396]] + } + }, { + type: 'Feature', + id: '3609', + properties: { name: '宜春市', cp: [115.0159, 28.3228], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@VlbnK@b@JšLlUnx±ĀXxÆW„X@lš@V„@@blJ@nX@˜xUbVVUbVV@b—VmnmJœ„@bmbm@klUbƒLmbœš@lVb@xUX@bVVVbV¤@LVV„bXlVw‚LXÜÇn@@V„IlVškUx„x°J@XlKXLV„‚WnLÆK@bÈxUnVb„ylXn@Vbn‚W²XV‚LVVUŽnxWnnV@VVVšXVbn@ޚÆl„IÞJÆk@K°UUa„mVa@UUUš»@wV@VƒkkUKUVW£U@UmW@@aXkVUnVlKVV„UUkVmU™@kWaUanU„VVamIX¥W@@aUaUVW@_mW@UnIVVn@VbVm@bVL@anKVUkƒWK„UXV‚Ikx‚@na„bVK„b@nVJ„_V›@Vw„‚VUVVXUlUUaV@X@VblašbnKlkVaXaƒ¯@m@U„KVUn@WƒXkW@@w@KU@UƒWkUUUykkmKƒk¯K™U@akUmK@k@mmÛ¯V¯U@‚ƒL™¼UKmLbU`mL™xVnVb@`—LmUVUUWmb@nU@UWULmU@KnaUUmU„wmJ¯IUJWIkVkaWVUIUlWaUIUVkKmbUIƒÒlVUnnŽ@VlLUJ@bUX¯@ƒaWVUKUXƒKUbm@UwKWa@a@VkUWn™@Uak@mbX„WJXbm@mL—aWVk@™wƒL@WmanU@knwWmkaWL—KWUXaƒU@¥l„UVVVbnwƒ¥nKV™»@aUk@a@UƒJ@kƒmLma™@mbUWnm@ULǺ@LXnmxUŽm@UbkbW@@akLmWk@UXmJmUkV@VUXVlULmKUxkL@lmXnJ@X‚l°Vnb@bU@WbKUX@VmKUX'], + encodeOffsets: [[116652, 28666]] + } + }, { + type: 'Feature', + id: '3601', + properties: { name: '南昌市', cp: [116.0046, 28.6633], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@šXš™„@„mš@VIUW@UšKVb„„LlV@VVbUŽlUnLnl@bVL@V°šUL@V°@Vln_Ġºn@‚knKnššLVU@VkĊ¥Vk@™Uƒ™»UaƒUÅLUalmkklWn@VUVIlm@m„Xn@VmškVa@KXIV™UWVw‚™²@m@U@VK@k@W™Ua@™ƒa@aUƒ™@™IUƒW@@bUJmbUU@kkV™mUaWwkbmLUVUn™lWbUbklmL™akbUaW@U@VbkVWVUUUVƒUx@‚Uœƒ`UI@mƒaULƒamb@lwJWUƒVXLl„UVmL@bUK@aUnUam@UUmJ@VnX@`UXVŽVb@bX@W¦nJUbƒUmVVbXb@lVšUnVlƒVUUkLmUUVWl@bX@VnV@X¤VUVLllU„U@@x™¼VV@V'], + encodeOffsets: [[118249, 29700]] + } + }, { + type: 'Feature', + id: '3602', + properties: { name: '景德镇市', cp: [117.334, 29.3225], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VVX@Vbmz„xUlU@mbmL@V²xVbUVVblbX@šVškVykValKVI@bn@n`lVWnX@l„L@™WKnƒVIVa@¯nK@alIXJVIVWUw‚ƒn@nU˜„nK@alI@a@anKm_™a—™W@UWmIUwmmK@£UUƒmUUlwwW@km@kWaX„aV@VnVKnXlK@aUK@UnwWUnƒmIUW@¯mU„XI@alJV_n@m±@U@kkKUlm@ƒXamJ@UVUkƒmI¯JmamVXL@V›UkV@xƒX@`k_UVmJUXƒW™¼mL@bU@UllX@VV@bVV@bnJUnlx@n„Žm„b@lWŽ@zU‚nIlx„@W„bVV@bVJV@UxV@@X@VkLVôÒ‚šn@@b@`VX@J'], + encodeOffsets: [[119903, 30409]] + } + }, { + type: 'Feature', + id: '3603', + properties: { name: '萍乡市', cp: [113.9282, 27.4823], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VWnL@UVW‚LXaV@@ama¯Uk@WmInW@klKVwnLVKUkVW@UlUnVnIVWl@nXlK@bX@laVan@VnwWm@KȹVK¯m@kmU@ƒƒ¥kIğ@WKU¥„@V_VW@_šK@aXKVL@Ul»mWLkU@am™kJƒm@kmU@@a@UmakwU@›„Xlƒ@VXk`UIW¼kWWX@‚œ@l‚xV¦XlW@Ubn„@ŽmUkL@UmJ¯UkUWVUaƒUlm@UXWl„nUJ@LmLU˜nXll@bUVUUmVUn„Ž@¦šxlŽnn@VÆÈU°kbV„VxllnL@VnVVUl@V„„anL'], + encodeOffsets: [[116652, 28666]] + } + }, { + type: 'Feature', + id: '3606', + properties: { name: '鹰潭市', cp: [117.0813, 28.2349], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@XV@nlšL@lUnš„mŽ@Ln@@VlV„@@VV@nwVI@V„Vlx@bknlbV@nmnUVJ‚_²‚VxVLšw@mš¯@ÝXIm™nUWƒaUwkL@wVKlKXmw@±@U„KnUlL„a„KlUlÇXkmaUw@U@a@Uƒ™UkwUJ@zWJ™w@WbkVWUL@VmUklUaWakbƒ£kJ@nmln„lL@Ž™nƒ˜L@¦mJ@wU@mXkJmbƒK@bUL@VVn@`kXƒW@Xk@@lm@UX@V@b„lÜUXVWLXJ@nmb@V@l'], + encodeOffsets: [[119599, 29025]] + } + }, { + type: 'Feature', + id: '3605', + properties: { name: '新余市', cp: [114.95, 27.8174], childNum: 2 }, + geometry: { + type: 'Polygon', + coordinates: ['@@m@@WULUKWwÅ»ókƒakkWK@bUVUIUamWUbULƒa@KUa@mJUbmUXU™mUamImakKmLUb™VUam@@UL@KƒKm™UUkL@`mIUb™@U„@V@bVl@bš¼UŽmL„¦mxUaUUƒVkŽ@¦„VWbXV˜LXKlbXnmx@lmVnb@X„Kšxl@XU˜bnKn@WaXIWƒnal@Vbš@XmlV@U@bXb‚LVxn@Va„LVWVLXU„b°@VW@aVIkK@UmVmkU„ÑVJnalLVUVJXbVkVJXUlblUXJVI°JnI'], + encodeOffsets: [[118182, 28542]] + } + }], UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/ji_lin_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '2224', + properties: { name: '延边朝鲜族自治州', cp: [129.397, 43.2587], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Wxĵ„mš@„ó¤VX@@xܼƨš²xWxƒV„V@„XVƒ„„„ƒbWšXllaÞU°Ċ„@ô¼„LôÝWanV¥ƒÑnĉ°¥šÅX¥°¯@w°w@»°k£°mÈŹ‚mÈbƃŎ¦„K°z@Žkxl¦UbU¤šššklV„KŤÞȰ@@bšV@nVVUlÞ¦lUllœVlU°ÑU¯Vƒ°w„bXxl@V޲„˜@n„ô¼ƒó°™kmVk²ĕ‚w@wV™ÞÞ@@Ġƒö»˜¯œ@‚„šbnb°mÞ¯°V°„ÈJmX¥mam™UřƒUƒlaU¯™ƒ@w™Kk—l±n@@wƒkÝVUUl±¯I¯b™a™lƒ@™kLmakbƒ@ġƒŹé°™Þb°šékƒƒLm™„wX™‚aÅb@bVlƒbVb—ÒVbUb›UUanwƒakbVŽUV›ak„¯„UŽƒLmxV°UxnôŻX@J„Xkl‚bkbĉaƒbƒWU„ƒ@ƒk„WUU¯@@klmƒ@@™Å@aƒwWXlKkI@WbUaVIUanUƒƒ@ĕƒ¯K™„mUnWUwm@£ċèkUmbUmm@@nkJUalwk@@nmWUan_óaWmnw±KœIƒwl@UmƒI@an@@mlUÅmV_™KUkƒ@U`@_ƒKUmU™@U¯™mmb¯@kb™ImV¯ƒƒLkbƒKƒƒÛ@ÇnɱJóaÝĢkb@„›x—ÒÇllœ@‚޲V‚„ÆUVV„UÇ°X„óxlV¯„lV@bƒV@n—x›@—¤@„șŎnxV¼knšJ‚nšKX°˜¦UlnVbUbÆVnÞWVX¦llšb@l°œVJôÒnLVbšbXŽ'], + encodeOffsets: [[131086, 44798]] + } + }, { + type: 'Feature', + id: '2202', + properties: { name: '吉林市', cp: [126.8372, 43.6047], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ôl‚zšaÈV°„šK@„mŽ—LWl™nšVxUV‚È@ŽÝĬUÈn‚ôLša‚„²VmĀkV@„ĠĊnU@b„V@b˜@nl°UVnÞaôJ@bš™V„¦mlkššbmVXx¯@Vxm„nbƒ„šbÈK‚V@bÈL„wĠyônšmnbÜ@nn„V˜x@n²K‚„„J@k„al@nxÞU„Lź±Vwkw¯LWWUš™kŎīVwƒw„°y„Vĕ°wÈVlkÛ»@wW@Uô£@ƒn™ĶƒXwW™aUamKóÑUI¯›@k™akkW¥XUmÝÅUVaUa‚mVk—¥W¯™Lm™IlmU»mwȚō@ƒ˜£kJUÇk@am¯y¯UVwƒa@wġx¦ƒKƒƒ¯X°Ċ¯¦U°ċWULÅa±b¯@UkÅWmVƒ™ƒkIUlóŽċ¹™`óIƒlX„WŽXxmbUƒLݏƒbƧ@ƒx¯bƒÈ—l@xƒš¯zƒaݤ@nšm„VWb²bmn¯J¯Ò@n„š'], + encodeOffsets: [[128701, 44303]] + } + }, { + type: 'Feature', + id: '2208', + properties: { name: '白城市', cp: [123.0029, 45.2637], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ó™ǩŁ@WlwUaƑwÛÅÇéĉamKƒōÇ@Iƒ™ôġVƒȁÑŹçƒ™ÝUƧċĉwóóÝ@Ƒ»ğL¯ll²@ƆÅV@¦m‚Åb@nmlU²VxšlUn™@VbnW„bÇbk҃š„n@èlnlšU҄ްLšx@¼ĉb@҄šUŽċxՃènLVxƒÒƒbÅJ±a@_ÅJÅnƒŽVb„Kl„nUÜĊ@„Uš™xXVÆn„mšVššJÞ¯V™ĠwšƒXw°xWL„x„KV¦ôU„wVÝǬóÞޙ¼‚‚„ÞkŽVôȘxބU„lVn¦ÞšĊa°w„b°@šbÆw„lŤL²`„z°@V@@™nJVnl@@¥nUmmn„@mwnmmUnk@mlwUaƒLnƒ›wn¯°anƒWakI„ƒÇmXwÆamUXUlJXa‚UUklKUknmÞV@‚K@VWÞ@VkUwVƒ'], + encodeOffsets: [[127350, 46553]] + } + }, { + type: 'Feature', + id: '2207', + properties: { name: '松原市', cp: [124.0906, 44.7198], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„šźèȂÒU„óĢ„š@JŎȄ‚‚LnŽĊbÈêÜÆƒxVbkx@XǪłôš„kÞ`„šW„b@n°ašbšKšnVw°`š_X`W„š¦„ĊIkmVšakw‚K„x°UÞb„U@lšƒl@°¦œVW„šaÞbšxÞI@mVI@ƒVkŚUWK„¥nL‚a@ƒ„@ȍ„@°ƒÆ@nU@KÞalkUwVékUWw„™kU›VkkƒJk¯@»ókƒV¯ÆÇI@bĉô¯@™ķw¯nmmÅL¯wƒVƒUÞy@UówÇLkmm@@UóxkkĉmL¯wVwkWWX™mLõm@kűV_ƒƒô»ÛƒÆ¯@™Va™VšaĠVlmğwķUóÝƽ£ÇJkbǫaƽLW@nxݤkzƒy¯XɅm@VšôÇX¯Ė¯ºÝnUŽnLVlUÔmV'], + encodeOffsets: [[126068, 45580]] + } + }, { + type: 'Feature', + id: '2201', + properties: { name: '长春市', cp: [125.8154, 44.2584], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„U°xÆKnn°mĸxš°@Ċó@aÈJ°Å„Uôl@¼l°„IllœUlVƒšXxlVUêVxkllnÈUVll@Vx²IÞ¤VUlVnIôlރlwô_„›„bVaĶLXÅÞÇ@K˜¯@wÛaƒçn¥š¯WXyW¯XwƒUmmÛ@ma™nómğzƒxÇK@aUÇL™a„ƒmanƒUw°@WwnU™al™nkƒ¥šU™@aóIÝbUm¯Vmk—@@aƒU@amVğĉ@ƒlUnÿ±Uƒ™bóKmVÇÞī@ÇVUUw‚™šmXk˜Kn@ƒ™L¯ƒÇU™byókōè@b‚n@lÝX@x¯ô@ƙUV_maXm@aóƒJWxnX@ŽVVnĖVnUJ@nōÆÇ¼V¼kxƒLklÝw@xƒx@zV`ÅbmxU±xU„nnm‚kn‚ŽğU™bUŽ‚šUb@šÅ°Ü„󼄄U`Ʋ@lön‚KšnXWlXUx°xnKĊllôw@Vn@lnÈKôx@VÝz„V'], + encodeOffsets: [[128262, 45940]] + } + }, { + type: 'Feature', + id: '2206', + properties: { name: '白山市', cp: [127.2217, 42.0941], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ušl¦kÒÆ°„IlÒU¤ôz„¼lJš„U„n‚ÆXVl°@²aÆbVKČXV¯°¥¯ĉ°W„„„L‚¥Ģw@x„bUx°V°zn‚‚b@ÈlVŽlIœ@˜w@m„U@akU°ƒkUôwWƒÈ¯VUƒVUƒÅ±U›@kÈk˜Ñœw@ƒlaÞġƒUÞ£@ƅ‚KnÑ̝@W‚aUaVUVkkw@a¯@¯™Ý™ƒVXnW@@WkXmK@xkKUb@bW@Uw¯„mmb@WKUbmUbUaWbƒJĉIVW@I—l±LkšmU™bUm™@ƒnkKWa¯n™@„`Ubma™„ĉL@bƚ—@W`ƒL@n¯‚Xb‚@kb@x™Lƒ„™@V‚kL±™™mlUIU¥mL@lÅx@_laƒƒ@U—aƒV@kmmƒK„£ƒƒLƒƒmKUnÅKVbmXVlèĉUUbml„ĢŤƒIlޝbǦœl‚@ô¼Ģ„@x°„l¤„n„a„l@x™b'], + encodeOffsets: [[129567, 43262]] + } + }, { + type: 'Feature', + id: '2205', + properties: { name: '通化市', cp: [125.9583, 41.8579], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÆlXnĠx̰lȰš„K„°kXm‚@¦Vbk„ŤJšnݤk„VÞVVkȄb°y„™@w˜k„ǰa„wƨ@„aސ„K‚VnaWwXWƒ„kôJš_ČºôVkƒ»óyV£kуJůlÑk¥V™ša@wƒkƒbƒmk£¯ƒ@wġƒó»@›kÈ¥°ak„JÆ£ƒġnkVaĊVkçWUnUaÆLVmnL„„‚KU™±@—„m@a¯U„bmV¯m@_ƒK™™U™ƒaƒÅ™Wó¹ƒ@UanmWak@@wmI@y™@mk„JVa™@UaƒIkJ@n™@Um±kkxƒm™Ik„ƒbÇm@ްbXn„V@ްÈmlÞ¼¯XVº¯Lm„kWWXLmVVlknƒ@@lnWƙ„Vxbmšnšm„¯lÝaVȁè@¼V„„b™„ÆŽ°ÞUVšJ„„kx›I—xƒƒƒIV¤™ÒXxmn'], + encodeOffsets: [[128273, 43330]] + } + }, { + type: 'Feature', + id: '2203', + properties: { name: '四平市', cp: [124.541, 43.4894], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ɇn°W„zlyÞ£mwX@ƾKǬblaÈIƾ¤ôÞĸVĠxnmmVƒ²w‚VnwÆaU_@y„w@wÞxlk„KlwU»È»ŎÅ@mVIUmmĕUU@mWXw„Iô‚@bWnnbU`‚šV@Űó@wÞW@km@aŎ烙@m°Ñ°Inm±aXaƒU™n@mƑšU¦@šÇޝaU£šaU™ġ¦ÅҙJōUŻókUÇ@™¥¯ak¯mUVak@@aċçÅaUƒm¦Ý`XbƄ@n`ƒI™xĊÞōÞml@šUb@Wl™_¯JkšÇUÝÆÅb@n™„llUb¯„±a@ƒ—ƒWĉJġ™Unóšm¤œxôaVnƒxôI@x„V@bmƙ„@lnLmޯޙxVb¯þ'], + encodeOffsets: [[126293, 45124]] + } + }, { + type: 'Feature', + id: '2204', + properties: { name: '辽源市', cp: [125.343, 42.7643], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@żôŎVšIÆÑĢ¥Vš™bV¤°bȍ@™V¥ƒ™Þ£lÇUUUÝlƒÞ£™mţIlƒUa@¥nlWƒ¯ƒL¯™kÇġ¯ğwWmÅk¯UƒVU„„bWlXlmnƒbUx¯xVVknlŽUbV„ÇKUb@„™VnbmlnzUº±bmJUbWÈnèm҄š@X`WL'], + encodeOffsets: [[127879, 44168]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/liao_ning_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '2102', + properties: { name: '大连市', cp: [122.2229, 39.4409], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@‚IÞmVk@wXWÜbnwlLnU„@‚nLlbXW@a‚wnbl@XL‚aš@Ċ¥@LULnJ@xVnmV@VXXV@VJkn@VÜKXXôJlb„xl@„IVbnJVLUbn‚lnVw„JVU@ƒXU‚aUUlwn@°ƒn„VKnV°_VJšwl@nwlV„IXWlIVVnK@IWmkIVaVU@WÈUlmU@U„WUalkXġŻ@kIƒ»mm™akUm›ĉUŁV»²ġVĕ@aUU؍IɃ`ȃ@kƒw@ƒUƒmwĉ™@ƒWķсIĉÇbÝLkymbIƒwÇmÛbmbU„¯ÜõÈkÆVbŎxnXVÆnšǪ¦„bš¤Uš™xÝnĉÒmĊVȄ¤Èš„bƼ„Ā„„ÆÆÞ„źb„VVbX„‚°²¤'], + encodeOffsets: [[124786, 41102]] + } + }, { + type: 'Feature', + id: '2113', + properties: { name: '朝阳市', cp: [120.0696, 41.4899], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@na@UVI@m„ÑW™kaV¥UI@wl@„aÈbšm@wVašk„@@K@kƒ™@a@UUmƒUUalmU@KÇUű¯@±kUKVkUaƒaU@¥m@@¯k@WLUmkn@mmIkm@amU@wVmkU@Klk@U—m˜aXIWWUL™aULVbƒmk@UUmUk±™_Uym@mbkImaX¯WW™xWKzU@WƒkJWwkV™@Um@UbVVVVXb@VWX—@WŽ@Vkb@V™nUK±aUUlwX™ÇWKknU@mmUkƒLUVƒVUUVƒUaƒw™bkKmwnIƒ™kJ@nmbƒ`kmVkLWwUm@UUU™K@UmaUa@UUaWK@mUƒ¯Wkk¯VmUUŽ„xVXUVmL¯ymXkWUbmXUKƒVknWx¯JVnkLƒl@VVxnxlĀVL²WlX„l@bÝVUn@bnlÜaXblIVl@šš@Ȧ@VmbXV‚@@x„VVnUn@`°@VnXU@K@„VV@VmbnVn@ln@b„xƒ°Ub@bšLV`Ånƒ„W@@lUšnnWVU@Vbkl@Xl`XxV„UblŽkX@ް¦V„UVVbUlkV›@UbVbkLUxmJkXšš@b‚bœxVKÆlXX˜bnŽnala@ƒUk@U„VVklKVUXKVU°KVan@VUnLšKVL„WVaU_@mmUXa@m˜wXwVkVWXk‚k@›„k@klm@wXKl@U@KVUUUVaUƒV@„alL„xUx@b°°VnnVšxlIXJmx„LUVlV@bnX@Všb„aVx‚@XJ@b‚n@VŽVXȄl@llX@lU„Vô°°@ބVbn@‚V„k„@VW'], + encodeOffsets: [[123919, 43262]] + } + }, { + type: 'Feature', + id: '2106', + properties: { name: '丹东市', cp: [124.541, 40.4242], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lzXJ‚U@š²x‚@@Vš„@bUVmKUn„°n@lnVK„„nV@n@VlV„°WbXn@‚VzƒJ@¦@bkb‚bUl@bkbƒJ¯zƒWULWbklV„nb™¦VJ@„„K°U„kl@@W„bVn°@„Všm²U˜nX`„UÜLXmVXlKVbUVVnUbn˜ƒX@VUL@lUbWxš@²kl`n@Vlb„@nUVWVLVU@aV@²bl@ÈmšxWX„VÈU„JV„l@„„la„WnX‚KÈkÈ@Va°bÆm„@XV°IVV°UnalƒVUn@UwVU„@@VVJ„I@bl@XK@wWmXU‚UVbkJVXnJVI@mƒknwlKXL@`l@VI@UUaVKÞn„aVm@aÇ£XW„U@aÇUU@mbkKm£™@WW™ƒL@@Kk@kl›U—bWKUkUU¯UõÛƒmUUaVU„U@WU_W@kVkJƒ_WKkV@bUL™¯¯ƒ±mk¯ġƒğÑ@UmwƒKUakƒ™ƒa@a„m¥ÝƒIUWmk@w™mţ—L›KʝbȗKWĢklVbƒX@VV‚knÇV@XUVUblJXn@J'], + encodeOffsets: [[126372, 40967]] + } + }, { + type: 'Feature', + id: '2112', + properties: { name: '铁岭市', cp: [124.2773, 42.7423], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XJm@¯šmXUlnVbUJƒU@bV@UJWL@VXLmJVbkXlJXxVL@b@V@n@b@`Vbk@lxknV@VV™V@bUL@bV@@bVK@VXLWLXJ@LV@nbWJ@IUV„x@LVJUXVxVx@VV@@LXJWL@VU@@L@VnL@bVVmVX@@VVInJmbnLWVnVULVVU@VVmX@@JVz‚l@„nVVKVXރ@mk_lm„UUWV_nJlUÞÑÞVVUVƒVL„UVJ@I„Vna‚@@KV@XwWknwnKlalU„w„aĉݚwšJl_@aUaƒKUUU@WU@WXUÆ@@UVK@n@UnVVšblK@bœllb@b„bW@Xbl@UlnLl°°bš¦nKlVnI„V@UWU@WXkƒw@am@nm@aVw@I@KUaVIm±XÑlknJVnVJšaX_VaUaVKmwnkmmn@lU@U@mnašXlKUmUIVmklaUK@UlUVUW@U™kVm™a@UUU@JmUU@@bmb—KWV¯XUKm@ka@UVKVk@aUKmLkKUUÝUmbXbÇJ@k@WU_@m™™@klm@UXKVaUI@KWUXaƒÇWk™aWUkWUL±U@lUU@ƒUJƒI@V¯JmIm@@aU@Uwƒa™@UV@VkI›V¯aUkƒWkb@bVL„@@VVVUXW@Uaƒ@@b—‚ÝbUV݄@ŽƒLmUkVUbVllLUV@LššXŽWbUXm@U`@„kxlnnJlbnIllšLX„lVlUXmVK„n‚V@L'], + encodeOffsets: [[126720, 43572]] + } + }, { + type: 'Feature', + id: '2101', + properties: { name: '沈阳市', cp: [123.1238, 42.1216], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ȚĊܰ„b„L‚lÞxUbUn±‚@ÈnVÆL@xnLšlUVƒbƒxkImJkn@V±LUxkV@bšbšKVKnzVl@L°@Va„xÞUlbôxVVœ@@V±bnŽ@llXL˜ŽöXĶŽnal@nkVJVI@aU@@aVK@ašUUUU@lmkwl@Ua@_@a@m@U@aUKWwkIlWUanIWK@UXKVIU@@a„VVIUa‚mVknW°™n@WI@KUƒmULWnkVkUWƒ™KkkmJkamIkmlw@ƒV_n@VWXaW™™@KVUkKUkValUnV„K@ÞƒVUÞa˜@a„@VbX@VWUU@Uƒ@UK@ala@IkKmUUa@U@ƒVƒkk™WVwU_@KÜUXbl@V¥XUVmƒƒƒXa‚kŃlUUkIm`UIUJW@UIKmkm@UUJƒImmU@ƒVUXU`mIUbUK@LƒJUU™l@Xƒ@UbƒJ™kU@ƒŽn„m@Uam@@ƒ™aUmLKƒwƒ™mWXUK@kUaÇa@JUIUa@aƒKVUƒUXmƒUy™_@lmbkLUKWLX`‚n@bVL@JXL„‚WX@Vnb@Vm@UbnVmL@V@x@LUbVV@V@LƒUVl@mb¯U@xU@UVVV@X@VVblJ@bn„VKUn„x@llnL±¤™b@k`VXÆK@„kV@¼kl@bWIUl@VmLnbm@@JXXmb'], + encodeOffsets: [[125359, 43139]] + } + }, { + type: 'Feature', + id: '2104', + properties: { name: '抚顺市', cp: [124.585, 41.8579], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„XVl°bœUlJ@UVUš@„bVxV@@bn@nJ°I@U„J‚I„VV@V@k²VVKlXXVšb‚lÈX„ŽWbXV@LVJUbWL@Vkn@lšš@nV`@X@lÈIWanaÞVVVlLnKVL@bUlUL@Vlbn@VL°WXU˜Lna@aV@nV@IVV@VšbUnšl@V‚XnKVa@U„UnyWkXaƒaVk@ašašbnm@_WKXmWanU@alaU—l@XJVLVxX@˜wnKnVlwƒƒ™@V_@a¯¥@UkKWUaUU‚anK@IƒaU@WUaVw@klUVyUUVUUÇ@Iôbša@mnUma@kXa@UWak@Wa—l@a›@WUƒLmU@U`mIUU™`mUk@@UUK±nkJƒbUam@kwm@@a@UU@Ua@@K@ƒVK@kmKU_UKƒUUaĉWmkkL@`™LƒnmlkLkbmK@k™@Ulmb@b™„@Ž„xUVƒIUlmVXXƒxm@™JUUk@WUk@ƒakx±@¯x¯Umb™KUUVmUU¯UmVVn™WkÆ„lWb„„„ŽUnWVU¦k@WaÛV@LV`UxšXllU„@„@VVbnVlL@J'], + encodeOffsets: [[126754, 42992]] + } + }, { + type: 'Feature', + id: '2114', + properties: { name: '葫芦岛市', cp: [120.1575, 40.578], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ll°X„ŽnV‚@XLVb@VVbnb@VšLVV@VVnXxlKnU‚l„_na@mlI„šmJnxlLša„xVbU„VV„UVU„KVlnnV@lmXLšÈWŽkxVV²bVLšm@Ula@UX˜@XW@UWaUUUUVan@V‚š@lUXxlIX„V@‚yXLšw‚ŽXXW°nblJnan@Vzš`l²nVVVl@„nUaVKšbVKnXVaUaVUšyšnXK@kVK‚@X@m@m‚LXa„LWƒU¯„w@™ƒa@UVw„¥°™ó¯¯y¯ƒUǯ»›w¯Iƒm—¯Ç™UUl™¯»ţKċÑţķm¯w@mU_ómk¼VnU`±IkbVlƒnnŽU¼±Lk`@X™Wl¦UbmVUxkXVlkbllU„Vb@bkVmx@XVV@Jb±aULkKWXkWmX¯aUJmIkVm@ƒxU@n„'], + encodeOffsets: [[122097, 41575]] + } + }, { + type: 'Feature', + id: '2109', + properties: { name: '阜新市', cp: [122.0032, 42.2699], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@šXnb°lš„VlnXVJ„LlVnl@zÆxnK@b„blKVLn@@V„aVLVK@L@Vl@XVVInVVKVwlUXwlKšL„ššVVb@aV@X„lUXbVW@n„lWnXKV@@V@XUVVLUVV@@bVVV@@ln@VbVUXV‚I„xVanJ@UšIVWšL@UV@@¤V@nInw˜W„k„lnIVx‚lnzUVÇJ¦VVÜLĸUnW@aV_šWĊXXa‚Knkl@nm™L™a@alUVw²K@UlmnIlJ„w„aVU™kmK@wÅKmU@DzVmVaÝwkƒKƒaÛ¯șĉķ¥ğ¥ƒ@kUWkƏī݃ƒ@@akU„K@KWIUm¯nƒU¯JmwUVmIkJÇLm@™UImJUU@aW@U@@nUb™JƒaƒbXVWn@UVmX@V@b„š@l@Lƒ@™lUb@x™nÇaƒbk@@xVJU¦lbXšƒÒ@nUJ@Vmb'], + encodeOffsets: [[123919, 43262]] + } + }, { + type: 'Feature', + id: '2107', + properties: { name: '锦州市', cp: [121.6626, 41.4294], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nJ@nlmVnXKl@@°n@@¦‚V„bVbUlVL²l°@ƲÈV@LV‚knVb„VVnnWVU‚@XmWU„a„bšIVa@mV@X@@bVVnIVJ@š‚nÈKlInJVUnx°I„V°mVnXJ@LƒLlV@b„@ބƐĬXllV„@Ġ¦ĸ¦naWW@In@manK@UVkXJ@alk@»lU@ƒÅLUWl_@ša²£‚Kkm@kƒwVmULmƒ@akIUa@U@WUUVU™aÝ@ğ›wkƒƒmĉ£UWƒ@@bÇL@m—a@_mKƒlƒXUwKƒLţÓ@UWw@K@U„I@m™U@UV¥„@°UnJ°@@_™KUwƒW@UnaWUmmI@m™ķwUaÇLóVĵwݙUUW™¯šƒ¦Ux@V„b@šƒxV°X„ƒKWbK@n@nW‚@UL@lWL™m™zUVVbUbmWXXWJ—b˜n@Vkl@LlVUn@xnV@bln'], + encodeOffsets: [[123694, 42391]] + } + }, { + type: 'Feature', + id: '2103', + properties: { name: '鞍山市', cp: [123.0798, 40.6055], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@l„œxĠŽÞ@šbV@@w°Vna‚@Uk„V@K@UUUVa@K@w@UnKmUVan@@Uma@UXWƒWK@IUK@amW_XKVLlKna@kmKVak@VU„@VmšU@anIÆan@‚a„šUVnb@blLV`ÞLlU„bna‚Kn@naVU@¥°IVK@anUUKVaƒUVak™@mJƒkXƒ™UVwkƒVUUa°U@Wƒ@WlkXWlIXUlJlaœx‚IVVXLšll@nLV@lLXl„KĊzš¥maUƒlkXaVK„X°y„Ila@aVkala@a@¥„IUy@WmXaƒ¯kU@U@mmUƒƒULkmm@ƒ¯VmnLVU@a™ƒ@U@±w@™VWIkymLUUkJWXƒJkUmxk@™xUI¯`mUULmƒ¯„m@kxVVbWV@„UVƒIUx@bkšVšVVšxUbVV@V@zšJVXU‚lnk@@lkLƒlƒLUU±Jkšm@UIUVƒLUVU@™K@UƒnnV@l@Ll„ƒaUJ@zn`@nWlƒIUVUUUV±Ln‚@nmL@VUVkLVlUxVLVlÅXma™@@akLmWUX@JUnVJVkXJ@X@`WX„VUVUIlb„W@bVUVL@`Un@¦U`@bUV@z@Jm@@XV`„LUL¯J@IVKmKÅI@J™nWVnLnšVxV¤™z@bmV@VUV@bUL'], + encodeOffsets: [[125123, 42447]] + } + }, { + type: 'Feature', + id: '2105', + properties: { name: '本溪市', cp: [124.1455, 41.1987], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lb@Vn„lnVVUb@šVJ@nnJ@bmXUx@xVbkbkŽWLUxnl@Ul@„xWx@nUV@¼Ull„knkK@bmbnl‚LVJX@VIVJn_lJVVšXUmnU°VVVUnVVšLna°V°w²@lw„bl@XVl@VVšIn@„wWWnUVk„JVUƒw@šƒ@anaVkš@@lnLlalKnk„mšK@_lKnlĊXVb„VVLV`nL@lUL@„@L@‚VbV@@V@bn@lxn@Vb„alI²mVL@Vl@nVš_VVnJV_‚@nV„K‚V@Xœ‚@b˜kXbl@XblylUUkš™@Xa@UVIlK@UUWVU„Llm@UUUnKWU@K@UXm„XVa@U°KVUUWUk@ašUVKkaWkƒKUknaWa@U—@m@mk@ƒaUJk@@_WKkLmx„l@nUJmIUWlIUaVWVXn@xWLk@@aƒJUI@Uƒ@UVVxm@UVk„mb¯VUU¯JWUƒ@Ån¯aUbÇ@ÇlLmWƒXkbƒƒk@UƒƒIÇVƒUXW™wÇnk@±aU@@bUVUKUXmVƒ@kaUm@k_±l™@XwVa@kVK@U„Wm—VaUmVUUakLUWWnÛKƒVW_—m±V™nƒU¯@Umƒa@Xk@ƒl¯V'], + encodeOffsets: [[126552, 41839]] + } + }, { + type: 'Feature', + id: '2108', + properties: { name: '营口市', cp: [122.4316, 40.4297], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ĊĖÆn¤„„°Ċ¯ŎWšô„@xXb‚wnKl@nX@VUVƒKmL@VU@Ux݄@Vlb„x„U@VUb@b‚kœ`‚IUlVUn„V@@UV@@JnXlK@bš@nbÆWUkUKVwUklKVU@UnK@mm²KVUVVVU„JXk@mm_@yVI„bkƒ@K@kmU„m@VšLV@VU„KVUVJn@l™²IVV„K„klK@kl@kmVUW™I@y@UUUVa™wUUU™l™@akmmVaUKmIUaƒJk@ƒwkaóIWWÛL@UlmUIU@WW@UnUUm@wmIVK@Kĉ¦™@bWKk@max@bWXkamKƒ@mVkKmxÛaWX@xUlÝnJ'], + encodeOffsets: [[124786, 41102]] + } + }, { + type: 'Feature', + id: '2110', + properties: { name: '辽阳市', cp: [123.4094, 41.1383], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@š`Vz„‚Wn„VUV„L@bVbVJ@IÈbVb@lVLXW‚n„š„x‚LnKVŽšb@„n@Vbn@mƒ„V@šl„IVa„@@WškVV„I@KVLVanJV_VW„UV@nn„JVI‚Vn@na@alLlmkƒVk@»VU@mXwƒwk@@VmkVwXKllaUa@wVwnW@amI@mUI@™VaUUkmmƒ@UkaƒL@ƒUIĉyƒLWkkKU@mKk@™kWKUUJ›wkbkIWVkJWXkl@X„‚@X¯VVbUVl„UxšVW„„lnIš@l‚Ub„VUbVLmV@bUL¯J@¦UVmbm@LmbƒakVÝKU_kK@amaVUƒ™bm@ÅbmJ@b™VUnƒ@UVl@UbnL'], + encodeOffsets: [[125562, 42194]] + } + }, { + type: 'Feature', + id: '2111', + properties: { name: '盘锦市', cp: [121.9482, 41.0449], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Vbĸx‚š@nnJVnXŽmb@V„XVxšL@`¯@mI¯Vƒ@U¦@VšV@nƒJ@V@LXx@VŤÔ„K‚LVx„W„knL@`˜b@nÈK@a„@VXĊ¤„nVK@aVU@UnU@ašyU£Uwm™mKXUšm@IÆJnLUL@J°IVKƒKU_@Wn@@I@yVU@aV_@¥Vm@_UKUV@aƒXkaVJVUƒUXW@_@WWIUlUIVm@IVW@IU@@VU@mƒUVVkJ›_l@aVa@UƒVƒwka@UރVwV@@UnK„LVU@UmWk@mLxWa@wóƒUVUIÇÆĉ¦¯¦¯xʟJ'], + encodeOffsets: [[124392, 41822]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/nei_meng_gu_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '1507', + properties: { name: '呼伦贝尔市', cp: [120.8057, 50.2185], childNum: 13 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„m@Łkƒ™Žƒklƒôƒ@£kJ°ý™ɅķÑó¤ğLĉÅlÇğŁW¯¯›™ƥóÿlwkţÈéÝƛó™°ÞÅxV¤ĉĖWƒ¯lȭţυ̃ɱÿķƅˋğɱřÝţϙȍƧĊţ@¯kWKUKm¹Å@ķJU@ƧÑƧ„ō¥˹Ɔ@L@„Þ‚VLnš@VōČWJX¦@JŻbU@ţÞmVU@ȁýóbkWWLƒƒÅ™¯UWġkmóƒ±UŹôV¼ƽ¼ƒł̥ĖƽǬʉxĉŽŻȗKΕ̛ʵƨʟÞ˹»Ƨţ»Ǖō˷Ȍ±ȚʊĠUɾɜɨmÜ֞߼˸ƅȂ¯ǖKˢğÈÒǔnƾŎՂ@šĊbôô̐¼ƒ@ĊôĊŽÞĀ™xšĖƧL±ŽœŽ‚Uš°U„°ĬƒČ°ÜƒêɴȂVł°@ƒ„nxŎèƒbȄÞȌ΀Ǹl޲IlxĊl²ÒmšôĖ™Èl„ĵºm„ÈêVþ„xɛČʉÇĵVmš„ÒƒÈɆôƐŰǀĊ°ÆǬĮƾb„yĊ@ĠšƒXǀċm»ôw°Ûk¥Çm¯ç™kkÇǫţǕéX_ĶWǖīŎaÆĵĸĊ@ȚȘ‚™ĊLĢĉ„VÆĉʊÇĕóaU¥šĉ°mkŰġUĠřk°mƒÑČÿ˜ÛƒWĸ£ʠšÆxÈÞŎÞ»ʈ²ĊÇČalÒ°Ť±ĸz„ŽĊKȲm¤Ŏ@Ò°¼nyȂUźīǖƳÈē°@šÝ̓@ƒÈkl¥Ççkxk™›JXÇƒUÅ@˜£k»„óƿīÛ@lÅJl¥óý@¯ƽġƍÅan™ċ™°é¯¹'], + encodeOffsets: [[128194, 51014]] + } + }, { + type: 'Feature', + id: '1529', + properties: { name: '阿拉善盟', cp: [102.019, 40.1001], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@™ƏnǟƨʫšŹɆÿ°¯ÆV²ˢ™żÿ@ÝÆŁȰ¯ȀƳĉó™™@ğkyš¹@īš›ƒwl£Źƒƒ¯Ŧé@™ÇÇxŋĉƩUUŃōL™Ç™ĵóÝnƒóç@™™ó@ġƒƱ„¥ƒç™WUçÆōƒ@é—çťK™çȭVһƽ̻aW¥ȁ£ʵNJǓƲɳޗǔlżÞmĠóĬȂɲȮ@ÈĢŮźÔnĶŻǠšŎȭœгŃċóȭţΗÆƑÞƧÅΫóȘǫɱȁġlÛkǰȁÈnšõl¯ô„ÞɛÝkĢóWĊ„zÇɼʝ@ÇÈķlUČÅÜķnέƒǓKȮŎŎb°ĢǀŌ@ȼôĬmĠğŰōĖƧbЇƧōx@ķó£Ål±ĀƧīXÝġƃêĉK°Ýʇƅ@ΌʉżÅÒϱʈ@˺ƾ֛।࡬ţશóЈèʞUš¤Ґ_޸Ƒʠɽ̦ÝɜL׈ɛϜóȂJϚÈ@ǟͪaÞ»Ȯź'], + encodeOffsets: [[107764, 42750]] + } + }, { + type: 'Feature', + id: '1525', + properties: { name: '锡林郭勒盟', cp: [115.6421, 44.176], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ʶĬĊIȘƨƨŽ@ĬÛĢșŤĉĬƒĀóšU‚ÈŚÜènŦƐȤȄłϰUƨťƾÑ܆ğɲƜǔÈèʈƲĊƞƒšɆ¯̼V˺Ò˺ȂŤVĢêU܃x„Āˌ˘ƨ„ưѢmÞżU¼ÆlŎ@ĊçŎnÈÒͪŎźƒĸU°lżwUb°°°Vš£ÞlĠĉĊLޏɆnźÞ„n¦ĊaȂīġѝIĉůl»kƒ„™Çý„¥Ŏ¯ƒén£ġљÝȭxƒÇ™@Åçķ»óƱŎ¥™çWÿmlóa£Çb™yVÅČÇV»ÝU¯™KĉýǕċţnġ¯»ÇōUm»ğƒÑ™wƏbċÇŎċwˋÈÛÿʉѰŁkw@óÇ»ĉw™¥VÑŹU™mW»ğğljVÿŤÅźī@ř¯ğnõƐ@ÞÅnŁVljóJƒwĊÑkĕÝw¯nk¥ŏaó¦ĉƒV¦Å`ğуÑÝ@mwn¯m±@óƒÛKˍƏǓ±UšÝ™a¯lƒōšșk„èƒĬގn@ŤġŰk°ċx@œĉ`Ƨĕ°@ţÒĉwmĉ@ƒƒnƒƒa„™¥ķnƒÞĉVóÆókĉŽķ@ÝkƧƧÛaƒ°Ç@ÝÈU˜óbݼ@„ÛÒV°™@V¼ˋL™ÞɅŤŹǠVÞȗŤÇĖŚōbȁƜ'], + encodeOffsets: [[113817, 44421]] + } + }, { + type: 'Feature', + id: '1506', + properties: { name: '鄂尔多斯市', cp: [108.9734, 39.2487], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ĶL²ĬVłƑkkl@Ȏ™ŘWńÈĬȗ¯™ºlz@ĠššĊôŦô„ÒĠ°kÞܚ™n@¤„UĸèĸbŌÈXŽĸLlÒĢxɲÆ¤ÈÛƾJÈݰUšÅĶ»²VW¯ĸJôšbk‚V@ôlbnĊyÈzVôašb@ĸ‚ÞUl°yǬ²Ǭm°ššk„±lbn°@È»˜JX„VŎÑÆJ@k„LšƒÆl²™Ġ²ʊůĊġ‚řóƛÞÅ@m„ƒmLUÿóĉƧ@™»L@„›`ČĸmšȗÑţů±ĉğl¯Ā™wǎƒçƧŤÛI@±ÜĉǓçō°Uwô™ǫůķƳř±bÅ£™ÓÇwnÑó@ȁƽ@™ƒÇƧĢón»ŏĕóĊ¯b„Å™™VȯÅImƒōKU„™LǓ±Ýxċ—ŋ˜V±Āȗ°™„Źl±šÛ@WÒȁŚŹНŚÅèŌô„¼°ȰɞȂVĊ'], + encodeOffsets: [[109542, 39983]] + } + }, { + type: 'Feature', + id: '1504', + properties: { name: '赤峰市', cp: [118.6743, 43.2642], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ɲŁĢljĊwƾōÞĭ°_ŎŃźȹƒUČÿl»¯ôķVÿǬƽ™ɅġÅÑǫ»̐ʟȣU™¯wVWݍÈġW»Þ¹m݃ɛŎÿŎōͩůV¹›ō™éċ™óŹÅVVĢǩʈ@Ėċ@ķšÛšV°¯xÇÅţ¥™»°Ûô™ĉʟ„¥WýČ¥™w‚灻±mnÅķ¥ˋVƒbUÒġ»ÅxğLƧ™ƒbWĖÅxš¦U°ÝVóŰlô²@š¥ÜÞÛô„V@²±`𦙄™¯Ý@„ŽÅ„VÒō¼ôš™¤V²ŹĬÇĊƑƒţxƒç¯Lk»ʟlƽýmłÝÆƏ@mö°Ġ@ŚŹĬţÆUĀĠNJĠŽX¼šnźVUҚ¦Ċxȼ@ôlx¯łʊÒÜĀˌÇČxƍČÈƐašx„ÒĠŽn¼ŎVȐ‚¼Ģ°ŤmǖČĊþšLV°ÞŽU¼ċÈUƚzÈa‚¤ôbkŽ‚nXšè'], + encodeOffsets: [[122232, 46328]] + } + }, { + type: 'Feature', + id: '1508', + properties: { name: '巴彦淖尔市', cp: [107.5562, 41.3196], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@²@Ζǀݴʶհĸ„˜ƒ¦Ķ™̒Uˌ¼ӾÇƾ¼̨UÞĉ˜Ƨ—éÝ»ƒĕĉ—ƐȍœōǪakó‚ó¯a@™ôţ™aV¯Þ¯°@²él¥ĵğťwōxó¯k±š—Vó@™aóbUÇyĉzmŽkaóŽU@l™aó‚ķIX°±Uĵ¼™Æ¯VÇÞƽIÇÜÅ£ɱŽġwkÑķKWŋÇķaķçƒV@£šmۙlÝğ¯ƒÑťóǿƴȯ°Åł@ÞŻĀˡš±ŽÅU¯°ɅĀ™źƧʬmǠšƐ'], + encodeOffsets: [[107764, 42750]] + } + }, { + type: 'Feature', + id: '1505', + properties: { name: '通辽市', cp: [121.4758, 43.9673], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ôƲĸ¼Æèš@„ÈȮwƾ»ʠĢ¥VÆ@²¥@»Ŏњ¯ĊJŤ£k»ÆÇX¯̼ōšī°aX£ôƒƾȁꥄƒ™aôŤ™ĢL°ƒĸ@Ȯ¼ÈÒʈŚôVXůÆaĠƛÈKƒķšĉôÿ@ğÈĉ™»ÇVn™ĉV›wXĠݰšČÿĸwVƒ™¯¯ǵ±™ĉ‚ǫ™ÅÅm»²Ż±ƽIm¥ţÈķ@¯šƧJV»ÞUÝç¯UġºU£ţŽóaÅÅlƒƒ™Ƨī¯K¯Þ݃ğL̑ȍƽ@ōŎōĀƑɜnÞݺX¼ÇĢގUX°xVšʠȤ̏Ǭ¼ÆÒɆ̚ŽǫƾUĀóĸ°‚k¼ċĀƑVŹȺōń¯`ÝĮƽŎĉxġNJɱłō¦'], + encodeOffsets: [[122097, 46379]] + } + }, { + type: 'Feature', + id: '1509', + properties: { name: '乌兰察布市', cp: [112.5769, 41.77], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ʠǠÞĸɲȺƒÒȂƛŎaƙÈĕȘţUÝźǟɆţšÝˌKU»š@U¯ÜÑ@ƒÞ»ôaV—ÞÇÈ@„¯ÜbƨƨÞlĸ@ĊôlôÅĊU„Ýĸmš¦ƒŽ„bm„„„Ċ@n‚ĊxŤÑ@¯‚ƨĖĊ_@›Čwl¯™ƒȭL›Ý„»ƽ¯ķů„Ǔ@ÇǓbċ™ÅÅÆwÿĠÇU£óaƒ¥¯aŎğĠţkw°»¯ůlÝĵkǻݰɱƧǫaóôɱ»Çk¯ŃóƒʇŐŻ›ĉNJŻĢ„ޝÒÈUl°ƒx°n„Ò™Ĭón™Ċğ°ÇŚĉ¦ʵVƒ°°ĬÛżÇJȁńʇʹó˂ƽŎ›Æţ¦'], + encodeOffsets: [[112984, 43763]] + } + }, { + type: 'Feature', + id: '1522', + properties: { name: '兴安盟', cp: [121.3879, 46.1426], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÆXnlŎ°@LVLĠþœxĊUȮĊnU„ĠV@żaW¯XIŎġƒ¥Ý@K@w@K@I˺ŻŎ¦ƨƒƨÒŎIÆ@X@VºnX°lŎ@ƾĉˤƒȘǷȘÑÝݚÞbVţĸÿŤxÈĖƐށêÇKnĸ¥ô@›ķÞUnÒl@UŚaƒīˋƒ¯ÑƧx@±kXřƐƏÛéV™ˋ»lō¯ĉ„ÅÇÓǫޗĖġV@ğ»›°ĵ„ÇÞǓ¼¯m˜ÛÅŃĉĠÇƾb²çƒ™šéż¯VƒƒğÞml»ōÑV痻V¯™¯šĕÆU¯y°k¯¯V»ôDŽѰa@Źk™ġKţšóŽšbƒ„ʦƽȂó„W¤¯b™Ĭ̻ŎW°ÅÈl¼ţ¤ĉI™°ōÒ@¼±¦Å@UŽġ¦ʟŽƽ¼šÞĢÒm¤„êō°ƒ¦Èþƒšl„k¼Ċ۰JĢńȁĬ„°ƒżn‚ÇbV„ݼ@¼óĸţ¤@°Ånšl'], + encodeOffsets: [[122412, 48482]] + } + }, { + type: 'Feature', + id: '1502', + properties: { name: '包头市', cp: [110.3467, 41.4899], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@źxżĀǔÆǬVȘĀŤ¥œÅƾōôˁʈͳȂŃÈIÜŻ¯ī„¯ōm™¯ɱ˝ƒķÒÝIÝ»ÅV™ƒlÅôфġ™ğVmÞnnƒWçkW܁XƝÆwU»Șĕš£ĉÑ𱱚Åk™„ƒK@lÅIō҃UW‚—IǼ¯@m‚kaƒ²™l¯™ǫnǫ±¯zkŽÝVķUô™˜l²ô°ŎwŦxĶĠk¦±ê¯@ݰU°šbóŤ@š°bôlôǩb›ŎƏȎĊ˜„ĖÞ¼˜ê—ƨÝĊ'], + encodeOffsets: [[112017, 43465]] + } + }, { + type: 'Feature', + id: '1501', + properties: { name: '呼和浩特市', cp: [111.4124, 40.4901], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ʶUĊ¥ÈřĠ¯šĉômšīƒÑ¯m„wk¯ÇV°ÑƒżġĊljǓɱţǓ›ƝóX¯ƒɛÒóa@nÝÆôƜŚĉĢʉŰĊҙ¤ȗĖV¼ÅxWƞۂlXXèm„ÝmUnšĠƒĢóÒkƚ„ÆUÞ¼ÞJĸѰ„ɲĕš°Ŏn'], + encodeOffsets: [[114098, 42312]] + } + }, { + type: 'Feature', + id: '1503', + properties: { name: '乌海市', cp: [106.886, 39.4739], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ș°ÇīXњŗ@ȍlkƒlUٱīĵKō¼VŽÇôXĸ¯Ž@šťê„°ź„k¤„x™œ@Ĭ'], + encodeOffsets: [[109317, 40799]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/ning_xia_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '6403', + properties: { name: '吴忠市', cp: [106.853, 37.3755], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nLV‚@šVLšaÞbn@@l˜š@bUVlUV„zVx™¤kÞVèšXnš‚@nm°a@UƒÑ„@VŽXnV@Va„UšŽVKUUU@@U‚@@KVa@U²@‚wXkWnk„±lLnU@UmmVKnIVWnI@UK›@UK@@UVKXkmWLWUXmlkVwUyVa@w„w@aVI„K@aVÈw„KlLVV@LnV„VVnU‚ܲ°WÈIUÆ@nÞ¼‚‚@¦™@UÞUVW@UxUxVn„b„K‚b¯ÞU`VbǬ™V@XXÆVVl°InmnUôƒ°¯‚anam£œWVX‚KXmškôaVU@ƒVak@@wmaƒn@K@UÛUWKXUƒÇƒ@UI™b@alW@akLUKV@@Ukw±Iš›nL@kmwkWmk@JUIƒůVmnnU@m@UƒK„VKlkUwkƒƒnVUKmbkI±š—KƒkmVkKƒb@U@aƒVkUmn™`kIlaUK@UUKmbUIݚUa@mUa@aƒ„m@UUULUK@bmKkbWI@WXwlkXƒWa@k@kKƒLVkkK@L@JUVmzUKlwUUnW˜£XVlKUwVU@aXI@aWaUw@W@_nam@¯‚UkWVkUWaU@nwmJkUVkWVUmUkJ@ImbUaƒ@@WÅ_mJknmak@@mƒXƒaUV@„ƒxUšƒ„@‚ƒ„@VUnkVƒ@Vn@`ULUbWLXVW@kbUJ@XW`@ƒnÅĖWJƒ@—m°@xƒxšbnUa‚w²lƒÞ°xŤIVVULۂWbšbkVVXÆ`UbVL„@kx°LlV@Vœ„WbƒJn@bl¤ULV„°@lmL@ƒƒ£U@@aUwmKULVxUVVx@„™@kU™@mK¯LÇa¯@'], + encodeOffsets: [[108124, 38605]] + } + }, { + type: 'Feature', + id: '6405', + properties: { name: '中卫市', cp: [105.4028, 36.9525], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°@Èb°KnLš@lVš@@ƒUwVUUwVKnLVx@bV@„¤@„nK@k‚¯UƒVKk£@a‚m„IXa›ƒ@UkU¯Klwƒ@UKVaÅ_UWlU™aXa܁VKUUţJ¯w„ݱkxVbmŽ™a„w@wn¯˜„@XIÆĕ„m‚@X_@WVIlaX@WUXKVaVK@_Um„@lUVm@U„ƒ@„ƒV™„w@ƒVUÛwm@@W@ImKUkU@Ua‚aXƒ@wWaUKkw@UVaUamLU™nk@»±`¯@k—W@Ua™ykbƒI„„@VWJkLWUkJƒwU@ƒn¤mL¯wm@Umƒ²XVWbnV@bmxƒVkxUblLUV@kVWKU¼ƒŽkUƒ@mn@JnV@bUnmJUn@„k‚@XlxšLVVnKlLVV@š@LkKULVbk`WL@lkXW@kVƒ@UÞUlÇX™lkaUbmV¯@@L@šƒV@bkb@xƒlW„—bƒbW@—±@UJ@IU@mVk„VxV@@l„Illœn@Vm@ƒVUbl„@JLmKÛXmVkU›KULU`@LĉwƒKUX„lVUl@Vb„JX¦̼bÞxŎxɜĖĠ„Ŏaô@'], + encodeOffsets: [[108124, 38605]] + } + }, { + type: 'Feature', + id: '6404', + properties: { name: '固原市', cp: [106.1389, 35.9363], childNum: 6 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@Vnn@°xnK‚£„mV@„xlIXVlKXI@Uƒƒ„JlašzVbX@l˜°@²_@¼mlVšnKVbUb@VlxVLXb@xW„bVbV@VlnL@J@Xn@Üx„b„W@nl@nblmnIÆ`@X„@Vbna@aVUUWVkƒ@kbWakbU@VwšW@_l@nmn@@alVlk@UkmVak@@a‚UXaƒL@¯@KVa@axWI@KnkVaVJn_lJ@„X@‚m@nVanUVb@mXLlJ„VWnLla„VVaVX@KXVVkVKlknKVa@aVU@KXb@klJUknUmƒ@K@_UW@alIUamaU¯kJma@IUK@U„@@UW@@aXLVƒVJVaXIƒKlaUkUV@ambUUJkIWJ@wUI™V@JU@UwV@@Um@™nU`@UkUmVUxWUUV@aÅb@aWXkKUUƒUUaWK@wnm@IVU@aXwm@UmVaUalk@anKUwlƒUwlkK@wmaƒUkmmIk@VmkUUbW@UVUnW@kV@xkVmbVnU‚™@UbUV@a›k@kkW@„kLW¤@„nV@VU@W_UV™UU`VLUV@IUVõVULU@UUUJ@wmkUJ@šWI@l@bkKkbVVƒbVbUL@UUJ@Vm@@L@xbVVVLVlVwX@Vb@bmUkbk@@JWIUVÅw@Km@UkWKXxWLÅ@UVUnWK@xkVW„@KULwWVXVWzXVVKVXkV›V@VUbV@U„VV@š@LXxVL@V„b‚Ž„LnKVLVxXVmb@l'], ['@@@J@aƒU@LWK¯UUxVVn@Ġ„„LUW@UbUUUa@KUX']], + encodeOffsets: [[[108023, 37052]], [[108541, 36299]]] + } + }, { + type: 'Feature', + id: '6401', + properties: { name: '银川市', cp: [106.3586, 38.1775], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@šUšwVK@UVWÞUšbšw„V@knV˜@@KU_VK@K„ƒn@W_XWlL@Vn@Ċw@Ulaœ@Wanamī@aƒ»ŋó@aÆÅɲÿUaV_°ÝaƒLƒaUmVwVwX@VUVݚ@@¥Ý»@mVÅÇJ¯XÛ±VUmƒUmU@KUUkKƒLÇxUŽ@bƒLUJ@bƒx@xUbVzUxklWnXV‚KnXWlUL@V@ŽVLœ@VL@ŽmJUXmJULnn@VmVkKƒ²mlXWlx±@@VUb@L@@VV@VVUL™ƒVUbU@WmUƒ@„Ò@V¯bmn@VŽƒ„@lVnUšnVWŽXVl@¦VVUn@x‚š@‚XL@¦‚lXxš„Vb'], + encodeOffsets: [[108563, 39803]] + } + }, { + type: 'Feature', + id: '6402', + properties: { name: '石嘴山市', cp: [106.4795, 39.0015], childNum: 2 }, + geometry: { + type: 'Polygon', + coordinates: ['@@U¯ķó±ÇÛ¯™ķmbXb›@kb@Vĉxm@@UkKWXX`m@ƒ„@LULV`@L—@mU@lƒU™x™aÝVUX@VUL™x™VkLWVšš@J„nVLXVlŽUV@zl‚VL@V@b„„n@lU²WVLlLVbUŽVxUx@xǀL˜xôҜk‚K²ŽVa‚U@wXa@W™ÈĉUa@‚bÈk„m@¯'], + encodeOffsets: [[109542, 39938]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/qing_hai_geo', [], function () { + return { + type: 'FeatureCollection', features: [{ + type: 'Feature', + id: '6328', + properties: { name: '海西蒙古族藏族自治州', cp: [94.9768, 37.1118], childNum: 7 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@„V£°š@laœXô±źwš™ô@„Ulƒża܍n™Kƒw@U„aƒ™ša²L‚mÈLƚÈxlaUa„wÞmÜbÞUšnJ°a„kôƒ‚ÑkwÝVğwÇ@ÝkkV¯¥@ò„»„nŤ¥XImw@mVwša@Åw™mLkaW—wƒ¥l»kçƒó„»@ƒWÑĉŽğ@ĉ„™‚Ń„UwóřVómĵ»™™Ý@VǕ¯kšÝĊÅk™°ÓUklkU±šI„ÇÞkƒ±@šƽJƒ™@UġIk@W¦™VÑșÓÅnťKULnޝX›ƒ@¯mUÛ@WřmóKknōbƒxÝ@ƒŽU@kw@ÿÇLţšÝUkšmwƒŽk™lċVŚU¦™ŽƒLkUWlÅÑ@aƒ@ÅѱUóġʼƒÈĉmŻ@@wkw™Kl¯U™ġ@—„lÇU™Ó¯_ƒ‚Waĉ²Åló¼VbknƒKǎÅ@ƧĢō°Ý@ğ„W™ÅxUUm@™‚ÝXۂW„ULUè¯@mbUaƒLƒbUWġxIUJWz™a¯b™y™@ōÈóLU`ÇXUl™UĉV¯n›mÛbǕLklƒUĉVƒšóaġ„ƏbġKţnkbÝmmnÝWȭȃŽÝXţWókUÇl¯U¯‚ġUɅĀ@°¯„„š¯„VÆnmJ@ĊķnóJUbÝXUlVškL@lVxnnmb@¤Vzš`ÞÞŤ@„VnÆJV„°b„UôJkzlŽkl@²óš@ÆÇ°k˃šÇbÛU@lmb™XV˜kzƒV™ŽɅĀXˢlń„ĬŹ@›éÅ@ĉńưğbUšlŽɜ_°‚@xŦ˜škbVbƒKĢ„ŤVŎް@żÈźlĊ„ôKôb@nôxŦ„Æ@ôŽŎL@þÆb@šnnšWˌbÈx‚InaŎxlU@Ѳ±ƒğVŨƨbɲ@Þ¥ôUUķWVô¯ĊWʶnôaŤˁ@£nmnIôŽǪK°xUXô@Ŧa°m‚kXÆÞVŎkĊ°ÞLȄôyVašIlwX°UVwĢÑÜKôw@nV@œm°nmŽn„Ü‚ɞ£VbmŽXnƒ°ÜÒ@xx@V‚b²UlbkxVnšJUnVVĊ°KȚm°nxÇnn¤±¦@ŽUXVV@„lV„„bmVVȁŽVxšÒ™°šIšbźaȃšbVwš@šƒVL„™ƾÑ@ƒŦô¯ĊkôÑ'], ['@@„@šƒ„@n„òVœa‚w²bVxšxÜaČVô_ĊJšIVmšL„a°@Ŏ¥XlK@ƒšk„l„KVbUb˜@nUĢn‚aÈ@lmǬ»Ġ¯œn‚mnƒƨVy™Ñǖ™Ġ»ɲInŽ‚@@ÅĢƳ@¯°™ôV„KÈbVIÇ¥¯@Ýó„™@ÑnīWKšƒk™‚k@¥š™¯™Åa™Xƒ±VÅw@±Ġ¯@»™š™n™Wmw@ƒ™@¯ƒVƒUUWçƒKĉ„a±VkkƒV¯w™x@šUJ‚x@bknÇb™mÅ@Uw±U¯¦UŽ™Kmš¯I¯Žť¼ğĊ™@ǃŹÈ¯@Ý»ÇnˡJƒbÛèÇnƒ„ÅK¯„ġĠʐW¼Ålm„@¤n²ƒŽÝb@b„š¯lƒ¯@ƒšÅ¤W„™¼nV@x„„°@Vx„@lbUblbX¼W‚œšÇ²lšUŽ@¼ŽV¦@bÇlVxUbVxÞbVšœbm¦ƒVV„']], + encodeOffsets: [[[100452, 39719]], [[91980, 35742]]] + } + }, { + type: 'Feature', + id: '6327', + properties: { name: '玉树藏族自治州', cp: [93.5925, 33.9368], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ɆÿĢV°°VÈklVôŤXÞW„ȮÇÞXnmÞnlaŤmĢLƐãôb„™ĊU„VlkǖKÜaœn°mĊUšVVkÈWV_ôKŎǚ@šz°ašbXyVI‚JĢwVX„a„KVbna°@VçVKXƒÜÞWšn@VVÆwXšĠƒÞ@Ŏ¯ƨġÆ@ȍ„LlmUaô»ÆkĊ±Xb„°`šÔV‚kȘƒĢ@Všk°šLlx@xż@Ċn„Çź»ô̲VÆÒ„@@bÆÒXklV„KšV¥Æ™ČUšk‚l„nxl™çƒ¥ċç@±m¥ƒwÅJƒ@™™™Vƒ„mÈIléÈa°U¥™™@kÞV‚K²ÑWƒ°w²Ñ‚K²ñšyƐ„ÝšVmw„»kkWĉ—JWUƒVÅwƒL™mÅ@@ƒmw„kn¥Vу»°™°@@»„¯„Lla„JônV‚UůƒU@W¯Umѯ¯k@WykU@¯„wV¥ƒkVwţƒk»šwWǜĉĶçšK„ƒÞ™ÇaĉbƒI™lUƒ@kwƒWƒXUƒ°w™±@UšKn£Wĉ—KWxƒkĕVƒšamwXw™@™„Wmnk@aƒVkƒ™bĉLƒl™Imm„wUÇ‚Wx™nÝJn@¥Æ™kwƒaXƒÜĉ™¯ÅV¯¤mkƒx¯kķܙ²VWôŹVUƒƒ@V£™¥@ƒ°wn@™m@¯@UbUôķŽmn@ÆÛ@ÇýVaUÇĊVƒ@Çlğ—¯xÝŤ™lVÈÈVƒx„ƒ¤Vx™„kK@™@ƒx@„kVƒĖġ¥kIWbXŽŎx@nƒxÅUW`ƒ_—@±ŽUa™LUxƒK¯„WbkVlb—bmŽƒLÛÆWIUwƒWkwÝV@kI›ŽéUb›UUk™V¯Km¯k@Umݐ¯m¯›m—L›Þĉ‚ÛUm™ġ£UxkKm°™Lw›šk@kšƒVm„ƒKVUk›@¯a¯Ģ™móKUU™x™ImlÅn™™ÇbXèVVU„°„@ŽšŽ@„‚xXnmš™ššŽ@¼ğ°@²ÆxU‚„²šWÆb°š™š@¦llš™„XLmĬ@҃šÞô°@ȦUJÇaƒLóU¯š@°ġƴ@Ɓ@mɱJğ¼ǕššÒUzƧ‚m„n›mğ°ǫ¼knÇ@bġmmV—@VaUaƒLƒk™l@„kLW‚ō¦¯@ƒb™KUn™JĉIó`ċUÛb™wUw±ax›bñUmƒƒ@™„ƒ@—bƒaƒbǏÅXm˜„ƒÝ„ÅôVbގ™bl„UšÞVޚ„U‚°„VUxƒ@U„V„@l`™¼nL@Ċ„LW„„¤kXķWġXUVVVķ„UbVb@°kVVxÈa‚@ȦĊbšaźJ„U@Ț„„˜Vœƒlš@XkôaWƒĢ™Þ@laĸUÆb²mÞLĠ™ÞÑôbšÒĊa„JVbm¦'], + encodeOffsets: [[93285, 37030]] + } + }, { + type: 'Feature', + id: '6326', + properties: { name: '果洛藏族自治州', cp: [99.3823, 34.0466], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÞVŤ™ÈK@ĀlxV@„Þ@„wŎalmôLšnXÆÜ@nV‚°@œ„°WmVKŦLÆmȚԂҚUX¥l@ĢJVš@„ŽƾI@w™W°™™Ån¥›kÅÝVwôƒÈç„@lÑĊĕša„JnaÆLVw°kny°UnkÆVȍĊll¦„Vƾ@@™nUźƒÈǂIn°X„wÞKô¦VWV£„@£°ókċ±I™™am¯Va™»ČĉV¥°™@m„k„¥l@„Ċm@ašU™mwXƒ@wÆxšmĢ_„`VnÆbšKVw„@@ƒnUVğVmVVöIlŽl@@çÛmƒ£UDŽw°@VUƒ¯»m¯ƒJōĖÅLƒa@»ĉ̱`U_k`ÇçšóƒkX™lK@ƒakÝރš£WċkÝ™kxƒJݯÅw™xķxmIÅx„@k±J@ýŋš›¤UœkŽmV™°ÅÝxkwmġƒnÝVU„š¦ƒŤlmšóXk¤™UKƒç™@mVkK@klīƒ£mš¯VUbƒW¯¼ċb¯ĵam¼mVX„m@k¤ÇX‚ÇbƒUƒ„¯J¯„¯È@˜™bVXVҙ¤V¼kxݚV„@l‚V—„WxÛ¦Wš¯šmKnlŽkŽ‚šU‚@nƑUĉ„Ý@ǺۄċUĉ¥™UƒÞŏ™z±òL±Ò¯xX„±ÒLÝU@lššV¦¯‚ÇbkêÇJƒnU„šš@š„‚ÆI„xn¦‚‚@²Č脦‚è'], + encodeOffsets: [[99709, 36130]] + } + }, { + type: 'Feature', + id: '6325', + properties: { name: '海南藏族自治州', cp: [100.3711, 35.9418], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VxƒŽńƒš@ĊĠŽĊXÒ°UƾĕÞm°£nb@‚@LUUW„Ûº@nlÆǬšĠ£ÞV°UXb‚VȂǵ„éƒ@kWanm°@™x„z„K°¯ĠVšƒVƒkw™Lnm°kÞxÆa„¥@‚wnĉƏ@™œ_l›š_VwšmĸèŤÅČU@™˜Wn@ÑmKU™nğƒK@ƒ°¯UÿV£nmšLl™„UƒUÛé±óókkmƒnƒakV@ǰóÝXƒWəÞťIţxmm™VÛUVȂÓnWyȁĉkƒVš°WnkĊa„¥‚_œK°ÿWna@ƒmU¯wƒlÝIU¤UXó¥ÝLƒx¯WmJÇÈŹ„mV@šƽ@ƒUk¥ĉkċŽÅUml¯Vmz¯lUxÅKmbƒI™bĉĖk҃@Çèó„UxÆÞœlm¦šÆ¯ššX@x™Ž@Ž„²ÝlƒÈ™JV²klVl¯ÔlšĉƙްlUǖÞ@ššĶ¼nŽUôôŚ'], + encodeOffsets: [[101712, 37632]] + } + }, { + type: 'Feature', + id: '6322', + properties: { name: '海北藏族自治州', cp: [100.3711, 37.9138], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ōmġxƽUm±Lǿþġԙ@kxmWƒb¯I¯‚mIUx@bƒbŹVǎƒkĵbƒlĉI¯¥ƒUšm@ƒÆ¯È@šašóšUlƒČ»@w›œ»›wXaƒƒó°ţç݄kUƒaV¥ÅbÝw¯lmnšKlxU„™„ğU¯°ƒLƒyšw¯@mnXb‚l„@ƒêȁǶUWa¯VÝUğ¤ǫ™kÅ@mܹXƒVV@K@ma¯¤Ýnƽ˝V@„ƒ¼„ôlèk¼„¦˜xXŽlbnKšÆx@Ž™bUx@nnxWJţ¦ƒmƒ¼ñ@ް¦lUÞlÈ@ĠxÞUlxÒó„ƒl¯bmI™ŽÝVÛaÝnƒxVbkbÇwřÇKn±K™b„šƒb@V„xšLmŽÛŽŻbk„ƒVó@™šŹxó²›Wkb™@¯U¤ƒźĊ@lUX„°lÆôU„ƒlLX‚aœV°wšxUb°xÜôÈKVkÈmlwškÈKšwšK™™VUŤĉŎ»„»„Il¥na°LV»²¯Üy@w̃°ĸwlwĢw°±„_lVkš@°ƒbƒÆ¯zƒ‚„š„@l_„@̱lŚVlUaރ„LVƒnKlnȏ°IllČa˜wÞѰx„UU™@wƒVkmĠLô»„KÞýôaÞ¥ôĀÞmƁ„™‚mUƒŎV¥Èl°²°a²¥V„@@w„amm@Ñn@Æ£żƒVƒĠ£@W„¯Þƒšl@š»@Uk@'], + encodeOffsets: [[105087, 37992]] + } + }, { + type: 'Feature', + id: '6323', + properties: { name: '黄南藏族自治州', cp: [101.5686, 35.1178], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ôl²ôÜê„VƒVkš™KmnU¤V°@„„LmĠVšnLÈL@alb@al@n°Vš_XmWUÈamaVIn@n‚aV£œóVWƒ™U£°ašxÈ¥@™‚aĊwȹ@óša™ƒğbm@k„w@mƒaÆw@ƒ„In¯mmƒ@UkkWƒÑÅ@@kċÅçVkÝJÅkVykŹl¥@¯š™ĢU܃X¥òý—mmX™ÝÅlmU@£™Wly™XW»Åbƒl@aI›»k@klm@UxUUƒVƒ¼¯Xƒl™aUnķ‚ƒI@x™@¯„ƒK™„ĉUU`óšlȝô@¤ƒÞJ„k°xVŽ„n@ŽmbXޝ›L`ƒ¦ĉbml¯X™ŽUŽl„ȂĊXzm‚ȁÔU‚ÜVšUnnŤwŦJɚ݄XÞW¯ô@ÈlU„b„mln'], + encodeOffsets: [[103984, 36344]] + } + }, { + type: 'Feature', + id: '6321', + properties: { name: '海东地区', cp: [102.3706, 36.2988], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@҄bš¤ÆI°ôU¼š°UŽnnWx™š@b¯L@lUUWbXxWl„ƨnxVUllš„XVŽUŽnL@lȀý²KVnƾ‚ĢwV»ƒ@mÞ£nÆƒÞÑmL™ƒKUaVżĕƒWVk²ƒƒÆÝ@ƒXw°@„ô™@a°wóUUmIk™™aVmÞwmknyƒ¹VÿƧnŏm£X»˜™naV±„Ýw@ašb@aƒm¯„ĉVó¦kÝWKUU@WanU™b@ôǺĉxb@šÇ¦™w¯bV¤„šUX›ôU¤bmm@UJnbÇbXVWn™`¯Umk@@bka@bÇK'], + encodeOffsets: [[104108, 37030]] + } + }, { + type: 'Feature', + id: '6301', + properties: { name: '西宁市', cp: [101.4038, 36.8207], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@kmKVUƒWk™VkUmwƒƧXkWwXaVV@k°K@aš™XwmmV™¯V»¯óÅJ™£ƒamŽ—X@šċVţÆķç™nUx™`kœ›`@šÅmĊx@Žƒ¦U¦„blVރŤèô¯„„Wbœx›¼œŽ@xċ¼k„™V™ô™bÇ@Ű@„™n„V°¦ĊJ„kĶa„lȍźU„a@aVwnJ°°J„anXlwš@ĢÓ'], + encodeOffsets: [[104356, 38042]] + } + }], UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/shang_hai_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '310230', + properties: { name: '崇明县', cp: [121.5637, 31.5383], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@uŏu»GPIV±ÐɃŜ{\\qJmC[W\\t„¾ÕjÕp‡nα|ěÔe`²„ †nZzZ~V|B^IpUbU†{bs\\a\\OvQ’Kªs†Mň£RAhQĤ‹lA`GĂA@ĥWĝO“'], + encodeOffsets: [[124908, 32105]] + } + }, { + type: 'Feature', + id: '310119', + properties: { name: '南汇区', cp: [121.8755, 30.954], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@`y”ĉNǕDwǏ»ƒÖLxCdJ`HB@LBTD@CPFXANC@@PGBKNECCBB@EBFHEDDDSNKAUNBDMNqf[HcDCCcF…@EFGLEBa@ACoCCDDD@LGHD@DJFBBJED@BGAEGGFKIGDBDLBAD@FHBEF@RFDMLE@SGANFFJBANPH@@E@FJjRIACDMDOEKLFD@DbDAJI@AP@BGHFBCBGDCC@DCA@CECGH@FKCEHFJGBFDIHACEDNJDCVFBDCRKRLDLITB@CjNJI^DBCfNVDHDFKHAFGDIICDWBIF@@CFAjFJNJBBHD@CJ@AEFJ@@DH@BFBCPDBMFEQGDIFCNDHIP@HDABFACBJFHEBSZC@DP@@JDBƤ~'], + encodeOffsets: [[124854, 31907]] + } + }, { + type: 'Feature', + id: '310120', + properties: { name: '奉贤区', cp: [121.5747, 30.8475], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@~T~JjZdDbLXDLCB_J@@FHFZJJIAGH@HGR@BENBLID@@LFCDF\\FpDBDb@FAHKFE†@dEDDdC\\GreNMACVMLBTMCCFCEGFAA@DAFDLMHA@OD@BMEWDOC@AS@KGAI_DcKw„ÕísƝ‘åĆctKbMBQ@EGEBEJ@@MBKL@BJB@FIBGKE@ABG@@FMFCPL@AjCD@ZOFCJIDICIlKJHNGJALH@@FPDCTJDGDBNCn'], + encodeOffsets: [[124274, 31722]] + } + }, { + type: 'Feature', + id: '310115', + properties: { name: '浦东新区', cp: [121.6928, 31.2561], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@EN@JJLNHjLJNR^GRYVBNZJRBV@PDvbLNDN@LGNER@nCNQNuT_TIVFV\\Z\\XnDrI|[Ʉś²ÏJUHOƣ}CA@IO@@CYDATGFIEDAEBBAGCO@GJMCEDCJRHEFANOCADAEG@@CI@FE@BDIC@AGIAIMiEEB@DE@AJCXJDCJEHGBELGCUCeMAD]CIJiM@DSAKJKCLQDQACUECDMIFCBDJGECHAEIWCK@GLMCCGEACNKCEJG@MMBMC@@CIJUINT@JAJSTEPZZCP'], + encodeOffsets: [[124383, 31915]] + } + }, { + type: 'Feature', + id: '310116', + properties: { name: '金山区', cp: [121.2657, 30.8112], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@L@BIHFN@@EE@@EFBDGDAADVDD@@EF@CA@IIsRE@GDAF@BF@CV@|FBCHBLCNHAFCADBMDCFZXHILBVEEQA@MWFARJJ@DCX@@TEFBLHAAERE@AJABRPBNK\\BrJ\\VHGND@CNADKDADQjGAGNC@GJ@FCFFHC@JF@@dLBDSFADHVG\\DTEPDDHJALIJkJDJCDIPE@YDCBiK@DONE@EH@BAF@HLJA@EIA@ALKNA@@FIFAFHR@NALadsæąyQY@ƒA±DʼnXUVI^BF@FFF@HBJEDFFGFEBSRkVEXGHFBMFIVW@GAEEFOIAIPKABGWEKFSCQLQBSEIBC\\FdBLRR@JGACFDDEF@AWB@LJJYNABBA@CUEGPaO_AIE@MYMFIGAEFECHSAAKAO\\[JEDB@E@MMA@@AGBKMGDFFCDDFEDFJF@NPBAFLHFH@EDDHBADDC@DDCDHHCDDFDABDAD@FEFOBCJ[D@HEDDNJBDDHABJIBBvGLBJAH'], + encodeOffsets: [[123901, 31695]] + } + }, { + type: 'Feature', + id: '310118', + properties: { name: '青浦区', cp: [121.1751, 31.1909], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@RUNKdOFDJCbRFMLAHPLDN@JGL@@APBWYCKN@TU@SHGCEJIDIJKVIZVNM`iNY@CIE@CA@KBOEGEUFCCSADEIEFCDDDIDDHC@CKIeDCG@IG@DHWFEEGCH@@GO@@O]CNpeEQDBFME[JC]DGF@CKOA@QSB@GB@@GW@@ED@AQIJIAAFE@@DO@CFI@KNG@CDACAFEGKGBEGBDCCAIFCCLIECFI@MBCLDHGNAHSF@DMB@EEKBA@@C]DEICFG@ADBHGFKCDAKKHKD@@FHGAANGEEFCHKCECBCKG@ADKCNE\\[A[I@@mGBDQQEO@BCE@AI[AML@JGACLOAFKEMM@EQKC@CUCBCCBCHEA@FF@@FM@GEAJK@GNF@EXPH@FD@M^@HIADJCFDBER@DK@@DE@CAKFOCCBDHIBCNSB@GFC@GQEEOWFICGDUAEJIDBTAHJHEB@DIF@NE@H|HBDBEH@DKBAHEF@HEEUB@FGFGCCCE@AHOB@NH@PRLVNNFBX@RC€PbAvMtBfH@DJF@ELBFA@EH@HNED@FFB@HLC@CJ@@DJ@PIRf@HE@CFF@GPHD@DKE@FFBEFFD@DEFCA@DD@IjCRFBAHFDKD@HF@@PM@H@BlbDJDBFEF@DLXB@HCD@@IFCBIFEJD@FDC@FBALLF@PAACJERACAJCBD@EL@JD'], + encodeOffsets: [[124061, 32028]] + } + }, { + type: 'Feature', + id: '310117', + properties: { name: '松江区', cp: [121.1984, 31.0268], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@DLDFRN@FNELPBDKHB@INK\\BBJF@ADP@RFCRHA@nJ@B\\[\\MFLDBCH@DLDADFGLEDFFMHBBGH@EC@GLLLCBLDHEAGBCH@DEFJ^C@DB@LAFFA@CNE@GTMBGHKCAD@NEJFDKJDDJEDBCDHAAFLHFHBEBDDCH@LMJ@DEP@@CF@BEJBJIBRC@@FX@@HA@@HTA@RPBDLE@CHD^\\INFAERCfFMo^D@PP@@HG@HDFFXECGH@@JDHfCLJ@DGDCCCJCCEDJFCFTBDDVEHFPFLAB@NBFCFKFC@CHIACNOHWHCAAFIDD@CDAGEI@ACFMF@R@R_@GQED@EGFEQEDE_IAHKAEXCQUOQCUDEN@ZI\\DDmAMHCICDSOC@EG@BKHIGMIBCGOCSF[CUHCGEBCTKA@cE@@IGDEEEDI@@HMDBHiHCRCBCLMB@DMCGH[UqI[AMLOAAQIB@BQFBFGBAKFE@SW@CDI@QIEBNXB@FRUFKAGJYWDENCCADBBEMGKDGAAD{EU@@DAEE@CB@HQFJt@JDBE@@FC@'], + encodeOffsets: [[123933, 31687]] + } + }, { + type: 'Feature', + id: '310114', + properties: { name: '嘉定区', cp: [121.2437, 31.3625], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@F@LI@IDKJADKIEJICADGACFECCJ@HKCAFOHAJI@aCBEE@ICAEB[GFGCKL@FGEIFADMLCAEJM@ELQECEIG@BE^QKKLQCA@EHBIGQ[GEHOMGGDHKH@JOECFCjCBEFDNCACMBCILGTABDLEEOEIG@GFIMM@CGKFBFCDE@@GEAGEEACIcGaHMFITIHDN[AKF@FS@OA@BK@IHM@KCGOKBENaQIDECcPMLQVFHFB@BFBKLGD@FAJOVGIACQ@A`LPCB@JEF@RU@ANS@@RCL\\HIFpRBFRBBDKLLDADJDGBFDABHBEDNF@DGBBBADKDAHC@\\JJFBDEH[DEFDH\\LX@XLBLbT@DNJLDCEL@VJABJNDHB@HBHYFBAA@GNFB@@AFB@AFABFLFBHFCL@HJBAFBLC@DN@HN'], + encodeOffsets: [[124213, 32254]] + } + }, { + type: 'Feature', + id: '310113', + properties: { name: '宝山区', cp: [121.4346, 31.4051], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ˆmÖoÖiƒ½[s[YEUJU`SCIEBCCWJY_LIICDWU@@FaBCJIB[ICH[@@CDKEE@MK@@IMCAEBCH@AMFI@SMGEFGB@FK@BHCAIFJNQD@FEBDFMBKGACG@ECWH@@CDDTOEEBGEK@GC@EE@GPHFR\\JHGA@FDBKRLL]RAFH@FJFDKR@FINBFKDCNEBFJEHK@DLEH\\HFADB@JFFDA@bIJGBEPDBGLI@DDEFBDCHDBIJJFCLIBCL@JKJE@ADHDBHJ@HIBBDFHBBAEIJ@BJFAVL¢ˆ'], + encodeOffsets: [[124300, 32302]] + } + }, { + type: 'Feature', + id: '310112', + properties: { name: '闵行区', cp: [121.4992, 31.0838], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@T@@ELE\\BCMJGJSNEbGdHDJFBJAFIEIFCEWG@@gMENSFCVJFAxR~B@IH@AIiI@GE@FGEAFQPDRiV[\\DFSGMHAXHDOMCJCDETBBNVJJI@DD@ANNNH@FILDDMFBDHNDHKL@XDFGLD@EHGFD@DDB@CDDHCDAEAHG@ABOJ@BIaC@CECLKPFNCDCJBiQEIF@@@OGBMIAEEBMTHF@NKEC@QFEGA@EBCKAACHCLJHEFHHB@AFCAIEACIC@HG@KCCDC[ECEED@KC@KJMAAFQ@GHG@BHIJYIGE@EI@A`KDWCaKcCiY}I}S[CYJM@CFDVPRRVWDFžLBBG`JCFRFEFFHC@RF@HQ`Q@E@ENBDJ@HFCB@DCCEJBBGDGXMPBDGJ@DEDELEDMA@DJF@DMZ_jMNYUUJILCJIJDFGH@TSVM@DLXZ'], + encodeOffsets: [[124165, 32010]] + } + }, { + type: 'Feature', + id: '310110', + properties: { name: '杨浦区', cp: [121.528, 31.2966], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@V@CXJDKJZ`XIDDFADJvSRMDM@mFQHM@KCMKMuaOCU@BDAJSX@HKJGD@PNJCJWAGT@R'], + encodeOffsets: [[124402, 32064]] + } + }, { + type: 'Feature', + id: '310107', + properties: { name: '普陀区', cp: [121.3879, 31.2602], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@F@@FHDL@HFFAPFCSDC@@XGFDH@BDLHNACEFA@ERCIMJEDBAGL@@EHAFENHHJ\\ONQBQCIBC[MKACKI@GGGH@I_G@CW@[DMHCDIBMTDHN@JNHEH@FJFPKFACSBKHDJNABDMDECAFiDEDFDIPG@GLHCNH'], + encodeOffsets: [[124248, 32045]] + } + }, { + type: 'Feature', + id: '310104', + properties: { name: '徐汇区', cp: [121.4333, 31.1607], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@RADL\\NCPHFfLJaJ@FWLGMGIK@IFMDOYYFOTSBI@IMSAMSACFIDNDCPWGGBHNET[CU\\QjOCERFBEHF@@HjJBJG@@J'], + encodeOffsets: [[124327, 31941]] + } + }, { + type: 'Feature', + id: '310105', + properties: { name: '长宁区', cp: [121.3852, 31.2115], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@HFFB@HF@DCAELENSJADCNG\\CX@@D`H@JHGHHJ@BINBFUGEDO[MCKQB}AwQEBUIEDMTNF@hH@FXEDFJEJIB'], + encodeOffsets: [[124250, 31987]] + } + }, { + type: 'Feature', + id: '310108', + properties: { name: '闸北区', cp: [121.4511, 31.2794], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@CSG@BQGODUPWTOBQAAFMECKBGEMFKEOHADDJARMR[PGI@TEJBNG@ADBFND@JL@@NFFCL@D\\@DG\\JJADI'], + encodeOffsets: [[124385, 32068]] + } + }, { + type: 'Feature', + id: '310109', + properties: { name: '虹口区', cp: [121.4882, 31.2788], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@bA@E@QHSXBDIMI@OHCLI@GTWBIACQAYIOFGCENBBARSPOXCVHPARH@DT'], + encodeOffsets: [[124385, 32068]] + } + }, { + type: 'Feature', + id: '310101', + properties: { name: '黄浦区', cp: [121.4868, 31.219], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@NEHFLAFDHDPEAMZUHQQ]IMKJG@EPERABHBGRUCCNGV'], + encodeOffsets: [[124379, 31992]] + } + }, { + type: 'Feature', + id: '310103', + properties: { name: '卢湾区', cp: [121.4758, 31.2074], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VDHQGABAFQFOH@LIiKKHEXI@IbAFZB'], + encodeOffsets: [[124385, 31974]] + } + }, { + type: 'Feature', + id: '310106', + properties: { name: '静安区', cp: [121.4484, 31.2286], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@DLLB\\NPGLFHUDMYABEeKEVMAAJ'], + encodeOffsets: [[124343, 31979]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/shan_dong_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '3706', + properties: { name: '烟台市', cp: [120.7397, 37.5128], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ŤLšLllVń²è°xżĢĠÆl҄šŤbœ„V¤ĊXnŽlĢVĊ„Òš„ȰĊŰÞè˜L„±@џn»VUźċ²»ÆkôVɆkĊѲkŤVVwUUVmUaƒ@KkU@ƒmUmmk@UwUkmW@UVIXa@ƒmw@a™KULƒaƒx@Uk@UbWU@yULmK¯@kXƒVUwm@@JUUknWKUVƒLUbU@™wWykIƒa@w@mUI@ašUVynIWa„k„@@W„bl@@knmƒK@wnIl™°Kna@V¥ğ@ġUķ»™¥@UōJƒX¯¤k@™wmI¯‚k@mwƒak@@šlX@bUJ@VƒbknWxkLkxlŽšLVlkLmŽšb@bU@ƒbU@VbU`Vb@n„L@Žmb—U@˜VnUVmnU@mm™@kIUWVIUK›VkkUJUnmL@VmLUaVWaXamU@™™U@KUUmVƒU—JƒU™VÇwğn™mƒ@mXĉV@l¯xnô'], + encodeOffsets: [[122446, 38042]] + } + }, { + type: 'Feature', + id: '3713', + properties: { name: '临沂市', cp: [118.3118, 35.2936], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@˜bXlƒl@zlV@lXXmŽkbVVlš„U@Vn@@Vmb@XšKšVX„WJ@XXl@„‚ŽÈbVLšUl`„@XXV@VVUxVbUxVbš¦„@‚WnXVJ@bnVUzl@„°Æx„U„KlU@mUUnUlUVWVUnVV@XX°V@Všll@Vk„aXVl@Ux@bmbXLlKlb@b@bUJn@@„„b@n°x°K@an@@UlLVKVbXb@bVVnK°LVa@UVa@™Xw‚KVxnLšU°@naV@UWUkWƒULmV—wÝKUUla@aó_@mƒK@aUU@ƒWUkwVm@aVI°W„@@IUw@a±¯@¥kUVUm@a‚wkw™@ƒK@kVKk@maXalI@alL„WXblaVLVU„V@LnKš@„l@w˜aXašLlnUl„LšmV@n°J@_VmnIVym£UKmI@WnIVm@anUVmÇ_kġIÅWUXÇm@U@ݯÅ@ƒ™@naWƒ™IVW@IkK@klKn@naWIƒmk@ƒaƒbkKkLWn™WkLWmk_ƒ@UaVƒUKmLUw@mn£WwUmU™ƒaóV@UkUm@UKULUwmJUX@WW@XҙzVblJXŽWXk@UVWK—X‚¤UL@xU@ƒ@ƒVUaU@@XmVkLmWkXUyÝLmKXnVŽ@n@l™x@bWLnVVn™`knULmxUl„„WLXŽVb@VƒK@z¯x¯¼Wx™KUn@bk@ƒlƒVVVz'], + encodeOffsets: [[120241, 36119]] + } + }, { + type: 'Feature', + id: '3707', + properties: { name: '潍坊市', cp: [119.0918, 36.524], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@l@@UšK@Ž@L@bX@@VlL@JƒLUVnX@`ÜXn`V²mJ@bU@@n„b@l°xnnĸVƚ°@„ƒĊ£Þ@lWnÑnkʶJmó°w@kk»V@»ƒ¥k@V@kw@wVm„a˜Å„mšaô£ŎƒXI@mln„Kla@mV_UKƒ@kUkw@alW™IU»™mƒ—@WUIl±UUÅU›bkJƒ@a@wUKUaVIÆmXIWaka@m@Ul£XKVw@ƒUIƒJUkmJ™ƒVkU@a„ƒWK—ImVƒ@UxmL@bX`WXU@U`ÇkUak@@°UblXk‚mLUKmL@VULóƒƒVk@@Vlbn@Ub@ċaUJUbƒIUlVLUVVbVKX„VlVXU@mb¯@™VmKUwLWx@šUb@VUb¯KmLUU@aWaUaULkK@Vm@@b¯L¯w@mƒa@ƒm@UUU@U¦lJUXƒVƒmkb@nm„XVWŽkb™IVxUV@VUbWLXVƒLW`Ux@nk@Vn@x@VkJ@œV`mXkŽ@V„xV@lVššI@VULš˜VU„IV`°bVXXx„V@VWVnL@xV„Ub'], + encodeOffsets: [[121332, 37840]] + } + }, { + type: 'Feature', + id: '3702', + properties: { name: '青岛市', cp: [120.4651, 36.3373], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„@nU˜JXLƒ„@blVU‚š„nIVl„IVJ@„UxWLk¤@V@nlbXbWJÅnUJVbVL@x@b„ŽlIœaÆVVVk²VJ@X„˜šnV¼šJkX@blxlV„@VLU`@nkbƒLkm@nWJō„ó¤™bƒn—ƃbUn@xlxU@l@„¦@¼UŽl¼ĊUnW„@šnĠmÈxšU„V˜I„VnUVV@LšV@šnVWbXb‚UVbnK@UnKVmVIllœUVLUJVXlJš@nnV@nmVUUm@—˜Vna@ƒK@mUaV_UaV@„aV@@a™anlKUk™KklwlKXwlm„a@UVI@akW@™l@„bnxl@°nJšxl@°£„WŎIUÑn»lašmô¹Ŏ¥VaUUkƒmkġWɱIUUŹ`›@kk@ĉƨřV¥_Ç@™Ĭƒ¤ÝL¯m¯£ƽóķwUW±ī¯kōaĉĕ™kğmó°ƒbW@UKkLUaƒVmz@V@ŽUxVn'], + encodeOffsets: [[122389, 36580]] + } + }, { + type: 'Feature', + id: '3717', + properties: { name: '菏泽市', cp: [115.6201, 35.2057], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@¥šIVUÈmÞ»@UlU@Un@VW@UVmkk@aVUUKVÝ@UVknK@UV@VVnIVƒ@wnƒmwmKXaWaXI@UV@Vy²blkVKkam™U@kb@Um@VmUkmƒKmkXKWwkU@Ulƒ@UnK@UVUUm‚KXwšUVL„w‚K„U„@@Wl@@wUkV¥—@@I@W@_V@VWUw@UUa@aƒaWa—@@_mKUw™l¯amzmV—@WK™nU@kƒWLķaUKbÝVmV@UWÇbÛ@ƒX™°UbW@XŽm„Vlk²UJUbmLÇxÅWUzl‚¯Ll„@VkK™XUbWJ@bU@¯@™ƒkbƒLmKka™„@l™_WšXºVbUz@J‚n²V@¤lX„Ž„nV°šLn`WbXLôVlKVUšxXn˜lXLlU@bVV@„XJWLUVnVV@„„@n‚l„°nn‚V„KÈbVXÆJU°VnXV„kV@@xVL„@šWlb'], + encodeOffsets: [[118654, 36726]] + } + }, { + type: 'Feature', + id: '3708', + properties: { name: '济宁市', cp: [116.8286, 35.3375], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nam_nKlVLXa„Il`š_@KVVXI@m@w‚ƒ„@@k@Kšnô@n`VbV@@L„L@KVVn@VX@‚VL„Jl„š@VUUƒU@Uam@Uk„wšKWaXamkJmIUVUÈblašUnV@kVKl@@lXL°kVJ@VÈnVJUX@V‚LXl@xVLnU‚@VK„V@a„IUaV@„bĊU„x„K‚kVJXUlV„ƒ„UVašI@WUI@KlUnw„mWk@WXIWƒ™U™L@Wna@Um@@UƒVk™UUlanWW@kkU@y„kWk—aWVUlÝbUU@kƒJUIU@@ƒ™JmaókƒLKǃUUkKWLk@WbkUUaƒbmKn¯°¥V@XwV@VanaVaU_@Wlk@WÈ@VUÈVVۂm„aklKȯlLVUX@lK@aX@@kV@VmV@VwnJV_UWUwƒX™am@kW@wVUkKVIUUVmU@UV@IVK@aUL@aƒV@Lm„UKmx@ށômLkUWJ@šnXmlUxUL@Vkn›VUšU„@V™L™`Ub±LkV@kUKÇbÛ@ƒU™Wó_mJƒ@Wk@@Xƒ@ƒVLƒxUK™VWxLVnUV@VmL@Vk„@VlVXxWLnl‚Ln„VlUnn@@VlaV@nšlbULkl±aUzU@@VWJXbWbnLnxm„@xU„mJUUU@@VmLUl@VUÞVLUV@bllUn@VUXm@@VkV@VݼÇnUV™J@¦nnƒlnVlL@„Þb°KVV'], + encodeOffsets: [[118834, 36844]] + } + }, { + type: 'Feature', + id: '3714', + properties: { name: '德州市', cp: [116.6858, 37.2107], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„¤@VmbVXnVVbVJššX@Žll@z„lVInl@„@bVxUbĠ‚l@Èbla„IšxXVWb@L™@n‚ULWVXXšWWLnL@`@LUVVL@lVn„JšU@UUk‚a„™nš‚Vôô„b°¼V‚ސXš˜‚œIÜbČa˜bôW„XÞWÈzÆmnLVJ°ÈnlV²lbnW@™@UƒUV™šmnwmkkKWƒkla@mVIUKUa™aUwmn™JU@@amIk@@bVlkX@mmUklUUƒƒa@_UaUUƒV@wƒw™WkXmW@I@WUaÝU@UXaWUU@UUVW@UUUWUn¥nUVa@m@k@alU@wk™LWa@UUm@@wnmU™wla@anKn_@alK@ݙ_ƒ@@WUUUmlkaƒIƒyU@UwU_Wa¯yU_mWUwkImm@InWWUk@@UVWV—kW¯U@VƒL@b¯b@l±¦@šVV@lUbV„@škxVnUšl¼XV@b@lV@nIWxnbƒ‚™@UU™LƒxÅxm¯ƒaUƒ™wU@mUÅVÝKULm@bmKUXó@'], + encodeOffsets: [[118542, 37801]] + } + }, { + type: 'Feature', + id: '3716', + properties: { name: '滨州市', cp: [117.8174, 37.4963], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Vb@`„bV„kVlnV@nlWUk@al@nJ@bV@šInmVxšbVbVLUJ@nkb‚lX„lLnlmx™nUš„V@V@šmXn˜lbĸ@nnVx‚b@lnXV@UJ@nVxšxnxVbÆVn¯ƒĕ‚@@wÈçUÇlķVIœb‚@„Çmk@¥k@UkUK@aWakUóJW_UW@wkkWK@U@Kš@XUƒƒUkmUUalKXala@U@kkWlkÈl@kšV„mVIVmU_‚a„ƒƒwnwVW@wƒwUƒ@wU£ƒwkJWIyUI±bk‚VUJ@nmV™Ukl„Xmx@lnbW„kVƒUkLWŽƒxkKUUmUkb™J±—LÇxUKmkUmkkW™™a„mUaVkšJÆ_²KĠ@U„W@w„U‚¥nUWwK@aÝUkÅVaVK@akLWƒƒƒ¯I@bnbVx¯JW„ñšWbUL@šƒŽnV@VmbkUUV@IÇak@@bWak@WJUœJWL@bXV@„‚@„V„Jlb@zUlUŽUImšnbV‚mz@°UV@V™bV@@V@L@xLmKUnmJVX„J@VkLW@UVUL@b'], + encodeOffsets: [[120083, 38442]] + } + }, { + type: 'Feature', + id: '3715', + properties: { name: '聊城市', cp: [115.9167, 36.4032], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ô@VWnL‚an@VKÞLÆUnVV@šxV„„bn°Æw„wšKVVš@„maXwmJU@@k@aWUk»V™Umlw@™UƒVa@kUU@™²¥@k°a@a„K@U›ƒU@mmm@ów—ѱ¥¯@@w™Kmw—I›¥kU¯UmakJmIUaƒVkKUkm@VUUa™Uƒ@UaƒKUK¯@™w™UVŽUIUKVw™k™¥™wƒbVŽ@xn„@lWnXxlL@`„XlJX¦l°XxW¦@¦Ul™n@Ž™@@Um@@VXVmx@¯bllUnUJ@VULVn@b„xV‚VL@b„„VlnVVblV„ÈnVlIVJœLô„lJ@xl²„'], + encodeOffsets: [[118542, 37801]] + } + }, { + type: 'Feature', + id: '3705', + properties: { name: '东营市', cp: [118.7073, 37.5513], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ͬUǪlô@°Uœw°ōĠ¯š»Ģ炻XÇ@w™wƑa™ÇƒkwVƑ¯@řķUmm¯w@kƒa@mV@@anIU±m_ÛW@_mWVU„K@IkK@UW@@a@K@™L@Vk@±U@UV@lm@mUU@kLm„„xV¤@xV„„x@xUXmx„xƒ„bV`UnUJƒn™U@lÇkkllX@l@VkbWbkLVbnVVl„„WV™@@L@VXLll@xVXX`ôIlVXb@bVLVll@@¦nlƒÈ@›aUJkĸVÈÇè@x'], + encodeOffsets: [[121005, 39066]] + } + }, { + type: 'Feature', + id: '3701', + properties: { name: '济南市', cp: [117.1582, 36.8701], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@²¦˜Òôxn@nn‚@V‚œ„°VlXU˜UX@Vl@XVmX@JnnlJVxnXV`°zXbV`VxV@„z„JlbkŽVnVV@X„@š`@ÞkL@bm`mL@bkbšxnVm@xn@VV‚@XbšKl@xkV@b@l@nUbmVm¦XVVV@VUXVVV@XVWb@VÞVVb@X@JnXlWšX„x@x„UVV@aVKVUX@lK@UƒIUWnIVmnL‚K@w@K@UU@ša@UVU@¯nyUman™VJVVk@ykaƒIƒU@@ƒWU@aXK‚IV›XIl@Xb@al@Èb@JVUlVna@UmU„@™VKXaò™Xƒ°IUwma@aU@UU@wVW@фw@a™I±`kbƒUkw™UmJ@UkmÇUUkmKknUVƒ@mJUkaWkƒa@KmKkUƒLmyXa¯_@WmImmbƒLmUkVUbUVƒJ™bƒUkkWJkUƒl™IUm™k™Lƒ›„lK@knaVmkI@mWaƒLUK™UU@@VmLUVLWK@UUUƒWUkkVmx@„Vl™¦'], + encodeOffsets: [[119014, 37041]] + } + }, { + type: 'Feature', + id: '3709', + properties: { name: '泰安市', cp: [117.0264, 36.0516], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@n¼šŽW„nxšL@x°@š¥Uk@ƒnwlUVl„XVV@VXL‚KVUnK@UV@šVVL„KXb@nlJUnmb@lkLƒ‚„œšKšlVnšJ„klVXIll„Vša„IVUValUnV„K‚annnJ@X°`Wbnz„KlVnL‚Ž@L„bXl‚bVlnI„@VUU@UmVƒ@U@Uš¥@VmV@@_Ua@m°@@ƒ„kmUUm@UVmn@nX‚@@a„anJVUVL„mlIVJn@nkVLVa@KVmVLXVVLš@@U°bn@VaV@@K@aVkœbWaXUVymU@aUImWXƒ@™¥UaVwUaVwUUU@WWƒ@k_™VUKÇa@ƒƒnmxkV@LVJ@X™JUbƒVƒ„kUWVUIlƒLƒwĉVƒaU@VbƒJ@bƒUUL@mVUK@wWkK@UVWUIÇm@UUI¯lWK@kk@UL@lmU™VkbÇaUVVnJlIn‚WbXb™LƒxVln@VbV@V„UV™@kƒƒIUK@UWm@UU@LƒK@KU@Uam_ó@™m@L@lƒ@„@x@nWJUU@L™`k_ƒJWbUKkmLn`mb'], + encodeOffsets: [[118834, 36844]] + } + }, { + type: 'Feature', + id: '3710', + properties: { name: '威海市', cp: [121.9482, 37.1393], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VbUnVVUxĊ¼š¼ô@Þф¯‚WǬLŎUÆW„¹Uǃō¯ÑƒÝkţ™™ţóġ™óL™ł̥U™wm¥kÝmkkKóbÝ@U¦@‚mb¯LkšmJ@x„Lmn@lk@ƒa@Xƒ@ƒlXbmJUz™V@bVJ@n@x„blJXzšxV@Va„KVUXLlmVV@In@Vx„UlW°@nLVK@zXVVal@@V„w„bVKšL@bnx@„WbUJ@VnXVlVxl@nnnV@„lV@L„‚'], + encodeOffsets: [[124842, 38312]] + } + }, { + type: 'Feature', + id: '3711', + properties: { name: '日照市', cp: [119.2786, 35.5023], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@UaVUUKVk„JVaVIČb@Vam@ka@Ul@„Uô„VK@UnKVLnKlkWVa@¯l@VbÈlV_V@XWW_@anKVwUmVw@@Uny„UVblKVLX@„aô¯ó¥mÛĊÿÈ¥š™Þ¹lUīƒ¯Kĉ¼ʟbÇV™U™ŽUŽ™XmakJUnmV@bUnmJ@XnJVLn¤UzmJUn@`¯ImŽU@™nƒKVkkm™KWb—b@xƒk™@mL@KƒUUVUKkbWaƒXkK@bkJWbnbl@UL@l„Lš@lxx@b‚nUVlV@¦²°@bVx@Jƒ@¯XUJ@bUnlxVŽ„X@‚VV@b„L@nô`@bkbVVÞL˜xnU'], + encodeOffsets: [[121883, 36895]] + } + }, { + type: 'Feature', + id: '3703', + properties: { name: '淄博市', cp: [118.0371, 36.6064], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nƒlKV@nVn@@kVU‚@²VVaUƒ@wmKXU@UƒUWwUW¯aU_ƒJUV™—VK@U™JU™@kUƒw@UlnWU_@›lI@U@wUml@@mVwX_„KWUXKVa@UVUUwšJlaXWUnƒ@mla„n„UVWkIV¥V@VVVI@a@akakLWKna@aVwk@WUƒbUlk@™k@U¯UWWU@mUUVUXkVmVVV@nkVƒLƒVÅwƒ¯k@WVXb›aUl@bV@@b@xkVVXVxkJ@nk@@ŽVLUlVb‚VXUVVUzV‚™LVbUbV„VWVkLmškJ@n±@UxU„VVkV@bƒx@ÒUX@xVVV@°J„„X„lK@bULUblÆÞV@b‚LXxmV¦ƒV@xƒXVŽğ@±LÅ`™IUlVbƒnšbXšllVnnlVLÈw˜K²ŽšIlanVVVlL„wXlK„VlUXƒma@knwƒWlkšVnU@mVIUl²aVJ‚zXJlI'], + encodeOffsets: [[121129, 37891]] + } + }, { + type: 'Feature', + id: '3704', + properties: { name: '枣庄市', cp: [117.323, 34.8926], childNum: 2 }, + geometry: { + type: 'Polygon', + coordinates: ['@@‚yUU„U„kl@@aVmšLXw°»°w@y„L@UUaWXKƒƒVknwVKlmš_UmmUXK@ašw@k@mUWmUL@ƒ@™@£@KƒbÝV@akw™aULmƒƒbUK™LUU@lm@—°mL@nUJVxVXU`mIUxU@UnU@@lW@@bkLW@UVkKǰkLlŽƒbnUÜÇUUVÇ@@Xkl@XV`UbmbUbU@WxU@¯¦m°nL„aVblVXal@XKlLVVȄ‚L„KôlnbšI@„V@VJ„I@lVVÞaVkXU'], + encodeOffsets: [[120241, 36119]] + } + }, { + type: 'Feature', + id: '3712', + properties: { name: '莱芜市', cp: [117.6526, 36.2714], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lmnLVlÈVln@VnIšVlx„Vla²_šJlUUUVƒVw²@@mlIn™lKXU‚UUƒVaUašKUVyUUWVUUaVkUK@l@@mlIUwUWlU@w@aU@@LU@Ubm@¯a@V™@UKWUUKUn@LUbUKmlm@UIkJƒnUKUVmIƒb@b@mWm@Un@VVnnVƒl@„¯@@nVb@`U@Un@Ž™¦@V@VU„VnV@'], + encodeOffsets: [[120173, 37334]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/shan_xi_1_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '6108', + properties: { name: '榆林市', cp: [109.8743, 38.205], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@™ýVƒnIW»ƒW@»kUÇL—݃U¯¥ÇIUWWїUWwX¯mƒ@»n@ÜÈķô™@a±kȱƒw„ÑmwçċmU»ÆkkVyIm™ĉÿ@ƒÝ¹ƒWnwÇVš™Åaƒzmmĉ¦ó™kVmx™xU¼VškVm_UlVlk„°IV‚kmJa›¦k™™LmmV@XmKnšlUô›VXbƒbƒ@UaÇLğܙ™Åwƒ£mKnmċwÅ@UkƒbmaVƒƒƒn@m¯aU™Jm_k˜@kWXyl@@kÅamw™LU™Þ™ƒ™mWÅzUKƒš™Uk±@™b@nnK‚bX¤mzVšŽVxÇn„‚¯„@ÒknWƒƒVUbkķÈÑWkk@Va™™U@„mUkbƒÝÅ@Ý¥ÇbkĬ™XV`kLǍVmalUUa™nV±nwmkƒJ@Inƒ°KVw¯UnÅ@¥™ƒ™U±bUU˜±œmWbÛKWnUm`UƒVK@bmnœm‚Èż@V„L@xƒxmš„Ť°nŽ@VmK™²VlšlKk„ô@„êÜV@VXLlmš¦UššV°Ș¯²ÿ@¥š@ƁĊ˜²IšmĶnnb°b„KVƒĸLl„Þ@UȮš™Ü°IVƒÞÝސlŽœx@ŽķĀWŽ„Ux„èƐ@š°ŽXnšlĊ˰m„nƒšV„²V°ÒƦ„aބ„˜@zll@bÞšlš¼nKĊ¼óȂb²±šIǪÒ¯ĖV@„lxnVlk„JlaXwŌĉ„„@VnŽššlÆĕ„UÆLœèŌŤôxȚlUœ@šxlaUċĕXm„IWmnkšVVƒ„VW_@aÈWUUmk@ƒ¯çVm»™±W¯n¥V™mkXw±ÇVwƒ'], + encodeOffsets: [[113592, 39645]] + } + }, { + type: 'Feature', + id: '6106', + properties: { name: '延安市', cp: [109.1052, 36.4252], childNum: 13 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@kkÇmIšmUwVkUƒƒU²WmšVkm@m`mIĢĕUƒVa@™mXƒƒÿVVkyUýšĕ@l_UmnƒW„KVkţ™™¥™aƒwğ@™@aôƒ„ƒWa„kUmƒa¯¯™a±£kx™mmxUwÝ@xmU™b¯K™wó„Ý@kmm¹Ub@lklVbmnnVUV@x›UknƧJUX@ŽƒLÇWkw™LķƧÅwWJk„ƒLkþĉxWz™JUnǚkš@Ɛk¼ÜÔÈKšè@°lșÆk¦l„n@l¼@l¯L™°UU™Vǰƒ¹—`m¼mXk‚™bUaƒV@U¯x@¦™Ç™„UUmlmUVm„nnmlkw™@@šƒ¦Å‚ÇLmx¯Iklš„@¦mưVUx¯Lm„@J„InlmxU²šmVbkV‚bUnȎlKU_šWlīÈaÞ¦Æ@„ÞlanV@ƒšVšUbl@XlÇÒĸlŽVa„UX„lm@ѰƒƒÈmUw‚U™nyW£amL@mša²@lšV„™VLÆynX„šÝšVššKnxÆb@lk@WzXŽ@ll—n`šIV‚°b@n„m„„‚Unb„aVlÆ@ČxmnnL„¤ÆxššĠÛÈKVb„@„aWaœU‚ókVm™nL@W‚UnnšKlšœ¥‚bnIlU¯JlƒUkVkn`lUU™V»šwnwlUôšĊ¥nn„yÆb'], + encodeOffsets: [[113074, 37862]] + } + }, { + type: 'Feature', + id: '6107', + properties: { name: '汉中市', cp: [106.886, 33.0139], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lKnb@n„lWb°bkxĸwVb@ł„nlŽ„ƒĊ¥šL@XŽl™ÈƒVblÈK‚b„akVwôml²`‚nœ@‚nVKœl˜k²xŎƒ°¦VU„JĊw@çnWçރVkUóÛ@¥kwš™šUmƒX¯WšÑkƒ@UymIUwlUn¥‚mUk²a°¯V»@™ÝVș„ÝċÅÅVl»@l@a°±@_kammÅb™a@ƒƒm@ż™KknõĠ—@mšƒ„¯LÅw›‚—LVxmb@¼kV™@mw¯wVakKW»X±¼¯Vkxƒb„¼WŽ@nx@x±bóakbƒ@ÝmU™@ķÓÛL™kƒVUm™k¯¤ÝLUlÝ@Ýz™š„x@x™°™™™bƒmƒX¯aUJW¯—k@bÇWƒwÛwWxƒ@XWlb@Žƒ„VŽÈUlwšLnl°VlUô¦œU°¤VšUxVXUxlbkVVlƒI„°„ÅVlU°m@k„ÇU¯xUlƒLUlVL@b™°ĠInĠ°ÈnK‚„@xÞa²n‚aUyšXUKVkšWô¼Èa‚z°JXUVÇV_„JVƒšz@Žnb'], + encodeOffsets: [[109137, 34392]] + } + }, { + type: 'Feature', + id: '6109', + properties: { name: '安康市', cp: [109.1162, 32.7722], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„bĊaƨèšwôô„¼šb°ašXVƒÞVUÞ@‚aXƒm¥kImx¯¯ƒV@anU@UÇéğL@ƒ¯¥V£mƒ@ÝÈb„K‚™„X°wČÿ˜ƒ„b@xÈblxȯĊ„„mÆUVƒ„nÈ@ƨÜLĢ¥ƒŹnƒ°Vnn˜K„aô_ȃšwU‚aXmnW‚¯kl›LXƒÇ™ō¦ÝaÅVmbğUn¥±wÅéVƒan¥ƒ„U„»°am¥„£ƒÝ@ƒ„wVw™¥nU„уUmmVwmķIÅaóVWxkblb@ból@œğÒĉ¤ċXƒ˜¯X™xk„Ç@óÆÅx@š™xķ_kmݎǣkblb@`¯²@bk‚‚@k¼ÆUČÆƒÞǚÞU@šU¼¯°±bVlnm¦kVVxnJVz@‚l„™ÒXW°n„™V™šlx@¦ôÜVUl݄Xèm@è'], + encodeOffsets: [[110644, 34521]] + } + }, { + type: 'Feature', + id: '6110', + properties: { name: '商洛市', cp: [109.8083, 33.761], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@²nl‚ôbš„°aVwnKÞIš`°wšXôw°VĊ°@ŽÅš„ÞÆV„zÞK@xšŽ@a‚LŚ@b@ŽnLlƒ@šln„mnLVw„a„bVƒ‚VnbU¼„Vƒ°„bl„šbÈ@ĶŦb˜@nÇ@amIyUI@ĠVmôƒU™ƒVwkwlanJ„¯lwó¥@an°Jš_„‚@š™nóƒó@£l¥UwmašÑ@ƒUm±V_ƒJ—£›J—UW¥¯@ƒ_k¯¼mUƒVUè¯b@wmL™»ğVmağI¯¤ċIUW™XƒKĵ¦ķaƒJUb™IƒlUóVmk@WÅÅÇ@ƒmU„ÅVƒnĉƒÇ°kwÇa@wƒa—„ċxƒWšƒLÇa@Þn„U¤°¦@„ĠKÈê@VmV@b„U°°nwlJn¦W„bÝ@VŽ'], + encodeOffsets: [[111454, 34628]] + } + }, { + type: 'Feature', + id: '6103', + properties: { name: '宝鸡市', cp: [107.1826, 34.3433], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@ƒ„£@›°Išb@¯°ynʃaUƒlƒU£„Umšĵĉ@@ylUÞ@@£kWU¯WaU£¯ÇV¥ƒ@kb¯wƒn™¥ÇkUÇnUƒ@¯±›kULm›@m±_kŽónUxlŽƒbaÇLkŽUaDŽkšW@™Kĉ¦ƒ„kƒm@ŁUaķxlw¯aXaƒk@mmakL@šmšÛŽ@¼m„@l„XV`ƒn™KUš°°@²š¤UÈ@VxmôƒxKl„VV²aVw„Xla„Vlx@UVnŽÇnk°ƒVVL™lkI™šƒJÇk¯V@šknƘn@lznmlVkzVŽ„VVxš@Ux„z@x±¼VxxU„l‚kb˜@„¼Čk˜VXlĠkôV²w‚LUKlwœJ@a‚IV¥Þƒn¯Ün„‚„@nk˜l²kÆ@š°„aVbnI@™š‚Ťn'], + encodeOffsets: [[110408, 35815]] + } + }, { + type: 'Feature', + id: '6105', + properties: { name: '渭南市', cp: [109.7864, 35.0299], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@ÈôL„xUް„Þ@mŽÈnl¤nUôL‚wX`@ÞÝL™ŽUšmLô„„ŽôbVbnºlnÞ@ôƒšx°LšanV‚wÞ@Vxnwšnlw²¤šb°°„bVnƒlXbƒ„ó„@bš‚Ġ@„xšbš¦ŤšV™Xġ„£W¥ƽɽƒó@ýóƝÝ»„£X™mƅšĊkUƒ„@™™šó„kťaĵŽÇ@™akƒƒa„¯ƒUV»maUU„ƒaƒbUxmKƒnkm@™k„mK@ƒxó@¯n¯KǦ@ôÅèlxkx°nƒƾ¯KU¯WķL@VÝIUb™yWbX¼Ç°'], + encodeOffsets: [[111589, 35657]] + } + }, { + type: 'Feature', + id: '6104', + properties: { name: '咸阳市', cp: [108.4131, 34.8706], childNum: 14 }, + geometry: { + type: 'Polygon', + coordinates: ['@@šIXyĊwlý„KlƒXIVaķƒ™»a›£„¯aVU@a™‚wÈō‚ašL²»‚VœUln°WȯW»XašzVaÞJ@Uƒ»@¯Ýbğwly@£kÑţ±Wу@ka™IUƒƒnƒ@¯ƒómţU™b™U¯lÇIÝb@¤Ý@kV@zĊ@™ĶnƒVV¤k„V„„bmź¯z@°™a¯J@œƒ¤@„„bUx™bƒ„@`™xUÔ±ºVXœW‚„UnUJ‚L̝ÈKlblmÈXŎ°šU„°LšŽlkÞKš@Èxl_°ĶUÒkblš'], + encodeOffsets: [[111229, 36394]] + } + }, { + type: 'Feature', + id: '6101', + properties: { name: '西安市', cp: [109.1162, 34.2004], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°²@‚„mVVÈÈlš¦„m°xla„@U¦°ÈV¤XbV°lXÞaÈJ°kšVšaŤVôn°„„@„mV„šJlb„@XÒŤ²lÒ@¤kzĠxÞa@°„¼ĸK°XV‚°L„ƽ¯mlwkwÆç@óÈ¥°L°mô@„w@aƙK@b™@wÝLƒyÅUƒÝƙ@ĉ¯¯Uóx™W¯x™_ÝJmLUx¯b™ƒóak±mÝUU„™W¯b™aƒ»óó™xƧçĉbƒaĉxƒIUV¯¥ō„±w—l'], + encodeOffsets: [[110206, 34532]] + } + }, { + type: 'Feature', + id: '6102', + properties: { name: '铜川市', cp: [109.0393, 35.1947], childNum: 2 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÆxĸƨšKlxÈX„K@VWƨIlmœV@wVUmUnmUalk@kVaUaóaƒóƒnKV™šÞK@ÝW_xóKmVk£ÇmnÝ@¯ƒVƒwóK@ǯXkm›VU±¼™KbÇŎx‚š@bUV°bƒœ¤‚bš¼ĸ„Ub'], + encodeOffsets: [[111477, 36192]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/shan_xi_2_geo', [], function () { + return { + type: 'FeatureCollection', features: [{ + type: 'Feature', + id: '1409', + properties: { name: '忻州市', cp: [112.4561, 38.8971], childNum: 14 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Vx@lnbn¦WlnnUšmš°š²VšV‚VVVnUn„ºlz@l„„@Jƒ@kXWVXl@Lƒa@„ƒKUL„ŽlbnKlLnK‚LnKÆXn°šbVV@bUVl°Un@LnaVJUbW@UX²l‚@ČwlVVIšWnkÆa°„„anV‚Kn°™UW¯@™aVUVk@Un@„aV@ValwUanmWU„k@WVUUanaVwnLVl°@nk@mVU@UVK@w„LVKVU@ƒ„K@UUKVUV@@bnL„a‚V„aôšlIXmlKX_°KVV@bVV„@šzV`kblI„V„Ul‚šL@bnV@V„Ċll„„VlIXW@k„a‚U²blKšVnIlJ„albXXlWVn°JnšnL@l@XlJlaX@„X˜W²@l_VmnKšU„blU@mnkVK„¯@U@ƒma@kX¥VƒmakkƒLƒa@aƒ@WIUUVXWWnk@a°a@kkm@kUUmJm@WUUUIk`m@V—kaWWkX™KmƒXk¯ƒ@WKƒLkak@±bƒw@ƒaƒa@akaƒ@ma¯@ƒL—KÇÅkKWbkmġ™±ÅUƒLUK™VVkƒm¯LUVVbƒ„UwUW¯bm„ƒULƒxWJ—@ƒklmkUm@@KnwVkVK@akwƒ@@a¯bƒKkn›VUI™b¯mmbk@UbmKUL@xUUƒ@klmLUŽlVXI‚VVVUVUœU`mLXVWbXnW`Ų°xmށxU@mĉƒƒwU@mbU@UƒmbkVW¦kJ™@ƒX@`¯Im@UlUVVnb@bWJXnmbƒJUU™UUaƒ@UamIkaƒxƒ@@x@b'], + encodeOffsets: [[113614, 39657]] + } + }, { + type: 'Feature', + id: '1411', + properties: { name: '吕梁市', cp: [111.3574, 37.7325], childNum: 13 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@a@w„@„wlbnJVb„@VbšVVV„InaWmXI@a‚aUmVUVkn@°J@_„Wš@lIX¥lUnaV„V@naV@„xĊ„n‚V@‚wn¯wƱX_WmXaWUnKV_V›VUUUUWJkUVnKlk¯™@@kmKUaٱKkU@WmI@WUIlUUmVwXƒ‚w@ƒUlUVwœV‚@„Lnb‚W@anU@UšaVkô@l»n@na˜JnUÈLVaƃUUVm„VKVƒ²L@mU_lK@UVWkU‚a@a@U¯aUaƒÑóÑUb™„ƒKk@@aƒk¯mVaUwVƒÑkWUmK@UUKmXUWÝwUa™LUU@aWJUUU@Ua݄U@WL@VKVaVI@WnU@alIVKƒƒ@kIƒmIkJ@™m@ƒ™@@_™K@xƒ@kaW@U„@Vmn@ŽUK@mIƒJUXV¤XXWlkKƒkkK@XmJVakImJU@ó™¯LWKUV@nUVƒLkxmKkLma@kXKmmƒLƒab™LmK@V@mXVÆUxƒX@`nL„aV@@VmLUVnLlLš˜„b@„šŽ°²nx@b‚VUxlb@V¯bUV@zV‚XVĊXVx@lVn@VnnmŽUš@LlJXVƒz¯VWVXbšV@bmn™VUVk„Çþń@XVxmbUlV„Uln„W„@„Xl‚@VLXÒ@bÞJ°¦„L˜ò„@nU‚b@°„X@ŽXbmVU„V„nb@x‚x'], + encodeOffsets: [[113614, 39657]] + } + }, { + type: 'Feature', + id: '1410', + properties: { name: '临汾市', cp: [111.4783, 36.1615], childNum: 17 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nW‚@@UnLšK‚a„b„KnnWL@lnblKnLlw„KVU@mVUXL°KôšV@nIlJUbnI@WlL„llLXkWWU£VW„InJ‚@VL@nm@UVƒX@lb„@@wšL@`‚@„šn@V@lw„@n„VmVX„WmwnUlƒœa@_lK„wVlUn°xVKVXXWlUšVVI@K@K„n°KœwlVlU@kna@V_„Wn‚m„UVm@kXml_@m„LlKXw°m@_ôJVUV@X™l@UaV@Va°I„lk»VwUkVmwUmmVn@V¯@KƒU—wmK@U¯wUVÝ@mJƒU—nWK™@@UnKVa„_lykUmKÛnm@™x@ƒUUlwVk™ƒXW@ƒa@Uƒ@@K@ƒkIV™nammVakUlƒ@wX@@kƒ™¯@ƒVVbml@„„°UbULmlVbnbÅK±VƒKVXUJWa@ULWaUU@@U@aWK@UkxUKƒLUUUJ±UkL@V±kk@kam@UV@l@LWl@n@VVUx„LlUUx@VUV™U@aƒIUl™L@°mLU‚ƒbkUUaWUUaUU@aWK—LWJ@bUL@VUVVbU@m@a@kmKmnĉlUK™XƒWUblb—xmIkƒƒU@xWb@lkšVx™LXŽmzVV@bklVVUzm˜@bk„@Vx@xlŽU„@lUbVnl@„Wxnl@n@ŽUbV„mL‚mƒb@`X@lUX@@xlnkLWaUJnnWV™Vn@l„@bULVV@l™V@XnJVX'], + encodeOffsets: [[113063, 37784]] + } + }, { + type: 'Feature', + id: '1407', + properties: { name: '晋中市', cp: [112.7747, 37.37], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@šlInJ„lJ„@‚„ULkJ@bmV@XUJUb‚L@UXKV@ރVbV@VVXI@bVVšKVbÞxVXnWVL@VnLV‚lX„ÒUŽVxUb°n„l@bl@„LšƒVaô҄ÒVb°b@VnLnnV@lmn@lb„U„V@„‚JœUVV‚Xkl@lUzmJ@xšXkl‚bUn„JVšUb„nU‚lb„V@nlLX@lakšV`Ub°š@XVJnU‚L²KlxnI@KV@lbUbVV„KnVl@„zlm@Uš@nŽšI@WUaVl@@mVU„@XkW@ƒnkVKVƒ„_Vw„y@knwVa‚@XalU„@šVnml@„X@V„L‚KVaÞbnnlJšI„mVKn„VVVInVlU„@„m@™mXK@UmyUI@mWUUakamw@wUwmLkakwVƒmK™w@wUam£y@am_ƒW@™UU@knmm„amU@WUa@knw@ƒUUUUV@nƒJm@mVUkKVUUUkKmwƒKULƒKUImV@lUn™nŽm@mbUK@°™bUnmbUmkkƒWUb@am@UXkK@a±@™V™@ĉř„V‚UXVxUVkLWl¯@@bULUlm@@nm`—XƒlWakIkm›VUbUL@Vm@kIƒ@@Kšm@—VaX‚I@W@aU@kUƒVU_™KƒbƒJkkǎ™b@nkKmL™wÅW@kVUUƒVU@WUIƒJmIXmma@_kyVaUUlkUm@ƒkU›x¯Lƒm@L@LUJ™UkVWXUWUL¯wVmUkƒxkL@`›bk„mVnxƒXUWUnmƒƒ@kxU@'], + encodeOffsets: [[114087, 37682]] + } + }, { + type: 'Feature', + id: '1408', + properties: { name: '运城市', cp: [111.1487, 35.2002], childNum: 13 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„Vl„nJ˜wkaVa„XšWVLĊknmnL‚l@@bn‚V@UaVU@UVK@aXI˜KXL@bVVVbXVVblV„aVnK@¯šKVk„J@bšVVU@UVwkVƒKVwUUm@@Xk@K@kVUn@lbl@²l@UlK²VVIVV„KVLlw@VXL@b@VV@VŽXbVK‚@XbVIUW„L‚U²ÆLmaUankVKVaƒ¯@ƒnkUa„U°@„š‚n@@kWa„UVaXUW@IXKVw@U™ƒ„™WU@W@@UUƒU@mn@ƒ`m@UUULkUmJ™IUƒ@@UƒK@U@›anƒ™ak_@wmKUwmakV™kmK™V™k¯b™wƒ`kwUIÇx¯»ÇaŃmn@@™mƒmUkV@wkKW@kxmL™UkĉLÝk™xÝw¯lóVU„mV@ĀVVX¦W¤kz@`Vx°„²ĸ‚š@„Ul@x„êĸNJ°¤V„VlXLWnXxmV@nUl@„'], + encodeOffsets: [[113232, 36597]] + } + }, { + type: 'Feature', + id: '1402', + properties: { name: '大同市', cp: [113.7854, 39.8035], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@²£šyl@Ȑ˜Ė@bĸŽĢbĸ„˜X„a‚KŤnn@ŎôllÈx„nVnÞDŽV@b‚nXllL°KšbVb@J@b—„‚„@ŽU„„xlKXLlKlXk„@Ulk„JlkUƒVKXUƒÇVIVm@_nǚLšašl‚w„VnU@UUwma@aƒaÝaLmUk@@Wƒ@U@@X™wVWÝUUUk@@VmLƒKV»nwUw™aUL@`mzƒJUIVƒUaUw™KUaVIlJôanÑlLVUn@ša„@VV„@@UUwVK°Vn_lJÆLœéW@UUUÅ@»lm@aÞIVwXW˜UUkkm@U@aƒU@mwU£VWU_kWmƒXwW_°yUkkK@UÇK@kkUVymóK—U@KWIƒbUak@mJ@bkbmLkŽ™UmƒkVU„W¦@lnb@„@Vƒ°ULml@nkVƒa™VmLUnk`±@—XƒWW@kbǦXޝ„WxI@xmbmxXlWV„„@bŎUz@J‚b@bÞb™ŽU@Wbk@ƒxk@WX¯VۙƒWÝbÝUkVUU@alI@a@akLWa™m@U¯UUmÇL@K@aU@¯VUkƒKmX@`@œkJ@nV‚Ub@lbVÆXVW„ULU`VbkLUV@XWl@bXJ˜@VbV@Vl'], + encodeOffsets: [[115335, 41209]] + } + }, { + type: 'Feature', + id: '1404', + properties: { name: '长治市', cp: [112.8625, 36.4746], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Uk™Lky@I‚JVa@mÞaWšy@_W@_WƒXVlUVwš@nw°K@m„UƒVaƒmVkU@mmmnLVUmKXa™U@IlKVUnK@UmWkX@WV_Vƒ@akU@a„KWIXyƒIUVmUn™Ua@WaXUVKVmkUWVkUƒLU@@VƒbƒKbƒIUmƒ@mbVL—x›WUUkn±V¯wƒbÅJUbmLkbmKÅKƒbVnUbƒV™KUb™KUbmLKmƒb™aƒKkUm@UŽnn‚VnxUVlUxl¼ƒk¯JUbU@Vbk@WšU@UVóI@`¯nWxkLƒK@nk`Wn@lUnƒVnm‚ƒXU`@mb@lkV@„VnklVVUblz@`nbWnnJ„IVJ@XUVV„UV@lÆXšxnKlL@mšaȍll„I„ašLV`„UlVV@@b@XJWUb@˜™n@L„@lJn@@UVKVaœUlnlJXb„k˜Wn_@mn@VkVK@a°@XklKVUUwVWUšƒĊƚ@šU²@@blLVWn@@bVa„XllVnnaVmša@¯VLnan@‚šmVm@knUVJ'], + encodeOffsets: [[116269, 37637]] + } + }, { + type: 'Feature', + id: '1406', + properties: { name: '朔州市', cp: [113.0713, 39.6991], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XXWVXVWnnlnn@èÆ¼@„„xlš„ŽV„nblšššVŽÈUVl‚š@„blnœL܃ĊmUkU@Ua‚—@WI@aXk@WVUlKUaV_VKXƒWUUÅka@VaU@mlI@›@_nW„LVl°UV@@b@LÈKVn°V@VšnXblK@b@bkJ@bVVlUÞVÞa„Xܚ°UXWl@„wl@XaV@šÝa@aa@IVyƍ@aƒƒXUWknwna@w‚JXw°ƒWÈ¥kI@W@kmKm™¯IUmkXWWkaƒbkImJ™UkL±aVƒb@lWXkJƒUkƒĉkƒ@UmU@a™KkƒVƒUkJlaU_™yƒ@UU@aUU¯LW`kLWnkJó™ƒbUƒbmK@aU@UVVL@VƒL@„UVULƒK@xUL@VUV@nml¯@UkmKUxmbVbUV@XƒlXVmnVbkxUbU@ƒbm@@VUlUVšb°@VX¯šm‚'], + encodeOffsets: [[114615, 40562]] + } + }, { + type: 'Feature', + id: '1405', + properties: { name: '晋城市', cp: [112.7856, 35.6342], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lV„Lšb„an‚LnKVašLVašL„UVaUm„aÆLnLlanKVaÆI„a°x²UlmVVœX˜wUKna„@Vn„J‚a„L„a@UV@@alUkKVKnkmmVwUk„w@ƒ™@kxWUXƒW@@mƒk@aUa@a¯aƒLkKmwkUm@kL@K@aWIXmƒVƒXƒWkUVakL@UVKƒw@aUK@UUKmLU@¯n™KUwVƒUIWJUWmka™@UXƒJƒk@UkmW@kLWKVƒx@bmI@VUaVU@a¯@UUmVKmX@±`kÝKVxUL±akL@V™bƒLkKmVƒ@XWVUbƒVXb@lm@@lW@@xk„lVUbnnmbUšlJ@„@L„@@V„b@‚WXš„UlkxVV@„šwn@ÜmnLlVkzƒ`UbmL@Vš@XL˜m„VnIÞ@VU°x@VnL˜x„V@LU°'], + encodeOffsets: [[115223, 36895]] + } + }, { + type: 'Feature', + id: '1401', + properties: { name: '太原市', cp: [112.3352, 37.9413], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„@VV@wVKnLVal@na°nšaVJœUlm„L°a@b„@lx@bULUlmx@Ln@lVkn„l˜@XI„w‚K„Vnƒ°aVXVx„ƒUaVU°K„nUlšUVL„KÆVš²Ģ‚lnXalLÈÆ˜L„KUaVkUanmWU™a@WwkUWU¯y¯Ñ@anIl@@aVU„m„I„ymUƒLUUVakaU@@LmJkw±LKmVUI@W¯™VaU_l™kbW@kK@mƒUkaVƒmVaU™ƒIVmalk™W@wnIVy@klkWUU›VI@ƒƒUƒVkam@knU@mmmK@bblVUX@VkLV`@n±KU„ULƒ‚UnVVńUbÇKmV—Imbm@k¼ó@Ul™b@VmV@bXmaƒK@›UUxkV‚V@„xW„UxVnkVVJ@XnJ@XlV²LƂVbnL@lš@°'], + encodeOffsets: [[114503, 39134]] + } + }, { + type: 'Feature', + id: '1403', + properties: { name: '阳泉市', cp: [113.4778, 38.0951], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°@nb„@lb@b„b„b‚@„x²al@lb„KXU@m‚kUWkkmUUƒVwV@XUW@™naVklKXblKnL‚ƒnLVanImaXKlL„ašV@U@KUKW„alƒXK@£WKXUV@VU„ƒUUVW„_V™@W@@K„@šƒUƒƒIWmXUmƒULƒn™JkImmÝaUbLƒK@UƒWk@mn™Uƒ@kVWb@Ubmx@lƒzUxƒ`U„ULml@„XWlƒ@UV@nk@U‚Vb@X™Jm™@@Vknƒyk@ƒzƒJƒnUV@bk@mJ@b°Ò°zXVlVXx‚@šbXVmnVbUlVb'], + encodeOffsets: [[115864, 39336]] + } + }], UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/si_chuan_geo', [], function () { + return { + type: 'FeatureCollection', features: [{ + type: 'Feature', + id: '5133', + properties: { name: '甘孜藏族自治州', cp: [99.9207, 31.0803], childNum: 18 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƒaXamƒ¯wm@±°wUwV@UaVw²Kš™„U@UƒU„¥‚a„ƒ@£Þ™ôx‚Knkm™X¥™IUƒÝUwlk°V„@ƒÈ™‚KUwlkUyV¹„mšx²Xll„ÑW»š„l„w°UŎ„nƒ„„˜Jœƒl¯°V@wôIVÇn™nUllšLšVǚLô¼XW£@±„@¥k_ÇJƒkUéƒkšƒƒwXa@ƒšLlw²™Vx„b‚mš¼ÈxlLȃ„VWÞn¯mǙÑUÝlÛkwlĉmƒULmwUJ™ç@wkm@ÑlUX™ƒÑôġƒVa™ƒUф¯@wķÓkbV„mnU@@y¯IķKƒV@¹šaƒé@k„mÞU°¥@a¯@anKlblU„¥@óğç@Çw@wkla„çݱk¯±@ğÝUÛmݯwƒ@kb±¯akXWÜkXUÆÇUš¤X_Ɛw„V@¤ƒXU‚ƒbUƒŽƒIUlÇUkŽġ@™aXČmlUlèUV@„mVk¦Vxš@¦±š¯ƒƒ¯¯anlWš¯nƒƒÅw@w°KVak£m@klƒKknÇU™»óKšīlaUaV£@™™¯@ƙU™VƒÛÝÇXƒÇl—ÓlŹ„»WUğJ¯£mx™Lĵô›ºX„VlUll²bl„„lŽƒxónn°ÝšU¼mJUš¯nƒƒƒV@êĉ°Uĸ™w™@mƒ@¯kmXamѯaUwÝKU¥„mÅn¥Wmn™ƒ¹n±ƑƆÇôXê±NJnšƒ‚UôlĖkȂVÒ¯¼VnƒȮ¯ĀnƆ˜Ģ@Žk°V°¯ĢVlkšVxm¼X²™Ŏ@ŽVxknWܰU‚¯n™ÆÝœ@`„ôݲÒƒ‚Çzn‚mX@x„è°K°Å„UČĬóĖ݄ƒ˜ó¼ÅêƒÒƒbmšk@V„Ž˜„@ҁl@nĉܛê—x@Ėml՛J¯¦óxȭ°ÝmޝLĵè›Ā@Ɓ„l°żƒ‚šX@xmŽkV@z@‚„°blŽnÞ°J@bn@ƼUVƒUóŽóLƒ°X°ÝLƒxUn„°ƒĬƒn@lnL@ŽÆ@šn„KÆxnUnV˜InĬmÆnxŎ¼ĊIĢóÞ@ĊƒƨbUƒ‚mV¥lkƒ‚wnL„mšÅÆ¥Xƒ˜wU@w‚wUÞ™@alUUŚU™Vkkm°aU—°Ó°w°U„ƒ„b°aš²K˜¯œĕ˜@ÈbޏĊaš»„XVm°In„‚Ĭk¼Vb„ašJšôš£VĊan™‚k„ů™™nƒÜU@anKnĮ‚bÈmƎš»nI‚霣Ġ™'], + encodeOffsets: [[103073, 33295]] + } + }, { + type: 'Feature', + id: '5132', + properties: { name: '阿坝藏族羌族自治州', cp: [102.4805, 32.4536], childNum: 13 }, + geometry: { + type: 'Polygon', + coordinates: ['@@l@@þ²I@lƒ„VL°wnJ°Uĸ™Ŏè„Ilw„V°¤nĮ™¤Ý„lè„L@„ƒ„@x„l™è²ôĊ_ĊġVÈôJżīlbXšÆÈVŽkxÇVƒ„n°„¦Üb@è@nn@@°šUÈ¥WDŽ_Uala¯¯UǙkƒ»„mVwk»˜k²°VxlL@¤œ_@x‚`ȍ‚Ėöb˜š@l²alX„a@bnK°¦VK@nnWmx@nUnl@@lƒlĉk°l°UXkmW@Unš`k„ÇL„ŽW„ÛÈVxšVVlVk@l„IXb@ylXÈW˜Į„WŤzœy@šmIƒŽ²šJ‚š@nް@V„„J°a„Å@ƒŎkVǚk™aUw„KVw™™Vƒ„@nkm™@±ôkô™ĊJš¼šInÑm±nIššÞ‚XȃĊxĊUÈbÜyÈ£Vkw@kVUV™„m@ša„»ÜbÈmƒUXwÝxƒUn¥@°ġ™Å‚aœJVk™aW¯Û@W¥—UŏĶ™@¯kUƒŃ@ašI@mmanwސ‚W@œ™mw°»Uřk¹±W„xVx¯¦U°ƒzţW™w@°ÇVÑk¯@„y°aš£š@šmšnl¼„ašÝÝakwUƒ±aĉImlĵn@ƒm@kkVƒ¯Ñm™ĸ™°x„l™œ@˜ƒXVÞmlÛݙĉUÅ¥mwÅ¥VaUw›™XġċaVůÛŹlwU¯U™ó±™xÛV±¯¯n¯mċƒLmnĊm‚™@™_kJWaXmwUƒĉK™»™@mwX݃UDŽkKÇw™»nƒaUw±škx™K@„Wb„x™„„lVê„lÈIl`@¦ƒŽ@²X¤Wó»™KUșŽ™KkkmVmšUÈóJ@x¯Uk°›„—Iƒƒm„ōƒ¯Vƒxƒk™ŽX¼ƒÒkk±W™wƒnUºVzklVxLǚ@„ƒŽ¯UklVxސV„šJW¦nšmlLówݚ@¤ƒ„bƒ¦„V@VƒV™š±LUxVbU@Vx¯x@²n‚°xn„Wb„b'], + encodeOffsets: [[103073, 33295]] + } + }, { + type: 'Feature', + id: '5134', + properties: { name: '凉山彝族自治州', cp: [101.9641, 27.6746], childNum: 17 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ĶóšKnw°¤ĠIXVƒ¼kź˜Ôk‚„ÈWŽÞȄÜUVšÅš°@šš‚@U¤Vbkb™ĬôLš¼ÈVlm„Llkn@l¤Ub¯L@xÆx„„°mX™mk°b„°°„²™@¥‚™Uwl¥nU@ƒVUkçVnkWċšbĢ@lÈVVk„J„‚V„aV„W@£ƒUƏxW`™£ÈVVÅlWXÛlW°b²la„@°xnÞVÜĠÞ²@l°Þ²ƒèkblŽ@xÈx@Ġènal£nU‚Dz@‚ÞK„nn¤@¼˜°U¼„nV‚šXU‚šbn™ĠUVbUlVš°LX„@lV„èÜUnK@_ƒyXVyUwmIU»Vƒ„kÇ¥šÿkkV¯m±n@ƒn¯ÜanVVƄz@Ž‚bœwÜb„m@wša@kƒmk»@™a@VUUó„w˜@nb°mš„XŽmnVbގVôanwšJ‚ak£lw„˜šLšÅnÝ@wl¥IÇӃ@U™™Lƒ¼kVǃÅó¯kVmmw@ƒn_‚Vn»°LÅ»@éÇçŹīVÇÝ@ÝğU™ƒaVݙ™š¯ķlŭġlƒ@óÞۂċ@¯nkUӄ—m±™IVġUwóKUn±¯—K›w»ƒKݐV„nl@„óxUwţ›£ĉƒUmŗÇ݃K™„ÝUlmKƒ£UVŽ@ÞȎW¦„Ò@Ĭšnny‚@nÒmœVŽ—¼@°Vbl@VlnUUwl™°a@„œ„@llnk°lbnKWĀnŽU„VxUŽ‚²Å‚m¦Û›ÇڃaU„Vbš@¦m`móX™Umm™xÅ@±Þn虲™U¯»m™ƒV—m@wƒU@wݚÝmLƒa@„™VÇUk„l°¯„VlkVƒ¦UšmxƒaULUèVx@„kIUxmWV¼¯VmȯšU„nl›È—@m»Å™ƒVWxÅbÅğW@kƒm@kVV¦mlnn@‚ō„l¦Åƙxkœ'], + encodeOffsets: [[102466, 28756]] + } + }, { + type: 'Feature', + id: '5107', + properties: { name: '绵阳市', cp: [104.7327, 31.8713], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„ńlV°š@Őĵ˜VX»ÆUĊќJ‚w„@È»m»š£°Kšk@ÇnÑÆš@„w°JUwnw@wšbVbš@VlźLUw„aƒ»„aUklyUUVakwWXwWƒUxkLƒmn¥mšwk™˜UX™lJ„w@aƒIk°X„¥Wƒ²l¥šaU™„IlmkklƒÈL@m°nlWU™aW—š@Vƒ„@UaV¥@ašk@Çk¹ƒK@a™K@kƒKkšÇX@VU@kx±V™èkIWwUVUkkKÇ@ƒa@wkml¯@kUWn£Wa„aVwnaV݃w¯@UaWx—n›JńUxUšma@L@„mbUށU±VVnkxUƙ„VŽm@kkKW°„X@¤ÇUkÆÇnU¦¯ŽkƒmLVwÅK@UóbÇÆVƒ¦™L@‚±êX¦mVޚkÜÝnWU—„›@kšƒŽ¯wķšnš°ÒU„lln@@„ĶmnkĊJ²bV„lxÞb™Þƒbk»™m™n™@™¤¯bƒz@Žl°UÒ¯È@ŽšxŤX„yV¯°¥Uwƒw²XlºVڝ¼nx›š@ށXݏmxnb@n™J@b'], + encodeOffsets: [[106448, 33694]] + } + }, { + type: 'Feature', + id: '5117', + properties: { name: '达州市', cp: [107.6111, 31.333], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Uxn°‚bnŽlUnÒÆƒnn@n‚¤„LnxlU„ššV@„Æl„x°XXxl`XœƒVW‚œL˜è—„±nÈbƒŽ°b@š²x°Kܼ°ĉ„V¦lJnU@¦šÞ‚JÞğ„mšLÞ»šxU„lb„VÆann„alŽ„VƍX@lnŎV„mU™maÅXƒa@aWmœ@‚£@wĉJVƒkk‚kkmƒnk@ƒmna@šal„Kš™‚J@Þwm‚ÅŃ@ambkUƒƒ@™™KUġKU@m‚ak¯±ƒ„a@aĉÑÅaVwšXlwƒ±—V¥l@@a™kƒ›@@£šmƒĉÝónWV@ށnÝÇÇx—UmbƒaVkkk@m„@m°ƒÝýXm›akÅīƒ@@ƒmb@@xmšnbƒ@mxšŽkWL@ƒ¯b@WUXmWœWKkbm@kx™Xmm@LUl„xlêóK™nUš„all™LƒlLó°m¯JVšU„K„„@x˜K²Āô¦l°'], + encodeOffsets: [[109519, 31917]] + } + }, { + type: 'Feature', + id: '5108', + properties: { name: '广元市', cp: [105.6885, 32.2284], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÆL„Ċx°»Ŧ¦˜W„™šLȄ@xÞKܰÞnVxÅĀlÒnJ°a@w„V¯l@XWknKnw˜VȚ°XXa˜lX°VI°b„W„nšaššš¥@ƒw°™n@šyÆ@nkÞ@°¯lJn„°IÈl‚UšlXÅ@ķlUV¥VUUÝޙUUƒ@UwƒJUkĉm@ýƒƒlk™WUwVwWJk@VUK™lUkaVƒUƒmLk„m@ƒƒ@Uƒ›Ik`@„™UmlUkV¯ÇXKÝ_mm¯@Uƒ`kwmƒl¼±KV¯—¯Vk±Vk±kzma™KUnDZ™bk¦±ŽX„ƒ¦¯Wl„J@bƒxkIWš—Vlš™xnŽm¦„nlKVwX„WxXŽlxUbVVkzVlƒb„¼ƒbVxŹKUk™@Ua™a@xmxVx¯Iƒx™@ŎmÒ@șl¯L™¤n¼'], + encodeOffsets: [[107146, 33452]] + } + }, { + type: 'Feature', + id: '5118', + properties: { name: '雅安市', cp: [102.6672, 29.8938], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ln@xšèVInxVKn„‚ĊklxkÜVޚÒnÈm°nxš@š¼ĊLV„nx‚WXblIš`š@nmĉn‚KȄôÅlUÑmU„K²¹@ÇÅVÓůVýÞW„‚UVmX„ÆbnwšKUÿ‚™@UmmIUb¯¥Uwƒ™¯™Çmš™„çmanUm»UUƒl—kƒ¤ƒa¯bV™U_WĕmÇŚ±ĢUlƒUl™ÛVƒçkUƒ@WޝKU™VkUağVmš™aV™WUƒmV»—¯@»m£ƒmÝLŽ±@ÈmVk¤mb@ôƒ¦kVkamL@b°‚@b¯¦ÝVƒn@l„ê™b@º„UĸL°J@zV@nmUƒlaĸÔ@xƒ°VҚ„Ub„‚óĢ„ÒWškV@Ò'], + encodeOffsets: [[104727, 30797]] + } + }, { + type: 'Feature', + id: '5115', + properties: { name: '宜宾市', cp: [104.6558, 28.548], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VlÈnl‚XnWLX`m„²nV‚@b°xĢçlnšVm‚nn„@@„°‚UzšlV°nޘÒkxl„w„`UnVb„mšL@albÞKÈۚmܼ°@Xǚ@wmW@ńKĊL„lV„šLVŎçÞL²±‚ğkw@Uƒy@¹lKX™lKVa@w™™Č@‚w@a˜ÇU¯n™@@wġak—™aō‚ƒƒK@Å»VakUWmķwkbğ¥mL™akš™@ġރ°¯xVVÞ@VšxVš—VWx„XlxU‚™@k²WVŃULmèULVĊklĠ„VœJVx±nѝ¦mwğ@mƒƒlğkkl±@kšUk@¯±Ç™Kƒ—kxl¤b™Imx'], + encodeOffsets: [[106099, 29279]] + } + }, { + type: 'Feature', + id: '5111', + properties: { name: '乐山市', cp: [103.5791, 29.1742], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@kšVŽk„ššÆkšV²UlºÈIlxƒLXèÜlU„„XU‚mkƒbVè„x°@„@¼°Knnn@m˜ÆIUbnJ@bVI°b°±@nK@mVakkƒKl¯nbšmĸ„èl@VnÈl‚UUw„wmwnm°¥„L„™lLnU@Va™ImbkƒmK„ƒƒnk@mƒb™ƒƒLV„JVUUƒ„VnkVmb@a¯JUaÆkk¥„IW¥„Klw—ÑmÝU¯™kVy¯@ƒƒ@mmn™Ukmġè¯w@aU±mnƒW_XKWmkÇmUkóbUÝUanmW™ƒ¯nma—@ƒxVôUV@šb@‚l¼„n@l™b@xƒnÛa›xa@ƒyUÅmUÛbm°@„m‚n²U°ll™ĀȦƒlU„V¼nJVxUz‚W„z@`mL'], + encodeOffsets: [[105480, 29993]] + } + }, { + type: 'Feature', + id: '5113', + properties: { name: '南充市', cp: [106.2048, 31.1517], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ȲVmšLnblyl²²UUl˜°U°²L‚»„knlx„_Vް@nnÞ`WL°ÈUŽVlnkšV@ƒl_œJV„‚@„„n@lƒnKV£™Çšƒ„UV¯šm„@laX˜U„‚UbVx„@VkôJU°Jn™@™‚wUk°wnUƒV_nJmknmm¯Vwk¯ó¥±ÿ—L@wƒƒƒLVU™kU›bX¯mykI@a±Kk¦ULmaXƒƒVm¯ƒK—z±ƒklUIVbÇJšƒkL¯™l™ƒU™ÿ™UƒlUkJƒUmŽUUkVVklKk@@a™U@„™J„²ƒxƒ¦kĬ@¼±ºXnWb—xƒU@xƒx@lšL@b„Llº@șl@bU¦Vbƒ@U„™@X˜‚bVškX¯m@nÇKk„llknƒJVš'], + encodeOffsets: [[107989, 32282]] + } + }, { + type: 'Feature', + id: '5119', + properties: { name: '巴中市', cp: [107.0618, 31.9977], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@V„U„lbkVšŽVLUŽl@XI‚ŽUxVxšXkl„„@þĊnVl„IVx„@VVݚVÞUVU¦kV@ĸWÆô²š@VÞnš@Vaôb²W@‚K@XUmÑUW°¯°Ina@y„_lWn¼lLUbô¼„Kla@™nkUyô—Æx°@šn£™Ý@¥mVkIU¥Ċƒ‚¯Û»¯L±w@™¯a„Ça²m˜ƒ—ç›KX„UW›k_Ww¯WƒwÅk@ƒ™Uƒ™kVmwƒK£@mmmńmÑkVmamnnlmIU`V„m¯xVlx@šmš¯IV‚óIUlƒ@UwVaƒ—VW‚kbƒ@™nU°ƒV™„šÈU¤'], + encodeOffsets: [[108957, 32569]] + } + }, { + type: 'Feature', + id: '5105', + properties: { name: '泸州市', cp: [105.4578, 28.493], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VVXwVKn„˜wnVƒn„l@b¯xmKUbVn°°X°@blLšènV„@Vn‚l@U„LnmmUna„VV_ĶV@wnJ„„l@@kkKVólaUwnJm„wUlm@ašUaôKVnJWbޚ@VšwVLX¥VVš_Þ`šw„WƒÞŹmmnIn¥Wƒ@k„WV¯@ƒ°kI™ŽƒLk¼Ç@k¤±Xk˜™nmݯUlÅÛKWV¯kƒlUwkLƒÓ™@U—@ƒ‚w@ġXV„˜WX„š@UbVbšV›š_kÇV™lU°lnwŎ¦ÞaƯnmm¯šU„™m¥nkVmkƒl_ó¥¯UÇl¯@™ƒ™L™kƒ`¯ķLUy¯@mw—¼ķ°ġ_řU°mlšnÇVUޚ„@‚ƒš_ƒJUnV‚UXšbl˜Ģb@x@mšV°—È‚b@‚xċ@šš@xUbkLWškL@º„zV‚@lxĠ±²'], + encodeOffsets: [[107674, 29639]] + } + }, { + type: 'Feature', + id: '5101', + properties: { name: '成都市', cp: [103.9526, 30.7617], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°n°m²°ÜUšw²ŽôVš°ŽVkxÜźUŰČb‚ŽĢlaÈL„»ƒ@k„wVǂ@„ƒnÛÆ»È™UݰKl_„V°Uš`Vbn@VbÈLšaVU@ƨ»V™nIl™šUUa„±lIk±š@VnKmÅ@WaƒK¦™lVōškK™Ý@maXÇmw¯IU‚@kƒVƒwUmVIƒƒƒç—ÿƒU±ŽÅ@¯È@xƒK@wƒLUbÇKō@mÝ£@yóUóóUxkI@WlIUaƒbƒaŽVĀ™LmxÅaWƒUnVƒÝXUþưUÔÈÆ@±ºƒLnVVÒkóÆ'], + encodeOffsets: [[105492, 31534]] + } + }, { + type: 'Feature', + id: '5120', + properties: { name: '资阳市', cp: [104.9744, 30.1575], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„è„„UJVn„x„U@lV°JnxWÈnbÞ@šŽlLŎ™Ušk‚¥„LXbÆ@nŽmLU‚@zlbXmlnVynL„çšJVb‚UnómUnamU„an¥lKV_²aValWô„n@nƒ‚bVœK°¯VblW@kkƒlUnlV£°W@w„UXk°KVwƒmVkwVyVI@wkmƒVÅ_Umm@Uÿmbk£™xUaVw±V¼V¤kLWxU@Uk™bƒyƒXšómƒ°V@@zÝÒkKƒn™±U@@_VVkƒÇaVwnLWalm@@kkVVl™¦kIV`±n@w„Kƒƒk²™aƒVUUV¤™nkxmUkVWVnLUbVbƒ`kUU„mLU‚mX@`ÅbǚXbWLXŽ›n'], + encodeOffsets: [[106695, 31062]] + } + }, { + type: 'Feature', + id: '5104', + properties: { name: '攀枝花市', cp: [101.6895, 26.7133], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„b‚KÞnޙ@x„V@x˜n„Unš°¼šVš±mç²ÝÆ@šwnnšVWŽnôn_@¥‚™UaVƒ„bƙœÈ܎n¥Æ±VUwVƒmXÿmLkal¯km@k›ƒ@ƒ¯bkšVxmVUkk@Ua@¯˜»Un›mс@mz™m@īƒÑX¥Ç@ݙxU¦ƒšÅŽÇUkx@šlb„UWVX„mV@xĵ˱@@ޝxUšÆLnÆm„šx@nXL±lUUVwKWak@WxkbšÞƒŽĉbUn@‚ƒ@@xó¦„Ŏ'], + encodeOffsets: [[103602, 27816]] + } + }, { + type: 'Feature', + id: '5114', + properties: { name: '眉山市', cp: [103.8098, 30.0146], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„šVx°¦VanJVnš@„b„aVbkJ@XlJVwôôôV@zÞ¤@nƎÈLVa„K@x„L@w°ÇÆ@²„V˜ĀœmWXKWașÆa@_nWVnKVƒlV„_UaVamKXUWwnmmwœÑm£@ynUƒkWƒĉUkWVkkV±çkJmkKƒšƒK¯¦mnnxƒxVxVÇkUmk@ƒçķ™nmak°„LllUb@nmL@‚¯²¯aUJ@amIVaÅJn—m@mm¯L@»ƒŽ¯@ƒwUç„anlVƒWVƒÛkWç„KkwÇJk¹±V™UÅl™™ġV™²ÈƂnXĖV`Uš°a„b„£˜l„kVVn¼mVnbƒè™šÈn°š'], + encodeOffsets: [[105683, 30685]] + } + }, { + type: 'Feature', + id: '5116', + properties: { name: '广安市', cp: [106.6333, 30.4376], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„VlIV‚„kšVšĀ„Vkš°šlK™„ÈIUaVJlk²„˜y„Ln°„UW„nbVKl¥²L@blJnzW°œalV°Inô¯‚K„kšKkkƒbV™šmôLkéƒwVk@KnnšWlwn@laXL›ŽnXVW@X°a@„XKl™nw„@man™@w‚@na@„„@ƒw™ĕġġ™wUkUWb@mk@™¦ƒ¥mUÛb±yÅn@bml@kV@„ƒlknVbmVnlmš—bÇk¯bWyk@V_UamJ@I—@WaƒVXamIVWkUkbVaƒUUxƒ@VnkVU¼›bkKUxmK™„@WšƒxnV@n'], + encodeOffsets: [[108518, 31208]] + } + }, { + type: 'Feature', + id: '5106', + properties: { name: '德阳市', cp: [104.48, 31.1133], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nUW¥²é@šK„¥‚UÈÅôa@VÆLUxnKl„°V¥ÈmlÅÈV@£ƒWX¯lLln@UšƒVÅlwUm²U‚VVna@ƒ@KnbV™VwƃœI˜mXwWƒkIVwÝĕVUa™IƒèmKUzkmWnka@y™@l²kJƒ²Vb™VkšmJUšƧ¼@UV™bÇKUam@Ua™_¯VƒUk`¯LVÞǚżm܃„@Uȃx@l„ƒ¼ÇKkbWŽœšVxUbƦnxƦĊV'], + encodeOffsets: [[106594, 32457]] + } + }, { + type: 'Feature', + id: '5110', + properties: { name: '内江市', cp: [104.8535, 29.6136], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@²èlUUllXĊVX„„lmV@zn¤›ÒnxmnXxlUnVlwšmU£VV„Ušbl±„„ƒL@x²mU_lJš¥UklU@ln@‚kXbmKUxÈbl„UU@`V@š²„mlLÞÑ@yU@„¯ôn‚™„W„zšaVlV@XwlKU£‚»—aVaUwm@mwUVUwkƒlVDzLlƒ„KV™m_@ykUmƒ@mU™çkKmxkIU‚Ý„@LUJ@n±„kº‚LXb™¼@mmIXa™@mamnkW™ƒKUƒƒxƒ_U`UklwUw™mUbƒV™²ƒakbƒmkn@`„UmҙšVxUb™I™`UƒaÝÈ'], + encodeOffsets: [[106774, 30342]] + } + }, { + type: 'Feature', + id: '5109', + properties: { name: '遂宁市', cp: [105.5347, 30.6683], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÞĖUxlJX„Vb°@„xUÞmbUxƒbXbm¤VX@lk°ln@x„bÈ@lLVlVUXxlJšç²UlwV@@UÈWl™„L„w@w„V˜wXaWm²¹@»lī„¥„wƒ±šI@ƒšV@bl@kLUllUVVn@mmU„wX™ċbVb@VUkbmamšW@kƒa@™™k@ƒlaUa™@¯b@šmmwó@@lkXUa¯°›LU‚am„m@óƒkXUb±bU`kLm¦ƒbnVmbnVmô'], + encodeOffsets: [[107595, 31270]] + } + }, { + type: 'Feature', + id: '5103', + properties: { name: '自贡市', cp: [104.6667, 29.2786], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lIÞDŽbVŽš_šJVaUwš™nуV@_lm„nla„bš±„UVašnVxkxVlV_„`„wV„„LšlXnmnbš@WbnJ@nš»WaKl¹²ƒ@mVI@KރVlJnw@aW¯¯¯UmVanL°w@aƒk„mmU—xmƒULWxUUÝKōèU™KUƒƒkĉKƒL@ÆnX@x™‚Wȯ@Û»™nÇÜÝLka@b™KƒnUaVmƒ_ƒxkƒLX¦ƒJl¦ÅlVb°I@bnaUŽmlƒUV„UVƒIUŽ„Kš„„a@nml„„ƒŽnLl„našJUbV@'], + encodeOffsets: [[106752, 30347]] + } + }], UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/tai_wan_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '7100', + properties: { name: '台湾', cp: [121.0295, 23.6082], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@\\sŽ@pS}aekgKSu™SsMß`¡CqZ·be@Q^o@‹gieMp‹‰]}•}Ľc_Kk…{™ù“A¡r‰[uom@эĥJiq©mʼnq¯Bq]ÙYgSåk_gwU­isTE…“‘ĕiqiUEkue_‰OSsZ‹aWKo¡­q“ycY£w}‹ĩ™ĕS§Z©S™N¥SyLÑ¡±Ks^IY‰PdƒY[Uo†Fp}´\\¬\\j]ˆe܍ò‹¤¡–ā a\\bn™U㺹Ìs¼j®[cíȈEŽĝĆ`ļf¶Š®K|VØDdKGpVnU‚FjpH—F`†B’[pMºxÖjbpÎxp€¬‚|ΟÜÒCв®‚ÜAp„ZG~€Šd˜ÞàV¨|¸€`|Œ²tx~\\~|dFf^zG€ĄŚhœdL\\hĸž¼†ŠOªP®lV`p\\]Xpll˜æ¤œCpQ|oF}fMRi†NSon_²qämœM„NM‹\\•'], + encodeOffsets: [[124853, 25650]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/tian_jin_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '120225', + properties: { name: '蓟县', cp: [117.4672, 40.004], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@EUDAEI@WNMNCBFAHFFNACDJDPBD@@GD@DIFFHEFGDBDEQOFG@EI_KG@OcJQM]RMEKBGPG@[LaCIICBWKCEEG@WBQHCDFD@HSLEJI@IHWECFGAAEKCGDBFCBSBIDCKKHEADMJMFABKOKEQAA@IEEG@GIQAEK@OZEESMOL“lu@SLUTYFQCMG@@SQUAYKAACA@IB@BDB@B@DC@@BGAEFAA@BEGKJCC@AGAIHA@@JC@QEIP@@A@EGIDC@O@C@@@@CJCWKABFLBBEBSQGBAAMIEM@AKBcJEN@BEBCFMAEFEF@J@BG@BFABECKFG@AFQ@@F@BEB@@A@@AAAKAE@GFGDECEFEECBKIKDELDFEDYH@EIACDCHKBEB@BAAC@ADBHABKJIAIJICEDGDCD@@A@A@DHCHJHDFEFGBKRKBGIK@GIMHSBCH_BOJECCJCFKKMD@DNJEDEGC@OJCJHRUL@HRJ@H[DCNKDZHCTFDHCFFKR`TANVDFZRDLFARB@HPAPG`ILAR@TERNDFNHDLCLDDCXDYbHF@FEB@LDDVE@JPNfXPINCVDJJD@NJPAJHLXHDNANHhB@DPNLRMTBFRBHHr@`NBFEBOCCBIAQJDHCHLHFA@HSDCRLFTB@HEFLNF@PELBDJALFLTC@EPFLLP@tUHQJDfIHGTB^JTCPDLKAIBATFPADIEGECEMJ@JIAIHGECFEAGDI\\SPOXAFCL@BQTQBBTMZECYGAHA@GJAE@HCAEME@IECFKJADDBABLTHHG@ILEAMNDJCDHEBF@@JNFJELDFKTOT@JETBFFHBHEHKI@@IJEJ@XKEOUMS@AF@CEB'], + encodeOffsets: [[120575, 41009]] + } + }, { + type: 'Feature', + id: '120114', + properties: { name: '武清区', cp: [117.0621, 39.4121], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@FWôµ@IFCLIB@EHNBp]AGEAKAEDMGZKFGBGME@ILGP@HEFB@BXMEAHUGC@IHCLOD@X[NWHWPKAEF[@EKIOL@EKGBNMJ@EIEHKBIC@BAKMIACCFQZCF]DB@ERAKADIHGEIBCGIIECFaGLZO@EFCNGAGDGAKL@BMG@IE@ADSDEH[JGC@CGA@BMDeK@EIACFE@@GG@FIAMM@CCGC@EM@ADE@CFMAAGHBDKIEAJG@DOGCDEKAGIS@KFCHKAEHIE]BeKNO[IFIOELC@A]GMBKVYCDDgGAICARc@MW@AQE@DGI@@AQ@@BKBAIQQYEFW@CEADIGGBCEIiMEMF_LGEKMBBDWEBGRC@E_CHYGCH_IAED@FFBQh@FGJaJ}AHRAREF@bE\\C@CT`FHC@\\BBF@BID@HGDDJ@@FAHKBARECKDAZBJIVNHCTA@EREAMLHDAFFBVFFC@RNRETHD@FOJMACH@CAB@P@DF@@FGDWE@FFSIEMKQDYCCHKb^JADOCIDGNDBdBCFJB@EC\\A@BJEA@JAAAD@HHD@LFBCFF@BERDHNhZQHMBGHOACCEBWEGD@PSJKCGEUD@CINLFGHE@AJK@HDABBHTB@F`DBFLBBHEDARCFG@ABJBAPVFE^FBGLGCFG_BMLEXGAAFE@@JNRVJHFALFBEHQJCTbNDHCF@PlFLJSXCHFHfVBTNJ\\BPJXC^FAVNFCHFB@FFH@JF@\\ABCFD\\BDMCAAJKQBGAILOEGHILECQLWFENJHADC@QxNHFJNLDFA@CBA@D˜UÂmR@FBL@BD'], + encodeOffsets: [[119959, 40574]] + } + }, { + type: 'Feature', + id: '120115', + properties: { name: '宝坻区', cp: [117.4274, 39.5913], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@TZbB@JHD@DODCLM@AP@LL@BNH@ETFN@`E@DNG@CHLBCJA@AICFKDDBKA@\\N@AFNAGRBFjFFFL@DHLBLFQPcXAZMJ]GAVHAIZJFNE@JpDRRDCLFDGXA@EFF@CFFPDfEBDB@DCHCFCJDJIJBLI@I@CB@@ADBB@FALADGDC@@H@BB@FZGFCCE@@FMLALJDAFFFEFDFCB@@AHCF@L@@BBB@BB@FC@E@@R@BEL@HEFD@G@AH@AIB@@@FEFEBALDDEFAFO^IF@JCBBFPNJJ@D@PRDCEKBAXL@BIFD@T@JE@BHHJORFDI@@B@JGH@@B@BDDLIFFHCD@D@DEE@BAAAB@DAF@B@H@NGLJLMRDNMfGIEPMI@GDAKK@KIDIJ@GE@CFDN@FE@GFEPGV@TCDFKHBBF@RW@DD@@ID@TJFKIKLI@EP@IGBCLAEKLEN@KSHIGYACSD@SEAMBBMGEBMQBCMIGKFB[D@HDLPHDBC@IFITDLG@IIIFGVBNJDLN@VIRI@YIAIHIC@CLKZCBEE@JECEIHEAKGDGECBGEEM@@DA@CCCBBEGA[GEDBBoNAAH]MKiIAWKQoIIPMFQAEEDMH@FMSUYIeF@EK@BIOEKJEBICFKaKPFAFSE@LWCCFMHDDEKESBOGBKIEIODLG@CCDEQCEDWEMDIEIB@EHGEEDAEAa@@HqDEJGF[AECCFa@WCEIKAAEQB@FCAE^YDERDDJBLNABD@AJGLJF@FNIAMLH@FPKLJ@FE\\BFOLGXMXW\\C@KPGD@JHDGVFBWN@AEAGFO@KH@JNFAHEHYLNHFCLBFBBHo^MAFGA@KJED@Jó¶EX'], + encodeOffsets: [[119959, 40574]] + } + }, { + type: 'Feature', + id: '120223', + properties: { name: '静海县', cp: [116.9824, 38.8312], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@NGFMDATCNDR@CCbINEHNJA@C\\EEGVE@IhE–[˜w”epc¢·²›^QEKIEKIgiQDkehY£uSDBMkUDOJDHC@GF@CAFBFEN@C‹Q@BeP@@G@HD@@MHQKi@[IGCOCESE@GMA_OcCGDu`aˆ@VZzKDkJBLNXGDqKEWE@cFEFA@ƒISIi@@KMABJGBcMuFEzGVH\\ATSEUBeALCEMG@CEBUHUCGXaBPtUBBFIBFTDFF@DDKBFNGBJPHXDDMDCLJ^mBIHIL@LR\\@LCR[@@z@NFD@LLBNb@RHDBNTPT\\F@BJF@BXCFBHHBDLFB@HODADE@@JHVXCPDHCFTLBBFNCDCCCU@@GAABEHHZHBCAEdEjFDD@GfD@DXFCHF@ERFDLBH@'], + encodeOffsets: [[119688, 40010]] + } + }, { + type: 'Feature', + id: '120221', + properties: { name: '宁河县', cp: [117.6801, 39.3853], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@BFLBFJXDb@DEFD\\BHEFIrC@Gb@FBCBFFGH@FJAJFNCXFFCRDCFDDH@CKJPJFALPHTALFCFGCENDDKXF@ETEBO‚bLELJDFALIPFAJL@@FfEZJTVENG@CNFFRBNEJOpJLRBXjJNLG^BBpMAAFC\\HHBAFDADDB@@CN@FFAHFDCHLHFBJGFCFUNKJJTD\\XUXF\\^F@DDDQXXBRLRCBDFEVCDLVDpUl@LEDJHAPRFGL@CETGPBTCDDVI@CFF@GFDCCVGLKEK[Y@MECISG@BKNSCGCKWEAaEBEKNGFSECO@GGM@GYI@DÅCMLHPTF@DJHAVVNKEGDETJ^[TJNNd@NOAMFYJ@@GFANDPEJB^aOadSTQSI@MHBDIEOKCG@EEFCKCqXO@@DMFENCDDHCCGJ]AKFoDaGGHYFDHKJiCMFGC@EQ@AEHGAC@IEAATKOHGIC@IXIFEoƒGE[JCFCDHNmRADFZMF[EEBMO{GU@AOW@@]ZeHBDEHBKEfQkuIWBs‡@EC@d[@[^EDMTKCEEcI@cDAB@FCBCACmOCG{PYHeBgPwPFDDALFFFCHQGSD@BHFAR[TaFYXMASUiGFL@DQNCJI@@D@PLDN`ETEFIGMCGBCE‘~CAIFDPEHGEQPHJADFJGHCJLB'], + encodeOffsets: [[120145, 40295]] + } + }, { + type: 'Feature', + id: '120109', + properties: { name: '大港区', cp: [117.3875, 38.757], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@JFFL°_`ONJKDDFIFZN xlb~yFVNRŒrdJGzDPVFBCTNND\\UR@E`F@@Ip@IWGUoawOEE@ÏDgK{İEEMFëC—b…™@—KwOCDHHKBDJCDEEEAGHOABFABMCgDLSQ@CFEB‰MgYIDQINE@AUSwSAdYEHQMEyK[KI@GRMLE@@OqOoBOnpJ@BmEAFHL^FDB[C@BBDVFAHFJENB@sNEjQAMYsUgCSBGDJH@\\LjGR@NC@@G@HO@AfR@DŒM@EFEADBE@@HGDICCPlVANTC¤vgZlfRChjLJ'], + encodeOffsets: [[120065, 39771]] + } + }, { + type: 'Feature', + id: '120107', + properties: { name: '塘沽区', cp: [117.6801, 38.9987], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@|ODHnPBDADEDA@CB@ddJFFLDNSFC\\]\\@@cFDˆ@nACOMW@M@ITURBRZNHNWRQšoO•j½f‡cqŸAqeiDÿÍyÓįFL|Ch@ÐFFxPpbHVJXo@@JCTR^BPABQA]^MB@bE@@FQBFVJRH@FXtPNZSBAja@@NƒDTŽLJrQTHFXZFB`'], + encodeOffsets: [[120391, 40118]] + } + }, { + type: 'Feature', + id: '120111', + properties: { name: '西青区', cp: [117.1829, 39.0022], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@LHAHRHATh`LHNHDG`HDGZ`D@FQDAHXFACNAFLVRTBFOfHDCVBFQH@HSXHEPFB@LDBF[bDbLFKJBFLADBDjLvCPEI]FGEIGCBEUSjcFiBIVWfaHCjN^HtwBBFGPBJGjFBEGECGDONMFAP]TDHQOWCMGAMHKIJEIGQ]aDlUG]VGEGDC„{PEbBZmE@@GH@BCA@FMQCFMYMJECELCMI_P¯`]R±œ¡¸od“f—x•\\gF@JUFFH[F@DIBGMMFaJDDQ@MCSDCBENMH'], + encodeOffsets: [[119688, 40010]] + } + }, { + type: 'Feature', + id: '120113', + properties: { name: '北辰区', cp: [117.1761, 39.2548], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ROHFFGCOJEDB’}DFHANDJHFEFSM_KC@O@CJ@DIRM@CEKKA…L…FKACHoLSJSIBETDJaEIIE]E]K[MYUYQILC@GF[MGNKEK@A@BCWECAIFEFYAGFOMI[OFuDiKACBCEKIAELaKaCE\\CA@KEAFOWGGTG@ERUACDeGEPSAUQKHE`FNjNFJADHHCJFB@DEXZFRRBJLA@AR@@BJ@CHF@BRX@@NQdDBBJhHCCZDLUNA^H@BKDPFEJ\\JMPfL^AJFFGLBDGLET@HJLBCFHDCPH@BIJFCLGABHNBDEF@BCN@@FHDDDN@BNEJH@@HF@DEJB@FfLNC@AHB@DHD\\IFGTCBCF@@JNH@ALKHBHCHBDMFEP@KYbHDEJF'], + encodeOffsets: [[120139, 40273]] + } + }, { + type: 'Feature', + id: '120110', + properties: { name: '东丽区', cp: [117.4013, 39.1223], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ZV\\N^L^FJFFJIbSCAFTJTIpKDGLB†E†KLBjHTVNBZWbE\\SBQGE@ATCRHDGEEKECBECxOhOfAZGA_YEEWSGqRKIS„C@Mb@BiTAMYsOEWG@IQEURA@EF@@acUOXQRYCUDCHDTEF[SUEgAYDcVGJM`iAWDWLQRMHUHgDsDBLHJFCFDFGHBFFVEAGHCJN@RJF‡PIhBD\\FENCPWA@LFBAFHBEJUEARCDIAEDQBRNa^'], + encodeOffsets: [[120048, 40134]] + } + }, { + type: 'Feature', + id: '120108', + properties: { name: '汉沽区', cp: [117.8888, 39.2191], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@LMEI\\MTABKN@FCDMH@COAcH[AoēA™M¡Wa[Meq™pQRMXMGQYQASV@J@NNXDPmBAtJXlveRLFGACFGAYf@^X@BPV@|HNPFA\\FNEEYBCnQGMDCDE\\IHFp„EFWJ@JJDGHLPBSFB@JBDGHBFR@@FHDNEjDLICGZEHGbHpCLE^BHIDDCGDCFMNE@CP@rWLDEDFFH@'], + encodeOffsets: [[120859, 40235]] + } + }, { + type: 'Feature', + id: '120112', + properties: { name: '津南区', cp: [117.3958, 38.9603], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@TLv@CNHFFBHGZFETNPhCVGNGRQXKXCjBN_HIdUZChBVF\\TFECSDGVCZDRQPWdVNA^]RBBAAOQ]DSE@F_Q@[VMCSMADUECOHycI‹qMQEU}zkaŸwENRDENB@ADG@@HF@YnaAOFƒ|CDFHUHH^kVbCR^JHIFLJNGHBDNPXGRSCO^EBMNCPDHHFAFiEIHOAEH'], + encodeOffsets: [[120045, 39982]] + } + }, { + type: 'Feature', + id: '120103', + properties: { name: '河西区', cp: [117.2365, 39.0804], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@d@hZNFdcLYXKRCtCMOFSYEGHEAGEDMu@SKAAsx]GMTGt'], + encodeOffsets: [[119992, 40041]] + } + }, { + type: 'Feature', + id: '120102', + properties: { name: '河东区', cp: [117.2571, 39.1209], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ZBVFFIGABEEA@KXBDOFM[EACJgˆOIE@QIMGDBHUFEEGAEHECEDGIAKQDWLKZcdQPEP@FOFBJTJ@HNORJf@DBCN'], + encodeOffsets: [[120063, 40098]] + } + }, { + type: 'Feature', + id: '120104', + properties: { name: '南开区', cp: [117.1527, 39.1065], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@NMVDCG\\E^B@HlB@YEDS@C…HsNSiMGDebUXAJEjidVTAFHDFJ'], + encodeOffsets: [[119940, 40093]] + } + }, { + type: 'Feature', + id: '120105', + properties: { name: '河北区', cp: [117.2145, 39.1615], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@DBXFADB@L@LFHM\\NHED@JKZRb]QMRAFCJBDCBQYADMCAe@QIMP@GSIAIPE@E[EGH@ZEF]^HJAXK@KF'], + encodeOffsets: [[119980, 40125]] + } + }, { + type: 'Feature', + id: '120106', + properties: { name: '红桥区', cp: [117.1596, 39.1663], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@J\\PNHEZBFEJELEL@BWGI^]FEkA@G]A[FDHUCMNEHJ^'], + encodeOffsets: [[119942, 40112]] + } + }, { + type: 'Feature', + id: '120101', + properties: { name: '和平区', cp: [117.2008, 39.1189], childNum: 1 }, + geometry: { type: 'Polygon', coordinates: ['@@D†T@FCHG\\FFOROMEgYc@'], encodeOffsets: [[119992, 40041]] } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/world_geo', [], function () { + return { + type: 'FeatureCollection', + offset: { x: 170, y: 90 }, + features: [{ + type: 'Feature', + id: 'AFG', + properties: { name: 'Afghanistan' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ࡪ͇وŐǬϠڐŶӂʮǚڦ۾njƀ̚ІɣʪҴMوǯʲĹ،˒˰Nj˖ϪԈiżŬĘͺβ̈Ҕȏĝʱʪ¡ý۷ͪ˟̊ǰώĊԼϖׂ×ࢀAƬʋӧĥяƹ७ĭࣗǭӫλȤΣĪллΛ–͑ɳ̡ߛ€ͦ։՗ɅΥԕ²ԋ͡ɿ̳þٝŋğɻسDҵӇ‡܍થΓבôǝȁԇņ࠿űටіހހåզُƚßՔ˟ڢάҢιŮɲؒ΂ਸ'], + encodeOffsets: [[62680, 36506]] + } + }, { + type: 'Feature', + id: 'AGO', + properties: { name: 'Angola' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ȸصʌԋȘ˕͐ѯ֊æˤŠҬşŲɀɂӨԶ®ƤіHñ̡৴RfՉǞ͕ūԑÖԫ˪̷­ৃȼüκsԴŴϦ¹ĘʹĩСƨϿů̿î́ყZᦵ֤ۋպԽ໳΁᎝Š׋Ж₭—ŵÏԃϞկ~ԉƝЙDžÿՈŜ݊̂ޒªΰ˚ݶȨΆӘռːϐĘج«ӊʣ̜ɡԚȵԎ®Ǩʶͬʭ߼ǣ֚сՐĄǎΌŔʒg̎ĸៜ['], ['@@ɉėɣلͼδʪƘ̀˽̩ǯƍɍλ']], + encodeOffsets: [[[16719, -6018]], [[12736, -5820]]] + } + }, { + type: 'Feature', + id: 'ALB', + properties: { name: 'Albania' }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ń˷ŢέΒȳiə˗ŧ»˙ϷСƛÐgȂү˰ñАîֶŖʼƗƂÉˌθаÂƿɨôǴɥȪďȨ̂'], + encodeOffsets: [[21085, 42860]] + } + }, { + type: 'Feature', + id: 'ARE', + properties: { name: 'United Arab Emirates' }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ƭ¤ŒɱڂƂ۞uԖ{ֺ֪ظՠՎԮdž˹ŖڑѕGçճƪŝϝǑE΅ʓΏuͷǝDZᡋъ͏࡚Ț'], + encodeOffsets: [[52818, 24828]] + } + }, { + type: 'Feature', + id: 'ARG', + properties: { name: 'Argentina' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ߗ§ѓ̔ԑx࣑@Aሞ͒ϵрؿનԋ୲ȿϙп'], ['@@Ӵ؇͠ڰॠ“ƊǷ໶ോۊŷਆاࡾ͡Ŧχࠡ౧ࡒɭ़ŷڔƈނ٢ƎݐжLjфӝiڣۻҩ֟΁ॅࠃ૭ଧȽڥɣࡹT࠷ǽȇÝիËѫ੨ܙŗ׃Հν§Ч߯ઁఛ҉။ǩउĎǰԅǣػƺщԋ̏ࡱř̪͕߱ɗŜ࠳֨ʧҠˆʢѧޛʻڭԹūࡋȣ҇ߏEڃљʋؿؙࠞߦǝ˿ݭ঳Ӄձটލͧ΅Ͽ˔ࢍ֔ӡΟ¨ީƀ᎓ŒΑӪhؾ֓Ą̃̏óࢺ٤φˈՒĭьѾܔ̬૘ěӲξDŽę̈́ϵǚˢΜϛ͈ȝॺ͸Ǣƙ਀ȠࡲɤݢԊ̨ʭࠐEޚَոo۰ӒࠎDޜɓƶϭฐԬࡺÿࠀ̜ބռ߂צԺʥ͢Ǭ˔ඔࣶд̀ࢎĹɂ۬ݺશȱ']], + encodeOffsets: [[[-67072, -56524]], [[-66524, -22605]]] + } + }, { + type: 'Feature', + id: 'ARM', + properties: { name: 'Armenia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@୞ƀǨə͌ƣǛɁ҄˽ʁˋΦɫϘƏl׋̣}΃ӢHżχCʝɤǩuͧʖرȼĄФƛ̒'], + encodeOffsets: [[44629, 42079]] + } + }, { + type: 'Feature', + id: 'ATF', + properties: { name: 'French Southern and Antarctic Lands' }, + geometry: { type: 'Polygon', coordinates: ['@@ը˃ߐĿˆDžɽϣಇÃq҂ŮΎÊǢ'], encodeOffsets: [[70590, -49792]] } + }, { + type: 'Feature', + id: 'AUS', + properties: { name: 'Australia' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ߺ́ҜŘپNJԎÉÐঽ˽́ēگ̉ɰ׍בǧ®ԫ€ԭܘŗֈӝܸtϬռõ'], ['@@̢ڇբ̈́˦ΡЖ͟đϋǴܛŸнɄĹɬܕąѥ˖֭࣬ѭצЋ֞λŋȯӔՃࣧ͜ͲȂ;ηȴźƢࢹ׬ԩϸ͋ڀڹʀڭtӏËԳА܋µݓơϵɩݡjӕǕ׻χއثЭ̫ٱ˫гʝܧ͕нɅػʼnׁªˇӕ̇व‰ޡ·ϫ͙ԕέ۟ψԥƪżѬҝǃ݁؉ܩɪӉƄӑÔ߿ʐիԮƻْțьЭ;߱ĸˢРȯزЧ׉ݝƷѮҬŶӞ͘ЬãجہܑԿ˽͏ڛٽΊ~ҀԿ،ѹ̀ǂȘઃԚןz߯Цຓāછ̝ख़˫ߡÈࢻљܯȗljѱ̳Ϳ܉qՅõݑƶ׿ğֽԁ҃ʕœуʁЗˋؕ֛Bࢽ՜ҋDŽlӖкŘƚȒ‡̠ĺאģӼѻࡖƏӒ˜ӎͭնsʚϋͰĽڄӓڔřΪτε˳ެиʑʞ͗aјеڎă˄țʦĠӠǢȸŘрęӮΎ؀Úٕ΢׀ۀˬЦΪٜ̰ϤàɴĻڎ̺ԚĤŶȀɞüҬoࢨʖҚώɊ҆ӲѐœͲvҘט܎ΠܩΦǚ̗Ј˂ТψǻĸٖҠаȮͨцƜ`ɼτĭdɂτŦОŔبϫҲӽՂMՖÿDZҦДڪϜɘſȾκӒԘ̒јıۺǂeі؛ˢ҂Ū֎ȻҀ·ۼɋʈĐԶʵӬʊ͂ñȠNJϬеɡ͉҇ͻ˿ƒĮͱʙп̗ЭÔʁڜҫ٨ˏѠ́؈ӻʂBѰɍŶʷߤ˵ֈ˼ǐҊǠόľҤʰڞŝОÔʔīӔŌنLjǠŽˬȮѾdžҦtʈ̸̾ʂЩÎՃȾķ˜Λ̨ёÚӇ‡̥']], + encodeOffsets: [[[148888, -41771]], [[147008, -14093]]] + } + }, { + type: 'Feature', + id: 'AUT', + properties: { name: 'Austria' }, + geometry: { + type: 'Polygon', + coordinates: ['@@Û΃ӁCǎǻ˧էLJƗܽsщȏۛÞயɐȉ̊ࠧƣĭDžԗŢѕxϝƶźȴƬʪ²ьɹŤɜݎ•׸ƮЖ}ˀǣþƜšո̠ń̒ϰز˓ӀΆ̐ÚٶʱЂªϰǁãŃČ̅'], + encodeOffsets: [[17388, 49279]] + } + }, { + type: 'Feature', + id: 'AZE', + properties: { name: 'Azerbaijan' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ʞɣψDGŻ΄ӡֽŒщϰƃ͆Ǫv'], ['@@ϊËƞɈԈͺѴѵђ׭ϺŸʸɧۗãƣٵƟ̭̍ȝvзȽ¥ԻѲ̂дʝʚ̿×যإk׌ϗƐΥɬʂˌ҃˾ǜɂ͋ƤǧɚȶƎضʍҐ¹ŘIJбҔɔŚʀ…׀ԙ']], + encodeOffsets: [[[46083, 40694]], [[48511, 42210]]] + } + }, { + type: 'Feature', + id: 'BDI', + properties: { name: 'Burundi' }, + geometry: { + type: 'Polygon', + coordinates: ['@@Á০ɃϢԜßʲӎҀŸͧǸȏT˗ȹǭ͛ѫ̧̥΍Ÿ'], + encodeOffsets: [[30045, -4607]] + } + }, { + type: 'Feature', + id: 'BEL', + properties: { name: 'Belgium' }, + geometry: { + type: 'Polygon', + coordinates: ['@@؜áުǪՐοҦȝħ֧ɕĝһܿϦћßדІϷͶϷ`ũ̒ڪǔ'], + encodeOffsets: [[3395, 52579]] + } + }, { + type: 'Feature', + id: 'BEN', + properties: { name: 'Benin' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ۛįȹ׆žኞǛǦЮ̇̌ʱʞņѶ̀ĨǠξЪĀȀʤˮʘ̠F٘ә˩ȎӽǓͷĘɧСԳʵʳǁՉt՗µണ'], + encodeOffsets: [[2757, 6410]] + } + }, { + type: 'Feature', + id: 'BFA', + properties: { name: 'Burkina Faso' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ֹɐϽ‹̍Ƀϗǰƥ˦ϙǾÅӦɮΤo˴ښۢŬּɲȴОœΚǢŘɎٴϖdžˀ޼ΒҦŢɀLJՠJáСŔϣӀչ€НॺȏmֻǿʣЩÿǟν˿ħ݁lϳâ˓ƉωÖร¡qӉŘم'], + encodeOffsets: [[-2895, 9874]] + } + }, { + type: 'Feature', + id: 'BGD', + properties: { name: 'Bangladesh' }, + geometry: { + type: 'Polygon', + coordinates: ['@@i׽̉ŶÆگʉѬµєDžКΕӨޟ’ü΋˃ҳΧǠũƵʃĠ͗øŽۖ̅لƜԒԫɤȆ̪Հ̼؅Ѽ֮̔ږεВ£ô׏ߞřު^Ӟƛϯ܅ϕµʷӍҢѥƎ՞ɶFѶ೯'], + encodeOffsets: [[94897, 22571]] + } + }, { + type: 'Feature', + id: 'BGR', + properties: { name: 'Bulgaria' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ʎΉ͚Ö٦ſ௾«иɌবȜ̩ؒӴĕѥΏ̫׹˔ӏܣŒࡥ˃Uлޅÿס̊ڧɱة|Ñ֊сːƒŢĝĴƘˌ͌ˀСδ÷̬ȸȐ'], + encodeOffsets: [[23201, 45297]] + } + }, { + type: 'Feature', + id: 'BHS', + properties: { name: 'The Bahamas' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ȵ£ɇӜ̿ʐǾՔʨ‘ۣ̎Jӥ'], ['@@ࣷƅÏ̴Ђäֈ{~ɕ'], ['@@ƟׯƷņ`ѮϓͪCĪڐϗ']], + encodeOffsets: [[[-79395, 24330]], [[-79687, 27218]], [[-78848, 27229]]] + } + }, { + type: 'Feature', + id: 'BIH', + properties: { name: 'Bosnia and Herzegovina' }, + geometry: { + type: 'Polygon', + coordinates: ['@@̦FȿσМ͓ūЃȡ™ƽû˙țūҥݓ͈ͅΘ͋Ȅϭ̾ǻʺЩϾǬΒ̞ȕǼǨϾnܠƓ׈\\Ϟȅ'], + encodeOffsets: [[19462, 45937]] + } + }, { + type: 'Feature', + id: 'BLR', + properties: { name: 'Belarus' }, + geometry: { + type: 'Polygon', + coordinates: ['@@߼Mࣰ̈́ȚӄېːÿϔԜƚ͖ࣘࢮɁŢȻѲĴࠒȧĊЁǷɧՄս΂Ƴ»Ʊ֦Ʃʎɡ͝ǿڳˆljÿȠ˧ȸ՝ܝ¹ʵȁÃхͭĆݷ¡əȞ̿ƥ́ŨڍjफȬࡕàٱmҡɩГeϐʷϴԌǢLͰɷ͌™ϊ'], + encodeOffsets: [[24048, 55207]] + } + }, { + type: 'Feature', + id: 'BLZ', + properties: { name: 'Belize' }, + geometry: { + type: 'Polygon', + coordinates: ['@@OŮĸžƴı̞ԔDŽZHūDŽGaɭƋεôŻĕ̝ÀăīщǓɟƱǓ̅ʣ@àॆPژ'], + encodeOffsets: [[-91282, 18236]] + } + }, { + type: 'Feature', + id: 'BMU', + properties: { name: 'Bermuda' }, + geometry: { + type: 'Polygon', + coordinates: ['@@OEMA]NOGNG\\Q^McMOI_OK@CQSGa@WNLVWHFLJXVFGJ`ZRTDLeeWKIHGIK@@[MQNi`]VDTBHCJAPBJLVFjT^LV\\RJZRn^RH`TfJjZHHOTTFJP_NOX[EYQQKMEJOLANJH@HQHAARF@ZEPS[U_IcRQXE@EEKKOCGGCQCOGISKYGUC'], + encodeOffsets: [[-66334, 33083]] + } + }, { + type: 'Feature', + id: 'BOL', + properties: { name: 'Bolivia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@य़”͟گӳ؈વȲ۫ݹ؅ŗ͡୆ҋऺˆ߾ѳ΢ŏ؆ЫֲՌ࣢αۺȖ˰ƭ̶͠рh܎¤נǸ˶ܩഠزíѠnȈʪ݀;Ѷ͂સƚęؽļ͓ãࣰ֛ݫऴƑ̻ͦ֨ǕΐʑՈTӦʟšӟǐʕZγʓa͒এྖ“ūӟĜͧҞɽȤԹƫڋɯρĄӏʿǥaʶ޳јޭ^ัʓЕ݋sҋͥ৕ƉǸ'], + encodeOffsets: [[-64354, -22563]] + } + }, { + type: 'Feature', id: 'BRA', properties: { name: 'Brazil' }, geometry: { + type: 'Polygon', + coordinates: ['@@૮ନॆࠄ֠΂ۼҪjڤуӞеLJǒӜŖӼBҦ̡ƴ̿Ƌ̻œį͔ýޔƿʤ֥ɪ΃ǏࢱLjÈଜʝҴˀǦăӐɰςƬڌȣԺҝɾěͨŬӠྕ”͑ঐʔbYδǏʖ™ӠӥʠՇSΏʒ֧ǖ̼ͥळƒ࣯ݬä֜Ļ͔Ěؾષƙѵ́ܿͽȇʩџmرîӃƟϡĪÈ౨ۏӷݏv҄ͅ֏¶DzΰұԞΓݴɜƶA΢ԖʎċҔɊ̈Ôϼ०ֲێNJŔŴݴŸϚᘰpθſӔύ̬LؐӀƒǚē†͐ӯĔYՀ࿖k˦̂ɸˉǐӷǂļҨѻٸÆnjʲشȞΊƐĮΤ׸ʆ¯Ǯ܅ðśՊ’֞ϓɒǀþجŅڜȿʐȤ؀žल̮͎̾ŏʂѪšȜȗʼnσ̀ŵȖϷɷ̏ƅ܏ɌыÔϳԬϿЮ¥Ģǒˆ˜ϠƦ˚ɢҬíȲŠҚçøǢƗǘĎʐͺõЈĒӔDZξǥʺɪȊ•ŘɿДÒ͒͊ʴؤӼޒ˺¢ȺҫҼ฽҈Ƒxׅمەʾʩ๤ƁŠࡃٔր੐̟ඊԡШӱƏҫ঎ʶ࿐ѹఴŽఔ۝੸व٪ʏܖ‘̦˅˸੭Ɣԗͯ൹ёշஅୡՙोثܯȿgɻءÒ༽ɹಓęօˇͧƫ૱࡛઱ƛࢁڹηȟԋ࣯Fೕ͓סύवʗ঩ڝ܅࠯ũطƔҫƽࡓȏЧחҥट๕݉ڗ֯Ͻϥߛ։ӑɷӈψЊӟֲڇҬࡹՠ̹{ࡅٰձę'], + encodeOffsets: [[-59008, -30941]] + } + }, { + type: 'Feature', + id: 'BRN', + properties: { name: 'Brunei' }, + geometry: { type: 'Polygon', coordinates: ['@@ͬ̾܎Ң›Я·՛Б€ǭ˹ϥѦ'], encodeOffsets: [[116945, 4635]] } + }, { + type: 'Feature', + id: 'BTN', + properties: { name: 'Bhutan' }, + geometry: { + type: 'Polygon', + coordinates: ['@@΂ˍÏԩۇ{ۿÈՇſޅ͊kǚ֌زҒɈ׸șѺqπɥ'], + encodeOffsets: [[93898, 28439]] + } + }, { + type: 'Feature', + id: 'BWA', + properties: { name: 'Botswana' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ǜƭ˄ӡॎइήĝD̑ʚՑٰŹ՚ϝ஑أݭع˩֓ʧ́ҙãƧГďʽ՝țہ¤БɾΟĸХșȵГЉʧпϑ׻đȇ̐üԠӽߚɧŲAរࠤˆ|Ჾش„ಖ͎̎΍՜ͤʮDӂȎưÙ͔ڣ'], + encodeOffsets: [[26265, -18980]] + } + }, { + type: 'Feature', + id: 'CAF', + properties: { name: 'Central African Republic' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ۜÚƺɎƔgȾȏ੔͐Τ͠Ѭ̌ĉ̐ʂüߺ½߆ϴ؊ࣺю;ՐƜĪΫӜԿF΃ƋΓÄʻ̆ʍٖοҢͻT˗֠ѫΖεɆԋغͩƊˉˣęաpكĘ̹ïųȱ˕}ͧDzधнϥĎŗÝʥԕطǐؙĊ՗̴ۓ˸҉˓͛яùדգ²֩Ƙԅѻѯޱėʐ›Ϧϧ˔̳Ѡï̠ЇѮæʢċΞÞٴȬƴц࡜'], + encodeOffsets: [[15647, 7601]] + } + }, { + type: 'Feature', id: 'CAN', properties: { name: 'Canada' }, geometry: { + type: 'MultiPolygon', + coordinates: [['@@؎œުxЯ΅̵Å੥Φȿˬ͆ʸ̎С'], ['@@Хcઝ˂ޯІ̄î૆Ɂ࡮Η|Ʒ'], ['@@хŝൡϢʥ̘ݩ̌Ưʈࡻư͕ҜðȚࢨǿԨŵ߄ė˺̃дЋ࠼΍Όҩ'], ['@@։ܿո˴֠ǵ̏̉ݚɱϰȴ࠼ʵʹ؛טƞņѿʼԷΝ݉ϝ‹փǂǾیɻńইܯԅ†צЂ߫Ȳࣙ¹࿅~ŹʠԼ̐λɬ۸Ԓࢄ೾Զӎܲ̂϶™Njɫ҅Չ'], ['@@@@@@@@߰äʥ॓ܶگͯDԑϪ̵ϮчʾƻτºˎЂŋ'], ['@@͡ѳχîəʢ Î͖ʦΆkɈǣ'], ['@@ঝҧץnǿɪزϲ଼SiǍ'], ['@@ƼυјżӨɗं˽४ʽöЍؤÞ׶˥ݙ˃ಳȬҽϚ࠭ҁ஡ѣ˿Ӯଗăܴдņڌ˺ޔ؈å'], ['@@ष¥ȿЪΦҼޖŜپɷXέħřձʛ'], ['@@Է̍ଉʬۃğଫϘ݊ʼטζࢼʃԎƯʦDžԠ͍'], ['@@G࡭૰ڄ৐եʡح߾֥࢚؈ؖܨ°ईஞÝఔūૼй¼зس҃פ҇ŃУ࿩חୡŻࢃʨʣуߵ۽ʓοই֩ளÇڏΡÇձ঍Ŀਉڻ࣭ु͙ڏ±উంƕϜ޻ϼّ୲ǔ༞εࡀ͋׺Ѕ੆ɳࢸΟ൶µࣴąƍܫʼࡋ،ळనߗ٨˚ҔࡺѭೢףѶഎЀ॒לҮהç֭֘܌৷لলࢤνݾ˫ಾגȘ෸ɫࡸć۠ɚ޴˵ਚӣʮ͙ຄÛ}۷˪ਜ਼ގſ،ӵ௖Ұߦऔ֌ϸٺݣબੳघ৙͵Յ૤Ӂݰӓംɏբˍͬ܃ټŏͶͅÖऻ؍́׽̏൯̗੏ۑ෇ƋᅛǮుPࢇÍ۱׽ੳω௉૗ॵޡ܌Ɛഘૄᄈ۪సČݔЫߍ֟ˊࣟ˜هતп൸ŨࡆीÎ؍ժ̥ਣսᇷԁ࠯ͽय؁ٓ֍܆ฤ۞഍ƒणĹջӆBନύʐ֛ƛ˧ɚٙىʱٹ̕ϡΥŽˏ¥čȹ໽A౥MϛƷࢵ؃Ŀßˍ͝ޗBࠛGϛƅƊǑøʯeďષлࡽſউ҅Ɂ@˷ƂĥŦnĔȂ̎ЂҦʘӺǙܴǵނ࢕ЂľƬūĺɳ@ǛƆ¥ȤǍēɥ€¾ĊȡĊćɚٵːڹ˪ࠑ͘߁̨ݧʃ˝Sਕɔڻʼnࠁʺ࡫Ɔו¾ʻƜƫҤ˳IE͓჏BᮝA᭯@ᡃ@ᠿ@៙@ᢡ@ࠛ@᠁@ᛷ@őF྽ࠜ׵δຽΐҳݖŤԨ੻ΨƧڴ৭؎iѠҲКwՌෙ՘࡭ॠՁ׾ޑϚ֣ΈѿѢࡇ˕ࠇҹݛւדπࠋɸࠟ|JⷎNᷲ༬ȭ೘Й࢘û݆ΖৰˀఢĹ఼τ൘Ⱦ־ΑظȠȊЄ׈ęෆݫ૦֬ŖّਔƐ͆ʖৰ·౼Λዸ̭ୄƛࠖÄଊэ஁зຶǷᗘIJܒƦࣆԋࣴьࡩΦժ˼৾žڦĎڴȩࡊҗरä๢ϛಬƄ௬oĭԺݞƦದ˵KߑՖڠڰuϞࡊ࣑԰কͺäघশ؎ૌƇࡘχଞॅݗЭ༠ǝ'], ['@@нϿሎʬୠщॊіސ˟یࠛфΒ׭ࡰ݊Ŭ࠲Ƈश͹ՆࠉʼץථеະЉĝσൡã՚͓˱ູ̯Ƃฃɪঋ»ཅ˷ᒃű๻āҕІଫɮݙģਛږ֔ĚಘƜஈ›રƦྷȞᅗã஗jѷ̴ዎͲಗ[ืɚ۶ـגͮᖬԠ࡬Nj'], ['@@݉ևಹך˸Ş૸’ٔȁ'], ['@@öɵࢿ|ࣟjࣿőʑ¼ऍѾ˜̠ИÈነěชң'], ['@@ڎԽޤڴᒆΈ෺ࢅůջဒʒߒͮሀыୄЏŊν༚Ȑ࢘՗᎐ܸͩ͹ߐ޻໯ϹጘչೲȁீޙೖÇʽכ้ঋਗά೓߲ઙĿŁӕࢪӥଜϯΌɟմࠩ́׿੕ɪᑏڨஎܣ࢔ԕƎ̉ᗱͲᅩӤ৳Ц̌ʂయќ௥Т`ʑᝡƅ܃˾ֆؤ཈dႸņ˫̜̊оચࠊɳϊ͕˾౿Рၳ˺՞ɆࢷԺ݋´ڏ˸҇ʛ຿ŅᵝȈᄫʚഹŴۥ̐࢞Ϧ஝Hˉ࡚٦ݨࡺ΄ᓪɢأի'], ['@@৊ǯຄńɖʑ޷Е౜αƱݳ൝͗߳ê׉͎ᐡٮjˎ႖ĽएռসР'], ['@@࣓عय़ŒԽ݆`кѮΨ࠰ɮც‡ྈȱళݟ৉Ǎ'], ['@@ᕍЙѷςኹѺήΤ׌ؘܰւࠑԦᭊƀ஬ǧᒰ±ࠄʑࣖΝ੍ɃᏝןਫי@ν'], ['@@ҙ͙௝Øৱɖ҂Ϛீɨܼ̬̍ˇ'], ['@@ٞϵ€љϣس൱đࣗƈjӬ൝ÝÁٮࣜౌ˺ஂµÜŎ'], ['@@̙͢ݠƘࢢ™ƪЩԝЋ᭗Žᑯη౩mŅ˜პϊ④ij୯Ʈପࠐ߈ɾᛄ˳๶ӻฺÛறߨޔ̪ࢄĭ˲Џ'], ['@@ढ˓ကFܨˡȑ́८ȍՔȧଊ™௬ë೸ǼႊðീÏ࣒ͅȊ΍ԽɟభǷ੽ĸᜱŻႫcഫļᖁ˔̃ҦĹжࡇξ჋ĺঅʼ͂ΈႾÁ'], ['@@ŗ٣٩̇޹£༝Ϋ഍ŹଗǼ@@ුؼႮծಆ[ସŬ'], ['@@ϣy༽Âɡɼၜ]מƻĵĩ'], ['@@༩ʋఝ˔ڼˎ௮Đஈſ˩ʥ'], ['@@৽ǏඉBbŤࡴʦҌદǝ'], ['@@కǥۃȚέ͂áΎજ‘ӪÅ৐̇ɫ̣'], ['@@͜Ε൏Ĥ൩˘ሏŒߺʠ৫ȮÕ͐࿶ŕᗢ̫ٞЍ'], ['@@০˕ଽʟ༇ك๥Óდņࣗ΄^̦ڔɢ໡Oए˨ՑϠ׌ώ׊ʲࡴÎοȖዜ¨੶҅මǵ൞ǃڒև'], ['@@ᖢßᅮŅ໤ɫ™ɡᏅη᎙ǟݻȉᆬJጡԙേʃ෯ۇႿƓՙǡᡷěୈĿׇƭ۞бߙ˽ಛʃЋ͡୫ʣŞȏ෬lȳᖟԋᔧɴឿŻధĸཟªĿЖ༊Ȑб؆ԢÐᖤγ଩բഹLjڼ͘๰Ȩʄ̊஋͠ΥѠᘞ—ڒĝ಼̪ቃĬ᰽Á๣˸۩ͼগʘȁ˺దLjঘ‚࿲ƌం̺ਬ©ࣤɽٔҒૐƈບĢᢲ–Ҁĝ᝚ƚᆔÁᆒÁ']], + encodeOffsets: [[[-65192, 47668]], [[-63289, 50284]], [[-126474, 49675]], [[-57481, 51904]], [[-135895, 55337]], [[-81168, 63651]], [[-83863, 64216]], [[-87205, 67234]], [[-77686, 68761]], [[-97943, 70767]], [[-92720, 71166]], [[-116907, 74877]], [[-107008, 75183]], [[-78172, 74858]], [[-88639, 74914]], [[-102764, 75617]], [[-95433, 74519]], [[-123351, 73097]], [[-95859, 76780]], [[-100864, 78562]], [[-110808, 78031]], [[-96956, 78949]], [[-118987, 79509]], [[-96092, 79381]], [[-112831, 79562]], [[-112295, 80489]], [[-98130, 79931]], [[-102461, 80205]], [[-89108, 81572]], [[-70144, 85101]]] + } + }, { + type: 'Feature', + id: 'CHE', + properties: { name: 'Switzerland' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƫŹȳϞƵіwá΅χƙةŀǻ͹ЏơƄһ˵Л¡αǶ˽ςБſ^ϠؚҾɈϤûɲƞ܎MǦǼ࣒ʱ'], + encodeOffsets: [[9825, 48666]] + } + }, { + type: 'Feature', + id: 'CHL', + properties: { name: 'Chile' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@Bም࣒@Ԓw˧ͻܛʻЭ‚ӻä؏ʨ࢟ŨੑҸ࡫Ҏୃशۘǭ୼֗૜̟ѢϬ˘ֺޠΎװı'], ['@@͢୅؆ŘĺɁ˿ࢍࣵг€ඓǫ˓ʦ͡ץԹջ߁̛ރĀ߿ԫࡹϮฏɔƵCޛӑࠍpۯٍշFޙʮࠏԉ̧ɣݡȟࡱƚ৿ͷǡȞॹϜ͇ˡΛ϶ǙĚ̓νǃĜӱ̫૗ѽܓĮыˇՑ٣υôࢹ̧̐֔ÄgؽΒө᎔őުſݝPЙȷݷ̣Ɖ޹Σoॅ˚१ג@@ਲ਼ӔˁՒʄӰх֒Ņ෤Φ߰ࢴٰౣʔߞݒ˸ඊत̏Ѯგ֝ɠʿ਻ՉŠ˂ல˺༒ϮָʍࠎéूΠ„Ԩപ׈എΤబȗ఼ʤۚĵਞӮਆưྺ˒ნˀሤÕ൘ǩ஄ќɌɦњЬֱŐ؅ѴΡ˅߽Ҍह']], + encodeOffsets: [[[-70281, -53899]], [[-69857, -22010]]] + } + }, { + type: 'Feature', + id: 'CHN', + properties: { name: 'China' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ԑഓΫۏѷ܂ĩخӶࠜڦَϨʡƣԓ', '@@ܩЗۏʺyܢаϠࣾɾӚoȊ͍σσșӟ'], ['@@ฬˍ঺ׯͼ߃౨Cܰͨ൸ʜѳݱ͙̭˽ः֡ࠇ৵ƪܝ̑ɜܙť঳ѕwLяթӺͯһಙαƀѹܩŒЍ˂ֽ׭ऑҋۃա୭ʑأϽࣝɭ҂ϴǭ͞ږ֠ѹѲܷ̓ॉ׏ԫթ࠙¡ѓϻѸ֩یƏ„ϕڔʕस׶ݚ͝լuƌѱஓɻϻҏࠇућיࣜҥͦࠝԞޓ֮٥_دՅɯȪ҃ӶʻŻۃɇڗҷ÷ؗࣧڹિޭোିޡୟۻृĩԣύ̃˘Ӈй୭сࢵŹ˻ࢱҭ·ə؎Ȧ͘ૻːЇƍࡍɔЏ΀ƄӜޏƶЙܑ̀҃ࠇīڡJ҉ȳѥūŶ॥҃x÷Ȣ}Ύ؝ʓεƸر͂ʔۤՏǎȧޜࢱƓĴাߔۮ”ۚ{٠νȨ˭ӶӭÙࣟŲ˴ΜϿԺ׳Ν۵ȸॷ՗އسڳĿοɦѹr׷Țґɇ֋رëڌԟǭওĈोȖڿτٵǔ˯ЖҽŦࡓոکʴΑȩଢ଼טࠛՒɽऐ׾ő‚іͭјĐۆࣙঠ൧ͼʝ٦ةϼƫʌųӎˆ͜ԛȔ˟ďɇިʈȔśȠߤЈ׈ǐࢸő͆՜ંIJͮ̚೜ҔŠȐãӐּɔݱฦဘͲјȈ؆ຒဠˡҲϞ¢ࡆۦĀٖ֔͢èɚו۸ѽப̿׆ڱ͕ঙ̢ηূƝଆŝ৪ԻԲġϤޟӲӿऒnჄȉ૤Ŝࠦůఔԛ৮BόʽঐҌബ̈ాŒঘ̒׾҈ך˰Ƌˤˍ͔ѴըӀùࡺǝ࠸Ѿ౲͚؞֊נʆ௠ŐڐĥĠ̘ݿזګː٥̳ࠣžӇŃɏΆר࠾Цو৚̓ஆՎQτݸࢾҲːWҪңȦۜмਰƲ૜vసʡ݈̱԰ࡏ̀α̊ԩ̶ࠕ']], + encodeOffsets: [[[124701, 24980], [112988, 19127]], [[130722, 50955]]] + } + }, { + type: 'Feature', + id: 'CIV', + properties: { name: 'Ivory Coast' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ϣUוǒ՟Wহƥ׍ʍ̯ࠫNjvÞۖĄŀ}ͨΣΚˉÈʕɲǾώčО ʔƄB¸ξÝnjĄŜ̸ĶȹڨȗΎæ˸ǘÞŊúɸųٮOƸʖƢgʎĦžΫȞłΌŰϚǽƦ˥Ϙǯ̎ɄϾŒֺɏɠ஡Ο۷ɕेθܣ›ͧ'], + encodeOffsets: [[-2924, 5115]] + } + }, { + type: 'Feature', + id: 'CMR', + properties: { name: 'Cameroon' }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ľ°ӻŇԝŒЋÅ൅nŬڒ͟֊ϧƚǟϖɋŦXɶɎתЎ߸ʒRԄӮ͈bҾΉ־˲ĀΔȌͺžь҆ΊǞךDzȊŢѨɜ՚۾ٲ¬˨ĠƲͫͰ‚ˌʂ¶ͮ՟Ê֏‹֏ҜޅҷTʁÏϥČǻЅӸөμƛŠΏˆ׃ſɩх࡛ȫƳÝٳČΝåʡЈѭð̴̟џϨ˓œϥĘʏÓґڛȤڷɜ੗'], + encodeOffsets: [[13390, 2322]] + } + }, { + type: 'Feature', + id: 'COD', + properties: { name: 'Democratic Republic of the Congo' }, + geometry: { + type: 'Polygon', + coordinates: ['@@»ঙͶŕˑ̗͓ɟ͍ѫǯϷ±ګț͍Oهʍɹ‹ԃŗÝýҟɄϡÂ৥ưޝċѧǘӣӤҹҒ੕ͥĒ૿ƙɣĵʇՙȊχƫষĻࡇɨƫט͝ɲƴìٟࣟR·Ҧ̳ΨٟŠȋѰԣ˅ڧŞ˫ϢՕüϽqµʾ́rϥºԳųιtȻû®ৄ˩̸ÕԬŬԒǝ͖eՊ৳Qò̢ѕG­ƣԵɁӧűȿҫŠˣş։å͏Ѱȗ˖ʋԌȷض៛\\̍ķʑh΋œşʼɊʀμƎɎ̪ǰɚđ˼͐ҜSÄʃ̼ƩӶՄӨШɆːƒ۔θࠆϬўքМĪˌt̰Ǝ̆«ӊŀݖǐԾʦ҈¸Ԕúה͜ѐҊ˔۔˷՘ؚ̳ĉظǏʦԖŘÞϦčनоͨDZ˖~ŴȲ̺ðلėբoˤĚԘۙϘķɤƖϲÅҶDzȦΫ݊֏'], + encodeOffsets: [[31574, 3594]] + } + }, { + type: 'Feature', + id: 'COG', + properties: { name: 'Republic of the Congo' }, + geometry: { + type: 'Polygon', + coordinates: ['@@̿˾ʩƗͻγۏࢸٖҪ̓֌˾ɂ֦ĺäό҆Зݐ•ʴЈł֒ĝڀЉӺζ঄ȽǘسçɻѢÔξ੘ڸɛڜȣÔҒѰ޲ԆѼ֪Ɨդ±·ԓʥ҇ǏԽĿݕ¬Ӊƍ̅s̯ĩˋփЛϫѝηࠅ„ۓɅˏӧЧӵՃ̻ƪÃʄқT˻͏əĒ'], + encodeOffsets: [[13308, -4895]] + } + }, { + type: 'Feature', + id: 'COL', + properties: { name: 'Colombia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ΫȤЭ˨ʅƅ܉Ŝȱΰƽ_࠿Ӓŕʺ̼ڛтȢ̦иÊΞՆ͐Ѵ̳ȦDŽӦȏސǸɚƃ܄ͻ҄ņТ˔ÑǂʠțӶĺŬѢـהΌĚT˦ƺ܂ӖϸՊfäǪڂéڌъ͞ȊОК̖»ɚɛǍ˱գƕɇп͗ʋʓ̷Ĺ׵ɷӭѢÇņϭȄȁâ͹ij̵ˆǫȸéȨ̉ઊĄӦŃעܡͼĚ؂­ӐĪ̔ƟƱҍȇ˯ß׻ǜ֑ʆʟ†ȉэл̨ȃɠ̋ʰ࠹ǁĻǏӸɷˊ˥́࿕lZԿӰē…͏ǙĔҿƑK؏ώ̫ƀӓoηϙᘯп҂ʣpժࡤٟϾԍị̈ƤҧɝصŀӵࢤϳɐˍІ֑Њɡā'], + encodeOffsets: [[-77182, -155]] + } + }, { + type: 'Feature', + id: 'CRI', + properties: { name: 'Costa Rica' }, + geometry: { + type: 'Polygon', + coordinates: ['@@җȆǟǮĬƤ‰ȄɷȪͥǔ́ņÅʖəƮÄʑǗȩȓɸˑĊŗǞLʮŎˆʁŠȖnjŴňֆɝȖŊˊéƔǥʜÇȪDzɈҙ͖ͷЂΩ͗õLͷǪűűıƱëǟ©Ǖ'], + encodeOffsets: [[-84956, 8423]] + } + }, { + type: 'Feature', + id: 'CUB', + properties: { name: 'Cuba' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ܨÑڊW߄˹̭ͮ޺Ĩ̔ȡ܈ԳԺϛˢ\\ԆǟÕʁئ“ٌ΅ıȟ֑Ń֡¥׃âளą֜Ҷ΁ɔէÈ̃ʐȥӎӃ޵ɦʥǬભž̋ǐ̀ɀࠗ¨׿ѧΏ[ťȳеğΫĂѺʸǼ̤ϞȈіǎَĄȰĢ'], + encodeOffsets: [[-84242, 23746]] + } + }, { + type: 'Feature', + id: '-99', + properties: { name: 'Northern Cyprus' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÐJŨȮ؄Yކʢ֧ΧÔƿęˆLJÙűj¥iĎѾNjVɫïƿ¬'], + encodeOffsets: [[33518, 35984]] + } + }, { + type: 'Feature', + id: 'CYP', + properties: { name: 'Cyprus' }, + geometry: { + type: 'Polygon', + coordinates: ['@@€ãࡱͿЩŊȟͶЎŒǀ«ɬðnjUÒ½j覎ŲiLjÚ̇'], + encodeOffsets: [[34789, 35900]] + } + }, { + type: 'Feature', + id: 'CZE', + properties: { name: 'Czech Republic' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ϯǂЁ©ٵʲ̏Ùҿ΅ر˔ӃΰѕȬėΠƧʠؒǾ̸Ⱦ׾ǎɂdžɜīϒĖЊ˓ؼñ¿ɳҘǧŲɒּĥĄʿز»ϮЯʡCŽƯȕ—ÅȑLJ¡wý˹ēϋbšȁ'], + encodeOffsets: [[17368, 49764]] + } + }, { + type: 'Feature', + id: 'DEU', + properties: { name: 'Germany' }, + geometry: { + type: 'Polygon', + coordinates: ['@@d͗ࡔțS̗ࡢǂҾɰॊͧІˋȞёɹɣ̨̙Ⱥ҅ß́Έ՛ϑĕɛĬɁDž׽Ǎ̷ȽؑǽƨʟĘΟіȫӄί̑ϯ̟ŃŢշýƛʿǤЕ~׷ƭݍ–ţɛыɺʩ±࣑ʲǥǻ܍Nń״ьֺ௅ƸЇɘ´ςǗȐĨ֨ƗࢢԎ@Ɉ͂Ⱦޔƿ˴ǐDz۰°Ƽȃ֮вȓ̀ӈٌōՠŸ'], + encodeOffsets: [[10161, 56303]] + } + }, { + type: 'Feature', + id: 'DJI', + properties: { name: 'Djibouti' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ȤʹΑӏȩήɯ̱҇ȅƬȭÏҷb_ʮßɶ˴Ѐ̐ϊήñʪȴ'], + encodeOffsets: [[44116, 13005]] + } + }, { + type: 'Feature', + id: 'DNK', + properties: { name: 'Denmark' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ԋڹ࢟ӄŝΒ௼˨ˎу'], ['@@ȵ̓ʡĞ؁؁ɮХ՟ŷًŎͽҲ}࡬Ɣɪʌʦ݌À̐ɴڮʂƒѝʟ˙ĶɽҘŵ']], + encodeOffsets: [[[12995, 56945]], [[11175, 57814]]] + } + }, { + type: 'Feature', + id: 'DOM', + properties: { name: 'Dominican Republic' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ŀƞپIӾɏɜtƴ̕Ҡhʡϐ‰Ю̷̯ͿЍǼϫ•ˡ¢ƱƵ͑½ŷȲˣťͳֻɏƆ§ʎjɬɍʦȲƚÞ͒óҜ'], + encodeOffsets: [[-73433, 20188]] + } + }, { + type: 'Feature', + id: 'DZA', + properties: { name: 'Algeria' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ᮩཽᝩ࿷இϑटćU՘ϵƌԹʊȧЀᬻᆴᬻᆴṕᎠfnj@ÊQ঺ബب࠼Ÿێɦ͎тচͪ˜جӢòϞ̶સƚƸ͜ɛDz̃ࢲ¹Ԟ́ՠ߰ҠࣦƢՌΎ߶ʰ෎Ƭർæшůߊͨ࣌P΀ȝֺ¾ǟћƄߟȡۙԭҵôمۊԃRȯԮ͹Ϊຝ˖ݏ°ϵƧۇÔϥŃҟòՇͫΗӺؓŽέ̘ҵϼƸڒϷςՃ'], + encodeOffsets: [[12288, 24035]] + } + }, { + type: 'Feature', + id: 'ECU', + properties: { name: 'Ecuador' }, + geometry: { + type: 'Polygon', + coordinates: ['@@҂غǻξ͍ϵԉςǞʀƙބ̎ŴƺԼ͆զÍ΄ҢǸ׀Ͱࡀӑƾ`Ȳί܊śʆƆЮ˧άȣŞٓʽճࣷ࢟য়ͧԥܵǃ֣Ӆ΋ΙъͻĞ΍áw̮ʈȨıΔ'], + encodeOffsets: [[-82229, -3486]] + } + }, { + type: 'Feature', + id: 'EGY', + properties: { name: 'Egypt' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ɽͷǹىɫѩȝƥ˩˔ϛϒ׵ஸđùΐࢯԪࡋٌವ̴ҙ˒ӃݮछǗƣ‚ճ঒ݭƨǣΏ@Ὁ@⁩@@ᶶ@Ჴʥڲɐ԰Żά̤Ж૦b߲ɝ࠲ʛϴſ٨ˊΌʊݎêװŃɮеȜ˜ڨȣټ³аɄւ෽'], + encodeOffsets: [[35761, 30210]] + } + }, { + type: 'Feature', + id: 'ERI', + properties: { name: 'Eritrea' }, + geometry: { + type: 'Polygon', + coordinates: ['@@˻˖ΉӰϋ˒ɏܷ̄ͶֻXȭǬӯȡԛϢʽط঑ǬęʹβఀĊ֒ˆʴؤƐьӒӦঃɴޗҢУବߏҲӍҖӝˀ˿аʧʩȳέò'], + encodeOffsets: [[43368, 12844]] + } + }, { + type: 'Feature', + id: 'ESP', + properties: { name: 'Spain' }, + geometry: { + type: 'Polygon', + coordinates: ['@@¦״΃θஒ؆ਊƱ૾NࣂƝۦªമƒͰ͛໺ϡ̨ǺीϝআŊ®ӥߓ֓ઁǯõ˱ԩү͕ہ͞ӑӟϑǹճىǗש٥੧_ߟhՃ͍̓ͅЩê̵˴ʃӚ޷žé˦̶̀Śɬ̃ʢɶրͳԌδè’ЈƎŬZپϲɪɻфөˆƝŁӹCɁЬ΃ū̥ɇ'], + encodeOffsets: [[-9251, 42886]] + } + }, { + type: 'Feature', + id: 'EST', + properties: { name: 'Estonia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ĮӸ̱ŁՓ̘ñӘਫ਼ɼ੔Ũ࣮Ƒࢂ|Ŵƣׯӝʞ޵ΫˉۙDܡ̸ρļ܏Ʃ'], + encodeOffsets: [[24897, 59181]] + } + }, { + type: 'Feature', + id: 'ETH', + properties: { name: 'Ethiopia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ԜϡӰȢȮǫּWܸ͵ɐ̃όˑΊӯ˼˕̏ω˳Ͽàɵ`ʭҸaȮÐȆƫǽ̴̕ҧ̴Й̛͎ᩨঽۺNᛛᡃફ™ݟףաeɯ˅ַB͹˴ލΙʝΓ֕àȃĬȟwˇT੟܌ב@˹ˢ@ҾѧƘӻࣴϥȚƧʹэЦԧÒ˸ӐҀrŲʰ[ݲʞࢠЊɾĎ΄ήٜԔи΀ࠠƆܠ঒ǫʾظ'], + encodeOffsets: [[38816, 15319]] + } + }, { + type: 'Feature', + id: 'FIN', + properties: { name: 'Finland' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ūיಀ֓ޡى঎ख़֡ܛݴس΅յఘֻ́ѓޭӟᅡੵໃá๑̯ൃǯӡҞ߿ˠȈࠢСݶАӪނՆ኎࣮֖Ǭē΢ୟЈ˳͜uಒ಻ֲ૩ЪԊɞतѻલ¦ࣘȭߠϊЬ؞ಬ˶઄ͯΡכ'], + encodeOffsets: [[29279, 70723]] + } + }, { + type: 'Feature', + id: 'FJI', + properties: { name: 'Fiji' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@̂ʍƓѭԳŗҩļąτ͖̀ϤĻȼƐ'], ['@@՛ǯŅ̼оǤˊ°Ӱˀ@ЧՕȷ'], ['@@é­@ШǨžĽЗ']], + encodeOffsets: [[[182655, -17756]], [[183669, -17204]], [[-184235, -16897]]] + } + }, { + type: 'Feature', + id: 'FLK', + properties: { name: 'Falkland Islands' }, + geometry: { type: 'Polygon', coordinates: ['@@৘Ԍ܎ȿԌʹڦϙʥ̋ଋʥϙ̌܋ϙпϚ'], encodeOffsets: [[-62668, -53094]] } + }, { + type: 'Feature', + id: 'FRA', + properties: { name: 'France' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ˣ٭ϡǠș֢ǜ̺ը͎Ɯܛ'], ['@@הЅќà݀ϥȊñʎjЈɗெƷыֹŃ׳ɱƝϣü‚ɇؙҽ]ϟВƀ˾ρ“ʁʚ̿̅ʯɐٱҖŃĩηݿӅစɬ௧˗ĩԑঅʼnिϞ̧ǹ໹Ϣͯ͜ѢԎdžူࢁࢤإю౹͒čؖઠǾථɏˇॎߌέዠپʨێܾǞŪ̑ϸ_ϸ͵']], + encodeOffsets: [[[9790, 43165]], [[3675, 51589]]] + } + }, { + type: 'Feature', + id: 'GAB', + properties: { name: 'Gabon' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ࡹࡔ։ۚԙࢄ‚˨ǾˎȲؔǜخ˴¶௢SOৠЌÆԞőӼňľ¯ÓνɼѡشèȾǗεঃЊӹĞٿŁ֑ʳЇݏ–҅Иãϋ֥Ĺ˽Ɂ̈́֋ٕҩ'], + encodeOffsets: [[11361, -4074]] + } + }, { + type: 'Feature', + id: 'GBR', + properties: { name: 'United Kingdom' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@҉ֽًǦԱ[ǦҊǥ҈۴–ࣔԳ'], ['@@࣋ࣧࡦŘऄIɕۅݯݩࢄÃäĕݠ঱ֺƇԬढ़ʈͧৰDžķ՝ѓʗͲѣݱѯ૳Rෝɱϻǒ։ϿޥĪם͍ҁǘ௼ࢨݪǺOBಽƔʃͰ࢜ʺҡҐdžռఢ÷D@ŮӤ֛Ԯ_\\৵ƨȧɬ̨ϒˡɴҍЇ·߶щє̨ࢆٶھڤá০ì']], + encodeOffsets: [[[-5797, 55864]], [[-3077, 60043]]] + } + }, { + type: 'Feature', + id: 'GEO', + properties: { name: 'Georgia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ųάȿִӟ̲ҭĬ̯ʴĺIJ܄ƝఆƋଦЕƦƻԚƂ޶ǭʴ·Նșɓřвғŗıҏºصʎȵƍଢ଼ſ߳Юࣅ¡'], + encodeOffsets: [[42552, 42533]] + } + }, { + type: 'Feature', + id: 'GHA', + properties: { name: 'Ghana' }, + geometry: { + type: 'Polygon', + coordinates: ['@@೉ӯҳ˽ݳʑݡʆœͨηܤɖैΠ۸ɟ஢ŗنrӊฤ¢ϊÕ˔ƊϴáÕʿΖџC؍Ąڍɂ̫ȅݳäйɢՓȈ̍'], + encodeOffsets: [[1086, 6072]] + } + }, { + type: 'Feature', + id: 'GIN', + properties: { name: 'Guinea' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ʃtǡͷʁJǏǴÈͶΗԨɕħǵmɳ³V̮Ƈɘ‚ʔǻΜɹ̜ڥDțǁɵoƝǷīɹ҅σρӼ͛͢ɋŊȿǖħϊūȂʓƐώЦʮeɖƘȄDƄŎï˨ĢĖd˶МU؀ȱȄlÚĤҜáŨ´¶̭ƆBɖŒƔƒɸɇάãɲǺ˖ŒȬŠǚuȈȁĴɳΆΙǣɏ˙ǴĊŀį«ʡʲʍǗÝå˷Ș΍Ⱥڧ̷ĵăśÞNj·νƃA'], + encodeOffsets: [[-8641, 7871]] + } + }, { + type: 'Feature', + id: 'GMB', + properties: { name: 'Gambia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ņόࣶzȎȦˊ`ͨȷʼIˢƚǞʏεȋιdέǰ̷ȗƭQȫŝއl'], + encodeOffsets: [[-17245, 13468]] + } + }, { + type: 'Feature', + id: 'GNB', + properties: { name: 'Guinea Bissau' }, + geometry: { + type: 'Polygon', + coordinates: ['@@҅ΘΝÈȕʀLŸʯǴÁǶѼƌ˦ɦĨ༈•c˵ġĕð˧ƃōȃCɕƗʭfύХ'], + encodeOffsets: [[-15493, 11306]] + } + }, { + type: 'Feature', + id: 'GNQ', + properties: { name: 'Equatorial Guinea' }, + geometry: { type: 'Polygon', coordinates: ['@@ƿŴ़̀െmPয়௡T˳µ'], encodeOffsets: [[9721, 1035]] } + }, { + type: 'Feature', + id: 'GRC', + properties: { name: 'Greece' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@Ҡ˱ٺ¶شÑqƣҜĶĿʛ௃íTƒਁǎƺΦ'], ['@@ʹՁȥĥԟ|ѫĀৱɓ׌ҿяƋҳAѻўƿȁȊԅрЁ̓ǿҴϯжʑ^ӅޥɠʜѕՓĕ͈ݏ֏Yۍμ̿ڦƧ֒͝ϮљӐÉʆϸТ¼˚˘Ũjɚռö͌ȀҖgƒƦdž„ت{ڨɲע̉ކĀVмЦɝ']], + encodeOffsets: [[[24269, 36562]], [[27243, 42560]]] + } + }, { + type: 'Feature', + id: 'GRL', + properties: { name: 'Greenland' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ᬜԆ᱒›ੴ̴ᲈĄ䀦Ŀ㉊ڗ༅͕ộ™⭏ćшƫᲐĠᡚ́࿈ʴۦ̝इӧᒞ̺✘͚ᠼNjҾΫ⃝ױӃȕ᧑ơወ¡ছؕگկ€ध৚շಽ“൧ˇ༂ѽȢ܋࣍ýઞܡህÑঈ΁˟̑இŽ୥E੆֩\\Ϗပΐћɣଌȿ઼ԣ͈ڱກlj٫͖ਣӘ˼֭উѵᕖ•୆¯ᖯܵᗿڏឧ́ओIࢅ͓ୟࢱᅵכׅ“૧ȷ஽ȝܛԱ[כыտോڧͺٿϗ۝љࠍஅ½఍ۈဿLࠁҢ֕ࠐฝਲэոŗݮ୓ޢ̢ئ֗̒ࠪচొ̺ͨΘǬڀॡ̕қůݯţਏ˜Éְ͢҂ެ\\႔ɟ෿Քݩ˾࠷ş۫ȼम޴ԝ̺ڗ׈ৡࢼ੯͚XΚᖷӮᄻÖᖟ‘Ꮕ×ইˌวՈᕂ˄ၚ¬≹ɖ቉΄Ś͜ẊИᶎИ̪͘ᗗ̠ܺͰ᯲ז௢ĚΓϘጲɜᣚƂᣖRࣺʽᕺҨፘ̽୺áპ˙ፅҐŘή'], + encodeOffsets: [[-47886, 84612]] + } + }, { + type: 'Feature', + id: 'GTM', + properties: { name: 'Guatemala' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ћƦԻfϩǖҍΌrʖĮȠšƾКۆ઄Ft˸Ƌ¾ġǺ̵Ț̹ˬϜDBӂ޸BަUOڗßॅʤ@˚ƱòŰʘŃϥ͍ЉɻÏljâǑǧɇȟ½¬ıƿġ˽Ƀ}ŭ'], + encodeOffsets: [[-92257, 14065]] + } + }, { + type: 'Feature', + id: 'GUF', + properties: { name: 'French Guiana' }, + geometry: { + type: 'Polygon', + coordinates: ['@@͉͑ГÑŗʀȉ–ʹɩνǦɈΪòϤƢή͛ӸáֺѪܠ˸ğؤȥࢸۿƔ·ӻޑʳأ'], + encodeOffsets: [[-53817, 2565]] + } + }, { + type: 'Feature', + id: 'GUY', + properties: { name: 'Guyana' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ր̯Դյzџ̈́o҈Чͪ̇Ƈݱԛɕ°ȣƹџϊ؏ːAŎӃԢܳȱ‰ҫî˙ɡϟƥ˅—ġǑЭ¦ԫЀÓϴɋьƆܐɸ̐ȕϸ˿ŶŊτțȘѩ™ْ֩ɬɲiϲԬƊȾƾ˽̸ô̬ږӲ'], + encodeOffsets: [[-61192, 8568]] + } + }, { + type: 'Feature', + id: 'HND', + properties: { name: 'Honduras' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ơˀʭòÐʹŗĞǣÒσij‹ŔʩƈǷǚʛìǨɈáǒÐNJЊɼϦ͎ĔȂƨʊ\\þ垦ϸùϲv˒ĢİĦˎ©ȪÉɘnǖòϨśƄkʲƿʐį̏Źɜɳ˽jśŕ̇ŋɃAȅŃǙœƛźĕ{ŇȩăRaǥ̉ɳƹıđĽʛǞǹɣǫPȟqlЭūQĿȓʽ“'], + encodeOffsets: [[-89412, 13297]] + } + }, { + type: 'Feature', + id: 'HRV', + properties: { name: 'Croatia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ȳ͗ˊʇ͓̓ϝȆׇ[ܟƔϽmǻǧ̝ȖǫΑЪϽǼʹϮ̽͌ȃ͆Ηݔ͇ġƛ߃̶ӣ̢ޑʠ۹ؤǞØϥΞe˲եƄʱγʝˮn̆Šbג…Ƹƚ˸ƍͤgGɼ̈ĒĈͺڞɠˊĻؼέۜlj̼Ų'], + encodeOffsets: [[19282, 47011]] + } + }, { + type: 'Feature', + id: 'HTI', + properties: { name: 'Haiti' }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ԣ™ܰƁôқÝ͑ȱƙɎʥiɫ֏ƜЅÍԡÔϽƿ҉ʾö˔ޜśيã̢ȈϧθP͎ՋžȌɶ'], + encodeOffsets: [[-74946, 20394]] + } + }, { + type: 'Feature', + id: 'HUN', + properties: { name: 'Hungary' }, + geometry: { + type: 'Polygon', + coordinates: ['@@˨ըǍǼӂDÜ΄ђɋ̲ğ۸ļäǚͮ~ЦžĜÃЂŀȠȢˠ¼࣒ʭǴĒҲɭÎɣԡǭЉ֫ԕ֭کǁԽš١ə̻űۛNJػήˉļǍ˴ƗV'], + encodeOffsets: [[16592, 47977]] + } + }, { + type: 'Feature', + id: 'IDN', + properties: { name: 'Indonesia' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@Λe૝ך޴ǒѴʭ̎ʭ»ɩ'], ['@@ܙȁijĶø˸ΰԢࠨͬĐǓfʫշع'], ['@@̢ɣԲèȼΥॿǛ׉őҍP̀ӚҤPɤ̖'], ['@@ūұ౅ʅૣľE̬ښǪՂʥ֔Üݬ̮'], ['@@ྔċȂΌ༘З̪կీƵਐӿय़͋ऍ͸ݻwࢍØ޻ưঅ͎؝ČΓŁ໕ΌƣΰޑØּߤ৶·ڴ͡ΒÛŘ̗'], ['@@ѝֱćنƬ̠Ǭ˴ȒʗCЏ'], ['@@̿˥ׅƸǏΰࡘ¢Ⱦˣ'], ['@@̨ٝۿΌۯìӃÅׇˆȦҦਠ”ऎʕ'], ['@@ɼയ࢈ԉ۰ࢼ८ԔݜBܘ̉خ̛ࣘLJbᩑbᩑݟې࡟ǜȷʇ੡}ΦۂՈɺɕࣲЕ۸࿃܆ۗêృަʛУ͑óȏ̮GκٛЮ̢ࣞ״gëɠ௵DͩԄݥƺΡдଈȰњ˜ഘ·Ƃ̹'], ['@@ڭ࠭كlj߱ǐඓ¥ܽŧţٍݪݛҒϠ༪˸çϯλŪιӯ͙݉ߒ੿Ƶ˿ݲॻQտ҅ʙ̐͡Мی࠙͗ȻɶŊ͖؅ӲØࠌ֕ʭîও”றՓũίʚʌޜŽ߸ΛPʻֺΎվŤښф౎ǮΎ܎ذپʛ੖śॴ–ࠨ؎Ʀȉ'], ['@@©ܽџĈŷԝΌѷɽĵ͹Ւʟ੺ǚڤ˨̨ÔҝӸóĀ΃'], ['@@सާহį˫ֵšݿַ߱u࠷͕౻ŭ̚ॕϙͫԤ׳´лːৃ̟̩Оս¯ۗĬŹૺнɺЕܘŝ݀ĮުԂ֐Ɩָ֗ӅըǠ՜ÑӪъЖôߒɽۆǶњୠ͔̈̆क़ॲ@ܰƙӍݷآߓơϭ'], ['@@छkۻ۰અۊέԚٍۄзؾٕ୴۪݅ʙܠ̳ڀݵՊѭܘمҺࢗऒóђզ‘ಢNjݔࠓٮ֫ҪΓߔࣙࡢ_ۺֹӠ۳٘ϥͳۉӖ̞̅sƜו̊ҵؠõФՏɁ਱‘ಟ']], + encodeOffsets: [[[123613, -10485]], [[127423, -10383]], [[120730, -8289]], [[125854, -8288]], [[111231, -6940]], [[137959, -6363]], [[130304, -3542]], [[133603, -3168]], [[137363, -1179]], [[128247, 1454]], [[131777, 1160]], [[120705, 1872]], [[108358, -5992]]] + } + }, { + type: 'Feature', + id: 'IND', + properties: { name: 'India' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ࣚটďۅͮїѕ׽ŒɾएࠜՑ୞חՑϟ͛޻ࠀͅߊЭરһସʼnӜёٮāৠȝ۪bĪͪŋՖÞβԠǮìڋlǙކ͉Ոƀ܀Çۈ|ÐԪ΁ˎڴŀވشॸ՘۶ȷ״ΞЀԹ˳Λ࣠űÜ͇̍Ʒèԫ׷Ʋછׅ~ӓҩ۵§ХϏۗځȒࢇȏ˹ĚΣгȥѵ೰ɵEƍ՝ҡѦʸӎϖ¶ϰ܆ӝƜީ]ߝŚóאБ¤ڕζ֭̓؆ѻԿ̻ȅ̩Ԭɣƛԑ̆كžەţֱ̫Zਛǩ´ك҃ӻ௃֡ळ঩كՋ࠷ջCϭлȹݳ̝Ͻ«ʥٙǪધ®ۡΣߙI෗ѣ¡ϣٙʰˣދʃ˱֯͵ʍߑ޸ϳ୴͑ࡒ̍Јѿ߰ȻੂơՀޅ଼Α࿀ʣ੾HৰǍ޾௣ԉףĶ઱৲И̤ʝͤড܊֖֔ᇜCǗܞҽюĩ٨ջϘऒࢢঊÙ࢞ࢢՄ࡞ࠄࡈ_״ܒӠڳд֪݂̇̕Ьβ౤ȱपŰߺ۸'], + encodeOffsets: [[79706, 36346]] + } + }, { + type: 'Feature', + id: 'IRL', + properties: { name: 'Ireland' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƒ׷ًݣ๯ӹ஑Ŷڼ࢚ѭࡢତڄٌϼǦ҇ǥ҉Բ\\ٌǥ'], + encodeOffsets: [[-6346, 55161]] + } + }, { + type: 'Feature', + id: 'IRN', + properties: { name: 'Iran' }, + geometry: { + type: 'Polygon', + coordinates: ['@@݈njװӔ֚{τƾװýघэڤğ।ݓظ‰òۻ΁਷ɱؑκŭΫҡˠڡàՓِƙæեݿݿжѵ͸ԓߦυx݉ДƋêϯ௉ѡ̓উཌྷʪࣷȖेŊΧਐЕƪ٣ƭࡑНਇ˦ࡑ٦߳ʈ֗ߘا૪ҍƋՕ˦̻͝ҭѴS҂ˍ@Ɛ،ѝٔ਍Ң׉ߜȜپц̂ÙӬտʨխ৊ҟڨǐʼʿ६ּʈƄͅъϯ־ő̤~রئ̀Øʞʙ́гԼѱȾ¦ˈإߖǩ׎у஠ƟಾɞĄȞ'], + encodeOffsets: [[55216, 38092]] + } + }, { + type: 'Feature', + id: 'IRQ', + properties: { name: 'Iraq' }, + geometry: { + type: 'Polygon', + coordinates: ['@@րʧÚӫх́țٽ׊ߛ਎ҡўٓƏ؋ˎ@TҁҮѳӿ¤֟ê؝߭༟äᛍၖఫךৡɪ͹৾ᇶ࢔͆৬āؘҢȺјԾΰž঎Ň̐ɉЖƚծ৉'], + encodeOffsets: [[46511, 36842]] + } + }, { + type: 'Feature', + id: 'ISL', + properties: { name: 'Iceland' }, + geometry: { + type: 'Polygon', + coordinates: ['@@șիॊֵથٙᝓֹܣƵૉŮᚑˈࠠψᆧЪ๪ǎ—ʘᄋȜ֨նౠŰಸ֭౨Ҝ੒ʃൌ҄ආÑ'], + encodeOffsets: [[-14856, 68051]] + } + }, { + type: 'Feature', + id: 'ISR', + properties: { name: 'Israel' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƥ˅̣Ŝǫ֓ɂĥɋř—ɛЄŖp͛нഉց෾ʔˢ˶ɞϼǠيŤɆzVˬCþƦɤ\\`·ŕŵhM'], + encodeOffsets: [[36578, 33495]] + } + }, { + type: 'Feature', + id: 'ITA', + properties: { name: 'Italy' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@̟ڋŲʹǭѝٝ̈́ёĞ୩ѐŞќজûࡪĠْò'], ['@@Ԍ׭ş૕ϣÂ΁˫͇ɞ‘২ȓӒҨ¥рʼ'], ['@@ரɏĝЯȬΧڝŪہ̗²зĻʇˠё߀чцۛदڱچLȲȃɽǗݪ̥ؠʩܜѫĔƿƽ̛үϼܳƐΝի؈̷ıѫΗ¹҅ܛΕÝHʲǢҊǼǶ͝ӤʱшΑŀʛδգƴεͶثÆٿϜޑմ֯ӜʿࠪйĮہˤϯŕӝϵΓÕĪθҕńɏٲ̆ʰʙ̀”ʂβǵМ¢Ҽ˶ƢƃА€ǼͺتĿψƚâΆԘšĮdžࠨƤȊ̉']], + encodeOffsets: [[[15893, 39149]], [[9432, 42200]], [[12674, 47890]]] + } + }, { + type: 'Feature', + id: 'JAM', + properties: { name: 'Jamaica' }, + geometry: { type: 'Polygon', coordinates: ['@@֢÷ҀȫƔɯןeʭƗҹƊӑ̪ĶȔΜÎȒƒ'], encodeOffsets: [[-79431, 18935]] } + }, { + type: 'Feature', + id: 'JOR', + properties: { name: 'Jordan' }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ʀˆपͫ࿪ࣆͺ৽Džų၅у࠸࠿ˣƛƑ˭ٙřȩ̡εʵधƆƒŨоഊo͜Ůʚ@Ԥ'], + encodeOffsets: [[36399, 33172]] + } + }, { + type: 'Feature', + id: 'JPN', + properties: { name: 'Japan' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ņ˽ҿԕΉːљțɝӭշʈRЊҬԆӌīΊΜؠǹ'], ['@@́ڡƤсѩף੹Ѓ๏½ணॡ͔֡“غษȃষЃঝe࡞أ֗෗իΝН͜ȶݶՏʒͿ־ߐʶѲՈࡌѢ؞ָာʤ࣎ǣࢠ๺֔Б௾ࡀӌ͜ՈਈƟा΢ՎࣀƸҞୗ}ڻޥࡍbࢁ'], ['@@נǵרΤȈहఝɯ݁࠱೓ָқँण]ř࠴д٨࣌²ʖ୐ʜټন࢓٤˯']], + encodeOffsets: [[[137870, 34969]], [[144360, 38034]], [[147365, 45235]]] + } + }, { + type: 'Feature', + id: 'KAZ', + properties: { name: 'Kazakhstan' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ӕƹ્דο׹̹KɱЊ੫‚ǡێХNÚࡆ৓ؘ෷ßডũߣݶۋ͆ಥ׼ƽðᓗӹᶽљ£יچ֧ɼॕǩχ˧±ȲȶΖDž̊অ˺ϛݮҩɆ…˜ࠊāŽؘ܎ƎܼűƲࠎƭԲ࠿£܍ȴঃσ޵ǭяƌĐўՙ֘دw܉֬ӞِʕǢڢऊࡺӣŀؘჄࣴಾtᇢ׉঺ͻࢼΠ೰j੺ѥʔʠ୼—ɂЊഷ׀߮Цƿɮ߮ɔ؅ֺϬ˼Ḯ̈ШȺᑆ̴ݰΒຢǹ˄ࢉ࢚Ȳઆ˹éҝ߮´ᑌߎ̭ˁ੶٭ሠᒑ҄ѰୄӛீɎҪƯКӟטNjΨΥ઎ŒѾԣٕ֓ۥÿ¡ࡅұϝဟˢ؅ຑїȇဗͱݲลֻɓäӏԭŬу̠ఝĖඃx̧ġ஥ΞӉǧŽӹ൩̂փşȉρ'], + encodeOffsets: [[72666, 43281]] + } + }, { + type: 'Feature', + id: 'KEN', + properties: { name: 'Kenya' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ӾۙיͱȹΕ̿Õšףˑ͹Ǐ֑ͷ˥஻ࡀËӤᵁႌƙĢSࢺʊ;а֌̨ؔσ॰įтЉ׎ԬԈ֬ֆѨƗ@ҽ˺ˡג@੠܋ˈSȠxȄī֖ßʞΔގΚͺ˳ָAܽ॑Xᵣ'], + encodeOffsets: [[41977, -878]] + } + }, { + type: 'Feature', + id: 'KGZ', + properties: { name: 'Kyrgyzstan' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ȊςքŠ൪́žӺӊǨ஦Ν̨Ģ඄wఞĕф̟Ԯūşȏ೛ғ̙ͭઁıͅ՛ࢷŒׇǏߣЇŜȟʇȓཟŵਡ˘࣫ÝĂӜࣴƕ̮ʸٖĉ੾؂঻ѸױȽإ͂۶ծʟĊ'], + encodeOffsets: [[72666, 43281]] + } + }, { + type: 'Feature', + id: 'KHM', + properties: { name: 'Cambodia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@΁Ѭыࢄȣ২ՠۨઘdž߀ťۚ͡Ϟׄݖ̱Ȝ֕Ļ৕ඳ٧τԙࢥÓܫͷ۱Ū'], + encodeOffsets: [[105982, 10888]] + } + }, { + type: 'Feature', + id: 'KOR', + properties: { name: 'South Korea' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ܨযȺխPॷ̓ҥݽljڥΏݳïĥҚƼـχ࢔ذƚֻܘÂúϒ‡͞Ϝצ¢ΨÈŨȮ'], + encodeOffsets: [[131431, 39539]] + } + }, { + type: 'Feature', + id: 'CS-KM', + properties: { name: 'Kosovo' }, + geometry: { + type: 'Polygon', + coordinates: ['@@›ǣŃPĘ́ȩĐdzɦƾȌȪÒŜ˨ư²Ţşƾ¿ŌƅƒŸǎƻŢLĥȳijij„×ȉӹŻ'], + encodeOffsets: [[21261, 43062]] + } + }, { + type: 'Feature', + id: 'KWT', + properties: { name: 'Kuwait' }, + geometry: { type: 'Polygon', coordinates: ['@@Ǭχõȓ˔هשuȽАݟĆ؞߮֠é'], encodeOffsets: [[49126, 30696]] } + }, { + type: 'Feature', + id: 'LAO', + properties: { name: 'Laos' }, + geometry: { + type: 'Polygon', + coordinates: ['@@˚Ϝœ܆ڹܸ¿ٕࠦھٍÎǛ̉ӯyʣƨࢯԅoݬȸࢮ֧ž³ԎηʸǴ̲ܐնøȡ҄wŵ०ѦŬӮڏϖޅਚO͚ܹ՝ɗʉ̟৔ԉۦ঳Ռ݋َ׏ɄץƵ࠿ݕ̲ϝ׃ۙ͢'], + encodeOffsets: [[107745, 14616]] + } + }, { + type: 'Feature', + id: 'LBN', + properties: { name: 'Lebanon' }, + geometry: { type: 'Polygon', coordinates: ['@@ɣ[ýƥ˫D̘ۄмעfˆϘ§Ɛͣқ̓ȷҟ'], encodeOffsets: [[36681, 34077]] } + }, { + type: 'Feature', + id: 'LBR', + properties: { name: 'Liberia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ɗQࡽАޅٖ܏Ң֣ըȪː¬ʔϜҘϺϺǶnɖĨΘԧÇ͵ǐdzʂIǢ͸ʄsŸʓĎНǽύʖɱˊÇΤΙ~ͧăĿÝە'], + encodeOffsets: [[-7897, 4470]] + } + }, { + type: 'Feature', + id: 'LBY', + properties: { name: 'Libya' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ק̷ҿҤ೧βρՄڑϸϻƷ̗ҶήӹؔͬΘñՈńҠÓϦƨۈ¯϶˕ݐШȜðΠėΒ־͔ʶːЦʌ´٦দ́ΜðۮƓ૞ϓЀݛݮǍஆΙࣆйЦɔЖϮț٠˂Ф؄ЀׂŘ଒ǣ˺ϑ̺Iˌƛ࠴ıȲˣ̣ЕżΫɏԯʦڱ@Ჳ@ᶵ@့ॱGYΙ‧ྐ‧ྒࡓҟ'], + encodeOffsets: [[15208, 23412]] + } + }, { + type: 'Feature', + id: 'LKA', + properties: { name: 'Sri Lanka' }, + geometry: { type: 'Polygon', coordinates: ['@@ų࢓ΙʇܵȓЍڜƫீϠ഼׆ұϺסО࢓'], encodeOffsets: [[83751, 7704]] } + }, { + type: 'Feature', + id: 'LSO', + properties: { name: 'Lesotho' }, + geometry: { type: 'Polygon', coordinates: ['@@̆ʩʳУƛ˛ҳſƹˍ̛ċؿ٨҄ՐҖ͢ϼǠξʵ'], encodeOffsets: [[29674, -29650]] } + }, { + type: 'Feature', + id: 'LTU', + properties: { name: 'Lithuania' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ãɊĚɲχƄࢡƨDZ۸२ʴඬÁࠜĊŞǩ҂Ã߲СĀϓۏˏșӃ࣯̓߻NȫʶљĜ'], + encodeOffsets: [[23277, 55632]] + } + }, { + type: 'Feature', + id: 'LUX', + properties: { name: 'Luxembourg' }, + geometry: { type: 'Polygon', coordinates: ['@@ǘȏ³ρʍiȉòĞҼɖŽ'], encodeOffsets: [[6189, 51332]] } + }, { + type: 'Feature', + id: 'LVA', + properties: { name: 'Latvia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@†نЮՆߊ˼ڜعڪhNJ٤ܐƪςĻܢ̷ۚCКȕîС˒ӷ͕ࣗԛƙ߱ТҁÄŝǪࠛĉණÂ१ʳ'], + encodeOffsets: [[21562, 57376]] + } + }, { + type: 'Feature', + id: 'MAR', + properties: { name: 'Morocco' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ԒΥߜÎࢊȃκU͂՟ºԝ̄ࢱɜDZƷ͛ષƙϝ̵ӡñ—ثঙ͍ͩсۍɥ࠻ŷഫاRহŷ@@@p҉Ա˓ȑϡ@̥Ŋ۹ě˛ٻʿÕЁ੕ୟ࣡ˣୋ΅ϗĵ̡ቅãaD ϶͒ɮ˞ѪÃ˶̀פҴՖ˲ƊɞӬp҂̤Բ̪֔Ւ࡬f\\ц͔ްĢڎָтɠۮۮȿਸ਼͊ܢŔѶդ֨ࡈϦخΐ֘࢈˄ԪؤI'], + encodeOffsets: [[-5318, 36614]] + } + }, { + type: 'Feature', + id: 'MDA', + properties: { name: 'Moldova' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ȨŮ֒ĊؤʽΊϞɥÑ˵̪ƏŨΗ̊ɇÏűƾčɝ×ӷ|ĉŜǫãÒƭɱˍƥ˽ɁĝƯϦĘΪςӝԂˉΠʹʠʯĈ'], + encodeOffsets: [[27259, 49379]] + } + }, { + type: 'Feature', + id: 'MDG', + properties: { name: 'Madagascar' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ɠΥȺ։Ɗঢ়ɒϽĉЗƩʙ˷ӰǁʝLjثõΥɵȗ¿܅ͧওб୅ԯཧ͑ୟϛইہȣܻΡӛɊڙ̜ɳѺÇݘ̑ڠù؂Ʈ؄ϰƢD˪Дِø՚șЈǃՌãޠ̊ҺŔՒмŒҶǤ̶Ʋτ\\ӐӎۖԮʦцŗάΦĵҪ׎fԐ˦ϔ̊ί'], + encodeOffsets: [[50733, -12769]] + } + }, { + type: 'Feature', + id: 'MEX', + properties: { name: 'Mexico' }, + geometry: { + type: 'Polygon', + coordinates: ['@@͙݅ƥ؁Õ૷ąЧƤқʺЧǚٳ֎سȞӏ͢бࢾɝΐΙ݄ɾٚĎؼưՊƠՖ΂ȨӬè۸Ƣʖ֬ɚࢶȚݔ‡ԚîȬDZ…ЙҋԁȥԝƸƥűγɁٽɅɎǭcǃY̝ԓƳIJķPŭޥV޷AAӁϛC̺˫̶șĢǹƌ½s˷ઃEЙۅŢƽĭȟqʕ्ࣞџ˘ۇɖҷÓګ́чĉץɜؿDŽ޹ϬؿŠ्ϸ۱ВɃɤҹº࡯ˈΓϦࣗӊсՌȧЦ˪ĈđʈȖɔJ̄˱Ϙùͮ˭ъ݋࠴ࡋڀУԼܝ΄ƷȴŸԲѓȞӹФȽהҍæӣѸϿФ™ˀҍو̓٠^͔؇ͬ˫™ӑɴƇͿƔЕĆف̀΋خׁƒȡŸÓŎ˽Ƭ\\ǜթʮɇǴ̕Նё˨ޯʠρɸϿ²ѷКƒͶϡ̨ϑqƭΝ̱ƫJɛԞջӎ؃РїɈ„ؚŵҖЏʺֿϒŏŇɃɖԭȰӷӦÖÚΊ³̸̼ŽϜ٩׶ӱɶ̱Հ̷վϳڦͿݲॖÞ੪ĞÿǑ౔СኀףဪPژ@DΌผ@̪̕јˇԀσ˨ѭȾҥѢʩۤʥՊڒۊhפͱфֹ̄ӯӸӏȂחɾЃپʹ׮ȁ͞|'], + encodeOffsets: [[-99471, 26491]] + } + }, { + type: 'Feature', + id: 'MKD', + properties: { name: 'Macedonia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ńOœǤӺżȊ˺¶ϴbтˏÒ։DžƒƑƥҕh͋ǿջõΑȴšήń˸'], + encodeOffsets: [[21085, 42860]] + } + }, { + type: 'Feature', + id: 'MLI', + properties: { name: 'Mali' }, + geometry: { + type: 'Polygon', + coordinates: ['@@˰ƶƘӶˊpזɻӄǖ͖ÇŴȈ⁚^ȈךƣļЛ⋈Л⋆౾dᬼᆳᬼᆳȨϿԺʉ϶ƋV՗ठĈFካҟ֗íԭݛƃ଩ï̳̗ա՟IȿLjҥš޻ΑDžʿٳϕŗɍΙǡНŔɱȳūֻڙۡp˳ɭΣÆӥ΋ůȝŁŽάʍĥơhƷʕ٭PɷŴʼnùʱʎ¬ʢĿİdzĉ˚Ǥɐ΅ΚijɴȇȂǙvȫş˕őɱǹΫäɷɈƓ„ɕőƅAµ̮žʾí̽͘ʀǓӔԺ'], + encodeOffsets: [[-12462, 14968]] + } + }, { + type: 'Feature', + id: 'MMR', + properties: { name: 'Myanmar' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ӫηץ›ϥࣥΟƳО݅ՔؗΈօ̭ܵ̃ƹȪу֖ڙĪҷ_ϵ͠ދң޵Сࡷăذʴ٠˯ӼæࣸͽѤ˛৔Ʊਗ਼εۢօуॕ׳ҽöԳȠ̂ਪǫ޾څॺļ̢ӭņ׭ۆÅڰ̊ŵj׾дȦęΤȐ˺Ž࢈ڂȑϐۘ¨ЦҪ۶}Ӕજ׆׸ƱçԬ̎ƸÛ͈ӮÚˮӵξȧ|ٟ“ۙߓۭijঽࢲƔȨޛՐǍʓۣز́ζƷ؞ʔ~΍܏յdẕӓȗ'], + encodeOffsets: [[101933, 20672]] + } + }, { + type: 'Feature', + id: 'MNE', + properties: { name: 'Montenegro' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÁǀηЯÊˋǫÞɽ˞εǖĢƜŬҦ˚ȜƾüɠƟŬśˠě͌ǧçïƽȋɧó'], + encodeOffsets: [[20277, 43521]] + } + }, { + type: 'Feature', + id: 'MNG', + properties: { name: 'Mongolia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ࢮƢ྄ܤ౬Єܴʳ࢚]֘Ͻ࠼‰ௐɁࠈגͿӶࢊࢊश΍ނįনɍLjؿஜΛߐƺਫ਼ŌࡆōࠖЗԚѕެT੒Ƌޜȼૈƒ௸פԌĝѰ˭ৌêХهק࠽ɐ΅ӈńࠤŽ٦̴ڬˏހוğ̗ڏĦ௟ŏןʅ؝։౱͙࠷ѽࡹǞҿúѳէˎ͓ƌˣי˯׽҇গ̑ఽ‹ഫ̇এҋϋʾ৭AఓԜࠥŰૣśჃȊऑmӱԀϣޠԱĢ৩ԼଅŞুƞ̡θ͖চׅڲன̀۷Ѿəז'], + encodeOffsets: [[89858, 50481]] + } + }, { + type: 'Feature', + id: 'MOZ', + properties: { name: 'Mozambique' }, + geometry: { + type: 'Polygon', + coordinates: ['@@لæ৞ʁɖńגt̚ʦԌaऀ͜ڞӤƊϕ“࠷ľ݅ಿƨЫʣ׷͙׍՗Եޏ͉ृСॉ͓ࣕƵוׯ΋ȗí׳ЌُǔӱZʣƪ¦{ࠗƋϷȤƝűΓΗ̗ۗ˳য়ҕρ̳ðΟɊÉíѵّRïϊůϖí̠ƬपɓװГஂࢬ॔ɜ؆ŶúĨӶƉʞ˜غǐ׌E੠ѥ˒ЏÔǹȼϳǰ۫gÅ̼āװᢈۘӚЕɴüͨɅ¸͵ǯϷØסոԱʲ׌ζǰíઊΙ؈̣˖̅]ɽદɾٔ'], + encodeOffsets: [[35390, -11796]] + } + }, { + type: 'Feature', + id: 'MRT', + properties: { name: 'Mauritania' }, + geometry: { + type: 'Polygon', + coordinates: ['@@և־ԗؤ֍ɞГʚҵUЧǽйð˽ˏïҐɺаŀߊģࠨĵкČмɑЎѵδǾˬᾔMǃ௎ȴќ߀øᒸ᪂©F౞Ṗ᎟౽cМ⋅М⋇ƤĻȇי⁙]ųȇ͕ÈӃǕוɼˉoƗӵ˯Ƶ'], + encodeOffsets: [[-12462, 14968]] + } + }, { + type: 'Feature', + id: 'MWI', + properties: { name: 'Malawi' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ɽٓɾથ̆^̤˕Κ؇îઉεǯʱ׋շԲ×עǰϸ·ͶͧɆɳûәЖѵɔʮޮ˄̈LJۢǚڼƞɪɉ܌Ѕϐ࠘ƽǜɵ˶Ϲɾଡ'], + encodeOffsets: [[35390, -11796]] + } + }, { + type: 'Feature', + id: 'MYS', + properties: { name: 'Malaysia' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@àћֈĶ˞ΈȘýӸԓΜ֛¶֣ęϡĆ˿Öӻ̒ɵͤݑe˳׫Éߑخ঵ښįђӟ֚ś̡۠ҜĠؔȃΤƤƮۈρ'], ['@@أ˹ܯƚॱ@̅ॗ͓̇љୟۅǵߑɾЕóөщ՛Òէǟַӆƕ֘؜˽ٮǀǜ܆άǂ৖Ǻ׾ڔЬՐϦѥǮ˺В¸՜œа٪אшڀͼHќыžιֆɻ۬ʧÑ֝͡¥ƮЧ']], + encodeOffsets: [[[103502, 6354]], [[121466, 4586]]] + } + }, { + type: 'Feature', + id: 'NAM', + properties: { name: 'Namibia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@رٌؖ͡ȃࠊȷ،˯ಒm৒ŅҞ͛Όѡۜѳ৘ǽՆۃࠐ»٢КdžԊƞհ}ԄϝŶÐ₮˜׌Е᎞ş໴΂یȒհµͨȍPéӁȍʭC՛͍ͣΎಕ̍سƒ{Ჽࠣ‡BយA᷋ݣѕҋÕՇDŽϗÔƗάͩɰГг'], + encodeOffsets: [[16738, -29262]] + } + }, { + type: 'Feature', + id: 'NCL', + properties: { name: 'New Caledonia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ېԵѨϭ͉ȫҥɪ׹ϚէѼ։פś˶β[Һ˹φ˷ˎɻ'], + encodeOffsets: [[169759, -21585]] + } + }, { + type: 'Feature', + id: 'NER', + properties: { name: 'Niger' }, + geometry: { + type: 'Polygon', + coordinates: ['@@nּॹȐОҿպœϤâТբ̴̘ପðݜƄîԮҠ֘Eኬஈϒᝪ࿸᮪ཾ೨αӀңר̸ȸಯ̾ɓ`ˋΔ˽ǻί͕ၻ«ધੳߋγૉΔ̵CեբmčЃʁµˋƻm֩ंȟ’ځҷٱʔҍ¸ʏşӯ~ӷΧѓq৯ѢЉȵѓb̿͆ࡅ̼ࣗıɕǻşӗʋ͹ÍݣٗӚ̟E˭ʗ'], + encodeOffsets: [[2207, 12227]] + } + }, { + type: 'Feature', + id: 'NGA', + properties: { name: 'Nigeria' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ࢍ̡͉¬͓ȉڥl҇Ղˡ؊שֆكYݍB¶തs՘ǂՊʶʴТԴėɨǔ͸ȍӾ˪ÎݤʌͺŠӘɖǼࣘIJࡆ̻̀ͅєaЊȶৰѡєrӸΨӰ}ʐŠҎ·ٲʓڂҸȠ‘֪ँƼnͬͯğƱ«˧۽ٱɛՙšѧDZȉǝי҅ΉŽыȋ͹ÿΓֽ˱ҽΊ͇aԃӭʑQЍ߷ɍש'], + encodeOffsets: [[8705, 4887]] + } + }, { + type: 'Feature', + id: 'NIC', + properties: { name: 'Nicaragua' }, + geometry: { + type: 'Polygon', + coordinates: ['@@̃ˆϽͺȁ˲Ο˄сϜĤžƒŵÚÒʾ”ŀȔŬRkЮȠrǬOǺɤʜǝĒľƺIJ̊ɴbǦĄQňȪĖ|ƜŹǚ›ȆńɄB̈ŌŜŖ˾iïă§ȉĐ̫ȗ˹ěͷυ®ɏtϙŹĉýΫÌɛǣɋ ɩźƏȩDZʛÈƓǦˉêȕʼnօɞųŇ'], + encodeOffsets: [[-87769, 11355]] + } + }, { + type: 'Feature', + id: 'NLD', + properties: { name: 'Netherlands' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ۦyǀ˳Ƚޓɇ́ԍ@ƘࢡҥȞՏπީǩ؛âѠɲ݀ఆଲΘ'], + encodeOffsets: [[6220, 54795]] + } + }, { + type: 'Feature', + id: 'NOR', + properties: { name: 'Norway' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@᥆ؙઍɣऄՅෛ͵ڵû΢לઃͰಫ˵Ы؝ߟωࣗȮ઱¥णѼԉɝԷ“ūփནƊɝҵ߭Hևױ࠿झಫ஁̨˹̇ͫ࠯bձ޿¾૟՞э˥ধֻۧυӛ֝Ԫဋঁ૫ȟ୏є̛ࣚˇ኶ޞզᕠ۶ဌࢂ໤୦፺ྴඦلᘼ੊ᇎπ൪­౮ۢ໖›ພǘ'], ['@@ም΅๝Ȝ׆ɐԕˎეǚͮ̿ொȍ'], ['@@᪖صᑟͥұأ݅ǁЍۡৣᅵԢނ̘ఽʐ࿕܂ٷڄᘎ̜Ң̋஦\\͊˼௾ˆ੖̋'], ['@@࿮̏ఝҍ᝱ı៙ƖƫɴஹdँϬᣴɼ௞ȫࡘʤᑺȽ']], + encodeOffsets: [[[28842, 72894]], [[25318, 79723]], [[18690, 81615]], [[26059, 82338]]] + } + }, { + type: 'Feature', + id: 'NPL', + properties: { name: 'Nepal' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ÝαŌՕĩͩ۩aয়Ȟ٭ĂӛђଷŊયҼ߉Ю߿͆͜޼ՒϠΒȪڪʳࡔշҾť˰ЕٶǓۀσौȕঔć'], + encodeOffsets: [[90236, 28546]] + } + }, { + type: 'Feature', + id: 'NZL', + properties: { name: 'New Zealand' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@Ȓ΋װ;ʐΡBΝ̹ϳչإїͷ̴З٭Yܗ̓ɣջӋࡗڇϓнʇޝlխˢࣱÐƗ̰Ҍذ੐ࠦժǀ׾͌ܜѰԎѦώظ͈ɆŰҶלϴȆΧ'], ['@@،ࢫlָϜɯŲًڰ˛֨ãӒ͎юĭȯݗʯӫٛjɡʭþαūƻͅҏзֹ٭ͯƟɘΕŨӞ۔˟ҨࣛͲz̦؈̌ƚ٨Ÿլͻ֜vƪБΎڋݔΗת̸àҚұٺɑʂݡ']], + encodeOffsets: [[[177173, -41901]], [[178803, -37024]]] + } + }, { + type: 'Feature', + id: 'OMN', + properties: { name: 'Oman' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ֹ̻ϟªǩȧƉэļ֗ÿĻϯFԽ̻ćХȓǯԹP͡ɃJͻПɷҩĂ֗˳ϱ³˝טٿ൴ᠾ࠾֖၂ϩתv͸ʔΐFΆϞǒƩŞèմіHϖֵҸ̧؞ŋӼƳϜӕɨ˧̞ŃCȉ̩ԃƅɽΟˏ'], ['@@ʼnƳDž˺ʔ˺ľñā΍']], + encodeOffsets: [[[60274, 21621]], [[57745, 26518]]] + } + }, { + type: 'Feature', + id: 'PAK', + properties: { name: 'Pakistan' }, + geometry: { + type: 'Polygon', + coordinates: ['@@تϻʞ٥൨ͻ߹۷ऩůౣȲЫα̖݁̈֩ڴгܑӟ`׳ࠃࡇՃ࡝࢝ࢡউÚऑࢡռϗĪ٧ҾэǘܝᇛD֓֕؛Ɇʣ؀٭٘໻ǁിeஃŝ̈́ঊொѢéϰГƌw݊ߥφͷԔеѶඨѕࡀŲԈŅǞȂגóદĈ܎ҶӈشCĠɼٞŌ̴ý͢ʀ±ԌΦԖ՘Ɇͥ֊ߜɴ̢•͒мΜĩмȣΤӬμࣘǮ८ĮѐƺӨĦ'], + encodeOffsets: [[76962, 38025]] + } + }, { + type: 'Feature', + id: 'PAN', + properties: { name: 'Panama' }, + geometry: { + type: 'Polygon', + coordinates: ['@@˫ʎǵҒȺɢɅÎƿˤлɸοÁǝ̇ͻɁǽ‡ĉǩВҗɯŅŧŭϷ©ơԈŋƛˡ¸ǝ͸·ÈɓİέCǻĩŶªǖìǠƲŲIJǩŲK͸͘ö̠̝iDZͲ›ĀæɴȵЮÔΨɄԜǞ˺ʤҬ·‹ĉҶ…ώơ˜ʧ̈́ɵĹūȜӵǁʟ˓ÒŅС'], + encodeOffsets: [[-79750, 7398]] + } + }, { + type: 'Feature', + id: 'PER', + properties: { name: 'Peru' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ɥљћɋࡅӘñΈရࡊທࣾ٫԰ΏۜƐʎ܅ાࠣ༄ߍီ΅Ϥ˃ؤٷպױͼ˖ϒПߢʼךڢՎIJΓʇȧx̭ΎâͼĝΚщӆΌDŽ֤ԦܶৠͨࣸࢠʾմŝٔɢĂ֒ЉˎЅϴɏӶࢣضĿҨɞ̤ƣԎð٠Ͻթࡣʤoрҁݳ œųۍlj॥ֱÓϻɉ̇ČғԕʍBΡɛƵΔݳҲԝDZί֐µ͆҃ݐuېӸÇ౧ϢĩӄƠܪടǷ˵£ןg܍͟пƮ̵ȕ˯β۹Ջ࣡'], + encodeOffsets: [[-71260, -18001]] + } + }, { + type: 'Feature', + id: 'PHL', + properties: { name: 'Philippines' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@Đ֏ºҽ˹ޑ̫ࡨϽэˎإʉϿ঩Ӧɿ؊ʰЎՑЈˁΑЃثҵƑʖ͢۾ՌʀҜ̈́̔ϝٔɰƎϒרv·ٰڼЋêхÐ̱'], ['@@̟ˡˁՍ˃ʝԫ׈ǦɤɂɾĢԸҨ¸Ɖ֣جߺāߡ'], ['@@ૣߕЬט؈԰Ԏ׊Ѱ࠲Ʈۅևҧѳֿ'], ['@@Ԏʹ՘BgΗϳΣՕʧ‡ϸÒєŽА'], ['@@ʀभ٫ɞj˭ȶԯЍȋ•עʧªƁԘӶãY͈ԣٜ߮mɴ̻'], ['@@ɟܩέоѓ٘ܚ‰̡̈'], ['@@ԮʉʶɖüɇƍΑ˼׻ɛۥӷ˥ƁڳȊڝѾġϊIJਾүăҙ˜ȫēϯٻЮ̵Ѵɍ̯՗ԊރůлȆ¨ΎˀɊʣȘŇ̡бӚűμߨͺˡĔೄ˜ހԘA']], + encodeOffsets: [[[129410, 8617]], [[126959, 10526]], [[121349, 9540]], [[124809, 12178]], [[128515, 12455]], [[124445, 13384]], [[124234, 18949]]] + } + }, { + type: 'Feature', + id: 'PNG', + properties: { name: 'Papua New Guinea' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ɽčε͔ρՔǷ٘ŜĆĜʡʬȏРՑЈ˵ŝɽ'], ['@@ѯçƃɽҟȱћȟѽBۏʔӑɺêʺݬũҠàŶЖŦrĆѽӐÜʂ˼Ҹ̚ġӸԌfǜƏgү˯ԡ'], ['@@ݤտղࢻӖ„‘ω٬ƛʥǁࣀΝġʏ֋ÏȷɔܟĦࡕŴٷ՚ӉҦѧ݀ભπ܇ʇԡˣńإڇ˿һƖࢅ–aᩒaᩒภ׃༊ӓׄїҴхŸӵඔԱȲѽޛěȄ֕'], ['@@ʿɡǁӸȝ͘ϝ˞ӍΪ؇ʚɺȮҒɻ˸ȁΜȫʹΛ͊ˏĶѧ']], + encodeOffsets: [[[159622, -6983]], [[155631, -5609]], [[150725, -7565]], [[156816, -4607]]] + } + }, { + type: 'Feature', + id: 'POL', + properties: { name: 'Poland' }, + geometry: { + type: 'Polygon', + coordinates: ['@@·՜à̂ȹ̧҆̚ɺɤȝђָʘ಼ϴ੒˴࠼ƙÚȱ߸Yਚħ໶^њěȬʵšωɸ͋KͯԋǡʸϳfϏцܻěɽзįރۥɒϗǿ¶ߙ͔؁šЇĒӹǵч̖Ήŕ³¼ϭаر¼ăˀֻĦűɑҗǨÀɴػòЉ˔'], + encodeOffsets: [[15378, 52334]] + } + }, { + type: 'Feature', + id: 'PRI', + properties: { name: 'Puerto Rico' }, + geometry: { type: 'Polygon', coordinates: ['@@јõưǕɋɃمLӫ‡·άŢŬیK'], encodeOffsets: [[-67873, 18960]] } + }, { + type: 'Feature', + id: 'PRK', + properties: { name: 'North Korea' }, + geometry: { + type: 'Polygon', + coordinates: ['@@Şƥ͉ºη˵ʣ˷Ž׽ѣȅƫƧ̓ʝ֓ƏηɥηįġͰƋӈσŧȭΧÇץ¡͝ϛϑˆÁùСdžĵƿʙé‡ǀɑüɥƆɰφȤİõƶɆҒÅƎөĠЇɤۄբऒҌ־׮Ўˁܪ‹ſѺಚβͰҼժӹ'], + encodeOffsets: [[133776, 43413]] + } + }, { + type: 'Feature', + id: 'PRT', + properties: { name: 'Portugal' }, + geometry: { + type: 'Polygon', + coordinates: ['@@̦Ɉ΄ŬɂЫӺDƞłӪ‡ɼуϱɩYٽƍū‘Їγçʹԋɵտ̄ʡřɫ̵̿ê˥ͷɓѷŠџġŸڂÿԬϓþȩ͈äռͰ̨ÒͼǪԎkΤǙ̠™˲'], + encodeOffsets: [[-9251, 42886]] + } + }, { + type: 'Feature', + id: 'PRY', + properties: { name: 'Paraguay' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ͦ৖tҌЖ݌าʔޮ]޴їbʵʞҳÇଛࢲLJ΄ǐ֦ɩǀʣþޓİ͓̼›̀ƌ̢ƳAҥŕӻǑӛƍݏށ١ړƇऻŸࡑɮࠢ౨ťψࡽ͢ਅبۉŸ໵ൌ'], + encodeOffsets: [[-64189, -22783]] + } + }, { + type: 'Feature', + id: 'QAT', + properties: { name: 'Qatar' }, + geometry: { type: 'Polygon', coordinates: ['@@ÇؔɨѲɰĜʬˁdӯǽӳɵÑʫǖ'], encodeOffsets: [[52030, 25349]] } + }, { + type: 'Feature', + id: 'ROU', + properties: { name: 'Romania' }, + geometry: { + type: 'Polygon', + coordinates: ['@@δǶԴġՠGϸȳ˺źبĄɄȠΠ@ʰćʺʟˊΟӞԁ€ρėΩưϥϒƹЂƊϠƟpɏПǹʯĀɻ৥ӳĖ̪ؑফțзɋ௽¬٥ƀ͙ÕʍΊƵƦȚƘȷŀ˃ȋөʔßΌԟȢĥˌҕͤڪǂԖ֮Њ֬ԢǮ'], + encodeOffsets: [[23256, 49032]] + } + }, { + type: 'Feature', id: 'RUS', properties: { name: 'Russia' }, geometry: { + type: 'MultiPolygon', + coordinates: [['@@ࡌ๫కˤԫ்ࠌࡳyוُԒսٱƻ۸Ĥࠊħ࣢Țٌš૴ӯࠜôରަϮͭϴϐŠɔ։̆ߵuࠟΎࡑ'], ['@@໵]ਙĨȒτ୊˚ࢢƧψƃęɱäɉ'], ['@@֦Ƚțؐᗸű࿨޻࠭λ൛ēsࠑͳǩ޽~ٗ̊ૣʖȉθ࡟Ǝॗʼnҗ̎Ǽ̸৓ȥϚЃӉΣ@„Ꮪٛᔺ࠳ïԷ'], ['@@ः©ƭˌੲΖ@ַ'], ['@@ળ»@ָň–܈E௒ʉïŗࡽȩ'], ['@@ౡMႣĤƧ¬ߘͪੀþஞ͏ĸə'], ['@@ॿͩഉø༛ͨȪ˖༨ųᑔɗ'], ['@@ډرᶽzඃȣမղҎ׀૎ǂᕞ™ᴬѽ'], ['@@ӹóᩣŊɟώູɦūҒ࡮Ƕ…Ҟသܒޙĺ፨݆ɩϢሤѺ᪪բ᫠ǀ෴̸࿐Ŋאͩ֟ʻᲗз᢭Џᤙߝఫࠍ೉߱Ǡۥྎۏ'], ['@@ɨгސȲឤYቈЧڬ̿ȽѧङʝᕅүفʟਬşఖɃݴDŽєաτɔഊƂ᧪ƑȴϽ↲ů´ٜᄼƥഄLബѷϮ՝ӹΙੌڋ೔Ϳ߸ࢦഖϙ෢ɦྼʵؤʀൖş؅ޮૐζ䢀ձܐӿᔲٛ₎DŽာƑ۪΍Ĺؙਜʇ૴Ǥ๰vཚǑཪĢะݛਪˎڷ՞ϐώᧆɻფºᝂБ୲ν@”MKઇσઝÖݶҁԄەϲɧĮΏɑɝ༧Ǿ᚝مݛĭ౽ן௛ԧ̱ϣய׊ᔗڇϣ̸ߵΫ૱Ř˓ց৙߽Šͻड़ȋő௣ޭ‹Ϋ۱Δα฽ѕ̅ॡభȳʥ࡟ே޳ׂ̳έ௬ҵለИ୘܀ԆªϾರȊຊ੒คࡺຢڢڮஆ৷ëԍۗᒉइۍਖᓧ˷ᑃටۚԧሙɕಝēÔ؊ಯŶ਩ЭᢵƠ᪏ʟᨩ࿛ủጝ೚ŁаՃࠄȅ՞оईÃௌऍ†܍ځ࠽ë্ϛഉ్௓˯ׇଙ঑ଇॻթӹ૩ӱՉYՇФૻؙſ˩ŝƦKѐіxŦ঴ɛܚܞ̒৶Ʃ֢ࠈ˾ऄ͚̮Ѵݲ൷ʛܯͧ౧Dͻ߄হװหˎ̵ࠖ̉Ԫ̿βԯࡐ̲݇షʢ૛uਯƱۛлҤȥXҩұˑݷࢻRσஅՍ৙̈́োéѯˮԋĞ௷ףેƑޛȻੑƌޫSԙіࠕИࡅŎ੝ŋߏƹ஛ΜLJـধɎށİवΎࢉࢉ΀ӵࠇב௏ɂ࠻Š֗Ͼ࢙^ܳʴ౫Ѓྃܣࢭơ͡çѽԤઍőΧΦחnjЙӠҩưிɍୃӜ҃ѯሟᒒੵٮ̮˂ᑋߍ߭³êҞઅ˺࢙ȱ˃ࢊມǺݯΑᑅ̳Чȹḭ̇ϫ˻؆ֹ߭ɓǀɭ߭ХസֿɁЉ୻˜ʓʟ੹Ѧ೯iࢻΟহͼᇡ׊ಽsჃࣳĿؗࡹӤڡउʖǡӝُ܊֫ذx՚֗ďѝѐƋϥӽ߿Ƒ࠳ࢁކߕĉ֣ࣼফԇ͹ƝɇωÌֿԚɿ†ՅȚʳΈ޵ǮԙƁƥƼଥЖఅƌ܃ƞĹıੱ܂य़̈́ܩӴؒƈۤ۰ҹͪఌ΄uȀݯƉ‚ώѠɼ߼ÖƄ˪ȅҪ΀ѰWʚఉ˚ӭUԯЀ١ƃ੩̐lǒ̗θڟ¤éʼɀǞ՝ӈࢋąʭ¦Ƀȑ̽”ȷ՞ȟ˨NJĀڴ‡͞Ȁʍɢ֥ƪ¼Ʋ΁ƴՃվǸɨĉЂࠑȨѱijšȼࢭɂˑӸíТЙȖάˊʝ޶װӞųƤक़ҬࢡЎᅢ੶ޮӠ͂єగּΆնݳش֢ܜ঍ग़ޢي౿֔ŬךڶüොͶࢀ̈൦ԕᘨȧṺो٤ЋÆ֓टѳ൏ɡ⏷ٔ؟Ńൌ؛ÂϵÆ࡫ઌʯڂɓňРԑΰ՘͈᎖Թ۾Ȳ֣؜ዦࠖޢµ޸̋Ӫ׀۫ԄЪԊءԶᚠˑӔҹ੡ĻNҳڌ˽ಜǼȶ՚ჶАᰪܞي£ࠣԙਬĕ׼˼༾xఢΐफ़ԏॖ֌ࢡӢѪˤ២ʫ୒ʿᴾॣ֚ѰࡡѺ{ǴৣĈˢЌ҅ټ}ː༄ݾրކزǒᕮɛǬұߕڽԺˋ˒חȏଵऒԧέ֕࿫஝०ŭ̢ͮऎɎɞжܮЎөӌϼֈࣿêȫҲڢࡈણۆຒ֦șװмnѴүͧ߷࣐Ƶϥ؄ඤͦლ¬༈ӏݛ۪ċࣆศǞ፾™ᆘŌہѮংւॲx࿎иᕠŐ˪ɲᕂþیȋሴҀ໲aɶδߤΨጤΈ෸˗ଥȷበŹ'], ['@@ⵙ͕ໞીےĦقÃᒈӋʟͿ'], ['@@૽ōݱÛśƏঙƑ࣫ȦӐʾል~࿞ƶ౨XǢɧӘȬߊƐఞǿ͗ŷ'], ['@@ᆳĿᚉʎඅ͎٣׾଩ǔᔆָᆎȎ࿌чኬ߻ȹݯ']], + encodeOffsets: [[[147096, 51966]], [[23277, 55632]], [[-179214, 68183]], [[184320, 72533]], [[-182982, 72595]], [[147051, 74970]], [[154350, 76887]], [[148569, 77377]], [[58917, 72418]], [[109538, 78822]], [[107598, 80187]], [[52364, 82481]], [[102339, 80775]]] + } + }, { + type: 'Feature', + id: 'RWA', + properties: { name: 'Rwanda' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ͬӃµӵʏŁѿÆʱӍԛàþҠŘތԄʎɺȰďԈʸ'], + encodeOffsets: [[31150, -1161]] + } + }, { + type: 'Feature', + id: 'ESH', + properties: { name: 'Western Sahara' }, + geometry: { + type: 'Polygon', + coordinates: ['@@oҊŸ@@ÉeNjEౝ᪁ª‚ᒷ޿÷ȳћDŽ்ᾓNǽ˫˜΢bCቆäĶ̢ΆϘˤୌୠ࣢Ђ੖ˀÖ˜ټۺĜ̦ʼnϢ@˔ȒԲ‚'], + encodeOffsets: [[-9005, 27772]] + } + }, { + type: 'Feature', + id: 'SAU', + properties: { name: 'Saudi Arabia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ʼnΪʩʨÝͲѡ̞҃۴ʁۆׇ׀ϑƐ֋ߠīא–ӾӕञϿ͠ґǨˡӖ°ȎɹѦʕȊ͝زԟڴѓ־лIžҦœ̌ļͲनƅζʶȪ̢ٚŚƒˮˤƜ࠷ࡀ၆фdžŴৢɩబיᛎၕ༠ãݠąȾЏתv͠ܥаȓƠִ̏Λ¼΍ċ˩ł˯ʎɽŐ˟ŲȵʬǕɶÒdž͍Žș࡙͐ᡌщǞDzϪש֕၁ᠽ࠽ᝑ͑޷ϙ׻ࢥϹƕɁˬ͏§߻ĎƷČॹmɫùΉɔɝЭĒΟρˋ'], + encodeOffsets: [[43807, 16741]] + } + }, { + type: 'Feature', + id: 'SDN', + properties: { name: 'Sudan' }, + geometry: { + type: 'Polygon', + coordinates: ['@@śhdмĵ̀џͨĵ؄ĶبϳÌÍȇԍ©Ȭʕðԍңңл؅џđ۹Ӫͅǥđʓџǃ…ǥ࠵@řǦ؃†̡ƝɳîѝӬƟɲ؃ŗɱϵɏݣ˿ǁʳğå ̅ʎÃʼƌΔE΄ӛՀĩάZȰ̱ʜUӦǭ͖̍µĎ̰ɒΖħΐˢʴǫȞɞ԰ϨئܦÏ¥ ZΚॲH@း@Ὂ@ῼ@˔ࠗȁƳŪࡻ্̰͌ȷҠ̳ыӑأƏ˅ʳĉ֑α௿ĚͳƅܟͿࠟԓзέٛč΃Љɽʝ࢟Dij'], + encodeOffsets: [[34779, 9692]] + } + }, { + type: 'Feature', + id: 'SDS', + properties: { name: 'South Sudan' }, + geometry: { + type: 'Polygon', + coordinates: ['@@Xٽűʯѿq˷ӏԨÑюХƨͳϦșӼࣳ֫օԫԇԫϭסFگȟՕȊ΋ɭ݉֐ȥάҵDZϱÆɣƕϗĸԗۚƉˊعͪɅԌΕζ֟ѬS˘ҡͼ֯͠ʴĠ̀ǂɐݤɲ϶؄ŘƠɱўӫɴí̢ƞ؄…Śǥ࠶@†ǦѠDŽĒʔ͆ǦۺөѠĒм؆ҤҤïԎȫʖԎªÎȈϴËĵاĶ؃ѠͧĶ˿cлŜg'], + encodeOffsets: [[34779, 9692]] + } + }, { + type: 'Feature', + id: 'SEN', + properties: { name: 'Senegal' }, + geometry: { + type: 'Polygon', + coordinates: ['@@΍ٺн̚φDŽРמȦќ˾ːкïШǾҶVДʙ֎ɝԘأֈֽžԹǔӓ̾ɿî͗ʽŧ³қâÙģȃk׿ȲЛV༇–ɥħ˥‚ѻƋƏ٢ވkȬŞƮR̸ȘήǯκcζȌǝʐˡƙʻJͧȸˉ_ȍȥࣵy'], + encodeOffsets: [[-17114, 13922]] + } + }, { + type: 'Feature', + id: 'SLB', + properties: { name: 'Solomon Islands' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ɾ˿חN͉ԬԈȯǜ‰'], ['@@͝mԧĎǫżÀͮֈƁ˜ǭƎə'], ['@@ųƹحܰǫԈ˺@̠ڥʹЗ'], ['@@–ǛڅΦҟ̠̿˪ŰĐϮȫېϭȢˉ'], ['@@Ǘ³οȒ·Ί¨ƖԈΡͰ˛']], + encodeOffsets: [[[166010, -10734]], [[164713, -10109]], [[165561, -9830]], [[163713, -8537]], [[161320, -7524]]] + } + }, { + type: 'Feature', + id: 'SLE', + properties: { name: 'Sierra Leone' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ɧØ؁ͺѩ҈Ƨ̬Ĺت҆τĬɺƞǸɶpȜǂڦCɺ̛ǼˁʓƈɗṶɴ´ϹϹϛҗ«ʓȩˏ'], + encodeOffsets: [[-11713, 6949]] + } + }, { + type: 'Feature', + id: 'SLV', + properties: { name: 'El Salvador' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ġȡӡ^̡Ą΍ǘұÀʃǶ~Ů˾ɄǀĢ«IJȠ¾ʜëǸǙʪƇŒœτĴǤÑŘĝÏͳ'], + encodeOffsets: [[-89900, 13706]] + } + }, { + type: 'Feature', id: '-99', properties: { name: 'Somaliland' }, geometry: { + type: 'Polygon', coordinates: ['@@ϛԩד۫۹Mᩧা͍̜̳К̳ҨǾ̖̲҈˚ƹǒΏϜΗкGߊɌࣴĴ݌ʼиÆ̚ƶӎˆKaE΋Aࡑ@ѫ'], + encodeOffsets: [[50113, 9679]] + } + }, { + type: 'Feature', + id: 'SOM', + properties: { name: 'Somalia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ѼĎЊ˾͈FpɵýӧHѳǯ̣ʁࣥЙयԱ੷ܝ௷ܓवধ଩ࡁڹష࠯޳ٕँৱȗѷȍȣӽۚWᵤܾ॒ɰˆբfݠפબšᛜᡄה۬ϜԪ@ѬBࡒFΌLbːhϰŰ'], + encodeOffsets: [[50923, 11857]] + } + }, { + type: 'Feature', + id: 'SRB', + properties: { name: 'Republic of Serbia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ԡȡà΋Ӫʓ˄ȌȸĿșƗƶƥȷȏø̫Тγ͋ʿƗˋĞijƑšϳa˹µƒØĴĴĦȴšKǍƼƑ ŋƆƽÀšŠƯ±ś˧ȩÑèð͋Ǩ˟ĜūŜɟƠȢšŬЄЛ͔ɀτ̥Ë͔́ˉʈȱ͘٢ɚԾ™ҖͣĦˋ'], + encodeOffsets: [[21376, 46507]] + } + }, { + type: 'Feature', + id: 'SUR', + properties: { name: 'Suriname' }, + geometry: { + type: 'Polygon', + coordinates: ['@@৔ǙĞưڶÔࣚɥѩܟâֹͤӽƥίóϩɉΛӓDzЇđ͹öčʏƘǗ÷ǡҙèԡܴōӄˏBωؐƺѠ¯ȤԜɖƈݲ'], + encodeOffsets: [[-58518, 6117]] + } + }, { + type: 'Feature', + id: 'SVK', + properties: { name: 'Slovakia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@´»ΊŖш̕ӺǶЈđ؂Ţߚ͓ɷɓǏ͹dzđ࣑ʮ˟»ȟȡЁĿěÄХŽͭ}ãǙ۷Ļ̱ĠёɌċ̆äńŢȂόa˺ĔxþLj¢ÆȒȖ˜žưʢD'], + encodeOffsets: [[19306, 50685]] + } + }, { + type: 'Feature', + id: 'SVN', + properties: { name: 'Slovenia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ۜÝъȐܾtLjƘƘUǎ˳ڝɟć͹̇đHɻͣh˷ƎƷƙב†ȈúȫΨĞа'], + encodeOffsets: [[14138, 47626]] + } + }, { + type: 'Feature', + id: 'SWE', + properties: { name: 'Sweden' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ࠁוƀԥ೹ڭྱܡؓஃײףߦүޗॅ࢑ȝ͍තӋ޿৳ĆӅڗঃˉߐ۳॔ٓஐφӜּۨ˦ন՝ю½ૠղ߀࠰ä̧ͬ˺ಬஂࡀञֈײ߮GɞҶཔƉŬքԸ”૪Щ಼ֱv಑˴͛ฃʃ'], + encodeOffsets: [[22716, 67302]] + } + }, { + type: 'Feature', + id: 'SWZ', + properties: { name: 'Swaziland' }, + geometry: { type: 'Polygon', coordinates: ['@@ǡύӭěԅҖS̄ɰ̀ĂʔʐÒшƵŰϕðω'], encodeOffsets: [[32842, -27375]] } + }, { + type: 'Feature', + id: 'SYR', + properties: { name: 'Syria' }, + geometry: { + type: 'Polygon', + coordinates: ['@@࿩ࣅऩͬgNŖŶ_ΈȸҠҜ̈́Əͤϗ¨ÿٞȶΌɤȀɤȀ°Ҹ˞Ǐऎɺ҂ƿۖFॴ̀Ґaक़žїԽҡȹĂؗͅ৫ᇵ࢓'], + encodeOffsets: [[39724, 34180]] + } + }, { + type: 'Feature', + id: 'TCD', + properties: { name: 'Chad' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ĎЄաnDզΓ̶δ૊ੴߌ¬ન͖ၼǼΰΓ˾_ˌ̽ɔȷರࡔҠ…ྑ…ྏ¦ ܥÐϧإɝԯǬȝˡʳĨΏɑΕč̯̎¶Ǯ͕Vӥ̲ʛYȯՏƛэͽ؉ࣹ߅ϳ߹¾ʁûĊ̏ѫ̋Σ͟੓͏ȽȐƓhƹɍۛÙƀɪ˅ׄşΐλƜӷӪǼІϦċʂÐҸSқކŒ֐É֐ͭՠ'], + encodeOffsets: [[14844, 13169]] + } + }, { + type: 'Feature', + id: 'TGO', + properties: { name: 'Togo' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ڱdzȇ̎ɡՔãкȆݴɁ̬ăڎD؎ΕѠÖˀ݂kŅѵʲʝ̈̋ŽЭǜǥኝȺׅ'], + encodeOffsets: [[1911, 6290]] + } + }, { + type: 'Feature', + id: 'THA', + properties: { name: 'Thailand' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ݭϬܗeŬڈ݉Káऋґ௯˙ݏÌ؋ն΀ދưܭҶӓԚĭѤѧ˝·ևĵßќۇςƣƭͧ͒ƝжҁӄПЌƏӳǃҲĠԾʚ߬ТࡸҤ޶͟ތ`϶ĩҸ֕ښȩф̄ƺ̮ܶ·ֆՓؘН݆ΠƴϦࣦצœӬθӔȘθʷ´ԍ֨ȷࢭpݫࢰԆʤƧӰzǜَ̊ÍٖڽÀࠥںܷ›܅˙ϛ޿ŦગDž՟ۧȤ১'], + encodeOffsets: [[105047, 12480]] + } + }, { + type: 'Feature', + id: 'TJK', + properties: { name: 'Tajikistan' }, + geometry: { + type: 'Polygon', + coordinates: ['@@̭ʷࣳƖāӛ࣬Þਢ˗འŶɈާˠĐԜȓ‡͛ŴӍࡿBׁØԻϕύĉ̉ǯͩˠþ۸ʩ¢ĞʲғȐα̇ė͹Żūԇj˕ϩ˯nj؋ˑʱĺӀࡘǹض؟ȨɔφۮŸЌҬˌբ૲ȜǩϵŤɹΎv'], + encodeOffsets: [[72719, 41211]] + } + }, { + type: 'Feature', + id: 'TKM', + properties: { name: 'Turkmenistan' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ñۼطŠॣݔڣĠगюׯþσƽ֙|ׯӓ݇NjƻרŪ࢞ٽ˶Ɏֺ֏¸Ȇ۾ߊȵ݈ˎؓԎʉӔڱɋď؛ʿհψ˨ॖǪ֨ɻךڅњ¤ॆ\\Əцܖ̂۾ӦଆѹĜڡ͐ǣࣦžˮƳаࡽ०ׇոЃ࢞Щ૤Ϋwԥʩ€Ѕɤſ̙۽NjǙڥӁʭڏŵǫϟهŏࡩ͈'], + encodeOffsets: [[62680, 36506]] + } + }, { + type: 'Feature', + id: 'TLS', + properties: { name: 'East Timor' }, + geometry: { type: 'Polygon', coordinates: ['@@IJȤܢȌז†ˀŀ͆Ľ̯ɫ࢕ο۳ʋeʬďǔ'], encodeOffsets: [[127968, -9106]] } + }, { + type: 'Feature', + id: 'TTO', + properties: { name: 'Trinidad and Tobago' }, + geometry: { type: 'Polygon', coordinates: ['@@ӚŊǮ‡‘صۭġƯúʒɲiͪ'], encodeOffsets: [[-63160, 11019]] } + }, { + type: 'Feature', + id: 'TUN', + properties: { name: 'Tunisia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ΩພԭͺQȰۉԄóنԮҶȢۚƃߠǠќࣶͺךĵ}ы܊̲ÒljпЫMϱ̆ȽōܫփхDŽқѤaɄЍ͊ſ³٥Хʋʵˏֽ͓ĘΑïΟЧț'], + encodeOffsets: [[9710, 31035]] + } + }, { + type: 'Feature', + id: 'TUR', + properties: { name: 'Turkey' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@஺͗ঐżܤõলѬࣆ¢ߴЭƜ̑ăУزȻͨʕֻʇˀ५ǏʻҠڧЕƙ̏Ɋ঍ňίŽॗŽҏbॳ̿ەEҁǀऍɹ˝ǐ¯ҷɣǿɣǿ̱Ϡ͈͂ԟí۱ȖֿәౣĥڹҊࣟ†ȗΑׇij߻҄ࣻeӽ࠶ؗҰЦٸՓВठߨಒ’Μྀٔŏ৞հ঒ʄർlุף'], ['@@۫ҏ˃Ϻ\\ǦȦĦʺՂХɞࡦ˄ܤőĴ͓ܼ˓Ƶȵি±Ωʷ']], + encodeOffsets: [[[37800, 42328]], [[27845, 41668]]] + } + }, { + type: 'Feature', + id: 'TZA', + properties: { name: 'United Republic of Tanzania' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƚġᵂႋÌӣ஼࠿ϱਙ¸Ӊՠ̩~ɓɳԓ¶ʭÇГ̌Ճΐ̰ࠡǿڝӣࣿ͛ԋb̙ʥבsɕŃঢ়ʂكåɽଢ˵ϺǛɶࠗƾӉʨՕƘͯƘΗɈґ੖ӣҺǗӤČѨƯޞΎ ̨̦͜ѬȺǮS˘ǷȐ·ͨʐł¶Ӷͫӄ̎Ķऄ[ႎà'], + encodeOffsets: [[34718, -972]] + } + }, { + type: 'Feature', + id: 'UGA', + properties: { name: 'Uganda' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ः\\̍ĵԇʷȯĐPوȜ͎²ڬǰϸ͎Ѭ͔ɠ˒̘͵Ŗ¼চΌɮՖȉڰȠעEԬϮЊ׍İсτ९̧ؓЯ֋ʉͽTࢹႍß'], + encodeOffsets: [[32631, -1052]] + } + }, { + type: 'Feature', + id: 'UKR', + properties: { name: 'Ukraine' }, + geometry: { + type: 'Polygon', + coordinates: ['@@̾“ɄȒʮ¥ࢌĆ՞Ӈȿǝêʻڠ£̘ηkǑ੪̏٢Ƅ԰ϿӮVఊ˙XʙͿѯȆҩƃ˩߻Õџɻύڡã֑˕޽«ܣ̻¸ԹЪȭࡨ¼Ǐ̛ँơଛӟұǠȄЂࣽʘƨLjߪ˪ʑȔಯɆË̼ީĻ̷ҧٱةϟƠЁƉϑƺɂĞƦ˾ɲˎÑƮǬäĊśӸ{ɞØƽĎÐŲ̉ɈŧΘ̩ƐÒ˶ϝɦΉŽأʾ֑ĉȧŭΟ@Ƀȟاă˹ŹϷȴ՟HԳĢγǵÍɤұɮǐͺɸɔȀµɑϘބۦиİĜɾхܼДҢɪٲnࡖßबȫڎi͂ŧ̀Ʀɚȝݸ¢ͮąÄцʶȂܞº'], + encodeOffsets: [[32549, 53353]] + } + }, { + type: 'Feature', + id: 'URY', + properties: { name: 'Uruguay' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ղĚࡆٯ̺|ࡺ՟ڈҫӠֱχЉɸӇεՇॉұاǚғěޥΰ֫ԟҬÞլǾȈS࠸ɤࡺȾڦ'], + encodeOffsets: [[-59008, -30941]] + } + }, { + type: 'Feature', id: 'USA', properties: { name: 'United States of America' }, geometry: { + type: 'MultiPolygon', + coordinates: [['@@ũƕȽŤ|ɾƓ̨¦ĤƤƎÍǔ¸þÜe͐ƙƬñƌőɊ̍q¯͟ǵˏſ'], ['@@˭ÑƟǮīèQÀĈî̘āɘŹëĵ'], ['@@ĝ҉|Úĸа•'], ['@@­µÓŻˆŃȒ’ɤŚêÃʐ˥'], ['@@ıĉ˱ƴªÖŸĈȘijȝ'], ['@@Ƭңʼƛז½࡬ƅࠂʹڼŊਖɓ˞Tݨʄ߂̧ࠒ͗ں˩ٶˏĈəȢĉ½ĉɦǎĔ¦ȣǜƅɴ@ŬĹĽƫ࢖ЁǶށǚܳʗӹЁҥȁ̍mēĦť˸Ɓɂ@ঊ҆ࡾƀસмfĐ÷ʰƉǒϜƆࠜHޘAˎ͞ŀàࢶ؄ϜƸ౦N໾BĎȺː¦Φž̖Ϣʲٺٚي˨ə֜ƜώʏAଧռӅƢ˝࣋Пࡷ̃ࢱʝѻӿƛȋSѽˤѽΒsė̬ʦȇãʇ֥ƋЗhةƥλ¥ӥ¥۫ʏఀǂʠǃ୳ʥ՗C|ĺʭɷʚǹ׽ؑ٧×Ɏȁª˟ɀǪҍȼƭ^ͅˏ͛ҿڡûʺֲѕ͎įۦljεǴՑևƀׂ˓˜ߛʊÍĖ̃ŠࡁՕدࢇʝցӱнÁэ̱ţ˭इձӁЍЅӽŻׯƪ׍ˬܗώשLεЊঅ֥—͛ȿԡʣŃЯĺƁς͋ȖѻܢϹٞű͢Ǥ֐ɽҦٻ۲͟źࡑϡƭ¦СϼՃȺोŁݗĤٙÍΏſƲɟaͽǴǓLJō̵Ů́ǃ؍€طѺܻĿ؏ȚԹÏۻȝއح࠳γҝБȕϗUׅ¨ЕDŽ˹͝{׭ȂٽʺɽЄȁטӷӐ̃ӰуֺףͲۉgՉڑۣʦѡʪȽҦ˧Ѯӿτїˈ̩̖ป@C΋ڗ@ဩOቿפ౓ТĀǒ੩ĝॕÝƙіխӚϻĴğʌһ¦̝ɪޭĊɉƌĹҢࠁࡊ۩ୠˆȚχˤٯ۴řۆ҃ҞȀۢ…ܜˍ٢͠ߊĸނĺނƱૼˇܘʓ϶ĸǐ௒˷҂ߋȺɜƇې˷ێᛸ@᠂@ࠜ@ᢢ@៚@ᡀ@ᡄ@᭰@ᮞBაAF͔˴J'], ['@@࠽͋ѕɐŽЀބ̘҆Ÿ֐ÉΤʻܫЍ'], ['@@ԧŽսƾԛɮࠦƞښùĂ͑'], ['@@԰DžԾĒڸɛ࠲őéĝُDZٕǾ͋Ʋݍµȧôº̈́'], ['@@؊ϛώnjහ»¹ȕ౾ƛࡨČᄚ˅ྤā٨ʼn૦Ǝౢʧࣲŝ@@MᷱIⷍࠠ{ࠌɵהρݜցࠈҺࡈ˖Ҁѡ֤·ޒϙՂ׽࡮य़ේ՗xՋұЙҥ͂ݍˌʃܺએںҍߎ߯Ä೷rটʌ჉ࢎߩDŽ฽̜୑í࿻ϬৃΨटǯǦ׏ҫÁঁǫ݉˱झdzťӶϚࠚࣀʶɱɂੱҵֵ֑௅ױؚСߏ׿ࣗΗࡁʱȻωಽѡ˅ϿছΫֽÞ޷ɻ࡝˹ۧ˫෹ʉſƘऀϾࠔʸࣆҠਬĨвΈ୘ԊȈǚب̒ƢْђӸॹʫ˓Ơҕ̧շюɧ̝̽м࠿ͳԩBïԄƲ̮ե̚થLJ܁ЀַȬIӈ٩Ϊ͘ӘۆҸ̚њںÖ־ƇڴМ؎ï٘ʼƻϨҹưج͖ԩWࢻǽʯȃڏȄஏĥ௷ȬΛ͸੟Ӧ୾ΘመШ۔@ŕнᄢŽڽԶਕ͌ױр߫ΨଽˈҺѲ๰‚ਗ਼ϦȨФ࡬ЎࠊĪཪώޜÉಐ҄ౚǭ']], + encodeOffsets: [[[-159275, 19542]], [[-159825, 21140]], [[-160520, 21686]], [[-161436, 21834]], [[-163169, 22510]], [[-97093, 50575]], [[-156678, 58487]], [[-169553, 61348]], [[-175853, 65314]], [[-158789, 72856]]] + } + }, { + type: 'Feature', + id: 'UZB', + properties: { name: 'Uzbekistan' }, + geometry: { + type: 'Polygon', + coordinates: ['@@xԦૣά࢝ЪշЄ॥׈Яࡾ˭ƴࣥ͏ǤěڢଅѺ۽ӥܕ́Ɛхॅ[ᶾᓘӺƾïದ׻یͅߤݵঢŪ෸à৔ؗÙࡅЦMǢۍ੬ɲЉ̺Lπ׺૎הӖƺʠĉ۵խئ́ײȾ়ѷ੽؁ٕĊ΍uţɺǪ϶૱țˋաЋҫۭ ɓυؠȧǺصҿࡗهǰҳN'], + encodeOffsets: [[68116, 38260]] + } + }, { + type: 'Feature', + id: 'VEN', + properties: { name: 'Venezuela' }, + geometry: { + type: 'Polygon', + coordinates: ['@@yȣӱĭ˜ϡYѭυӥ͆ڙδÆȌ؈ʻ̒§َਸ਼΀řІ̎ˆ̞ןל_մҵ˧ݮQ࣌ĔӖϕٞĻҼʾXɄਨ¼৖\\܉ʛ˼Їڦ×ِЯƆڧѬn͢ȣڕӱó̫˾̷ȽƽԫƉjϱɫɱّ֪Őʁ̭͍ऱ̽׿Žʏȣڛɀثņƿýϔɑ‘֝ŜՉ܆ï°ǭ׷ʅĭΣΉƏسȝNjʱٷÅҧѼʯ࠺ɟ̧̌Ȅюм…ȊʅʠǛ֒à׼Ȉ˰ƲҎ̓Ơӏĩ؁®ͻęסܢӥńઉăȧ̊ȷê‡ǬĴ̶áͺȃȂŅϮѡÈɸӮĺ׶ʔ̸͘ʌɈрդƖ'], + encodeOffsets: [[-73043, 12059]] + } + }, { + type: 'Feature', + id: 'VNM', + properties: { name: 'Vietnam' }, + geometry: { + type: 'Polygon', + coordinates: ['@@૭ܗ۫ߍȁ׍٠ࢭ޺ળނԱԞګϪ།ŕ๓۫փ१եۇ۫਷ޱ̧ՠʀ֬دӌܬ͸ࢦÔσԚප٨ļ৖ț֖ƶࡀɃצٍאՋ݌ۥ঴৓Ԋʊ̠՞ɘ͙ܺਙPϕކӭڐҊȴڢIࠈĬܒ҄К̿ސƵƃӛАͿࡎɓ'], + encodeOffsets: [[110644, 22070]] + } + }, { + type: 'Feature', + id: 'VUT', + properties: { name: 'Vanuatu' }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ˣō˭ςŒɤՆӗ'], ['@@ƌڱɥŀǩ­ťɴi٢Дʵ']], + encodeOffsets: [[[171874, -16861]], [[171119, -15292]]] + } + }, { + type: 'Feature', + id: 'PSE', + properties: { name: 'West Bank' }, + geometry: { type: 'Polygon', coordinates: ['@@@ԣŭʙЃŕ˜ɜɌŚɁĦǬ̤֔ś'], encodeOffsets: [[36399, 33172]] } + }, { + type: 'Feature', + id: 'YEM', + properties: { name: 'Yemen' }, + geometry: { + type: 'Polygon', + coordinates: ['@@؉ɥNjύo˹࠷Οഇϻݩףυ±ʥºӭΑ՗lj۷©ɃµǿɛəÕŻɇеlˍœ׉¨ɓӬzҠƍʜǑتʋΊǚ¤đϨĸNJ™ξςˌđΠɞЮΊɓɬúॺnƸċ߼č͐¨ɂ˫ϺƖ׼ࢦ޸Ϛᝒ͒ڀ൳˞ח'], + encodeOffsets: [[54384, 17051]] + } + }, { + type: 'Feature', + id: 'ZAF', + properties: { name: 'South Africa' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ǏŧΣяɻћӇ׻ोࢁףԋًϣ࢛͙ѓ«ŇɷԛŰеDž࣫NJԙĹΏ¬ࡿͩܓƃԱͅϡoΣ̚˳fαϒŸśŏɦLӰ˙֞˔ƴs٤ս޼х܈AF׽તДдͪɯƘΫϘÓՈǃҌÖݤіB᷌ɨűӾߙûԟȈ̏׼ĒрϒЊʨȶДЦȚΠķВɽۂ£՞ȜĐʾƨДҚäʨ͂˪֔ݮغஒؤ΂UОƛ˲Ķ҂ċД஁ɔׯƫऩî̟чƶʏÑāʓɯ̿T̃ԆҕӮĜǢώْQȿؑıۥɑϛֵщ', '@@νʶϻǟҕ҃͡Տـ٧̜ČƺˎҴƀƜ˜ʴФ̅ʪ'], + encodeOffsets: [[32278, -29959], [29674, -29650]] + } + }, { + type: 'Feature', + id: 'ZMB', + properties: { name: 'Zambia' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ІϏɊ܋ƝɩǙڻLjۡ˃̇ʭޭѶɓᢇۗĂׯٍřӍͯĹ̛̅ßܵۓҭխ˳o˗ĬऱĠƯÚOêͧȎկ¶ۋȑչԾ֣یžᦶშYí̂Ű̀ƧЀĪТėʺ̂q¶ʽϾrՖûˬϡڨŝԤˆȌѯ٠ş̴ΧΈҥ٠Që࣠ɱƳח͞ɧƬļࡈƬসȉψʈ՚ɤĶ଀ƚͦđΘɇͰƗՖƗӊʧ'], + encodeOffsets: [[33546, -9452]] + } + }, { + type: 'Feature', + id: 'ZWE', + properties: { name: 'Zimbabwe' }, + geometry: { + type: 'Polygon', + coordinates: ['@@ҁČ˱ĵНƜ΁VՙϞٯźʙՒC̒έĞ्ई˃ӢǛƮ͓ڤलğ˘ī˴pҮծܶ۔̜àĺ̆ӎͰَŚÆ̻۬hϴǯǺȻАÓѦˑF੟Ǐ׋—عƊʝħӵŵùɛ؅ࢫ॓'], + encodeOffsets: [[31941, -22785]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/xiang_gang_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '8100', + properties: { name: '香港', cp: [114.2784, 22.3057], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@™@}ScTʟ@cWuJÁ–]„l¦RLj¼BĄà˜ ŽH@TOHCTDDDHDNAT@PEHDDNJLX@BABALHFF@DKHADBBLDHHFBLEJB@GDBBFBADDB@@KFAFBBJJA@BB@@FFDDADFF@FADDDBJC@AFBD@@DDD@DAA@D@DB@DHHBFJBBFEHDFAN@DGDC@DLCBDDCFDlAFBFCBEF@BC@GDAB@FD@DZJ‚X´HĐMja@Ý`p_PCZ@lLnRGSDMFK|a\\Y}­ƒ§™Mën'], + encodeOffsets: [[117078, 22678]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/xin_jiang_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '6528', + properties: { name: '巴音郭楞蒙古自治州', cp: [88.1653, 39.6002], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@˜@ÈÒĊanwŎV„™Ȯ¦ͪŃĢ„ÜōȂçČéƐżLɆóĊ‚Ċaʊٱ¯²Um»ˌmÈ»V™ʠţWÑůǓ郙ôƑƒğÆīŎī@Ƿ™wô™˺LÞ¯ƨVǪуšĢ™ȘV°wĢŽôk°¯ƒ»΀@Ȃ»ĸŽǔ@΀ƒ͔ôôLɆó̐ÝɜLɲōͪƒƨóŤK@ī@IU܃ÛmȻţǩÝ˹ÛljťǓǫō@Ɲ²¯VçōKͿŁΗÇţ»ƽ™ɅƑLÓŏÅÅɱV@ÝĊU¯ÑĊĭÞLšÞŎJ±̃XȣˌōlƒUÈ¯ŎKÆƅ°™XÑܱnŗġV¯™óaUƒƧUōŁ„Ñ™±„çɲ¥lĉkğ°ƒk¥˜ƒnğţL¯ÝÝUƽĬ΁lķ°@„ō„XÿݯV»ŹLʉÞɱŤĉó°ÝJ™¦ÝKÝ£ţܙÈĉ@ƒxǩUċƑ@ky͓¹™`U²ĉVġ»ğa¯¥ť@ĉ™‚ó@ŻÛÛJƒw¯nó¯ġWƽʩķÝɛwĉĕݼȭÞķō@ó£Å΀ƑޝôȯÞ¯Ȱ™ÆōèĉXǼó@ݚnºƒĸ„ÞVƜĸȚUʶõˀĵĖɱŎÝĖVࢰӒѢ°˘nϚVˌ™ÈmɼĵŦW¤öʊõʔ@°ÈXVŽ™ènŎȁb¯ǫĉ„±Èğ`ġwōÔğ»mVVށ„Ý¥ó@™ĸķô@ššbX„ĶmV²²`Þ_˜˜ɴbͪȰ„ÞWĸÈŌmބškɲŽÈUÆ»n¼ǬVķĸźô¯°n¦ɄǜÈ'], + encodeOffsets: [[86986, 44534]] + } + }, { + type: 'Feature', + id: '6532', + properties: { name: '和田地区', cp: [81.167, 36.9855], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƨ¥šèź٨ΘƑᩄbUࢯÞĕɲōĶĕöʿVʵķșUƛƒÝ„ķm¹Þ™ô@È»ĊWŎçšÅ°ȯȰÝ°óƒÆͿĉ»̽çnƒmɱĵƧºóU™™ƽ@±wóL¯°̻L±Æ¯Vƴķb¯VÇ¥ğ²Ǖbk¥ÇKlÅɱġ@у™óK@™ÇaÝXğţxĉČǫķê¯K@уaŹ„ƑKƒ¼¯Vóaónġw™óÞéU™ġbóĉğÇl¹™aUóğKW„Vůn›ÇŋƑ›ķnʇ»óxĉw™çǰÅw™°ċ„XŽ™„ób±ƒkÈÇJ—ƒm²ţx@ÒݎšŦǺn„ó¼n°ÇbUÒ±¼XĸĠłƽXmwĉºƒzÈÜmnxmx²ĖmҚbnŽƧêUºĊêÆVóĖóUĉ¼ÅĬƑ°ɆƆŻŚlłÞLš¼nĠƒ¼@ޙšÞź@ŎÞ°VšɄɴжϼِ͈Ŏ„'], + encodeOffsets: [[81293, 39764]] + } + }, { + type: 'Feature', + id: '6522', + properties: { name: '哈密地区', cp: [93.7793, 42.9236], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@WnŐÆĶL̦ţºź„lxÅĸƽŚ‚Ʉ—Į˜è@ô²ÞUĔƐńV°¯ĸX¦Ɛm̐bƒ»Ɇa΀šĢ™ƐLˤ™ȘÑnƒІljĸÿn¯ĶaŎ¯ĢĕȘ¯°΂œla¯¥™ǕǔwˤӱlťО̻nŻmɃĕċţUw°WUóƨÅţķ°ýV±óÅǓéʉ¯ƽكéōǖȁÝƏůǕw˹ǫȗǓƧǕVý™é@ĬţLƧôͩ„ɱŎɛK̏ÞɅôóK@²@°ōؚ¼lŦ¯ŰóƜÛlV¼ķ¼ƒ°kȰ™Ű„ĠƒǬ™ŚÝŎmˁ`@ÇÜn„'], + encodeOffsets: [[93387, 44539]] + } + }, { + type: 'Feature', + id: '6529', + properties: { name: '阿克苏地区', cp: [82.9797, 41.0229], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VƚxˌŎÞŎƒ°n„ȂÒ°²VĊ¯VğƾˍǬƨÞÞKÈÞĊVźôɆÞĢèԐôWȲŤVÞĸʶbl‚¯ôn_VÆĸlmÞnVź_ĸ¼Ȯmǖ„šéĸW°°„ĸJ„kʠ¼Æw°¤ÈƒlxɆzČºĶI²ÆǔUš°ô@Þ¦‚ƒUnUĠ¼ŎÓĢxĠ_²ÇĊƒǬ°ŽȂamōšçUÇW@¯öʓõʉX£ĶťnɻšÇUˋmϙ¯˗ӑѡᩃaΗƒœɜ°xWƴUxɃÒˣ¤Ʌwğ„ʉōóÝŹ±°ȗ@¯„ƃ²¼', '@@ō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚lĵšm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘnIÇŃÛÝĊÑĠƏ'], + encodeOffsets: [[80022, 41294], [83914, 41474]] + } + }, { + type: 'Feature', + id: '6543', + properties: { name: '阿勒泰地区', cp: [88.2971, 47.0929], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ɲˣĊIÈ¥‚ÅU±Ċýkō°ƒĉƽó»ĶƽXóʵʵ™ȯƑÅȁɅ¯ĉ@ÇሗK֛@@ˤV֜ʵрƒǬVĸƑŎ@ƆϯÑóŽķ@ʇ»ķ¦έmlÈĸĊX¼WźÛÞÝѸ‚ĢČþ„ĀĊôάVö¼ĊUƨ°°èŎČUÜÆóôVôô޲êȘlˌç°`n²ǬŽĊaš™ƒÛ°±kğmm»š@°ÝɆÛÅÇVaݍVm͔ğôÝÈb‚„@„ƒ™n¯š™ÜUĢÑĊ@źīżWŤÈǖWôŁÆI²ÓƨL@ŽĊX„mmÑÆ»ȰÑkƒĶō@ý°m—¯'], + encodeOffsets: [[92656, 48460]] + } + }, { + type: 'Feature', + id: '6531', + properties: { name: '喀什地区', cp: [77.168, 37.8534], childNum: 13 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Č@°ƒĠ„ôÓô@Ŏĉ@Ƴĸ@Ť£ĢlVôWVóřXĉŤêÞ@ƐÒĢÑlèÈV@šĠIk°ÆŘ@ÈÈĀ@ǶťÒğ@š„@ÒĉlŻ_@šƧĖÅĬōÆ@bźÞnƒƒlVœÝĬšWƼʇ„ƒÝÅ@ÇÅÈwWóĉ±ğz‚ĬČƨƂÝIĉݯbÇÑĉƒ¯ʈV°xUŰĊ¤ƪ_ôÓɚI@lȚXȮ™ŎlɴȘ՘š„¦ɲÆʈ_ɴŽźŽôÞʊŎĠƒɆxˤ£ɄÑVwXƳ¯w›ɛŹ٧™çƧ¦ōƒُ͇еϻɃɳU™Ý¯@ōÝŹš™@݄»mğ™»ÝKkŁżřɅƅƒ¯ÆīĊ»ôVôĕÅUĉéV¹ƨém™anѱĕnwmwnÇۄyĉ¹ŹlŏkĵèķmōÞġKñÔċKÅèĉzƒŽ„ômxȗÿƿI@þÅČÝKݰ@¼ÈVºš@Å̚ÆUċłn„ÝÆǕČĵJm£ÝJ¦@ĊƒxV°ƏLċ¼ǩ™@™m@ÅĢómÇÆğ¹Çš™ÆšĖÞKšx„wô¦ÆÑÆL²ÆƾŽU„ޱŚÅŻĖ@ĬŤÈñ„@ǔÇx„Èǃ', '@@VÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁVé'], + encodeOffsets: [[76624, 39196], [81507, 40877]] + } + }, { + type: 'Feature', + id: '6542', + properties: { name: '塔城地区', cp: [86.6272, 45.8514], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ήnĸ¥ʈ¼ĸ@ôϰÒ@ƅƒōUķƑǫʶпU֛܃LګK@΋ĸ@Æ£ÞġÅĠċšLV݄»™@Å»Ýnm¯š»nŻĊ@nķŃ@¯ómóÛÝǟ¯aÝóȭ¥ƒšōUmxĉbÇї@›bUº¯X¯ÆƧbVÒĉnǕw¯°ƑŽV„—ŽÇ@kx±Uƒšɱn™ŽÅKƒ„¯ƒĠǠU°ɜL@°ƒxnĬ‚ĀŋŎÇLƒŽğšϱÞέƜkôÅĀǕłƒĸĊŤUṴ̋„¦ȂϰÜɨ°x@°żǠÆƈČVĠ»ČL°ÇšbĊÑ̐óÞlĶwބɆVÞwǬxǪţȼÜLŐĶˢ@', '@@óKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°ɜÞʊĠğŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒašƒċƨbš™Vğ—w›ġ¯@Uōa™ĉÝJğÑÆŎkŎÞĀlꃦ'], + encodeOffsets: [[87593, 48184], [86884, 45760]] + } + }, { + type: 'Feature', + id: '6523', + properties: { name: '昌吉回族自治州', cp: [89.6814, 44.4507], childNum: 7 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@መL@ȰĊȂɆƒÆĊ£„ťôWÓɆbĢÅŎƒÆ¦ČÑW¥°ķU¯ƏŃVē±Ý@ó—ç˜ĭɃƾřÆķkwʃŤ¹ġ¥ĵKŏÅXmˍщwǓ¤Ƒ@wóōVķ£ɱšġôÛa±Òȁ„óèţIVŽƽ¼k¤ó¹ġJmx—»ÝUƒ²™@ÅÆƒĸǫŎ„ĊmŎǬ՘'], ['@@Þô°bÞǠôÜôn@°ĸń˜Ƕkłƒ¼UޙKğȂÆÝĢŤķ@@ΌڬL܄K@ˣȂ˭lĉńW¥ĵVÆý@ŃÞēUŃȗƅ@ŹƩǕĉ»k»Ç™VğóřX™ŻKƏŽċêȁèÛŎġƒͩń']], + encodeOffsets: [[[90113, 46080]], [[87638, 44579]]] + } + }, { + type: 'Feature', + id: '6530', + properties: { name: '克孜勒苏柯尔克孜自治州', cp: [74.6301, 39.5233], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ˎǫĠƽ°UUĉ¯±ȁÑmƒ„¯Ýōˋō™wUű»ÅƑ°ƒȘ@²¯ɳʇ`ɱŃ¥՗™ɳȗōkȭšșW@kəJóÔƩ`ĉ£Vů¯wU°ʇĊ„ÈÒ°aĊÞÞJŁċƧīĠyĊ²XôÇxÈÆÆ@„ÞʈƒÅ»™XÞīU›Ƒkm„ŹÝ@aŎÅÆīƨĕ@™ż`Ċk@љƒĠ@ŦÑ@ǵÇÿ@ÇÅŗl¯ğJ@™ÇUkçġÒƏÑÝ@ţéWĊôŚUŽóXUġkţ¤ķ@@ƴōĊó@óÔğƒ¯„ċ@@Қ¤kôˣŰ͓„k»ƒKX¯ċwƧôğɐšÒôIVƙš¯UķǬķšnŽ™¼ôb°ÒȰVVÈÞ°ƒĸó¤V¼°„V°²êƒlĢ҂Uƨ¦ôȰƴĊVV¼ǖIċĊ„ÞɜéšnČW˸Ǹša„řÈw±īšçĸ¤ĊšôšwšŽĸU̦˜éǖĬ„Āô¼lÞkÒ°x°ƆÞx„šÆV²ǔ»„b°wގȘ¥°n„šŎV@°„„ʠè‚ŰȂb'], + encodeOffsets: [[80269, 42396]] + } + }, { + type: 'Feature', + id: '6521', + properties: { name: '吐鲁番地区', cp: [89.6375, 42.4127], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ôK„ĉǪa²¼lÜô@ʠê°Ĭ™ôȂƒ²ÑÜbĢóɲ™ĸ¤ŎUô@xƒŽǔ£ъxˎmƒÈÛ@‚_nĕÞōšř„ǫƒğšůlȯ„¯ĸ»U»Ükôƛ°ůkť™»Ŏŗ@¯@±͓óͿ„Ǔ@ķȁ¼Ϳ@Ƒ¼¯°ólġ¯xȗUġšƑ™ǩÒƧUݰ˹Kóššx@ǸōĬÅĬƑĠ󃄚ǔêÆ°XÒʟŤUšÇ¼ˋnn¼±V²°ȂUŌݜbʟǔɅô@żǬaҎÈ'], + encodeOffsets: [[90248, 44371]] + } + }, { + type: 'Feature', + id: '6540', + properties: { name: '伊犁哈萨克自治州', cp: [82.5513, 43.5498], childNum: 10 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ĉ„ÆŘȁ̐mÞ¯ĀX°±¼@ƾ¯ƴ°ŎÝþŋ¦WÜÞbȂĉźUœÇmwVUȂóô@ȰÝ΀nÆJn™ƾ™ʠ™ŌLČóǪ¯œ¥ǔaǖšŌaôÝĢLšx„ƒÆLšɲm„™²VlwÈ@˜Uƒƒ°¯ǖxĊmUÑƨa°Å°WV¹œa›ÇɃÈm¥°¯ŹóĸķǫUm»Å¼ÇVɱ™l݃ŋnķÇÝX¯ƒͩÇɳa——Ý`±_U±ĵnWƒ™a@™ĸóšķ™¯ǓV±ÅĵJċ¹ɅykwDޝ£Åxʟ»ƒlķI¯ƒX¯ķ‚™êǕƒȭnķ»Ź`±„kÞ@Žš„Ýô@Þ°xšŤŎIƨÆUxōš¯²ǔĬǬlUŚ'], ['@@ÞĀlꃦ¯ĸŤKޙšƒċƨbš™Vğ—w›ġ¯@ţƽJ']], + encodeOffsets: [[[82722, 44337]], [[86817, 45456]]] + } + }, { + type: 'Feature', + id: '6527', + properties: { name: '博尔塔拉蒙古自治州', cp: [81.8481, 44.6979], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ήƛϲÝĠ™„ÈKŌōÿmī„w@¯ɛKV¯ğǟ°Ƒ™wġKóÞŋbǕ™Ǔb›¦ǩ°ċôŋKʟšƽšmšÅImŽͿŽȯÞó@ȁôUVnx›ÈŹVȁĊÝabŻ£¯°l„óxȂŤĸkĊšÞyĊêĊmĢxV„ƨÈŽĠX„ŽΘÆĠÔź‚Ɇţ°LXƾŤŤb'], + encodeOffsets: [[84555, 46311]] + } + }, { + type: 'Feature', + id: '6501', + properties: { name: '乌鲁木齐市', cp: [87.9236, 43.5883], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@šŽWŽôŚUĠȚl¼Ċ¼ƪǖ@źȘƆ@ýlܚXVŘޙš¦V¼kĖó҃èkĊȁˮ֜@ǫ՗nōƒĉǬō„ķÆÅš@„±ÞV˜¼nwĢIôºl£ƾ»UŤJôçšó¯īʟéó@kÛ±»ǩbƒĊóLҍÇǫb@ŻɆóʠǓ›aŋÞȁVʉłĉbĉɅô'], + encodeOffsets: [[88887, 44146]] + } + }, { + type: 'Feature', + id: '6502', + properties: { name: '克拉玛依市', cp: [85.2869, 45.5054], childNum: 2 }, + geometry: { + type: 'MultiPolygon', + coordinates: [['@@ɜÞʊĊýVaŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒaݚţL°ķóKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°'], ['@@ƾIŤ@UUwōa™ĉÝJğÑÆŎkŎ']], + encodeOffsets: [[[87424, 47245]], [[86817, 45456]]] + } + }, { + type: 'Feature', + id: '659002', + properties: { name: '阿拉尔市', cp: [81.2769, 40.6549], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nIÇŃÛÝĊÑĠƏō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚lĵšm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘ'], + encodeOffsets: [[83824, 41929]] + } + }, { + type: 'Feature', + id: '659003', + properties: { name: '图木舒克市', cp: [79.1345, 39.8749], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@VéVÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁ'], + encodeOffsets: [[81496, 40962]] + } + }, { + type: 'Feature', + id: '659004', + properties: { name: '五家渠市', cp: [87.5391, 44.3024], childNum: 1 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„çôÑlĕU»™¥ÝšUŗ™WkÛ@þVńÝĔ@ńÅþĶUX¦Æƒ'], + encodeOffsets: [[89674, 45636]] + } + }, { + type: 'Feature', + id: '659001', + properties: { name: '石河子市', cp: [86.0229, 44.2914], childNum: 1 }, + geometry: { type: 'Polygon', coordinates: ['@@lŁ—ǵm‚ĉ@mż™¼n°ÞmƼš@'], encodeOffsets: [[88178, 45529]] } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/xi_zang_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '5424', + properties: { name: '那曲地区', cp: [88.1982, 33.3215], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ƨʔĸbܺÞwnxźbÞ°ô@„ĶŽĸIȼĊJŎÈôUšÝƒ¤ǔLސŎ@ĢŽȘblƒôL„ÇźçȤôLš¥ÞIÞ¯Ķxʊťƨ™ƿÑĉXVķŦ¯ȂKÇǕšÑ¯IUš£¯Óƿ£VĕōÞÿÆwƒƑ„£ǖxÞĕ±ÇÝaUÑȃU¯‚UōÈ݃wWŁĵ™±Ý„óĢÿ°IÞ±mÅ̝mÿ„¥°UnÑŤĢĕĶwǬŻͪwŎ¼źÇĢ„Ġĕˎٰóƨ¼Èa‚m@¥°wǔ„ǖ°ŽƨÇŤœšġƨ„ŎŃôbÈÛŎĊ°@Ġw²ÑÞJƃÆb²ƒ°êĊUނlȲƒV„ÈKĊÒĸĉ›»ÅôťUÅǃk¯@ǂÑklǁÅl™Ģ™VÑóƒ@°@„ÛĸƒV¯ƒÇĊ™n¯Uĕšƽ¯m›¯b™È@Ò°Ĭƒbĵ›¼„‚kxķýÇJk£ÝaUÑÅóĶǟkÓʉnĉƒÝ¼Ƒ„ó»Þmn£m™Č¯@ƒȮÿV¯ĸƒ™k@Ýówƒ»ğ„ġ±ǓLō„ƒšV¼Əèķĉ™è±b@Òţ„UÑóakƒl£™Ó@¯L@™ÇlUóȁš¯aġÈÅĕÝLķ¯Ė¯@WĬ—x‚ÒÈnW°ţôU²ǓÓġ²V°¯ôƒǔÝL—ċšk™š»Ý»Ýš¯ÞƒVƒwۄÝÇōͩÈĉċ»ĉm¯£W¥ţKkóġƏW@¯±kōŽÈ›b@җšÇaƒÆ¯a™„ƒkóŽÛƒÇ¦Ýa¯šÝ™ĉ@ǻۄmƒǓxķƛ¯lVĀÅÞġb™™ÇJUÅV™ĖƑW™zō»ōšƒW™n@è¯ÞóVkwƩnkźÇބҙޯƒƒýğÇUxÆÈnè±bĉÝ»ÈуwšwÞ@m»ÈV@ýÇ°ķ™xƒa„ݯXċ¥ƒÈóW@ôkxlnxVÈóĊkŤġ¼@°¯ŰƑL̻۱ŎÝV—Þ›VƒÇÞŎÇakƞ‚š@èğŎĸżšƾ°ÒšLÞôĠKȰĖźVÈÒĠ„¤™VôšŽU„ÈþťL@ôǬÞlÜÈnÇÒUŚ™@šĊƨW°™°Xƒ‚@ČÇþ„ƴĉÒķ¦@ŽĢôWĀôłUÞĢǬ™ź°¼š@ƒôV°„bUÆnzm¤ƽĸƒÈ'], + encodeOffsets: [[88133, 36721]] + } + }, { + type: 'Feature', + id: '5425', + properties: { name: '阿里地区', cp: [82.3645, 32.7667], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„Çƾķn£myVŃaU¯„ó™@¯»šŹġǫVÝóŁXÿġó@ĸ¥ĊуƳÈý@ċ„Wš¯X¯ĉƧ‚™š@VřÈÑÇmkÛǫÝ@óŦKÇýVƒ™U󚏃£ğÇÑŹUȯĕğLÝó™K¯Ñ™ƽķŻĠō@灙lƝÈbƍÈ݂„œU˜ÝÞU²ō̼ůƒK°ů@¯UK±—ĊƧbōÇmçÈġƒóšÅób™™źóš¥kól™ç™KôĵUƒÅ„VŃķ¥nÅŏm¯¹Å‚™»@ÑǍóxÝkʇȤU¤ķb@ƒ¯ĊÇx¯ĸĉKm°šĀk¦l„„KnĬȀƾÛ¦WÆÅmNJĉ°ōUţ¤UšŎ°šŎKÞłÆ„Ǔ¦ƒÞ™‚™„ř¯bmUÝl¯Um™ğl¯£șwŎǫaÝnĉ̓k@¯™K™šō»ĉn™aÞ»ťnkml™ĸ¥UŚŻkÑťƒĉV™ôó°LôīĠU„ÿĉǕÅz±Kƒ¤„²ō¤¯Ė¯UÝ¥Vĵ™óÈťÝwķșÑk¤ó„™ƒWýĵĕ™„VĠƒV󍃎Ǔ„ķ°k±VU±ţ¦UǟÝřJVљ¥XUċUŎlÛƆǕÆȗƆ¯wŏÞÅ@™šĉl݁óŽƒÒ™nUôńlxólÝôێ±™™LÛôÝL@‚ġ¯X¯ÇUżóa󤛼XÒġŎóLk¦‚ôżĸĠ™¼™KġƆô¦„ÆƑÔĉ͝ImÒ°¦n°¯Þl˜ÝČn„ƒÒšKĠޚĕkƒlýƾťœšôI‚ĖŤÒnƜm¼¯lnżóÞ@Ůó¦™ôƽĖċŚn°Ý°ôÈUƜƒblÞóŽ@Žǖô°UÈƆ°X„þôŽô‚lѢšŽ²Ėm¦°š@¤™XŽĊblܚzkºƒĖmX„šŎWVšóÞn°lĠxȚa°»żLźƒ„b@ưXĠÝȚxĊĕŤaȚ‚°È@„„@èŤ¦Ü¼œW˜ÞkŽÈ@V°lŤkŎ±²¦ƐUšlj°aÈÑŎb̃ŎbÆ¥ÞIȘlššôVÈU‚™šb„kɲĶn„mnXb̼òƾĖŎ@̐ȂÑôÓĠĖʊšĊÔ'], + encodeOffsets: [[88133, 36721]] + } + }, { + type: 'Feature', + id: '5423', + properties: { name: '日喀则地区', cp: [86.2427, 29.5093], childNum: 18 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ĶĖXþš„ôƒl£šÒĸÇÞxÇŦšôUĶÞ¦°V°ĕŎ£ƒ±„£²LÆyĊǖƒĀğVóĬ¯KóôUš‚ĊŦ„lҙżVÆķ¦kšlnŦmݼšbĊmŎ¼š™šL@°„lĊĵÞmǬbƍȚx°¤Ġknš°VÞkVn°aƒŚš‚š„Ýǔ¥ÅƒÝŁōL¯™ōV™Ť£ŎVĊ¯nljƏXÅÜ¥ǿƽmīƒLkƒl¥™ÿn¯ĊL°ķÈw°ĉ@ƑĸaV£ʈȣÞlôwȎ@Қ¼Æ°ºŐnmÆĸ¦UńƃV„ó͚LšèôkŰlĬ™¦Źôššôa™Æ„ôÇĢnèŎÈƨa˜ĉ²‚VLĢ»lţôĉUǂwkmlw@óôX„ÇȦ°WƒÞ„b‚wĸšÈ¯@þÇUn¼Ý@™x„xÇńÞ¼Ċ޲amçÅÇVwĠȄþ°„šÝƒÑÈÝlŹƪmlxôU°Ý@çšm„XŎ™Ŏ¼šyƒXšĕÆUVÈIššĢaÆÝUÿ°kĸƜǔwn„܃ȼĊ@ޚ°™Þbȥ܄ô„lšƒ°b„ÅÈb˜™@ќa‚ǯUU¯Vġš»ƒ™¯aV¯Ç°Å™mnÑŤçǬVǬ™±ĉ¯¥Vĕ¯Ýk£˜ō—w@±ġÛ°ÇVїƒ@ۘa@ČL™Ƴ™„ƒÇa¯¤ÝIĵ¼U¥ƿōķÅţŻókÝóĕ‚¥¯™U»Æ£X¯ġŃÛkݰV°ó¼¯èWôÞĖ„ȎƒŽkĀƧĀówm¥¯JŹÝJݙōVVŁaݐƑ@ƒ˜ğŭǂ¯_ƒ˜ĵ—›VnxŃón›ƒĵxÇĖĉVÝÈğV™Ò󃯐±Żĉ£ķÆÅL™Ljĉý˜ţۃ¯VƒnV¤ÝÈ@°ÅÞݤ™ŰğŁm¦ÝxóKƒ¥ɱÈUĠôêVôÛ¼ÇWÝçĵaō¦óĖƧlÇĢƑŽnŎDŽV¼¼‚ºÛ@m¦ƽ„ĉmm¯ÝKÛç¯bŏłĬ™bƒ¼ÅLmŽ„xť°ÅU™šÝXkŽÝmĉ¦W„¯K„ÒknÝaV„Ýè¯KɅńÝKnÞ¯¼'], + encodeOffsets: [[84117, 30927]] + } + }, { + type: 'Feature', + id: '5426', + properties: { name: '林芝地区', cp: [95.4602, 29.1138], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@‚VÈłVôÈk@š°K@ŽšÔk¤l„ôbVÒŤƒ@ѲašçĸĊƐçU»„™ŎƒǔK̲Ġƒ„¼ôx@ޚlƨĬ„Ul¯ÈLV‚šÞJ„°Ünʊ„wÜbXê‚VÞ¯°ššanaU°wƼɴÑWѰmÈýÈam¥Þ£Ť@„¥ôblÞĢ„ź¥ôxÈÅmݚ™ƒĕŃV»ĉōŤōnóƒ»ÈīķIUƒĠѰġĸLÞ¯VÒÆ‚@bš¼WôÈ@V¼ôóŤKÈÑU»šwVǫżnWÒÈx™¼‚lŦ£ĊōŤx²¯@ƒÆƒU¯šçÆ@„¤°£„é°k°lšůÈó@¯ŤÇÈĉƒkkÿó¥ÝXķљÜ@ÒóŚÝ¯°ĉówÇ±¦ÅJUÒĉĀķw¯°m˝„±akxÝÅnƒ™»lуK@¯lU™¯UVѯóĊ¯mōğVǓƅƒÞƒWÝÈÛ@ƿô¯ÜġzÅþ¯ólmôʇġĊÅUͿřŏȁˋŁóÇˡōƧƒÇb™w°Ķôk¦šÒƒnUþġҙÔkǔķèó@ƒ²@ŘōńĵyƒzġaݤÅIƒ¤Ƀť¦ğѯ¤ķbóš¯ó±ŽU²°¤ČÜVnÈÆ‚„ŚŎ°ôĢ„þÆzèVĀǎĀǘƒXŹÑ¯¤ówċķk¦šłUÒġzÇ@ƒ™ÆÝx@²Þ@Ƥ„Uô¦Uš°x„U'], + encodeOffsets: [[94737, 30809]] + } + }, { + type: 'Feature', + id: '5421', + properties: { name: '昌都地区', cp: [97.0203, 30.7068], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@™ŽVĖm°ĉš„ÈU°ķ„ƒÜ¯@@ô„UÒġškš‚ÆkÈlށÒ@Èl°È„VÆóŦƂœ¼‚a„ÅĢ™Ʉwnōw@¥Ŏ¦°ŹÞmVš°wnÿƒw„wÝw@¯šmÞŗ°wĠ˜ĸkÞğlĔ²¦°@„ĕĸwVóšal@nĢÇĊn°@¦šŽźUXçǔůĸVš™ÆK„ÈÝĠš²ÅĔô@lšŽÈ_m˜„zǖl„šaU¼ôwV°¯¦‚ĬÈa„l@Čǎ„¼™„nŽ˜I„xô»ɜ@ƨ¥ɆŁ„ŃǪȁkƛƨȍʊȡóĭ›@—ÈÇVƒůރĸƅmēƨť™ÅÈʉVǵ°ġVŭÅɧ°ÿnɛš£mƒķ²ŃóÑUĉ°mÇ»¯@mxUèţ°ȁÝç„ġU¯ÆÇţÈ@°Çô™Ű¯k¯lƒê¯¤ƒ£Å@™èV°Å„@„±°ţwĉŎť¤kš»ÇwXÑŻmUǬ™xV¼ÇÒţLóôU»Ç@X󙻂a@ÿŁUÑݰķK¯ĢğÒV„ĸJÇĬ„¼môţŎĊŎU¼Æ„„Ė™šnÞÇÆówʦġƒkÝóaƒ¦ţ@ݤn¦ÇbÇþ¯nXÒɳÒÅ»¯xVmb™b¯™Ý°UWéÛaƒxʉÛmƒ¯ÝI™‚UÇKk°ƒVƧīķ„U°ȭĀ@„ċ°nšm¤Ýnô¼ƒƒÞ»Ċ„ʊmlÔĵǠÆôVÒÞbl¤ÈIĸþlwƒœ»ĶŽ„a¯ī@њǰanœƾ°'], + encodeOffsets: [[97302, 31917]] + } + }, { + type: 'Feature', + id: '5422', + properties: { name: '山南地区', cp: [92.2083, 28.3392], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°ÞU˰¦²ĊôÇÜLǖĀɜŽȘŰÞLĸźêÞ@UÜUŤ°ɞ¯Ü„°WŦĀmŎ„¦ĢyVљŁl¥Čĸôx°£źÒ„Wȗ‚ÿȍUÿ‚çÅyƒýóġō¯ƒřŁmÇÛUċޝ£V±²°ôô™ĸa°£ĠÒŦ¥ɄŽ„£ÆJÞ£Ģb„yĶzŎŃ@ŗ„±ô@ĸçlǓšÓĢÑVý„m™Ñl¥ĵó‚¯̻̥™ƛǫÝһÇƧĉyţ¼ҍēVĶĉŎ°ĸmšÞVÝĸ™ÒÛaċ„ó™ŹĖƒèÈÈl¼k¤ÝX@`ސŏ¼Æō¼ÇçĉKUÝÝ£ğ¤@¦ġl¯Òġĉ¯óš™móxÝÞğVšƴċK@—b@ܘ„UÒ¯ÈĢÜ@²˜x—Ŏl¤'], + encodeOffsets: [[92363, 29672]] + } + }, { + type: 'Feature', + id: '5401', + properties: { name: '拉萨市', cp: [91.1865, 30.1465], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ŏ²l@°‚XĢƐlôŤLX¦°¤ĊnȼÇĊŎͪÞÈ܃„x„U°Ýޙ޼™¼lšČ™˜ŽÞK„Ǔ°óU¯Ģ±ǔÔV±ŤóX¯ÇmÑ˜wXī°@°ĕĸÞKÆĖĢǰbȂ™ÇفUƒV¯wV™ó¥ƒVÅ£Ý@@±ÞwšÅ‚„È@ƒ¥nōťÿ¯Xۃɝ°ţ¯ÛVVÝ@ŹéķÝKȗůɛǕÿÛKóÈǫšǫUţèmҚn¯Æ°ÈU‚°b„š™¼UĢV°°V'], + encodeOffsets: [[92059, 30696]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/yun_nan_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '5308', + properties: { name: '普洱市', cp: [100.7446, 23.4229], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@U‚ô²‚a@޲²Ķ¥œV°šĶ²bl¤kVxl‚@œ°‚ڲ@˜„„y„@ô¦¯„@xƒxVxU„VššbVšÜm¼Ŏ„„ĢmºXXWÆ@œšmŽmXU°ÅÒm¼Þx°w„@°‚XêĠ°»nV°U„l@k„@V±ôī@£‚ƒČŃÆ£„KÞý@¥‚k@y„a@—nWV„UVƒšwƒmƒ£Jƒknm@wmkn‚X„˜šX„¥mUUlUnbš¯°ŽnkƒVInlIUw°n™mk@@mlanXlanmšk@wVWUw™_@éĠašnmUaÜ£ƒmXƒ¥¯@@„óUmݯ¯ÞÝlKnxô£š»„»Ġ„J°aV„UÝÿV¥ÛbƒI@wmŽón¯yÛL@ƒWkŎmș`IWa¯K@¯mUnmaXm™bmak„¯ŽƒĢ™ÒÝm¯mV¯KÇb¯KۜWW™X@a™V™knċLUWV™kXóW@k™a@ƒób¯Uƒwmb¥UUlaU¥U£ma횃KXkƒmÝ@kwmѯk±ċbUUVakaġ¦ƒƒkL@`ƒœ™a¯xƒm™Åƒ™LUWƒ@ċnŎUV°LkL@b°°@¤š²ƒ‚šnôôk„l°kè›ÒÈzV¤È„WôôƒnV@„ƒ¦@¼Ux'], + encodeOffsets: [[101903, 23637]] + } + }, { + type: 'Feature', + id: '5325', + properties: { name: '红河哈尼族彝族自治州', cp: [103.0408, 23.6041], childNum: 13 }, + geometry: { + type: 'Polygon', + coordinates: ['@@°°nÞôV@ƒ°@„¦WŽ„nÛ¤Vbmn™ğb@êš`VxUX@xš„ÆÞUnn˜WÞĸ̃šÈ@ŽÇè@zÛÜWšÅêlš²„˜KnV¯ĖĊx@bk@@„°JÆ£Èbl„nnm°nlUkVUUwVm„Kn„‚nVŽÞxVLX¥laX@@xl@VzȎVmšk@b°šÈĸmŽV¦`W„XšƒbUb‚bX¼°x@ašVVkn@lþnXUlVxŤÅ„y‚IUƒka‚IŎĊ@lXx@b„z@‚ô„ƒ¥„_V@l‚n@„ôy@al_l`nmƒÈ»@kƒmXwWK™U¯»™a™Å@wƒmUÝKUa™UUƒ™wWƒ@w²»@kƃV£—mm£VKkÑV@@»nwƒ¥™ƒ@kƙnllIVlnLVakalknJšWmnaUaVÑVVލn¥m@ƒ„¯Uÿl™@™™™VçƒaXaV¯UyVLVkš@nJlšXLlŽkxlbla²Òl@nVJVkšx„KlkUaVķÝÑU@Åm¯@±™Uó°ğńķĠmU™Ñ@ǯ¯Å¼@nml@°¯¯`@w™£@¯Çƒk@ƒ»nmċ¯U»™I™Ž¯LÇĶÛn@bó°™U›šwmޝ„™Umǯa„™ƒ™ƒI@ykIƒVUޝbƒIğŽƒ¼™¼ó¤mwkLÝÞ'], + encodeOffsets: [[104243, 23429]] + } + }, { + type: 'Feature', + id: '5326', + properties: { name: '文山壮族苗族自治州', cp: [104.8865, 23.5712], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@šwô„š@²¯maUmôUÆxš@Xš˜bÞInlVUVw„JVaU„K°¥„xmÞXnlKlnna°@ĊČ„ÆwUmnkl@°ƒƒ£nyn@VV@Vak™ƒ@@kÞ݄bmx°Vnw°klÞInĖÞVlKl™@Xa°„„KlV„U@šJnx‚U@ÈĢbUKlm@ak_‚wšanWUk°ƒl»„k@Wk@lwU_ƒ@UalóU¥ƒÇnƒ™kJWƒ@mVXx±bƒK@nV±a@™Åa™£ÝK²ƒWknamKknǏk¯ƒaV™™V¯ĀƒU™„™Ò¥ƒI@mm¯¯xōW@@`k@ó»ƒUU¯lm£ÅWlĵ„w@mmwÅmWU@y±U—xmwU„¯Uƒ¥Ý¥¯£m@kŽÇVUV°VbklƒL™wUlUIm‚k@±ÑkbkalwkWKk™mI™@UlUKVzU°Wb„bU蚚@škšVƒ°@„n‚m¦ÝŽUUUÒVbmbXn™‚mIkllbUbmKUkkJmkŚ@lš„„¦mx@¼U@lÒULn¤˜nU¤Å„@l±¼@xX„šxV„šVVbÞLVŽ„n@xšÆšb°¼šV'], + encodeOffsets: [[106504, 25037]] + } + }, { + type: 'Feature', + id: '5303', + properties: { name: '曲靖市', cp: [103.9417, 25.7025], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ȦlKÞĕUV¯Um¯„ÇVUnVVUƒĉn™ĊÇƾLn°°È„JÆw„@lbÞa„¦V„XJ°¯W¯„aÞJVkUša„ƒ@lKnÅmWUk¯a¯»@m±@уkkbWWX_WÓU»_l™kÑm@U»m@l@IWċn¯l@VanV„UV™UVwVx„KȄVmUē‚@„ƒn@VÝÆL„w„VVwnVlmkUVÑǰka@k™ÿÝaÞUl£™›—ċĕX±±ĉƒa@UnVnalónk@wl™UVmkÝJ—aW™™@ÅwóVVnnb±°™@óƒ™xXLWx„n@lǼn„m‚k_k`@bózƒ‚m@kU@ƒ`„¦óƒ@nWš@ÜÅXWw@ƒyƒb¦@ÒlnUb@x™lܐk‚@²Ç@Uƒ¯bmy@kV@bƒb„¦U`lLVx@b—Ll¼Þ¤@„°VVބU@WސUb›J@nnš@lnnm„šxUŽƒUUbƒK@šÇwklkUƒVWakn@ŽlbU@@„ULVxkKUn‚°¯Ò@¼™„kmƒ¦m@kl™Ȱ@lU„l¦„@Vl°wšnnþĊUÆbUx™b„ŽV„šĖU°„a‚nnašV„al@@b'], + encodeOffsets: [[106099, 27653]] + } + }, { + type: 'Feature', + id: '5323', + properties: { name: '楚雄彝族自治州', cp: [101.6016, 25.3619], childNum: 10 }, + geometry: { + type: 'Polygon', + coordinates: ['@@mҁXU`Wnšš™@Xl±¦š„Uxnbl°knmKUx„„ƒxVôUx°¼ôÒȄ°JlnÞKĠœW°¦ƒ„Vx²JVwš_°¥@UV@@wnymknK¯I@‚™²b°ƒš£V¥šwU‚V„¤nLškÆJÈwôô°„l»Č¯ƒġVƒUU@@ƒ°ƒƒÝXl@U»°Å„@U„¯@w±¯VmUUlm@m™„ÑnIVyUwmak£Vwm±—@Çw@nƒ@UxkwlÇnL‚mkř@±Žk™ka@kóJV¯Ç»U£lw¯™Xalbl¥¯UXƒ@a˜™UaÈL@ÇVIVƒkaU¯mm™akLWkUJ¯Umxnšƒ@ƒkUx¯xƒ„mWÅīÝkkbƒŤƒbkxWmXwWk¯wƒKkƒƒLŤċń„@¤óĬU²ƒ@@lƒk¯VmU¯¼@xV@k°l°kbUš°nm‚VnUš@°„š„UVèރÆbUÒÞnU¦›V—¼lô„@Vl'], + encodeOffsets: [[103433, 26196]] + } + }, { + type: 'Feature', + id: '5329', + properties: { name: '大理白族自治州', cp: [99.9536, 25.6805], childNum: 12 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lbœKVIUa˜@²m@b™xôÒÜxXLmbnšl@š„„K°šš¼k„Uô‚xôlV¦nJ„Uš™Ænšm„@šx„ÆwšbXšÆôô„LUVwôK@wlmšaVwœ@WknmƒIUmlnJla@_™@kÝmKUašÑm¯Xw°aUaVl»²JV„bÆJkôͲVVk„mšbVwUó„wƒƒVwnLlmk¯maVw™ƒ²¥Wkš@™™XmV_‚WnÑUkƒ@k󘻜UV¥ÝmVÑÅa݄UçƒVƒ™@¯V™Umn¯mV™lak¯l¯U@@wğŽW鯁ƒ@¯xÝw¯š¯Jċa¯U¥mLU¤„bÞȤƒbÇLWUwmIUVW¼kbš`U„Vb¯L±ĊÛkƒÿÝKkwƒKţê™UĉþƒÈƒV¯ÞVbUްKVšk²Ý‚mI—ƒmV@kƒm™UkšVxm„¯KXÈķJU¦V°ULWxšL@môƒšb@bkx±LnVUŽVLnkÜWnwlLŃmW@kkJU_ƒV„šWĊ„Þ'], + encodeOffsets: [[101408, 26770]] + } + }, { + type: 'Feature', + id: '5309', + properties: { name: '临沧市', cp: [99.613, 24.0546], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@‚xĢ„l`²X°ŽV„šx@x°Þ°KXašğUњW‚bnIl`X²°b„xl°„„šV@xVxk¦mb„l@xšXV‚ÆzX¤™Æ˜k°„kx@lźêlaX»VUnJVx‚XÈK„aÝȣƒaV£nKV¦°‚Čb°I°™n»ÆÑV¯nWn›™@ÿXÅWWn¹ƒġōƒn»‚ÛU™™aU™VƒUw„w@w°ƒó¥ƒ@ƒz—ƒ±@ř›¯@kUwlk£±aĵޝ™›Uĵ¦±±@bó±VÝ@ó¤ƒw¯I@mńóm±XޝIólƒK@š°Ullb™zkKlln@@ԙºƒUmVk²ôҙx™ŎUVóLƒb„ŽmÈnŽmbnl‚a„x@z„@Ǝ„¦kš'], + encodeOffsets: [[101251, 24734]] + } + }, { + type: 'Feature', + id: '5334', + properties: { name: '迪庆藏族自治州', cp: [99.4592, 27.9327], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@W™Xwƒ™@akk@y›—k°īX¥›Uóķ¯w@n»UaVaUۃ¯ƒmV¼k‚™Þċô@n¯xÛÒm„V‚¯Ô@xƒ‚@šk™wm™Åa@ƒUa‚݁¯VŃyV„a@ÿšn»ÝVmank™mmÞÅôƒ@n£±›ğzÇmU¦™Vm„nÜmbn@°nV@xmzÅ@mºV¦k°ln¤š¼õô„n@xkƃIUxUš@Ťƒ¦VšmVkmkXW¤XzVx@ƚx™¼ƒÞ¯b@lVš™ĸގV„m¼XŽm¦V„ŽÞ@Ǝš¹Vón¥ÆKn„‚KX¯x@èĊȱłXšaÆxnlV@UÛlȻkğV¥„m²ljmÅÞĕƒƛm°„ÆmX¤mznƃŽV¦ÞVVb°bnÞWbnްl@V„È@„‚VĵĊ±@ó„InxÆw„¥@£Þ›W¯ĸ£UƒUK‚ƒk±akkkbmWmÈķ„aÆÇU—ȃÆW@wmknmU¯'], + encodeOffsets: [[102702, 28401]] + } + }, { + type: 'Feature', + id: '5306', + properties: { name: '昭通市', cp: [104.0955, 27.6031], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@mƒnK@wmƒUř¥mšóXǓŏmX@Ž—VƒmL@xţ™nk@mlUšŻÒğŋ@ƒL@mmLkm™š@b™XŎW¼ka¯lÇŹ¯aÇ»™ÝÝ_@m„@@a™@UklwUm@ak@ƒb™UmbmƒbV¯™ĕUƒƒšaVwÅaĉVmý™m¯xUkƒ@k¥VƒUXƒ¤VÈm`@„—ńÇÜ@Ākn‚ĔkƞÆĠ„™Þš‚U„VôƆÞI@ŽUxƦn„l@ĊĊnxUÒ°¦Vb¯WUnWށIml@xn„Ubô¤‚¼ÈxlI„»šKVš„@ÈԂJkšU˱ÆVb@nœ„VÜVUVƒšL„wĠl„kn„Ġ@nx°¥Æ„²mUwƒ@m™mÅUl¯UњÑUm„Lll„Il±š@VkwƒW@w°@U»™kUóI°ƒ„»ĢтL„™š`nUĠ²lm„bôV@n„JUxƦX¦l@š‚ŎUƒV„@lV„KVřV£UaÞU™ƒnW@¯VU@ó™'], + encodeOffsets: [[107787, 28244]] + } + }, { + type: 'Feature', + id: '5301', + properties: { name: '昆明市', cp: [102.9199, 25.4663], childNum: 11 }, + geometry: { + type: 'Polygon', + coordinates: ['@@n@Vk‚VUn²°@xƒ°Vƒ@¯ÆV¼k@WŽ„Þ¯„@„@‚VVU„„Ģċ°k¼V„Ċxœ¤Ōœx°mVkƒÑȏšL‚°„x°Xœ°VmĊLVxU˰bX¦VW@kšȯlkn@„¥lnšƒ@»°Ñ¯VmlLUwVK@ƒV@ka@lmXb„UlVlkÈx@™„LVa„VV™wnƒmm@km™@mœIVaݏ@XƒVUݯU@ƒÝ£k»˜K@aUwkKV_ƒ¥„a@alU@nz°aV„È@@±lÛšk@wVakm@т¥„a„z‚@XxÆW@ÛX™@m@ƒy@aWw@kōĉJlbV„JƒzţÆUwVkmWkým@Ul™U@b¯wVºƒU™VUêšĠƒXUaUbVĊUŽWXUmkK™™WnUUU™V™ƒƒVV™Ý@kk±‚™¯ƒƒLkƒš±WkXlVklƒ@ƒwXbmLƒ›VUIVmk@Ubma@kkaVKUƒ™kmlXLWn™J¯ÒĊ°@zkºlLUŤn@@n›ô@lƁnmKkÈlxVw„@@mÈx˜@n²Uxl¤nbVxUzmJƒÒnš'], + encodeOffsets: [[104828, 25999]] + } + }, { + type: 'Feature', + id: '5307', + properties: { name: '丽江市', cp: [100.448, 26.955], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@l@™„@w°ÓUnƒÜѰw@mČóšÝlU»n°„„VÜUbVbm¼@ްxôĸœVW¦¯Ĭlœ˜@zll@b„šWxXš‚a„X@ÆĠÆaXwl@XaƦn¼˜Jn@mnKW¯È»V¯°ak™VanXVwl@VyUĕVU„bÈīlaUk°ƒk¯lƒ²V˜Ukƛô@ƒ„I@mVwĊa„™ƒVaka„™ÆbUŽVLšaXIWKUw™ƒ„aWÑÅKUaVk°ƒ@Uw„ƒ¯¥›XğÝLkm¯Iǃóѯ»™aƒnUl±UĵÿlóÅIƒaU‚±Ik¼UŽVb¯bWxn°™ÒVbnLlޚ@@`kbmIkŽVn„JmnXl›@Ux™bkn@xóLUxVŽƒKóóŐW™™aÅxƒŽ™wƒ@™nÅm™šƒV™„ƒôX„ƒLlVU¤ƒb¦m¼™Ž@ƒbU‚„zUƂ°ÞVb@„Æbnššx'], + encodeOffsets: [[101937, 28227]] + } + }, { + type: 'Feature', + id: '5328', + properties: { name: '西双版纳傣族自治州', cp: [100.8984, 21.8628], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@l²°ŽnÒlxÞ@„nWl„Lĸ™nbV¤V¦kbVV‚¦na„x°Vôa@„šb@lôXlWUšVXČKlmššU@bšWXXܛ°LÈa°LnU°‚ÞnšÑ„ġ°lƒnbšaƒ¯¯KWƒœó@kmK@UšĉV@k°„VV¹„a@y‚_ċl_nÓlL@anI@ƒóWl£VU—ƒl™kĕl™šKVw„U@™kVƒam¯ÅL@bƒ‚Ýk@Vn„UbÇbÝwÅ@ċ¥¯lk‚¼ÅŽ™Ò°b@¦nlUn@ŽÇV„mƁbWôU@ÝÅōm™¯ƒaU™™mk™WWw—@±ƒ™n¯U™è™a™Lƒ¯mƒL™škwƒl@°mnÈÒ¯šów@V™xƒĀU¤°Įƒ°Xl'], + encodeOffsets: [[102376, 22579]] + } + }, { + type: 'Feature', + id: '5305', + properties: { name: '保山市', cp: [99.0637, 24.9884], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@X°„Il‚@¦ƒŽÈ¼m¼ÞaÞÅl„ÈxV¼šlVôÈÆlLޣȺlkUƒ‚ƒUw„¯UĕVwĊ@n¦mlnVĸIWǰLnƒUwl™šV„n@lnU˜„nJށl±U™¯LVUa°Ý„U„ÇĊýšVŤé„LlxÞL„ĀÜl²ĉ°KUaVƒ™_Źé@klw¯ƒlÅ—šW£ÅyU™W@wƒknal¥Uw@w™Uƒƒk¯ƒw¯aW±k_mJa™XVҙĠWb¯L¯Ý@w™wUƒ¯±Wk_ġƒwƒwōKmb@¤„bk°l˃ô„UJƒšVnÅlťUš¯°VbnbWxX„m„ÞššWUĀ™L™yWzÛKmbUxVKkn݃kŽVšĀċ¤Ux„@ޝŽm@ƒ¦'], + encodeOffsets: [[100440, 25943]] + } + }, { + type: 'Feature', + id: '5304', + properties: { name: '玉溪市', cp: [101.9312, 23.8898], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@l„„L°xXlWxXnlw„a„ţlaÞlÆĬnX„ƒ°wVw„l„@m™nw°VVIXllKšbnnV°lbU„UJ@ÈÇKVb—š@bW„°Vk¦kaWb°škxV¤È¼U°ôI@llblš²š@‚@œó@mm@VţkKl¹@yĉ¯°ÑšIXmWKnkšlV„ULlb@lnbVal@UnVJœU‚„nKWa„x„@lkkUlW²X„™‚l„K°„šl²@lšÞUŽ„U‚„UšVšVVXmššlLVnXWVUĉVaVb„W™ğVéšU„VU¹W»aVa„aW™Xƒ‚_U¥nÇ흙@a™lUnǍUyk@@wW@kbW¦UKÝwUmmƒƒLUnVxUVVlk¯mmnƒmkÇaŤ¯I@ƒl@@aĉw°ĕmU—L±ƒk™ÆéX™ÜÛ@yÈç@™Çġ„Ýķ—XmmÝVՙƒ™lmnkbmWkb@nl@nŽmš¯VxkJmUJ„ml¯™°makVVnVƒ¦™Wƒ—Wmnl@xmn„l‚I„¤„n™xU„ƒVUŽmX@˜ƒb@zl@¦Ýþ'], + encodeOffsets: [[103703, 24874]] + } + }, { + type: 'Feature', + id: '5333', + properties: { name: '怒江傈僳族自治州', cp: [99.1516, 26.5594], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@WyX£lWlnnUU™„¥@ţV™Vw„JlÅ@wƒmö󙻂£kml¯U¥n¹Æ@ny@wmU@¯mnamÛnƒšUV¥ÈnĠy²œm¤„@ÆónݚnmlnbÞU‚¥„aV£kU„KWƒ„óšƒmIU¥ókwVólƒ™»¯™ƒL™ƒk@m™naWKÛwóњw@a±n—@VbUJ›LkaƒÝXĉƒ™„UV`lI@lnXÆƑkKmxÛXmlUKVmU²Klw@a™aó„@n™KXwVKU¯V¥mUnkm¥ĉ@UxV˃°Vx„V„klmޙkKWĀkVWšnl°Lnm@°ŽUxlV@nk¦™JVȰŽVÒ@nX°@ÆlUômlnôƒ²nxmłnVV„¯x@Èm°XblVUšl°@xkXU¤WXX‚W„Xƃ„mkÅJmށw±bƒxUīkKmÅVUĖÝèV„kx@š›lX„lnk¤ƒLkŽ‚Ėk¦‚xUššL°‚¯Ė@LnK@b°xVI„¥Ua°Ñ@»nm@¹‚KŎÞÈWln²n'], + encodeOffsets: [[101071, 28891]] + } + }, { + type: 'Feature', + id: '5331', + properties: { name: '德宏傣族景颇族自治州', cp: [98.1299, 24.5874], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„¥n@°@ƒVwČ£™ÿUlÞ„lmULVwnaÜLXyšzšKVÿ™XݙnƒWƒXwmaUa°¯V™ŦŽÆkUm„™VIƒ„ókĕl¯ƒa@£nama™@¯m¯œó@óyţbġkÅm±ÛammVkƒLwU`Wk@VƒkUmŃlUUKmbkkUVUwƒ¦óް¼šbn°ô¦lºƒz@xšŽ¯„™@UްnƒšU¤ţU„°VƆ@ÈmlnzÞl°¦Æa„xUxƒLkxWƒn@‚š²ŰšW„™‚@°ÈXl°Llx'], + encodeOffsets: [[100440, 25943]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/util/mapData/geoJson/zhe_jiang_geo', [], function () { + return { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + id: '3311', + properties: { name: '丽水市', cp: [119.5642, 28.1854], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@V‚bVl@Xn‚UXƒKVŽ@¦nxlUXV‚n„KVmnL‚UV@bn¤lLXK˜²„`nnlJXIVJ‚I„Vnn°KnnVll@VLXWV@UkVaVK„zV@„ƒšVVaUK@U»VUl@@WnUUƒ@wVLn@Vwl@XW°LVbn@VU‚@X„l`@XnKVbkl@XVJlUnlV„„xlL@lnXl„@VšUnV°°„@a„UVLXblWVXn@VVUV@Lš¤VLV„U‚VbnalLUUVX_laVa„WVzXKV@@a@KUmImmXama@kU@yVIUK‚aVa@kXK@aWU@VIUmW@kkVm„Uš@VwUa@K@k@Uƒ`@kUKVk@UV@VaUm²Vy@klUUWUkVmUa@_ƒKVaXa›XmƒU@mUlWkaUXƒ@mmkL@w™JƒnVVÅbWKXa™@@I@aƒJUUÇ@V„UL™W@akLmb@K@a™XXw@mƒVmUVkUy@£@aU@@VkUWm@kUKƒXUWU_mW@wkkmJUUkLWWUXƒW@IkJ@k@mW_kӃ_Ul™Lƒm@I@aUa¯m@kƒa¯LUJƒ@mVVxUb™a@LUKkXƒbm@Uak@@a@Um`ƒIUbUJ@nUVW@@LnVV@lšUbVlUX@`š@blXklW„Ušm„Xlm¦U@@V¯bml@š@nUb@llnn@VbX@lV@ŽUVULmU@JVn„bVbkb™VWxU@@nUVk@'], + encodeOffsets: [[121546, 28992]] + } + }, { + type: 'Feature', + id: '3301', + properties: { name: '杭州市', cp: [119.5313, 29.8773], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@X@l„°KXXlW„b@²„`šššb‚I„šX`l@„@bWl@n@VnLUV@V„@°¦@šl@XVlU@š@xVbUb@Vkb@‚@XVJVz™J@Lޚ@VmLUxUJ@LU„Vx‚b„xXUl@VaÈw„b‚aÞa@Vl@XUVx@V@V„LlbnV„al@lb„Vnn‚LnKnL@VlbVJXalIšb@KUU@mVInJ˜„U„Vl@xUšVLnUš@UÞaV@lkV@UanK„L@UlKVUnbÆmn@@nUlVnVJl@@UXU„L@WVIVJVxVLXV@IÜKnbn@V¥V@@I@ƒƒ„y°b@UUwnk°ÆƨVlUšçXm›£aƒÇ™IkVƒ@WV@@aWIUWUIkb@WW@UnƒK@UU@kaWVkƒVIVVnU@UWVUV@VmVkKkWIkVWaULU`UImJUImm—U@ƒƒwmwUV™IUWVkUamaU@mV—kƒb@KVU@aVU@anKULVJ‚U@kÛU™JUV›kkƒVakU@ƒaVwkW@UWkXmWaULUaUK@XƒJUUmƒVU@UVƒUkJ@ImwmKU@k„@lU„W@@akKm„kamIkWl_UwVm@UkaVUUaƒ@UamakbWlkL@aUalU@mkL@U@U™lmK@XkKm@Ýakb@xƒnXbƒ`ƒnUUU@›™U@™wU@@ƒmKkkƒV¯U@lULUbVbUb@V‚a@L™ºÝb@bLmK™x@VUL@bk@mxULWl'], + encodeOffsets: [[121185, 30184]] + } + }, { + type: 'Feature', + id: '3303', + properties: { name: '温州市', cp: [120.498, 27.8119], childNum: 9 }, + geometry: { + type: 'Polygon', + coordinates: ['@@ll@xnXV`VX„WVL@lXnlV@UV@@b@¤VzUlnV„U@nWxšW@b@LnalK@bšXVKUƒÈ@VV„I@b@Jš@WbXLÆaUU„mšI@xlKnn„@VWlbkXV‚@n„VWnœ‚WbUb„L@`VbUnVlVXkV@lUz±‚VnUbU@@VUlVL@l„_@V@l@LVbV@XLV`VÈlxn@lU@aœaVV‚k„@XJ@nl@@LU`°LVb„L°a@a„UVy@anI@a„a‚nV@²wÜJX@VšVV°k„na@WVk„aWwU@m@™ƒkƒaUĕ™ÝšÝŤnÈa„aóI›»@±X™WkUķ@kV±kw™ƒUkWw„™UƒÝ»ÛkɳlImaUaWóXÿǬk‚UnWVmmk™KţnŏÞğl™„UlUx@XWb„V@JkXƒ°mb@VULVxUVk@@LWWk@WIkšƒUkJmUkVmI@yƒ@Ua™kLm‚U@mUUUkaVk™@mK@UlUU@UmKmbUUUJ@n@KVLUL@VkJWXX`mnULWlkL@JVLVb@°kxkU@LVŽ™V@„VLV`UL@VUX'], + encodeOffsets: [[122502, 28334]] + } + }, { + type: 'Feature', + id: '3302', + properties: { name: '宁波市', cp: [121.5967, 29.6466], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@Ċ¦ĸ°‚nXÞVšKškƨƑźÿ°»n„@wô¥ÜbœU°ÆXÞWóçĉݱIUƒÈ¥@U°wÆ»²mm_@aXƒVKÞVlk@akk›̅@£X»VwƏXWa¯aȗb™KƽۃĊ™xƒLóŽk@ƒƒƒ@¯nƒKUL@xkL›ÑkWULUUmJUXVŽU@mŽUX¯@V`mbXbV@@nn¤WXšx@škJ@nVVUVl²UbÝVUVk@Wx@V@„ƒVXzmlaƒL@VlLU`„XUVVVUnl@VbnJlnUVVnƒlUKkbmnn„VxlJnxmbU@UL@KUV™X@xmb@lk@mnVVUš™è'], + encodeOffsets: [[123784, 30977]] + } + }, { + type: 'Feature', + id: '3309', + properties: { name: '舟山市', cp: [122.2559, 30.2234], childNum: 3 }, + geometry: { + type: 'Polygon', + coordinates: ['@@l΢ƒʠþÆVĢLĊƒǬXĊ܄XôV„ÑÆw„ƒlšƏÈóVĭVǓ@ƒĉwɛkmK@ĉXīWaĉUĵÝmƒ¯ĉƒwĉ±±nż¯x@VǦV„²JĊÞôèÝXÅW¯›VÛaó¦@xƒŽmޝ¼ŹĀ'], + encodeOffsets: [[124437, 30983]] + } + }, { + type: 'Feature', + id: '3310', + properties: { name: '台州市', cp: [121.1353, 28.6688], childNum: 7 }, + geometry: { + type: 'Polygon', + coordinates: ['@@lV„IVWVz@bXJl@Xal@°„nLll@nVxnV„K@UJVbƒ¦°„k`UIWJXnƚ@bUJ„Xl@lb„Wn@UzVV@bVVšmVnnJVXna‚bšKUKnUVVUnVLlKVLXa„Jm£@mU@WanaU_°@VWnV@UVWnIVVVKlXœÒlK@wVK„L°m„@„„l@ô„Kšw„ĉƾůUƒl£@»UƒVk„m@ƅUƒƒaÛIŏmUk@m„w@a™£ƒWk@ţšƒIm±@ankôUlaU™Uw¯ƒōaƒbÇbţm™ÞšÞVĖ„b„l@š@n‚VXxƒbUl@XmbƒŽ¯lUUU™W@ÛI±xU@mƒb@bmJ@bUzƒV@b¯bƒKUa¯KV_@Kk@@mWIƒ@lUU›b@bkVm@kwUÇU_WKU@Ux™@ƒVUnllX@Vn‚J@UXV@bWL@lUbbVLUJ@z‚V@lnbWbnnnJVŽ@L'], + encodeOffsets: [[123312, 29526]] + } + }, { + type: 'Feature', + id: '3307', + properties: { name: '金华市', cp: [120.0037, 29.1028], childNum: 8 }, + geometry: { + type: 'Polygon', + coordinates: ['@@nbVb„@VbUVlb@VUnVxk`lXnJlbnƒlL@bX@Vƒ@klƒV@nLnx@JlI„V‚U@VUVn„VV„I@WVLVbVKXbWnXl@VlXUx„b@ŽlVUbl„œlVUšIÜVnalKX@@bV@@aUUlUƒwUw„@naWW„UVaUUšaVb„LlxXJVk°ƒUƒlkU¥@k„a@LVlXLVlšVWznVn@lxšJl_@WX_@mVa„a@alU@kVVna„KVLlK„b@UUaVašbnUWmXU@k@yVI@ařWmXIVJl_¯ƒ„¥UaVI@ƒLmUUw@mkkmK¯ƒk@Wbk@WI@aUyUXƒJkU@bU@WLUyƒXUbkbW`UVVkKmbUaVUƒUK™£@KVUUUm@UWkXWaUKƒV@b¯ƒ¯mU™V@UkƒmW@kkKƒwUƒmkkVUI@WlkUamL@Wk_Wƒ@UVm@Ua¯KWXk@Uxm@UK@xV„mV@Xk@UVV¼@‚VLUb™Uƒ„U@ƒyULUbVlU@@XlVUVVbƒU@lXXVW@XUVl@@VUVƒÈn@VVU„@lVa@„U„mL@`X@`WL@VUX@lUL@xlx'], + encodeOffsets: [[122119, 29948]] + } + }, { + type: 'Feature', + id: '3308', + properties: { name: '衢州市', cp: [118.6853, 28.8666], childNum: 5 }, + geometry: { + type: 'Polygon', + coordinates: ['@@XkVKnwl@@aVK@UšwnL‚K@aÞaš¹@Kb@UVaUaVaVK@k°V„UllnL@„V@šxV@œšV@VV„m„_Wa„m@wlaÞbn@lL@WnLšk@V@VlK@nkVVb@blKXklakw@wVK@kVW@UXK@_‚W@_nKVƒ@ƒUb@kVƒUUm@„ÇVU@Uk@VU@WUXWW@k„VUaVUkU@WWXUKk@Ukmm¯LmmƒUJUIWJkImmƒ_—±WLkKm£@aVUmKUnƒLmWUkVmw@¥U„LVWm@WUka@UmmLmm@@bUX™@@WUIm@UVUK@UVUUU™VVJmb@b„Xn‚mVƒ¼nnn¦mJUVƒL„V@VW@UzUlVnUbl`UnVl@XU@kl@bmÈUx™Vk@@J@„ƒ¼W@ÅaVVnzmVƒ„@WJk@kWJ@ƒlXbWbXxmVnšlLXb@°lKVXnWšbWV„„X„mbV@Xl‚bšI@Kn@@x@šVLlm'], + encodeOffsets: [[121185, 30184]] + } + }, { + type: 'Feature', + id: '3306', + properties: { name: '绍兴市', cp: [120.564, 29.7565], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@„x@„˜VnnVJnIVJV_VKXblUXJlŽlLUŽUnU@UVVX@ŽmVUUUJl„XUlbV@@V„LVmX@@XlaVJVXXJ@b‚@XU„@lUšJ„È‚bœ¤Ō„JšçV™UUnml@@kna@wšWVU@LVKV@namwkIUwmƒnmlaVL„kUmVUkmmIUak@VmUUVUƒWV_kK@U„K‚bnkWy„U@ƒ@UXwl@VUÞUVak±VUUU@mlI@™™wXWƒIWbUKkLUKVmUUmVVL™LambUWmIUm™nUU@aUUVym@ƒXkak@ƒW@z@lWVXnmV™aUbVb@VƒakLUKƒLmbUU@lkV@bƒbUb@nW`@Xk`™Ikwm@mUXy™UUkWKUk@Kƒb@lV¦klV„¯„UlWIkwƒKUa™bVVUbƒVXXmbƒ@Vx„xkVVV@bU@@aW@kLmb@lVUIVKmL@bUV@bUV@L„a˜lnUV@nbVbUlVXšJVUnx'], + encodeOffsets: [[122997, 30561]] + } + }, { + type: 'Feature', + id: '3304', + properties: { name: '嘉兴市', cp: [120.9155, 30.6354], childNum: 6 }, + geometry: { + type: 'Polygon', + coordinates: ['@@@blIX@@VÜVUnn@l‚k„lKnI°Þl`²LVKVbnbVaVLUVn@W¦@VkVVb„@VI„`@blLnL‚aX@„VVb@U‚@XlVa„@@kVaUKV»U_lWXUƒƒ@alb„k@VllnLVKn@@UVIUw@y°IVVXU@VV@lw„m@wVkƾaœJ‚LkΡƧƒ™l™LÝUmW¯ķÿĉ¥ƒIŋŽWn™èkVƧU¯ÅmlVx@V¯aƒz„Ž@„@JU@U¦m@@šnVmn@V„LV‚'], + encodeOffsets: [[123233, 31382]] + } + }, { + type: 'Feature', + id: '3305', + properties: { name: '湖州市', cp: [119.8608, 30.7782], childNum: 4 }, + geometry: { + type: 'Polygon', + coordinates: ['@@kLlƒkm@VmÛU@UW@kJ@aUƒK@UnmmU@™maÛL@JWUUKUwUIUJ@XƒKWV@Vk@UIUmVk@mm@ÅnmaUVkL@VƒKmLVbU@klU@ÝbV™@mVUKV™@wUkVƒ—ƒmIUJ@nVV@L™akJWbUIka@UmKmLKmmƒUUVk@@nmLX`WXUV@Ž@nUl™kmlU@Ub„„ƒxVVšIlV„Žšnn„@@n˜„UҚ@„°n@@xmb@„VbnV@šš„@b@`@L@L@x@blVklVbnnV@‚aXb°VlU@W„b°U„LXWVUV™„™VwÈwÜ»ĸaĠnUVw²X@V@lVU@wlaUUVm@knUV›'], + encodeOffsets: [[123379, 31500]] + } + }], + UTF8Encoding: !0 + } + }),i('echarts/chart/gauge', ['require', './base', '../util/shape/GaugePointer', 'zrender/shape/Text', 'zrender/shape/Line', 'zrender/shape/Rectangle', 'zrender/shape/Circle', 'zrender/shape/Sector', '../config', '../util/ecData', '../util/accMath', 'zrender/tool/util', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = e('../util/shape/GaugePointer'), a = e('zrender/shape/Text'), + o = e('zrender/shape/Line'), r = e('zrender/shape/Rectangle'), s = e('zrender/shape/Circle'), + l = e('zrender/shape/Sector'), h = e('../config') + h.gauge = { + zlevel: 0, + z: 2, + center: ['50%', '50%'], + clickable: !0, + legendHoverLink: !0, + radius: '75%', + startAngle: 225, + endAngle: -45, + min: 0, + max: 100, + splitNumber: 10, + axisLine: { show: !0, lineStyle: { color: [[.2, '#228b22'], [.8, '#48b'], [1, '#ff4500']], width: 30 } }, + axisTick: { show: !0, splitNumber: 5, length: 8, lineStyle: { color: '#eee', width: 1, type: 'solid' } }, + axisLabel: { show: !0, textStyle: { color: 'auto' } }, + splitLine: { show: !0, length: 30, lineStyle: { color: '#eee', width: 2, type: 'solid' } }, + pointer: { show: !0, length: '80%', width: 8, color: 'auto' }, + title: { show: !0, offsetCenter: [0, '-40%'], textStyle: { color: '#333', fontSize: 15 } }, + detail: { + show: !0, + backgroundColor: 'rgba(0,0,0,0)', + borderWidth: 0, + borderColor: '#ccc', + width: 100, + height: 40, + offsetCenter: [0, '40%'], + textStyle: { color: 'auto', fontSize: 30 } + } + } + var m = e('../util/ecData'), V = e('../util/accMath'), U = e('zrender/tool/util') + return t.prototype = { + type: h.CHART_TYPE_GAUGE, _buildShape: function () { + var e = this.series + this._paramsMap = {}, this.selectedMap = {} + for (var t = 0, i = e.length; i > t; t++) e[t].type === h.CHART_TYPE_GAUGE && (this.selectedMap[e[t].name] = !0, e[t] = this.reformOption(e[t]), this.legendHoverLink = e[t].legendHoverLink || this.legendHoverLink, this._buildSingleGauge(t), this.buildMark(t)) + this.addShapeList() + }, _buildSingleGauge: function (e) { + var t = this.series[e] + this._paramsMap[e] = { + center: this.parseCenter(this.zr, t.center), + radius: this.parseRadius(this.zr, t.radius), + startAngle: t.startAngle.toFixed(2) - 0, + endAngle: t.endAngle.toFixed(2) - 0 + }, this._paramsMap[e].totalAngle = this._paramsMap[e].startAngle - this._paramsMap[e].endAngle, this._colorMap(e), this._buildAxisLine(e), this._buildSplitLine(e), this._buildAxisTick(e), this._buildAxisLabel(e), this._buildPointer(e), this._buildTitle(e), this._buildDetail(e) + }, _buildAxisLine: function (e) { + var t = this.series[e] + if (t.axisLine.show) for (var i, n, a = t.min, o = t.max - a, r = this._paramsMap[e], s = r.center, l = r.startAngle, h = r.totalAngle, V = r.colorArray, U = t.axisLine.lineStyle, d = this.parsePercent(U.width, r.radius[1]), p = r.radius[1], c = p - d, u = l, y = 0, g = V.length; g > y; y++) n = l - h * (V[y][0] - a) / o, i = this._getSector(s, c, p, n, u, V[y][1], U, t.zlevel, t.z), u = n, i._animationAdd = 'r', m.set(i, 'seriesIndex', e), m.set(i, 'dataIndex', y), this.shapeList.push(i) + }, _buildSplitLine: function (e) { + var t = this.series[e] + if (t.splitLine.show) for (var i, n, a, r = this._paramsMap[e], s = t.splitNumber, l = t.min, h = t.max - l, m = t.splitLine, V = this.parsePercent(m.length, r.radius[1]), U = m.lineStyle, d = U.color, p = r.center, c = r.startAngle * Math.PI / 180, u = r.totalAngle * Math.PI / 180, y = r.radius[1], g = y - V, b = 0; s >= b; b++) i = c - u / s * b, n = Math.sin(i), a = Math.cos(i), this.shapeList.push(new o({ + zlevel: t.zlevel, + z: t.z + 1, + hoverable: !1, + style: { + xStart: p[0] + a * y, + yStart: p[1] - n * y, + xEnd: p[0] + a * g, + yEnd: p[1] - n * g, + strokeColor: 'auto' === d ? this._getColor(e, l + h / s * b) : d, + lineType: U.type, + lineWidth: U.width, + shadowColor: U.shadowColor, + shadowBlur: U.shadowBlur, + shadowOffsetX: U.shadowOffsetX, + shadowOffsetY: U.shadowOffsetY + } + })) + }, _buildAxisTick: function (e) { + var t = this.series[e] + if (t.axisTick.show) for (var i, n, a, r = this._paramsMap[e], s = t.splitNumber, l = t.min, h = t.max - l, m = t.axisTick, V = m.splitNumber, U = this.parsePercent(m.length, r.radius[1]), d = m.lineStyle, p = d.color, c = r.center, u = r.startAngle * Math.PI / 180, y = r.totalAngle * Math.PI / 180, g = r.radius[1], b = g - U, f = 0, k = s * V; k >= f; f++) f % V !== 0 && (i = u - y / k * f, n = Math.sin(i), a = Math.cos(i), this.shapeList.push(new o({ + zlevel: t.zlevel, + z: t.z + 1, + hoverable: !1, + style: { + xStart: c[0] + a * g, + yStart: c[1] - n * g, + xEnd: c[0] + a * b, + yEnd: c[1] - n * b, + strokeColor: 'auto' === p ? this._getColor(e, l + h / k * f) : p, + lineType: d.type, + lineWidth: d.width, + shadowColor: d.shadowColor, + shadowBlur: d.shadowBlur, + shadowOffsetX: d.shadowOffsetX, + shadowOffsetY: d.shadowOffsetY + } + }))) + }, _buildAxisLabel: function (e) { + var t = this.series[e] + if (t.axisLabel.show) for (var i, n, o, r, s = t.splitNumber, l = t.min, h = t.max - l, m = t.axisLabel.textStyle, U = this.getFont(m), d = m.color, p = this._paramsMap[e], c = p.center, u = p.startAngle, y = p.totalAngle, g = p.radius[1] - this.parsePercent(t.splitLine.length, p.radius[1]) - 5, b = 0; s >= b; b++) r = V.accAdd(l, V.accMul(V.accDiv(h, s), b)), i = u - y / s * b, n = Math.sin(i * Math.PI / 180), o = Math.cos(i * Math.PI / 180), i = (i + 360) % 360, this.shapeList.push(new a({ + zlevel: t.zlevel, + z: t.z + 1, + hoverable: !1, + style: { + x: c[0] + o * g, + y: c[1] - n * g, + color: 'auto' === d ? this._getColor(e, r) : d, + text: this._getLabelText(t.axisLabel.formatter, r), + textAlign: i >= 110 && 250 >= i ? 'left' : 70 >= i || i >= 290 ? 'right' : 'center', + textBaseline: i >= 10 && 170 >= i ? 'top' : i >= 190 && 350 >= i ? 'bottom' : 'middle', + textFont: U, + shadowColor: m.shadowColor, + shadowBlur: m.shadowBlur, + shadowOffsetX: m.shadowOffsetX, + shadowOffsetY: m.shadowOffsetY + } + })) + }, _buildPointer: function (e) { + var t = this.series[e] + if (t.pointer.show) { + var i = t.max - t.min, a = t.pointer, o = this._paramsMap[e], + r = this.parsePercent(a.length, o.radius[1]), l = this.parsePercent(a.width, o.radius[1]), + h = o.center, V = this._getValue(e) + V = V < t.max ? V : t.max + var U = (o.startAngle - o.totalAngle / i * (V - t.min)) * Math.PI / 180, + d = 'auto' === a.color ? this._getColor(e, V) : a.color, p = new n({ + zlevel: t.zlevel, + z: t.z + 1, + clickable: this.query(t, 'clickable'), + style: { + x: h[0], + y: h[1], + r: r, + startAngle: o.startAngle * Math.PI / 180, + angle: U, + color: d, + width: l, + shadowColor: a.shadowColor, + shadowBlur: a.shadowBlur, + shadowOffsetX: a.shadowOffsetX, + shadowOffsetY: a.shadowOffsetY + }, + highlightStyle: { brushType: 'fill', width: l > 2 ? 2 : l / 2, color: '#fff' } + }) + m.pack(p, this.series[e], e, this.series[e].data[0], 0, this.series[e].data[0].name, V), this.shapeList.push(p), this.shapeList.push(new s({ + zlevel: t.zlevel, + z: t.z + 2, + hoverable: !1, + style: { x: h[0], y: h[1], r: a.width / 2.5, color: '#fff' } + })) + } + }, _buildTitle: function (e) { + var t = this.series[e] + if (t.title.show) { + var i = t.data[0], n = null != i.name ? i.name : '' + if ('' !== n) { + var o = t.title, r = o.offsetCenter, s = o.textStyle, l = s.color, h = this._paramsMap[e], + m = h.center[0] + this.parsePercent(r[0], h.radius[1]), + V = h.center[1] + this.parsePercent(r[1], h.radius[1]) + this.shapeList.push(new a({ + zlevel: t.zlevel, + z: t.z + (Math.abs(m - h.center[0]) + Math.abs(V - h.center[1]) < 2 * s.fontSize ? 2 : 1), + hoverable: !1, + style: { + x: m, + y: V, + color: 'auto' === l ? this._getColor(e) : l, + text: n, + textAlign: 'center', + textFont: this.getFont(s), + shadowColor: s.shadowColor, + shadowBlur: s.shadowBlur, + shadowOffsetX: s.shadowOffsetX, + shadowOffsetY: s.shadowOffsetY + } + })) + } + } + }, _buildDetail: function (e) { + var t = this.series[e] + if (t.detail.show) { + var i = t.detail, n = i.offsetCenter, a = i.backgroundColor, o = i.textStyle, s = o.color, + l = this._paramsMap[e], h = this._getValue(e), + m = l.center[0] - i.width / 2 + this.parsePercent(n[0], l.radius[1]), + V = l.center[1] + this.parsePercent(n[1], l.radius[1]) + this.shapeList.push(new r({ + zlevel: t.zlevel, + z: t.z + (Math.abs(m + i.width / 2 - l.center[0]) + Math.abs(V + i.height / 2 - l.center[1]) < o.fontSize ? 2 : 1), + hoverable: !1, + style: { + x: m, + y: V, + width: i.width, + height: i.height, + brushType: 'both', + color: 'auto' === a ? this._getColor(e, h) : a, + lineWidth: i.borderWidth, + strokeColor: i.borderColor, + shadowColor: i.shadowColor, + shadowBlur: i.shadowBlur, + shadowOffsetX: i.shadowOffsetX, + shadowOffsetY: i.shadowOffsetY, + text: this._getLabelText(i.formatter, h), + textFont: this.getFont(o), + textPosition: 'inside', + textColor: 'auto' === s ? this._getColor(e, h) : s + } + })) + } + }, _getValue: function (e) { + return this.getDataFromOption(this.series[e].data[0]) + }, _colorMap: function (e) { + var t = this.series[e], i = t.min, n = t.max - i, a = t.axisLine.lineStyle.color + a instanceof Array || (a = [[1, a]]) + for (var o = [], r = 0, s = a.length; s > r; r++) o.push([a[r][0] * n + i, a[r][1]]) + this._paramsMap[e].colorArray = o + }, _getColor: function (e, t) { + null == t && (t = this._getValue(e)) + for (var i = this._paramsMap[e].colorArray, n = 0, a = i.length; a > n; n++) if (i[n][0] >= t) return i[n][1] + return i[i.length - 1][1] + }, _getSector: function (e, t, i, n, a, o, r, s, h) { + return new l({ + zlevel: s, + z: h, + hoverable: !1, + style: { + x: e[0], + y: e[1], + r0: t, + r: i, + startAngle: n, + endAngle: a, + brushType: 'fill', + color: o, + shadowColor: r.shadowColor, + shadowBlur: r.shadowBlur, + shadowOffsetX: r.shadowOffsetX, + shadowOffsetY: r.shadowOffsetY + } + }) + }, _getLabelText: function (e, t) { + if (e) { + if ('function' == typeof e) return e.call(this.myChart, t) + if ('string' == typeof e) return e.replace('{value}', t) + } + return t + }, refresh: function (e) { + e && (this.option = e, this.series = e.series), this.backupShapeList(), this._buildShape() + } + }, U.inherits(t, i), e('../chart').define('gauge', t), t + }),i('echarts/util/shape/GaugePointer', ['require', 'zrender/shape/Base', 'zrender/tool/util', './normalIsCover'], function (e) { + function t (e) { + i.call(this, e) + } + + var i = e('zrender/shape/Base'), n = e('zrender/tool/util') + return t.prototype = { + type: 'gauge-pointer', buildPath: function (e, t) { + var i = t.r, n = t.width, a = t.angle, o = t.x - Math.cos(a) * n * (n >= i / 3 ? 1 : 2), + r = t.y + Math.sin(a) * n * (n >= i / 3 ? 1 : 2) + a = t.angle - Math.PI / 2, e.moveTo(o, r), e.lineTo(t.x + Math.cos(a) * n, t.y - Math.sin(a) * n), e.lineTo(t.x + Math.cos(t.angle) * i, t.y - Math.sin(t.angle) * i), e.lineTo(t.x - Math.cos(a) * n, t.y + Math.sin(a) * n), e.lineTo(o, r) + }, getRect: function (e) { + if (e.__rect) return e.__rect + var t = 2 * e.width, i = e.x, n = e.y, a = i + Math.cos(e.angle) * e.r, o = n - Math.sin(e.angle) * e.r + return e.__rect = { + x: Math.min(i, a) - t, + y: Math.min(n, o) - t, + width: Math.abs(i - a) + t, + height: Math.abs(n - o) + t + }, e.__rect + }, isCover: e('./normalIsCover') + }, n.inherits(t, i), t + }),i('echarts/chart/funnel', ['require', './base', 'zrender/shape/Text', 'zrender/shape/Line', 'zrender/shape/Polygon', '../config', '../util/ecData', '../util/number', 'zrender/tool/util', 'zrender/tool/color', 'zrender/tool/area', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Text'), a = e('zrender/shape/Line'), o = e('zrender/shape/Polygon'), + r = e('../config') + r.funnel = { + zlevel: 0, + z: 2, + clickable: !0, + legendHoverLink: !0, + x: 80, + y: 60, + x2: 80, + y2: 60, + min: 0, + max: 100, + minSize: '0%', + maxSize: '100%', + sort: 'descending', + gap: 0, + funnelAlign: 'center', + itemStyle: { + normal: { + borderColor: '#fff', + borderWidth: 1, + label: { show: !0, position: 'outer' }, + labelLine: { show: !0, length: 10, lineStyle: { width: 1, type: 'solid' } } + }, emphasis: { borderColor: 'rgba(0,0,0,0)', borderWidth: 1, label: { show: !0 }, labelLine: { show: !0 } } + } + } + var s = e('../util/ecData'), l = e('../util/number'), h = e('zrender/tool/util'), m = e('zrender/tool/color'), + V = e('zrender/tool/area') + return t.prototype = { + type: r.CHART_TYPE_FUNNEL, _buildShape: function () { + var e = this.series, t = this.component.legend + this._paramsMap = {}, this._selected = {}, this.selectedMap = {} + for (var i, n = 0, a = e.length; a > n; n++) if (e[n].type === r.CHART_TYPE_FUNNEL) { + if (e[n] = this.reformOption(e[n]), this.legendHoverLink = e[n].legendHoverLink || this.legendHoverLink, i = e[n].name || '', this.selectedMap[i] = t ? t.isSelected(i) : !0, !this.selectedMap[i]) continue + this._buildSingleFunnel(n), this.buildMark(n) + } + this.addShapeList() + }, _buildSingleFunnel: function (e) { + var t = this.component.legend, i = this.series[e], n = this._mapData(e), a = this._getLocation(e) + this._paramsMap[e] = { location: a, data: n } + for (var o, r = 0, s = [], h = 0, m = n.length; m > h; h++) o = n[h].name, this.selectedMap[o] = t ? t.isSelected(o) : !0, this.selectedMap[o] && !isNaN(n[h].value) && (s.push(n[h]), r++) + if (0 !== r) { + for (var V, U, d, p, c = this._buildFunnelCase(e), u = i.funnelAlign, y = i.gap, g = r > 1 ? (a.height - (r - 1) * y) / r : a.height, b = a.y, f = 'descending' === i.sort ? this._getItemWidth(e, s[0].value) : l.parsePercent(i.minSize, a.width), k = 'descending' === i.sort ? 1 : 0, x = a.centerX, _ = [], h = 0, m = s.length; m > h; h++) if (o = s[h].name, this.selectedMap[o] && !isNaN(s[h].value)) { + switch (V = m - 2 >= h ? this._getItemWidth(e, s[h + k].value) : 'descending' === i.sort ? l.parsePercent(i.minSize, a.width) : l.parsePercent(i.maxSize, a.width), u) { + case'left': + U = a.x + break + case'right': + U = a.x + a.width - f + break + default: + U = x - f / 2 + } + d = this._buildItem(e, s[h]._index, t ? t.getColor(o) : this.zr.getColor(s[h]._index), U, b, f, V, g, u), b += g + y, p = d.style.pointList, _.unshift([p[0][0] - 10, p[0][1]]), _.push([p[1][0] + 10, p[1][1]]), 0 === h && (0 === f ? (p = _.pop(), 'center' == u && (_[0][0] += 10), 'right' == u && (_[0][0] = p[0]), _[0][1] -= 'center' == u ? 10 : 15, 1 == m && (p = d.style.pointList)) : (_[_.length - 1][1] -= 5, _[0][1] -= 5)), f = V + } + c && (_.unshift([p[3][0] - 10, p[3][1]]), _.push([p[2][0] + 10, p[2][1]]), 0 === f ? (p = _.pop(), 'center' == u && (_[0][0] += 10), 'right' == u && (_[0][0] = p[0]), _[0][1] += 'center' == u ? 10 : 15) : (_[_.length - 1][1] += 5, _[0][1] += 5), c.style.pointList = _) + } + }, _buildFunnelCase: function (e) { + var t = this.series[e] + if (this.deepQuery([t, this.option], 'calculable')) { + var i = this._paramsMap[e].location, n = 10, a = { + hoverable: !1, + style: { + pointListd: [[i.x - n, i.y - n], [i.x + i.width + n, i.y - n], [i.x + i.width + n, i.y + i.height + n], [i.x - n, i.y + i.height + n]], + brushType: 'stroke', + lineWidth: 1, + strokeColor: t.calculableHolderColor || this.ecTheme.calculableHolderColor || r.calculableHolderColor + } + } + return s.pack(a, t, e, void 0, -1), this.setCalculable(a), a = new o(a), this.shapeList.push(a), a + } + }, _getLocation: function (e) { + var t = this.series[e], i = this.zr.getWidth(), n = this.zr.getHeight(), a = this.parsePercent(t.x, i), + o = this.parsePercent(t.y, n), + r = null == t.width ? i - a - this.parsePercent(t.x2, i) : this.parsePercent(t.width, i) + return { + x: a, + y: o, + width: r, + height: null == t.height ? n - o - this.parsePercent(t.y2, n) : this.parsePercent(t.height, n), + centerX: a + r / 2 + } + }, _mapData: function (e) { + function t (e, t) { + return '-' === e.value ? 1 : '-' === t.value ? -1 : t.value - e.value + } + + function i (e, i) { + return -t(e, i) + } + + for (var n = this.series[e], a = h.clone(n.data), o = 0, r = a.length; r > o; o++) a[o]._index = o + return 'none' != n.sort && a.sort('descending' === n.sort ? t : i), a + }, _buildItem: function (e, t, i, n, a, o, r, l, h) { + var m = this.series, V = m[e], U = V.data[t], d = this.getPolygon(e, t, i, n, a, o, r, l, h) + s.pack(d, m[e], e, m[e].data[t], t, m[e].data[t].name), this.shapeList.push(d) + var p = this.getLabel(e, t, i, n, a, o, r, l, h) + s.pack(p, m[e], e, m[e].data[t], t, m[e].data[t].name), this.shapeList.push(p), this._needLabel(V, U, !1) || (p.invisible = !0) + var c = this.getLabelLine(e, t, i, n, a, o, r, l, h) + this.shapeList.push(c), this._needLabelLine(V, U, !1) || (c.invisible = !0) + var u = [], y = [] + return this._needLabelLine(V, U, !0) && (u.push(c.id), y.push(c.id)), this._needLabel(V, U, !0) && (u.push(p.id), y.push(d.id)), d.hoverConnect = u, p.hoverConnect = y, d + }, _getItemWidth: function (e, t) { + var i = this.series[e], n = this._paramsMap[e].location, a = i.min, o = i.max, + r = l.parsePercent(i.minSize, n.width), s = l.parsePercent(i.maxSize, n.width) + return (t - a) * (s - r) / (o - a) + r + }, getPolygon: function (e, t, i, n, a, r, s, l, h) { + var V, U = this.series[e], d = U.data[t], p = [d, U], c = this.deepMerge(p, 'itemStyle.normal') || {}, + u = this.deepMerge(p, 'itemStyle.emphasis') || {}, + y = this.getItemStyleColor(c.color, e, t, d) || i, + g = this.getItemStyleColor(u.color, e, t, d) || ('string' == typeof y ? m.lift(y, -.2) : y) + switch (h) { + case'left': + V = n + break + case'right': + V = n + (r - s) + break + default: + V = n + (r - s) / 2 + } + var b = { + zlevel: U.zlevel, + z: U.z, + clickable: this.deepQuery(p, 'clickable'), + style: { + pointList: [[n, a], [n + r, a], [V + s, a + l], [V, a + l]], + brushType: 'both', + color: y, + lineWidth: c.borderWidth, + strokeColor: c.borderColor + }, + highlightStyle: { color: g, lineWidth: u.borderWidth, strokeColor: u.borderColor } + } + return this.deepQuery([d, U, this.option], 'calculable') && (this.setCalculable(b), b.draggable = !0), new o(b) + }, getLabel: function (e, t, i, a, o, r, s, l, U) { + var d, p = this.series[e], c = p.data[t], u = this._paramsMap[e].location, + y = h.merge(h.clone(c.itemStyle) || {}, p.itemStyle), g = 'normal', b = y[g].label, + f = b.textStyle || {}, k = y[g].labelLine.length, x = this.getLabelText(e, t, g), + _ = this.getFont(f), L = i + b.position = b.position || y.normal.label.position, 'inner' === b.position || 'inside' === b.position || 'center' === b.position ? (d = U, L = Math.max(r, s) / 2 > V.getTextWidth(x, _) ? '#fff' : m.reverse(i)) : d = 'left' === b.position ? 'right' : 'left' + var W = { + zlevel: p.zlevel, + z: p.z + 1, + style: { + x: this._getLabelPoint(b.position, a, u, r, s, k, U), + y: o + l / 2, + color: f.color || L, + text: x, + textAlign: f.align || d, + textBaseline: f.baseline || 'middle', + textFont: _ + } + } + return g = 'emphasis', b = y[g].label || b, f = b.textStyle || f, k = y[g].labelLine.length || k, b.position = b.position || y.normal.label.position, x = this.getLabelText(e, t, g), _ = this.getFont(f), L = i, 'inner' === b.position || 'inside' === b.position || 'center' === b.position ? (d = U, L = Math.max(r, s) / 2 > V.getTextWidth(x, _) ? '#fff' : m.reverse(i)) : d = 'left' === b.position ? 'right' : 'left', W.highlightStyle = { + x: this._getLabelPoint(b.position, a, u, r, s, k, U), + color: f.color || L, + text: x, + textAlign: f.align || d, + textFont: _, + brushType: 'fill' + }, new n(W) + }, getLabelText: function (e, t, i) { + var n = this.series, a = n[e], o = a.data[t], + r = this.deepQuery([o, a], 'itemStyle.' + i + '.label.formatter') + return r ? 'function' == typeof r ? r.call(this.myChart, { + seriesIndex: e, + seriesName: a.name || '', + series: a, + dataIndex: t, + data: o, + name: o.name, + value: o.value + }) : 'string' == typeof r ? r = r.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{a0}', a.name).replace('{b0}', o.name).replace('{c0}', o.value) : void 0 : o.name + }, getLabelLine: function (e, t, i, n, o, r, s, l, m) { + var V = this.series[e], U = V.data[t], d = this._paramsMap[e].location, + p = h.merge(h.clone(U.itemStyle) || {}, V.itemStyle), c = 'normal', u = p[c].labelLine, + y = p[c].labelLine.length, g = u.lineStyle || {}, b = p[c].label + b.position = b.position || p.normal.label.position + var f = { + zlevel: V.zlevel, + z: V.z + 1, + hoverable: !1, + style: { + xStart: this._getLabelLineStartPoint(n, d, r, s, m), + yStart: o + l / 2, + xEnd: this._getLabelPoint(b.position, n, d, r, s, y, m), + yEnd: o + l / 2, + strokeColor: g.color || i, + lineType: g.type, + lineWidth: g.width + } + } + return c = 'emphasis', u = p[c].labelLine || u, y = p[c].labelLine.length || y, g = u.lineStyle || g, b = p[c].label || b, b.position = b.position, f.highlightStyle = { + xEnd: this._getLabelPoint(b.position, n, d, r, s, y, m), + strokeColor: g.color || i, + lineType: g.type, + lineWidth: g.width + }, new a(f) + }, _getLabelPoint: function (e, t, i, n, a, o, r) { + switch (e = 'inner' === e || 'inside' === e ? 'center' : e) { + case'center': + return 'center' == r ? t + n / 2 : 'left' == r ? t + 10 : t + n - 10 + case'left': + return 'auto' === o ? i.x - 10 : 'center' == r ? i.centerX - Math.max(n, a) / 2 - o : 'right' == r ? t - (a > n ? a - n : 0) - o : i.x - o + default: + return 'auto' === o ? i.x + i.width + 10 : 'center' == r ? i.centerX + Math.max(n, a) / 2 + o : 'right' == r ? i.x + i.width + o : t + Math.max(n, a) + o + } + }, _getLabelLineStartPoint: function (e, t, i, n, a) { + return 'center' == a ? t.centerX : n > i ? e + Math.min(i, n) / 2 : e + Math.max(i, n) / 2 + }, _needLabel: function (e, t, i) { + return this.deepQuery([t, e], 'itemStyle.' + (i ? 'emphasis' : 'normal') + '.label.show') + }, _needLabelLine: function (e, t, i) { + return this.deepQuery([t, e], 'itemStyle.' + (i ? 'emphasis' : 'normal') + '.labelLine.show') + }, refresh: function (e) { + e && (this.option = e, this.series = e.series), this.backupShapeList(), this._buildShape() + } + }, h.inherits(t, i), e('../chart').define('funnel', t), t + }),i('echarts/chart/eventRiver', ['require', './base', '../layout/eventRiver', 'zrender/shape/Polygon', '../component/axis', '../component/grid', '../component/dataZoom', '../config', '../util/ecData', '../util/date', 'zrender/tool/util', 'zrender/tool/color', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o) + var r = this + r._ondragend = function () { + r.isDragend = !0 + }, this.refresh(a) + } + + var i = e('./base'), n = e('../layout/eventRiver'), a = e('zrender/shape/Polygon') + e('../component/axis'), e('../component/grid'), e('../component/dataZoom') + var o = e('../config') + o.eventRiver = { + zlevel: 0, + z: 2, + clickable: !0, + legendHoverLink: !0, + itemStyle: { + normal: { + borderColor: 'rgba(0,0,0,0)', + borderWidth: 1, + label: { show: !0, position: 'inside', formatter: '{b}' } + }, emphasis: { borderColor: 'rgba(0,0,0,0)', borderWidth: 1, label: { show: !0 } } + } + } + var r = e('../util/ecData'), s = e('../util/date'), l = e('zrender/tool/util'), h = e('zrender/tool/color') + return t.prototype = { + type: o.CHART_TYPE_EVENTRIVER, _buildShape: function () { + var e = this.series + this.selectedMap = {}, this._dataPreprocessing() + for (var t = this.component.legend, i = [], a = 0; a < e.length; a++) if (e[a].type === this.type) { + e[a] = this.reformOption(e[a]), this.legendHoverLink = e[a].legendHoverLink || this.legendHoverLink + var o = e[a].name || '' + if (this.selectedMap[o] = t ? t.isSelected(o) : !0, !this.selectedMap[o]) continue + this.buildMark(a), i.push(this.series[a]) + } + n(i, this._intervalX, this.component.grid.getArea()), this._drawEventRiver(), this.addShapeList() + }, _dataPreprocessing: function () { + for (var e, t, i = this.series, n = 0, a = i.length; a > n; n++) if (i[n].type === this.type) { + e = this.component.xAxis.getAxis(i[n].xAxisIndex || 0) + for (var o = 0, r = i[n].data.length; r > o; o++) { + t = i[n].data[o].evolution + for (var l = 0, h = t.length; h > l; l++) t[l].timeScale = e.getCoord(s.getNewDate(t[l].time) - 0), t[l].valueScale = Math.pow(t[l].value, .8) + } + } + this._intervalX = Math.round(this.component.grid.getWidth() / 40) + }, _drawEventRiver: function () { + for (var e = this.series, t = 0; t < e.length; t++) { + var i = e[t].name || '' + if (e[t].type === this.type && this.selectedMap[i]) for (var n = 0; n < e[t].data.length; n++) this._drawEventBubble(e[t].data[n], t, n) + } + }, _drawEventBubble: function (e, t, i) { + var n = this.series, o = n[t], s = o.name || '', l = o.data[i], m = [l, o], V = this.component.legend, + U = V ? V.getColor(s) : this.zr.getColor(t), d = this.deepMerge(m, 'itemStyle.normal') || {}, + p = this.deepMerge(m, 'itemStyle.emphasis') || {}, + c = this.getItemStyleColor(d.color, t, i, l) || U, + u = this.getItemStyleColor(p.color, t, i, l) || ('string' == typeof c ? h.lift(c, -.2) : c), + y = this._calculateControlPoints(e), g = { + zlevel: o.zlevel, + z: o.z, + clickable: this.deepQuery(m, 'clickable'), + style: { + pointList: y, + smooth: 'spline', + brushType: 'both', + lineJoin: 'round', + color: c, + lineWidth: d.borderWidth, + strokeColor: d.borderColor + }, + highlightStyle: { color: u, lineWidth: p.borderWidth, strokeColor: p.borderColor }, + draggable: 'vertical', + ondragend: this._ondragend + } + g = new a(g), this.addLabel(g, o, l, e.name), r.pack(g, n[t], t, n[t].data[i], i, n[t].data[i].name), this.shapeList.push(g) + }, _calculateControlPoints: function (e) { + var t = this._intervalX, i = e.y, n = e.evolution, a = n.length + if (!(1 > a)) { + for (var o = [], r = [], s = 0; a > s; s++) o.push(n[s].timeScale), r.push(n[s].valueScale) + var l = [] + l.push([o[0], i]) + var s = 0 + for (s = 0; a - 1 > s; s++) l.push([(o[s] + o[s + 1]) / 2, r[s] / -2 + i]) + for (l.push([(o[s] + (o[s] + t)) / 2, r[s] / -2 + i]), l.push([o[s] + t, i]), l.push([(o[s] + (o[s] + t)) / 2, r[s] / 2 + i]), s = a - 1; s > 0; s--) l.push([(o[s] + o[s - 1]) / 2, r[s - 1] / 2 + i]) + return l + } + }, ondragend: function (e, t) { + this.isDragend && e.target && (t.dragOut = !0, t.dragIn = !0, t.needRefresh = !1, this.isDragend = !1) + }, refresh: function (e) { + e && (this.option = e, this.series = e.series), this.backupShapeList(), this._buildShape() + } + }, l.inherits(t, i), e('../chart').define('eventRiver', t), t + }),i('echarts/layout/eventRiver', ['require'], function () { + function e (e, i, o) { + function r (e, t) { + var i = e.importance, n = t.importance + return i > n ? -1 : n > i ? 1 : 0 + } + + for (var s = 4, l = 0; l < e.length; l++) { + for (var h = 0; h < e[l].data.length; h++) { + null == e[l].data[h].weight && (e[l].data[h].weight = 1) + for (var m = 0, V = 0; V < e[l].data[h].evolution.length; V++) m += e[l].data[h].evolution[V].valueScale + e[l].data[h].importance = m * e[l].data[h].weight + } + e[l].data.sort(r) + } + for (var l = 0; l < e.length; l++) { + null == e[l].weight && (e[l].weight = 1) + for (var m = 0, h = 0; h < e[l].data.length; h++) m += e[l].data[h].weight + e[l].importance = m * e[l].weight + } + e.sort(r) + for (var U = Number.MAX_VALUE, d = 0, l = 0; l < e.length; l++) for (var h = 0; h < e[l].data.length; h++) for (var V = 0; V < e[l].data[h].evolution.length; V++) { + var p = e[l].data[h].evolution[V].timeScale + U = Math.min(U, p), d = Math.max(d, p) + } + U = ~~U, d = ~~d + for (var c = function () { + var e = d - U + 1 + ~~i + if (0 >= e) return [0] + for (var t = []; e--;) t.push(0) + return t + }(), u = c.slice(0), y = [], g = 0, b = 0, l = 0; l < e.length; l++) for (var h = 0; h < e[l].data.length; h++) { + var f = e[l].data[h] + f.time = [], f.value = [] + for (var k, x = 0, V = 0; V < e[l].data[h].evolution.length; V++) k = e[l].data[h].evolution[V], f.time.push(k.timeScale), f.value.push(k.valueScale), x = Math.max(x, k.valueScale) + n(f, i, U), f.y = a(u, f, function (e, t) { + return e.ypx[t] + }), f._offset = a(c, f, function () { + return s + }), g = Math.max(g, f.y + x), b = Math.max(b, f._offset), y.push(f) + } + t(y, o, g, b) + } + + function t (e, t, i, n) { + for (var a = t.height, o = n / a > .5 ? .5 : 1, r = t.y, s = (t.height - n) / i, l = 0, h = e.length; h > l; l++) { + var m = e[l] + m.y = r + s * m.y + m._offset * o, delete m.time, delete m.value, delete m.xpx, delete m.ypx, delete m._offset + for (var V = m.evolution, U = 0, d = V.length; d > U; U++) V[U].valueScale *= s + } + } + + function i (e, t, i, n) { + if (e === i) throw new Error('x0 is equal with x1!!!') + if (t === n) return function () { + return t + } + var a = (t - n) / (e - i), o = (n * e - t * i) / (e - i) + return function (e) { + return a * e + o + } + } + + function n (e, t, n) { + var a = ~~t, o = e.time.length + e.xpx = [], e.ypx = [] + for (var r, s = 0, l = 0, h = 0, m = 0, V = 0; o > s; s++) { + l = ~~e.time[s], m = e.value[s] / 2, s === o - 1 ? (h = l + a, V = 0) : (h = ~~e.time[s + 1], V = e.value[s + 1] / 2), r = i(l, m, h, V) + for (var U = l; h > U; U++) e.xpx.push(U - n), e.ypx.push(r(U)) + } + e.xpx.push(h - n), e.ypx.push(V) + } + + function a (e, t, i) { + for (var n, a = 0, o = t.xpx.length, r = 0; o > r; r++) n = i(t, r), a = Math.max(a, n + e[t.xpx[r]]) + for (r = 0; o > r; r++) n = i(t, r), e[t.xpx[r]] = a + n + return a + } + + return e + }),i('echarts/chart/venn', ['require', './base', 'zrender/shape/Text', 'zrender/shape/Circle', 'zrender/shape/Path', '../config', '../util/ecData', 'zrender/tool/util', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Text'), a = e('zrender/shape/Circle'), o = e('zrender/shape/Path'), + r = e('../config') + r.venn = { zlevel: 0, z: 1, calculable: !1 } + var s = e('../util/ecData'), l = e('zrender/tool/util') + return t.prototype = { + type: r.CHART_TYPE_VENN, _buildShape: function () { + this.selectedMap = {}, this._symbol = this.option.symbolList, this._queryTarget, this._dropBoxList = [], this._vennDataCounter = 0 + for (var e = this.series, t = this.component.legend, i = 0; i < e.length; i++) if (e[i].type === r.CHART_TYPE_VENN) { + e[i] = this.reformOption(e[i]) + var n = e[i].name || '' + if (this.selectedMap[n] = t ? t.isSelected(n) : !0, !this.selectedMap[n]) continue + this._buildVenn(i) + } + this.addShapeList() + }, _buildVenn: function (e) { + var t, i, n = this.series[e], a = n.data + a[0].value > a[1].value ? (t = this.zr.getHeight() / 3, i = t * Math.sqrt(a[1].value) / Math.sqrt(a[0].value)) : (i = this.zr.getHeight() / 3, t = i * Math.sqrt(a[0].value) / Math.sqrt(a[1].value)) + var o = this.zr.getWidth() / 2 - t, + r = (t + i) / 2 * Math.sqrt(a[2].value) / Math.sqrt((a[0].value + a[1].value) / 2), s = t + i + 0 !== a[2].value && (s = this._getCoincideLength(a[0].value, a[1].value, a[2].value, t, i, r, Math.abs(t - i), t + i)) + var l = o + s, h = this.zr.getHeight() / 2 + if (this._buildItem(e, 0, a[0], o, h, t), this._buildItem(e, 1, a[1], l, h, i), 0 !== a[2].value && a[2].value !== a[0].value && a[2].value !== a[1].value) { + var m = (t * t - i * i) / (2 * s) + s / 2, V = s / 2 - (t * t - i * i) / (2 * s), + U = Math.sqrt(t * t - m * m), d = 0, p = 0 + a[0].value > a[1].value && o + m > l && (p = 1), a[0].value < a[1].value && o + V > l && (d = 1), this._buildCoincideItem(e, 2, a[2], o + m, h - U, h + U, t, i, d, p) + } + }, _getCoincideLength: function (e, t, i, n, a, o, r, s) { + var l = (n * n - a * a) / (2 * o) + o / 2, h = o / 2 - (n * n - a * a) / (2 * o), m = Math.acos(l / n), + V = Math.acos(h / a), U = n * n * Math.PI, + d = m * n * n - l * n * Math.sin(m) + V * a * a - h * a * Math.sin(V), p = d / U, c = i / e, + u = Math.abs(p / c) + return u > .999 && 1.001 > u ? o : .999 >= u ? (s = o, o = (o + r) / 2, this._getCoincideLength(e, t, i, n, a, o, r, s)) : (r = o, o = (o + s) / 2, this._getCoincideLength(e, t, i, n, a, o, r, s)) + }, _buildItem: function (e, t, i, n, a, o) { + var r = this.series, l = r[e], h = this.getCircle(e, t, i, n, a, o) + if (s.pack(h, l, e, i, t, i.name), this.shapeList.push(h), l.itemStyle.normal.label.show) { + var m = this.getLabel(e, t, i, n, a, o) + s.pack(m, l, e, l.data[t], t, l.data[t].name), this.shapeList.push(m) + } + }, _buildCoincideItem: function (e, t, i, n, a, r, l, h, m, V) { + var U = this.series, d = U[e], p = [i, d], c = this.deepMerge(p, 'itemStyle.normal') || {}, + u = this.deepMerge(p, 'itemStyle.emphasis') || {}, y = c.color || this.zr.getColor(t), + g = u.color || this.zr.getColor(t), + b = 'M' + n + ',' + a + 'A' + l + ',' + l + ',0,' + m + ',1,' + n + ',' + r + 'A' + h + ',' + h + ',0,' + V + ',1,' + n + ',' + a, + f = { color: y, path: b }, k = { + zlevel: d.zlevel, + z: d.z, + style: f, + highlightStyle: { color: g, lineWidth: u.borderWidth, strokeColor: u.borderColor } + } + k = new o(k), k.buildPathArray && (k.style.pathArray = k.buildPathArray(f.path)), s.pack(k, U[e], 0, i, t, i.name), this.shapeList.push(k) + }, getCircle: function (e, t, i, n, o, r) { + var s = this.series[e], l = [i, s], h = this.deepMerge(l, 'itemStyle.normal') || {}, + m = this.deepMerge(l, 'itemStyle.emphasis') || {}, V = h.color || this.zr.getColor(t), + U = m.color || this.zr.getColor(t), d = { + zlevel: s.zlevel, + z: s.z, + clickable: !0, + style: { x: n, y: o, r: r, brushType: 'fill', opacity: 1, color: V }, + highlightStyle: { color: U, lineWidth: m.borderWidth, strokeColor: m.borderColor } + } + return this.deepQuery([i, s, this.option], 'calculable') && (this.setCalculable(d), d.draggable = !0), new a(d) + }, getLabel: function (e, t, i, a, o, r) { + var s = this.series[e], l = s.itemStyle, h = [i, s], m = this.deepMerge(h, 'itemStyle.normal') || {}, + V = 'normal', U = l[V].label, d = U.textStyle || {}, p = this.getLabelText(t, i, V), + c = this.getFont(d), u = m.color || this.zr.getColor(t), y = d.fontSize || 12, g = { + zlevel: s.zlevel, + z: s.z, + style: { x: a, y: o - r - y, color: d.color || u, text: p, textFont: c, textAlign: 'center' } + } + return new n(g) + }, getLabelText: function (e, t, i) { + var n = this.series, a = n[0], o = this.deepQuery([t, a], 'itemStyle.' + i + '.label.formatter') + return o ? 'function' == typeof o ? o(a.name, t.name, t.value) : 'string' == typeof o ? (o = o.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}'), o = o.replace('{a0}', a.name).replace('{b0}', t.name).replace('{c0}', t.value)) : void 0 : t.name + }, refresh: function (e) { + e && (this.option = e, this.series = e.series), this._buildShape() + } + }, l.inherits(t, i), e('../chart').define('venn', t), t + }),i('echarts/chart/treemap', ['require', './base', 'zrender/tool/area', 'zrender/shape/Rectangle', 'zrender/shape/Text', 'zrender/shape/Line', '../layout/TreeMap', '../data/Tree', '../config', '../util/ecData', 'zrender/config', 'zrender/tool/event', 'zrender/tool/util', 'zrender/tool/color', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + var r = this + r._onclick = function (e) { + return r.__onclick(e) + }, r.zr.on(V.EVENT.CLICK, r._onclick) + } + + var i = e('./base'), n = e('zrender/tool/area'), a = e('zrender/shape/Rectangle'), o = e('zrender/shape/Text'), + r = e('zrender/shape/Line'), s = e('../layout/TreeMap'), l = e('../data/Tree'), h = e('../config') + h.treemap = { + zlevel: 0, + z: 1, + calculable: !1, + clickable: !0, + center: ['50%', '50%'], + size: ['80%', '80%'], + root: '', + itemStyle: { + normal: { + label: { + show: !0, + x: 5, + y: 12, + textStyle: { + align: 'left', + color: '#000', + fontFamily: 'Arial', + fontSize: 13, + fontStyle: 'normal', + fontWeight: 'normal' + } + }, + breadcrumb: { show: !0, textStyle: {} }, + borderWidth: 1, + borderColor: '#ccc', + childBorderWidth: 1, + childBorderColor: '#ccc' + }, emphasis: {} + } + } + var m = e('../util/ecData'), V = e('zrender/config'), U = (e('zrender/tool/event'), e('zrender/tool/util')), + d = e('zrender/tool/color') + return t.prototype = { + type: h.CHART_TYPE_TREEMAP, refresh: function (e) { + this.clear(), e && (this.option = e, this.series = this.option.series), this._treesMap = {} + for (var t = this.series, i = this.component.legend, n = 0; n < t.length; n++) if (t[n].type === h.CHART_TYPE_TREEMAP) { + t[n] = this.reformOption(t[n]) + var a = t[n].name || '' + if (this.selectedMap[a] = i ? i.isSelected(a) : !0, !this.selectedMap[a]) continue + this._buildSeries(t[n], n) + } + }, _buildSeries: function (e, t) { + var i = l.fromOptionData(e.name, e.data) + this._treesMap[t] = i + var n = e.root && i.getNodeById(e.root) || i.root + this._buildTreemap(n, t) + }, _buildTreemap: function (e, t) { + for (var i = this.shapeList, n = 0; n < i.length;) { + var a = i[n] + m.get(a, 'seriesIndex') === t ? (this.zr.delShape(i[n]), i.splice(n, 1)) : n++ + } + for (var o = i.length, r = this.series[t], l = r.itemStyle, h = this.parsePercent(r.size[0], this.zr.getWidth()) || 400, V = this.parsePercent(r.size[1], this.zr.getHeight()) || 500, U = this.parseCenter(this.zr, r.center), d = U[0] - .5 * h, p = U[1] - .5 * V, c = h * V, u = 0, y = [], g = e.children, n = 0; n < g.length; n++) u += g[n].data.value + for (var b = 0; b < g.length; b++) y.push(g[b].data.value * c / u) + for (var f = new s({ x: d, y: p, width: h, height: V }), k = f.run(y), x = 0; x < k.length; x++) { + var _ = g[x].data, L = k[x], W = [_.itemStyle, l], X = this.deepMerge(W) + X.normal.color || (X.normal.color = this.zr.getColor(x)), X.emphasis.color || (X.emphasis.color = X.normal.color), this._buildItem(_, X, L, t, x), _.children && this._buildChildrenTreemap(_.children, X, L, t) + } + this.query(r, 'itemStyle.normal.breadcrumb.show') && this._buildBreadcrumb(e, t, d, p + V) + for (var n = o; n < i.length; n++) this.zr.addShape(i[n]) + }, _buildItem: function (e, t, i, n, a) { + var o = this.series, r = this.getRectangle(e, t, i) + m.pack(r, o[n], n, e, a, e.name), this.shapeList.push(r) + }, getRectangle: function (e, t, i) { + var n = t.emphasis, o = t.normal, r = this.getLabel(t, i, e.name, e.value), s = this.option.hoverable, + l = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: s, + clickable: !0, + style: U.merge({ + x: i.x, + y: i.y, + width: i.width, + height: i.height, + brushType: 'both', + color: o.color, + lineWidth: o.borderWidth, + strokeColor: o.borderColor + }, r.style, !0), + highlightStyle: U.merge({ + color: n.color, + lineWidth: n.borderWidth, + strokeColor: n.borderColor + }, r.highlightStyle, !0) + } + return new a(l) + }, getLabel: function (e, t, i, a) { + var o = e.normal.label.textStyle, r = [e.emphasis.label.textStyle, o], s = this.deepMerge(r), + l = e.normal.label.formatter, h = this.getLabelText(i, a, l), m = this.getFont(o), + V = n.getTextWidth(h, m), U = n.getTextHeight(h, m), + d = this.deepQuery([e.emphasis, e.normal], 'label.formatter'), p = this.getLabelText(i, a, d), + c = this.getFont(s), u = n.getTextWidth(h, c), y = n.getTextHeight(h, c) + e.normal.label.show ? (e.normal.label.x + V > t.width || e.normal.label.y + U > t.height) && (h = '') : h = '', e.emphasis.label.show ? (s.x + u > t.width || s.y + y > t.height) && (p = '') : p = '' + var g = { + style: { + textX: t.x + e.normal.label.x, + textY: t.y + e.normal.label.y, + text: h, + textPosition: 'specific', + textColor: o.color, + textFont: m + }, + highlightStyle: { + textX: t.x + e.emphasis.label.x, + textY: t.y + e.emphasis.label.y, + text: p, + textColor: s.color, + textPosition: 'specific' + } + } + return g + }, getLabelText: function (e, t, i) { + return i ? 'function' == typeof i ? i.call(this.myChart, e, t) : 'string' == typeof i ? (i = i.replace('{b}', '{b0}').replace('{c}', '{c0}'), i = i.replace('{b0}', e).replace('{c0}', t)) : void 0 : e + }, _buildChildrenTreemap: function (e, t, i, n) { + for (var a = i.width * i.height, o = 0, r = [], l = 0; l < e.length; l++) o += e[l].value + for (var h = 0; h < e.length; h++) r.push(e[h].value * a / o) + for (var V = new s({ + x: i.x, + y: i.y, + width: i.width, + height: i.height + }), U = V.run(r), d = t.normal.childBorderWidth, p = t.normal.childBorderColor, c = 0; c < U.length; c++) { + var u = U[c], y = [] + i.y.toFixed(2) !== u.y.toFixed(2) && y.push(this._getLine(u.x, u.y, u.x + u.width, u.y, d, p)), i.x.toFixed(2) !== u.x.toFixed(2) && y.push(this._getLine(u.x, u.y, u.x, u.y + u.height, d, p)), (i.y + i.height).toFixed(2) !== (u.y + u.height).toFixed(2) && y.push(this._getLine(u.x, u.y + u.height, u.x + u.width, u.y + u.height, d, p)), (i.x + i.width).toFixed(2) !== (u.x + u.width).toFixed(2) && y.push(this._getLine(u.x + u.width, u.y, u.x + u.width, u.y + u.height, d, p)) + for (var g = 0; g < y.length; g++) m.set(y[g], 'seriesIndex', n), this.shapeList.push(y[g]) + } + }, _getLine: function (e, t, i, n, a, o) { + var s = { + zlevel: this.getZlevelBase(), + z: this.getZBase(), + hoverable: !1, + style: { xStart: e, yStart: t, xEnd: i, yEnd: n, lineWidth: a, strokeColor: o } + } + return new r(s) + }, _buildBreadcrumb: function (e, t, i, n) { + for (var a = [], r = e; r;) a.unshift(r.data.name), r = r.parent + for (var s = this.series[t], l = this.query(s, 'itemStyle.normal.breadcrumb.textStyle') || {}, h = this.query(s, 'itemStyle.emphasis.breadcrumb.textStyle') || {}, V = { + y: n + 10, + textBaseline: 'top', + textAlign: 'left', + color: l.color, + textFont: this.getFont(l) + }, p = { + brushType: 'fill', + color: h.color || d.lift(l.color, -.3), + textFont: this.getFont(h) + }, c = 0; c < a.length; c++) { + var u = new o({ + zlevel: this.getZlevelBase(), + z: this.getZBase(), + style: U.merge({ x: i, text: a[c] + (a.length - 1 - c ? ' > ' : '') }, V), + clickable: !0, + highlightStyle: p + }) + m.set(u, 'seriesIndex', t), m.set(u, 'name', a[c]), i += u.getRect(u.style).width, this.shapeList.push(u) + } + }, __onclick: function (e) { + var t = e.target + if (t) { + var i = m.get(t, 'seriesIndex'), n = m.get(t, 'name'), a = this._treesMap[i], o = a.getNodeById(n) + o && o.children.length && this._buildTreemap(o, i) + } + } + }, U.inherits(t, i), e('../chart').define('treemap', t), t + }),i('echarts/layout/TreeMap', ['require'], function () { + function e (e) { + ({ x: e.x, y: e.y, width: e.width, height: e.height }) + this.x = e.x, this.y = e.y, this.width = e.width, this.height = e.height + } + + return e.prototype.run = function (e) { + var t = [] + return this._squarify(e, { x: this.x, y: this.y, width: this.width, height: this.height }, t), t + }, e.prototype._squarify = function (e, t, i) { + var n = 'VERTICAL', a = t.width, o = t.height + t.width < t.height && (n = 'HORIZONTAL', a = t.height, o = t.width) + for (var r = this._getShapeListInAbstractRow(e, a, o), s = 0; s < r.length; s++) { + r[s].x = 0, r[s].y = 0 + for (var l = 0; s > l; l++) r[s].y += r[l].height + } + var h = {} + if ('VERTICAL' == n) { + for (var m = 0; m < r.length; m++) i.push({ + x: r[m].x + t.x, + y: r[m].y + t.y, + width: r[m].width, + height: r[m].height + }) + h = { x: r[0].width + t.x, y: t.y, width: t.width - r[0].width, height: t.height } + } else { + for (var V = 0; V < r.length; V++) i.push({ + x: r[V].y + t.x, + y: r[V].x + t.y, + width: r[V].height, + height: r[V].width + }) + h = { x: t.x, y: t.y + r[0].width, width: t.width, height: t.height - r[0].width } + } + var U = e.slice(r.length) + 0 !== U.length && this._squarify(U, h, i) + }, e.prototype._getShapeListInAbstractRow = function (e, t, i) { + if (1 === e.length) return [{ width: t, height: i }] + for (var n = 1; n < e.length; n++) { + var a = this._placeFixedNumberRectangles(e.slice(0, n), t, i), + o = this._placeFixedNumberRectangles(e.slice(0, n + 1), t, i) + if (this._isFirstBetter(a, o)) return a + } + }, e.prototype._placeFixedNumberRectangles = function (e, t, i) { + for (var n = e.length, a = [], o = 0, r = 0; r < e.length; r++) o += e[r] + for (var s = o / i, l = 0; n > l; l++) { + var h = i * e[l] / o + a.push({ width: s, height: h }) + } + return a + }, e.prototype._isFirstBetter = function (e, t) { + var i = e[0].height / e[0].width + i = i > 1 ? 1 / i : i + var n = t[0].height / t[0].width + return n = n > 1 ? 1 / n : n, Math.abs(i - 1) <= Math.abs(n - 1) ? !0 : !1 + }, e + }),i('echarts/data/Tree', ['require', 'zrender/tool/util'], function (e) { + function t (e, t) { + this.id = e, this.depth = 0, this.height = 0, this.children = [], this.parent = null, this.data = t || null + } + + function i (e) { + this.root = new t(e) + } + + var n = e('zrender/tool/util') + return t.prototype.add = function (e) { + var t = this.children + e.parent !== this && (t.push(e), e.parent = this) + }, t.prototype.remove = function (e) { + var t = this.children, i = n.indexOf(t, e) + i >= 0 && (t.splice(i, 1), e.parent = null) + }, t.prototype.traverse = function (e, t) { + e.call(t, this) + for (var i = 0; i < this.children.length; i++) this.children[i].traverse(e, t) + }, t.prototype.updateDepthAndHeight = function (e) { + var t = 0 + this.depth = e + for (var i = 0; i < this.children.length; i++) { + var n = this.children[i] + n.updateDepthAndHeight(e + 1), n.height > t && (t = n.height) + } + this.height = t + 1 + }, t.prototype.getNodeById = function (e) { + if (this.id === e) return this + for (var t = 0; t < this.children.length; t++) { + var i = this.children[t].getNodeById(e) + if (i) return i + } + }, i.prototype.traverse = function (e, t) { + this.root.traverse(e, t) + }, i.prototype.getSubTree = function (e) { + var t = this.getNodeById(e) + if (t) { + var n = new i(t.id) + return n.root = t, n + } + }, i.prototype.getNodeById = function (e) { + return this.root.getNodeById(e) + }, i.fromOptionData = function (e, n) { + function a (e, i) { + var n = new t(e.name, e) + i.add(n) + var o = e.children + if (o) for (var r = 0; r < o.length; r++) a(o[r], n) + } + + var o = new i(e), r = o.root + r.data = { name: e, children: n } + for (var s = 0; s < n.length; s++) a(n[s], r) + return o.root.updateDepthAndHeight(0), o + }, i.fromGraph = function (e) { + function n (t) { + for (var i = e.getNodeById(t.id), a = 0; a < i.outEdges.length; a++) { + var r = i.outEdges[a], s = o[r.node2.id] + t.children.push(s), n(s) + } + } + + for (var a = {}, o = {}, r = 0; r < e.nodes.length; r++) { + var s, l = e.nodes[r] + 0 === l.inDegree() ? (a[l.id] = new i(l.id), s = a[l.id].root) : s = new t(l.id), s.data = l.data, o[l.id] = s + } + var h = [] + for (var m in a) n(a[m].root), a[m].root.updateDepthAndHeight(0), h.push(a[m]) + return h + }, i + }),i('echarts/chart/tree', ['require', './base', '../util/shape/Icon', 'zrender/shape/Image', 'zrender/shape/Line', 'zrender/shape/BezierCurve', '../layout/Tree', '../data/Tree', '../config', '../util/ecData', 'zrender/config', 'zrender/tool/event', 'zrender/tool/util', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = .618, a = e('../util/shape/Icon'), o = e('zrender/shape/Image'), + r = e('zrender/shape/Line'), s = e('zrender/shape/BezierCurve'), l = e('../layout/Tree'), + h = e('../data/Tree'), m = e('../config') + m.tree = { + zlevel: 1, + z: 2, + calculable: !1, + clickable: !0, + rootLocation: {}, + orient: 'vertical', + symbol: 'circle', + symbolSize: 20, + nodePadding: 30, + layerPadding: 100, + itemStyle: { + normal: { label: { show: !0 }, lineStyle: { width: 1, color: '#777', type: 'curve' } }, + emphasis: {} + } + } + var V = e('../util/ecData'), U = (e('zrender/config'), e('zrender/tool/event'), e('zrender/tool/util')) + return t.prototype = { + type: m.CHART_TYPE_TREE, _buildShape: function (e, t) { + var i = e.data[0] + this.tree = h.fromOptionData(i.name, i.children), this.tree.root.data = i, this._setTreeShape(e), this.tree.traverse(function (i) { + this._buildItem(i, e, t), i.children.length > 0 && this._buildLink(i, e) + }, this) + var n = e.roam === !0 || 'move' === e.roam, a = e.roam === !0 || 'scale' === e.roam + this.zr.modLayer(this.getZlevelBase(), { + panable: n, + zoomable: a + }), (this.query('markPoint.effect.show') || this.query('markLine.effect.show')) && this.zr.modLayer(m.EFFECT_ZLEVEL, { + panable: n, + zoomable: a + }), this.addShapeList() + }, _buildItem: function (e, t, i) { + var n = [e.data, t], r = this.deepQuery(n, 'symbol'), s = this.deepMerge(n, 'itemStyle.normal') || {}, + l = this.deepMerge(n, 'itemStyle.emphasis') || {}, h = s.color || this.zr.getColor(), + m = l.color || this.zr.getColor(), U = -e.layout.angle || 0 + e.id === this.tree.root.id && (U = 0) + var d = 'right' + Math.abs(U) >= Math.PI / 2 && Math.abs(U) < 3 * Math.PI / 2 && (U += Math.PI, d = 'left') + var p = [U, e.layout.position[0], e.layout.position[1]], c = new a({ + zlevel: this.getZlevelBase(), + z: this.getZBase() + 1, + rotation: p, + clickable: this.deepQuery(n, 'clickable'), + style: { + x: e.layout.position[0] - .5 * e.layout.width, + y: e.layout.position[1] - .5 * e.layout.height, + width: e.layout.width, + height: e.layout.height, + iconType: r, + color: h, + brushType: 'both', + lineWidth: s.borderWidth, + strokeColor: s.borderColor + }, + highlightStyle: { color: m, lineWidth: l.borderWidth, strokeColor: l.borderColor } + }) + c.style.iconType.match('image') && (c.style.image = c.style.iconType.replace(new RegExp('^image:\\/\\/'), ''), c = new o({ + rotation: p, + style: c.style, + highlightStyle: c.highlightStyle, + clickable: c.clickable, + zlevel: this.getZlevelBase(), + z: this.getZBase() + })), this.deepQuery(n, 'itemStyle.normal.label.show') && (c.style.text = null == e.data.label ? e.id : e.data.label, c.style.textPosition = this.deepQuery(n, 'itemStyle.normal.label.position'), 'radial' === t.orient && 'inside' !== c.style.textPosition && (c.style.textPosition = d), c.style.textColor = this.deepQuery(n, 'itemStyle.normal.label.textStyle.color'), c.style.textFont = this.getFont(this.deepQuery(n, 'itemStyle.normal.label.textStyle') || {})), this.deepQuery(n, 'itemStyle.emphasis.label.show') && (c.highlightStyle.textPosition = this.deepQuery(n, 'itemStyle.emphasis.label.position'), c.highlightStyle.textColor = this.deepQuery(n, 'itemStyle.emphasis.label.textStyle.color'), c.highlightStyle.textFont = this.getFont(this.deepQuery(n, 'itemStyle.emphasis.label.textStyle') || {})), V.pack(c, t, i, e.data, 0, e.id), this.shapeList.push(c) + }, _buildLink: function (e, t) { + var i = t.itemStyle.normal.lineStyle + if ('broken' === i.type) return void this._buildBrokenLine(e, i, t) + for (var n = 0; n < e.children.length; n++) { + var a = e.layout.position[0], o = e.layout.position[1], r = e.children[n].layout.position[0], + s = e.children[n].layout.position[1] + switch (i.type) { + case'curve': + this._buildBezierCurve(e, e.children[n], i, t) + break + case'broken': + break + default: + var l = this._getLine(a, o, r, s, i) + this.shapeList.push(l) + } + } + }, _buildBrokenLine: function (e, t, i) { + var a = U.clone(t) + a.type = 'solid' + var o = [], r = e.layout.position[0], s = e.layout.position[1], l = i.orient, + h = e.children[0].layout.position[1], m = r, V = s + (h - s) * (1 - n), + d = e.children[0].layout.position[0], p = V, + c = e.children[e.children.length - 1].layout.position[0], u = V + if ('horizontal' === l) { + var y = e.children[0].layout.position[0] + m = r + (y - r) * (1 - n), V = s, d = m, p = e.children[0].layout.position[1], c = m, u = e.children[e.children.length - 1].layout.position[1] + } + o.push(this._getLine(r, s, m, V, a)), o.push(this._getLine(d, p, c, u, a)) + for (var g = 0; g < e.children.length; g++) y = e.children[g].layout.position[0], h = e.children[g].layout.position[1], 'horizontal' === l ? p = h : d = y, o.push(this._getLine(d, p, y, h, a)) + this.shapeList = this.shapeList.concat(o) + }, _getLine: function (e, t, i, n, a) { + return e === i && (e = i = this.subPixelOptimize(e, a.width)), t === n && (t = n = this.subPixelOptimize(t, a.width)), new r({ + zlevel: this.getZlevelBase(), + hoverable: !1, + style: U.merge({ + xStart: e, + yStart: t, + xEnd: i, + yEnd: n, + lineType: a.type, + strokeColor: a.color, + lineWidth: a.width + }, a, !0) + }) + }, _buildBezierCurve: function (e, t, i, a) { + var o = n, r = a.orient, l = e.layout.position[0], h = e.layout.position[1], m = t.layout.position[0], + V = t.layout.position[1], d = l, p = (V - h) * o + h, c = m, u = (V - h) * (1 - o) + h + if ('horizontal' === r) d = (m - l) * o + l, p = h, c = (m - l) * (1 - o) + l, u = V else if ('radial' === r) if (e.id === this.tree.root.id) d = (m - l) * o + l, p = (V - h) * o + h, c = (m - l) * (1 - o) + l, u = (V - h) * (1 - o) + h else { + var y = e.layout.originPosition[0], g = e.layout.originPosition[1], b = t.layout.originPosition[0], + f = t.layout.originPosition[1], k = this.tree.root.layout.position[0], + x = this.tree.root.layout.position[1] + d = y, p = (f - g) * o + g, c = b, u = (f - g) * (1 - o) + g + var _ = (d - this.minX) / this.width * Math.PI * 2 + d = p * Math.cos(_) + k, p = p * Math.sin(_) + x, _ = (c - this.minX) / this.width * Math.PI * 2, c = u * Math.cos(_) + k, u = u * Math.sin(_) + x + } + var L = new s({ + zlevel: this.getZlevelBase(), + hoverable: !1, + style: U.merge({ + xStart: l, + yStart: h, + cpX1: d, + cpY1: p, + cpX2: c, + cpY2: u, + xEnd: m, + yEnd: V, + strokeColor: i.color, + lineWidth: i.width + }, i, !0) + }) + this.shapeList.push(L) + }, _setTreeShape: function (e) { + var t = new l({ nodePadding: e.nodePadding, layerPadding: e.layerPadding }) + this.tree.traverse(function (t) { + var i = [t.data, e], n = this.deepQuery(i, 'symbolSize') + 'number' == typeof n && (n = [n, n]), t.layout = { width: n[0], height: n[1] } + }, this), t.run(this.tree) + var i = e.orient, n = e.rootLocation.x, a = e.rootLocation.y, o = this.zr.getWidth(), + r = this.zr.getHeight() + n = 'center' === n ? .5 * o : this.parsePercent(n, o), a = 'center' === a ? .5 * r : this.parsePercent(a, r), a = this.parsePercent(a, r), 'horizontal' === i && (n = isNaN(n) ? 10 : n, a = isNaN(a) ? .5 * r : a), 'radial' === i ? (n = isNaN(n) ? .5 * o : n, a = isNaN(a) ? .5 * r : a) : (n = isNaN(n) ? .5 * o : n, a = isNaN(a) ? 10 : a) + var s = this.tree.root.layout.position[0] + if ('radial' === i) { + var h = 1 / 0, m = 0, V = 0 + this.tree.traverse(function (e) { + m = Math.max(m, e.layout.position[0]), h = Math.min(h, e.layout.position[0]), V = Math.max(V, e.layout.width) + }), this.width = m - h + 2 * V, this.minX = h + } + this.tree.traverse(function (t) { + var o, r + if ('vertical' === i && 'inverse' === e.direction) o = t.layout.position[0] - s + n, r = a - t.layout.position[1] else if ('vertical' === i) o = t.layout.position[0] - s + n, r = t.layout.position[1] + a else if ('horizontal' === i && 'inverse' === e.direction) r = t.layout.position[0] - s + a, o = n - t.layout.position[1] else if ('horizontal' === i) r = t.layout.position[0] - s + a, o = t.layout.position[1] + n else { + o = t.layout.position[0], r = t.layout.position[1], t.layout.originPosition = [o, r] + var l = r, m = (o - h) / this.width * Math.PI * 2 + o = l * Math.cos(m) + n, r = l * Math.sin(m) + a, t.layout.angle = m + } + t.layout.position[0] = o, t.layout.position[1] = r + }, this) + }, refresh: function (e) { + this.clear(), e && (this.option = e, this.series = this.option.series) + for (var t = this.series, i = this.component.legend, n = 0; n < t.length; n++) if (t[n].type === m.CHART_TYPE_TREE) { + t[n] = this.reformOption(t[n]) + var a = t[n].name || '' + if (this.selectedMap[a] = i ? i.isSelected(a) : !0, !this.selectedMap[a]) continue + this._buildSeries(t[n], n) + } + }, _buildSeries: function (e, t) { + this._buildShape(e, t) + } + }, U.inherits(t, i), e('../chart').define('tree', t), t + }),i('echarts/layout/Tree', ['require', 'zrender/tool/vector'], function (e) { + function t (e) { + e = e || {}, this.nodePadding = e.nodePadding || 30, this.layerPadding = e.layerPadding || 100, this._layerOffsets = [], this._layers = [] + } + + var i = e('zrender/tool/vector') + return t.prototype.run = function (e) { + this._layerOffsets.length = 0 + for (var t = 0; t < e.root.height + 1; t++) this._layerOffsets[t] = 0, this._layers[t] = [] + this._updateNodeXPosition(e.root) + var i = e.root + this._updateNodeYPosition(i, 0, i.layout.height) + }, t.prototype._updateNodeXPosition = function (e) { + var t = 1 / 0, n = -(1 / 0) + e.layout.position = e.layout.position || i.create() + for (var a = 0; a < e.children.length; a++) { + var o = e.children[a] + this._updateNodeXPosition(o) + var r = o.layout.position[0] + t > r && (t = r), r > n && (n = r) + } + e.layout.position[0] = e.children.length > 0 ? (t + n) / 2 : 0 + var s = this._layerOffsets[e.depth] || 0 + if (s > e.layout.position[0]) { + var l = s - e.layout.position[0] + this._shiftSubtree(e, l) + for (var a = e.depth + 1; a < e.height + e.depth; a++) this._layerOffsets[a] += l + } + this._layerOffsets[e.depth] = e.layout.position[0] + e.layout.width + this.nodePadding, this._layers[e.depth].push(e) + }, t.prototype._shiftSubtree = function (e, t) { + e.layout.position[0] += t + for (var i = 0; i < e.children.length; i++) this._shiftSubtree(e.children[i], t) + }, t.prototype._updateNodeYPosition = function (e, t, i) { + e.layout.position[1] = t + for (var n = 0, a = 0; a < e.children.length; a++) n = Math.max(e.children[a].layout.height, n) + var o = this.layerPadding + 'function' == typeof o && (o = o(e.depth)) + for (var a = 0; a < e.children.length; a++) this._updateNodeYPosition(e.children[a], t + o + i, n) + }, t + }),i('echarts/chart/wordCloud', ['require', './base', 'zrender/shape/Text', '../layout/WordCloud', '../component/grid', '../component/dataRange', '../config', '../util/ecData', 'zrender/tool/util', 'zrender/tool/color', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = e('zrender/shape/Text'), a = e('../layout/WordCloud') + e('../component/grid'), e('../component/dataRange') + var o = e('../config'), r = e('../util/ecData'), s = e('zrender/tool/util'), l = e('zrender/tool/color') + return o.wordCloud = { + zlevel: 0, + z: 2, + clickable: !0, + center: ['50%', '50%'], + size: ['40%', '40%'], + textRotation: [0, 90], + textPadding: 0, + autoSize: { enable: !0, minSize: 12 }, + itemStyle: { + normal: { + textStyle: { + fontSize: function (e) { + return e.value + } + } + } + } + }, t.prototype = { + type: o.CHART_TYPE_WORDCLOUD, refresh: function (e) { + e && (this.option = e, this.series = e.series), this._init() + }, _init: function () { + var e = this.series + this.backupShapeList() + for (var t = this.component.legend, i = 0; i < e.length; i++) if (e[i].type === o.CHART_TYPE_WORDCLOUD) { + e[i] = this.reformOption(e[i]) + var n = e[i].name || '' + if (this.selectedMap[n] = t ? t.isSelected(n) : !0, !this.selectedMap[n]) continue + this.buildMark(i), this._initSerie(e[i]) + } + }, _initSerie: function (e) { + var t = e.itemStyle.normal.textStyle, + i = [this.parsePercent(e.size[0], this.zr.getWidth()) || 200, this.parsePercent(e.size[1], this.zr.getHeight()) || 200], + n = this.parseCenter(this.zr, e.center), o = { + size: i, + wordletype: { autoSizeCal: e.autoSize }, + center: n, + rotate: e.textRotation, + padding: e.textPadding, + font: t.fontFamily, + fontSize: t.fontSize, + fontWeight: t.fontWeight, + fontStyle: t.fontStyle, + text: function (e) { + return e.name + }, + data: e.data + }, r = new a(o), s = this + r.end(function (e) { + s._buildShapes(e) + }), r.start() + }, _buildShapes: function (e) { + for (var t = e.length, i = 0; t > i; i++) this._buildTextShape(e[i], 0, i) + this.addShapeList() + }, _buildTextShape: function (e, t, i) { + var a = this.series, o = a[t], s = o.name || '', h = o.data[i], m = [h, o], V = this.component.legend, + U = V ? V.getColor(s) : this.zr.getColor(t), d = this.deepMerge(m, 'itemStyle.normal') || {}, + p = this.deepMerge(m, 'itemStyle.emphasis') || {}, + c = this.getItemStyleColor(d.color, t, i, h) || U, + u = this.getItemStyleColor(p.color, t, i, h) || ('string' == typeof c ? l.lift(c, -.2) : c), + y = new n({ + zlevel: o.zlevel, + z: o.z, + hoverable: !0, + clickable: this.deepQuery(m, 'clickable'), + style: { + x: 0, + y: 0, + text: e.text, + color: c, + textFont: [e.style, e.weight, e.size + 'px', e.font].join(' '), + textBaseline: 'alphabetic', + textAlign: 'center' + }, + highlightStyle: { + brushType: p.borderWidth ? 'both' : 'fill', + color: u, + lineWidth: p.borderWidth || 0, + strokeColor: p.borderColor + }, + position: [e.x, e.y], + rotation: [-e.rotate / 180 * Math.PI, 0, 0] + }) + r.pack(y, o, t, h, i, h.name), this.shapeList.push(y) + } + }, s.inherits(t, i), e('../chart').define('wordCloud', t), t + }),i('echarts/layout/WordCloud', ['require', '../layout/WordCloudRectZero', 'zrender/tool/util'], function (e) { + function t (e) { + this._init(e) + } + + var i = e('../layout/WordCloudRectZero'), n = e('zrender/tool/util') + return t.prototype = { + start: function () { + function e () { + p.totalArea = r, U.autoSizeCal.enable && p._autoCalTextSize(m, r, a, o, U.autoSizeCal.minSize), V.timer && clearInterval(V.timer), V.timer = setInterval(t, 0), t() + } + + function t () { + for (var e, t = +new Date, i = m.length; +new Date - t < V.timeInterval && ++s < i && V.timer;) e = m[s], e.x = d[0] >> 1, e.y = d[1] >> 1, p._cloudSprite(e, m, s), e.hasText && p._place(n, e, h) && (l.push(e), e.x -= d[0] >> 1, e.y -= d[1] >> 1) + s >= i && (p.stop(), p._fixTagPosition(l), V.endcallback(l)) + } + + var n = null, a = 0, o = 0, r = 0, s = -1, l = [], h = null, m = this.wordsdata, V = this.defaultOption, + U = V.wordletype, d = V.size, p = this, c = new i({ type: U.type, width: d[0], height: d[1] }) + return c.calculate(function (t) { + n = t.initarr, a = t.maxWit, o = t.maxHit, r = t.area, h = t.imgboard, e() + }, this), this + }, _fixTagPosition: function (e) { + for (var t = this.defaultOption.center, i = 0, n = e.length; n > i; i++) e[i].x += t[0], e[i].y += t[1] + }, stop: function () { + return this.defaultOption.timer && (clearInterval(this.defaultOption.timer), this.defaultOption.timer = null), this + }, end: function (e) { + return e && (this.defaultOption.endcallback = e), this + }, _init: function (e) { + this.defaultOption = {}, this._initProperty(e), this._initMethod(e), this._initCanvas(), this._initData(e.data) + }, _initData: function (e) { + var t = this, i = t.defaultOption + this.wordsdata = e.map(function (e, n) { + return e.text = i.text.call(t, e, n), e.font = i.font.call(t, e, n), e.style = i.fontStyle.call(t, e, n), e.weight = i.fontWeight.call(t, e, n), e.rotate = i.rotate.call(t, e, n), e.size = ~~i.fontSize.call(t, e, n), e.padding = i.padding.call(t, e, n), e + }).sort(function (e, t) { + return t.value - e.value + }) + }, _initMethod: function (e) { + function t (e) { + return e.name + } + + function i () { + return 'sans-serif' + } + + function n () { + return 'normal' + } + + function a (e) { + return e.value + } + + function o () { + return 0 + } + + function r (e) { + return function () { + return e[Math.round(Math.random() * (e.length - 1))] + } + } + + function s () { + return 0 + } + + function l (e) { + var t = e[0] / e[1] + return function (e) { + return [t * (e *= .1) * Math.cos(e), e * Math.sin(e)] + } + } + + function h (e) { + var t = 4, i = t * e[0] / e[1], n = 0, a = 0 + return function (e) { + var o = 0 > e ? -1 : 1 + switch (Math.sqrt(1 + 4 * o * e) - o & 3) { + case 0: + n += i + break + case 1: + a += t + break + case 2: + n -= i + break + default: + a -= t + } + return [n, a] + } + } + + function m (e) { + return 'function' == typeof e ? e : function () { + return e + } + } + + var V = this.defaultOption + V.text = e.text ? m(e.text) : t, V.font = e.font ? m(e.font) : i, V.fontSize = e.fontSize ? m(e.fontSize) : a, V.fontStyle = e.fontStyle ? m(e.fontStyle) : n, V.fontWeight = e.fontWeight ? m(e.fontWeight) : n, V.rotate = e.rotate ? r(e.rotate) : o, V.padding = e.padding ? m(e.padding) : s, V.center = e.center, V.spiral = l, V.endcallback = function () { + }, V.rectangularSpiral = h, V.archimedeanSpiral = l + }, _initProperty: function (e) { + var t = this.defaultOption + t.size = e.size || [256, 256], t.wordletype = e.wordletype, t.words = e.words || [], t.timeInterval = 1 / 0, t.timer = null, t.spirals = { + archimedean: t.archimedeanSpiral, + rectangular: t.rectangularSpiral + }, n.merge(t, { + size: [256, 256], + wordletype: { type: 'RECT', areaPresent: .058, autoSizeCal: { enable: !0, minSize: 12 } } + }) + }, _initCanvas: function () { + var e, t = Math.PI / 180, i = 64, n = 2048, a = 1 + 'undefined' != typeof document ? (e = document.createElement('canvas'), e.width = 1, e.height = 1, a = Math.sqrt(e.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2), e.width = (i << 5) / a, e.height = n / a) : e = new Canvas(i << 5, n) + var o = e.getContext('2d') + o.fillStyle = o.strokeStyle = 'red', o.textAlign = 'center', this.defaultOption.c = o, this.defaultOption.cw = i, this.defaultOption.ch = n, this.defaultOption.ratio = a, this.defaultOption.cloudRadians = t + }, _cloudSprite: function (e, t, i) { + if (!e.sprite) { + var n = this.defaultOption.cw, a = this.defaultOption.ch, o = this.defaultOption.c, + r = this.defaultOption.ratio, s = this.defaultOption.cloudRadians + o.clearRect(0, 0, (n << 5) / r, a / r) + var l = 0, h = 0, m = 0, V = t.length + for (--i; ++i < V;) { + e = t[i], o.save(), o.font = e.style + ' ' + e.weight + ' ' + ~~((e.size + 1) / r) + 'px ' + e.font + var U = o.measureText(e.text + 'm').width * r, d = e.size << 1 + if (e.rotate) { + var p = Math.sin(e.rotate * s), c = Math.cos(e.rotate * s), u = U * c, y = U * p, g = d * c, + b = d * p + U = Math.max(Math.abs(u + b), Math.abs(u - b)) + 31 >> 5 << 5, d = ~~Math.max(Math.abs(y + g), Math.abs(y - g)) + } else U = U + 31 >> 5 << 5 + if (d > m && (m = d), l + U >= n << 5 && (l = 0, h += m, m = 0), h + d >= a) break + o.translate((l + (U >> 1)) / r, (h + (d >> 1)) / r), e.rotate && o.rotate(e.rotate * s), o.fillText(e.text, 0, 0), e.padding && (o.lineWidth = 2 * e.padding, o.strokeText(e.text, 0, 0)), o.restore(), e.width = U, e.height = d, e.xoff = l, e.yoff = h, e.x1 = U >> 1, e.y1 = d >> 1, e.x0 = -e.x1, e.y0 = -e.y1, e.hasText = !0, l += U + } + for (var f = o.getImageData(0, 0, (n << 5) / r, a / r).data, k = []; --i >= 0;) if (e = t[i], e.hasText) { + for (var U = e.width, x = U >> 5, d = e.y1 - e.y0, _ = 0; d * x > _; _++) k[_] = 0 + if (l = e.xoff, null == l) return + h = e.yoff + for (var L = 0, W = -1, X = 0; d > X; X++) { + for (var _ = 0; U > _; _++) { + var v = x * X + (_ >> 5), + w = f[(h + X) * (n << 5) + (l + _) << 2] ? 1 << 31 - _ % 32 : 0 + k[v] |= w, L |= w + } + L ? W = X : (e.y0++, d--, X--, h++) + } + e.y1 = e.y0 + W, e.sprite = k.slice(0, (e.y1 - e.y0) * x) + } + } + }, _place: function (e, t, i) { + function n (e, t, i) { + i >>= 5 + for (var n, a = e.sprite, o = e.width >> 5, r = e.x - (o << 4), s = 127 & r, l = 32 - s, h = e.y1 - e.y0, m = (e.y + e.y0) * i + (r >> 5), V = 0; h > V; V++) { + n = 0 + for (var U = 0; o >= U; U++) if ((n << l | (o > U ? (n = a[V * o + U]) >>> s : 0)) & t[m + U]) return !0 + m += i + } + return !1 + } + + function a (e, t) { + return t.row[e.y] && t.cloumn[e.x] && e.x >= t.row[e.y].start && e.x <= t.row[e.y].end && e.y >= t.cloumn[e.x].start && e.y <= t.cloumn[e.x].end + } + + for (var o, r, s, l = this.defaultOption.size, h = ([{ x: 0, y: 0 }, { + x: l[0], + y: l[1] + }], t.x), m = t.y, V = Math.sqrt(l[0] * l[0] + l[1] * l[1]), U = this.defaultOption.spiral(l), d = Math.random() < .5 ? 1 : -1, p = -d; (o = U(p += d)) && (r = ~~o[0], s = ~~o[1], !(Math.min(r, s) > V));) if (t.x = h + r, t.y = m + s, !(t.x + t.x0 < 0 || t.y + t.y0 < 0 || t.x + t.x1 > l[0] || t.y + t.y1 > l[1]) && !n(t, e, l[0]) && a(t, i)) { + for (var c, u = t.sprite, y = t.width >> 5, g = l[0] >> 5, b = t.x - (y << 4), f = 127 & b, k = 32 - f, x = t.y1 - t.y0, _ = (t.y + t.y0) * g + (b >> 5), L = 0; x > L; L++) { + c = 0 + for (var W = 0; y >= W; W++) e[_ + W] |= c << k | (y > W ? (c = u[L * y + W]) >>> f : 0) + _ += g + } + return delete t.sprite, !0 + } + return !1 + }, _autoCalTextSize: function (e, t, i, n, a) { + function o (e) { + c.clearRect(0, 0, (d << 5) / u, p / u), c.save(), c.font = e.style + ' ' + e.weight + ' ' + ~~((e.size + 1) / u) + 'px ' + e.font + var t = c.measureText(e.text + 'm').width * u, r = e.size << 1 + t = t + 31 >> 5 << 5, c.restore(), e.aw = t, e.ah = r + var s, l, h + if (e.rotate) { + var m = Math.sin(e.rotate * y), V = Math.cos(e.rotate * y), g = t * V, b = t * m, f = r * V, + k = r * m + l = Math.max(Math.abs(g + k), Math.abs(g - k)) + 31 >> 5 << 5, h = ~~Math.max(Math.abs(b + f), Math.abs(b - f)) + } + return e.size <= U || e.rotate && t * r <= e.area && i >= l && n >= h || t * r <= e.area && i >= t && n >= r ? void (e.area = t * r) : (s = e.rotate && l > i && h > n ? Math.min(i / l, n / h) : t > i || r > n ? Math.min(i / t, n / r) : Math.sqrt(e.area / (e.aw * e.ah)), e.size = ~~(s * e.size), e.size < a ? void (e.size = a) : o(e)) + } + + function r (e, t) { + for (var i = e.length, n = 0; i--;) n += t(e[i]) + return n + } + + for (var s, l, h = r(e, function (e) { + return e.size + }), m = e.length, V = .25, U = a, d = this.defaultOption.cw, p = this.defaultOption.ch, c = this.defaultOption.c, u = this.defaultOption.ratio, y = this.defaultOption.cloudRadians; m--;) s = e[m], l = s.size / h, s.areapre = V ? V > l ? l : V : l, s.area = t * s.areapre, s.totalarea = t, o(s) + } + }, t + }),i('echarts/layout/WordCloudRectZero', ['require'], function () { + function e (e) { + this.defaultOption = { type: 'RECT' }, this._init(e) + } + + return e.prototype = { + RECT: '_calculateRect', _init: function (e) { + this._initOption(e), this._initCanvas() + }, _initOption: function (e) { + for (k in e) this.defaultOption[k] = e[k] + }, _initCanvas: function () { + var e = document.createElement('canvas') + e.width = 1, e.height = 1 + var t = Math.sqrt(e.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2) + if (e.width = this.defaultOption.width, e.height = this.defaultOption.height, e.getContext) var i = e.getContext('2d') + this.canvas = e, this.ctx = i, this.ratio = t + }, calculate: function (e, t) { + var i = this.defaultOption.type, n = this[i] + this[n].call(this, e, t) + }, _calculateReturn: function (e, t, i) { + t.call(i, e) + }, _calculateRect: function (e, t) { + var i = {}, n = this.defaultOption.width >> 5 << 5, a = this.defaultOption.height + i.initarr = this._rectZeroArray(n * a), i.area = n * a, i.maxHit = a, i.maxWit = n, i.imgboard = this._rectBoard(n, a), this._calculateReturn(i, e, t) + }, _rectBoard: function (e, t) { + for (var i = [], n = 0; t > n; n++) i.push({ y: n, start: 0, end: e }) + for (var a = [], n = 0; e > n; n++) a.push({ x: n, start: 0, end: t }) + return { row: i, cloumn: a } + }, _rectZeroArray: function (e) { + for (var t = [], i = e, n = -1; ++n < i;) t[n] = 0 + return t + } + }, e + }),i('echarts/chart/heatmap', ['require', './base', '../layer/heatmap', '../config', '../util/ecData', 'zrender/tool/util', 'zrender/tool/color', 'zrender/shape/Image', '../chart'], function (e) { + function t (e, t, n, a, o) { + i.call(this, e, t, n, a, o), this.refresh(a) + } + + var i = e('./base'), n = e('../layer/heatmap'), a = e('../config'), + o = (e('../util/ecData'), e('zrender/tool/util')), r = (e('zrender/tool/color'), e('zrender/shape/Image')) + return a.heatmap = { zlevel: 0, z: 2, clickable: !0 }, t.prototype = { + type: a.CHART_TYPE_HEATMAP, + refresh: function (e) { + this.clear(), e && (this.option = e, this.series = e.series), this._init() + }, + _init: function () { + var e = this.series + this.backupShapeList() + for (var t = e.length, i = 0; t > i; ++i) if (e[i].type === a.CHART_TYPE_HEATMAP) { + e[i] = this.reformOption(e[i]) + var o = new n(e[i]), s = o.getCanvas(e[i].data, this.zr.getWidth(), this.zr.getHeight()), + l = new r({ + position: [0, 0], + scale: [1, 1], + hoverable: this.option.hoverable, + style: { x: 0, y: 0, image: s, width: s.width, height: s.height } + }) + this.shapeList.push(l) + } + this.addShapeList() + } + }, o.inherits(t, i), e('../chart').define('heatmap', t), t + }) + var n = t('zrender') + n.tool = { + color: t('zrender/tool/color'), + math: t('zrender/tool/math'), + util: t('zrender/tool/util'), + vector: t('zrender/tool/vector'), + area: t('zrender/tool/area'), + event: t('zrender/tool/event') + }, n.animation = { + Animation: t('zrender/animation/Animation'), + Cip: t('zrender/animation/Clip'), + easing: t('zrender/animation/easing') + } + var a = t('echarts') + a.config = t('echarts/config'), a.util = { mapData: { params: t('echarts/util/mapData/params') } }, t('echarts/chart/line'), t('echarts/chart/bar'), t('echarts/chart/scatter'), t('echarts/chart/k'), t('echarts/chart/pie'), t('echarts/chart/radar'), t('echarts/chart/chord'), t('echarts/chart/force'), t('echarts/chart/map'), t('echarts/chart/gauge'), t('echarts/chart/funnel'), t('echarts/chart/eventRiver'), t('echarts/chart/venn'), t('echarts/chart/treemap'), t('echarts/chart/tree'), t('echarts/chart/wordCloud'), t('echarts/chart/heatmap'), e.echarts = a, e.zrender = n +}(window) + +layui.define('echartsTheme', function (exports) { + exports('echarts', echarts) +}) \ No newline at end of file diff --git a/public/res/modules/echartsTheme.js b/public/res/modules/echartsTheme.js new file mode 100644 index 00000000..a2a5aa17 --- /dev/null +++ b/public/res/modules/echartsTheme.js @@ -0,0 +1,261 @@ +/** + * Set echarts theme + */ + +layui.define(function (exports) { + exports('echartsTheme', { + // 默认色板 + color: [ + '#16baaa', '#1E9FFF', '#16b777', '#FFB980', '#D87A80', + '#8d98b3', '#e5cf0d', '#97b552', '#95706d', '#dc69aa', + '#07a2a4', '#9a7fd1', '#588dd5', '#f5994e', '#c05050', + '#59678c', '#c9ab00', '#7eb00a', '#6f5553', '#c14089' + ], + + // 图表标题 + title: { + textStyle: { + fontWeight: 'normal', + color: '#5F5F5F' // 主标题文字颜色 + } + }, + + // 值域 + dataRange: { + itemWidth: 15, + color: ['#16baaa', '#e0ffff'] + }, + + // 工具箱 + toolbox: { + color: ['#1e90ff', '#1e90ff', '#1e90ff', '#1e90ff'], + effectiveColor: '#ff4500' + }, + + // 提示框 + tooltip: { + backgroundColor: 'rgba(50,50,50,0.5)', // 提示背景颜色,默认为透明度为0.7的黑色 + axisPointer: { // 坐标轴指示器,坐标轴触发有效 + type: 'line', // 默认为直线,可选为:'line' | 'shadow' + lineStyle: { // 直线指示器样式设置 + color: '#16baaa' + }, + crossStyle: { + color: '#008acd' + }, + shadowStyle: { // 阴影指示器样式设置 + color: 'rgba(200,200,200,0.2)' + } + } + }, + + // 区域缩放控制器 + dataZoom: { + dataBackgroundColor: '#efefff', // 数据背景颜色 + fillerColor: 'rgba(182,162,222,0.2)', // 填充颜色 + handleColor: '#008acd' // 手柄颜色 + }, + + // 网格 + grid: { + borderColor: '#eee' + }, + + // 类目轴 - X轴 + categoryAxis: { + axisLine: { // 坐标轴线 + lineStyle: { // 属性lineStyle控制线条样式 + color: '#16baaa' + } + }, + axisTick: { //小标记 + show: false + }, + splitLine: { // 分隔线 + lineStyle: { // 属性lineStyle(详见lineStyle)控制线条样式 + color: ['#eee'] + } + } + }, + + // 数值型坐标轴默认参数 - Y轴 + valueAxis: { + axisLine: { // 坐标轴线 + lineStyle: { // 属性lineStyle控制线条样式 + color: '#16baaa' + } + }, + splitArea: { + show: true, + areaStyle: { + color: ['rgba(250,250,250,0.1)', 'rgba(200,200,200,0.1)'] + } + }, + splitLine: { // 分隔线 + lineStyle: { // 属性lineStyle(详见lineStyle)控制线条样式 + color: ['#eee'] + } + } + }, + + polar: { + axisLine: { // 坐标轴线 + lineStyle: { // 属性lineStyle控制线条样式 + color: '#ddd' + } + }, + splitArea: { + show: true, + areaStyle: { + color: ['rgba(250,250,250,0.2)', 'rgba(200,200,200,0.2)'] + } + }, + splitLine: { + lineStyle: { + color: '#ddd' + } + } + }, + + timeline: { + lineStyle: { + color: '#16baaa' + }, + controlStyle: { + normal: { color: '#16baaa' }, + emphasis: { color: '#16baaa' } + }, + symbol: 'emptyCircle', + symbolSize: 3 + }, + + // 柱形图默认参数 + bar: { + itemStyle: { + normal: { + barBorderRadius: 2 + }, + emphasis: { + barBorderRadius: 2 + } + } + }, + + // 折线图默认参数 + line: { + smooth: true, + symbol: 'emptyCircle', // 拐点图形类型 + symbolSize: 3 // 拐点图形大小 + }, + + // K线图默认参数 + k: { + itemStyle: { + normal: { + color: '#d87a80', // 阳线填充颜色 + color0: '#2ec7c9', // 阴线填充颜色 + lineStyle: { + color: '#d87a80', // 阳线边框颜色 + color0: '#2ec7c9' // 阴线边框颜色 + } + } + } + }, + + // 散点图默认参数 + scatter: { + symbol: 'circle', // 图形类型 + symbolSize: 4 // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2 + }, + + // 雷达图默认参数 + radar: { + symbol: 'emptyCircle', // 图形类型 + symbolSize: 3 + //symbol: null, // 拐点图形类型 + //symbolRotate : null, // 图形旋转控制 + }, + + map: { + itemStyle: { + normal: { + areaStyle: { + color: '#ddd' + }, + label: { + textStyle: { + color: '#d87a80' + } + } + }, + emphasis: { // 也是选中样式 + areaStyle: { + color: '#fe994e' + } + } + } + }, + + force: { + itemStyle: { + normal: { + linkStyle: { + color: '#1e90ff' + } + } + } + }, + + chord: { + itemStyle: { + normal: { + borderWidth: 1, + borderColor: 'rgba(128, 128, 128, 0.5)', + chordStyle: { + lineStyle: { + color: 'rgba(128, 128, 128, 0.5)' + } + } + }, + emphasis: { + borderWidth: 1, + borderColor: 'rgba(128, 128, 128, 0.5)', + chordStyle: { + lineStyle: { + color: 'rgba(128, 128, 128, 0.5)' + } + } + } + } + }, + + gauge: { + axisLine: { // 坐标轴线 + lineStyle: { // 属性lineStyle控制线条样式 + color: [[0.2, '#2ec7c9'], [0.8, '#5ab1ef'], [1, '#d87a80']], + width: 10 + } + }, + axisTick: { // 坐标轴小标记 + splitNumber: 10, // 每份split细分多少段 + length: 15, // 属性length控制线长 + lineStyle: { // 属性lineStyle控制线条样式 + color: 'auto' + } + }, + splitLine: { // 分隔线 + length: 22, // 属性length控制线长 + lineStyle: { // 属性lineStyle(详见lineStyle)控制线条样式 + color: 'auto' + } + }, + pointer: { + width: 5 + } + }, + + textStyle: { + fontFamily: '微软雅黑, Arial, Verdana, sans-serif' + } + }) +}) \ No newline at end of file diff --git a/public/res/modules/forum.js b/public/res/modules/forum.js new file mode 100644 index 00000000..11a61b2c --- /dev/null +++ b/public/res/modules/forum.js @@ -0,0 +1,119 @@ +/** + * forum demo + */ + +layui.define(['table', 'form'], function (exports) { + var $ = layui.$ + , admin = layui.admin + , view = layui.view + , table = layui.table + , form = layui.form + + //帖子管理 + table.render({ + elem: '#LAY-app-forum-list' + , url: './res/json/forum/list.js' //模拟接口 + , cols: [[ + { type: 'checkbox', fixed: 'left' } + , { field: 'id', width: 100, title: 'ID', sort: true } + , { field: 'poster', title: '发帖人' } + , { field: 'avatar', title: '头像', width: 100, templet: '#imgTpl' } + , { field: 'content', title: '发帖内容' } + , { field: 'posttime', title: '发帖时间', sort: true } + , { field: 'top', title: '置顶', templet: '#buttonTpl', minWidth: 80, align: 'center' } + , { title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#table-forum-list' } + ]] + , page: true + , limit: 10 + , limits: [10, 15, 20, 25, 30] + , text: '对不起,加载出现异常!' + }) + + //工具条 + table.on('tool(LAY-app-forum-list)', function (obj) { + var data = obj.data + if (obj.event === 'del') { + layer.confirm('确定删除此条帖子?', function (index) { + obj.del() + layer.close(index) + }) + } else if (obj.event === 'edit') { + admin.popup({ + title: '编辑帖子' + , area: ['550px', '450px'] + , id: 'LAY-popup-forum-edit' + , resize: false + , success: function (layero, index) { + view(this.id).render('app/forum/listform', data).done(function () { + form.render(null, 'layuiadmin-form-list') + + //提交 + form.on('submit(layuiadmin-app-forum-submit)', function (data) { + var field = data.field //获取提交的字段 + + //提交 Ajax 成功后,关闭当前弹层并重载表格 + //$.ajax({}); + layui.table.reload('LAY-app-forum-list') //重载表格 + layer.close(index) //执行关闭 + }) + }) + } + }) + } + }) + + //回帖管理 + table.render({ + elem: '#LAY-app-forumreply-list' + , url: './res/json/forum/replys.js' //模拟接口 + , cols: [[ + { type: 'checkbox', fixed: 'left' } + , { field: 'id', width: 100, title: 'ID', sort: true } + , { field: 'replyer', title: '回帖人' } + , { field: 'cardid', title: '回帖ID', sort: true } + , { field: 'avatar', title: '头像', width: 100, templet: '#imgTpl' } + , { field: 'content', title: '回帖内容', width: 200 } + , { field: 'replytime', title: '回帖时间', sort: true } + , { title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#table-forum-replys' } + ]] + , page: true + , limit: 10 + , limits: [10, 15, 20, 25, 30] + , text: '对不起,加载出现异常!' + }) + + //工具条 + table.on('tool(LAY-app-forumreply-list)', function (obj) { + var data = obj.data + if (obj.event === 'del') { + layer.confirm('确定删除此条评论?', function (index) { + obj.del() + layer.close(index) + }) + } else if (obj.event === 'edit') { + admin.popup({ + title: '编辑回帖' + , area: ['550px', '400px'] + , id: 'LAY-popup-forum-edit' + , resize: false + , success: function (layero, index) { + view(this.id).render('app/forum/replysform', data).done(function () { + form.render(null, 'layuiadmin-app-forum-reply') + + //提交 + form.on('submit(layuiadmin-app-forumreply-submit)', function (data) { + var field = data.field //获取提交的字段 + + //提交 Ajax 成功后,关闭当前弹层并重载表格 + //$.ajax({}); + layui.table.reload('LAY-app-forumreply-list') //重载表格 + layer.close(index) //执行关闭 + }) + }) + } + }) + } + }) + + exports('forum', {}) +}) \ No newline at end of file diff --git a/public/res/modules/layim/layim.js b/public/res/modules/layim/layim.js new file mode 100644 index 00000000..64b4f327 --- /dev/null +++ b/public/res/modules/layim/layim.js @@ -0,0 +1 @@ +/** The Web UI Theme-v3.9.9 */;layui.define(["layer","laytpl","upload"],function(O){function a(){this.v=t,m("body").on("click","*[layim-event]",function(a){var i=m(this),e=i.attr("layim-event");N[e]&&N[e].call(this,i,a)})}function s(a){return(a=a||{}).item=a.item||"d."+a.type,["{{# var length = 0; layui.each("+a.item+", function(i, data){ length++; }}",'
      • {{= data.username||data.groupname||data.name||"\u4f5a\u540d" }}

        {{= data.remark||data.sign||"" }}

        new
      • ',"{{# }); if(length === 0){ }}",'
      • '+({friend:"\u8be5\u5206\u7ec4\u4e0b\u6682\u65e0\u597d\u53cb",group:"\u6682\u65e0\u7fa4\u7ec4",history:"\u6682\u65e0\u5386\u53f2\u4f1a\u8bdd"}[a.type]||"\u6682\u65e0\u6570\u636e")+"
      • ","{{# } }}"].join("")}function i(a){return a<10?"0"+(0|a):a}function c(a,i,e){m.ajax({url:(a=a||{}).url,type:a.type||"get",data:a.data,dataType:a.dataType||"json",headers:a.headers||{},cache:!1,success:function(a){0==a.code?i&&i(a.data||{}):f.msg(a.msg||(e||"Error")+": LAYIM_NOT_GET_DATA",{time:5e3})},error:function(a,i){window.console&&console.log&&console.error("LAYIM_DATE_ERROR\uff1a"+i)}})}function n(){var a={username:C.mine?C.mine.username:"\u8bbf\u5ba2",avatar:C.mine?C.mine.avatar:C.base.defaultAvatar,id:C.mine?C.mine.id:null,mine:!0},i=z(),e=i.elem.find(".layim-chat-main ul"),t=C.base.maxLength||3e3;if(a.content=i.textarea.val(),""!==a.content.replace(/\s/g,"")){if(a.content.length>t)return f.msg("\u5185\u5bb9\u6700\u957f\u4e0d\u80fd\u8d85\u8fc7"+t+"\u4e2a\u5b57\u7b26");e.append(p(w).render(a));var n={mine:a,to:i.data},t={username:n.mine.username,avatar:n.mine.avatar||C.base.defaultAvatar,id:n.to.id,type:n.to.type,content:n.mine.content,timestamp:(new Date).getTime(),mine:!0};X(t),layui.each(b.sendMessage,function(a,i){i&&i(n)})}E(),i.textarea.val("").focus()}function l(a,i){var e,t=a.value;a.focus(),document.selection?(e=document.selection.createRange(),document.selection.empty(),e.text=i):(e=[t.substring(0,a.selectionStart),i,t.substr(a.selectionEnd)],a.focus(),a.value=e.join(""))}var o,e,r,d,u,y,t="3.9.9",m=layui.$,f=layui.layer,p=layui.laytpl,h=layui.device(),v="layui-show",g="layim-this",b={},_=(a.prototype.config=function(a){var e=[];if(layui.each(Array(5),function(a){e.push(layui.cache.layimResPath+"skin/"+(a+1)+".jpg")}),(a=a||{}).skin=a.skin||[],layui.each(a.skin,function(a,i){e.unshift(i)}),a.skin=e,a=m.extend({isfriend:!0,isgroup:!0,voice:"default.mp3",defaultAvatar:a.defaultAvatar||layui.cache.layimResPath+"images/default.png"},a),window.JSON&&window.JSON.parse)return D(a),this},a.prototype.on=function(a,i){return"function"==typeof i&&(b[a]?b[a].push(i):b[a]=[i]),this},a.prototype.cache=function(){return C},a.prototype.chat=function(a){if(window.JSON&&window.JSON.parse)return A(a),this},a.prototype.setChatMin=function(){return L(),this},a.prototype.setChatStatus=function(a){var i=z();if(i)return i.elem.find(".layim-chat-status").html(a),this},a.prototype.getMessage=function(a){return R(a),this},a.prototype.notice=function(a){return V(a),this},a.prototype.add=function(a){return T(a),this},a.prototype.setFriendGroup=function(a){return T(a,"setGroup"),this},a.prototype.msgbox=function(a){return U(a),this},a.prototype.addList=function(a){return Z(a),this},a.prototype.removeList=function(a){return Q(a),this},a.prototype.setFriendStatus=function(a,i){m(".layim-friend"+a)["online"===i?"removeClass":"addClass"]("layim-list-gray")},a.prototype.content=function(a){return layui.data.content(a)},['
        ','
        ','
        {{= d.mine.username }}
        ','
        ','{{# if(d.mine.status === "online"){ }}','','{{# } else if(d.mine.status === "hide") { }}','',"{{# } }}",'
          ','
        • \u5728\u7ebf
        • ','
        • \u9690\u8eab
        • ',"
        ","
        ",'',"
        ",'
          ','
        • ','
        • ','
        • ',"
        ",'
          ','{{# layui.each(d.friend, function(index, item){ var spread = d.local["spread"+index]; }}',"
        • ",'
          {{# if(spread === "true"){ }}{{# } else { }}{{# } }}{{= item.groupname||"\u672a\u547d\u540d\u5206\u7ec4"+index }}( {{= (item.list||[]).length }})
          ','
            ',s({type:"friend",item:"item.list",index:"index"}),"
          ","
        • ","{{# }); if(d.friend.length === 0){ }}",'
          • \u6682\u65e0\u8054\u7cfb\u4eba
          ',"{{# } }}","
        ",'
          ',"
        • ",'
            ',s({type:"group"}),"
          ","
        • ","
        ",'
          ',"
        • ",'
            ',s({type:"history"}),"
          ","
        • ","
        ",'
          ',"
        • ",'',"
        • ","
        ",'
          ','',"{{# if(d.base.msgbox){ }}",'
        • ',"{{# } }}","{{# if(d.base.find){ }}",'
        • ',"{{# } }}",'
        • ',"{{# if(!d.base.copyright){ }}",'
        • ',"{{# } }}","
        ",'',"
        "].join("")),q=['
          ',"{{# layui.each(d.skin, function(index, item){ }}",'
        • ',"{{# }); }}",'
        • \u7b80\u7ea6
        • ',"
        "].join(""),x=['
        ','
        ','
        ','{{= d.data.name||"\u4f5a\u540d" }} {{=d.data.temporary ? "\u4e34\u65f6\u4f1a\u8bdd" : ""}} {{# if(d.data.type==="group"){ }} {{# } }}','',"
        ","
        ",'
        ',"
          ","
          ",'","
          "].join(""),$=['
          ','

          {{= d.data.name||"" }}

          ','
          ','{{# if(d.data.type === "friend" && d.type === "setGroup"){ }}',"

          \u9009\u62e9\u5206\u7ec4

          ",'{{# } if(d.data.type === "friend"){ }}','","{{# } }}",'{{# if(d.data.type === "group"){ }}',"

          \u8bf7\u8f93\u5165\u9a8c\u8bc1\u4fe1\u606f

          ",'{{# } if(d.type !== "setGroup"){ }}','',"{{# } }}","
          ","
          "].join(""),w=['
        • ','
          ',"{{# if(d.mine){ }}",'{{= layui.data.date(d.timestamp) }}{{= d.username||"\u4f5a\u540d" }}',"{{# } else { }}",'{{= d.username||"\u4f5a\u540d" }}{{= layui.data.date(d.timestamp) }}',"{{# } }}","
          ",'
          {{- layui.data.content(d.content||" ") }}
          ',"
        • "].join(""),k='
        • {{= d.data.name||"\u4f5a\u540d" }}{{# if(!d.base.brief){ }}{{# } }}
        • ',C=(layui.data.date=function(a){a=new Date(a||new Date);return a.getFullYear()+"-"+i(a.getMonth()+1)+"-"+i(a.getDate())+" "+i(a.getHours())+":"+i(a.getMinutes())+":"+i(a.getSeconds())},layui.data.content=function(a){function i(a){return new RegExp("\\n*\\["+(a||"")+"(code|pre|div|span|p|table|thead|th|tbody|tr|td|ul|li|ol|li|dl|dt|dd|h2|h3|h4|h5)([\\s\\S]*?)\\]\\n*","g")}return a=(a||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(/@(\S+)(\s+?|$)/g,'@$1$2').replace(/img\[([^\s]+?)\]/g,function(a){return''}).replace(/file\([\s\S]+?\)\[[\s\S]*?\]/g,function(a){var i=(a.match(/file\(([\s\S]+?)\)\[/)||[])[1],e=(a.match(/\)\[([\s\S]*?)\]/)||[])[1];return i?''+(e||i)+"":a}).replace(/audio\[([^\s]+?)\]/g,function(a){return'

          \u97f3\u9891\u6d88\u606f

          '}).replace(/video\[([^\s]+?)\]/g,function(a){return'
          '}).replace(/a\([\s\S]+?\)\[[\s\S]*?\]/g,function(a){var i=(a.match(/a\(([\s\S]+?)\)\[/)||[])[1],e=(a.match(/\)\[([\s\S]*?)\]/)||[])[1];return i?''+(e||i)+"":a}).replace(i(),"<$1 $2>").replace(i("/"),"").replace(/\n/g,"
          ")},{message:{},chat:[]}),D=function(n){var a=n.init||{};if(mine=a.mine||{},local=layui.data("layim")[mine.id]||{},obj={base:n,local:local,mine:mine,history:local.history||{}},create=function(a){var i=a.mine||{},e=layui.data("layim")[i.id]||{},t={base:n,local:e,mine:i,friend:a.friend||[],group:a.group||[],history:e.history||{}};C=m.extend(C,t),J(p(_).render(t)),(e.close||n.min)&&S(),layui.each(b.ready,function(a,i){i&&i(t)})},C=m.extend(C,obj),n.brief)return layui.each(b.ready,function(a,i){i&&i(obj)});a.url?c(a,create,"INIT"):create(a)},J=function(a){return f.open({type:1,area:["260px","518px"],skin:"layui-box layui-layim",title:"​",offset:"rb",id:"layui-layim",shade:!1,anim:2,resize:!1,content:a,success:function(a){P(o=a),C.base.right&&a.css("margin-left","-"+C.base.right),e&&f.close(e.attr("times"));var i=[],a=a.find(".layim-list-history");a.find("li").each(function(){i.push(m(this).prop("outerHTML"))}),0
        • \u79fb\u9664\u8be5\u4f1a\u8bdd
        • \u6e05\u7a7a\u5168\u90e8\u4f1a\u8bdd\u5217\u8868
        • ';i.hasClass("layim-null")||(f.tips(e,this,{tips:1,time:0,anim:5,fixed:!0,skin:"layui-box layui-layim-contextmenu",success:function(a){function i(a){I(a)}a.off("mousedown",i).on("mousedown",i)}}),m(document).off("mousedown",t).on("mousedown",t),m(window).off("resize",t).on("resize",t))})},S=function(a){return e&&f.close(e.attr("times")),o&&o.hide(),C.mine=C.mine||{},f.open({type:1,title:!1,id:"layui-layim-close",skin:"layui-box layui-layim-min layui-layim-close",shade:!1,closeBtn:!1,anim:2,offset:"rb",resize:!1,content:''+(a||C.base.title||"\u6211\u7684 IM")+"",move:"#layui-layim-close img",success:function(a,i){e=a,C.base.right&&a.css("margin-left","-"+C.base.right),a.on("click",function(){f.close(i),o.show();var a=layui.data("layim")[C.mine.id]||{};delete a.close,layui.data("layim",{key:C.mine.id,value:a})})}})},A=function(t){t=t||{};var a,i,e,n=m("#layui-layim-chat"),l={data:t,base:C.base,local:C.local};if(!t.id)return f.msg("\u975e\u6cd5\u7528\u6237");if(n[0])return i=(a=r.find(".layim-chat-list")).find(".layim-chatlist-"+t.type+t.id),e=r.find(".layui-layer-max").hasClass("layui-layer-maxmin"),n=n.children(".layim-chat-box"),"none"===r.css("display")&&r.show(),d&&f.close(d.attr("times")),1!==a.find("li").length||i[0]||(e||r.addClass("layui-layim-chat-more").css("width",800),a.css({height:r.height()}).show(),n.css("margin-left","200px"),u&&u.offset()),i[0]||(a.append(p(k).render(l)),n.append(p(x).render(l)),G(t),H()),j(a.find(".layim-chatlist-"+t.type+t.id)),i[0]||W(),Y(t),aa(),y;l.first=!0;var s=y=f.open({type:1,area:"600px",skin:"layui-box layui-layim-chat",id:"layui-layim-chat",title:"​",shade:!1,maxmin:!0,offset:t.offset||"auto",anim:t.anim||0,closeBtn:!C.base.brief&&1,content:p('
            '+k+'
          '+x+"
          ").render(l),success:function(a,i,e){u=e,(r=a).css({"min-width":"500px","min-height":"450px"}),G(t),"function"==typeof t.success&&t.success(a),aa(),P(a),Y(t),W(),K(),layui.each(b.chatChange,function(a,i){i&&i(z())}),a.on("dblclick",".layui-layim-photos",function(){var a=this.src;f.close(A.photosIndex),f.photos({photos:{data:[{alt:"\u5927\u56fe\u6a21\u5f0f",src:a}]},shade:.01,closeBtn:2,anim:0,resize:!1,success:function(a,i){A.photosIndex=i}})})},full:function(a){f.style(s,{width:"100%",height:"100%"},!0),H()},resizing:H,restore:H,min:function(){return L(),!1},end:function(){f.closeAll("tips"),r=null}});return s},G=function(a){m(".layim-"+a.type+a.id).each(function(){m(this).hasClass("layim-list-gray")&&layui.layim.setFriendStatus(a.id,"offline")})},H=function(){var a=r.find(".layim-chat-list"),i=r.find(".layim-chat-main"),e=r.height();a.css({height:e}),i.css({height:e-52-158})},L=function(e){var a=e||z().data,t=layui.layim.cache().base;r&&!e&&r.hide(),f.close(L.index),L.index=f.open({type:1,title:!1,skin:"layui-box layui-layim-min",shade:!1,closeBtn:!1,anim:a.anim||2,offset:"b",move:"#layui-layim-min",resize:!1,area:["182px","52px"],content:''+a.name+"",success:function(a,i){e||(d=a),t.minRight&&f.style(i,{left:m(window).width()-a.outerWidth()-parseFloat(t.minRight)}),a.find(".layui-layer-content span").on("click",function(){f.close(i),e?layui.each(C.chat,function(a,i){A(i)}):r.show(),e&&(C.chat=[],E())}),a.find(".layui-layer-content img").on("click",function(a){I(a)})}})},T=function(t,n){return t=t||{},f.close(T.index),T.index=f.open({type:1,area:"430px",title:{friend:"\u6dfb\u52a0\u597d\u53cb",group:"\u52a0\u5165\u7fa4\u7ec4"}[t.type]||"",shade:!1,resize:!1,btn:n?["\u786e\u8ba4","\u53d6\u6d88"]:["\u53d1\u9001\u7533\u8bf7","\u5173\u95ed"],content:p($).render({data:{name:t.username||t.groupname,avatar:t.avatar||C.base.defaultAvatar,group:t.group||parent.layui.layim.cache().friend||[],type:t.type},type:n}),yes:function(a,i){var e=i.find("#LAY_layimGroup"),i=i.find("#LAY_layimRemark");n?t.submit&&t.submit(e.val(),a):t.submit&&t.submit(e.val(),i.val(),a)}})},j=function(a,i){var e=-1===(a=a||m(".layim-chat-list ."+g)).index()?0:a.index(),t=".layim-chat",n=r.find(t).eq(e),l=r.find(".layui-layer-max").hasClass("layui-layer-maxmin");if(i)return a.hasClass(g)&&j(0===e?a.next():a.prev()),1===(i=r.find(t).length)?f.close(y):(a.remove(),n.remove(),2===i&&(r.find(".layim-chat-list").hide(),l||r.removeClass("layui-layim-chat-more").css("width","600px"),r.find(".layim-chat-box").css("margin-left",0),u&&u.offset()),!1);a.addClass(g).siblings().removeClass(g),n.addClass(v).siblings(t).removeClass(v),n.find("textarea").focus(),layui.each(b.chatChange,function(a,i){i&&i(z())}),K()},K=function(){var a=z();C.message[a.data.type+a.data.id]&&delete C.message[a.data.type+a.data.id]},z=a.prototype.thisChat=function(){var a,i;if(r)return a=m(".layim-chat-list ."+g).index(),a=r.find(".layim-chat").eq(a),i=JSON.parse(decodeURIComponent(a.find(".layim-chat-tool").data("json"))),{elem:a,data:i,textarea:a.find("textarea")}},P=function(a){var i=(layui.data("layim")[C.mine.id]||{}).skin;a.css({"background-image":i?"url("+i+")":C.base.initSkin?"url("+layui.cache.layimResPath+"skin/"+C.base.initSkin+")":"none"})},Y=function(a){var i,e=layui.data("layim")[C.mine.id]||{},t={},n=e.history||{},l=n[a.type+a.id];o&&(i=o.find(".layim-list-history"),a.historyTime=(new Date).getTime(),n[a.type+a.id]=a,e.history=n,layui.data("layim",{key:C.mine.id,value:e}),l||(t[a.type+a.id]=a,n=p(s({type:"history",item:"d.data"})).render({data:t}),i.prepend(n),i.find(".layim-null").remove()))},V=function(a){a=a||{},window.Notification&&("granted"===Notification.permission?new Notification(a.title||"",{body:a.content||"",icon:a.avatar||C.base.defaultAvatar}):Notification.requestPermission())},R=function(e){var t,n,a,i,l=m(".layim-chatlist-"+(e=e||{}).type+e.id),s={},o=l.index();if((e.timestamp=e.timestamp||(new Date).getTime(),e.fromid==C.mine.id&&(e.mine=!0),e.system||X(e),JSON.parse(JSON.stringify(e)),C.base.voice&&(m("body").trigger("click"),R.init?h.ie&&h.ie<9||((a=document.createElement("audio")).src=layui.cache.layimResPath+"voice/"+C.base.voice,a.play()):R.init=!0),!r&&e.content||-1===o)&&(C.message[e.type+e.id]?C.message[e.type+e.id].push(e):(C.message[e.type+e.id]=[e],"friend"===e.type?(layui.each(C.friend,function(a,i){if(layui.each(i.list,function(a,i){if(i.id==e.id)return i.type="friend",i.name=i.username,C.chat.push(i),t=!0}),t)return!0}),t||(e.name=e.username,e.temporary=!0,C.chat.push(e))):"group"===e.type?(layui.each(C.group,function(a,i){if(i.id==e.id)return i.type="group",i.name=i.groupname,C.chat.push(i),n=!0}),n||(e.name=e.groupname,C.chat.push(e))):(e.name=e.name||e.username||e.groupname,C.chat.push(e))),"group"===e.type&&layui.each(C.group,function(a,i){if(i.id==e.id)return s.avatar=i.avatar||C.base.defaultAvatar,!0}),!e.system))return C.base.notice&&V({title:"\u6765\u81ea "+e.username+" \u7684\u6d88\u606f",content:e.content,avatar:s.avatar||e.avatar||C.base.defaultAvatar}),L({name:"\u6536\u5230\u65b0\u6d88\u606f",avatar:s.avatar||e.avatar||C.base.defaultAvatar,anim:6});r&&((a=z()).data.type+a.data.id!==e.type+e.id&&(l.addClass("layui-anim layer-anim-06"),setTimeout(function(){l.removeClass("layui-anim layer-anim-06")},300)),i=r.find(".layim-chat").eq(o).find(".layim-chat-main ul"),e.system?-1!==o&&i.append('
        • '+e.content+"
        • "):""!==e.content.replace(/\s/g,"")&&i.append(p(w).render(e)),E())},B="layui-anim-loop layer-anim-05",U=function(a){o.find(".layim-tool-msgbox").find("span").addClass(B).html(a)},X=function(e){var t,a=layui.data("layim")[C.mine.id]||{},i=(a.chatlog=a.chatlog||{},a.chatlog[e.type+e.id]);i?(layui.each(i,function(a,i){i.timestamp===e.timestamp&&i.type===e.type&&i.id===e.id&&i.content===e.content&&(t=!0)}),t||e.fromid==C.mine.id||i.push(e),20li").eq(e.groupIndex)).find(".layui-layim-list").append(a),i.find(".layim-count").html(C.friend[e.groupIndex].list.length),i.find(".layim-null")[0]&&i.find(".layim-null").remove()):"group"===e.type&&(l.append(a),l.find(".layim-null")[0]&&l.find(".layim-null").remove()))},Q=function(t){var n=o.find(".layim-list-"+t.type);C[t.type]&&("friend"===t.type?layui.each(C.friend,function(e,a){layui.each(a.list,function(a,i){if(t.id==i.id)return(i=n.find(">li").eq(e)).find(".layui-layim-list>li"),i.find(".layui-layim-list>li").eq(a).remove(),C.friend[e].list.splice(a,1),i.find(".layim-count").html(C.friend[e].list.length),0===C.friend[e].list.length&&i.find(".layui-layim-list").html('
        • \u8be5\u5206\u7ec4\u4e0b\u5df2\u65e0\u597d\u53cb\u4e86
        • '),!0})}):"group"===t.type&&layui.each(C.group,function(a,i){if(t.id==i.id)return n.find(">li").eq(a).remove(),C.group.splice(a,1),0===C.group.length&&n.html('
        • \u6682\u65e0\u7fa4\u7ec4
        • '),!0}))},E=function(){var a,i=z().elem.find(".layim-chat-main"),e=i.find("ul"),t=e.find("li").length;20<=t&&(a=e.find("li").eq(0),e.prev().hasClass("layim-chat-system")||e.before('
          \u67e5\u770b\u66f4\u591a\u8bb0\u5f55
          '),20","\u6316\u9f3b\u5b54":" (*\uffe3r\u01d2\uffe3)","\u60ca":"\u2299\u02cd\u2299","\u98de":"\ufe3f(\uffe3\ufe36\uffe3)\ufe3f","\u54fc\u54fc":"o(\uffe3\u30d8\uffe3o\uff03)","\u597d\u6ef4":" (u\u203f\u0e3au\u273f\u0e3a)","\u554a\u554a":"\uff2f(\u2267\u53e3\u2266)\uff2f","\u5566\u5566":"\u266a(^\u2207^*)","\u60ca\u559c":"\u2570(*\xb0\u25bd\xb0*)\u256f","\u4e56":" o(*^\uff20^*)o","\u9676\u9189":"( *\ufe3e\u25bd\ufe3e)","\u5582":" (#`O\u2032)","\u6123\u4f4f":" (\xb0\u30fc\xb0\u3003)","\u653e\u5c41":" \u25cb|\uffe3|_ =3","\u53ef\u6076":"\uff08\uff1d\u3002\uff1d\uff09","\u751f\u6c14":" (\u30fc`\u2032\u30fc)","\u6ee1\u8db3":" o(*\uffe3\ufe36\uffe3*)o","\u5d29\u6e83":"o(\u2267\u53e3\u2266)o","\u5443\u5443\u5443":"(\u2299\ufe4f\u2299)","\u6655":"X\ufe4fX","\u5446":" \u2501\u2533\u2501\u3000\u2501\u2533\u2501","\u55b5\u661f\u4eba":" ( =\u2022\u03c9\u2022= )m","\u55b5\u545c":" \u2261\u03c9\u2261","\u718a":"(*\uffe3(\u30a8)\uffe3)","\u5bb3\u7f9e":" (\u273f\u25e1\u203f\u25e1)",good:" o(\uffe3\u25bd\uffe3)\uff44","\u53ef\u7231":"*\uff3e-\uff3e*","\u7206\u7b11":"\u30fe(\u2267\u25bd\u2266*)o","\u5356\u840c":"=\uffe3\u03c9\uffe3="},I=layui.stope,M="layui-anim-upbit",N={status:function(a,i){function e(){a.next().hide().removeClass(M)}var t=a.attr("lay-type");"show"===t?(I(i),a.next().show().addClass(M),m(document).off("click",e).on("click",e)):(i=a.parent().prev(),a.addClass(g).siblings().removeClass(g),i.html(a.find("cite").html()),i.removeClass("layim-status-"+("online"===t?"hide":"online")).addClass("layim-status-"+t),layui.each(b.online,function(a,i){i&&i(t)}))},sign:function(){var a=o.find(".layui-layim-remark");a.on("change",function(){var e=this.value;layui.each(b.sign,function(a,i){i&&i(e)})}),a.on("keyup",function(a){13===a.keyCode&&this.blur()})},tab:function(a){var i,e=".layim-tab-content",t=o.find(".layui-layim-tab>li");"number"==typeof a?(i=a,a=t.eq(i)):i=a.index(),2'+(e[u].username||e[u].groupname||"\u4f5a\u540d")+"

          "+(e[u].remark||e[u].sign||"")+"

          ";else l='
        • \u65e0\u641c\u7d22\u7ed3\u679c
        • ';c.html(l),N.tab(3)}}var e=o.find(".layui-layim-search"),c=o.find("#layui-layim-search"),r=e.find("input");!C.base.isfriend&&C.base.isgroup?N.tab.index=1:C.base.isfriend||C.base.isgroup||(N.tab.index=2),e.show(),r.focus(),r.off("keyup",i).on("keyup",i)},closeSearch:function(a){a.parent().hide(),N.tab(0|N.tab.index)},msgbox:function(){var a=o.find(".layim-tool-msgbox");return f.close(N.msgbox.index),a.find("span").removeClass(B).html(""),N.msgbox.index=f.open({type:2,title:"\u6d88\u606f\u76d2\u5b50",shade:!1,maxmin:!0,area:["600px","518px"],skin:"layui-box layui-layer-border",resize:!1,content:C.base.msgbox})},find:function(){return f.close(N.find.index),N.find.index=f.open({type:2,title:"\u67e5\u627e",shade:!1,maxmin:!0,area:["1000px","518px"],skin:"layui-box layui-layer-border",resize:!1,content:C.base.find})},skin:function(){f.open({type:1,title:"\u66f4\u6362\u80cc\u666f",shade:!1,area:"300px",skin:"layui-box layui-layer-border",id:"layui-layim-skin",zIndex:66666666,resize:!1,content:p(q).render({skin:C.base.skin})})},about:function(){f.alert("\u7248\u672c\uff1a v"+t,{title:"\u5173\u4e8e",shade:!1})},setSkin:function(a){var t=a.attr("src"),a=layui.data("layim")[C.mine.id]||{};(a.skin=t)||delete a.skin,layui.data("layim",{key:C.mine.id,value:a});try{o.css({"background-image":t?"url("+t+")":"none"}),r.css({"background-image":t?"url("+t+")":"none"})}catch(a){}layui.each(b.setSkin,function(a,i){var e=(t||"").replace(layui.cache.layimResPath+"skin/","");i&&i(e,t)})},chat:function(a){var i=layui.data("layim")[C.mine.id]||{},e=a.data("type"),t=a.data("index"),a=a.attr("data-list")||a.index(),n={};"friend"===e?n=C[e][t].list[a]:"group"===e?n=C[e][a]:"history"===e&&(n=(i.history||{})[t]||{}),n.name=n.name||n.username||n.groupname,"history"!==e&&(n.type=e),A(n)},tabChat:function(a){j(a)},closeChat:function(a,i){j(a.parent(),1),I(i)},closeThisChat:function(){j(null,1)},groupMembers:function(d,a){function u(){e.html(""),d.data("down",null),f.close(N.groupMembers.index)}function i(a){I(a)}var e=d.find(".layui-icon");d.data("down")?u():(e.html(""),d.data("down",!0),N.groupMembers.index=f.tips('
            ',d,{tips:3,time:0,anim:5,fixed:!0,skin:"layui-box layui-layim-members",success:function(a){var i=C.base.members||{},e=z(),t=a.find(".layim-members-list"),n="",l={},s=r.find(".layui-layer-max").hasClass("layui-layer-maxmin"),o="none"===r.find(".layim-chat-list").css("display");s&&t.css({width:m(window).width()-22-(o||200)}),i.data=m.extend(i.data,{id:e.data.id}),c(i,function(e){layui.each(e.list,function(a,i){n+='
          • '+i.username+"
          • ",l[i.id]=i}),t.html(n),d.find(".layim-chat-members").html(e.members||(e.list||[]).length+"\u4eba"),t.find("li").on("click",function(){var a=m(this).data("uid"),a=l[a];A({name:a.username,type:"friend",avatar:a.avatar||C.base.defaultAvatar,id:a.id}),u()}),layui.each(b.members,function(a,i){i&&i(e)})}),a.on("mousedown",function(a){I(a)})}}),m(document).off("mousedown",u).on("mousedown",u),m(window).off("resize",u).on("resize",u),d.off("mousedown",i).on("mousedown",i))},send:function(){n()},setSend:function(a,i){var e=N.setSend.box=a.siblings(".layim-menu-box"),t=a.attr("lay-type");"show"===t?(I(i),e.show().addClass(M),m(document).off("click",N.setSendHide).on("click",N.setSendHide)):(a.addClass(g).siblings().removeClass(g),(e=layui.data("layim")[C.mine.id]||{}).sendHotKey=t,layui.data("layim",{key:C.mine.id,value:e}),N.setSendHide(i,a.parent()))},setSendHide:function(a,i){(i||N.setSend.box).hide().removeClass(M)},face:function(a,i){var e,t="",n=z();for(e in ia)t+='
          • '+ia[e]+"
          • ";N.face.index=f.tips(t='
              '+t+"
            ",a,{tips:1,time:0,fixed:!0,skin:"layui-box layui-layim-face",success:function(a){a.find(".layim-face-list>li").on("mousedown",function(a){I(a)}).on("click",function(){l(n.textarea[0],this.innerHTML+" "),f.close(N.face.index)})}}),m(document).off("mousedown",N.faceHide).on("mousedown",N.faceHide),m(window).off("resize",N.faceHide).on("resize",N.faceHide),I(i)},faceHide:function(){f.close(N.face.index)},image:function(a){var i=a.data("type")||"images",e=z(),t=C.base[{images:"uploadImage",file:"uploadFile"}[i]]||{};layui.upload.render({url:t.url||"",method:t.type,elem:a.find("input")[0],accept:i,done:function(a){0==a.code?(a.data=a.data||{},"images"===i?l(e.textarea[0],"img["+(a.data.src||"")+"]"):"file"===i&&l(e.textarea[0],"file("+(a.data.src||"")+")["+(a.data.name||"\u4e0b\u8f7d\u6587\u4ef6")+"]"),n()):f.msg(a.msg||"\u4e0a\u4f20\u5931\u8d25")}})},media:function(a){var e=a.data("type"),t=z();f.prompt({title:"\u8bf7\u8f93\u5165\u7f51\u7edc"+{audio:"\u97f3\u9891",video:"\u89c6\u9891"}[e]+"\u5730\u5740",shade:!1,offset:[a.offset().top-m(window).scrollTop()-158+"px",a.offset().left+"px"]},function(a,i){l(t.textarea[0],e+"["+a+"]"),n(),f.close(i)})},extend:function(e){var a=e.attr("lay-filter"),t=z();layui.each(b["tool("+a+")"],function(a,i){i&&i.call(e,function(a){l(t.textarea[0],a)},n,t)})},playAudio:function(a){function i(){t.pause(),a.removeAttr("status"),a.find("i").html("")}var e=a.data("audio"),t=e||document.createElement("audio");return a.data("error")?f.msg("\u64ad\u653e\u97f3\u9891\u6e90\u5f02\u5e38"):t.play?void(a.attr("status")?i():(e||(t.src=a.data("src")),t.play(),a.attr("status","pause"),a.data("audio",t),a.find("i").html(""),t.onended=function(){i()},t.onerror=function(){f.msg("\u64ad\u653e\u97f3\u9891\u6e90\u5f02\u5e38"),a.data("error",!0),i()})):f.msg("\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301audio")},playVideo:function(a){a=a.data("src");if(!document.createElement("video").play)return f.msg("\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301video");f.close(N.playVideo.index),N.playVideo.index=f.open({type:1,title:"\u64ad\u653e\u89c6\u9891",area:["460px","300px"],maxmin:!0,shade:!1,content:'
            '})},chatLog:function(a){var i=z();return C.base.chatLog?(f.close(N.chatLog.index),N.chatLog.index=f.open({type:2,maxmin:!0,title:"\u4e0e "+i.data.name+" \u7684\u804a\u5929\u8bb0\u5f55",area:["450px","100%"],shade:!1,offset:"rb",skin:"layui-box",anim:2,id:"layui-layim-chatlog",content:C.base.chatLog+"?id="+i.data.id+"&type="+i.data.type})):f.msg("\u672a\u5f00\u542f\u66f4\u591a\u804a\u5929\u8bb0\u5f55")},menuHistory:function(a,i){var e,t=layui.data("layim")[C.mine.id]||{},n=a.parent(),a=a.data("type"),l=o.find(".layim-list-history"),s='
          • \u6682\u65e0\u5386\u53f2\u4f1a\u8bdd
          • ';"one"===a?(delete(e=t.history)[n.data("index")],t.history=e,layui.data("layim",{key:C.mine.id,value:t}),m(".layim-list-history li.layim-"+n.data("index")).remove(),0===l.find("li").length&&l.html(s)):"all"===a&&(delete t.history,layui.data("layim",{key:C.mine.id,value:t}),l.html(s)),f.closeAll("tips")}};O("layim",new a)}).link(layui.cache.layimResPath+"layim.css","skinlayimcss"); \ No newline at end of file diff --git a/public/res/modules/layim/res/html/chatlog.html b/public/res/modules/layim/res/html/chatlog.html new file mode 100644 index 00000000..8c564e87 --- /dev/null +++ b/public/res/modules/layim/res/html/chatlog.html @@ -0,0 +1,101 @@ + + + + + + 演示聊天记录模板 + + + + + + +
            +
              +
              + +
              + + + + + + + + + + + diff --git a/public/res/modules/layim/res/html/find.html b/public/res/modules/layim/res/html/find.html new file mode 100644 index 00000000..8c4e0b47 --- /dev/null +++ b/public/res/modules/layim/res/html/find.html @@ -0,0 +1,41 @@ + + + + + + 发现 + + + + + + +
              +
              + 通过 find 参数指向的自定义页面 +
              +
              + + + + + + diff --git a/public/res/modules/layim/res/html/getmsg.json b/public/res/modules/layim/res/html/getmsg.json new file mode 100644 index 00000000..3cf36c65 --- /dev/null +++ b/public/res/modules/layim/res/html/getmsg.json @@ -0,0 +1,72 @@ +{ + "code": 0, + "pages": 1, + "data": [ + { + "id": 76, + "content": "申请添加你为好友", + "uid": 168, + "from": 166488, + "from_group": 0, + "type": 1, + "remark": "test1", + "href": null, + "read": 1, + "time": "刚刚", + "user": { + "id": 166488, + "avatar": "http://q.qlogo.cn/qqapp/101235792/B704597964F9BD0DB648292D1B09F7E8/100", + "username": "测试A", + "sign": null + } + }, + { + "id": 75, + "content": "申请添加你为好友", + "uid": 168, + "from": 347592, + "from_group": 0, + "type": 1, + "remark": "test2", + "href": null, + "read": 1, + "time": "刚刚", + "user": { + "id": 347592, + "avatar": "http://q.qlogo.cn/qqapp/101235792/B78751375E0531675B1272AD994BA875/100", + "username": "测试B", + "sign": null + } + }, + { + "id": 62, + "content": "测试C 拒绝了你的好友申请", + "uid": 168, + "from": null, + "from_group": null, + "type": 1, + "remark": null, + "href": null, + "read": 1, + "time": "10天前", + "user": { + "id": null + } + }, + { + "id": 60, + "content": "测试D 已经同意你的好友申请", + "uid": 168, + "from": null, + "from_group": null, + "type": 1, + "remark": null, + "href": null, + "read": 1, + "time": "10天前", + "user": { + "id": null + } + } + ] +} \ No newline at end of file diff --git a/public/res/modules/layim/res/html/msgbox.html b/public/res/modules/layim/res/html/msgbox.html new file mode 100644 index 00000000..8f52c75a --- /dev/null +++ b/public/res/modules/layim/res/html/msgbox.html @@ -0,0 +1,267 @@ + + + + + + 消息盒子 + + + + + + +
                + +
                +
                + 注意:该页面为 msgbox 参数指向的自定义页面。 +
                此页为消息盒子的模拟数据,实际使用时请进行相应修改。 +
                +
                + + + + + + + + + + diff --git a/public/res/modules/layim/res/images/default.png b/public/res/modules/layim/res/images/default.png new file mode 100644 index 00000000..33c7691a Binary files /dev/null and b/public/res/modules/layim/res/images/default.png differ diff --git a/public/res/modules/layim/res/layim.css b/public/res/modules/layim/res/layim.css new file mode 100644 index 00000000..572b1a99 --- /dev/null +++ b/public/res/modules/layim/res/layim.css @@ -0,0 +1 @@ +html #layuicss-skinlayimcss{display:none;position:absolute;width:1989px}body .layui-layim,body .layui-layim-chat{border:1px solid #ebebeb;border-color:rgba(0,0,0,.05);background-repeat:no-repeat;background-color:#f6f6f6;color:#333}body .layui-layim-chat{background-size:cover}body .layui-layim .layui-layer-title{height:110px;border-bottom:none;background:0 0}.layui-layim-main{position:relative;top:-98px;left:0}body .layui-layim .layui-layer-content,body .layui-layim-chat .layui-layer-content{overflow:visible}.layui-layim cite,.layui-layim em,.layui-layim-chat cite,.layui-layim-chat em{font-style:normal}.layui-layim-info{height:50px;font-size:0;padding:0 15px}.layui-layim-info *{font-size:14px}.layim-tab-content li h5 *,.layui-layim-info div,.layui-layim-skin li,.layui-layim-tab li,.layui-layim-tool li{display:inline-block;vertical-align:top;*zoom:1;*display:inline}.layim-tab-content li h5 span,.layui-layim-info .layui-layim-user,.layui-layim-list li p,.layui-layim-list li span,.layui-layim-remark{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-layim-info .layui-layim-user{max-width:150px;margin-right:5px;font-size:16px}.layui-layim-status{position:relative;top:2px;line-height:19px;cursor:pointer}.layim-status-online{color:#3fdd86}.layim-status-hide{color:#dd691d}.layim-menu-box{display:none;position:absolute;z-index:100;top:24px;left:-31px;padding:5px 0;width:85px;border:1px solid #e2e2e2;border-radius:2px;background-color:#fff;box-shadow:1px 1px 20px rgba(0,0,0,.1)}.layim-menu-box li{position:relative;line-height:22px;padding-left:30px;font-size:12px}.layim-menu-box li cite{padding-right:5px;font-size:14px}.layim-menu-box li i{display:none;position:absolute;left:8px;top:0;font-weight:700;color:#5fb878}.layim-menu-box .layim-this i{display:block}.layim-menu-box li:hover{background-color:#eee}.layui-layim-remark{position:relative;left:-6px;display:block;width:100%;border:1px solid transparent;margin-top:8px;padding:0 5px;height:26px;line-height:26px;background:0 0;border-radius:2px}.layui-layim-remark:focus,.layui-layim-remark:hover{border:1px solid #d2d2d2;border-color:rgba(0,0,0,.15)}.layui-layim-remark:focus{background-color:#fff}.layui-layim-tab{margin-top:10px;padding:9px 0;font-size:0}.layui-layim-tab li{position:relative;width:33.33%;height:24px;line-height:24px;font-size:22px;text-align:center;color:#666;color:rgba(0,0,0,.6);cursor:pointer}.layim-tab-two li{width:50%}.layui-layim-tab li.layim-this:after{content:'';position:absolute;left:0;bottom:-9px;width:100%;height:3px;background-color:#3fdd86}.layui-layim-tab li.layim-hide{display:none}.layui-layim-tab li:hover{opacity:.8;filter:Alpha(opacity=80)}.layim-tab-content{display:none;padding:10px 0;height:349px;overflow:hidden;background-color:#fff;background-color:rgba(255,255,255,.9)}.layim-tab-content:hover{overflow-y:auto}.layim-tab-content li h5{position:relative;margin-right:15px;padding-left:30px;height:28px;line-height:28px;cursor:pointer;font-size:0;white-space:nowrap;overflow:hidden}.layim-tab-content li h5 *{font-size:14px}.layim-tab-content li h5 span{max-width:125px}.layim-tab-content li h5 i{position:absolute;left:12px;top:0;color:#c9bdbb}.layim-tab-content li h5 em{padding-left:5px;color:#999}.layim-tab-content li h5[lay-type=true] i{top:1px;margin-left:-1px}.layim-tab-content li ul{display:none;margin-bottom:10px}.layui-layim-list li{position:relative;height:42px;padding:5px 15px 5px 60px;font-size:0;cursor:pointer}.layui-layim-list li:hover{background-color:#f2f2f2;background-color:rgba(0,0,0,.05)}.layui-layim-list li.layim-null{height:20px;line-height:20px;padding:0;font-size:14px;color:#999;text-align:center;cursor:default}.layui-layim-list li.layim-null:hover{background:0 0}.layui-layim-list li *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layui-layim-list li span{margin-top:4px;max-width:155px}.layui-layim-list li img{position:absolute;left:15px;top:8px;width:36px;height:36px;border-radius:100%}.layui-layim-list li p{display:block;padding-right:30px;line-height:18px;font-size:12px;color:#999}.layui-layim-list li .layim-msg-status{display:none;position:absolute;right:10px;bottom:7px;padding:0 5px;height:16px;line-height:16px;border-radius:16px;text-align:center;font-size:10px;background-color:#f74c31;color:#fff}.layim-list-gray{-webkit-filter:grayscale(100%);-ms-filter:grayscale(100%);filter:grayscale(100%);filter:gray}.layui-layim-tool{padding:0 10px;font-size:0;background-color:#f6f6f6;border-radius:0 0 2px 2px}.layui-layim-tool li{position:relative;width:48px;height:37px;line-height:40px;text-align:center;font-size:22px;cursor:pointer}.layui-layim-tool li:active{background-color:#ebebeb}.layui-layim-tool .layim-tool-msgbox{line-height:37px}.layui-layim-tool .layim-tool-find{line-height:38px}.layui-layim-tool .layim-tool-skin{font-size:26px}.layim-tool-msgbox span{display:none;position:absolute;left:12px;top:-12px;height:20px;line-height:20px;padding:0 10px;border-radius:2px;background-color:#33df83;color:#fff;font-size:12px;-webkit-animation-duration:1s;animation-duration:1s}.layim-tool-msgbox .layer-anim-05{display:block}.layui-layim-search{display:none;position:absolute;bottom:5px;left:5px;height:28px;line-height:28px}.layui-layim-search input{width:210px;padding:0 30px 0 10px;height:30px;line-height:30px;border:none;border-radius:3px;background-color:#ddd}.layui-layim-search label{position:absolute;right:6px;top:4px;font-size:20px;cursor:pointer;color:#333;font-weight:400}.layui-layim-skin{margin:10px 0 0 10px;font-size:0}.layui-layim-skin li{margin:0 10px 10px 0;line-height:60px;text-align:center;background-color:#f6f6f6}.layui-layim-skin li,.layui-layim-skin li img{width:86px;height:60px;cursor:pointer}.layui-layim-skin li img:hover{opacity:.8;filter:Alpha(opacity=80)}.layui-layim-skin li cite{font-size:14px;font-style:normal}body .layui-layim-chat{background-color:#f5f5f5}body .layui-layim-chat-list{width:760px}body .layui-layim-chat .layui-layer-title{height:52px;border-bottom-color:#ebebeb;background-color:rgba(245,245,245,.9);border-radius:0;box-sizing:border-box}body .layui-layim-chat .layui-layer-content{background:0 0}body .layui-layim-chat-more .layui-layer-title{margin-left:200px}.layim-chat-list li *,.layui-layim-min .layui-layer-content *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layim-chat-list{display:none;position:absolute;z-index:1000;top:-52px;width:200px;height:100%;background-color:#ebebeb;background-color:rgba(232,232,232,.9);overflow:hidden;font-size:0}.layim-chat-list:hover{overflow-y:auto}.layim-chat-list li,.layui-layim-min .layui-layer-content{position:relative;margin:5px;padding:5px 30px 5px 5px;line-height:38px;cursor:pointer;border-radius:3px}.layim-chat-list li img,.layui-layim-min .layui-layer-content img{width:38px;height:38px;border-radius:100%}.layui-layim-photos{cursor:crosshair}.layim-chat-list li{white-space:nowrap}.layim-chat-list li span,.layui-layim-min .layui-layer-content span{width:100px;padding-left:10px;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layim-chat-list li span cite{color:#999;padding-left:10px}.layim-chat-list li:hover{background-color:#f3f3f3}.layim-chat-list li.layim-this{background-color:#f8f9fa}.layim-chat-list li .layui-icon{display:none;position:absolute;right:5px;top:7px;color:#555;font-size:22px}.layim-chat-list li .layui-icon:hover{color:#c00}.layim-chat-list li:hover .layui-icon{display:inline-block}.layim-chat-system{margin:10px 0;text-align:center}.layim-chat-system span{display:inline-block;line-height:30px;padding:0 15px;border-radius:3px;background-color:#ebebeb;cursor:default;font-size:13px}.layim-chat{display:none;position:relative;background-color:#fff;background-color:rgba(245,245,245,.9)}.layim-chat-title{position:absolute;top:-52px;height:52px}.layim-chat-other{position:relative;top:11px;left:17px;padding-left:45px;cursor:default}.layim-chat-other img{position:absolute;left:0;top:0;width:32px;height:32px;border-radius:100%}.layim-chat-username{position:relative;top:5px;font-size:16px}.layim-chat-status{position:relative;top:5px;padding-left:5px;font-size:13px;color:#b7b7b7}.layim-chat-group .layim-chat-other .layim-chat-username{cursor:pointer}.layim-chat-group .layim-chat-other .layim-chat-username em{padding:0 10px;color:#999}.layim-chat-main{height:308px;padding:11px 11px 5px 11px;box-sizing:border-box;overflow-x:hidden;overflow-y:auto}.layim-chat-main ul li{position:relative;font-size:0;margin-bottom:10px;padding-left:52px;min-height:68px}.layim-chat-text,.layim-chat-user{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layim-chat-user{position:absolute;left:3px}.layim-chat-user img{width:38px;height:38px;border-radius:100%}.layim-chat-user cite{position:absolute;left:52px;top:-2px;width:500px;line-height:24px;font-size:12px;white-space:nowrap;color:#999;text-align:left;font-style:normal}.layim-chat-user cite i{padding-left:15px;font-style:normal}.layim-chat-text{position:relative;line-height:24px;margin-top:25px;padding:6px 11px;background-color:#fff;border-radius:3px;color:#333;word-break:break-all}.layim-chat-text:after{content:'';position:absolute;left:-10px;top:11px;width:0;height:0;border-style:dashed;border-color:transparent;overflow:hidden;border-width:10px;border-top-style:solid;border-top-color:#fff}.layim-chat-text{max-width:462px\0}.layim-chat-text a{color:#33df83}.layim-chat-text img{max-width:100%;vertical-align:middle}.layim-chat-text .layui-layim-file,.layui-layim-file{display:block;text-align:center}.layim-chat-text .layui-layim-file{color:#333}.layui-layim-file:hover{opacity:.9}.layui-layim-file i{font-size:52px;line-height:52px}.layui-layim-file cite{display:block;line-height:20px;font-size:14px}.layui-layim-audio{text-align:center;cursor:pointer}.layui-layim-audio .layui-icon{position:relative;top:5px;font-size:24px}.layui-layim-audio p{margin-top:3px}.layui-layim-video{width:120px;height:80px;line-height:80px;background-color:#333;text-align:center;border-radius:3px}.layui-layim-video .layui-icon{font-size:36px;cursor:pointer;color:#fff}.layim-chat-main ul .layim-chat-system{min-height:0;padding:0}.layim-chat-main ul .layim-chat-mine{text-align:right;padding-left:0;padding-right:52px}.layim-chat-mine .layim-chat-user{left:auto;right:3px}.layim-chat-mine .layim-chat-user cite{left:auto;right:52px;text-align:right}.layim-chat-mine .layim-chat-user cite i{padding-left:0;padding-right:15px}.layim-chat-mine .layim-chat-text{margin-left:0;text-align:left;background-color:#5fb878;color:#fff}.layim-chat-mine .layim-chat-text:after{left:auto;right:-10px;border-top-color:#5fb878}.layim-chat-mine .layim-chat-text a{color:#fff}.layim-chat-footer{border-top:1px solid #ebebeb}.layim-chat-tool{position:relative;padding:0 8px;height:38px;line-height:38px;font-size:0}.layim-chat-tool span{position:relative;margin:0 10px;display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:24px;cursor:pointer}.layim-chat-tool .layim-tool-log{position:absolute;right:5px;font-size:14px}.layim-tool-log i{position:relative;top:2px;margin-right:5px;font-size:20px;color:#999}.layim-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}body .layui-layim-face{margin:10px 0 0 -18px;border:none;background:0 0}body .layui-layim-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-layim-face .layui-layer-TipsG{display:none}.layui-layim-face ul{position:relative;width:372px;padding:10px;border:1px solid #ebebeb;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-layim-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:88px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-layim-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layim-chat-textarea{margin-left:10px}.layim-chat-textarea textarea{display:block;width:100%;padding:5px 0 0 0;height:68px;line-height:20px;border:none;overflow:auto;resize:none;background:0 0}.layim-chat-textarea textarea:focus{outline:0}.layim-chat-bottom{position:relative;height:46px}.layim-chat-send{position:absolute;right:15px;top:3px;height:32px;line-height:32px;font-size:0;cursor:pointer}.layim-chat-send span{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layim-chat-send span{line-height:32px;margin-left:5px;padding:0 20px;background-color:#e7e7e7;border-radius:3px}.layim-chat-send span:hover{background-color:#dcdcdc}.layim-chat-send span:active{background-color:#d1d1d1}.layim-chat-send .layim-send-btn{border-radius:3px 0 0 3px}.layim-chat-send .layim-send-set{position:relative;width:30px;height:32px;margin-left:0;padding:0;border-left:1px solid #e1e1e1;border-radius:0 3px 3px 0}.layim-send-set .layui-icon{position:absolute;top:1px;left:9px;font-size:12px}.layim-chat-send .layim-menu-box{left:auto;right:0;top:33px;width:180px;padding:10px 0}.layim-chat-send .layim-menu-box li{padding-right:15px;line-height:28px}body .layui-layim-min{border:1px solid #ebebeb}.layui-layim-min .layui-layer-content{margin:0 5px;padding:7px 10px;white-space:nowrap}.layui-layim-close .layui-layer-content span{width:auto;max-width:120px}body .layui-layim-members{margin:5px 0 0 -62px;border:none;background:0 0}body .layui-layim-members .layui-layer-content{padding:0;background:0 0;color:#666;box-shadow:none}.layui-layim-members .layui-layer-TipsG{display:none}.layui-layim-members ul{position:relative;width:578px;height:200px;padding:10px 10px 0 10px;border-bottom:1px solid #ebebeb;background-color:#fff;background-color:rgba(255,255,255,.9);box-shadow:none;overflow:hidden}.layui-layim-members ul:hover{overflow:auto}.layui-layim-members ul{font-size:0}.layim-add-img,.layim-add-remark,.layui-layim-members li{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layui-layim-members li{width:112px;margin:10px 0;text-align:center}.layui-layim-members li a{position:relative;display:inline-block;max-width:100%}.layui-layim-members li a:after{content:'';position:absolute;width:46px;height:46px;left:50%;margin-left:-23px;top:0;border:1px solid #eee;border-color:rgba(0,0,0,.1);border-radius:100%}.layui-layim-members li img{width:48px;height:48px;border-radius:100%}.layui-layim-members li:hover{opacity:.9}.layui-layim-members li a cite{display:block;padding:0 3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body .layui-layim-contextmenu{margin:70px 0 0 30px;width:200px;padding:5px 0;border:1px solid #ccc;background:#fff;border-radius:0;box-shadow:0 0 5px rgba(0,0,0,.2)}body .layui-layim-contextmenu .layui-layer-content{padding:0;background-color:#fff;color:#333;font-size:14px;box-shadow:none}.layui-layim-contextmenu .layui-layer-TipsG{display:none}.layui-layim-contextmenu li{padding:0 15px 0 35px;cursor:pointer;line-height:30px}.layui-layim-contextmenu li:hover{background-color:#f2f2f2}.layim-add-box{margin:15px;font-size:0}.layim-add-img{width:100px;margin-right:20px;text-align:center}.layim-add-img img{width:100px;height:100px;margin-bottom:10px}.layim-add-remark{width:280px}.layim-add-remark p{margin-bottom:10px}.layim-add-remark .layui-select{width:100%;margin-bottom:10px}.layim-add-remark .layui-textarea{height:80px;min-height:80px;resize:none}.layim-tab-content,.layui-layim-face ul,.layui-layim-tab{margin-bottom:0}.layim-tab-content li h5{margin-top:0;margin-bottom:0},.layui-layim-face img{vertical-align:bottom}.layim-chat-other span{color:#444}.layim-chat-other span cite{padding:0 15px;color:#999}.layim-chat-other:hover{text-decoration:none} \ No newline at end of file diff --git a/public/res/modules/layim/res/mobile.css b/public/res/modules/layim/res/mobile.css new file mode 100644 index 00000000..6cf21b37 --- /dev/null +++ b/public/res/modules/layim/res/mobile.css @@ -0,0 +1 @@ +html #layuicss-skinlayim-mobilecss{display:none;position:absolute;width:1989px}blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,legend,li,ol,p,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}html{font:12px 'Helvetica Neue','PingFang SC',STHeitiSC-Light,Helvetica,Arial,sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}a,button,input{-webkit-tap-highlight-color:rgba(255,0,0,0)}a{text-decoration:none;background:0 0}a:active,a:hover{outline:0}table{border-collapse:collapse;border-spacing:0}li{list-style:none}b,strong{font-weight:700}h1,h2,h3,h4,h5,h6{font-weight:500}address,cite,dfn,em,var{font-style:normal}dfn{font-style:italic}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}img{border:0;vertical-align:bottom}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;outline:0}button,select{text-transform:none}select{-webkit-appearance:none;border:none}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input,label{vertical-align:middle}.layui-box,.layui-box *{-webkit-box-sizing:content-box!important;-moz-box-sizing:content-box!important;box-sizing:content-box!important}.layui-border-box,.layui-border-box *{-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.layui-edge{position:absolute;width:0;height:0;border-style:dashed;border-color:transparent;overflow:hidden}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-disabled,.layui-disabled:active{background-color:#d2d2d2!important;color:#fff!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-enter{border:1px solid #009e94;background-color:#009e94;color:#fff;-webkit-transform:scale(1.1);transform:scale(1.1)}@-webkit-keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layui-m-anim-scale{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.layui-m-anim-scale{animation-name:layui-m-anim-scale;-webkit-animation-name:layui-m-anim-scale}@-webkit-keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layui-m-anim-up{0%{opacity:0;-webkit-transform:translateY(800px);transform:translateY(800px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}.layui-m-anim-up{-webkit-animation-name:layui-m-anim-up;animation-name:layui-m-anim-up}@-webkit-keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-left{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-left{-webkit-animation-name:layui-m-anim-left;animation-name:layui-m-anim-left}@-webkit-keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes layui-m-anim-right{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.layui-m-anim-right{-webkit-animation-name:layui-m-anim-right;animation-name:layui-m-anim-right}@-webkit-keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes layui-m-anim-lout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.layui-m-anim-lout{-webkit-animation-name:layui-m-anim-lout;animation-name:layui-m-anim-lout}@-webkit-keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes layui-m-anim-rout{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{-webkit-transform:translateX(100%);transform:translateX(100%)}}.layui-m-anim-rout{-webkit-animation-name:layui-m-anim-rout;animation-name:layui-m-anim-rout}.layui-m-layer{position:relative;z-index:19891014}.layui-m-layer *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.layui-m-layermain,.layui-m-layershade{position:fixed;left:0;top:0;width:100%;height:100%}.layui-m-layershade{background-color:rgba(0,0,0,.7);pointer-events:auto}.layui-m-layermain{display:table;font-family:Helvetica,arial,sans-serif;pointer-events:none}.layui-m-layermain .layui-m-layersection{display:table-cell;vertical-align:middle;text-align:center}.layui-m-layerchild{position:relative;display:inline-block;text-align:left;background-color:#fff;font-size:14px;border-radius:5px;box-shadow:0 0 8px rgba(0,0,0,.1);pointer-events:auto;-webkit-overflow-scrolling:touch}.layui-m-layerchild{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}.layui-m-layer0 .layui-m-layerchild{width:90%;max-width:640px}.layui-m-layer1 .layui-m-layerchild{border:none;border-radius:0}.layui-m-layer2 .layui-m-layerchild{width:auto;max-width:260px;min-width:40px;border:none;background:0 0;box-shadow:none;color:#fff}.layui-m-layerchild h3{padding:0 10px;height:60px;line-height:60px;font-size:16px;font-weight:400;border-radius:5px 5px 0 0;text-align:center}.layui-m-layerbtn span,.layui-m-layerchild h3{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-m-layercont{padding:50px 30px;line-height:22px;text-align:center}.layui-m-layer1 .layui-m-layercont{padding:0;text-align:left}.layui-m-layer2 .layui-m-layercont{text-align:center;padding:0;line-height:0}.layui-m-layer2 .layui-m-layercont i{width:25px;height:25px;margin-left:8px;display:inline-block;background-color:#fff;border-radius:100%}.layui-m-layer2 .layui-m-layercont p{margin-top:20px}@-webkit-keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}@keyframes layui-m-anim-loading{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.layui-m-layer2 .layui-m-layercont i{-webkit-animation:layui-m-anim-loading 1.4s infinite ease-in-out;animation:layui-m-anim-loading 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-m-layer2 .layui-m-layercont i:first-child{margin-left:0;-webkit-animation-delay:-.32s;animation-delay:-.32s}.layui-m-layer2 .layui-m-layercont i.layui-m-layerload{-webkit-animation-delay:-.16s;animation-delay:-.16s}.layui-m-layer2 .layui-m-layercont>div{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;position:relative;height:50px;line-height:50px;font-size:0;text-align:center;border-top:1px solid #d0d0d0;background-color:#f2f2f2;border-radius:0 0 5px 5px}.layui-m-layerbtn span{position:relative;display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;text-align:center;font-size:14px;border-radius:0 0 5px 5px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40affe}.layui-m-layerbtn span[no]{border-right:1px solid #d0d0d0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#f6f6f6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#fd482c;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px}.layim-tab-content li h5 *,.layui-layim-skin li,.layui-layim-tab li,.layui-layim-tool li{display:inline-block;vertical-align:top;*zoom:1;*display:inline}.layim-tab-content li h5 span,.layui-layim-list li p,.layui-layim-list li span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-layim-tab{position:absolute;bottom:0;left:0;right:0;height:50px;border-top:1px solid #f2f2f2;background-color:#fff}.layui-layim-tab li{position:relative;width:33.33%;height:50px;text-align:center;color:#666;color:rgba(0,0,0,.6);cursor:pointer}.layui-layim-tab li .layui-icon{position:relative;top:7px;font-size:25px}.layui-layim-tab li span{position:relative;bottom:-3px;display:block;font-size:12px}.layui-layim-tab li[lay-type=more] .layui-icon{top:4px;font-size:22px}.layui-layim-tab li.layim-this{color:#3fdd86}.layim-new{display:none;position:absolute;top:5px;left:50%;margin-left:15px;width:10px;height:10px;border-radius:10px;background-color:#f74c31;color:#fff}.layim-list-top .layim-new{position:relative;vertical-align:top;top:10px;left:initial;margin-left:5px}.layim-list-top i.layui-show{display:inline-block!important}.layui-layim{position:fixed;left:0;right:0;top:50px;bottom:50px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}.layim-tab-content{display:none}.layim-tab-content li h5{position:relative;padding-left:35px;height:45px;line-height:45px;cursor:pointer;font-size:0;border-bottom:1px solid #f2f2f2;white-space:nowrap;overflow:hidden}.layim-tab-content li h5 *{font-size:17px}.layim-tab-content li h5 span{max-width:80%}.layim-tab-content li h5 i{position:absolute;left:12px;top:0;color:#c9bdbb}.layim-tab-content li h5 em{padding-left:5px;color:#999}.layim-tab-content li ul{display:none}.layim-list-friend,.layim-list-group{background-color:#fff}.layui-layim-list li{position:relative;height:42px;border-bottom:1px solid #f2f2f2;padding:5px 15px 5px 60px;font-size:0;cursor:pointer}.layui-layim-list li:active{background-color:#f2f2f2;background-color:rgba(0,0,0,.05)}.layui-layim-list li.layim-null{height:20px;line-height:20px;padding:10px 0;font-size:17px;color:#999;text-align:center;cursor:default;font-size:14px}.layim-list-history li.layim-null{padding:30px 0;border-bottom:none;background-color:#eee}.layui-layim-list li *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:17px}.layui-layim-list li span{margin-top:2px;max-width:155px;font-size:17px}.layui-layim-list li img{position:absolute;left:12px;top:8px;width:36px;height:36px;border-radius:100%}.layui-layim-list li p{display:block;padding-right:30px;line-height:18px;font-size:13px;color:#999}.layui-layim-list li .layim-msg-status{display:none;position:absolute;right:10px;bottom:7px;padding:0 5px;height:17px;line-height:17px;border-radius:17px;text-align:center;font-size:10px;background-color:#f74c31;color:#fff}.layim-list-gray{-webkit-filter:grayscale(100%);-ms-filter:grayscale(100%);filter:grayscale(100%);filter:gray}.layim-list-top{background-color:#fff;font-size:17px}.layim-list-top li{position:relative;padding:0 15px 0 50px;line-height:45px;border-bottom:1px solid #f2f2f2;cursor:pointer}.layim-list-top li:last-child{margin-bottom:10px;border-bottom:none}.layim-list-top li .layui-icon{position:absolute;left:12px;top:0;margin-right:10px;color:#36373c;font-size:24px}.layim-list-top li[layim-event=newFriend] .layui-icon{left:15px}.layim-list-top li[layim-event=group] .layui-icon{font-size:20px}.layim-list-top li[layim-event=about] .layui-icon{font-size:25px}.layim-panel{position:fixed;bottom:0;top:0;left:0;right:0;background-color:#eee}.layim-panel{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}.layim-title{position:fixed;top:0;left:0;right:0;height:50px;line-height:50px;padding:0 15px;background-color:#36373c;color:#fff;font-size:18px}.layim-chat-status{padding-left:15px;font-size:14px;opacity:.7}.layim-title .layim-chat-back{display:inline-block;vertical-align:middle;position:relative;padding:0 15px;margin-left:-10px;top:0;font-size:24px;cursor:pointer}.layim-chat-detail{position:absolute;right:0;top:0;padding:0 15px;font-size:18px;cursor:pointer}.layim-chat-detail:active,.layim-title .layim-chat-back:active{opacity:.8}.layui-layim .layim-title{text-align:left}.layui-layim .layim-title p{padding:0 15px}.layim-content{position:fixed;top:50px;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:auto}.layim-chat-main{position:fixed;width:100%;bottom:85px;top:50px;left:0;right:0;padding:15px;overflow-y:auto;overflow-x:hidden;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layim-chat-main ul{overflow-x:hidden}.layim-chat-main ul li{position:relative;font-size:0;margin-bottom:10px;padding-left:60px;min-height:68px}.layim-chat-text,.layim-chat-user{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:15px}.layim-chat-user{position:absolute;left:3px}.layim-chat-user img{width:40px;height:40px;border-radius:100%}.layim-chat-user cite{position:absolute;left:60px;top:-2px;width:500px;line-height:24px;font-size:12px;white-space:nowrap;color:#999;text-align:left;font-style:normal}.layim-chat-user cite i{padding-left:15px;font-style:normal}.layim-chat-text{position:relative;min-height:22px;line-height:22px;margin-top:25px;padding:8px 15px;background-color:#fff;border-radius:3px;color:#333;word-break:break-all}.layim-chat-text:after{content:'';position:absolute;left:-10px;top:13px;width:0;height:0;border-style:dashed;border-color:transparent;overflow:hidden;border-width:10px;border-top-style:solid;border-top-color:#fff}.layim-chat-text a{color:#33df83}.layim-chat-text img{max-width:100%;vertical-align:middle}.layim-chat-text .layui-layim-file,.layui-layim-file{display:block;text-align:center}.layim-chat-text .layui-layim-file{color:#333}.layui-layim-file:active{opacity:.9}.layui-layim-file i{font-size:80px;line-height:80px}.layui-layim-file cite{display:block;line-height:20px;font-size:17px}.layui-layim-audio{text-align:center;cursor:pointer}.layui-layim-audio .layui-icon{position:relative;top:5px;font-size:24px}.layui-layim-audio p{margin-top:3px}.layui-layim-video{width:120px;height:80px;line-height:80px;background-color:#333;text-align:center;border-radius:3px}.layui-layim-video .layui-icon{font-size:36px;cursor:pointer;color:#fff}.layim-chat-main ul .layim-chat-system{min-height:0;padding:0}.layim-chat-main ul .layim-chat-mine{text-align:right;padding-left:0;padding-right:60px}.layim-chat-mine .layim-chat-user{left:auto;right:3px}.layim-chat-mine .layim-chat-user cite{left:auto;right:60px;text-align:right}.layim-chat-mine .layim-chat-user cite i{padding-left:0;padding-right:15px}.layim-chat-mine .layim-chat-text{margin-left:0;text-align:left;background-color:#5fb878;color:#fff}.layim-chat-mine .layim-chat-text:after{left:auto;right:-10px;border-top-color:#5fb878}.layim-chat-mine .layim-chat-text a{color:#fff}.layim-chat-main ul .layim-chat-system{min-height:0;margin:20px 0 5px;padding:0}.layim-chat-system{margin:10px 0;text-align:center}.layim-chat-system span{display:inline-block;line-height:30px;padding:0 15px;border-radius:3px;background-color:#ddd;color:#fff;font-size:14px;cursor:pointer}.layim-chat-footer{position:fixed;bottom:0;left:10px;right:10px;height:80px}.layim-chat-send{display:-webkit-box;display:-webkit-flex;display:flex}.layim-chat-send input{-webkit-box-flex:1;-webkit-flex:1;flex:1;height:40px;padding-left:5px;border:none 0;background-color:#fff;border-radius:3px}.layim-chat-send button{border-radius:3px;height:40px;padding:0 20px;border:none 0;margin-left:10px;background-color:#5fb878;color:#fff}.layim-chat-tool{position:relative;width:100%;overflow-x:auto;padding:0;height:38px;line-height:38px;margin-top:3px;font-size:0;white-space:nowrap}.layim-chat-tool span{position:relative;margin:0 15px;display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:28px;cursor:pointer}.layim-chat-tool .layim-tool-log{position:absolute;right:5px;font-size:14px}.layim-tool-log i{position:relative;top:2px;margin-right:5px;font-size:20px;color:#999}.layim-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layim-layer{position:fixed;bottom:85px;left:10px;right:10px;margin:0 auto}.layui-layim-face{position:relative;max-height:180px;overflow:auto;padding:5px;font-size:0}.layui-layim-face li{cursor:pointer;display:inline-block;vertical-align:bottom;padding:5px 2px;text-align:center;width:25%;border:1px solid #e8e8e8;margin:-1px 0 0 -1px;font-size:14px;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layui-layim-face li img{width:22px;height:22px}.layim-about{font-size:17px}.layim-about .layui-m-layercont{text-align:left}.layim-about .layui-m-layercont p{line-height:30px}.layim-about .layui-m-layercont a{color:#01aaed} \ No newline at end of file diff --git a/public/res/modules/layim/res/skin/1.jpg b/public/res/modules/layim/res/skin/1.jpg new file mode 100644 index 00000000..60f6a154 Binary files /dev/null and b/public/res/modules/layim/res/skin/1.jpg differ diff --git a/public/res/modules/layim/res/skin/2.jpg b/public/res/modules/layim/res/skin/2.jpg new file mode 100644 index 00000000..0bffb50b Binary files /dev/null and b/public/res/modules/layim/res/skin/2.jpg differ diff --git a/public/res/modules/layim/res/skin/3.jpg b/public/res/modules/layim/res/skin/3.jpg new file mode 100644 index 00000000..53ba9216 Binary files /dev/null and b/public/res/modules/layim/res/skin/3.jpg differ diff --git a/public/res/modules/layim/res/skin/4.jpg b/public/res/modules/layim/res/skin/4.jpg new file mode 100644 index 00000000..83b47388 Binary files /dev/null and b/public/res/modules/layim/res/skin/4.jpg differ diff --git a/public/res/modules/layim/res/skin/5.jpg b/public/res/modules/layim/res/skin/5.jpg new file mode 100644 index 00000000..f0e3b369 Binary files /dev/null and b/public/res/modules/layim/res/skin/5.jpg differ diff --git a/public/res/modules/layim/res/voice/default.mp3 b/public/res/modules/layim/res/voice/default.mp3 new file mode 100644 index 00000000..90013c5a Binary files /dev/null and b/public/res/modules/layim/res/voice/default.mp3 differ diff --git a/public/res/modules/sample.js b/public/res/modules/sample.js new file mode 100644 index 00000000..e8bf1e99 --- /dev/null +++ b/public/res/modules/sample.js @@ -0,0 +1,294 @@ +/** + * console homepage + */ + +layui.define(function (exports) { + var admin = layui.admin + + //区块轮播切换 + layui.use(['admin', 'carousel'], function () { + var $ = layui.$ + , admin = layui.admin + , carousel = layui.carousel + , element = layui.element + , device = layui.device() + + //轮播切换 + $('.layadmin-carousel').each(function () { + var othis = $(this) + carousel.render({ + elem: this + , width: '100%' + , arrow: 'none' + , interval: othis.data('interval') + , autoplay: othis.data('autoplay') === true + , trigger: (device.ios || device.android) ? 'click' : 'hover' + , anim: othis.data('anim') + }) + }) + + element.render('progress') + + }) + + //八卦新闻 + layui.use(['carousel', 'echarts'], function () { + var $ = layui.$ + , carousel = layui.carousel + , echarts = layui.echarts + + var echartsApp = [], options = [ + { + title: { + subtext: '完全实况球员数据', + textStyle: { + fontSize: 14 + } + }, + tooltip: { + trigger: 'axis' + }, + legend: { + x: 'left', + data: ['罗纳尔多', '舍普琴科'] + }, + polar: [ + { + indicator: [ + { text: '进攻', max: 100 }, + { text: '防守', max: 100 }, + { text: '体能', max: 100 }, + { text: '速度', max: 100 }, + { text: '力量', max: 100 }, + { text: '技巧', max: 100 } + ], + radius: 130 + } + ], + series: [ + { + type: 'radar', + center: ['50%', '50%'], + itemStyle: { + normal: { + areaStyle: { + type: 'default' + } + } + }, + data: [ + { value: [97, 42, 88, 94, 90, 86], name: '舍普琴科' }, + { value: [97, 32, 74, 95, 88, 92], name: '罗纳尔多' } + ] + } + ] + } + ] + , elemDataView = $('#LAY-index-pageone').children('div') + , renderDataView = function (index) { + echartsApp[index] = echarts.init(elemDataView[index], layui.echartsTheme) + echartsApp[index].setOption(options[index]) + window.onresize = echartsApp[index].resize + } + //没找到DOM,终止执行 + if (!elemDataView[0]) return + + renderDataView(0) + }) + + //访问量 + layui.use(['carousel', 'echarts'], function () { + var $ = layui.$ + , carousel = layui.carousel + , echarts = layui.echarts + + var echartsApp = [], options = [ + { + tooltip: { + trigger: 'axis' + }, + calculable: true, + legend: { + data: ['访问量', '下载量', '平均访问量'] + }, + + xAxis: [ + { + type: 'category', + data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] + } + ], + yAxis: [ + { + type: 'value', + name: '访问量', + axisLabel: { + formatter: '{value} 万' + } + }, + { + type: 'value', + name: '下载量', + axisLabel: { + formatter: '{value} 万' + } + } + ], + series: [ + { + name: '访问量', + type: 'line', + data: [900, 850, 950, 1000, 1100, 1050, 1000, 1150, 1250, 1370, 1250, 1100] + }, + { + name: '下载量', + type: 'line', + yAxisIndex: 1, + data: [850, 850, 800, 950, 1000, 950, 950, 1150, 1100, 1240, 1000, 950] + }, + { + name: '平均访问量', + type: 'line', + data: [870, 850, 850, 950, 1050, 1000, 980, 1150, 1000, 1300, 1150, 1000] + } + ] + } + ] + , elemDataView = $('#LAY-index-pagetwo').children('div') + , renderDataView = function (index) { + echartsApp[index] = echarts.init(elemDataView[index], layui.echartsTheme) + echartsApp[index].setOption(options[index]) + window.onresize = echartsApp[index].resize + } + //没找到DOM,终止执行 + if (!elemDataView[0]) return + renderDataView(0) + + }) + + //地图 + layui.use(['carousel', 'echarts'], function () { + var $ = layui.$ + , carousel = layui.carousel + , echarts = layui.echarts + + var echartsApp = [], options = [ + { + title: { + text: '访客地区分布', + subtext: '不完全统计' + }, + tooltip: { + trigger: 'item' + }, + dataRange: { + orient: 'horizontal', + min: 0, + max: 60000, + text: ['高', '低'], + splitNumber: 0 + }, + series: [ + { + name: '访客地区分布', + type: 'map', + mapType: 'china', + selectedMode: 'multiple', + itemStyle: { + normal: { label: { show: true } }, + emphasis: { label: { show: true } } + }, + data: [ + { name: '西藏', value: 60 }, + { name: '青海', value: 167 }, + { name: '宁夏', value: 210 }, + { name: '海南', value: 252 }, + { name: '甘肃', value: 502 }, + { name: '贵州', value: 570 }, + { name: '新疆', value: 661 }, + { name: '云南', value: 8890 }, + { name: '重庆', value: 10010 }, + { name: '吉林', value: 5056 }, + { name: '山西', value: 2123 }, + { name: '天津', value: 9130 }, + { name: '江西', value: 10170 }, + { name: '广西', value: 6172 }, + { name: '陕西', value: 9251 }, + { name: '黑龙江', value: 5125 }, + { name: '内蒙古', value: 1435 }, + { name: '安徽', value: 9530 }, + { name: '北京', value: 51919 }, + { name: '福建', value: 3756 }, + { name: '上海', value: 59190 }, + { name: '湖北', value: 37109 }, + { name: '湖南', value: 8966 }, + { name: '四川', value: 31020 }, + { name: '辽宁', value: 7222 }, + { name: '河北', value: 3451 }, + { name: '河南', value: 9693 }, + { name: '浙江', value: 62310 }, + { name: '山东', value: 39231 }, + { name: '江苏', value: 35911 }, + { name: '广东', value: 55891 } + ] + } + ] + } + ] + , elemDataView = $('#LAY-index-pagethree').children('div') + , renderDataView = function (index) { + echartsApp[index] = echarts.init(elemDataView[index], layui.echartsTheme) + echartsApp[index].setOption(options[index]) + window.onresize = echartsApp[index].resize + } + //没找到DOM,终止执行 + if (!elemDataView[0]) return + + renderDataView(0) + }) + + //项目进展 + layui.use('table', function () { + var $ = layui.$ + , table = layui.table + + table.render({ + elem: '#LAY-home-homepage2' + , url: './res/json/console/prograss.js' //模拟接口 + , cols: [[ + { type: 'checkbox', fixed: 'left' } + , { field: 'prograss', title: '任务' } + , { field: 'time', title: '所需时间' } + , { + field: 'complete', title: '完成情况' + , templet: function (d) { + if (d.complete == '已完成') { + return '' + d.complete + '' + } else if (d.complete == '进行中') { + return '' + d.complete + '' + } else { + return '' + d.complete + '' + } + } + } + ]] + , skin: 'line' + }) + }) + + //回复留言 + admin.events.replyNote = function (othis) { + var nid = othis.data('id') + layer.prompt({ + title: '回复留言 ID:' + nid + , formType: 2 + }, function (value, index) { + //这里可以请求 Ajax + //… + layer.msg('得到:' + value) + layer.close(index) + }) + } + + exports('sample', {}) +}) \ No newline at end of file diff --git a/public/res/modules/senior.js b/public/res/modules/senior.js new file mode 100644 index 00000000..492a181e --- /dev/null +++ b/public/res/modules/senior.js @@ -0,0 +1,1201 @@ +/** + * Echarts demo + */ + +layui.define(function (exports) { + + //区块轮播切换 + layui.use(['admin', 'carousel'], function () { + var $ = layui.$ + , admin = layui.admin + , carousel = layui.carousel + , element = layui.element + , device = layui.device() + + //轮播切换 + $('.layadmin-carousel').each(function () { + var othis = $(this) + carousel.render({ + elem: this + , width: '100%' + , arrow: 'none' + , interval: othis.data('interval') + , autoplay: othis.data('autoplay') === true + , trigger: (device.ios || device.android) ? 'click' : 'hover' + , anim: othis.data('anim') + }) + }) + + }) + + //折线图 + layui.use(['echarts'], function () { + var $ = layui.$ + , echarts = layui.echarts + + //标准折线图 + var echnormline = [], normline = [ + { + title: { + text: '未来一周气温变化', + subtext: '纯属虚构' + }, + tooltip: { + trigger: 'axis' + }, + legend: { + data: ['最高气温', '最低气温'] + }, + calculable: true, + xAxis: [ + { + type: 'category', + boundaryGap: false, + data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] + } + ], + yAxis: [ + { + type: 'value', + axisLabel: { + formatter: '{value} °C' + } + } + ], + series: [ + { + name: '最高气温', + type: 'line', + data: [11, 11, 15, 13, 12, 13, 10], + markPoint: { + data: [{ type: 'max', name: '最大值' }, { type: 'min', name: '最小值' }] + }, + markLine: { + data: [{ type: 'average', name: '平均值' }] + } + }, + { + name: '最低气温', + type: 'line', + data: [1, -2, 2, 5, 3, 2, 0], + markPoint: { + data: [{ name: '周最低', value: -2, xAxis: 1, yAxis: -1.5 }] + }, + markLine: { + data: [{ type: 'average', name: '平均值' }] + } + } + ] + } + ] + , elemnormline = $('#LAY-index-normline').children('div') + , rendernormline = function (index) { + echnormline[index] = echarts.init(elemnormline[index], layui.echartsTheme) + echnormline[index].setOption(normline[index]) + window.onresize = echnormline[index].resize + } + if (!elemnormline[0]) return + rendernormline(0) + + //堆积折线图 + var echheapline = [], heapline = [ + { + tooltip: { + trigger: 'axis' + }, + legend: { data: ['邮件营销', '联盟广告', '视频广告', '直接访问', '搜索引擎'] }, + calculable: true, + xAxis: [ + { + type: 'category', + boundaryGap: false, + data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] + } + ], + yAxis: [ + { + type: 'value' + } + ], + series: [ + { + name: '邮件营销', + type: 'line', + stack: '总量', + data: [120, 132, 101, 134, 90, 230, 210] + }, + { + name: '联盟广告', + type: 'line', + stack: '总量', + data: [220, 182, 191, 234, 290, 330, 310] + }, + { + name: '视频广告', + type: 'line', + stack: '总量', + data: [150, 232, 201, 154, 190, 330, 410] + }, + { + name: '直接访问', + type: 'line', + stack: '总量', + data: [320, 332, 301, 334, 390, 330, 320] + }, + { + name: '搜索引擎', + type: 'line', + stack: '总量', + data: [820, 932, 901, 934, 1290, 1330, 1320] + } + ] + } + ] + , elemheapline = $('#LAY-index-heapline').children('div') + , renderheapline = function (index) { + echheapline[index] = echarts.init(elemheapline[index], layui.echartsTheme) + echheapline[index].setOption(heapline[index]) + window.onresize = echheapline[index].resize + } + if (!elemheapline[0]) return + renderheapline(0) + + //不等距折线图 + var echdiffline = [], diffline = [ + { + title: { + text: '双数值轴折线', + subtext: '纯属虚构' + }, + tooltip: { + trigger: 'axis', + axisPointer: { + show: true, + type: 'cross', + lineStyle: { + type: 'dashed', + width: 1 + } + }, + formatter: function (params) { + return params.seriesName + ' : [ ' + params.value[0] + ', ' + params.value[1] + ' ]' + } + }, + legend: { + data: ['数据1', '数据2'] + }, + calculable: true, + xAxis: [ + { + type: 'value' + } + ], + yAxis: [ + { + type: 'value', + axisLine: { + lineStyle: { color: '#dc143c' } + } + } + ], + series: [ + { + name: '数据1', + type: 'line', + data: [ + [1.5, 10], [5, 7], [8, 8], [12, 6], [11, 12], [16, 9], [14, 6], [17, 4], [19, 9] + ], + markPoint: { + data: [ + // 纵轴,默认 + { + type: 'max', + name: '最大值', + symbol: 'emptyCircle', + itemStyle: { normal: { color: '#dc143c', label: { position: 'top' } } } + }, + { + type: 'min', + name: '最小值', + symbol: 'emptyCircle', + itemStyle: { normal: { color: '#dc143c', label: { position: 'bottom' } } } + }, + // 横轴 + { + type: 'max', + name: '最大值', + valueIndex: 0, + symbol: 'emptyCircle', + itemStyle: { normal: { color: '#1e90ff', label: { position: 'right' } } } + }, + { + type: 'min', + name: '最小值', + valueIndex: 0, + symbol: 'emptyCircle', + itemStyle: { normal: { color: '#1e90ff', label: { position: 'left' } } } + } + ] + }, + markLine: { + data: [ + // 纵轴,默认 + { type: 'max', name: '最大值', itemStyle: { normal: { color: '#dc143c' } } }, + { type: 'min', name: '最小值', itemStyle: { normal: { color: '#dc143c' } } }, + { type: 'average', name: '平均值', itemStyle: { normal: { color: '#dc143c' } } }, + // 横轴 + { type: 'max', name: '最大值', valueIndex: 0, itemStyle: { normal: { color: '#1e90ff' } } }, + { type: 'min', name: '最小值', valueIndex: 0, itemStyle: { normal: { color: '#1e90ff' } } }, + { + type: 'average', + name: '平均值', + valueIndex: 0, + itemStyle: { normal: { color: '#1e90ff' } } + } + ] + } + }, + { + name: '数据2', + type: 'line', + data: [ + [1, 2], [2, 3], [4, 2], [7, 5], [11, 2], [18, 3] + ] + } + ] + } + ] + , elemdiffline = $('#LAY-index-diffline').children('div') + , renderdiffline = function (index) { + echdiffline[index] = echarts.init(elemdiffline[index], layui.echartsTheme) + echdiffline[index].setOption(diffline[index]) + window.onresize = echdiffline[index].resize + } + if (!elemdiffline[0]) return + renderdiffline(0) + + //堆积面积图 + var echheaparea = [], heaparea = [ + { + tooltip: { + trigger: 'axis' + }, + legend: { + data: ['邮件营销', '联盟广告', '视频广告', '直接访问', '搜索引擎'] + }, + calculable: true, + xAxis: [ + { + type: 'category', + boundaryGap: false, + data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] + } + ], + yAxis: [ + { + type: 'value' + } + ], + series: [ + { + name: '邮件营销', + type: 'line', + stack: '总量', + itemStyle: { normal: { areaStyle: { type: 'default' } } }, + data: [120, 132, 101, 134, 90, 230, 210] + }, + { + name: '联盟广告', + type: 'line', + stack: '总量', + itemStyle: { normal: { areaStyle: { type: 'default' } } }, + data: [220, 182, 191, 234, 290, 330, 310] + }, + { + name: '视频广告', + type: 'line', + stack: '总量', + itemStyle: { normal: { areaStyle: { type: 'default' } } }, + data: [150, 232, 201, 154, 190, 330, 410] + }, + { + name: '直接访问', + type: 'line', + stack: '总量', + itemStyle: { normal: { areaStyle: { type: 'default' } } }, + data: [320, 332, 301, 334, 390, 330, 320] + }, + { + name: '搜索引擎', + type: 'line', + stack: '总量', + itemStyle: { normal: { areaStyle: { type: 'default' } } }, + data: [820, 932, 901, 934, 1290, 1330, 1320] + } + ] + } + ] + , elemheaparea = $('#LAY-index-heaparea').children('div') + , renderheaparea = function (index) { + echheaparea[index] = echarts.init(elemheaparea[index], layui.echartsTheme) + echheaparea[index].setOption(heaparea[index]) + window.onresize = echheaparea[index].resize + } + if (!elemheaparea[0]) return + renderheaparea(0) + + //面积图 + var echarea = [], area = [ + { + title: { + text: '雨量流量关系图', + x: 'center' + }, + tooltip: { + trigger: 'axis', + formatter: function (params) { + return params[0].name + '
                ' + params[0].seriesName + ' : ' + params[0].value + ' (m^3/s)
                ' + + params[1].seriesName + ' : ' + -params[1].value + ' (mm)' + } + }, + legend: { + data: ['流量', '降雨量'], + x: 'left' + }, + dataZoom: { + show: true, + realtime: true, + start: 0, + end: 100 + }, + xAxis: [ + { + type: 'category', + boundaryGap: false, + axisLine: { onZero: false }, + data: [ + '2009/6/12 2:00', '2009/6/12 3:00', '2009/6/12 4:00', '2009/6/12 5:00', '2009/6/12 6:00', '2009/6/12 7:00', '2009/6/12 8:00', '2009/6/12 9:00', '2009/6/12 10:00', '2009/6/12 11:00', '2009/6/12 12:00', '2009/6/12 13:00', '2009/6/12 14:00', '2009/6/12 15:00', '2009/6/12 16:00', '2009/6/12 17:00', '2009/6/12 18:00', '2009/6/12 19:00', '2009/6/12 20:00', '2009/6/12 21:00', '2009/6/12 22:00', '2009/6/12 23:00', + '2009/6/13 0:00', '2009/6/13 1:00', '2009/6/13 2:00', '2009/6/13 3:00', '2009/6/13 4:00', '2009/6/13 5:00', '2009/6/13 6:00', '2009/6/13 7:00', '2009/6/13 8:00', '2009/6/13 9:00', '2009/6/13 10:00', '2009/6/13 11:00', '2009/6/13 12:00', '2009/6/13 13:00', '2009/6/13 14:00', '2009/6/13 15:00', '2009/6/13 16:00', '2009/6/13 17:00', '2009/6/13 18:00', '2009/6/13 19:00', '2009/6/13 20:00', '2009/6/13 21:00', '2009/6/13 22:00', '2009/6/13 23:00', + '2009/6/14 0:00', '2009/6/14 1:00', '2009/6/14 2:00', '2009/6/14 3:00', '2009/6/14 4:00', '2009/6/14 5:00', '2009/6/14 6:00', '2009/6/14 7:00', '2009/6/14 8:00', '2009/6/14 9:00', '2009/6/14 10:00', '2009/6/14 11:00', '2009/6/14 12:00', '2009/6/14 13:00', '2009/6/14 14:00', '2009/6/14 15:00', '2009/6/14 16:00', '2009/6/14 17:00', '2009/6/14 18:00', '2009/6/14 19:00', '2009/6/14 20:00', '2009/6/14 21:00', '2009/6/14 22:00', '2009/6/14 23:00', + '2009/6/15 0:00', '2009/6/15 1:00', '2009/6/15 2:00', '2009/6/15 3:00', '2009/6/15 4:00', '2009/6/15 5:00', '2009/6/15 6:00', '2009/6/15 7:00', '2009/6/15 8:00', '2009/6/15 9:00', '2009/6/15 10:00', '2009/6/15 11:00', '2009/6/15 12:00', '2009/6/15 13:00', '2009/6/15 14:00', '2009/6/15 15:00', '2009/6/15 16:00', '2009/6/15 17:00', '2009/6/15 18:00', '2009/6/15 19:00', '2009/6/15 20:00', '2009/6/15 21:00', '2009/6/15 22:00', '2009/6/15 23:00', + '2009/6/15 0:00', '2009/6/16 1:00', '2009/6/16 2:00', '2009/6/16 3:00', '2009/6/16 4:00', '2009/6/16 5:00', '2009/6/16 6:00', '2009/6/16 7:00', '2009/6/16 8:00', '2009/6/16 9:00', '2009/6/16 10:00', '2009/6/16 11:00', '2009/6/16 12:00', '2009/6/16 13:00', '2009/6/16 14:00', '2009/6/16 15:00', '2009/6/16 16:00', '2009/6/16 17:00', '2009/6/16 18:00', '2009/6/16 19:00', '2009/6/16 20:00', '2009/6/16 21:00', '2009/6/16 22:00', '2009/6/16 23:00', + '2009/6/15 0:00', '2009/6/17 1:00', '2009/6/17 2:00', '2009/6/17 3:00', '2009/6/17 4:00', '2009/6/17 5:00', '2009/6/17 6:00', '2009/6/17 7:00', '2009/6/17 8:00', '2009/6/17 9:00', '2009/6/17 10:00', '2009/6/17 11:00', '2009/6/17 12:00', '2009/6/17 13:00', '2009/6/17 14:00', '2009/6/17 15:00', '2009/6/17 16:00', '2009/6/17 17:00', '2009/6/17 18:00', '2009/6/17 19:00', '2009/6/17 20:00', '2009/6/17 21:00', '2009/6/17 22:00', '2009/6/17 23:00', + '2009/6/18 0:00', '2009/6/18 1:00', '2009/6/18 2:00', '2009/6/18 3:00', '2009/6/18 4:00', '2009/6/18 5:00', '2009/6/18 6:00', '2009/6/18 7:00', '2009/6/18 8:00', '2009/6/18 9:00', '2009/6/18 10:00', '2009/6/18 11:00', '2009/6/18 12:00', '2009/6/18 13:00', '2009/6/18 14:00', '2009/6/18 15:00', '2009/6/18 16:00', '2009/6/18 17:00', '2009/6/18 18:00', '2009/6/18 19:00', '2009/6/18 20:00', '2009/6/18 21:00', '2009/6/18 22:00', '2009/6/18 23:00', + '2009/6/15 0:00', '2009/6/19 1:00', '2009/6/19 2:00', '2009/6/19 3:00', '2009/6/19 4:00', '2009/6/19 5:00', '2009/6/19 6:00', '2009/6/19 7:00', '2009/6/19 8:00', '2009/6/19 9:00', '2009/6/19 10:00', '2009/6/19 11:00', '2009/6/19 12:00', '2009/6/19 13:00', '2009/6/19 14:00', '2009/6/19 15:00', '2009/6/19 16:00', '2009/6/19 17:00', '2009/6/19 18:00', '2009/6/19 19:00', '2009/6/19 20:00', '2009/6/19 21:00', '2009/6/19 22:00', '2009/6/19 23:00', + '2009/6/20 0:00', '2009/6/20 1:00', '2009/6/20 2:00', '2009/6/20 3:00', '2009/6/20 4:00', '2009/6/20 5:00', '2009/6/20 6:00', '2009/6/20 7:00', '2009/6/20 8:00', '2009/6/20 9:00', '2009/6/20 10:00', '2009/6/20 11:00', '2009/6/20 12:00', '2009/6/20 13:00', '2009/6/20 14:00', '2009/6/20 15:00', '2009/6/20 16:00', '2009/6/20 17:00', '2009/6/20 18:00', '2009/6/20 19:00', '2009/6/20 20:00', '2009/6/20 21:00', '2009/6/20 22:00', '2009/6/20 23:00', + '2009/6/21 0:00', '2009/6/21 1:00', '2009/6/21 2:00', '2009/6/21 3:00', '2009/6/21 4:00', '2009/6/21 5:00', '2009/6/21 6:00', '2009/6/21 7:00', '2009/6/21 8:00', '2009/6/21 9:00', '2009/6/21 10:00', '2009/6/21 11:00', '2009/6/21 12:00', '2009/6/21 13:00', '2009/6/21 14:00', '2009/6/21 15:00', '2009/6/21 16:00', '2009/6/21 17:00', '2009/6/21 18:00', '2009/6/21 19:00', '2009/6/21 20:00', '2009/6/21 21:00', '2009/6/21 22:00', '2009/6/21 23:00', + '2009/6/22 0:00', '2009/6/22 1:00', '2009/6/22 2:00', '2009/6/22 3:00', '2009/6/22 4:00', '2009/6/22 5:00', '2009/6/22 6:00', '2009/6/22 7:00', '2009/6/22 8:00', '2009/6/22 9:00', '2009/6/22 10:00', '2009/6/22 11:00', '2009/6/22 12:00', '2009/6/22 13:00', '2009/6/22 14:00', '2009/6/22 15:00', '2009/6/22 16:00', '2009/6/22 17:00', '2009/6/22 18:00', '2009/6/22 19:00', '2009/6/22 20:00', '2009/6/22 21:00', '2009/6/22 22:00', '2009/6/22 23:00', + '2009/6/23 0:00', '2009/6/23 1:00', '2009/6/23 2:00', '2009/6/23 3:00', '2009/6/23 4:00', '2009/6/23 5:00', '2009/6/23 6:00', '2009/6/23 7:00', '2009/6/23 8:00', '2009/6/23 9:00', '2009/6/23 10:00', '2009/6/23 11:00', '2009/6/23 12:00', '2009/6/23 13:00', '2009/6/23 14:00', '2009/6/23 15:00', '2009/6/23 16:00', '2009/6/23 17:00', '2009/6/23 18:00', '2009/6/23 19:00', '2009/6/23 20:00', '2009/6/23 21:00', '2009/6/23 22:00', '2009/6/23 23:00', + '2009/6/24 0:00', '2009/6/24 1:00', '2009/6/24 2:00', '2009/6/24 3:00', '2009/6/24 4:00', '2009/6/24 5:00', '2009/6/24 6:00', '2009/6/24 7:00', '2009/6/24 8:00', '2009/6/24 9:00', '2009/6/24 10:00', '2009/6/24 11:00', '2009/6/24 12:00', '2009/6/24 13:00', '2009/6/24 14:00', '2009/6/24 15:00', '2009/6/24 16:00', '2009/6/24 17:00', '2009/6/24 18:00', '2009/6/24 19:00', '2009/6/24 20:00', '2009/6/24 21:00', '2009/6/24 22:00', '2009/6/24 23:00', + '2009/6/25 0:00', '2009/6/25 1:00', '2009/6/25 2:00', '2009/6/25 3:00', '2009/6/25 4:00', '2009/6/25 5:00', '2009/6/25 6:00', '2009/6/25 7:00', '2009/6/25 8:00', '2009/6/25 9:00', '2009/6/25 10:00', '2009/6/25 11:00', '2009/6/25 12:00', '2009/6/25 13:00', '2009/6/25 14:00', '2009/6/25 15:00', '2009/6/25 16:00', '2009/6/25 17:00', '2009/6/25 18:00', '2009/6/25 19:00', '2009/6/25 20:00', '2009/6/25 21:00', '2009/6/25 22:00', '2009/6/25 23:00', + '2009/6/26 0:00', '2009/6/26 1:00', '2009/6/26 2:00', '2009/6/26 3:00', '2009/6/26 4:00', '2009/6/26 5:00', '2009/6/26 6:00', '2009/6/26 7:00', '2009/6/26 8:00', '2009/6/26 9:00', '2009/6/26 10:00', '2009/6/26 11:00', '2009/6/26 12:00', '2009/6/26 13:00', '2009/6/26 14:00', '2009/6/26 15:00', '2009/6/26 16:00', '2009/6/26 17:00', '2009/6/26 18:00', '2009/6/26 19:00', '2009/6/26 20:00', '2009/6/26 21:00', '2009/6/26 22:00', '2009/6/26 23:00', + '2009/6/27 0:00', '2009/6/27 1:00', '2009/6/27 2:00', '2009/6/27 3:00', '2009/6/27 4:00', '2009/6/27 5:00', '2009/6/27 6:00', '2009/6/27 7:00', '2009/6/27 8:00', '2009/6/27 9:00', '2009/6/27 10:00', '2009/6/27 11:00', '2009/6/27 12:00', '2009/6/27 13:00', '2009/6/27 14:00', '2009/6/27 15:00', '2009/6/27 16:00', '2009/6/27 17:00', '2009/6/27 18:00', '2009/6/27 19:00', '2009/6/27 20:00', '2009/6/27 21:00', '2009/6/27 22:00', '2009/6/27 23:00', + '2009/6/28 0:00', '2009/6/28 1:00', '2009/6/28 2:00', '2009/6/28 3:00', '2009/6/28 4:00', '2009/6/28 5:00', '2009/6/28 6:00', '2009/6/28 7:00', '2009/6/28 8:00', '2009/6/28 9:00', '2009/6/28 10:00', '2009/6/28 11:00', '2009/6/28 12:00', '2009/6/28 13:00', '2009/6/28 14:00', '2009/6/28 15:00', '2009/6/28 16:00', '2009/6/28 17:00', '2009/6/28 18:00', '2009/6/28 19:00', '2009/6/28 20:00', '2009/6/28 21:00', '2009/6/28 22:00', '2009/6/28 23:00', + '2009/6/29 0:00', '2009/6/29 1:00', '2009/6/29 2:00', '2009/6/29 3:00', '2009/6/29 4:00', '2009/6/29 5:00', '2009/6/29 6:00', '2009/6/29 7:00', '2009/6/29 8:00', '2009/6/29 9:00', '2009/6/29 10:00', '2009/6/29 11:00', '2009/6/29 12:00', '2009/6/29 13:00', '2009/6/29 14:00', '2009/6/29 15:00', '2009/6/29 16:00', '2009/6/29 17:00', '2009/6/29 18:00', '2009/6/29 19:00', '2009/6/29 20:00', '2009/6/29 21:00', '2009/6/29 22:00', '2009/6/29 23:00', + '2009/6/30 0:00', '2009/6/30 1:00', '2009/6/30 2:00', '2009/6/30 3:00', '2009/6/30 4:00', '2009/6/30 5:00', '2009/6/30 6:00', '2009/6/30 7:00', '2009/6/30 8:00', '2009/6/30 9:00', '2009/6/30 10:00', '2009/6/30 11:00', '2009/6/30 12:00', '2009/6/30 13:00', '2009/6/30 14:00', '2009/6/30 15:00', '2009/6/30 16:00', '2009/6/30 17:00', '2009/6/30 18:00', '2009/6/30 19:00', '2009/6/30 20:00', '2009/6/30 21:00', '2009/6/30 22:00', '2009/6/30 23:00', + '2009/7/1 0:00', '2009/7/1 1:00', '2009/7/1 2:00', '2009/7/1 3:00', '2009/7/1 4:00', '2009/7/1 5:00', '2009/7/1 6:00', '2009/7/1 7:00', '2009/7/1 8:00', '2009/7/1 9:00', '2009/7/1 10:00', '2009/7/1 11:00', '2009/7/1 12:00', '2009/7/1 13:00', '2009/7/1 14:00', '2009/7/1 15:00', '2009/7/1 16:00', '2009/7/1 17:00', '2009/7/1 18:00', '2009/7/1 19:00', '2009/7/1 20:00', '2009/7/1 21:00', '2009/7/1 22:00', '2009/7/1 23:00', + '2009/7/2 0:00', '2009/7/2 1:00', '2009/7/2 2:00', '2009/7/2 3:00', '2009/7/2 4:00', '2009/7/2 5:00', '2009/7/2 6:00', '2009/7/2 7:00', '2009/7/2 8:00', '2009/7/2 9:00', '2009/7/2 10:00', '2009/7/2 11:00', '2009/7/2 12:00', '2009/7/2 13:00', '2009/7/2 14:00', '2009/7/2 15:00', '2009/7/2 16:00', '2009/7/2 17:00', '2009/7/2 18:00', '2009/7/2 19:00', '2009/7/2 20:00', '2009/7/2 21:00', '2009/7/2 22:00', '2009/7/2 23:00', + '2009/7/3 0:00', '2009/7/3 1:00', '2009/7/3 2:00', '2009/7/3 3:00', '2009/7/3 4:00', '2009/7/3 5:00', '2009/7/3 6:00', '2009/7/3 7:00', '2009/7/3 8:00', '2009/7/3 9:00', '2009/7/3 10:00', '2009/7/3 11:00', '2009/7/3 12:00', '2009/7/3 13:00', '2009/7/3 14:00', '2009/7/3 15:00', '2009/7/3 16:00', '2009/7/3 17:00', '2009/7/3 18:00', '2009/7/3 19:00', '2009/7/3 20:00', '2009/7/3 21:00', '2009/7/3 22:00', '2009/7/3 23:00', + '2009/7/4 0:00', '2009/7/4 1:00', '2009/7/4 2:00', '2009/7/4 3:00', '2009/7/4 4:00', '2009/7/4 5:00', '2009/7/4 6:00', '2009/7/4 7:00', '2009/7/4 8:00', '2009/7/4 9:00', '2009/7/4 10:00', '2009/7/4 11:00', '2009/7/4 12:00', '2009/7/4 13:00', '2009/7/4 14:00', '2009/7/4 15:00', '2009/7/4 16:00', '2009/7/4 17:00', '2009/7/4 18:00', '2009/7/4 19:00', '2009/7/4 20:00', '2009/7/4 21:00', '2009/7/4 22:00', '2009/7/4 23:00', + '2009/7/5 0:00', '2009/7/5 1:00', '2009/7/5 2:00', '2009/7/5 3:00', '2009/7/5 4:00', '2009/7/5 5:00', '2009/7/5 6:00', '2009/7/5 7:00', '2009/7/5 8:00', '2009/7/5 9:00', '2009/7/5 10:00', '2009/7/5 11:00', '2009/7/5 12:00', '2009/7/5 13:00', '2009/7/5 14:00', '2009/7/5 15:00', '2009/7/5 16:00', '2009/7/5 17:00', '2009/7/5 18:00', '2009/7/5 19:00', '2009/7/5 20:00', '2009/7/5 21:00', '2009/7/5 22:00', '2009/7/5 23:00', + '2009/7/6 0:00', '2009/7/6 1:00', '2009/7/6 2:00', '2009/7/6 3:00', '2009/7/6 4:00', '2009/7/6 5:00', '2009/7/6 6:00', '2009/7/6 7:00', '2009/7/6 8:00', '2009/7/6 9:00', '2009/7/6 10:00', '2009/7/6 11:00', '2009/7/6 12:00', '2009/7/6 13:00', '2009/7/6 14:00', '2009/7/6 15:00', '2009/7/6 16:00', '2009/7/6 17:00', '2009/7/6 18:00', '2009/7/6 19:00', '2009/7/6 20:00', '2009/7/6 21:00', '2009/7/6 22:00', '2009/7/6 23:00', + '2009/7/7 0:00', '2009/7/7 1:00', '2009/7/7 2:00', '2009/7/7 3:00', '2009/7/7 4:00', '2009/7/7 5:00', '2009/7/7 6:00', '2009/7/7 7:00', '2009/7/7 8:00', '2009/7/7 9:00', '2009/7/7 10:00', '2009/7/7 11:00', '2009/7/7 12:00', '2009/7/7 13:00', '2009/7/7 14:00', '2009/7/7 15:00', '2009/7/7 16:00', '2009/7/7 17:00', '2009/7/7 18:00', '2009/7/7 19:00', '2009/7/7 20:00', '2009/7/7 21:00', '2009/7/7 22:00', '2009/7/7 23:00', + '2009/7/8 0:00', '2009/7/8 1:00', '2009/7/8 2:00', '2009/7/8 3:00', '2009/7/8 4:00', '2009/7/8 5:00', '2009/7/8 6:00', '2009/7/8 7:00', '2009/7/8 8:00', '2009/7/8 9:00', '2009/7/8 10:00', '2009/7/8 11:00', '2009/7/8 12:00', '2009/7/8 13:00', '2009/7/8 14:00', '2009/7/8 15:00', '2009/7/8 16:00', '2009/7/8 17:00', '2009/7/8 18:00', '2009/7/8 19:00', '2009/7/8 20:00', '2009/7/8 21:00', '2009/7/8 22:00', '2009/7/8 23:00', + '2009/7/9 0:00', '2009/7/9 1:00', '2009/7/9 2:00', '2009/7/9 3:00', '2009/7/9 4:00', '2009/7/9 5:00', '2009/7/9 6:00', '2009/7/9 7:00', '2009/7/9 8:00', '2009/7/9 9:00', '2009/7/9 10:00', '2009/7/9 11:00', '2009/7/9 12:00', '2009/7/9 13:00', '2009/7/9 14:00', '2009/7/9 15:00', '2009/7/9 16:00', '2009/7/9 17:00', '2009/7/9 18:00', '2009/7/9 19:00', '2009/7/9 20:00', '2009/7/9 21:00', '2009/7/9 22:00', '2009/7/9 23:00', + '2009/7/10 0:00', '2009/7/10 1:00', '2009/7/10 2:00', '2009/7/10 3:00', '2009/7/10 4:00', '2009/7/10 5:00', '2009/7/10 6:00', '2009/7/10 7:00', '2009/7/10 8:00', '2009/7/10 9:00', '2009/7/10 10:00', '2009/7/10 11:00', '2009/7/10 12:00', '2009/7/10 13:00', '2009/7/10 14:00', '2009/7/10 15:00', '2009/7/10 16:00', '2009/7/10 17:00', '2009/7/10 18:00', '2009/7/10 19:00', '2009/7/10 20:00', '2009/7/10 21:00', '2009/7/10 22:00', '2009/7/10 23:00', + '2009/7/11 0:00', '2009/7/11 1:00', '2009/7/11 2:00', '2009/7/11 3:00', '2009/7/11 4:00', '2009/7/11 5:00', '2009/7/11 6:00', '2009/7/11 7:00', '2009/7/11 8:00', '2009/7/11 9:00', '2009/7/11 10:00', '2009/7/11 11:00', '2009/7/11 12:00', '2009/7/11 13:00', '2009/7/11 14:00', '2009/7/11 15:00', '2009/7/11 16:00', '2009/7/11 17:00', '2009/7/11 18:00', '2009/7/11 19:00', '2009/7/11 20:00', '2009/7/11 21:00', '2009/7/11 22:00', '2009/7/11 23:00', + '2009/7/12 0:00', '2009/7/12 1:00', '2009/7/12 2:00', '2009/7/12 3:00', '2009/7/12 4:00', '2009/7/12 5:00', '2009/7/12 6:00', '2009/7/12 7:00', '2009/7/12 8:00', '2009/7/12 9:00', '2009/7/12 10:00', '2009/7/12 11:00', '2009/7/12 12:00', '2009/7/12 13:00', '2009/7/12 14:00', '2009/7/12 15:00', '2009/7/12 16:00', '2009/7/12 17:00', '2009/7/12 18:00', '2009/7/12 19:00', '2009/7/12 20:00', '2009/7/12 21:00', '2009/7/12 22:00', '2009/7/12 23:00', + '2009/7/13 0:00', '2009/7/13 1:00', '2009/7/13 2:00', '2009/7/13 3:00', '2009/7/13 4:00', '2009/7/13 5:00', '2009/7/13 6:00', '2009/7/13 7:00', '2009/7/13 8:00', '2009/7/13 9:00', '2009/7/13 10:00', '2009/7/13 11:00', '2009/7/13 12:00', '2009/7/13 13:00', '2009/7/13 14:00', '2009/7/13 15:00', '2009/7/13 16:00', '2009/7/13 17:00', '2009/7/13 18:00', '2009/7/13 19:00', '2009/7/13 20:00', '2009/7/13 21:00', '2009/7/13 22:00', '2009/7/13 23:00', + '2009/7/14 0:00', '2009/7/14 1:00', '2009/7/14 2:00', '2009/7/14 3:00', '2009/7/14 4:00', '2009/7/14 5:00', '2009/7/14 6:00', '2009/7/14 7:00', '2009/7/14 8:00', '2009/7/14 9:00', '2009/7/14 10:00', '2009/7/14 11:00', '2009/7/14 12:00', '2009/7/14 13:00', '2009/7/14 14:00', '2009/7/14 15:00', '2009/7/14 16:00', '2009/7/14 17:00', '2009/7/14 18:00', '2009/7/14 19:00', '2009/7/14 20:00', '2009/7/14 21:00', '2009/7/14 22:00', '2009/7/14 23:00', + '2009/7/15 0:00', '2009/7/15 1:00', '2009/7/15 2:00', '2009/7/15 3:00', '2009/7/15 4:00', '2009/7/15 5:00', '2009/7/15 6:00', '2009/7/15 7:00', '2009/7/15 8:00', '2009/7/15 9:00', '2009/7/15 10:00', '2009/7/15 11:00', '2009/7/15 12:00', '2009/7/15 13:00', '2009/7/15 14:00', '2009/7/15 15:00', '2009/7/15 16:00', '2009/7/15 17:00', '2009/7/15 18:00', '2009/7/15 19:00', '2009/7/15 20:00', '2009/7/15 21:00', '2009/7/15 22:00', '2009/7/15 23:00', + '2009/7/16 0:00', '2009/7/16 1:00', '2009/7/16 2:00', '2009/7/16 3:00', '2009/7/16 4:00', '2009/7/16 5:00', '2009/7/16 6:00', '2009/7/16 7:00', '2009/7/16 8:00', '2009/7/16 9:00', '2009/7/16 10:00', '2009/7/16 11:00', '2009/7/16 12:00', '2009/7/16 13:00', '2009/7/16 14:00', '2009/7/16 15:00', '2009/7/16 16:00', '2009/7/16 17:00', '2009/7/16 18:00', '2009/7/16 19:00', '2009/7/16 20:00', '2009/7/16 21:00', '2009/7/16 22:00', '2009/7/16 23:00', + '2009/7/17 0:00', '2009/7/17 1:00', '2009/7/17 2:00', '2009/7/17 3:00', '2009/7/17 4:00', '2009/7/17 5:00', '2009/7/17 6:00', '2009/7/17 7:00', '2009/7/17 8:00', '2009/7/17 9:00', '2009/7/17 10:00', '2009/7/17 11:00', '2009/7/17 12:00', '2009/7/17 13:00', '2009/7/17 14:00', '2009/7/17 15:00', '2009/7/17 16:00', '2009/7/17 17:00', '2009/7/17 18:00', '2009/7/17 19:00', '2009/7/17 20:00', '2009/7/17 21:00', '2009/7/17 22:00', '2009/7/17 23:00', + '2009/7/18 0:00', '2009/7/18 1:00', '2009/7/18 2:00', '2009/7/18 3:00', '2009/7/18 4:00', '2009/7/18 5:00', '2009/7/18 6:00', '2009/7/18 7:00', '2009/7/18 8:00', '2009/7/18 9:00', '2009/7/18 10:00', '2009/7/18 11:00', '2009/7/18 12:00', '2009/7/18 13:00', '2009/7/18 14:00', '2009/7/18 15:00', '2009/7/18 16:00', '2009/7/18 17:00', '2009/7/18 18:00', '2009/7/18 19:00', '2009/7/18 20:00', '2009/7/18 21:00', '2009/7/18 22:00', '2009/7/18 23:00', + '2009/7/19 0:00', '2009/7/19 1:00', '2009/7/19 2:00', '2009/7/19 3:00', '2009/7/19 4:00', '2009/7/19 5:00', '2009/7/19 6:00', '2009/7/19 7:00', '2009/7/19 8:00', '2009/7/19 9:00', '2009/7/19 10:00', '2009/7/19 11:00', '2009/7/19 12:00', '2009/7/19 13:00', '2009/7/19 14:00', '2009/7/19 15:00', '2009/7/19 16:00', '2009/7/19 17:00', '2009/7/19 18:00', '2009/7/19 19:00', '2009/7/19 20:00', '2009/7/19 21:00', '2009/7/19 22:00', '2009/7/19 23:00', + '2009/7/20 0:00', '2009/7/20 1:00', '2009/7/20 2:00', '2009/7/20 3:00', '2009/7/20 4:00', '2009/7/20 5:00', '2009/7/20 6:00', '2009/7/20 7:00', '2009/7/20 8:00', '2009/7/20 9:00', '2009/7/20 10:00', '2009/7/20 11:00', '2009/7/20 12:00', '2009/7/20 13:00', '2009/7/20 14:00', '2009/7/20 15:00', '2009/7/20 16:00', '2009/7/20 17:00', '2009/7/20 18:00', '2009/7/20 19:00', '2009/7/20 20:00', '2009/7/20 21:00', '2009/7/20 22:00', '2009/7/20 23:00', + '2009/7/21 0:00', '2009/7/21 1:00', '2009/7/21 2:00', '2009/7/21 3:00', '2009/7/21 4:00', '2009/7/21 5:00', '2009/7/21 6:00', '2009/7/21 7:00', '2009/7/21 8:00', '2009/7/21 9:00', '2009/7/21 10:00', '2009/7/21 11:00', '2009/7/21 12:00', '2009/7/21 13:00', '2009/7/21 14:00', '2009/7/21 15:00', '2009/7/21 16:00', '2009/7/21 17:00', '2009/7/21 18:00', '2009/7/21 19:00', '2009/7/21 20:00', '2009/7/21 21:00', '2009/7/21 22:00', '2009/7/21 23:00', + '2009/7/22 0:00', '2009/7/22 1:00', '2009/7/22 2:00', '2009/7/22 3:00', '2009/7/22 4:00', '2009/7/22 5:00', '2009/7/22 6:00', '2009/7/22 7:00', '2009/7/22 8:00', '2009/7/22 9:00', '2009/7/22 10:00', '2009/7/22 11:00', '2009/7/22 12:00', '2009/7/22 13:00', '2009/7/22 14:00', '2009/7/22 15:00', '2009/7/22 16:00', '2009/7/22 17:00', '2009/7/22 18:00', '2009/7/22 19:00', '2009/7/22 20:00', '2009/7/22 21:00', '2009/7/22 22:00', '2009/7/22 23:00', + '2009/7/23 0:00', '2009/7/23 1:00', '2009/7/23 2:00', '2009/7/23 3:00', '2009/7/23 4:00', '2009/7/23 5:00', '2009/7/23 6:00', '2009/7/23 7:00', '2009/7/23 8:00', '2009/7/23 9:00', '2009/7/23 10:00', '2009/7/23 11:00', '2009/7/23 12:00', '2009/7/23 13:00', '2009/7/23 14:00', '2009/7/23 15:00', '2009/7/23 16:00', '2009/7/23 17:00', '2009/7/23 18:00', '2009/7/23 19:00', '2009/7/23 20:00', '2009/7/23 21:00', '2009/7/23 22:00', '2009/7/23 23:00', + '2009/7/24 0:00', '2009/7/24 1:00', '2009/7/24 2:00', '2009/7/24 3:00', '2009/7/24 4:00', '2009/7/24 5:00', '2009/7/24 6:00', '2009/7/24 7:00', '2009/7/24 8:00', '2009/7/24 9:00', '2009/7/24 10:00', '2009/7/24 11:00', '2009/7/24 12:00', '2009/7/24 13:00', '2009/7/24 14:00', '2009/7/24 15:00', '2009/7/24 16:00', '2009/7/24 17:00', '2009/7/24 18:00', '2009/7/24 19:00', '2009/7/24 20:00', '2009/7/24 21:00', '2009/7/24 22:00', '2009/7/24 23:00', + '2009/7/25 0:00', '2009/7/25 1:00', '2009/7/25 2:00', '2009/7/25 3:00', '2009/7/25 4:00', '2009/7/25 5:00', '2009/7/25 6:00', '2009/7/25 7:00', '2009/7/25 8:00', '2009/7/25 9:00', '2009/7/25 10:00', '2009/7/25 11:00', '2009/7/25 12:00', '2009/7/25 13:00', '2009/7/25 14:00', '2009/7/25 15:00', '2009/7/25 16:00', '2009/7/25 17:00', '2009/7/25 18:00', '2009/7/25 19:00', '2009/7/25 20:00', '2009/7/25 21:00', '2009/7/25 22:00', '2009/7/25 23:00', + '2009/7/26 0:00', '2009/7/26 1:00', '2009/7/26 2:00', '2009/7/26 3:00', '2009/7/26 4:00', '2009/7/26 5:00', '2009/7/26 6:00', '2009/7/26 7:00', '2009/7/26 8:00', '2009/7/26 9:00', '2009/7/26 10:00', '2009/7/26 11:00', '2009/7/26 12:00', '2009/7/26 13:00', '2009/7/26 14:00', '2009/7/26 15:00', '2009/7/26 16:00', '2009/7/26 17:00', '2009/7/26 18:00', '2009/7/26 19:00', '2009/7/26 20:00', '2009/7/26 21:00', '2009/7/26 22:00', '2009/7/26 23:00', + '2009/7/27 0:00', '2009/7/27 1:00', '2009/7/27 2:00', '2009/7/27 3:00', '2009/7/27 4:00', '2009/7/27 5:00', '2009/7/27 6:00', '2009/7/27 7:00', '2009/7/27 8:00', '2009/7/27 9:00', '2009/7/27 10:00', '2009/7/27 11:00', '2009/7/27 12:00', '2009/7/27 13:00', '2009/7/27 14:00', '2009/7/27 15:00', '2009/7/27 16:00', '2009/7/27 17:00', '2009/7/27 18:00', '2009/7/27 19:00', '2009/7/27 20:00', '2009/7/27 21:00', '2009/7/27 22:00', '2009/7/27 23:00', + '2009/7/28 0:00', '2009/7/28 1:00', '2009/7/28 2:00', '2009/7/28 3:00', '2009/7/28 4:00', '2009/7/28 5:00', '2009/7/28 6:00', '2009/7/28 7:00', '2009/7/28 8:00', '2009/7/28 9:00', '2009/7/28 10:00', '2009/7/28 11:00', '2009/7/28 12:00', '2009/7/28 13:00', '2009/7/28 14:00', '2009/7/28 15:00', '2009/7/28 16:00', '2009/7/28 17:00', '2009/7/28 18:00', '2009/7/28 19:00', '2009/7/28 20:00', '2009/7/28 21:00', '2009/7/28 22:00', '2009/7/28 23:00', + '2009/7/29 0:00', '2009/7/29 1:00', '2009/7/29 2:00', '2009/7/29 3:00', '2009/7/29 4:00', '2009/7/29 5:00', '2009/7/29 6:00', '2009/7/29 7:00', '2009/7/29 8:00', '2009/7/29 9:00', '2009/7/29 10:00', '2009/7/29 11:00', '2009/7/29 12:00', '2009/7/29 13:00', '2009/7/29 14:00', '2009/7/29 15:00', '2009/7/29 16:00', '2009/7/29 17:00', '2009/7/29 18:00', '2009/7/29 19:00', '2009/7/29 20:00', '2009/7/29 21:00', '2009/7/29 22:00', '2009/7/29 23:00', + '2009/7/30 0:00', '2009/7/30 1:00', '2009/7/30 2:00', '2009/7/30 3:00', '2009/7/30 4:00', '2009/7/30 5:00', '2009/7/30 6:00', '2009/7/30 7:00', '2009/7/30 8:00', '2009/7/30 9:00', '2009/7/30 10:00', '2009/7/30 11:00', '2009/7/30 12:00', '2009/7/30 13:00', '2009/7/30 14:00', '2009/7/30 15:00', '2009/7/30 16:00', '2009/7/30 17:00', '2009/7/30 18:00', '2009/7/30 19:00', '2009/7/30 20:00', '2009/7/30 21:00', '2009/7/30 22:00', '2009/7/30 23:00', + '2009/7/31 0:00', '2009/7/31 1:00', '2009/7/31 2:00', '2009/7/31 3:00', '2009/7/31 4:00', '2009/7/31 5:00', '2009/7/31 6:00', '2009/7/31 7:00', '2009/7/31 8:00', '2009/7/31 9:00', '2009/7/31 10:00', '2009/7/31 11:00', '2009/7/31 12:00', '2009/7/31 13:00', '2009/7/31 14:00', '2009/7/31 15:00', '2009/7/31 16:00', '2009/7/31 17:00', '2009/7/31 18:00', '2009/7/31 19:00', '2009/7/31 20:00', '2009/7/31 21:00', '2009/7/31 22:00', '2009/7/31 23:00', + '2009/8/1 0:00', '2009/8/1 1:00', '2009/8/1 2:00', '2009/8/1 3:00', '2009/8/1 4:00', '2009/8/1 5:00', '2009/8/1 6:00', '2009/8/1 7:00', '2009/8/1 8:00', '2009/8/1 9:00', '2009/8/1 10:00', '2009/8/1 11:00', '2009/8/1 12:00', '2009/8/1 13:00', '2009/8/1 14:00', '2009/8/1 15:00', '2009/8/1 16:00', '2009/8/1 17:00', '2009/8/1 18:00', '2009/8/1 19:00', '2009/8/1 20:00', '2009/8/1 21:00', '2009/8/1 22:00', '2009/8/1 23:00', '2009/8/2 0:00', '2009/8/2 1:00', '2009/8/2 2:00', '2009/8/2 3:00', '2009/8/2 4:00', '2009/8/2 5:00', '2009/8/2 6:00', '2009/8/2 7:00', '2009/8/2 8:00', '2009/8/2 9:00', '2009/8/2 10:00', '2009/8/2 11:00', '2009/8/2 12:00', '2009/8/2 13:00', '2009/8/2 14:00', '2009/8/2 15:00', '2009/8/2 16:00', '2009/8/2 17:00', '2009/8/2 18:00', '2009/8/2 19:00', '2009/8/2 20:00', '2009/8/2 21:00', '2009/8/2 22:00', '2009/8/2 23:00', '2009/8/3 0:00', '2009/8/3 1:00', '2009/8/3 2:00', '2009/8/3 3:00', '2009/8/3 4:00', '2009/8/3 5:00', '2009/8/3 6:00', '2009/8/3 7:00', '2009/8/3 8:00', '2009/8/3 9:00', '2009/8/3 10:00', '2009/8/3 11:00', '2009/8/3 12:00', '2009/8/3 13:00', '2009/8/3 14:00', '2009/8/3 15:00', '2009/8/3 16:00', '2009/8/3 17:00', '2009/8/3 18:00', '2009/8/3 19:00', '2009/8/3 20:00', '2009/8/3 21:00', '2009/8/3 22:00', '2009/8/3 23:00', '2009/8/4 0:00', '2009/8/4 1:00', '2009/8/4 2:00', '2009/8/4 3:00', '2009/8/4 4:00', '2009/8/4 5:00', '2009/8/4 6:00', '2009/8/4 7:00', '2009/8/4 8:00', '2009/8/4 9:00', '2009/8/4 10:00', '2009/8/4 11:00', '2009/8/4 12:00', '2009/8/4 13:00', '2009/8/4 14:00', '2009/8/4 15:00', '2009/8/4 16:00', '2009/8/4 17:00', '2009/8/4 18:00', '2009/8/4 19:00', '2009/8/4 20:00', '2009/8/4 21:00', '2009/8/4 22:00', '2009/8/4 23:00', '2009/8/5 0:00', '2009/8/5 1:00', '2009/8/5 2:00', '2009/8/5 3:00', '2009/8/5 4:00', '2009/8/5 5:00', '2009/8/5 6:00', '2009/8/5 7:00', '2009/8/5 8:00', '2009/8/5 9:00', '2009/8/5 10:00', '2009/8/5 11:00', '2009/8/5 12:00', '2009/8/5 13:00', '2009/8/5 14:00', '2009/8/5 15:00', '2009/8/5 16:00', '2009/8/5 17:00', '2009/8/5 18:00', '2009/8/5 19:00', '2009/8/5 20:00', '2009/8/5 21:00', '2009/8/5 22:00', '2009/8/5 23:00', '2009/8/6 0:00', '2009/8/6 1:00', '2009/8/6 2:00', '2009/8/6 3:00', '2009/8/6 4:00', '2009/8/6 5:00', '2009/8/6 6:00', '2009/8/6 7:00', '2009/8/6 8:00', '2009/8/6 9:00', '2009/8/6 10:00', '2009/8/6 11:00', '2009/8/6 12:00', '2009/8/6 13:00', '2009/8/6 14:00', '2009/8/6 15:00', '2009/8/6 16:00', '2009/8/6 17:00', '2009/8/6 18:00', '2009/8/6 19:00', '2009/8/6 20:00', '2009/8/6 21:00', '2009/8/6 22:00', '2009/8/6 23:00', '2009/8/7 0:00', '2009/8/7 1:00', '2009/8/7 2:00', '2009/8/7 3:00', '2009/8/7 4:00', '2009/8/7 5:00', '2009/8/7 6:00', '2009/8/7 7:00', '2009/8/7 8:00', '2009/8/7 9:00', '2009/8/7 10:00', '2009/8/7 11:00', '2009/8/7 12:00', '2009/8/7 13:00', '2009/8/7 14:00', '2009/8/7 15:00', '2009/8/7 16:00', '2009/8/7 17:00', '2009/8/7 18:00', '2009/8/7 19:00', '2009/8/7 20:00', '2009/8/7 21:00', '2009/8/7 22:00', '2009/8/7 23:00', '2009/8/8 0:00', '2009/8/8 1:00', '2009/8/8 2:00', '2009/8/8 3:00', '2009/8/8 4:00', '2009/8/8 5:00', '2009/8/8 6:00', '2009/8/8 7:00', '2009/8/8 8:00', '2009/8/8 9:00', '2009/8/8 10:00', '2009/8/8 11:00', '2009/8/8 12:00', '2009/8/8 13:00', '2009/8/8 14:00', '2009/8/8 15:00', '2009/8/8 16:00', '2009/8/8 17:00', '2009/8/8 18:00', '2009/8/8 19:00', '2009/8/8 20:00', '2009/8/8 21:00', '2009/8/8 22:00', '2009/8/8 23:00', '2009/8/9 0:00', '2009/8/9 1:00', '2009/8/9 2:00', '2009/8/9 3:00', '2009/8/9 4:00', '2009/8/9 5:00', '2009/8/9 6:00', '2009/8/9 7:00', '2009/8/9 8:00', '2009/8/9 9:00', '2009/8/9 10:00', '2009/8/9 11:00', '2009/8/9 12:00', '2009/8/9 13:00', '2009/8/9 14:00', '2009/8/9 15:00', '2009/8/9 16:00', '2009/8/9 17:00', '2009/8/9 18:00', '2009/8/9 19:00', '2009/8/9 20:00', '2009/8/9 21:00', '2009/8/9 22:00', '2009/8/9 23:00', '2009/8/10 0:00', '2009/8/10 1:00', '2009/8/10 2:00', '2009/8/10 3:00', '2009/8/10 4:00', '2009/8/10 5:00', '2009/8/10 6:00', '2009/8/10 7:00', '2009/8/10 8:00', '2009/8/10 9:00', '2009/8/10 10:00', '2009/8/10 11:00', '2009/8/10 12:00', '2009/8/10 13:00', '2009/8/10 14:00', '2009/8/10 15:00', '2009/8/10 16:00', '2009/8/10 17:00', '2009/8/10 18:00', '2009/8/10 19:00', '2009/8/10 20:00', '2009/8/10 21:00', '2009/8/10 22:00', '2009/8/10 23:00', '2009/8/11 0:00', '2009/8/11 1:00', '2009/8/11 2:00', '2009/8/11 3:00', '2009/8/11 4:00', '2009/8/11 5:00', '2009/8/11 6:00', '2009/8/11 7:00', '2009/8/11 8:00', '2009/8/11 9:00', '2009/8/11 10:00', '2009/8/11 11:00', '2009/8/11 12:00', '2009/8/11 13:00', '2009/8/11 14:00', '2009/8/11 15:00', '2009/8/11 16:00', '2009/8/11 17:00', '2009/8/11 18:00', '2009/8/11 19:00', '2009/8/11 20:00', '2009/8/11 21:00', '2009/8/11 22:00', '2009/8/11 23:00', '2009/8/12 0:00', '2009/8/12 1:00', '2009/8/12 2:00', '2009/8/12 3:00', '2009/8/12 4:00', '2009/8/12 5:00', '2009/8/12 6:00', '2009/8/12 7:00', '2009/8/12 8:00', '2009/8/12 9:00', '2009/8/12 10:00', '2009/8/12 11:00', '2009/8/12 12:00', '2009/8/12 13:00', '2009/8/12 14:00', '2009/8/12 15:00', '2009/8/12 16:00', '2009/8/12 17:00', '2009/8/12 18:00', '2009/8/12 19:00', '2009/8/12 20:00', '2009/8/12 21:00', '2009/8/12 22:00', '2009/8/12 23:00', '2009/8/13 0:00', '2009/8/13 1:00', '2009/8/13 2:00', '2009/8/13 3:00', '2009/8/13 4:00', '2009/8/13 5:00', '2009/8/13 6:00', '2009/8/13 7:00', '2009/8/13 8:00', '2009/8/13 9:00', '2009/8/13 10:00', '2009/8/13 11:00', '2009/8/13 12:00', '2009/8/13 13:00', '2009/8/13 14:00', '2009/8/13 15:00', '2009/8/13 16:00', '2009/8/13 17:00', '2009/8/13 18:00', '2009/8/13 19:00', '2009/8/13 20:00', '2009/8/13 21:00', '2009/8/13 22:00', '2009/8/13 23:00', '2009/8/14 0:00', '2009/8/14 1:00', '2009/8/14 2:00', '2009/8/14 3:00', '2009/8/14 4:00', '2009/8/14 5:00', '2009/8/14 6:00', '2009/8/14 7:00', '2009/8/14 8:00', '2009/8/14 9:00', '2009/8/14 10:00', '2009/8/14 11:00', '2009/8/14 12:00', '2009/8/14 13:00', '2009/8/14 14:00', '2009/8/14 15:00', '2009/8/14 16:00', '2009/8/14 17:00', '2009/8/14 18:00', '2009/8/14 19:00', '2009/8/14 20:00', '2009/8/14 21:00', '2009/8/14 22:00', '2009/8/14 23:00', '2009/8/15 0:00', '2009/8/15 1:00', '2009/8/15 2:00', '2009/8/15 3:00', '2009/8/15 4:00', '2009/8/15 5:00', '2009/8/15 6:00', '2009/8/15 7:00', '2009/8/15 8:00', '2009/8/15 9:00', '2009/8/15 10:00', '2009/8/15 11:00', '2009/8/15 12:00', '2009/8/15 13:00', '2009/8/15 14:00', '2009/8/15 15:00', '2009/8/15 16:00', '2009/8/15 17:00', '2009/8/15 18:00', '2009/8/15 19:00', '2009/8/15 20:00', '2009/8/15 21:00', '2009/8/15 22:00', '2009/8/15 23:00', '2009/8/16 0:00', '2009/8/16 1:00', '2009/8/16 2:00', '2009/8/16 3:00', '2009/8/16 4:00', '2009/8/16 5:00', '2009/8/16 6:00', '2009/8/16 7:00', '2009/8/16 8:00', '2009/8/16 9:00', '2009/8/16 10:00', '2009/8/16 11:00', '2009/8/16 12:00', '2009/8/16 13:00', '2009/8/16 14:00', '2009/8/16 15:00', '2009/8/16 16:00', '2009/8/16 17:00', '2009/8/16 18:00', '2009/8/16 19:00', '2009/8/16 20:00', '2009/8/16 21:00', '2009/8/16 22:00', '2009/8/16 23:00', '2009/8/17 0:00', '2009/8/17 1:00', '2009/8/17 2:00', '2009/8/17 3:00', '2009/8/17 4:00', '2009/8/17 5:00', '2009/8/17 6:00', '2009/8/17 7:00', '2009/8/17 8:00', '2009/8/17 9:00', '2009/8/17 10:00', '2009/8/17 11:00', '2009/8/17 12:00', '2009/8/17 13:00', '2009/8/17 14:00', '2009/8/17 15:00', '2009/8/17 16:00', '2009/8/17 17:00', '2009/8/17 18:00', '2009/8/17 19:00', '2009/8/17 20:00', '2009/8/17 21:00', '2009/8/17 22:00', '2009/8/17 23:00', '2009/8/18 0:00', '2009/8/18 1:00', '2009/8/18 2:00', '2009/8/18 3:00', '2009/8/18 4:00', '2009/8/18 5:00', '2009/8/18 6:00', '2009/8/18 7:00', '2009/8/18 8:00', '2009/8/18 9:00', '2009/8/18 10:00', '2009/8/18 11:00', '2009/8/18 12:00', '2009/8/18 13:00', '2009/8/18 14:00', '2009/8/18 15:00', '2009/8/18 16:00', '2009/8/18 17:00', '2009/8/18 18:00', '2009/8/18 19:00', '2009/8/18 20:00', '2009/8/18 21:00', '2009/8/18 22:00', '2009/8/18 23:00', '2009/8/19 0:00', '2009/8/19 1:00', '2009/8/19 2:00', '2009/8/19 3:00', '2009/8/19 4:00', '2009/8/19 5:00', '2009/8/19 6:00', '2009/8/19 7:00', '2009/8/19 8:00', '2009/8/19 9:00', '2009/8/19 10:00', '2009/8/19 11:00', '2009/8/19 12:00', '2009/8/19 13:00', '2009/8/19 14:00', '2009/8/19 15:00', '2009/8/19 16:00', '2009/8/19 17:00', '2009/8/19 18:00', '2009/8/19 19:00', '2009/8/19 20:00', '2009/8/19 21:00', '2009/8/19 22:00', '2009/8/19 23:00', '2009/8/20 0:00', '2009/8/20 1:00', '2009/8/20 2:00', '2009/8/20 3:00', '2009/8/20 4:00', '2009/8/20 5:00', '2009/8/20 6:00', '2009/8/20 7:00', '2009/8/20 8:00', '2009/8/20 9:00', '2009/8/20 10:00', '2009/8/20 11:00', '2009/8/20 12:00', '2009/8/20 13:00', '2009/8/20 14:00', '2009/8/20 15:00', '2009/8/20 16:00', '2009/8/20 17:00', '2009/8/20 18:00', '2009/8/20 19:00', '2009/8/20 20:00', '2009/8/20 21:00', '2009/8/20 22:00', '2009/8/20 23:00', '2009/8/21 0:00', '2009/8/21 1:00', '2009/8/21 2:00', '2009/8/21 3:00', '2009/8/21 4:00', '2009/8/21 5:00', '2009/8/21 6:00', '2009/8/21 7:00', '2009/8/21 8:00', '2009/8/21 9:00', '2009/8/21 10:00', '2009/8/21 11:00', '2009/8/21 12:00', '2009/8/21 13:00', '2009/8/21 14:00', '2009/8/21 15:00', '2009/8/21 16:00', '2009/8/21 17:00', '2009/8/21 18:00', '2009/8/21 19:00', '2009/8/21 20:00', '2009/8/21 21:00', '2009/8/21 22:00', '2009/8/21 23:00', '2009/8/22 0:00', '2009/8/22 1:00', '2009/8/22 2:00', '2009/8/22 3:00', '2009/8/22 4:00', '2009/8/22 5:00', '2009/8/22 6:00', '2009/8/22 7:00', '2009/8/22 8:00', '2009/8/22 9:00', '2009/8/22 10:00', '2009/8/22 11:00', '2009/8/22 12:00', '2009/8/22 13:00', '2009/8/22 14:00', '2009/8/22 15:00', '2009/8/22 16:00', '2009/8/22 17:00', '2009/8/22 18:00', '2009/8/22 19:00', '2009/8/22 20:00', '2009/8/22 21:00', '2009/8/22 22:00', '2009/8/22 23:00', '2009/8/23 0:00', '2009/8/23 1:00', '2009/8/23 2:00', '2009/8/23 3:00', '2009/8/23 4:00', '2009/8/23 5:00', '2009/8/23 6:00', '2009/8/23 7:00', '2009/8/23 8:00', '2009/8/23 9:00', '2009/8/23 10:00', '2009/8/23 11:00', '2009/8/23 12:00', '2009/8/23 13:00', '2009/8/23 14:00', '2009/8/23 15:00', '2009/8/23 16:00', '2009/8/23 17:00', '2009/8/23 18:00', '2009/8/23 19:00', '2009/8/23 20:00', '2009/8/23 21:00', '2009/8/23 22:00', '2009/8/23 23:00', '2009/8/24 0:00', '2009/8/24 1:00', '2009/8/24 2:00', '2009/8/24 3:00', '2009/8/24 4:00', '2009/8/24 5:00', '2009/8/24 6:00', '2009/8/24 7:00', '2009/8/24 8:00', '2009/8/24 9:00', '2009/8/24 10:00', '2009/8/24 11:00', '2009/8/24 12:00', '2009/8/24 13:00', '2009/8/24 14:00', '2009/8/24 15:00', '2009/8/24 16:00', '2009/8/24 17:00', '2009/8/24 18:00', '2009/8/24 19:00', '2009/8/24 20:00', '2009/8/24 21:00', '2009/8/24 22:00', '2009/8/24 23:00', '2009/8/25 0:00', '2009/8/25 1:00', '2009/8/25 2:00', '2009/8/25 3:00', '2009/8/25 4:00', '2009/8/25 5:00', '2009/8/25 6:00', '2009/8/25 7:00', '2009/8/25 8:00', '2009/8/25 9:00', '2009/8/25 10:00', '2009/8/25 11:00', '2009/8/25 12:00', '2009/8/25 13:00', '2009/8/25 14:00', '2009/8/25 15:00', '2009/8/25 16:00', '2009/8/25 17:00', '2009/8/25 18:00', '2009/8/25 19:00', '2009/8/25 20:00', '2009/8/25 21:00', '2009/8/25 22:00', '2009/8/25 23:00', '2009/8/26 0:00', '2009/8/26 1:00', '2009/8/26 2:00', '2009/8/26 3:00', '2009/8/26 4:00', '2009/8/26 5:00', '2009/8/26 6:00', '2009/8/26 7:00', '2009/8/26 8:00', '2009/8/26 9:00', '2009/8/26 10:00', '2009/8/26 11:00', '2009/8/26 12:00', '2009/8/26 13:00', '2009/8/26 14:00', '2009/8/26 15:00', '2009/8/26 16:00', '2009/8/26 17:00', '2009/8/26 18:00', '2009/8/26 19:00', '2009/8/26 20:00', '2009/8/26 21:00', '2009/8/26 22:00', '2009/8/26 23:00', '2009/8/27 0:00', '2009/8/27 1:00', '2009/8/27 2:00', '2009/8/27 3:00', '2009/8/27 4:00', '2009/8/27 5:00', '2009/8/27 6:00', '2009/8/27 7:00', '2009/8/27 8:00', '2009/8/27 9:00', '2009/8/27 10:00', '2009/8/27 11:00', '2009/8/27 12:00', '2009/8/27 13:00', '2009/8/27 14:00', '2009/8/27 15:00', '2009/8/27 16:00', '2009/8/27 17:00', '2009/8/27 18:00', '2009/8/27 19:00', '2009/8/27 20:00', '2009/8/27 21:00', '2009/8/27 22:00', '2009/8/27 23:00', '2009/8/28 0:00', '2009/8/28 1:00', '2009/8/28 2:00', '2009/8/28 3:00', '2009/8/28 4:00', '2009/8/28 5:00', '2009/8/28 6:00', '2009/8/28 7:00', '2009/8/28 8:00', '2009/8/28 9:00', '2009/8/28 10:00', '2009/8/28 11:00', '2009/8/28 12:00', '2009/8/28 13:00', '2009/8/28 14:00', '2009/8/28 15:00', '2009/8/28 16:00', '2009/8/28 17:00', '2009/8/28 18:00', '2009/8/28 19:00', '2009/8/28 20:00', '2009/8/28 21:00', '2009/8/28 22:00', '2009/8/28 23:00', '2009/8/29 0:00', '2009/8/29 1:00', '2009/8/29 2:00', '2009/8/29 3:00', '2009/8/29 4:00', '2009/8/29 5:00', '2009/8/29 6:00', '2009/8/29 7:00', '2009/8/29 8:00', '2009/8/29 9:00', '2009/8/29 10:00', '2009/8/29 11:00', '2009/8/29 12:00', '2009/8/29 13:00', '2009/8/29 14:00', '2009/8/29 15:00', '2009/8/29 16:00', '2009/8/29 17:00', '2009/8/29 18:00', '2009/8/29 19:00', '2009/8/29 20:00', '2009/8/29 21:00', '2009/8/29 22:00', '2009/8/29 23:00', '2009/8/30 0:00', '2009/8/30 1:00', '2009/8/30 2:00', '2009/8/30 3:00', '2009/8/30 4:00', '2009/8/30 5:00', '2009/8/30 6:00', '2009/8/30 7:00', '2009/8/30 8:00', '2009/8/30 9:00', '2009/8/30 10:00', '2009/8/30 11:00', '2009/8/30 12:00', '2009/8/30 13:00', '2009/8/30 14:00', '2009/8/30 15:00', '2009/8/30 16:00', '2009/8/30 17:00', '2009/8/30 18:00', '2009/8/30 19:00', '2009/8/30 20:00', '2009/8/30 21:00', '2009/8/30 22:00', '2009/8/30 23:00', '2009/8/31 0:00', '2009/8/31 1:00', '2009/8/31 2:00', '2009/8/31 3:00', '2009/8/31 4:00', '2009/8/31 5:00', '2009/8/31 6:00', '2009/8/31 7:00', '2009/8/31 8:00', '2009/8/31 9:00', '2009/8/31 10:00', '2009/8/31 11:00', '2009/8/31 12:00', '2009/8/31 13:00', '2009/8/31 14:00', '2009/8/31 15:00', '2009/8/31 16:00', '2009/8/31 17:00', '2009/8/31 18:00', '2009/8/31 19:00', '2009/8/31 20:00', '2009/8/31 21:00', '2009/8/31 22:00', '2009/8/31 23:00', + '2009/9/1 0:00', '2009/9/1 1:00', '2009/9/1 2:00', '2009/9/1 3:00', '2009/9/1 4:00', '2009/9/1 5:00', '2009/9/1 6:00', '2009/9/1 7:00', '2009/9/1 8:00', '2009/9/1 9:00', '2009/9/1 10:00', '2009/9/1 11:00', '2009/9/1 12:00', '2009/9/1 13:00', '2009/9/1 14:00', '2009/9/1 15:00', '2009/9/1 16:00', '2009/9/1 17:00', '2009/9/1 18:00', '2009/9/1 19:00', '2009/9/1 20:00', '2009/9/1 21:00', '2009/9/1 22:00', '2009/9/1 23:00', '2009/9/2 0:00', '2009/9/2 1:00', '2009/9/2 2:00', '2009/9/2 3:00', '2009/9/2 4:00', '2009/9/2 5:00', '2009/9/2 6:00', '2009/9/2 7:00', '2009/9/2 8:00', '2009/9/2 9:00', '2009/9/2 10:00', '2009/9/2 11:00', '2009/9/2 12:00', '2009/9/2 13:00', '2009/9/2 14:00', '2009/9/2 15:00', '2009/9/2 16:00', '2009/9/2 17:00', '2009/9/2 18:00', '2009/9/2 19:00', '2009/9/2 20:00', '2009/9/2 21:00', '2009/9/2 22:00', '2009/9/2 23:00', '2009/9/3 0:00', '2009/9/3 1:00', '2009/9/3 2:00', '2009/9/3 3:00', '2009/9/3 4:00', '2009/9/3 5:00', '2009/9/3 6:00', '2009/9/3 7:00', '2009/9/3 8:00', '2009/9/3 9:00', '2009/9/3 10:00', '2009/9/3 11:00', '2009/9/3 12:00', '2009/9/3 13:00', '2009/9/3 14:00', '2009/9/3 15:00', '2009/9/3 16:00', '2009/9/3 17:00', '2009/9/3 18:00', '2009/9/3 19:00', '2009/9/3 20:00', '2009/9/3 21:00', '2009/9/3 22:00', '2009/9/3 23:00', '2009/9/4 0:00', '2009/9/4 1:00', '2009/9/4 2:00', '2009/9/4 3:00', '2009/9/4 4:00', '2009/9/4 5:00', '2009/9/4 6:00', '2009/9/4 7:00', '2009/9/4 8:00', '2009/9/4 9:00', '2009/9/4 10:00', '2009/9/4 11:00', '2009/9/4 12:00', '2009/9/4 13:00', '2009/9/4 14:00', '2009/9/4 15:00', '2009/9/4 16:00', '2009/9/4 17:00', '2009/9/4 18:00', '2009/9/4 19:00', '2009/9/4 20:00', '2009/9/4 21:00', '2009/9/4 22:00', '2009/9/4 23:00', '2009/9/5 0:00', '2009/9/5 1:00', '2009/9/5 2:00', '2009/9/5 3:00', '2009/9/5 4:00', '2009/9/5 5:00', '2009/9/5 6:00', '2009/9/5 7:00', '2009/9/5 8:00', '2009/9/5 9:00', '2009/9/5 10:00', '2009/9/5 11:00', '2009/9/5 12:00', '2009/9/5 13:00', '2009/9/5 14:00', '2009/9/5 15:00', '2009/9/5 16:00', '2009/9/5 17:00', '2009/9/5 18:00', '2009/9/5 19:00', '2009/9/5 20:00', '2009/9/5 21:00', '2009/9/5 22:00', '2009/9/5 23:00', '2009/9/6 0:00', '2009/9/6 1:00', '2009/9/6 2:00', '2009/9/6 3:00', '2009/9/6 4:00', '2009/9/6 5:00', '2009/9/6 6:00', '2009/9/6 7:00', '2009/9/6 8:00', '2009/9/6 9:00', '2009/9/6 10:00', '2009/9/6 11:00', '2009/9/6 12:00', '2009/9/6 13:00', '2009/9/6 14:00', '2009/9/6 15:00', '2009/9/6 16:00', '2009/9/6 17:00', '2009/9/6 18:00', '2009/9/6 19:00', '2009/9/6 20:00', '2009/9/6 21:00', '2009/9/6 22:00', '2009/9/6 23:00', '2009/9/7 0:00', '2009/9/7 1:00', '2009/9/7 2:00', '2009/9/7 3:00', '2009/9/7 4:00', '2009/9/7 5:00', '2009/9/7 6:00', '2009/9/7 7:00', '2009/9/7 8:00', '2009/9/7 9:00', '2009/9/7 10:00', '2009/9/7 11:00', '2009/9/7 12:00', '2009/9/7 13:00', '2009/9/7 14:00', '2009/9/7 15:00', '2009/9/7 16:00', '2009/9/7 17:00', '2009/9/7 18:00', '2009/9/7 19:00', '2009/9/7 20:00', '2009/9/7 21:00', '2009/9/7 22:00', '2009/9/7 23:00', '2009/9/8 0:00', '2009/9/8 1:00', '2009/9/8 2:00', '2009/9/8 3:00', '2009/9/8 4:00', '2009/9/8 5:00', '2009/9/8 6:00', '2009/9/8 7:00', '2009/9/8 8:00', '2009/9/8 9:00', '2009/9/8 10:00', '2009/9/8 11:00', '2009/9/8 12:00', '2009/9/8 13:00', '2009/9/8 14:00', '2009/9/8 15:00', '2009/9/8 16:00', '2009/9/8 17:00', '2009/9/8 18:00', '2009/9/8 19:00', '2009/9/8 20:00', '2009/9/8 21:00', '2009/9/8 22:00', '2009/9/8 23:00', '2009/9/9 0:00', '2009/9/9 1:00', '2009/9/9 2:00', '2009/9/9 3:00', '2009/9/9 4:00', '2009/9/9 5:00', '2009/9/9 6:00', '2009/9/9 7:00', '2009/9/9 8:00', '2009/9/9 9:00', '2009/9/9 10:00', '2009/9/9 11:00', '2009/9/9 12:00', '2009/9/9 13:00', '2009/9/9 14:00', '2009/9/9 15:00', '2009/9/9 16:00', '2009/9/9 17:00', '2009/9/9 18:00', '2009/9/9 19:00', '2009/9/9 20:00', '2009/9/9 21:00', '2009/9/9 22:00', '2009/9/9 23:00', '2009/9/10 0:00', '2009/9/10 1:00', '2009/9/10 2:00', '2009/9/10 3:00', '2009/9/10 4:00', '2009/9/10 5:00', '2009/9/10 6:00', '2009/9/10 7:00', '2009/9/10 8:00', '2009/9/10 9:00', '2009/9/10 10:00', '2009/9/10 11:00', '2009/9/10 12:00', '2009/9/10 13:00', '2009/9/10 14:00', '2009/9/10 15:00', '2009/9/10 16:00', '2009/9/10 17:00', '2009/9/10 18:00', '2009/9/10 19:00', '2009/9/10 20:00', '2009/9/10 21:00', '2009/9/10 22:00', '2009/9/10 23:00', '2009/9/11 0:00', '2009/9/11 1:00', '2009/9/11 2:00', '2009/9/11 3:00', '2009/9/11 4:00', '2009/9/11 5:00', '2009/9/11 6:00', '2009/9/11 7:00', '2009/9/11 8:00', '2009/9/11 9:00', '2009/9/11 10:00', '2009/9/11 11:00', '2009/9/11 12:00', '2009/9/11 13:00', '2009/9/11 14:00', '2009/9/11 15:00', '2009/9/11 16:00', '2009/9/11 17:00', '2009/9/11 18:00', '2009/9/11 19:00', '2009/9/11 20:00', '2009/9/11 21:00', '2009/9/11 22:00', '2009/9/11 23:00', '2009/9/12 0:00', '2009/9/12 1:00', '2009/9/12 2:00', '2009/9/12 3:00', '2009/9/12 4:00', '2009/9/12 5:00', '2009/9/12 6:00', '2009/9/12 7:00', '2009/9/12 8:00', '2009/9/12 9:00', '2009/9/12 10:00', '2009/9/12 11:00', '2009/9/12 12:00', '2009/9/12 13:00', '2009/9/12 14:00', '2009/9/12 15:00', '2009/9/12 16:00', '2009/9/12 17:00', '2009/9/12 18:00', '2009/9/12 19:00', '2009/9/12 20:00', '2009/9/12 21:00', '2009/9/12 22:00', '2009/9/12 23:00', '2009/9/13 0:00', '2009/9/13 1:00', '2009/9/13 2:00', '2009/9/13 3:00', '2009/9/13 4:00', '2009/9/13 5:00', '2009/9/13 6:00', '2009/9/13 7:00', '2009/9/13 8:00', '2009/9/13 9:00', '2009/9/13 10:00', '2009/9/13 11:00', '2009/9/13 12:00', '2009/9/13 13:00', '2009/9/13 14:00', '2009/9/13 15:00', '2009/9/13 16:00', '2009/9/13 17:00', '2009/9/13 18:00', '2009/9/13 19:00', '2009/9/13 20:00', '2009/9/13 21:00', '2009/9/13 22:00', '2009/9/13 23:00', '2009/9/14 0:00', '2009/9/14 1:00', '2009/9/14 2:00', '2009/9/14 3:00', '2009/9/14 4:00', '2009/9/14 5:00', '2009/9/14 6:00', '2009/9/14 7:00', '2009/9/14 8:00', '2009/9/14 9:00', '2009/9/14 10:00', '2009/9/14 11:00', '2009/9/14 12:00', '2009/9/14 13:00', '2009/9/14 14:00', '2009/9/14 15:00', '2009/9/14 16:00', '2009/9/14 17:00', '2009/9/14 18:00', '2009/9/14 19:00', '2009/9/14 20:00', '2009/9/14 21:00', '2009/9/14 22:00', '2009/9/14 23:00', '2009/9/15 0:00', '2009/9/15 1:00', '2009/9/15 2:00', '2009/9/15 3:00', '2009/9/15 4:00', '2009/9/15 5:00', '2009/9/15 6:00', '2009/9/15 7:00', '2009/9/15 8:00', '2009/9/15 9:00', '2009/9/15 10:00', '2009/9/15 11:00', '2009/9/15 12:00', '2009/9/15 13:00', '2009/9/15 14:00', '2009/9/15 15:00', '2009/9/15 16:00', '2009/9/15 17:00', '2009/9/15 18:00', '2009/9/15 19:00', '2009/9/15 20:00', '2009/9/15 21:00', '2009/9/15 22:00', '2009/9/15 23:00', '2009/9/16 0:00', '2009/9/16 1:00', '2009/9/16 2:00', '2009/9/16 3:00', '2009/9/16 4:00', '2009/9/16 5:00', '2009/9/16 6:00', '2009/9/16 7:00', '2009/9/16 8:00', '2009/9/16 9:00', '2009/9/16 10:00', '2009/9/16 11:00', '2009/9/16 12:00', '2009/9/16 13:00', '2009/9/16 14:00', '2009/9/16 15:00', '2009/9/16 16:00', '2009/9/16 17:00', '2009/9/16 18:00', '2009/9/16 19:00', '2009/9/16 20:00', '2009/9/16 21:00', '2009/9/16 22:00', '2009/9/16 23:00', '2009/9/17 0:00', '2009/9/17 1:00', '2009/9/17 2:00', '2009/9/17 3:00', '2009/9/17 4:00', '2009/9/17 5:00', '2009/9/17 6:00', '2009/9/17 7:00', '2009/9/17 8:00', '2009/9/17 9:00', '2009/9/17 10:00', '2009/9/17 11:00', '2009/9/17 12:00', '2009/9/17 13:00', '2009/9/17 14:00', '2009/9/17 15:00', '2009/9/17 16:00', '2009/9/17 17:00', '2009/9/17 18:00', '2009/9/17 19:00', '2009/9/17 20:00', '2009/9/17 21:00', '2009/9/17 22:00', '2009/9/17 23:00', '2009/9/18 0:00', '2009/9/18 1:00', '2009/9/18 2:00', '2009/9/18 3:00', '2009/9/18 4:00', '2009/9/18 5:00', '2009/9/18 6:00', '2009/9/18 7:00', '2009/9/18 8:00', '2009/9/18 9:00', '2009/9/18 10:00', '2009/9/18 11:00', '2009/9/18 12:00', '2009/9/18 13:00', '2009/9/18 14:00', '2009/9/18 15:00', '2009/9/18 16:00', '2009/9/18 17:00', '2009/9/18 18:00', '2009/9/18 19:00', '2009/9/18 20:00', '2009/9/18 21:00', '2009/9/18 22:00', '2009/9/18 23:00', '2009/9/19 0:00', '2009/9/19 1:00', '2009/9/19 2:00', '2009/9/19 3:00', '2009/9/19 4:00', '2009/9/19 5:00', '2009/9/19 6:00', '2009/9/19 7:00', '2009/9/19 8:00', '2009/9/19 9:00', '2009/9/19 10:00', '2009/9/19 11:00', '2009/9/19 12:00', '2009/9/19 13:00', '2009/9/19 14:00', '2009/9/19 15:00', '2009/9/19 16:00', '2009/9/19 17:00', '2009/9/19 18:00', '2009/9/19 19:00', '2009/9/19 20:00', '2009/9/19 21:00', '2009/9/19 22:00', '2009/9/19 23:00', '2009/9/20 0:00', '2009/9/20 1:00', '2009/9/20 2:00', '2009/9/20 3:00', '2009/9/20 4:00', '2009/9/20 5:00', '2009/9/20 6:00', '2009/9/20 7:00', '2009/9/20 8:00', '2009/9/20 9:00', '2009/9/20 10:00', '2009/9/20 11:00', '2009/9/20 12:00', '2009/9/20 13:00', '2009/9/20 14:00', '2009/9/20 15:00', '2009/9/20 16:00', '2009/9/20 17:00', '2009/9/20 18:00', '2009/9/20 19:00', '2009/9/20 20:00', '2009/9/20 21:00', '2009/9/20 22:00', '2009/9/20 23:00', '2009/9/21 0:00', '2009/9/21 1:00', '2009/9/21 2:00', '2009/9/21 3:00', '2009/9/21 4:00', '2009/9/21 5:00', '2009/9/21 6:00', '2009/9/21 7:00', '2009/9/21 8:00', '2009/9/21 9:00', '2009/9/21 10:00', '2009/9/21 11:00', '2009/9/21 12:00', '2009/9/21 13:00', '2009/9/21 14:00', '2009/9/21 15:00', '2009/9/21 16:00', '2009/9/21 17:00', '2009/9/21 18:00', '2009/9/21 19:00', '2009/9/21 20:00', '2009/9/21 21:00', '2009/9/21 22:00', '2009/9/21 23:00', '2009/9/22 0:00', '2009/9/22 1:00', '2009/9/22 2:00', '2009/9/22 3:00', '2009/9/22 4:00', '2009/9/22 5:00', '2009/9/22 6:00', '2009/9/22 7:00', '2009/9/22 8:00', '2009/9/22 9:00', '2009/9/22 10:00', '2009/9/22 11:00', '2009/9/22 12:00', '2009/9/22 13:00', '2009/9/22 14:00', '2009/9/22 15:00', '2009/9/22 16:00', '2009/9/22 17:00', '2009/9/22 18:00', '2009/9/22 19:00', '2009/9/22 20:00', '2009/9/22 21:00', '2009/9/22 22:00', '2009/9/22 23:00', '2009/9/23 0:00', '2009/9/23 1:00', '2009/9/23 2:00', '2009/9/23 3:00', '2009/9/23 4:00', '2009/9/23 5:00', '2009/9/23 6:00', '2009/9/23 7:00', '2009/9/23 8:00', '2009/9/23 9:00', '2009/9/23 10:00', '2009/9/23 11:00', '2009/9/23 12:00', '2009/9/23 13:00', '2009/9/23 14:00', '2009/9/23 15:00', '2009/9/23 16:00', '2009/9/23 17:00', '2009/9/23 18:00', '2009/9/23 19:00', '2009/9/23 20:00', '2009/9/23 21:00', '2009/9/23 22:00', '2009/9/23 23:00', '2009/9/24 0:00', '2009/9/24 1:00', '2009/9/24 2:00', '2009/9/24 3:00', '2009/9/24 4:00', '2009/9/24 5:00', '2009/9/24 6:00', '2009/9/24 7:00', '2009/9/24 8:00', '2009/9/24 9:00', '2009/9/24 10:00', '2009/9/24 11:00', '2009/9/24 12:00', '2009/9/24 13:00', '2009/9/24 14:00', '2009/9/24 15:00', '2009/9/24 16:00', '2009/9/24 17:00', '2009/9/24 18:00', '2009/9/24 19:00', '2009/9/24 20:00', '2009/9/24 21:00', '2009/9/24 22:00', '2009/9/24 23:00', '2009/9/25 0:00', '2009/9/25 1:00', '2009/9/25 2:00', '2009/9/25 3:00', '2009/9/25 4:00', '2009/9/25 5:00', '2009/9/25 6:00', '2009/9/25 7:00', '2009/9/25 8:00', '2009/9/25 9:00', '2009/9/25 10:00', '2009/9/25 11:00', '2009/9/25 12:00', '2009/9/25 13:00', '2009/9/25 14:00', '2009/9/25 15:00', '2009/9/25 16:00', '2009/9/25 17:00', '2009/9/25 18:00', '2009/9/25 19:00', '2009/9/25 20:00', '2009/9/25 21:00', '2009/9/25 22:00', '2009/9/25 23:00', '2009/9/26 0:00', '2009/9/26 1:00', '2009/9/26 2:00', '2009/9/26 3:00', '2009/9/26 4:00', '2009/9/26 5:00', '2009/9/26 6:00', '2009/9/26 7:00', '2009/9/26 8:00', '2009/9/26 9:00', '2009/9/26 10:00', '2009/9/26 11:00', '2009/9/26 12:00', '2009/9/26 13:00', '2009/9/26 14:00', '2009/9/26 15:00', '2009/9/26 16:00', '2009/9/26 17:00', '2009/9/26 18:00', '2009/9/26 19:00', '2009/9/26 20:00', '2009/9/26 21:00', '2009/9/26 22:00', '2009/9/26 23:00', '2009/9/27 0:00', '2009/9/27 1:00', '2009/9/27 2:00', '2009/9/27 3:00', '2009/9/27 4:00', '2009/9/27 5:00', '2009/9/27 6:00', '2009/9/27 7:00', '2009/9/27 8:00', '2009/9/27 9:00', '2009/9/27 10:00', '2009/9/27 11:00', '2009/9/27 12:00', '2009/9/27 13:00', '2009/9/27 14:00', '2009/9/27 15:00', '2009/9/27 16:00', '2009/9/27 17:00', '2009/9/27 18:00', '2009/9/27 19:00', '2009/9/27 20:00', '2009/9/27 21:00', '2009/9/27 22:00', '2009/9/27 23:00', '2009/9/28 0:00', '2009/9/28 1:00', '2009/9/28 2:00', '2009/9/28 3:00', '2009/9/28 4:00', '2009/9/28 5:00', '2009/9/28 6:00', '2009/9/28 7:00', '2009/9/28 8:00', '2009/9/28 9:00', '2009/9/28 10:00', '2009/9/28 11:00', '2009/9/28 12:00', '2009/9/28 13:00', '2009/9/28 14:00', '2009/9/28 15:00', '2009/9/28 16:00', '2009/9/28 17:00', '2009/9/28 18:00', '2009/9/28 19:00', '2009/9/28 20:00', '2009/9/28 21:00', '2009/9/28 22:00', '2009/9/28 23:00', '2009/9/29 0:00', '2009/9/29 1:00', '2009/9/29 2:00', '2009/9/29 3:00', '2009/9/29 4:00', '2009/9/29 5:00', '2009/9/29 6:00', '2009/9/29 7:00', '2009/9/29 8:00', '2009/9/29 9:00', '2009/9/29 10:00', '2009/9/29 11:00', '2009/9/29 12:00', '2009/9/29 13:00', '2009/9/29 14:00', '2009/9/29 15:00', '2009/9/29 16:00', '2009/9/29 17:00', '2009/9/29 18:00', '2009/9/29 19:00', '2009/9/29 20:00', '2009/9/29 21:00', '2009/9/29 22:00', '2009/9/29 23:00', '2009/9/30 0:00', '2009/9/30 1:00', '2009/9/30 2:00', '2009/9/30 3:00', '2009/9/30 4:00', '2009/9/30 5:00', '2009/9/30 6:00', '2009/9/30 7:00', '2009/9/30 8:00', '2009/9/30 9:00', '2009/9/30 10:00', '2009/9/30 11:00', '2009/9/30 12:00', '2009/9/30 13:00', '2009/9/30 14:00', '2009/9/30 15:00', '2009/9/30 16:00', '2009/9/30 17:00', '2009/9/30 18:00', '2009/9/30 19:00', '2009/9/30 20:00', '2009/9/30 21:00', '2009/9/30 22:00', '2009/9/30 23:00', + '2009/10/1 0:00', '2009/10/1 1:00', '2009/10/1 2:00', '2009/10/1 3:00', '2009/10/1 4:00', '2009/10/1 5:00', '2009/10/1 6:00', '2009/10/1 7:00', '2009/10/1 8:00', '2009/10/1 9:00', '2009/10/1 10:00', '2009/10/1 11:00', '2009/10/1 12:00', '2009/10/1 13:00', '2009/10/1 14:00', '2009/10/1 15:00', '2009/10/1 16:00', '2009/10/1 17:00', '2009/10/1 18:00', '2009/10/1 19:00', '2009/10/1 20:00', '2009/10/1 21:00', '2009/10/1 22:00', '2009/10/1 23:00', '2009/10/2 0:00', '2009/10/2 1:00', '2009/10/2 2:00', '2009/10/2 3:00', '2009/10/2 4:00', '2009/10/2 5:00', '2009/10/2 6:00', '2009/10/2 7:00', '2009/10/2 8:00', '2009/10/2 9:00', '2009/10/2 10:00', '2009/10/2 11:00', '2009/10/2 12:00', '2009/10/2 13:00', '2009/10/2 14:00', '2009/10/2 15:00', '2009/10/2 16:00', '2009/10/2 17:00', '2009/10/2 18:00', '2009/10/2 19:00', '2009/10/2 20:00', '2009/10/2 21:00', '2009/10/2 22:00', '2009/10/2 23:00', '2009/10/3 0:00', '2009/10/3 1:00', '2009/10/3 2:00', '2009/10/3 3:00', '2009/10/3 4:00', '2009/10/3 5:00', '2009/10/3 6:00', '2009/10/3 7:00', '2009/10/3 8:00', '2009/10/3 9:00', '2009/10/3 10:00', '2009/10/3 11:00', '2009/10/3 12:00', '2009/10/3 13:00', '2009/10/3 14:00', '2009/10/3 15:00', '2009/10/3 16:00', '2009/10/3 17:00', '2009/10/3 18:00', '2009/10/3 19:00', '2009/10/3 20:00', '2009/10/3 21:00', '2009/10/3 22:00', '2009/10/3 23:00', '2009/10/4 0:00', '2009/10/4 1:00', '2009/10/4 2:00', '2009/10/4 3:00', '2009/10/4 4:00', '2009/10/4 5:00', '2009/10/4 6:00', '2009/10/4 7:00', '2009/10/4 8:00', '2009/10/4 9:00', '2009/10/4 10:00', '2009/10/4 11:00', '2009/10/4 12:00', '2009/10/4 13:00', '2009/10/4 14:00', '2009/10/4 15:00', '2009/10/4 16:00', '2009/10/4 17:00', '2009/10/4 18:00', '2009/10/4 19:00', '2009/10/4 20:00', '2009/10/4 21:00', '2009/10/4 22:00', '2009/10/4 23:00', '2009/10/5 0:00', '2009/10/5 1:00', '2009/10/5 2:00', '2009/10/5 3:00', '2009/10/5 4:00', '2009/10/5 5:00', '2009/10/5 6:00', '2009/10/5 7:00', '2009/10/5 8:00', '2009/10/5 9:00', '2009/10/5 10:00', '2009/10/5 11:00', '2009/10/5 12:00', '2009/10/5 13:00', '2009/10/5 14:00', '2009/10/5 15:00', '2009/10/5 16:00', '2009/10/5 17:00', '2009/10/5 18:00', '2009/10/5 19:00', '2009/10/5 20:00', '2009/10/5 21:00', '2009/10/5 22:00', '2009/10/5 23:00', '2009/10/6 0:00', '2009/10/6 1:00', '2009/10/6 2:00', '2009/10/6 3:00', '2009/10/6 4:00', '2009/10/6 5:00', '2009/10/6 6:00', '2009/10/6 7:00', '2009/10/6 8:00', '2009/10/6 9:00', '2009/10/6 10:00', '2009/10/6 11:00', '2009/10/6 12:00', '2009/10/6 13:00', '2009/10/6 14:00', '2009/10/6 15:00', '2009/10/6 16:00', '2009/10/6 17:00', '2009/10/6 18:00', '2009/10/6 19:00', '2009/10/6 20:00', '2009/10/6 21:00', '2009/10/6 22:00', '2009/10/6 23:00', '2009/10/7 0:00', '2009/10/7 1:00', '2009/10/7 2:00', '2009/10/7 3:00', '2009/10/7 4:00', '2009/10/7 5:00', '2009/10/7 6:00', '2009/10/7 7:00', '2009/10/7 8:00', '2009/10/7 9:00', '2009/10/7 10:00', '2009/10/7 11:00', '2009/10/7 12:00', '2009/10/7 13:00', '2009/10/7 14:00', '2009/10/7 15:00', '2009/10/7 16:00', '2009/10/7 17:00', '2009/10/7 18:00', '2009/10/7 19:00', '2009/10/7 20:00', '2009/10/7 21:00', '2009/10/7 22:00', '2009/10/7 23:00', '2009/10/8 0:00', '2009/10/8 1:00', '2009/10/8 2:00', '2009/10/8 3:00', '2009/10/8 4:00', '2009/10/8 5:00', '2009/10/8 6:00', '2009/10/8 7:00', '2009/10/8 8:00', '2009/10/8 9:00', '2009/10/8 10:00', '2009/10/8 11:00', '2009/10/8 12:00', '2009/10/8 13:00', '2009/10/8 14:00', '2009/10/8 15:00', '2009/10/8 16:00', '2009/10/8 17:00', '2009/10/8 18:00', '2009/10/8 19:00', '2009/10/8 20:00', '2009/10/8 21:00', '2009/10/8 22:00', '2009/10/8 23:00', '2009/10/9 0:00', '2009/10/9 1:00', '2009/10/9 2:00', '2009/10/9 3:00', '2009/10/9 4:00', '2009/10/9 5:00', '2009/10/9 6:00', '2009/10/9 7:00', '2009/10/9 8:00', '2009/10/9 9:00', '2009/10/9 10:00', '2009/10/9 11:00', '2009/10/9 12:00', '2009/10/9 13:00', '2009/10/9 14:00', '2009/10/9 15:00', '2009/10/9 16:00', '2009/10/9 17:00', '2009/10/9 18:00', '2009/10/9 19:00', '2009/10/9 20:00', '2009/10/9 21:00', '2009/10/9 22:00', '2009/10/9 23:00', '2009/10/10 0:00', '2009/10/10 1:00', '2009/10/10 2:00', '2009/10/10 3:00', '2009/10/10 4:00', '2009/10/10 5:00', '2009/10/10 6:00', '2009/10/10 7:00', '2009/10/10 8:00', '2009/10/10 9:00', '2009/10/10 10:00', '2009/10/10 11:00', '2009/10/10 12:00', '2009/10/10 13:00', '2009/10/10 14:00', '2009/10/10 15:00', '2009/10/10 16:00', '2009/10/10 17:00', '2009/10/10 18:00', '2009/10/10 19:00', '2009/10/10 20:00', '2009/10/10 21:00', '2009/10/10 22:00', '2009/10/10 23:00', '2009/10/11 0:00', '2009/10/11 1:00', '2009/10/11 2:00', '2009/10/11 3:00', '2009/10/11 4:00', '2009/10/11 5:00', '2009/10/11 6:00', '2009/10/11 7:00', '2009/10/11 8:00', '2009/10/11 9:00', '2009/10/11 10:00', '2009/10/11 11:00', '2009/10/11 12:00', '2009/10/11 13:00', '2009/10/11 14:00', '2009/10/11 15:00', '2009/10/11 16:00', '2009/10/11 17:00', '2009/10/11 18:00', '2009/10/11 19:00', '2009/10/11 20:00', '2009/10/11 21:00', '2009/10/11 22:00', '2009/10/11 23:00', '2009/10/12 0:00', '2009/10/12 1:00', '2009/10/12 2:00', '2009/10/12 3:00', '2009/10/12 4:00', '2009/10/12 5:00', '2009/10/12 6:00', '2009/10/12 7:00', '2009/10/12 8:00', '2009/10/12 9:00', '2009/10/12 10:00', '2009/10/12 11:00', '2009/10/12 12:00', '2009/10/12 13:00', '2009/10/12 14:00', '2009/10/12 15:00', '2009/10/12 16:00', '2009/10/12 17:00', '2009/10/12 18:00', '2009/10/12 19:00', '2009/10/12 20:00', '2009/10/12 21:00', '2009/10/12 22:00', '2009/10/12 23:00', '2009/10/13 0:00', '2009/10/13 1:00', '2009/10/13 2:00', '2009/10/13 3:00', '2009/10/13 4:00', '2009/10/13 5:00', '2009/10/13 6:00', '2009/10/13 7:00', '2009/10/13 8:00', '2009/10/13 9:00', '2009/10/13 10:00', '2009/10/13 11:00', '2009/10/13 12:00', '2009/10/13 13:00', '2009/10/13 14:00', '2009/10/13 15:00', '2009/10/13 16:00', '2009/10/13 17:00', '2009/10/13 18:00', '2009/10/13 19:00', '2009/10/13 20:00', '2009/10/13 21:00', '2009/10/13 22:00', '2009/10/13 23:00', '2009/10/14 0:00', '2009/10/14 1:00', '2009/10/14 2:00', '2009/10/14 3:00', '2009/10/14 4:00', '2009/10/14 5:00', '2009/10/14 6:00', '2009/10/14 7:00', '2009/10/14 8:00', '2009/10/14 9:00', '2009/10/14 10:00', '2009/10/14 11:00', '2009/10/14 12:00', '2009/10/14 13:00', '2009/10/14 14:00', '2009/10/14 15:00', '2009/10/14 16:00', '2009/10/14 17:00', '2009/10/14 18:00', '2009/10/14 19:00', '2009/10/14 20:00', '2009/10/14 21:00', '2009/10/14 22:00', '2009/10/14 23:00', '2009/10/15 0:00', '2009/10/15 1:00', '2009/10/15 2:00', '2009/10/15 3:00', '2009/10/15 4:00', '2009/10/15 5:00', '2009/10/15 6:00', '2009/10/15 7:00', '2009/10/15 8:00', '2009/10/15 9:00', '2009/10/15 10:00', '2009/10/15 11:00', '2009/10/15 12:00', '2009/10/15 13:00', '2009/10/15 14:00', '2009/10/15 15:00', '2009/10/15 16:00', '2009/10/15 17:00', '2009/10/15 18:00', '2009/10/15 19:00', '2009/10/15 20:00', '2009/10/15 21:00', '2009/10/15 22:00', '2009/10/15 23:00', '2009/10/16 0:00', '2009/10/16 1:00', '2009/10/16 2:00', '2009/10/16 3:00', '2009/10/16 4:00', '2009/10/16 5:00', '2009/10/16 6:00', '2009/10/16 7:00', '2009/10/16 8:00', '2009/10/16 9:00', '2009/10/16 10:00', '2009/10/16 11:00', '2009/10/16 12:00', '2009/10/16 13:00', '2009/10/16 14:00', '2009/10/16 15:00', '2009/10/16 16:00', '2009/10/16 17:00', '2009/10/16 18:00', '2009/10/16 19:00', '2009/10/16 20:00', '2009/10/16 21:00', '2009/10/16 22:00', '2009/10/16 23:00', '2009/10/17 0:00', '2009/10/17 1:00', '2009/10/17 2:00', '2009/10/17 3:00', '2009/10/17 4:00', '2009/10/17 5:00', '2009/10/17 6:00', '2009/10/17 7:00', '2009/10/17 8:00', '2009/10/17 9:00', '2009/10/17 10:00', '2009/10/17 11:00', '2009/10/17 12:00', '2009/10/17 13:00', '2009/10/17 14:00', '2009/10/17 15:00', '2009/10/17 16:00', '2009/10/17 17:00', '2009/10/17 18:00', '2009/10/17 19:00', '2009/10/17 20:00', '2009/10/17 21:00', '2009/10/17 22:00', '2009/10/17 23:00', '2009/10/18 0:00', '2009/10/18 1:00', '2009/10/18 2:00', '2009/10/18 3:00', '2009/10/18 4:00', '2009/10/18 5:00', '2009/10/18 6:00', '2009/10/18 7:00', '2009/10/18 8:00' + ] + } + ], + yAxis: [ + { + name: '流量(m^3/s)', + type: 'value', + max: 500 + }, + { + name: '降雨量(mm)', + type: 'value', + axisLabel: { + formatter: function (v) { + return -v + } + } + } + ], + series: [ + { + name: '流量', + type: 'line', + itemStyle: { normal: { areaStyle: { type: 'default' } } }, + data: [ + 0.97, 0.96, 0.96, 0.95, 0.95, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.93, 0.92, 0.91, 0.9, 0.89, 0.88, 0.87, 0.87, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.87, 0.88, 0.9, 0.93, 0.96, 0.99, 1.03, 1.06, 1.1, 1.14, 1.17, 1.2, 1.23, 1.26, 1.29, 1.33, 1.36, 1.4, 1.43, 1.45, 1.48, 1.49, 1.51, 1.51, 1.5, 1.49, 1.47, 1.44, 1.41, 1.37, 1.34, 1.3, 1.27, 1.24, 1.22, 1.2, 1.19, 1.18, 1.16, 1.15, 1.14, 1.13, 1.12, 1.11, 1.11, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.1, 1.09, 1.09, 1.08, 1.07, 1.06, 1.05, 1.04, 1.03, 1.03, 1.02, 1.01, 1.01, 1, 0.99, 0.98, 0.97, 0.96, 0.96, 0.95, 0.95, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.93, 0.92, 0.91, 0.9, 0.89, 0.88, 0.87, 0.87, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.85, 0.84, 0.83, 0.82, 0.81, 0.8, 0.8, 0.79, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.77, 0.75, 0.73, 0.71, 0.68, 0.65, 0.63, 0.61, 0.59, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.57, 0.57, 0.57, 0.56, 0.55, 0.55, 0.54, 0.54, 0.53, 0.52, 0.52, 0.51, 0.51, 0.5, 0.5, 0.49, 0.48, 0.48, 0.47, 0.47, 0.47, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.52, 0.67, 0.9, 1.19, 1.52, 1.87, 2.22, 2.55, 2.84, 3.07, 3.22, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.28, 3.24, 3.13, 2.97, 2.77, 2.54, 2.3, 2.05, 1.82, 1.62, 1.46, 1.35, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.31, 1.3, 1.26, 1.21, 1.14, 1.06, 0.97, 0.89, 0.81, 0.74, 0.69, 0.65, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.63, 0.63, 0.62, 0.62, 0.61, 0.6, 0.59, 0.59, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.59, 0.61, 0.63, 0.65, 0.68, 0.71, 0.73, 0.75, 0.77, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.77, 0.75, 0.73, 0.71, 0.68, 0.65, 0.63, 0.61, 0.59, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.59, 0.59, 0.6, 0.61, 0.62, 0.62, 0.63, 0.63, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.65, 0.66, 0.68, 0.69, 0.71, 0.73, 0.74, 0.76, 0.77, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.79, 0.81, 0.82, 0.84, 0.86, 0.88, 0.9, 0.92, 0.93, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.93, 0.92, 0.91, 0.9, 0.89, 0.88, 0.87, 0.87, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.85, 0.84, 0.82, 0.8, 0.78, 0.76, 0.75, 0.73, 0.72, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.72, 0.73, 0.74, 0.76, 0.78, 0.79, 0.82, 0.84, 0.86, 0.89, 0.91, 0.94, 0.97, 1, 1.02, 1.05, 1.08, 1.11, 1.14, 1.17, 1.19, 1.22, 1.25, 1.27, 1.29, 1.31, 1.33, 1.35, 1.36, 1.38, 1.39, 1.39, 1.4, 1.4, 1.4, 1.39, 1.37, 1.35, 1.32, 1.29, 1.26, 1.22, 1.18, 1.14, 1.1, 1.05, 1.01, 0.97, 0.93, 0.89, 0.85, 0.82, 0.78, 0.76, 0.74, 0.72, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.72, 0.73, 0.74, 0.75, 0.77, 0.78, 0.8, 0.82, 0.84, 0.87, 0.89, 0.92, 0.94, 0.97, 0.99, 1.02, 1.05, 1.08, 1.1, 1.13, 1.16, 1.18, 1.21, 1.23, 1.26, 1.28, 1.3, 1.32, 1.34, 1.35, 1.37, 1.38, 1.39, 1.4, 1.41, 1.41, 1.42, 1.42, 1.43, 1.43, 1.43, 1.44, 1.44, 1.44, 1.44, 1.45, 1.45, 1.45, 1.46, 1.46, 1.46, 1.47, 1.47, 1.48, 1.48, 1.49, 1.5, 1.51, 1.54, 1.62, 1.73, 1.88, 2.05, 2.24, 2.45, 2.67, 2.89, 3.11, 3.31, 3.51, 3.69, 3.86, 4.03, 4.18, 4.33, 4.48, 4.62, 4.76, 4.89, 5.02, 5.16, 5.29, 5.43, 5.57, 5.71, 5.86, 6.02, 6.18, 6.36, 6.54, 6.73, 6.93, 7.15, 7.38, 7.62, 7.88, 8.16, 8.46, 8.77, 9.11, 9.46, 9.84, 10.24, 10.67, 11.12, 11.6, 12.3, 13.66, 16, 38.43, 82.21, 146.6, 218.7, 226, 225.23, 223.08, 219.78, 212, 199.82, 184.6, 168, 151.65, 137.21, 126.31, 119.94, 115.52, 112.06, 108.92, 105.44, 101, 94.56, 86.36, 77.67, 69.76, 63.9, 60.38, 57.41, 54.84, 52.57, 50.56, 48.71, 46.97, 45.25, 43.48, 41.6, 39.5, 37.19, 34.81, 32.46, 30.27, 28.36, 26.85, 25.86, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.5, 25.27, 24.65, 23.7, 22.52, 21.17, 19.75, 18.33, 16.98, 15.8, 14.85, 14.23, 14, 14.02, 14.08, 14.17, 14.29, 14.44, 14.61, 14.8, 15.01, 15.23, 15.47, 15.71, 15.95, 16.19, 16.43, 16.67, 16.89, 17.1, 17.29, 17.46, 17.61, 17.73, 17.82, 17.88, 17.9, 17.63, 16.88, 15.75, 14.33, 12.71, 10.98, 9.23, 7.56, 6.05, 4.81, 3.92, 3.47, 3.28, 3.1, 2.93, 2.76, 2.61, 2.46, 2.32, 2.19, 2.07, 1.96, 1.85, 1.75, 1.66, 1.58, 1.51, 1.44, 1.39, 1.34, 1.29, 1.26, 1.23, 1.22, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.21, 1.21, 1.21, 1.21, 1.22, 1.22, 1.22, 1.23, 1.23, 1.23, 1.24, 1.24, 1.25, 1.25, 1.25, 1.26, 1.26, 1.27, 1.27, 1.27, 1.28, 1.28, 1.28, 1.29, 1.29, 1.29, 1.29, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1.29, 1.29, 1.29, 1.29, 1.28, 1.28, 1.28, 1.27, 1.27, 1.26, 1.25, 1.25, 1.24, 1.23, 1.23, 1.22, 1.21, 1.2, 1.16, 1.06, 0.95, 0.83, 0.74, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.65, 0.66, 0.68, 0.69, 0.71, 0.73, 0.74, 0.76, 0.77, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.8, 0.86, 0.95, 1.08, 1.25, 1.46, 1.7, 1.97, 2.28, 2.63, 3.01, 3.42, 3.87, 4.35, 4.86, 5.4, 5.98, 6.59, 7.92, 10.49, 14.04, 18.31, 23.04, 27.98, 32.87, 37.45, 41.46, 44.64, 46.74, 47.5, 46.86, 45.16, 42.77, 40.04, 37.33, 35, 32.74, 30.21, 27.7, 25.5, 23.9, 23.2, 23.06, 22.94, 22.84, 22.77, 22.72, 22.7, 22.8, 23.23, 23.95, 24.91, 26.04, 27.3, 28.76, 30.7, 33.39, 37.12, 42.15, 48.77, 65.22, 252.1, 257, 237.32, 221.19, 212, 208.67, 206.89, 205.2, 202.15, 189.82, 172, 165.3, 160.49, 156.8, 153.44, 149.62, 144.6, 138.27, 131, 123.11, 114.9, 106.69, 98.79, 91.5, 85.13, 80, 75.53, 71.03, 66.65, 62.54, 58.85, 55.73, 53.31, 51.75, 51.2, 56.53, 68.25, 80, 91.01, 102.03, 109, 112.37, 115.29, 117.68, 119.48, 120.61, 121, 119.45, 115.57, 110.52, 105.47, 101.58, 100, 99.97, 99.94, 99.92, 99.9, 99.88, 99.86, 99.85, 99.84, 99.83, 99.82, 99.81, 99.81, 99.8, 99.8, 99.8, 122.15, 163.65, 186, 182.96, 175.15, 164.56, 153.18, 143, 136, 131.37, 126.98, 122.81, 118.85, 115.09, 111.52, 108.13, 104.9, 101.83, 98.9, 96.11, 93.44, 90.87, 88.41, 86.04, 83.74, 81.51, 79.33, 77.2, 75.1, 73.02, 70.95, 68.88, 66.8, 64.87, 63.14, 61.4, 59.53, 57.67, 56, 54.6, 53.36, 52.2, 51.05, 49.85, 48.5, 46.87, 44.92, 42.74, 40.42, 38.04, 35.69, 33.46, 31.44, 29.72, 28.38, 27.51, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.2, 27.14, 26.97, 26.7, 26.35, 25.95, 25.49, 25.02, 24.53, 24.04, 23.58, 23.16, 22.8, 22.46, 22.11, 21.75, 21.39, 21.03, 20.69, 20.36, 20.05, 19.78, 19.54, 19.35, 19.2, 19.09, 19, 18.92, 18.85, 18.79, 18.74, 18.68, 18.62, 18.56, 18.49, 18.4, 18.3, 18.17, 18.02, 17.83, 17.63, 17.41, 17.18, 16.93, 16.68, 16.43, 16.18, 15.93, 15.7, 15.47, 15.22, 14.97, 14.71, 14.45, 14.18, 13.93, 13.68, 13.44, 13.21, 13, 12.8, 12.62, 12.46, 12.31, 12.16, 12.03, 11.89, 11.76, 11.62, 11.48, 11.33, 11.17, 11, 10.81, 10.59, 10.36, 10.12, 9.86, 9.61, 9.36, 9.12, 8.89, 8.68, 8.5, 8.35, 8.21, 8.08, 7.94, 7.81, 7.68, 7.56, 7.46, 7.36, 7.29, 7.23, 7.19, 7.18, 7.51, 8.42, 9.81, 11.58, 13.63, 15.86, 18.16, 20.44, 22.58, 24.49, 26.06, 27.2, 28.08, 28.95, 29.81, 30.65, 31.48, 32.28, 33.07, 33.82, 34.55, 35.25, 35.92, 36.56, 37.15, 37.71, 38.23, 38.7, 39.13, 39.5, 39.83, 40.1, 40.31, 40.47, 40.57, 40.6, 40.49, 40.16, 39.64, 38.94, 38.09, 37.1, 36, 34.79, 33.51, 32.17, 30.79, 29.39, 27.99, 26.6, 25.25, 23.96, 22.75, 21.63, 20.63, 19.76, 19.04, 18.49, 18.14, 18, 17.97, 17.95, 17.94, 17.92, 17.91, 17.9, 17.89, 17.88, 17.87, 17.85, 17.83, 17.8, 17.7, 17.46, 17.13, 16.7, 16.21, 15.68, 15.13, 14.57, 14.04, 13.56, 13.14, 12.8, 12.52, 12.27, 12.02, 11.79, 11.57, 11.37, 11.16, 10.97, 10.78, 10.59, 10.39, 10.2, 10.01, 9.81, 9.63, 9.44, 9.26, 9.08, 8.9, 8.73, 8.56, 8.39, 8.22, 8.06, 7.9, 7.73, 7.57, 7.41, 7.25, 7.09, 6.94, 6.79, 6.65, 6.52, 6.4, 6.28, 6.17, 6.08, 5.98, 5.9, 5.81, 5.73, 5.65, 5.57, 5.49, 5.41, 5.32, 5.23, 5.14, 5.04, 4.94, 4.84, 4.74, 4.63, 4.53, 4.43, 4.33, 4.23, 4.13, 4.03, 3.93, 3.81, 3.69, 3.57, 3.45, 3.33, 3.22, 3.12, 3.04, 2.98, 2.93, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.92, 2.9, 2.86, 2.8, 2.71, 2.62, 2.52, 2.42, 2.33, 2.24, 2.18, 2.14, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.12, 2.1, 2.06, 2, 1.91, 1.82, 1.71, 1.61, 1.5, 1.4, 1.32, 1.25, 1.2, 1.16, 1.13, 1.1, 1.06, 1.03, 1, 0.97, 0.93, 0.9, 0.87, 0.85, 0.82, 0.79, 0.77, 0.74, 0.72, 0.69, 0.67, 0.65, 0.63, 0.61, 0.59, 0.58, 0.56, 0.54, 0.53, 0.52, 0.51, 0.5, 0.49, 0.48, 0.48, 0.47, 0.47, 0.46, 0.46, 0.47, 0.48, 0.5, 0.53, 0.56, 0.59, 0.62, 0.64, 0.67, 0.69, 0.7, 0.71, 0.71, 0.71, 0.71, 0.7, 0.7, 0.7, 0.69, 0.69, 0.69, 0.68, 0.68, 0.67, 0.67, 0.67, 0.66, 0.66, 0.65, 0.65, 0.65, 0.65, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.65, 0.65, 0.65, 0.66, 0.66, 0.67, 0.68, 0.69, 0.69, 0.7, 0.71, 0.73, 0.74, 0.75, 0.76, 0.78, 0.8, 0.81, 0.83, 0.85, 0.87, 0.89, 0.92, 0.94, 0.97, 0.99, 1.02, 1.05, 1.08, 1.11, 1.15, 1.18, 1.32, 1.66, 2.21, 2.97, 3.94, 5.11, 6.5, 8.1, 9.9, 11.92, 14.15, 16.6, 22.3, 22.8, 24.48, 30.38, 35.74, 42.4, 57.14, 94.04, 112.9, 123.4, 130.4, 130, 119.4, 120.7, 116.8, 118.1, 119.4, 124.8, 143.5, 204, 294, 319.2, 328.4, 365, 350.8, 347.6, 347.6, 325, 331.6, 319.2, 308, 308, 308, 308, 296.8, 300, 281, 278.4, 270.6, 271, 253.6, 233.5, 219.2, 207.8, 205.9, 204, 189.6, 178.8, 173.4, 160, 154.4, 146, 145, 140.5, 130.4, 126.2, 116.8, 112.9, 106.5, 101.6, 98.51, 82.67, 67.3, 80.05, 76.12, 72.3, 71.02, 69.78, 67.3, 67.3, 68.54, 57.6, 71.02, 66.06, 59.12, 57.14, 55.16, 55.16, 52.19, 52.19, 51.2, 48.56, 44.16, 43, 45.92, 49.44, 44.16, 36.48, 35.74, 35, 32.36, 37.22, 32.36, 32.36, 32.36, 33.68, 32.36, 31.7, 35.74, 29.72, 32.36, 30.38, 29.72, 28.4, 28.4, 28.4, 27.28, 25.6, 25.04, 23.92, 22.3, 21.8, 21.8, 21.8, 22.8, 21.8, 25.6, 22.8, 22.8, 17.8, 16.04, 16.04, 16.04, 16.04, 16.04, 16.04, 16.04, 16.04, 16.04, 16.04, 15.02, 14, 14.03, 14.11, 14.25, 14.45, 14.72, 15.06, 15.46, 15.95, 16.51, 17.15, 17.87, 18.69, 19.59, 20.59, 21.69, 22.88, 24.18, 25.59, 27.1, 28.73, 30.48, 32.34, 34.33, 36.44, 38.69, 41.06, 43.57, 46.22, 49.01, 51.95, 55.04, 58.27, 61.66, 65.21, 68.92, 72.8, 88.09, 104.9, 105.7, 110.3, 111.6, 110.3, 106.5, 105.7, 103.3, 100, 97.02, 98.8, 91.07, 83.98, 88.09, 81.36, 78.74, 77.43, 77.43, 73.5, 74.81, 72.63, 68.58, 66.4, 68.54, 69.78, 67.3, 64.82, 61.1, 59.12, 56.15, 53.18, 50.32, 49.44, 44.16, 36.5, 42.4, 37.96, 37.22, 33.68, 36.48, 35.74, 35, 35, 37.22, 37.22, 39.44, 32.6, 34.54, 36.48, 35.74, 34.34, 33.68, 33.02, 31.04, 29.72, 29.72, 29.72, 26.16, 25.6, 29.72, 18.3, 22.3, 21.3, 21.8, 21.8, 20.3, 20.8, 25.04, 25.04, 25.6, 25.6, 25.04, 25.6, 25.04, 25.6, 23.92, 25.04, 21.3, 21.8, 22.3, 21.8, 20.8, 16.1, 20.3, 18.3, 13.22, 19.3, 19.3, 18.3, 14.4, 13.86, 13.36, 12.9, 12.48, 12.1, 11.75, 11.43, 11.15, 10.9, 10.67, 10.48, 10.31, 10.16, 10.04, 9.93, 9.85, 9.78, 9.73, 9.69, 9.67, 9.65, 9.65, 12.08, 8.67, 11.7, 11.38, 10.65, 9.84, 9.32, 9.07, 8.85, 8.66, 8.49, 8.35, 8.22, 8.1, 7.98, 7.86, 7.74, 7.61, 7.47, 7.31, 7.14, 6.96, 6.78, 6.58, 6.39, 6.19, 5.99, 5.78, 5.58, 5.39, 5.2, 5.01, 4.83, 4.67, 4.51, 4.37, 4.24, 4.12, 4.02, 3.95, 3.89, 3.85, 3.84, 4.41, 5.77, 7.39, 8.75, 9.32, 9.18, 9, 8.94, 8.88, 8.83, 8.78, 8.73, 8.68, 8.64, 8.6, 8.56, 8.53, 8.5, 8.47, 8.45, 8.42, 8.4, 8.39, 8.37, 8.36, 8.35, 8.35, 8.34, 8.34, 8.67, 9.65, 9.62, 9.53, 9.4, 9.21, 8.98, 8.7, 8.4, 8.06, 7.69, 7.3, 6.89, 6.47, 6.03, 5.59, 5.14, 4.7, 4.26, 3.83, 3.42, 3.02, 2.65, 2.3, 1.98, 1.7, 1.45, 1.25, 1.09, 0.99, 0.94, 0.92, 0.91, 0.89, 0.87, 0.85, 0.84, 0.82, 0.81, 0.79, 0.78, 0.77, 0.75, 0.74, 0.73, 0.72, 0.71, 0.7, 0.69, 0.68, 0.67, 0.66, 0.65, 0.64, 0.64, 0.63, 0.63, 0.62, 0.62, 0.61, 0.61, 0.61, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.62, 0.62, 0.62, 0.62, 0.63, 0.63, 0.63, 0.63, 0.63, 0.64, 0.64, 0.64, 0.64, 0.64, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.64, 0.63, 0.62, 0.6, 0.59, 0.57, 0.55, 0.54, 0.53, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.51, 0.51, 0.51, 0.5, 0.5, 0.49, 0.48, 0.47, 0.47, 0.46, 0.45, 0.45, 0.44, 0.43, 0.42, 0.42, 0.41, 0.41, 0.41, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.41, 0.42, 0.43, 0.44, 0.46, 0.48, 0.5, 0.53, 0.55, 0.58, 0.61, 0.64, 0.67, 0.7, 0.73, 0.77, 0.8, 0.83, 0.87, 0.9, 0.93, 0.96, 0.99, 1.02, 1.05, 1.08, 1.1, 1.12, 1.14, 1.16, 1.17, 1.18, 1.19, 1.2, 1.2, 1.2, 1.19, 1.17, 1.15, 1.12, 1.09, 1.06, 1.02, 0.98, 0.94, 0.9, 0.86, 0.82, 0.78, 0.74, 0.7, 0.66, 0.63, 0.6, 0.57, 0.55, 0.53, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.51, 0.51, 0.5, 0.5, 0.49, 0.49, 0.48, 0.47, 0.47, 0.47, 0.46, 0.46, 0.45, 0.45, 0.45, 0.44, 0.44, 0.44, 0.43, 0.43, 0.43, 0.42, 0.42, 0.42, 0.41, 0.41, 0.41, 0.41, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.45, 0.45, 0.45 + ] + }, + { + name: '降雨量', + type: 'line', + yAxisIndex: 1, + itemStyle: { normal: { areaStyle: { type: 'default' } } }, + data: (function () { + var oriData = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0.017, 0.017, 0.017, 0.017, 0.011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.021, 0.026, 0.03, 0.036, 0.036, 0.195, 0.221, 0.019, 0.013, 0.017, 0.03, 0.03, 0.03, 0.046, 0.045, 0.038, 0.084, 0.045, 0.045, 0.037, 0.034, 0.035, 0.036, 0.044, 0.052, 0.048, 0.109, 0.033, 0.029, 0.04, 0.042, 0.042, 0.042, 0.073, 0.076, 0.062, 0.066, 0.066, 0.075, 0.096, 0.128, 0.121, 0.128, 0.14, 0.226, 0.143, 0.097, 0.018, 0, 0, 0, 0, 0, 0.018, 0.047, 0.054, 0.054, 0.054, 0.036, 0.185, 0.009, 0.038, 0.061, 0.077, 0.091, 0.126, 0.69, 0.182, 0.349, 0.231, 0.146, 0.128, 0.167, 0.1, 0.075, 0.071, 0.071, 0.117, 0.01, 0.002, 0.002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0.026, 0.038, 0.038, 0.038, 0.076, 0.086, 0.109, 0.213, 0.276, 0.288, 0.297, 0.642, 1.799, 1.236, 2.138, 0.921, 0.497, 0.685, 0.828, 0.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.018, 0.024, 0.024, 0.024, 0.024, 0.006, 0.003, 0.046, 0.046, 0.046, 0.046, 0.043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.204, 0.303, 1.028, 1.328, 1.524, 1.41, 1.362, 1.292, 1.191, 0.529, 0.501, 0.944, 1.81, 2.899, 0.859, 0.126, 0.087, 0.047, 0, 0, 0, 0, 0.011, 0.028, 0.028, 0.028, 0.028, 0.017, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.099, 0.159, 0.297, 0.309, 0.309, 0.614, 0.818, 1.436, 1.195, 0.553, 0.542, 0.955, 0.898, 0.466, 0.386, 0.556, 0.388, 0.221, 0.192, 0.192, 0.187, 0.166, 0.18, 0.302, 0.158, 0.009, 0.009, 0.009, 0.009, 0.009, 0.007, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.004, 0.032, 0.032, 0.032, 0.032, 0.082, 0.149, 0.204, 0.247, 0.262, 0.49, 0.51, 0.533, 0.746, 0.847, 2.393, 1.188, 1.114, 0.475, 0.043, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.017, 0.017, 0.021, 0.042, 0.079, 0.111, 0.126, 0.122, 0.133, 0.846, 0.102, 0.077, 0.067, 0.056, 0.005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.011, 0.017, 0.017, 0.017, 0.017, 0.006, 0, 0, 0, 0, 0, 0.01, 0.03, 0.054, 0.067, 0.07, 0.25, 0.251, 0.494, 0.065, 0.054, 0.054, 0.064, 0.084, 0.077, 0.101, 0.132, 0.248, 0.069, 0.117, 0.115, 0.087, 0.326, 0.036, 0.009, 0.009, 0.009, 0.009, 0.009, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.02, 0.039, 0.04, 0.04, 0.04, 0.229, 0.079, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.023, 0.069, 0.082, 0.082, 0.082, 0.503, 0.774, 0.038, 0.012, 0.012, 0.012, 0.016, 0.02, 0.028, 0.051, 0.06, 0.064, 0.19, 0.15, 0.164, 0.139, 0.13, 0.085, 0.031, 0.023, 0.022, 0.007, 0.005, 0.005, 0.001, 0, 0.02, 0.048, 0.048, 0.053, 0.056, 0.036, 0.008, 0.008, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.013, 0.017, 0.036, 0.068, 0.095, 0.233, 0.272, 0.377, 0.722, 1.494, 3.756, 0.954, 0.439, 0.442, 0.462, 0.373, 0.249, 0.214, 0.1, 0.044, 0.037, 0.023, 0.002, 0, 0, 0, 0, 0, 0, 0.02, 0.024, 0.024, 0.024, 0.024, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.008, 0.017, 0.017, 0.045, 0.186, 0.308, 0.241, 0.241, 0.893, 4.067, 4.494, 5.015, 3.494, 2.057, 1.411, 0.718, 0.407, 0.313, 0.339, 1.537, 1.105, 0.218, 0.136, 0.03, 0.005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.037, 0.448, 1.2, 1.309, 1.309, 1.425, 1.223, 0.471, 0.767, 0.423, 0.273, 0.412, 0.646, 0.481, 0.239, 0.131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.044, 0.15, 0.223, 0.388, 0.513, 0.883, 2.828, 4.786, 5.959, 4.95, 6.434, 6.319, 3.35, 2.806, 4.204, 1.395, 1.015, 1.015, 0.836, 0.74, 0.72, 0.615, 0.477, 0.192, 0.046, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.008, 0.005, 0.005, 0.005, 0.005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0.012, 0.012, 0.012, 0.012, 0.011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.002, 0.012, 0.028, 0.028, 0.028, 0.138, 0.092, 0.082, 0.082, 0.096, 0.719, 0.155, 0.042, 0.047, 0.129, 0.021, 0.021, 0.014, 0.009, 0.029, 0.067, 0.088, 0.095, 0.095, 0.138, 0.091, 0.032, 0.025, 0.025, 0.003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.002, 0.045, 0.228, 0.297, 0.325, 0.339, 0.581, 1.244, 0.796, 0.517, 0.227, 0.053, 0.006, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.003, 0.005, 0.005, 0.005, 0.005, 0.081, 0.129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.014, 0.041, 0.041, 0.041, 0.041, 0.027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.009, 0.017, 0.017, 0.017, 0.017, 0.355, 0.174, 0.009, 0.009, 0.012, 0.136, 0.208, 0.208, 0.208, 0.215, 7.359, 1.858, 0.458, 0.053, 0.053, 0.047, 0.045, 0.045, 0.059, 0.136, 0.188, 0.206, 0.21, 0.588, 1.517, 6.02, 4.688, 4.42, 0.624, 0.326, 0.359, 0.553, 0.899, 0.94, 2.95, 9.415, 5.752, 1.092, 0.096, 0.035, 0.026, 0.018, 0.015, 0.011, 0.011, 0.011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.056, 0.27, 0.314, 0.351, 0.354, 0.609, 0.796, 1.857, 0.848, 0.538, 0.214, 0.178, 0.178, 0.201, 0.231, 0.227, 0.272, 0.397, 0.45, 1.014, 2.917, 1.675, 0.081, 0.059, 0.059, 0.148, 0.075, 0.075, 0.078, 0.236, 0.784, 0.784, 0.784, 0.784, 0.741, 0.115, 0.058, 0.058, 0.058, 0.029, 0.015, 0.015, 0.015, 0.015, 0.012, 0.008, 0.604, 0.985, 1.305, 2.273, 2.528, 2.336, 2.496, 2.281, 1.397, 1.713, 3.259, 1.167, 0.745, 0.548, 1.058, 0.684, 0.728, 0.392, 0.179, 0.283, 0.283, 0.46, 0.08, 0.099, 0.099, 0.099, 0.1, 0.143, 0.137, 0.238, 0.317, 0.262, 0.225, 0.792, 0.426, 0.332, 0.261, 0.11, 0.093, 0.102, 0.171, 0.292, 0.504, 0.605, 1.745, 2.485, 1.964, 0.33, 0.171, 0.259, 0.242, 0.215, 0.366, 0.354, 0.205, 0.203, 0.262, 0.153, 0.13, 0.137, 0.362, 0.691, 0.295, 0.433, 0.154, 0.056, 0.053, 0.053, 0.053, 0.051, 0.047, 0.065, 0.078, 0.091, 0.206, 0.813, 0.102, 0.151, 0.05, 0.024, 0.004, 0.001, 0, 0, 0, 0.021, 0.021, 0.021, 0.021, 0.021, 0.013, 0.013, 0.013, 0.013, 0.013, 0.013, 0.013, 0.013, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.018, 0.021, 0.021, 0.021, 0.021, 0.003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.024, 0.173, 0.261, 0.267, 0.267, 0.534, 1.354, 1.772, 0.72, 0.218, 0.018, 0.018, 0.028, 0.036, 0.032, 0.194, 0.082, 0.035, 0.286, 0.027, 0.038, 0.038, 0.027, 0.021, 0.014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.016, 0.017, 0.017, 0.031, 0.047, 0.043, 0.056, 0.104, 0.149, 0.179, 0.205, 0.328, 0.998, 0.522, 1.851, 3.727, 3.273, 2.204, 1.169, 1.006, 1.179, 0.74, 0.741, 1.065, 0.925, 0.671, 0.497, 0.431, 0.327, 0.277, 0.126, 0.581, 0.207, 0.359, 2.485, 0.038, 0.036, 0.003, 0.003, 0.003, 0.003, 0.004, 0.098, 0.023, 0.021, 0.021, 0.022, 0.041, 0.041, 0.043, 0.045, 0.043, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.014, 0.031, 0.046, 0.063, 0.119, 0.107, 0.092, 0.085, 0.065, 0.06, 0.054, 0.042, 0.039, 0.046, 0.044, 0.028, 0.028, 0.02, 0.013, 0.013, 0.013, 0.013, 0.016, 0.032, 0.031, 0.031, 0.031, 0.028, 0.011, 0.011, 0.011, 0.011, 0.011, 0.023, 0.024, 0.024, 0.024, 0.019, 0.015, 0.015, 0.015, 0.015, 0.015, 0.015, 0.013, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.011, 0.017, 0.024, 0.026, 0.061, 0.172, 0.206, 0.213, 0.267, 0.511, 0.668, 0.157, 0.017, 0.017, 0.017, 0.046, 0.054, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0.017, 0.017, 0.017, 0.017, 0.016, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0.017, 0.017, 0.017, 0.017, 0.012, 0.017, 0.017, 0.017, 0.017, 0.012, 0, 0, 0, 0, 0, 0.003, 0.031, 0.066, 0.093, 0.112, 0.122, 0.202, 0.068, 0.041, 0.022, 0.011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.002, 0.005, 0.012, 0.021, 0.021, 0.019, 0.033, 0.03, 0.026, 0.026, 0.034, 0.095, 0.024, 0.024, 0.024, 0.023, 0.019, 0.018, 0.018, 0.018, 0.011, 0.03, 0.045, 0.044, 0.044, 0.044, 0.022, 0.009, 0.024, 0.033, 0.033, 0.033, 0.024, 0.009, 0, 0, 0, 0, 0, 0, 0.003, 0.017, 0.017, 0.017, 0.017, 0.014, 0, 0, 0, 0, 0, 0.032, 0.032, 0.032, 0.032, 0.032, 0.005, 0.008, 0.009, 0.014, 0.014, 0.009, 0.005, 0.004, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.007, 0.009, 0.009, 0.009, 0.009, 0.043, 0.063, 0.084, 0.098, 0.101, 0.213, 0.334, 0.383, 0.43, 0.448, 0.511, 0.801, 0.835, 1.642, 1.614, 1.496, 1.496, 1.476, 1.068, 0.481, 0.22, 0.119, 0.099, 0.07, 0.072, 0.063, 0.076, 0.14, 0.205, 0.28, 0.297, 0.3, 0.479, 0.877, 1.098, 1.611, 1.629, 1.686, 1.686, 1.631, 1.528, 1.862, 1.703, 1.531, 2.196, 0.395, 0.416, 0.453, 0.728, 0.917, 0.986, 1.17, 2.171, 3.011, 2.909, 3.301, 1.377, 0.778, 0.799, 0.947, 1.039, 0.879, 0.76, 1.372, 1.674, 1.674, 1.68, 1.823, 1.793, 1.162, 0.783, 0.216, 0.152, 0.152, 0.152, 0.049, 0, 0, 0, 0.117, 0.127, 0.127, 0.127, 0.127, 0.127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.003, 0.005, 0.005, 0.005, 0.005, 0.003, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.309, 0.364, 0.364, 0.364, 0.364, 0.063, 0.01, 0.01, 0.01, 0.012, 0.015, 0.015, 0.11, 0.55, 0.824, 0.825, 0.829, 1.39, 1.429, 1.342, 1.43, 1.636, 1.717, 2.135, 2.203, 3.191, 3.022, 1.589, 0.86, 0.807, 0.645, 0.595, 0.588, 0.557, 0.552, 1.271, 0.708, 0.677, 0.629, 0.714, 0.203, 0.133, 0.061, 0.062, 0.018, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.001, 0.072, 0.29, 0.438, 0.53, 0.557, 0.873, 1.039, 1.04, 0.208, 0.049, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.03, 0.039, 0.039, 0.039, 0.039, 0.098, 0.008, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.007, 0.056, 0.062, 0.065, 0.065, 0.065, 0.047, 0.216, 0.256, 0.315, 0.4, 0.502, 0.449, 0.47, 0.571, 0.814, 1.153, 0.774, 0.202, 0.086, 0.075, 0.071, 0.032, 0.019, 0.003, 0.004, 0.004, 0.004, 0.004, 0.004, 0.004, 0.007, 0.072, 0.153, 0.256, 0.306, 0.404, 0.698, 0.733, 0.823, 0.715, 0.563, 0.404, 0.293, 0.217, 0.213, 0.202, 0.202, 0.294, 0.704, 0.797, 1.359, 1.101, 0.72, 0.514, 0.539, 0.434, 0.389, 0.387, 0.386, 0.375, 0.369, 0.319, 0.239, 0.183, 0.136, 0.062, 0.052, 0.096, 0.119, 0.119, 0.114, 0.127, 0.132, 0.139, 0.169, 0.191, 0.278, 0.254, 0.214, 0.237, 0.221, 0.143, 0.129, 0.125, 0.109, 0.1, 0.087, 0.06, 0.038, 0.029, 0.029, 0.028, 0.048, 0.053, 0.053, 0.111, 0.125, 0.102, 0.097, 0.097, 0.039, 0.02, 0.02, 0.02, 0.014, 0.004, 0.031, 0.043, 0.047, 0.052, 0.08, 0.144, 0.182, 0.176, 0.171, 0.149, 0.112, 0.025, 0, 0, 0, 0, 0, 0, 0, 0.016, 0.031, 0.031, 0.031, 0.031, 0.015, 0, 0, 0, 0, 0, 0.005, 0.005, 0.005, 0.005, 0.005, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.005, 0.005, 0.005, 0.005, 0.005, 0.001, 0, 0, 0 + ] + var len = oriData.length + while (len--) { + oriData[len] *= -1 + } + return oriData + })() + } + ] + } + ] + , elemarea = $('#LAY-index-area').children('div') + , renderarea = function (index) { + echarea[index] = echarts.init(elemarea[index], layui.echartsTheme) + echarea[index].setOption(area[index]) + window.onresize = echarea[index].resize + } + if (!elemarea[0]) return + renderarea(0) + + //对数轴 + var echlogline = [], logline = [ + { + title: { + text: '对数轴示例', + x: 'center' + }, + tooltip: { + trigger: 'item', + formatter: '{a}
                {b} : {c}' + }, + legend: { + x: 'left', + data: ['2的指数', '3的指数'] + }, + xAxis: [ + { + type: 'category', + name: 'x', + splitLine: { show: false }, + data: ['一', '二', '三', '四', '五', '六', '七', '八', '九'] + } + ], + yAxis: [ + { + type: 'log', + name: 'y' + } + ], + calculable: true, + series: [ + { + name: '3的指数', + type: 'line', + data: [1, 3, 9, 27, 81, 247, 741, 2223, 3339] + }, + { + name: '2的指数', + type: 'line', + data: [1, 2, 4, 8, 16, 32, 64, 128, 256] + } + ] + } + ] + , elemlogline = $('#LAY-index-logline').children('div') + , renderlogline = function (index) { + echlogline[index] = echarts.init(elemlogline[index], layui.echartsTheme) + echlogline[index].setOption(logline[index]) + window.onresize = echlogline[index].resize + } + if (!elemlogline[0]) return + renderlogline(0) + }) + + //柱状图 + layui.use(['echarts'], function () { + var $ = layui.$ + , echarts = layui.echarts + + //标准柱状图 + var echnormcol = [], normcol = [ + { + title: { + text: '某地区蒸发量和降水量', + subtext: '纯属虚构' + }, + tooltip: { + trigger: 'axis' + }, + legend: { + data: ['蒸发量', '降水量'] + }, + calculable: true, + xAxis: [ + { + type: 'category', + data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] + } + ], + yAxis: [ + { + type: 'value' + } + ], + series: [ + { + name: '蒸发量', + type: 'bar', + data: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3], + markPoint: { + data: [ + { type: 'max', name: '最大值' }, + { type: 'min', name: '最小值' } + ] + }, + markLine: { + data: [{ type: 'average', name: '平均值' }] + } + }, + { + name: '降水量', + type: 'bar', + data: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3], + markPoint: { + data: [ + { name: '年最高', value: 182.2, xAxis: 7, yAxis: 183, symbolSize: 18 }, + { name: '年最低', value: 2.3, xAxis: 11, yAxis: 3 } + ] + }, + markLine: { + data: [ + { type: 'average', name: '平均值' } + ] + } + } + ] + } + ] + , elemNormcol = $('#LAY-index-normcol').children('div') + , renderNormcol = function (index) { + echnormcol[index] = echarts.init(elemNormcol[index], layui.echartsTheme) + echnormcol[index].setOption(normcol[index]) + window.onresize = echnormcol[index].resize + } + if (!elemNormcol[0]) return + renderNormcol(0) + + //堆积柱状图 + var echheapcol = [], heapcol = [ + { + tooltip: { + trigger: 'axis', + axisPointer: { // 坐标轴指示器,坐标轴触发有效 + type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' + } + }, + legend: { + data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎', '百度', '谷歌', '必应', '其他'] + }, + calculable: true, + xAxis: [ + { + type: 'category', + data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] + } + ], + yAxis: [ + { + type: 'value' + } + ], + series: [ + { + name: '直接访问', + type: 'bar', + data: [320, 332, 301, 334, 390, 330, 320] + }, + { + name: '邮件营销', + type: 'bar', + stack: '广告', + data: [120, 132, 101, 134, 90, 230, 210] + }, + { + name: '联盟广告', + type: 'bar', + stack: '广告', + data: [220, 182, 191, 234, 290, 330, 310] + }, + { + name: '视频广告', + type: 'bar', + stack: '广告', + data: [150, 232, 201, 154, 190, 330, 410] + }, + { + name: '搜索引擎', + type: 'bar', + data: [862, 1018, 964, 1026, 1679, 1600, 1570], + markLine: { + itemStyle: { + normal: { + lineStyle: { + type: 'dashed' + } + } + }, + data: [ + [{ type: 'min' }, { type: 'max' }] + ] + } + }, + { + name: '百度', + type: 'bar', + barWidth: 5, + stack: '搜索引擎', + data: [620, 732, 701, 734, 1090, 1130, 1120] + }, + { + name: '谷歌', + type: 'bar', + stack: '搜索引擎', + data: [120, 132, 101, 134, 290, 230, 220] + }, + { + name: '必应', + type: 'bar', + stack: '搜索引擎', + data: [60, 72, 71, 74, 190, 130, 110] + }, + { + name: '其他', + type: 'bar', + stack: '搜索引擎', + data: [62, 82, 91, 84, 109, 110, 120] + } + ] + } + ] + , elemHeapcol = $('#LAY-index-heapcol').children('div') + , renderHeapcol = function (index) { + echheapcol[index] = echarts.init(elemHeapcol[index], layui.echartsTheme) + echheapcol[index].setOption(heapcol[index]) + window.onresize = echheapcol[index].resize + } + if (!elemHeapcol[0]) return + renderHeapcol(0) + + //不等距柱形图 + var echdiffcol = [], diffcol = [ + { + title: { + text: '双数值柱形图', + subtext: '纯属虚构' + }, + tooltip: { + trigger: 'axis', + axisPointer: { + show: true, + type: 'cross', + lineStyle: { + type: 'dashed', + width: 1 + } + }, + formatter: function (params) { + return params.seriesName + ' : [ ' + params.value[0] + ', ' + params.value[1] + ' ]' + } + }, + legend: { + data: ['数据1', '数据2'] + }, + calculable: true, + xAxis: [ + { + type: 'value' + } + ], + yAxis: [ + { + type: 'value', + axisLine: { + lineStyle: { + color: '#dc143c' + } + } + } + ], + series: [ + { + name: '数据1', + type: 'bar', + data: [ + [1.5, 10], [5, 7], [8, 8], [12, 6], [11, 12], [16, 9], [14, 6], [17, 4], [19, 9] + ], + markPoint: { + data: [ + // 纵轴,默认 + { + type: 'max', + name: '最大值', + symbol: 'emptyCircle', + itemStyle: { normal: { color: '#dc143c', label: { position: 'top' } } } + }, + { + type: 'min', + name: '最小值', + symbol: 'emptyCircle', + itemStyle: { normal: { color: '#dc143c', label: { position: 'bottom' } } } + }, + // 横轴 + { + type: 'max', + name: '最大值', + valueIndex: 0, + symbol: 'emptyCircle', + itemStyle: { normal: { color: '#1e90ff', label: { position: 'right' } } } + }, + { + type: 'min', + name: '最小值', + valueIndex: 0, + symbol: 'emptyCircle', + itemStyle: { normal: { color: '#1e90ff', label: { position: 'left' } } } + } + ] + }, + markLine: { + data: [ + // 纵轴,默认 + { type: 'max', name: '最大值', itemStyle: { normal: { color: '#dc143c' } } }, + { type: 'min', name: '最小值', itemStyle: { normal: { color: '#dc143c' } } }, + { type: 'average', name: '平均值', itemStyle: { normal: { color: '#dc143c' } } }, + // 横轴 + { type: 'max', name: '最大值', valueIndex: 0, itemStyle: { normal: { color: '#1e90ff' } } }, + { type: 'min', name: '最小值', valueIndex: 0, itemStyle: { normal: { color: '#1e90ff' } } }, + { + type: 'average', + name: '平均值', + valueIndex: 0, + itemStyle: { normal: { color: '#1e90ff' } } + } + ] + } + }, + { + name: '数据2', + type: 'bar', + barHeight: 10, + data: [ + [1, 2], [2, 3], [4, 4], [7, 5], [11, 11], [18, 15] + ] + } + ] + } + ] + , elemDiffcol = $('#LAY-index-diffcol').children('div') + , renderDiffcol = function (index) { + echdiffcol[index] = echarts.init(elemDiffcol[index], layui.echartsTheme) + echdiffcol[index].setOption(diffcol[index]) + window.onresize = echdiffcol[index].resize + } + if (!elemDiffcol[0]) return + renderDiffcol(0) + + //彩虹柱形图 + var echcolorline = [], colorline = [ + { + title: { + x: 'center', + text: 'ECharts例子个数统计', + subtext: 'Rainbow bar example', + link: 'http://echarts.baidu.com/doc/example.html' + }, + tooltip: { + trigger: 'item' + }, + calculable: true, + grid: { + borderWidth: 0, + y: 80, + y2: 60 + }, + xAxis: [ + { + type: 'category', + show: false, + data: ['Line', 'Bar', 'Scatter', 'K', 'Pie', 'Radar', 'Chord', 'Force', 'Map', 'Gauge', 'Funnel'] + } + ], + yAxis: [ + { + type: 'value', + show: false + } + ], + series: [ + { + name: 'ECharts例子个数统计', + type: 'bar', + itemStyle: { + normal: { + color: function (params) { + // build a color map as your need. + var colorList = [ + '#C1232B', '#B5C334', '#FCCE10', '#E87C25', '#27727B', + '#FE8463', '#9BCA63', '#FAD860', '#F3A43B', '#60C0DD', + '#D7504B', '#C6E579', '#F4E001', '#F0805A', '#26C0C0' + ] + return colorList[params.dataIndex] + }, + label: { + show: true, + position: 'top', + formatter: '{b}\n{c}' + } + } + }, + data: [12, 21, 10, 4, 12, 5, 6, 5, 25, 23, 7], + markPoint: { + tooltip: { + trigger: 'item', + backgroundColor: 'rgba(0,0,0,0)', + formatter: function (params) { + return '' + } + }, + data: [ + { xAxis: 0, y: 350, name: 'Line', symbolSize: 20 }, + { xAxis: 1, y: 350, name: 'Bar', symbolSize: 20 }, + { xAxis: 2, y: 350, name: 'Scatter', symbolSize: 20 }, + { xAxis: 3, y: 350, name: 'K', symbolSize: 20 }, + { xAxis: 4, y: 350, name: 'Pie', symbolSize: 20 }, + { xAxis: 5, y: 350, name: 'Radar', symbolSize: 20 }, + { xAxis: 6, y: 350, name: 'Chord', symbolSize: 20 }, + { xAxis: 7, y: 350, name: 'Force', symbolSize: 20 }, + { xAxis: 8, y: 350, name: 'Map', symbolSize: 20 }, + { xAxis: 9, y: 350, name: 'Gauge', symbolSize: 20 }, + { xAxis: 10, y: 350, name: 'Funnel', symbolSize: 20 }, + ] + } + } + ] + } + ] + , elemColorline = $('#LAY-index-colorline').children('div') + , renderColorline = function (index) { + echcolorline[index] = echarts.init(elemColorline[index], layui.echartsTheme) + echcolorline[index].setOption(colorline[index]) + window.onresize = echcolorline[index].resize + } + if (!elemColorline[0]) return + renderColorline(0) + + //标准条形图 + var echnormbar = [], normbar = [ + { + title: { + text: '世界人口总量', + subtext: '数据来自网络' + }, + tooltip: { + trigger: 'axis' + }, + legend: { + data: ['2011年', '2012年'] + }, + calculable: true, + xAxis: [ + { + type: 'value', + boundaryGap: [0, 0.01] + } + ], + yAxis: [ + { + type: 'category', + data: ['巴西', '印尼', '美国', '印度', '中国', '世界人口(万)'] + } + ], + series: [ + { + name: '2011年', + type: 'bar', + data: [18203, 23489, 29034, 104970, 131744, 630230] + }, + { + name: '2012年', + type: 'bar', + data: [19325, 23438, 31000, 121594, 134141, 681807] + } + ] + } + ] + , elemNormbar = $('#LAY-index-normbar').children('div') + , renderNormbar = function (index) { + echnormbar[index] = echarts.init(elemNormbar[index], layui.echartsTheme) + echnormbar[index].setOption(normbar[index]) + window.onresize = echnormbar[index].resize + } + if (!elemNormbar[0]) return + renderNormbar(0) + + //堆积条形图 + var echheapbar = [], heapbar = [ + { + tooltip: { + trigger: 'axis', + axisPointer: { // 坐标轴指示器,坐标轴触发有效 + type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' + } + }, + legend: { + data: ['直接访问', '邮件营销', '联盟广告', '视频广告', '搜索引擎'] + }, + calculable: true, + xAxis: [ + { + type: 'value' + } + ], + yAxis: [ + { + type: 'category', + data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] + } + ], + series: [ + { + name: '直接访问', + type: 'bar', + stack: '总量', + itemStyle: { normal: { label: { show: true, position: 'insideRight' } } }, + data: [320, 302, 301, 334, 390, 330, 320] + }, + { + name: '邮件营销', + type: 'bar', + stack: '总量', + itemStyle: { normal: { label: { show: true, position: 'insideRight' } } }, + data: [120, 132, 101, 134, 90, 230, 210] + }, + { + name: '联盟广告', + type: 'bar', + stack: '总量', + itemStyle: { normal: { label: { show: true, position: 'insideRight' } } }, + data: [220, 182, 191, 234, 290, 330, 310] + }, + { + name: '视频广告', + type: 'bar', + stack: '总量', + itemStyle: { normal: { label: { show: true, position: 'insideRight' } } }, + data: [150, 212, 201, 154, 190, 330, 410] + }, + { + name: '搜索引擎', + type: 'bar', + stack: '总量', + itemStyle: { normal: { label: { show: true, position: 'insideRight' } } }, + data: [820, 832, 901, 934, 1290, 1330, 1320] + } + ] + } + ] + , elemheapbar = $('#LAY-index-heapbar').children('div') + , renderheapbar = function (index) { + echheapbar[index] = echarts.init(elemheapbar[index], layui.echartsTheme) + echheapbar[index].setOption(heapbar[index]) + window.onresize = echheapbar[index].resize + } + if (!elemheapbar[0]) return + renderheapbar(0) + + //旋风条形图 + var echwindline = [], labelRight = { normal: { label: { position: 'right' } } }, windline = [ + { + title: { + text: '交错正负轴标签', + subtext: 'From ExcelHome', + sublink: 'http://e.weibo.com/1341556070/AjwF2AgQm' + }, + tooltip: { + trigger: 'axis', + axisPointer: { // 坐标轴指示器,坐标轴触发有效 + type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' + } + }, + grid: { + y: 80, + y2: 30 + }, + xAxis: [ + { + type: 'value', + position: 'top', + splitLine: { lineStyle: { type: 'dashed' } }, + } + ], + yAxis: [ + { + type: 'category', + axisLine: { show: false }, + axisLabel: { show: false }, + axisTick: { show: false }, + splitLine: { show: false }, + data: ['ten', 'nine', 'eight', 'seven', 'six', 'five', 'four', 'three', 'two', 'one'] + } + ], + series: [ + { + name: '生活费', + type: 'bar', + stack: '总量', + itemStyle: { + normal: { + color: 'orange', + borderRadius: 5, + label: { + show: true, + position: 'left', + formatter: '{b}' + } + } + }, + data: [ + { value: -0.07, itemStyle: labelRight }, + { value: -0.09, itemStyle: labelRight }, + 0.2, 0.44, + { value: -0.23, itemStyle: labelRight }, + 0.08, + { value: -0.17, itemStyle: labelRight }, + 0.47, + { value: -0.36, itemStyle: labelRight }, + 0.18 + ] + } + ] + } + ] + , elemwindline = $('#LAY-index-windline').children('div') + , renderwindline = function (index) { + echwindline[index] = echarts.init(elemwindline[index], layui.echartsTheme) + echwindline[index].setOption(windline[index]) + window.onresize = echwindline[index].resize + } + if (!elemwindline[0]) return + renderwindline(0) + }) + + //地图 + layui.use(['echarts'], function () { + var $ = layui.$ + , echarts = layui.echarts + + var echplat = [], plat = [ + { + title: { + text: '2011全国GDP(亿元)', + subtext: '数据来自国家统计局' + }, + tooltip: { + trigger: 'item' + }, + dataRange: { + orient: 'horizontal', + min: 0, + max: 55000, + text: ['高', '低'], // 文本,默认为数值文本 + splitNumber: 0 + }, + series: [ + { + name: '2011全国GDP分布', + type: 'map', + mapType: 'china', + mapLocation: { + x: 'center' + }, + selectedMode: 'multiple', + itemStyle: { + normal: { label: { show: true } }, + emphasis: { label: { show: true } } + }, + data: [ + { name: '西藏', value: 605.83 }, + { name: '青海', value: 1670.44 }, + { name: '宁夏', value: 2102.21 }, + { name: '海南', value: 2522.66 }, + { name: '甘肃', value: 5020.37 }, + { name: '贵州', value: 5701.84 }, + { name: '新疆', value: 6610.05 }, + { name: '云南', value: 8893.12 }, + { name: '重庆', value: 10011.37 }, + { name: '吉林', value: 10568.83 }, + { name: '山西', value: 11237.55 }, + { name: '天津', value: 11307.28 }, + { name: '江西', value: 11702.82 }, + { name: '广西', value: 11720.87 }, + { name: '陕西', value: 12512.3 }, + { name: '黑龙江', value: 12582 }, + { name: '内蒙古', value: 14359.88 }, + { name: '安徽', value: 15300.65 }, + { name: '北京', value: 16251.93, selected: true }, + { name: '福建', value: 17560.18 }, + { name: '上海', value: 19195.69, selected: true }, + { name: '湖北', value: 19632.26 }, + { name: '湖南', value: 19669.56 }, + { name: '四川', value: 21026.68 }, + { name: '辽宁', value: 22226.7 }, + { name: '河北', value: 24515.76 }, + { name: '河南', value: 26931.03 }, + { name: '浙江', value: 32318.85 }, + { name: '山东', value: 45361.85 }, + { name: '江苏', value: 49110.27 }, + { name: '广东', value: 53210.28, selected: true } + ] + } + ] + } + ] + , elemplat = $('#LAY-index-plat').children('div') + , renderplat = function (index) { + echplat[index] = echarts.init(elemplat[index], layui.echartsTheme) + echplat[index].setOption(plat[index]) + window.onresize = echplat[index].resize + } + if (!elemplat[0]) return + renderplat(0) + }) + + exports('senior', {}) + +}) \ No newline at end of file diff --git a/public/res/modules/set.js b/public/res/modules/set.js new file mode 100644 index 00000000..530d6081 --- /dev/null +++ b/public/res/modules/set.js @@ -0,0 +1,150 @@ +/** + * set + */ + +layui.define(['form', 'upload'], function (exports) { + var $ = layui.$ + , layer = layui.layer + , laytpl = layui.laytpl + , setter = layui.setter + , view = layui.view + , admin = layui.admin + , form = layui.form + , upload = layui.upload + + var $body = $('body') + + form.render() + + //自定义验证 + form.verify({ + nickname: function (value, item) { //value:表单的值、item:表单的DOM对象 + if (!new RegExp('^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$').test(value)) { + return '用户名不能有特殊字符' + } + if (/(^\_)|(\__)|(\_+$)/.test(value)) { + return '用户名首尾不能出现下划线\'_\'' + } + if (/^\d+\d+\d$/.test(value)) { + return '用户名不能全为数字' + } + } + + //我们既支持上述函数式的方式,也支持下述数组的形式 + //数组的两个值分别代表:[正则匹配、匹配不符时的提示文字] + , pass: [ + /^[\S]{6,12}$/ + , '密码必须6到12位,且不能出现空格' + ] + + //确认密码 + , repass: function (value) { + if (value !== $('#LAY_password').val()) { + return '两次密码输入不一致' + } + } + }) + + //网站设置 + form.on('submit(set_website)', function (obj) { + layer.alert(layui.util.escape(JSON.stringify(obj.field))) + + //提交修改 + /* + admin.req({ + url: '' + ,data: obj.field + ,success: function(){ + + } + }); + */ + return false + }) + + //邮件服务 + form.on('submit(set_system_email)', function (obj) { + layer.alert(layui.util.escape(JSON.stringify(obj.field))) + + //提交修改 + /* + admin.req({ + url: '' + ,data: obj.field + ,success: function(){ + + } + }); + */ + return false + }) + + //设置我的资料 + form.on('submit(setmyinfo)', function (obj) { + layer.alert(layui.util.escape(JSON.stringify(obj.field))) + + //提交修改 + /* + admin.req({ + url: '' + ,data: obj.field + ,success: function(){ + + } + }); + */ + return false + }) + + //上传头像 + var avatarSrc = $('#LAY_avatarSrc') + upload.render({ + url: '/api/upload/' + , elem: '#LAY_avatarUpload' + , done: function (res) { + if (res.status == 0) { + avatarSrc.val(res.url) + } else { + layer.msg(res.msg, { icon: 5 }) + } + } + }) + + //查看头像 + admin.events.avartatPreview = function (othis) { + var src = avatarSrc.val() + layer.photos({ + photos: { + 'title': '查看头像' //相册标题 + , 'data': [{ + 'src': src //原图地址 + }] + } + , shade: 0.01 + , closeBtn: 1 + , anim: 5 + }) + } + + // 设置密码 + form.on('submit(setmypass)', function (obj) { + var field = obj.field // 获得表单字段 + + layer.msg('ok') + + // 提交修改 + /* + admin.req({ + url: '' + ,data: obj.field + ,success: function(){ + + } + }); + */ + return false + }) + + // 输出接口 + exports('set', {}) +}) \ No newline at end of file diff --git a/public/res/modules/user.js b/public/res/modules/user.js new file mode 100644 index 00000000..aba2659b --- /dev/null +++ b/public/res/modules/user.js @@ -0,0 +1,46 @@ +/** + * user demo + */ + +layui.define('form', function (exports) { + var $ = layui.$ + , layer = layui.layer + , laytpl = layui.laytpl + , setter = layui.setter + , view = layui.view + , admin = layui.admin + , form = layui.form + + var $body = $('body') + + //自定义验证 + form.verify({ + nickname: function (value, item) { //value:表单的值、item:表单的DOM对象 + if (!new RegExp('^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$').test(value)) { + return '用户名不能有特殊字符' + } + if (/(^\_)|(\__)|(\_+$)/.test(value)) { + return '用户名首尾不能出现下划线\'_\'' + } + if (/^\d+\d+\d$/.test(value)) { + return '用户名不能全为数字' + } + } + + //我们既支持上述函数式的方式,也支持下述数组的形式 + //数组的两个值分别代表:[正则匹配、匹配不符时的提示文字] + , pass: [ + /^[\S]{6,12}$/ + , '密码必须6到12位,且不能出现空格' + ] + }) + + //更换图形验证码 + $body.on('click', '#LAY-user-get-vercode', function () { + var othis = $(this) + this.src = 'https://www.oschina.net/action/user/captcha?t=' + new Date().getTime() + }) + + //对外暴露的接口 + exports('user', {}) +}) \ No newline at end of file diff --git a/public/res/modules/useradmin.js b/public/res/modules/useradmin.js new file mode 100644 index 00000000..f4a70327 --- /dev/null +++ b/public/res/modules/useradmin.js @@ -0,0 +1,178 @@ +/** + * useradmin demo + */ + +layui.define(['table', 'form'], function (exports) { + var $ = layui.$ + , admin = layui.admin + , view = layui.view + , table = layui.table + , form = layui.form + + //用户管理 + table.render({ + elem: '#LAY-user-manage' + , url: './res/json/useradmin/webuser.js' //模拟接口 + , cols: [[ + { type: 'checkbox', fixed: 'left' } + , { field: 'id', width: 100, title: 'ID', sort: true } + , { field: 'username', title: '用户名', minWidth: 100 } + , { field: 'avatar', title: '头像', width: 100, templet: '#imgTpl' } + , { field: 'phone', title: '手机' } + , { field: 'email', title: '邮箱' } + , { field: 'sex', width: 80, title: '性别' } + , { field: 'ip', title: 'IP' } + , { field: 'jointime', title: '加入时间', sort: true } + , { title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#table-useradmin-webuser' } + ]] + , page: true + , limit: 30 + , height: 'full-320' + , text: '对不起,加载出现异常!' + }) + + //工具条 + table.on('tool(LAY-user-manage)', function (obj) { + var data = obj.data + if (obj.event === 'del') { + layer.prompt({ + formType: 1 + , title: '敏感操作,请验证口令' + }, function (value, index) { + layer.close(index) + + layer.confirm('真的删除行么', function (index) { + obj.del() + layer.close(index) + }) + }) + } else if (obj.event === 'edit') { + admin.popup({ + title: '编辑用户' + , area: ['500px', '450px'] + , id: 'LAY-popup-user-add' + , success: function (layero, index) { + view(this.id).render('user/user/userform', data).done(function () { + form.render(null, 'layuiadmin-form-useradmin') + + //提交 + form.on('submit(LAY-user-front-submit)', function (data) { + var field = data.field //获取提交的字段 + + //提交 Ajax 成功后,关闭当前弹层并重载表格 + //$.ajax({}); + layui.table.reload('LAY-user-manage') //重载表格 + layer.close(index) //执行关闭 + }) + }) + } + }) + } + }) + + //管理员管理 + table.render({ + elem: '#LAY-user-back-manage' + , url: './res/json/useradmin/mangadmin.js' //模拟接口 + , cols: [[ + { type: 'checkbox', fixed: 'left' } + , { field: 'id', width: 80, title: 'ID', sort: true } + , { field: 'loginname', title: '登录名' } + , { field: 'telphone', title: '手机' } + , { field: 'email', title: '邮箱' } + , { field: 'role', title: '角色' } + , { field: 'jointime', title: '加入时间', sort: true } + , { field: 'check', title: '审核状态', templet: '#buttonTpl', minWidth: 80, align: 'center' } + , { title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#table-useradmin-admin' } + ]] + , text: '对不起,加载出现异常!' + }) + + //工具条 + table.on('tool(LAY-user-back-manage)', function (obj) { + var data = obj.data + if (obj.event === 'del') { + layer.prompt({ + formType: 1 + , title: '敏感操作,请验证口令' + }, function (value, index) { + layer.close(index) + layer.confirm('确定删除此管理员?', function (index) { + console.log(obj) + obj.del() + layer.close(index) + }) + }) + } else if (obj.event === 'edit') { + admin.popup({ + title: '编辑管理员' + , area: ['420px', '450px'] + , id: 'LAY-popup-user-add' + , success: function (layero, index) { + view(this.id).render('user/administrators/adminform', data).done(function () { + form.render(null, 'layuiadmin-form-admin') + + //提交 + form.on('submit(LAY-user-back-submit)', function (data) { + var field = data.field //获取提交的字段 + + //提交 Ajax 成功后,关闭当前弹层并重载表格 + //$.ajax({}); + layui.table.reload('LAY-user-back-manage') //重载表格 + layer.close(index) //执行关闭 + }) + }) + } + }) + } + }) + + //角色管理 + table.render({ + elem: '#LAY-user-back-role' + , url: './res/json/useradmin/role.js' //模拟接口 + , cols: [[ + { type: 'checkbox', fixed: 'left' } + , { field: 'id', width: 80, title: 'ID', sort: true } + , { field: 'rolename', title: '角色名' } + , { field: 'limits', title: '拥有权限' } + , { field: 'descr', title: '具体描述' } + , { title: '操作', width: 150, align: 'center', fixed: 'right', toolbar: '#table-useradmin-admin' } + ]] + , text: '对不起,加载出现异常!' + }) + + //工具条 + table.on('tool(LAY-user-back-role)', function (obj) { + var data = obj.data + if (obj.event === 'del') { + layer.confirm('确定删除此角色?', function (index) { + obj.del() + layer.close(index) + }) + } else if (obj.event === 'edit') { + admin.popup({ + title: '添加新角色' + , area: ['500px', '480px'] + , id: 'LAY-popup-user-add' + , success: function (layero, index) { + view(this.id).render('user/administrators/roleform', data).done(function () { + form.render(null, 'layuiadmin-form-role') + + //提交 + form.on('submit(LAY-user-role-submit)', function (data) { + var field = data.field //获取提交的字段 + + //提交 Ajax 成功后,关闭当前弹层并重载表格 + //$.ajax({}); + layui.table.reload('LAY-user-back-role') //重载表格 + layer.close(index) //执行关闭 + }) + }) + } + }) + } + }) + + exports('useradmin', {}) +}) \ No newline at end of file diff --git a/public/res/modules/workorder.js b/public/res/modules/workorder.js new file mode 100644 index 00000000..059ff9d6 --- /dev/null +++ b/public/res/modules/workorder.js @@ -0,0 +1,64 @@ +/** + * workorder demo + */ + +layui.define(['table', 'form', 'element'], function (exports) { + var $ = layui.$ + , admin = layui.admin + , view = layui.view + , table = layui.table + , form = layui.form + , element = layui.element + + table.render({ + elem: '#LAY-app-workorder' + , url: './res/json/workorder/demo.js' //模拟接口 + , cols: [[ + { type: 'numbers', fixed: 'left' } + , { field: 'orderid', width: 100, title: '工单号', sort: true } + , { field: 'attr', width: 100, title: '业务性质' } + , { field: 'title', width: 100, title: '工单标题', width: 300 } + , { field: 'progress', title: '进度', width: 200, align: 'center', templet: '#progressTpl' } + , { field: 'submit', width: 100, title: '提交者' } + , { field: 'accept', width: 100, title: '受理人员' } + , { field: 'state', title: '工单状态', templet: '#buttonTpl', minWidth: 80, align: 'center' } + , { title: '操作', align: 'center', fixed: 'right', toolbar: '#table-system-order' } + ]] + , page: true + , limit: 10 + , limits: [10, 15, 20, 25, 30] + , text: '对不起,加载出现异常!' + , done: function () { + element.render('progress') + } + }) + + //工具条 + table.on('tool(LAY-app-workorder)', function (obj) { + var data = obj.data + if (obj.event === 'edit') { + admin.popup({ + title: '编辑工单' + , area: ['450px', '450px'] + , id: 'LAY-popup-workorder-add' + , success: function (layero, index) { + view(this.id).render('app/workorder/listform').done(function () { + form.render(null, 'layuiadmin-form-workorder') + + //提交 + form.on('submit(LAY-app-workorder-submit)', function (data) { + var field = data.field //获取提交的字段 + + //提交 Ajax 成功后,关闭当前弹层并重载表格 + //$.ajax({}); + layui.table.reload('LAY-app-workorder') //重载表格 + layer.close(index) //执行关闭 + }) + }) + } + }) + } + }) + + exports('workorder', {}) +}) \ No newline at end of file diff --git a/public/res/style/imgs/bg-none.jpg b/public/res/style/imgs/bg-none.jpg new file mode 100644 index 00000000..b7c9e7b8 Binary files /dev/null and b/public/res/style/imgs/bg-none.jpg differ diff --git a/public/res/style/imgs/layui-logo.jpg b/public/res/style/imgs/layui-logo.jpg new file mode 100644 index 00000000..da24fdfc Binary files /dev/null and b/public/res/style/imgs/layui-logo.jpg differ diff --git a/public/res/style/imgs/logo-black.png b/public/res/style/imgs/logo-black.png new file mode 100644 index 00000000..73e5ebcb Binary files /dev/null and b/public/res/style/imgs/logo-black.png differ diff --git a/public/res/style/imgs/logo.png b/public/res/style/imgs/logo.png new file mode 100644 index 00000000..ac1e00b7 Binary files /dev/null and b/public/res/style/imgs/logo.png differ diff --git a/public/res/style/imgs/template/character.jpg b/public/res/style/imgs/template/character.jpg new file mode 100644 index 00000000..33c7691a Binary files /dev/null and b/public/res/style/imgs/template/character.jpg differ diff --git a/public/res/style/imgs/template/huge.jpg b/public/res/style/imgs/template/huge.jpg new file mode 100644 index 00000000..b824e41c Binary files /dev/null and b/public/res/style/imgs/template/huge.jpg differ diff --git a/public/res/style/imgs/template/portrait.png b/public/res/style/imgs/template/portrait.png new file mode 100644 index 00000000..33c7691a Binary files /dev/null and b/public/res/style/imgs/template/portrait.png differ diff --git a/public/res/style/template.css b/public/res/style/template.css new file mode 100644 index 00000000..66cd501f --- /dev/null +++ b/public/res/style/template.css @@ -0,0 +1,762 @@ +/** + * admin.templte.css + */ + +/******************************** + + 模板开始 + +*******************************/ + + +/* 产品版本选择面板 */ +.layadmin-panel-selection { + width: 768px; + margin: 30px auto; +} + +.layadmin-panel-selection .layui-panel-window { + padding: 30px 50px; + border-top-color: #ddd; + text-align: center; +} + +.layadmin-panel-selection .layui-panel-window h2 { + padding-bottom: 15px; + font-size: 18px; +} + +.layadmin-panel-selection .layui-panel-window ul { + margin-top: 15px; + text-align: left; +} + +.layadmin-panel-selection .layui-btn-container { + margin-top: 30px; +} + +.layadmin-panel-selection .layui-btn-container .layui-btn { + width: 100%; +} + +/* 通讯录面板 */ +.layadmin-maillist-fluid .layadmin-contact-box { + padding: 20px; + background-color: #fff; + border: 1px solid #e7eaec; + overflow: hidden; +} + +.layadmin-maillist-fluid .layadmin-text-center { + text-align: center; +} + +.layadmin-maillist-fluid .layadmin-text-center img { + max-width: 80%; + border-radius: 50%; + margin-top: 5px; +} + +.layadmin-maillist-fluid .layadmin-font-blod { + font-weight: 600; +} + +.layadmin-maillist-fluid .layadmin-maillist-img { + margin-top: 5px; +} + +.layadmin-maillist-fluid .layadmin-title { + margin: 5px 0 10px 0; +} + +.layadmin-maillist-fluid .layadmin-textimg { + line-height: 25px; + margin-bottom: 10px; +} + +.layadmin-maillist-fluid .layadmin-address { + line-height: 1.5; + margin-bottom: 20px; +} + +.layadmin-maillist-fluid .layadmin-padding-left20 { + padding-left: 20px; +} + +/* 个人主页 */ +.layadmin-homepage-shadow { + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + background-color: #fff; + border-bottom: 1px solid rgba(0, 0, 0, 0.17); + border-radius: 0; + border: 1px solid #e7ecf3; +} + +.layadmin-homepage-panel { + margin-bottom: 15px; +} + +.layadmin-homepage-panel .text-center { + text-align: center; +} + +.layadmin-homepage-information { + padding: 15px; + border-bottom: 1px solid #e9e9e9; +} + +.layadmin-homepage-pad-ver { + padding-top: 15px; + padding-bottom: 15px; +} + +.layadmin-homepage-pad-img { + box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.1); + border-radius: 50%; +} + +.layadmin-homepage-font { + font-weight: 600; + color: #2b425b; + font-size: 1.2em; +} + +.layadmin-homepage-min-font { + margin: 5px 0 10px 0; + font-size: 0.9em; + color: #afb9c3; +} + +.layadmin-homepage-pad-ver a { + line-height: 1.1em; + font-size: 1.3em; + vertical-align: middle; + cursor: pointer; + background-color: transparent; + color: inherit; + padding: 6px 12px; +} + +.layadmin-homepage-pad-ver a:hover { + background: #16b777; + color: #fff; +} + +.layadmin-homepage-about { + padding: 15px; + font-weight: 600; + color: #2b425b; +} + +.layadmin-homepage-list-group { + font-size: 0.9em; + line-height: 1.25; + margin-bottom: 5px; +} + +.layadmin-homepage-list-group li { + padding: 5px 15px; + border: 1px solid #ddd; + margin-bottom: -1px; + border-width: 1px 0; + border-radius: 0; + background-color: transparent; + border-color: transparent; + color: inherit; +} + +.layadmin-homepage-list-group li i { + font-size: 1.333em; + line-height: 1.095em; + vertical-align: middle; + margin-right: 4px; +} + +.layadmin-homepage-list-group li a.color { + color: #337ab7; +} + +.layadmin-homepage-pad-hor { + padding-left: 15px; + padding-right: 15px; + border-bottom: 15px; + color: #758697; + text-indent: 20px; +} + +.layadmin-homepage-list-inline { + margin-left: 15px; + margin-right: 15px; + padding-bottom: 20px +} + +.layadmin-homepage-list-inline a { + display: inline-block; +} + +.layadmin-homepage-list-inline .layui-btn { + font-size: .9em; + line-height: 1.42857; + vertical-align: middle; + height: auto; + padding: 4px 7px; + margin-left: 0px; + margin: 0 10px 10px 0; +} + +/* 左侧个人信息区域 */ +.layadmin-homepage-text-center { + text-align: center; + margin-bottom: 15px; +} + +.layadmin-homepage-padding15 { + padding: 15px; + margin-bottom: 15px; +} + +.layadmin-homepage-padding8 { + padding: 0 8px; +} + +.layadmin-homepage-paddingmb { + margin-bottom: 15px; + margin: 0 -7.5px; +} + +.layadmin-homepage-content { + margin-left: 15px; + padding: 0; +} + +.layadmin-homepage-content .new-section-xs { + margin: 12px 0; + color: inherit; + border: 0 !important; + height: 0px; + box-sizing: content-box; +} + +.layadmin-homepage-content .h4 { + font-size: 16px; + font-weight: 600; + color: #2b425b; +} + +.layadmin-homepage-content small { + color: #afb9c3 +} + +.layadmin-homepage-text-center .layui-icon { + color: #FFB800; + padding-right: 5px; +} + +.layadmin-homepage-padding15 .layui-col-sm5 a { + font-size: 11px; + height: auto; + line-height: 1.5; + padding: 5px 10px; + float: right; +} + +.layadmin-homepage-padding15 .layui-btn-normal { + margin: 0 15px; +} + +.layadmin-homepage-list-imgtxt .layui-col-sm10, .layadmin-homepage-list-imgtxt .layui-col-sm2 { + background: none +} + +.layadmin-homepage-list-imgtxt .panel-body { + padding: 15px 20px 25px; + overflow: hidden; + margin-bottom: 15px; +} + +.layadmin-homepage-list-imgtxt .panel-body .media-left { + display: block; + float: left; + vertical-align: top; + padding-right: 10px; +} + +.layadmin-homepage-list-imgtxt .panel-body .media-left img { + border-radius: 50%; +} + +.layadmin-homepage-list-imgtxt .media-body { + width: auto; + display: block; + overflow: hidden; +} + +.layadmin-homepage-list-imgtxt .media-body .pad-btm { + padding-bottom: 15px; +} + +.layadmin-homepage-list-imgtxt .media-body .pad-btm p:first-child { + padding-bottom: 5px; +} + +.layadmin-homepage-list-imgtxt .media-body .min-font { + margin-bottom: 10px; +} + +.layadmin-homepage-list-imgtxt .media-body .min-font .layui-breadcrumb a { + font-size: 11px; +} + +.layui-breadcrumb span[lay-separator] { + margin: 0 5px; +} + +.layadmin-homepage-list-imgtxt .media-body .pad-btm .fontColor a { + font-weight: 600; + color: #337ab7; +} + +.layadmin-homepage-list-imgtxt .media-body .pad-btm .fontColor span { + color: #758697; + font-weight: 600; +} + +.layadmin-homepage-list-imgtxt .media-body .h-img { + display: block; + max-width: 100%; + height: auto; + margin-top: 10px; +} + +.layadmin-homepage-list-imgtxt .img-xs { + width: 32px; + height: 32px; + border-radius: 50%; +} + +.layadmin-homepage-list-imgtxt .media-body .media { + margin-top: 15px; + overflow: hidden; +} + +.layadmin-homepage-list-imgtxt .media-body .media .media-right { + float: right; + padding-top: 10px; +} + +.layadmin-homepage-list-imgtxt .media-body .media .media-right .list-inline { + margin-bottom: 10px; +} + +.layadmin-homepage-list-imgtxt .media-body .media .list-inline li { + padding: 0 5px; + display: inline-block; +} + +.layadmin-homepage-list-imgtxt .media-body .media .media-right .list-inline li span { + font-weight: 600; +} + +.layadmin-homepage-list-imgtxt .media-body .media .media-left { + display: block; + overflow: hidden; + width: auto; +} + +.layadmin-homepage-list-imgtxt .media-body .media .media-left .font-blod { + font-weight: 700; + color: #758697; +} + +.layadmin-homepage-list-imgtxt .media-body .media-list { + padding-top: 15px; + margin-top: 15px; + border-top: 1px solid #e9e9e9; +} + +.layadmin-homepage-list-imgtxt .media-body .media-list .media-item { + padding-bottom: 15px; + margin-top: 15px; +} + +.layadmin-homepage-list-imgtxt .media-body .media-list .media-item-left { + display: inline-block; + padding-right: 10px; + margin-bottom: 5px; +} + +.layadmin-homepage-list-imgtxt .media-body .media-list .media-item-left img { + display: block; + float: left; +} + +.layadmin-homepage-list-imgtxt .media-body .media-list .media-text { + overflow: hidden; + width: auto; + display: inline-block; +} + +.layadmin-homepage-list-imgtxt .media-body .media-list .media-text a { + margin-right: 10px; + font-weight: 600; + display: inline-block; +} + +.layadmin-homepage-list-imgtxt .media-body .media-list .media-text div:nth-child(2) { + margin-top: 5px; +} + +.layadmin-homepage-list-imgtxt .media-body .media-list .layui-btn { + height: 24px; + line-height: 24px; + font-size: 12px; + padding: 0 20px; + margin-bottom: 10px; +} + +.layadmin-homepage-list-imgtxt .media-body .media-list .layui-btn { + height: 24px; + line-height: 24px; + font-size: 12px; + padding: 0 20px; + margin-bottom: 10px; +} + +/* 个人内容区域 */ + +.homepage-top .layui-card-body img { + width: 100% +} + +.homepage-top .layui-card-body .margin-top10 { + margin-top: 10px; +} + +.homepage-top .layui-card-body .layui-btn { + width: 100%; + display: block; +} + +.homepage-top { + padding-bottom: 20px; +} + +.layadmin-privateletterlist-item { + position: relative; + display: block; + padding: 10px 15px; +} + +.homepage-bottom .layui-card-body { + padding: 0; +} + +.homepage-bottom .layui-card-body img { + width: 32px; + height: 32px; + border-radius: 50%; + margin-top: 10px; +} + +.homepage-bottom .layui-card-body .meida-left { + display: table-cell; + padding-right: 10px; +} + +.homepage-bottom .layui-card-body .meida-right { + display: table-cell; + vertical-align: top; +} + +.homepage-bottom .layui-card-body a:hover { + background: #F2F2F2; +} + +.homepage-bottom .layui-card-body { + background: #fff; +} + +.layui-card-header .panel-title .layui-icon { + position: relative; + left: 0; + right: 0px; +} + +/* 右侧信息栏 */ +.layadmin-cmdlist-fluid { + padding-bottom: 60px; +} + +.cmdlist-container { + background: #fff; + border: 1px solid transparent; +} + +.cmdlist-container:hover { + border: 1px solid #e8e8e8; +} + +.cmdlist-container img { + width: 100%; +} + +.cmdlist-text { + padding: 20px; +} + +.cmdlist-text .info { + height: 40px; + font-size: 14px; + line-height: 20px; + width: 100%; + overflow: hidden; + color: #5F5F5F; + margin-bottom: 10px; +} + +.cmdlist-text .price { + font-size: 14px; +} + +.cmdlist-text .price b { + margin-right: 20px; +} + +.cmdlist-text .price p { + display: inline-block; +} + +.cmdlist-text .flow { + text-align: right; + float: right; +} + +#demo0 { + text-align: center; +} + +/* 商品列表 */ +.layadmin-message-fluid .layui-col-md12 { + background: #fff; + height: auto; + padding-bottom: 50px; +} + +.layadmin-message-fluid .layui-input-block { + margin-left: 0; +} + +.layadmin-message-fluid .layui-form { + padding: 45px 40px 0 40px; +} + +.layadmin-message-fluid .layui-form-label { + text-align: left; + font-size: 18px; + padding-left: 10px; +} + +.layadmin-message-fluid .layui-textarea { + min-height: 100px; + font-size: 16px; +} + +.layadmin-message-fluid .layui-input-right { + float: right; +} + +.layadmin-messag-icon { + overflow: hidden; + float: left; +} + +.layadmin-messag-icon .layui-icon { + font-size: 24px; + line-height: 30px; + margin-right: 15px; + color: #C4CBCF; +} + +.layadmin-messag-icon { + margin-top: 4px; +} + +.message-content { + padding: 0 40px; +} + +.message-content .media-body { + margin-bottom: 60px; +} + +.message-content .media-body .pad-btm { + padding-bottom: 0; +} + +.message-content .media-left { + float: left; + margin-right: 10px; +} + +.message-content .media-left img { + border-radius: 50%; +} + +.message-text { + padding-top: 10px; +} + +.message-content-btn { + text-align: center; +} + +.message-content .layui-btn { + height: auto; + line-height: 26px; + padding: 5px 30px; + font-size: 16px; +} + +/* 搜索结果页面 */ +.layadmin-serach-main .layui-card-header { + height: auto; + line-height: 24px; + padding: 15px; +} + +.layadmin-serach-list { + margin-bottom: 10px; + padding: 10px 0; + border-bottom: 1px solid #f6f6f6; +} + +.layadmin-serach-list h3 { + padding: 10px 0; +} + +.layadmin-serach-list h3 .layui-badge { + top: -2px; +} + +.layadmin-serach-list p { + color: #5F5F5F; +} + +.layadmin-serach-list li { + margin-bottom: 20px; + padding-bottom: 20px; + clear: both; +} + +.layui-serachlist-cover { + float: left; + margin-right: 15px; +} + +.layui-serachlist-cover img { + width: 90px; + height: 90px; +} + + +/* 用户列表开始 */ +.layadmin-caller { + background: #fff; + padding: 30px; +} + +.layadmin-caller em { + font-style: normal; +} + +.layadmin-caller .caller-fl { + float: left; +} + +.layadmin-caller .caller-fr { + float: right; +} + +.layadmin-caller .caller-seach { + position: relative; + padding-bottom: 40px; +} + +.layadmin-caller .caller-seach .caller-icon { + font-size: 18px; + position: absolute; + top: 9px; +} + +.layadmin-caller .caller-seach-icon { + left: 6px; +} + +.layadmin-caller .caller-dump-icon { + right: 6px; + cursor: pointer; +} + +.layadmin-caller .caller-pl32 { + padding: 0 32px; +} + +.layadmin-caller .caller-tab { + margin: 0; +} + +.layadmin-caller .caller-contar { + padding-bottom: 20px; +} + +.layadmin-caller .caller-contar .caller-item { + padding: 25px 0; + overflow: hidden; + border-bottom: 1px solid #e0e0e0; +} + +.layadmin-caller .caller-contar .caller-item .caller-main { + margin-left: 20px; +} + +.layadmin-caller .caller-contar .caller-item .caller-main p { + line-height: 100%; + padding: 8px 0; +} + +.layadmin-caller .caller-contar .caller-item .caller-main p:first-child { + padding-top: 0; +} + +.layadmin-caller .caller-contar .caller-item .caller-main em { + margin-left: 5px; +} + +.layadmin-caller .caller-contar .caller-item .caller-main .caller-adds i { + padding-right: 5px; + margin: 0; +} + +.layadmin-caller .caller-contar .caller-item .caller-main .caller-adds { + padding-bottom: 12px; +} + +.layadmin-caller .caller-contar .caller-iconset i { + margin: 0 5px; +} + +.layadmin-caller .caller-contar .caller-iconset i:first-child { + margin-left: 0; +} + +.layadmin-caller .caller-contar button { + margin-top: 22px; +} + +.layadmin-caller .caller-contar .caller-img { + width: 40px; + height: 40px; + border-radius: 100%; +} + +/****** 模板结束 ******/ \ No newline at end of file diff --git a/public/res/views/app/content/comment.html b/public/res/views/app/content/comment.html new file mode 100644 index 00000000..a08e75b5 --- /dev/null +++ b/public/res/views/app/content/comment.html @@ -0,0 +1,107 @@ +评论管理 + + + +
                +
                +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                +
                +
                +
                +
                + +
                +
                + +
                +
                +
                + + + \ No newline at end of file diff --git a/public/res/views/app/content/contform.html b/public/res/views/app/content/contform.html new file mode 100644 index 00000000..4b7c0bcb --- /dev/null +++ b/public/res/views/app/content/contform.html @@ -0,0 +1,18 @@ +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                \ No newline at end of file diff --git a/public/res/views/app/content/list.html b/public/res/views/app/content/list.html new file mode 100644 index 00000000..fa4081ed --- /dev/null +++ b/public/res/views/app/content/list.html @@ -0,0 +1,151 @@ +文章列表 + + + +
                +
                +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                +
                +
                + +
                +
                + + +
                +
                + + +
                +
                +
                + + diff --git a/public/res/views/app/content/listform.html b/public/res/views/app/content/listform.html new file mode 100644 index 00000000..4051fe64 --- /dev/null +++ b/public/res/views/app/content/listform.html @@ -0,0 +1,68 @@ +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                + +
                + +
                + +
                +
                +
                diff --git a/public/res/views/app/content/tags.html b/public/res/views/app/content/tags.html new file mode 100644 index 00000000..b766c6e9 --- /dev/null +++ b/public/res/views/app/content/tags.html @@ -0,0 +1,65 @@ +分类管理 + + + +
                +
                +
                + +
                +
                +
                + +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/app/content/tagsform.html b/public/res/views/app/content/tagsform.html new file mode 100644 index 00000000..bdd5521c --- /dev/null +++ b/public/res/views/app/content/tagsform.html @@ -0,0 +1,17 @@ +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                \ No newline at end of file diff --git a/public/res/views/app/forum/list.html b/public/res/views/app/forum/list.html new file mode 100644 index 00000000..d9074b49 --- /dev/null +++ b/public/res/views/app/forum/list.html @@ -0,0 +1,125 @@ +帖子列表 + + + +
                +
                +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                +
                +
                + +
                +
                + +
                +
                + + + +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/app/forum/listform.html b/public/res/views/app/forum/listform.html new file mode 100644 index 00000000..d9986b39 --- /dev/null +++ b/public/res/views/app/forum/listform.html @@ -0,0 +1,57 @@ +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                + +
                +
                + +
                + +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/app/forum/replys.html b/public/res/views/app/forum/replys.html new file mode 100644 index 00000000..74c60022 --- /dev/null +++ b/public/res/views/app/forum/replys.html @@ -0,0 +1,100 @@ +回帖列表 + + + +
                +
                +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                +
                +
                +
                +
                + +
                +
                + + +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/app/forum/replysform.html b/public/res/views/app/forum/replysform.html new file mode 100644 index 00000000..8f105c46 --- /dev/null +++ b/public/res/views/app/forum/replysform.html @@ -0,0 +1,35 @@ +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/app/message/detail.html b/public/res/views/app/message/detail.html new file mode 100644 index 00000000..8c800e01 --- /dev/null +++ b/public/res/views/app/message/detail.html @@ -0,0 +1,41 @@ +消息详情 + + + +
                +
                +
                +
                +

                {{ d.data.title }}

                +

                + {{ layui.util.timeAgo(d.data.time) }} +

                +
                +
                +
                + {{- d.data.content }} +
                + + +
                +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/app/message/index.html b/public/res/views/app/message/index.html new file mode 100644 index 00000000..c5fe11b2 --- /dev/null +++ b/public/res/views/app/message/index.html @@ -0,0 +1,192 @@ +消息中心 + +
                + +
                + +
                +
                +
                +
                  +
                • 全部消息
                • +
                • 通知6
                • +
                • 私信
                • +
                +
                + +
                +
                + + + +
                + +
                +
                +
                + +
                + + + +
                + +
                +
                +
                + +
                + + + +
                + +
                +
                +
                +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/app/workorder/list.html b/public/res/views/app/workorder/list.html new file mode 100644 index 00000000..05221734 --- /dev/null +++ b/public/res/views/app/workorder/list.html @@ -0,0 +1,88 @@ +工单系统 + + + +
                +
                +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                +
                +
                +
                +
                + + + +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/app/workorder/listform.html b/public/res/views/app/workorder/listform.html new file mode 100644 index 00000000..0c2a9163 --- /dev/null +++ b/public/res/views/app/workorder/listform.html @@ -0,0 +1,61 @@ +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/app/说明.txt b/public/res/views/app/说明.txt new file mode 100644 index 00000000..ffe8b3af --- /dev/null +++ b/public/res/views/app/说明.txt @@ -0,0 +1,2 @@ + +该目录存放【应用】的视图文件 \ No newline at end of file diff --git a/public/res/views/component/anim/index.html b/public/res/views/component/anim/index.html new file mode 100644 index 00000000..63f5c31a --- /dev/null +++ b/public/res/views/component/anim/index.html @@ -0,0 +1,153 @@ +动画 + +
                +
                + 主页 + 组件 + 动画 +
                +
                + + + +
                +
                +
                +
                +
                点击演示动画
                +
                + +
                  +
                • +
                  从最底部往上滑入
                  +
                  layui-anim-up
                  +
                • +
                • +
                  微微往上滑入
                  +
                  layui-anim-upbit
                  +
                • +
                • +
                  平滑放大
                  +
                  layui-anim-scale
                  +
                • +
                • +
                  弹簧式放大
                  +
                  layui-anim-scaleSpring
                  +
                • +
                +
                  +
                • +
                  渐现
                  +
                  layui-anim-fadein
                  +
                • +
                • +
                  渐隐
                  +
                  layui-anim-fadeout
                  +
                • +
                • +
                  360度旋转
                  +
                  layui-anim-rotate
                  +
                • +
                • +
                  循环动画
                  +
                  追加:layui-anim-loop
                  +
                • +
                + +
                +
                +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/component/auxiliar/index.html b/public/res/views/component/auxiliar/index.html new file mode 100644 index 00000000..ed1463f2 --- /dev/null +++ b/public/res/views/component/auxiliar/index.html @@ -0,0 +1,101 @@ +辅助元素 + +
                +
                + 主页 + 组件 + 辅助 +
                +
                + + + +
                +
                +
                +
                +
                引用区块
                +
                +
                默认引用
                + +
                + 穷则独善其身,达则兼济天下 +
                ——孟子(亚圣) +
                +
                +
                +
                +
                字段集区块
                +
                + +
                + 爱好 +
                + 你可以在这里放任何内容 +
                +
                + +
                + +
                + 带标题的横线 +
                + +
                +
                +
                +
                分割线
                +
                + + 默认分割线 +
                + + 赤色分割线 +
                + + 橙色分割线 +
                + + 墨绿分割线 +
                + + 青色分割线 +
                + + 蓝色分割线 +
                + + 黑色分割线 +
                + + 灰色分割线 +
                + +
                +
                +
                +
                纯圆角
                +
                + +
                + +
                + +
                +
                +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/component/badge/index.html b/public/res/views/component/badge/index.html new file mode 100644 index 00000000..1be59e95 --- /dev/null +++ b/public/res/views/component/badge/index.html @@ -0,0 +1,103 @@ +徽章 + +
                +
                + 主页 + 组件 + 徽章 +
                +
                + + + +
                +
                +
                +
                +
                小徽章大家族
                +
                + +
                小圆点: + + + + + + + + + +

                常规弧形徽章: + + 6 + 99 + 61728 + + + 绿 + + + + + +

                边框徽章: + + 6 + Hot + +

                + +
                +
                +
                +
                +
                +
                与其它元素的搭配
                +
                + +
                + + + + +

                + +
                  <-- 小Tips:这里有没有发现,设置导航靠右对齐(或居中对齐)其实非常简单 --> +
                • + 控制台9 +
                • +
                • + 个人中心 +
                • +
                +
                + +
                +
                  +
                • 网站设置
                • +
                • 用户管理
                • +
                • 最新邮件99+
                • +
                +
                +
                + +
                +
                +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/component/button/index.html b/public/res/views/component/button/index.html new file mode 100644 index 00000000..62073713 --- /dev/null +++ b/public/res/views/component/button/index.html @@ -0,0 +1,195 @@ +按钮 + +
                +
                + 主页 + 组件 + 按钮 +
                +
                + +
                +
                +
                +
                +
                按钮主题
                +
                +
                + + + + + + +
                +
                +
                +
                +
                按钮尺寸
                +
                +
                + + + + + +
                + + + + + + +
                + + + + + +
                +
                +
                +
                +
                按钮图标
                +
                +
                + + + + + + + +
                + + + + + + + + +
                + + + + + + + + +
                + + + + + + + + +
                + + + + + + + +
                +
                +
                +
                +
                +
                +
                按钮圆角
                +
                +
                + + + + + + +
                +
                +
                +
                +
                按钮混搭
                +
                +
                + + 跳转的按钮 + + + +
                +
                +
                +
                +
                按钮组合
                +
                +
                +
                + + + +
                +
                +
                +
                + + + + +
                +
                + + + + +
                +
                +
                +
                +
                +
                按钮铺满
                +
                +
                + + + + +
                +
                +
                +
                + +
                +
                + + \ No newline at end of file diff --git a/public/res/views/component/carousel/index.html b/public/res/views/component/carousel/index.html new file mode 100644 index 00000000..2c2ea4e1 --- /dev/null +++ b/public/res/views/component/carousel/index.html @@ -0,0 +1,250 @@ +轮播 + + + +
                +
                + 主页 + 组件 + 轮播 +
                +
                + + + + \ No newline at end of file diff --git a/public/res/views/component/code/index.html b/public/res/views/component/code/index.html new file mode 100644 index 00000000..be28787d --- /dev/null +++ b/public/res/views/component/code/index.html @@ -0,0 +1,132 @@ +代码修饰 + + + +
                +
                +
                +
                +
                默认修饰
                +
                +
                // 在里面放置任意的文本内容
                +test
                +test
                +            
                +
                +
                + +
                +
                深色模式
                +
                +
                // 在里面放置任意的文本内容
                +test
                +test
                +            
                +
                +
                + +
                +
                叠加使用
                +
                +
                // 在里面放置任意的文本内容
                +test
                +test
                +test
                +      
                // 在里面放置任意的文本内容
                +test
                +test
                +test
                +      
                // 不显示行号(注:v2.7.3 新增)
                +test
                +test
                +test
                +            
                +
                +
                + +
                // 在里面放置任意的文本内容
                +test
                +test
                +test
                +      
                // 在里面放置任意的文本内容
                +test
                +test
                +test
                +
                // 不显示行号(注:v2.7.3 新增)
                +test
                +test
                +test
                +            
                +
                +
                +
                +
                + +
                +
                固定高度
                +
                +
                // 在里面放置任意的文本内容
                +test
                +test
                +test
                +code line
                +code line
                +code line
                +code line
                +code line
                +            
                +
                +
                + +
                +
                不显示行号
                +
                +
                // 不显示行号(注:v2.7.3 新增)
                +test
                +test
                +            
                +
                +
                + +
                +
                自定义右上角内容
                +
                +
                // 在里面放置任意的文本内容
                +test
                +test
                +            
                +
                + 自定义右上角内容,以便实现个性化操作 + 此处仅为演示,右上角实际功能需自主完成 + 😄 +
                +
                +
                + +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/component/colorpicker/index.html b/public/res/views/component/colorpicker/index.html new file mode 100644 index 00000000..dd06a435 --- /dev/null +++ b/public/res/views/component/colorpicker/index.html @@ -0,0 +1,189 @@ +颜色选择器组件 + + + +
                +
                +
                +
                +
                常规使用
                +
                +
                +
                +
                +
                +
                +
                表单赋值
                +
                +
                +
                +
                + +
                +
                +
                +
                +
                +
                +
                +
                +
                +
                RGB / RGBA 色值
                +
                +
                +
                +
                +
                +
                +
                透明度选择
                +
                +
                +
                +
                +
                +
                +
                +
                预定义颜色项
                +
                +
                +
                +
                +
                +
                +
                全功能和回调的使用
                +
                + +
                +
                +
                +
                +
                颜色框尺寸
                +
                +
                +
                +
                +
                +
                +
                +
                +
                + + \ No newline at end of file diff --git a/public/res/views/component/dropdown/index.html b/public/res/views/component/dropdown/index.html new file mode 100644 index 00000000..bbdf82c7 --- /dev/null +++ b/public/res/views/component/dropdown/index.html @@ -0,0 +1,581 @@ +下拉菜单 + + +
                +
                +
                +
                +
                初演示
                +
                + +
                + + + +
                + +
                + +
                +
                + 可以绑定任意元素,比如这段文字 + +
                + +
                +
                +
                +
                +
                +
                在表格中的应用
                +
                + +
                + + +
                +
                +
                +
                +
                +
                自定义事件
                +
                + +
                + + + +
                + +
                +
                +
                +
                +
                +
                右键菜单
                +
                + +
                + 在此区域单击鼠标右键 +
                + + +
                +
                +
                +
                +
                +
                重定义风格
                +
                + +
                + + + +
                + +
                +
                +
                +
                +
                + + + diff --git a/public/res/views/component/flow/index.html b/public/res/views/component/flow/index.html new file mode 100644 index 00000000..64ee5914 --- /dev/null +++ b/public/res/views/component/flow/index.html @@ -0,0 +1,157 @@ +流加载 + + + + +
                + +
                + +
                +
                +
                +
                +
                信息流 - 滚动加载
                +
                +
                  +
                  +
                  +
                  + +
                  +
                  +
                  信息流 - 手工加载
                  +
                  +
                    +
                    +
                    +
                    + +
                    +
                    +
                    图片懒加载
                    +
                    +
                    + + + + + + + + + + +
                    +
                    +
                    +
                    + +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/form/element.html b/public/res/views/component/form/element.html new file mode 100644 index 00000000..ed01f6cd --- /dev/null +++ b/public/res/views/component/form/element.html @@ -0,0 +1,238 @@ +表单元素 + + + + + +
                    +
                    +
                    +
                    +
                    输入框
                    +
                    +
                    + +
                    +
                    + +
                    +
                    + +
                    +
                    +
                    +
                    +
                    下拉选择框
                    +
                    +
                    + +
                    +
                    + +
                    +
                    + +
                    +
                    + +
                    +
                    + +
                    +
                    +
                    +
                    +
                    复选框
                    +
                    +
                    + + + +
                    +
                    + + + + +
                    +
                    +
                    +
                    +
                    开关
                    +
                    +
                    + + + + +
                    +
                    +
                    +
                    +
                    单选框
                    +
                    +
                    + + + +
                    +
                    +
                    +
                    +
                    +
                    +
                    文本域
                    +
                    +
                    + +
                    +
                    +
                    +
                    +
                    响应式组合
                    +
                    +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    + +
                    + + + + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + + + + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    + + +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/form/group.html b/public/res/views/component/form/group.html new file mode 100644 index 00000000..eb96a6da --- /dev/null +++ b/public/res/views/component/form/group.html @@ -0,0 +1,298 @@ +表单组合 + + + +
                    +
                    +
                    表单组合
                    +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    + +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    请填写6到12位密码
                    +
                    + +
                    +
                    + +
                    + +
                    +
                    -
                    +
                    + +
                    +
                    +
                    + +
                    + +
                    + +
                    +
                    + + +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    + +
                    +
                    + +
                    +
                    + +
                    +
                    +
                    此处只是演示联动排版,并未做联动交互
                    +
                    +
                    +
                    + +
                    + +
                    + + + +
                    +
                    + +
                    + +
                    + + + +
                    +
                    + +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + + + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/grid/all.html b/public/res/views/component/grid/all.html new file mode 100644 index 00000000..45c810c4 --- /dev/null +++ b/public/res/views/component/grid/all.html @@ -0,0 +1,85 @@ +全端复杂组合 + + + + + +
                    +
                    +
                    + +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/grid/list.html b/public/res/views/component/grid/list.html new file mode 100644 index 00000000..7520fd8c --- /dev/null +++ b/public/res/views/component/grid/list.html @@ -0,0 +1,123 @@ +等比例列表排列 + + + + + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/grid/mobile-pc.html b/public/res/views/component/grid/mobile-pc.html new file mode 100644 index 00000000..31c09383 --- /dev/null +++ b/public/res/views/component/grid/mobile-pc.html @@ -0,0 +1,85 @@ +移动桌面组合 + + + + + +
                    +
                    +
                    + +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/grid/mobile.html b/public/res/views/component/grid/mobile.html new file mode 100644 index 00000000..0d00789c --- /dev/null +++ b/public/res/views/component/grid/mobile.html @@ -0,0 +1,117 @@ +按移动端排列 + + + + + +
                    +
                    +
                    + +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/grid/speed-dial.html b/public/res/views/component/grid/speed-dial.html new file mode 100644 index 00000000..7b63dbe0 --- /dev/null +++ b/public/res/views/component/grid/speed-dial.html @@ -0,0 +1,92 @@ +九宫格 + +
                    + +
                    + + + +
                    +
                    +
                    + +
                    +
                    1
                    +
                    +
                    +
                    +
                    +
                    2
                    +
                    +
                    +
                    +
                    +
                    3
                    +
                    +
                    +
                    +
                    +
                    4
                    +
                    +
                    +
                    +
                    +
                    5
                    +
                    +
                    +
                    +
                    +
                    6
                    +
                    +
                    +
                    +
                    +
                    7
                    +
                    +
                    +
                    +
                    +
                    8
                    +
                    +
                    +
                    +
                    +
                    9
                    +
                    +
                    +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/grid/stack.html b/public/res/views/component/grid/stack.html new file mode 100644 index 00000000..4df6f350 --- /dev/null +++ b/public/res/views/component/grid/stack.html @@ -0,0 +1,147 @@ +低于桌面堆叠排列 + + + + + +
                    +
                    +
                    + +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/laydate/demo1.html b/public/res/views/component/laydate/demo1.html new file mode 100644 index 00000000..59f91870 --- /dev/null +++ b/public/res/views/component/laydate/demo1.html @@ -0,0 +1,340 @@ +layDate 功能演示一 + + + +
                    +
                    +
                    +
                    +
                    常规用法
                    +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    五大选择器
                    +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    范围选择
                    +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    自定义格式
                    +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    同时绑定多个
                    +
                    +
                    +
                    +
                    + +
                    +
                    + +
                    +
                    + +
                    +
                    +
                    +
                    +
                    +
                    + + +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/laydate/demo2.html b/public/res/views/component/laydate/demo2.html new file mode 100644 index 00000000..21ae81db --- /dev/null +++ b/public/res/views/component/laydate/demo2.html @@ -0,0 +1,287 @@ +layDate 功能演示二 + + + +
                    +
                    +
                    +
                    +
                    公历节日和自定义重要日子
                    +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    控制可选的日期与时间
                    +
                    +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    + 这里以控制在9:30-17:30为例 +
                    +
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    其它功能示例
                    +
                    +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    + +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    + +
                    + +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/laydate/special-demo.html b/public/res/views/component/laydate/special-demo.html new file mode 100644 index 00000000..8f1f90ce --- /dev/null +++ b/public/res/views/component/laydate/special-demo.html @@ -0,0 +1,73 @@ +layDate 日期组件功能演示 + + + +
                    +
                    +
                    +
                    +
                    联动范围选择
                    +
                    +
                    +
                    +
                    + +
                    + +
                    +
                    + - +
                    +
                    + +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/laydate/theme.html b/public/res/views/component/laydate/theme.html new file mode 100644 index 00000000..4c68e557 --- /dev/null +++ b/public/res/views/component/laydate/theme.html @@ -0,0 +1,250 @@ +layDate 日期组件功能演示 + + + + + +
                    +
                    +
                    +
                    +
                    自定义按钮主题
                    +
                    +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    + +
                    +
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    直接嵌套显示
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/layer/list.html b/public/res/views/component/layer/list.html new file mode 100644 index 00000000..bb6526ca --- /dev/null +++ b/public/res/views/component/layer/list.html @@ -0,0 +1,482 @@ +layer 组件功能演示 + + + + + +
                    +
                    +
                    +
                    +
                    弹层类型
                    +
                    + +
                    + + + + + + + + + +
                    + +
                    +
                    +
                    +
                    常规使用
                    +
                    + +
                    + + + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +
                    +
                    +
                    信息框
                    +
                    + +
                    + + + + + + + +
                    + +
                    +
                    +
                    +
                    +
                    +
                    页面层与iframe层
                    +
                    + +
                    + + + +
                    + +
                    +
                    +
                    +
                    +
                    +
                    加载层
                    +
                    + +
                    + + + + +
                    + +
                    +
                    +
                    +
                    +
                    +
                    tips层
                    +
                    + +
                    + + + + + +
                    + +
                    +
                    +
                    +
                    +
                    +
                    其它示例
                    +
                    + +
                    + + +
                    + +
                    +
                    +
                    +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/layer/special-demo.html b/public/res/views/component/layer/special-demo.html new file mode 100644 index 00000000..538ef23e --- /dev/null +++ b/public/res/views/component/layer/special-demo.html @@ -0,0 +1,277 @@ +layer 组件特殊示例 + + + + + +
                    +
                    +
                    +
                    +
                    场景
                    +
                    + +
                    + + + +
                    + +
                    +
                    +
                    +
                    +
                    +
                    坐标
                    +
                    + +
                    + + + + + + + + + +
                    + +
                    +
                    +
                    +
                    +
                    +
                    抽屉
                    +
                    +

                    从页面四个边缘弹出(抽屉效果):

                    +
                    + + + + +
                    +
                    +
                    +
                    +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/layer/theme.html b/public/res/views/component/layer/theme.html new file mode 100644 index 00000000..07de2fb2 --- /dev/null +++ b/public/res/views/component/layer/theme.html @@ -0,0 +1,123 @@ +layer 组件风格定制 + + + + + +
                    +
                    +
                    +
                    +
                    Windows 10 风格
                    +
                    +
                    + + +
                    +
                    +
                    +
                    +
                    +
                    +
                    风格定制
                    +
                    +
                    + + +
                    +
                    +
                    +
                    +
                    +
                    + + \ No newline at end of file diff --git a/public/res/views/component/laypage/demo1.html b/public/res/views/component/laypage/demo1.html new file mode 100644 index 00000000..13c3293b --- /dev/null +++ b/public/res/views/component/laypage/demo1.html @@ -0,0 +1,156 @@ +功能演示1 - 通用分页组件 + + + +
                    +
                    +
                    +
                    +
                    总页数低于页码总数
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    总页数大于页码总数
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    自定义主题 - 颜色随意定义
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    自定义首页、尾页、上一页、下一页文本
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    不显示首页尾页
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    开启HASH
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    只显示上一页、下一页
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + + + \ No newline at end of file diff --git a/public/res/views/component/laypage/demo2.html b/public/res/views/component/laypage/demo2.html new file mode 100644 index 00000000..9d9a52ea --- /dev/null +++ b/public/res/views/component/laypage/demo2.html @@ -0,0 +1,156 @@ +功能演示2 - 通用分页组件 + + + +
                    +
                    +
                    +
                    +
                    显示完整功能
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    自定义排版
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    自定义每页条数的选择项
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    将一段已知数组分页展示
                    +
                    +
                    +
                      +
                      +
                      +
                      + +
                      +
                      + + + \ No newline at end of file diff --git a/public/res/views/component/laytpl/index.html b/public/res/views/component/laytpl/index.html new file mode 100644 index 00000000..1e9df066 --- /dev/null +++ b/public/res/views/component/laytpl/index.html @@ -0,0 +1,47 @@ +模板引擎 + + + + + +
                      + + + \ No newline at end of file diff --git a/public/res/views/component/nav/index.html b/public/res/views/component/nav/index.html new file mode 100644 index 00000000..8675a00f --- /dev/null +++ b/public/res/views/component/nav/index.html @@ -0,0 +1,208 @@ +导航 + +
                      +
                      + 主页 + 组件 + 导航 +
                      +
                      + + + +
                      +
                      +
                      +
                      +
                      水平导航菜单
                      + +
                      +
                      +
                      导航带徽章和图片
                      +
                      + +
                      +
                      + +
                      + +
                      + +
                      +
                      面包屑
                      + +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/panel/index.html b/public/res/views/component/panel/index.html new file mode 100644 index 00000000..f5ac0da5 --- /dev/null +++ b/public/res/views/component/panel/index.html @@ -0,0 +1,188 @@ +面板 + +
                      +
                      + 主页 + 组件 + 面板 +
                      +
                      + + + +
                      +
                      +
                      +
                      +
                      折叠面板
                      +
                      +
                      +
                      +

                      为什么JS社区大量采用未发布或者未广泛支持的语言特性?

                      +
                      +

                      + 有不少其他答案说是因为JS太差。我下面的答案已经说了,这不是根本性的原因。但除此之外,我还要纠正一些对JS具体问题的误解。JS当初是被作为脚本语言设计的,所以某些问题并不是JS设计得差或者是JS设计者的失误。比如var的作用域问题,并不是“错误”,而是当时绝大部分脚本语言都是这样的,如perl/php/sh等。模块的问题也是,脚本语言几乎都没有模块/命名空间功能。弱类型、for-in之类的问题也是,只不过现在用那些老的脚本语言的人比较少,所以很多人都误以为是JS才有的坑。另外有人说JS是半残语言,满足不了开发需求,1999年就该死。半残这个嘛,就夸张了。JS虽然有很多问题,但是设计总体还是优秀的。——来自知乎@贺师俊

                      +
                      +
                      +
                      +

                      为什么前端工程师多不愿意用 Bootstrap 框架?

                      +
                      +

                      + 因为不适合。如果希望开发长期的项目或者制作产品类网站,那么就需要实现特定的设计,为了在维护项目中可以方便地按设计师要求快速修改样式,肯定会逐步编写出各种业务组件、工具类,相当于为项目自行开发一套框架。——来自知乎@Kayo

                      +
                      +
                      +
                      +

                      layui 更适合哪些开发者?

                      +
                      +

                      在前端技术快速变革的今天,layui 仍然坚持语义化的组织模式,甚至于模块理念都是采用类AMD组织形式,并非是有意与时代背道而驰。layui + 认为以jQuery为核心的开发方式还没有到完全消亡的时候,而早期市面上基于jQuery的UI都普通做得差强人意,所以需要有一个新的UI去重新为这一领域注入活力,并采用一些更科学的架构方式。 +

                      + 因此准确地说,layui 更多是面向那些追求开发简单的前端工程师们,以及所有层次的服务端程序员。 +

                      +
                      +
                      +
                      +

                      张三是男是女?

                      +
                      +

                      man! 所以这个问题不要再出现了。。。

                      +
                      +
                      +
                      +
                      +
                      +
                      + +
                      手风琴折叠
                      +
                      +
                      +
                      +

                      layui 更适合哪些开发者?

                      +
                      +

                      在前端技术快速变革的今天,layui 仍然坚持语义化的组织模式,甚至于模块理念都是采用类AMD组织形式,并非是有意与时代背道而驰。layui + 认为以jQuery为核心的开发方式还没有到完全消亡的时候,而早期市面上基于jQuery的UI都普通做得差强人意,所以需要有一个新的UI去重新为这一领域注入活力,并采用一些更科学的架构方式。 +
                      + 因此准确地说,layui 更多是面向那些追求开发简单的前端工程师们,以及所有层次的服务端程序员。 +

                      +
                      +
                      +
                      +

                      为什么JS社区大量采用未发布或者未广泛支持的语言特性?

                      +
                      +

                      + 有不少其他答案说是因为JS太差。我下面的答案已经说了,这不是根本性的原因。但除此之外,我还要纠正一些对JS具体问题的误解。JS当初是被作为脚本语言设计的,所以某些问题并不是JS设计得差或者是JS设计者的失误。比如var的作用域问题,并不是“错误”,而是当时绝大部分脚本语言都是这样的,如perl/php/sh等。模块的问题也是,脚本语言几乎都没有模块/命名空间功能。弱类型、for-in之类的问题也是,只不过现在用那些老的脚本语言的人比较少,所以很多人都误以为是JS才有的坑。另外有人说JS是半残语言,满足不了开发需求,1999年就该死。半残这个嘛,就夸张了。JS虽然有很多问题,但是设计总体还是优秀的。——来自知乎@贺师俊

                      +
                      +
                      +
                      +

                      为什么前端工程师多不愿意用 Bootstrap 框架?

                      +
                      +

                      + 因为不适合。如果希望开发长期的项目或者制作产品类网站,那么就需要实现特定的设计,为了在维护项目中可以方便地按设计师要求快速修改样式,肯定会逐步编写出各种业务组件、工具类,相当于为项目自行开发一套框架。——来自知乎@Kayo

                      +
                      +
                      +
                      +

                      张三是男是女?

                      +
                      +

                      man! 所以这个问题不要再出现了。。。

                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      折叠面板嵌套
                      +
                      +
                      +
                      +

                      文豪

                      +
                      + +
                      +
                      +

                      唐代

                      +
                      + +
                      +
                      +

                      杜甫

                      +
                      + 伟大的诗人 +
                      +
                      +
                      +

                      李白

                      +
                      +

                      据说是韩国人

                      +
                      +
                      +
                      +

                      王勃

                      +
                      +

                      千古绝唱《滕王阁序》

                      +
                      +
                      +
                      + +
                      +
                      +
                      +

                      宋代

                      +
                      +

                      比如苏轼、李清照

                      +
                      +
                      +
                      +

                      当代

                      +
                      +

                      比如张三

                      +
                      +
                      +
                      +
                      +
                      +
                      +

                      科学家

                      +
                      +

                      伟大的科学家

                      +
                      +
                      +
                      +

                      艺术家

                      +
                      +

                      浑身散发着艺术细胞

                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      卡片面板
                      +
                      + 就是当前这个 +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/progress/index.html b/public/res/views/component/progress/index.html new file mode 100644 index 00000000..2f946701 --- /dev/null +++ b/public/res/views/component/progress/index.html @@ -0,0 +1,161 @@ +进度条 + +
                      + +
                      + + + +
                      +
                      +
                      +
                      +
                      默认进度条
                      +
                      + +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + +
                      +
                      +
                      +
                      +
                      +
                      更多颜色进度条
                      +
                      + +
                      +
                      +
                      + +
                      +
                      +
                      + +
                      +
                      +
                      + +
                      +
                      +
                      + +
                      +
                      +
                      + +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + +
                      +
                      +
                      +
                      +
                      +
                      动态改变进度
                      +
                      + +
                      +
                      +
                      + +
                      + + +
                      + +
                      +
                      +
                      +
                      +
                      +
                      显示进度比文本
                      +
                      + +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/rate/index.html b/public/res/views/component/rate/index.html new file mode 100644 index 00000000..da2c636a --- /dev/null +++ b/public/res/views/component/rate/index.html @@ -0,0 +1,191 @@ +评分组件 + + + +
                      +
                      +
                      +
                      +
                      基础效果
                      +
                      +
                      +
                      +
                      +
                      +
                      显示文字
                      +
                      +
                      +
                      +
                      +
                      +
                      半星效果
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      自定义主题色
                      +
                      +
                        +
                      • +
                        +
                      • +
                      • +
                        +
                      • +
                      • +
                        +
                      • +
                      • +
                        +
                      • +
                      • +
                        +
                      • +
                      +
                      +
                      +
                      +
                      +
                      +
                      只读
                      +
                      +
                      +
                      +
                      +
                      +
                      自定义内容
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      自定义长度
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/slider/index.html b/public/res/views/component/slider/index.html new file mode 100644 index 00000000..6b41df8e --- /dev/null +++ b/public/res/views/component/slider/index.html @@ -0,0 +1,216 @@ +滑块组件 + + + + + +
                      +
                      +
                      +
                      +
                      基础效果
                      +
                      +
                      +
                      +
                      +
                      +
                      定义初始值
                      +
                      +
                      +
                      +
                      +
                      +
                      设置最大最小值
                      +
                      +
                      +
                      +
                      +
                      +
                      设置步长
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      设置提示文本
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      开启输入框
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      开启范围选择
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      垂直滑块
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      自定义颜色
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      禁用滑块
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/auto.html b/public/res/views/component/table/auto.html new file mode 100644 index 00000000..4a0218b9 --- /dev/null +++ b/public/res/views/component/table/auto.html @@ -0,0 +1,47 @@ +列宽自动分配 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      列宽自动分配
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/cellEdit.html b/public/res/views/component/table/cellEdit.html new file mode 100644 index 00000000..868c3c8f --- /dev/null +++ b/public/res/views/component/table/cellEdit.html @@ -0,0 +1,54 @@ +开启单元格编辑 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      开启单元格编辑
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/cellEvent.html b/public/res/views/component/table/cellEvent.html new file mode 100644 index 00000000..8fef963d --- /dev/null +++ b/public/res/views/component/table/cellEvent.html @@ -0,0 +1,65 @@ +单元格事件 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      单元格事件
                      +
                      +
                      点击下面表格中的【签名列】,以演示单元格事件
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/data.html b/public/res/views/component/table/data.html new file mode 100644 index 00000000..353faab6 --- /dev/null +++ b/public/res/views/component/table/data.html @@ -0,0 +1,139 @@ +赋值已知数据 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      赋值已知数据
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/fixed.html b/public/res/views/component/table/fixed.html new file mode 100644 index 00000000..9744a27d --- /dev/null +++ b/public/res/views/component/table/fixed.html @@ -0,0 +1,51 @@ +固定列 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      固定列
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/form.html b/public/res/views/component/table/form.html new file mode 100644 index 00000000..29f2d19f --- /dev/null +++ b/public/res/views/component/table/form.html @@ -0,0 +1,83 @@ +加入表单元素 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      加入表单元素
                      +
                      +
                      + + + + + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/index.html b/public/res/views/component/table/index.html new file mode 100644 index 00000000..d021063e --- /dev/null +++ b/public/res/views/component/table/index.html @@ -0,0 +1,336 @@ +综合演示 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      综合演示
                      +
                      +
                      + + + + + + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/initSort.html b/public/res/views/component/table/initSort.html new file mode 100644 index 00000000..395b818b --- /dev/null +++ b/public/res/views/component/table/initSort.html @@ -0,0 +1,46 @@ +设置初始排序 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      设置初始排序
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/onrow.html b/public/res/views/component/table/onrow.html new file mode 100644 index 00000000..56a9ed61 --- /dev/null +++ b/public/res/views/component/table/onrow.html @@ -0,0 +1,67 @@ +行事件 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      行事件
                      +
                      + +
                      + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/parseData.html b/public/res/views/component/table/parseData.html new file mode 100644 index 00000000..69ed6cfa --- /dev/null +++ b/public/res/views/component/table/parseData.html @@ -0,0 +1,65 @@ +解析任意数据格式 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      解析任意数据格式
                      +
                      +
                      + 尽管本示例中的原始数据:./res/json/table/demo3.js,并不符合 + table 组件默认规定的数据格式,但从 layui 2.4.0 开始,新增的 parseData 回调可以将原始的任意格式的数据重新解析成 + table 组件规定的数据格式。具体可以点击上方查看代码。 +
                      + +
                      + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/radio.html b/public/res/views/component/table/radio.html new file mode 100644 index 00000000..6423d987 --- /dev/null +++ b/public/res/views/component/table/radio.html @@ -0,0 +1,69 @@ +开启单选框 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      开启单选框
                      +
                      +
                      + + + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/resetPage.html b/public/res/views/component/table/resetPage.html new file mode 100644 index 00000000..841a98e3 --- /dev/null +++ b/public/res/views/component/table/resetPage.html @@ -0,0 +1,56 @@ +自定义分页 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      自定义分页
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/search.html b/public/res/views/component/table/search.html new file mode 100644 index 00000000..192b55fc --- /dev/null +++ b/public/res/views/component/table/search.html @@ -0,0 +1,87 @@ +数据表格的重载 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      数据表格的重载
                      +
                      + +
                      + 搜索ID: +
                      + +
                      + +
                      + +
                      + +
                      此处由于是静态模拟数据,所以搜索后重载的结果没变,这并非是 + BUG。实际使用时改成真实接口并根据搜索的字段筛选出对应的数据即可。 +
                      + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/static.html b/public/res/views/component/table/static.html new file mode 100644 index 00000000..3dc75649 --- /dev/null +++ b/public/res/views/component/table/static.html @@ -0,0 +1,307 @@ +静态表格 + + + +
                      +
                      +
                      +
                      +
                      默认风格
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      人物民族出场时间格言
                      张三汉族1989-10-14人生似修行
                      张爱玲汉族1920-09-30于千万人之中遇见你所遇见的人,于千万年之中,时间的无涯的荒野里…
                      Helen Keller拉丁美裔1880-06-27 Life is either a daring adventure or nothing.
                      岳飞汉族1103-北宋崇宁二年三十功名尘与土,八千里路云和月
                      孟子华夏族(汉族)公元前-372年穷则独善其身,达则兼济天下
                      +
                      +
                      +
                      +
                      +
                      +
                      行边框风格
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      人物民族出场时间格言
                      张三汉族1989-10-14人生似修行
                      张爱玲汉族1920-09-30于千万人之中遇见你所遇见的人,于千万年之中,时间的无涯的荒野里…
                      Helen Keller拉丁美裔1880-06-27 Life is either a daring adventure or nothing.
                      岳飞汉族1103-北宋崇宁二年三十功名尘与土,八千里路云和月
                      孟子华夏族(汉族)公元前-372年穷则独善其身,达则兼济天下
                      +
                      +
                      +
                      +
                      +
                      +
                      列边框风格
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      人物民族出场时间格言
                      张三汉族1989-10-14人生似修行
                      张爱玲汉族1920-09-30于千万人之中遇见你所遇见的人,于千万年之中,时间的无涯的荒野里…
                      Helen Keller拉丁美裔1880-06-27 Life is either a daring adventure or nothing.
                      岳飞汉族1103-北宋崇宁二年三十功名尘与土,八千里路云和月
                      孟子华夏族(汉族)公元前-372年穷则独善其身,达则兼济天下
                      +
                      +
                      +
                      +
                      +
                      +
                      无边框风格
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      人物民族出场时间格言
                      张三汉族1989-10-14人生似修行
                      张爱玲汉族1920-09-30于千万人之中遇见你所遇见的人,于千万年之中,时间的无涯的荒野里…
                      Helen Keller拉丁美裔1880-06-27 Life is either a daring adventure or nothing.
                      岳飞汉族1103-北宋崇宁二年三十功名尘与土,八千里路云和月
                      孟子华夏族(汉族)公元前-372年穷则独善其身,达则兼济天下
                      +
                      +
                      +
                      +
                      +
                      +
                      其它尺寸
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      昵称加入时间签名
                      张三2016-11-29人生就像是一场修行
                      许闲心2016-11-28于千万人之中遇见你所遇见的人,于千万年之中,时间的无涯的荒野里…
                      sentsin2016-11-27 Life is either a daring adventure or nothing.
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      昵称加入时间签名
                      张三2016-11-29人生就像是一场修行
                      许闲心2016-11-28于千万人之中遇见你所遇见的人,于千万年之中,时间的无涯的荒野里…
                      sentsin2016-11-27 Life is either a daring adventure or nothing.
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/style.html b/public/res/views/component/table/style.html new file mode 100644 index 00000000..9f8e1d40 --- /dev/null +++ b/public/res/views/component/table/style.html @@ -0,0 +1,61 @@ +设置单元格样式 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      设置单元格样式
                      +
                      +
                      + + + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/thead.html b/public/res/views/component/table/thead.html new file mode 100644 index 00000000..b1b05bb6 --- /dev/null +++ b/public/res/views/component/table/thead.html @@ -0,0 +1,99 @@ +复杂表头 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      复杂表头
                      +
                      +
                      + 常用两级表头 +
                      + + + + + + + + + + + + + + + + +
                      联系人地址金额操作 +
                      + +
                      + +
                      + 更多级表头(可以无限极) +
                      + + + + + + + + + + + + + + + + + + + + + + +
                      联系人金额地址1地址2操作 +
                      详细
                      街道小区单元
                      + + + +
                      +
                      注:上述例子读取的均是静态模拟数据
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/table/tostatic.html b/public/res/views/component/table/tostatic.html new file mode 100644 index 00000000..dbf22c69 --- /dev/null +++ b/public/res/views/component/table/tostatic.html @@ -0,0 +1,73 @@ +转化静态表格 - 数据表格 + + + +
                      +
                      +
                      +
                      +
                      转化静态表格
                      +
                      + +
                      + +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      昵称加入时间签名
                      张三12016-11-28人生就像是一场修行 A
                      张三22016-11-29人生就像是一场修行 B
                      张三32016-11-30人生就像是一场修行 C
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/tabs/index.html b/public/res/views/component/tabs/index.html new file mode 100644 index 00000000..96721914 --- /dev/null +++ b/public/res/views/component/tabs/index.html @@ -0,0 +1,188 @@ +选项卡组件 + +
                      + +
                      + + + +
                      +
                      +
                      +
                      +
                      默认风格
                      +
                      +
                      +
                        +
                      • 网站设置
                      • +
                      • 用户管理
                      • +
                      • 权限分配
                      • +
                      • 商品管理
                      • +
                      • 订单管理
                      • +
                      +
                      +
                      + 1. 高度默认自适应,也可以随意固宽。 +
                      2. Tab进行了响应式处理,所以无需担心数量多少。 +
                      +
                      内容2
                      +
                      内容3
                      +
                      内容4
                      +
                      内容5
                      +
                      +
                      +
                      +
                      +
                      +
                      简洁风格
                      +
                      +
                      +
                        +
                      • 网站设置
                      • +
                      • 用户管理
                      • +
                      • 权限分配
                      • +
                      • 商品管理
                      • +
                      • 订单管理
                      • +
                      +
                      +
                      + 你也可以 tab 事件 +
                      +
                      内容2
                      +
                      内容3
                      +
                      内容4
                      +
                      内容5
                      +
                      +
                      +
                      +
                      +
                      +
                      卡片风格
                      +
                      +
                      +
                        +
                      • 网站设置
                      • +
                      • 用户管理
                      • +
                      • 权限分配
                      • +
                      • 商品管理
                      • +
                      • 订单管理
                      • +
                      +
                      +
                      默认宽度是相对于父元素100%适应的,你也可以固定宽度。 +
                      +
                      2
                      +
                      3
                      +
                      4
                      +
                      5
                      +
                      6
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      动态操作
                      +
                      +
                      +
                        +
                      • 网站设置
                      • +
                      • 用户管理
                      • +
                      • 权限分配
                      • +
                      • 商品管理
                      • +
                      • 订单管理
                      • +
                      +
                      +
                      内容1
                      +
                      内容2
                      +
                      内容3
                      +
                      +
                      +
                      + + + +
                      +
                      +
                      +
                      +
                      记录状态
                      +
                      +
                      +
                        +
                      • 网站设置
                      • +
                      • 用户管理
                      • +
                      • 权限分配
                      • +
                      • 商品管理
                      • +
                      • 订单管理
                      • +
                      +
                      +
                      + 点击该Tab的任一标题,观察地址栏变化,再刷新页面。选项卡将会自动定位到上一次切换的项 +
                      +
                      内容2
                      +
                      内容3
                      +
                      内容4
                      +
                      内容5
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/timeline/index.html b/public/res/views/component/timeline/index.html new file mode 100644 index 00000000..447d67e6 --- /dev/null +++ b/public/res/views/component/timeline/index.html @@ -0,0 +1,126 @@ +时间线 + +
                      + +
                      + + + +
                      +
                      +
                      +
                      +
                      常规时间线
                      +
                      + +
                        +
                      • + +
                        +

                        12月28日

                        +

                        + 一直以来,layui 秉承无偿开源的初心,虔诚致力于服务各层次前后端 Web + 开发者,在商业横飞的当今时代,这一信念从未动摇。即便身单力薄,仍然重拾决心,埋头造轮,以尽可能地填补产品本身的缺口。在过去的一段的时间,我一直在寻求持久之道,已维持你眼前所见的一切。而 + layuiAdmin 是我们尝试解决的手段之一。我相信真正有爱于 layui 生态的你,定然不会错过这一拥抱吧。 +

                        +


                        子曰:君子不用防,小人防不住。请务必通过官网正规渠道,获得 layuiAdmin

                        +
                        +
                      • +
                      • + +
                        +

                        12月25日

                        +

                        又是一年 “圣诞节”,2018 向我们正在走来

                        +
                          +
                        • 叮叮当,叮叮当,铃儿响叮当
                        • +
                        • 今晚滑雪多快乐,我们坐在雪橇上
                        • +
                        +
                        +
                      • +
                      • + +
                        +

                        12月24日

                        +

                        + 美丽的夜晚,都是祈祷的人们。
                        他们等待着第二天,收到圣诞老人的礼物。

                        +

                        +
                        平安夜,天赐平安。愿真善美的事物都能永恒。 +
                        +
                        +
                      • +
                      • + +
                        +
                        过去
                        +
                        +
                      • +
                      + +
                      +
                      +
                      +
                      +
                      +
                      简约时间线
                      +
                      + +
                        +
                      • + +
                        +
                        + 2018年,layui 5.0 发布,并发展成为中国最受欢迎的前端 UI 框架(期望) +
                        +
                        +
                      • +
                      • + +
                        +
                        2017年,layui 里程碑版本 2.0 发布
                        +
                        +
                      • +
                      • + +
                        +
                        2016年,layui 首个版本发布
                        +
                        +
                      • +
                      • + +
                        +
                        2015年,layui 孵化
                        +
                        +
                      • +
                      • + +
                        +
                        更久前,轮子时代。维护几个独立组件:layer等
                        +
                        +
                      • +
                      + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/transfer/index.html b/public/res/views/component/transfer/index.html new file mode 100644 index 00000000..087610c7 --- /dev/null +++ b/public/res/views/component/transfer/index.html @@ -0,0 +1,183 @@ +穿梭框组件 + + + +
                      +
                      +
                      +
                      +
                      基础效果
                      +
                      +
                      +
                      +
                      +
                      +
                      定义标题及数据源
                      +
                      +
                      +
                      +
                      +
                      +
                      初始右侧数据集合
                      +
                      +
                      +
                      +
                      +
                      +
                      显示搜索框
                      +
                      +
                      +
                      +
                      +
                      +
                      数据格式解析
                      +
                      +
                      +
                      +
                      +
                      +
                      穿梭时的回调
                      +
                      +
                      +
                      +
                      +
                      +
                      实例调用
                      +
                      +
                      + + +
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/tree/index.html b/public/res/views/component/tree/index.html new file mode 100644 index 00000000..4b04b6f6 --- /dev/null +++ b/public/res/views/component/tree/index.html @@ -0,0 +1,429 @@ +树形组件 + + + +
                      +
                      +
                      +
                      +
                      基本演示
                      +
                      +
                      + + + +
                      +
                      +
                      +
                      +
                      +
                      常规用法
                      +
                      +
                      +
                      +
                      +
                      +
                      无连接线风格
                      +
                      +
                      +
                      +
                      +
                      +
                      仅节点左侧图标控制收缩
                      +
                      +
                      +
                      +
                      +
                      +
                      手风琴模式
                      +
                      +
                      +
                      +
                      +
                      +
                      点击节点新窗口跳转
                      +
                      +
                      +
                      +
                      +
                      +
                      开启复选框
                      +
                      +
                      +
                      +
                      +
                      +
                      开启节点操作图标
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/treeTable/index.html b/public/res/views/component/treeTable/index.html new file mode 100644 index 00000000..c9280f1b --- /dev/null +++ b/public/res/views/component/treeTable/index.html @@ -0,0 +1,139 @@ +树形表格 + + + +
                      +
                      +
                      +
                      +
                      树形表格
                      +
                      +
                      + + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/upload/demo1.html b/public/res/views/component/upload/demo1.html new file mode 100644 index 00000000..5d0a70e7 --- /dev/null +++ b/public/res/views/component/upload/demo1.html @@ -0,0 +1,208 @@ +功能演示一 - 上传组件 + + + + + +
                      +
                      +
                      +
                      +
                      普通图片上传
                      +
                      +
                      + +
                      + +

                      +
                      +
                      +
                      + 为节省服务器开销,以下示例均未配置真实上传接口,所以每次上传都会报提示:请求上传接口出现异常,这属于正常现象。 +
                      +
                      +
                      +
                      + +
                      +
                      +
                      上传多张图片
                      +
                      +
                      + +
                      + 预览图: +
                      +
                      +
                      +
                      +
                      +
                      + +
                      +
                      +
                      指定允许上传的文件类型
                      +
                      + + + + +
                      +
                      +
                      + +
                      +
                      +
                      设定文件大小限制
                      +
                      + +
                      + 这里以限制 60KB 为例 +
                      +
                      +
                      +
                      + +
                      +
                      +
                      同时绑定多个元素,并将属性设定在元素上
                      +
                      + + + +
                      +
                      +
                      + +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/upload/demo2.html b/public/res/views/component/upload/demo2.html new file mode 100644 index 00000000..e8ea12c6 --- /dev/null +++ b/public/res/views/component/upload/demo2.html @@ -0,0 +1,187 @@ +功能演示二 - 上传组件 + + + +
                      +
                      + +
                      +
                      +
                      高级应用:制作一个多文件列表
                      +
                      +
                      + +
                      + + + + + + + + + + + + + + + + +
                      文件名大小上传进度操作
                      +
                      + +
                      +
                      +
                      +
                      + +
                      +
                      +
                      选完文件后不自动上传
                      +
                      +
                      + + +
                      +
                      +
                      +
                      + +
                      +
                      +
                      拖拽上传
                      +
                      +
                      + +

                      点击上传,或将文件拖拽到此处

                      +
                      +
                      +
                      +
                      + +
                      +
                      +
                      绑定原始文件域
                      +
                      + +
                      +
                      +
                      + +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/util/index.html b/public/res/views/component/util/index.html new file mode 100644 index 00000000..f77caee7 --- /dev/null +++ b/public/res/views/component/util/index.html @@ -0,0 +1,87 @@ +工具模块 - 组件 + + + +
                      +
                      +
                      +
                      +
                      倒计时
                      +
                      + 请选择要计算的日期: +
                      + +
                      +
                      +
                      +
                      +
                      +
                      +
                      + +
                      +
                      +
                      某个时间在当前时间的多久前
                      +
                      + 请选择要计算的日期: +
                      + +
                      + +
                      +
                      +
                      + +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/component/说明.txt b/public/res/views/component/说明.txt new file mode 100644 index 00000000..8794b973 --- /dev/null +++ b/public/res/views/component/说明.txt @@ -0,0 +1,2 @@ + +该目录存放【组件】的视图文件 \ No newline at end of file diff --git a/public/res/views/home/homepage1.html b/public/res/views/home/homepage1.html new file mode 100644 index 00000000..931cc168 --- /dev/null +++ b/public/res/views/home/homepage1.html @@ -0,0 +1,219 @@ +主页一 + +
                      + +
                      + +
                      +
                      +
                      +
                      +
                      + 最近更新 + 全部更新 +
                      +
                      +
                      +
                      +
                      + +

                      修复开启 isLazyimg:true 后, + 图片懒加载但是图片不存在的报错问题

                      +

                      流加载7 天前

                      +
                      +
                      +
                      +
                      + +

                      修复开启 size + 参数后,文件超出规定大小时,提示信息有误的问题

                      +

                      文件上传7 天前 +

                      +
                      +
                      +
                      +
                      + +

                      增加 form.val(filter, + fields)方法,用于给指定表单集合的元素初始赋值

                      +

                      表单7 天前 +

                      +
                      +
                      +
                      +
                      + +

                      对 select 组件新增上下键(↑ ↓)回车键(Enter)选择功能

                      +

                      表单7 天前 +

                      +
                      +
                      +
                      +
                      + +

                      优化 switch 开关组件,让其能根据文本自由伸缩宽

                      +

                      表单7 天前 +

                      +
                      +
                      +
                      +
                      + +

                      修复 checkbox 复选框组件在高分辨屏下出现的样式不雅问题

                      +

                      表单7 天前 +

                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      动态
                      +
                      +
                      +
                      +
                      +
                      +

                      张三 在 讨论区 回答问题

                      + 几秒前 +
                      +
                      +
                      +
                      +
                      +

                      张三 在 讨论区 进行了 提问

                      + 2天前 +
                      +
                      +
                      +
                      +
                      +

                      张三 将 layui 更新至 2.3.0-rc1 版本

                      + 7天前 +
                      +
                      +
                      +
                      +
                      +

                      张三 在 Issues 区 发布了 建议

                      + 7天前 +
                      +
                      +
                      +
                      +
                      +

                      张三 在 Issues 区 发布了 建议

                      + 8天前 +
                      +
                      +
                      +
                      +
                      +

                      张三 在 讨论区 进行了 提问

                      + 8天前 +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      快速开始/便捷导航
                      +
                      + +
                      +
                      +
                      +
                      八卦新闻
                      +
                      + + + +
                      +
                      + +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/home/homepage2.html b/public/res/views/home/homepage2.html new file mode 100644 index 00000000..689f4d96 --- /dev/null +++ b/public/res/views/home/homepage2.html @@ -0,0 +1,317 @@ +主页二 + +
                      + +
                      + +
                      +
                      +
                      +
                      +
                      + 访问量 + +
                      +
                      +

                      99,777

                      +

                      + 总计访问量 + 88万 +

                      +
                      +
                      +
                      +
                      +
                      +
                      + 下载 + +
                      +
                      +

                      33,555

                      +

                      + 新下载 + 10% +

                      +
                      +
                      +
                      +
                      +
                      +
                      + 点赞 + +
                      +
                      + +

                      999,777

                      +

                      + 总赞 + *** +

                      +
                      +
                      +
                      +
                      +
                      +
                      + 活跃用户 + +
                      +
                      + +

                      66,777

                      +

                      + 最近一个月 + 15% +

                      +
                      +
                      +
                      +
                      +
                      +
                      + 访问量 +
                      + + +
                      +
                      +
                      +
                      +
                      + +
                      +
                      +
                      +

                      月访问数

                      + 同上期增长 +
                      +
                      +
                      +
                      +
                      +

                      月下载数

                      + 同上期增长 +
                      +
                      +
                      +
                      +
                      +

                      月点赞数

                      + 同上期增长 +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      用户留言
                      +
                      +
                        +
                      • +

                        张三

                        +

                        作为 layui 官方原创的高质量管理系统模板,layuiAdmin + 已经逐步成为后端工程师开发管理系统的首选界面模板。

                        + 5月30日 00:00 + 回复 +
                      • +
                      • +

                        诸葛亮

                        +

                        + 皓首匹夫!苍髯老贼!你枉活九十有六,一生未立寸功,只会摇唇鼓舌!助曹为虐!一条断脊之犬,还敢在我军阵前狺狺狂吠,我从未见过有如此厚颜无耻之人!

                        + 5月02日 00:00 + 回复 +
                      • +
                      • +

                        张三

                        +

                        + 你以为只要长得漂亮就有男生喜欢?你以为只要有了钱漂亮妹子就自己贴上来了?你以为学霸就能找到好工作?我告诉你吧,这些都是真的!

                        + 5月11日 00:00 + 回复 +
                      • +
                      • +

                        杜甫

                        +

                        人才虽高,不务学问,不能致圣。刘向十日画一水,五日画一石。

                        + 4月11日 00:00 + 回复 +
                      • +
                      • +

                        鲁迅

                        +

                        路本是无所谓有和无的,走的人多了,就没路了。。

                        + 4月28日 00:00 + 回复 +
                      • +
                      • +

                        张爱玲

                        +

                        + 于千万人之中遇到你所要遇到的人,于千万年之中,时间的无涯的荒野中,没有早一步,也没有晚一步,刚巧赶上了,那也没有别的话好说,唯有轻轻的问一声:“噢,原来你也在这里?”

                        + 4月11日 00:00 + 回复 +
                      • +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      本周活跃用户列表
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      用户名最后登录时间状态获得赞
                      张三 11:20在线22
                      张三 10:40在线21
                      张三 01:30离线66
                      张三 21:18离线45
                      张三 09:30在线21
                      张三 21:18在线45
                      张三 09:30在线21
                      +
                      +
                      +
                      +
                      +
                      +
                      项目进展
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      访客地区分布
                      +
                      +
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      排名地区人数
                      1浙江62310
                      2上海59190
                      3广东55891
                      4北京51919
                      5山东39231
                      6湖北37109
                      +
                      +
                      + +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/iframe/layer/iframe.html b/public/res/views/iframe/layer/iframe.html new file mode 100644 index 00000000..3bd4d3a6 --- /dev/null +++ b/public/res/views/iframe/layer/iframe.html @@ -0,0 +1,99 @@ + + + + + layer iframe 示例 + + + + + + + + + + +
                      + + + + +
                      + + + + + diff --git a/public/res/views/iframe/link/demo.html b/public/res/views/iframe/link/demo.html new file mode 100644 index 00000000..e6b11966 --- /dev/null +++ b/public/res/views/iframe/link/demo.html @@ -0,0 +1,2 @@ +Bing + \ No newline at end of file diff --git a/public/res/views/iframe/说明.txt b/public/res/views/iframe/说明.txt new file mode 100644 index 00000000..bb7d9ca1 --- /dev/null +++ b/public/res/views/iframe/说明.txt @@ -0,0 +1,3 @@ + +尽管 layuiAdmin 采用的是单页面应用开发模式,但有时你可能需要 iframe 嵌入一个页面,layuiAdmin 对此做了支持。 +该目录存放的就是 iframe 页面的视图文件。 \ No newline at end of file diff --git a/public/res/views/index.html b/public/res/views/index.html new file mode 100644 index 00000000..19464892 --- /dev/null +++ b/public/res/views/index.html @@ -0,0 +1,397 @@ +
                      +
                      +
                      +
                      + + +
                      +
                      +
                      数据概览
                      +
                      + + + +
                      +
                      + +
                      +
                      访客地区分布
                      +
                      +
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      排名地区人数
                      1浙江62310
                      2上海59190
                      3广东55891
                      4北京51919
                      5山东39231
                      6湖北37109
                      +
                      +
                      + +
                      +
                      +
                      +
                      + +
                      +
                      +
                        +
                      • 今日热搜
                      • +
                      • 今日热帖
                      • +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      + +
                      +
                      +
                      版本信息
                      +
                      + + + + + + + + + + + + + + + + + + + + + + + +
                      页面模式 + +
                      Version + +
                      Layui + +
                      主要特色单页面 / 响应式 / 清爽 / 极简
                      +
                      +
                      + +
                      +
                      效果报告
                      +
                      +
                      +

                      转化率(日同比 28%

                      +
                      +
                      +
                      +

                      签到率(日同比 11%

                      +
                      +
                      +
                      +
                      + +
                      +
                      进度占用
                      +
                      +
                      +

                      CPU使用率

                      +
                      +
                      +
                      +

                      内存占用率

                      +
                      +
                      +
                      +
                      + +
                      +
                      项目进展
                      +
                      +
                      +
                      +
                      + + + +
                      +
                      + 模板心语 + +
                      +
                      +
                      +

                      所谓“单页版”,即 SPA(单页面应用系统)开发模式,也就是所有的页面动作都是在一个宿主页面中完成,通常用于前后端分离。其中视图层全权由前端把控,数据一律走 + Ajax 异步请求。layuiAdmin 内部实现了一套基于 location.hash + 的路由和模板机制,这使得你可以很轻松地实现界面的跳转与渲染。另外注意的是,接口鉴权不再适用于传统的 + session 模式,一般需要采用 + JWT。总体来说,刚开始使用会相对有些复杂,但使用习惯后,项目会更易维护。

                      +

                      子曰:君子不用防,小人防不住。

                      +

                      请尊重知识产权,尊重他人劳动成果。

                      +
                      +
                      +
                      +
                      + +
                      +
                      + + + + diff --git a/public/res/views/layout.html b/public/res/views/layout.html new file mode 100644 index 00000000..f83a9baf --- /dev/null +++ b/public/res/views/layout.html @@ -0,0 +1,207 @@ +
                      +
                      + + + +
                      + + +
                      +
                      + +
                      +
                      + + + + + + + +
                      +
                      +
                      + + +
                      + +
                      diff --git a/public/res/views/senior/echarts/bar.html b/public/res/views/senior/echarts/bar.html new file mode 100644 index 00000000..8a700599 --- /dev/null +++ b/public/res/views/senior/echarts/bar.html @@ -0,0 +1,114 @@ +柱状图 + + + +
                      +
                      +
                      +
                      +
                      标准柱状图
                      +
                      + + + +
                      +
                      +
                      +
                      堆积柱状图
                      +
                      + + + +
                      +
                      +
                      +
                      不等距柱形图
                      +
                      + + + +
                      +
                      +
                      +
                      彩虹柱形图
                      +
                      + + + +
                      +
                      +
                      +
                      +
                      +
                      标准条形图
                      +
                      + + + +
                      +
                      +
                      +
                      堆积条形图
                      +
                      + + + +
                      +
                      +
                      +
                      旋风条形图
                      +
                      + + + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/senior/echarts/line.html b/public/res/views/senior/echarts/line.html new file mode 100644 index 00000000..0d7fbb0e --- /dev/null +++ b/public/res/views/senior/echarts/line.html @@ -0,0 +1,102 @@ +折线图 + + + +
                      +
                      +
                      +
                      +
                      标准折线图
                      +
                      + + + +
                      +
                      +
                      +
                      堆积折线图
                      +
                      + + + +
                      +
                      +
                      +
                      不等距折线图
                      +
                      + + + +
                      +
                      +
                      +
                      +
                      +
                      堆积面积图
                      +
                      + + + +
                      +
                      +
                      +
                      面积图
                      +
                      + + + +
                      +
                      +
                      +
                      对数轴
                      +
                      + + + +
                      +
                      +
                      + +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/senior/echarts/map.html b/public/res/views/senior/echarts/map.html new file mode 100644 index 00000000..f32c1f4c --- /dev/null +++ b/public/res/views/senior/echarts/map.html @@ -0,0 +1,34 @@ +地图 + + + +
                      +
                      +
                      +
                      +
                      地图
                      +
                      + + + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/senior/im/index.html b/public/res/views/senior/im/index.html new file mode 100644 index 00000000..9c3b34c9 --- /dev/null +++ b/public/res/views/senior/im/index.html @@ -0,0 +1,472 @@ +社交聊天 + + + + +
                      +
                      +
                      +
                      +
                      面板外的操作示例
                      +
                      + +
                      + + + + + + +
                      + + + + + + + + +
                      + + + +
                      + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/senior/说明.txt b/public/res/views/senior/说明.txt new file mode 100644 index 00000000..559f97d3 --- /dev/null +++ b/public/res/views/senior/说明.txt @@ -0,0 +1,2 @@ + +该目录存放【高级】的视图文件 \ No newline at end of file diff --git a/public/res/views/set/system/email.html b/public/res/views/set/system/email.html new file mode 100644 index 00000000..10542d52 --- /dev/null +++ b/public/res/views/set/system/email.html @@ -0,0 +1,69 @@ +邮件服务 + + + +
                      +
                      +
                      +
                      +
                      邮件服务 - 模板
                      +
                      + +
                      +
                      + +
                      + +
                      +
                      如:smtp.163.com
                      +
                      +
                      + +
                      + +
                      +
                      一般为 25 或 465
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      +
                      + +
                      +
                      +
                      + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/set/system/website.html b/public/res/views/set/system/website.html new file mode 100644 index 00000000..96249d54 --- /dev/null +++ b/public/res/views/set/system/website.html @@ -0,0 +1,96 @@ +网站设置 + + + +
                      +
                      +
                      +
                      +
                      网站设置
                      +
                      + +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      分钟
                      +
                      本地开发一般推荐设置为 0,线上环境建议设置为 10。 +
                      +
                      +
                      + +
                      + +
                      +
                      KB
                      +
                      提示:1 M = 1024 KB
                      +
                      +
                      + +
                      + +
                      +
                      + +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      + +
                      + +
                      +
                      +
                      +
                      + +
                      +
                      +
                      + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/set/user/info.html b/public/res/views/set/user/info.html new file mode 100644 index 00000000..13254559 --- /dev/null +++ b/public/res/views/set/user/info.html @@ -0,0 +1,102 @@ +设置我的资料 + + + +
                      +
                      +
                      +
                      +
                      设置我的资料
                      +
                      + +
                      +
                      + +
                      + +
                      +
                      当前角色不可更改为其它角色
                      +
                      +
                      + +
                      + +
                      +
                      不可修改。一般用于后台登入名
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + + +
                      +
                      +
                      + +
                      + +
                      +
                      + + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      +
                      + + +
                      +
                      +
                      + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/set/user/password.html b/public/res/views/set/user/password.html new file mode 100644 index 00000000..75436425 --- /dev/null +++ b/public/res/views/set/user/password.html @@ -0,0 +1,56 @@ +设置我的密码 + + + +
                      +
                      +
                      +
                      +
                      修改密码
                      +
                      + +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      6到16个字符
                      +
                      +
                      + +
                      + +
                      +
                      +
                      +
                      + +
                      +
                      +
                      + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/set/说明.txt b/public/res/views/set/说明.txt new file mode 100644 index 00000000..c6004dc2 --- /dev/null +++ b/public/res/views/set/说明.txt @@ -0,0 +1,2 @@ + +该目录存放【设置】的视图文件 \ No newline at end of file diff --git a/public/res/views/system/about.html b/public/res/views/system/about.html new file mode 100644 index 00000000..2e6d5ff7 --- /dev/null +++ b/public/res/views/system/about.html @@ -0,0 +1,17 @@ +
                      版本
                      +
                      +
                      + +
                      +
                      + +
                      关于
                      +
                      +
                      + 一套纯静态的 HTML 网页界面模板,以开源免费的 layui 基础组件和页面模板 Demo 为组成,没有任何后端程序及数据库存储等服务端代码。 +

                      开发者使用该网页模板,可省去前端的大量工作,从而更高效地开发 Web 应用系统。 +

                      该模板受国家计算机软件著作权保护(登记号:2018SR410669),禁止公开及传播模板源文件、盗版及非法倒卖等,违者将自行承担相应的法律责任。 +
                      +
                      \ No newline at end of file diff --git a/public/res/views/system/more.html b/public/res/views/system/more.html new file mode 100644 index 00000000..3f49e483 --- /dev/null +++ b/public/res/views/system/more.html @@ -0,0 +1,21 @@ + + diff --git a/public/res/views/system/theme.html b/public/res/views/system/theme.html new file mode 100644 index 00000000..62840a89 --- /dev/null +++ b/public/res/views/system/theme.html @@ -0,0 +1,43 @@ + + + + + diff --git a/public/res/views/system/说明.txt b/public/res/views/system/说明.txt new file mode 100644 index 00000000..100913b4 --- /dev/null +++ b/public/res/views/system/说明.txt @@ -0,0 +1,3 @@ + +注意: +该目录存放的是 layuiAdmin 的系统模板碎片,很多界面需要依赖到它,请勿剔除。 \ No newline at end of file diff --git a/public/res/views/temp.html b/public/res/views/temp.html new file mode 100644 index 00000000..f62bd2c6 --- /dev/null +++ b/public/res/views/temp.html @@ -0,0 +1,47 @@ +标题 + +
                      +
                      + 主页 + 组件 + XXX +
                      +
                      + + + +
                      +
                      +
                      +
                      +
                      YYY
                      +
                      + + +
                      +
                      +
                      +
                      +
                      +
                      ZZZ
                      +
                      + + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/template/addresslist.html b/public/res/views/template/addresslist.html new file mode 100644 index 00000000..3b54f34e --- /dev/null +++ b/public/res/views/template/addresslist.html @@ -0,0 +1,368 @@ +通讯录 + + + +
                      + +
                      + +
                      +
                      + + + + + + + + + +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/template/caller.html b/public/res/views/template/caller.html new file mode 100644 index 00000000..69b1583d --- /dev/null +++ b/public/res/views/template/caller.html @@ -0,0 +1,203 @@ +客户列表 + + + + + +
                      +
                      +
                      + + + +
                      +
                      +
                        +
                      • 所有联系人
                      • +
                      • 联系方式
                      • +
                      • 联系地址
                      • +
                      +
                      +
                      +
                      + +
                      +

                      张三 最近联系:1 小时前

                      +

                      浙江省广州市越秀区中山六路109 +

                      +
                      + + + +
                      +
                      + +
                      +
                      + +
                      +

                      张三 最近联系:1 小时前

                      +

                      浙江省广州市越秀区中山六路109 +

                      +
                      + + + +
                      +
                      + +
                      +
                      + +
                      +

                      张三 最近联系:1 小时前

                      +

                      浙江省广州市越秀区中山六路109 +

                      +
                      + + + +
                      +
                      + +
                      +
                      + +
                      +

                      张三 最近联系:1 小时前

                      +

                      浙江省广州市越秀区中山六路109 +

                      +
                      + + + +
                      +
                      + +
                      +
                      + +
                      +

                      张三 最近联系:1 小时前

                      +

                      浙江省广州市越秀区中山六路109 +

                      +
                      + + + +
                      +
                      + +
                      +
                      + +
                      +

                      张三 最近联系:1 小时前

                      +

                      浙江省广州市越秀区中山六路109 +

                      +
                      + + + +
                      +
                      + +
                      +
                      + +
                      +

                      张三 最近联系:1 小时前

                      +

                      浙江省广州市越秀区中山六路109 +

                      +
                      + + + +
                      +
                      + +
                      +
                      + +
                      +

                      张三 最近联系:1 小时前

                      +

                      浙江省广州市越秀区中山六路109 +

                      +
                      + + + +
                      +
                      + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/template/goodslist.html b/public/res/views/template/goodslist.html new file mode 100644 index 00000000..97971721 --- /dev/null +++ b/public/res/views/template/goodslist.html @@ -0,0 +1,422 @@ +商品列表 + + + + + +
                      +
                      + + + + + + + + + + + + + + + + +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/template/msgboard.html b/public/res/views/template/msgboard.html new file mode 100644 index 00000000..d4e7233a --- /dev/null +++ b/public/res/views/template/msgboard.html @@ -0,0 +1,100 @@ +留言板 + + + +
                      + +
                      + +
                      +
                      +
                      +
                      +
                      +
                      + +
                      +
                      + +
                      +
                      + +
                      +
                      + + + +
                      +
                      +
                      +
                      +
                      +
                      + + + +
                      +

                      张三

                      +

                      + + + 从移动 + 11分钟前 + +

                      +
                      +

                      + 内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容

                      +
                      +
                      + + + +
                      +

                      张三

                      +

                      + + + 从移动 + 11分钟前 + +

                      +
                      +

                      + 内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容

                      +
                      +
                      + 更多 +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/template/personalpage.html b/public/res/views/template/personalpage.html new file mode 100644 index 00000000..058b94ce --- /dev/null +++ b/public/res/views/template/personalpage.html @@ -0,0 +1,443 @@ +个人主页 + + + + + +
                      +
                      +
                      +
                      +
                      +
                      +
                      + +
                      +

                      张三

                      +

                      中国非知名前端

                      +
                      + + + + +
                      + +
                      +
                      +

                      + 关于我 +

                      + +
                      + 介绍介绍介绍介绍介绍介绍介绍介绍介绍介绍介绍介绍介绍介绍介绍介绍介绍介绍介绍介绍 +
                      +

                      + 技能 +

                      + +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +

                      52K

                      + 关注 +
                      +
                      +

                      72K

                      + 以下 +
                      +
                      +

                      5343

                      + 照片 +
                      +
                      +

                      4.5

                      + 排行 +
                      +
                      +
                      + +
                      +
                      +
                      +
                      +
                      + + + +
                      +
                      +

                      张三普通照片添加了新的照片 +

                      +

                      + + + 从移动 + 11分钟前 + +

                      +
                      +

                      + 内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容

                      + + + +
                      +
                      + + + + +
                      +
                      + 张三 + 3月21日 19:56 +
                      +
                      一次难忘更难得的拍摄经历 谢谢
                      +
                      +
                      +
                      + + + +
                      +
                      + 张三 + 3月21日 19:56 +
                      +
                      一次难忘更难得的拍摄经历 谢谢
                      +
                      +
                      +
                      + + + +
                      +
                      + 张三 + 3月21日 19:56 +
                      +
                      一次难忘更难得的拍摄经历 谢谢
                      +
                      +
                      + 更多 +
                      +
                      +
                      +
                      + + + +
                      +
                      +

                      张三普通照片添加了新的照片 +

                      +

                      + + + 从移动 + 11分钟前 + +

                      +
                      +

                      + 内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容

                      + +
                      +
                      +
                      +
                      +
                      +
                      +
                      +
                      +

                      + + 画廊 +

                      +
                      +
                      +
                      +
                      + +
                      +
                      + +
                      +
                      + +
                      +
                      + +
                      +
                      + +
                      +
                      + +
                      +
                      + +
                      +
                      + +
                      +
                      + +
                      +
                      + 更多 +
                      +
                      +
                      +
                      + +
                      +
                      +
                      +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/template/search.html b/public/res/views/template/search.html new file mode 100644 index 00000000..f2891b43 --- /dev/null +++ b/public/res/views/template/search.html @@ -0,0 +1,100 @@ +搜索结果 + + + + + +
                      +
                      +
                      +
                      +
                      +

                      + 关键词 查询到 + 66 个结果 +

                      +

                      耗时:350ms

                      +
                      +
                      + +
                        +
                      • +
                        +

                        前端的进化?

                        +

                        + 在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。

                        +
                        +
                      • +
                      • + + + +
                        +

                        前端 UI

                        +

                        UI 设计(或称界面设计)是指对软件的人机交互、操作逻辑、界面美观的整体设计。 UI 设计分为实体 + UI和虚拟 UI,互联网常用的 UI 设计是虚拟 UI, UI即 User Interface (用户界面)的简称。

                        +
                        +
                      • +
                      • +
                        +

                        前端的进化?

                        +

                        + 在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。

                        +

                        + 前端 + 性别 + +

                        +
                        +
                      • +
                      • +
                        +

                        + 热点 + UI 设计 +

                        +

                        UI 设计(或称界面设计)是指对软件的人机交互、操作逻辑、界面美观的整体设计。 UI 设计分为实体 + UI和虚拟 UI,互联网常用的 UI 设计是虚拟 UI, UI即 User Interface (用户界面)的简称。

                        +
                        +
                      • +
                      • +
                        +

                        前端的进化?

                        +

                        + 在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。在前端技术的快速发展中找准你的定位,在思考与实践中沉淀。。

                        +
                        +
                      • +
                      +
                      + +
                      +
                      +
                      +
                      +
                      + + diff --git a/public/res/views/template/tips/404.html b/public/res/views/template/tips/404.html new file mode 100644 index 00000000..a0e4e967 --- /dev/null +++ b/public/res/views/template/tips/404.html @@ -0,0 +1,14 @@ +404 页面不存在 + +
                      +
                      + +
                      +

                      + 4 + 0 + 4 +

                      +
                      +
                      +
                      \ No newline at end of file diff --git a/public/res/views/template/tips/error.html b/public/res/views/template/tips/error.html new file mode 100644 index 00000000..9d790cfa --- /dev/null +++ b/public/res/views/template/tips/error.html @@ -0,0 +1,12 @@ +出错了 + +
                      +
                      + + +
                      + 好像出错了呢 +
                      + +
                      +
                      \ No newline at end of file diff --git a/public/res/views/template/tips/test.html b/public/res/views/template/tips/test.html new file mode 100644 index 00000000..9d790cfa --- /dev/null +++ b/public/res/views/template/tips/test.html @@ -0,0 +1,12 @@ +出错了 + +
                      +
                      + + +
                      + 好像出错了呢 +
                      + +
                      +
                      \ No newline at end of file diff --git a/public/res/views/template/user/forget.html b/public/res/views/template/user/forget.html new file mode 100644 index 00000000..1220a289 --- /dev/null +++ b/public/res/views/template/user/forget.html @@ -0,0 +1,43 @@ +忘记密码 + + + + + +
                      + 即将开放 +
                      + + \ No newline at end of file diff --git a/public/res/views/template/user/login.html b/public/res/views/template/user/login.html new file mode 100644 index 00000000..9f0b9eff --- /dev/null +++ b/public/res/views/template/user/login.html @@ -0,0 +1,70 @@ +登入页面 + +
                      +
                      + 主页 + 模板 + 登入 +
                      +
                      + +
                      +
                      +
                      说明:正式登入页面将在 beta3 开放
                      +
                      + +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      + layui 怎么念? +
                      +
                      +
                      +
                      + + + 忘记密码? + +
                      +
                      +
                      + +
                      +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/template/user/reg.html b/public/res/views/template/user/reg.html new file mode 100644 index 00000000..dcab72c3 --- /dev/null +++ b/public/res/views/template/user/reg.html @@ -0,0 +1,43 @@ +注册页面 + +
                      +
                      + 主页 + 模板 + 注册 +
                      +
                      + + + +
                      + 即将开放 +
                      + + \ No newline at end of file diff --git a/public/res/views/template/说明.txt b/public/res/views/template/说明.txt new file mode 100644 index 00000000..fac6420d --- /dev/null +++ b/public/res/views/template/说明.txt @@ -0,0 +1,2 @@ + +该目录存放【模板】的视图文件 \ No newline at end of file diff --git a/public/res/views/user/administrators/adminform.html b/public/res/views/user/administrators/adminform.html new file mode 100644 index 00000000..066d00ba --- /dev/null +++ b/public/res/views/user/administrators/adminform.html @@ -0,0 +1,75 @@ +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/user/administrators/list.html b/public/res/views/user/administrators/list.html new file mode 100644 index 00000000..8e252a99 --- /dev/null +++ b/public/res/views/user/administrators/list.html @@ -0,0 +1,162 @@ +后台管理员 + + + +
                      +
                      +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      +
                      +
                      + +
                      +
                      + + +
                      + +
                      + + +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/user/administrators/role.html b/public/res/views/user/administrators/role.html new file mode 100644 index 00000000..00c40290 --- /dev/null +++ b/public/res/views/user/administrators/role.html @@ -0,0 +1,128 @@ +角色管理 + + + +
                      +
                      +
                      +
                      +
                      + 角色筛选 +
                      +
                      + +
                      +
                      +
                      +
                      +
                      + + +
                      + +
                      + + +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/user/administrators/roleform.html b/public/res/views/user/administrators/roleform.html new file mode 100644 index 00000000..e60a80da --- /dev/null +++ b/public/res/views/user/administrators/roleform.html @@ -0,0 +1,64 @@ +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + + + + + + + + + + + + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + + diff --git a/public/res/views/user/forget.html b/public/res/views/user/forget.html new file mode 100644 index 00000000..51a9e2da --- /dev/null +++ b/public/res/views/user/forget.html @@ -0,0 +1,153 @@ + + + + + + \ No newline at end of file diff --git a/public/res/views/user/login.html b/public/res/views/user/login.html new file mode 100644 index 00000000..618bf464 --- /dev/null +++ b/public/res/views/user/login.html @@ -0,0 +1,127 @@ + + + + + + \ No newline at end of file diff --git a/public/res/views/user/reg.html b/public/res/views/user/reg.html new file mode 100644 index 00000000..9da873f2 --- /dev/null +++ b/public/res/views/user/reg.html @@ -0,0 +1,133 @@ + + + + + + \ No newline at end of file diff --git a/public/res/views/user/user/list.html b/public/res/views/user/user/list.html new file mode 100644 index 00000000..87c92ed9 --- /dev/null +++ b/public/res/views/user/user/list.html @@ -0,0 +1,150 @@ +网站用户 + + + +
                      +
                      +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      +
                      +
                      + +
                      +
                      + + +
                      + +
                      + + +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/user/user/userform.html b/public/res/views/user/user/userform.html new file mode 100644 index 00000000..6b00f162 --- /dev/null +++ b/public/res/views/user/user/userform.html @@ -0,0 +1,74 @@ +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      + +
                      +
                      + +
                      + +
                      +
                      +
                      + +
                      + +
                      +
                      +
                      + + \ No newline at end of file diff --git a/public/res/views/user/说明.txt b/public/res/views/user/说明.txt new file mode 100644 index 00000000..62ef2d91 --- /dev/null +++ b/public/res/views/user/说明.txt @@ -0,0 +1,2 @@ + +该目录存放【用户】的视图文件 \ No newline at end of file diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 00000000..eb053628 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/routes/web.go b/routes/web.go new file mode 100644 index 00000000..ba3610d1 --- /dev/null +++ b/routes/web.go @@ -0,0 +1,24 @@ +package routes + +import ( + "github.com/goravel/framework/contracts/http" + "github.com/goravel/framework/contracts/route" + "github.com/goravel/framework/facades" + + "panel/app/http/controllers" + "panel/app/http/middleware" +) + +func Web() { + facades.Route().Prefix("api/panel").Group(func(r route.Route) { + r.Prefix("user").Group(func(r route.Route) { + userController := controllers.NewUserController() + r.Post("login", userController.Login) + r.Middleware(middleware.Jwt()).Get("info", userController.Info) + }) + }) + + facades.Route().Fallback(func(ctx http.Context) { + ctx.Response().String(404, "not found") + }) +} diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100644 index 00000000..c96a04f0 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/storage/temp/.gitignore b/storage/temp/.gitignore new file mode 100644 index 00000000..c96a04f0 --- /dev/null +++ b/storage/temp/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file