commit 421cfb8cfab2bfb39fe5cb2330c7e3d3d9cddeb6 Author: JiXieShi Date: Thu Nov 14 22:55:43 2024 +0800 first commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..27f1721 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +* text=auto eol=lf +*.{cmd,[cC][mM][dD]} text eol=crlf +*.{bat,[bB][aA][tT]} text eol=crlf +*.ps1 text eol=crlf \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..97626ba --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/licserver.iml b/.idea/licserver.iml new file mode 100644 index 0000000..5e764c4 --- /dev/null +++ b/.idea/licserver.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..1f6da84 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + 用户定义 + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..ba64eab --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/api-docs.yaml b/api-docs.yaml new file mode 100644 index 0000000..db02768 --- /dev/null +++ b/api-docs.yaml @@ -0,0 +1,519 @@ +swagger: '2.0' +info: + title: 授权验证管理平台 API + version: '1.0.0' + description: 授权验证管理平台的所有 API 接口文档 +host: localhost:8080 +basePath: /api +schemes: + - http + - https + +securityDefinitions: + BearerAuth: + type: apiKey + name: Authorization + in: header + description: 'Bearer {token}' + +tags: + - name: 用户认证 + description: 用户登录和认证相关接口 + - name: 设备管理 + description: 设备型号和设备管理相关接口 + - name: 授权管理 + description: 授权码管理相关接口 + +paths: + /login: + post: + tags: + - 用户认证 + summary: 用户登录 + parameters: + - in: body + name: body + required: true + schema: + type: object + properties: + username: + type: string + description: 用户名 + password: + type: string + description: 密码 + captcha: + type: string + description: 验证码 + captchaId: + type: string + description: 验证码ID + responses: + 200: + description: 登录成功 + schema: + type: object + properties: + code: + type: integer + message: + type: string + token: + type: string + + /captcha: + get: + tags: + - 用户认证 + summary: 获取验证码 + responses: + 200: + description: 获取成功 + schema: + type: object + properties: + captchaId: + type: string + imageBase64: + type: string + + /devices/models: + get: + tags: + - 设备管理 + summary: 获取设备型号列表 + security: + - BearerAuth: [] + parameters: + - name: page + in: query + type: integer + - name: limit + in: query + type: integer + - name: model_name + in: query + type: string + - name: device_type + in: query + type: string + responses: + 200: + description: 获取成功 + schema: + type: object + properties: + code: + type: integer + count: + type: integer + data: + type: array + items: + $ref: '#/definitions/DeviceModel' + + post: + tags: + - 设备管理 + summary: 创建设备型号 + security: + - BearerAuth: [] + parameters: + - in: body + name: body + required: true + schema: + $ref: '#/definitions/DeviceModel' + responses: + 200: + description: 创建成功 + + /devices/registered: + get: + tags: + - 设备管理 + summary: 获取已注册设备列表 + security: + - BearerAuth: [] + parameters: + - name: page + in: query + type: integer + - name: limit + in: query + type: integer + - name: uid + in: query + type: string + - name: device_model + in: query + type: string + - name: status + in: query + type: string + responses: + 200: + description: 获取成功 + schema: + type: object + properties: + code: + type: integer + count: + type: integer + data: + type: array + items: + $ref: '#/definitions/Device' + + /devices/{uid}/license: + post: + tags: + - 设备管理 + summary: 绑定授权码 + security: + - BearerAuth: [] + parameters: + - name: uid + in: path + required: true + type: string + - in: body + name: body + required: true + schema: + type: object + properties: + license_code: + type: string + responses: + 200: + description: 绑定成功 + + delete: + tags: + - 设备管理 + summary: 解绑授权码 + security: + - BearerAuth: [] + parameters: + - name: uid + in: path + required: true + type: string + responses: + 200: + description: 解绑成功 + + /licenses: + get: + tags: + - 授权管理 + summary: 获取授权码列表 + security: + - BearerAuth: [] + parameters: + - name: page + in: query + type: integer + - name: limit + in: query + type: integer + - name: status + in: query + type: string + description: 授权码状态(unused/used/expired/revoked) + - name: license_type + in: query + type: string + description: 授权类型(time/count/permanent) + - name: batch_no + in: query + type: string + description: 批次号 + responses: + 200: + description: 获取成功 + schema: + type: object + properties: + code: + type: integer + count: + type: integer + data: + type: array + items: + $ref: '#/definitions/LicenseCode' + + post: + tags: + - 授权管理 + summary: 生成授权码 + security: + - BearerAuth: [] + parameters: + - in: body + name: body + required: true + schema: + type: object + properties: + license_type: + type: string + enum: [time, count, permanent] + description: 授权类型 + duration: + type: integer + description: 有效期(分钟) + max_uses: + type: integer + description: 最大使用次数 + count: + type: integer + description: 生成数量 + remark: + type: string + description: 备注说明 + responses: + 200: + description: 生成成功 + + /licenses/{id}/logs: + get: + tags: + - 授权管理 + summary: 获取授权码操作日志 + security: + - BearerAuth: [] + parameters: + - name: id + in: path + required: true + type: string + - name: page + in: query + type: integer + - name: limit + in: query + type: integer + - name: action + in: query + type: string + description: 操作类型(create/use/verify/revoke) + - name: status + in: query + type: string + description: 状态(success/failed) + responses: + 200: + description: 获取成功 + schema: + type: object + properties: + code: + type: integer + count: + type: integer + data: + type: array + items: + $ref: '#/definitions/LicenseLog' + + /licenses/{code}/revoke: + post: + tags: + - 授权管理 + summary: 撤销授权码 + security: + - BearerAuth: [] + parameters: + - name: code + in: path + required: true + type: string + responses: + 200: + description: 撤销成功 + + /licenses/batch/revoke: + post: + tags: + - 授权管理 + summary: 批量撤销授权码 + security: + - BearerAuth: [] + parameters: + - in: body + name: body + required: true + schema: + type: object + properties: + codes: + type: array + items: + type: string + description: 授权码列表 + responses: + 200: + description: 批量撤销成功 + + /devices/register: + post: + tags: + - 设备管理 + summary: 设备注册 + parameters: + - in: body + name: body + required: true + schema: + type: object + required: + - uid + - device_model + - license_code + properties: + uid: + type: string + description: 设备UID + device_model: + type: string + description: 设备型号 + license_code: + type: string + description: 授权码 + responses: + 200: + description: 注册成功 + schema: + type: object + properties: + code: + type: integer + message: + type: string + 400: + description: 注册失败 + schema: + type: object + properties: + error: + type: string + +definitions: + DeviceModel: + type: object + properties: + id: + type: integer + model_name: + type: string + device_type: + type: string + company: + type: string + remark: + type: string + device_count: + type: integer + status: + type: string + created_at: + type: string + format: date-time + + Device: + type: object + properties: + uid: + type: string + device_model: + type: string + device_type: + type: string + company: + type: string + register_time: + type: string + format: date-time + expire_time: + type: string + format: date-time + license_type: + type: string + license_code: + type: string + status: + type: string + start_count: + type: integer + last_active_at: + type: string + format: date-time + + LicenseCode: + type: object + properties: + id: + type: integer + code: + type: string + license_type: + type: string + description: 授权类型(time/count/permanent) + duration: + type: integer + description: 有效期(分钟) + max_uses: + type: integer + description: 最大使用次数 + used_count: + type: integer + description: 已使用次数 + status: + type: string + description: 状态(unused/used/expired/revoked) + used_by: + type: string + description: 使用设备UID + used_at: + type: string + format: date-time + created_by: + type: integer + batch_no: + type: string + remark: + type: string + created_at: + type: string + format: date-time + updated_at: + type: string + format: date-time + + LicenseLog: + type: object + properties: + id: + type: integer + license_id: + type: integer + device_uid: + type: string + action: + type: string + description: 操作类型(create/use/verify/revoke) + ip: + type: string + status: + type: string + description: 状态(success/failed) + message: + type: string + created_at: + type: string + format: date-time \ No newline at end of file diff --git a/cmd/main.go b/cmd/main.go new file mode 100644 index 0000000..a7a1200 --- /dev/null +++ b/cmd/main.go @@ -0,0 +1,112 @@ +package main + +import ( + "fmt" + "licserver/internal/api" + "licserver/internal/model" + "licserver/internal/service" + "licserver/internal/utils" + "log" + "os" + + "golang.org/x/crypto/bcrypt" + "gorm.io/gorm" +) + +// 初始化管理员账号 +func initAdminUser(db *gorm.DB) error { + var count int64 + db.Model(&model.User{}).Where("role = ?", "admin").Count(&count) + + // 如果没有管理员账号,创建默认管理员 + if count == 0 { + hashedPassword, err := bcrypt.GenerateFromPassword([]byte("admin"), bcrypt.DefaultCost) + if err != nil { + return err + } + + admin := model.User{ + Username: "admin", + Password: string(hashedPassword), + Email: "admin@example.com", + Role: "admin", + } + + if err := db.Create(&admin).Error; err != nil { + return err + } + log.Println("已创建默认管理员账号:admin/admin") + } + return nil +} + +func main() { + // 加载配置 + config, err := utils.LoadConfig() + if err != nil { + log.Fatalf("无法加载配置: %v", err) + } + + // 初始化数据库 + db, err := utils.InitDB(&config.Database) + if err != nil { + log.Fatalf("无法初始化数据库: %v", err) + } + + // 初始化管理员账号 + if err := initAdminUser(db); err != nil { + log.Fatalf("初始化管理员账号失败: %v", err) + } + + // 初始化服务 + licenseService := service.NewLicenseService(db) + userService := service.NewUserService(db, config) + deviceService := service.NewDeviceService(db, licenseService) + monitorService := service.NewMonitorService(db) + uploadService := service.NewUploadService(db, config) + siteService := service.NewSiteService(config) + tokenService := service.NewTokenService(db) + + // 初始化处理器 + userHandler := api.NewUserHandler(userService) + deviceHandler := api.NewDeviceHandler(deviceService) + monitorHandler := api.NewMonitorHandler(monitorService) + uploadHandler := api.NewUploadHandler(uploadService) + siteHandler := api.NewSiteHandler(siteService) + tokenHandler := api.NewTokenHandler(tokenService) + licenseHandler := api.NewLicenseHandler(licenseService) + + // 设置路由 + router := api.SetupRouter( + userHandler, + deviceHandler, + monitorHandler, + config, + uploadHandler, + siteHandler, + tokenHandler, + licenseHandler, + ) + + // 创建必要的目录 + dirs := []string{ + "data", + "uploads", + "uploads/site", + "static/uploads", + "static/uploads/site", + "web/static/lib", + } + for _, dir := range dirs { + if err := os.MkdirAll(dir, 0755); err != nil { + log.Fatalf("创建目录失败: %v", err) + } + } + + // 启动服务器 + addr := fmt.Sprintf(":%s", config.Server.Port) + log.Printf("服务器启动在 %s", addr) + if err := router.Run(addr); err != nil { + log.Fatalf("服务器启动失败: %v", err) + } +} diff --git a/config/config.yaml b/config/config.yaml new file mode 100644 index 0000000..b0484a1 --- /dev/null +++ b/config/config.yaml @@ -0,0 +1,29 @@ +server: + port: 8081 + mode: debug # release/debug + +database: + type: sqlite3 + path: ./data/license.db + +jwt: + secret: your-secret-key + expire: 24h # token过期时间 + +email: + host: smtp.example.com + port: 587 + username: your-email@example.com + password: your-password + +upload: + path: ./uploads + +site: + title: "授权验证管理平台" + description: "专业的软件授权和设备管理平台" + base_url: "http://localhost:8080" + icp: "京ICP备XXXXXXXX号-1" + copyright: "© 2024 Your Company Name. All rights reserved." + logo: "/static/images/logo.png" + favicon: "/static/images/favicon.ico" diff --git a/create-shortcut.ps1 b/create-shortcut.ps1 new file mode 100644 index 0000000..bccc506 --- /dev/null +++ b/create-shortcut.ps1 @@ -0,0 +1,7 @@ +$WshShell = New-Object -comObject WScript.Shell +$Shortcut = $WshShell.CreateShortcut("$env:USERPROFILE\Desktop\启动授权验证平台.lnk") +$Shortcut.TargetPath = "powershell.exe" +$Shortcut.Arguments = "-ExecutionPolicy Bypass -NoProfile -File `"$PWD\start.ps1`"" +$Shortcut.WorkingDirectory = $PWD +$Shortcut.IconLocation = "$PWD\licserver.exe,0" +$Shortcut.Save() \ No newline at end of file diff --git a/data/license.db b/data/license.db new file mode 100644 index 0000000..2153889 Binary files /dev/null and b/data/license.db differ diff --git a/examples/client.go b/examples/client.go new file mode 100644 index 0000000..618e0d8 --- /dev/null +++ b/examples/client.go @@ -0,0 +1,74 @@ +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" +) + +const ( + ServerURL = "http://localhost:8080" + DeviceUID = "test-device-001" +) + +func main() { + // 1. 使用授权码注册设备 + if err := registerDevice(); err != nil { + fmt.Printf("设备注册失败: %v\n", err) + return + } + + // 2. 验证设备状态 + if err := validateDevice(); err != nil { + fmt.Printf("设备验证失败: %v\n", err) + return + } + + fmt.Println("设备注册和验证成功") +} + +func registerDevice() error { + data := map[string]interface{}{ + "uid": DeviceUID, + "device_type": "software", + "device_model": "test-model", + "company": "test-company", + "license_code": "your-license-code", // 替换为实际的授权码 + } + + jsonData, err := json.Marshal(data) + if err != nil { + return err + } + + resp, err := http.Post(ServerURL+"/api/devices/register", + "application/json", bytes.NewBuffer(jsonData)) + if err != nil { + return err + } + defer resp.Body.Close() + + body, _ := ioutil.ReadAll(resp.Body) + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("注册失败: %s", string(body)) + } + + return nil +} + +func validateDevice() error { + resp, err := http.Get(ServerURL + "/api/devices/validate/" + DeviceUID) + if err != nil { + return err + } + defer resp.Body.Close() + + body, _ := ioutil.ReadAll(resp.Body) + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("验证失败: %s", string(body)) + } + + return nil +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..7c7c030 --- /dev/null +++ b/go.mod @@ -0,0 +1,74 @@ +module licserver + +go 1.22.0 + +toolchain go1.23.0 + +require ( + github.com/gin-gonic/gin v1.9.1 + github.com/golang-jwt/jwt/v5 v5.2.1 + github.com/google/uuid v1.4.0 + github.com/mojocn/base64Captcha v1.3.5 + github.com/shirou/gopsutil/v3 v3.24.1 + github.com/spf13/viper v1.19.0 + github.com/stretchr/testify v1.9.0 + golang.org/x/crypto v0.29.0 + gorm.io/driver/sqlite v1.5.6 + gorm.io/gorm v1.25.12 +) + +require ( + github.com/bytedance/sonic v1.12.4 // indirect + github.com/bytedance/sonic/loader v0.2.1 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/fsnotify/fsnotify v1.8.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.6 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-ole/go-ole v1.2.6 // 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.22.1 // indirect + github.com/goccy/go-json v0.10.3 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/cpuid/v2 v2.2.9 // indirect + github.com/leodido/go-urn v1.4.0 // indirect + github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-sqlite3 v1.14.24 // indirect + github.com/mitchellh/mapstructure v1.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/pelletier/go-toml/v2 v2.2.3 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/sagikazarmark/locafero v0.6.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/shoenig/go-m1cpu v0.1.6 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.7.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/tklauser/go-sysconf v0.3.12 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.12 // indirect + github.com/yusufpapurcu/wmi v1.2.3 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/arch v0.12.0 // indirect + golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect + golang.org/x/image v0.0.0-20190501045829-6d32002ffd75 // indirect + golang.org/x/net v0.31.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/text v0.20.0 // indirect + google.golang.org/protobuf v1.35.1 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..bb179c9 --- /dev/null +++ b/go.sum @@ -0,0 +1,172 @@ +github.com/bytedance/sonic v1.12.4 h1:9Csb3c9ZJhfUWeMtpCDCq6BUoH5ogfDFLUgQ/jG+R0k= +github.com/bytedance/sonic v1.12.4/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.1 h1:1GgorWTqf12TA8mma4DDSbaQigE2wOgQo7iCjjJv3+E= +github.com/bytedance/sonic/loader v0.2.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= +github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= +github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +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.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.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= +github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +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/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.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +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/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.9 h1:66ze0taIn2H33fBvCkXuv9BmCwDfafmiIVpKV9kKGuY= +github.com/klauspost/cpuid/v2 v2.2.9/go.mod h1:rqkxqrZ1EhYM9G+hXH7YdowN5R5RGN6NK4QwQ3WMXF8= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= +github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM= +github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +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/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 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mojocn/base64Captcha v1.3.5 h1:Qeilr7Ta6eDtG4S+tQuZ5+hO+QHbiGAJdi4PfoagaA0= +github.com/mojocn/base64Captcha v1.3.5/go.mod h1:/tTTXn4WTpX9CfrmipqRytCpJ27Uw3G6I7NcP2WwcmY= +github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= +github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/sagikazarmark/locafero v0.6.0 h1:ON7AQg37yzcRPU69mt7gwhFEBwxI6P9T4Qu3N51bwOk= +github.com/sagikazarmark/locafero v0.6.0/go.mod h1:77OmuIc6VTraTXKXIs/uvUxKGUXjE1GbemJYHqdNjX0= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/shirou/gopsutil/v3 v3.24.1 h1:R3t6ondCEvmARp3wxODhXMTLC/klMa87h2PHUw5m7QI= +github.com/shirou/gopsutil/v3 v3.24.1/go.mod h1:UU7a2MSBQa+kW1uuDq8DeEBS8kmrnQwsv2b5O513rwU= +github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= +github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= +github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= +github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= +github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +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.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= +github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= +github.com/stretchr/objx v0.1.0/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/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +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.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= +github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +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/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= +github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= +github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +golang.org/x/arch v0.12.0 h1:UsYJhbzPYGsT0HbEdmYcqtCv8UNGvnaL561NnIUvaKg= +golang.org/x/arch v0.12.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= +golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/image v0.0.0-20190501045829-6d32002ffd75 h1:TbGuee8sSq15Iguxu4deQ7+Bqq/d2rsQejGcEtADAMQ= +golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= +golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +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.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +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/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/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/sqlite v1.5.6 h1:fO/X46qn5NUEEOZtnjJRWRzZMe8nqJiQ9E+0hi+hKQE= +gorm.io/driver/sqlite v1.5.6/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4= +gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= +gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= diff --git a/internal/api/dashboard.go b/internal/api/dashboard.go new file mode 100644 index 0000000..29c1eff --- /dev/null +++ b/internal/api/dashboard.go @@ -0,0 +1,45 @@ +package api + +import ( + "licserver/internal/model" + "net/http" + "time" + + "github.com/gin-gonic/gin" + "gorm.io/gorm" +) + +type DashboardHandler struct { + db *gorm.DB +} + +func NewDashboardHandler(db *gorm.DB) *DashboardHandler { + return &DashboardHandler{db: db} +} + +func (h *DashboardHandler) GetStats(c *gin.Context) { + var stats struct { + TotalDevices int64 `json:"total_devices"` + TotalLicenses int64 `json:"total_licenses"` + TodayNew int64 `json:"today_new"` + OnlineDevices int64 `json:"online_devices"` + } + + // 获取设备总数 + h.db.Model(&model.Device{}).Count(&stats.TotalDevices) + + // 获取授权码总数 + h.db.Model(&model.LicenseCode{}).Count(&stats.TotalLicenses) + + // 获取今日新增设备数 + today := time.Now().Format("2006-01-02") + h.db.Model(&model.Device{}).Where("DATE(created_at) = ?", today).Count(&stats.TodayNew) + + // 获取在线设备数(最近30分钟内有活动的设备) + thirtyMinutesAgo := time.Now().Add(-30 * time.Minute) + h.db.Model(&model.Device{}). + Where("last_active_at > ?", thirtyMinutesAgo). + Count(&stats.OnlineDevices) + + c.JSON(http.StatusOK, stats) +} diff --git a/internal/api/device.go b/internal/api/device.go new file mode 100644 index 0000000..e5dc4fa --- /dev/null +++ b/internal/api/device.go @@ -0,0 +1,434 @@ +package api + +import ( + "fmt" + "net/http" + + "strconv" + + "licserver/internal/model" + "licserver/internal/service" + + "github.com/gin-gonic/gin" +) + +type DeviceHandler struct { + deviceService *service.DeviceService +} + +func NewDeviceHandler(deviceService *service.DeviceService) *DeviceHandler { + + return &DeviceHandler{deviceService: deviceService} + +} + +func (h *DeviceHandler) CreateDevice(c *gin.Context) { + + var input service.DeviceCreateInput + + if err := c.ShouldBindJSON(&input); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + if err := h.deviceService.CreateDevice(&input); err != nil { + + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, gin.H{"message": "设备创建成功"}) + +} + +func (h *DeviceHandler) GetDevices(c *gin.Context) { + + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + + pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10")) + + params := &service.DeviceQueryParams{ + + UID: c.Query("uid"), + + DeviceType: c.Query("deviceType"), + + Company: c.Query("company"), + + LicenseType: c.Query("licenseType"), + + Status: c.Query("status"), + + Page: page, + + PageSize: pageSize, + } + + devices, total, err := h.deviceService.GetDevices(params) + + if err != nil { + + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "获取设备列表成功", + "count": total, + "data": devices, + }) + +} + +func (h *DeviceHandler) UpdateStartCount(c *gin.Context) { + + uid := c.Param("uid") + + if err := h.deviceService.UpdateStartCount(uid); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, gin.H{"message": "启动次数更新成功"}) + +} + +func (h *DeviceHandler) UpdateDevice(c *gin.Context) { + + uid := c.Param("uid") + + var updates map[string]interface{} + + if err := c.ShouldBindJSON(&updates); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + if err := h.deviceService.UpdateDevice(uid, updates); err != nil { + + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, gin.H{"message": "设备更新成功"}) + +} + +func (h *DeviceHandler) DeleteDevice(c *gin.Context) { + + uid := c.Param("uid") + + if err := h.deviceService.DeleteDevice(uid); err != nil { + + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, gin.H{"message": "设备删除成功"}) + +} + +func (h *DeviceHandler) RegisterDevice(c *gin.Context) { + var input service.DeviceRegisterInput + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + if err := h.deviceService.RegisterDevice(&input, c.ClientIP()); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + status := "未激活" + if input.LicenseCode != "" { + status = "已激活" + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": fmt.Sprintf("设备注册成功,当前状态:%s", status), + }) +} + +func (h *DeviceHandler) ValidateDevice(c *gin.Context) { + + uid := c.Param("uid") + + if err := h.deviceService.ValidateDevice(uid); err != nil { + + c.JSON(http.StatusUnauthorized, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, gin.H{"message": "设备验证通过"}) + +} + +func (h *DeviceHandler) BindLicense(c *gin.Context) { + uid := c.Param("uid") + var input struct { + LicenseCode string `json:"license_code" binding:"required"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + if err := h.deviceService.BindLicense(uid, input.LicenseCode); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "授权码绑定成功", + }) +} + +func (h *DeviceHandler) UnbindLicense(c *gin.Context) { + uid := c.Param("uid") + + if err := h.deviceService.UnbindLicense(uid); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "授权码解绑成功", + }) +} + +func (h *DeviceHandler) GetLicenseInfo(c *gin.Context) { + + deviceUID := c.Param("uid") + + device, err := h.deviceService.GetLicenseInfo(deviceUID) + + if err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, device) + +} + +func (h *DeviceHandler) CheckLicenseStatus(c *gin.Context) { + + deviceUID := c.Param("uid") + + status, err := h.deviceService.CheckLicenseStatus(deviceUID) + + if err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, gin.H{ + + "status": status, + }) + +} + +func (h *DeviceHandler) CheckUpdate(c *gin.Context) { + deviceUID := c.Param("uid") + currentVersion := c.Query("version") + + update, err := h.deviceService.CheckUpdate(deviceUID, currentVersion) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, update) +} + +func (h *DeviceHandler) CreateDeviceModel(c *gin.Context) { + var model model.DeviceModel + if err := c.ShouldBindJSON(&model); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + model.CreatedBy = c.GetUint("userID") + model.Status = "active" + + if err := h.deviceService.CreateDeviceModel(&model); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "设备型号创建成功", + "data": model, + }) +} + +func (h *DeviceHandler) GetDeviceModels(c *gin.Context) { + modelName := c.Query("model_name") + deviceType := c.Query("device_type") + company := c.Query("company") + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + pageSize, _ := strconv.Atoi(c.DefaultQuery("limit", "10")) + + models, total, err := h.deviceService.GetDeviceModels(modelName, deviceType, company, page, pageSize) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "msg": "", + "count": total, + "data": models, + }) +} + +func (h *DeviceHandler) UpdateDeviceModel(c *gin.Context) { + id, err := strconv.ParseUint(c.Param("id"), 10, 32) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "无效的ID"}) + return + } + + var model model.DeviceModel + if err := c.ShouldBindJSON(&model); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + if err := h.deviceService.UpdateDeviceModel(uint(id), &model); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "设备型号更新成功", + }) +} + +func (h *DeviceHandler) DeleteDeviceModel(c *gin.Context) { + id, err := strconv.ParseUint(c.Param("id"), 10, 32) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "无效的ID"}) + return + } + + if err := h.deviceService.DeleteDeviceModel(uint(id)); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "设备型号删除成功", + }) +} + +func (h *DeviceHandler) BatchDeleteDeviceModels(c *gin.Context) { + var input struct { + IDs []uint `json:"ids" binding:"required"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + if err := h.deviceService.BatchDeleteDeviceModels(input.IDs); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "设备型号批量删除成功", + }) +} + +func (h *DeviceHandler) GetRegisteredDevices(c *gin.Context) { + uid := c.Query("uid") + deviceModel := c.Query("device_model") + status := c.Query("status") + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + pageSize, _ := strconv.Atoi(c.DefaultQuery("limit", "10")) + + devices, total, err := h.deviceService.GetRegisteredDevices(uid, deviceModel, status, page, pageSize) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "msg": "", + "count": total, + "data": devices, + }) +} + +func (h *DeviceHandler) GetDeviceLogs(c *gin.Context) { + uid := c.Param("uid") + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + pageSize, _ := strconv.Atoi(c.DefaultQuery("limit", "10")) + + logs, total, err := h.deviceService.GetDeviceLogs(uid, page, pageSize) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "msg": "", + "count": total, + "data": logs, + }) +} + +// GetDashboardStats 获取仪表盘统计数据 +func (h *DeviceHandler) GetDashboardStats(c *gin.Context) { + stats, err := h.deviceService.GetDashboardStats() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "data": stats, + }) +} diff --git a/internal/api/license.go b/internal/api/license.go new file mode 100644 index 0000000..8057f49 --- /dev/null +++ b/internal/api/license.go @@ -0,0 +1,169 @@ +package api + +import ( + "fmt" + "licserver/internal/service" + "net/http" + "strconv" + "time" + + "github.com/gin-gonic/gin" +) + +type LicenseHandler struct { + licenseService *service.LicenseService +} + +func NewLicenseHandler(licenseService *service.LicenseService) *LicenseHandler { + return &LicenseHandler{licenseService: licenseService} +} + +// 创建授权码 +func (h *LicenseHandler) CreateLicenses(c *gin.Context) { + var input service.LicenseCreateInput + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + userID := c.GetUint("userID") + licenses, err := h.licenseService.CreateLicenses(&input, userID) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "授权码创建成功", + "data": licenses, + }) +} + +// 使用授权码 +func (h *LicenseHandler) UseLicense(c *gin.Context) { + var input struct { + Code string `json:"code" binding:"required"` + DeviceUID string `json:"device_uid" binding:"required"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + license, err := h.licenseService.UseLicense(input.Code, input.DeviceUID, c.ClientIP()) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "授权码使用成功", + "data": license, + }) +} + +// 获取授权码列表 +func (h *LicenseHandler) GetLicenses(c *gin.Context) { + status := c.Query("status") + licenseType := c.Query("license_type") + batchNo := c.Query("batch_no") + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + pageSize, _ := strconv.Atoi(c.DefaultQuery("limit", "10")) + + licenses, total, err := h.licenseService.GetLicenses(status, licenseType, batchNo, page, pageSize) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + // 确保返回格式符合 layui table 的要求 + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "msg": "", + "count": total, + "data": licenses, + }) +} + +// 获取授权码使用日志 +func (h *LicenseHandler) GetLicenseLogs(c *gin.Context) { + licenseID, err := strconv.ParseUint(c.Param("id"), 10, 32) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "无效的授权码ID"}) + return + } + + // 检查是否为导出请求 + if c.Query("export") == "1" { + data, err := h.licenseService.ExportLogs(uint(licenseID)) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + // 设置响应头 + filename := fmt.Sprintf("license_logs_%d_%s.csv", licenseID, time.Now().Format("20060102150405")) + c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=%s", filename)) + c.Data(http.StatusOK, "text/csv", data) + return + } + + // 常规日志查询 + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10")) + + logs, total, err := h.licenseService.GetLicenseLogs(uint(licenseID), page, pageSize) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "获取授权码使用日志成功", + "count": total, + "data": logs, + }) +} + +// 添加撤销授权码的处理方法 +func (h *LicenseHandler) RevokeLicense(c *gin.Context) { + code := c.Param("code") + userID := c.GetUint("userID") + + if err := h.licenseService.RevokeLicense(code, userID); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "授权码撤销成功", + }) +} + +// 添加批量撤销处理方法 +func (h *LicenseHandler) RevokeLicenses(c *gin.Context) { + var input struct { + Codes []string `json:"codes" binding:"required"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + userID := c.GetUint("userID") + if err := h.licenseService.RevokeLicenses(input.Codes, userID); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "授权码批量撤销成功", + }) +} diff --git a/internal/api/monitor.go b/internal/api/monitor.go new file mode 100644 index 0000000..1905a88 --- /dev/null +++ b/internal/api/monitor.go @@ -0,0 +1,26 @@ +package api + +import ( + "licserver/internal/service" + "net/http" + + "github.com/gin-gonic/gin" +) + +type MonitorHandler struct { + monitorService *service.MonitorService +} + +func NewMonitorHandler(monitorService *service.MonitorService) *MonitorHandler { + return &MonitorHandler{monitorService: monitorService} +} + +func (h *MonitorHandler) GetSystemStatus(c *gin.Context) { + status, err := h.monitorService.GetSystemStatus() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, status) +} diff --git a/internal/api/router.go b/internal/api/router.go new file mode 100644 index 0000000..b1acce8 --- /dev/null +++ b/internal/api/router.go @@ -0,0 +1,121 @@ +package api + +import ( + "licserver/internal/middleware" + "licserver/internal/utils" + + "github.com/gin-gonic/gin" +) + +func SetupRouter( + userHandler *UserHandler, + deviceHandler *DeviceHandler, + monitorHandler *MonitorHandler, + config *utils.Config, + uploadHandler *UploadHandler, + siteHandler *SiteHandler, + tokenHandler *TokenHandler, + licenseHandler *LicenseHandler, +) *gin.Engine { + r := gin.Default() + + // 添加错误处理中间件 + r.Use(middleware.ErrorHandler()) + + // 静态文件服务 + r.Static("/static", "./web/static") + + // 首页和登录页面 + r.StaticFile("/", "./web/templates/index.html") + r.StaticFile("/login", "./web/templates/login.html") + + // Admin页面路由组 + admin := r.Group("/admin") + admin.Use(middleware.JWTAuth(&config.JWT)) + { + // 使用StaticFile处理包含Layui模板的页面 + admin.StaticFile("/dashboard", "./web/templates/admin/dashboard.html") + admin.StaticFile("/devices", "./web/templates/admin/devices.html") + admin.StaticFile("/device-files", "./web/templates/admin/device-files.html") + admin.StaticFile("/device-license", "./web/templates/admin/device-license.html") + admin.StaticFile("/licenses", "./web/templates/admin/licenses.html") + admin.StaticFile("/license-logs", "./web/templates/admin/license-logs.html") + admin.StaticFile("/tokens", "./web/templates/admin/tokens.html") + admin.StaticFile("/token-logs", "./web/templates/admin/token-logs.html") + admin.StaticFile("/monitor", "./web/templates/admin/monitor.html") + admin.StaticFile("/site-settings", "./web/templates/admin/site-settings.html") + admin.StaticFile("/users", "./web/templates/admin/users.html") + admin.StaticFile("/user-edit", "./web/templates/admin/user-edit.html") + admin.StaticFile("/change-password", "./web/templates/admin/change-password.html") + } + + // API路由 + api := r.Group("/api") + { + // 公开API + api.GET("/captcha", userHandler.GetCaptcha) + api.POST("/captcha/verify", userHandler.VerifyCaptcha) + api.POST("/login", userHandler.Login) + api.POST("/register", userHandler.Register) + api.POST("/reset-password", userHandler.ResetPassword) + api.POST("/reset-password/confirm", userHandler.ResetPasswordWithToken) + api.POST("/captcha/register", userHandler.SendRegisterCaptcha) + api.POST("/captcha/reset-password", userHandler.SendResetPasswordCaptcha) + api.POST("/validate-token", tokenHandler.ValidateToken) + + // 需要认证的API + authorized := api.Group("") + authorized.Use(middleware.JWTAuth(&config.JWT)) + { + // 设备型号管理 + authorized.POST("/devices/models", middleware.AdminRequired(), deviceHandler.CreateDeviceModel) + authorized.GET("/devices/models", deviceHandler.GetDeviceModels) + authorized.PUT("/devices/models/:id", middleware.AdminRequired(), deviceHandler.UpdateDeviceModel) + authorized.DELETE("/devices/models/:id", middleware.AdminRequired(), deviceHandler.DeleteDeviceModel) + authorized.POST("/devices/models/batch", middleware.AdminRequired(), deviceHandler.BatchDeleteDeviceModels) + + // 设备管理 + authorized.POST("/devices/register", deviceHandler.RegisterDevice) + authorized.GET("/devices/registered", deviceHandler.GetRegisteredDevices) + authorized.POST("/devices/:uid/license", middleware.AdminRequired(), deviceHandler.BindLicense) + authorized.DELETE("/devices/:uid/license", middleware.AdminRequired(), deviceHandler.UnbindLicense) + authorized.GET("/devices/:uid/logs", deviceHandler.GetDeviceLogs) + + // 其他API路由... + // 用户管理 + authorized.GET("/users", middleware.AdminRequired(), userHandler.GetUsers) + authorized.POST("/users", middleware.AdminRequired(), userHandler.CreateUser) + authorized.GET("/users/:id", middleware.AdminRequired(), userHandler.GetUserInfo) + authorized.PUT("/users/:id", middleware.AdminRequired(), userHandler.UpdateUser) + authorized.DELETE("/users/:id", middleware.AdminRequired(), userHandler.DeleteUser) + authorized.GET("/users/profile", userHandler.GetProfile) + authorized.PUT("/users/profile", userHandler.UpdateProfile) + authorized.POST("/users/change-password", userHandler.ChangePassword) + + // 系统监控 + authorized.GET("/monitor/status", middleware.AdminRequired(), monitorHandler.GetSystemStatus) + + // 站点设置 + authorized.GET("/site/settings", middleware.AdminRequired(), siteHandler.GetSettings) + authorized.PUT("/site/settings", middleware.AdminRequired(), siteHandler.UpdateSettings) + + // Token管理 + authorized.POST("/tokens", middleware.AdminRequired(), tokenHandler.CreateToken) + authorized.GET("/tokens", tokenHandler.GetTokens) + authorized.GET("/tokens/:id/logs", tokenHandler.GetTokenLogs) + authorized.DELETE("/tokens/:token", middleware.AdminRequired(), tokenHandler.RevokeToken) + + // 授权码管理 + authorized.POST("/licenses", middleware.AdminRequired(), licenseHandler.CreateLicenses) + authorized.GET("/licenses", licenseHandler.GetLicenses) + authorized.GET("/licenses/:id/logs", licenseHandler.GetLicenseLogs) + authorized.POST("/licenses/use", licenseHandler.UseLicense) + + // 仪表盘统计 + authorized.GET("/dashboard/stats", deviceHandler.GetDashboardStats) + } + } + + return r + +} diff --git a/internal/api/site.go b/internal/api/site.go new file mode 100644 index 0000000..710cf4f --- /dev/null +++ b/internal/api/site.go @@ -0,0 +1,86 @@ +package api + +import ( + "licserver/internal/service" + "licserver/internal/utils" + "net/http" + + "github.com/gin-gonic/gin" +) + +type SiteHandler struct { + siteService *service.SiteService +} + +func NewSiteHandler(siteService *service.SiteService) *SiteHandler { + return &SiteHandler{siteService: siteService} +} + +func (h *SiteHandler) GetSettings(c *gin.Context) { + settings := h.siteService.GetSettings() + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "data": settings, + "title": settings.Title, + "description": settings.Description, + "base_url": settings.BaseURL, + "icp": settings.ICP, + "copyright": settings.Copyright, + "logo": settings.Logo, + "favicon": settings.Favicon, + }) +} + +func (h *SiteHandler) UpdateSettings(c *gin.Context) { + var settings utils.SiteConfig + if err := c.ShouldBindJSON(&settings); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + if err := h.siteService.ValidateSettings(settings); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + if err := h.siteService.UpdateSettings(settings); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "站点设置更新成功", + "data": settings, + }) +} + +func (h *SiteHandler) BackupSettings(c *gin.Context) { + settings := h.siteService.GetSettings() + c.Header("Content-Disposition", "attachment; filename=site_settings.json") + c.JSON(http.StatusOK, settings) +} + +func (h *SiteHandler) RestoreSettings(c *gin.Context) { + var settings utils.SiteConfig + if err := c.ShouldBindJSON(&settings); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + if err := h.siteService.ValidateSettings(settings); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + if err := h.siteService.UpdateSettings(settings); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "站点设置恢复成功", + "data": settings, + }) +} diff --git a/internal/api/token.go b/internal/api/token.go new file mode 100644 index 0000000..48e5548 --- /dev/null +++ b/internal/api/token.go @@ -0,0 +1,121 @@ +package api + +import ( + "licserver/internal/service" + "net/http" + "strconv" + "time" + + "github.com/gin-gonic/gin" +) + +type TokenHandler struct { + tokenService *service.TokenService +} + +func NewTokenHandler(tokenService *service.TokenService) *TokenHandler { + return &TokenHandler{tokenService: tokenService} +} + +func (h *TokenHandler) CreateToken(c *gin.Context) { + var input struct { + DeviceUID string `json:"device_uid" binding:"required"` + TokenType string `json:"token_type" binding:"required,oneof=api device"` + ExpireDays int `json:"expire_days" binding:"required,min=1"` + IPList []string `json:"ip_list"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + expireTime := time.Now().AddDate(0, 0, input.ExpireDays) + userID := c.GetUint("userID") + + token, err := h.tokenService.CreateToken( + input.DeviceUID, + input.TokenType, + expireTime, + input.IPList, + userID, + ) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, token) +} + +func (h *TokenHandler) ValidateToken(c *gin.Context) { + token := c.GetHeader("X-Access-Token") + if token == "" { + c.JSON(http.StatusUnauthorized, gin.H{"error": "未提供访问令牌"}) + return + } + + clientIP := c.ClientIP() + accessToken, err := h.tokenService.ValidateToken(token, clientIP) + if err != nil { + c.JSON(http.StatusUnauthorized, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, accessToken) +} + +func (h *TokenHandler) RevokeToken(c *gin.Context) { + token := c.Param("token") + userID := c.GetUint("userID") + + if err := h.tokenService.RevokeToken(token, userID); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "令牌已撤销"}) +} + +func (h *TokenHandler) GetTokens(c *gin.Context) { + deviceUID := c.Query("device_uid") + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + pageSize, _ := strconv.Atoi(c.DefaultQuery("limit", "10")) + + tokens, total, err := h.tokenService.GetTokens(deviceUID, page, pageSize) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "获取令牌列表成功", + "count": total, + "data": tokens, + }) +} + +func (h *TokenHandler) GetTokenLogs(c *gin.Context) { + tokenID, err := strconv.ParseUint(c.Param("id"), 10, 32) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "无效的令牌ID"}) + return + } + + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + pageSize, _ := strconv.Atoi(c.DefaultQuery("limit", "10")) + + logs, total, err := h.tokenService.GetTokenLogs(uint(tokenID), page, pageSize) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "message": "获取令牌使用日志成功", + "count": total, + "data": logs, + }) +} diff --git a/internal/api/upload.go b/internal/api/upload.go new file mode 100644 index 0000000..743e126 --- /dev/null +++ b/internal/api/upload.go @@ -0,0 +1,213 @@ +package api + +import ( + "fmt" + "licserver/internal/service" + "net/http" + "os" + "path/filepath" + "strconv" + "strings" + "time" + + "github.com/gin-gonic/gin" +) + +type UploadHandler struct { + uploadService *service.UploadService +} + +func NewUploadHandler(uploadService *service.UploadService) *UploadHandler { + return &UploadHandler{uploadService: uploadService} +} + +func (h *UploadHandler) UploadFile(c *gin.Context) { + file, err := c.FormFile("file") + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "未找到上传文件"}) + return + } + + deviceUID := c.PostForm("device_uid") + description := c.PostForm("description") + userID := c.GetUint("userID") + + upload, err := h.uploadService.UploadFile(file, userID, deviceUID, description) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, upload) +} + +func (h *UploadHandler) DownloadFile(c *gin.Context) { + id, err := strconv.ParseUint(c.Param("id"), 10, 32) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "无效的文件ID"}) + return + } + + file, err := h.uploadService.DownloadFile(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "文件不存在"}) + return + } + + c.FileAttachment(file.FilePath, file.FileName) +} + +func (h *UploadHandler) DeleteFile(c *gin.Context) { + id, err := strconv.ParseUint(c.Param("id"), 10, 32) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "无效的文件ID"}) + return + } + + userID := c.GetUint("userID") + if err := h.uploadService.DeleteFile(uint(id), userID); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "文件删除成功"}) +} + +func (h *UploadHandler) GetDeviceFiles(c *gin.Context) { + deviceUID := c.Param("uid") + files, err := h.uploadService.GetDeviceFiles(deviceUID) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, files) +} + +func (h *UploadHandler) UploadChunk(c *gin.Context) { + file, err := c.FormFile("chunk") + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "未找到上传文件"}) + return + } + + fileHash := c.PostForm("fileHash") + if fileHash == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "未提供文件哈希"}) + return + } + + chunkNumber, err := strconv.Atoi(c.PostForm("chunkNumber")) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "无效的分片序号"}) + return + } + + totalChunks, err := strconv.Atoi(c.PostForm("totalChunks")) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "无效的总分片数"}) + return + } + + totalSize, err := strconv.ParseInt(c.PostForm("totalSize"), 10, 64) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "无效的文件大小"}) + return + } + + filename := c.PostForm("filename") + deviceUID := c.PostForm("deviceUID") + userID := c.GetUint("userID") + + err = h.uploadService.UploadChunk( + file, + fileHash, + chunkNumber, + totalChunks, + totalSize, + filename, + userID, + deviceUID, + ) + + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + // 检查是否所有分片都已上传 + completed, err := h.uploadService.CheckUploadStatus(fileHash) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "message": "分片上传成功", + "completed": completed, + }) +} + +func (h *UploadHandler) MergeChunks(c *gin.Context) { + fileHash := c.PostForm("fileHash") + if fileHash == "" { + c.JSON(http.StatusBadRequest, gin.H{"error": "未提供文件哈希"}) + return + } + + upload, err := h.uploadService.MergeChunks(fileHash) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "message": "文件合并成功", + "file": upload, + }) +} + +func (h *UploadHandler) UploadSiteFile(c *gin.Context) { + file, err := c.FormFile("file") + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "未找到上传文件"}) + return + } + + // 检查文件类型 + ext := strings.ToLower(filepath.Ext(file.Filename)) + allowedExts := map[string]bool{ + ".jpg": true, ".jpeg": true, ".png": true, ".gif": true, + ".ico": true, ".svg": true, + } + if !allowedExts[ext] { + c.JSON(http.StatusBadRequest, gin.H{"error": "不支持的文件类型"}) + return + } + + // 生成文件名 + filename := fmt.Sprintf("site_%s%s", time.Now().Format("20060102150405"), ext) + + // 构建目标目录路径 + uploadDir := filepath.Join("web", "static", "images") + if err := os.MkdirAll(uploadDir, 0755); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "创建目录失败"}) + return + } + + // 构建完整的文件路径 + filePath := filepath.Join(uploadDir, filename) + + // 保存文件 + if err := c.SaveUploadedFile(file, filePath); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": "保存文件失败"}) + return + } + + // 返回文件URL(使用正斜杠作为URL路径分隔符) + fileURL := "/" + strings.Join([]string{"static", "images", filename}, "/") + c.JSON(http.StatusOK, gin.H{ + "url": fileURL, + "message": "文件上传成功", + }) +} diff --git a/internal/api/user.go b/internal/api/user.go new file mode 100644 index 0000000..61e5d30 --- /dev/null +++ b/internal/api/user.go @@ -0,0 +1,424 @@ +package api + +import ( + "licserver/internal/service" + + "net/http" + "strconv" + + "github.com/gin-gonic/gin" +) + +type UserHandler struct { + userService *service.UserService +} + +func NewUserHandler(userService *service.UserService) *UserHandler { + + return &UserHandler{userService: userService} + +} + +func (h *UserHandler) Login(c *gin.Context) { + + var input struct { + Username string `json:"username" binding:"required"` + + Password string `json:"password" binding:"required"` + + Captcha string `json:"captcha" binding:"required"` + + CaptchaId string `json:"captchaId" binding:"required"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + // 验证验证码 + if !h.userService.GetCaptchaService().VerifyImageCaptcha(input.CaptchaId, input.Captcha) { + c.JSON(http.StatusBadRequest, gin.H{"error": "验证码错误"}) + return + } + + token, err := h.userService.Login(input.Username, input.Password) + + if err != nil { + + c.JSON(http.StatusUnauthorized, gin.H{"error": err.Error()}) + + return + + } + + // 设置 cookie + // c.SetCookie("token", token, 86400, "/", "", false, true) // 24小时过期,httpOnly=true + + c.JSON(http.StatusOK, gin.H{"token": token}) + +} + +func (h *UserHandler) Register(c *gin.Context) { + + var input struct { + Username string `json:"username" binding:"required"` + + Password string `json:"password" binding:"required,min=6"` + + Email string `json:"email" binding:"required,email"` + + Captcha string `json:"captcha" binding:"required,len=6"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + if err := h.userService.Register(input.Username, input.Password, input.Email, input.Captcha); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, gin.H{"message": "注册成功"}) + +} + +func (h *UserHandler) ResetPasswordWithToken(c *gin.Context) { + + var input struct { + Token string `json:"token" binding:"required"` + + NewPassword string `json:"new_password" binding:"required,min=6"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + if err := h.userService.ResetPasswordWithToken(input.Token, input.NewPassword); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, gin.H{"message": "密码重置成功"}) + +} + +func (h *UserHandler) ResetPassword(c *gin.Context) { + + var input struct { + Email string `json:"email" binding:"required,email"` + + Captcha string `json:"captcha" binding:"required,len=6"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + if err := h.userService.ResetPassword(input.Email, input.Captcha); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, gin.H{"message": "重置密码邮件已发送"}) + +} + +func (h *UserHandler) SendRegisterCaptcha(c *gin.Context) { + + var input struct { + Email string `json:"email" binding:"required,email"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + if err := h.userService.SendRegisterCaptcha(input.Email); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, gin.H{"message": "验证码已发送"}) + +} + +func (h *UserHandler) SendResetPasswordCaptcha(c *gin.Context) { + + var input struct { + Email string `json:"email" binding:"required,email"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + if err := h.userService.SendResetPasswordCaptcha(input.Email); err != nil { + + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + + return + + } + + c.JSON(http.StatusOK, gin.H{"message": "验证码已发送"}) + +} + +// 在 UserHandler 中添加以下方法 + +// 获取图片验证码 +func (h *UserHandler) GetCaptcha(c *gin.Context) { + id, b64s, err := h.userService.GetCaptchaService().GenerateImageCaptcha() + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{ + "error": "生成验证码失败: " + err.Error(), + }) + return + } + + c.JSON(http.StatusOK, gin.H{ + "captchaId": id, + "imageBase64": b64s, + }) +} + +// 验证图片验证码 +func (h *UserHandler) VerifyCaptcha(c *gin.Context) { + var input struct { + CaptchaId string `json:"captcha_id" binding:"required"` + Code string `json:"code" binding:"required"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + if !h.userService.GetCaptchaService().VerifyImageCaptcha(input.CaptchaId, input.Code) { + c.JSON(http.StatusBadRequest, gin.H{"error": "验证码错误"}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "验证成功"}) +} + +// 获取用户列表 +func (h *UserHandler) GetUsers(c *gin.Context) { + page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) + pageSize, _ := strconv.Atoi(c.DefaultQuery("limit", "10")) + username := c.Query("username") + role := c.Query("role") + + users, total, err := h.userService.GetUsers(username, role, page, pageSize) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "msg": "获取用户列表成功", + "count": total, + "data": users, + }) +} + +// 创建用户 +func (h *UserHandler) CreateUser(c *gin.Context) { + var input struct { + Username string `json:"username" binding:"required"` + Password string `json:"password" binding:"required"` + Email string `json:"email" binding:"required,email"` + Role string `json:"role" binding:"required,oneof=admin user"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + // 检查权限 + if c.GetString("role") != "admin" { + c.JSON(http.StatusForbidden, gin.H{"error": "需要管理员权限"}) + return + } + + err := h.userService.CreateUser(input.Username, input.Password, input.Email, input.Role) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "用户创建成功"}) +} + +// 更新用户 +func (h *UserHandler) UpdateUser(c *gin.Context) { + id, err := strconv.ParseUint(c.Param("id"), 10, 32) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "无效的用户ID"}) + return + } + + var input struct { + Email string `json:"email" binding:"required,email"` + Role string `json:"role" binding:"required,oneof=admin user"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + // 检查权限 + if c.GetString("role") != "admin" { + c.JSON(http.StatusForbidden, gin.H{"error": "需要管理员权限"}) + return + } + + err = h.userService.UpdateUser(uint(id), input.Email, input.Role) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "用户更新成功"}) +} + +// 删除用户 +func (h *UserHandler) DeleteUser(c *gin.Context) { + id, err := strconv.ParseUint(c.Param("id"), 10, 32) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "无效的用户ID"}) + return + } + + // 检查权限 + if c.GetString("role") != "admin" { + c.JSON(http.StatusForbidden, gin.H{"error": "需要管理员权限"}) + return + } + + // 不能删除自己 + if uint(id) == c.GetUint("userID") { + c.JSON(http.StatusBadRequest, gin.H{"error": "不能删除自己"}) + return + } + + err = h.userService.DeleteUser(uint(id)) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "用户删除成功"}) +} + +// 获取用户信息 +func (h *UserHandler) GetUserInfo(c *gin.Context) { + id, err := strconv.ParseUint(c.Param("id"), 10, 32) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": "无效的用户ID"}) + return + } + + user, err := h.userService.GetUserByID(uint(id)) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "用户不存在"}) + return + } + + c.JSON(http.StatusOK, user) +} + +// 获取当前用户信息 +func (h *UserHandler) GetProfile(c *gin.Context) { + userID := c.GetUint("userID") + user, err := h.userService.GetUserByID(userID) + if err != nil { + c.JSON(http.StatusNotFound, gin.H{"error": "用户不存在"}) + return + } + + c.JSON(http.StatusOK, user) +} + +// 修改密码 +func (h *UserHandler) ChangePassword(c *gin.Context) { + var input struct { + OldPassword string `json:"old_password" binding:"required"` + NewPassword string `json:"new_password" binding:"required,min=6"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + userID := c.GetUint("userID") + err := h.userService.ChangePassword(userID, input.OldPassword, input.NewPassword) + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "密码修改成功"}) +} + +// 在 UserHandler 结构体中添加 UpdateProfile 方法 +func (h *UserHandler) UpdateProfile(c *gin.Context) { + var input struct { + Email string `json:"email" binding:"required,email"` + } + + if err := c.ShouldBindJSON(&input); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + userID := c.GetUint("userID") + if err := h.userService.UpdateProfile(userID, input.Email); err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "个人信息更新成功"}) +} diff --git a/internal/middleware/auth.go b/internal/middleware/auth.go new file mode 100644 index 0000000..f2c81bc --- /dev/null +++ b/internal/middleware/auth.go @@ -0,0 +1,80 @@ +package middleware + +import ( + "licserver/internal/utils" + "net/http" + "strings" + + "github.com/gin-gonic/gin" +) + +func JWTAuth(config *utils.JWTConfig) gin.HandlerFunc { + return func(c *gin.Context) { + var token string + + // 1. 首先从 cookie 中获取 token + tokenCookie, err := c.Cookie("token") + if err == nil { + token = tokenCookie + } + + // 2. 如果 cookie 中没有,则从 header 中获取 + if token == "" { + auth := c.GetHeader("Authorization") + if auth != "" { + parts := strings.SplitN(auth, " ", 2) + if len(parts) == 2 && parts[0] == "Bearer" { + token = parts[1] + } + } + } + + // 3. 如果 query 参数中有 token,也可以使用 + if token == "" { + token = c.Query("token") + } + + // 如果都没有找到 token + if token == "" { + c.JSON(http.StatusUnauthorized, gin.H{"error": "未提供认证信息"}) + c.Abort() + return + } + + // 验证 token + claims, err := utils.ParseToken(token, config) + if err != nil { + // 如果 token 无效,清除 cookie + // c.SetCookie("token", "", -1, "/", "", true, true) + c.JSON(http.StatusUnauthorized, gin.H{"error": "无效的token"}) + c.Abort() + return + } + + // 将用户信息存储到上下文 + c.Set("userID", claims.UserID) + c.Set("username", claims.Username) + c.Set("role", claims.Role) + + // 如果是从 header 或 query 参数获取的 token,设置到 cookie 中 + if tokenCookie == "" { + // 设置 cookie,过期时间与 token 一致 + // c.SetCookie("token", token, int(claims.ExpiresAt.Unix()-claims.IssuedAt.Unix()), "/", "", false, true) + } + + c.Next() + } +} + +// AdminRequired 检查用户是否为管理员 +func AdminRequired() gin.HandlerFunc { + return func(c *gin.Context) { + role, exists := c.Get("role") + if !exists || role != "admin" { + c.JSON(http.StatusForbidden, gin.H{"error": "需要管理员权限"}) + c.Abort() + return + } + c.Next() + } +} diff --git a/internal/middleware/error.go b/internal/middleware/error.go new file mode 100644 index 0000000..5c97dbd --- /dev/null +++ b/internal/middleware/error.go @@ -0,0 +1,62 @@ +package middleware + +import ( + "licserver/internal/utils" + "net/http" + + "github.com/gin-gonic/gin" +) + +func ErrorHandler() gin.HandlerFunc { + return func(c *gin.Context) { + c.Next() + + // 只处理第一个错误 + if len(c.Errors) > 0 { + err := c.Errors[0].Err + var statusCode int + var response utils.ErrorResponse + + switch err { + case utils.ErrUnauthorized: + statusCode = http.StatusUnauthorized + response = utils.ErrorResponse{ + Code: 401, + Message: "未授权的访问", + Detail: err.Error(), + } + case utils.ErrForbidden: + statusCode = http.StatusForbidden + response = utils.ErrorResponse{ + Code: 403, + Message: "禁止访问", + Detail: err.Error(), + } + case utils.ErrNotFound: + statusCode = http.StatusNotFound + response = utils.ErrorResponse{ + Code: 404, + Message: "资源不存在", + Detail: err.Error(), + } + case utils.ErrInvalidInput: + statusCode = http.StatusBadRequest + response = utils.ErrorResponse{ + Code: 400, + Message: "无效的输入", + Detail: err.Error(), + } + default: + statusCode = http.StatusInternalServerError + response = utils.ErrorResponse{ + Code: 500, + Message: "服务器内部错误", + Detail: err.Error(), + } + } + + c.JSON(statusCode, response) + c.Abort() + } + } +} diff --git a/internal/model/captcha.go b/internal/model/captcha.go new file mode 100644 index 0000000..de2d030 --- /dev/null +++ b/internal/model/captcha.go @@ -0,0 +1,16 @@ +package model + +import ( + "time" + + "gorm.io/gorm" +) + +type Captcha struct { + gorm.Model + Code string `gorm:"size:6"` // 验证码 + Type string `gorm:"size:20"` // 验证码类型:register/login/reset + Target string `gorm:"size:255"` // 目标(邮箱或手机号) + ExpiresAt time.Time `gorm:"index"` // 过期时间 + Used bool `gorm:"default:false"` // 是否已使用 +} diff --git a/internal/model/chunk.go b/internal/model/chunk.go new file mode 100644 index 0000000..2d741a0 --- /dev/null +++ b/internal/model/chunk.go @@ -0,0 +1,20 @@ +package model + +import ( + "gorm.io/gorm" +) + +type UploadChunk struct { + gorm.Model + FileHash string `gorm:"size:64;index"` // 完整文件的哈希值 + ChunkNumber int `gorm:"index"` // 分片序号 + ChunkSize int64 `gorm:""` // 分片大小 + ChunkPath string `gorm:"size:255"` // 分片存储路径 + TotalChunks int `gorm:""` // 总分片数 + TotalSize int64 `gorm:""` // 文件总大小 + Filename string `gorm:"size:255"` // 原始文件名 + FileType string `gorm:"size:50"` // 文件类型 + UploadedBy uint `gorm:"index"` // 上传者ID + DeviceUID string `gorm:"size:255;index"` // 关联的设备UID + Completed bool `gorm:"default:false"` // 是否已完成合并 +} diff --git a/internal/model/device_log.go b/internal/model/device_log.go new file mode 100644 index 0000000..8d3fe73 --- /dev/null +++ b/internal/model/device_log.go @@ -0,0 +1,13 @@ +package model + +import ( + "gorm.io/gorm" +) + +type DeviceLog struct { + gorm.Model + DeviceUID string `gorm:"index" json:"device_uid"` // 设备UID + Action string `json:"action"` // 操作类型 + Message string `json:"message"` // 详细信息 + Status string `json:"status"` // 状态:success/failed +} diff --git a/internal/model/device_model.go b/internal/model/device_model.go new file mode 100644 index 0000000..cb23a81 --- /dev/null +++ b/internal/model/device_model.go @@ -0,0 +1,19 @@ +package model + +import ( + "gorm.io/gorm" +) + +type DeviceModel struct { + gorm.Model + ModelName string `gorm:"uniqueIndex" json:"model_name" form:"model_name"` // 设备型号名称 + DeviceType string `gorm:"size:50" json:"device_type" form:"device_type"` // 设备类型 + Company string `gorm:"size:255" json:"company" form:"company"` // 所属公司 + Remark string `gorm:"size:500" json:"remark" form:"remark"` // 备注说明 + DeviceCount int `gorm:"-" json:"device_count"` // 设备数量(非数据库字段) + CreatedBy uint `gorm:"index" json:"created_by"` // 创建者ID + CurrentVersion string `gorm:"size:50" json:"current_version"` // 当前版本 + UpdateURL string `gorm:"size:255" json:"update_url"` // 更新地址 + UpdateDesc string `gorm:"size:500" json:"update_desc"` // 更新说明 + Status string `gorm:"size:20;default:active" json:"status"` // 状态:active/disabled +} diff --git a/internal/model/license.go b/internal/model/license.go new file mode 100644 index 0000000..96b0750 --- /dev/null +++ b/internal/model/license.go @@ -0,0 +1,33 @@ +package model + +import ( + "time" + + "gorm.io/gorm" +) + +type LicenseCode struct { + gorm.Model + Code string `gorm:"uniqueIndex" json:"code"` // 授权码 + LicenseType string `gorm:"size:20" json:"license_type"` // 授权类型:time/count/permanent + Duration int `json:"duration"` // 授权时长(分钟),仅当类型为time时有效 + MaxUses int `json:"max_uses"` // 最大使用次数,仅当类型为count时有效 + UsedCount int `gorm:"default:0" json:"used_count"` // 已使用次数 + Status string `gorm:"size:20" json:"status"` // 状态:unused/used/expired/revoked + UsedBy string `gorm:"index" json:"used_by"` // 使用此授权码的设备UID + UsedAt time.Time `json:"used_at"` // 使用时间 + CreatedBy uint `gorm:"index" json:"created_by"` // 创建者ID + BatchNo string `gorm:"size:50;index" json:"batch_no"` // 批次号 + Remark string `gorm:"size:500" json:"remark"` // 备注 + BindCount int `gorm:"default:-1" json:"bind_count"` // 可绑定次数,-1表示无限制,0表示不能绑定 +} + +type LicenseLog struct { + gorm.Model + LicenseID uint `gorm:"index" json:"license_id"` // 关联的授权码ID + DeviceUID string `gorm:"index" json:"device_uid"` // 设备UID + Action string `gorm:"size:20" json:"action"` // 操作类型:create/use/verify + IP string `gorm:"size:50" json:"ip"` // 操作IP + Status string `gorm:"size:20" json:"status"` // 状态:success/failed + Message string `gorm:"size:500" json:"message"` // 详细信息 +} diff --git a/internal/model/models.go b/internal/model/models.go new file mode 100644 index 0000000..1b53cec --- /dev/null +++ b/internal/model/models.go @@ -0,0 +1,35 @@ +package model + +import ( + "time" + + "gorm.io/gorm" +) + +type Device struct { + gorm.Model + UID string `gorm:"uniqueIndex" json:"uid"` + IPPort string `json:"ip_port"` + ChipID string `json:"chip_id"` + DeviceType string `json:"device_type"` + DeviceModel string `json:"device_model"` + Company string `json:"company"` + RegisterTime time.Time `json:"register_time"` + ExpireTime time.Time `json:"expire_time"` + LicenseType string `json:"license_type"` + StartCount int `json:"start_count"` + Status string `json:"status"` + LicenseCode string `json:"license_code"` + MaxUses int `json:"max_uses"` + Duration int `json:"duration"` + LastActiveAt time.Time `json:"last_active_at"` +} + +type User struct { + gorm.Model + Username string `gorm:"uniqueIndex" json:"username"` + Password string `json:"-"` + Email string `gorm:"uniqueIndex" json:"email"` + Role string `json:"role"` + LastLogin time.Time `json:"last_login"` +} diff --git a/internal/model/monitor.go b/internal/model/monitor.go new file mode 100644 index 0000000..dadbb1e --- /dev/null +++ b/internal/model/monitor.go @@ -0,0 +1,127 @@ +package model + +import ( + "time" +) + +type SystemStatus struct { + CPU struct { + Usage float64 `json:"usage"` // CPU使用率 + + LoadAvg []float64 `json:"load_avg"` // 系统负载 + + CoreCount int `json:"core_count"` // CPU核心数 + + ModelName string `json:"model_name"` // CPU型号 + + MHz float64 `json:"mhz"` // CPU频率 + + } `json:"cpu"` + + Memory struct { + Total uint64 `json:"total"` // 总内存 + + Used uint64 `json:"used"` // 已用内存 + + Free uint64 `json:"free"` // 空闲内存 + + UsageRate float64 `json:"usage_rate"` // 使用率 + + SwapTotal uint64 `json:"swap_total"` // 交换分区总大小 + + SwapUsed uint64 `json:"swap_used"` // 交换分区已用 + + SwapFree uint64 `json:"swap_free"` // 交换分区空闲 + + SwapUsageRate float64 `json:"swap_usage_rate"` // 交换分区使用率 + + } `json:"memory"` + + Disk struct { + Partitions []DiskPartition `json:"partitions"` // 磁盘分区信息 + + } `json:"disk"` + + Network struct { + Interfaces []NetworkInterface `json:"interfaces"` // 网络接口信息 + + } `json:"network"` + + Process struct { + Total int `json:"total"` // 进程总数 + + List []ProcessInfo `json:"list"` // 进程列表(Top N) + + } `json:"process"` + + Host struct { + Hostname string `json:"hostname"` // 主机名 + + OS string `json:"os"` // 操作系统 + + Platform string `json:"platform"` // 平台 + + PlatformVersion string `json:"platform_version"` // 平台版本 + + KernelVersion string `json:"kernel_version"` // 内核版本 + + BootTime time.Time `json:"boot_time"` // 启动时间 + + } `json:"host"` + + System struct { + Uptime time.Duration `json:"uptime"` // 系统运行时间 + + CurrentTime time.Time `json:"current_time"` // 当前时间 + + ActiveUsers int `json:"active_users"` // 活跃用户数 + + TotalDevices int `json:"total_devices"` // 设备总数 + + } `json:"system"` +} + +type DiskPartition struct { + Device string `json:"device"` // 设备名 + + Mountpoint string `json:"mountpoint"` // 挂载点 + + Fstype string `json:"fstype"` // 文件系统类型 + + Total uint64 `json:"total"` // 总空间 + + Used uint64 `json:"used"` // 已用空间 + + Free uint64 `json:"free"` // 空闲空间 + + UsageRate float64 `json:"usage_rate"` // 使用率 + +} + +type NetworkInterface struct { + Name string `json:"name"` // 接口名称 + + BytesSent uint64 `json:"bytes_sent"` // 发送字节数 + + BytesRecv uint64 `json:"bytes_recv"` // 接收字节数 + + PacketsSent uint64 `json:"packets_sent"` // 发送包数 + + PacketsRecv uint64 `json:"packets_recv"` // 接收包数 + + Addrs []string `json:"addrs"` // IP地址列表,改为字符串数组 + +} + +type ProcessInfo struct { + PID int `json:"pid"` // 进程ID + + Name string `json:"name"` // 进程名称 + + CPU float64 `json:"cpu"` // CPU使用率 + + Memory float64 `json:"memory"` // 内存使用率 + + Created int64 `json:"created"` // 创建时间 + +} diff --git a/internal/model/reset_token.go b/internal/model/reset_token.go new file mode 100644 index 0000000..0a244db --- /dev/null +++ b/internal/model/reset_token.go @@ -0,0 +1,15 @@ +package model + +import ( + "time" + + "gorm.io/gorm" +) + +type PasswordResetToken struct { + gorm.Model + UserID uint `gorm:"index"` + Token string `gorm:"uniqueIndex"` + ExpiresAt time.Time + Used bool +} diff --git a/internal/model/token.go b/internal/model/token.go new file mode 100644 index 0000000..73e5d42 --- /dev/null +++ b/internal/model/token.go @@ -0,0 +1,40 @@ +package model + +import ( + "time" + + "gorm.io/gorm" +) + +type AccessToken struct { + gorm.Model + Token string `gorm:"uniqueIndex" json:"token"` // 访问令牌 + DeviceUID string `gorm:"index" json:"device_uid"` // 关联的设备UID + Type string `gorm:"size:20" json:"type"` // 令牌类型:api/device + Status string `gorm:"size:20" json:"status"` // 状态:active/revoked + ExpireTime time.Time `json:"expire_time"` // 过期时间 + LastUsed time.Time `json:"last_used"` // 最后使用时间 + UsageCount int `gorm:"default:0" json:"usage_count"` // 使用次数 + IPList string `gorm:"type:text" json:"ip_list"` // 允许的IP列表,逗号分隔 + CreatedBy uint `gorm:"index" json:"created_by"` // 创建者ID +} + +// TableName 指定表名 +func (AccessToken) TableName() string { + return "access_tokens" +} + +type TokenLog struct { + gorm.Model + TokenID uint `gorm:"index" json:"token_id"` // 关联的令牌ID + Action string `gorm:"size:20" json:"action"` // 操作类型:create/use/revoke + IP string `gorm:"size:50" json:"ip"` // 操作IP + UserAgent string `gorm:"size:255" json:"user_agent"` // User-Agent + Status string `gorm:"size:20" json:"status"` // 状态:success/failed + Message string `gorm:"size:500" json:"message"` // 详细信息 +} + +// TableName 指定表名 +func (TokenLog) TableName() string { + return "token_logs" +} diff --git a/internal/model/upload.go b/internal/model/upload.go new file mode 100644 index 0000000..ab364bb --- /dev/null +++ b/internal/model/upload.go @@ -0,0 +1,25 @@ +package model + +import ( + "time" + + "gorm.io/gorm" +) + +type FileUpload struct { + gorm.Model + FileName string `gorm:"size:255" json:"file_name"` // 文件名 + FilePath string `gorm:"size:255" json:"file_path"` // 文件路径 + FileSize int64 `json:"file_size"` // 文件大小 + FileType string `gorm:"size:50" json:"file_type"` // 文件类型 + UploadedBy uint `gorm:"index" json:"uploaded_by"` // 上传者ID + DeviceModel string `gorm:"size:255;index" json:"device_model"` // 设备型号 + Version string `gorm:"size:50" json:"version"` // 文件版本 + Description string `gorm:"size:500" json:"description"` // 文件描述 + IsUpdate bool `gorm:"default:false" json:"is_update"` // 是否为更新文件 + Downloads int `gorm:"default:0" json:"downloads"` // 下载次数 + LastDownload time.Time `json:"last_download"` // 最后下载时间 + MD5 string `gorm:"size:32" json:"md5"` // 文件MD5值 + ForceUpdate bool `gorm:"default:false" json:"force_update"` // 是否强制更新 + DeviceUID string `gorm:"size:255;index" json:"device_uid"` // 关联的设备UID +} diff --git a/internal/service/captcha.go b/internal/service/captcha.go new file mode 100644 index 0000000..8ed2123 --- /dev/null +++ b/internal/service/captcha.go @@ -0,0 +1,100 @@ +package service + +import ( + "errors" + "licserver/internal/model" + "licserver/internal/utils" + "strings" + "time" + + "github.com/mojocn/base64Captcha" + "gorm.io/gorm" +) + +type CaptchaService struct { + db *gorm.DB + emailConfig *utils.EmailConfig + store base64Captcha.Store +} + +func NewCaptchaService(db *gorm.DB, emailConfig *utils.EmailConfig) *CaptchaService { + return &CaptchaService{ + db: db, + emailConfig: emailConfig, + store: base64Captcha.DefaultMemStore, + } +} + +func (s *CaptchaService) SendEmailCaptcha(email, captchaType string) error { + // 检查是否存在未过期的验证码 + var count int64 + s.db.Model(&model.Captcha{}). + Where("target = ? AND type = ? AND expires_at > ? AND used = ?", + email, captchaType, time.Now(), false). + Count(&count) + + if count > 0 { + return errors.New("请勿频繁发送验证码") + } + + // 生成验证码 + code, err := utils.GenerateCaptcha() + if err != nil { + return err + } + + // 保存验证码 + captcha := model.Captcha{ + Code: code, + Type: captchaType, + Target: email, + ExpiresAt: time.Now().Add(5 * time.Minute), + Used: false, + } + + if err := s.db.Create(&captcha).Error; err != nil { + return err + } + + // 发送验证码邮件 + emailService := utils.NewEmailService(s.emailConfig) + content := utils.GenerateEmailCaptchaContent(code, email, captchaType) + return emailService.SendEmail(email, "验证码", content) +} + +func (s *CaptchaService) VerifyCaptcha(target, captchaType, code string) error { + var captcha model.Captcha + err := s.db.Where("target = ? AND type = ? AND code = ? AND used = ? AND expires_at > ?", + target, captchaType, code, false, time.Now()). + First(&captcha).Error + + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return errors.New("验证码无效或已过期") + } + return err + } + + // 标记验证码为已使用 + return s.db.Model(&captcha).Update("used", true).Error +} + +// 生成图片验证码 +func (s *CaptchaService) GenerateImageCaptcha() (string, string, error) { + driver := base64Captcha.NewDriverDigit(80, 240, 6, 0.7, 80) + c := base64Captcha.NewCaptcha(driver, s.store) + id, b64s, err := c.Generate() + if err != nil { + return "", "", err + } + + // 确保返回的base64字符串不包含前缀 + b64s = strings.TrimPrefix(b64s, "data:image/png;base64,") + + return id, b64s, nil +} + +// 验证图片验证码 +func (s *CaptchaService) VerifyImageCaptcha(id, code string) bool { + return s.store.Verify(id, code, true) +} diff --git a/internal/service/device.go b/internal/service/device.go new file mode 100644 index 0000000..4ab640c --- /dev/null +++ b/internal/service/device.go @@ -0,0 +1,721 @@ +package service + +import ( + "errors" + "fmt" + + "licserver/internal/model" + + "time" + + "gorm.io/gorm" +) + +type DeviceService struct { + db *gorm.DB + + licenseService *LicenseService +} + +func NewDeviceService(db *gorm.DB, licenseService *LicenseService) *DeviceService { + + return &DeviceService{ + + db: db, + + licenseService: licenseService, + } + +} + +type DeviceRegisterInput struct { + UID string `json:"uid" binding:"required"` + DeviceModel string `json:"device_model" binding:"required"` + LicenseCode string `json:"license_code"` +} + +func (s *DeviceService) RegisterDevice(input *DeviceRegisterInput, ip string) error { + // 检查设备型号是否存在且处于启用状态 + var deviceModel model.DeviceModel + if err := s.db.Where("model_name = ? AND status = ?", input.DeviceModel, "active").First(&deviceModel).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return errors.New("设备型号不存在或已禁用") + } + return err + } + + // 检查设备是否已注册 + var count int64 + s.db.Model(&model.Device{}).Where("uid = ?", input.UID).Count(&count) + if count > 0 { + return errors.New("设备已注册") + } + + // 创建设备记录 + device := &model.Device{ + UID: input.UID, + DeviceType: deviceModel.DeviceType, + DeviceModel: input.DeviceModel, + Company: deviceModel.Company, + RegisterTime: time.Now(), + Status: "inactive", + LastActiveAt: time.Now(), + StartCount: 0, + } + + // 如果提供了授权码,进行授权绑定 + if input.LicenseCode != "" { + license, err := s.licenseService.GetLicenseByCode(input.LicenseCode) + if err != nil { + return err + } + + if license.Status != "unused" { + return errors.New("授权码已被使用") + } + + device.Status = "active" + device.LicenseCode = license.Code + device.LicenseType = license.LicenseType + device.MaxUses = license.MaxUses + device.Duration = license.Duration + + if license.LicenseType == "time" { + device.ExpireTime = time.Now().Add(time.Duration(license.Duration) * time.Minute) + } + } + + return s.db.Transaction(func(tx *gorm.DB) error { + // 创建设备记录 + if err := tx.Create(device).Error; err != nil { + return err + } + + // 如果有授权码,更新授权码状态 + if device.LicenseCode != "" { + if err := tx.Model(&model.LicenseCode{}).Where("code = ?", device.LicenseCode). + Updates(map[string]interface{}{ + "status": "used", + "used_by": input.UID, + "used_at": time.Now(), + }).Error; err != nil { + return err + } + } + + // 记录设备日志 + logMsg := "设备注册成功" + if device.LicenseCode != "" { + logMsg += fmt.Sprintf(",使用授权码: %s", device.LicenseCode) + } + log := model.DeviceLog{ + DeviceUID: input.UID, + Action: "register", + Message: logMsg, + Status: "success", + } + if err := tx.Create(&log).Error; err != nil { + return err + } + + return nil + }) +} + +func (s *DeviceService) ValidateDevice(uid string) error { + var device model.Device + if err := s.db.Where("uid = ?", uid).First(&device).Error; err != nil { + return errors.New("设备未注册") + } + + // 更新最后活跃时间 + device.LastActiveAt = time.Now() + + // 如果设备已激活,检查授权状态 + if device.Status == "active" { + if device.LicenseCode != "" { + if err := s.licenseService.CheckLicenseValidity(device.LicenseCode); err != nil { + device.Status = "expired" + s.db.Save(&device) + return errors.New("设备授权已过期") + } + } + } + + return s.db.Save(&device).Error +} + +func (s *DeviceService) GetDevices(params *DeviceQueryParams) ([]model.Device, int64, error) { + + var devices []model.Device + + var total int64 + + query := s.db.Model(&model.Device{}) + + if params.UID != "" { + + query = query.Where("uid LIKE ?", "%"+params.UID+"%") + + } + + if params.DeviceType != "" { + + query = query.Where("device_type = ?", params.DeviceType) + + } + + if params.Company != "" { + + query = query.Where("company LIKE ?", "%"+params.Company+"%") + + } + + if params.LicenseType != "" { + + query = query.Where("license_type = ?", params.LicenseType) + + } + + if params.Status != "" { + + query = query.Where("status = ?", params.Status) + + } + + query.Count(&total) + + if params.Page > 0 && params.PageSize > 0 { + + offset := (params.Page - 1) * params.PageSize + + query = query.Offset(offset).Limit(params.PageSize) + + } + + err := query.Find(&devices).Error + + return devices, total, err + +} + +func (s *DeviceService) UpdateStartCount(uid string) error { + var device model.Device + if err := s.db.Where("uid = ?", uid).First(&device).Error; err != nil { + return err + } + + // 更新启动次数和最后活跃时间 + device.StartCount++ + device.LastActiveAt = time.Now() + + // 如果设备已激活,检查授权状态 + if device.Status == "active" { + // 检查授权码有效性 + if device.LicenseCode != "" { + if err := s.licenseService.CheckLicenseValidity(device.LicenseCode); err != nil { + device.Status = "expired" + } + } + // 检查次数限制 + if device.LicenseType == "count" && device.StartCount >= device.MaxUses { + device.Status = "expired" + } + } + + // 记录设备日志 + log := model.DeviceLog{ + DeviceUID: uid, + Action: "start", + Message: fmt.Sprintf("设备启动,当前次数:%d", device.StartCount), + Status: "success", + } + + return s.db.Transaction(func(tx *gorm.DB) error { + if err := tx.Save(&device).Error; err != nil { + return err + } + return tx.Create(&log).Error + }) +} + +func (s *DeviceService) UpdateDevice(uid string, updates map[string]interface{}) error { + + return s.db.Model(&model.Device{}).Where("uid = ?", uid).Updates(updates).Error + +} + +func (s *DeviceService) DeleteDevice(uid string) error { + + return s.db.Where("uid = ?", uid).Delete(&model.Device{}).Error + +} + +func (s *DeviceService) GetLicenseInfo(deviceUID string) (*model.Device, error) { + + var device model.Device + + if err := s.db.Where("uid = ?", deviceUID).First(&device).Error; err != nil { + + return nil, errors.New("设备不存在") + + } + + return &device, nil + +} + +func (s *DeviceService) CheckLicenseStatus(deviceUID string) (string, error) { + + var device model.Device + + if err := s.db.Where("uid = ?", deviceUID).First(&device).Error; err != nil { + + return "", errors.New("设备不存在") + + } + + if device.LicenseCode == "" { + + return "未授权", nil + + } + + if device.Status != "active" { + + return device.Status, nil + + } + + switch device.LicenseType { + + case "时间段": + + if time.Now().After(device.ExpireTime) { + + device.Status = "expired" + + s.db.Save(&device) + + return "已过期", nil + + } + + case "启动次数": + + if device.StartCount >= device.MaxUses { + + device.Status = "expired" + + s.db.Save(&device) + + return "已达到使用上限", nil + + } + + } + + return "正常", nil + +} + +type DeviceQueryParams struct { + UID string + DeviceType string + Company string + LicenseType string + Status string + Page int + PageSize int +} + +type DeviceCreateInput struct { + UID string `json:"uid" binding:"required"` + DeviceType string `json:"device_type" binding:"required"` + DeviceModel string `json:"device_model" binding:"required"` + Company string `json:"company"` +} + +func (s *DeviceService) CreateDevice(input *DeviceCreateInput) error { + // 检查设备UID是否已存在 + var count int64 + if err := s.db.Model(&model.Device{}).Where("uid = ?", input.UID).Count(&count).Error; err != nil { + return err + } + if count > 0 { + return errors.New("设备UID已存在") + } + + // 创建设备记录 + device := &model.Device{ + UID: input.UID, + DeviceType: input.DeviceType, + DeviceModel: input.DeviceModel, + Company: input.Company, + RegisterTime: time.Now(), + Status: "inactive", // 初始状态为未激活 + } + + return s.db.Create(device).Error +} + +// 添加更新检查方法 +func (s *DeviceService) CheckUpdate(deviceUID, currentVersion string) (*model.FileUpload, error) { + // 获取设备信息 + var device model.Device + if err := s.db.Where("uid = ?", deviceUID).First(&device).Error; err != nil { + return nil, errors.New("设备不存在") + } + + // 检查设备状态 + if device.Status != "active" { + return nil, errors.New("设备未激活或已过期") + } + + // 查找最新的更新文件 + var update model.FileUpload + err := s.db.Where("device_model = ? AND is_update = ?", device.DeviceModel, true). + Order("created_at DESC"). + First(&update).Error + + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, nil // 没有可用更新 + } + return nil, err + } + + // 比较版本 + if update.Version <= currentVersion && !update.ForceUpdate { + return nil, nil // 当前版本已是最新 + } + + return &update, nil +} + +// 添加设备型号相关的方法 + +// CreateDeviceModel 创建设备型号 +func (s *DeviceService) CreateDeviceModel(model_ *model.DeviceModel) error { + // 检查型号名称是否已存在 + var count int64 + s.db.Model(&model.DeviceModel{}).Where("model_name = ?", model_.ModelName).Count(&count) + if count > 0 { + return errors.New("设备型号已存在") + } + + return s.db.Create(model_).Error +} + +// UpdateDeviceModel 更新设备型号 +func (s *DeviceService) UpdateDeviceModel(id uint, model_ *model.DeviceModel) error { + // 检查型号名称是否被其他型号使用 + var count int64 + s.db.Model(&model.DeviceModel{}).Where("model_name = ? AND id != ?", model_.ModelName, id).Count(&count) + if count > 0 { + return errors.New("设备型号已存在") + } + + return s.db.Model(&model.DeviceModel{}).Where("id = ?", id).Updates(model_).Error +} + +// DeleteDeviceModel 删除设备型号 +func (s *DeviceService) DeleteDeviceModel(id uint) error { + // 检查是否有设备使用此型号 + var count int64 + s.db.Model(&model.DeviceModel{}).Where("device_model = ?", id).Count(&count) + if count > 0 { + return errors.New("该型号下存在设备,无法删除") + } + + return s.db.Delete(&model.DeviceModel{}, id).Error +} + +// GetDeviceModels 获取设备型号列表 +func (s *DeviceService) GetDeviceModels(modelName, deviceType, company string, page, pageSize int) ([]model.DeviceModel, int64, error) { + var models []model.DeviceModel + var total int64 + + query := s.db.Model(&model.DeviceModel{}) + + if modelName != "" { + query = query.Where("model_name LIKE ?", "%"+modelName+"%") + } + if deviceType != "" { + query = query.Where("device_type = ?", deviceType) + } + if company != "" { + query = query.Where("company LIKE ?", "%"+company+"%") + } + + // 获取总数 + query.Count(&total) + + // 分页查询 + if page > 0 && pageSize > 0 { + offset := (page - 1) * pageSize + query = query.Offset(offset).Limit(pageSize) + } + + // 查询设备型号列表 + if err := query.Find(&models).Error; err != nil { + return nil, 0, err + } + + // 查询每个型号下的设备数量 + for i := range models { + var count int64 + s.db.Model(&model.Device{}).Where("device_model = ?", models[i].ModelName).Count(&count) + models[i].DeviceCount = int(count) + } + + return models, total, nil +} + +// BatchDeleteDeviceModels 批量删除设备型号 +func (s *DeviceService) BatchDeleteDeviceModels(ids []uint) error { + // 检查是否有设备使用这些型号 + var count int64 + s.db.Model(&model.Device{}).Where("device_model IN (?)", ids).Count(&count) + if count > 0 { + return errors.New("选中的型号中存在正在使用的型号,无法删除") + } + + return s.db.Delete(&model.DeviceModel{}, ids).Error +} + +// GetRegisteredDevices 获取已注册设备列表 +func (s *DeviceService) GetRegisteredDevices(uid, deviceModel, status string, page, pageSize int) ([]model.Device, int64, error) { + var devices []model.Device + var total int64 + + query := s.db.Model(&model.Device{}) + + if uid != "" { + query = query.Where("uid LIKE ?", "%"+uid+"%") + } + if deviceModel != "" { + query = query.Where("device_model = ?", deviceModel) + } + if status != "" { + query = query.Where("status = ?", status) + } + + // 获取总数 + query.Count(&total) + + // 分页查询 + if page > 0 && pageSize > 0 { + offset := (page - 1) * pageSize + query = query.Offset(offset).Limit(pageSize) + } + + err := query.Order("created_at DESC").Find(&devices).Error + return devices, total, err +} + +// BindLicense 绑定授权码 +func (s *DeviceService) BindLicense(uid string, licenseCode string) error { + var device model.Device + if err := s.db.Where("uid = ?", uid).First(&device).Error; err != nil { + return errors.New("设备不存在") + } + + // 检查设备当前状态 + if device.LicenseCode != "" { + return errors.New("设备已绑定授权码,请先解绑") + } + + // 验证授权码 + license, err := s.licenseService.GetLicenseByCode(licenseCode) + if err != nil { + return err + } + + if license.Status != "unused" { + return errors.New("授权码已被使用") + } + + // 根据授权类型处理 + switch license.LicenseType { + case "time": + if license.Duration <= 0 { + return errors.New("无效的授权时长") + } + device.ExpireTime = time.Now().Add(time.Duration(license.Duration) * time.Minute) + device.Duration = license.Duration + device.MaxUses = 0 + case "count": + if license.MaxUses <= 0 { + return errors.New("无效的使用次数") + } + device.ExpireTime = time.Time{} // 清空过期时间 + device.Duration = 0 + device.MaxUses = license.MaxUses + device.StartCount = 0 // 重置启动次数 + case "permanent": + device.ExpireTime = time.Time{} // 清空过期时间 + device.Duration = 0 + device.MaxUses = 0 + default: + return errors.New("无效的授权类型") + } + + // 更新设备基本信息 + device.LicenseCode = licenseCode + device.LicenseType = license.LicenseType + device.Status = "active" + device.LastActiveAt = time.Now() + + return s.db.Transaction(func(tx *gorm.DB) error { + // 更新设备信息 + if err := tx.Save(&device).Error; err != nil { + return err + } + + // 更新授权码状态 + if err := tx.Model(&model.LicenseCode{}).Where("code = ?", licenseCode). + Updates(map[string]interface{}{ + "status": "used", + "used_by": uid, + "used_at": time.Now(), + }).Error; err != nil { + return err + } + + // 记录设备日志 + log := model.DeviceLog{ + DeviceUID: uid, + Action: "bind_license", + Message: fmt.Sprintf("绑定%s授权码: %s", getLicenseTypeText(license.LicenseType), licenseCode), + Status: "success", + } + if err := tx.Create(&log).Error; err != nil { + return err + } + + return nil + }) +} + +// 获取授权类型的中文描述 +func getLicenseTypeText(licenseType string) string { + switch licenseType { + case "time": + return "时间" + case "count": + return "次数" + case "permanent": + return "永久" + default: + return "未知" + } +} + +// UnbindLicense 解绑授权码 +func (s *DeviceService) UnbindLicense(uid string) error { + var device model.Device + if err := s.db.Where("uid = ?", uid).First(&device).Error; err != nil { + return errors.New("设备不存在") + } + + if device.LicenseCode == "" { + return errors.New("设备未绑定授权码") + } + + oldLicenseCode := device.LicenseCode + + return s.db.Transaction(func(tx *gorm.DB) error { + // 更新设备信息 + if err := tx.Model(&device).Updates(map[string]interface{}{ + "license_code": "", + "license_type": "", + "status": "inactive", + "expire_time": nil, + "max_uses": 0, + "duration": 0, + }).Error; err != nil { + return err + } + + // 更新授权码状态 + if err := tx.Model(&model.LicenseCode{}).Where("code = ?", oldLicenseCode). + Updates(map[string]interface{}{ + "status": "unused", + "used_by": "", + "used_at": nil, + }).Error; err != nil { + return err + } + + // 记录设备日志 + log := model.DeviceLog{ + DeviceUID: uid, + Action: "unbind_license", + Message: fmt.Sprintf("解绑授权码: %s", oldLicenseCode), + Status: "success", + } + if err := tx.Create(&log).Error; err != nil { + return err + } + + return nil + }) +} + +// GetDeviceLogs 获取设备日志 +func (s *DeviceService) GetDeviceLogs(uid string, page, pageSize int) ([]model.DeviceLog, int64, error) { + var logs []model.DeviceLog + var total int64 + + query := s.db.Model(&model.DeviceLog{}).Where("device_uid = ?", uid) + + // 获取总数 + query.Count(&total) + + // 分页查询 + if page > 0 && pageSize > 0 { + offset := (page - 1) * pageSize + query = query.Offset(offset).Limit(pageSize) + } + + err := query.Order("created_at DESC").Find(&logs).Error + return logs, total, err +} + +// DashboardStats 仪表盘统计数据 +type DashboardStats struct { + TotalDevices int64 `json:"total_devices"` // 设备总数 + TotalLicenses int64 `json:"total_licenses"` // 授权码总数 + TodayNew int64 `json:"today_new"` // 今日新增 + OnlineDevices int64 `json:"online_devices"` // 在线设备 + ActiveDevices int64 `json:"active_devices"` // 激活设备 + ExpiredDevices int64 `json:"expired_devices"` // 过期设备 +} + +// GetDashboardStats 获取仪表盘统计数据 +func (s *DeviceService) GetDashboardStats() (*DashboardStats, error) { + var stats DashboardStats + + // 获取设备总数 + s.db.Model(&model.Device{}).Count(&stats.TotalDevices) + + // 获取授权码总数 + s.db.Model(&model.LicenseCode{}).Count(&stats.TotalLicenses) + + // 获取今日新增设备数 + today := time.Now().Format("2006-01-02") + s.db.Model(&model.Device{}).Where("DATE(register_time) = ?", today).Count(&stats.TodayNew) + + // 获取在线设备数(最近30分钟内有活动的设备) + thirtyMinutesAgo := time.Now().Add(-30 * time.Minute) + s.db.Model(&model.Device{}).Where("last_active_at > ?", thirtyMinutesAgo).Count(&stats.OnlineDevices) + + // 获取激活设备数 + s.db.Model(&model.Device{}).Where("status = ?", "active").Count(&stats.ActiveDevices) + + // 获取过期设备数 + s.db.Model(&model.Device{}).Where("status = ?", "expired").Count(&stats.ExpiredDevices) + + return &stats, nil +} diff --git a/internal/service/device_test.go b/internal/service/device_test.go new file mode 100644 index 0000000..8928427 --- /dev/null +++ b/internal/service/device_test.go @@ -0,0 +1,298 @@ +package service + +import ( + "licserver/internal/model" + "licserver/internal/utils" + "testing" + "time" + + "github.com/stretchr/testify/assert" +) + +func TestDeviceService_RegisterDevice(t *testing.T) { + db := utils.TestDB(t) + licenseService := NewLicenseService(db) + deviceService := NewDeviceService(db, licenseService) + + // 创建测试设备型号 + deviceModel := &model.DeviceModel{ + ModelName: "test-model", + DeviceType: "software", + Company: "test-company", + Status: "active", + CreatedBy: 1, + } + err := db.Create(deviceModel).Error + assert.NoError(t, err) + + // 创建测试授权码 + licenses, err := licenseService.CreateLicenses(&LicenseCreateInput{ + LicenseType: "time", + Duration: 30, + Count: 1, + Remark: "test", + }, 1) + assert.NoError(t, err) + assert.Len(t, licenses, 1) + + tests := []struct { + name string + input *DeviceRegisterInput + wantErr bool + }{ + { + name: "正常注册设备", + input: &DeviceRegisterInput{ + UID: "test-device-001", + DeviceModel: "test-model", + LicenseCode: licenses[0].Code, + }, + wantErr: false, + }, + { + name: "重复注册设备", + input: &DeviceRegisterInput{ + UID: "test-device-001", + DeviceModel: "test-model", + LicenseCode: licenses[0].Code, + }, + wantErr: true, + }, + { + name: "使用无效授权码", + input: &DeviceRegisterInput{ + UID: "test-device-002", + DeviceModel: "test-model", + LicenseCode: "invalid-code", + }, + wantErr: true, + }, + { + name: "使用不存在的设备型号", + input: &DeviceRegisterInput{ + UID: "test-device-003", + DeviceModel: "non-existent-model", + LicenseCode: licenses[0].Code, + }, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := deviceService.RegisterDevice(tt.input, "127.0.0.1") + if tt.wantErr { + assert.Error(t, err) + return + } + + assert.NoError(t, err) + + // 验证设备是否正确注册 + var device model.Device + err = db.Where("uid = ?", tt.input.UID).First(&device).Error + assert.NoError(t, err) + assert.Equal(t, deviceModel.DeviceType, device.DeviceType) + assert.Equal(t, "active", device.Status) + assert.Equal(t, tt.input.LicenseCode, device.LicenseCode) + }) + } +} + +func TestDeviceService_ValidateDevice(t *testing.T) { + db := utils.TestDB(t) + licenseService := NewLicenseService(db) + deviceService := NewDeviceService(db, licenseService) + + // 创建测试设备型号 + deviceModel := &model.DeviceModel{ + ModelName: "test-model", + DeviceType: "software", + Company: "test-company", + CreatedBy: 1, + } + err := db.Create(deviceModel).Error + assert.NoError(t, err) + + // 创建测试授权码 + licenses, err := licenseService.CreateLicenses(&LicenseCreateInput{ + LicenseType: "time", + Duration: 30, + Count: 1, + Remark: "test", + }, 1) + assert.NoError(t, err) + + // 注册测试设备 + device := &model.Device{ + UID: "test-device-001", + DeviceType: deviceModel.DeviceType, + DeviceModel: deviceModel.ModelName, + Company: deviceModel.Company, + RegisterTime: time.Now(), + Status: "active", + LicenseCode: licenses[0].Code, + LicenseType: "time", + Duration: 30, + ExpireTime: time.Now().Add(30 * 24 * time.Hour), + } + err = db.Create(device).Error + assert.NoError(t, err) + + tests := []struct { + name string + uid string + wantErr bool + }{ + { + name: "验证正常设备", + uid: "test-device-001", + wantErr: false, + }, + { + name: "验证不存在的设备", + uid: "non-existent-device", + wantErr: true, + }, + { + name: "验证过期设备", + uid: "expired-device", + wantErr: true, + }, + } + + // 创建过期设备 + expiredDevice := &model.Device{ + UID: "expired-device", + DeviceType: deviceModel.DeviceType, + DeviceModel: deviceModel.ModelName, + Company: deviceModel.Company, + RegisterTime: time.Now(), + Status: "expired", + LicenseCode: "expired-license", + LicenseType: "time", + Duration: 30, + ExpireTime: time.Now().Add(-24 * time.Hour), + } + err = db.Create(expiredDevice).Error + assert.NoError(t, err) + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := deviceService.ValidateDevice(tt.uid) + if tt.wantErr { + assert.Error(t, err) + return + } + assert.NoError(t, err) + }) + } +} + +func TestDeviceService_UpdateStartCount(t *testing.T) { + db := utils.TestDB(t) + licenseService := NewLicenseService(db) + deviceService := NewDeviceService(db, licenseService) + + // 创建测试设备型号 + deviceModel := &model.DeviceModel{ + ModelName: "test-model", + DeviceType: "software", + Company: "test-company", + CreatedBy: 1, + } + err := db.Create(deviceModel).Error + assert.NoError(t, err) + + // 创建测试设备 + device := &model.Device{ + UID: "test-device-001", + DeviceType: deviceModel.DeviceType, + DeviceModel: deviceModel.ModelName, + Company: deviceModel.Company, + RegisterTime: time.Now(), + Status: "active", + LicenseType: "count", + MaxUses: 5, + StartCount: 0, + } + err = db.Create(device).Error + assert.NoError(t, err) + + // 测试更新启动次数 + for i := 1; i <= 5; i++ { + err = deviceService.UpdateStartCount(device.UID) + assert.NoError(t, err) + + // 验证启动次数 + var updatedDevice model.Device + err = db.First(&updatedDevice, "uid = ?", device.UID).Error + assert.NoError(t, err) + assert.Equal(t, i, updatedDevice.StartCount) + + // 检查最后一次是否将状态更新为过期 + if i == 5 { + assert.Equal(t, "expired", updatedDevice.Status) + } else { + assert.Equal(t, "active", updatedDevice.Status) + } + } + + // 测试超出使用次数 + err = deviceService.UpdateStartCount(device.UID) + assert.Error(t, err) +} + +func TestDeviceService_CreateDeviceModel(t *testing.T) { + db := utils.TestDB(t) + licenseService := NewLicenseService(db) + deviceService := NewDeviceService(db, licenseService) + + tests := []struct { + name string + model *model.DeviceModel + wantErr bool + }{ + { + name: "创建有效设备型号", + model: &model.DeviceModel{ + ModelName: "test-model", + DeviceType: "software", + Company: "test-company", + Status: "active", + CreatedBy: 1, + }, + wantErr: false, + }, + { + name: "重复的设备型号", + model: &model.DeviceModel{ + ModelName: "test-model", + DeviceType: "software", + Company: "test-company", + Status: "active", + CreatedBy: 1, + }, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := deviceService.CreateDeviceModel(tt.model) + if tt.wantErr { + assert.Error(t, err) + return + } + assert.NoError(t, err) + + // 验证创建的设备型号 + var savedModel model.DeviceModel + err = db.Where("model_name = ?", tt.model.ModelName).First(&savedModel).Error + assert.NoError(t, err) + assert.Equal(t, tt.model.DeviceType, savedModel.DeviceType) + assert.Equal(t, tt.model.Company, savedModel.Company) + assert.Equal(t, tt.model.Status, savedModel.Status) + }) + } +} diff --git a/internal/service/license.go b/internal/service/license.go new file mode 100644 index 0000000..e5586b8 --- /dev/null +++ b/internal/service/license.go @@ -0,0 +1,709 @@ +package service + +import ( + "crypto/rand" + + "encoding/hex" + + "errors" + + "fmt" + + "strings" + + "time" + + "licserver/internal/model" + + "gorm.io/gorm" +) + +type LicenseService struct { + db *gorm.DB +} + +func NewLicenseService(db *gorm.DB) *LicenseService { + + return &LicenseService{db: db} + +} + +// 生成授权码 + +func generateLicenseCode() (string, error) { + + b := make([]byte, 16) + + if _, err := rand.Read(b); err != nil { + + return "", err + + } + + return hex.EncodeToString(b), nil + +} + +// 创建授权码 + +type LicenseCreateInput struct { + LicenseType string `json:"license_type" binding:"required"` + + Duration int `json:"duration"` // 时间授权的有效期(分钟) + + MaxUses int `json:"max_uses"` // 次数授权的使用次数 + + Count int `json:"count" binding:"required,min=1"` // 生成数量 + + Remark string `json:"remark"` // 备注 + + BindCount int `json:"bind_count"` // 可绑定次数,默认为-1(无限制) + +} + +func (s *LicenseService) CreateLicenses(input *LicenseCreateInput, createdBy uint) ([]model.LicenseCode, error) { + + // 验证参数 + + input.LicenseType = strings.ToLower(input.LicenseType) // 转为小写 + + switch input.LicenseType { + case "time": + if input.Duration <= 0 { + return nil, errors.New("时间授权必须指定有效期") + } + case "count": + if input.MaxUses <= 0 { + return nil, errors.New("次数授权必须指定使用次数") + } + case "permanent": + // 永久授权不需要额外参数 + default: + return nil, errors.New("无效的授权类型") + } + + // 如果未指定绑定次数,设置为默认值-1 + if input.BindCount == 0 { + input.BindCount = -1 + } + + // 生成批次号 + + batchNo := time.Now().Format("20060102150405") + + licenses := make([]model.LicenseCode, 0, input.Count) + + for i := 0; i < input.Count; i++ { + + code, err := generateLicenseCode() + + if err != nil { + + return nil, err + + } + + license := model.LicenseCode{ + + Code: code, + + LicenseType: input.LicenseType, + + Duration: input.Duration, + + MaxUses: input.MaxUses, + + Status: "unused", + + CreatedBy: createdBy, + + BatchNo: batchNo, + + Remark: input.Remark, + + BindCount: input.BindCount, + } + + licenses = append(licenses, license) + + } + + // 批量创建授权码 + + if err := s.db.Create(&licenses).Error; err != nil { + + return nil, err + + } + + return licenses, nil + +} + +// 验证并使用授权码 + +func (s *LicenseService) UseLicense(code, deviceUID, ip string) (*model.LicenseCode, error) { + + var license model.LicenseCode + + if err := s.db.Where("code = ?", code).First(&license).Error; err != nil { + + return nil, errors.New("授权码不存在") + + } + + // 检查授权码状态 + + if license.Status != "unused" { + + return nil, errors.New("授权码已被使用") + + } + + // 检查绑定次数 + if license.BindCount == 0 { + return nil, errors.New("授权码已达到最大绑定次数限制") + } + + // 更新授权码状态 + + updates := map[string]interface{}{ + "status": "used", + "used_by": deviceUID, + "used_at": time.Now(), + } + + // 如果不是无限制,减少绑定次数 + if license.BindCount > 0 { + updates["bind_count"] = license.BindCount - 1 + } + + if err := s.db.Model(&license).Updates(updates).Error; err != nil { + return nil, err + } + + // 记录使用日志 + log := model.LicenseLog{ + LicenseID: license.ID, + DeviceUID: deviceUID, + Action: "use", + IP: ip, + Status: "success", + Message: fmt.Sprintf("设备 %s 使用授权码", deviceUID), + } + + if err := s.db.Create(&log).Error; err != nil { + return nil, err + } + + return &license, nil + +} + +// 获取授权码列表 + +func (s *LicenseService) GetLicenses(status, licenseType, batchNo string, page, pageSize int) ([]model.LicenseCode, int64, error) { + + var licenses []model.LicenseCode + + var total int64 + + query := s.db.Model(&model.LicenseCode{}) + + if status != "" { + + query = query.Where("status = ?", strings.ToLower(status)) + + } + + if licenseType != "" { + + query = query.Where("license_type = ?", strings.ToLower(licenseType)) + + } + + if batchNo != "" { + + query = query.Where("batch_no = ?", batchNo) + + } + + // 获取所有符合条件的授权码 + + var allLicenses []model.LicenseCode + + if err := query.Find(&allLicenses).Error; err != nil { + + return nil, 0, err + + } + + // 检查每个授权码的有效性 + + for i := range allLicenses { + + if allLicenses[i].Status == "used" { + + if err := s.CheckLicenseValidity(allLicenses[i].Code); err != nil { + + // 如果检查失败,更新状态 + + s.db.Model(&allLicenses[i]).Update("status", "expired") + + allLicenses[i].Status = "expired" + + } + + } + + } + + total = int64(len(allLicenses)) + + // 分页 + + if page > 0 && pageSize > 0 { + + start := (page - 1) * pageSize + + end := start + pageSize + + if start < len(allLicenses) { + + if end > len(allLicenses) { + + end = len(allLicenses) + + } + + licenses = allLicenses[start:end] + + } + + } else { + + licenses = allLicenses + + } + + return licenses, total, nil + +} + +// 获取授权码使用日志 + +func (s *LicenseService) GetLicenseLogs(licenseID uint, page, pageSize int) ([]model.LicenseLog, int64, error) { + + var logs []model.LicenseLog + + var total int64 + + query := s.db.Model(&model.LicenseLog{}).Where("license_id = ?", licenseID) + + query.Count(&total) + + if page > 0 && pageSize > 0 { + + offset := (page - 1) * pageSize + + query = query.Offset(offset).Limit(pageSize) + + } + + err := query.Order("created_at DESC").Find(&logs).Error + + return logs, total, err + +} + +// ExportLogs 导出授权码日志 + +func (s *LicenseService) ExportLogs(licenseID uint) ([]byte, error) { + + logs, _, err := s.GetLicenseLogs(licenseID, 0, 0) // 获取所有日志 + + if err != nil { + + return nil, err + + } + + // 创建CSV内容 + + var content strings.Builder + + content.WriteString("操作类,设备UID,IP地址,状态,详细信息,时间\n") + + for _, log := range logs { + + // 转换操作类型 + + action := map[string]string{ + + "create": "创建", + + "use": "使用", + + "verify": "验证", + }[log.Action] + + // 转换状态 + + status := map[string]string{ + + "success": "成功", + + "failed": "失败", + }[log.Status] + + // 写入一行记录 + + content.WriteString(fmt.Sprintf("%s,%s,%s,%s,%s,%s\n", + + action, + + log.DeviceUID, + + log.IP, + + status, + + log.Message, + + log.CreatedAt.Format("2006-01-02 15:04:05"), + )) + + } + + return []byte(content.String()), nil + +} + +// 撤销授权码 + +func (s *LicenseService) RevokeLicense(code string, userID uint) error { + + var license model.LicenseCode + + if err := s.db.Where("code = ?", code).First(&license).Error; err != nil { + + return errors.New("授权码不存在") + + } + + // 检查权限 + + if license.CreatedBy != userID { + + return errors.New("无权操作此授权码") + + } + + // 更新状态 + + if err := s.db.Model(&license).Update("status", "revoked").Error; err != nil { + + return err + + } + + // 记录日志 + + log := model.LicenseLog{ + + LicenseID: license.ID, + + Action: "revoke", + + Status: "success", + + Message: "授权码已撤销", + } + + s.db.Create(&log) + + return nil + +} + +// 批量撤销授权码 + +func (s *LicenseService) RevokeLicenses(codes []string, userID uint) error { + + return s.db.Transaction(func(tx *gorm.DB) error { + + for _, code := range codes { + + var license model.LicenseCode + + if err := tx.Where("code = ?", code).First(&license).Error; err != nil { + + continue + + } + + // 检查权限 + + if license.CreatedBy != userID { + + continue + + } + + // 更新状态 + + if err := tx.Model(&license).Update("status", "revoked").Error; err != nil { + + return err + + } + + // 记录日志 + + log := model.LicenseLog{ + + LicenseID: license.ID, + + Action: "revoke", + + Status: "success", + + Message: "授权码已撤销", + } + + tx.Create(&log) + + } + + return nil + + }) + +} + +// 验证授权码 + +func (s *LicenseService) ValidateLicense(code string) (*model.LicenseCode, error) { + + var license model.LicenseCode + + if err := s.db.Where("code = ?", code).First(&license).Error; err != nil { + + return nil, errors.New("无效的授权码") + + } + + // 检查状态 + + if license.Status != "unused" { + + return nil, errors.New("授权码已被使用或已撤销") + + } + + return &license, nil + +} + +// 导出授权码 + +func (s *LicenseService) ExportLicenses(codes []string) ([]byte, error) { + + var licenses []model.LicenseCode + + if err := s.db.Where("code IN ?", codes).Find(&licenses).Error; err != nil { + + return nil, err + + } + + // 创建CSV内容 + + var content strings.Builder + + content.WriteString("授权码,授权类型,有效期(天),使用次数,状态,使用设备,使用时间,批次号,备注\n") + + for _, license := range licenses { + + // 转换授权类型 + + licenseType := map[string]string{ + + "time": "时间授权", + + "count": "次数授权", + + "permanent": "永久授权", + }[license.LicenseType] + + // 转换状态 + + status := map[string]string{ + + "unused": "未使用", + + "used": "已使用", + + "revoked": "已撤销", + }[license.Status] + + // 写入一行记录 + + content.WriteString(fmt.Sprintf("%s,%s,%d,%d,%s,%s,%s,%s,%s\n", + + license.Code, + + licenseType, + + license.Duration, + + license.MaxUses, + + status, + + license.UsedBy, + + license.UsedAt.Format("2006-01-02 15:04:05"), + + license.BatchNo, + + license.Remark, + )) + + } + + return []byte(content.String()), nil + +} + +// 获取授权码统计信息 + +func (s *LicenseService) GetLicenseStats() (map[string]interface{}, error) { + + var stats struct { + Total int64 + + Unused int64 + + Used int64 + + Revoked int64 + + Today int64 + + ThisWeek int64 + + ThisMonth int64 + } + + // 获取总数 + + s.db.Model(&model.LicenseCode{}).Count(&stats.Total) + + // 获取各状态数量 + + s.db.Model(&model.LicenseCode{}).Where("status = ?", "unused").Count(&stats.Unused) + + s.db.Model(&model.LicenseCode{}).Where("status = ?", "used").Count(&stats.Used) + + s.db.Model(&model.LicenseCode{}).Where("status = ?", "revoked").Count(&stats.Revoked) + + // 获取今日创建数量 + + today := time.Now().Format("2006-01-02") + + s.db.Model(&model.LicenseCode{}).Where("DATE(created_at) = ?", today).Count(&stats.Today) + + // 获取本周创建数量 + + weekStart := time.Now().AddDate(0, 0, -int(time.Now().Weekday())) + + s.db.Model(&model.LicenseCode{}).Where("created_at >= ?", weekStart).Count(&stats.ThisWeek) + + // 获取本月创建数量 + + monthStart := time.Now().Format("2006-01") + "-01" + + s.db.Model(&model.LicenseCode{}).Where("created_at >= ?", monthStart).Count(&stats.ThisMonth) + + return map[string]interface{}{ + + "total": stats.Total, + + "unused": stats.Unused, + + "used": stats.Used, + + "revoked": stats.Revoked, + + "today": stats.Today, + + "this_week": stats.ThisWeek, + + "this_month": stats.ThisMonth, + }, nil + +} + +// 添加检查授权码有效性的方法 + +func (s *LicenseService) CheckLicenseValidity(code string) error { + + var license model.LicenseCode + + if err := s.db.Where("code = ?", code).First(&license).Error; err != nil { + + return errors.New("授权码不存在") + + } + + if license.Status != "unused" && license.Status != "used" { + + return errors.New("授权码已被撤销或过期") + + } + + // 检查授权类型特定的限制 + + switch license.LicenseType { + case "time": + // 计算过期时间 + + expireTime := license.UsedAt.Add(time.Duration(license.Duration) * time.Minute) + + if time.Now().After(expireTime) { + + // 更新状态为过期 + + s.db.Model(&license).Update("status", "expired") + + return errors.New("授权码已过期") + + } + case "count": + if license.UsedCount >= license.MaxUses { + + // 更新状态为过期 + + s.db.Model(&license).Update("status", "expired") + + return errors.New("授权码使用次数已达上限") + + } + } + + return nil + +} + +// GetLicenseByCode 通过授权码获取授权信息 +func (s *LicenseService) GetLicenseByCode(code string) (*model.LicenseCode, error) { + var license model.LicenseCode + if err := s.db.Where("code = ?", code).First(&license).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, errors.New("授权码不存在") + } + return nil, err + } + return &license, nil +} diff --git a/internal/service/license_test.go b/internal/service/license_test.go new file mode 100644 index 0000000..1af470f --- /dev/null +++ b/internal/service/license_test.go @@ -0,0 +1,153 @@ +package service + +import ( + "licserver/internal/utils" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestLicenseService_CreateLicenses(t *testing.T) { + db := utils.TestDB(t) + service := NewLicenseService(db) + + tests := []struct { + name string + input *LicenseCreateInput + wantErr bool + }{ + { + name: "创建时间授权码", + input: &LicenseCreateInput{ + LicenseType: "time", + Duration: 30, + Count: 5, + Remark: "test time license", + }, + wantErr: false, + }, + { + name: "创建次数授权码", + input: &LicenseCreateInput{ + LicenseType: "count", + MaxUses: 100, + Count: 3, + Remark: "test count license", + }, + wantErr: false, + }, + { + name: "创建永久授权码", + input: &LicenseCreateInput{ + LicenseType: "permanent", + Count: 1, + Remark: "test permanent license", + }, + wantErr: false, + }, + { + name: "无效的授权类型", + input: &LicenseCreateInput{ + LicenseType: "invalid", + Count: 1, + }, + wantErr: true, + }, + { + name: "时间授权无有效期", + input: &LicenseCreateInput{ + LicenseType: "time", + Duration: 0, + Count: 1, + }, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + licenses, err := service.CreateLicenses(tt.input, 1) + if tt.wantErr { + assert.Error(t, err) + return + } + + assert.NoError(t, err) + assert.Len(t, licenses, tt.input.Count) + + for _, license := range licenses { + assert.Equal(t, tt.input.LicenseType, license.LicenseType) + assert.Equal(t, "unused", license.Status) + assert.Equal(t, tt.input.Remark, license.Remark) + + if tt.input.LicenseType == "time" { + assert.Equal(t, tt.input.Duration, license.Duration) + } else if tt.input.LicenseType == "count" { + assert.Equal(t, tt.input.MaxUses, license.MaxUses) + } + } + }) + } +} + +func TestLicenseService_UseLicense(t *testing.T) { + db := utils.TestDB(t) + service := NewLicenseService(db) + + // 创建测试授权码 + input := &LicenseCreateInput{ + LicenseType: "time", + Duration: 30, + Count: 1, + Remark: "test", + } + + licenses, err := service.CreateLicenses(input, 1) + assert.NoError(t, err) + assert.Len(t, licenses, 1) + + tests := []struct { + name string + code string + deviceUID string + ip string + wantErr bool + }{ + { + name: "正常使用授权码", + code: licenses[0].Code, + deviceUID: "test-device-001", + ip: "127.0.0.1", + wantErr: false, + }, + { + name: "使用不存在的授权码", + code: "invalid-code", + deviceUID: "test-device-002", + ip: "127.0.0.1", + wantErr: true, + }, + { + name: "重复使用授权码", + code: licenses[0].Code, + deviceUID: "test-device-003", + ip: "127.0.0.1", + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + license, err := service.UseLicense(tt.code, tt.deviceUID, tt.ip) + if tt.wantErr { + assert.Error(t, err) + return + } + + assert.NoError(t, err) + assert.Equal(t, "used", license.Status) + assert.Equal(t, tt.deviceUID, license.UsedBy) + assert.NotZero(t, license.UsedAt) + }) + } +} diff --git a/internal/service/monitor.go b/internal/service/monitor.go new file mode 100644 index 0000000..c9d3804 --- /dev/null +++ b/internal/service/monitor.go @@ -0,0 +1,377 @@ +package service + +import ( + "licserver/internal/model" + + "runtime" + + "time" + + "github.com/shirou/gopsutil/v3/cpu" + + "github.com/shirou/gopsutil/v3/disk" + + "github.com/shirou/gopsutil/v3/host" + + "github.com/shirou/gopsutil/v3/mem" + + "github.com/shirou/gopsutil/v3/net" + + "github.com/shirou/gopsutil/v3/process" + + "gorm.io/gorm" +) + +type MonitorService struct { + db *gorm.DB + + startTime time.Time +} + +func NewMonitorService(db *gorm.DB) *MonitorService { + + return &MonitorService{ + + db: db, + + startTime: time.Now(), + } + +} + +func (s *MonitorService) GetSystemStatus() (*model.SystemStatus, error) { + + status := &model.SystemStatus{} + + // CPU信息 + + if err := s.getCPUInfo(status); err != nil { + + return nil, err + + } + + // 内存信息 + + if err := s.getMemoryInfo(status); err != nil { + + return nil, err + + } + + // 磁盘信息 + + if err := s.getDiskInfo(status); err != nil { + + return nil, err + + } + + // 网络信息 + + if err := s.getNetworkInfo(status); err != nil { + + return nil, err + + } + + // 进程信息 + + if err := s.getProcessInfo(status); err != nil { + + return nil, err + + } + + // 主机信息 + + if err := s.getHostInfo(status); err != nil { + + return nil, err + + } + + // 系统信息 + + s.getSystemInfo(status) + + return status, nil + +} + +func (s *MonitorService) getCPUInfo(status *model.SystemStatus) error { + + cpuPercent, err := cpu.Percent(time.Second, false) + + if err != nil { + + return err + + } + + // Windows 系统不支持 LoadAvg,设置为默认值 + + status.CPU.LoadAvg = []float64{0, 0, 0} + + cpuInfo, err := cpu.Info() + + if err != nil { + + return err + + } + + status.CPU.Usage = cpuPercent[0] + + status.CPU.CoreCount = runtime.NumCPU() + + if len(cpuInfo) > 0 { + + status.CPU.ModelName = cpuInfo[0].ModelName + + status.CPU.MHz = cpuInfo[0].Mhz + + } + + return nil + +} + +func (s *MonitorService) getMemoryInfo(status *model.SystemStatus) error { + + memInfo, err := mem.VirtualMemory() + + if err != nil { + + return err + + } + + swapInfo, err := mem.SwapMemory() + + if err != nil { + + return err + + } + + status.Memory.Total = memInfo.Total + + status.Memory.Used = memInfo.Used + + status.Memory.Free = memInfo.Free + + status.Memory.UsageRate = memInfo.UsedPercent + + status.Memory.SwapTotal = swapInfo.Total + + status.Memory.SwapUsed = swapInfo.Used + + status.Memory.SwapFree = swapInfo.Free + + status.Memory.SwapUsageRate = swapInfo.UsedPercent + + return nil + +} + +func (s *MonitorService) getDiskInfo(status *model.SystemStatus) error { + + partitions, err := disk.Partitions(true) + + if err != nil { + + return err + + } + + status.Disk.Partitions = make([]model.DiskPartition, 0) + + for _, partition := range partitions { + + usage, err := disk.Usage(partition.Mountpoint) + + if err != nil { + + continue + + } + + status.Disk.Partitions = append(status.Disk.Partitions, model.DiskPartition{ + + Device: partition.Device, + + Mountpoint: partition.Mountpoint, + + Fstype: partition.Fstype, + + Total: usage.Total, + + Used: usage.Used, + + Free: usage.Free, + + UsageRate: usage.UsedPercent, + }) + + } + + return nil + +} + +func (s *MonitorService) getNetworkInfo(status *model.SystemStatus) error { + + interfaces, err := net.Interfaces() + + if err != nil { + + return err + + } + + ioCounters, err := net.IOCounters(true) + + if err != nil { + + return err + + } + + status.Network.Interfaces = make([]model.NetworkInterface, 0) + + for _, iface := range interfaces { + + var counter net.IOCountersStat + + for _, io := range ioCounters { + + if io.Name == iface.Name { + + counter = io + + break + + } + + } + + // 获取接口的地址列表 + + addrs := make([]string, 0) + + for _, addr := range iface.Addrs { + addrs = append(addrs, addr.String()) + } + + status.Network.Interfaces = append(status.Network.Interfaces, model.NetworkInterface{ + + Name: iface.Name, + + BytesSent: counter.BytesSent, + + BytesRecv: counter.BytesRecv, + + PacketsSent: counter.PacketsSent, + + PacketsRecv: counter.PacketsRecv, + + Addrs: addrs, + }) + + } + + return nil + +} + +func (s *MonitorService) getProcessInfo(status *model.SystemStatus) error { + + processes, err := process.Processes() + + if err != nil { + + return err + + } + + status.Process.Total = len(processes) + + status.Process.List = make([]model.ProcessInfo, 0) + + for i := 0; i < 10 && i < len(processes); i++ { + + p := processes[i] + + name, _ := p.Name() + + cpu, _ := p.CPUPercent() + + mem, _ := p.MemoryPercent() + + created, _ := p.CreateTime() + + status.Process.List = append(status.Process.List, model.ProcessInfo{ + + PID: int(p.Pid), + + Name: name, + + CPU: cpu, + + Memory: float64(mem), + + Created: created, + }) + + } + + return nil + +} + +func (s *MonitorService) getHostInfo(status *model.SystemStatus) error { + + info, err := host.Info() + + if err != nil { + + return err + + } + + status.Host.Hostname = info.Hostname + + status.Host.OS = info.OS + + status.Host.Platform = info.Platform + + status.Host.PlatformVersion = info.PlatformVersion + + status.Host.KernelVersion = info.KernelVersion + + status.Host.BootTime = time.Unix(int64(info.BootTime), 0) + + return nil + +} + +func (s *MonitorService) getSystemInfo(status *model.SystemStatus) { + + status.System.Uptime = time.Since(s.startTime) + + status.System.CurrentTime = time.Now() + + var activeUsers int64 + + s.db.Model(&model.User{}).Count(&activeUsers) + + status.System.ActiveUsers = int(activeUsers) + + var totalDevices int64 + + s.db.Model(&model.Device{}).Count(&totalDevices) + + status.System.TotalDevices = int(totalDevices) + +} diff --git a/internal/service/site.go b/internal/service/site.go new file mode 100644 index 0000000..cc1d481 --- /dev/null +++ b/internal/service/site.go @@ -0,0 +1,47 @@ +package service + +import ( + "errors" + "licserver/internal/utils" + "sync" +) + +type SiteService struct { + config *utils.Config + mu sync.RWMutex +} + +func NewSiteService(config *utils.Config) *SiteService { + return &SiteService{ + config: config, + } +} + +func (s *SiteService) GetSettings() utils.SiteConfig { + s.mu.RLock() + defer s.mu.RUnlock() + return s.config.Site +} + +func (s *SiteService) UpdateSettings(settings utils.SiteConfig) error { + s.mu.Lock() + defer s.mu.Unlock() + + // 更新内存中的配置 + s.config.Site = settings + + // 持久化配置到文件 + return utils.SaveConfig(s.config, "system", "更新站点设置") +} + +// ValidateSettings 验证站点设置 +func (s *SiteService) ValidateSettings(settings utils.SiteConfig) error { + // 这里可以添加更多的验证逻辑 + if settings.Title == "" { + return errors.New("站点标题不能为空") + } + if settings.BaseURL == "" { + return errors.New("基础URL不能为空") + } + return nil +} diff --git a/internal/service/token.go b/internal/service/token.go new file mode 100644 index 0000000..f634b04 --- /dev/null +++ b/internal/service/token.go @@ -0,0 +1,188 @@ +package service + +import ( + "crypto/rand" + "encoding/hex" + "errors" + "strings" + "time" + + "licserver/internal/model" + + "gorm.io/gorm" +) + +type TokenService struct { + db *gorm.DB +} + +func NewTokenService(db *gorm.DB) *TokenService { + return &TokenService{db: db} +} + +// 生成访问令牌 +func generateToken() (string, error) { + b := make([]byte, 32) + if _, err := rand.Read(b); err != nil { + return "", err + } + return hex.EncodeToString(b), nil +} + +// 创建访问令牌 +func (s *TokenService) CreateToken(deviceUID, tokenType string, expireTime time.Time, ipList []string, createdBy uint) (*model.AccessToken, error) { + // 验证设备是否存在 + var device model.Device + if err := s.db.Where("uid = ?", deviceUID).First(&device).Error; err != nil { + return nil, errors.New("设备不存在") + } + + // 生成令牌 + token, err := generateToken() + if err != nil { + return nil, err + } + + // 创建令牌记录 + accessToken := &model.AccessToken{ + Token: token, + DeviceUID: deviceUID, + Type: tokenType, + Status: "active", + ExpireTime: expireTime, + IPList: strings.Join(ipList, ","), + CreatedBy: createdBy, + } + + if err := s.db.Create(accessToken).Error; err != nil { + return nil, err + } + + // 记录日志 + tokenLog := &model.TokenLog{ + TokenID: accessToken.ID, + Action: "create", + Status: "success", + Message: "创建访问令牌", + } + s.db.Create(tokenLog) + + return accessToken, nil +} + +// 验证令牌 +func (s *TokenService) ValidateToken(token, ip string) (*model.AccessToken, error) { + var accessToken model.AccessToken + if err := s.db.Where("token = ?", token).First(&accessToken).Error; err != nil { + return nil, errors.New("无效的令牌") + } + + // 检查令牌状态 + if accessToken.Status != "active" { + return nil, errors.New("令牌已被撤销") + } + + // 检查过期时间 + if time.Now().After(accessToken.ExpireTime) { + return nil, errors.New("令牌已过期") + } + + // 检查IP限制 + if accessToken.IPList != "" { + allowedIPs := strings.Split(accessToken.IPList, ",") + allowed := false + for _, allowedIP := range allowedIPs { + if allowedIP == ip { + allowed = true + break + } + } + if !allowed { + return nil, errors.New("IP地址不允许访问") + } + } + + // 更新使用记录 + s.db.Model(&accessToken).Updates(map[string]interface{}{ + "last_used": time.Now(), + "usage_count": gorm.Expr("usage_count + 1"), + }) + + // 记录日志 + tokenLog := &model.TokenLog{ + TokenID: accessToken.ID, + Action: "use", + IP: ip, + Status: "success", + } + s.db.Create(tokenLog) + + return &accessToken, nil +} + +// 撤销令牌 +func (s *TokenService) RevokeToken(token string, userID uint) error { + var accessToken model.AccessToken + if err := s.db.Where("token = ?", token).First(&accessToken).Error; err != nil { + return errors.New("令牌不存在") + } + + // 检查权限 + if accessToken.CreatedBy != userID { + return errors.New("无权操作此令牌") + } + + // 更新状态 + if err := s.db.Model(&accessToken).Update("status", "revoked").Error; err != nil { + return err + } + + // 记录日志 + tokenLog := &model.TokenLog{ + TokenID: accessToken.ID, + Action: "revoke", + Status: "success", + Message: "撤销访问令牌", + } + s.db.Create(tokenLog) + + return nil +} + +// 获取令牌列表 +func (s *TokenService) GetTokens(deviceUID string, page, pageSize int) ([]model.AccessToken, int64, error) { + var tokens []model.AccessToken + var total int64 + + query := s.db.Model(&model.AccessToken{}) + if deviceUID != "" { + query = query.Where("device_uid = ?", deviceUID) + } + + query.Count(&total) + + if page > 0 && pageSize > 0 { + offset := (page - 1) * pageSize + query = query.Offset(offset).Limit(pageSize) + } + + err := query.Order("created_at DESC").Find(&tokens).Error + return tokens, total, err +} + +// 获取令牌日志 +func (s *TokenService) GetTokenLogs(tokenID uint, page, pageSize int) ([]model.TokenLog, int64, error) { + var logs []model.TokenLog + var total int64 + + query := s.db.Model(&model.TokenLog{}).Where("token_id = ?", tokenID) + query.Count(&total) + + if page > 0 && pageSize > 0 { + offset := (page - 1) * pageSize + query = query.Offset(offset).Limit(pageSize) + } + + err := query.Order("created_at DESC").Find(&logs).Error + return logs, total, err +} diff --git a/internal/service/upload.go b/internal/service/upload.go new file mode 100644 index 0000000..3a6effd --- /dev/null +++ b/internal/service/upload.go @@ -0,0 +1,463 @@ +package service + +import ( + "errors" + + "fmt" + + "io" + + "mime/multipart" + + "os" + + "path/filepath" + + "sort" + + "strings" + + "time" + + "licserver/internal/model" + + "licserver/internal/utils" + + "github.com/google/uuid" + + "gorm.io/gorm" + + "crypto/sha256" + + "encoding/hex" +) + +type UploadService struct { + db *gorm.DB + + config *utils.Config +} + +func NewUploadService(db *gorm.DB, config *utils.Config) *UploadService { + + return &UploadService{ + + db: db, + + config: config, + } + +} + +func (s *UploadService) UploadFile(file *multipart.FileHeader, userID uint, deviceUID, description string) (*model.FileUpload, error) { + + // 生成唯一文件名 + + ext := filepath.Ext(file.Filename) + + uniqueID := uuid.New().String() + + fileName := fmt.Sprintf("%s%s", uniqueID, ext) + + filePath := filepath.Join(s.config.Upload.Path, fileName) + + // 确保上传目录存在 + + if err := os.MkdirAll(s.config.Upload.Path, 0755); err != nil { + + return nil, err + + } + + // 保存文件 + + src, err := file.Open() + + if err != nil { + + return nil, err + + } + + defer src.Close() + + dst, err := os.Create(filePath) + + if err != nil { + + return nil, err + + } + + defer dst.Close() + + if _, err = io.Copy(dst, src); err != nil { + + return nil, err + + } + + // 如果提供了设备UID,获取设备型号 + + var deviceModel string + + if deviceUID != "" { + + var device model.Device + + if err := s.db.Where("uid = ?", deviceUID).First(&device).Error; err == nil { + + deviceModel = device.DeviceModel + + } + + } + + // 创建数据库记录 + + upload := &model.FileUpload{ + + FileName: file.Filename, + + FilePath: filePath, + + FileSize: file.Size, + + FileType: strings.ToLower(ext), + + UploadedBy: userID, + + DeviceUID: deviceUID, + + DeviceModel: deviceModel, + + Description: description, + } + + if err := s.db.Create(upload).Error; err != nil { + + os.Remove(filePath) + + return nil, err + + } + + return upload, nil + +} + +func (s *UploadService) DownloadFile(id uint) (*model.FileUpload, error) { + + var file model.FileUpload + + if err := s.db.First(&file, id).Error; err != nil { + + return nil, err + + } + + return &file, nil + +} + +func (s *UploadService) DeleteFile(id uint, userID uint) error { + + var file model.FileUpload + + if err := s.db.First(&file, id).Error; err != nil { + + return err + + } + + if file.UploadedBy != userID { + + return errors.New("无权删除此文件") + + } + + if err := os.Remove(file.FilePath); err != nil && !os.IsNotExist(err) { + + return err + + } + + return s.db.Delete(&file).Error + +} + +func (s *UploadService) GetDeviceFiles(deviceUID string) ([]model.FileUpload, error) { + + var files []model.FileUpload + + err := s.db.Where("device_uid = ?", deviceUID).Find(&files).Error + + return files, err + +} + +func (s *UploadService) UploadChunk( + + file *multipart.FileHeader, + + fileHash string, + + chunkNumber int, + + totalChunks int, + + totalSize int64, + + filename string, + + userID uint, + + deviceUID string, + +) error { + + // 创建分片存储目录 + + chunkDir := filepath.Join(s.config.Upload.Path, "chunks", fileHash) + + if err := os.MkdirAll(chunkDir, 0755); err != nil { + + return err + + } + + // 保存分片文件 + + chunkPath := filepath.Join(chunkDir, fmt.Sprintf("%d", chunkNumber)) + + src, err := file.Open() + + if err != nil { + + return err + + } + + defer src.Close() + + dst, err := os.Create(chunkPath) + + if err != nil { + + return err + + } + + defer dst.Close() + + if _, err = io.Copy(dst, src); err != nil { + + return err + + } + + // 记录分片信息 + + chunk := model.UploadChunk{ + + FileHash: fileHash, + + ChunkNumber: chunkNumber, + + ChunkSize: file.Size, + + ChunkPath: chunkPath, + + TotalChunks: totalChunks, + + TotalSize: totalSize, + + Filename: filename, + + FileType: strings.ToLower(filepath.Ext(filename)), + + UploadedBy: userID, + + DeviceUID: deviceUID, + } + + return s.db.Create(&chunk).Error + +} + +func (s *UploadService) CheckUploadStatus(fileHash string) (bool, error) { + + var chunks []model.UploadChunk + + if err := s.db.Where("file_hash = ?", fileHash).Find(&chunks).Error; err != nil { + + return false, err + + } + + if len(chunks) == 0 { + + return false, nil + + } + + totalChunks := chunks[0].TotalChunks + + return len(chunks) == totalChunks, nil + +} + +func (s *UploadService) MergeChunks(fileHash string) (*model.FileUpload, error) { + + var chunks []model.UploadChunk + + if err := s.db.Where("file_hash = ?", fileHash).Find(&chunks).Error; err != nil { + + return nil, err + + } + + if len(chunks) == 0 { + + return nil, errors.New("未找到文件分片") + + } + + if len(chunks) != chunks[0].TotalChunks { + + return nil, errors.New("文件分片不完整") + + } + + // 按分片序号排序 + + sort.Slice(chunks, func(i, j int) bool { + + return chunks[i].ChunkNumber < chunks[j].ChunkNumber + + }) + + // 创建最终文件 + + finalPath := filepath.Join(s.config.Upload.Path, fmt.Sprintf("%s%s", uuid.New().String(), chunks[0].FileType)) + + finalFile, err := os.Create(finalPath) + + if err != nil { + + return nil, err + + } + + defer finalFile.Close() + + // 合并分片 + + hash := sha256.New() + + for _, chunk := range chunks { + + chunkFile, err := os.Open(chunk.ChunkPath) + + if err != nil { + + return nil, err + + } + + if _, err = io.Copy(finalFile, chunkFile); err != nil { + + chunkFile.Close() + + return nil, err + + } + + if _, err = io.Copy(hash, chunkFile); err != nil { + + chunkFile.Close() + + return nil, err + + } + + chunkFile.Close() + + os.Remove(chunk.ChunkPath) // 删除已合并的分片 + + } + + // 验证文件哈希 + + if hex.EncodeToString(hash.Sum(nil)) != fileHash { + + os.Remove(finalPath) + + return nil, errors.New("文件哈希验证失败") + + } + + // 创建文件记录 + + upload := &model.FileUpload{ + + FileName: chunks[0].Filename, + + FilePath: finalPath, + + FileSize: chunks[0].TotalSize, + + FileType: chunks[0].FileType, + + UploadedBy: chunks[0].UploadedBy, + + DeviceUID: chunks[0].DeviceUID, + } + + if err := s.db.Create(upload).Error; err != nil { + + os.Remove(finalPath) + + return nil, err + + } + + // 清理分片记录 + + s.db.Where("file_hash = ?", fileHash).Delete(&model.UploadChunk{}) + + os.RemoveAll(filepath.Dir(chunks[0].ChunkPath)) + + return upload, nil + +} + +func (s *UploadService) CleanupExpiredChunks() error { + + expireTime := time.Now().Add(-24 * time.Hour) + + var expiredChunks []model.UploadChunk + + if err := s.db.Where("completed = ? AND created_at < ?", false, expireTime).Find(&expiredChunks).Error; err != nil { + + return err + + } + + for _, chunk := range expiredChunks { + + os.Remove(chunk.ChunkPath) + + if len(chunk.ChunkPath) > 0 { + + chunkDir := filepath.Dir(chunk.ChunkPath) + + os.RemoveAll(chunkDir) + + } + + } + + return s.db.Unscoped().Where("completed = ? AND created_at < ?", false, expireTime).Delete(&model.UploadChunk{}).Error + +} diff --git a/internal/service/user.go b/internal/service/user.go new file mode 100644 index 0000000..3978f30 --- /dev/null +++ b/internal/service/user.go @@ -0,0 +1,361 @@ +package service + +import ( + "errors" + + "fmt" + + "time" + + "licserver/internal/model" + + "licserver/internal/utils" + + "golang.org/x/crypto/bcrypt" + + "gorm.io/gorm" +) + +type UserService struct { + db *gorm.DB + config *utils.Config + captchaService *CaptchaService +} + +type UserProfile struct { + ID uint `json:"id"` + Username string `json:"username"` + Email string `json:"email"` + Role string `json:"role"` +} + +func NewUserService(db *gorm.DB, config *utils.Config) *UserService { + return &UserService{ + db: db, + config: config, + captchaService: NewCaptchaService(db, &config.Email), + } +} + +func (s *UserService) Register(username, password, email, captcha string) error { + // 验证验证码 + if err := s.captchaService.VerifyCaptcha(email, "register", captcha); err != nil { + return err + } + + // 检查用户名是否已存在 + var count int64 + s.db.Model(&model.User{}).Where("username = ?", username).Count(&count) + if count > 0 { + return errors.New("用户名已存在") + } + + // 检查邮箱是否已存在 + s.db.Model(&model.User{}).Where("email = ?", email).Count(&count) + if count > 0 { + return errors.New("邮箱已被注册") + } + + // 原有的注册逻辑 + hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) + if err != nil { + return err + } + + user := model.User{ + Username: username, + Password: string(hashedPassword), + Email: email, + Role: "user", + } + + return s.db.Create(&user).Error +} + +func (s *UserService) Login(username, password string) (string, error) { + var user model.User + if err := s.db.Where("username = ?", username).First(&user).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return "", errors.New("用户不存在") + } + return "", err + + } + if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(password)); err != nil { + return "", errors.New("密码错误") + } + + // 生成 JWT token + token, err := utils.GenerateToken(user.ID, user.Username, user.Role, &s.config.JWT) + if err != nil { + return "", err + } + + // 更新最后登录时间 + s.db.Model(&user).Update("last_login", gorm.Expr("CURRENT_TIMESTAMP")) + return token, nil + +} + +func (s *UserService) GetUserByID(id uint) (*UserProfile, error) { + var user model.User + if err := s.db.First(&user, id).Error; err != nil { + return nil, err + } + return &UserProfile{ + ID: user.ID, + Username: user.Username, + Email: user.Email, + Role: user.Role, + }, nil + +} + +func (s *UserService) UpdateProfile(userID uint, email string) error { + // 检查邮箱是否被其他用户使用 + var count int64 + if err := s.db.Model(&model.User{}).Where("email = ? AND id != ?", email, userID).Count(&count).Error; err != nil { + return err + } + if count > 0 { + return errors.New("邮箱已被其他用户使用") + } + + // 更新用户信息 + return s.db.Model(&model.User{}).Where("id = ?", userID).Update("email", email).Error +} + +func (s *UserService) ChangePassword(userID uint, oldPassword, newPassword string) error { + var user model.User + if err := s.db.First(&user, userID).Error; err != nil { + return err + } + + // 验证旧密码 + if err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(oldPassword)); err != nil { + return errors.New("旧密码错误") + } + + // 加密新密码 + hashedPassword, err := bcrypt.GenerateFromPassword([]byte(newPassword), bcrypt.DefaultCost) + if err != nil { + return err + } + return s.db.Model(&user).Update("password", string(hashedPassword)).Error +} + +func (s *UserService) ResetPassword(email, captcha string) error { + // 验证验证码 + if err := s.captchaService.VerifyCaptcha(email, "reset", captcha); err != nil { + return err + } + + // 原有的重置密码逻辑 + var user model.User + if err := s.db.Where("email = ?", email).First(&user).Error; err != nil { + return errors.New("邮箱不存在") + } + + // 生成重置令牌 + token, err := utils.GenerateResetToken() + if err != nil { + return err + } + + // 保存重置令牌 + resetToken := model.PasswordResetToken{ + UserID: user.ID, + Token: token, + ExpiresAt: time.Now().Add(24 * time.Hour), + Used: false, + } + if err := s.db.Create(&resetToken).Error; err != nil { + return err + } + + // 发送重置邮件 + emailService := utils.NewEmailService(&s.config.Email) + resetLink := fmt.Sprintf("http://localhost:%s/reset-password?token=%s", s.config.Server.Port, token) + emailBody := fmt.Sprintf(` +

密码重置

+

您好,%s

+

请点击以下链接重置您的密码:

+

重置密码

+

此链接将在24小时后失效。

+

如果您没有请求重置密码,请忽略此邮件。

+ `, user.Username, resetLink) + return emailService.SendEmail(user.Email, "密码重置", emailBody) + +} + +func (s *UserService) ValidateResetToken(token string) (*model.User, error) { + var resetToken model.PasswordResetToken + if err := s.db.Where("token = ? AND used = ? AND expires_at > ?", + token, false, time.Now()).First(&resetToken).Error; err != nil { + return nil, errors.New("无效或已过期的重置令牌") + } + + var user model.User + if err := s.db.First(&user, resetToken.UserID).Error; err != nil { + return nil, err + } + return &user, nil + +} + +func (s *UserService) ResetPasswordWithToken(token, newPassword string) error { + user, err := s.ValidateResetToken(token) + if err != nil { + return err + } + + // 更新密码 + hashedPassword, err := bcrypt.GenerateFromPassword([]byte(newPassword), bcrypt.DefaultCost) + if err != nil { + return err + } + + // 使用事务确保原子性 + return s.db.Transaction(func(tx *gorm.DB) error { + + if err := tx.Model(&user).Update("password", string(hashedPassword)).Error; err != nil { + return err + } + // 标记令牌为已使用 + if err := tx.Model(&model.PasswordResetToken{}). + Where("token = ?", token). + Update("used", true).Error; err != nil { + return err + } + return nil + }) +} + +func (s *UserService) SendRegisterCaptcha(email string) error { + // 检查邮箱是否已被注册 + var count int64 + s.db.Model(&model.User{}).Where("email = ?", email).Count(&count) + if count > 0 { + return errors.New("邮箱已被注册") + } + + return s.captchaService.SendEmailCaptcha(email, "register") +} + +func (s *UserService) SendResetPasswordCaptcha(email string) error { + var user model.User + if err := s.db.Where("email = ?", email).First(&user).Error; err != nil { + return errors.New("邮箱不存在") + } + + return s.captchaService.SendEmailCaptcha(email, "reset") +} + +func (s *UserService) GetCaptchaService() *CaptchaService { + return s.captchaService +} + +// GetUsers 获取用户列表 +func (s *UserService) GetUsers(username, role string, page, pageSize int) ([]UserProfile, int64, error) { + var users []model.User + var total int64 + var profiles []UserProfile + + query := s.db.Model(&model.User{}) + + if username != "" { + query = query.Where("username LIKE ?", "%"+username+"%") + } + if role != "" { + query = query.Where("role = ?", role) + } + + // 获取总数 + query.Count(&total) + + // 分页查询 + if page > 0 && pageSize > 0 { + offset := (page - 1) * pageSize + query = query.Offset(offset).Limit(pageSize) + } + + if err := query.Find(&users).Error; err != nil { + return nil, 0, err + } + + // 转换为 UserProfile + for _, user := range users { + profiles = append(profiles, UserProfile{ + ID: user.ID, + Username: user.Username, + Email: user.Email, + Role: user.Role, + }) + } + + return profiles, total, nil +} + +// CreateUser 创建新用户 +func (s *UserService) CreateUser(username, password, email, role string) error { + // 检查用户名是否已存在 + var count int64 + s.db.Model(&model.User{}).Where("username = ?", username).Count(&count) + if count > 0 { + return errors.New("用户名已存在") + } + + // 检查邮箱是否已存在 + s.db.Model(&model.User{}).Where("email = ?", email).Count(&count) + if count > 0 { + return errors.New("邮箱已被注册") + } + + // 加密密码 + hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) + if err != nil { + return err + } + + user := model.User{ + Username: username, + Password: string(hashedPassword), + Email: email, + Role: role, + } + + return s.db.Create(&user).Error +} + +// UpdateUser 更新用户信息 +func (s *UserService) UpdateUser(id uint, email, role string) error { + // 检查邮箱是否被其他用户使用 + var count int64 + s.db.Model(&model.User{}).Where("email = ? AND id != ?", email, id).Count(&count) + if count > 0 { + return errors.New("邮箱已被其他用户使用") + } + + return s.db.Model(&model.User{}).Where("id = ?", id).Updates(map[string]interface{}{ + "email": email, + "role": role, + }).Error +} + +// DeleteUser 删除用户 +func (s *UserService) DeleteUser(id uint) error { + // 检查是否为最后一个管理员 + var adminCount int64 + s.db.Model(&model.User{}).Where("role = ?", "admin").Count(&adminCount) + + var user model.User + if err := s.db.First(&user, id).Error; err != nil { + return err + } + + if user.Role == "admin" && adminCount <= 1 { + return errors.New("不能删除最后一个管理员") + } + + return s.db.Delete(&model.User{}, id).Error +} diff --git a/internal/service/user_test.go b/internal/service/user_test.go new file mode 100644 index 0000000..b0896cd --- /dev/null +++ b/internal/service/user_test.go @@ -0,0 +1,61 @@ +package service + +import ( + "licserver/internal/model" + "licserver/internal/utils" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestUserService_Register(t *testing.T) { + db := utils.TestDB(t) + config := utils.TestConfig() + userService := NewUserService(db, config) + + // 测试正常注册 + err := userService.Register("testuser", "password123", "test@example.com", "123456") + assert.NoError(t, err) + + var user model.User + err = db.Where("username = ?", "testuser").First(&user).Error + assert.NoError(t, err) + assert.Equal(t, "testuser", user.Username) + assert.Equal(t, "test@example.com", user.Email) + assert.Equal(t, "user", user.Role) + + // 测试重复用户名 + err = userService.Register("testuser", "password123", "test2@example.com", "123456") + assert.Error(t, err) + assert.Contains(t, err.Error(), "用户名已存在") + + // 测试重复邮箱 + err = userService.Register("testuser2", "password123", "test@example.com", "123456") + assert.Error(t, err) + assert.Contains(t, err.Error(), "邮箱已被注册") +} + +func TestUserService_Login(t *testing.T) { + db := utils.TestDB(t) + config := utils.TestConfig() + userService := NewUserService(db, config) + + // 创建测试用户 + err := userService.Register("testuser", "password123", "test@example.com", "123456") + assert.NoError(t, err) + + // 测试正确登录 + token, err := userService.Login("testuser", "password123") + assert.NoError(t, err) + assert.NotEmpty(t, token) + + // 测试错误密码 + _, err = userService.Login("testuser", "wrongpassword") + assert.Error(t, err) + assert.Contains(t, err.Error(), "密码错误") + + // 测试不存在的用户 + _, err = userService.Login("nonexistent", "password123") + assert.Error(t, err) + assert.Contains(t, err.Error(), "用户不存在") +} diff --git a/internal/utils/captcha.go b/internal/utils/captcha.go new file mode 100644 index 0000000..09e5a62 --- /dev/null +++ b/internal/utils/captcha.go @@ -0,0 +1,31 @@ +package utils + +import ( + "crypto/rand" + "fmt" +) + +// GenerateCaptcha 生成6位数字验证码 +func GenerateCaptcha() (string, error) { + // 生成6位随机数字 + b := make([]byte, 3) + if _, err := rand.Read(b); err != nil { + return "", err + } + + // 将随机字节转换为6位数字 + num := int(b[0])<<16 | int(b[1])<<8 | int(b[2]) + return fmt.Sprintf("%06d", num%1000000), nil +} + +// GenerateEmailCaptchaContent 生成验证码邮件内容 +func GenerateEmailCaptchaContent(code, username, action string) string { + return fmt.Sprintf(` +

验证码

+

您好,%s

+

您正在进行%s操作,验证码为:

+

%s

+

验证码有效期为5分钟,请勿泄露给他人。

+

如果这不是您的操作,请忽略此邮件。

+ `, username, action, code) +} diff --git a/internal/utils/config.go b/internal/utils/config.go new file mode 100644 index 0000000..122663c --- /dev/null +++ b/internal/utils/config.go @@ -0,0 +1,77 @@ +package utils + +import ( + "os" + + "github.com/spf13/viper" +) + +type Config struct { + Server ServerConfig + Database DatabaseConfig + JWT JWTConfig + Email EmailConfig + Upload UploadConfig + Site SiteConfig +} + +type ServerConfig struct { + Port string + Mode string +} + +type DatabaseConfig struct { + Type string + Path string +} + +type JWTConfig struct { + Secret string + Expire string +} + +type EmailConfig struct { + Host string + Port int + Username string + Password string +} + +type UploadConfig struct { + Path string +} + +type SiteConfig struct { + Title string `mapstructure:"title"` + Description string `mapstructure:"description"` + BaseURL string `mapstructure:"base_url"` + ICP string `mapstructure:"icp"` + Copyright string `mapstructure:"copyright"` + Logo string `mapstructure:"logo"` + Favicon string `mapstructure:"favicon"` +} + +func LoadConfig() (*Config, error) { + viper.SetConfigName("config") + viper.SetConfigType("yaml") + viper.AddConfigPath("./config") + + // 读取环境变量 + viper.AutomaticEnv() + + if err := viper.ReadInConfig(); err != nil { + return nil, err + } + + config := &Config{} + if err := viper.Unmarshal(config); err != nil { + return nil, err + } + + // 环境变量优先 + if port := os.Getenv("SERVER_PORT"); port != "" { + config.Server.Port = port + } + + return config, nil +} diff --git a/internal/utils/config_persist.go b/internal/utils/config_persist.go new file mode 100644 index 0000000..653196c --- /dev/null +++ b/internal/utils/config_persist.go @@ -0,0 +1,232 @@ +package utils + +import ( + "encoding/json" + + "fmt" + + "os" + + "path/filepath" + + "sync" + + "time" +) + +type ConfigVersion struct { + Version int `json:"version"` + UpdatedAt time.Time `json:"updated_at"` + UpdatedBy string `json:"updated_by"` + Comment string `json:"comment"` +} + +type ConfigWithVersion struct { + Config *Config `json:"config"` + Version ConfigVersion `json:"version"` +} + +var ( + configMutex sync.RWMutex + + configFile = "config/config.json" // JSON格式更适合动态更新 + +) + +// SaveConfig 保存配置到文件 + +func SaveConfig(config *Config, updatedBy, comment string) error { + + configMutex.Lock() + + defer configMutex.Unlock() + + // 读取当前版本 + + currentVersion := 0 + + if existing, err := LoadPersistedConfig(); err == nil { + + currentVersion = existing.Version.Version + + } + + // 创建新的配置版本 + + configWithVersion := ConfigWithVersion{ + + Config: config, + + Version: ConfigVersion{ + + Version: currentVersion + 1, + + UpdatedAt: time.Now(), + + UpdatedBy: updatedBy, + + Comment: comment, + }, + } + + // 确保配置目录存在 + + configDir := filepath.Dir(configFile) + + if err := os.MkdirAll(configDir, 0755); err != nil { + + return err + + } + + // 备份旧配置 + + if err := backupConfig(); err != nil { + + return err + + } + + // 将配置转换为JSON + + data, err := json.MarshalIndent(configWithVersion, "", " ") + + if err != nil { + + return err + + } + + // 写入文件 + + return os.WriteFile(configFile, data, 0644) + +} + +// LoadPersistedConfig 加载持久化的配置 + +func LoadPersistedConfig() (*ConfigWithVersion, error) { + + configMutex.RLock() + + defer configMutex.RUnlock() + + // 检查配置文件是否存在 + + if _, err := os.Stat(configFile); os.IsNotExist(err) { + + // 如果不存在,创建默认配置 + + config, err := LoadConfig() + + if err != nil { + + return nil, err + + } + + return &ConfigWithVersion{ + + Config: config, + + Version: ConfigVersion{ + + Version: 1, + + UpdatedAt: time.Now(), + + UpdatedBy: "system", + + Comment: "初始配置", + }, + }, nil + + } + + // 读取配置文件 + + data, err := os.ReadFile(configFile) + + if err != nil { + + return nil, err + + } + + // 解析JSON配置 + + var configWithVersion ConfigWithVersion + + if err := json.Unmarshal(data, &configWithVersion); err != nil { + + return nil, err + + } + + return &configWithVersion, nil + +} + +// MergeConfig 合并配置(环境变量优先) + +func MergeConfig(persisted, env *Config) *Config { + + if env.Server.Port != "" { + + persisted.Server.Port = env.Server.Port + + } + + if env.Server.Mode != "" { + + persisted.Server.Mode = env.Server.Mode + + } + + // ... 其他配置项的合并 ... + + return persisted + +} + +// backupConfig 备份配置文件 + +func backupConfig() error { + + if _, err := os.Stat(configFile); os.IsNotExist(err) { + + return nil + + } + + // 确保备份目录存在 + + backupDir := "config/backups" + + if err := os.MkdirAll(backupDir, 0755); err != nil { + + return err + + } + + // 读取当前配置 + + data, err := os.ReadFile(configFile) + + if err != nil { + + return err + + } + + // 创建备份文件名 + + backupFile := filepath.Join(backupDir, + + fmt.Sprintf("config_%s.json", time.Now().Format("20060102150405"))) + + // 写入备份文件 + + return os.WriteFile(backupFile, data, 0644) + +} diff --git a/internal/utils/database.go b/internal/utils/database.go new file mode 100644 index 0000000..1719aa4 --- /dev/null +++ b/internal/utils/database.go @@ -0,0 +1,56 @@ +package utils + +import ( + "licserver/internal/model" + + "gorm.io/driver/sqlite" + + "gorm.io/gorm" +) + +func InitDB(config *DatabaseConfig) (*gorm.DB, error) { + + db, err := gorm.Open(sqlite.Open(config.Path), &gorm.Config{}) + + if err != nil { + + return nil, err + + } + + // 自动迁移数据库结构 + + err = db.AutoMigrate( + + &model.User{}, + + &model.Device{}, + + &model.DeviceModel{}, + + &model.PasswordResetToken{}, + + &model.Captcha{}, + + &model.FileUpload{}, + + &model.UploadChunk{}, + + &model.LicenseCode{}, + + &model.LicenseLog{}, + + &model.AccessToken{}, + + &model.TokenLog{}, + ) + + if err != nil { + + return nil, err + + } + + return db, nil + +} diff --git a/internal/utils/email.go b/internal/utils/email.go new file mode 100644 index 0000000..309fbde --- /dev/null +++ b/internal/utils/email.go @@ -0,0 +1,40 @@ +package utils + +import ( + "crypto/rand" + "encoding/hex" + "fmt" + "net/smtp" +) + +type EmailService struct { + config *EmailConfig + auth smtp.Auth +} + +func NewEmailService(config *EmailConfig) *EmailService { + auth := smtp.PlainAuth("", config.Username, config.Password, config.Host) + return &EmailService{ + config: config, + auth: auth, + } +} + +func (s *EmailService) SendEmail(to, subject, body string) error { + addr := fmt.Sprintf("%s:%d", s.config.Host, s.config.Port) + msg := []byte(fmt.Sprintf("To: %s\r\n"+ + "Subject: %s\r\n"+ + "Content-Type: text/html; charset=UTF-8\r\n"+ + "\r\n"+ + "%s\r\n", to, subject, body)) + + return smtp.SendMail(addr, s.auth, s.config.Username, []string{to}, msg) +} + +func GenerateResetToken() (string, error) { + b := make([]byte, 16) + if _, err := rand.Read(b); err != nil { + return "", err + } + return hex.EncodeToString(b), nil +} diff --git a/internal/utils/errors.go b/internal/utils/errors.go new file mode 100644 index 0000000..5858cdd --- /dev/null +++ b/internal/utils/errors.go @@ -0,0 +1,29 @@ +package utils + +import "errors" + +var ( + // 通用错误 + ErrInvalidInput = errors.New("无效的输入") + ErrNotFound = errors.New("资源不存在") + ErrUnauthorized = errors.New("未授权的访问") + ErrForbidden = errors.New("禁止访问") + + // 授权相关错误 + ErrInvalidToken = errors.New("无效的令牌") + ErrTokenExpired = errors.New("令牌已过期") + ErrInvalidCaptcha = errors.New("无效的验证码") + ErrCaptchaExpired = errors.New("验证码已过期") + ErrInvalidLicense = errors.New("无效的授权码") + ErrLicenseExpired = errors.New("授权码已过期") + ErrLicenseUsed = errors.New("授权码已被使用") + ErrDeviceNotFound = errors.New("设备不存在") + ErrDeviceRegistered = errors.New("设备已注册") +) + +// ErrorResponse 统一错误响应结构 +type ErrorResponse struct { + Code int `json:"code"` + Message string `json:"message"` + Detail string `json:"detail,omitempty"` +} diff --git a/internal/utils/jwt.go b/internal/utils/jwt.go new file mode 100644 index 0000000..42e3cde --- /dev/null +++ b/internal/utils/jwt.go @@ -0,0 +1,51 @@ +package utils + +import ( + "errors" + "time" + + "github.com/golang-jwt/jwt/v5" +) + +type Claims struct { + UserID uint + Username string + Role string + jwt.RegisteredClaims +} + +func GenerateToken(userID uint, username, role string, config *JWTConfig) (string, error) { + expDuration, err := time.ParseDuration(config.Expire) + if err != nil { + return "", err + } + + claims := Claims{ + UserID: userID, + Username: username, + Role: role, + RegisteredClaims: jwt.RegisteredClaims{ + ExpiresAt: jwt.NewNumericDate(time.Now().Add(expDuration)), + IssuedAt: jwt.NewNumericDate(time.Now()), + }, + } + + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + return token.SignedString([]byte(config.Secret)) +} + +func ParseToken(tokenString string, config *JWTConfig) (*Claims, error) { + token, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) { + return []byte(config.Secret), nil + }) + + if err != nil { + return nil, err + } + + if claims, ok := token.Claims.(*Claims); ok && token.Valid { + return claims, nil + } + + return nil, errors.New("invalid token") +} diff --git a/internal/utils/logger.go b/internal/utils/logger.go new file mode 100644 index 0000000..89e21a5 --- /dev/null +++ b/internal/utils/logger.go @@ -0,0 +1,50 @@ +package utils + +import ( + "fmt" + "os" + "path/filepath" + "time" +) + +type Logger struct { + logFile *os.File +} + +func NewLogger(logPath string) (*Logger, error) { + // 确保日志目录存在 + if err := os.MkdirAll(filepath.Dir(logPath), 0755); err != nil { + return nil, err + } + + // 打开日志文件 + file, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) + if err != nil { + return nil, err + } + + return &Logger{logFile: file}, nil +} + +func (l *Logger) Info(format string, args ...interface{}) { + l.log("INFO", format, args...) +} + +func (l *Logger) Error(format string, args ...interface{}) { + l.log("ERROR", format, args...) +} + +func (l *Logger) Debug(format string, args ...interface{}) { + l.log("DEBUG", format, args...) +} + +func (l *Logger) log(level, format string, args ...interface{}) { + timestamp := time.Now().Format("2006-01-02 15:04:05") + message := fmt.Sprintf(format, args...) + logLine := fmt.Sprintf("[%s] [%s] %s\n", timestamp, level, message) + l.logFile.WriteString(logLine) +} + +func (l *Logger) Close() error { + return l.logFile.Close() +} diff --git a/internal/utils/test_helper.go b/internal/utils/test_helper.go new file mode 100644 index 0000000..6b9f46f --- /dev/null +++ b/internal/utils/test_helper.go @@ -0,0 +1,68 @@ +package utils + +import ( + "licserver/internal/model" + "testing" + + "github.com/stretchr/testify/assert" + "gorm.io/driver/sqlite" + "gorm.io/gorm" +) + +// TestDB 创建测试数据库连接 +func TestDB(t *testing.T) *gorm.DB { + db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) + assert.NoError(t, err) + + // 迁移测试表 + err = db.AutoMigrate( + &model.User{}, + &model.Device{}, + &model.DeviceModel{}, + &model.LicenseCode{}, + &model.LicenseLog{}, + &model.AccessToken{}, + &model.TokenLog{}, + &model.Captcha{}, + &model.PasswordResetToken{}, + &model.FileUpload{}, + &model.UploadChunk{}, + ) + assert.NoError(t, err) + + return db +} + +// TestConfig 创建测试配置 +func TestConfig() *Config { + return &Config{ + Server: ServerConfig{ + Port: "8080", + Mode: "test", + }, + Database: DatabaseConfig{ + Type: "sqlite3", + Path: ":memory:", + }, + JWT: JWTConfig{ + Secret: "test-secret", + Expire: "24h", + }, + Email: EmailConfig{ + Host: "smtp.example.com", + Port: 587, + Username: "test@example.com", + Password: "test-password", + }, + Upload: UploadConfig{ + Path: "./test-uploads", + }, + Site: SiteConfig{ + Title: "Test Site", + Description: "Test Description", + BaseURL: "http://localhost:8080", + ICP: "Test ICP", + Copyright: "Test Copyright", + }, + } +} diff --git a/licserver.exe b/licserver.exe new file mode 100644 index 0000000..bcf0a66 Binary files /dev/null and b/licserver.exe differ diff --git a/scripts/test.sh b/scripts/test.sh new file mode 100644 index 0000000..ebc7b54 --- /dev/null +++ b/scripts/test.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +# 运行所有测试 +go test -v ./... + +# 运行指定包的测试 +# go test -v ./internal/service/... + +# 运行指定测试 +# go test -v ./internal/service -run TestLicenseService + +# 生成测试覆盖率报告 +go test -coverprofile=coverage.out ./... +go tool cover -html=coverage.out -o coverage.html \ No newline at end of file diff --git a/start.ps1 b/start.ps1 new file mode 100644 index 0000000..eb239de --- /dev/null +++ b/start.ps1 @@ -0,0 +1,121 @@ +# Set console encoding to UTF-8 +[Console]::OutputEncoding = [System.Text.Encoding]::UTF8 +$OutputEncoding = [System.Text.Encoding]::UTF8 +[System.Console]::OutputEncoding = [System.Text.Encoding]::UTF8 + +# Set error action preference +$ErrorActionPreference = "Stop" + +# Define color output function +function Write-ColorOutput($ForegroundColor) { + $fc = $host.UI.RawUI.ForegroundColor + $host.UI.RawUI.ForegroundColor = $ForegroundColor + if ($args) { + Write-Output $args + } + $host.UI.RawUI.ForegroundColor = $fc +} + +# Create necessary directories +Write-ColorOutput Green "Creating necessary directories..." +$directories = @("config", "data", "uploads") +foreach ($dir in $directories) { + if (-not (Test-Path $dir)) { + New-Item -ItemType Directory -Path $dir | Out-Null + Write-ColorOutput Yellow "Created directory: $dir" + } +} + +# Check if config file exists +$configPath = "config/config.yaml" +if (-not (Test-Path $configPath)) { + Write-ColorOutput Green "Creating default configuration file..." + $configContent = @" +server: + port: 8081 + mode: debug + +database: + type: sqlite3 + path: ./data/license.db + +jwt: + secret: your-secret-key-change-this + expire: 24h + +email: + host: smtp.example.com + port: 587 + username: your-email@example.com + password: your-password + +upload: + path: ./uploads + +site: + title: "授权验证管理平台" + description: "专业的软件授权和设备管理平台" + base_url: "http://localhost:8080" + icp: "京ICP备XXXXXXXX号-1" + copyright: "© 2024 Your Company Name. All rights reserved." + logo: "/static/images/logo.png" + favicon: "/static/images/favicon.ico" +"@ + $configContent | Out-File -FilePath $configPath -Encoding UTF8 + Write-ColorOutput Yellow "Created default config file: $configPath" +} + +# Compile program +Write-ColorOutput Green "Compiling program..." +try { + go build -o licserver.exe cmd/main.go + if ($LASTEXITCODE -ne 0) { + throw "Compilation failed" + } + Write-ColorOutput Yellow "Compilation successful" +} +catch { + Write-ColorOutput Red "Compilation failed: $_" + exit 1 +} + +# Start server +Write-ColorOutput Green "Starting server..." +try { + # Check if port is in use + $port = 8081 + $portInUse = Get-NetTCPConnection -LocalPort $port -ErrorAction SilentlyContinue + if ($portInUse) { + throw "Port $port is already in use" + } + + # Start server + .\licserver.exe + + # Capture Ctrl+C + $handler = { + Write-ColorOutput Yellow "`nShutting down server..." + Stop-Process -Name "licserver" -Force -ErrorAction SilentlyContinue + } + $null = Register-ObjectEvent -InputObject ([Console]) -EventName CancelKeyPress -Action $handler +} +catch { + Write-ColorOutput Red "Startup failed: $_" + exit 1 +} + +# 检查并下载 echarts +$echartsPath = "web/static/lib/echarts.min.js" +if (-not (Test-Path $echartsPath)) { + Write-ColorOutput Green "Downloading echarts..." + $echartsUrl = "https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js" + + try { + Invoke-WebRequest -Uri $echartsUrl -OutFile $echartsPath + Write-ColorOutput Yellow "Downloaded echarts successfully" + } + catch { + Write-ColorOutput Red "Failed to download echarts: $_" + exit 1 + } +} \ No newline at end of file diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..5980f3a --- /dev/null +++ b/start.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# 确保配置目录存在 +mkdir -p config +mkdir -p data +mkdir -p uploads + +# 检查配置文件是否存在 +if [ ! -f config/config.yaml ]; then + echo "创建默认配置文件..." + cat > config/config.yaml << EOF +server: + port: 8080 + mode: debug + +database: + type: sqlite3 + path: ./data/license.db + +jwt: + secret: your-secret-key-change-this + expire: 24h + +email: + host: smtp.example.com + port: 587 + username: your-email@example.com + password: your-password + +upload: + path: ./uploads + +site: + title: "授权验证管理平台" + description: "专业的软件授权和设备管理平台" + base_url: "http://localhost:8080" + icp: "京ICP备XXXXXXXX号-1" + copyright: "© 2024 Your Company Name. All rights reserved." + logo: "/static/images/logo.png" + favicon: "/static/images/favicon.ico" +EOF +fi + +# 编译并运行 +echo "编译程序..." +go build -o licserver cmd/main.go + +echo "启动服务器..." +./licserver \ No newline at end of file diff --git a/web/static/css/style.css b/web/static/css/style.css new file mode 100644 index 0000000..24334f5 --- /dev/null +++ b/web/static/css/style.css @@ -0,0 +1,298 @@ +/* 全局样式 */ + +.login-body { + background-color: #f2f2f2; + + padding-top: 100px; +} + +.login-box { + background-color: #fff; + + padding: 30px; + + border-radius: 4px; + + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); +} + +.login-box h2 { + text-align: center; + + margin-bottom: 30px; +} + +.forget-pwd { + float: left; +} + +.register { + float: right; +} + +.captcha-img { + width: 100%; + + height: 38px; + + cursor: pointer; +} + +/* 主界面样式 */ + +.layui-layout-admin .layui-body { + padding: 15px; + + background-color: #f2f2f2; +} + +.layui-card { + margin-bottom: 15px; +} + +.layui-card-header { + display: flex; + + justify-content: space-between; + + align-items: center; +} + +/* 文件上传相关样式 */ + +.upload-progress { + margin: 10px 0; +} + +.file-list { + margin-top: 20px; +} + +.file-item { + display: flex; + + align-items: center; + + padding: 10px; + + border-bottom: 1px solid #eee; +} + +.file-info { + flex: 1; +} + +.file-name { + font-weight: bold; +} + +.file-meta { + color: #999; + + font-size: 12px; +} + +.file-actions { + margin-left: 20px; +} + +.upload-form { + padding: 20px; +} + +.selected-file { + margin-left: 10px; + + color: #666; +} + +.layui-progress { + margin: 10px 0; +} + +/* 上传按钮组样式 */ + +.layui-card-header .layui-btn-group { + float: right; +} + +/* 文件列表表格样式 */ + +.layui-table { + margin-top: 15px; +} + +.layui-table th { + font-weight: bold; + + background-color: #f2f2f2; +} + +/* 上传进度条样式 */ + +.upload-progress-container { + margin: 10px 0; + + padding: 10px; + + background-color: #f8f8f8; + + border-radius: 4px; +} + +.upload-progress-info { + margin-top: 5px; + + font-size: 12px; + + color: #666; +} + +/* 主界面布局样式 */ + +.layui-layout-admin .layui-logo { + display: flex; + + align-items: center; + + padding: 0 20px; +} + +.layui-layout-admin .layui-logo img { + height: 30px; + + margin-right: 10px; +} + +.layui-layout-admin .layui-logo span { + color: #fff; + + font-size: 18px; + + font-weight: 600; +} + +.layui-nav .layui-icon { + margin-right: 10px; +} + +/* 底部样式 */ + +.layui-footer { + display: flex; + + justify-content: space-between; + + align-items: center; + + padding: 0 20px; + + color: #666; + + font-size: 12px; +} + +.footer-left { + font-size: 12px; +} + +.footer-right a { + color: #666; + + text-decoration: none; +} + +.footer-right a:hover { + color: #009688; +} + +.captcha-img { + height: 38px; + + cursor: pointer; +} + +.layui-form-item .captcha-wrapper { + display: flex; + + align-items: center; +} + +.layui-form-item .captcha-input { + margin-right: 10px; +} + +/* 主页布局样式 */ +.layui-layout-admin .layui-logo { + display: flex; + align-items: center; + padding: 0 20px; + color: #fff; + font-size: 18px; +} + +.layui-layout-admin .layui-logo img { + height: 30px; + margin-right: 10px; +} + +.content-container { + padding: 15px; + height: calc(100% - 50px); +} + +.layadmin-iframe { + width: 100%; + height: 100%; + background-color: #fff; +} + +.layui-breadcrumb { + padding: 10px 15px; + background-color: #fff; + box-shadow: 0 1px 2px 0 rgba(0,0,0,.05); +} + +/* 导航菜单样式 */ +.layui-nav .layui-icon { + margin-right: 10px; + font-size: 16px; +} + +.layui-nav-item a { + font-size: 14px; +} + +.layui-nav-child dd { + padding-left: 20px; +} + +/* 底部样式 */ +.layui-footer { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 15px; + color: #666; + font-size: 12px; +} + +/* 响应式布局 */ +@media screen and (max-width: 768px) { + .layui-side { + display: none; + } + .layui-body { + left: 0; + } + .layui-footer { + left: 0; + } +} + +/* 统计卡片样式 */ +.big-font { + font-size: 24px; + font-weight: bold; + color: #009688; +} diff --git a/web/static/images/logo.png b/web/static/images/logo.png new file mode 100644 index 0000000..48dcebf Binary files /dev/null and b/web/static/images/logo.png differ diff --git a/web/static/js/dashboard.js b/web/static/js/dashboard.js new file mode 100644 index 0000000..85642a2 --- /dev/null +++ b/web/static/js/dashboard.js @@ -0,0 +1,41 @@ +layui.use(['layer'], function(){ + var layer = layui.layer; + var $ = layui.$; + + // 加载统计数据 + function loadStats() { + fetch('/api/dashboard/stats', { + credentials: 'include' + }) + .then(response => { + if (response.status === 401) { + window.location.href = '/login'; + throw new Error('认证失败'); + } + return response.json(); + }) + .then(result => { + if (result.error) { + layer.msg(result.error); + return; + } + + // 更新统计数据 + $('#total-devices').text(result.data.total_devices); + $('#total-licenses').text(result.data.total_licenses); + $('#today-new').text(result.data.today_new); + $('#online-devices').text(result.data.online_devices); + $('#active-devices').text(result.data.active_devices); + $('#expired-devices').text(result.data.expired_devices); + }) + .catch(error => { + layer.msg('加载统计数据失败:' + error.message); + }); + } + + // 初始加载 + loadStats(); + + // 定时刷新(每30秒) + setInterval(loadStats, 30000); +}); \ No newline at end of file diff --git a/web/static/js/device-files.js b/web/static/js/device-files.js new file mode 100644 index 0000000..46d0723 --- /dev/null +++ b/web/static/js/device-files.js @@ -0,0 +1,198 @@ +layui.use(['upload', 'table', 'layer', 'form'], function(){ + var upload = layui.upload; + var table = layui.table; + var layer = layui.layer; + var form = layui.form; + var $ = layui.$; + + // 获取设备型号 + var deviceModel = decodeURIComponent(location.search.match(/model=([^&]+)/)[1]); + + // 初始化表格 + table.render({ + elem: '#file-table', + url: '/api/uploads/device/' + deviceModel, + headers: { + 'Authorization': 'Bearer ' + localStorage.getItem('token') + }, + toolbar: '#tableToolbar', + defaultToolbar: ['filter', 'exports', 'print'], + cols: [[ + {type: 'checkbox'}, + {field: 'file_name', title: '文件名', width: 200}, + {field: 'version', title: '版本', width: 100}, + {field: 'file_type', title: '类型', width: 100, templet: function(d){ + if(d.is_update) return '更新'; + return '普通'; + }}, + {field: 'file_size', title: '大小', width: 120, templet: function(d){ + return formatFileSize(d.file_size); + }}, + {field: 'downloads', title: '下载次数', width: 100}, + {field: 'description', title: '描述'}, + {field: 'created_at', title: '上传时间', width: 160, templet: function(d){ + return new Date(d.created_at).toLocaleString(); + }}, + {fixed: 'right', title: '操作', toolbar: '#tableRowBar', width: 180} + ]], + page: true, + parseData: function(res) { + if (res.code === 401) { + window.location.href = '/login'; + return; + } + return res; + } + }); + + // 上传普通文件 + upload.render({ + elem: '#uploadFile', + url: '/api/uploads', + headers: { + 'Authorization': 'Bearer ' + localStorage.getItem('token') + }, + data: { + device_model: deviceModel, + is_update: false + }, + accept: 'file', + before: function(obj){ + layer.load(); + }, + done: function(res){ + layer.closeAll('loading'); + if(res.error){ + layer.msg(res.error); + return; + } + layer.msg('上传成功'); + table.reload('file-table'); + }, + error: function(){ + layer.closeAll('loading'); + layer.msg('上传失败'); + } + }); + + // 上传更新文件 + upload.render({ + elem: '#uploadUpdate', + url: '/api/uploads', + headers: { + 'Authorization': 'Bearer ' + localStorage.getItem('token') + }, + data: { + device_model: deviceModel, + is_update: true + }, + accept: 'file', + before: function(obj){ + // 弹出版本信息输入框 + layer.prompt({ + formType: 0, + title: '请输入版本号', + area: ['300px', '150px'] + }, function(value, index, elem){ + this.field.version = value; + layer.close(index); + layer.load(); + }); + }, + done: function(res){ + layer.closeAll('loading'); + if(res.error){ + layer.msg(res.error); + return; + } + layer.msg('上传成功'); + table.reload('file-table'); + }, + error: function(){ + layer.closeAll('loading'); + layer.msg('上传失败'); + } + }); + + // 表格工具栏事件 + table.on('toolbar(file-table)', function(obj){ + var checkStatus = table.checkStatus(obj.config.id); + + switch(obj.event){ + case 'refresh': + table.reload('file-table'); + break; + case 'batchDel': + var data = checkStatus.data; + if(data.length === 0){ + layer.msg('请选择要删除的文件'); + return; + } + layer.confirm('确定删除选中的文件吗?', function(index){ + var ids = data.map(item => item.id); + Promise.all(ids.map(id => + fetch('/api/uploads/' + id, { + method: 'DELETE', + headers: { + 'Authorization': 'Bearer ' + localStorage.getItem('token') + } + }).then(response => response.json()) + )) + .then(() => { + layer.msg('批量删除成功'); + table.reload('file-table'); + }) + .catch(error => { + layer.msg('批量删除失败:' + error.message); + }); + layer.close(index); + }); + break; + } + }); + + // 行工具栏事件 + table.on('tool(file-table)', function(obj){ + var data = obj.data; + + switch(obj.event){ + case 'download': + window.location.href = '/api/uploads/' + data.id; + break; + case 'del': + layer.confirm('确定删除该文件吗?', function(index){ + fetch('/api/uploads/' + data.id, { + method: 'DELETE', + headers: { + 'Authorization': 'Bearer ' + localStorage.getItem('token') + } + }) + .then(response => response.json()) + .then(result => { + if(result.error){ + layer.msg(result.error); + return; + } + layer.msg('删除成功'); + obj.del(); + }) + .catch(error => { + layer.msg('删除失败:' + error.message); + }); + layer.close(index); + }); + break; + } + }); + + // 格式化文件大小 + function formatFileSize(size) { + var units = ['B', 'KB', 'MB', 'GB', 'TB']; + var index = 0; + while(size >= 1024 && index < units.length - 1) { + size /= 1024; + index++; + } + return size.toFixed(2) + ' ' + units[index]; + } +}); \ No newline at end of file diff --git a/web/static/js/device-license.js b/web/static/js/device-license.js new file mode 100644 index 0000000..c4cfcad --- /dev/null +++ b/web/static/js/device-license.js @@ -0,0 +1,202 @@ +layui.use(['table', 'form', 'layer'], function(){ + var table = layui.table; + var form = layui.form; + var layer = layui.layer; + var $ = layui.$; + + // 加载设备型号列表 + fetch('/api/devices/models', { + credentials: 'include' + }) + .then(response => response.json()) + .then(result => { + if(result.data) { + var options = ''; + result.data.forEach(function(model) { + options += ''; + }); + $('select[name=device_model]').html(options); + form.render('select'); + } + }); + + // 初始化表格 + table.render({ + elem: '#device-table', + url: '/api/devices/registered', // 已注册设备列表接口 + headers: undefined, + toolbar: '#tableToolbar', + defaultToolbar: ['filter', 'exports', 'print'], + cols: [[ + {type: 'checkbox'}, + {field: 'uid', title: '设备UID', width: 180}, + {field: 'device_model', title: '设备型号', width: 120}, + {field: 'license_code', title: '授权码', width: 180}, + {field: 'license_type', title: '授权类型', width: 100, templet: function(d){ + var types = { + 'time': '时间授权', + 'count': '次数授权', + 'permanent': '永久授权' + }; + return types[d.license_type] || '-'; + }}, + {field: 'expire_time', title: '过期时间', width: 160, templet: function(d){ + return d.expire_time ? new Date(d.expire_time).toLocaleString() : '-'; + }}, + {field: 'start_count', title: '启动次数', width: 100}, + {field: 'status', title: '状态', width: 100, templet: function(d){ + if(d.status === 'active') return '正常'; + if(d.status === 'expired') return '已过期'; + return '未激活'; + }}, + {field: 'last_active_at', title: '最后活跃', width: 160, templet: function(d){ + return d.last_active_at ? new Date(d.last_active_at).toLocaleString() : '-'; + }}, + {fixed: 'right', title: '操作', toolbar: '#tableRowBar', width: 250} + ]], + page: true, + parseData: function(res) { + if (res.code === 401) { + window.location.href = '/login'; + return; + } + return res; + } + }); + + // 表格工具栏事件 + table.on('toolbar(device-table)', function(obj){ + switch(obj.event){ + case 'refresh': + table.reload('device-table'); + break; + } + }); + + // 行工具栏事件 + table.on('tool(device-table)', function(obj){ + var data = obj.data; + + switch(obj.event){ + case 'view': + layer.open({ + type: 1, + title: '设备详情', + area: ['600px', '500px'], + content: laytpl($('#deviceDetailTpl').html()).render(data) + }); + break; + case 'bind': + layer.prompt({ + formType: 0, + value: '', + title: '请输入授权码', + area: ['300px', '150px'] + }, function(value, index, elem){ + // 绑定授权码 + fetch('/api/devices/' + data.uid + '/license', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + credentials: 'include', + body: JSON.stringify({ + license_code: value + }) + }) + .then(response => response.json()) + .then(result => { + if(result.error) { + layer.msg(result.error); + return; + } + layer.msg('绑定成功'); + table.reload('device-table'); + layer.close(index); + }) + .catch(error => { + layer.msg('绑定失败:' + error.message); + }); + }); + break; + case 'logs': + layer.open({ + type: 2, + title: '设备日志', + area: ['800px', '600px'], + content: '/admin/device-logs?uid=' + data.uid + }); + break; + case 'revoke': + layer.confirm('确定要撤销该设备的授权吗?', function(index){ + fetch('/api/devices/' + data.uid + '/license', { + method: 'DELETE', + credentials: 'include' + }) + .then(response => response.json()) + .then(result => { + if(result.error) { + layer.msg(result.error); + return; + } + layer.msg('撤销成功'); + table.reload('device-table'); + }) + .catch(error => { + layer.msg('撤销失败:' + error.message); + }); + layer.close(index); + }); + break; + } + }); + + // 搜索表单提交 + form.on('submit(search)', function(data){ + table.reload('device-table', { + where: data.field, + page: { + curr: 1 + } + }); + return false; + }); + + // 导出设备列表 + $('#export-devices').on('click', function(){ + var checkStatus = table.checkStatus('device-table'); + var data = checkStatus.data; + if(data.length === 0){ + layer.msg('请选择要导出的设备'); + return; + } + + // 创建CSV内容 + var csv = '设备UID,设备型号,授权码,授权类型,过期时间,启动次数,状态,最后活跃\n'; + data.forEach(function(item){ + csv += [ + item.uid, + item.device_model, + item.license_code || '', + item.license_type || '', + item.expire_time ? new Date(item.expire_time).toLocaleString() : '', + item.start_count, + item.status, + item.last_active_at ? new Date(item.last_active_at).toLocaleString() : '' + ].join(',') + '\n'; + }); + + // 下载文件 + var blob = new Blob([csv], { type: 'text/csv;charset=utf-8;' }); + var link = document.createElement("a"); + if (link.download !== undefined) { + var url = URL.createObjectURL(blob); + link.setAttribute("href", url); + link.setAttribute("download", "devices.csv"); + link.style.visibility = 'hidden'; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } + }); +}); \ No newline at end of file diff --git a/web/static/js/devices.js b/web/static/js/devices.js new file mode 100644 index 0000000..f32dbd5 --- /dev/null +++ b/web/static/js/devices.js @@ -0,0 +1,223 @@ +layui.use(['table', 'form', 'layer'], function(){ + var table = layui.table; + var form = layui.form; + var layer = layui.layer; + var $ = layui.$; + + // 初始化表格 + table.render({ + elem: '#device-table', + url: '/api/devices/models', + headers: undefined, + toolbar: '#tableToolbar', + defaultToolbar: ['filter', 'exports', 'print'], + cols: [[ + {type: 'checkbox'}, + {field: 'model_name', title: '设备型号', width: 180}, + {field: 'device_type', title: '设备类型', width: 120, templet: function(d){ + var types = { + 'software': '软件', + 'website': '网站', + 'embedded': '嵌入式设备', + 'mcu': '单片机设备' + }; + return types[d.device_type] || d.device_type; + }}, + {field: 'company', title: '所属公司', width: 150}, + {field: 'remark', title: '备注说明'}, + {field: 'device_count', title: '设备数量', width: 100}, + {field: 'status', title: '状态', width: 100, templet: function(d){ + if(d.status === 'active') return '已激活'; + if(d.status === 'expired') return '已过期'; + return '未激活'; + }}, + {field: 'CreatedAt', title: '创建时间', width: 180, templet: function(d){ + return d.CreatedAt ? new Date(d.CreatedAt).toLocaleString('zh-CN', { + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + hour12: false + }) : ''; + }}, + {fixed: 'right', title: '操作', toolbar: '#tableRowBar', width: 180} + ]], + page: true, + parseData: function(res) { + if (res.code === 401) { + window.location.href = '/login'; + return; + } + return res; + } + }); + + // 表格工具栏事件 + table.on('toolbar(device-table)', function(obj){ + var checkStatus = table.checkStatus(obj.config.id); + + switch(obj.event){ + case 'refresh': + table.reload('device-table'); + break; + case 'batchDel': + var data = checkStatus.data; + if(data.length === 0){ + layer.msg('请选择要删除的设备型号'); + return; + } + layer.confirm('确定删除选中的设备型号吗?', function(index){ + var ids = data.map(item => item.id); + fetch('/api/devices/models/batch', { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer ' + localStorage.getItem('token') + }, + body: JSON.stringify({ids: ids}) + }) + .then(response => response.json()) + .then(result => { + if (result.error) { + layer.msg(result.error); + return; + } + layer.msg('批量删除成功'); + table.reload('device-table'); + }) + .catch(error => { + layer.msg('批量删除失败:' + error.message); + }); + layer.close(index); + }); + break; + } + }); + + // 行工具栏事件 + table.on('tool(device-table)', function(obj){ + var data = obj.data; + + switch(obj.event){ + case 'edit': + layer.open({ + type: 1, + title: '编辑设备型号', + area: ['500px', '400px'], + content: $('#deviceFormTpl').html(), + success: function(){ + form.val('deviceForm', data); + form.render(); + } + }); + break; + case 'files': + layer.open({ + type: 2, + title: '设备文件管理', + area: ['900px', '600px'], + content: '/admin/device-files?model=' + encodeURIComponent(data.deviceModel) + }); + break; + case 'del': + layer.confirm('确定删除该设备型号吗?', function(index){ + fetch('/api/devices/models/' + data.id, { + method: 'DELETE', + headers: { + 'Authorization': 'Bearer ' + localStorage.getItem('token') + } + }) + .then(response => response.json()) + .then(result => { + if (result.error) { + layer.msg(result.error); + return; + } + layer.msg('删除成功'); + obj.del(); + }) + .catch(error => { + layer.msg('删除失败:' + error.message); + }); + layer.close(index); + }); + break; + } + }); + + // 搜索表单提交 + form.on('submit(search)', function(data){ + table.reload('device-table', { + where: data.field + }); + return false; + }); + + // 添加设备型号按钮点击事件 + $('#add-device').on('click', function(){ + layer.open({ + type: 1, + title: '添加设备型号', + area: ['500px', '400px'], + content: $('#deviceFormTpl').html(), + success: function(){ + // 初始化设备类型选择 + form.val('deviceForm', { + 'device_type': 'software' // 设置默认值 + }); + form.render(); + } + }); + }); + + // 设备型号表单提交 + form.on('submit(deviceSubmit)', function(data){ + // 如果是编辑模式,确保 id 是数字类型 + if(data.field.id) { + data.field.id = parseInt(data.field.id); + } + + // 构造提交数据,使用下划线命名 + const submitData = { + model_name: data.field.model_name, + device_type: data.field.device_type, + company: data.field.company, + remark: data.field.remark, + status: 'active' + }; + + // 如果是编辑模式,添加 ID + if(data.field.id) { + submitData.id = data.field.id; + } + + var url = data.field.id ? '/api/devices/models/' + data.field.id : '/api/devices/models'; + var method = data.field.id ? 'PUT' : 'POST'; + + fetch(url, { + method: method, + headers: { + 'Content-Type': 'application/json' + }, + credentials: 'include', + body: JSON.stringify(submitData) + }) + .then(response => response.json()) + .then(result => { + if (result.error) { + layer.msg(result.error); + return; + } + layer.closeAll('page'); + layer.msg(data.field.id ? '更新成功' : '添加成功'); + table.reload('device-table'); + }) + .catch(error => { + layer.msg((data.field.id ? '更新' : '添加') + '失败:' + error.message); + }); + + return false; + }); +}); diff --git a/web/static/js/licenses.js b/web/static/js/licenses.js new file mode 100644 index 0000000..b3595d2 --- /dev/null +++ b/web/static/js/licenses.js @@ -0,0 +1,340 @@ +layui.use(['table', 'form', 'layer'], function(){ + var table = layui.table; + var form = layui.form; + var layer = layui.layer; + var $ = layui.$; + + // 自定义验证规则 + form.verify({ + min1: function(value) { + if (value < 1) { + return '必须大于0'; + } + } + }); + + // 初始化表格 + table.render({ + elem: '#license-table', + url: '/api/licenses', + headers: undefined, + toolbar: '#tableToolbar', + defaultToolbar: ['filter', 'exports', 'print'], + cols: [[ + {type: 'checkbox'}, + {field: 'code', title: '授权码', width: 320, templet: function(d){ + return '
' + + d.code + + '复制' + + '
'; + }}, + {field: 'license_type', title: '授权类型', width: 100, templet: function(d){ + var types = { + 'time': '时间授权', + 'count': '次数授权', + 'permanent': '永久授权' + }; + return types[d.license_type.toLowerCase()] || d.license_type; + }}, + {field: 'duration', title: '有效期', width: 150, templet: function(d){ + if(d.license_type.toLowerCase() === 'time') { + let minutes = d.duration; + if (minutes >= 525600) { + return Math.floor(minutes / 525600) + '年'; + } else if (minutes >= 43200) { + return Math.floor(minutes / 43200) + '月'; + } else if (minutes >= 1440) { + return Math.floor(minutes / 1440) + '天'; + } else if (minutes >= 60) { + return Math.floor(minutes / 60) + '小时'; + } else { + return minutes + '分钟'; + } + } + return '-'; + }}, + {field: 'max_uses', title: '使用次数', width: 100, templet: function(d){ + if(d.license_type.toLowerCase() === 'count') { + return d.max_uses || 0; + } + return '-'; + }}, + {field: 'status', title: '状态', width: 100, templet: function(d){ + var status = d.status.toLowerCase(); + if(status === 'unused') return '未使用'; + if(status === 'used') return '已使用'; + if(status === 'expired') return '已过期'; + if(status === 'revoked') return '已撤销'; + return '未知'; + }}, + {field: 'used_by', title: '使用设备', width: 180}, + {field: 'used_at', title: '使用时间', width: 160, templet: function(d){ + return d.used_at ? new Date(d.used_at).toLocaleString() : '-'; + }}, + {field: 'batch_no', title: '批次号', width: 160}, + {field: 'remark', title: '备注'}, + {field: 'bind_count', title: '可绑定次数', width: 100, templet: function(d){ + if(d.bind_count === -1) return '无限制'; + if(d.bind_count === 0) return '已用完'; + return d.bind_count; + }}, + {fixed: 'right', title: '操作', toolbar: '#tableRowBar', width: 180, templet: function(d){ + var btns = [ + '查看', + '日志' + ]; + // 只有未过期且未撤销的授权码才能撤销 + if(d.status.toLowerCase() !== 'expired' && d.status.toLowerCase() !== 'revoked') { + btns.push('撤销'); + } + return btns.join(''); + }} + ]], + page: true, + parseData: function(res) { + if (res.code === 401) { + window.location.href = '/login'; + return; + } + return { + "code": res.code, + "msg": res.msg, + "count": res.count, + "data": res.data + }; + } + }); + + // 表格工具栏事件 + table.on('toolbar(license-table)', function(obj){ + var checkStatus = table.checkStatus(obj.config.id); + + switch(obj.event){ + case 'refresh': + table.reload('license-table'); + break; + case 'copySelected': + var data = checkStatus.data; + if(data.length === 0){ + layer.msg('请选择要复制的授权码'); + return; + } + + // 提取授权码并按格式组织 + var codes = data.map(item => item.code); + var copyText = ''; + + // 弹出选择框 + layer.confirm('请选择复制格式', { + btn: ['换行分隔', '逗号分隔'] + }, function(index){ + // 换行分隔 + copyText = codes.join('\n'); + copyToClipboard(copyText); + layer.close(index); + }, function(index){ + // 逗号分隔 + copyText = codes.join(','); + copyToClipboard(copyText); + layer.close(index); + }); + break; + case 'batchDel': + var data = checkStatus.data; + if(data.length === 0){ + layer.msg('请选择要删除的授权码'); + return; + } + layer.confirm('确定撤销选中的授权码吗?', function(index){ + var codes = data.map(item => item.code); + fetch('/api/licenses/batch/revoke', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + credentials: 'include', + body: JSON.stringify({codes: codes}) + }) + .then(response => response.json()) + .then(result => { + if(result.error) { + layer.msg(result.error); + return; + } + layer.msg('批量撤销成功'); + table.reload('license-table'); + }) + .catch(error => { + layer.msg('批量撤销失败:' + error.message); + }); + layer.close(index); + }); + break; + } + }); + + // 添加复制到剪贴板的函数 + function copyToClipboard(text) { + // 创建临时文本区域 + var textarea = document.createElement('textarea'); + textarea.value = text; + document.body.appendChild(textarea); + + // 选择文本 + textarea.select(); + textarea.setSelectionRange(0, 99999); // 兼容移动设备 + + try { + // 执行复制 + var successful = document.execCommand('copy'); + if (successful) { + layer.msg('复制成功'); + } else { + layer.msg('复制失败,请手动复制'); + } + } catch (err) { + layer.msg('复制失败:' + err.message); + } + + // 移除临时文本区域 + document.body.removeChild(textarea); + } + + // 行工具栏事件 + table.on('tool(license-table)', function(obj){ + var data = obj.data; + + switch(obj.event){ + case 'view': + layer.alert(JSON.stringify(data, null, 2), { + title: '授权码详情' + }); + break; + case 'logs': + layer.open({ + type: 2, + title: '使用日志', + area: ['800px', '600px'], + content: '/admin/license-logs?id=' + data.id + }); + break; + case 'revoke': + layer.confirm('确定撤销该授权码吗?', function(index){ + fetch('/api/licenses/' + data.code + '/revoke', { + method: 'POST', + credentials: 'include' + }) + .then(response => response.json()) + .then(result => { + if (result.error) { + layer.msg(result.error); + return; + } + layer.msg('撤销成功'); + table.reload('license-table'); + }) + .catch(error => { + layer.msg('撤销失败:' + error.message); + }); + layer.close(index); + }); + break; + case 'copy': + copyToClipboard(data.code); + break; + } + }); + + // 搜索表单提交 + form.on('submit(search)', function(data){ + // 转换所有字段为小写 + Object.keys(data.field).forEach(key => { + if(data.field[key]) { + data.field[key] = data.field[key].toLowerCase(); + } + }); + + table.reload('license-table', { + where: data.field, + page: { + curr: 1 + } + }); + return false; + }); + + // 创建授权码按钮点击事件 + $('#create-license').on('click', function(){ + layer.open({ + type: 1, + title: '生成授权码', + area: ['500px', '400px'], + content: $('#createLicenseTpl').html(), + success: function(){ + form.render(); + } + }); + }); + + // 监听授权类型切换 + form.on('select(licenseType)', function(data){ + if(data.value === 'time'){ + $('#durationItem').show(); + $('#maxUsesItem').hide(); + } else if(data.value === 'count'){ + $('#durationItem').hide(); + $('#maxUsesItem').show(); + } else { + $('#durationItem').hide(); + $('#maxUsesItem').hide(); + } + }); + + // 创建授权码表单提交 + form.on('submit(licenseSubmit)', function(data){ + var field = data.field; + + // 构造请求数据,确保数值类型正确 + const submitData = { + license_type: field.license_type.toLowerCase(), + count: parseInt(field.count), + remark: field.remark + }; + + // 根据授权类型处理参数 + if(field.license_type.toLowerCase() === 'time'){ + submitData.duration = parseInt(field.duration) * parseInt(field.duration_unit); + delete field.max_uses; + } else if(field.license_type.toLowerCase() === 'count'){ + submitData.max_uses = parseInt(field.max_uses); + delete field.duration; + } else { + delete field.duration; + delete field.max_uses; + } + + fetch('/api/licenses', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + credentials: 'include', + body: JSON.stringify(submitData) + }) + .then(response => response.json()) + .then(result => { + if (result.error) { + layer.msg(result.error); + return; + } + layer.closeAll('page'); + layer.msg('授权码生成成功'); + table.reload('license-table'); + }) + .catch(error => { + layer.msg('生成失败:' + error.message); + }); + + return false; + }); +}); \ No newline at end of file diff --git a/web/static/js/login.js b/web/static/js/login.js new file mode 100644 index 0000000..9f15380 --- /dev/null +++ b/web/static/js/login.js @@ -0,0 +1,127 @@ +layui.use(['form', 'layer'], function(){ + var form = layui.form; + var layer = layui.layer; + var $ = layui.$; + + // 检查用户是否已登录 + function checkIfLoggedIn() { + const token = localStorage.getItem('token'); + if (token) { + window.location.href = '/'; + } + } + + // 页面加载时检查登录状态 + checkIfLoggedIn(); + + // 加载验证码 + function loadCaptcha() { + fetch('/api/captcha') + .then(response => { + if (!response.ok) { + throw new Error('Network response was not ok'); + } + return response.json(); + }) + .then(data => { + if (data.error) { + layer.msg(data.error); + return; + } + // 确保图片数据正确加载 + if (data.imageBase64) { + $('#captchaImg').attr('src', 'data:image/png;base64,' + data.imageBase64); + $('input[name=captchaId]').val(data.captchaId); + } else { + throw new Error('验证码图片数据无效'); + } + }) + .catch(error => { + layer.msg('获取验证码失败:' + error.message); + // 设置一个默认的错误图片 + $('#captchaImg').attr('src', '/static/images/captcha-error.png'); + }); + } + + // 页面加载时获取验证码 + loadCaptcha(); + + // 点击验证码图片刷新 + $('#captchaImg').on('click', function() { + loadCaptcha(); + }); + + // 登录表单提交 + form.on('submit(login)', function(data){ + var field = data.field; + + // 添加验证码验证 + if (!field.captcha) { + layer.msg('请输入验证码'); + return false; + } + + if (!field.captchaId) { + layer.msg('验证码已失效,请刷新'); + loadCaptcha(); + return false; + } + + fetch('/api/login', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + username: field.username, + password: field.password, + captcha: field.captcha, + captchaId: field.captchaId + }) + }) + .then(response => { + if (!response.ok) { + throw new Error('Network response was not ok'); + } + return response.json(); + }) + .then(result => { + if (result.error) { + layer.msg(result.error); + loadCaptcha(); // 刷新验证码 + return; + } + // 确保 token 被正确设置 + document.cookie = `token=${result.token}; path=/; secure; samesite=strict`; + localStorage.setItem('token', result.token); + window.location.href = '/'; + }) + .catch(error => { + layer.msg('登录失败:' + error.message); + loadCaptcha(); // 刷新验证码 + }); + + return false; + }); + + // 注册账号点击事件 + $('.register').on('click', function(){ + layer.open({ + type: 2, + title: '注册账号', + area: ['500px', '400px'], + content: '/register.html' + }); + }); + + // 忘记密码点击事件 + $('.forget-pwd').on('click', function(){ + layer.open({ + type: 2, + title: '重置密码', + area: ['500px', '300px'], + content: '/reset-password.html' + }); + }); + +}); \ No newline at end of file diff --git a/web/static/js/main.js b/web/static/js/main.js new file mode 100644 index 0000000..281fe5f --- /dev/null +++ b/web/static/js/main.js @@ -0,0 +1,190 @@ +layui.use(["element", "layer"], function () { + var element = layui.element; + + var layer = layui.layer; + + var $ = layui.$; + + // 检查认证状态 + + function checkAuth() { + try { + // 从 cookie 中获取 token + const token = localStorage.getItem('token'); + // console.log(token); + if (!token) { + window.location.href = "/login"; + return false; + } + return true; + } catch (error) { + console.error("认证检查失败:", error); + window.location.href = "/login"; + return false; + } + } + + // 添加通用的 fetch 封装,自动处理认证 + + window.authFetch = function (url, options = {}) { + return fetch(url, { + ...options, + credentials: 'include', // 自动携带 cookie + }) + .then((response) => { + if (!response.ok) { + if (response.status === 401) { + window.location.href = '/login'; + throw new Error('认证失败'); + } + throw new Error(`请求失败,状态码:${response.status}`); + } + return response.json(); + }) + .catch((error) => { + console.error("请求处理失败:", error); + throw error; + }); + }; + + // 在页面加载时检查认证 + + $(document).ready(function () { + if (!checkAuth()) return; + + // 加载用户信息 + + authFetch("/api/users/profile") + .then((user) => { + $("#current-user").text(user.username); + + // 根据用户角色显示/隐藏菜单 + + if (user.role !== "admin") { + $(".admin-only").hide(); + } + }) + + .catch((error) => { + layer.msg("加载用户信息失败:" + error.message); + }); + + // 加载站点配置 + + loadSiteConfig(); + + // 默认加载 dashboard + + loadPage("/admin/dashboard", "控制台"); + }); + + // 左侧菜单点击事件 + + $(".layui-nav-item a").on("click", function () { + var url = $(this).data("url"); + + if (url) { + var title = $(this).text().trim(); + + loadPage(url, title); + } + }); + + // 加载页面内容 + + function loadPage(url, title) { + // 更新面包屑 + + updateBreadcrumb(title); + + // 加载页面内容 + + $("#content-frame").attr("src", url); + + // 更新选中状态 + + $(".layui-nav-item").removeClass("layui-this"); + + $(`a[data-url="${url}"]`).parent().addClass("layui-this"); + } + + // 更新面包屑导航 + + function updateBreadcrumb(title) { + var html = + '首页 / ' + + title; + + $(".layui-breadcrumb").html(html); + + element.render("breadcrumb"); + } + + // 修改密码 + + $(".change-password").on("click", function () { + layer.open({ + type: 2, + + title: "修改密码", + + area: ["500px", "300px"], + + content: "/admin/change-password", + }); + }); + + // 退出登录 + + $(".logout").on("click", function () { + layer.confirm("确定要退出登录吗?", function (index) { + // 清除 cookie + document.cookie = "token=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT"; + window.location.href = '/login'; + layer.close(index); + }); + }); + + // 加载站点配置 + + function loadSiteConfig() { + authFetch("/api/site/settings") + .then((data) => { + if (data.error) { + layer.msg(data.error); + + return; + } + + // 更新页面元素 + + document.title = data.title; + + $("#site-title").text(data.title); + + $("#site-description").attr("content", data.description); + + $("#site-favicon").attr("href", data.favicon); + + $("#site-logo").attr("src", data.logo); + + $("#site-name").text(data.title); + + $("#site-copyright").text(data.copyright); + + $("#site-icp").text(data.icp); + }) + + .catch((error) => { + layer.msg("加载配置失败:" + error.message); + }); + } + + // 监听子页面消息 + + window.addEventListener('message', function(event) { + if (event.data.type === 'updateBreadcrumb') { + updateBreadcrumb(event.data.title); + } + }); +}); diff --git a/web/static/js/monitor.js b/web/static/js/monitor.js new file mode 100644 index 0000000..b62601e --- /dev/null +++ b/web/static/js/monitor.js @@ -0,0 +1,209 @@ +layui.use(['element', 'layer'], function(){ + var element = layui.element; + var layer = layui.layer; + var $ = layui.$; + + // 初始化所有图表 + var cpuChart = echarts.init(document.getElementById('cpu-chart')); + var memoryChart = echarts.init(document.getElementById('memory-chart')); + var diskChart = echarts.init(document.getElementById('disk-chart')); + var networkChart = echarts.init(document.getElementById('network-chart')); + + // 更新系统状态 + function updateSystemStatus() { + fetch('/api/monitor/status', { + credentials: 'include' + }) + .then(response => { + if (response.status === 401) { + window.location.href = '/login'; + throw new Error('认证失败'); + } + return response.json(); + }) + .then(data => { + if (data.error) { + layer.msg(data.error); + return; + } + + // 更新基础信息 + $('#uptime').text(formatDuration(Math.floor(data.system.uptime / 1e9))); // 转换纳秒为秒 + $('#active-users').text(data.system.active_users); + $('#total-devices').text(data.system.total_devices); + $('#load-avg').text(data.cpu.load_avg.map(v => v.toFixed(2)).join(' ')); + + // 更新系统信息 + $('#hostname').text(data.host.hostname); + $('#os').text(data.host.os); + $('#platform').text(data.host.platform); + $('#kernel').text(data.host.kernel_version); + $('#cpu-model').text(data.cpu.model_name); + $('#cpu-cores').text(data.cpu.core_count); + $('#boot-time').text(new Date(data.host.boot_time).toLocaleString()); + + // 更新进程列表 + var processHtml = ''; + data.process.list.forEach(function(proc) { + processHtml += ` + + ${proc.pid} + ${proc.name} + ${proc.cpu.toFixed(1)}% + ${proc.memory.toFixed(1)}% + ${formatDuration(Math.floor((Date.now() - proc.created) / 1000))} + + `; + }); + $('#process-list').html(processHtml); + $('#total-processes').text(data.process.total); + + // 更新图表 + updateCPUChart(data.cpu); + updateMemoryChart(data.memory); + updateDiskChart(data.disk); + updateNetworkChart(data.network); + }) + .catch(error => { + layer.msg('获取系统状态失败:' + error.message); + }); + } + + // 更新CPU图表 + function updateCPUChart(cpu) { + var option = { + title: { text: 'CPU使用率' }, + tooltip: { formatter: '{b}: {c}%' }, + series: [{ + type: 'gauge', + min: 0, + max: 100, + detail: { formatter: '{value}%' }, + data: [{ value: cpu.usage.toFixed(1), name: 'CPU' }] + }] + }; + cpuChart.setOption(option); + } + + // 更新内存图表 + function updateMemoryChart(memory) { + var used = (memory.used / 1024 / 1024 / 1024).toFixed(1); + var free = (memory.free / 1024 / 1024 / 1024).toFixed(1); + var option = { + title: { text: '内存使用情况' }, + tooltip: { formatter: '{b}: {c}GB ({d}%)' }, + series: [{ + type: 'pie', + radius: ['50%', '70%'], + data: [ + { value: used, name: '已用内存' }, + { value: free, name: '空闲内存' } + ] + }] + }; + memoryChart.setOption(option); + } + + // 更新磁盘图表 + function updateDiskChart(disk) { + var option = { + title: { text: '磁盘使用情况' }, + tooltip: { + formatter: function(params) { + var data = params.data; + return `${params.name}
+ 总空间: ${formatSize(data.total)}
+ 已用空间: ${formatSize(data.used)}
+ 剩余空间: ${formatSize(data.free)}
+ 使用率: ${data.usage_rate.toFixed(1)}%`; + } + }, + series: [{ + type: 'pie', + radius: '60%', + data: disk.partitions.map(p => ({ + name: p.mountpoint, + value: p.usage_rate, + total: p.total, + used: p.used, + free: p.free, + usage_rate: p.usage_rate + })) + }] + }; + diskChart.setOption(option); + } + + // 更新网络图表 + function updateNetworkChart(network) { + var option = { + title: { text: '网络流量' }, + tooltip: { + trigger: 'axis', + formatter: function(params) { + return params.map(p => + `${p.seriesName}: ${formatSize(p.value)}/s` + ).join('
'); + } + }, + legend: { data: ['发送', '接收'] }, + xAxis: { + type: 'category', + data: network.interfaces.map(i => i.name) + }, + yAxis: { + type: 'value', + axisLabel: { + formatter: function(value) { + return formatSize(value) + '/s'; + } + } + }, + series: [{ + name: '发送', + type: 'bar', + data: network.interfaces.map(i => i.bytes_sent) + }, { + name: '接收', + type: 'bar', + data: network.interfaces.map(i => i.bytes_recv) + }] + }; + networkChart.setOption(option); + } + + // 格式化文件大小 + function formatSize(bytes) { + if (bytes === 0) return '0 B'; + var k = 1024; + var sizes = ['B', 'KB', 'MB', 'GB', 'TB']; + var i = Math.floor(Math.log(bytes) / Math.log(k)); + return (bytes / Math.pow(k, i)).toFixed(2) + ' ' + sizes[i]; + } + + // 格式化时间 + function formatDuration(seconds) { + var days = Math.floor(seconds / 86400); + var hours = Math.floor((seconds % 86400) / 3600); + var minutes = Math.floor((seconds % 3600) / 60); + var parts = []; + if (days > 0) parts.push(days + '天'); + if (hours > 0) parts.push(hours + '小时'); + if (minutes > 0) parts.push(minutes + '分钟'); + return parts.join(' ') || '0分钟'; + } + + // 初始加载 + updateSystemStatus(); + + // 定时更新 + setInterval(updateSystemStatus, 5000); + + // 窗口大小改变时重绘图表 + window.onresize = function(){ + cpuChart.resize(); + memoryChart.resize(); + diskChart.resize(); + networkChart.resize(); + }; +}); diff --git a/web/static/js/site-settings.js b/web/static/js/site-settings.js new file mode 100644 index 0000000..a4fb4f5 --- /dev/null +++ b/web/static/js/site-settings.js @@ -0,0 +1,142 @@ +layui.use(['form', 'upload', 'layer'], function(){ + var form = layui.form; + var upload = layui.upload; + var layer = layui.layer; + var $ = layui.$; + + // 加载当前配置 + fetch('/api/site/settings', { + credentials: 'include' + }) + .then(response => { + if (response.status === 401) { + window.location.href = '/login'; + throw new Error('认证失败'); + } + return response.json(); + }) + .then(data => { + if (data.error) { + layer.msg(data.error); + return; + } + console.log(data); + // 填充表单数据 + form.val('siteSettingsForm', { + 'title': data.title, + 'description': data.description, + 'baseUrl': data.base_url, + 'icp': data.icp, + 'copyright': data.copyright, + 'logo': data.logo, + 'favicon': data.favicon + }); + + // 显示当前图片 + if (data.logo) { + $('#currentLogo').attr('src', data.logo).show(); + } + if (data.favicon) { + $('#currentFavicon').attr('src', data.favicon).show(); + } + }) + .catch(error => { + layer.msg('加载配置失败:' + error.message); + }); + + // 上传Logo + upload.render({ + elem: '#uploadLogo', + url: '/api/uploads/site', + accept: 'images', + acceptMime: 'image/*', + field: 'file', + before: function() { + layer.load(); + }, + done: function(res) { + layer.closeAll('loading'); + if (res.error) { + layer.msg(res.error); + return; + } + $('input[name=logo]').val(res.url); + $('#currentLogo').attr('src', res.url).show(); + layer.msg('Logo上传成功'); + }, + error: function() { + layer.closeAll('loading'); + layer.msg('上传失败'); + } + }); + + // 上传Favicon + upload.render({ + elem: '#uploadFavicon', + url: '/api/uploads/site', + accept: 'images', + acceptMime: 'image/*', + field: 'file', + before: function() { + layer.load(); + }, + done: function(res) { + layer.closeAll('loading'); + if (res.error) { + layer.msg(res.error); + return; + } + $('input[name=favicon]').val(res.url); + $('#currentFavicon').attr('src', res.url).show(); + layer.msg('Favicon上传成功'); + }, + error: function() { + layer.closeAll('loading'); + layer.msg('上传失败'); + } + }); + + // 表单提交 + form.on('submit(siteSubmit)', function(data){ + // 转换字段名以匹配后端 + const submitData = { + title: data.field.title, + description: data.field.description, + base_url: data.field.baseUrl, + icp: data.field.icp, + copyright: data.field.copyright, + logo: data.field.logo, + favicon: data.field.favicon + }; + + fetch('/api/site/settings', { + method: 'PUT', + headers: { + 'Content-Type': 'application/json' + }, + credentials: 'include', + body: JSON.stringify(submitData) + }) + .then(response => { + if (response.status === 401) { + window.location.href = '/login'; + throw new Error('认证失败'); + } + return response.json(); + }) + .then(result => { + if (result.error) { + layer.msg(result.error); + return; + } + layer.msg('保存成功'); + // 刷新父页面 + parent.window.location.reload(); + }) + .catch(error => { + layer.msg('保存失败:' + error.message); + }); + + return false; + }); +}); \ No newline at end of file diff --git a/web/static/js/tokens.js b/web/static/js/tokens.js new file mode 100644 index 0000000..9289552 --- /dev/null +++ b/web/static/js/tokens.js @@ -0,0 +1,214 @@ +layui.use(["table", "form", "layer"], function () { + var table = layui.table; + var form = layui.form; + var layer = layui.layer; + var $ = layui.$; + + // 初始化表格 + table.render({ + elem: "#token-table", + url: "/api/tokens", + headers: [ + { + Authorization: "Bearer " + localStorage.getItem("token"), + }, + ], + toolbar: "#tableToolbar", + defaultToolbar: ["filter", "exports", "print"], + cols: [ + [ + { type: "checkbox" }, + { field: "token", title: "访问令牌", width: 320 }, + { field: "deviceUID", title: "设备UID", width: 180 }, + { field: "type", title: "令牌类型", width: 100 }, + { + field: "status", + title: "状态", + width: 100, + templet: function (d) { + if (d.status === "active") + return '有效'; + if (d.status === "revoked") + return '已撤销'; + return '已过期'; + }, + }, + { field: "expireTime", title: "过期时间", width: 160 }, + { field: "lastUsed", title: "最后使用", width: 160 }, + { field: "usageCount", title: "使用次数", width: 100 }, + { field: "ipList", title: "IP限制", width: 200 }, + { fixed: "right", title: "操作", toolbar: "#tableRowBar", width: 180 }, + ], + ], + page: true, + parseData: function(res) { + if (res.code === 401) { + window.location.href = '/login'; + return; + } + return res; + }, + }); + + // 表格工具栏事件 + table.on("toolbar(token-table)", function (obj) { + var checkStatus = table.checkStatus(obj.config.id); + + switch (obj.event) { + case "refresh": + table.reload("token-table"); + break; + case "batchRevoke": + var data = checkStatus.data; + if (data.length === 0) { + layer.msg("请选择要撤销的令牌"); + return; + } + layer.confirm("确定撤销选中的令牌吗?", function (index) { + var tokens = data.map((item) => item.token); + // 执行批量撤销 + Promise.all( + tokens.map((token) => + fetch("/api/tokens/" + token, { + method: "DELETE", + headers: { + Authorization: "Bearer " + localStorage.getItem("token"), + }, + }).then((response) => response.json()) + ) + ) + .then(() => { + layer.msg("批量撤销成功"); + table.reload("token-table"); + }) + .catch((error) => { + layer.msg("批量撤销失败:" + error.message); + }); + layer.close(index); + }); + break; + } + }); + + // 行工具栏事件 + table.on("tool(token-table)", function (obj) { + var data = obj.data; + + switch (obj.event) { + case "view": + layer.alert(JSON.stringify(data, null, 2), { + title: "令牌详情", + }); + break; + case "logs": + layer.open({ + type: 2, + title: "令牌使用日志", + area: ["800px", "600px"], + content: "/admin/token-logs.html?id=" + data.id, + }); + break; + case "revoke": + layer.confirm("确定撤销该令牌吗?", function (index) { + fetch("/api/tokens/" + data.token, { + method: "DELETE", + headers: { + Authorization: "Bearer " + localStorage.getItem("token"), + }, + }) + .then((response) => response.json()) + .then((result) => { + if (result.error) { + layer.msg(result.error); + return; + } + layer.msg("撤销成功"); + obj.update({ + status: "revoked", + }); + }) + .catch((error) => { + layer.msg("撤销失败:" + error.message); + }); + layer.close(index); + }); + break; + } + }); + + // 搜索表单提交 + form.on("submit(search)", function (data) { + table.reload("token-table", { + where: data.field, + }); + return false; + }); + + // 创建令牌按钮点击事件 + $("#create-token").on("click", function () { + // 加载设备列表 + fetch("/api/devices", { + headers: { + Authorization: "Bearer " + localStorage.getItem("token"), + }, + }) + .then((response) => response.json()) + .then((result) => { + var devices = result.data; + var options = devices + .map( + (device) => + `` + ) + .join(""); + + layer.open({ + type: 1, + title: "创建访问令牌", + area: ["500px", "400px"], + content: $("#createTokenTpl").html(), + success: function () { + $("select[name=device_uid]").append(options); + form.render("select"); + }, + }); + }) + .catch((error) => { + layer.msg("加载设备列表失败:" + error.message); + }); + }); + + // 创建令牌表单提交 + form.on("submit(tokenSubmit)", function (data) { + var ipList = data.field.ip_list.split(/[,,\s]+/).filter((ip) => ip); + + fetch("/api/tokens", { + method: "POST", + headers: { + Authorization: "Bearer " + localStorage.getItem("token"), + "Content-Type": "application/json", + }, + body: JSON.stringify({ + device_uid: data.field.device_uid, + token_type: data.field.token_type, + expire_days: parseInt(data.field.expire_days), + ip_list: ipList, + }), + }) + .then((response) => response.json()) + .then((result) => { + if (result.error) { + layer.msg(result.error); + return; + } + layer.closeAll("page"); + layer.msg("创建成功"); + table.reload("token-table"); + }) + .catch((error) => { + layer.msg("创建失败:" + error.message); + }); + + return false; + }); +}); diff --git a/web/static/js/upload.js b/web/static/js/upload.js new file mode 100644 index 0000000..fe8a6ce --- /dev/null +++ b/web/static/js/upload.js @@ -0,0 +1,200 @@ +layui.use(['upload', 'element', 'layer'], function(){ + var upload = layui.upload; + var element = layui.element; + var layer = layui.layer; + var $ = layui.$; + + // 普通文件上传 + upload.render({ + elem: '#fileUpload', + url: '/api/uploads', + headers: { + 'Authorization': 'Bearer ' + localStorage.getItem('token') + }, + data: { + device_uid: function() { + return $('#deviceUID').val(); + }, + description: function() { + return $('#description').val(); + } + }, + accept: 'file', + before: function(obj) { + layer.load(); + }, + done: function(res) { + layer.closeAll('loading'); + if (res.error) { + layer.msg(res.error); + return; + } + layer.msg('上传成功'); + // 刷新文件列表 + loadFileList(); + }, + error: function() { + layer.closeAll('loading'); + layer.msg('上传失败'); + } + }); + + // 分片上传 + upload.render({ + elem: '#chunkUpload', + url: '/api/uploads/chunk', + headers: { + 'Authorization': 'Bearer ' + localStorage.getItem('token') + }, + data: { + deviceUID: function() { + return $('#deviceUID').val(); + } + }, + accept: 'file', + size: 1024 * 1024 * 2, // 每片2MB + chunked: true, + chunkSize: 1024 * 1024 * 2, + before: function(obj) { + layer.load(); + }, + progress: function(n) { + var percent = n + '%'; + element.progress('uploadProgress', percent); + }, + done: function(res) { + layer.closeAll('loading'); + if (res.error) { + layer.msg(res.error); + return; + } + // 如果所有分片都上传完成,开始合并 + if (res.completed) { + mergeChunks(res.fileHash); + } else { + layer.msg('分片上传成功'); + } + }, + error: function() { + layer.closeAll('loading'); + layer.msg('上传失败'); + } + }); + + // 合并分片 + function mergeChunks(fileHash) { + fetch('/api/uploads/merge', { + method: 'POST', + headers: { + 'Authorization': 'Bearer ' + localStorage.getItem('token'), + 'Content-Type': 'application/x-www-form-urlencoded' + }, + body: 'fileHash=' + fileHash + }) + .then(response => response.json()) + .then(result => { + if (result.error) { + layer.msg(result.error); + return; + } + layer.msg('文件合并成功'); + // 刷新文件列表 + loadFileList(); + }) + .catch(error => { + layer.msg('文件合并失败:' + error.message); + }); + } + + // 加载文件列表 + function loadFileList() { + var deviceUID = $('#deviceUID').val(); + if (!deviceUID) return; + + fetch('/api/uploads/device/' + deviceUID, { + headers: { + 'Authorization': 'Bearer ' + localStorage.getItem('token') + } + }) + .then(response => response.json()) + .then(result => { + if (result.error) { + layer.msg(result.error); + return; + } + renderFileList(result); + }) + .catch(error => { + layer.msg('加载文件列表失败:' + error.message); + }); + } + + // 渲染文件列表 + function renderFileList(files) { + var html = ''; + files.forEach(file => { + html += ` + + ${file.fileName} + ${formatFileSize(file.fileSize)} + ${file.fileType} + ${formatTime(file.createdAt)} + + 下载 + 删除 + + + `; + }); + $('#fileList').html(html); + } + + // 格式化文件大小 + function formatFileSize(size) { + var units = ['B', 'KB', 'MB', 'GB', 'TB']; + var index = 0; + while (size >= 1024 && index < units.length - 1) { + size /= 1024; + index++; + } + return size.toFixed(2) + ' ' + units[index]; + } + + // 格式化时间 + function formatTime(time) { + return new Date(time).toLocaleString(); + } + + // 下载文件 + window.downloadFile = function(id) { + window.location.href = '/api/uploads/' + id; + }; + + // 删除文件 + window.deleteFile = function(id) { + layer.confirm('确定删除该文件吗?', function(index) { + fetch('/api/uploads/' + id, { + method: 'DELETE', + headers: { + 'Authorization': 'Bearer ' + localStorage.getItem('token') + } + }) + .then(response => response.json()) + .then(result => { + if (result.error) { + layer.msg(result.error); + return; + } + layer.msg('删除成功'); + loadFileList(); + }) + .catch(error => { + layer.msg('删除失败:' + error.message); + }); + layer.close(index); + }); + }; + + // 初始加载文件列表 + loadFileList(); +}); \ No newline at end of file diff --git a/web/static/js/users.js b/web/static/js/users.js new file mode 100644 index 0000000..d5dde27 --- /dev/null +++ b/web/static/js/users.js @@ -0,0 +1,146 @@ +layui.use(['table', 'form', 'layer'], function(){ + var table = layui.table; + var form = layui.form; + var layer = layui.layer; + var $ = layui.$; + + // 初始化表格 + table.render({ + elem: '#user-table', + url: '/api/users', + headers: undefined, + toolbar: '#tableToolbar', + defaultToolbar: ['filter', 'exports', 'print'], + cols: [[ + {type: 'checkbox'}, + {field: 'username', title: '用户名', width: 150}, + {field: 'email', title: '邮箱', width: 200}, + {field: 'role', title: '角色', width: 100, templet: '#roleTpl'}, + {field: 'lastLogin', title: '最后登录', width: 160}, + {field: 'createdAt', title: '创建时间', width: 160}, + {fixed: 'right', title: '操作', toolbar: '#tableRowBar', width: 150} + ]], + page: true, + parseData: function(res) { + if (res.code === 401) { + window.location.href = '/login'; + return; + } + return res; + } + }); + + // 表格工具栏事件 + table.on('toolbar(user-table)', function(obj){ + switch(obj.event){ + case 'refresh': + table.reload('user-table'); + break; + } + }); + + // 行工具栏事件 + table.on('tool(user-table)', function(obj){ + var data = obj.data; + + switch(obj.event){ + case 'edit': + layer.open({ + type: 1, + title: '编辑用户', + area: ['500px', '400px'], + content: $('#userFormTpl').html(), + success: function(){ + // 填充表单数据 + form.val('userForm', { + 'id': data.id, + 'username': data.username, + 'email': data.email, + 'role': data.role + }); + // 编辑时密码可选 + $('input[name=password]').removeAttr('required').removeAttr('lay-verify'); + form.render(); + } + }); + break; + case 'del': + layer.confirm('确定删除该用户吗?', function(index){ + fetch('/api/users/' + data.id, { + method: 'DELETE', + credentials: 'include' + }) + .then(response => response.json()) + .then(result => { + if (result.error) { + layer.msg(result.error); + return; + } + layer.msg('删除成功'); + obj.del(); + }) + .catch(error => { + layer.msg('删除失败:' + error.message); + }); + layer.close(index); + }); + break; + } + }); + + // 搜索表单提交 + form.on('submit(search)', function(data){ + table.reload('user-table', { + where: data.field + }); + return false; + }); + + // 添加用户按钮点击事件 + $('#add-user').on('click', function(){ + layer.open({ + type: 1, + title: '添加用户', + area: ['500px', '400px'], + content: $('#userFormTpl').html(), + success: function(){ + form.render(); + } + }); + }); + + // 用户表单提交 + form.on('submit(userSubmit)', function(data){ + var url = data.field.id ? '/api/users/' + data.field.id : '/api/users'; + var method = data.field.id ? 'PUT' : 'POST'; + + // 如果是编辑且没有输入密码,则删除密码字段 + if (data.field.id && !data.field.password) { + delete data.field.password; + } + + fetch(url, { + method: method, + headers: { + 'Content-Type': 'application/json' + }, + credentials: 'include', + body: JSON.stringify(data.field) + }) + .then(response => response.json()) + .then(result => { + if (result.error) { + layer.msg(result.error); + return; + } + layer.closeAll('page'); + layer.msg(data.field.id ? '更新成功' : '添加成功'); + table.reload('user-table'); + }) + .catch(error => { + layer.msg((data.field.id ? '更新' : '添加') + '失败:' + error.message); + }); + + return false; + }); +}); diff --git a/web/static/layui/css/layui.css b/web/static/layui/css/layui.css new file mode 100644 index 0000000..d59c755 --- /dev/null +++ b/web/static/layui/css/layui.css @@ -0,0 +1,2 @@ +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;border-bottom:1px solid #eee;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-padding-1{padding:4px!important}.layui-padding-2{padding:8px!important}.layui-padding-3{padding:16px!important}.layui-padding-4{padding:32px!important}.layui-padding-5{padding:48px!important}.layui-margin-1{margin:4px!important}.layui-margin-2{margin:8px!important}.layui-margin-3{margin:16px!important}.layui-margin-4{margin:32px!important}.layui-margin-5{margin:48px!important}.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;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none}.layui-scrollbar-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}hr.layui-border-black,hr.layui-border-blue,hr.layui-border-cyan,hr.layui-border-green,hr.layui-border-orange,hr.layui-border-purple,hr.layui-border-red{border-width:0 0 1px}.layui-timeline-item:before{background-color:#eee}.layui-text{line-height:1.8;font-size:14px}.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){margin:15px 0;padding:5px 15px;border-left:5px solid #eee}.layui-text pre>code:not(.layui-code){padding:15px;font-family:"Courier New",Consolas,"Lucida Console"}.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-input[disabled],.layui-textarea[disabled]{background-color:#fafafa}.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:hover+.layui-input-split{border-color:#d2d2d2}.layui-input-wrap .layui-input:focus+.layui-input-split{border-color:#16b777}.layui-input-wrap .layui-input.layui-form-danger:focus+.layui-input-split{border-color:#ff5722}.layui-input-wrap .layui-input-prefix.layui-input-split{border-width:0;border-right-width:1px}.layui-input-wrap .layui-input-suffix.layui-input-split{border-width:0;border-left-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-input-wrap .layui-input-number{width:24px;padding:0}.layui-input-wrap .layui-input-number .layui-icon{position:absolute;right:0;width:100%;height:50%;line-height:normal;font-size:12px}.layui-input-wrap .layui-input-number .layui-icon:before{position:absolute;left:50%;top:50%;margin-top:-6px;margin-left:-6px}.layui-input-wrap .layui-input-number .layui-icon-up{top:0;border-bottom:1px solid #eee}.layui-input-wrap .layui-input-number .layui-icon-down{bottom:0}.layui-input-wrap .layui-input-number .layui-icon:hover{font-weight:700}.layui-input-wrap .layui-input[type=number]::-webkit-inner-spin-button,.layui-input-wrap .layui-input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none!important}.layui-input-wrap .layui-input[type=number]{-moz-appearance:textfield}.layui-input-wrap .layui-input[type=number].layui-input-number-out-of-range{color:#ff5722}.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-panel-wrap{position:absolute;z-index:99999999}.layui-select-panel-wrap dl{position:relative;display:block;top:0}.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>div>.layui-icon{line-height:normal}.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-form-checkbox[lay-skin=none] *,.layui-form-radio[lay-skin=none] *{box-sizing:border-box}.layui-form-checkbox[lay-skin=none],.layui-form-radio[lay-skin=none]{position:relative;min-height:20px;margin:0;padding:0;height:auto;line-height:normal}.layui-form-checkbox[lay-skin=none]>div,.layui-form-radio[lay-skin=none]>div{position:relative;top:0;left:0;cursor:pointer;z-index:10;color:inherit;background-color:inherit}.layui-form-checkbox[lay-skin=none]>i,.layui-form-radio[lay-skin=none]>i{display:none}.layui-form-checkbox[lay-skin=none].layui-checkbox-disabled>div,.layui-form-radio[lay-skin=none].layui-radio-disabled>div{cursor:not-allowed}.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-disabled-transition *,.layui-table-disabled-transition :after,.layui-table-disabled-transition :before{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}.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;position:relative;border-right:none}.layui-table-view:after{content:"";position:absolute;top:0;right:0;width:1px;height:100%;background-color:#eee;z-index:101}.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;right:0;bottom:0;margin:0;z-index:199;transition:opacity .1s;user-select:none}.layui-table-loading-icon{position:absolute;width:100%\0;left:50%;left:auto\0;top:50%;margin-top:-15px\0;transform:translate(-50%,-50%);transform:none\0;text-align:center}.layui-table-loading-icon .layui-icon{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-form-checkbox[lay-skin=primary]>div{padding-left:24px}.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-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:24px;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;font-size:14px}.layui-table-grid-down:hover{background-color:#fbfbfb}.layui-table-expanded{height:95px}.layui-table-expanded .layui-table-cell,.layui-table-view .layui-table[lay-size=lg] .layui-table-expanded .layui-table-cell,.layui-table-view .layui-table[lay-size=sm] .layui-table-expanded .layui-table-cell{height:auto;max-height:94px;white-space:normal;text-overflow:clip}.layui-table-cell-c{position:absolute;bottom:-10px;right:50%;margin-right:-9px;width:20px;height:20px;line-height:18px;cursor:pointer;text-align:center;background-color:#fff;border:1px solid #eee;border-radius:50%;z-index:1000;transition:.3s all;font-size:14px}.layui-table-cell-c:hover{border-color:#16b777}.layui-table-expanded td:hover .layui-table-cell{overflow:auto}.layui-table-main>.layui-table>tbody>tr:last-child>td>.layui-table-cell-c{bottom:0}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:0 0 1px;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>.layui-menu-body-title>.layui-icon-down{transform:rotate(180deg)}.layui-menu .layui-menu-item-up>.layui-menu-body-title>.layui-icon-up{transform:rotate(-180deg)}.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;transition:all .2s;-webkit-transition:all .2s}.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;background:0 0;background-color:rgba(0,0,0,.3);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 a:hover{background:0 0;color:#fff}.layui-nav-itemed>.layui-nav-child,.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:#373737;color:rgba(0,0,0,.8)}.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-child{padding-left:11px;background:0 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-bottom-width:2px;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{display:block;position:relative;padding:15px;line-height:20px;border:1px solid #eee;border-left-width:6px;background-color:#fff;color:#333;font-family:"Courier New",Consolas,"Lucida Console";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,.layui-rate-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;overflow:hidden}.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:0;right:100%;cursor:pointer;transform:translate(-50%,-50%)}.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;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:168px;height:30px;color:#5f5f5f;padding-left:5px}.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;-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;box-sizing:border-box}.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;padding-right:21px}.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:26px;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:14px;line-height:12px;width:14px;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;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-wrap{font-size:13px;font-family:"Courier New",Consolas,"Lucida Console"}.layui-code-view{display:block;position:relative;padding:0!important;border:1px solid #eee;border-left-width:6px;background-color:#fff;color:#333}.layui-code-view pre{margin:0!important}.layui-code-header{position:relative;z-index:3;padding:0 11px;height:40px;line-height:40px;border-bottom:1px solid #eee;background-color:#fafafa;font-size:12px}.layui-code-header>.layui-code-header-about{position:absolute;right:11px;top:0;color:#b7b7b7}.layui-code-header-about>a{padding-left:10px}.layui-code-wrap{position:relative;display:block;z-index:1;margin:0!important;padding:11px 0!important;overflow-x:hidden;overflow-y:auto}.layui-code-line{position:relative;line-height:19px;margin:0!important}.layui-code-line-number{position:absolute;left:0;top:0;padding:0 8px;min-width:45px;height:100%;text-align:right;user-select:none;white-space:nowrap;overflow:hidden}.layui-code-line-content{padding:0 11px;word-wrap:break-word;white-space:pre-wrap}.layui-code-ln-mode>.layui-code-wrap>.layui-code-line{padding-left:45px}.layui-code-ln-side{position:absolute;left:0;top:0;bottom:0;z-index:0;width:45px;border-right:1px solid #eee;border-color:rgb(126 122 122 / 15%);background-color:#fafafa;pointer-events:none}.layui-code-nowrap>.layui-code-wrap{overflow:auto}.layui-code-nowrap>.layui-code-wrap>.layui-code-line>.layui-code-line-content{white-space:pre;word-wrap:normal}.layui-code-nowrap>.layui-code-ln-side{border-right-width:0!important;background:0 0!important}.layui-code-fixbar{position:absolute;top:8px;right:11px;padding-right:45px;z-index:5}.layui-code-fixbar>span{position:absolute;right:0;top:0;padding:0 8px;color:#777;transition:all .3s}.layui-code-fixbar>span:hover{color:#16b777}.layui-code-copy{display:none;cursor:pointer}.layui-code-preview>.layui-code-view>.layui-code-fixbar .layui-code-copy{display:none!important}.layui-code-view:hover>.layui-code-fixbar .layui-code-copy{display:block}.layui-code-view:hover>.layui-code-fixbar .layui-code-lang-marker{display:none}.layui-code-theme-dark,.layui-code-theme-dark>.layui-code-header{border-color:rgb(126 122 122 / 15%);background-color:#1f1f1f}.layui-code-theme-dark{border-width:1px;color:#ccc}.layui-code-theme-dark>.layui-code-ln-side{border-right-color:#2a2a2a;background:0 0;color:#6e7681}.layui-code textarea{display:none}.layui-code-preview>.layui-code,.layui-code-preview>.layui-code-view{margin:0}.layui-code-preview>.layui-tab{position:relative;z-index:1;margin-bottom:0}.layui-code-preview>.layui-tab>.layui-tab-title{border-width:0}.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:8px;line-height:normal}.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-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-view,.layui-code-full .layui-code-wrap{height:calc(100vh - 51px)!important;box-sizing:border-box}.layui-code-full .layui-code-item-preview{overflow:auto}.layui-code-view.layui-code-hl{line-height:20px!important;border-left-width:1px}.layui-code-view.layui-code-hl>.layui-code-ln-side{background-color:transparent}.layui-code-theme-dark.layui-code-hl,.layui-code-theme-dark.layui-code-hl>.layui-code-ln-side{border-color:rgb(126 122 122 / 15%)}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=workdays]: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}.laydate-time-list{display:table}.layui-laydate .laydate-time-list>li{display:table-cell;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 .laydate-time-list-hide-1 ol li{padding-left:53px}.layui-laydate .laydate-time-list-hide-2 ol li{padding-left:117px}.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-range.layui-laydate-linkage .laydate-main-list-1 .layui-laydate-content,.layui-laydate-range.layui-laydate-linkage .laydate-main-list-1 .layui-laydate-header{border-left-style:dashed}.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:#cffae9;transition:all .3s}.layui-laydate-linkage .laydate-selected:hover>div{background-color:#cffae9!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;transition:all .3s}.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:0 0!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:#16b777!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 .layui-this.laydate-disabled,.layui-laydate .layui-this.laydate-disabled>div{background-color:#eee!important}.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-this,.laydate-theme-molv .layui-this>div{background-color:#16baaa!important}.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}.laydate-theme-fullpanel .laydate-time-list-hide-1 ol li{padding-left:49px}.laydate-theme-fullpanel .laydate-time-list-hide-2 ol li{padding-left:107px}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{opacity:0;transition:opacity .35s cubic-bezier(.34,.69,.1,1);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;vertical-align:middle;*display:inline;*zoom:1}.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;box-sizing:border-box}.layui-layer-setwin .layui-layer-min:before{content:'';position:absolute;width:12px;border-bottom:1px solid #2e2d3c;left:50%;top:50%;margin:-.5px 0 0 -6px;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:28px;height:28px;font-size:16px;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:30px;line-height:30px;margin:5px 5px 0;padding:0 16px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none;box-sizing:border-box}.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:transparent;background-color:#1e9fff;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-btn-is-loading{opacity:.5!important;cursor:not-allowed!important;cursor:wait!important;overflow:hidden;white-space:nowrap;-webkit-user-select:none;-ms-user-select:none;user-select:none}.layui-layer-btn-is-loading .layui-layer-btn-loading-icon{margin-right:8px;font-size:14px}.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;width:32px;height:32px;padding:8px}.layui-layer-win10.layui-layer-page .layui-layer-setwin span{width:38px}.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:20px;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:visible;text-align:center}.layui-layer-photos .layer-layer-photos-main img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-photos-next,.layui-layer-photos-prev{position:fixed;top:50%;width:52px;height:52px;line-height:52px;margin-top:-26px;cursor:pointer;font-size:52px;color:#717171}.layui-layer-photos-prev{left:32px}.layui-layer-photos-next{right:32px}.layui-layer-photos-next:hover,.layui-layer-photos-prev:hover{color:#959595}.layui-layer-photos-toolbar{position:fixed;left:0;right:0;bottom:0;width:100%;height:52px;line-height:52px;background-color:#000\9;filter:Alpha(opacity=60);background-color:rgba(0,0,0,.32);color:#fff;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:0}.layui-layer-photos-toolbar>*{display:inline-block;vertical-align:top;padding:0 16px;font-size:12px;color:#fff;*display:inline;*zoom:1}.layui-layer-photos-toolbar *{font-size:12px}.layui-layer-photos-header{top:0;bottom:auto}.layui-layer-photos-header>span{cursor:pointer}.layui-layer-photos-header>span:hover{background-color:rgba(51,51,51,.32)}.layui-layer-photos-header .layui-icon{font-size:18px}.layui-layer-photos-footer>h3{max-width:65%;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-layer-photos-footer a:hover{text-decoration:underline}.layui-layer-photos-footer 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} +/*# sourceMappingURL=layui.css.map */ diff --git a/web/static/layui/css/layui.css.map b/web/static/layui/css/layui.css.map new file mode 100644 index 0000000..ea7acd8 --- /dev/null +++ b/web/static/layui/css/layui.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["layui.css","modules/code.css","modules/laydate.css","modules/layer.css"],"names":[],"mappings":"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","file":"layui.css","sourcesContent":["/**\r\n * Layui\r\n * Classic modular Front-End UI library\r\n * MIT Licensed\r\n */\r\n\r\n\r\n/** 初始化 **/\r\nbody,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,input,button,textarea,p,blockquote,th,td,form,pre{margin: 0; padding: 0; -webkit-tap-highlight-color:rgba(0,0,0,0);}\r\na:active,a:hover{outline:0}\r\nimg{display: inline-block; border: none; vertical-align: middle;}\r\nli{list-style:none;}\r\ntable{border-collapse: collapse; border-spacing: 0;}\r\nh1,h2,h3,h4{font-weight: 700;}\r\nh5,h6{font-weight: 500; font-size: 100%;}\r\nbutton,input,select,textarea{font-size: 100%; }\r\ninput,button,textarea,select,optgroup,option{font-family: inherit; font-size: inherit; font-style: inherit; font-weight: inherit; outline: 0;}\r\npre{white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;}\r\n\r\n/** 初始化全局标签 **/\r\nbody{line-height: 1.6; color: #333; color: rgba(0,0,0,.85); font: 14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif;}\r\nhr{height: 0; line-height: 0; margin: 10px 0; padding: 0; border: none; border-bottom: 1px solid #eee; clear: both; overflow: hidden; background: none;}\r\na{color: #333; text-decoration:none;}\r\na:hover{color: #777;}\r\na cite{font-style: normal; *cursor:pointer;}\r\n\r\n/** 基础通用 **/\r\n.layui-border-box, .layui-border-box *{box-sizing: border-box;}\r\n/* 消除第三方ui可能造成的冲突 */.layui-box, .layui-box *{box-sizing: content-box;}\r\n.layui-clear{clear: both; *zoom: 1;}\r\n.layui-clear:after{content:'\\20'; clear:both; *zoom:1; display:block; height:0;}\r\n.layui-clear-space{word-spacing: -5px;}\r\n.layui-inline{position: relative; display: inline-block; *display:inline; *zoom:1; vertical-align: middle;}\r\n/* 三角形 */.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;}\r\n.layui-edge-top{top: -4px; border-bottom-color: #999; border-bottom-style: solid;}\r\n.layui-edge-right{border-left-color: #999; border-left-style: solid;}\r\n.layui-edge-bottom{top: 2px; border-top-color: #999; border-top-style: solid;}\r\n.layui-edge-left{border-right-color: #999; border-right-style: solid;}\r\n/* 单行溢出省略 */.layui-elip{text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}\r\n/* 屏蔽选中 */.layui-unselect,.layui-icon, .layui-disabled{-moz-user-select: none; -webkit-user-select: none; -ms-user-select: none;}\r\n/* 禁用 */.layui-disabled,.layui-disabled:hover{color: #d2d2d2 !important; cursor: not-allowed !important;}\r\n/* 纯圆角 */.layui-circle{border-radius: 100%;}\r\n.layui-show{display: block !important;}\r\n.layui-hide{display: none !important;}\r\n.layui-show-v{visibility: visible !important;}\r\n.layui-hide-v{visibility: hidden !important;}\r\n\r\n/** 图标字体 **/\r\n@font-face {\r\n font-family: 'layui-icon';\r\n src: url('../font/iconfont.eot?v=282');\r\n src: url('../font/iconfont.eot?v=282#iefix') format('embedded-opentype'),\r\n url('../font/iconfont.woff2?v=282') format('woff2'),\r\n url('../font/iconfont.woff?v=282') format('woff'),\r\n url('../font/iconfont.ttf?v=282') format('truetype'),\r\n url('../font/iconfont.svg?v=282#layui-icon') format('svg');\r\n}\r\n\r\n.layui-icon{\r\n font-family:\"layui-icon\" !important;\r\n font-size: 16px;\r\n font-style: normal;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\n/* font-class */\r\n.layui-icon-leaf:before{content: \"\\e701\";}\r\n.layui-icon-folder:before{content: \"\\eabe\";}\r\n.layui-icon-folder-open:before{content: \"\\eac1\";}\r\n.layui-icon-gitee:before{content: \"\\e69b\";}\r\n.layui-icon-github:before{content:\"\\e6a7\"}\r\n.layui-icon-disabled:before{content:\"\\e6cc\"}\r\n.layui-icon-moon:before{content:\"\\e6c2\"}\r\n.layui-icon-error:before{content:\"\\e693\"}\r\n.layui-icon-success:before{content:\"\\e697\"}\r\n.layui-icon-question:before{content:\"\\e699\"}\r\n.layui-icon-lock:before{content:\"\\e69a\"}\r\n.layui-icon-eye:before{content:\"\\e695\"}\r\n.layui-icon-eye-invisible:before{content:\"\\e696\"}\r\n.layui-icon-backspace:before{content:\"\\e694\"}\r\n.layui-icon-tips-fill:before{content:\"\\eb2e\"}\r\n.layui-icon-test:before{content:\"\\e692\"}\r\n.layui-icon-clear:before{content:\"\\e788\"}\r\n.layui-icon-heart-fill:before{content:\"\\e68f\"}\r\n.layui-icon-light:before{content:\"\\e748\"}\r\n.layui-icon-music:before{content:\"\\e690\"}\r\n.layui-icon-time:before{content:\"\\e68d\"}\r\n.layui-icon-ie:before{content:\"\\e7bb\"}\r\n.layui-icon-firefox:before{content:\"\\e686\"}\r\n.layui-icon-at:before{content:\"\\e687\"}\r\n.layui-icon-bluetooth:before{content:\"\\e689\"}\r\n.layui-icon-chrome:before{content:\"\\e68a\"}\r\n.layui-icon-edge:before{content:\"\\e68b\"}\r\n.layui-icon-heart:before{content:\"\\e68c\"}\r\n.layui-icon-key:before{content:\"\\e683\"}\r\n.layui-icon-android:before{content:\"\\e684\"}\r\n.layui-icon-mike:before{content:\"\\e6dc\"}\r\n.layui-icon-mute:before{content:\"\\e685\"}\r\n.layui-icon-gift:before{content:\"\\e627\"}\r\n.layui-icon-windows:before{content:\"\\e67f\"}\r\n.layui-icon-ios:before{content:\"\\e680\"}\r\n.layui-icon-logout:before{content:\"\\e682\"}\r\n.layui-icon-wifi:before{content:\"\\e7e0\"}\r\n.layui-icon-rss:before{content:\"\\e808\"}\r\n.layui-icon-email:before{content:\"\\e618\"}\r\n.layui-icon-reduce-circle:before{content:\"\\e616\"}\r\n.layui-icon-transfer:before{content:\"\\e691\"}\r\n.layui-icon-service:before{content:\"\\e626\"}\r\n.layui-icon-addition:before{content:\"\\e624\"}\r\n.layui-icon-subtraction:before{content:\"\\e67e\"}\r\n.layui-icon-slider:before{content:\"\\e714\"}\r\n.layui-icon-print:before{content:\"\\e66d\"}\r\n.layui-icon-export:before{content:\"\\e67d\"}\r\n.layui-icon-cols:before{content:\"\\e610\"}\r\n.layui-icon-screen-full:before{content:\"\\e622\"}\r\n.layui-icon-screen-restore:before{content:\"\\e758\"}\r\n.layui-icon-rate-half:before{content:\"\\e6c9\"}\r\n.layui-icon-rate-solid:before{content:\"\\e67a\"}\r\n.layui-icon-rate:before{content:\"\\e67b\"}\r\n.layui-icon-cellphone:before{content:\"\\e678\"}\r\n.layui-icon-vercode:before{content:\"\\e679\"}\r\n.layui-icon-login-weibo:before{content:\"\\e675\"}\r\n.layui-icon-login-qq:before{content:\"\\e676\"}\r\n.layui-icon-login-wechat:before{content:\"\\e677\"}\r\n.layui-icon-username:before{content:\"\\e66f\"}\r\n.layui-icon-password:before{content:\"\\e673\"}\r\n.layui-icon-refresh-3:before{content:\"\\e9aa\"}\r\n.layui-icon-auz:before{content:\"\\e672\"}\r\n.layui-icon-shrink-right:before{content:\"\\e668\"}\r\n.layui-icon-spread-left:before{content:\"\\e66b\"}\r\n.layui-icon-snowflake:before{content:\"\\e6b1\"}\r\n.layui-icon-tips:before{content:\"\\e702\"}\r\n.layui-icon-note:before{content:\"\\e66e\"}\r\n.layui-icon-senior:before{content:\"\\e674\"}\r\n.layui-icon-refresh-1:before{content:\"\\e666\"}\r\n.layui-icon-refresh:before{content:\"\\e669\"}\r\n.layui-icon-flag:before{content:\"\\e66c\"}\r\n.layui-icon-theme:before{content:\"\\e66a\"}\r\n.layui-icon-notice:before{content:\"\\e667\"}\r\n.layui-icon-console:before{content:\"\\e665\"}\r\n.layui-icon-website:before{content:\"\\e7ae\"}\r\n.layui-icon-face-surprised:before{content:\"\\e664\"}\r\n.layui-icon-set:before{content:\"\\e716\"}\r\n.layui-icon-template:before{content:\"\\e663\"}\r\n.layui-icon-app:before{content:\"\\e653\"}\r\n.layui-icon-template-1:before{content:\"\\e656\"}\r\n.layui-icon-home:before{content:\"\\e68e\"}\r\n.layui-icon-female:before{content:\"\\e661\"}\r\n.layui-icon-male:before{content:\"\\e662\"}\r\n.layui-icon-tread:before{content:\"\\e6c5\"}\r\n.layui-icon-praise:before{content:\"\\e6c6\"}\r\n.layui-icon-rmb:before{content:\"\\e65e\"}\r\n.layui-icon-more:before{content:\"\\e65f\"}\r\n.layui-icon-camera:before{content:\"\\e660\"}\r\n.layui-icon-cart-simple:before{content:\"\\e698\"}\r\n.layui-icon-face-cry:before{content:\"\\e69c\"}\r\n.layui-icon-face-smile:before{content:\"\\e6af\"}\r\n.layui-icon-survey:before{content:\"\\e6b2\"}\r\n.layui-icon-read:before{content:\"\\e705\"}\r\n.layui-icon-location:before{content:\"\\e715\"}\r\n.layui-icon-dollar:before{content:\"\\e659\"}\r\n.layui-icon-diamond:before{content:\"\\e735\"}\r\n.layui-icon-return:before{content:\"\\e65c\"}\r\n.layui-icon-camera-fill:before{content:\"\\e65d\"}\r\n.layui-icon-fire:before{content:\"\\e756\"}\r\n.layui-icon-more-vertical:before{content:\"\\e671\"}\r\n.layui-icon-cart:before{content:\"\\e657\"}\r\n.layui-icon-star-fill:before{content:\"\\e658\"}\r\n.layui-icon-prev:before{content:\"\\e65a\"}\r\n.layui-icon-next:before{content:\"\\e65b\"}\r\n.layui-icon-upload:before{content:\"\\e67c\"}\r\n.layui-icon-upload-drag:before{content:\"\\e681\"}\r\n.layui-icon-user:before{content:\"\\e770\"}\r\n.layui-icon-file-b:before{content:\"\\e655\"}\r\n.layui-icon-component:before{content:\"\\e857\"}\r\n.layui-icon-find-fill:before{content:\"\\e670\"}\r\n.layui-icon-loading:before{content:\"\\e63d\"}\r\n.layui-icon-loading-1:before{content:\"\\e63e\"}\r\n.layui-icon-add-1:before{content:\"\\e654\"}\r\n.layui-icon-pause:before{content:\"\\e651\"}\r\n.layui-icon-play:before{content:\"\\e652\"}\r\n.layui-icon-video:before{content:\"\\e6ed\"}\r\n.layui-icon-headset:before{content:\"\\e6fc\"}\r\n.layui-icon-voice:before{content:\"\\e688\"}\r\n.layui-icon-speaker:before{content:\"\\e645\"}\r\n.layui-icon-fonts-del:before{content:\"\\e64f\"}\r\n.layui-icon-fonts-html:before{content:\"\\e64b\"}\r\n.layui-icon-fonts-code:before{content:\"\\e64e\"}\r\n.layui-icon-fonts-strong:before{content:\"\\e62b\"}\r\n.layui-icon-unlink:before{content:\"\\e64d\"}\r\n.layui-icon-picture:before{content:\"\\e64a\"}\r\n.layui-icon-link:before{content:\"\\e64c\"}\r\n.layui-icon-face-smile-b:before{content:\"\\e650\"}\r\n.layui-icon-align-center:before{content:\"\\e647\"}\r\n.layui-icon-align-right:before{content:\"\\e648\"}\r\n.layui-icon-align-left:before{content:\"\\e649\"}\r\n.layui-icon-fonts-u:before{content:\"\\e646\"}\r\n.layui-icon-fonts-i:before{content:\"\\e644\"}\r\n.layui-icon-tabs:before{content:\"\\e62a\"}\r\n.layui-icon-circle:before{content:\"\\e63f\"}\r\n.layui-icon-radio:before{content:\"\\e643\"}\r\n.layui-icon-share:before{content:\"\\e641\"}\r\n.layui-icon-edit:before{content:\"\\e642\"}\r\n.layui-icon-delete:before{content:\"\\e640\"}\r\n.layui-icon-engine:before{content:\"\\e628\"}\r\n.layui-icon-chart-screen:before{content:\"\\e629\"}\r\n.layui-icon-chart:before{content:\"\\e62c\"}\r\n.layui-icon-table:before{content:\"\\e62d\"}\r\n.layui-icon-tree:before{content:\"\\e62e\"}\r\n.layui-icon-upload-circle:before{content:\"\\e62f\"}\r\n.layui-icon-templeate-1:before{content:\"\\e630\"}\r\n.layui-icon-util:before{content:\"\\e631\"}\r\n.layui-icon-layouts:before{content:\"\\e632\"}\r\n.layui-icon-prev-circle:before{content:\"\\e633\"}\r\n.layui-icon-carousel:before{content:\"\\e634\"}\r\n.layui-icon-code-circle:before{content:\"\\e635\"}\r\n.layui-icon-water:before{content:\"\\e636\"}\r\n.layui-icon-date:before{content:\"\\e637\"}\r\n.layui-icon-layer:before{content:\"\\e638\"}\r\n.layui-icon-fonts-clear:before{content:\"\\e639\"}\r\n.layui-icon-dialogue:before{content:\"\\e63a\"}\r\n.layui-icon-cellphone-fine:before{content:\"\\e63b\"}\r\n.layui-icon-form:before{content:\"\\e63c\"}\r\n.layui-icon-file:before{content:\"\\e621\"}\r\n.layui-icon-triangle-r:before{content:\"\\e623\"}\r\n.layui-icon-triangle-d:before{content:\"\\e625\"}\r\n.layui-icon-set-sm:before{content:\"\\e620\"}\r\n.layui-icon-add-circle:before{content:\"\\e61f\"}\r\n.layui-icon-layim-download:before{content:\"\\e61e\"}\r\n.layui-icon-layim-uploadfile:before{content:\"\\e61d\"}\r\n.layui-icon-404:before{content:\"\\e61c\"}\r\n.layui-icon-about:before{content:\"\\e60b\"}\r\n.layui-icon-layim-theme:before{content:\"\\e61b\"}\r\n.layui-icon-down:before{content:\"\\e61a\"}\r\n.layui-icon-up:before{content:\"\\e619\"}\r\n.layui-icon-circle-dot:before{content:\"\\e617\"}\r\n.layui-icon-set-fill:before{content:\"\\e614\"}\r\n.layui-icon-search:before{content:\"\\e615\"}\r\n.layui-icon-friends:before{content:\"\\e612\"}\r\n.layui-icon-group:before{content:\"\\e613\"}\r\n.layui-icon-reply-fill:before{content:\"\\e611\"}\r\n.layui-icon-menu-fill:before{content:\"\\e60f\"}\r\n.layui-icon-face-smile-fine:before{content:\"\\e60c\"}\r\n.layui-icon-picture-fine:before{content:\"\\e60d\"}\r\n.layui-icon-log:before{content:\"\\e60e\"}\r\n.layui-icon-list:before{content:\"\\e60a\"}\r\n.layui-icon-release:before{content:\"\\e609\"}\r\n.layui-icon-add-circle-fine:before{content:\"\\e608\"}\r\n.layui-icon-ok:before{content:\"\\e605\"}\r\n.layui-icon-help:before{content:\"\\e607\"}\r\n.layui-icon-chat:before{content:\"\\e606\"}\r\n.layui-icon-top:before{content:\"\\e604\"}\r\n.layui-icon-right:before{content:\"\\e602\"}\r\n.layui-icon-left:before{content:\"\\e603\"}\r\n.layui-icon-star:before{content:\"\\e600\"}\r\n.layui-icon-download-circle:before{content:\"\\e601\"}\r\n.layui-icon-close:before{content:\"\\1006\"}\r\n.layui-icon-close-fill:before{content:\"\\1007\"}\r\n.layui-icon-ok-circle:before{content:\"\\1005\"}\r\n\r\n\r\n/* 基本布局 */\r\n.layui-main{position: relative; width: 1160px; margin: 0 auto;}\r\n.layui-header{position: relative; z-index: 1000; height: 60px;}\r\n.layui-header a:hover{transition: all .5s; -webkit-transition: all .5s;}\r\n.layui-side{position: fixed; left: 0; top: 0; bottom: 0; z-index: 999; width: 200px; overflow-x: hidden;}\r\n.layui-side-scroll{position: relative; width: 220px; height: 100%; overflow-x: hidden;}\r\n.layui-body{position: relative; left: 200px; right: 0; top: 0; bottom: 0; z-index: 900; width: auto; box-sizing: border-box;}\r\n\r\n/* 后台框架大布局 */\r\n.layui-layout-body{overflow-x: hidden;}\r\n.layui-layout-admin .layui-header{position: fixed; top: 0; left: 0; right: 0; background-color: #23292e;}\r\n.layui-layout-admin .layui-side{top: 60px; width: 200px; overflow-x: hidden;}\r\n.layui-layout-admin .layui-body{position: absolute; top: 60px; padding-bottom: 44px;}\r\n.layui-layout-admin .layui-main{width: auto; margin: 0 15px;}\r\n.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;}\r\n.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%);}\r\n.layui-layout-admin .layui-header .layui-nav{background: none;}\r\n.layui-layout-left{position: absolute !important; left: 200px; top: 0;}\r\n.layui-layout-right{position: absolute !important; right: 0; top: 0;}\r\n\r\n\r\n/* 栅格布局 */\r\n.layui-container{position: relative; margin: 0 auto; box-sizing: border-box;}\r\n.layui-fluid{position: relative; margin: 0 auto; padding: 0 15px;}\r\n\r\n.layui-row:before, .layui-row:after{content: \"\"; display: block; clear: both;}\r\n.layui-col-xs1, .layui-col-xs2, .layui-col-xs3, .layui-col-xs4, .layui-col-xs5, .layui-col-xs6, .layui-col-xs7, .layui-col-xs8, .layui-col-xs9, .layui-col-xs10, .layui-col-xs11, .layui-col-xs12\r\n,.layui-col-sm1, .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-sm10, .layui-col-sm11, .layui-col-sm12\r\n,.layui-col-md1, .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-md10, .layui-col-md11, .layui-col-md12\r\n,.layui-col-lg1, .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-lg10, .layui-col-lg11, .layui-col-lg12\r\n,.layui-col-xl1, .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-xl10, .layui-col-xl11, .layui-col-xl12\r\n{position: relative; display: block; box-sizing: border-box;}\r\n\r\n.layui-col-xs1, .layui-col-xs2, .layui-col-xs3, .layui-col-xs4, .layui-col-xs5, .layui-col-xs6, .layui-col-xs7, .layui-col-xs8, .layui-col-xs9, .layui-col-xs10, .layui-col-xs11, .layui-col-xs12{float: left;}\r\n.layui-col-xs1{width: 8.33333333%;}\r\n.layui-col-xs2{width: 16.66666667%;}\r\n.layui-col-xs3{width: 25%;}\r\n.layui-col-xs4{width: 33.33333333%;}\r\n.layui-col-xs5{width: 41.66666667%;}\r\n.layui-col-xs6{width: 50%;}\r\n.layui-col-xs7{width: 58.33333333%;}\r\n.layui-col-xs8{width: 66.66666667%;}\r\n.layui-col-xs9{width: 75%;}\r\n.layui-col-xs10{width: 83.33333333%;}\r\n.layui-col-xs11{width: 91.66666667%;}\r\n.layui-col-xs12{width: 100%;}\r\n\r\n.layui-col-xs-offset1{margin-left: 8.33333333%;}\r\n.layui-col-xs-offset2{margin-left: 16.66666667%;}\r\n.layui-col-xs-offset3{margin-left: 25%;}\r\n.layui-col-xs-offset4{margin-left: 33.33333333%;}\r\n.layui-col-xs-offset5{margin-left: 41.66666667%;}\r\n.layui-col-xs-offset6{margin-left: 50%;}\r\n.layui-col-xs-offset7{margin-left: 58.33333333%;}\r\n.layui-col-xs-offset8{margin-left: 66.66666667%;}\r\n.layui-col-xs-offset9{margin-left: 75%;}\r\n.layui-col-xs-offset10{margin-left: 83.33333333%;}\r\n.layui-col-xs-offset11{margin-left: 91.66666667%;}\r\n.layui-col-xs-offset12{margin-left: 100%;}\r\n\r\n/* 超小屏幕 */\r\n@media screen and (max-width: 767.98px) {\r\n .layui-container{padding: 0 15px;}\r\n .layui-hide-xs{display: none!important;}\r\n .layui-show-xs-block{display: block!important;}\r\n .layui-show-xs-inline{display: inline!important;}\r\n .layui-show-xs-inline-block{display: inline-block!important;}\r\n}\r\n\r\n/* 小型屏幕 */\r\n@media screen and (min-width: 768px) {\r\n .layui-container{width: 720px;}\r\n .layui-hide-sm{display: none!important;}\r\n .layui-show-sm-block{display: block!important;}\r\n .layui-show-sm-inline{display: inline!important;}\r\n .layui-show-sm-inline-block{display: inline-block!important;}\r\n\r\n .layui-col-sm1, .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-sm10, .layui-col-sm11, .layui-col-sm12{float: left;}\r\n .layui-col-sm1{width: 8.33333333%;}\r\n .layui-col-sm2{width: 16.66666667%;}\r\n .layui-col-sm3{width: 25%;}\r\n .layui-col-sm4{width: 33.33333333%;}\r\n .layui-col-sm5{width: 41.66666667%;}\r\n .layui-col-sm6{width: 50%;}\r\n .layui-col-sm7{width: 58.33333333%;}\r\n .layui-col-sm8{width: 66.66666667%;}\r\n .layui-col-sm9{width: 75%;}\r\n .layui-col-sm10{width: 83.33333333%;}\r\n .layui-col-sm11{width: 91.66666667%;}\r\n .layui-col-sm12{width: 100%;}\r\n /* 列偏移 */\r\n .layui-col-sm-offset1{margin-left: 8.33333333%;}\r\n .layui-col-sm-offset2{margin-left: 16.66666667%;}\r\n .layui-col-sm-offset3{margin-left: 25%;}\r\n .layui-col-sm-offset4{margin-left: 33.33333333%;}\r\n .layui-col-sm-offset5{margin-left: 41.66666667%;}\r\n .layui-col-sm-offset6{margin-left: 50%;}\r\n .layui-col-sm-offset7{margin-left: 58.33333333%;}\r\n .layui-col-sm-offset8{margin-left: 66.66666667%;}\r\n .layui-col-sm-offset9{margin-left: 75%;}\r\n .layui-col-sm-offset10{margin-left: 83.33333333%;}\r\n .layui-col-sm-offset11{margin-left: 91.66666667%;}\r\n .layui-col-sm-offset12{margin-left: 100%;}\r\n}\r\n/* 中型屏幕 */\r\n@media screen and (min-width: 992px) {\r\n .layui-container{width: 960px;}\r\n .layui-hide-md{display: none!important;}\r\n .layui-show-md-block{display: block!important;}\r\n .layui-show-md-inline{display: inline!important;}\r\n .layui-show-md-inline-block{display: inline-block!important;}\r\n\r\n .layui-col-md1, .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-md10, .layui-col-md11, .layui-col-md12{float: left;}\r\n .layui-col-md1{width: 8.33333333%;}\r\n .layui-col-md2{width: 16.66666667%;}\r\n .layui-col-md3{width: 25%;}\r\n .layui-col-md4{width: 33.33333333%;}\r\n .layui-col-md5{width: 41.66666667%;}\r\n .layui-col-md6{width: 50%;}\r\n .layui-col-md7{width: 58.33333333%;}\r\n .layui-col-md8{width: 66.66666667%;}\r\n .layui-col-md9{width: 75%;}\r\n .layui-col-md10{width: 83.33333333%;}\r\n .layui-col-md11{width: 91.66666667%;}\r\n .layui-col-md12{width: 100%;}\r\n /* 列偏移 */\r\n .layui-col-md-offset1{margin-left: 8.33333333%;}\r\n .layui-col-md-offset2{margin-left: 16.66666667%;}\r\n .layui-col-md-offset3{margin-left: 25%;}\r\n .layui-col-md-offset4{margin-left: 33.33333333%;}\r\n .layui-col-md-offset5{margin-left: 41.66666667%;}\r\n .layui-col-md-offset6{margin-left: 50%;}\r\n .layui-col-md-offset7{margin-left: 58.33333333%;}\r\n .layui-col-md-offset8{margin-left: 66.66666667%;}\r\n .layui-col-md-offset9{margin-left: 75%;}\r\n .layui-col-md-offset10{margin-left: 83.33333333%;}\r\n .layui-col-md-offset11{margin-left: 91.66666667%;}\r\n .layui-col-md-offset12{margin-left: 100%;}\r\n}\r\n/* 大型屏幕 */\r\n@media screen and (min-width: 1200px) {\r\n .layui-container{width: 1150px;}\r\n .layui-hide-lg{display: none!important;}\r\n .layui-show-lg-block{display: block!important;}\r\n .layui-show-lg-inline{display: inline!important;}\r\n .layui-show-lg-inline-block{display: inline-block!important;}\r\n\r\n .layui-col-lg1, .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-lg10, .layui-col-lg11, .layui-col-lg12{float: left;}\r\n .layui-col-lg1{width: 8.33333333%;}\r\n .layui-col-lg2{width: 16.66666667%;}\r\n .layui-col-lg3{width: 25%;}\r\n .layui-col-lg4{width: 33.33333333%;}\r\n .layui-col-lg5{width: 41.66666667%;}\r\n .layui-col-lg6{width: 50%;}\r\n .layui-col-lg7{width: 58.33333333%;}\r\n .layui-col-lg8{width: 66.66666667%;}\r\n .layui-col-lg9{width: 75%;}\r\n .layui-col-lg10{width: 83.33333333%;}\r\n .layui-col-lg11{width: 91.66666667%;}\r\n .layui-col-lg12{width: 100%;}\r\n /* 列偏移 */\r\n .layui-col-lg-offset1{margin-left: 8.33333333%;}\r\n .layui-col-lg-offset2{margin-left: 16.66666667%;}\r\n .layui-col-lg-offset3{margin-left: 25%;}\r\n .layui-col-lg-offset4{margin-left: 33.33333333%;}\r\n .layui-col-lg-offset5{margin-left: 41.66666667%;}\r\n .layui-col-lg-offset6{margin-left: 50%;}\r\n .layui-col-lg-offset7{margin-left: 58.33333333%;}\r\n .layui-col-lg-offset8{margin-left: 66.66666667%;}\r\n .layui-col-lg-offset9{margin-left: 75%;}\r\n .layui-col-lg-offset10{margin-left: 83.33333333%;}\r\n .layui-col-lg-offset11{margin-left: 91.66666667%;}\r\n .layui-col-lg-offset12{margin-left: 100%;}\r\n}\r\n/* 超大屏幕 */\r\n@media screen and (min-width: 1400px) {\r\n .layui-container{width: 1330px;}\r\n .layui-hide-xl{display: none!important;}\r\n .layui-show-xl-block{display: block!important;}\r\n .layui-show-xl-inline{display: inline!important;}\r\n .layui-show-xl-inline-block{display: inline-block!important;}\r\n\r\n .layui-col-xl1, .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-xl10, .layui-col-xl11, .layui-col-xl12{float: left;}\r\n .layui-col-xl1{width: 8.33333333%;}\r\n .layui-col-xl2{width: 16.66666667%;}\r\n .layui-col-xl3{width: 25%;}\r\n .layui-col-xl4{width: 33.33333333%;}\r\n .layui-col-xl5{width: 41.66666667%;}\r\n .layui-col-xl6{width: 50%;}\r\n .layui-col-xl7{width: 58.33333333%;}\r\n .layui-col-xl8{width: 66.66666667%;}\r\n .layui-col-xl9{width: 75%;}\r\n .layui-col-xl10{width: 83.33333333%;}\r\n .layui-col-xl11{width: 91.66666667%;}\r\n .layui-col-xl12{width: 100%;}\r\n /* 列偏移 */\r\n .layui-col-xl-offset1{margin-left: 8.33333333%;}\r\n .layui-col-xl-offset2{margin-left: 16.66666667%;}\r\n .layui-col-xl-offset3{margin-left: 25%;}\r\n .layui-col-xl-offset4{margin-left: 33.33333333%;}\r\n .layui-col-xl-offset5{margin-left: 41.66666667%;}\r\n .layui-col-xl-offset6{margin-left: 50%;}\r\n .layui-col-xl-offset7{margin-left: 58.33333333%;}\r\n .layui-col-xl-offset8{margin-left: 66.66666667%;}\r\n .layui-col-xl-offset9{margin-left: 75%;}\r\n .layui-col-xl-offset10{margin-left: 83.33333333%;}\r\n .layui-col-xl-offset11{margin-left: 91.66666667%;}\r\n .layui-col-xl-offset12{margin-left: 100%;}\r\n}\r\n\r\n/* 列间隔 */\r\n.layui-col-space1{margin: -0.5px;}\r\n.layui-col-space1>*{padding: 0.5px;}\r\n.layui-col-space2{margin: -1px;}\r\n.layui-col-space2>*{padding: 1px;}\r\n.layui-col-space4{margin: -2px;}\r\n.layui-col-space4>*{padding: 2px;}\r\n.layui-col-space5{margin: -2.5px;}\r\n.layui-col-space5>*{padding: 2.5px;}\r\n.layui-col-space6{margin: -3px;}\r\n.layui-col-space6>*{padding: 3px;}\r\n.layui-col-space8{margin: -4px;}\r\n.layui-col-space8>*{padding: 4px;}\r\n.layui-col-space10{margin: -5px;}\r\n.layui-col-space10>*{padding: 5px;}\r\n.layui-col-space12{margin: -6px;}\r\n.layui-col-space12>*{padding: 6px;}\r\n.layui-col-space14{margin: -7px;}\r\n.layui-col-space14>*{padding: 7px;}\r\n.layui-col-space15{margin: -7.5px;}\r\n.layui-col-space15>*{padding: 7.5px;}\r\n.layui-col-space16{margin: -8px;}\r\n.layui-col-space16>*{padding: 8px;}\r\n.layui-col-space18{margin: -9px;}\r\n.layui-col-space18>*{padding: 9px;}\r\n.layui-col-space20{margin: -10px;}\r\n.layui-col-space20>*{padding: 10px;}\r\n.layui-col-space22{margin: -11px;}\r\n.layui-col-space22>*{padding: 11px;}\r\n.layui-col-space24{margin: -12px;}\r\n.layui-col-space24>*{padding: 12px;}\r\n.layui-col-space25{margin: -12.5px;}\r\n.layui-col-space25>*{padding: 12.5px;}\r\n.layui-col-space26{margin: -13px;}\r\n.layui-col-space26>*{padding: 13px;}\r\n.layui-col-space28{margin: -14px;}\r\n.layui-col-space28>*{padding: 14px;}\r\n.layui-col-space30{margin: -15px;}\r\n.layui-col-space30>*{padding: 15px;}\r\n.layui-col-space32{margin: -16px;}\r\n.layui-col-space32>*{padding: 16px;}\r\n\r\n\r\n/* 内边距 */\r\n.layui-padding-1{padding: 4px !important;}\r\n.layui-padding-2{padding: 8px !important;}\r\n.layui-padding-3{padding: 16px !important;}\r\n.layui-padding-4{padding: 32px !important;}\r\n.layui-padding-5{padding: 48px !important;}\r\n\r\n/* 外边距 */\r\n.layui-margin-1{margin: 4px !important;}\r\n.layui-margin-2{margin: 8px !important;}\r\n.layui-margin-3{margin: 16px !important;}\r\n.layui-margin-4{margin: 32px !important;}\r\n.layui-margin-5{margin: 48px !important;}\r\n\r\n\r\n/*\r\n * 页面元素\r\n */\r\n\r\n.layui-btn,\r\n.layui-input,\r\n.layui-select,\r\n.layui-textarea,\r\n.layui-upload-button{outline: none; -webkit-appearance: none; transition: all .3s; -webkit-transition: all .3s; box-sizing: border-box;}\r\n\r\n/* 引用 */\r\n.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;}\r\n.layui-quote-nm{border-style: solid; border-width: 1px; border-left-width: 5px; background: none;}\r\n\r\n/* 字段集合 */\r\n.layui-elem-field{margin-bottom: 10px; padding: 0; border-width: 1px; border-style: solid;}\r\n.layui-elem-field legend{margin-left: 20px; padding: 0 10px; font-size: 20px;}\r\n.layui-field-title{margin: 16px 0; border-width: 0; border-top-width: 1px;}\r\n.layui-field-box{padding: 15px;}\r\n.layui-field-title .layui-field-box{padding: 10px 0;}\r\n\r\n/* 进度条 */\r\n.layui-progress{position: relative; height: 6px; border-radius: 20px; background-color: #eee;}\r\n.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;}\r\n.layui-progress-big,\r\n.layui-progress-big .layui-progress-bar{height: 18px; line-height: 18px;}\r\n.layui-progress-text{position: relative; top: -20px; line-height: 18px; font-size: 12px; color: #5F5F5F}\r\n.layui-progress-big .layui-progress-text{position: static; padding: 0 10px; color: #fff;}\r\n\r\n\r\n/*\r\n * 面板\r\n */\r\n\r\n\r\n/* 折叠面板 */\r\n.layui-collapse{border-width: 1px; border-style: solid; border-radius: 2px;}\r\n.layui-colla-item,\r\n.layui-colla-content{border-top-width: 1px; border-top-style: solid;}\r\n.layui-colla-item:first-child{border-top: none;}\r\n.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;}\r\n.layui-colla-content{display: none; padding: 10px 15px; line-height: 1.6; color: #5F5F5F;}\r\n.layui-colla-icon{position: absolute; left: 15px; top: 0; font-size: 14px;}\r\n\r\n/* 卡片面板 */\r\n.layui-card{margin-bottom: 15px; border-radius: 2px; background-color: #fff; box-shadow: 0 1px 2px 0 rgba(0,0,0,.05);}\r\n.layui-card:last-child{margin-bottom: 0;}\r\n.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;}\r\n.layui-card-body{position: relative; padding: 10px 15px; line-height: 24px;}\r\n.layui-card-body[pad15]{padding: 15px;}\r\n.layui-card-body[pad20]{padding: 20px;}\r\n.layui-card-body .layui-table{margin: 5px 0;}\r\n.layui-card .layui-tab{margin: 0;}\r\n\r\n/* 常规面板 */\r\n.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;}\r\n\r\n/* 窗口面板 */\r\n.layui-panel-window{position: relative; padding: 15px; border-radius: 0; border-top: 5px solid #eee; background-color: #fff;}\r\n\r\n/* 其它辅助 */\r\n.layui-auxiliar-moving{position: fixed; left: 0; right: 0; top: 0; bottom: 0; width: 100%; height: 100%; background: none; z-index: 9999999999; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none;}\r\n.layui-scrollbar-hide{overflow: hidden !important;}\r\n\r\n\r\n/*\r\n * 默认主题\r\n */\r\n\r\n\r\n/* 背景颜色 */\r\n.layui-bg-red{background-color: #ff5722 !important; color: #fff!important;} /*赤*/\r\n.layui-bg-orange{background-color: #ffb800!important; color: #fff!important;} /*橙*/\r\n.layui-bg-green{background-color: #16baaa!important; color: #fff!important;} /*绿*/\r\n.layui-bg-cyan{background-color: #2f4056!important; color: #fff!important;} /*藏青*/\r\n.layui-bg-blue{background-color: #1e9fff!important; color: #fff!important;} /*蓝*/\r\n.layui-bg-purple{background-color: #a233c6!important; color: #fff!important;} /*紫*/\r\n.layui-bg-black{background-color: #2f363c!important; color: #fff!important;} /*深*/\r\n.layui-bg-gray{background-color: #fafafa!important; color: #5F5F5F!important;} /*浅*/\r\n\r\n/* 边框 */\r\n.layui-border,\r\n.layui-quote-nm,\r\n.layui-elem-field,\r\n.layui-collapse,\r\n.layui-panel,\r\n.layui-colla-item,\r\n.layui-colla-content,\r\n.layui-badge-rim,\r\n.layui-tab-title,\r\n.layui-tab-title .layui-this:after,\r\n.layui-tab-bar,\r\n.layui-tab-card,\r\n\r\n.layui-input, .layui-textarea, .layui-select,\r\n.layui-input-split,\r\n.layui-form-pane .layui-form-label,\r\n.layui-form-pane .layui-form-item[pane]{border-color: #eee;}\r\n\r\n.layui-border{border-width: 1px; border-style: solid; color: #5F5F5F!important;}\r\n.layui-border-red{border-width: 1px; border-style: solid; border-color: #ff5722!important; color: #ff5722!important;}\r\n.layui-border-orange{border-width: 1px; border-style: solid; border-color: #ffb800!important; color: #ffb800!important;}\r\n.layui-border-green{border-width: 1px; border-style: solid; border-color: #16baaa!important; color: #16baaa!important;}\r\n.layui-border-cyan{border-width: 1px; border-style: solid; border-color: #2f4056!important; color: #2f4056!important;}\r\n.layui-border-blue{border-width: 1px; border-style: solid; border-color: #1e9fff!important; color: #1e9fff!important;}\r\n.layui-border-purple{border-width: 1px; border-style: solid; border-color: #a233c6!important; color: #a233c6!important;}\r\n.layui-border-black{border-width: 1px; border-style: solid; border-color: #2f363c!important; color: #2f363c!important;}\r\n\r\n/* 分割线边框 */\r\nhr.layui-border-red,\r\nhr.layui-border-orange,\r\nhr.layui-border-green,\r\nhr.layui-border-cyan,\r\nhr.layui-border-blue,\r\nhr.layui-border-purple,\r\nhr.layui-border-black{border-width: 0 0 1px;}\r\n\r\n/* 背景边框 */\r\n.layui-timeline-item:before{background-color: #eee;}\r\n\r\n/* 文本区域 */\r\n.layui-text{line-height: 1.8; font-size: 14px;}\r\n.layui-text h1{font-size: 32px;}\r\n.layui-text h2{font-size: 24px;}\r\n.layui-text h3{font-size: 18px;}\r\n.layui-text h4{font-size: 16px;}\r\n.layui-text h5{font-size: 14px;}\r\n.layui-text h6{font-size: 13px;}\r\n.layui-text ul,\r\n.layui-text ol{padding-left: 15px;}\r\n.layui-text ul li{margin-top: 5px; list-style-type: disc;}\r\n.layui-text ol li{margin-top: 5px; list-style-type: decimal;}\r\n.layui-text-em,\r\n.layui-word-aux{color: #999 !important; padding-left: 5px !important; padding-right: 5px !important;}\r\n.layui-text p{margin: 15px 0;}\r\n.layui-text p:first-child{margin-top: 0;}\r\n.layui-text p:last-child{margin-bottom: 0;}\r\n.layui-text a:not(.layui-btn){color: #01AAED;}\r\n.layui-text a:not(.layui-btn):hover{text-decoration: underline;}\r\n.layui-text blockquote:not(.layui-elem-quote){margin: 15px 0; padding: 5px 15px; border-left: 5px solid #eee;}\r\n.layui-text pre > code:not(.layui-code){padding: 15px; font-family: \"Courier New\",Consolas,\"Lucida Console\";}\r\n\r\n/* 字体大小 */\r\n.layui-font-12{font-size: 12px !important;}\r\n.layui-font-13{font-size: 13px !important;}\r\n.layui-font-14{font-size: 14px !important;}\r\n.layui-font-16{font-size: 16px !important;}\r\n.layui-font-18{font-size: 18px !important;}\r\n.layui-font-20{font-size: 20px !important;}\r\n.layui-font-22{font-size: 22px !important;}\r\n.layui-font-24{font-size: 24px !important;}\r\n.layui-font-26{font-size: 26px !important;}\r\n.layui-font-28{font-size: 28px !important;}\r\n.layui-font-30{font-size: 30px !important;}\r\n.layui-font-32{font-size: 32px !important;}\r\n\r\n/* 字体颜色 */\r\n.layui-font-red{color: #ff5722 !important;} /*赤*/\r\n.layui-font-orange{color: #ffb800!important;} /*橙*/\r\n.layui-font-green{color: #16baaa!important;} /*绿*/\r\n.layui-font-cyan{color: #2f4056!important;} /*藏青*/\r\n.layui-font-blue{color: #01AAED!important;} /*蓝*/\r\n.layui-font-purple{color: #a233c6 !important;} /*紫*/\r\n.layui-font-black{color: #000!important;} /*深*/\r\n.layui-font-gray{color: #c2c2c2!important;} /*浅*/\r\n\r\n\r\n\r\n/*\r\n * 按钮\r\n */\r\n\r\n.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;}\r\n.layui-btn:hover{opacity: 0.8; filter:alpha(opacity=80); color: #fff;}\r\n.layui-btn:active{opacity: 1; filter:alpha(opacity=100);}\r\n.layui-btn+.layui-btn{margin-left: 10px;}\r\n\r\n/* 按钮容器 */\r\n.layui-btn-container{word-spacing: -5px;}\r\n.layui-btn-container .layui-btn{margin-right: 10px; margin-bottom: 10px; word-spacing: normal;}\r\n.layui-btn-container .layui-btn+.layui-btn{margin-left: 0;}\r\n.layui-table .layui-btn-container .layui-btn{margin-bottom: 9px;}\r\n\r\n\r\n/* 圆角 */.layui-btn-radius{border-radius: 100px;}\r\n.layui-btn .layui-icon{padding: 0 2px; vertical-align: middle\\0; vertical-align: bottom;}\r\n\r\n/* 原始 */.layui-btn-primary{border-color: #d2d2d2; background: none; color: #5F5F5F;}\r\n.layui-btn-primary:hover{border-color: #16baaa; color: #333;}\r\n/* 百搭 */.layui-btn-normal{background-color: #1e9fff;}\r\n/* 暖色 */.layui-btn-warm{background-color: #ffb800;}\r\n/* 警告 */.layui-btn-danger{background-color: #ff5722;}\r\n/* 选中 */.layui-btn-checked{background-color: #16b777;}\r\n/* 禁用 */.layui-btn-disabled, .layui-btn-disabled:hover, .layui-btn-disabled:active{border-color: #eee !important; background-color: #FBFBFB !important; color: #d2d2d2 !important; cursor: not-allowed !important; opacity: 1;}\r\n\r\n/* 大型 */.layui-btn-lg{height: 44px; line-height: 44px; padding: 0 25px; font-size: 16px;}\r\n/* 小型 */.layui-btn-sm{height: 30px; line-height: 30px; padding: 0 10px; font-size: 12px;}\r\n/* 超小 */.layui-btn-xs{height: 22px; line-height: 22px; padding: 0 5px; font-size: 12px;}\r\n.layui-btn-xs i{font-size: 12px !important;}\r\n/* 按钮组 */.layui-btn-group{display: inline-block; vertical-align: middle; font-size: 0;}\r\n.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;}\r\n.layui-btn-group .layui-btn-primary{border-left: none;}\r\n.layui-btn-group .layui-btn-primary:hover{border-color: #d2d2d2; color: #16baaa;}\r\n.layui-btn-group .layui-btn:first-child{border-left: none; border-radius: 2px 0 0 2px;}\r\n.layui-btn-group .layui-btn-primary:first-child{border-left: 1px solid #d2d2d2;}\r\n.layui-btn-group .layui-btn:last-child{border-radius: 0 2px 2px 0;}\r\n.layui-btn-group .layui-btn+.layui-btn{margin-left: 0;}\r\n.layui-btn-group+.layui-btn-group{margin-left: 10px;}\r\n/* 流体 */.layui-btn-fluid{width: 100%;}\r\n\r\n/** 表单 **/\r\n.layui-input, .layui-textarea, .layui-select{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;}\r\n.layui-input::-webkit-input-placeholder,\r\n.layui-textarea::-webkit-input-placeholder,\r\n.layui-select::-webkit-input-placeholder{line-height: 1.3;}\r\n.layui-input, .layui-textarea{display: block; width: 100%; padding-left: 10px;}\r\n.layui-input:hover, .layui-textarea:hover{border-color: #d2d2d2 !important;}\r\n.layui-input:focus, .layui-textarea:focus{border-color: #16b777 !important; box-shadow: 0 0 0 3px rgba(22,183,119,0.08);}\r\n.layui-textarea{position: relative; min-height: 100px; height: auto; line-height: 20px; padding: 6px 10px; resize: vertical;}\r\n.layui-input[disabled], .layui-textarea[disabled]{background-color: #fafafa;}\r\n.layui-select{padding: 0 10px;}\r\n.layui-form select,\r\n.layui-form input[type=checkbox],\r\n.layui-form input[type=radio]{display: none;}\r\n.layui-form *[lay-ignore]{display: initial;}\r\n\r\n.layui-form-item{position: relative; margin-bottom: 15px; clear: both; *zoom: 1;}\r\n.layui-form-item:after{content:'\\20'; clear: both; *zoom: 1; display: block; height:0;}\r\n.layui-form-label{position: relative; float: left; display: block; padding: 9px 15px; width: 80px; font-weight: 400; line-height: 20px; text-align: right;}\r\n.layui-form-label-col{display: block; float: none; padding: 9px 0; line-height: 20px; text-align: left;}\r\n.layui-form-item .layui-inline{margin-bottom: 5px; margin-right: 10px;}\r\n.layui-input-block, .layui-input-inline{position: relative;}\r\n.layui-input-block{margin-left: 110px; min-height: 36px;}\r\n.layui-input-inline{display: inline-block; vertical-align: middle;}\r\n.layui-form-item .layui-input-inline{float: left; width: 190px; margin-right: 10px;}\r\n.layui-form-text .layui-input-inline{width: auto;}\r\n\r\n/* 分割块 */\r\n.layui-form-mid{position: relative; float: left; display: block; padding: 9px 0 !important; line-height: 20px; margin-right: 10px;}\r\n\r\n/* 警告条 */\r\n.layui-form-danger:focus,\r\n.layui-form-danger+.layui-form-select .layui-input{border-color: #ff5722 !important; box-shadow: 0 0 0 3px rgba(255,87,34,0.08);}\r\n\r\n\r\n/* 输入框点缀 */\r\n.layui-input-prefix,\r\n.layui-input-suffix,\r\n.layui-input-split,\r\n.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;}\r\n.layui-input-prefix{left: 0; border-radius: 2px 0 0 2px;}\r\n.layui-input-suffix{right: 0; border-radius: 0 2px 2px 0;}\r\n.layui-input-split{border-width: 1px; border-style: solid;}\r\n.layui-input-prefix .layui-icon,\r\n.layui-input-suffix .layui-icon,\r\n.layui-input-split .layui-icon{position: relative; font-size: 16px; color: #5F5F5F; transition: all .3s;}\r\n\r\n/* 输入框前后置容器 */\r\n.layui-input-group{position: relative; display: table; box-sizing: border-box;}\r\n.layui-input-group>*{display: table-cell; vertical-align: middle; position: relative;}\r\n.layui-input-group .layui-input{padding-right: 15px;}\r\n.layui-input-group > .layui-input-prefix{width: auto; border-right: 0;}\r\n.layui-input-group > .layui-input-suffix{width: auto; border-left: 0;}\r\n.layui-input-group .layui-input-split{white-space: nowrap;}\r\n\r\n/* 输入框前后缀容器 */\r\n.layui-input-wrap{position: relative; line-height: 38px;}\r\n.layui-input-wrap .layui-input{padding-right: 35px;;}\r\n.layui-input-wrap .layui-input::-ms-clear,\r\n.layui-input-wrap .layui-input::-ms-reveal{display: none;}\r\n.layui-input-wrap .layui-input-prefix + .layui-input,\r\n.layui-input-wrap .layui-input-prefix ~ * .layui-input{padding-left: 35px;}\r\n.layui-input-wrap .layui-input-split + .layui-input,\r\n.layui-input-wrap .layui-input-split ~ * .layui-input{padding-left: 45px;}\r\n.layui-input-wrap .layui-input-prefix ~ .layui-form-select{position: static;}\r\n.layui-input-wrap .layui-input-prefix,\r\n.layui-input-wrap .layui-input-suffix,\r\n.layui-input-wrap .layui-input-split{pointer-events: none;}\r\n.layui-input-wrap .layui-input:hover + .layui-input-split{border-color: #d2d2d2;}\r\n.layui-input-wrap .layui-input:focus + .layui-input-split{border-color: #16b777;}\r\n.layui-input-wrap .layui-input.layui-form-danger:focus + .layui-input-split{border-color: #ff5722;}\r\n.layui-input-wrap .layui-input-prefix.layui-input-split{border-width: 0; border-right-width: 1px;}\r\n.layui-input-wrap .layui-input-suffix.layui-input-split{border-width: 0; border-left-width: 1px;}\r\n\r\n/* 输入框动态点缀 */\r\n.layui-input-affix{line-height: 38px;}\r\n.layui-input-suffix .layui-input-affix{right: auto; left: -35px;}\r\n.layui-input-affix .layui-icon{color: rgba(0,0,0,.8); pointer-events: auto!important; cursor: pointer;}\r\n.layui-input-affix .layui-icon-clear{color: rgba(0,0,0,.3);}\r\n.layui-input-affix .layui-icon:hover{color: rgba(0,0,0,.6);}\r\n\r\n/* 数字输入框动态点缀 */\r\n.layui-input-wrap .layui-input-number{width: 24px; padding: 0;}\r\n.layui-input-wrap .layui-input-number .layui-icon{position: absolute; right: 0; width: 100%; height: 50%; line-height: normal; font-size: 12px;}\r\n.layui-input-wrap .layui-input-number .layui-icon:before{position: absolute; left: 50%; top: 50%; margin-top: -6px; margin-left: -6px;}\r\n.layui-input-wrap .layui-input-number .layui-icon-up{top: 0; border-bottom: 1px solid #eee;}\r\n.layui-input-wrap .layui-input-number .layui-icon-down{bottom: 0;}\r\n.layui-input-wrap .layui-input-number .layui-icon:hover{font-weight: 700;}\r\n.layui-input-wrap .layui-input[type=\"number\"]::-webkit-outer-spin-button,\r\n.layui-input-wrap .layui-input[type=\"number\"]::-webkit-inner-spin-button{-webkit-appearance: none !important;}\r\n.layui-input-wrap .layui-input[type=\"number\"]{-moz-appearance: textfield;}\r\n.layui-input-wrap .layui-input[type=\"number\"].layui-input-number-out-of-range{color:#ff5722;}\r\n\r\n\r\n\r\n/* 下拉选择 */\r\n.layui-form-select{position: relative; color: #5F5F5F;}\r\n.layui-form-select .layui-input{padding-right: 30px; cursor: pointer;}\r\n.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;}\r\n.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;}\r\n.layui-form-select dl dt,\r\n.layui-form-select dl dd{padding: 0 10px; line-height: 36px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;}\r\n.layui-form-select dl dt{font-size: 12px; color: #999;}\r\n.layui-form-select dl dd{cursor: pointer;}\r\n.layui-form-select dl dd:hover{background-color: #f8f8f8; -webkit-transition: .5s all; transition: .5s all;}\r\n.layui-form-select .layui-select-group dd{padding-left: 20px;}\r\n.layui-form-select dl dd.layui-select-tips{padding-left: 10px !important; color: #999;}\r\n.layui-form-select dl dd.layui-this{background-color: #f8f8f8; color: #16b777; font-weight: 700;}\r\n/*.layui-form-select dl dd.layui-this{background-color: #f8f8f8; color: #16b777; font-weight: 700;}*/\r\n.layui-form-select dl dd.layui-disabled{background-color: #fff;}\r\n.layui-form-selected dl{display: block;}\r\n.layui-form-selected .layui-edge{margin-top: -9px; -webkit-transform:rotate(180deg); transform: rotate(180deg);}\r\n.layui-form-selected .layui-edge{margin-top: -3px\\0; }\r\n:root .layui-form-selected .layui-edge{margin-top: -9px\\0/IE9;}\r\n.layui-form-selectup dl{top: auto; bottom: 42px;}\r\n.layui-select-none{margin: 5px 0; text-align: center; color: #999;}\r\n.layui-select-panel-wrap {position: absolute; z-index: 99999999;}\r\n.layui-select-panel-wrap dl{position: relative; display: block; top:0;}\r\n\r\n.layui-select-disabled .layui-disabled{border-color: #eee !important;}\r\n.layui-select-disabled .layui-edge{border-top-color: #d2d2d2}\r\n\r\n/* 复选框 */\r\n.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;}\r\n.layui-form-checkbox:hover{}\r\n.layui-form-checkbox > *{display: inline-block; vertical-align: middle;}\r\n.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;}\r\n.layui-form-checkbox > div > .layui-icon{line-height: normal}\r\n.layui-form-checkbox:hover > div{background-color: #c2c2c2;}\r\n.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;}\r\n.layui-form-checkbox:hover > i{border-color: #c2c2c2; color: #c2c2c2;}\r\n.layui-form-checked,\r\n.layui-form-checked:hover{border-color: #16b777;}\r\n.layui-form-checked > div,\r\n.layui-form-checked:hover > div{background-color: #16b777;}\r\n.layui-form-checked > i,\r\n.layui-form-checked:hover > i{color: #16b777;}\r\n.layui-form-item .layui-form-checkbox{margin-top: 4px;}\r\n.layui-form-checkbox.layui-checkbox-disabled > div{background-color: #eee !important;}\r\n.layui-form *[lay-checkbox]{display: none;}\r\n\r\n/* 复选框-默认风格 */\r\n.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: none;}\r\n.layui-form-checkbox[lay-skin=\"primary\"] > div{margin-top: -1px; padding-left: 0; padding-right: 15px; line-height: 18px; background: none; color: #5F5F5F;}\r\n.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;}\r\n.layui-form-checkbox[lay-skin=\"primary\"]:hover > i{border-color: #16b777; color: #fff;}\r\n.layui-form-checked[lay-skin=\"primary\"] > i{border-color: #16b777 !important; background-color: #16b777; color: #fff;}\r\n.layui-checkbox-disabled[lay-skin=\"primary\"] > div{background: none!important;}\r\n.layui-form-checked.layui-checkbox-disabled[lay-skin=\"primary\"] > i{background: #eee!important; border-color: #eee!important;}\r\n.layui-checkbox-disabled[lay-skin=\"primary\"]:hover > i{border-color: #d2d2d2;}\r\n.layui-form-item .layui-form-checkbox[lay-skin=\"primary\"]{margin-top: 10px;}\r\n.layui-form-checkbox[lay-skin=\"primary\"] > .layui-icon-indeterminate{border-color: #16b777;}\r\n.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;}\r\n\r\n/* 复选框-开关风格 */\r\n.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;}\r\n.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;}\r\n.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;}\r\n.layui-form-onswitch{border-color: #16b777; background-color: #16b777;}\r\n.layui-form-onswitch > i{left: 100%; margin-left: -21px; background-color: #fff;}\r\n.layui-form-onswitch > div{margin-left: 0; margin-right: 21px; color: #fff!important;}\r\n\r\n/* 无样式风格-根据模板自定义样式*/\r\n.layui-form-checkbox[lay-skin=\"none\"] *,\r\n.layui-form-radio[lay-skin=\"none\"] *{box-sizing: border-box;}\r\n.layui-form-checkbox[lay-skin=\"none\"],\r\n.layui-form-radio[lay-skin=\"none\"] {position: relative; min-height: 20px; margin: 0; padding: 0; height: auto; line-height: normal;}\r\n.layui-form-checkbox[lay-skin=\"none\"]>div,\r\n.layui-form-radio[lay-skin=\"none\"]>div{position: relative; top: 0; left: 0; cursor: pointer; z-index: 10; color: inherit; background-color: inherit;}\r\n.layui-form-checkbox[lay-skin=\"none\"]>i,\r\n.layui-form-radio[lay-skin=\"none\"]>i{display: none;}\r\n.layui-form-checkbox[lay-skin=\"none\"].layui-checkbox-disabled>div,\r\n.layui-form-radio[lay-skin=\"none\"].layui-radio-disabled>div{cursor: not-allowed;}\r\n\r\n.layui-checkbox-disabled{border-color: #eee !important;}\r\n.layui-checkbox-disabled > div{color: #c2c2c2!important;}\r\n.layui-checkbox-disabled > i{border-color: #eee !important;}\r\n.layui-checkbox-disabled:hover > i{color: #fff !important;}\r\n\r\n/* 单选框 */\r\n.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;}\r\n.layui-form-radio > *{display: inline-block; vertical-align: middle; font-size: 14px;}\r\n.layui-form-radio > i{margin-right: 8px; font-size: 22px; color: #c2c2c2;}\r\n.layui-form-radioed,\r\n.layui-form-radioed > i,\r\n.layui-form-radio:hover > *{color: #16b777;}\r\n.layui-radio-disabled > i{color: #eee !important;}\r\n.layui-radio-disabled > *{color: #c2c2c2!important;}\r\n.layui-form *[lay-radio]{display: none;}\r\n\r\n/* 表单方框风格 */\r\n.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;}\r\n.layui-form-pane .layui-input-inline{margin-left: -1px;}\r\n.layui-form-pane .layui-input-block{margin-left: 110px; left: -1px;}\r\n.layui-form-pane .layui-input{border-radius: 0 2px 2px 0;}\r\n.layui-form-pane .layui-form-text .layui-form-label{float: none; width: 100%; border-radius: 2px; box-sizing: border-box; text-align: left;}\r\n.layui-form-pane .layui-form-text .layui-input-inline{display: block; margin: 0; top: -1px; clear: both;}\r\n.layui-form-pane .layui-form-text .layui-input-block{margin: 0; left: 0; top: -1px;}\r\n.layui-form-pane .layui-form-text .layui-textarea{min-height: 100px; border-radius: 0 0 2px 2px;}\r\n.layui-form-pane .layui-form-checkbox{margin: 4px 0 4px 10px;}\r\n.layui-form-pane .layui-form-switch,\r\n.layui-form-pane .layui-form-radio{margin-top: 6px; margin-left: 10px; }\r\n.layui-form-pane .layui-form-item[pane]{position: relative; border-width: 1px; border-style: solid;}\r\n.layui-form-pane .layui-form-item[pane] .layui-form-label{position: absolute; left: 0; top: 0; height: 100%; border-width: 0px; border-right-width: 1px;}\r\n.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left: 110px;}\r\n\r\n/** 表单响应式 **/\r\n@media screen and (max-width: 450px) {\r\n .layui-form-item .layui-form-label{text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}\r\n .layui-form-item .layui-inline{display: block; margin-right: 0; margin-bottom: 20px; clear: both;}\r\n .layui-form-item .layui-inline:after{content:'\\20'; clear:both; display:block; height:0;}\r\n .layui-form-item .layui-input-inline{display: block; float: none; left: -3px; width: auto !important; margin: 0 0 10px 112px; }\r\n .layui-form-item .layui-input-inline+.layui-form-mid{margin-left: 110px; top: -5px; padding: 0;}\r\n .layui-form-item .layui-form-checkbox{margin-right: 5px; margin-bottom: 5px;}\r\n}\r\n\r\n/** 分页 **/\r\n.layui-laypage{display: inline-block; *display: inline; *zoom: 1; vertical-align: middle; margin: 10px 0; font-size: 0;}\r\n.layui-laypage>a:first-child,\r\n.layui-laypage>a:first-child em{border-radius: 2px 0 0 2px;}\r\n.layui-laypage>a:last-child,\r\n.layui-laypage>a:last-child em{border-radius: 0 2px 2px 0;}\r\n.layui-laypage>*:first-child{margin-left: 0!important;}\r\n.layui-laypage>*:last-child{margin-right: 0!important;}\r\n.layui-laypage a,\r\n.layui-laypage span,\r\n.layui-laypage input,\r\n.layui-laypage button,\r\n.layui-laypage select{border: 1px solid #eee;}\r\n.layui-laypage a,\r\n.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;}\r\n.layui-laypage a[data-page]{color: #333;}\r\n.layui-laypage a{text-decoration: none !important; cursor: pointer;}\r\n.layui-laypage a:hover{color: #16baaa;}\r\n.layui-laypage em{font-style: normal;}\r\n.layui-laypage .layui-laypage-spr{color:#999; font-weight: 700;}\r\n.layui-laypage .layui-laypage-curr{position: relative;}\r\n.layui-laypage .layui-laypage-curr em{position: relative; color: #fff;}\r\n.layui-laypage .layui-laypage-curr .layui-laypage-em{position: absolute; left: -1px; top: -1px; padding: 1px; width: 100%; height: 100%; background-color: #16baaa; }\r\n.layui-laypage-em{border-radius: 2px;}\r\n.layui-laypage-prev em,\r\n.layui-laypage-next em{font-family: Sim sun; font-size: 16px;}\r\n\r\n.layui-laypage .layui-laypage-count,\r\n.layui-laypage .layui-laypage-limits,\r\n.layui-laypage .layui-laypage-refresh,\r\n.layui-laypage .layui-laypage-skip{margin-left: 10px; margin-right: 10px; padding: 0; border: none;}\r\n.layui-laypage .layui-laypage-limits,\r\n.layui-laypage .layui-laypage-refresh{vertical-align: top;}\r\n.layui-laypage .layui-laypage-refresh i{font-size: 18px; cursor: pointer;}\r\n.layui-laypage select{height: 22px; padding: 3px; border-radius: 2px; cursor: pointer;}\r\n.layui-laypage .layui-laypage-skip{height: 30px; line-height: 30px; color: #999;}\r\n.layui-laypage input, .layui-laypage button{height: 30px; line-height: 30px; border-radius: 2px; vertical-align: top; background-color: #fff; box-sizing: border-box;}\r\n.layui-laypage input{display: inline-block; width: 40px; margin: 0 10px; padding: 0 3px; text-align: center;}\r\n.layui-laypage input:focus,\r\n.layui-laypage select:focus{border-color: #16baaa!important;}\r\n.layui-laypage button{margin-left: 10px; padding: 0 10px; cursor: pointer;}\r\n\r\n/** 流加载 **/\r\n.layui-flow-more{margin: 10px 0; text-align: center; color: #999; font-size: 14px; clear: both;}\r\n.layui-flow-more a{ height: 32px; line-height: 32px; }\r\n.layui-flow-more a *{display: inline-block; vertical-align: top;}\r\n.layui-flow-more a cite{padding: 0 20px; border-radius: 3px; background-color: #eee; color: #333; font-style: normal;}\r\n.layui-flow-more a cite:hover{opacity: 0.8;}\r\n.layui-flow-more a i{font-size: 30px; color: #737383;}\r\n\r\n/** 表格 **/\r\n.layui-table{width: 100%; margin: 10px 0; background-color: #fff; color: #5F5F5F;}\r\n.layui-table tr{transition: all .3s; -webkit-transition: all .3s;}\r\n.layui-table th{text-align: left; font-weight: 600;}\r\n\r\n.layui-table thead tr,\r\n.layui-table-header,\r\n.layui-table-tool,\r\n.layui-table-total,\r\n.layui-table-total tr,\r\n.layui-table-patch{}\r\n.layui-table-mend{background-color: #fff;}\r\n.layui-table-hover,\r\n.layui-table-click,\r\n.layui-table[lay-even] tbody tr:nth-child(even){background-color: #f8f8f8;}\r\n.layui-table-checked{background-color: #dbfbf0;}\r\n.layui-table-checked.layui-table-hover,\r\n.layui-table-checked.layui-table-click{background-color: #abf8dd;}\r\n.layui-table-disabled-transition *,\r\n.layui-table-disabled-transition *:before,\r\n.layui-table-disabled-transition *:after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\r\n\r\n\r\n.layui-table th,\r\n.layui-table td,\r\n.layui-table[lay-skin=\"line\"],\r\n.layui-table[lay-skin=\"row\"],\r\n.layui-table-view,\r\n.layui-table-tool,\r\n.layui-table-header,\r\n.layui-table-col-set,\r\n.layui-table-total,\r\n.layui-table-page,\r\n.layui-table-fixed-r,\r\n.layui-table-mend,\r\n.layui-table-tips-main,\r\n.layui-table-grid-down{border-width: 1px; border-style: solid; border-color: #eee;}\r\n\r\n.layui-table th, .layui-table td{position: relative; padding: 9px 15px; min-height: 20px; line-height: 20px; font-size: 14px;}\r\n\r\n.layui-table[lay-skin=\"line\"] th, .layui-table[lay-skin=\"line\"] td{border-width: 0; border-bottom-width: 1px;}\r\n.layui-table[lay-skin=\"row\"] th, .layui-table[lay-skin=\"row\"] td{border-width: 0;border-right-width: 1px;}\r\n.layui-table[lay-skin=\"nob\"] th, .layui-table[lay-skin=\"nob\"] td{border: none;}\r\n\r\n.layui-table img{max-width:100px;}\r\n\r\n/* 大表格 */\r\n.layui-table[lay-size=\"lg\"] th,\r\n.layui-table[lay-size=\"lg\"] td{padding-top: 15px; padding-right: 30px; padding-bottom: 15px; padding-left: 30px;}\r\n.layui-table-view .layui-table[lay-size=\"lg\"] .layui-table-cell{height: 50px; line-height: 40px;}\r\n\r\n/* 小表格 */\r\n.layui-table[lay-size=\"sm\"] th,\r\n.layui-table[lay-size=\"sm\"] td{padding-top: 5px; padding-right: 10px; padding-bottom: 5px; padding-left: 10px; font-size: 12px;}\r\n.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;}\r\n\r\n/* 数据表格 */\r\n.layui-table[lay-data],\r\n.layui-table[lay-options]{display: none;}\r\n.layui-table-box{position: relative; overflow: hidden;}\r\n.layui-table-view{clear: both;position: relative; border-right: none;}\r\n.layui-table-view:after {content: \"\"; position: absolute; top: 0; right: 0; width: 1px; height: 100%; background-color: #eee; z-index: 101;}\r\n.layui-table-view .layui-table{position: relative; width: auto; margin: 0; border: 0; border-collapse: separate;}\r\n.layui-table-view .layui-table[lay-skin=\"line\"]{border-width: 0; border-right-width: 1px;}\r\n.layui-table-view .layui-table[lay-skin=\"row\"]{border-width: 0; border-bottom-width: 1px;}\r\n.layui-table-view .layui-table th,\r\n.layui-table-view .layui-table td{padding: 0; border-top: none; border-left: none;}\r\n.layui-table-view .layui-table th [lay-event],\r\n.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor: pointer;}\r\n.layui-table-view .layui-table th span,\r\n.layui-table-view .layui-table td{cursor: default;}\r\n.layui-table-view .layui-table td[data-edit]{cursor: text;}\r\n.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: \"\";}\r\n\r\n.layui-table-view .layui-form-checkbox[lay-skin=\"primary\"] i{width: 18px; height: 18px; line-height: 16px;}\r\n.layui-table-view .layui-form-radio{line-height: 0; padding: 0;}\r\n.layui-table-view .layui-form-radio>i{margin: 0; font-size: 20px;}\r\n.layui-table-init{position: absolute; left: 0; top: 0; right: 0; bottom: 0; margin: 0; z-index: 199; transition: opacity .1s; user-select: none;}\r\n.layui-table-loading-icon{position: absolute; width: 100%\\0; left: 50%; left:auto\\0; top: 50%; margin-top: -15px\\0; transform: translate(-50%, -50%); transform: none\\0; text-align: center;}\r\n.layui-table-loading-icon .layui-icon{font-size: 30px; color: #c2c2c2;}\r\n.layui-table-header{border-width: 0; border-bottom-width: 1px; overflow: hidden;}\r\n.layui-table-header .layui-table{margin-bottom: -1px;}\r\n\r\n.layui-table-column{position: relative; width: 100%; min-height: 41px; padding: 8px 16px; border-width: 0; border-bottom-width: 1px;}\r\n.layui-table-column .layui-btn-container{margin-bottom: -8px;}\r\n.layui-table-column .layui-btn-container .layui-btn{margin-right: 8px; margin-bottom: 8px;}\r\n\r\n.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;}\r\n.layui-table-tool .layui-inline[lay-event]:hover{border: 1px solid #999;}\r\n.layui-table-tool-temp{padding-right: 120px;}\r\n.layui-table-tool-self{position: absolute; right: 17px; top: 10px;}\r\n.layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{margin: 0 0 0 10px;}\r\n.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);}\r\n.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;}\r\n.layui-table-tool-panel li .layui-form-checkbox[lay-skin=\"primary\"]{width: 100%;}\r\n.layui-table-tool-panel li:hover{background-color: #f8f8f8;}\r\n.layui-table-tool-panel li .layui-form-checkbox[lay-skin=\"primary\"]{padding-left: 28px;}\r\n.layui-table-tool-panel li .layui-form-checkbox[lay-skin=\"primary\"] i{position: absolute; left: 0; top: 0;}\r\n.layui-table-tool-panel li .layui-form-checkbox[lay-skin=\"primary\"] span{padding: 0;}\r\n.layui-table-tool .layui-table-tool-self .layui-table-tool-panel{left: auto; right: -1px;}\r\n\r\n.layui-table-col-set{position: absolute; right: 0; top: 0; width: 20px; height: 100%; border-width: 0; border-left-width: 1px; background-color: #fff;}\r\n\r\n.layui-table-sort{width: 10px; height: 20px; margin-left: 5px; cursor: pointer!important;}\r\n.layui-table-sort .layui-edge{position: absolute; left: 5px; border-width: 5px;}\r\n.layui-table-sort .layui-table-sort-asc{top: 3px; border-top: none; border-bottom-style: solid; border-bottom-color: #b2b2b2;}\r\n.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color: #5F5F5F;}\r\n.layui-table-sort .layui-table-sort-desc{bottom: 5px; border-bottom: none; border-top-style: solid; border-top-color: #b2b2b2;}\r\n.layui-table-sort .layui-table-sort-desc:hover{border-top-color: #5F5F5F;}\r\n.layui-table-sort[lay-sort=\"asc\"] .layui-table-sort-asc{border-bottom-color: #000;}\r\n.layui-table-sort[lay-sort=\"desc\"] .layui-table-sort-desc{border-top-color: #000;}\r\n\r\n.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;}\r\n.layui-table-cell .layui-form-checkbox[lay-skin=\"primary\"]{top: -1px; padding: 0;}\r\n.layui-table-cell .layui-form-checkbox[lay-skin=\"primary\"] > div{padding-left: 24px;}\r\n.layui-table-cell .layui-table-link{color: #01AAED;}\r\n.layui-table-cell .layui-btn{vertical-align: inherit;}\r\n.layui-table-cell[align=\"center\"]{-webkit-box-pack: center;}\r\n.layui-table-cell[align=\"right\"]{-webkit-box-pack: end;}\r\n\r\n.laytable-cell-checkbox,\r\n.laytable-cell-radio,\r\n.laytable-cell-space,\r\n.laytable-cell-numbers{text-align: center; -webkit-box-pack: center;}\r\n\r\n.layui-table-body{position: relative; overflow: auto; margin-bottom: -1px;}\r\n.layui-table-body .layui-none{line-height: 26px; padding: 30px 15px; text-align: center; color: #999;}\r\n.layui-table-fixed{position: absolute; left: 0; top: 0; z-index: 101;}\r\n.layui-table-fixed .layui-table-body{overflow: hidden;}\r\n.layui-table-fixed-l{box-shadow: 1px 0 8px rgba(0,0,0,.08);}\r\n.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);}\r\n.layui-table-fixed-r .layui-table-header{position: relative; overflow: visible;}\r\n.layui-table-mend{position: absolute; right: -49px; top: 0; height: 100%; width: 50px; border-width: 0; border-left-width: 1px;}\r\n\r\n.layui-table-tool{position: relative; width: 100%; min-height: 50px; line-height: 30px; padding: 10px 15px; border-width: 0; border-bottom-width: 1px; /*box-shadow: 0 1px 8px 0 rgb(0 0 0 / 8%);*/}\r\n.layui-table-tool .layui-btn-container{margin-bottom: -10px;}\r\n\r\n.layui-table-total{margin-bottom: -1px; border-width: 0; border-top-width: 1px; overflow: hidden;}\r\n\r\n\r\n.layui-table-page{border-width: 0; border-top-width: 1px; margin-bottom: -1px; white-space: nowrap; overflow: hidden;}\r\n.layui-table-page>div{height: 26px;}\r\n.layui-table-page .layui-laypage{margin: 0;}\r\n.layui-table-page .layui-laypage a,\r\n.layui-table-page .layui-laypage span{height: 26px; line-height: 26px; margin-bottom: 10px; border: none; background: none;}\r\n.layui-table-page .layui-laypage a,\r\n.layui-table-page .layui-laypage span.layui-laypage-curr{padding: 0 12px;}\r\n.layui-table-page .layui-laypage span{margin-left: 0; padding: 0;}\r\n.layui-table-page .layui-laypage .layui-laypage-prev{margin-left: -11px!important;}\r\n.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left: 0; top: 0; padding: 0;}\r\n.layui-table-page .layui-laypage input,\r\n.layui-table-page .layui-laypage button{height: 26px; line-height: 26px; }\r\n.layui-table-page .layui-laypage input{width: 40px;}\r\n.layui-table-page .layui-laypage button{padding: 0 10px;}\r\n.layui-table-page select{height: 18px;}\r\n.layui-table-pagebar{float: right; line-height: 23px;}\r\n.layui-table-pagebar .layui-btn-sm{margin-top: -1px;}\r\n.layui-table-pagebar .layui-btn-xs{margin-top: 2px;}\r\n\r\n.layui-table-view select[lay-ignore]{display: inline-block;}\r\n.layui-table-patch .layui-table-cell{padding: 0; width: 30px;}\r\n\r\n.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;}\r\n.layui-table-edit:focus{border-color: #16b777!important;}\r\ninput.layui-input.layui-table-edit{height: 100%;}\r\nselect.layui-table-edit{padding: 0 0 0 10px; border-color: #d2d2d2;}\r\n.layui-table-view .layui-form-switch,\r\n.layui-table-view .layui-form-checkbox,\r\n.layui-table-view .layui-form-radio{top: 0; margin: 0;}\r\n.layui-table-view .layui-form-checkbox{top: -1px; height: 26px; line-height: 26px;}\r\n.layui-table-view .layui-form-checkbox i{height: 26px;}\r\n\r\n/* 展开溢出的单元格 */\r\n.layui-table-grid .layui-table-cell{overflow: visible;}\r\n.layui-table-grid-down{position: absolute; top: 0; right: 0; width: 24px; height: 100%; padding: 5px 0; border-width: 0; border-left-width: 1px; text-align: center; background-color: #fff; color: #999; cursor: pointer;}\r\n.layui-table-grid-down .layui-icon{position: absolute; top: 50%; left: 50%; margin: -8px 0 0 -8px; font-size: 14px;}\r\n.layui-table-grid-down:hover{background-color: #fbfbfb;}\r\n\r\n/* 单元格多行展开风格 */\r\n.layui-table-expanded{height: 95px;}\r\n.layui-table-expanded .layui-table-cell,\r\n.layui-table-view .layui-table[lay-size=\"sm\"] .layui-table-expanded .layui-table-cell,\r\n.layui-table-view .layui-table[lay-size=\"lg\"] .layui-table-expanded .layui-table-cell{height: auto; max-height: 94px; white-space: normal; text-overflow: clip;}\r\n.layui-table-cell-c{position: absolute; bottom: -10px; right: 50%; margin-right: -9px; width: 20px; height: 20px; line-height: 18px; cursor: pointer; text-align: center; background-color: #fff; border: 1px solid #eee; border-radius: 50%; z-index: 1000; transition: 0.3s all; font-size: 14px;}\r\n.layui-table-cell-c:hover{border-color: #16b777;}\r\n.layui-table-expanded td:hover .layui-table-cell{overflow: auto;}\r\n.layui-table-main > .layui-table > tbody > tr:last-child > td > .layui-table-cell-c{bottom: 0;}\r\n\r\n/* 单元格 TIPS 展开风格 */\r\nbody .layui-table-tips .layui-layer-content{background: none; padding: 0; box-shadow: 0 1px 6px rgba(0,0,0,.12);}\r\n.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;}\r\n.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;}\r\n.layui-table-tips-c:hover{background-color: #777;}\r\n.layui-table-tips-c:before{position: relative; right: -2px;}\r\n\r\n\r\n/** 树表 **/\r\n.layui-table-tree-nodeIcon {max-width: 20px;}\r\n.layui-table-tree-nodeIcon > * {width: 100%;}\r\n.layui-table-tree-flexIcon,.layui-table-tree-nodeIcon {margin-right: 2px;}\r\n.layui-table-tree-flexIcon {cursor: pointer;}\r\n\r\n /** 文件上传 **/\r\n.layui-upload-file{display: none!important; opacity: .01; filter: Alpha(opacity=1);}\r\n.layui-upload-list{margin: 11px 0;}\r\n.layui-upload-choose{max-width: 200px; padding: 0 10px; color: #999; font-size: 14px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}\r\n.layui-upload-drag{position: relative; display: inline-block; padding: 30px; border: 1px dashed #e2e2e2; background-color: #fff; text-align: center; cursor: pointer; color: #999;}\r\n.layui-upload-drag .layui-icon{font-size: 50px; color: #16baaa;}\r\n.layui-upload-drag[lay-over]{border-color: #16baaa}\r\n.layui-upload-form{display: inline-block;}\r\n.layui-upload-iframe{position: absolute; width: 0; height: 0; border: 0; visibility: hidden}\r\n.layui-upload-wrap{position: relative; display: inline-block; vertical-align: middle;}\r\n.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;}\r\n.layui-btn-container .layui-upload-choose{padding-left: 0;}\r\n\r\n\r\n/* 基础菜单元素 */\r\n.layui-menu{position: relative; margin: 5px 0; background-color: #fff; box-sizing: border-box;}\r\n.layui-menu *{box-sizing: border-box;}\r\n.layui-menu li,\r\n.layui-menu-body-title,\r\n.layui-menu-body-title a{padding: 5px 15px; color: initial}\r\n.layui-menu li{position: relative; margin: 0 0 1px; line-height: 26px; color: rgba(0,0,0,.8); font-size: 14px; white-space: nowrap; cursor: pointer; transition: all .3s;}\r\n.layui-menu li:hover{background-color: #f8f8f8; }\r\n.layui-menu li.layui-disabled,\r\n.layui-menu li.layui-disabled *{background: none !important; color: #d2d2d2 !important; cursor: not-allowed !important;}\r\n\r\n.layui-menu-item-parent:hover>.layui-menu-body-panel{display: block; animation-name: layui-fadein; animation-duration: 0.3s; animation-fill-mode: both; animation-delay:.2s;}\r\n.layui-menu-item-parent>.layui-menu-body-title,\r\n.layui-menu-item-group>.layui-menu-body-title{padding-right: 38px;}\r\n\r\n.layui-menu .layui-menu-item-group:hover,\r\n.layui-menu .layui-menu-item-none:hover,\r\n.layui-menu .layui-menu-item-divider:hover{background: none; cursor: default;}\r\n.layui-menu .layui-menu-item-group>ul{margin: 5px 0 -5px;}\r\n.layui-menu .layui-menu-item-group>.layui-menu-body-title{color: rgba(0,0,0,.35); user-select: none;}\r\n.layui-menu .layui-menu-item-none{color: rgba(0,0,0,.35); cursor: default;}\r\n\r\n.layui-menu .layui-menu-item-none{text-align: center;}\r\n.layui-menu .layui-menu-item-divider{margin: 5px 0; padding: 0; height: 0; line-height: 0; border-bottom: 1px solid #eee; overflow: hidden;}\r\n\r\n.layui-menu .layui-menu-item-up:hover,\r\n.layui-menu .layui-menu-item-down:hover{cursor: pointer;}\r\n.layui-menu .layui-menu-item-up>.layui-menu-body-title{ color: rgba(0,0,0,.8);}\r\n.layui-menu .layui-menu-item-up>ul{visibility: hidden; height: 0; overflow: hidden;}\r\n.layui-menu .layui-menu-item-down>.layui-menu-body-title>.layui-icon-down{transform: rotate(180deg);}\r\n.layui-menu .layui-menu-item-up>.layui-menu-body-title>.layui-icon-up{transform: rotate(-180deg);}\r\n.layui-menu .layui-menu-item-up>.layui-menu-body-title:hover>.layui-icon,\r\n.layui-menu .layui-menu-item-down:hover>.layui-menu-body-title>.layui-icon{color: rgba(0,0,0,1);}\r\n.layui-menu .layui-menu-item-down>ul{visibility: visible; height: auto;}\r\n\r\n.layui-menu .layui-menu-item-checked,\r\n.layui-menu .layui-menu-item-checked2{background-color: #f8f8f8!important; color: #16b777;}\r\n.layui-menu .layui-menu-item-checked a,\r\n.layui-menu .layui-menu-item-checked2 a{color: #16b777;}\r\n.layui-menu .layui-menu-item-checked:after{position: absolute; right: -1px; top: 0; bottom: 0; border-right: 3px solid #16b777; content: \"\";}\r\n\r\n.layui-menu-body-title{position: relative; margin: -5px -15px; overflow: hidden; text-overflow: ellipsis;}\r\n.layui-menu-body-title a{display: block; margin: -5px -15px; color: rgba(0,0,0,.8);}\r\n.layui-menu-body-title a:hover{transition: all .3s;}\r\n.layui-menu-body-title>.layui-icon{position: absolute; right: 15px; top: 50%; margin-top: -6px; line-height: normal; font-size: 14px; transition: all .2s; -webkit-transition: all .2s;}\r\n.layui-menu-body-title>.layui-icon:hover{transition: all .3s;}\r\n.layui-menu-body-title>.layui-icon-right{right: 14px;}\r\n.layui-menu-body-panel{display: none; position: absolute; top: -7px; left: 100%; z-index: 1000; margin-left: 13px; padding: 5px 0;}\r\n.layui-menu-body-panel:before{content: \"\"; position: absolute; width: 20px; left: -16px; top: 0; bottom: 0;}\r\n.layui-menu-body-panel-left{left: auto; right: 100%; margin: 0 13px 0;}\r\n.layui-menu-body-panel-left:before{left: auto; right: -16px;}\r\n\r\n.layui-menu-lg li{line-height: 32px;}\r\n.layui-menu-lg li:hover,\r\n.layui-menu-lg .layui-menu-body-title a:hover{background: none; color: #16b777;}\r\n.layui-menu-lg li .layui-menu-body-panel{margin-left: 14px}\r\n.layui-menu-lg li .layui-menu-body-panel-left{margin: 0 15px 0;}\r\n\r\n\r\n/* 下拉菜单 */\r\n.layui-dropdown{position: absolute; left: -999999px; top: -999999px; z-index: 77777777; margin: 5px 0; min-width: 100px;}\r\n.layui-dropdown:before{content:\"\"; position: absolute; width: 100%; height: 6px; left: 0; top: -6px;}\r\n.layui-dropdown-shade{top: 0; left: 0; width: 100%; height: 100%; _height: expression(document.body.offsetHeight+\"px\"); position: fixed; _position: absolute; pointer-events: auto;}\r\n\r\n/** 导航菜单 **/\r\n.layui-nav{position: relative; padding: 0 15px; background-color: #2f363c; color: #fff; border-radius: 2px; font-size: 0; box-sizing: border-box;}\r\n.layui-nav *{font-size: 14px;}\r\n.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;}\r\n.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;}\r\n.layui-nav-bar,\r\n.layui-nav .layui-this:after{content: \"\"; position: absolute; left: 0; top: 0; width: 0; height: 3px; background-color: #16b777; transition: all .2s; -webkit-transition: all .2s; pointer-events: none;}\r\n.layui-nav-bar{z-index: 1000;}\r\n.layui-nav[lay-bar=\"disabled\"] .layui-nav-bar{display: none;}\r\n.layui-nav[lay-bar=\"disabled\"].layui-this:after{}\r\n.layui-nav .layui-this a,\r\n.layui-nav .layui-nav-item a:hover{color: #fff; text-decoration: none;}\r\n.layui-nav .layui-this:after{top: auto; bottom: 0; width: 100%;}\r\n.layui-nav-img{width: 30px; height: 30px; margin-right: 10px; border-radius: 50%;}\r\n\r\n.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;}\r\n.layui-nav .layui-nav-mored,\r\n.layui-nav-itemed > a .layui-nav-more{transform: rotate(180deg);}\r\n\r\n\r\n.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;}\r\n.layui-nav .layui-nav-child a{color: #5F5F5F; color: rgba(0,0,0,.8);}\r\n.layui-nav .layui-nav-child a:hover{background-color: #f8f8f8; color: rgba(0,0,0,.8);}\r\n.layui-nav-child dd{margin: 1px 0; position: relative;}\r\n.layui-nav-child dd.layui-this{background-color: #f8f8f8; color: #000;}\r\n.layui-nav-child dd.layui-this:after{display: none;}\r\n.layui-nav-child-r{left: auto; right: 0;}\r\n.layui-nav-child-c{text-align: center;}\r\n\r\n/* 垂直导航菜单 */\r\n.layui-nav.layui-nav-tree{width: 200px; padding: 0;}\r\n.layui-nav-tree .layui-nav-item{display: block; width: 100%; line-height: 40px;}\r\n.layui-nav-tree .layui-nav-item a{position: relative; height: 40px; line-height: 40px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}\r\n.layui-nav-tree .layui-nav-item>a{padding-top: 5px; padding-bottom: 5px;}\r\n.layui-nav-tree .layui-nav-more{right: 15px;}\r\n.layui-nav-tree .layui-nav-item>a .layui-nav-more{padding: 5px 0;}\r\n.layui-nav-tree .layui-nav-bar{width: 5px; height: 0;}\r\n.layui-side .layui-nav-tree .layui-nav-bar{width: 2px;}\r\n.layui-nav-tree .layui-this,\r\n.layui-nav-tree .layui-this>a,\r\n.layui-nav-tree .layui-this>a:hover,\r\n.layui-nav-tree .layui-nav-child dd.layui-this,\r\n.layui-nav-tree .layui-nav-child dd.layui-this a{background-color: #16baaa; color: #fff;}\r\n.layui-nav-tree .layui-this:after{display: none;}\r\n.layui-nav-tree .layui-nav-title a,\r\n.layui-nav-tree .layui-nav-title a:hover,\r\n.layui-nav-itemed>a{color: #fff !important;}\r\n.layui-nav-tree .layui-nav-bar{background-color: #16baaa;}\r\n\r\n.layui-nav-tree .layui-nav-child{position: relative; z-index: 0; top: 0; border: none; background: none; background-color: rgba(0,0,0,.3); box-shadow: none;}\r\n.layui-nav-tree .layui-nav-child dd{margin: 0;}\r\n.layui-nav-tree .layui-nav-child a{color: #fff; color: rgba(255,255,255,.7);}\r\n.layui-nav-tree .layui-nav-child a:hover{background: none; color: #fff;}\r\n\r\n/* 垂直导航 - 展开状态 */\r\n.layui-nav-itemed>.layui-nav-child,\r\n.layui-nav-itemed>.layui-nav-child>.layui-this>.layui-nav-child{display: block;}\r\n\r\n/* 垂直导航 - 侧边 */\r\n.layui-nav-side{position: fixed; top: 0; bottom: 0; left: 0; overflow-x: hidden; z-index: 999;}\r\n\r\n/* 导航浅色背景 */\r\n.layui-nav.layui-bg-gray .layui-nav-item a,\r\n.layui-nav-tree.layui-bg-gray a{color: #373737; color: rgba(0,0,0,.8);}\r\n.layui-nav-tree.layui-bg-gray .layui-nav-itemed>a{color: #000 !important;}\r\n.layui-nav.layui-bg-gray .layui-this a{color: #16b777;}\r\n.layui-nav-tree.layui-bg-gray .layui-nav-child{padding-left: 11px; background: none;}\r\n.layui-nav-tree.layui-bg-gray .layui-this,\r\n.layui-nav-tree.layui-bg-gray .layui-this>a,\r\n.layui-nav-tree.layui-bg-gray .layui-nav-child dd.layui-this,\r\n.layui-nav-tree.layui-bg-gray .layui-nav-child dd.layui-this a{background: none!important; color: #16b777!important; font-weight: 700;}\r\n.layui-nav-tree.layui-bg-gray .layui-nav-bar{background-color: #16b777;}\r\n\r\n\r\n/** 面包屑 **/\r\n.layui-breadcrumb{visibility: hidden; font-size: 0;}\r\n.layui-breadcrumb>*{font-size: 14px;}\r\n.layui-breadcrumb a{color: #999 !important;}\r\n.layui-breadcrumb a:hover{color: #16b777 !important;}\r\n.layui-breadcrumb a cite{color: #5F5F5F; font-style: normal;}\r\n.layui-breadcrumb span[lay-separator]{margin: 0 10px; color: #999;}\r\n\r\n/** Tab 选项卡 **/\r\n.layui-tab{margin: 10px 0; text-align: left !important;}\r\n.layui-tab[overflow]>.layui-tab-title{overflow: hidden;}\r\n.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;}\r\n.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;}\r\n.layui-tab .layui-tab-title li{position: relative; line-height: 40px; min-width: 65px; margin: 0; padding: 0 15px; text-align: center; cursor: pointer;}\r\n.layui-tab .layui-tab-title li a{display: block; padding: 0 15px; margin: 0 -15px;}\r\n.layui-tab-title .layui-this{color: #000;}\r\n\r\n.layui-tab-title .layui-this:after{position: absolute; left:0; top: 0; content: \"\"; width:100%; height: 41px; border-width: 1px; border-bottom-width: 2px; border-style: solid; border-bottom-color: #fff; border-radius: 2px 2px 0 0; box-sizing: border-box; pointer-events: none;}\r\n.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;}\r\n.layui-tab-bar .layui-icon{position: relative; display: inline-block; top: 3px; transition: all .3s; -webkit-transition: all .3s;}\r\n.layui-tab-item{display: none;}\r\n.layui-tab-more{padding-right: 30px; height: auto !important; white-space: normal !important;}\r\n.layui-tab-more li.layui-this:after{border-bottom-color: #eee; border-radius: 2px;}\r\n.layui-tab-more .layui-tab-bar .layui-icon{top: -2px; top: 3px\\0; -webkit-transform: rotate(180deg); transform: rotate(180deg);}\r\n:root .layui-tab-more .layui-tab-bar .layui-icon{top: -2px\\0/IE9;}\r\n\r\n.layui-tab-content{padding: 15px 0;}\r\n\r\n/* Tab 关闭 */.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;}\r\n.layui-tab-title li .layui-tab-close:hover{border-radius: 2px; background-color: #ff5722; color: #fff;}\r\n\r\n/* Tab 简洁风格 */.layui-tab-brief > .layui-tab-title .layui-this{color: #16baaa;}\r\n.layui-tab-brief > .layui-tab-title .layui-this:after\r\n,.layui-tab-brief > .layui-tab-more li.layui-this:after{border: none; border-radius: 0; border-bottom: 2px solid #16b777;}\r\n.layui-tab-brief[overflow] > .layui-tab-title .layui-this:after{top: -1px;}\r\n\r\n/* Tab 卡片风格 */.layui-tab-card{border-width: 1px; border-style: solid; border-radius: 2px; box-shadow: 0 2px 5px 0 rgba(0,0,0,.1);}\r\n.layui-tab-card > .layui-tab-title{background-color: #fafafa;}\r\n.layui-tab-card > .layui-tab-title li{margin-right: -1px; margin-left: -1px;}\r\n.layui-tab-card > .layui-tab-title .layui-this{background-color: #fff; }\r\n.layui-tab-card > .layui-tab-title .layui-this:after{border-top: none; border-width: 1px; border-bottom-color: #fff;}\r\n.layui-tab-card > .layui-tab-title .layui-tab-bar{height: 40px; line-height: 40px; border-radius: 0; border-top: none; border-right: none;}\r\n.layui-tab-card > .layui-tab-more .layui-this{background: none; color: #16b777;}\r\n.layui-tab-card > .layui-tab-more .layui-this:after{border: none;}\r\n\r\n/* 时间线 */\r\n.layui-timeline{padding-left: 5px;}\r\n.layui-timeline-item{position: relative; padding-bottom: 20px;}\r\n.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;}\r\n.layui-timeline-axis:hover{color: #ff5722;}\r\n.layui-timeline-item:before{content: \"\"; position: absolute; left: 5px; top: 0; z-index: 0; width: 1px; height: 100%;}\r\n\r\n.layui-timeline-item:first-child:before{display: block;}\r\n.layui-timeline-item:last-child:before{display: none;}\r\n.layui-timeline-content{padding-left: 25px;;}\r\n.layui-timeline-title{position: relative; margin-bottom: 10px; line-height: 22px;}\r\n\r\n/* 小徽章 */\r\n.layui-badge,\r\n.layui-badge-dot,\r\n.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;}\r\n.layui-badge{height: 18px; line-height: 18px;}\r\n.layui-badge-dot{width: 8px; height: 8px; padding: 0; border-radius: 50%;}\r\n.layui-badge-rim{height: 18px; line-height: 18px; border-width: 1px; border-style: solid; background-color: #fff; color: #5F5F5F;}\r\n\r\n.layui-btn .layui-badge,\r\n.layui-btn .layui-badge-dot{margin-left: 5px;}\r\n.layui-nav .layui-badge,\r\n.layui-nav .layui-badge-dot{position: absolute; top: 50%; margin: -5px 6px 0;}\r\n.layui-nav .layui-badge{margin-top: -10px;}\r\n.layui-tab-title .layui-badge,\r\n.layui-tab-title .layui-badge-dot{left: 5px; top: -2px;}\r\n\r\n/* carousel 轮播 */\r\n.layui-carousel{position: relative; left: 0; top: 0; background-color: #f8f8f8;}\r\n.layui-carousel>*[carousel-item]{position: relative; width: 100%; height: 100%; overflow: hidden;}\r\n.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;}\r\n.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;}\r\n.layui-carousel-updown > *{-webkit-transition: .3s ease-in-out up; transition: .3s ease-in-out up;}\r\n.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;}\r\n.layui-carousel-arrow[lay-type=\"add\"]{left: auto!important; right: 10px;}\r\n.layui-carousel[lay-arrow=\"always\"] .layui-carousel-arrow{opacity: 1; left: 20px;}\r\n.layui-carousel[lay-arrow=\"always\"] .layui-carousel-arrow[lay-type=\"add\"]{right: 20px;}\r\n.layui-carousel[lay-arrow=\"none\"] .layui-carousel-arrow{display: none;}\r\n.layui-carousel-arrow:hover,\r\n.layui-carousel-ind ul:hover{background-color: rgba(0,0,0,.35);}\r\n.layui-carousel:hover .layui-carousel-arrow{display: block\\0; opacity: 1; left: 20px;}\r\n.layui-carousel:hover .layui-carousel-arrow[lay-type=\"add\"]{right: 20px;}\r\n.layui-carousel-ind{position: relative; top: -35px; width: 100%; line-height: 0!important; text-align: center; font-size: 0;}\r\n.layui-carousel[lay-indicator=\"outside\"]{margin-bottom: 30px;}\r\n.layui-carousel[lay-indicator=\"outside\"] .layui-carousel-ind{top: 10px;}\r\n.layui-carousel[lay-indicator=\"outside\"] .layui-carousel-ind ul{background-color: rgba(0,0,0,.5);}\r\n.layui-carousel[lay-indicator=\"none\"] .layui-carousel-ind{display: none;}\r\n.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;}\r\n.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;}\r\n.layui-carousel-ind ul li:hover{background-color: rgba(255,255,255,.7);}\r\n.layui-carousel-ind ul li.layui-this{background-color: #fff;}\r\n.layui-carousel>*[carousel-item]>.layui-this,\r\n.layui-carousel>*[carousel-item]>.layui-carousel-prev,\r\n.layui-carousel>*[carousel-item]>.layui-carousel-next{display: block}\r\n.layui-carousel>*[carousel-item]>.layui-this{left: 0;}\r\n.layui-carousel>*[carousel-item]>.layui-carousel-prev{left: -100%;}\r\n.layui-carousel>*[carousel-item]>.layui-carousel-next{left: 100%;}\r\n.layui-carousel>*[carousel-item]>.layui-carousel-prev.layui-carousel-right,\r\n.layui-carousel>*[carousel-item]>.layui-carousel-next.layui-carousel-left{left: 0;}\r\n.layui-carousel>*[carousel-item]>.layui-this.layui-carousel-left{left: -100%;}\r\n.layui-carousel>*[carousel-item]>.layui-this.layui-carousel-right{left: 100%;}\r\n\r\n/* 上下切换 */.layui-carousel[lay-anim=\"updown\"] .layui-carousel-arrow{left: 50%!important; top: 20px; margin: 0 0 0 -18px;}\r\n.layui-carousel[lay-anim=\"updown\"] .layui-carousel-arrow[lay-type=\"add\"]{top: auto!important; bottom: 20px;}\r\n.layui-carousel[lay-anim=\"updown\"] .layui-carousel-ind{position: absolute; top: 50%; right: 20px; width: auto; height: auto;}\r\n.layui-carousel[lay-anim=\"updown\"] .layui-carousel-ind ul{padding: 3px 5px;}\r\n.layui-carousel[lay-anim=\"updown\"] .layui-carousel-ind li{display: block; margin: 6px 0;}\r\n\r\n.layui-carousel[lay-anim=\"updown\"]>*[carousel-item]>*{left: 0!important;}\r\n.layui-carousel[lay-anim=\"updown\"]>*[carousel-item]>.layui-this{top: 0;}\r\n.layui-carousel[lay-anim=\"updown\"]>*[carousel-item]>.layui-carousel-prev{top: -100%;}\r\n.layui-carousel[lay-anim=\"updown\"]>*[carousel-item]>.layui-carousel-next{top: 100%;}\r\n.layui-carousel[lay-anim=\"updown\"]>*[carousel-item]>.layui-carousel-prev.layui-carousel-right,\r\n.layui-carousel[lay-anim=\"updown\"]>*[carousel-item]>.layui-carousel-next.layui-carousel-left{top: 0;}\r\n.layui-carousel[lay-anim=\"updown\"]>*[carousel-item]>.layui-this.layui-carousel-left{top: -100%;}\r\n.layui-carousel[lay-anim=\"updown\"]>*[carousel-item]>.layui-this.layui-carousel-right{top: 100%;}\r\n\r\n/* 渐显切换 */.layui-carousel[lay-anim=\"fade\"]>*[carousel-item]>*{left: 0!important;}\r\n.layui-carousel[lay-anim=\"fade\"]>*[carousel-item]>.layui-carousel-prev,\r\n.layui-carousel[lay-anim=\"fade\"]>*[carousel-item]>.layui-carousel-next{opacity: 0;}\r\n.layui-carousel[lay-anim=\"fade\"]>*[carousel-item]>.layui-carousel-prev.layui-carousel-right,\r\n.layui-carousel[lay-anim=\"fade\"]>*[carousel-item]>.layui-carousel-next.layui-carousel-left{opacity: 1;}\r\n.layui-carousel[lay-anim=\"fade\"]>*[carousel-item]>.layui-this.layui-carousel-left,\r\n.layui-carousel[lay-anim=\"fade\"]>*[carousel-item]>.layui-this.layui-carousel-right{opacity: 0}\r\n\r\n/** fixbar **/\r\n.layui-fixbar{position: fixed; right: 16px; bottom: 16px; z-index: 999999;}\r\n.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: 0.95;}\r\n.layui-fixbar li:hover{opacity: 0.85;}\r\n.layui-fixbar li:active{opacity: 1;}\r\n.layui-fixbar .layui-fixbar-top{display: none; font-size: 40px;}\r\n\r\n/** 表情面板 **/\r\nbody .layui-util-face{border: none; background: none;}\r\nbody .layui-util-face .layui-layer-content{padding:0; background-color:#fff; color:#5F5F5F; box-shadow:none}\r\n.layui-util-face .layui-layer-TipsG{display:none;}\r\n.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);}\r\n.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;}\r\n.layui-util-face ul li:hover{position: relative; z-index: 2; border: 1px solid #eb7350; background: #fff9ec;}\r\n\r\n/** 代码文本修饰 **/\r\n.layui-code{display: block; position: relative; padding: 15px; line-height: 20px; border: 1px solid #eee; border-left-width: 6px; background-color: #fff; color: #333; font-family: \"Courier New\",Consolas,\"Lucida Console\"; font-size: 12px;}\r\n\r\n/** 穿梭框 **/\r\n.layui-transfer-box,\r\n.layui-transfer-header,\r\n.layui-transfer-search{border-width: 0; border-style: solid; border-color: #eee}\r\n.layui-transfer-box{position: relative; display: inline-block; vertical-align: middle; border-width: 1px; width: 200px; height: 360px; border-radius: 2px; background-color:#fff;}\r\n.layui-transfer-box .layui-form-checkbox{width: 100%; margin: 0 !important;}\r\n.layui-transfer-header{height: 38px; line-height: 38px; padding: 0 11px; border-bottom-width: 1px;}\r\n.layui-transfer-search{position:relative; padding: 11px; border-bottom-width: 1px;}\r\n.layui-transfer-search .layui-input{height: 32px; padding-left: 30px; font-size: 12px;}\r\n.layui-transfer-search .layui-icon-search{position: absolute; left: 20px; top: 50%; line-height: normal; margin-top: -8px; color: #5F5F5F;}\r\n.layui-transfer-active{margin: 0 15px; display: inline-block; vertical-align: middle;}\r\n.layui-transfer-active .layui-btn{display: block; margin: 0; padding: 0 15px; background-color: #16b777; border-color: #16b777; color: #fff;}\r\n.layui-transfer-active .layui-btn-disabled{background-color: #FBFBFB; border-color: #eee; color: #d2d2d2;}\r\n.layui-transfer-active .layui-btn:first-child{margin-bottom: 15px;}\r\n.layui-transfer-active .layui-btn .layui-icon{margin: 0; font-size: 14px !important;}\r\n.layui-transfer-data{padding: 5px 0; overflow: auto;}\r\n.layui-transfer-data li{height: 32px; line-height: 32px; margin-top: 0 !important; padding: 0 11px;list-style-type: none !important;}\r\n.layui-transfer-data li:hover{background-color: #f8f8f8; transition: .5s all;}\r\n.layui-transfer-data .layui-none{padding: 15px 11px; text-align: center; color: #999;}\r\n\r\n/** 评分组件 **/\r\n.layui-rate,\r\n.layui-rate *{display: inline-block; vertical-align: middle;}\r\n.layui-rate{padding: 11px 6px 11px 0; font-size: 0;}\r\n.layui-rate li{margin-top: 0 !important;}\r\n.layui-rate li i.layui-icon{ font-size: 20px; color: #ffb800;}\r\n.layui-rate li i.layui-icon{margin-right: 5px; transition: all .3s; -webkit-transition: all .3s;}\r\n.layui-rate li i:hover,\r\n.layui-rate-hover{cursor: pointer; transform: scale(1.12); -webkit-transform: scale(1.12);}\r\n.layui-rate[readonly] li i:hover{cursor: default; transform: scale(1);}\r\n\r\n/** 颜色选择器 **/\r\n.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;}\r\n.layui-colorpicker:hover{border-color: #d2d2d2;}\r\n.layui-colorpicker.layui-colorpicker-lg{width: 44px; height: 44px; line-height: 30px;}\r\n.layui-colorpicker.layui-colorpicker-sm{width: 30px; height: 30px; line-height: 20px; padding: 3px;}\r\n.layui-colorpicker.layui-colorpicker-xs{width: 22px; height: 22px; line-height: 16px; padding: 1px;}\r\n\r\n.layui-colorpicker-trigger-bgcolor{display: block; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==); border-radius: 2px;}\r\n.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;}\r\n.layui-colorpicker-trigger-i{display: inline-block; color: #FFF; font-size: 12px;}\r\n.layui-colorpicker-trigger-i.layui-icon-close{color: #999;}\r\n\r\n.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);}\r\n.layui-colorpicker-main-wrapper{height: 180px; position: relative;}\r\n.layui-colorpicker-basis{width: 260px; height: 100%; position: relative; overflow: hidden;}\r\n.layui-colorpicker-basis-white{width: 100%; height: 100%; position: absolute; top: 0; left: 0; background: linear-gradient(90deg, #FFF, hsla(0,0%,100%,0));}\r\n.layui-colorpicker-basis-black{width: 100%; height: 100%; position: absolute; top: 0; left: 0; background: linear-gradient(0deg, #000, transparent);}\r\n.layui-colorpicker-basis-cursor{width: 10px; height: 10px; border: 1px solid #FFF; border-radius: 50%; position: absolute; top: 0%; right: 100%; cursor: pointer; transform: translate(-50%,-50%);}\r\n.layui-colorpicker-side{position: absolute; top: 0; right: 0; width: 12px; height: 100%; background: linear-gradient(#F00, #FF0, #0F0, #0FF, #00F, #F0F, #F00);}\r\n.layui-colorpicker-side-slider{width: 100%; height: 5px; box-shadow: 0 0 1px #888888; box-sizing: border-box; background: #FFF; border-radius: 1px; border: 1px solid #f0f0f0; cursor: pointer; position: absolute; left: 0;}\r\n.layui-colorpicker-main-alpha{display: none; height: 12px; margin-top: 7px; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}\r\n.layui-colorpicker-alpha-bgcolor{height: 100%; position: relative;}\r\n.layui-colorpicker-alpha-slider{width: 5px; height: 100%; box-shadow: 0 0 1px #888888; box-sizing: border-box; background: #FFF; border-radius: 1px; border: 1px solid #f0f0f0; cursor: pointer; position: absolute; top: 0;}\r\n.layui-colorpicker-main-pre{padding-top: 7px; font-size: 0;}\r\n.layui-colorpicker-pre{width: 20px; height: 20px; border-radius: 2px; display: inline-block; margin-left: 6px; margin-bottom: 7px; cursor: pointer;}\r\n.layui-colorpicker-pre:nth-child(11n+1){margin-left: 0;}\r\n.layui-colorpicker-pre-isalpha{background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}\r\n.layui-colorpicker-pre.layui-this{box-shadow: 0 0 3px 2px rgba(0,0,0,.15);}\r\n.layui-colorpicker-pre > div{height: 100%; border-radius: 2px;}\r\n.layui-colorpicker-main-input{text-align: right; padding-top: 7px;}\r\n.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin: 0 0 0 10px;}\r\n.layui-colorpicker-main-input div.layui-inline{float: left; font-size: 14px;}\r\n.layui-colorpicker-main-input input.layui-input{width: 168px; height: 30px; color: #5F5F5F; padding-left: 5px;}\r\n\r\n/** 滑块 **/\r\n.layui-slider{height: 4px; background: #eee; border-radius: 3px; position: relative; cursor: pointer;}\r\n.layui-slider-bar{border-radius: 3px; position: absolute; height: 100%;}\r\n.layui-slider-step{position: absolute; top: 0; width: 4px; height: 4px; border-radius: 50%; background: #FFF; -webkit-transform: translateX(-50%); transform: translateX(-50%);}\r\n.layui-slider-wrap{width: 36px; height: 36px; position: absolute; top: -16px; -webkit-transform: translateX(-50%); transform: translateX(-50%); z-index: 10; text-align: center;}\r\n.layui-slider-wrap-btn{width: 12px; height: 12px; border-radius: 50%; background: #FFF; display: inline-block; vertical-align: middle; cursor: pointer; transition: 0.3s;}\r\n.layui-slider-wrap:after{content: \"\"; height: 100%; display: inline-block; vertical-align: middle;}\r\n.layui-slider-wrap-btn:hover,\r\n.layui-slider-wrap-btn.layui-slider-hover{transform: scale(1.2);}\r\n.layui-slider-wrap-btn.layui-disabled:hover{transform: scale(1) !important;}\r\n.layui-slider-tips{position: absolute; top: -42px; z-index: 77777777; white-space:nowrap; -webkit-transform: translateX(-50%); transform: translateX(-50%); color: #FFF; background: #000; border-radius: 3px; height: 25px; line-height: 25px; padding: 0 10px;}\r\n.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;}\r\n.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; box-sizing: border-box;}\r\n.layui-slider-input-btn{position: absolute; top: 0; right: 0; width: 20px; height: 100%; border-left: 1px solid #eee;}\r\n.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;}\r\n.layui-slider-input-btn i:first-child{top: 0; border-bottom: 1px solid #eee;}\r\n.layui-slider-input-txt{height: 100%; font-size: 14px;}\r\n.layui-slider-input-txt input{height: 100%; border: none; padding-right: 21px;}\r\n.layui-slider-input-btn i:hover{color: #16baaa;}\r\n/*垂直滑块*/\r\n.layui-slider-vertical{width: 4px; margin-left: 33px;}\r\n.layui-slider-vertical .layui-slider-bar{width: 4px;}\r\n.layui-slider-vertical .layui-slider-step{top: auto; left: 0px; -webkit-transform: translateY(50%); transform: translateY(50%);}\r\n.layui-slider-vertical .layui-slider-wrap{top: auto; left: -16px; -webkit-transform: translateY(50%); transform: translateY(50%);}\r\n.layui-slider-vertical .layui-slider-tips{top: auto; left: 2px;}\r\n@media \\0screen{\r\n .layui-slider-wrap-btn{margin-left: -20px;}\r\n .layui-slider-vertical .layui-slider-wrap-btn{margin-left: 0; margin-bottom: -20px;}\r\n .layui-slider-vertical .layui-slider-tips{margin-left: -8px;}\r\n .layui-slider > span{margin-left: 8px;}\r\n}\r\n\r\n/** 树组件 **/\r\n.layui-tree{line-height: 22px;}\r\n.layui-tree .layui-form-checkbox{margin: 0 !important;}\r\n.layui-tree-set{width: 100%; position: relative;}\r\n.layui-tree-pack{display: none; padding-left: 20px; position: relative;}\r\n.layui-tree-line .layui-tree-pack{padding-left: 27px;}\r\n.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;}\r\n.layui-tree-entry{position: relative; padding: 3px 0; height: 26px; white-space: nowrap;}\r\n.layui-tree-entry:hover{background-color: #eee;}\r\n.layui-tree-line .layui-tree-entry:hover{background-color: rgba(0,0,0,0);}\r\n.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color: #999; text-decoration: underline; transition: 0.3s;}\r\n.layui-tree-main{display: inline-block; vertical-align: middle; cursor: pointer; padding-right: 10px;}\r\n.layui-tree-line .layui-tree-set:before{content: \"\"; position: absolute; top: 0; left: -9px; width: 0; height: 100%; border-left: 1px dotted #c0c4cc;}\r\n.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height: 13px;}\r\n.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height: 0;}\r\n.layui-tree-iconClick{display: inline-block; vertical-align: middle; position: relative; height: 20px; line-height: 20px; margin: 0 10px; color: #c0c4cc;}\r\n.layui-tree-icon{height: 14px; line-height: 12px; width: 14px; text-align: center; border: 1px solid #c0c4cc;}\r\n.layui-tree-iconClick .layui-icon{font-size: 18px;}\r\n.layui-tree-icon .layui-icon{font-size: 12px; color: #5F5F5F;}\r\n.layui-tree-iconArrow{padding: 0 5px;}\r\n.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: 0.5s;}\r\n.layui-tree-spread>.layui-tree-entry .layui-tree-iconClick>.layui-tree-iconArrow:after{transform: rotate(90deg) translate(3px, 4px);}\r\n.layui-tree-txt{display: inline-block; vertical-align: middle; color: #555;}\r\n.layui-tree-search{margin-bottom: 15px; color: #5F5F5F;}\r\n.layui-tree-btnGroup{visibility: hidden; display: inline-block; vertical-align: middle; position: relative;}\r\n.layui-tree-btnGroup .layui-icon{display: inline-block; vertical-align: middle; padding: 0 2px; cursor: pointer;}\r\n.layui-tree-btnGroup .layui-icon:hover{color: #999; transition: 0.3s;}\r\n.layui-tree-entry:hover .layui-tree-btnGroup{visibility: visible;}\r\n.layui-tree-editInput{position: relative; display: inline-block; vertical-align: middle; height: 20px; line-height: 20px; padding: 0; border: none; background-color: rgba(0,0,0,0.05);}\r\n.layui-tree-emptyText{text-align: center; color: #999;}\r\n\r\n\r\n\r\n\r\n/** 动画 **/\r\n.layui-anim{-webkit-animation-duration: 0.3s; -webkit-animation-fill-mode: both; animation-duration: 0.3s; animation-fill-mode: both;}\r\n.layui-anim.layui-icon{display: inline-block;}\r\n.layui-anim-loop{-webkit-animation-iteration-count: infinite; animation-iteration-count: infinite;}\r\n.layui-trans,\r\n.layui-trans a{transition: all .2s; -webkit-transition: all .2s;} /* 过度变换 */\r\n\r\n/* 循环旋转 */\r\n@-webkit-keyframes layui-rotate{\r\n from {-webkit-transform: rotate(0deg);}\r\n to {-webkit-transform: rotate(360deg);}\r\n}\r\n@keyframes layui-rotate{\r\n from {transform: rotate(0deg);}\r\n to {transform: rotate(360deg);}\r\n}\r\n.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;}\r\n\r\n/* 从最底部往上滑入 */\r\n@-webkit-keyframes layui-up{\r\n from {-webkit-transform: translate3d(0, 100%, 0); opacity: 0.3;}\r\n to {-webkit-transform: translate3d(0, 0, 0); opacity: 1;}\r\n}\r\n@keyframes layui-up{\r\n from {transform: translate3d(0, 100%, 0); opacity: 0.3;}\r\n to {transform: translate3d(0, 0, 0); opacity: 1;}\r\n}\r\n.layui-anim-up{-webkit-animation-name: layui-up; animation-name: layui-up;}\r\n\r\n/* 微微往上滑入 */\r\n@-webkit-keyframes layui-upbit{\r\n from {-webkit-transform: translate3d(0, 15px, 0); opacity: 0.3;}\r\n to {-webkit-transform: translate3d(0, 0, 0); opacity: 1;}\r\n}\r\n@keyframes layui-upbit{\r\n from {transform: translate3d(0, 15px, 0); opacity: 0.3;}\r\n to {transform: translate3d(0, 0, 0); opacity: 1;}\r\n}\r\n.layui-anim-upbit{-webkit-animation-name: layui-upbit; animation-name: layui-upbit;}\r\n\r\n/* 从最顶部往下滑入 */\r\n@keyframes layui-down {\r\n 0% {opacity: 0.3; transform: translate3d(0, -100%, 0);}\r\n 100% {opacity: 1; transform: translate3d(0, 0, 0);}\r\n}\r\n.layui-anim-down{animation-name: layui-down;}\r\n\r\n/* 微微往下滑入 */\r\n@keyframes layui-downbit {\r\n 0% {opacity: 0.3; transform: translate3d(0, -5px, 0);}\r\n 100% {opacity: 1; transform: translate3d(0, 0, 0);}\r\n}\r\n.layui-anim-downbit{animation-name: layui-downbit;}\r\n\r\n/* 放大 */\r\n@-webkit-keyframes layui-scale {\r\n 0% {opacity: 0.3; -webkit-transform: scale(.5);}\r\n 100% {opacity: 1; -webkit-transform: scale(1);}\r\n}\r\n@keyframes layui-scale {\r\n 0% {opacity: 0.3; -ms-transform: scale(.5); transform: scale(.5);}\r\n 100% {opacity: 1; -ms-transform: scale(1); transform: scale(1);}\r\n}\r\n.layui-anim-scale{-webkit-animation-name: layui-scale; animation-name: layui-scale}\r\n\r\n/* 弹簧式放大 */\r\n@-webkit-keyframes layui-scale-spring {\r\n 0% {opacity: 0.5; -webkit-transform: scale(.5);}\r\n 80% {opacity: 0.8; -webkit-transform: scale(1.1);}\r\n 100% {opacity: 1; -webkit-transform: scale(1);}\r\n}\r\n@keyframes layui-scale-spring {\r\n 0% {opacity: 0.5; transform: scale(.5);}\r\n 80% {opacity: 0.8; transform: scale(1.1);}\r\n 100% {opacity: 1; transform: scale(1);}\r\n}\r\n.layui-anim-scaleSpring{-webkit-animation-name: layui-scale-spring; animation-name: layui-scale-spring}\r\n\r\n/* 放小 */\r\n@keyframes layui-scalesmall {\r\n 0% {opacity: 0.3; transform: scale(1.5);}\r\n 100% {opacity: 1; transform: scale(1);}\r\n}\r\n.layui-anim-scalesmall{animation-name: layui-scalesmall}\r\n\r\n/* 弹簧式放小 */\r\n@keyframes layui-scalesmall-spring {\r\n 0% {opacity: 0.3; transform: scale(1.5);}\r\n 80% {opacity: 0.8; transform: scale(0.9);}\r\n 100% {opacity: 1; transform: scale(1);}\r\n}\r\n.layui-anim-scalesmall-spring{animation-name: layui-scalesmall-spring}\r\n\r\n\r\n/* 渐显 */\r\n@-webkit-keyframes layui-fadein {\r\n 0% {opacity: 0;}\r\n 100% {opacity: 1;}\r\n}\r\n@keyframes layui-fadein {\r\n 0% {opacity: 0;}\r\n 100% {opacity: 1;}\r\n}\r\n.layui-anim-fadein{-webkit-animation-name: layui-fadein; animation-name: layui-fadein;}\r\n\r\n/* 渐隐 */\r\n@-webkit-keyframes layui-fadeout {\r\n 0% {opacity: 1;}\r\n 100% {opacity: 0;}\r\n}\r\n@keyframes layui-fadeout {\r\n 0% {opacity: 1;}\r\n 100% {opacity: 0;}\r\n}\r\n.layui-anim-fadeout{-webkit-animation-name: layui-fadeout; animation-name: layui-fadeout}\r\n\r\n\r\n\r\n\r\n","/**\r\n * code\r\n */\r\n\r\nhtml #layuicss-skincodecss{display: none; position: absolute; width: 1989px;}\r\n\r\n/* 字体 */\r\n.layui-code-wrap{font-size: 13px; font-family: \"Courier New\",Consolas,\"Lucida Console\";}\r\n\r\n/* 基础结构 */\r\n.layui-code-view{display: block; position: relative; padding: 0 !important; border: 1px solid #eee; border-left-width: 6px; background-color: #fff; color: #333;}\r\n.layui-code-view pre{margin: 0 !important;}\r\n\r\n.layui-code-header{position: relative; z-index: 3; padding: 0 11px; height: 40px; line-height: 40px; border-bottom: 1px solid #eee; background-color: #fafafa; font-size: 12px;}\r\n.layui-code-header > .layui-code-header-about{position: absolute; right: 11px; top: 0; color: #B7B7B7;}\r\n.layui-code-header-about > a{padding-left: 10px;}\r\n\r\n.layui-code-wrap{position: relative; display: block; z-index: 1; margin: 0 !important; padding: 11px 0 !important; overflow-x: hidden; overflow-y: auto;}\r\n.layui-code-line{position: relative; line-height: 19px; margin: 0 !important;}\r\n.layui-code-line-number{position: absolute; left: 0; top: 0; padding: 0 8px; min-width: 45px; height: 100%; text-align: right; user-select: none; white-space: nowrap; overflow: hidden;}\r\n.layui-code-line-content{padding: 0 11px; word-wrap: break-word; white-space: pre-wrap;}\r\n\r\n.layui-code-ln-mode > .layui-code-wrap > .layui-code-line{padding-left: 45px;}\r\n.layui-code-ln-side{position: absolute; left: 0; top: 0; bottom: 0; z-index: 0; width: 45px; border-right: 1px solid #eee; border-color: rgb(126 122 122 / 15%); background-color: #fafafa; pointer-events: none;}\r\n\r\n/* 不自动换行 */\r\n.layui-code-nowrap > .layui-code-wrap{overflow: auto;}\r\n.layui-code-nowrap > .layui-code-wrap > .layui-code-line > .layui-code-line-content{white-space: pre; word-wrap: normal;}\r\n.layui-code-nowrap > .layui-code-ln-side{border-right-width: 0 !important; background: none !important;}\r\n\r\n.layui-code-fixbar{position: absolute; top: 8px; right: 11px; padding-right: 45px; z-index: 5;}\r\n.layui-code-fixbar > span{position: absolute; right: 0; top: 0; padding: 0 8px; color: #777; transition: all .3s;}\r\n.layui-code-fixbar > span:hover{color: #16b777;}\r\n.layui-code-copy{display: none; cursor: pointer;}\r\n.layui-code-preview > .layui-code-view > .layui-code-fixbar .layui-code-copy{display: none !important;}\r\n.layui-code-view:hover > .layui-code-fixbar .layui-code-copy{display: block;}\r\n.layui-code-view:hover > .layui-code-fixbar .layui-code-lang-marker{display: none;}\r\n\r\n/* 深色主题 */\r\n.layui-code-theme-dark,\r\n.layui-code-theme-dark > .layui-code-header{border-color: rgb(126 122 122 / 15%); background-color: #1f1f1f;}\r\n.layui-code-theme-dark{border-width: 1px; color: #ccc;}\r\n.layui-code-theme-dark > .layui-code-ln-side{border-right-color: #2a2a2a; background: none; color: #6e7681;}\r\n\r\n\r\n/* 代码预览 */\r\n.layui-code textarea{display: none;}\r\n.layui-code-preview > .layui-code,\r\n.layui-code-preview > .layui-code-view{margin: 0;}\r\n.layui-code-preview > .layui-tab{position: relative; z-index: 1; margin-bottom: 0;}\r\n.layui-code-preview > .layui-tab > .layui-tab-title{border-width: 0;}\r\n.layui-code-preview .layui-code-item{display: none;}\r\n.layui-code-preview .layui-code-view > .layui-code-lines > .layui-code-line{}\r\n.layui-code-item-preview{position: relative; padding: 16px;}\r\n.layui-code-item-preview > iframe{position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none;}\r\n\r\n/* 工具栏 */\r\n.layui-code-tools{position: absolute; right: 11px; top: 8px; line-height: normal;}\r\n.layui-code-tools > i{display: inline-block; margin-left: 6px; padding: 3px; cursor: pointer;}\r\n.layui-code-tools > i.layui-icon-file-b{color: #999;}\r\n.layui-code-tools > i:hover{color: #16b777;}\r\n\r\n/* 全屏风格 */\r\n.layui-code-full{position: fixed; left: 0; top: 0; z-index: 1111111; width: 100%; height: 100%; background-color: #fff;}\r\n.layui-code-full .layui-code-item{width: 100% !important; border-width: 0 !important; border-top-width: 1px !important;}\r\n.layui-code-full .layui-code-item,\r\n.layui-code-full .layui-code-view,\r\n.layui-code-full .layui-code-wrap{height: calc(100vh - 51px) !important; box-sizing: border-box;}\r\n.layui-code-full .layui-code-item-preview{overflow: auto;}\r\n\r\n/* 代码高亮重置 */\r\n.layui-code-view.layui-code-hl{line-height: 20px !important; border-left-width: 1px;}\r\n.layui-code-view.layui-code-hl > .layui-code-ln-side{background-color: transparent;}\r\n.layui-code-theme-dark.layui-code-hl,\r\n.layui-code-theme-dark.layui-code-hl > .layui-code-ln-side{border-color: rgb(126 122 122 / 15%);}\r\n","/**\r\n * laydate style\r\n */\r\n \r\n\r\nhtml #layuicss-laydate{display: none; position: absolute; width: 1989px;}\r\n\r\n/* 初始化 */\r\n.layui-laydate *{margin: 0; padding: 0;}\r\n\r\n/* 主体结构 */\r\n.layui-laydate, .layui-laydate *{box-sizing: border-box;}\r\n.layui-laydate{position: absolute; z-index: 99999999; margin: 5px 0; border-radius: 2px; font-size: 14px; line-height: normal; -webkit-animation-duration: 0.2s; animation-duration: 0.2s; -webkit-animation-fill-mode: both; animation-fill-mode: both;}\r\n.layui-laydate-main{width: 272px;}\r\n.layui-laydate-header *,\r\n.layui-laydate-content td,\r\n.layui-laydate-list li{transition-duration: .3s; -webkit-transition-duration: .3s;}\r\n.layui-laydate-shade{top: 0; left: 0; width: 100%; height: 100%; _height: expression(document.body.offsetHeight+\"px\"); position: fixed; _position: absolute; pointer-events: auto;}\r\n\r\n/* 微微往下滑入 */\r\n@keyframes laydate-downbit {\r\n 0% {opacity: 0.3; transform: translate3d(0, -5px, 0);}\r\n 100% {opacity: 1; transform: translate3d(0, 0, 0);}\r\n}\r\n\r\n.layui-laydate{animation-name: laydate-downbit;}\r\n.layui-laydate-static{ position: relative; z-index: 0; display: inline-block; margin: 0; -webkit-animation: none; animation: none;}\r\n\r\n/* 展开年月列表时 */\r\n.laydate-ym-show .laydate-prev-m,\r\n.laydate-ym-show .laydate-next-m{display: none !important;}\r\n.laydate-ym-show .laydate-prev-y,\r\n.laydate-ym-show .laydate-next-y{display: inline-block !important;}\r\n.laydate-ym-show .laydate-set-ym span[lay-type=\"month\"]{display: none !important;}\r\n\r\n/* 展开时间列表时 */\r\n.laydate-time-show .layui-laydate-header .layui-icon,\r\n.laydate-time-show .laydate-set-ym span[lay-type=\"year\"],\r\n.laydate-time-show .laydate-set-ym span[lay-type=\"month\"]{display: none !important;}\r\n\r\n/* 头部结构 */\r\n.layui-laydate-header{position: relative; line-height:30px; padding: 10px 70px 5px;}\r\n.layui-laydate-header *{display: inline-block; vertical-align: bottom;}\r\n.layui-laydate-header i{position: absolute; top: 10px; padding: 0 5px; color: #999; font-size: 18px; cursor: pointer;}\r\n.layui-laydate-header i.laydate-prev-y{left: 15px;}\r\n.layui-laydate-header i.laydate-prev-m{left: 45px;}\r\n.layui-laydate-header i.laydate-next-y{right: 15px;}\r\n.layui-laydate-header i.laydate-next-m{right: 45px;}\r\n.laydate-set-ym{width: 100%; text-align: center; box-sizing: border-box; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}\r\n.laydate-set-ym span{padding: 0 10px; cursor: pointer;}\r\n.laydate-time-text{cursor: default !important;}\r\n\r\n/* 主体结构 */\r\n.layui-laydate-content{position: relative; padding: 10px; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none;}\r\n.layui-laydate-content table{border-collapse: collapse; border-spacing: 0;}\r\n.layui-laydate-content th,\r\n.layui-laydate-content td{width: 36px; height: 30px; padding: 0; text-align: center;}\r\n.layui-laydate-content th{font-weight: 400;}\r\n.layui-laydate-content td{position: relative; cursor: pointer;}\r\n.laydate-day-mark{position: absolute; left: 0; top: 0; width: 100%; line-height: 30px; font-size: 12px; overflow: hidden;}\r\n.laydate-day-mark::after{position: absolute; content:''; right: 2px; top: 2px; width: 5px; height: 5px; border-radius: 50%;}\r\n.laydate-day-holidays:before{position: absolute; left: 0; top: 0; font-size: 12px; transform: scale(.7);}\r\n.laydate-day-holidays:before{content:'\\4F11'; color: #FF5722;}\r\n.laydate-day-holidays[type=\"workdays\"]:before{content:'\\73ED'; color: inherit;}\r\n.layui-laydate .layui-this .laydate-day-holidays:before{color: #fff;}\r\n\r\n/* 底部结构 */\r\n.layui-laydate-footer{position: relative; height: 46px; line-height: 26px; padding: 10px;}\r\n.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;}\r\n.layui-laydate-footer span:hover{color: #16b777;}\r\n.layui-laydate-footer span.layui-laydate-preview{cursor: default; border-color: transparent !important;}\r\n.layui-laydate-footer span.layui-laydate-preview:hover{color: #777;}\r\n.layui-laydate-footer span:first-child.layui-laydate-preview{padding-left: 0;}\r\n.laydate-footer-btns {position: absolute; right: 10px; top: 10px; }\r\n.laydate-footer-btns span{margin: 0 0 0 -1px; border-radius: 0px; }\r\n.laydate-footer-btns span:first-child { border-radius: 2px 0px 0px 2px;}\r\n.laydate-footer-btns span:last-child { border-radius: 0px 2px 2px 0px;}\r\n\r\n/* 快捷栏 */\r\n.layui-laydate-shortcut{width: 80px; padding: 6px 0; display: inline-block;vertical-align: top; overflow: auto; max-height: 276px; text-align: center;}\r\n.layui-laydate-shortcut+.layui-laydate-main{display: inline-block;border-left: 1px solid #e2e2e2;}\r\n.layui-laydate-shortcut>li{padding: 5px 8px; cursor: pointer; line-height: 18px;}\r\n\r\n/* 年月列表 */\r\n.layui-laydate .layui-laydate-list{position: absolute; left: 0; top: 0; width: 100%; height: 100%; padding: 10px; box-sizing: border-box; background-color: #fff;}\r\n.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;}\r\n.layui-laydate .laydate-month-list>li{width: 25%; margin: 17px 0;}\r\n.laydate-time-list{display: table;}\r\n.layui-laydate .laydate-time-list>li{display: table-cell; height: 100%; margin: 0; line-height: normal; cursor: default;}\r\n.layui-laydate .laydate-time-list p{position: relative; top: -4px; margin: 0; line-height: 29px;}\r\n.layui-laydate .laydate-time-list ol{height: 181px; overflow: hidden;}\r\n.layui-laydate .laydate-time-list>li:hover ol{overflow-y: auto;}\r\n.layui-laydate .laydate-time-list ol li{width: 130%; padding-left: 33px; height: 30px; line-height: 30px; text-align: left; cursor: pointer;}\r\n.layui-laydate .laydate-time-list-hide-1 ol li{padding-left: 53px;}\r\n.layui-laydate .laydate-time-list-hide-2 ol li{padding-left: 117px;}\r\n\r\n/* 提示 */\r\n.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;}\r\n\r\n\r\n/* 双日历 */\r\n.layui-laydate-range{width: 546px;}\r\n.layui-laydate-range .layui-laydate-main{display: inline-block; vertical-align: middle;max-width: 50%;}\r\n.layui-laydate-range .laydate-main-list-1 .layui-laydate-header,\r\n.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left: 1px solid #e2e2e2;}\r\n.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,\r\n.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;}\r\n.layui-laydate-range.layui-laydate-linkage .laydate-main-list-1 .layui-laydate-header,\r\n.layui-laydate-range.layui-laydate-linkage .laydate-main-list-1 .layui-laydate-content{border-left-style: dashed;}\r\n\r\n\r\n/* 默认简约主题 */\r\n.layui-laydate, .layui-laydate-hint{border: 1px solid #d2d2d2; box-shadow: 0 2px 4px rgba(0,0,0,.12); background-color: #fff; color: #777;}\r\n.layui-laydate-header{border-bottom: 1px solid #e2e2e2;}\r\n.layui-laydate-header i:hover,\r\n.layui-laydate-header span:hover{color: #16b777;}\r\n.layui-laydate-content{border-top: none 0; border-bottom: none 0;}\r\n.layui-laydate-content th{color: #333;}\r\n.layui-laydate-content td{color: #777;}\r\n.layui-laydate-content td.laydate-day-now{color: #16b777;}\r\n.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;}\r\n.layui-laydate-linkage .layui-laydate-content td.laydate-selected>div{background-color: #cffae9; transition: all .3s;}\r\n.layui-laydate-linkage .laydate-selected:hover>div{background-color: #cffae9 !important;}\r\n.layui-laydate-content td:hover:after,\r\n.layui-laydate-content td.laydate-selected:after{content: none;}\r\n.layui-laydate-content td>div:hover,\r\n.layui-laydate-list li:hover,\r\n.layui-laydate-shortcut>li:hover{background-color: #eee; color: #333; transition: all .3s;}\r\n.laydate-time-list li ol{margin: 0; padding: 0; border: 1px solid #e2e2e2; border-left-width: 0;}\r\n.laydate-time-list li:first-child ol{border-left-width: 1px;}\r\n.laydate-time-list>li:hover{background: none;}\r\n.layui-laydate-content .laydate-day-prev,\r\n.layui-laydate-content .laydate-day-next{color: #d2d2d2;}\r\n.layui-laydate-linkage .laydate-selected.laydate-day-prev>div,\r\n.layui-laydate-linkage .laydate-selected.laydate-day-next>div{background: none !important;}\r\n.layui-laydate-footer{border-top: 1px solid #e2e2e2;}\r\n.layui-laydate-hint{color: #FF5722;}\r\n.laydate-day-mark::after{background-color: #16b777;}\r\n.layui-laydate-content td.layui-this .laydate-day-mark::after{display: none;}\r\n.layui-laydate-footer span[lay-type=\"date\"]{color: #16b777;}\r\n.layui-laydate .layui-this,.layui-laydate .layui-this>div{background-color: #16b777 !important; color: #fff !important;}\r\n.layui-laydate .laydate-disabled,\r\n.layui-laydate .laydate-disabled:hover{background:none !important; color: #d2d2d2 !important; cursor: not-allowed !important; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none;}\r\n.layui-laydate .layui-this.laydate-disabled,.layui-laydate .layui-this.laydate-disabled>div{background-color: #eee !important}\r\n.layui-laydate-content td>div{padding: 7px 0; height: 100%;}\r\n\r\n/* 墨绿/自定义背景色主题 */\r\n.laydate-theme-molv{border: none;}\r\n.laydate-theme-molv.layui-laydate-range{width: 548px}\r\n.laydate-theme-molv .layui-laydate-main{width: 274px;}\r\n.laydate-theme-molv .layui-laydate-header{border: none; background-color: #16baaa;}\r\n.laydate-theme-molv .layui-laydate-header i,\r\n.laydate-theme-molv .layui-laydate-header span{color: #f6f6f6;}\r\n.laydate-theme-molv .layui-laydate-header i:hover,\r\n.laydate-theme-molv .layui-laydate-header span:hover{color: #fff;}\r\n.laydate-theme-molv .layui-laydate-content{border: 1px solid #e2e2e2; border-top: none; border-bottom: none;}\r\n.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left: none;}\r\n.laydate-theme-molv .layui-this, .laydate-theme-molv .layui-this>div{background-color: #16baaa !important;}\r\n.laydate-theme-molv .layui-laydate-footer{border: 1px solid #e2e2e2;}\r\n\r\n/* 格子主题 */\r\n.laydate-theme-grid .layui-laydate-content td,\r\n.laydate-theme-grid .layui-laydate-content thead,\r\n.laydate-theme-grid .laydate-year-list>li,\r\n.laydate-theme-grid .laydate-month-list>li{border: 1px solid #e2e2e2;}\r\n.layui-laydate-linkage.laydate-theme-grid .laydate-selected,\r\n.layui-laydate-linkage.laydate-theme-grid .laydate-selected:hover{background-color: #f2f2f2 !important; color: #16baaa !important;}\r\n.layui-laydate-linkage.laydate-theme-grid .laydate-selected.laydate-day-prev,\r\n.layui-laydate-linkage.laydate-theme-grid .laydate-selected.laydate-day-next{color: #d2d2d2 !important;}\r\n.laydate-theme-grid .laydate-year-list,\r\n.laydate-theme-grid .laydate-month-list{margin: 1px 0 0 1px;}\r\n.laydate-theme-grid .laydate-year-list>li,\r\n.laydate-theme-grid .laydate-month-list>li{margin: 0 -1px -1px 0;}\r\n.laydate-theme-grid .laydate-year-list>li{height: 43px; line-height: 43px;}\r\n.laydate-theme-grid .laydate-month-list>li{height: 71px; line-height: 71px;}\r\n.laydate-theme-grid .layui-laydate-content td>div{height: 29px;margin-top: -1px;}\r\n\r\n/* 圆圈高亮主题 */\r\n.laydate-theme-circle .layui-laydate-content td>div,\r\n.laydate-theme-circle .layui-laydate-content td.layui-this>div{width: 28px;height: 28px;line-height: 28px;border-radius: 14px;margin: 0 4px;padding: 0;}\r\n.layui-laydate.laydate-theme-circle .layui-laydate-content table td.layui-this{background-color: transparent !important;}\r\n.laydate-theme-grid.laydate-theme-circle .layui-laydate-content td>div{margin: 0 3.5px;}\r\n\r\n/* 全面板 */\r\n.laydate-theme-fullpanel .layui-laydate-main {width: 526px;}\r\n.laydate-theme-fullpanel .layui-laydate-list {width: 252px;left: 272px;}\r\n.laydate-theme-fullpanel .laydate-set-ym span {display: none;}\r\n.laydate-theme-fullpanel .laydate-time-show .layui-laydate-header .layui-icon,\r\n.laydate-theme-fullpanel .laydate-time-show .laydate-set-ym span[lay-type=\"year\"],\r\n.laydate-theme-fullpanel .laydate-time-show .laydate-set-ym span[lay-type=\"month\"] {display: inline-block !important;}\r\n.laydate-theme-fullpanel .laydate-btns-time{display: none;}\r\n.laydate-theme-fullpanel .laydate-time-list-hide-1 ol li{padding-left: 49px;}\r\n.laydate-theme-fullpanel .laydate-time-list-hide-2 ol li{padding-left: 107px;}\r\n","/**\r\n * layer style\r\n */\r\n\r\nhtml #layuicss-layer{display: none; position: absolute; width: 1989px;}\r\n\r\n/* common */\r\n.layui-layer-shade, .layui-layer{position:fixed; _position:absolute; pointer-events: auto;}\r\n.layui-layer-shade{opacity: 0; transition: opacity .35s cubic-bezier(0.34, 0.69, 0.1, 1); top:0; left:0; width:100%; height:100%; _height:expression(document.body.offsetHeight+\"px\");}\r\n.layui-layer{-webkit-overflow-scrolling: touch;}\r\n.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);}\r\n.layui-layer-close{position:absolute;}\r\n.layui-layer-content{position:relative;}\r\n.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);}\r\n.layui-layer-setwin span,\r\n.layui-layer-btn a{display: inline-block; vertical-align: middle; *display: inline; *zoom:1; }\r\n\r\n.layui-layer-move{display: none; position: fixed; *position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; cursor: move; opacity: 0; filter:alpha(opacity=0); background-color: #fff; z-index: 2147483647;}\r\n.layui-layer-resize{position: absolute; width: 15px; height: 15px; right: 0; bottom: 0; cursor: se-resize;}\r\n\r\n/* 动画 */\r\n.layer-anim{-webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-duration:.3s; animation-duration:.3s;}\r\n\r\n@-webkit-keyframes layer-bounceIn { /* 默认 */\r\n\t0% {opacity: 0; -webkit-transform: scale(.5); transform: scale(.5)}\r\n\t100% {opacity: 1; -webkit-transform: scale(1); transform: scale(1)}\r\n}\r\n@keyframes layer-bounceIn {\r\n\t0% {opacity: 0; -webkit-transform: scale(.5); -ms-transform: scale(.5); transform: scale(.5)}\r\n\t100% {opacity: 1; -webkit-transform: scale(1); -ms-transform: scale(1); transform: scale(1)}\r\n}\r\n.layer-anim-00{-webkit-animation-name: layer-bounceIn;animation-name: layer-bounceIn}\r\n\r\n@-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}\r\n\r\n@-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}\r\n\r\n@-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}\r\n\r\n@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}}@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(0px) rotate(0deg);-ms-transform:translateX(0px) rotate(0deg);transform:translateX(0px) rotate(0deg)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}\r\n\r\n@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}\r\n\r\n@-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}}\r\n\r\n/* 从上往下 */\r\n@keyframes layer-slide-down {\r\n from {\r\n transform: translate3d(0,-100%,0);\r\n } to {\r\n transform: translate3d(0,0,0);\r\n }\r\n}\r\n@keyframes layer-slide-down-out {\r\n from {\r\n transform: translate3d(0,0,0);\r\n } to {\r\n transform: translate3d(0,-100%,0);\r\n }\r\n}\r\n.layer-anim-slide-down{animation-name: layer-slide-down}\r\n.layer-anim-slide-down-out{animation-name: layer-slide-down-out}\r\n\r\n/* 从右往左 */\r\n@keyframes layer-slide-left {\r\n from {\r\n transform: translate3d(100%,0,0);\r\n } to {\r\n transform: translate3d(0,0,0);\r\n }\r\n}\r\n@keyframes layer-slide-left-out {\r\n from {\r\n transform: translate3d(0,0,0);\r\n } to {\r\n transform: translate3d(100%,0,0);\r\n }\r\n}\r\n.layer-anim-slide-left{animation-name: layer-slide-left}\r\n.layer-anim-slide-left-out{animation-name: layer-slide-left-out}\r\n\r\n/* 从下往上 */\r\n@keyframes layer-slide-up {\r\n from {\r\n transform: translate3d(0,100%,0);\r\n } to {\r\n transform: translate3d(0,0,0);\r\n }\r\n}\r\n@keyframes layer-slide-up-out {\r\n from {\r\n transform: translate3d(0,0,0);\r\n } to {\r\n transform: translate3d(0,100%,0);\r\n }\r\n}\r\n.layer-anim-slide-up{animation-name: layer-slide-up}\r\n.layer-anim-slide-up-out{animation-name: layer-slide-up-out}\r\n\r\n/* 从左往右 */\r\n@keyframes layer-slide-right {\r\n from {\r\n transform: translate3d(-100%,0,0);\r\n } to {\r\n transform: translate3d(0,0,0);\r\n }\r\n}\r\n@keyframes layer-slide-right-out {\r\n from {\r\n transform: translate3d(0,0,0);\r\n } to {\r\n transform: translate3d(-100%,0,0);\r\n }\r\n}\r\n.layer-anim-slide-right{animation-name: layer-slide-right;}\r\n.layer-anim-slide-right-out{animation-name: layer-slide-right-out;}\r\n\r\n\r\n\r\n/* 标题栏 */\r\n.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;}\r\n.layui-layer-setwin{position:absolute; right: 15px; *right:0; top: 16px; font-size:0; line-height: initial;}\r\n.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; box-sizing: border-box;}\r\n.layui-layer-setwin .layui-layer-min:before{content: ''; position: absolute; width: 12px; border-bottom: 1px solid #2E2D3C; left: 50%; top: 50%; margin: -0.5px 0 0 -6px; cursor: pointer; _overflow:hidden;}\r\n.layui-layer-setwin .layui-layer-min:hover:before{background-color: #2D93CA}\r\n.layui-layer-setwin .layui-layer-max:before,\r\n.layui-layer-setwin .layui-layer-max:after{content: ''; position: absolute; left: 50%; top: 50%; z-index: 1; width: 9px; height: 9px; margin: -5px 0 0 -5px; border: 1px solid #2E2D3C;}\r\n.layui-layer-setwin .layui-layer-max:hover:before,\r\n.layui-layer-setwin .layui-layer-max:hover:after{border-color: #2D93CA;}\r\n.layui-layer-setwin .layui-layer-min:hover:before{background-color: #2D93CA}\r\n.layui-layer-setwin .layui-layer-maxmin:before,\r\n.layui-layer-setwin .layui-layer-maxmin:after{width: 7px; height: 7px; margin: -3px 0 0 -3px; background-color: #fff;}\r\n.layui-layer-setwin .layui-layer-maxmin:after{z-index: 0; margin: -5px 0 0 -1px;}\r\n.layui-layer-setwin .layui-layer-close{cursor: pointer;}\r\n.layui-layer-setwin .layui-layer-close:hover{opacity:0.7;}\r\n.layui-layer-setwin .layui-layer-close2{position:absolute; right: -28px; top: -28px; color: #fff; background-color: #787878; padding: 3px; border: 3px solid; width: 28px; height: 28px; font-size: 16px; font-weight: bolder; border-radius: 50%; margin-left: 0; *right:-18px; _display:none;}\r\n.layui-layer-setwin .layui-layer-close2:hover{opacity: unset; background-color: #3888f6;}\r\n\r\n/* 按钮栏 */\r\n.layui-layer-btn{text-align: right; padding: 0 15px 12px; pointer-events: auto; user-select: none; -webkit-user-select: none;}\r\n.layui-layer-btn a{height: 30px; line-height: 30px; margin: 5px 5px 0; padding: 0 16px; border: 1px solid #dedede; background-color: #fff; color: #333; border-radius: 2px; font-weight: 400; cursor: pointer; text-decoration: none; box-sizing: border-box;}\r\n.layui-layer-btn a:hover{opacity: 0.9; text-decoration: none;}\r\n.layui-layer-btn a:active{opacity: 0.8;}\r\n.layui-layer-btn .layui-layer-btn0{border-color: transparent; background-color: #1E9FFF; color:#fff;}\r\n.layui-layer-btn-l{text-align: left;}\r\n.layui-layer-btn-c{text-align: center;}\r\n.layui-layer-btn-is-loading{opacity:0.5 !important; cursor:not-allowed !important; cursor:wait !important; overflow:hidden; white-space:nowrap; -webkit-user-select: none; -ms-user-select: none;user-select: none;}\r\n.layui-layer-btn-is-loading .layui-layer-btn-loading-icon{margin-right: 8px; font-size: 14px;}\r\n\r\n/* 定制化 */\r\n.layui-layer-dialog{min-width: 240px;}\r\n.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;}\r\n.layui-layer-dialog .layui-layer-content .layui-layer-face{position: absolute; top: 18px; left: 16px; color: #959595; font-size: 32px; _left: -40px;}\r\n.layui-layer-dialog .layui-layer-content .layui-icon-tips{color: #F39B12;}\r\n.layui-layer-dialog .layui-layer-content .layui-icon-success{color: #16b777;}\r\n.layui-layer-dialog .layui-layer-content .layui-icon-error{top: 19px; color: #FF5722;}\r\n.layui-layer-dialog .layui-layer-content .layui-icon-question{color: #FFB800;}\r\n.layui-layer-dialog .layui-layer-content .layui-icon-lock{color: #787878;}\r\n.layui-layer-dialog .layui-layer-content .layui-icon-face-cry{color: #FF5722;}\r\n.layui-layer-dialog .layui-layer-content .layui-icon-face-smile{color: #16b777;}\r\n\r\n.layui-layer-rim{border:6px solid #8D8D8D; border:6px solid rgba(0,0,0,.3); border-radius:5px; box-shadow: none;}\r\n.layui-layer-msg{min-width:180px; border:1px solid #D3D4D3; box-shadow: none;}\r\n.layui-layer-hui{min-width:100px; background-color: #000; filter:alpha(opacity=60); background-color: rgba(0,0,0,0.6); color: #fff; border:none;}\r\n.layui-layer-hui .layui-layer-close{color: #fff;}\r\n.layui-layer-hui .layui-layer-content{padding: 11px 24px; text-align: center;}\r\n.layui-layer-dialog .layui-layer-padding{padding: 18px 24px 18px 58px; text-align: left;}\r\n.layui-layer-page .layui-layer-content{position:relative; overflow:auto;}\r\n.layui-layer-page .layui-layer-btn,.layui-layer-iframe .layui-layer-btn{padding-top:10px;}\r\n.layui-layer-nobg{background:none;}\r\n.layui-layer-iframe iframe{display: block; width: 100%;}\r\n\r\n.layui-layer-loading{border-radius:100%; background:none; box-shadow:none; border:none;}\r\n.layui-layer-loading .layui-layer-content{width: 76px; height: 38px; line-height: 38px; text-align: center;}\r\n.layui-layer-loading-icon{font-size: 38px; color: #959595;}\r\n.layui-layer-loading2{text-align: center;}\r\n.layui-layer-loading-2{position: relative; height: 38px;}\r\n.layui-layer-loading-2:before,\r\n.layui-layer-loading-2:after{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;}\r\n.layui-layer-loading-2:after{border-color: transparent; border-left-color: #1E9FFF;}\r\n\r\n\r\n.layui-layer-tips{background: none; box-shadow:none; border:none;}\r\n.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;}\r\n.layui-layer-tips .layui-layer-close{right:-2px; top:-1px;}\r\n.layui-layer-tips i.layui-layer-TipsG{ position:absolute; width:0; height:0; border-width:8px; border-color:transparent; border-style:dashed; *overflow:hidden;}\r\n.layui-layer-tips i.layui-layer-TipsT, .layui-layer-tips i.layui-layer-TipsB{left:5px; border-right-style:solid; border-right-color: #000;}\r\n.layui-layer-tips i.layui-layer-TipsT{bottom:-8px;}\r\n.layui-layer-tips i.layui-layer-TipsB{top:-8px;}\r\n.layui-layer-tips i.layui-layer-TipsR, .layui-layer-tips i.layui-layer-TipsL{top: 5px; border-bottom-style:solid; border-bottom-color: #000;}\r\n.layui-layer-tips i.layui-layer-TipsR{left:-8px;}\r\n.layui-layer-tips i.layui-layer-TipsL{right:-8px;}\r\n\r\n/* 内置 skin */\r\n.layui-layer-lan .layui-layer-title{background:#4476A7; color:#fff; border: none;}\r\n.layui-layer-lan .layui-layer-btn{padding: 5px 10px 10px; border-top:1px solid #E9E7E7}\r\n.layui-layer-lan .layui-layer-btn a{background: #fff; border-color: #E9E7E7; color: #333;}\r\n.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5;}\r\n.layui-layer-molv .layui-layer-title{background: #009f95; color:#fff; border: none;}\r\n.layui-layer-molv .layui-layer-btn a{background: #009f95; border-color: #009f95;}\r\n.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1;}\r\n.layui-layer-lan .layui-layer-setwin .layui-icon,\r\n.layui-layer-molv .layui-layer-setwin .layui-icon{color: #fff;}\r\n\r\n/* Windows 10 风格主题 */\r\n.layui-layer-win10{border: 1px solid #aaa; box-shadow: 1px 1px 6px rgba(0,0,0,.3); border-radius: none;}\r\n.layui-layer-win10 .layui-layer-title{height: 32px; line-height: 32px; padding-left: 8px; border-bottom: none; font-size: 12px;}\r\n.layui-layer-win10 .layui-layer-setwin{right: 0; top: 0;}\r\n.layui-layer-win10 .layui-layer-setwin span{margin-left: 0; width: 32px; height: 32px; padding: 8px;}\r\n.layui-layer-win10.layui-layer-page .layui-layer-setwin span{width: 38px;}\r\n.layui-layer-win10 .layui-layer-setwin span:hover{background-color: #E5E5E5;}\r\n.layui-layer-win10 .layui-layer-setwin span.layui-icon-close:hover{background-color: #E81123; color: #fff;}\r\n.layui-layer-win10.layui-layer-dialog .layui-layer-content{padding: 8px 16px 32px; color: #0033BC;}\r\n.layui-layer-win10.layui-layer-dialog .layui-layer-padding{padding-top: 18px; padding-left: 58px;}\r\n.layui-layer-win10 .layui-layer-btn{padding: 5px 5px 10px; border-top:1px solid #DFDFDF; background-color: #F0F0F0;}\r\n.layui-layer-win10 .layui-layer-btn a{height: 20px; line-height: 18px; background-color: #E1E1E1; border-color: #ADADAD; color: #000; font-size: 12px; transition: all .3s;}\r\n.layui-layer-win10 .layui-layer-btn a:hover{border-color: #2A8EDD; background-color: #E5F1FB;}\r\n.layui-layer-win10 .layui-layer-btn .layui-layer-btn0{border-color: #0078D7;}\r\n\r\n\r\n/**\r\n \r\n @Name: layer拓展样式\r\n \r\n */\r\n\r\n/* prompt模式 */\r\n.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;}\r\n.layui-layer-prompt textarea.layui-layer-input{width: 300px; height: 100px; line-height: 20px; padding: 6px 10px;}\r\n.layui-layer-prompt .layui-layer-content{padding: 16px;}\r\n.layui-layer-prompt .layui-layer-btn{padding-top: 0;}\r\n\r\n/* tab模式 */\r\n.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4);}\r\n.layui-layer-tab .layui-layer-title{padding-left:0; overflow: visible;}\r\n.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;}\r\n.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;}\r\n.layui-layer-tab .layui-layer-title span:first-child{border-left-color: transparent;}\r\n.layui-layer-tabmain{line-height:24px; clear: both;}\r\n.layui-layer-tabmain .layui-layer-tabli{display:none;}\r\n.layui-layer-tabmain .layui-layer-tabli.layui-this{display: block;}\r\n\r\n/* photos */\r\n.layui-layer-photos{background: none; box-shadow: none;}\r\n.layui-layer-photos .layui-layer-content{overflow: visible; text-align: center;}\r\n.layui-layer-photos .layer-layer-photos-main img{position: relative; width:100%; display: inline-block; *display:inline; *zoom:1; vertical-align:top;}\r\n.layui-layer-photos-prev,\r\n.layui-layer-photos-next{position: fixed; top: 50%; width: 52px; height: 52px; line-height: 52px; margin-top: -26px; cursor: pointer; font-size: 52px; color: #717171;}\r\n.layui-layer-photos-prev{left: 32px;}\r\n.layui-layer-photos-next{right: 32px;}\r\n.layui-layer-photos-prev:hover,\r\n.layui-layer-photos-next:hover{color: #959595;}\r\n\r\n.layui-layer-photos-toolbar{position: fixed; left: 0; right: 0; bottom: 0; width: 100%; height: 52px; line-height: 52px; background-color: #000\\9; filter: Alpha(opacity=60); background-color: rgba(0,0,0,.32); color: #fff; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; font-size:0;}\r\n.layui-layer-photos-toolbar > *{display:inline-block; vertical-align: top; padding: 0 16px; font-size: 12px; color: #fff; *display:inline; *zoom: 1;}\r\n.layui-layer-photos-toolbar *{font-size: 12px;}\r\n.layui-layer-photos-header{top: 0; bottom: auto;}\r\n.layui-layer-photos-header > span{cursor: pointer;}\r\n.layui-layer-photos-header > span:hover{background-color: rgba(51,51,51,.32);}\r\n.layui-layer-photos-header .layui-icon{font-size: 18px;}\r\n.layui-layer-photos-footer > h3{max-width: 65%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}\r\n.layui-layer-photos-footer a:hover{text-decoration: underline;}\r\n.layui-layer-photos-footer em{font-style: normal;}\r\n\r\n/* 关闭动画 */\r\n@-webkit-keyframes layer-bounceOut {\r\n 100% {opacity: 0; -webkit-transform: scale(.7); transform: scale(.7)}\r\n 30% {-webkit-transform: scale(1.05); transform: scale(1.05)}\r\n 0% {-webkit-transform: scale(1); transform: scale(1);}\r\n}\r\n@keyframes layer-bounceOut {\r\n 100% {opacity: 0; -webkit-transform: scale(.7); -ms-transform: scale(.7); transform: scale(.7);}\r\n 30% {-webkit-transform: scale(1.05); -ms-transform: scale(1.05); transform: scale(1.05);}\r\n 0% {-webkit-transform: scale(1); -ms-transform: scale(1);transform: scale(1);}\r\n}\r\n.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;}\r\n"]} \ No newline at end of file diff --git a/web/static/layui/font/iconfont.eot b/web/static/layui/font/iconfont.eot new file mode 100644 index 0000000..3f5e98b Binary files /dev/null and b/web/static/layui/font/iconfont.eot differ diff --git a/web/static/layui/font/iconfont.svg b/web/static/layui/font/iconfont.svg new file mode 100644 index 0000000..4f1920d --- /dev/null +++ b/web/static/layui/font/iconfont.svg @@ -0,0 +1,405 @@ + + + + Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/static/layui/font/iconfont.ttf b/web/static/layui/font/iconfont.ttf new file mode 100644 index 0000000..6e84a89 Binary files /dev/null and b/web/static/layui/font/iconfont.ttf differ diff --git a/web/static/layui/font/iconfont.woff b/web/static/layui/font/iconfont.woff new file mode 100644 index 0000000..acd7ed6 Binary files /dev/null and b/web/static/layui/font/iconfont.woff differ diff --git a/web/static/layui/font/iconfont.woff2 b/web/static/layui/font/iconfont.woff2 new file mode 100644 index 0000000..5badd6e Binary files /dev/null and b/web/static/layui/font/iconfont.woff2 differ diff --git a/web/static/layui/layui.js b/web/static/layui/layui.js new file mode 100644 index 0000000..b000f64 --- /dev/null +++ b/web/static/layui/layui.js @@ -0,0 +1,2 @@ +/** v2.9.18 | MIT Licensed */;!function(d){"use strict";var t,h=d.document,m={modules:{},status:{},timeout:10,event:{}},o=function(){this.v="2.9.18"},e=d.LAYUI_GLOBAL||{},v=(t=h.currentScript&&"SCRIPT"===h.currentScript.tagName.toUpperCase()?h.currentScript.src:function(){for(var t,e=h.getElementsByTagName("script"),n=e.length-1,o=n;01e3*m.timeout/4?g(s+" is not a valid module","error"):void(m.status[s]?y():setTimeout(o,4))}())}function y(){e.push(layui[s]),11e3*m.timeout/4?g(s+" is not a valid module","error"):void("string"==typeof m.modules[s]&&m.status[s]?y():setTimeout(f,4))}():((r=h.createElement("script"))["async"]=!0,r.charset="utf-8",r.src=i+((u=!0===m.version?m.v||(new Date).getTime():m.version||"")?"?v="+u:""),l.appendChild(r),!r.attachEvent||r.attachEvent.toString&&r.attachEvent.toString().indexOf("[native code")<0||b?r.addEventListener("load",function(t){p(t,i)},!1):r.attachEvent("onreadystatechange",function(t){p(t,i)}),m.modules[s]=i)),a},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(d.innerHeight||h.documentElement.clientHeight)},p.getStyleRules=function(t,n){if(t)return t=(t=t.sheet||t.styleSheet||{}).cssRules||t.rules,"function"==typeof n&&layui.each(t,function(t,e){if(n(e,t))return!0}),t},p.style=function(t){t=t||{};var e=p.elem("style"),n=t.text||"",i=t.target;if(n)return"styleSheet"in e?(e.setAttribute("type","text/css"),e.styleSheet.cssText=n):e.innerHTML=n,e.id="LAY-STYLE-"+(t.id||(n=p.style.index||0,p.style.index++,"DF-"+n)),i&&((t=p(i).find("#"+e.id))[0]&&t.remove(),p(i).append(e)),e},p.position=function(t,e,n){var i,r,o,c,a,u,s,f,l;e&&(n=n||{},t!==h&&t!==p("body")[0]||(n.clickType="right"),i="right"===n.clickType?{left:(i=n.e||d.event||{}).clientX,top:i.clientY,right:i.clientX,bottom:i.clientY}:t.getBoundingClientRect(),u=e.offsetWidth,s=e.offsetHeight,r=function(t){return h.body[t=t?"scrollLeft":"scrollTop"]|h.documentElement[t]},o=function(t){return h.documentElement[t?"clientWidth":"clientHeight"]},c="margin"in n?n.margin:5,l=i.left,a=i.bottom,"center"===n.align?l-=(u-t.offsetWidth)/2:"right"===n.align&&(l=l-u+t.offsetWidth),(l=l+u+c>o("width")?o("width")-u-c:l)o()&&(i.top>s+c&&i.top<=o()?a=i.top-s-2*c:n.allowBottomOut||(a=o()-s-2*c)<0&&(a=0)),(u=n.position)&&(e.style.position=u),s=n.offset?n.offset[0]:0,f=n.offset?n.offset[1]:0,e.style.left=l+("fixed"===u?0:r(1))+s+"px",e.style.top=a+("fixed"===u?0:r())+f+"px",p.hasScrollbar()||(l=e.getBoundingClientRect(),!n.SYSTEM_RELOAD&&l.bottom+c>o()&&(n.SYSTEM_RELOAD=!0,setTimeout(function(){p.position(t,e,n)},50))))},p.options=function(t,e){if(e="object"==typeof e?e:{attr:e},t===h)return{};var t=p(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"),{}}},p.isTopElem=function(n){var t=[h,p("body")[0]],i=!1;return p.each(t,function(t,e){if(e===n)return i=!0}),i},p.clipboard={writeText:function(n){var i=String(n.text);function t(){var t=h.createElement("textarea");t.value=i,t.style.position="fixed",t.style.opacity="0",t.style.top="0px",t.style.left="0px",h.body.appendChild(t),t.select();try{h.execCommand("copy"),"function"==typeof n.done&&n.done()}catch(e){"function"==typeof n.error&&n.error(e)}finally{t.remove?t.remove():h.body.removeChild(t)}}navigator&&"clipboard"in navigator?navigator.clipboard.writeText(i).then(n.done,function(){t()}):t()}},p.passiveSupported=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});d.addEventListener("test",null,e),d.removeEventListener("test",null,e)}catch(n){}return t}(),p.touchEventsSupported=function(){return"ontouchstart"in d},p.touchSwipe=function(t,e){var n,i,r,o=e,c=p(t)[0];c&&p.touchEventsSupported()&&(n={pointerStart:{x:0,y:0},pointerEnd:{x:0,y:0},distanceX:0,distanceY:0,direction:"none",timeStart:null},e=function(t){1===t.touches.length&&(c.addEventListener("touchmove",i,!!p.passiveSupported&&{passive:!1}),c.addEventListener("touchend",r),c.addEventListener("touchcancel",r),n.timeStart=Date.now(),n.pointerStart.x=n.pointerEnd.x=t.touches[0].clientX,n.pointerStart.y=n.pointerEnd.y=t.touches[0].clientY,n.distanceX=n.distanceY=0,n.direction="none",o.onTouchStart)&&o.onTouchStart(t,n)},i=function(t){t.preventDefault(),n.pointerEnd.x=t.touches[0].clientX,n.pointerEnd.y=t.touches[0].clientY,n.distanceX=n.pointerStart.x-n.pointerEnd.x,n.distanceY=n.pointerStart.y-n.pointerEnd.y,Math.abs(n.distanceX)>Math.abs(n.distanceY)?n.direction=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 i,e,t,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:"\u4e0a\u4e00\u9875",n.next="next"in n?n.next:"\u4e0b\u4e00\u9875",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:''+(e="object"==typeof n.countText?n.countText:["\u5171 "," \u6761"])[0]+n.count+e[1]+"",limit:(i=['"),refresh:['','',""].join(""),skip:[''+(e="object"==typeof n.skipText?n.skipText:["\u5230\u7b2c","\u9875","\u786e\u5b9a"])[0],'',e[1]+'",""].join("")};return['
',(t=[],layui.each(n.layout,function(e,a){l[a]&&t.push(l[a])}),t.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,D){"use strict";var n=i.layui&&layui.define,l={getPath:i.lay&&lay.getPath?lay.getPath:"",link:function(e,t,a){T.path&&i.lay&&lay.layui&&lay.layui.link(T.path+e,t,a)}},e=i.LAYUI_GLOBAL||{},a="laydate",d="lay-"+a+"-id",T={v:"5.6.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="+T.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}},M="layui-this",C="laydate-disabled",h=[100,2e5],v="layui-laydate-static",b="layui-laydate-list",o="laydate-selected",r="layui-laydate-hint",y="laydate-day-prev",m="laydate-day-next",E=".laydate-btns-confirm",L="laydate-time-text",I="laydate-btns-time",x="layui-laydate-preview",w="layui-laydate-shade",k=function(e){var t,a=this,n=(a.index=++T.index,a.config=lay.extend({},a.config,T.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},k.prototype.markerOfChineseFestivals={"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"},k.prototype.reload=function(e){this.config=lay.extend({},this.config,e),this.init()},k.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(u).test(t)?"\\d{"+(new RegExp(u).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),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(),"function"==typeof o.formatToDisplay&&(r.isInput(o.elem[0])?r.formatToDisplay(o.elem[0],o.formatToDisplay):(t=r.rangeElem)&&(r.formatToDisplay(t[0][0],o.formatToDisplay),r.formatToDisplay(t[1][0],o.formatToDisplay))),o.value)&&o.isInitValue&&("date"===layui.type(o.value)?r.setValue(r.parse(0,r.systemDate(o.value))):r.setValue(o.value))},k.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?" "+v:"",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=[],u=r.elemHeader=[],c=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"}),p=(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)&&p.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+""))}),p.push('"),p.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]||{},t=("function"==typeof t.value?t.value():t.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("."+I).removeClass(C));t&&"date"===t.attr("lay-type")&&t[0].click(),r.done(null,"change"),lay(this).addClass(M),"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")),f=[],g=!0,t=(lay.each(o.theme,function(e,t){g&&/^#/.test(t)?(g=!(l=!0),f.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)&&f.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&&f.push("#{{id}}.layui-laydate-range{width: 628px;}".replace(/{{id}}/g,r.elemID)),f.length&&(f=f.join(""),"styleSheet"in p?(p.setAttribute("type","text/css"),p.styleSheet.cssText=f):p.innerHTML=f,l&&lay(y).addClass("laydate-theme-molv"),y.appendChild(p)),r.remove(k.thisElemDate),T.thisId=o.id,s?o.elem.append(y):(D.body.appendChild(y),r.position()),o.shade?'
    ':"");y.insertAdjacentHTML("beforebegin",t),r.checkDate().calendar(null,0,"init"),r.changeEvent(),k.thisElemDate=r.elemID,r.renderAdditional(),"function"==typeof o.ready&&o.ready(lay.extend({},o.dateTime,{month:o.dateTime.month+1})),r.preview()},k.prototype.remove=function(e){var t=this,a=t.config,n=lay("#"+(e||t.elemID));return n[0]&&(n.hasClass(v)||t.checkDate(function(){n.remove(),delete t.startDate,delete t.endDate,delete t.endState,delete t.startTime,delete t.endTime,delete T.thisId,"function"==typeof a.close&&a.close(t)}),lay("."+w).remove()),t},k.prototype.position=function(){var e=this.config;return lay.position(e.elem[0],this.elem,{position:e.position}),this},k.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))},k.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)},c=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)?(r=s.dateTime=lay.extend({},s.max),i=!0):d.getDateTime(r)d.getDateTime(s.max))&&(d.endDate=lay.extend({},s.max),i=!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),i&&m&&(d.setValue(d.parse()),d.hint("value "+l.invalidDate+l.formatError[1])),d.startDate=d.startDate||m&&lay.extend({},s.dateTime),d.autoCalendarModel.auto&&d.autoCalendarModel(),d.endState=!s.range||!d.rangeLinked||!(!d.startDate||!d.endDate),e&&e()),d},k.prototype.markRender=function(e,a,t){var n;"object"==typeof t?lay.each(t||{},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])}):"string"==typeof t&&(n=t||a[2]),n&&e.find("div").html(''+n+"")},k.prototype.mark=function(t,a){var n=this,e=n.config,i=function(e){n.markRender(t,a,e)};return e.calendar&&"cn"===e.lang&&i(n.markerOfChineseFestivals),"function"==typeof e.mark?e.mark({year:a[0],month:a[1],date:a[2]},i):"object"==typeof e.mark&&i(e.mark),n},k.prototype.holidaysRender=function(r,o,e){var d=["holidays","workdays"],s=function(e,t,a){e.find("div").html(["",a,""].join(""))};"array"===layui.type(e)?lay.each(e,function(l,e){lay.each(e,function(e,t){var a,n,i;t=t,a=r.attr("lay-ymd"),n=t.split("-"),i=a.split("-"),lay.each(n,function(e,t){n[e]=parseInt(t,10)}),lay.each(i,function(e,t){i[e]=parseInt(t,10)}),n.join("-")===i.join("-")&&s(r,d[l],o[2])})}):"string"==typeof e&&-1!==d.indexOf(e)&&s(r,e,o[2])},k.prototype.holidays=function(t,a){var n=this,e=n.config,i=function(e){n.holidaysRender(t,a,e)};return"function"==typeof e.holidays?e.holidays({year:a[0],month:a[1],date:a[2]},i):"array"===layui.type(e.holidays)&&i(e.holidays),n},k.prototype.cellRender=function(t,e,a){var n=this.config;return"function"==typeof n.cellRender&&n.cellRender(e,function(e){"string"==typeof e?lay(t).html(e):"object"==typeof e&&lay(t).html("").append(lay(e)[0])},{originElem:t,type:a}),this},k.prototype.startOfYear=function(e){e=new Date(e);return e.setFullYear(e.getFullYear(),0,1),e.setHours(0,0,0,0),e},k.prototype.endOfYear=function(e){var e=new Date(e),t=e.getFullYear();return e.setFullYear(t+1,0,0),e.setHours(23,59,59,999),e},k.prototype.startOfMonth=function(e){e=new Date(e);return e.setDate(1),e.setHours(0,0,0,0),e},k.prototype.endOfMonth=function(e){var e=new Date(e),t=e.getMonth();return e.setFullYear(e.getFullYear(),t+1,0),e.setHours(23,59,59,999),e},k.prototype.addDays=function(e,t){e=new Date(e);return t&&e.setDate(e.getDate()+t),e},k.prototype.isDisabledYearOrMonth=function(e,t,a){for(var n=this,i=n.config,l="year"===t?n.startOfYear(e):n.startOfMonth(e),t="year"===t?n.endOfYear(e):n.endOfMonth(e),r=Math.floor((t.getTime()-l.getTime())/864e5)+1,o=0,d=0;d(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.nowh[1]&&(s.year=h[1],d.hint(y.invalidDate)),d.firstDate||(d.firstDate=lay.extend({},s)),n.setFullYear(s.year,s.month,1),l=(n.getDay()+(7-a.weekStart))%7,r=T.getEndDate(s.month||12,s.year),o=T.getEndDate(s.month+1,s.year),lay.each(u,function(e,t){var a,n=[s.year,s.month];(t=lay(t)).removeAttr("class"),e"+n[2]+""),d.mark(t,n).holidays(t,n).limit({elem:t,date:{year:n[0],month:n[1]-1,date:n[2]},index:e,rangeType:i,disabledType:"date"}),d.cellRender(t,{year:n[0],month:n[1],date:n[2]},"date")}),lay(c[0]).attr("lay-ym",s.year+"-"+(s.month+1)),lay(c[1]).attr("lay-ym",s.year+"-"+(s.month+1)),d.panelYM||(d.panelYM={}),d.panelYM[i]={year:s.year,month:s.month},"cn"===a.lang?(lay(c[0]).attr("lay-type","year").html(s.year+" \u5e74"),lay(c[1]).attr("lay-type","month").html(s.month+1+" \u6708")):(lay(c[0]).attr("lay-type","month").html(y.month[s.month]),lay(c[1]).attr("lay-type","year").html(s.year)),m&&(a.range?!e&&"init"===t||(d.listYM=[[(d.startDate||a.dateTime).year,(d.startDate||a.dateTime).month+1],[d.endDate.year,d.endDate.month+1]],d.list(a.type,0).list(a.type,1),"time"===a.type?d.setBtnStatus("\u65f6\u95f4",lay.extend({},d.systemDate(),d.startTime),lay.extend({},d.systemDate(),d.endTime)):d.setBtnStatus(!0)):(d.listYM=[[s.year,s.month+1]],d.list(a.type,0))),a.range&&"init"===t&&(d.rangeLinked?(n=d.getAsYM(s.year,s.month,i?"sub":null),d.calendar(lay.extend({},s,{year:n[0],month:n[1]}),1-i)):d.calendar(null,1-i)),a.range||(u=["hours","minutes","seconds"],d.limit({elem:lay(d.footer).find(".laydate-btns-now"),date:d.systemDate(/^(datetime|time)$/.test(a.type)?new Date:null),index:0,time:u,disabledType:"datetime"}),d.limit({elem:lay(d.footer).find(E),index:0,time:u,disabledType:"datetime"})),d.setBtnStatus(),lay(d.shortcut).find("li."+M).removeClass(M),a.range&&!m&&"init"!==t&&d.stampRange(),d},k.prototype.list=function(n,i){var l,r,e,a,o,d,t,s=this,y=s.config,m=s.rangeLinked?y.dateTime:[y.dateTime,s.endDate][i],u=s.lang(),c=y.range&&"date"!==y.type&&"datetime"!==y.type,h=lay.elem("ul",{"class":b+" "+{year:"laydate-year-list",month:"laydate-month-list",time:"laydate-time-list"}[n]}),p=s.elemHeader[i],f=lay(p[2]).find("span"),g=s.elemCont[i||0],D=lay(g).find("."+b)[0],T="cn"===y.lang,v=T?"\u5e74":"",x=s.listYM[i]||{},w=["hours","minutes","seconds"],k=["startTime","endTime"][i];return x[0]<1&&(x[0]=1),"year"===n?(e=l=x[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==x[0]&&lay(t).addClass(M),t.innerHTML=l+v,h.appendChild(t),s.limit({elem:lay(t),date:a,index:i,type:n,rangeType:i,disabledType:"date"}),s.cellRender(t,{year:l,month:1,date:1},"year"),l++}),lay(f[T?0:1]).attr("lay-ym",l-8+"-"+x[1]).html(e+v+" - "+(l-1)+v)):"month"===n?(lay.each(new Array(12),function(e){var t=lay.elem("li",{"lay-ym":e}),a={year:x[0],month:e,date:1};e+1==x[1]&&lay(t).addClass(M),t.innerHTML=u.month[e]+(T?"\u6708":""),h.appendChild(t),s.limit({elem:lay(t),date:a,index:i,type:n,rangeType:i,disabledType:"date"}),s.cellRender(t,{year:x[0],month:e+1,date:1},"month")}),lay(f[T?0:1]).attr("lay-ym",x[0]+"-"+x[1]).html(x[0]+v)):"time"===n&&(r=function(){lay(h).find("ol").each(function(a,e){lay(e).find("li").each(function(e,t){s.limit({elem:lay(t),date:[{hours:e},{hours:s[k].hours,minutes:e},{hours:s[k].hours,minutes:s[k].minutes,seconds:e}][a],index:i,rangeType:i,disabledType:"time",time:[["hours"],["hours","minutes"],["hours","minutes","seconds"]][a]})})}),y.range||s.limit({elem:lay(s.footer).find(E),date:s[k],index:0,time:["hours","minutes","seconds"],disabledType:"datetime"})},y.range?s[k]||(s[k]="startTime"===k?m:s.endDate):s[k]=m,lay.each([24,60,60],function(t,e){var a=lay.elem("li"),n=["

    "+u.time[t]+"

      "];lay.each(new Array(e),function(e){n.push(""+lay.digit(e,2)+"")}),a.innerHTML=n.join("")+"
    ",h.appendChild(a)}),r(),e=-1!==y.format.indexOf("H"),f=-1!==y.format.indexOf("m"),t=-1!==y.format.indexOf("s"),a=h.children,o=0,lay.each([e,f,t],function(e,t){t||(a[e].className+=" layui-hide",o++)}),h.className+=" laydate-time-list-hide-"+o),D&&g.removeChild(D),g.appendChild(h),"year"===n||"month"===n?(lay(s.elemMain[i]).addClass("laydate-ym-show"),lay(h).find("li").on("click",function(){var e,t,a=0|lay(this).attr("lay-ym");lay(this).hasClass(C)||(s.rangeLinked?lay.extend(m,{year:"year"===n?a:x[0],month:"year"===n?x[1]-1:a}):m[n]=a,e=-1!==["year","month"].indexOf(y.type),t="year"===n&&-1!==["date","datetime"].indexOf(y.type),e||t?(lay(h).find("."+M).removeClass(M),lay(this).addClass(M),("month"===y.type&&"year"===n||t)&&(s.listYM[i][0]=a,c&&((i?s.endDate:m).year=a),s.list("month",i))):(s.checkDate("limit").calendar(m,i,"init"),s.closeList()),s.setBtnStatus(),!y.range&&y.autoConfirm&&("month"===y.type&&"month"===n||"year"===y.type&&"year"===n)&&s.setValue(s.parse()).done().remove(),s.autoCalendarModel.auto&&!s.rangeLinked?s.choose(lay(g).find("td.layui-this"),i):s.endState&&s.done(null,"change"),lay(s.footer).find("."+I).removeClass(C))})):(f=lay.elem("span",{"class":L}),d=function(){lay(h).find("ol").each(function(e){var a=this,t=lay(a).find("li");a.scrollTop=30*(s[k][w[e]]-2),a.scrollTop<=0&&t.each(function(e,t){if(!lay(this).hasClass(C))return a.scrollTop=30*(e-2),!0})})},t=lay(p[2]).find("."+L),d(),f.innerHTML=y.range?[u.startTime,u.endTime][i]:u.timeTips,lay(s.elemMain[i]).addClass("laydate-time-show"),t[0]&&t.remove(),p[2].appendChild(f),(D=lay(h).find("ol")).each(function(t){var a=this;lay(a).find("li").on("click",function(){var e=0|this.innerHTML;lay(this).hasClass(C)||(y.range?s[k][w[t]]=e:m[w[t]]=e,lay(a).find("."+M).removeClass(M),lay(this).addClass(M),r(),d(),!s.endDate&&"time"!==y.type&&"datetime"!==y.type||s.done(null,"change"),s.setBtnStatus())})}),layui.device().mobile&&D.css({overflowY:"auto",touchAction:"pan-y"})),s},k.prototype.listYM=[],k.prototype.closeList=function(){var a=this;a.config;lay.each(a.elemCont,function(e,t){lay(this).find("."+b).remove(),lay(a.elemMain[e]).removeClass("laydate-ym-show laydate-time-show")}),lay(a.elem).find("."+L).remove()},k.prototype.setBtnStatus=function(e,t,a){var n=this,i=n.config,l=n.lang(),r=lay(n.footer).find(E),o="datetime"===i.type||"time"===i.type?["hours","minutes","seconds"]:undefined;i.range&&(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,disabledType:"datetime",time:o,rangeType:0})||n.limit({date:a,disabledType:"datetime",time:o,rangeType:1})?r.addClass(C):r[i?"addClass":"removeClass"](C),e)&&i&&n.hint("string"==typeof e?l.timeout.replace(/\u65e5\u671f/g,e):l.timeout)},k.prototype.parse=function(e,t){var a=this,n=a.config,i=a.rangeLinked?a.startDate:n.dateTime,t=t||("end"==e?lay.extend({},a.endDate,a.endTime):n.range?lay.extend({},i||n.dateTime,a.startTime):n.dateTime),i=T.parse(t,a.format,1);return n.range&&e===undefined?i+" "+a.rangeStr+" "+a.parse("end"):i},k.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)},k.prototype.getDateTime=function(e){return this.newDate(e).getTime()},k.prototype.formatToDisplay=function(e,t){var a=this,n=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value");Object.defineProperty(e,"value",lay.extend({},n,{get:function(){return this.getAttribute("lay-date")},set:function(e){n.set.call(this,t.call(a,e)),this.setAttribute("lay-date",e)}}))},k.prototype.setValue=function(e){var t,a=this,n=a.config,i=n.elem[0];return"static"!==n.position&&(e=e||"",a.isInput(i)?lay(i).val(e):(t=a.rangeElem)?("array"!==layui.type(e)&&(e=e.split(" "+a.rangeStr+" ")),t[0].val(e[0]||""),t[1].val(e[1]||"")):(0===lay(i).find("*").length&&(t="function"==typeof n.formatToDisplay?n.formatToDisplay(e):e,lay(i).html(t)),lay(i).attr("lay-date",e))),a},k.prototype.preview=function(){var e,t=this,a=t.config;a.isPreview&&(e=lay(t.elem).find("."+x),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))},k.prototype.renderAdditional=function(){this.config.fullPanel&&this.list("time",0)},k.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(E).addClass(C),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+" "+M),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:M),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.rangeLinked?n.startDate:n.thisDateTime(1-a),disabledType:"date"})&&(((r=n.endState&&n.autoCalendarModel.auto?n.autoCalendarModel():r)||n.rangeLinked&&n.endState)&&n.newDate(n.startDate)>n.newDate(n.endDate)&&(n.startDate.year===n.endDate.year&&n.startDate.month===n.endDate.month&&n.startDate.date===n.endDate.date&&(o=n.startTime,n.startTime=n.endTime,n.endTime=o),o=n.startDate,n.startDate=lay.extend({},n.endDate,n.startTime),i.dateTime=lay.extend({},n.startDate),n.endDate=lay.extend({},o,n.endTime)),r)&&(i.dateTime=lay.extend({},n.startDate)),n.rangeLinked?(e=n.checkPanelDate(l,t),o=lay.extend({},l),d=r||e&&e.needFullRender?"init":null,e=e?e.index:t,n.calendar(o,e,d)):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"))},k.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(C)||(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(C))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(C))return("time"===n.type?a.startTime&&a.endTime&&a.newDate(a.startTime)>a.newDate(a.endTime):a.startDate&&a.endDate&&a.newDate(lay.extend({},a.startDate,a.startTime||{}))>a.newDate(lay.extend({},a.endDate,a.endTime||{})))?a.hint("time"===n.type?i.timeout.replace(/\u65e5\u671f/g,"\u65f6\u95f4"):i.timeout):a.hint(i.invalidDate)}else if(lay(t).hasClass(C))return a.hint(i.invalidDate);a.setValue(a.parse()),a.done(null,"onConfirm").done().remove()}};o[e]&&o[e]()},k.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(E),date:{year:s[0]},disabledType:"datetime"})),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(){var e,t;i.rangeLinked?(t=i.panelYM[0],t=i.getAsYM(t.year,t.month,"sub"),e=lay.extend({},l.dateTime,i.panelYM[0],{year:t[0],month:t[1]}),i.checkDate("limit").calendar(e,null,"init")):(t=i.getAsYM(r.year,r.month,"sub"),lay.extend(r,{year:t[0],month:t[1]}),i.checkDate("limit").calendar(null,null,"init"),i.autoCalendarModel.auto?i.choose(lay(d).find("td.layui-this"),n):i.done(null,"change"))},nextMonth:function(){var e,t;i.rangeLinked?(t=i.panelYM[0],t=i.getAsYM(t.year,t.month),e=lay.extend({},l.dateTime,i.panelYM[0],{year:t[0],month:t[1]}),i.checkDate("limit").calendar(e,null,"init")):(t=i.getAsYM(r.year,r.month),lay.extend(r,{year:t[0],month:t[1]}),i.checkDate("limit").calendar(null,null,"init"),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")))}}},k.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("."+I).addClass(C))}),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)})},k.prototype.isInput=function(e){return/input|textarea/.test(e.tagName.toLocaleLowerCase())||/INPUT|TEXTAREA/.test(e.tagName)},k.prototype.events=function(){var e,t=this,a=t.config;a.elem[0]&&!a.elem[0].eventHandler&&(a.elem.on(a.trigger,e=function(){T.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(D).on("mousedown",function(e){var t,a;T.thisId&&(t=s.getThis(T.thisId))&&(a=t.config,e.target===a.elem[0]||e.target===a.eventElem[0]||e.target===n(a.closeStop)[0]||a.elem[0]&&a.elem[0].contains(e.target)||t.remove())}).on("keydown",function(e){var t;T.thisId&&(t=s.getThis(T.thisId))&&"static"!==t.config.position&&13===e.keyCode&&n("#"+t.elemID)[0]&&t.elemID===k.thisElemDate&&(e.preventDefault(),n(t.footer).find(E)[0].click())}),n(i).on("resize",function(){if(T.thisId){var e=s.getThis(T.thisId);if(e)return!(!e.elem||!n(".layui-laydate")[0])&&void e.position()}})},T.render=function(e){e=new k(e);return s.call(e)},T.reload=function(e,t){e=s.getThis(e);if(e)return e.reload(t)},T.getInst=function(e){e=s.getThis(e);if(e)return e.inst},T.hint=function(e,t){e=s.getThis(e);if(e)return e.hint(t)},T.unbind=function(e){e=s.getThis(e);if(e)return e.unbind()},T.close=function(e){e=s.getThis(e||T.thisId);if(e)return e.remove()},T.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("")},T.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?(T.ready(),layui.define("lay",function(e){T.path=layui.cache.dir,l.run(lay),e(a,T)})):"function"==typeof define&&define.amd?define(function(){return l.run(lay),T}):(T.ready(),l.run(i.lay),i.laydate=T)}(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){var n;return e===t?(l=!0,0):(n=!e.compareDocumentPosition-!t.compareDocumentPosition)||(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=(t=w(n,!0))&&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){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])}else{if((n=g.getElementById(r[2]))&&n.parentNode){if(n.id!==r[2])return Q.find(e);this.length=1,this[0]=n}this.context=g,this.selector=e}}return 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=[],r&&(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,i=0,n=a.btn.length;i'+a.btn[i]+"";return'
    '+e+"
    "}():"")+(a.resize?'':"")+""],s,h('
    ')),this},t.pt.creat=function(){var e,t,i,n,a=this,o=a.config,s=a.index,r="object"==typeof(d=o.content),l=h("body"),c=function(e){var t;o.shift&&(o.anim=o.shift),u.anim[o.anim]&&(t="layer-anim "+u.anim[o.anim],e.addClass(t).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){h(this).removeClass(t)}))};if(o.id&&h("."+u[0]).find("#"+o.id)[0])e=h("#"+o.id).closest("."+u[0]),t=e.attr("times"),i=e.data("config"),n=h("#"+u.SHADE+t),"min"===(e.data("maxminStatus")||{})?v.restore(t):i.hideOnClose&&(n.show(),e.show(),c(e),setTimeout(function(){n.css({opacity:n.data(y)})},10));else{switch(o.removeFocus&&document.activeElement&&document.activeElement.blur(),"string"==typeof o.area&&(o.area="auto"===o.area?["",""]:[o.area,""]),6==v.ie&&(o.fixed=!1),o.type){case 0:o.btn="btn"in o?o.btn:f.btn[0],v.closeAll("dialog");break;case 2:var d=o.content=r?o.content:[o.content||"","auto"];o.content='';break;case 3:delete o.title,delete o.closeBtn,-1===o.icon&&o.icon,v.closeAll("loading");break;case 4:r||(o.content=[o.content,"body"]),o.follow=o.content[1],o.content=o.content[0]+'',delete o.title,o.tips="object"==typeof o.tips?o.tips:[o.tips,!0],o.tipsMore||v.closeAll("tips")}a.vessel(r,function(e,t,i){l.append(e[0]),r?2==o.type||4==o.type?h("body").append(e[1]):d.parents("."+u[0])[0]||(d.data("display",d.css("display")).show().addClass("layui-layer-wrap").wrap(e[1]),h("#"+u[0]+s).find("."+u[5]).before(t)):l.append(e[1]),h("#"+u.MOVE)[0]||l.append(f.moveElem=i),a.layero=h("#"+u[0]+s),a.shadeo=h("#"+u.SHADE+s),o.scrollbar||f.setScrollbar(s)}).auto(s),a.shadeo.css({"background-color":o.shade[1]||"#000",opacity:o.shade[0]||o.shade,transition:o.shade[2]||""}),a.shadeo.data(y,o.shade[0]||o.shade),2==o.type&&6==v.ie&&a.layero.find("iframe").attr("src",d[0]),4==o.type?a.tips():(a.offset(),parseInt(f.getStyle(document.getElementById(u.MOVE),"z-index"))||(a.layero.css("visibility","hidden"),v.ready(function(){a.offset(),a.layero.css("visibility","visible")}))),!o.fixed||f.events.resize[a.index]||(f.events.resize[a.index]=function(){a.resize()},g.on("resize",f.events.resize[a.index])),o.time<=0||setTimeout(function(){v.close(a.index)},o.time),a.move().callback(),c(a.layero),a.layero.data("config",o)}},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=h("#"+u[0]+e),n=((""===t.area[0]||"auto"===t.area[0])&&0t.maxWidth)&&i.width(t.maxWidth),[i.innerWidth(),i.innerHeight()]),a=i.find(u[1]).outerHeight()||0,o=i.find("."+u[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]||"auto"===t.area[1]?0t.maxHeight?(n[1]=t.maxHeight,e("."+u[5])):t.fixed&&n[1]>=g.height()&&(n[1]=g.height(),e("."+u[5])):e("."+u[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=(g.height()-n[1])/2,e.offsetLeft=(g.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=g.width()-n[0]:"b"===t.offset?e.offsetTop=g.height()-n[1]:"l"===t.offset?e.offsetLeft=0:"lt"===t.offset?(e.offsetTop=0,e.offsetLeft=0):"lb"===t.offset?(e.offsetTop=g.height()-n[1],e.offsetLeft=0):"rt"===t.offset?(e.offsetTop=0,e.offsetLeft=g.width()-n[0]):"rb"===t.offset?(e.offsetTop=g.height()-n[1],e.offsetLeft=g.width()-n[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?g.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?g.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=g.scrollTop(),e.offsetLeft+=g.scrollLeft()),"min"===i.data("maxminStatus")&&(e.offsetTop=g.height()-(i.find(u[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=h(e.follow),a={width:(n=n[0]?n:h("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(){0'):e.removeClass("layui-layer-btn-is-loading").removeAttr("disabled").find(".layui-layer-btn-loading-icon").remove()},t.pt.callback=function(){var n=this,a=n.layero,o=n.config;n.openLayer(),o.success&&(2==o.type?a.find("iframe").on("load",function(){o.success(a,n.index,n)}):o.success(a,n.index,n)),6==v.ie&&n.IE6(a),a.find("."+u[6]).children("a").on("click",function(){var e,t=h(this),i=t.index();t.attr("disabled")||(o.btnAsync?(e=0===i?o.yes||o.btn1:o["btn"+(i+1)],n.loading=function(e){n.btnLoading(t,e)},e?f.promiseLikeResolve(e.call(o,n.index,a,n)).then(function(e){!1!==e&&v.close(n.index)},function(e){e!==m&&p.console&&p.console.error("layer error hint: "+e)}):v.close(n.index)):0===i?o.yes?o.yes(n.index,a,n):o.btn1?o.btn1(n.index,a,n):v.close(n.index):!1!==(o["btn"+(i+1)]&&o["btn"+(i+1)](n.index,a,n))&&v.close(n.index))}),a.find("."+u[7]).on("click",function(){!1!==(o.cancel&&o.cancel(n.index,a,n))&&v.close(n.index)}),o.shadeClose&&n.shadeo.on("click",function(){v.close(n.index)}),a.find(".layui-layer-min").on("click",function(){!1!==(o.min&&o.min(a,n.index,n))&&v.min(n.index,o)}),a.find(".layui-layer-max").on("click",function(){h(this).hasClass("layui-layer-maxmin")?(v.restore(n.index),o.restore&&o.restore(a,n.index,n)):(v.full(n.index,o),setTimeout(function(){o.full&&o.full(a,n.index,n)},100))}),o.end&&(f.end[n.index]=o.end),o.beforeEnd&&(f.beforeEnd[n.index]=h.proxy(o.beforeEnd,o,a,n.index,n))},f.reselect=function(){h.each(h("select"),function(e,t){var i=h(this);i.parents("."+u[0])[0]||1==i.attr("layer")&&h("."+u[0]).length<1&&i.removeAttr("layer").show()})},t.pt.IE6=function(e){h("select").each(function(e,t){var i=h(this);i.parents("."+u[0])[0]||"none"!==i.css("display")&&i.attr({layer:"1"}).hide()})},t.pt.openLayer=function(){v.zIndex=this.config.zIndex,v.setTop=function(e){return v.zIndex=parseInt(e[0].style.zIndex),e.on("mousedown",function(){v.zIndex++,e.css("z-index",v.zIndex+1)}),v.zIndex}},f.record=function(e){if(!e[0])return p.console&&console.error("index error");var t=e.attr("type"),i=e.find(".layui-layer-content"),t=t===f.type[2]?i.children("iframe"):i,n=[e[0].style.width||f.getStyle(e[0],"width"),e[0].style.height||f.getStyle(e[0],"height"),e.position().top,e.position().left+parseFloat(e.css("margin-left"))];e.find(".layui-layer-max").addClass("layui-layer-maxmin"),e.attr({area:n}),i.data(l,f.getStyle(t[0],"height"))},f.setScrollbar=function(e){u.html.css("overflow","hidden").attr("layer-full",e)},f.restScrollbar=function(e){u.html.attr("layer-full")==e&&(u.html[0].style[u.html[0].style.removeProperty?"removeProperty":"removeAttribute"]("overflow"),u.html.removeAttr("layer-full"))},f.promiseLikeResolve=function(e){var t=h.Deferred();return e&&"function"==typeof e.then?e.then(t.resolve,t.reject):t.resolve(e),t.promise()},(p.layer=v).getChildFrame=function(e,t){return t=t||h("."+u[4]).attr("times"),h("#"+u[0]+t).find("iframe").contents().find(e)},v.getFrameIndex=function(e){return h("#"+e).parents("."+u[4]).attr("times")},v.iframeAuto=function(e){var t,i,n;e&&(t=v.getChildFrame("html",e).outerHeight(),i=(e=h("#"+u[0]+e)).find(u[1]).outerHeight()||0,n=e.find("."+u[6]).outerHeight()||0,e.css({height:t+i+n}),e.find("iframe").css({height:t}))},v.iframeSrc=function(e,t){h("#"+u[0]+e).find("iframe").attr("src",t)},v.style=function(e,t,i){var e=h("#"+u[0]+e),n=e.find(".layui-layer-content"),a=e.attr("type"),o=e.find(u[1]).outerHeight()||0,s=e.find("."+u[6]).outerHeight()||0;e.attr("minLeft");a!==f.type[3]&&a!==f.type[4]&&(i||(parseFloat(t.width)<=260&&(t.width=260),parseFloat(t.height)-o-s<=64&&(t.height=64+o+s)),e.css(t),s=e.find("."+u[6]).outerHeight()||0,a===f.type[2]?e.find("iframe").css({height:("number"==typeof t.height?t.height:e.height())-o-s}):n.css({height:("number"==typeof t.height?t.height:e.height())-o-s-parseFloat(n.css("padding-top"))-parseFloat(n.css("padding-bottom"))}))},v.min=function(e,t){var i,n,a,o,s,r,l=h("#"+u[0]+e),c=l.data("maxminStatus");"min"!==c&&("max"===c&&v.restore(e),l.data("maxminStatus","min"),t=t||l.data("config")||{},c=h("#"+u.SHADE+e),i=l.find(".layui-layer-min"),n=l.find(u[1]).outerHeight()||0,o=(a="string"==typeof(o=l.attr("minLeft")))?o:181*f.minStackIndex+"px",s=l.css("position"),r={width:180,height:n,position:"fixed",overflow:"hidden"},f.record(l),0g.width()&&(o=g.width()-180-(f.minStackArr.edgeIndex=f.minStackArr.edgeIndex||0,f.minStackArr.edgeIndex+=3))<0&&(o=0),t.minStack&&(r.left=o,r.top=g.height()-n,a||f.minStackIndex++,l.attr("minLeft",o)),l.attr("position",s),v.style(e,r,!0),i.hide(),"page"===l.attr("type")&&l.find(u[4]).hide(),f.restScrollbar(e),c.hide())},v.restore=function(e){var t=h("#"+u[0]+e),i=h("#"+u.SHADE+e),n=t.find(".layui-layer-content"),a=t.attr("area").split(","),o=t.attr("type"),s=t.data("config")||{},r=n.data(l);t.removeData("maxminStatus"),v.style(e,{width:a[0],height:a[1],top:parseFloat(a[2]),left:parseFloat(a[3]),position:t.attr("position"),overflow:"visible"},!0),t.find(".layui-layer-max").removeClass("layui-layer-maxmin"),t.find(".layui-layer-min").show(),"page"===o&&t.find(u[4]).show(),s.scrollbar?f.restScrollbar(e):f.setScrollbar(e),r!==m&&(n.removeData(l),(o===f.type[2]?n.children("iframe"):n).css({height:r})),i.show()},v.full=function(t){var i=h("#"+u[0]+t),e=i.data("maxminStatus");"max"!==e&&("min"===e&&v.restore(t),i.data("maxminStatus","max"),f.record(i),u.html.attr("layer-full")||f.setScrollbar(t),setTimeout(function(){var e="fixed"===i.css("position");v.style(t,{top:e?0:g.scrollTop(),left:e?0:g.scrollLeft(),width:"100%",height:"100%"},!0),i.find(".layui-layer-min").hide()},100))},v.title=function(e,t){h("#"+u[0]+(t||v.index)).find(u[1]).html(e)},v.close=function(s,r){var e,t,l=(e=h("."+u[0]).children("#"+s).closest("."+u[0]))[0]?(s=e.attr("times"),e):h("#"+u[0]+s),c=l.attr("type"),i=l.data("config")||{},d=i.id&&i.hideOnClose;l[0]&&(t=function(){var o={slideDown:"layer-anim-slide-down-out",slideLeft:"layer-anim-slide-left-out",slideUp:"layer-anim-slide-up-out",slideRight:"layer-anim-slide-right-out"}[i.anim]||"layer-anim-close",e=function(){var e="layui-layer-wrap";if(d)return l.removeClass("layer-anim "+o),l.hide();if(c===f.type[1]&&"object"===l.attr("conType")){l.children(":not(."+u[5]+")").remove();for(var t=l.find("."+e),i=0;i<2;i++)t.unwrap();t.css("display",t.data("display")).removeClass(e)}else{if(c===f.type[2])try{var n=h("#"+u[4]+s)[0];n.contentWindow.document.write(""),n.contentWindow.close(),l.find("."+u[5])[0].removeChild(n)}catch(a){}l[0].innerHTML="",l.remove()}"function"==typeof f.end[s]&&f.end[s](),delete f.end[s],"function"==typeof r&&r(),f.events.resize[s]&&(g.off("resize",f.events.resize[s]),delete f.events.resize[s])},t=h("#"+u.SHADE+s);v.ie&&v.ie<10||!i.isOutAnim?t[d?"hide":"remove"]():(t.css({opacity:0}),setTimeout(function(){t[d?"hide":"remove"]()},350)),i.isOutAnim&&l.addClass("layer-anim "+o),6==v.ie&&f.reselect(),f.restScrollbar(s),"string"==typeof l.attr("minLeft")&&(f.minStackIndex--,f.minStackArr.push(l.attr("minLeft"))),v.ie&&v.ie<10||!i.isOutAnim?e():setTimeout(function(){e()},200)},d||"function"!=typeof f.beforeEnd[s]?(delete f.beforeEnd[s],t()):f.promiseLikeResolve(f.beforeEnd[s]()).then(function(e){!1!==e&&(delete f.beforeEnd[s],t())},function(e){e!==m&&p.console&&p.console.error("layer error hint: "+e)}))},v.closeAll=function(n,a){"function"==typeof n&&(a=n,n=null);var o=h("."+u[0]);h.each(o,function(e){var t=h(this),i=n?t.attr("type")===n:1;i&&v.close(t.attr("times"),e===o.length-1?a:null)}),0===o.length&&"function"==typeof a&&a()},v.closeLast=function(i,e){var t,n=[],a=h.isArray(i);h("string"==typeof i?".layui-layer-"+i:".layui-layer").each(function(e,t){t=h(t);if(a&&-1===i.indexOf(t.attr("type"))||"none"===t.css("display"))return!0;n.push(Number(t.attr("times")))}),0":'",s=i.success;return delete i.success,v.open(h.extend({type:1,btn:["\u786e\u5b9a","\u53d6\u6d88"],content:o,skin:"layui-layer-prompt"+x("prompt"),maxWidth:g.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)?v.tips("\u6700\u591a\u8f93\u5165"+(i.maxlength||500)+"\u4e2a\u5b57\u7b26",a,{tips:1}):n&&n(t,e,a)}},i))},v.tab=function(n){var a=(n=n||{}).tab||{},o="layui-this",s=n.success;return delete n.success,v.open(h.extend({type:1,skin:"layui-layer-tab"+x("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=h(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))},v.photos=function(n,e,a){var s={};if((n=h.extend(!0,{toolbar:!0,footer:!0},n)).photos){var t=!("string"==typeof n.photos||n.photos instanceof h),i=t?n.photos:{},o=i.data||[],r=i.start||0,l=n.success;if(s.imgIndex=1+(0|r),n.img=n.img||"img",delete n.success,t){if(0===o.length)return v.msg("\u6ca1\u6709\u56fe\u7247")}else{var c=h(n.photos),d=function(){o=[],c.find(n.img).each(function(e){var t=h(this);t.attr("layer-index",e),o.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(d(),0===o.length)return;if(e||c.on("click",n.img,function(){d();var e=h(this).attr("layer-index");v.photos(h.extend(n,{photos:{start:e,data:o,tab:n.tab},full:n.full}),!0)}),!e)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=o.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>o.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){var t;s.end||(t=e.keyCode,e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&v.close(s.index))},s.tabimg=function(e){if(!(o.length<=1))return i.start=s.imgIndex-1,v.close(s.index),v.photos(n,!0,e)},s.isNumber=function(e){return"number"==typeof e&&!isNaN(e)},s.image={},s.getTransform=function(e){var t=[],i=e.rotate,n=e.scaleX,e=e.scale;return s.isNumber(i)&&0!==i&&t.push("rotate("+i+"deg)"),s.isNumber(n)&&1!==n&&t.push("scaleX("+n+")"),s.isNumber(e)&&t.push("scale("+e+")"),t.length?t.join(" "):"none"},s.event=function(e,i,n){var a,o;s.main.find(".layui-layer-photos-prev").on("click",function(e){e.preventDefault(),s.imgprev(!0)}),s.main.find(".layui-layer-photos-next").on("click",function(e){e.preventDefault(),s.imgnext(!0)}),h(document).on("keyup",s.keyup),e.off("click").on("click","*[toolbar-event]",function(){var e=h(this);switch(e.attr("toolbar-event")){case"rotate":s.image.rotate=((s.image.rotate||0)+Number(e.attr("data-option")))%360,s.imgElem.css({transform:s.getTransform(s.image)});break;case"scalex":s.image.scaleX=-1===s.image.scaleX?1:-1,s.imgElem.css({transform:s.getTransform(s.image)});break;case"zoom":var t=Number(e.attr("data-option"));s.image.scale=(s.image.scale||1)+t,t<0&&s.image.scale<0-t&&(s.image.scale=0-t),s.imgElem.css({transform:s.getTransform(s.image)});break;case"reset":s.image.scaleX=1,s.image.scale=1,s.image.rotate=0,s.imgElem.css({transform:"none"});break;case"close":v.close(i)}n.offset(),n.auto(i)}),s.main.on("mousewheel DOMMouseScroll",function(e){var t=e.originalEvent.wheelDelta||-e.originalEvent.detail,i=s.main.find('[toolbar-event="zoom"]');(0n)&&("left"===t.direction?s.imgnext(!0):"right"===t.direction&&s.imgprev(!0))},h.each([n.shadeo,s.main],function(e,t){a.touchSwipe(t,{onTouchEnd:o})}))},s.loadi=v.load(1,{shade:!("shade"in n)&&[.9,m,"unset"],scrollbar:!1});var t=o[r].src,f=function(e){v.close(s.loadi);var t,i=o[r].alt||"";a&&(n.anim=-1),s.index=v.open(h.extend({type:1,id:"layui-layer-photos",area:(e=[e.width,e.height],t=[h(p).width()-100,h(p).height()-100],!n.full&&(t[0]'+i+''+(t=['
    '],1','','',"
    "].join("")),n.toolbar&&t.push(['
    ','','','','','','',"
    "].join("")),n.footer&&t.push(['"].join("")),t.push(""),t.join(""))+"",success:function(e,t,i){s.main=e.find(".layer-layer-photos-main"),s.footer=e.find(".layui-layer-photos-footer"),s.imgElem=s.main.children("img"),s.event(e,t,i),n.tab&&n.tab(o[r],e),"function"==typeof l&&l(e)},end:function(){s.end=!0,h(document).off("keyup",s.keyup)}},n))},u=function(){v.close(s.loadi),v.msg("\u5f53\u524d\u56fe\u7247\u5730\u5740\u5f02\u5e38\uff0c
    \u662f\u5426\u7ee7\u7eed\u67e5\u770b\u4e0b\u4e00\u5f20\uff1f",{time:3e4,btn:["\u4e0b\u4e00\u5f20","\u4e0d\u770b\u4e86"],yes:function(){1").addClass(r));layui.each(i.bars,function(t,e){var n=s('
  • ');n.addClass(e.icon).attr({"lay-type":e.type,style:e.style||(i.bgcolor?"background-color: "+i.bgcolor:"")}).html(e.content),n.on("click",function(){var t=s(this).attr("lay-type");"top"===t&&("body"===i.target?s("html,body"):u).animate({scrollTop:0},i.duration),"function"==typeof i.click&&i.click.call(this,t)}),"object"===layui.type(i.on)&&layui.each(i.on,function(t,e){n.on(t,function(){var t=s(this).attr("lay-type");"function"==typeof e&&e.call(this,t)})}),"top"===e.type&&(n.addClass("layui-fixbar-top"),o=n),l.append(n)}),c.find("."+r).remove(),"object"==typeof i.css&&l.css(i.css),c.append(l),o&&(e=function e(){return u.scrollTop()>=i.margin?t||(o.show(),t=1):t&&(o.hide(),t=0),e}()),u.on("scroll",function(){e&&(clearTimeout(n),n=setTimeout(function(){e()},100))})},countdown:function(i){i=s.extend(!0,{date:new Date,now:new Date},i);var o=arguments,r=(1]|&(?=#[a-zA-Z0-9]+)/g.test(t+="")?t.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,"""):t},unescape:function(t){return t!==undefined&&null!==t||(t=""),(t+="").replace(/\&/g,"&").replace(/\</g,"<").replace(/\>/g,">").replace(/\'/g,"'").replace(/\"/g,'"')},openWin:function(t){var e=(t=t||{}).window||window.open(t.url||"",t.target,t.specs);t.url||(e.document.open("text/html","replace"),e.document.write(t.content||""),e.document.close())},toVisibleArea:function(t){var e,n,i,o,r,a,c,u;(t=s.extend({margin:160,duration:200,type:"y"},t)).scrollElem[0]&&t.thisElem[0]&&(e=t.scrollElem,c=t.thisElem,i=(r="y"===t.type)?"top":"left",o=e[n=r?"scrollTop":"scrollLeft"](),r=e[r?"height":"width"](),a=e.offset()[i],u={},(c=c.offset()[i]-a)>r-t.margin||c."+w,D=function(e){var i=this;i.index=++h.index,i.config=c.extend({},i.config,h.config,e),i.init()};D.prototype.config={trigger:"click",content:"",className:"",style:"",show:!1,isAllowSpread:!0,isSpreadItem:!0,data:[],delay:[200,300],shade:0,accordion:!1,closeOnClick:!1},D.prototype.reload=function(e,i){var t=this;t.config=c.extend({},t.config,e),t.init(!0,i)},D.prototype.init=function(e,i){var t,n=this,l=n.config,a=c(l.elem);return 1');return 0\u6682\u65e0\u6570\u636e
  • '),e},u=function(r,e){return layui.each(e,function(e,i){var t,n=i[s.children]&&0",(t="href"in i?''+a+"":a,n?'
    '+t+("parent"===o?'':"group"===o&&d.isAllowSpread?'':"")+"
    ":'
    '+t+"
    "),""].join(""))).data("item",i),n&&(l=c('
    '),t=c("
      "),"parent"===o?(l.append(u(t,i[s.children])),a.append(l)):a.append(u(t,i[s.children]))),r.append(a))}),r},l=['
      ',"
      "].join("");!(e="contextmenu"!==d.trigger&&!lay.isTopElem(d.elem[0])?e:!0)&&d.elem.data(y+"_opened")||(a.elemView=c("."+v+"["+f+'="'+d.id+'"]'),"reloadData"===i&&a.elemView.length?a.elemView.html(d.content||n()):(a.elemView=c(l),a.elemView.append(d.content||n()),d.className&&a.elemView.addClass(d.className),d.style&&a.elemView.attr("style",d.style),h.thisId=d.id,a.remove(),t.append(a.elemView),d.elem.data(y+"_opened",!0),e=d.shade?'
      ':"",a.elemView.before(e),"mouseenter"===d.trigger&&a.elemView.on("mouseenter",function(){clearTimeout(g.timer)}).on("mouseleave",function(){a.delayRemove()})),a.position(),(g.prevElem=a.elemView).data("prevElem",d.elem),a.elemView.find(".layui-menu").on(o,function(e){layui.stope(e)}),a.elemView.find(".layui-menu li").on("click",function(e){var i=c(this),t=i.data("item")||{},n=t[s.children]&&0n.width()&&(t.addClass(b),(i=t[0].getBoundingClientRect()).left<0)&&t.removeClass(b),i.bottom>n.height())&&t.eq(0).css("margin-top",-(i.bottom-n.height()+5))}).on("mouseleave",t,function(e){var i=c(this).children("."+x);i.removeClass(b),i.css("margin-top",0)}),h.close=function(e){e=g.getThis(e);return e?(e.remove(),g.call(e)):this},h.open=function(e){e=g.getThis(e);return e?(e.render(),g.call(e)):this},h.reload=function(e,i,t){e=g.getThis(e);return e?(e.reload(i,t),g.call(e)):this},h.reloadData=function(){var t=c.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]}),h.reload.apply(null,t)},h.render=function(e){e=new D(e);return g.call(e)},e(r,h)});layui.define(["jquery","lay"],function(e){"use strict";var x=layui.$,b=layui.lay,m={config:{},index:layui.slider?layui.slider.index+1e4:0,set:function(e){var t=this;return t.config=x.extend({},t.config,e),t},on:function(e,t){return layui.onevent.call(this,i,e,t)}},i="slider",f="layui-disabled",T="layui-slider-bar",w="layui-slider-wrap",M="layui-slider-wrap-btn",L="layui-slider-tips",E="layui-slider-input-txt",Y="layui-slider-hover",t=function(e){var t=this;t.index=++m.index,t.config=x.extend({},t.config,m.config,e),t.render()};t.prototype.config={type:"default",min:0,max:100,value:0,step:1,showstep:!1,tips:!0,tipsAlways:!1,input:!1,range:!1,height:200,disabled:!1,theme:"#16baaa"},t.prototype.precision=function(){var e=this.config,e=x.map([e.min,e.max,e.step],function(e,t){e=String(e).split(".");return e[1]?e[1].length:0});return Math.max.apply(null,e)},t.prototype.render=function(){var n=this,a=n.config,e=x(a.elem);if(1a.max&&(a.value=a.max),l=(a.value-a.min)/(a.max-a.min)*100+"%");var t,e=a.disabled?"#c2c2c2":a.theme,i='
      '+(a.tips?'
      ":"")+'
      '+(a.range?'
      ':"")+"
      ",l=x(a.elem),s=l.next(".layui-slider");if(s[0]&&s.remove(),n.elemTemp=x(i),a.range?(n.elemTemp.find("."+w).eq(0).data("value",a.value[0]),n.elemTemp.find("."+w).eq(1).data("value",a.value[1])):n.elemTemp.find("."+w).data("value",a.value),l.html(n.elemTemp),"vertical"===a.type&&n.elemTemp.height(a.height+"px"),a.showstep){for(var o=(a.max-a.min)/a.step,r="",u=1;u<1+o;u++){var c=100*u/o;c<100&&(r+='
      ')}n.elemTemp.append(r)}function d(e){e=e.parent().data("value"),e=a.setTips?a.setTips(e):e;n.elemTemp.find("."+L).html(e)}function p(e){var t="vertical"===a.type?a.height:n.elemTemp[0].offsetWidth,i=n.elemTemp.find("."+w);return("vertical"===a.type?t-e.parent()[0].offsetTop-i.height():e.parent()[0].offsetLeft)/t*100}function v(e){"vertical"===a.type?n.elemTemp.find("."+L).css({bottom:e+"%","margin-bottom":"20px",display:"inline-block"}):n.elemTemp.find("."+L).css({left:e+"%",display:"inline-block"})}a.input&&!a.range&&(e=x('
      '),l.css("position","relative"),l.append(e),l.find("."+E).children("input").val(a.value),"vertical"===a.type?e.css({left:0,top:-48}):n.elemTemp.css("margin-right",e.outerWidth()+15)),a.disabled?(n.elemTemp.addClass(f),n.elemTemp.find("."+M).addClass(f)):n.slide(),a.tips&&(a.tipsAlways?(d(s=n.elemTemp.find("."+M)),v(p(s))):n.elemTemp.find("."+M).on("mouseover",function(){d(x(this));var e=p(x(this));clearTimeout(t),t=setTimeout(function(){v(e)},300)}).on("mouseout",function(){clearTimeout(t),a.tipsAlways||n.elemTemp.find("."+L).css("display","none")}))},t.prototype.slide=function(e,t,i){var u=this,c=u.config,d=u.elemTemp,p=function(){return"vertical"===c.type?c.height:d[0].offsetWidth},v=d.find("."+w),o=d.next(".layui-slider-input"),r=o.children("."+E).children("input").val(),m=100/((c.max-c.min)/c.step),f=u.precision(),h=function(e,t,i){e=(e=100<(e=100n[1]&&n.reverse(),u.value=c.range?n:l,c.change&&c.change(u.value),"done"===i&&c.done&&c.done(u.value)},y=function(e){var t=e/p()*100/m,i=Math.round(t)*m;return i=e==p()?Math.ceil(t)*m:i},g=x(['
      p()?p():t)/p()*100/m;h(t,o),r.addClass(Y),d.find("."+L).show(),e.preventDefault()},n=function(e){r.removeClass(Y),c.tipsAlways||setTimeout(function(){d.find("."+L).hide()},e)},a=function(){n&&n(b.touchEventsSupported()?1e3:0),g.remove(),c.done&&c.done(u.value),b.touchEventsSupported()&&(t[0].removeEventListener("touchmove",i,!!b.passiveSupported&&{passive:!1}),t[0].removeEventListener("touchend",a),t[0].removeEventListener("touchcancel",a))},x("#LAY-slider-moving")[0]||x("body").append(g),g.on("mousemove",i),g.on("mouseup",a).on("mouseleave",a),b.touchEventsSupported()&&(t[0].addEventListener("touchmove",i,!!b.passiveSupported&&{passive:!1}),t[0].addEventListener("touchend",a),t[0].addEventListener("touchcancel",a))})}),d.on("click",function(e){var t=x("."+M),i=x(this);!t.is(event.target)&&0===t.has(event.target).length&&t.length&&(i=(t=(t=(t="vertical"===c.type?p()-e.clientY+i.offset().top-x(window).scrollTop():e.clientX-i.offset().left-x(window).scrollLeft())<0?0:t)>p()?p():t)/p()*100/m,t=c.range?"vertical"===c.type?Math.abs(t-parseInt(x(v[0]).css("bottom")))>Math.abs(t-parseInt(x(v[1]).css("bottom")))?1:0:Math.abs(t-v[0].offsetLeft)>Math.abs(t-v[1].offsetLeft)?1:0:0,h(i,t,"done"),e.preventDefault())}),o.children(".layui-slider-input-btn").children("i").each(function(t){x(this).on("click",function(){r=o.children("."+E).children("input").val();var e=((r=1==t?r-c.stepc.max?c.max:Number(r)+c.step)-c.min)/(c.max-c.min)*100/m;h(e,0,"done")})});var n=function(){var e=this.value,e=(e=(e=(e=isNaN(e)?0:e)c.max?c.max:e,((this.value=e)-c.min)/(c.max-c.min)*100/m);h(e,0,"done")};o.children("."+E).children("input").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),n.call(this))}).on("change",n)},t.prototype.events=function(){this.config},m.render=function(e){e=new t(e);return function(){var i=this,n=i.config;return{setValue:function(e,t){return e=(e=e>n.max?n.max:e)',"",'','',"","","
      "].join("")),t=i.elem=x(i.elem);i.size&&o.addClass("layui-colorpicker-"+i.size),t.addClass("layui-inline").html(e.elemColorBox=o),i.id="id"in i?i.id:t.attr("id")||e.index,e.color=e.elemColorBox.find("."+T)[0].style.background,e.events()},s.prototype.renderPicker=function(){var o,e=this,i=e.config,t=e.elemColorBox[0],n=e.elemPicker=x(['
      ','
      ','
      ','
      ','
      ','
      ',"
      ",'
      ','
      ',"
      ","
      ",'
      ','
      ','
      ',"
      ","
      ",i.predefine?(o=['
      '],layui.each(i.colors,function(e,i){o.push(['
      ','
      ',"
      "].join(""))}),o.push("
      "),o.join("")):"",'
      ','
      ','',"
      ",'
      ','','',"","
      "].join(""));e.elemColorBox.find("."+T)[0];x(c)[0]&&x(c).data("index")==e.index?e.removePicker(s.thisElemInd):(e.removePicker(s.thisElemInd),x("body").append(n)),r.thisId=i.id,s.thisElemInd=e.index,s.thisColor=t.style.background,e.position(),e.pickerEvents()},s.prototype.removePicker=function(e){var i=this.config,e=x("#layui-colorpicker"+(e||this.index));return e[0]&&(e.remove(),delete r.thisId,"function"==typeof i.close)&&i.close(this.color),this},s.prototype.position=function(){var e=this,i=e.config;return P.position(e.bindElem||e.elemColorBox[0],e.elemPicker[0],{position:i.position,align:"center"}),e},s.prototype.val=function(){var e,i=this,o=(i.config,i.elemColorBox.find("."+T)),t=i.elemPicker.find("."+X),n=o[0].style.backgroundColor;n?(e=j(L(n)),o=o.attr("lay-type"),i.select(e.h,e.s,e.b),"torgb"===o?t.find("input").val(n):"rgba"===o?(o=L(n),3===(n.match(/[0-9]{1,3}/g)||[]).length?(t.find("input").val("rgba("+o.r+", "+o.g+", "+o.b+", 1)"),i.elemPicker.find("."+Y).css("left",280)):(t.find("input").val(n),n=280*n.slice(n.lastIndexOf(",")+1,n.length-1),i.elemPicker.find("."+Y).css("left",n)),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+"))"):t.find("input").val("#"+H(e))):(i.select(0,100,100),t.find("input").val(""),i.elemPicker.find("."+D)[0].style.background="",i.elemPicker.find("."+Y).css("left",280))},s.prototype.side=function(){var r=this,l=r.config,c=r.elemColorBox.find("."+T),a=c.attr("lay-type"),s=r.elemPicker.find(".layui-colorpicker-side"),o=r.elemPicker.find("."+I),d=r.elemPicker.find("."+E),t=r.elemPicker.find("."+M),u=r.elemPicker.find("."+D),f=r.elemPicker.find("."+Y),p=o[0].offsetTop/180*360,h=100-(t[0].offsetTop+3)/180*100,g=(t[0].offsetLeft+3)/260*100,v=Math.round(f[0].offsetLeft/280*100)/100,m=r.elemColorBox.find("."+B),e=r.elemPicker.find(".layui-colorpicker-pre").children("div"),y=function(e,i,o,t){r.select(e,i,o);var n=F({h:e,s:i,b:o}),e=H({h:e,s:i,b:o}),i=r.elemPicker.find("."+X).find("input");m.addClass(C).removeClass(w),c[0].style.background="rgb("+n.r+", "+n.g+", "+n.b+")","torgb"===a?i.val("rgb("+n.r+", "+n.g+", "+n.b+")"):"rgba"===a?(f.css("left",280*t),i.val("rgba("+n.r+", "+n.g+", "+n.b+", "+t+")"),c[0].style.background="rgba("+n.r+", "+n.g+", "+n.b+", "+t+")",u[0].style.background="linear-gradient(to right, rgba("+n.r+", "+n.g+", "+n.b+", 0), rgb("+n.r+", "+n.g+", "+n.b+"))"):i.val("#"+e),l.change&&l.change(x.trim(r.elemPicker.find("."+X).find("input").val()))},i=x(['
      '].join("")),b=function(e){x("#LAY-colorpicker-moving")[0]||x("body").append(i),i.on("mousemove",e),i.on("mouseup",function(){i.remove()}).on("mouseleave",function(){i.remove()})},n=!0,k=!0;o.on("mousedown",function(e,i){var t=this.offsetTop,n=(e.clientY===undefined?i:e).clientY;k&&layui.stope(e),b(function(e){var i=t+(e.clientY-n),o=s[0].offsetHeight,o=(i=o<(i=i<0?0:i)?o:i)/180*360;y(p=o,g,h,v),e.preventDefault()}),e.preventDefault()}),s.on("mousedown",function(e){var i=e.clientY-x(this).offset().top+W.scrollTop(),i=(i=(i=i<0?0:i)>this.offsetHeight?this.offsetHeight:i)/180*360;y(p=i,g,h,v),e.preventDefault(),n&&o.trigger("mousedown",e)}),t.on("mousedown",function(e,i){var r=this.offsetTop,l=this.offsetLeft,c=(e.clientY===undefined?i:e).clientY,a=(e.clientX===undefined?i:e).clientX;k&&layui.stope(e),b(function(e){var i=r+(e.clientY-c),o=l+(e.clientX-a),t=d[0].offsetHeight,n=d[0].offsetWidth,n=(o=n<(o=o<0?0:o)?n:o)/260*100,o=100-(i=t<(i=i<0?0:i)?t:i)/180*100;y(p,g=n,h=o,v),e.preventDefault()}),e.preventDefault()}),d.on("mousedown",function(e){var i=e.clientY-x(this).offset().top+W.scrollTop(),o=e.clientX-x(this).offset().left+W.scrollLeft(),o=((i=i<0?0:i)>this.offsetHeight&&(i=this.offsetHeight),(o=(o=o<0?0:o)>this.offsetWidth?this.offsetWidth:o)/260*100),i=100-i/180*100;y(p,g=o,h=i,v),layui.stope(e),e.preventDefault(),n&&t.trigger("mousedown",e)}),f.on("mousedown",function(e,i){var t=this.offsetLeft,n=(e.clientX===undefined?i:e).clientX;k&&layui.stope(e),b(function(e){var i=t+(e.clientX-n),o=u[0].offsetWidth,o=(o<(i=i<0?0:i)&&(i=o),Math.round(i/280*100)/100);y(p,g,h,v=o),e.preventDefault()}),e.preventDefault()}),u.on("mousedown",function(e){var i=e.clientX-x(this).offset().left,i=((i=i<0?0:i)>this.offsetWidth&&(i=this.offsetWidth),Math.round(i/280*100)/100);y(p,g,h,v=i),e.preventDefault(),n&&f.trigger("mousedown",e)}),e.each(function(){x(this).on("click",function(){x(this).parent(".layui-colorpicker-pre").addClass("selected").siblings().removeClass("selected");var e=this.style.backgroundColor,i=j(L(e)),o=e.slice(e.lastIndexOf(",")+1,e.length-1);p=i.h,g=i.s,h=i.b,3===(e.match(/[0-9]{1,3}/g)||[]).length&&(o=1),v=o,y(i.h,i.s,i.b,o)})}),P.touchEventsSupported()&&layui.each([{elem:s,eventType:"mousedown"},{elem:u,eventType:"mousedown"},{elem:d,eventType:"mousedown"}],function(e,t){P.touchSwipe(t.elem,{onTouchStart:function(){k=n=!1},onTouchMove:function(e){var i,o;e=e,i=t.eventType,e=e.touches[0],(o=document.createEvent("MouseEvent")).initMouseEvent(i,!0,!0,window,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(o)},onTouchEnd:function(){i.remove(),k=n=!0}})})},s.prototype.select=function(e,i,o,t){this.config;var n=H({h:e,s:100,b:100}),e=(H({h:e,s:i,b:o}),e/360*180),o=180-o/100*180,i=i/100*260,r=this.elemPicker.find("."+E)[0];this.elemPicker.find("."+I).css("top",e),r.style.background="#"+n,this.elemPicker.find("."+M).css({top:o/r.offsetHeight*100+"%",left:i/r.offsetWidth*100+"%"})},s.prototype.pickerEvents=function(){var c=this,a=c.config,s=c.elemColorBox.find("."+T),d=c.elemPicker.find("."+X+" input"),o={clear:function(e){s[0].style.background="",c.elemColorBox.find("."+B).removeClass(C).addClass(w),c.color="",a.done&&a.done(""),c.removePicker()},confirm:function(e,i){var o,t,n,r,l=x.trim(d.val());-1>16,g:(65280&n)>>8,b:255&n},t=j(r),s[0].style.background=o="#"+H(t),c.elemColorBox.find("."+B).removeClass(w).addClass(C)),"change"===i?(c.select(t.h,t.s,t.b,i),a.change&&a.change(o)):(c.color=l,a.done&&a.done(l),c.removePicker())}};c.elemPicker.on("click","*[colorpicker-events]",function(){var e=x(this),i=e.attr("colorpicker-events");o[i]&&o[i].call(this,e)}),d.on("keyup",function(e){var i=x(this);o.confirm.call(this,i,13===e.keyCode?null:"change")})},s.prototype.events=function(){var e=this;e.config;e.elemColorBox.on("click",function(){e.renderPicker(),x(c)[0]&&(e.val(),e.side())})},a.on(i,function(e){var i,o,t;r.thisId&&(i=n.getThis(r.thisId))&&(o=i.config,t=i.elemColorBox.find("."+T),x(e.target).hasClass(l)||x(e.target).parents("."+l)[0]||x(e.target).hasClass(c.replace(/\./g,""))||x(e.target).parents(c)[0]||i.elemPicker&&(i.color?(e=j(L(i.color)),i.select(e.h,e.s,e.b)):i.elemColorBox.find("."+B).removeClass(C).addClass(w),t[0].style.background=i.color||"","function"==typeof o.cancel&&o.cancel(i.color),i.removePicker()))}),W.on("resize",function(){if(r.thisId){var e=n.getThis(r.thisId);if(e)return!(!e.elemPicker||!x(c)[0])&&void e.position()}}),n.that={},n.getThis=function(e){var i=n.that[e];return i||o.error(e?t+" instance with ID '"+e+"' not found":"ID argument required"),i},r.render=function(e){e=new s(e);return n.call(e)},e(t,r)});layui.define("jquery",function(t){"use strict";var u=layui.$,d=(layui.hint(),layui.device()),r="element",y="layui-this",f="layui-show",o=".layui-tab-title",i=function(){this.config={}},h=(i.prototype.set=function(t){return u.extend(!0,this.config,t),this},i.prototype.on=function(t,i){return layui.onevent.call(this,r,t,i)},i.prototype.tabAdd=function(t,i){var a,e=u(".layui-tab[lay-filter="+t+"]"),l=e.children(o),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),w.tabAuto(i.change?"change":null),this},i.prototype.tabDelete=function(t,i){t=u(".layui-tab[lay-filter="+t+"]").children(o).find('>li[lay-id="'+i+'"]');return w.tabDelete(null,t),this},i.prototype.tabChange=function(t,i,a){t=u(".layui-tab[lay-filter="+t+"]").children(o).find('>li[lay-id="'+i+'"]');return w.tabClick.call(t[0],{liElem:t,force:a}),this},i.prototype.tab=function(a){a=a||{},e.on("click",a.headerElem,function(t){var i=u(a.headerElem).index(u(this));w.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"),p="layui-nav-item",b="layui-nav-bar",v="layui-nav-tree",m="layui-nav-child",g="layui-nav-more",C="layui-anim layui-anim-upbit",w={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"),o=a.attr("lay-id"),c="index"in t?t.index:a.parent().children("li").index(a);if(!t.force){var t=a.siblings("."+y);if(!1===layui.event.call(this,r,"tabBeforeChange("+s+")",{elem:e,from:{index:a.parent().children("li").index(t),id:t.attr("lay-id")},to:{index:c,id:o}}))return}l||n||(a.addClass(y).siblings().removeClass(y),(o?t=(t=i.filter('[lay-id="'+o+'"]')).length?t:i.eq(c):i.eq(c)).addClass(f).siblings().removeClass(f)),layui.event.call(this,r,"tab("+s+")",{elem:e,index:c,id:o})},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"),s=i.attr("lay-id");!1!==layui.event.call(i[0],r,"tabBeforeDelete("+n+")",{elem:e,index:a,id:s})&&(i.hasClass(y)&&(i.next()[0]&&i.next().is("li")?w.tabClick.call(i.next()[0],{index:a+1}):i.prev()[0]&&i.prev().is("li")&&w.tabClick.call(i.prev()[0],null,a-1)),i.remove(),(s?i=(i=l.filter('[lay-id="'+s+'"]')).length?i:l.eq(a):l.eq(a)).remove(),setTimeout(function(){w.tabAuto()},50),layui.event.call(this,r,"tabDelete("+n+")",{elem:e,index:a,id:s}))},tabAuto:function(l,t){var n="layui-tab-more",s="layui-tab-bar",o="layui-tab-close",c=this;(t||u(".layui-tab")).each(function(){var t=u(this),a=t.children(".layui-tab-title"),i=(t.children(".layui-tab-content").children(".layui-tab-item"),'lay-stope="tabmore"'),i=u(''),e=(c===window&&d.ie,t.attr("lay-allowclose"));e&&"false"!==e&&a.find("li").each(function(){var t,i=u(this);i.find("."+o)[0]||"false"===i.attr("lay-allowclose")||((t=u('')).on("click",w.tabDelete),i.append(t))}),"string"!=typeof t.attr("lay-unauto")&&(a.prop("scrollWidth")>a.outerWidth()+1||a.find("li").length&&a.height()>(e=a.find("li").eq(0).height())+e/2?("change"===l&&a.data("LAY_TAB_CHANGE")&&a.addClass(n),a.find("."+s)[0]||(a.append(i),t.attr("overflow",""),i.on("click",function(t){var i=a.hasClass(n);a[i?"removeClass":"addClass"](n)}))):(a.find("."+s).remove(),t.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.closest(h),a=i.attr("lay-filter"),e=t.parent(),l=t.siblings("."+m),n="string"==typeof e.attr("lay-unselect");if("javascript:;"!==t.attr("href")&&"_blank"===t.attr("target")||n||l[0]||(i.find("."+y).removeClass(y),e.addClass(y)),i.hasClass(v)){var n=p+"ed",s=!e.hasClass(n),o=function(){u(this).css({display:""}),i.children("."+b).css({opacity:0})};if(l.is(":animated"))return;l.removeClass(C),l[0]&&(s?(l.slideDown(200,o),e.addClass(n)):(e.removeClass(n),l.show().slideUp(200,o)),"string"!=typeof i.attr("lay-accordion")&&"all"!==i.attr("lay-shrink")||((s=e.siblings("."+n)).removeClass(n),s.children("."+m).show().stop().slideUp(200,o)))}layui.event.call(this,r,"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("."+f)).siblings(".layui-colla-title").children(".layui-colla-icon").html(""),e.removeClass(f)),a[n?"addClass":"removeClass"](f),i.html(n?"":""),layui.event.call(this,r,"collapse("+l+")",{title:t,content:a,show:n})}},a=(i.prototype.render=i.prototype.init=function(t,i){var a="string"==typeof i&&i?'[lay-filter="'+i+'"]':"",e={tab:function(t){w.tabAuto.call({},t)},nav:function(t){var s={},o={},c={},r="layui-nav-title";(t||u(h+a)).each(function(t){var i=u(this),a=u(''),e=i.find("."+p),l=i.find("."+b)[0];l&&l.remove(),i.append(a),(i.hasClass(v)?e.find("dd,>."+r):e).off("mouseenter.lay_nav").on("mouseenter.lay_nav",function(){!function(t,i,a){var e,l=u(this),n=l.find("."+m);i.hasClass(v)?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(C),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(f),l.find("."+g).addClass(g+"d")},300))}.call(this,a,i,t)}).off("mouseleave.lay_nav").on("mouseleave.lay_nav",function(){i.hasClass(v)?a.css({height:0,opacity:0}):(clearTimeout(o[t]),o[t]=setTimeout(function(){i.find("."+m).removeClass(f),i.find("."+g).removeClass(g+"d")},300))}),i.off("mouseleave.lay_nav").on("mouseleave.lay_nav",function(){clearTimeout(s[t]),c[t]=setTimeout(function(){i.hasClass(v)||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("."+m)[0]&&!t.children("."+g)[0]&&t.append(''),t.off("click",w.clickThis).on("click",w.clickThis)})})},breadcrumb:function(t){(t||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(t){var e="layui-progress";(t||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(t){(t||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",w.collapse).on("click",w.collapse)})})}};return t&&"object"==typeof i&&i instanceof u?e[t](i):e[t]?e[t]():layui.each(e,function(t,i){i()})},new i),e=u(document);u(function(){a.render()}),e.on("click",".layui-tab-title li",w.tabClick),u(window).on("resize",w.tabAuto),t(r,a)});layui.define(["lay","layer"],function(e){"use strict";var F=layui.$,a=layui.lay,t=layui.layer,R=layui.device(),i="upload",s="layui_"+i+"_index",w={config:{},index:layui[i]?layui[i].index+1e4:0,set:function(e){var t=this;return t.config=F.extend({},t.config,e),t},on:function(e,t){return layui.onevent.call(this,i,e,t)}},o=function(){var t=this,e=t.config.id;return{upload:function(e){t.upload.call(t,e)},reload:function(e){t.reload.call(t,e)},config:(o.that[e]=t).config}},r="layui-upload-file",l="layui-upload-form",E="layui-upload-iframe",L="layui-upload-choose",T="UPLOADING",D=function(e){var t=this;t.index=++w.index,t.config=F.extend({},t.config,w.config,e),t.render()};D.prototype.config={accept:"images",exts:"",auto:!0,bindAction:"",url:"",force:"",field:"file",acceptMime:"",method:"post",data:{},drag:!0,size:0,number:0,multiple:!1,text:{"cross-domain":"Cross-domain requests are not supported","data-format-error":"Please return JSON data format","check-error":"",error:"","limit-number":null,"limit-size":null}},D.prototype.reload=function(e){var t=this;t.config=F.extend({},t.config,e),t.render(!0)},D.prototype.render=function(e){var t=this,i=t.config,n=F(i.elem);return 1"].join("")),n=t.elem.next();(n.hasClass(r)||n.hasClass(l))&&n.remove(),R.ie&&R.ie<10&&t.elem.wrap('
      '),e.isFile()?(e.elemFile=t.elem,t.field=t.elem[0].name):t.elem.after(i),R.ie&&R.ie<10&&e.initIE()},D.prototype.initIE=function(){var i,e=this.config,t=F(''),n=F(['
      ',"
      "].join(""));F("#"+E)[0]||F("body").append(t),e.elem.next().hasClass(l)||(this.elemFile.wrap(n),e.elem.next("."+l).append((i=[],layui.each(e.data,function(e,t){t="function"==typeof t?t():t,i.push('')}),i.join(""))))},D.prototype.msg=function(e){return t.msg(e,{icon:2,shift:6})},D.prototype.isFile=function(){var e=this.config.elem[0];if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type},D.prototype.preview=function(n){window.FileReader&&layui.each(this.chooseFiles,function(e,t){var i=new FileReader;i.readAsDataURL(t),i.onload=function(){n&&n(e,t,this.result)}})},D.prototype.upload=function(e,t){var i,n,a,o,r,u=this,f=u.config,s=f.text||{},l=u.elemFile[0],c=function(){return e||u.files||u.chooseFiles||l.files},d=function(){var a=0,o=0,r=c(),l=function(){f.multiple&&a+o===u.fileLength&&"function"==typeof f.allDone&&f.allDone({total:u.fileLength,successful:a,failed:o})},i=function(i){var n=new FormData,t=function(e){i.unified?layui.each(r,function(e,t){delete t[T]}):delete e[T]};if(layui.each(f.data,function(e,t){t="function"==typeof t?i.unified?t():t(i.index,i.file):t,n.append(e,t)}),i.unified)layui.each(r,function(e,t){t[T]||(t[T]=!0,n.append(f.field,t))});else{if(i.file[T])return;n.append(f.field,i.file),i.file[T]=!0}var e={url:f.url,type:"post",data:n,dataType:f.dataType||"json",contentType:!1,processData:!1,headers:f.headers||{},success:function(e){f.unified?a+=u.fileLength:a++,m(i.index,e),l(i.index),t(i.file)},error:function(e){f.unified?o+=u.fileLength:o++,u.msg(s.error||["Upload failed, please try again.","status: "+(e.status||"")+" - "+(e.statusText||"error")].join("
      ")),g(i.index,e.responseText,e),l(i.index),t(i.file)}};"function"==typeof f.progress&&(e.xhr=function(){var e=F.ajaxSettings.xhr();return e.upload.addEventListener("progress",function(e){var t;e.lengthComputable&&(t=Math.floor(e.loaded/e.total*100),f.progress(t,(f.item||f.elem)[0],e,i.index))}),e}),F.ajax(e)};f.unified?i({unified:!0,index:0}):layui.each(r,function(e,t){i({index:e,file:t})})},p=function(){var n=F("#"+E);u.elemFile.parent().submit(),clearInterval(D.timer),D.timer=setInterval(function(){var e,t=n.contents().find("body");try{e=t.text()}catch(i){u.msg(s["cross-domain"]),clearInterval(D.timer),g()}e&&(clearInterval(D.timer),t.html(""),m(0,e))},30)},h=function(e){if("json"===f.force&&"object"!=typeof e)try{return{status:"CONVERTED",data:JSON.parse(e)}}catch(t){return u.msg(s["data-format-error"]),{status:"FORMAT_ERROR",data:{}}}return{status:"DO_NOTHING",data:{}}},m=function(e,t){u.elemFile.next("."+L).remove(),l.value="";var i=h(t);switch(i.status){case"CONVERTED":t=i.data;break;case"FORMAT_ERROR":return}"function"==typeof f.done&&f.done(t,e||0,function(e){u.upload(e)})},g=function(e,t,i){f.auto&&(l.value="");var n=h(t);switch(n.status){case"CONVERTED":t=n.data;break;case"FORMAT_ERROR":return}"function"==typeof f.error&&f.error(e||0,function(e){u.upload(e)},t,i)},v=f.exts,y=(n=[],layui.each(e||u.chooseFiles,function(e,t){n.push(t.name)}),n),x={preview:function(e){u.preview(e)},upload:function(e,t){var i={};i[e]=t,u.upload(i)},pushFile:function(){return u.files=u.files||{},layui.each(u.chooseFiles,function(e,t){u.files[e]=t}),u.files},resetFile:function(e,t,i){t=new File([t],i);u.files=u.files||{},u.files[e]=t},getChooseFiles:function(){return u.chooseFiles}},b={file:"\u6587\u4ef6",images:"\u56fe\u7247",video:"\u89c6\u9891",audio:"\u97f3\u9891"}[f.accept]||"\u6587\u4ef6",y=0===y.length?l.value.match(/[^\/\\]+\..+/g)||[]:y;if(0!==y.length){switch(f.accept){case"file":layui.each(y,function(e,t){if(v&&!RegExp(".\\.("+v+")$","i").test(escape(t)))return i=!0});break;case"video":layui.each(y,function(e,t){if(!RegExp(".\\.("+(v||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(t)))return i=!0});break;case"audio":layui.each(y,function(e,t){if(!RegExp(".\\.("+(v||"mp3|wav|mid")+")$","i").test(escape(t)))return i=!0});break;default:layui.each(y,function(e,t){if(!RegExp(".\\.("+(v||"jpg|png|gif|bmp|jpeg|svg|webp")+")$","i").test(escape(t)))return i=!0})}if(i)return u.msg(s["check-error"]||"\u9009\u62e9\u7684"+b+"\u4e2d\u5305\u542b\u4e0d\u652f\u6301\u7684\u683c\u5f0f"),l.value="";if("choose"!==t&&!f.auto||(f.choose&&f.choose(x),"choose"!==t)){if(u.fileLength=(a=0,b=c(),layui.each(b,function(){a++}),a),f.number&&u.fileLength>f.number)return u.msg("function"==typeof s["limit-number"]?s["limit-number"](f,u.fileLength):"\u540c\u65f6\u6700\u591a\u53ea\u80fd\u4e0a\u4f20: "+f.number+" \u4e2a\u6587\u4ef6
      \u60a8\u5f53\u524d\u5df2\u7ecf\u9009\u62e9\u4e86: "+u.fileLength+" \u4e2a\u6587\u4ef6");if(01024*f.size&&(t=1<=(t=f.size/1024)?t.toFixed(2)+"MB":f.size+"KB",l.value="",o=t)}),o)return u.msg("function"==typeof s["limit-size"]?s["limit-size"](f,o):"\u6587\u4ef6\u5927\u5c0f\u4e0d\u80fd\u8d85\u8fc7 "+o);r=function(){if(R.ie)return(9'+e+"")},l=function(i){var n=!0;return layui.each(a.files,function(e,t){if(!(n=!(t.name===i.name)))return!0}),n},u=function(e){var i=function(e){e.ext=e.name.substr(e.name.lastIndexOf(".")+1).toLowerCase(),e.sizes=w.util.parseSize(e.size)};return e instanceof FileList?layui.each(e,function(e,t){i(t)}):i(e),e},f=function(e){var i;return(e=e||[]).length?a.files?(i=[],layui.each(e,function(e,t){l(t)&&i.push(u(t))}),i):u(e):[]};n.elem.off("upload.start").on("upload.start",function(){var e=F(this);a.config.item=e,a.elemFile[0].click()}),R.ie&&R.ie<10||n.elem.off("upload.over").on("upload.over",function(){F(this).attr("lay-over","")}).off("upload.leave").on("upload.leave",function(){F(this).removeAttr("lay-over")}).off("upload.drop").on("upload.drop",function(e,t){var i=F(this),t=f(t.originalEvent.dataTransfer.files);i.removeAttr("lay-over"),o(t),n.auto?a.upload():r(t)}),a.elemFile.on("change",function(){var e=f(this.files);0!==e.length&&(o(e),n.auto?a.upload():r(e))}),n.bindAction.off("upload.action").on("upload.action",function(){a.upload()}),n.elem.data(s)||(n.elem.on("click",function(){a.isFile()||F(this).trigger("upload.start")}),n.drag&&n.elem.on("dragover",function(e){e.preventDefault(),F(this).trigger("upload.over")}).on("dragleave",function(e){F(this).trigger("upload.leave")}).on("drop",function(e){e.preventDefault(),F(this).trigger("upload.drop",e)}),n.bindAction.on("click",function(){F(this).trigger("upload.action")}),n.elem.data(s,n.id))},w.util={parseSize:function(e,t){var i,n;return t=t||2,null!=e&&e?(i="string"==typeof e?parseFloat(e):e,n=Math.floor(Math.log(i)/Math.log(1024)),(e=(e=i/Math.pow(1024,n))%1==0?e:parseFloat(e.toFixed(t)))+["Bytes","Kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"][n]):"0"},promiseLikeResolve:function(e){var t=F.Deferred();return e&&"function"==typeof e.then?e.then(t.resolve,t.reject):t.resolve(e),t.promise()}},o.that={},o.getThis=function(e){var t=o.that[e];return t||hint.error(e?i+" instance with ID '"+e+"' not found":"ID argument required"),t},w.render=function(e){e=new D(e);return o.call(e)},e(i,w)});layui.define(["lay","layer","util"],function(e){"use strict";var T=layui.$,p=layui.layer,N=layui.util,l=layui.hint(),$=(layui.device(),"form"),d=".layui-form",A="layui-this",j="layui-hide",S="layui-disabled",t=function(){this.config={verify:{required:function(e){if(!/[\S]+/.test(e))return"\u5fc5\u586b\u9879\u4e0d\u80fd\u4e3a\u7a7a"},phone:function(e){if(e&&!/^1\d{10}$/.test(e))return"\u624b\u673a\u53f7\u683c\u5f0f\u4e0d\u6b63\u786e"},email:function(e){if(e&&!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(e))return"\u90ae\u7bb1\u683c\u5f0f\u4e0d\u6b63\u786e"},url:function(e){if(e&&!/^(#|(http(s?)):\/\/|\/\/)[^\s]+\.[^\s]+$/.test(e))return"\u94fe\u63a5\u683c\u5f0f\u4e0d\u6b63\u786e"},number:function(e){if(e&&isNaN(e))return"\u53ea\u80fd\u586b\u5199\u6570\u5b57"},date:function(e){if(e&&!/^(\d{4})[-\/](\d{1}|0\d{1}|1[0-2])([-\/](\d{1}|0\d{1}|[1-2][0-9]|3[0-1]))*$/.test(e))return"\u65e5\u671f\u683c\u5f0f\u4e0d\u6b63\u786e"},identity:function(e){if(e&&!/(^\d{15}$)|(^\d{17}(x|X|\d)$)/.test(e))return"\u8eab\u4efd\u8bc1\u53f7\u683c\u5f0f\u4e0d\u6b63\u786e"}},autocomplete:null}},i=(t.prototype.set=function(e){return T.extend(!0,this.config,e),this},t.prototype.verify=function(e){return T.extend(!0,this.config.verify,e),this},t.prototype.getFormElem=function(e){return T(d+(e?'[lay-filter="'+e+'"]':""))},t.prototype.on=function(e,t){return layui.onevent.call(this,$,e,t)},t.prototype.val=function(e,i){return this.getFormElem(e).each(function(e,t){var a=T(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;T(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 u=this,i=u.config,a=T(d+(t?'[lay-filter="'+t+'"]':"")),n={input:function(e){var e=e||a.find("input,textarea"),t=(i.autocomplete&&e.attr("autocomplete",i.autocomplete),function(e,t){var i=e.val(),a=Number(i),n=Number(e.attr("step"))||1,l=Number(e.attr("min")),r=Number(e.attr("max")),s=Number(e.attr("lay-precision")),o="click"!==t&&""===i,c="init"===t;isNaN(a)||("click"===t&&(a=!!T(this).index()?a-n:a+n),t=function(e){return((e.toString().match(/\.(\d+$)/)||[])[1]||"").length},s=0<=s?s:Math.max(t(n),t(i)),o||(c||r<=(a=a<=l?l:a)&&(a=r),0===s?a=parseInt(a):0'),e=layui.isArray(i.value)?i.value:[i.value],e=T((a=[],layui.each(e,function(e,t){a.push('')}),a.join(""))),n=(t.append(e),i.split&&t.addClass("layui-input-split"),i.className&&t.addClass(i.className),r.next("."+u)),l=(n[0]&&n.remove(),r.parent().hasClass(o)||r.wrap('
      '),r.next("."+c));l[0]?((n=l.find("."+u))[0]&&n.remove(),l.prepend(t),r.css("padding-right",function(){return(r.closest(".layui-input-group")[0]?0:l.outerWidth())+t.outerWidth()})):(t.addClass(c),r.after(t)),"auto"===i.show&&d(t,r.val()),"function"==typeof i.init&&i.init.call(this,r,i),r.on("input propertychange",function(){var e=this.value;"auto"===i.show&&d(t,e)}),r.on("blur",function(){"function"==typeof i.blur&&i.blur.call(this,r,i)}),e.on("click",function(){var e=r.attr("lay-filter");T(this).hasClass(S)||("function"==typeof i.click&&i.click.call(this,r,i),layui.event.call(this,$,"input-affix("+e+")",{elem:r[0],affix:s,options:i}))})},h={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(),d(T(this).parent(),null)},show:"auto",disabled:e},number:{value:["up","down"],split:!0,className:"layui-input-number",disabled:r.is("[disabled]"),init:function(e){t.call(this,e,"init")},click:function(e){t.call(this,e,"click")},blur:function(e){t.call(this,e,"blur")}}};n()})},select:function(e){var p="\u8bf7\u9009\u62e9",C="layui-form-select",w="layui-select-none",_="layui-select-create-option",f="layui-select-panel-elem-data",e=e||a.find("select"),y=function(n,e,t,i,u,a){var l,d,r,s,o,c,h,p,f,y=T(this),v=e,m=v.find("input"),g=n.find("dl"),b=(g.children("dd"),g.children("dt")),k=this.selectedIndex,x="";t||(d="cs"===y.attr("lay-search")?{caseSensitive:!0}:lay.options(y,{attr:"lay-search"}),r=y.attr("lay-append-to")||"body",s=y.attr("lay-append-position"),o=!(!lay.ie||"10"!==lay.ie&&"11"!==lay.ie||!m.attr("placeholder")),c=function(){a&&(n.appendTo(r).css({width:v.width()+"px"}),(e=function(){lay.position(v[0],n[0],{position:s,allowBottomOut:!0,offset:[0,5]})})(),T(window).on("resize.lay_select_resize",e));var e=n.offset().top+n.outerHeight()+5-O.scrollTop(),t=g.outerHeight(),i=g.children("dd");k=y[0].selectedIndex,v.parent().addClass(C+"ed"),i.removeClass(j),b.removeClass(j),i.removeClass(A),0<=k&&i.eq(k).addClass(A),e+t>O.height()&&t<=e&&n.addClass(C+"up"),p(),o&&g.off("mousedown.lay_select_ieph").on("mousedown.lay_select_ieph",function(){m[0].__ieph=!0,setTimeout(function(){m[0].__ieph=!1},60)}),l=lay.onClickOutside((a?n:g)[0],function(){h(),x&&m.val(x)},{ignore:v})},h=function(e){v.parent().removeClass(C+"ed "+C+"up"),m.blur(),u&&g.children("."+_).remove(),l&&l(),a&&(n.detach(),T(window).off("resize.lay_select_resize")),e||f(m.val(),function(e){var t=y[0].selectedIndex;e&&(x=T(y[0].options[t]).html(),0===t&&x===m.attr("placeholder")&&(x=""),m.val(x||""))})},p=function(){var e,t,i=g.children("dd."+A);i[0]&&(e=i.position().top,t=g.height(),i=i.height(),t").addClass(_).attr("lay-value",n).html(N.escape(n)),a=(i=g.children().eq(0)).hasClass("layui-select-tips"),i[a?"after":"before"](t)):e?g.find("."+w)[0]||g.append('

      \u65e0\u5339\u914d\u9879

      '):g.find("."+w).remove()},"keyup"),""===n&&(y.val(""),g.find("."+A).removeClass(A),(y[0].options[0]||{}).value||g.children("dd:eq(0)").addClass(A),g.find("."+w).remove(),u)&&g.children("."+_).remove(),void p()))},50)).on("blur",function(e){var t=y[0].selectedIndex;x=T(y[0].options[t]).text(),0===t&&x===m.attr("placeholder")&&(x=""),setTimeout(function(){f(m.val(),function(e){x||m.val("")},"blur")},200)}),g.on("click","dd",function(){var e,t=T(this),i=t.attr("lay-value"),a=y.attr("lay-filter");return t.hasClass(S)||(t.hasClass("layui-select-tips")?m.val(""):(m.val(t.text()),t.addClass(A)),u&&t.hasClass(_)&&(g.append(t.removeClass(_)),e=T("
      "].join(""));i.after(l),function(t,i){var a=T(this),e=a.attr("lay-skin")||"primary",n="switch"===e,e="primary"===e;t.on("click",function(){var e=a.attr("lay-filter");a[0].disabled||(a[0].indeterminate&&(a[0].indeterminate=!1),a[0].checked=!a[0].checked,layui.event.call(a[0],$,i[2]+"("+e+")",{elem:a[0],value:a[0].value,othis:t}))}),u.syncAppearanceOnPropChanged(this,"checked",function(){var e;n&&(e=(t.next("*[lay-checkbox]")[0]?t.next().html():a.attr("title")||"").split("|"),t.children("div").html(!this.checked&&e[1]||e[0])),t.toggleClass(i[1],this.checked)}),e&&u.syncAppearanceOnPropChanged(this,"indeterminate",function(){this.indeterminate?t.children(".layui-icon-ok").removeClass("layui-icon-ok").addClass(c.SUBTRA):t.children("."+c.SUBTRA).removeClass(c.SUBTRA).addClass("layui-icon-ok")})}.call(this,l,r)})},radio:function(e){var o="layui-form-radio",c=["layui-icon-radio","layui-icon-circle"],e=e||a.find("input[type=radio]");e.each(function(e,t){var i=T(this),a=i.next("."+o),n=this.disabled,l=i.attr("lay-skin");if("string"==typeof i.attr("lay-ignore"))return i.show();a[0]&&a.remove();var a=N.escape(t.title||""),r=[],s=(i.next("[lay-radio]")[0]&&(a=(s=i.next()).html()||"",1",'',"
      "+a+"
      ","
      "].join("")));i.after(s),function(i){var a=T(this),n="layui-anim-scaleSpring";i.on("click",function(){var e=a.attr("lay-filter");a[0].disabled||(a[0].checked=!0,layui.event.call(a[0],$,"radio("+e+")",{elem:a[0],value:a[0].value,othis:i}))}),u.syncAppearanceOnPropChanged(this,"checked",function(){var e,t=this;t.checked?(i.addClass(o+"ed"),i.children(".layui-icon").addClass(n+" "+c[0]),e=a.parents(d).find("input[name="+t.name.replace(/(\.|#|\[|\])/g,"\\$1")+"]"),layui.each(e,function(){t!==this&&(this.checked=!1)})):(i.removeClass(o+"ed"),i.children(".layui-icon").removeClass(n+" "+c[0]).addClass(c[1]))})}.call(this,s)})}},t=function(){layui.each(n,function(e,t){t()})};return"object"===layui.type(e)?T(e).is(d)?(a=T(e),t()):e.each(function(e,t){var i=T(t);i.closest(d).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(),u},t.prototype.syncAppearanceOnPropChanged=function(e,t,i){var a=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,t);Object.defineProperty(e,t,lay.extend({},a,{get:function(){return a.get.call(this)},set:function(e){a.set.call(this,e),i.call(this)}}))},t.prototype.validate=function(e){var u,d=this.config.verify,h="layui-form-danger";return!(e=T(e))[0]||(e.attr("lay-verify")!==undefined||!1!==this.validate(e.find("*[lay-verify]")))&&(layui.each(e,function(e,r){var s=T(this),t=(s.attr("lay-verify")||"").split("|"),o=s.attr("lay-vertype"),c=T.trim(s.val());if(s.removeClass(h),layui.each(t,function(e,t){var i="",a=d[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)return"tips"===o?p.tips(i,"string"!=typeof s.attr("lay-ignore")&&l?s.next():s,{tips:1}):"alert"===o?p.alert(i,{title:"\u63d0\u793a",shadeClose:!0}):/\b(string|number)\b/.test(typeof i)&&p.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={},a=T(this),e="string"==typeof e?e:a.attr("lay-filter"),n=this.getFormElem?this.getFormElem(e):a.parents(d).eq(0),l=n.find("*[lay-verify]");return!!r.validate(l)&&(i=r.getValue(null,n),l={elem:this.getFormElem?window.event&&window.event.target:this,form:(this.getFormElem?n:a.parents("form"))[0],field:i},"function"==typeof t&&t(l),layui.event.call(this,$,"submit("+e+")",l))});var r=new t,t=T(document),O=T(window);T(function(){r.render()}),t.on("reset",d,function(){var e=T(this).attr("lay-filter");setTimeout(function(){r.render(null,e)},50)}),t.on("submit",d,i).on("click","*[lay-submit]",i),e($,r)});layui.define(["lay","laytpl","laypage","form","util"],function(c){"use strict";var f=layui.$,s=layui.lay,m=layui.laytpl,z=layui.laypage,p=layui.layer,i=layui.form,g=layui.util,v=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){return this.config=f.extend({},this.config,e),this},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)}}},w=function(e){var t=k.that[e];return t||v.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||v.error(e?"The table instance with ID '"+e+"' not found":"ID argument required"),t||null},C=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(function(e){try{return s(e).html()}catch(t){return e}}(t)||String(i)).render(f.extend({LAY_COL:a},e.tplData))),e.text?f("
      "+i+"
      ").text():i},T="table",R="lay-"+T+"-id",t=".layui-table",N="layui-hide",y="layui-hide-v",h="layui-none",W="layui-table-view",o=".layui-table-header",D=".layui-table-body",P=".layui-table-fixed-r",O=".layui-table-pageview",L=".layui-table-sort",E="layui-table-checked",A="layui-table-edit",F="layui-table-hover",u="laytable-cell-group",M="layui-table-col-special",_="layui-table-tool-panel",S="layui-table-expanded",I="layui-table-disabled-transition",H="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(""),B=[,"{{# if(d.data.toolbar){ }}",'
      ','
      ','
      ',"
      ","{{# } }}",'
      ',"{{# if(d.data.loading){ }}",'
      ','
      ','{{# if(typeof d.data.loading === "string"){ }}',"{{- d.data.loading}}","{{# } else{ }}",'',"{{# } }}","
      ","
      ","{{# } }}","{{# var left, right; }}",'
      ',e(),"
      ",'
      ',a,"
      ","{{# if(left){ }}",'
      ','
      ',e({fixed:!0}),"
      ",'
      ',a,"
      ","
      ","{{# }; }}","{{# if(right){ }}",'
      ','
      ',e({fixed:"right"}),'
      ',"
      ",'
      ',a,"
      ","
      ","{{# }; }}","
      ","{{# if(d.data.totalRow){ }}",'
      ','','',"
      ","
      ","{{# } }}",'
      ','
      ',"
      "].join(""),d=f(window),j=f(document),n=function(e){this.index=++x.index,this.config=f.extend({},this.config,x.config,e),this.render()},r=(n.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:[]},n.prototype.render=function(e){var t=this,a=t.config,i=(a.elem=f(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=f.extend({pageName:"page",limitName:"limit"},a.request),a.response=f.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-.+$/.test(a.height)?(t.fullHeightGap=a.height.split("-")[1],a.height=d.height()-(parseFloat(t.fullHeightGap)||0)):a.height&&/^#\w+\S*-.+$/.test(a.height)?(i=a.height.split("-"),t.parentHeightGap=i.pop(),t.parentDiv=i.join("-"),a.height=f(t.parentDiv).height()-(parseFloat(t.parentHeightGap)||0)):"function"==typeof a.height&&(t.customHeightFunc=a.height,a.height=t.customHeightFunc());var l,e=a.elem,i=e.next("."+W),n=t.elem=f("
      ");n.addClass((l=[W,W+"-"+t.index,"layui-form","layui-border-box"],a.className&&l.push(a.className),l.join(" "))).attr(((l={"lay-filter":"LAY-TABLE-FORM-DF-"+t.index,style:(l=[],a.width&&l.push("width:"+a.width+"px;"),l.join(""))})[R]=a.id,l)).html(m(B,{open:"{{",close:"}}"}).render({data:a,index:t.index})),t.renderStyle(),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(P),t.layTotal=n.find(".layui-table-total"),t.layPage=n.find(".layui-table-page"),t.renderToolbar(),t.renderPagebar(),t.fullSize(),t.setColsWidth(),t.pullData(t.page),t.events()},n.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])},n.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(),a=window.getComputedStyle?"border-box"!==(a=d.getElementSize(e[0])).boxSizing||s.ie?a.width:a.width-a.paddingLeft-a.paddingRight-a.borderLeftWidth-a.borderRightWidth:e.width();try{t="none"===e.css("display")}catch(i){}return!e[0]||s.isTopElem(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(W)&&(a=r.css.split("}"),layui.each(a,function(e,t){t&&(a[e]="."+W+"-"+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)) td:hover > .layui-table-cell{overflow: auto;}"].concat(b.ie?[".layui-table-edit{height: "+i+";}","td[data-edit]:hover:after{height: "+i+";}"]:[]),function(e,t){t&&o.push(a+" "+t)})),l.css&&o.push(l.css),s.style({target:this.elem[0],text:o.join(""),id:"DF-table-"+n})},n.prototype.renderToolbar=function(){var l,o=this,e=o.config,d=e.elem.attr("lay-filter"),t=['
      ','
      ','
      '].join(""),a=o.layTool.find(".layui-table-tool-temp"),n=("default"===e.toolbar?a.html(t):"string"==typeof e.toolbar&&(t=f(e.toolbar).html()||"")&&a.html(m(t).render(e)),{filter:{title:"\u7b5b\u9009\u5217",layEvent:"LAYTABLE_COLS",icon:"layui-icon-cols",onClick:function(e){var a,n=e.config;(0,e.openPanel)({list:(a=[],o.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(){i.on("checkbox(LAY_TABLE_TOOL_COLS)",function(e){var e=f(e.elem),t=this.checked,a=e.data("key"),i=o.col(a),l=i.hide,e=e.data("parentkey");i.key&&(i.hide=!t,o.elem.find('*[data-key="'+a+'"]')[t?"removeClass":"addClass"](N),l!=i.hide&&o.setParentCol(!t,e),o.resize(),layui.event.call(this,T,"colToggled("+d+")",{col:i,config:n}))})}})}},exports:{title:"\u5bfc\u51fa",layEvent:"LAYTABLE_EXPORT",icon:"layui-icon-export",onClick:function(e){var t=e.data,a=e.config,i=e.openPanel,e=e.elem;if(!t.length)return p.tips("\u5f53\u524d\u8868\u683c\u65e0\u6570\u636e",e,{tips:3});b.ie?p.tips("\u5bfc\u51fa\u529f\u80fd\u4e0d\u652f\u6301 IE\uff0c\u8bf7\u7528 Chrome \u7b49\u9ad8\u7ea7\u6d4f\u89c8\u5668\u5bfc\u51fa",e,{tips:3}):i({list:['
    • \u5bfc\u51fa CSV \u6587\u4ef6
    • '].join(""),done:function(e,t){t.on("click",function(){var e=f(this).data("type");x.exportFile.call(o,a.id,null,e)})}})}},print:{title:"\u6253\u5370",layEvent:"LAYTABLE_PRINT",icon:"layui-icon-print",onClick:function(e){var t=e.data,e=(e.config,e.elem);if(!t.length)return p.tips("\u5f53\u524d\u8868\u683c\u65e0\u6570\u636e",e,{tips:3});var t=window.open("about:blank","_blank"),e=[""].join(""),a=f(o.layHeader.html());a.append(o.layMain.find("table").html()),a.append(o.layTotal.find("table").html()),a.find("th.layui-table-patch").remove(),a.find("thead>tr>th."+M).filter(function(e,t){return!f(t).children("."+u).length}).remove(),a.find("tbody>tr>td."+M).remove(),t.document.write(e+a.prop("outerHTML")),t.document.close(),layui.device("edg").edg?(t.onafterprint=t.close,t.print()):(t.print(),t.close())}}});"object"==typeof e.defaultToolbar&&(l=[],e.defaultToolbar=f.map(e.defaultToolbar,function(e,t){var a="string"==typeof e,i=a?n[e]:e;return i&&(!(i=i.name&&n[i.name]?f.extend({},n[i.name],i):i).name&&a&&(i.name=e),l.push('
      ')),i}),o.layTool.find(".layui-table-tool-self").html(l.join("")))},n.prototype.renderPagebar=function(){var e,t=this.config,a=this.layPagebar=f('
      ');t.pagebar&&((e=f(t.pagebar).html()||"")&&a.append(m(e).render(t)),this.layPage.append(a))},n.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)},n.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)})})},n.prototype.setGroupWidth=function(i){var e,l=this;l.config.cols.length<=1||((e=l.layHeader.find((i?"th[data-key="+i.data("parentkey")+"]>":"")+"."+u)).css("width",0),layui.each(e.get().reverse(),function(){var e=f(this),t=e.parent().data("key"),a=0;l.layHeader.eq(0).find("th[data-parentkey="+t+"]").width(function(e,t){f(this).hasClass(N)||0o.layMain.prop("clientHeight")&&(e.style.width=parseFloat(e.style.width)-i+"px")}),o.setGroupWidth()},n.prototype.resize=function(){this.layMain&&(this.fullSize(),this.setColsWidth(),this.scrollPatch())},n.prototype.reload=function(e,t,a){var i=this;e=e||{},delete i.haveInit,layui.each(e,function(e,t){"array"===layui.type(t)&&delete i.config[e]}),i.config=f.extend(t,{},i.config,e),"reloadData"!==a&&(layui.each(i.config.cols,function(e,t){layui.each(t,function(e,t){delete t.colspan2})}),delete i.config.HAS_SET_COLS_PATCH),i.render(a)},n.prototype.errorView=function(e){var t=this,a=t.layMain.find("."+h),e=f('
      '+(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(y),t.layPage.find(O).addClass(y),x.cache[t.key]=[],t.syncCheckAll(),t.renderForm(),t.setColsWidth(),t.loading(!1)},n.prototype.page=1,n.prototype.pullData=function(i,l){var e,t,n=this,o=n.config,a=(o.HAS_SET_COLS_PATCH||n.setColsPatch(),o.HAS_SET_COLS_PATCH=!0,o.request),d=o.response,r=function(){"object"==typeof o.initSort&&n.sort({field:o.initSort.field,type:o.initSort.type,reloadType:l.type})},c=function(e,t){n.setColsWidth(),n.loading(!1),"function"==typeof o.done&&o.done(e,i,e[d.countName],t)};l=l||{},"function"==typeof o.before&&o.before(o),n.startTime=(new Date).getTime(),l.renderData?((e={})[d.dataName]=x.cache[n.key],e[d.countName]=o.url?"object"===layui.type(o.page)?o.page.count:e[d.dataName].length:o.data.length,"object"==typeof o.totalRow&&(e[d.totalRowName]=f.extend({},n.totalRow)),n.renderData({res:e,curr:i,count:e[d.countName],type:l.type,sort:!0}),c(e,"renderData")):o.url?(t={},o.page&&(t[a.pageName]=i,t[a.limitName]=o.limit),a=f.extend(t,o.where),o.contentType&&0==o.contentType.indexOf("application/json")&&(a=JSON.stringify(a)),n.loading(!0),f.ajax({type:o.method||"get",url:o.url,contentType:o.contentType,data:a,dataType:o.dataType||"json",jsonpCallback:o.jsonpCallback,headers:o.headers||{},complete:"function"==typeof o.complete?o.complete:undefined,success:function(e){var t,a;(e="function"==typeof o.parseData?o.parseData(e)||e:e)[d.statusName]!=d.statusCode?n.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):(t=e[d.countName],(a=Math.ceil(t/o.limit)||1)','
      "+function(){var e,t=f.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(f(l.toolbar).html()||"").render(t):C.call(s,{item3:l,content:n,tplData:t})}(),"
      "].join(""),i.push(e),l.fixed&&"right"!==l.fixed&&d.push(e),"right"===l.fixed&&r.push(e))}),e=['data-index="'+e+'"'],o[x.config.checkName]&&e.push('class="'+E+'"'),e=e.join(" "),y.push(""+i.join("")+""),h.push(""+d.join("")+""),p.push(""+r.join("")+""))}),{trs:y,trs_fixed:h,trs_fixed_r:p}},x.getTrHtml=function(e,t){e=w(e);return e.getTrHtml(t,null,e.page)},n.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("."+h).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,p.close(a.tipsIndex)};return x.cache[a.key]=d,a.layTotal[0==d.length?"addClass":"removeClass"](y),a.layPage[i.page||i.pagebar?"removeClass":"addClass"](N),a.layPage.find(O)[!i.page||0==n||0===d.length&&1==l?"addClass":"removeClass"](y),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=f.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=w(e);e&&e.pullData(e.page,{renderData:!0,type:"reloadData"})},n.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&&C.call(r,{item3:t,content:l,tplData:n})||a,i||n),n=(t.field&&r.dataTotal.push({field:t.field,total:f("
      "+l+"
      ").text()}),['','
      "+("string"==typeof(a=t.totalRow||c.totalRow)?m(a).render(f.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:"")+""))},n.prototype.getColElem=function(e,t){return e.eq(0).find(".laytable-cell-"+t+":eq(0)")},n.prototype.renderForm=function(e){this.config;var t=this.elem.attr("lay-filter");i.render(e,t)},n.prototype.renderFormByElem=function(a){layui.each(["input","select"],function(e,t){i.render(a.find(t))})},n.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}))},n.prototype.setRowActive=function(e,t,a){this.config;e=this.layBody.find('tr[data-index="'+e+'"]');if(t=t||"layui-table-click",a)return e.removeClass(t);e.addClass(t),e.siblings("tr").removeClass(t)},n.prototype.setRowChecked=function(i){var a,e,l,t,n,o,d,r=this,c=r.config,s="all"===i.index,u="array"===layui.type(i.index),y=s||u;y&&(r.layBox.addClass(I),"radio"===i.type)||(u&&(a={},layui.each(i.index,function(e,t){a[t]=!0}),i.index=a),e=r.layBody.children(".layui-table").children("tbody"),d=y?"tr":'tr[data-index="'+i.index+'"]',d=e.children(d),e=s?d:d.filter(u?function(){var e=f(this).data("index");return i.index[e]}:'[data-index="'+i.index+'"]'),i=f.extend({type:"checkbox"},i),l=x.cache[r.key],t="checked"in i,n=function(e){return"radio"===i.type||(t?i.checked:!e)},e.each(function(){var e=f(this),t=e.attr("data-index"),a=l[t];t&&"array"!==layui.type(a)&&!a[c.disabledName]&&(a=a[c.checkName]=n(e.hasClass(E)),e.toggleClass(E,!!a),"radio"===i.type)&&(o=t,e.siblings().removeClass(E))}),o&&layui.each(l,function(e,t){Number(o)!==Number(e)&&delete t[c.checkName]}),d=(u=(s=e.children("td").children(".layui-table-cell").children('input[lay-type="'+({radio:"layTableRadio",checkbox:"layTableCheckbox"}[i.type]||"checkbox")+'"]:not(:disabled)')).last()).closest(P),("radio"===i.type&&d.hasClass(N)?s.first():s).prop("checked",n(u.prop("checked"))),r.syncCheckAll(),y&&setTimeout(function(){r.layBox.removeClass(I)},100))},n.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=f(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(L);t.layHeader.find("th").find(L).removeAttr("lay-sort"),c.attr("lay-sort",l.type||null),t.layFixed.find("th")}catch(s){v.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+")",f.extend({config:i},i.initSort)))},n.prototype.loading=function(e){this.config.loading&&this.layBox.find(".layui-table-init").toggleClass(N,!e)},n.prototype.cssRules=function(t,a){var e=this.elem.children("style")[0];s.getStyleRules(e,function(e){if(e.selectorText===".laytable-cell-"+t)return a(e),!0})},n.prototype.fullSize=function(){var e,a,i=this,t=i.config,l=t.height;i.fullHeightGap?(l=d.height()-i.fullHeightGap)<135&&(l=135):i.parentDiv&&i.parentHeightGap?(l=f(i.parentDiv).height()-i.parentHeightGap)<135&&(l=135):i.customHeightFunc&&(l=i.customHeightFunc())<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").scrollTop(e.layMain.scrollTop()),e.layFixRight[x.cache[e.key]&&x.cache[e.key].length&&0');a.html(t),s.height&&a.css("max-height",s.height-(c.layTool.outerHeight()||50)),i.find("."+_)[0]||i.append(a),c.renderForm(),a.on("click",function(e){layui.stope(e)}),e.done&&e.done(a,t)};layui.stope(e),j.trigger("table.tool.panel.remove"),p.close(c.tipsIndex),layui.each(s.defaultToolbar,function(e,t){if(t.layEvent===a)return"function"==typeof t.onClick&&t.onClick({data:l,config:s,openPanel:n,elem:i}),!0}),layui.event.call(this,T,"toolbar("+o+")",f.extend({event:a,config:s},{}))}),c.layHeader.on("click","*[lay-event]",function(e){var t=f(this),a=t.attr("lay-event"),t=t.closest("th").data("key"),t=c.col(t);layui.event.call(this,T,"colTool("+o+")",f.extend({event:a,config:s,col:t},{}))}),c.layPagebar.on("click","*[lay-event]",function(e){var t=f(this).attr("lay-event");layui.event.call(this,T,"pagebar("+o+")",f.extend({event:t,config:s},{}))}),e.on("mousemove",function(e){var t=f(this),a=t.offset().left,e=e.clientX-a;t.data("unresize")||k.eventMoveElem||(r.allowResize=t.width()-e<=10,d.css("cursor",r.allowResize?"col-resize":""))}).on("mouseleave",function(){f(this);k.eventMoveElem||(r.allowResize=!1,d.css("cursor",""))}).on("mousedown",function(e){var t,a=f(this);r.allowResize&&(t=a.data("key"),e.preventDefault(),r.offset=[e.clientX,e.clientY],c.cssRules(t,function(e){var t=e.style.width||a.outerWidth();r.rule=e,r.ruleWidth=parseFloat(t),r.minWidth=a.data("minwidth")||s.cellMinWidth,r.maxWidth=a.data("maxwidth")||s.cellMaxWidth}),a.data(H,r),k.eventMoveElem=a)}),k.docEvent||j.on("mousemove",function(e){var t,a;k.eventMoveElem&&(t=k.eventMoveElem.data(H)||{},k.eventMoveElem.data("resizing",1),e.preventDefault(),t.rule)&&(e=t.ruleWidth+e.clientX-t.offset[0],a=k.eventMoveElem.closest("."+W).attr(R),a=w(a))&&((e=et.maxWidth&&(e=t.maxWidth),t.rule.style.width=e+"px",a.setGroupWidth(k.eventMoveElem),p.close(c.tipsIndex))}).on("mouseup",function(e){var t,a,i,l,n;k.eventMoveElem&&(i=(t=k.eventMoveElem).closest("."+W).attr(R),a=w(i))&&(i=t.data("key"),l=a.col(i),n=a.config.elem.attr("lay-filter"),r={},d.css("cursor",""),a.scrollPatch(),t.removeData(H),delete k.eventMoveElem,a.cssRules(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=f(this),a=t.find(L),i=a.attr("lay-sort");if(!a[0]||1===t.data("resizing"))return t.removeData("resizing");c.sort({field:t,type:"asc"===i?"desc":"desc"===i?null:"asc",fromEvent:!0})}).find(L+" .layui-edge ").on("click",function(e){var t=f(this),a=t.index(),t=t.parents("th").eq(0).data("field");layui.stope(e),0===a?c.sort({field:t,type:"asc",fromEvent:!0}):c.sort({field:t,type:"desc",fromEvent:!0})}),c.commonMember=function(e){var a=f(this).parents("tr").eq(0).data("index"),t=c.layBody.find('tr[data-index="'+a+'"]'),i=(x.cache[c.key]||[])[a]||{},l={tr:t,config:s,data:x.clearCacheKey(i),dataCache:i,index:a,del:function(){x.cache[c.key][a]=[],t.remove(),c.scrollPatch()},update:function(e,t){c.updateRow({index:a,data:e=e||{},related:t},function(e,t){l.data[e]=t})},setRowChecked:function(e){c.setRowChecked(f.extend({index:a},e))}};return f.extend(l,e)}),t=(c.elem.on("click",'input[name="layTableCheckbox"]+',function(e){var t=f(this),a=t.closest("td"),t=t.prev(),i=(c.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?c.setRowChecked({index:"all",checked:l}):c.setRowChecked({index:i,checked:l}),layui.stope(e),layui.event.call(t[0],T,"checkbox("+o+")",y.call(t[0],{checked:l,type:n?"all":"one",getCol:function(){return c.col(a.data("key"))}})))}),c.elem.on("click",'input[lay-type="layTableRadio"]+',function(e){var t=f(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;c.setRowChecked({type:"radio",index:l}),layui.event.call(t[0],T,"radio("+o+")",y.call(t[0],{checked:i,getCol:function(){return c.col(a.data("key"))}}))}),c.layBody.on("mouseenter","tr",function(){var e=f(this),t=e.index();e.data("off")||c.layBody.find("tr:eq("+t+")").addClass(F)}).on("mouseleave","tr",function(){var e=f(this),t=e.index();e.data("off")||c.layBody.find("tr:eq("+t+")").removeClass(F)}).on("click","tr",function(e){t.call(this,"row",e)}).on("dblclick","tr",function(e){t.call(this,"rowDouble",e)}).on("contextmenu","tr",function(e){s.defaultContextmenu||e.preventDefault(),t.call(this,"rowContextmenu",e)}),function(e,t){var a=f(this);if(!a.data("off")){if("rowContextmenu"!==e){var i=[".layui-form-checkbox",".layui-form-switch",".layui-form-radio","[lay-unrow]"].join(",");if(f(t.target).is(i)||f(t.target).closest(i)[0])return}layui.event.call(this,T,e+"("+o+")",y.call(a.children("td")[0],{e:t}))}}),n=function(e,t){var a,i,l;(e=f(e)).data("off")||(l=e.data("field"),i=e.data("key"),i=c.col(i),a=e.closest("tr").data("index"),a=x.cache[c.key][a],e.children(u),(i="function"==typeof i.edit?i.edit(a):i.edit)&&((i=f("textarea"===i?'':''))[0].value=(l=e.data("content")||a[l])===undefined||null===l?"":l,e.find("."+A)[0]||e.append(i),i.focus(),t)&&layui.stope(t))},i=(c.layBody.on("change","."+A,function(){var e=f(this),t=e.parent(),a=this.value,i=e.parent().data("field"),e=e.closest("tr").data("index"),e=x.cache[c.key][e],l=y.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 c.col(t.data("key"))}}),e={};e[i]=a,l.update(e),layui.event.call(t[0],T,"edit("+o+")",l)}).on("blur","."+A,function(){f(this).remove()}),c.layBody.on(s.editTrigger,"td",function(e){n(this,e)}).on("mouseenter","td",function(){a.call(this)}).on("mouseleave","td",function(){a.call(this,"hide")}),c.layTotal.on("mouseenter","td",function(){a.call(this)}).on("mouseleave","td",function(){a.call(this,"hide")}),"layui-table-grid-down"),a=function(e){var t=f(this),a=t.children(u);t.data("off")||t.parent().hasClass(S)||(e?t.find(".layui-table-grid-down").remove():!(a.prop("scrollWidth")>a.prop("clientWidth")||0'))},l=function(e,t){var a=f(this),i=a.parent(),l=i.data("key"),n=c.col(l),o=i.parent().data("index"),d=i.children(u),i="layui-table-cell-c",r=f('');"tips"===(t=t||n.expandedMode||s.cellExpandedMode)?c.tipsIndex=p.tips(['
      ',d.html(),"
      ",''].join(""),d[0],{tips:[3,""],time:-1,anim:-1,maxWidth:b.ios||b.android?300:c.elem.width()/2,isOutAnim:!1,skin:"layui-table-tips",success:function(e,t){e.find(".layui-table-tips-c").on("click",function(){p.close(t)})}}):(c.elem.find("."+i).trigger("click"),c.cssRules(l,function(e){var t=e.style.width,a=n.expandedWidth||s.cellExpandedWidth;atr").each(function(i){n.cols[i]=[],f(this).children().each(function(e){var t=f(this),a=t.attr("lay-data"),a=s.options(this,{attr:a?"lay-data":null,errorText:d+(a||t.attr("lay-options"))}),t=f.extend({title:t.text(),colspan:parseInt(t.attr("colspan"))||1,rowspan:parseInt(t.attr("rowspan"))||1},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=f(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),r(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+'"')):t.field&&"normal"!==t.type&&0==i&&(u[t.field]=!0)}),c.push(n.join(","))}),o&&layui.each(o.dataTotal,function(e,t){u[t.field]||s.push('"'+(t.total||"")+'"')}),r.join(",")+"\r\n"+c.join("\r\n")+"\r\n"+s.join(","))),d.download=(a.title||l.title||"table_"+(l.index||""))+"."+i,document.body.appendChild(d),d.click(),document.body.removeChild(d)},x.getOptions=l,x.hideCol=function(e,l){var n=w(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))})})),f("."+_).remove(),n.resize())},x.reload=function(e,t,a,i){if(l(e))return(e=w(e)).reload(t,a,i),k.call(e)},x.reloadData=function(){var a=f.extend([],arguments),i=(a[3]="reloadData",new RegExp("^("+["elem","id","cols","width","height","maxHeight","toolbar","defaultToolbar","className","css","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 n(e);return k.call(e)},x.clearCacheKey=function(e){return delete(e=f.extend({},e))[x.config.checkName],delete e[x.config.indexName],delete e[x.config.numbersName],delete e[x.config.disabledName],e},f(function(){x.init()}),c(T,x)});layui.define(["table"],function(e){"use strict";var A=layui.$,x=layui.form,P=layui.table,y=layui.hint(),B={config:{},on:P.on,eachCols:P.eachCols,index:P.index,set:function(e){var t=this;return t.config=A.extend({},t.config,e),t},resize:P.resize,getOptions:P.getOptions,hideCol:P.hideCol,renderData:P.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){B.reloadData(n,e,t)}}},j=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},F="lay-table-id",L="layui-hide",s=".layui-table-body",q=".layui-table-main",R=".layui-table-fixed-l",Y=".layui-table-fixed-r",l="layui-table-checked",h="layui-table-tree",z="LAY_DATA_INDEX",m="LAY_DATA_INDEX_HISTORY",p="LAY_PARENT_INDEX",b="LAY_CHECKBOX_HALF",H="LAY_EXPAND",X="LAY_HAS_EXPANDED",V="LAY_ASYNC_STATUS",n=["all","parent","children","none"],t=/<[^>]+?>/,f=["flexIconClose","flexIconOpen","iconClose","iconOpen","iconLeaf","icon"],a=function(e){var t=this;t.index=++B.index,t.config=A.extend(!0,{},t.config,B.config,e),t.init(),t.render()},g=function(n,i,e){var l=P.cache[n];layui.each(e||l,function(e,t){var a=t[z]||"";-1!==a.indexOf("-")&&(l[a]=t),t[i]&&g(n,i,t[i])})},d=function(d,a,e){var r=j(d),o=("reloadData"!==e&&(r.status={expand:{}}),A.extend(!0,{},r.getOptions(),a)),n=o.tree,c=n.customName.children,i=n.customName.id,l=(delete a.hasNumberCol,delete a.hasChecboxCol,delete a.hasRadioCol,P.eachCols(null,function(e,t){"numbers"===t.type?a.hasNumberCol=!0:"checkbox"===t.type?a.hasChecboxCol=!0:"radio"===t.type&&(a.hasRadioCol=!0)},o.cols),a.parseData),u=a.done;"reloadData"===e&&"fixed"===o.scrollPos&&(r.scrollTopCache=r.config.elem.next().find(s).scrollTop()),o.url?e&&(!l||l.mod)||(a.parseData=function(){var e=this,t=arguments,a=t[0],t=("function"===layui.type(l)&&(a=l.apply(e,t)||t[0]),e.response.dataName);return n.data.isSimpleData&&!n["async"].enable&&(a[t]=r.flatToTree(a[t])),N(a[t],function(e){e[H]=H in e?e[H]:e[i]!==undefined&&r.status.expand[e[i]]},c),e.autoSort&&e.initSort&&e.initSort.type&&layui.sort(a[t],e.initSort.field,"desc"===e.initSort.type,!0),r.initData(a[t]),a},a.parseData.mod=!0):a.data!==undefined&&(a.data=a.data||[],n.data.isSimpleData&&(a.data=r.flatToTree(a.data)),r.initData(a.data)),e&&(!u||u.mod)||(a.done=function(){var e,t=arguments,a=t[3],n="renderData"===a,i=(n||delete r.isExpandAll,this.elem.next()),l=(r.updateStatus(null,{LAY_HAS_EXPANDED:!1}),g(d,c),i.find('[name="layTableCheckbox"][lay-filter="layTableAllChoose"]'));if(l.length&&(e=B.checkStatus(d),l.prop({checked:e.isAll&&e.data.length,indeterminate:!e.isAll&&e.data.length})),!n&&o.autoSort&&o.initSort&&o.initSort.type&&B.sort(d),r.renderTreeTable(i),"reloadData"===a&&"fixed"===this.scrollPos&&i.find(s).scrollTop(r.scrollTopCache),"function"===layui.type(u))return u.apply(this,t)},a.done.mod=!0),a&&a.tree&&a.tree.view&&layui.each(f,function(e,t){a.tree.view[t]!==undefined&&(a.tree.view[t]=r.normalizedIcon(a.tree.view[t]))})};a.prototype.init=function(){var e=this.config,t=e.tree.data.cascade,t=(-1===n.indexOf(t)&&(e.tree.data.cascade="all"),P.render(A.extend({},e,{data:[],url:"",done:null}))),a=t.config.id;(i.that[a]=this).tableIns=t,d(a,e)},a.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,cascade:"all"},"async":{enable:!1,url:"",type:null,contentType:null,headers:null,where:null,autoParam:[]},callback:{beforeExpand:null,onExpand:null}}},a.prototype.normalizedIcon=function(e){return e?t.test(e)?e:'':""},a.prototype.getOptions=function(){return this.tableIns?P.getOptions(this.tableIns.config.id):this.config},a.prototype.flatToTree=function(e){var n,i,l,d,r,o,c,u,t=this.getOptions(),a=t.tree,s=a.customName,t=t.id;return e=e||P.cache[t],t=e,n=s.id,i=s.pid,l=s.children,d=a.data.rootPid,n=n||"id",i=i||"parentId",l=l||"children",c={},u=[],layui.each(t,function(e,t){r=n+t[n],o=n+t[i],c[r]||(c[r]={},c[r][l]=[]);var a={};a[l]=c[r][l],c[r]=A.extend({},t,a),((d?c[r][i]===d:!c[r][i])?u:(c[o]||(c[o]={},c[o][l]=[]),c[o][l])).push(c[r])}),u},a.prototype.treeToFlat=function(e,n,i){var l=this,d=l.getOptions().tree.customName,r=d.children,o=d.pid,c=[];return layui.each(e,function(e,t){var e=(i?i+"-":"")+e,a=A.extend({},t);a[o]=t[o]||n,c.push(a),c=c.concat(l.treeToFlat(t[r],t[d.id],e))}),c},a.prototype.getTreeNode=function(e){var t,a,n=this;return e?(a=(t=n.getOptions()).tree,t.id,a.customName,{data:e,dataIndex:e[z],getParentNode:function(){return n.getNodeByIndex(e[p])}}):y.error("\u627e\u4e0d\u5230\u8282\u70b9\u6570\u636e")},a.prototype.getNodeByIndex=function(t){var a,e,n=this,i=n.getNodeDataByIndex(t);return i?((e=n.getOptions()).tree.customName.parent,a=e.id,(e={data:i,dataIndex:i[z],getParentNode:function(){return n.getNodeByIndex(i[p])},update:function(e){return B.updateNode(a,t,e)},remove:function(){return B.removeNode(a,t)},expand:function(e){return B.expandNode(a,A.extend({},e,{index:t}))},setChecked:function(e){return B.setRowChecked(a,A.extend({},e,{index:t}))}}).dataIndex=t,e):y.error("\u627e\u4e0d\u5230\u8282\u70b9\u6570\u636e")},a.prototype.getNodeById=function(a){var e=this.getOptions(),n=e.tree.customName.id,i="",e=B.getData(e.id,!0);if(layui.each(e,function(e,t){if(t[n]===a)return i=t[z],!0}),i)return this.getNodeByIndex(i)},a.prototype.getNodeDataByIndex=function(e,t,a){var n=this.getOptions(),i=n.tree,n=n.id,n=P.cache[n],l=n[e];if("delete"!==a&&l)return A.extend(l,a),t?A.extend({},l):l;for(var d=n,r=String(e).split("-"),o=0,c=i.customName.children;o
      '),N=function(e){y[V]="success",y[s.children]=e,c.initData(y[s.children],y[z]),J(t,!0,!p&&n,i,l)},C=m.format,"function"===layui.type(C)?C(y,o,N):(I=A.extend({},m.where||o.where),C=m.autoParam,layui.each(C,function(e,t){t=t.split("=");I[t[0].trim()]=y[(t[1]||t[0]).trim()]}),(C=m.contentType||o.contentType)&&0==C.indexOf("application/json")&&(I=JSON.stringify(I)),O=m.method||o.method,D=m.dataType||o.dataType,T=m.jsonpCallback||o.jsonpCallback,_=m.headers||o.headers,k=m.parseData||o.parseData,w=m.response||o.response,A.ajax({type:O||"get",url:b,contentType:C,data:I,dataType:D||"json",jsonpCallback:T,headers:_||{},success:function(e){(e="function"==typeof k?k.call(o,e)||e:e)[w.statusName]!=w.statusCode?(y[V]="error",g.html('')):N(e[w.dataName])},error:function(e,t){y[V]="error","function"==typeof o.error&&o.error(e,t)}})),h;y[X]=!0,v.length&&(!o.initSort||o.url&&!o.autoSort||((m=o.initSort).type?layui.sort(v,m.field,"desc"===m.type,!0):layui.sort(v,P.config.indexName,null,!0)),c.initData(y[s.children],y[z]),O=P.getTrHtml(r,v,null,null,e),S={trs:A(O.trs.join("")),trs_fixed:A(O.trs_fixed.join("")),trs_fixed_r:A(O.trs_fixed_r.join(""))},E=(e.split("-").length-1||0)+1,layui.each(v,function(e,t){S.trs.eq(e).attr({"data-index":t[z],"lay-data-index":t[z],"data-level":E}).data("index",t[z]),S.trs_fixed.eq(e).attr({"data-index":t[z],"lay-data-index":t[z],"data-level":E}).data("index",t[z]),S.trs_fixed_r.eq(e).attr({"data-index":t[z],"lay-data-index":t[z],"data-level":E}).data("index",t[z])}),d.find(q).find('tbody tr[lay-data-index="'+e+'"]').after(S.trs),d.find(R).find('tbody tr[lay-data-index="'+e+'"]').after(S.trs_fixed),d.find(Y).find('tbody tr[lay-data-index="'+e+'"]').after(S.trs_fixed_r),c.renderTreeTable(S.trs,E),n)&&!p&&layui.each(v,function(e,t){J({dataIndex:t[z],trElem:d.find('tr[lay-data-index="'+t[z]+'"]').first(),tableViewElem:d,tableId:r,options:o},a,n,i,l)})}else c.isExpandAll=!1,(n&&!p?(layui.each(v,function(e,t){J({dataIndex:t[z],trElem:d.find('tr[lay-data-index="'+t[z]+'"]').first(),tableViewElem:d,tableId:r,options:o},a,n,i,l)}),d.find(v.map(function(e,t,a){return'tr[lay-data-index="'+e[z]+'"]'}).join(","))):(b=c.treeToFlat(v,y[s.id],e),d.find(b.map(function(e,t,a){return'tr[lay-data-index="'+e[z]+'"]'}).join(",")))).addClass(L);U("resize-"+r,function(){B.resize(r)},0)(),l&&"loading"!==y[V]&&(C=u.callback.onExpand,"function"===layui.type(C))&&C(r,y,x)}return h},v=(B.expandNode=function(e,t){var a,n,i,e=j(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)},B.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=j(a);if(t){t.isExpandAll=e;var n=t.getOptions(),i=n.tree,l=n.elem.next(),d=i.customName.isParent,r=i.customName.id,o=i.view.showFlexIconIfNotParent;if(e){e=B.getData(a,!0);if(i["async"].enable){var c=!0;if(layui.each(e,function(e,t){if(t[d]&&!t[V])return!(c=!1)}),!c)return void layui.each(B.getData(a),function(e,t){B.expandNode(a,{index:t[z],expandFlag:!0,inherit:!0})})}var u=!0;if(layui.each(e,function(e,t){if(t[d]&&!t[X])return!(u=!1)}),u)t.updateStatus(null,function(e){(e[d]||o)&&(e[H]=!0,e[r]!==undefined)&&(t.status.expand[e[r]]=!0)}),l.find('tbody tr[data-level!="0"]').removeClass(L),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[d]||o)&&(e[H]=!0,e[X]=!0,e[r]!==undefined)&&(t.status.expand[e[r]]=!0)}),n.initSort&&n.initSort.type&&n.autoSort)return B.sort(a);var s,n=P.getTrHtml(a,e),f={trs:A(n.trs.join("")),trs_fixed:A(n.trs_fixed.join("")),trs_fixed_r:A(n.trs_fixed_r.join(""))};layui.each(e,function(e,t){var a=t[z].split("-").length-1;s={"data-index":t[z],"lay-data-index":t[z],"data-level":a},f.trs.eq(e).attr(s).data("index",t[z]),f.trs_fixed.eq(e).attr(s).data("index",t[z]),f.trs_fixed_r.eq(e).attr(s).data("index",t[z])}),layui.each(["main","fixed-l","fixed-r"],function(e,t){l.find(".layui-table-"+t+" tbody").html(f[["trs","trs_fixed","trs_fixed_r"][e]])}),t.renderTreeTable(l,0,!1)}}else t.updateStatus(null,function(e){(e[d]||o)&&(e[H]=!1,e[r]!==undefined)&&(t.status.expand[e[r]]=!1)}),l.find('.layui-table-box tbody tr[data-level!="0"]').addClass(L),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);B.resize(a)}},a.prototype.updateNodeIcon=function(e){var t=this.getOptions().tree||{},a=e.scopeEl,n=e.isExpand,e=e.isParent;a.find(".layui-table-tree-flexIcon").css("visibility",e||t.view.showFlexIconIfNotParent?"visible":"hidden").html(n?t.view.flexIconOpen:t.view.flexIconClose),t.view.showIcon&&(a=a.find(".layui-table-tree-nodeIcon:not(.layui-table-tree-iconCustom)"),n=e?n?t.view.iconOpen:t.view.iconClose:t.view.iconLeaf,a.toggleClass("layui-table-tree-iconLeaf",!e).html(n))},a.prototype.renderTreeTable=function(e,t,a){var l=this,n=l.getOptions(),d=n.elem.next(),i=(d.hasClass(h)||d.addClass(h),n.id),r=n.tree||{},o=(r.data,r.view||{}),c=r.customName||{},u=c.isParent,s=(d.attr("lay-filter"),l),f=((t=t||0)||(d.find(".layui-table-body tr:not([data-level])").attr("data-level",t),layui.each(P.cache[i],function(e,t){d.find('.layui-table-main tbody tr[data-level="0"]:eq('+e+")").attr("lay-data-index",t[z]),d.find('.layui-table-fixed-l tbody tr[data-level="0"]:eq('+e+")").attr("lay-data-index",t[z]),d.find('.layui-table-fixed-r tbody tr[data-level="0"]:eq('+e+")").attr("lay-data-index",t[z])})),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=A(t)).closest("tr"),t=t.children(".layui-table-cell");t.hasClass("layui-table-tree-item")||(n=i.attr("lay-data-index"))&&(i=d.find('tr[lay-data-index="'+n+'"]'),(a=s.getNodeDataByIndex(n))[H]&&a[u]&&((f=f||{})[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[H]?o.flexIconOpen:o.flexIconClose,"
      ",o.showIcon?'
      '+(l.normalizedIcon(a[c.icon])||o.icon||(a[u]?a[H]?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&&r.view.expandAllDefault&&l.isExpandAll===undefined)return B.expandAll(i,!0);(!1!==a&&f?(layui.each(f,function(e,t){e=d.find('tr[lay-data-index="'+e+'"]');e.find(".layui-table-tree-flexIcon").html(o.flexIconOpen),J({trElem:e.first()},!0)}),U("renderTreeTable2-"+i,function(){x.render(A(".layui-table-tree["+F+'="'+i+'"]'))},0)):U("renderTreeTable-"+i,function(){n.hasNumberCol&&v(l),x.render(A(".layui-table-tree["+F+'="'+i+'"]'))},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"),d=t.find(".layui-table-fixed-r tbody tr");layui.each(a.treeToFlat(P.cache[e.id]),function(e,t){t.LAY_HIDE||(a.getNodeDataByIndex(t[z]).LAY_NUM=++n,i.eq(e).find(".laytable-cell-numbers").html(n),l.eq(e).find(".laytable-cell-numbers").html(n),d.eq(e).find(".laytable-cell-numbers").html(n))})}),N=(a.prototype.render=function(e){var t=this;t.tableIns=P["reloadData"===e?"reloadData":"reload"](t.tableIns.config.id,A.extend(!0,{},t.config)),t.config=t.tableIns.config},a.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]}),d(n.getOptions().id,e,a||!0),n.config=A.extend(t,{},n.config,e),n.render(a)},B.reloadData=function(){var e=A.extend(!0,[],arguments);return e[3]="reloadData",B.reload.apply(null,e)},function(e,a,n,i){var l=[];return layui.each(e,function(e,t){"function"===layui.type(a)?a(t):A.extend(t,a),l.push(A.extend({},t)),i||(l=l.concat(N(t[n],a,n,i)))}),l}),o=(a.prototype.updateStatus=function(e,t,a){var n=this.getOptions(),i=n.tree;return e=e||P.cache[n.id],N(e,t,i.customName.children,a)},a.prototype.getTableData=function(){var e=this.getOptions();return P.cache[e.id]},B.updateStatus=function(e,t,a){var e=j(e),n=e.getOptions();return a=a||(n.url?P.cache[n.id]:n.data),e.updateStatus(a,t)},B.sort=function(e){var t,a,i,l,n,d=j(e);d&&(n=(t=d.getOptions()).tree,a=B.getData(e),i=n.customName.children,l=function(e,a,n){layui.sort(e,a,n,!0),layui.each(e,function(e,t){l(t[i]||[],a,n)})},t.autoSort)&&((n=t.initSort).type?l(a,n.field,"desc"===n.type):l(a,P.config.indexName,null),P.cache[e]=a,d.initData(a),B.renderData(e))},function(n){var t=n.config.id,i=j(t),a=n.data=B.getNodeDataByIndex(t,n.index),l=a[z],d=(n.dataIndex=l,n.update);n.update=function(){var e=arguments,t=(A.extend(i.getNodeDataByIndex(l),e[0]),d.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(){B.removeNode(t,a)},n.setRowChecked=function(e){B.setRowChecked(t,{index:a,checked:e})}}),u=(B.updateNode=function(e,a,t){var n,i,l,d,r,o=j(e);o&&((d=o.getOptions()).tree,d=(n=d.elem.next()).find('tr[lay-data-index="'+a+'"]'),i=d.attr("data-index"),l=d.attr("data-level"),t)&&(d=o.getNodeDataByIndex(a,!1,t),r=P.getTrHtml(e,[d]),layui.each(["main","fixed-l","fixed-r"],function(e,t){n.find(".layui-table-"+t+' tbody tr[lay-data-index="'+a+'"]').replaceWith(A(r[["trs","trs_fixed","trs_fixed_r"][e]].join("")).attr({"data-index":i,"lay-data-index":a,"data-level":l}).data("index",i))}),o.renderTreeTable(n.find('tr[lay-data-index="'+a+'"]'),l))},B.removeNode=function(e,t,a){var n=j(e);if(n){var i,l=n.getOptions(),d=l.tree,r=d.customName.isParent,o=d.customName.children,c=l.elem.next(),u=[],s=P.cache[e],t=n.getNodeDataByIndex("string"===layui.type(t)?t:t[z],!1,"delete"),f=n.getNodeDataByIndex(t[p]),d=(n.updateCheckStatus(f),n.treeToFlat([t],t[d.customName.pid],t[p])),t=(layui.each(d,function(e,t){t=t[z];u.push('tr[lay-data-index="'+t+'"]'),-1!==t.indexOf("-")&&delete s[t]}),c.find(u.join(",")).remove(),n.initData());for(i in s)-1!==i.indexOf("-")&&i!==s[i][z]&&delete s[i];layui.each(n.treeToFlat(t),function(e,t){t[m]&&t[m]!==t[z]&&c.find('tr[lay-data-index="'+t[m]+'"]').attr({"data-index":t[z],"lay-data-index":t[z]}).data("index",t[z])}),layui.each(s,function(e,t){c.find('tr[data-level="0"][lay-data-index="'+t[z]+'"]').attr("data-index",e).data("index",e)}),l.hasNumberCol&&v(n),f&&(d=c.find('tr[lay-data-index="'+f[z]+'"]'),a||(f[r]=!(!f[o]||!f[o].length)),n.updateNodeIcon({scopeEl:d,isExpand:f[H],isParent:f[r]})),B.resize(e)}},B.addNodes=function(e,t){var a=j(e);if(a){var n=a.getOptions(),i=n.tree,l=n.elem.next(),d=P.config.checkName,r=(t=t||{}).parentIndex,o=t.index,c=t.data,t=t.focus,u=(r="number"===layui.type(r)?r.toString():r)?a.getNodeDataByIndex(r):null,o="number"===layui.type(o)?o:-1,c=A.extend(!0,[],layui.isArray(c)?c:[c]);layui.each(c,function(e,t){d in t||!u||(t[d]=u[d])}),a.getTableData();if(u){var s=i.customName.isParent,f=i.customName.children;u[s]=!0;var y=(y=u[f])?(p=y.splice(-1===o?y.length:o),u[f]=y.concat(c,p)):u[f]=c,f=(a.updateStatus(y,function(e){(e[s]||i.view.showFlexIconIfNotParent)&&(e[X]=!1)}),a.treeToFlat(y));l.find(f.map(function(e){return'tr[lay-data-index="'+e[z]+'"]'}).join(",")).remove(),a.initData(),u[X]=!1,u[V]="local",J({trElem:l.find('tr[lay-data-index="'+r+'"]')},!0)}else{var p=P.cache[e].splice(-1===o?P.cache[e].length:o);if(P.cache[e]=P.cache[e].concat(c,p),n.url||(n.page?(y=n.page,n.data.splice.apply(n.data,[y.limit*(y.curr-1),y.limit].concat(P.cache[e]))):n.data=P.cache[e]),a.initData(),l.find(".layui-none").length)return P.renderData(e),c;var x,f=P.getTrHtml(e,c),h={trs:A(f.trs.join("")),trs_fixed:A(f.trs_fixed.join("")),trs_fixed_r:A(f.trs_fixed_r.join(""))},r=(layui.each(c,function(e,t){x={"data-index":t[z],"lay-data-index":t[z],"data-level":"0"},h.trs.eq(e).attr(x).data("index",t[z]),h.trs_fixed.eq(e).attr(x).data("index",t[z]),h.trs_fixed_r.eq(e).attr(x).data("index",t[z])}),parseInt(c[0][z])-1),y=l.find(q),n=l.find(R),f=l.find(Y);-1==r?y.find('tr[data-level="0"][data-index="0"]')[0]?(y.find('tr[data-level="0"][data-index="0"]').before(h.trs),n.find('tr[data-level="0"][data-index="0"]').before(h.trs_fixed),f.find('tr[data-level="0"][data-index="0"]').before(h.trs_fixed_r)):(y.find("tbody").prepend(h.trs),n.find("tbody").prepend(h.trs_fixed),f.find("tbody").prepend(h.trs_fixed_r)):-1===o?(y.find("tbody").append(h.trs),n.find("tbody").append(h.trs_fixed),f.find("tbody").append(h.trs_fixed_r)):(r=p[0][m],y.find('tr[data-level="0"][data-index="'+r+'"]').before(h.trs),n.find('tr[data-level="0"][data-index="'+r+'"]').before(h.trs_fixed),f.find('tr[data-level="0"][data-index="'+r+'"]').before(h.trs_fixed_r)),layui.each(P.cache[e],function(e,t){l.find('tr[data-level="0"][lay-data-index="'+t[z]+'"]').attr("data-index",e).data("index",e)}),a.renderTreeTable(l.find(c.map(function(e,t,a){return'tr[lay-data-index="'+e[z]+'"]'}).join(",")))}return a.updateCheckStatus(u),u&&(o=l.find('tr[lay-data-index="'+u[z]+'"]'),a.updateNodeIcon({scopeEl:o,isExpand:u[H],isParent:u[s]})),B.resize(e),t&&l.find(q).find('tr[lay-data-index="'+c[0][z]+'"]').get(0).scrollIntoViewIfNeeded(),c}},B.checkStatus=function(e,n){var i,t,a,l=j(e);if(l)return l=l.getOptions().tree,i=P.config.checkName,t=B.getData(e,!0).filter(function(e,t,a){return e[i]||n&&e[b]}),a=!0,layui.each("all"===l.data.cascade?P.cache[e]:B.getData(e,!0),function(e,t){if(!t[i])return!(a=!1)}),{data:t,isAll:a}},B.on("sort",function(e){var e=e.config,t=e.elem.next(),e=e.id;t.hasClass(h)&&B.sort(e)}),B.on("row",function(e){e.config.elem.next().hasClass(h)&&o(e)}),B.on("rowDouble",function(e){var t=e.config,a=t.elem.next();t.id;a.hasClass(h)&&(o(e),(t.tree||{}).view.dblClickExpand)&&J({trElem:e.tr.first()},null,null,null,!0)}),B.on("rowContextmenu",function(e){var t=e.config,a=t.elem.next();t.id;a.hasClass(h)&&o(e)}),B.on("tool",function(e){var t=e.config,a=t.elem.next();t.id;a.hasClass(h)&&o(e)}),B.on("edit",function(e){var t=e.config,a=t.elem.next();t.id;a.hasClass(h)&&(o(e),e.field===t.tree.customName.name)&&((a={})[e.field]=e.value,e.update(a))}),B.on("radio",function(e){var t=e.config,a=t.elem.next(),t=t.id;a.hasClass(h)&&(a=j(t),o(e),u.call(a,e.tr,e.checked))}),a.prototype.setRowCheckedClass=function(e,t){var a=this.getOptions(),n=(e.data("index"),a.elem.next());e[t?"addClass":"removeClass"](l),e.each(function(){var e=A(this).data("index");n.find('.layui-table-fixed-r tbody tr[data-index="'+e+'"]')[t?"addClass":"removeClass"](l)})},a.prototype.updateCheckStatus=function(e,t){var a,n,i,l,d,r,o,c=this,u=c.getOptions();return!!u.hasChecboxCol&&(a=u.tree,n=u.id,i=u.elem.next(),l=P.config.checkName,"all"!==(d=a.data.cascade)&&"parent"!==d||!e||(d=c.updateParentCheckStatus(e,"boolean"===layui.type(t)?t:null),layui.each(d,function(e,t){var a=i.find('tr[lay-data-index="'+t[z]+'"] input[name="layTableCheckbox"]:not(:disabled)'),n=t[l];c.setRowCheckedClass(a.closest("tr"),n),x.render(a.prop({checked:n,indeterminate:t[b]}))})),o=!(r=!0),0<(e=(e="all"===a.data.cascade?P.cache[n]:B.getData(n,!0)).filter(function(e){return!e[u.disabledName]})).length?layui.each(e,function(e,t){if((t[l]||t[b])&&(o=!0),t[l]||(r=!1),o&&!r)return!0}):r=!1,o=o&&!r,x.render(i.find('input[name="layTableCheckbox"][lay-filter="layTableAllChoose"]').prop({checked:r,indeterminate:o})),r)},a.prototype.updateParentCheckStatus=function(a,n){var i,e=this.getOptions(),t=e.tree,e=e.id,l=P.config.checkName,t=t.customName.children,d=[];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')),n=(e.tree(a),i.elem=p(i.elem));if(n[0]){if(e.key=i.id||e.index,e.elem=a,e.elemNone=p('
      '+i.text.none+"
      "),n.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=p(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(T),e.next()[0]||e.parents(".layui-tree-set").eq(0).next()[0]||e.addClass(T)}),e.events()}},l.prototype.renderForm=function(e){i.render(e,"LAY-tree-"+this.index)},l.prototype.tree=function(r,e){var d=this,s=d.config,o=s.customName,e=e||s.data;layui.each(e,function(e,i){var a,n,t=i[o.children]&&0"),c=p(['
      ','
      ','
      ',s.showLine?t?'':'':'',s.showCheckbox?'':"",s.isJump&&i.href?''+(i[o.title]||i.label||s.text.defaultNodeName)+"":''+(i[o.title]||i.label||s.text.defaultNodeName)+"","
      ",s.edit?(a={add:'',update:'',del:''},n=['
      '],!0===s.edit&&(s.edit=["update","del"]),"object"==typeof s.edit?(layui.each(s.edit,function(e,i){n.push(a[i]||"")}),n.join("")+"
      "):void 0):"","
      "].join(""));t&&(c.append(l),d.tree(l,i[o.children])),r.append(c),c.prev("."+k)[0]&&c.prev().children(".layui-tree-pack").addClass("layui-tree-showLine"),t||c.parent(".layui-tree-pack").addClass("layui-tree-lineExtend"),d.spread(c,i),s.showCheckbox&&(i.checked&&d.checkids.push(i[o.id]),d.checkClick(c,i)),s.edit&&d.operate(c,i)})},l.prototype.spread=function(n,t){var l=this,c=l.config,e=n.children("."+b),i=e.children("."+g),a=i.find('input[same="layuiTreeCheck"]'),r=e.find("."+C),e=e.find("."+w),d=c.onlyIconControl?r:i,s="";d.on("click",function(e){var i=n.children("."+N),a=(d.children(".layui-icon")[0]?d:d.find(".layui-tree-icon")).children(".layui-icon");i[0]?n.hasClass(F)?(n.removeClass(F),i.slideUp(200),a.removeClass(x).addClass(v),l.updateFieldValue(t,"spread",!1)):(n.addClass(F),i.slideDown(200),a.addClass(x).removeClass(v),l.updateFieldValue(t,"spread",!0),c.accordion&&((i=n.siblings("."+k)).removeClass(F),i.children("."+N).slideUp(200),i.find(".layui-tree-icon").children(".layui-icon").removeClass(x).addClass(v))):s="normal"}),e.on("click",function(){p(this).hasClass(u)||(s=n.hasClass(F)?c.onlyIconControl?"open":"close":c.onlyIconControl?"close":"open",a[0]&&l.updateFieldValue(t,"checked",a.prop("checked")),c.click&&c.click({elem:n,state:s,data:t}))})},l.prototype.updateFieldValue=function(e,i,a){i in e&&(e[i]=a)},l.prototype.setCheckbox=function(e,i,a){var t,n=this,l=n.config.customName,c=a.prop("checked");a.prop("disabled")||("object"!=typeof i[l.children]&&!e.find("."+N)[0]||e.find("."+N).find('input[same="layuiTreeCheck"]').each(function(e){this.disabled||((e=i[l.children][e])&&n.updateFieldValue(e,"checked",c),n.updateFieldValue(this,"checked",c))}),(t=function(e){var i,a,n;e.parents("."+k)[0]&&(a=(e=e.parent("."+N)).parent(),n=e.prev().find('input[same="layuiTreeCheck"]'),c?n.prop("checked",c):(e.find('input[same="layuiTreeCheck"]').each(function(){this.checked&&(i=!0)}),i||n.prop("checked",!1)),t(a))})(e),n.renderForm("checkbox"))},l.prototype.checkClick=function(a,n){var t=this,l=t.config;a.children("."+b).children("."+g).on("click",'input[same="layuiTreeCheck"]+',function(e){layui.stope(e);var e=p(this).prev(),i=e.prop("checked");e.prop("disabled")||(t.setCheckbox(a,n,e),t.updateFieldValue(n,"checked",i),l.oncheck&&l.oncheck({elem:a,checked:i,data:n}))})},l.prototype.operate=function(r,d){var s=this,o=s.config,u=o.customName,e=r.children("."+b),h=e.children("."+g);e.children(".layui-tree-btnGroup").on("click",".layui-icon",function(e){layui.stope(e);var i,e=p(this).data("type"),n=r.children("."+N),t={data:d,type:e,elem:r};if("add"==e){n[0]||(o.showLine?(h.find("."+C).addClass("layui-tree-icon"),h.find("."+C).children(".layui-icon").addClass(v).removeClass("layui-icon-file")):h.find(".layui-tree-iconArrow").removeClass(m),r.append('
      '));var a,l=o.operate&&o.operate(t),c={};if(c[u.title]=o.text.defaultNodeName,c[u.id]=l,s.tree(r.children("."+N),[c]),o.showLine&&(n[0]?(n.hasClass(S)||n.addClass(S),r.find("."+N).each(function(){p(this).children("."+k).last().addClass(T)}),(n.children("."+k).last().prev().hasClass(T)?n.children("."+k).last().prev():n.children("."+k).last()).removeClass(T),!r.parent("."+N)[0]&&r.next()[0]&&n.children("."+k).last().removeClass(T)):(l=r.siblings("."+k),a=1,c=r.parent("."+N),layui.each(l,function(e,i){p(i).children("."+N)[0]||(a=0)}),(1==a?(l.children("."+N).addClass(L),l.children("."+N).children("."+k).removeClass(T),r.children("."+N).addClass(L),c.removeClass(S),c.children("."+k).last().children("."+N).children("."+k).last()):r.children("."+N).children("."+k)).addClass(T))),!o.showCheckbox)return;h.find('input[same="layuiTreeCheck"]')[0].checked&&(r.children("."+N).children("."+k).last().find('input[same="layuiTreeCheck"]')[0].checked=!0),s.renderForm("checkbox")}else"update"==e?(l=h.children("."+w).html(),h.children("."+w).html(""),h.append(''),h.children(".layui-tree-editInput").val(f.unescape(l)).focus(),i=function(e){var i=f.escape(e.val().trim())||o.text.defaultNodeName;e.remove(),h.children("."+w).html(i),t.data[u.title]=i,o.operate&&o.operate(t)},h.children(".layui-tree-editInput").blur(function(){i(p(this))}),h.children(".layui-tree-editInput").on("keydown",function(e){13===e.keyCode&&(e.preventDefault(),i(p(this)))})):y.confirm('\u786e\u8ba4\u5220\u9664\u8be5\u8282\u70b9 "'+(d[u.title]||"")+'" \u5417\uff1f',function(e){var l,a,i;o.operate&&o.operate(t),t.status="remove",y.close(e),r.prev("."+k)[0]||r.next("."+k)[0]||r.parent("."+N)[0]?(r.siblings("."+k).children("."+b)[0]?(o.showCheckbox&&(l=function(e){var i,a,n,t;e.parents("."+k)[0]&&(i=e.siblings("."+k).children("."+b),a=(e=e.parent("."+N).prev()).find('input[same="layuiTreeCheck"]')[0],n=1,(t=0)==a.checked)&&(i.each(function(e,i){i=p(i).find('input[same="layuiTreeCheck"]')[0];0!=i.checked||i.disabled||(n=0),i.disabled||(t=1)}),1==n)&&1==t&&(a.checked=!0,s.renderForm("checkbox"),l(e.parent("."+k)))})(r),o.showLine&&(e=r.siblings("."+k),a=1,i=r.parent("."+N),layui.each(e,function(e,i){p(i).children("."+N)[0]||(a=0)}),1==a?(n[0]||(i.removeClass(S),e.children("."+N).addClass(L),e.children("."+N).children("."+k).removeClass(T)),(r.next()[0]?i.children("."+k).last():r.prev()).children("."+N).children("."+k).last().addClass(T),r.next()[0]||r.parents("."+k)[1]||r.parents("."+k).eq(0).next()[0]||r.prev("."+k).addClass(T)):!r.next()[0]&&r.hasClass(T)&&r.prev().addClass(T))):(e=r.parent("."+N).prev(),o.showLine?(e.find("."+C).removeClass("layui-tree-icon"),e.find("."+C).children(".layui-icon").removeClass(x).addClass("layui-icon-file"),(i=e.parents("."+N).eq(0)).addClass(S),i.children("."+k).each(function(){p(this).children("."+N).children("."+k).last().addClass(T)})):e.find(".layui-tree-iconArrow").addClass(m),r.parents("."+k).eq(0).removeClass(F),r.parent("."+N).remove()),r.remove()):(r.remove(),s.elem.append(s.elemNone))})})},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=p(this),a=e.val(),e=e.nextAll(),n=[];e.find("."+w).each(function(){var i,e=p(this).parents("."+b);-1!=p(this).html().indexOf(a)&&(n.push(p(this).parent()),(i=function(e){e.addClass("layui-tree-searchShow"),e.parent("."+N)[0]&&i(e.parent("."+N).parent("."+k))})(e.parent("."+k)))}),e.find("."+b).each(function(){var e=p(this).parent("."+k);e.hasClass("layui-tree-searchShow")||e.addClass(m)}),0==e.find(".layui-tree-searchShow").length&&i.elem.append(i.elemNone),t.onsearch&&t.onsearch({elem:n})}),i.elem.find(".layui-tree-search").on("keydown",function(){p(this).nextAll().find("."+b).each(function(){p(this).parent("."+k).removeClass("layui-tree-searchShow "+m)}),p(".layui-tree-emptyText")[0]&&p(".layui-tree-emptyText").remove()})},l.prototype.getChecked=function(){var t=this,e=t.config,l=e.customName,i=[],a=[],c=(t.elem.find(".layui-form-checked").each(function(){i.push(p(this).prev()[0].value)}),function(e,n){layui.each(e,function(e,a){layui.each(i,function(e,i){if(a[l.id]==i)return t.updateFieldValue(a,"checked",!0),delete(i=p.extend({},a))[l.children],n.push(i),a[l.children]&&(i[l.children]=[],c(a[l.children],i[l.children])),!0})})});return c(p.extend({},e.data),a),a},l.prototype.setChecked=function(l){this.config;this.elem.find("."+k).each(function(e,i){var a=p(this).data("id"),n=p(i).children("."+b).find('input[same="layuiTreeCheck"]'),t=n.next();if("number"==typeof l){if(a.toString()==l.toString())return n[0].checked||t.click(),!1}else"object"==typeof l&&layui.each(l,function(e,i){if(i.toString()==a.toString()&&!n[0].checked)return t.click(),!0})})},n.that={},n.config={},t.reload=function(e,i){e=n.that[e];return e.reload(i),n.call(e)},t.getChecked=function(e){return n.that[e].getChecked()},t.setChecked=function(e,i){return n.that[e].setChecked(i)},t.render=function(e){e=new l(e);return n.call(e)},e(a,t)});layui.define(["laytpl","form"],function(e){"use strict";var d=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=d.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)}}},s="layui-hide",u="layui-btn-disabled",c="layui-none",r="layui-transfer-box",h="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=d.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=d.extend({},t.config,e),t.render()},v.prototype.render=function(){var e=this,t=e.config,a=e.elem=d(n(p,{open:"{{",close:"}}"}).render({data:t,index:e.index})),i=t.elem=d(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("."+r),e.layHeader=e.elem.find("."+h),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(c){var r=this,o=r.config;c=c||{},r.layBox.each(function(e){var t=d(this),a=t.find("."+f),t=t.find("."+h).find('input[type="checkbox"]'),i=a.find('input[type="checkbox"]'),n=0,l=!1;i.each(function(){var e=d(this).data("hide");(this.checked||this.disabled||e)&&n++,this.checked&&!e&&(l=!0)}),t.prop("checked",l&&n===i.length),r.layBtn.eq(e)[l?"removeClass":"addClass"](u),c.stopNone||(i=a.children("li:not(."+s+")").length,r.noneView(a,i?"":o.text.none))}),r.renderForm("checkbox")},v.prototype.noneView=function(e,t){var a=d('

        '+(t||"")+"

        ");e.find("."+c)[0]&&e.find("."+c).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(){d(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=d.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),c=[],t=(t?((a=(t=t).find('input[type="checkbox"]'))[0].checked=!1,l.siblings("."+r).find("."+f).append(t.clone()),t.remove(),c.push(a[0].value),i.setValue()):l.each(function(e){d(this).find("."+f).children("li").each(function(){var e=d(this),t=e.find('input[type="checkbox"]'),a=t.data("hide");t[0].checked&&!a&&(t[0].checked=!1,l.siblings("."+r).find("."+f).append(e.clone()),e.remove(),c.push(t[0].value)),i.setValue()})}),i.renderCheckBtn(),l.siblings("."+r).find("."+o+" input"));""!==t.val()&&t.trigger("keyup"),n.onchange&&n.onchange(i.getData(c),e)},v.prototype.events=function(){var n=this,l=n.config;n.elem.on("click",'input[lay-filter="layTransferCheckbox"]+',function(){var e=d(this).prev(),t=e[0].checked,a=e.parents("."+r).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=d(this),a=t.children('input[type="checkbox"]'),i=t.parent().parent().data("index");a[0].disabled||!1!==("function"==typeof l.dblclick?l.dblclick({elem:t,data:n.getData([a[0].value])[0],index:i}):null)&&n.transfer(i,t)}),n.layBtn.on("click",function(){var e=d(this),t=e.data("index");e.hasClass(u)||n.transfer(t)}),n.laySearch.find("input").on("keyup",function(){var i=this.value,e=d(this).parents("."+o).eq(0).siblings("."+f),t=e.children("li"),t=(t.each(function(){var e=d(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"](s),t.data("hide",!a)}),n.renderCheckBtn(),t.length===e.children("li."+s).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 o=layui.$,l=layui.lay,t=(layui.hint(),layui.device(),{config:{},set:function(e){var n=this;return n.config=o.extend({},n.config,e),n},on:function(e,n){return layui.onevent.call(this,r,e,n)}}),r="carousel",s="layui-this",u="layui-carousel-left",c="layui-carousel-right",m="layui-carousel-prev",h="layui-carousel-next",a="layui-carousel-arrow",d="layui-carousel-ind",n=function(e){var n=this;n.config=o.extend({},n.config,t.config,e),n.render()};n.prototype.config={width:"600px",height:"280px",full:!1,arrow:"hover",indicator:"inside",autoplay:!0,interval:3e3,anim:"",trigger:"click",index:0},n.prototype.render=function(){var e=this,n=e.config,i=o(n.elem);if(1*[carousel-item]>*"),n.index<0&&(n.index=0),n.index>=e.elemItem.length&&(n.index=e.elemItem.length-1),n.interval<800&&(n.interval=800),n.full?n.elem.css({position:"fixed",width:"100%",height:"100%",zIndex:9999}):n.elem.css({width:n.width,height:n.height}),n.elem.attr("lay-anim",n.anim),e.elemItem.eq(n.index).addClass(s),e.indicator(),e.arrow(),e.autoplay(),1=this.elemItem.length?0:e},n.prototype.addIndex=function(e){var n=this.config;n.index=n.index+(e=e||1),n.index>=this.elemItem.length&&(n.index=0)},n.prototype.subIndex=function(e){var n=this.config;n.index=n.index-(e=e||1),n.index<0&&(n.index=this.elemItem.length-1)},n.prototype.autoplay=function(){var e=this,n=e.config,i=e.elemItem.length;n.autoplay&&(clearInterval(e.timer),1',''].join(""));e.elem.attr("lay-arrow",e.arrow),e.elem.find("."+a)[0]&&e.elem.find("."+a).remove(),1i.index?n.slide("add",e-i.index):e
          ',(n=[],layui.each(e.elemItem,function(e){n.push("")}),n.join("")),"
        "].join(""));i.elem.attr("lay-indicator",i.indicator),i.elem.find("."+d)[0]&&i.elem.find("."+d).remove(),1t[a?"height":"width"]()/3)&&o.slide(0a.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)),'
          "),n=1;n<=a.length;n++){var o='
        • ";a.half&&parseInt(a.value)!==a.value&&n==Math.ceil(a.value)?i=i+'
        • ":i+=o}i+="
        "+(a.text?''+a.value+"\u661f":"")+"";var l=a.elem,s=l.next(".layui-rate");s[0]&&s.remove(),e.elemTemp=u(i),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 n=this.config,t=this.elemTemp,i=t.find("i").width(),l=t.children("li");l.each(function(e){var a=e+1,l=u(this);l.on("click",function(e){n.value=a,n.half&&e.pageX-u(this).offset().left<=i/2&&(n.value=n.value-.5),n.text&&t.next("span").text(n.value+"\u661f"),n.choose&&n.choose(n.value),n.setText&&n.setText(n.value)}),l.on("mousemove",function(e){t.find("i").each(function(){u(this).addClass(h).removeClass(s)}),t.find("i:lt("+a+")").each(function(){u(this).addClass(f).removeClass(v)}),n.half&&e.pageX-u(this).offset().left<=i/2&&l.children("i").addClass(o).removeClass(f)}),l.on("mouseleave",function(){t.find("i").each(function(){u(this).addClass(h).removeClass(s)}),t.find("i:lt("+Math.floor(n.value)+")").each(function(){u(this).addClass(f).removeClass(v)}),n.half&&parseInt(n.value)!==n.value&&t.children("li:eq("+Math.floor(n.value)+")").children("i").addClass(o).removeClass("layui-icon-rate-solid layui-icon-rate")})}),r.touchSwipe(t,{onTouchMove:function(e,a){var i;Date.now()-a.timeStart<=200||(a=e.touches[0].pageX,e=t.width()/n.length,a=(a-t.offset().left)/e,(i=(i=(e=a%1)<=.5&&n.half?.5+(a-e):Math.ceil(a))>n.length?n.length:i)<0&&(i=0),l.each(function(e){var a=u(this).children("i"),l=Math.ceil(i)-e==1,t=Math.ceil(i)>e,e=i-e==.5;t?(a.addClass(f).removeClass(v),n.half&&e&&a.addClass(o).removeClass(f)):a.addClass(h).removeClass(s),a.toggleClass("layui-rate-hover",l)}),n.value=i,n.text&&t.next("span").text(n.value+"\u661f"),n.setText&&n.setText(n.value))},onTouchEnd:function(e,a){Date.now()-a.timeStart<=200||(t.find("i").removeClass("layui-rate-hover"),n.choose&&n.choose(n.value),n.setText&&n.setText(n.value))}})},a.prototype.events=function(){},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(o){"use strict";var w=layui.$,l=function(o){};l.prototype.load=function(o){var i,n,r,l,c,m,e,t,a,f,s,u,p,d,y,g=this,h=0,v=w((o=o||{}).elem);if(v[0])return c=w(o.scrollElem||document),m="mb"in o?o.mb:50,e=!("isAuto"in o)||o.isAuto,t=o.moreText||"\u52a0\u8f7d\u66f4\u591a",a=o.end||"\u6ca1\u6709\u66f4\u591a\u4e86",f="top"===(o.direction||"bottom"),g._cleanup(v,c),s=o.scrollElem&&o.scrollElem!==document,p=w('"),v.find(".layui-flow-more")[0]||v[f?"prepend":"append"](p),d=function(o,l){var e=s?c.prop("scrollHeight"):document.documentElement.scrollHeight,t=c.scrollTop();o=w(o),p[f?"after":"before"](o),(l=0==l||null)?p.html(a):p.find("a").html(u),n=l,i=null,r&&r(),f&&(o=s?c.prop("scrollHeight"):document.documentElement.scrollHeight,1===h?c.scrollTop(o):1'),"function"==typeof o.done&&o.done(++h,d)})(),p.find("a").on("click.flow",function(){w(this);n||i||y()}),o.isLazyimg&&(r=g.lazyimg({elem:o.elem+" img",scrollElem:o.scrollElem,direction:o.direction})),e&&c.on("scroll.flow",function(){var e=w(this),t=e.scrollTop();l&&clearTimeout(l),!n&&v.width()&&(l=setTimeout(function(){var o=(s?e:w(window)).height(),l=s?e.prop("scrollHeight"):document.documentElement.scrollHeight;(f?t<=m:l-t-o<=m)&&!i&&y()},100))}),g},l.prototype.lazyimg=function(o){var l,m=this,a=0,f=w((o=o||{}).scrollElem||document),s=o.elem||"img",n="top"===(o.direction||"bottom"),u=o.scrollElem&&o.scrollElem!==document,p=function(l,o){var e,t=f.scrollTop(),o=t+o,i=u?l.offset().top-f.offset().top+t:l.offset().top;(n?i+l.height():i)>=t&&i<=o&&l.attr("lay-src")&&(e=l.attr("lay-src"),layui.img(e,function(){var o=m.lazyimg.elem.eq(a);l.attr("src",e).removeAttr("lay-src"),o[0]&&r(o),a++},function(){m.lazyimg.elem.eq(a);l.removeAttr("lay-src")}))},r=function(o,l){var e=(u?l||f:w(window)).height(),t=f.scrollTop(),i=t+e;if(m.lazyimg.elem=w(s),o)p(o,e);else for(var n=0;n"),preview:"Preview"},wordWrap:!0,lang:"text",highlighter:!1,langMarker:!1},W=layui.code?layui.code.index+1e4:0,R=function(e){return String(e).replace(/\s+$/,"").replace(/^\n|\n$/,"")};e("code",function(l,e){var o,i,t,a,n,d,c,s,r,u,y,p,E,f,h,v,m,L,_,M,C,g={config:l=x.extend(!0,{},T,l),reload:function(e){layui.code(this.updateOptions(e))},updateOptions:function(e){return delete(e=e||{}).elem,x.extend(!0,l,e)},reloadCode:function(e){layui.code(this.updateOptions(e),"reloadCode")}},w=x(l.elem);return 1',l.ln?['
        ',D.digit(t+1)+".","
        "].join(""):"",'
        ',e||" ","
        ",""].join("")})}},a=l.code,n=function(e){return"function"==typeof l.codeParse?l.codeParse(e,l):e},"reloadCode"===e?o.children(".layui-code-wrap").html(w(n(a)).html):(d=layui.code.index=++W,o.attr("lay-code-index",d),(M=A.CDDE_DATA_CLASS in o.data())&&o.attr("class",o.data(A.CDDE_DATA_CLASS)||""),M||o.data(A.CDDE_DATA_CLASS,o.attr("class")),c={copy:{className:"file-b",title:["\u590d\u5236\u4ee3\u7801"],event:function(e){var t=D.unescape(n(l.code));lay.clipboard.writeText({text:t,done:function(){N.msg("\u5df2\u590d\u5236",{icon:1})},error:function(){N.msg("\u590d\u5236\u5931\u8d25",{icon:2})}}),"function"==typeof l.onCopy&&l.onCopy(t)}}},function b(){var e=o.parent("."+A.ELEM_PREVIEW),t=e.children("."+A.ELEM_TAB),a=e.children("."+A.ELEM_ITEM+"-preview");return t.remove(),a.remove(),e[0]&&o.unwrap(),b}(),l.preview&&(M="LAY-CODE-DF-"+d,f=l.layout||["code","preview"],s="iframe"===l.preview,E=x('
        '),C=x('
        '),r=x('
        '),_=x('
        '),u=x('
        '),l.id&&E.attr("id",l.id),E.addClass(l.className),C.attr("lay-filter",M),layui.each(f,function(e,t){var a=x('
      • ');0===e&&a.addClass("layui-this"),a.html(l.text[t]),r.append(a)}),x.extend(c,{full:{className:"screen-full",title:["\u6700\u5927\u5316\u663e\u793a","\u8fd8\u539f\u663e\u793a"],event:function(e){var e=e.elem,t=e.closest("."+A.ELEM_PREVIEW),a="layui-icon-"+this.className,i="layui-icon-screen-restore",l=this.title,o=x("html,body"),n="layui-scrollbar-hide";e.hasClass(a)?(t.addClass(A.ELEM_FULL),e.removeClass(a).addClass(i),e.attr("title",l[1]),o.addClass(n)):(t.removeClass(A.ELEM_FULL),e.removeClass(i).addClass(a),e.attr("title",l[0]),o.removeClass(n))}},window:{className:"release",title:["\u5728\u65b0\u7a97\u53e3\u9884\u89c8"],event:function(e){D.openWin({content:n(l.code)})}}}),l.copy&&("array"===layui.type(l.tools)?-1===l.tools.indexOf("copy")&&l.tools.unshift("copy"):l.tools=["copy"]),u.on("click",">i",function(){var e=x(this),t=e.data("type"),e={elem:e,type:t,options:l,rawCode:l.code,finalCode:D.unescape(n(l.code))};c[t]&&"function"==typeof c[t].event&&c[t].event(e),"function"==typeof l.toolsEvent&&l.toolsEvent(e)}),l.addTools&&l.tools&&(l.tools=[].concat(l.tools,l.addTools)),layui.each(l.tools,function(e,t){var a="object"==typeof t,i=a?t:c[t]||{className:t,title:[t]},l=i.className||i.type,o=i.title||[""],a=a?i.type||l:t;a&&(c[a]||((t={})[a]=i,x.extend(c,t)),u.append(''))}),o.addClass(A.ELEM_ITEM).wrap(E),C.append(r),l.tools&&C.append(u),o.before(C),s&&_.html(''),y=function(e){var t=e.children("iframe")[0];s&&t?t.srcdoc=n(l.code):e.html(l.code),setTimeout(function(){"function"==typeof l.done&&l.done({container:e,options:l,render:function(){I.render(e.find(".layui-form")),S.render()}})},3)},"preview"===f[0]?(_.addClass(A.ELEM_SHOW),o.before(_),y(_)):o.addClass(A.ELEM_SHOW).after(_),l.previewStyle=[l.style,l.previewStyle].join(""),_.attr("style",l.previewStyle),S.on("tab("+M+")",function(e){var t=x(this),a=x(e.elem).closest("."+A.ELEM_PREVIEW).find("."+A.ELEM_ITEM),e=a.eq(e.index);a.removeClass(A.ELEM_SHOW),e.addClass(A.ELEM_SHOW),"preview"===t.attr("lay-id")&&y(e),L()})),p=x(''),o.addClass((E=["layui-code-view layui-border-box"],l.wordWrap||E.push("layui-code-nowrap"),E.join(" "))),(C=l.theme||l.skin)&&(o.removeClass("layui-code-theme-dark layui-code-theme-light"),o.addClass("layui-code-theme-"+C)),l.highlighter&&o.addClass([l.highlighter,"language-"+l.lang,"layui-code-hl"].join(" ")),f=w(l.encode?D.escape(n(a)):a),h=f.lines,o.html(p.html(f.html)),l.ln&&o.append('
        '),l.height&&p.css("max-height",l.height),l.codeStyle=[l.style,l.codeStyle].join(""),l.codeStyle&&p.attr("style",function(e,t){return(t||"")+l.codeStyle}),v=[{selector:">.layui-code-wrap>.layui-code-line{}",setValue:function(e,t){e.style["padding-left"]=t+"px"}},{selector:">.layui-code-wrap>.layui-code-line>.layui-code-line-number{}",setValue:function(e,t){e.style.width=t+"px"}},{selector:">.layui-code-ln-side{}",setValue:function(e,t){e.style.width=t+"px"}}],m=lay.style({target:o[0],id:"DF-code-"+d,text:x.map(x.map(v,function(e){return e.selector}),function(e,t){return['.layui-code-view[lay-code-index="'+d+'"]',e].join(" ")}).join("")}),L=function b(){var e,i;return l.ln&&(e=Math.floor(h.length/100),i=p.children("."+A.ELEM_LINE).last().children("."+A.ELEM_LINE_NUM).outerWidth(),o.addClass(A.ELEM_LN_MODE),e)&&A.LINE_RAW_WIDTH
      • ')).html(l.title||l.text.code),o.prepend(_)),M=x('
        '),l.copy&&!l.preview&&((C=x(['','',""].join(""))).on("click",function(){c.copy.event()}),M.append(C)),l.langMarker&&M.append(''+l.lang+""),l.about&&M.append(l.about),o.append(M),l.preview||setTimeout(function(){"function"==typeof l.done&&l.done({})},3),l.elem.length===1+d&&"function"==typeof l.allDone&&l.allDone())),g})}),layui["layui.all"]||layui.addcss("modules/code.css?v=6","skincodecss"); +//# sourceMappingURL=layui.js.map diff --git a/web/static/layui/layui.js.map b/web/static/layui/layui.js.map new file mode 100644 index 0000000..3dea730 --- /dev/null +++ b/web/static/layui/layui.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["layui.js","modules/layui.all.js","modules/lay.js","modules/laytpl.js","modules/laypage.js","modules/laydate.js","modules/jquery.js","modules/layer.js","modules/util.js","modules/dropdown.js","modules/slider.js","modules/colorpicker.js","modules/element.js","modules/upload.js","modules/form.js","modules/table.js","modules/treeTable.js","modules/tree.js","modules/transfer.js","modules/carousel.js","modules/rate.js","modules/flow.js","modules/code.js"],"names":["win","jsPath","doc","document","config","modules","status","timeout","event","Layui","this","v","GLOBAL","LAYUI_GLOBAL","getPath","currentScript","tagName","toUpperCase","src","js","getElementsByTagName","last","length","i","readyState","dir","substring","lastIndexOf","error","msg","type","console","isOpera","opera","toString","builtin","lay","layer","laydate","laypage","laytpl","form","upload","dropdown","transfer","tree","table","treeTable","element","rate","colorpicker","slider","carousel","flow","util","code","jquery","all","layui.all","EV_REMOVE","prototype","cache","define","deps","factory","use","setApp","app","exports","layui","callback","apps","from","node","url","that","head","item","jQuery","fn","on","each","index","splice","$","onScriptLoad","e","readyRegExp","navigator","platform","test","currentTarget","srcElement","removeChild","poll","onCallback","setTimeout","push","slice","apply","host","match","location","base","replace","createElement","async","charset","version","Date","getTime","appendChild","attachEvent","indexOf","addEventListener","disuse","isArray","getStyle","name","style","currentStyle","getComputedStyle","getPropertyValue","link","href","cssname","id","STAUTS_NAME","debug","rel","media","getElementById","getLinkElem","parseInt","removeAttribute","getAttribute","setAttribute","addcss","firename","modName","img","Image","complete","onload","onerror","options","key","o","clone","extend","router","hash","data","path","search","split","obj","pathname","_index","substr","settings","storage","localStorage","JSON","parse","value","remove","stringify","sessionData","sessionStorage","device","agent","userAgent","toLowerCase","getVersion","label","exp","RegExp","result","os","ie","ActiveXObject","weixin","android","ios","mobile","hint","_typeof","operand","String","Object","call","_isArray","len","callFn","sort","arr","desc","notClone","o1","o2","v1","v2","isNaN","isNum","reverse","stope","thisEvent","stopPropagation","cancelBubble","onevent","events","params","filter","eventName","filterName","_","off","debounce","func","wait","context","args","arguments","clearTimeout","throttle","cooldown","window","selector","Class","elem","querySelectorAll","Array","searchElement","fromIndex","rst","val","constructor","ai","target","digit","num","str","Math","pow","elemName","attr","hasScrollbar","body","scrollHeight","innerHeight","documentElement","clientHeight","getStyleRules","rules","sheet","styleSheet","cssRules","styleText","text","cssText","innerHTML","styleElem","find","append","position","opts","scrollArea","winArea","margin","top","offsetX","offsetY","rect1","clickType","rect","left","clientX","clientY","right","bottom","getBoundingClientRect","elemWidth","offsetWidth","elemHeight","offsetHeight","align","allowBottomOut","offset","SYSTEM_RELOAD","othis","attrName","attrValue","Function","ev","errorText","join","isTopElem","topElems","matched","clipboard","writeText","legacyCopy","opacity","select","execCommand","done","err","then","passiveSupported","defineProperty","get","removeEventListener","touchEventsSupported","touchSwipe","state","onMove","onEnd","targetElem","pointerStart","x","y","pointerEnd","distanceX","distanceY","direction","timeStart","onStart","touches","passive","now","onTouchStart","preventDefault","abs","onTouchMove","onTouchEnd","__lay_touchswipe_cb_","addEvent","eventsCacheName","listener","include","_rawFn","removeEvent","newEvents","detachEvent","onClickOutside","handler","eventType","scopeTarget","scope","ignore","useCapture","capture","el","eventTarget","eventPath","composedPath","undefined","concat","getParents","memo","parentNode","shouldIgnore","targetElements","j","targetEl","addStr","new_str","ii","removeStr","isObject","children","contains","child","addClass","className","removeClass","hasClass","has","css","parseValue","thisKey","thisValue","width","height","removeAttr","html","open","close","tool","escape","inner","source","template","tagExp","__","jss","jsse","tag","start","render","DISABLED","view","elemArr","countText","plate","groups","Number","layout","count","curr","limits","limit","pages","ceil","prev","next","views","page","pager","first","halve","floor","end","max","theme","def","limitTemplet","refresh","skip","skipText","jump","isskip","childs","btn","input","nodeName","keyCode","load","even","isLayui","ready","MOD_NAME","MOD_ID","weekStart","laydate_dir","set","thisModule","inst","content","reload","THIS","LIMIT_YEAR","ELEM_STATIC","ELEM_LIST","ELEM_SELECTED","ELEM_HINT","ELEM_PREV","ELEM_NEXT","ELEM_CONFIRM","ELEM_TIME_TEXT","ELEM_TIME_BTN","ELEM_PREVIEW","ELEM_SHADE","newThat","getThis","init","dateType","formatArr","format","isLeapYear","year","range","isInitValue","min","trigger","show","showBottom","isPreview","btns","lang","calendar","mark","holidays","zIndex","change","autoConfirm","shade","cn","weeks","time","timeTips","startTime","endTime","dateTips","month","tools","confirm","clear","invalidDate","formatError","preview","en","markerOfChineseFestivals","0-1-1","0-2-14","0-3-8","0-3-12","0-4-1","0-5-1","0-5-4","0-6-1","0-9-10","0-10-1","0-12-25","isStatic","date","datetime","eventElem","fullPanel","rangeStr","rangeLinked","autoCalendarModel","startDate","endDate","auto","rangeElem","EXP_IF","EXP_SPLIT","EXP","EXP_IF_ONE","isInput","ymd","hms","day","tDate","newDate","getFullYear","getMonth","getDate","hours","minutes","seconds","thisDate","getHours","getMinutes","getSeconds","elemID","formatToDisplay","setValue","systemDate","themeStr","shortcutBtns","colorTheme","class","elemMain","elemHeader","elemCont","elemTable","divFooter","footer","divShortcut","shortcut","divHeader","headerChild","divContent","thead","theadTr","tr","insertRow","th","insertCell","insertBefore","ELEM_MAIN","title","shortcuts","btnSetting","dataset","timeBtn","dateTime","endState","listYM","checkDate","click","main","isPrimaryColor","thisElemDate","thisId","insertAdjacentHTML","changeEvent","renderAdditional","div","hinTimer","ms","getAsYM","Y","M","thisMaxDate","vals","arrDate","minMaxError","checkValid","getEndDate","initDate","startEnd","thisv","parseFloat","EYM","_i","_v","getDateTime","markRender","tdElem","YMD","markers","markText","keys","td","holidaysRender","insertHtml","idx","dayStr","ymdStr2","ymd1","ymd2","ymdStr1","cellRender","dateObj","panelMode","originElem","startOfYear","setFullYear","setHours","endOfYear","startOfMonth","setDate","endOfMonth","addDays","amount","isDisabledYearOrMonth","startDay","endDay","numOfDays","disabledCount","disabledDate","isDisabledDate","rangeType","disabledType","normalizedDate","isDisabledTime","isDisabledItem","disabledTime","compareVal","rangeFn","rangeFnParam","isDisabledDateTime","timestamp","isOut","thisDateTime","startWeek","prevMaxDate","isAlone","tds","elemYM","firstDate","getDay","index_","st","panelYM","list","setBtnStatus","timeParams","stampRange","yearNum","setTimeStatus","showHour","liElem","hideCount","scroll","haveSpan","ul","haveList","isCN","startY","li","lay-ym","ol","childUL","showMinute","showSecond","isShow","isYearOrMonth","isChangeMonth","ym","closeList","choose","span","scrollTop","olElem","overflowY","touchAction","tips","elemBtn","displayValueCallback","props","getOwnPropertyDescriptor","HTMLInputElement","displayValue","elemPreview","color","thisTime","param","checkPanelDate","panelMonth","startPanel","firstRenderIndex","needFullRender","panelIndex","isChange","dateTimeTemp","renderMode","checkState","panelIdx","active","addSubYear","isYear","isMonth","prevYear","prevMonth","YM","nextMonth","nextYear","header","layYM","layType","toLocaleLowerCase","showEvent","eventHandler","unbind","run","closeStop","getInst","one","amd","global","module","w","Error","noGlobal","deletedIds","class2type","hasOwn","hasOwnProperty","support","rtrim","rmsPrefix","rdashAlpha","fcamelCase","letter","isArrayLike","isWindow","toArray","pushStack","elems","ret","merge","prevObject","map","eq","copyIsArray","copy","deep","isFunction","isPlainObject","expando","random","isReady","noop","isNumeric","realStringObj","isEmptyObject","nodeType","ownFirst","globalEval","trim","execScript","camelCase","string","makeArray","results","inArray","second","grep","invert","matches","callbackExpect","arg","guid","proxy","tmp","Symbol","iterator","Sizzle","Expr","getText","isXML","tokenize","compile","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","pop","push_native","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","escaped","escapedWhitespace","high","fromCharCode","unloadHandler","childNodes","els","seed","m","nid","nidselect","newSelector","newContext","ownerDocument","exec","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","shift","markFunction","assert","addHandle","attrs","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createPositionalPseudo","argument","matchIndexes","parent","defaultView","createComment","getById","getElementsByName","attrId","getAttributeNode","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","hasCompare","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","useCache","lastChild","uniqueID","pseudo","setFilters","not","matcher","unmatched","innerText","elemLang","root","focus","activeElement","hasFocus","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","button","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","addCombinator","combinator","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","matcherIn","matcherOut","filters","parseOnly","soFar","preFilters","cached","elementMatchers","setMatchers","bySet","byElement","superMatcher","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","div1","defaultValue","unique","isXMLDoc","until","truncate","is","siblings","n","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","rootjQuery","rparentsprev","charAt","parseHTML","guaranteedUnique","contents","sibling","targets","closest","l","pos","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","contentWindow","readyList","rnotwhite","detach","completed","Callbacks","object","flag","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","disable","lock","fireWith","Deferred","tuples","promise","always","deferred","fail","fns","newDefer","tuple","returned","progress","notify","resolve","reject","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","remaining","updateFunc","values","notifyWith","resolveWith","readyWait","holdReady","hold","triggerHandler","doScroll","frameElement","doScrollCheck","inlineBlockNeedsLayout","container","zoom","deleteExpando","shrinkWrapBlocksVal","acceptData","noData","rbrace","rmultiDash","dataAttr","parseJSON","isEmptyDataObject","internalData","pvt","internalKey","isNode","toJSON","thisCache","internalRemoveData","cleanData","applet ","embed ","object ","hasData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","defer","shrinkWrapBlocks","pnum","rcssNum","cssExpand","isHidden","adjustCSS","prop","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","access","chainable","emptyGet","raw","bulk","rcheckableType","rtagName","rscriptType","rleadingWhitespace","nodeNames","createSafeFragment","safeFrag","createDocumentFragment","fragment","leadingWhitespace","tbody","htmlSerialize","html5Clone","cloneNode","outerHTML","appendChecked","noCloneChecked","checkClone","noCloneEvent","wrapMap","option","legend","area","col","_default","getAll","found","setGlobalEval","refElements","optgroup","tfoot","colgroup","caption","rhtml","rtbody","fixDefaultChecked","defaultChecked","buildFragment","scripts","selection","ignored","wrap","safe","nodes","htmlPrefilter","createTextNode","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","types","origFn","t","handleObjIn","special","eventHandle","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","handleObj","namespace","delegateCount","setup","mappedTypes","origCount","teardown","onlyHandlers","ontype","bubbleType","Event","isTrigger","rnamespace","noBubble","parentWindow","isPropagationStopped","isDefaultPrevented","fix","handlerQueue","delegateTarget","preDispatch","isImmediatePropagationStopped","postDispatch","sel","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","metaKey","original","which","charCode","eventDoc","fromElement","pageX","scrollLeft","clientLeft","pageY","clientTop","relatedTarget","toElement","blur","beforeunload","returnValue","simulate","isSimulated","defaultPrevented","timeStamp","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","_submitBubble","propertyName","_justChanged","attaches","rinlinejQuery","rnoshimcache","rxhtmlTag","rnoInnerhtml","rchecked","rscriptTypeMasked","rcleanScript","fragmentDiv","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","oldData","curData","domManip","collection","hasScripts","iNoClone","_evalUrl","keepData","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","fixCloneNodeIssues","defaultSelected","forceAcceptData","prepend","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","HTML","BODY","actualDisplay","display","defaultDisplay","write","pixelPositionVal","pixelMarginRightVal","boxSizingReliableVal","reliableHiddenOffsetsVal","reliableMarginRightVal","reliableMarginLeftVal","rmargin","rnumnonpx","swap","old","computeStyleTests","divStyle","marginLeft","marginRight","getClientRects","borderCollapse","cssFloat","backgroundClip","clearCloneStyle","boxSizing","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","boxSizingReliable","pixelMarginRight","pixelPosition","reliableMarginRight","reliableMarginLeft","getStyles","curCSS","rposition","addGetHookIf","conditionFn","hookFn","opener","computed","maxWidth","minWidth","rs","rsLeft","runtimeStyle","pixelLeft","ralpha","ropacity","rdisplayswap","rnumsplit","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","vendorPropName","capName","showHide","hidden","setPositiveNumber","subtract","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","Tween","easing","cssHooks","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","cssProps","float","origName","isFinite","$1","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","propHooks","percent","eased","duration","step","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rrun","createFxNow","genFx","includeWidth","createTween","animation","Animation","tweeners","properties","stopped","prefilters","tick","currentTime","tweens","specialEasing","originalProperties","originalOptions","gotoEnd","rejectWith","timer","anim","*","tweener","oldfire","dataShow","unqueued","overflow","overflowX","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","rspaces","valHooks","optionSet","nodeHook","boolHook","ruseDefault","getSetInput","rfocusable","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rclickable","rclass","removeProp","tabindex","for","getClass","classes","clazz","finalValue","curValue","toggleClass","stateVal","classNames","hover","fnOver","fnOut","nonce","rquery","rvalidtokens","rhash","requireNonComma","depth","comma","parseXML","DOMParser","parseFromString","loadXML","rts","rheaders","rnoContent","rprotocol","rurl","transports","allTypes","ajaxLocation","ajaxLocParts","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxConvert","s","response","isSuccess","conv2","current","conv","converters","responseFields","dataFilter","filterHidden","lastModified","etag","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","cacheURL","responseHeadersString","timeoutTimer","fireGlobals","transport","responseHeaders","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","mimeType","abort","statusText","finalText","success","method","crossDomain","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","responses","firstDataType","ct","finalDataType","modified","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","buildParams","serialize","serializeArray","xhr","createActiveXHR","documentMode","createStandardXHR","xhrId","xhrCallbacks","xhrSupported","XMLHttpRequest","cors","username","xhrFields","isAbort","onreadystatechange","responseText","script","text script","scriptCharset","oldCallbacks","rjsonp","_load","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","getWindow","animated","setOffset","curCSSTop","curTop","curOffset","curCSSLeft","curElem","curLeft","curPosition","using","box","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","bind","delegate","undelegate","size","andSelf","layer_dir","removeFocus","beforeEnd","resize","minStackIndex","minStackArr","STATUS_NAME","alert","yes","cancel","btn2","rskin","skin","doms","closeBtn","icon","follow","fixed","setings","creat","pt","SHADE_KEY","0","1","2","3","4","5","6","slideLeft","slideRight","SHADE","MOVE","RECORD_HEIGHT_KEY","move","isOutAnim","minStack","moveType","scrollbar","vessel","conType","times","titype","ismax","maxmin","titleHTML","face","animClass","additFaceClass","btnAlign","layero","elemShade","setAnim","restore","hideOnClose","closeAll","tipsMore","moveElem","shadeo","setScrollbar","background-color","transition","innerWidth","outerWidth","titHeight","outerHeight","btnHeight","setHeight","maxHeight","offsetTop","offsetLeft","layArea","goal","tipsG","guide","autoLeft","tipLeft","where","tipTop","padding-right","_DOC","DATA_NAME","resizeElem","dict","eventMoveElem","eventResizeElem","docEvent","setRig","setBot","X","stX","stY","moveOut","resizing","moveEnd","btnLoading","btnElem","isLoading","openLayer","IE6","btnCallback","btnAsync","loading","promiseLikeResolve","reason","shadeClose","full","reselect","sthis","setTop","record","contentElem","contentRecordHeightElem","restScrollbar","removeProperty","getChildFrame","getFrameIndex","iframeAuto","heg","iframeSrc","elemMin","hasMinLeft","maxminStatus","minLeft","edgeIndex","contentRecordHeight","isfix","executor","closeAnim","WRAP","domsElem","closeLast","layerIndexMax","layerIndexList","isArrayType","prompt","placeholder","formType","maxlength","tab","photos","loop","toolbar","imgIndex","pushData","alt","pid","thumb","imgprev","tabimg","imgnext","errorMsg","keyup","isNumber","getTransform","transforms","rotate","scaleX","touchEndCallback","imgElem","transform","ratio","delta","wheelDelta","detail","zoomElem","threshold","loadi","loadImage","winarea","imgarea","wh","_$","isMobile","_win","propSuffix","deliver","fixbar","elemTopBar","setTopBar","ELEM","$doc","$target","bars","default","$scroll","bar1","bar2","elemBar","lay-type","bgcolor","countdown","clock","countTime","d","h","setTime","timeAgo","onlyDate","stamp","toDateString","years","days","milliseconds","meridiem","getMilliseconds","customMeridiem","hm","yy","yyyy","MM","dd","H","HH","hh","A","mm","ss","SSS","unescape","openWin","specs","toVisibleArea","scrollElem","SCROLL_NAME","OFFSET_NAME","scrollValue","scrollOffset","thisOffset","thisElem","vertical","callbacks","attrSelector","DATANAME","dataCache","_WIN","ELEM_LI","clickOrMousedown","MOD_INDEX","customName","reloadData","STR_ELEM","STR_ITEM_UP","STR_ITEM_DOWN","STR_MENU_TITLE","STR_ITEM_GROUP","STR_ITEM_PARENT","STR_ITEM_CHECKED","STR_ITEM_CHECKED2","STR_MENU_PANEL","STR_MENU_PANEL_L","STR_ELEM_SHADE","STR_GROUP_TITLE","isAllowSpread","isSpreadItem","accordion","closeOnClick","rerender","elemView","elemBody","getDefaultView","elemUl","eachItemView","isChild","templet","group","-","viewLi","viewText","elemPanel","TPL_MAIN","delayRemove","prevElem","isClickAllScope","clickScope","elemGroup","spread","prevTriggerElem","prevInstance","prevOnClose","prevContentElem","prevId","normalizedDelay","isMouseEnter","prevElemCallback","isAccordion","needSpread","groupSibs","isCtxMenu","isTriggerTarget","isPanelTarget","ELEM_LI_PAR","dataParams","SLIDER_BAR","SLIDER_WRAP","SLIDER_WRAP_BTN","SLIDER_TIPS","SLIDER_INPUT_TXT","ELEM_HOVER","showstep","tipsAlways","precision","precisions","decimalArr","minValue","maxValue","scaleFir","scaleSec","hasRender","elemTemp","number","setSliderTipsTxt","sliderWrapBtnElem","tipsTxt","setTips","calcSliderTipsLeft","sliderWidth","sliderWrap","setSliderTipsLeft","margin-bottom","elemInput","slide","sliderAct","sliderTxt","inputValue","offsetValue","round","arrValue","firLeft","valueTo","secLeft","wrapWidth","selfValue","toFixed","oldLeft","elemMove","sliderBtnElem","up","upCall","oldleft","oldx","reaLeft","inputScale","getInputValue","realValue","ICON_PICKER_DOWN","ICON_PICKER_CLOSE","PICKER_TRIG_SPAN","PICKER_TRIG_I","PICKER_SIDE_SLIDER","PICKER_BASIS","PICKER_ALPHA_BG","PICKER_ALPHA_SLIDER","PICKER_BASIS_CUR","PICKER_INPUT","RGBToHSB","rgb","hsb","r","g","HSBToRGB","t1","t3","t2","HSBToHEX","hex","nr","RGBSTo","rgbs","re","$win","alpha","predefine","colors","elemColorBox","bgstr","background","renderPicker","elemPicker","removePicker","thisElemInd","thisColor","pickerEvents","bindElem","elemPickerInput","backgroundColor","side","basis","alphacolor","alphaslider","_h","_b","_s","_a","pre","z","createMoveElem","needTrigger","needStopPropagation","triggerEvent","oldtop","oldy","maxh","maxw","simulatedEvent","pointer","createEvent","initMouseEvent","screenX","screenY","dispatchEvent","sidetop","basisElem","elemColorBoxSpan","colorValue","attrEvent","SHOW","TITLE","Element","NAV_ELEM","tabAdd","layAttr","tabElem","titElem","barElem","contElem","tabChange","tabAuto","tabDelete","layid","force","tabClick","dom","headerElem","NAV_ITEM","NAV_BAR","NAV_TREE","NAV_CHILD","NAV_MORE","NAV_ANIM","bodyElem","elemA","isJump","unselect","hasId","liThis","MORE","BAR","CLOSE","STOPE","allowclose","isSpread","hideTabMore","tsbTitle","clickThis","NAV_ITEMED","needExpand","parentSibs","collapse","isNone","elemFilter","items","nav","timerMore","timeEnd","NAV_TITLE","bar","itemElem","hasBarElem","thisA","breadcrumb","ATTE_SPR","separator","aNode","elemTitle","files","ELEM_FILE","ELEM_FORM","ELEM_IFRAME","ELEM_CHOOSE","UPLOADING","accept","exts","bindAction","field","acceptMime","drag","multiple","cross-domain","data-format-error","check-error","limit-number","limit-size","elemFile","isFile","initIE","elemForm","FileReader","chooseFiles","reader","readAsDataURL","limitSize","getFiles","ajaxSend","successful","failed","allDone","fileLength","total","request","sets","formData","FormData","resetFileState","unified","res","lengthComputable","loaded","iframeSend","iframeBody","forceConvert","convert","thisFile","pushFile","resetFile","filename","newFile","File","getChooseFiles","typeName","images","video","audio","setChooseFile","setChooseText","checkFile","extendInfo","extInfo","ext","sizes","parseSize","FileList","dataTransfer","formatSize","log","HIDE","Form","verify","required","phone","email","identity","autocomplete","getFormElem","itemForm","getValue","nameIndex","fieldElem","init_name","inputs","handleInputNumber","rawValue","noAction","isInit","decimals","controlBtn","increment","decrement","affix","CLASS_WRAP","CLASS_SUFFIX","CLASS_AFFIX","showAffix","renderAffix","affixOptions","elemAffix","elemIcon","hasElemAffix","hasElemSuffix","inputFilter","eye","SHOW_NAME","TIPS","NONE","CREATE_OPTION","PANEL_ELEM_DATA","selects","reElem","titleElem","isSearch","isCreatable","isAppendTo","removeClickOutsideEvent","laySearch","appendTarget","appendPosition","needPlaceholderPatch","showDown","hideDown","followScroll","notOption","dl","dts","initValue","caseSensitive","updatePosition","dlHeight","dds","__ieph","none","posTop","thisDd","ddHeight","setThisDd","prevNext","lastIndex","allDisplayedElem","nextIndex","origin","fuzzyMatchRE","hasEquals","fuzzy","keyword","wordMap","regexPattern","wordArr","c","isCreateOption","thisDds","firstOptionELem","hasTips","createOptionElem","ddElem","optionElem","optionsFirst","contentWrapElem","triggerElem","panelWrapElem","switch","SUBTRA","checks","RE_CLASS","titleTplAttrs","titleTplElem","indeterminate","isSwitch","isPrimary","syncAppearanceOnPropChanged","ICON","radios","ANIM","sameRadios","radioEl","renderItem","itemType","originProps","newValue","validate","intercept","DANGER","vers","verType","thisVer","rule","verst","isForm2Elem","layFilter","verifyElem","$dom","checkName","indexName","numbersName","disabledName","thisTable","setColsWidth","getThisTable","getThisTableConfig","parseTempData","item3","tplData","exportTemplet","LAY_COL","HIDE_V","ELEM_VIEW","ELEM_HEADER","ELEM_BODY","ELEM_FIXR","ELEM_PAGE_VIEW","ELEM_SORT","ELEM_CHECKED","ELEM_EDIT","ELEM_GROUP","ELEM_COL_SPECIAL","ELEM_TOOL_PANEL","ELEM_EXPAND","DISABLED_TRANSITION","DATA_MOVE_NAME","TPL_HEADER","TPL_BODY","eachChildCols","cellMinWidth","cellMaxWidth","MAX_VALUE","editTrigger","defaultToolbar","defaultContextmenu","autoSort","cols","pageName","limitName","statusName","msgName","dataName","totalRowName","countName","pullData","setInit","fullHeightGap","parentDiv","parentHeightGap","customHeightFunc","lay-filter","renderStyle","layTool","layBox","layHeader","layMain","layBody","layFixed","layFixLeft","layFixRight","layTotal","layPage","renderToolbar","renderPagebar","fullSize","initOpts","space","unresize","numbers","getWidth","clientWidth","getElementSize","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","initChildCols","i1","item1","i2","item2","indexChild","childIndex","colspan","rowspan","colGroup","i22","item22","HAS_PARENT","parentKey","lineStyle","trClassName","cellMaxHeight","iconElem","leftDefaultTemp","elemToolTemp","defaultConfig","toolbarHtml","layEvent","onClick","lis","openPanel","eachCols","fieldTitle","setParentCol","panel","exportFile","print","printWin","thElem","edg","onafterprint","itemIsName","thisItem","pagebarHtml","layPagebar","pagebar","parentTh","parentColspan","arrParentKey","getThisCol","colspan2","nextParentKey","setColsPatch","setGroupWidth","lastSpreadCol","colNums","autoColNums","autoWidth","countWidth","cntrWidth","borderWidth","getAutoWidth","getScrollWidth","back","pixelsForLastCol","headerWidth","i3","newWidth","scrollPatch","haveInit","HAS_SET_COLS_PATCH","errorView","elemNone","layNone","syncCheckAll","renderForm","startLimit","initSort","reloadType","renderData","totalRow","parseData","newData","getTrHtml","trsObj","trs","trs_fixed","trs_fixed_r","tds_fixed","tds_fixed_r","LAY_KEY","edit","trAttr","totalRowData","sortKey","pull","scrollPos","tipsIndex","renderTotal","totalNums","dataTotal","TOTAL_NUMS","totalRowDecimals","thisTotalNum","totalRowText","getContent","TOTAL_ROW","patchElem","getColElem","renderFormByElem","checkAllElem","checkStatus","isAll","setRowActive","setRowChecked","makeMap","thisData","existChecked","getChecked","radioCheckedIndex","fixRElem","isCheckAll","isCheckMult","isCheckAllOrMult","dataIndex","checkedSameElem","checkedElem","_field","elemSort","fromEvent","selectorText","headerMain","thIndex","bodyHeight","layMainTable","scrollWidth","outWidth","addPatch","fixHeight","updateRow","ELEM_CELL","row","cell","_BODY","commonMember","oLeft","pLeft","allowResize","ruleWidth","thatTable","setWidth","nowType","clearCacheKey","del","update","fields","setRowEvent","getCol","UNROW","renderGridEdit","editType","ELEM_GRID_DOWN","oldValue","reedit","showGridExpandIcon","elemCell","gridExpand","expandedMode","ELEM_CELL_C","elemCellClose","cellExpandedMode","expandedWidth","cellExpandedWidth","$this","toolFn","borderTopWidth","borderBottomWidth","paddingTop","paddingBottom","marginTop","marginBottom","errorTips","tdIndex","attrData","tableData","trElem","itemData","tableIns","CHILD_COLS","PARENT_COL_INDEX","arrs","eachArrs","invalidNum","getData","textType","csv","xls","alink","dataTitle","dataMain","fieldsIsHide","isTreeTable","reduce","acc","ignoreExport","download","getOptions","hideCol","thisTreeTable","ELEM_FIXL","TABLE_TREE","LAY_DATA_INDEX","LAY_DATA_INDEX_HISTORY","LAY_PARENT_INDEX","LAY_CHECKBOX_HALF","LAY_EXPAND","LAY_HAS_EXPANDED","LAY_ASYNC_STATUS","LAY_CASCADE","HTML_TAG_RE","ICON_PROPS","updateCache","childrenKey","tableCache","itemDataIndex","updateOptions","thatOptionsTemp","treeOptions","idKey","hasNumberCol","hasChecboxCol","hasRadioCol","scrollTopCache","mod","parseDataThat","retData","isSimpleData","enable","flatToTree","updateStatus","initData","renderType","isRenderData","tableView","isExpandAll","layTableAllChooseElem","renderTreeTable","iconProp","normalizedIcon","cascade","isParent","indent","flexIconClose","flexIconOpen","showIcon","iconClose","iconOpen","iconLeaf","showFlexIconIfNotParent","dblClickExpand","expandAllDefault","rootPid","autoParam","beforeExpand","onExpand","iconStr","pIdKey","idTemp","pidTemp","rootNodes","tableId","flatArr","tempObj","treeToFlat","parentId","parentIndex","flat","dataNew","getTreeNode","getParentNode","getNodeByIndex","treeNode","treeNodeData","getNodeDataByIndex","updateNode","removeNode","expandNode","setChecked","getNodeById","tableDataFlat","dataRet","indexArr","getTableData","isParentKey","debounceFn","expandFlag","sonSign","callbackFlag","tableViewElem","treeTableThat","trData","isToggle","trExpand","retValue","trExpanded","trsElem","flexIconElem","trDataId","updateNodeIcon","scopeEl","isExpand","array","asyncSuccessFn","asyncContentType","asyncDataType","asyncJsonpCallback","asyncHeaders","asyncParseData","asyncResponse","str2","str2Obj","dataLevelNew","asyncSetting","asyncUrl","asyncAutoParam","itemArr","asyncType","childItem","data-index","lay-data-index","data-level","childNodesFlat","formatNumber","inherit","expandAll","isAllAsyncDone","isAllExpanded","trAll","trAllObj","dataItem","dataLevel","nodeIconElem","nodeIcon","level","treeOptionsView","dataExpand","nameKey","htmlTemp","itemCell","trIndex","trDefaultExpand","trMain","trFixedL","trFixedR","statusObj","notCascade","dataUpdated","updateObjParams","rowIndex","tableThat","updateFn","checkNode","newNode","trLevel","newNodeTemp","trNew","_keepParent","delNode","nodeP","delNodesFlat","updateCheckStatus","delNodeDataIndex","i4","item4","trEl","addNodes","newNodes","childKey","childrenNodes","dataAfter","childrenNodesFlat","pageOptions","newNodesHtml","newNodesHtmlObj","trIndexPrev","newNodeIndex","newNodeItem","tableViewElemMAIN","tableViewElemFIXL","tableViewElemFIXR","trIndexNext","scrollIntoViewIfNeeded","includeHalfCheck","checkedData","updateData","setRowCheckedClass","dataP","trsP","isIndeterminate","updateParentCheckStatus","indexP","itemP","checkboxElem","checkedNum","inputElem","isRadio","trDataP","radioElem","collectNeedExpandNodeIndex","needExpandIndex","nodeData","checkAllNodes","reloadAsyncNode","dataId","getNodesByFilter","isSingle","nodesResult","ELEM_SET","ICON_CLICK","ICON_ADD","ICON_SUB","ELEM_ENTRY","ELEM_TEXT","ELEM_PACK","ELEM_SPREAD","ELEM_LINE_SHORT","ELEM_SHOW","ELEM_EXTEND","showCheckbox","showLine","onlyIconControl","defaultNodeName","checkids","editIcon","hasChild","packDiv","entryDiv","checkClick","operate","entry","elemCheckbox","elemText","touchOpen","packCont","iconClick","updateFieldValue","sibls","setCheckbox","setParentsChecked","thisNodeElem","parentNodeElem","parentCheckbox","parentPack","oncheck","getVal","returnObj","textNew","elemDel","pare","siblingTree","parentTree","prevDiv","pack","onsearch","checkId","checkData","eachNodes","index2","cloneItem","checkedId","reInput","ELEM_BOX","ELEM_SEARCH","ELEM_DATA","TPL_BOX","checkAllName","showSearch","searchNone","layData","layBtn","listElem","renderCheckBtn","thisDataElem","allElemCheckbox","listElemCheckbox","nums","haveChecked","isHide","stopNone","noneView","createNoneElem","selectedData","thisElemCheckbox","thisBoxElem","siblingInput","thisList","onchange","elemThis","dblclick","thisListElem","isMatch","ELEM_LEFT","ELEM_RIGHT","ELEM_ARROW","ELEM_IND","arrow","indicator","autoplay","elemItem","prevIndex","addIndex","subIndex","itemsCount","tplArrow","goto","tplInd","elemInd","thisIndex","haveSlide","touchEl","isVertical","distance","ICON_RATE","ICON_RATE_SOLID","ICON_RATE_HALF","ICON_SOLID_HALF","ICON_HALF_RATE","readonly","half","setText","action","setvalue","_ul","wide","liElems","ind","score","itemElemWidth","remainder","isActiveIcon","needSelect","shouldHalfIcon","Flow","isOver","lazyimg","isAuto","moreText","isTop","notDocument","more","mb","_cleanup","over","scrollHeightStart","scrollTopStart","scrollHeightEnd","isLazyimg","elemTop","CONST","ELEM_TAB","ELEM_FULL","ELEM_ITEM","ELEM_LINE","ELEM_LINE_NUM","ELEM_LN_MODE","CDDE_DATA_CLASS","LINE_RAW_WIDTH","about","ln","encode","wordWrap","highlighter","langMarker","codeIndex","mode","rawCode","finalCode","isIframePreview","elemHeaderView","elemToolbar","runPreview","codeElem","createCodeRst","lines","setCodeLayout","elemFixbar","copyElem","reloadCode","obverse","codeRender","createCode","line","codeParse","hasDataClass","onCopy","elemViewHas","elemTabHas","elemPreviewViewHas","FILTER_VALUE","elemTabView","elemPreviewView","classNameFull","classNameRestore","htmlElem","ELEM_SCROLLBAR_HIDE","oi","parameters","toolsEvent","addTools","viso","thisItemBody","srcdoc","previewStyle","elemItemBody","codeStyle","multiLine"],"mappings":"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","file":"layui.js","sourcesContent":["/**\n * Layui\n * Classic modular front-end UI library\n * MIT Licensed\n */\n\n;!function(win){\n \"use strict\";\n\n var doc = win.document;\n var config = {\n modules: {}, // 模块物理路径\n status: {}, // 模块加载状态\n timeout: 10, // 符合规范的模块请求最长等待秒数\n event: {} // 模块自定义事件\n };\n\n var Layui = function(){\n this.v = '2.9.18'; // Layui 版本号\n };\n\n // 识别预先可能定义的指定全局对象\n var GLOBAL = win.LAYUI_GLOBAL || {};\n\n // 获取 layui 所在目录\n var getPath = function(){\n var jsPath = (doc.currentScript && doc.currentScript.tagName.toUpperCase() === 'SCRIPT') ? doc.currentScript.src : function(){\n var js = doc.getElementsByTagName('script');\n var last = js.length - 1;\n var src;\n for(var i = last; i > 0; i--){\n if(js[i].readyState === 'interactive'){\n src = js[i].src;\n break;\n }\n }\n return src || js[last].src;\n }();\n\n return config.dir = GLOBAL.dir || jsPath.substring(0, jsPath.lastIndexOf('/') + 1);\n }();\n\n // 异常提示\n var error = function(msg, type){\n type = type || 'log';\n win.console && console[type] && console[type]('layui error hint: ' + msg);\n };\n\n var isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]';\n\n // 内置模块\n var modules = config.builtin = {\n lay: 'lay', // 基础 DOM 操作\n layer: 'layer', // 弹层\n laydate: 'laydate', // 日期\n laypage: 'laypage', // 分页\n laytpl: 'laytpl', // 模板引擎\n form: 'form', // 表单集\n upload: 'upload', // 上传\n dropdown: 'dropdown', // 下拉菜单\n transfer: 'transfer', // 穿梭框\n tree: 'tree', // 树结构\n table: 'table', // 表格\n treeTable: 'treeTable', // 树表\n element: 'element', // 常用元素操作\n rate: 'rate', // 评分组件\n colorpicker: 'colorpicker', // 颜色选择器\n slider: 'slider', // 滑块\n carousel: 'carousel', // 轮播\n flow: 'flow', // 流加载\n util: 'util', // 工具块\n code: 'code', // 代码修饰器\n jquery: 'jquery', // DOM 库(第三方)\n\n all: 'all',\n 'layui.all': 'layui.all' // 聚合标识(功能性的,非真实模块)\n };\n\n // 记录基础数据\n Layui.prototype.cache = config;\n\n // 定义模块\n Layui.prototype.define = function(deps, factory){\n var that = this;\n var type = typeof deps === 'function';\n var callback = function(){\n var setApp = function(app, exports){\n layui[app] = exports;\n config.status[app] = true;\n };\n typeof factory === 'function' && factory(function(app, exports){\n setApp(app, exports);\n config.callback[app] = function(){\n factory(setApp);\n }\n });\n return this;\n };\n\n type && (\n factory = deps,\n deps = []\n );\n\n that.use(deps, callback, null, 'define');\n return that;\n };\n\n // 使用特定模块\n Layui.prototype.use = function(apps, callback, exports, from){\n var that = this;\n var dir = config.dir = config.dir ? config.dir : getPath;\n var head = doc.getElementsByTagName('head')[0];\n\n apps = function(){\n if(typeof apps === 'string'){\n return [apps];\n }\n // 当第一个参数为 function 时,则自动加载所有内置模块,且执行的回调即为该 function 参数;\n else if(typeof apps === 'function'){\n callback = apps;\n return ['all'];\n }\n return apps;\n }();\n\n // 如果页面已经存在 jQuery 1.7+ 库且所定义的模块依赖 jQuery,则不加载内部 jquery 模块\n if(win.jQuery && jQuery.fn.on){\n that.each(apps, function(index, item){\n if(item === 'jquery'){\n apps.splice(index, 1);\n }\n });\n layui.jquery = layui.$ = jQuery;\n }\n\n var item = apps[0];\n var timeout = 0;\n\n exports = exports || [];\n\n // 静态资源host\n config.host = config.host || (dir.match(/\\/\\/([\\s\\S]+?)\\//)||['//'+ location.host +'/'])[0];\n\n // 加载完毕\n function onScriptLoad(e, url){\n var readyRegExp = navigator.platform === 'PLaySTATION 3' ? /^complete$/ : /^(complete|loaded)$/\n if (e.type === 'load' || (readyRegExp.test((e.currentTarget || e.srcElement).readyState))) {\n config.modules[item] = url;\n head.removeChild(node);\n (function poll() {\n if(++timeout > config.timeout * 1000 / 4){\n return error(item + ' is not a valid module', 'error');\n }\n config.status[item] ? onCallback() : setTimeout(poll, 4);\n }());\n }\n }\n\n // 回调\n function onCallback(){\n exports.push(layui[item]);\n apps.length > 1 ?\n that.use(apps.slice(1), callback, exports, from)\n : ( typeof callback === 'function' && function(){\n // 保证文档加载完毕再执行回调\n if(layui.jquery && typeof layui.jquery === 'function' && from !== 'define'){\n return layui.jquery(function(){\n callback.apply(layui, exports);\n });\n }\n callback.apply(layui, exports);\n }() );\n }\n\n // 如果引入了聚合板,内置的模块则不必重复加载\n if( apps.length === 0 || (layui['layui.all'] && modules[item]) ){\n return onCallback(), that;\n }\n\n /*\n * 获取加载的模块 URL\n * 如果是内置模块,则按照 dir 参数拼接模块路径\n * 如果是扩展模块,则判断模块路径值是否为 {/} 开头,\n * 如果路径值是 {/} 开头,则模块路径即为后面紧跟的字符。\n * 否则,则按照 base 参数拼接模块路径\n */\n\n var url = ( modules[item] ? (dir + 'modules/')\n : (/^\\{\\/\\}/.test(that.modules[item]) ? '' : (config.base || ''))\n ) + (that.modules[item] || item) + '.js';\n url = url.replace(/^\\{\\/\\}/, '');\n\n // 如果扩展模块(即:非内置模块)对象已经存在,则不必再加载\n if(!config.modules[item] && layui[item]){\n config.modules[item] = url; // 并记录起该扩展模块的 url\n }\n\n // 首次加载模块\n if(!config.modules[item]){\n var node = doc.createElement('script');\n\n node.async = true;\n node.charset = 'utf-8';\n node.src = url + function(){\n var version = config.version === true\n ? (config.v || (new Date()).getTime())\n : (config.version||'');\n return version ? ('?v=' + version) : '';\n }();\n\n head.appendChild(node);\n\n if(node.attachEvent && !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) && !isOpera){\n node.attachEvent('onreadystatechange', function(e){\n onScriptLoad(e, url);\n });\n } else {\n node.addEventListener('load', function(e){\n onScriptLoad(e, url);\n }, false);\n }\n\n config.modules[item] = url;\n } else { // 缓存\n (function poll() {\n if(++timeout > config.timeout * 1000 / 4){\n return error(item + ' is not a valid module', 'error');\n }\n (typeof config.modules[item] === 'string' && config.status[item])\n ? onCallback()\n : setTimeout(poll, 4);\n }());\n }\n\n return that;\n };\n\n // 弃用原有的指定模块,以便重新扩展新的同名模块\n Layui.prototype.disuse = function(apps){\n var that = this;\n apps = that.isArray(apps) ? apps : [apps];\n that.each(apps, function (index, item) {\n if (!config.status[item]) {\n // return error('module ' + item + ' is not exist');\n }\n delete that[item];\n delete modules[item];\n delete that.modules[item];\n delete config.status[item];\n delete config.modules[item];\n });\n return that;\n };\n\n // 获取节点的 style 属性值\n Layui.prototype.getStyle = function(node, name){\n var style = node.currentStyle ? node.currentStyle : win.getComputedStyle(node, null);\n return style[style.getPropertyValue ? 'getPropertyValue' : 'getAttribute'](name);\n };\n\n // css 外部加载器\n Layui.prototype.link = function(href, fn, cssname){\n var that = this;\n var head = doc.getElementsByTagName('head')[0];\n var link = doc.createElement('link');\n\n if(typeof fn === 'string') cssname = fn;\n\n var app = (cssname || href).replace(/\\.|\\//g, '');\n var id = 'layuicss-'+ app;\n var STAUTS_NAME = 'creating';\n var timeout = 0;\n\n link.href = href + (config.debug ? '?v='+new Date().getTime() : '');\n link.rel = 'stylesheet';\n link.id = id;\n link.media = 'all';\n\n if(!doc.getElementById(id)){\n head.appendChild(link);\n }\n\n if(typeof fn !== 'function') return that;\n\n // 轮询 css 是否加载完毕\n (function poll(status) {\n var delay = 100;\n var getLinkElem = doc.getElementById(id); // 获取动态插入的 link 元素\n\n // 如果轮询超过指定秒数,则视为请求文件失败或 css 文件不符合规范\n if(++timeout > config.timeout * 1000 / delay){\n return error(href + ' timeout');\n }\n\n // css 加载就绪\n if(parseInt(that.getStyle(getLinkElem, 'width')) === 1989){\n // 如果参数来自于初始轮询(即未加载就绪时的),则移除 link 标签状态\n if(status === STAUTS_NAME) getLinkElem.removeAttribute('lay-status');\n // 如果 link 标签的状态仍为「创建中」,则继续进入轮询,直到状态改变,则执行回调\n getLinkElem.getAttribute('lay-status') === STAUTS_NAME ? setTimeout(poll, delay) : fn();\n } else {\n getLinkElem.setAttribute('lay-status', STAUTS_NAME);\n setTimeout(function(){\n poll(STAUTS_NAME);\n }, delay);\n }\n }());\n\n // 轮询css是否加载完毕\n /*\n (function poll() {\n if(++timeout > config.timeout * 1000 / 100){\n return error(href + ' timeout');\n };\n parseInt(that.getStyle(doc.getElementById(id), 'width')) === 1989 ? function(){\n fn();\n }() : setTimeout(poll, 100);\n }());\n */\n\n return that;\n };\n\n // css 内部加载器\n Layui.prototype.addcss = function(firename, fn, cssname){\n return layui.link(config.dir + 'css/' + firename, fn, cssname);\n };\n\n // 存储模块的回调\n config.callback = {};\n\n // 重新执行模块的工厂函数\n Layui.prototype.factory = function(modName){\n if(layui[modName]){\n return typeof config.callback[modName] === 'function'\n ? config.callback[modName]\n : null;\n }\n };\n\n // 图片预加载\n Layui.prototype.img = function(url, callback, error) {\n var img = new Image();\n img.src = url;\n if(img.complete){\n return callback(img);\n }\n img.onload = function(){\n img.onload = null;\n typeof callback === 'function' && callback(img);\n };\n img.onerror = function(e){\n img.onerror = null;\n typeof error === 'function' && error(e);\n };\n };\n\n // 全局配置\n Layui.prototype.config = function(options){\n options = options || {};\n for(var key in options){\n config[key] = options[key];\n }\n return this;\n };\n\n // 记录全部模块\n Layui.prototype.modules = function(){\n var clone = {};\n for(var o in modules){\n clone[o] = modules[o];\n }\n return clone;\n }();\n\n // 拓展模块\n Layui.prototype.extend = function(options){\n var that = this;\n\n // 验证模块是否被占用\n options = options || {};\n for(var o in options){\n if(that[o] || that.modules[o]){\n error(o+ ' Module already exists', 'error');\n } else {\n that.modules[o] = options[o];\n }\n }\n\n return that;\n };\n\n // location.hash 路由解析\n Layui.prototype.router = Layui.prototype.hash = function(hash){\n var that = this;\n var hash = hash || location.hash;\n var data = {\n path: [],\n search: {},\n hash: (hash.match(/[^#](#.*$)/) || [])[1] || ''\n };\n\n if(!/^#\\//.test(hash)) return data; // 禁止非路由规范\n\n hash = hash.replace(/^#\\//, '');\n data.href = '/' + hash;\n hash = hash.replace(/([^#])(#.*$)/, '$1').split('/') || [];\n\n // 提取 Hash 结构\n that.each(hash, function(index, item){\n /^\\w+=/.test(item) ? function(){\n item = item.split('=');\n data.search[item[0]] = item[1];\n }() : data.path.push(item);\n });\n\n return data;\n };\n\n // URL 解析\n Layui.prototype.url = function(href){\n var that = this;\n var data = {\n // 提取 url 路径\n pathname: function(){\n var pathname = href\n ? function(){\n var str = (href.match(/\\.[^.]+?\\/.+/) || [])[0] || '';\n return str.replace(/^[^\\/]+/, '').replace(/\\?.+/, '');\n }()\n : location.pathname;\n return pathname.replace(/^\\//, '').split('/');\n }(),\n\n // 提取 url 参数\n search: function(){\n var obj = {};\n var search = (href\n ? function(){\n var str = (href.match(/\\?.+/) || [])[0] || '';\n return str.replace(/\\#.+/, '');\n }()\n : location.search\n ).replace(/^\\?+/, '').split('&'); // 去除 ?,按 & 分割参数\n\n // 遍历分割后的参数\n that.each(search, function(index, item){\n var _index = item.indexOf('=')\n ,key = function(){ // 提取 key\n if(_index < 0){\n return item.substr(0, item.length);\n } else if(_index === 0){\n return false;\n } else {\n return item.substr(0, _index);\n }\n }();\n // 提取 value\n if(key){\n obj[key] = _index > 0 ? item.substr(_index + 1) : null;\n }\n });\n\n return obj;\n }(),\n\n // 提取 Hash\n hash: that.router(function(){\n return href\n ? ((href.match(/#.+/) || [])[0] || '/')\n : location.hash;\n }())\n };\n\n return data;\n };\n\n // 本地持久存储\n Layui.prototype.data = function(table, settings, storage){\n table = table || 'layui';\n storage = storage || localStorage;\n\n if(!win.JSON || !win.JSON.parse) return;\n\n // 如果 settings 为 null,则删除表\n if(settings === null){\n return delete storage[table];\n }\n\n settings = typeof settings === 'object'\n ? settings\n : {key: settings};\n\n try {\n var data = JSON.parse(storage[table]);\n } catch(e) {\n var data = {};\n }\n\n if('value' in settings) data[settings.key] = settings.value;\n if(settings.remove) delete data[settings.key];\n storage[table] = JSON.stringify(data);\n\n return settings.key ? data[settings.key] : data;\n };\n\n // 本地临时存储\n Layui.prototype.sessionData = function(table, settings){\n return this.data(table, settings, sessionStorage);\n }\n\n // 设备信息\n Layui.prototype.device = function(key){\n var agent = navigator.userAgent.toLowerCase();\n\n // 获取版本号\n var getVersion = function(label){\n var exp = new RegExp(label + '/([^\\\\s\\\\_\\\\-]+)');\n label = (agent.match(exp)||[])[1];\n return label || false;\n };\n\n // 返回结果集\n var result = {\n os: function(){ // 底层操作系统\n if(/windows/.test(agent)){\n return 'windows';\n } else if(/linux/.test(agent)){\n return 'linux';\n } else if(/iphone|ipod|ipad|ios/.test(agent)){\n return 'ios';\n } else if(/mac/.test(agent)){\n return 'mac';\n }\n }(),\n ie: function(){ // ie 版本\n return (!!win.ActiveXObject || \"ActiveXObject\" in win) ? (\n (agent.match(/msie\\s(\\d+)/) || [])[1] || '11' // 由于 ie11 并没有 msie 的标识\n ) : false;\n }(),\n weixin: getVersion('micromessenger') // 是否微信\n };\n\n // 任意的 key\n if(key && !result[key]){\n result[key] = getVersion(key);\n }\n\n // 移动设备\n result.android = /android/.test(agent);\n result.ios = result.os === 'ios';\n result.mobile = (result.android || result.ios);\n\n return result;\n };\n\n // 提示\n Layui.prototype.hint = function(){\n return {\n error: error\n };\n };\n\n // typeof 类型细分 -> string/number/boolean/undefined/null、object/array/function/…\n Layui.prototype._typeof = Layui.prototype.type = function(operand){\n if(operand === null) return String(operand);\n\n // 细分引用类型\n return (typeof operand === 'object' || typeof operand === 'function') ? function(){\n var type = Object.prototype.toString.call(operand).match(/\\s(.+)\\]$/) || []; // 匹配类型字符\n var classType = 'Function|Array|Date|RegExp|Object|Error|Symbol'; // 常见类型字符\n\n type = type[1] || 'Object';\n\n // 除匹配到的类型外,其他对象均返回 object\n return new RegExp('\\\\b('+ classType + ')\\\\b').test(type)\n ? type.toLowerCase()\n : 'object';\n }() : typeof operand;\n };\n\n // 对象是否具备数组结构(此处为兼容 jQuery 对象)\n Layui.prototype._isArray = Layui.prototype.isArray = function(obj){\n var that = this;\n var len;\n var type = that.type(obj);\n\n if(!obj || (typeof obj !== 'object') || obj === win) return false;\n\n len = 'length' in obj && obj.length; // 兼容 ie\n return type === 'array' || len === 0 || (\n typeof len === 'number' && len > 0 && (len - 1) in obj // 兼容 jQuery 对象\n );\n };\n\n // 遍历\n Layui.prototype.each = function(obj, fn){\n var key;\n var that = this;\n var callFn = function(key, obj){ // 回调\n return fn.call(obj[key], key, obj[key])\n };\n\n if(typeof fn !== 'function') return that;\n obj = obj || [];\n\n // 优先处理数组结构\n if(that.isArray(obj)){\n for(key = 0; key < obj.length; key++){\n if(callFn(key, obj)) break;\n }\n } else {\n for(key in obj){\n if(callFn(key, obj)) break;\n }\n }\n\n return that;\n };\n\n // 将数组中的成员对象按照某个 key 的 value 值进行排序\n Layui.prototype.sort = function(arr, key, desc, notClone){\n var that = this;\n var clone = notClone ? (arr || []) : JSON.parse(\n JSON.stringify(arr || [])\n );\n\n // 若未传入 key,则直接返回原对象\n if(that.type(arr) === 'object' && !key){\n return clone;\n } else if(typeof arr !== 'object'){ // 若 arr 非对象\n return [clone];\n }\n\n // 开始排序\n clone.sort(function(o1, o2){\n var v1 = o1[key];\n var v2 = o2[key];\n\n /*\n * 特殊数据\n * 若比较的成员均非对象\n */\n\n // 若比较的成员均为数字\n if(!isNaN(o1) && !isNaN(o2)) return o1 - o2;\n // 若比较的成员只存在某一个非对象\n if(!isNaN(o1) && isNaN(o2)){\n if(key && typeof o2 === 'object'){\n v1 = o1;\n } else {\n return -1;\n }\n } else if (isNaN(o1) && !isNaN(o2)){\n if(key && typeof o1 === 'object'){\n v2 = o2;\n } else {\n return 1;\n }\n }\n\n /*\n * 正常数据\n * 即成员均为对象,也传入了对比依据: key\n * 若 value 为数字,按「大小」排序;若 value 非数字,则按「字典序」排序\n */\n\n // value 是否为数字\n var isNum = [!isNaN(v1), !isNaN(v2)];\n\n // 若为数字比较\n if(isNum[0] && isNum[1]){\n if(v1 && (!v2 && v2 !== 0)){ // 数字 vs 空\n return 1;\n } else if((!v1 && v1 !== 0) && v2){ // 空 vs 数字\n return -1;\n } else { // 数字 vs 数字\n return v1 - v2;\n }\n }\n\n /**\n * 字典序排序\n */\n\n // 若为非数字比较\n if(!isNum[0] && !isNum[1]){\n // 字典序比较\n if(v1 > v2){\n return 1;\n } else if (v1 < v2) {\n return -1;\n } else {\n return 0;\n }\n }\n\n // 若为混合比较\n if(isNum[0] || !isNum[1]){ // 数字 vs 非数字\n return -1;\n } else if(!isNum[0] || isNum[1]) { // 非数字 vs 数字\n return 1;\n }\n\n });\n\n desc && clone.reverse(); // 倒序\n return clone;\n };\n\n // 阻止事件冒泡\n Layui.prototype.stope = function(thisEvent){\n thisEvent = thisEvent || win.event;\n try { thisEvent.stopPropagation() } catch(e){\n thisEvent.cancelBubble = true;\n }\n };\n\n // 字符常理\n var EV_REMOVE = 'LAYUI-EVENT-REMOVE';\n\n // 自定义模块事件\n Layui.prototype.onevent = function(modName, events, callback){\n if(typeof modName !== 'string'\n || typeof callback !== 'function') return this;\n\n return Layui.event(modName, events, null, callback);\n };\n\n // 执行自定义模块事件\n Layui.prototype.event = Layui.event = function(modName, events, params, fn){\n var that = this;\n var result = null;\n var filter = (events || '').match(/\\((.*)\\)$/)||[]; // 提取事件过滤器字符结构,如:select(xxx)\n var eventName = (modName + '.'+ events).replace(filter[0], ''); // 获取事件名称,如:form.select\n var filterName = filter[1] || ''; // 获取过滤器名称,,如:xxx\n var callback = function(_, item){\n var res = item && item.call(that, params);\n res === false && result === null && (result = false);\n };\n\n // 如果参数传入特定字符,则执行移除事件\n if(params === EV_REMOVE){\n delete (that.cache.event[eventName] || {})[filterName];\n return that;\n }\n\n // 添加事件\n if(fn){\n config.event[eventName] = config.event[eventName] || {};\n\n if (filterName) {\n // 带filter不支持重复事件\n config.event[eventName][filterName] = [fn];\n } else {\n // 不带filter处理的是所有的同类事件,应该支持重复事件\n config.event[eventName][filterName] = config.event[eventName][filterName] || [];\n config.event[eventName][filterName].push(fn);\n }\n return this;\n }\n\n // 执行事件回调\n layui.each(config.event[eventName], function(key, item){\n // 执行当前模块的全部事件\n if(filterName === '{*}'){\n layui.each(item, callback);\n return;\n }\n\n // 执行指定事件\n key === '' && layui.each(item, callback);\n (filterName && key === filterName) && layui.each(item, callback);\n });\n\n return result;\n };\n\n // 新增模块事件\n Layui.prototype.on = function(events, modName, callback){\n var that = this;\n return that.onevent.call(that, modName, events, callback);\n }\n\n // 移除模块事件\n Layui.prototype.off = function(events, modName){\n var that = this;\n return that.event.call(that, modName, events, EV_REMOVE);\n };\n\n // 防抖\n Layui.prototype.debounce = function (func, wait) {\n var timeout;\n return function () {\n var context = this;\n var args = arguments;\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n func.apply(context, args);\n }, wait);\n }\n };\n\n // 节流\n Layui.prototype.throttle = function (func, wait) {\n var cooldown = false;\n return function () {\n var context = this;\n var args = arguments;\n if (!cooldown) {\n func.apply(context, args);\n cooldown = true;\n setTimeout(function () {\n cooldown = false;\n }, wait);\n }\n }\n };\n\n // exports layui\n win.layui = new Layui();\n\n}(window); // gulp build: layui-footer\n\n","/**\r\n * 用于打包聚合版,该文件不会存在于构建后的目录 \r\n */\r\n \r\nlayui.define(function(exports){\r\n var cache = layui.cache;\r\n layui.config({\r\n dir: cache.dir.replace(/lay\\/dest\\/$/, '')\r\n });\r\n exports('layui.all', layui.v);\r\n});","\r\n/** lay 基础模块 | MIT Licensed */\r\n\r\n;!function(window){ // gulp build: lay-header\r\n \"use strict\";\r\n\r\n var MOD_NAME = 'lay'; // 模块名\r\n var document = window.document;\r\n\r\n /**\r\n * 元素查找\r\n * @param {string | HTMLElement | JQuery} selector\r\n */\r\n var lay = function(selector){\r\n return new Class(selector);\r\n };\r\n\r\n // 构造器\r\n var Class = function(selector){\r\n var that = this;\r\n var elem = typeof selector === 'object' ? function(){\r\n // 仅适配简单元素对象\r\n return layui.isArray(selector) ? selector : [selector];\r\n }() : (\r\n this.selector = selector,\r\n document.querySelectorAll(selector || null)\r\n );\r\n\r\n lay.each(elem, function(index, item){\r\n that.push(elem[index]);\r\n });\r\n };\r\n\r\n /*\r\n * API 兼容\r\n */\r\n Array.prototype.indexOf = Array.prototype.indexOf || function(searchElement, fromIndex) {\r\n var rst = -1;\r\n fromIndex = fromIndex || 0;\r\n layui.each(this, function(index, val){\r\n if (searchElement === val && index >= fromIndex) {\r\n rst = index;\r\n return !0;\r\n }\r\n });\r\n return rst;\r\n };\r\n\r\n /*\r\n lay 对象操作\r\n */\r\n\r\n Class.fn = Class.prototype = [];\r\n Class.fn.constructor = Class;\r\n\r\n /**\r\n * 将两个或多个对象的内容深度合并到第一个对象中\r\n * @callback ExtendFunc\r\n * @param {*} target - 一个对象\r\n * @param {...*} objectN - 包含额外的属性合并到第一个参数\r\n * @returns {*} 返回合并后的对象\r\n */\r\n /** @type ExtendFunc*/\r\n lay.extend = function(){\r\n var ai = 1;\r\n var length;\r\n var args = arguments;\r\n var clone = function(target, obj){\r\n target = target || (layui.type(obj) === 'array' ? [] : {}); // 目标对象\r\n for(var i in obj){\r\n // 若值为普通对象,则进入递归,继续深度合并\r\n target[i] = (obj[i] && obj[i].constructor === Object)\r\n ? clone(target[i], obj[i])\r\n : obj[i];\r\n }\r\n return target;\r\n };\r\n\r\n args[0] = typeof args[0] === 'object' ? args[0] : {};\r\n length = args.length\r\n\r\n for(; ai < length; ai++){\r\n if(typeof args[ai] === 'object'){\r\n clone(args[0], args[ai]);\r\n }\r\n }\r\n return args[0];\r\n };\r\n\r\n /**\r\n * IE 版本\r\n * @type {string | boolean} - 如果是 IE 返回版本字符串,否则返回 false\r\n */\r\n lay.ie = function(){\r\n var agent = navigator.userAgent.toLowerCase();\r\n return (!!window.ActiveXObject || \"ActiveXObject\" in window) ? (\r\n (agent.match(/msie\\s(\\d+)/) || [])[1] || '11' // 由于 ie11 并没有 msie 的标识\r\n ) : false;\r\n }();\r\n\r\n\r\n /**\r\n * 获取 layui 常见方法,以便用于组件单独版\r\n */\r\n\r\n lay.layui = layui || {};\r\n lay.getPath = layui.cache.dir; // 获取当前 JS 所在目录\r\n lay.stope = layui.stope; // 中止冒泡\r\n lay.each = function(){ // 遍历\r\n layui.each.apply(layui, arguments);\r\n return this;\r\n };\r\n\r\n\r\n /**\r\n * 数字前置补零\r\n * @param {number | string} num - 原始数字\r\n * @param {number} [length=2] - 数字长度,如果原始数字长度小于 length,则前面补零\r\n * @returns {string} 返回补 0 后的数字\r\n * @example\r\n * ```js\r\n * lay.digit(6, 2); // \"06\"\r\n * lay.digit('7', 3); // \"007\"\r\n * ```\r\n */\r\n lay.digit = function(num, length){\r\n if(!(typeof num === 'string' || typeof num === 'number')) return '';\r\n\r\n var str = '';\r\n num = String(num);\r\n length = length || 2;\r\n for(var i = num.length; i < length; i++){\r\n str += '0';\r\n }\r\n return num < Math.pow(10, length) ? str + num : num;\r\n };\r\n\r\n /**\r\n * 创建元素\r\n * @param {string} elemName - 元素的标签名\r\n * @param {Object.} [attr] - 添加到元素上的属性\r\n * @returns {HTMLElement} 返回创建的 HTML 元素\r\n * @example\r\n * ```js\r\n * lay.elem('div', {id: 'test'}) //
        \r\n * ```\r\n */\r\n lay.elem = function(elemName, attr){\r\n var elem = document.createElement(elemName);\r\n lay.each(attr || {}, function(key, value){\r\n elem.setAttribute(key, value);\r\n });\r\n return elem;\r\n };\r\n\r\n /**\r\n * 当前页面是否存在滚动条\r\n * @returns {boolean} 是否存在滚动条\r\n * @example\r\n * ```\r\n * lay.hasScrollbar() // true 或 false\r\n * ```\r\n */\r\n lay.hasScrollbar = function(){\r\n return document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight);\r\n };\r\n\r\n /**\r\n * 获取 style rules\r\n * @param {HTMLStyleElement} style - HTMLStyle 元素\r\n * @param {(ruleItem: CSSStyleRule, index: number) => boolean} [callback] - 用来返回 style 元素中的每个 `style rule` 的函数,返回 true 终止遍历\r\n * @returns {CSSRuleList } 返回 `style rules`\r\n * @example\r\n * ```\r\n * \r\n *\r\n * lay.getStyleRules($('#test')[0], function(rule, index){\r\n * if(rule.selectorText === '.lay-card'){\r\n * console.log(index, rule.cssText) // 0 '.lay-card{color: #000}'\r\n * rule.style.color = '#EEE';\r\n * return true; // 终止遍历\r\n * }\r\n * }) // RuleList\r\n * ```\r\n */\r\n lay.getStyleRules = function(style, callback) {\r\n if (!style) return;\r\n\r\n var sheet = style.sheet || style.styleSheet || {};\r\n var rules = sheet.cssRules || sheet.rules;\r\n\r\n if (typeof callback === 'function') {\r\n layui.each(rules, function(i, item){\r\n if (callback(item, i)) return true;\r\n });\r\n }\r\n\r\n return rules;\r\n };\r\n\r\n /**\r\n * 创建 style 样式\r\n * @param {Object} options - 可配置的选项\r\n * @param {string | HTMLElement | JQuery} [options.target] - 目标容器,指定后会将样式追加到目标容器\r\n * @param {string} [options.id] - 样式元素的 id,默认自增\r\n * @param {string} options.text - 样式内容\r\n * @returns {HTMLStyleElement} 返回创建的样式元素\r\n * @example\r\n * ```html\r\n *
        \r\n * \r\n * \r\n *
        \r\n *\r\n * lay.style({\r\n * target: '#targetEl',\r\n * text: '.card{color: #000}'\r\n * }) // \r\n * ```\r\n */\r\n lay.style = function(options){\r\n options = options || {};\r\n\r\n var style = lay.elem('style');\r\n var styleText = options.text || '';\r\n var target = options.target;\r\n\r\n if (!styleText) return;\r\n\r\n // 添加样式\r\n if ('styleSheet' in style) {\r\n style.setAttribute('type', 'text/css');\r\n style.styleSheet.cssText = styleText;\r\n } else {\r\n style.innerHTML = styleText;\r\n }\r\n\r\n // ID\r\n style.id = 'LAY-STYLE-'+ (options.id || function(index) {\r\n lay.style.index++;\r\n return 'DF-'+ index;\r\n }(lay.style.index || 0));\r\n\r\n // 是否向目标容器中追加 style 元素\r\n if (target) {\r\n var styleElem = lay(target).find('#'+ style.id);\r\n styleElem[0] && styleElem.remove();\r\n lay(target).append(style);\r\n }\r\n\r\n return style;\r\n };\r\n\r\n /**\r\n * 将元素定位到指定目标元素附近\r\n * @param {HTMLElement} target - 目标元素\r\n * @param {HTMLElement} elem - 定位元素\r\n * @param {Object} [opts] - 可配置的选项\r\n * @param {'absolute' | 'fixed'} [opts.position] - 元素的定位类型\r\n * @param {'left' | 'right'} [opts.clickType=\"left\"] - 点击类型,默认为 'left',如果 {@link target} 是 document 或 body 元素,则为 'right'\r\n * @param {'left' | 'right' | 'center'} [opts.align=\"left\"] - 对齐方式\r\n * @param {boolean} [opts.allowBottomOut=false] - 顶部没有足够区域显示时,是否允许底部溢出\r\n * @param {string | number} [opts.margin=5] - 边距\r\n * @param {Event} [opts.e] - 事件对象,仅右键生效\r\n * @param {boolean} [opts.SYSTEM_RELOAD] - 是否重载,用于出现滚动条时重新计算位置\r\n * @param {[offsetX:number, offsetY:number]} [opts.offset] - 相对于触发元素的额外偏移量[x,y]\r\n * @example\r\n * ```js\r\n * \r\n *
          \r\n *
        • 菜单1
        • \r\n *
        • 菜单2
        • \r\n *
        \r\n *\r\n * // 下拉菜单将被定位到按钮附近\r\n * lay.position(\r\n * $('#targetEl')[0],\r\n * $('#contentEl')[0],\r\n * {\r\n * position: 'fixed',\r\n * align: 'center'\r\n * }\r\n * )\r\n * ```\r\n */\r\n lay.position = function(target, elem, opts){\r\n if(!elem) return;\r\n opts = opts || {};\r\n\r\n // 如果绑定的是 document 或 body 元素,则直接获取鼠标坐标\r\n if(target === document || target === lay('body')[0]){\r\n opts.clickType = 'right';\r\n }\r\n\r\n // 绑定绑定元素的坐标\r\n var rect = opts.clickType === 'right' ? function(){\r\n var e = opts.e || window.event || {};\r\n return {\r\n left: e.clientX,\r\n top: e.clientY,\r\n right: e.clientX,\r\n bottom: e.clientY\r\n }\r\n }() : target.getBoundingClientRect();\r\n var elemWidth = elem.offsetWidth; // 控件的宽度\r\n var elemHeight = elem.offsetHeight; // 控件的高度\r\n\r\n // 滚动条高度\r\n var scrollArea = function(type){\r\n type = type ? 'scrollLeft' : 'scrollTop';\r\n return document.body[type] | document.documentElement[type];\r\n };\r\n\r\n // 窗口宽高\r\n var winArea = function(type){\r\n return document.documentElement[type ? 'clientWidth' : 'clientHeight']\r\n };\r\n var margin = 'margin' in opts ? opts.margin : 5;\r\n var left = rect.left;\r\n var top = rect.bottom;\r\n\r\n // 相对元素居中\r\n if(opts.align === 'center'){\r\n left = left - (elemWidth - target.offsetWidth) / 2;\r\n } else if(opts.align === 'right'){\r\n left = left - elemWidth + target.offsetWidth;\r\n }\r\n\r\n // 判断右侧是否超出边界\r\n if(left + elemWidth + margin > winArea('width')){\r\n left = winArea('width') - elemWidth - margin; // 如果超出右侧,则将面板向右靠齐\r\n }\r\n // 左侧是否超出边界\r\n if(left < margin) left = margin;\r\n\r\n\r\n // 判断底部和顶部是否超出边界\r\n if(rect.bottom + elemHeight + margin > winArea()){ // 底部超出边界\r\n // 优先判断顶部是否有足够区域显示完全,且底部不能超出边界\r\n if(rect.top > elemHeight + margin && rect.top <= winArea() ){\r\n top = rect.top - elemHeight - margin*2; // 顶部有足够的区域显示\r\n } else if(!opts.allowBottomOut){ // 顶部没有足够区域显示时,是否允许底部溢出\r\n top = winArea() - elemHeight - margin*2; // 面板向底部靠齐\r\n if(top < 0) top = 0; // 如果面板底部靠齐时,又溢出窗口顶部,则只能将顶部靠齐\r\n }\r\n }\r\n /*\r\n if(top + elemHeight + margin > winArea()){\r\n // 优先顶部是否有足够区域显示完全\r\n if(rect.top > elemHeight + margin){\r\n top = rect.top - elemHeight - margin*2; // 顶部有足够的区域显示\r\n } else {\r\n // 如果面板是鼠标右键弹出,且顶部没有足够区域显示,则将面板向底部靠齐\r\n if(obj.clickType === 'right'){\r\n top = winArea() - elemHeight - margin*2;\r\n if(top < 0) top = 0; // 不能溢出窗口顶部\r\n } else {\r\n top = margin; // 位置计算逻辑完备性处理\r\n }\r\n }\r\n }\r\n */\r\n\r\n // 定位类型\r\n var position = opts.position;\r\n if(position) elem.style.position = position;\r\n var offsetX = opts.offset ? opts.offset[0] : 0;\r\n var offsetY = opts.offset ? opts.offset[1] : 0;\r\n\r\n // 设置坐标\r\n elem.style.left = left + (position === 'fixed' ? 0 : scrollArea(1)) + offsetX + 'px';\r\n elem.style.top = top + (position === 'fixed' ? 0 : scrollArea()) + offsetY + 'px';\r\n\r\n // 防止页面无滚动条时,又因为弹出面板而出现滚动条导致的坐标计算偏差\r\n if(!lay.hasScrollbar()){\r\n var rect1 = elem.getBoundingClientRect();\r\n // 如果弹出面板的溢出窗口底部,则表示将出现滚动条,此时需要重新计算坐标\r\n if(!opts.SYSTEM_RELOAD && (rect1.bottom + margin) > winArea()){\r\n opts.SYSTEM_RELOAD = true;\r\n setTimeout(function(){\r\n lay.position(target, elem, opts);\r\n }, 50);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * 获取元素上的属性配置项\r\n * @param {string | HTMLElement | JQuery} elem - HTML 元素\r\n * @param {{attr: string} | string} [opts=\"lay-options\"] - 可配置的选项,string 类型指定属性名\r\n * @returns {Object.} 返回元素上的属性配置项\r\n * @example\r\n * ```js\r\n *
        \r\n *\r\n * var elem = $('#testEl')\r\n * lay.options(elem) // {color:red}\r\n * lay.options(elem[0]) // {color:red}\r\n * lay.options('#testEl') // {color:red}\r\n * lay.options('#testEl', {attr: 'lay-toc'}) // {hot: true}\r\n * lay.options('#testEl', 'lay-toc') // {hot: true}\r\n *\r\n * $('#testEl').attr('lay-toc') // '{hot: true}'\r\n * ```\r\n */\r\n lay.options = function(elem, opts){\r\n opts = typeof opts === 'object' ? opts : {attr: opts};\r\n\r\n if(elem === document) return {};\r\n\r\n var othis = lay(elem);\r\n var attrName = opts.attr || 'lay-options';\r\n var attrValue = othis.attr(attrName);\r\n\r\n try {\r\n /**\r\n * 请注意: 开发者在使用 lay-options=\"{}\" 配置组件选项时,需确保属性值不来自于网页用户,\r\n * 即属性值必须在网页开发者自身的可控范围内,否则请勿在 HTML 标签属性中获取组件选项。\r\n */\r\n return new Function('return '+ (attrValue || '{}'))();\r\n } catch(ev) {\r\n layui.hint().error(opts.errorText || [\r\n attrName + '=\"'+ attrValue + '\"',\r\n '\\n parseerror: '+ ev\r\n ].join('\\n'), 'error');\r\n return {};\r\n }\r\n };\r\n\r\n\r\n /**\r\n * 元素是否属于顶级元素(document 或 body)\r\n * @param {HTMLElement} elem - HTML 元素\r\n * @returns {boolean} 是否属于顶级元素\r\n * @example\r\n * ```js\r\n * lay.isTopElem(document) // true\r\n * ```\r\n */\r\n lay.isTopElem = function(elem){\r\n var topElems = [document, lay('body')[0]]\r\n ,matched = false;\r\n lay.each(topElems, function(index, item){\r\n if(item === elem){\r\n return matched = true\r\n }\r\n });\r\n return matched;\r\n };\r\n\r\n // 剪切板\r\n lay.clipboard = {\r\n /**\r\n * 写入文本\r\n * @param {Object} options - 可配置的选项\r\n * @param {string} options.text - 写入剪贴板的文本\r\n * @param {() => void} [options.done] - 写入成功/完成回调\r\n * @param {(err?: any) => void} [options.error] - 写入失败回调\r\n * @example\r\n * ```js\r\n * lay.clipboard.writeText({\r\n * text: '测试文本',\r\n * done: function(){ layer.msg('copied')},\r\n * error: function(){ layer.msg('error')}\r\n * })\r\n * ```\r\n */\r\n writeText: function(options) {\r\n var text = String(options.text);\r\n\r\n if(navigator && 'clipboard' in navigator){\r\n navigator.clipboard.writeText(text)\r\n .then(options.done, function(){\r\n legacyCopy();\r\n });\r\n }else{\r\n legacyCopy();\r\n }\r\n\r\n function legacyCopy(){\r\n var elem = document.createElement('textarea');\r\n\r\n elem.value = text;\r\n elem.style.position = 'fixed';\r\n elem.style.opacity = '0';\r\n elem.style.top = '0px';\r\n elem.style.left = '0px';\r\n\r\n document.body.appendChild(elem);\r\n elem.select();\r\n\r\n try {\r\n document.execCommand('copy');\r\n typeof options.done === 'function' && options.done();\r\n } catch(err) {\r\n typeof options.error === 'function' && options.error(err);\r\n } finally {\r\n elem.remove ? elem.remove() : document.body.removeChild(elem);\r\n }\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * 检测是否支持 Passive Event Listeners\r\n * 引用自 https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\r\n * @type {boolean}\r\n */\r\n lay.passiveSupported = function(){\r\n var passiveSupported = false;\r\n try {\r\n var opts = Object.defineProperty({}, 'passive', {\r\n get: function() {\r\n passiveSupported = true;\r\n }\r\n });\r\n window.addEventListener('test', null, opts);\r\n window.removeEventListener('test', null, opts);\r\n } catch (err) {}\r\n return passiveSupported;\r\n }();\r\n\r\n /**\r\n * 是否支持 touch 事件\r\n */\r\n lay.touchEventsSupported = function(){\r\n return 'ontouchstart' in window;\r\n };\r\n\r\n /**\r\n * @typedef touchSwipeState\r\n * @prop {{x: number,y: number}} pointerStart - 初始坐标\r\n * @prop {{x: number,y: number}} pointerEnd - 结束坐标\r\n * @prop {number} distanceX - X 轴移动距离\r\n * @prop {number} distanceY - Y 轴移动距离\r\n * @prop {'none'|'right'|'left'|'up'|'down'} direction - 滑动方向\r\n * @prop {Date} timeStart 开始时间\r\n */\r\n /**\r\n * @callback touchSwipeCallback\r\n * @param {TouchEvent} e 滑动事件\r\n * @param {touchSwipeState} state 滑动相关的状态\r\n */\r\n /**\r\n * 基于 touch 事件的触摸滑动\r\n * @param {string | HTMLElement | JQuery} elem - HTML 元素\r\n * @param {{onTouchStart?: touchSwipeCallback, onTouchMove?: touchSwipeCallback, onTouchEnd?: touchSwipeCallback}} opts - 配置项\r\n */\r\n lay.touchSwipe = function(elem, opts){\r\n var options = opts\r\n var targetElem = lay(elem)[0];\r\n\r\n if(!targetElem || !lay.touchEventsSupported()) return;\r\n\r\n var state = {\r\n pointerStart: {x:0, y:0},\r\n pointerEnd: {x:0, y:0},\r\n distanceX: 0,\r\n distanceY: 0,\r\n direction:'none', // 'up','down','left','right','none\r\n timeStart: null\r\n }\r\n\r\n var onStart = function(e){\r\n if(e.touches.length !== 1) return;\r\n bindEvents();\r\n // 重置状态\r\n state.timeStart = Date.now();\r\n state.pointerStart.x = state.pointerEnd.x = e.touches[0].clientX;\r\n state.pointerStart.y = state.pointerEnd.y = e.touches[0].clientY;\r\n state.distanceX = state.distanceY = 0;\r\n state.direction = 'none'\r\n\r\n options.onTouchStart && options.onTouchStart(e, state);\r\n }\r\n\r\n var onMove = function(e){\r\n e.preventDefault();\r\n state.pointerEnd.x = e.touches[0].clientX;\r\n state.pointerEnd.y = e.touches[0].clientY;\r\n state.distanceX = state.pointerStart.x - state.pointerEnd.x;\r\n state.distanceY = state.pointerStart.y - state.pointerEnd.y;\r\n if(Math.abs(state.distanceX) > Math.abs(state.distanceY)){\r\n state.direction = state.distanceX > 0 ? 'left' : 'right';\r\n }else{\r\n state.direction = state.distanceY > 0 ? 'up' : 'down';\r\n }\r\n options.onTouchMove && options.onTouchMove(e, state);\r\n }\r\n\r\n var onEnd = function(e){\r\n options.onTouchEnd && options.onTouchEnd(e, state);\r\n unbindEvents();\r\n }\r\n \r\n var bindEvents = function(){\r\n targetElem.addEventListener('touchmove', onMove, lay.passiveSupported ? { passive: false} : false);\r\n targetElem.addEventListener('touchend', onEnd);\r\n targetElem.addEventListener('touchcancel', onEnd);\r\n }\r\n\r\n var unbindEvents = function(){\r\n targetElem.removeEventListener('touchmove', onMove);\r\n targetElem.removeEventListener('touchend', onEnd, lay.passiveSupported ? { passive: false} : false);\r\n targetElem.removeEventListener('touchcancel', onEnd);\r\n }\r\n\r\n // 防止事件重复绑定\r\n if(targetElem.__lay_touchswipe_cb_){\r\n targetElem.removeEventListener('touchstart', targetElem.__lay_touchswipe_cb_);\r\n }\r\n targetElem.__lay_touchswipe_cb_ = onStart;\r\n targetElem.addEventListener('touchstart', onStart);\r\n }\r\n\r\n /** @type {(elem: Element|Document|Window,eventName: string,fn:EventListenerOrEventListenerObject,options: boolean | AddEventListenerOptions) => any}*/\r\n lay.addEvent = function(){\r\n if(document.addEventListener){\r\n return function(elem, eventName, fn, options){\r\n elem.addEventListener(eventName, fn, options);\r\n }\r\n }else{\r\n return function(elem, eventName, fn){\r\n var prefix = '_lay_on_';\r\n var eventsCacheName = prefix + eventName;\r\n var listener = function(e){\r\n e.target = e.srcElement;\r\n fn.call(elem, e);\r\n }\r\n listener._rawFn = fn;\r\n if(!elem[eventsCacheName]){\r\n elem[eventsCacheName] = [];\r\n }\r\n var include = false;\r\n lay.each(elem[eventsCacheName], function(_, listener){\r\n if(listener._rawFn === fn){\r\n include = true;\r\n return true;\r\n }\r\n })\r\n if(!include){\r\n elem[eventsCacheName].push(listener);\r\n elem.attachEvent('on' + eventName, listener);\r\n }\r\n }\r\n }\r\n }();\r\n\r\n /** @type {(elem: Element|Document|Window,eventName: string,fn:EventListenerOrEventListenerObject,options: boolean | EventListenerOptions) => any}*/\r\n lay.removeEvent = function(){\r\n if(document.removeEventListener){\r\n return function(elem, eventName, fn, options){\r\n elem.removeEventListener(eventName, fn, options);\r\n }\r\n }else{\r\n return function(elem, eventName, fn){\r\n var prefix = '_lay_on_';\r\n var eventsCacheName = prefix + eventName;\r\n var events = elem[eventsCacheName];\r\n if(layui.isArray(events)){\r\n var newEvents = [];\r\n lay.each(events, function(_, listener){\r\n if(listener._rawFn === fn){\r\n elem.detachEvent('on'+ eventName, listener);\r\n }else{\r\n newEvents.push(listener);\r\n }\r\n })\r\n elem[eventsCacheName] = newEvents;\r\n } \r\n } \r\n }\r\n }();\r\n\r\n /**\r\n * 监听指定元素外部的点击\r\n * @param {HTMLElement} target - 被监听的元素\r\n * @param {(e: Event) => void} handler - 事件触发时执行的函数\r\n * @param {object} [options] - 选项\r\n * @param {string} [options.event=\"pointerdown\"] - 监听的事件类型\r\n * @param {HTMLElement | Window} [options.scope=document] - 监听范围\r\n * @param {Array} [options.ignore] - 忽略监听的元素或选择器字符串\r\n * @param {boolean} [options.capture=true] - 对内部事件侦听器使用捕获阶段\r\n * @returns {() => void} - 返回一个停止事件监听的函数\r\n */\r\n lay.onClickOutside = function(target, handler, options){\r\n options = options || {};\r\n var eventType = options.event || ('onpointerdown' in window ? 'pointerdown' : 'mousedown');\r\n var scopeTarget = options.scope || document;\r\n var ignore = options.ignore || [];\r\n var useCapture = 'capture' in options ? options.capture : true;\r\n\r\n var listener = function(event){\r\n var el = target;\r\n var eventTarget = event.target || event.srcElement;\r\n var eventPath = getEventPath(event);\r\n\r\n if (!el || el === eventTarget || eventPath.indexOf(el) !== -1){\r\n return;\r\n }\r\n if(shouldIgnore(event, eventPath)){\r\n return;\r\n }\r\n\r\n handler(event);\r\n };\r\n\r\n function shouldIgnore(event, eventPath){\r\n var eventTarget = event.target || event.srcElement;\r\n for(var i = 0; i < ignore.length; i++){\r\n var target = ignore[i];\r\n if(typeof target === 'string'){\r\n var targetElements = document.querySelectorAll(target);\r\n for(var j = 0; j < targetElements.length; j++){\r\n var targetEl = targetElements[i];\r\n if(targetEl === eventTarget || eventPath.indexOf(targetEl) !== -1){\r\n return true;\r\n }\r\n }\r\n }else{\r\n if(target && (target === eventTarget || eventPath.indexOf(target) !== -1)){\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n function getEventPath(event){\r\n var path = (event.composedPath && event.composedPath()) || event.path;\r\n var eventTarget = event.target || event.srcElement;\r\n\r\n if (path !== null && path !== undefined){\r\n return path;\r\n }\r\n\r\n function getParents(node, memo){\r\n memo = memo || [];\r\n var parentNode = node.parentNode;\r\n\r\n return parentNode\r\n ? getParents(parentNode, memo.concat([parentNode]))\r\n : memo;\r\n }\r\n\r\n return [eventTarget].concat(getParents(eventTarget));\r\n }\r\n\r\n function bindEventListener(elem, eventName, handler, opts){\r\n elem.addEventListener\r\n ? elem.addEventListener(eventName, handler, opts)\r\n : elem.attachEvent('on' + eventName, handler);\r\n\r\n return function(){\r\n elem.removeEventListener\r\n ? elem.removeEventListener(eventName, handler, opts)\r\n : elem.detachEvent('on' + eventName, handler);\r\n }\r\n }\r\n\r\n return bindEventListener(\r\n scopeTarget, \r\n eventType, \r\n listener, \r\n lay.passiveSupported ? { passive: true, capture: useCapture } : useCapture\r\n );\r\n };\r\n\r\n\r\n /*\r\n * lay 元素操作\r\n */\r\n\r\n\r\n // 追加字符\r\n Class.addStr = function(str, new_str){\r\n str = str.replace(/\\s+/, ' ');\r\n new_str = new_str.replace(/\\s+/, ' ').split(' ');\r\n lay.each(new_str, function(ii, item){\r\n if(!new RegExp('\\\\b'+ item + '\\\\b').test(str)){\r\n str = str + ' ' + item;\r\n }\r\n });\r\n return str.replace(/^\\s|\\s$/, '');\r\n };\r\n\r\n // 移除值\r\n Class.removeStr = function(str, new_str){\r\n str = str.replace(/\\s+/, ' ');\r\n new_str = new_str.replace(/\\s+/, ' ').split(' ');\r\n lay.each(new_str, function(ii, item){\r\n var exp = new RegExp('\\\\b'+ item + '\\\\b')\r\n if(exp.test(str)){\r\n str = str.replace(exp, '');\r\n }\r\n });\r\n return str.replace(/\\s+/, ' ').replace(/^\\s|\\s$/, '');\r\n };\r\n\r\n // 查找子元素\r\n Class.fn.find = function(selector){\r\n var that = this;\r\n var elem = [];\r\n var isObject = typeof selector === 'object';\r\n\r\n this.each(function(i, item){\r\n var children = isObject && item.contains(selector)\r\n ? selector\r\n : item.querySelectorAll(selector || null);\r\n\r\n lay.each(children, function(index, child){\r\n elem.push(child);\r\n });\r\n });\r\n\r\n return lay(elem);\r\n };\r\n\r\n // 元素遍历\r\n Class.fn.each = function(fn){\r\n return lay.each.call(this, this, fn);\r\n };\r\n\r\n // 添加 className\r\n Class.fn.addClass = function(className, type){\r\n return this.each(function(index, item){\r\n item.className = Class[type ? 'removeStr' : 'addStr'](item.className, className)\r\n });\r\n };\r\n\r\n // 移除 className\r\n Class.fn.removeClass = function(className){\r\n return this.addClass(className, true);\r\n };\r\n\r\n // 是否包含 css 类\r\n Class.fn.hasClass = function(className){\r\n var has = false;\r\n this.each(function(index, item){\r\n if(new RegExp('\\\\b'+ className +'\\\\b').test(item.className)){\r\n has = true;\r\n }\r\n });\r\n return has;\r\n };\r\n\r\n // 添加或获取 css style\r\n Class.fn.css = function(key, value){\r\n var that = this;\r\n var parseValue = function(v){\r\n return isNaN(v) ? v : (v +'px');\r\n };\r\n return (typeof key === 'string' && value === undefined) ? function(){\r\n if(that.length > 0) return that[0].style[key];\r\n }() : that.each(function(index, item){\r\n typeof key === 'object' ? lay.each(key, function(thisKey, thisValue){\r\n item.style[thisKey] = parseValue(thisValue);\r\n }) : item.style[key] = parseValue(value);\r\n });\r\n };\r\n\r\n // 添加或获取宽度\r\n Class.fn.width = function(value){\r\n var that = this;\r\n return value === undefined ? function(){\r\n if(that.length > 0) return that[0].offsetWidth; // 此处还需做兼容\r\n }() : that.each(function(index, item){\r\n that.css('width', value);\r\n });\r\n };\r\n\r\n // 添加或获取高度\r\n Class.fn.height = function(value){\r\n var that = this;\r\n return value === undefined ? function(){\r\n if(that.length > 0) return that[0].offsetHeight; // 此处还需做兼容\r\n }() : that.each(function(index, item){\r\n that.css('height', value);\r\n });\r\n };\r\n\r\n // 添加或获取属性\r\n Class.fn.attr = function(key, value){\r\n var that = this;\r\n return value === undefined ? function(){\r\n if(that.length > 0) return that[0].getAttribute(key);\r\n }() : that.each(function(index, item){\r\n item.setAttribute(key, value);\r\n });\r\n };\r\n\r\n // 移除属性\r\n Class.fn.removeAttr = function(key){\r\n return this.each(function(index, item){\r\n item.removeAttribute(key);\r\n });\r\n };\r\n\r\n // 设置或获取 HTML 内容\r\n Class.fn.html = function(html){\r\n var that = this;\r\n return html === undefined ? function(){\r\n if(that.length > 0) return that[0].innerHTML;\r\n }() : this.each(function(index, item){\r\n item.innerHTML = html;\r\n });\r\n };\r\n\r\n // 设置或获取值\r\n Class.fn.val = function(value){\r\n var that = this;\r\n return value === undefined ? function(){\r\n if(that.length > 0) return that[0].value;\r\n }() : this.each(function(index, item){\r\n item.value = value;\r\n });\r\n };\r\n\r\n // 追加内容\r\n Class.fn.append = function(elem){\r\n return this.each(function(index, item){\r\n typeof elem === 'object'\r\n ? item.appendChild(elem)\r\n : item.innerHTML = item.innerHTML + elem;\r\n });\r\n };\r\n\r\n // 移除内容\r\n Class.fn.remove = function(elem){\r\n return this.each(function(index, item){\r\n elem ? item.removeChild(elem) : item.parentNode.removeChild(item);\r\n });\r\n };\r\n\r\n // 事件绑定\r\n Class.fn.on = function(eventName, fn, options){\r\n return this.each(function(index, item){\r\n lay.addEvent(item, eventName, fn, options)\r\n });\r\n };\r\n\r\n // 解除事件\r\n Class.fn.off = function(eventName, fn, options){\r\n return this.each(function(index, item){\r\n lay.removeEvent(item, eventName, fn, options)\r\n });\r\n };\r\n\r\n // export\r\n window.lay = lay;\r\n\r\n // 输出为 layui 模块\r\n if(window.layui && layui.define){\r\n layui.define(function(exports){\r\n exports(MOD_NAME, lay);\r\n });\r\n }\r\n\r\n}(window, window.document); // gulp build: lay-footer\r\n","/**\r\n * laytpl 轻量模板引擎\r\n */\r\n\r\nlayui.define(function(exports){\r\n \"use strict\";\r\n\r\n // 默认属性\r\n var config = {\r\n open: '{{', // 标签符前缀\r\n close: '}}' // 标签符后缀\r\n };\r\n\r\n // 模板工具\r\n var tool = {\r\n escape: function(html){\r\n var exp = /[<\"'>]|&(?=#[a-zA-Z0-9]+)/g;\r\n if(html === undefined || html === null) return '';\r\n\r\n html += '';\r\n if(!exp.test(html)) return html;\r\n\r\n return html.replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')\r\n .replace(//g, '>')\r\n .replace(/'/g, ''').replace(/\"/g, '"');\r\n }\r\n };\r\n\r\n // 内部方法\r\n var inner = {\r\n exp: function(str){\r\n return new RegExp(str, 'g');\r\n },\r\n // 错误提示\r\n error: function(e, source){\r\n var error = 'Laytpl Error: ';\r\n typeof console === 'object' && console.error(error + e + '\\n'+ (source || ''));\r\n return error + e;\r\n }\r\n };\r\n\r\n // constructor\r\n var Class = function(template, options){\r\n var that = this;\r\n that.config = that.config || {};\r\n that.template = template;\r\n\r\n // 简单属性合并\r\n var extend = function(obj){\r\n for(var i in obj){\r\n that.config[i] = obj[i];\r\n }\r\n };\r\n\r\n extend(config);\r\n extend(options);\r\n };\r\n\r\n // 标签正则\r\n Class.prototype.tagExp = function(type, _, __){\r\n var options = this.config;\r\n var types = [\r\n '#([\\\\s\\\\S])+?', // js 语句\r\n '([^{#}])*?' // 普通字段\r\n ][type || 0];\r\n\r\n return inner.exp((_||'') + options.open + types + options.close + (__||''));\r\n };\r\n\r\n // 模版解析\r\n Class.prototype.parse = function(template, data){\r\n var that = this;\r\n var options = that.config;\r\n var source = template;\r\n var jss = inner.exp('^'+ options.open +'#', '');\r\n var jsse = inner.exp(options.close +'$', '');\r\n\r\n // 模板必须为 string 类型\r\n if(typeof template !== 'string') return template;\r\n\r\n // 正则解析\r\n template = template.replace(/\\s+|\\r|\\t|\\n/g, ' ')\r\n .replace(inner.exp(options.open +'#'), options.open +'# ')\r\n .replace(inner.exp(options.close +'}'), '} '+ options.close).replace(/\\\\/g, '\\\\\\\\')\r\n\r\n // 不匹配指定区域的内容\r\n .replace(inner.exp(options.open + '!(.+?)!' + options.close), function(str){\r\n str = str.replace(inner.exp('^'+ options.open + '!'), '')\r\n .replace(inner.exp('!'+ options.close), '')\r\n .replace(inner.exp(options.open + '|' + options.close), function(tag){\r\n return tag.replace(/(.)/g, '\\\\$1')\r\n });\r\n return str\r\n })\r\n\r\n // 匹配 JS 语法\r\n .replace(/(?=\"|')/g, '\\\\').replace(that.tagExp(), function(str){\r\n str = str.replace(jss, '').replace(jsse, '');\r\n return '\";' + str.replace(/\\\\(.)/g, '$1') + ';view+=\"';\r\n })\r\n\r\n // 匹配普通输出语句\r\n .replace(that.tagExp(1), function(str){\r\n var start = '\"+laytpl.escape(';\r\n if(str.replace(/\\s/g, '') === options.open + options.close){\r\n return '';\r\n }\r\n str = str.replace(inner.exp(options.open + '|' + options.close), '');\r\n if(/^=/.test(str)){\r\n str = str.replace(/^=/, '');\r\n } else if(/^-/.test(str)){\r\n str = str.replace(/^-/, '');\r\n start = '\"+(';\r\n }\r\n return start + str.replace(/\\\\(.)/g, '$1') + ')+\"';\r\n });\r\n\r\n template = '\"use strict\";var view = \"' + template + '\";return view;';\r\n\r\n try {\r\n /**\r\n * 请注意: 开发者在使用模板语法时,需确保模板中的 JS 语句不来自于页面用户输入。\r\n * 即模板中的 JS 语句必须在页面开发者自身的可控范围内,否则请避免使用该模板解析。\r\n */\r\n that.cache = template = new Function('d, laytpl', template);\r\n return template(data, tool);\r\n } catch(e) {\r\n delete that.cache;\r\n return inner.error(e, source);\r\n }\r\n };\r\n\r\n // 数据渲染\r\n Class.prototype.render = function(data, callback){\r\n data = data || {};\r\n\r\n var that = this;\r\n var result = that.cache ? that.cache(data, tool) : that.parse(that.template, data);\r\n\r\n // 返回渲染结果\r\n typeof callback === 'function' && callback(result);\r\n return result;\r\n };\r\n\r\n // 创建实例\r\n var laytpl = function(template, options){\r\n return new Class(template, options);\r\n };\r\n\r\n // 配置全局属性\r\n laytpl.config = function(options){\r\n options = options || {};\r\n for(var i in options){\r\n config[i] = options[i];\r\n }\r\n };\r\n\r\n laytpl.v = '2.0.0';\r\n\r\n // export\r\n exports('laytpl', laytpl);\r\n});\r\n","/**\r\n * laypage 分页组件\r\n */\r\n\r\nlayui.define(function(exports){\r\n \"use strict\";\r\n \r\n var doc = document;\r\n var id = 'getElementById';\r\n var tag = 'getElementsByTagName';\r\n \r\n // 字符常量\r\n var MOD_NAME = 'laypage';\r\n var DISABLED = 'layui-disabled';\r\n \r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.config = options || {};\r\n that.config.index = ++laypage.index;\r\n that.render(true);\r\n };\r\n\r\n // 判断传入的容器类型\r\n Class.prototype.type = function(){\r\n var config = this.config;\r\n if(typeof config.elem === 'object'){\r\n return config.elem.length === undefined ? 2 : 3;\r\n }\r\n };\r\n\r\n // 分页视图\r\n Class.prototype.view = function(){\r\n var that = this;\r\n var config = that.config;\r\n\r\n // 连续页码个数\r\n var groups = config.groups = 'groups' in config \r\n ? (Number(config.groups) || 0)\r\n : 5; \r\n \r\n // 排版\r\n config.layout = typeof config.layout === 'object' \r\n ? config.layout \r\n : ['prev', 'page', 'next'];\r\n \r\n config.count = Number(config.count) || 0; // 数据总数\r\n config.curr = Number(config.curr) || 1; // 当前页\r\n\r\n // 每页条数的选择项\r\n config.limits = typeof config.limits === 'object'\r\n ? config.limits\r\n : [10, 20, 30, 40, 50];\r\n\r\n // 默认条数\r\n config.limit = Number(config.limit) || 10;\r\n \r\n // 总页数\r\n config.pages = Math.ceil(config.count/config.limit) || 1;\r\n \r\n // 当前页不能超过总页数\r\n if(config.curr > config.pages){\r\n config.curr = config.pages;\r\n } else if(config.curr < 1) { // 当前分页不能小于 1\r\n config.curr = 1;\r\n }\r\n \r\n // 连续分页个数不能低于 0 且不能大于总页数\r\n if(groups < 0){\r\n groups = 1;\r\n } else if (groups > config.pages){\r\n groups = config.pages;\r\n }\r\n \r\n config.prev = 'prev' in config ? config.prev : '上一页'; // 上一页文本\r\n config.next = 'next' in config ? config.next : '下一页'; // 下一页文本\r\n \r\n // 计算当前组\r\n var index = config.pages > groups \r\n ? Math.ceil( (config.curr + (groups > 1 ? 1 : 0)) / (groups > 0 ? groups : 1) )\r\n : 1;\r\n \r\n // 视图片段\r\n var views = {\r\n // 上一页\r\n prev: function(){\r\n return config.prev \r\n ? ''+ config.prev +''\r\n : '';\r\n }(),\r\n \r\n // 页码\r\n page: function(){\r\n var pager = [];\r\n \r\n // 数据量为0时,不输出页码\r\n if(config.count < 1){\r\n return '';\r\n }\r\n \r\n // 首页\r\n if(index > 1 && config.first !== false && groups !== 0){\r\n pager.push(''+ (config.first || 1) +'');\r\n }\r\n\r\n // 计算当前页码组的起始页\r\n var halve = Math.floor((groups-1)/2) // 页码数等分\r\n var start = index > 1 ? config.curr - halve : 1;\r\n var end = index > 1 ? (function(){\r\n var max = config.curr + (groups - halve - 1);\r\n return max > config.pages ? config.pages : max;\r\n }()) : groups;\r\n \r\n // 防止最后一组出现“不规定”的连续页码数\r\n if(end - start < groups - 1){\r\n start = end - groups + 1;\r\n }\r\n\r\n // 输出左分割符\r\n if(config.first !== false && start > 2){\r\n pager.push('...')\r\n }\r\n \r\n // 输出连续页码\r\n for(; start <= end; start++){\r\n if(start === config.curr){\r\n // 当前页\r\n pager.push(''+ start +'');\r\n } else {\r\n pager.push(''+ start +'');\r\n }\r\n }\r\n \r\n // 输出输出右分隔符 & 末页\r\n if(config.pages > groups && config.pages > end && config.last !== false){\r\n if(end + 1 < config.pages){\r\n pager.push('...');\r\n }\r\n if(groups !== 0){\r\n pager.push(''+ (config.last || config.pages) +'');\r\n }\r\n }\r\n\r\n return pager.join('');\r\n }(),\r\n \r\n // 下一页\r\n next: function(){\r\n return config.next \r\n ? ''+ config.next +''\r\n : '';\r\n }(),\r\n \r\n // 数据总数\r\n count: function(){\r\n var countText = typeof config.countText === 'object' ? config.countText : ['共 ', ' 条'];\r\n return ''+ countText[0] + config.count + countText[1] +''\r\n }(),\r\n \r\n // 每页条数\r\n limit: function(){\r\n var elemArr = ['';\r\n }(),\r\n \r\n // 刷新当前页\r\n refresh: [\r\n '',\r\n '',\r\n ''\r\n ].join(''),\r\n\r\n // 跳页区域\r\n skip: function(){\r\n var skipText = typeof config.skipText === 'object' ? config.skipText : [\r\n '到第',\r\n '页',\r\n '确定'\r\n ];\r\n return [\r\n ''+ skipText[0],\r\n '',\r\n skipText[1]+ '',\r\n ''\r\n ].join('');\r\n }()\r\n };\r\n\r\n return ['
        ',\r\n function(){\r\n var plate = [];\r\n layui.each(config.layout, function(index, item){\r\n if(views[item]){\r\n plate.push(views[item])\r\n }\r\n });\r\n return plate.join('');\r\n }(),\r\n '
        '].join('');\r\n };\r\n\r\n // 跳页的回调\r\n Class.prototype.jump = function(elem, isskip){\r\n if(!elem) return;\r\n\r\n var that = this;\r\n var config = that.config;\r\n var childs = elem.children;\r\n var btn = elem[tag]('button')[0];\r\n var input = elem[tag]('input')[0];\r\n var select = elem[tag]('select')[0];\r\n var skip = function(){\r\n var curr = Number(input.value.replace(/\\s|\\D/g, ''));\r\n if(curr){\r\n config.curr = curr;\r\n that.render();\r\n }\r\n };\r\n \r\n if(isskip) return skip();\r\n \r\n // 页码\r\n for(var i = 0, len = childs.length; i < len; i++){\r\n if(childs[i].nodeName.toLowerCase() === 'a'){\r\n laypage.on(childs[i], 'click', function(){\r\n var curr = Number(this.getAttribute('data-page'));\r\n if(curr < 1 || curr > config.pages) return;\r\n config.curr = curr;\r\n that.render();\r\n });\r\n }\r\n }\r\n \r\n // 条数\r\n if(select){\r\n laypage.on(select, 'change', function(){\r\n var value = this.value;\r\n if(config.curr*value > config.count){\r\n config.curr = Math.ceil(config.count/value);\r\n }\r\n config.limit = value;\r\n that.render();\r\n });\r\n }\r\n \r\n // 确定\r\n if(btn){\r\n laypage.on(btn, 'click', function(){\r\n skip();\r\n });\r\n }\r\n };\r\n \r\n // 输入页数字控制\r\n Class.prototype.skip = function(elem){\r\n if(!elem) return;\r\n\r\n var that = this;\r\n var input = elem[tag]('input')[0];\r\n\r\n if(!input) return;\r\n\r\n // 键盘事件\r\n laypage.on(input, 'keyup', function(e){\r\n var value = this.value;\r\n var keyCode = e.keyCode;\r\n\r\n if(/^(37|38|39|40)$/.test(keyCode)) return;\r\n\r\n if(/\\D/.test(value)){\r\n this.value = value.replace(/\\D/, '');\r\n }\r\n if(keyCode === 13){\r\n that.jump(elem, true)\r\n }\r\n });\r\n };\r\n\r\n // 渲染分页\r\n Class.prototype.render = function(load){\r\n var that = this;\r\n var config = that.config;\r\n var type = that.type();\r\n var view = that.view();\r\n \r\n if(type === 2){\r\n config.elem && (config.elem.innerHTML = view);\r\n } else if(type === 3){\r\n config.elem.html(view);\r\n } else {\r\n if(doc[id](config.elem)){\r\n doc[id](config.elem).innerHTML = view;\r\n }\r\n }\r\n\r\n config.jump && config.jump(config, load);\r\n \r\n var elem = doc[id]('layui-laypage-' + config.index);\r\n that.jump(elem);\r\n \r\n if(config.hash && !load){\r\n location.hash = '!'+ config.hash +'='+ config.curr;\r\n }\r\n \r\n that.skip(elem);\r\n };\r\n \r\n // 外部接口\r\n var laypage = {\r\n // 分页渲染\r\n render: function(options){\r\n var o = new Class(options);\r\n return o.index;\r\n },\r\n index: layui.laypage ? (layui.laypage.index + 10000) : 0,\r\n on: function(elem, even, fn){\r\n elem.attachEvent ? elem.attachEvent('on'+ even, function(e){ // for ie\r\n e.target = e.srcElement;\r\n fn.call(elem, e);\r\n }) : elem.addEventListener(even, fn, false);\r\n return this;\r\n }\r\n }\r\n\r\n exports(MOD_NAME, laypage);\r\n});\r\n","/** laydate 日期与时间控件 | MIT Licensed */ \r\n// @ts-expect-error\r\n;!function(window, document){ // gulp build: laydate-header\r\n \"use strict\";\r\n\r\n var isLayui = window.layui && layui.define;\r\n var ready = {\r\n getPath: window.lay && lay.getPath ? lay.getPath : '',\r\n\r\n // 载入 CSS 依赖\r\n link: function (href, fn, cssname) {\r\n // 未设置路径,则不主动加载 css\r\n if (!laydate.path) return;\r\n\r\n // 加载 css\r\n if (window.lay && lay.layui) {\r\n lay.layui.link(laydate.path + href, fn, cssname);\r\n }\r\n }\r\n };\r\n\r\n // 识别预先可能定义的指定全局对象\r\n var GLOBAL = window.LAYUI_GLOBAL || {};\r\n\r\n // 模块名\r\n var MOD_NAME = 'laydate';\r\n var MOD_ID = 'lay-' + MOD_NAME + '-id'; // 已渲染过的索引标记名\r\n\r\n // 外部调用\r\n var laydate = {\r\n v: '5.6.0', // layDate 版本号\r\n config: {\r\n weekStart: 0 // 默认周日一周的开始\r\n }, // 全局配置项\r\n index: window.laydate && window.laydate.v ? 100000 : 0,\r\n path: GLOBAL.laydate_dir || ready.getPath,\r\n\r\n // 设置全局项\r\n set: function (options) {\r\n var that = this;\r\n that.config = lay.extend({}, that.config, options);\r\n return that;\r\n },\r\n\r\n // 主体 CSS 等待事件\r\n ready: function (callback) {\r\n var cssname = 'laydate';\r\n var ver = '';\r\n var path = (isLayui ? 'modules/' : '') + 'laydate.css?v=' + laydate.v + ver;\r\n\r\n isLayui ? (\r\n layui['layui.all'] ?\r\n (typeof callback === 'function' && callback()) :\r\n layui.addcss(path, callback, cssname)\r\n ) : ready.link(path, callback, cssname);\r\n\r\n return this;\r\n }\r\n };\r\n\r\n // 操作当前实例\r\n var thisModule = function(){\r\n var that = this;\r\n var options = that.config;\r\n var id = options.id;\r\n\r\n thisModule.that[id] = that; // 记录当前实例对象\r\n\r\n return that.inst = {\r\n // 提示框\r\n hint: function(content){\r\n that.hint.call(that, content);\r\n },\r\n // 重载实例\r\n reload: function(options){\r\n that.reload.call(that, options);\r\n },\r\n config: that.config\r\n };\r\n };\r\n\r\n // 字符常量\r\n var ELEM = '.layui-laydate';\r\n var THIS = 'layui-this';\r\n var SHOW = 'layui-show';\r\n var HIDE = 'layui-hide';\r\n var DISABLED = 'laydate-disabled';\r\n var LIMIT_YEAR = [100, 200000];\r\n\r\n var ELEM_STATIC = 'layui-laydate-static';\r\n var ELEM_LIST = 'layui-laydate-list';\r\n var ELEM_SELECTED = 'laydate-selected';\r\n var ELEM_HINT = 'layui-laydate-hint';\r\n var ELEM_DAY_NOW = 'laydate-day-now';\r\n var ELEM_PREV = 'laydate-day-prev';\r\n var ELEM_NEXT = 'laydate-day-next';\r\n var ELEM_FOOTER = 'layui-laydate-footer';\r\n var ELEM_SHORTCUT = 'layui-laydate-shortcut';\r\n var ELEM_NOW = '.laydate-btns-now'\r\n var ELEM_CONFIRM = '.laydate-btns-confirm';\r\n var ELEM_TIME_TEXT = 'laydate-time-text';\r\n var ELEM_TIME_BTN = 'laydate-btns-time';\r\n var ELEM_PREVIEW = 'layui-laydate-preview';\r\n var ELEM_MAIN = 'layui-laydate-main';\r\n var ELEM_SHADE = 'layui-laydate-shade';\r\n\r\n // 组件构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++laydate.index;\r\n that.config = lay.extend({}, that.config, laydate.config, options);\r\n\r\n // 若 elem 非唯一,则拆分为多个实例\r\n var elem = lay(options.elem || that.config.elem);\r\n if(elem.length > 1){\r\n lay.each(elem, function(){\r\n laydate.render(lay.extend({}, that.config, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 初始化属性\r\n options = lay.extend(that.config, lay.options(elem[0])); // 继承节点上的属性\r\n\r\n // 若重复执行 render,则视为 reload 处理\r\n if(elem[0] && elem.attr(MOD_ID)){\r\n var newThat = thisModule.getThis(elem.attr(MOD_ID));\r\n if(!newThat) return;\r\n return newThat.reload(options);\r\n }\r\n\r\n // 初始化 id 属性 - 优先取 options > 元素 id > 自增索引\r\n options.id = 'id' in options ? options.id : (\r\n elem.attr('id') || that.index\r\n );\r\n\r\n // 自增索引\r\n options.index = that.index;\r\n\r\n // 初始化\r\n laydate.ready(function(){\r\n that.init();\r\n });\r\n };\r\n\r\n // 日期格式字符\r\n var dateType = 'yyyy|y|MM|M|dd|d|HH|H|mm|m|ss|s';\r\n\r\n // 将日期格式字符转换为数组\r\n thisModule.formatArr = function(format){\r\n return (format || '').match(new RegExp(dateType + '|.', 'g')) || []\r\n };\r\n\r\n /*\r\n 组件操作\r\n */\r\n\r\n // 是否闰年\r\n Class.isLeapYear = function(year){\r\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n };\r\n\r\n // 默认配置\r\n Class.prototype.config = {\r\n type: 'date' //控件类型,支持:year/month/date/time/datetime\r\n ,range: false //是否开启范围选择,即双控件\r\n ,format: 'yyyy-MM-dd' //默认日期格式\r\n ,value: null //默认日期,支持传入new Date(),或者符合format参数设定的日期格式字符\r\n ,isInitValue: true //用于控制是否自动向元素填充初始值(需配合 value 参数使用)\r\n ,min: '1900-1-1' //有效最小日期,年月日必须用“-”分割,时分秒必须用“:”分割。注意:它并不是遵循 format 设定的格式。\r\n ,max: '2099-12-31' //有效最大日期,同上\r\n ,trigger: 'click' //呼出控件的事件\r\n ,show: false //是否直接显示,如果设置 true,则默认直接显示控件\r\n ,showBottom: true //是否显示底部栏\r\n ,isPreview: true //是否显示值预览\r\n ,btns: ['clear', 'now', 'confirm'] //右下角显示的按钮,会按照数组顺序排列\r\n ,lang: 'cn' //语言,只支持cn/en,即中文和英文\r\n ,theme: 'default' //主题\r\n ,position: null //控件定位方式定位, 默认absolute,支持:fixed/absolute/static\r\n ,calendar: false //是否开启公历重要节日,仅支持中文版\r\n ,mark: {} //日期备注,如重要事件或活动标记\r\n ,holidays: null // 标注法定节假日或补假上班\r\n ,zIndex: null //控件层叠顺序\r\n ,done: null //控件选择完毕后的回调,点击清空/现在/确定也均会触发\r\n ,change: null //日期时间改变后的回调\r\n ,autoConfirm: true //是否自动确认(日期|年份|月份选择器非range下是否自动确认)\r\n ,shade: 0\r\n };\r\n\r\n //多语言\r\n Class.prototype.lang = function(){\r\n var that = this\r\n ,options = that.config\r\n ,text = {\r\n cn: {\r\n weeks: ['日', '一', '二', '三', '四', '五', '六']\r\n ,time: ['时', '分', '秒']\r\n ,timeTips: '选择时间'\r\n ,startTime: '开始时间'\r\n ,endTime: '结束时间'\r\n ,dateTips: '返回日期'\r\n ,month: ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二']\r\n ,tools: {\r\n confirm: '确定'\r\n ,clear: '清空'\r\n ,now: '现在'\r\n }\r\n ,timeout: '结束时间不能早于开始时间
        请重新选择'\r\n ,invalidDate: '不在有效日期或时间范围内'\r\n ,formatError: ['日期格式不合法
        必须遵循下述格式:
        ', '
        已为你重置']\r\n ,preview: '当前选中的结果'\r\n }\r\n ,en: {\r\n weeks: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']\r\n ,time: ['Hours', 'Minutes', 'Seconds']\r\n ,timeTips: 'Select Time'\r\n ,startTime: 'Start Time'\r\n ,endTime: 'End Time'\r\n ,dateTips: 'Select Date'\r\n ,month: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\r\n ,tools: {\r\n confirm: 'Confirm'\r\n ,clear: 'Clear'\r\n ,now: 'Now'\r\n }\r\n ,timeout: 'End time cannot be less than start Time
        Please re-select'\r\n ,invalidDate: 'Invalid date'\r\n ,formatError: ['The date format error
        Must be followed:
        ', '
        It has been reset']\r\n ,preview: 'The selected result'\r\n }\r\n };\r\n return text[options.lang] || text['cn'];\r\n };\r\n\r\n Class.prototype.markerOfChineseFestivals = {\r\n '0-1-1': '元旦',\r\n '0-2-14': '情人' ,\r\n '0-3-8': '妇女',\r\n '0-3-12': '植树',\r\n '0-4-1': '愚人',\r\n '0-5-1': '劳动',\r\n '0-5-4': '青年',\r\n '0-6-1': '儿童',\r\n '0-9-10': '教师',\r\n '0-10-1': '国庆',\r\n '0-12-25': '圣诞'\r\n }\r\n\r\n // 重载实例\r\n Class.prototype.reload = function(options){\r\n var that = this;\r\n that.config = lay.extend({}, that.config, options);\r\n that.init();\r\n };\r\n\r\n //初始准备\r\n Class.prototype.init = function(){\r\n var that = this\r\n ,options = that.config\r\n ,isStatic = options.position === 'static'\r\n ,format = {\r\n year: 'yyyy'\r\n ,month: 'yyyy-MM'\r\n ,date: 'yyyy-MM-dd'\r\n ,time: 'HH:mm:ss'\r\n ,datetime: 'yyyy-MM-dd HH:mm:ss'\r\n };\r\n\r\n options.elem = lay(options.elem);\r\n options.eventElem = lay(options.eventElem);\r\n\r\n if(!options.elem[0]) return;\r\n\r\n layui.type(options.theme) !== 'array' && (options.theme = [options.theme]);\r\n // 设置了全面版模式\r\n if (options.fullPanel) {\r\n if (options.type !== 'datetime' || options.range) {\r\n // 目前只支持datetime的全面版\r\n delete options.fullPanel;\r\n }\r\n }\r\n\r\n //日期范围分隔符\r\n that.rangeStr = options.range ? (\r\n typeof options.range === 'string' ? options.range : '-'\r\n ) : '';\r\n\r\n //日期范围的日历面板是否联动\r\n that.rangeLinked = !!(options.range && options.rangeLinked && (options.type === 'date' || options.type === 'datetime'))\r\n\r\n //切换日历联动方式\r\n that.autoCalendarModel = function () {\r\n var state = that.rangeLinked;\r\n that.rangeLinked = (options.range && (options.type === 'date' || options.type === 'datetime'))\r\n && ((!that.startDate || !that.endDate) || (that.startDate && that.endDate && that.startDate.year === that.endDate.year && that.startDate.month === that.endDate.month));\r\n lay(that.elem)[that.rangeLinked ? 'addClass' : 'removeClass']('layui-laydate-linkage');\r\n return that.rangeLinked != state; // 返回发生了变化\r\n };\r\n\r\n //是否自动切换\r\n that.autoCalendarModel.auto = that.rangeLinked && options.rangeLinked === 'auto';\r\n\r\n //若 range 参数为数组,则表示为开始日期和结束日期的 input 对象\r\n if(layui.type(options.range) === 'array'){\r\n that.rangeElem = [\r\n lay(options.range[0]),\r\n lay(options.range[1])\r\n ];\r\n }\r\n\r\n //若 type 设置非法,则初始化为 date 类型\r\n if(!format[options.type]){\r\n window.console && console.error && console.error('laydate type error:\\''+ options.type + '\\' is not supported')\r\n options.type = 'date';\r\n }\r\n\r\n //根据不同 type,初始化默认 format\r\n if(options.format === format.date){\r\n options.format = format[options.type] || format.date;\r\n }\r\n\r\n //将日期格式转化成数组\r\n that.format = thisModule.formatArr(options.format);\r\n\r\n // 设置了一周的开始是周几,此处做一个控制\r\n if (options.weekStart) {\r\n if (!/^[0-6]$/.test(options.weekStart)) {\r\n var lang = that.lang();\r\n options.weekStart = lang.weeks.indexOf(options.weekStart);\r\n if (options.weekStart === -1) options.weekStart = 0;\r\n }\r\n }\r\n\r\n //生成正则表达式\r\n that.EXP_IF = '';\r\n that.EXP_SPLIT = '';\r\n lay.each(that.format, function(i, item){\r\n var EXP = new RegExp(dateType).test(item)\r\n ? '\\\\d{'+ function(){\r\n if(new RegExp(dateType).test(that.format[i === 0 ? i + 1 : i - 1]||'')){\r\n if(/^yyyy|y$/.test(item)) return 4;\r\n return item.length;\r\n }\r\n if(/^yyyy$/.test(item)) return '1,4';\r\n if(/^y$/.test(item)) return '1,308';\r\n return '1,2';\r\n }() +'}'\r\n : '\\\\' + item;\r\n that.EXP_IF = that.EXP_IF + EXP;\r\n that.EXP_SPLIT = that.EXP_SPLIT + '(' + EXP + ')';\r\n });\r\n //验证日期格式正则\r\n that.EXP_IF_ONE = new RegExp('^'+ that.EXP_IF +'$'); //验证单个日期格式\r\n that.EXP_IF = new RegExp('^'+ (\r\n options.range ?\r\n that.EXP_IF + '\\\\s\\\\'+ that.rangeStr + '\\\\s' + that.EXP_IF\r\n : that.EXP_IF\r\n ) +'$');\r\n that.EXP_SPLIT = new RegExp('^'+ that.EXP_SPLIT +'$', '');\r\n\r\n //如果不是 input|textarea 元素,则默认采用 click 事件\r\n if(!that.isInput(options.elem[0])){\r\n if(options.trigger === 'focus'){\r\n options.trigger = 'click';\r\n }\r\n }\r\n\r\n // 设置唯一 KEY\r\n options.elem.attr('lay-key', that.index);\r\n options.eventElem.attr('lay-key', that.index);\r\n options.elem.attr(MOD_ID, options.id); // 渲染过的标记\r\n\r\n\r\n //获取限制内日期\r\n lay.each(['min', 'max'], function(i, item){\r\n var ymd = [];\r\n var hms = [];\r\n if(typeof options[item] === 'number'){ //如果为数字\r\n var day = options[item]\r\n ,tDate = new Date()\r\n ,time = that.newDate({ //今天的最大毫秒数\r\n year: tDate.getFullYear()\r\n ,month: tDate.getMonth()\r\n ,date: tDate.getDate()\r\n ,hours: i ? 23 : 0\r\n ,minutes: i ? 59 : 0\r\n ,seconds: i ? 59 : 0\r\n }).getTime()\r\n ,STAMP = 86400000 //代表一天的毫秒数\r\n ,thisDate = new Date(\r\n day ? (\r\n day < STAMP ? time + day*STAMP : day //如果数字小于一天的毫秒数,则数字为天数,否则为毫秒数\r\n ) : time\r\n );\r\n ymd = [thisDate.getFullYear(), thisDate.getMonth() + 1, thisDate.getDate()];\r\n hms = [thisDate.getHours(), thisDate.getMinutes(), thisDate.getSeconds()];\r\n } else if(typeof options[item] === 'string') {\r\n ymd = (options[item].match(/\\d+-\\d+-\\d+/) || [''])[0].split('-');\r\n hms = (options[item].match(/\\d+:\\d+:\\d+/) || [''])[0].split(':');\r\n } else if(typeof options[item] === 'object'){\r\n return options[item];\r\n }\r\n options[item] = {\r\n year: ymd[0] | 0 || new Date().getFullYear()\r\n ,month: ymd[1] ? (ymd[1] | 0) - 1 : new Date().getMonth()\r\n ,date: ymd[2] | 0 || new Date().getDate()\r\n ,hours: hms[0] | 0\r\n ,minutes: hms[1] | 0\r\n ,seconds: hms[2] | 0\r\n };\r\n });\r\n\r\n that.elemID = 'layui-laydate'+ options.elem.attr('lay-key');\r\n\r\n if(options.show || isStatic) that.render();\r\n isStatic || that.events();\r\n\r\n // 重定义 input 元素的 get set\r\n if(typeof options.formatToDisplay === 'function'){\r\n if(that.isInput(options.elem[0])){\r\n that.formatToDisplay(options.elem[0], options.formatToDisplay);\r\n } else {\r\n var rangeElem = that.rangeElem;\r\n if(rangeElem){\r\n that.formatToDisplay(rangeElem[0][0], options.formatToDisplay);\r\n that.formatToDisplay(rangeElem[1][0], options.formatToDisplay);\r\n }\r\n }\r\n }\r\n\r\n //默认赋值\r\n if(options.value && options.isInitValue){\r\n if(layui.type(options.value) === 'date'){\r\n that.setValue(that.parse(0, that.systemDate(options.value)));\r\n } else {\r\n that.setValue(options.value);\r\n }\r\n }\r\n };\r\n\r\n //控件主体渲染\r\n Class.prototype.render = function(){\r\n var that = this\r\n ,options = that.config\r\n ,lang = that.lang()\r\n ,isStatic = options.position === 'static'\r\n\r\n //主面板\r\n ,elem = that.elem = lay.elem('div', {\r\n id: that.elemID\r\n ,\"class\": [\r\n 'layui-laydate'\r\n ,options.range ? ' layui-laydate-range' : ''\r\n ,that.rangeLinked ? ' layui-laydate-linkage' : ''\r\n ,isStatic ? (' '+ ELEM_STATIC) : ''\r\n ,options.fullPanel ? ' laydate-theme-fullpanel' : '' // 全面版\r\n // ,options.theme && options.theme !== 'default' && !/^#/.test(options.theme) ? (' laydate-theme-' + options.theme) : ''\r\n ,(function () {\r\n var themeStr = '';\r\n lay.each(options.theme, function (index, theme) {\r\n if (theme !== 'default' && !/^#/.test(theme)) {\r\n themeStr += ' laydate-theme-' + theme;\r\n }\r\n })\r\n return themeStr;\r\n })()\r\n ].join('')\r\n })\r\n\r\n //主区域\r\n ,elemMain = that.elemMain = []\r\n ,elemHeader = that.elemHeader = []\r\n ,elemCont = that.elemCont = []\r\n ,elemTable = that.table = []\r\n\r\n //底部区域\r\n ,divFooter = that.footer = lay.elem('div', {\r\n \"class\": ELEM_FOOTER\r\n })\r\n\r\n //快捷栏\r\n ,divShortcut = that.shortcut = lay.elem('ul', {\r\n \"class\": ELEM_SHORTCUT\r\n });\r\n\r\n if(options.zIndex) elem.style.zIndex = options.zIndex;\r\n\r\n //单双日历区域\r\n lay.each(new Array(2), function(i){\r\n if(!options.range && i > 0){\r\n return true;\r\n }\r\n\r\n //头部区域\r\n var divHeader = lay.elem('div', {\r\n \"class\": 'layui-laydate-header'\r\n })\r\n\r\n //左右切换\r\n ,headerChild = [function(){ //上一年\r\n var elem = lay.elem('i', {\r\n \"class\": 'layui-icon laydate-icon laydate-prev-y'\r\n });\r\n elem.innerHTML = '';\r\n return elem;\r\n }(), function(){ //上一月\r\n var elem = lay.elem('i', {\r\n \"class\": 'layui-icon laydate-icon laydate-prev-m'\r\n });\r\n elem.innerHTML = '';\r\n return elem;\r\n }(), function(){ //年月选择\r\n var elem = lay.elem('div', {\r\n \"class\": 'laydate-set-ym'\r\n });\r\n elem.appendChild(lay.elem('span'));\r\n elem.appendChild(lay.elem('span'));\r\n return elem;\r\n }(), function(){ //下一月\r\n var elem = lay.elem('i', {\r\n \"class\": 'layui-icon laydate-icon laydate-next-m'\r\n });\r\n elem.innerHTML = '';\r\n return elem;\r\n }(), function(){ //下一年\r\n var elem = lay.elem('i', {\r\n \"class\": 'layui-icon laydate-icon laydate-next-y'\r\n });\r\n elem.innerHTML = '';\r\n return elem;\r\n }()]\r\n\r\n //日历内容区域\r\n ,divContent = lay.elem('div', {\r\n \"class\": 'layui-laydate-content'\r\n })\r\n ,table = lay.elem('table')\r\n ,thead = lay.elem('thead'), theadTr = lay.elem('tr');\r\n\r\n //生成年月选择\r\n lay.each(headerChild, function(i, item){\r\n divHeader.appendChild(item);\r\n });\r\n\r\n //生成表格\r\n thead.appendChild(theadTr);\r\n lay.each(new Array(6), function(i){ //表体\r\n var tr = table.insertRow(0);\r\n lay.each(new Array(7), function(j){\r\n if(i === 0){\r\n var th = lay.elem('th');\r\n th.innerHTML = lang.weeks[(j + options.weekStart) % 7];\r\n theadTr.appendChild(th);\r\n }\r\n tr.insertCell(j);\r\n });\r\n });\r\n table.insertBefore(thead, table.children[0]); //表头\r\n divContent.appendChild(table);\r\n\r\n elemMain[i] = lay.elem('div', {\r\n \"class\": ELEM_MAIN + ' laydate-main-list-'+ i\r\n });\r\n\r\n elemMain[i].appendChild(divHeader);\r\n elemMain[i].appendChild(divContent);\r\n\r\n elemHeader.push(headerChild);\r\n elemCont.push(divContent);\r\n elemTable.push(table);\r\n });\r\n\r\n //生成底部栏\r\n lay(divFooter).html(function(){\r\n var html = [], btns = [];\r\n if(options.type === 'datetime'){\r\n html.push(''+ lang.timeTips +'');\r\n }\r\n if(!(!options.range && options.type === 'datetime') || options.fullPanel){\r\n html.push('')\r\n }\r\n\r\n lay.each(options.btns, function(i, item){\r\n var title = lang.tools[item] || 'btn';\r\n if(options.range && item === 'now') return;\r\n if(isStatic && item === 'clear') title = options.lang === 'cn' ? '重置' : 'Reset';\r\n btns.push(''+ title +'');\r\n });\r\n html.push('');\r\n return html.join('');\r\n }());\r\n\r\n // 生成快捷键栏\r\n if (options.shortcuts) {\r\n elem.appendChild(divShortcut);\r\n lay(divShortcut).html(function () {\r\n var shortcutBtns = [];\r\n lay.each(options.shortcuts, function (i, item) {\r\n shortcutBtns.push('
      • '+item.text+'
      • ')\r\n })\r\n return shortcutBtns.join('');\r\n }()).find('li').on('click', function (event) {\r\n var btnSetting = options.shortcuts[this.dataset['index']] || {};\r\n var value = (typeof btnSetting.value === 'function'\r\n ? btnSetting.value()\r\n : btnSetting.value) || [];\r\n if (!layui.isArray(value)) {\r\n value = [value];\r\n }\r\n var type = options.type;\r\n lay.each(value, function (i, item) {\r\n var dateTime = [options.dateTime, that.endDate][i];\r\n if (type === 'time' && layui.type(item) !== 'date') {\r\n if (that.EXP_IF.test(item)) {\r\n item = (item.match(that.EXP_SPLIT) || []).slice(1);\r\n lay.extend(dateTime, {hours: item[0] | 0, minutes: item[2] | 0, seconds: item[4] | 0})\r\n }\r\n } else {\r\n lay.extend(dateTime, that.systemDate(layui.type(item) === 'date' ? item : new Date(item)))\r\n }\r\n\r\n if (type === 'time' || type === 'datetime') {\r\n that[['startTime', 'endTime'][i]] = {\r\n hours: dateTime.hours,\r\n minutes: dateTime.minutes,\r\n seconds: dateTime.seconds,\r\n }\r\n }\r\n if (i === 0) { // 第一个值作为startDate\r\n that.startDate = lay.extend({}, dateTime);\r\n } else {\r\n that.endState = true;\r\n }\r\n if (type === 'year' || type === 'month' || type === 'time') {\r\n that.listYM[i] = [dateTime.year, dateTime.month + 1];\r\n } else if (i) {\r\n that.autoCalendarModel.auto && that.autoCalendarModel();\r\n }\r\n });\r\n that.checkDate('limit').calendar(null, null, 'init');\r\n\r\n var timeBtn = lay(that.footer).find('.'+ ELEM_TIME_BTN).removeClass(DISABLED);\r\n timeBtn && timeBtn.attr('lay-type') === 'date' && timeBtn[0].click();\r\n that.done(null, 'change');\r\n\r\n lay(this).addClass(THIS);\r\n\r\n // 自动确认\r\n if(options.position !== 'static'){\r\n that.setValue(that.parse()).done().remove();\r\n }\r\n /*\r\n if (options.position !== 'static' && !options.range && options.autoConfirm) {\r\n if (type === 'date') {\r\n that.choose(lay(elem).find('td.layui-this'))\r\n } else if (type === 'year' || type === 'month') {\r\n if(lay(elemMain[0]).find('.' + ELEM_MAIN + ' li.' + THIS + ':not(.laydate-disabled)')[0]) {\r\n that.setValue(that.parse()).done().remove();\r\n }\r\n }\r\n }\r\n */\r\n })\r\n }\r\n\r\n //插入到主区域\r\n lay.each(elemMain, function(i, main){\r\n elem.appendChild(main);\r\n });\r\n options.showBottom && elem.appendChild(divFooter);\r\n\r\n // 生成自定义主题\r\n var style = lay.elem('style');\r\n var styleText = [];\r\n var colorTheme;\r\n var isPrimaryColor = true;\r\n lay.each(options.theme, function (index, theme) {\r\n // 主色\r\n if(isPrimaryColor && /^#/.test(theme)){\r\n colorTheme = true;\r\n isPrimaryColor = false;\r\n styleText.push([\r\n '#{{id}} .layui-laydate-header{background-color:{{theme}};}',\r\n '#{{id}} li.layui-this,#{{id}} td.layui-this>div{background-color:{{theme}} !important;}',\r\n options.theme.indexOf('circle') !== -1 ? '' : '#{{id}} .layui-this{background-color:{{theme}} !important;}',\r\n '#{{id}} .laydate-day-now{color:{{theme}} !important;}',\r\n '#{{id}} .laydate-day-now:after{border-color:{{theme}} !important;}'\r\n ].join('').replace(/{{id}}/g, that.elemID).replace(/{{theme}}/g, theme));\r\n return;\r\n }\r\n // 第二个自定义颜色作为辅色\r\n if(!isPrimaryColor && /^#/.test(theme)){\r\n styleText.push([\r\n '#{{id}} .laydate-selected>div{background-color:{{theme}} !important;}',\r\n '#{{id}} .laydate-selected:hover>div{background-color:{{theme}} !important;}'\r\n ].join('').replace(/{{id}}/g, that.elemID).replace(/{{theme}}/g, theme));\r\n }\r\n });\r\n //快捷栏样式\r\n if (options.shortcuts && options.range) {\r\n styleText.push('#{{id}}.layui-laydate-range{width: 628px;}'.replace(/{{id}}/g, that.elemID))\r\n }\r\n if (styleText.length) {\r\n styleText = styleText.join('');\r\n if('styleSheet' in style){\r\n style.setAttribute('type', 'text/css');\r\n style.styleSheet.cssText = styleText;\r\n } else {\r\n style.innerHTML = styleText;\r\n }\r\n\r\n colorTheme && lay(elem).addClass('laydate-theme-molv');\r\n elem.appendChild(style);\r\n }\r\n\r\n //移除上一个控件\r\n that.remove(Class.thisElemDate);\r\n\r\n //记录当前执行的实例索引\r\n laydate.thisId = options.id;\r\n\r\n //如果是静态定位,则插入到指定的容器中,否则,插入到body\r\n isStatic ? options.elem.append(elem) : (\r\n document.body.appendChild(elem)\r\n ,that.position() //定位\r\n );\r\n\r\n var shade = options.shade ? ('
        ') : '';\r\n elem.insertAdjacentHTML('beforebegin', shade);\r\n\r\n that.checkDate().calendar(null, 0, 'init'); //初始校验\r\n that.changeEvent(); //日期切换\r\n\r\n Class.thisElemDate = that.elemID;\r\n\r\n that.renderAdditional()\r\n typeof options.ready === 'function' && options.ready(lay.extend({}, options.dateTime, {\r\n month: options.dateTime.month + 1\r\n }));\r\n\r\n that.preview();\r\n };\r\n\r\n //控件移除\r\n Class.prototype.remove = function(prev){\r\n var that = this\r\n ,options = that.config\r\n ,elem = lay('#'+ (prev || that.elemID));\r\n if(!elem[0]) return that;\r\n\r\n if(!elem.hasClass(ELEM_STATIC)){\r\n that.checkDate(function(){\r\n elem.remove();\r\n //delete options.dateTime;\r\n delete that.startDate;\r\n delete that.endDate;\r\n delete that.endState;\r\n delete that.startTime;\r\n delete that.endTime;\r\n delete laydate.thisId;\r\n typeof options.close === 'function' && options.close(that);\r\n });\r\n }\r\n lay('.' + ELEM_SHADE).remove();\r\n return that;\r\n };\r\n\r\n //定位算法\r\n Class.prototype.position = function(){\r\n var that = this\r\n ,options = that.config;\r\n lay.position(options.elem[0], that.elem, {\r\n position: options.position\r\n });\r\n return that;\r\n };\r\n\r\n // 提示\r\n Class.prototype.hint = function(opts){\r\n var that = this;\r\n var options = that.config;\r\n var div = lay.elem('div', {\r\n \"class\": ELEM_HINT\r\n });\r\n\r\n if(!that.elem) return;\r\n\r\n // 兼容旧版参数\r\n if(typeof opts === 'object'){\r\n opts = opts || {};\r\n } else {\r\n opts = {\r\n content: opts\r\n }\r\n }\r\n\r\n div.innerHTML = opts.content || '';\r\n lay(that.elem).find('.'+ ELEM_HINT).remove();\r\n that.elem.appendChild(div);\r\n\r\n clearTimeout(that.hinTimer);\r\n that.hinTimer = setTimeout(function(){\r\n lay(that.elem).find('.'+ ELEM_HINT).remove();\r\n }, 'ms' in opts ? opts.ms : 3000);\r\n };\r\n\r\n //获取递增/减后的年月\r\n Class.prototype.getAsYM = function(Y, M, type){\r\n type ? M-- : M++;\r\n if(M < 0){\r\n M = 11;\r\n Y--;\r\n }\r\n if(M > 11){\r\n M = 0;\r\n Y++;\r\n }\r\n return [Y, M];\r\n };\r\n\r\n //系统日期\r\n Class.prototype.systemDate = function(newDate){\r\n var thisDate = newDate || new Date();\r\n return {\r\n year: thisDate.getFullYear() //年\r\n ,month: thisDate.getMonth() //月\r\n ,date: thisDate.getDate() //日\r\n ,hours: newDate ? newDate.getHours() : 0 //时\r\n ,minutes: newDate ? newDate.getMinutes() : 0 //分\r\n ,seconds: newDate ? newDate.getSeconds() : 0 //秒\r\n }\r\n };\r\n\r\n //日期校验\r\n Class.prototype.checkDate = function(fn){\r\n var that = this\r\n ,thisDate = new Date()\r\n ,options = that.config\r\n ,lang = that.lang()\r\n ,dateTime = options.dateTime = options.dateTime || that.systemDate()\r\n ,thisMaxDate, error\r\n\r\n ,elem = options.elem[0]\r\n ,valType = that.isInput(elem) ? 'val' : 'html'\r\n ,value = function(){\r\n //如果传入了开始和结束日期的 input 对象,则将其拼接为日期范围字符\r\n if(that.rangeElem){\r\n var vals = [that.rangeElem[0].val(), that.rangeElem[1].val()];\r\n\r\n if(vals[0] && vals[1]){\r\n return vals.join(' ' + that.rangeStr + ' ');\r\n }\r\n }\r\n return that.isInput(elem)\r\n ? elem.value\r\n : (options.position === 'static' ? '' : lay(elem).attr('lay-date'));\r\n }()\r\n\r\n //校验日期有效数字\r\n ,checkValid = function(dateTime){\r\n if (!dateTime) {\r\n return;\r\n }\r\n if(dateTime.year > LIMIT_YEAR[1]) dateTime.year = LIMIT_YEAR[1], error = true; //不能超过20万年\r\n if(dateTime.month > 11) dateTime.month = 11, error = true;\r\n if(dateTime.seconds > 59) dateTime.seconds = 0, dateTime.minutes++, error = true;\r\n if(dateTime.minutes > 59) dateTime.minutes = 0, dateTime.hours++, error = true;\r\n if(dateTime.hours > 23) dateTime.hours = 0, error = true;\r\n\r\n //计算当前月的最后一天\r\n thisMaxDate = laydate.getEndDate(dateTime.month + 1, dateTime.year);\r\n if(dateTime.date > thisMaxDate) dateTime.date = thisMaxDate, error = true;\r\n }\r\n\r\n //获得初始化日期值\r\n ,initDate = function(dateTime, value, index){\r\n var startEnd = ['startTime', 'endTime'];\r\n value = (value.match(that.EXP_SPLIT) || []).slice(1);\r\n index = index || 0;\r\n\r\n if(options.range){\r\n that[startEnd[index]] = that[startEnd[index]] || {};\r\n }\r\n lay.each(that.format, function(i, item){\r\n var thisv = parseFloat(value[i]);\r\n if(value[i].length < item.length) error = true;\r\n if(/yyyy|y/.test(item)){ //年\r\n if(thisv < LIMIT_YEAR[0]) thisv = LIMIT_YEAR[0], error = true; //年不能低于100年\r\n dateTime.year = thisv;\r\n } else if(/MM|M/.test(item)){ //月\r\n if(thisv < 1) thisv = 1, error = true;\r\n dateTime.month = thisv - 1;\r\n } else if(/dd|d/.test(item)){ //日\r\n if(thisv < 1) thisv = 1, error = true;\r\n dateTime.date = thisv;\r\n } else if(/HH|H/.test(item)){ //时\r\n if (thisv < 0) thisv = 0, error = true;\r\n if (thisv > 23) thisv = 23, error = true;\r\n dateTime.hours = thisv;\r\n options.range && (that[startEnd[index]].hours = thisv);\r\n } else if(/mm|m/.test(item)){ //分\r\n if (thisv < 0) thisv = 0, error = true;\r\n if (thisv > 59) thisv = 59, error = true;\r\n dateTime.minutes = thisv;\r\n options.range && (that[startEnd[index]].minutes = thisv);\r\n } else if(/ss|s/.test(item)){ //秒\r\n if (thisv < 0) thisv = 0, error = true;\r\n if (thisv > 59) thisv = 59, error = true;\r\n dateTime.seconds = thisv;\r\n options.range && (that[startEnd[index]].seconds = thisv);\r\n }\r\n });\r\n checkValid(dateTime);\r\n };\r\n\r\n if(fn === 'limit') {\r\n if (options.range) {\r\n checkValid(that.rangeLinked ? that.startDate : dateTime); // 校验开始时间\r\n that.endDate && checkValid(that.endDate); // 校验结束时间\r\n } else {\r\n checkValid(dateTime);\r\n }\r\n return that;\r\n }\r\n\r\n value = value || options.value;\r\n if(typeof value === 'string'){\r\n value = value.replace(/\\s+/g, ' ').replace(/^\\s|\\s$/g, '');\r\n }\r\n\r\n //如果开启范围,则计算结束日期\r\n var getEndDate = function(){\r\n if(options.range){\r\n that.endDate = that.endDate || lay.extend({}, options.dateTime, function(){\r\n var obj = {}\r\n ,dateTime = options.dateTime\r\n ,EYM = that.getAsYM(dateTime.year, dateTime.month);\r\n\r\n //初始右侧面板的年月\r\n if(options.type === 'year'){\r\n obj.year = dateTime.year + 1;\r\n } else if(options.type !== 'time'){\r\n obj.year = EYM[0];\r\n obj.month = EYM[1];\r\n }\r\n\r\n //初始右侧面板的时间\r\n if(options.type === 'datetime' || options.type === 'time'){\r\n obj.hours = 23;\r\n obj.minutes = obj.seconds = 59;\r\n }\r\n\r\n return obj;\r\n }());\r\n }\r\n };\r\n getEndDate();\r\n\r\n if(typeof value === 'string' && value){\r\n if(that.EXP_IF.test(value)){ //校验日期格式\r\n if(options.range){\r\n value = value.split(' '+ that.rangeStr +' ');\r\n lay.each([options.dateTime, that.endDate], function(i, item){\r\n initDate(item, value[i], i);\r\n });\r\n } else {\r\n initDate(dateTime, value);\r\n }\r\n } else {\r\n //格式不合法\r\n that.hint(lang.formatError[0] + (\r\n options.range ? (options.format + ' '+ that.rangeStr +' ' + options.format) : options.format\r\n ) + lang.formatError[1]);\r\n error = true;\r\n }\r\n } else if(value && layui.type(value) === 'date'){ //若值为日期对象\r\n options.dateTime = that.systemDate(value);\r\n } else {\r\n //重置开始日期\r\n options.dateTime = that.systemDate();\r\n delete that.startTime;\r\n\r\n //重置结束日期\r\n delete that.endDate; //删除原有的结束日期\r\n getEndDate(); //并重新获得新的结束日期\r\n delete that.endTime;\r\n }\r\n\r\n //从日期范围表单中获取初始值\r\n (function(){\r\n if(that.rangeElem){\r\n var vals = [that.rangeElem[0].val(), that.rangeElem[1].val()]\r\n ,arrDate = [options.dateTime, that.endDate];\r\n lay.each(vals, function(_i, _v){\r\n if(that.EXP_IF_ONE.test(_v)){ //校验日期格式\r\n initDate(arrDate[_i], _v, _i);\r\n }\r\n });\r\n }\r\n })();\r\n\r\n // 校验日期有效数字\r\n checkValid(dateTime);\r\n if(options.range) checkValid(that.endDate);\r\n\r\n // 如果初始值格式错误,则纠正初始值\r\n if(error && value){\r\n that.setValue(\r\n options.range ? (that.endDate ? that.parse() : '') : that.parse()\r\n );\r\n }\r\n\r\n //如果当前日期不在设定的最大小日期区间,则自动纠正在可选区域\r\n //校验主面板是否在可选日期区间\r\n var minMaxError;\r\n if(that.getDateTime(dateTime) > that.getDateTime(options.max)){ //若超出最大日期\r\n dateTime = options.dateTime = lay.extend({}, options.max);\r\n minMaxError = true;\r\n } else if(that.getDateTime(dateTime) < that.getDateTime(options.min)){ //若少于最小日期\r\n dateTime = options.dateTime = lay.extend({}, options.min);\r\n minMaxError = true;\r\n }\r\n\r\n //校验右侧面板是否在可选日期区间\r\n if(options.range){\r\n if(that.getDateTime(that.endDate) < that.getDateTime(options.min) || that.getDateTime(that.endDate) > that.getDateTime(options.max)){\r\n that.endDate = lay.extend({}, options.max);\r\n minMaxError = true;\r\n }\r\n // 有时间范围的情况下初始化startTime和endTime\r\n that.startTime = {\r\n hours: options.dateTime.hours,\r\n minutes: options.dateTime.minutes,\r\n seconds: options.dateTime.seconds,\r\n }\r\n that.endTime = {\r\n hours: that.endDate.hours,\r\n minutes: that.endDate.minutes,\r\n seconds: that.endDate.seconds,\r\n }\r\n // 如果是年月范围,将对应的日期统一成当月的1日进行比较,避免出现同一个月但是开始日期大于结束日期的情况\r\n if (options.type === 'month') {\r\n options.dateTime.date = 1;\r\n that.endDate.date = 1;\r\n }\r\n }\r\n\r\n // 初始值不在最大最小范围内\r\n if(minMaxError && value){\r\n that.setValue(that.parse());\r\n that.hint('value ' + lang.invalidDate + lang.formatError[1]);\r\n }\r\n\r\n // 初始赋值 startDate,endState\r\n that.startDate = that.startDate || value && lay.extend({}, options.dateTime); // 有默认值才初始化startDate\r\n that.autoCalendarModel.auto && that.autoCalendarModel();\r\n that.endState = !options.range || !that.rangeLinked || !!(that.startDate && that.endDate); // 初始化选中范围状态\r\n\r\n fn && fn();\r\n return that;\r\n };\r\n\r\n /**\r\n * 渲染备注\r\n * @param {JQuery} tdElem td 元素\r\n * @param {[number, number, number]} YMD 年月日\r\n * @param {object | string} markers 备注信息\r\n */\r\n Class.prototype.markRender = function(tdElem, YMD, markers){\r\n var markText;\r\n\r\n if(typeof markers === 'object'){\r\n lay.each(markers || {}, function(key, title){\r\n var keys = key.split('-');\r\n if((keys[0] == YMD[0] || keys[0] == 0) //每年的每月\r\n && (keys[1] == YMD[1] || keys[1] == 0) //每月的每日\r\n && keys[2] == YMD[2]){ //特定日\r\n markText = title || YMD[2];\r\n }\r\n });\r\n }else if(typeof markers === 'string'){\r\n markText = markers || YMD[2];\r\n }\r\n\r\n markText && tdElem.find('div').html(''+ markText +'');\r\n }\r\n\r\n /**\r\n * 公历重要日期与自定义备注\r\n * @param {JQuery} td \r\n * @param {[number, number, number]} YMD \r\n * @returns Class\r\n */\r\n Class.prototype.mark = function(td, YMD){\r\n var that = this;\r\n var options = that.config;\r\n\r\n var render = function(markers){\r\n that.markRender(td, YMD, markers);\r\n }\r\n\r\n if(options.calendar && options.lang === 'cn'){\r\n render(that.markerOfChineseFestivals);\r\n } \r\n\r\n if(typeof options.mark === 'function'){\r\n options.mark({year: YMD[0], month: YMD[1], date: YMD[2]}, render);\r\n }else if(typeof options.mark === 'object'){\r\n render(options.mark);\r\n }\r\n\r\n return that;\r\n };\r\n\r\n /**\r\n * 渲染法定节假日或补假上班标记\r\n * @param {JQuery} tdElem td 元素\r\n * @param {[number, number, number]} YMD 年月日\r\n * @param {[Array, Array] | string} markers 标记信息\r\n */\r\n Class.prototype.holidaysRender = function(tdElem, YMD, markers){\r\n var type = ['holidays', 'workdays'];\r\n\r\n var isEquals = function(ymdStr1, ymdStr2){\r\n var ymd1 = ymdStr1.split('-');\r\n var ymd2 = ymdStr2.split('-');\r\n\r\n lay.each(ymd1, function(i,v){\r\n ymd1[i] = parseInt(v, 10);\r\n })\r\n lay.each(ymd2, function(i,v){\r\n ymd2[i] = parseInt(v, 10);\r\n })\r\n \r\n return ymd1.join('-') === ymd2.join('-');\r\n }\r\n\r\n var insertHtml = function(el, type, text){\r\n el.find('div').html([\r\n '',\r\n text,\r\n ''\r\n ].join(''));\r\n }\r\n \r\n if(layui.type(markers) === 'array'){\r\n lay.each(markers, function(idx, item) {\r\n lay.each(item, function(i, dayStr) {\r\n if(isEquals(dayStr, tdElem.attr('lay-ymd'))){\r\n insertHtml(tdElem, type[idx], YMD[2])\r\n }\r\n });\r\n });\r\n }else if(typeof markers === 'string'){\r\n if(type.indexOf(markers) !== -1){\r\n insertHtml(tdElem, markers, YMD[2])\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 标注法定节假日或补假上班\r\n * @param {JQuery} td \r\n * @param {[number, number, number]} YMD \r\n * @returns Class\r\n */\r\n Class.prototype.holidays = function(td, YMD) {\r\n var that = this;\r\n var options = that.config;\r\n\r\n var render = function(markers){\r\n that.holidaysRender(td, YMD, markers);\r\n }\r\n\r\n if(typeof options.holidays === 'function'){\r\n options.holidays({year: YMD[0], month: YMD[1], date: YMD[2]}, render);\r\n }else if(layui.type(options.holidays) === 'array'){\r\n render(options.holidays);\r\n }\r\n\r\n return that;\r\n };\r\n\r\n /**\r\n * 自定义单元格\r\n * @param {HTMLElement|Array} el - 单元格元素\r\n * @param {{year:number, month:number, date:number}} dateObj - 当前单元格对应的日期信息\r\n * @param {'year' | 'month' | 'date'} panelMode - 面板模式\r\n * @returns \r\n */\r\n Class.prototype.cellRender = function(el, dateObj, panelMode){\r\n var that = this;\r\n var options = that.config;\r\n\r\n if(typeof options.cellRender === 'function'){\r\n var render = function(content){\r\n if(typeof content === 'string'){\r\n lay(el).html(content);\r\n }else if(typeof content === 'object'){\r\n lay(el).html('').append(lay(content)[0]);\r\n }\r\n }\r\n options.cellRender(dateObj, render, {originElem: el, type: panelMode})\r\n }\r\n\r\n return that;\r\n }\r\n\r\n /**\r\n * 给定年份的开始日期\r\n * @param {Date} date \r\n */\r\n Class.prototype.startOfYear = function(date){\r\n var newDate = new Date(date);\r\n newDate.setFullYear(newDate.getFullYear(), 0, 1);\r\n newDate.setHours(0, 0, 0, 0);\r\n return newDate;\r\n }\r\n\r\n /**\r\n * 给定年份的结束日期\r\n * @param {Date} date\r\n */\r\n Class.prototype.endOfYear = function(date){\r\n var newDate = new Date(date);\r\n var year = newDate.getFullYear();\r\n newDate.setFullYear(year + 1, 0, 0);\r\n newDate.setHours(23, 59, 59, 999);\r\n return newDate;\r\n }\r\n\r\n /**\r\n * 给定月份的开始日期\r\n * @param {Date} date \r\n */\r\n Class.prototype.startOfMonth = function(date){\r\n var newDate = new Date(date);\r\n newDate.setDate(1);\r\n newDate.setHours(0, 0, 0, 0);\r\n return newDate;\r\n }\r\n\r\n /**\r\n * 给定月份的结束日期\r\n * @param {Date} date \r\n */\r\n Class.prototype.endOfMonth = function(date){\r\n var newDate = new Date(date);\r\n var month = newDate.getMonth();\r\n newDate.setFullYear(newDate.getFullYear(), month + 1, 0);\r\n newDate.setHours(23, 59, 59, 999);\r\n return newDate;\r\n }\r\n\r\n /**\r\n * 将指定的天数添加到给定日期\r\n * @param {Date} date 要更改的日期\r\n * @param {number} amount 天数\r\n */\r\n Class.prototype.addDays = function(date, amount){\r\n var newDate = new Date(date);\r\n if(!amount) return newDate;\r\n newDate.setDate(newDate.getDate() + amount);\r\n return newDate;\r\n }\r\n\r\n /**\r\n * 不可选取的年或月。年或月中的所有日期都禁用时,才判定为不可选取。\r\n * @param {Date} date 要检测的年或月\r\n * @param {'year' | 'month'} type 面板类型\r\n * @param {'start' | 'end'} position 面板位置\r\n */\r\n Class.prototype.isDisabledYearOrMonth = function(date, type, position){\r\n var that = this;\r\n var options = that.config;\r\n var millisecondsInDay = 24 * 60 * 60 * 1000;\r\n\r\n var startDay = type === 'year' ? that.startOfYear(date) : that.startOfMonth(date);\r\n var endDay = type === 'year' ? that.endOfYear(date) : that.endOfMonth(date);\r\n var numOfDays = Math.floor((endDay.getTime() - startDay.getTime()) / millisecondsInDay) + 1;\r\n var disabledCount = 0;\r\n \r\n for(var i = 0; i < numOfDays; i++){\r\n var day = that.addDays(startDay, i);\r\n if(options.disabledDate.call(options, day, position)){\r\n disabledCount++;\r\n }\r\n }\r\n\r\n return disabledCount === numOfDays;\r\n }\r\n\r\n /**\r\n * @typedef limitOptions\r\n * @prop {JQuery} [elem] - 检测的元素, 例如面板中年月日时分秒元素,“现在”,“确认” 按钮等\r\n * @prop {number} [index] - 元素集合中,当前检测元素的索引,years:0,month:0,date:0-41,hms:0\r\n * @prop {['hours', 'minutes', 'seconds'] | ['hours', 'minutes'] | ['hours']} [time] - 是否比较时分秒\r\n * @prop {'year'|'month'|string} [type] - 面板类型?\r\n * @prop {0 | 1} [rangeType] - 面板索引, 0 表示 start, 1 表示 end\r\n * @prop {Partial<{year:number,month: number,date:number,hours:number,minutes:number,seconds:number}>} [date] - 检测的日期时间对象\r\n * @prop {'date' | 'time' | 'datetime'} disabledType - 禁用类型,按钮应使用 datetime\r\n */\r\n /**\r\n * 不可选取的日期\r\n * @param {number} date 当前检测的日期的时间戳\r\n * @param {limitOptions} opts\r\n * @returns {boolean}\r\n */\r\n Class.prototype.isDisabledDate = function(date, opts){\r\n opts = opts || {};\r\n\r\n var that = this;\r\n var options = that.config;\r\n var position = options.range ? (opts.rangeType === 0 ? 'start' : 'end') : 'start';\r\n \r\n if(!options.disabledDate) return false;\r\n if(options.type === 'time') return false;\r\n if(!(opts.disabledType === 'date' || opts.disabledType === 'datetime')) return false;\r\n\r\n // 不需要时分秒\r\n var normalizedDate = new Date(date);\r\n normalizedDate.setHours(0, 0, 0, 0);\r\n \r\n return opts.type === 'year' || opts.type === 'month'\r\n ? that.isDisabledYearOrMonth(normalizedDate, opts.type, position)\r\n : options.disabledDate.call(options, normalizedDate, position);\r\n }\r\n\r\n /**\r\n * 不可选取的时间\r\n * @param {number} date 当前检测的日期的时间戳\r\n * @param {limitOptions} opts\r\n * @returns {boolean}\r\n */\r\n Class.prototype.isDisabledTime = function(date, opts){\r\n opts = opts || {};\r\n\r\n var that = this;\r\n var options = that.config;\r\n var position = options.range ? (opts.rangeType === 0 ? 'start' : 'end') : 'start';\r\n \r\n if(!options.disabledTime) return false;\r\n if(!(options.type === \"time\" || options.type === \"datetime\")) return false;\r\n if(!(opts.disabledType === 'time' || opts.disabledType === 'datetime')) return false;\r\n\r\n var isDisabledItem = function(compareVal, rangeFn, rangeFnParam){\r\n return function(){\r\n return (typeof rangeFn === 'function' && rangeFn.apply(options, rangeFnParam) || []).indexOf(compareVal) !== -1;\r\n } \r\n }\r\n\r\n var dateObj = that.systemDate(new Date(date));\r\n var disabledTime = options.disabledTime.call(options, that.newDate(dateObj), position) || {};\r\n\r\n // 面板中的时分秒 HTML 元素需要分别检测是否禁用\r\n // 按钮检测任意一项是否禁用即可\r\n return opts.disabledType === 'datetime'\r\n ? isDisabledItem(dateObj.hours, disabledTime.hours)()\r\n || isDisabledItem(dateObj.minutes, disabledTime.minutes, [dateObj.hours])()\r\n || isDisabledItem(dateObj.seconds, disabledTime.seconds, [dateObj.hours, dateObj.minutes])()\r\n : [isDisabledItem(dateObj.hours, disabledTime.hours),\r\n isDisabledItem(dateObj.minutes, disabledTime.minutes, [dateObj.hours]),\r\n isDisabledItem(dateObj.seconds, disabledTime.seconds, [dateObj.hours, dateObj.minutes])][opts.time.length - 1]();\r\n }\r\n\r\n /**\r\n * 不可选取的日期时间\r\n * @param {number} timestamp 当前检测的日期的时间戳\r\n * @param {limitOptions} opts \r\n * @returns \r\n */\r\n Class.prototype.isDisabledDateTime = function(timestamp, opts){\r\n opts = opts || {};\r\n\r\n var that = this;\r\n var options = that.config;\r\n\r\n return that.isDisabledDate(timestamp, opts) || that.isDisabledTime(timestamp, opts);\r\n }\r\n\r\n\r\n /**\r\n * 无效日期范围的标记\r\n * @param {limitOptions} opts \r\n * \r\n */\r\n Class.prototype.limit = function(opts){\r\n opts = opts || {};\r\n\r\n var that = this;\r\n var options = that.config;\r\n var timestamp = {}\r\n var dateTime = opts.index > (opts.time ? 0 : 41) ? that.endDate : options.dateTime;\r\n var isOut;\r\n\r\n lay.each({\r\n now: lay.extend({}, dateTime, opts.date || {})\r\n ,min: options.min\r\n ,max: options.max\r\n }, function(key, item){\r\n timestamp[key] = that.newDate(lay.extend({\r\n year: item.year\r\n ,month: opts.type === 'year' ? 0 : item.month // 年份的时候只比较年\r\n ,date: (opts.type === 'year' || opts.type === 'month') ? 1 : item.date // 年月只比较年月不与最大最小比日期\r\n }, function(){\r\n var hms = {};\r\n lay.each(opts.time, function(i, keys){\r\n hms[keys] = item[keys];\r\n });\r\n return hms;\r\n }())).getTime(); //time:是否比较时分秒\r\n });\r\n\r\n isOut = timestamp.now < timestamp.min || timestamp.now > timestamp.max || that.isDisabledDateTime(timestamp.now, opts);\r\n opts.elem && opts.elem[isOut ? 'addClass' : 'removeClass'](DISABLED);\r\n\r\n return isOut;\r\n };\r\n\r\n //当前日期对象\r\n Class.prototype.thisDateTime = function(index){\r\n var that = this\r\n ,options = that.config;\r\n return index ? that.endDate: options.dateTime;\r\n };\r\n\r\n //日历表\r\n Class.prototype.calendar = function(value, index, type){\r\n index = index ? 1 : 0;\r\n var that = this\r\n ,options = that.config\r\n ,dateTime = value || that.thisDateTime(index)\r\n ,thisDate = new Date(), startWeek, prevMaxDate, thisMaxDate\r\n ,lang = that.lang()\r\n\r\n ,isAlone = options.type !== 'date' && options.type !== 'datetime'\r\n ,tds = lay(that.table[index]).find('td')\r\n ,elemYM = lay(that.elemHeader[index][2]).find('span');\r\n\r\n if(dateTime.year < LIMIT_YEAR[0]) dateTime.year = LIMIT_YEAR[0], that.hint(lang.invalidDate);\r\n if(dateTime.year > LIMIT_YEAR[1]) dateTime.year = LIMIT_YEAR[1], that.hint(lang.invalidDate);\r\n\r\n //记录初始值\r\n if(!that.firstDate){\r\n that.firstDate = lay.extend({}, dateTime);\r\n }\r\n\r\n //计算当前月第一天的星期\r\n thisDate.setFullYear(dateTime.year, dateTime.month, 1);\r\n startWeek = (thisDate.getDay() + (7 - options.weekStart)) % 7;\r\n\r\n prevMaxDate = laydate.getEndDate(dateTime.month || 12, dateTime.year); //计算上个月的最后一天\r\n thisMaxDate = laydate.getEndDate(dateTime.month + 1, dateTime.year); //计算当前月的最后一天\r\n\r\n //赋值日\r\n lay.each(tds, function(index_, item){\r\n var YMD = [dateTime.year, dateTime.month], st;\r\n item = lay(item);\r\n item.removeAttr(\"class\");\r\n if(index_ < startWeek){\r\n st = prevMaxDate - startWeek + index_;\r\n item.addClass('laydate-day-prev');\r\n YMD = that.getAsYM(dateTime.year, dateTime.month, 'sub');\r\n } else if(index_ >= startWeek && index_ < thisMaxDate + startWeek){\r\n st = index_ - startWeek;\r\n if (!that.rangeLinked) {\r\n st + 1 === dateTime.date && item.addClass(THIS);\r\n }\r\n } else {\r\n st = index_ - thisMaxDate - startWeek;\r\n item.addClass('laydate-day-next');\r\n YMD = that.getAsYM(dateTime.year, dateTime.month);\r\n }\r\n YMD[1]++;\r\n YMD[2] = st + 1;\r\n item.attr('lay-ymd', YMD.join('-')).html('
        ' + YMD[2] + '
        ');\r\n that.mark(item, YMD).holidays(item, YMD).limit({\r\n elem: item,\r\n date: {\r\n year: YMD[0],\r\n month: YMD[1] - 1,\r\n date: YMD[2]\r\n },\r\n index: index_,\r\n rangeType: index,\r\n disabledType: 'date' // 日面板,检测当前日期是否禁用\r\n });\r\n that.cellRender(item, {year: YMD[0], month: YMD[1], date: YMD[2]}, 'date');\r\n });\r\n\r\n //同步头部年月\r\n lay(elemYM[0]).attr('lay-ym', dateTime.year + '-' + (dateTime.month + 1));\r\n lay(elemYM[1]).attr('lay-ym', dateTime.year + '-' + (dateTime.month + 1));\r\n if(!that.panelYM) that.panelYM = {};\r\n that.panelYM[index] = {year: dateTime.year, month: dateTime.month};\r\n\r\n if(options.lang === 'cn'){\r\n lay(elemYM[0]).attr('lay-type', 'year').html(dateTime.year + ' 年')\r\n lay(elemYM[1]).attr('lay-type', 'month').html((dateTime.month + 1) + ' 月');\r\n } else {\r\n lay(elemYM[0]).attr('lay-type', 'month').html(lang.month[dateTime.month]);\r\n lay(elemYM[1]).attr('lay-type', 'year').html(dateTime.year);\r\n }\r\n\r\n //初始默认选择器\r\n if(isAlone){ //年、月等独立选择器\r\n if(options.range){\r\n if(value || type !== 'init'){ // 判断是否需要显示年月时间列表\r\n that.listYM = [\r\n [(that.startDate || options.dateTime).year, (that.startDate || options.dateTime).month + 1]\r\n ,[that.endDate.year, that.endDate.month + 1]\r\n ];\r\n that.list(options.type, 0).list(options.type, 1);\r\n\r\n //同步按钮可点状态\r\n options.type === 'time' ? that.setBtnStatus('时间'\r\n ,lay.extend({}, that.systemDate(), that.startTime)\r\n ,lay.extend({}, that.systemDate(), that.endTime)\r\n ) : that.setBtnStatus(true);\r\n }\r\n } else {\r\n that.listYM = [[dateTime.year, dateTime.month + 1]];\r\n that.list(options.type, 0);\r\n }\r\n }\r\n\r\n //初始赋值双日历\r\n if(options.range && type === 'init'){\r\n //执行渲染第二个日历\r\n if (that.rangeLinked) {\r\n var EYM = that.getAsYM(dateTime.year, dateTime.month, index ? 'sub' : null)\r\n that.calendar(lay.extend({}, dateTime, {\r\n year: EYM[0]\r\n ,month: EYM[1]\r\n }), 1 - index); // 渲染另外一个\r\n } else {\r\n that.calendar(null, 1 - index);\r\n }\r\n }\r\n\r\n // 通过检测当前有效日期,来设定底部按钮状态\r\n if(!options.range){\r\n var timeParams = ['hours', 'minutes', 'seconds'];\r\n\r\n // 现在按钮\r\n that.limit({\r\n elem: lay(that.footer).find(ELEM_NOW),\r\n date: that.systemDate(/^(datetime|time)$/.test(options.type) ? new Date() : null),\r\n index: 0,\r\n time: timeParams,\r\n disabledType: 'datetime' // 按钮,检测日期和时间\r\n });\r\n // 确认按钮\r\n that.limit({\r\n elem: lay(that.footer).find(ELEM_CONFIRM),\r\n index: 0,\r\n time: timeParams,\r\n disabledType: 'datetime' // 按钮,检测日期和时间\r\n });\r\n }\r\n\r\n //同步按钮可点状态\r\n that.setBtnStatus();\r\n\r\n // 重置快捷栏选中状态\r\n lay(that.shortcut).find('li.' + THIS).removeClass(THIS);\r\n\r\n //标记选择范围\r\n if(options.range && !isAlone && type !== 'init') that.stampRange();\r\n\r\n return that;\r\n };\r\n\r\n //生成年月时分秒列表\r\n Class.prototype.list = function(type, index){\r\n var that = this\r\n ,options = that.config\r\n ,dateTime = that.rangeLinked ? options.dateTime : [options.dateTime, that.endDate][index]\r\n ,lang = that.lang()\r\n ,isAlone = options.range && options.type !== 'date' && options.type !== 'datetime' //独立范围选择器\r\n\r\n ,ul = lay.elem('ul', {\r\n \"class\": ELEM_LIST + ' ' + ({\r\n year: 'laydate-year-list'\r\n ,month: 'laydate-month-list'\r\n ,time: 'laydate-time-list'\r\n })[type]\r\n })\r\n ,elemHeader = that.elemHeader[index]\r\n ,elemYM = lay(elemHeader[2]).find('span')\r\n ,elemCont = that.elemCont[index || 0]\r\n ,haveList = lay(elemCont).find('.'+ ELEM_LIST)[0]\r\n ,isCN = options.lang === 'cn'\r\n ,text = isCN ? '年' : ''\r\n\r\n ,listYM = that.listYM[index] || {}\r\n ,hms = ['hours', 'minutes', 'seconds']\r\n ,startEnd = ['startTime', 'endTime'][index];\r\n\r\n if(listYM[0] < 1) listYM[0] = 1;\r\n\r\n //生成年列表\r\n if(type === 'year'){\r\n var yearNum, startY = yearNum = listYM[0] - 7;\r\n if(startY < 1) startY = yearNum = 1;\r\n lay.each(new Array(15), function(i){\r\n var li = lay.elem('li', {\r\n 'lay-ym': yearNum\r\n })\r\n ,ymd = {\r\n year: yearNum\r\n ,month: 0\r\n ,date: 1\r\n };\r\n\r\n yearNum == listYM[0] && lay(li).addClass(THIS);\r\n li.innerHTML = yearNum + text;\r\n ul.appendChild(li);\r\n\r\n /*\r\n if(yearNum < that.firstDate.year){\r\n ymd.month = options.min.month;\r\n ymd.date = options.min.date;\r\n } else if(yearNum >= that.firstDate.year){\r\n ymd.month = options.max.month;\r\n ymd.date = options.max.date;\r\n }\r\n */\r\n\r\n that.limit({\r\n elem: lay(li),\r\n date: ymd,\r\n index: index,\r\n type: type,\r\n rangeType: index,\r\n disabledType: 'date' // 年面板,检测当前年份中的所有日期是否禁用\r\n });\r\n that.cellRender(li, {year: yearNum, month: 1, date: 1}, 'year');\r\n yearNum++;\r\n });\r\n\r\n lay(elemYM[isCN ? 0 : 1]).attr('lay-ym', (yearNum - 8) + '-' + listYM[1])\r\n .html((startY + text) + ' - ' + (yearNum - 1 + text));\r\n }\r\n\r\n //生成月列表\r\n else if(type === 'month'){\r\n lay.each(new Array(12), function(i){\r\n var li = lay.elem('li', {\r\n 'lay-ym': i\r\n })\r\n ,ymd = {\r\n year: listYM[0]\r\n ,month: i\r\n ,date: 1\r\n };\r\n\r\n i + 1 == listYM[1] && lay(li).addClass(THIS);\r\n li.innerHTML = lang.month[i] + (isCN ? '月' : '');\r\n ul.appendChild(li);\r\n\r\n /*\r\n if(listYM[0] < that.firstDate.year){\r\n ymd.date = options.min.date;\r\n } else if(listYM[0] >= that.firstDate.year){\r\n ymd.date = options.max.date;\r\n }\r\n */\r\n\r\n that.limit({\r\n elem: lay(li),\r\n date: ymd,\r\n index: index,\r\n type: type,\r\n rangeType: index,\r\n disabledType: 'date' // 月面板,检测当前月份中的所有日期是否禁用\r\n });\r\n that.cellRender(li, {year: listYM[0], month: i + 1, date: 1}, 'month');\r\n });\r\n\r\n lay(elemYM[isCN ? 0 : 1]).attr('lay-ym', listYM[0] + '-' + listYM[1])\r\n .html(listYM[0] + text);\r\n }\r\n\r\n //生成时间列表\r\n else if(type === 'time'){\r\n //检测时分秒状态是否在有效日期时间范围内\r\n var setTimeStatus = function(){\r\n lay(ul).find('ol').each(function(i, ol){\r\n lay(ol).find('li').each(function(ii, li){\r\n that.limit({\r\n elem: lay(li),\r\n date: [{\r\n hours: ii\r\n }, {\r\n hours: that[startEnd].hours\r\n ,minutes: ii\r\n }, {\r\n hours: that[startEnd].hours\r\n ,minutes: that[startEnd].minutes\r\n ,seconds: ii\r\n }][i],\r\n index: index,\r\n rangeType: index,\r\n disabledType: 'time', // 时间面板,分别检测时分秒列表是否禁用\r\n time: [\r\n ['hours'],\r\n ['hours', 'minutes'],\r\n ['hours', 'minutes', 'seconds']\r\n ][i]\r\n });\r\n });\r\n });\r\n if(!options.range){\r\n that.limit({\r\n elem: lay(that.footer).find(ELEM_CONFIRM),\r\n date: that[startEnd],\r\n index: 0,\r\n time: ['hours', 'minutes', 'seconds'],\r\n disabledType: 'datetime' // 确认按钮,检测时分秒列表任意一项是否禁用\r\n });\r\n }\r\n };\r\n\r\n var setTimeListVisibility = function(){\r\n var showHour = options.format.indexOf('H') !== -1;\r\n var showMinute = options.format.indexOf('m') !== -1;\r\n var showSecond = options.format.indexOf('s') !== -1;\r\n var liElem = ul.children;\r\n var hideCount = 0;\r\n\r\n lay.each([showHour, showMinute, showSecond], function(i, isShow){\r\n if(!isShow){\r\n liElem[i].className += ' layui-hide';\r\n hideCount++;\r\n }\r\n })\r\n ul.className += (' laydate-time-list-hide-' + hideCount);\r\n }\r\n\r\n //初始化时间对象\r\n if(options.range){\r\n if(!that[startEnd]){\r\n that[startEnd] = startEnd === 'startTime' ? dateTime : that.endDate;\r\n }\r\n } else {\r\n that[startEnd] = dateTime;\r\n }\r\n\r\n //生成时分秒\r\n lay.each([24, 60, 60], function(i, item){\r\n var li = lay.elem('li'), childUL = ['

        '+ lang.time[i] +'

          '];\r\n lay.each(new Array(item), function(ii){\r\n childUL.push(''+ lay.digit(ii, 2) +'');\r\n });\r\n li.innerHTML = childUL.join('') + '
        ';\r\n ul.appendChild(li);\r\n });\r\n setTimeStatus();\r\n setTimeListVisibility();\r\n }\r\n\r\n //插入容器\r\n if(haveList) elemCont.removeChild(haveList);\r\n elemCont.appendChild(ul);\r\n\r\n //年月面板 - 选择事件\r\n if(type === 'year' || type === 'month'){\r\n //显示切换箭头\r\n lay(that.elemMain[index]).addClass('laydate-ym-show');\r\n\r\n //选中\r\n lay(ul).find('li').on('click', function(){\r\n var ym = lay(this).attr('lay-ym') | 0;\r\n if(lay(this).hasClass(DISABLED)) return;\r\n if (that.rangeLinked) {\r\n lay.extend(dateTime, {\r\n year: type === 'year' ? ym : listYM[0]\r\n ,month: type === 'year' ? listYM[1] - 1 : ym\r\n });\r\n } else {\r\n dateTime[type] = ym;\r\n }\r\n\r\n //当为年选择器或者年月选择器\r\n var isYearOrMonth = ['year', 'month'].indexOf(options.type) !== -1;\r\n var isChangeMonth = type === 'year' && ['date', 'datetime'].indexOf(options.type) !== -1;\r\n if (isYearOrMonth || isChangeMonth) {\r\n lay(ul).find('.'+ THIS).removeClass(THIS);\r\n lay(this).addClass(THIS);\r\n\r\n //如果为年月选择器,点击了年列表,则切换到月选择器\r\n if ((options.type === 'month' && type === 'year') || isChangeMonth) {\r\n that.listYM[index][0] = ym;\r\n isAlone && ((index ? that.endDate : dateTime).year = ym);\r\n that.list('month', index);\r\n }\r\n } else {\r\n that.checkDate('limit').calendar(dateTime, index, 'init'); // 重新渲染一下两个面板\r\n that.closeList();\r\n }\r\n\r\n that.setBtnStatus(); //同步按钮可点状态\r\n\r\n //若为月选择器,只有当选择月份时才自动关闭;\r\n //若为年选择器,选择年份即自动关闭\r\n //且在范围未开启时\r\n if(!options.range && options.autoConfirm){\r\n if((options.type === 'month' && type === 'month') || (options.type === 'year' && type === 'year')){\r\n that.setValue(that.parse()).done().remove();\r\n }\r\n }\r\n\r\n (that.autoCalendarModel.auto && !that.rangeLinked) ? that.choose(lay(elemCont).find('td.layui-this'), index) : (that.endState && that.done(null, 'change'));\r\n lay(that.footer).find('.'+ ELEM_TIME_BTN).removeClass(DISABLED);\r\n });\r\n } else { //时间选择面板 - 选择事件\r\n var span = lay.elem('span', {\r\n \"class\": ELEM_TIME_TEXT\r\n })\r\n\r\n //滚动条定位\r\n ,scroll = function(){\r\n lay(ul).find('ol').each(function(i){\r\n var ol = this\r\n ,li = lay(ol).find('li')\r\n ol.scrollTop = 30*(that[startEnd][hms[i]] - 2);\r\n if(ol.scrollTop <= 0){\r\n li.each(function(ii, item){\r\n if(!lay(this).hasClass(DISABLED)){\r\n ol.scrollTop = 30*(ii - 2);\r\n return true;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n ,haveSpan = lay(elemHeader[2]).find('.'+ ELEM_TIME_TEXT);\r\n\r\n scroll();\r\n span.innerHTML = options.range ? [lang.startTime,lang.endTime][index] : lang.timeTips;\r\n lay(that.elemMain[index]).addClass('laydate-time-show');\r\n\r\n if(haveSpan[0]) haveSpan.remove();\r\n elemHeader[2].appendChild(span);\r\n\r\n var olElem = lay(ul).find('ol');\r\n olElem.each(function(i){\r\n var ol = this;\r\n //选择时分秒\r\n lay(ol).find('li').on('click', function(){\r\n var value = this.innerHTML | 0;\r\n if(lay(this).hasClass(DISABLED)) return;\r\n\r\n if(options.range){\r\n that[startEnd][hms[i]] = value;\r\n } else {\r\n dateTime[hms[i]] = value;\r\n }\r\n lay(ol).find('.'+ THIS).removeClass(THIS);\r\n lay(this).addClass(THIS);\r\n\r\n setTimeStatus();\r\n scroll();\r\n (that.endDate || options.type === 'time' || options.type === 'datetime') && that.done(null, 'change');\r\n\r\n //同步按钮可点状态\r\n that.setBtnStatus();\r\n });\r\n });\r\n\r\n if(layui.device().mobile){\r\n olElem.css({\r\n overflowY: 'auto',\r\n touchAction: 'pan-y'\r\n })\r\n }\r\n }\r\n\r\n return that;\r\n };\r\n\r\n //记录列表切换后的年月\r\n Class.prototype.listYM = [];\r\n\r\n //关闭列表\r\n Class.prototype.closeList = function(){\r\n var that = this\r\n ,options = that.config;\r\n\r\n lay.each(that.elemCont, function(index, item){\r\n lay(this).find('.'+ ELEM_LIST).remove();\r\n lay(that.elemMain[index]).removeClass('laydate-ym-show laydate-time-show');\r\n });\r\n lay(that.elem).find('.'+ ELEM_TIME_TEXT).remove();\r\n };\r\n\r\n //检测结束日期是否超出开始日期\r\n Class.prototype.setBtnStatus = function(tips, start, end){\r\n var that = this\r\n ,options = that.config\r\n ,lang = that.lang()\r\n ,isOut\r\n ,elemBtn = lay(that.footer).find(ELEM_CONFIRM)\r\n ,timeParams = options.type === 'datetime' || options.type === 'time' ? ['hours', 'minutes', 'seconds'] : undefined;\r\n if(options.range){\r\n start = start || (that.rangeLinked ? that.startDate : options.dateTime);\r\n end = end || that.endDate;\r\n isOut = !that.endState || that.newDate(start).getTime() > that.newDate(end).getTime();\r\n\r\n //如果不在有效日期内,直接禁用按钮,否则比较开始和结束日期\r\n (that.limit({\r\n date: start,\r\n disabledType: 'datetime', // 按钮,检测日期和时间\r\n time: timeParams,\r\n rangeType: 0\r\n }) || that.limit({\r\n date: end,\r\n disabledType: 'datetime', // 按钮,检测日期和时间\r\n time: timeParams,\r\n rangeType: 1\r\n }))\r\n ? elemBtn.addClass(DISABLED)\r\n : elemBtn[isOut ? 'addClass' : 'removeClass'](DISABLED);\r\n\r\n //是否异常提示\r\n if(tips && isOut) that.hint(\r\n typeof tips === 'string' ? lang.timeout.replace(/日期/g, tips) : lang.timeout\r\n );\r\n }\r\n };\r\n\r\n // 转义为规定格式的日期字符\r\n Class.prototype.parse = function(state, date) {\r\n var that = this;\r\n var options = that.config;\r\n var startDate = (that.rangeLinked ? that.startDate : options.dateTime)\r\n var dateTime = date || (\r\n state == 'end' ? lay.extend({}, that.endDate, that.endTime) : (\r\n options.range\r\n ? lay.extend({}, startDate || options.dateTime, that.startTime)\r\n : options.dateTime\r\n )\r\n );\r\n var format = laydate.parse(dateTime, that.format, 1);\r\n\r\n // 返回日期范围字符\r\n if (options.range && state === undefined) {\r\n return format + ' '+ that.rangeStr +' ' + that.parse('end');\r\n }\r\n\r\n return format;\r\n };\r\n\r\n //创建指定日期时间对象\r\n Class.prototype.newDate = function(dateTime){\r\n dateTime = dateTime || {};\r\n return new Date(\r\n dateTime.year || 1\r\n ,dateTime.month || 0\r\n ,dateTime.date || 1\r\n ,dateTime.hours || 0\r\n ,dateTime.minutes || 0\r\n ,dateTime.seconds || 0\r\n );\r\n };\r\n\r\n // 获得指定日期时间对象的毫秒数\r\n Class.prototype.getDateTime = function(obj){\r\n return this.newDate(obj).getTime();\r\n }\r\n\r\n /**\r\n * 格式化输入框显示值\r\n * @param {HTMLInputElement} elem HTML input 元素\r\n * @param {(value: string) => string} displayValueCallback \r\n */\r\n Class.prototype.formatToDisplay = function (elem, displayValueCallback) {\r\n var that = this;\r\n var props = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,'value');\r\n \r\n Object.defineProperty(\r\n elem,\r\n 'value',\r\n lay.extend({}, props, {\r\n get: function () {\r\n return this.getAttribute('lay-date');\r\n },\r\n set: function (value) {\r\n props.set.call(this, displayValueCallback.call(that, value));\r\n this.setAttribute('lay-date', value);\r\n },\r\n })\r\n );\r\n };\r\n\r\n //赋值\r\n Class.prototype.setValue = function(value){\r\n var that = this\r\n ,options = that.config\r\n ,elem = options.elem[0];\r\n\r\n //静态展现则不作默认赋值\r\n if(options.position === 'static') return that;\r\n\r\n value = value || '';\r\n\r\n //绑定的元素是否为 input\r\n if(that.isInput(elem)){\r\n lay(elem).val(value);\r\n } else {\r\n //如果 range 传入了开始和结束的 input 对象,则分别对其赋值\r\n var rangeElem = that.rangeElem;\r\n if(rangeElem){\r\n if(layui.type(value) !== 'array'){\r\n value = value.split(' '+ that.rangeStr +' ');\r\n }\r\n rangeElem[0].val(value[0] || '');\r\n rangeElem[1].val(value[1] || '');\r\n } else {\r\n if(lay(elem).find('*').length === 0){\r\n var displayValue = typeof options.formatToDisplay === 'function' ? options.formatToDisplay(value) : value;\r\n lay(elem).html(displayValue);\r\n }\r\n lay(elem).attr('lay-date', value);\r\n }\r\n }\r\n\r\n return that;\r\n };\r\n\r\n //预览\r\n Class.prototype.preview = function(){\r\n var that = this\r\n ,options = that.config;\r\n\r\n if(!options.isPreview) return;\r\n\r\n var elemPreview = lay(that.elem).find('.'+ ELEM_PREVIEW)\r\n ,value = options.range ? ((that.rangeLinked ? that.endState : that.endDate) ? that.parse() : '') : that.parse();\r\n\r\n // 显示预览\r\n elemPreview.html(value);\r\n\r\n // 预览颜色渐变\r\n var oldValue = elemPreview.html();\r\n oldValue && (elemPreview.css({\r\n 'color': '#16b777'\r\n }),\r\n setTimeout(function(){\r\n elemPreview.css({\r\n 'color': '#777'\r\n });\r\n }, 300));\r\n };\r\n\r\n // 附加的渲染处理,在 ready 和 change 的时候调用\r\n Class.prototype.renderAdditional = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 处理全面板\r\n if (options.fullPanel) {\r\n that.list('time', 0);\r\n }\r\n };\r\n\r\n // 标记范围内的日期\r\n Class.prototype.stampRange = function(){\r\n var that = this\r\n ,options = that.config\r\n ,startTime = that.rangeLinked ? that.startDate : options.dateTime, endTime\r\n ,tds = lay(that.elem).find('td');\r\n\r\n if(options.range && !that.endState) lay(that.footer).find(ELEM_CONFIRM).addClass(DISABLED);\r\n // if(!that.endState) return;\r\n\r\n startTime = startTime && that.newDate({\r\n year: startTime.year\r\n ,month: startTime.month\r\n ,date: startTime.date\r\n }).getTime();\r\n\r\n endTime = that.endState && that.endDate && that.newDate({\r\n year: that.endDate.year\r\n ,month: that.endDate.month\r\n ,date: that.endDate.date\r\n }).getTime();\r\n\r\n // if(startTime > endTime) return that.hint(TIPS_OUT);\r\n\r\n lay.each(tds, function(i, item){\r\n var ymd = lay(item).attr('lay-ymd').split('-');\r\n var thisTime = that.newDate({\r\n year: ymd[0]\r\n ,month: ymd[1] - 1\r\n ,date: ymd[2]\r\n }).getTime();\r\n\r\n // 标记当天\r\n if(options.rangeLinked && !that.startDate){\r\n if(thisTime === that.newDate(that.systemDate()).getTime()){\r\n lay(item).addClass(\r\n lay(item).hasClass(ELEM_PREV) || lay(item).hasClass(ELEM_NEXT)\r\n ? ''\r\n : ELEM_DAY_NOW\r\n );\r\n }\r\n }\r\n\r\n /*\r\n * 标注区间\r\n */\r\n\r\n lay(item).removeClass(ELEM_SELECTED + ' ' + THIS);\r\n\r\n if(thisTime === startTime || thisTime === endTime){\r\n (that.rangeLinked || (!that.rangeLinked && (i < 42 ? thisTime === startTime : thisTime === endTime))) &&\r\n lay(item).addClass(\r\n lay(item).hasClass(ELEM_PREV) || lay(item).hasClass(ELEM_NEXT)\r\n ? ELEM_SELECTED\r\n : THIS\r\n );\r\n }\r\n if(thisTime > startTime && thisTime < endTime){\r\n lay(item).addClass(ELEM_SELECTED);\r\n }\r\n });\r\n };\r\n\r\n // 执行 done/change 回调\r\n Class.prototype.done = function(param, type){\r\n var that = this;\r\n var options = that.config;\r\n var start = lay.extend({},\r\n lay.extend(that.rangeLinked ? that.startDate : options.dateTime, that.startTime)\r\n );\r\n var end = lay.extend({}, lay.extend(that.endDate, that.endTime));\r\n\r\n lay.each([start, end], function(i, item){\r\n if(!('month' in item)) return;\r\n lay.extend(item, {\r\n month: item.month + 1\r\n });\r\n });\r\n\r\n that.preview();\r\n\r\n param = param || [that.parse(), start, end];\r\n type === 'change' && that.renderAdditional();\r\n typeof options[type || 'done'] === 'function' && options[type || 'done'].apply(options, param);\r\n\r\n return that;\r\n };\r\n\r\n /**\r\n * 判断日期是否存在面板,用于处理日期范围选择的一些边缘情况\r\n * @param {object} datetime 日期时间对象\r\n * @param {number} index - 面板索引\r\n * @returns \r\n */\r\n Class.prototype.checkPanelDate = function(datetime, index){\r\n var that = this;\r\n var options = that.config;\r\n // 年月范围选择不需要处理\r\n if(options.type !== 'date' && options.type !== 'datetime') return;\r\n\r\n var startPanel = index === 0;\r\n var month = datetime.month + 1; // 点击的日期所在月份\r\n var panelMonth = that.panelYM[index].month + 1; // 当前面板头部月份\r\n\r\n // 边缘日期的处理\r\n var firstRenderIndex = that.endState\r\n // 二次点击(一般为结束日期)任意一侧面板时:\r\n // 1. 左侧面板中,点击的月份属于下一个月时,应渲染右侧面板而不是左侧面板;\r\n // 2. 左侧面板中,点击的月份属于上一个月时,应将两个面板都重新渲染(等效点击 prevMonth);\r\n // 3. 右侧面板同理。\r\n ? function() {\r\n return (startPanel && month > panelMonth) || (!startPanel && month < panelMonth)\r\n ? 1 - index\r\n : index;\r\n }()\r\n // 初次点击(一般为开始日期)任意一侧面板时:\r\n // 1. 让该面板自行切换,以保持日期的「选中状态」在该侧;\r\n // 2. 另一侧面板则根据点击的面板进行响应式切换,以保持左右面板始终为连续月份。\r\n : index;\r\n\r\n // 为简化实现,只要点击的月份不等于当前面板顶部显示的月份时,就重新渲染两侧面板\r\n return {\r\n needFullRender: month !== panelMonth,\r\n index: firstRenderIndex\r\n }\r\n }\r\n \r\n //选择日期\r\n Class.prototype.choose = function(td, index){\r\n if(td.hasClass(DISABLED)) return;\r\n\r\n var that = this\r\n ,options = that.config\r\n ,panelIndex = index; // 记录点击的是哪一个面板的\r\n\r\n if (that.rangeLinked) {\r\n if (that.endState || !that.startDate) {\r\n // 重新选择或者第一次选择\r\n index = 0;\r\n that.endState = false;\r\n } else {\r\n index = 1;\r\n that.endState = true;\r\n }\r\n }\r\n\r\n var dateTime = that.thisDateTime(index)\r\n\r\n ,tds = lay(that.elem).find('td')\r\n ,YMD = td.attr('lay-ymd').split('-');\r\n\r\n YMD = {\r\n year: YMD[0] | 0\r\n ,month: (YMD[1] | 0) - 1\r\n ,date: YMD[2] | 0\r\n };\r\n\r\n lay.extend(dateTime, YMD); //同步 dateTime\r\n\r\n //范围选择\r\n if(options.range){\r\n //补充时分秒\r\n lay.each(['startTime', 'endTime'], function(i, item){\r\n that[item] = that[item] || {\r\n hours: i ? 23: 0\r\n ,minutes: i ? 59: 0\r\n ,seconds: i ? 59: 0\r\n };\r\n if (index === i) {\r\n // 判断选择之后的是否在范围内,超出则需要调整时分秒\r\n if (that.getDateTime(lay.extend({}, dateTime, that[item])) < that.getDateTime(options.min)) {\r\n that[item] = {\r\n hours: options.min.hours\r\n ,minutes: options.min.minutes\r\n ,seconds: options.min.seconds\r\n };\r\n lay.extend(dateTime, that[item]);\r\n } else if (that.getDateTime(lay.extend({}, dateTime, that[item])) > that.getDateTime(options.max)) {\r\n that[item] = {\r\n hours: options.max.hours\r\n ,minutes: options.max.minutes\r\n ,seconds: options.max.seconds\r\n };\r\n lay.extend(dateTime, that[item]);\r\n }\r\n }\r\n });\r\n if (!index) {\r\n that.startDate = lay.extend({}, dateTime); // 同步startDate\r\n }\r\n // 校验另外一个日期是否在有效的范围内\r\n // 此处为范围选择的日期面板点击选中处理,所以 disabledType 为 date\r\n if (that.endState && !that.limit({date: that.rangeLinked ? that.startDate : that.thisDateTime(1 - index), disabledType:'date'})) {\r\n // 根据选择之后判断是否需要切换模式\r\n var isChange;\r\n if (that.endState && that.autoCalendarModel.auto) {\r\n isChange = that.autoCalendarModel();\r\n }\r\n // 判断是否反选\r\n var needSwapDate = (isChange || that.rangeLinked && that.endState) && that.newDate(that.startDate) > that.newDate(that.endDate);\r\n if (needSwapDate){\r\n var isSameDate = that.startDate.year === that.endDate.year && that.startDate.month === that.endDate.month && that.startDate.date === that.endDate.date;\r\n var startDate;\r\n // 如果是同一天并且出现了反选证明是时分秒出现开始时间大于结束时间的现象\r\n if(isSameDate){\r\n startDate = that.startTime;\r\n that.startTime = that.endTime;\r\n that.endTime = startDate;\r\n }\r\n // 当出现反向选择时(即“后点击”的日期比“先点击”的日期小),重新提取区间\r\n startDate = that.startDate;\r\n that.startDate = lay.extend({}, that.endDate, that.startTime);\r\n options.dateTime = lay.extend({}, that.startDate);\r\n that.endDate = lay.extend({}, startDate, that.endTime);\r\n }\r\n isChange && (options.dateTime = lay.extend({}, that.startDate));\r\n }\r\n if (that.rangeLinked) {\r\n // 处理日期范围选择的一些边缘情况\r\n var checkState = that.checkPanelDate(dateTime, panelIndex);\r\n var dateTimeTemp = lay.extend({}, dateTime);\r\n var renderMode = (isChange || (checkState && checkState.needFullRender)) ? 'init' : null;\r\n var panelIdx = checkState ? checkState.index : panelIndex;\r\n that.calendar(dateTimeTemp, panelIdx, renderMode);\r\n } else {\r\n that.calendar(null, index, isChange ? 'init' : null);\r\n }\r\n that.endState && that.done(null, 'change');\r\n } else if(options.position === 'static'){ //直接嵌套的选中\r\n that.calendar().done().done(null, 'change'); //同时执行 done 和 change 回调\r\n } else if(options.type === 'date'){\r\n options.autoConfirm ? that.setValue(that.parse()).done().remove() : that.calendar().done(null, 'change');\r\n } else if(options.type === 'datetime'){\r\n that.calendar().done(null, 'change');\r\n }\r\n };\r\n\r\n //底部按钮\r\n Class.prototype.tool = function(btn, type){\r\n var that = this\r\n ,options = that.config\r\n ,lang = that.lang()\r\n ,dateTime = options.dateTime\r\n ,isStatic = options.position === 'static'\r\n ,active = {\r\n //选择时间\r\n datetime: function(){\r\n if(lay(btn).hasClass(DISABLED)) return;\r\n that.list('time', 0);\r\n options.range && that.list('time', 1);\r\n lay(btn).attr('lay-type', 'date').html(that.lang().dateTips);\r\n }\r\n\r\n //选择日期\r\n ,date: function(){\r\n that.closeList();\r\n lay(btn).attr('lay-type', 'datetime').html(that.lang().timeTips);\r\n }\r\n\r\n //清空、重置\r\n ,clear: function(){\r\n isStatic && (\r\n lay.extend(dateTime, that.firstDate)\r\n ,that.calendar()\r\n )\r\n options.range && (\r\n delete options.dateTime\r\n ,delete that.endDate\r\n ,delete that.startTime\r\n ,delete that.endTime\r\n );\r\n that.setValue('');\r\n that.done(null, 'onClear').done(['', {}, {}]).remove();\r\n }\r\n\r\n // 现在\r\n ,now: function(){\r\n var thisDate = new Date();\r\n\r\n // 当前系统时间未在 min/max 范围内,则不可点击\r\n if(lay(btn).hasClass(DISABLED)){\r\n return that.hint(lang.tools.now +', '+ lang.invalidDate);\r\n }\r\n\r\n lay.extend(dateTime, that.systemDate(), {\r\n hours: thisDate.getHours()\r\n ,minutes: thisDate.getMinutes()\r\n ,seconds: thisDate.getSeconds()\r\n });\r\n\r\n that.setValue(that.parse());\r\n isStatic && that.calendar();\r\n that.done(null, 'onNow').done().remove();\r\n }\r\n\r\n //确定\r\n ,confirm: function(){\r\n if(options.range){\r\n if(lay(btn).hasClass(DISABLED)){\r\n var isTimeout = options.type === 'time'\r\n ? that.startTime && that.endTime && that.newDate(that.startTime) > that.newDate(that.endTime)\r\n : that.startDate && that.endDate && that.newDate(lay.extend({},that.startDate, that.startTime || {})) > that.newDate(lay.extend({},that.endDate, that.endTime || {}));\r\n\r\n return isTimeout \r\n ? that.hint(options.type === 'time' ? lang.timeout.replace(/日期/g, '时间') : lang.timeout)\r\n : that.hint(lang.invalidDate);\r\n }\r\n } else {\r\n if(lay(btn).hasClass(DISABLED)) return that.hint(lang.invalidDate);\r\n }\r\n\r\n that.setValue(that.parse());\r\n that.done(null, 'onConfirm').done().remove();\r\n }\r\n };\r\n active[type] && active[type]();\r\n };\r\n\r\n //统一切换处理\r\n Class.prototype.change = function(index){\r\n var that = this\r\n ,options = that.config\r\n ,dateTime = that.thisDateTime(index)\r\n ,isAlone = options.range && (options.type === 'year' || options.type === 'month')\r\n\r\n ,elemCont = that.elemCont[index || 0]\r\n ,listYM = that.listYM[index]\r\n ,addSubYear = function(type){\r\n var isYear = lay(elemCont).find('.laydate-year-list')[0]\r\n ,isMonth = lay(elemCont).find('.laydate-month-list')[0];\r\n\r\n //切换年列表\r\n if(isYear){\r\n listYM[0] = type ? listYM[0] - 15 : listYM[0] + 15;\r\n that.list('year', index);\r\n }\r\n\r\n if(isMonth){ //切换月面板中的年\r\n type ? listYM[0]-- : listYM[0]++;\r\n that.list('month', index);\r\n }\r\n\r\n if(isYear || isMonth){\r\n lay.extend(dateTime, {\r\n year: listYM[0]\r\n });\r\n if(isAlone) dateTime.year = listYM[0];\r\n options.range || that.done(null, 'change');\r\n options.range || that.limit({\r\n elem: lay(that.footer).find(ELEM_CONFIRM),\r\n date: {\r\n year: listYM[0]\r\n },\r\n disabledType: 'datetime' // 按钮,检测日期和时间\r\n });\r\n }\r\n\r\n that.setBtnStatus();\r\n return isYear || isMonth;\r\n };\r\n\r\n return {\r\n prevYear: function(){\r\n if(addSubYear('sub')) return;\r\n if (that.rangeLinked) {\r\n options.dateTime.year--;\r\n that.checkDate('limit').calendar(null, null, 'init');\r\n } else {\r\n dateTime.year--;\r\n that.checkDate('limit').calendar(null, index);\r\n // 面板自动切换的模式下重新判定是否发生模式转换等细节处理\r\n that.autoCalendarModel.auto ? that.choose(lay(elemCont).find('td.layui-this'), index) : that.done(null, 'change');\r\n }\r\n }\r\n ,prevMonth: function(){\r\n // rangeLinked 模式非实时选择日期,不需要同步 options.dateTime,应根据面板显示日期切换\r\n if(that.rangeLinked){\r\n var panelYM = that.panelYM[0];\r\n var YM = that.getAsYM(panelYM.year, panelYM.month, 'sub');\r\n var dateTimeTemp = lay.extend({}, options.dateTime, that.panelYM[0], {year: YM[0], month: YM[1]});\r\n that.checkDate('limit').calendar(dateTimeTemp, null, 'init');\r\n }else{\r\n var YM = that.getAsYM(dateTime.year, dateTime.month, 'sub');\r\n lay.extend(dateTime, {\r\n year: YM[0]\r\n ,month: YM[1]\r\n });\r\n\r\n that.checkDate('limit').calendar(null, null, 'init');\r\n that.autoCalendarModel.auto ? that.choose(lay(elemCont).find('td.layui-this'), index) : that.done(null, 'change');\r\n }\r\n }\r\n ,nextMonth: function(){\r\n if(that.rangeLinked){\r\n var panelYM = that.panelYM[0];\r\n var YM = that.getAsYM(panelYM.year, panelYM.month);\r\n var dateTimeTemp = lay.extend({}, options.dateTime, that.panelYM[0], {year: YM[0],month: YM[1]});\r\n that.checkDate('limit').calendar(dateTimeTemp, null, 'init');\r\n }else{\r\n var YM = that.getAsYM(dateTime.year, dateTime.month);\r\n lay.extend(dateTime, {\r\n year: YM[0]\r\n ,month: YM[1]\r\n });\r\n \r\n that.checkDate('limit').calendar(null, null, 'init');\r\n that.autoCalendarModel.auto ? that.choose(lay(elemCont).find('td.layui-this'), index) : that.done(null, 'change');\r\n }\r\n }\r\n ,nextYear: function(){\r\n if(addSubYear()) return;\r\n if (that.rangeLinked) {\r\n options.dateTime.year++;\r\n that.checkDate('limit').calendar(null, 0, 'init');\r\n } else {\r\n dateTime.year++;\r\n that.checkDate('limit').calendar(null, index);\r\n that.autoCalendarModel.auto ? that.choose(lay(elemCont).find('td.layui-this'), index) : that.done(null, 'change');\r\n }\r\n }\r\n };\r\n };\r\n\r\n //日期切换事件\r\n Class.prototype.changeEvent = function(){\r\n var that = this\r\n ,options = that.config;\r\n\r\n //日期选择事件\r\n lay(that.elem).on('click', function(e){\r\n lay.stope(e);\r\n }).on('mousedown', function(e){\r\n lay.stope(e);\r\n });\r\n\r\n //年月切换\r\n lay.each(that.elemHeader, function(i, header){\r\n //上一年\r\n lay(header[0]).on('click', function(e){\r\n that.change(i).prevYear();\r\n });\r\n\r\n //上一月\r\n lay(header[1]).on('click', function(e){\r\n that.change(i).prevMonth();\r\n });\r\n\r\n //选择年月\r\n lay(header[2]).find('span').on('click', function(e){\r\n var othis = lay(this)\r\n ,layYM = othis.attr('lay-ym')\r\n ,layType = othis.attr('lay-type');\r\n\r\n if(!layYM) return;\r\n\r\n layYM = layYM.split('-');\r\n\r\n that.listYM[i] = [layYM[0] | 0, layYM[1] | 0];\r\n that.list(layType, i);\r\n lay(that.footer).find('.'+ ELEM_TIME_BTN).addClass(DISABLED);\r\n });\r\n\r\n //下一月\r\n lay(header[3]).on('click', function(e){\r\n that.change(i).nextMonth();\r\n });\r\n\r\n //下一年\r\n lay(header[4]).on('click', function(e){\r\n that.change(i).nextYear();\r\n });\r\n });\r\n\r\n //点击日期\r\n lay.each(that.table, function(i, table){\r\n var tds = lay(table).find('td');\r\n tds.on('click', function(){\r\n that.choose(lay(this), i);\r\n });\r\n });\r\n\r\n //点击底部按钮\r\n lay(that.footer).find('span').on('click', function(){\r\n var type = lay(this).attr('lay-type');\r\n that.tool(this, type);\r\n });\r\n };\r\n\r\n //是否输入框\r\n Class.prototype.isInput = function(elem){\r\n return /input|textarea/.test(elem.tagName.toLocaleLowerCase()) || /INPUT|TEXTAREA/.test(elem.tagName);\r\n };\r\n\r\n //绑定的元素事件处理\r\n Class.prototype.events = function(){\r\n var that = this\r\n var options = that.config\r\n\r\n if(!options.elem[0] || options.elem[0].eventHandler) return;\r\n\r\n var showEvent = function(){\r\n // 已经打开的面板避免重新渲染\r\n if(laydate.thisId === options.id) return;\r\n that.render();\r\n };\r\n\r\n //绑定呼出控件事件\r\n options.elem.on(options.trigger, showEvent);\r\n options.elem[0].eventHandler = true;\r\n options.eventElem.on(options.trigger, showEvent);\r\n\r\n // 元素解绑\r\n that.unbind = function () {\r\n that.remove();\r\n options.elem.off(options.trigger, showEvent);\r\n options.elem.removeAttr('lay-key');\r\n options.elem.removeAttr(MOD_ID);\r\n options.elem[0].eventHandler = false;\r\n options.eventElem.off(options.trigger, showEvent);\r\n options.eventElem.removeAttr('lay-key');\r\n delete thisModule.that[options.id];\r\n };\r\n };\r\n\r\n //记录所有实例\r\n thisModule.that = {}; //记录所有实例对象\r\n\r\n //获取当前实例对象\r\n thisModule.getThis = function(id){\r\n var that = thisModule.that[id];\r\n if(!that && isLayui) layui.hint().error(id ? (MOD_NAME +' instance with ID \\''+ id +'\\' not found') : 'ID argument required');\r\n return that;\r\n };\r\n\r\n // 初始执行\r\n ready.run = function(lay){\r\n // 绑定关闭控件事件\r\n lay(document).on('mousedown', function(e){\r\n if(!laydate.thisId) return;\r\n var that = thisModule.getThis(laydate.thisId);\r\n if(!that) return;\r\n\r\n var options = that.config;\r\n\r\n if(\r\n e.target === options.elem[0] ||\r\n e.target === options.eventElem[0] ||\r\n e.target === lay(options.closeStop)[0] ||\r\n (options.elem[0] && options.elem[0].contains(e.target))\r\n ) return;\r\n\r\n that.remove();\r\n\r\n }).on('keydown', function(e){\r\n if(!laydate.thisId) return;\r\n var that = thisModule.getThis(laydate.thisId);\r\n if(!that) return;\r\n\r\n // 回车触发确认\r\n if(that.config.position === 'static') return;\r\n if(e.keyCode === 13){\r\n if(lay('#'+ that.elemID)[0] && that.elemID === Class.thisElemDate){\r\n e.preventDefault();\r\n lay(that.footer).find(ELEM_CONFIRM)[0].click();\r\n }\r\n }\r\n });\r\n\r\n //自适应定位\r\n lay(window).on('resize', function(){\r\n if(!laydate.thisId) return;\r\n var that = thisModule.getThis(laydate.thisId);\r\n if(!that) return;\r\n\r\n if(!that.elem || !lay(ELEM)[0]){\r\n return false;\r\n }\r\n\r\n that.position();\r\n });\r\n };\r\n\r\n // 渲染 - 核心接口\r\n laydate.render = function(options){\r\n var inst = new Class(options);\r\n return thisModule.call(inst);\r\n };\r\n\r\n // 重载\r\n laydate.reload = function (id, options) {\r\n var that = thisModule.getThis(id);\r\n if(!that) return;\r\n return that.reload(options);\r\n };\r\n\r\n // 获取对应 ID 的实例\r\n laydate.getInst = function (id) {\r\n var that = thisModule.getThis(id);\r\n if(that){\r\n return that.inst;\r\n }\r\n };\r\n\r\n // 面板提示\r\n laydate.hint = function(id, opts){\r\n var that = thisModule.getThis(id);\r\n if(!that) return;\r\n return that.hint(opts);\r\n };\r\n\r\n // 解绑实例\r\n laydate.unbind = function(id){\r\n var that = thisModule.getThis(id);\r\n if(!that) return;\r\n return that.unbind();\r\n };\r\n\r\n // 关闭日期面板\r\n laydate.close = function(id){\r\n var that = thisModule.getThis(id || laydate.thisId);\r\n if(!that) return;\r\n return that.remove();\r\n };\r\n\r\n // 将指定对象转化为日期值\r\n laydate.parse = function(dateTime, format, one){\r\n dateTime = dateTime || {};\r\n\r\n //如果 format 是字符型,则转换为数组格式\r\n if(typeof format === 'string'){\r\n format = thisModule.formatArr(format);\r\n }\r\n\r\n format = (format || []).concat();\r\n\r\n //转义为规定格式\r\n lay.each(format, function(i, item){\r\n if(/yyyy|y/.test(item)){ //年\r\n format[i] = lay.digit(dateTime.year, item.length);\r\n } else if(/MM|M/.test(item)){ //月\r\n format[i] = lay.digit(dateTime.month + (one || 0), item.length);\r\n } else if(/dd|d/.test(item)){ //日\r\n format[i] = lay.digit(dateTime.date, item.length);\r\n } else if(/HH|H/.test(item)){ //时\r\n format[i] = lay.digit(dateTime.hours, item.length);\r\n } else if(/mm|m/.test(item)){ //分\r\n format[i] = lay.digit(dateTime.minutes, item.length);\r\n } else if(/ss|s/.test(item)){ //秒\r\n format[i] = lay.digit(dateTime.seconds, item.length);\r\n }\r\n });\r\n\r\n return format.join('');\r\n };\r\n\r\n // 得到某月的最后一天\r\n laydate.getEndDate = function(month, year){\r\n var thisDate = new Date();\r\n //设置日期为下个月的第一天\r\n thisDate.setFullYear(\r\n year || thisDate.getFullYear()\r\n ,month || (thisDate.getMonth() + 1)\r\n ,1);\r\n //减去一天,得到当前月最后一天\r\n return new Date(thisDate.getTime() - 1000*60*60*24).getDate();\r\n };\r\n\r\n //加载方式\r\n isLayui ? (\r\n laydate.ready()\r\n ,layui.define('lay', function(exports){ //layui 加载\r\n laydate.path = layui.cache.dir;\r\n ready.run(lay);\r\n exports(MOD_NAME, laydate);\r\n })\r\n ) : (\r\n (typeof define === 'function' && define.amd) ? define(function(){ //requirejs 加载\r\n ready.run(lay);\r\n return laydate;\r\n }) : function(){ //普通 script 标签加载\r\n laydate.ready();\r\n ready.run(window.lay);\r\n window.laydate = laydate;\r\n }()\r\n );\r\n\r\n}(window, window.document);\r\n","/*!\r\n * jQuery JavaScript Library v1.12.4\r\n * http://jquery.com/\r\n *\r\n * Includes Sizzle.js\r\n * http://sizzlejs.com/\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license\r\n * http://jquery.org/license\r\n *\r\n * Date: 2016-05-20T17:17Z\r\n */\r\n\r\n(function( global, factory ) {\r\n\r\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\r\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\r\n\t\t// is present, execute the factory and get jQuery.\r\n\t\t// For environments that do not have a `window` with a `document`\r\n\t\t// (such as Node.js), expose a factory as module.exports.\r\n\t\t// This accentuates the need for the creation of a real `window`.\r\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\r\n\t\t// See ticket #14549 for more info.\r\n\t\tmodule.exports = global.document ?\r\n\t\t\tfactory( global, true ) :\r\n\t\t\tfunction( w ) {\r\n\t\t\t\tif ( !w.document ) {\r\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\r\n\t\t\t\t}\r\n\t\t\t\treturn factory( w );\r\n\t\t\t};\r\n\t} else {\r\n\t\tfactory( global );\r\n\t}\r\n\r\n// Pass this if window is not defined yet\r\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\r\n\r\n// Support: Firefox 18+\r\n// Can't be in strict mode, several libs including ASP.NET trace\r\n// the stack via arguments.caller.callee and Firefox dies if\r\n// you try to trace through \"use strict\" call chains. (#13335)\r\n//\"use strict\";\r\nvar deletedIds = [];\r\n\r\nvar document = window.document;\r\n\r\nvar slice = deletedIds.slice;\r\n\r\nvar concat = deletedIds.concat;\r\n\r\nvar push = deletedIds.push;\r\n\r\nvar indexOf = deletedIds.indexOf;\r\n\r\nvar class2type = {};\r\n\r\nvar toString = class2type.toString;\r\n\r\nvar hasOwn = class2type.hasOwnProperty;\r\n\r\nvar support = {};\r\n\r\n\r\n\r\nvar\r\n\tversion = \"1.12.4\",\r\n\r\n\t// Define a local copy of jQuery\r\n\tjQuery = function( selector, context ) {\r\n\r\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\r\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\r\n\t\treturn new jQuery.fn.init( selector, context );\r\n\t},\r\n\r\n\t// Support: Android<4.1, IE<9\r\n\t// Make sure we trim BOM and NBSP\r\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\r\n\r\n\t// Matches dashed string for camelizing\r\n\trmsPrefix = /^-ms-/,\r\n\trdashAlpha = /-([\\da-z])/gi,\r\n\r\n\t// Used by jQuery.camelCase as callback to replace()\r\n\tfcamelCase = function( all, letter ) {\r\n\t\treturn letter.toUpperCase();\r\n\t};\r\n\r\njQuery.fn = jQuery.prototype = {\r\n\r\n\t// The current version of jQuery being used\r\n\tjquery: version,\r\n\r\n\tconstructor: jQuery,\r\n\r\n\t// Start with an empty selector\r\n\tselector: \"\",\r\n\r\n\t// The default length of a jQuery object is 0\r\n\tlength: 0,\r\n\r\n\ttoArray: function() {\r\n\t\treturn slice.call( this );\r\n\t},\r\n\r\n\t// Get the Nth element in the matched element set OR\r\n\t// Get the whole matched element set as a clean array\r\n\tget: function( num ) {\r\n\t\treturn num != null ?\r\n\r\n\t\t\t// Return just the one element from the set\r\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\r\n\r\n\t\t\t// Return all the elements in a clean array\r\n\t\t\tslice.call( this );\r\n\t},\r\n\r\n\t// Take an array of elements and push it onto the stack\r\n\t// (returning the new matched element set)\r\n\tpushStack: function( elems ) {\r\n\r\n\t\t// Build a new jQuery matched element set\r\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\r\n\r\n\t\t// Add the old object onto the stack (as a reference)\r\n\t\tret.prevObject = this;\r\n\t\tret.context = this.context;\r\n\r\n\t\t// Return the newly-formed element set\r\n\t\treturn ret;\r\n\t},\r\n\r\n\t// Execute a callback for every element in the matched set.\r\n\teach: function( callback ) {\r\n\t\treturn jQuery.each( this, callback );\r\n\t},\r\n\r\n\tmap: function( callback ) {\r\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\r\n\t\t\treturn callback.call( elem, i, elem );\r\n\t\t} ) );\r\n\t},\r\n\r\n\tslice: function() {\r\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\r\n\t},\r\n\r\n\tfirst: function() {\r\n\t\treturn this.eq( 0 );\r\n\t},\r\n\r\n\tlast: function() {\r\n\t\treturn this.eq( -1 );\r\n\t},\r\n\r\n\teq: function( i ) {\r\n\t\tvar len = this.length,\r\n\t\t\tj = +i + ( i < 0 ? len : 0 );\r\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\r\n\t},\r\n\r\n\tend: function() {\r\n\t\treturn this.prevObject || this.constructor();\r\n\t},\r\n\r\n\t// For internal use only.\r\n\t// Behaves like an Array's method, not like a jQuery method.\r\n\tpush: push,\r\n\tsort: deletedIds.sort,\r\n\tsplice: deletedIds.splice\r\n};\r\n\r\njQuery.extend = jQuery.fn.extend = function() {\r\n\tvar src, copyIsArray, copy, name, options, clone,\r\n\t\ttarget = arguments[ 0 ] || {},\r\n\t\ti = 1,\r\n\t\tlength = arguments.length,\r\n\t\tdeep = false;\r\n\r\n\t// Handle a deep copy situation\r\n\tif ( typeof target === \"boolean\" ) {\r\n\t\tdeep = target;\r\n\r\n\t\t// skip the boolean and the target\r\n\t\ttarget = arguments[ i ] || {};\r\n\t\ti++;\r\n\t}\r\n\r\n\t// Handle case when target is a string or something (possible in deep copy)\r\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\r\n\t\ttarget = {};\r\n\t}\r\n\r\n\t// extend jQuery itself if only one argument is passed\r\n\tif ( i === length ) {\r\n\t\ttarget = this;\r\n\t\ti--;\r\n\t}\r\n\r\n\tfor ( ; i < length; i++ ) {\r\n\r\n\t\t// Only deal with non-null/undefined values\r\n\t\tif ( ( options = arguments[ i ] ) != null ) {\r\n\r\n\t\t\t// Extend the base object\r\n\t\t\tfor ( name in options ) {\r\n\t\t\t\tsrc = target[ name ];\r\n\t\t\t\tcopy = options[ name ];\r\n\r\n\t\t\t\t// Prevent never-ending loop\r\n\t\t\t\tif ( target === copy ) {\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Recurse if we're merging plain objects or arrays\r\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\r\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\r\n\r\n\t\t\t\t\tif ( copyIsArray ) {\r\n\t\t\t\t\t\tcopyIsArray = false;\r\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\r\n\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Never move original objects, clone them\r\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\r\n\r\n\t\t\t\t// Don't bring in undefined values\r\n\t\t\t\t} else if ( copy !== undefined ) {\r\n\t\t\t\t\ttarget[ name ] = copy;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Return the modified object\r\n\treturn target;\r\n};\r\n\r\njQuery.extend( {\r\n\r\n\t// Unique for each copy of jQuery on the page\r\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\r\n\r\n\t// Assume jQuery is ready without the ready module\r\n\tisReady: true,\r\n\r\n\terror: function( msg ) {\r\n\t\tthrow new Error( msg );\r\n\t},\r\n\r\n\tnoop: function() {},\r\n\r\n\t// See test/unit/core.js for details concerning isFunction.\r\n\t// Since version 1.3, DOM methods and functions like alert\r\n\t// aren't supported. They return false on IE (#2968).\r\n\tisFunction: function( obj ) {\r\n\t\treturn jQuery.type( obj ) === \"function\";\r\n\t},\r\n\r\n\tisArray: Array.isArray || function( obj ) {\r\n\t\treturn jQuery.type( obj ) === \"array\";\r\n\t},\r\n\r\n\tisWindow: function( obj ) {\r\n\t\t/* jshint eqeqeq: false */\r\n\t\treturn obj != null && obj == obj.window;\r\n\t},\r\n\r\n\tisNumeric: function( obj ) {\r\n\r\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\r\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\r\n\t\t// subtraction forces infinities to NaN\r\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\r\n\t\tvar realStringObj = obj && obj.toString();\r\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\r\n\t},\r\n\r\n\tisEmptyObject: function( obj ) {\r\n\t\tvar name;\r\n\t\tfor ( name in obj ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\treturn true;\r\n\t},\r\n\r\n\tisPlainObject: function( obj ) {\r\n\t\tvar key;\r\n\r\n\t\t// Must be an Object.\r\n\t\t// Because of IE, we also have to check the presence of the constructor property.\r\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\r\n\t\tif ( !obj || jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\r\n\t\t\t// Not own constructor property must be Object\r\n\t\t\tif ( obj.constructor &&\r\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\r\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t} catch ( e ) {\r\n\r\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Handle iteration over inherited properties before own properties.\r\n\t\tif ( !support.ownFirst ) {\r\n\t\t\tfor ( key in obj ) {\r\n\t\t\t\treturn hasOwn.call( obj, key );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Own properties are enumerated firstly, so to speed up,\r\n\t\t// if last one is own, then all properties are own.\r\n\t\tfor ( key in obj ) {}\r\n\r\n\t\treturn key === undefined || hasOwn.call( obj, key );\r\n\t},\r\n\r\n\ttype: function( obj ) {\r\n\t\tif ( obj == null ) {\r\n\t\t\treturn obj + \"\";\r\n\t\t}\r\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\r\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\r\n\t\t\ttypeof obj;\r\n\t},\r\n\r\n\t// Workarounds based on findings by Jim Driscoll\r\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\r\n\tglobalEval: function( data ) {\r\n\t\tif ( data && jQuery.trim( data ) ) {\r\n\r\n\t\t\t// We use execScript on Internet Explorer\r\n\t\t\t// We use an anonymous function so that context is window\r\n\t\t\t// rather than jQuery in Firefox\r\n\t\t\t( window.execScript || function( data ) {\r\n\t\t\t\twindow[ \"eval\" ].call( window, data ); // jscs:ignore requireDotNotation\r\n\t\t\t} )( data );\r\n\t\t}\r\n\t},\r\n\r\n\t// Convert dashed to camelCase; used by the css and data modules\r\n\t// Microsoft forgot to hump their vendor prefix (#9572)\r\n\tcamelCase: function( string ) {\r\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\r\n\t},\r\n\r\n\tnodeName: function( elem, name ) {\r\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\r\n\t},\r\n\r\n\teach: function( obj, callback ) {\r\n\t\tvar length, i = 0;\r\n\r\n\t\tif ( isArrayLike( obj ) ) {\r\n\t\t\tlength = obj.length;\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfor ( i in obj ) {\r\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn obj;\r\n\t},\r\n\r\n\t// Support: Android<4.1, IE<9\r\n\ttrim: function( text ) {\r\n\t\treturn text == null ?\r\n\t\t\t\"\" :\r\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\r\n\t},\r\n\r\n\t// results is for internal usage only\r\n\tmakeArray: function( arr, results ) {\r\n\t\tvar ret = results || [];\r\n\r\n\t\tif ( arr != null ) {\r\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\r\n\t\t\t\tjQuery.merge( ret,\r\n\t\t\t\t\ttypeof arr === \"string\" ?\r\n\t\t\t\t\t[ arr ] : arr\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tpush.call( ret, arr );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn ret;\r\n\t},\r\n\r\n\tinArray: function( elem, arr, i ) {\r\n\t\tvar len;\r\n\r\n\t\tif ( arr ) {\r\n\t\t\tif ( indexOf ) {\r\n\t\t\t\treturn indexOf.call( arr, elem, i );\r\n\t\t\t}\r\n\r\n\t\t\tlen = arr.length;\r\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\r\n\r\n\t\t\tfor ( ; i < len; i++ ) {\r\n\r\n\t\t\t\t// Skip accessing in sparse arrays\r\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\r\n\t\t\t\t\treturn i;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn -1;\r\n\t},\r\n\r\n\tmerge: function( first, second ) {\r\n\t\tvar len = +second.length,\r\n\t\t\tj = 0,\r\n\t\t\ti = first.length;\r\n\r\n\t\twhile ( j < len ) {\r\n\t\t\tfirst[ i++ ] = second[ j++ ];\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\r\n\t\tif ( len !== len ) {\r\n\t\t\twhile ( second[ j ] !== undefined ) {\r\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfirst.length = i;\r\n\r\n\t\treturn first;\r\n\t},\r\n\r\n\tgrep: function( elems, callback, invert ) {\r\n\t\tvar callbackInverse,\r\n\t\t\tmatches = [],\r\n\t\t\ti = 0,\r\n\t\t\tlength = elems.length,\r\n\t\t\tcallbackExpect = !invert;\r\n\r\n\t\t// Go through the array, only saving the items\r\n\t\t// that pass the validator function\r\n\t\tfor ( ; i < length; i++ ) {\r\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\r\n\t\t\tif ( callbackInverse !== callbackExpect ) {\r\n\t\t\t\tmatches.push( elems[ i ] );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn matches;\r\n\t},\r\n\r\n\t// arg is for internal usage only\r\n\tmap: function( elems, callback, arg ) {\r\n\t\tvar length, value,\r\n\t\t\ti = 0,\r\n\t\t\tret = [];\r\n\r\n\t\t// Go through the array, translating each of the items to their new values\r\n\t\tif ( isArrayLike( elems ) ) {\r\n\t\t\tlength = elems.length;\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\r\n\r\n\t\t\t\tif ( value != null ) {\r\n\t\t\t\t\tret.push( value );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// Go through every key on the object,\r\n\t\t} else {\r\n\t\t\tfor ( i in elems ) {\r\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\r\n\r\n\t\t\t\tif ( value != null ) {\r\n\t\t\t\t\tret.push( value );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Flatten any nested arrays\r\n\t\treturn concat.apply( [], ret );\r\n\t},\r\n\r\n\t// A global GUID counter for objects\r\n\tguid: 1,\r\n\r\n\t// Bind a function to a context, optionally partially applying any\r\n\t// arguments.\r\n\tproxy: function( fn, context ) {\r\n\t\tvar args, proxy, tmp;\r\n\r\n\t\tif ( typeof context === \"string\" ) {\r\n\t\t\ttmp = fn[ context ];\r\n\t\t\tcontext = fn;\r\n\t\t\tfn = tmp;\r\n\t\t}\r\n\r\n\t\t// Quick check to determine if target is callable, in the spec\r\n\t\t// this throws a TypeError, but we will just return undefined.\r\n\t\tif ( !jQuery.isFunction( fn ) ) {\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\r\n\t\t// Simulated bind\r\n\t\targs = slice.call( arguments, 2 );\r\n\t\tproxy = function() {\r\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\r\n\t\t};\r\n\r\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\r\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\r\n\r\n\t\treturn proxy;\r\n\t},\r\n\r\n\tnow: function() {\r\n\t\treturn +( new Date() );\r\n\t},\r\n\r\n\t// jQuery.support is not used in Core but other projects attach their\r\n\t// properties to it so it needs to exist.\r\n\tsupport: support\r\n} );\r\n\r\n// JSHint would error on this code due to the Symbol not being defined in ES5.\r\n// Defining this global in .jshintrc would create a danger of using the global\r\n// unguarded in another place, it seems safer to just disable JSHint for these\r\n// three lines.\r\n/* jshint ignore: start */\r\nif ( typeof Symbol === \"function\" ) {\r\n\tjQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];\r\n}\r\n/* jshint ignore: end */\r\n\r\n// Populate the class2type map\r\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\r\nfunction( i, name ) {\r\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\r\n} );\r\n\r\nfunction isArrayLike( obj ) {\r\n\r\n\t// Support: iOS 8.2 (not reproducible in simulator)\r\n\t// `in` check used to prevent JIT error (gh-2145)\r\n\t// hasOwn isn't used here due to false negatives\r\n\t// regarding Nodelist length in IE\r\n\tvar length = !!obj && \"length\" in obj && obj.length,\r\n\t\ttype = jQuery.type( obj );\r\n\r\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\treturn type === \"array\" || length === 0 ||\r\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\r\n}\r\nvar Sizzle =\r\n/*!\r\n * Sizzle CSS Selector Engine v2.2.1\r\n * http://sizzlejs.com/\r\n *\r\n * Copyright jQuery Foundation and other contributors\r\n * Released under the MIT license\r\n * http://jquery.org/license\r\n *\r\n * Date: 2015-10-17\r\n */\r\n(function( window ) {\r\n\r\nvar i,\r\n\tsupport,\r\n\tExpr,\r\n\tgetText,\r\n\tisXML,\r\n\ttokenize,\r\n\tcompile,\r\n\tselect,\r\n\toutermostContext,\r\n\tsortInput,\r\n\thasDuplicate,\r\n\r\n\t// Local document vars\r\n\tsetDocument,\r\n\tdocument,\r\n\tdocElem,\r\n\tdocumentIsHTML,\r\n\trbuggyQSA,\r\n\trbuggyMatches,\r\n\tmatches,\r\n\tcontains,\r\n\r\n\t// Instance-specific data\r\n\texpando = \"sizzle\" + 1 * new Date(),\r\n\tpreferredDoc = window.document,\r\n\tdirruns = 0,\r\n\tdone = 0,\r\n\tclassCache = createCache(),\r\n\ttokenCache = createCache(),\r\n\tcompilerCache = createCache(),\r\n\tsortOrder = function( a, b ) {\r\n\t\tif ( a === b ) {\r\n\t\t\thasDuplicate = true;\r\n\t\t}\r\n\t\treturn 0;\r\n\t},\r\n\r\n\t// General-purpose constants\r\n\tMAX_NEGATIVE = 1 << 31,\r\n\r\n\t// Instance methods\r\n\thasOwn = ({}).hasOwnProperty,\r\n\tarr = [],\r\n\tpop = arr.pop,\r\n\tpush_native = arr.push,\r\n\tpush = arr.push,\r\n\tslice = arr.slice,\r\n\t// Use a stripped-down indexOf as it's faster than native\r\n\t// http://jsperf.com/thor-indexof-vs-for/5\r\n\tindexOf = function( list, elem ) {\r\n\t\tvar i = 0,\r\n\t\t\tlen = list.length;\r\n\t\tfor ( ; i < len; i++ ) {\r\n\t\t\tif ( list[i] === elem ) {\r\n\t\t\t\treturn i;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t},\r\n\r\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\r\n\r\n\t// Regular expressions\r\n\r\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\r\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\r\n\r\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\r\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\r\n\r\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\r\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\r\n\t\t// Operator (capture 2)\r\n\t\t\"*([*^$|!~]?=)\" + whitespace +\r\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\r\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\r\n\t\t\"*\\\\]\",\r\n\r\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\r\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\r\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\r\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\r\n\t\t// 2. simple (capture 6)\r\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\r\n\t\t// 3. anything else (capture 2)\r\n\t\t\".*\" +\r\n\t\t\")\\\\)|)\",\r\n\r\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\r\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\r\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\r\n\r\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\r\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\r\n\r\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\r\n\r\n\trpseudo = new RegExp( pseudos ),\r\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\r\n\r\n\tmatchExpr = {\r\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\r\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\r\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\r\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\r\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\r\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\r\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\r\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\r\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\r\n\t\t// For use in libraries implementing .is()\r\n\t\t// We use this for POS matching in `select`\r\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\r\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\r\n\t},\r\n\r\n\trinputs = /^(?:input|select|textarea|button)$/i,\r\n\trheader = /^h\\d$/i,\r\n\r\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\r\n\r\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\r\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\r\n\r\n\trsibling = /[+~]/,\r\n\trescape = /'|\\\\/g,\r\n\r\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\r\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\r\n\tfunescape = function( _, escaped, escapedWhitespace ) {\r\n\t\tvar high = \"0x\" + escaped - 0x10000;\r\n\t\t// NaN means non-codepoint\r\n\t\t// Support: Firefox<24\r\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\r\n\t\treturn high !== high || escapedWhitespace ?\r\n\t\t\tescaped :\r\n\t\t\thigh < 0 ?\r\n\t\t\t\t// BMP codepoint\r\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\r\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\r\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\r\n\t},\r\n\r\n\t// Used for iframes\r\n\t// See setDocument()\r\n\t// Removing the function wrapper causes a \"Permission Denied\"\r\n\t// error in IE\r\n\tunloadHandler = function() {\r\n\t\tsetDocument();\r\n\t};\r\n\r\n// Optimize for push.apply( _, NodeList )\r\ntry {\r\n\tpush.apply(\r\n\t\t(arr = slice.call( preferredDoc.childNodes )),\r\n\t\tpreferredDoc.childNodes\r\n\t);\r\n\t// Support: Android<4.0\r\n\t// Detect silently failing push.apply\r\n\tarr[ preferredDoc.childNodes.length ].nodeType;\r\n} catch ( e ) {\r\n\tpush = { apply: arr.length ?\r\n\r\n\t\t// Leverage slice if possible\r\n\t\tfunction( target, els ) {\r\n\t\t\tpush_native.apply( target, slice.call(els) );\r\n\t\t} :\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Otherwise append directly\r\n\t\tfunction( target, els ) {\r\n\t\t\tvar j = target.length,\r\n\t\t\t\ti = 0;\r\n\t\t\t// Can't trust NodeList.length\r\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\r\n\t\t\ttarget.length = j - 1;\r\n\t\t}\r\n\t};\r\n}\r\n\r\nfunction Sizzle( selector, context, results, seed ) {\r\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\r\n\t\tnewContext = context && context.ownerDocument,\r\n\r\n\t\t// nodeType defaults to 9, since context defaults to document\r\n\t\tnodeType = context ? context.nodeType : 9;\r\n\r\n\tresults = results || [];\r\n\r\n\t// Return early from calls with invalid selector or context\r\n\tif ( typeof selector !== \"string\" || !selector ||\r\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\r\n\tif ( !seed ) {\r\n\r\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\r\n\t\t\tsetDocument( context );\r\n\t\t}\r\n\t\tcontext = context || document;\r\n\r\n\t\tif ( documentIsHTML ) {\r\n\r\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\r\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\r\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\r\n\r\n\t\t\t\t// ID selector\r\n\t\t\t\tif ( (m = match[1]) ) {\r\n\r\n\t\t\t\t\t// Document context\r\n\t\t\t\t\tif ( nodeType === 9 ) {\r\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\r\n\r\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\r\n\t\t\t\t\t\t\t// TODO: identify versions\r\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\r\n\t\t\t\t\t\t\tif ( elem.id === m ) {\r\n\t\t\t\t\t\t\t\tresults.push( elem );\r\n\t\t\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Element context\r\n\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\r\n\t\t\t\t\t\t// TODO: identify versions\r\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\r\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\r\n\t\t\t\t\t\t\tcontains( context, elem ) &&\r\n\t\t\t\t\t\t\telem.id === m ) {\r\n\r\n\t\t\t\t\t\t\tresults.push( elem );\r\n\t\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t// Type selector\r\n\t\t\t\t} else if ( match[2] ) {\r\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\r\n\t\t\t\t\treturn results;\r\n\r\n\t\t\t\t// Class selector\r\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\r\n\t\t\t\t\tcontext.getElementsByClassName ) {\r\n\r\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\r\n\t\t\t\t\treturn results;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Take advantage of querySelectorAll\r\n\t\t\tif ( support.qsa &&\r\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\r\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\r\n\r\n\t\t\t\tif ( nodeType !== 1 ) {\r\n\t\t\t\t\tnewContext = context;\r\n\t\t\t\t\tnewSelector = selector;\r\n\r\n\t\t\t\t// qSA looks outside Element context, which is not what we want\r\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\r\n\t\t\t\t// Support: IE <=8\r\n\t\t\t\t// Exclude object elements\r\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\r\n\r\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\r\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\r\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Prefix every selector in the list\r\n\t\t\t\t\tgroups = tokenize( selector );\r\n\t\t\t\t\ti = groups.length;\r\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\r\n\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewSelector = groups.join( \",\" );\r\n\r\n\t\t\t\t\t// Expand context for sibling selectors\r\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\r\n\t\t\t\t\t\tcontext;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( newSelector ) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tpush.apply( results,\r\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t} catch ( qsaError ) {\r\n\t\t\t\t\t} finally {\r\n\t\t\t\t\t\tif ( nid === expando ) {\r\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// All others\r\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\r\n}\r\n\r\n/**\r\n * Create key-value caches of limited size\r\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\r\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\r\n *\tdeleting the oldest entry\r\n */\r\nfunction createCache() {\r\n\tvar keys = [];\r\n\r\n\tfunction cache( key, value ) {\r\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\r\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\r\n\t\t\t// Only keep the most recent entries\r\n\t\t\tdelete cache[ keys.shift() ];\r\n\t\t}\r\n\t\treturn (cache[ key + \" \" ] = value);\r\n\t}\r\n\treturn cache;\r\n}\r\n\r\n/**\r\n * Mark a function for special use by Sizzle\r\n * @param {Function} fn The function to mark\r\n */\r\nfunction markFunction( fn ) {\r\n\tfn[ expando ] = true;\r\n\treturn fn;\r\n}\r\n\r\n/**\r\n * Support testing using an element\r\n * @param {Function} fn Passed the created div and expects a boolean result\r\n */\r\nfunction assert( fn ) {\r\n\tvar div = document.createElement(\"div\");\r\n\r\n\ttry {\r\n\t\treturn !!fn( div );\r\n\t} catch (e) {\r\n\t\treturn false;\r\n\t} finally {\r\n\t\t// Remove from its parent by default\r\n\t\tif ( div.parentNode ) {\r\n\t\t\tdiv.parentNode.removeChild( div );\r\n\t\t}\r\n\t\t// release memory in IE\r\n\t\tdiv = null;\r\n\t}\r\n}\r\n\r\n/**\r\n * Adds the same handler for all of the specified attrs\r\n * @param {String} attrs Pipe-separated list of attributes\r\n * @param {Function} handler The method that will be applied\r\n */\r\nfunction addHandle( attrs, handler ) {\r\n\tvar arr = attrs.split(\"|\"),\r\n\t\ti = arr.length;\r\n\r\n\twhile ( i-- ) {\r\n\t\tExpr.attrHandle[ arr[i] ] = handler;\r\n\t}\r\n}\r\n\r\n/**\r\n * Checks document order of two siblings\r\n * @param {Element} a\r\n * @param {Element} b\r\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\r\n */\r\nfunction siblingCheck( a, b ) {\r\n\tvar cur = b && a,\r\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\r\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\r\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\r\n\r\n\t// Use IE sourceIndex if available on both nodes\r\n\tif ( diff ) {\r\n\t\treturn diff;\r\n\t}\r\n\r\n\t// Check if b follows a\r\n\tif ( cur ) {\r\n\t\twhile ( (cur = cur.nextSibling) ) {\r\n\t\t\tif ( cur === b ) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn a ? 1 : -1;\r\n}\r\n\r\n/**\r\n * Returns a function to use in pseudos for input types\r\n * @param {String} type\r\n */\r\nfunction createInputPseudo( type ) {\r\n\treturn function( elem ) {\r\n\t\tvar name = elem.nodeName.toLowerCase();\r\n\t\treturn name === \"input\" && elem.type === type;\r\n\t};\r\n}\r\n\r\n/**\r\n * Returns a function to use in pseudos for buttons\r\n * @param {String} type\r\n */\r\nfunction createButtonPseudo( type ) {\r\n\treturn function( elem ) {\r\n\t\tvar name = elem.nodeName.toLowerCase();\r\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\r\n\t};\r\n}\r\n\r\n/**\r\n * Returns a function to use in pseudos for positionals\r\n * @param {Function} fn\r\n */\r\nfunction createPositionalPseudo( fn ) {\r\n\treturn markFunction(function( argument ) {\r\n\t\targument = +argument;\r\n\t\treturn markFunction(function( seed, matches ) {\r\n\t\t\tvar j,\r\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\r\n\t\t\t\ti = matchIndexes.length;\r\n\r\n\t\t\t// Match elements found at the specified indexes\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\r\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n}\r\n\r\n/**\r\n * Checks a node for validity as a Sizzle context\r\n * @param {Element|Object=} context\r\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\r\n */\r\nfunction testContext( context ) {\r\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\r\n}\r\n\r\n// Expose support vars for convenience\r\nsupport = Sizzle.support = {};\r\n\r\n/**\r\n * Detects XML nodes\r\n * @param {Element|Object} elem An element or a document\r\n * @returns {Boolean} True iff elem is a non-HTML XML node\r\n */\r\nisXML = Sizzle.isXML = function( elem ) {\r\n\t// documentElement is verified for cases where it doesn't yet exist\r\n\t// (such as loading iframes in IE - #4833)\r\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\r\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\r\n};\r\n\r\n/**\r\n * Sets document-related variables once based on the current document\r\n * @param {Element|Object} [doc] An element or document object to use to set the document\r\n * @returns {Object} Returns the current document\r\n */\r\nsetDocument = Sizzle.setDocument = function( node ) {\r\n\tvar hasCompare, parent,\r\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\r\n\r\n\t// Return early if doc is invalid or already selected\r\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\r\n\t\treturn document;\r\n\t}\r\n\r\n\t// Update global variables\r\n\tdocument = doc;\r\n\tdocElem = document.documentElement;\r\n\tdocumentIsHTML = !isXML( document );\r\n\r\n\t// Support: IE 9-11, Edge\r\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\r\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\r\n\t\t// Support: IE 11\r\n\t\tif ( parent.addEventListener ) {\r\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\r\n\r\n\t\t// Support: IE 9 - 10 only\r\n\t\t} else if ( parent.attachEvent ) {\r\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\r\n\t\t}\r\n\t}\r\n\r\n\t/* Attributes\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// Support: IE<8\r\n\t// Verify that getAttribute really returns attributes and not properties\r\n\t// (excepting IE8 booleans)\r\n\tsupport.attributes = assert(function( div ) {\r\n\t\tdiv.className = \"i\";\r\n\t\treturn !div.getAttribute(\"className\");\r\n\t});\r\n\r\n\t/* getElement(s)By*\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// Check if getElementsByTagName(\"*\") returns only elements\r\n\tsupport.getElementsByTagName = assert(function( div ) {\r\n\t\tdiv.appendChild( document.createComment(\"\") );\r\n\t\treturn !div.getElementsByTagName(\"*\").length;\r\n\t});\r\n\r\n\t// Support: IE<9\r\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\r\n\r\n\t// Support: IE<10\r\n\t// Check if getElementById returns elements by name\r\n\t// The broken getElementById methods don't pick up programatically-set names,\r\n\t// so use a roundabout getElementsByName test\r\n\tsupport.getById = assert(function( div ) {\r\n\t\tdocElem.appendChild( div ).id = expando;\r\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\r\n\t});\r\n\r\n\t// ID find and filter\r\n\tif ( support.getById ) {\r\n\t\tExpr.find[\"ID\"] = function( id, context ) {\r\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\r\n\t\t\t\tvar m = context.getElementById( id );\r\n\t\t\t\treturn m ? [ m ] : [];\r\n\t\t\t}\r\n\t\t};\r\n\t\tExpr.filter[\"ID\"] = function( id ) {\r\n\t\t\tvar attrId = id.replace( runescape, funescape );\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\r\n\t\t\t};\r\n\t\t};\r\n\t} else {\r\n\t\t// Support: IE6/7\r\n\t\t// getElementById is not reliable as a find shortcut\r\n\t\tdelete Expr.find[\"ID\"];\r\n\r\n\t\tExpr.filter[\"ID\"] = function( id ) {\r\n\t\t\tvar attrId = id.replace( runescape, funescape );\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\r\n\t\t\t\t\telem.getAttributeNode(\"id\");\r\n\t\t\t\treturn node && node.value === attrId;\r\n\t\t\t};\r\n\t\t};\r\n\t}\r\n\r\n\t// Tag\r\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\r\n\t\tfunction( tag, context ) {\r\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\r\n\t\t\t\treturn context.getElementsByTagName( tag );\r\n\r\n\t\t\t// DocumentFragment nodes don't have gEBTN\r\n\t\t\t} else if ( support.qsa ) {\r\n\t\t\t\treturn context.querySelectorAll( tag );\r\n\t\t\t}\r\n\t\t} :\r\n\r\n\t\tfunction( tag, context ) {\r\n\t\t\tvar elem,\r\n\t\t\t\ttmp = [],\r\n\t\t\t\ti = 0,\r\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\r\n\t\t\t\tresults = context.getElementsByTagName( tag );\r\n\r\n\t\t\t// Filter out possible comments\r\n\t\t\tif ( tag === \"*\" ) {\r\n\t\t\t\twhile ( (elem = results[i++]) ) {\r\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\t\t\t\ttmp.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn tmp;\r\n\t\t\t}\r\n\t\t\treturn results;\r\n\t\t};\r\n\r\n\t// Class\r\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\r\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\r\n\t\t\treturn context.getElementsByClassName( className );\r\n\t\t}\r\n\t};\r\n\r\n\t/* QSA/matchesSelector\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// QSA and matchesSelector support\r\n\r\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\r\n\trbuggyMatches = [];\r\n\r\n\t// qSa(:focus) reports false when true (Chrome 21)\r\n\t// We allow this because of a bug in IE8/9 that throws an error\r\n\t// whenever `document.activeElement` is accessed on an iframe\r\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\r\n\t// See http://bugs.jquery.com/ticket/13378\r\n\trbuggyQSA = [];\r\n\r\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\r\n\t\t// Build QSA regex\r\n\t\t// Regex strategy adopted from Diego Perini\r\n\t\tassert(function( div ) {\r\n\t\t\t// Select is set to empty string on purpose\r\n\t\t\t// This is to test IE's treatment of not explicitly\r\n\t\t\t// setting a boolean content attribute,\r\n\t\t\t// since its presence should be enough\r\n\t\t\t// http://bugs.jquery.com/ticket/12359\r\n\t\t\tdocElem.appendChild( div ).innerHTML = \"\" +\r\n\t\t\t\t\"\";\r\n\r\n\t\t\t// Support: IE8, Opera 11-12.16\r\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\r\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\r\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\r\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\r\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Support: IE8\r\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\r\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\r\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\r\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\r\n\t\t\t\trbuggyQSA.push(\"~=\");\r\n\t\t\t}\r\n\r\n\t\t\t// Webkit/Opera - :checked should return selected option elements\r\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r\n\t\t\t// IE8 throws error here and will not see later tests\r\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\r\n\t\t\t\trbuggyQSA.push(\":checked\");\r\n\t\t\t}\r\n\r\n\t\t\t// Support: Safari 8+, iOS 8+\r\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\r\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\r\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\r\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tassert(function( div ) {\r\n\t\t\t// Support: Windows 8 Native Apps\r\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\r\n\t\t\tvar input = document.createElement(\"input\");\r\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\r\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\r\n\r\n\t\t\t// Support: IE8\r\n\t\t\t// Enforce case-sensitivity of name attribute\r\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\r\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\r\n\t\t\t}\r\n\r\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\r\n\t\t\t// IE8 throws error here and will not see later tests\r\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\r\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\r\n\t\t\t}\r\n\r\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\r\n\t\t\tdiv.querySelectorAll(\"*,:x\");\r\n\t\t\trbuggyQSA.push(\",.*:\");\r\n\t\t});\r\n\t}\r\n\r\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\r\n\t\tdocElem.webkitMatchesSelector ||\r\n\t\tdocElem.mozMatchesSelector ||\r\n\t\tdocElem.oMatchesSelector ||\r\n\t\tdocElem.msMatchesSelector) )) ) {\r\n\r\n\t\tassert(function( div ) {\r\n\t\t\t// Check to see if it's possible to do matchesSelector\r\n\t\t\t// on a disconnected node (IE 9)\r\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\r\n\r\n\t\t\t// This should fail with an exception\r\n\t\t\t// Gecko does not error, returns false instead\r\n\t\t\tmatches.call( div, \"[s!='']:x\" );\r\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\r\n\t\t});\r\n\t}\r\n\r\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\r\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\r\n\r\n\t/* Contains\r\n\t---------------------------------------------------------------------- */\r\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\r\n\r\n\t// Element contains another\r\n\t// Purposefully self-exclusive\r\n\t// As in, an element does not contain itself\r\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\r\n\t\tfunction( a, b ) {\r\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\r\n\t\t\t\tbup = b && b.parentNode;\r\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\r\n\t\t\t\tadown.contains ?\r\n\t\t\t\t\tadown.contains( bup ) :\r\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\r\n\t\t\t));\r\n\t\t} :\r\n\t\tfunction( a, b ) {\r\n\t\t\tif ( b ) {\r\n\t\t\t\twhile ( (b = b.parentNode) ) {\r\n\t\t\t\t\tif ( b === a ) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t};\r\n\r\n\t/* Sorting\r\n\t---------------------------------------------------------------------- */\r\n\r\n\t// Document order sorting\r\n\tsortOrder = hasCompare ?\r\n\tfunction( a, b ) {\r\n\r\n\t\t// Flag for duplicate removal\r\n\t\tif ( a === b ) {\r\n\t\t\thasDuplicate = true;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t// Sort on method existence if only one input has compareDocumentPosition\r\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\r\n\t\tif ( compare ) {\r\n\t\t\treturn compare;\r\n\t\t}\r\n\r\n\t\t// Calculate position if both inputs belong to the same document\r\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\r\n\t\t\ta.compareDocumentPosition( b ) :\r\n\r\n\t\t\t// Otherwise we know they are disconnected\r\n\t\t\t1;\r\n\r\n\t\t// Disconnected nodes\r\n\t\tif ( compare & 1 ||\r\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\r\n\r\n\t\t\t// Choose the first element that is related to our preferred document\r\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\r\n\t\t\t\treturn -1;\r\n\t\t\t}\r\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\r\n\t\t\t// Maintain original order\r\n\t\t\treturn sortInput ?\r\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\r\n\t\t\t\t0;\r\n\t\t}\r\n\r\n\t\treturn compare & 4 ? -1 : 1;\r\n\t} :\r\n\tfunction( a, b ) {\r\n\t\t// Exit early if the nodes are identical\r\n\t\tif ( a === b ) {\r\n\t\t\thasDuplicate = true;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tvar cur,\r\n\t\t\ti = 0,\r\n\t\t\taup = a.parentNode,\r\n\t\t\tbup = b.parentNode,\r\n\t\t\tap = [ a ],\r\n\t\t\tbp = [ b ];\r\n\r\n\t\t// Parentless nodes are either documents or disconnected\r\n\t\tif ( !aup || !bup ) {\r\n\t\t\treturn a === document ? -1 :\r\n\t\t\t\tb === document ? 1 :\r\n\t\t\t\taup ? -1 :\r\n\t\t\t\tbup ? 1 :\r\n\t\t\t\tsortInput ?\r\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\r\n\t\t\t\t0;\r\n\r\n\t\t// If the nodes are siblings, we can do a quick check\r\n\t\t} else if ( aup === bup ) {\r\n\t\t\treturn siblingCheck( a, b );\r\n\t\t}\r\n\r\n\t\t// Otherwise we need full lists of their ancestors for comparison\r\n\t\tcur = a;\r\n\t\twhile ( (cur = cur.parentNode) ) {\r\n\t\t\tap.unshift( cur );\r\n\t\t}\r\n\t\tcur = b;\r\n\t\twhile ( (cur = cur.parentNode) ) {\r\n\t\t\tbp.unshift( cur );\r\n\t\t}\r\n\r\n\t\t// Walk down the tree looking for a discrepancy\r\n\t\twhile ( ap[i] === bp[i] ) {\r\n\t\t\ti++;\r\n\t\t}\r\n\r\n\t\treturn i ?\r\n\t\t\t// Do a sibling check if the nodes have a common ancestor\r\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\r\n\r\n\t\t\t// Otherwise nodes in our document sort first\r\n\t\t\tap[i] === preferredDoc ? -1 :\r\n\t\t\tbp[i] === preferredDoc ? 1 :\r\n\t\t\t0;\r\n\t};\r\n\r\n\treturn document;\r\n};\r\n\r\nSizzle.matches = function( expr, elements ) {\r\n\treturn Sizzle( expr, null, null, elements );\r\n};\r\n\r\nSizzle.matchesSelector = function( elem, expr ) {\r\n\t// Set document vars if needed\r\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\r\n\t\tsetDocument( elem );\r\n\t}\r\n\r\n\t// Make sure that attribute selectors are quoted\r\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\r\n\r\n\tif ( support.matchesSelector && documentIsHTML &&\r\n\t\t!compilerCache[ expr + \" \" ] &&\r\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\r\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\r\n\r\n\t\ttry {\r\n\t\t\tvar ret = matches.call( elem, expr );\r\n\r\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\r\n\t\t\tif ( ret || support.disconnectedMatch ||\r\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\r\n\t\t\t\t\t// fragment in IE 9\r\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\r\n\t\t\t\treturn ret;\r\n\t\t\t}\r\n\t\t} catch (e) {}\r\n\t}\r\n\r\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\r\n};\r\n\r\nSizzle.contains = function( context, elem ) {\r\n\t// Set document vars if needed\r\n\tif ( ( context.ownerDocument || context ) !== document ) {\r\n\t\tsetDocument( context );\r\n\t}\r\n\treturn contains( context, elem );\r\n};\r\n\r\nSizzle.attr = function( elem, name ) {\r\n\t// Set document vars if needed\r\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\r\n\t\tsetDocument( elem );\r\n\t}\r\n\r\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\r\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\r\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\r\n\t\t\tfn( elem, name, !documentIsHTML ) :\r\n\t\t\tundefined;\r\n\r\n\treturn val !== undefined ?\r\n\t\tval :\r\n\t\tsupport.attributes || !documentIsHTML ?\r\n\t\t\telem.getAttribute( name ) :\r\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\r\n\t\t\t\tval.value :\r\n\t\t\t\tnull;\r\n};\r\n\r\nSizzle.error = function( msg ) {\r\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\r\n};\r\n\r\n/**\r\n * Document sorting and removing duplicates\r\n * @param {ArrayLike} results\r\n */\r\nSizzle.uniqueSort = function( results ) {\r\n\tvar elem,\r\n\t\tduplicates = [],\r\n\t\tj = 0,\r\n\t\ti = 0;\r\n\r\n\t// Unless we *know* we can detect duplicates, assume their presence\r\n\thasDuplicate = !support.detectDuplicates;\r\n\tsortInput = !support.sortStable && results.slice( 0 );\r\n\tresults.sort( sortOrder );\r\n\r\n\tif ( hasDuplicate ) {\r\n\t\twhile ( (elem = results[i++]) ) {\r\n\t\t\tif ( elem === results[ i ] ) {\r\n\t\t\t\tj = duplicates.push( i );\r\n\t\t\t}\r\n\t\t}\r\n\t\twhile ( j-- ) {\r\n\t\t\tresults.splice( duplicates[ j ], 1 );\r\n\t\t}\r\n\t}\r\n\r\n\t// Clear input after sorting to release objects\r\n\t// See https://github.com/jquery/sizzle/pull/225\r\n\tsortInput = null;\r\n\r\n\treturn results;\r\n};\r\n\r\n/**\r\n * Utility function for retrieving the text value of an array of DOM nodes\r\n * @param {Array|Element} elem\r\n */\r\ngetText = Sizzle.getText = function( elem ) {\r\n\tvar node,\r\n\t\tret = \"\",\r\n\t\ti = 0,\r\n\t\tnodeType = elem.nodeType;\r\n\r\n\tif ( !nodeType ) {\r\n\t\t// If no nodeType, this is expected to be an array\r\n\t\twhile ( (node = elem[i++]) ) {\r\n\t\t\t// Do not traverse comment nodes\r\n\t\t\tret += getText( node );\r\n\t\t}\r\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\r\n\t\t// Use textContent for elements\r\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\r\n\t\tif ( typeof elem.textContent === \"string\" ) {\r\n\t\t\treturn elem.textContent;\r\n\t\t} else {\r\n\t\t\t// Traverse its children\r\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\r\n\t\t\t\tret += getText( elem );\r\n\t\t\t}\r\n\t\t}\r\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\r\n\t\treturn elem.nodeValue;\r\n\t}\r\n\t// Do not include comment or processing instruction nodes\r\n\r\n\treturn ret;\r\n};\r\n\r\nExpr = Sizzle.selectors = {\r\n\r\n\t// Can be adjusted by the user\r\n\tcacheLength: 50,\r\n\r\n\tcreatePseudo: markFunction,\r\n\r\n\tmatch: matchExpr,\r\n\r\n\tattrHandle: {},\r\n\r\n\tfind: {},\r\n\r\n\trelative: {\r\n\t\t\">\": { dir: \"parentNode\", first: true },\r\n\t\t\" \": { dir: \"parentNode\" },\r\n\t\t\"+\": { dir: \"previousSibling\", first: true },\r\n\t\t\"~\": { dir: \"previousSibling\" }\r\n\t},\r\n\r\n\tpreFilter: {\r\n\t\t\"ATTR\": function( match ) {\r\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\r\n\r\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\r\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\r\n\r\n\t\t\tif ( match[2] === \"~=\" ) {\r\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\r\n\t\t\t}\r\n\r\n\t\t\treturn match.slice( 0, 4 );\r\n\t\t},\r\n\r\n\t\t\"CHILD\": function( match ) {\r\n\t\t\t/* matches from matchExpr[\"CHILD\"]\r\n\t\t\t\t1 type (only|nth|...)\r\n\t\t\t\t2 what (child|of-type)\r\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\r\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\r\n\t\t\t\t5 sign of xn-component\r\n\t\t\t\t6 x of xn-component\r\n\t\t\t\t7 sign of y-component\r\n\t\t\t\t8 y of y-component\r\n\t\t\t*/\r\n\t\t\tmatch[1] = match[1].toLowerCase();\r\n\r\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\r\n\t\t\t\t// nth-* requires argument\r\n\t\t\t\tif ( !match[3] ) {\r\n\t\t\t\t\tSizzle.error( match[0] );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\r\n\t\t\t\t// remember that false/true cast respectively to 0/1\r\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\r\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\r\n\r\n\t\t\t// other types prohibit arguments\r\n\t\t\t} else if ( match[3] ) {\r\n\t\t\t\tSizzle.error( match[0] );\r\n\t\t\t}\r\n\r\n\t\t\treturn match;\r\n\t\t},\r\n\r\n\t\t\"PSEUDO\": function( match ) {\r\n\t\t\tvar excess,\r\n\t\t\t\tunquoted = !match[6] && match[2];\r\n\r\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\t// Accept quoted arguments as-is\r\n\t\t\tif ( match[3] ) {\r\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\r\n\r\n\t\t\t// Strip excess characters from unquoted arguments\r\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\r\n\t\t\t\t// Get excess from tokenize (recursively)\r\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\r\n\t\t\t\t// advance to the next closing parenthesis\r\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\r\n\r\n\t\t\t\t// excess is a negative index\r\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\r\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\r\n\t\t\t}\r\n\r\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\r\n\t\t\treturn match.slice( 0, 3 );\r\n\t\t}\r\n\t},\r\n\r\n\tfilter: {\r\n\r\n\t\t\"TAG\": function( nodeNameSelector ) {\r\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\r\n\t\t\treturn nodeNameSelector === \"*\" ?\r\n\t\t\t\tfunction() { return true; } :\r\n\t\t\t\tfunction( elem ) {\r\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\r\n\t\t\t\t};\r\n\t\t},\r\n\r\n\t\t\"CLASS\": function( className ) {\r\n\t\t\tvar pattern = classCache[ className + \" \" ];\r\n\r\n\t\t\treturn pattern ||\r\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\r\n\t\t\t\tclassCache( className, function( elem ) {\r\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\r\n\t\t\t\t});\r\n\t\t},\r\n\r\n\t\t\"ATTR\": function( name, operator, check ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\tvar result = Sizzle.attr( elem, name );\r\n\r\n\t\t\t\tif ( result == null ) {\r\n\t\t\t\t\treturn operator === \"!=\";\r\n\t\t\t\t}\r\n\t\t\t\tif ( !operator ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresult += \"\";\r\n\r\n\t\t\t\treturn operator === \"=\" ? result === check :\r\n\t\t\t\t\toperator === \"!=\" ? result !== check :\r\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\r\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\r\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\r\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\r\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\r\n\t\t\t\t\tfalse;\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\r\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\r\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\r\n\t\t\t\tofType = what === \"of-type\";\r\n\r\n\t\t\treturn first === 1 && last === 0 ?\r\n\r\n\t\t\t\t// Shortcut for :nth-*(n)\r\n\t\t\t\tfunction( elem ) {\r\n\t\t\t\t\treturn !!elem.parentNode;\r\n\t\t\t\t} :\r\n\r\n\t\t\t\tfunction( elem, context, xml ) {\r\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\r\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\r\n\t\t\t\t\t\tparent = elem.parentNode,\r\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\r\n\t\t\t\t\t\tuseCache = !xml && !ofType,\r\n\t\t\t\t\t\tdiff = false;\r\n\r\n\t\t\t\t\tif ( parent ) {\r\n\r\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\r\n\t\t\t\t\t\tif ( simple ) {\r\n\t\t\t\t\t\t\twhile ( dir ) {\r\n\t\t\t\t\t\t\t\tnode = elem;\r\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\r\n\t\t\t\t\t\t\t\t\tif ( ofType ?\r\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\r\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\r\n\r\n\t\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\r\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\r\n\r\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\r\n\t\t\t\t\t\tif ( forward && useCache ) {\r\n\r\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\r\n\r\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\r\n\t\t\t\t\t\t\tnode = parent;\r\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\r\n\r\n\t\t\t\t\t\t\t// Support: IE <9 only\r\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\r\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\r\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\r\n\r\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\r\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\r\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\r\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\r\n\r\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\r\n\r\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\r\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\r\n\r\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\r\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\r\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Use previously-cached element index if available\r\n\t\t\t\t\t\t\tif ( useCache ) {\r\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\r\n\t\t\t\t\t\t\t\tnode = elem;\r\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\r\n\r\n\t\t\t\t\t\t\t\t// Support: IE <9 only\r\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\r\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\r\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\r\n\r\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\r\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\r\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t// xml :nth-child(...)\r\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\r\n\t\t\t\t\t\t\tif ( diff === false ) {\r\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\r\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\r\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\r\n\r\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\r\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\r\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\r\n\t\t\t\t\t\t\t\t\t\t++diff ) {\r\n\r\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\r\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\r\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\r\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\r\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\r\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\r\n\t\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\r\n\t\t\t\t\t\tdiff -= last;\r\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t},\r\n\r\n\t\t\"PSEUDO\": function( pseudo, argument ) {\r\n\t\t\t// pseudo-class names are case-insensitive\r\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\r\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\r\n\t\t\t// Remember that setFilters inherits from pseudos\r\n\t\t\tvar args,\r\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\r\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\r\n\r\n\t\t\t// The user may use createPseudo to indicate that\r\n\t\t\t// arguments are needed to create the filter function\r\n\t\t\t// just as Sizzle does\r\n\t\t\tif ( fn[ expando ] ) {\r\n\t\t\t\treturn fn( argument );\r\n\t\t\t}\r\n\r\n\t\t\t// But maintain support for old signatures\r\n\t\t\tif ( fn.length > 1 ) {\r\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\r\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\r\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\r\n\t\t\t\t\t\tvar idx,\r\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\r\n\t\t\t\t\t\t\ti = matched.length;\r\n\t\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\r\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}) :\r\n\t\t\t\t\tfunction( elem ) {\r\n\t\t\t\t\t\treturn fn( elem, 0, args );\r\n\t\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\treturn fn;\r\n\t\t}\r\n\t},\r\n\r\n\tpseudos: {\r\n\t\t// Potentially complex pseudos\r\n\t\t\"not\": markFunction(function( selector ) {\r\n\t\t\t// Trim the selector passed to compile\r\n\t\t\t// to avoid treating leading and trailing\r\n\t\t\t// spaces as combinators\r\n\t\t\tvar input = [],\r\n\t\t\t\tresults = [],\r\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\r\n\r\n\t\t\treturn matcher[ expando ] ?\r\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\r\n\t\t\t\t\tvar elem,\r\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\r\n\t\t\t\t\t\ti = seed.length;\r\n\r\n\t\t\t\t\t// Match elements unmatched by `matcher`\r\n\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\r\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}) :\r\n\t\t\t\tfunction( elem, context, xml ) {\r\n\t\t\t\t\tinput[0] = elem;\r\n\t\t\t\t\tmatcher( input, null, xml, results );\r\n\t\t\t\t\t// Don't keep the element (issue #299)\r\n\t\t\t\t\tinput[0] = null;\r\n\t\t\t\t\treturn !results.pop();\r\n\t\t\t\t};\r\n\t\t}),\r\n\r\n\t\t\"has\": markFunction(function( selector ) {\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\r\n\t\t\t};\r\n\t\t}),\r\n\r\n\t\t\"contains\": markFunction(function( text ) {\r\n\t\t\ttext = text.replace( runescape, funescape );\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\r\n\t\t\t};\r\n\t\t}),\r\n\r\n\t\t// \"Whether an element is represented by a :lang() selector\r\n\t\t// is based solely on the element's language value\r\n\t\t// being equal to the identifier C,\r\n\t\t// or beginning with the identifier C immediately followed by \"-\".\r\n\t\t// The matching of C against the element's language value is performed case-insensitively.\r\n\t\t// The identifier C does not have to be a valid language name.\"\r\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\r\n\t\t\"lang\": markFunction( function( lang ) {\r\n\t\t\t// lang value must be a valid identifier\r\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\r\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\r\n\t\t\t}\r\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\r\n\t\t\treturn function( elem ) {\r\n\t\t\t\tvar elemLang;\r\n\t\t\t\tdo {\r\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\r\n\t\t\t\t\t\telem.lang :\r\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\r\n\r\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\r\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\t\t}),\r\n\r\n\t\t// Miscellaneous\r\n\t\t\"target\": function( elem ) {\r\n\t\t\tvar hash = window.location && window.location.hash;\r\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\r\n\t\t},\r\n\r\n\t\t\"root\": function( elem ) {\r\n\t\t\treturn elem === docElem;\r\n\t\t},\r\n\r\n\t\t\"focus\": function( elem ) {\r\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\r\n\t\t},\r\n\r\n\t\t// Boolean properties\r\n\t\t\"enabled\": function( elem ) {\r\n\t\t\treturn elem.disabled === false;\r\n\t\t},\r\n\r\n\t\t\"disabled\": function( elem ) {\r\n\t\t\treturn elem.disabled === true;\r\n\t\t},\r\n\r\n\t\t\"checked\": function( elem ) {\r\n\t\t\t// In CSS3, :checked should return both checked and selected elements\r\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\r\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\r\n\t\t},\r\n\r\n\t\t\"selected\": function( elem ) {\r\n\t\t\t// Accessing this property makes selected-by-default\r\n\t\t\t// options in Safari work properly\r\n\t\t\tif ( elem.parentNode ) {\r\n\t\t\t\telem.parentNode.selectedIndex;\r\n\t\t\t}\r\n\r\n\t\t\treturn elem.selected === true;\r\n\t\t},\r\n\r\n\t\t// Contents\r\n\t\t\"empty\": function( elem ) {\r\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\r\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\r\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\r\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\r\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\r\n\t\t\t\tif ( elem.nodeType < 6 ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\r\n\t\t\"parent\": function( elem ) {\r\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\r\n\t\t},\r\n\r\n\t\t// Element/input types\r\n\t\t\"header\": function( elem ) {\r\n\t\t\treturn rheader.test( elem.nodeName );\r\n\t\t},\r\n\r\n\t\t\"input\": function( elem ) {\r\n\t\t\treturn rinputs.test( elem.nodeName );\r\n\t\t},\r\n\r\n\t\t\"button\": function( elem ) {\r\n\t\t\tvar name = elem.nodeName.toLowerCase();\r\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\r\n\t\t},\r\n\r\n\t\t\"text\": function( elem ) {\r\n\t\t\tvar attr;\r\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\r\n\t\t\t\telem.type === \"text\" &&\r\n\r\n\t\t\t\t// Support: IE<8\r\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\r\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\r\n\t\t},\r\n\r\n\t\t// Position-in-collection\r\n\t\t\"first\": createPositionalPseudo(function() {\r\n\t\t\treturn [ 0 ];\r\n\t\t}),\r\n\r\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\r\n\t\t\treturn [ length - 1 ];\r\n\t\t}),\r\n\r\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\r\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\r\n\t\t}),\r\n\r\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\r\n\t\t\tvar i = 0;\r\n\t\t\tfor ( ; i < length; i += 2 ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t}),\r\n\r\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\r\n\t\t\tvar i = 1;\r\n\t\t\tfor ( ; i < length; i += 2 ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t}),\r\n\r\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\r\n\t\t\tvar i = argument < 0 ? argument + length : argument;\r\n\t\t\tfor ( ; --i >= 0; ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t}),\r\n\r\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\r\n\t\t\tvar i = argument < 0 ? argument + length : argument;\r\n\t\t\tfor ( ; ++i < length; ) {\r\n\t\t\t\tmatchIndexes.push( i );\r\n\t\t\t}\r\n\t\t\treturn matchIndexes;\r\n\t\t})\r\n\t}\r\n};\r\n\r\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\r\n\r\n// Add button/input type pseudos\r\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\r\n\tExpr.pseudos[ i ] = createInputPseudo( i );\r\n}\r\nfor ( i in { submit: true, reset: true } ) {\r\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\r\n}\r\n\r\n// Easy API for creating new setFilters\r\nfunction setFilters() {}\r\nsetFilters.prototype = Expr.filters = Expr.pseudos;\r\nExpr.setFilters = new setFilters();\r\n\r\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\r\n\tvar matched, match, tokens, type,\r\n\t\tsoFar, groups, preFilters,\r\n\t\tcached = tokenCache[ selector + \" \" ];\r\n\r\n\tif ( cached ) {\r\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\r\n\t}\r\n\r\n\tsoFar = selector;\r\n\tgroups = [];\r\n\tpreFilters = Expr.preFilter;\r\n\r\n\twhile ( soFar ) {\r\n\r\n\t\t// Comma and first run\r\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\r\n\t\t\tif ( match ) {\r\n\t\t\t\t// Don't consume trailing commas as valid\r\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\r\n\t\t\t}\r\n\t\t\tgroups.push( (tokens = []) );\r\n\t\t}\r\n\r\n\t\tmatched = false;\r\n\r\n\t\t// Combinators\r\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\r\n\t\t\tmatched = match.shift();\r\n\t\t\ttokens.push({\r\n\t\t\t\tvalue: matched,\r\n\t\t\t\t// Cast descendant combinators to space\r\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\r\n\t\t\t});\r\n\t\t\tsoFar = soFar.slice( matched.length );\r\n\t\t}\r\n\r\n\t\t// Filters\r\n\t\tfor ( type in Expr.filter ) {\r\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\r\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\r\n\t\t\t\tmatched = match.shift();\r\n\t\t\t\ttokens.push({\r\n\t\t\t\t\tvalue: matched,\r\n\t\t\t\t\ttype: type,\r\n\t\t\t\t\tmatches: match\r\n\t\t\t\t});\r\n\t\t\t\tsoFar = soFar.slice( matched.length );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( !matched ) {\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t// Return the length of the invalid excess\r\n\t// if we're just parsing\r\n\t// Otherwise, throw an error or return tokens\r\n\treturn parseOnly ?\r\n\t\tsoFar.length :\r\n\t\tsoFar ?\r\n\t\t\tSizzle.error( selector ) :\r\n\t\t\t// Cache the tokens\r\n\t\t\ttokenCache( selector, groups ).slice( 0 );\r\n};\r\n\r\nfunction toSelector( tokens ) {\r\n\tvar i = 0,\r\n\t\tlen = tokens.length,\r\n\t\tselector = \"\";\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tselector += tokens[i].value;\r\n\t}\r\n\treturn selector;\r\n}\r\n\r\nfunction addCombinator( matcher, combinator, base ) {\r\n\tvar dir = combinator.dir,\r\n\t\tcheckNonElements = base && dir === \"parentNode\",\r\n\t\tdoneName = done++;\r\n\r\n\treturn combinator.first ?\r\n\t\t// Check against closest ancestor/preceding element\r\n\t\tfunction( elem, context, xml ) {\r\n\t\t\twhile ( (elem = elem[ dir ]) ) {\r\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\r\n\t\t\t\t\treturn matcher( elem, context, xml );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} :\r\n\r\n\t\t// Check against all ancestor/preceding elements\r\n\t\tfunction( elem, context, xml ) {\r\n\t\t\tvar oldCache, uniqueCache, outerCache,\r\n\t\t\t\tnewCache = [ dirruns, doneName ];\r\n\r\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\r\n\t\t\tif ( xml ) {\r\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\r\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\r\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\r\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\r\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\r\n\r\n\t\t\t\t\t\t// Support: IE <9 only\r\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\r\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\r\n\r\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\r\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\r\n\r\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\r\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\r\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\r\n\r\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\r\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\r\n\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n}\r\n\r\nfunction elementMatcher( matchers ) {\r\n\treturn matchers.length > 1 ?\r\n\t\tfunction( elem, context, xml ) {\r\n\t\t\tvar i = matchers.length;\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t} :\r\n\t\tmatchers[0];\r\n}\r\n\r\nfunction multipleContexts( selector, contexts, results ) {\r\n\tvar i = 0,\r\n\t\tlen = contexts.length;\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tSizzle( selector, contexts[i], results );\r\n\t}\r\n\treturn results;\r\n}\r\n\r\nfunction condense( unmatched, map, filter, context, xml ) {\r\n\tvar elem,\r\n\t\tnewUnmatched = [],\r\n\t\ti = 0,\r\n\t\tlen = unmatched.length,\r\n\t\tmapped = map != null;\r\n\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tif ( (elem = unmatched[i]) ) {\r\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\r\n\t\t\t\tnewUnmatched.push( elem );\r\n\t\t\t\tif ( mapped ) {\r\n\t\t\t\t\tmap.push( i );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn newUnmatched;\r\n}\r\n\r\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\r\n\tif ( postFilter && !postFilter[ expando ] ) {\r\n\t\tpostFilter = setMatcher( postFilter );\r\n\t}\r\n\tif ( postFinder && !postFinder[ expando ] ) {\r\n\t\tpostFinder = setMatcher( postFinder, postSelector );\r\n\t}\r\n\treturn markFunction(function( seed, results, context, xml ) {\r\n\t\tvar temp, i, elem,\r\n\t\t\tpreMap = [],\r\n\t\t\tpostMap = [],\r\n\t\t\tpreexisting = results.length,\r\n\r\n\t\t\t// Get initial elements from seed or context\r\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\r\n\r\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\r\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\r\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\r\n\t\t\t\telems,\r\n\r\n\t\t\tmatcherOut = matcher ?\r\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\r\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\r\n\r\n\t\t\t\t\t// ...intermediate processing is necessary\r\n\t\t\t\t\t[] :\r\n\r\n\t\t\t\t\t// ...otherwise use results directly\r\n\t\t\t\t\tresults :\r\n\t\t\t\tmatcherIn;\r\n\r\n\t\t// Find primary matches\r\n\t\tif ( matcher ) {\r\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\r\n\t\t}\r\n\r\n\t\t// Apply postFilter\r\n\t\tif ( postFilter ) {\r\n\t\t\ttemp = condense( matcherOut, postMap );\r\n\t\t\tpostFilter( temp, [], context, xml );\r\n\r\n\t\t\t// Un-match failing elements by moving them back to matcherIn\r\n\t\t\ti = temp.length;\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tif ( (elem = temp[i]) ) {\r\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( seed ) {\r\n\t\t\tif ( postFinder || preFilter ) {\r\n\t\t\t\tif ( postFinder ) {\r\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\r\n\t\t\t\t\ttemp = [];\r\n\t\t\t\t\ti = matcherOut.length;\r\n\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\r\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\r\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\r\n\t\t\t\ti = matcherOut.length;\r\n\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\r\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\r\n\r\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// Add elements to results, through postFinder if defined\r\n\t\t} else {\r\n\t\t\tmatcherOut = condense(\r\n\t\t\t\tmatcherOut === results ?\r\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\r\n\t\t\t\t\tmatcherOut\r\n\t\t\t);\r\n\t\t\tif ( postFinder ) {\r\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\r\n\t\t\t} else {\r\n\t\t\t\tpush.apply( results, matcherOut );\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction matcherFromTokens( tokens ) {\r\n\tvar checkContext, matcher, j,\r\n\t\tlen = tokens.length,\r\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\r\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\r\n\t\ti = leadingRelative ? 1 : 0,\r\n\r\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\r\n\t\tmatchContext = addCombinator( function( elem ) {\r\n\t\t\treturn elem === checkContext;\r\n\t\t}, implicitRelative, true ),\r\n\t\tmatchAnyContext = addCombinator( function( elem ) {\r\n\t\t\treturn indexOf( checkContext, elem ) > -1;\r\n\t\t}, implicitRelative, true ),\r\n\t\tmatchers = [ function( elem, context, xml ) {\r\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\r\n\t\t\t\t(checkContext = context).nodeType ?\r\n\t\t\t\t\tmatchContext( elem, context, xml ) :\r\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\r\n\t\t\t// Avoid hanging onto element (issue #299)\r\n\t\t\tcheckContext = null;\r\n\t\t\treturn ret;\r\n\t\t} ];\r\n\r\n\tfor ( ; i < len; i++ ) {\r\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\r\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\r\n\t\t} else {\r\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\r\n\r\n\t\t\t// Return special upon seeing a positional matcher\r\n\t\t\tif ( matcher[ expando ] ) {\r\n\t\t\t\t// Find the next relative operator (if any) for proper handling\r\n\t\t\t\tj = ++i;\r\n\t\t\t\tfor ( ; j < len; j++ ) {\r\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn setMatcher(\r\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\r\n\t\t\t\t\ti > 1 && toSelector(\r\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\r\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\r\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\r\n\t\t\t\t\tmatcher,\r\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\r\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\r\n\t\t\t\t\tj < len && toSelector( tokens )\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t\tmatchers.push( matcher );\r\n\t\t}\r\n\t}\r\n\r\n\treturn elementMatcher( matchers );\r\n}\r\n\r\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\r\n\tvar bySet = setMatchers.length > 0,\r\n\t\tbyElement = elementMatchers.length > 0,\r\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\r\n\t\t\tvar elem, j, matcher,\r\n\t\t\t\tmatchedCount = 0,\r\n\t\t\t\ti = \"0\",\r\n\t\t\t\tunmatched = seed && [],\r\n\t\t\t\tsetMatched = [],\r\n\t\t\t\tcontextBackup = outermostContext,\r\n\t\t\t\t// We must always have either seed elements or outermost context\r\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\r\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\r\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\r\n\t\t\t\tlen = elems.length;\r\n\r\n\t\t\tif ( outermost ) {\r\n\t\t\t\toutermostContext = context === document || context || outermost;\r\n\t\t\t}\r\n\r\n\t\t\t// Add elements passing elementMatchers directly to results\r\n\t\t\t// Support: IE<9, Safari\r\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\r\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\r\n\t\t\t\tif ( byElement && elem ) {\r\n\t\t\t\t\tj = 0;\r\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\r\n\t\t\t\t\t\tsetDocument( elem );\r\n\t\t\t\t\t\txml = !documentIsHTML;\r\n\t\t\t\t\t}\r\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\r\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\r\n\t\t\t\t\t\t\tresults.push( elem );\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( outermost ) {\r\n\t\t\t\t\t\tdirruns = dirrunsUnique;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Track unmatched elements for set filters\r\n\t\t\t\tif ( bySet ) {\r\n\t\t\t\t\t// They will have gone through all possible matchers\r\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\r\n\t\t\t\t\t\tmatchedCount--;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Lengthen the array for every element, matched or not\r\n\t\t\t\t\tif ( seed ) {\r\n\t\t\t\t\t\tunmatched.push( elem );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\r\n\t\t\t// makes the latter nonnegative.\r\n\t\t\tmatchedCount += i;\r\n\r\n\t\t\t// Apply set filters to unmatched elements\r\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\r\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\r\n\t\t\t// no element matchers and no seed.\r\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\r\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\r\n\t\t\t// numerically zero.\r\n\t\t\tif ( bySet && i !== matchedCount ) {\r\n\t\t\t\tj = 0;\r\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\r\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif ( seed ) {\r\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\r\n\t\t\t\t\tif ( matchedCount > 0 ) {\r\n\t\t\t\t\t\twhile ( i-- ) {\r\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\r\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\r\n\t\t\t\t\tsetMatched = condense( setMatched );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Add matches to results\r\n\t\t\t\tpush.apply( results, setMatched );\r\n\r\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\r\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\r\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\r\n\r\n\t\t\t\t\tSizzle.uniqueSort( results );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Override manipulation of globals by nested matchers\r\n\t\t\tif ( outermost ) {\r\n\t\t\t\tdirruns = dirrunsUnique;\r\n\t\t\t\toutermostContext = contextBackup;\r\n\t\t\t}\r\n\r\n\t\t\treturn unmatched;\r\n\t\t};\r\n\r\n\treturn bySet ?\r\n\t\tmarkFunction( superMatcher ) :\r\n\t\tsuperMatcher;\r\n}\r\n\r\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\r\n\tvar i,\r\n\t\tsetMatchers = [],\r\n\t\telementMatchers = [],\r\n\t\tcached = compilerCache[ selector + \" \" ];\r\n\r\n\tif ( !cached ) {\r\n\t\t// Generate a function of recursive functions that can be used to check each element\r\n\t\tif ( !match ) {\r\n\t\t\tmatch = tokenize( selector );\r\n\t\t}\r\n\t\ti = match.length;\r\n\t\twhile ( i-- ) {\r\n\t\t\tcached = matcherFromTokens( match[i] );\r\n\t\t\tif ( cached[ expando ] ) {\r\n\t\t\t\tsetMatchers.push( cached );\r\n\t\t\t} else {\r\n\t\t\t\telementMatchers.push( cached );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Cache the compiled function\r\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\r\n\r\n\t\t// Save selector and tokenization\r\n\t\tcached.selector = selector;\r\n\t}\r\n\treturn cached;\r\n};\r\n\r\n/**\r\n * A low-level selection function that works with Sizzle's compiled\r\n * selector functions\r\n * @param {String|Function} selector A selector or a pre-compiled\r\n * selector function built with Sizzle.compile\r\n * @param {Element} context\r\n * @param {Array} [results]\r\n * @param {Array} [seed] A set of elements to match against\r\n */\r\nselect = Sizzle.select = function( selector, context, results, seed ) {\r\n\tvar i, tokens, token, type, find,\r\n\t\tcompiled = typeof selector === \"function\" && selector,\r\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\r\n\r\n\tresults = results || [];\r\n\r\n\t// Try to minimize operations if there is only one selector in the list and no seed\r\n\t// (the latter of which guarantees us context)\r\n\tif ( match.length === 1 ) {\r\n\r\n\t\t// Reduce context if the leading compound selector is an ID\r\n\t\ttokens = match[0] = match[0].slice( 0 );\r\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\r\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\r\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\r\n\r\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\r\n\t\t\tif ( !context ) {\r\n\t\t\t\treturn results;\r\n\r\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\r\n\t\t\t} else if ( compiled ) {\r\n\t\t\t\tcontext = context.parentNode;\r\n\t\t\t}\r\n\r\n\t\t\tselector = selector.slice( tokens.shift().value.length );\r\n\t\t}\r\n\r\n\t\t// Fetch a seed set for right-to-left matching\r\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\r\n\t\twhile ( i-- ) {\r\n\t\t\ttoken = tokens[i];\r\n\r\n\t\t\t// Abort if we hit a combinator\r\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif ( (find = Expr.find[ type ]) ) {\r\n\t\t\t\t// Search, expanding context for leading sibling combinators\r\n\t\t\t\tif ( (seed = find(\r\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\r\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\r\n\t\t\t\t)) ) {\r\n\r\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\r\n\t\t\t\t\ttokens.splice( i, 1 );\r\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\r\n\t\t\t\t\tif ( !selector ) {\r\n\t\t\t\t\t\tpush.apply( results, seed );\r\n\t\t\t\t\t\treturn results;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Compile and execute a filtering function if one is not provided\r\n\t// Provide `match` to avoid retokenization if we modified the selector above\r\n\t( compiled || compile( selector, match ) )(\r\n\t\tseed,\r\n\t\tcontext,\r\n\t\t!documentIsHTML,\r\n\t\tresults,\r\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\r\n\t);\r\n\treturn results;\r\n};\r\n\r\n// One-time assignments\r\n\r\n// Sort stability\r\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\r\n\r\n// Support: Chrome 14-35+\r\n// Always assume duplicates if they aren't passed to the comparison function\r\nsupport.detectDuplicates = !!hasDuplicate;\r\n\r\n// Initialize against the default document\r\nsetDocument();\r\n\r\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\r\n// Detached nodes confoundingly follow *each other*\r\nsupport.sortDetached = assert(function( div1 ) {\r\n\t// Should return 1, but returns 4 (following)\r\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\r\n});\r\n\r\n// Support: IE<8\r\n// Prevent attribute/property \"interpolation\"\r\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\r\nif ( !assert(function( div ) {\r\n\tdiv.innerHTML = \"\";\r\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\r\n}) ) {\r\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\r\n\t\tif ( !isXML ) {\r\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// Support: IE<9\r\n// Use defaultValue in place of getAttribute(\"value\")\r\nif ( !support.attributes || !assert(function( div ) {\r\n\tdiv.innerHTML = \"\";\r\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\r\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\r\n}) ) {\r\n\taddHandle( \"value\", function( elem, name, isXML ) {\r\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\r\n\t\t\treturn elem.defaultValue;\r\n\t\t}\r\n\t});\r\n}\r\n\r\n// Support: IE<9\r\n// Use getAttributeNode to fetch booleans when getAttribute lies\r\nif ( !assert(function( div ) {\r\n\treturn div.getAttribute(\"disabled\") == null;\r\n}) ) {\r\n\taddHandle( booleans, function( elem, name, isXML ) {\r\n\t\tvar val;\r\n\t\tif ( !isXML ) {\r\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\r\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\r\n\t\t\t\t\tval.value :\r\n\t\t\t\tnull;\r\n\t\t}\r\n\t});\r\n}\r\n\r\nreturn Sizzle;\r\n\r\n})( window );\r\n\r\n\r\n\r\njQuery.find = Sizzle;\r\njQuery.expr = Sizzle.selectors;\r\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\r\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\r\njQuery.text = Sizzle.getText;\r\njQuery.isXMLDoc = Sizzle.isXML;\r\njQuery.contains = Sizzle.contains;\r\n\r\n\r\n\r\nvar dir = function( elem, dir, until ) {\r\n\tvar matched = [],\r\n\t\ttruncate = until !== undefined;\r\n\r\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\r\n\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tmatched.push( elem );\r\n\t\t}\r\n\t}\r\n\treturn matched;\r\n};\r\n\r\n\r\nvar siblings = function( n, elem ) {\r\n\tvar matched = [];\r\n\r\n\tfor ( ; n; n = n.nextSibling ) {\r\n\t\tif ( n.nodeType === 1 && n !== elem ) {\r\n\t\t\tmatched.push( n );\r\n\t\t}\r\n\t}\r\n\r\n\treturn matched;\r\n};\r\n\r\n\r\nvar rneedsContext = jQuery.expr.match.needsContext;\r\n\r\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\r\n\r\n\r\n\r\nvar risSimple = /^.[^:#\\[\\.,]*$/;\r\n\r\n// Implement the identical functionality for filter and not\r\nfunction winnow( elements, qualifier, not ) {\r\n\tif ( jQuery.isFunction( qualifier ) ) {\r\n\t\treturn jQuery.grep( elements, function( elem, i ) {\r\n\t\t\t/* jshint -W018 */\r\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\r\n\t\t} );\r\n\r\n\t}\r\n\r\n\tif ( qualifier.nodeType ) {\r\n\t\treturn jQuery.grep( elements, function( elem ) {\r\n\t\t\treturn ( elem === qualifier ) !== not;\r\n\t\t} );\r\n\r\n\t}\r\n\r\n\tif ( typeof qualifier === \"string\" ) {\r\n\t\tif ( risSimple.test( qualifier ) ) {\r\n\t\t\treturn jQuery.filter( qualifier, elements, not );\r\n\t\t}\r\n\r\n\t\tqualifier = jQuery.filter( qualifier, elements );\r\n\t}\r\n\r\n\treturn jQuery.grep( elements, function( elem ) {\r\n\t\treturn ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;\r\n\t} );\r\n}\r\n\r\njQuery.filter = function( expr, elems, not ) {\r\n\tvar elem = elems[ 0 ];\r\n\r\n\tif ( not ) {\r\n\t\texpr = \":not(\" + expr + \")\";\r\n\t}\r\n\r\n\treturn elems.length === 1 && elem.nodeType === 1 ?\r\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\r\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\r\n\t\t\treturn elem.nodeType === 1;\r\n\t\t} ) );\r\n};\r\n\r\njQuery.fn.extend( {\r\n\tfind: function( selector ) {\r\n\t\tvar i,\r\n\t\t\tret = [],\r\n\t\t\tself = this,\r\n\t\t\tlen = self.length;\r\n\r\n\t\tif ( typeof selector !== \"string\" ) {\r\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\r\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} ) );\r\n\t\t}\r\n\r\n\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\tjQuery.find( selector, self[ i ], ret );\r\n\t\t}\r\n\r\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\r\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\r\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\r\n\t\treturn ret;\r\n\t},\r\n\tfilter: function( selector ) {\r\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\r\n\t},\r\n\tnot: function( selector ) {\r\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\r\n\t},\r\n\tis: function( selector ) {\r\n\t\treturn !!winnow(\r\n\t\t\tthis,\r\n\r\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\r\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\r\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\r\n\t\t\t\tjQuery( selector ) :\r\n\t\t\t\tselector || [],\r\n\t\t\tfalse\r\n\t\t).length;\r\n\t}\r\n} );\r\n\r\n\r\n// Initialize a jQuery object\r\n\r\n\r\n// A central reference to the root jQuery(document)\r\nvar rootjQuery,\r\n\r\n\t// A simple way to check for HTML strings\r\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\r\n\t// Strict HTML recognition (#11290: must start with <)\r\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\r\n\r\n\tinit = jQuery.fn.init = function( selector, context, root ) {\r\n\t\tvar match, elem;\r\n\r\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\r\n\t\tif ( !selector ) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\r\n\t\t// init accepts an alternate rootjQuery\r\n\t\t// so migrate can support jQuery.sub (gh-2101)\r\n\t\troot = root || rootjQuery;\r\n\r\n\t\t// Handle HTML strings\r\n\t\tif ( typeof selector === \"string\" ) {\r\n\t\t\tif ( selector.charAt( 0 ) === \"<\" &&\r\n\t\t\t\tselector.charAt( selector.length - 1 ) === \">\" &&\r\n\t\t\t\tselector.length >= 3 ) {\r\n\r\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\r\n\t\t\t\tmatch = [ null, selector, null ];\r\n\r\n\t\t\t} else {\r\n\t\t\t\tmatch = rquickExpr.exec( selector );\r\n\t\t\t}\r\n\r\n\t\t\t// Match html or make sure no context is specified for #id\r\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\r\n\r\n\t\t\t\t// HANDLE: $(html) -> $(array)\r\n\t\t\t\tif ( match[ 1 ] ) {\r\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\r\n\r\n\t\t\t\t\t// scripts is true for back-compat\r\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\r\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\r\n\t\t\t\t\t\tmatch[ 1 ],\r\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\r\n\t\t\t\t\t\ttrue\r\n\t\t\t\t\t) );\r\n\r\n\t\t\t\t\t// HANDLE: $(html, props)\r\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\r\n\t\t\t\t\t\tfor ( match in context ) {\r\n\r\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\r\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\r\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\r\n\r\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn this;\r\n\r\n\t\t\t\t// HANDLE: $(#id)\r\n\t\t\t\t} else {\r\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\r\n\r\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\r\n\t\t\t\t\t// nodes that are no longer in the document #6963\r\n\t\t\t\t\tif ( elem && elem.parentNode ) {\r\n\r\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\r\n\t\t\t\t\t\t// by name instead of ID\r\n\t\t\t\t\t\tif ( elem.id !== match[ 2 ] ) {\r\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\r\n\t\t\t\t\t\tthis.length = 1;\r\n\t\t\t\t\t\tthis[ 0 ] = elem;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.context = document;\r\n\t\t\t\t\tthis.selector = selector;\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t}\r\n\r\n\t\t\t// HANDLE: $(expr, $(...))\r\n\t\t\t} else if ( !context || context.jquery ) {\r\n\t\t\t\treturn ( context || root ).find( selector );\r\n\r\n\t\t\t// HANDLE: $(expr, context)\r\n\t\t\t// (which is just equivalent to: $(context).find(expr)\r\n\t\t\t} else {\r\n\t\t\t\treturn this.constructor( context ).find( selector );\r\n\t\t\t}\r\n\r\n\t\t// HANDLE: $(DOMElement)\r\n\t\t} else if ( selector.nodeType ) {\r\n\t\t\tthis.context = this[ 0 ] = selector;\r\n\t\t\tthis.length = 1;\r\n\t\t\treturn this;\r\n\r\n\t\t// HANDLE: $(function)\r\n\t\t// Shortcut for document ready\r\n\t\t} else if ( jQuery.isFunction( selector ) ) {\r\n\t\t\treturn typeof root.ready !== \"undefined\" ?\r\n\t\t\t\troot.ready( selector ) :\r\n\r\n\t\t\t\t// Execute immediately if ready is not present\r\n\t\t\t\tselector( jQuery );\r\n\t\t}\r\n\r\n\t\tif ( selector.selector !== undefined ) {\r\n\t\t\tthis.selector = selector.selector;\r\n\t\t\tthis.context = selector.context;\r\n\t\t}\r\n\r\n\t\treturn jQuery.makeArray( selector, this );\r\n\t};\r\n\r\n// Give the init function the jQuery prototype for later instantiation\r\ninit.prototype = jQuery.fn;\r\n\r\n// Initialize central reference\r\nrootjQuery = jQuery( document );\r\n\r\n\r\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\r\n\r\n\t// methods guaranteed to produce a unique set when starting from a unique set\r\n\tguaranteedUnique = {\r\n\t\tchildren: true,\r\n\t\tcontents: true,\r\n\t\tnext: true,\r\n\t\tprev: true\r\n\t};\r\n\r\njQuery.fn.extend( {\r\n\thas: function( target ) {\r\n\t\tvar i,\r\n\t\t\ttargets = jQuery( target, this ),\r\n\t\t\tlen = targets.length;\r\n\r\n\t\treturn this.filter( function() {\r\n\t\t\tfor ( i = 0; i < len; i++ ) {\r\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\tclosest: function( selectors, context ) {\r\n\t\tvar cur,\r\n\t\t\ti = 0,\r\n\t\t\tl = this.length,\r\n\t\t\tmatched = [],\r\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\r\n\t\t\t\tjQuery( selectors, context || this.context ) :\r\n\t\t\t\t0;\r\n\r\n\t\tfor ( ; i < l; i++ ) {\r\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\r\n\r\n\t\t\t\t// Always skip document fragments\r\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\r\n\t\t\t\t\tpos.index( cur ) > -1 :\r\n\r\n\t\t\t\t\t// Don't pass non-elements to Sizzle\r\n\t\t\t\t\tcur.nodeType === 1 &&\r\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\r\n\r\n\t\t\t\t\tmatched.push( cur );\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\r\n\t},\r\n\r\n\t// Determine the position of an element within\r\n\t// the matched set of elements\r\n\tindex: function( elem ) {\r\n\r\n\t\t// No argument, return index in parent\r\n\t\tif ( !elem ) {\r\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\r\n\t\t}\r\n\r\n\t\t// index in selector\r\n\t\tif ( typeof elem === \"string\" ) {\r\n\t\t\treturn jQuery.inArray( this[ 0 ], jQuery( elem ) );\r\n\t\t}\r\n\r\n\t\t// Locate the position of the desired element\r\n\t\treturn jQuery.inArray(\r\n\r\n\t\t\t// If it receives a jQuery object, the first element is used\r\n\t\t\telem.jquery ? elem[ 0 ] : elem, this );\r\n\t},\r\n\r\n\tadd: function( selector, context ) {\r\n\t\treturn this.pushStack(\r\n\t\t\tjQuery.uniqueSort(\r\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\r\n\t\t\t)\r\n\t\t);\r\n\t},\r\n\r\n\taddBack: function( selector ) {\r\n\t\treturn this.add( selector == null ?\r\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\r\n\t\t);\r\n\t}\r\n} );\r\n\r\nfunction sibling( cur, dir ) {\r\n\tdo {\r\n\t\tcur = cur[ dir ];\r\n\t} while ( cur && cur.nodeType !== 1 );\r\n\r\n\treturn cur;\r\n}\r\n\r\njQuery.each( {\r\n\tparent: function( elem ) {\r\n\t\tvar parent = elem.parentNode;\r\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\r\n\t},\r\n\tparents: function( elem ) {\r\n\t\treturn dir( elem, \"parentNode\" );\r\n\t},\r\n\tparentsUntil: function( elem, i, until ) {\r\n\t\treturn dir( elem, \"parentNode\", until );\r\n\t},\r\n\tnext: function( elem ) {\r\n\t\treturn sibling( elem, \"nextSibling\" );\r\n\t},\r\n\tprev: function( elem ) {\r\n\t\treturn sibling( elem, \"previousSibling\" );\r\n\t},\r\n\tnextAll: function( elem ) {\r\n\t\treturn dir( elem, \"nextSibling\" );\r\n\t},\r\n\tprevAll: function( elem ) {\r\n\t\treturn dir( elem, \"previousSibling\" );\r\n\t},\r\n\tnextUntil: function( elem, i, until ) {\r\n\t\treturn dir( elem, \"nextSibling\", until );\r\n\t},\r\n\tprevUntil: function( elem, i, until ) {\r\n\t\treturn dir( elem, \"previousSibling\", until );\r\n\t},\r\n\tsiblings: function( elem ) {\r\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\r\n\t},\r\n\tchildren: function( elem ) {\r\n\t\treturn siblings( elem.firstChild );\r\n\t},\r\n\tcontents: function( elem ) {\r\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\r\n\t\t\telem.contentDocument || elem.contentWindow.document :\r\n\t\t\tjQuery.merge( [], elem.childNodes );\r\n\t}\r\n}, function( name, fn ) {\r\n\tjQuery.fn[ name ] = function( until, selector ) {\r\n\t\tvar ret = jQuery.map( this, fn, until );\r\n\r\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\r\n\t\t\tselector = until;\r\n\t\t}\r\n\r\n\t\tif ( selector && typeof selector === \"string\" ) {\r\n\t\t\tret = jQuery.filter( selector, ret );\r\n\t\t}\r\n\r\n\t\tif ( this.length > 1 ) {\r\n\r\n\t\t\t// Remove duplicates\r\n\t\t\tif ( !guaranteedUnique[ name ] ) {\r\n\t\t\t\tret = jQuery.uniqueSort( ret );\r\n\t\t\t}\r\n\r\n\t\t\t// Reverse order for parents* and prev-derivatives\r\n\t\t\tif ( rparentsprev.test( name ) ) {\r\n\t\t\t\tret = ret.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.pushStack( ret );\r\n\t};\r\n} );\r\nvar rnotwhite = ( /\\S+/g );\r\n\r\n\r\n\r\n// Convert String-formatted options into Object-formatted ones\r\nfunction createOptions( options ) {\r\n\tvar object = {};\r\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\r\n\t\tobject[ flag ] = true;\r\n\t} );\r\n\treturn object;\r\n}\r\n\r\n/*\r\n * Create a callback list using the following parameters:\r\n *\r\n *\toptions: an optional list of space-separated options that will change how\r\n *\t\t\tthe callback list behaves or a more traditional option object\r\n *\r\n * By default a callback list will act like an event callback list and can be\r\n * \"fired\" multiple times.\r\n *\r\n * Possible options:\r\n *\r\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\r\n *\r\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\r\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\r\n *\t\t\t\t\tvalues (like a Deferred)\r\n *\r\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\r\n *\r\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\r\n *\r\n */\r\njQuery.Callbacks = function( options ) {\r\n\r\n\t// Convert options from String-formatted to Object-formatted if needed\r\n\t// (we check in cache first)\r\n\toptions = typeof options === \"string\" ?\r\n\t\tcreateOptions( options ) :\r\n\t\tjQuery.extend( {}, options );\r\n\r\n\tvar // Flag to know if list is currently firing\r\n\t\tfiring,\r\n\r\n\t\t// Last fire value for non-forgettable lists\r\n\t\tmemory,\r\n\r\n\t\t// Flag to know if list was already fired\r\n\t\tfired,\r\n\r\n\t\t// Flag to prevent firing\r\n\t\tlocked,\r\n\r\n\t\t// Actual callback list\r\n\t\tlist = [],\r\n\r\n\t\t// Queue of execution data for repeatable lists\r\n\t\tqueue = [],\r\n\r\n\t\t// Index of currently firing callback (modified by add/remove as needed)\r\n\t\tfiringIndex = -1,\r\n\r\n\t\t// Fire callbacks\r\n\t\tfire = function() {\r\n\r\n\t\t\t// Enforce single-firing\r\n\t\t\tlocked = options.once;\r\n\r\n\t\t\t// Execute callbacks for all pending executions,\r\n\t\t\t// respecting firingIndex overrides and runtime changes\r\n\t\t\tfired = firing = true;\r\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\r\n\t\t\t\tmemory = queue.shift();\r\n\t\t\t\twhile ( ++firingIndex < list.length ) {\r\n\r\n\t\t\t\t\t// Run callback and check for early termination\r\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\r\n\t\t\t\t\t\toptions.stopOnFalse ) {\r\n\r\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\r\n\t\t\t\t\t\tfiringIndex = list.length;\r\n\t\t\t\t\t\tmemory = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Forget the data if we're done with it\r\n\t\t\tif ( !options.memory ) {\r\n\t\t\t\tmemory = false;\r\n\t\t\t}\r\n\r\n\t\t\tfiring = false;\r\n\r\n\t\t\t// Clean up if we're done firing for good\r\n\t\t\tif ( locked ) {\r\n\r\n\t\t\t\t// Keep an empty list if we have data for future add calls\r\n\t\t\t\tif ( memory ) {\r\n\t\t\t\t\tlist = [];\r\n\r\n\t\t\t\t// Otherwise, this object is spent\r\n\t\t\t\t} else {\r\n\t\t\t\t\tlist = \"\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Actual Callbacks object\r\n\t\tself = {\r\n\r\n\t\t\t// Add a callback or a collection of callbacks to the list\r\n\t\t\tadd: function() {\r\n\t\t\t\tif ( list ) {\r\n\r\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\r\n\t\t\t\t\tif ( memory && !firing ) {\r\n\t\t\t\t\t\tfiringIndex = list.length - 1;\r\n\t\t\t\t\t\tqueue.push( memory );\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t( function add( args ) {\r\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\r\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\r\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\r\n\t\t\t\t\t\t\t\t\tlist.push( arg );\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\r\n\r\n\t\t\t\t\t\t\t\t// Inspect recursively\r\n\t\t\t\t\t\t\t\tadd( arg );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} );\r\n\t\t\t\t\t} )( arguments );\r\n\r\n\t\t\t\t\tif ( memory && !firing ) {\r\n\t\t\t\t\t\tfire();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\t// Remove a callback from the list\r\n\t\t\tremove: function() {\r\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\r\n\t\t\t\t\tvar index;\r\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\r\n\t\t\t\t\t\tlist.splice( index, 1 );\r\n\r\n\t\t\t\t\t\t// Handle firing indexes\r\n\t\t\t\t\t\tif ( index <= firingIndex ) {\r\n\t\t\t\t\t\t\tfiringIndex--;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} );\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\t// Check if a given callback is in the list.\r\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\r\n\t\t\thas: function( fn ) {\r\n\t\t\t\treturn fn ?\r\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\r\n\t\t\t\t\tlist.length > 0;\r\n\t\t\t},\r\n\r\n\t\t\t// Remove all callbacks from the list\r\n\t\t\tempty: function() {\r\n\t\t\t\tif ( list ) {\r\n\t\t\t\t\tlist = [];\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\t// Disable .fire and .add\r\n\t\t\t// Abort any current/pending executions\r\n\t\t\t// Clear all callbacks and values\r\n\t\t\tdisable: function() {\r\n\t\t\t\tlocked = queue = [];\r\n\t\t\t\tlist = memory = \"\";\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\tdisabled: function() {\r\n\t\t\t\treturn !list;\r\n\t\t\t},\r\n\r\n\t\t\t// Disable .fire\r\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\r\n\t\t\t// Abort any pending executions\r\n\t\t\tlock: function() {\r\n\t\t\t\tlocked = true;\r\n\t\t\t\tif ( !memory ) {\r\n\t\t\t\t\tself.disable();\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\t\t\tlocked: function() {\r\n\t\t\t\treturn !!locked;\r\n\t\t\t},\r\n\r\n\t\t\t// Call all callbacks with the given context and arguments\r\n\t\t\tfireWith: function( context, args ) {\r\n\t\t\t\tif ( !locked ) {\r\n\t\t\t\t\targs = args || [];\r\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\r\n\t\t\t\t\tqueue.push( args );\r\n\t\t\t\t\tif ( !firing ) {\r\n\t\t\t\t\t\tfire();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\t// Call all the callbacks with the given arguments\r\n\t\t\tfire: function() {\r\n\t\t\t\tself.fireWith( this, arguments );\r\n\t\t\t\treturn this;\r\n\t\t\t},\r\n\r\n\t\t\t// To know if the callbacks have already been called at least once\r\n\t\t\tfired: function() {\r\n\t\t\t\treturn !!fired;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\treturn self;\r\n};\r\n\r\n\r\njQuery.extend( {\r\n\r\n\tDeferred: function( func ) {\r\n\t\tvar tuples = [\r\n\r\n\t\t\t\t// action, add listener, listener list, final state\r\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\r\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\r\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\r\n\t\t\t],\r\n\t\t\tstate = \"pending\",\r\n\t\t\tpromise = {\r\n\t\t\t\tstate: function() {\r\n\t\t\t\t\treturn state;\r\n\t\t\t\t},\r\n\t\t\t\talways: function() {\r\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t},\r\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\r\n\t\t\t\t\tvar fns = arguments;\r\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\r\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\r\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\r\n\r\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\r\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\r\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\r\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\r\n\t\t\t\t\t\t\t\t\treturned.promise()\r\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\r\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\r\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\r\n\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\r\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\r\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t} );\r\n\t\t\t\t\t\t} );\r\n\t\t\t\t\t\tfns = null;\r\n\t\t\t\t\t} ).promise();\r\n\t\t\t\t},\r\n\r\n\t\t\t\t// Get a promise for this deferred\r\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\r\n\t\t\t\tpromise: function( obj ) {\r\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdeferred = {};\r\n\r\n\t\t// Keep pipe for back-compat\r\n\t\tpromise.pipe = promise.then;\r\n\r\n\t\t// Add list-specific methods\r\n\t\tjQuery.each( tuples, function( i, tuple ) {\r\n\t\t\tvar list = tuple[ 2 ],\r\n\t\t\t\tstateString = tuple[ 3 ];\r\n\r\n\t\t\t// promise[ done | fail | progress ] = list.add\r\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\r\n\r\n\t\t\t// Handle state\r\n\t\t\tif ( stateString ) {\r\n\t\t\t\tlist.add( function() {\r\n\r\n\t\t\t\t\t// state = [ resolved | rejected ]\r\n\t\t\t\t\tstate = stateString;\r\n\r\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\r\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\r\n\t\t\t}\r\n\r\n\t\t\t// deferred[ resolve | reject | notify ]\r\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\r\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\r\n\t\t\t\treturn this;\r\n\t\t\t};\r\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\r\n\t\t} );\r\n\r\n\t\t// Make the deferred a promise\r\n\t\tpromise.promise( deferred );\r\n\r\n\t\t// Call given func if any\r\n\t\tif ( func ) {\r\n\t\t\tfunc.call( deferred, deferred );\r\n\t\t}\r\n\r\n\t\t// All done!\r\n\t\treturn deferred;\r\n\t},\r\n\r\n\t// Deferred helper\r\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\r\n\t\tvar i = 0,\r\n\t\t\tresolveValues = slice.call( arguments ),\r\n\t\t\tlength = resolveValues.length,\r\n\r\n\t\t\t// the count of uncompleted subordinates\r\n\t\t\tremaining = length !== 1 ||\r\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\r\n\r\n\t\t\t// the master Deferred.\r\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\r\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\r\n\r\n\t\t\t// Update function for both resolve and progress values\r\n\t\t\tupdateFunc = function( i, contexts, values ) {\r\n\t\t\t\treturn function( value ) {\r\n\t\t\t\t\tcontexts[ i ] = this;\r\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\r\n\t\t\t\t\tif ( values === progressValues ) {\r\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\r\n\r\n\t\t\t\t\t} else if ( !( --remaining ) ) {\r\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t},\r\n\r\n\t\t\tprogressValues, progressContexts, resolveContexts;\r\n\r\n\t\t// add listeners to Deferred subordinates; treat others as resolved\r\n\t\tif ( length > 1 ) {\r\n\t\t\tprogressValues = new Array( length );\r\n\t\t\tprogressContexts = new Array( length );\r\n\t\t\tresolveContexts = new Array( length );\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\r\n\t\t\t\t\tresolveValues[ i ].promise()\r\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\r\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\r\n\t\t\t\t\t\t.fail( deferred.reject );\r\n\t\t\t\t} else {\r\n\t\t\t\t\t--remaining;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// if we're not waiting on anything, resolve the master\r\n\t\tif ( !remaining ) {\r\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\r\n\t\t}\r\n\r\n\t\treturn deferred.promise();\r\n\t}\r\n} );\r\n\r\n\r\n// The deferred used on DOM ready\r\nvar readyList;\r\n\r\njQuery.fn.ready = function( fn ) {\r\n\r\n\t// Add the callback\r\n\tjQuery.ready.promise().done( fn );\r\n\r\n\treturn this;\r\n};\r\n\r\njQuery.extend( {\r\n\r\n\t// Is the DOM ready to be used? Set to true once it occurs.\r\n\tisReady: false,\r\n\r\n\t// A counter to track how many items to wait for before\r\n\t// the ready event fires. See #6781\r\n\treadyWait: 1,\r\n\r\n\t// Hold (or release) the ready event\r\n\tholdReady: function( hold ) {\r\n\t\tif ( hold ) {\r\n\t\t\tjQuery.readyWait++;\r\n\t\t} else {\r\n\t\t\tjQuery.ready( true );\r\n\t\t}\r\n\t},\r\n\r\n\t// Handle when the DOM is ready\r\n\tready: function( wait ) {\r\n\r\n\t\t// Abort if there are pending holds or we're already ready\r\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Remember that the DOM is ready\r\n\t\tjQuery.isReady = true;\r\n\r\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\r\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// If there are functions bound, to execute\r\n\t\treadyList.resolveWith( document, [ jQuery ] );\r\n\r\n\t\t// Trigger any bound ready events\r\n\t\tif ( jQuery.fn.triggerHandler ) {\r\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\r\n\t\t\tjQuery( document ).off( \"ready\" );\r\n\t\t}\r\n\t}\r\n} );\r\n\r\n/**\r\n * Clean-up method for dom ready events\r\n */\r\nfunction detach() {\r\n\tif ( document.addEventListener ) {\r\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\r\n\t\twindow.removeEventListener( \"load\", completed );\r\n\r\n\t} else {\r\n\t\tdocument.detachEvent( \"onreadystatechange\", completed );\r\n\t\twindow.detachEvent( \"onload\", completed );\r\n\t}\r\n}\r\n\r\n/**\r\n * The ready event handler and self cleanup method\r\n */\r\nfunction completed() {\r\n\r\n\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\r\n\tif ( document.addEventListener ||\r\n\t\twindow.event.type === \"load\" ||\r\n\t\tdocument.readyState === \"complete\" ) {\r\n\r\n\t\tdetach();\r\n\t\tjQuery.ready();\r\n\t}\r\n}\r\n\r\njQuery.ready.promise = function( obj ) {\r\n\tif ( !readyList ) {\r\n\r\n\t\treadyList = jQuery.Deferred();\r\n\r\n\t\t// Catch cases where $(document).ready() is called\r\n\t\t// after the browser event has already occurred.\r\n\t\t// Support: IE6-10\r\n\t\t// Older IE sometimes signals \"interactive\" too soon\r\n\t\tif ( document.readyState === \"complete\" ||\r\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\r\n\r\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\r\n\t\t\twindow.setTimeout( jQuery.ready );\r\n\r\n\t\t// Standards-based browsers support DOMContentLoaded\r\n\t\t} else if ( document.addEventListener ) {\r\n\r\n\t\t\t// Use the handy event callback\r\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\r\n\r\n\t\t\t// A fallback to window.onload, that will always work\r\n\t\t\twindow.addEventListener( \"load\", completed );\r\n\r\n\t\t// If IE event model is used\r\n\t\t} else {\r\n\r\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\r\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\r\n\r\n\t\t\t// A fallback to window.onload, that will always work\r\n\t\t\twindow.attachEvent( \"onload\", completed );\r\n\r\n\t\t\t// If IE and not a frame\r\n\t\t\t// continually check to see if the document is ready\r\n\t\t\tvar top = false;\r\n\r\n\t\t\ttry {\r\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\r\n\t\t\t} catch ( e ) {}\r\n\r\n\t\t\tif ( top && top.doScroll ) {\r\n\t\t\t\t( function doScrollCheck() {\r\n\t\t\t\t\tif ( !jQuery.isReady ) {\r\n\r\n\t\t\t\t\t\ttry {\r\n\r\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\r\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\r\n\t\t\t\t\t\t\ttop.doScroll( \"left\" );\r\n\t\t\t\t\t\t} catch ( e ) {\r\n\t\t\t\t\t\t\treturn window.setTimeout( doScrollCheck, 50 );\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// detach all dom ready events\r\n\t\t\t\t\t\tdetach();\r\n\r\n\t\t\t\t\t\t// and execute any waiting functions\r\n\t\t\t\t\t\tjQuery.ready();\r\n\t\t\t\t\t}\r\n\t\t\t\t} )();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn readyList.promise( obj );\r\n};\r\n\r\n// Kick off the DOM ready check even if the user does not\r\njQuery.ready.promise();\r\n\r\n\r\n\r\n\r\n// Support: IE<9\r\n// Iteration over object's inherited properties before its own\r\nvar i;\r\nfor ( i in jQuery( support ) ) {\r\n\tbreak;\r\n}\r\nsupport.ownFirst = i === \"0\";\r\n\r\n// Note: most support tests are defined in their respective modules.\r\n// false until the test is run\r\nsupport.inlineBlockNeedsLayout = false;\r\n\r\n// Execute ASAP in case we need to set body.style.zoom\r\njQuery( function() {\r\n\r\n\t// Minified: var a,b,c,d\r\n\tvar val, div, body, container;\r\n\r\n\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\r\n\tif ( !body || !body.style ) {\r\n\r\n\t\t// Return for frameset docs that don't have a body\r\n\t\treturn;\r\n\t}\r\n\r\n\t// Setup\r\n\tdiv = document.createElement( \"div\" );\r\n\tcontainer = document.createElement( \"div\" );\r\n\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\r\n\tbody.appendChild( container ).appendChild( div );\r\n\r\n\tif ( typeof div.style.zoom !== \"undefined\" ) {\r\n\r\n\t\t// Support: IE<8\r\n\t\t// Check if natively block-level elements act like inline-block\r\n\t\t// elements when setting their display to 'inline' and giving\r\n\t\t// them layout\r\n\t\tdiv.style.cssText = \"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\";\r\n\r\n\t\tsupport.inlineBlockNeedsLayout = val = div.offsetWidth === 3;\r\n\t\tif ( val ) {\r\n\r\n\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\r\n\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\r\n\t\t\t// Support: IE<8\r\n\t\t\tbody.style.zoom = 1;\r\n\t\t}\r\n\t}\r\n\r\n\tbody.removeChild( container );\r\n} );\r\n\r\n\r\n( function() {\r\n\tvar div = document.createElement( \"div\" );\r\n\r\n\t// Support: IE<9\r\n\tsupport.deleteExpando = true;\r\n\ttry {\r\n\t\tdelete div.test;\r\n\t} catch ( e ) {\r\n\t\tsupport.deleteExpando = false;\r\n\t}\r\n\r\n\t// Null elements to avoid leaks in IE.\r\n\tdiv = null;\r\n} )();\r\nvar acceptData = function( elem ) {\r\n\tvar noData = jQuery.noData[ ( elem.nodeName + \" \" ).toLowerCase() ],\r\n\t\tnodeType = +elem.nodeType || 1;\r\n\r\n\t// Do not set data on non-element DOM nodes because it will not be cleared (#8335).\r\n\treturn nodeType !== 1 && nodeType !== 9 ?\r\n\t\tfalse :\r\n\r\n\t\t// Nodes accept data unless otherwise specified; rejection can be conditional\r\n\t\t!noData || noData !== true && elem.getAttribute( \"classid\" ) === noData;\r\n};\r\n\r\n\r\n\r\n\r\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\r\n\trmultiDash = /([A-Z])/g;\r\n\r\nfunction dataAttr( elem, key, data ) {\r\n\r\n\t// If nothing was found internally, try to fetch any\r\n\t// data from the HTML5 data-* attribute\r\n\tif ( data === undefined && elem.nodeType === 1 ) {\r\n\r\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\r\n\r\n\t\tdata = elem.getAttribute( name );\r\n\r\n\t\tif ( typeof data === \"string\" ) {\r\n\t\t\ttry {\r\n\t\t\t\tdata = data === \"true\" ? true :\r\n\t\t\t\t\tdata === \"false\" ? false :\r\n\t\t\t\t\tdata === \"null\" ? null :\r\n\r\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\r\n\t\t\t\t\t+data + \"\" === data ? +data :\r\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\r\n\t\t\t\t\tdata;\r\n\t\t\t} catch ( e ) {}\r\n\r\n\t\t\t// Make sure we set the data so it isn't changed later\r\n\t\t\tjQuery.data( elem, key, data );\r\n\r\n\t\t} else {\r\n\t\t\tdata = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\treturn data;\r\n}\r\n\r\n// checks a cache object for emptiness\r\nfunction isEmptyDataObject( obj ) {\r\n\tvar name;\r\n\tfor ( name in obj ) {\r\n\r\n\t\t// if the public data object is empty, the private is still empty\r\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[ name ] ) ) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif ( name !== \"toJSON\" ) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\treturn true;\r\n}\r\n\r\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ) {\r\n\tif ( !acceptData( elem ) ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar ret, thisCache,\r\n\t\tinternalKey = jQuery.expando,\r\n\r\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\r\n\t\t// can't GC object references properly across the DOM-JS boundary\r\n\t\tisNode = elem.nodeType,\r\n\r\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\r\n\t\t// attached directly to the object so GC can occur automatically\r\n\t\tcache = isNode ? jQuery.cache : elem,\r\n\r\n\t\t// Only defining an ID for JS objects if its cache already exists allows\r\n\t\t// the code to shortcut on the same path as a DOM node with no cache\r\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\r\n\r\n\t// Avoid doing any more work than we need to when trying to get data on an\r\n\t// object that has no data at all\r\n\tif ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&\r\n\t\tdata === undefined && typeof name === \"string\" ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif ( !id ) {\r\n\r\n\t\t// Only DOM nodes need a new unique ID for each element since their data\r\n\t\t// ends up in the global cache\r\n\t\tif ( isNode ) {\r\n\t\t\tid = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;\r\n\t\t} else {\r\n\t\t\tid = internalKey;\r\n\t\t}\r\n\t}\r\n\r\n\tif ( !cache[ id ] ) {\r\n\r\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\r\n\t\t// is serialized using JSON.stringify\r\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\r\n\t}\r\n\r\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\r\n\t// shallow copied over onto the existing cache\r\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\r\n\t\tif ( pvt ) {\r\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\r\n\t\t} else {\r\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\r\n\t\t}\r\n\t}\r\n\r\n\tthisCache = cache[ id ];\r\n\r\n\t// jQuery data() is stored in a separate object inside the object's internal data\r\n\t// cache in order to avoid key collisions between internal data and user-defined\r\n\t// data.\r\n\tif ( !pvt ) {\r\n\t\tif ( !thisCache.data ) {\r\n\t\t\tthisCache.data = {};\r\n\t\t}\r\n\r\n\t\tthisCache = thisCache.data;\r\n\t}\r\n\r\n\tif ( data !== undefined ) {\r\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\r\n\t}\r\n\r\n\t// Check for both converted-to-camel and non-converted data property names\r\n\t// If a data property was specified\r\n\tif ( typeof name === \"string\" ) {\r\n\r\n\t\t// First Try to find as-is property data\r\n\t\tret = thisCache[ name ];\r\n\r\n\t\t// Test for null|undefined property data\r\n\t\tif ( ret == null ) {\r\n\r\n\t\t\t// Try to find the camelCased property\r\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\r\n\t\t}\r\n\t} else {\r\n\t\tret = thisCache;\r\n\t}\r\n\r\n\treturn ret;\r\n}\r\n\r\nfunction internalRemoveData( elem, name, pvt ) {\r\n\tif ( !acceptData( elem ) ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar thisCache, i,\r\n\t\tisNode = elem.nodeType,\r\n\r\n\t\t// See jQuery.data for more information\r\n\t\tcache = isNode ? jQuery.cache : elem,\r\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\r\n\r\n\t// If there is already no cache entry for this object, there is no\r\n\t// purpose in continuing\r\n\tif ( !cache[ id ] ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tif ( name ) {\r\n\r\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\r\n\r\n\t\tif ( thisCache ) {\r\n\r\n\t\t\t// Support array or space separated string names for data keys\r\n\t\t\tif ( !jQuery.isArray( name ) ) {\r\n\r\n\t\t\t\t// try the string as a key before any manipulation\r\n\t\t\t\tif ( name in thisCache ) {\r\n\t\t\t\t\tname = [ name ];\r\n\t\t\t\t} else {\r\n\r\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\r\n\t\t\t\t\tname = jQuery.camelCase( name );\r\n\t\t\t\t\tif ( name in thisCache ) {\r\n\t\t\t\t\t\tname = [ name ];\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tname = name.split( \" \" );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\r\n\t\t\t\t// If \"name\" is an array of keys...\r\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\r\n\t\t\t\t// keys will be converted to camelCase.\r\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\r\n\t\t\t\t// both plain key and camelCase key. #12786\r\n\t\t\t\t// This will only penalize the array argument path.\r\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\r\n\t\t\t}\r\n\r\n\t\t\ti = name.length;\r\n\t\t\twhile ( i-- ) {\r\n\t\t\t\tdelete thisCache[ name[ i ] ];\r\n\t\t\t}\r\n\r\n\t\t\t// If there is no data left in the cache, we want to continue\r\n\t\t\t// and let the cache object itself get destroyed\r\n\t\t\tif ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// See jQuery.data for more information\r\n\tif ( !pvt ) {\r\n\t\tdelete cache[ id ].data;\r\n\r\n\t\t// Don't destroy the parent cache unless the internal data object\r\n\t\t// had been the only thing left in it\r\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\r\n\t// Destroy the cache\r\n\tif ( isNode ) {\r\n\t\tjQuery.cleanData( [ elem ], true );\r\n\r\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\r\n\t/* jshint eqeqeq: false */\r\n\t} else if ( support.deleteExpando || cache != cache.window ) {\r\n\t\t/* jshint eqeqeq: true */\r\n\t\tdelete cache[ id ];\r\n\r\n\t// When all else fails, undefined\r\n\t} else {\r\n\t\tcache[ id ] = undefined;\r\n\t}\r\n}\r\n\r\njQuery.extend( {\r\n\tcache: {},\r\n\r\n\t// The following elements (space-suffixed to avoid Object.prototype collisions)\r\n\t// throw uncatchable exceptions if you attempt to set expando properties\r\n\tnoData: {\r\n\t\t\"applet \": true,\r\n\t\t\"embed \": true,\r\n\r\n\t\t// ...but Flash objects (which have this classid) *can* handle expandos\r\n\t\t\"object \": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\r\n\t},\r\n\r\n\thasData: function( elem ) {\r\n\t\telem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];\r\n\t\treturn !!elem && !isEmptyDataObject( elem );\r\n\t},\r\n\r\n\tdata: function( elem, name, data ) {\r\n\t\treturn internalData( elem, name, data );\r\n\t},\r\n\r\n\tremoveData: function( elem, name ) {\r\n\t\treturn internalRemoveData( elem, name );\r\n\t},\r\n\r\n\t// For internal use only.\r\n\t_data: function( elem, name, data ) {\r\n\t\treturn internalData( elem, name, data, true );\r\n\t},\r\n\r\n\t_removeData: function( elem, name ) {\r\n\t\treturn internalRemoveData( elem, name, true );\r\n\t}\r\n} );\r\n\r\njQuery.fn.extend( {\r\n\tdata: function( key, value ) {\r\n\t\tvar i, name, data,\r\n\t\t\telem = this[ 0 ],\r\n\t\t\tattrs = elem && elem.attributes;\r\n\r\n\t\t// Special expections of .data basically thwart jQuery.access,\r\n\t\t// so implement the relevant behavior ourselves\r\n\r\n\t\t// Gets all values\r\n\t\tif ( key === undefined ) {\r\n\t\t\tif ( this.length ) {\r\n\t\t\t\tdata = jQuery.data( elem );\r\n\r\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\r\n\t\t\t\t\ti = attrs.length;\r\n\t\t\t\t\twhile ( i-- ) {\r\n\r\n\t\t\t\t\t\t// Support: IE11+\r\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\r\n\t\t\t\t\t\tif ( attrs[ i ] ) {\r\n\t\t\t\t\t\t\tname = attrs[ i ].name;\r\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\r\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\r\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", true );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn data;\r\n\t\t}\r\n\r\n\t\t// Sets multiple values\r\n\t\tif ( typeof key === \"object\" ) {\r\n\t\t\treturn this.each( function() {\r\n\t\t\t\tjQuery.data( this, key );\r\n\t\t\t} );\r\n\t\t}\r\n\r\n\t\treturn arguments.length > 1 ?\r\n\r\n\t\t\t// Sets one value\r\n\t\t\tthis.each( function() {\r\n\t\t\t\tjQuery.data( this, key, value );\r\n\t\t\t} ) :\r\n\r\n\t\t\t// Gets one value\r\n\t\t\t// Try to fetch any internally stored data first\r\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;\r\n\t},\r\n\r\n\tremoveData: function( key ) {\r\n\t\treturn this.each( function() {\r\n\t\t\tjQuery.removeData( this, key );\r\n\t\t} );\r\n\t}\r\n} );\r\n\r\n\r\njQuery.extend( {\r\n\tqueue: function( elem, type, data ) {\r\n\t\tvar queue;\r\n\r\n\t\tif ( elem ) {\r\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\r\n\t\t\tqueue = jQuery._data( elem, type );\r\n\r\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\r\n\t\t\tif ( data ) {\r\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\r\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray( data ) );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tqueue.push( data );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn queue || [];\r\n\t\t}\r\n\t},\r\n\r\n\tdequeue: function( elem, type ) {\r\n\t\ttype = type || \"fx\";\r\n\r\n\t\tvar queue = jQuery.queue( elem, type ),\r\n\t\t\tstartLength = queue.length,\r\n\t\t\tfn = queue.shift(),\r\n\t\t\thooks = jQuery._queueHooks( elem, type ),\r\n\t\t\tnext = function() {\r\n\t\t\t\tjQuery.dequeue( elem, type );\r\n\t\t\t};\r\n\r\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\r\n\t\tif ( fn === \"inprogress\" ) {\r\n\t\t\tfn = queue.shift();\r\n\t\t\tstartLength--;\r\n\t\t}\r\n\r\n\t\tif ( fn ) {\r\n\r\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\r\n\t\t\t// automatically dequeued\r\n\t\t\tif ( type === \"fx\" ) {\r\n\t\t\t\tqueue.unshift( \"inprogress\" );\r\n\t\t\t}\r\n\r\n\t\t\t// clear up the last queue stop function\r\n\t\t\tdelete hooks.stop;\r\n\t\t\tfn.call( elem, next, hooks );\r\n\t\t}\r\n\r\n\t\tif ( !startLength && hooks ) {\r\n\t\t\thooks.empty.fire();\r\n\t\t}\r\n\t},\r\n\r\n\t// not intended for public consumption - generates a queueHooks object,\r\n\t// or returns the current one\r\n\t_queueHooks: function( elem, type ) {\r\n\t\tvar key = type + \"queueHooks\";\r\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\r\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\r\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\r\n\t\t\t\tjQuery._removeData( elem, key );\r\n\t\t\t} )\r\n\t\t} );\r\n\t}\r\n} );\r\n\r\njQuery.fn.extend( {\r\n\tqueue: function( type, data ) {\r\n\t\tvar setter = 2;\r\n\r\n\t\tif ( typeof type !== \"string\" ) {\r\n\t\t\tdata = type;\r\n\t\t\ttype = \"fx\";\r\n\t\t\tsetter--;\r\n\t\t}\r\n\r\n\t\tif ( arguments.length < setter ) {\r\n\t\t\treturn jQuery.queue( this[ 0 ], type );\r\n\t\t}\r\n\r\n\t\treturn data === undefined ?\r\n\t\t\tthis :\r\n\t\t\tthis.each( function() {\r\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\r\n\r\n\t\t\t\t// ensure a hooks for this queue\r\n\t\t\t\tjQuery._queueHooks( this, type );\r\n\r\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\r\n\t\t\t\t\tjQuery.dequeue( this, type );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t},\r\n\tdequeue: function( type ) {\r\n\t\treturn this.each( function() {\r\n\t\t\tjQuery.dequeue( this, type );\r\n\t\t} );\r\n\t},\r\n\tclearQueue: function( type ) {\r\n\t\treturn this.queue( type || \"fx\", [] );\r\n\t},\r\n\r\n\t// Get a promise resolved when queues of a certain type\r\n\t// are emptied (fx is the type by default)\r\n\tpromise: function( type, obj ) {\r\n\t\tvar tmp,\r\n\t\t\tcount = 1,\r\n\t\t\tdefer = jQuery.Deferred(),\r\n\t\t\telements = this,\r\n\t\t\ti = this.length,\r\n\t\t\tresolve = function() {\r\n\t\t\t\tif ( !( --count ) ) {\r\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\tif ( typeof type !== \"string\" ) {\r\n\t\t\tobj = type;\r\n\t\t\ttype = undefined;\r\n\t\t}\r\n\t\ttype = type || \"fx\";\r\n\r\n\t\twhile ( i-- ) {\r\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\r\n\t\t\tif ( tmp && tmp.empty ) {\r\n\t\t\t\tcount++;\r\n\t\t\t\ttmp.empty.add( resolve );\r\n\t\t\t}\r\n\t\t}\r\n\t\tresolve();\r\n\t\treturn defer.promise( obj );\r\n\t}\r\n} );\r\n\r\n\r\n( function() {\r\n\tvar shrinkWrapBlocksVal;\r\n\r\n\tsupport.shrinkWrapBlocks = function() {\r\n\t\tif ( shrinkWrapBlocksVal != null ) {\r\n\t\t\treturn shrinkWrapBlocksVal;\r\n\t\t}\r\n\r\n\t\t// Will be changed later if needed.\r\n\t\tshrinkWrapBlocksVal = false;\r\n\r\n\t\t// Minified: var b,c,d\r\n\t\tvar div, body, container;\r\n\r\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\r\n\t\tif ( !body || !body.style ) {\r\n\r\n\t\t\t// Test fired too early or in an unsupported environment, exit.\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Setup\r\n\t\tdiv = document.createElement( \"div\" );\r\n\t\tcontainer = document.createElement( \"div\" );\r\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\r\n\t\tbody.appendChild( container ).appendChild( div );\r\n\r\n\t\t// Support: IE6\r\n\t\t// Check if elements with layout shrink-wrap their children\r\n\t\tif ( typeof div.style.zoom !== \"undefined\" ) {\r\n\r\n\t\t\t// Reset CSS: box-sizing; display; margin; border\r\n\t\t\tdiv.style.cssText =\r\n\r\n\t\t\t\t// Support: Firefox<29, Android 2.3\r\n\t\t\t\t// Vendor-prefix box-sizing\r\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\r\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;\" +\r\n\t\t\t\t\"padding:1px;width:1px;zoom:1\";\r\n\t\t\tdiv.appendChild( document.createElement( \"div\" ) ).style.width = \"5px\";\r\n\t\t\tshrinkWrapBlocksVal = div.offsetWidth !== 3;\r\n\t\t}\r\n\r\n\t\tbody.removeChild( container );\r\n\r\n\t\treturn shrinkWrapBlocksVal;\r\n\t};\r\n\r\n} )();\r\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\r\n\r\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\r\n\r\n\r\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\r\n\r\nvar isHidden = function( elem, el ) {\r\n\r\n\t\t// isHidden might be called from jQuery#filter function;\r\n\t\t// in that case, element will be second argument\r\n\t\telem = el || elem;\r\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\r\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\r\n\t};\r\n\r\n\r\n\r\nfunction adjustCSS( elem, prop, valueParts, tween ) {\r\n\tvar adjusted,\r\n\t\tscale = 1,\r\n\t\tmaxIterations = 20,\r\n\t\tcurrentValue = tween ?\r\n\t\t\tfunction() { return tween.cur(); } :\r\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\r\n\t\tinitial = currentValue(),\r\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\r\n\r\n\t\t// Starting value computation is required for potential unit mismatches\r\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\r\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\r\n\r\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\r\n\r\n\t\t// Trust units reported by jQuery.css\r\n\t\tunit = unit || initialInUnit[ 3 ];\r\n\r\n\t\t// Make sure we update the tween properties later on\r\n\t\tvalueParts = valueParts || [];\r\n\r\n\t\t// Iteratively approximate from a nonzero starting point\r\n\t\tinitialInUnit = +initial || 1;\r\n\r\n\t\tdo {\r\n\r\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\r\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\r\n\t\t\tscale = scale || \".5\";\r\n\r\n\t\t\t// Adjust and apply\r\n\t\t\tinitialInUnit = initialInUnit / scale;\r\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\r\n\r\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\r\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\r\n\t\t} while (\r\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\r\n\t\t);\r\n\t}\r\n\r\n\tif ( valueParts ) {\r\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\r\n\r\n\t\t// Apply relative offset (+=/-=) if specified\r\n\t\tadjusted = valueParts[ 1 ] ?\r\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\r\n\t\t\t+valueParts[ 2 ];\r\n\t\tif ( tween ) {\r\n\t\t\ttween.unit = unit;\r\n\t\t\ttween.start = initialInUnit;\r\n\t\t\ttween.end = adjusted;\r\n\t\t}\r\n\t}\r\n\treturn adjusted;\r\n}\r\n\r\n\r\n// Multifunctional method to get and set values of a collection\r\n// The value/s can optionally be executed if it's a function\r\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\r\n\tvar i = 0,\r\n\t\tlength = elems.length,\r\n\t\tbulk = key == null;\r\n\r\n\t// Sets many values\r\n\tif ( jQuery.type( key ) === \"object\" ) {\r\n\t\tchainable = true;\r\n\t\tfor ( i in key ) {\r\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\r\n\t\t}\r\n\r\n\t// Sets one value\r\n\t} else if ( value !== undefined ) {\r\n\t\tchainable = true;\r\n\r\n\t\tif ( !jQuery.isFunction( value ) ) {\r\n\t\t\traw = true;\r\n\t\t}\r\n\r\n\t\tif ( bulk ) {\r\n\r\n\t\t\t// Bulk operations run against the entire set\r\n\t\t\tif ( raw ) {\r\n\t\t\t\tfn.call( elems, value );\r\n\t\t\t\tfn = null;\r\n\r\n\t\t\t// ...except when executing function values\r\n\t\t\t} else {\r\n\t\t\t\tbulk = fn;\r\n\t\t\t\tfn = function( elem, key, value ) {\r\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ( fn ) {\r\n\t\t\tfor ( ; i < length; i++ ) {\r\n\t\t\t\tfn(\r\n\t\t\t\t\telems[ i ],\r\n\t\t\t\t\tkey,\r\n\t\t\t\t\traw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )\r\n\t\t\t\t);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn chainable ?\r\n\t\telems :\r\n\r\n\t\t// Gets\r\n\t\tbulk ?\r\n\t\t\tfn.call( elems ) :\r\n\t\t\tlength ? fn( elems[ 0 ], key ) : emptyGet;\r\n};\r\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\r\n\r\nvar rtagName = ( /<([\\w:-]+)/ );\r\n\r\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\r\n\r\nvar rleadingWhitespace = ( /^\\s+/ );\r\n\r\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|\" +\r\n\t\t\"details|dialog|figcaption|figure|footer|header|hgroup|main|\" +\r\n\t\t\"mark|meter|nav|output|picture|progress|section|summary|template|time|video\";\r\n\r\n\r\n\r\nfunction createSafeFragment( document ) {\r\n\tvar list = nodeNames.split( \"|\" ),\r\n\t\tsafeFrag = document.createDocumentFragment();\r\n\r\n\tif ( safeFrag.createElement ) {\r\n\t\twhile ( list.length ) {\r\n\t\t\tsafeFrag.createElement(\r\n\t\t\t\tlist.pop()\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\treturn safeFrag;\r\n}\r\n\r\n\r\n( function() {\r\n\tvar div = document.createElement( \"div\" ),\r\n\t\tfragment = document.createDocumentFragment(),\r\n\t\tinput = document.createElement( \"input\" );\r\n\r\n\t// Setup\r\n\tdiv.innerHTML = \"
        a\";\r\n\r\n\t// IE strips leading whitespace when .innerHTML is used\r\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\r\n\r\n\t// Make sure that tbody elements aren't automatically inserted\r\n\t// IE will insert them into empty tables\r\n\tsupport.tbody = !div.getElementsByTagName( \"tbody\" ).length;\r\n\r\n\t// Make sure that link elements get serialized correctly by innerHTML\r\n\t// This requires a wrapper element in IE\r\n\tsupport.htmlSerialize = !!div.getElementsByTagName( \"link\" ).length;\r\n\r\n\t// Makes sure cloning an html5 element does not cause problems\r\n\t// Where outerHTML is undefined, this still works\r\n\tsupport.html5Clone =\r\n\t\tdocument.createElement( \"nav\" ).cloneNode( true ).outerHTML !== \"<:nav>\";\r\n\r\n\t// Check if a disconnected checkbox will retain its checked\r\n\t// value of true after appended to the DOM (IE6/7)\r\n\tinput.type = \"checkbox\";\r\n\tinput.checked = true;\r\n\tfragment.appendChild( input );\r\n\tsupport.appendChecked = input.checked;\r\n\r\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\r\n\t// Support: IE6-IE11+\r\n\tdiv.innerHTML = \"\";\r\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\r\n\r\n\t// #11217 - WebKit loses check when the name is after the checked attribute\r\n\tfragment.appendChild( div );\r\n\r\n\t// Support: Windows Web Apps (WWA)\r\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\r\n\tinput = document.createElement( \"input\" );\r\n\tinput.setAttribute( \"type\", \"radio\" );\r\n\tinput.setAttribute( \"checked\", \"checked\" );\r\n\tinput.setAttribute( \"name\", \"t\" );\r\n\r\n\tdiv.appendChild( input );\r\n\r\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\r\n\t// old WebKit doesn't clone checked state correctly in fragments\r\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\r\n\r\n\t// Support: IE<9\r\n\t// Cloned elements keep attachEvent handlers, we use addEventListener on IE9+\r\n\tsupport.noCloneEvent = !!div.addEventListener;\r\n\r\n\t// Support: IE<9\r\n\t// Since attributes and properties are the same in IE,\r\n\t// cleanData must set properties to undefined rather than use removeAttribute\r\n\tdiv[ jQuery.expando ] = 1;\r\n\tsupport.attributes = !div.getAttribute( jQuery.expando );\r\n} )();\r\n\r\n\r\n// We have to close these tags to support XHTML (#13200)\r\nvar wrapMap = {\r\n\toption: [ 1, \"\" ],\r\n\tlegend: [ 1, \"
        \", \"
        \" ],\r\n\tarea: [ 1, \"\", \"\" ],\r\n\r\n\t// Support: IE8\r\n\tparam: [ 1, \"\", \"\" ],\r\n\tthead: [ 1, \"\", \"
        \" ],\r\n\ttr: [ 2, \"\", \"
        \" ],\r\n\tcol: [ 2, \"\", \"
        \" ],\r\n\ttd: [ 3, \"\", \"
        \" ],\r\n\r\n\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\r\n\t// unless wrapped in a div with non-breaking characters in front of it.\r\n\t_default: support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X
        \", \"
        \" ]\r\n};\r\n\r\n// Support: IE8-IE9\r\nwrapMap.optgroup = wrapMap.option;\r\n\r\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\r\nwrapMap.th = wrapMap.td;\r\n\r\n\r\nfunction getAll( context, tag ) {\r\n\tvar elems, elem,\r\n\t\ti = 0,\r\n\t\tfound = typeof context.getElementsByTagName !== \"undefined\" ?\r\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\r\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\r\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\r\n\t\t\t\tundefined;\r\n\r\n\tif ( !found ) {\r\n\t\tfor ( found = [], elems = context.childNodes || context;\r\n\t\t\t( elem = elems[ i ] ) != null;\r\n\t\t\ti++\r\n\t\t) {\r\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\r\n\t\t\t\tfound.push( elem );\r\n\t\t\t} else {\r\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\r\n\t\tjQuery.merge( [ context ], found ) :\r\n\t\tfound;\r\n}\r\n\r\n\r\n// Mark scripts as having already been evaluated\r\nfunction setGlobalEval( elems, refElements ) {\r\n\tvar elem,\r\n\t\ti = 0;\r\n\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\r\n\t\tjQuery._data(\r\n\t\t\telem,\r\n\t\t\t\"globalEval\",\r\n\t\t\t!refElements || jQuery._data( refElements[ i ], \"globalEval\" )\r\n\t\t);\r\n\t}\r\n}\r\n\r\n\r\nvar rhtml = /<|&#?\\w+;/,\r\n\trtbody = / from table fragments\r\n\t\t\t\tif ( !support.tbody ) {\r\n\r\n\t\t\t\t\t// String was a , *may* have spurious \r\n\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\r\n\t\t\t\t\t\ttmp.firstChild :\r\n\r\n\t\t\t\t\t\t// String was a bare or \r\n\t\t\t\t\t\twrap[ 1 ] === \"
        \" && !rtbody.test( elem ) ?\r\n\t\t\t\t\t\t\ttmp :\r\n\t\t\t\t\t\t\t0;\r\n\r\n\t\t\t\t\tj = elem && elem.childNodes.length;\r\n\t\t\t\t\twhile ( j-- ) {\r\n\t\t\t\t\t\tif ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), \"tbody\" ) &&\r\n\t\t\t\t\t\t\t!tbody.childNodes.length ) {\r\n\r\n\t\t\t\t\t\t\telem.removeChild( tbody );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\r\n\r\n\t\t\t\t// Fix #12392 for WebKit and IE > 9\r\n\t\t\t\ttmp.textContent = \"\";\r\n\r\n\t\t\t\t// Fix #12392 for oldIE\r\n\t\t\t\twhile ( tmp.firstChild ) {\r\n\t\t\t\t\ttmp.removeChild( tmp.firstChild );\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Remember the top-level container for proper cleanup\r\n\t\t\t\ttmp = safe.lastChild;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Fix #11356: Clear elements from fragment\r\n\tif ( tmp ) {\r\n\t\tsafe.removeChild( tmp );\r\n\t}\r\n\r\n\t// Reset defaultChecked for any radios and checkboxes\r\n\t// about to be appended to the DOM in IE 6/7 (#8060)\r\n\tif ( !support.appendChecked ) {\r\n\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\r\n\t}\r\n\r\n\ti = 0;\r\n\twhile ( ( elem = nodes[ i++ ] ) ) {\r\n\r\n\t\t// Skip elements already in the context collection (trac-4087)\r\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\r\n\t\t\tif ( ignored ) {\r\n\t\t\t\tignored.push( elem );\r\n\t\t\t}\r\n\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\r\n\r\n\t\t// Append to fragment\r\n\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\r\n\r\n\t\t// Preserve script evaluation history\r\n\t\tif ( contains ) {\r\n\t\t\tsetGlobalEval( tmp );\r\n\t\t}\r\n\r\n\t\t// Capture executables\r\n\t\tif ( scripts ) {\r\n\t\t\tj = 0;\r\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\r\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\r\n\t\t\t\t\tscripts.push( elem );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttmp = null;\r\n\r\n\treturn safe;\r\n}\r\n\r\n\r\n( function() {\r\n\tvar i, eventName,\r\n\t\tdiv = document.createElement( \"div\" );\r\n\r\n\t// Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)\r\n\tfor ( i in { submit: true, change: true, focusin: true } ) {\r\n\t\teventName = \"on\" + i;\r\n\r\n\t\tif ( !( support[ i ] = eventName in window ) ) {\r\n\r\n\t\t\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\r\n\t\t\tdiv.setAttribute( eventName, \"t\" );\r\n\t\t\tsupport[ i ] = div.attributes[ eventName ].expando === false;\r\n\t\t}\r\n\t}\r\n\r\n\t// Null elements to avoid leaks in IE.\r\n\tdiv = null;\r\n} )();\r\n\r\n\r\nvar rformElems = /^(?:input|select|textarea)$/i,\r\n\trkeyEvent = /^key/,\r\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\r\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\r\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\r\n\r\nfunction returnTrue() {\r\n\treturn true;\r\n}\r\n\r\nfunction returnFalse() {\r\n\treturn false;\r\n}\r\n\r\n// Support: IE9\r\n// See #13393 for more info\r\nfunction safeActiveElement() {\r\n\ttry {\r\n\t\treturn document.activeElement;\r\n\t} catch ( err ) { }\r\n}\r\n\r\nfunction on( elem, types, selector, data, fn, one ) {\r\n\tvar origFn, type;\r\n\r\n\t// Types can be a map of types/handlers\r\n\tif ( typeof types === \"object\" ) {\r\n\r\n\t\t// ( types-Object, selector, data )\r\n\t\tif ( typeof selector !== \"string\" ) {\r\n\r\n\t\t\t// ( types-Object, data )\r\n\t\t\tdata = data || selector;\r\n\t\t\tselector = undefined;\r\n\t\t}\r\n\t\tfor ( type in types ) {\r\n\t\t\ton( elem, type, selector, data, types[ type ], one );\r\n\t\t}\r\n\t\treturn elem;\r\n\t}\r\n\r\n\tif ( data == null && fn == null ) {\r\n\r\n\t\t// ( types, fn )\r\n\t\tfn = selector;\r\n\t\tdata = selector = undefined;\r\n\t} else if ( fn == null ) {\r\n\t\tif ( typeof selector === \"string\" ) {\r\n\r\n\t\t\t// ( types, selector, fn )\r\n\t\t\tfn = data;\r\n\t\t\tdata = undefined;\r\n\t\t} else {\r\n\r\n\t\t\t// ( types, data, fn )\r\n\t\t\tfn = data;\r\n\t\t\tdata = selector;\r\n\t\t\tselector = undefined;\r\n\t\t}\r\n\t}\r\n\tif ( fn === false ) {\r\n\t\tfn = returnFalse;\r\n\t} else if ( !fn ) {\r\n\t\treturn elem;\r\n\t}\r\n\r\n\tif ( one === 1 ) {\r\n\t\torigFn = fn;\r\n\t\tfn = function( event ) {\r\n\r\n\t\t\t// Can use an empty set, since event contains the info\r\n\t\t\tjQuery().off( event );\r\n\t\t\treturn origFn.apply( this, arguments );\r\n\t\t};\r\n\r\n\t\t// Use same guid so caller can remove using origFn\r\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\r\n\t}\r\n\treturn elem.each( function() {\r\n\t\tjQuery.event.add( this, types, fn, data, selector );\r\n\t} );\r\n}\r\n\r\n/*\r\n * Helper functions for managing events -- not part of the public interface.\r\n * Props to Dean Edwards' addEvent library for many of the ideas.\r\n */\r\njQuery.event = {\r\n\r\n\tglobal: {},\r\n\r\n\tadd: function( elem, types, handler, data, selector ) {\r\n\t\tvar tmp, events, t, handleObjIn,\r\n\t\t\tspecial, eventHandle, handleObj,\r\n\t\t\thandlers, type, namespaces, origType,\r\n\t\t\telemData = jQuery._data( elem );\r\n\r\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\r\n\t\tif ( !elemData ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Caller can pass in an object of custom data in lieu of the handler\r\n\t\tif ( handler.handler ) {\r\n\t\t\thandleObjIn = handler;\r\n\t\t\thandler = handleObjIn.handler;\r\n\t\t\tselector = handleObjIn.selector;\r\n\t\t}\r\n\r\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\r\n\t\tif ( !handler.guid ) {\r\n\t\t\thandler.guid = jQuery.guid++;\r\n\t\t}\r\n\r\n\t\t// Init the element's event structure and main handler, if this is the first\r\n\t\tif ( !( events = elemData.events ) ) {\r\n\t\t\tevents = elemData.events = {};\r\n\t\t}\r\n\t\tif ( !( eventHandle = elemData.handle ) ) {\r\n\t\t\teventHandle = elemData.handle = function( e ) {\r\n\r\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\r\n\t\t\t\t// when an event is called after a page has unloaded\r\n\t\t\t\treturn typeof jQuery !== \"undefined\" &&\r\n\t\t\t\t\t( !e || jQuery.event.triggered !== e.type ) ?\r\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\r\n\t\t\t\t\tundefined;\r\n\t\t\t};\r\n\r\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak\r\n\t\t\t// with IE non-native events\r\n\t\t\teventHandle.elem = elem;\r\n\t\t}\r\n\r\n\t\t// Handle multiple events separated by a space\r\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\r\n\t\tt = types.length;\r\n\t\twhile ( t-- ) {\r\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\r\n\t\t\ttype = origType = tmp[ 1 ];\r\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\r\n\r\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\r\n\t\t\tif ( !type ) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\t// If event changes its type, use the special event handlers for the changed type\r\n\t\t\tspecial = jQuery.event.special[ type ] || {};\r\n\r\n\t\t\t// If selector defined, determine special event api type, otherwise given type\r\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\r\n\r\n\t\t\t// Update special based on newly reset type\r\n\t\t\tspecial = jQuery.event.special[ type ] || {};\r\n\r\n\t\t\t// handleObj is passed to all event handlers\r\n\t\t\thandleObj = jQuery.extend( {\r\n\t\t\t\ttype: type,\r\n\t\t\t\torigType: origType,\r\n\t\t\t\tdata: data,\r\n\t\t\t\thandler: handler,\r\n\t\t\t\tguid: handler.guid,\r\n\t\t\t\tselector: selector,\r\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\r\n\t\t\t\tnamespace: namespaces.join( \".\" )\r\n\t\t\t}, handleObjIn );\r\n\r\n\t\t\t// Init the event handler queue if we're the first\r\n\t\t\tif ( !( handlers = events[ type ] ) ) {\r\n\t\t\t\thandlers = events[ type ] = [];\r\n\t\t\t\thandlers.delegateCount = 0;\r\n\r\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\r\n\t\t\t\tif ( !special.setup ||\r\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\r\n\r\n\t\t\t\t\t// Bind the global event handler to the element\r\n\t\t\t\t\tif ( elem.addEventListener ) {\r\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\r\n\r\n\t\t\t\t\t} else if ( elem.attachEvent ) {\r\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif ( special.add ) {\r\n\t\t\t\tspecial.add.call( elem, handleObj );\r\n\r\n\t\t\t\tif ( !handleObj.handler.guid ) {\r\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Add to the element's handler list, delegates in front\r\n\t\t\tif ( selector ) {\r\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\r\n\t\t\t} else {\r\n\t\t\t\thandlers.push( handleObj );\r\n\t\t\t}\r\n\r\n\t\t\t// Keep track of which events have ever been used, for event optimization\r\n\t\t\tjQuery.event.global[ type ] = true;\r\n\t\t}\r\n\r\n\t\t// Nullify elem to prevent memory leaks in IE\r\n\t\telem = null;\r\n\t},\r\n\r\n\t// Detach an event or set of events from an element\r\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\r\n\t\tvar j, handleObj, tmp,\r\n\t\t\torigCount, t, events,\r\n\t\t\tspecial, handlers, type,\r\n\t\t\tnamespaces, origType,\r\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\r\n\r\n\t\tif ( !elemData || !( events = elemData.events ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Once for each type.namespace in types; type may be omitted\r\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\r\n\t\tt = types.length;\r\n\t\twhile ( t-- ) {\r\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\r\n\t\t\ttype = origType = tmp[ 1 ];\r\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\r\n\r\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\r\n\t\t\tif ( !type ) {\r\n\t\t\t\tfor ( type in events ) {\r\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\r\n\t\t\t\t}\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tspecial = jQuery.event.special[ type ] || {};\r\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\r\n\t\t\thandlers = events[ type ] || [];\r\n\t\t\ttmp = tmp[ 2 ] &&\r\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\r\n\r\n\t\t\t// Remove matching events\r\n\t\t\torigCount = j = handlers.length;\r\n\t\t\twhile ( j-- ) {\r\n\t\t\t\thandleObj = handlers[ j ];\r\n\r\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\r\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\r\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\r\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\r\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\r\n\t\t\t\t\thandlers.splice( j, 1 );\r\n\r\n\t\t\t\t\tif ( handleObj.selector ) {\r\n\t\t\t\t\t\thandlers.delegateCount--;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( special.remove ) {\r\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\r\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\r\n\t\t\tif ( origCount && !handlers.length ) {\r\n\t\t\t\tif ( !special.teardown ||\r\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\r\n\r\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdelete events[ type ];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Remove the expando if it's no longer used\r\n\t\tif ( jQuery.isEmptyObject( events ) ) {\r\n\t\t\tdelete elemData.handle;\r\n\r\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\r\n\t\t\t// so use it instead of delete\r\n\t\t\tjQuery._removeData( elem, \"events\" );\r\n\t\t}\r\n\t},\r\n\r\n\ttrigger: function( event, data, elem, onlyHandlers ) {\r\n\t\tvar handle, ontype, cur,\r\n\t\t\tbubbleType, special, tmp, i,\r\n\t\t\teventPath = [ elem || document ],\r\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\r\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\r\n\r\n\t\tcur = tmp = elem = elem || document;\r\n\r\n\t\t// Don't do events on text and comment nodes\r\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\r\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\r\n\r\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\r\n\t\t\tnamespaces = type.split( \".\" );\r\n\t\t\ttype = namespaces.shift();\r\n\t\t\tnamespaces.sort();\r\n\t\t}\r\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\r\n\r\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\r\n\t\tevent = event[ jQuery.expando ] ?\r\n\t\t\tevent :\r\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\r\n\r\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\r\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\r\n\t\tevent.namespace = namespaces.join( \".\" );\r\n\t\tevent.rnamespace = event.namespace ?\r\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\r\n\t\t\tnull;\r\n\r\n\t\t// Clean up the event in case it is being reused\r\n\t\tevent.result = undefined;\r\n\t\tif ( !event.target ) {\r\n\t\t\tevent.target = elem;\r\n\t\t}\r\n\r\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\r\n\t\tdata = data == null ?\r\n\t\t\t[ event ] :\r\n\t\t\tjQuery.makeArray( data, [ event ] );\r\n\r\n\t\t// Allow special events to draw outside the lines\r\n\t\tspecial = jQuery.event.special[ type ] || {};\r\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\r\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\r\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\r\n\r\n\t\t\tbubbleType = special.delegateType || type;\r\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\r\n\t\t\t\tcur = cur.parentNode;\r\n\t\t\t}\r\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\r\n\t\t\t\teventPath.push( cur );\r\n\t\t\t\ttmp = cur;\r\n\t\t\t}\r\n\r\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\r\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\r\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Fire handlers on the event path\r\n\t\ti = 0;\r\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\r\n\r\n\t\t\tevent.type = i > 1 ?\r\n\t\t\t\tbubbleType :\r\n\t\t\t\tspecial.bindType || type;\r\n\r\n\t\t\t// jQuery handler\r\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] &&\r\n\t\t\t\tjQuery._data( cur, \"handle\" );\r\n\r\n\t\t\tif ( handle ) {\r\n\t\t\t\thandle.apply( cur, data );\r\n\t\t\t}\r\n\r\n\t\t\t// Native handler\r\n\t\t\thandle = ontype && cur[ ontype ];\r\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\r\n\t\t\t\tevent.result = handle.apply( cur, data );\r\n\t\t\t\tif ( event.result === false ) {\r\n\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tevent.type = type;\r\n\r\n\t\t// If nobody prevented the default action, do it now\r\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\r\n\r\n\t\t\tif (\r\n\t\t\t\t( !special._default ||\r\n\t\t\t\t special._default.apply( eventPath.pop(), data ) === false\r\n\t\t\t\t) && acceptData( elem )\r\n\t\t\t) {\r\n\r\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\r\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\r\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\r\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\r\n\r\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\r\n\t\t\t\t\ttmp = elem[ ontype ];\r\n\r\n\t\t\t\t\tif ( tmp ) {\r\n\t\t\t\t\t\telem[ ontype ] = null;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\r\n\t\t\t\t\tjQuery.event.triggered = type;\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\telem[ type ]();\r\n\t\t\t\t\t} catch ( e ) {\r\n\r\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\r\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\r\n\t\t\t\t\t}\r\n\t\t\t\t\tjQuery.event.triggered = undefined;\r\n\r\n\t\t\t\t\tif ( tmp ) {\r\n\t\t\t\t\t\telem[ ontype ] = tmp;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn event.result;\r\n\t},\r\n\r\n\tdispatch: function( event ) {\r\n\r\n\t\t// Make a writable jQuery.Event from the native event object\r\n\t\tevent = jQuery.event.fix( event );\r\n\r\n\t\tvar i, j, ret, matched, handleObj,\r\n\t\t\thandlerQueue = [],\r\n\t\t\targs = slice.call( arguments ),\r\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\r\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\r\n\r\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\r\n\t\targs[ 0 ] = event;\r\n\t\tevent.delegateTarget = this;\r\n\r\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\r\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Determine handlers\r\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\r\n\r\n\t\t// Run delegates first; they may want to stop propagation beneath us\r\n\t\ti = 0;\r\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\r\n\t\t\tevent.currentTarget = matched.elem;\r\n\r\n\t\t\tj = 0;\r\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\r\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\r\n\r\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\r\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\r\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\r\n\r\n\t\t\t\t\tevent.handleObj = handleObj;\r\n\t\t\t\t\tevent.data = handleObj.data;\r\n\r\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\r\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\r\n\r\n\t\t\t\t\tif ( ret !== undefined ) {\r\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\r\n\t\t\t\t\t\t\tevent.preventDefault();\r\n\t\t\t\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Call the postDispatch hook for the mapped type\r\n\t\tif ( special.postDispatch ) {\r\n\t\t\tspecial.postDispatch.call( this, event );\r\n\t\t}\r\n\r\n\t\treturn event.result;\r\n\t},\r\n\r\n\thandlers: function( event, handlers ) {\r\n\t\tvar i, matches, sel, handleObj,\r\n\t\t\thandlerQueue = [],\r\n\t\t\tdelegateCount = handlers.delegateCount,\r\n\t\t\tcur = event.target;\r\n\r\n\t\t// Support (at least): Chrome, IE9\r\n\t\t// Find delegate handlers\r\n\t\t// Black-hole SVG instance trees (#13180)\r\n\t\t//\r\n\t\t// Support: Firefox<=42+\r\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\r\n\t\tif ( delegateCount && cur.nodeType &&\r\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\r\n\r\n\t\t\t/* jshint eqeqeq: false */\r\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\r\n\t\t\t\t/* jshint eqeqeq: true */\r\n\r\n\t\t\t\t// Don't check non-elements (#13208)\r\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\r\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\r\n\t\t\t\t\tmatches = [];\r\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\r\n\t\t\t\t\t\thandleObj = handlers[ i ];\r\n\r\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\r\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\r\n\r\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\r\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\r\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\r\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ( matches[ sel ] ) {\r\n\t\t\t\t\t\t\tmatches.push( handleObj );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( matches.length ) {\r\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Add the remaining (directly-bound) handlers\r\n\t\tif ( delegateCount < handlers.length ) {\r\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\r\n\t\t}\r\n\r\n\t\treturn handlerQueue;\r\n\t},\r\n\r\n\tfix: function( event ) {\r\n\t\tif ( event[ jQuery.expando ] ) {\r\n\t\t\treturn event;\r\n\t\t}\r\n\r\n\t\t// Create a writable copy of the event object and normalize some properties\r\n\t\tvar i, prop, copy,\r\n\t\t\ttype = event.type,\r\n\t\t\toriginalEvent = event,\r\n\t\t\tfixHook = this.fixHooks[ type ];\r\n\r\n\t\tif ( !fixHook ) {\r\n\t\t\tthis.fixHooks[ type ] = fixHook =\r\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\r\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\r\n\t\t\t\t{};\r\n\t\t}\r\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\r\n\r\n\t\tevent = new jQuery.Event( originalEvent );\r\n\r\n\t\ti = copy.length;\r\n\t\twhile ( i-- ) {\r\n\t\t\tprop = copy[ i ];\r\n\t\t\tevent[ prop ] = originalEvent[ prop ];\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// Fix target property (#1925)\r\n\t\tif ( !event.target ) {\r\n\t\t\tevent.target = originalEvent.srcElement || document;\r\n\t\t}\r\n\r\n\t\t// Support: Safari 6-8+\r\n\t\t// Target should not be a text node (#504, #13143)\r\n\t\tif ( event.target.nodeType === 3 ) {\r\n\t\t\tevent.target = event.target.parentNode;\r\n\t\t}\r\n\r\n\t\t// Support: IE<9\r\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\r\n\t\tevent.metaKey = !!event.metaKey;\r\n\r\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\r\n\t},\r\n\r\n\t// Includes some event props shared by KeyEvent and MouseEvent\r\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\r\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\r\n\r\n\tfixHooks: {},\r\n\r\n\tkeyHooks: {\r\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\r\n\t\tfilter: function( event, original ) {\r\n\r\n\t\t\t// Add which for key events\r\n\t\t\tif ( event.which == null ) {\r\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\r\n\t\t\t}\r\n\r\n\t\t\treturn event;\r\n\t\t}\r\n\t},\r\n\r\n\tmouseHooks: {\r\n\t\tprops: ( \"button buttons clientX clientY fromElement offsetX offsetY \" +\r\n\t\t\t\"pageX pageY screenX screenY toElement\" ).split( \" \" ),\r\n\t\tfilter: function( event, original ) {\r\n\t\t\tvar body, eventDoc, doc,\r\n\t\t\t\tbutton = original.button,\r\n\t\t\t\tfromElement = original.fromElement;\r\n\r\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\r\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\r\n\t\t\t\teventDoc = event.target.ownerDocument || document;\r\n\t\t\t\tdoc = eventDoc.documentElement;\r\n\t\t\t\tbody = eventDoc.body;\r\n\r\n\t\t\t\tevent.pageX = original.clientX +\r\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\r\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\r\n\t\t\t\tevent.pageY = original.clientY +\r\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\r\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\r\n\t\t\t}\r\n\r\n\t\t\t// Add relatedTarget, if necessary\r\n\t\t\tif ( !event.relatedTarget && fromElement ) {\r\n\t\t\t\tevent.relatedTarget = fromElement === event.target ?\r\n\t\t\t\t\toriginal.toElement :\r\n\t\t\t\t\tfromElement;\r\n\t\t\t}\r\n\r\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\r\n\t\t\t// Note: button is not normalized, so don't use it\r\n\t\t\tif ( !event.which && button !== undefined ) {\r\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\r\n\t\t\t}\r\n\r\n\t\t\treturn event;\r\n\t\t}\r\n\t},\r\n\r\n\tspecial: {\r\n\t\tload: {\r\n\r\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\r\n\t\t\tnoBubble: true\r\n\t\t},\r\n\t\tfocus: {\r\n\r\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\r\n\t\t\ttrigger: function() {\r\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tthis.focus();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t} catch ( e ) {\r\n\r\n\t\t\t\t\t\t// Support: IE<9\r\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\r\n\t\t\t\t\t\t// let .trigger() run the handlers\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdelegateType: \"focusin\"\r\n\t\t},\r\n\t\tblur: {\r\n\t\t\ttrigger: function() {\r\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\r\n\t\t\t\t\tthis.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdelegateType: \"focusout\"\r\n\t\t},\r\n\t\tclick: {\r\n\r\n\t\t\t// For checkbox, fire native event so checked state will be right\r\n\t\t\ttrigger: function() {\r\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\r\n\t\t\t\t\tthis.click();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\r\n\t\t\t_default: function( event ) {\r\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tbeforeunload: {\r\n\t\t\tpostDispatch: function( event ) {\r\n\r\n\t\t\t\t// Support: Firefox 20+\r\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\r\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\r\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t// Piggyback on a donor event to simulate a different one\r\n\tsimulate: function( type, elem, event ) {\r\n\t\tvar e = jQuery.extend(\r\n\t\t\tnew jQuery.Event(),\r\n\t\t\tevent,\r\n\t\t\t{\r\n\t\t\t\ttype: type,\r\n\t\t\t\tisSimulated: true\r\n\r\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\r\n\t\t\t\t// would not be triggered on donor event, since in our own\r\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\r\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\r\n\t\t\t\t//\r\n\t\t\t\t// Guard for simulated events was moved to jQuery.event.stopPropagation function\r\n\t\t\t\t// since `originalEvent` should point to the original event for the\r\n\t\t\t\t// constancy with other events and for more focused logic\r\n\t\t\t}\r\n\t\t);\r\n\r\n\t\tjQuery.event.trigger( e, null, elem );\r\n\r\n\t\tif ( e.isDefaultPrevented() ) {\r\n\t\t\tevent.preventDefault();\r\n\t\t}\r\n\t}\r\n};\r\n\r\njQuery.removeEvent = document.removeEventListener ?\r\n\tfunction( elem, type, handle ) {\r\n\r\n\t\t// This \"if\" is needed for plain objects\r\n\t\tif ( elem.removeEventListener ) {\r\n\t\t\telem.removeEventListener( type, handle );\r\n\t\t}\r\n\t} :\r\n\tfunction( elem, type, handle ) {\r\n\t\tvar name = \"on\" + type;\r\n\r\n\t\tif ( elem.detachEvent ) {\r\n\r\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\r\n\t\t\t// detachEvent needed property on element, by name of that event,\r\n\t\t\t// to properly expose it to GC\r\n\t\t\tif ( typeof elem[ name ] === \"undefined\" ) {\r\n\t\t\t\telem[ name ] = null;\r\n\t\t\t}\r\n\r\n\t\t\telem.detachEvent( name, handle );\r\n\t\t}\r\n\t};\r\n\r\njQuery.Event = function( src, props ) {\r\n\r\n\t// Allow instantiation without the 'new' keyword\r\n\tif ( !( this instanceof jQuery.Event ) ) {\r\n\t\treturn new jQuery.Event( src, props );\r\n\t}\r\n\r\n\t// Event object\r\n\tif ( src && src.type ) {\r\n\t\tthis.originalEvent = src;\r\n\t\tthis.type = src.type;\r\n\r\n\t\t// Events bubbling up the document may have been marked as prevented\r\n\t\t// by a handler lower down the tree; reflect the correct value.\r\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\r\n\t\t\t\tsrc.defaultPrevented === undefined &&\r\n\r\n\t\t\t\t// Support: IE < 9, Android < 4.0\r\n\t\t\t\tsrc.returnValue === false ?\r\n\t\t\treturnTrue :\r\n\t\t\treturnFalse;\r\n\r\n\t// Event type\r\n\t} else {\r\n\t\tthis.type = src;\r\n\t}\r\n\r\n\t// Put explicitly provided properties onto the event object\r\n\tif ( props ) {\r\n\t\tjQuery.extend( this, props );\r\n\t}\r\n\r\n\t// Create a timestamp if incoming event doesn't have one\r\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\r\n\r\n\t// Mark it as fixed\r\n\tthis[ jQuery.expando ] = true;\r\n};\r\n\r\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\r\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\r\njQuery.Event.prototype = {\r\n\tconstructor: jQuery.Event,\r\n\tisDefaultPrevented: returnFalse,\r\n\tisPropagationStopped: returnFalse,\r\n\tisImmediatePropagationStopped: returnFalse,\r\n\r\n\tpreventDefault: function() {\r\n\t\tvar e = this.originalEvent;\r\n\r\n\t\tthis.isDefaultPrevented = returnTrue;\r\n\t\tif ( !e ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// If preventDefault exists, run it on the original event\r\n\t\tif ( e.preventDefault ) {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t// Support: IE\r\n\t\t// Otherwise set the returnValue property of the original event to false\r\n\t\t} else {\r\n\t\t\te.returnValue = false;\r\n\t\t}\r\n\t},\r\n\tstopPropagation: function() {\r\n\t\tvar e = this.originalEvent;\r\n\r\n\t\tthis.isPropagationStopped = returnTrue;\r\n\r\n\t\tif ( !e || this.isSimulated ) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// If stopPropagation exists, run it on the original event\r\n\t\tif ( e.stopPropagation ) {\r\n\t\t\te.stopPropagation();\r\n\t\t}\r\n\r\n\t\t// Support: IE\r\n\t\t// Set the cancelBubble property of the original event to true\r\n\t\te.cancelBubble = true;\r\n\t},\r\n\tstopImmediatePropagation: function() {\r\n\t\tvar e = this.originalEvent;\r\n\r\n\t\tthis.isImmediatePropagationStopped = returnTrue;\r\n\r\n\t\tif ( e && e.stopImmediatePropagation ) {\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t}\r\n\r\n\t\tthis.stopPropagation();\r\n\t}\r\n};\r\n\r\n// Create mouseenter/leave events using mouseover/out and event-time checks\r\n// so that event delegation works in jQuery.\r\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\r\n//\r\n// Support: Safari 7 only\r\n// Safari sends mouseenter too often; see:\r\n// https://code.google.com/p/chromium/issues/detail?id=470258\r\n// for the description of the bug (it existed in older Chrome versions as well).\r\njQuery.each( {\r\n\tmouseenter: \"mouseover\",\r\n\tmouseleave: \"mouseout\",\r\n\tpointerenter: \"pointerover\",\r\n\tpointerleave: \"pointerout\"\r\n}, function( orig, fix ) {\r\n\tjQuery.event.special[ orig ] = {\r\n\t\tdelegateType: fix,\r\n\t\tbindType: fix,\r\n\r\n\t\thandle: function( event ) {\r\n\t\t\tvar ret,\r\n\t\t\t\ttarget = this,\r\n\t\t\t\trelated = event.relatedTarget,\r\n\t\t\t\thandleObj = event.handleObj;\r\n\r\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\r\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\r\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\r\n\t\t\t\tevent.type = handleObj.origType;\r\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\r\n\t\t\t\tevent.type = fix;\r\n\t\t\t}\r\n\t\t\treturn ret;\r\n\t\t}\r\n\t};\r\n} );\r\n\r\n// IE submit delegation\r\nif ( !support.submit ) {\r\n\r\n\tjQuery.event.special.submit = {\r\n\t\tsetup: function() {\r\n\r\n\t\t\t// Only need this for delegated form submit events\r\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\r\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\r\n\r\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\r\n\t\t\t\tvar elem = e.target,\r\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ?\r\n\r\n\t\t\t\t\t\t// Support: IE <=8\r\n\t\t\t\t\t\t// We use jQuery.prop instead of elem.form\r\n\t\t\t\t\t\t// to allow fixing the IE8 delegated submit issue (gh-2332)\r\n\t\t\t\t\t\t// by 3rd party polyfills/workarounds.\r\n\t\t\t\t\t\tjQuery.prop( elem, \"form\" ) :\r\n\t\t\t\t\t\tundefined;\r\n\r\n\t\t\t\tif ( form && !jQuery._data( form, \"submit\" ) ) {\r\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\r\n\t\t\t\t\t\tevent._submitBubble = true;\r\n\t\t\t\t\t} );\r\n\t\t\t\t\tjQuery._data( form, \"submit\", true );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\r\n\t\t\t// return undefined since we don't need an event listener\r\n\t\t},\r\n\r\n\t\tpostDispatch: function( event ) {\r\n\r\n\t\t\t// If form was submitted by the user, bubble the event up the tree\r\n\t\t\tif ( event._submitBubble ) {\r\n\t\t\t\tdelete event._submitBubble;\r\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\r\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tteardown: function() {\r\n\r\n\t\t\t// Only need this for delegated form submit events\r\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\r\n\t\t\tjQuery.event.remove( this, \"._submit\" );\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// IE change delegation and checkbox/radio fix\r\nif ( !support.change ) {\r\n\r\n\tjQuery.event.special.change = {\r\n\r\n\t\tsetup: function() {\r\n\r\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\r\n\r\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\r\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\r\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\r\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\r\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\r\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\r\n\t\t\t\t\t\t\tthis._justChanged = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} );\r\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\r\n\t\t\t\t\t\tif ( this._justChanged && !event.isTrigger ) {\r\n\t\t\t\t\t\t\tthis._justChanged = false;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\r\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event );\r\n\t\t\t\t\t} );\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\r\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\r\n\t\t\t\tvar elem = e.target;\r\n\r\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"change\" ) ) {\r\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\r\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\r\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event );\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} );\r\n\t\t\t\t\tjQuery._data( elem, \"change\", true );\r\n\t\t\t\t}\r\n\t\t\t} );\r\n\t\t},\r\n\r\n\t\thandle: function( event ) {\r\n\t\t\tvar elem = event.target;\r\n\r\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\r\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger ||\r\n\t\t\t\t( elem.type !== \"radio\" && elem.type !== \"checkbox\" ) ) {\r\n\r\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tteardown: function() {\r\n\t\t\tjQuery.event.remove( this, \"._change\" );\r\n\r\n\t\t\treturn !rformElems.test( this.nodeName );\r\n\t\t}\r\n\t};\r\n}\r\n\r\n// Support: Firefox\r\n// Firefox doesn't have focus(in | out) events\r\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\r\n//\r\n// Support: Chrome, Safari\r\n// focus(in | out) events fire after focus & blur events,\r\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\r\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\r\nif ( !support.focusin ) {\r\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\r\n\r\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\r\n\t\tvar handler = function( event ) {\r\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\r\n\t\t};\r\n\r\n\t\tjQuery.event.special[ fix ] = {\r\n\t\t\tsetup: function() {\r\n\t\t\t\tvar doc = this.ownerDocument || this,\r\n\t\t\t\t\tattaches = jQuery._data( doc, fix );\r\n\r\n\t\t\t\tif ( !attaches ) {\r\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\r\n\t\t\t\t}\r\n\t\t\t\tjQuery._data( doc, fix, ( attaches || 0 ) + 1 );\r\n\t\t\t},\r\n\t\t\tteardown: function() {\r\n\t\t\t\tvar doc = this.ownerDocument || this,\r\n\t\t\t\t\tattaches = jQuery._data( doc, fix ) - 1;\r\n\r\n\t\t\t\tif ( !attaches ) {\r\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\r\n\t\t\t\t\tjQuery._removeData( doc, fix );\r\n\t\t\t\t} else {\r\n\t\t\t\t\tjQuery._data( doc, fix, attaches );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t} );\r\n}\r\n\r\njQuery.fn.extend( {\r\n\r\n\ton: function( types, selector, data, fn ) {\r\n\t\treturn on( this, types, selector, data, fn );\r\n\t},\r\n\tone: function( types, selector, data, fn ) {\r\n\t\treturn on( this, types, selector, data, fn, 1 );\r\n\t},\r\n\toff: function( types, selector, fn ) {\r\n\t\tvar handleObj, type;\r\n\t\tif ( types && types.preventDefault && types.handleObj ) {\r\n\r\n\t\t\t// ( event ) dispatched jQuery.Event\r\n\t\t\thandleObj = types.handleObj;\r\n\t\t\tjQuery( types.delegateTarget ).off(\r\n\t\t\t\thandleObj.namespace ?\r\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\r\n\t\t\t\t\thandleObj.origType,\r\n\t\t\t\thandleObj.selector,\r\n\t\t\t\thandleObj.handler\r\n\t\t\t);\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif ( typeof types === \"object\" ) {\r\n\r\n\t\t\t// ( types-object [, selector] )\r\n\t\t\tfor ( type in types ) {\r\n\t\t\t\tthis.off( type, selector, types[ type ] );\r\n\t\t\t}\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\tif ( selector === false || typeof selector === \"function\" ) {\r\n\r\n\t\t\t// ( types [, fn] )\r\n\t\t\tfn = selector;\r\n\t\t\tselector = undefined;\r\n\t\t}\r\n\t\tif ( fn === false ) {\r\n\t\t\tfn = returnFalse;\r\n\t\t}\r\n\t\treturn this.each( function() {\r\n\t\t\tjQuery.event.remove( this, types, fn, selector );\r\n\t\t} );\r\n\t},\r\n\r\n\ttrigger: function( type, data ) {\r\n\t\treturn this.each( function() {\r\n\t\t\tjQuery.event.trigger( type, data, this );\r\n\t\t} );\r\n\t},\r\n\ttriggerHandler: function( type, data ) {\r\n\t\tvar elem = this[ 0 ];\r\n\t\tif ( elem ) {\r\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\r\n\t\t}\r\n\t}\r\n} );\r\n\r\n\r\nvar rinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\r\n\trnoshimcache = new RegExp( \"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\" ),\r\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\r\n\r\n\t// Support: IE 10-11, Edge 10240+\r\n\t// In IE/Edge using regex groups here causes severe slowdowns.\r\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\r\n\trnoInnerhtml = /\\s*$/g,\r\n\tsafeFragment = createSafeFragment( document ),\r\n\tfragmentDiv = safeFragment.appendChild( document.createElement( \"div\" ) );\r\n\r\n// Support: IE<8\r\n// Manipulating tables requires a tbody\r\nfunction manipulationTarget( elem, content ) {\r\n\treturn jQuery.nodeName( elem, \"table\" ) &&\r\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\r\n\r\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\r\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\r\n\t\telem;\r\n}\r\n\r\n// Replace/restore the type attribute of script elements for safe DOM manipulation\r\nfunction disableScript( elem ) {\r\n\telem.type = ( jQuery.find.attr( elem, \"type\" ) !== null ) + \"/\" + elem.type;\r\n\treturn elem;\r\n}\r\nfunction restoreScript( elem ) {\r\n\tvar match = rscriptTypeMasked.exec( elem.type );\r\n\tif ( match ) {\r\n\t\telem.type = match[ 1 ];\r\n\t} else {\r\n\t\telem.removeAttribute( \"type\" );\r\n\t}\r\n\treturn elem;\r\n}\r\n\r\nfunction cloneCopyEvent( src, dest ) {\r\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar type, i, l,\r\n\t\toldData = jQuery._data( src ),\r\n\t\tcurData = jQuery._data( dest, oldData ),\r\n\t\tevents = oldData.events;\r\n\r\n\tif ( events ) {\r\n\t\tdelete curData.handle;\r\n\t\tcurData.events = {};\r\n\r\n\t\tfor ( type in events ) {\r\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\r\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// make the cloned public data object a copy from the original\r\n\tif ( curData.data ) {\r\n\t\tcurData.data = jQuery.extend( {}, curData.data );\r\n\t}\r\n}\r\n\r\nfunction fixCloneNodeIssues( src, dest ) {\r\n\tvar nodeName, e, data;\r\n\r\n\t// We do not need to do anything for non-Elements\r\n\tif ( dest.nodeType !== 1 ) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tnodeName = dest.nodeName.toLowerCase();\r\n\r\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\r\n\tif ( !support.noCloneEvent && dest[ jQuery.expando ] ) {\r\n\t\tdata = jQuery._data( dest );\r\n\r\n\t\tfor ( e in data.events ) {\r\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\r\n\t\t}\r\n\r\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\r\n\t\tdest.removeAttribute( jQuery.expando );\r\n\t}\r\n\r\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\r\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\r\n\t\tdisableScript( dest ).text = src.text;\r\n\t\trestoreScript( dest );\r\n\r\n\t// IE6-10 improperly clones children of object elements using classid.\r\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\r\n\t} else if ( nodeName === \"object\" ) {\r\n\t\tif ( dest.parentNode ) {\r\n\t\t\tdest.outerHTML = src.outerHTML;\r\n\t\t}\r\n\r\n\t\t// This path appears unavoidable for IE9. When cloning an object\r\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\r\n\t\t// If the src has innerHTML and the destination does not,\r\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\r\n\t\tif ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) {\r\n\t\t\tdest.innerHTML = src.innerHTML;\r\n\t\t}\r\n\r\n\t} else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\r\n\r\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\r\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\r\n\t\t// a checked appearance if the defaultChecked value isn't also set\r\n\r\n\t\tdest.defaultChecked = dest.checked = src.checked;\r\n\r\n\t\t// IE6-7 get confused and end up setting the value of a cloned\r\n\t\t// checkbox/radio button to an empty string instead of \"on\"\r\n\t\tif ( dest.value !== src.value ) {\r\n\t\t\tdest.value = src.value;\r\n\t\t}\r\n\r\n\t// IE6-8 fails to return the selected option to the default selected\r\n\t// state when cloning options\r\n\t} else if ( nodeName === \"option\" ) {\r\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\r\n\r\n\t// IE6-8 fails to set the defaultValue to the correct value when\r\n\t// cloning other types of input fields\r\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\r\n\t\tdest.defaultValue = src.defaultValue;\r\n\t}\r\n}\r\n\r\nfunction domManip( collection, args, callback, ignored ) {\r\n\r\n\t// Flatten any nested arrays\r\n\targs = concat.apply( [], args );\r\n\r\n\tvar first, node, hasScripts,\r\n\t\tscripts, doc, fragment,\r\n\t\ti = 0,\r\n\t\tl = collection.length,\r\n\t\tiNoClone = l - 1,\r\n\t\tvalue = args[ 0 ],\r\n\t\tisFunction = jQuery.isFunction( value );\r\n\r\n\t// We can't cloneNode fragments that contain checked, in WebKit\r\n\tif ( isFunction ||\r\n\t\t\t( l > 1 && typeof value === \"string\" &&\r\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\r\n\t\treturn collection.each( function( index ) {\r\n\t\t\tvar self = collection.eq( index );\r\n\t\t\tif ( isFunction ) {\r\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\r\n\t\t\t}\r\n\t\t\tdomManip( self, args, callback, ignored );\r\n\t\t} );\r\n\t}\r\n\r\n\tif ( l ) {\r\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\r\n\t\tfirst = fragment.firstChild;\r\n\r\n\t\tif ( fragment.childNodes.length === 1 ) {\r\n\t\t\tfragment = first;\r\n\t\t}\r\n\r\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\r\n\t\tif ( first || ignored ) {\r\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\r\n\t\t\thasScripts = scripts.length;\r\n\r\n\t\t\t// Use the original fragment for the last item\r\n\t\t\t// instead of the first because it can end up\r\n\t\t\t// being emptied incorrectly in certain situations (#8070).\r\n\t\t\tfor ( ; i < l; i++ ) {\r\n\t\t\t\tnode = fragment;\r\n\r\n\t\t\t\tif ( i !== iNoClone ) {\r\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\r\n\r\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\r\n\t\t\t\t\tif ( hasScripts ) {\r\n\r\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\r\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\r\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcallback.call( collection[ i ], node, i );\r\n\t\t\t}\r\n\r\n\t\t\tif ( hasScripts ) {\r\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\r\n\r\n\t\t\t\t// Reenable scripts\r\n\t\t\t\tjQuery.map( scripts, restoreScript );\r\n\r\n\t\t\t\t// Evaluate executable scripts on first document insertion\r\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\r\n\t\t\t\t\tnode = scripts[ i ];\r\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\r\n\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) &&\r\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\r\n\r\n\t\t\t\t\t\tif ( node.src ) {\r\n\r\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\r\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\r\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tjQuery.globalEval(\r\n\t\t\t\t\t\t\t\t( node.text || node.textContent || node.innerHTML || \"\" )\r\n\t\t\t\t\t\t\t\t\t.replace( rcleanScript, \"\" )\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Fix #11809: Avoid leaking memory\r\n\t\t\tfragment = first = null;\r\n\t\t}\r\n\t}\r\n\r\n\treturn collection;\r\n}\r\n\r\nfunction remove( elem, selector, keepData ) {\r\n\tvar node,\r\n\t\telems = selector ? jQuery.filter( selector, elem ) : elem,\r\n\t\ti = 0;\r\n\r\n\tfor ( ; ( node = elems[ i ] ) != null; i++ ) {\r\n\r\n\t\tif ( !keepData && node.nodeType === 1 ) {\r\n\t\t\tjQuery.cleanData( getAll( node ) );\r\n\t\t}\r\n\r\n\t\tif ( node.parentNode ) {\r\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\r\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\r\n\t\t\t}\r\n\t\t\tnode.parentNode.removeChild( node );\r\n\t\t}\r\n\t}\r\n\r\n\treturn elem;\r\n}\r\n\r\njQuery.extend( {\r\n\thtmlPrefilter: function( html ) {\r\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\r\n\t},\r\n\r\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\r\n\t\tvar destElements, node, clone, i, srcElements,\r\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\r\n\r\n\t\tif ( support.html5Clone || jQuery.isXMLDoc( elem ) ||\r\n\t\t\t!rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\r\n\r\n\t\t\tclone = elem.cloneNode( true );\r\n\r\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\r\n\t\t} else {\r\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\r\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\r\n\t\t}\r\n\r\n\t\tif ( ( !support.noCloneEvent || !support.noCloneChecked ) &&\r\n\t\t\t\t( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {\r\n\r\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\r\n\t\t\tdestElements = getAll( clone );\r\n\t\t\tsrcElements = getAll( elem );\r\n\r\n\t\t\t// Fix all IE cloning issues\r\n\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) {\r\n\r\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\r\n\t\t\t\tif ( destElements[ i ] ) {\r\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[ i ] );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Copy the events from the original to the clone\r\n\t\tif ( dataAndEvents ) {\r\n\t\t\tif ( deepDataAndEvents ) {\r\n\t\t\t\tsrcElements = srcElements || getAll( elem );\r\n\t\t\t\tdestElements = destElements || getAll( clone );\r\n\r\n\t\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) {\r\n\t\t\t\t\tcloneCopyEvent( node, destElements[ i ] );\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tcloneCopyEvent( elem, clone );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Preserve script evaluation history\r\n\t\tdestElements = getAll( clone, \"script\" );\r\n\t\tif ( destElements.length > 0 ) {\r\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\r\n\t\t}\r\n\r\n\t\tdestElements = srcElements = node = null;\r\n\r\n\t\t// Return the cloned set\r\n\t\treturn clone;\r\n\t},\r\n\r\n\tcleanData: function( elems, /* internal */ forceAcceptData ) {\r\n\t\tvar elem, type, id, data,\r\n\t\t\ti = 0,\r\n\t\t\tinternalKey = jQuery.expando,\r\n\t\t\tcache = jQuery.cache,\r\n\t\t\tattributes = support.attributes,\r\n\t\t\tspecial = jQuery.event.special;\r\n\r\n\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\r\n\t\t\tif ( forceAcceptData || acceptData( elem ) ) {\r\n\r\n\t\t\t\tid = elem[ internalKey ];\r\n\t\t\t\tdata = id && cache[ id ];\r\n\r\n\t\t\t\tif ( data ) {\r\n\t\t\t\t\tif ( data.events ) {\r\n\t\t\t\t\t\tfor ( type in data.events ) {\r\n\t\t\t\t\t\t\tif ( special[ type ] ) {\r\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\r\n\r\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\r\n\t\t\t\t\tif ( cache[ id ] ) {\r\n\r\n\t\t\t\t\t\tdelete cache[ id ];\r\n\r\n\t\t\t\t\t\t// Support: IE<9\r\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes\r\n\t\t\t\t\t\t// IE creates expando attributes along with the property\r\n\t\t\t\t\t\t// IE does not have a removeAttribute function on Document nodes\r\n\t\t\t\t\t\tif ( !attributes && typeof elem.removeAttribute !== \"undefined\" ) {\r\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\r\n\r\n\t\t\t\t\t\t// Webkit & Blink performance suffers when deleting properties\r\n\t\t\t\t\t\t// from DOM nodes, so set to undefined instead\r\n\t\t\t\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\telem[ internalKey ] = undefined;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tdeletedIds.push( id );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n} );\r\n\r\njQuery.fn.extend( {\r\n\r\n\t// Keep domManip exposed until 3.0 (gh-2225)\r\n\tdomManip: domManip,\r\n\r\n\tdetach: function( selector ) {\r\n\t\treturn remove( this, selector, true );\r\n\t},\r\n\r\n\tremove: function( selector ) {\r\n\t\treturn remove( this, selector );\r\n\t},\r\n\r\n\ttext: function( value ) {\r\n\t\treturn access( this, function( value ) {\r\n\t\t\treturn value === undefined ?\r\n\t\t\t\tjQuery.text( this ) :\r\n\t\t\t\tthis.empty().append(\r\n\t\t\t\t\t( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value )\r\n\t\t\t\t);\r\n\t\t}, null, value, arguments.length );\r\n\t},\r\n\r\n\tappend: function() {\r\n\t\treturn domManip( this, arguments, function( elem ) {\r\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\r\n\t\t\t\tvar target = manipulationTarget( this, elem );\r\n\t\t\t\ttarget.appendChild( elem );\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\tprepend: function() {\r\n\t\treturn domManip( this, arguments, function( elem ) {\r\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\r\n\t\t\t\tvar target = manipulationTarget( this, elem );\r\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\tbefore: function() {\r\n\t\treturn domManip( this, arguments, function( elem ) {\r\n\t\t\tif ( this.parentNode ) {\r\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\tafter: function() {\r\n\t\treturn domManip( this, arguments, function( elem ) {\r\n\t\t\tif ( this.parentNode ) {\r\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\r\n\t\t\t}\r\n\t\t} );\r\n\t},\r\n\r\n\tempty: function() {\r\n\t\tvar elem,\r\n\t\t\ti = 0;\r\n\r\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\r\n\r\n\t\t\t// Remove element nodes and prevent memory leaks\r\n\t\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\r\n\t\t\t}\r\n\r\n\t\t\t// Remove any remaining nodes\r\n\t\t\twhile ( elem.firstChild ) {\r\n\t\t\t\telem.removeChild( elem.firstChild );\r\n\t\t\t}\r\n\r\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\r\n\t\t\t// Support: IE<9\r\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\r\n\t\t\t\telem.options.length = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t},\r\n\r\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\r\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\r\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\r\n\r\n\t\treturn this.map( function() {\r\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\r\n\t\t} );\r\n\t},\r\n\r\n\thtml: function( value ) {\r\n\t\treturn access( this, function( value ) {\r\n\t\t\tvar elem = this[ 0 ] || {},\r\n\t\t\t\ti = 0,\r\n\t\t\t\tl = this.length;\r\n\r\n\t\t\tif ( value === undefined ) {\r\n\t\t\t\treturn elem.nodeType === 1 ?\r\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\r\n\t\t\t\t\tundefined;\r\n\t\t\t}\r\n\r\n\t\t\t// See if we can take a shortcut and just use innerHTML\r\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\r\n\t\t\t\t( support.htmlSerialize || !rnoshimcache.test( value ) ) &&\r\n\t\t\t\t( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\r\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\r\n\r\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\r\n\r\n\t\t\t\ttry {\r\n\t\t\t\t\tfor ( ; i < l; i++ ) {\r\n\r\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\r\n\t\t\t\t\t\telem = this[ i ] || {};\r\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\r\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\r\n\t\t\t\t\t\t\telem.innerHTML = value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\telem = 0;\r\n\r\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\r\n\t\t\t\t} catch ( e ) {}\r\n\t\t\t}\r\n\r\n\t\t\tif ( elem ) {\r\n\t\t\t\tthis.empty().append( value );\r\n\t\t\t}\r\n\t\t}, null, value, arguments.length );\r\n\t},\r\n\r\n\treplaceWith: function() {\r\n\t\tvar ignored = [];\r\n\r\n\t\t// Make the changes, replacing each non-ignored context element with the new content\r\n\t\treturn domManip( this, arguments, function( elem ) {\r\n\t\t\tvar parent = this.parentNode;\r\n\r\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\r\n\t\t\t\tjQuery.cleanData( getAll( this ) );\r\n\t\t\t\tif ( parent ) {\r\n\t\t\t\t\tparent.replaceChild( elem, this );\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t// Force callback invocation\r\n\t\t}, ignored );\r\n\t}\r\n} );\r\n\r\njQuery.each( {\r\n\tappendTo: \"append\",\r\n\tprependTo: \"prepend\",\r\n\tinsertBefore: \"before\",\r\n\tinsertAfter: \"after\",\r\n\treplaceAll: \"replaceWith\"\r\n}, function( name, original ) {\r\n\tjQuery.fn[ name ] = function( selector ) {\r\n\t\tvar elems,\r\n\t\t\ti = 0,\r\n\t\t\tret = [],\r\n\t\t\tinsert = jQuery( selector ),\r\n\t\t\tlast = insert.length - 1;\r\n\r\n\t\tfor ( ; i <= last; i++ ) {\r\n\t\t\telems = i === last ? this : this.clone( true );\r\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\r\n\r\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\r\n\t\t\tpush.apply( ret, elems.get() );\r\n\t\t}\r\n\r\n\t\treturn this.pushStack( ret );\r\n\t};\r\n} );\r\n\r\n\r\nvar iframe,\r\n\telemdisplay = {\r\n\r\n\t\t// Support: Firefox\r\n\t\t// We have to pre-define these values for FF (#10227)\r\n\t\tHTML: \"block\",\r\n\t\tBODY: \"block\"\r\n\t};\r\n\r\n/**\r\n * Retrieve the actual display of a element\r\n * @param {String} name nodeName of the element\r\n * @param {Object} doc Document object\r\n */\r\n\r\n// Called only from within defaultDisplay\r\nfunction actualDisplay( name, doc ) {\r\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\r\n\r\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\r\n\r\n\t// We don't have any data stored on the element,\r\n\t// so use \"detach\" method as fast way to get rid of the element\r\n\telem.detach();\r\n\r\n\treturn display;\r\n}\r\n\r\n/**\r\n * Try to determine the default display value of an element\r\n * @param {String} nodeName\r\n */\r\nfunction defaultDisplay( nodeName ) {\r\n\tvar doc = document,\r\n\t\tdisplay = elemdisplay[ nodeName ];\r\n\r\n\tif ( !display ) {\r\n\t\tdisplay = actualDisplay( nodeName, doc );\r\n\r\n\t\t// If the simple way fails, read from inside an iframe\r\n\t\tif ( display === \"none\" || !display ) {\r\n\r\n\t\t\t// Use the already-created iframe if possible\r\n\t\t\tiframe = ( iframe || jQuery( \"';\r\n break;\r\n case 3:\r\n delete config.title;\r\n delete config.closeBtn;\r\n config.icon === -1 && (config.icon === 0);\r\n layer.closeAll('loading');\r\n break;\r\n case 4:\r\n conType || (config.content = [config.content, 'body']);\r\n config.follow = config.content[1];\r\n config.content = config.content[0] + '';\r\n delete config.title;\r\n config.tips = typeof config.tips === 'object' ? config.tips : [config.tips, true];\r\n config.tipsMore || layer.closeAll('tips');\r\n break;\r\n }\r\n \r\n // 建立容器\r\n that.vessel(conType, function(html, titleHTML, moveElem){\r\n body.append(html[0]);\r\n conType ? function(){\r\n (config.type == 2 || config.type == 4) ? function(){\r\n $('body').append(html[1]);\r\n }() : function(){\r\n if(!content.parents('.'+doms[0])[0]){\r\n content.data('display', content.css('display')).show().addClass('layui-layer-wrap').wrap(html[1]);\r\n $('#'+ doms[0] + times).find('.'+doms[5]).before(titleHTML);\r\n }\r\n }();\r\n }() : body.append(html[1]);\r\n $('#'+ doms.MOVE)[0] || body.append(ready.moveElem = moveElem);\r\n \r\n that.layero = $('#'+ doms[0] + times);\r\n that.shadeo = $('#'+ doms.SHADE + times);\r\n \r\n config.scrollbar || ready.setScrollbar(times);\r\n }).auto(times);\r\n \r\n // 遮罩\r\n that.shadeo.css({\r\n 'background-color': config.shade[1] || '#000'\r\n ,'opacity': config.shade[0] || config.shade\r\n ,'transition': config.shade[2] || ''\r\n });\r\n that.shadeo.data(SHADE_KEY, config.shade[0] || config.shade);\r\n\r\n config.type == 2 && layer.ie == 6 && that.layero.find('iframe').attr('src', content[0]);\r\n\r\n // 坐标自适应浏览器窗口尺寸\r\n config.type == 4 ? that.tips() : function(){\r\n that.offset()\r\n // 首次弹出时,若 css 尚未加载,则等待 css 加载完毕后,重新设定尺寸\r\n parseInt(ready.getStyle(document.getElementById(doms.MOVE), 'z-index')) || function(){\r\n that.layero.css('visibility', 'hidden');\r\n layer.ready(function(){\r\n that.offset();\r\n that.layero.css('visibility', 'visible');\r\n });\r\n }();\r\n }();\r\n \r\n // 若是固定定位,则跟随 resize 事件来自适应坐标\r\n if(config.fixed){\r\n if(!ready.events.resize[that.index]){\r\n ready.events.resize[that.index] = function(){\r\n that.resize();\r\n };\r\n // 此处 resize 事件不会一直叠加,当关闭弹层时会移除该事件\r\n win.on('resize', ready.events.resize[that.index]);\r\n }\r\n }\r\n \r\n config.time <= 0 || setTimeout(function(){\r\n layer.close(that.index);\r\n }, config.time);\r\n that.move().callback();\r\n setAnim(that.layero);\r\n \r\n // 记录配置信息\r\n that.layero.data('config', config);\r\n};\r\n\r\n// 当前实例的 resize 事件\r\nClass.pt.resize = function(){\r\n var that = this;\r\n var config = that.config;\r\n \r\n that.offset();\r\n (/^\\d+%$/.test(config.area[0]) || /^\\d+%$/.test(config.area[1])) && that.auto(that.index);\r\n config.type == 4 && that.tips();\r\n};\r\n\r\n// 自适应\r\nClass.pt.auto = function(index){\r\n var that = this, config = that.config, layero = $('#'+ doms[0] + index);\r\n \r\n if((config.area[0] === '' || config.area[0] === 'auto') && config.maxWidth > 0){\r\n // 适配 ie7\r\n if(layer.ie && layer.ie < 8 && config.btn){\r\n layero.width(layero.innerWidth());\r\n }\r\n layero.outerWidth() > config.maxWidth && layero.width(config.maxWidth);\r\n }\r\n \r\n var area = [layero.innerWidth(), layero.innerHeight()];\r\n var titHeight = layero.find(doms[1]).outerHeight() || 0;\r\n var btnHeight = layero.find('.'+doms[6]).outerHeight() || 0;\r\n var setHeight = function(elem){\r\n elem = layero.find(elem);\r\n elem.height(area[1] - titHeight - btnHeight - 2*(parseFloat(elem.css('padding-top'))|0));\r\n };\r\n\r\n switch(config.type){\r\n case 2: \r\n setHeight('iframe');\r\n break;\r\n default:\r\n if(config.area[1] === '' || config.area[1] === 'auto'){\r\n if(config.maxHeight > 0 && layero.outerHeight() > config.maxHeight){\r\n area[1] = config.maxHeight;\r\n setHeight('.'+doms[5]);\r\n } else if(config.fixed && area[1] >= win.height()){\r\n area[1] = win.height();\r\n setHeight('.'+doms[5]);\r\n }\r\n } else {\r\n setHeight('.'+doms[5]);\r\n }\r\n break;\r\n }\r\n \r\n return that;\r\n};\r\n\r\n// 计算坐标\r\nClass.pt.offset = function(){\r\n var that = this, config = that.config, layero = that.layero;\r\n var area = [layero.outerWidth(), layero.outerHeight()];\r\n var type = typeof config.offset === 'object';\r\n that.offsetTop = (win.height() - area[1])/2;\r\n that.offsetLeft = (win.width() - area[0])/2;\r\n \r\n if(type){\r\n that.offsetTop = config.offset[0];\r\n that.offsetLeft = config.offset[1]||that.offsetLeft;\r\n } else if(config.offset !== 'auto'){\r\n \r\n if(config.offset === 't'){ // 上\r\n that.offsetTop = 0;\r\n } else if(config.offset === 'r'){ // 右\r\n that.offsetLeft = win.width() - area[0];\r\n } else if(config.offset === 'b'){ // 下\r\n that.offsetTop = win.height() - area[1];\r\n } else if(config.offset === 'l'){ // 左\r\n that.offsetLeft = 0;\r\n } else if(config.offset === 'lt'){ // 左上\r\n that.offsetTop = 0;\r\n that.offsetLeft = 0;\r\n } else if(config.offset === 'lb'){ // 左下\r\n that.offsetTop = win.height() - area[1];\r\n that.offsetLeft = 0;\r\n } else if(config.offset === 'rt'){ // 右上\r\n that.offsetTop = 0;\r\n that.offsetLeft = win.width() - area[0];\r\n } else if(config.offset === 'rb'){ // 右下\r\n that.offsetTop = win.height() - area[1];\r\n that.offsetLeft = win.width() - area[0];\r\n } else {\r\n that.offsetTop = config.offset;\r\n }\r\n \r\n }\r\n \r\n if(!config.fixed){\r\n that.offsetTop = /%$/.test(that.offsetTop) ? \r\n win.height()*parseFloat(that.offsetTop)/100\r\n : parseFloat(that.offsetTop);\r\n that.offsetLeft = /%$/.test(that.offsetLeft) ? \r\n win.width()*parseFloat(that.offsetLeft)/100\r\n : parseFloat(that.offsetLeft);\r\n that.offsetTop += win.scrollTop();\r\n that.offsetLeft += win.scrollLeft();\r\n }\r\n \r\n // 最小化窗口时的自适应\r\n if(layero.data('maxminStatus') === 'min'){\r\n that.offsetTop = win.height() - (layero.find(doms[1]).outerHeight() || 0);\r\n that.offsetLeft = layero.css('left');\r\n }\r\n\r\n // 设置坐标\r\n layero.css({\r\n top: that.offsetTop, \r\n left: that.offsetLeft\r\n });\r\n};\r\n\r\n// Tips\r\nClass.pt.tips = function(){\r\n var that = this, config = that.config, layero = that.layero;\r\n var layArea = [layero.outerWidth(), layero.outerHeight()], follow = $(config.follow);\r\n if(!follow[0]) follow = $('body');\r\n var goal = {\r\n width: follow.outerWidth(),\r\n height: follow.outerHeight(),\r\n top: follow.offset().top,\r\n left: follow.offset().left\r\n }, tipsG = layero.find('.layui-layer-TipsG');\r\n \r\n var guide = config.tips[0];\r\n config.tips[1] || tipsG.remove();\r\n \r\n goal.autoLeft = function(){\r\n if(goal.left + layArea[0] - win.width() > 0){\r\n goal.tipLeft = goal.left + goal.width - layArea[0];\r\n tipsG.css({right: 12, left: 'auto'});\r\n } else {\r\n goal.tipLeft = goal.left;\r\n }\r\n };\r\n \r\n // 辨别 tips 的方位\r\n // 21 为箭头大小 8*2 + 箭头相对父元素的top偏移 5\r\n goal.where = [function(){ // 上 \r\n goal.autoLeft();\r\n goal.tipTop = goal.top - layArea[1] - 10;\r\n tipsG.removeClass('layui-layer-TipsB').addClass('layui-layer-TipsT').css('border-right-color', config.tips[1]);\r\n }, function(){ // 右\r\n goal.tipLeft = goal.left + goal.width + 10;\r\n goal.tipTop = goal.top - (goal.height * 0.75 < 21 ? 21 - goal.height * 0.5 : 0);\r\n goal.tipTop = Math.max(goal.tipTop, 0);\r\n tipsG.removeClass('layui-layer-TipsL').addClass('layui-layer-TipsR').css('border-bottom-color', config.tips[1]); \r\n }, function(){ // 下\r\n goal.autoLeft();\r\n goal.tipTop = goal.top + goal.height + 10;\r\n tipsG.removeClass('layui-layer-TipsT').addClass('layui-layer-TipsB').css('border-right-color', config.tips[1]);\r\n }, function(){ // 左\r\n goal.tipLeft = goal.left - layArea[0] - 10;\r\n goal.tipTop = goal.top - (goal.height * 0.75 < 21 ? 21 - goal.height * 0.5 : 0);\r\n goal.tipTop = Math.max(goal.tipTop, 0);\r\n tipsG.removeClass('layui-layer-TipsR').addClass('layui-layer-TipsL').css('border-bottom-color', config.tips[1]);\r\n }];\r\n goal.where[guide-1]();\r\n \r\n /* 8*2为小三角形占据的空间 */\r\n if(guide === 1){\r\n goal.top - (win.scrollTop() + layArea[1] + 8*2) < 0 && goal.where[2]();\r\n } else if(guide === 2){\r\n win.width() - (goal.left + goal.width + layArea[0] + 8*2) > 0 || goal.where[3]()\r\n } else if(guide === 3){\r\n (goal.top - win.scrollTop() + goal.height + layArea[1] + 8*2) - win.height() > 0 && goal.where[0]();\r\n } else if(guide === 4){\r\n layArea[0] + 8*2 - goal.left > 0 && goal.where[1]()\r\n }\r\n\r\n layero.find('.'+doms[5]).css({\r\n 'background-color': config.tips[1], \r\n 'padding-right': (config.closeBtn ? '30px' : '')\r\n });\r\n layero.css({\r\n left: goal.tipLeft - (config.fixed ? win.scrollLeft() : 0), \r\n top: goal.tipTop - (config.fixed ? win.scrollTop() : 0)\r\n });\r\n}\r\n\r\n// 拖拽层\r\nClass.pt.move = function(){\r\n var that = this;\r\n var config = that.config;\r\n var _DOC = $(document);\r\n var layero = that.layero;\r\n var DATA_NAME = ['LAY_MOVE_DICT', 'LAY_RESIZE_DICT'];\r\n var moveElem = layero.find(config.move);\r\n var resizeElem = layero.find('.layui-layer-resize');\r\n \r\n // 给指定元素添加拖动光标\r\n if(config.move) moveElem.css('cursor', 'move');\r\n \r\n // 按下拖动元素\r\n moveElem.on('mousedown', function(e){\r\n if (e.button) {return;} // 不是左键不处理\r\n var othis = $(this);\r\n var dict = {};\r\n \r\n if(config.move){\r\n dict.layero = layero;\r\n dict.config = config;\r\n dict.offset = [\r\n e.clientX - parseFloat(layero.css('left')),\r\n e.clientY - parseFloat(layero.css('top'))\r\n ];\r\n \r\n othis.data(DATA_NAME[0], dict);\r\n ready.eventMoveElem = othis;\r\n ready.moveElem.css('cursor', 'move').show();\r\n }\r\n \r\n e.preventDefault();\r\n });\r\n \r\n // 按下右下角拉伸\r\n resizeElem.on('mousedown', function(e){\r\n var othis = $(this);\r\n var dict = {};\r\n \r\n if(config.resize){\r\n dict.layero = layero;\r\n dict.config = config;\r\n dict.offset = [e.clientX, e.clientY];\r\n dict.index = that.index;\r\n dict.area = [\r\n layero.outerWidth()\r\n ,layero.outerHeight()\r\n ];\r\n \r\n othis.data(DATA_NAME[1], dict);\r\n ready.eventResizeElem = othis;\r\n ready.moveElem.css('cursor', 'se-resize').show();\r\n }\r\n \r\n e.preventDefault();\r\n });\r\n \r\n // 拖动元素,避免多次调用实例造成事件叠加\r\n if(ready.docEvent) return that;\r\n _DOC.on('mousemove', function(e){\r\n // 拖拽移动\r\n if(ready.eventMoveElem){\r\n var dict = ready.eventMoveElem.data(DATA_NAME[0]) || {}\r\n ,layero = dict.layero\r\n ,config = dict.config;\r\n \r\n var X = e.clientX - dict.offset[0];\r\n var Y = e.clientY - dict.offset[1];\r\n var fixed = layero.css('position') === 'fixed';\r\n \r\n e.preventDefault();\r\n \r\n dict.stX = fixed ? 0 : win.scrollLeft();\r\n dict.stY = fixed ? 0 : win.scrollTop();\r\n\r\n // 控制元素不被拖出窗口外\r\n if(!config.moveOut){\r\n var setRig = win.width() - layero.outerWidth() + dict.stX;\r\n var setBot = win.height() - layero.outerHeight() + dict.stY; \r\n X < dict.stX && (X = dict.stX);\r\n X > setRig && (X = setRig); \r\n Y < dict.stY && (Y = dict.stY);\r\n Y > setBot && (Y = setBot);\r\n }\r\n \r\n // 拖动时跟随鼠标位置\r\n layero.css({\r\n left: X,\r\n top: Y\r\n });\r\n }\r\n \r\n // Resize\r\n if(ready.eventResizeElem){\r\n var dict = ready.eventResizeElem.data(DATA_NAME[1]) || {};\r\n var config = dict.config;\r\n \r\n var X = e.clientX - dict.offset[0];\r\n var Y = e.clientY - dict.offset[1];\r\n \r\n e.preventDefault();\r\n \r\n // 拉伸宽高\r\n layer.style(dict.index, {\r\n width: dict.area[0] + X\r\n ,height: dict.area[1] + Y\r\n });\r\n \r\n config.resizing && config.resizing(dict.layero);\r\n }\r\n }).on('mouseup', function(e){\r\n if(ready.eventMoveElem){\r\n var dict = ready.eventMoveElem.data(DATA_NAME[0]) || {};\r\n var config = dict.config;\r\n \r\n ready.eventMoveElem.removeData(DATA_NAME[0]);\r\n delete ready.eventMoveElem;\r\n ready.moveElem.hide();\r\n config.moveEnd && config.moveEnd(dict.layero);\r\n }\r\n if(ready.eventResizeElem){\r\n ready.eventResizeElem.removeData(DATA_NAME[1]);\r\n delete ready.eventResizeElem;\r\n ready.moveElem.hide();\r\n }\r\n });\r\n \r\n ready.docEvent = true; // 已给 document 执行全局事件\r\n return that;\r\n};\r\n\r\nClass.pt.btnLoading = function(btnElem, isLoading){\r\n if(isLoading){\r\n var loadingTpl = '';\r\n if(btnElem.find('.layui-layer-btn-loading-icon')[0]) return;\r\n btnElem.addClass('layui-layer-btn-is-loading').attr({disabled: ''}).prepend(loadingTpl);\r\n }else{\r\n btnElem.removeClass('layui-layer-btn-is-loading').removeAttr('disabled').find('.layui-layer-btn-loading-icon').remove();\r\n }\r\n}\r\n\r\nClass.pt.callback = function(){\r\n var that = this, layero = that.layero, config = that.config;\r\n that.openLayer();\r\n if(config.success){\r\n if(config.type == 2){\r\n layero.find('iframe').on('load', function(){\r\n config.success(layero, that.index, that);\r\n });\r\n } else {\r\n config.success(layero, that.index, that);\r\n }\r\n }\r\n layer.ie == 6 && that.IE6(layero);\r\n \r\n // 按钮\r\n layero.find('.'+ doms[6]).children('a').on('click', function(){\r\n var btnElem = $(this);\r\n var index = btnElem.index();\r\n if(btnElem.attr('disabled')) return;\r\n\r\n // 若为异步按钮\r\n if(config.btnAsync){\r\n var btnCallback = index === 0 ? (config.yes || config['btn1']) : config['btn'+(index+1)];\r\n that.loading = function(isLoading){\r\n that.btnLoading(btnElem, isLoading);\r\n }\r\n\r\n if(btnCallback){\r\n ready.promiseLikeResolve(btnCallback.call(config, that.index, layero, that))\r\n .then(function(result){\r\n if(result !== false){\r\n layer.close(that.index)\r\n }\r\n }, function(reason){\r\n reason !== undefined && window.console && window.console.error('layer error hint: ' + reason);\r\n });\r\n }else{\r\n layer.close(that.index);\r\n }\r\n } else { // 普通按钮\r\n if(index === 0){\r\n if(config.yes){\r\n config.yes(that.index, layero, that);\r\n } else if(config['btn1']){\r\n config['btn1'](that.index, layero, that);\r\n } else {\r\n layer.close(that.index);\r\n }\r\n } else {\r\n var close = config['btn'+(index+1)] && config['btn'+(index+1)](that.index, layero, that);\r\n close === false || layer.close(that.index);\r\n }\r\n }\r\n });\r\n \r\n // 取消\r\n function cancel(){\r\n var close = config.cancel && config.cancel(that.index, layero, that);\r\n close === false || layer.close(that.index);\r\n }\r\n \r\n // 右上角关闭回调\r\n layero.find('.'+ doms[7]).on('click', cancel);\r\n \r\n // 点遮罩关闭\r\n if(config.shadeClose){\r\n that.shadeo.on('click', function(){\r\n layer.close(that.index);\r\n });\r\n } \r\n \r\n // 最小化\r\n layero.find('.layui-layer-min').on('click', function(){\r\n var min = config.min && config.min(layero, that.index, that);\r\n min === false || layer.min(that.index, config);\r\n });\r\n \r\n // 全屏/还原\r\n layero.find('.layui-layer-max').on('click', function(){\r\n if($(this).hasClass('layui-layer-maxmin')){\r\n layer.restore(that.index);\r\n config.restore && config.restore(layero, that.index, that);\r\n } else {\r\n layer.full(that.index, config);\r\n setTimeout(function(){\r\n config.full && config.full(layero, that.index, that);\r\n }, 100);\r\n }\r\n });\r\n\r\n config.end && (ready.end[that.index] = config.end);\r\n config.beforeEnd && (ready.beforeEnd[that.index] = $.proxy(config.beforeEnd, config, layero, that.index, that));\r\n};\r\n\r\n// for ie6 恢复 select\r\nready.reselect = function(){\r\n $.each($('select'), function(index , value){\r\n var sthis = $(this);\r\n if(!sthis.parents('.'+doms[0])[0]){\r\n (sthis.attr('layer') == 1 && $('.'+doms[0]).length < 1) && sthis.removeAttr('layer').show(); \r\n }\r\n sthis = null;\r\n });\r\n}; \r\n\r\nClass.pt.IE6 = function(layero){\r\n // 隐藏select\r\n $('select').each(function(index , value){\r\n var sthis = $(this);\r\n if(!sthis.parents('.'+doms[0])[0]){\r\n sthis.css('display') === 'none' || sthis.attr({'layer' : '1'}).hide();\r\n }\r\n sthis = null;\r\n });\r\n};\r\n\r\n// 需依赖原型的对外方法\r\nClass.pt.openLayer = function(){\r\n var that = this;\r\n \r\n // 置顶当前窗口\r\n layer.zIndex = that.config.zIndex;\r\n layer.setTop = function(layero){\r\n var setZindex = function(){\r\n layer.zIndex++;\r\n layero.css('z-index', layer.zIndex + 1);\r\n };\r\n layer.zIndex = parseInt(layero[0].style.zIndex);\r\n layero.on('mousedown', setZindex);\r\n return layer.zIndex;\r\n };\r\n};\r\n\r\n// 记录宽高坐标,用于还原\r\nready.record = function(layero){\r\n if(!layero[0]) return window.console && console.error('index error');\r\n var type = layero.attr('type');\r\n var contentElem = layero.find('.layui-layer-content');\r\n var contentRecordHeightElem = type === ready.type[2] ? contentElem.children('iframe') : contentElem;\r\n var area = [\r\n layero[0].style.width || ready.getStyle(layero[0], 'width'),\r\n layero[0].style.height || ready.getStyle(layero[0], 'height'),\r\n layero.position().top, \r\n layero.position().left + parseFloat(layero.css('margin-left'))\r\n ];\r\n layero.find('.layui-layer-max').addClass('layui-layer-maxmin');\r\n layero.attr({area: area});\r\n contentElem.data(RECORD_HEIGHT_KEY, ready.getStyle(contentRecordHeightElem[0], 'height'));\r\n};\r\n\r\n// 设置页面滚动条\r\nready.setScrollbar = function(index){\r\n doms.html.css('overflow', 'hidden').attr('layer-full', index);\r\n};\r\n\r\n// 恢复页面滚动条\r\nready.restScrollbar = function(index){\r\n if(doms.html.attr('layer-full') == index){\r\n doms.html[0].style[doms.html[0].style.removeProperty \r\n ? 'removeProperty' \r\n : 'removeAttribute']('overflow');\r\n doms.html.removeAttr('layer-full');\r\n }\r\n};\r\n\r\n// 类似 Promise.resolve\r\nready.promiseLikeResolve = function(value){\r\n var deferred = $.Deferred();\r\n\r\n if(value && typeof value.then === 'function'){\r\n value.then(deferred.resolve, deferred.reject);\r\n }else{\r\n deferred.resolve(value);\r\n }\r\n return deferred.promise();\r\n}\r\n\r\n/** 内置成员 */\r\n\r\nwindow.layer = layer;\r\n\r\n// 获取子 iframe 的 DOM\r\nlayer.getChildFrame = function(selector, index){\r\n index = index || $('.'+doms[4]).attr('times');\r\n return $('#'+ doms[0] + index).find('iframe').contents().find(selector); \r\n};\r\n\r\n// 得到当前 iframe 层的索引,子 iframe 时使用\r\nlayer.getFrameIndex = function(name){\r\n return $('#'+ name).parents('.'+doms[4]).attr('times');\r\n};\r\n\r\n// iframe 层自适应宽高\r\nlayer.iframeAuto = function(index){\r\n if(!index) return;\r\n var heg = layer.getChildFrame('html', index).outerHeight();\r\n var layero = $('#'+ doms[0] + index);\r\n var titHeight = layero.find(doms[1]).outerHeight() || 0;\r\n var btnHeight = layero.find('.'+doms[6]).outerHeight() || 0;\r\n layero.css({height: heg + titHeight + btnHeight});\r\n layero.find('iframe').css({height: heg});\r\n};\r\n\r\n// 重置 iframe url\r\nlayer.iframeSrc = function(index, url){\r\n $('#'+ doms[0] + index).find('iframe').attr('src', url);\r\n};\r\n\r\n// 设定层的样式\r\nlayer.style = function(index, options, limit){\r\n var layero = $('#'+ doms[0] + index);\r\n var contentElem = layero.find('.layui-layer-content');\r\n var type = layero.attr('type');\r\n var titHeight = layero.find(doms[1]).outerHeight() || 0;\r\n var btnHeight = layero.find('.'+doms[6]).outerHeight() || 0;\r\n var minLeft = layero.attr('minLeft');\r\n \r\n // loading 和 tips 层不允许更改\r\n if(type === ready.type[3] || type === ready.type[4]){\r\n return;\r\n }\r\n \r\n if(!limit){\r\n if(parseFloat(options.width) <= 260){\r\n options.width = 260;\r\n }\r\n \r\n if(parseFloat(options.height) - titHeight - btnHeight <= 64){\r\n options.height = 64 + titHeight + btnHeight;\r\n }\r\n }\r\n layero.css(options);\r\n btnHeight = layero.find('.'+doms[6]).outerHeight() || 0;\r\n \r\n if(type === ready.type[2]){\r\n layero.find('iframe').css({\r\n height: (typeof options.height === 'number' ? options.height : layero.height()) - titHeight - btnHeight\r\n });\r\n } else {\r\n contentElem.css({\r\n height: (typeof options.height === 'number' ? options.height : layero.height()) - titHeight - btnHeight\r\n - parseFloat(contentElem.css('padding-top'))\r\n - parseFloat(contentElem.css('padding-bottom'))\r\n })\r\n }\r\n};\r\n\r\n// 最小化\r\nlayer.min = function(index, options){\r\n var layero = $('#'+ doms[0] + index);\r\n var maxminStatus = layero.data('maxminStatus');\r\n\r\n if(maxminStatus === 'min') return; // 当前的状态是否已经是最小化\r\n if(maxminStatus === 'max') layer.restore(index); // 若当前为最大化,则先还原后再最小化\r\n\r\n layero.data('maxminStatus', 'min');\r\n options = options || layero.data('config') || {};\r\n\r\n var shadeo = $('#'+ doms.SHADE + index);\r\n var elemMin = layero.find('.layui-layer-min');\r\n var titHeight = layero.find(doms[1]).outerHeight() || 0;\r\n var minLeft = layero.attr('minLeft'); // 最小化时的横坐标\r\n var hasMinLeft = typeof minLeft === 'string'; // 是否已经赋值过最小化坐标\r\n var left = hasMinLeft ? minLeft : (181*ready.minStackIndex)+'px';\r\n var position = layero.css('position');\r\n var minWidth = 180; // 最小化时的宽度\r\n var settings = {\r\n width: minWidth\r\n ,height: titHeight\r\n ,position: 'fixed'\r\n ,overflow: 'hidden'\r\n };\r\n\r\n ready.record(layero); // 记录当前尺寸、坐标,用于还原\r\n\r\n // 简易最小化补位\r\n if(ready.minStackArr.length > 0){\r\n left = ready.minStackArr[0];\r\n ready.minStackArr.shift();\r\n }\r\n\r\n // left 是否超出边界\r\n if(parseFloat(left) + minWidth > win.width()){\r\n left = win.width() - minWidth - function(){\r\n ready.minStackArr.edgeIndex = ready.minStackArr.edgeIndex || 0;\r\n return ready.minStackArr.edgeIndex += 3;\r\n }();\r\n if(left < 0) left = 0;\r\n }\r\n \r\n // 是否堆叠在左下角\r\n if(options.minStack){\r\n settings.left = left;\r\n settings.top = win.height() - titHeight;\r\n hasMinLeft || ready.minStackIndex++; // 若未赋值过最小化坐标,则最小化操作索引自增\r\n layero.attr('minLeft', left);\r\n }\r\n \r\n layero.attr('position', position);\r\n layer.style(index, settings, true);\r\n\r\n elemMin.hide();\r\n layero.attr('type') === 'page' && layero.find(doms[4]).hide();\r\n ready.restScrollbar(index);\r\n\r\n // 隐藏遮罩\r\n shadeo.hide();\r\n};\r\n\r\n// 还原\r\nlayer.restore = function(index){\r\n var layero = $('#'+ doms[0] + index);\r\n var shadeo = $('#'+ doms.SHADE + index);\r\n var contentElem = layero.find('.layui-layer-content');\r\n var area = layero.attr('area').split(',');\r\n var type = layero.attr('type');\r\n var options = layero.data('config') || {};\r\n var contentRecordHeight = contentElem.data(RECORD_HEIGHT_KEY);\r\n\r\n layero.removeData('maxminStatus'); // 移除最大最小状态\r\n \r\n // 恢复原来尺寸\r\n layer.style(index, {\r\n width: area[0], // 数值或百分比\r\n height: area[1],\r\n top: parseFloat(area[2]),\r\n left: parseFloat(area[3]),\r\n position: layero.attr('position'),\r\n overflow: 'visible'\r\n }, true);\r\n \r\n layero.find('.layui-layer-max').removeClass('layui-layer-maxmin');\r\n layero.find('.layui-layer-min').show();\r\n type === 'page' && layero.find(doms[4]).show();\r\n\r\n // 恢复页面滚动条弹层打开时的状态\r\n options.scrollbar ? ready.restScrollbar(index) : ready.setScrollbar(index);\r\n\r\n // #1604\r\n if(contentRecordHeight !== undefined){\r\n contentElem.removeData(RECORD_HEIGHT_KEY);\r\n var contentRecordHeightElem = type === ready.type[2] ? contentElem.children('iframe') : contentElem;\r\n contentRecordHeightElem.css({height: contentRecordHeight});\r\n }\r\n \r\n // 恢复遮罩\r\n shadeo.show();\r\n // ready.events.resize[index](); // ?\r\n};\r\n\r\n// 全屏(最大化)\r\nlayer.full = function(index){\r\n var layero = $('#'+ doms[0] + index);\r\n var maxminStatus = layero.data('maxminStatus');\r\n\r\n if(maxminStatus === 'max') return // 检查当前的状态是否已经是最大化\r\n if(maxminStatus === 'min') layer.restore(index); // 若当前为最小化,则先还原后再最大化\r\n\r\n layero.data('maxminStatus', 'max');\r\n ready.record(layero); // 记录当前尺寸、坐标\r\n\r\n if(!doms.html.attr('layer-full')){\r\n ready.setScrollbar(index);\r\n }\r\n\r\n setTimeout(function(){\r\n var isfix = layero.css('position') === 'fixed';\r\n layer.style(index, {\r\n top: isfix ? 0 : win.scrollTop(),\r\n left: isfix ? 0 : win.scrollLeft(),\r\n width: '100%',\r\n height: '100%'\r\n }, true);\r\n layero.find('.layui-layer-min').hide();\r\n }, 100);\r\n};\r\n\r\n// 改变 title\r\nlayer.title = function(name, index){\r\n var title = $('#'+ doms[0] + (index || layer.index)).find(doms[1]);\r\n title.html(name);\r\n};\r\n\r\n// 关闭 layer 总方法\r\nlayer.close = function(index, callback){\r\n var layero = function(){\r\n var closest = $('.'+ doms[0]).children('#'+ index).closest('.'+ doms[0]);\r\n return closest[0] ? (\r\n index = closest.attr('times'),\r\n closest\r\n ) : $('#'+ doms[0] + index)\r\n }();\r\n var type = layero.attr('type');\r\n var options = layero.data('config') || {};\r\n var hideOnClose = options.id && options.hideOnClose; // 是否关闭时移除弹层容器\r\n\r\n if(!layero[0]) return;\r\n\r\n var executor = function(){\r\n // 关闭动画\r\n var closeAnim = ({\r\n slideDown: 'layer-anim-slide-down-out',\r\n slideLeft: 'layer-anim-slide-left-out',\r\n slideUp: 'layer-anim-slide-up-out',\r\n slideRight: 'layer-anim-slide-right-out'\r\n })[options.anim] || 'layer-anim-close';\r\n \r\n // 移除主容器\r\n var remove = function(){\r\n var WRAP = 'layui-layer-wrap';\r\n \r\n // 是否关闭时隐藏弹层容器\r\n if(hideOnClose){\r\n layero.removeClass('layer-anim '+ closeAnim);\r\n return layero.hide();\r\n }\r\n \r\n // 是否为页面捕获层\r\n if(type === ready.type[1] && layero.attr('conType') === 'object'){\r\n layero.children(':not(.'+ doms[5] +')').remove();\r\n var wrap = layero.find('.'+WRAP);\r\n for(var i = 0; i < 2; i++){\r\n wrap.unwrap();\r\n }\r\n wrap.css('display', wrap.data('display')).removeClass(WRAP);\r\n } else {\r\n // 低版本 IE 回收 iframe\r\n if(type === ready.type[2]){\r\n try {\r\n var iframe = $('#'+ doms[4] + index)[0];\r\n iframe.contentWindow.document.write('');\r\n iframe.contentWindow.close();\r\n layero.find('.'+doms[5])[0].removeChild(iframe);\r\n } catch(e){}\r\n }\r\n layero[0].innerHTML = '';\r\n layero.remove();\r\n }\r\n \r\n typeof ready.end[index] === 'function' && ready.end[index]();\r\n delete ready.end[index];\r\n typeof callback === 'function' && callback();\r\n \r\n // 移除 reisze 事件\r\n if(ready.events.resize[index]){\r\n win.off('resize', ready.events.resize[index]);\r\n delete ready.events.resize[index];\r\n }\r\n };\r\n // 移除遮罩\r\n var shadeo = $('#'+ doms.SHADE + index);\r\n if((layer.ie && layer.ie < 10) || !options.isOutAnim){\r\n shadeo[hideOnClose ? 'hide' : 'remove']();\r\n }else{\r\n shadeo.css({opacity: 0});\r\n setTimeout(function(){\r\n shadeo[hideOnClose ? 'hide' : 'remove']();\r\n }, 350);\r\n }\r\n \r\n // 是否允许关闭动画\r\n if(options.isOutAnim){\r\n layero.addClass('layer-anim '+ closeAnim);\r\n }\r\n \r\n layer.ie == 6 && ready.reselect();\r\n ready.restScrollbar(index); \r\n \r\n // 记住被关闭层的最小化堆叠坐标\r\n if(typeof layero.attr('minLeft') === 'string'){\r\n ready.minStackIndex--;\r\n ready.minStackArr.push(layero.attr('minLeft'));\r\n }\r\n \r\n if((layer.ie && layer.ie < 10) || !options.isOutAnim){\r\n remove()\r\n } else {\r\n setTimeout(function(){\r\n remove();\r\n }, 200);\r\n }\r\n }\r\n\r\n if(!hideOnClose && typeof ready.beforeEnd[index] === 'function'){\r\n ready.promiseLikeResolve(ready.beforeEnd[index]())\r\n .then(function(result){\r\n if(result !== false){\r\n delete ready.beforeEnd[index];\r\n executor();\r\n }\r\n }, function(reason){\r\n reason !== undefined && window.console && window.console.error('layer error hint: ' + reason);\r\n });\r\n }else{\r\n delete ready.beforeEnd[index];\r\n executor();\r\n }\r\n};\r\n\r\n// 关闭所有层\r\nlayer.closeAll = function(type, callback){\r\n if(typeof type === 'function'){\r\n callback = type;\r\n type = null;\r\n }\r\n var domsElem = $('.'+doms[0]);\r\n $.each(domsElem, function(_index){\r\n var othis = $(this);\r\n var is = type ? (othis.attr('type') === type) : 1;\r\n is && layer.close(othis.attr('times'), _index === domsElem.length - 1 ? callback : null);\r\n is = null;\r\n });\r\n if(domsElem.length === 0) typeof callback === 'function' && callback();\r\n};\r\n\r\n// 根据弹层类型关闭最近打开的层\r\nlayer.closeLast = function(type, callback){\r\n var layerIndexList = [];\r\n var isArrayType = $.isArray(type);\r\n $(typeof type === 'string' ? '.layui-layer-' + type : '.layui-layer').each(function(i, el){\r\n var layero = $(el);\r\n var shouldSkip = (isArrayType && type.indexOf(layero.attr('type')) === -1) || layero.css('display') === 'none';\r\n if(shouldSkip) return true;\r\n layerIndexList.push(Number(layero.attr('times')));\r\n });\r\n if(layerIndexList.length > 0){\r\n var layerIndexMax = Math.max.apply(null, layerIndexList);\r\n layer.close(layerIndexMax, callback);\r\n }\r\n};\r\n\r\n\r\n/*\r\n * 拓展模块,layui 开始合并在一起\r\n */\r\n\r\n\r\nvar cache = layer.cache || {};\r\nvar skin = function(type){\r\n return (cache.skin ? (' ' + cache.skin + ' ' + cache.skin + '-'+type) : '');\r\n}; \r\n \r\n// 仿系统 prompt\r\nlayer.prompt = function(options, yes){\r\n var style = '', placeholder = '';\r\n options = options || {};\r\n \r\n if(typeof options === 'function') yes = options;\r\n \r\n if(options.area){\r\n var area = options.area;\r\n style = 'style=\"width: '+ area[0] +'; height: '+ area[1] + ';\"';\r\n delete options.area;\r\n }\r\n if (options.placeholder) {\r\n placeholder = ' placeholder=\"' + options.placeholder + '\"';\r\n }\r\n var prompt, content = options.formType == 2 ? '' : function () {\r\n return '';\r\n }();\r\n \r\n var success = options.success;\r\n delete options.success;\r\n \r\n return layer.open($.extend({\r\n type: 1,\r\n btn: ['确定','取消'],\r\n content: content,\r\n skin: 'layui-layer-prompt' + skin('prompt'),\r\n maxWidth: win.width(),\r\n success: function(layero){\r\n prompt = layero.find('.layui-layer-input');\r\n prompt.val(options.value || '').focus();\r\n typeof success === 'function' && success(layero);\r\n },\r\n resize: false,\r\n yes: function(index){\r\n var value = prompt.val();\r\n if(value.length > (options.maxlength||500)) {\r\n layer.tips('最多输入'+ (options.maxlength || 500) +'个字符', prompt, {tips: 1});\r\n } else {\r\n yes && yes(value, index, prompt);\r\n }\r\n }\r\n }, options));\r\n};\r\n\r\n// tab 层\r\nlayer.tab = function(options){\r\n options = options || {};\r\n \r\n var tab = options.tab || {};\r\n var THIS = 'layui-this';\r\n var success = options.success;\r\n \r\n delete options.success;\r\n \r\n return layer.open($.extend({\r\n type: 1,\r\n skin: 'layui-layer-tab' + skin('tab'),\r\n resize: false,\r\n title: function(){\r\n var len = tab.length, ii = 1, str = '';\r\n if(len > 0){\r\n str = ''+ tab[0].title +'';\r\n for(; ii < len; ii++){\r\n str += ''+ tab[ii].title +'';\r\n }\r\n }\r\n return str;\r\n }(),\r\n content: '
          '+ function(){\r\n var len = tab.length, ii = 1, str = '';\r\n if(len > 0){\r\n str = '
        • '+ (tab[0].content || 'no content') +'
        • ';\r\n for(; ii < len; ii++){\r\n str += '
        • '+ (tab[ii].content || 'no content') +'
        • ';\r\n }\r\n }\r\n return str;\r\n }() +'
        ',\r\n success: function(layero){\r\n var btn = layero.find('.layui-layer-title').children();\r\n var main = layero.find('.layui-layer-tabmain').children();\r\n btn.on('mousedown', function(e){\r\n e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;\r\n var othis = $(this), index = othis.index();\r\n othis.addClass(THIS).siblings().removeClass(THIS);\r\n main.eq(index).show().siblings().hide();\r\n typeof options.change === 'function' && options.change(index);\r\n });\r\n typeof success === 'function' && success(layero);\r\n }\r\n }, options));\r\n};\r\n\r\n// 图片层\r\nlayer.photos = function(options, loop, key){\r\n var dict = {};\r\n\r\n // 默认属性\r\n options = $.extend(true, {\r\n toolbar: true,\r\n footer: true\r\n }, options);\r\n\r\n if(!options.photos) return;\r\n \r\n // 若 photos 并非选择器或 jQuery 对象,则为普通 object\r\n var isObject = !(typeof options.photos === 'string' || options.photos instanceof $);\r\n var photos = isObject ? options.photos : {};\r\n var data = photos.data || [];\r\n var start = photos.start || 0;\r\n var success = options.success;\r\n \r\n dict.imgIndex = (start|0) + 1;\r\n options.img = options.img || 'img';\r\n delete options.success;\r\n \r\n // 若 options.photos 不是一个对象\r\n if(!isObject){ // 页面直接获取\r\n var parent = $(options.photos), pushData = function(){\r\n data = [];\r\n parent.find(options.img).each(function(index){\r\n var othis = $(this);\r\n othis.attr('layer-index', index);\r\n data.push({\r\n alt: othis.attr('alt'),\r\n pid: othis.attr('layer-pid'),\r\n src: othis.attr('lay-src') || othis.attr('layer-src') || othis.attr('src'),\r\n thumb: othis.attr('src')\r\n });\r\n });\r\n };\r\n \r\n pushData();\r\n \r\n if (data.length === 0) return;\r\n \r\n loop || parent.on('click', options.img, function(){\r\n pushData();\r\n var othis = $(this), index = othis.attr('layer-index'); \r\n layer.photos($.extend(options, {\r\n photos: {\r\n start: index,\r\n data: data,\r\n tab: options.tab\r\n },\r\n full: options.full\r\n }), true);\r\n });\r\n \r\n // 不直接弹出\r\n if (!loop) return;\r\n } else if (data.length === 0){\r\n return layer.msg('没有图片');\r\n }\r\n \r\n // 上一张\r\n dict.imgprev = function(key){\r\n dict.imgIndex--;\r\n if(dict.imgIndex < 1){\r\n dict.imgIndex = data.length;\r\n }\r\n dict.tabimg(key);\r\n };\r\n \r\n // 下一张\r\n dict.imgnext = function(key,errorMsg){\r\n dict.imgIndex++;\r\n if(dict.imgIndex > data.length){\r\n dict.imgIndex = 1;\r\n if (errorMsg) {return}\r\n }\r\n dict.tabimg(key)\r\n };\r\n \r\n // 方向键\r\n dict.keyup = function(event){\r\n if(!dict.end){\r\n var code = event.keyCode;\r\n event.preventDefault();\r\n if(code === 37){\r\n dict.imgprev(true);\r\n } else if(code === 39) {\r\n dict.imgnext(true);\r\n } else if(code === 27) {\r\n layer.close(dict.index);\r\n }\r\n }\r\n }\r\n \r\n // 切换\r\n dict.tabimg = function(key){\r\n if(data.length <= 1) return;\r\n photos.start = dict.imgIndex - 1;\r\n layer.close(dict.index);\r\n return layer.photos(options, true, key);\r\n }\r\n\r\n dict.isNumber = function (n) {\r\n return typeof n === 'number' && !isNaN(n);\r\n }\r\n\r\n dict.image = {};\r\n\r\n dict.getTransform = function(opts){\r\n var transforms = [];\r\n var rotate = opts.rotate;\r\n var scaleX = opts.scaleX;\r\n var scale = opts.scale;\r\n\r\n if (dict.isNumber(rotate) && rotate !== 0) {\r\n transforms.push('rotate(' + rotate + 'deg)');\r\n }\r\n\r\n if (dict.isNumber(scaleX) && scaleX !== 1) {\r\n transforms.push('scaleX(' + scaleX + ')');\r\n }\r\n\r\n if (dict.isNumber(scale)) {\r\n transforms.push('scale(' + scale + ')');\r\n }\r\n\r\n return transforms.length ? transforms.join(' ') : 'none';\r\n }\r\n \r\n // 一些动作\r\n dict.event = function(layero, index, that){\r\n // 上一张\r\n dict.main.find('.layui-layer-photos-prev').on('click', function(event){\r\n event.preventDefault();\r\n dict.imgprev(true);\r\n }); \r\n \r\n // 下一张\r\n dict.main.find('.layui-layer-photos-next').on('click', function(event){\r\n event.preventDefault();\r\n dict.imgnext(true);\r\n });\r\n \r\n $(document).on('keyup', dict.keyup);\r\n\r\n // 头部工具栏事件\r\n layero.off('click').on('click','*[toolbar-event]', function () {\r\n var othis = $(this);\r\n var event = othis.attr('toolbar-event');\r\n switch (event) {\r\n case 'rotate':\r\n dict.image.rotate = ((dict.image.rotate || 0) + Number(othis.attr('data-option'))) % 360;\r\n dict.imgElem.css({\r\n transform: dict.getTransform(dict.image)\r\n });\r\n break;\r\n case 'scalex':\r\n dict.image.scaleX = dict.image.scaleX === -1 ? 1 : -1;\r\n dict.imgElem.css({\r\n transform: dict.getTransform(dict.image)\r\n });\r\n break;\r\n case 'zoom':\r\n var ratio = Number(othis.attr('data-option'));\r\n dict.image.scale = (dict.image.scale || 1) + ratio;\r\n // 缩小状态最小值\r\n if (ratio < 0 && dict.image.scale < 0 - ratio) {\r\n dict.image.scale = 0 - ratio;\r\n }\r\n dict.imgElem.css({\r\n transform: dict.getTransform(dict.image)\r\n });\r\n break;\r\n case 'reset':\r\n dict.image.scaleX = 1;\r\n dict.image.scale = 1;\r\n dict.image.rotate = 0;\r\n dict.imgElem.css({\r\n transform: 'none'\r\n });\r\n break;\r\n case 'close':\r\n layer.close(index);\r\n break;\r\n }\r\n that.offset();\r\n that.auto(index);\r\n });\r\n \r\n // 鼠标滚轮缩放图片事件\r\n dict.main.on('mousewheel DOMMouseScroll', function(e) {\r\n var delta = e.originalEvent.wheelDelta || -e.originalEvent.detail;\r\n var zoomElem = dict.main.find('[toolbar-event=\"zoom\"]');\r\n if (delta > 0) {\r\n zoomElem.eq(0).trigger('click');\r\n } else {\r\n zoomElem.eq(1).trigger('click');\r\n }\r\n e.preventDefault();\r\n });\r\n\r\n // 滑动切换图片事件,仅限 layui 中 \r\n if(window.layui || window.lay){\r\n var lay = window.layui.lay || window.lay;\r\n var touchEndCallback = function(e, state){\r\n var duration = Date.now() - state.timeStart;\r\n var speed = state.distanceX / duration;\r\n var threshold = win.width() / 3;\r\n var shouldSwipe = Math.abs(speed) > 0.25 || Math.abs(state.distanceX) > threshold;\r\n if(!shouldSwipe) return;\r\n if(state.direction === 'left'){\r\n dict.imgnext(true);\r\n }else if(state.direction === 'right'){\r\n dict.imgprev(true);\r\n }\r\n }\r\n\r\n $.each([that.shadeo, dict.main], function(i, elem){\r\n lay.touchSwipe(elem, {\r\n onTouchEnd: touchEndCallback\r\n })\r\n })\r\n }\r\n };\r\n \r\n // 图片预加载\r\n function loadImage(url, callback, error) { \r\n var img = new Image();\r\n img.src = url; \r\n if(img.complete){\r\n return callback(img);\r\n }\r\n img.onload = function(){\r\n img.onload = null;\r\n callback(img);\r\n };\r\n img.onerror = function(e){\r\n img.onerror = null;\r\n error(e);\r\n }; \r\n }\r\n \r\n dict.loadi = layer.load(1, {\r\n shade: 'shade' in options ? false : [0.9, undefined, 'unset'],\r\n scrollbar: false\r\n });\r\n\r\n loadImage(data[start].src, function(img){\r\n layer.close(dict.loadi);\r\n \r\n var alt = data[start].alt || '';\r\n\r\n // 切换图片时不出现动画\r\n if(key) options.anim = -1;\r\n \r\n // 弹出图片层\r\n dict.index = layer.open($.extend({\r\n type: 1,\r\n id: 'layui-layer-photos',\r\n area: function(){\r\n var imgarea = [img.width, img.height];\r\n var winarea = [$(window).width() - 100, $(window).height() - 100];\r\n \r\n // 若实际图片的宽或者高比 屏幕大(那么进行缩放)\r\n if(!options.full && (imgarea[0]>winarea[0]||imgarea[1]>winarea[1])){\r\n var wh = [imgarea[0]/winarea[0],imgarea[1]/winarea[1]];// 取宽度缩放比例、高度缩放比例\r\n if(wh[0] > wh[1]){// 取缩放比例最大的进行缩放\r\n imgarea[0] = imgarea[0]/wh[0];\r\n imgarea[1] = imgarea[1]/wh[0];\r\n } else if(wh[0] < wh[1]){\r\n imgarea[0] = imgarea[0]/wh[1];\r\n imgarea[1] = imgarea[1]/wh[1];\r\n }\r\n }\r\n\r\n return [imgarea[0]+'px', imgarea[1]+'px']; \r\n }(),\r\n title: false,\r\n shade: [0.9, undefined, 'unset'],\r\n shadeClose: true,\r\n closeBtn: false,\r\n move: '.layer-layer-photos-main img',\r\n moveType: 1,\r\n scrollbar: false,\r\n moveOut: true,\r\n anim: 5,\r\n isOutAnim: false,\r\n skin: 'layui-layer-photos' + skin('photos'),\r\n content: '
        '\r\n + '\"'+'\r\n + function(){\r\n var arr = ['
        '];\r\n\r\n // 左右箭头翻页\r\n if (data.length > 1) {\r\n arr.push(['
        ',\r\n '',\r\n '',\r\n '
        '].join(''));\r\n }\r\n\r\n // 头部工具栏\r\n if (options.toolbar) {\r\n arr.push([\r\n '
        ',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '',\r\n '
        '\r\n ].join(''));\r\n }\r\n\r\n // 底部栏\r\n if (options.footer) {\r\n arr.push(['
        ',\r\n '

        '+ alt +'

        ',\r\n ''+ dict.imgIndex +' / '+ data.length +'',\r\n '查看原图',\r\n '
        '].join(''));\r\n }\r\n\r\n arr.push('
        ');\r\n return arr.join('');\r\n }()\r\n +'
        ',\r\n success: function(layero, index, that){\r\n dict.main = layero.find('.layer-layer-photos-main');\r\n dict.footer = layero.find('.layui-layer-photos-footer');\r\n dict.imgElem = dict.main.children('img');\r\n dict.event(layero, index, that);\r\n options.tab && options.tab(data[start], layero);\r\n typeof success === 'function' && success(layero);\r\n }, end: function(){\r\n dict.end = true;\r\n $(document).off('keyup', dict.keyup);\r\n }\r\n }, options));\r\n }, function(){\r\n layer.close(dict.loadi);\r\n layer.msg('当前图片地址异常,
        是否继续查看下一张?', {\r\n time: 30000, \r\n btn: ['下一张', '不看了'], \r\n yes: function(){\r\n data.length > 1 && dict.imgnext(true,true);\r\n }\r\n });\r\n });\r\n};\r\n\r\n// 主入口\r\nready.run = function(_$){\r\n $ = _$;\r\n win = $(window);\r\n \r\n // 移动端兼容性处理\r\n // https://gitee.com/layui/layui/issues/I81WGC\r\n // https://github.com/jquery/jquery/issues/1729\r\n var agent = navigator.userAgent.toLowerCase();\r\n var isMobile = /android|iphone|ipod|ipad|ios/.test(agent)\r\n var _win = $(window);\r\n if(isMobile){\r\n $.each({Height: \"height\", Width: \"width\"}, function(propSuffix, funcName){\r\n var propName = 'inner' + propSuffix;\r\n win[funcName] = function(){\r\n return propName in window \r\n ? window[propName]\r\n : _win[funcName]()\r\n }\r\n })\r\n }\r\n doms.html = $('html');\r\n layer.open = function(deliver){\r\n var o = new Class(deliver);\r\n return o.index;\r\n };\r\n};\r\n\r\n// 加载方式\r\nwindow.layui && layui.define ? (\r\n layer.ready(),\r\n layui.define(['jquery','lay'], function(exports){ // layui\r\n layer.path = layui.cache.dir;\r\n ready.run(layui.$);\r\n\r\n // export api\r\n window.layer = layer;\r\n exports('layer', layer);\r\n })\r\n) : (\r\n (typeof define === 'function' && define.amd) ? define(['jquery'], function(){ // requirejs\r\n ready.run(window.jQuery);\r\n return layer;\r\n }) : function(){ // 普通 script 标签引入\r\n layer.ready();\r\n ready.run(window.jQuery);\r\n }()\r\n);\r\n\r\n}(window);\r\n","/**\n * util 工具组件\n */\n\nlayui.define('jquery', function(exports){\n \"use strict\";\n\n var $ = layui.$;\n var hint = layui.hint();\n\n // 外部接口\n var util = {\n // 固定块\n fixbar: function(options){\n var ELEM = 'layui-fixbar';\n var $doc = $(document);\n\n // 默认可选项\n options = $.extend(true, {\n target: 'body', // fixbar 的插入目标选择器\n bars: [], // bar 信息\n \"default\": true, // 是否显示默认 bar\n margin: 160, // 出现 top bar 的滚动条高度临界值\n duration: 320 // top bar 等动画时长(毫秒)\n }, options);\n\n // 目标元素对象\n var $target = $(options.target);\n\n // 滚动条所在元素对象\n var $scroll = options.scroll\n ? $(options.scroll)\n : $(options.target === 'body' ? $doc : $target)\n\n // 是否提供默认图标\n if(options['default']){\n // 兼容旧版本的一些属性\n if(options.bar1){\n options.bars.push({\n type: 'bar1',\n icon: 'layui-icon-chat'\n });\n }\n if(options.bar2){\n options.bars.push({\n type: 'bar2',\n icon: 'layui-icon-help'\n });\n }\n // 默认 top bar\n options.bars.push({\n type: 'top',\n icon: 'layui-icon-top'\n });\n }\n\n var elem = $('
          ').addClass(ELEM);\n var elemTopBar;\n\n // 遍历生成 bars 节点\n layui.each(options.bars, function(i, item){\n var elemBar = $('
        • ');\n\n // 设置 bar 相关属性\n elemBar.addClass(item.icon).attr({\n 'lay-type': item.type,\n 'style': item.style || (options.bgcolor ? 'background-color: '+ options.bgcolor : '')\n }).html(item.content);\n\n // bar 点击事件\n elemBar.on('click', function(){\n var type = $(this).attr('lay-type');\n if(type === 'top'){\n (\n options.target === 'body'\n ? $('html,body')\n : $scroll\n ).animate({\n scrollTop : 0\n }, options.duration);\n }\n typeof options.click === 'function' && options.click.call(this, type);\n });\n\n // 自定义任意事件\n if(layui.type(options.on) === 'object'){\n layui.each(options.on, function(eventName, callback){\n elemBar.on(eventName, function(){\n var type = $(this).attr('lay-type');\n typeof callback === 'function' && callback.call(this, type);\n });\n })\n }\n\n // 获得 top bar 节点\n if(item.type === 'top'){\n elemBar.addClass('layui-fixbar-top');\n elemTopBar = elemBar;\n }\n\n elem.append(elemBar); // 插入 bar 节点\n });\n\n // 若目标元素已存在 fixbar,则移除旧的节点\n $target.find('.'+ ELEM).remove();\n\n // 向目标元素插入 fixbar 节点\n typeof options.css === 'object' && elem.css(options.css);\n $target.append(elem);\n\n // top bar 的显示隐藏\n if(elemTopBar){\n var lock;\n var setTopBar = (function setTopBar(){\n var top = $scroll.scrollTop();\n if(top >= options.margin){\n lock || (elemTopBar.show(), lock = 1);\n } else {\n lock && (elemTopBar.hide(), lock = 0);\n }\n return setTopBar;\n })();\n }\n\n // 根据 scrollbar 设置 fixbar 相关状态\n var timer;\n $scroll.on('scroll', function(){\n if(!setTopBar) return;\n clearTimeout(timer);\n timer = setTimeout(function(){\n setTopBar();\n }, 100);\n });\n },\n\n // 倒计时\n countdown: function(options){\n var that = this;\n\n // 默认可选项\n options = $.extend(true, {\n date: new Date(),\n now: new Date()\n }, options);\n\n // 兼容旧版参数\n var args = arguments;\n if(args.length > 1){\n options.date = new Date(args[0]);\n options.now = new Date(args[1]);\n options.clock = args[2];\n }\n\n // 实例对象\n var inst = {\n options: options,\n clear: function(){ // 清除计时器\n clearTimeout(inst.timer);\n },\n reload: function(opts){ // 重置倒计时\n this.clear();\n $.extend(true, this.options, {\n now: new Date()\n }, opts);\n count();\n }\n };\n\n typeof options.ready === 'function' && options.ready();\n\n // 计算倒计时\n var count = (function fn(){\n var date = new Date(options.date);\n var now = new Date(options.now);\n var countTime = function(time){\n return time > 0 ? time : 0;\n }(date.getTime() - now.getTime());\n var result = {\n d: Math.floor(countTime/(1000*60*60*24)), // 天\n h: Math.floor(countTime/(1000*60*60)) % 24, // 时\n m: Math.floor(countTime/(1000*60)) % 60, // 分\n s: Math.floor(countTime/1000) % 60 // 秒\n };\n var next = function(){\n now.setTime(now.getTime() + 1000);\n options.now = now;\n count();\n };\n\n // 兼容旧版返回值\n if(args.length > 1) result = [result.d,result.h,result.m,result.s]\n\n // 计时 - 以秒间隔\n inst.timer = setTimeout(next, 1000);\n typeof options.clock === 'function' && options.clock(result, inst);\n\n // 计时完成\n if(countTime <= 0){\n clearTimeout(inst.timer);\n typeof options.done === 'function' && options.done(result, inst);\n }\n\n return fn;\n })();\n\n return inst;\n },\n\n // 某个时间在当前时间的多久前\n timeAgo: function(time, onlyDate){\n var that = this;\n var arr = [[], []];\n var stamp = new Date().getTime() - new Date(time).getTime();\n\n // 返回具体日期\n if(stamp > 1000*60*60*24*31){\n stamp = new Date(time);\n arr[0][0] = that.digit(stamp.getFullYear(), 4);\n arr[0][1] = that.digit(stamp.getMonth() + 1);\n arr[0][2] = that.digit(stamp.getDate());\n\n // 是否输出时间\n if(!onlyDate){\n arr[1][0] = that.digit(stamp.getHours());\n arr[1][1] = that.digit(stamp.getMinutes());\n arr[1][2] = that.digit(stamp.getSeconds());\n }\n return arr[0].join('-') + ' ' + arr[1].join(':');\n }\n\n // 30 天以内,返回「多久前」\n if(stamp >= 1000*60*60*24){\n return ((stamp/1000/60/60/24)|0) + ' 天前';\n } else if(stamp >= 1000*60*60){\n return ((stamp/1000/60/60)|0) + ' 小时前';\n } else if(stamp >= 1000*60*3){ // 3 分钟以内为:刚刚\n return ((stamp/1000/60)|0) + ' 分钟前';\n } else if(stamp < 0){\n return '未来';\n } else {\n return '刚刚';\n }\n },\n\n // 数字前置补零\n digit: function(num, length){\n var str = '';\n num = String(num);\n length = length || 2;\n for(var i = num.length; i < length; i++){\n str += '0';\n }\n return num < Math.pow(10, length) ? str + (num|0) : num;\n },\n\n // 转化为日期格式字符\n toDateString: function(time, format, options){\n // 若 null 或空字符,则返回空字符\n if(time === null || time === '') return '';\n\n // 引用自 dayjs\n // https://github.com/iamkun/dayjs/blob/v1.11.9/src/constant.js#L30\n var REGEX_FORMAT = /\\[([^\\]]+)]|y{1,4}|M{1,2}|d{1,2}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|SSS/g;\n var that = this;\n var date = new Date(function(){\n if(!time) return;\n return isNaN(time) ? time : (typeof time === 'string' ? parseInt(time) : time)\n }() || new Date())\n\n if(!date.getDate()) return hint.error('Invalid millisecond for \"util.toDateString(millisecond)\"'), '';\n\n var years = date.getFullYear();\n var month = date.getMonth();\n var days = date.getDate();\n var hours = date.getHours();\n var minutes = date.getMinutes();\n var seconds = date.getSeconds();\n var milliseconds = date.getMilliseconds();\n\n var defaultMeridiem = function(hours, minutes){\n var hm = hours * 100 + minutes;\n if (hm < 600) {\n return '凌晨';\n } else if (hm < 900) {\n return '早上';\n } else if (hm < 1100) {\n return '上午';\n } else if (hm < 1300) {\n return '中午';\n } else if (hm < 1800) {\n return '下午';\n }\n return '晚上';\n };\n\n var meridiem = (options && options.customMeridiem) || defaultMeridiem;\n\n var matches = {\n yy: function(){return String(years).slice(-2);},\n yyyy: function(){return that.digit(years, 4);},\n M: function(){return String(month + 1);},\n MM: function(){return that.digit(month + 1);},\n d: function(){return String(days);},\n dd: function(){return that.digit(days);},\n H: function(){return String(hours);},\n HH: function(){return that.digit(hours);},\n h: function(){return String(hours % 12 || 12);},\n hh: function(){return that.digit(hours % 12 || 12);},\n A: function(){return meridiem(hours, minutes);},\n m: function(){return String(minutes);},\n mm: function(){return that.digit(minutes);},\n s: function(){return String(seconds);},\n ss: function(){return that.digit(seconds);},\n SSS: function(){return that.digit(milliseconds, 3);}\n }\n\n format = format || 'yyyy-MM-dd HH:mm:ss';\n\n return format.replace(REGEX_FORMAT, function(match, $1) {\n return $1 || (matches[match] && matches[match]()) || match;\n });\n },\n\n // 转义 html\n escape: function(html){\n var exp = /[<\"'>]|&(?=#[a-zA-Z0-9]+)/g;\n if(html === undefined || html === null) return '';\n\n html += '';\n if(!exp.test(html)) return html;\n\n return html.replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')\n .replace(//g, '>')\n .replace(/'/g, ''').replace(/\"/g, '"');\n },\n\n // 还原转义的 html\n unescape: function(html){\n if(html === undefined || html === null) html = '';\n html += '';\n\n return html.replace(/\\&/g, '&')\n .replace(/\\</g, '<').replace(/\\>/g, '>')\n .replace(/\\'/g, '\\'').replace(/\\"/g, '\"');\n },\n\n // 打开新窗口\n openWin: function(options){\n var win;\n options = options || {};\n win = options.window || window.open((options.url || ''), options.target, options.specs);\n if(options.url) return;\n win.document.open('text/html', 'replace');\n win.document.write(options.content || '');\n win.document.close();\n },\n\n // 让指定的元素保持在可视区域\n toVisibleArea: function(options){\n options = $.extend({\n margin: 160, // 触发动作的边界值\n duration: 200, // 动画持续毫秒数\n type: 'y' // 触发方向,x 水平、y 垂直\n }, options);\n\n if(!options.scrollElem[0] || !options.thisElem[0]) return;\n\n var scrollElem = options.scrollElem // 滚动元素\n var thisElem = options.thisElem // 目标元素\n var vertical = options.type === 'y' // 是否垂直方向\n var SCROLL_NAME = vertical ? 'scrollTop' : 'scrollLeft' // 滚动方法\n var OFFSET_NAME = vertical ? 'top' : 'left' // 坐标方式\n var scrollValue = scrollElem[SCROLL_NAME]() // 当前滚动距离\n var size = scrollElem[vertical ? 'height' : 'width']() // 滚动元素的尺寸\n var scrollOffset = scrollElem.offset()[OFFSET_NAME] // 滚动元素所处位置\n var thisOffset = thisElem.offset()[OFFSET_NAME] - scrollOffset // 目标元素当前的所在位置\n var obj = {};\n\n // 边界满足条件\n if(thisOffset > size - options.margin || thisOffset < options.margin){\n obj[SCROLL_NAME] = thisOffset - size/2 + scrollValue\n scrollElem.animate(obj, options.duration);\n }\n },\n\n /**\n * 批量事件\n * @param {string} [attr=\"lay-on\"] - 触发事件的元素属性名\n * @param {Object.} events - 事件集合\n * @param {Object} [options] - 参数的更多选项\n * @param {(string|HTMLElement|JQuery)} [options.elem=\"body\"] - 触发事件的委托元素\n * @param {string} [options.trigger=\"click\"] - 事件触发的方式\n * @returns {Object} 返回当前 events 参数设置的事件集合\n */\n on: function(attr, events, options) {\n // 若参数一为 object 类型,则为事件集,且省略 attr\n if (typeof attr === 'object') {\n options = events || {};\n events = attr;\n attr = options.attr || 'lay-on'; // 默认属性名\n }\n\n // 更多选项\n options = $.extend({\n elem: 'body',\n trigger: 'click'\n }, typeof options === 'object' ? options : {\n trigger: options // 兼容旧版\n });\n\n var elem = options.elem = $(options.elem);\n var attrSelector = '['+ attr +']';\n var DATANAME = 'UTIL_ON_DATA'; // 缓存在委托元素上的 data-* 属性名\n\n if (!elem[0]) return; // 若委托元素不存在\n\n // 初始化 data 默认值,以委托元素为存储单元\n if (!elem.data(DATANAME)) {\n elem.data(DATANAME, {\n events: {},\n callbacks: {}\n });\n }\n\n // 读取 data 缓存\n var dataCache = elem.data(DATANAME);\n var callbacks = dataCache.callbacks;\n\n // 根据 attr 记录事件集合\n events = dataCache.events[attr] = $.extend(true, dataCache.events[attr], events);\n\n // 清除事件委托,避免重复绑定\n elem.off(options.trigger, attrSelector, callbacks[attr]);\n\n // 绑定事件委托\n elem.on(\n options.trigger,\n attrSelector,\n callbacks[attr] = function(e) {\n var othis = $(this);\n var key = othis.attr(attr);\n typeof events[key] === 'function' && events[key].call(this, othis, e);\n }\n );\n\n return events;\n }\n };\n\n // 兼容旧版\n util.event = util.on;\n\n // 输出接口\n exports('util', util);\n});\n","/**\r\n * dropdown \r\n * 下拉菜单组件\r\n */\r\n\r\nlayui.define(['jquery', 'laytpl', 'lay', 'util'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var laytpl = layui.laytpl;\r\n var util = layui.util;\r\n var hint = layui.hint();\r\n var device = layui.device();\r\n var clickOrMousedown = (device.mobile ? 'touchstart' : 'mousedown');\r\n \r\n // 模块名\r\n var MOD_NAME = 'dropdown';\r\n var MOD_INDEX = 'layui_'+ MOD_NAME +'_index'; // 模块索引名\r\n var MOD_ID = 'lay-' + MOD_NAME + '-id';\r\n\r\n // 外部接口\r\n var dropdown = {\r\n config: {\r\n customName: { // 自定义 data 字段名\r\n id: 'id',\r\n title: 'title',\r\n children: 'child'\r\n }\r\n },\r\n index: layui[MOD_NAME] ? (layui[MOD_NAME].index + 10000) : 0,\r\n\r\n // 设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n \r\n // 事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n };\r\n\r\n // 操作当前实例\r\n var thisModule = function(){\r\n var that = this;\r\n var options = that.config;\r\n var id = options.id;\r\n\r\n thisModule.that[id] = that; // 记录当前实例对象\r\n\r\n return {\r\n config: options,\r\n // 重置实例\r\n reload: function(options){\r\n that.reload.call(that, options);\r\n },\r\n reloadData: function(options){\r\n dropdown.reloadData(id, options);\r\n },\r\n close: function () {\r\n that.remove()\r\n },\r\n open: function () {\r\n that.render()\r\n }\r\n }\r\n };\r\n\r\n // 字符常量\r\n var STR_ELEM = 'layui-dropdown';\r\n var STR_HIDE = 'layui-hide';\r\n var STR_DISABLED = 'layui-disabled';\r\n var STR_NONE = 'layui-none';\r\n var STR_ITEM_UP = 'layui-menu-item-up';\r\n var STR_ITEM_DOWN = 'layui-menu-item-down';\r\n var STR_MENU_TITLE = 'layui-menu-body-title';\r\n var STR_ITEM_GROUP = 'layui-menu-item-group';\r\n var STR_ITEM_PARENT = 'layui-menu-item-parent';\r\n var STR_ITEM_DIV = 'layui-menu-item-divider';\r\n var STR_ITEM_CHECKED = 'layui-menu-item-checked';\r\n var STR_ITEM_CHECKED2 = 'layui-menu-item-checked2';\r\n var STR_MENU_PANEL = 'layui-menu-body-panel';\r\n var STR_MENU_PANEL_L = 'layui-menu-body-panel-left';\r\n var STR_ELEM_SHADE = 'layui-dropdown-shade';\r\n \r\n var STR_GROUP_TITLE = '.'+ STR_ITEM_GROUP + '>.'+ STR_MENU_TITLE;\r\n\r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++dropdown.index;\r\n that.config = $.extend({}, that.config, dropdown.config, options);\r\n that.init();\r\n };\r\n\r\n // 默认配置\r\n Class.prototype.config = {\r\n trigger: 'click', // 事件类型\r\n content: '', // 自定义菜单内容\r\n className: '', // 自定义样式类名\r\n style: '', // 设置面板 style 属性\r\n show: false, // 是否初始即显示菜单面板\r\n isAllowSpread: true, // 是否允许菜单组展开收缩\r\n isSpreadItem: true, // 是否初始展开子菜单\r\n data: [], // 菜单数据结构\r\n delay: [200, 300], // 延时显示或隐藏的毫秒数,若为 number 类型,则表示显示和隐藏的延迟时间相同,trigger 为 hover 时才生效\r\n shade: 0, // 遮罩\r\n accordion: false, // 手风琴效果,仅菜单组生效。基础菜单需要在容器上追加 'lay-accordion' 属性。\r\n closeOnClick: false // 面板打开后,再次点击目标元素时是否关闭面板。行为取决于所使用的触发事件类型\r\n };\r\n \r\n // 重载实例\r\n Class.prototype.reload = function(options, type){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n that.init(true, type);\r\n };\r\n\r\n // 初始化准备\r\n Class.prototype.init = function(rerender, type){\r\n var that = this;\r\n var options = that.config;\r\n \r\n // 若 elem 非唯一\r\n var elem = $(options.elem);\r\n if(elem.length > 1){\r\n layui.each(elem, function(){\r\n dropdown.render($.extend({}, options, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 合并 lay-options 属性上的配置信息\r\n $.extend(options, lay.options(elem[0]));\r\n\r\n // 若重复执行 render,则视为 reload 处理\r\n if(!rerender && elem[0] && elem.attr(MOD_ID)){\r\n var newThat = thisModule.getThis(elem.attr(MOD_ID));\r\n if(!newThat) return;\r\n\r\n return newThat.reload(options, type);\r\n }\r\n\r\n options.elem = $(options.elem);\r\n \r\n // 初始化 id 属性 - 优先取 options > 元素 id > 自增索引\r\n options.id = 'id' in options ? options.id : (\r\n elem.attr('id') || that.index\r\n );\r\n\r\n elem.attr(MOD_ID, options.id);\r\n\r\n // 初始化自定义字段名\r\n options.customName = $.extend({}, dropdown.config.customName, options.customName);\r\n\r\n if(options.show || (type === 'reloadData' && that.elemView && $('body').find(that.elemView.get(0)).length)) that.render(rerender, type); //初始即显示或者面板弹出之后执行了刷新数据\r\n that.events(); // 事件\r\n };\r\n \r\n // 渲染\r\n Class.prototype.render = function(rerender, type){\r\n var that = this;\r\n var options = that.config;\r\n var customName = options.customName;\r\n var elemBody = $('body');\r\n \r\n // 默认菜单内容\r\n var getDefaultView = function(){\r\n var elemUl = $('
            ');\r\n if(options.data.length > 0 ){\r\n eachItemView(elemUl, options.data)\r\n } else {\r\n elemUl.html('
          • 暂无数据
          • ');\r\n }\r\n return elemUl;\r\n };\r\n \r\n // 遍历菜单项\r\n var eachItemView = function(views, data){\r\n // var views = [];\r\n\r\n layui.each(data, function(index, item){\r\n // 是否存在子级\r\n var isChild = item[customName.children] && item[customName.children].length > 0;\r\n var isSpreadItem = ('isSpreadItem' in item) ? item.isSpreadItem : options.isSpreadItem\r\n var title = function(title){\r\n var templet = item.templet || options.templet;\r\n if(templet){\r\n title = typeof templet === 'function' \r\n ? templet(item)\r\n : laytpl(templet).render(item);\r\n }\r\n return title;\r\n }(util.escape(item[customName.title]));\r\n \r\n // 初始类型\r\n var type = function(){\r\n if(isChild){\r\n item.type = item.type || 'parent';\r\n }\r\n if(item.type){\r\n return ({\r\n group: 'group'\r\n ,parent: 'parent'\r\n ,'-': '-'\r\n })[item.type] || 'parent';\r\n }\r\n return '';\r\n }();\r\n\r\n if(type !== '-' && (!item[customName.title] && !item[customName.id] && !isChild)) return;\r\n \r\n //列表元素\r\n var viewLi = $([''\r\n \r\n //标题区\r\n ,function(){\r\n //是否超文本\r\n var viewText = ('href' in item) ? (\r\n ''+ title +''\r\n ) : title;\r\n \r\n //是否存在子级\r\n if(isChild){\r\n return '
            '+ viewText + function(){\r\n if(type === 'parent'){\r\n return '';\r\n } else if(type === 'group' && options.isAllowSpread){\r\n return '';\r\n } else {\r\n return '';\r\n }\r\n }() +'
            '\r\n \r\n }\r\n return '
            '+ viewText +'
            ';\r\n }()\r\n ,''].join(''));\r\n \r\n viewLi.data('item', item);\r\n \r\n //子级区\r\n if(isChild){\r\n var elemPanel = $('
            ');\r\n var elemUl = $('
              ');\r\n\r\n if(type === 'parent'){\r\n elemPanel.append(eachItemView(elemUl, item[customName.children]));\r\n viewLi.append(elemPanel);\r\n } else {\r\n viewLi.append(eachItemView(elemUl, item[customName.children]));\r\n }\r\n }\r\n\r\n views.append(viewLi);\r\n });\r\n return views;\r\n };\r\n \r\n // 主模板\r\n var TPL_MAIN = ['
              '\r\n ,'
              '].join('');\r\n \r\n // 如果是右键事件,则每次触发事件时,将允许重新渲染\r\n if(options.trigger === 'contextmenu' || lay.isTopElem(options.elem[0])) rerender = true;\r\n \r\n // 判断是否已经打开了下拉菜单面板\r\n if(!rerender && options.elem.data(MOD_INDEX +'_opened')) return;\r\n\r\n // 记录模板对象\r\n that.elemView = $('.' + STR_ELEM + '[' + MOD_ID + '=\"' + options.id + '\"]');\r\n if (type === 'reloadData' && that.elemView.length) {\r\n that.elemView.html(options.content || getDefaultView());\r\n } else {\r\n that.elemView = $(TPL_MAIN);\r\n that.elemView.append(options.content || getDefaultView());\r\n\r\n // 初始化某些属性\r\n if(options.className) that.elemView.addClass(options.className);\r\n if(options.style) that.elemView.attr('style', options.style);\r\n\r\n // 记录当前执行的实例索引\r\n dropdown.thisId = options.id;\r\n\r\n // 插入视图\r\n that.remove(); // 移除非当前绑定元素的面板\r\n elemBody.append(that.elemView);\r\n options.elem.data(MOD_INDEX +'_opened', true);\r\n\r\n // 遮罩\r\n var shade = options.shade ? ('
              ') : '';\r\n that.elemView.before(shade);\r\n\r\n // 如果是鼠标移入事件,则鼠标移出时自动关闭\r\n if(options.trigger === 'mouseenter'){\r\n that.elemView.on('mouseenter', function(){\r\n clearTimeout(thisModule.timer);\r\n }).on('mouseleave', function(){\r\n that.delayRemove();\r\n });\r\n }\r\n }\r\n\r\n // 坐标定位\r\n that.position();\r\n thisModule.prevElem = that.elemView; // 记录当前打开的元素,以便在下次关闭\r\n thisModule.prevElem.data('prevElem', options.elem); // 将当前绑定的元素,记录在打开元素的 data 对象中\r\n \r\n // 阻止全局事件\r\n that.elemView.find('.layui-menu').on(clickOrMousedown, function(e){\r\n layui.stope(e);\r\n });\r\n\r\n // 触发菜单列表事件\r\n that.elemView.find('.layui-menu li').on('click', function(e){\r\n var othis = $(this);\r\n var data = othis.data('item') || {};\r\n var isChild = data[customName.children] && data[customName.children].length > 0;\r\n var isClickAllScope = options.clickScope === 'all'; // 是否所有父子菜单均触发点击事件\r\n\r\n if(data.disabled) return; // 菜单项禁用状态\r\n \r\n // 普通菜单项点击后的回调及关闭面板\r\n if((!isChild || isClickAllScope) && data.type !== '-'){\r\n var ret = typeof options.click === 'function' \r\n ? options.click(data, othis, e) \r\n : null;\r\n \r\n ret === false || (isChild || that.remove());\r\n layui.stope(e);\r\n }\r\n });\r\n \r\n // 触发菜单组展开收缩\r\n that.elemView.find(STR_GROUP_TITLE).on('click', function(e){\r\n var othis = $(this);\r\n var elemGroup = othis.parent();\r\n var data = elemGroup.data('item') || {};\r\n \r\n if(data.type === 'group' && options.isAllowSpread){\r\n thisModule.spread(elemGroup, options.accordion);\r\n }\r\n });\r\n\r\n // 组件打开完毕的事件\r\n typeof options.ready === 'function' && options.ready(\r\n that.elemView, \r\n options.elem\r\n );\r\n };\r\n \r\n // 位置定位\r\n Class.prototype.position = function(obj){\r\n var that = this;\r\n var options = that.config;\r\n \r\n lay.position(options.elem[0], that.elemView[0], {\r\n position: options.position,\r\n e: that.e,\r\n clickType: options.trigger === 'contextmenu' ? 'right' : null,\r\n align: options.align || null\r\n });\r\n };\r\n \r\n // 删除视图\r\n Class.prototype.remove = function(){\r\n var that = this;\r\n var options = that.config;\r\n var prevContentElem = thisModule.prevElem;\r\n \r\n // 若存在已打开的面板元素,则移除\r\n if(prevContentElem){\r\n var prevId = prevContentElem.attr(MOD_ID);\r\n var prevTriggerElem = prevContentElem.data('prevElem');\r\n var prevInstance = thisModule.getThis(prevId);\r\n var prevOnClose = prevInstance.config.close;\r\n \r\n prevTriggerElem && prevTriggerElem.data(MOD_INDEX +'_opened', false);\r\n prevContentElem.remove();\r\n delete thisModule.prevElem;\r\n typeof prevOnClose === 'function' && prevOnClose.call(prevInstance.config, prevTriggerElem);\r\n }\r\n lay('.' + STR_ELEM_SHADE).remove();\r\n };\r\n\r\n Class.prototype.normalizedDelay = function(){\r\n var that = this;\r\n var options = that.config;\r\n var delay = [].concat(options.delay);\r\n \r\n return {\r\n show: delay[0],\r\n hide: delay[1] !== undefined ? delay[1] : delay[0] \r\n }\r\n }\r\n \r\n // 延迟删除视图\r\n Class.prototype.delayRemove = function(){\r\n var that = this;\r\n var options = that.config;\r\n clearTimeout(thisModule.timer);\r\n\r\n thisModule.timer = setTimeout(function(){\r\n that.remove();\r\n }, that.normalizedDelay().hide);\r\n };\r\n \r\n // 事件\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n \r\n // 若传入 hover,则解析为 mouseenter\r\n if(options.trigger === 'hover') options.trigger = 'mouseenter';\r\n\r\n // 解除上一个事件\r\n if(that.prevElem) that.prevElem.off(options.trigger, that.prevElemCallback);\r\n\r\n // 是否鼠标移入时触发\r\n var isMouseEnter = options.trigger === 'mouseenter';\r\n \r\n // 记录被绑定的元素及回调\r\n that.prevElem = options.elem;\r\n that.prevElemCallback = function(e){\r\n clearTimeout(thisModule.timer);\r\n that.e = e;\r\n\r\n // 若为鼠标移入事件,则延迟触发\r\n if(isMouseEnter){\r\n thisModule.timer = setTimeout(function(){\r\n that.render();\r\n }, that.normalizedDelay().show)\r\n }else{\r\n if(options.closeOnClick && options.elem.data(MOD_INDEX +'_opened') && options.trigger === 'click'){\r\n that.remove();\r\n }else{\r\n that.render();\r\n }\r\n }\r\n \r\n e.preventDefault();\r\n };\r\n\r\n // 触发元素事件\r\n options.elem.on(options.trigger, that.prevElemCallback);\r\n \r\n // 如果是鼠标移入事件\r\n if (isMouseEnter) {\r\n // 执行鼠标移出事件\r\n options.elem.on('mouseleave', function(){\r\n that.delayRemove();\r\n });\r\n }\r\n };\r\n \r\n // 记录所有实例\r\n thisModule.that = {}; // 记录所有实例对象\r\n \r\n // 获取当前实例对象\r\n thisModule.getThis = function(id){\r\n var that = thisModule.that[id];\r\n if(!that) hint.error(id ? (MOD_NAME +' instance with ID \\''+ id +'\\' not found') : 'ID argument required');\r\n return that;\r\n };\r\n \r\n // 设置菜单组展开和收缩状态\r\n thisModule.spread = function(othis, isAccordion){\r\n var contentElem = othis.children('ul');\r\n var needSpread = othis.hasClass(STR_ITEM_UP);\r\n var ANIM_MS = 200;\r\n\r\n // 动画执行完成后的操作\r\n var complete = function() {\r\n $(this).css({'display': ''}); // 剔除临时 style,以适配外部样式的状态重置;\r\n };\r\n\r\n // 动画是否正在执行\r\n if (contentElem.is(':animated')) return;\r\n\r\n // 展开\r\n if (needSpread) {\r\n othis.removeClass(STR_ITEM_UP).addClass(STR_ITEM_DOWN);\r\n contentElem.hide().stop().slideDown(ANIM_MS, complete);\r\n } else { // 收缩\r\n contentElem.stop().slideUp(ANIM_MS, complete);\r\n othis.removeClass(STR_ITEM_DOWN).addClass(STR_ITEM_UP);\r\n }\r\n\r\n // 手风琴\r\n if (needSpread && isAccordion) {\r\n var groupSibs = othis.siblings('.' + STR_ITEM_DOWN);\r\n groupSibs.children('ul').stop().slideUp(ANIM_MS, complete);\r\n groupSibs.removeClass(STR_ITEM_DOWN).addClass(STR_ITEM_UP);\r\n }\r\n };\r\n \r\n // 全局事件\r\n (function(){\r\n var _WIN = $(window);\r\n var _DOC = $(document);\r\n \r\n // 自适应定位\r\n _WIN.on('resize', function(){\r\n if(!dropdown.thisId) return;\r\n var that = thisModule.getThis(dropdown.thisId);\r\n if(!that) return;\r\n \r\n if((that.elemView && !that.elemView[0]) || !$('.'+ STR_ELEM)[0]){\r\n return false;\r\n }\r\n \r\n var options = that.config;\r\n \r\n if(options.trigger === 'contextmenu'){\r\n that.remove();\r\n } else {\r\n that.position();\r\n }\r\n });\r\n \r\n \r\n \r\n // 点击任意处关闭\r\n lay(_DOC).on(clickOrMousedown, function(e){\r\n if(!dropdown.thisId) return;\r\n var that = thisModule.getThis(dropdown.thisId)\r\n if(!that) return;\r\n \r\n var options = that.config;\r\n var isTopElem = lay.isTopElem(options.elem[0]);\r\n var isCtxMenu = options.trigger === 'contextmenu';\r\n \r\n // 若触发的是绑定的元素,或者属于绑定元素的子元素,则不关闭\r\n // 满足条件:当前绑定的元素是 body document,或者是鼠标右键事件时,忽略绑定元素\r\n var isTriggerTarget = !(isTopElem || isCtxMenu) && (options.elem[0] === e.target || options.elem.find(e.target)[0]);\r\n var isPanelTarget = that.elemView && (e.target === that.elemView[0] || that.elemView.find(e.target)[0]);\r\n if(isTriggerTarget || isPanelTarget) return;\r\n // 处理移动端点击穿透问题\r\n if(e.type === 'touchstart' && options.elem.data(MOD_INDEX +'_opened')){\r\n $(e.target).hasClass(STR_ELEM_SHADE) && e.preventDefault();\r\n }\r\n\r\n // 点击 dropdown 外部时的回调\r\n if(typeof options.onClickOutside === 'function'){\r\n var shouldClose = options.onClickOutside(e);\r\n if(shouldClose === false) return;\r\n }\r\n \r\n that.remove();\r\n }, {passive: false});\r\n \r\n // 基础菜单的静态元素事件\r\n var ELEM_LI = '.layui-menu:not(.layui-dropdown-menu) li';\r\n _DOC.on('click', ELEM_LI, function(e){\r\n var othis = $(this);\r\n var parent = othis.parents('.layui-menu').eq(0);\r\n var isChild = othis.hasClass(STR_ITEM_GROUP) || othis.hasClass(STR_ITEM_PARENT);\r\n var filter = parent.attr('lay-filter') || parent.attr('id');\r\n var options = lay.options(this);\r\n \r\n // 非触发元素\r\n if(othis.hasClass(STR_ITEM_DIV)) return;\r\n\r\n // 非菜单组\r\n if(!isChild){\r\n // 选中\r\n parent.find('.'+ STR_ITEM_CHECKED).removeClass(STR_ITEM_CHECKED); // 清除选中样式\r\n parent.find('.'+ STR_ITEM_CHECKED2).removeClass(STR_ITEM_CHECKED2); // 清除父级菜单选中样式\r\n othis.addClass(STR_ITEM_CHECKED); //添加选中样式\r\n othis.parents('.'+ STR_ITEM_PARENT).addClass(STR_ITEM_CHECKED2); // 添加父级菜单选中样式\r\n\r\n options.title = options.title || $.trim(othis.children('.'+ STR_MENU_TITLE).text());\r\n \r\n // 触发事件\r\n layui.event.call(this, MOD_NAME, 'click('+ filter +')', options);\r\n }\r\n });\r\n \r\n // 基础菜单的展开收缩事件\r\n _DOC.on('click', (ELEM_LI + STR_GROUP_TITLE), function(e){\r\n var othis = $(this);\r\n var elemGroup = othis.parents('.'+ STR_ITEM_GROUP +':eq(0)');\r\n var options = lay.options(elemGroup[0]);\r\n var isAccordion = typeof othis.parents('.layui-menu').eq(0).attr('lay-accordion') === 'string';\r\n\r\n if(('isAllowSpread' in options) ? options.isAllowSpread : true){\r\n thisModule.spread(elemGroup, isAccordion);\r\n }\r\n });\r\n \r\n // 判断子级菜单是否超出屏幕\r\n var ELEM_LI_PAR = '.layui-menu .'+ STR_ITEM_PARENT\r\n _DOC.on('mouseenter', ELEM_LI_PAR, function(e){\r\n var othis = $(this);\r\n var elemPanel = othis.find('.'+ STR_MENU_PANEL);\r\n\r\n if(!elemPanel[0]) return;\r\n var rect = elemPanel[0].getBoundingClientRect();\r\n \r\n // 是否超出右侧屏幕\r\n if(rect.right > _WIN.width()){\r\n elemPanel.addClass(STR_MENU_PANEL_L);\r\n // 不允许超出左侧屏幕\r\n rect = elemPanel[0].getBoundingClientRect();\r\n if(rect.left < 0){\r\n elemPanel.removeClass(STR_MENU_PANEL_L);\r\n }\r\n }\r\n \r\n // 是否超出底部屏幕\r\n if(rect.bottom > _WIN.height()){\r\n elemPanel.eq(0).css('margin-top', -(rect.bottom - _WIN.height() + 5));\r\n }\r\n }).on('mouseleave', ELEM_LI_PAR, function(e){\r\n var othis = $(this)\r\n var elemPanel = othis.children('.'+ STR_MENU_PANEL);\r\n \r\n elemPanel.removeClass(STR_MENU_PANEL_L);\r\n elemPanel.css('margin-top', 0);\r\n });\r\n \r\n })();\r\n\r\n // 关闭面板\r\n dropdown.close = function(id){\r\n var that = thisModule.getThis(id);\r\n if(!that) return this;\r\n \r\n that.remove();\r\n return thisModule.call(that);\r\n };\r\n\r\n // 打开面板\r\n dropdown.open = function(id){\r\n var that = thisModule.getThis(id);\r\n if(!that) return this;\r\n \r\n that.render();\r\n return thisModule.call(that);\r\n }\r\n \r\n // 重载实例\r\n dropdown.reload = function(id, options, type){\r\n var that = thisModule.getThis(id);\r\n if(!that) return this;\r\n\r\n that.reload(options, type);\r\n return thisModule.call(that);\r\n };\r\n\r\n // 仅重载数据\r\n dropdown.reloadData = function(){\r\n var args = $.extend([], arguments);\r\n args[2] = 'reloadData';\r\n\r\n // 重载时,与数据相关的参数\r\n var dataParams = new RegExp('^('+ [\r\n 'data', 'templet', 'content'\r\n ].join('|') + ')$');\r\n\r\n // 过滤与数据无关的参数\r\n layui.each(args[1], function (key, value) {\r\n if(!dataParams.test(key)){\r\n delete args[1][key];\r\n }\r\n });\r\n\r\n return dropdown.reload.apply(null, args);\r\n };\r\n\r\n // 核心入口\r\n dropdown.render = function(options){\r\n var inst = new Class(options);\r\n return thisModule.call(inst);\r\n };\r\n\r\n exports(MOD_NAME, dropdown);\r\n});\r\n","/**\r\n * slider 滑块组件\r\n */\r\n\r\nlayui.define(['jquery', 'lay'], function(exports){\r\n 'use strict';\r\n\r\n var $ = layui.$;\r\n var lay = layui.lay;\r\n\r\n // 外部接口\r\n var slider = {\r\n config: {},\r\n index: layui.slider ? (layui.slider.index + 10000) : 0,\r\n\r\n // 设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n\r\n // 事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n };\r\n\r\n // 操作当前实例\r\n var thisSlider = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n return {\r\n setValue: function(value, index){ // 设置值\r\n value = value > options.max ? options.max : value;\r\n value = value < options.min ? options.min : value;\r\n options.value = value;\r\n return that.slide('set', value, index || 0);\r\n },\r\n config: options\r\n }\r\n };\r\n\r\n // 字符常量\r\n var MOD_NAME = 'slider';\r\n var DISABLED = 'layui-disabled';\r\n var ELEM_VIEW = 'layui-slider';\r\n var SLIDER_BAR = 'layui-slider-bar';\r\n var SLIDER_WRAP = 'layui-slider-wrap';\r\n var SLIDER_WRAP_BTN = 'layui-slider-wrap-btn';\r\n var SLIDER_TIPS = 'layui-slider-tips';\r\n var SLIDER_INPUT = 'layui-slider-input';\r\n var SLIDER_INPUT_TXT = 'layui-slider-input-txt';\r\n var SLIDER_INPUT_BTN = 'layui-slider-input-btn';\r\n var ELEM_HOVER = 'layui-slider-hover';\r\n\r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++slider.index;\r\n that.config = $.extend({}, that.config, slider.config, options);\r\n that.render();\r\n };\r\n\r\n // 默认配置\r\n Class.prototype.config = {\r\n type: 'default', //滑块类型,垂直:vertical\r\n min: 0, //最小值\r\n max: 100, //最大值,默认100\r\n value: 0, //初始值,默认为0\r\n step: 1, //间隔值\r\n showstep: false, //间隔点开启\r\n tips: true, //文字提示,开启\r\n tipsAlways: false, //文字提示,始终开启\r\n input: false, //输入框,关闭\r\n range: false, //范围选择,与输入框不能同时开启,默认关闭\r\n height: 200, //配合 type:\"vertical\" 使用,默认200px\r\n disabled: false, //滑块禁用,默认关闭\r\n theme: '#16baaa' //主题颜色\r\n };\r\n\r\n // 数值精度\r\n Class.prototype.precision = function(){\r\n var that = this;\r\n var options = that.config;\r\n var precisions = $.map([options.min, options.max, options.step], function(v, i){\r\n var decimalArr = String(v).split('.');\r\n return decimalArr[1] ? decimalArr[1].length : 0;\r\n })\r\n return Math.max.apply(null, precisions);\r\n }\r\n\r\n //滑块渲染\r\n Class.prototype.render = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 若 elem 非唯一,则拆分为多个实例\r\n var elem = $(options.elem);\r\n if(elem.length > 1){\r\n layui.each(elem, function(){\r\n slider.render($.extend({}, options, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 合并 lay-options 属性上的配置信息\r\n $.extend(options, lay.options(elem[0]));\r\n\r\n //间隔值不能小于等于 0\r\n if(options.step <= 0) options.step = 1;\r\n\r\n //最大值不能小于最小值\r\n if(options.max < options.min) options.max = options.min + options.step;\r\n\r\n\r\n\r\n //判断是否开启双滑块\r\n if(options.range){\r\n options.value = typeof(options.value) == 'object' ? options.value : [options.min, options.value];\r\n var minValue = Math.min(options.value[0], options.value[1])\r\n ,maxValue = Math.max(options.value[0], options.value[1]);\r\n options.value[0] = Math.max(minValue,options.min);\r\n options.value[1] = Math.max(maxValue,options.min);\r\n options.value[0] = Math.min(options.value[0],options.max);\r\n options.value[1] = Math.min(options.value[1],options.max);\r\n\r\n var scaleFir = (options.value[0] - options.min) / (options.max - options.min) * 100;\r\n var scaleSec = (options.value[1] - options.min) / (options.max - options.min) * 100;\r\n var scale = scaleSec - scaleFir + '%';\r\n scaleFir = scaleFir + '%';\r\n scaleSec = scaleSec + '%';\r\n } else {\r\n //如果初始值是一个数组,则获取数组的最小值\r\n if(typeof options.value == 'object'){\r\n options.value = Math.min.apply(null, options.value);\r\n }\r\n\r\n //初始值不能小于最小值且不能大于最大值\r\n if(options.value < options.min) options.value = options.min;\r\n if(options.value > options.max) options.value = options.max;\r\n\r\n var scale = (options.value - options.min) / (options.max - options.min) * 100 + '%';\r\n }\r\n\r\n\r\n //如果禁用,颜色为统一的灰色\r\n var theme = options.disabled ? '#c2c2c2' : options.theme;\r\n\r\n //滑块\r\n var temp = '
              '+ (options.tips ? '
              ' : '') +\r\n '
              ' +\r\n '
              '+ (options.range ? '
              ' : '') +'
              ';\r\n\r\n var othis = $(options.elem);\r\n var hasRender = othis.next('.' + ELEM_VIEW);\r\n //生成替代元素\r\n hasRender[0] && hasRender.remove(); //如果已经渲染,则Rerender\r\n that.elemTemp = $(temp);\r\n\r\n //把数据缓存到滑块上\r\n if(options.range){\r\n that.elemTemp.find('.' + SLIDER_WRAP).eq(0).data('value', options.value[0]);\r\n that.elemTemp.find('.' + SLIDER_WRAP).eq(1).data('value', options.value[1]);\r\n }else{\r\n that.elemTemp.find('.' + SLIDER_WRAP).data('value', options.value);\r\n }\r\n\r\n //插入替代元素\r\n othis.html(that.elemTemp);\r\n\r\n //垂直滑块\r\n if(options.type === 'vertical'){\r\n that.elemTemp.height(options.height + 'px');\r\n }\r\n\r\n //显示间断点\r\n if(options.showstep){\r\n var number = (options.max - options.min) / options.step, item = '';\r\n for(var i = 1; i < number + 1; i++) {\r\n var step = i * 100 / number;\r\n if(step < 100){\r\n item += '
              '\r\n }\r\n }\r\n that.elemTemp.append(item);\r\n }\r\n\r\n //插入输入框\r\n if(options.input && !options.range){\r\n var elemInput = $('
              ');\r\n othis.css(\"position\",\"relative\");\r\n othis.append(elemInput);\r\n othis.find('.' + SLIDER_INPUT_TXT).children('input').val(options.value);\r\n if(options.type === 'vertical'){\r\n elemInput.css({\r\n left: 0\r\n ,top: -48\r\n });\r\n } else {\r\n that.elemTemp.css(\"margin-right\", elemInput.outerWidth() + 15);\r\n }\r\n }\r\n\r\n //给未禁止的滑块滑动事件\r\n if(!options.disabled){\r\n that.slide();\r\n }else{\r\n that.elemTemp.addClass(DISABLED);\r\n that.elemTemp.find('.' + SLIDER_WRAP_BTN).addClass(DISABLED);\r\n }\r\n\r\n /**\r\n * @description 设置提示文本内容\r\n * @param {Element} sliderWrapBtnElem 提示文本节点元素\r\n */\r\n function setSliderTipsTxt(sliderWrapBtnElem) {\r\n var value = sliderWrapBtnElem.parent().data('value');\r\n var tipsTxt = options.setTips ? options.setTips(value) : value;\r\n that.elemTemp.find('.' + SLIDER_TIPS).html(tipsTxt);\r\n }\r\n\r\n /**\r\n * @description 计算提示文本元素的 position left\r\n * @param {Element} sliderWrapBtnElem 提示文本节点元素\r\n */\r\n function calcSliderTipsLeft(sliderWrapBtnElem){\r\n var sliderWidth = options.type === 'vertical' ? options.height : that.elemTemp[0].offsetWidth;\r\n var sliderWrap = that.elemTemp.find('.' + SLIDER_WRAP);\r\n var tipsLeft = options.type === 'vertical' ? (sliderWidth - sliderWrapBtnElem.parent()[0].offsetTop - sliderWrap.height()) : sliderWrapBtnElem.parent()[0].offsetLeft;\r\n var left = tipsLeft / sliderWidth * 100;\r\n return left\r\n }\r\n\r\n /**\r\n * @description 设置提示文本元素的 position left\r\n * @param {number} left 要设置的 left 的大小\r\n */\r\n function setSliderTipsLeft(left) {\r\n if(options.type === 'vertical'){\r\n that.elemTemp.find('.' + SLIDER_TIPS).css({\r\n \"bottom\": left + '%',\r\n \"margin-bottom\": \"20px\",\r\n \"display\": \"inline-block\"\r\n });\r\n } else {\r\n that.elemTemp.find('.' + SLIDER_TIPS).css({\r\n \"left\": left + '%',\r\n \"display\": \"inline-block\"\r\n });\r\n }\r\n }\r\n\r\n //判断是否要始终显示提示文本\r\n if(options.tips){\r\n if(options.tipsAlways){\r\n var sliderWrapBtnElem = that.elemTemp.find('.' + SLIDER_WRAP_BTN);\r\n setSliderTipsTxt(sliderWrapBtnElem)\r\n var left = calcSliderTipsLeft(sliderWrapBtnElem);\r\n setSliderTipsLeft(left)\r\n }else{\r\n //划过滑块显示数值\r\n var timer;\r\n that.elemTemp.find('.' + SLIDER_WRAP_BTN).on('mouseover', function(){\r\n setSliderTipsTxt($(this))\r\n var left = calcSliderTipsLeft($(this));\r\n clearTimeout(timer);\r\n timer = setTimeout(function(){\r\n setSliderTipsLeft(left)\r\n }, 300);\r\n }).on('mouseout', function(){\r\n clearTimeout(timer);\r\n if(!options.tipsAlways){\r\n that.elemTemp.find('.' + SLIDER_TIPS).css(\"display\", \"none\");\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n //滑块滑动\r\n Class.prototype.slide = function(setValue, value, i){\r\n var that = this;\r\n var options = that.config;\r\n var sliderAct = that.elemTemp;\r\n var sliderWidth = function(){\r\n return options.type === 'vertical' ? options.height : sliderAct[0].offsetWidth\r\n };\r\n var sliderWrap = sliderAct.find('.' + SLIDER_WRAP);\r\n var sliderTxt = sliderAct.next('.' + SLIDER_INPUT);\r\n var inputValue = sliderTxt.children('.' + SLIDER_INPUT_TXT).children('input').val();\r\n var step = 100 / ((options.max - options.min) / options.step);\r\n var precision = that.precision();\r\n var change = function(offsetValue, index, from){\r\n if(Math.ceil(offsetValue) * step > 100){\r\n offsetValue = Math.ceil(offsetValue) * step\r\n }else{\r\n offsetValue = Math.round(offsetValue) * step\r\n }\r\n offsetValue = offsetValue > 100 ? 100: offsetValue;\r\n offsetValue = offsetValue < 0 ? 0: offsetValue;\r\n sliderWrap.eq(index).css((options.type === 'vertical' ?'bottom':'left'), offsetValue + '%');\r\n var firLeft = valueTo(sliderWrap[0].offsetLeft);\r\n var secLeft = options.range ? valueTo(sliderWrap[1].offsetLeft) : 0;\r\n if(options.type === 'vertical'){\r\n sliderAct.find('.' + SLIDER_TIPS).css({\"bottom\":offsetValue + '%', \"margin-bottom\":\"20px\"});\r\n firLeft = valueTo(sliderWidth() - sliderWrap[0].offsetTop - sliderWrap.height());\r\n secLeft = options.range ? valueTo(sliderWidth() - sliderWrap[1].offsetTop - sliderWrap.height()) : 0;\r\n }else{\r\n sliderAct.find('.' + SLIDER_TIPS).css(\"left\",offsetValue + '%');\r\n }\r\n firLeft = firLeft > 100 ? 100: firLeft;\r\n secLeft = secLeft > 100 ? 100: secLeft;\r\n var minLeft = Math.min(firLeft, secLeft)\r\n ,wrapWidth = Math.abs(firLeft - secLeft);\r\n if(options.type === 'vertical'){\r\n sliderAct.find('.' + SLIDER_BAR).css({\"height\":wrapWidth + '%', \"bottom\":minLeft + '%'});\r\n }else{\r\n sliderAct.find('.' + SLIDER_BAR).css({\"width\":wrapWidth + '%', \"left\":minLeft + '%'});\r\n }\r\n var selfValue = options.min + (options.max - options.min) * offsetValue / 100;\r\n selfValue = Number(parseFloat(selfValue).toFixed(precision));\r\n inputValue = selfValue;\r\n sliderTxt.children('.' + SLIDER_INPUT_TXT).children('input').val(inputValue);\r\n sliderWrap.eq(index).data('value', selfValue);\r\n sliderAct.find('.' + SLIDER_TIPS).html(options.setTips ? options.setTips(selfValue) : selfValue);\r\n\r\n //如果开启范围选择,则返回数组值\r\n if(options.range){\r\n var arrValue = [\r\n sliderWrap.eq(0).data('value'),\r\n sliderWrap.eq(1).data('value')\r\n ];\r\n if(arrValue[0] > arrValue[1]) arrValue.reverse(); //如果前面的圆点超过了后面的圆点值,则调换顺序\r\n }\r\n\r\n that.value = options.range ? arrValue : selfValue; // 最新值\r\n options.change && options.change(that.value); // change 回调\r\n\r\n // 值完成选中的事件\r\n if(from === 'done') options.done && options.done(that.value);\r\n };\r\n var valueTo = function(value){\r\n var oldLeft = value / sliderWidth() * 100 / step;\r\n var left = Math.round(oldLeft) * step;\r\n if(value == sliderWidth()){\r\n left = Math.ceil(oldLeft) * step;\r\n }\r\n return left;\r\n };\r\n\r\n //拖拽元素\r\n var elemMove = $(['
              sliderWidth())left = sliderWidth();\r\n var reaLeft = left / sliderWidth() * 100 / step;\r\n change(reaLeft, index);\r\n othis.addClass(ELEM_HOVER);\r\n sliderAct.find('.' + SLIDER_TIPS).show();\r\n e.preventDefault();\r\n };\r\n\r\n var up = function(delay){\r\n othis.removeClass(ELEM_HOVER);\r\n if(!options.tipsAlways){\r\n setTimeout(function(){\r\n sliderAct.find('.' + SLIDER_TIPS).hide();\r\n }, delay);\r\n }\r\n };\r\n\r\n createMoveElem(othis, move, up)\r\n });\r\n });\r\n\r\n // 点击滑块\r\n sliderAct.on('click', function(e){\r\n var main = $('.' + SLIDER_WRAP_BTN);\r\n var othis = $(this);\r\n if(!main.is(event.target) && main.has(event.target).length === 0 && main.length){\r\n var index;\r\n var offset = options.type === 'vertical'\r\n ? (sliderWidth() - e.clientY + othis.offset().top - $(window).scrollTop())\r\n :(e.clientX - othis.offset().left - $(window).scrollLeft());\r\n\r\n if(offset < 0)offset = 0;\r\n if(offset > sliderWidth()) offset = sliderWidth();\r\n var reaLeft = offset / sliderWidth() * 100 / step;\r\n if(options.range){\r\n if(options.type === 'vertical'){\r\n index = Math.abs(offset - parseInt($(sliderWrap[0]).css('bottom'))) > Math.abs(offset - parseInt($(sliderWrap[1]).css('bottom'))) ? 1 : 0;\r\n } else {\r\n index = Math.abs(offset - sliderWrap[0].offsetLeft) > Math.abs(offset - sliderWrap[1].offsetLeft) ? 1 : 0;\r\n }\r\n } else {\r\n index = 0;\r\n }\r\n change(reaLeft, index, 'done');\r\n e.preventDefault();\r\n }\r\n });\r\n\r\n //点击加减输入框\r\n sliderTxt.children('.' + SLIDER_INPUT_BTN).children('i').each(function(index){\r\n $(this).on('click', function(){\r\n inputValue = sliderTxt.children('.' + SLIDER_INPUT_TXT).children('input').val();\r\n if(index == 1){ //减\r\n inputValue = inputValue - options.step < options.min\r\n ? options.min\r\n : Number(inputValue) - options.step;\r\n }else{\r\n inputValue = Number(inputValue) + options.step > options.max\r\n ? options.max\r\n : Number(inputValue) + options.step;\r\n }\r\n var inputScale = (inputValue - options.min) / (options.max - options.min) * 100 / step;\r\n change(inputScale, 0, 'done');\r\n });\r\n });\r\n\r\n //获取输入框值\r\n var getInputValue = function(){\r\n var realValue = this.value;\r\n realValue = isNaN(realValue) ? 0 : realValue;\r\n realValue = realValue < options.min ? options.min : realValue;\r\n realValue = realValue > options.max ? options.max : realValue;\r\n this.value = realValue;\r\n var inputScale = (realValue - options.min) / (options.max - options.min) * 100 / step;\r\n change(inputScale, 0, 'done');\r\n };\r\n sliderTxt.children('.' + SLIDER_INPUT_TXT).children('input').on('keydown', function(e){\r\n if(e.keyCode === 13){\r\n e.preventDefault();\r\n getInputValue.call(this);\r\n }\r\n }).on('change', getInputValue);\r\n };\r\n\r\n //事件处理\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n };\r\n\r\n //核心入口\r\n slider.render = function(options){\r\n var inst = new Class(options);\r\n return thisSlider.call(inst);\r\n };\r\n\r\n exports(MOD_NAME, slider);\r\n})\r\n","/**\r\n * colorpicker \r\n * 颜色选择组件\r\n */\r\n\r\nlayui.define(['jquery', 'lay'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var lay = layui.lay;\r\n var hint = layui.hint();\r\n var device = layui.device();\r\n var clickOrMousedown = (device.mobile ? 'click' : 'mousedown');\r\n\r\n //外部接口\r\n var colorpicker = {\r\n config: {}\r\n ,index: layui.colorpicker ? (layui.colorpicker.index + 10000) : 0\r\n\r\n //设置全局项\r\n ,set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n }\r\n \r\n //事件\r\n ,on: function(events, callback){\r\n return layui.onevent.call(this, 'colorpicker', events, callback);\r\n }\r\n };\r\n \r\n // 操作当前实例\r\n var thisModule = function(){\r\n var that = this;\r\n var options = that.config;\r\n var id = options.id;\r\n\r\n thisModule.that[id] = that; // 记录当前实例对象\r\n\r\n return {\r\n config: options\r\n };\r\n }\r\n\r\n //字符常量\r\n ,MOD_NAME = 'colorpicker', SHOW = 'layui-show', THIS = 'layui-this', ELEM = 'layui-colorpicker'\r\n \r\n ,ELEM_MAIN = '.layui-colorpicker-main', ICON_PICKER_DOWN = 'layui-icon-down', ICON_PICKER_CLOSE = 'layui-icon-close'\r\n ,PICKER_TRIG_SPAN = 'layui-colorpicker-trigger-span', PICKER_TRIG_I = 'layui-colorpicker-trigger-i', PICKER_SIDE = 'layui-colorpicker-side', PICKER_SIDE_SLIDER = 'layui-colorpicker-side-slider'\r\n ,PICKER_BASIS = 'layui-colorpicker-basis', PICKER_ALPHA_BG = 'layui-colorpicker-alpha-bgcolor', PICKER_ALPHA_SLIDER = 'layui-colorpicker-alpha-slider', PICKER_BASIS_CUR = 'layui-colorpicker-basis-cursor', PICKER_INPUT = 'layui-colorpicker-main-input'\r\n\r\n //RGB转HSB\r\n ,RGBToHSB = function(rgb){\r\n var hsb = {h:0, s:0, b:0};\r\n var min = Math.min(rgb.r, rgb.g, rgb.b);\r\n var max = Math.max(rgb.r, rgb.g, rgb.b);\r\n var delta = max - min;\r\n hsb.b = max;\r\n hsb.s = max !== 0 ? 255*delta/max : 0;\r\n if(hsb.s !== 0){\r\n if(rgb.r == max){ // 因 rgb 中返回的数字为 string 类型\r\n hsb.h = (rgb.g - rgb.b) / delta;\r\n }else if(rgb.g == max){\r\n hsb.h = 2 + (rgb.b - rgb.r) / delta;\r\n }else{\r\n hsb.h = 4 + (rgb.r - rgb.g) / delta;\r\n }\r\n }else{\r\n hsb.h = -1;\r\n }\r\n if(max === min){\r\n hsb.h = 0;\r\n }\r\n hsb.h *= 60;\r\n if(hsb.h < 0) {\r\n hsb.h += 360;\r\n }\r\n hsb.s *= 100/255;\r\n hsb.b *= 100/255;\r\n return hsb; \r\n }\r\n\r\n //HEX转HSB\r\n ,HEXToHSB = function(hex){\r\n hex = hex.indexOf('#') > -1 ? hex.substring(1) : hex;\r\n if(hex.length === 3){\r\n var num = hex.split(\"\");\r\n hex = num[0]+num[0]+num[1]+num[1]+num[2]+num[2]\r\n }\r\n hex = parseInt(hex, 16);\r\n var rgb = {r:hex >> 16, g:(hex & 0x00FF00) >> 8, b:(hex & 0x0000FF)};\r\n return RGBToHSB(rgb);\r\n }\r\n\r\n //HSB转RGB\r\n ,HSBToRGB = function(hsb){\r\n var rgb = {};\r\n var h = hsb.h;\r\n var s = hsb.s*255/100;\r\n var b = hsb.b*255/100;\r\n if(s === 0){\r\n rgb.r = rgb.g = rgb.b = b;\r\n }else{\r\n var t1 = b;\r\n var t2 = (255 - s) * b /255;\r\n var t3 = (t1 - t2) * (h % 60) /60;\r\n if(h === 360) h = 0;\r\n if(h < 60) {rgb.r=t1; rgb.b=t2; rgb.g=t2+t3}\r\n else if(h < 120) {rgb.g=t1; rgb.b=t2; rgb.r=t1-t3}\r\n else if(h < 180) {rgb.g=t1; rgb.r=t2; rgb.b=t2+t3}\r\n else if(h < 240) {rgb.b=t1; rgb.r=t2; rgb.g=t1-t3}\r\n else if(h < 300) {rgb.b=t1; rgb.g=t2; rgb.r=t2+t3}\r\n else if(h < 360) {rgb.r=t1; rgb.g=t2; rgb.b=t1-t3}\r\n else {rgb.r=0; rgb.g=0; rgb.b=0}\r\n }\r\n return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)};\r\n }\r\n\r\n //HSB转HEX\r\n ,HSBToHEX = function(hsb){\r\n var rgb = HSBToRGB(hsb);\r\n var hex = [\r\n rgb.r.toString(16)\r\n ,rgb.g.toString(16)\r\n ,rgb.b.toString(16)\r\n ];\r\n $.each(hex, function(nr, val){\r\n if(val.length === 1){\r\n hex[nr] = '0' + val;\r\n }\r\n });\r\n return hex.join('');\r\n }\r\n\r\n //转化成所需rgb格式\r\n ,RGBSTo = function(rgbs){\r\n var regexp = /[0-9]{1,3}/g;\r\n var re = rgbs.match(regexp) || [];\r\n return {r:re[0], g:re[1], b:re[2]};\r\n }\r\n \r\n ,$win = $(window)\r\n ,$doc = $(document)\r\n \r\n //构造器\r\n ,Class = function(options){\r\n var that = this;\r\n that.index = ++colorpicker.index;\r\n that.config = $.extend({}, that.config, colorpicker.config, options);\r\n that.render();\r\n };\r\n\r\n //默认配置\r\n Class.prototype.config = {\r\n color: '' //默认颜色,默认没有\r\n ,size: null //选择器大小\r\n ,alpha: false //是否开启透明度\r\n ,format: 'hex' //颜色显示/输入格式,可选 rgb,hex\r\n ,predefine: false //预定义颜色是否开启\r\n ,colors: [ //默认预定义颜色列表\r\n '#16baaa', '#16b777', '#1E9FFF', '#FF5722', '#FFB800', '#01AAED', '#999', '#c00', '#ff8c00','#ffd700'\r\n ,'#90ee90', '#00ced1', '#1e90ff', '#c71585', 'rgb(0, 186, 189)', 'rgb(255, 120, 0)', 'rgb(250, 212, 0)', '#393D49', 'rgba(0,0,0,.5)', 'rgba(255, 69, 0, 0.68)', 'rgba(144, 240, 144, 0.5)', 'rgba(31, 147, 255, 0.73)'\r\n ]\r\n };\r\n\r\n //初始颜色选择框\r\n Class.prototype.render = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 若 elem 非唯一,则拆分为多个实例\r\n var elem = $(options.elem);\r\n if(elem.length > 1){\r\n layui.each(elem, function(){\r\n colorpicker.render($.extend({}, options, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 合并 lay-options 属性上的配置信息\r\n $.extend(options, lay.options(elem[0]));\r\n \r\n //颜色选择框对象\r\n var elemColorBox = $(['
              '\r\n ,''\r\n ,' 3){ //需要优化\r\n if(!(options.alpha && options.format == 'rgb')){\r\n bgstr = '#' + HSBToHEX(RGBToHSB(RGBSTo(options.color)))\r\n }\r\n }\r\n \r\n return 'background: '+ bgstr;\r\n }\r\n \r\n return bgstr;\r\n }() +'\">'\r\n ,''\r\n ,''\r\n ,''\r\n ,'
              '].join(''))\r\n\r\n //初始化颜色选择框\r\n elem = options.elem = $(options.elem);\r\n options.size && elemColorBox.addClass('layui-colorpicker-'+ options.size); //初始化颜色选择框尺寸\r\n \r\n // 插入颜色选择框\r\n elem.addClass('layui-inline').html(\r\n that.elemColorBox = elemColorBox\r\n );\r\n\r\n // 初始化 id 属性 - 优先取 options > 元素 id > 自增索引\r\n options.id = 'id' in options ? options.id : (\r\n elem.attr('id') || that.index\r\n );\r\n \r\n // 获取背景色值\r\n that.color = that.elemColorBox.find('.'+ PICKER_TRIG_SPAN)[0].style.background;\r\n \r\n // 相关事件\r\n that.events();\r\n };\r\n\r\n //渲染颜色选择器\r\n Class.prototype.renderPicker = function(){\r\n var that = this\r\n ,options = that.config\r\n ,elemColorBox = that.elemColorBox[0]\r\n \r\n //颜色选择器对象\r\n ,elemPicker = that.elemPicker = $(['
              '\r\n //颜色面板\r\n ,'
              '\r\n ,'
              '\r\n ,'
              '\r\n ,'
              '\r\n ,'
              '\r\n ,'
              '\r\n ,'
              '\r\n ,'
              '\r\n ,'
              '\r\n ,'
              '\r\n \r\n //透明度条块\r\n ,'
              '\r\n ,'
              '\r\n ,'
              '\r\n ,'
              '\r\n ,'
              '\r\n \r\n //预设颜色列表\r\n ,function(){\r\n if(options.predefine){\r\n var list = ['
              '];\r\n layui.each(options.colors, function(i, v){\r\n list.push(['
              3 \r\n ? ' layui-colorpicker-pre-isalpha' \r\n : '') +'\">'\r\n ,'
              '\r\n ,'
              '].join(''));\r\n });\r\n list.push('
              ');\r\n return list.join('');\r\n } else {\r\n return '';\r\n }\r\n }()\r\n \r\n //底部表单元素区域\r\n ,'
              '\r\n ,'
              '\r\n ,''\r\n ,'
              '\r\n ,'
              '\r\n ,''\r\n ,''\r\n ,''\r\n ,'
              '].join(''))\r\n \r\n ,elemColorBoxSpan = that.elemColorBox.find('.' + PICKER_TRIG_SPAN)[0];\r\n \r\n //如果当前点击的颜色盒子已经存在选择器,则关闭\r\n if($(ELEM_MAIN)[0] && $(ELEM_MAIN).data('index') == that.index){\r\n that.removePicker(Class.thisElemInd);\r\n } else { //插入颜色选择器\r\n that.removePicker(Class.thisElemInd); \r\n $('body').append(elemPicker);\r\n }\r\n\r\n // 记录当前执行的实例索引\r\n colorpicker.thisId = options.id;\r\n \r\n Class.thisElemInd = that.index; //记录最新打开的选择器索引\r\n Class.thisColor = elemColorBox.style.background //记录最新打开的选择器颜色选中值\r\n \r\n that.position();\r\n that.pickerEvents();\r\n };\r\n\r\n //颜色选择器移除\r\n Class.prototype.removePicker = function(index){\r\n var that = this;\r\n var options = that.config;\r\n var elem = $('#layui-colorpicker'+ (index || that.index));\r\n\r\n if(elem[0]){\r\n elem.remove();\r\n delete colorpicker.thisId;\r\n\r\n // 面板关闭后的回调\r\n typeof options.close === 'function' && options.close(that.color);\r\n }\r\n\r\n return that;\r\n };\r\n \r\n //定位算法\r\n Class.prototype.position = function(){\r\n var that = this\r\n ,options = that.config;\r\n lay.position(that.bindElem || that.elemColorBox[0], that.elemPicker[0], {\r\n position: options.position\r\n ,align: 'center'\r\n });\r\n return that;\r\n };\r\n\r\n //颜色选择器赋值\r\n Class.prototype.val = function(){\r\n var that = this\r\n ,options = that.config\r\n \r\n ,elemColorBox = that.elemColorBox.find('.' + PICKER_TRIG_SPAN)\r\n ,elemPickerInput = that.elemPicker.find('.' + PICKER_INPUT)\r\n ,e = elemColorBox[0]\r\n ,bgcolor = e.style.backgroundColor;\r\n\r\n //判断是否有背景颜色\r\n if(bgcolor){\r\n \r\n //转化成hsb格式\r\n var hsb = RGBToHSB(RGBSTo(bgcolor))\r\n ,type = elemColorBox.attr('lay-type');\r\n \r\n //同步滑块的位置及颜色选择器的选择\r\n that.select(hsb.h, hsb.s, hsb.b);\r\n \r\n // 若格式要求为rgb\r\n if(type === 'torgb'){\r\n elemPickerInput.find('input').val(bgcolor);\r\n } else if(type === 'rgba'){ // 若格式要求为 rgba\r\n var rgb = RGBSTo(bgcolor);\r\n \r\n // 若开启透明度而没有设置,则给默认值\r\n if((bgcolor.match(/[0-9]{1,3}/g) || []).length === 3){\r\n elemPickerInput.find('input').val('rgba('+ rgb.r +', '+ rgb.g +', '+ rgb.b +', 1)');\r\n that.elemPicker.find('.'+ PICKER_ALPHA_SLIDER).css(\"left\", 280);\r\n } else {\r\n elemPickerInput.find('input').val(bgcolor);\r\n var left = bgcolor.slice(bgcolor.lastIndexOf(\",\") + 1, bgcolor.length - 1) * 280;\r\n that.elemPicker.find('.'+ PICKER_ALPHA_SLIDER).css(\"left\", left);\r\n }\r\n \r\n // 设置 span 背景色\r\n that.elemPicker.find('.'+ PICKER_ALPHA_BG)[0].style.background = 'linear-gradient(to right, rgba('+ rgb.r +', '+ rgb.g +', '+ rgb.b +', 0), rgb('+ rgb.r +', '+ rgb.g +', '+ rgb.b +'))'; \r\n } else {\r\n elemPickerInput.find('input').val('#'+ HSBToHEX(hsb));\r\n }\r\n } else {\r\n // 若没有背景颜色则默认到最初始的状态\r\n that.select(0,100,100);\r\n elemPickerInput.find('input').val(\"\");\r\n that.elemPicker.find('.'+ PICKER_ALPHA_BG)[0].style.background = '';\r\n that.elemPicker.find('.'+ PICKER_ALPHA_SLIDER).css(\"left\", 280);\r\n }\r\n };\r\n\r\n //颜色选择器滑动 / 点击\r\n Class.prototype.side = function(){\r\n var that = this\r\n ,options = that.config\r\n \r\n ,span = that.elemColorBox.find('.' + PICKER_TRIG_SPAN)\r\n ,type = span.attr('lay-type')\r\n\r\n ,side = that.elemPicker.find('.' + PICKER_SIDE)\r\n ,slider = that.elemPicker.find('.' + PICKER_SIDE_SLIDER)\r\n ,basis = that.elemPicker.find('.' + PICKER_BASIS)\r\n ,choose = that.elemPicker.find('.' + PICKER_BASIS_CUR)\r\n ,alphacolor = that.elemPicker.find('.' + PICKER_ALPHA_BG)\r\n ,alphaslider = that.elemPicker.find('.' + PICKER_ALPHA_SLIDER)\r\n \r\n ,_h = slider[0].offsetTop/180*360\r\n ,_b = 100 - (choose[0].offsetTop + 3)/180*100\r\n ,_s = (choose[0].offsetLeft + 3)/260*100\r\n ,_a = Math.round(alphaslider[0].offsetLeft/280*100)/100 \r\n \r\n ,i = that.elemColorBox.find('.' + PICKER_TRIG_I)\r\n ,pre = that.elemPicker.find('.layui-colorpicker-pre').children('div')\r\n\r\n ,change = function(x,y,z,a){\r\n that.select(x, y, z);\r\n var rgb = HSBToRGB({h:x, s:y, b:z});\r\n var color = HSBToHEX({h:x, s:y, b:z});\r\n var elemInput = that.elemPicker.find('.' + PICKER_INPUT).find('input');\r\n\r\n i.addClass(ICON_PICKER_DOWN).removeClass(ICON_PICKER_CLOSE);\r\n span[0].style.background = 'rgb('+ rgb.r +', '+ rgb.g +', '+ rgb.b +')';\r\n\r\n if(type === 'torgb'){\r\n elemInput.val('rgb('+ rgb.r +', '+ rgb.g +', '+ rgb.b +')');\r\n } else if(type === 'rgba'){\r\n var left = a * 280;\r\n alphaslider.css(\"left\", left);\r\n elemInput.val('rgba('+ rgb.r +', '+ rgb.g +', '+ rgb.b +', '+ a +')');\r\n span[0].style.background = 'rgba('+ rgb.r +', '+ rgb.g +', '+ rgb.b +', '+ a +')';\r\n alphacolor[0].style.background = 'linear-gradient(to right, rgba('+ rgb.r +', '+ rgb.g +', '+ rgb.b +', 0), rgb('+ rgb.r +', '+ rgb.g +', '+ rgb.b +'))'\r\n } else {\r\n elemInput.val('#'+ color);\r\n }\r\n \r\n //回调更改的颜色\r\n options.change && options.change($.trim(that.elemPicker.find('.' + PICKER_INPUT).find('input').val()));\r\n }\r\n\r\n //拖拽元素\r\n ,elemMove = $(['
              '].join(''))\r\n ,createMoveElem = function(call){\r\n $('#LAY-colorpicker-moving')[0] || $('body').append(elemMove);\r\n elemMove.on('mousemove', call);\r\n elemMove.on('mouseup', function(){\r\n elemMove.remove();\r\n }).on('mouseleave', function(){\r\n elemMove.remove();\r\n });\r\n };\r\n // 移动端滑动模拟事件中\r\n // 1. 不触发游标上绑定的事件,以提高性能,使滑动更流畅\r\n // 2. 游标上的事件需要冒泡到颜色拾取区域,用来模拟拖动游标的效果\r\n var needTrigger = true;\r\n var needStopPropagation = true;\r\n\r\n //右侧主色选择\r\n slider.on('mousedown', function(e, triggerEvent){\r\n var oldtop = this.offsetTop;\r\n var oldy = e.clientY === undefined ? triggerEvent.clientY : e.clientY;\r\n var move = function(e){\r\n var top = oldtop + (e.clientY - oldy)\r\n ,maxh = side[0].offsetHeight;\r\n if(top < 0)top = 0;\r\n if(top > maxh)top = maxh;\r\n var h = top/180*360;\r\n _h = h;\r\n change(h, _s, _b, _a);\r\n e.preventDefault();\r\n };\r\n needStopPropagation && layui.stope(e);\r\n createMoveElem(move);\r\n e.preventDefault();\r\n });\r\n \r\n side.on('mousedown', function(e){\r\n var top = e.clientY - $(this).offset().top + $win.scrollTop();\r\n if(top < 0)top = 0;\r\n if(top > this.offsetHeight) top = this.offsetHeight; \r\n var h = top/180*360;\r\n _h = h;\r\n change(h, _s, _b, _a); \r\n e.preventDefault();\r\n needTrigger && slider.trigger('mousedown', e);\r\n });\r\n \r\n //中间小圆点颜色选择\r\n choose.on('mousedown', function(e, triggerEvent){\r\n var oldtop = this.offsetTop;\r\n var oldleft = this.offsetLeft;\r\n var oldy = e.clientY === undefined ? triggerEvent.clientY : e.clientY;\r\n var oldx = e.clientX === undefined ? triggerEvent.clientX : e.clientX;\r\n var move = function(e){\r\n var top = oldtop + (e.clientY - oldy)\r\n ,left = oldleft + (e.clientX - oldx)\r\n ,maxh = basis[0].offsetHeight\r\n ,maxw = basis[0].offsetWidth;\r\n if(top < 0)top = 0;\r\n if(top > maxh)top = maxh;\r\n if(left < 0)left = 0;\r\n if(left > maxw)left = maxw;\r\n var s = left/260*100\r\n ,b = 100 - top/180*100;\r\n _b = b;\r\n _s = s;\r\n change(_h, s, b, _a); \r\n e.preventDefault();\r\n };\r\n needStopPropagation && layui.stope(e);\r\n createMoveElem(move);\r\n e.preventDefault();\r\n });\r\n \r\n basis.on('mousedown', function(e){\r\n var top = e.clientY - $(this).offset().top + $win.scrollTop()\r\n ,left = e.clientX - $(this).offset().left + $win.scrollLeft()\r\n if(top < 0)top = 0;\r\n if(top > this.offsetHeight)top = this.offsetHeight;\r\n if(left < 0)left = 0;\r\n if(left > this.offsetWidth)left = this.offsetWidth;\r\n var s = left/260*100\r\n ,b = 100 - top/180*100;\r\n _b = b;\r\n _s = s;\r\n change(_h, s, b, _a); \r\n layui.stope(e);\r\n e.preventDefault();\r\n needTrigger && choose.trigger('mousedown', e);\r\n });\r\n \r\n //底部透明度选择\r\n alphaslider.on('mousedown', function(e, triggerEvent){\r\n var oldleft = this.offsetLeft;\r\n var oldx = e.clientX === undefined ? triggerEvent.clientX : e.clientX;\r\n var move = function(e){\r\n var left = oldleft + (e.clientX - oldx)\r\n ,maxw = alphacolor[0].offsetWidth;\r\n if(left < 0)left = 0;\r\n if(left > maxw)left = maxw;\r\n var a = Math.round(left /280*100) /100;\r\n _a = a;\r\n change(_h, _s, _b, a); \r\n e.preventDefault();\r\n };\r\n \r\n needStopPropagation && layui.stope(e);\r\n createMoveElem(move);\r\n e.preventDefault();\r\n });\r\n alphacolor.on('mousedown', function(e){\r\n var left = e.clientX - $(this).offset().left\r\n if(left < 0)left = 0;\r\n if(left > this.offsetWidth)left = this.offsetWidth;\r\n var a = Math.round(left /280*100) /100;\r\n _a = a;\r\n change(_h, _s, _b, a); \r\n e.preventDefault();\r\n needTrigger && alphaslider.trigger('mousedown', e);\r\n });\r\n \r\n //预定义颜色选择\r\n pre.each(function(){\r\n $(this).on('click', function(){\r\n $(this).parent('.layui-colorpicker-pre').addClass('selected').siblings().removeClass('selected');\r\n var color = this.style.backgroundColor\r\n ,hsb = RGBToHSB(RGBSTo(color))\r\n ,a = color.slice(color.lastIndexOf(\",\") + 1, color.length - 1),left;\r\n _h = hsb.h;\r\n _s = hsb.s;\r\n _b = hsb.b;\r\n if((color.match(/[0-9]{1,3}/g) || []).length === 3) a = 1;\r\n _a = a;\r\n left = a * 280;\r\n change(hsb.h, hsb.s, hsb.b, a);\r\n })\r\n });\r\n\r\n if(!lay.touchEventsSupported()) return;\r\n // 触摸事件模拟\r\n layui.each([\r\n {elem: side, eventType: 'mousedown'},\r\n {elem: alphacolor, eventType: 'mousedown'},\r\n {elem: basis, eventType: 'mousedown'}\r\n ], function(i, obj){\r\n lay.touchSwipe(obj.elem, {\r\n onTouchStart: function(){\r\n needTrigger = false;\r\n needStopPropagation = false;\r\n },\r\n onTouchMove: function(e){\r\n touchHandler(e, obj.eventType)\r\n },\r\n onTouchEnd: function(){\r\n elemMove.remove();\r\n needTrigger = true;\r\n needStopPropagation = true;\r\n }\r\n })\r\n })\r\n\r\n function touchHandler(event, eventType) {\r\n var pointer = event.touches[0];\r\n var simulatedEvent = document.createEvent(\"MouseEvent\");\r\n\r\n simulatedEvent.initMouseEvent(eventType, \r\n true, true, window, 1, \r\n pointer.screenX, pointer.screenY,pointer.clientX, pointer.clientY, \r\n false, false, false, false, 0, null\r\n );\r\n pointer.target.dispatchEvent(simulatedEvent);\r\n }\r\n };\r\n\r\n //颜色选择器hsb转换\r\n Class.prototype.select = function(h, s, b, type){\r\n var that = this;\r\n var options = that.config;\r\n var hex = HSBToHEX({h:h, s:100, b:100});\r\n var color = HSBToHEX({h:h, s:s, b:b});\r\n var sidetop = h/360*180;\r\n var top = 180 - b/100*180;\r\n var left = s/100*260;\r\n var basisElem = that.elemPicker.find('.' + PICKER_BASIS)[0];\r\n \r\n that.elemPicker.find('.' + PICKER_SIDE_SLIDER).css(\"top\", sidetop); //滑块的top\r\n basisElem.style.background = '#' + hex; //颜色选择器的背景\r\n \r\n //选择器的top left\r\n that.elemPicker.find('.' + PICKER_BASIS_CUR).css({\r\n \"top\": top / basisElem.offsetHeight * 100 + '%',\r\n \"left\": left / basisElem.offsetWidth * 100 + '%' \r\n });\r\n \r\n // if(type === 'change') return;\r\n\r\n // 选中的颜色\r\n // that.elemPicker.find('.' + PICKER_INPUT).find('input').val('#'+ color);\r\n };\r\n \r\n Class.prototype.pickerEvents = function(){\r\n var that = this\r\n ,options = that.config\r\n \r\n ,elemColorBoxSpan = that.elemColorBox.find('.' + PICKER_TRIG_SPAN) //颜色盒子\r\n ,elemPickerInput = that.elemPicker.find('.' + PICKER_INPUT + ' input') //颜色选择器表单\r\n \r\n ,pickerEvents = {\r\n //清空\r\n clear: function(othis){\r\n elemColorBoxSpan[0].style.background ='';\r\n that.elemColorBox.find('.' + PICKER_TRIG_I).removeClass(ICON_PICKER_DOWN).addClass(ICON_PICKER_CLOSE);\r\n that.color = '';\r\n \r\n options.done && options.done('');\r\n that.removePicker();\r\n }\r\n \r\n //确认\r\n ,confirm: function(othis, change){\r\n var value = $.trim(elemPickerInput.val())\r\n ,colorValue\r\n ,hsb;\r\n \r\n if(value.indexOf(',') > -1){\r\n hsb = RGBToHSB(RGBSTo(value));\r\n that.select(hsb.h, hsb.s, hsb.b);\r\n elemColorBoxSpan[0].style.background = (colorValue = '#' + HSBToHEX(hsb)); \r\n \r\n if((value.match(/[0-9]{1,3}/g) || []).length > 3 && elemColorBoxSpan.attr('lay-type') === 'rgba'){\r\n var left = value.slice(value.lastIndexOf(\",\") + 1, value.length - 1) * 280;\r\n that.elemPicker.find('.' + PICKER_ALPHA_SLIDER).css(\"left\", left);\r\n elemColorBoxSpan[0].style.background = value;\r\n colorValue = value;\r\n }\r\n } else {\r\n hsb = HEXToHSB(value);\r\n elemColorBoxSpan[0].style.background = (colorValue = '#' + HSBToHEX(hsb)); \r\n that.elemColorBox.find('.' + PICKER_TRIG_I).removeClass(ICON_PICKER_CLOSE).addClass(ICON_PICKER_DOWN);\r\n }\r\n \r\n if(change === 'change'){\r\n that.select(hsb.h, hsb.s, hsb.b, change);\r\n options.change && options.change(colorValue);\r\n return;\r\n }\r\n that.color = value;\r\n \r\n options.done && options.done(value);\r\n that.removePicker(); \r\n }\r\n };\r\n \r\n //选择器面板点击事件\r\n that.elemPicker.on('click', '*[colorpicker-events]', function(){\r\n var othis = $(this)\r\n ,attrEvent = othis.attr('colorpicker-events');\r\n pickerEvents[attrEvent] && pickerEvents[attrEvent].call(this, othis);\r\n });\r\n \r\n //输入框事件\r\n elemPickerInput.on('keyup', function(e){\r\n var othis = $(this);\r\n pickerEvents.confirm.call(this, othis, e.keyCode === 13 ? null : 'change');\r\n });\r\n }\r\n\r\n // 颜色选择器输入\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 弹出颜色选择器\r\n that.elemColorBox.on('click' , function(){\r\n that.renderPicker();\r\n if($(ELEM_MAIN)[0]){\r\n that.val();\r\n that.side();\r\n }\r\n });\r\n };\r\n\r\n //全局事件\r\n (function(){\r\n //绑定关闭控件事件\r\n $doc.on(clickOrMousedown, function(e){\r\n if(!colorpicker.thisId) return;\r\n var that = thisModule.getThis(colorpicker.thisId);\r\n if(!that) return;\r\n\r\n var options = that.config;\r\n var elemColorBoxSpan = that.elemColorBox.find('.' + PICKER_TRIG_SPAN);\r\n\r\n //如果点击的元素是颜色框\r\n if($(e.target).hasClass(ELEM) \r\n || $(e.target).parents('.'+ELEM)[0]\r\n ) return; \r\n \r\n //如果点击的元素是选择器\r\n if($(e.target).hasClass(ELEM_MAIN.replace(/\\./g, '')) \r\n || $(e.target).parents(ELEM_MAIN)[0]\r\n ) return; \r\n \r\n if(!that.elemPicker) return;\r\n \r\n if(that.color){\r\n var hsb = RGBToHSB(RGBSTo(that.color));\r\n that.select(hsb.h, hsb.s, hsb.b); \r\n } else {\r\n that.elemColorBox.find('.' + PICKER_TRIG_I).removeClass(ICON_PICKER_DOWN).addClass(ICON_PICKER_CLOSE);\r\n }\r\n elemColorBoxSpan[0].style.background = that.color || '';\r\n \r\n // 取消选择的回调\r\n typeof options.cancel === 'function' && options.cancel(that.color);\r\n\r\n // 移除面板\r\n that.removePicker();\r\n });\r\n\r\n //自适应定位\r\n $win.on('resize', function(){\r\n if(!colorpicker.thisId) return;\r\n var that = thisModule.getThis(colorpicker.thisId);\r\n if(!that) return;\r\n\r\n if(!that.elemPicker || !$(ELEM_MAIN)[0]){\r\n return false;\r\n }\r\n that.position();\r\n });\r\n })();\r\n\r\n // 记录所有实例\r\n thisModule.that = {}; // 记录所有实例对象\r\n \r\n // 获取当前实例对象\r\n thisModule.getThis = function(id){\r\n var that = thisModule.that[id];\r\n if(!that) hint.error(id ? (MOD_NAME +' instance with ID \\''+ id +'\\' not found') : 'ID argument required');\r\n return that;\r\n };\r\n \r\n //核心入口\r\n colorpicker.render = function(options){\r\n var inst = new Class(options);\r\n return thisModule.call(inst);\r\n };\r\n \r\n exports(MOD_NAME, colorpicker);\r\n});\r\n","/**\r\n * element\r\n * 常用元素操作组件\r\n */\r\n \r\nlayui.define('jquery', function(exports){\r\n 'use strict';\r\n \r\n var $ = layui.$;\r\n var hint = layui.hint();\r\n var device = layui.device();\r\n \r\n var MOD_NAME = 'element';\r\n var THIS = 'layui-this';\r\n var SHOW = 'layui-show';\r\n var TITLE = '.layui-tab-title';\r\n \r\n var Element = function(){\r\n this.config = {};\r\n };\r\n \r\n // 全局设置\r\n Element.prototype.set = function(options){\r\n var that = this;\r\n $.extend(true, that.config, options);\r\n return that;\r\n };\r\n \r\n // 表单事件\r\n Element.prototype.on = function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n };\r\n \r\n // 外部 Tab 新增\r\n Element.prototype.tabAdd = function(filter, options){\r\n var tabElem = $('.layui-tab[lay-filter='+ filter +']');\r\n var titElem = tabElem.children(TITLE);\r\n var barElem = titElem.children('.layui-tab-bar');\r\n var contElem = tabElem.children('.layui-tab-content');\r\n var li = ' 0) layAttr.unshift(''); //向前插,预留空格\r\n return layAttr.join(' ');\r\n }() +'>'+ (options.title || 'unnaming') +'';\r\n \r\n barElem[0] ? barElem.before(li) : titElem.append(li);\r\n contElem.append('
              '+ (options.content || '') +'
              ');\r\n // call.hideTabMore(true);\r\n // 是否添加即切换\r\n options.change && this.tabChange(filter, options.id);\r\n titElem.data('LAY_TAB_CHANGE', options.change);\r\n call.tabAuto(options.change ? 'change' : null);\r\n return this;\r\n };\r\n \r\n // 外部 Tab 删除\r\n Element.prototype.tabDelete = function(filter, layid){\r\n var tabElem = $('.layui-tab[lay-filter='+ filter +']');\r\n var titElem = tabElem.children(TITLE);\r\n var liElem = titElem.find('>li[lay-id=\"'+ layid +'\"]');\r\n call.tabDelete(null, liElem);\r\n return this;\r\n };\r\n \r\n /**\r\n * 外部 Tab 切换\r\n * @param {string} filter - 标签主容器 lay-filter 值\r\n * @param {string} layid - 标签头 lay-id 值\r\n * @param {boolean} force - 是否强制切换\r\n * @returns {this}\r\n */\r\n Element.prototype.tabChange = function(filter, layid, force){\r\n var tabElem = $('.layui-tab[lay-filter='+ filter +']');\r\n var titElem = tabElem.children(TITLE);\r\n var liElem = titElem.find('>li[lay-id=\"'+ layid +'\"]');\r\n\r\n call.tabClick.call(liElem[0], {\r\n liElem: liElem,\r\n force: force\r\n });\r\n return this;\r\n };\r\n \r\n // 自定义 Tab 选项卡\r\n Element.prototype.tab = function(options){\r\n options = options || {};\r\n dom.on('click', options.headerElem, function(e){\r\n var index = $(options.headerElem).index($(this));\r\n call.tabClick.call(this, {\r\n index: index,\r\n options: options\r\n });\r\n });\r\n };\r\n \r\n \r\n // 动态改变进度条\r\n Element.prototype.progress = function(filter, percent){\r\n var ELEM = 'layui-progress';\r\n var elem = $('.'+ ELEM +'[lay-filter='+ filter +']');\r\n var elemBar = elem.find('.'+ ELEM +'-bar');\r\n var text = elemBar.find('.'+ ELEM +'-text');\r\n\r\n elemBar.css('width', function(){\r\n return /^.+\\/.+$/.test(percent) \r\n ? (new Function('return '+ percent)() * 100) + '%'\r\n : percent;\r\n }).attr('lay-percent', percent);\r\n text.text(percent);\r\n return this;\r\n };\r\n \r\n var NAV_ELEM = '.layui-nav';\r\n var NAV_ITEM = 'layui-nav-item';\r\n var NAV_BAR = 'layui-nav-bar';\r\n var NAV_TREE = 'layui-nav-tree';\r\n var NAV_CHILD = 'layui-nav-child';\r\n var NAV_CHILD_C = 'layui-nav-child-c';\r\n var NAV_MORE = 'layui-nav-more';\r\n var NAV_DOWN = 'layui-icon-down';\r\n var NAV_ANIM = 'layui-anim layui-anim-upbit';\r\n \r\n // 基础事件体\r\n var call = {\r\n // Tab 点击\r\n tabClick: function(obj){\r\n obj = obj || {};\r\n var options = obj.options || {};\r\n var othis = obj.liElem || $(this);\r\n var parents = options.headerElem \r\n ? othis.parent() \r\n : othis.parents('.layui-tab').eq(0);\r\n var item = options.bodyElem \r\n ? $(options.bodyElem) \r\n : parents.children('.layui-tab-content').children('.layui-tab-item');\r\n var elemA = othis.find('a');\r\n var isJump = elemA.attr('href') !== 'javascript:;' && elemA.attr('target') === '_blank'; // 是否存在跳转\r\n var unselect = typeof othis.attr('lay-unselect') === 'string'; // 是否禁用选中\r\n var filter = parents.attr('lay-filter');\r\n var hasId = othis.attr('lay-id');\r\n\r\n // 下标\r\n var index = 'index' in obj \r\n ? obj.index \r\n : othis.parent().children('li').index(othis);\r\n\r\n // 若非强制切换,则根据 tabBeforeChange 事件的返回结果决定是否切换\r\n if (!obj.force) {\r\n var liThis = othis.siblings('.' + THIS);\r\n var shouldChange = layui.event.call(this, MOD_NAME, 'tabBeforeChange('+ filter +')', {\r\n elem: parents,\r\n from: {\r\n index: othis.parent().children('li').index(liThis),\r\n id: liThis.attr('lay-id')\r\n },\r\n to: {\r\n index: index,\r\n id: hasId\r\n },\r\n });\r\n if(shouldChange === false) return;\r\n }\r\n \r\n // 执行切换\r\n if(!(isJump || unselect)){\r\n othis.addClass(THIS).siblings().removeClass(THIS);\r\n if(hasId){\r\n var contentElem = item.filter('[lay-id=\"' + hasId + '\"]');\r\n contentElem = contentElem.length ? contentElem : item.eq(index);\r\n contentElem.addClass(SHOW).siblings().removeClass(SHOW);\r\n }else{\r\n item.eq(index).addClass(SHOW).siblings().removeClass(SHOW);\r\n }\r\n }\r\n \r\n layui.event.call(this, MOD_NAME, 'tab('+ filter +')', {\r\n elem: parents,\r\n index: index,\r\n id: hasId\r\n });\r\n }\r\n \r\n // Tab 删除\r\n ,tabDelete: function(e, othis){\r\n var li = othis || $(this).parent();\r\n var index = li.parent().children('li').index(li);\r\n var tabElem = li.closest('.layui-tab');\r\n var item = tabElem.children('.layui-tab-content').children('.layui-tab-item');\r\n var filter = tabElem.attr('lay-filter');\r\n var hasId = li.attr('lay-id');\r\n\r\n var shouldClose = layui.event.call(li[0], MOD_NAME, 'tabBeforeDelete('+ filter +')', {\r\n elem: tabElem,\r\n index: index,\r\n id: hasId\r\n });\r\n if(shouldClose === false) return;\r\n \r\n if(li.hasClass(THIS)){\r\n if (li.next()[0] && li.next().is('li')){\r\n call.tabClick.call(li.next()[0], {\r\n index: index + 1\r\n });\r\n } else if (li.prev()[0] && li.prev().is('li')){\r\n call.tabClick.call(li.prev()[0], null, index - 1);\r\n }\r\n }\r\n \r\n li.remove();\r\n if(hasId){\r\n var contentElem = item.filter('[lay-id=\"' + hasId + '\"]');\r\n contentElem = contentElem.length ? contentElem : item.eq(index)\r\n contentElem.remove()\r\n }else{\r\n item.eq(index).remove();\r\n }\r\n setTimeout(function(){\r\n call.tabAuto();\r\n }, 50);\r\n \r\n layui.event.call(this, MOD_NAME, 'tabDelete('+ filter +')', {\r\n elem: tabElem,\r\n index: index,\r\n id: hasId\r\n });\r\n }\r\n \r\n // Tab 自适应\r\n ,tabAuto: function(spread, elem){\r\n var SCROLL = 'layui-tab-scroll';\r\n var MORE = 'layui-tab-more';\r\n var BAR = 'layui-tab-bar';\r\n var CLOSE = 'layui-tab-close';\r\n var that = this;\r\n var targetElem = elem || $('.layui-tab');\r\n \r\n targetElem.each(function(){\r\n var othis = $(this);\r\n var title = othis.children('.layui-tab-title');\r\n var item = othis.children('.layui-tab-content').children('.layui-tab-item');\r\n var STOPE = 'lay-stope=\"tabmore\"';\r\n var span = $('');\r\n\r\n if(that === window && device.ie != 8){\r\n // call.hideTabMore(true)\r\n }\r\n \r\n // 开启关闭图标\r\n var allowclose = othis.attr('lay-allowclose');\r\n if(allowclose && allowclose !== 'false'){\r\n title.find('li').each(function(){\r\n var li = $(this);\r\n if(!li.find('.'+CLOSE)[0] && li.attr('lay-allowclose') !== 'false'){\r\n var close = $('');\r\n close.on('click', call.tabDelete);\r\n li.append(close);\r\n }\r\n });\r\n }\r\n \r\n if(typeof othis.attr('lay-unauto') === 'string') return;\r\n \r\n // 响应式\r\n if(\r\n title.prop('scrollWidth') > title.outerWidth() + 1 || (\r\n title.find('li').length && title.height() > function(height){\r\n return height + height/2;\r\n }(title.find('li').eq(0).height())\r\n )\r\n ){\r\n // 若执行是来自于切换,则自动展开\r\n (\r\n spread === 'change' && title.data('LAY_TAB_CHANGE')\r\n ) && title.addClass(MORE);\r\n \r\n if(title.find('.'+BAR)[0]) return;\r\n title.append(span);\r\n othis.attr('overflow', '');\r\n\r\n // 展开图标事件\r\n span.on('click', function(e){\r\n var isSpread = title.hasClass(MORE);\r\n title[isSpread ? 'removeClass' : 'addClass'](MORE);\r\n });\r\n } else {\r\n title.find('.'+ BAR).remove();\r\n othis.removeAttr('overflow');\r\n }\r\n });\r\n }\r\n // 隐藏更多 Tab\r\n ,hideTabMore: function(e){\r\n var tsbTitle = $('.layui-tab-title');\r\n if(e === true || $(e.target).attr('lay-stope') !== 'tabmore'){\r\n tsbTitle.removeClass('layui-tab-more');\r\n tsbTitle.find('.layui-tab-bar').attr('title','');\r\n }\r\n }\r\n \r\n //点击一级菜单\r\n /*\r\n ,clickThis: function(){\r\n var othis = $(this), parents = othis.parents(NAV_ELEM)\r\n ,filter = parents.attr('lay-filter')\r\n ,elemA = othis.find('a')\r\n ,unselect = typeof othis.attr('lay-unselect') === 'string';\r\n\r\n if(othis.find('.'+NAV_CHILD)[0]) return;\r\n \r\n if(!(elemA.attr('href') !== 'javascript:;' && elemA.attr('target') === '_blank') && !unselect){\r\n parents.find('.'+THIS).removeClass(THIS);\r\n othis.addClass(THIS);\r\n }\r\n \r\n layui.event.call(this, MOD_NAME, 'nav('+ filter +')', othis);\r\n }\r\n )\r\n */\r\n \r\n // 点击菜单 - a 标签触发\r\n ,clickThis: function() {\r\n var othis = $(this);\r\n var parents = othis.closest(NAV_ELEM);\r\n var filter = parents.attr('lay-filter');\r\n var parent = othis.parent() ;\r\n var child = othis.siblings('.'+ NAV_CHILD);\r\n var unselect = typeof parent.attr('lay-unselect') === 'string'; // 是否禁用选中\r\n \r\n // 满足点击选中的条件\r\n if (!(othis.attr('href') !== 'javascript:;' && othis.attr('target') === '_blank') && !unselect) {\r\n if (!child[0]) {\r\n parents.find('.'+ THIS).removeClass(THIS);\r\n parent.addClass(THIS);\r\n }\r\n }\r\n \r\n // 若为垂直菜单\r\n if (parents.hasClass(NAV_TREE)) {\r\n var NAV_ITEMED = NAV_ITEM + 'ed'; // 用于标注展开状态\r\n var needExpand = !parent.hasClass(NAV_ITEMED); // 是否执行展开\r\n var ANIM_MS = 200; // 动画过渡毫秒数\r\n\r\n // 动画执行完成后的操作\r\n var complete = function() {\r\n $(this).css({\r\n \"display\": \"\" // 剔除动画生成的 style display,以适配外部样式的状态重置\r\n });\r\n // 避免导航滑块错位\r\n parents.children('.'+ NAV_BAR).css({\r\n opacity: 0\r\n })\r\n };\r\n\r\n // 是否正处于动画中的状态\r\n if (child.is(':animated')) return;\r\n\r\n // 剔除可能存在的 CSS3 动画类\r\n child.removeClass(NAV_ANIM);\r\n\r\n // 若有子菜单,则对其执行展开或收缩\r\n if (child[0]) {\r\n if (needExpand) {\r\n // 先执行 slideDown 动画,再标注展开状态样式,避免元素 `block` 状态导致动画无效\r\n child.slideDown(ANIM_MS, complete);\r\n parent.addClass(NAV_ITEMED);\r\n } else {\r\n // 先取消展开状态样式,再将元素临时显示,避免 `none` 状态导致 slideUp 动画无效\r\n parent.removeClass(NAV_ITEMED);\r\n child.show().slideUp(ANIM_MS, complete);\r\n }\r\n\r\n // 手风琴 --- 收缩兄弟展开项\r\n if (typeof parents.attr('lay-accordion') === 'string' || parents.attr('lay-shrink') === 'all') {\r\n var parentSibs = parent.siblings('.'+ NAV_ITEMED);\r\n parentSibs.removeClass(NAV_ITEMED);\r\n parentSibs.children('.'+ NAV_CHILD).show().stop().slideUp(ANIM_MS, complete);\r\n }\r\n }\r\n }\r\n \r\n layui.event.call(this, MOD_NAME, 'nav('+ filter +')', othis);\r\n }\r\n \r\n // 折叠面板\r\n ,collapse: function(){\r\n var othis = $(this);\r\n var icon = othis.find('.layui-colla-icon');\r\n var elemCont = othis.siblings('.layui-colla-content');\r\n var parents = othis.parents('.layui-collapse').eq(0);\r\n var filter = parents.attr('lay-filter');\r\n var isNone = elemCont.css('display') === 'none';\r\n \r\n // 是否手风琴\r\n if(typeof parents.attr('lay-accordion') === 'string'){\r\n var show = parents.children('.layui-colla-item').children('.'+SHOW);\r\n show.siblings('.layui-colla-title').children('.layui-colla-icon').html('');\r\n show.removeClass(SHOW);\r\n }\r\n \r\n elemCont[isNone ? 'addClass' : 'removeClass'](SHOW);\r\n icon.html(isNone ? '' : '');\r\n \r\n layui.event.call(this, MOD_NAME, 'collapse('+ filter +')', {\r\n title: othis\r\n ,content: elemCont\r\n ,show: isNone\r\n });\r\n }\r\n };\r\n \r\n // 初始化元素操作\r\n Element.prototype.init = function(type, filter){\r\n var that = this, elemFilter = function(){\r\n return (typeof filter === 'string' && filter) ? ('[lay-filter=\"' + filter +'\"]') : '';\r\n }(), items = {\r\n \r\n // Tab 选项卡\r\n tab: function(elem){\r\n call.tabAuto.call({}, elem);\r\n }\r\n \r\n // 导航菜单\r\n ,nav: function(elem){\r\n var TIME = 200;\r\n var timer = {};\r\n var timerMore = {};\r\n var timeEnd = {};\r\n var NAV_TITLE = 'layui-nav-title';\r\n \r\n // 滑块跟随\r\n var follow = function(bar, nav, index) {\r\n var othis = $(this);\r\n var child = othis.find('.'+NAV_CHILD);\r\n\r\n // 是否垂直导航菜单\r\n if (nav.hasClass(NAV_TREE)) {\r\n // 无子菜单时跟随\r\n if (!child[0]) {\r\n var thisA = othis.children('.'+ NAV_TITLE);\r\n bar.css({\r\n top: othis.offset().top - nav.offset().top,\r\n height: (thisA[0] ? thisA : othis).outerHeight(),\r\n opacity: 1\r\n });\r\n }\r\n } else {\r\n child.addClass(NAV_ANIM);\r\n \r\n // 若居中对齐\r\n if (child.hasClass(NAV_CHILD_C)) {\r\n child.css({\r\n left: -(child.outerWidth() - othis.width()) / 2\r\n });\r\n }\r\n \r\n // 滑块定位\r\n if (child[0]) { // 若有子菜单,则滑块消失\r\n bar.css({\r\n left: bar.position().left + bar.width() / 2,\r\n width: 0,\r\n opacity: 0\r\n });\r\n } else { // bar 跟随\r\n bar.css({\r\n left: othis.position().left + parseFloat(othis.css('marginLeft')),\r\n top: othis.position().top + othis.height() - bar.height()\r\n });\r\n }\r\n \r\n // 渐显滑块并适配宽度\r\n timer[index] = setTimeout(function() {\r\n bar.css({\r\n width: child[0] ? 0 : othis.width(),\r\n opacity: child[0] ? 0 : 1\r\n });\r\n }, device.ie && device.ie < 10 ? 0 : TIME);\r\n \r\n // 显示子菜单\r\n clearTimeout(timeEnd[index]);\r\n if (child.css('display') === 'block') {\r\n clearTimeout(timerMore[index]);\r\n }\r\n timerMore[index] = setTimeout(function(){\r\n child.addClass(SHOW);\r\n othis.find('.'+NAV_MORE).addClass(NAV_MORE+'d');\r\n }, 300);\r\n }\r\n };\r\n \r\n // 遍历导航\r\n var targetElem = elem || $(NAV_ELEM + elemFilter);\r\n targetElem.each(function(index) {\r\n var othis = $(this);\r\n var bar = $('');\r\n var itemElem = othis.find('.'+NAV_ITEM);\r\n \r\n // hover 滑动效果\r\n var hasBarElem = othis.find('.'+NAV_BAR)[0];\r\n if (hasBarElem) hasBarElem.remove();\r\n othis.append(bar);\r\n ( othis.hasClass(NAV_TREE)\r\n ? itemElem.find('dd,>.'+ NAV_TITLE) \r\n : itemElem\r\n ).off('mouseenter.lay_nav').on('mouseenter.lay_nav', function() {\r\n follow.call(this, bar, othis, index);\r\n }).off('mouseleave.lay_nav').on('mouseleave.lay_nav', function() { // 鼠标移出\r\n // 是否为垂直导航\r\n if (othis.hasClass(NAV_TREE)) {\r\n bar.css({\r\n height: 0,\r\n opacity: 0\r\n });\r\n } else {\r\n // 隐藏子菜单\r\n clearTimeout(timerMore[index]);\r\n timerMore[index] = setTimeout(function(){\r\n othis.find('.'+ NAV_CHILD).removeClass(SHOW);\r\n othis.find('.'+ NAV_MORE).removeClass(NAV_MORE +'d');\r\n }, 300);\r\n }\r\n });\r\n\r\n // 鼠标离开当前菜单时\r\n othis.off('mouseleave.lay_nav').on('mouseleave.lay_nav', function() {\r\n clearTimeout(timer[index])\r\n timeEnd[index] = setTimeout(function() {\r\n if (!othis.hasClass(NAV_TREE)) {\r\n bar.css({\r\n width: 0,\r\n left: bar.position().left + bar.width() / 2,\r\n opacity: 0\r\n });\r\n }\r\n }, TIME);\r\n });\r\n \r\n // 展开子菜单\r\n itemElem.find('a').each(function() {\r\n var thisA = $(this);\r\n var parent = thisA.parent();\r\n var child = thisA.siblings('.'+ NAV_CHILD);\r\n \r\n // 输出小箭头\r\n if (child[0] && !thisA.children('.'+ NAV_MORE)[0]) {\r\n thisA.append('');\r\n }\r\n \r\n thisA.off('click', call.clickThis).on('click', call.clickThis); // 点击菜单\r\n });\r\n });\r\n }\r\n \r\n //面包屑\r\n ,breadcrumb: function(elem){\r\n var ELEM = '.layui-breadcrumb';\r\n var targetElem = elem || $(ELEM + elemFilter);\r\n\r\n targetElem.each(function(){\r\n var othis = $(this)\r\n ,ATTE_SPR = 'lay-separator'\r\n ,separator = othis.attr(ATTE_SPR) || '/'\r\n ,aNode = othis.find('a');\r\n if(aNode.next('span['+ ATTE_SPR +']')[0]) return;\r\n aNode.each(function(index){\r\n if(index === aNode.length - 1) return;\r\n $(this).after(''+ separator +'');\r\n });\r\n othis.css('visibility', 'visible');\r\n });\r\n }\r\n \r\n //进度条\r\n ,progress: function(elem){\r\n var ELEM = 'layui-progress';\r\n var targetElem = elem || $('.' + ELEM + elemFilter);\r\n\r\n targetElem.each(function(){\r\n var othis = $(this)\r\n ,elemBar = othis.find('.layui-progress-bar')\r\n ,percent = elemBar.attr('lay-percent');\r\n\r\n elemBar.css('width', function(){\r\n return /^.+\\/.+$/.test(percent) \r\n ? (new Function('return '+ percent)() * 100) + '%'\r\n : percent;\r\n });\r\n \r\n if(othis.attr('lay-showpercent')){\r\n setTimeout(function(){\r\n elemBar.html(''+ percent +'');\r\n },350);\r\n }\r\n });\r\n }\r\n \r\n //折叠面板\r\n ,collapse: function(elem){\r\n var ELEM = 'layui-collapse';\r\n var targetElem = elem || $('.' + ELEM + elemFilter);\r\n \r\n targetElem.each(function(){\r\n var elemItem = $(this).find('.layui-colla-item')\r\n elemItem.each(function(){\r\n var othis = $(this)\r\n ,elemTitle = othis.find('.layui-colla-title')\r\n ,elemCont = othis.find('.layui-colla-content')\r\n ,isNone = elemCont.css('display') === 'none';\r\n \r\n //初始状态\r\n elemTitle.find('.layui-colla-icon').remove();\r\n elemTitle.append(''+ (isNone ? '' : '') +'');\r\n\r\n //点击标题\r\n elemTitle.off('click', call.collapse).on('click', call.collapse);\r\n }); \r\n \r\n });\r\n }\r\n };\r\n\r\n if(type && typeof filter === 'object' && filter instanceof $){\r\n var targetElem = filter;\r\n return items[type](targetElem);\r\n }\r\n\r\n return items[type] ? items[type]() : layui.each(items, function(index, item){\r\n item();\r\n });\r\n };\r\n \r\n Element.prototype.render = Element.prototype.init;\r\n\r\n var element = new Element();\r\n var dom = $(document);\r\n \r\n $(function(){\r\n element.render();\r\n });\r\n\r\n dom.on('click', '.layui-tab-title li', call.tabClick); // Tab 切换\r\n // dom.on('click', call.hideTabMore); // 隐藏展开的 Tab\r\n $(window).on('resize', call.tabAuto); // 自适应\r\n \r\n exports(MOD_NAME, element);\r\n});\r\n\r\n","/**\r\n * upload\r\n * 上传组件\r\n */\r\n \r\nlayui.define(['lay', 'layer'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var lay = layui.lay;\r\n var layer = layui.layer;\r\n var device = layui.device();\r\n\r\n // 模块名\r\n var MOD_NAME = 'upload';\r\n var MOD_INDEX = 'layui_'+ MOD_NAME +'_index'; // 模块索引名\r\n\r\n // 外部接口\r\n var upload = {\r\n config: {}, // 全局配置项\r\n index: layui[MOD_NAME] ? (layui[MOD_NAME].index + 10000) : 0, // 索引\r\n // 设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n // 事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n };\r\n \r\n // 操作当前实例\r\n var thisModule = function(){\r\n var that = this;\r\n var options = that.config;\r\n var id = options.id;\r\n\r\n thisModule.that[id] = that; // 记录当前实例对象\r\n\r\n return {\r\n upload: function(files){\r\n that.upload.call(that, files);\r\n },\r\n reload: function(options){\r\n that.reload.call(that, options);\r\n },\r\n config: that.config\r\n }\r\n };\r\n \r\n // 字符常量\r\n var ELEM = 'layui-upload';\r\n var THIS = 'layui-this';\r\n var SHOW = 'layui-show';\r\n var HIDE = 'layui-hide';\r\n var DISABLED = 'layui-disabled';\r\n \r\n var ELEM_FILE = 'layui-upload-file';\r\n var ELEM_FORM = 'layui-upload-form';\r\n var ELEM_IFRAME = 'layui-upload-iframe';\r\n var ELEM_CHOOSE = 'layui-upload-choose';\r\n var ELEM_DRAG = 'layui-upload-drag';\r\n var UPLOADING = 'UPLOADING';\r\n \r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++upload.index;\r\n that.config = $.extend({}, that.config, upload.config, options);\r\n that.render();\r\n };\r\n \r\n // 默认配置\r\n Class.prototype.config = {\r\n accept: 'images', // 允许上传的文件类型:images/file/video/audio\r\n exts: '', // 允许上传的文件后缀名\r\n auto: true, // 是否选完文件后自动上传\r\n bindAction: '', // 手动上传触发的元素\r\n url: '', // 上传地址\r\n force: '', // 强制规定返回的数据格式,目前只支持是否强制 json\r\n field: 'file', // 文件字段名\r\n acceptMime: '', // 筛选出的文件类型,默认为所有文件\r\n method: 'post', // 请求上传的 http 类型\r\n data: {}, // 请求上传的额外参数\r\n drag: true, // 是否允许拖拽上传\r\n size: 0, // 文件限制大小,默认不限制\r\n number: 0, // 允许同时上传的文件数,默认不限制\r\n multiple: false, // 是否允许多文件上传,不支持 ie8-9\r\n text: { // 自定义提示文本\r\n \"cross-domain\": \"Cross-domain requests are not supported\", // 跨域\r\n \"data-format-error\": \"Please return JSON data format\", // 数据格式错误\r\n \"check-error\": \"\", // 文件格式校验失败\r\n \"error\": \"\", // 上传失败\r\n \"limit-number\": null, // 限制 number 属性的提示 --- function\r\n \"limit-size\": null // 限制 size 属性的提示 --- function\r\n }\r\n };\r\n\r\n // 重载实例\r\n Class.prototype.reload = function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n that.render(true);\r\n };\r\n \r\n // 初始渲染\r\n Class.prototype.render = function(rerender){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 若 elem 非唯一\r\n var elem = $(options.elem);\r\n if (elem.length > 1) {\r\n layui.each(elem, function() {\r\n upload.render($.extend({}, options, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 合并 lay-options 属性上的配置信息\r\n $.extend(options, lay.options(elem[0], {\r\n attr: elem.attr('lay-data') ? 'lay-data' : null // 兼容旧版的 lay-data 属性\r\n }));\r\n\r\n // 若重复执行 render,则视为 reload 处理\r\n if (!rerender && elem[0] && elem.data(MOD_INDEX)) {\r\n var newThat = thisModule.getThis(elem.data(MOD_INDEX));\r\n if(!newThat) return;\r\n\r\n return newThat.reload(options);\r\n }\r\n\r\n options.elem = $(options.elem);\r\n options.bindAction = $(options.bindAction);\r\n\r\n // 初始化 id 属性 - 优先取 options > 元素 id > 自增索引\r\n options.id = 'id' in options ? options.id : (\r\n elem.attr('id') || that.index\r\n );\r\n\r\n that.file();\r\n that.events();\r\n };\r\n \r\n //追加文件域\r\n Class.prototype.file = function(){\r\n var that = this;\r\n var options = that.config;\r\n var elemFile = that.elemFile = $([\r\n ''\r\n ].join(''));\r\n var next = options.elem.next();\r\n \r\n if(next.hasClass(ELEM_FILE) || next.hasClass(ELEM_FORM)){\r\n next.remove();\r\n }\r\n \r\n //包裹ie8/9容器\r\n if(device.ie && device.ie < 10){\r\n options.elem.wrap('
              ');\r\n }\r\n \r\n that.isFile() ? (\r\n that.elemFile = options.elem,\r\n options.field = options.elem[0].name\r\n ) : options.elem.after(elemFile);\r\n \r\n //初始化ie8/9的Form域\r\n if(device.ie && device.ie < 10){\r\n that.initIE();\r\n }\r\n };\r\n \r\n //ie8-9初始化\r\n Class.prototype.initIE = function(){\r\n var that = this;\r\n var options = that.config;\r\n var iframe = $('');\r\n var elemForm = $(['
              '\r\n ,''].join(''));\r\n \r\n //插入iframe \r\n $('#'+ ELEM_IFRAME)[0] || $('body').append(iframe);\r\n\r\n //包裹文件域\r\n if(!options.elem.next().hasClass(ELEM_FORM)){\r\n that.elemFile.wrap(elemForm); \r\n \r\n //追加额外的参数\r\n options.elem.next('.'+ ELEM_FORM).append(function(){\r\n var arr = [];\r\n layui.each(options.data, function(key, value){\r\n value = typeof value === 'function' ? value() : value;\r\n arr.push('')\r\n });\r\n return arr.join('');\r\n }());\r\n }\r\n };\r\n \r\n //异常提示\r\n Class.prototype.msg = function(content){\r\n return layer.msg(content, {\r\n icon: 2,\r\n shift: 6\r\n });\r\n };\r\n \r\n //判断绑定元素是否为文件域本身\r\n Class.prototype.isFile = function(){\r\n var elem = this.config.elem[0];\r\n if(!elem) return;\r\n return elem.tagName.toLocaleLowerCase() === 'input' && elem.type === 'file'\r\n }\r\n \r\n //预读图片信息\r\n Class.prototype.preview = function(callback){\r\n var that = this;\r\n if(window.FileReader){\r\n layui.each(that.chooseFiles, function(index, file){\r\n var reader = new FileReader();\r\n reader.readAsDataURL(file); \r\n reader.onload = function(){\r\n callback && callback(index, file, this.result);\r\n }\r\n });\r\n }\r\n };\r\n \r\n // 执行上传\r\n Class.prototype.upload = function(files, type){\r\n var that = this;\r\n var options = that.config;\r\n var text = options.text || {};\r\n var elemFile = that.elemFile[0];\r\n\r\n // 获取文件队列\r\n var getFiles = function(){\r\n return files || that.files || that.chooseFiles || elemFile.files;\r\n };\r\n \r\n // 高级浏览器处理方式,支持跨域\r\n var ajaxSend = function(){\r\n var successful = 0;\r\n var failed = 0;\r\n var items = getFiles();\r\n\r\n // 多文件全部上传完毕的回调\r\n var allDone = function(){\r\n if(options.multiple && successful + failed === that.fileLength){\r\n typeof options.allDone === 'function' && options.allDone({\r\n total: that.fileLength,\r\n successful: successful,\r\n failed: failed\r\n });\r\n }\r\n };\r\n\r\n // 发送请求\r\n var request = function(sets){\r\n var formData = new FormData();\r\n\r\n // 恢复文件状态\r\n var resetFileState = function(file) {\r\n if (sets.unified) {\r\n layui.each(items, function(index, file){\r\n delete file[UPLOADING];\r\n });\r\n } else {\r\n delete file[UPLOADING];\r\n }\r\n };\r\n\r\n // 追加额外的参数\r\n layui.each(options.data, function(key, value){\r\n value = typeof value === 'function' \r\n ? sets.unified ? value() : value(sets.index, sets.file)\r\n : value;\r\n formData.append(key, value);\r\n });\r\n\r\n /*\r\n * 添加 file 到表单域\r\n */\r\n\r\n // 是否统一上传\r\n if (sets.unified) {\r\n layui.each(items, function(index, file){\r\n if (file[UPLOADING]) return;\r\n file[UPLOADING] = true; // 上传中的标记\r\n formData.append(options.field, file);\r\n });\r\n } else { // 逐一上传\r\n if (sets.file[UPLOADING]) return;\r\n formData.append(options.field, sets.file);\r\n sets.file[UPLOADING] = true; // 上传中的标记\r\n }\r\n\r\n // ajax 参数\r\n var opts = {\r\n url: options.url,\r\n type: 'post', // 统一采用 post 上传\r\n data: formData,\r\n dataType: options.dataType || 'json',\r\n contentType: false,\r\n processData: false,\r\n headers: options.headers || {},\r\n success: function(res){ // 成功回调\r\n options.unified ? (successful += that.fileLength) : successful++;\r\n done(sets.index, res);\r\n allDone(sets.index);\r\n resetFileState(sets.file);\r\n },\r\n error: function(e){ // 异常回调\r\n options.unified ? (failed += that.fileLength) : failed++;\r\n that.msg(text['error'] || [\r\n 'Upload failed, please try again.',\r\n 'status: '+ (e.status || '') +' - '+ (e.statusText || 'error')\r\n ].join('
              '));\r\n error(sets.index, e.responseText, e);\r\n allDone(sets.index);\r\n resetFileState(sets.file);\r\n }\r\n };\r\n\r\n // 进度条\r\n if(typeof options.progress === 'function'){\r\n opts.xhr = function(){\r\n var xhr = $.ajaxSettings.xhr();\r\n // 上传进度\r\n xhr.upload.addEventListener(\"progress\", function (obj) {\r\n if(obj.lengthComputable){\r\n var percent = Math.floor((obj.loaded/obj.total)* 100); // 百分比\r\n options.progress(percent, (options.item ? options.item[0] : options.elem[0]) , obj, sets.index);\r\n }\r\n });\r\n return xhr;\r\n }\r\n }\r\n $.ajax(opts);\r\n };\r\n\r\n // 多文件是否一起上传\r\n if(options.unified){\r\n request({\r\n unified: true,\r\n index: 0\r\n });\r\n } else {\r\n layui.each(items, function(index, file){\r\n request({\r\n index: index,\r\n file: file\r\n });\r\n });\r\n }\r\n };\r\n \r\n // 低版本 IE 处理方式,不支持跨域\r\n var iframeSend = function(){\r\n var iframe = $('#'+ ELEM_IFRAME);\r\n \r\n that.elemFile.parent().submit();\r\n\r\n // 获取响应信息\r\n clearInterval(Class.timer);\r\n Class.timer = setInterval(function() {\r\n var res, iframeBody = iframe.contents().find('body');\r\n try {\r\n res = iframeBody.text();\r\n } catch(e) {\r\n that.msg(text['cross-domain']); \r\n clearInterval(Class.timer);\r\n error();\r\n }\r\n if(res){\r\n clearInterval(Class.timer);\r\n iframeBody.html('');\r\n done(0, res);\r\n }\r\n }, 30); \r\n };\r\n\r\n // 强制返回的数据格式\r\n var forceConvert = function(src) {\r\n if(options.force === 'json'){\r\n if(typeof src !== 'object'){\r\n try {\r\n return {\r\n status: \"CONVERTED\",\r\n data: JSON.parse(src)\r\n };\r\n } catch(e){\r\n that.msg(text['data-format-error']);\r\n return {\r\n status: \"FORMAT_ERROR\",\r\n data: {}\r\n };\r\n }\r\n }\r\n }\r\n return { status: \"DO_NOTHING\", data: {} }\r\n }\r\n\r\n // 统一回调\r\n var done = function(index, res){\r\n that.elemFile.next('.'+ ELEM_CHOOSE).remove();\r\n elemFile.value = '';\r\n \r\n var convert = forceConvert(res);\r\n\r\n switch(convert.status) {\r\n case \"CONVERTED\":\r\n res = convert.data;\r\n break;\r\n case \"FORMAT_ERROR\":\r\n return;\r\n }\r\n \r\n typeof options.done === 'function' && options.done(res, index || 0, function(files){\r\n that.upload(files);\r\n });\r\n };\r\n \r\n // 统一网络异常回调\r\n var error = function(index, res, xhr){\r\n if(options.auto){\r\n elemFile.value = '';\r\n }\r\n\r\n var convert = forceConvert(res);\r\n\r\n switch(convert.status) {\r\n case \"CONVERTED\":\r\n res = convert.data;\r\n break;\r\n case \"FORMAT_ERROR\":\r\n return;\r\n }\r\n\r\n typeof options.error === 'function' && options.error(index || 0, function(files){\r\n that.upload(files);\r\n }, res, xhr);\r\n };\r\n \r\n var check;\r\n var exts = options.exts;\r\n var value = function(){\r\n var arr = [];\r\n layui.each(files || that.chooseFiles, function(i, item){\r\n arr.push(item.name);\r\n });\r\n return arr;\r\n }();\r\n \r\n // 回调函数返回的参数\r\n var args = {\r\n // 预览\r\n preview: function(callback){\r\n that.preview(callback);\r\n },\r\n // 上传\r\n upload: function(index, file){\r\n var thisFile = {};\r\n thisFile[index] = file;\r\n that.upload(thisFile);\r\n },\r\n // 追加文件到队列\r\n pushFile: function(){\r\n that.files = that.files || {};\r\n layui.each(that.chooseFiles, function(index, item){\r\n that.files[index] = item;\r\n });\r\n return that.files;\r\n },\r\n // 重置文件\r\n resetFile: function(index, file, filename){\r\n var newFile = new File([file], filename);\r\n that.files = that.files || {};\r\n that.files[index] = newFile;\r\n },\r\n // 获取本次选取的文件\r\n getChooseFiles: function(){\r\n return that.chooseFiles;\r\n }\r\n };\r\n \r\n // 提交上传\r\n var send = function(){\r\n var ready = function(){\r\n // IE 兼容处理\r\n if(device.ie){\r\n return device.ie > 9 ? ajaxSend() : iframeSend();\r\n }\r\n ajaxSend();\r\n }\r\n // 上传前的回调 - 如果回调函数明确返回 false 或 Promise.reject,则停止上传\r\n if(typeof options.before === 'function'){\r\n upload.util.promiseLikeResolve(options.before(args))\r\n .then(function(result){\r\n if(result !== false){\r\n ready();\r\n } else {\r\n if(options.auto){\r\n elemFile.value = '';\r\n }\r\n }\r\n }, function(error){\r\n if(options.auto){\r\n elemFile.value = '';\r\n }\r\n error !== undefined && layui.hint().error(error);\r\n })\r\n }else{\r\n ready();\r\n }\r\n };\r\n \r\n // 文件类型名称\r\n var typeName = ({\r\n file: '文件',\r\n images: '图片',\r\n video: '视频',\r\n audio: '音频'\r\n })[options.accept] || '文件';\r\n\r\n // 校验文件格式\r\n value = value.length === 0 \r\n ? ((elemFile.value.match(/[^\\/\\\\]+\\..+/g)||[]) || '')\r\n : value;\r\n \r\n // 若文件域值为空\r\n if (value.length === 0) return;\r\n \r\n // 根据文件类型校验\r\n switch(options.accept){\r\n case 'file': // 一般文件\r\n layui.each(value, function(i, item){\r\n if(exts && !RegExp('.\\\\.('+ exts +')$', 'i').test(escape(item))){\r\n return check = true;\r\n }\r\n });\r\n break;\r\n case 'video': // 视频文件\r\n layui.each(value, function(i, item){\r\n if(!RegExp('.\\\\.('+ (exts || 'avi|mp4|wma|rmvb|rm|flash|3gp|flv') +')$', 'i').test(escape(item))){\r\n return check = true;\r\n }\r\n });\r\n break;\r\n case 'audio': // 音频文件\r\n layui.each(value, function(i, item){\r\n if(!RegExp('.\\\\.('+ (exts || 'mp3|wav|mid') +')$', 'i').test(escape(item))){\r\n return check = true;\r\n }\r\n });\r\n break;\r\n default: // 图片文件\r\n layui.each(value, function(i, item){\r\n if(!RegExp('.\\\\.('+ (exts || 'jpg|png|gif|bmp|jpeg|svg|webp') +')$', 'i').test(escape(item))){\r\n return check = true;\r\n }\r\n });\r\n break;\r\n }\r\n \r\n // 校验失败提示\r\n if(check){\r\n that.msg(text['check-error'] || ('选择的'+ typeName +'中包含不支持的格式'));\r\n return elemFile.value = '';\r\n }\r\n\r\n // 选择文件的回调 \r\n if(type === 'choose' || options.auto){\r\n options.choose && options.choose(args);\r\n if(type === 'choose'){\r\n return;\r\n }\r\n }\r\n \r\n // 检验文件数量\r\n that.fileLength = function(){\r\n var length = 0;\r\n var items = getFiles();\r\n layui.each(items, function(){\r\n length++;\r\n });\r\n return length;\r\n }();\r\n \r\n if(options.number && that.fileLength > options.number){\r\n return that.msg(typeof text['limit-number'] === 'function' \r\n ? text['limit-number'](options, that.fileLength) \r\n : (\r\n '同时最多只能上传: '+ options.number + ' 个文件'\r\n +'
              您当前已经选择了: '+ that.fileLength +' 个文件'\r\n ));\r\n }\r\n \r\n // 检验文件大小\r\n if(options.size > 0 && !(device.ie && device.ie < 10)){\r\n var limitSize;\r\n \r\n layui.each(getFiles(), function(index, file){\r\n if(file.size > 1024*options.size){\r\n var size = options.size/1024;\r\n size = size >= 1 ? (size.toFixed(2) + 'MB') : options.size + 'KB'\r\n elemFile.value = '';\r\n limitSize = size;\r\n }\r\n });\r\n if(limitSize) return that.msg(typeof text['limit-size'] === 'function' \r\n ? text['limit-size'](options, limitSize) \r\n : '文件大小不能超过 '+ limitSize);\r\n }\r\n\r\n send();\r\n };\r\n \r\n //事件处理\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n \r\n // 设置当前选择的文件队列\r\n var setChooseFile = function(files){\r\n that.chooseFiles = {};\r\n layui.each(files, function(i, item){\r\n var time = new Date().getTime();\r\n that.chooseFiles[time + '-' + i] = item;\r\n });\r\n };\r\n \r\n // 设置选择的文本\r\n var setChooseText = function(files, filename){\r\n var elemFile = that.elemFile;\r\n var item = options.item ? options.item : options.elem;\r\n var value = files.length > 1 \r\n ? files.length + '个文件' \r\n : ((files[0] || {}).name || (elemFile[0].value.match(/[^\\/\\\\]+\\..+/g)||[]) || '');\r\n \r\n if(elemFile.next().hasClass(ELEM_CHOOSE)){\r\n elemFile.next().remove();\r\n }\r\n that.upload(null, 'choose');\r\n if(that.isFile() || options.choose) return;\r\n elemFile.after(''+ value +'');\r\n };\r\n\r\n /**\r\n * 判断文件是否加入排队\r\n * @param {File} file\r\n * @return {boolean}\r\n */\r\n var checkFile = function (file) {\r\n var result = true;\r\n layui.each(that.files, function (index, item) {\r\n result = !(item.name === file.name);\r\n if(!result) return true;\r\n });\r\n return result;\r\n }\r\n\r\n /**\r\n * 扩展文件信息\r\n * @template {File | FileList} T\r\n * @param {T} obj\r\n * @return {T}\r\n */\r\n var extendInfo = function (obj) {\r\n\r\n var extInfo = function (file) {\r\n //文件扩展名\r\n file.ext = file.name.substr(file.name.lastIndexOf('.') + 1).toLowerCase();\r\n // 文件大小\r\n file.sizes = upload.util.parseSize(file.size);\r\n // 可以继续扩展\r\n }\r\n\r\n //FileList对象\r\n if (obj instanceof FileList) {\r\n layui.each(obj, function (index, item) {\r\n extInfo(item);\r\n });\r\n } else {\r\n extInfo(obj);\r\n }\r\n\r\n return obj;\r\n }\r\n \r\n /**\r\n * 检查获取文件\r\n * @param {FileList} files\r\n * @return {Array|FileList}\r\n */\r\n var getFiles = function (files) {\r\n files = files || [];\r\n if (!files.length) return [];\r\n if (!that.files) return extendInfo(files);\r\n var result = [];\r\n layui.each(files, function (index, item) {\r\n if (checkFile(item)) {\r\n result.push(extendInfo(item));\r\n }\r\n });\r\n return result;\r\n }\r\n\r\n // 点击上传容器\r\n options.elem.off('upload.start').on('upload.start', function(){\r\n var othis = $(this);\r\n\r\n that.config.item = othis;\r\n that.elemFile[0].click();\r\n });\r\n \r\n // 拖拽上传\r\n if(!(device.ie && device.ie < 10)){\r\n options.elem.off('upload.over').on('upload.over', function(){\r\n var othis = $(this)\r\n othis.attr('lay-over', '');\r\n })\r\n .off('upload.leave').on('upload.leave', function(){\r\n var othis = $(this)\r\n othis.removeAttr('lay-over');\r\n })\r\n .off('upload.drop').on('upload.drop', function(e, param){\r\n var othis = $(this);\r\n var files = getFiles(param.originalEvent.dataTransfer.files);\r\n \r\n othis.removeAttr('lay-over');\r\n setChooseFile(files);\r\n\r\n options.auto ? that.upload() : setChooseText(files); // 是否自动触发上传\r\n });\r\n }\r\n \r\n // 文件选择\r\n that.elemFile.on('change', function(){\r\n var files = getFiles(this.files);\r\n\r\n if(files.length === 0) return;\r\n\r\n setChooseFile(files);\r\n\r\n options.auto ? that.upload() : setChooseText(files); // 是否自动触发上传\r\n });\r\n \r\n // 手动触发上传\r\n options.bindAction.off('upload.action').on('upload.action', function(){\r\n that.upload();\r\n });\r\n\r\n\r\n // 防止事件重复绑定\r\n if(options.elem.data(MOD_INDEX)) return;\r\n\r\n\r\n // 目标元素 click 事件\r\n options.elem.on('click', function(){\r\n if(that.isFile()) return;\r\n $(this).trigger('upload.start');\r\n });\r\n \r\n // 目标元素 drop 事件\r\n if(options.drag){\r\n options.elem.on('dragover', function(e){\r\n e.preventDefault();\r\n $(this).trigger('upload.over');\r\n }).on('dragleave', function(e){\r\n $(this).trigger('upload.leave');\r\n }).on('drop', function(e){\r\n e.preventDefault();\r\n $(this).trigger('upload.drop', e);\r\n });\r\n }\r\n \r\n // 手动上传时触发上传的元素 click 事件\r\n options.bindAction.on('click', function(){\r\n $(this).trigger('upload.action');\r\n });\r\n \r\n // 绑定元素索引\r\n options.elem.data(MOD_INDEX, options.id);\r\n };\r\n\r\n /**\r\n * 上传组件辅助方法\r\n */\r\n upload.util = {\r\n /**\r\n * 文件大小处理\r\n * @param {number | string} size -文件大小\r\n * @param {number} [precision] - 数值精度\r\n * @return {string}\r\n */\r\n parseSize: function (size, precision) {\r\n precision = precision || 2;\r\n if (null == size || !size) {\r\n return '0';\r\n }\r\n var unitArr = [\"Bytes\", \"Kb\", \"Mb\", \"Gb\", \"Tb\", \"Pb\", \"Eb\", \"Zb\", \"Yb\"];\r\n var index;\r\n var formatSize = typeof size === 'string' ? parseFloat(size) : size;\r\n index = Math.floor(Math.log(formatSize) / Math.log(1024));\r\n size = formatSize / Math.pow(1024, index);\r\n size = size % 1 === 0 ? size : parseFloat(size.toFixed(precision));//保留的小数位数\r\n return size + unitArr[index];\r\n },\r\n /**\r\n * 将给定的值转换为一个 JQueryDeferred 对象\r\n */\r\n promiseLikeResolve:function(value){\r\n var deferred = $.Deferred();\r\n\r\n if(value && typeof value.then === 'function'){\r\n value.then(deferred.resolve, deferred.reject);\r\n }else{\r\n deferred.resolve(value);\r\n }\r\n return deferred.promise();\r\n }\r\n }\r\n\r\n // 记录所有实例\r\n thisModule.that = {}; // 记录所有实例对象\r\n\r\n // 获取当前实例对象\r\n thisModule.getThis = function(id){\r\n var that = thisModule.that[id];\r\n if(!that) hint.error(id ? (MOD_NAME +' instance with ID \\''+ id +'\\' not found') : 'ID argument required');\r\n return that;\r\n };\r\n \r\n // 核心入口 \r\n upload.render = function(options){\r\n var inst = new Class(options);\r\n return thisModule.call(inst);\r\n };\r\n \r\n exports(MOD_NAME, upload);\r\n});\r\n\r\n","/**\r\n * form 表单组件\r\n */\r\n \r\nlayui.define(['lay', 'layer', 'util'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var layer = layui.layer;\r\n var util = layui.util;\r\n var hint = layui.hint();\r\n var device = layui.device();\r\n \r\n var MOD_NAME = 'form';\r\n var ELEM = '.layui-form';\r\n var THIS = 'layui-this';\r\n var SHOW = 'layui-show';\r\n var HIDE = 'layui-hide';\r\n var DISABLED = 'layui-disabled';\r\n var OUT_OF_RANGE = 'layui-input-number-out-of-range';\r\n \r\n var Form = function(){\r\n this.config = {\r\n // 内置的验证规则\r\n verify: {\r\n required: function(value) {\r\n if (!/[\\S]+/.test(value)) {\r\n return '必填项不能为空';\r\n }\r\n },\r\n phone: function(value) {\r\n var EXP = /^1\\d{10}$/;\r\n if (value && !EXP.test(value)) {\r\n return '手机号格式不正确';\r\n }\r\n },\r\n email: function(value) {\r\n var EXP = /^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$/;\r\n if (value && !EXP.test(value)) {\r\n return '邮箱格式不正确';\r\n }\r\n },\r\n url: function(value) {\r\n var EXP = /^(#|(http(s?)):\\/\\/|\\/\\/)[^\\s]+\\.[^\\s]+$/;\r\n if (value && !EXP.test(value)) {\r\n return '链接格式不正确';\r\n }\r\n },\r\n number: function(value){\r\n if (value && isNaN(value)) {\r\n return '只能填写数字';\r\n }\r\n },\r\n date: function(value){\r\n var EXP = /^(\\d{4})[-\\/](\\d{1}|0\\d{1}|1[0-2])([-\\/](\\d{1}|0\\d{1}|[1-2][0-9]|3[0-1]))*$/;\r\n if (value && !EXP.test(value)) {\r\n return '日期格式不正确';\r\n }\r\n },\r\n identity: function(value) {\r\n var EXP = /(^\\d{15}$)|(^\\d{17}(x|X|\\d)$)/;\r\n if (value && !EXP.test(value)) {\r\n return '身份证号格式不正确';\r\n }\r\n }\r\n },\r\n autocomplete: null // 全局 autocomplete 状态。 null 表示不干预\r\n };\r\n };\r\n \r\n // 全局设置\r\n Form.prototype.set = function(options){\r\n var that = this;\r\n $.extend(true, that.config, options);\r\n return that;\r\n };\r\n \r\n // 验证规则设定\r\n Form.prototype.verify = function(settings){\r\n var that = this;\r\n $.extend(true, that.config.verify, settings);\r\n return that;\r\n };\r\n\r\n // 获取指定表单对象\r\n Form.prototype.getFormElem = function(filter){\r\n return $(ELEM + function(){\r\n return filter ? ('[lay-filter=\"' + filter +'\"]') : '';\r\n }());\r\n };\r\n \r\n // 表单事件\r\n Form.prototype.on = function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n };\r\n \r\n // 赋值/取值\r\n Form.prototype.val = function(filter, object){\r\n var that = this\r\n ,formElem = that.getFormElem(filter);\r\n \r\n // 遍历\r\n formElem.each(function(index, item){\r\n var itemForm = $(this);\r\n \r\n // 赋值\r\n layui.each(object, function(key, value){\r\n var itemElem = itemForm.find('[name=\"'+ key +'\"]')\r\n ,type;\r\n \r\n // 如果对应的表单不存在,则不执行\r\n if(!itemElem[0]) return;\r\n type = itemElem[0].type;\r\n \r\n // 如果为复选框\r\n if(type === 'checkbox'){\r\n itemElem[0].checked = value;\r\n } else if(type === 'radio') { // 如果为单选框\r\n itemElem.each(function(){\r\n this.checked = this.value == value + '';\r\n });\r\n } else { // 其它类型的表单\r\n itemElem.val(value);\r\n }\r\n });\r\n });\r\n \r\n form.render(null, filter);\r\n \r\n // 返回值\r\n return that.getValue(filter);\r\n };\r\n \r\n // 取值\r\n Form.prototype.getValue = function(filter, itemForm){\r\n itemForm = itemForm || this.getFormElem(filter);\r\n \r\n var nameIndex = {} // 数组 name 索引\r\n ,field = {}\r\n ,fieldElem = itemForm.find('input,select,textarea') // 获取所有表单域\r\n \r\n layui.each(fieldElem, function(_, item){ \r\n var othis = $(this)\r\n ,init_name; // 初始 name\r\n \r\n item.name = (item.name || '').replace(/^\\s*|\\s*&/, '');\r\n if(!item.name) return;\r\n \r\n // 用于支持数组 name\r\n if(/^.*\\[\\]$/.test(item.name)){\r\n var key = item.name.match(/^(.*)\\[\\]$/g)[0];\r\n nameIndex[key] = nameIndex[key] | 0;\r\n init_name = item.name.replace(/^(.*)\\[\\]$/, '$1['+ (nameIndex[key]++) +']');\r\n }\r\n \r\n if(/^(checkbox|radio)$/.test(item.type) && !item.checked) return; // 复选框和单选框未选中,不记录字段 \r\n field[init_name || item.name] = item.value;\r\n });\r\n \r\n return field;\r\n };\r\n \r\n // 表单控件渲染\r\n Form.prototype.render = function(type, filter){\r\n var that = this;\r\n var options = that.config;\r\n var elemForm = $(ELEM + function(){\r\n return filter ? ('[lay-filter=\"' + filter +'\"]') : '';\r\n }());\r\n var items = {\r\n // 输入框\r\n input: function(elem){\r\n var inputs = elem || elemForm.find('input,textarea');\r\n\r\n // 初始化全局的 autocomplete\r\n options.autocomplete && inputs.attr('autocomplete', options.autocomplete);\r\n\r\n var handleInputNumber = function(elem, eventType){\r\n var that = this;\r\n var rawValue = elem.val();\r\n var value = Number(rawValue);\r\n var step = Number(elem.attr('step')) || 1; // 加减的数字间隔\r\n var min = Number(elem.attr('min'));\r\n var max = Number(elem.attr('max'));\r\n var precision = Number(elem.attr('lay-precision'));\r\n var noAction = eventType !== 'click' && rawValue === ''; // 初始渲染和失焦时空值不作处理\r\n var isInit = eventType === 'init';\r\n\r\n if(isNaN(value)) return; // 若非数字,则不作处理\r\n\r\n if(eventType === 'click'){\r\n var isDecrement = !!$(that).index() // 0: icon-up, 1: icon-down\r\n value = isDecrement ? value - step : value + step;\r\n }\r\n\r\n // 获取小数点后位数\r\n var decimals = function(step){\r\n var decimals = (step.toString().match(/\\.(\\d+$)/) || [])[1] || '';\r\n return decimals.length;\r\n };\r\n\r\n precision = precision >= 0 ? precision : Math.max(decimals(step), decimals(rawValue));\r\n\r\n // 赋值\r\n if (!noAction) {\r\n // 初始渲染时只处理数字精度\r\n if (!isInit) {\r\n if(value <= min) value = min;\r\n if(value >= max) value = max;\r\n }\r\n // 若 `lay-precision` 为 0, 则表示只保留整数\r\n if (precision === 0) {\r\n value = parseInt(value);\r\n } else if(precision > 0) { // 小数位精度\r\n value = value.toFixed(precision);\r\n }\r\n elem.val(value);\r\n }\r\n\r\n // 超出范围的样式\r\n var outOfRange = value < min || value > max;\r\n elem[outOfRange && !noAction ? 'addClass' : 'removeClass'](OUT_OF_RANGE);\r\n\r\n if(isInit) return;\r\n\r\n // 更新按钮状态\r\n var controlBtn = {\r\n increment: elem.next().find('.layui-icon-up'),\r\n decrement: elem.next().find('.layui-icon-down')\r\n }\r\n controlBtn.increment[(value >= max && !noAction) ? 'addClass' : 'removeClass'](DISABLED)\r\n controlBtn.decrement[(value <= min && !noAction) ? 'addClass' : 'removeClass'](DISABLED)\r\n }\r\n\r\n // 初始化输入框动态点缀\r\n elemForm.find('input[lay-affix],textarea[lay-affix]').each(function(){\r\n var othis = $(this);\r\n var affix = othis.attr('lay-affix');\r\n var CLASS_WRAP = 'layui-input-wrap';\r\n var CLASS_SUFFIX = 'layui-input-suffix';\r\n var CLASS_AFFIX = 'layui-input-affix';\r\n var disabled = othis.is('[disabled]') || othis.is('[readonly]');\r\n\r\n // 根据是否空值来显示或隐藏元素\r\n var showAffix = function(elem, value){\r\n elem = $(elem);\r\n if(!elem[0]) return;\r\n elem[$.trim(value) ? 'removeClass' : 'addClass'](HIDE);\r\n };\r\n\r\n // 渲染动态点缀内容\r\n var renderAffix = function(opts){\r\n opts = $.extend({}, (affixOptions[affix] || {\r\n value: affix\r\n }), opts, lay.options(othis[0]));\r\n var elemAffix = $('
              ');\r\n var value = layui.isArray(opts.value) ? opts.value : [opts.value];\r\n var elemIcon = $(function(){\r\n var arr = [];\r\n layui.each(value, function(i, item){\r\n arr.push('');\r\n });\r\n return arr.join('');\r\n }());\r\n \r\n elemAffix.append(elemIcon); // 插入图标元素\r\n\r\n // 追加 className\r\n if(opts.split) elemAffix.addClass('layui-input-split');\r\n if(opts.className) elemAffix.addClass(opts.className);\r\n\r\n // 移除旧的元素\r\n var hasElemAffix = othis.next('.'+ CLASS_AFFIX);\r\n if(hasElemAffix[0]) hasElemAffix.remove();\r\n\r\n // 是否在规定的容器中\r\n if(!othis.parent().hasClass(CLASS_WRAP)){\r\n othis.wrap('
              ');\r\n }\r\n\r\n // 是否已经存在后缀元素\r\n var hasElemSuffix = othis.next('.'+ CLASS_SUFFIX);\r\n if(hasElemSuffix[0]){\r\n hasElemAffix = hasElemSuffix.find('.'+ CLASS_AFFIX);\r\n if(hasElemAffix[0]) hasElemAffix.remove();\r\n\r\n hasElemSuffix.prepend(elemAffix);\r\n\r\n othis.css('padding-right', function(){\r\n var paddingRight = othis.closest('.layui-input-group')[0] \r\n ? 0 \r\n : hasElemSuffix.outerWidth();\r\n return paddingRight + elemAffix.outerWidth()\r\n });\r\n } else {\r\n elemAffix.addClass(CLASS_SUFFIX);\r\n othis.after(elemAffix);\r\n }\r\n\r\n opts.show === 'auto' && showAffix(elemAffix, othis.val());\r\n \r\n typeof opts.init === 'function' && opts.init.call(this, othis, opts);\r\n \r\n // 输入事件\r\n othis.on('input propertychange', function(){\r\n var value = this.value;\r\n opts.show === 'auto' && showAffix(elemAffix, value);\r\n });\r\n\r\n // 失去焦点事件\r\n othis.on('blur', function(){\r\n typeof opts.blur === 'function' && opts.blur.call(this, othis, opts);\r\n });\r\n \r\n // 点击动态后缀事件\r\n elemIcon.on('click', function(){\r\n var inputFilter = othis.attr('lay-filter');\r\n if($(this).hasClass(DISABLED)) return;\r\n \r\n typeof opts.click === 'function' && opts.click.call(this, othis, opts);\r\n \r\n // 对外事件\r\n layui.event.call(this, MOD_NAME, 'input-affix('+ inputFilter +')', {\r\n elem: othis[0],\r\n affix: affix,\r\n options: opts\r\n });\r\n });\r\n };\r\n \r\n // 动态点缀配置项\r\n var affixOptions = {\r\n eye: { // 密码显隐\r\n value: 'eye-invisible',\r\n click: function(elem, opts){ // 事件\r\n var SHOW_NAME = 'LAY_FORM_INPUT_AFFIX_SHOW';\r\n var isShow = elem.data(SHOW_NAME);\r\n \r\n elem.attr('type', isShow ? 'password' : 'text').data(SHOW_NAME, !isShow);\r\n\r\n renderAffix({\r\n value: isShow ? 'eye-invisible' : 'eye'\r\n });\r\n }\r\n },\r\n clear: { // 内容清除\r\n value: 'clear',\r\n click: function(elem){\r\n elem.val('').focus();\r\n showAffix($(this).parent(), null);\r\n },\r\n show: 'auto', // 根据输入框值是否存在来显示或隐藏点缀图标\r\n disabled: disabled // 跟随输入框禁用状态\r\n },\r\n number: { // 数字输入框\r\n value: ['up', 'down'],\r\n split: true,\r\n className: 'layui-input-number',\r\n disabled: othis.is('[disabled]'), // 跟随输入框禁用状态\r\n init: function(elem){\r\n handleInputNumber.call(this, elem, 'init')\r\n },\r\n click: function(elem){\r\n handleInputNumber.call(this, elem, 'click')\r\n },\r\n blur: function(elem){\r\n handleInputNumber.call(this, elem, 'blur')\r\n },\r\n }\r\n };\r\n \r\n renderAffix();\r\n });\r\n }\r\n \r\n // 下拉选择框\r\n ,select: function(elem){\r\n var TIPS = '请选择';\r\n var CLASS = 'layui-form-select';\r\n var TITLE = 'layui-select-title';\r\n var NONE = 'layui-select-none';\r\n var CREATE_OPTION = 'layui-select-create-option';\r\n var PANEL_WRAP = 'layui-select-panel-wrap'\r\n var PANEL_ELEM_DATA = 'layui-select-panel-elem-data';\r\n var selects = elem || elemForm.find('select');\r\n\r\n // 各种事件\r\n var events = function(reElem, titleElem, disabled, isSearch, isCreatable, isAppendTo){\r\n var select = $(this);\r\n var title = titleElem;\r\n var input = title.find('input');\r\n var dl = reElem.find('dl');\r\n var dds = dl.children('dd');\r\n var dts = dl.children('dt'); // select 分组dt元素\r\n var index = this.selectedIndex; // 当前选中的索引\r\n var initValue = '';\r\n var removeClickOutsideEvent;\r\n \r\n if(disabled) return;\r\n\r\n /**\r\n * 搜索项 \r\n * @typedef searchOption\r\n * @prop {boolean} [caseSensitive=false] 是否区分大小写\r\n * @prop {boolean} [fuzzy=false] 是否开启模糊匹配,开启后将会忽略模式出现在字符串中的位置。\r\n */\r\n /** @type {searchOption} */\r\n var laySearch = select.attr('lay-search') === 'cs' ? {caseSensitive:true} : lay.options(select, {attr:'lay-search'});\r\n // 目前只支持 body\r\n var appendTarget = select.attr('lay-append-to') || 'body';\r\n var appendPosition = select.attr('lay-append-position');\r\n\r\n // #1449\r\n // IE10 和 11 中,带有占位符的 input 元素获得/失去焦点时,会触发 input 事件\r\n // 当鼠标按下时,根据 input 元素上的 __ieph 标识忽略 input 事件\r\n var needPlaceholderPatch = !!(lay.ie && (lay.ie === '10' || lay.ie === '11') && input.attr('placeholder'));\r\n \r\n // 展开下拉\r\n var showDown = function(){\r\n if(isAppendTo){\r\n // 如果追加面板元素后出现滚动条,触发元素宽度可能会有变化,所以先追加面板元素\r\n reElem.appendTo(appendTarget).css({width: title.width() + 'px'});\r\n\r\n var updatePosition = function(){\r\n lay.position(title[0], reElem[0], {\r\n position: appendPosition,\r\n allowBottomOut: true,\r\n offset: [0, 5]\r\n });\r\n }\r\n\r\n updatePosition();\r\n $(window).on('resize.lay_select_resize', updatePosition);\r\n }\r\n var top = reElem.offset().top + reElem.outerHeight() + 5 - $win.scrollTop();\r\n var dlHeight = dl.outerHeight();\r\n var dds = dl.children('dd');\r\n \r\n index = select[0].selectedIndex; // 获取最新的 selectedIndex\r\n title.parent().addClass(CLASS+'ed');\r\n dds.removeClass(HIDE);\r\n dts.removeClass(HIDE);\r\n\r\n // 初始选中样式\r\n dds.removeClass(THIS);\r\n index >= 0 && dds.eq(index).addClass(THIS);\r\n\r\n // 上下定位识别\r\n if(top + dlHeight > $win.height() && top >= dlHeight){\r\n reElem.addClass(CLASS + 'up');\r\n }\r\n\r\n followScroll();\r\n\r\n if(needPlaceholderPatch){\r\n dl.off('mousedown.lay_select_ieph').on('mousedown.lay_select_ieph', function(){\r\n input[0].__ieph = true;\r\n setTimeout(function(){\r\n input[0].__ieph = false;\r\n }, 60)\r\n });\r\n }\r\n\r\n removeClickOutsideEvent = lay.onClickOutside(\r\n isAppendTo ? reElem[0] : dl[0],\r\n function(){\r\n hideDown();\r\n initValue && input.val(initValue);\r\n },\r\n {ignore: title}\r\n );\r\n };\r\n \r\n // 隐藏下拉\r\n var hideDown = function(choose){\r\n title.parent().removeClass(CLASS+'ed ' + CLASS+'up');\r\n input.blur();\r\n isCreatable && dl.children('.' + CREATE_OPTION).remove();\r\n removeClickOutsideEvent && removeClickOutsideEvent();\r\n if(isAppendTo){\r\n reElem.detach();\r\n $(window).off('resize.lay_select_resize');\r\n }\r\n \r\n if(choose) return;\r\n \r\n notOption(input.val(), function(none){\r\n var selectedIndex = select[0].selectedIndex;\r\n \r\n // 未查询到相关值\r\n if(none){\r\n initValue = $(select[0].options[selectedIndex]).html(); // 重新获得初始选中值\r\n \r\n // 如果是第一项,且文本值等于 placeholder,则清空初始值\r\n if(selectedIndex === 0 && initValue === input.attr('placeholder')){\r\n initValue = '';\r\n }\r\n\r\n // 如果有选中值,则将输入框纠正为该值。否则清空输入框\r\n input.val(initValue || '');\r\n }\r\n });\r\n };\r\n \r\n // 定位下拉滚动条\r\n var followScroll = function(){ \r\n var thisDd = dl.children('dd.'+ THIS);\r\n \r\n if(!thisDd[0]) return;\r\n \r\n var posTop = thisDd.position().top;\r\n var dlHeight = dl.height();\r\n var ddHeight = thisDd.height();\r\n \r\n // 若选中元素在滚动条不可见底部\r\n if(posTop > dlHeight){\r\n dl.scrollTop(posTop + dl.scrollTop() - dlHeight + ddHeight - 5);\r\n }\r\n \r\n // 若选择元素在滚动条不可见顶部\r\n if(posTop < 0){\r\n dl.scrollTop(posTop + dl.scrollTop() - 5);\r\n }\r\n };\r\n \r\n // 点击标题区域\r\n title.on('click', function(e){\r\n title.parent().hasClass(CLASS+'ed') ? (\r\n hideDown()\r\n ) : (\r\n showDown()\r\n );\r\n dl.find('.'+NONE).remove();\r\n }); \r\n \r\n // 点击箭头获取焦点\r\n title.find('.layui-edge').on('click', function(){\r\n input.focus();\r\n });\r\n \r\n // select 中 input 键盘事件\r\n input.on('keyup', function(e){ // 键盘松开\r\n var keyCode = e.keyCode;\r\n \r\n // Tab键展开\r\n if(keyCode === 9){\r\n showDown();\r\n }\r\n }).on('keydown', function(e){ // 键盘按下\r\n var keyCode = e.keyCode;\r\n\r\n // Tab键隐藏\r\n if(keyCode === 9){\r\n hideDown();\r\n }\r\n \r\n // 标注 dd 的选中状态\r\n var setThisDd = function(prevNext){\r\n e.preventDefault();\r\n var allDisplayedElem = dl.children('dd:not(.'+ HIDE +',.'+ DISABLED +')');\r\n if(!allDisplayedElem.length) return;\r\n var firstIndex = 0;\r\n var lastIndex = allDisplayedElem.length - 1;\r\n var selectedIndex = -1;\r\n\r\n layui.each(allDisplayedElem, function(index, el){\r\n if($(el).hasClass(THIS)){\r\n selectedIndex = index;\r\n return true;\r\n }\r\n })\r\n \r\n var nextIndex = prevNext === 'prev'\r\n ? (selectedIndex - 1 < firstIndex ? lastIndex : selectedIndex - 1)\r\n : (selectedIndex + 1 > lastIndex ? firstIndex : selectedIndex + 1)\r\n\r\n var selectedElem = allDisplayedElem.eq(nextIndex);\r\n selectedElem.addClass(THIS).siblings().removeClass(THIS); // 标注样式\r\n followScroll(); // 定位滚动条\r\n };\r\n \r\n if(keyCode === 38) setThisDd('prev'); // Up 键\r\n if(keyCode === 40) setThisDd('next'); // Down 键\r\n \r\n // Enter 键\r\n if(keyCode === 13){ \r\n e.preventDefault();\r\n dl.children('dd.'+THIS).trigger('click');\r\n }\r\n }).on('paste', function(){\r\n showDown();\r\n });\r\n \r\n // 检测值是否不属于 select 项\r\n var notOption = function(value, callback, origin){\r\n var num = 0;\r\n var dds = dl.children('dd');\r\n var hasEquals = false;\r\n var rawValue = value;\r\n var fuzzyMatchRE;\r\n if(!laySearch.caseSensitive){\r\n value = value.toLowerCase();\r\n }\r\n if(laySearch.fuzzy){\r\n fuzzyMatchRE = fuzzyMatchRegExp(value, laySearch.caseSensitive);\r\n }\r\n layui.each(dds, function(){\r\n var othis = $(this);\r\n var text = othis.text();\r\n var isCreateOption = isCreatable && othis.hasClass(CREATE_OPTION);\r\n\r\n // 需要区分大小写\r\n if(isCreatable && !isCreateOption && text === rawValue){\r\n hasEquals = true;\r\n }\r\n\r\n // 是否区分大小写\r\n if(!laySearch.caseSensitive){\r\n text = text.toLowerCase();\r\n }\r\n \r\n // 匹配\r\n var not = laySearch.fuzzy ? !fuzzyMatchRE.test(text) : text.indexOf(value) === -1;\r\n \r\n if(value === '' || (origin === 'blur') ? value !== text : not) num++;\r\n origin === 'keyup' && othis[(isCreatable ? (not && !isCreateOption) : not) ? 'addClass' : 'removeClass'](HIDE);\r\n });\r\n // 处理 select 分组元素\r\n origin === 'keyup' && layui.each(dts, function(){\r\n var othis = $(this);\r\n var thisDds = othis.nextUntil('dt').filter('dd'); // 当前分组下的dd元素\r\n if(isCreatable) thisDds = thisDds.not('.' + CREATE_OPTION);\r\n var allHide = thisDds.length == thisDds.filter('.' + HIDE).length; // 当前分组下所有dd元素都隐藏了\r\n othis[allHide ? 'addClass' : 'removeClass'](HIDE);\r\n });\r\n var none = num === dds.length;\r\n return callback(none, hasEquals), none;\r\n };\r\n \r\n // 搜索匹配\r\n var search = function(e){\r\n var value = this.value, keyCode = e.keyCode;\r\n \r\n if(keyCode === 9 || keyCode === 13 \r\n || keyCode === 37 || keyCode === 38 \r\n || keyCode === 39 || keyCode === 40\r\n ){\r\n return false;\r\n }\r\n \r\n if(needPlaceholderPatch && e.target.__ieph){\r\n e.target.__ieph = false;\r\n return false;\r\n }\r\n \r\n notOption(value, function(none, hasEquals){\r\n if(isCreatable){\r\n if(hasEquals){\r\n dl.children('.' + CREATE_OPTION).remove();\r\n }else{\r\n var createOptionElem = dl.children('.' + CREATE_OPTION);\r\n if(createOptionElem[0]){\r\n createOptionElem.attr('lay-value', value).html(util.escape(value));\r\n }else{\r\n // 临时显示在顶部\r\n var ddElem = $('
              ').addClass(CREATE_OPTION).attr('lay-value', value).html(util.escape(value));\r\n var firstOptionELem = dl.children().eq(0);\r\n var hasTips = firstOptionELem.hasClass('layui-select-tips');\r\n firstOptionELem[hasTips ? 'after' : 'before'](ddElem);\r\n }\r\n }\r\n }else{\r\n if(none){\r\n dl.find('.'+NONE)[0] || dl.append('

              无匹配项

              ');\r\n } else {\r\n dl.find('.'+NONE).remove();\r\n }\r\n }\r\n }, 'keyup');\r\n \r\n // 当搜索值清空时\r\n if(value === ''){\r\n // 取消选中项\r\n select.val('');\r\n dl.find('.'+ THIS).removeClass(THIS);\r\n (select[0].options[0] || {}).value || dl.children('dd:eq(0)').addClass(THIS);\r\n dl.find('.'+ NONE).remove();\r\n isCreatable && dl.children('.' + CREATE_OPTION).remove();\r\n }\r\n \r\n followScroll(); // 定位滚动条\r\n };\r\n \r\n if(isSearch){\r\n input.on('input propertychange', layui.debounce(search, 50)).on('blur', function(e){\r\n var selectedIndex = select[0].selectedIndex;\r\n \r\n initValue = $(select[0].options[selectedIndex]).text(); // 重新获得初始选中值\r\n \r\n // 如果是第一项,且文本值等于 placeholder,则清空初始值\r\n if(selectedIndex === 0 && initValue === input.attr('placeholder')){\r\n initValue = '';\r\n }\r\n \r\n setTimeout(function(){\r\n notOption(input.val(), function(none){\r\n initValue || input.val(''); // none && !initValue\r\n }, 'blur');\r\n }, 200);\r\n });\r\n }\r\n\r\n // 选择\r\n dl.on('click', 'dd', function(){\r\n var othis = $(this), value = othis.attr('lay-value');\r\n var filter = select.attr('lay-filter'); // 获取过滤器\r\n \r\n if(othis.hasClass(DISABLED)) return false;\r\n \r\n if(othis.hasClass('layui-select-tips')){\r\n input.val('');\r\n } else {\r\n input.val(othis.text());\r\n othis.addClass(THIS);\r\n }\r\n\r\n // 将新增的 option 元素添加到末尾\r\n if(isCreatable && othis.hasClass(CREATE_OPTION)){\r\n dl.append(othis.removeClass(CREATE_OPTION));\r\n var optionElem = $('
            '\r\n ,''\r\n ,'{{# layui.each(d.data.cols, function(i1, item1){ }}'\r\n ,''\r\n ,'{{# layui.each(item1, function(i2, item2){ }}'\r\n ,'{{# if(item2.fixed && item2.fixed !== \"right\"){ left = true; } }}'\r\n ,'{{# if(item2.fixed === \"right\"){ right = true; } }}'\r\n ,function(){\r\n if(options.fixed && options.fixed !== 'right'){\r\n return '{{# if(item2.fixed && item2.fixed !== \"right\"){ }}';\r\n }\r\n if(options.fixed === 'right'){\r\n return '{{# if(item2.fixed === \"right\"){ }}';\r\n }\r\n return '';\r\n }()\r\n ,'{{# var isSort = !(item2.colGroup) && item2.sort; }}'\r\n ,''\r\n ,(options.fixed ? '{{# }; }}' : '')\r\n ,'{{# }); }}'\r\n ,''\r\n ,'{{# }); }}'\r\n ,''\r\n ,'
            \\' + item2.title + \\'\\').text() }}\"{{# } }}>'\r\n ,'
            '\r\n ,'{{# if(item2.type === \"checkbox\"){ }}' //复选框\r\n ,''\r\n ,'{{# } else { }}'\r\n ,'{{-item2.title||\"\"}}'\r\n ,'{{# if(isSort){ }}'\r\n ,''\r\n ,'{{# } }}'\r\n ,'{{# } }}'\r\n ,'
            '\r\n ,'
            '].join('');\r\n };\r\n\r\n // tbody 区域模板\r\n var TPL_BODY = [''\r\n ,''\r\n ,'
            '].join('');\r\n\r\n // 主模板\r\n var TPL_MAIN = [\r\n ,'{{# if(d.data.toolbar){ }}'\r\n ,'
            '\r\n ,'
            '\r\n ,'
            '\r\n ,'
            '\r\n ,'{{# } }}'\r\n\r\n ,'
            '\r\n ,'{{# if(d.data.loading){ }}'\r\n ,'
            '\r\n ,'
            '\r\n ,'{{# if(typeof d.data.loading === \"string\"){ }}'\r\n ,'{{- d.data.loading}}'\r\n ,'{{# } else{ }}'\r\n ,''\r\n ,'{{# } }}'\r\n ,'
            '\r\n ,'
            '\r\n ,'{{# } }}'\r\n\r\n ,'{{# var left, right; }}'\r\n ,'
            '\r\n ,TPL_HEADER()\r\n ,'
            '\r\n ,'
            '\r\n ,TPL_BODY\r\n ,'
            '\r\n\r\n ,'{{# if(left){ }}'\r\n ,'
            '\r\n ,'
            '\r\n ,TPL_HEADER({fixed: true})\r\n ,'
            '\r\n ,'
            '\r\n ,TPL_BODY\r\n ,'
            '\r\n ,'
            '\r\n ,'{{# }; }}'\r\n\r\n ,'{{# if(right){ }}'\r\n ,'
            '\r\n ,'
            '\r\n ,TPL_HEADER({fixed: 'right'})\r\n ,'
            '\r\n ,'
            '\r\n ,'
            '\r\n ,TPL_BODY\r\n ,'
            '\r\n ,'
            '\r\n ,'{{# }; }}'\r\n ,'
            '\r\n\r\n ,'{{# if(d.data.totalRow){ }}'\r\n ,'
            '\r\n ,''\r\n ,''\r\n , '
            Total
            '\r\n ,'
            '\r\n ,'{{# } }}'\r\n\r\n ,'
            '\r\n ,'
            '\r\n ,'
            '\r\n ].join('');\r\n\r\n var _WIN = $(window);\r\n var _DOC = $(document);\r\n\r\n // constructor\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++table.index;\r\n that.config = $.extend({}, that.config, table.config, options);\r\n that.render();\r\n };\r\n\r\n // 初始默认配置\r\n Class.prototype.config = {\r\n limit: 10, // 每页显示的数量\r\n loading: true, // 请求数据时,是否显示 loading\r\n escape: true, // 是否开启 HTML 编码功能,即转义 html 原文\r\n cellMinWidth: 60, // 所有单元格默认最小宽度\r\n cellMaxWidth: Number.MAX_VALUE, // 所有单元格默认最大宽度\r\n editTrigger: 'click', // 单元格编辑的事件触发方式\r\n defaultToolbar: ['filter', 'exports', 'print'], // 工具栏右侧图标\r\n defaultContextmenu: true, // 显示默认上下文菜单\r\n autoSort: true, // 是否前端自动排序。如果否,则需自主排序(通常为服务端处理好排序)\r\n text: {\r\n none: '无数据'\r\n },\r\n cols: []\r\n };\r\n\r\n // 表格渲染\r\n Class.prototype.render = function(type){\r\n var that = this;\r\n var options = that.config;\r\n\r\n options.elem = $(options.elem);\r\n options.where = options.where || {};\r\n\r\n // 初始化 id 属性 - 优先取 options > 元素 id > 自增索引\r\n var id = options.id = 'id' in options ? options.id : (\r\n options.elem.attr('id') || that.index\r\n );\r\n\r\n thisTable.that[id] = that; // 记录当前实例对象\r\n thisTable.config[id] = options; // 记录当前实例配置项\r\n\r\n //请求参数的自定义格式\r\n options.request = $.extend({\r\n pageName: 'page',\r\n limitName: 'limit'\r\n }, options.request)\r\n\r\n // 响应数据的自定义格式\r\n options.response = $.extend({\r\n statusName: 'code', //规定数据状态的字段名称\r\n statusCode: 0, //规定成功的状态码\r\n msgName: 'msg', //规定状态信息的字段名称\r\n dataName: 'data', //规定数据总数的字段名称\r\n totalRowName: 'totalRow', //规定数据统计的字段名称\r\n countName: 'count'\r\n }, options.response);\r\n\r\n //如果 page 传入 laypage 对象\r\n if(options.page !== null && typeof options.page === 'object'){\r\n options.limit = options.page.limit || options.limit;\r\n options.limits = options.page.limits || options.limits;\r\n that.page = options.page.curr = options.page.curr || 1;\r\n delete options.page.elem;\r\n delete options.page.jump;\r\n }\r\n\r\n if(!options.elem[0]) return that;\r\n\r\n // 若元素未设 lay-filter 属性,则取实例 id 值\r\n if(!options.elem.attr('lay-filter')){\r\n options.elem.attr('lay-filter', options.id);\r\n }\r\n\r\n // 仅重载数据\r\n if(type === 'reloadData'){\r\n // 请求数据\r\n return that.pullData(that.page, {\r\n type: 'reloadData'\r\n });\r\n }\r\n\r\n // 初始化索引\r\n options.index = that.index;\r\n that.key = options.id || options.index;\r\n\r\n // 初始化一些其他参数\r\n that.setInit();\r\n\r\n // 高度铺满:full-差距值\r\n if(options.height && /^full-.+$/.test(options.height)){\r\n that.fullHeightGap = options.height.split('-')[1];\r\n options.height = _WIN.height() - (parseFloat(that.fullHeightGap) || 0);\r\n } else if (options.height && /^#\\w+\\S*-.+$/.test(options.height)) {\r\n var parentDiv = options.height.split(\"-\");\r\n that.parentHeightGap = parentDiv.pop();\r\n that.parentDiv = parentDiv.join(\"-\");\r\n options.height = $(that.parentDiv).height() - (parseFloat(that.parentHeightGap) || 0);\r\n } else if (typeof options.height === \"function\"){\r\n that.customHeightFunc = options.height;\r\n options.height = that.customHeightFunc();\r\n }\r\n\r\n // 开始插入替代元素\r\n var othis = options.elem;\r\n var hasRender = othis.next('.' + ELEM_VIEW);\r\n\r\n // 主容器\r\n var reElem = that.elem = $('
            ');\r\n\r\n // 添加 className\r\n reElem.addClass(function(){\r\n var arr = [\r\n ELEM_VIEW,\r\n ELEM_VIEW +'-'+ that.index,\r\n 'layui-form',\r\n 'layui-border-box'\r\n ];\r\n if(options.className) arr.push(options.className);\r\n return arr.join(' ');\r\n }()).attr(function(){\r\n var obj = {\r\n 'lay-filter': 'LAY-TABLE-FORM-DF-'+ that.index,\r\n 'style': function(){\r\n var arr = [];\r\n if(options.width) arr.push('width:'+ options.width + 'px;');\r\n // if(options.height) arr.push('height:'+ options.height + 'px;');\r\n return arr.join('')\r\n }()\r\n }\r\n obj[MOD_ID] = options.id;\r\n return obj;\r\n }()).html(laytpl(TPL_MAIN, {\r\n open: '{{', // 标签符前缀\r\n close: '}}' // 标签符后缀\r\n }).render({\r\n data: options,\r\n index: that.index //索引\r\n }));\r\n\r\n // 初始化样式\r\n that.renderStyle();\r\n\r\n // 生成替代元素\r\n hasRender[0] && hasRender.remove(); // 如果已经渲染,则 Rerender\r\n othis.after(reElem);\r\n\r\n // 各级容器\r\n that.layTool = reElem.find(ELEM_TOOL);\r\n that.layBox = reElem.find(ELEM_BOX);\r\n that.layHeader = reElem.find(ELEM_HEADER);\r\n that.layMain = reElem.find(ELEM_MAIN);\r\n that.layBody = reElem.find(ELEM_BODY);\r\n that.layFixed = reElem.find(ELEM_FIXED);\r\n that.layFixLeft = reElem.find(ELEM_FIXL);\r\n that.layFixRight = reElem.find(ELEM_FIXR);\r\n that.layTotal = reElem.find(ELEM_TOTAL);\r\n that.layPage = reElem.find(ELEM_PAGE);\r\n\r\n // 初始化头部工具栏\r\n that.renderToolbar();\r\n\r\n // 初始化底部分页栏\r\n that.renderPagebar();\r\n\r\n // 让表格平铺\r\n that.fullSize();\r\n that.setColsWidth();\r\n\r\n that.pullData(that.page); // 请求数据\r\n that.events(); // 事件\r\n };\r\n\r\n // 根据列类型,定制化参数\r\n Class.prototype.initOpts = function(item){\r\n var that = this\r\n var options = that.config;\r\n var initWidth = {\r\n checkbox: 50,\r\n radio: 50,\r\n space: 30,\r\n numbers: 60\r\n };\r\n\r\n // 让 type 参数兼容旧版本\r\n if(item.checkbox) item.type = \"checkbox\";\r\n if(item.space) item.type = \"space\";\r\n if(!item.type) item.type = \"normal\";\r\n\r\n if(item.type !== \"normal\"){\r\n item.unresize = true;\r\n item.width = item.width || initWidth[item.type];\r\n }\r\n };\r\n\r\n //初始化一些参数\r\n Class.prototype.setInit = function(type){\r\n var that = this;\r\n var options = that.config;\r\n\r\n options.clientWidth = options.width || function(){ //获取容器宽度\r\n //如果父元素宽度为0(一般为隐藏元素),则继续查找上层元素,直到找到真实宽度为止\r\n var getWidth = function(parent){\r\n var width;\r\n var isNone;\r\n parent = parent || options.elem.parent();\r\n\r\n if(!window.getComputedStyle){\r\n // IE 中的 `currentStyle` 获取未显式设置的宽高时会得到 'auto',jQuery 中有一些 hack 方法获取准确值\r\n width = parent.width();\r\n }else{\r\n var size = that.getElementSize(parent[0]);\r\n // IE BUG\r\n // border-box: getComputedStyle 得到的 width/height 是按照 content-box 计算出来的\r\n width = size.boxSizing === 'border-box' && !lay.ie\r\n ? size.width - size.paddingLeft - size.paddingRight - size.borderLeftWidth - size.borderRightWidth\r\n : size.width\r\n }\r\n try {\r\n isNone = parent.css('display') === 'none';\r\n } catch(e){}\r\n if(parent[0] && !lay.isTopElem(parent[0]) && (!width || isNone)) return getWidth(parent.parent());\r\n return width;\r\n };\r\n return getWidth();\r\n }();\r\n\r\n if(type === 'width') return options.clientWidth;\r\n // 初始化高度配置,如果设置了最高高度,以最高高度形式为准\r\n options.height = options.maxHeight || options.height;\r\n\r\n // 初始化 css 参数\r\n if(options.css && options.css.indexOf(ELEM_VIEW) === -1){\r\n var css = options.css.split('}');\r\n layui.each(css, function(index, value){\r\n if(value){\r\n css[index] = '.'+ ELEM_VIEW + '-'+ that.index + ' ' + value;\r\n }\r\n });\r\n options.css = css.join('}');\r\n }\r\n\r\n // 封装对 col 的配置处理\r\n var initChildCols = function (i1, item1, i2, item2) {\r\n //如果列参数为空,则移除\r\n if (!item2) {\r\n item1.splice(i2, 1);\r\n return;\r\n }\r\n\r\n item2.key = [options.index, i1, i2].join('-');\r\n item2.colspan = item2.colspan || 0;\r\n item2.rowspan = item2.rowspan || 0;\r\n\r\n //根据列类型,定制化参数\r\n that.initOpts(item2);\r\n\r\n //设置列的父列索引\r\n //如果是组合列,则捕获对应的子列\r\n var indexChild = i1 + (parseInt(item2.rowspan) || 1);\r\n if (indexChild < options.cols.length) { // 只要不是最后一层都会有子列\r\n item2.colGroup = true;\r\n var childIndex = 0;\r\n layui.each(options.cols[indexChild], function (i22, item22) {\r\n //如果子列已经被标注为{HAS_PARENT},或者子列累计 colspan 数等于父列定义的 colspan,则跳出当前子列循环\r\n if (item22.HAS_PARENT || (childIndex >= 1 && childIndex == (item2.colspan || 1))) return;\r\n\r\n item22.HAS_PARENT = true;\r\n item22.parentKey = [options.index, i1, i2].join('-') // i1 + '-' + i2;\r\n childIndex = childIndex + parseInt(item22.colspan > 1 ? item22.colspan : 1);\r\n initChildCols(indexChild, options.cols[indexChild], i22, item22);\r\n });\r\n } else {\r\n item2.colGroup = false;\r\n }\r\n item2.hide = item2.hide && !item2.colGroup || false; // 初始化中中间节点的hide信息不做处理,否则会出错,如果需要必须将其子节点也都同步成hide\r\n };\r\n\r\n // 初始化列参数\r\n layui.each(options.cols, function(i1, item1){\r\n layui.each(item1, function(i2, item2){\r\n if (i1) {\r\n delete item2.HAS_PARENT; // 去掉临时的计数排除标识,避免有新字段插入的时候重新计算被跳过导致下标出错的问题\r\n } else {\r\n initChildCols(i1, item1, i2, item2); // 只解析顶层节点由递归完成解析\r\n }\r\n });\r\n });\r\n\r\n };\r\n\r\n // 初始化样式\r\n Class.prototype.renderStyle = function() {\r\n var that = this;\r\n var options = that.config;\r\n var index = that.index;\r\n var text = [];\r\n\r\n // 单元格宽度\r\n layui.each(options.cols, function(i1, item1) {\r\n layui.each(item1, function(i2, item2) {\r\n var key = [index, i1, i2].join('-');\r\n var val = ['width: ', (item2.width || options.cellMinWidth), 'px'].join('');\r\n text.push('.laytable-cell-'+ key +'{'+ val +'}');\r\n });\r\n });\r\n\r\n // 自定义行样式\r\n (function (lineStyle) {\r\n if (!lineStyle) return;\r\n var trClassName = '.layui-table-view-'+ index +' .layui-table-body .layui-table tr';\r\n var rules = lineStyle.split(';');\r\n var cellMaxHeight = 'none';\r\n\r\n // 计算单元格最大高度\r\n layui.each(rules, function(i, rule) {\r\n rule = rule.split(':');\r\n if (rule[0] === 'height') {\r\n var val = parseFloat(rule[1]);\r\n if (!isNaN(val)) cellMaxHeight = (val - 1) + 'px';\r\n return true;\r\n }\r\n });\r\n\r\n // 多行相关样式\r\n layui.each([\r\n '{'+ lineStyle +'}',\r\n '.layui-table-cell{height: auto; max-height: '+ cellMaxHeight +'; white-space: normal; text-overflow: clip;}',\r\n '> td:hover > .layui-table-cell{overflow: auto;}'\r\n ].concat(\r\n device.ie ? [\r\n '.layui-table-edit{height: '+ cellMaxHeight +';}',\r\n 'td[data-edit]:hover:after{height: '+ cellMaxHeight +';}'\r\n ] : []\r\n ), function(i, val) {\r\n val && text.push(trClassName + ' ' + val);\r\n });\r\n })(options.lineStyle);\r\n\r\n // 自定义 css 属性\r\n if (options.css) text.push(options.css);\r\n\r\n // 生成 style\r\n lay.style({\r\n target: that.elem[0],\r\n text: text.join(''),\r\n id: 'DF-table-'+ index\r\n });\r\n };\r\n\r\n // 初始头部工具栏\r\n Class.prototype.renderToolbar = function(){\r\n var that = this;\r\n var options = that.config;\r\n var filter = options.elem.attr('lay-filter');\r\n\r\n // 添加工具栏左侧模板\r\n var leftDefaultTemp = [\r\n '
            ',\r\n '
            ',\r\n '
            '\r\n ].join('');\r\n var elemToolTemp = that.layTool.find('.layui-table-tool-temp');\r\n\r\n if(options.toolbar === 'default'){\r\n elemToolTemp.html(leftDefaultTemp);\r\n } else if(typeof options.toolbar === 'string'){\r\n var toolbarHtml = $(options.toolbar).html() || '';\r\n toolbarHtml && elemToolTemp.html(\r\n laytpl(toolbarHtml).render(options)\r\n );\r\n }\r\n\r\n // 头部工具栏右上角默认工具\r\n var defaultConfig = {\r\n filter: {\r\n title: '筛选列',\r\n layEvent: 'LAYTABLE_COLS',\r\n icon: 'layui-icon-cols',\r\n onClick: function(obj) {\r\n var options = obj.config;\r\n var openPanel = obj.openPanel;\r\n\r\n openPanel({\r\n list: function(){\r\n var lis = [];\r\n that.eachCols(function(i, item){\r\n if(item.field && item.type == 'normal'){\r\n lis.push('
          • ' + (item.fieldTitle || item.title || item.field) + '
          • ').text()) +'\" lay-filter=\"LAY_TABLE_TOOL_COLS\">');\r\n }\r\n });\r\n return lis.join('');\r\n }(),\r\n done: function() {\r\n form.on('checkbox(LAY_TABLE_TOOL_COLS)', function(obj){\r\n var othis = $(obj.elem);\r\n var checked = this.checked;\r\n var key = othis.data('key');\r\n var col = that.col(key);\r\n var hide = col.hide;\r\n var parentKey = othis.data('parentkey');\r\n\r\n if(!col.key) return;\r\n\r\n // 同步勾选列的 hide 值和隐藏样式\r\n col.hide = !checked;\r\n that.elem.find('*[data-key=\"'+ key +'\"]')[\r\n checked ? 'removeClass' : 'addClass'\r\n ](HIDE);\r\n\r\n // 根据列的显示隐藏,同步多级表头的父级相关属性值\r\n if(hide != col.hide){\r\n that.setParentCol(!checked, parentKey);\r\n }\r\n\r\n // 重新适配尺寸\r\n that.resize();\r\n\r\n // 列筛选(显示或隐藏)后的事件\r\n layui.event.call(this, MOD_NAME, 'colToggled('+ filter +')', {\r\n col: col,\r\n config: options\r\n });\r\n });\r\n }\r\n });\r\n }\r\n },\r\n exports: {\r\n title: '导出',\r\n layEvent: 'LAYTABLE_EXPORT',\r\n icon: 'layui-icon-export',\r\n onClick: function(obj) { // 自带导出\r\n var data = obj.data;\r\n var options = obj.config;\r\n var openPanel = obj.openPanel;\r\n var elem = obj.elem;\r\n\r\n if (!data.length) return layer.tips('当前表格无数据', elem, {tips: 3});\r\n if(device.ie){\r\n layer.tips('导出功能不支持 IE,请用 Chrome 等高级浏览器导出', elem, {\r\n tips: 3\r\n });\r\n } else {\r\n openPanel({\r\n list: function(){\r\n return [\r\n '
          • 导出 CSV 文件
          • '\r\n ].join('')\r\n }(),\r\n done: function(panel, list){\r\n list.on('click', function(){\r\n var type = $(this).data('type')\r\n table.exportFile.call(that, options.id, null, type);\r\n });\r\n }\r\n });\r\n }\r\n }\r\n },\r\n print: {\r\n title: '打印',\r\n layEvent: 'LAYTABLE_PRINT',\r\n icon: 'layui-icon-print',\r\n onClick: function(obj) {\r\n var data = obj.data;\r\n var options = obj.config;\r\n var elem = obj.elem;\r\n\r\n if (!data.length) return layer.tips('当前表格无数据', elem, {tips: 3});\r\n var printWin = window.open('about:blank', '_blank');\r\n var style = [''].join('')\r\n var html = $(that.layHeader.html()); // 输出表头\r\n\r\n html.append(that.layMain.find('table').html()); // 输出表体\r\n html.append(that.layTotal.find('table').html()) // 输出合计行\r\n\r\n html.find('th.layui-table-patch').remove(); // 移除补丁\r\n // 移除表头特殊列\r\n html.find('thead>tr>th.'+ ELEM_COL_SPECIAL).filter(function(i, thElem){\r\n return !$(thElem).children('.'+ ELEM_GROUP).length; // 父级表头除外\r\n }).remove();\r\n html.find('tbody>tr>td.'+ ELEM_COL_SPECIAL).remove(); // 移除表体特殊列\r\n\r\n printWin.document.write(style + html.prop('outerHTML'));\r\n printWin.document.close();\r\n\r\n if(layui.device('edg').edg){\r\n printWin.onafterprint = printWin.close;\r\n printWin.print();\r\n }else{\r\n printWin.print();\r\n printWin.close();\r\n }\r\n }\r\n }\r\n };\r\n\r\n // 若开启 defaultToolbar\r\n if (typeof options.defaultToolbar === 'object') {\r\n var iconElem = [];\r\n options.defaultToolbar = $.map(options.defaultToolbar, function(item, i) {\r\n var itemIsName = typeof item === 'string';\r\n var thisItem = itemIsName ? defaultConfig[item] : item;\r\n if (thisItem) {\r\n // 根据 name 匹配默认工具并合并\r\n if (thisItem.name && defaultConfig[thisItem.name]) {\r\n thisItem = $.extend({}, defaultConfig[thisItem.name], thisItem);\r\n }\r\n // 初始化默认工具 name\r\n if (!thisItem.name && itemIsName) {\r\n thisItem.name = item;\r\n }\r\n // 图标列表\r\n iconElem.push(\r\n '
            '\r\n +''\r\n +'
            '\r\n );\r\n }\r\n return thisItem;\r\n });\r\n that.layTool.find('.layui-table-tool-self').html(iconElem.join(''));\r\n }\r\n };\r\n\r\n // 分页栏\r\n Class.prototype.renderPagebar = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n var layPagebar = that.layPagebar = $('
            ');\r\n\r\n // 开启分页栏自定义模板\r\n if(options.pagebar){\r\n var pagebarHtml = $(options.pagebar).html() || '';\r\n pagebarHtml && layPagebar.append(laytpl(pagebarHtml).render(options));\r\n that.layPage.append(layPagebar);\r\n }\r\n };\r\n\r\n // 同步表头父列的相关值\r\n Class.prototype.setParentCol = function(hide, parentKey){\r\n var that = this;\r\n var options = that.config;\r\n\r\n var parentTh = that.layHeader.find('th[data-key=\"'+ parentKey +'\"]'); // 获取父列元素\r\n var parentColspan = parseInt(parentTh.attr('colspan')) || 0;\r\n\r\n if(parentTh[0]){\r\n var arrParentKey = parentKey.split('-');\r\n var getThisCol = options.cols[arrParentKey[1]][arrParentKey[2]];\r\n\r\n hide ? parentColspan-- : parentColspan++;\r\n\r\n parentTh.attr('colspan', parentColspan);\r\n parentTh[parentColspan ? 'removeClass' : 'addClass'](HIDE); // 如果子列显示,父列必然需要显示\r\n\r\n getThisCol.colspan2 = parentColspan; // 更新实际的 colspan 数\r\n getThisCol.hide = parentColspan < 1; // 同步 hide 参数\r\n\r\n // 递归,继续往上查询是否有父列\r\n var nextParentKey = parentTh.data('parentkey');\r\n nextParentKey && that.setParentCol(hide, nextParentKey);\r\n }\r\n };\r\n\r\n // 多级表头补丁\r\n Class.prototype.setColsPatch = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 同步表头父列的相关值\r\n layui.each(options.cols, function(i1, item1){\r\n layui.each(item1, function(i2, item2){\r\n if(item2.hide){\r\n that.setParentCol(item2.hide, item2.parentKey);\r\n }\r\n });\r\n });\r\n };\r\n\r\n // 设置组合表头的最大宽度\r\n Class.prototype.setGroupWidth = function(th){\r\n var that = this;\r\n var options = that.config;\r\n\r\n if(options.cols.length <= 1) return;\r\n\r\n // 获取表头组合\r\n var groups = that.layHeader.find((\r\n // 根据当前活动的表头 parentkey 属性查找其组合表头\r\n th ? ('th[data-key='+ th.data('parentkey') +']>') : ''\r\n ) + '.' + ELEM_GROUP); // 若无指向当前活动表头,则自下而上获取所有组合表头\r\n\r\n groups.css('width', 0);\r\n layui.each(groups.get().reverse(), function(){\r\n var othis = $(this);\r\n var key = othis.parent().data('key');\r\n var maxWidth = 0;\r\n\r\n that.layHeader.eq(0).find('th[data-parentkey='+ key +']').width(function(i, width){\r\n var oTh = $(this);\r\n if(oTh.hasClass(HIDE)) return;\r\n width > 0 && (maxWidth += width);\r\n });\r\n\r\n // 给组合表头赋值最大宽度\r\n if(maxWidth) othis.css('max-width', maxWidth - 1);\r\n\r\n // 若当前活动的组合表头仍存在上级,则继续向上设置\r\n if(th && othis.parent().data('parentkey')){\r\n that.setGroupWidth(othis.parent());\r\n }\r\n });\r\n groups.css('width', 'auto');\r\n };\r\n\r\n // 动态分配列宽\r\n Class.prototype.setColsWidth = function(){\r\n var that = this;\r\n var options = that.config;\r\n var colNums = 0; // 列个数\r\n var autoColNums = 0; // 自动列宽的列个数\r\n var autoWidth = 0; // 自动列分配的宽度\r\n var countWidth = 0; // 所有列总宽度和\r\n var cntrWidth = that.setInit('width');\r\n var borderWidth = parseFloat(layui.getStyle(that.elem[0], 'border-left-width'));\r\n var lastSpreadCol;\r\n\r\n // 统计列个数和最后一个分配宽度的列\r\n that.eachCols(function(i, item){\r\n if(!item.hide){\r\n colNums++;\r\n if(!(item.width || item.type !== 'normal')){\r\n lastSpreadCol = item;\r\n }\r\n }\r\n });\r\n\r\n // 减去边框差和滚动条宽\r\n cntrWidth = cntrWidth - function(){\r\n return (options.skin === 'line' || options.skin === 'nob') ? 2 : colNums + 1;\r\n }() * borderWidth - that.getScrollWidth(that.layMain[0]);\r\n\r\n // 计算自动分配的宽度\r\n var getAutoWidth = function(back){\r\n // 遍历所有列\r\n layui.each(options.cols, function(i1, item1){\r\n layui.each(item1, function(i2, item2){\r\n var width = 0;\r\n var minWidth = item2.minWidth || options.cellMinWidth; // 最小宽度\r\n var maxWidth = item2.maxWidth || options.cellMaxWidth; // 最大宽度\r\n\r\n if(!item2){\r\n item1.splice(i2, 1);\r\n return;\r\n }\r\n\r\n if(item2.colGroup || item2.hide) return;\r\n\r\n if(!back){\r\n width = item2.width || 0;\r\n if(/\\d+%$/.test(width)){ // 列宽为百分比\r\n width = (parseFloat(width) / 100) * cntrWidth;\r\n width < minWidth && (width = minWidth);\r\n width > maxWidth && (width = maxWidth);\r\n } else if(!width){ // 列宽未填写\r\n item2.width = width = 0;\r\n autoColNums++;\r\n } else if(item2.type === 'normal'){\r\n // 若 width 小于 minWidth, 则将 width 值自动设为 minWidth 的值\r\n width < minWidth && (item2.width = width = minWidth);\r\n // 若 width 大于 maxWidth, 则将 width 值自动设为 maxWidth 的值\r\n width > maxWidth && (item2.width = width = maxWidth);\r\n }\r\n } else if(autoWidth && autoWidth < minWidth){\r\n autoColNums--;\r\n width = minWidth;\r\n } else if(autoWidth && autoWidth > maxWidth){\r\n autoColNums--;\r\n width = maxWidth;\r\n }\r\n\r\n if(item2.hide) width = 0;\r\n countWidth = countWidth + width;\r\n });\r\n });\r\n\r\n // 如果未填充满,则将剩余宽度平分\r\n (cntrWidth > countWidth && autoColNums > 0) && (\r\n autoWidth = (cntrWidth - countWidth) / autoColNums\r\n );\r\n }\r\n\r\n getAutoWidth();\r\n getAutoWidth(true); // 重新检测分配的宽度是否低于最小列宽\r\n\r\n // 记录自动列数\r\n that.autoColNums = autoColNums = autoColNums > 0 ? autoColNums : 0;\r\n\r\n // 如果表格内容为空(无数据 或 请求异常)\r\n if (that.layMain.find('tbody').is(\":empty\")) {\r\n // 将表格宽度设置为跟表头一样的宽度,使之可以出现底部滚动条,以便滚动查看所有字段\r\n var headerWidth = that.layHeader.first().children('table').width()\r\n that.layMain.find('table').width(headerWidth);\r\n } else {\r\n that.layMain.find('table').width('auto');\r\n }\r\n\r\n var pixelsForLastCol = cntrWidth;\r\n that.eachCols(function(i3, item3){\r\n var minWidth = item3.minWidth || options.cellMinWidth;\r\n var maxWidth = item3.maxWidth || options.cellMaxWidth;\r\n\r\n if(item3.colGroup || item3.hide || (lastSpreadCol && lastSpreadCol.key === item3.key)) return;\r\n\r\n // 给未分配宽的列平均分配宽\r\n if(item3.width === 0){\r\n that.cssRules(item3.key, function(item){\r\n var newWidth = Math.round(function(){\r\n if(autoWidth < minWidth) return minWidth;\r\n if(autoWidth > maxWidth) return maxWidth;\r\n return autoWidth;\r\n }());\r\n item.style.width = newWidth + 'px';\r\n pixelsForLastCol = pixelsForLastCol - newWidth;\r\n });\r\n }\r\n\r\n // 给设定百分比的列分配列宽\r\n else if(/\\d+%$/.test(item3.width)){\r\n that.cssRules(item3.key, function(item){\r\n var width = Math.round((parseFloat(item3.width) / 100) * cntrWidth);\r\n width < minWidth && (width = minWidth);\r\n width > maxWidth && (width = maxWidth);\r\n item.style.width = width + 'px';\r\n pixelsForLastCol = pixelsForLastCol - width;\r\n });\r\n }\r\n\r\n // 给拥有普通 width 值的列分配最新列宽\r\n else {\r\n that.cssRules(item3.key, function(item){\r\n item.style.width = item3.width + 'px';\r\n pixelsForLastCol = pixelsForLastCol - item3.width;\r\n });\r\n }\r\n });\r\n // 最后一列获取剩余的空间,避免舍入导致的布局问题\r\n if(lastSpreadCol){\r\n that.cssRules(lastSpreadCol.key, function(item){\r\n var minWidth = lastSpreadCol.minWidth || options.cellMinWidth;\r\n var maxWidth = lastSpreadCol.maxWidth || options.cellMaxWidth;\r\n var newWidth = Math.max(Math.min(pixelsForLastCol, maxWidth), minWidth);\r\n item.style.width = newWidth + 'px';\r\n\r\n // 二次校验,如果仍然出现横向滚动条(通常是 1px 的误差导致)\r\n // 不同屏幕分辨率、缩放水平以及浏览器渲染差异,可能会触发这个问题 \r\n if(that.layMain.prop('offsetHeight') > that.layMain.prop('clientHeight')){\r\n item.style.width = (parseFloat(item.style.width) - borderWidth) + 'px';\r\n }\r\n });\r\n }\r\n\r\n that.setGroupWidth();\r\n\r\n };\r\n\r\n // 重置表格尺寸/结构\r\n Class.prototype.resize = function(){\r\n var that = this;\r\n\r\n if (!that.layMain) return;\r\n\r\n that.fullSize(); // 让表格铺满\r\n that.setColsWidth(); // 自适应列宽\r\n that.scrollPatch(); // 滚动条补丁\r\n };\r\n\r\n // 表格重载\r\n Class.prototype.reload = function(options, deep, type){\r\n var that = this;\r\n\r\n options = options || {};\r\n delete that.haveInit;\r\n\r\n // 防止数组深度合并\r\n layui.each(options, function(key, item){\r\n if(layui.type(item) === 'array') delete that.config[key];\r\n });\r\n\r\n // 对参数进行深度或浅扩展\r\n that.config = $.extend(deep, {}, that.config, options);\r\n if (type !== 'reloadData') {\r\n layui.each(that.config.cols, function (i1, item1) {\r\n layui.each(item1, function (i2, item2) {\r\n delete item2.colspan2;\r\n })\r\n })\r\n delete that.config.HAS_SET_COLS_PATCH;\r\n }\r\n // 执行渲染\r\n that.render(type);\r\n };\r\n\r\n // 异常提示\r\n Class.prototype.errorView = function(html){\r\n var that = this\r\n ,elemNone = that.layMain.find('.'+ NONE)\r\n ,layNone = $('
            '+ (html || 'Error') +'
            ');\r\n\r\n if(elemNone[0]){\r\n that.layNone.remove();\r\n elemNone.remove();\r\n }\r\n\r\n that.layFixed.addClass(HIDE);\r\n that.layMain.find('tbody').html('');\r\n\r\n that.layMain.append(that.layNone = layNone);\r\n\r\n // 异常情况下对 page 和 total 的内容处理\r\n that.layTotal.addClass(HIDE_V);\r\n that.layPage.find(ELEM_PAGE_VIEW).addClass(HIDE_V);\r\n\r\n table.cache[that.key] = []; //格式化缓存数据\r\n\r\n that.syncCheckAll();\r\n that.renderForm();\r\n that.setColsWidth();\r\n that.loading(false);\r\n };\r\n\r\n // 初始页码\r\n Class.prototype.page = 1;\r\n\r\n // 获得数据\r\n Class.prototype.pullData = function(curr, opts){\r\n var that = this;\r\n var options = that.config;\r\n // 同步表头父列的相关值\r\n options.HAS_SET_COLS_PATCH || that.setColsPatch();\r\n options.HAS_SET_COLS_PATCH = true;\r\n var request = options.request;\r\n var response = options.response;\r\n var res;\r\n var sort = function(){\r\n if(typeof options.initSort === 'object'){\r\n that.sort({\r\n field: options.initSort.field,\r\n type: options.initSort.type,\r\n reloadType: opts.type\r\n });\r\n }\r\n };\r\n var done = function(res, origin){\r\n that.setColsWidth();\r\n that.loading(false);\r\n typeof options.done === 'function' && options.done(\r\n res, curr, res[response.countName], origin\r\n );\r\n };\r\n\r\n opts = opts || {};\r\n\r\n // 数据拉取前的回调\r\n typeof options.before === 'function' && options.before(\r\n options\r\n );\r\n that.startTime = new Date().getTime(); // 渲染开始时间\r\n\r\n if (opts.renderData) { // 将 cache 信息重新渲染\r\n res = {};\r\n res[response.dataName] = table.cache[that.key];\r\n res[response.countName] = options.url ? (layui.type(options.page) === 'object' ? options.page.count : res[response.dataName].length) : options.data.length;\r\n\r\n // 记录合计行数据\r\n if(typeof options.totalRow === 'object'){\r\n res[response.totalRowName] = $.extend({}, that.totalRow);\r\n }\r\n\r\n that.renderData({\r\n res: res,\r\n curr: curr,\r\n count: res[response.countName],\r\n type: opts.type,\r\n sort: true\r\n }), done(res, 'renderData');\r\n } else if(options.url){ // Ajax请求\r\n var params = {};\r\n // 当 page 开启,默认自动传递 page、limit 参数\r\n if(options.page){\r\n params[request.pageName] = curr;\r\n params[request.limitName] = options.limit;\r\n }\r\n\r\n // 参数\r\n var data = $.extend(params, options.where);\r\n if(options.contentType && options.contentType.indexOf(\"application/json\") == 0){ // 提交 json 格式\r\n data = JSON.stringify(data);\r\n }\r\n\r\n that.loading(true);\r\n\r\n $.ajax({\r\n type: options.method || 'get',\r\n url: options.url,\r\n contentType: options.contentType,\r\n data: data,\r\n dataType: options.dataType || 'json',\r\n jsonpCallback: options.jsonpCallback,\r\n headers: options.headers || {},\r\n complete: typeof options.complete === 'function' ? options.complete : undefined,\r\n success: function(res){\r\n // 若有数据解析的回调,则获得其返回的数据\r\n if(typeof options.parseData === 'function'){\r\n res = options.parseData(res) || res;\r\n }\r\n // 检查数据格式是否符合规范\r\n if(res[response.statusName] != response.statusCode){\r\n that.errorView(\r\n res[response.msgName] ||\r\n ('返回的数据不符合规范,正确的成功状态码应为:\"'+ response.statusName +'\": '+ response.statusCode)\r\n );\r\n } else {\r\n // 当前页不能超过总页数\r\n var count = res[response.countName];\r\n var pages = Math.ceil(count / options.limit) || 1;\r\n if(curr > pages){\r\n curr = pages;\r\n }\r\n that.totalRow = res[response.totalRowName];\r\n that.renderData({\r\n res: res,\r\n curr: curr,\r\n count: count,\r\n type: opts.type\r\n }), sort();\r\n\r\n // 耗时(接口请求+视图渲染)\r\n options.time = (new Date().getTime() - that.startTime) + ' ms';\r\n }\r\n done(res, opts.type);\r\n },\r\n error: function(e, msg){\r\n that.errorView('请求异常,错误提示:'+ msg);\r\n typeof options.error === 'function' && options.error(e, msg);\r\n }\r\n });\r\n } else if(layui.type(options.data) === 'array'){ //已知数据\r\n res = {};\r\n var startLimit = curr*options.limit - options.limit;\r\n var newData = options.data.concat();\r\n\r\n res[response.dataName] = options.page\r\n ? newData.splice(startLimit, options.limit)\r\n : newData;\r\n res[response.countName] = options.data.length;\r\n\r\n // 记录合计行数据\r\n if(typeof options.totalRow === 'object'){\r\n res[response.totalRowName] = $.extend({}, options.totalRow);\r\n }\r\n that.totalRow = res[response.totalRowName];\r\n\r\n that.renderData({\r\n res: res,\r\n curr: curr,\r\n count: res[response.countName],\r\n type: opts.type\r\n }), sort();\r\n\r\n done(res, opts.type);\r\n }\r\n };\r\n\r\n // 遍历表头\r\n Class.prototype.eachCols = function(callback){\r\n var that = this;\r\n table.eachCols(null, callback, that.config.cols);\r\n return that;\r\n };\r\n\r\n // 获取表头参数项\r\n Class.prototype.col = function(key){\r\n try {\r\n key = key.split('-');\r\n return this.config.cols[key[1]][key[2]] || {};\r\n } catch(e){\r\n hint.error(e);\r\n return {};\r\n }\r\n };\r\n\r\n Class.prototype.getTrHtml = function(data, sort, curr, trsObj) {\r\n var that = this;\r\n var options = that.config;\r\n var trs = trsObj && trsObj.trs || [];\r\n var trs_fixed = trsObj && trsObj.trs_fixed || [];\r\n var trs_fixed_r = trsObj && trsObj.trs_fixed_r || [];\r\n curr = curr || 1\r\n\r\n layui.each(data, function(i1, item1){\r\n var tds = [];\r\n var tds_fixed = [];\r\n var tds_fixed_r = [];\r\n var numbers = i1 + options.limit*(curr - 1) + 1; // 序号\r\n\r\n // 数组值是否为 object,如果不是,则自动转为 object\r\n if(typeof item1 !== 'object'){\r\n data[i1] = item1 = {LAY_KEY: item1};\r\n try {\r\n table.cache[that.key][i1] = item1;\r\n } catch(e) {}\r\n }\r\n\r\n //若数据项为空数组,则不往下执行(因为删除数据时,会将原有数据设置为 [])\r\n if(layui.type(item1) === 'array' && item1.length === 0) return;\r\n\r\n // 加入序号保留字段\r\n item1[table.config.numbersName] = numbers;\r\n\r\n // 记录下标索引,用于恢复排序\r\n if(!sort) item1[table.config.indexName] = i1;\r\n\r\n // 遍历表头\r\n that.eachCols(function(i3, item3){\r\n var field = item3.field || i3;\r\n var key = item3.key;\r\n var content = item1[field];\r\n\r\n if(content === undefined || content === null) content = '';\r\n if(item3.colGroup) return;\r\n\r\n // td 内容\r\n var td = [''\r\n ,'
            '\r\n + function(){\r\n var tplData = $.extend(true, {\r\n LAY_COL: item3\r\n }, item1);\r\n var checkName = table.config.checkName;\r\n var disabledName = table.config.disabledName;\r\n\r\n // 渲染不同风格的列\r\n switch(item3.type){\r\n case 'checkbox': // 复选\r\n return '';\r\n //break;\r\n case 'radio': // 单选\r\n return '';\r\n //break;\r\n case 'numbers':\r\n return numbers;\r\n //break;\r\n }\r\n\r\n //解析工具列模板\r\n if(item3.toolbar){\r\n return laytpl($(item3.toolbar).html()||'').render(tplData);\r\n }\r\n return parseTempData.call(that, {\r\n item3: item3\r\n ,content: content\r\n ,tplData: tplData\r\n });\r\n }()\r\n ,'
            '].join('');\r\n\r\n tds.push(td);\r\n if(item3.fixed && item3.fixed !== 'right') tds_fixed.push(td);\r\n if(item3.fixed === 'right') tds_fixed_r.push(td);\r\n });\r\n\r\n // 添加 tr 属性\r\n var trAttr = function(){\r\n var arr = ['data-index=\"'+ i1 +'\"'];\r\n if(item1[table.config.checkName]) arr.push('class=\"'+ ELEM_CHECKED +'\"');\r\n return arr.join(' ');\r\n }();\r\n\r\n trs.push(''+ tds.join('') + '');\r\n trs_fixed.push(''+ tds_fixed.join('') + '');\r\n trs_fixed_r.push(''+ tds_fixed_r.join('') + '');\r\n });\r\n\r\n return {\r\n trs: trs,\r\n trs_fixed: trs_fixed,\r\n trs_fixed_r: trs_fixed_r\r\n }\r\n }\r\n\r\n // 返回行节点代码\r\n table.getTrHtml = function (id, data) {\r\n var that = getThisTable(id);\r\n return that.getTrHtml(data, null, that.page);\r\n }\r\n\r\n // 数据渲染\r\n Class.prototype.renderData = function(opts){\r\n var that = this;\r\n var options = that.config;\r\n\r\n var res = opts.res;\r\n var curr = opts.curr;\r\n var count = that.count = opts.count;\r\n var sort = opts.sort;\r\n\r\n var data = res[options.response.dataName] || []; //列表数据\r\n var totalRowData = res[options.response.totalRowName]; //合计行数据\r\n var trs = [];\r\n var trs_fixed = [];\r\n var trs_fixed_r = [];\r\n\r\n // 渲染视图\r\n var render = function(){ // 后续性能提升的重点\r\n if(!sort && that.sortKey){\r\n return that.sort({\r\n field: that.sortKey.field,\r\n type: that.sortKey.sort,\r\n pull: true,\r\n reloadType: opts.type\r\n });\r\n }\r\n that.getTrHtml(data, sort, curr, {\r\n trs: trs,\r\n trs_fixed: trs_fixed,\r\n trs_fixed_r: trs_fixed_r\r\n });\r\n\r\n // 容器的滚动条位置\r\n if(!(options.scrollPos === 'fixed' && opts.type === 'reloadData')){\r\n that.layBody.scrollTop(0);\r\n }\r\n if(options.scrollPos === 'reset'){\r\n that.layBody.scrollLeft(0);\r\n }\r\n\r\n that.layMain.find('.'+ NONE).remove();\r\n that.layMain.find('tbody').html(trs.join(''));\r\n that.layFixLeft.find('tbody').html(trs_fixed.join(''));\r\n that.layFixRight.find('tbody').html(trs_fixed_r.join(''));\r\n\r\n // 渲染表单\r\n that.syncCheckAll();\r\n that.renderForm();\r\n\r\n // 因为 page 参数有可能发生变化 先重新铺满\r\n that.fullSize();\r\n\r\n // 滚动条补丁\r\n that.haveInit ? that.scrollPatch() : setTimeout(function(){\r\n that.scrollPatch();\r\n }, 50);\r\n that.haveInit = true;\r\n\r\n layer.close(that.tipsIndex);\r\n };\r\n\r\n table.cache[that.key] = data; //记录数据\r\n\r\n //显示隐藏合计栏\r\n that.layTotal[data.length == 0 ? 'addClass' : 'removeClass'](HIDE_V);\r\n\r\n //显示隐藏分页栏\r\n that.layPage[(options.page || options.pagebar) ? 'removeClass' : 'addClass'](HIDE);\r\n that.layPage.find(ELEM_PAGE_VIEW)[\r\n (!options.page || count == 0 || (data.length === 0 && curr == 1))\r\n ? 'addClass'\r\n : 'removeClass'\r\n ](HIDE_V);\r\n\r\n //如果无数据\r\n if(data.length === 0){\r\n return that.errorView(options.text.none);\r\n } else {\r\n that.layFixLeft.removeClass(HIDE);\r\n }\r\n\r\n //如果执行初始排序\r\n if(sort){\r\n return render();\r\n }\r\n\r\n //正常初始化数据渲染\r\n render(); //渲染数据\r\n that.renderTotal(data, totalRowData); //数据合计\r\n that.layTotal && that.layTotal.removeClass(HIDE);\r\n\r\n //同步分页状态\r\n if(options.page){\r\n options.page = $.extend({\r\n elem: 'layui-table-page' + options.index,\r\n count: count,\r\n limit: options.limit,\r\n limits: options.limits || [10,20,30,40,50,60,70,80,90],\r\n groups: 3,\r\n layout: ['prev', 'page', 'next', 'skip', 'count', 'limit'],\r\n prev: '',\r\n next: '',\r\n jump: function(obj, first){\r\n if(!first){\r\n //分页本身并非需要做以下更新,下面参数的同步,主要是因为其它处理统一用到了它们\r\n //而并非用的是 options.page 中的参数(以确保分页未开启的情况仍能正常使用)\r\n that.page = obj.curr; //更新页码\r\n options.limit = obj.limit; //更新每页条数\r\n\r\n that.pullData(obj.curr);\r\n }\r\n }\r\n }, options.page);\r\n options.page.count = count; //更新总条数\r\n laypage.render(options.page);\r\n }\r\n };\r\n\r\n // 重新渲染数据\r\n table.renderData = function (id) {\r\n var that = getThisTable(id);\r\n if (!that) {\r\n return;\r\n }\r\n\r\n that.pullData(that.page, {\r\n renderData: true,\r\n type: 'reloadData'\r\n });\r\n }\r\n\r\n // 数据合计行\r\n Class.prototype.renderTotal = function(data, totalRowData){\r\n var that = this;\r\n var options = that.config;\r\n var totalNums = {};\r\n\r\n if(!options.totalRow) return;\r\n\r\n layui.each(data, function(i1, item1){\r\n // 若数据项为空数组,则不往下执行(因为删除数据时,会将原有数据设置为 [])\r\n if(layui.type(item1) === 'array' && item1.length === 0) return;\r\n\r\n that.eachCols(function(i3, item3){\r\n var field = item3.field || i3\r\n ,content = item1[field];\r\n\r\n if(item3.totalRow){\r\n totalNums[field] = (totalNums[field] || 0) + (parseFloat(content) || 0);\r\n }\r\n });\r\n });\r\n\r\n that.dataTotal = []; // 记录合计行结果\r\n\r\n var tds = [];\r\n that.eachCols(function(i3, item3){\r\n var field = item3.field || i3;\r\n\r\n // 合计数据的特定字段\r\n var TOTAL_NUMS = totalRowData && totalRowData[item3.field];\r\n\r\n // 合计数据的小数点位数处理\r\n var decimals = 'totalRowDecimals' in item3 ? item3.totalRowDecimals : 2;\r\n var thisTotalNum = totalNums[field]\r\n ? parseFloat(totalNums[field] || 0).toFixed(decimals)\r\n : '';\r\n\r\n // td 显示内容\r\n var content = function(){\r\n var text = item3.totalRowText || '';\r\n var tplData = {\r\n LAY_COL: item3\r\n };\r\n\r\n tplData[field] = thisTotalNum;\r\n\r\n // 获取自动计算的合并内容\r\n var getContent = item3.totalRow ? (parseTempData.call(that, {\r\n item3: item3,\r\n content: thisTotalNum,\r\n tplData: tplData\r\n }) || text) : text;\r\n\r\n // 如果直接传入了合计行数据,则不输出自动计算的结果\r\n return TOTAL_NUMS || getContent;\r\n }();\r\n\r\n // 合计原始结果\r\n var total = TOTAL_NUMS || thisTotalNum || '';\r\n item3.field && that.dataTotal.push({\r\n field: item3.field,\r\n total: $('
            '+ content +'
            ').text()\r\n });\r\n\r\n // td 容器\r\n var td = ['',\r\n '
            ' + function(){\r\n var totalRow = item3.totalRow || options.totalRow;\r\n\r\n // 如果 totalRow 参数为字符类型,则解析为自定义模版\r\n if(typeof totalRow === 'string'){\r\n return laytpl(totalRow).render($.extend({\r\n TOTAL_NUMS: TOTAL_NUMS || totalNums[field],\r\n TOTAL_ROW: totalRowData || {},\r\n LAY_COL: item3\r\n }, item3));\r\n }\r\n return content;\r\n }(),\r\n '
            '].join('');\r\n\r\n tds.push(td);\r\n });\r\n\r\n var patchElem = that.layTotal.find('.layui-table-patch'); // 可能存在滚动条补丁\r\n that.layTotal.find('tbody').html('' + tds.join('') + (patchElem.length ? patchElem.get(0).outerHTML : '') + '');\r\n };\r\n\r\n //找到对应的列元素\r\n Class.prototype.getColElem = function(parent, key){\r\n var that = this;\r\n //var options = that.config;\r\n return parent.eq(0).find('.laytable-cell-'+ key + ':eq(0)');\r\n };\r\n\r\n // 渲染表单\r\n Class.prototype.renderForm = function(type){\r\n var that = this;\r\n var options = that.config;\r\n var filter = that.elem.attr('lay-filter');\r\n form.render(type, filter);\r\n };\r\n\r\n // 定向渲染表单\r\n Class.prototype.renderFormByElem = function(elem){\r\n layui.each(['input', 'select'], function(i, formType){\r\n form.render(elem.find(formType));\r\n })\r\n };\r\n\r\n // 同步全选按钮状态\r\n Class.prototype.syncCheckAll = function(){\r\n var that = this;\r\n var options = that.config;\r\n var checkAllElem = that.layHeader.find('input[name=\"layTableCheckbox\"]');\r\n var syncColsCheck = function(checked){\r\n that.eachCols(function(i, item){\r\n if(item.type === 'checkbox'){\r\n item[options.checkName] = checked;\r\n }\r\n });\r\n return checked;\r\n };\r\n var checkStatus = table.checkStatus(that.key);\r\n\r\n if(!checkAllElem[0]) return;\r\n\r\n // 选中状态\r\n syncColsCheck(checkStatus.isAll);\r\n checkAllElem.prop({\r\n checked: checkStatus.isAll,\r\n indeterminate: !checkStatus.isAll && checkStatus.data.length // 半选\r\n });\r\n };\r\n\r\n // 标记当前活动行背景色\r\n Class.prototype.setRowActive = function(index, className, removeClass){\r\n var that = this;\r\n var options = that.config;\r\n var tr = that.layBody.find('tr[data-index=\"'+ index +'\"]');\r\n className = className || 'layui-table-click';\r\n\r\n if(removeClass) return tr.removeClass(className);\r\n\r\n tr.addClass(className);\r\n tr.siblings('tr').removeClass(className);\r\n };\r\n\r\n // 设置行选中状态\r\n Class.prototype.setRowChecked = function(opts){\r\n var that = this;\r\n var options = that.config;\r\n var isCheckAll = opts.index === 'all'; // 是否操作全部\r\n var isCheckMult = layui.type(opts.index) === 'array'; // 是否操作多个\r\n var isCheckAllOrMult = isCheckAll || isCheckMult; // 是否全选或多选\r\n\r\n // 全选或多选时\r\n if (isCheckAllOrMult) {\r\n that.layBox.addClass(DISABLED_TRANSITION); // 减少回流\r\n if (opts.type === 'radio') return; // radio 不允许全选或多选\r\n }\r\n\r\n if(isCheckMult){\r\n var makeMap = {}\r\n layui.each(opts.index, function(i,v){\r\n makeMap[v] = true;\r\n })\r\n opts.index = makeMap;\r\n }\r\n\r\n // 匹配行元素\r\n var tbody = that.layBody.children('.layui-table').children('tbody');\r\n var selector = isCheckAllOrMult ? 'tr' : 'tr[data-index=\"'+ opts.index +'\"]';\r\n var tr = function(tr) {\r\n return isCheckAll ? tr : tr.filter(isCheckMult ? function() {\r\n var dataIndex = $(this).data('index');\r\n return opts.index[dataIndex];\r\n } : '[data-index=\"'+ opts.index +'\"]');\r\n }(tbody.children(selector));\r\n\r\n // 默认属性\r\n opts = $.extend({\r\n type: 'checkbox' // 选中方式\r\n }, opts);\r\n\r\n // 同步数据选中属性值\r\n var thisData = table.cache[that.key];\r\n var existChecked = 'checked' in opts;\r\n\r\n // 若为单选框,则单向选中;若为复选框,则切换选中。\r\n var getChecked = function(value){\r\n return opts.type === 'radio' ? true : (existChecked ? opts.checked : !value)\r\n };\r\n\r\n var radioCheckedIndex;\r\n\r\n // 给匹配行设置选中状态\r\n tr.each(function() {\r\n var el = $(this);\r\n var i = el.attr('data-index');\r\n var item = thisData[i];\r\n\r\n if (!i) return; // 此时 el 通常为静态表格嵌套时的原始模板\r\n\r\n // 绕过空项和禁用项\r\n if (layui.type(item) === 'array' || item[options.disabledName]) {\r\n return;\r\n }\r\n\r\n // 标记数据选中状态\r\n var checked = item[options.checkName] = getChecked(el.hasClass(ELEM_CHECKED));\r\n\r\n // 标记当前行背景色\r\n el.toggleClass(ELEM_CHECKED, !!checked);\r\n\r\n // 若为 radio 类型,则取消其他行选中背景色\r\n if (opts.type === 'radio') {\r\n radioCheckedIndex = i;\r\n el.siblings().removeClass(ELEM_CHECKED);\r\n }\r\n });\r\n\r\n // 若为 radio 类型,移除其他行数据选中状态\r\n if (radioCheckedIndex) {\r\n layui.each(thisData, function(i, item) {\r\n if (Number(radioCheckedIndex) !== Number(i)) {\r\n delete item[options.checkName];\r\n }\r\n });\r\n }\r\n\r\n // 若存在复选框或单选框,则标注选中状态样式\r\n var td = tr.children('td').children('.layui-table-cell');\r\n var checkedElem = td.children('input[lay-type=\"'+ ({\r\n radio: 'layTableRadio',\r\n checkbox: 'layTableCheckbox'\r\n }[opts.type] || 'checkbox') +'\"]:not(:disabled)');\r\n var checkedSameElem = checkedElem.last();\r\n var fixRElem = checkedSameElem.closest(ELEM_FIXR);\r\n\r\n ( opts.type === 'radio' && fixRElem.hasClass(HIDE)\r\n ? checkedElem.first()\r\n : checkedElem ).prop('checked', getChecked(checkedSameElem.prop('checked')));\r\n\r\n that.syncCheckAll();\r\n\r\n if(isCheckAllOrMult){\r\n setTimeout(function(){\r\n that.layBox.removeClass(DISABLED_TRANSITION);\r\n },100)\r\n }\r\n };\r\n\r\n // 数据排序\r\n Class.prototype.sort = function(opts){ // field, type, pull, fromEvent\r\n var that = this;\r\n var field;\r\n var res = {};\r\n var options = that.config;\r\n var filter = options.elem.attr('lay-filter');\r\n var data = table.cache[that.key], thisData;\r\n\r\n opts = opts || {};\r\n\r\n // 字段匹配\r\n if(typeof opts.field === 'string'){\r\n field = opts.field;\r\n that.layHeader.find('th').each(function(i, item){\r\n var othis = $(this);\r\n var _field = othis.data('field');\r\n if(_field === opts.field){\r\n opts.field = othis;\r\n field = _field;\r\n return false;\r\n }\r\n });\r\n }\r\n\r\n try {\r\n field = field || opts.field.data('field');\r\n var key = opts.field.data('key');\r\n\r\n // 如果欲执行的排序已在状态中,则不执行渲染\r\n if(that.sortKey && !opts.pull){\r\n if(field === that.sortKey.field && opts.type === that.sortKey.sort){\r\n return;\r\n }\r\n }\r\n\r\n var elemSort = that.layHeader.find('th .laytable-cell-'+ key).find(ELEM_SORT);\r\n that.layHeader.find('th').find(ELEM_SORT).removeAttr('lay-sort'); // 清除其它标题排序状态\r\n elemSort.attr('lay-sort', opts.type || null);\r\n that.layFixed.find('th')\r\n } catch(e){\r\n hint.error('Table modules: sort field \\''+ field +'\\' not matched');\r\n }\r\n\r\n // 记录排序索引和类型\r\n that.sortKey = {\r\n field: field,\r\n sort: opts.type\r\n };\r\n\r\n // 默认为前端自动排序。如果否,则需自主排序(通常为服务端处理好排序)\r\n if(options.autoSort){\r\n if(opts.type === 'asc'){ //升序\r\n thisData = layui.sort(data, field, null, true);\r\n } else if(opts.type === 'desc'){ //降序\r\n thisData = layui.sort(data, field, true, true);\r\n } else { // 清除排序\r\n thisData = layui.sort(data, table.config.indexName, null, true);\r\n delete that.sortKey;\r\n delete options.initSort;\r\n }\r\n }\r\n\r\n res[options.response.dataName] = thisData || data;\r\n\r\n // 重载数据\r\n that.renderData({\r\n res: res,\r\n curr: that.page,\r\n count: that.count,\r\n sort: true,\r\n type: opts.reloadType\r\n });\r\n\r\n // 排序是否来自于点击表头事件触发\r\n if(opts.fromEvent){\r\n options.initSort = {\r\n field: field,\r\n type: opts.type\r\n };\r\n layui.event.call(opts.field, MOD_NAME, 'sort('+ filter +')', $.extend({\r\n config: options\r\n }, options.initSort));\r\n }\r\n };\r\n\r\n // 请求 loading\r\n Class.prototype.loading = function(show){\r\n var that = this;\r\n var options = that.config;\r\n\r\n if(options.loading){\r\n that.layBox.find(ELEM_INIT).toggleClass(HIDE, !show); \r\n }\r\n };\r\n\r\n // 获取对应单元格的 cssRules\r\n Class.prototype.cssRules = function(key, callback){\r\n var that = this;\r\n var style = that.elem.children('style')[0];\r\n\r\n lay.getStyleRules(style, function(item){\r\n if (item.selectorText === ('.laytable-cell-'+ key)) {\r\n callback(item);\r\n return true;\r\n }\r\n });\r\n };\r\n\r\n // 让表格铺满\r\n Class.prototype.fullSize = function(){\r\n var that = this;\r\n var options = that.config;\r\n var height = options.height;\r\n var bodyHeight;\r\n var MIN_HEIGHT = 135;\r\n\r\n if(that.fullHeightGap){\r\n height = _WIN.height() - that.fullHeightGap;\r\n if(height < MIN_HEIGHT) height = MIN_HEIGHT;\r\n // that.elem.css('height', height);\r\n } else if (that.parentDiv && that.parentHeightGap) {\r\n height = $(that.parentDiv).height() - that.parentHeightGap;\r\n if(height < MIN_HEIGHT) height = MIN_HEIGHT;\r\n // that.elem.css(\"height\", height);\r\n } else if (that.customHeightFunc) {\r\n height = that.customHeightFunc();\r\n if(height < MIN_HEIGHT) height = MIN_HEIGHT;\r\n }\r\n\r\n // 如果多级表头,则填补表头高度\r\n if(options.cols.length > 1){\r\n // 补全高度\r\n var th = that.layFixed.find(ELEM_HEADER).find('th');\r\n // 固定列表头同步跟本体 th 一致高度\r\n var headerMain = that.layHeader.first();\r\n layui.each(th, function (thIndex, thElem) {\r\n thElem = $(thElem);\r\n thElem.height(headerMain.find('th[data-key=\"' + thElem.attr('data-key') + '\"]').height() + 'px');\r\n })\r\n }\r\n\r\n if(!height) return;\r\n\r\n // 减去列头区域的高度 --- 此处的数字常量是为了防止容器处在隐藏区域无法获得高度的问题,只对默认尺寸表格做支持\r\n bodyHeight = parseFloat(height) - (that.layHeader.outerHeight() || 39)\r\n\r\n // 减去工具栏的高度\r\n if(options.toolbar){\r\n bodyHeight -= (that.layTool.outerHeight() || 51);\r\n }\r\n\r\n // 减去统计栏的高度\r\n if(options.totalRow){\r\n bodyHeight -= (that.layTotal.outerHeight() || 40);\r\n }\r\n\r\n // 减去分页栏的高度\r\n if(options.page || options.pagebar){\r\n bodyHeight -= (that.layPage.outerHeight() || 43);\r\n }\r\n\r\n if (options.maxHeight) {\r\n layui.each({elem: height, layMain: bodyHeight}, function (elemName, elemHeight) {\r\n that[elemName].css({\r\n height: 'auto',\r\n maxHeight: elemHeight + 'px'\r\n });\r\n });\r\n } else {\r\n that.layMain.outerHeight(bodyHeight);\r\n }\r\n };\r\n\r\n //获取滚动条宽度\r\n Class.prototype.getScrollWidth = function(elem){\r\n var width;\r\n if(elem){\r\n width = elem.offsetWidth - elem.clientWidth;\r\n } else {\r\n elem = document.createElement('div');\r\n elem.style.width = '100px';\r\n elem.style.height = '100px';\r\n elem.style.overflowY = 'scroll';\r\n\r\n document.body.appendChild(elem);\r\n width = elem.offsetWidth - elem.clientWidth;\r\n document.body.removeChild(elem);\r\n }\r\n return width;\r\n };\r\n\r\n // 滚动条补丁\r\n Class.prototype.scrollPatch = function(){\r\n var that = this;\r\n var layMainTable = that.layMain.children('table');\r\n var scrollWidth = that.layMain.width() - that.layMain.prop('clientWidth'); // 纵向滚动条宽度\r\n var scrollHeight = that.layMain.height() - that.layMain.prop('clientHeight'); // 横向滚动条高度\r\n var getScrollWidth = that.getScrollWidth(that.layMain[0]); // 获取主容器滚动条宽度,如果有的话\r\n var outWidth = layMainTable.outerWidth() - that.layMain.width(); // 表格内容器的超出宽度\r\n\r\n // 添加补丁\r\n var addPatch = function(elem){\r\n if(scrollWidth && scrollHeight){\r\n elem = elem.eq(0);\r\n if(!elem.find('.layui-table-patch')[0]){\r\n var patchElem = $('
            '); // 补丁元素\r\n patchElem.find('div').css({\r\n width: scrollWidth\r\n });\r\n elem.find('tr').append(patchElem);\r\n }\r\n } else {\r\n elem.find('.layui-table-patch').remove();\r\n }\r\n };\r\n\r\n addPatch(that.layHeader);\r\n addPatch(that.layTotal);\r\n\r\n // 固定列区域高度\r\n var mainHeight = that.layMain.height();\r\n var fixHeight = mainHeight - scrollHeight;\r\n\r\n that.layFixed.find(ELEM_BODY).css(\r\n 'height',\r\n layMainTable.height() >= fixHeight ? fixHeight : 'auto'\r\n ).scrollTop(that.layMain.scrollTop()); // 固定列滚动条高度\r\n\r\n // 表格宽度小于容器宽度时,隐藏固定列\r\n that.layFixRight[\r\n (table.cache[that.key] && table.cache[that.key].length) && outWidth > 0\r\n ? 'removeClass'\r\n : 'addClass'\r\n ](HIDE);\r\n\r\n // 操作栏\r\n that.layFixRight.css('right', scrollWidth - 1);\r\n };\r\n\r\n /**\r\n * @typedef updateRowOptions\r\n * @prop {number} index - 行索引\r\n * @prop {Object.} data - 行数据\r\n * @prop {boolean | ((field, index) => boolean)} [related] - 更新其他包含自定义模板且可能有所关联的列视图\r\n */\r\n /**\r\n * 更新指定行\r\n * @param {updateRowOptions | updateRowOptions[]} opts \r\n * @param {(field: string, value: any) => void} [callback] - 更新每个字段时的回调函数\r\n */\r\n Class.prototype.updateRow = function(opts, callback){\r\n var that = this;\r\n var ELEM_CELL = '.layui-table-cell';\r\n var opts = layui.type(opts) === 'array' ? opts : [opts];\r\n var dataCache = table.cache[that.key] || [];\r\n\r\n var update = function(opt){\r\n var index = opt.index;\r\n var row = opt.data;\r\n var related = opt.related;\r\n\r\n var data = dataCache[index] || {};\r\n var tr = that.layBody.find('tr[data-index=\"' + index + '\"]');\r\n\r\n // 更新缓存中的数据\r\n layui.each(row, function (key, value) {\r\n data[key] = value;\r\n callback && callback(key, value);\r\n });\r\n\r\n // 更新单元格\r\n that.eachCols(function (i, item3) {\r\n var field = String(item3.field || i);\r\n var shouldUpdate = field in row || ((typeof related === 'function' ? related(field, i) : related) && (item3.templet || item3.toolbar));\r\n if(shouldUpdate){\r\n var td = tr.children('td[data-field=\"' + field + '\"]');\r\n var cell = td.children(ELEM_CELL);\r\n var content = data[item3.field];\r\n cell.html(parseTempData.call(that, {\r\n item3: item3,\r\n content: content,\r\n tplData: $.extend({\r\n LAY_COL: item3,\r\n }, data)\r\n }));\r\n td.data(\"content\", content);\r\n that.renderFormByElem(cell);\r\n }\r\n });\r\n }\r\n\r\n layui.each(opts, function(i, opt){\r\n update(opt);\r\n });\r\n };\r\n\r\n /**\r\n * 更新指定行\r\n * @param {string} id - table ID\r\n * @param {updateRowOptions | updateRowOptions[]} options \r\n */\r\n table.updateRow = function (id, options){\r\n var that = getThisTable(id);\r\n return that.updateRow(options);\r\n }\r\n\r\n // 事件处理\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n var filter = options.elem.attr('lay-filter');\r\n var th = that.layHeader.find('th');\r\n var ELEM_CELL = '.layui-table-cell';\r\n\r\n var _BODY = $('body');\r\n var dict = {};\r\n\r\n // 头部工具栏操作事件\r\n that.layTool.on('click', '*[lay-event]', function(e){\r\n var othis = $(this);\r\n var events = othis.attr('lay-event');\r\n var data = table.cache[options.id];\r\n\r\n // 弹出工具下拉面板\r\n var openPanel = function(sets) {\r\n var list = $(sets.list);\r\n var panel = $('
              ');\r\n\r\n panel.html(list);\r\n\r\n // 限制最大高度\r\n if(options.height){\r\n panel.css('max-height', options.height - (that.layTool.outerHeight() || 50));\r\n }\r\n\r\n // 插入元素\r\n othis.find('.' + ELEM_TOOL_PANEL)[0] || othis.append(panel);\r\n that.renderForm();\r\n\r\n panel.on('click', function(e){\r\n layui.stope(e);\r\n });\r\n\r\n sets.done && sets.done(panel, list)\r\n };\r\n\r\n layui.stope(e);\r\n _DOC.trigger('table.tool.panel.remove');\r\n layer.close(that.tipsIndex);\r\n\r\n // 头部工具栏右侧图标\r\n layui.each(options.defaultToolbar, function(index, item) {\r\n if (item.layEvent === events) {\r\n typeof item.onClick === 'function' && item.onClick({\r\n data: data,\r\n config: options,\r\n openPanel: openPanel,\r\n elem: othis\r\n });\r\n return true;\r\n }\r\n });\r\n\r\n // table toolbar 事件\r\n layui.event.call(this, MOD_NAME, 'toolbar('+ filter +')', $.extend({\r\n event: events,\r\n config: options\r\n },{}));\r\n });\r\n\r\n // 表头自定义元素事件\r\n that.layHeader.on('click', '*[lay-event]', function(e){\r\n var othis = $(this);\r\n var events = othis.attr('lay-event');\r\n var th = othis.closest('th');\r\n var key = th.data('key');\r\n var col = that.col(key);\r\n\r\n layui.event.call(this, MOD_NAME, 'colTool('+ filter +')', $.extend({\r\n event: events,\r\n config: options,\r\n col: col\r\n },{}));\r\n });\r\n\r\n // 分页栏操作事件\r\n that.layPagebar.on('click', '*[lay-event]', function(e){\r\n var othis = $(this);\r\n var events = othis.attr('lay-event');\r\n\r\n layui.event.call(this, MOD_NAME, 'pagebar('+ filter +')', $.extend({\r\n event: events,\r\n config: options\r\n },{}));\r\n });\r\n\r\n // 拖拽调整宽度\r\n th.on('mousemove', function(e){\r\n var othis = $(this);\r\n var oLeft = othis.offset().left;\r\n var pLeft = e.clientX - oLeft;\r\n if(othis.data('unresize') || thisTable.eventMoveElem){\r\n return;\r\n }\r\n dict.allowResize = othis.width() - pLeft <= 10; //是否处于拖拽允许区域\r\n _BODY.css('cursor', (dict.allowResize ? 'col-resize' : ''));\r\n }).on('mouseleave', function(){\r\n var othis = $(this);\r\n if(thisTable.eventMoveElem) return;\r\n dict.allowResize = false;\r\n _BODY.css('cursor', '');\r\n }).on('mousedown', function(e){\r\n var othis = $(this);\r\n if(dict.allowResize){\r\n var key = othis.data('key');\r\n e.preventDefault();\r\n dict.offset = [e.clientX, e.clientY]; //记录初始坐标\r\n\r\n that.cssRules(key, function(item){\r\n var width = item.style.width || othis.outerWidth();\r\n dict.rule = item;\r\n dict.ruleWidth = parseFloat(width);\r\n dict.minWidth = othis.data('minwidth') || options.cellMinWidth;\r\n dict.maxWidth = othis.data('maxwidth') || options.cellMaxWidth;\r\n });\r\n\r\n // 临时记录当前拖拽信息\r\n othis.data(DATA_MOVE_NAME, dict);\r\n thisTable.eventMoveElem = othis;\r\n }\r\n });\r\n\r\n // 拖拽中\r\n if(!thisTable.docEvent){\r\n _DOC.on('mousemove', function(e){\r\n if(thisTable.eventMoveElem){\r\n var dict = thisTable.eventMoveElem.data(DATA_MOVE_NAME) || {};\r\n\r\n thisTable.eventMoveElem.data('resizing', 1);\r\n e.preventDefault();\r\n\r\n if(dict.rule){\r\n var setWidth = dict.ruleWidth + e.clientX - dict.offset[0];\r\n var id = thisTable.eventMoveElem.closest('.' + ELEM_VIEW).attr(MOD_ID);\r\n var thatTable = getThisTable(id);\r\n\r\n if(!thatTable) return;\r\n\r\n if(setWidth < dict.minWidth) setWidth = dict.minWidth;\r\n if(setWidth > dict.maxWidth) setWidth = dict.maxWidth;\r\n\r\n dict.rule.style.width = setWidth + 'px';\r\n thatTable.setGroupWidth(thisTable.eventMoveElem);\r\n layer.close(that.tipsIndex);\r\n }\r\n }\r\n }).on('mouseup', function(e){\r\n if(thisTable.eventMoveElem){\r\n var th = thisTable.eventMoveElem; // 当前触发拖拽的 th 元素\r\n var id = th.closest('.' + ELEM_VIEW).attr(MOD_ID);\r\n var thatTable = getThisTable(id);\r\n\r\n if(!thatTable) return;\r\n\r\n var key = th.data('key');\r\n var col = thatTable.col(key);\r\n var filter = thatTable.config.elem.attr('lay-filter');\r\n\r\n // 重置过度信息\r\n dict = {};\r\n _BODY.css('cursor', '');\r\n thatTable.scrollPatch();\r\n\r\n // 清除当前拖拽信息\r\n th.removeData(DATA_MOVE_NAME);\r\n delete thisTable.eventMoveElem;\r\n\r\n // 列拖拽宽度后的事件\r\n thatTable.cssRules(key, function(item){\r\n col.width = parseFloat(item.style.width);\r\n layui.event.call(th[0], MOD_NAME, 'colResized('+ filter +')', {\r\n col: col,\r\n config: thatTable.config\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n // 已给 document 执行全局事件,避免重复绑定\r\n thisTable.docEvent = true;\r\n\r\n\r\n // 排序\r\n th.on('click', function(e){\r\n var othis = $(this);\r\n var elemSort = othis.find(ELEM_SORT);\r\n var nowType = elemSort.attr('lay-sort');\r\n var type;\r\n\r\n // 排序不触发的条件\r\n if(!elemSort[0] || othis.data('resizing') === 1){\r\n return othis.removeData('resizing');\r\n }\r\n\r\n if(nowType === 'asc'){\r\n type = 'desc';\r\n } else if(nowType === 'desc'){\r\n type = null;\r\n } else {\r\n type = 'asc';\r\n }\r\n that.sort({\r\n field: othis,\r\n type: type,\r\n fromEvent: true\r\n });\r\n }).find(ELEM_SORT+' .layui-edge ').on('click', function(e){\r\n var othis = $(this);\r\n var index = othis.index();\r\n var field = othis.parents('th').eq(0).data('field');\r\n layui.stope(e);\r\n if(index === 0){\r\n that.sort({\r\n field: field,\r\n type: 'asc',\r\n fromEvent: true\r\n });\r\n } else {\r\n that.sort({\r\n field: field,\r\n type: 'desc',\r\n fromEvent: true\r\n });\r\n }\r\n });\r\n\r\n //数据行中的事件返回的公共对象成员\r\n var commonMember = that.commonMember = function(sets){\r\n var othis = $(this);\r\n var index = othis.parents('tr').eq(0).data('index');\r\n var tr = that.layBody.find('tr[data-index=\"'+ index +'\"]');\r\n var data = table.cache[that.key] || [];\r\n\r\n data = data[index] || {};\r\n\r\n // 事件返回的公共成员\r\n var obj = {\r\n tr: tr, // 行元素\r\n config: options,\r\n data: table.clearCacheKey(data), // 当前行数据\r\n dataCache: data, // 当前行缓存中的数据\r\n index: index,\r\n del: function(){ // 删除行数据\r\n table.cache[that.key][index] = [];\r\n tr.remove();\r\n that.scrollPatch();\r\n },\r\n update: function(fields, related){ // 修改行数据\r\n fields = fields || {};\r\n that.updateRow({\r\n index: index,\r\n data: fields,\r\n related: related\r\n }, function(key, value){\r\n obj.data[key] = value;\r\n });\r\n },\r\n // 设置行选中状态\r\n setRowChecked: function(opts){\r\n that.setRowChecked($.extend({\r\n index: index\r\n }, opts));\r\n }\r\n // 获取当前列\r\n };\r\n\r\n return $.extend(obj, sets);\r\n };\r\n\r\n // 复选框选择(替代元素的 click 事件)\r\n that.elem.on('click', 'input[name=\"layTableCheckbox\"]+', function(e){\r\n var othis = $(this);\r\n var td = othis.closest('td');\r\n var checkbox = othis.prev();\r\n var children = that.layBody.find('input[name=\"layTableCheckbox\"]');\r\n var index = checkbox.parents('tr').eq(0).data('index');\r\n var checked = checkbox[0].checked;\r\n var isAll = checkbox.attr('lay-filter') === 'layTableAllChoose';\r\n\r\n if(checkbox[0].disabled) return;\r\n\r\n // 全选\r\n if(isAll){\r\n that.setRowChecked({\r\n index: 'all',\r\n checked: checked\r\n });\r\n } else {\r\n that.setRowChecked({\r\n index: index,\r\n checked: checked\r\n });\r\n }\r\n\r\n layui.stope(e);\r\n\r\n // 事件\r\n layui.event.call(\r\n checkbox[0],\r\n MOD_NAME, 'checkbox('+ filter +')',\r\n commonMember.call(checkbox[0], {\r\n checked: checked,\r\n type: isAll ? 'all' : 'one',\r\n getCol: function(){ // 获取当前列的表头配置信息\r\n return that.col(td.data('key'));\r\n }\r\n })\r\n );\r\n });\r\n\r\n // 单选框选择\r\n that.elem.on('click', 'input[lay-type=\"layTableRadio\"]+', function(e){\r\n var othis = $(this);\r\n var td = othis.closest('td');\r\n var radio = othis.prev();\r\n var checked = radio[0].checked;\r\n var index = radio.parents('tr').eq(0).data('index');\r\n\r\n layui.stope(e);\r\n if(radio[0].disabled) return false;\r\n\r\n // 标注选中样式\r\n that.setRowChecked({\r\n type: 'radio',\r\n index: index\r\n });\r\n\r\n // 事件\r\n layui.event.call(\r\n radio[0],\r\n MOD_NAME, 'radio('+ filter +')',\r\n commonMember.call(radio[0], {\r\n checked: checked,\r\n getCol: function(){ // 获取当前列的表头配置信息\r\n return that.col(td.data('key'));\r\n }\r\n })\r\n );\r\n });\r\n\r\n // 行事件\r\n that.layBody.on('mouseenter', 'tr', function(){ // 鼠标移入行\r\n var othis = $(this);\r\n var index = othis.index();\r\n if(othis.data('off')) return; // 不触发事件\r\n that.layBody.find('tr:eq('+ index +')').addClass(ELEM_HOVER)\r\n }).on('mouseleave', 'tr', function(){ // 鼠标移出行\r\n var othis = $(this);\r\n var index = othis.index();\r\n if(othis.data('off')) return; // 不触发事件\r\n that.layBody.find('tr:eq('+ index +')').removeClass(ELEM_HOVER)\r\n }).on('click', 'tr', function(e){ // 单击行\r\n setRowEvent.call(this, 'row', e);\r\n }).on('dblclick', 'tr', function(e){ // 双击行\r\n setRowEvent.call(this, 'rowDouble', e);\r\n }).on('contextmenu', 'tr', function(e){ // 菜单\r\n if (!options.defaultContextmenu) e.preventDefault();\r\n setRowEvent.call(this, 'rowContextmenu', e);\r\n });\r\n\r\n // 创建行单击、双击、菜单事件\r\n var setRowEvent = function(eventType, e){\r\n var othis = $(this);\r\n if(othis.data('off')) return; // 不触发事件\r\n\r\n // 不触发「行单/双击事件」的子元素\r\n if (eventType !== 'rowContextmenu') {\r\n var UNROW = [\r\n '.layui-form-checkbox',\r\n '.layui-form-switch',\r\n '.layui-form-radio',\r\n '[lay-unrow]'\r\n ].join(',');\r\n\r\n if($(e.target).is(UNROW) || $(e.target).closest(UNROW)[0]){\r\n return;\r\n }\r\n }\r\n\r\n layui.event.call(\r\n this,\r\n MOD_NAME, eventType + '('+ filter +')',\r\n commonMember.call(othis.children('td')[0], {\r\n e: e\r\n })\r\n );\r\n };\r\n\r\n // 渲染单元格编辑状态\r\n var renderGridEdit = function(othis, e){\r\n othis = $(othis);\r\n\r\n if(othis.data('off')) return; // 不触发事件\r\n\r\n var field = othis.data('field');\r\n var key = othis.data('key');\r\n var col = that.col(key);\r\n var index = othis.closest('tr').data('index');\r\n var data = table.cache[that.key][index];\r\n var elemCell = othis.children(ELEM_CELL);\r\n\r\n // 是否开启编辑\r\n // 若 edit 传入函数,则根据函数的返回结果判断是否开启编辑\r\n var editType = typeof col.edit === 'function'\r\n ? col.edit(data)\r\n : col.edit;\r\n\r\n // 显示编辑表单\r\n if(editType){\r\n var input = $(function(){\r\n var inputElem = '';\r\n if(editType === 'textarea') {\r\n inputElem = '';\r\n }\r\n return inputElem;\r\n }());\r\n input[0].value = function(val) {\r\n return (val === undefined || val === null) ? '' : val;\r\n }(othis.data('content') || data[field]);\r\n othis.find('.'+ELEM_EDIT)[0] || othis.append(input);\r\n input.focus();\r\n e && layui.stope(e);\r\n }\r\n };\r\n\r\n // 单元格编辑 - 输入框内容被改变的事件\r\n that.layBody.on('change', '.'+ ELEM_EDIT, function(){\r\n var othis = $(this);\r\n var td = othis.parent();\r\n var value = this.value;\r\n var field = othis.parent().data('field');\r\n var index = othis.closest('tr').data('index');\r\n var data = table.cache[that.key][index];\r\n\r\n //事件回调的参数对象\r\n var params = commonMember.call(td[0], {\r\n value: value,\r\n field: field,\r\n oldValue: data[field], // 编辑前的值\r\n td: td,\r\n reedit: function(){ // 重新编辑\r\n setTimeout(function(){\r\n // 重新渲染为编辑状态\r\n renderGridEdit(params.td);\r\n\r\n // 将字段缓存的值恢复到编辑之前的值\r\n var obj = {};\r\n obj[field] = params.oldValue;\r\n params.update(obj);\r\n });\r\n },\r\n getCol: function(){ // 获取当前列的表头配置信息\r\n return that.col(td.data('key'));\r\n }\r\n });\r\n\r\n // 更新缓存中的值\r\n var obj = {}; //变更的键值\r\n obj[field] = value;\r\n params.update(obj);\r\n\r\n // 执行 API 编辑事件\r\n layui.event.call(td[0], MOD_NAME, 'edit('+ filter +')', params);\r\n }).on('blur', '.'+ ELEM_EDIT, function(){ // 单元格编辑 - 恢复非编辑状态事件\r\n $(this).remove(); // 移除编辑状态\r\n });\r\n\r\n // 表格主体单元格触发编辑的事件\r\n that.layBody.on(options.editTrigger, 'td', function(e){\r\n renderGridEdit(this, e);\r\n }).on('mouseenter', 'td', function(){\r\n showGridExpandIcon.call(this)\r\n }).on('mouseleave', 'td', function(){\r\n showGridExpandIcon.call(this, 'hide');\r\n });\r\n\r\n // 表格合计栏单元格 hover 显示展开图标\r\n that.layTotal.on('mouseenter', 'td', function(){\r\n showGridExpandIcon.call(this)\r\n }).on('mouseleave', 'td', function(){\r\n showGridExpandIcon.call(this, 'hide');\r\n });\r\n\r\n // 显示单元格展开图标\r\n var ELEM_GRID = 'layui-table-grid';\r\n var ELEM_GRID_DOWN = 'layui-table-grid-down';\r\n var ELEM_GRID_PANEL = 'layui-table-grid-panel';\r\n var showGridExpandIcon = function(hide){\r\n var othis = $(this);\r\n var elemCell = othis.children(ELEM_CELL);\r\n\r\n if(othis.data('off')) return; // 不触发事件\r\n if(othis.parent().hasClass(ELEM_EXPAND)) return; // 是否已为展开状态\r\n\r\n if(hide){\r\n othis.find('.layui-table-grid-down').remove();\r\n } else if((\r\n elemCell.prop('scrollWidth') > elemCell.prop('clientWidth') ||\r\n elemCell.find(\"br\").length > 0\r\n ) && !options.lineStyle){\r\n if(elemCell.find('.'+ ELEM_GRID_DOWN)[0]) return;\r\n othis.append('
              ');\r\n }\r\n };\r\n // 展开单元格内容\r\n var gridExpand = function(e, expandedMode){\r\n var othis = $(this);\r\n var td = othis.parent();\r\n var key = td.data('key');\r\n var col = that.col(key);\r\n var index = td.parent().data('index');\r\n var elemCell = td.children(ELEM_CELL);\r\n var ELEM_CELL_C = 'layui-table-cell-c';\r\n var elemCellClose = $('');\r\n\r\n expandedMode = expandedMode || col.expandedMode || options.cellExpandedMode;\r\n\r\n // 展开风格\r\n if (expandedMode === 'tips') { // TIPS 展开风格\r\n that.tipsIndex = layer.tips([\r\n '
              ',\r\n elemCell.html(),\r\n '
              ',\r\n ''\r\n ].join(''), elemCell[0], {\r\n tips: [3, ''],\r\n time: -1,\r\n anim: -1,\r\n maxWidth: (device.ios || device.android) ? 300 : that.elem.width()/2,\r\n isOutAnim: false,\r\n skin: 'layui-table-tips',\r\n success: function(layero, index){\r\n layero.find('.layui-table-tips-c').on('click', function(){\r\n layer.close(index);\r\n });\r\n }\r\n });\r\n } else { // 多行展开风格\r\n // 恢复其他已经展开的单元格\r\n that.elem.find('.'+ ELEM_CELL_C).trigger('click');\r\n\r\n // 设置当前单元格展开宽度\r\n that.cssRules(key, function(item){\r\n var width = item.style.width;\r\n var expandedWidth = col.expandedWidth || options.cellExpandedWidth;\r\n\r\n // 展开后的宽度不能小于当前宽度\r\n if(expandedWidth < parseFloat(width)) expandedWidth = parseFloat(width);\r\n\r\n elemCellClose.data('cell-width', width);\r\n item.style.width = expandedWidth + 'px';\r\n\r\n setTimeout(function(){\r\n that.scrollPatch(); // 滚动条补丁\r\n });\r\n });\r\n\r\n // 设置当前单元格展开样式\r\n that.setRowActive(index, ELEM_EXPAND);\r\n\r\n // 插入关闭按钮\r\n if(!elemCell.next('.'+ ELEM_CELL_C)[0]){\r\n elemCell.after(elemCellClose);\r\n }\r\n\r\n // 关闭展开状态\r\n elemCellClose.on('click', function(){\r\n var $this = $(this);\r\n that.setRowActive(index, [ELEM_EXPAND, ELEM_HOVER].join(' '), true); // 移除单元格展开样式\r\n that.cssRules(key, function(item){\r\n item.style.width = $this.data('cell-width'); // 恢复单元格展开前的宽度\r\n setTimeout(function(){\r\n that.resize(); // 滚动条补丁\r\n });\r\n });\r\n $this.remove();\r\n // 重置单元格滚动条位置\r\n elemCell.scrollTop(0);\r\n elemCell.scrollLeft(0); \r\n });\r\n }\r\n\r\n othis.remove();\r\n layui.stope(e);\r\n };\r\n\r\n // 表格主体单元格展开事件\r\n that.layBody.on('click', '.'+ ELEM_GRID_DOWN, function(e){\r\n gridExpand.call(this, e);\r\n });\r\n // 表格合计栏单元格展开事件\r\n that.layTotal.on('click', '.'+ ELEM_GRID_DOWN, function(e){\r\n gridExpand.call(this, e, 'tips'); // 强制采用 tips 风格\r\n });\r\n\r\n // 行工具条操作事件\r\n var toolFn = function(type){\r\n var othis = $(this);\r\n var td = othis.closest('td');\r\n var index = othis.parents('tr').eq(0).data('index');\r\n // 标记当前活动行\r\n that.setRowActive(index);\r\n\r\n // 执行事件\r\n layui.event.call(\r\n this,\r\n MOD_NAME,\r\n (type || 'tool') + '('+ filter +')',\r\n commonMember.call(this, {\r\n event: othis.attr('lay-event'),\r\n getCol: function(){ // 获取当前列的表头配置信息\r\n return that.col(td.data('key'));\r\n }\r\n })\r\n );\r\n };\r\n\r\n // 行工具条单击事件\r\n that.layBody.on('click', '*[lay-event]', function(e){\r\n toolFn.call(this);\r\n layui.stope(e);\r\n }).on('dblclick', '*[lay-event]', function(e){ //行工具条双击事件\r\n toolFn.call(this, 'toolDouble');\r\n layui.stope(e);\r\n });\r\n\r\n // 同步滚动条\r\n that.layMain.on('scroll', function(){\r\n var othis = $(this);\r\n var scrollLeft = othis.scrollLeft();\r\n var scrollTop = othis.scrollTop();\r\n\r\n that.layHeader.scrollLeft(scrollLeft);\r\n that.layTotal.scrollLeft(scrollLeft);\r\n that.layFixed.find(ELEM_BODY).scrollTop(scrollTop);\r\n\r\n layer.close(that.tipsIndex);\r\n });\r\n\r\n // 固定列滚轮事件 - 临时兼容方案\r\n that.layFixed.find(ELEM_BODY).on('mousewheel DOMMouseScroll', function(e) {\r\n var delta = e.originalEvent.wheelDelta || -e.originalEvent.detail;\r\n var scrollTop = that.layMain.scrollTop();\r\n var step = 30;\r\n\r\n e.preventDefault();\r\n that.layMain.scrollTop(scrollTop + (delta > 0 ? -step : step));\r\n });\r\n\r\n }\r\n\r\n /**\r\n * 获取元素的大小\r\n * @param {HTMLElement} elem - HTML 元素\r\n */\r\n Class.prototype.getElementSize = function(elem){\r\n if(!window.getComputedStyle) return;\r\n\r\n var style = window.getComputedStyle(elem, null);\r\n return {\r\n height: parseFloat(style.height || '0'),\r\n width: parseFloat(style.width || '0'),\r\n borderTopWidth: parseFloat(style.borderTopWidth || '0'),\r\n borderRightWidth: parseFloat(style.borderRightWidth || '0'),\r\n borderBottomWidth: parseFloat(style.borderBottomWidth || '0'),\r\n borderLeftWidth: parseFloat(style.borderLeftWidth || '0'),\r\n paddingTop: parseFloat(style.paddingTop || '0'),\r\n paddingRight: parseFloat(style.paddingRight || '0'),\r\n paddingBottom: parseFloat(style.paddingBottom || '0'),\r\n paddingLeft: parseFloat(style.paddingLeft || '0'),\r\n marginTop: parseFloat(style.marginTop || '0'),\r\n marginRight: parseFloat(style.marginRight || '0'),\r\n marginBottom: parseFloat(style.marginBottom || '0'),\r\n marginLeft: parseFloat(style.marginLeft || '0'),\r\n boxSizing: style.boxSizing\r\n }\r\n };\r\n\r\n // 全局事件\r\n (function(){\r\n // 自适应尺寸\r\n _WIN.on('resize', function(){\r\n layui.each(thisTable.that, function(){\r\n this.resize();\r\n });\r\n });\r\n\r\n // 全局点击\r\n _DOC.on('click', function(){\r\n _DOC.trigger('table.remove.tool.panel');\r\n });\r\n\r\n // 工具面板移除事件\r\n _DOC.on('table.remove.tool.panel', function(){\r\n $('.' + ELEM_TOOL_PANEL).remove();\r\n });\r\n })();\r\n\r\n // 初始化\r\n table.init = function(filter, settings){\r\n settings = settings || {};\r\n var that = this;\r\n var inst = null;\r\n var elemTable = typeof filter === 'object' ? filter : (\r\n typeof filter === 'string'\r\n ? $('table[lay-filter=\"'+ filter +'\"]')\r\n : $(ELEM + '[lay-data], '+ ELEM + '[lay-options]')\r\n );\r\n var errorTips = 'Table element property lay-data configuration item has a syntax error: ';\r\n\r\n //遍历数据表格\r\n elemTable.each(function(){\r\n var othis = $(this);\r\n var attrData = othis.attr('lay-data');\r\n var tableData = lay.options(this, {\r\n attr: attrData ? 'lay-data' : null,\r\n errorText: errorTips + (attrData || othis.attr('lay-options'))\r\n });\r\n\r\n var options = $.extend({\r\n elem: this\r\n ,cols: []\r\n ,data: []\r\n ,skin: othis.attr('lay-skin') //风格\r\n ,size: othis.attr('lay-size') //尺寸\r\n ,even: typeof othis.attr('lay-even') === 'string' //偶数行背景\r\n }, table.config, settings, tableData);\r\n\r\n filter && othis.hide();\r\n\r\n //获取表头数据\r\n othis.find('thead>tr').each(function(i){\r\n options.cols[i] = [];\r\n $(this).children().each(function(ii){\r\n var th = $(this);\r\n var attrData = th.attr('lay-data');\r\n var itemData = lay.options(this, {\r\n attr: attrData ? 'lay-data' : null,\r\n errorText: errorTips + (attrData || th.attr('lay-options'))\r\n });\r\n\r\n var row = $.extend({\r\n title: th.text()\r\n ,colspan: parseInt(th.attr('colspan')) || 1 //列单元格\r\n ,rowspan: parseInt(th.attr('rowspan')) || 1 //行单元格\r\n }, itemData);\r\n\r\n options.cols[i].push(row);\r\n });\r\n });\r\n\r\n //缓存静态表体数据\r\n var trElem = othis.find('tbody>tr');\r\n\r\n //执行渲染\r\n var tableIns = table.render(options);\r\n\r\n //获取表体数据\r\n if (trElem.length && !settings.data && !tableIns.config.url) {\r\n var tdIndex = 0;\r\n table.eachCols(tableIns.config.id, function (i3, item3) {\r\n trElem.each(function(i1){\r\n options.data[i1] = options.data[i1] || {};\r\n var tr = $(this);\r\n var field = item3.field;\r\n options.data[i1][field] = tr.children('td').eq(tdIndex).html();\r\n });\r\n tdIndex++;\r\n })\r\n\r\n tableIns.reloadData({\r\n data: options.data\r\n });\r\n }\r\n });\r\n\r\n return that;\r\n };\r\n\r\n //记录所有实例\r\n thisTable.that = {}; //记录所有实例对象\r\n thisTable.config = {}; //记录所有实例配置项\r\n\r\n var eachChildCols = function (index, cols, i1, item2) {\r\n //如果是组合列,则捕获对应的子列\r\n if (item2.colGroup) {\r\n var childIndex = 0;\r\n index++;\r\n item2.CHILD_COLS = [];\r\n // 找到它的子列所在cols的下标\r\n var i2 = i1 + (parseInt(item2.rowspan) || 1);\r\n layui.each(cols[i2], function (i22, item22) {\r\n if (item22.parentKey) { // 如果字段信息中包含了parentKey和key信息\r\n if (item22.parentKey === item2.key) {\r\n item22.PARENT_COL_INDEX = index;\r\n item2.CHILD_COLS.push(item22);\r\n eachChildCols(index, cols, i2, item22);\r\n }\r\n } else {\r\n // 没有key信息以colspan数量所谓判断标准\r\n //如果子列已经被标注为{PARENT_COL_INDEX},或者子列累计 colspan 数等于父列定义的 colspan,则跳出当前子列循环\r\n if (item22.PARENT_COL_INDEX || (childIndex >= 1 && childIndex == (item2.colspan || 1))) return;\r\n item22.PARENT_COL_INDEX = index;\r\n item2.CHILD_COLS.push(item22);\r\n childIndex = childIndex + (parseInt(item22.colspan > 1 ? item22.colspan : 1));\r\n eachChildCols(index, cols, i2, item22);\r\n }\r\n });\r\n }\r\n };\r\n\r\n // 遍历表头\r\n table.eachCols = function(id, callback, cols){\r\n var config = thisTable.config[id] || {};\r\n var arrs = [], index = 0;\r\n\r\n cols = $.extend(true, [], cols || config.cols);\r\n\r\n //重新整理表头结构\r\n layui.each(cols, function(i1, item1){\r\n if (i1) return true; // 只需遍历第一层\r\n layui.each(item1, function(i2, item2){\r\n eachChildCols(index, cols, i1, item2);\r\n if(item2.PARENT_COL_INDEX) return; //如果是子列,则不进行追加,因为已经存储在父列中\r\n arrs.push(item2)\r\n });\r\n });\r\n\r\n //重新遍历列,如果有子列,则进入递归\r\n var eachArrs = function(obj){\r\n layui.each(obj || arrs, function(i, item){\r\n if(item.CHILD_COLS) return eachArrs(item.CHILD_COLS);\r\n typeof callback === 'function' && callback(i, item);\r\n });\r\n };\r\n\r\n eachArrs();\r\n };\r\n\r\n // 获取表格选中状态\r\n table.checkStatus = function(id){\r\n var invalidNum = 0;\r\n var arr = [];\r\n var dataCache = [];\r\n var data = table.cache[id] || [];\r\n\r\n // 过滤禁用或已删除的数据\r\n layui.each(data, function(i, item){\r\n if(layui.type(item) === 'array' || item[table.config.disabledName]){\r\n invalidNum++; // 无效数据数量\r\n return;\r\n }\r\n if(item[table.config.checkName]){\r\n arr.push(table.clearCacheKey(item));\r\n dataCache.push(item);\r\n }\r\n });\r\n\r\n return {\r\n data: arr, // 选中的数据\r\n dataCache: dataCache, // 选中的原始缓存数据,包含内部特定字段\r\n isAll: (data.length && arr.length) ? (arr.length === (data.length - invalidNum)) : false // 是否全选\r\n };\r\n };\r\n\r\n // 设置行选中状态\r\n table.setRowChecked = function(id, opts){\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n that.setRowChecked(opts);\r\n };\r\n\r\n // 获取表格当前页的所有行数据\r\n table.getData = function(id){\r\n var arr = [];\r\n var data = table.cache[id] || [];\r\n layui.each(data, function(i, item){\r\n if(layui.type(item) === 'array'){\r\n return;\r\n }\r\n arr.push(table.clearCacheKey(item));\r\n });\r\n return arr;\r\n };\r\n\r\n // 重置表格尺寸结构\r\n table.resize = function(id){\r\n // 若指定表格唯一 id,则只执行该 id 对应的表格实例\r\n if(id){\r\n var config = getThisTableConfig(id); // 获取当前实例配置项\r\n if(!config) return;\r\n\r\n getThisTable(id).resize();\r\n\r\n } else { // 否则重置所有表格实例尺寸\r\n layui.each(thisTable.that, function(){\r\n this.resize();\r\n });\r\n }\r\n };\r\n\r\n // 表格导出\r\n table.exportFile = function(id, data, opts){\r\n data = data || table.clearCacheKey(table.cache[id]);\r\n opts = typeof opts === 'object' ? opts : function(){\r\n var obj = {};\r\n opts && (obj.type = opts);\r\n return obj;\r\n }();\r\n\r\n var type = opts.type || 'csv';\r\n var thatTable = thisTable.that[id];\r\n var config = thisTable.config[id] || {};\r\n var textType = ({\r\n csv: 'text/csv',\r\n xls: 'application/vnd.ms-excel'\r\n })[type];\r\n var alink = document.createElement(\"a\");\r\n\r\n if(device.ie) return hint.error('IE_NOT_SUPPORT_EXPORTS');\r\n\r\n // 处理 treeTable 数据\r\n var isTreeTable = config.tree && config.tree.view;\r\n if (isTreeTable) {\r\n try {\r\n data = $.extend(true, [], table.cache[id]);\r\n data = (function fn(data) {\r\n return data.reduce(function (acc, obj){\r\n var children = obj.children || [];\r\n delete obj.children;\r\n return acc.concat(obj, fn(children));\r\n }, []);\r\n })(Array.from(data));\r\n } catch (e) {}\r\n }\r\n\r\n alink.href = 'data:'+ textType +';charset=utf-8,\\ufeff'+ encodeURIComponent(function(){\r\n var dataTitle = [];\r\n var dataMain = [];\r\n var dataTotal = [];\r\n var fieldsIsHide = {};\r\n\r\n // 表头和表体\r\n layui.each(data, function(i1, item1){\r\n var vals = [];\r\n if(typeof id === 'object'){ // 若 id 参数直接为表头数据\r\n layui.each(id, function(i, item){\r\n i1 == 0 && dataTitle.push(item || '');\r\n });\r\n layui.each(layui.isArray(item1) ? $.extend([], item1) : table.clearCacheKey(item1), function(i2, item2){\r\n vals.push('\"'+ (item2 || '') +'\"');\r\n });\r\n } else {\r\n table.eachCols(id, function(i3, item3){\r\n if(item3.ignoreExport === false || item3.field && item3.type == 'normal'){\r\n // 不导出隐藏列,除非设置 ignoreExport 强制导出\r\n if (\r\n (item3.hide && item3.ignoreExport !== false) ||\r\n item3.ignoreExport === true // 忽略导出\r\n ) {\r\n if(i1 == 0) fieldsIsHide[item3.field] = true; // 记录隐藏列\r\n return;\r\n }\r\n\r\n var content = item1[item3.field];\r\n if(content === undefined || content === null) content = '';\r\n\r\n i1 == 0 && dataTitle.push(item3.fieldTitle || item3.title || item3.field || '');\r\n\r\n // 解析内容\r\n content = parseTempData.call(thatTable, {\r\n item3: item3,\r\n content: content,\r\n tplData: item1,\r\n text: 'text',\r\n obj: {\r\n td: function(field){\r\n if (isTreeTable) i1 = item1['LAY_DATA_INDEX']; // 兼容 treeTable 索引\r\n var td = thatTable.layBody.find('tr[data-index=\"'+ i1 +'\"]>td');\r\n return td.filter('[data-field=\"'+ field +'\"]');\r\n }\r\n }\r\n });\r\n\r\n // 异常处理\r\n content = content.replace(/\"/g, '\"\"'); // 避免内容存在「双引号」导致异常分隔\r\n // content += '\\t'; // 加「水平制表符」 避免内容被转换格式\r\n content = '\"'+ content +'\"'; // 避免内容存在「逗号」导致异常分隔\r\n\r\n // 插入内容\r\n vals.push(content);\r\n }else if(item3.field && item3.type !== 'normal'){\r\n // https://gitee.com/layui/layui/issues/I8PHCR\r\n if(i1 == 0) fieldsIsHide[item3.field] = true;\r\n }\r\n });\r\n }\r\n dataMain.push(vals.join(','));\r\n });\r\n\r\n // 表合计\r\n thatTable && layui.each(thatTable.dataTotal, function(i, o){\r\n fieldsIsHide[o.field] || dataTotal.push('\"' + (o.total || '') + '\"');\r\n });\r\n\r\n return dataTitle.join(',') + '\\r\\n' + dataMain.join('\\r\\n') + '\\r\\n' + dataTotal.join(',');\r\n }());\r\n\r\n alink.download = (opts.title || config.title || 'table_'+ (config.index || '')) + '.' + type;\r\n document.body.appendChild(alink);\r\n alink.click();\r\n document.body.removeChild(alink);\r\n };\r\n\r\n // 获取表格配置信息\r\n table.getOptions = function (id) {\r\n return getThisTableConfig(id);\r\n }\r\n\r\n // 显示或隐藏列\r\n table.hideCol = function (id, cols) {\r\n var that = getThisTable(id);\r\n if (!that) {\r\n return;\r\n }\r\n\r\n if (layui.type(cols) === 'boolean') {\r\n // 显示全部或者隐藏全部\r\n that.eachCols(function (i2, item2) {\r\n var key = item2.key;\r\n var col = that.col(key);\r\n var parentKey = item2.parentKey;\r\n // 同步勾选列的 hide 值和隐藏样式\r\n if (col.hide != cols) {\r\n var hide = col.hide = cols;\r\n that.elem.find('*[data-key=\"'+ key +'\"]')[\r\n hide ? 'addClass' : 'removeClass'\r\n ](HIDE);\r\n // 根据列的显示隐藏,同步多级表头的父级相关属性值\r\n that.setParentCol(hide, parentKey);\r\n }\r\n })\r\n } else {\r\n cols = layui.isArray(cols) ? cols : [cols];\r\n layui.each(cols, function (i1, item1) {\r\n that.eachCols(function (i2, item2) {\r\n if (item1.field === item2.field) {\r\n var key = item2.key;\r\n var col = that.col(key);\r\n var parentKey = item2.parentKey;\r\n // 同步勾选列的 hide 值和隐藏样式\r\n if ('hide' in item1 && col.hide != item1.hide) {\r\n var hide = col.hide = !!item1.hide;\r\n that.elem.find('*[data-key=\"'+ key +'\"]')[\r\n hide ? 'addClass' : 'removeClass'\r\n ](HIDE);\r\n // 根据列的显示隐藏,同步多级表头的父级相关属性值\r\n that.setParentCol(hide, parentKey);\r\n }\r\n }\r\n })\r\n });\r\n }\r\n $('.' + ELEM_TOOL_PANEL).remove(); // 关闭字段筛选面板如果打开的话\r\n // 重新适配尺寸\r\n that.resize();\r\n }\r\n\r\n // 重载\r\n table.reload = function(id, options, deep, type){\r\n var config = getThisTableConfig(id); //获取当前实例配置项\r\n if(!config) return;\r\n\r\n var that = getThisTable(id);\r\n that.reload(options, deep, type);\r\n\r\n return thisTable.call(that);\r\n };\r\n\r\n // 仅重载数据\r\n table.reloadData = function(){\r\n var args = $.extend([], arguments);\r\n args[3] = 'reloadData';\r\n\r\n // 重载时,影响整个结构的参数,不适合更新的参数\r\n var dataParams = new RegExp('^('+ [\r\n 'elem', 'id', 'cols', 'width', 'height', 'maxHeight',\r\n 'toolbar', 'defaultToolbar',\r\n 'className', 'css', 'pagebar'\r\n ].join('|') + ')$');\r\n\r\n // 过滤与数据无关的参数\r\n layui.each(args[1], function (key, value) {\r\n if(dataParams.test(key)){\r\n delete args[1][key];\r\n }\r\n });\r\n\r\n return table.reload.apply(null, args);\r\n };\r\n\r\n // 核心入口\r\n table.render = function(options){\r\n var inst = new Class(options);\r\n return thisTable.call(inst);\r\n };\r\n\r\n // 清除临时 Key\r\n table.clearCacheKey = function(data){\r\n data = $.extend({}, data);\r\n delete data[table.config.checkName];\r\n delete data[table.config.indexName];\r\n delete data[table.config.numbersName];\r\n delete data[table.config.disabledName];\r\n return data;\r\n };\r\n\r\n // 自动完成渲染\r\n $(function(){\r\n table.init();\r\n });\r\n\r\n exports(MOD_NAME, table);\r\n});\r\n","/**\r\n * layui.treeTable\r\n * 树表组件\r\n */\r\n\r\nlayui.define(['table'], function (exports) {\r\n \"use strict\";\r\n\r\n var $ = layui.$;\r\n var form = layui.form;\r\n var table = layui.table;\r\n var hint = layui.hint();\r\n\r\n // api\r\n var treeTable = {\r\n config: {},\r\n // 事件\r\n on: table.on,\r\n // 遍历字段\r\n eachCols: table.eachCols,\r\n index: table.index,\r\n set: function (options) {\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n resize: table.resize,\r\n getOptions: table.getOptions,\r\n hideCol: table.hideCol,\r\n renderData: table.renderData\r\n };\r\n\r\n // 操作当前实例\r\n var thisTreeTable = function () {\r\n var that = this;\r\n var options = that.config\r\n var id = options.id || options.index;\r\n\r\n return {\r\n config: options,\r\n reload: function (options, deep) {\r\n that.reload.call(that, options, deep);\r\n },\r\n reloadData: function (options, deep) {\r\n treeTable.reloadData(id, options, deep);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 获取当前实例\r\n * @param {string} id 表格id\r\n * @returns {Class}\r\n */\r\n var getThisTable = function (id) {\r\n var that = thisTreeTable.that[id];\r\n if (!that) hint.error(id ? ('The treeTable instance with ID \\'' + id + '\\' not found') : 'ID argument required');\r\n return that || null;\r\n }\r\n\r\n // 字符\r\n var MOD_NAME = 'treeTable';\r\n var MOD_ID = 'lay-table-id';\r\n var HIDE = 'layui-hide';\r\n\r\n var ELEM_VIEW = '.layui-table-view';\r\n var ELEM_TREE = '.layui-table-tree';\r\n var ELEM_TOOL = '.layui-table-tool';\r\n var ELEM_BOX = '.layui-table-box';\r\n var ELEM_HEADER = '.layui-table-header';\r\n var ELEM_BODY = '.layui-table-body';\r\n var ELEM_MAIN = '.layui-table-main';\r\n var ELEM_FIXED = '.layui-table-fixed';\r\n var ELEM_FIXL = '.layui-table-fixed-l';\r\n var ELEM_FIXR = '.layui-table-fixed-r';\r\n var ELEM_CHECKED = 'layui-table-checked';\r\n\r\n var TABLE_TREE = 'layui-table-tree';\r\n var LAY_DATA_INDEX = 'LAY_DATA_INDEX';\r\n var LAY_DATA_INDEX_HISTORY = 'LAY_DATA_INDEX_HISTORY';\r\n var LAY_PARENT_INDEX = 'LAY_PARENT_INDEX';\r\n var LAY_CHECKBOX_HALF = 'LAY_CHECKBOX_HALF';\r\n var LAY_EXPAND = 'LAY_EXPAND';\r\n var LAY_HAS_EXPANDED = 'LAY_HAS_EXPANDED';\r\n var LAY_ASYNC_STATUS = 'LAY_ASYNC_STATUS';\r\n var LAY_CASCADE = ['all', 'parent', 'children', 'none'];\r\n var HTML_TAG_RE = /<[^>]+?>/;\r\n var ICON_PROPS = ['flexIconClose', 'flexIconOpen', 'iconClose', 'iconOpen', 'iconLeaf', 'icon']\r\n\r\n /**\r\n * 构造器\r\n * @class\r\n */\r\n var Class = function (options) {\r\n var that = this;\r\n that.index = ++treeTable.index;\r\n that.config = $.extend(true, {}, that.config, treeTable.config, options);\r\n // 处理一些属性\r\n that.init();\r\n that.render();\r\n };\r\n\r\n var updateCache = function (id, childrenKey, data) {\r\n var tableCache = table.cache[id];\r\n layui.each(data || tableCache, function (index, item) {\r\n var itemDataIndex = item[LAY_DATA_INDEX] || '';\r\n if (itemDataIndex.indexOf('-') !== -1) {\r\n tableCache[itemDataIndex] = item;\r\n }\r\n item[childrenKey] && updateCache(id, childrenKey, item[childrenKey]);\r\n })\r\n }\r\n\r\n var updateOptions = function (id, options, reload) {\r\n var that = getThisTable(id);\r\n reload === 'reloadData' || (that.status = { // 用于记录一些状态信息\r\n expand: {} // 折叠状态\r\n });\r\n var thatOptionsTemp = $.extend(true, {}, that.getOptions(), options);\r\n var treeOptions = thatOptionsTemp.tree;\r\n var childrenKey = treeOptions.customName.children;\r\n var idKey = treeOptions.customName.id;\r\n // 处理属性\r\n delete options.hasNumberCol;\r\n delete options.hasChecboxCol;\r\n delete options.hasRadioCol;\r\n table.eachCols(null, function (i1, item1) {\r\n if (item1.type === 'numbers') {\r\n options.hasNumberCol = true;\r\n } else if (item1.type === 'checkbox') {\r\n options.hasChecboxCol = true;\r\n } else if (item1.type === 'radio') {\r\n options.hasRadioCol = true;\r\n }\r\n }, thatOptionsTemp.cols)\r\n\r\n var parseData = options.parseData;\r\n var done = options.done;\r\n\r\n // treeTable重载数据时,会先加载显示顶层节点,然后根据重载数据前的子节点展开状态,展开相应的子节点,\r\n // 那么如果重载数据前有滚动条滚动在某个位子,重新加载时顶层节点如果比较少,只显示顶层节点时没有滚动条的情况下,\r\n // 自动展开子节点后,滚动条就会显示在顶部,无法保持在重载数据之前的位置。\r\n // 处理保持滚动条的问题,重载数据前记录滚动条的位置\r\n if(reload === 'reloadData' && thatOptionsTemp.scrollPos === 'fixed'){\r\n that.scrollTopCache = that.config.elem.next().find(ELEM_BODY).scrollTop();\r\n }\r\n\r\n if (thatOptionsTemp.url) {\r\n // 异步加载的时候需要处理parseData进行转换\r\n if (!reload || (reload && parseData && !parseData.mod)) {\r\n options.parseData = function () {\r\n var parseDataThat = this;\r\n var args = arguments;\r\n var retData = args[0];\r\n if (layui.type(parseData) === 'function') {\r\n retData = parseData.apply(parseDataThat, args) || args[0];\r\n }\r\n var dataName = parseDataThat.response.dataName;\r\n // 处理 isSimpleData\r\n if (treeOptions.data.isSimpleData && !treeOptions.async.enable) { // 异步加载和 isSimpleData 不应该一起使用\r\n retData[dataName] = that.flatToTree(retData[dataName]);\r\n }\r\n // 处理节点状态\r\n updateStatus(retData[dataName], function (item) {\r\n item[LAY_EXPAND] = LAY_EXPAND in item ? item[LAY_EXPAND] : (item[idKey] !== undefined && that.status.expand[item[idKey]])\r\n }, childrenKey);\r\n\r\n if (parseDataThat.autoSort && parseDataThat.initSort && parseDataThat.initSort.type) {\r\n layui.sort(retData[dataName], parseDataThat.initSort.field, parseDataThat.initSort.type === 'desc', true)\r\n }\r\n\r\n that.initData(retData[dataName]);\r\n\r\n return retData;\r\n }\r\n options.parseData.mod = true\r\n }\r\n } else {\r\n if(options.data !== undefined){\r\n options.data = options.data || [];\r\n // 处理 isSimpleData\r\n if (treeOptions.data.isSimpleData) {\r\n options.data = that.flatToTree(options.data);\r\n }\r\n that.initData(options.data);\r\n }\r\n }\r\n\r\n if (!reload || (reload && done && !done.mod)) {\r\n options.done = function () {\r\n var args = arguments;\r\n var doneThat = this;\r\n // undefined: 初始 render 或 reload,两者本质没有区别可以不做区分\r\n // 'reloadData': 重载数据\r\n // 'renderData': 重新渲染数据\r\n var renderType = args[3];\r\n var isRenderData = renderType === 'renderData';\r\n if (!isRenderData) {\r\n delete that.isExpandAll;\r\n }\r\n\r\n var tableView = this.elem.next();\r\n that.updateStatus(null, {\r\n LAY_HAS_EXPANDED: false // 去除已经打开过的状态\r\n });\r\n // 更新cache中的内容 将子节点也存到cache中\r\n updateCache(id, childrenKey);\r\n // 更新全选框的状态\r\n var layTableAllChooseElem = tableView.find('[name=\"layTableCheckbox\"][lay-filter=\"layTableAllChoose\"]');\r\n if (layTableAllChooseElem.length) {\r\n var checkStatus = treeTable.checkStatus(id);\r\n layTableAllChooseElem.prop({\r\n checked: checkStatus.isAll && checkStatus.data.length,\r\n indeterminate: !checkStatus.isAll && checkStatus.data.length\r\n })\r\n }\r\n if (!isRenderData && thatOptionsTemp.autoSort && thatOptionsTemp.initSort && thatOptionsTemp.initSort.type) {\r\n treeTable.sort(id);\r\n }\r\n\r\n that.renderTreeTable(tableView);\r\n\r\n // 恢复滚动条位置\r\n if(renderType === 'reloadData' && doneThat.scrollPos === 'fixed'){\r\n tableView.find(ELEM_BODY).scrollTop(that.scrollTopCache);\r\n }\r\n\r\n if (layui.type(done) === 'function') {\r\n return done.apply(doneThat, args);\r\n }\r\n }\r\n options.done.mod = true;\r\n }\r\n\r\n // 处理图标\r\n if(options && options.tree && options.tree.view){\r\n layui.each(ICON_PROPS, function(i, iconProp){\r\n if(options.tree.view[iconProp] !== undefined){\r\n options.tree.view[iconProp] = that.normalizedIcon(options.tree.view[iconProp]);\r\n }\r\n })\r\n }\r\n }\r\n\r\n Class.prototype.init = function () {\r\n var that = this;\r\n var options = that.config;\r\n var cascade = options.tree.data.cascade;\r\n if (LAY_CASCADE.indexOf(cascade) === -1) {\r\n options.tree.data.cascade = 'all'; // 超出范围的都重置为全联动\r\n }\r\n\r\n // 先初始一个空的表格以便拿到对应的表格实例信息\r\n var tableIns = table.render($.extend({}, options, {\r\n data: [],\r\n url: '',\r\n done: null\r\n }))\r\n var id = tableIns.config.id;\r\n thisTreeTable.that[id] = that; // 记录当前实例对象\r\n that.tableIns = tableIns;\r\n\r\n updateOptions(id, options);\r\n }\r\n\r\n // 初始默认配置\r\n Class.prototype.config = {\r\n tree: {\r\n customName: {\r\n children: \"children\", // 节点数据中保存子节点数据的属性名称\r\n isParent: \"isParent\", // 节点数据保存节点是否为父节点的属性名称\r\n name: \"name\", // 节点数据保存节点名称的属性名称\r\n id: \"id\", // 唯一标识的属性名称\r\n pid: \"parentId\", // 父节点唯一标识的属性名称\r\n icon: \"icon\" // 图标的属性名称\r\n },\r\n view: {\r\n indent: 14, // 层级缩进量\r\n flexIconClose: '', // 关闭时候的折叠图标\r\n flexIconOpen: '', // 打开时候的折叠图标\r\n showIcon: true, // 是否显示图标(节点类型图标)\r\n icon: '', // 节点图标,如果设置了这个属性或者数据中有这个字段信息,不管打开还是关闭都以这个图标的值为准\r\n iconClose: '', // 关闭时候的图标\r\n iconOpen: '', // 打开时候的图标\r\n iconLeaf: '', // 叶子节点的图标\r\n showFlexIconIfNotParent: false, // 当节点不是父节点的时候是否显示折叠图标\r\n dblClickExpand: true, // 双击节点时,是否自动展开父节点的标识\r\n expandAllDefault: false // 默认展开所有节点\r\n },\r\n data: {\r\n isSimpleData: false, // 是否简单数据模式\r\n rootPid: null, // 根节点的父 ID 值\r\n cascade: 'all' // 级联方式 默认全部级联:all 可选 级联父 parent 级联子 children\r\n },\r\n async: {\r\n enable: false, // 是否开启异步加载模式,只有开启的时候其他参数才起作用\r\n url: '', // 异步加载的接口,可以根据需要设置与顶层接口不同的接口,如果相同可以不设置该参数\r\n type: null, // 请求的接口类型,设置可缺省同上\r\n contentType: null, // 提交参数的数据类型,设置可缺省同上\r\n headers: null, // 设置可缺省同上\r\n where: null, // 设置可缺省同上\r\n autoParam: [] // 自动参数\r\n },\r\n callback: {\r\n beforeExpand: null, // 展开前的回调 return false 可以阻止展开的动作\r\n onExpand: null // 展开之后的回调\r\n }\r\n },\r\n };\r\n\r\n Class.prototype.normalizedIcon = function(iconStr){\r\n return iconStr\r\n ? HTML_TAG_RE.test(iconStr) ? iconStr : ''\r\n : ''\r\n }\r\n\r\n Class.prototype.getOptions = function () {\r\n var that = this;\r\n if (that.tableIns) {\r\n return table.getOptions(that.tableIns.config.id); // 获取表格的实时配置信息\r\n } else {\r\n return that.config;\r\n }\r\n };\r\n\r\n function flatToTree(flatArr, idKey, pIdKey, childrenKey, rootPid) {\r\n idKey = idKey || 'id';\r\n pIdKey = pIdKey || 'parentId';\r\n childrenKey = childrenKey || 'children';\r\n // 创建一个空的 map 对象,用于保存所有的节点\r\n var map = {};\r\n var rootNodes = [];\r\n\r\n var idTemp = '';\r\n var pidTemp = '';\r\n layui.each(flatArr, function(index, item){\r\n idTemp = idKey + item[idKey];\r\n pidTemp = idKey + item[pIdKey];\r\n\r\n // 将节点存入 map 对象\r\n if(!map[idTemp]){\r\n map[idTemp] = {};\r\n map[idTemp][childrenKey] = [];\r\n }\r\n\r\n // 合并节点\r\n var tempObj = {};\r\n tempObj[childrenKey] = map[idTemp][childrenKey];\r\n map[idTemp] = $.extend({}, item, tempObj);\r\n\r\n var isRootNode = (rootPid ? map[idTemp][pIdKey] === rootPid : !map[idTemp][pIdKey]);\r\n if(isRootNode){\r\n rootNodes.push(map[idTemp]);\r\n }else{\r\n if(!map[pidTemp]){\r\n map[pidTemp] = {};\r\n map[pidTemp][childrenKey] = [];\r\n }\r\n map[pidTemp][childrenKey].push(map[idTemp]);\r\n }\r\n });\r\n\r\n return rootNodes;\r\n }\r\n\r\n Class.prototype.flatToTree = function (tableData) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var customName = treeOptions.customName;\r\n var tableId = options.id;\r\n\r\n tableData = tableData || table.cache[tableId];\r\n\r\n return flatToTree(tableData, customName.id, customName.pid, customName.children, treeOptions.data.rootPid)\r\n }\r\n\r\n Class.prototype.treeToFlat = function (tableData, parentId, parentIndex) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var customName = treeOptions.customName;\r\n var childrenKey = customName.children;\r\n var pIdKey = customName.pid;\r\n\r\n var flat = [];\r\n layui.each(tableData, function (i1, item1) {\r\n var dataIndex = (parentIndex ? parentIndex + '-' : '') + i1;\r\n var dataNew = $.extend({}, item1);\r\n dataNew[pIdKey] = item1[pIdKey] || parentId;\r\n flat.push(dataNew);\r\n flat = flat.concat(that.treeToFlat(item1[childrenKey], item1[customName.id], dataIndex));\r\n });\r\n\r\n return flat;\r\n }\r\n\r\n // 通过当前行数据返回 treeNode 信息\r\n Class.prototype.getTreeNode = function (data) {\r\n var that = this;\r\n if (!data) {\r\n return hint.error('找不到节点数据');\r\n }\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableId = options.id;\r\n var customName = treeOptions.customName;\r\n\r\n // 带上一些常用的方法\r\n return {\r\n data: data,\r\n dataIndex: data[LAY_DATA_INDEX],\r\n getParentNode: function () {\r\n return that.getNodeByIndex(data[LAY_PARENT_INDEX])\r\n },\r\n };\r\n }\r\n\r\n // 通过 index 返回节点信息\r\n Class.prototype.getNodeByIndex = function (index) {\r\n var that = this;\r\n var treeNodeData = that.getNodeDataByIndex(index);\r\n if (!treeNodeData) {\r\n return hint.error('找不到节点数据');\r\n }\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var customName = treeOptions.customName;\r\n var parentKey = customName.parent;\r\n var tableId = options.id;\r\n\r\n var treeNode = {\r\n data: treeNodeData,\r\n dataIndex: treeNodeData[LAY_DATA_INDEX],\r\n getParentNode: function () {\r\n return that.getNodeByIndex(treeNodeData[LAY_PARENT_INDEX])\r\n },\r\n update: function (data) {\r\n return treeTable.updateNode(tableId, index, data)\r\n },\r\n remove: function () {\r\n return treeTable.removeNode(tableId, index)\r\n },\r\n expand: function (opts) {\r\n return treeTable.expandNode(tableId, $.extend({}, opts, {\r\n index: index\r\n }))\r\n },\r\n setChecked: function (opts) {\r\n return treeTable.setRowChecked(tableId, $.extend({}, opts, {\r\n index: index\r\n }))\r\n }\r\n };\r\n\r\n treeNode.dataIndex = index;\r\n return treeNode;\r\n }\r\n\r\n // 通过 id 获取节点信息\r\n Class.prototype.getNodeById = function (id) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var customName = treeOptions.customName;\r\n var idKey = customName.id;\r\n\r\n // 通过 id 拿到数据的 dataIndex\r\n var dataIndex = '';\r\n var tableDataFlat = treeTable.getData(options.id, true);\r\n layui.each(tableDataFlat, function (i1, item1) {\r\n if (item1[idKey] === id) {\r\n dataIndex = item1[LAY_DATA_INDEX];\r\n return true;\r\n }\r\n })\r\n if (!dataIndex) {\r\n return;\r\n }\r\n\r\n // 用 index\r\n return that.getNodeByIndex(dataIndex);\r\n }\r\n\r\n // 通过 index 获取节点数据\r\n Class.prototype.getNodeDataByIndex = function (index, clone, newValue) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableId = options.id;\r\n var tableCache = table.cache[tableId];\r\n\r\n // 获取当前行中的数据\r\n var dataCache = tableCache[index];\r\n\r\n // 若非删除操作,则返回合并后的数据\r\n if (newValue !== 'delete' && dataCache) {\r\n $.extend(dataCache, newValue);\r\n return clone ? $.extend({}, dataCache) : dataCache;\r\n }\r\n\r\n // 删除操作\r\n var dataRet = tableCache;\r\n var indexArr = String(index).split('-');\r\n\r\n // if (options.url || indexArr.length > 1) tableCache = null // 只有在删除根节点的时候才需要处理\r\n\r\n // 根据 index 进行数据处理\r\n for (var i = 0, childrenKey = treeOptions.customName.children; i < indexArr.length; i++) {\r\n if (newValue && i === indexArr.length - 1) {\r\n if (newValue === 'delete') { // 删除并返回当前数据\r\n // 同步 cache --- 此段代码注释缘由:data 属性模式造成数据重复执行 splice (@Gitee: #I7Z0A/I82E2S)\r\n /*if (tableCache) {\r\n layui.each(tableCache, function (i1, item1) {\r\n if (item1[LAY_DATA_INDEX] === index) {\r\n tableCache.splice(i1, 1);\r\n return true;\r\n }\r\n })\r\n }*/\r\n return (i ? dataRet[childrenKey] : dataRet).splice(indexArr[i], 1)[0];\r\n } else { // 更新值\r\n $.extend((i ? dataRet[childrenKey] : dataRet)[indexArr[i]], newValue);\r\n }\r\n }\r\n dataRet = i ? dataRet[childrenKey][indexArr[i]] : dataRet[indexArr[i]];\r\n }\r\n return clone ? $.extend({}, dataRet) : dataRet;\r\n }\r\n\r\n treeTable.getNodeDataByIndex = function (id, index) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n return that.getNodeDataByIndex(index, true);\r\n }\r\n\r\n // 判断是否是父节点\r\n var checkIsParent = function (data, isParentKey, childrenKey) {\r\n isParentKey = isParentKey || 'isParent';\r\n childrenKey = childrenKey || 'children';\r\n layui.each(data, function (i1, item1) {\r\n if (!(isParentKey in item1)) {\r\n item1[isParentKey] = !!(item1[childrenKey] && item1[childrenKey].length);\r\n checkIsParent(item1[childrenKey]);\r\n }\r\n })\r\n }\r\n\r\n Class.prototype.initData = function (data, parentIndex) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableId = options.id;\r\n\r\n data = data || that.getTableData();\r\n\r\n var customName = treeOptions.customName;\r\n var isParentKey = customName.isParent;\r\n var childrenKey = customName.children;\r\n\r\n var update = function(data, parentIndex){\r\n layui.each(data, function (i1, item1) {\r\n if (!(isParentKey in item1)) {\r\n item1[isParentKey] = !!(item1[childrenKey] && item1[childrenKey].length);\r\n }\r\n item1[LAY_DATA_INDEX_HISTORY] = item1[LAY_DATA_INDEX];\r\n item1[LAY_PARENT_INDEX] = parentIndex = parentIndex || '';\r\n var dataIndex = item1[LAY_DATA_INDEX] = (parentIndex ? parentIndex + '-' : '') + i1;\r\n update(item1[childrenKey] || [], dataIndex);\r\n });\r\n }\r\n\r\n update(data, parentIndex);\r\n\r\n updateCache(tableId, childrenKey, data);\r\n\r\n return data;\r\n }\r\n\r\n // 与 tableId 有关带防抖的方法\r\n var debounceFn = (function () {\r\n var fn = {};\r\n return function (tableId, func, wait) {\r\n if (!fn[tableId]) {\r\n fn[tableId] = layui.debounce(func, wait);\r\n }\r\n return fn[tableId];\r\n }\r\n })()\r\n\r\n // 优化参数,添加一个 getNodeByIndex 方法 只传 表格id 和行 dataIndex 分几步优化 todo\r\n var expandNode = function (treeNode, expandFlag, sonSign, focus, callbackFlag) {\r\n // treeNode // 需要展开的节点\r\n var trElem = treeNode.trElem;\r\n var tableViewElem = treeNode.tableViewElem || trElem.closest(ELEM_VIEW);\r\n var tableId = treeNode.tableId || tableViewElem.attr(MOD_ID);\r\n var options = treeNode.options || table.getOptions(tableId);\r\n var dataIndex = treeNode.dataIndex || trElem.attr('lay-data-index'); // 可能出现多层\r\n var treeTableThat = getThisTable(tableId);\r\n\r\n var treeOptions = options.tree || {};\r\n var customName = treeOptions.customName || {};\r\n var isParentKey = customName.isParent;\r\n\r\n var trData = treeTableThat.getNodeDataByIndex(dataIndex);\r\n\r\n // 后续调优:对已经展开的节点进行展开和已经关闭的节点进行关闭应该做优化减少不必要的代码执行 todo\r\n var isToggle = layui.type(expandFlag) !== 'boolean';\r\n var trExpand = isToggle ? !trData[LAY_EXPAND] : expandFlag;\r\n var retValue = trData[isParentKey] ? trExpand : null;\r\n\r\n if (callbackFlag && trExpand != trData[LAY_EXPAND] && (!trData[LAY_ASYNC_STATUS] || trData[LAY_ASYNC_STATUS] === 'local')) {\r\n var beforeExpand = treeOptions.callback.beforeExpand;\r\n if (layui.type(beforeExpand) === 'function') {\r\n if (beforeExpand(tableId, trData, expandFlag) === false) {\r\n return retValue;\r\n }\r\n }\r\n }\r\n\r\n var trExpanded = trData[LAY_HAS_EXPANDED]; // 展开过,包括异步加载\r\n\r\n // 找到表格中的同类节点(需要找到lay-data-index一致的所有行)\r\n var trsElem = tableViewElem.find('tr[lay-data-index=\"' + dataIndex + '\"]');\r\n var flexIconElem = trsElem.find('.layui-table-tree-flexIcon');\r\n treeTableThat.updateNodeIcon({\r\n scopeEl: trsElem,\r\n isExpand: trExpand,\r\n isParent: trData[isParentKey]\r\n });\r\n trData[LAY_EXPAND] = trExpand;\r\n var trDataId = trData[customName.id];\r\n trDataId !== undefined && (treeTableThat.status.expand[trDataId] = trExpand);\r\n if (retValue === null) {\r\n return retValue;\r\n }\r\n\r\n var childNodes = trData[customName.children] || [];\r\n // 处理子节点展示与否\r\n if (trExpand) {\r\n // 展开\r\n if (trExpanded) { // 已经展开过\r\n if (!childNodes.length) return ;//异步如果子节点没有数据情况下双点行展开所有已展开的节点问题解决\r\n trsElem.nextAll(childNodes.map(function (value, index, array) {\r\n return 'tr[lay-data-index=\"' + value[LAY_DATA_INDEX] + '\"]'\r\n }).join(',')).removeClass(HIDE);\r\n layui.each(childNodes, function (i1, item1) {\r\n if (!item1[isParentKey]) {\r\n return;\r\n }\r\n\r\n if (sonSign && !isToggle && !item1[LAY_EXPAND]) { // 非状态切换的情况下\r\n // 级联展开子节点\r\n expandNode({\r\n dataIndex: item1[LAY_DATA_INDEX],\r\n trElem: tableViewElem.find('tr[lay-data-index=\"' + item1[LAY_DATA_INDEX] + '\"]').first(),\r\n tableViewElem: tableViewElem,\r\n tableId: tableId,\r\n options: options,\r\n }, expandFlag, sonSign, focus, callbackFlag);\r\n } else if (item1[LAY_EXPAND]) { // 初始化级联展开\r\n expandNode({\r\n dataIndex: item1[LAY_DATA_INDEX],\r\n trElem: tableViewElem.find('tr[lay-data-index=\"' + item1[LAY_DATA_INDEX] + '\"]').first(),\r\n tableViewElem: tableViewElem,\r\n tableId: tableId,\r\n options: options,\r\n }, true);\r\n }\r\n });\r\n } else {\r\n var asyncSetting = treeOptions.async || {};\r\n var asyncUrl = asyncSetting.url || options.url;\r\n if (asyncSetting.enable && trData[isParentKey] && !trData[LAY_ASYNC_STATUS]) {\r\n trData[LAY_ASYNC_STATUS] = 'loading';\r\n flexIconElem.html('');\r\n\r\n // 异步获取子节点数据成功之后处理方法\r\n var asyncSuccessFn = function (data) {\r\n trData[LAY_ASYNC_STATUS] = 'success';\r\n trData[customName.children] = data;\r\n treeTableThat.initData(trData[customName.children], trData[LAY_DATA_INDEX])\r\n expandNode(treeNode, true, isToggle ? false : sonSign, focus, callbackFlag);\r\n }\r\n\r\n var format = asyncSetting.format; // 自定义数据返回方法\r\n if (layui.type(format) === 'function') {\r\n format(trData, options, asyncSuccessFn);\r\n return retValue;\r\n }\r\n\r\n var params = {};\r\n // 参数\r\n var data = $.extend(params, asyncSetting.where || options.where);\r\n var asyncAutoParam = asyncSetting.autoParam;\r\n layui.each(asyncAutoParam, function (index, item) {\r\n var itemStr = item;\r\n var itemArr = item.split('=');\r\n data[itemArr[0].trim()] = trData[(itemArr[1] || itemArr[0]).trim()]\r\n })\r\n\r\n var asyncContentType = asyncSetting.contentType || options.contentType;\r\n if (asyncContentType && asyncContentType.indexOf(\"application/json\") == 0) { // 提交 json 格式\r\n data = JSON.stringify(data);\r\n }\r\n var asyncType = asyncSetting.method || options.method;\r\n var asyncDataType = asyncSetting.dataType || options.dataType;\r\n var asyncJsonpCallback = asyncSetting.jsonpCallback || options.jsonpCallback;\r\n var asyncHeaders = asyncSetting.headers || options.headers;\r\n var asyncParseData = asyncSetting.parseData || options.parseData;\r\n var asyncResponse = asyncSetting.response || options.response;\r\n\r\n $.ajax({\r\n type: asyncType || 'get',\r\n url: asyncUrl,\r\n contentType: asyncContentType,\r\n data: data,\r\n dataType: asyncDataType || 'json',\r\n jsonpCallback: asyncJsonpCallback,\r\n headers: asyncHeaders || {},\r\n success: function (res) {\r\n // 若有数据解析的回调,则获得其返回的数据\r\n if (typeof asyncParseData === 'function') {\r\n res = asyncParseData.call(options, res) || res;\r\n }\r\n // 检查数据格式是否符合规范\r\n if (res[asyncResponse.statusName] != asyncResponse.statusCode) {\r\n trData[LAY_ASYNC_STATUS] = 'error';\r\n // 异常处理 todo\r\n flexIconElem.html('');\r\n // 事件\r\n } else {\r\n // 正常返回\r\n asyncSuccessFn(res[asyncResponse.dataName]);\r\n }\r\n },\r\n error: function (e, msg) {\r\n trData[LAY_ASYNC_STATUS] = 'error';\r\n // 异常处理 todo\r\n typeof options.error === 'function' && options.error(e, msg);\r\n }\r\n });\r\n return retValue;\r\n }\r\n trExpanded = trData[LAY_HAS_EXPANDED] = true;\r\n if (childNodes.length) {\r\n // 判断是否需要排序\r\n if (options.initSort && (!options.url || options.autoSort)) {\r\n var initSort = options.initSort;\r\n if (initSort.type) {\r\n layui.sort(childNodes, initSort.field, initSort.type === 'desc', true);\r\n } else {\r\n // 恢复默认\r\n layui.sort(childNodes, table.config.indexName, null, true);\r\n }\r\n }\r\n treeTableThat.initData(trData[customName.children], trData[LAY_DATA_INDEX]);\r\n // 将数据通过模板得出节点的html代码\r\n var str2 = table.getTrHtml(tableId, childNodes, null, null, dataIndex);\r\n\r\n var str2Obj = {\r\n trs: $(str2.trs.join('')),\r\n trs_fixed: $(str2.trs_fixed.join('')),\r\n trs_fixed_r: $(str2.trs_fixed_r.join(''))\r\n }\r\n var dataLevel = dataIndex.split('-').length - 1;\r\n var dataLevelNew = (dataLevel || 0) + 1;\r\n layui.each(childNodes, function (childIndex, childItem) {\r\n str2Obj.trs.eq(childIndex).attr({\r\n 'data-index': childItem[LAY_DATA_INDEX],\r\n 'lay-data-index': childItem[LAY_DATA_INDEX],\r\n 'data-level': dataLevelNew\r\n }).data('index', childItem[LAY_DATA_INDEX]);\r\n\r\n str2Obj.trs_fixed.eq(childIndex).attr({\r\n 'data-index': childItem[LAY_DATA_INDEX],\r\n 'lay-data-index': childItem[LAY_DATA_INDEX],\r\n 'data-level': dataLevelNew\r\n }).data('index', childItem[LAY_DATA_INDEX]);\r\n\r\n str2Obj.trs_fixed_r.eq(childIndex).attr({\r\n 'data-index': childItem[LAY_DATA_INDEX],\r\n 'lay-data-index': childItem[LAY_DATA_INDEX],\r\n 'data-level': dataLevelNew\r\n }).data('index', childItem[LAY_DATA_INDEX]);\r\n })\r\n\r\n tableViewElem.find(ELEM_MAIN).find('tbody tr[lay-data-index=\"' + dataIndex + '\"]').after(str2Obj.trs);\r\n tableViewElem.find(ELEM_FIXL).find('tbody tr[lay-data-index=\"' + dataIndex + '\"]').after(str2Obj.trs_fixed);\r\n tableViewElem.find(ELEM_FIXR).find('tbody tr[lay-data-index=\"' + dataIndex + '\"]').after(str2Obj.trs_fixed_r);\r\n\r\n // 初始化新增的节点中的内容\r\n treeTableThat.renderTreeTable(str2Obj.trs, dataLevelNew);\r\n\r\n if (sonSign && !isToggle) { // 非状态切换的情况下\r\n // 级联展开/关闭子节点\r\n layui.each(childNodes, function (i1, item1) {\r\n expandNode({\r\n dataIndex: item1[LAY_DATA_INDEX],\r\n trElem: tableViewElem.find('tr[lay-data-index=\"' + item1[LAY_DATA_INDEX] + '\"]').first(),\r\n tableViewElem: tableViewElem,\r\n tableId: tableId,\r\n options: options,\r\n }, expandFlag, sonSign, focus, callbackFlag);\r\n })\r\n }\r\n }\r\n }\r\n } else {\r\n treeTableThat.isExpandAll = false;\r\n // 关闭\r\n if (sonSign && !isToggle) { // 非状态切换的情况下\r\n layui.each(childNodes, function (i1, item1) {\r\n expandNode({\r\n dataIndex: item1[LAY_DATA_INDEX],\r\n trElem: tableViewElem.find('tr[lay-data-index=\"' + item1[LAY_DATA_INDEX] + '\"]').first(),\r\n tableViewElem: tableViewElem,\r\n tableId: tableId,\r\n options: options,\r\n }, expandFlag, sonSign, focus, callbackFlag);\r\n });\r\n tableViewElem.find(childNodes.map(function (value, index, array) { // 只隐藏直接子节点,其他由递归的处理\r\n return 'tr[lay-data-index=\"' + value[LAY_DATA_INDEX] + '\"]'\r\n }).join(',')).addClass(HIDE);\r\n } else {\r\n var childNodesFlat = treeTableThat.treeToFlat(childNodes, trData[customName.id], dataIndex);\r\n tableViewElem.find(childNodesFlat.map(function (value, index, array) {\r\n return 'tr[lay-data-index=\"' + value[LAY_DATA_INDEX] + '\"]'\r\n }).join(',')).addClass(HIDE);\r\n }\r\n }\r\n\r\n\r\n debounceFn('resize-' + tableId, function () {\r\n treeTable.resize(tableId);\r\n }, 0)();\r\n\r\n if (callbackFlag && trData[LAY_ASYNC_STATUS] !== 'loading') {\r\n var onExpand = treeOptions.callback.onExpand;\r\n layui.type(onExpand) === 'function' && onExpand(tableId, trData, trExpand);\r\n }\r\n\r\n return retValue;\r\n }\r\n\r\n /**\r\n * 展开或关闭一个节点\r\n * @param {String} id 树表id\r\n * @param {Object} opts\r\n * @param {Number|String} opts.index 展开行的数据下标\r\n * @param {Boolean} [opts.expandFlag] 展开、关闭、切换\r\n * @param {Boolean} [opts.inherit] 是否级联子节点\r\n * @param {Boolean} [opts.callbackFlag] 是否触发事件\r\n * @return [{Boolean}] 状态结果\r\n * */\r\n treeTable.expandNode = function (id, opts) {\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n\r\n opts = opts || {};\r\n\r\n var index = opts.index;\r\n var expandFlag = opts.expandFlag;\r\n var sonSign = opts.inherit;\r\n var callbackFlag = opts.callbackFlag;\r\n\r\n var options = that.getOptions();\r\n var tableViewElem = options.elem.next();\r\n return expandNode({\r\n trElem: tableViewElem.find('tr[lay-data-index=\"' + index + '\"]').first()\r\n }, expandFlag, sonSign, null, callbackFlag)\r\n };\r\n\r\n /**\r\n * 展开或关闭全部节点\r\n * @param {String} id 树表id\r\n * @param {Boolean} expandFlag 展开或关闭\r\n * */\r\n treeTable.expandAll = function (id, expandFlag) {\r\n if (layui.type(expandFlag) !== 'boolean') {\r\n return hint.error('expandAll 的展开状态参数只接收true/false')\r\n }\r\n\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n\r\n that.isExpandAll = expandFlag;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableView = options.elem.next();\r\n var isParentKey = treeOptions.customName.isParent;\r\n var idKey = treeOptions.customName.id;\r\n var showFlexIconIfNotParent = treeOptions.view.showFlexIconIfNotParent;\r\n\r\n if (!expandFlag) {\r\n // 关闭所有\r\n // 将所有已经打开的节点的状态设置为关闭,\r\n that.updateStatus(null, function (d) {\r\n if (d[isParentKey] || showFlexIconIfNotParent) {\r\n d[LAY_EXPAND] = false;\r\n d[idKey] !== undefined && (that.status.expand[d[idKey]] = false);\r\n }\r\n }) // 只处理当前页,如果需要处理全部表格,需要用treeTable.updateStatus\r\n // 隐藏所有非顶层的节点\r\n tableView.find('.layui-table-box tbody tr[data-level!=\"0\"]').addClass(HIDE);\r\n\r\n tableView.find('.layui-table-tree-flexIcon').html(treeOptions.view.flexIconClose);\r\n treeOptions.view.showIcon && tableView\r\n .find('.layui-table-tree-nodeIcon:not(.layui-table-tree-iconCustom,.layui-table-tree-iconLeaf)')\r\n .html(treeOptions.view.iconClose);\r\n } else {\r\n var tableDataFlat = treeTable.getData(id, true);\r\n // 展开所有\r\n // 存在异步加载\r\n if (treeOptions.async.enable) {\r\n // 判断是否有未加载过的节点\r\n var isAllAsyncDone = true;\r\n layui.each(tableDataFlat, function (i1, item1) {\r\n if (item1[isParentKey] && !item1[LAY_ASYNC_STATUS]) {\r\n isAllAsyncDone = false;\r\n return true;\r\n }\r\n })\r\n // 有未加载过的节点\r\n if (!isAllAsyncDone) {\r\n // 逐个展开\r\n layui.each(treeTable.getData(id), function (i1, item1) {\r\n treeTable.expandNode(id, {\r\n index: item1[LAY_DATA_INDEX],\r\n expandFlag: true,\r\n inherit: true\r\n })\r\n })\r\n return;\r\n }\r\n }\r\n\r\n // 先判断是否全部打开过了\r\n var isAllExpanded = true;\r\n layui.each(tableDataFlat, function (i1, item1) {\r\n if (item1[isParentKey] && !item1[LAY_HAS_EXPANDED]) {\r\n isAllExpanded = false;\r\n return true;\r\n }\r\n })\r\n // 如果全部节点已经都打开过,就可以简单处理跟隐藏所有节点反操作\r\n if (isAllExpanded) {\r\n that.updateStatus(null, function (d) {\r\n if (d[isParentKey] || showFlexIconIfNotParent) {\r\n d[LAY_EXPAND] = true;\r\n d[idKey] !== undefined && (that.status.expand[d[idKey]] = true);\r\n }\r\n });\r\n // 显示所有子节点\r\n tableView.find('tbody tr[data-level!=\"0\"]').removeClass(HIDE);\r\n // 处理节点的图标\r\n tableView.find('.layui-table-tree-flexIcon').html(treeOptions.view.flexIconOpen);\r\n treeOptions.view.showIcon && tableView\r\n .find('.layui-table-tree-nodeIcon:not(.layui-table-tree-iconCustom,.layui-table-tree-iconLeaf)')\r\n .html(treeOptions.view.iconOpen);\r\n } else {\r\n // 如果有未打开过的父节点,将 tr 内容全部重新生成\r\n that.updateStatus(null, function (d) {\r\n if (d[isParentKey] || showFlexIconIfNotParent) {\r\n d[LAY_EXPAND] = true;\r\n d[LAY_HAS_EXPANDED] = true;\r\n d[idKey] !== undefined && (that.status.expand[d[idKey]] = true);\r\n }\r\n });\r\n if (options.initSort && options.initSort.type && options.autoSort) {\r\n return treeTable.sort(id);\r\n }\r\n var trAll = table.getTrHtml(id, tableDataFlat);\r\n\r\n var trAllObj = {\r\n trs: $(trAll.trs.join('')),\r\n trs_fixed: $(trAll.trs_fixed.join('')),\r\n trs_fixed_r: $(trAll.trs_fixed_r.join(''))\r\n }\r\n var props;\r\n layui.each(tableDataFlat, function (dataIndex, dataItem) {\r\n var dataLevel = dataItem[LAY_DATA_INDEX].split('-').length - 1;\r\n props = {\r\n 'data-index': dataItem[LAY_DATA_INDEX],\r\n 'lay-data-index': dataItem[LAY_DATA_INDEX],\r\n 'data-level': dataLevel\r\n };\r\n trAllObj.trs.eq(dataIndex).attr(props).data('index', dataItem[LAY_DATA_INDEX]);\r\n trAllObj.trs_fixed.eq(dataIndex).attr(props).data('index', dataItem[LAY_DATA_INDEX]);\r\n trAllObj.trs_fixed_r.eq(dataIndex).attr(props).data('index', dataItem[LAY_DATA_INDEX]);\r\n })\r\n layui.each(['main', 'fixed-l', 'fixed-r'], function (i, item) {\r\n tableView.find('.layui-table-' + item + ' tbody').html(trAllObj[['trs', 'trs_fixed', 'trs_fixed_r'][i]]);\r\n });\r\n that.renderTreeTable(tableView, 0, false);\r\n }\r\n }\r\n treeTable.resize(id);\r\n }\r\n\r\n /**\r\n * @typedef updateNodeIconOptions\r\n * @prop {JQuery} scopeEl - tr 元素\r\n * @prop {boolean} isExpand - 是否是展开图标\r\n * @prop {boolean} isParent - 是否是父节点图标\r\n */\r\n /**\r\n * 更新节点图标\r\n * @param {updateNodeIconOptions} opts\r\n */\r\n Class.prototype.updateNodeIcon = function(opts){\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree || {};\r\n var scopeEl = opts.scopeEl;\r\n var isExpand = opts.isExpand;\r\n var isParent = opts.isParent;\r\n\r\n // 处理折叠按钮图标\r\n var flexIconElem = scopeEl.find('.layui-table-tree-flexIcon');\r\n\r\n flexIconElem\r\n .css('visibility', isParent || treeOptions.view.showFlexIconIfNotParent ? 'visible' : 'hidden')\r\n .html(isExpand ? treeOptions.view.flexIconOpen : treeOptions.view.flexIconClose);\r\n // 处理节点图标\r\n if(treeOptions.view.showIcon){\r\n var nodeIconElem = scopeEl.find('.layui-table-tree-nodeIcon:not(.layui-table-tree-iconCustom)');\r\n var nodeIcon = isParent \r\n ? (isExpand ? treeOptions.view.iconOpen : treeOptions.view.iconClose)\r\n : treeOptions.view.iconLeaf;\r\n\r\n nodeIconElem\r\n .toggleClass('layui-table-tree-iconLeaf', !isParent)\r\n .html(nodeIcon);\r\n }\r\n }\r\n\r\n Class.prototype.renderTreeTable = function (tableView, level, sonSign) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var tableViewElem = options.elem.next();\r\n !tableViewElem.hasClass(TABLE_TREE) && tableViewElem.addClass(TABLE_TREE);\r\n var tableId = options.id;\r\n var treeOptions = options.tree || {};\r\n var treeOptionsData = treeOptions.data || {};\r\n var treeOptionsView = treeOptions.view || {};\r\n var customName = treeOptions.customName || {};\r\n var isParentKey = customName.isParent;\r\n var tableFilterId = tableViewElem.attr('lay-filter');\r\n var treeTableThat = that;\r\n // var tableData = treeTableThat.getTableData();\r\n\r\n level = level || 0;\r\n\r\n if (!level) {\r\n // 初始化的表格里面没有level信息,可以作为顶层节点的判断\r\n tableViewElem.find('.layui-table-body tr:not([data-level])').attr('data-level', level);\r\n layui.each(table.cache[tableId], function (dataIndex, dataItem) {\r\n tableViewElem.find('.layui-table-main tbody tr[data-level=\"0\"]:eq(' + dataIndex + ')').attr('lay-data-index', dataItem[LAY_DATA_INDEX]);\r\n tableViewElem.find('.layui-table-fixed-l tbody tr[data-level=\"0\"]:eq(' + dataIndex + ')').attr('lay-data-index', dataItem[LAY_DATA_INDEX]);\r\n tableViewElem.find('.layui-table-fixed-r tbody tr[data-level=\"0\"]:eq(' + dataIndex + ')').attr('lay-data-index', dataItem[LAY_DATA_INDEX]);\r\n })\r\n }\r\n\r\n var dataExpand = null; // 记录需要展开的数据\r\n var nameKey = customName.name;\r\n var indent = treeOptionsView.indent || 14;\r\n layui.each(tableView.find('td[data-field=\"' + nameKey + '\"]'), function (index, item) {\r\n item = $(item);\r\n var trElem = item.closest('tr');\r\n var itemCell = item.children('.layui-table-cell');\r\n if (itemCell.hasClass('layui-table-tree-item')) {\r\n return;\r\n }\r\n var trIndex = trElem.attr('lay-data-index');\r\n if (!trIndex) { // 排除在统计行中的节点\r\n return;\r\n }\r\n trElem = tableViewElem.find('tr[lay-data-index=\"' + trIndex + '\"]');\r\n var trData = treeTableThat.getNodeDataByIndex(trIndex);\r\n\r\n if (trData[LAY_EXPAND] && trData[isParentKey]) {\r\n // 需要展开\r\n dataExpand = dataExpand || {};\r\n dataExpand[trIndex] = true;\r\n }\r\n if (trData[LAY_CHECKBOX_HALF]) {\r\n trElem.find('input[type=\"checkbox\"][name=\"layTableCheckbox\"]').prop('indeterminate', true);\r\n }\r\n\r\n var htmlTemp = itemCell.html();\r\n itemCell = trElem.find('td[data-field=\"' + nameKey + '\"]>div.layui-table-cell');\r\n itemCell.addClass('layui-table-tree-item');\r\n var flexIconElem = itemCell\r\n .html(['
              ',\r\n trData[LAY_EXPAND] ? treeOptionsView.flexIconOpen : treeOptionsView.flexIconClose, // 折叠图标\r\n '
              ',\r\n treeOptionsView.showIcon ? '
              ' +\r\n (that.normalizedIcon(trData[customName.icon]) || treeOptionsView.icon ||\r\n (trData[isParentKey] ?\r\n (trData[LAY_EXPAND] ? treeOptionsView.iconOpen : treeOptionsView.iconClose) :\r\n treeOptionsView.iconLeaf) ||\r\n '') + '
              ' : '', // 区分父子节点\r\n htmlTemp].join('')) // 图标要可定制\r\n .find('.layui-table-tree-flexIcon');\r\n\r\n // 添加展开按钮的事件\r\n flexIconElem.on('click', function (event) {\r\n layui.stope(event);\r\n // 处理数据\r\n // var trElem = item.closest('tr');\r\n expandNode({trElem: trElem}, null, null, null, true);\r\n });\r\n });\r\n\r\n if (!level && treeOptions.view.expandAllDefault && that.isExpandAll === undefined) {\r\n return treeTable.expandAll(tableId, true); // 默认展开全部\r\n }\r\n\r\n // 当前层的数据看看是否需要展开\r\n if (sonSign !== false && dataExpand) {\r\n layui.each(dataExpand, function (index, item) {\r\n var trDefaultExpand = tableViewElem.find('tr[lay-data-index=\"' + index + '\"]');\r\n trDefaultExpand.find('.layui-table-tree-flexIcon').html(treeOptionsView.flexIconOpen);\r\n expandNode({trElem: trDefaultExpand.first()}, true);\r\n });\r\n // #1463 expandNode 中已经展开过的节点不会重新渲染\r\n debounceFn('renderTreeTable2-' + tableId, function () {\r\n form.render($('.layui-table-tree[' + MOD_ID + '=\"' + tableId + '\"]'));\r\n }, 0)();\r\n } else {\r\n debounceFn('renderTreeTable-' + tableId, function () {\r\n options.hasNumberCol && formatNumber(that);\r\n form.render($('.layui-table-tree[' + MOD_ID + '=\"' + tableId + '\"]'));\r\n }, 0)();\r\n }\r\n }\r\n\r\n var formatNumber = function (that) {\r\n var options = that.getOptions();\r\n var tableViewElem = options.elem.next();\r\n\r\n var num = 0;\r\n var trMain = tableViewElem.find('.layui-table-main tbody tr');\r\n var trFixedL = tableViewElem.find('.layui-table-fixed-l tbody tr');\r\n var trFixedR = tableViewElem.find('.layui-table-fixed-r tbody tr');\r\n layui.each(that.treeToFlat(table.cache[options.id]), function (i1, item1) {\r\n if (item1['LAY_HIDE']) return;\r\n var itemData = that.getNodeDataByIndex(item1[LAY_DATA_INDEX]);\r\n itemData['LAY_NUM'] = ++num;\r\n trMain.eq(i1).find('.laytable-cell-numbers').html(num);\r\n trFixedL.eq(i1).find('.laytable-cell-numbers').html(num);\r\n trFixedR.eq(i1).find('.laytable-cell-numbers').html(num);\r\n })\r\n }\r\n\r\n // 树表渲染\r\n Class.prototype.render = function (type) {\r\n var that = this;\r\n that.tableIns = table[type === 'reloadData' ? 'reloadData' : 'reload'](that.tableIns.config.id, $.extend(true, {}, that.config));\r\n that.config = that.tableIns.config;\r\n };\r\n\r\n // 表格重载\r\n Class.prototype.reload = function (options, deep, type) {\r\n var that = this;\r\n\r\n options = options || {};\r\n delete that.haveInit;\r\n\r\n // 防止数组深度合并\r\n layui.each(options, function (key, item) {\r\n if (layui.type(item) === 'array') delete that.config[key];\r\n });\r\n\r\n // 根据需要处理options中的一些参数\r\n updateOptions(that.getOptions().id, options, type || true);\r\n\r\n // 对参数进行深度或浅扩展\r\n that.config = $.extend(deep, {}, that.config, options);\r\n\r\n // 执行渲染\r\n that.render(type);\r\n };\r\n\r\n // 仅重载数据\r\n treeTable.reloadData = function () {\r\n var args = $.extend(true, [], arguments);\r\n args[3] = 'reloadData';\r\n\r\n return treeTable.reload.apply(null, args);\r\n };\r\n\r\n var updateStatus = function (data, statusObj, childrenKey, notCascade) {\r\n var dataUpdated = [];\r\n layui.each(data, function (i1, item1) {\r\n if (layui.type(statusObj) === 'function') {\r\n statusObj(item1);\r\n } else {\r\n $.extend(item1, statusObj);\r\n }\r\n dataUpdated.push($.extend({}, item1));\r\n notCascade || (dataUpdated = dataUpdated.concat(updateStatus(item1[childrenKey], statusObj, childrenKey, notCascade)));\r\n });\r\n return dataUpdated;\r\n }\r\n\r\n Class.prototype.updateStatus = function (data, statusObj, notCascade) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n data = data || table.cache[options.id];\r\n\r\n return updateStatus(data, statusObj, treeOptions.customName.children, notCascade);\r\n }\r\n\r\n Class.prototype.getTableData = function () {\r\n var that = this;\r\n var options = that.getOptions();\r\n // return options.url ? table.cache[options.id] : options.data;\r\n return table.cache[options.id];\r\n }\r\n\r\n treeTable.updateStatus = function (id, statusObj, data) {\r\n var that = getThisTable(id);\r\n var options = that.getOptions();\r\n if (!data) {\r\n if (options.url) {\r\n data = table.cache[options.id];\r\n } else {\r\n data = options.data;\r\n }\r\n }\r\n return that.updateStatus(data, statusObj);\r\n }\r\n\r\n treeTable.sort = function (id) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n\r\n var tableData = treeTable.getData(id);\r\n var customName = treeOptions.customName;\r\n var childrenKey = customName.children;\r\n\r\n // 只和同级节点排序\r\n var sort = function(data, field, type){\r\n layui.sort(data, field, type, true);\r\n layui.each(data, function(rowIndex, trData){\r\n sort(trData[childrenKey] || [], field, type);\r\n })\r\n }\r\n\r\n if (options.autoSort) {\r\n var initSort = options.initSort;\r\n if (initSort.type) {\r\n sort(tableData, initSort.field, initSort.type === 'desc');\r\n } else {\r\n // 恢复默认\r\n sort(tableData, table.config.indexName, null);\r\n }\r\n // 更新缓存中数据的顺序\r\n table.cache[id] = tableData;\r\n // 重新初始化缓存数据\r\n that.initData(tableData);\r\n treeTable.renderData(id);\r\n }\r\n }\r\n\r\n // 处理事件\r\n var updateObjParams = function (obj) {\r\n var tableId = obj.config.id;\r\n var tableThat = getThisTable(tableId);\r\n var trData = obj.data = treeTable.getNodeDataByIndex(tableId, obj.index); // 克隆的\r\n var trIndex = trData[LAY_DATA_INDEX];\r\n obj.dataIndex = trIndex;\r\n\r\n // 处理update方法\r\n var updateFn = obj.update;\r\n obj.update = function () {\r\n var updateThat = this;\r\n var args = arguments;\r\n $.extend(tableThat.getNodeDataByIndex(trIndex), args[0]);\r\n var ret = updateFn.apply(updateThat, args); // 主要负责更新节点内容\r\n var nameKey = obj.config.tree.customName.name;\r\n nameKey in args[0] && obj.tr.find('td[data-field=\"' + nameKey + '\"]').children('div.layui-table-cell').removeClass('layui-table-tree-item');\r\n tableThat.renderTreeTable(obj.tr, obj.tr.attr('data-level'), false);\r\n return ret;\r\n }\r\n\r\n // 处理del方法\r\n obj.del = function () {\r\n treeTable.removeNode(tableId, trData);\r\n }\r\n\r\n // 处理setRowChecked\r\n obj.setRowChecked = function (checked) {\r\n treeTable.setRowChecked(tableId, {\r\n index: trData,\r\n checked: checked\r\n });\r\n }\r\n }\r\n\r\n // 更新数据\r\n treeTable.updateNode = function (id, index, newNode) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableView = options.elem.next();\r\n var trElem = tableView.find('tr[lay-data-index=\"' + index + '\"]');\r\n var trIndex = trElem.attr('data-index');\r\n var trLevel = trElem.attr('data-level')\r\n\r\n if (!newNode) {\r\n return;\r\n }\r\n // 更新值\r\n var newNodeTemp = that.getNodeDataByIndex(index, false, newNode);\r\n // 获取新的tr替换\r\n var trNew = table.getTrHtml(id, [newNodeTemp]);\r\n // 重新渲染tr\r\n layui.each(['main', 'fixed-l', 'fixed-r'], function (i, item) {\r\n tableView.find('.layui-table-' + item + ' tbody tr[lay-data-index=\"' + index + '\"]').replaceWith($(trNew[['trs', 'trs_fixed', 'trs_fixed_r'][i]].join('')).attr({\r\n 'data-index': trIndex,\r\n 'lay-data-index': index,\r\n 'data-level': trLevel\r\n }).data('index', trIndex));\r\n });\r\n that.renderTreeTable(tableView.find('tr[lay-data-index=\"' + index + '\"]'), trLevel);\r\n }\r\n\r\n // 删除数据\r\n // _keepParent 暂时为私有参数,仅供内部使用\r\n treeTable.removeNode = function (id, node, _keepParent) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var isParentKey = treeOptions.customName.isParent;\r\n var childrenKey = treeOptions.customName.children;\r\n var tableView = options.elem.next();\r\n var delNode;\r\n var indexArr = [];\r\n var tableCache = table.cache[id];\r\n delNode = that.getNodeDataByIndex(layui.type(node) === 'string' ? node : node[LAY_DATA_INDEX], false, 'delete');\r\n var nodeP = that.getNodeDataByIndex(delNode[LAY_PARENT_INDEX]);\r\n that.updateCheckStatus(nodeP);\r\n var delNodesFlat = that.treeToFlat([delNode], delNode[treeOptions.customName.pid], delNode[LAY_PARENT_INDEX]);\r\n layui.each(delNodesFlat, function (i2, delNode) {\r\n var delNodeDataIndex = delNode[LAY_DATA_INDEX];\r\n indexArr.push('tr[lay-data-index=\"' + delNodeDataIndex + '\"]');\r\n // 删除临时 key\r\n if(delNodeDataIndex.indexOf('-') !== -1){\r\n delete tableCache[delNodeDataIndex]; \r\n }\r\n })\r\n\r\n tableView.find(indexArr.join(',')).remove(); // 删除行\r\n\r\n var deleteCacheKey = function(){\r\n for (var key in tableCache) {\r\n // 根节点 getNodeDataByIndex 内部已处理\r\n if(key.indexOf('-') !== -1){\r\n // L93 updateCache() 中,cacheKey 取自 rowData 中的 LAY_DATA_INDEX,\r\n // 两者不同说明当前 cacheKey 引用的 rowData 已被更新\r\n if(key !== tableCache[key][LAY_DATA_INDEX]){\r\n delete tableCache[key]\r\n }\r\n }\r\n }\r\n }\r\n\r\n // 重新整理数据\r\n var tableData = that.initData();\r\n deleteCacheKey();\r\n // index发生变化需要更新页面tr中对应的lay-data-index 新增和删除都要注意数据结构变动之后的index问题\r\n layui.each(that.treeToFlat(tableData), function (i3, item3) {\r\n if (item3[LAY_DATA_INDEX_HISTORY] && item3[LAY_DATA_INDEX_HISTORY] !== item3[LAY_DATA_INDEX]) {\r\n tableView.find('tr[lay-data-index=\"' + item3[LAY_DATA_INDEX_HISTORY] + '\"]').attr({\r\n 'data-index': item3[LAY_DATA_INDEX],\r\n 'lay-data-index': item3[LAY_DATA_INDEX],\r\n }).data('index', item3[LAY_DATA_INDEX]);\r\n // item3[LAY_DATA_INDEX_HISTORY] = item3[LAY_DATA_INDEX]\r\n }\r\n });\r\n // 重新更新顶层节点的data-index;\r\n layui.each(tableCache, function (i4, item4) {\r\n tableView.find('tr[data-level=\"0\"][lay-data-index=\"' + item4[LAY_DATA_INDEX] + '\"]')\r\n .attr('data-index', i4)\r\n .data('index', i4);\r\n })\r\n options.hasNumberCol && formatNumber(that);\r\n // 更新父节点状态\r\n if(nodeP){\r\n var trEl = tableView.find('tr[lay-data-index=\"' + nodeP[LAY_DATA_INDEX] + '\"]');\r\n\r\n if(!_keepParent){\r\n nodeP[isParentKey] = !!(nodeP[childrenKey] && nodeP[childrenKey].length);\r\n }\r\n\r\n that.updateNodeIcon({\r\n scopeEl: trEl,\r\n isExpand: nodeP[LAY_EXPAND],\r\n isParent: nodeP[isParentKey],\r\n }); \r\n }\r\n\r\n // 重新适配尺寸\r\n treeTable.resize(id);\r\n }\r\n\r\n /**\r\n * 新增数据节点\r\n * @param {String} id 树表id\r\n * @param {Object} opts\r\n * @param {String|Number} opts.parentIndex 指定的父节点,如果增加根节点,请设置 parentIndex 为 null 即可\r\n * @param {Number} opts.index 新节点插入的位置(从 0 开始)index = -1(默认) 时,插入到最后\r\n * @param {Object|Array} opts.data 新增的节点,单个或者多个\r\n * @param {Boolean} opts.focus 新增的节点,单个或者多个\r\n * @return {Array} 新增的节点\r\n * */\r\n treeTable.addNodes = function (id, opts) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableViewElem = options.elem.next();\r\n var checkName = table.config.checkName;\r\n\r\n opts = opts || {};\r\n\r\n var parentIndex = opts.parentIndex;\r\n var index = opts.index;\r\n var newNodes = opts.data;\r\n var focus = opts.focus;\r\n\r\n parentIndex = layui.type(parentIndex) === 'number' ? parentIndex.toString() : parentIndex;\r\n var parentNode = parentIndex ? that.getNodeDataByIndex(parentIndex) : null;\r\n index = layui.type(index) === 'number' ? index : -1;\r\n\r\n // 添加数据\r\n newNodes = $.extend(true, [], (layui.isArray(newNodes) ? newNodes : [newNodes]));\r\n\r\n // 若未传入 LAY_CHECKED 属性,则继承父节点的 checked 状态\r\n layui.each(newNodes, function(i, item){\r\n if(!(checkName in item) && parentNode){\r\n item[checkName] = parentNode[checkName];\r\n }\r\n })\r\n\r\n var tableData = that.getTableData(), dataAfter;\r\n if (!parentNode) {\r\n // 添加到根节点\r\n dataAfter = table.cache[id].splice(index === -1 ? table.cache[id].length : index);\r\n table.cache[id] = table.cache[id].concat(newNodes, dataAfter);\r\n if (!options.url) {\r\n // 静态data模式\r\n if (!options.page) {\r\n options.data = table.cache[id];\r\n } else {\r\n var pageOptions = options.page;\r\n options.data.splice.apply(options.data, [pageOptions.limit * (pageOptions.curr - 1), pageOptions.limit].concat(table.cache[id]))\r\n }\r\n }\r\n // 将新节点添加到页面\r\n tableData = that.initData();\r\n\r\n if (tableViewElem.find('.layui-none').length) {\r\n table.renderData(id);\r\n return newNodes;\r\n }\r\n\r\n var newNodesHtml = table.getTrHtml(id, newNodes);\r\n var newNodesHtmlObj = {\r\n trs: $(newNodesHtml.trs.join('')),\r\n trs_fixed: $(newNodesHtml.trs_fixed.join('')),\r\n trs_fixed_r: $(newNodesHtml.trs_fixed_r.join(''))\r\n }\r\n\r\n var attrs = {};\r\n layui.each(newNodes, function (newNodeIndex, newNodeItem) {\r\n attrs = {\r\n 'data-index': newNodeItem[LAY_DATA_INDEX],\r\n 'lay-data-index': newNodeItem[LAY_DATA_INDEX],\r\n 'data-level': '0'\r\n };\r\n newNodesHtmlObj.trs.eq(newNodeIndex).attr(attrs).data('index', newNodeItem[LAY_DATA_INDEX]);\r\n newNodesHtmlObj.trs_fixed.eq(newNodeIndex).attr(attrs).data('index', newNodeItem[LAY_DATA_INDEX]);\r\n newNodesHtmlObj.trs_fixed_r.eq(newNodeIndex).attr(attrs).data('index', newNodeItem[LAY_DATA_INDEX]);\r\n })\r\n var trIndexPrev = parseInt(newNodes[0][LAY_DATA_INDEX]) - 1;\r\n var tableViewElemMAIN = tableViewElem.find(ELEM_MAIN);\r\n var tableViewElemFIXL = tableViewElem.find(ELEM_FIXL);\r\n var tableViewElemFIXR = tableViewElem.find(ELEM_FIXR);\r\n if (trIndexPrev === -1) {\r\n // 插入到开头\r\n var hasTr = tableViewElemMAIN.find('tr[data-level=\"0\"][data-index=\"0\"]')[0];\r\n if(hasTr){\r\n tableViewElemMAIN.find('tr[data-level=\"0\"][data-index=\"0\"]').before(newNodesHtmlObj.trs);\r\n tableViewElemFIXL.find('tr[data-level=\"0\"][data-index=\"0\"]').before(newNodesHtmlObj.trs_fixed);\r\n tableViewElemFIXR.find('tr[data-level=\"0\"][data-index=\"0\"]').before(newNodesHtmlObj.trs_fixed_r);\r\n }else{\r\n tableViewElemMAIN.find('tbody').prepend(newNodesHtmlObj.trs);\r\n tableViewElemFIXL.find('tbody').prepend(newNodesHtmlObj.trs_fixed);\r\n tableViewElemFIXR.find('tbody').prepend(newNodesHtmlObj.trs_fixed_r);\r\n }\r\n } else {\r\n if (index === -1) {\r\n // 追加到最后\r\n tableViewElemMAIN.find('tbody').append(newNodesHtmlObj.trs);\r\n tableViewElemFIXL.find('tbody').append(newNodesHtmlObj.trs_fixed);\r\n tableViewElemFIXR.find('tbody').append(newNodesHtmlObj.trs_fixed_r);\r\n } else {\r\n var trIndexNext = dataAfter[0][LAY_DATA_INDEX_HISTORY];\r\n tableViewElemMAIN.find('tr[data-level=\"0\"][data-index=\"' + trIndexNext + '\"]').before(newNodesHtmlObj.trs);\r\n tableViewElemFIXL.find('tr[data-level=\"0\"][data-index=\"' + trIndexNext + '\"]').before(newNodesHtmlObj.trs_fixed);\r\n tableViewElemFIXR.find('tr[data-level=\"0\"][data-index=\"' + trIndexNext + '\"]').before(newNodesHtmlObj.trs_fixed_r);\r\n }\r\n\r\n }\r\n\r\n // 重新更新顶层节点的data-index;\r\n layui.each(table.cache[id], function (i4, item4) {\r\n tableViewElem.find('tr[data-level=\"0\"][lay-data-index=\"' + item4[LAY_DATA_INDEX] + '\"]')\r\n .attr('data-index', i4)\r\n .data('index', i4);\r\n })\r\n\r\n that.renderTreeTable(tableViewElem.find(newNodes.map(function (value, index, array) {\r\n return 'tr[lay-data-index=\"' + value[LAY_DATA_INDEX] + '\"]'\r\n }).join(',')));\r\n } else {\r\n var isParentKey = treeOptions.customName.isParent;\r\n var childKey = treeOptions.customName.children;\r\n\r\n parentNode[isParentKey] = true;\r\n var childrenNodes = parentNode[childKey];\r\n if (!childrenNodes) {\r\n childrenNodes = parentNode[childKey] = newNodes;\r\n } else {\r\n dataAfter = childrenNodes.splice(index === -1 ? childrenNodes.length : index);\r\n childrenNodes = parentNode[childKey] = childrenNodes.concat(newNodes, dataAfter);\r\n }\r\n // 删除已经存在的同级节点以及他们的子节点,并且把中间节点的已展开过的状态设置为false\r\n that.updateStatus(childrenNodes, function (d) {\r\n if (d[isParentKey] || treeOptions.view.showFlexIconIfNotParent) {\r\n d[LAY_HAS_EXPANDED] = false;\r\n }\r\n });\r\n var childrenNodesFlat = that.treeToFlat(childrenNodes);\r\n tableViewElem.find(childrenNodesFlat.map(function (value) {\r\n return 'tr[lay-data-index=\"' + value[LAY_DATA_INDEX] + '\"]'\r\n }).join(',')).remove();\r\n\r\n tableData = that.initData();\r\n // 去掉父节点的已经展开过的状态,重新执行一次展开的方法\r\n parentNode[LAY_HAS_EXPANDED] = false;\r\n parentNode[LAY_ASYNC_STATUS] = 'local'; // 转为本地数据,应该规定异步加载子节点的时候addNodes的规则\r\n expandNode({trElem: tableViewElem.find('tr[lay-data-index=\"' + parentIndex + '\"]')}, true)\r\n }\r\n that.updateCheckStatus(parentNode);\r\n // 更新父节点图标状态\r\n if(parentNode){\r\n var trEl = tableViewElem.find('tr[lay-data-index=\"' + parentNode[LAY_DATA_INDEX] + '\"]');\r\n that.updateNodeIcon({\r\n scopeEl: trEl,\r\n isExpand: parentNode[LAY_EXPAND],\r\n isParent: parentNode[isParentKey],\r\n }); \r\n }\r\n treeTable.resize(id);\r\n if (focus) {\r\n // 滚动到第一个新增的节点\r\n tableViewElem.find(ELEM_MAIN).find('tr[lay-data-index=\"' + newNodes[0][LAY_DATA_INDEX] + '\"]').get(0).scrollIntoViewIfNeeded();\r\n }\r\n\r\n return newNodes;\r\n }\r\n\r\n // 获取表格选中状态\r\n treeTable.checkStatus = function (id, includeHalfCheck) {\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var checkName = table.config.checkName;\r\n\r\n // 需要区分单双选\r\n var tableData = treeTable.getData(id, true);\r\n var checkedData = tableData.filter(function (value, index, array) {\r\n return value[checkName] || (includeHalfCheck && value[LAY_CHECKBOX_HALF]);\r\n });\r\n\r\n var isAll = true;\r\n layui.each(treeOptions.data.cascade === 'all' ? table.cache[id] : treeTable.getData(id, true), function (i1, item1) {\r\n if (!item1[checkName]) {\r\n isAll = false;\r\n return true;\r\n }\r\n })\r\n\r\n return {\r\n data: checkedData,\r\n isAll: isAll\r\n }\r\n }\r\n\r\n // 排序之后重新渲染成树表\r\n treeTable.on('sort', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n treeTable.sort(tableId);\r\n }\r\n });\r\n\r\n // 行点击\r\n treeTable.on('row', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n updateObjParams(obj);\r\n }\r\n })\r\n\r\n // 行双击\r\n treeTable.on('rowDouble', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n updateObjParams(obj);\r\n\r\n var treeOptions = options.tree || {};\r\n if (treeOptions.view.dblClickExpand) {\r\n expandNode({trElem: obj.tr.first()}, null, null, null, true);\r\n }\r\n }\r\n })\r\n\r\n // 菜单\r\n treeTable.on('rowContextmenu', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n updateObjParams(obj);\r\n }\r\n })\r\n\r\n // tr中带lay-event节点点击\r\n treeTable.on('tool', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n updateObjParams(obj);\r\n }\r\n })\r\n\r\n // 行内编辑\r\n treeTable.on('edit', function (obj) {\r\n // 如果编辑涉及到关键的name字段需要重新更新一下tr节点\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n updateObjParams(obj);\r\n if (obj.field === options.tree.customName.name) {\r\n var updateData = {};\r\n updateData[obj.field] = obj.value;\r\n obj.update(updateData); // 通过update调用执行tr节点的更新\r\n }\r\n }\r\n });\r\n\r\n // 单选\r\n treeTable.on('radio', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n var that = getThisTable(tableId);\r\n updateObjParams(obj);\r\n checkNode.call(that, obj.tr, obj.checked)\r\n }\r\n })\r\n\r\n // 设置或取消行选中样式\r\n Class.prototype.setRowCheckedClass = function(tr, checked){\r\n var that = this;\r\n var options = that.getOptions();\r\n\r\n var index = tr.data('index');\r\n var tableViewElem = options.elem.next();\r\n \r\n tr[checked ? 'addClass' : 'removeClass'](ELEM_CHECKED); // 主体行\r\n\r\n // 右侧固定行\r\n tr.each(function(){\r\n var index = $(this).data('index');\r\n var trFixedR = tableViewElem.find('.layui-table-fixed-r tbody tr[data-index=\"'+ index +'\"]');\r\n trFixedR[checked ? 'addClass' : 'removeClass'](ELEM_CHECKED);\r\n });\r\n };\r\n\r\n // 更新表格的复选框状态\r\n Class.prototype.updateCheckStatus = function (dataP, checked) {\r\n var that = this;\r\n var options = that.getOptions();\r\n if (!options.hasChecboxCol) {\r\n return false; // 如果没有复选列则不需要更新状态\r\n }\r\n var treeOptions = options.tree;\r\n var tableId = options.id;\r\n var tableView = options.elem.next();\r\n\r\n var checkName = table.config.checkName;\r\n\r\n var cascade = treeOptions.data.cascade;\r\n var isCascadeParent = cascade === 'all' || cascade === 'parent';\r\n\r\n // 如有必要更新父节点们的状态\r\n if (isCascadeParent && dataP) {\r\n var trsP = that.updateParentCheckStatus(dataP, layui.type(checked) === 'boolean' ? checked : null);\r\n layui.each(trsP, function (indexP, itemP) {\r\n var checkboxElem = tableView.find('tr[lay-data-index=\"' + itemP[LAY_DATA_INDEX] + '\"] input[name=\"layTableCheckbox\"]:not(:disabled)');\r\n var checked = itemP[checkName];\r\n\r\n // 标记父节点行背景色\r\n that.setRowCheckedClass(checkboxElem.closest('tr'), checked);\r\n \r\n // 设置原始复选框 checked 属性值并渲染\r\n form.render(checkboxElem.prop({\r\n checked: checked,\r\n indeterminate: itemP[LAY_CHECKBOX_HALF]\r\n }))\r\n })\r\n }\r\n\r\n // 更新全选的状态\r\n var isAll = true;\r\n var isIndeterminate = false;\r\n var data = treeOptions.data.cascade === 'all' ? table.cache[tableId] : treeTable.getData(tableId, true);\r\n data = data.filter(function (item) {\r\n return !item[options.disabledName];\r\n });\r\n\r\n if(data.length > 0){\r\n layui.each(data, function (i1, item1) {\r\n if (item1[checkName] || item1[LAY_CHECKBOX_HALF]) {\r\n isIndeterminate = true;\r\n }\r\n if (!item1[checkName]) {\r\n isAll = false;\r\n }\r\n if (isIndeterminate && !isAll) {\r\n return true;\r\n }\r\n })\r\n }else{\r\n isAll = false;\r\n }\r\n \r\n isIndeterminate = isIndeterminate && !isAll;\r\n form.render(tableView.find('input[name=\"layTableCheckbox\"][lay-filter=\"layTableAllChoose\"]').prop({\r\n 'checked': isAll,\r\n indeterminate: isIndeterminate\r\n }));\r\n\r\n return isAll\r\n }\r\n\r\n // 更新父节点的选中状态\r\n Class.prototype.updateParentCheckStatus = function (dataP, checked) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableId = options.id;\r\n var checkName = table.config.checkName;\r\n var childrenKey = treeOptions.customName.children;\r\n\r\n var dataRet = [];\r\n dataP[LAY_CHECKBOX_HALF] = false; // 先设置为非半选,是否为半选又下面逻辑判断\r\n if (checked === true) {\r\n // 为真需要判断子节点的情况\r\n if (!dataP[childrenKey].length) {\r\n checked = false;\r\n } else {\r\n layui.each(dataP[childrenKey], function (index, item) {\r\n if (!item[checkName]) { // 只要有一个子节点为false\r\n checked = false;\r\n dataP[LAY_CHECKBOX_HALF] = true;\r\n return true; // 跳出循环\r\n }\r\n });\r\n }\r\n } else if (checked === false) {\r\n // 判断是否为半选\r\n layui.each(dataP[childrenKey], function (index, item) {\r\n if (item[checkName] || item[LAY_CHECKBOX_HALF]) { // 只要有一个子节点为选中或者半选状态\r\n dataP[LAY_CHECKBOX_HALF] = true;\r\n return true;\r\n }\r\n });\r\n } else {\r\n // 状态不确定的情况下根据子节点的信息\r\n checked = false;\r\n var checkedNum = 0;\r\n layui.each(dataP[childrenKey], function (index, item) {\r\n if (item[checkName]) {\r\n checkedNum++;\r\n }\r\n });\r\n checked = dataP[childrenKey].length ? dataP[childrenKey].length === checkedNum : dataP[checkName]; // 如果没有子节点保留原来的状态;\r\n dataP[LAY_CHECKBOX_HALF] = checked ? false : checkedNum > 0;\r\n }\r\n dataP[checkName] = checked;\r\n dataRet.push($.extend({}, dataP));\r\n if (dataP[LAY_PARENT_INDEX]) {\r\n dataRet = dataRet.concat(that.updateParentCheckStatus(table.cache[tableId][dataP[LAY_PARENT_INDEX]], checked));\r\n }\r\n return dataRet\r\n }\r\n\r\n var checkNode = function (trElem, checked, callbackFlag) {\r\n var that = this;\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n var tableId = options.id;\r\n var tableView = options.elem.next();\r\n var inputElem = (trElem.length ? trElem : tableView).find('.laytable-cell-radio, .laytable-cell-checkbox').children('input').last();\r\n // 判断是单选还是多选 不应该同时存在radio列和checkbox列\r\n var isRadio = inputElem.attr('type') === 'radio';\r\n\r\n if (callbackFlag) {\r\n var triggerEvent = function () {\r\n var fn = function (event) {\r\n layui.stope(event);\r\n }\r\n inputElem.parent().on('click', fn); // 添加临时的阻止冒泡事件\r\n inputElem.next().click();\r\n inputElem.parent().off('click', fn);\r\n }\r\n // 如果需要触发事件可以简单的触发对应节点的click事件\r\n if (isRadio) {\r\n // 单选只能选中或者切换其他的不能取消选中 后续看是否有支持的必要 todo\r\n if (checked && !inputElem.prop('checked')) {\r\n triggerEvent()\r\n }\r\n } else {\r\n if (layui.type(checked) === 'boolean') {\r\n if (inputElem.prop('checked') !== checked) {\r\n // 如果当前已经是想要修改的状态则不做处理\r\n triggerEvent()\r\n }\r\n } else {\r\n // 切换\r\n triggerEvent()\r\n }\r\n }\r\n } else {\r\n var trData = that.getNodeDataByIndex(trElem.attr('data-index'));\r\n var checkName = table.config.checkName;\r\n // 如果不触发事件应该有一个方法可以更新数据以及页面的节点\r\n if (isRadio) {\r\n if (!trData) {\r\n // 单选必须是一个存在的行\r\n return;\r\n }\r\n var statusChecked = {};\r\n statusChecked[checkName] = false;\r\n // that.updateStatus(null, statusChecked); // 取消其他的选中状态\r\n that.updateStatus(null, function (d) {\r\n if (d[checkName]) {\r\n var radioElem = tableView.find('tr[lay-data-index=\"' + d[LAY_DATA_INDEX] + '\"] input[type=\"radio\"][lay-type=\"layTableRadio\"]');\r\n d[checkName] = false;\r\n\r\n // 取消当前选中行背景色\r\n that.setRowCheckedClass(radioElem.closest('tr'), false);\r\n form.render(radioElem.prop('checked', false));\r\n }\r\n }); // 取消其他的选中状态\r\n trData[checkName] = checked;\r\n\r\n that.setRowCheckedClass(trElem, checked); // 标记当前选中行背景色\r\n that.setRowCheckedClass(trElem.siblings(), false); // 取消其他行背景色\r\n\r\n form.render(trElem.find('input[type=\"radio\"][lay-type=\"layTableRadio\"]').prop('checked', checked));\r\n } else {\r\n // 切换只能用到单条,全选到这一步的时候应该是一个确定的状态\r\n checked = layui.type(checked) === 'boolean' ? checked : !trData[checkName]; // 状态切换,如果遇到不可操作的节点待处理 todo\r\n // 全选或者是一个父节点,将子节点的状态同步为当前节点的状态\r\n // 处理不可操作的信息\r\n var checkedStatusFn = function (d) {\r\n if (!d[table.config.disabledName]) { // 节点不可操作的不处理\r\n d[checkName] = checked;\r\n d[LAY_CHECKBOX_HALF] = false;\r\n }\r\n }\r\n\r\n var trs = that.updateStatus(trData ? [trData] : table.cache[tableId], checkedStatusFn, trData && ['parent', 'none'].indexOf(treeOptions.data.cascade) !== -1);\r\n var checkboxElem = tableView.find(trs.map(function (value) {\r\n return 'tr[lay-data-index=\"' + value[LAY_DATA_INDEX] + '\"] input[name=\"layTableCheckbox\"]:not(:disabled)';\r\n }).join(','));\r\n\r\n that.setRowCheckedClass(checkboxElem.closest('tr'), checked); // 标记当前选中行背景色\r\n form.render(checkboxElem.prop({checked: checked, indeterminate: false}));\r\n\r\n var trDataP;\r\n\r\n // 更新父节点以及更上层节点的状态\r\n if (trData && trData[LAY_PARENT_INDEX]) {\r\n // 找到父节点,然后判断父节点的子节点是否全部选中\r\n trDataP = that.getNodeDataByIndex(trData[LAY_PARENT_INDEX]);\r\n }\r\n\r\n return that.updateCheckStatus(trDataP, checked);\r\n }\r\n }\r\n }\r\n\r\n // 多选\r\n treeTable.on('checkbox', function (obj) {\r\n var options = obj.config;\r\n var tableView = options.elem.next();\r\n var tableId = options.id;\r\n\r\n if (tableView.hasClass(TABLE_TREE)) {\r\n var that = getThisTable(tableId);\r\n var checked = obj.checked;\r\n updateObjParams(obj)\r\n obj.isAll = checkNode.call(that, obj.tr, checked);\r\n }\r\n })\r\n\r\n /**\r\n * 设置行选中状态\r\n * @param {String} id 树表id\r\n * @param {Object} opts\r\n * @param {Object|String} opts.index 节点下标\r\n * @param {Boolean} opts.checked 选中或取消\r\n * @param {Boolean} [opts.callbackFlag] 是否触发事件回调\r\n * */\r\n treeTable.setRowChecked = function (id, opts) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n\r\n var options = that.getOptions();\r\n var tableView = options.elem.next();\r\n\r\n opts = opts || {};\r\n\r\n var node = opts.index;\r\n var checked = opts.checked;\r\n var callbackFlag = opts.callbackFlag;\r\n\r\n var dataIndex = layui.type(node) === 'string' ? node : node[LAY_DATA_INDEX];\r\n // 判断是否在当前页面中\r\n var nodeData = that.getNodeDataByIndex(dataIndex);\r\n if (!nodeData) {\r\n // 目前只能处理当前页的数据\r\n return;\r\n }\r\n\r\n var collectNeedExpandNodeIndex = function(index){\r\n needExpandIndex.push(index);\r\n var trElem = tableView.find('tr[lay-data-index=\"' + index + '\"]');\r\n if (!trElem.length) {\r\n var nodeData = that.getNodeDataByIndex(index);\r\n var parentIndex = nodeData[LAY_PARENT_INDEX];\r\n parentIndex && collectNeedExpandNodeIndex(parentIndex);\r\n }\r\n }\r\n\r\n // 判断是否展开过\r\n var trElem = tableView.find('tr[lay-data-index=\"' + dataIndex + '\"]');\r\n if (!trElem.length) {\r\n var parentIndex = nodeData[LAY_PARENT_INDEX];\r\n var needExpandIndex = [];\r\n collectNeedExpandNodeIndex(parentIndex);\r\n // 如果还没有展开没有渲染的要先渲染出来\r\n layui.each(needExpandIndex.reverse(),function(index, nodeIndex){\r\n treeTable.expandNode(id, {\r\n index: nodeIndex,\r\n expandFlag: true\r\n });\r\n })\r\n trElem = tableView.find('tr[lay-data-index=\"' + dataIndex + '\"]');\r\n }\r\n checkNode.call(that, trElem, checked, callbackFlag);\r\n }\r\n\r\n treeTable.checkAllNodes = function (id, checked) {\r\n var that = getThisTable(id);\r\n if(!that) return;\r\n\r\n var options = that.getOptions();\r\n var tableView = options.elem.next();\r\n\r\n checkNode.call(that, tableView.find('tr[data-index=\"NONE\"]'), !!checked)\r\n }\r\n\r\n /**\r\n * 获得数据\r\n * @param {String} id 表格id\r\n * @param {Boolean} [isSimpleData] 是否返回平铺结构的数据\r\n * @return {Array} 表格数据\r\n * */\r\n treeTable.getData = function (id, isSimpleData) {\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n\r\n var tableData = [];\r\n layui.each($.extend(true, [], table.cache[id] || []), function (index, item) {\r\n // 遍历排除掉临时的数据\r\n tableData.push(item);\r\n })\r\n return isSimpleData ? that.treeToFlat(tableData) : tableData;\r\n }\r\n\r\n /**\r\n * 重新加载子节点\r\n * @param {String} id 表格id\r\n * @param {String} dataIndex 父节点的dataIndex\r\n * */\r\n treeTable.reloadAsyncNode = function (id, dataIndex) {\r\n var that = getThisTable(id);\r\n if (!that) {\r\n return;\r\n }\r\n\r\n var options = that.getOptions();\r\n var treeOptions = options.tree;\r\n if (!treeOptions.async || !treeOptions.async.enable) {\r\n return;\r\n }\r\n var dataP = that.getNodeDataByIndex(dataIndex);\r\n if (!dataP) {\r\n return;\r\n }\r\n dataP[LAY_HAS_EXPANDED] = false;\r\n dataP[LAY_EXPAND] = false;\r\n dataP[LAY_ASYNC_STATUS] = false;\r\n layui.each(that.treeToFlat(dataP[treeOptions.customName.children]).reverse(), function (i1, item1) {\r\n treeTable.removeNode(id, item1[LAY_DATA_INDEX], true);\r\n })\r\n // 重新展开\r\n treeTable.expandNode(id, {\r\n index: dataIndex,\r\n expandFlag: true,\r\n callbackFlag: true,\r\n })\r\n }\r\n\r\n /**\r\n * 通过数据id获取节点对象\r\n * */\r\n treeTable.getNodeById = function (id, dataId) {\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n\r\n return that.getNodeById(dataId);\r\n }\r\n\r\n /**\r\n * 根据自定义规则搜索节点数据\r\n * @param {String} id 树表id\r\n * @param {Function} filter 自定义过滤器函数\r\n * @param {Object} [opts]\r\n * @param {Boolean} [opts.isSingle] 是否只找到第一个\r\n * @param {Object} [opts.parentNode] 在指定在某个父节点下的子节点中搜索\r\n * @return {Object} 节点对象\r\n * */\r\n treeTable.getNodesByFilter = function (id, filter, opts) {\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n var options = that.getOptions();\r\n\r\n opts = opts || {};\r\n var isSingle = opts.isSingle;\r\n var parentNode = opts.parentNode;\r\n var dataP = parentNode && parentNode.data;\r\n // dataP = dataP || table.cache[id];\r\n var nodes = that.treeToFlat(dataP ? (dataP[options.tree.customName.children] || []) : table.cache[id]).filter(filter);\r\n var nodesResult = [];\r\n layui.each(nodes, function (i1, item1) {\r\n nodesResult.push(that.getNodeByIndex(item1[LAY_DATA_INDEX]));\r\n if (isSingle) {\r\n return true;\r\n }\r\n });\r\n\r\n return nodesResult;\r\n }\r\n\r\n\r\n // 记录所有实例\r\n thisTreeTable.that = {}; // 记录所有实例对象\r\n // thisTreeTable.config = {}; // 记录所有实例配置项\r\n\r\n // 重载\r\n treeTable.reload = function (id, options, deep, type) {\r\n // deep = deep !== false; // 默认采用深拷贝\r\n var that = getThisTable(id);\r\n if (!that) return;\r\n that.reload(options, deep, type);\r\n return thisTreeTable.call(that);\r\n };\r\n\r\n // 核心入口\r\n treeTable.render = function (options) {\r\n var inst = new Class(options);\r\n return thisTreeTable.call(inst);\r\n };\r\n\r\n exports(MOD_NAME, treeTable);\r\n});\r\n","/**\r\n * tree 树组件\r\n */\r\n\r\nlayui.define(['form','util'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var form = layui.form;\r\n var layer = layui.layer;\r\n var util = layui.util;\r\n \r\n // 模块名\r\n var MOD_NAME = 'tree';\r\n\r\n // 外部接口\r\n var tree = {\r\n config: {\r\n customName: { // 自定义 data 字段名\r\n id: 'id',\r\n title: 'title',\r\n children: 'children'\r\n }\r\n },\r\n index: layui[MOD_NAME] ? (layui[MOD_NAME].index + 10000) : 0,\r\n\r\n // 设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n \r\n // 事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n };\r\n\r\n // 操作当前实例\r\n var thisModule = function(){\r\n var that = this;\r\n var options = that.config;\r\n var id = options.id || that.index;\r\n \r\n thisModule.that[id] = that; // 记录当前实例对象\r\n thisModule.config[id] = options; // 记录当前实例配置项\r\n \r\n return {\r\n config: options,\r\n // 重置实例\r\n reload: function(options){\r\n that.reload.call(that, options);\r\n },\r\n getChecked: function(){\r\n return that.getChecked.call(that);\r\n },\r\n setChecked: function(id){// 设置值\r\n return that.setChecked.call(that, id);\r\n }\r\n }\r\n };\r\n \r\n // 获取当前实例配置项\r\n var getThisModuleConfig = function(id){\r\n var config = thisModule.config[id];\r\n if(!config) hint.error('The ID option was not found in the '+ MOD_NAME +' instance');\r\n return config || null;\r\n }\r\n\r\n // 字符常量\r\n var SHOW = 'layui-show';\r\n var HIDE = 'layui-hide';\r\n var NONE = 'layui-none';\r\n var DISABLED = 'layui-disabled';\r\n \r\n var ELEM_VIEW = 'layui-tree';\r\n var ELEM_SET = 'layui-tree-set';\r\n var ICON_CLICK = 'layui-tree-iconClick';\r\n var ICON_ADD = 'layui-icon-addition';\r\n var ICON_SUB = 'layui-icon-subtraction';\r\n var ELEM_ENTRY = 'layui-tree-entry';\r\n var ELEM_MAIN = 'layui-tree-main';\r\n var ELEM_TEXT = 'layui-tree-txt';\r\n var ELEM_PACK = 'layui-tree-pack';\r\n var ELEM_SPREAD = 'layui-tree-spread';\r\n var ELEM_LINE_SHORT = 'layui-tree-setLineShort';\r\n var ELEM_SHOW = 'layui-tree-showLine';\r\n var ELEM_EXTEND = 'layui-tree-lineExtend';\r\n \r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++tree.index;\r\n that.config = $.extend({}, that.config, tree.config, options);\r\n that.render();\r\n };\r\n\r\n // 默认配置\r\n Class.prototype.config = {\r\n data: [], // 数据\r\n \r\n showCheckbox: false, // 是否显示复选框\r\n showLine: true, // 是否开启连接线\r\n accordion: false, // 是否开启手风琴模式\r\n onlyIconControl: false, // 是否仅允许节点左侧图标控制展开收缩\r\n isJump: false, // 是否允许点击节点时弹出新窗口跳转\r\n edit: false, // 是否开启节点的操作图标\r\n \r\n text: {\r\n defaultNodeName: '未命名', // 节点默认名称\r\n none: '无数据' // 数据为空时的文本提示\r\n }\r\n };\r\n \r\n // 重载实例\r\n Class.prototype.reload = function(options){\r\n var that = this;\r\n \r\n layui.each(options, function(key, item){\r\n if(layui.type(item) === 'array') delete that.config[key];\r\n });\r\n \r\n that.config = $.extend(true, {}, that.config, options);\r\n that.render();\r\n };\r\n\r\n // 主体渲染\r\n Class.prototype.render = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 初始化自定义字段名\r\n options.customName = $.extend({}, tree.config.customName, options.customName);\r\n \r\n that.checkids = [];\r\n\r\n var temp = $('
              ');\r\n that.tree(temp);\r\n\r\n var othis = options.elem = $(options.elem);\r\n if(!othis[0]) return;\r\n\r\n // 索引\r\n that.key = options.id || that.index;\r\n \r\n // 插入组件结构\r\n that.elem = temp;\r\n that.elemNone = $('
              '+ options.text.none +'
              ');\r\n othis.html(that.elem);\r\n\r\n if(that.elem.find('.layui-tree-set').length == 0){\r\n return that.elem.append(that.elemNone);\r\n };\r\n \r\n // 复选框渲染\r\n if(options.showCheckbox){\r\n that.renderForm('checkbox');\r\n };\r\n\r\n that.elem.find('.layui-tree-set').each(function(){\r\n var othis = $(this);\r\n // 最外层\r\n if(!othis.parent('.layui-tree-pack')[0]){\r\n othis.addClass('layui-tree-setHide');\r\n };\r\n\r\n // 没有下一个节点 上一层父级有延伸线\r\n if(!othis.next()[0] && othis.parents('.layui-tree-pack').eq(1).hasClass('layui-tree-lineExtend')){\r\n othis.addClass(ELEM_LINE_SHORT);\r\n };\r\n \r\n // 没有下一个节点 外层最后一个\r\n if(!othis.next()[0] && !othis.parents('.layui-tree-set').eq(0).next()[0]){\r\n othis.addClass(ELEM_LINE_SHORT);\r\n };\r\n });\r\n\r\n that.events();\r\n };\r\n \r\n // 渲染表单\r\n Class.prototype.renderForm = function(type){\r\n form.render(type, 'LAY-tree-'+ this.index);\r\n };\r\n\r\n // 节点解析\r\n Class.prototype.tree = function(elem, children){\r\n var that = this;\r\n var options = that.config;\r\n var customName = options.customName;\r\n var data = children || options.data;\r\n\r\n // 遍历数据\r\n layui.each(data, function(index, item){\r\n var hasChild = item[customName.children] && item[customName.children].length > 0;\r\n var packDiv = $('
              ');\r\n var entryDiv = $(['
              '\r\n ,'
              '\r\n ,'
              '\r\n // 箭头\r\n ,function(){\r\n if(options.showLine){\r\n if(hasChild){\r\n return '';\r\n }else{\r\n return '';\r\n };\r\n }else{\r\n return '';\r\n };\r\n }()\r\n \r\n // 复选框\r\n ,function(){\r\n return options.showCheckbox ? '' : '';\r\n }()\r\n \r\n // 节点\r\n ,function(){\r\n if(options.isJump && item.href){\r\n return ''+ (item[customName.title] || item.label || options.text.defaultNodeName) +'';\r\n }else{\r\n return ''+ (item[customName.title] || item.label || options.text.defaultNodeName) +'';\r\n }\r\n }()\r\n ,'
              '\r\n \r\n // 节点操作图标\r\n ,function(){\r\n if(!options.edit) return '';\r\n \r\n var editIcon = {\r\n add: ''\r\n ,update: ''\r\n ,del: ''\r\n }, arr = ['
              '];\r\n \r\n if(options.edit === true){\r\n options.edit = ['update', 'del']\r\n }\r\n \r\n if(typeof options.edit === 'object'){\r\n layui.each(options.edit, function(i, val){\r\n arr.push(editIcon[val] || '')\r\n });\r\n return arr.join('') + '
              ';\r\n }\r\n }()\r\n ,'
              '].join(''));\r\n\r\n // 如果有子节点,则递归继续生成树\r\n if(hasChild){\r\n entryDiv.append(packDiv);\r\n that.tree(packDiv, item[customName.children]);\r\n };\r\n\r\n elem.append(entryDiv);\r\n \r\n // 若有前置节点,前置节点加连接线\r\n if(entryDiv.prev('.'+ELEM_SET)[0]){\r\n entryDiv.prev().children('.layui-tree-pack').addClass('layui-tree-showLine');\r\n };\r\n \r\n // 若无子节点,则父节点加延伸线\r\n if(!hasChild){\r\n entryDiv.parent('.layui-tree-pack').addClass('layui-tree-lineExtend');\r\n };\r\n\r\n // 展开节点操作\r\n that.spread(entryDiv, item);\r\n \r\n // 选择框\r\n if(options.showCheckbox){\r\n item.checked && that.checkids.push(item[customName.id]);\r\n that.checkClick(entryDiv, item);\r\n }\r\n \r\n // 操作节点\r\n options.edit && that.operate(entryDiv, item);\r\n \r\n });\r\n };\r\n\r\n // 展开节点\r\n Class.prototype.spread = function(elem, item){\r\n var that = this;\r\n var options = that.config;\r\n var entry = elem.children('.'+ELEM_ENTRY);\r\n var elemMain = entry.children('.'+ ELEM_MAIN);\r\n var elemCheckbox = elemMain.find('input[same=\"layuiTreeCheck\"]');\r\n var elemIcon = entry.find('.'+ ICON_CLICK);\r\n var elemText = entry.find('.'+ ELEM_TEXT);\r\n var touchOpen = options.onlyIconControl ? elemIcon : elemMain; // 判断展开通过节点还是箭头图标\r\n var state = '';\r\n \r\n // 展开收缩\r\n touchOpen.on('click', function(e){\r\n var packCont = elem.children('.'+ELEM_PACK)\r\n ,iconClick = touchOpen.children('.layui-icon')[0] ? touchOpen.children('.layui-icon') : touchOpen.find('.layui-tree-icon').children('.layui-icon');\r\n\r\n // 若没有子节点\r\n if(!packCont[0]){\r\n state = 'normal';\r\n }else{\r\n if(elem.hasClass(ELEM_SPREAD)){\r\n elem.removeClass(ELEM_SPREAD);\r\n packCont.slideUp(200);\r\n iconClick.removeClass(ICON_SUB).addClass(ICON_ADD); \r\n that.updateFieldValue(item, 'spread', false);\r\n }else{\r\n elem.addClass(ELEM_SPREAD);\r\n packCont.slideDown(200);\r\n iconClick.addClass(ICON_SUB).removeClass(ICON_ADD);\r\n that.updateFieldValue(item, 'spread', true);\r\n\r\n // 是否手风琴\r\n if(options.accordion){\r\n var sibls = elem.siblings('.'+ELEM_SET);\r\n sibls.removeClass(ELEM_SPREAD);\r\n sibls.children('.'+ELEM_PACK).slideUp(200);\r\n sibls.find('.layui-tree-icon').children('.layui-icon').removeClass(ICON_SUB).addClass(ICON_ADD);\r\n };\r\n };\r\n };\r\n });\r\n \r\n // 点击回调\r\n elemText.on('click', function(){\r\n var othis = $(this);\r\n \r\n // 判断是否禁用状态\r\n if(othis.hasClass(DISABLED)) return;\r\n \r\n // 判断展开收缩状态\r\n if(elem.hasClass(ELEM_SPREAD)){\r\n state = options.onlyIconControl ? 'open' : 'close';\r\n } else {\r\n state = options.onlyIconControl ? 'close' : 'open';\r\n }\r\n\r\n // 获取选中状态\r\n if(elemCheckbox[0]){\r\n that.updateFieldValue(item, 'checked', elemCheckbox.prop('checked'));\r\n }\r\n \r\n // 点击产生的回调\r\n options.click && options.click({\r\n elem: elem,\r\n state: state,\r\n data: item\r\n });\r\n });\r\n };\r\n\r\n // 更新数据源 checked,spread 字段值\r\n Class.prototype.updateFieldValue = function(obj, field, value){\r\n if(field in obj) obj[field] = value;\r\n };\r\n \r\n // 计算复选框选中状态\r\n Class.prototype.setCheckbox = function(elem, item, elemCheckbox){\r\n var that = this;\r\n var options = that.config;\r\n var customName = options.customName;\r\n var checked = elemCheckbox.prop('checked');\r\n \r\n if(elemCheckbox.prop('disabled')) return;\r\n\r\n // 同步子节点选中状态\r\n if(typeof item[customName.children] === 'object' || elem.find('.'+ELEM_PACK)[0]){\r\n var elemCheckboxs = elem.find('.'+ ELEM_PACK).find('input[same=\"layuiTreeCheck\"]');\r\n elemCheckboxs.each(function(index){\r\n if(this.disabled) return; // 不可点击则跳过\r\n var children = item[customName.children][index];\r\n if(children) that.updateFieldValue(children, 'checked', checked);\r\n that.updateFieldValue(this, 'checked', checked);\r\n });\r\n };\r\n\r\n // 同步父节点选中状态\r\n var setParentsChecked = function(thisNodeElem){\r\n // 若无父节点,则终止递归\r\n if(!thisNodeElem.parents('.'+ ELEM_SET)[0]) return;\r\n\r\n var state;\r\n var parentPack = thisNodeElem.parent('.'+ ELEM_PACK);\r\n var parentNodeElem = parentPack.parent();\r\n var parentCheckbox = parentPack.prev().find('input[same=\"layuiTreeCheck\"]');\r\n\r\n // 如果子节点有任意一条选中,则父节点为选中状态\r\n if(checked){\r\n parentCheckbox.prop('checked', checked);\r\n } else { // 如果当前节点取消选中,则根据计算“兄弟和子孙”节点选中状态,来同步父节点选中状态\r\n parentPack.find('input[same=\"layuiTreeCheck\"]').each(function(){\r\n if(this.checked){\r\n state = true;\r\n }\r\n });\r\n \r\n // 如果兄弟子孙节点全部未选中,则父节点也应为非选中状态\r\n state || parentCheckbox.prop('checked', false);\r\n }\r\n \r\n // 向父节点递归\r\n setParentsChecked(parentNodeElem);\r\n };\r\n \r\n setParentsChecked(elem);\r\n\r\n that.renderForm('checkbox');\r\n };\r\n \r\n // 复选框选择\r\n Class.prototype.checkClick = function(elem, item){\r\n var that = this;\r\n var options = that.config;\r\n var entry = elem.children('.'+ ELEM_ENTRY);\r\n var elemMain = entry.children('.'+ ELEM_MAIN);\r\n \r\n \r\n \r\n // 点击复选框\r\n elemMain.on('click', 'input[same=\"layuiTreeCheck\"]+', function(e){\r\n layui.stope(e); // 阻止点击节点事件\r\n\r\n var elemCheckbox = $(this).prev();\r\n var checked = elemCheckbox.prop('checked');\r\n \r\n if(elemCheckbox.prop('disabled')) return;\r\n \r\n that.setCheckbox(elem, item, elemCheckbox);\r\n that.updateFieldValue(item, 'checked', checked);\r\n\r\n // 复选框点击产生的回调\r\n options.oncheck && options.oncheck({\r\n elem: elem,\r\n checked: checked,\r\n data: item\r\n });\r\n });\r\n };\r\n\r\n // 节点操作\r\n Class.prototype.operate = function(elem, item){\r\n var that = this;\r\n var options = that.config;\r\n var customName = options.customName;\r\n var entry = elem.children('.'+ ELEM_ENTRY);\r\n var elemMain = entry.children('.'+ ELEM_MAIN);\r\n\r\n entry.children('.layui-tree-btnGroup').on('click', '.layui-icon', function(e){\r\n layui.stope(e); // 阻止节点操作\r\n\r\n var type = $(this).data(\"type\");\r\n var packCont = elem.children('.'+ELEM_PACK);\r\n var returnObj = {\r\n data: item,\r\n type: type,\r\n elem:elem\r\n };\r\n // 增加\r\n if(type == 'add'){\r\n // 若节点本身无子节点\r\n if(!packCont[0]){\r\n // 若开启连接线,更改图标样式\r\n if(options.showLine){\r\n elemMain.find('.'+ICON_CLICK).addClass('layui-tree-icon');\r\n elemMain.find('.'+ICON_CLICK).children('.layui-icon').addClass(ICON_ADD).removeClass('layui-icon-file');\r\n // 若未开启连接线,显示箭头\r\n } else {\r\n elemMain.find('.layui-tree-iconArrow').removeClass(HIDE);\r\n };\r\n // 节点添加子节点容器\r\n elem.append('
              ');\r\n };\r\n\r\n // 新增节点\r\n var key = options.operate && options.operate(returnObj);\r\n var obj = {};\r\n\r\n obj[customName.title] = options.text.defaultNodeName;\r\n obj[customName.id] = key;\r\n that.tree(elem.children('.'+ELEM_PACK), [obj]);\r\n \r\n // 放在新增后面,因为要对元素进行操作\r\n if(options.showLine){\r\n // 节点本身无子节点\r\n if(!packCont[0]){\r\n // 遍历兄弟节点,判断兄弟节点是否有子节点\r\n var siblings = elem.siblings('.'+ELEM_SET)\r\n var num = 1;\r\n var parentPack = elem.parent('.'+ELEM_PACK);\r\n\r\n layui.each(siblings, function(index, i){\r\n if(!$(i).children('.'+ELEM_PACK)[0]){\r\n num = 0;\r\n };\r\n });\r\n\r\n // 若兄弟节点都有子节点\r\n if(num == 1){\r\n // 兄弟节点添加连接线\r\n siblings.children('.'+ELEM_PACK).addClass(ELEM_SHOW);\r\n siblings.children('.'+ELEM_PACK).children('.'+ELEM_SET).removeClass(ELEM_LINE_SHORT);\r\n elem.children('.'+ELEM_PACK).addClass(ELEM_SHOW);\r\n // 父级移除延伸线\r\n parentPack.removeClass(ELEM_EXTEND);\r\n // 同层节点最后一个更改线的状态\r\n parentPack.children('.'+ELEM_SET).last().children('.'+ELEM_PACK).children('.'+ELEM_SET).last().addClass(ELEM_LINE_SHORT);\r\n } else {\r\n elem.children('.'+ELEM_PACK).children('.'+ELEM_SET).addClass(ELEM_LINE_SHORT);\r\n };\r\n } else {\r\n // 添加延伸线\r\n if(!packCont.hasClass(ELEM_EXTEND)){\r\n packCont.addClass(ELEM_EXTEND);\r\n };\r\n // 子节点添加延伸线\r\n elem.find('.'+ELEM_PACK).each(function(){\r\n $(this).children('.'+ELEM_SET).last().addClass(ELEM_LINE_SHORT);\r\n });\r\n // 如果前一个节点有延伸线\r\n if(packCont.children('.'+ELEM_SET).last().prev().hasClass(ELEM_LINE_SHORT)){\r\n packCont.children('.'+ELEM_SET).last().prev().removeClass(ELEM_LINE_SHORT);\r\n }else{\r\n // 若之前的没有,说明处于连接状态\r\n packCont.children('.'+ELEM_SET).last().removeClass(ELEM_LINE_SHORT);\r\n };\r\n // 若是最外层,要始终保持相连的状态\r\n if(!elem.parent('.'+ELEM_PACK)[0] && elem.next()[0]){\r\n packCont.children('.'+ELEM_SET).last().removeClass(ELEM_LINE_SHORT);\r\n };\r\n };\r\n };\r\n if(!options.showCheckbox) return;\r\n // 若开启复选框,同步新增节点状态\r\n if(elemMain.find('input[same=\"layuiTreeCheck\"]')[0].checked){\r\n var packLast = elem.children('.'+ELEM_PACK).children('.'+ELEM_SET).last();\r\n packLast.find('input[same=\"layuiTreeCheck\"]')[0].checked = true;\r\n };\r\n that.renderForm('checkbox');\r\n \r\n // 修改\r\n } else if(type == 'update') {\r\n var text = elemMain.children('.'+ ELEM_TEXT).html();\r\n elemMain.children('.'+ ELEM_TEXT).html('');\r\n // 添加输入框,覆盖在文字上方\r\n elemMain.append('');\r\n // 获取焦点\r\n elemMain.children('.layui-tree-editInput').val(util.unescape(text)).focus();\r\n // 嵌入文字移除输入框\r\n var getVal = function(input){\r\n var textNew = util.escape(input.val().trim());\r\n textNew = textNew ? textNew : options.text.defaultNodeName;\r\n input.remove();\r\n elemMain.children('.'+ ELEM_TEXT).html(textNew);\r\n \r\n // 同步数据\r\n returnObj.data[customName.title] = textNew;\r\n \r\n // 节点修改的回调\r\n options.operate && options.operate(returnObj);\r\n };\r\n // 失去焦点\r\n elemMain.children('.layui-tree-editInput').blur(function(){\r\n getVal($(this));\r\n });\r\n // 回车\r\n elemMain.children('.layui-tree-editInput').on('keydown', function(e){\r\n if(e.keyCode === 13){\r\n e.preventDefault();\r\n getVal($(this));\r\n };\r\n });\r\n\r\n // 删除\r\n } else {\r\n layer.confirm('确认删除该节点 \"'+ (item[customName.title] || '') +'\" 吗?', function(index){\r\n options.operate && options.operate(returnObj); // 节点删除的回调\r\n returnObj.status = 'remove'; // 标注节点删除\r\n \r\n layer.close(index);\r\n \r\n // 若删除最后一个,显示空数据提示\r\n if(!elem.prev('.'+ELEM_SET)[0] && !elem.next('.'+ELEM_SET)[0] && !elem.parent('.'+ELEM_PACK)[0]){\r\n elem.remove();\r\n that.elem.append(that.elemNone);\r\n return;\r\n };\r\n // 若有兄弟节点\r\n if(elem.siblings('.'+ELEM_SET).children('.'+ELEM_ENTRY)[0]){\r\n // 若开启复选框\r\n if(options.showCheckbox){\r\n // 若开启复选框,进行下步操作\r\n var elemDel = function(elem){\r\n // 若无父结点,则不执行\r\n if(!elem.parents('.'+ELEM_SET)[0]) return;\r\n var siblingTree = elem.siblings('.'+ELEM_SET).children('.'+ELEM_ENTRY);\r\n var parentTree = elem.parent('.'+ELEM_PACK).prev();\r\n var checkState = parentTree.find('input[same=\"layuiTreeCheck\"]')[0];\r\n var state = 1;\r\n var num = 0;\r\n\r\n // 若父节点未勾选\r\n if(checkState.checked == false){\r\n // 遍历兄弟节点\r\n siblingTree.each(function(i, item1){\r\n var input = $(item1).find('input[same=\"layuiTreeCheck\"]')[0]\r\n if(input.checked == false && !input.disabled){\r\n state = 0;\r\n };\r\n // 判断是否全为不可勾选框\r\n if(!input.disabled){\r\n num = 1;\r\n };\r\n });\r\n // 若有可勾选选择框并且已勾选\r\n if(state == 1 && num == 1){\r\n // 勾选父节点\r\n checkState.checked = true;\r\n that.renderForm('checkbox');\r\n // 向上遍历祖先节点\r\n elemDel(parentTree.parent('.'+ELEM_SET));\r\n };\r\n };\r\n };\r\n elemDel(elem);\r\n };\r\n // 若开启连接线\r\n if(options.showLine){\r\n // 遍历兄弟节点,判断兄弟节点是否有子节点\r\n var siblings = elem.siblings('.'+ELEM_SET);\r\n var num = 1;\r\n var parentPack = elem.parent('.'+ELEM_PACK);\r\n\r\n layui.each(siblings, function(index, i){\r\n if(!$(i).children('.'+ELEM_PACK)[0]){\r\n num = 0;\r\n };\r\n });\r\n // 若兄弟节点都有子节点\r\n if(num == 1){\r\n // 若节点本身无子节点\r\n if(!packCont[0]){\r\n // 父级去除延伸线,因为此时子节点里没有空节点\r\n parentPack.removeClass(ELEM_EXTEND);\r\n siblings.children('.'+ELEM_PACK).addClass(ELEM_SHOW);\r\n siblings.children('.'+ELEM_PACK).children('.'+ELEM_SET).removeClass(ELEM_LINE_SHORT);\r\n };\r\n // 若为最后一个节点\r\n if(!elem.next()[0]){\r\n elem.prev().children('.'+ELEM_PACK).children('.'+ELEM_SET).last().addClass(ELEM_LINE_SHORT);\r\n }else{\r\n parentPack.children('.'+ELEM_SET).last().children('.'+ELEM_PACK).children('.'+ELEM_SET).last().addClass(ELEM_LINE_SHORT);\r\n };\r\n // 若为最外层最后一个节点,去除前一个结点的连接线\r\n if(!elem.next()[0] && !elem.parents('.'+ELEM_SET)[1] && !elem.parents('.'+ELEM_SET).eq(0).next()[0]){\r\n elem.prev('.'+ELEM_SET).addClass(ELEM_LINE_SHORT);\r\n };\r\n }else{\r\n // 若为最后一个节点且有延伸线\r\n if(!elem.next()[0] && elem.hasClass(ELEM_LINE_SHORT)){\r\n elem.prev().addClass(ELEM_LINE_SHORT);\r\n };\r\n };\r\n };\r\n \r\n } else {\r\n // 若无兄弟节点\r\n var prevDiv = elem.parent('.'+ELEM_PACK).prev();\r\n // 若开启了连接线\r\n if(options.showLine){\r\n prevDiv.find('.'+ICON_CLICK).removeClass('layui-tree-icon');\r\n prevDiv.find('.'+ICON_CLICK).children('.layui-icon').removeClass(ICON_SUB).addClass('layui-icon-file');\r\n // 父节点所在层添加延伸线\r\n var pare = prevDiv.parents('.'+ELEM_PACK).eq(0);\r\n pare.addClass(ELEM_EXTEND);\r\n\r\n // 兄弟节点最后子节点添加延伸线\r\n pare.children('.'+ELEM_SET).each(function(){\r\n $(this).children('.'+ELEM_PACK).children('.'+ELEM_SET).last().addClass(ELEM_LINE_SHORT);\r\n });\r\n }else{\r\n // 父节点隐藏箭头\r\n prevDiv.find('.layui-tree-iconArrow').addClass(HIDE);\r\n };\r\n // 移除展开属性\r\n elem.parents('.'+ELEM_SET).eq(0).removeClass(ELEM_SPREAD);\r\n // 移除节点容器\r\n elem.parent('.'+ELEM_PACK).remove();\r\n };\r\n\r\n elem.remove();\r\n });\r\n \r\n };\r\n });\r\n };\r\n\r\n // 部分事件\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n var checkWarp = that.elem.find('.layui-tree-checkedFirst');\r\n \r\n // 初始选中\r\n that.setChecked(that.checkids);\r\n \r\n // 搜索\r\n that.elem.find('.layui-tree-search').on('keyup', function(){\r\n var input = $(this);\r\n var val = input.val();\r\n var pack = input.nextAll();\r\n var arr = [];\r\n\r\n // 遍历所有的值\r\n pack.find('.'+ ELEM_TEXT).each(function(){\r\n var entry = $(this).parents('.'+ELEM_ENTRY);\r\n // 若值匹配,加一个类以作标识\r\n if($(this).html().indexOf(val) != -1){\r\n arr.push($(this).parent());\r\n \r\n var select = function(div){\r\n div.addClass('layui-tree-searchShow');\r\n // 向上父节点渲染\r\n if(div.parent('.'+ELEM_PACK)[0]){\r\n select(div.parent('.'+ELEM_PACK).parent('.'+ELEM_SET));\r\n };\r\n };\r\n select(entry.parent('.'+ELEM_SET));\r\n };\r\n });\r\n\r\n // 根据标志剔除\r\n pack.find('.'+ELEM_ENTRY).each(function(){\r\n var parent = $(this).parent('.'+ELEM_SET);\r\n if(!parent.hasClass('layui-tree-searchShow')){\r\n parent.addClass(HIDE);\r\n };\r\n });\r\n if(pack.find('.layui-tree-searchShow').length == 0){\r\n that.elem.append(that.elemNone);\r\n };\r\n\r\n // 节点过滤的回调\r\n options.onsearch && options.onsearch({\r\n elem: arr\r\n });\r\n });\r\n\r\n // 还原搜索初始状态\r\n that.elem.find('.layui-tree-search').on('keydown', function(){\r\n $(this).nextAll().find('.'+ELEM_ENTRY).each(function(){\r\n var parent = $(this).parent('.'+ELEM_SET);\r\n parent.removeClass('layui-tree-searchShow '+ HIDE);\r\n });\r\n if($('.layui-tree-emptyText')[0]) $('.layui-tree-emptyText').remove();\r\n });\r\n };\r\n\r\n // 得到选中节点\r\n Class.prototype.getChecked = function(){\r\n var that = this;\r\n var options = that.config;\r\n var customName = options.customName;\r\n var checkId = [];\r\n var checkData = [];\r\n \r\n // 遍历节点找到选中索引\r\n that.elem.find('.layui-form-checked').each(function(){\r\n checkId.push($(this).prev()[0].value);\r\n });\r\n \r\n // 遍历节点\r\n var eachNodes = function(data, checkNode){\r\n layui.each(data, function(index, item){\r\n layui.each(checkId, function(index2, item2){\r\n if(item[customName.id] == item2){\r\n that.updateFieldValue(item, 'checked', true);\r\n\r\n var cloneItem = $.extend({}, item);\r\n delete cloneItem[customName.children];\r\n\r\n checkNode.push(cloneItem);\r\n \r\n if(item[customName.children]){\r\n cloneItem[customName.children] = [];\r\n eachNodes(item[customName.children], cloneItem[customName.children]);\r\n }\r\n return true\r\n }\r\n });\r\n });\r\n };\r\n\r\n eachNodes($.extend({}, options.data), checkData);\r\n \r\n return checkData;\r\n };\r\n\r\n // 设置选中节点\r\n Class.prototype.setChecked = function(checkedId){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 初始选中\r\n that.elem.find('.'+ELEM_SET).each(function(i, item){\r\n var thisId = $(this).data('id');\r\n var input = $(item).children('.'+ELEM_ENTRY).find('input[same=\"layuiTreeCheck\"]');\r\n var reInput = input.next();\r\n \r\n // 若返回数字\r\n if(typeof checkedId === 'number'){\r\n if(thisId.toString() == checkedId.toString()){\r\n if(!input[0].checked){\r\n reInput.click();\r\n };\r\n return false;\r\n };\r\n } \r\n // 若返回数组\r\n else if(typeof checkedId === 'object'){\r\n layui.each(checkedId, function(index, value){\r\n if(value.toString() == thisId.toString() && !input[0].checked){\r\n reInput.click();\r\n return true;\r\n }\r\n });\r\n };\r\n });\r\n };\r\n\r\n // 记录所有实例\r\n thisModule.that = {}; // 记录所有实例对象\r\n thisModule.config = {}; // 记录所有实例配置项\r\n \r\n // 重载实例\r\n tree.reload = function(id, options){\r\n var that = thisModule.that[id];\r\n that.reload(options);\r\n \r\n return thisModule.call(that);\r\n };\r\n \r\n // 获得选中的节点数据\r\n tree.getChecked = function(id){\r\n var that = thisModule.that[id];\r\n return that.getChecked();\r\n };\r\n \r\n // 设置选中节点\r\n tree.setChecked = function(id, checkedId){\r\n var that = thisModule.that[id];\r\n return that.setChecked(checkedId);\r\n };\r\n \r\n // 核心入口\r\n tree.render = function(options){\r\n var inst = new Class(options);\r\n return thisModule.call(inst);\r\n };\r\n\r\n exports(MOD_NAME, tree);\r\n})\r\n","/**\r\n * transfer 穿梭框组件\r\n */\r\n\r\nlayui.define(['laytpl', 'form'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var laytpl = layui.laytpl;\r\n var form = layui.form;\r\n \r\n // 模块名\r\n var MOD_NAME = 'transfer';\r\n\r\n // 外部接口\r\n var transfer = {\r\n config: {},\r\n index: layui[MOD_NAME] ? (layui[MOD_NAME].index + 10000) : 0,\r\n\r\n // 设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n \r\n // 事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n };\r\n\r\n // 操作当前实例\r\n var thisModule = function(){\r\n var that = this;\r\n var options = that.config;\r\n var id = options.id || that.index;\r\n \r\n thisModule.that[id] = that; // 记录当前实例对象\r\n thisModule.config[id] = options; // 记录当前实例配置项\r\n \r\n return {\r\n config: options,\r\n // 重置实例\r\n reload: function(options){\r\n that.reload.call(that, options);\r\n },\r\n // 获取右侧数据\r\n getData: function(){\r\n return that.getData.call(that);\r\n }\r\n }\r\n };\r\n \r\n // 获取当前实例配置项\r\n var getThisModuleConfig = function(id){\r\n var config = thisModule.config[id];\r\n if(!config) hint.error('The ID option was not found in the '+ MOD_NAME +' instance');\r\n return config || null;\r\n };\r\n\r\n // 字符常量\r\n var ELEM = 'layui-transfer';\r\n var HIDE = 'layui-hide'; \r\n var DISABLED = 'layui-btn-disabled';\r\n var NONE = 'layui-none';\r\n var ELEM_BOX = 'layui-transfer-box';\r\n var ELEM_HEADER = 'layui-transfer-header';\r\n var ELEM_SEARCH = 'layui-transfer-search';\r\n var ELEM_ACTIVE = 'layui-transfer-active';\r\n var ELEM_DATA = 'layui-transfer-data';\r\n \r\n // 穿梭框模板\r\n var TPL_BOX = function(obj){\r\n obj = obj || {};\r\n return ['
              ',\r\n '
              ',\r\n '',\r\n '
              ',\r\n '{{# if(d.data.showSearch){ }}',\r\n '
              ',\r\n '',\r\n '',\r\n '
              ',\r\n '{{# } }}',\r\n '
                ',\r\n '
                '].join('');\r\n };\r\n \r\n // 主模板\r\n var TPL_MAIN = ['
                ',\r\n TPL_BOX({\r\n index: 0,\r\n checkAllName: 'layTransferLeftCheckAll'\r\n }),\r\n '
                ',\r\n '',\r\n '',\r\n '
                ',\r\n TPL_BOX({\r\n index: 1,\r\n checkAllName: 'layTransferRightCheckAll'\r\n }),\r\n '
                '].join('');\r\n\r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.index = ++transfer.index;\r\n that.config = $.extend({}, that.config, transfer.config, options);\r\n that.render();\r\n };\r\n\r\n // 默认配置\r\n Class.prototype.config = {\r\n title: ['列表一', '列表二'],\r\n width: 200,\r\n height: 360,\r\n data: [], // 数据源\r\n value: [], // 选中的数据\r\n showSearch: false, // 是否开启搜索\r\n id: '', // 唯一索引,默认自增 index\r\n text: {\r\n none: '无数据',\r\n searchNone: '无匹配数据'\r\n }\r\n };\r\n \r\n // 重载实例\r\n Class.prototype.reload = function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n that.render();\r\n };\r\n\r\n // 渲染\r\n Class.prototype.render = function(){\r\n var that = this;\r\n var options = that.config;\r\n \r\n // 解析模板\r\n var thisElem = that.elem = $(laytpl(TPL_MAIN, {\r\n open: '{{', // 标签符前缀\r\n close: '}}' // 标签符后缀\r\n }).render({\r\n data: options,\r\n index: that.index // 索引\r\n }));\r\n \r\n var othis = options.elem = $(options.elem);\r\n if(!othis[0]) return;\r\n \r\n // 初始化属性\r\n options.data = options.data || [];\r\n options.value = options.value || [];\r\n \r\n // 初始化 id 属性 - 优先取 options > 元素 id > 自增索引\r\n options.id = 'id' in options ? options.id : (\r\n elem.attr('id') || that.index\r\n );\r\n that.key = options.id;\r\n \r\n // 插入组件结构\r\n othis.html(that.elem);\r\n \r\n // 各级容器\r\n that.layBox = that.elem.find('.'+ ELEM_BOX)\r\n that.layHeader = that.elem.find('.'+ ELEM_HEADER)\r\n that.laySearch = that.elem.find('.'+ ELEM_SEARCH)\r\n that.layData = thisElem.find('.'+ ELEM_DATA);\r\n that.layBtn = thisElem.find('.'+ ELEM_ACTIVE + ' .layui-btn');\r\n \r\n // 初始化尺寸\r\n that.layBox.css({\r\n width: options.width,\r\n height: options.height\r\n });\r\n that.layData.css({\r\n height: function(){\r\n var height = options.height - that.layHeader.outerHeight();\r\n if(options.showSearch){\r\n height -= that.laySearch.outerHeight();\r\n }\r\n return height - 2;\r\n }()\r\n });\r\n \r\n that.renderData(); // 渲染数据\r\n that.events(); // 事件\r\n };\r\n \r\n // 渲染数据\r\n Class.prototype.renderData = function(){\r\n var that = this;\r\n var options = that.config;\r\n \r\n // 左右穿梭框差异数据\r\n var arr = [{\r\n checkName: 'layTransferLeftCheck',\r\n views: []\r\n }, {\r\n checkName: 'layTransferRightCheck',\r\n views: []\r\n }];\r\n \r\n // 解析格式\r\n that.parseData(function(item){ \r\n // 标注为 selected 的为右边的数据\r\n var _index = item.selected ? 1 : 0\r\n var listElem = ['
              • ',\r\n '',\r\n '
              • '].join('');\r\n // 按照 options.value 顺序排列右侧数据\r\n if(_index){\r\n layui.each(options.value, function(i, v){\r\n if(v == item.value && item.selected){\r\n arr[_index].views[i] = listElem;\r\n }\r\n });\r\n } else {\r\n arr[_index].views.push(listElem);\r\n }\r\n delete item.selected;\r\n });\r\n \r\n that.layData.eq(0).html(arr[0].views.join(''));\r\n that.layData.eq(1).html(arr[1].views.join(''));\r\n \r\n that.renderCheckBtn();\r\n };\r\n \r\n // 渲染表单\r\n Class.prototype.renderForm = function(type){\r\n form.render(type, 'LAY-transfer-'+ this.index);\r\n };\r\n \r\n // 同步复选框和按钮状态\r\n Class.prototype.renderCheckBtn = function(obj){\r\n var that = this;\r\n var options = that.config;\r\n \r\n obj = obj || {};\r\n \r\n that.layBox.each(function(_index){\r\n var othis = $(this);\r\n var thisDataElem = othis.find('.'+ ELEM_DATA);\r\n var allElemCheckbox = othis.find('.'+ ELEM_HEADER).find('input[type=\"checkbox\"]');\r\n var listElemCheckbox = thisDataElem.find('input[type=\"checkbox\"]');\r\n \r\n // 同步复选框和按钮状态\r\n var nums = 0;\r\n var haveChecked = false;\r\n\r\n listElemCheckbox.each(function(){\r\n var isHide = $(this).data('hide');\r\n if(this.checked || this.disabled || isHide){\r\n nums++;\r\n }\r\n if(this.checked && !isHide){\r\n haveChecked = true;\r\n }\r\n });\r\n \r\n allElemCheckbox.prop('checked', haveChecked && nums === listElemCheckbox.length); // 全选复选框状态\r\n that.layBtn.eq(_index)[haveChecked ? 'removeClass' : 'addClass'](DISABLED); // 对应的按钮状态\r\n \r\n // 无数据视图\r\n if(!obj.stopNone){\r\n var isNone = thisDataElem.children('li:not(.'+ HIDE +')').length\r\n that.noneView(thisDataElem, isNone ? '' : options.text.none);\r\n }\r\n });\r\n \r\n that.renderForm('checkbox');\r\n };\r\n \r\n // 无数据视图\r\n Class.prototype.noneView = function(thisDataElem, text){\r\n var createNoneElem = $('

                '+ (text || '') +'

                ');\r\n if(thisDataElem.find('.'+ NONE)[0]){\r\n thisDataElem.find('.'+ NONE).remove();\r\n }\r\n text.replace(/\\s/g, '') && thisDataElem.append(createNoneElem);\r\n };\r\n \r\n // 同步 value 属性值\r\n Class.prototype.setValue = function(){\r\n var that = this;\r\n var options = that.config;\r\n var arr = [];\r\n\r\n that.layBox.eq(1).find('.'+ ELEM_DATA +' input[type=\"checkbox\"]').each(function(){\r\n var isHide = $(this).data('hide');\r\n isHide || arr.push(this.value);\r\n });\r\n options.value = arr;\r\n \r\n return that;\r\n };\r\n\r\n // 解析数据\r\n Class.prototype.parseData = function(callback){\r\n var that = this;\r\n var options = that.config;\r\n var newData = [];\r\n \r\n layui.each(options.data, function(index, item){\r\n // 解析格式\r\n item = (typeof options.parseData === 'function' \r\n ? options.parseData(item) \r\n : item) || item;\r\n \r\n newData.push(item = $.extend({}, item))\r\n \r\n layui.each(options.value, function(index2, item2){\r\n if(item2 == item.value){\r\n item.selected = true;\r\n }\r\n });\r\n callback && callback(item);\r\n });\r\n \r\n options.data = newData;\r\n return that;\r\n };\r\n \r\n // 获得右侧面板数据\r\n Class.prototype.getData = function(value){\r\n var that = this;\r\n var options = that.config;\r\n var selectedData = [];\r\n \r\n that.setValue();\r\n \r\n layui.each(value || options.value, function(index, item){\r\n layui.each(options.data, function(index2, item2){\r\n delete item2.selected;\r\n if(item == item2.value){\r\n selectedData.push(item2);\r\n };\r\n });\r\n });\r\n return selectedData;\r\n };\r\n\r\n // 执行穿梭\r\n Class.prototype.transfer = function (_index, elem) {\r\n var that = this;\r\n var options = that.config;\r\n var thisBoxElem = that.layBox.eq(_index);\r\n var arr = [];\r\n\r\n if (!elem) {\r\n // 通过按钮触发找到选中的进行移动\r\n thisBoxElem.each(function(_index){\r\n var othis = $(this);\r\n var thisDataElem = othis.find('.'+ ELEM_DATA);\r\n\r\n thisDataElem.children('li').each(function(){\r\n var thisList = $(this);\r\n var thisElemCheckbox = thisList.find('input[type=\"checkbox\"]');\r\n var isHide = thisElemCheckbox.data('hide');\r\n\r\n if(thisElemCheckbox[0].checked && !isHide){\r\n thisElemCheckbox[0].checked = false;\r\n thisBoxElem.siblings('.'+ ELEM_BOX).find('.'+ ELEM_DATA).append(thisList.clone());\r\n thisList.remove();\r\n\r\n // 记录当前穿梭的数据\r\n arr.push(thisElemCheckbox[0].value);\r\n }\r\n\r\n that.setValue();\r\n });\r\n });\r\n } else {\r\n // 双击单条记录移动\r\n var thisList = elem;\r\n var thisElemCheckbox = thisList.find('input[type=\"checkbox\"]');\r\n\r\n thisElemCheckbox[0].checked = false;\r\n thisBoxElem.siblings('.'+ ELEM_BOX).find('.'+ ELEM_DATA).append(thisList.clone());\r\n thisList.remove();\r\n\r\n // 记录当前穿梭的数据\r\n arr.push(thisElemCheckbox[0].value);\r\n\r\n that.setValue();\r\n }\r\n\r\n that.renderCheckBtn();\r\n\r\n // 穿梭时,如果另外一个框正在搜索,则触发匹配\r\n var siblingInput = thisBoxElem.siblings('.'+ ELEM_BOX).find('.'+ ELEM_SEARCH +' input')\r\n siblingInput.val() === '' || siblingInput.trigger('keyup');\r\n\r\n // 穿梭时的回调\r\n options.onchange && options.onchange(that.getData(arr), _index);\r\n }\r\n\r\n // 事件\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n \r\n // 左右复选框\r\n that.elem.on('click', 'input[lay-filter=\"layTransferCheckbox\"]+', function(){ \r\n var thisElemCheckbox = $(this).prev();\r\n var checked = thisElemCheckbox[0].checked;\r\n var thisDataElem = thisElemCheckbox.parents('.'+ ELEM_BOX).eq(0).find('.'+ ELEM_DATA);\r\n \r\n if(thisElemCheckbox[0].disabled) return;\r\n \r\n // 判断是否全选\r\n if(thisElemCheckbox.attr('lay-type') === 'all'){\r\n thisDataElem.find('input[type=\"checkbox\"]').each(function(){\r\n if(this.disabled) return;\r\n this.checked = checked;\r\n });\r\n }\r\n\r\n setTimeout(function () {\r\n that.renderCheckBtn({stopNone: true});\r\n }, 0)\r\n });\r\n\r\n // 双击穿梭\r\n that.elem.on('dblclick', '.' + ELEM_DATA + '>li', function(event){\r\n var elemThis = $(this);\r\n var thisElemCheckbox = elemThis.children('input[type=\"checkbox\"]');\r\n var thisDataElem = elemThis.parent();\r\n var thisBoxElem = thisDataElem.parent();\r\n var index = thisBoxElem.data('index');\r\n\r\n if(thisElemCheckbox[0].disabled) return;\r\n\r\n // 根据 dblclick 回调函数返回值决定是否执行穿梭 --- 2.9.3+\r\n var ret = typeof options.dblclick === 'function' ? options.dblclick({\r\n elem: elemThis,\r\n data: that.getData([thisElemCheckbox[0].value])[0],\r\n index: index\r\n }) : null;\r\n\r\n if(ret === false) return;\r\n\r\n that.transfer(index, elemThis);\r\n })\r\n\r\n // 穿梭按钮事件\r\n that.layBtn.on('click', function(){\r\n var othis = $(this);\r\n var _index = othis.data('index');\r\n\r\n if(othis.hasClass(DISABLED)) return;\r\n that.transfer(_index);\r\n });\r\n \r\n // 搜索\r\n that.laySearch.find('input').on('keyup', function(){\r\n var value = this.value;\r\n var thisDataElem = $(this).parents('.'+ ELEM_SEARCH).eq(0).siblings('.'+ ELEM_DATA);\r\n var thisListElem = thisDataElem.children('li');\r\n\r\n thisListElem.each(function(){\r\n var thisList = $(this);\r\n var thisElemCheckbox = thisList.find('input[type=\"checkbox\"]');\r\n var title = thisElemCheckbox[0].title;\r\n\r\n // 是否区分大小写\r\n if(options.showSearch !== 'cs'){\r\n title = title.toLowerCase();\r\n value = value.toLowerCase();\r\n }\r\n\r\n var isMatch = title.indexOf(value) !== -1;\r\n\r\n thisList[isMatch ? 'removeClass': 'addClass'](HIDE);\r\n thisElemCheckbox.data('hide', isMatch ? false : true);\r\n });\r\n\r\n that.renderCheckBtn();\r\n \r\n // 无匹配数据视图\r\n var isNone = thisListElem.length === thisDataElem.children('li.'+ HIDE).length;\r\n that.noneView(thisDataElem, isNone ? options.text.searchNone : '');\r\n });\r\n };\r\n \r\n // 记录所有实例\r\n thisModule.that = {}; // 记录所有实例对象\r\n thisModule.config = {}; // 记录所有实例配置项\r\n \r\n // 重载实例\r\n transfer.reload = function(id, options){\r\n var that = thisModule.that[id];\r\n that.reload(options);\r\n \r\n return thisModule.call(that);\r\n };\r\n \r\n // 获得选中的数据(右侧面板)\r\n transfer.getData = function(id){\r\n var that = thisModule.that[id];\r\n return that.getData();\r\n };\r\n\r\n // 核心入口\r\n transfer.render = function(options){\r\n var inst = new Class(options);\r\n return thisModule.call(inst);\r\n };\r\n\r\n exports(MOD_NAME, transfer);\r\n});\r\n","/**\r\n * carousel 轮播模块\r\n * MIT Licensed \r\n */\r\n \r\nlayui.define(['jquery', 'lay'], function(exports){\r\n \"use strict\";\r\n \r\n var $ = layui.$;\r\n var lay = layui.lay;\r\n\r\n var hint = layui.hint();\r\n var device = layui.device();\r\n\r\n // 外部接口\r\n var carousel = {\r\n config: {}, // 全局配置项\r\n\r\n // 设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n \r\n // 事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n };\r\n \r\n // 字符常量\r\n var MOD_NAME = 'carousel';\r\n var ELEM = '.layui-carousel';\r\n var THIS = 'layui-this';\r\n var SHOW = 'layui-show';\r\n var HIDE = 'layui-hide';\r\n var DISABLED = 'layui-disabled'\r\n \r\n var ELEM_ITEM = '>*[carousel-item]>*';\r\n var ELEM_LEFT = 'layui-carousel-left';\r\n var ELEM_RIGHT = 'layui-carousel-right';\r\n var ELEM_PREV = 'layui-carousel-prev';\r\n var ELEM_NEXT = 'layui-carousel-next';\r\n var ELEM_ARROW = 'layui-carousel-arrow';\r\n var ELEM_IND = 'layui-carousel-ind';\r\n \r\n // 构造器\r\n var Class = function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, carousel.config, options);\r\n that.render();\r\n };\r\n \r\n // 默认配置\r\n Class.prototype.config = {\r\n width: '600px',\r\n height: '280px',\r\n full: false, // 是否全屏\r\n arrow: 'hover', // 切换箭头默认显示状态:hover/always/none\r\n indicator: 'inside', // 指示器位置:inside/outside/none\r\n autoplay: true, // 是否自动切换\r\n interval: 3000, // 自动切换的时间间隔,不能低于800ms\r\n anim: '', // 动画类型:default/updown/fade\r\n trigger: 'click', // 指示器的触发方式:click/hover\r\n index: 0 // 初始开始的索引\r\n };\r\n \r\n // 轮播渲染\r\n Class.prototype.render = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 若 elem 非唯一,则拆分为多个实例\r\n var elem = $(options.elem);\r\n if(elem.length > 1){\r\n layui.each(elem, function(){\r\n carousel.render($.extend({}, options, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 合并 lay-options 属性上的配置信息\r\n $.extend(options, lay.options(elem[0]));\r\n\r\n options.elem = $(options.elem);\r\n if(!options.elem[0]) return;\r\n that.elemItem = options.elem.find(ELEM_ITEM);\r\n \r\n if(options.index < 0) options.index = 0;\r\n if(options.index >= that.elemItem.length) options.index = that.elemItem.length - 1;\r\n if(options.interval < 800) options.interval = 800;\r\n\r\n // 是否全屏模式\r\n if(options.full){\r\n options.elem.css({\r\n position: 'fixed',\r\n width: '100%',\r\n height: '100%',\r\n zIndex: 9999\r\n });\r\n } else {\r\n options.elem.css({\r\n width: options.width,\r\n height: options.height\r\n });\r\n }\r\n \r\n options.elem.attr('lay-anim', options.anim);\r\n \r\n // 初始焦点状态\r\n that.elemItem.eq(options.index).addClass(THIS);\r\n\r\n // 指示器、箭头等动作\r\n that.indicator();\r\n that.arrow();\r\n that.autoplay();\r\n\r\n if (that.elemItem.length > 1) {\r\n that.events();\r\n }\r\n };\r\n \r\n // 重置轮播\r\n Class.prototype.reload = function(options){\r\n var that = this;\r\n clearInterval(that.timer);\r\n that.config = $.extend({}, that.config, options);\r\n that.render();\r\n };\r\n \r\n // 获取上一个等待条目的索引\r\n Class.prototype.prevIndex = function(){\r\n var that = this;\r\n var options = that.config;\r\n var prevIndex = options.index - 1;\r\n\r\n if(prevIndex < 0){\r\n prevIndex = that.elemItem.length - 1;\r\n }\r\n\r\n return prevIndex;\r\n };\r\n \r\n // 获取下一个等待条目的索引\r\n Class.prototype.nextIndex = function(){\r\n var that = this;\r\n var options = that.config;\r\n var nextIndex = options.index + 1;\r\n\r\n if(nextIndex >= that.elemItem.length){\r\n nextIndex = 0;\r\n }\r\n\r\n return nextIndex;\r\n };\r\n \r\n // 索引递增\r\n Class.prototype.addIndex = function(num){\r\n var that = this;\r\n var options = that.config;\r\n \r\n num = num || 1;\r\n options.index = options.index + num;\r\n \r\n // index 不能超过轮播总数量\r\n if(options.index >= that.elemItem.length){\r\n options.index = 0;\r\n }\r\n };\r\n \r\n // 索引递减\r\n Class.prototype.subIndex = function(num){\r\n var that = this;\r\n var options = that.config;\r\n \r\n num = num || 1;\r\n options.index = options.index - num;\r\n \r\n // index 不能超过轮播总数量\r\n if(options.index < 0){\r\n options.index = that.elemItem.length - 1;\r\n }\r\n };\r\n \r\n // 自动轮播\r\n Class.prototype.autoplay = function(){\r\n var that = this;\r\n var options = that.config;\r\n var itemsCount = that.elemItem.length;\r\n \r\n if(!options.autoplay) return;\r\n clearInterval(that.timer);\r\n \r\n if (itemsCount > 1) {\r\n that.timer = setInterval(function(){\r\n that.slide();\r\n }, options.interval);\r\n }\r\n };\r\n \r\n // 箭头\r\n Class.prototype.arrow = function(){\r\n var that = this;\r\n var options = that.config;\r\n var itemsCount = that.elemItem.length;\r\n \r\n // 模板\r\n var tplArrow = $([\r\n '',\r\n ''\r\n ].join(''));\r\n \r\n // 预设基础属性\r\n options.elem.attr('lay-arrow', options.arrow);\r\n \r\n // 避免重复插入\r\n if(options.elem.find('.'+ELEM_ARROW)[0]){\r\n options.elem.find('.'+ELEM_ARROW).remove();\r\n }\r\n itemsCount > 1 ? options.elem.append(tplArrow) : tplArrow.remove();\r\n \r\n // 事件\r\n tplArrow.on('click', function(){\r\n var othis = $(this);\r\n var type = othis.attr('lay-type')\r\n that.slide(type);\r\n });\r\n };\r\n\r\n // 跳转到特定下标\r\n Class.prototype.goto = function(index){\r\n var that = this;\r\n var options = that.config;\r\n\r\n if(index > options.index){\r\n that.slide('add', index - options.index);\r\n } else if(index < options.index){\r\n that.slide('sub', options.index - index);\r\n }\r\n }\r\n \r\n // 指示器\r\n Class.prototype.indicator = function(){\r\n var that = this;\r\n var options = that.config;\r\n var itemsCount = that.elemItem.length;\r\n \r\n // 模板\r\n var tplInd = that.elemInd = $(['
                  ',\r\n function(){\r\n var li = [];\r\n layui.each(that.elemItem, function(index){\r\n li.push('');\r\n });\r\n return li.join('');\r\n }(),\r\n '
                '].join(''));\r\n \r\n // 预设基础属性\r\n options.elem.attr('lay-indicator', options.indicator);\r\n \r\n // 避免重复插入\r\n if(options.elem.find('.'+ELEM_IND)[0]){\r\n options.elem.find('.'+ELEM_IND).remove();\r\n }\r\n\r\n itemsCount > 1 ? options.elem.append(tplInd) : tplInd.remove();\r\n \r\n if(options.anim === 'updown'){\r\n tplInd.css('margin-top', -(tplInd.height()/2));\r\n }\r\n \r\n // 事件\r\n tplInd.find('li').on(options.trigger === 'hover' ? 'mouseover' : options.trigger, function(){\r\n that.goto($(this).index());\r\n });\r\n };\r\n \r\n // 滑动切换\r\n Class.prototype.slide = function(type, num){\r\n var that = this;\r\n var elemItem = that.elemItem;\r\n var itemsCount = elemItem.length;\r\n var options = that.config;\r\n var thisIndex = options.index;\r\n var filter = options.elem.attr('lay-filter');\r\n \r\n if (that.haveSlide || itemsCount <= 1) return;\r\n \r\n // 滑动方向\r\n if(type === 'sub'){\r\n that.subIndex(num);\r\n elemItem.eq(options.index).addClass(ELEM_PREV);\r\n setTimeout(function(){\r\n elemItem.eq(thisIndex).addClass(ELEM_RIGHT);\r\n elemItem.eq(options.index).addClass(ELEM_RIGHT);\r\n }, 50);\r\n } else { // 默认递增滑\r\n that.addIndex(num);\r\n elemItem.eq(options.index).addClass(ELEM_NEXT);\r\n setTimeout(function(){\r\n elemItem.eq(thisIndex).addClass(ELEM_LEFT);\r\n elemItem.eq(options.index).addClass(ELEM_LEFT);\r\n }, 50); \r\n }\r\n \r\n // 移除过渡类\r\n setTimeout(function(){\r\n elemItem.removeClass(THIS + ' ' + ELEM_PREV + ' ' + ELEM_NEXT + ' ' + ELEM_LEFT + ' ' + ELEM_RIGHT);\r\n elemItem.eq(options.index).addClass(THIS);\r\n that.haveSlide = false; // 解锁\r\n }, 350);\r\n \r\n // 指示器焦点\r\n that.elemInd.find('li').eq(options.index).addClass(THIS)\r\n .siblings().removeClass(THIS);\r\n \r\n that.haveSlide = true;\r\n \r\n // 回调返回的参数\r\n var params = {\r\n index: options.index,\r\n prevIndex: thisIndex,\r\n item: elemItem.eq(options.index)\r\n };\r\n \r\n typeof options.change === 'function' && options.change(params);\r\n layui.event.call(this, MOD_NAME, 'change('+ filter +')', params);\r\n };\r\n \r\n // 事件处理\r\n Class.prototype.events = function(){\r\n var that = this;\r\n var options = that.config;\r\n \r\n if(options.elem.data('haveEvents')) return;\r\n\r\n \r\n // 移入移出容器\r\n options.elem.on('mouseenter touchstart', function(){\r\n if (that.config.autoplay === 'always') return;\r\n clearInterval(that.timer);\r\n }).on('mouseleave touchend', function(){\r\n if (that.config.autoplay === 'always') return;\r\n that.autoplay();\r\n });\r\n\r\n var touchEl = options.elem;\r\n var isVertical = options.anim === 'updown';\r\n lay.touchSwipe(touchEl, {\r\n onTouchEnd: function(e, state){\r\n var duration = Date.now() - state.timeStart;\r\n var distance = isVertical ? state.distanceY : state.distanceX;\r\n var speed = distance / duration;\r\n var shouldSwipe = Math.abs(speed) > 0.25 || Math.abs(distance) > touchEl[isVertical ? 'height' : 'width']() / 3;\r\n if(shouldSwipe){\r\n that.slide(distance > 0 ? '' : 'sub');\r\n }\r\n }\r\n })\r\n \r\n options.elem.data('haveEvents', true);\r\n };\r\n \r\n // 核心入口\r\n carousel.render = function(options){\r\n return new Class(options);\r\n };\r\n \r\n exports(MOD_NAME, carousel);\r\n});\r\n\r\n \r\n","/**\r\n * rate 评分评星组件\r\n */\r\n\r\nlayui.define(['jquery', 'lay'],function(exports){\r\n \"use strict\";\r\n\r\n var $ = layui.jquery;\r\n var lay = layui.lay;\r\n\r\n // 外部接口\r\n var rate = {\r\n config: {},\r\n index: layui.rate ? (layui.rate.index + 10000) : 0,\r\n\r\n //设置全局项\r\n set: function(options){\r\n var that = this;\r\n that.config = $.extend({}, that.config, options);\r\n return that;\r\n },\r\n\r\n //事件\r\n on: function(events, callback){\r\n return layui.onevent.call(this, MOD_NAME, events, callback);\r\n }\r\n }\r\n\r\n // 操作当前实例\r\n var thisRate = function () {\r\n var that = this;\r\n var options = that.config;\r\n\r\n return {\r\n setvalue: function (value) {\r\n that.setvalue.call(that, value);\r\n },\r\n config: options\r\n }\r\n };\r\n\r\n //字符常量\r\n var MOD_NAME = 'rate';\r\n var ELEM_VIEW = 'layui-rate';\r\n var ICON_RATE = 'layui-icon-rate';\r\n var ICON_RATE_SOLID = 'layui-icon-rate-solid';\r\n var ICON_RATE_HALF = 'layui-icon-rate-half';\r\n var ICON_SOLID_HALF = 'layui-icon-rate-solid layui-icon-rate-half';\r\n var ICON_SOLID_RATE = 'layui-icon-rate-solid layui-icon-rate';\r\n var ICON_HALF_RATE = 'layui-icon-rate layui-icon-rate-half';\r\n\r\n //构造器\r\n var Class = function (options) {\r\n var that = this;\r\n that.index = ++rate.index;\r\n that.config = $.extend({}, that.config, rate.config, options);\r\n that.render();\r\n };\r\n\r\n //默认配置\r\n Class.prototype.config = {\r\n length: 5, //初始长度\r\n text: false, //是否显示评分等级\r\n readonly: false, //是否只读\r\n half: false, //是否可以半星\r\n value: 0, //星星选中个数\r\n theme: '' //主题颜色\r\n };\r\n\r\n //评分渲染\r\n Class.prototype.render = function(){\r\n var that = this;\r\n var options = that.config;\r\n\r\n // 若 elem 非唯一,则拆分为多个实例\r\n var elem = $(options.elem);\r\n if(elem.length > 1){\r\n layui.each(elem, function(){\r\n rate.render($.extend({}, options, {\r\n elem: this\r\n }));\r\n });\r\n return that;\r\n }\r\n\r\n // 合并 lay-options 属性上的配置信息\r\n $.extend(options, lay.options(elem[0]));\r\n\r\n // 自定义主题\r\n var style = options.theme ? ('style=\"color: '+ options.theme + ';\"') : '';\r\n\r\n options.elem = $(options.elem);\r\n\r\n //最大值不能大于总长度\r\n if(options.value > options.length){\r\n options.value = options.length;\r\n }\r\n\r\n //如果没有选择半星的属性,却给了小数的数值,统一向上或向下取整\r\n if(parseInt(options.value) !== options.value){\r\n if(!options.half){\r\n options.value = (Math.ceil(options.value) - options.value) < 0.5 ? Math.ceil(options.value): Math.floor(options.value)\r\n }\r\n }\r\n\r\n //组件模板\r\n var temp = '
                  ';\r\n for(var i = 1;i <= options.length;i++){\r\n var item = '
                • Math.floor(options.value)?ICON_RATE:ICON_RATE_SOLID)\r\n + '\" '+ style +'>
                • ';\r\n\r\n if(options.half&&parseInt(options.value) !== options.value&&i == Math.ceil(options.value)){\r\n temp = temp + '
                • ';\r\n }else{\r\n temp = temp +item;\r\n }\r\n }\r\n temp += '
                ' + (options.text ? (''+ options.value + '星') : '') + '';\r\n\r\n //开始插入替代元素\r\n var othis = options.elem;\r\n var hasRender = othis.next('.' + ELEM_VIEW);\r\n\r\n //生成替代元素\r\n hasRender[0] && hasRender.remove(); //如果已经渲染,则Rerender\r\n\r\n that.elemTemp = $(temp);\r\n\r\n options.span = that.elemTemp.next('span');\r\n\r\n options.setText && options.setText(options.value);\r\n\r\n othis.html(that.elemTemp);\r\n\r\n othis.addClass(\"layui-inline\");\r\n\r\n //如果不是只读,那么进行触控事件\r\n if(!options.readonly) that.action();\r\n\r\n };\r\n\r\n //评分重置\r\n Class.prototype.setvalue = function(value){\r\n var that = this;\r\n var options = that.config;\r\n\r\n options.value = value ;\r\n that.render();\r\n };\r\n\r\n //li触控事件\r\n Class.prototype.action = function(){\r\n var that = this;\r\n var options = that.config;\r\n var _ul = that.elemTemp;\r\n var wide = _ul.find(\"i\").width();\r\n var liElems = _ul.children(\"li\");\r\n\r\n liElems.each(function(index){\r\n var ind = index + 1;\r\n var othis = $(this);\r\n\r\n //点击\r\n othis.on('click', function(e){\r\n //将当前点击li的索引值赋给value\r\n options.value = ind;\r\n if(options.half){\r\n //获取鼠标在li上的位置\r\n var x = e.pageX - $(this).offset().left;\r\n if(x <= wide / 2){\r\n options.value = options.value - 0.5;\r\n }\r\n }\r\n\r\n if(options.text) _ul.next(\"span\").text(options.value + \"星\");\r\n\r\n options.choose && options.choose(options.value);\r\n options.setText && options.setText(options.value);\r\n });\r\n\r\n //移入\r\n othis.on('mousemove', function(e){\r\n _ul.find(\"i\").each(function(){\r\n $(this).addClass(ICON_RATE).removeClass(ICON_SOLID_HALF)\r\n });\r\n _ul.find(\"i:lt(\" + ind + \")\").each(function(){\r\n $(this).addClass(ICON_RATE_SOLID).removeClass(ICON_HALF_RATE)\r\n });\r\n // 如果设置可选半星,那么判断鼠标相对li的位置\r\n if(options.half){\r\n var x = e.pageX - $(this).offset().left;\r\n if(x <= wide / 2){\r\n othis.children(\"i\").addClass(ICON_RATE_HALF).removeClass(ICON_RATE_SOLID)\r\n }\r\n }\r\n })\r\n\r\n //移出\r\n othis.on('mouseleave', function(){\r\n _ul.find(\"i\").each(function(){\r\n $(this).addClass(ICON_RATE).removeClass(ICON_SOLID_HALF)\r\n });\r\n _ul.find(\"i:lt(\" + Math.floor(options.value) + \")\").each(function(){\r\n $(this).addClass(ICON_RATE_SOLID).removeClass(ICON_HALF_RATE)\r\n });\r\n //如果设置可选半星,根据分数判断是否有半星\r\n if(options.half){\r\n if(parseInt(options.value) !== options.value){\r\n _ul.children(\"li:eq(\" + Math.floor(options.value) + \")\").children(\"i\").addClass(ICON_RATE_HALF).removeClass(ICON_SOLID_RATE)\r\n }\r\n }\r\n })\r\n\r\n })\r\n\r\n lay.touchSwipe(_ul, {\r\n onTouchMove: function(e, state){\r\n if(Date.now() - state.timeStart <= 200) return;\r\n var pageX = e.touches[0].pageX;\r\n var rateElemWidth = _ul.width();\r\n var itemElemWidth = rateElemWidth / options.length; // 单颗星的宽度\r\n var offsetX = pageX - _ul.offset().left;\r\n var num = offsetX / itemElemWidth; // 原始值\r\n var remainder = num % 1;\r\n var integer = num - remainder;\r\n\r\n // 最终值\r\n var score = remainder <= 0.5 && options.half ? integer + 0.5 : Math.ceil(num);\r\n if(score > options.length) score = options.length;\r\n if(score < 0) score = 0;\r\n\r\n liElems.each(function(index){\r\n var iconElem = $(this).children('i');\r\n var isActiveIcon = (Math.ceil(score) - index === 1);\r\n var needSelect = Math.ceil(score) > index;\r\n var shouldHalfIcon = (score - index === 0.5);\r\n\r\n if(needSelect){\r\n // 设置选中样式\r\n iconElem.addClass(ICON_RATE_SOLID).removeClass(ICON_HALF_RATE);\r\n if(options.half && shouldHalfIcon){\r\n iconElem.addClass(ICON_RATE_HALF).removeClass(ICON_RATE_SOLID);\r\n }\r\n }else{\r\n // 恢复初始样式\r\n iconElem.addClass(ICON_RATE).removeClass(ICON_SOLID_HALF);\r\n }\r\n\r\n // 设置缩放样式\r\n iconElem.toggleClass('layui-rate-hover', isActiveIcon);\r\n });\r\n\r\n // 更新最终值\r\n options.value = score;\r\n if(options.text) _ul.next(\"span\").text(options.value + \"星\");\r\n options.setText && options.setText(options.value);\r\n },\r\n onTouchEnd: function(e, state){\r\n if(Date.now() - state.timeStart <= 200) return;\r\n _ul.find('i').removeClass('layui-rate-hover');\r\n options.choose && options.choose(options.value);\r\n options.setText && options.setText(options.value);\r\n }\r\n });\r\n };\r\n\r\n //事件处理\r\n Class.prototype.events = function () {\r\n var that = this;\r\n //var options = that.config;\r\n };\r\n\r\n //核心入口\r\n rate.render = function(options){\r\n var inst = new Class(options);\r\n return thisRate.call(inst);\r\n };\r\n\r\n exports(MOD_NAME, rate);\r\n})\r\n","/**\r\n * flow 流加载组件\r\n */\r\n\r\n\r\nlayui.define('jquery', function(exports){\r\n \"use strict\";\r\n\r\n var $ = layui.$, Flow = function(options){}\r\n ,ELEM_MORE = 'layui-flow-more'\r\n ,ELEM_LOAD = '';\r\n\r\n //主方法\r\n Flow.prototype.load = function(options){\r\n var that = this, page = 0, lock, isOver, lazyimg, timer;\r\n options = options || {};\r\n\r\n var elem = $(options.elem); if(!elem[0]) return;\r\n var scrollElem = $(options.scrollElem || document); // 滚动条所在元素\r\n var threshold = 'mb' in options ? options.mb : 50; // 临界距离\r\n var isAuto = 'isAuto' in options ? options.isAuto : true; // 否自动滚动加载\r\n var moreText = options.moreText || \"加载更多\"; // 手动加载时,加载更多按钮文案\r\n var end = options.end || '没有更多了'; // “末页”显示文案\r\n var direction = options.direction || 'bottom';\r\n var isTop = direction === 'top';\r\n\r\n // 重复执行时清理旧的事件绑定\r\n that._cleanup(elem, scrollElem);\r\n\r\n //滚动条所在元素是否为document\r\n var notDocument = options.scrollElem && options.scrollElem !== document;\r\n\r\n //加载更多\r\n var ELEM_TEXT = '' + moreText + ''\r\n ,more = $('');\r\n\r\n if(!elem.find('.layui-flow-more')[0]){\r\n elem[isTop ? 'prepend' : 'append'](more);\r\n }\r\n\r\n //加载下一个元素\r\n var next = function(html, over){\r\n var scrollHeightStart = notDocument ? scrollElem.prop('scrollHeight') : document.documentElement.scrollHeight;\r\n var scrollTopStart = scrollElem.scrollTop();\r\n html = $(html);\r\n more[isTop ? 'after' : 'before'](html);\r\n over = over == 0 ? true : null;\r\n over ? more.html(end) : more.find('a').html(ELEM_TEXT);\r\n isOver = over;\r\n lock = null;\r\n lazyimg && lazyimg();\r\n if(isTop){\r\n var scrollHeightEnd = notDocument ? scrollElem.prop('scrollHeight') : document.documentElement.scrollHeight;\r\n if(page === 1){\r\n // 首次渲染后滑动到底部\r\n scrollElem.scrollTop(scrollHeightEnd);\r\n }else if(page > 1){\r\n var nextElementHeight = scrollHeightEnd - scrollHeightStart;\r\n scrollElem.scrollTop(scrollTopStart + nextElementHeight);\r\n }\r\n }\r\n };\r\n\r\n //触发请求\r\n var done = function(){\r\n lock = true;\r\n more.find('a').html(ELEM_LOAD);\r\n typeof options.done === 'function' && options.done(++page, next);\r\n };\r\n\r\n done();\r\n\r\n //不自动滚动加载\r\n more.find('a').on('click.flow', function(){\r\n var othis = $(this);\r\n if(isOver) return;\r\n lock || done();\r\n });\r\n\r\n //如果允许图片懒加载\r\n if(options.isLazyimg){\r\n lazyimg = that.lazyimg({\r\n elem: options.elem + ' img'\r\n ,scrollElem: options.scrollElem\r\n ,direction: options.direction\r\n });\r\n }\r\n\r\n if(!isAuto) return that;\r\n\r\n scrollElem.on('scroll.flow', function(){\r\n var othis = $(this), top = othis.scrollTop();\r\n\r\n if(timer) clearTimeout(timer);\r\n if(isOver || !elem.width()) return; //如果已经结束,或者元素处于隐藏状态,则不执行滚动加载\r\n\r\n timer = setTimeout(function(){\r\n //计算滚动所在容器的可视高度\r\n var height = notDocument ? othis.height() : $(window).height();\r\n\r\n //计算滚动所在容器的实际高度\r\n var scrollHeight = notDocument\r\n ? othis.prop('scrollHeight')\r\n : document.documentElement.scrollHeight;\r\n\r\n //临界点\r\n if(!isTop ? scrollHeight - top - height <= threshold : top <= threshold){\r\n lock || done();\r\n }\r\n }, 100);\r\n });\r\n\r\n return that;\r\n };\r\n\r\n //图片懒加载\r\n Flow.prototype.lazyimg = function(options){\r\n var that = this, index = 0, haveScroll;\r\n options = options || {};\r\n\r\n var scrollElem = $(options.scrollElem || document); //滚动条所在元素\r\n var elem = options.elem || 'img';\r\n var direction = options.direction || 'bottom';\r\n var isTop = direction === 'top';\r\n\r\n //滚动条所在元素是否为document\r\n var notDocument = options.scrollElem && options.scrollElem !== document;\r\n\r\n //显示图片\r\n var show = function(item, height){\r\n var start = scrollElem.scrollTop(), end = start + height;\r\n var elemTop = notDocument ? function(){\r\n return item.offset().top - scrollElem.offset().top + start;\r\n }() : item.offset().top;\r\n\r\n /* 始终只加载在当前屏范围内的图片 */\r\n if((isTop ? elemTop + item.height() : elemTop) >= start && elemTop <= end){\r\n if(item.attr('lay-src')){\r\n var src = item.attr('lay-src');\r\n layui.img(src, function(){\r\n var next = that.lazyimg.elem.eq(index);\r\n item.attr('src', src).removeAttr('lay-src');\r\n\r\n /* 当前图片加载就绪后,检测下一个图片是否在当前屏 */\r\n next[0] && render(next);\r\n index++;\r\n }, function(){\r\n var next = that.lazyimg.elem.eq(index);\r\n item.removeAttr('lay-src');\r\n });\r\n }\r\n }\r\n }, render = function(othis, scroll){\r\n\r\n //计算滚动所在容器的可视高度\r\n var height = notDocument ? (scroll||scrollElem).height() : $(window).height();\r\n var start = scrollElem.scrollTop(), end = start + height;\r\n\r\n that.lazyimg.elem = $(elem);\r\n\r\n if(othis){\r\n show(othis, height);\r\n } else {\r\n //计算未加载过的图片\r\n for(var i = 0; i < that.lazyimg.elem.length; i++){\r\n var item = that.lazyimg.elem.eq(i), elemTop = notDocument ? function(){\r\n return item.offset().top - scrollElem.offset().top + start;\r\n }() : item.offset().top;\r\n\r\n show(item, height);\r\n index = i;\r\n\r\n //如果图片的top坐标,超出了当前屏,则终止后续图片的遍历\r\n if(elemTop > end) break;\r\n }\r\n }\r\n };\r\n\r\n render();\r\n\r\n if(!haveScroll){\r\n var timer;\r\n scrollElem.on('scroll.lazyimg' , function(){\r\n var othis = $(this);\r\n if(timer) clearTimeout(timer)\r\n timer = setTimeout(function(){\r\n render(null, othis);\r\n }, 50);\r\n });\r\n haveScroll = true;\r\n }\r\n return render;\r\n };\r\n\r\n // 重复执行时清理旧的事件绑定,私有方法\r\n Flow.prototype._cleanup = function(elem, scrollElem){\r\n scrollElem.off('scroll.flow').off('scroll.lazyimg');\r\n elem.find('.layui-flow-more').find('a').off('click.flow');\r\n }\r\n\r\n //暴露接口\r\n exports('flow', new Flow());\r\n});\r\n","/**\r\n * code\r\n * Code 预览组件\r\n */\r\n\r\nlayui.define(['lay', 'util', 'element', 'form'], function(exports){\r\n \"use strict\";\r\n\r\n var $ = layui.$;\r\n var util = layui.util;\r\n var element = layui.element;\r\n var form = layui.form;\r\n var layer = layui.layer;\r\n var hint = layui.hint();\r\n\r\n // 常量\r\n var CONST = {\r\n ELEM_VIEW: 'layui-code-view',\r\n ELEM_TAB: 'layui-tab',\r\n ELEM_HEADER: 'layui-code-header',\r\n ELEM_FULL: 'layui-code-full',\r\n ELEM_PREVIEW: 'layui-code-preview',\r\n ELEM_ITEM: 'layui-code-item',\r\n ELEM_SHOW: 'layui-show',\r\n ELEM_LINE: 'layui-code-line',\r\n ELEM_LINE_NUM: 'layui-code-line-number',\r\n ELEM_LN_MODE: 'layui-code-ln-mode',\r\n CDDE_DATA_CLASS: 'LayuiCodeDataClass',\r\n LINE_RAW_WIDTH: 45, // 行号初始宽度,需与 css 保持一致\r\n };\r\n\r\n // 默认参数项\r\n var config = {\r\n elem: '', // 元素选择器\r\n about: '', // 代码栏右上角信息\r\n ln: true, // 代码区域是否显示行号\r\n header: false, // 是否显示代码栏头部区域\r\n encode: true, // 是否对 code 进行编码(若开启预览,则强制开启)\r\n copy: true, // 是否开启代码区域复制功能图标\r\n // 默认文本\r\n text: {\r\n code: util.escape(''),\r\n preview: 'Preview',\r\n },\r\n wordWrap: true, // 是否自动换行\r\n lang: 'text', // 指定语言类型\r\n highlighter: false, // 是否开启语法高亮,'hljs','prism','shiki'\r\n langMarker: false, // 代码区域是否显示语言类型标记\r\n };\r\n\r\n // 初始索引\r\n var codeIndex = layui.code ? (layui.code.index + 10000) : 0;\r\n\r\n // 去除尾部空格\r\n var trimEnd = function(str){\r\n return String(str).replace(/\\s+$/, '');\r\n }\r\n // 保留首行缩进\r\n var trim = function(str){\r\n return trimEnd(str).replace(/^\\n|\\n$/, '');\r\n };\r\n\r\n // export api\r\n exports('code', function(options, mode){\r\n options = $.extend(true, {}, config, options);\r\n\r\n // 返回对象\r\n var ret = {\r\n config: options,\r\n reload: function(opts) { // 重载\r\n layui.code(this.updateOptions(opts));\r\n },\r\n updateOptions: function(opts) { // 更新属性(选项)\r\n opts = opts || {};\r\n delete opts.elem;\r\n return $.extend(true, options, opts);\r\n },\r\n reloadCode: function(opts) { // 仅重载 code\r\n layui.code(this.updateOptions(opts), 'reloadCode');\r\n }\r\n };\r\n\r\n // 若 elem 非唯一\r\n var elem = $(options.elem);\r\n if(elem.length > 1){\r\n // 是否正向渲染\r\n layui.each(options.obverse ? elem : elem.get().reverse(), function(){\r\n layui.code($.extend({}, options, {\r\n elem: this\r\n }), mode);\r\n });\r\n return ret;\r\n }\r\n\r\n // 目标元素是否存在\r\n var othis = options.elem = $(options.elem);\r\n if(!othis[0]) return ret;\r\n\r\n // 合并属性上的参数,并兼容旧版本属性写法 lay-*\r\n $.extend(true, options, lay.options(othis[0]), function(obj){\r\n var attrs = ['title', 'height', 'encode', 'skin', 'about'];\r\n layui.each(attrs, function(i, attr){\r\n var value = othis.attr('lay-'+ attr);\r\n if(typeof value === 'string'){\r\n obj[attr] = value;\r\n }\r\n })\r\n return obj;\r\n }({}));\r\n\r\n // codeRender 需要关闭编码\r\n // 未使用 codeRender 时若开启了预览,则强制开启编码\r\n options.encode = (options.encode || options.preview) && !options.codeRender;\r\n\r\n // 获得初始 code\r\n options.code = options.code || function(){\r\n var arr = [];\r\n var textarea = othis.children('textarea');\r\n\r\n // 若内容放置在 textarea 中\r\n textarea.each(function(){\r\n arr.push(trim(this.value));\r\n });\r\n\r\n // 内容直接放置在元素外层\r\n if(arr.length === 0){\r\n arr.push(trim(othis.html()));\r\n }\r\n\r\n return arr.join('');\r\n }();\r\n\r\n // 创建 code 行结构\r\n var createCode = function(html) {\r\n // codeRender\r\n if(typeof options.codeRender === 'function') {\r\n html = options.codeRender(String(html), options);\r\n }\r\n\r\n // code 行\r\n var lines = String(html).split(/\\r?\\n/g);\r\n\r\n // 包裹 code 行结构\r\n html = $.map(lines, function(line, num) {\r\n return [\r\n '
                ',\r\n (\r\n options.ln ? [\r\n '
                ',\r\n (util.digit(num + 1) + '.'),\r\n '
                ',\r\n ].join('') : ''\r\n ),\r\n '
                ',\r\n (line || ' '),\r\n '
                ',\r\n '
                '\r\n ].join('');\r\n });\r\n\r\n return {\r\n lines: lines,\r\n html: html\r\n };\r\n };\r\n\r\n // 原始 code\r\n var rawCode = options.code;\r\n\r\n // 最终 code\r\n var finalCode = function(code) {\r\n return typeof options.codeParse === 'function' ?\r\n options.codeParse(code, options) :\r\n code;\r\n };\r\n\r\n // 仅重载 code\r\n if (mode === 'reloadCode') {\r\n return othis.children('.layui-code-wrap').html(\r\n createCode(finalCode(rawCode)).html\r\n ), ret;\r\n }\r\n\r\n // 自增索引\r\n var index = layui.code.index = ++codeIndex;\r\n othis.attr('lay-code-index', index);\r\n\r\n // 初始化 className\r\n var hasDataClass = CONST.CDDE_DATA_CLASS in othis.data();\r\n if (hasDataClass) {\r\n othis.attr('class', othis.data(CONST.CDDE_DATA_CLASS) || '');\r\n }\r\n\r\n // 记录初始 className\r\n if (!hasDataClass) {\r\n othis.data(CONST.CDDE_DATA_CLASS, othis.attr('class'));\r\n }\r\n\r\n // 工具栏\r\n var tools = {\r\n copy: {\r\n className: 'file-b',\r\n title: ['复制代码'],\r\n event: function(obj){\r\n var code = util.unescape(finalCode(options.code));\r\n\r\n // 写入剪切板\r\n lay.clipboard.writeText({\r\n text: code,\r\n done: function() {\r\n layer.msg('已复制', {icon: 1});\r\n },\r\n error: function() {\r\n layer.msg('复制失败', {icon: 2});\r\n }\r\n });\r\n\r\n typeof options.onCopy === 'function' && options.onCopy(code);\r\n }\r\n }\r\n };\r\n\r\n // 移除包裹结构\r\n var unwrap = (function fn() {\r\n var elemViewHas = othis.parent('.' + CONST.ELEM_PREVIEW);\r\n var elemTabHas = elemViewHas.children('.'+ CONST.ELEM_TAB);\r\n var elemPreviewViewHas = elemViewHas.children('.' + CONST.ELEM_ITEM +'-preview');\r\n\r\n // 移除旧结构\r\n elemTabHas.remove(); // 移除 tab\r\n elemPreviewViewHas.remove(); // 移除预览区域\r\n if (elemViewHas[0]) othis.unwrap(); // 移除外层容器\r\n\r\n return fn;\r\n })();\r\n\r\n // 是否开启预览\r\n if(options.preview){\r\n var FILTER_VALUE = 'LAY-CODE-DF-'+ index;\r\n var layout = options.layout || ['code', 'preview'];\r\n var isIframePreview = options.preview === 'iframe';\r\n\r\n // 追加 Tab 组件\r\n var elemView = $('
                ');\r\n var elemTabView = $('
                ');\r\n var elemHeaderView = $('
                ');\r\n var elemPreviewView = $('
                ');\r\n var elemToolbar = $('
                ');\r\n\r\n\r\n if(options.id) elemView.attr('id', options.id);\r\n elemView.addClass(options.className);\r\n elemTabView.attr('lay-filter', FILTER_VALUE);\r\n\r\n // 标签头\r\n layui.each(layout, function(i, v){\r\n var li = $('
              • ');\r\n if(i === 0) li.addClass('layui-this');\r\n li.html(options.text[v]);\r\n elemHeaderView.append(li);\r\n });\r\n\r\n // 工具栏\r\n $.extend(tools, {\r\n 'full': {\r\n className: 'screen-full',\r\n title: ['最大化显示', '还原显示'],\r\n event: function(obj){\r\n var el = obj.elem;\r\n var elemView = el.closest('.'+ CONST.ELEM_PREVIEW);\r\n var classNameFull = 'layui-icon-'+ this.className;\r\n var classNameRestore = 'layui-icon-screen-restore';\r\n var title = this.title;\r\n var htmlElem = $('html,body');\r\n var ELEM_SCROLLBAR_HIDE = 'layui-scrollbar-hide';\r\n\r\n if(el.hasClass(classNameFull)){\r\n elemView.addClass(CONST.ELEM_FULL);\r\n el.removeClass(classNameFull).addClass(classNameRestore);\r\n el.attr('title', title[1]);\r\n htmlElem.addClass(ELEM_SCROLLBAR_HIDE);\r\n } else {\r\n elemView.removeClass(CONST.ELEM_FULL);\r\n el.removeClass(classNameRestore).addClass(classNameFull);\r\n el.attr('title', title[0]);\r\n htmlElem.removeClass(ELEM_SCROLLBAR_HIDE);\r\n }\r\n }\r\n },\r\n 'window': {\r\n className: 'release',\r\n title: ['在新窗口预览'],\r\n event: function(obj){\r\n util.openWin({\r\n content: finalCode(options.code)\r\n });\r\n }\r\n }\r\n });\r\n\r\n // copy\r\n if(options.copy){\r\n if(layui.type(options.tools) === 'array'){\r\n // 若 copy 未存在于 tools 中,则追加到最前\r\n if(options.tools.indexOf('copy') === -1){\r\n options.tools.unshift('copy');\r\n }\r\n } else {\r\n options.tools = ['copy'];\r\n }\r\n }\r\n\r\n // 工具栏事件\r\n elemToolbar.on('click', '>i', function(){\r\n var oi = $(this);\r\n var type = oi.data('type');\r\n var parameters = {\r\n elem: oi,\r\n type: type,\r\n options: options, // 当前属性选项\r\n rawCode: options.code, // 原始 code\r\n finalCode: util.unescape(finalCode(options.code)) // 最终 code\r\n };\r\n\r\n // 内部 tools event\r\n tools[type] && typeof tools[type].event === 'function' && tools[type].event(parameters);\r\n\r\n // 外部 tools event\r\n typeof options.toolsEvent === 'function' && options.toolsEvent(parameters);\r\n });\r\n\r\n // 增加工具栏\r\n if (options.addTools && options.tools) {\r\n options.tools = [].concat(options.tools, options.addTools);\r\n }\r\n\r\n // 渲染工具栏\r\n layui.each(options.tools, function(i, v){\r\n var viso = typeof v === 'object'; // 若为 object 值,则可自定义更多属性\r\n var tool = viso ? v : (\r\n tools[v] || {\r\n className: v,\r\n title: [v]\r\n }\r\n );\r\n\r\n var className = tool.className || tool.type;\r\n var title = tool.title || [''];\r\n var type = viso ? ( tool.type || className ) : v;\r\n\r\n if (!type) return;\r\n\r\n // 若非内置 tool,则合并到 tools 中\r\n if (!tools[type]) {\r\n var obj = {};\r\n obj[type] = tool;\r\n $.extend(tools, obj);\r\n }\r\n\r\n elemToolbar.append(\r\n ''\r\n );\r\n });\r\n\r\n othis.addClass(CONST.ELEM_ITEM).wrap(elemView); // 包裹外层容器\r\n elemTabView.append(elemHeaderView); // 追加标签头\r\n options.tools && elemTabView.append(elemToolbar); // 追加工具栏\r\n othis.before(elemTabView); // 追加标签结构\r\n\r\n // 追加预览\r\n if(isIframePreview){\r\n elemPreviewView.html('');\r\n }\r\n\r\n // 执行预览\r\n var runPreview = function(thisItemBody){\r\n var iframe = thisItemBody.children('iframe')[0];\r\n\r\n // 是否 iframe 方式预览\r\n if(isIframePreview && iframe){\r\n iframe.srcdoc = finalCode(options.code);\r\n } else {\r\n thisItemBody.html(options.code);\r\n }\r\n\r\n // 当前实例预览完毕后的回调\r\n setTimeout(function(){\r\n typeof options.done === 'function' && options.done({\r\n container: thisItemBody,\r\n options: options,\r\n render: function(){\r\n form.render(thisItemBody.find('.layui-form'));\r\n element.render();\r\n }\r\n });\r\n },3);\r\n };\r\n\r\n if(layout[0] === 'preview'){\r\n elemPreviewView.addClass(CONST.ELEM_SHOW);\r\n othis.before(elemPreviewView);\r\n runPreview(elemPreviewView);\r\n } else {\r\n othis.addClass(CONST.ELEM_SHOW).after(elemPreviewView);\r\n }\r\n\r\n // 内容项初始化样式\r\n options.previewStyle = [options.style, options.previewStyle].join('');\r\n elemPreviewView.attr('style', options.previewStyle);\r\n\r\n // tab change\r\n element.on('tab('+ FILTER_VALUE +')', function(data){\r\n var $this = $(this);\r\n var thisElem = $(data.elem).closest('.'+ CONST.ELEM_PREVIEW);\r\n var elemItemBody = thisElem.find('.'+ CONST.ELEM_ITEM);\r\n var thisItemBody = elemItemBody.eq(data.index);\r\n\r\n elemItemBody.removeClass(CONST.ELEM_SHOW);\r\n thisItemBody.addClass(CONST.ELEM_SHOW);\r\n\r\n if($this.attr('lay-id') === 'preview'){\r\n runPreview(thisItemBody);\r\n }\r\n\r\n setCodeLayout();\r\n });\r\n }\r\n\r\n // 创建 code 容器\r\n var codeElem = $(''); // 此处的闭合标签是为了兼容 IE8\r\n\r\n // 添加主容器 className\r\n othis.addClass(function(arr) {\r\n if (!options.wordWrap) arr.push('layui-code-nowrap');\r\n return arr.join(' ')\r\n }(['layui-code-view layui-border-box']));\r\n\r\n // code 主题风格\r\n var theme = options.theme || options.skin;\r\n if (theme) {\r\n othis.removeClass('layui-code-theme-dark layui-code-theme-light');\r\n othis.addClass('layui-code-theme-'+ theme);\r\n }\r\n\r\n // 添加高亮必要的 className\r\n if (options.highlighter) {\r\n othis.addClass([\r\n options.highlighter,\r\n 'language-' + options.lang,\r\n 'layui-code-hl'\r\n ].join(' '));\r\n }\r\n\r\n // 获取 code 行结构\r\n var createCodeRst = createCode(\r\n options.encode ? util.escape(finalCode(rawCode)) : rawCode // 是否编码\r\n );\r\n var lines = createCodeRst.lines;\r\n\r\n // 插入 code\r\n othis.html(codeElem.html(createCodeRst.html));\r\n\r\n // 插入行号边栏\r\n if (options.ln) {\r\n othis.append('
                ');\r\n }\r\n\r\n // 兼容旧版本 height 属性\r\n if (options.height) {\r\n codeElem.css('max-height', options.height);\r\n }\r\n\r\n // code 区域样式\r\n options.codeStyle = [options.style, options.codeStyle].join('');\r\n if (options.codeStyle) {\r\n codeElem.attr('style', function(i, val) {\r\n return (val || '') + options.codeStyle;\r\n });\r\n }\r\n\r\n // 动态设置样式\r\n var cssRules = [\r\n {\r\n selector: '>.layui-code-wrap>.layui-code-line{}',\r\n setValue: function(item, value) {\r\n item.style['padding-left'] = value + 'px';\r\n }\r\n },\r\n {\r\n selector: '>.layui-code-wrap>.layui-code-line>.layui-code-line-number{}',\r\n setValue: function(item, value) {\r\n item.style.width = value + 'px';\r\n }\r\n },\r\n {\r\n selector: '>.layui-code-ln-side{}',\r\n setValue: function(item, value) {\r\n item.style.width = value + 'px';\r\n }\r\n }\r\n ];\r\n\r\n // 生成初始 style 元素\r\n var styleElem = lay.style({\r\n target: othis[0],\r\n id: 'DF-code-'+ index,\r\n text: $.map($.map(cssRules, function(val){\r\n return val.selector;\r\n }), function(val, i) {\r\n return ['.layui-code-view[lay-code-index=\"'+ index + '\"]', val].join(' ');\r\n }).join('')\r\n })\r\n\r\n // 动态设置 code 布局\r\n var setCodeLayout = (function fn() {\r\n if (options.ln) {\r\n var multiLine = Math.floor(lines.length / 100);\r\n var lineElem = codeElem.children('.'+ CONST.ELEM_LINE);\r\n var width = lineElem.last().children('.'+ CONST.ELEM_LINE_NUM).outerWidth();\r\n\r\n othis.addClass(CONST.ELEM_LN_MODE);\r\n\r\n // 若超出 100 行\r\n if (multiLine && width > CONST.LINE_RAW_WIDTH) {\r\n lay.getStyleRules(styleElem, function(item, i) {\r\n try {\r\n cssRules[i].setValue(item, width);\r\n } catch(e) { }\r\n });\r\n }\r\n }\r\n\r\n return fn;\r\n })();\r\n\r\n // 创建 code header\r\n if (options.header) {\r\n var headerElem = $('
                ');\r\n headerElem.html(options.title || options.text.code);\r\n othis.prepend(headerElem);\r\n }\r\n\r\n // 创建 code 区域固定条\r\n var elemFixbar = $('
                ');\r\n\r\n // 若开启复制,且未开启预览,则单独生成复制图标\r\n if(options.copy && !options.preview){\r\n var copyElem = $(['',\r\n '',\r\n ''].join(''));\r\n\r\n // 点击复制\r\n copyElem.on('click', function(){\r\n tools.copy.event();\r\n });\r\n\r\n elemFixbar.append(copyElem);\r\n }\r\n\r\n // 创建 language marker\r\n if (options.langMarker) {\r\n elemFixbar.append('' + options.lang + '');\r\n }\r\n\r\n // 创建 about 自定义内容\r\n if (options.about) {\r\n elemFixbar.append(options.about);\r\n }\r\n\r\n // 生成 code fixbar\r\n othis.append(elemFixbar);\r\n\r\n // code 渲染完毕后的回调\r\n if (!options.preview) {\r\n setTimeout(function(){\r\n typeof options.done === 'function' && options.done({});\r\n },3);\r\n }\r\n\r\n // 所有实例渲染完毕后的回调\r\n if(options.elem.length === index + 1){\r\n typeof options.allDone === 'function' && options.allDone();\r\n }\r\n\r\n return ret;\r\n });\r\n});\r\n\r\n// 若为源码版,则自动加载该组件依赖的 css 文件\r\nif(!layui['layui.all']){\r\n layui.addcss('modules/code.css?v=6', 'skincodecss');\r\n}\r\n"]} \ No newline at end of file diff --git a/web/static/lib/echarts.min.js b/web/static/lib/echarts.min.js new file mode 100644 index 0000000..835966f --- /dev/null +++ b/web/static/lib/echarts.min.js @@ -0,0 +1,45 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).echarts={})}(this,(function(t){"use strict"; +/*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},e(t,n)};function n(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}var i=function(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1},r=new function(){this.browser=new i,this.node=!1,this.wxa=!1,this.worker=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1,this.hasGlobalWindow="undefined"!=typeof window};"object"==typeof wx&&"function"==typeof wx.getSystemInfoSync?(r.wxa=!0,r.touchEventsSupported=!0):"undefined"==typeof document&&"undefined"!=typeof self?r.worker=!0:"undefined"==typeof navigator||0===navigator.userAgent.indexOf("Node.js")?(r.node=!0,r.svgSupported=!0):function(t,e){var n=e.browser,i=t.match(/Firefox\/([\d.]+)/),r=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),o=t.match(/Edge?\/([\d.]+)/),a=/micromessenger/i.test(t);i&&(n.firefox=!0,n.version=i[1]);r&&(n.ie=!0,n.version=r[1]);o&&(n.edge=!0,n.version=o[1],n.newEdge=+o[1].split(".")[0]>18);a&&(n.weChat=!0);e.svgSupported="undefined"!=typeof SVGRect,e.touchEventsSupported="ontouchstart"in window&&!n.ie&&!n.edge,e.pointerEventsSupported="onpointerdown"in window&&(n.edge||n.ie&&+n.version>=11),e.domSupported="undefined"!=typeof document;var s=document.documentElement.style;e.transform3dSupported=(n.ie&&"transition"in s||n.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||n.ie&&+n.version>=9}(navigator.userAgent,r);var o="sans-serif",a="12px "+o;var s,l,u=function(t){var e={};if("undefined"==typeof JSON)return e;for(var n=0;n=0)o=r*t.length;else for(var c=0;c>1)%2;a.style.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",i[s]+":0",r[l]+":0",i[1-s]+":auto",r[1-l]+":auto",""].join("!important;"),t.appendChild(a),n.push(a)}return n}(e,a),l=function(t,e,n){for(var i=n?"invTrans":"trans",r=e[i],o=e.srcCoords,a=[],s=[],l=!0,u=0;u<4;u++){var h=t[u].getBoundingClientRect(),c=2*u,p=h.left,d=h.top;a.push(p,d),l=l&&o&&p===o[c]&&d===o[c+1],s.push(t[u].offsetLeft,t[u].offsetTop)}return l&&r?r:(e.srcCoords=a,e[i]=n?$t(s,a):$t(a,s))}(s,a,o);if(l)return l(t,n,i),!0}return!1}function ee(t){return"CANVAS"===t.nodeName.toUpperCase()}var ne=/([&<>"'])/g,ie={"&":"&","<":"<",">":">",'"':""","'":"'"};function re(t){return null==t?"":(t+"").replace(ne,(function(t,e){return ie[e]}))}var oe=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ae=[],se=r.browser.firefox&&+r.browser.version.split(".")[0]<39;function le(t,e,n,i){return n=n||{},i?ue(t,e,n):se&&null!=e.layerX&&e.layerX!==e.offsetX?(n.zrX=e.layerX,n.zrY=e.layerY):null!=e.offsetX?(n.zrX=e.offsetX,n.zrY=e.offsetY):ue(t,e,n),n}function ue(t,e,n){if(r.domSupported&&t.getBoundingClientRect){var i=e.clientX,o=e.clientY;if(ee(t)){var a=t.getBoundingClientRect();return n.zrX=i-a.left,void(n.zrY=o-a.top)}if(te(ae,t,i,o))return n.zrX=ae[0],void(n.zrY=ae[1])}n.zrX=n.zrY=0}function he(t){return t||window.event}function ce(t,e,n){if(null!=(e=he(e)).zrX)return e;var i=e.type;if(i&&i.indexOf("touch")>=0){var r="touchend"!==i?e.targetTouches[0]:e.changedTouches[0];r&&le(t,r,e,n)}else{le(t,e,e,n);var o=function(t){var e=t.wheelDelta;if(e)return e;var n=t.deltaX,i=t.deltaY;if(null==n||null==i)return e;return 3*(0!==i?Math.abs(i):Math.abs(n))*(i>0?-1:i<0?1:n>0?-1:1)}(e);e.zrDelta=o?o/120:-(e.detail||0)/3}var a=e.button;return null==e.which&&void 0!==a&&oe.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function pe(t,e,n,i){t.addEventListener(e,n,i)}var de=function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0};function fe(t){return 2===t.which||3===t.which}var ge=function(){function t(){this._track=[]}return t.prototype.recognize=function(t,e,n){return this._doTrack(t,e,n),this._recognize(t)},t.prototype.clear=function(){return this._track.length=0,this},t.prototype._doTrack=function(t,e,n){var i=t.touches;if(i){for(var r={points:[],touches:[],target:e,event:t},o=0,a=i.length;o1&&r&&r.length>1){var a=ye(r)/ye(o);!isFinite(a)&&(a=1),e.pinchScale=a;var s=[((i=r)[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2];return e.pinchX=s[0],e.pinchY=s[1],{type:"pinch",target:t[0].target,event:e}}}}};function me(){return[1,0,0,1,0,0]}function xe(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function _e(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function be(t,e,n){var i=e[0]*n[0]+e[2]*n[1],r=e[1]*n[0]+e[3]*n[1],o=e[0]*n[2]+e[2]*n[3],a=e[1]*n[2]+e[3]*n[3],s=e[0]*n[4]+e[2]*n[5]+e[4],l=e[1]*n[4]+e[3]*n[5]+e[5];return t[0]=i,t[1]=r,t[2]=o,t[3]=a,t[4]=s,t[5]=l,t}function we(t,e,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+n[0],t[5]=e[5]+n[1],t}function Se(t,e,n,i){void 0===i&&(i=[0,0]);var r=e[0],o=e[2],a=e[4],s=e[1],l=e[3],u=e[5],h=Math.sin(n),c=Math.cos(n);return t[0]=r*c+s*h,t[1]=-r*h+s*c,t[2]=o*c+l*h,t[3]=-o*h+c*l,t[4]=c*(a-i[0])+h*(u-i[1])+i[0],t[5]=c*(u-i[1])-h*(a-i[0])+i[1],t}function Me(t,e,n){var i=n[0],r=n[1];return t[0]=e[0]*i,t[1]=e[1]*r,t[2]=e[2]*i,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*r,t}function Ie(t,e){var n=e[0],i=e[2],r=e[4],o=e[1],a=e[3],s=e[5],l=n*a-o*i;return l?(l=1/l,t[0]=a*l,t[1]=-o*l,t[2]=-i*l,t[3]=n*l,t[4]=(i*s-a*r)*l,t[5]=(o*r-n*s)*l,t):null}function Te(t){var e=[1,0,0,1,0,0];return _e(e,t),e}var Ce=Object.freeze({__proto__:null,create:me,identity:xe,copy:_e,mul:be,translate:we,rotate:Se,scale:Me,invert:Ie,clone:Te}),De=function(){function t(t,e){this.x=t||0,this.y=e||0}return t.prototype.copy=function(t){return this.x=t.x,this.y=t.y,this},t.prototype.clone=function(){return new t(this.x,this.y)},t.prototype.set=function(t,e){return this.x=t,this.y=e,this},t.prototype.equal=function(t){return t.x===this.x&&t.y===this.y},t.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},t.prototype.scale=function(t){this.x*=t,this.y*=t},t.prototype.scaleAndAdd=function(t,e){this.x+=t.x*e,this.y+=t.y*e},t.prototype.sub=function(t){return this.x-=t.x,this.y-=t.y,this},t.prototype.dot=function(t){return this.x*t.x+this.y*t.y},t.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},t.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},t.prototype.normalize=function(){var t=this.len();return this.x/=t,this.y/=t,this},t.prototype.distance=function(t){var e=this.x-t.x,n=this.y-t.y;return Math.sqrt(e*e+n*n)},t.prototype.distanceSquare=function(t){var e=this.x-t.x,n=this.y-t.y;return e*e+n*n},t.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},t.prototype.transform=function(t){if(t){var e=this.x,n=this.y;return this.x=t[0]*e+t[2]*n+t[4],this.y=t[1]*e+t[3]*n+t[5],this}},t.prototype.toArray=function(t){return t[0]=this.x,t[1]=this.y,t},t.prototype.fromArray=function(t){this.x=t[0],this.y=t[1]},t.set=function(t,e,n){t.x=e,t.y=n},t.copy=function(t,e){t.x=e.x,t.y=e.y},t.len=function(t){return Math.sqrt(t.x*t.x+t.y*t.y)},t.lenSquare=function(t){return t.x*t.x+t.y*t.y},t.dot=function(t,e){return t.x*e.x+t.y*e.y},t.add=function(t,e,n){t.x=e.x+n.x,t.y=e.y+n.y},t.sub=function(t,e,n){t.x=e.x-n.x,t.y=e.y-n.y},t.scale=function(t,e,n){t.x=e.x*n,t.y=e.y*n},t.scaleAndAdd=function(t,e,n,i){t.x=e.x+n.x*i,t.y=e.y+n.y*i},t.lerp=function(t,e,n,i){var r=1-i;t.x=r*e.x+i*n.x,t.y=r*e.y+i*n.y},t}(),Ae=Math.min,ke=Math.max,Le=new De,Pe=new De,Oe=new De,Re=new De,Ne=new De,Ee=new De,ze=function(){function t(t,e,n,i){n<0&&(t+=n,n=-n),i<0&&(e+=i,i=-i),this.x=t,this.y=e,this.width=n,this.height=i}return t.prototype.union=function(t){var e=Ae(t.x,this.x),n=Ae(t.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=ke(t.x+t.width,this.x+this.width)-e:this.width=t.width,isFinite(this.y)&&isFinite(this.height)?this.height=ke(t.y+t.height,this.y+this.height)-n:this.height=t.height,this.x=e,this.y=n},t.prototype.applyTransform=function(e){t.applyTransform(this,this,e)},t.prototype.calculateTransform=function(t){var e=this,n=t.width/e.width,i=t.height/e.height,r=[1,0,0,1,0,0];return we(r,r,[-e.x,-e.y]),Me(r,r,[n,i]),we(r,r,[t.x,t.y]),r},t.prototype.intersect=function(e,n){if(!e)return!1;e instanceof t||(e=t.create(e));var i=this,r=i.x,o=i.x+i.width,a=i.y,s=i.y+i.height,l=e.x,u=e.x+e.width,h=e.y,c=e.y+e.height,p=!(of&&(f=x,gf&&(f=_,v=n.x&&t<=n.x+n.width&&e>=n.y&&e<=n.y+n.height},t.prototype.clone=function(){return new t(this.x,this.y,this.width,this.height)},t.prototype.copy=function(e){t.copy(this,e)},t.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},t.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},t.prototype.isZero=function(){return 0===this.width||0===this.height},t.create=function(e){return new t(e.x,e.y,e.width,e.height)},t.copy=function(t,e){t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height},t.applyTransform=function(e,n,i){if(i){if(i[1]<1e-5&&i[1]>-1e-5&&i[2]<1e-5&&i[2]>-1e-5){var r=i[0],o=i[3],a=i[4],s=i[5];return e.x=n.x*r+a,e.y=n.y*o+s,e.width=n.width*r,e.height=n.height*o,e.width<0&&(e.x+=e.width,e.width=-e.width),void(e.height<0&&(e.y+=e.height,e.height=-e.height))}Le.x=Oe.x=n.x,Le.y=Re.y=n.y,Pe.x=Re.x=n.x+n.width,Pe.y=Oe.y=n.y+n.height,Le.transform(i),Re.transform(i),Pe.transform(i),Oe.transform(i),e.x=Ae(Le.x,Pe.x,Oe.x,Re.x),e.y=Ae(Le.y,Pe.y,Oe.y,Re.y);var l=ke(Le.x,Pe.x,Oe.x,Re.x),u=ke(Le.y,Pe.y,Oe.y,Re.y);e.width=l-e.x,e.height=u-e.y}else e!==n&&t.copy(e,n)},t}(),Ve="silent";function Be(){de(this.event)}var Fe=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.handler=null,e}return n(e,t),e.prototype.dispose=function(){},e.prototype.setCursor=function(){},e}(jt),Ge=function(t,e){this.x=t,this.y=e},We=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],He=new ze(0,0,0,0),Ye=function(t){function e(e,n,i,r,o){var a=t.call(this)||this;return a._hovered=new Ge(0,0),a.storage=e,a.painter=n,a.painterRoot=r,a._pointerSize=o,i=i||new Fe,a.proxy=null,a.setHandlerProxy(i),a._draggingMgr=new Zt(a),a}return n(e,t),e.prototype.setHandlerProxy=function(t){this.proxy&&this.proxy.dispose(),t&&(E(We,(function(e){t.on&&t.on(e,this[e],this)}),this),t.handler=this),this.proxy=t},e.prototype.mousemove=function(t){var e=t.zrX,n=t.zrY,i=Ze(this,e,n),r=this._hovered,o=r.target;o&&!o.__zr&&(o=(r=this.findHover(r.x,r.y)).target);var a=this._hovered=i?new Ge(e,n):this.findHover(e,n),s=a.target,l=this.proxy;l.setCursor&&l.setCursor(s?s.cursor:"default"),o&&s!==o&&this.dispatchToElement(r,"mouseout",t),this.dispatchToElement(a,"mousemove",t),s&&s!==o&&this.dispatchToElement(a,"mouseover",t)},e.prototype.mouseout=function(t){var e=t.zrEventControl;"only_globalout"!==e&&this.dispatchToElement(this._hovered,"mouseout",t),"no_globalout"!==e&&this.trigger("globalout",{type:"globalout",event:t})},e.prototype.resize=function(){this._hovered=new Ge(0,0)},e.prototype.dispatch=function(t,e){var n=this[t];n&&n.call(this,e)},e.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},e.prototype.setCursorStyle=function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},e.prototype.dispatchToElement=function(t,e,n){var i=(t=t||{}).target;if(!i||!i.silent){for(var r="on"+e,o=function(t,e,n){return{type:t,event:n,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:n.zrX,offsetY:n.zrY,gestureEvent:n.gestureEvent,pinchX:n.pinchX,pinchY:n.pinchY,pinchScale:n.pinchScale,wheelDelta:n.zrDelta,zrByTouch:n.zrByTouch,which:n.which,stop:Be}}(e,t,n);i&&(i[r]&&(o.cancelBubble=!!i[r].call(i,o)),i.trigger(e,o),i=i.__hostTarget?i.__hostTarget:i.parent,!o.cancelBubble););o.cancelBubble||(this.trigger(e,o),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer((function(t){"function"==typeof t[r]&&t[r].call(t,o),t.trigger&&t.trigger(e,o)})))}},e.prototype.findHover=function(t,e,n){var i=this.storage.getDisplayList(),r=new Ge(t,e);if(Ue(i,r,t,e,n),this._pointerSize&&!r.target){for(var o=[],a=this._pointerSize,s=a/2,l=new ze(t-s,e-s,a,a),u=i.length-1;u>=0;u--){var h=i[u];h===n||h.ignore||h.ignoreCoarsePointer||h.parent&&h.parent.ignoreCoarsePointer||(He.copy(h.getBoundingRect()),h.transform&&He.applyTransform(h.transform),He.intersect(l)&&o.push(h))}if(o.length)for(var c=Math.PI/12,p=2*Math.PI,d=0;d=0;o--){var a=t[o],s=void 0;if(a!==r&&!a.ignore&&(s=Xe(a,n,i))&&(!e.topTarget&&(e.topTarget=a),s!==Ve)){e.target=a;break}}}function Ze(t,e,n){var i=t.painter;return e<0||e>i.getWidth()||n<0||n>i.getHeight()}E(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],(function(t){Ye.prototype[t]=function(e){var n,i,r=e.zrX,o=e.zrY,a=Ze(this,r,o);if("mouseup"===t&&a||(i=(n=this.findHover(r,o)).target),"mousedown"===t)this._downEl=i,this._downPoint=[e.zrX,e.zrY],this._upEl=i;else if("mouseup"===t)this._upEl=i;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||Vt(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(n,t,e)}}));function je(t,e,n,i){var r=e+1;if(r===n)return 1;if(i(t[r++],t[e])<0){for(;r=0;)r++;return r-e}function qe(t,e,n,i,r){for(i===e&&i++;i>>1])<0?l=o:s=o+1;var u=i-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;u>0;)t[s+u]=t[s+u-1],u--}t[s]=a}}function Ke(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])>0){for(s=i-r;l0;)a=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}else{for(s=r+1;ls&&(l=s);var u=a;a=r-l,l=r-u}for(a++;a>>1);o(t,e[n+h])>0?a=h+1:l=h}return l}function $e(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])<0){for(s=r+1;ls&&(l=s);var u=a;a=r-l,l=r-u}else{for(s=i-r;l=0;)a=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}for(a++;a>>1);o(t,e[n+h])<0?l=h:a=h+1}return l}function Je(t,e){var n,i,r=7,o=0,a=[];function s(s){var l=n[s],u=i[s],h=n[s+1],c=i[s+1];i[s]=u+c,s===o-3&&(n[s+1]=n[s+2],i[s+1]=i[s+2]),o--;var p=$e(t[h],t,l,u,0,e);l+=p,0!==(u-=p)&&0!==(c=Ke(t[l+u-1],t,h,c,c-1,e))&&(u<=c?function(n,i,o,s){var l=0;for(l=0;l=7||d>=7);if(f)break;g<0&&(g=0),g+=2}if((r=g)<1&&(r=1),1===i){for(l=0;l=0;l--)t[d+l]=t[p+l];return void(t[c]=a[h])}var f=r;for(;;){var g=0,y=0,v=!1;do{if(e(a[h],t[u])<0){if(t[c--]=t[u--],g++,y=0,0==--i){v=!0;break}}else if(t[c--]=a[h--],y++,g=0,1==--s){v=!0;break}}while((g|y)=0;l--)t[d+l]=t[p+l];if(0===i){v=!0;break}}if(t[c--]=a[h--],1==--s){v=!0;break}if(0!==(y=s-Ke(t[u],a,0,s,s-1,e))){for(s-=y,d=(c-=y)+1,p=(h-=y)+1,l=0;l=7||y>=7);if(v)break;f<0&&(f=0),f+=2}(r=f)<1&&(r=1);if(1===s){for(d=(c-=i)+1,p=(u-=i)+1,l=i-1;l>=0;l--)t[d+l]=t[p+l];t[c]=a[h]}else{if(0===s)throw new Error;for(p=c-(s-1),l=0;l1;){var t=o-2;if(t>=1&&i[t-1]<=i[t]+i[t+1]||t>=2&&i[t-2]<=i[t]+i[t-1])i[t-1]i[t+1])break;s(t)}},forceMergeRuns:function(){for(;o>1;){var t=o-2;t>0&&i[t-1]=32;)e|=1&t,t>>=1;return t+e}(r);do{if((o=je(t,n,i,e))s&&(l=s),qe(t,n,n+l,n+o,e),o=l}a.pushRun(n,o),a.mergeRuns(),r-=o,n+=o}while(0!==r);a.forceMergeRuns()}}}var tn=!1;function en(){tn||(tn=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function nn(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}var rn=function(){function t(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=nn}return t.prototype.traverse=function(t,e){for(var n=0;n0&&(u.__clipPaths=[]),isNaN(u.z)&&(en(),u.z=0),isNaN(u.z2)&&(en(),u.z2=0),isNaN(u.zlevel)&&(en(),u.zlevel=0),this._displayList[this._displayListLen++]=u}var h=t.getDecalElement&&t.getDecalElement();h&&this._updateAndAddDisplayable(h,e,n);var c=t.getTextGuideLine();c&&this._updateAndAddDisplayable(c,e,n);var p=t.getTextContent();p&&this._updateAndAddDisplayable(p,e,n)}},t.prototype.addRoot=function(t){t.__zr&&t.__zr.storage===this||this._roots.push(t)},t.prototype.delRoot=function(t){if(t instanceof Array)for(var e=0,n=t.length;e=0&&this._roots.splice(i,1)}},t.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},t.prototype.getRoots=function(){return this._roots},t.prototype.dispose=function(){this._displayList=null,this._roots=null},t}(),on=r.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){return setTimeout(t,16)},an={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,n=.1;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=.4*Math.asin(1/n)/(2*Math.PI),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,n=.1;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=.4*Math.asin(1/n)/(2*Math.PI),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,n=.1,i=.4;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=i*Math.asin(1/n)/(2*Math.PI),(t*=2)<1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-an.bounceOut(1-t)},bounceOut:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},bounceInOut:function(t){return t<.5?.5*an.bounceIn(2*t):.5*an.bounceOut(2*t-1)+.5}},sn=Math.pow,ln=Math.sqrt,un=1e-8,hn=1e-4,cn=ln(3),pn=1/3,dn=Mt(),fn=Mt(),gn=Mt();function yn(t){return t>-1e-8&&tun||t<-1e-8}function mn(t,e,n,i,r){var o=1-r;return o*o*(o*t+3*r*e)+r*r*(r*i+3*o*n)}function xn(t,e,n,i,r){var o=1-r;return 3*(((e-t)*o+2*(n-e)*r)*o+(i-n)*r*r)}function _n(t,e,n,i,r,o){var a=i+3*(e-n)-t,s=3*(n-2*e+t),l=3*(e-t),u=t-r,h=s*s-3*a*l,c=s*l-9*a*u,p=l*l-3*s*u,d=0;if(yn(h)&&yn(c)){if(yn(s))o[0]=0;else(M=-l/s)>=0&&M<=1&&(o[d++]=M)}else{var f=c*c-4*h*p;if(yn(f)){var g=c/h,y=-g/2;(M=-s/a+g)>=0&&M<=1&&(o[d++]=M),y>=0&&y<=1&&(o[d++]=y)}else if(f>0){var v=ln(f),m=h*s+1.5*a*(-c+v),x=h*s+1.5*a*(-c-v);(M=(-s-((m=m<0?-sn(-m,pn):sn(m,pn))+(x=x<0?-sn(-x,pn):sn(x,pn))))/(3*a))>=0&&M<=1&&(o[d++]=M)}else{var _=(2*h*s-3*a*c)/(2*ln(h*h*h)),b=Math.acos(_)/3,w=ln(h),S=Math.cos(b),M=(-s-2*w*S)/(3*a),I=(y=(-s+w*(S+cn*Math.sin(b)))/(3*a),(-s+w*(S-cn*Math.sin(b)))/(3*a));M>=0&&M<=1&&(o[d++]=M),y>=0&&y<=1&&(o[d++]=y),I>=0&&I<=1&&(o[d++]=I)}}return d}function bn(t,e,n,i,r){var o=6*n-12*e+6*t,a=9*e+3*i-3*t-9*n,s=3*e-3*t,l=0;if(yn(a)){if(vn(o))(h=-s/o)>=0&&h<=1&&(r[l++]=h)}else{var u=o*o-4*a*s;if(yn(u))r[0]=-o/(2*a);else if(u>0){var h,c=ln(u),p=(-o-c)/(2*a);(h=(-o+c)/(2*a))>=0&&h<=1&&(r[l++]=h),p>=0&&p<=1&&(r[l++]=p)}}return l}function wn(t,e,n,i,r,o){var a=(e-t)*r+t,s=(n-e)*r+e,l=(i-n)*r+n,u=(s-a)*r+a,h=(l-s)*r+s,c=(h-u)*r+u;o[0]=t,o[1]=a,o[2]=u,o[3]=c,o[4]=c,o[5]=h,o[6]=l,o[7]=i}function Sn(t,e,n,i,r,o,a,s,l,u,h){var c,p,d,f,g,y=.005,v=1/0;dn[0]=l,dn[1]=u;for(var m=0;m<1;m+=.05)fn[0]=mn(t,n,r,a,m),fn[1]=mn(e,i,o,s,m),(f=Ft(dn,fn))=0&&f=0&&y=1?1:_n(0,i,o,1,t,s)&&mn(0,r,a,1,s[0])}}}var On=function(){function t(t){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=t.life||1e3,this._delay=t.delay||0,this.loop=t.loop||!1,this.onframe=t.onframe||bt,this.ondestroy=t.ondestroy||bt,this.onrestart=t.onrestart||bt,t.easing&&this.setEasing(t.easing)}return t.prototype.step=function(t,e){if(this._inited||(this._startTime=t+this._delay,this._inited=!0),!this._paused){var n=this._life,i=t-this._startTime-this._pausedTime,r=i/n;r<0&&(r=0),r=Math.min(r,1);var o=this.easingFunc,a=o?o(r):r;if(this.onframe(a),1===r){if(!this.loop)return!0;var s=i%n;this._startTime=t-s,this._pausedTime=0,this.onrestart()}return!1}this._pausedTime+=e},t.prototype.pause=function(){this._paused=!0},t.prototype.resume=function(){this._paused=!1},t.prototype.setEasing=function(t){this.easing=t,this.easingFunc=X(t)?t:an[t]||Pn(t)},t}(),Rn=function(t){this.value=t},Nn=function(){function t(){this._len=0}return t.prototype.insert=function(t){var e=new Rn(t);return this.insertEntry(e),e},t.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},t.prototype.remove=function(t){var e=t.prev,n=t.next;e?e.next=n:this.head=n,n?n.prev=e:this.tail=e,t.next=t.prev=null,this._len--},t.prototype.len=function(){return this._len},t.prototype.clear=function(){this.head=this.tail=null,this._len=0},t}(),En=function(){function t(t){this._list=new Nn,this._maxSize=10,this._map={},this._maxSize=t}return t.prototype.put=function(t,e){var n=this._list,i=this._map,r=null;if(null==i[t]){var o=n.len(),a=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var s=n.head;n.remove(s),delete i[s.key],r=s.value,this._lastRemovedEntry=s}a?a.value=e:a=new Rn(e),a.key=t,n.insertEntry(a),i[t]=a}return r},t.prototype.get=function(t){var e=this._map[t],n=this._list;if(null!=e)return e!==n.tail&&(n.remove(e),n.insertEntry(e)),e.value},t.prototype.clear=function(){this._list.clear(),this._map={}},t.prototype.len=function(){return this._list.len()},t}(),zn={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function Vn(t){return(t=Math.round(t))<0?0:t>255?255:t}function Bn(t){return t<0?0:t>1?1:t}function Fn(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?Vn(parseFloat(e)/100*255):Vn(parseInt(e,10))}function Gn(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?Bn(parseFloat(e)/100):Bn(parseFloat(e))}function Wn(t,e,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?t+(e-t)*n*6:2*n<1?e:3*n<2?t+(e-t)*(2/3-n)*6:t}function Hn(t,e,n){return t+(e-t)*n}function Yn(t,e,n,i,r){return t[0]=e,t[1]=n,t[2]=i,t[3]=r,t}function Xn(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}var Un=new En(20),Zn=null;function jn(t,e){Zn&&Xn(Zn,e),Zn=Un.put(t,Zn||e.slice())}function qn(t,e){if(t){e=e||[];var n=Un.get(t);if(n)return Xn(e,n);var i=(t+="").replace(/ /g,"").toLowerCase();if(i in zn)return Xn(e,zn[i]),jn(t,e),e;var r,o=i.length;if("#"===i.charAt(0))return 4===o||5===o?(r=parseInt(i.slice(1,4),16))>=0&&r<=4095?(Yn(e,(3840&r)>>4|(3840&r)>>8,240&r|(240&r)>>4,15&r|(15&r)<<4,5===o?parseInt(i.slice(4),16)/15:1),jn(t,e),e):void Yn(e,0,0,0,1):7===o||9===o?(r=parseInt(i.slice(1,7),16))>=0&&r<=16777215?(Yn(e,(16711680&r)>>16,(65280&r)>>8,255&r,9===o?parseInt(i.slice(7),16)/255:1),jn(t,e),e):void Yn(e,0,0,0,1):void 0;var a=i.indexOf("("),s=i.indexOf(")");if(-1!==a&&s+1===o){var l=i.substr(0,a),u=i.substr(a+1,s-(a+1)).split(","),h=1;switch(l){case"rgba":if(4!==u.length)return 3===u.length?Yn(e,+u[0],+u[1],+u[2],1):Yn(e,0,0,0,1);h=Gn(u.pop());case"rgb":return u.length>=3?(Yn(e,Fn(u[0]),Fn(u[1]),Fn(u[2]),3===u.length?h:Gn(u[3])),jn(t,e),e):void Yn(e,0,0,0,1);case"hsla":return 4!==u.length?void Yn(e,0,0,0,1):(u[3]=Gn(u[3]),Kn(u,e),jn(t,e),e);case"hsl":return 3!==u.length?void Yn(e,0,0,0,1):(Kn(u,e),jn(t,e),e);default:return}}Yn(e,0,0,0,1)}}function Kn(t,e){var n=(parseFloat(t[0])%360+360)%360/360,i=Gn(t[1]),r=Gn(t[2]),o=r<=.5?r*(i+1):r+i-r*i,a=2*r-o;return Yn(e=e||[],Vn(255*Wn(a,o,n+1/3)),Vn(255*Wn(a,o,n)),Vn(255*Wn(a,o,n-1/3)),1),4===t.length&&(e[3]=t[3]),e}function $n(t,e){var n=qn(t);if(n){for(var i=0;i<3;i++)n[i]=e<0?n[i]*(1-e)|0:(255-n[i])*e+n[i]|0,n[i]>255?n[i]=255:n[i]<0&&(n[i]=0);return ri(n,4===n.length?"rgba":"rgb")}}function Jn(t,e,n){if(e&&e.length&&t>=0&&t<=1){n=n||[];var i=t*(e.length-1),r=Math.floor(i),o=Math.ceil(i),a=e[r],s=e[o],l=i-r;return n[0]=Vn(Hn(a[0],s[0],l)),n[1]=Vn(Hn(a[1],s[1],l)),n[2]=Vn(Hn(a[2],s[2],l)),n[3]=Bn(Hn(a[3],s[3],l)),n}}var Qn=Jn;function ti(t,e,n){if(e&&e.length&&t>=0&&t<=1){var i=t*(e.length-1),r=Math.floor(i),o=Math.ceil(i),a=qn(e[r]),s=qn(e[o]),l=i-r,u=ri([Vn(Hn(a[0],s[0],l)),Vn(Hn(a[1],s[1],l)),Vn(Hn(a[2],s[2],l)),Bn(Hn(a[3],s[3],l))],"rgba");return n?{color:u,leftIndex:r,rightIndex:o,value:i}:u}}var ei=ti;function ni(t,e,n,i){var r=qn(t);if(t)return r=function(t){if(t){var e,n,i=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(i,r,o),s=Math.max(i,r,o),l=s-a,u=(s+a)/2;if(0===l)e=0,n=0;else{n=u<.5?l/(s+a):l/(2-s-a);var h=((s-i)/6+l/2)/l,c=((s-r)/6+l/2)/l,p=((s-o)/6+l/2)/l;i===s?e=p-c:r===s?e=1/3+h-p:o===s&&(e=2/3+c-h),e<0&&(e+=1),e>1&&(e-=1)}var d=[360*e,n,u];return null!=t[3]&&d.push(t[3]),d}}(r),null!=e&&(r[0]=function(t){return(t=Math.round(t))<0?0:t>360?360:t}(e)),null!=n&&(r[1]=Gn(n)),null!=i&&(r[2]=Gn(i)),ri(Kn(r),"rgba")}function ii(t,e){var n=qn(t);if(n&&null!=e)return n[3]=Bn(e),ri(n,"rgba")}function ri(t,e){if(t&&t.length){var n=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(n+=","+t[3]),e+"("+n+")"}}function oi(t,e){var n=qn(t);return n?(.299*n[0]+.587*n[1]+.114*n[2])*n[3]/255+(1-n[3])*e:0}var ai=new En(100);function si(t){if(U(t)){var e=ai.get(t);return e||(e=$n(t,-.1),ai.put(t,e)),e}if(Q(t)){var n=A({},t);return n.colorStops=z(t.colorStops,(function(t){return{offset:t.offset,color:$n(t.color,-.1)}})),n}return t}var li=Object.freeze({__proto__:null,parse:qn,lift:$n,toHex:function(t){var e=qn(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)},fastLerp:Jn,fastMapToColor:Qn,lerp:ti,mapToColor:ei,modifyHSL:ni,modifyAlpha:ii,stringify:ri,lum:oi,random:function(){return ri([Math.round(255*Math.random()),Math.round(255*Math.random()),Math.round(255*Math.random())],"rgb")},liftColor:si}),ui=Math.round;function hi(t){var e;if(t&&"transparent"!==t){if("string"==typeof t&&t.indexOf("rgba")>-1){var n=qn(t);n&&(t="rgb("+n[0]+","+n[1]+","+n[2]+")",e=n[3])}}else t="none";return{color:t,opacity:null==e?1:e}}var ci=1e-4;function pi(t){return t-1e-4}function di(t){return ui(1e3*t)/1e3}function fi(t){return ui(1e4*t)/1e4}var gi={left:"start",right:"end",center:"middle",middle:"middle"};function yi(t){return t&&!!t.image}function vi(t){return yi(t)||function(t){return t&&!!t.svgElement}(t)}function mi(t){return"linear"===t.type}function xi(t){return"radial"===t.type}function _i(t){return t&&("linear"===t.type||"radial"===t.type)}function bi(t){return"url(#"+t+")"}function wi(t){var e=t.getGlobalScale(),n=Math.max(e[0],e[1]);return Math.max(Math.ceil(Math.log(n)/Math.log(10)),1)}function Si(t){var e=t.x||0,n=t.y||0,i=(t.rotation||0)*wt,r=rt(t.scaleX,1),o=rt(t.scaleY,1),a=t.skewX||0,s=t.skewY||0,l=[];return(e||n)&&l.push("translate("+e+"px,"+n+"px)"),i&&l.push("rotate("+i+")"),1===r&&1===o||l.push("scale("+r+","+o+")"),(a||s)&&l.push("skew("+ui(a*wt)+"deg, "+ui(s*wt)+"deg)"),l.join(" ")}var Mi=r.hasGlobalWindow&&X(window.btoa)?function(t){return window.btoa(unescape(encodeURIComponent(t)))}:"undefined"!=typeof Buffer?function(t){return Buffer.from(t).toString("base64")}:function(t){return null},Ii=Array.prototype.slice;function Ti(t,e,n){return(e-t)*n+t}function Ci(t,e,n,i){for(var r=e.length,o=0;oi?e:t,o=Math.min(n,i),a=r[o-1]||{color:[0,0,0,0],offset:0},s=o;sa)i.length=a;else for(var s=o;s=1},t.prototype.getAdditiveTrack=function(){return this._additiveTrack},t.prototype.addKeyframe=function(t,e,n){this._needsSort=!0;var i=this.keyframes,r=i.length,o=!1,a=6,s=e;if(N(e)){var l=function(t){return N(t&&t[0])?2:1}(e);a=l,(1===l&&!j(e[0])||2===l&&!j(e[0][0]))&&(o=!0)}else if(j(e)&&!nt(e))a=0;else if(U(e))if(isNaN(+e)){var u=qn(e);u&&(s=u,a=3)}else a=0;else if(Q(e)){var h=A({},s);h.colorStops=z(e.colorStops,(function(t){return{offset:t.offset,color:qn(t.color)}})),mi(e)?a=4:xi(e)&&(a=5),s=h}0===r?this.valType=a:a===this.valType&&6!==a||(o=!0),this.discrete=this.discrete||o;var c={time:t,value:s,rawValue:e,percent:0};return n&&(c.easing=n,c.easingFunc=X(n)?n:an[n]||Pn(n)),i.push(c),c},t.prototype.prepare=function(t,e){var n=this.keyframes;this._needsSort&&n.sort((function(t,e){return t.time-e.time}));for(var i=this.valType,r=n.length,o=n[r-1],a=this.discrete,s=Ni(i),l=Ri(i),u=0;u=0&&!(l[n].percent<=e);n--);n=d(n,u-2)}else{for(n=p;ne);n++);n=d(n-1,u-2)}r=l[n+1],i=l[n]}if(i&&r){this._lastFr=n,this._lastFrP=e;var f=r.percent-i.percent,g=0===f?1:d((e-i.percent)/f,1);r.easingFunc&&(g=r.easingFunc(g));var y=o?this._additiveValue:c?Ei:t[h];if(!Ni(s)&&!c||y||(y=this._additiveValue=[]),this.discrete)t[h]=g<1?i.rawValue:r.rawValue;else if(Ni(s))1===s?Ci(y,i[a],r[a],g):function(t,e,n,i){for(var r=e.length,o=r&&e[0].length,a=0;a0&&s.addKeyframe(0,Pi(l),i),this._trackKeys.push(a)}s.addKeyframe(t,Pi(e[a]),i)}return this._maxTime=Math.max(this._maxTime,t),this},t.prototype.pause=function(){this._clip.pause(),this._paused=!0},t.prototype.resume=function(){this._clip.resume(),this._paused=!1},t.prototype.isPaused=function(){return!!this._paused},t.prototype.duration=function(t){return this._maxTime=t,this._force=!0,this},t.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var t=this._doneCbs;if(t)for(var e=t.length,n=0;n0)){this._started=1;for(var e=this,n=[],i=this._maxTime||0,r=0;r1){var a=o.pop();r.addKeyframe(a.time,t[i]),r.prepare(this._maxTime,r.getAdditiveTrack())}}}},t}();function Bi(){return(new Date).getTime()}var Fi,Gi,Wi=function(t){function e(e){var n=t.call(this)||this;return n._running=!1,n._time=0,n._pausedTime=0,n._pauseStart=0,n._paused=!1,e=e||{},n.stage=e.stage||{},n}return n(e,t),e.prototype.addClip=function(t){t.animation&&this.removeClip(t),this._head?(this._tail.next=t,t.prev=this._tail,t.next=null,this._tail=t):this._head=this._tail=t,t.animation=this},e.prototype.addAnimator=function(t){t.animation=this;var e=t.getClip();e&&this.addClip(e)},e.prototype.removeClip=function(t){if(t.animation){var e=t.prev,n=t.next;e?e.next=n:this._head=n,n?n.prev=e:this._tail=e,t.next=t.prev=t.animation=null}},e.prototype.removeAnimator=function(t){var e=t.getClip();e&&this.removeClip(e),t.animation=null},e.prototype.update=function(t){for(var e=Bi()-this._pausedTime,n=e-this._time,i=this._head;i;){var r=i.next;i.step(e,n)?(i.ondestroy(),this.removeClip(i),i=r):i=r}this._time=e,t||(this.trigger("frame",n),this.stage.update&&this.stage.update())},e.prototype._startLoop=function(){var t=this;this._running=!0,on((function e(){t._running&&(on(e),!t._paused&&t.update())}))},e.prototype.start=function(){this._running||(this._time=Bi(),this._pausedTime=0,this._startLoop())},e.prototype.stop=function(){this._running=!1},e.prototype.pause=function(){this._paused||(this._pauseStart=Bi(),this._paused=!0)},e.prototype.resume=function(){this._paused&&(this._pausedTime+=Bi()-this._pauseStart,this._paused=!1)},e.prototype.clear=function(){for(var t=this._head;t;){var e=t.next;t.prev=t.next=t.animation=null,t=e}this._head=this._tail=null},e.prototype.isFinished=function(){return null==this._head},e.prototype.animate=function(t,e){e=e||{},this.start();var n=new Vi(t,e.loop);return this.addAnimator(n),n},e}(jt),Hi=r.domSupported,Yi=(Gi={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},{mouse:Fi=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],touch:["touchstart","touchend","touchmove"],pointer:z(Fi,(function(t){var e=t.replace("mouse","pointer");return Gi.hasOwnProperty(e)?e:t}))}),Xi=["mousemove","mouseup"],Ui=["pointermove","pointerup"],Zi=!1;function ji(t){var e=t.pointerType;return"pen"===e||"touch"===e}function qi(t){t&&(t.zrByTouch=!0)}function Ki(t,e){for(var n=e,i=!1;n&&9!==n.nodeType&&!(i=n.domBelongToZr||n!==e&&n===t.painterRoot);)n=n.parentNode;return i}var $i=function(t,e){this.stopPropagation=bt,this.stopImmediatePropagation=bt,this.preventDefault=bt,this.type=e.type,this.target=this.currentTarget=t.dom,this.pointerType=e.pointerType,this.clientX=e.clientX,this.clientY=e.clientY},Ji={mousedown:function(t){t=ce(this.dom,t),this.__mayPointerCapture=[t.zrX,t.zrY],this.trigger("mousedown",t)},mousemove:function(t){t=ce(this.dom,t);var e=this.__mayPointerCapture;!e||t.zrX===e[0]&&t.zrY===e[1]||this.__togglePointerCapture(!0),this.trigger("mousemove",t)},mouseup:function(t){t=ce(this.dom,t),this.__togglePointerCapture(!1),this.trigger("mouseup",t)},mouseout:function(t){Ki(this,(t=ce(this.dom,t)).toElement||t.relatedTarget)||(this.__pointerCapturing&&(t.zrEventControl="no_globalout"),this.trigger("mouseout",t))},wheel:function(t){Zi=!0,t=ce(this.dom,t),this.trigger("mousewheel",t)},mousewheel:function(t){Zi||(t=ce(this.dom,t),this.trigger("mousewheel",t))},touchstart:function(t){qi(t=ce(this.dom,t)),this.__lastTouchMoment=new Date,this.handler.processGesture(t,"start"),Ji.mousemove.call(this,t),Ji.mousedown.call(this,t)},touchmove:function(t){qi(t=ce(this.dom,t)),this.handler.processGesture(t,"change"),Ji.mousemove.call(this,t)},touchend:function(t){qi(t=ce(this.dom,t)),this.handler.processGesture(t,"end"),Ji.mouseup.call(this,t),+new Date-+this.__lastTouchMoment<300&&Ji.click.call(this,t)},pointerdown:function(t){Ji.mousedown.call(this,t)},pointermove:function(t){ji(t)||Ji.mousemove.call(this,t)},pointerup:function(t){Ji.mouseup.call(this,t)},pointerout:function(t){ji(t)||Ji.mouseout.call(this,t)}};E(["click","dblclick","contextmenu"],(function(t){Ji[t]=function(e){e=ce(this.dom,e),this.trigger(t,e)}}));var Qi={pointermove:function(t){ji(t)||Qi.mousemove.call(this,t)},pointerup:function(t){Qi.mouseup.call(this,t)},mousemove:function(t){this.trigger("mousemove",t)},mouseup:function(t){var e=this.__pointerCapturing;this.__togglePointerCapture(!1),this.trigger("mouseup",t),e&&(t.zrEventControl="only_globalout",this.trigger("mouseout",t))}};function tr(t,e){var n=e.domHandlers;r.pointerEventsSupported?E(Yi.pointer,(function(i){nr(e,i,(function(e){n[i].call(t,e)}))})):(r.touchEventsSupported&&E(Yi.touch,(function(i){nr(e,i,(function(r){n[i].call(t,r),function(t){t.touching=!0,null!=t.touchTimer&&(clearTimeout(t.touchTimer),t.touchTimer=null),t.touchTimer=setTimeout((function(){t.touching=!1,t.touchTimer=null}),700)}(e)}))})),E(Yi.mouse,(function(i){nr(e,i,(function(r){r=he(r),e.touching||n[i].call(t,r)}))})))}function er(t,e){function n(n){nr(e,n,(function(i){i=he(i),Ki(t,i.target)||(i=function(t,e){return ce(t.dom,new $i(t,e),!0)}(t,i),e.domHandlers[n].call(t,i))}),{capture:!0})}r.pointerEventsSupported?E(Ui,n):r.touchEventsSupported||E(Xi,n)}function nr(t,e,n,i){t.mounted[e]=n,t.listenerOpts[e]=i,pe(t.domTarget,e,n,i)}function ir(t){var e,n,i,r,o=t.mounted;for(var a in o)o.hasOwnProperty(a)&&(e=t.domTarget,n=a,i=o[a],r=t.listenerOpts[a],e.removeEventListener(n,i,r));t.mounted={}}var rr=function(t,e){this.mounted={},this.listenerOpts={},this.touching=!1,this.domTarget=t,this.domHandlers=e},or=function(t){function e(e,n){var i=t.call(this)||this;return i.__pointerCapturing=!1,i.dom=e,i.painterRoot=n,i._localHandlerScope=new rr(e,Ji),Hi&&(i._globalHandlerScope=new rr(document,Qi)),tr(i,i._localHandlerScope),i}return n(e,t),e.prototype.dispose=function(){ir(this._localHandlerScope),Hi&&ir(this._globalHandlerScope)},e.prototype.setCursor=function(t){this.dom.style&&(this.dom.style.cursor=t||"default")},e.prototype.__togglePointerCapture=function(t){if(this.__mayPointerCapture=null,Hi&&+this.__pointerCapturing^+t){this.__pointerCapturing=t;var e=this._globalHandlerScope;t?er(this,e):ir(e)}},e}(jt),ar=1;r.hasGlobalWindow&&(ar=Math.max(window.devicePixelRatio||window.screen&&window.screen.deviceXDPI/window.screen.logicalXDPI||1,1));var sr=ar,lr="#333",ur="#ccc",hr=xe,cr=5e-5;function pr(t){return t>cr||t<-5e-5}var dr=[],fr=[],gr=[1,0,0,1,0,0],yr=Math.abs,vr=function(){function t(){}return t.prototype.getLocalTransform=function(e){return t.getLocalTransform(this,e)},t.prototype.setPosition=function(t){this.x=t[0],this.y=t[1]},t.prototype.setScale=function(t){this.scaleX=t[0],this.scaleY=t[1]},t.prototype.setSkew=function(t){this.skewX=t[0],this.skewY=t[1]},t.prototype.setOrigin=function(t){this.originX=t[0],this.originY=t[1]},t.prototype.needLocalTransform=function(){return pr(this.rotation)||pr(this.x)||pr(this.y)||pr(this.scaleX-1)||pr(this.scaleY-1)||pr(this.skewX)||pr(this.skewY)},t.prototype.updateTransform=function(){var t=this.parent&&this.parent.transform,e=this.needLocalTransform(),n=this.transform;e||t?(n=n||[1,0,0,1,0,0],e?this.getLocalTransform(n):hr(n),t&&(e?be(n,t,n):_e(n,t)),this.transform=n,this._resolveGlobalScaleRatio(n)):n&&(hr(n),this.invTransform=null)},t.prototype._resolveGlobalScaleRatio=function(t){var e=this.globalScaleRatio;if(null!=e&&1!==e){this.getGlobalScale(dr);var n=dr[0]<0?-1:1,i=dr[1]<0?-1:1,r=((dr[0]-n)*e+n)/dr[0]||0,o=((dr[1]-i)*e+i)/dr[1]||0;t[0]*=r,t[1]*=r,t[2]*=o,t[3]*=o}this.invTransform=this.invTransform||[1,0,0,1,0,0],Ie(this.invTransform,t)},t.prototype.getComputedTransform=function(){for(var t=this,e=[];t;)e.push(t),t=t.parent;for(;t=e.pop();)t.updateTransform();return this.transform},t.prototype.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],n=t[2]*t[2]+t[3]*t[3],i=Math.atan2(t[1],t[0]),r=Math.PI/2+i-Math.atan2(t[3],t[2]);n=Math.sqrt(n)*Math.cos(r),e=Math.sqrt(e),this.skewX=r,this.skewY=0,this.rotation=-i,this.x=+t[4],this.y=+t[5],this.scaleX=e,this.scaleY=n,this.originX=0,this.originY=0}},t.prototype.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(t.invTransform=t.invTransform||[1,0,0,1,0,0],be(fr,t.invTransform,e),e=fr);var n=this.originX,i=this.originY;(n||i)&&(gr[4]=n,gr[5]=i,be(fr,e,gr),fr[4]-=n,fr[5]-=i,e=fr),this.setLocalTransform(e)}},t.prototype.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},t.prototype.transformCoordToLocal=function(t,e){var n=[t,e],i=this.invTransform;return i&&Wt(n,n,i),n},t.prototype.transformCoordToGlobal=function(t,e){var n=[t,e],i=this.transform;return i&&Wt(n,n,i),n},t.prototype.getLineScale=function(){var t=this.transform;return t&&yr(t[0]-1)>1e-10&&yr(t[3]-1)>1e-10?Math.sqrt(yr(t[0]*t[3]-t[2]*t[1])):1},t.prototype.copyTransform=function(t){xr(this,t)},t.getLocalTransform=function(t,e){e=e||[];var n=t.originX||0,i=t.originY||0,r=t.scaleX,o=t.scaleY,a=t.anchorX,s=t.anchorY,l=t.rotation||0,u=t.x,h=t.y,c=t.skewX?Math.tan(t.skewX):0,p=t.skewY?Math.tan(-t.skewY):0;if(n||i||a||s){var d=n+a,f=i+s;e[4]=-d*r-c*f*o,e[5]=-f*o-p*d*r}else e[4]=e[5]=0;return e[0]=r,e[3]=o,e[1]=p*r,e[2]=c*o,l&&Se(e,e,l),e[4]+=n+u,e[5]+=i+h,e},t.initDefaultProps=function(){var e=t.prototype;e.scaleX=e.scaleY=e.globalScaleRatio=1,e.x=e.y=e.originX=e.originY=e.skewX=e.skewY=e.rotation=e.anchorX=e.anchorY=0}(),t}(),mr=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function xr(t,e){for(var n=0;n=0?parseFloat(t)/100*e:parseFloat(t):t}function Dr(t,e,n){var i=e.position||"inside",r=null!=e.distance?e.distance:5,o=n.height,a=n.width,s=o/2,l=n.x,u=n.y,h="left",c="top";if(i instanceof Array)l+=Cr(i[0],n.width),u+=Cr(i[1],n.height),h=null,c=null;else switch(i){case"left":l-=r,u+=s,h="right",c="middle";break;case"right":l+=r+a,u+=s,c="middle";break;case"top":l+=a/2,u-=r,h="center",c="bottom";break;case"bottom":l+=a/2,u+=o+r,h="center";break;case"inside":l+=a/2,u+=s,h="center",c="middle";break;case"insideLeft":l+=r,u+=s,c="middle";break;case"insideRight":l+=a-r,u+=s,h="right",c="middle";break;case"insideTop":l+=a/2,u+=r,h="center";break;case"insideBottom":l+=a/2,u+=o-r,h="center",c="bottom";break;case"insideTopLeft":l+=r,u+=r;break;case"insideTopRight":l+=a-r,u+=r,h="right";break;case"insideBottomLeft":l+=r,u+=o-r,c="bottom";break;case"insideBottomRight":l+=a-r,u+=o-r,h="right",c="bottom"}return(t=t||{}).x=l,t.y=u,t.align=h,t.verticalAlign=c,t}var Ar="__zr_normal__",kr=mr.concat(["ignore"]),Lr=V(mr,(function(t,e){return t[e]=!0,t}),{ignore:!1}),Pr={},Or=new ze(0,0,0,0),Rr=function(){function t(t){this.id=M(),this.animators=[],this.currentStates=[],this.states={},this._init(t)}return t.prototype._init=function(t){this.attr(t)},t.prototype.drift=function(t,e,n){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=e,this.decomposeTransform(),this.markRedraw()},t.prototype.beforeUpdate=function(){},t.prototype.afterUpdate=function(){},t.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},t.prototype.updateInnerText=function(t){var e=this._textContent;if(e&&(!e.ignore||t)){this.textConfig||(this.textConfig={});var n=this.textConfig,i=n.local,r=e.innerTransformable,o=void 0,a=void 0,s=!1;r.parent=i?this:null;var l=!1;if(r.copyTransform(e),null!=n.position){var u=Or;n.layoutRect?u.copy(n.layoutRect):u.copy(this.getBoundingRect()),i||u.applyTransform(this.transform),this.calculateTextPosition?this.calculateTextPosition(Pr,n,u):Dr(Pr,n,u),r.x=Pr.x,r.y=Pr.y,o=Pr.align,a=Pr.verticalAlign;var h=n.origin;if(h&&null!=n.rotation){var c=void 0,p=void 0;"center"===h?(c=.5*u.width,p=.5*u.height):(c=Cr(h[0],u.width),p=Cr(h[1],u.height)),l=!0,r.originX=-r.x+c+(i?0:u.x),r.originY=-r.y+p+(i?0:u.y)}}null!=n.rotation&&(r.rotation=n.rotation);var d=n.offset;d&&(r.x+=d[0],r.y+=d[1],l||(r.originX=-d[0],r.originY=-d[1]));var f=null==n.inside?"string"==typeof n.position&&n.position.indexOf("inside")>=0:n.inside,g=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),y=void 0,v=void 0,m=void 0;f&&this.canBeInsideText()?(y=n.insideFill,v=n.insideStroke,null!=y&&"auto"!==y||(y=this.getInsideTextFill()),null!=v&&"auto"!==v||(v=this.getInsideTextStroke(y),m=!0)):(y=n.outsideFill,v=n.outsideStroke,null!=y&&"auto"!==y||(y=this.getOutsideFill()),null!=v&&"auto"!==v||(v=this.getOutsideStroke(y),m=!0)),(y=y||"#000")===g.fill&&v===g.stroke&&m===g.autoStroke&&o===g.align&&a===g.verticalAlign||(s=!0,g.fill=y,g.stroke=v,g.autoStroke=m,g.align=o,g.verticalAlign=a,e.setDefaultTextStyle(g)),e.__dirty|=1,s&&e.dirtyStyle(!0)}},t.prototype.canBeInsideText=function(){return!0},t.prototype.getInsideTextFill=function(){return"#fff"},t.prototype.getInsideTextStroke=function(t){return"#000"},t.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?ur:lr},t.prototype.getOutsideStroke=function(t){var e=this.__zr&&this.__zr.getBackgroundColor(),n="string"==typeof e&&qn(e);n||(n=[255,255,255,1]);for(var i=n[3],r=this.__zr.isDarkMode(),o=0;o<3;o++)n[o]=n[o]*i+(r?0:255)*(1-i);return n[3]=1,ri(n,"rgba")},t.prototype.traverse=function(t,e){},t.prototype.attrKV=function(t,e){"textConfig"===t?this.setTextConfig(e):"textContent"===t?this.setTextContent(e):"clipPath"===t?this.setClipPath(e):"extra"===t?(this.extra=this.extra||{},A(this.extra,e)):this[t]=e},t.prototype.hide=function(){this.ignore=!0,this.markRedraw()},t.prototype.show=function(){this.ignore=!1,this.markRedraw()},t.prototype.attr=function(t,e){if("string"==typeof t)this.attrKV(t,e);else if(q(t))for(var n=G(t),i=0;i0},t.prototype.getState=function(t){return this.states[t]},t.prototype.ensureState=function(t){var e=this.states;return e[t]||(e[t]={}),e[t]},t.prototype.clearStates=function(t){this.useState(Ar,!1,t)},t.prototype.useState=function(t,e,n,i){var r=t===Ar;if(this.hasState()||!r){var o=this.currentStates,a=this.stateTransition;if(!(P(o,t)>=0)||!e&&1!==o.length){var s;if(this.stateProxy&&!r&&(s=this.stateProxy(t)),s||(s=this.states&&this.states[t]),s||r){r||this.saveCurrentToNormalState(s);var l=!!(s&&s.hoverLayer||i);l&&this._toggleHoverLayerFlag(!0),this._applyStateObj(t,s,this._normalState,e,!n&&!this.__inHover&&a&&a.duration>0,a);var u=this._textContent,h=this._textGuide;return u&&u.useState(t,e,n,l),h&&h.useState(t,e,n,l),r?(this.currentStates=[],this._normalState={}):e?this.currentStates.push(t):this.currentStates=[t],this._updateAnimationTargets(),this.markRedraw(),!l&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=-2),s}I("State "+t+" not exists.")}}},t.prototype.useStates=function(t,e,n){if(t.length){var i=[],r=this.currentStates,o=t.length,a=o===r.length;if(a)for(var s=0;s0,d);var f=this._textContent,g=this._textGuide;f&&f.useStates(t,e,c),g&&g.useStates(t,e,c),this._updateAnimationTargets(),this.currentStates=t.slice(),this.markRedraw(),!c&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=-2)}else this.clearStates()},t.prototype.isSilent=function(){for(var t=this.silent,e=this.parent;!t&&e;){if(e.silent){t=!0;break}e=e.parent}return t},t.prototype._updateAnimationTargets=function(){for(var t=0;t=0){var n=this.currentStates.slice();n.splice(e,1),this.useStates(n)}},t.prototype.replaceState=function(t,e,n){var i=this.currentStates.slice(),r=P(i,t),o=P(i,e)>=0;r>=0?o?i.splice(r,1):i[r]=e:n&&!o&&i.push(e),this.useStates(i)},t.prototype.toggleState=function(t,e){e?this.useState(t,!0):this.removeState(t)},t.prototype._mergeStates=function(t){for(var e,n={},i=0;i=0&&e.splice(n,1)})),this.animators.push(t),n&&n.animation.addAnimator(t),n&&n.wakeUp()},t.prototype.updateDuringAnimation=function(t){this.markRedraw()},t.prototype.stopAnimation=function(t,e){for(var n=this.animators,i=n.length,r=[],o=0;o0&&n.during&&o[0].during((function(t,e){n.during(e)}));for(var p=0;p0||r.force&&!a.length){var w,S=void 0,M=void 0,I=void 0;if(s){M={},p&&(S={});for(_=0;_=0&&(n.splice(i,0,t),this._doAdd(t))}return this},e.prototype.replace=function(t,e){var n=P(this._children,t);return n>=0&&this.replaceAt(e,n),this},e.prototype.replaceAt=function(t,e){var n=this._children,i=n[e];if(t&&t!==this&&t.parent!==this&&t!==i){n[e]=t,i.parent=null;var r=this.__zr;r&&i.removeSelfFromZr(r),this._doAdd(t)}return this},e.prototype._doAdd=function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__zr;e&&e!==t.__zr&&t.addSelfToZr(e),e&&e.refresh()},e.prototype.remove=function(t){var e=this.__zr,n=this._children,i=P(n,t);return i<0||(n.splice(i,1),t.parent=null,e&&t.removeSelfFromZr(e),e&&e.refresh()),this},e.prototype.removeAll=function(){for(var t=this._children,e=this.__zr,n=0;n0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},t.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},t.prototype.wakeUp=function(){this._disposed||(this.animation.start(),this._stillFrameAccum=0)},t.prototype.refreshHover=function(){this._needsRefreshHover=!0},t.prototype.refreshHoverImmediately=function(){this._disposed||(this._needsRefreshHover=!1,this.painter.refreshHover&&"canvas"===this.painter.getType()&&this.painter.refreshHover())},t.prototype.resize=function(t){this._disposed||(t=t||{},this.painter.resize(t.width,t.height),this.handler.resize())},t.prototype.clearAnimation=function(){this._disposed||this.animation.clear()},t.prototype.getWidth=function(){if(!this._disposed)return this.painter.getWidth()},t.prototype.getHeight=function(){if(!this._disposed)return this.painter.getHeight()},t.prototype.setCursorStyle=function(t){this._disposed||this.handler.setCursorStyle(t)},t.prototype.findHover=function(t,e){if(!this._disposed)return this.handler.findHover(t,e)},t.prototype.on=function(t,e,n){return this._disposed||this.handler.on(t,e,n),this},t.prototype.off=function(t,e){this._disposed||this.handler.off(t,e)},t.prototype.trigger=function(t,e){this._disposed||this.handler.trigger(t,e)},t.prototype.clear=function(){if(!this._disposed){for(var t=this.storage.getRoots(),e=0;e0){if(t<=r)return a;if(t>=o)return s}else{if(t>=r)return a;if(t<=o)return s}else{if(t===r)return a;if(t===o)return s}return(t-r)/l*u+a}function $r(t,e){switch(t){case"center":case"middle":t="50%";break;case"left":case"top":t="0%";break;case"right":case"bottom":t="100%"}return U(t)?(n=t,n.replace(/^\s+|\s+$/g,"")).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t;var n}function Jr(t,e,n){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),n?t:+t}function Qr(t){return t.sort((function(t,e){return t-e})),t}function to(t){if(t=+t,isNaN(t))return 0;if(t>1e-14)for(var e=1,n=0;n<15;n++,e*=10)if(Math.round(t*e)/e===t)return n;return eo(t)}function eo(t){var e=t.toString().toLowerCase(),n=e.indexOf("e"),i=n>0?+e.slice(n+1):0,r=n>0?n:e.length,o=e.indexOf("."),a=o<0?0:r-1-o;return Math.max(0,a-i)}function no(t,e){var n=Math.log,i=Math.LN10,r=Math.floor(n(t[1]-t[0])/i),o=Math.round(n(Math.abs(e[1]-e[0]))/i),a=Math.min(Math.max(-r+o,0),20);return isFinite(a)?a:20}function io(t,e){var n=V(t,(function(t,e){return t+(isNaN(e)?0:e)}),0);if(0===n)return[];for(var i=Math.pow(10,e),r=z(t,(function(t){return(isNaN(t)?0:t)/n*i*100})),o=100*i,a=z(r,(function(t){return Math.floor(t)})),s=V(a,(function(t,e){return t+e}),0),l=z(r,(function(t,e){return t-a[e]}));su&&(u=l[c],h=c);++a[h],l[h]=0,++s}return z(a,(function(t){return t/i}))}function ro(t,e){var n=Math.max(to(t),to(e)),i=t+e;return n>20?i:Jr(i,n)}var oo=9007199254740991;function ao(t){var e=2*Math.PI;return(t%e+e)%e}function so(t){return t>-1e-4&&t=10&&e++,e}function po(t,e){var n=co(t),i=Math.pow(10,n),r=t/i;return t=(e?r<1.5?1:r<2.5?2:r<4?3:r<7?5:10:r<1?1:r<2?2:r<3?3:r<5?5:10)*i,n>=-20?+t.toFixed(n<0?-n:0):t}function fo(t,e){var n=(t.length-1)*e+1,i=Math.floor(n),r=+t[i-1],o=n-i;return o?r+o*(t[i]-r):r}function go(t){t.sort((function(t,e){return s(t,e,0)?-1:1}));for(var e=-1/0,n=1,i=0;i=0||r&&P(r,s)<0)){var l=n.getShallow(s,e);null!=l&&(o[t[a][0]]=l)}}return o}}var ra=ia([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),oa=function(){function t(){}return t.prototype.getAreaStyle=function(t,e){return ra(this,t,e)},t}(),aa=new En(50);function sa(t){if("string"==typeof t){var e=aa.get(t);return e&&e.image}return t}function la(t,e,n,i,r){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc===t||!n)return e;var o=aa.get(t),a={hostEl:n,cb:i,cbPayload:r};return o?!ha(e=o.image)&&o.pending.push(a):((e=h.loadImage(t,ua,ua)).__zrImageSrc=t,aa.put(t,e.__cachedImgObj={image:e,pending:[a]})),e}return t}return e}function ua(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;e=a;l++)s-=a;var u=br(n,e);return u>s&&(n="",u=0),s=t-u,r.ellipsis=n,r.ellipsisWidth=u,r.contentWidth=s,r.containerWidth=t,r}function fa(t,e){var n=e.containerWidth,i=e.font,r=e.contentWidth;if(!n)return"";var o=br(t,i);if(o<=n)return t;for(var a=0;;a++){if(o<=r||a>=e.maxIterations){t+=e.ellipsis;break}var s=0===a?ga(t,r,e.ascCharWidth,e.cnCharWidth):o>0?Math.floor(t.length*r/o):0;o=br(t=t.substr(0,s),i)}return""===t&&(t=e.placeholder),t}function ga(t,e,n,i){for(var r=0,o=0,a=t.length;o0&&f+i.accumWidth>i.width&&(o=e.split("\n"),c=!0),i.accumWidth=f}else{var g=wa(e,h,i.width,i.breakAll,i.accumWidth);i.accumWidth=g.accumWidth+d,a=g.linesWidths,o=g.lines}}else o=e.split("\n");for(var y=0;y=32&&e<=591||e>=880&&e<=4351||e>=4608&&e<=5119||e>=7680&&e<=8303}(t)||!!_a[t]}function wa(t,e,n,i,r){for(var o=[],a=[],s="",l="",u=0,h=0,c=0;cn:r+h+d>n)?h?(s||l)&&(f?(s||(s=l,l="",h=u=0),o.push(s),a.push(h-u),l+=p,s="",h=u+=d):(l&&(s+=l,l="",u=0),o.push(s),a.push(h),s=p,h=d)):f?(o.push(l),a.push(u),l=p,u=d):(o.push(p),a.push(d)):(h+=d,f?(l+=p,u+=d):(l&&(s+=l,l="",u=0),s+=p))}else l&&(s+=l,h+=u),o.push(s),a.push(h),s="",l="",u=0,h=0}return o.length||s||(s=t,l="",u=0),l&&(s+=l),s&&(o.push(s),a.push(h)),1===o.length&&(h+=r),{accumWidth:h,lines:o,linesWidths:a}}var Sa="__zr_style_"+Math.round(10*Math.random()),Ma={shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"#000",opacity:1,blend:"source-over"},Ia={style:{shadowBlur:!0,shadowOffsetX:!0,shadowOffsetY:!0,shadowColor:!0,opacity:!0}};Ma[Sa]=!0;var Ta=["z","z2","invisible"],Ca=["invisible"],Da=function(t){function e(e){return t.call(this,e)||this}var i;return n(e,t),e.prototype._init=function(e){for(var n=G(e),i=0;i1e-4)return s[0]=t-n,s[1]=e-i,l[0]=t+n,void(l[1]=e+i);if(Ea[0]=Ra(r)*n+t,Ea[1]=Oa(r)*i+e,za[0]=Ra(o)*n+t,za[1]=Oa(o)*i+e,u(s,Ea,za),h(l,Ea,za),(r%=Na)<0&&(r+=Na),(o%=Na)<0&&(o+=Na),r>o&&!a?o+=Na:rr&&(Va[0]=Ra(d)*n+t,Va[1]=Oa(d)*i+e,u(s,Va,s),h(l,Va,l))}var Ua={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},Za=[],ja=[],qa=[],Ka=[],$a=[],Ja=[],Qa=Math.min,ts=Math.max,es=Math.cos,ns=Math.sin,is=Math.abs,rs=Math.PI,os=2*rs,as="undefined"!=typeof Float32Array,ss=[];function ls(t){return Math.round(t/rs*1e8)/1e8%2*rs}function us(t,e){var n=ls(t[0]);n<0&&(n+=os);var i=n-t[0],r=t[1];r+=i,!e&&r-n>=os?r=n+os:e&&n-r>=os?r=n-os:!e&&n>r?r=n+(os-ls(n-r)):e&&n0&&(this._ux=is(n/sr/t)||0,this._uy=is(n/sr/e)||0)},t.prototype.setDPR=function(t){this.dpr=t},t.prototype.setContext=function(t){this._ctx=t},t.prototype.getContext=function(){return this._ctx},t.prototype.beginPath=function(){return this._ctx&&this._ctx.beginPath(),this.reset(),this},t.prototype.reset=function(){this._saveData&&(this._len=0),this._pathSegLen&&(this._pathSegLen=null,this._pathLen=0),this._version++},t.prototype.moveTo=function(t,e){return this._drawPendingPt(),this.addData(Ua.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},t.prototype.lineTo=function(t,e){var n=is(t-this._xi),i=is(e-this._yi),r=n>this._ux||i>this._uy;if(this.addData(Ua.L,t,e),this._ctx&&r&&this._ctx.lineTo(t,e),r)this._xi=t,this._yi=e,this._pendingPtDist=0;else{var o=n*n+i*i;o>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=e,this._pendingPtDist=o)}return this},t.prototype.bezierCurveTo=function(t,e,n,i,r,o){return this._drawPendingPt(),this.addData(Ua.C,t,e,n,i,r,o),this._ctx&&this._ctx.bezierCurveTo(t,e,n,i,r,o),this._xi=r,this._yi=o,this},t.prototype.quadraticCurveTo=function(t,e,n,i){return this._drawPendingPt(),this.addData(Ua.Q,t,e,n,i),this._ctx&&this._ctx.quadraticCurveTo(t,e,n,i),this._xi=n,this._yi=i,this},t.prototype.arc=function(t,e,n,i,r,o){this._drawPendingPt(),ss[0]=i,ss[1]=r,us(ss,o),i=ss[0];var a=(r=ss[1])-i;return this.addData(Ua.A,t,e,n,n,i,a,0,o?0:1),this._ctx&&this._ctx.arc(t,e,n,i,r,o),this._xi=es(r)*n+t,this._yi=ns(r)*n+e,this},t.prototype.arcTo=function(t,e,n,i,r){return this._drawPendingPt(),this._ctx&&this._ctx.arcTo(t,e,n,i,r),this},t.prototype.rect=function(t,e,n,i){return this._drawPendingPt(),this._ctx&&this._ctx.rect(t,e,n,i),this.addData(Ua.R,t,e,n,i),this},t.prototype.closePath=function(){this._drawPendingPt(),this.addData(Ua.Z);var t=this._ctx,e=this._x0,n=this._y0;return t&&t.closePath(),this._xi=e,this._yi=n,this},t.prototype.fill=function(t){t&&t.fill(),this.toStatic()},t.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},t.prototype.len=function(){return this._len},t.prototype.setData=function(t){var e=t.length;this.data&&this.data.length===e||!as||(this.data=new Float32Array(e));for(var n=0;nu.length&&(this._expandData(),u=this.data);for(var h=0;h0&&(this._ctx&&this._ctx.lineTo(this._pendingPtX,this._pendingPtY),this._pendingPtDist=0)},t.prototype._expandData=function(){if(!(this.data instanceof Array)){for(var t=[],e=0;e11&&(this.data=new Float32Array(t)))}},t.prototype.getBoundingRect=function(){qa[0]=qa[1]=$a[0]=$a[1]=Number.MAX_VALUE,Ka[0]=Ka[1]=Ja[0]=Ja[1]=-Number.MAX_VALUE;var t,e=this.data,n=0,i=0,r=0,o=0;for(t=0;tn||is(y)>i||c===e-1)&&(f=Math.sqrt(A*A+y*y),r=g,o=x);break;case Ua.C:var v=t[c++],m=t[c++],x=(g=t[c++],t[c++]),_=t[c++],b=t[c++];f=Mn(r,o,v,m,g,x,_,b,10),r=_,o=b;break;case Ua.Q:f=kn(r,o,v=t[c++],m=t[c++],g=t[c++],x=t[c++],10),r=g,o=x;break;case Ua.A:var w=t[c++],S=t[c++],M=t[c++],I=t[c++],T=t[c++],C=t[c++],D=C+T;c+=1,d&&(a=es(T)*M+w,s=ns(T)*I+S),f=ts(M,I)*Qa(os,Math.abs(C)),r=es(D)*M+w,o=ns(D)*I+S;break;case Ua.R:a=r=t[c++],s=o=t[c++],f=2*t[c++]+2*t[c++];break;case Ua.Z:var A=a-r;y=s-o;f=Math.sqrt(A*A+y*y),r=a,o=s}f>=0&&(l[h++]=f,u+=f)}return this._pathLen=u,u},t.prototype.rebuildPath=function(t,e){var n,i,r,o,a,s,l,u,h,c,p=this.data,d=this._ux,f=this._uy,g=this._len,y=e<1,v=0,m=0,x=0;if(!y||(this._pathSegLen||this._calculateLength(),l=this._pathSegLen,u=e*this._pathLen))t:for(var _=0;_0&&(t.lineTo(h,c),x=0),b){case Ua.M:n=r=p[_++],i=o=p[_++],t.moveTo(r,o);break;case Ua.L:a=p[_++],s=p[_++];var S=is(a-r),M=is(s-o);if(S>d||M>f){if(y){if(v+(j=l[m++])>u){var I=(u-v)/j;t.lineTo(r*(1-I)+a*I,o*(1-I)+s*I);break t}v+=j}t.lineTo(a,s),r=a,o=s,x=0}else{var T=S*S+M*M;T>x&&(h=a,c=s,x=T)}break;case Ua.C:var C=p[_++],D=p[_++],A=p[_++],k=p[_++],L=p[_++],P=p[_++];if(y){if(v+(j=l[m++])>u){wn(r,C,A,L,I=(u-v)/j,Za),wn(o,D,k,P,I,ja),t.bezierCurveTo(Za[1],ja[1],Za[2],ja[2],Za[3],ja[3]);break t}v+=j}t.bezierCurveTo(C,D,A,k,L,P),r=L,o=P;break;case Ua.Q:C=p[_++],D=p[_++],A=p[_++],k=p[_++];if(y){if(v+(j=l[m++])>u){Dn(r,C,A,I=(u-v)/j,Za),Dn(o,D,k,I,ja),t.quadraticCurveTo(Za[1],ja[1],Za[2],ja[2]);break t}v+=j}t.quadraticCurveTo(C,D,A,k),r=A,o=k;break;case Ua.A:var O=p[_++],R=p[_++],N=p[_++],E=p[_++],z=p[_++],V=p[_++],B=p[_++],F=!p[_++],G=N>E?N:E,W=is(N-E)>.001,H=z+V,Y=!1;if(y)v+(j=l[m++])>u&&(H=z+V*(u-v)/j,Y=!0),v+=j;if(W&&t.ellipse?t.ellipse(O,R,N,E,B,z,H,F):t.arc(O,R,G,z,H,F),Y)break t;w&&(n=es(z)*N+O,i=ns(z)*E+R),r=es(H)*N+O,o=ns(H)*E+R;break;case Ua.R:n=r=p[_],i=o=p[_+1],a=p[_++],s=p[_++];var X=p[_++],U=p[_++];if(y){if(v+(j=l[m++])>u){var Z=u-v;t.moveTo(a,s),t.lineTo(a+Qa(Z,X),s),(Z-=X)>0&&t.lineTo(a+X,s+Qa(Z,U)),(Z-=U)>0&&t.lineTo(a+ts(X-Z,0),s+U),(Z-=X)>0&&t.lineTo(a,s+ts(U-Z,0));break t}v+=j}t.rect(a,s,X,U);break;case Ua.Z:if(y){var j;if(v+(j=l[m++])>u){I=(u-v)/j;t.lineTo(r*(1-I)+n*I,o*(1-I)+i*I);break t}v+=j}t.closePath(),r=n,o=i}}},t.prototype.clone=function(){var e=new t,n=this.data;return e.data=n.slice?n.slice():Array.prototype.slice.call(n),e._len=this._len,e},t.CMD=Ua,t.initDefaultProps=function(){var e=t.prototype;e._saveData=!0,e._ux=0,e._uy=0,e._pendingPtDist=0,e._version=0}(),t}();function cs(t,e,n,i,r,o,a){if(0===r)return!1;var s=r,l=0;if(a>e+s&&a>i+s||at+s&&o>n+s||oe+c&&h>i+c&&h>o+c&&h>s+c||ht+c&&u>n+c&&u>r+c&&u>a+c||ue+u&&l>i+u&&l>o+u||lt+u&&s>n+u&&s>r+u||sn||h+ur&&(r+=ys);var p=Math.atan2(l,s);return p<0&&(p+=ys),p>=i&&p<=r||p+ys>=i&&p+ys<=r}function ms(t,e,n,i,r,o){if(o>e&&o>i||or?s:0}var xs=hs.CMD,_s=2*Math.PI;var bs=[-1,-1,-1],ws=[-1,-1];function Ss(t,e,n,i,r,o,a,s,l,u){if(u>e&&u>i&&u>o&&u>s||u1&&(h=void 0,h=ws[0],ws[0]=ws[1],ws[1]=h),f=mn(e,i,o,s,ws[0]),d>1&&(g=mn(e,i,o,s,ws[1]))),2===d?ve&&s>i&&s>o||s=0&&h<=1&&(r[l++]=h);else{var u=a*a-4*o*s;if(yn(u))(h=-a/(2*o))>=0&&h<=1&&(r[l++]=h);else if(u>0){var h,c=ln(u),p=(-a-c)/(2*o);(h=(-a+c)/(2*o))>=0&&h<=1&&(r[l++]=h),p>=0&&p<=1&&(r[l++]=p)}}return l}(e,i,o,s,bs);if(0===l)return 0;var u=Cn(e,i,o);if(u>=0&&u<=1){for(var h=0,c=In(e,i,o,u),p=0;pn||s<-n)return 0;var l=Math.sqrt(n*n-s*s);bs[0]=-l,bs[1]=l;var u=Math.abs(i-r);if(u<1e-4)return 0;if(u>=_s-1e-4){i=0,r=_s;var h=o?1:-1;return a>=bs[0]+t&&a<=bs[1]+t?h:0}if(i>r){var c=i;i=r,r=c}i<0&&(i+=_s,r+=_s);for(var p=0,d=0;d<2;d++){var f=bs[d];if(f+t>a){var g=Math.atan2(s,f);h=o?1:-1;g<0&&(g=_s+g),(g>=i&&g<=r||g+_s>=i&&g+_s<=r)&&(g>Math.PI/2&&g<1.5*Math.PI&&(h=-h),p+=h)}}return p}function Ts(t,e,n,i,r){for(var o,a,s,l,u=t.data,h=t.len(),c=0,p=0,d=0,f=0,g=0,y=0;y1&&(n||(c+=ms(p,d,f,g,i,r))),m&&(f=p=u[y],g=d=u[y+1]),v){case xs.M:p=f=u[y++],d=g=u[y++];break;case xs.L:if(n){if(cs(p,d,u[y],u[y+1],e,i,r))return!0}else c+=ms(p,d,u[y],u[y+1],i,r)||0;p=u[y++],d=u[y++];break;case xs.C:if(n){if(ps(p,d,u[y++],u[y++],u[y++],u[y++],u[y],u[y+1],e,i,r))return!0}else c+=Ss(p,d,u[y++],u[y++],u[y++],u[y++],u[y],u[y+1],i,r)||0;p=u[y++],d=u[y++];break;case xs.Q:if(n){if(ds(p,d,u[y++],u[y++],u[y],u[y+1],e,i,r))return!0}else c+=Ms(p,d,u[y++],u[y++],u[y],u[y+1],i,r)||0;p=u[y++],d=u[y++];break;case xs.A:var x=u[y++],_=u[y++],b=u[y++],w=u[y++],S=u[y++],M=u[y++];y+=1;var I=!!(1-u[y++]);o=Math.cos(S)*b+x,a=Math.sin(S)*w+_,m?(f=o,g=a):c+=ms(p,d,o,a,i,r);var T=(i-x)*w/b+x;if(n){if(vs(x,_,w,S,S+M,I,e,T,r))return!0}else c+=Is(x,_,w,S,S+M,I,T,r);p=Math.cos(S+M)*b+x,d=Math.sin(S+M)*w+_;break;case xs.R:if(f=p=u[y++],g=d=u[y++],o=f+u[y++],a=g+u[y++],n){if(cs(f,g,o,g,e,i,r)||cs(o,g,o,a,e,i,r)||cs(o,a,f,a,e,i,r)||cs(f,a,f,g,e,i,r))return!0}else c+=ms(o,g,o,a,i,r),c+=ms(f,a,f,g,i,r);break;case xs.Z:if(n){if(cs(p,d,f,g,e,i,r))return!0}else c+=ms(p,d,f,g,i,r);p=f,d=g}}return n||(s=d,l=g,Math.abs(s-l)<1e-4)||(c+=ms(p,d,f,g,i,r)||0),0!==c}var Cs=k({fill:"#000",stroke:null,strokePercent:1,fillOpacity:1,strokeOpacity:1,lineDashOffset:0,lineWidth:1,lineCap:"butt",miterLimit:10,strokeNoScale:!1,strokeFirst:!1},Ma),Ds={style:k({fill:!0,stroke:!0,strokePercent:!0,fillOpacity:!0,strokeOpacity:!0,lineDashOffset:!0,lineWidth:!0,miterLimit:!0},Ia.style)},As=mr.concat(["invisible","culling","z","z2","zlevel","parent"]),ks=function(t){function e(e){return t.call(this,e)||this}var i;return n(e,t),e.prototype.update=function(){var n=this;t.prototype.update.call(this);var i=this.style;if(i.decal){var r=this._decalEl=this._decalEl||new e;r.buildPath===e.prototype.buildPath&&(r.buildPath=function(t){n.buildPath(t,n.shape)}),r.silent=!0;var o=r.style;for(var a in i)o[a]!==i[a]&&(o[a]=i[a]);o.fill=i.fill?i.decal:null,o.decal=null,o.shadowColor=null,i.strokeFirst&&(o.stroke=null);for(var s=0;s.5?lr:e>.2?"#eee":ur}if(t)return ur}return lr},e.prototype.getInsideTextStroke=function(t){var e=this.style.fill;if(U(e)){var n=this.__zr;if(!(!n||!n.isDarkMode())===oi(t,0)<.4)return e}},e.prototype.buildPath=function(t,e,n){},e.prototype.pathUpdated=function(){this.__dirty&=-5},e.prototype.getUpdatedPathProxy=function(t){return!this.path&&this.createPathProxy(),this.path.beginPath(),this.buildPath(this.path,this.shape,t),this.path},e.prototype.createPathProxy=function(){this.path=new hs(!1)},e.prototype.hasStroke=function(){var t=this.style,e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth>0))},e.prototype.hasFill=function(){var t=this.style.fill;return null!=t&&"none"!==t},e.prototype.getBoundingRect=function(){var t=this._rect,e=this.style,n=!t;if(n){var i=!1;this.path||(i=!0,this.createPathProxy());var r=this.path;(i||4&this.__dirty)&&(r.beginPath(),this.buildPath(r,this.shape,!1),this.pathUpdated()),t=r.getBoundingRect()}if(this._rect=t,this.hasStroke()&&this.path&&this.path.len()>0){var o=this._rectStroke||(this._rectStroke=t.clone());if(this.__dirty||n){o.copy(t);var a=e.strokeNoScale?this.getLineScale():1,s=e.lineWidth;if(!this.hasFill()){var l=this.strokeContainThreshold;s=Math.max(s,null==l?4:l)}a>1e-10&&(o.width+=s/a,o.height+=s/a,o.x-=s/a/2,o.y-=s/a/2)}return o}return t},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect(),r=this.style;if(t=n[0],e=n[1],i.contain(t,e)){var o=this.path;if(this.hasStroke()){var a=r.lineWidth,s=r.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(this.hasFill()||(a=Math.max(a,this.strokeContainThreshold)),function(t,e,n,i){return Ts(t,e,!0,n,i)}(o,a/s,t,e)))return!0}if(this.hasFill())return function(t,e,n){return Ts(t,0,!1,e,n)}(o,t,e)}return!1},e.prototype.dirtyShape=function(){this.__dirty|=4,this._rect&&(this._rect=null),this._decalEl&&this._decalEl.dirtyShape(),this.markRedraw()},e.prototype.dirty=function(){this.dirtyStyle(),this.dirtyShape()},e.prototype.animateShape=function(t){return this.animate("shape",t)},e.prototype.updateDuringAnimation=function(t){"style"===t?this.dirtyStyle():"shape"===t?this.dirtyShape():this.markRedraw()},e.prototype.attrKV=function(e,n){"shape"===e?this.setShape(n):t.prototype.attrKV.call(this,e,n)},e.prototype.setShape=function(t,e){var n=this.shape;return n||(n=this.shape={}),"string"==typeof t?n[t]=e:A(n,t),this.dirtyShape(),this},e.prototype.shapeChanged=function(){return!!(4&this.__dirty)},e.prototype.createStyle=function(t){return mt(Cs,t)},e.prototype._innerSaveToNormal=function(e){t.prototype._innerSaveToNormal.call(this,e);var n=this._normalState;e.shape&&!n.shape&&(n.shape=A({},this.shape))},e.prototype._applyStateObj=function(e,n,i,r,o,a){t.prototype._applyStateObj.call(this,e,n,i,r,o,a);var s,l=!(n&&r);if(n&&n.shape?o?r?s=n.shape:(s=A({},i.shape),A(s,n.shape)):(s=A({},r?this.shape:i.shape),A(s,n.shape)):l&&(s=i.shape),s)if(o){this.shape=A({},this.shape);for(var u={},h=G(s),c=0;c0},e.prototype.hasFill=function(){var t=this.style.fill;return null!=t&&"none"!==t},e.prototype.createStyle=function(t){return mt(Ls,t)},e.prototype.setBoundingRect=function(t){this._rect=t},e.prototype.getBoundingRect=function(){var t=this.style;if(!this._rect){var e=t.text;null!=e?e+="":e="";var n=Sr(e,t.font,t.textAlign,t.textBaseline);if(n.x+=t.x||0,n.y+=t.y||0,this.hasStroke()){var i=t.lineWidth;n.x-=i/2,n.y-=i/2,n.width+=i,n.height+=i}this._rect=n}return this._rect},e.initDefaultProps=void(e.prototype.dirtyRectTolerance=10),e}(Da);Ps.prototype.type="tspan";var Os=k({x:0,y:0},Ma),Rs={style:k({x:!0,y:!0,width:!0,height:!0,sx:!0,sy:!0,sWidth:!0,sHeight:!0},Ia.style)};var Ns=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.createStyle=function(t){return mt(Os,t)},e.prototype._getSize=function(t){var e=this.style,n=e[t];if(null!=n)return n;var i,r=(i=e.image)&&"string"!=typeof i&&i.width&&i.height?e.image:this.__image;if(!r)return 0;var o="width"===t?"height":"width",a=e[o];return null==a?r[t]:r[t]/r[o]*a},e.prototype.getWidth=function(){return this._getSize("width")},e.prototype.getHeight=function(){return this._getSize("height")},e.prototype.getAnimationStyleProps=function(){return Rs},e.prototype.getBoundingRect=function(){var t=this.style;return this._rect||(this._rect=new ze(t.x||0,t.y||0,this.getWidth(),this.getHeight())),this._rect},e}(Da);Ns.prototype.type="image";var Es=Math.round;function zs(t,e,n){if(e){var i=e.x1,r=e.x2,o=e.y1,a=e.y2;t.x1=i,t.x2=r,t.y1=o,t.y2=a;var s=n&&n.lineWidth;return s?(Es(2*i)===Es(2*r)&&(t.x1=t.x2=Bs(i,s,!0)),Es(2*o)===Es(2*a)&&(t.y1=t.y2=Bs(o,s,!0)),t):t}}function Vs(t,e,n){if(e){var i=e.x,r=e.y,o=e.width,a=e.height;t.x=i,t.y=r,t.width=o,t.height=a;var s=n&&n.lineWidth;return s?(t.x=Bs(i,s,!0),t.y=Bs(r,s,!0),t.width=Math.max(Bs(i+o,s,!1)-t.x,0===o?0:1),t.height=Math.max(Bs(r+a,s,!1)-t.y,0===a?0:1),t):t}}function Bs(t,e,n){if(!e)return t;var i=Es(2*t);return(i+Es(e))%2==0?i/2:(i+(n?1:-1))/2}var Fs=function(){this.x=0,this.y=0,this.width=0,this.height=0},Gs={},Ws=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new Fs},e.prototype.buildPath=function(t,e){var n,i,r,o;if(this.subPixelOptimize){var a=Vs(Gs,e,this.style);n=a.x,i=a.y,r=a.width,o=a.height,a.r=e.r,e=a}else n=e.x,i=e.y,r=e.width,o=e.height;e.r?function(t,e){var n,i,r,o,a,s=e.x,l=e.y,u=e.width,h=e.height,c=e.r;u<0&&(s+=u,u=-u),h<0&&(l+=h,h=-h),"number"==typeof c?n=i=r=o=c:c instanceof Array?1===c.length?n=i=r=o=c[0]:2===c.length?(n=r=c[0],i=o=c[1]):3===c.length?(n=c[0],i=o=c[1],r=c[2]):(n=c[0],i=c[1],r=c[2],o=c[3]):n=i=r=o=0,n+i>u&&(n*=u/(a=n+i),i*=u/a),r+o>u&&(r*=u/(a=r+o),o*=u/a),i+r>h&&(i*=h/(a=i+r),r*=h/a),n+o>h&&(n*=h/(a=n+o),o*=h/a),t.moveTo(s+n,l),t.lineTo(s+u-i,l),0!==i&&t.arc(s+u-i,l+i,i,-Math.PI/2,0),t.lineTo(s+u,l+h-r),0!==r&&t.arc(s+u-r,l+h-r,r,0,Math.PI/2),t.lineTo(s+o,l+h),0!==o&&t.arc(s+o,l+h-o,o,Math.PI/2,Math.PI),t.lineTo(s,l+n),0!==n&&t.arc(s+n,l+n,n,Math.PI,1.5*Math.PI)}(t,e):t.rect(n,i,r,o)},e.prototype.isZeroArea=function(){return!this.shape.width||!this.shape.height},e}(ks);Ws.prototype.type="rect";var Hs={fill:"#000"},Ys={style:k({fill:!0,stroke:!0,fillOpacity:!0,strokeOpacity:!0,lineWidth:!0,fontSize:!0,lineHeight:!0,width:!0,height:!0,textShadowColor:!0,textShadowBlur:!0,textShadowOffsetX:!0,textShadowOffsetY:!0,backgroundColor:!0,padding:!0,borderColor:!0,borderWidth:!0,borderRadius:!0},Ia.style)},Xs=function(t){function e(e){var n=t.call(this)||this;return n.type="text",n._children=[],n._defaultStyle=Hs,n.attr(e),n}return n(e,t),e.prototype.childrenRef=function(){return this._children},e.prototype.update=function(){t.prototype.update.call(this),this.styleChanged()&&this._updateSubTexts();for(var e=0;ed&&h){var f=Math.floor(d/l);n=n.slice(0,f)}if(t&&a&&null!=c)for(var g=da(c,o,e.ellipsis,{minChar:e.truncateMinChar,placeholder:e.placeholder}),y=0;y0,T=null!=t.width&&("truncate"===t.overflow||"break"===t.overflow||"breakAll"===t.overflow),C=i.calculatedLineHeight,D=0;Dl&&xa(n,t.substring(l,u),e,s),xa(n,i[2],e,s,i[1]),l=ca.lastIndex}lo){b>0?(m.tokens=m.tokens.slice(0,b),y(m,_,x),n.lines=n.lines.slice(0,v+1)):n.lines=n.lines.slice(0,v);break t}var C=w.width,D=null==C||"auto"===C;if("string"==typeof C&&"%"===C.charAt(C.length-1))P.percentWidth=C,h.push(P),P.contentWidth=br(P.text,I);else{if(D){var A=w.backgroundColor,k=A&&A.image;k&&ha(k=sa(k))&&(P.width=Math.max(P.width,k.width*T/k.height))}var L=f&&null!=r?r-_:null;null!=L&&L=0&&"right"===(C=x[T]).align;)this._placeToken(C,t,b,f,I,"right",y),w-=C.width,I-=C.width,T--;for(M+=(n-(M-d)-(g-I)-w)/2;S<=T;)C=x[S],this._placeToken(C,t,b,f,M+C.width/2,"center",y),M+=C.width,S++;f+=b}},e.prototype._placeToken=function(t,e,n,i,r,o,s){var l=e.rich[t.styleName]||{};l.text=t.text;var u=t.verticalAlign,h=i+n/2;"top"===u?h=i+t.height/2:"bottom"===u&&(h=i+n-t.height/2),!t.isLineHolder&&il(l)&&this._renderBackground(l,e,"right"===o?r-t.width:"center"===o?r-t.width/2:r,h-t.height/2,t.width,t.height);var c=!!l.backgroundColor,p=t.textPadding;p&&(r=el(r,o,p),h-=t.height/2-p[0]-t.innerHeight/2);var d=this._getOrCreateChild(Ps),f=d.createStyle();d.useStyle(f);var g=this._defaultStyle,y=!1,v=0,m=tl("fill"in l?l.fill:"fill"in e?e.fill:(y=!0,g.fill)),x=Qs("stroke"in l?l.stroke:"stroke"in e?e.stroke:c||s||g.autoStroke&&!y?null:(v=2,g.stroke)),_=l.textShadowBlur>0||e.textShadowBlur>0;f.text=t.text,f.x=r,f.y=h,_&&(f.shadowBlur=l.textShadowBlur||e.textShadowBlur||0,f.shadowColor=l.textShadowColor||e.textShadowColor||"transparent",f.shadowOffsetX=l.textShadowOffsetX||e.textShadowOffsetX||0,f.shadowOffsetY=l.textShadowOffsetY||e.textShadowOffsetY||0),f.textAlign=o,f.textBaseline="middle",f.font=t.font||a,f.opacity=ot(l.opacity,e.opacity,1),Ks(f,l),x&&(f.lineWidth=ot(l.lineWidth,e.lineWidth,v),f.lineDash=rt(l.lineDash,e.lineDash),f.lineDashOffset=e.lineDashOffset||0,f.stroke=x),m&&(f.fill=m);var b=t.contentWidth,w=t.contentHeight;d.setBoundingRect(new ze(Mr(f.x,b,f.textAlign),Ir(f.y,w,f.textBaseline),b,w))},e.prototype._renderBackground=function(t,e,n,i,r,o){var a,s,l,u=t.backgroundColor,h=t.borderWidth,c=t.borderColor,p=u&&u.image,d=u&&!p,f=t.borderRadius,g=this;if(d||t.lineHeight||h&&c){(a=this._getOrCreateChild(Ws)).useStyle(a.createStyle()),a.style.fill=null;var y=a.shape;y.x=n,y.y=i,y.width=r,y.height=o,y.r=f,a.dirtyShape()}if(d)(l=a.style).fill=u||null,l.fillOpacity=rt(t.fillOpacity,1);else if(p){(s=this._getOrCreateChild(Ns)).onload=function(){g.dirtyStyle()};var v=s.style;v.image=u.image,v.x=n,v.y=i,v.width=r,v.height=o}h&&c&&((l=a.style).lineWidth=h,l.stroke=c,l.strokeOpacity=rt(t.strokeOpacity,1),l.lineDash=t.borderDash,l.lineDashOffset=t.borderDashOffset||0,a.strokeContainThreshold=0,a.hasFill()&&a.hasStroke()&&(l.strokeFirst=!0,l.lineWidth*=2));var m=(a||s).style;m.shadowBlur=t.shadowBlur||0,m.shadowColor=t.shadowColor||"transparent",m.shadowOffsetX=t.shadowOffsetX||0,m.shadowOffsetY=t.shadowOffsetY||0,m.opacity=ot(t.opacity,e.opacity,1)},e.makeFont=function(t){var e="";return $s(t)&&(e=[t.fontStyle,t.fontWeight,qs(t.fontSize),t.fontFamily||"sans-serif"].join(" ")),e&&ut(e)||t.textFont||t.font},e}(Da),Us={left:!0,right:1,center:1},Zs={top:1,bottom:1,middle:1},js=["fontStyle","fontWeight","fontSize","fontFamily"];function qs(t){return"string"!=typeof t||-1===t.indexOf("px")&&-1===t.indexOf("rem")&&-1===t.indexOf("em")?isNaN(+t)?"12px":t+"px":t}function Ks(t,e){for(var n=0;n=0,o=!1;if(t instanceof ks){var a=ll(t),s=r&&a.selectFill||a.normalFill,l=r&&a.selectStroke||a.normalStroke;if(ml(s)||ml(l)){var u=(i=i||{}).style||{};"inherit"===u.fill?(o=!0,i=A({},i),(u=A({},u)).fill=s):!ml(u.fill)&&ml(s)?(o=!0,i=A({},i),(u=A({},u)).fill=si(s)):!ml(u.stroke)&&ml(l)&&(o||(i=A({},i),u=A({},u)),u.stroke=si(l)),i.style=u}}if(i&&null==i.z2){o||(i=A({},i));var h=t.z2EmphasisLift;i.z2=t.z2+(null!=h?h:pl)}return i}(this,0,e,n);if("blur"===t)return function(t,e,n){var i=P(t.currentStates,e)>=0,r=t.style.opacity,o=i?null:function(t,e,n,i){for(var r=t.style,o={},a=0;a0){var o={dataIndex:r,seriesIndex:t.seriesIndex};null!=i&&(o.dataType=i),e.push(o)}}))})),e}function Ul(t,e,n){Jl(t,!0),Cl(t,kl),jl(t,e,n)}function Zl(t,e,n,i){i?function(t){Jl(t,!1)}(t):Ul(t,e,n)}function jl(t,e,n){var i=rl(t);null!=e?(i.focus=e,i.blurScope=n):i.focus&&(i.focus=null)}var ql=["emphasis","blur","select"],Kl={itemStyle:"getItemStyle",lineStyle:"getLineStyle",areaStyle:"getAreaStyle"};function $l(t,e,n,i){n=n||"itemStyle";for(var r=0;r1&&(a*=su(f),s*=su(f));var g=(r===o?-1:1)*su((a*a*(s*s)-a*a*(d*d)-s*s*(p*p))/(a*a*(d*d)+s*s*(p*p)))||0,y=g*a*d/s,v=g*-s*p/a,m=(t+n)/2+uu(c)*y-lu(c)*v,x=(e+i)/2+lu(c)*y+uu(c)*v,_=du([1,0],[(p-y)/a,(d-v)/s]),b=[(p-y)/a,(d-v)/s],w=[(-1*p-y)/a,(-1*d-v)/s],S=du(b,w);if(pu(b,w)<=-1&&(S=hu),pu(b,w)>=1&&(S=0),S<0){var M=Math.round(S/hu*1e6)/1e6;S=2*hu+M%2*hu}h.addData(u,m,x,a,s,_,S,c,o)}var gu=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,yu=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;var vu=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.applyTransform=function(t){},e}(ks);function mu(t){return null!=t.setData}function xu(t,e){var n=function(t){var e=new hs;if(!t)return e;var n,i=0,r=0,o=i,a=r,s=hs.CMD,l=t.match(gu);if(!l)return e;for(var u=0;uk*k+L*L&&(M=T,I=C),{cx:M,cy:I,x0:-h,y0:-c,x1:M*(r/b-1),y1:I*(r/b-1)}}function Vu(t,e){var n,i=Ru(e.r,0),r=Ru(e.r0||0,0),o=i>0;if(o||r>0){if(o||(i=r,r=0),r>i){var a=i;i=r,r=a}var s=e.startAngle,l=e.endAngle;if(!isNaN(s)&&!isNaN(l)){var u=e.cx,h=e.cy,c=!!e.clockwise,p=Pu(l-s),d=p>Cu&&p%Cu;if(d>Eu&&(p=d),i>Eu)if(p>Cu-Eu)t.moveTo(u+i*Au(s),h+i*Du(s)),t.arc(u,h,i,s,l,!c),r>Eu&&(t.moveTo(u+r*Au(l),h+r*Du(l)),t.arc(u,h,r,l,s,c));else{var f=void 0,g=void 0,y=void 0,v=void 0,m=void 0,x=void 0,_=void 0,b=void 0,w=void 0,S=void 0,M=void 0,I=void 0,T=void 0,C=void 0,D=void 0,A=void 0,k=i*Au(s),L=i*Du(s),P=r*Au(l),O=r*Du(l),R=p>Eu;if(R){var N=e.cornerRadius;N&&(n=function(t){var e;if(Y(t)){var n=t.length;if(!n)return t;e=1===n?[t[0],t[0],0,0]:2===n?[t[0],t[0],t[1],t[1]]:3===n?t.concat(t[2]):t}else e=[t,t,t,t];return e}(N),f=n[0],g=n[1],y=n[2],v=n[3]);var E=Pu(i-r)/2;if(m=Nu(E,y),x=Nu(E,v),_=Nu(E,f),b=Nu(E,g),M=w=Ru(m,x),I=S=Ru(_,b),(w>Eu||S>Eu)&&(T=i*Au(l),C=i*Du(l),D=r*Au(s),A=r*Du(s),pEu){var X=Nu(y,M),U=Nu(v,M),Z=zu(D,A,k,L,i,X,c),j=zu(T,C,P,O,i,U,c);t.moveTo(u+Z.cx+Z.x0,h+Z.cy+Z.y0),M0&&t.arc(u+Z.cx,h+Z.cy,X,Lu(Z.y0,Z.x0),Lu(Z.y1,Z.x1),!c),t.arc(u,h,i,Lu(Z.cy+Z.y1,Z.cx+Z.x1),Lu(j.cy+j.y1,j.cx+j.x1),!c),U>0&&t.arc(u+j.cx,h+j.cy,U,Lu(j.y1,j.x1),Lu(j.y0,j.x0),!c))}else t.moveTo(u+k,h+L),t.arc(u,h,i,s,l,!c);else t.moveTo(u+k,h+L);if(r>Eu&&R)if(I>Eu){X=Nu(f,I),Z=zu(P,O,T,C,r,-(U=Nu(g,I)),c),j=zu(k,L,D,A,r,-X,c);t.lineTo(u+Z.cx+Z.x0,h+Z.cy+Z.y0),I0&&t.arc(u+Z.cx,h+Z.cy,U,Lu(Z.y0,Z.x0),Lu(Z.y1,Z.x1),!c),t.arc(u,h,r,Lu(Z.cy+Z.y1,Z.cx+Z.x1),Lu(j.cy+j.y1,j.cx+j.x1),c),X>0&&t.arc(u+j.cx,h+j.cy,X,Lu(j.y1,j.x1),Lu(j.y0,j.x0),!c))}else t.lineTo(u+P,h+O),t.arc(u,h,r,l,s,c);else t.lineTo(u+P,h+O)}else t.moveTo(u,h);t.closePath()}}}var Bu=function(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=2*Math.PI,this.clockwise=!0,this.cornerRadius=0},Fu=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new Bu},e.prototype.buildPath=function(t,e){Vu(t,e)},e.prototype.isZeroArea=function(){return this.shape.startAngle===this.shape.endAngle||this.shape.r===this.shape.r0},e}(ks);Fu.prototype.type="sector";var Gu=function(){this.cx=0,this.cy=0,this.r=0,this.r0=0},Wu=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new Gu},e.prototype.buildPath=function(t,e){var n=e.cx,i=e.cy,r=2*Math.PI;t.moveTo(n+e.r,i),t.arc(n,i,e.r,0,r,!1),t.moveTo(n+e.r0,i),t.arc(n,i,e.r0,0,r,!0)},e}(ks);function Hu(t,e,n){var i=e.smooth,r=e.points;if(r&&r.length>=2){if(i){var o=function(t,e,n,i){var r,o,a,s,l=[],u=[],h=[],c=[];if(i){a=[1/0,1/0],s=[-1/0,-1/0];for(var p=0,d=t.length;plh[1]){if(a=!1,r)return a;var u=Math.abs(lh[0]-sh[1]),h=Math.abs(sh[0]-lh[1]);Math.min(u,h)>i.len()&&(u0){var c={duration:h.duration,delay:h.delay||0,easing:h.easing,done:o,force:!!o||!!a,setToFinal:!u,scope:t,during:a};l?e.animateFrom(n,c):e.animateTo(n,c)}else e.stopAnimation(),!l&&e.attr(n),a&&a(1),o&&o()}function vh(t,e,n,i,r,o){yh("update",t,e,n,i,r,o)}function mh(t,e,n,i,r,o){yh("enter",t,e,n,i,r,o)}function xh(t){if(!t.__zr)return!0;for(var e=0;eMath.abs(o[1])?o[0]>0?"right":"left":o[1]>0?"bottom":"top"}function Wh(t){return!t.isGroup}function Hh(t,e,n){if(t&&e){var i,r=(i={},t.traverse((function(t){Wh(t)&&t.anid&&(i[t.anid]=t)})),i);e.traverse((function(t){if(Wh(t)&&t.anid){var e=r[t.anid];if(e){var i=o(t);t.attr(o(e)),vh(t,i,n,rl(t).dataIndex)}}}))}function o(t){var e={x:t.x,y:t.y,rotation:t.rotation};return function(t){return null!=t.shape}(t)&&(e.shape=A({},t.shape)),e}}function Yh(t,e){return z(t,(function(t){var n=t[0];n=Mh(n,e.x),n=Ih(n,e.x+e.width);var i=t[1];return i=Mh(i,e.y),[n,i=Ih(i,e.y+e.height)]}))}function Xh(t,e){var n=Mh(t.x,e.x),i=Ih(t.x+t.width,e.x+e.width),r=Mh(t.y,e.y),o=Ih(t.y+t.height,e.y+e.height);if(i>=n&&o>=r)return{x:n,y:r,width:i-n,height:o-r}}function Uh(t,e,n){var i=A({rectHover:!0},e),r=i.style={strokeNoScale:!0};if(n=n||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf("image://")?(r.image=t.slice(8),k(r,n),new Ns(i)):Ph(t.replace("path://",""),i,n,"center")}function Zh(t,e,n,i,r){for(var o=0,a=r[r.length-1];o=-1e-6)return!1;var f=t-r,g=e-o,y=qh(f,g,u,h)/d;if(y<0||y>1)return!1;var v=qh(f,g,c,p)/d;return!(v<0||v>1)}function qh(t,e,n,i){return t*i-n*e}function Kh(t){var e=t.itemTooltipOption,n=t.componentModel,i=t.itemName,r=U(e)?{formatter:e}:e,o=n.mainType,a=n.componentIndex,s={componentType:o,name:i,$vars:["name"]};s[o+"Index"]=a;var l=t.formatterParamsExtra;l&&E(G(l),(function(t){_t(s,t)||(s[t]=l[t],s.$vars.push(t))}));var u=rl(t.el);u.componentMainType=o,u.componentIndex=a,u.tooltipConfig={name:i,option:k({content:i,encodeHTMLContent:!0,formatterParams:s},r)}}function $h(t,e){var n;t.isGroup&&(n=e(t)),n||t.traverse(e)}function Jh(t,e){if(t)if(Y(t))for(var n=0;n-1?Lc:Oc;function zc(t,e){t=t.toUpperCase(),Nc[t]=new Cc(e),Rc[t]=e}function Vc(t){return Nc[t]}zc(Pc,{time:{month:["January","February","March","April","May","June","July","August","September","October","November","December"],monthAbbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayOfWeekAbbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},legend:{selector:{all:"All",inverse:"Inv"}},toolbox:{brush:{title:{rect:"Box Select",polygon:"Lasso Select",lineX:"Horizontally Select",lineY:"Vertically Select",keep:"Keep Selections",clear:"Clear Selections"}},dataView:{title:"Data View",lang:["Data View","Close","Refresh"]},dataZoom:{title:{zoom:"Zoom",back:"Zoom Reset"}},magicType:{title:{line:"Switch to Line Chart",bar:"Switch to Bar Chart",stack:"Stack",tiled:"Tile"}},restore:{title:"Restore"},saveAsImage:{title:"Save as Image",lang:["Right Click to Save Image"]}},series:{typeNames:{pie:"Pie chart",bar:"Bar chart",line:"Line chart",scatter:"Scatter plot",effectScatter:"Ripple scatter plot",radar:"Radar chart",tree:"Tree",treemap:"Treemap",boxplot:"Boxplot",candlestick:"Candlestick",k:"K line chart",heatmap:"Heat map",map:"Map",parallel:"Parallel coordinate map",lines:"Line graph",graph:"Relationship graph",sankey:"Sankey diagram",funnel:"Funnel chart",gauge:"Gauge",pictorialBar:"Pictorial bar",themeRiver:"Theme River Map",sunburst:"Sunburst",custom:"Custom chart",chart:"Chart"}},aria:{general:{withTitle:'This is a chart about "{title}"',withoutTitle:"This is a chart"},series:{single:{prefix:"",withName:" with type {seriesType} named {seriesName}.",withoutName:" with type {seriesType}."},multiple:{prefix:". It consists of {seriesCount} series count.",withName:" The {seriesId} series is a {seriesType} representing {seriesName}.",withoutName:" The {seriesId} series is a {seriesType}.",separator:{middle:"",end:""}}},data:{allData:"The data is as follows: ",partialData:"The first {displayCnt} items are: ",withName:"the data for {name} is {value}",withoutName:"{value}",separator:{middle:", ",end:". "}}}}),zc(Lc,{time:{month:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthAbbr:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayOfWeekAbbr:["日","一","二","三","四","五","六"]},legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图",custom:"自定义图表",chart:"图表"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}});var Bc=1e3,Fc=6e4,Gc=36e5,Wc=864e5,Hc=31536e6,Yc={year:"{yyyy}",month:"{MMM}",day:"{d}",hour:"{HH}:{mm}",minute:"{HH}:{mm}",second:"{HH}:{mm}:{ss}",millisecond:"{HH}:{mm}:{ss} {SSS}",none:"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}"},Xc="{yyyy}-{MM}-{dd}",Uc={year:"{yyyy}",month:"{yyyy}-{MM}",day:Xc,hour:Xc+" "+Yc.hour,minute:Xc+" "+Yc.minute,second:Xc+" "+Yc.second,millisecond:Yc.none},Zc=["year","month","day","hour","minute","second","millisecond"],jc=["year","half-year","quarter","month","week","half-week","day","half-day","quarter-day","hour","minute","second","millisecond"];function qc(t,e){return"0000".substr(0,e-(t+="").length)+t}function Kc(t){switch(t){case"half-year":case"quarter":return"month";case"week":case"half-week":return"day";case"half-day":case"quarter-day":return"hour";default:return t}}function $c(t){return t===Kc(t)}function Jc(t,e,n,i){var r=uo(t),o=r[ep(n)](),a=r[np(n)]()+1,s=Math.floor((a-1)/3)+1,l=r[ip(n)](),u=r["get"+(n?"UTC":"")+"Day"](),h=r[rp(n)](),c=(h-1)%12+1,p=r[op(n)](),d=r[ap(n)](),f=r[sp(n)](),g=h>=12?"pm":"am",y=g.toUpperCase(),v=(i instanceof Cc?i:Vc(i||Ec)||Nc[Oc]).getModel("time"),m=v.get("month"),x=v.get("monthAbbr"),_=v.get("dayOfWeek"),b=v.get("dayOfWeekAbbr");return(e||"").replace(/{a}/g,g+"").replace(/{A}/g,y+"").replace(/{yyyy}/g,o+"").replace(/{yy}/g,qc(o%100+"",2)).replace(/{Q}/g,s+"").replace(/{MMMM}/g,m[a-1]).replace(/{MMM}/g,x[a-1]).replace(/{MM}/g,qc(a,2)).replace(/{M}/g,a+"").replace(/{dd}/g,qc(l,2)).replace(/{d}/g,l+"").replace(/{eeee}/g,_[u]).replace(/{ee}/g,b[u]).replace(/{e}/g,u+"").replace(/{HH}/g,qc(h,2)).replace(/{H}/g,h+"").replace(/{hh}/g,qc(c+"",2)).replace(/{h}/g,c+"").replace(/{mm}/g,qc(p,2)).replace(/{m}/g,p+"").replace(/{ss}/g,qc(d,2)).replace(/{s}/g,d+"").replace(/{SSS}/g,qc(f,3)).replace(/{S}/g,f+"")}function Qc(t,e){var n=uo(t),i=n[np(e)]()+1,r=n[ip(e)](),o=n[rp(e)](),a=n[op(e)](),s=n[ap(e)](),l=0===n[sp(e)](),u=l&&0===s,h=u&&0===a,c=h&&0===o,p=c&&1===r;return p&&1===i?"year":p?"month":c?"day":h?"hour":u?"minute":l?"second":"millisecond"}function tp(t,e,n){var i=j(t)?uo(t):t;switch(e=e||Qc(t,n)){case"year":return i[ep(n)]();case"half-year":return i[np(n)]()>=6?1:0;case"quarter":return Math.floor((i[np(n)]()+1)/4);case"month":return i[np(n)]();case"day":return i[ip(n)]();case"half-day":return i[rp(n)]()/24;case"hour":return i[rp(n)]();case"minute":return i[op(n)]();case"second":return i[ap(n)]();case"millisecond":return i[sp(n)]()}}function ep(t){return t?"getUTCFullYear":"getFullYear"}function np(t){return t?"getUTCMonth":"getMonth"}function ip(t){return t?"getUTCDate":"getDate"}function rp(t){return t?"getUTCHours":"getHours"}function op(t){return t?"getUTCMinutes":"getMinutes"}function ap(t){return t?"getUTCSeconds":"getSeconds"}function sp(t){return t?"getUTCMilliseconds":"getMilliseconds"}function lp(t){return t?"setUTCFullYear":"setFullYear"}function up(t){return t?"setUTCMonth":"setMonth"}function hp(t){return t?"setUTCDate":"setDate"}function cp(t){return t?"setUTCHours":"setHours"}function pp(t){return t?"setUTCMinutes":"setMinutes"}function dp(t){return t?"setUTCSeconds":"setSeconds"}function fp(t){return t?"setUTCMilliseconds":"setMilliseconds"}function gp(t){if(!vo(t))return U(t)?t:"-";var e=(t+"").split(".");return e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:"")}function yp(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,(function(t,e){return e.toUpperCase()})),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}var vp=st;function mp(t,e,n){function i(t){return t&&ut(t)?t:"-"}function r(t){return!(null==t||isNaN(t)||!isFinite(t))}var o="time"===e,a=t instanceof Date;if(o||a){var s=o?uo(t):t;if(!isNaN(+s))return Jc(s,"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}",n);if(a)return"-"}if("ordinal"===e)return Z(t)?i(t):j(t)&&r(t)?t+"":"-";var l=yo(t);return r(l)?gp(l):Z(t)?i(t):"boolean"==typeof t?t+"":"-"}var xp=["a","b","c","d","e","f","g"],_p=function(t,e){return"{"+t+(null==e?"":e)+"}"};function bp(t,e,n){Y(e)||(e=[e]);var i=e.length;if(!i)return"";for(var r=e[0].$vars||[],o=0;o':'':{renderMode:o,content:"{"+(n.markerId||"markerX")+"|} ",style:"subItem"===r?{width:4,height:4,borderRadius:2,backgroundColor:i}:{width:10,height:10,borderRadius:5,backgroundColor:i}}:""}function Sp(t,e){return e=e||"transparent",U(t)?t:q(t)&&t.colorStops&&(t.colorStops[0]||{}).color||e}function Mp(t,e){if("_blank"===e||"blank"===e){var n=window.open();n.opener=null,n.location.href=t}else window.open(t,e)}var Ip=E,Tp=["left","right","top","bottom","width","height"],Cp=[["width","left","right"],["height","top","bottom"]];function Dp(t,e,n,i,r){var o=0,a=0;null==i&&(i=1/0),null==r&&(r=1/0);var s=0;e.eachChild((function(l,u){var h,c,p=l.getBoundingRect(),d=e.childAt(u+1),f=d&&d.getBoundingRect();if("horizontal"===t){var g=p.width+(f?-f.x+p.x:0);(h=o+g)>i||l.newline?(o=0,h=g,a+=s+n,s=p.height):s=Math.max(s,p.height)}else{var y=p.height+(f?-f.y+p.y:0);(c=a+y)>r||l.newline?(o+=s+n,a=0,c=y,s=p.width):s=Math.max(s,p.width)}l.newline||(l.x=o,l.y=a,l.markRedraw(),"horizontal"===t?o=h+n:a=c+n)}))}var Ap=Dp;H(Dp,"vertical"),H(Dp,"horizontal");function kp(t,e,n){n=vp(n||0);var i=e.width,r=e.height,o=$r(t.left,i),a=$r(t.top,r),s=$r(t.right,i),l=$r(t.bottom,r),u=$r(t.width,i),h=$r(t.height,r),c=n[2]+n[0],p=n[1]+n[3],d=t.aspect;switch(isNaN(u)&&(u=i-s-p-o),isNaN(h)&&(h=r-l-c-a),null!=d&&(isNaN(u)&&isNaN(h)&&(d>i/r?u=.8*i:h=.8*r),isNaN(u)&&(u=d*h),isNaN(h)&&(h=u/d)),isNaN(o)&&(o=i-s-u-p),isNaN(a)&&(a=r-l-h-c),t.left||t.right){case"center":o=i/2-u/2-n[3];break;case"right":o=i-u-p}switch(t.top||t.bottom){case"middle":case"center":a=r/2-h/2-n[0];break;case"bottom":a=r-h-c}o=o||0,a=a||0,isNaN(u)&&(u=i-p-o-(s||0)),isNaN(h)&&(h=r-c-a-(l||0));var f=new ze(o+n[3],a+n[0],u,h);return f.margin=n,f}function Lp(t,e,n,i,r,o){var a,s=!r||!r.hv||r.hv[0],l=!r||!r.hv||r.hv[1],u=r&&r.boundingMode||"all";if((o=o||t).x=t.x,o.y=t.y,!s&&!l)return!1;if("raw"===u)a="group"===t.type?new ze(0,0,+e.width||0,+e.height||0):t.getBoundingRect();else if(a=t.getBoundingRect(),t.needLocalTransform()){var h=t.getLocalTransform();(a=a.clone()).applyTransform(h)}var c=kp(k({width:a.width,height:a.height},e),n,i),p=s?c.x-a.x:0,d=l?c.y-a.y:0;return"raw"===u?(o.x=p,o.y=d):(o.x+=p,o.y+=d),o===t&&t.markRedraw(),!0}function Pp(t){var e=t.layoutMode||t.constructor.layoutMode;return q(e)?e:e?{type:e}:null}function Op(t,e,n){var i=n&&n.ignoreSize;!Y(i)&&(i=[i,i]);var r=a(Cp[0],0),o=a(Cp[1],1);function a(n,r){var o={},a=0,u={},h=0;if(Ip(n,(function(e){u[e]=t[e]})),Ip(n,(function(t){s(e,t)&&(o[t]=u[t]=e[t]),l(o,t)&&a++,l(u,t)&&h++})),i[r])return l(e,n[1])?u[n[2]]=null:l(e,n[2])&&(u[n[1]]=null),u;if(2!==h&&a){if(a>=2)return o;for(var c=0;c=0;a--)o=C(o,n[a],!0);e.defaultOption=o}return e.defaultOption},e.prototype.getReferringComponents=function(t,e){var n=t+"Index",i=t+"Id";return Yo(this.ecModel,t,{index:this.get(n,!0),id:this.get(i,!0)},e)},e.prototype.getBoxLayoutParams=function(){var t=this;return{left:t.get("left"),top:t.get("top"),right:t.get("right"),bottom:t.get("bottom"),width:t.get("width"),height:t.get("height")}},e.prototype.getZLevelKey=function(){return""},e.prototype.setZLevel=function(t){this.option.zlevel=t},e.protoInitialize=function(){var t=e.prototype;t.type="component",t.id="",t.name="",t.mainType="",t.subType="",t.componentIndex=0}(),e}(Cc);Jo(zp,Cc),na(zp),function(t){var e={};t.registerSubTypeDefaulter=function(t,n){var i=Ko(t);e[i.main]=n},t.determineSubType=function(n,i){var r=i.type;if(!r){var o=Ko(n).main;t.hasSubTypes(n)&&e[o]&&(r=e[o](i))}return r}}(zp),function(t,e){function n(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}t.topologicalTravel=function(t,i,r,o){if(t.length){var a=function(t){var i={},r=[];return E(t,(function(o){var a=n(i,o),s=function(t,e){var n=[];return E(t,(function(t){P(e,t)>=0&&n.push(t)})),n}(a.originalDeps=e(o),t);a.entryCount=s.length,0===a.entryCount&&r.push(o),E(s,(function(t){P(a.predecessor,t)<0&&a.predecessor.push(t);var e=n(i,t);P(e.successor,t)<0&&e.successor.push(o)}))})),{graph:i,noEntryList:r}}(i),s=a.graph,l=a.noEntryList,u={};for(E(t,(function(t){u[t]=!0}));l.length;){var h=l.pop(),c=s[h],p=!!u[h];p&&(r.call(o,h,c.originalDeps.slice()),delete u[h]),E(c.successor,p?f:d)}E(u,(function(){var t="";throw new Error(t)}))}function d(t){s[t].entryCount--,0===s[t].entryCount&&l.push(t)}function f(t){u[t]=!0,d(t)}}}(zp,(function(t){var e=[];E(zp.getClassesByMainType(t),(function(t){e=e.concat(t.dependencies||t.prototype.dependencies||[])})),e=z(e,(function(t){return Ko(t).main})),"dataset"!==t&&P(e,"dataset")<=0&&e.unshift("dataset");return e}));var Vp="";"undefined"!=typeof navigator&&(Vp=navigator.platform||"");var Bp="rgba(0, 0, 0, 0.2)",Fp={darkMode:"auto",colorBy:"series",color:["#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#3ba272","#fc8452","#9a60b4","#ea7ccc"],gradientColor:["#f6efa6","#d88273","#bf444c"],aria:{decal:{decals:[{color:Bp,dashArrayX:[1,0],dashArrayY:[2,5],symbolSize:1,rotation:Math.PI/6},{color:Bp,symbol:"circle",dashArrayX:[[8,8],[0,8,8,0]],dashArrayY:[6,0],symbolSize:.8},{color:Bp,dashArrayX:[1,0],dashArrayY:[4,3],rotation:-Math.PI/4},{color:Bp,dashArrayX:[[6,6],[0,6,6,0]],dashArrayY:[6,0]},{color:Bp,dashArrayX:[[1,0],[1,6]],dashArrayY:[1,0,6,0],rotation:Math.PI/4},{color:Bp,symbol:"triangle",dashArrayX:[[9,9],[0,9,9,0]],dashArrayY:[7,2],symbolSize:.75}]}},textStyle:{fontFamily:Vp.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,stateAnimation:{duration:300,easing:"cubicOut"},animation:"auto",animationDuration:1e3,animationDurationUpdate:500,animationEasing:"cubicInOut",animationEasingUpdate:"cubicInOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},Gp=yt(["tooltip","label","itemName","itemId","itemGroupId","itemChildGroupId","seriesName"]),Wp="original",Hp="arrayRows",Yp="objectRows",Xp="keyedColumns",Up="typedArray",Zp="unknown",jp="column",qp="row",Kp=1,$p=2,Jp=3,Qp=Vo();function td(t,e,n){var i={},r=nd(e);if(!r||!t)return i;var o,a,s=[],l=[],u=e.ecModel,h=Qp(u).datasetMap,c=r.uid+"_"+n.seriesLayoutBy;E(t=t.slice(),(function(e,n){var r=q(e)?e:t[n]={name:e};"ordinal"===r.type&&null==o&&(o=n,a=f(r)),i[r.name]=[]}));var p=h.get(c)||h.set(c,{categoryWayDim:a,valueWayDim:0});function d(t,e,n){for(var i=0;ie)return t[i];return t[n-1]}(i,a):n;if((h=h||n)&&h.length){var c=h[l];return r&&(u[r]=c),s.paletteIdx=(l+1)%h.length,c}}var fd="\0_ec_inner";var gd=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.init=function(t,e,n,i,r,o){i=i||{},this.option=null,this._theme=new Cc(i),this._locale=new Cc(r),this._optionManager=o},e.prototype.setOption=function(t,e,n){var i=md(e);this._optionManager.setOption(t,n,i),this._resetOption(null,i)},e.prototype.resetOption=function(t,e){return this._resetOption(t,md(e))},e.prototype._resetOption=function(t,e){var n=!1,i=this._optionManager;if(!t||"recreate"===t){var r=i.mountOption("recreate"===t);0,this.option&&"recreate"!==t?(this.restoreData(),this._mergeOption(r,e)):ld(this,r),n=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var o=i.getTimelineOption(this);o&&(n=!0,this._mergeOption(o,e))}if(!t||"recreate"===t||"media"===t){var a=i.getMediaOption(this);a.length&&E(a,(function(t){n=!0,this._mergeOption(t,e)}),this)}return n},e.prototype.mergeOption=function(t){this._mergeOption(t,null)},e.prototype._mergeOption=function(t,e){var n=this.option,i=this._componentsMap,r=this._componentsCount,o=[],a=yt(),s=e&&e.replaceMergeMainTypeMap;Qp(this).datasetMap=yt(),E(t,(function(t,e){null!=t&&(zp.hasClass(e)?e&&(o.push(e),a.set(e,!0)):n[e]=null==n[e]?T(t):C(n[e],t,!0))})),s&&s.each((function(t,e){zp.hasClass(e)&&!a.get(e)&&(o.push(e),a.set(e,!0))})),zp.topologicalTravel(o,zp.getAllClassMainTypes(),(function(e){var o=function(t,e,n){var i=od.get(e);if(!i)return n;var r=i(t);return r?n.concat(r):n}(this,e,To(t[e])),a=i.get(e),l=a?s&&s.get(e)?"replaceMerge":"normalMerge":"replaceAll",u=Lo(a,o,l);(function(t,e,n){E(t,(function(t){var i=t.newOption;q(i)&&(t.keyInfo.mainType=e,t.keyInfo.subType=function(t,e,n,i){return e.type?e.type:n?n.subType:i.determineSubType(t,e)}(e,i,t.existing,n))}))})(u,e,zp),n[e]=null,i.set(e,null),r.set(e,0);var h,c=[],p=[],d=0;E(u,(function(t,n){var i=t.existing,r=t.newOption;if(r){var o="series"===e,a=zp.getClass(e,t.keyInfo.subType,!o);if(!a)return;if("tooltip"===e){if(h)return void 0;h=!0}if(i&&i.constructor===a)i.name=t.keyInfo.name,i.mergeOption(r,this),i.optionUpdated(r,!1);else{var s=A({componentIndex:n},t.keyInfo);A(i=new a(r,this,this,s),s),t.brandNew&&(i.__requireNewView=!0),i.init(r,this,this),i.optionUpdated(null,!0)}}else i&&(i.mergeOption({},this),i.optionUpdated({},!1));i?(c.push(i.option),p.push(i),d++):(c.push(void 0),p.push(void 0))}),this),n[e]=c,i.set(e,p),r.set(e,d),"series"===e&&ad(this)}),this),this._seriesIndices||ad(this)},e.prototype.getOption=function(){var t=T(this.option);return E(t,(function(e,n){if(zp.hasClass(n)){for(var i=To(e),r=i.length,o=!1,a=r-1;a>=0;a--)i[a]&&!Eo(i[a])?o=!0:(i[a]=null,!o&&r--);i.length=r,t[n]=i}})),delete t[fd],t},e.prototype.getTheme=function(){return this._theme},e.prototype.getLocaleModel=function(){return this._locale},e.prototype.setUpdatePayload=function(t){this._payload=t},e.prototype.getUpdatePayload=function(){return this._payload},e.prototype.getComponent=function(t,e){var n=this._componentsMap.get(t);if(n){var i=n[e||0];if(i)return i;if(null==e)for(var r=0;r=e:"max"===n?t<=e:t===e})(i[a],t,o)||(r=!1)}})),r}var Td=E,Cd=q,Dd=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];function Ad(t){var e=t&&t.itemStyle;if(e)for(var n=0,i=Dd.length;n=0;g--){var y=t[g];if(s||(p=y.data.rawIndexOf(y.stackedByDimension,c)),p>=0){var v=y.data.getByRawIndex(y.stackResultDimension,p);if("all"===l||"positive"===l&&v>0||"negative"===l&&v<0||"samesign"===l&&d>=0&&v>0||"samesign"===l&&d<=0&&v<0){d=ro(d,v),f=v;break}}}return i[0]=d,i[1]=f,i}))}))}var Zd,jd,qd,Kd,$d,Jd=function(t){this.data=t.data||(t.sourceFormat===Xp?{}:[]),this.sourceFormat=t.sourceFormat||Zp,this.seriesLayoutBy=t.seriesLayoutBy||jp,this.startIndex=t.startIndex||0,this.dimensionsDetectedCount=t.dimensionsDetectedCount,this.metaRawOption=t.metaRawOption;var e=this.dimensionsDefine=t.dimensionsDefine;if(e)for(var n=0;nu&&(u=d)}s[0]=l,s[1]=u}},i=function(){return this._data?this._data.length/this._dimSize:0};function r(t){for(var e=0;e=0&&(s=o.interpolatedValue[l])}return null!=s?s+"":""})):void 0},t.prototype.getRawValue=function(t,e){return mf(this.getData(e),t)},t.prototype.formatTooltip=function(t,e,n){},t}();function bf(t){var e,n;return q(t)?t.type&&(n=t):e=t,{text:e,frag:n}}function wf(t){return new Sf(t)}var Sf=function(){function t(t){t=t||{},this._reset=t.reset,this._plan=t.plan,this._count=t.count,this._onDirty=t.onDirty,this._dirty=!0}return t.prototype.perform=function(t){var e,n=this._upstream,i=t&&t.skip;if(this._dirty&&n){var r=this.context;r.data=r.outputData=n.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this),this._plan&&!i&&(e=this._plan(this.context));var o,a=h(this._modBy),s=this._modDataCount||0,l=h(t&&t.modBy),u=t&&t.modDataCount||0;function h(t){return!(t>=1)&&(t=1),t}a===l&&s===u||(e="reset"),(this._dirty||"reset"===e)&&(this._dirty=!1,o=this._doReset(i)),this._modBy=l,this._modDataCount=u;var c=t&&t.step;if(this._dueEnd=n?n._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var p=this._dueIndex,d=Math.min(null!=c?this._dueIndex+c:1/0,this._dueEnd);if(!i&&(o||p1&&i>0?s:a}};return o;function a(){return e=t?null:oe},gte:function(t,e){return t>=e}},Af=function(){function t(t,e){if(!j(e)){var n="";0,wo(n)}this._opFn=Df[t],this._rvalFloat=yo(e)}return t.prototype.evaluate=function(t){return j(t)?this._opFn(t,this._rvalFloat):this._opFn(yo(t),this._rvalFloat)},t}(),kf=function(){function t(t,e){var n="desc"===t;this._resultLT=n?1:-1,null==e&&(e=n?"min":"max"),this._incomparable="min"===e?-1/0:1/0}return t.prototype.evaluate=function(t,e){var n=j(t)?t:yo(t),i=j(e)?e:yo(e),r=isNaN(n),o=isNaN(i);if(r&&(n=this._incomparable),o&&(i=this._incomparable),r&&o){var a=U(t),s=U(e);a&&(n=s?t:0),s&&(i=a?e:0)}return ni?-this._resultLT:0},t}(),Lf=function(){function t(t,e){this._rval=e,this._isEQ=t,this._rvalTypeof=typeof e,this._rvalFloat=yo(e)}return t.prototype.evaluate=function(t){var e=t===this._rval;if(!e){var n=typeof t;n===this._rvalTypeof||"number"!==n&&"number"!==this._rvalTypeof||(e=yo(t)===this._rvalFloat)}return this._isEQ?e:!e},t}();function Pf(t,e){return"eq"===t||"ne"===t?new Lf("eq"===t,e):_t(Df,t)?new Af(t,e):null}var Of=function(){function t(){}return t.prototype.getRawData=function(){throw new Error("not supported")},t.prototype.getRawDataItem=function(t){throw new Error("not supported")},t.prototype.cloneRawData=function(){},t.prototype.getDimensionInfo=function(t){},t.prototype.cloneAllDimensionInfo=function(){},t.prototype.count=function(){},t.prototype.retrieveValue=function(t,e){},t.prototype.retrieveValueFromItem=function(t,e){},t.prototype.convertValue=function(t,e){return If(t,e)},t}();function Rf(t){var e=t.sourceFormat;if(!Ff(e)){var n="";0,wo(n)}return t.data}function Nf(t){var e=t.sourceFormat,n=t.data;if(!Ff(e)){var i="";0,wo(i)}if(e===Hp){for(var r=[],o=0,a=n.length;o65535?Hf:Yf}function qf(t,e,n,i,r){var o=Zf[n||"float"];if(r){var a=t[e],s=a&&a.length;if(s!==i){for(var l=new o(i),u=0;ug[1]&&(g[1]=f)}return this._rawCount=this._count=s,{start:a,end:s}},t.prototype._initDataFromProvider=function(t,e,n){for(var i=this._provider,r=this._chunks,o=this._dimensions,a=o.length,s=this._rawExtent,l=z(o,(function(t){return t.property})),u=0;uy[1]&&(y[1]=g)}}!i.persistent&&i.clean&&i.clean(),this._rawCount=this._count=e,this._extent=[]},t.prototype.count=function(){return this._count},t.prototype.get=function(t,e){if(!(e>=0&&e=0&&e=this._rawCount||t<0)return-1;if(!this._indices)return t;var e=this._indices,n=e[t];if(null!=n&&nt))return o;r=o-1}}return-1},t.prototype.indicesOfNearest=function(t,e,n){var i=this._chunks[t],r=[];if(!i)return r;null==n&&(n=1/0);for(var o=1/0,a=-1,s=0,l=0,u=this.count();l=0&&a<0)&&(o=c,a=h,s=0),h===a&&(r[s++]=l))}return r.length=s,r},t.prototype.getIndices=function(){var t,e=this._indices;if(e){var n=e.constructor,i=this._count;if(n===Array){t=new n(i);for(var r=0;r=u&&x<=h||isNaN(x))&&(a[s++]=d),d++}p=!0}else if(2===r){f=c[i[0]];var y=c[i[1]],v=t[i[1]][0],m=t[i[1]][1];for(g=0;g=u&&x<=h||isNaN(x))&&(_>=v&&_<=m||isNaN(_))&&(a[s++]=d),d++}p=!0}}if(!p)if(1===r)for(g=0;g=u&&x<=h||isNaN(x))&&(a[s++]=b)}else for(g=0;gt[M][1])&&(w=!1)}w&&(a[s++]=e.getRawIndex(g))}return sy[1]&&(y[1]=g)}}}},t.prototype.lttbDownSample=function(t,e){var n,i,r,o=this.clone([t],!0),a=o._chunks[t],s=this.count(),l=0,u=Math.floor(1/e),h=this.getRawIndex(0),c=new(jf(this._rawCount))(Math.min(2*(Math.ceil(s/u)+2),s));c[l++]=h;for(var p=1;pn&&(n=i,r=I)}M>0&&M<_-x&&(c[l++]=Math.min(S,r),r=Math.max(S,r)),c[l++]=r,h=r}return c[l++]=this.getRawIndex(s-1),o._count=l,o._indices=c,o.getRawIndex=this._getRawIdx,o},t.prototype.downSample=function(t,e,n,i){for(var r=this.clone([t],!0),o=r._chunks,a=[],s=Math.floor(1/e),l=o[t],u=this.count(),h=r._rawExtent[t]=[1/0,-1/0],c=new(jf(this._rawCount))(Math.ceil(u/s)),p=0,d=0;du-d&&(s=u-d,a.length=s);for(var f=0;fh[1]&&(h[1]=y),c[p++]=v}return r._count=p,r._indices=c,r._updateGetRawIdx(),r},t.prototype.each=function(t,e){if(this._count)for(var n=t.length,i=this._chunks,r=0,o=this.count();ra&&(a=l)}return i=[o,a],this._extent[t]=i,i},t.prototype.getRawDataItem=function(t){var e=this.getRawIndex(t);if(this._provider.persistent)return this._provider.getItem(e);for(var n=[],i=this._chunks,r=0;r=0?this._indices[t]:-1},t.prototype._updateGetRawIdx=function(){this.getRawIndex=this._indices?this._getRawIdx:this._getRawIdxIdentity},t.internalField=function(){function t(t,e,n,i){return If(t[i],this._dimensions[i])}Gf={arrayRows:t,objectRows:function(t,e,n,i){return If(t[e],this._dimensions[i])},keyedColumns:t,original:function(t,e,n,i){var r=t&&(null==t.value?t:t.value);return If(r instanceof Array?r[i]:r,this._dimensions[i])},typedArray:function(t,e,n,i){return t[i]}}}(),t}(),$f=function(){function t(t){this._sourceList=[],this._storeList=[],this._upstreamSignList=[],this._versionSignBase=0,this._dirty=!0,this._sourceHost=t}return t.prototype.dirty=function(){this._setLocalSource([],[]),this._storeList=[],this._dirty=!0},t.prototype._setLocalSource=function(t,e){this._sourceList=t,this._upstreamSignList=e,this._versionSignBase++,this._versionSignBase>9e10&&(this._versionSignBase=0)},t.prototype._getVersionSign=function(){return this._sourceHost.uid+"_"+this._versionSignBase},t.prototype.prepareSource=function(){this._isDirty()&&(this._createSource(),this._dirty=!1)},t.prototype._createSource=function(){this._setLocalSource([],[]);var t,e,n=this._sourceHost,i=this._getUpstreamSourceManagers(),r=!!i.length;if(Qf(n)){var o=n,a=void 0,s=void 0,l=void 0;if(r){var u=i[0];u.prepareSource(),a=(l=u.getSource()).data,s=l.sourceFormat,e=[u._getVersionSign()]}else s=$(a=o.get("data",!0))?Up:Wp,e=[];var h=this._getSourceMetaRawOption()||{},c=l&&l.metaRawOption||{},p=rt(h.seriesLayoutBy,c.seriesLayoutBy)||null,d=rt(h.sourceHeader,c.sourceHeader),f=rt(h.dimensions,c.dimensions);t=p!==c.seriesLayoutBy||!!d!=!!c.sourceHeader||f?[tf(a,{seriesLayoutBy:p,sourceHeader:d,dimensions:f},s)]:[]}else{var g=n;if(r){var y=this._applyTransform(i);t=y.sourceList,e=y.upstreamSignList}else{t=[tf(g.get("source",!0),this._getSourceMetaRawOption(),null)],e=[]}}this._setLocalSource(t,e)},t.prototype._applyTransform=function(t){var e,n=this._sourceHost,i=n.get("transform",!0),r=n.get("fromTransformResult",!0);if(null!=r){var o="";1!==t.length&&tg(o)}var a,s=[],l=[];return E(t,(function(t){t.prepareSource();var e=t.getSource(r||0),n="";null==r||e||tg(n),s.push(e),l.push(t._getVersionSign())})),i?e=function(t,e,n){var i=To(t),r=i.length,o="";r||wo(o);for(var a=0,s=r;a1||n>0&&!t.noHeader;return E(t.blocks,(function(t){var n=lg(t);n>=e&&(e=n+ +(i&&(!n||ag(t)&&!t.noHeader)))})),e}return 0}function ug(t,e,n,i){var r,o=e.noHeader,a=(r=lg(e),{html:ig[r],richText:rg[r]}),s=[],l=e.blocks||[];lt(!l||Y(l)),l=l||[];var u=t.orderMode;if(e.sortBlocks&&u){l=l.slice();var h={valueAsc:"asc",valueDesc:"desc"};if(_t(h,u)){var c=new kf(h[u],null);l.sort((function(t,e){return c.evaluate(t.sortParam,e.sortParam)}))}else"seriesDesc"===u&&l.reverse()}E(l,(function(n,r){var o=e.valueFormatter,l=sg(n)(o?A(A({},t),{valueFormatter:o}):t,n,r>0?a.html:0,i);null!=l&&s.push(l)}));var p="richText"===t.renderMode?s.join(a.richText):pg(s.join(""),o?n:a.html);if(o)return p;var d=mp(e.header,"ordinal",t.useUTC),f=ng(i,t.renderMode).nameStyle;return"richText"===t.renderMode?dg(t,d,f)+a.richText+p:pg('
                '+re(d)+"
                "+p,n)}function hg(t,e,n,i){var r=t.renderMode,o=e.noName,a=e.noValue,s=!e.markerType,l=e.name,u=t.useUTC,h=e.valueFormatter||t.valueFormatter||function(t){return z(t=Y(t)?t:[t],(function(t,e){return mp(t,Y(d)?d[e]:d,u)}))};if(!o||!a){var c=s?"":t.markupStyleCreator.makeTooltipMarker(e.markerType,e.markerColor||"#333",r),p=o?"":mp(l,"ordinal",u),d=e.valueType,f=a?[]:h(e.value,e.dataIndex),g=!s||!o,y=!s&&o,v=ng(i,r),m=v.nameStyle,x=v.valueStyle;return"richText"===r?(s?"":c)+(o?"":dg(t,p,m))+(a?"":function(t,e,n,i,r){var o=[r],a=i?10:20;return n&&o.push({padding:[0,0,0,a],align:"right"}),t.markupStyleCreator.wrapRichTextStyle(Y(e)?e.join(" "):e,o)}(t,f,g,y,x)):pg((s?"":c)+(o?"":function(t,e,n){return''+re(t)+""}(p,!s,m))+(a?"":function(t,e,n,i){var r=n?"10px":"20px",o=e?"float:right;margin-left:"+r:"";return t=Y(t)?t:[t],''+z(t,(function(t){return re(t)})).join("  ")+""}(f,g,y,x)),n)}}function cg(t,e,n,i,r,o){if(t)return sg(t)({useUTC:r,renderMode:n,orderMode:i,markupStyleCreator:e,valueFormatter:t.valueFormatter},t,0,o)}function pg(t,e){return'
                '+t+'
                '}function dg(t,e,n){return t.markupStyleCreator.wrapRichTextStyle(e,n)}function fg(t,e){return Sp(t.getData().getItemVisual(e,"style")[t.visualDrawType])}function gg(t,e){var n=t.get("padding");return null!=n?n:"richText"===e?[8,10]:10}var yg=function(){function t(){this.richTextStyles={},this._nextStyleNameId=mo()}return t.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},t.prototype.makeTooltipMarker=function(t,e,n){var i="richText"===n?this._generateStyleName():null,r=wp({color:e,type:t,renderMode:n,markerId:i});return U(r)?r:(this.richTextStyles[i]=r.style,r.content)},t.prototype.wrapRichTextStyle=function(t,e){var n={};Y(e)?E(e,(function(t){return A(n,t)})):A(n,e);var i=this._generateStyleName();return this.richTextStyles[i]=n,"{"+i+"|"+t+"}"},t}();function vg(t){var e,n,i,r,o=t.series,a=t.dataIndex,s=t.multipleSeries,l=o.getData(),u=l.mapDimensionsAll("defaultedTooltip"),h=u.length,c=o.getRawValue(a),p=Y(c),d=fg(o,a);if(h>1||p&&!h){var f=function(t,e,n,i,r){var o=e.getData(),a=V(t,(function(t,e,n){var i=o.getDimensionInfo(n);return t||i&&!1!==i.tooltip&&null!=i.displayName}),!1),s=[],l=[],u=[];function h(t,e){var n=o.getDimensionInfo(e);n&&!1!==n.otherDims.tooltip&&(a?u.push(og("nameValue",{markerType:"subItem",markerColor:r,name:n.displayName,value:t,valueType:n.type})):(s.push(t),l.push(n.type)))}return i.length?E(i,(function(t){h(mf(o,n,t),t)})):E(t,h),{inlineValues:s,inlineValueTypes:l,blocks:u}}(c,o,a,u,d);e=f.inlineValues,n=f.inlineValueTypes,i=f.blocks,r=f.inlineValues[0]}else if(h){var g=l.getDimensionInfo(u[0]);r=e=mf(l,a,u[0]),n=g.type}else r=e=p?c[0]:c;var y=No(o),v=y&&o.name||"",m=l.getName(a),x=s?v:m;return og("section",{header:v,noHeader:s||!y,sortParam:r,blocks:[og("nameValue",{markerType:"item",markerColor:d,name:x,noName:!ut(x),value:e,valueType:n,dataIndex:a})].concat(i||[])})}var mg=Vo();function xg(t,e){return t.getName(e)||t.getId(e)}var _g="__universalTransitionEnabled",bg=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._selectedDataIndicesMap={},e}return n(e,t),e.prototype.init=function(t,e,n){this.seriesIndex=this.componentIndex,this.dataTask=wf({count:Sg,reset:Mg}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(t,n),(mg(this).sourceManager=new $f(this)).prepareSource();var i=this.getInitialData(t,n);Tg(i,this),this.dataTask.context.data=i,mg(this).dataBeforeProcessed=i,wg(this),this._initSelectedMapFromData(i)},e.prototype.mergeDefaultAndTheme=function(t,e){var n=Pp(this),i=n?Rp(t):{},r=this.subType;zp.hasClass(r)&&(r+="Series"),C(t,e.getTheme().get(this.subType)),C(t,this.getDefaultOption()),Co(t,"label",["show"]),this.fillDataTextStyle(t.data),n&&Op(t,i,n)},e.prototype.mergeOption=function(t,e){t=C(this.option,t,!0),this.fillDataTextStyle(t.data);var n=Pp(this);n&&Op(this.option,t,n);var i=mg(this).sourceManager;i.dirty(),i.prepareSource();var r=this.getInitialData(t,e);Tg(r,this),this.dataTask.dirty(),this.dataTask.context.data=r,mg(this).dataBeforeProcessed=r,wg(this),this._initSelectedMapFromData(r)},e.prototype.fillDataTextStyle=function(t){if(t&&!$(t))for(var e=["show"],n=0;nthis.getShallow("animationThreshold")&&(e=!1),!!e},e.prototype.restoreData=function(){this.dataTask.dirty()},e.prototype.getColorFromPalette=function(t,e,n){var i=this.ecModel,r=cd.prototype.getColorFromPalette.call(this,t,e,n);return r||(r=i.getColorFromPalette(t,e,n)),r},e.prototype.coordDimToDataDim=function(t){return this.getRawData().mapDimensionsAll(t)},e.prototype.getProgressive=function(){return this.get("progressive")},e.prototype.getProgressiveThreshold=function(){return this.get("progressiveThreshold")},e.prototype.select=function(t,e){this._innerSelect(this.getData(e),t)},e.prototype.unselect=function(t,e){var n=this.option.selectedMap;if(n){var i=this.option.selectedMode,r=this.getData(e);if("series"===i||"all"===n)return this.option.selectedMap={},void(this._selectedDataIndicesMap={});for(var o=0;o=0&&n.push(r)}return n},e.prototype.isSelected=function(t,e){var n=this.option.selectedMap;if(!n)return!1;var i=this.getData(e);return("all"===n||n[xg(i,t)])&&!i.getItemModel(t).get(["select","disabled"])},e.prototype.isUniversalTransitionEnabled=function(){if(this[_g])return!0;var t=this.option.universalTransition;return!!t&&(!0===t||t&&t.enabled)},e.prototype._innerSelect=function(t,e){var n,i,r=this.option,o=r.selectedMode,a=e.length;if(o&&a)if("series"===o)r.selectedMap="all";else if("multiple"===o){q(r.selectedMap)||(r.selectedMap={});for(var s=r.selectedMap,l=0;l0&&this._innerSelect(t,e)}},e.registerClass=function(t){return zp.registerClass(t)},e.protoInitialize=function(){var t=e.prototype;t.type="series.__base__",t.seriesIndex=0,t.ignoreStyleOnData=!1,t.hasSymbolVisual=!1,t.defaultSymbol="circle",t.visualStyleAccessPath="itemStyle",t.visualDrawType="fill"}(),e}(zp);function wg(t){var e=t.name;No(t)||(t.name=function(t){var e=t.getRawData(),n=e.mapDimensionsAll("seriesName"),i=[];return E(n,(function(t){var n=e.getDimensionInfo(t);n.displayName&&i.push(n.displayName)})),i.join(" ")}(t)||e)}function Sg(t){return t.model.getRawData().count()}function Mg(t){var e=t.model;return e.setData(e.getRawData().cloneShallow()),Ig}function Ig(t,e){e.outputData&&t.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function Tg(t,e){E(vt(t.CHANGABLE_METHODS,t.DOWNSAMPLE_METHODS),(function(n){t.wrapMethod(n,H(Cg,e))}))}function Cg(t,e){var n=Dg(t);return n&&n.setOutputEnd((e||this).count()),e}function Dg(t){var e=(t.ecModel||{}).scheduler,n=e&&e.getPipeline(t.uid);if(n){var i=n.currentTask;if(i){var r=i.agentStubMap;r&&(i=r.get(t.uid))}return i}}R(bg,_f),R(bg,cd),Jo(bg,zp);var Ag=function(){function t(){this.group=new Br,this.uid=Ac("viewComponent")}return t.prototype.init=function(t,e){},t.prototype.render=function(t,e,n,i){},t.prototype.dispose=function(t,e){},t.prototype.updateView=function(t,e,n,i){},t.prototype.updateLayout=function(t,e,n,i){},t.prototype.updateVisual=function(t,e,n,i){},t.prototype.toggleBlurSeries=function(t,e,n){},t.prototype.eachRendered=function(t){var e=this.group;e&&e.traverse(t)},t}();function kg(){var t=Vo();return function(e){var n=t(e),i=e.pipelineContext,r=!!n.large,o=!!n.progressiveRender,a=n.large=!(!i||!i.large),s=n.progressiveRender=!(!i||!i.progressiveRender);return!(r===a&&o===s)&&"reset"}}$o(Ag),na(Ag);var Lg=Vo(),Pg=kg(),Og=function(){function t(){this.group=new Br,this.uid=Ac("viewChart"),this.renderTask=wf({plan:Eg,reset:zg}),this.renderTask.context={view:this}}return t.prototype.init=function(t,e){},t.prototype.render=function(t,e,n,i){0},t.prototype.highlight=function(t,e,n,i){var r=t.getData(i&&i.dataType);r&&Ng(r,i,"emphasis")},t.prototype.downplay=function(t,e,n,i){var r=t.getData(i&&i.dataType);r&&Ng(r,i,"normal")},t.prototype.remove=function(t,e){this.group.removeAll()},t.prototype.dispose=function(t,e){},t.prototype.updateView=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.updateLayout=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.updateVisual=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.eachRendered=function(t){Jh(this.group,t)},t.markUpdateMethod=function(t,e){Lg(t).updateMethod=e},t.protoInitialize=void(t.prototype.type="chart"),t}();function Rg(t,e,n){t&&Ql(t)&&("emphasis"===e?Ol:Rl)(t,n)}function Ng(t,e,n){var i=zo(t,e),r=e&&null!=e.highlightKey?function(t){var e=sl[t];return null==e&&al<=32&&(e=sl[t]=al++),e}(e.highlightKey):null;null!=i?E(To(i),(function(e){Rg(t.getItemGraphicEl(e),n,r)})):t.eachItemGraphicEl((function(t){Rg(t,n,r)}))}function Eg(t){return Pg(t.model)}function zg(t){var e=t.model,n=t.ecModel,i=t.api,r=t.payload,o=e.pipelineContext.progressiveRender,a=t.view,s=r&&Lg(r).updateMethod,l=o?"incrementalPrepareRender":s&&a[s]?s:"render";return"render"!==l&&a[l](e,n,i,r),Vg[l]}$o(Og),na(Og);var Vg={incrementalPrepareRender:{progress:function(t,e){e.view.incrementalRender(t,e.model,e.ecModel,e.api,e.payload)}},render:{forceFirstProgress:!0,progress:function(t,e){e.view.render(e.model,e.ecModel,e.api,e.payload)}}},Bg="\0__throttleOriginMethod",Fg="\0__throttleRate",Gg="\0__throttleType";function Wg(t,e,n){var i,r,o,a,s,l=0,u=0,h=null;function c(){u=(new Date).getTime(),h=null,t.apply(o,a||[])}e=e||0;var p=function(){for(var t=[],p=0;p=0?c():h=setTimeout(c,-r),l=i};return p.clear=function(){h&&(clearTimeout(h),h=null)},p.debounceNextCall=function(t){s=t},p}function Hg(t,e,n,i){var r=t[e];if(r){var o=r[Bg]||r,a=r[Gg];if(r[Fg]!==n||a!==i){if(null==n||!i)return t[e]=o;(r=t[e]=Wg(o,n,"debounce"===i))[Bg]=o,r[Gg]=i,r[Fg]=n}return r}}function Yg(t,e){var n=t[e];n&&n[Bg]&&(n.clear&&n.clear(),t[e]=n[Bg])}var Xg=Vo(),Ug={itemStyle:ia(Mc,!0),lineStyle:ia(bc,!0)},Zg={lineStyle:"stroke",itemStyle:"fill"};function jg(t,e){var n=t.visualStyleMapper||Ug[e];return n||(console.warn("Unknown style type '"+e+"'."),Ug.itemStyle)}function qg(t,e){var n=t.visualDrawType||Zg[e];return n||(console.warn("Unknown style type '"+e+"'."),"fill")}var Kg={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData(),i=t.visualStyleAccessPath||"itemStyle",r=t.getModel(i),o=jg(t,i)(r),a=r.getShallow("decal");a&&(n.setVisual("decal",a),a.dirty=!0);var s=qg(t,i),l=o[s],u=X(l)?l:null,h="auto"===o.fill||"auto"===o.stroke;if(!o[s]||u||h){var c=t.getColorFromPalette(t.name,null,e.getSeriesCount());o[s]||(o[s]=c,n.setVisual("colorFromPalette",!0)),o.fill="auto"===o.fill||X(o.fill)?c:o.fill,o.stroke="auto"===o.stroke||X(o.stroke)?c:o.stroke}if(n.setVisual("style",o),n.setVisual("drawType",s),!e.isSeriesFiltered(t)&&u)return n.setVisual("colorFromPalette",!1),{dataEach:function(e,n){var i=t.getDataParams(n),r=A({},o);r[s]=u(i),e.setItemVisual(n,"style",r)}}}},$g=new Cc,Jg={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){if(!t.ignoreStyleOnData&&!e.isSeriesFiltered(t)){var n=t.getData(),i=t.visualStyleAccessPath||"itemStyle",r=jg(t,i),o=n.getVisual("drawType");return{dataEach:n.hasItemOption?function(t,e){var n=t.getRawDataItem(e);if(n&&n[i]){$g.option=n[i];var a=r($g);A(t.ensureUniqueItemVisual(e,"style"),a),$g.option.decal&&(t.setItemVisual(e,"decal",$g.option.decal),$g.option.decal.dirty=!0),o in a&&t.setItemVisual(e,"colorFromPalette",!1)}}:null}}}},Qg={performRawSeries:!0,overallReset:function(t){var e=yt();t.eachSeries((function(t){var n=t.getColorBy();if(!t.isColorBySeries()){var i=t.type+"-"+n,r=e.get(i);r||(r={},e.set(i,r)),Xg(t).scope=r}})),t.eachSeries((function(e){if(!e.isColorBySeries()&&!t.isSeriesFiltered(e)){var n=e.getRawData(),i={},r=e.getData(),o=Xg(e).scope,a=e.visualStyleAccessPath||"itemStyle",s=qg(e,a);r.each((function(t){var e=r.getRawIndex(t);i[e]=t})),n.each((function(t){var a=i[t];if(r.getItemVisual(a,"colorFromPalette")){var l=r.ensureUniqueItemVisual(a,"style"),u=n.getName(t)||t+"",h=n.count();l[s]=e.getColorFromPalette(u,o,h)}}))}}))}},ty=Math.PI;var ey=function(){function t(t,e,n,i){this._stageTaskMap=yt(),this.ecInstance=t,this.api=e,n=this._dataProcessorHandlers=n.slice(),i=this._visualHandlers=i.slice(),this._allHandlers=n.concat(i)}return t.prototype.restoreData=function(t,e){t.restoreData(e),this._stageTaskMap.each((function(t){var e=t.overallTask;e&&e.dirty()}))},t.prototype.getPerformArgs=function(t,e){if(t.__pipeline){var n=this._pipelineMap.get(t.__pipeline.id),i=n.context,r=!e&&n.progressiveEnabled&&(!i||i.progressiveRender)&&t.__idxInPipeline>n.blockIndex?n.step:null,o=i&&i.modDataCount;return{step:r,modBy:null!=o?Math.ceil(o/r):null,modDataCount:o}}},t.prototype.getPipeline=function(t){return this._pipelineMap.get(t)},t.prototype.updateStreamModes=function(t,e){var n=this._pipelineMap.get(t.uid),i=t.getData().count(),r=n.progressiveEnabled&&e.incrementalPrepareRender&&i>=n.threshold,o=t.get("large")&&i>=t.get("largeThreshold"),a="mod"===t.get("progressiveChunkMode")?i:null;t.pipelineContext=n.context={progressiveRender:r,modDataCount:a,large:o}},t.prototype.restorePipelines=function(t){var e=this,n=e._pipelineMap=yt();t.eachSeries((function(t){var i=t.getProgressive(),r=t.uid;n.set(r,{id:r,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:i&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(i||700),count:0}),e._pipe(t,t.dataTask)}))},t.prototype.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.api.getModel(),n=this.api;E(this._allHandlers,(function(i){var r=t.get(i.uid)||t.set(i.uid,{}),o="";lt(!(i.reset&&i.overallReset),o),i.reset&&this._createSeriesStageTask(i,r,e,n),i.overallReset&&this._createOverallStageTask(i,r,e,n)}),this)},t.prototype.prepareView=function(t,e,n,i){var r=t.renderTask,o=r.context;o.model=e,o.ecModel=n,o.api=i,r.__block=!t.incrementalPrepareRender,this._pipe(e,r)},t.prototype.performDataProcessorTasks=function(t,e){this._performStageTasks(this._dataProcessorHandlers,t,e,{block:!0})},t.prototype.performVisualTasks=function(t,e,n){this._performStageTasks(this._visualHandlers,t,e,n)},t.prototype._performStageTasks=function(t,e,n,i){i=i||{};var r=!1,o=this;function a(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipeline.id))}E(t,(function(t,s){if(!i.visualType||i.visualType===t.visualType){var l=o._stageTaskMap.get(t.uid),u=l.seriesTaskMap,h=l.overallTask;if(h){var c,p=h.agentStubMap;p.each((function(t){a(i,t)&&(t.dirty(),c=!0)})),c&&h.dirty(),o.updatePayload(h,n);var d=o.getPerformArgs(h,i.block);p.each((function(t){t.perform(d)})),h.perform(d)&&(r=!0)}else u&&u.each((function(s,l){a(i,s)&&s.dirty();var u=o.getPerformArgs(s,i.block);u.skip=!t.performRawSeries&&e.isSeriesFiltered(s.context.model),o.updatePayload(s,n),s.perform(u)&&(r=!0)}))}})),this.unfinished=r||this.unfinished},t.prototype.performSeriesTasks=function(t){var e;t.eachSeries((function(t){e=t.dataTask.perform()||e})),this.unfinished=e||this.unfinished},t.prototype.plan=function(){this._pipelineMap.each((function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)}))},t.prototype.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)},t.prototype._createSeriesStageTask=function(t,e,n,i){var r=this,o=e.seriesTaskMap,a=e.seriesTaskMap=yt(),s=t.seriesType,l=t.getTargetSeries;function u(e){var s=e.uid,l=a.set(s,o&&o.get(s)||wf({plan:ay,reset:sy,count:hy}));l.context={model:e,ecModel:n,api:i,useClearVisual:t.isVisual&&!t.isLayout,plan:t.plan,reset:t.reset,scheduler:r},r._pipe(e,l)}t.createOnAllSeries?n.eachRawSeries(u):s?n.eachRawSeriesByType(s,u):l&&l(n,i).each(u)},t.prototype._createOverallStageTask=function(t,e,n,i){var r=this,o=e.overallTask=e.overallTask||wf({reset:ny});o.context={ecModel:n,api:i,overallReset:t.overallReset,scheduler:r};var a=o.agentStubMap,s=o.agentStubMap=yt(),l=t.seriesType,u=t.getTargetSeries,h=!0,c=!1,p="";function d(t){var e=t.uid,n=s.set(e,a&&a.get(e)||(c=!0,wf({reset:iy,onDirty:oy})));n.context={model:t,overallProgress:h},n.agent=o,n.__block=h,r._pipe(t,n)}lt(!t.createOnAllSeries,p),l?n.eachRawSeriesByType(l,d):u?u(n,i).each(d):(h=!1,E(n.getSeries(),d)),c&&o.dirty()},t.prototype._pipe=function(t,e){var n=t.uid,i=this._pipelineMap.get(n);!i.head&&(i.head=e),i.tail&&i.tail.pipe(e),i.tail=e,e.__idxInPipeline=i.count++,e.__pipeline=i},t.wrapStageHandler=function(t,e){return X(t)&&(t={overallReset:t,seriesType:cy(t)}),t.uid=Ac("stageHandler"),e&&(t.visualType=e),t},t}();function ny(t){t.overallReset(t.ecModel,t.api,t.payload)}function iy(t){return t.overallProgress&&ry}function ry(){this.agent.dirty(),this.getDownstream().dirty()}function oy(){this.agent&&this.agent.dirty()}function ay(t){return t.plan?t.plan(t.model,t.ecModel,t.api,t.payload):null}function sy(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=To(t.reset(t.model,t.ecModel,t.api,t.payload));return e.length>1?z(e,(function(t,e){return uy(e)})):ly}var ly=uy(0);function uy(t){return function(e,n){var i=n.data,r=n.resetDefines[t];if(r&&r.dataEach)for(var o=e.start;o0&&h===r.length-u.length){var c=r.slice(0,h);"data"!==c&&(e.mainType=c,e[u.toLowerCase()]=t,s=!0)}}a.hasOwnProperty(r)&&(n[r]=t,s=!0),s||(i[r]=t)}))}return{cptQuery:e,dataQuery:n,otherQuery:i}},t.prototype.filter=function(t,e){var n=this.eventInfo;if(!n)return!0;var i=n.targetEl,r=n.packedEvent,o=n.model,a=n.view;if(!o||!a)return!0;var s=e.cptQuery,l=e.dataQuery;return u(s,o,"mainType")&&u(s,o,"subType")&&u(s,o,"index","componentIndex")&&u(s,o,"name")&&u(s,o,"id")&&u(l,r,"name")&&u(l,r,"dataIndex")&&u(l,r,"dataType")&&(!a.filterForExposedEvent||a.filterForExposedEvent(t,e.otherQuery,i,r));function u(t,e,n,i){return null==t[n]||e[i||n]===t[n]}},t.prototype.afterTrigger=function(){this.eventInfo=null},t}(),My=["symbol","symbolSize","symbolRotate","symbolOffset"],Iy=My.concat(["symbolKeepAspect"]),Ty={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData();if(t.legendIcon&&n.setVisual("legendIcon",t.legendIcon),t.hasSymbolVisual){for(var i={},r={},o=!1,a=0;a=0&&jy(l)?l:.5,t.createRadialGradient(a,s,0,a,s,l)}(t,e,n):function(t,e,n){var i=null==e.x?0:e.x,r=null==e.x2?1:e.x2,o=null==e.y?0:e.y,a=null==e.y2?0:e.y2;return e.global||(i=i*n.width+n.x,r=r*n.width+n.x,o=o*n.height+n.y,a=a*n.height+n.y),i=jy(i)?i:0,r=jy(r)?r:1,o=jy(o)?o:0,a=jy(a)?a:0,t.createLinearGradient(i,o,r,a)}(t,e,n),r=e.colorStops,o=0;o0&&(e=i.lineDash,n=i.lineWidth,e&&"solid"!==e&&n>0?"dashed"===e?[4*n,2*n]:"dotted"===e?[n]:j(e)?[e]:Y(e)?e:null:null),o=i.lineDashOffset;if(r){var a=i.strokeNoScale&&t.getLineScale?t.getLineScale():1;a&&1!==a&&(r=z(r,(function(t){return t/a})),o/=a)}return[r,o]}var Qy=new hs(!0);function tv(t){var e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth>0))}function ev(t){return"string"==typeof t&&"none"!==t}function nv(t){var e=t.fill;return null!=e&&"none"!==e}function iv(t,e){if(null!=e.fillOpacity&&1!==e.fillOpacity){var n=t.globalAlpha;t.globalAlpha=e.fillOpacity*e.opacity,t.fill(),t.globalAlpha=n}else t.fill()}function rv(t,e){if(null!=e.strokeOpacity&&1!==e.strokeOpacity){var n=t.globalAlpha;t.globalAlpha=e.strokeOpacity*e.opacity,t.stroke(),t.globalAlpha=n}else t.stroke()}function ov(t,e,n){var i=la(e.image,e.__image,n);if(ha(i)){var r=t.createPattern(i,e.repeat||"repeat");if("function"==typeof DOMMatrix&&r&&r.setTransform){var o=new DOMMatrix;o.translateSelf(e.x||0,e.y||0),o.rotateSelf(0,0,(e.rotation||0)*wt),o.scaleSelf(e.scaleX||1,e.scaleY||1),r.setTransform(o)}return r}}var av=["shadowBlur","shadowOffsetX","shadowOffsetY"],sv=[["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]];function lv(t,e,n,i,r){var o=!1;if(!i&&e===(n=n||{}))return!1;if(i||e.opacity!==n.opacity){cv(t,r),o=!0;var a=Math.max(Math.min(e.opacity,1),0);t.globalAlpha=isNaN(a)?Ma.opacity:a}(i||e.blend!==n.blend)&&(o||(cv(t,r),o=!0),t.globalCompositeOperation=e.blend||Ma.blend);for(var s=0;s0&&t.unfinished);t.unfinished||this._zr.flush()}}},e.prototype.getDom=function(){return this._dom},e.prototype.getId=function(){return this.id},e.prototype.getZr=function(){return this._zr},e.prototype.isSSR=function(){return this._ssr},e.prototype.setOption=function(t,e,n){if(!this[Dv])if(this._disposed)om(this.id);else{var i,r,o;if(q(e)&&(n=e.lazyUpdate,i=e.silent,r=e.replaceMerge,o=e.transition,e=e.notMerge),this[Dv]=!0,!this._model||e){var a=new Md(this._api),s=this._theme,l=this._model=new gd;l.scheduler=this._scheduler,l.ssr=this._ssr,l.init(null,null,null,s,this._locale,a)}this._model.setOption(t,{replaceMerge:r},um);var u={seriesTransition:o,optionChanged:!0};if(n)this[Av]={silent:i,updateParams:u},this[Dv]=!1,this.getZr().wakeUp();else{try{Ev(this),Bv.update.call(this,null,u)}catch(t){throw this[Av]=null,this[Dv]=!1,t}this._ssr||this._zr.flush(),this[Av]=null,this[Dv]=!1,Hv.call(this,i),Yv.call(this,i)}}},e.prototype.setTheme=function(){bo()},e.prototype.getModel=function(){return this._model},e.prototype.getOption=function(){return this._model&&this._model.getOption()},e.prototype.getWidth=function(){return this._zr.getWidth()},e.prototype.getHeight=function(){return this._zr.getHeight()},e.prototype.getDevicePixelRatio=function(){return this._zr.painter.dpr||r.hasGlobalWindow&&window.devicePixelRatio||1},e.prototype.getRenderedCanvas=function(t){return this.renderToCanvas(t)},e.prototype.renderToCanvas=function(t){t=t||{};var e=this._zr.painter;return e.getRenderedCanvas({backgroundColor:t.backgroundColor||this._model.get("backgroundColor"),pixelRatio:t.pixelRatio||this.getDevicePixelRatio()})},e.prototype.renderToSVGString=function(t){t=t||{};var e=this._zr.painter;return e.renderToString({useViewBox:t.useViewBox})},e.prototype.getSvgDataURL=function(){if(r.svgSupported){var t=this._zr;return E(t.storage.getDisplayList(),(function(t){t.stopAnimation(null,!0)})),t.painter.toDataURL()}},e.prototype.getDataURL=function(t){if(!this._disposed){var e=(t=t||{}).excludeComponents,n=this._model,i=[],r=this;E(e,(function(t){n.eachComponent({mainType:t},(function(t){var e=r._componentsMap[t.__viewId];e.group.ignore||(i.push(e),e.group.ignore=!0)}))}));var o="svg"===this._zr.painter.getType()?this.getSvgDataURL():this.renderToCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return E(i,(function(t){t.group.ignore=!1})),o}om(this.id)},e.prototype.getConnectedDataURL=function(t){if(!this._disposed){var e="svg"===t.type,n=this.group,i=Math.min,r=Math.max,o=1/0;if(fm[n]){var a=o,s=o,l=-1/0,u=-1/0,c=[],p=t&&t.pixelRatio||this.getDevicePixelRatio();E(dm,(function(o,h){if(o.group===n){var p=e?o.getZr().painter.getSvgDom().innerHTML:o.renderToCanvas(T(t)),d=o.getDom().getBoundingClientRect();a=i(d.left,a),s=i(d.top,s),l=r(d.right,l),u=r(d.bottom,u),c.push({dom:p,left:d.left,top:d.top})}}));var d=(l*=p)-(a*=p),f=(u*=p)-(s*=p),g=h.createCanvas(),y=Yr(g,{renderer:e?"svg":"canvas"});if(y.resize({width:d,height:f}),e){var v="";return E(c,(function(t){var e=t.left-a,n=t.top-s;v+=''+t.dom+""})),y.painter.getSvgRoot().innerHTML=v,t.connectedBackgroundColor&&y.painter.setBackgroundColor(t.connectedBackgroundColor),y.refreshImmediately(),y.painter.toDataURL()}return t.connectedBackgroundColor&&y.add(new Ws({shape:{x:0,y:0,width:d,height:f},style:{fill:t.connectedBackgroundColor}})),E(c,(function(t){var e=new Ns({style:{x:t.left*p-a,y:t.top*p-s,image:t.dom}});y.add(e)})),y.refreshImmediately(),g.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}om(this.id)},e.prototype.convertToPixel=function(t,e){return Fv(this,"convertToPixel",t,e)},e.prototype.convertFromPixel=function(t,e){return Fv(this,"convertFromPixel",t,e)},e.prototype.containPixel=function(t,e){var n;if(!this._disposed)return E(Fo(this._model,t),(function(t,i){i.indexOf("Models")>=0&&E(t,(function(t){var r=t.coordinateSystem;if(r&&r.containPoint)n=n||!!r.containPoint(e);else if("seriesModels"===i){var o=this._chartsMap[t.__viewId];o&&o.containPoint&&(n=n||o.containPoint(e,t))}else 0}),this)}),this),!!n;om(this.id)},e.prototype.getVisual=function(t,e){var n=Fo(this._model,t,{defaultMainType:"series"}),i=n.seriesModel;var r=i.getData(),o=n.hasOwnProperty("dataIndexInside")?n.dataIndexInside:n.hasOwnProperty("dataIndex")?r.indexOfRawIndex(n.dataIndex):null;return null!=o?Dy(r,o,e):Ay(r,e)},e.prototype.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},e.prototype.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]},e.prototype._initEvents=function(){var t,e,n,i=this;E(rm,(function(t){var e=function(e){var n,r=i.getModel(),o=e.target,a="globalout"===t;if(a?n={}:o&&Oy(o,(function(t){var e=rl(t);if(e&&null!=e.dataIndex){var i=e.dataModel||r.getSeriesByIndex(e.seriesIndex);return n=i&&i.getDataParams(e.dataIndex,e.dataType,o)||{},!0}if(e.eventData)return n=A({},e.eventData),!0}),!0),n){var s=n.componentType,l=n.componentIndex;"markLine"!==s&&"markPoint"!==s&&"markArea"!==s||(s="series",l=n.seriesIndex);var u=s&&null!=l&&r.getComponent(s,l),h=u&&i["series"===u.mainType?"_chartsMap":"_componentsMap"][u.__viewId];0,n.event=e,n.type=t,i._$eventProcessor.eventInfo={targetEl:o,packedEvent:n,model:u,view:h},i.trigger(t,n)}};e.zrEventfulCallAtLast=!0,i._zr.on(t,e,i)})),E(sm,(function(t,e){i._messageCenter.on(e,(function(t){this.trigger(e,t)}),i)})),E(["selectchanged"],(function(t){i._messageCenter.on(t,(function(e){this.trigger(t,e)}),i)})),t=this._messageCenter,e=this,n=this._api,t.on("selectchanged",(function(t){var i=n.getModel();t.isFromClick?(Py("map","selectchanged",e,i,t),Py("pie","selectchanged",e,i,t)):"select"===t.fromAction?(Py("map","selected",e,i,t),Py("pie","selected",e,i,t)):"unselect"===t.fromAction&&(Py("map","unselected",e,i,t),Py("pie","unselected",e,i,t))}))},e.prototype.isDisposed=function(){return this._disposed},e.prototype.clear=function(){this._disposed?om(this.id):this.setOption({series:[]},!0)},e.prototype.dispose=function(){if(this._disposed)om(this.id);else{this._disposed=!0,this.getDom()&&Xo(this.getDom(),vm,"");var t=this,e=t._api,n=t._model;E(t._componentsViews,(function(t){t.dispose(n,e)})),E(t._chartsViews,(function(t){t.dispose(n,e)})),t._zr.dispose(),t._dom=t._model=t._chartsMap=t._componentsMap=t._chartsViews=t._componentsViews=t._scheduler=t._api=t._zr=t._throttledZrFlush=t._theme=t._coordSysMgr=t._messageCenter=null,delete dm[t.id]}},e.prototype.resize=function(t){if(!this[Dv])if(this._disposed)om(this.id);else{this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var n=e.resetOption("media"),i=t&&t.silent;this[Av]&&(null==i&&(i=this[Av].silent),n=!0,this[Av]=null),this[Dv]=!0;try{n&&Ev(this),Bv.update.call(this,{type:"resize",animation:A({duration:0},t&&t.animation)})}catch(t){throw this[Dv]=!1,t}this[Dv]=!1,Hv.call(this,i),Yv.call(this,i)}}},e.prototype.showLoading=function(t,e){if(this._disposed)om(this.id);else if(q(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),pm[t]){var n=pm[t](this._api,e),i=this._zr;this._loadingFX=n,i.add(n)}},e.prototype.hideLoading=function(){this._disposed?om(this.id):(this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null)},e.prototype.makeActionFromEvent=function(t){var e=A({},t);return e.type=sm[t.type],e},e.prototype.dispatchAction=function(t,e){if(this._disposed)om(this.id);else if(q(e)||(e={silent:!!e}),am[t.type]&&this._model)if(this[Dv])this._pendingActions.push(t);else{var n=e.silent;Wv.call(this,t,n);var i=e.flush;i?this._zr.flush():!1!==i&&r.browser.weChat&&this._throttledZrFlush(),Hv.call(this,n),Yv.call(this,n)}},e.prototype.updateLabelLayout=function(){wv.trigger("series:layoutlabels",this._model,this._api,{updatedSeries:[]})},e.prototype.appendData=function(t){if(this._disposed)om(this.id);else{var e=t.seriesIndex,n=this.getModel().getSeriesByIndex(e);0,n.appendData(t),this._scheduler.unfinished=!0,this.getZr().wakeUp()}},e.internalField=function(){function t(t){t.clearColorPalette(),t.eachSeries((function(t){t.clearColorPalette()}))}function e(t){for(var e=[],n=t.currentStates,i=0;i0?{duration:o,delay:i.get("delay"),easing:i.get("easing")}:null;n.eachRendered((function(t){if(t.states&&t.states.emphasis){if(xh(t))return;if(t instanceof ks&&function(t){var e=ll(t);e.normalFill=t.style.fill,e.normalStroke=t.style.stroke;var n=t.states.select||{};e.selectFill=n.style&&n.style.fill||null,e.selectStroke=n.style&&n.style.stroke||null}(t),t.__dirty){var n=t.prevStates;n&&t.useStates(n)}if(r){t.stateTransition=a;var i=t.getTextContent(),o=t.getTextGuideLine();i&&(i.stateTransition=a),o&&(o.stateTransition=a)}t.__dirty&&e(t)}}))}Ev=function(t){var e=t._scheduler;e.restorePipelines(t._model),e.prepareStageTasks(),zv(t,!0),zv(t,!1),e.plan()},zv=function(t,e){for(var n=t._model,i=t._scheduler,r=e?t._componentsViews:t._chartsViews,o=e?t._componentsMap:t._chartsMap,a=t._zr,s=t._api,l=0;le.get("hoverLayerThreshold")&&!r.node&&!r.worker&&e.eachSeries((function(e){if(!e.preventUsingHoverLayer){var n=t._chartsMap[e.__viewId];n.__alive&&n.eachRendered((function(t){t.states.emphasis&&(t.states.emphasis.hoverLayer=!0)}))}}))}(t,e),wv.trigger("series:afterupdate",e,n,l)},Jv=function(t){t[kv]=!0,t.getZr().wakeUp()},Qv=function(t){t[kv]&&(t.getZr().storage.traverse((function(t){xh(t)||e(t)})),t[kv]=!1)},Kv=function(t){return new(function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return n(i,e),i.prototype.getCoordinateSystems=function(){return t._coordSysMgr.getCoordinateSystems()},i.prototype.getComponentByElement=function(e){for(;e;){var n=e.__ecComponentInfo;if(null!=n)return t._model.getComponent(n.mainType,n.index);e=e.parent}},i.prototype.enterEmphasis=function(e,n){Ol(e,n),Jv(t)},i.prototype.leaveEmphasis=function(e,n){Rl(e,n),Jv(t)},i.prototype.enterBlur=function(e){Nl(e),Jv(t)},i.prototype.leaveBlur=function(e){El(e),Jv(t)},i.prototype.enterSelect=function(e){zl(e),Jv(t)},i.prototype.leaveSelect=function(e){Vl(e),Jv(t)},i.prototype.getModel=function(){return t.getModel()},i.prototype.getViewOfComponentModel=function(e){return t.getViewOfComponentModel(e)},i.prototype.getViewOfSeriesModel=function(e){return t.getViewOfSeriesModel(e)},i}(_d))(t)},$v=function(t){function e(t,e){for(var n=0;n=0)){Lm.push(n);var o=ey.wrapStageHandler(n,r);o.__prio=e,o.__raw=n,t.push(o)}}function Om(t,e){pm[t]=e}function Rm(t,e,n){var i=Mv("registerMap");i&&i(t,e,n)}var Nm=function(t){var e=(t=T(t)).type,n="";e||wo(n);var i=e.split(":");2!==i.length&&wo(n);var r=!1;"echarts"===i[0]&&(e=i[1],r=!0),t.__isBuiltIn=r,Vf.set(e,t)};km(Iv,Kg),km(Tv,Jg),km(Tv,Qg),km(Iv,Ty),km(Tv,Cy),km(7e3,(function(t,e){t.eachRawSeries((function(n){if(!t.isSeriesFiltered(n)){var i=n.getData();i.hasItemVisual()&&i.each((function(t){var n=i.getItemVisual(t,"decal");n&&(i.ensureUniqueItemVisual(t,"style").decal=mv(n,e))}));var r=i.getVisual("decal");if(r)i.getVisual("style").decal=mv(r,e)}}))})),wm(Xd),Sm(900,(function(t){var e=yt();t.eachSeries((function(t){var n=t.get("stack");if(n){var i=e.get(n)||e.set(n,[]),r=t.getData(),o={stackResultDimension:r.getCalculationInfo("stackResultDimension"),stackedOverDimension:r.getCalculationInfo("stackedOverDimension"),stackedDimension:r.getCalculationInfo("stackedDimension"),stackedByDimension:r.getCalculationInfo("stackedByDimension"),isStackedByIndex:r.getCalculationInfo("isStackedByIndex"),data:r,seriesModel:t};if(!o.stackedDimension||!o.isStackedByIndex&&!o.stackedByDimension)return;i.length&&r.setCalculationInfo("stackedOnSeries",i[i.length-1].seriesModel),i.push(o)}})),e.each(Ud)})),Om("default",(function(t,e){k(e=e||{},{text:"loading",textColor:"#000",fontSize:12,fontWeight:"normal",fontStyle:"normal",fontFamily:"sans-serif",maskColor:"rgba(255, 255, 255, 0.8)",showSpinner:!0,color:"#5470c6",spinnerRadius:10,lineWidth:5,zlevel:0});var n=new Br,i=new Ws({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4});n.add(i);var r,o=new Xs({style:{text:e.text,fill:e.textColor,fontSize:e.fontSize,fontWeight:e.fontWeight,fontStyle:e.fontStyle,fontFamily:e.fontFamily},zlevel:e.zlevel,z:10001}),a=new Ws({style:{fill:"none"},textContent:o,textConfig:{position:"right",distance:10},zlevel:e.zlevel,z:10001});return n.add(a),e.showSpinner&&((r=new nh({shape:{startAngle:-ty/2,endAngle:-ty/2+.1,r:e.spinnerRadius},style:{stroke:e.color,lineCap:"round",lineWidth:e.lineWidth},zlevel:e.zlevel,z:10001})).animateShape(!0).when(1e3,{endAngle:3*ty/2}).start("circularInOut"),r.animateShape(!0).when(1e3,{startAngle:3*ty/2}).delay(300).start("circularInOut"),n.add(r)),n.resize=function(){var n=o.getBoundingRect().width,s=e.showSpinner?e.spinnerRadius:0,l=(t.getWidth()-2*s-(e.showSpinner&&n?10:0)-n)/2-(e.showSpinner&&n?0:5+n/2)+(e.showSpinner?0:n/2)+(n?0:s),u=t.getHeight()/2;e.showSpinner&&r.setShape({cx:l,cy:u}),a.setShape({x:l-s,y:u-s,width:2*s,height:2*s}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},n.resize(),n})),Cm({type:dl,event:dl,update:dl},bt),Cm({type:fl,event:fl,update:fl},bt),Cm({type:gl,event:gl,update:gl},bt),Cm({type:yl,event:yl,update:yl},bt),Cm({type:vl,event:vl,update:vl},bt),bm("light",vy),bm("dark",wy);var Em=[],zm={registerPreprocessor:wm,registerProcessor:Sm,registerPostInit:Mm,registerPostUpdate:Im,registerUpdateLifecycle:Tm,registerAction:Cm,registerCoordinateSystem:Dm,registerLayout:Am,registerVisual:km,registerTransform:Nm,registerLoading:Om,registerMap:Rm,registerImpl:function(t,e){Sv[t]=e},PRIORITY:Cv,ComponentModel:zp,ComponentView:Ag,SeriesModel:bg,ChartView:Og,registerComponentModel:function(t){zp.registerClass(t)},registerComponentView:function(t){Ag.registerClass(t)},registerSeriesModel:function(t){bg.registerClass(t)},registerChartView:function(t){Og.registerClass(t)},registerSubTypeDefaulter:function(t,e){zp.registerSubTypeDefaulter(t,e)},registerPainter:function(t,e){Xr(t,e)}};function Vm(t){Y(t)?E(t,(function(t){Vm(t)})):P(Em,t)>=0||(Em.push(t),X(t)&&(t={install:t}),t.install(zm))}function Bm(t){return null==t?0:t.length||1}function Fm(t){return t}var Gm=function(){function t(t,e,n,i,r,o){this._old=t,this._new=e,this._oldKeyGetter=n||Fm,this._newKeyGetter=i||Fm,this.context=r,this._diffModeMultiple="multiple"===o}return t.prototype.add=function(t){return this._add=t,this},t.prototype.update=function(t){return this._update=t,this},t.prototype.updateManyToOne=function(t){return this._updateManyToOne=t,this},t.prototype.updateOneToMany=function(t){return this._updateOneToMany=t,this},t.prototype.updateManyToMany=function(t){return this._updateManyToMany=t,this},t.prototype.remove=function(t){return this._remove=t,this},t.prototype.execute=function(){this[this._diffModeMultiple?"_executeMultiple":"_executeOneToOne"]()},t.prototype._executeOneToOne=function(){var t=this._old,e=this._new,n={},i=new Array(t.length),r=new Array(e.length);this._initIndexMap(t,null,i,"_oldKeyGetter"),this._initIndexMap(e,n,r,"_newKeyGetter");for(var o=0;o1){var u=s.shift();1===s.length&&(n[a]=s[0]),this._update&&this._update(u,o)}else 1===l?(n[a]=null,this._update&&this._update(s,o)):this._remove&&this._remove(o)}this._performRestAdd(r,n)},t.prototype._executeMultiple=function(){var t=this._old,e=this._new,n={},i={},r=[],o=[];this._initIndexMap(t,n,r,"_oldKeyGetter"),this._initIndexMap(e,i,o,"_newKeyGetter");for(var a=0;a1&&1===c)this._updateManyToOne&&this._updateManyToOne(u,l),i[s]=null;else if(1===h&&c>1)this._updateOneToMany&&this._updateOneToMany(u,l),i[s]=null;else if(1===h&&1===c)this._update&&this._update(u,l),i[s]=null;else if(h>1&&c>1)this._updateManyToMany&&this._updateManyToMany(u,l),i[s]=null;else if(h>1)for(var p=0;p1)for(var a=0;a30}var Qm,tx,ex,nx,ix,rx,ox,ax=q,sx=z,lx="undefined"==typeof Int32Array?Array:Int32Array,ux=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_dimSummary","userOutput","_rawData","_dimValueGetter","_nameDimIdx","_idDimIdx","_nameRepeatCount"],hx=["_approximateExtent"],cx=function(){function t(t,e){var n;this.type="list",this._dimOmitted=!1,this._nameList=[],this._idList=[],this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._approximateExtent={},this._calculationInfo={},this.hasItemOption=!1,this.TRANSFERABLE_METHODS=["cloneShallow","downSample","lttbDownSample","map"],this.CHANGABLE_METHODS=["filterSelf","selectRange"],this.DOWNSAMPLE_METHODS=["downSample","lttbDownSample"];var i=!1;qm(t)?(n=t.dimensions,this._dimOmitted=t.isDimensionOmitted(),this._schema=t):(i=!0,n=t),n=n||["x","y"];for(var r={},o=[],a={},s=!1,l={},u=0;u=e)){var n=this._store.getProvider();this._updateOrdinalMeta();var i=this._nameList,r=this._idList;if(n.getSource().sourceFormat===Wp&&!n.pure)for(var o=[],a=t;a0},t.prototype.ensureUniqueItemVisual=function(t,e){var n=this._itemVisuals,i=n[t];i||(i=n[t]={});var r=i[e];return null==r&&(Y(r=this.getVisual(e))?r=r.slice():ax(r)&&(r=A({},r)),i[e]=r),r},t.prototype.setItemVisual=function(t,e,n){var i=this._itemVisuals[t]||{};this._itemVisuals[t]=i,ax(e)?A(i,e):i[e]=n},t.prototype.clearAllVisual=function(){this._visual={},this._itemVisuals=[]},t.prototype.setLayout=function(t,e){ax(t)?A(this._layout,t):this._layout[t]=e},t.prototype.getLayout=function(t){return this._layout[t]},t.prototype.getItemLayout=function(t){return this._itemLayouts[t]},t.prototype.setItemLayout=function(t,e,n){this._itemLayouts[t]=n?A(this._itemLayouts[t]||{},e):e},t.prototype.clearItemLayouts=function(){this._itemLayouts.length=0},t.prototype.setItemGraphicEl=function(t,e){var n=this.hostModel&&this.hostModel.seriesIndex;ol(n,this.dataType,t,e),this._graphicEls[t]=e},t.prototype.getItemGraphicEl=function(t){return this._graphicEls[t]},t.prototype.eachItemGraphicEl=function(t,e){E(this._graphicEls,(function(n,i){n&&t&&t.call(e,n,i)}))},t.prototype.cloneShallow=function(e){return e||(e=new t(this._schema?this._schema:sx(this.dimensions,this._getDimInfo,this),this.hostModel)),ix(e,this),e._store=this._store,e},t.prototype.wrapMethod=function(t,e){var n=this[t];X(n)&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=n.apply(this,arguments);return e.apply(this,[t].concat(at(arguments)))})},t.internalField=(Qm=function(t){var e=t._invertedIndicesMap;E(e,(function(n,i){var r=t._dimInfos[i],o=r.ordinalMeta,a=t._store;if(o){n=e[i]=new lx(o.categories.length);for(var s=0;s1&&(s+="__ec__"+u),i[e]=s}})),t}();function px(t,e){Qd(t)||(t=ef(t));var n=(e=e||{}).coordDimensions||[],i=e.dimensionsDefine||t.dimensionsDefine||[],r=yt(),o=[],a=function(t,e,n,i){var r=Math.max(t.dimensionsDetectedCount||1,e.length,n.length,i||0);return E(e,(function(t){var e;q(t)&&(e=t.dimsDef)&&(r=Math.max(r,e.length))})),r}(t,n,i,e.dimensionsCount),s=e.canOmitUnusedDimensions&&Jm(a),l=i===t.dimensionsDefine,u=l?$m(t):Km(i),h=e.encodeDefine;!h&&e.encodeDefaulter&&(h=e.encodeDefaulter(t,a));for(var c=yt(h),p=new Xf(a),d=0;d0&&(i.name=r+(o-1)),o++,e.set(r,o)}}(o),new jm({source:t,dimensions:o,fullDimensionCount:a,dimensionOmitted:s})}function dx(t,e,n){if(n||e.hasKey(t)){for(var i=0;e.hasKey(t+i);)i++;t+=i}return e.set(t,!0),t}var fx=function(t){this.coordSysDims=[],this.axisMap=yt(),this.categoryAxisMap=yt(),this.coordSysName=t};var gx={cartesian2d:function(t,e,n,i){var r=t.getReferringComponents("xAxis",Wo).models[0],o=t.getReferringComponents("yAxis",Wo).models[0];e.coordSysDims=["x","y"],n.set("x",r),n.set("y",o),yx(r)&&(i.set("x",r),e.firstCategoryDimIndex=0),yx(o)&&(i.set("y",o),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=1))},singleAxis:function(t,e,n,i){var r=t.getReferringComponents("singleAxis",Wo).models[0];e.coordSysDims=["single"],n.set("single",r),yx(r)&&(i.set("single",r),e.firstCategoryDimIndex=0)},polar:function(t,e,n,i){var r=t.getReferringComponents("polar",Wo).models[0],o=r.findAxisModel("radiusAxis"),a=r.findAxisModel("angleAxis");e.coordSysDims=["radius","angle"],n.set("radius",o),n.set("angle",a),yx(o)&&(i.set("radius",o),e.firstCategoryDimIndex=0),yx(a)&&(i.set("angle",a),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=1))},geo:function(t,e,n,i){e.coordSysDims=["lng","lat"]},parallel:function(t,e,n,i){var r=t.ecModel,o=r.getComponent("parallel",t.get("parallelIndex")),a=e.coordSysDims=o.dimensions.slice();E(o.parallelAxisIndex,(function(t,o){var s=r.getComponent("parallelAxis",t),l=a[o];n.set(l,s),yx(s)&&(i.set(l,s),null==e.firstCategoryDimIndex&&(e.firstCategoryDimIndex=o))}))}};function yx(t){return"category"===t.get("type")}function vx(t,e,n){var i,r,o,a=(n=n||{}).byIndex,s=n.stackedCoordDimension;!function(t){return!qm(t.schema)}(e)?(r=e.schema,i=r.dimensions,o=e.store):i=e;var l,u,h,c,p=!(!t||!t.get("stack"));if(E(i,(function(t,e){U(t)&&(i[e]=t={name:t}),p&&!t.isExtraCoord&&(a||l||!t.ordinalMeta||(l=t),u||"ordinal"===t.type||"time"===t.type||s&&s!==t.coordDim||(u=t))})),!u||a||l||(a=!0),u){h="__\0ecstackresult_"+t.id,c="__\0ecstackedover_"+t.id,l&&(l.createInvertedIndices=!0);var d=u.coordDim,f=u.type,g=0;E(i,(function(t){t.coordDim===d&&g++}));var y={name:h,coordDim:d,coordDimIndex:g,type:f,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:i.length},v={name:c,coordDim:c,coordDimIndex:g+1,type:f,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:i.length+1};r?(o&&(y.storeDimIndex=o.ensureCalculationDimension(c,f),v.storeDimIndex=o.ensureCalculationDimension(h,f)),r.appendCalculationDimension(y),r.appendCalculationDimension(v)):(i.push(y),i.push(v))}return{stackedDimension:u&&u.name,stackedByDimension:l&&l.name,isStackedByIndex:a,stackedOverDimension:c,stackResultDimension:h}}function mx(t,e){return!!e&&e===t.getCalculationInfo("stackedDimension")}function xx(t,e){return mx(t,e)?t.getCalculationInfo("stackResultDimension"):e}function _x(t,e,n){n=n||{};var i,r=e.getSourceManager(),o=!1;t?(o=!0,i=ef(t)):o=(i=r.getSource()).sourceFormat===Wp;var a=function(t){var e=t.get("coordinateSystem"),n=new fx(e),i=gx[e];if(i)return i(t,n,n.axisMap,n.categoryAxisMap),n}(e),s=function(t,e){var n,i=t.get("coordinateSystem"),r=wd.get(i);return e&&e.coordSysDims&&(n=z(e.coordSysDims,(function(t){var n={name:t},i=e.axisMap.get(t);if(i){var r=i.get("type");n.type=Ym(r)}return n}))),n||(n=r&&(r.getDimensionsInfo?r.getDimensionsInfo():r.dimensions.slice())||["x","y"]),n}(e,a),l=n.useEncodeDefaulter,u=X(l)?l:l?H(td,s,e):null,h=px(i,{coordDimensions:s,generateCoord:n.generateCoord,encodeDefine:e.getEncode(),encodeDefaulter:u,canOmitUnusedDimensions:!o}),c=function(t,e,n){var i,r;return n&&E(t,(function(t,o){var a=t.coordDim,s=n.categoryAxisMap.get(a);s&&(null==i&&(i=o),t.ordinalMeta=s.getOrdinalMeta(),e&&(t.createInvertedIndices=!0)),null!=t.otherDims.itemName&&(r=!0)})),r||null==i||(t[i].otherDims.itemName=0),i}(h.dimensions,n.createInvertedIndices,a),p=o?null:r.getSharedDataStore(h),d=vx(e,{schema:h,store:p}),f=new cx(h,e);f.setCalculationInfo(d);var g=null!=c&&function(t){if(t.sourceFormat===Wp){var e=function(t){var e=0;for(;ee[1]&&(e[1]=t[1])},t.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},t.prototype.getExtent=function(){return this._extent.slice()},t.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=t),isNaN(e)||(n[1]=e)},t.prototype.isInExtentRange=function(t){return this._extent[0]<=t&&this._extent[1]>=t},t.prototype.isBlank=function(){return this._isBlank},t.prototype.setBlank=function(t){this._isBlank=t},t}();na(bx);var Sx=0,Mx=function(){function t(t){this.categories=t.categories||[],this._needCollect=t.needCollect,this._deduplication=t.deduplication,this.uid=++Sx}return t.createByAxisModel=function(e){var n=e.option,i=n.data,r=i&&z(i,Ix);return new t({categories:r,needCollect:!r,deduplication:!1!==n.dedplication})},t.prototype.getOrdinal=function(t){return this._getOrCreateMap().get(t)},t.prototype.parseAndCollect=function(t){var e,n=this._needCollect;if(!U(t)&&!n)return t;if(n&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var i=this._getOrCreateMap();return null==(e=i.get(t))&&(n?(e=this.categories.length,this.categories[e]=t,i.set(t,e)):e=NaN),e},t.prototype._getOrCreateMap=function(){return this._map||(this._map=yt(this.categories))},t}();function Ix(t){return q(t)&&null!=t.value?t.value:t+""}function Tx(t){return"interval"===t.type||"log"===t.type}function Cx(t,e,n,i){var r={},o=t[1]-t[0],a=r.interval=po(o/e,!0);null!=n&&ai&&(a=r.interval=i);var s=r.intervalPrecision=Ax(a);return function(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),kx(t,0,e),kx(t,1,e),t[0]>t[1]&&(t[0]=t[1])}(r.niceTickExtent=[Jr(Math.ceil(t[0]/a)*a,s),Jr(Math.floor(t[1]/a)*a,s)],t),r}function Dx(t){var e=Math.pow(10,co(t)),n=t/e;return n?2===n?n=3:3===n?n=5:n*=2:n=1,Jr(n*e)}function Ax(t){return to(t)+2}function kx(t,e,n){t[e]=Math.max(Math.min(t[e],n[1]),n[0])}function Lx(t,e){return t>=e[0]&&t<=e[1]}function Px(t,e){return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])}function Ox(t,e){return t*(e[1]-e[0])+e[0]}var Rx=function(t){function e(e){var n=t.call(this,e)||this;n.type="ordinal";var i=n.getSetting("ordinalMeta");return i||(i=new Mx({})),Y(i)&&(i=new Mx({categories:z(i,(function(t){return q(t)?t.value:t}))})),n._ordinalMeta=i,n._extent=n.getSetting("extent")||[0,i.categories.length-1],n}return n(e,t),e.prototype.parse=function(t){return null==t?NaN:U(t)?this._ordinalMeta.getOrdinal(t):Math.round(t)},e.prototype.contain=function(t){return Lx(t=this.parse(t),this._extent)&&null!=this._ordinalMeta.categories[t]},e.prototype.normalize=function(t){return Px(t=this._getTickNumber(this.parse(t)),this._extent)},e.prototype.scale=function(t){return t=Math.round(Ox(t,this._extent)),this.getRawOrdinalNumber(t)},e.prototype.getTicks=function(){for(var t=[],e=this._extent,n=e[0];n<=e[1];)t.push({value:n}),n++;return t},e.prototype.getMinorTicks=function(t){},e.prototype.setSortInfo=function(t){if(null!=t){for(var e=t.ordinalNumbers,n=this._ordinalNumbersByTick=[],i=this._ticksByOrdinalNumber=[],r=0,o=this._ordinalMeta.categories.length,a=Math.min(o,e.length);r=0&&t=0&&t=t},e.prototype.getOrdinalMeta=function(){return this._ordinalMeta},e.prototype.calcNiceTicks=function(){},e.prototype.calcNiceExtent=function(){},e.type="ordinal",e}(bx);bx.registerClass(Rx);var Nx=Jr,Ex=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="interval",e._interval=0,e._intervalPrecision=2,e}return n(e,t),e.prototype.parse=function(t){return t},e.prototype.contain=function(t){return Lx(t,this._extent)},e.prototype.normalize=function(t){return Px(t,this._extent)},e.prototype.scale=function(t){return Ox(t,this._extent)},e.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=parseFloat(t)),isNaN(e)||(n[1]=parseFloat(e))},e.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),this.setExtent(e[0],e[1])},e.prototype.getInterval=function(){return this._interval},e.prototype.setInterval=function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Ax(t)},e.prototype.getTicks=function(t){var e=this._interval,n=this._extent,i=this._niceExtent,r=this._intervalPrecision,o=[];if(!e)return o;n[0]1e4)return[];var s=o.length?o[o.length-1].value:i[1];return n[1]>s&&(t?o.push({value:Nx(s+e,r)}):o.push({value:n[1]})),o},e.prototype.getMinorTicks=function(t){for(var e=this.getTicks(!0),n=[],i=this.getExtent(),r=1;ri[0]&&h0&&(o=null===o?s:Math.min(o,s))}n[i]=o}}return n}(t),n=[];return E(t,(function(t){var i,r=t.coordinateSystem.getBaseAxis(),o=r.getExtent();if("category"===r.type)i=r.getBandWidth();else if("value"===r.type||"time"===r.type){var a=r.dim+"_"+r.index,s=e[a],l=Math.abs(o[1]-o[0]),u=r.scale.getExtent(),h=Math.abs(u[1]-u[0]);i=s?l/h*s:l}else{var c=t.getData();i=Math.abs(o[1]-o[0])/c.count()}var p=$r(t.get("barWidth"),i),d=$r(t.get("barMaxWidth"),i),f=$r(t.get("barMinWidth")||(qx(t)?.5:1),i),g=t.get("barGap"),y=t.get("barCategoryGap");n.push({bandWidth:i,barWidth:p,barMaxWidth:d,barMinWidth:f,barGap:g,barCategoryGap:y,axisKey:Wx(r),stackId:Gx(t)})})),Xx(n)}function Xx(t){var e={};E(t,(function(t,n){var i=t.axisKey,r=t.bandWidth,o=e[i]||{bandWidth:r,remainedWidth:r,autoWidthCount:0,categoryGap:null,gap:"20%",stacks:{}},a=o.stacks;e[i]=o;var s=t.stackId;a[s]||o.autoWidthCount++,a[s]=a[s]||{width:0,maxWidth:0};var l=t.barWidth;l&&!a[s].width&&(a[s].width=l,l=Math.min(o.remainedWidth,l),o.remainedWidth-=l);var u=t.barMaxWidth;u&&(a[s].maxWidth=u);var h=t.barMinWidth;h&&(a[s].minWidth=h);var c=t.barGap;null!=c&&(o.gap=c);var p=t.barCategoryGap;null!=p&&(o.categoryGap=p)}));var n={};return E(e,(function(t,e){n[e]={};var i=t.stacks,r=t.bandWidth,o=t.categoryGap;if(null==o){var a=G(i).length;o=Math.max(35-4*a,15)+"%"}var s=$r(o,r),l=$r(t.gap,1),u=t.remainedWidth,h=t.autoWidthCount,c=(u-s)/(h+(h-1)*l);c=Math.max(c,0),E(i,(function(t){var e=t.maxWidth,n=t.minWidth;if(t.width){i=t.width;e&&(i=Math.min(i,e)),n&&(i=Math.max(i,n)),t.width=i,u-=i+l*i,h--}else{var i=c;e&&ei&&(i=n),i!==c&&(t.width=i,u-=i+l*i,h--)}})),c=(u-s)/(h+(h-1)*l),c=Math.max(c,0);var p,d=0;E(i,(function(t,e){t.width||(t.width=c),p=t,d+=t.width*(1+l)})),p&&(d-=p.width*l);var f=-d/2;E(i,(function(t,i){n[e][i]=n[e][i]||{bandWidth:r,offset:f,width:t.width},f+=t.width*(1+l)}))})),n}function Ux(t,e){var n=Hx(t,e),i=Yx(n);E(n,(function(t){var e=t.getData(),n=t.coordinateSystem.getBaseAxis(),r=Gx(t),o=i[Wx(n)][r],a=o.offset,s=o.width;e.setLayout({bandWidth:o.bandWidth,offset:a,size:s})}))}function Zx(t){return{seriesType:t,plan:kg(),reset:function(t){if(jx(t)){var e=t.getData(),n=t.coordinateSystem,i=n.getBaseAxis(),r=n.getOtherAxis(i),o=e.getDimensionIndex(e.mapDimension(r.dim)),a=e.getDimensionIndex(e.mapDimension(i.dim)),s=t.get("showBackground",!0),l=e.mapDimension(r.dim),u=e.getCalculationInfo("stackResultDimension"),h=mx(e,l)&&!!e.getCalculationInfo("stackedOnSeries"),c=r.isHorizontal(),p=function(t,e){var n=e.model.get("startValue");n||(n=0);return e.toGlobalCoord(e.dataToCoord("log"===e.type?n>0?n:1:n))}(0,r),d=qx(t),f=t.get("barMinHeight")||0,g=u&&e.getDimensionIndex(u),y=e.getLayout("size"),v=e.getLayout("offset");return{progress:function(t,e){for(var i,r=t.count,l=d&&Bx(3*r),u=d&&s&&Bx(3*r),m=d&&Bx(r),x=n.master.getRect(),_=c?x.width:x.height,b=e.getStore(),w=0;null!=(i=t.next());){var S=b.get(h?g:o,i),M=b.get(a,i),I=p,T=void 0;h&&(T=+S-b.get(o,i));var C=void 0,D=void 0,A=void 0,k=void 0;if(c){var L=n.dataToPoint([S,M]);if(h)I=n.dataToPoint([T,M])[0];C=I,D=L[1]+v,A=L[0]-I,k=y,Math.abs(A)0)for(var s=0;s=0;--s)if(l[u]){o=l[u];break}o=o||a.none}if(Y(o)){var h=null==t.level?0:t.level>=0?t.level:o.length+t.level;o=o[h=Math.min(h,o.length-1)]}}return Jc(new Date(t.value),o,r,i)}(t,e,n,this.getSetting("locale"),i)},e.prototype.getTicks=function(){var t=this._interval,e=this._extent,n=[];if(!t)return n;n.push({value:e[0],level:0});var i=this.getSetting("useUTC"),r=function(t,e,n,i){var r=1e4,o=jc,a=0;function s(t,e,n,r,o,a,s){for(var l=new Date(e),u=e,h=l[r]();u1&&0===u&&o.unshift({value:o[0].value-p})}}for(u=0;u=i[0]&&v<=i[1]&&c++)}var m=(i[1]-i[0])/e;if(c>1.5*m&&p>m/1.5)break;if(u.push(g),c>m||t===o[d])break}h=[]}}0;var x=B(z(u,(function(t){return B(t,(function(t){return t.value>=i[0]&&t.value<=i[1]&&!t.notAdd}))})),(function(t){return t.length>0})),_=[],b=x.length-1;for(d=0;dn&&(this._approxInterval=n);var o=$x.length,a=Math.min(function(t,e,n,i){for(;n>>1;t[r][1]16?16:t>7.5?7:t>3.5?4:t>1.5?2:1}function Qx(t){return(t/=2592e6)>6?6:t>3?3:t>2?2:1}function t_(t){return(t/=Gc)>12?12:t>6?6:t>3.5?4:t>2?2:1}function e_(t,e){return(t/=e?Fc:Bc)>30?30:t>20?20:t>15?15:t>10?10:t>5?5:t>2?2:1}function n_(t){return po(t,!0)}function i_(t,e,n){var i=new Date(t);switch(Kc(e)){case"year":case"month":i[up(n)](0);case"day":i[hp(n)](1);case"hour":i[cp(n)](0);case"minute":i[pp(n)](0);case"second":i[dp(n)](0),i[fp(n)](0)}return i.getTime()}bx.registerClass(Kx);var r_=bx.prototype,o_=Ex.prototype,a_=Jr,s_=Math.floor,l_=Math.ceil,u_=Math.pow,h_=Math.log,c_=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="log",e.base=10,e._originalScale=new Ex,e._interval=0,e}return n(e,t),e.prototype.getTicks=function(t){var e=this._originalScale,n=this._extent,i=e.getExtent();return z(o_.getTicks.call(this,t),(function(t){var e=t.value,r=Jr(u_(this.base,e));return r=e===n[0]&&this._fixMin?d_(r,i[0]):r,{value:r=e===n[1]&&this._fixMax?d_(r,i[1]):r}}),this)},e.prototype.setExtent=function(t,e){var n=h_(this.base);t=h_(Math.max(0,t))/n,e=h_(Math.max(0,e))/n,o_.setExtent.call(this,t,e)},e.prototype.getExtent=function(){var t=this.base,e=r_.getExtent.call(this);e[0]=u_(t,e[0]),e[1]=u_(t,e[1]);var n=this._originalScale.getExtent();return this._fixMin&&(e[0]=d_(e[0],n[0])),this._fixMax&&(e[1]=d_(e[1],n[1])),e},e.prototype.unionExtent=function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=h_(t[0])/h_(e),t[1]=h_(t[1])/h_(e),r_.unionExtent.call(this,t)},e.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},e.prototype.calcNiceTicks=function(t){t=t||10;var e=this._extent,n=e[1]-e[0];if(!(n===1/0||n<=0)){var i=ho(n);for(t/n*i<=.5&&(i*=10);!isNaN(i)&&Math.abs(i)<1&&Math.abs(i)>0;)i*=10;var r=[Jr(l_(e[0]/i)*i),Jr(s_(e[1]/i)*i)];this._interval=i,this._niceExtent=r}},e.prototype.calcNiceExtent=function(t){o_.calcNiceExtent.call(this,t),this._fixMin=t.fixMin,this._fixMax=t.fixMax},e.prototype.parse=function(t){return t},e.prototype.contain=function(t){return Lx(t=h_(t)/h_(this.base),this._extent)},e.prototype.normalize=function(t){return Px(t=h_(t)/h_(this.base),this._extent)},e.prototype.scale=function(t){return t=Ox(t,this._extent),u_(this.base,t)},e.type="log",e}(bx),p_=c_.prototype;function d_(t,e){return a_(t,to(e))}p_.getMinorTicks=o_.getMinorTicks,p_.getLabel=o_.getLabel,bx.registerClass(c_);var f_=function(){function t(t,e,n){this._prepareParams(t,e,n)}return t.prototype._prepareParams=function(t,e,n){n[1]0&&s>0&&!l&&(a=0),a<0&&s<0&&!u&&(s=0));var c=this._determinedMin,p=this._determinedMax;return null!=c&&(a=c,l=!0),null!=p&&(s=p,u=!0),{min:a,max:s,minFixed:l,maxFixed:u,isBlank:h}},t.prototype.modifyDataMinMax=function(t,e){this[y_[t]]=e},t.prototype.setDeterminedMinMax=function(t,e){var n=g_[t];this[n]=e},t.prototype.freeze=function(){this.frozen=!0},t}(),g_={min:"_determinedMin",max:"_determinedMax"},y_={min:"_dataMin",max:"_dataMax"};function v_(t,e,n){var i=t.rawExtentInfo;return i||(i=new f_(t,e,n),t.rawExtentInfo=i,i)}function m_(t,e){return null==e?null:nt(e)?NaN:t.parse(e)}function x_(t,e){var n=t.type,i=v_(t,e,t.getExtent()).calculate();t.setBlank(i.isBlank);var r=i.min,o=i.max,a=e.ecModel;if(a&&"time"===n){var s=Hx("bar",a),l=!1;if(E(s,(function(t){l=l||t.getBaseAxis()===e.axis})),l){var u=Yx(s),h=function(t,e,n,i){var r=n.axis.getExtent(),o=r[1]-r[0],a=function(t,e,n){if(t&&e){var i=t[Wx(e)];return null!=i&&null!=n?i[Gx(n)]:i}}(i,n.axis);if(void 0===a)return{min:t,max:e};var s=1/0;E(a,(function(t){s=Math.min(t.offset,s)}));var l=-1/0;E(a,(function(t){l=Math.max(t.offset+t.width,l)})),s=Math.abs(s),l=Math.abs(l);var u=s+l,h=e-t,c=h/(1-(s+l)/o)-h;return e+=c*(l/u),t-=c*(s/u),{min:t,max:e}}(r,o,e,u);r=h.min,o=h.max}}return{extent:[r,o],fixMin:i.minFixed,fixMax:i.maxFixed}}function __(t,e){var n=e,i=x_(t,n),r=i.extent,o=n.get("splitNumber");t instanceof c_&&(t.base=n.get("logBase"));var a=t.type,s=n.get("interval"),l="interval"===a||"time"===a;t.setExtent(r[0],r[1]),t.calcNiceExtent({splitNumber:o,fixMin:i.fixMin,fixMax:i.fixMax,minInterval:l?n.get("minInterval"):null,maxInterval:l?n.get("maxInterval"):null}),null!=s&&t.setInterval&&t.setInterval(s)}function b_(t,e){if(e=e||t.get("type"))switch(e){case"category":return new Rx({ordinalMeta:t.getOrdinalMeta?t.getOrdinalMeta():t.getCategories(),extent:[1/0,-1/0]});case"time":return new Kx({locale:t.ecModel.getLocaleModel(),useUTC:t.ecModel.get("useUTC")});default:return new(bx.getClass(e)||Ex)}}function w_(t){var e,n,i=t.getLabelModel().get("formatter"),r="category"===t.type?t.scale.getExtent()[0]:null;return"time"===t.scale.type?(n=i,function(e,i){return t.scale.getFormattedLabel(e,i,n)}):U(i)?function(e){return function(n){var i=t.scale.getLabel(n);return e.replace("{value}",null!=i?i:"")}}(i):X(i)?(e=i,function(n,i){return null!=r&&(i=n.value-r),e(S_(t,n),i,null!=n.level?{level:n.level}:null)}):function(e){return t.scale.getLabel(e)}}function S_(t,e){return"category"===t.type?t.scale.getLabel(e):e.value}function M_(t,e){var n=e*Math.PI/180,i=t.width,r=t.height,o=i*Math.abs(Math.cos(n))+Math.abs(r*Math.sin(n)),a=i*Math.abs(Math.sin(n))+Math.abs(r*Math.cos(n));return new ze(t.x,t.y,o,a)}function I_(t){var e=t.get("interval");return null==e?"auto":e}function T_(t){return"category"===t.type&&0===I_(t.getLabelModel())}function C_(t,e){var n={};return E(t.mapDimensionsAll(e),(function(e){n[xx(t,e)]=!0})),G(n)}var D_=function(){function t(){}return t.prototype.getNeedCrossZero=function(){return!this.option.scale},t.prototype.getCoordSysModel=function(){},t}();var A_={isDimensionStacked:mx,enableDataStack:vx,getStackedDimension:xx};var k_=Object.freeze({__proto__:null,createList:function(t){return _x(null,t)},getLayoutRect:kp,dataStack:A_,createScale:function(t,e){var n=e;e instanceof Cc||(n=new Cc(e));var i=b_(n);return i.setExtent(t[0],t[1]),__(i,n),i},mixinAxisModelCommonMethods:function(t){R(t,D_)},getECData:rl,createTextStyle:function(t,e){return oc(t,null,null,"normal"!==(e=e||{}).state)},createDimensions:function(t,e){return px(t,e).dimensions},createSymbol:Xy,enableHoverEmphasis:Ul});function L_(t,e){return Math.abs(t-e)<1e-8}function P_(t,e,n){var i=0,r=t[0];if(!r)return!1;for(var o=1;on&&(t=r,n=a)}if(t)return function(t){for(var e=0,n=0,i=0,r=t.length,o=t[r-1][0],a=t[r-1][1],s=0;s>1^-(1&s),l=l>>1^-(1&l),r=s+=r,o=l+=o,i.push([s/n,l/n])}return i}function H_(t,e){return z(B((t=function(t){if(!t.UTF8Encoding)return t;var e=t,n=e.UTF8Scale;return null==n&&(n=1024),E(e.features,(function(t){var e=t.geometry,i=e.encodeOffsets,r=e.coordinates;if(i)switch(e.type){case"LineString":e.coordinates=W_(r,i,n);break;case"Polygon":case"MultiLineString":G_(r,i,n);break;case"MultiPolygon":E(r,(function(t,e){return G_(t,i[e],n)}))}})),e.UTF8Encoding=!1,e}(t)).features,(function(t){return t.geometry&&t.properties&&t.geometry.coordinates.length>0})),(function(t){var n=t.properties,i=t.geometry,r=[];switch(i.type){case"Polygon":var o=i.coordinates;r.push(new z_(o[0],o.slice(1)));break;case"MultiPolygon":E(i.coordinates,(function(t){t[0]&&r.push(new z_(t[0],t.slice(1)))}));break;case"LineString":r.push(new V_([i.coordinates]));break;case"MultiLineString":r.push(new V_(i.coordinates))}var a=new B_(n[e||"name"],r,n.cp);return a.properties=n,a}))}var Y_=Object.freeze({__proto__:null,linearMap:Kr,round:Jr,asc:Qr,getPrecision:to,getPrecisionSafe:eo,getPixelPrecision:no,getPercentWithPrecision:function(t,e,n){return t[e]&&io(t,n)[e]||0},MAX_SAFE_INTEGER:oo,remRadian:ao,isRadianAroundZero:so,parseDate:uo,quantity:ho,quantityExponent:co,nice:po,quantile:fo,reformIntervals:go,isNumeric:vo,numericToNumber:yo}),X_=Object.freeze({__proto__:null,parse:uo,format:Jc}),U_=Object.freeze({__proto__:null,extendShape:Ch,extendPath:Ah,makePath:Ph,makeImage:Oh,mergePath:Nh,resizePath:Eh,createIcon:Uh,updateProps:vh,initProps:mh,getTransform:Bh,clipPointsByRect:Yh,clipRectByRect:Xh,registerShape:kh,getShapeClass:Lh,Group:Br,Image:Ns,Text:Xs,Circle:Su,Ellipse:Iu,Sector:Fu,Ring:Wu,Polygon:Xu,Polyline:Zu,Rect:Ws,Line:Ku,BezierCurve:th,Arc:nh,IncrementalDisplayable:dh,CompoundPath:ih,LinearGradient:oh,RadialGradient:ah,BoundingRect:ze}),Z_=Object.freeze({__proto__:null,addCommas:gp,toCamelCase:yp,normalizeCssArray:vp,encodeHTML:re,formatTpl:bp,getTooltipMarker:wp,formatTime:function(t,e,n){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var i=uo(e),r=n?"getUTC":"get",o=i[r+"FullYear"](),a=i[r+"Month"]()+1,s=i[r+"Date"](),l=i[r+"Hours"](),u=i[r+"Minutes"](),h=i[r+"Seconds"](),c=i[r+"Milliseconds"]();return t=t.replace("MM",qc(a,2)).replace("M",a).replace("yyyy",o).replace("yy",qc(o%100+"",2)).replace("dd",qc(s,2)).replace("d",s).replace("hh",qc(l,2)).replace("h",l).replace("mm",qc(u,2)).replace("m",u).replace("ss",qc(h,2)).replace("s",h).replace("SSS",qc(c,3))},capitalFirst:function(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t},truncateText:pa,getTextRect:function(t,e,n,i,r,o,a,s){return new Xs({style:{text:t,font:e,align:n,verticalAlign:i,padding:r,rich:o,overflow:a?"truncate":null,lineHeight:s}}).getBoundingRect()}}),j_=Object.freeze({__proto__:null,map:z,each:E,indexOf:P,inherits:O,reduce:V,filter:B,bind:W,curry:H,isArray:Y,isString:U,isObject:q,isFunction:X,extend:A,defaults:k,clone:T,merge:C}),q_=Vo();function K_(t,e){var n=z(e,(function(e){return t.scale.parse(e)}));return"time"===t.type&&n.length>0&&(n.sort(),n.unshift(n[0]),n.push(n[n.length-1])),n}function $_(t){var e=t.getLabelModel().get("customValues");if(e){var n=w_(t);return{labels:K_(t,e).map((function(e){var i={value:e};return{formattedLabel:n(i),rawLabel:t.scale.getLabel(i),tickValue:e}}))}}return"category"===t.type?function(t){var e=t.getLabelModel(),n=Q_(t,e);return!e.get("show")||t.scale.isBlank()?{labels:[],labelCategoryInterval:n.labelCategoryInterval}:n}(t):function(t){var e=t.scale.getTicks(),n=w_(t);return{labels:z(e,(function(e,i){return{level:e.level,formattedLabel:n(e,i),rawLabel:t.scale.getLabel(e),tickValue:e.value}}))}}(t)}function J_(t,e){var n=t.getTickModel().get("customValues");return n?{ticks:K_(t,n)}:"category"===t.type?function(t,e){var n,i,r=tb(t,"ticks"),o=I_(e),a=eb(r,o);if(a)return a;e.get("show")&&!t.scale.isBlank()||(n=[]);if(X(o))n=rb(t,o,!0);else if("auto"===o){var s=Q_(t,t.getLabelModel());i=s.labelCategoryInterval,n=z(s.labels,(function(t){return t.tickValue}))}else n=ib(t,i=o,!0);return nb(r,o,{ticks:n,tickCategoryInterval:i})}(t,e):{ticks:z(t.scale.getTicks(),(function(t){return t.value}))}}function Q_(t,e){var n,i,r=tb(t,"labels"),o=I_(e),a=eb(r,o);return a||(X(o)?n=rb(t,o):(i="auto"===o?function(t){var e=q_(t).autoInterval;return null!=e?e:q_(t).autoInterval=t.calculateCategoryInterval()}(t):o,n=ib(t,i)),nb(r,o,{labels:n,labelCategoryInterval:i}))}function tb(t,e){return q_(t)[e]||(q_(t)[e]=[])}function eb(t,e){for(var n=0;n1&&h/l>2&&(u=Math.round(Math.ceil(u/l)*l));var c=T_(t),p=a.get("showMinLabel")||c,d=a.get("showMaxLabel")||c;p&&u!==o[0]&&g(o[0]);for(var f=u;f<=o[1];f+=l)g(f);function g(t){var e={value:t};s.push(n?t:{formattedLabel:i(e),rawLabel:r.getLabel(e),tickValue:t})}return d&&f-l!==o[1]&&g(o[1]),s}function rb(t,e,n){var i=t.scale,r=w_(t),o=[];return E(i.getTicks(),(function(t){var a=i.getLabel(t),s=t.value;e(t.value,a)&&o.push(n?s:{formattedLabel:r(t),rawLabel:a,tickValue:s})})),o}var ob=[0,1],ab=function(){function t(t,e,n){this.onBand=!1,this.inverse=!1,this.dim=t,this.scale=e,this._extent=n||[0,0]}return t.prototype.contain=function(t){var e=this._extent,n=Math.min(e[0],e[1]),i=Math.max(e[0],e[1]);return t>=n&&t<=i},t.prototype.containData=function(t){return this.scale.contain(t)},t.prototype.getExtent=function(){return this._extent.slice()},t.prototype.getPixelPrecision=function(t){return no(t||this.scale.getExtent(),this._extent)},t.prototype.setExtent=function(t,e){var n=this._extent;n[0]=t,n[1]=e},t.prototype.dataToCoord=function(t,e){var n=this._extent,i=this.scale;return t=i.normalize(t),this.onBand&&"ordinal"===i.type&&sb(n=n.slice(),i.count()),Kr(t,ob,n,e)},t.prototype.coordToData=function(t,e){var n=this._extent,i=this.scale;this.onBand&&"ordinal"===i.type&&sb(n=n.slice(),i.count());var r=Kr(t,n,ob,e);return this.scale.scale(r)},t.prototype.pointToData=function(t,e){},t.prototype.getTicksCoords=function(t){var e=(t=t||{}).tickModel||this.getTickModel(),n=z(J_(this,e).ticks,(function(t){return{coord:this.dataToCoord("ordinal"===this.scale.type?this.scale.getRawOrdinalNumber(t):t),tickValue:t}}),this);return function(t,e,n,i){var r=e.length;if(!t.onBand||n||!r)return;var o,a,s=t.getExtent();if(1===r)e[0].coord=s[0],o=e[1]={coord:s[1]};else{var l=e[r-1].tickValue-e[0].tickValue,u=(e[r-1].coord-e[0].coord)/l;E(e,(function(t){t.coord-=u/2})),a=1+t.scale.getExtent()[1]-e[r-1].tickValue,o={coord:e[r-1].coord+u*a},e.push(o)}var h=s[0]>s[1];c(e[0].coord,s[0])&&(i?e[0].coord=s[0]:e.shift());i&&c(s[0],e[0].coord)&&e.unshift({coord:s[0]});c(s[1],o.coord)&&(i?o.coord=s[1]:e.pop());i&&c(o.coord,s[1])&&e.push({coord:s[1]});function c(t,e){return t=Jr(t),e=Jr(e),h?t>e:t0&&t<100||(t=5),z(this.scale.getMinorTicks(t),(function(t){return z(t,(function(t){return{coord:this.dataToCoord(t),tickValue:t}}),this)}),this)},t.prototype.getViewLabels=function(){return $_(this).labels},t.prototype.getLabelModel=function(){return this.model.getModel("axisLabel")},t.prototype.getTickModel=function(){return this.model.getModel("axisTick")},t.prototype.getBandWidth=function(){var t=this._extent,e=this.scale.getExtent(),n=e[1]-e[0]+(this.onBand?1:0);0===n&&(n=1);var i=Math.abs(t[1]-t[0]);return Math.abs(i)/n},t.prototype.calculateCategoryInterval=function(){return function(t){var e=function(t){var e=t.getLabelModel();return{axisRotate:t.getRotate?t.getRotate():t.isHorizontal&&!t.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}(t),n=w_(t),i=(e.axisRotate-e.labelRotate)/180*Math.PI,r=t.scale,o=r.getExtent(),a=r.count();if(o[1]-o[0]<1)return 0;var s=1;a>40&&(s=Math.max(1,Math.floor(a/40)));for(var l=o[0],u=t.dataToCoord(l+1)-t.dataToCoord(l),h=Math.abs(u*Math.cos(i)),c=Math.abs(u*Math.sin(i)),p=0,d=0;l<=o[1];l+=s){var f,g,y=Sr(n({value:l}),e.font,"center","top");f=1.3*y.width,g=1.3*y.height,p=Math.max(p,f,7),d=Math.max(d,g,7)}var v=p/h,m=d/c;isNaN(v)&&(v=1/0),isNaN(m)&&(m=1/0);var x=Math.max(0,Math.floor(Math.min(v,m))),_=q_(t.model),b=t.getExtent(),w=_.lastAutoInterval,S=_.lastTickCount;return null!=w&&null!=S&&Math.abs(w-x)<=1&&Math.abs(S-a)<=1&&w>x&&_.axisExtent0===b[0]&&_.axisExtent1===b[1]?x=w:(_.lastTickCount=a,_.lastAutoInterval=x,_.axisExtent0=b[0],_.axisExtent1=b[1]),x}(this)},t}();function sb(t,e){var n=(t[1]-t[0])/e/2;t[0]+=n,t[1]-=n}var lb=2*Math.PI,ub=hs.CMD,hb=["top","right","bottom","left"];function cb(t,e,n,i,r){var o=n.width,a=n.height;switch(t){case"top":i.set(n.x+o/2,n.y-e),r.set(0,-1);break;case"bottom":i.set(n.x+o/2,n.y+a+e),r.set(0,1);break;case"left":i.set(n.x-e,n.y+a/2),r.set(-1,0);break;case"right":i.set(n.x+o+e,n.y+a/2),r.set(1,0)}}function pb(t,e,n,i,r,o,a,s,l){a-=t,s-=e;var u=Math.sqrt(a*a+s*s),h=(a/=u)*n+t,c=(s/=u)*n+e;if(Math.abs(i-r)%lb<1e-4)return l[0]=h,l[1]=c,u-n;if(o){var p=i;i=gs(r),r=gs(p)}else i=gs(i),r=gs(r);i>r&&(r+=lb);var d=Math.atan2(s,a);if(d<0&&(d+=lb),d>=i&&d<=r||d+lb>=i&&d+lb<=r)return l[0]=h,l[1]=c,u-n;var f=n*Math.cos(i)+t,g=n*Math.sin(i)+e,y=n*Math.cos(r)+t,v=n*Math.sin(r)+e,m=(f-a)*(f-a)+(g-s)*(g-s),x=(y-a)*(y-a)+(v-s)*(v-s);return m0){e=e/180*Math.PI,mb.fromArray(t[0]),xb.fromArray(t[1]),_b.fromArray(t[2]),De.sub(bb,mb,xb),De.sub(wb,_b,xb);var n=bb.len(),i=wb.len();if(!(n<.001||i<.001)){bb.scale(1/n),wb.scale(1/i);var r=bb.dot(wb);if(Math.cos(e)1&&De.copy(Ib,_b),Ib.toArray(t[1])}}}}function Cb(t,e,n){if(n<=180&&n>0){n=n/180*Math.PI,mb.fromArray(t[0]),xb.fromArray(t[1]),_b.fromArray(t[2]),De.sub(bb,xb,mb),De.sub(wb,_b,xb);var i=bb.len(),r=wb.len();if(!(i<.001||r<.001))if(bb.scale(1/i),wb.scale(1/r),bb.dot(e)=a)De.copy(Ib,_b);else{Ib.scaleAndAdd(wb,o/Math.tan(Math.PI/2-s));var l=_b.x!==xb.x?(Ib.x-xb.x)/(_b.x-xb.x):(Ib.y-xb.y)/(_b.y-xb.y);if(isNaN(l))return;l<0?De.copy(Ib,xb):l>1&&De.copy(Ib,_b)}Ib.toArray(t[1])}}}function Db(t,e,n,i){var r="normal"===n,o=r?t:t.ensureState(n);o.ignore=e;var a=i.get("smooth");a&&!0===a&&(a=.3),o.shape=o.shape||{},a>0&&(o.shape.smooth=a);var s=i.getModel("lineStyle").getLineStyle();r?t.useStyle(s):o.style=s}function Ab(t,e){var n=e.smooth,i=e.points;if(i)if(t.moveTo(i[0][0],i[0][1]),n>0&&i.length>=3){var r=Vt(i[0],i[1]),o=Vt(i[1],i[2]);if(!r||!o)return t.lineTo(i[1][0],i[1][1]),void t.lineTo(i[2][0],i[2][1]);var a=Math.min(r,o)*n,s=Gt([],i[1],i[0],a/r),l=Gt([],i[1],i[2],a/o),u=Gt([],s,l,.5);t.bezierCurveTo(s[0],s[1],s[0],s[1],u[0],u[1]),t.bezierCurveTo(l[0],l[1],l[0],l[1],i[2][0],i[2][1])}else for(var h=1;h0&&o&&_(-h/a,0,a);var f,g,y=t[0],v=t[a-1];return m(),f<0&&b(-f,.8),g<0&&b(g,.8),m(),x(f,g,1),x(g,f,-1),m(),f<0&&w(-f),g<0&&w(g),u}function m(){f=y.rect[e]-i,g=r-v.rect[e]-v.rect[n]}function x(t,e,n){if(t<0){var i=Math.min(e,-t);if(i>0){_(i*n,0,a);var r=i+t;r<0&&b(-r*n,1)}else b(-t*n,1)}}function _(n,i,r){0!==n&&(u=!0);for(var o=i;o0)for(l=0;l0;l--){_(-(o[l-1]*c),l,a)}}}function w(t){var e=t<0?-1:1;t=Math.abs(t);for(var n=Math.ceil(t/(a-1)),i=0;i0?_(n,0,i+1):_(-n,a-i-1,a),(t-=n)<=0)return}}function Rb(t,e,n,i){return Ob(t,"y","height",e,n,i)}function Nb(t){var e=[];t.sort((function(t,e){return e.priority-t.priority}));var n=new ze(0,0,0,0);function i(t){if(!t.ignore){var e=t.ensureState("emphasis");null==e.ignore&&(e.ignore=!1)}t.ignore=!0}for(var r=0;r=0&&n.attr(d.oldLayoutSelect),P(u,"emphasis")>=0&&n.attr(d.oldLayoutEmphasis)),vh(n,s,e,a)}else if(n.attr(s),!pc(n).valueAnimation){var h=rt(n.style.opacity,1);n.style.opacity=0,mh(n,{style:{opacity:h}},e,a)}if(d.oldLayout=s,n.states.select){var c=d.oldLayoutSelect={};Wb(c,s,Hb),Wb(c,n.states.select,Hb)}if(n.states.emphasis){var p=d.oldLayoutEmphasis={};Wb(p,s,Hb),Wb(p,n.states.emphasis,Hb)}fc(n,a,l,e,e)}if(i&&!i.ignore&&!i.invisible){r=(d=Gb(i)).oldLayout;var d,f={points:i.shape.points};r?(i.attr({shape:r}),vh(i,{shape:f},e)):(i.setShape(f),i.style.strokePercent=0,mh(i,{style:{strokePercent:1}},e)),d.oldLayout=f}},t}(),Xb=Vo();var Ub=Math.sin,Zb=Math.cos,jb=Math.PI,qb=2*Math.PI,Kb=180/jb,$b=function(){function t(){}return t.prototype.reset=function(t){this._start=!0,this._d=[],this._str="",this._p=Math.pow(10,t||4)},t.prototype.moveTo=function(t,e){this._add("M",t,e)},t.prototype.lineTo=function(t,e){this._add("L",t,e)},t.prototype.bezierCurveTo=function(t,e,n,i,r,o){this._add("C",t,e,n,i,r,o)},t.prototype.quadraticCurveTo=function(t,e,n,i){this._add("Q",t,e,n,i)},t.prototype.arc=function(t,e,n,i,r,o){this.ellipse(t,e,n,n,0,i,r,o)},t.prototype.ellipse=function(t,e,n,i,r,o,a,s){var l=a-o,u=!s,h=Math.abs(l),c=pi(h-qb)||(u?l>=qb:-l>=qb),p=l>0?l%qb:l%qb+qb,d=!1;d=!!c||!pi(h)&&p>=jb==!!u;var f=t+n*Zb(o),g=e+i*Ub(o);this._start&&this._add("M",f,g);var y=Math.round(r*Kb);if(c){var v=1/this._p,m=(u?1:-1)*(qb-v);this._add("A",n,i,y,1,+u,t+n*Zb(o+m),e+i*Ub(o+m)),v>.01&&this._add("A",n,i,y,0,+u,f,g)}else{var x=t+n*Zb(a),_=e+i*Ub(a);this._add("A",n,i,y,+d,+u,x,_)}},t.prototype.rect=function(t,e,n,i){this._add("M",t,e),this._add("l",n,0),this._add("l",0,i),this._add("l",-n,0),this._add("Z")},t.prototype.closePath=function(){this._d.length>0&&this._add("Z")},t.prototype._add=function(t,e,n,i,r,o,a,s,l){for(var u=[],h=this._p,c=1;c"}(r,o)+("style"!==r?re(a):a||"")+(i?""+n+z(i,(function(e){return t(e)})).join(n)+n:"")+("")}(t)}function uw(t){return{zrId:t,shadowCache:{},patternCache:{},gradientCache:{},clipPathCache:{},defs:{},cssNodes:{},cssAnims:{},cssStyleCache:{},cssAnimIdx:0,shadowIdx:0,gradientIdx:0,patternIdx:0,clipPathIdx:0}}function hw(t,e,n,i){return sw("svg","root",{width:t,height:e,xmlns:iw,"xmlns:xlink":rw,version:"1.1",baseProfile:"full",viewBox:!!i&&"0 0 "+t+" "+e},n)}var cw=0;function pw(){return cw++}var dw={cubicIn:"0.32,0,0.67,0",cubicOut:"0.33,1,0.68,1",cubicInOut:"0.65,0,0.35,1",quadraticIn:"0.11,0,0.5,0",quadraticOut:"0.5,1,0.89,1",quadraticInOut:"0.45,0,0.55,1",quarticIn:"0.5,0,0.75,0",quarticOut:"0.25,1,0.5,1",quarticInOut:"0.76,0,0.24,1",quinticIn:"0.64,0,0.78,0",quinticOut:"0.22,1,0.36,1",quinticInOut:"0.83,0,0.17,1",sinusoidalIn:"0.12,0,0.39,0",sinusoidalOut:"0.61,1,0.88,1",sinusoidalInOut:"0.37,0,0.63,1",exponentialIn:"0.7,0,0.84,0",exponentialOut:"0.16,1,0.3,1",exponentialInOut:"0.87,0,0.13,1",circularIn:"0.55,0,1,0.45",circularOut:"0,0.55,0.45,1",circularInOut:"0.85,0,0.15,1"},fw="transform-origin";function gw(t,e,n){var i=A({},t.shape);A(i,e),t.buildPath(n,i);var r=new $b;return r.reset(wi(t)),n.rebuildPath(r,1),r.generateStr(),r.getStr()}function yw(t,e){var n=e.originX,i=e.originY;(n||i)&&(t[fw]=n+"px "+i+"px")}var vw={fill:"fill",opacity:"opacity",lineWidth:"stroke-width",lineDashOffset:"stroke-dashoffset"};function mw(t,e){var n=e.zrId+"-ani-"+e.cssAnimIdx++;return e.cssAnims[n]=t,n}function xw(t){return U(t)?dw[t]?"cubic-bezier("+dw[t]+")":Pn(t)?t:"":""}function _w(t,e,n,i){var r=t.animators,o=r.length,a=[];if(t instanceof ih){var s=function(t,e,n){var i,r,o=t.shape.paths,a={};if(E(o,(function(t){var e=uw(n.zrId);e.animation=!0,_w(t,{},e,!0);var o=e.cssAnims,s=e.cssNodes,l=G(o),u=l.length;if(u){var h=o[r=l[u-1]];for(var c in h){var p=h[c];a[c]=a[c]||{d:""},a[c].d+=p.d||""}for(var d in s){var f=s[d].animation;f.indexOf(r)>=0&&(i=f)}}})),i){e.d=!1;var s=mw(a,n);return i.replace(r,s)}}(t,e,n);if(s)a.push(s);else if(!o)return}else if(!o)return;for(var l={},u=0;u0})).length)return mw(h,n)+" "+r[0]+" both"}for(var y in l){(s=g(l[y]))&&a.push(s)}if(a.length){var v=n.zrId+"-cls-"+pw();n.cssNodes["."+v]={animation:a.join(",")},e.class=v}}function bw(t,e,n,i){var r=JSON.stringify(t),o=n.cssStyleCache[r];o||(o=n.zrId+"-cls-"+pw(),n.cssStyleCache[r]=o,n.cssNodes["."+o+(i?":hover":"")]=t),e.class=e.class?e.class+" "+o:o}var ww=Math.round;function Sw(t){return t&&U(t.src)}function Mw(t){return t&&X(t.toDataURL)}function Iw(t,e,n,i){nw((function(r,o){var a="fill"===r||"stroke"===r;a&&_i(o)?Ew(e,t,r,i):a&&vi(o)?zw(n,t,r,i):t[r]=a&&"none"===o?"transparent":o}),e,n,!1),function(t,e,n){var i=t.style;if(function(t){return t&&(t.shadowBlur||t.shadowOffsetX||t.shadowOffsetY)}(i)){var r=function(t){var e=t.style,n=t.getGlobalScale();return[e.shadowColor,(e.shadowBlur||0).toFixed(2),(e.shadowOffsetX||0).toFixed(2),(e.shadowOffsetY||0).toFixed(2),n[0],n[1]].join(",")}(t),o=n.shadowCache,a=o[r];if(!a){var s=t.getGlobalScale(),l=s[0],u=s[1];if(!l||!u)return;var h=i.shadowOffsetX||0,c=i.shadowOffsetY||0,p=i.shadowBlur,d=hi(i.shadowColor),f=d.opacity,g=d.color,y=p/2/l+" "+p/2/u;a=n.zrId+"-s"+n.shadowIdx++,n.defs[a]=sw("filter",a,{id:a,x:"-100%",y:"-100%",width:"300%",height:"300%"},[sw("feDropShadow","",{dx:h/l,dy:c/u,stdDeviation:y,"flood-color":g,"flood-opacity":f})]),o[r]=a}e.filter=bi(a)}}(n,t,i)}function Tw(t,e){var n=Ur(e);n&&(n.each((function(e,n){null!=e&&(t[(ow+n).toLowerCase()]=e+"")})),e.isSilent()&&(t[ow+"silent"]="true"))}function Cw(t){return pi(t[0]-1)&&pi(t[1])&&pi(t[2])&&pi(t[3]-1)}function Dw(t,e,n){if(e&&(!function(t){return pi(t[4])&&pi(t[5])}(e)||!Cw(e))){var i=n?10:1e4;t.transform=Cw(e)?"translate("+ww(e[4]*i)/i+" "+ww(e[5]*i)/i+")":function(t){return"matrix("+di(t[0])+","+di(t[1])+","+di(t[2])+","+di(t[3])+","+fi(t[4])+","+fi(t[5])+")"}(e)}}function Aw(t,e,n){for(var i=t.points,r=[],o=0;o=0&&a||o;s&&(r=si(s))}var l=i.lineWidth;l&&(l/=!i.strokeNoScale&&t.transform?t.transform[0]:1);var u={cursor:"pointer"};r&&(u.fill=r),i.stroke&&(u.stroke=i.stroke),l&&(u["stroke-width"]=l),bw(u,e,n,!0)}}(t,o,e),sw(s,t.id+"",o)}function Nw(t,e){return t instanceof ks?Rw(t,e):t instanceof Ns?function(t,e){var n=t.style,i=n.image;if(i&&!U(i)&&(Sw(i)?i=i.src:Mw(i)&&(i=i.toDataURL())),i){var r=n.x||0,o=n.y||0,a={href:i,width:n.width,height:n.height};return r&&(a.x=r),o&&(a.y=o),Dw(a,t.transform),Iw(a,n,t,e),Tw(a,t),e.animation&&_w(t,a,e),sw("image",t.id+"",a)}}(t,e):t instanceof Ps?function(t,e){var n=t.style,i=n.text;if(null!=i&&(i+=""),i&&!isNaN(n.x)&&!isNaN(n.y)){var r=n.font||a,s=n.x||0,l=function(t,e,n){return"top"===n?t+=e/2:"bottom"===n&&(t-=e/2),t}(n.y||0,Tr(r),n.textBaseline),u={"dominant-baseline":"central","text-anchor":gi[n.textAlign]||n.textAlign};if($s(n)){var h="",c=n.fontStyle,p=qs(n.fontSize);if(!parseFloat(p))return;var d=n.fontFamily||o,f=n.fontWeight;h+="font-size:"+p+";font-family:"+d+";",c&&"normal"!==c&&(h+="font-style:"+c+";"),f&&"normal"!==f&&(h+="font-weight:"+f+";"),u.style=h}else u.style="font: "+r;return i.match(/\s/)&&(u["xml:space"]="preserve"),s&&(u.x=s),l&&(u.y=l),Dw(u,t.transform),Iw(u,n,t,e),Tw(u,t),e.animation&&_w(t,u,e),sw("text",t.id+"",u,void 0,i)}}(t,e):void 0}function Ew(t,e,n,i){var r,o=t[n],a={gradientUnits:o.global?"userSpaceOnUse":"objectBoundingBox"};if(mi(o))r="linearGradient",a.x1=o.x,a.y1=o.y,a.x2=o.x2,a.y2=o.y2;else{if(!xi(o))return void 0;r="radialGradient",a.cx=rt(o.x,.5),a.cy=rt(o.y,.5),a.r=rt(o.r,.5)}for(var s=o.colorStops,l=[],u=0,h=s.length;ul?Jw(t,null==n[c+1]?null:n[c+1].elm,n,s,c):Qw(t,e,a,l))}(n,i,r):jw(r)?(jw(t.text)&&Xw(n,""),Jw(n,null,r,0,r.length-1)):jw(i)?Qw(n,i,0,i.length-1):jw(t.text)&&Xw(n,""):t.text!==e.text&&(jw(i)&&Qw(n,i,0,i.length-1),Xw(n,e.text)))}var nS=0,iS=function(){function t(t,e,n){if(this.type="svg",this.refreshHover=rS("refreshHover"),this.configLayer=rS("configLayer"),this.storage=e,this._opts=n=A({},n),this.root=t,this._id="zr"+nS++,this._oldVNode=hw(n.width,n.height),t&&!n.ssr){var i=this._viewport=document.createElement("div");i.style.cssText="position:relative;overflow:hidden";var r=this._svgDom=this._oldVNode.elm=aw("svg");tS(null,this._oldVNode),i.appendChild(r),t.appendChild(i)}this.resize(n.width,n.height)}return t.prototype.getType=function(){return this.type},t.prototype.getViewportRoot=function(){return this._viewport},t.prototype.getViewportRootOffset=function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},t.prototype.getSvgDom=function(){return this._svgDom},t.prototype.refresh=function(){if(this.root){var t=this.renderToVNode({willUpdate:!0});t.attrs.style="position:absolute;left:0;top:0;user-select:none",function(t,e){if(Kw(t,e))eS(t,e);else{var n=t.elm,i=Hw(n);$w(e),null!==i&&(Fw(i,e.elm,Yw(n)),Qw(i,[t],0,0))}}(this._oldVNode,t),this._oldVNode=t}},t.prototype.renderOneToVNode=function(t){return Nw(t,uw(this._id))},t.prototype.renderToVNode=function(t){t=t||{};var e=this.storage.getDisplayList(!0),n=this._width,i=this._height,r=uw(this._id);r.animation=t.animation,r.willUpdate=t.willUpdate,r.compress=t.compress,r.emphasis=t.emphasis;var o=[],a=this._bgVNode=function(t,e,n,i){var r;if(n&&"none"!==n)if(r=sw("rect","bg",{width:t,height:e,x:"0",y:"0"}),_i(n))Ew({fill:n},r.attrs,"fill",i);else if(vi(n))zw({style:{fill:n},dirty:bt,getBoundingRect:function(){return{width:t,height:e}}},r.attrs,"fill",i);else{var o=hi(n),a=o.color,s=o.opacity;r.attrs.fill=a,s<1&&(r.attrs["fill-opacity"]=s)}return r}(n,i,this._backgroundColor,r);a&&o.push(a);var s=t.compress?null:this._mainVNode=sw("g","main",{},[]);this._paintList(e,r,s?s.children:o),s&&o.push(s);var l=z(G(r.defs),(function(t){return r.defs[t]}));if(l.length&&o.push(sw("defs","defs",{},l)),t.animation){var u=function(t,e,n){var i=(n=n||{}).newline?"\n":"",r=" {"+i,o=i+"}",a=z(G(t),(function(e){return e+r+z(G(t[e]),(function(n){return n+":"+t[e][n]+";"})).join(i)+o})).join(i),s=z(G(e),(function(t){return"@keyframes "+t+r+z(G(e[t]),(function(n){return n+r+z(G(e[t][n]),(function(i){var r=e[t][n][i];return"d"===i&&(r='path("'+r+'")'),i+":"+r+";"})).join(i)+o})).join(i)+o})).join(i);return a||s?[""].join(i):""}(r.cssNodes,r.cssAnims,{newline:!0});if(u){var h=sw("style","stl",{},[],u);o.push(h)}}return hw(n,i,o,t.useViewBox)},t.prototype.renderToString=function(t){return t=t||{},lw(this.renderToVNode({animation:rt(t.cssAnimation,!0),emphasis:rt(t.cssEmphasis,!0),willUpdate:!1,compress:!0,useViewBox:rt(t.useViewBox,!0)}),{newline:!0})},t.prototype.setBackgroundColor=function(t){this._backgroundColor=t},t.prototype.getSvgRoot=function(){return this._mainVNode&&this._mainVNode.elm},t.prototype._paintList=function(t,e,n){for(var i,r,o=t.length,a=[],s=0,l=0,u=0;u=0&&(!c||!r||c[f]!==r[f]);f--);for(var g=d-1;g>f;g--)i=a[--s-1];for(var y=f+1;y=a)}}for(var h=this.__startIndex;h15)break}n.prevElClipPaths&&u.restore()};if(p)if(0===p.length)s=l.__endIndex;else for(var _=d.dpr,b=0;b0&&t>i[0]){for(s=0;st);s++);a=n[i[s]]}if(i.splice(s+1,0,t),n[t]=e,!e.virtual)if(a){var l=a.dom;l.nextSibling?o.insertBefore(e.dom,l.nextSibling):o.appendChild(e.dom)}else o.firstChild?o.insertBefore(e.dom,o.firstChild):o.appendChild(e.dom);e.painter||(e.painter=this)}},t.prototype.eachLayer=function(t,e){for(var n=this._zlevelList,i=0;i0?uS:0),this._needsManuallyCompositing),u.__builtin__||I("ZLevel "+l+" has been used by unkown layer "+u.id),u!==o&&(u.__used=!0,u.__startIndex!==r&&(u.__dirty=!0),u.__startIndex=r,u.incremental?u.__drawIndex=-1:u.__drawIndex=r,e(r),o=u),1&s.__dirty&&!s.__inHover&&(u.__dirty=!0,u.incremental&&u.__drawIndex<0&&(u.__drawIndex=r))}e(r),this.eachBuiltinLayer((function(t,e){!t.__used&&t.getElementCount()>0&&(t.__dirty=!0,t.__startIndex=t.__endIndex=t.__drawIndex=0),t.__dirty&&t.__drawIndex<0&&(t.__drawIndex=t.__startIndex)}))},t.prototype.clear=function(){return this.eachBuiltinLayer(this._clearLayer),this},t.prototype._clearLayer=function(t){t.clear()},t.prototype.setBackgroundColor=function(t){this._backgroundColor=t,E(this._layers,(function(t){t.setUnpainted()}))},t.prototype.configLayer=function(t,e){if(e){var n=this._layerConfig;n[t]?C(n[t],e,!0):n[t]=e;for(var i=0;i-1&&(s.style.stroke=s.style.fill,s.style.fill="#fff",s.style.lineWidth=2),e},e.type="series.line",e.dependencies=["grid","polar"],e.defaultOption={z:3,coordinateSystem:"cartesian2d",legendHoverLink:!0,clip:!0,label:{position:"top"},endLabel:{show:!1,valueAnimation:!0,distance:8},lineStyle:{width:2,type:"solid"},emphasis:{scale:!0},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0,universalTransition:{divideShape:"clone"},triggerLineEvent:!1},e}(bg);function pS(t,e){var n=t.mapDimensionsAll("defaultedLabel"),i=n.length;if(1===i){var r=mf(t,e,n[0]);return null!=r?r+"":null}if(i){for(var o=[],a=0;a=0&&i.push(e[o])}return i.join(" ")}var fS=function(t){function e(e,n,i,r){var o=t.call(this)||this;return o.updateData(e,n,i,r),o}return n(e,t),e.prototype._createSymbol=function(t,e,n,i,r){this.removeAll();var o=Xy(t,-1,-1,2,2,null,r);o.attr({z2:100,culling:!0,scaleX:i[0]/2,scaleY:i[1]/2}),o.drift=gS,this._symbolType=t,this.add(o)},e.prototype.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(null,t)},e.prototype.getSymbolType=function(){return this._symbolType},e.prototype.getSymbolPath=function(){return this.childAt(0)},e.prototype.highlight=function(){Ol(this.childAt(0))},e.prototype.downplay=function(){Rl(this.childAt(0))},e.prototype.setZ=function(t,e){var n=this.childAt(0);n.zlevel=t,n.z=e},e.prototype.setDraggable=function(t,e){var n=this.childAt(0);n.draggable=t,n.cursor=!e&&t?"move":n.cursor},e.prototype.updateData=function(t,n,i,r){this.silent=!1;var o=t.getItemVisual(n,"symbol")||"circle",a=t.hostModel,s=e.getSymbolSize(t,n),l=o!==this._symbolType,u=r&&r.disableAnimation;if(l){var h=t.getItemVisual(n,"symbolKeepAspect");this._createSymbol(o,t,n,s,h)}else{(p=this.childAt(0)).silent=!1;var c={scaleX:s[0]/2,scaleY:s[1]/2};u?p.attr(c):vh(p,c,a,n),Sh(p)}if(this._updateCommon(t,n,s,i,r),l){var p=this.childAt(0);if(!u){c={scaleX:this._sizeX,scaleY:this._sizeY,style:{opacity:p.style.opacity}};p.scaleX=p.scaleY=0,p.style.opacity=0,mh(p,c,a,n)}}u&&this.childAt(0).stopAnimation("leave")},e.prototype._updateCommon=function(t,e,n,i,r){var o,a,s,l,u,h,c,p,d,f=this.childAt(0),g=t.hostModel;if(i&&(o=i.emphasisItemStyle,a=i.blurItemStyle,s=i.selectItemStyle,l=i.focus,u=i.blurScope,c=i.labelStatesModels,p=i.hoverScale,d=i.cursorStyle,h=i.emphasisDisabled),!i||t.hasItemOption){var y=i&&i.itemModel?i.itemModel:t.getItemModel(e),v=y.getModel("emphasis");o=v.getModel("itemStyle").getItemStyle(),s=y.getModel(["select","itemStyle"]).getItemStyle(),a=y.getModel(["blur","itemStyle"]).getItemStyle(),l=v.get("focus"),u=v.get("blurScope"),h=v.get("disabled"),c=rc(y),p=v.getShallow("scale"),d=y.getShallow("cursor")}var m=t.getItemVisual(e,"symbolRotate");f.attr("rotation",(m||0)*Math.PI/180||0);var x=Zy(t.getItemVisual(e,"symbolOffset"),n);x&&(f.x=x[0],f.y=x[1]),d&&f.attr("cursor",d);var _=t.getItemVisual(e,"style"),b=_.fill;if(f instanceof Ns){var w=f.style;f.useStyle(A({image:w.image,x:w.x,y:w.y,width:w.width,height:w.height},_))}else f.__isEmptyBrush?f.useStyle(A({},_)):f.useStyle(_),f.style.decal=null,f.setColor(b,r&&r.symbolInnerColor),f.style.strokeNoScale=!0;var S=t.getItemVisual(e,"liftZ"),M=this._z2;null!=S?null==M&&(this._z2=f.z2,f.z2+=S):null!=M&&(f.z2=M,this._z2=null);var I=r&&r.useNameLabel;ic(f,c,{labelFetcher:g,labelDataIndex:e,defaultText:function(e){return I?t.getName(e):pS(t,e)},inheritColor:b,defaultOpacity:_.opacity}),this._sizeX=n[0]/2,this._sizeY=n[1]/2;var T=f.ensureState("emphasis");T.style=o,f.ensureState("select").style=s,f.ensureState("blur").style=a;var C=null==p||!0===p?Math.max(1.1,3/this._sizeY):isFinite(p)&&p>0?+p:1;T.scaleX=this._sizeX*C,T.scaleY=this._sizeY*C,this.setSymbolScale(1),Zl(this,l,u,h)},e.prototype.setSymbolScale=function(t){this.scaleX=this.scaleY=t},e.prototype.fadeOut=function(t,e,n){var i=this.childAt(0),r=rl(this).dataIndex,o=n&&n.animation;if(this.silent=i.silent=!0,n&&n.fadeLabel){var a=i.getTextContent();a&&_h(a,{style:{opacity:0}},e,{dataIndex:r,removeOpt:o,cb:function(){i.removeTextContent()}})}else i.removeTextContent();_h(i,{style:{opacity:0},scaleX:0,scaleY:0},e,{dataIndex:r,cb:t,removeOpt:o})},e.getSymbolSize=function(t,e){return Uy(t.getItemVisual(e,"symbolSize"))},e}(Br);function gS(t,e){this.parent.drift(t,e)}function yS(t,e,n,i){return e&&!isNaN(e[0])&&!isNaN(e[1])&&!(i.isIgnore&&i.isIgnore(n))&&!(i.clipShape&&!i.clipShape.contain(e[0],e[1]))&&"none"!==t.getItemVisual(n,"symbol")}function vS(t){return null==t||q(t)||(t={isIgnore:t}),t||{}}function mS(t){var e=t.hostModel,n=e.getModel("emphasis");return{emphasisItemStyle:n.getModel("itemStyle").getItemStyle(),blurItemStyle:e.getModel(["blur","itemStyle"]).getItemStyle(),selectItemStyle:e.getModel(["select","itemStyle"]).getItemStyle(),focus:n.get("focus"),blurScope:n.get("blurScope"),emphasisDisabled:n.get("disabled"),hoverScale:n.get("scale"),labelStatesModels:rc(e),cursorStyle:e.get("cursor")}}var xS=function(){function t(t){this.group=new Br,this._SymbolCtor=t||fS}return t.prototype.updateData=function(t,e){this._progressiveEls=null,e=vS(e);var n=this.group,i=t.hostModel,r=this._data,o=this._SymbolCtor,a=e.disableAnimation,s=mS(t),l={disableAnimation:a},u=e.getSymbolPoint||function(e){return t.getItemLayout(e)};r||n.removeAll(),t.diff(r).add((function(i){var r=u(i);if(yS(t,r,i,e)){var a=new o(t,i,s,l);a.setPosition(r),t.setItemGraphicEl(i,a),n.add(a)}})).update((function(h,c){var p=r.getItemGraphicEl(c),d=u(h);if(yS(t,d,h,e)){var f=t.getItemVisual(h,"symbol")||"circle",g=p&&p.getSymbolType&&p.getSymbolType();if(!p||g&&g!==f)n.remove(p),(p=new o(t,h,s,l)).setPosition(d);else{p.updateData(t,h,s,l);var y={x:d[0],y:d[1]};a?p.attr(y):vh(p,y,i)}n.add(p),t.setItemGraphicEl(h,p)}else n.remove(p)})).remove((function(t){var e=r.getItemGraphicEl(t);e&&e.fadeOut((function(){n.remove(e)}),i)})).execute(),this._getSymbolPoint=u,this._data=t},t.prototype.updateLayout=function(){var t=this,e=this._data;e&&e.eachItemGraphicEl((function(e,n){var i=t._getSymbolPoint(n);e.setPosition(i),e.markRedraw()}))},t.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=mS(t),this._data=null,this.group.removeAll()},t.prototype.incrementalUpdate=function(t,e,n){function i(t){t.isGroup||(t.incremental=!0,t.ensureState("emphasis").hoverLayer=!0)}this._progressiveEls=[],n=vS(n);for(var r=t.start;r0?n=i[0]:i[1]<0&&(n=i[1]);return n}(r,n),a=i.dim,s=r.dim,l=e.mapDimension(s),u=e.mapDimension(a),h="x"===s||"radius"===s?1:0,c=z(t.dimensions,(function(t){return e.mapDimension(t)})),p=!1,d=e.getCalculationInfo("stackResultDimension");return mx(e,c[0])&&(p=!0,c[0]=d),mx(e,c[1])&&(p=!0,c[1]=d),{dataDimsForPoint:c,valueStart:o,valueAxisDim:s,baseAxisDim:a,stacked:!!p,valueDim:l,baseDim:u,baseDataOffset:h,stackedOverDimension:e.getCalculationInfo("stackedOverDimension")}}function bS(t,e,n,i){var r=NaN;t.stacked&&(r=n.get(n.getCalculationInfo("stackedOverDimension"),i)),isNaN(r)&&(r=t.valueStart);var o=t.baseDataOffset,a=[];return a[o]=n.get(t.baseDim,i),a[1-o]=r,e.dataToPoint(a)}var wS=Math.min,SS=Math.max;function MS(t,e){return isNaN(t)||isNaN(e)}function IS(t,e,n,i,r,o,a,s,l){for(var u,h,c,p,d,f,g=n,y=0;y=r||g<0)break;if(MS(v,m)){if(l){g+=o;continue}break}if(g===n)t[o>0?"moveTo":"lineTo"](v,m),c=v,p=m;else{var x=v-u,_=m-h;if(x*x+_*_<.5){g+=o;continue}if(a>0){for(var b=g+o,w=e[2*b],S=e[2*b+1];w===v&&S===m&&y=i||MS(w,S))d=v,f=m;else{T=w-u,C=S-h;var k=v-u,L=w-v,P=m-h,O=S-m,R=void 0,N=void 0;if("x"===s){var E=T>0?1:-1;d=v-E*(R=Math.abs(k))*a,f=m,D=v+E*(N=Math.abs(L))*a,A=m}else if("y"===s){var z=C>0?1:-1;d=v,f=m-z*(R=Math.abs(P))*a,D=v,A=m+z*(N=Math.abs(O))*a}else R=Math.sqrt(k*k+P*P),d=v-T*a*(1-(I=(N=Math.sqrt(L*L+O*O))/(N+R))),f=m-C*a*(1-I),A=m+C*a*I,D=wS(D=v+T*a*I,SS(w,v)),A=wS(A,SS(S,m)),D=SS(D,wS(w,v)),f=m-(C=(A=SS(A,wS(S,m)))-m)*R/N,d=wS(d=v-(T=D-v)*R/N,SS(u,v)),f=wS(f,SS(h,m)),D=v+(T=v-(d=SS(d,wS(u,v))))*N/R,A=m+(C=m-(f=SS(f,wS(h,m))))*N/R}t.bezierCurveTo(c,p,d,f,v,m),c=D,p=A}else t.lineTo(v,m)}u=v,h=m,g+=o}return y}var TS=function(){this.smooth=0,this.smoothConstraint=!0},CS=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-polyline",n}return n(e,t),e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new TS},e.prototype.buildPath=function(t,e){var n=e.points,i=0,r=n.length/2;if(e.connectNulls){for(;r>0&&MS(n[2*r-2],n[2*r-1]);r--);for(;i=0){var y=a?(h-i)*g+i:(u-n)*g+n;return a?[t,y]:[y,t]}n=u,i=h;break;case o.C:u=r[l++],h=r[l++],c=r[l++],p=r[l++],d=r[l++],f=r[l++];var v=a?_n(n,u,c,d,t,s):_n(i,h,p,f,t,s);if(v>0)for(var m=0;m=0){y=a?mn(i,h,p,f,x):mn(n,u,c,d,x);return a?[t,y]:[y,t]}}n=d,i=f}}},e}(ks),DS=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e}(TS),AS=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-polygon",n}return n(e,t),e.prototype.getDefaultShape=function(){return new DS},e.prototype.buildPath=function(t,e){var n=e.points,i=e.stackedOnPoints,r=0,o=n.length/2,a=e.smoothMonotone;if(e.connectNulls){for(;o>0&&MS(n[2*o-2],n[2*o-1]);o--);for(;r=0;a--){var s=t.getDimensionInfo(i[a].dimension);if("x"===(r=s&&s.coordDim)||"y"===r){o=i[a];break}}if(o){var l=e.getAxis(r),u=z(o.stops,(function(t){return{coord:l.toGlobalCoord(l.dataToCoord(t.value)),color:t.color}})),h=u.length,c=o.outerColors.slice();h&&u[0].coord>u[h-1].coord&&(u.reverse(),c.reverse());var p=function(t,e){var n,i,r=[],o=t.length;function a(t,e,n){var i=t.coord;return{coord:n,color:ti((n-i)/(e.coord-i),[t.color,e.color])}}for(var s=0;se){i?r.push(a(i,l,e)):n&&r.push(a(n,l,0),a(n,l,e));break}n&&(r.push(a(n,l,0)),n=null),r.push(l),i=l}}return r}(u,"x"===r?n.getWidth():n.getHeight()),d=p.length;if(!d&&h)return u[0].coord<0?c[1]?c[1]:u[h-1].color:c[0]?c[0]:u[0].color;var f=p[0].coord-10,g=p[d-1].coord+10,y=g-f;if(y<.001)return"transparent";E(p,(function(t){t.offset=(t.coord-f)/y})),p.push({offset:d?p[d-1].offset:.5,color:c[1]||"transparent"}),p.unshift({offset:d?p[0].offset:.5,color:c[0]||"transparent"});var v=new oh(0,0,0,0,p,!0);return v[r]=f,v[r+"2"]=g,v}}}function FS(t,e,n){var i=t.get("showAllSymbol"),r="auto"===i;if(!i||r){var o=n.getAxesByScale("ordinal")[0];if(o&&(!r||!function(t,e){var n=t.getExtent(),i=Math.abs(n[1]-n[0])/t.scale.count();isNaN(i)&&(i=0);for(var r=e.count(),o=Math.max(1,Math.round(r/5)),a=0;ai)return!1;return!0}(o,e))){var a=e.mapDimension(o.dim),s={};return E(o.getViewLabels(),(function(t){var e=o.scale.getRawOrdinalNumber(t.tickValue);s[e]=1})),function(t){return!s.hasOwnProperty(e.get(a,t))}}}}function GS(t,e){return[t[2*e],t[2*e+1]]}function WS(t){if(t.get(["endLabel","show"]))return!0;for(var e=0;e0&&"bolder"===t.get(["emphasis","lineStyle","width"]))&&(d.getState("emphasis").style.lineWidth=+d.style.lineWidth+1);rl(d).seriesIndex=t.seriesIndex,Zl(d,L,P,O);var R=zS(t.get("smooth")),N=t.get("smoothMonotone");if(d.setShape({smooth:R,smoothMonotone:N,connectNulls:w}),f){var E=a.getCalculationInfo("stackedOnSeries"),z=0;f.useStyle(k(l.getAreaStyle(),{fill:C,opacity:.7,lineJoin:"bevel",decal:a.getVisual("style").decal})),E&&(z=zS(E.get("smooth"))),f.setShape({smooth:R,stackedOnSmooth:z,smoothMonotone:N,connectNulls:w}),$l(f,t,"areaStyle"),rl(f).seriesIndex=t.seriesIndex,Zl(f,L,P,O)}var V=function(t){i._changePolyState(t)};a.eachItemGraphicEl((function(t){t&&(t.onHoverStateChange=V)})),this._polyline.onHoverStateChange=V,this._data=a,this._coordSys=r,this._stackedOnPoints=_,this._points=u,this._step=T,this._valueOrigin=m,t.get("triggerLineEvent")&&(this.packEventData(t,d),f&&this.packEventData(t,f))},e.prototype.packEventData=function(t,e){rl(e).eventData={componentType:"series",componentSubType:"line",componentIndex:t.componentIndex,seriesIndex:t.seriesIndex,seriesName:t.name,seriesType:"line"}},e.prototype.highlight=function(t,e,n,i){var r=t.getData(),o=zo(r,i);if(this._changePolyState("emphasis"),!(o instanceof Array)&&null!=o&&o>=0){var a=r.getLayout("points"),s=r.getItemGraphicEl(o);if(!s){var l=a[2*o],u=a[2*o+1];if(isNaN(l)||isNaN(u))return;if(this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(l,u))return;var h=t.get("zlevel")||0,c=t.get("z")||0;(s=new fS(r,o)).x=l,s.y=u,s.setZ(h,c);var p=s.getSymbolPath().getTextContent();p&&(p.zlevel=h,p.z=c,p.z2=this._polyline.z2+1),s.__temp=!0,r.setItemGraphicEl(o,s),s.stopSymbolAnimation(!0),this.group.add(s)}s.highlight()}else Og.prototype.highlight.call(this,t,e,n,i)},e.prototype.downplay=function(t,e,n,i){var r=t.getData(),o=zo(r,i);if(this._changePolyState("normal"),null!=o&&o>=0){var a=r.getItemGraphicEl(o);a&&(a.__temp?(r.setItemGraphicEl(o,null),this.group.remove(a)):a.downplay())}else Og.prototype.downplay.call(this,t,e,n,i)},e.prototype._changePolyState=function(t){var e=this._polygon;Dl(this._polyline,t),e&&Dl(e,t)},e.prototype._newPolyline=function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new CS({shape:{points:t},segmentIgnoreThreshold:2,z2:10}),this._lineGroup.add(e),this._polyline=e,e},e.prototype._newPolygon=function(t,e){var n=this._polygon;return n&&this._lineGroup.remove(n),n=new AS({shape:{points:t,stackedOnPoints:e},segmentIgnoreThreshold:2}),this._lineGroup.add(n),this._polygon=n,n},e.prototype._initSymbolLabelAnimation=function(t,e,n){var i,r,o=e.getBaseAxis(),a=o.inverse;"cartesian2d"===e.type?(i=o.isHorizontal(),r=!1):"polar"===e.type&&(i="angle"===o.dim,r=!0);var s=t.hostModel,l=s.get("animationDuration");X(l)&&(l=l(null));var u=s.get("animationDelay")||0,h=X(u)?u(null):u;t.eachItemGraphicEl((function(t,o){var s=t;if(s){var c=[t.x,t.y],p=void 0,d=void 0,f=void 0;if(n)if(r){var g=n,y=e.pointToCoord(c);i?(p=g.startAngle,d=g.endAngle,f=-y[1]/180*Math.PI):(p=g.r0,d=g.r,f=y[0])}else{var v=n;i?(p=v.x,d=v.x+v.width,f=t.x):(p=v.y+v.height,d=v.y,f=t.y)}var m=d===p?0:(f-p)/(d-p);a&&(m=1-m);var x=X(u)?u(o):l*m+h,_=s.getSymbolPath(),b=_.getTextContent();s.attr({scaleX:0,scaleY:0}),s.animateTo({scaleX:1,scaleY:1},{duration:200,setToFinal:!0,delay:x}),b&&b.animateFrom({style:{opacity:0}},{duration:300,delay:x}),_.disableLabelAnimation=!0}}))},e.prototype._initOrUpdateEndLabel=function(t,e,n){var i=t.getModel("endLabel");if(WS(t)){var r=t.getData(),o=this._polyline,a=r.getLayout("points");if(!a)return o.removeTextContent(),void(this._endLabel=null);var s=this._endLabel;s||((s=this._endLabel=new Xs({z2:200})).ignoreClip=!0,o.setTextContent(this._endLabel),o.disableLabelAnimation=!0);var l=function(t){for(var e,n,i=t.length/2;i>0&&(e=t[2*i-2],n=t[2*i-1],isNaN(e)||isNaN(n));i--);return i-1}(a);l>=0&&(ic(o,rc(t,"endLabel"),{inheritColor:n,labelFetcher:t,labelDataIndex:l,defaultText:function(t,e,n){return null!=n?dS(r,n):pS(r,t)},enableTextSetter:!0},function(t,e){var n=e.getBaseAxis(),i=n.isHorizontal(),r=n.inverse,o=i?r?"right":"left":"center",a=i?"middle":r?"top":"bottom";return{normal:{align:t.get("align")||o,verticalAlign:t.get("verticalAlign")||a}}}(i,e)),o.textConfig.position=null)}else this._endLabel&&(this._polyline.removeTextContent(),this._endLabel=null)},e.prototype._endLabelOnDuring=function(t,e,n,i,r,o,a){var s=this._endLabel,l=this._polyline;if(s){t<1&&null==i.originalX&&(i.originalX=s.x,i.originalY=s.y);var u=n.getLayout("points"),h=n.hostModel,c=h.get("connectNulls"),p=o.get("precision"),d=o.get("distance")||0,f=a.getBaseAxis(),g=f.isHorizontal(),y=f.inverse,v=e.shape,m=y?g?v.x:v.y+v.height:g?v.x+v.width:v.y,x=(g?d:0)*(y?-1:1),_=(g?0:-d)*(y?-1:1),b=g?"x":"y",w=function(t,e,n){for(var i,r,o=t.length/2,a="x"===n?0:1,s=0,l=-1,u=0;u=e||i>=e&&r<=e){l=u;break}s=u,i=r}else i=r;return{range:[s,l],t:(e-i)/(r-i)}}(u,m,b),S=w.range,M=S[1]-S[0],I=void 0;if(M>=1){if(M>1&&!c){var T=GS(u,S[0]);s.attr({x:T[0]+x,y:T[1]+_}),r&&(I=h.getRawValue(S[0]))}else{(T=l.getPointOn(m,b))&&s.attr({x:T[0]+x,y:T[1]+_});var C=h.getRawValue(S[0]),D=h.getRawValue(S[1]);r&&(I=Zo(n,p,C,D,w.t))}i.lastFrameIndex=S[0]}else{var A=1===t||i.lastFrameIndex>0?S[0]:0;T=GS(u,A);r&&(I=h.getRawValue(A)),s.attr({x:T[0]+x,y:T[1]+_})}if(r){var k=pc(s);"function"==typeof k.setLabelText&&k.setLabelText(I)}}},e.prototype._doUpdateAnimation=function(t,e,n,i,r,o,a){var s=this._polyline,l=this._polygon,u=t.hostModel,h=function(t,e,n,i,r,o,a,s){for(var l=function(t,e){var n=[];return e.diff(t).add((function(t){n.push({cmd:"+",idx:t})})).update((function(t,e){n.push({cmd:"=",idx:e,idx1:t})})).remove((function(t){n.push({cmd:"-",idx:t})})).execute(),n}(t,e),u=[],h=[],c=[],p=[],d=[],f=[],g=[],y=_S(r,e,a),v=t.getLayout("points")||[],m=e.getLayout("points")||[],x=0;x3e3||l&&ES(p,f)>3e3)return s.stopAnimation(),s.setShape({points:d}),void(l&&(l.stopAnimation(),l.setShape({points:d,stackedOnPoints:f})));s.shape.__points=h.current,s.shape.points=c;var g={shape:{points:d}};h.current!==c&&(g.shape.__points=h.next),s.stopAnimation(),vh(s,g,u),l&&(l.setShape({points:c,stackedOnPoints:p}),l.stopAnimation(),vh(l,{shape:{stackedOnPoints:f}},u),s.shape.points!==l.shape.points&&(l.shape.points=s.shape.points));for(var y=[],v=h.status,m=0;me&&(e=t[n]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,n=0;ne&&(e=o,n=r)}return isFinite(n)?n:NaN},nearest:function(t){return t[0]}},ZS=function(t){return Math.round(t.length/2)};function jS(t){return{seriesType:t,reset:function(t,e,n){var i=t.getData(),r=t.get("sampling"),o=t.coordinateSystem,a=i.count();if(a>10&&"cartesian2d"===o.type&&r){var s=o.getBaseAxis(),l=o.getOtherAxis(s),u=s.getExtent(),h=n.getDevicePixelRatio(),c=Math.abs(u[1]-u[0])*(h||1),p=Math.round(a/c);if(isFinite(p)&&p>1){"lttb"===r&&t.setData(i.lttbDownSample(i.mapDimension(l.dim),1/p));var d=void 0;U(r)?d=US[r]:X(r)&&(d=r),d&&t.setData(i.downSample(i.mapDimension(l.dim),1/p,d,ZS))}}}}}var qS=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.getInitialData=function(t,e){return _x(null,this,{useEncodeDefaulter:!0})},e.prototype.getMarkerPosition=function(t,e,n){var i=this.coordinateSystem;if(i&&i.clampData){var r=i.clampData(t),o=i.dataToPoint(r);if(n)E(i.getAxes(),(function(t,n){if("category"===t.type&&null!=e){var i=t.getTicksCoords(),a=t.getTickModel().get("alignWithLabel"),s=r[n],l="x1"===e[n]||"y1"===e[n];if(l&&!a&&(s+=1),i.length<2)return;if(2===i.length)return void(o[n]=t.toGlobalCoord(t.getExtent()[l?1:0]));for(var u=void 0,h=void 0,c=1,p=0;ps){h=(d+u)/2;break}1===p&&(c=f-i[0].tickValue)}null==h&&(u?u&&(h=i[i.length-1].coord):h=i[0].coord),o[n]=t.toGlobalCoord(h)}}));else{var a=this.getData(),s=a.getLayout("offset"),l=a.getLayout("size"),u=i.getBaseAxis().isHorizontal()?0:1;o[u]+=s+l/2}return o}return[NaN,NaN]},e.type="series.__base_bar__",e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod"},e}(bg);bg.registerClass(qS);var KS=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.getInitialData=function(){return _x(null,this,{useEncodeDefaulter:!0,createInvertedIndices:!!this.get("realtimeSort",!0)||null})},e.prototype.getProgressive=function(){return!!this.get("large")&&this.get("progressive")},e.prototype.getProgressiveThreshold=function(){var t=this.get("progressiveThreshold"),e=this.get("largeThreshold");return e>t&&(t=e),t},e.prototype.brushSelector=function(t,e,n){return n.rect(e.getItemLayout(t))},e.type="series.bar",e.dependencies=["grid","polar"],e.defaultOption=kc(qS.defaultOption,{clip:!0,roundCap:!1,showBackground:!1,backgroundStyle:{color:"rgba(180, 180, 180, 0.2)",borderColor:null,borderWidth:0,borderType:"solid",borderRadius:0,shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,opacity:1},select:{itemStyle:{borderColor:"#212121"}},realtimeSort:!1}),e}(qS),$S=function(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=2*Math.PI,this.clockwise=!0},JS=function(t){function e(e){var n=t.call(this,e)||this;return n.type="sausage",n}return n(e,t),e.prototype.getDefaultShape=function(){return new $S},e.prototype.buildPath=function(t,e){var n=e.cx,i=e.cy,r=Math.max(e.r0||0,0),o=Math.max(e.r,0),a=.5*(o-r),s=r+a,l=e.startAngle,u=e.endAngle,h=e.clockwise,c=2*Math.PI,p=h?u-lo)return!0;o=u}return!1},e.prototype._isOrderDifferentInView=function(t,e){for(var n=e.scale,i=n.getExtent(),r=Math.max(0,i[0]),o=Math.min(i[1],n.getOrdinalMeta().categories.length-1);r<=o;++r)if(t.ordinalNumbers[r]!==n.getRawOrdinalNumber(r))return!0},e.prototype._updateSortWithinSameData=function(t,e,n,i){if(this._isOrderChangedWithinSameData(t,e,n)){var r=this._dataSort(t,n,e);this._isOrderDifferentInView(r,n)&&(this._removeOnRenderedListener(i),i.dispatchAction({type:"changeAxisOrder",componentType:n.dim+"Axis",axisId:n.index,sortInfo:r}))}},e.prototype._dispatchInitSort=function(t,e,n){var i=e.baseAxis,r=this._dataSort(t,i,(function(n){return t.get(t.mapDimension(e.otherAxis.dim),n)}));n.dispatchAction({type:"changeAxisOrder",componentType:i.dim+"Axis",isInitSort:!0,axisId:i.index,sortInfo:r})},e.prototype.remove=function(t,e){this._clear(this._model),this._removeOnRenderedListener(e)},e.prototype.dispose=function(t,e){this._removeOnRenderedListener(e)},e.prototype._removeOnRenderedListener=function(t){this._onRendered&&(t.getZr().off("rendered",this._onRendered),this._onRendered=null)},e.prototype._clear=function(t){var e=this.group,n=this._data;t&&t.isAnimationEnabled()&&n&&!this._isLargeDraw?(this._removeBackground(),this._backgroundEls=[],n.eachItemGraphicEl((function(e){wh(e,t,rl(e).dataIndex)}))):e.removeAll(),this._data=null,this._isFirstFrame=!0},e.prototype._removeBackground=function(){this.group.remove(this._backgroundGroup),this._backgroundGroup=null},e.type="bar",e}(Og),oM={cartesian2d:function(t,e){var n=e.width<0?-1:1,i=e.height<0?-1:1;n<0&&(e.x+=e.width,e.width=-e.width),i<0&&(e.y+=e.height,e.height=-e.height);var r=t.x+t.width,o=t.y+t.height,a=nM(e.x,t.x),s=iM(e.x+e.width,r),l=nM(e.y,t.y),u=iM(e.y+e.height,o),h=sr?s:a,e.y=c&&l>o?u:l,e.width=h?0:s-a,e.height=c?0:u-l,n<0&&(e.x+=e.width,e.width=-e.width),i<0&&(e.y+=e.height,e.height=-e.height),h||c},polar:function(t,e){var n=e.r0<=e.r?1:-1;if(n<0){var i=e.r;e.r=e.r0,e.r0=i}var r=iM(e.r,t.r),o=nM(e.r0,t.r0);e.r=r,e.r0=o;var a=r-o<0;if(n<0){i=e.r;e.r=e.r0,e.r0=i}return a}},aM={cartesian2d:function(t,e,n,i,r,o,a,s,l){var u=new Ws({shape:A({},i),z2:1});(u.__dataIndex=n,u.name="item",o)&&(u.shape[r?"height":"width"]=0);return u},polar:function(t,e,n,i,r,o,a,s,l){var u=!r&&l?JS:Fu,h=new u({shape:i,z2:1});h.name="item";var c,p,d=dM(r);if(h.calculateTextPosition=(c=d,p=({isRoundCap:u===JS}||{}).isRoundCap,function(t,e,n){var i=e.position;if(!i||i instanceof Array)return Dr(t,e,n);var r=c(i),o=null!=e.distance?e.distance:5,a=this.shape,s=a.cx,l=a.cy,u=a.r,h=a.r0,d=(u+h)/2,f=a.startAngle,g=a.endAngle,y=(f+g)/2,v=p?Math.abs(u-h)/2:0,m=Math.cos,x=Math.sin,_=s+u*m(f),b=l+u*x(f),w="left",S="top";switch(r){case"startArc":_=s+(h-o)*m(y),b=l+(h-o)*x(y),w="center",S="top";break;case"insideStartArc":_=s+(h+o)*m(y),b=l+(h+o)*x(y),w="center",S="bottom";break;case"startAngle":_=s+d*m(f)+QS(f,o+v,!1),b=l+d*x(f)+tM(f,o+v,!1),w="right",S="middle";break;case"insideStartAngle":_=s+d*m(f)+QS(f,-o+v,!1),b=l+d*x(f)+tM(f,-o+v,!1),w="left",S="middle";break;case"middle":_=s+d*m(y),b=l+d*x(y),w="center",S="middle";break;case"endArc":_=s+(u+o)*m(y),b=l+(u+o)*x(y),w="center",S="bottom";break;case"insideEndArc":_=s+(u-o)*m(y),b=l+(u-o)*x(y),w="center",S="top";break;case"endAngle":_=s+d*m(g)+QS(g,o+v,!0),b=l+d*x(g)+tM(g,o+v,!0),w="left",S="middle";break;case"insideEndAngle":_=s+d*m(g)+QS(g,-o+v,!0),b=l+d*x(g)+tM(g,-o+v,!0),w="right",S="middle";break;default:return Dr(t,e,n)}return(t=t||{}).x=_,t.y=b,t.align=w,t.verticalAlign=S,t}),o){var f=r?"r":"endAngle",g={};h.shape[f]=r?i.r0:i.startAngle,g[f]=i[f],(s?vh:mh)(h,{shape:g},o)}return h}};function sM(t,e,n,i,r,o,a,s){var l,u;o?(u={x:i.x,width:i.width},l={y:i.y,height:i.height}):(u={y:i.y,height:i.height},l={x:i.x,width:i.width}),s||(a?vh:mh)(n,{shape:l},e,r,null),(a?vh:mh)(n,{shape:u},e?t.baseAxis.model:null,r)}function lM(t,e){for(var n=0;n0?1:-1,a=i.height>0?1:-1;return{x:i.x+o*r/2,y:i.y+a*r/2,width:i.width-o*r,height:i.height-a*r}},polar:function(t,e,n){var i=t.getItemLayout(e);return{cx:i.cx,cy:i.cy,r0:i.r0,r:i.r,startAngle:i.startAngle,endAngle:i.endAngle,clockwise:i.clockwise}}};function dM(t){return function(t){var e=t?"Arc":"Angle";return function(t){switch(t){case"start":case"insideStart":case"end":case"insideEnd":return t+e;default:return t}}}(t)}function fM(t,e,n,i,r,o,a,s){var l=e.getItemVisual(n,"style");if(s){if(!o.get("roundCap")){var u=t.shape;A(u,eM(i.getModel("itemStyle"),u,!0)),t.setShape(u)}}else{var h=i.get(["itemStyle","borderRadius"])||0;t.setShape("r",h)}t.useStyle(l);var c=i.getShallow("cursor");c&&t.attr("cursor",c);var p=s?a?r.r>=r.r0?"endArc":"startArc":r.endAngle>=r.startAngle?"endAngle":"startAngle":a?r.height>=0?"bottom":"top":r.width>=0?"right":"left",d=rc(i);ic(t,d,{labelFetcher:o,labelDataIndex:n,defaultText:pS(o.getData(),n),inheritColor:l.fill,defaultOpacity:l.opacity,defaultOutsidePosition:p});var f=t.getTextContent();if(s&&f){var g=i.get(["label","position"]);t.textConfig.inside="middle"===g||null,function(t,e,n,i){if(j(i))t.setTextConfig({rotation:i});else if(Y(e))t.setTextConfig({rotation:0});else{var r,o=t.shape,a=o.clockwise?o.startAngle:o.endAngle,s=o.clockwise?o.endAngle:o.startAngle,l=(a+s)/2,u=n(e);switch(u){case"startArc":case"insideStartArc":case"middle":case"insideEndArc":case"endArc":r=l;break;case"startAngle":case"insideStartAngle":r=a;break;case"endAngle":case"insideEndAngle":r=s;break;default:return void t.setTextConfig({rotation:0})}var h=1.5*Math.PI-r;"middle"===u&&h>Math.PI/2&&h<1.5*Math.PI&&(h-=Math.PI),t.setTextConfig({rotation:h})}}(t,"outside"===g?p:g,dM(a),i.get(["label","rotate"]))}dc(f,d,o.getRawValue(n),(function(t){return dS(e,t)}));var y=i.getModel(["emphasis"]);Zl(t,y.get("focus"),y.get("blurScope"),y.get("disabled")),$l(t,i),function(t){return null!=t.startAngle&&null!=t.endAngle&&t.startAngle===t.endAngle}(r)&&(t.style.fill="none",t.style.stroke="none",E(t.states,(function(t){t.style&&(t.style.fill=t.style.stroke="none")})))}var gM=function(){},yM=function(t){function e(e){var n=t.call(this,e)||this;return n.type="largeBar",n}return n(e,t),e.prototype.getDefaultShape=function(){return new gM},e.prototype.buildPath=function(t,e){for(var n=e.points,i=this.baseDimIdx,r=1-this.baseDimIdx,o=[],a=[],s=this.barWidth,l=0;l=s[0]&&e<=s[0]+l[0]&&n>=s[1]&&n<=s[1]+l[1])return a[h]}return-1}(this,t.offsetX,t.offsetY);rl(this).dataIndex=e>=0?e:null}),30,!1);function xM(t,e,n){if(OS(n,"cartesian2d")){var i=e,r=n.getArea();return{x:t?i.x:r.x,y:t?r.y:i.y,width:t?i.width:r.width,height:t?r.height:i.height}}var o=e;return{cx:(r=n.getArea()).cx,cy:r.cy,r0:t?r.r0:o.r0,r:t?r.r:o.r,startAngle:t?o.startAngle:0,endAngle:t?o.endAngle:2*Math.PI}}var _M=2*Math.PI,bM=Math.PI/180;function wM(t,e){return kp(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function SM(t,e){var n=wM(t,e),i=t.get("center"),r=t.get("radius");Y(r)||(r=[0,r]);var o,a,s=$r(n.width,e.getWidth()),l=$r(n.height,e.getHeight()),u=Math.min(s,l),h=$r(r[0],u/2),c=$r(r[1],u/2),p=t.coordinateSystem;if(p){var d=p.dataToPoint(i);o=d[0]||0,a=d[1]||0}else Y(i)||(i=[i,i]),o=$r(i[0],s)+n.x,a=$r(i[1],l)+n.y;return{cx:o,cy:a,r0:h,r:c}}function MM(t,e,n){e.eachSeriesByType(t,(function(t){var e=t.getData(),i=e.mapDimension("value"),r=wM(t,n),o=SM(t,n),a=o.cx,s=o.cy,l=o.r,u=o.r0,h=-t.get("startAngle")*bM,c=t.get("endAngle"),p=t.get("padAngle")*bM;c="auto"===c?h-_M:-c*bM;var d=t.get("minAngle")*bM+p,f=0;e.each(i,(function(t){!isNaN(t)&&f++}));var g=e.getSum(i),y=Math.PI/(g||f)*2,v=t.get("clockwise"),m=t.get("roseType"),x=t.get("stillShowZeroSum"),_=e.getDataExtent(i);_[0]=0;var b=v?1:-1,w=[h,c],S=b*p/2;us(w,!v),h=w[0],c=w[1];var M=IM(t);M.startAngle=h,M.endAngle=c,M.clockwise=v;var I=Math.abs(c-h),T=I,C=0,D=h;if(e.setLayout({viewRect:r,r:l}),e.each(i,(function(t,n){var i;if(isNaN(t))e.setItemLayout(n,{angle:NaN,startAngle:NaN,endAngle:NaN,clockwise:v,cx:a,cy:s,r0:u,r:m?NaN:l});else{(i="area"!==m?0===g&&x?y:t*y:I/f)i?h=o=D+b*i/2:(o=D+S,h=r-S),e.setItemLayout(n,{angle:i,startAngle:o,endAngle:h,clockwise:v,cx:a,cy:s,r0:u,r:m?Kr(t,_,[u,l]):l}),D=r}})),T<_M&&f)if(T<=.001){var A=I/f;e.each(i,(function(t,n){if(!isNaN(t)){var i=e.getItemLayout(n);i.angle=A;var r=0,o=0;An?a:o,h=Math.abs(l.label.y-n);if(h>=u.maxY){var c=l.label.x-e-l.len2*r,p=i+l.len,f=Math.abs(c)t.unconstrainedWidth?null:d:null;i.setStyle("width",f)}var g=i.getBoundingRect();o.width=g.width;var y=(i.style.margin||0)+2.1;o.height=g.height+y,o.y-=(o.height-c)/2}}}function kM(t){return"center"===t.position}function LM(t){var e,n,i=t.getData(),r=[],o=!1,a=(t.get("minShowLabelAngle")||0)*CM,s=i.getLayout("viewRect"),l=i.getLayout("r"),u=s.width,h=s.x,c=s.y,p=s.height;function d(t){t.ignore=!0}i.each((function(t){var s=i.getItemGraphicEl(t),c=s.shape,p=s.getTextContent(),f=s.getTextGuideLine(),g=i.getItemModel(t),y=g.getModel("label"),v=y.get("position")||g.get(["emphasis","label","position"]),m=y.get("distanceToLabelLine"),x=y.get("alignTo"),_=$r(y.get("edgeDistance"),u),b=y.get("bleedMargin"),w=g.getModel("labelLine"),S=w.get("length");S=$r(S,u);var M=w.get("length2");if(M=$r(M,u),Math.abs(c.endAngle-c.startAngle)0?"right":"left":k>0?"left":"right"}var B=Math.PI,F=0,G=y.get("rotate");if(j(G))F=G*(B/180);else if("center"===v)F=0;else if("radial"===G||!0===G){F=k<0?-A+B:-A}else if("tangential"===G&&"outside"!==v&&"outer"!==v){var W=Math.atan2(k,L);W<0&&(W=2*B+W),L>0&&(W=B+W),F=W-B}if(o=!!F,p.x=I,p.y=T,p.rotation=F,p.setStyle({verticalAlign:"middle"}),P){p.setStyle({align:D});var H=p.states.select;H&&(H.x+=p.x,H.y+=p.y)}else{var Y=p.getBoundingRect().clone();Y.applyTransform(p.getComputedTransform());var X=(p.style.margin||0)+2.1;Y.y-=X/2,Y.height+=X,r.push({label:p,labelLine:f,position:v,len:S,len2:M,minTurnAngle:w.get("minTurnAngle"),maxSurfaceAngle:w.get("maxSurfaceAngle"),surfaceNormal:new De(k,L),linePoints:C,textAlign:D,labelDistance:m,labelAlignTo:x,edgeDistance:_,bleedMargin:b,rect:Y,unconstrainedWidth:Y.width,labelStyleWidth:p.style.width})}s.setTextConfig({inside:P})}})),!o&&t.get("avoidLabelOverlap")&&function(t,e,n,i,r,o,a,s){for(var l=[],u=[],h=Number.MAX_VALUE,c=-Number.MAX_VALUE,p=0;p0){for(var l=o.getItemLayout(0),u=1;isNaN(l&&l.startAngle)&&u=n.r0}},e.type="pie",e}(Og);function RM(t,e,n){e=Y(e)&&{coordDimensions:e}||A({encodeDefine:t.getEncode()},e);var i=t.getSource(),r=px(i,e).dimensions,o=new cx(r,t);return o.initData(i,n),o}var NM=function(){function t(t,e){this._getDataWithEncodedVisual=t,this._getRawData=e}return t.prototype.getAllNames=function(){var t=this._getRawData();return t.mapArray(t.getName)},t.prototype.containName=function(t){return this._getRawData().indexOfName(t)>=0},t.prototype.indexOfName=function(t){return this._getDataWithEncodedVisual().indexOfName(t)},t.prototype.getItemVisual=function(t,e){return this._getDataWithEncodedVisual().getItemVisual(t,e)},t}(),EM=Vo(),zM=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments),this.legendVisualProvider=new NM(W(this.getData,this),W(this.getRawData,this)),this._defaultLabelLine(e)},e.prototype.mergeOption=function(){t.prototype.mergeOption.apply(this,arguments)},e.prototype.getInitialData=function(){return RM(this,{coordDimensions:["value"],encodeDefaulter:H(ed,this)})},e.prototype.getDataParams=function(e){var n=this.getData(),i=EM(n),r=i.seats;if(!r){var o=[];n.each(n.mapDimension("value"),(function(t){o.push(t)})),r=i.seats=io(o,n.hostModel.get("percentPrecision"))}var a=t.prototype.getDataParams.call(this,e);return a.percent=r[e]||0,a.$vars.push("percent"),a},e.prototype._defaultLabelLine=function(t){Co(t,"labelLine",["show"]);var e=t.labelLine,n=t.emphasis.labelLine;e.show=e.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},e.type="series.pie",e.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,endAngle:"auto",padAngle:0,minAngle:0,minShowLabelAngle:0,selectedOffset:10,percentPrecision:2,stillShowZeroSum:!0,left:0,top:0,right:0,bottom:0,width:null,height:null,label:{rotate:0,show:!0,overflow:"truncate",position:"outer",alignTo:"none",edgeDistance:"25%",bleedMargin:10,distanceToLabelLine:5},labelLine:{show:!0,length:15,length2:15,smooth:!1,minTurnAngle:90,maxSurfaceAngle:90,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1,borderJoin:"round"},showEmptyCircle:!0,emptyCircleStyle:{color:"lightgray",opacity:1},labelLayout:{hideOverlap:!0},emphasis:{scale:!0,scaleSize:5},avoidLabelOverlap:!0,animationType:"expansion",animationDuration:1e3,animationTypeUpdate:"transition",animationEasingUpdate:"cubicInOut",animationDurationUpdate:500,animationEasing:"cubicInOut"},e}(bg);var VM=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n}return n(e,t),e.prototype.getInitialData=function(t,e){return _x(null,this,{useEncodeDefaulter:!0})},e.prototype.getProgressive=function(){var t=this.option.progressive;return null==t?this.option.large?5e3:this.get("progressive"):t},e.prototype.getProgressiveThreshold=function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?1e4:this.get("progressiveThreshold"):t},e.prototype.brushSelector=function(t,e,n){return n.point(e.getItemLayout(t))},e.prototype.getZLevelKey=function(){return this.getData().count()>this.getProgressiveThreshold()?this.id:""},e.type="series.scatter",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{opacity:.8},emphasis:{scale:!0},clip:!0,select:{itemStyle:{borderColor:"#212121"}},universalTransition:{divideShape:"clone"}},e}(bg),BM=function(){},FM=function(t){function e(e){var n=t.call(this,e)||this;return n._off=0,n.hoverDataIdx=-1,n}return n(e,t),e.prototype.getDefaultShape=function(){return new BM},e.prototype.reset=function(){this.notClear=!1,this._off=0},e.prototype.buildPath=function(t,e){var n,i=e.points,r=e.size,o=this.symbolProxy,a=o.shape,s=t.getContext?t.getContext():t,l=s&&r[0]<4,u=this.softClipShape;if(l)this._ctx=s;else{for(this._ctx=null,n=this._off;n=0;s--){var l=2*s,u=i[l]-o/2,h=i[l+1]-a/2;if(t>=u&&e>=h&&t<=u+o&&e<=h+a)return s}return-1},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect();return t=n[0],e=n[1],i.contain(t,e)?(this.hoverDataIdx=this.findDataIndex(t,e))>=0:(this.hoverDataIdx=-1,!1)},e.prototype.getBoundingRect=function(){var t=this._rect;if(!t){for(var e=this.shape,n=e.points,i=e.size,r=i[0],o=i[1],a=1/0,s=1/0,l=-1/0,u=-1/0,h=0;h=0&&(l.dataIndex=n+(t.startIndex||0))}))},t.prototype.remove=function(){this._clear()},t.prototype._clear=function(){this._newAdded=[],this.group.removeAll()},t}(),WM=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=t.getData();this._updateSymbolDraw(i,t).updateData(i,{clipShape:this._getClipShape(t)}),this._finished=!0},e.prototype.incrementalPrepareRender=function(t,e,n){var i=t.getData();this._updateSymbolDraw(i,t).incrementalPrepareUpdate(i),this._finished=!1},e.prototype.incrementalRender=function(t,e,n){this._symbolDraw.incrementalUpdate(t,e.getData(),{clipShape:this._getClipShape(e)}),this._finished=t.end===e.getData().count()},e.prototype.updateTransform=function(t,e,n){var i=t.getData();if(this.group.dirty(),!this._finished||i.count()>1e4)return{update:!0};var r=XS("").reset(t,e,n);r.progress&&r.progress({start:0,end:i.count(),count:i.count()},i),this._symbolDraw.updateLayout(i)},e.prototype.eachRendered=function(t){this._symbolDraw&&this._symbolDraw.eachRendered(t)},e.prototype._getClipShape=function(t){if(t.get("clip",!0)){var e=t.coordinateSystem;return e&&e.getArea&&e.getArea(.1)}},e.prototype._updateSymbolDraw=function(t,e){var n=this._symbolDraw,i=e.pipelineContext.large;return n&&i===this._isLargeDraw||(n&&n.remove(),n=this._symbolDraw=i?new GM:new xS,this._isLargeDraw=i,this.group.removeAll()),this.group.add(n.group),n},e.prototype.remove=function(t,e){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},e.prototype.dispose=function(){},e.type="scatter",e}(Og),HM=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.type="grid",e.dependencies=["xAxis","yAxis"],e.layoutMode="box",e.defaultOption={show:!1,z:0,left:"10%",top:60,right:"10%",bottom:70,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"},e}(zp),YM=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getCoordSysModel=function(){return this.getReferringComponents("grid",Wo).models[0]},e.type="cartesian2dAxis",e}(zp);R(YM,D_);var XM={show:!0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#6E7079",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#E0E6F1"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(210,219,238,0.2)"]}}},UM=C({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},XM),ZM=C({boundaryGap:[0,0],axisLine:{show:"auto"},axisTick:{show:"auto"},splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#F4F7FD",width:1}}},XM),jM={category:UM,value:ZM,time:C({splitNumber:6,axisLabel:{showMinLabel:!1,showMaxLabel:!1,rich:{primary:{fontWeight:"bold"}}},splitLine:{show:!1}},ZM),log:k({logBase:10},ZM)},qM={value:1,category:1,time:1,log:1};function KM(t,e,i,r){E(qM,(function(o,a){var s=C(C({},jM[a],!0),r,!0),l=function(t){function i(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e+"Axis."+a,n}return n(i,t),i.prototype.mergeDefaultAndTheme=function(t,e){var n=Pp(this),i=n?Rp(t):{};C(t,e.getTheme().get(a+"Axis")),C(t,this.getDefaultOption()),t.type=$M(t),n&&Op(t,i,n)},i.prototype.optionUpdated=function(){"category"===this.option.type&&(this.__ordinalMeta=Mx.createByAxisModel(this))},i.prototype.getCategories=function(t){var e=this.option;if("category"===e.type)return t?e.data:this.__ordinalMeta.categories},i.prototype.getOrdinalMeta=function(){return this.__ordinalMeta},i.type=e+"Axis."+a,i.defaultOption=s,i}(i);t.registerComponentModel(l)})),t.registerSubTypeDefaulter(e+"Axis",$M)}function $M(t){return t.type||(t.data?"category":"value")}var JM=function(){function t(t){this.type="cartesian",this._dimList=[],this._axes={},this.name=t||""}return t.prototype.getAxis=function(t){return this._axes[t]},t.prototype.getAxes=function(){return z(this._dimList,(function(t){return this._axes[t]}),this)},t.prototype.getAxesByScale=function(t){return t=t.toLowerCase(),B(this.getAxes(),(function(e){return e.scale.type===t}))},t.prototype.addAxis=function(t){var e=t.dim;this._axes[e]=t,this._dimList.push(e)},t}(),QM=["x","y"];function tI(t){return"interval"===t.type||"time"===t.type}var eI=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="cartesian2d",e.dimensions=QM,e}return n(e,t),e.prototype.calcAffineTransform=function(){this._transform=this._invTransform=null;var t=this.getAxis("x").scale,e=this.getAxis("y").scale;if(tI(t)&&tI(e)){var n=t.getExtent(),i=e.getExtent(),r=this.dataToPoint([n[0],i[0]]),o=this.dataToPoint([n[1],i[1]]),a=n[1]-n[0],s=i[1]-i[0];if(a&&s){var l=(o[0]-r[0])/a,u=(o[1]-r[1])/s,h=r[0]-n[0]*l,c=r[1]-i[0]*u,p=this._transform=[l,0,0,u,h,c];this._invTransform=Ie([],p)}}},e.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},e.prototype.containPoint=function(t){var e=this.getAxis("x"),n=this.getAxis("y");return e.contain(e.toLocalCoord(t[0]))&&n.contain(n.toLocalCoord(t[1]))},e.prototype.containData=function(t){return this.getAxis("x").containData(t[0])&&this.getAxis("y").containData(t[1])},e.prototype.containZone=function(t,e){var n=this.dataToPoint(t),i=this.dataToPoint(e),r=this.getArea(),o=new ze(n[0],n[1],i[0]-n[0],i[1]-n[1]);return r.intersect(o)},e.prototype.dataToPoint=function(t,e,n){n=n||[];var i=t[0],r=t[1];if(this._transform&&null!=i&&isFinite(i)&&null!=r&&isFinite(r))return Wt(n,t,this._transform);var o=this.getAxis("x"),a=this.getAxis("y");return n[0]=o.toGlobalCoord(o.dataToCoord(i,e)),n[1]=a.toGlobalCoord(a.dataToCoord(r,e)),n},e.prototype.clampData=function(t,e){var n=this.getAxis("x").scale,i=this.getAxis("y").scale,r=n.getExtent(),o=i.getExtent(),a=n.parse(t[0]),s=i.parse(t[1]);return(e=e||[])[0]=Math.min(Math.max(Math.min(r[0],r[1]),a),Math.max(r[0],r[1])),e[1]=Math.min(Math.max(Math.min(o[0],o[1]),s),Math.max(o[0],o[1])),e},e.prototype.pointToData=function(t,e){var n=[];if(this._invTransform)return Wt(n,t,this._invTransform);var i=this.getAxis("x"),r=this.getAxis("y");return n[0]=i.coordToData(i.toLocalCoord(t[0]),e),n[1]=r.coordToData(r.toLocalCoord(t[1]),e),n},e.prototype.getOtherAxis=function(t){return this.getAxis("x"===t.dim?"y":"x")},e.prototype.getArea=function(t){t=t||0;var e=this.getAxis("x").getGlobalExtent(),n=this.getAxis("y").getGlobalExtent(),i=Math.min(e[0],e[1])-t,r=Math.min(n[0],n[1])-t,o=Math.max(e[0],e[1])-i+t,a=Math.max(n[0],n[1])-r+t;return new ze(i,r,o,a)},e}(JM),nI=function(t){function e(e,n,i,r,o){var a=t.call(this,e,n,i)||this;return a.index=0,a.type=r||"value",a.position=o||"bottom",a}return n(e,t),e.prototype.isHorizontal=function(){var t=this.position;return"top"===t||"bottom"===t},e.prototype.getGlobalExtent=function(t){var e=this.getExtent();return e[0]=this.toGlobalCoord(e[0]),e[1]=this.toGlobalCoord(e[1]),t&&e[0]>e[1]&&e.reverse(),e},e.prototype.pointToData=function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},e.prototype.setCategorySortInfo=function(t){if("category"!==this.type)return!1;this.model.option.categorySortInfo=t,this.scale.setSortInfo(t)},e}(ab);function iI(t,e,n){n=n||{};var i=t.coordinateSystem,r=e.axis,o={},a=r.getAxesOnZeroOf()[0],s=r.position,l=a?"onZero":s,u=r.dim,h=i.getRect(),c=[h.x,h.x+h.width,h.y,h.y+h.height],p={left:0,right:1,top:0,bottom:1,onZero:2},d=e.get("offset")||0,f="x"===u?[c[2]-d,c[3]+d]:[c[0]-d,c[1]+d];if(a){var g=a.toGlobalCoord(a.dataToCoord(0));f[p.onZero]=Math.max(Math.min(g,f[1]),f[0])}o.position=["y"===u?f[p[l]]:c[0],"x"===u?f[p[l]]:c[3]],o.rotation=Math.PI/2*("x"===u?0:1);o.labelDirection=o.tickDirection=o.nameDirection={top:-1,bottom:1,left:-1,right:1}[s],o.labelOffset=a?f[p[s]]-f[p.onZero]:0,e.get(["axisTick","inside"])&&(o.tickDirection=-o.tickDirection),it(n.labelInside,e.get(["axisLabel","inside"]))&&(o.labelDirection=-o.labelDirection);var y=e.get(["axisLabel","rotate"]);return o.labelRotate="top"===l?-y:y,o.z2=1,o}function rI(t){return"cartesian2d"===t.get("coordinateSystem")}function oI(t){var e={xAxisModel:null,yAxisModel:null};return E(e,(function(n,i){var r=i.replace(/Model$/,""),o=t.getReferringComponents(r,Wo).models[0];e[i]=o})),e}var aI=Math.log;function sI(t,e,n){var i=Ex.prototype,r=i.getTicks.call(n),o=i.getTicks.call(n,!0),a=r.length-1,s=i.getInterval.call(n),l=x_(t,e),u=l.extent,h=l.fixMin,c=l.fixMax;if("log"===t.type){var p=aI(t.base);u=[aI(u[0])/p,aI(u[1])/p]}t.setExtent(u[0],u[1]),t.calcNiceExtent({splitNumber:a,fixMin:h,fixMax:c});var d=i.getExtent.call(t);h&&(u[0]=d[0]),c&&(u[1]=d[1]);var f=i.getInterval.call(t),g=u[0],y=u[1];if(h&&c)f=(y-g)/a;else if(h)for(y=u[0]+f*a;yu[0]&&isFinite(g)&&isFinite(u[0]);)f=Dx(f),g=u[1]-f*a;else{t.getTicks().length-1>a&&(f=Dx(f));var v=f*a;(g=Jr((y=Math.ceil(u[1]/f)*f)-v))<0&&u[0]>=0?(g=0,y=Jr(v)):y>0&&u[1]<=0&&(y=0,g=-Jr(v))}var m=(r[0].value-o[0].value)/s,x=(r[a].value-o[a].value)/s;i.setExtent.call(t,g+f*m,y+f*x),i.setInterval.call(t,f),(m||x)&&i.setNiceExtent.call(t,g+f,y-f)}var lI=function(){function t(t,e,n){this.type="grid",this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this.axisPointerEnabled=!0,this.dimensions=QM,this._initCartesian(t,e,n),this.model=t}return t.prototype.getRect=function(){return this._rect},t.prototype.update=function(t,e){var n=this._axesMap;function i(t){var e,n=G(t),i=n.length;if(i){for(var r=[],o=i-1;o>=0;o--){var a=t[+n[o]],s=a.model,l=a.scale;Tx(l)&&s.get("alignTicks")&&null==s.get("interval")?r.push(a):(__(l,s),Tx(l)&&(e=a))}r.length&&(e||__((e=r.pop()).scale,e.model),E(r,(function(t){sI(t.scale,t.model,e.scale)})))}}this._updateScale(t,this.model),i(n.x),i(n.y);var r={};E(n.x,(function(t){hI(n,"y",t,r)})),E(n.y,(function(t){hI(n,"x",t,r)})),this.resize(this.model,e)},t.prototype.resize=function(t,e,n){var i=t.getBoxLayoutParams(),r=!n&&t.get("containLabel"),o=kp(i,{width:e.getWidth(),height:e.getHeight()});this._rect=o;var a=this._axesList;function s(){E(a,(function(t){var e=t.isHorizontal(),n=e?[0,o.width]:[0,o.height],i=t.inverse?1:0;t.setExtent(n[i],n[1-i]),function(t,e){var n=t.getExtent(),i=n[0]+n[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return i-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return i-t+e}}(t,e?o.x:o.y)}))}s(),r&&(E(a,(function(t){if(!t.model.get(["axisLabel","inside"])){var e=function(t){var e=t.model,n=t.scale;if(e.get(["axisLabel","show"])&&!n.isBlank()){var i,r,o=n.getExtent();r=n instanceof Rx?n.count():(i=n.getTicks()).length;var a,s=t.getLabelModel(),l=w_(t),u=1;r>40&&(u=Math.ceil(r/40));for(var h=0;h0&&i>0||n<0&&i<0)}(t)}var pI=Math.PI,dI=function(){function t(t,e){this.group=new Br,this.opt=e,this.axisModel=t,k(e,{labelOffset:0,nameDirection:1,tickDirection:1,labelDirection:1,silent:!0,handleAutoShown:function(){return!0}});var n=new Br({x:e.position[0],y:e.position[1],rotation:e.rotation});n.updateTransform(),this._transformGroup=n}return t.prototype.hasBuilder=function(t){return!!fI[t]},t.prototype.add=function(t){fI[t](this.opt,this.axisModel,this.group,this._transformGroup)},t.prototype.getGroup=function(){return this.group},t.innerTextLayout=function(t,e,n){var i,r,o=ao(e-t);return so(o)?(r=n>0?"top":"bottom",i="center"):so(o-pI)?(r=n>0?"bottom":"top",i="center"):(r="middle",i=o>0&&o0?"right":"left":n>0?"left":"right"),{rotation:o,textAlign:i,textVerticalAlign:r}},t.makeAxisEventDataBase=function(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e},t.isLabelSilent=function(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)},t}(),fI={axisLine:function(t,e,n,i){var r=e.get(["axisLine","show"]);if("auto"===r&&t.handleAutoShown&&(r=t.handleAutoShown("axisLine")),r){var o=e.axis.getExtent(),a=i.transform,s=[o[0],0],l=[o[1],0],u=s[0]>l[0];a&&(Wt(s,s,a),Wt(l,l,a));var h=A({lineCap:"round"},e.getModel(["axisLine","lineStyle"]).getLineStyle()),c=new Ku({shape:{x1:s[0],y1:s[1],x2:l[0],y2:l[1]},style:h,strokeContainThreshold:t.strokeContainThreshold||5,silent:!0,z2:1});zh(c.shape,c.style.lineWidth),c.anid="line",n.add(c);var p=e.get(["axisLine","symbol"]);if(null!=p){var d=e.get(["axisLine","symbolSize"]);U(p)&&(p=[p,p]),(U(d)||j(d))&&(d=[d,d]);var f=Zy(e.get(["axisLine","symbolOffset"])||0,d),g=d[0],y=d[1];E([{rotate:t.rotation+Math.PI/2,offset:f[0],r:0},{rotate:t.rotation-Math.PI/2,offset:f[1],r:Math.sqrt((s[0]-l[0])*(s[0]-l[0])+(s[1]-l[1])*(s[1]-l[1]))}],(function(e,i){if("none"!==p[i]&&null!=p[i]){var r=Xy(p[i],-g/2,-y/2,g,y,h.stroke,!0),o=e.r+e.offset,a=u?l:s;r.attr({rotation:e.rotate,x:a[0]+o*Math.cos(t.rotation),y:a[1]-o*Math.sin(t.rotation),silent:!0,z2:11}),n.add(r)}}))}}},axisTickLabel:function(t,e,n,i){var r=function(t,e,n,i){var r=n.axis,o=n.getModel("axisTick"),a=o.get("show");"auto"===a&&i.handleAutoShown&&(a=i.handleAutoShown("axisTick"));if(!a||r.scale.isBlank())return;for(var s=o.getModel("lineStyle"),l=i.tickDirection*o.get("length"),u=mI(r.getTicksCoords(),e.transform,l,k(s.getLineStyle(),{stroke:n.get(["axisLine","lineStyle","color"])}),"ticks"),h=0;hc[1]?-1:1,d=["start"===s?c[0]-p*h:"end"===s?c[1]+p*h:(c[0]+c[1])/2,vI(s)?t.labelOffset+l*h:0],f=e.get("nameRotate");null!=f&&(f=f*pI/180),vI(s)?o=dI.innerTextLayout(t.rotation,null!=f?f:t.rotation,l):(o=function(t,e,n,i){var r,o,a=ao(n-t),s=i[0]>i[1],l="start"===e&&!s||"start"!==e&&s;so(a-pI/2)?(o=l?"bottom":"top",r="center"):so(a-1.5*pI)?(o=l?"top":"bottom",r="center"):(o="middle",r=a<1.5*pI&&a>pI/2?l?"left":"right":l?"right":"left");return{rotation:a,textAlign:r,textVerticalAlign:o}}(t.rotation,s,f||0,c),null!=(a=t.axisNameAvailableWidth)&&(a=Math.abs(a/Math.sin(o.rotation)),!isFinite(a)&&(a=null)));var g=u.getFont(),y=e.get("nameTruncate",!0)||{},v=y.ellipsis,m=it(t.nameTruncateMaxWidth,y.maxWidth,a),x=new Xs({x:d[0],y:d[1],rotation:o.rotation,silent:dI.isLabelSilent(e),style:oc(u,{text:r,font:g,overflow:"truncate",width:m,ellipsis:v,fill:u.getTextColor()||e.get(["axisLine","lineStyle","color"]),align:u.get("align")||o.textAlign,verticalAlign:u.get("verticalAlign")||o.textVerticalAlign}),z2:1});if(Kh({el:x,componentModel:e,itemName:r}),x.__fullText=r,x.anid="name",e.get("triggerEvent")){var _=dI.makeAxisEventDataBase(e);_.targetType="axisName",_.name=r,rl(x).eventData=_}i.add(x),x.updateTransform(),n.add(x),x.decomposeTransform()}}};function gI(t){t&&(t.ignore=!0)}function yI(t,e){var n=t&&t.getBoundingRect().clone(),i=e&&e.getBoundingRect().clone();if(n&&i){var r=xe([]);return Se(r,r,-t.rotation),n.applyTransform(be([],r,t.getLocalTransform())),i.applyTransform(be([],r,e.getLocalTransform())),n.intersect(i)}}function vI(t){return"middle"===t||"center"===t}function mI(t,e,n,i,r){for(var o=[],a=[],s=[],l=0;l=0||t===e}function bI(t){var e=wI(t);if(e){var n=e.axisPointerModel,i=e.axis.scale,r=n.option,o=n.get("status"),a=n.get("value");null!=a&&(a=i.parse(a));var s=SI(n);null==o&&(r.status=s?"show":"hide");var l=i.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==a||a>l[1])&&(a=l[1]),a0&&!c.min?c.min=0:null!=c.min&&c.min<0&&!c.max&&(c.max=0);var p=a;null!=c.color&&(p=k({color:c.color},a));var d=C(T(c),{boundaryGap:t,splitNumber:e,scale:n,axisLine:i,axisTick:r,axisLabel:o,name:c.text,showName:s,nameLocation:"end",nameGap:u,nameTextStyle:p,triggerEvent:h},!1);if(U(l)){var f=d.name;d.name=l.replace("{value}",null!=f?f:"")}else X(l)&&(d.name=l(d.name,d));var g=new Cc(d,null,this.ecModel);return R(g,D_.prototype),g.mainType="radar",g.componentIndex=this.componentIndex,g}),this);this._indicatorModels=c},e.prototype.getIndicatorModels=function(){return this._indicatorModels},e.type="radar",e.defaultOption={z:0,center:["50%","50%"],radius:"75%",startAngle:90,axisName:{show:!0},boundaryGap:[0,0],splitNumber:5,axisNameGap:15,scale:!1,shape:"polygon",axisLine:C({lineStyle:{color:"#bbb"}},XI.axisLine),axisLabel:UI(XI.axisLabel,!1),axisTick:UI(XI.axisTick,!1),splitLine:UI(XI.splitLine,!0),splitArea:UI(XI.splitArea,!0),indicator:[]},e}(zp),jI=["axisLine","axisTickLabel","axisName"],qI=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){this.group.removeAll(),this._buildAxes(t),this._buildSplitLineAndArea(t)},e.prototype._buildAxes=function(t){var e=t.coordinateSystem;E(z(e.getIndicatorAxes(),(function(t){var n=t.model.get("showName")?t.name:"";return new dI(t.model,{axisName:n,position:[e.cx,e.cy],rotation:t.angle,labelDirection:-1,tickDirection:-1,nameDirection:1})})),(function(t){E(jI,t.add,t),this.group.add(t.getGroup())}),this)},e.prototype._buildSplitLineAndArea=function(t){var e=t.coordinateSystem,n=e.getIndicatorAxes();if(n.length){var i=t.get("shape"),r=t.getModel("splitLine"),o=t.getModel("splitArea"),a=r.getModel("lineStyle"),s=o.getModel("areaStyle"),l=r.get("show"),u=o.get("show"),h=a.get("color"),c=s.get("color"),p=Y(h)?h:[h],d=Y(c)?c:[c],f=[],g=[];if("circle"===i)for(var y=n[0].getTicksCoords(),v=e.cx,m=e.cy,x=0;x3?1.4:r>1?1.2:1.1;iT(this,"zoom","zoomOnMouseWheel",t,{scale:i>0?s:1/s,originX:o,originY:a,isAvailableBehavior:null})}if(n){var l=Math.abs(i);iT(this,"scrollMove","moveOnMouseWheel",t,{scrollDelta:(i>0?1:-1)*(l>3?.4:l>1?.15:.05),originX:o,originY:a,isAvailableBehavior:null})}}},e.prototype._pinchHandler=function(t){tT(this._zr,"globalPan")||iT(this,"zoom",null,t,{scale:t.pinchScale>1?1.1:1/1.1,originX:t.pinchX,originY:t.pinchY,isAvailableBehavior:null})},e}(jt);function iT(t,e,n,i,r){t.pointerChecker&&t.pointerChecker(i,r.originX,r.originY)&&(de(i.event),rT(t,e,n,i,r))}function rT(t,e,n,i,r){r.isAvailableBehavior=W(oT,null,n,i),t.trigger(e,r)}function oT(t,e,n){var i=n[t];return!t||i&&(!U(i)||e.event[i+"Key"])}function aT(t,e,n){var i=t.target;i.x+=e,i.y+=n,i.dirty()}function sT(t,e,n,i){var r=t.target,o=t.zoomLimit,a=t.zoom=t.zoom||1;if(a*=e,o){var s=o.min||0,l=o.max||1/0;a=Math.max(Math.min(l,a),s)}var u=a/t.zoom;t.zoom=a,r.x-=(n-r.x)*(u-1),r.y-=(i-r.y)*(u-1),r.scaleX*=u,r.scaleY*=u,r.dirty()}var lT,uT={axisPointer:1,tooltip:1,brush:1};function hT(t,e,n){var i=e.getComponentByElement(t.topTarget),r=i&&i.coordinateSystem;return i&&i!==n&&!uT.hasOwnProperty(i.mainType)&&r&&r.model!==n}function cT(t){U(t)&&(t=(new DOMParser).parseFromString(t,"text/xml"));var e=t;for(9===e.nodeType&&(e=e.firstChild);"svg"!==e.nodeName.toLowerCase()||1!==e.nodeType;)e=e.nextSibling;return e}var pT={fill:"fill",stroke:"stroke","stroke-width":"lineWidth",opacity:"opacity","fill-opacity":"fillOpacity","stroke-opacity":"strokeOpacity","stroke-dasharray":"lineDash","stroke-dashoffset":"lineDashOffset","stroke-linecap":"lineCap","stroke-linejoin":"lineJoin","stroke-miterlimit":"miterLimit","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","text-anchor":"textAlign",visibility:"visibility",display:"display"},dT=G(pT),fT={"alignment-baseline":"textBaseline","stop-color":"stopColor"},gT=G(fT),yT=function(){function t(){this._defs={},this._root=null}return t.prototype.parse=function(t,e){e=e||{};var n=cT(t);this._defsUsePending=[];var i=new Br;this._root=i;var r=[],o=n.getAttribute("viewBox")||"",a=parseFloat(n.getAttribute("width")||e.width),s=parseFloat(n.getAttribute("height")||e.height);isNaN(a)&&(a=null),isNaN(s)&&(s=null),wT(n,i,null,!0,!1);for(var l,u,h=n.firstChild;h;)this._parseNode(h,i,r,null,!1,!1),h=h.nextSibling;if(function(t,e){for(var n=0;n=4&&(l={x:parseFloat(c[0]||0),y:parseFloat(c[1]||0),width:parseFloat(c[2]),height:parseFloat(c[3])})}if(l&&null!=a&&null!=s&&(u=LT(l,{x:0,y:0,width:a,height:s}),!e.ignoreViewBox)){var p=i;(i=new Br).add(p),p.scaleX=p.scaleY=u.scale,p.x=u.x,p.y=u.y}return e.ignoreRootClip||null==a||null==s||i.setClipPath(new Ws({shape:{x:0,y:0,width:a,height:s}})),{root:i,width:a,height:s,viewBoxRect:l,viewBoxTransform:u,named:r}},t.prototype._parseNode=function(t,e,n,i,r,o){var a,s=t.nodeName.toLowerCase(),l=i;if("defs"===s&&(r=!0),"text"===s&&(o=!0),"defs"===s||"switch"===s)a=e;else{if(!r){var u=lT[s];if(u&&_t(lT,s)){a=u.call(this,t,e);var h=t.getAttribute("name");if(h){var c={name:h,namedFrom:null,svgNodeTagLower:s,el:a};n.push(c),"g"===s&&(l=c)}else i&&n.push({name:i.name,namedFrom:i,svgNodeTagLower:s,el:a});e.add(a)}}var p=vT[s];if(p&&_t(vT,s)){var d=p.call(this,t),f=t.getAttribute("id");f&&(this._defs[f]=d)}}if(a&&a.isGroup)for(var g=t.firstChild;g;)1===g.nodeType?this._parseNode(g,a,n,l,r,o):3===g.nodeType&&o&&this._parseText(g,a),g=g.nextSibling},t.prototype._parseText=function(t,e){var n=new Ps({style:{text:t.textContent},silent:!0,x:this._textX||0,y:this._textY||0});_T(e,n),wT(t,n,this._defsUsePending,!1,!1),function(t,e){var n=e.__selfStyle;if(n){var i=n.textBaseline,r=i;i&&"auto"!==i?"baseline"===i?r="alphabetic":"before-edge"===i||"text-before-edge"===i?r="top":"after-edge"===i||"text-after-edge"===i?r="bottom":"central"!==i&&"mathematical"!==i||(r="middle"):r="alphabetic",t.style.textBaseline=r}var o=e.__inheritedStyle;if(o){var a=o.textAlign,s=a;a&&("middle"===a&&(s="center"),t.style.textAlign=s)}}(n,e);var i=n.style,r=i.fontSize;r&&r<9&&(i.fontSize=9,n.scaleX*=r/9,n.scaleY*=r/9);var o=(i.fontSize||i.fontFamily)&&[i.fontStyle,i.fontWeight,(i.fontSize||12)+"px",i.fontFamily||"sans-serif"].join(" ");i.font=o;var a=n.getBoundingRect();return this._textX+=a.width,e.add(n),n},t.internalField=void(lT={g:function(t,e){var n=new Br;return _T(e,n),wT(t,n,this._defsUsePending,!1,!1),n},rect:function(t,e){var n=new Ws;return _T(e,n),wT(t,n,this._defsUsePending,!1,!1),n.setShape({x:parseFloat(t.getAttribute("x")||"0"),y:parseFloat(t.getAttribute("y")||"0"),width:parseFloat(t.getAttribute("width")||"0"),height:parseFloat(t.getAttribute("height")||"0")}),n.silent=!0,n},circle:function(t,e){var n=new Su;return _T(e,n),wT(t,n,this._defsUsePending,!1,!1),n.setShape({cx:parseFloat(t.getAttribute("cx")||"0"),cy:parseFloat(t.getAttribute("cy")||"0"),r:parseFloat(t.getAttribute("r")||"0")}),n.silent=!0,n},line:function(t,e){var n=new Ku;return _T(e,n),wT(t,n,this._defsUsePending,!1,!1),n.setShape({x1:parseFloat(t.getAttribute("x1")||"0"),y1:parseFloat(t.getAttribute("y1")||"0"),x2:parseFloat(t.getAttribute("x2")||"0"),y2:parseFloat(t.getAttribute("y2")||"0")}),n.silent=!0,n},ellipse:function(t,e){var n=new Iu;return _T(e,n),wT(t,n,this._defsUsePending,!1,!1),n.setShape({cx:parseFloat(t.getAttribute("cx")||"0"),cy:parseFloat(t.getAttribute("cy")||"0"),rx:parseFloat(t.getAttribute("rx")||"0"),ry:parseFloat(t.getAttribute("ry")||"0")}),n.silent=!0,n},polygon:function(t,e){var n,i=t.getAttribute("points");i&&(n=bT(i));var r=new Xu({shape:{points:n||[]},silent:!0});return _T(e,r),wT(t,r,this._defsUsePending,!1,!1),r},polyline:function(t,e){var n,i=t.getAttribute("points");i&&(n=bT(i));var r=new Zu({shape:{points:n||[]},silent:!0});return _T(e,r),wT(t,r,this._defsUsePending,!1,!1),r},image:function(t,e){var n=new Ns;return _T(e,n),wT(t,n,this._defsUsePending,!1,!1),n.setStyle({image:t.getAttribute("xlink:href")||t.getAttribute("href"),x:+t.getAttribute("x"),y:+t.getAttribute("y"),width:+t.getAttribute("width"),height:+t.getAttribute("height")}),n.silent=!0,n},text:function(t,e){var n=t.getAttribute("x")||"0",i=t.getAttribute("y")||"0",r=t.getAttribute("dx")||"0",o=t.getAttribute("dy")||"0";this._textX=parseFloat(n)+parseFloat(r),this._textY=parseFloat(i)+parseFloat(o);var a=new Br;return _T(e,a),wT(t,a,this._defsUsePending,!1,!0),a},tspan:function(t,e){var n=t.getAttribute("x"),i=t.getAttribute("y");null!=n&&(this._textX=parseFloat(n)),null!=i&&(this._textY=parseFloat(i));var r=t.getAttribute("dx")||"0",o=t.getAttribute("dy")||"0",a=new Br;return _T(e,a),wT(t,a,this._defsUsePending,!1,!0),this._textX+=parseFloat(r),this._textY+=parseFloat(o),a},path:function(t,e){var n=_u(t.getAttribute("d")||"");return _T(e,n),wT(t,n,this._defsUsePending,!1,!1),n.silent=!0,n}}),t}(),vT={lineargradient:function(t){var e=parseInt(t.getAttribute("x1")||"0",10),n=parseInt(t.getAttribute("y1")||"0",10),i=parseInt(t.getAttribute("x2")||"10",10),r=parseInt(t.getAttribute("y2")||"0",10),o=new oh(e,n,i,r);return mT(t,o),xT(t,o),o},radialgradient:function(t){var e=parseInt(t.getAttribute("cx")||"0",10),n=parseInt(t.getAttribute("cy")||"0",10),i=parseInt(t.getAttribute("r")||"0",10),r=new ah(e,n,i);return mT(t,r),xT(t,r),r}};function mT(t,e){"userSpaceOnUse"===t.getAttribute("gradientUnits")&&(e.global=!0)}function xT(t,e){for(var n=t.firstChild;n;){if(1===n.nodeType&&"stop"===n.nodeName.toLocaleLowerCase()){var i=n.getAttribute("offset"),r=void 0;r=i&&i.indexOf("%")>0?parseInt(i,10)/100:i?parseFloat(i):0;var o={};kT(n,o,o);var a=o.stopColor||n.getAttribute("stop-color")||"#000000";e.colorStops.push({offset:r,color:a})}n=n.nextSibling}}function _T(t,e){t&&t.__inheritedStyle&&(e.__inheritedStyle||(e.__inheritedStyle={}),k(e.__inheritedStyle,t.__inheritedStyle))}function bT(t){for(var e=TT(t),n=[],i=0;i0;o-=2){var a=i[o],s=i[o-1],l=TT(a);switch(r=r||[1,0,0,1,0,0],s){case"translate":we(r,r,[parseFloat(l[0]),parseFloat(l[1]||"0")]);break;case"scale":Me(r,r,[parseFloat(l[0]),parseFloat(l[1]||l[0])]);break;case"rotate":Se(r,r,-parseFloat(l[0])*DT,[parseFloat(l[1]||"0"),parseFloat(l[2]||"0")]);break;case"skewX":be(r,[1,0,Math.tan(parseFloat(l[0])*DT),1,0,0],r);break;case"skewY":be(r,[1,Math.tan(parseFloat(l[0])*DT),0,1,0,0],r);break;case"matrix":r[0]=parseFloat(l[0]),r[1]=parseFloat(l[1]),r[2]=parseFloat(l[2]),r[3]=parseFloat(l[3]),r[4]=parseFloat(l[4]),r[5]=parseFloat(l[5])}}e.setLocalTransform(r)}}(t,e),kT(t,a,s),i||function(t,e,n){for(var i=0;i0,f={api:n,geo:s,mapOrGeoModel:t,data:a,isVisualEncodedByVisualMap:d,isGeo:o,transformInfoRaw:c};"geoJSON"===s.resourceType?this._buildGeoJSON(f):"geoSVG"===s.resourceType&&this._buildSVG(f),this._updateController(t,e,n),this._updateMapSelectHandler(t,l,n,i)},t.prototype._buildGeoJSON=function(t){var e=this._regionsGroupByName=yt(),n=yt(),i=this._regionsGroup,r=t.transformInfoRaw,o=t.mapOrGeoModel,a=t.data,s=t.geo.projection,l=s&&s.stream;function u(t,e){return e&&(t=e(t)),t&&[t[0]*r.scaleX+r.x,t[1]*r.scaleY+r.y]}function h(t){for(var e=[],n=!l&&s&&s.project,i=0;i=0)&&(p=r);var d=a?{normal:{align:"center",verticalAlign:"middle"}}:null;ic(e,rc(i),{labelFetcher:p,labelDataIndex:c,defaultText:n},d);var f=e.getTextContent();if(f&&(JT(f).ignore=f.ignore,e.textConfig&&a)){var g=e.getBoundingRect().clone();e.textConfig.layoutRect=g,e.textConfig.position=[(a[0]-g.x)/g.width*100+"%",(a[1]-g.y)/g.height*100+"%"]}e.disableLabelAnimation=!0}else e.removeTextContent(),e.removeTextConfig(),e.disableLabelAnimation=null}function rC(t,e,n,i,r,o){t.data?t.data.setItemGraphicEl(o,e):rl(e).eventData={componentType:"geo",componentIndex:r.componentIndex,geoIndex:r.componentIndex,name:n,region:i&&i.option||{}}}function oC(t,e,n,i,r){t.data||Kh({el:e,componentModel:r,itemName:n,itemTooltipOption:i.get("tooltip")})}function aC(t,e,n,i,r){e.highDownSilentOnTouch=!!r.get("selectedMode");var o=i.getModel("emphasis"),a=o.get("focus");return Zl(e,a,o.get("blurScope"),o.get("disabled")),t.isGeo&&function(t,e,n){var i=rl(t);i.componentMainType=e.mainType,i.componentIndex=e.componentIndex,i.componentHighDownName=n}(e,r,n),a}function sC(t,e,n){var i,r=[];function o(){i=[]}function a(){i.length&&(r.push(i),i=[])}var s=e({polygonStart:o,polygonEnd:a,lineStart:o,lineEnd:a,point:function(t,e){isFinite(t)&&isFinite(e)&&i.push([t,e])},sphere:function(){}});return!n&&s.polygonStart(),E(t,(function(t){s.lineStart();for(var e=0;e-1&&(n.style.stroke=n.style.fill,n.style.fill="#fff",n.style.lineWidth=2),n},e.type="series.map",e.dependencies=["geo"],e.layoutMode="box",e.defaultOption={z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:null,showLegendSymbol:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,selectedMode:!0,label:{show:!1,color:"#000"},itemStyle:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{areaColor:"rgba(255,215,0,0.8)"}},select:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{color:"rgba(255,215,0,0.8)"}},nameProperty:"name"},e}(bg);function hC(t){var e={};t.eachSeriesByType("map",(function(t){var n=t.getHostGeoModel(),i=n?"o"+n.id:"i"+t.getMapType();(e[i]=e[i]||[]).push(t)})),E(e,(function(t,e){for(var n,i,r,o=(n=z(t,(function(t){return t.getData()})),i=t[0].get("mapValueCalculation"),r={},E(n,(function(t){t.each(t.mapDimension("value"),(function(e,n){var i="ec-"+t.getName(n);r[i]=r[i]||[],isNaN(e)||r[i].push(e)}))})),n[0].map(n[0].mapDimension("value"),(function(t,e){for(var o="ec-"+n[0].getName(e),a=0,s=1/0,l=-1/0,u=r[o].length,h=0;h1?(d.width=p,d.height=p/x):(d.height=p,d.width=p*x),d.y=c[1]-d.height/2,d.x=c[0]-d.width/2;else{var b=t.getBoxLayoutParams();b.aspect=x,d=kp(b,{width:v,height:m})}this.setViewRect(d.x,d.y,d.width,d.height),this.setCenter(t.get("center"),e),this.setZoom(t.get("zoom"))}R(vC,dC);var _C=function(){function t(){this.dimensions=yC}return t.prototype.create=function(t,e){var n=[];function i(t){return{nameProperty:t.get("nameProperty"),aspectScale:t.get("aspectScale"),projection:t.get("projection")}}t.eachComponent("geo",(function(t,r){var o=t.get("map"),a=new vC(o+r,o,A({nameMap:t.get("nameMap")},i(t)));a.zoomLimit=t.get("scaleLimit"),n.push(a),t.coordinateSystem=a,a.model=t,a.resize=xC,a.resize(t,e)})),t.eachSeries((function(t){if("geo"===t.get("coordinateSystem")){var e=t.get("geoIndex")||0;t.coordinateSystem=n[e]}}));var r={};return t.eachSeriesByType("map",(function(t){if(!t.getHostGeoModel()){var e=t.getMapType();r[e]=r[e]||[],r[e].push(t)}})),E(r,(function(t,r){var o=z(t,(function(t){return t.get("nameMap")})),a=new vC(r,r,A({nameMap:D(o)},i(t[0])));a.zoomLimit=it.apply(null,z(t,(function(t){return t.get("scaleLimit")}))),n.push(a),a.resize=xC,a.resize(t[0],e),E(t,(function(t){t.coordinateSystem=a,function(t,e){E(e.get("geoCoord"),(function(e,n){t.addGeoCoord(n,e)}))}(a,t)}))})),n},t.prototype.getFilledRegions=function(t,e,n,i){for(var r=(t||[]).slice(),o=yt(),a=0;a=0;){var o=e[n];o.hierNode.prelim+=i,o.hierNode.modifier+=i,r+=o.hierNode.change,i+=o.hierNode.shift+r}}(t);var o=(n[0].hierNode.prelim+n[n.length-1].hierNode.prelim)/2;r?(t.hierNode.prelim=r.hierNode.prelim+e(t,r),t.hierNode.modifier=t.hierNode.prelim-o):t.hierNode.prelim=o}else r&&(t.hierNode.prelim=r.hierNode.prelim+e(t,r));t.parentNode.hierNode.defaultAncestor=function(t,e,n,i){if(e){for(var r=t,o=t,a=o.parentNode.children[0],s=e,l=r.hierNode.modifier,u=o.hierNode.modifier,h=a.hierNode.modifier,c=s.hierNode.modifier;s=PC(s),o=OC(o),s&&o;){r=PC(r),a=OC(a),r.hierNode.ancestor=t;var p=s.hierNode.prelim+c-o.hierNode.prelim-u+i(s,o);p>0&&(NC(RC(s,t,n),t,p),u+=p,l+=p),c+=s.hierNode.modifier,u+=o.hierNode.modifier,l+=r.hierNode.modifier,h+=a.hierNode.modifier}s&&!PC(r)&&(r.hierNode.thread=s,r.hierNode.modifier+=c-l),o&&!OC(a)&&(a.hierNode.thread=o,a.hierNode.modifier+=u-h,n=t)}return n}(t,r,t.parentNode.hierNode.defaultAncestor||i[0],e)}function AC(t){var e=t.hierNode.prelim+t.parentNode.hierNode.modifier;t.setLayout({x:e},!0),t.hierNode.modifier+=t.parentNode.hierNode.modifier}function kC(t){return arguments.length?t:EC}function LC(t,e){return t-=Math.PI/2,{x:e*Math.cos(t),y:e*Math.sin(t)}}function PC(t){var e=t.children;return e.length&&t.isExpand?e[e.length-1]:t.hierNode.thread}function OC(t){var e=t.children;return e.length&&t.isExpand?e[0]:t.hierNode.thread}function RC(t,e,n){return t.hierNode.ancestor.parentNode===e.parentNode?t.hierNode.ancestor:n}function NC(t,e,n){var i=n/(e.hierNode.i-t.hierNode.i);e.hierNode.change-=i,e.hierNode.shift+=n,e.hierNode.modifier+=n,e.hierNode.prelim+=n,t.hierNode.change+=i}function EC(t,e){return t.parentNode===e.parentNode?1:2}var zC=function(){this.parentPoint=[],this.childPoints=[]},VC=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new zC},e.prototype.buildPath=function(t,e){var n=e.childPoints,i=n.length,r=e.parentPoint,o=n[0],a=n[i-1];if(1===i)return t.moveTo(r[0],r[1]),void t.lineTo(o[0],o[1]);var s=e.orient,l="TB"===s||"BT"===s?0:1,u=1-l,h=$r(e.forkPosition,1),c=[];c[l]=r[l],c[u]=r[u]+(a[u]-r[u])*h,t.moveTo(r[0],r[1]),t.lineTo(c[0],c[1]),t.moveTo(o[0],o[1]),c[l]=o[l],t.lineTo(c[0],c[1]),c[l]=a[l],t.lineTo(c[0],c[1]),t.lineTo(a[0],a[1]);for(var p=1;pm.x)||(_-=Math.PI);var S=b?"left":"right",M=s.getModel("label"),I=M.get("rotate"),T=I*(Math.PI/180),C=y.getTextContent();C&&(y.setTextConfig({position:M.get("position")||S,rotation:null==I?-_:T,origin:"center"}),C.setStyle("verticalAlign","middle"))}var D=s.get(["emphasis","focus"]),A="relative"===D?vt(a.getAncestorsIndices(),a.getDescendantIndices()):"ancestor"===D?a.getAncestorsIndices():"descendant"===D?a.getDescendantIndices():null;A&&(rl(n).focus=A),function(t,e,n,i,r,o,a,s){var l=e.getModel(),u=t.get("edgeShape"),h=t.get("layout"),c=t.getOrient(),p=t.get(["lineStyle","curveness"]),d=t.get("edgeForkPosition"),f=l.getModel("lineStyle").getLineStyle(),g=i.__edge;if("curve"===u)e.parentNode&&e.parentNode!==n&&(g||(g=i.__edge=new th({shape:XC(h,c,p,r,r)})),vh(g,{shape:XC(h,c,p,o,a)},t));else if("polyline"===u)if("orthogonal"===h){if(e!==n&&e.children&&0!==e.children.length&&!0===e.isExpand){for(var y=e.children,v=[],m=0;me&&(e=i.height)}this.height=e+1},t.prototype.getNodeById=function(t){if(this.getId()===t)return this;for(var e=0,n=this.children,i=n.length;e=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},t.prototype.getLayout=function(){return this.hostTree.data.getItemLayout(this.dataIndex)},t.prototype.getModel=function(t){if(!(this.dataIndex<0))return this.hostTree.data.getItemModel(this.dataIndex).getModel(t)},t.prototype.getLevelModel=function(){return(this.hostTree.levelModels||[])[this.depth]},t.prototype.setVisual=function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},t.prototype.getVisual=function(t){return this.hostTree.data.getItemVisual(this.dataIndex,t)},t.prototype.getRawIndex=function(){return this.hostTree.data.getRawIndex(this.dataIndex)},t.prototype.getId=function(){return this.hostTree.data.getId(this.dataIndex)},t.prototype.getChildIndex=function(){if(this.parentNode){for(var t=this.parentNode.children,e=0;e=0){var i=n.getData().tree.root,r=t.targetNode;if(U(r)&&(r=i.getNodeById(r)),r&&i.contains(r))return{node:r};var o=t.targetNodeId;if(null!=o&&(r=i.getNodeById(o)))return{node:r}}}function rD(t){for(var e=[];t;)(t=t.parentNode)&&e.push(t);return e.reverse()}function oD(t,e){return P(rD(t),e)>=0}function aD(t,e){for(var n=[];t;){var i=t.dataIndex;n.push({name:t.name,dataIndex:i,value:e.getRawValue(i)}),t=t.parentNode}return n.reverse(),n}var sD=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.hasSymbolVisual=!0,e.ignoreStyleOnData=!0,e}return n(e,t),e.prototype.getInitialData=function(t){var e={name:t.name,children:t.data},n=t.leaves||{},i=new Cc(n,this,this.ecModel),r=nD.createTree(e,this,(function(t){t.wrapMethod("getItemModel",(function(t,e){var n=r.getNodeByDataIndex(e);return n&&n.children.length&&n.isExpand||(t.parentModel=i),t}))}));var o=0;r.eachNode("preorder",(function(t){t.depth>o&&(o=t.depth)}));var a=t.expandAndCollapse&&t.initialTreeDepth>=0?t.initialTreeDepth:o;return r.root.eachNode("preorder",(function(t){var e=t.hostTree.data.getRawDataItem(t.dataIndex);t.isExpand=e&&null!=e.collapsed?!e.collapsed:t.depth<=a})),r.data},e.prototype.getOrient=function(){var t=this.get("orient");return"horizontal"===t?t="LR":"vertical"===t&&(t="TB"),t},e.prototype.setZoom=function(t){this.option.zoom=t},e.prototype.setCenter=function(t){this.option.center=t},e.prototype.formatTooltip=function(t,e,n){for(var i=this.getData().tree,r=i.root.children[0],o=i.getNodeByDataIndex(t),a=o.getValue(),s=o.name;o&&o!==r;)s=o.parentNode.name+"."+s,o=o.parentNode;return og("nameValue",{name:s,value:a,noValue:isNaN(a)||null==a})},e.prototype.getDataParams=function(e){var n=t.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(e);return n.treeAncestors=aD(i,this),n.collapsed=!i.isExpand,n},e.type="series.tree",e.layoutMode="box",e.defaultOption={z:2,coordinateSystem:"view",left:"12%",top:"12%",right:"12%",bottom:"12%",layout:"orthogonal",edgeShape:"curve",edgeForkPosition:"50%",roam:!1,nodeScaleRatio:.4,center:null,zoom:1,orient:"LR",symbol:"emptyCircle",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{color:"#ccc",width:1.5,curveness:.5},itemStyle:{color:"lightsteelblue",borderWidth:1.5},label:{show:!0},animationEasing:"linear",animationDuration:700,animationDurationUpdate:500},e}(bg);function lD(t,e){for(var n,i=[t];n=i.pop();)if(e(n),n.isExpand){var r=n.children;if(r.length)for(var o=r.length-1;o>=0;o--)i.push(r[o])}}function uD(t,e){t.eachSeriesByType("tree",(function(t){!function(t,e){var n=function(t,e){return kp(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}(t,e);t.layoutInfo=n;var i=t.get("layout"),r=0,o=0,a=null;"radial"===i?(r=2*Math.PI,o=Math.min(n.height,n.width)/2,a=kC((function(t,e){return(t.parentNode===e.parentNode?1:2)/t.depth}))):(r=n.width,o=n.height,a=kC());var s=t.getData().tree.root,l=s.children[0];if(l){!function(t){var e=t;e.hierNode={defaultAncestor:null,ancestor:e,prelim:0,modifier:0,change:0,shift:0,i:0,thread:null};for(var n,i,r=[e];n=r.pop();)if(i=n.children,n.isExpand&&i.length)for(var o=i.length-1;o>=0;o--){var a=i[o];a.hierNode={defaultAncestor:null,ancestor:a,prelim:0,modifier:0,change:0,shift:0,i:o,thread:null},r.push(a)}}(s),function(t,e,n){for(var i,r=[t],o=[];i=r.pop();)if(o.push(i),i.isExpand){var a=i.children;if(a.length)for(var s=0;sh.getLayout().x&&(h=t),t.depth>c.depth&&(c=t)}));var p=u===h?1:a(u,h)/2,d=p-u.getLayout().x,f=0,g=0,y=0,v=0;if("radial"===i)f=r/(h.getLayout().x+p+d),g=o/(c.depth-1||1),lD(l,(function(t){y=(t.getLayout().x+d)*f,v=(t.depth-1)*g;var e=LC(y,v);t.setLayout({x:e.x,y:e.y,rawX:y,rawY:v},!0)}));else{var m=t.getOrient();"RL"===m||"LR"===m?(g=o/(h.getLayout().x+p+d),f=r/(c.depth-1||1),lD(l,(function(t){v=(t.getLayout().x+d)*g,y="LR"===m?(t.depth-1)*f:r-(t.depth-1)*f,t.setLayout({x:y,y:v},!0)}))):"TB"!==m&&"BT"!==m||(f=r/(h.getLayout().x+p+d),g=o/(c.depth-1||1),lD(l,(function(t){y=(t.getLayout().x+d)*f,v="TB"===m?(t.depth-1)*g:o-(t.depth-1)*g,t.setLayout({x:y,y:v},!0)})))}}}(t,e)}))}function hD(t){t.eachSeriesByType("tree",(function(t){var e=t.getData();e.tree.eachNode((function(t){var n=t.getModel().getModel("itemStyle").getItemStyle();A(e.ensureUniqueItemVisual(t.dataIndex,"style"),n)}))}))}var cD=["treemapZoomToNode","treemapRender","treemapMove"];function pD(t){var e=t.getData().tree,n={};e.eachNode((function(e){for(var i=e;i&&i.depth>1;)i=i.parentNode;var r=pd(t.ecModel,i.name||i.dataIndex+"",n);e.setVisual("decal",r)}))}var dD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.preventUsingHoverLayer=!0,n}return n(e,t),e.prototype.getInitialData=function(t,e){var n={name:t.name,children:t.data};fD(n);var i=t.levels||[],r=this.designatedVisualItemStyle={},o=new Cc({itemStyle:r},this,e);i=t.levels=function(t,e){var n,i,r=To(e.get("color")),o=To(e.get(["aria","decal","decals"]));if(!r)return;t=t||[],E(t,(function(t){var e=new Cc(t),r=e.get("color"),o=e.get("decal");(e.get(["itemStyle","color"])||r&&"none"!==r)&&(n=!0),(e.get(["itemStyle","decal"])||o&&"none"!==o)&&(i=!0)}));var a=t[0]||(t[0]={});n||(a.color=r.slice());!i&&o&&(a.decal=o.slice());return t}(i,e);var a=z(i||[],(function(t){return new Cc(t,o,e)}),this),s=nD.createTree(n,this,(function(t){t.wrapMethod("getItemModel",(function(t,e){var n=s.getNodeByDataIndex(e),i=n?a[n.depth]:null;return t.parentModel=i||o,t}))}));return s.data},e.prototype.optionUpdated=function(){this.resetViewRoot()},e.prototype.formatTooltip=function(t,e,n){var i=this.getData(),r=this.getRawValue(t);return og("nameValue",{name:i.getName(t),value:r})},e.prototype.getDataParams=function(e){var n=t.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(e);return n.treeAncestors=aD(i,this),n.treePathInfo=n.treeAncestors,n},e.prototype.setLayoutInfo=function(t){this.layoutInfo=this.layoutInfo||{},A(this.layoutInfo,t)},e.prototype.mapIdToIndex=function(t){var e=this._idIndexMap;e||(e=this._idIndexMap=yt(),this._idIndexMapCount=0);var n=e.get(t);return null==n&&e.set(t,n=this._idIndexMapCount++),n},e.prototype.getViewRoot=function(){return this._viewRoot},e.prototype.resetViewRoot=function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getRawData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)},e.prototype.enableAriaDecal=function(){pD(this)},e.type="series.treemap",e.layoutMode="box",e.defaultOption={progressive:0,left:"center",top:"middle",width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,scaleLimit:null,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{color:"rgba(0,0,0,0.7)",textStyle:{color:"#fff"}},emphasis:{itemStyle:{color:"rgba(0,0,0,0.9)"}}},label:{show:!0,distance:0,padding:5,position:"inside",color:"#fff",overflow:"truncate"},upperLabel:{show:!1,position:[0,"50%"],height:20,overflow:"truncate",verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],overflow:"truncate",verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},e}(bg);function fD(t){var e=0;E(t.children,(function(t){fD(t);var n=t.value;Y(n)&&(n=n[0]),e+=n}));var n=t.value;Y(n)&&(n=n[0]),(null==n||isNaN(n))&&(n=e),n<0&&(n=0),Y(t.value)?t.value[0]=n:t.value=n}var gD=function(){function t(t){this.group=new Br,t.add(this.group)}return t.prototype.render=function(t,e,n,i){var r=t.getModel("breadcrumb"),o=this.group;if(o.removeAll(),r.get("show")&&n){var a=r.getModel("itemStyle"),s=r.getModel("emphasis"),l=a.getModel("textStyle"),u=s.getModel(["itemStyle","textStyle"]),h={pos:{left:r.get("left"),right:r.get("right"),top:r.get("top"),bottom:r.get("bottom")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:r.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(n,h,l),this._renderContent(t,h,a,s,l,u,i),Lp(o,h.pos,h.box)}},t.prototype._prepare=function(t,e,n){for(var i=t;i;i=i.parentNode){var r=Ro(i.getModel().get("name"),""),o=n.getTextRect(r),a=Math.max(o.width+16,e.emptyItemWidth);e.totalWidth+=a+8,e.renderList.push({node:i,text:r,width:a})}},t.prototype._renderContent=function(t,e,n,i,r,o,a){for(var s,l,u,h,c,p,d,f,g,y=0,v=e.emptyItemWidth,m=t.get(["breadcrumb","height"]),x=(s=e.pos,l=e.box,h=l.width,c=l.height,p=$r(s.left,h),d=$r(s.top,c),f=$r(s.right,h),g=$r(s.bottom,c),(isNaN(p)||isNaN(parseFloat(s.left)))&&(p=0),(isNaN(f)||isNaN(parseFloat(s.right)))&&(f=h),(isNaN(d)||isNaN(parseFloat(s.top)))&&(d=0),(isNaN(g)||isNaN(parseFloat(s.bottom)))&&(g=c),u=vp(u||0),{width:Math.max(f-p-u[1]-u[3],0),height:Math.max(g-d-u[0]-u[2],0)}),_=e.totalWidth,b=e.renderList,w=i.getModel("itemStyle").getItemStyle(),S=b.length-1;S>=0;S--){var M=b[S],I=M.node,T=M.width,C=M.text;_>x.width&&(_-=T-v,T=v,C=null);var D=new Xu({shape:{points:yD(y,0,T,m,S===b.length-1,0===S)},style:k(n.getItemStyle(),{lineJoin:"bevel"}),textContent:new Xs({style:oc(r,{text:C})}),textConfig:{position:"inside"},z2:1e5,onclick:H(a,I)});D.disableLabelAnimation=!0,D.getTextContent().ensureState("emphasis").style=oc(o,{text:C}),D.ensureState("emphasis").style=w,Zl(D,i.get("focus"),i.get("blurScope"),i.get("disabled")),this.group.add(D),vD(D,t,I),y+=T+8}},t.prototype.remove=function(){this.group.removeAll()},t}();function yD(t,e,n,i,r,o){var a=[[r?t:t-5,e],[t+n,e],[t+n,e+i],[r?t:t-5,e+i]];return!o&&a.splice(2,0,[t+n+5,e+i/2]),!r&&a.push([t,e+i/2]),a}function vD(t,e,n){rl(t).eventData={componentType:"series",componentSubType:"treemap",componentIndex:e.componentIndex,seriesIndex:e.seriesIndex,seriesName:e.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:n&&n.dataIndex,name:n&&n.name},treePathInfo:n&&aD(n,e)}}var mD=function(){function t(){this._storage=[],this._elExistsMap={}}return t.prototype.add=function(t,e,n,i,r){return!this._elExistsMap[t.id]&&(this._elExistsMap[t.id]=!0,this._storage.push({el:t,target:e,duration:n,delay:i,easing:r}),!0)},t.prototype.finished=function(t){return this._finishedCallback=t,this},t.prototype.start=function(){for(var t=this,e=this._storage.length,n=function(){--e<=0&&(t._storage.length=0,t._elExistsMap={},t._finishedCallback&&t._finishedCallback())},i=0,r=this._storage.length;i3||Math.abs(t.dy)>3)){var e=this.seriesModel.getData().tree.root;if(!e)return;var n=e.getLayout();if(!n)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:n.x+t.dx,y:n.y+t.dy,width:n.width,height:n.height}})}},e.prototype._onZoom=function(t){var e=t.originX,n=t.originY,i=t.scale;if("animating"!==this._state){var r=this.seriesModel.getData().tree.root;if(!r)return;var o=r.getLayout();if(!o)return;var a,s=new ze(o.x,o.y,o.width,o.height),l=this._controllerHost;a=l.zoomLimit;var u=l.zoom=l.zoom||1;if(u*=i,a){var h=a.min||0,c=a.max||1/0;u=Math.max(Math.min(c,u),h)}var p=u/l.zoom;l.zoom=u;var d=this.seriesModel.layoutInfo,f=[1,0,0,1,0,0];we(f,f,[-(e-=d.x),-(n-=d.y)]),Me(f,f,[p,p]),we(f,f,[e,n]),s.applyTransform(f),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:s.x,y:s.y,width:s.width,height:s.height}})}},e.prototype._initEvents=function(t){var e=this;t.on("click",(function(t){if("ready"===e._state){var n=e.seriesModel.get("nodeClick",!0);if(n){var i=e.findTarget(t.offsetX,t.offsetY);if(i){var r=i.node;if(r.getLayout().isLeafRoot)e._rootToNode(i);else if("zoomToNode"===n)e._zoomToNode(i);else if("link"===n){var o=r.hostTree.data.getItemModel(r.dataIndex),a=o.get("link",!0),s=o.get("target",!0)||"blank";a&&Mp(a,s)}}}}}),this)},e.prototype._renderBreadcrumb=function(t,e,n){var i=this;n||(n=null!=t.get("leafDepth",!0)?{node:t.getViewRoot()}:this.findTarget(e.getWidth()/2,e.getHeight()/2))||(n={node:t.getData().tree.root}),(this._breadcrumb||(this._breadcrumb=new gD(this.group))).render(t,e,n.node,(function(e){"animating"!==i._state&&(oD(t.getViewRoot(),e)?i._rootToNode({node:e}):i._zoomToNode({node:e}))}))},e.prototype.remove=function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage={nodeGroup:[],background:[],content:[]},this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},e.prototype.dispose=function(){this._clearController()},e.prototype._zoomToNode=function(t){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},e.prototype._rootToNode=function(t){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},e.prototype.findTarget=function(t,e){var n;return this.seriesModel.getViewRoot().eachNode({attr:"viewChildren",order:"preorder"},(function(i){var r=this._storage.background[i.getRawIndex()];if(r){var o=r.transformCoordToLocal(t,e),a=r.shape;if(!(a.x<=o[0]&&o[0]<=a.x+a.width&&a.y<=o[1]&&o[1]<=a.y+a.height))return!1;n={node:i,offsetX:o[0],offsetY:o[1]}}}),this),n},e.type="treemap",e}(Og);var CD=E,DD=q,AD=-1,kD=function(){function t(e){var n=e.mappingMethod,i=e.type,r=this.option=T(e);this.type=i,this.mappingMethod=n,this._normalizeData=FD[n];var o=t.visualHandlers[i];this.applyVisual=o.applyVisual,this.getColorMapper=o.getColorMapper,this._normalizedToVisual=o._normalizedToVisual[n],"piecewise"===n?(LD(r),function(t){var e=t.pieceList;t.hasSpecialVisual=!1,E(e,(function(e,n){e.originIndex=n,null!=e.visual&&(t.hasSpecialVisual=!0)}))}(r)):"category"===n?r.categories?function(t){var e=t.categories,n=t.categoryMap={},i=t.visual;if(CD(e,(function(t,e){n[t]=e})),!Y(i)){var r=[];q(i)?CD(i,(function(t,e){var i=n[e];r[null!=i?i:AD]=t})):r[-1]=i,i=BD(t,r)}for(var o=e.length-1;o>=0;o--)null==i[o]&&(delete n[e[o]],e.pop())}(r):LD(r,!0):(lt("linear"!==n||r.dataExtent),LD(r))}return t.prototype.mapValueToVisual=function(t){var e=this._normalizeData(t);return this._normalizedToVisual(e,t)},t.prototype.getNormalizer=function(){return W(this._normalizeData,this)},t.listVisualTypes=function(){return G(t.visualHandlers)},t.isValidType=function(e){return t.visualHandlers.hasOwnProperty(e)},t.eachVisual=function(t,e,n){q(t)?E(t,e,n):e.call(n,t)},t.mapVisual=function(e,n,i){var r,o=Y(e)?[]:q(e)?{}:(r=!0,null);return t.eachVisual(e,(function(t,e){var a=n.call(i,t,e);r?o=a:o[e]=a})),o},t.retrieveVisuals=function(e){var n,i={};return e&&CD(t.visualHandlers,(function(t,r){e.hasOwnProperty(r)&&(i[r]=e[r],n=!0)})),n?i:null},t.prepareVisualTypes=function(t){if(Y(t))t=t.slice();else{if(!DD(t))return[];var e=[];CD(t,(function(t,n){e.push(n)})),t=e}return t.sort((function(t,e){return"color"===e&&"color"!==t&&0===t.indexOf("color")?1:-1})),t},t.dependsOn=function(t,e){return"color"===e?!(!t||0!==t.indexOf(e)):t===e},t.findPieceIndex=function(t,e,n){for(var i,r=1/0,o=0,a=e.length;ou[1]&&(u[1]=l);var h=e.get("colorMappingBy"),c={type:a.name,dataExtent:u,visual:a.range};"color"!==c.type||"index"!==h&&"id"!==h?c.mappingMethod="linear":(c.mappingMethod="category",c.loop=!0);var p=new kD(c);return WD(p).drColorMappingBy=h,p}(0,r,o,0,u,d);E(d,(function(t,e){if(t.depth>=n.length||t===n[t.depth]){var o=function(t,e,n,i,r,o){var a=A({},e);if(r){var s=r.type,l="color"===s&&WD(r).drColorMappingBy,u="index"===l?i:"id"===l?o.mapIdToIndex(n.getId()):n.getValue(t.get("visualDimension"));a[s]=r.mapValueToVisual(u)}return a}(r,u,t,e,f,i);YD(t,o,n,i)}}))}else s=XD(u),h.fill=s}}function XD(t){var e=UD(t,"color");if(e){var n=UD(t,"colorAlpha"),i=UD(t,"colorSaturation");return i&&(e=ni(e,null,null,i)),n&&(e=ii(e,n)),e}}function UD(t,e){var n=t[e];if(null!=n&&"none"!==n)return n}function ZD(t,e){var n=t.get(e);return Y(n)&&n.length?{name:e,range:n}:null}var jD=Math.max,qD=Math.min,KD=it,$D=E,JD=["itemStyle","borderWidth"],QD=["itemStyle","gapWidth"],tA=["upperLabel","show"],eA=["upperLabel","height"],nA={seriesType:"treemap",reset:function(t,e,n,i){var r=n.getWidth(),o=n.getHeight(),a=t.option,s=kp(t.getBoxLayoutParams(),{width:n.getWidth(),height:n.getHeight()}),l=a.size||[],u=$r(KD(s.width,l[0]),r),h=$r(KD(s.height,l[1]),o),c=i&&i.type,p=iD(i,["treemapZoomToNode","treemapRootToNode"],t),d="treemapRender"===c||"treemapMove"===c?i.rootRect:null,f=t.getViewRoot(),g=rD(f);if("treemapMove"!==c){var y="treemapZoomToNode"===c?function(t,e,n,i,r){var o,a=(e||{}).node,s=[i,r];if(!a||a===n)return s;var l=i*r,u=l*t.option.zoomToNodeRatio;for(;o=a.parentNode;){for(var h=0,c=o.children,p=0,d=c.length;poo&&(u=oo),a=o}ua[1]&&(a[1]=e)}))):a=[NaN,NaN];return{sum:i,dataExtent:a}}(e,a,s);if(0===u.sum)return t.viewChildren=[];if(u.sum=function(t,e,n,i,r){if(!i)return n;for(var o=t.get("visibleMin"),a=r.length,s=a,l=a-1;l>=0;l--){var u=r["asc"===i?a-l-1:l].getValue();u/n*ei&&(i=a));var l=t.area*t.area,u=e*e*n;return l?jD(u*i/l,l/(u*r)):1/0}function oA(t,e,n,i,r){var o=e===n.width?0:1,a=1-o,s=["x","y"],l=["width","height"],u=n[s[o]],h=e?t.area/e:0;(r||h>n[l[a]])&&(h=n[l[a]]);for(var c=0,p=t.length;ci&&(i=e);var o=i%2?i+2:i+3;r=[];for(var a=0;a0&&(m[0]=-m[0],m[1]=-m[1]);var _=v[0]<0?-1:1;if("start"!==i.__position&&"end"!==i.__position){var b=-Math.atan2(v[1],v[0]);u[0].8?"left":h[0]<-.8?"right":"center",p=h[1]>.8?"top":h[1]<-.8?"bottom":"middle";break;case"start":i.x=-h[0]*f+l[0],i.y=-h[1]*g+l[1],c=h[0]>.8?"right":h[0]<-.8?"left":"center",p=h[1]>.8?"bottom":h[1]<-.8?"top":"middle";break;case"insideStartTop":case"insideStart":case"insideStartBottom":i.x=f*_+l[0],i.y=l[1]+w,c=v[0]<0?"right":"left",i.originX=-f*_,i.originY=-w;break;case"insideMiddleTop":case"insideMiddle":case"insideMiddleBottom":case"middle":i.x=x[0],i.y=x[1]+w,c="center",i.originY=-w;break;case"insideEndTop":case"insideEnd":case"insideEndBottom":i.x=-f*_+u[0],i.y=u[1]+w,c=v[0]>=0?"right":"left",i.originX=f*_,i.originY=-w}i.scaleX=i.scaleY=r,i.setStyle({verticalAlign:i.__verticalAlign||p,align:i.__align||c})}}}function S(t,e){var n=t.__specifiedRotation;if(null==n){var i=a.tangentAt(e);t.attr("rotation",(1===e?-1:1)*Math.PI/2-Math.atan2(i[1],i[0]))}else t.attr("rotation",n)}},e}(Br),YA=function(){function t(t){this.group=new Br,this._LineCtor=t||HA}return t.prototype.updateData=function(t){var e=this;this._progressiveEls=null;var n=this,i=n.group,r=n._lineData;n._lineData=t,r||i.removeAll();var o=XA(t);t.diff(r).add((function(n){e._doAdd(t,n,o)})).update((function(n,i){e._doUpdate(r,t,i,n,o)})).remove((function(t){i.remove(r.getItemGraphicEl(t))})).execute()},t.prototype.updateLayout=function(){var t=this._lineData;t&&t.eachItemGraphicEl((function(e,n){e.updateLayout(t,n)}),this)},t.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=XA(t),this._lineData=null,this.group.removeAll()},t.prototype.incrementalUpdate=function(t,e){function n(t){t.isGroup||function(t){return t.animators&&t.animators.length>0}(t)||(t.incremental=!0,t.ensureState("emphasis").hoverLayer=!0)}this._progressiveEls=[];for(var i=t.start;i=0?i+=u:i-=u:f>=0?i-=u:i+=u}return i}function ek(t,e){var n=[],i=Dn,r=[[],[],[]],o=[[],[]],a=[];e/=2,t.eachEdge((function(t,s){var l=t.getLayout(),u=t.getVisual("fromSymbol"),h=t.getVisual("toSymbol");l.__original||(l.__original=[Tt(l[0]),Tt(l[1])],l[2]&&l.__original.push(Tt(l[2])));var c=l.__original;if(null!=l[2]){if(It(r[0],c[0]),It(r[1],c[2]),It(r[2],c[1]),u&&"none"!==u){var p=SA(t.node1),d=tk(r,c[0],p*e);i(r[0][0],r[1][0],r[2][0],d,n),r[0][0]=n[3],r[1][0]=n[4],i(r[0][1],r[1][1],r[2][1],d,n),r[0][1]=n[3],r[1][1]=n[4]}if(h&&"none"!==h){p=SA(t.node2),d=tk(r,c[1],p*e);i(r[0][0],r[1][0],r[2][0],d,n),r[1][0]=n[1],r[2][0]=n[2],i(r[0][1],r[1][1],r[2][1],d,n),r[1][1]=n[1],r[2][1]=n[2]}It(l[0],r[0]),It(l[1],r[2]),It(l[2],r[1])}else{if(It(o[0],c[0]),It(o[1],c[1]),kt(a,o[1],o[0]),Et(a,a),u&&"none"!==u){p=SA(t.node1);At(o[0],o[0],a,p*e)}if(h&&"none"!==h){p=SA(t.node2);At(o[1],o[1],a,-p*e)}It(l[0],o[0]),It(l[1],o[1])}}))}function nk(t){return"view"===t.type}var ik=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(t,e){var n=new xS,i=new YA,r=this.group;this._controller=new nT(e.getZr()),this._controllerHost={target:r},r.add(n.group),r.add(i.group),this._symbolDraw=n,this._lineDraw=i,this._firstRender=!0},e.prototype.render=function(t,e,n){var i=this,r=t.coordinateSystem;this._model=t;var o=this._symbolDraw,a=this._lineDraw,s=this.group;if(nk(r)){var l={x:r.x,y:r.y,scaleX:r.scaleX,scaleY:r.scaleY};this._firstRender?s.attr(l):vh(s,l,t)}ek(t.getGraph(),wA(t));var u=t.getData();o.updateData(u);var h=t.getEdgeData();a.updateData(h),this._updateNodeAndLinkScale(),this._updateController(t,e,n),clearTimeout(this._layoutTimeout);var c=t.forceLayout,p=t.get(["force","layoutAnimation"]);c&&this._startForceLayoutIteration(c,p);var d=t.get("layout");u.graph.eachNode((function(e){var n=e.dataIndex,r=e.getGraphicEl(),o=e.getModel();if(r){r.off("drag").off("dragend");var a=o.get("draggable");a&&r.on("drag",(function(o){switch(d){case"force":c.warmUp(),!i._layouting&&i._startForceLayoutIteration(c,p),c.setFixed(n),u.setItemLayout(n,[r.x,r.y]);break;case"circular":u.setItemLayout(n,[r.x,r.y]),e.setLayout({fixed:!0},!0),TA(t,"symbolSize",e,[o.offsetX,o.offsetY]),i.updateLayout(t);break;default:u.setItemLayout(n,[r.x,r.y]),_A(t.getGraph(),t),i.updateLayout(t)}})).on("dragend",(function(){c&&c.setUnfixed(n)})),r.setDraggable(a,!!o.get("cursor")),"adjacency"===o.get(["emphasis","focus"])&&(rl(r).focus=e.getAdjacentDataIndices())}})),u.graph.eachEdge((function(t){var e=t.getGraphicEl(),n=t.getModel().get(["emphasis","focus"]);e&&"adjacency"===n&&(rl(e).focus={edge:[t.dataIndex],node:[t.node1.dataIndex,t.node2.dataIndex]})}));var f="circular"===t.get("layout")&&t.get(["circular","rotateLabel"]),g=u.getLayout("cx"),y=u.getLayout("cy");u.graph.eachNode((function(t){DA(t,f,g,y)})),this._firstRender=!1},e.prototype.dispose=function(){this.remove(),this._controller&&this._controller.dispose(),this._controllerHost=null},e.prototype._startForceLayoutIteration=function(t,e){var n=this;!function i(){t.step((function(t){n.updateLayout(n._model),(n._layouting=!t)&&(e?n._layoutTimeout=setTimeout(i,16):i())}))}()},e.prototype._updateController=function(t,e,n){var i=this,r=this._controller,o=this._controllerHost,a=this.group;r.setPointerChecker((function(e,i,r){var o=a.getBoundingRect();return o.applyTransform(a.transform),o.contain(i,r)&&!hT(e,n,t)})),nk(t.coordinateSystem)?(r.enable(t.get("roam")),o.zoomLimit=t.get("scaleLimit"),o.zoom=t.coordinateSystem.getZoom(),r.off("pan").off("zoom").on("pan",(function(e){aT(o,e.dx,e.dy),n.dispatchAction({seriesId:t.id,type:"graphRoam",dx:e.dx,dy:e.dy})})).on("zoom",(function(e){sT(o,e.scale,e.originX,e.originY),n.dispatchAction({seriesId:t.id,type:"graphRoam",zoom:e.scale,originX:e.originX,originY:e.originY}),i._updateNodeAndLinkScale(),ek(t.getGraph(),wA(t)),i._lineDraw.updateLayout(),n.updateLabelLayout()}))):r.disable()},e.prototype._updateNodeAndLinkScale=function(){var t=this._model,e=t.getData(),n=wA(t);e.eachItemGraphicEl((function(t,e){t&&t.setSymbolScale(n)}))},e.prototype.updateLayout=function(t){ek(t.getGraph(),wA(t)),this._symbolDraw.updateLayout(),this._lineDraw.updateLayout()},e.prototype.remove=function(){clearTimeout(this._layoutTimeout),this._layouting=!1,this._layoutTimeout=null,this._symbolDraw&&this._symbolDraw.remove(),this._lineDraw&&this._lineDraw.remove()},e.type="graph",e}(Og);function rk(t){return"_EC_"+t}var ok=function(){function t(t){this.type="graph",this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={},this._directed=t||!1}return t.prototype.isDirected=function(){return this._directed},t.prototype.addNode=function(t,e){t=null==t?""+e:""+t;var n=this._nodesMap;if(!n[rk(t)]){var i=new ak(t,e);return i.hostGraph=this,this.nodes.push(i),n[rk(t)]=i,i}},t.prototype.getNodeByIndex=function(t){var e=this.data.getRawIndex(t);return this.nodes[e]},t.prototype.getNodeById=function(t){return this._nodesMap[rk(t)]},t.prototype.addEdge=function(t,e,n){var i=this._nodesMap,r=this._edgesMap;if(j(t)&&(t=this.nodes[t]),j(e)&&(e=this.nodes[e]),t instanceof ak||(t=i[rk(t)]),e instanceof ak||(e=i[rk(e)]),t&&e){var o=t.id+"-"+e.id,a=new sk(t,e,n);return a.hostGraph=this,this._directed&&(t.outEdges.push(a),e.inEdges.push(a)),t.edges.push(a),t!==e&&e.edges.push(a),this.edges.push(a),r[o]=a,a}},t.prototype.getEdgeByIndex=function(t){var e=this.edgeData.getRawIndex(t);return this.edges[e]},t.prototype.getEdge=function(t,e){t instanceof ak&&(t=t.id),e instanceof ak&&(e=e.id);var n=this._edgesMap;return this._directed?n[t+"-"+e]:n[t+"-"+e]||n[e+"-"+t]},t.prototype.eachNode=function(t,e){for(var n=this.nodes,i=n.length,r=0;r=0&&t.call(e,n[r],r)},t.prototype.eachEdge=function(t,e){for(var n=this.edges,i=n.length,r=0;r=0&&n[r].node1.dataIndex>=0&&n[r].node2.dataIndex>=0&&t.call(e,n[r],r)},t.prototype.breadthFirstTraverse=function(t,e,n,i){if(e instanceof ak||(e=this._nodesMap[rk(e)]),e){for(var r="out"===n?"outEdges":"in"===n?"inEdges":"edges",o=0;o=0&&n.node2.dataIndex>=0}));for(r=0,o=i.length;r=0&&this[t][e].setItemVisual(this.dataIndex,n,i)},getVisual:function(n){return this[t][e].getItemVisual(this.dataIndex,n)},setLayout:function(n,i){this.dataIndex>=0&&this[t][e].setItemLayout(this.dataIndex,n,i)},getLayout:function(){return this[t][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[t][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[t][e].getRawIndex(this.dataIndex)}}}function uk(t,e,n,i,r){for(var o=new ok(i),a=0;a "+p)),u++)}var d,f=n.get("coordinateSystem");if("cartesian2d"===f||"polar"===f)d=_x(t,n);else{var g=wd.get(f),y=g&&g.dimensions||[];P(y,"value")<0&&y.concat(["value"]);var v=px(t,{coordDimensions:y,encodeDefine:n.getEncode()}).dimensions;(d=new cx(v,n)).initData(t)}var m=new cx(["value"],n);return m.initData(l,s),r&&r(d,m),ZC({mainData:d,struct:o,structAttr:"graph",datas:{node:d,edge:m},datasAttr:{node:"data",edge:"edgeData"}}),o.update(),o}R(ak,lk("hostGraph","data")),R(sk,lk("hostGraph","edgeData"));var hk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n}return n(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments);var n=this;function i(){return n._categoriesData}this.legendVisualProvider=new NM(i,i),this.fillDataTextStyle(e.edges||e.links),this._updateCategoriesData()},e.prototype.mergeOption=function(e){t.prototype.mergeOption.apply(this,arguments),this.fillDataTextStyle(e.edges||e.links),this._updateCategoriesData()},e.prototype.mergeDefaultAndTheme=function(e){t.prototype.mergeDefaultAndTheme.apply(this,arguments),Co(e,"edgeLabel",["show"])},e.prototype.getInitialData=function(t,e){var n,i=t.edges||t.links||[],r=t.data||t.nodes||[],o=this;if(r&&i){dA(n=this)&&(n.__curvenessList=[],n.__edgeMap={},fA(n));var a=uk(r,i,this,!0,(function(t,e){t.wrapMethod("getItemModel",(function(t){var e=o._categoriesModels[t.getShallow("category")];return e&&(e.parentModel=t.parentModel,t.parentModel=e),t}));var n=Cc.prototype.getModel;function i(t,e){var i=n.call(this,t,e);return i.resolveParentPath=r,i}function r(t){if(t&&("label"===t[0]||"label"===t[1])){var e=t.slice();return"label"===t[0]?e[0]="edgeLabel":"label"===t[1]&&(e[1]="edgeLabel"),e}return t}e.wrapMethod("getItemModel",(function(t){return t.resolveParentPath=r,t.getModel=i,t}))}));return E(a.edges,(function(t){!function(t,e,n,i){if(dA(n)){var r=gA(t,e,n),o=n.__edgeMap,a=o[yA(r)];o[r]&&!a?o[r].isForward=!0:a&&o[r]&&(a.isForward=!0,o[r].isForward=!1),o[r]=o[r]||[],o[r].push(i)}}(t.node1,t.node2,this,t.dataIndex)}),this),a.data}},e.prototype.getGraph=function(){return this.getData().graph},e.prototype.getEdgeData=function(){return this.getGraph().edgeData},e.prototype.getCategoriesData=function(){return this._categoriesData},e.prototype.formatTooltip=function(t,e,n){if("edge"===n){var i=this.getData(),r=this.getDataParams(t,n),o=i.graph.getEdgeByIndex(t),a=i.getName(o.node1.dataIndex),s=i.getName(o.node2.dataIndex),l=[];return null!=a&&l.push(a),null!=s&&l.push(s),og("nameValue",{name:l.join(" > "),value:r.value,noValue:null==r.value})}return vg({series:this,dataIndex:t,multipleSeries:e})},e.prototype._updateCategoriesData=function(){var t=z(this.option.categories||[],(function(t){return null!=t.value?t:A({value:0},t)})),e=new cx(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray((function(t){return e.getItemModel(t)}))},e.prototype.setZoom=function(t){this.option.zoom=t},e.prototype.setCenter=function(t){this.option.center=t},e.prototype.isAnimationEnabled=function(){return t.prototype.isAnimationEnabled.call(this)&&!("force"===this.get("layout")&&this.get(["force","layoutAnimation"]))},e.type="series.graph",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={z:2,coordinateSystem:"view",legendHoverLink:!0,layout:null,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,friction:.6,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{position:"middle",distance:5},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{show:!1,formatter:"{b}"},itemStyle:{},lineStyle:{color:"#aaa",width:1,opacity:.5},emphasis:{scale:!0,label:{show:!0}},select:{itemStyle:{borderColor:"#212121"}}},e}(bg),ck={type:"graphRoam",event:"graphRoam",update:"none"};var pk=function(){this.angle=0,this.width=10,this.r=10,this.x=0,this.y=0},dk=function(t){function e(e){var n=t.call(this,e)||this;return n.type="pointer",n}return n(e,t),e.prototype.getDefaultShape=function(){return new pk},e.prototype.buildPath=function(t,e){var n=Math.cos,i=Math.sin,r=e.r,o=e.width,a=e.angle,s=e.x-n(a)*o*(o>=r/3?1:2),l=e.y-i(a)*o*(o>=r/3?1:2);a=e.angle-Math.PI/2,t.moveTo(s,l),t.lineTo(e.x+n(a)*o,e.y+i(a)*o),t.lineTo(e.x+n(e.angle)*r,e.y+i(e.angle)*r),t.lineTo(e.x-n(a)*o,e.y-i(a)*o),t.lineTo(s,l)},e}(ks);function fk(t,e){var n=null==t?"":t+"";return e&&(U(e)?n=e.replace("{value}",n):X(e)&&(n=e(t))),n}var gk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){this.group.removeAll();var i=t.get(["axisLine","lineStyle","color"]),r=function(t,e){var n=t.get("center"),i=e.getWidth(),r=e.getHeight(),o=Math.min(i,r);return{cx:$r(n[0],e.getWidth()),cy:$r(n[1],e.getHeight()),r:$r(t.get("radius"),o/2)}}(t,n);this._renderMain(t,e,n,i,r),this._data=t.getData()},e.prototype.dispose=function(){},e.prototype._renderMain=function(t,e,n,i,r){var o=this.group,a=t.get("clockwise"),s=-t.get("startAngle")/180*Math.PI,l=-t.get("endAngle")/180*Math.PI,u=t.getModel("axisLine"),h=u.get("roundCap")?JS:Fu,c=u.get("show"),p=u.getModel("lineStyle"),d=p.get("width"),f=[s,l];us(f,!a);for(var g=(l=f[1])-(s=f[0]),y=s,v=[],m=0;c&&m=t&&(0===e?0:i[e-1][0])Math.PI/2&&(V+=Math.PI):"tangential"===z?V=-M-Math.PI/2:j(z)&&(V=z*Math.PI/180),0===V?c.add(new Xs({style:oc(x,{text:O,x:N,y:E,verticalAlign:h<-.8?"top":h>.8?"bottom":"middle",align:u<-.4?"left":u>.4?"right":"center"},{inheritColor:R}),silent:!0})):c.add(new Xs({style:oc(x,{text:O,x:N,y:E,verticalAlign:"middle",align:"center"},{inheritColor:R}),silent:!0,originX:N,originY:E,rotation:V}))}if(m.get("show")&&k!==_){P=(P=m.get("distance"))?P+l:l;for(var B=0;B<=b;B++){u=Math.cos(M),h=Math.sin(M);var F=new Ku({shape:{x1:u*(f-P)+p,y1:h*(f-P)+d,x2:u*(f-S-P)+p,y2:h*(f-S-P)+d},silent:!0,style:D});"auto"===D.stroke&&F.setStyle({stroke:i((k+B/b)/_)}),c.add(F),M+=T}M-=T}else M+=I}},e.prototype._renderPointer=function(t,e,n,i,r,o,a,s,l){var u=this.group,h=this._data,c=this._progressEls,p=[],d=t.get(["pointer","show"]),f=t.getModel("progress"),g=f.get("show"),y=t.getData(),v=y.mapDimension("value"),m=+t.get("min"),x=+t.get("max"),_=[m,x],b=[o,a];function w(e,n){var i,o=y.getItemModel(e).getModel("pointer"),a=$r(o.get("width"),r.r),s=$r(o.get("length"),r.r),l=t.get(["pointer","icon"]),u=o.get("offsetCenter"),h=$r(u[0],r.r),c=$r(u[1],r.r),p=o.get("keepAspect");return(i=l?Xy(l,h-a/2,c-s,a,s,null,p):new dk({shape:{angle:-Math.PI/2,width:a,r:s,x:h,y:c}})).rotation=-(n+Math.PI/2),i.x=r.cx,i.y=r.cy,i}function S(t,e){var n=f.get("roundCap")?JS:Fu,i=f.get("overlap"),a=i?f.get("width"):l/y.count(),u=i?r.r-a:r.r-(t+1)*a,h=i?r.r:r.r-t*a,c=new n({shape:{startAngle:o,endAngle:e,cx:r.cx,cy:r.cy,clockwise:s,r0:u,r:h}});return i&&(c.z2=x-y.get(v,t)%x),c}(g||d)&&(y.diff(h).add((function(e){var n=y.get(v,e);if(d){var i=w(e,o);mh(i,{rotation:-((isNaN(+n)?b[0]:Kr(n,_,b,!0))+Math.PI/2)},t),u.add(i),y.setItemGraphicEl(e,i)}if(g){var r=S(e,o),a=f.get("clip");mh(r,{shape:{endAngle:Kr(n,_,b,a)}},t),u.add(r),ol(t.seriesIndex,y.dataType,e,r),p[e]=r}})).update((function(e,n){var i=y.get(v,e);if(d){var r=h.getItemGraphicEl(n),a=r?r.rotation:o,s=w(e,a);s.rotation=a,vh(s,{rotation:-((isNaN(+i)?b[0]:Kr(i,_,b,!0))+Math.PI/2)},t),u.add(s),y.setItemGraphicEl(e,s)}if(g){var l=c[n],m=S(e,l?l.shape.endAngle:o),x=f.get("clip");vh(m,{shape:{endAngle:Kr(i,_,b,x)}},t),u.add(m),ol(t.seriesIndex,y.dataType,e,m),p[e]=m}})).execute(),y.each((function(t){var e=y.getItemModel(t),n=e.getModel("emphasis"),r=n.get("focus"),o=n.get("blurScope"),a=n.get("disabled");if(d){var s=y.getItemGraphicEl(t),l=y.getItemVisual(t,"style"),u=l.fill;if(s instanceof Ns){var h=s.style;s.useStyle(A({image:h.image,x:h.x,y:h.y,width:h.width,height:h.height},l))}else s.useStyle(l),"pointer"!==s.type&&s.setColor(u);s.setStyle(e.getModel(["pointer","itemStyle"]).getItemStyle()),"auto"===s.style.fill&&s.setStyle("fill",i(Kr(y.get(v,t),_,[0,1],!0))),s.z2EmphasisLift=0,$l(s,e),Zl(s,r,o,a)}if(g){var c=p[t];c.useStyle(y.getItemVisual(t,"style")),c.setStyle(e.getModel(["progress","itemStyle"]).getItemStyle()),c.z2EmphasisLift=0,$l(c,e),Zl(c,r,o,a)}})),this._progressEls=p)},e.prototype._renderAnchor=function(t,e){var n=t.getModel("anchor");if(n.get("show")){var i=n.get("size"),r=n.get("icon"),o=n.get("offsetCenter"),a=n.get("keepAspect"),s=Xy(r,e.cx-i/2+$r(o[0],e.r),e.cy-i/2+$r(o[1],e.r),i,i,null,a);s.z2=n.get("showAbove")?1:0,s.setStyle(n.getModel("itemStyle").getItemStyle()),this.group.add(s)}},e.prototype._renderTitleAndDetail=function(t,e,n,i,r){var o=this,a=t.getData(),s=a.mapDimension("value"),l=+t.get("min"),u=+t.get("max"),h=new Br,c=[],p=[],d=t.isAnimationEnabled(),f=t.get(["pointer","showAbove"]);a.diff(this._data).add((function(t){c[t]=new Xs({silent:!0}),p[t]=new Xs({silent:!0})})).update((function(t,e){c[t]=o._titleEls[e],p[t]=o._detailEls[e]})).execute(),a.each((function(e){var n=a.getItemModel(e),o=a.get(s,e),g=new Br,y=i(Kr(o,[l,u],[0,1],!0)),v=n.getModel("title");if(v.get("show")){var m=v.get("offsetCenter"),x=r.cx+$r(m[0],r.r),_=r.cy+$r(m[1],r.r);(D=c[e]).attr({z2:f?0:2,style:oc(v,{x:x,y:_,text:a.getName(e),align:"center",verticalAlign:"middle"},{inheritColor:y})}),g.add(D)}var b=n.getModel("detail");if(b.get("show")){var w=b.get("offsetCenter"),S=r.cx+$r(w[0],r.r),M=r.cy+$r(w[1],r.r),I=$r(b.get("width"),r.r),T=$r(b.get("height"),r.r),C=t.get(["progress","show"])?a.getItemVisual(e,"style").fill:y,D=p[e],A=b.get("formatter");D.attr({z2:f?0:2,style:oc(b,{x:S,y:M,text:fk(o,A),width:isNaN(I)?null:I,height:isNaN(T)?null:T,align:"center",verticalAlign:"middle"},{inheritColor:C})}),dc(D,{normal:b},o,(function(t){return fk(t,A)})),d&&fc(D,e,a,t,{getFormattedLabel:function(t,e,n,i,r,a){return fk(a?a.interpolatedValue:o,A)}}),g.add(D)}h.add(g)})),this.group.add(h),this._titleEls=c,this._detailEls=p},e.type="gauge",e}(Og),yk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.visualStyleAccessPath="itemStyle",n}return n(e,t),e.prototype.getInitialData=function(t,e){return RM(this,["value"])},e.type="series.gauge",e.defaultOption={z:2,colorBy:"data",center:["50%","50%"],legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,clockwise:!0,min:0,max:100,splitNumber:10,axisLine:{show:!0,roundCap:!1,lineStyle:{color:[[1,"#E6EBF8"]],width:10}},progress:{show:!1,overlap:!0,width:10,roundCap:!1,clip:!0},splitLine:{show:!0,length:10,distance:10,lineStyle:{color:"#63677A",width:3,type:"solid"}},axisTick:{show:!0,splitNumber:5,length:6,distance:10,lineStyle:{color:"#63677A",width:1,type:"solid"}},axisLabel:{show:!0,distance:15,color:"#464646",fontSize:12,rotate:0},pointer:{icon:null,offsetCenter:[0,0],show:!0,showAbove:!0,length:"60%",width:6,keepAspect:!1},anchor:{show:!1,showAbove:!1,size:6,icon:"circle",offsetCenter:[0,0],keepAspect:!1,itemStyle:{color:"#fff",borderWidth:0,borderColor:"#5470c6"}},title:{show:!0,offsetCenter:[0,"20%"],color:"#464646",fontSize:16,valueAnimation:!1},detail:{show:!0,backgroundColor:"rgba(0,0,0,0)",borderWidth:0,borderColor:"#ccc",width:100,height:null,padding:[5,10],offsetCenter:[0,"40%"],color:"#464646",fontSize:30,fontWeight:"bold",lineHeight:30,valueAnimation:!1}},e}(bg);var vk=["itemStyle","opacity"],mk=function(t){function e(e,n){var i=t.call(this)||this,r=i,o=new Zu,a=new Xs;return r.setTextContent(a),i.setTextGuideLine(o),i.updateData(e,n,!0),i}return n(e,t),e.prototype.updateData=function(t,e,n){var i=this,r=t.hostModel,o=t.getItemModel(e),a=t.getItemLayout(e),s=o.getModel("emphasis"),l=o.get(vk);l=null==l?1:l,n||Sh(i),i.useStyle(t.getItemVisual(e,"style")),i.style.lineJoin="round",n?(i.setShape({points:a.points}),i.style.opacity=0,mh(i,{style:{opacity:l}},r,e)):vh(i,{style:{opacity:l},shape:{points:a.points}},r,e),$l(i,o),this._updateLabel(t,e),Zl(this,s.get("focus"),s.get("blurScope"),s.get("disabled"))},e.prototype._updateLabel=function(t,e){var n=this,i=this.getTextGuideLine(),r=n.getTextContent(),o=t.hostModel,a=t.getItemModel(e),s=t.getItemLayout(e).label,l=t.getItemVisual(e,"style"),u=l.fill;ic(r,rc(a),{labelFetcher:t.hostModel,labelDataIndex:e,defaultOpacity:l.opacity,defaultText:t.getName(e)},{normal:{align:s.textAlign,verticalAlign:s.verticalAlign}}),n.setTextConfig({local:!0,inside:!!s.inside,insideStroke:u,outsideFill:u});var h=s.linePoints;i.setShape({points:h}),n.textGuideLineConfig={anchor:h?new De(h[0][0],h[0][1]):null},vh(r,{style:{x:s.x,y:s.y}},o,e),r.attr({rotation:s.rotation,originX:s.x,originY:s.y,z2:10}),kb(n,Lb(a),{stroke:u})},e}(Xu),xk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.ignoreLabelLineUpdate=!0,n}return n(e,t),e.prototype.render=function(t,e,n){var i=t.getData(),r=this._data,o=this.group;i.diff(r).add((function(t){var e=new mk(i,t);i.setItemGraphicEl(t,e),o.add(e)})).update((function(t,e){var n=r.getItemGraphicEl(e);n.updateData(i,t),o.add(n),i.setItemGraphicEl(t,n)})).remove((function(e){wh(r.getItemGraphicEl(e),t,e)})).execute(),this._data=i},e.prototype.remove=function(){this.group.removeAll(),this._data=null},e.prototype.dispose=function(){},e.type="funnel",e}(Og),_k=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments),this.legendVisualProvider=new NM(W(this.getData,this),W(this.getRawData,this)),this._defaultLabelLine(e)},e.prototype.getInitialData=function(t,e){return RM(this,{coordDimensions:["value"],encodeDefaulter:H(ed,this)})},e.prototype._defaultLabelLine=function(t){Co(t,"labelLine",["show"]);var e=t.labelLine,n=t.emphasis.labelLine;e.show=e.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},e.prototype.getDataParams=function(e){var n=this.getData(),i=t.prototype.getDataParams.call(this,e),r=n.mapDimension("value"),o=n.getSum(r);return i.percent=o?+(n.get(r,e)/o*100).toFixed(2):0,i.$vars.push("percent"),i},e.type="series.funnel",e.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",left:80,top:60,right:80,bottom:60,minSize:"0%",maxSize:"100%",sort:"descending",orient:"vertical",gap:0,funnelAlign:"center",label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1}},itemStyle:{borderColor:"#fff",borderWidth:1},emphasis:{label:{show:!0}},select:{itemStyle:{borderColor:"#212121"}}},e}(bg);function bk(t,e){t.eachSeriesByType("funnel",(function(t){var n=t.getData(),i=n.mapDimension("value"),r=t.get("sort"),o=function(t,e){return kp(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}(t,e),a=t.get("orient"),s=o.width,l=o.height,u=function(t,e){for(var n=t.mapDimension("value"),i=t.mapArray(n,(function(t){return t})),r=[],o="ascending"===e,a=0,s=t.count();a5)return;var i=this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]);"none"!==i.behavior&&this._dispatchExpand({axisExpandWindow:i.axisExpandWindow})}this._mouseDownPoint=null},mousemove:function(t){if(!this._mouseDownPoint&&Rk(this,"mousemove")){var e=this._model,n=e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]),i=n.behavior;"jump"===i&&this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")),this._throttledDispatchExpand("none"===i?null:{axisExpandWindow:n.axisExpandWindow,animation:"jump"===i?null:{duration:0}})}}};function Rk(t,e){var n=t._model;return n.get("axisExpandable")&&n.get("axisExpandTriggerOn")===e}var Nk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(){t.prototype.init.apply(this,arguments),this.mergeOption({})},e.prototype.mergeOption=function(t){var e=this.option;t&&C(e,t,!0),this._initDimensions()},e.prototype.contains=function(t,e){var n=t.get("parallelIndex");return null!=n&&e.getComponent("parallel",n)===this},e.prototype.setAxisExpand=function(t){E(["axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth","axisExpandWindow"],(function(e){t.hasOwnProperty(e)&&(this.option[e]=t[e])}),this)},e.prototype._initDimensions=function(){var t=this.dimensions=[],e=this.parallelAxisIndex=[];E(B(this.ecModel.queryComponents({mainType:"parallelAxis"}),(function(t){return(t.get("parallelIndex")||0)===this.componentIndex}),this),(function(n){t.push("dim"+n.get("dim")),e.push(n.componentIndex)}))},e.type="parallel",e.dependencies=["parallelAxis"],e.layoutMode="box",e.defaultOption={z:0,left:80,top:60,right:80,bottom:60,layout:"horizontal",axisExpandable:!1,axisExpandCenter:null,axisExpandCount:0,axisExpandWidth:50,axisExpandRate:17,axisExpandDebounce:50,axisExpandSlideTriggerArea:[-.15,.05,.4],axisExpandTriggerOn:"click",parallelAxisDefault:null},e}(zp),Ek=function(t){function e(e,n,i,r,o){var a=t.call(this,e,n,i)||this;return a.type=r||"value",a.axisIndex=o,a}return n(e,t),e.prototype.isHorizontal=function(){return"horizontal"!==this.coordinateSystem.getModel().get("layout")},e}(ab);function zk(t,e,n,i,r,o){t=t||0;var a=n[1]-n[0];if(null!=r&&(r=Bk(r,[0,a])),null!=o&&(o=Math.max(o,null!=r?r:0)),"all"===i){var s=Math.abs(e[1]-e[0]);s=Bk(s,[0,a]),r=o=Bk(s,[r,o]),i=0}e[0]=Bk(e[0],n),e[1]=Bk(e[1],n);var l=Vk(e,i);e[i]+=t;var u,h=r||0,c=n.slice();return l.sign<0?c[0]+=h:c[1]-=h,e[i]=Bk(e[i],c),u=Vk(e,i),null!=r&&(u.sign!==l.sign||u.spano&&(e[1-i]=e[i]+u.sign*o),e}function Vk(t,e){var n=t[e]-t[1-e];return{span:Math.abs(n),sign:n>0?-1:n<0?1:e?-1:1}}function Bk(t,e){return Math.min(null!=e[1]?e[1]:1/0,Math.max(null!=e[0]?e[0]:-1/0,t))}var Fk=E,Gk=Math.min,Wk=Math.max,Hk=Math.floor,Yk=Math.ceil,Xk=Jr,Uk=Math.PI,Zk=function(){function t(t,e,n){this.type="parallel",this._axesMap=yt(),this._axesLayout={},this.dimensions=t.dimensions,this._model=t,this._init(t,e,n)}return t.prototype._init=function(t,e,n){var i=t.dimensions,r=t.parallelAxisIndex;Fk(i,(function(t,n){var i=r[n],o=e.getComponent("parallelAxis",i),a=this._axesMap.set(t,new Ek(t,b_(o),[0,0],o.get("type"),i)),s="category"===a.type;a.onBand=s&&o.get("boundaryGap"),a.inverse=o.get("inverse"),o.axis=a,a.model=o,a.coordinateSystem=o.coordinateSystem=this}),this)},t.prototype.update=function(t,e){this._updateAxesFromSeries(this._model,t)},t.prototype.containPoint=function(t){var e=this._makeLayoutInfo(),n=e.axisBase,i=e.layoutBase,r=e.pixelDimIndex,o=t[1-r],a=t[r];return o>=n&&o<=n+e.axisLength&&a>=i&&a<=i+e.layoutLength},t.prototype.getModel=function(){return this._model},t.prototype._updateAxesFromSeries=function(t,e){e.eachSeries((function(n){if(t.contains(n,e)){var i=n.getData();Fk(this.dimensions,(function(t){var e=this._axesMap.get(t);e.scale.unionExtentFromData(i,i.mapDimension(t)),__(e.scale,e.model)}),this)}}),this)},t.prototype.resize=function(t,e){this._rect=kp(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),this._layoutAxes()},t.prototype.getRect=function(){return this._rect},t.prototype._makeLayoutInfo=function(){var t,e=this._model,n=this._rect,i=["x","y"],r=["width","height"],o=e.get("layout"),a="horizontal"===o?0:1,s=n[r[a]],l=[0,s],u=this.dimensions.length,h=jk(e.get("axisExpandWidth"),l),c=jk(e.get("axisExpandCount")||0,[0,u]),p=e.get("axisExpandable")&&u>3&&u>c&&c>1&&h>0&&s>0,d=e.get("axisExpandWindow");d?(t=jk(d[1]-d[0],l),d[1]=d[0]+t):(t=jk(h*(c-1),l),(d=[h*(e.get("axisExpandCenter")||Hk(u/2))-t/2])[1]=d[0]+t);var f=(s-t)/(u-c);f<3&&(f=0);var g=[Hk(Xk(d[0]/h,1))+1,Yk(Xk(d[1]/h,1))-1],y=f/h*d[0];return{layout:o,pixelDimIndex:a,layoutBase:n[i[a]],layoutLength:s,axisBase:n[i[1-a]],axisLength:n[r[1-a]],axisExpandable:p,axisExpandWidth:h,axisCollapseWidth:f,axisExpandWindow:d,axisCount:u,winInnerIndices:g,axisExpandWindow0Pos:y}},t.prototype._layoutAxes=function(){var t=this._rect,e=this._axesMap,n=this.dimensions,i=this._makeLayoutInfo(),r=i.layout;e.each((function(t){var e=[0,i.axisLength],n=t.inverse?1:0;t.setExtent(e[n],e[1-n])})),Fk(n,(function(e,n){var o=(i.axisExpandable?Kk:qk)(n,i),a={horizontal:{x:o.position,y:i.axisLength},vertical:{x:0,y:o.position}},s={horizontal:Uk/2,vertical:0},l=[a[r].x+t.x,a[r].y+t.y],u=s[r],h=[1,0,0,1,0,0];Se(h,h,u),we(h,h,l),this._axesLayout[e]={position:l,rotation:u,transform:h,axisNameAvailableWidth:o.axisNameAvailableWidth,axisLabelShow:o.axisLabelShow,nameTruncateMaxWidth:o.nameTruncateMaxWidth,tickDirection:1,labelDirection:1}}),this)},t.prototype.getAxis=function(t){return this._axesMap.get(t)},t.prototype.dataToPoint=function(t,e){return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t),e)},t.prototype.eachActiveState=function(t,e,n,i){null==n&&(n=0),null==i&&(i=t.count());var r=this._axesMap,o=this.dimensions,a=[],s=[];E(o,(function(e){a.push(t.mapDimension(e)),s.push(r.get(e).model)}));for(var l=this.hasAxisBrushed(),u=n;ur*(1-h[0])?(l="jump",a=s-r*(1-h[2])):(a=s-r*h[1])>=0&&(a=s-r*(1-h[1]))<=0&&(a=0),(a*=e.axisExpandWidth/u)?zk(a,i,o,"all"):l="none";else{var p=i[1]-i[0];(i=[Wk(0,o[1]*s/p-p/2)])[1]=Gk(o[1],i[0]+p),i[0]=i[1]-p}return{axisExpandWindow:i,behavior:l}},t}();function jk(t,e){return Gk(Wk(t,e[0]),e[1])}function qk(t,e){var n=e.layoutLength/(e.axisCount-1);return{position:n*t,axisNameAvailableWidth:n,axisLabelShow:!0}}function Kk(t,e){var n,i,r=e.layoutLength,o=e.axisExpandWidth,a=e.axisCount,s=e.axisCollapseWidth,l=e.winInnerIndices,u=s,h=!1;return t=0;n--)Qr(e[n])},e.prototype.getActiveState=function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t||isNaN(+t))return"inactive";if(1===e.length){var n=e[0];if(n[0]<=t&&t<=n[1])return"active"}else for(var i=0,r=e.length;i6}(t)||o){if(a&&!o){"single"===s.brushMode&&vL(t);var l=T(s);l.brushType=RL(l.brushType,a),l.panelId=a===Qk?null:a.panelId,o=t._creatingCover=uL(t,l),t._covers.push(o)}if(o){var u=zL[RL(t._brushType,a)];o.__brushOption.range=u.getCreatingRange(kL(t,o,t._track)),i&&(hL(t,o),u.updateCommon(t,o)),cL(t,o),r={isEnd:i}}}else i&&"single"===s.brushMode&&s.removeOnClick&&gL(t,e,n)&&vL(t)&&(r={isEnd:i,removeOnClick:!0});return r}function RL(t,e){return"auto"===t?e.defaultBrushType:t}var NL={mousedown:function(t){if(this._dragging)EL(this,t);else if(!t.target||!t.target.draggable){LL(t);var e=this.group.transformCoordToLocal(t.offsetX,t.offsetY);this._creatingCover=null,(this._creatingPanel=gL(this,t,e))&&(this._dragging=!0,this._track=[e.slice()])}},mousemove:function(t){var e=t.offsetX,n=t.offsetY,i=this.group.transformCoordToLocal(e,n);if(function(t,e,n){if(t._brushType&&!function(t,e,n){var i=t._zr;return e<0||e>i.getWidth()||n<0||n>i.getHeight()}(t,e.offsetX,e.offsetY)){var i=t._zr,r=t._covers,o=gL(t,e,n);if(!t._dragging)for(var a=0;a=0&&(o[r[a].depth]=new Cc(r[a],this,e));if(i&&n){var s=uk(i,n,this,!0,(function(t,e){t.wrapMethod("getItemModel",(function(t,e){var n=t.parentModel,i=n.getData().getItemLayout(e);if(i){var r=i.depth,o=n.levelModels[r];o&&(t.parentModel=o)}return t})),e.wrapMethod("getItemModel",(function(t,e){var n=t.parentModel,i=n.getGraph().getEdgeByIndex(e).node1.getLayout();if(i){var r=i.depth,o=n.levelModels[r];o&&(t.parentModel=o)}return t}))}));return s.data}},e.prototype.setNodePosition=function(t,e){var n=(this.option.data||this.option.nodes)[t];n.localX=e[0],n.localY=e[1]},e.prototype.getGraph=function(){return this.getData().graph},e.prototype.getEdgeData=function(){return this.getGraph().edgeData},e.prototype.formatTooltip=function(t,e,n){function i(t){return isNaN(t)||null==t}if("edge"===n){var r=this.getDataParams(t,n),o=r.data,a=r.value;return og("nameValue",{name:o.source+" -- "+o.target,value:a,noValue:i(a)})}var s=this.getGraph().getNodeByIndex(t).getLayout().value,l=this.getDataParams(t,n).data.name;return og("nameValue",{name:null!=l?l+"":null,value:s,noValue:i(s)})},e.prototype.optionUpdated=function(){},e.prototype.getDataParams=function(e,n){var i=t.prototype.getDataParams.call(this,e,n);if(null==i.value&&"node"===n){var r=this.getGraph().getNodeByIndex(e).getLayout().value;i.value=r}return i},e.type="series.sankey",e.defaultOption={z:2,coordinateSystem:"view",left:"5%",top:"5%",right:"20%",bottom:"5%",orient:"horizontal",nodeWidth:20,nodeGap:8,draggable:!0,layoutIterations:32,label:{show:!0,position:"right",fontSize:12},edgeLabel:{show:!1,fontSize:12},levels:[],nodeAlign:"justify",lineStyle:{color:"#314656",opacity:.2,curveness:.5},emphasis:{label:{show:!0},lineStyle:{opacity:.5}},select:{itemStyle:{borderColor:"#212121"}},animationEasing:"linear",animationDuration:1e3},e}(bg);function QL(t,e){t.eachSeriesByType("sankey",(function(t){var n=t.get("nodeWidth"),i=t.get("nodeGap"),r=function(t,e){return kp(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}(t,e);t.layoutInfo=r;var o=r.width,a=r.height,s=t.getGraph(),l=s.nodes,u=s.edges;!function(t){E(t,(function(t){var e=uP(t.outEdges,lP),n=uP(t.inEdges,lP),i=t.getValue()||0,r=Math.max(e,n,i);t.setLayout({value:r},!0)}))}(l),function(t,e,n,i,r,o,a,s,l){(function(t,e,n,i,r,o,a){for(var s=[],l=[],u=[],h=[],c=0,p=0;p=0;v&&y.depth>d&&(d=y.depth),g.setLayout({depth:v?y.depth:c},!0),"vertical"===o?g.setLayout({dy:n},!0):g.setLayout({dx:n},!0);for(var m=0;mc-1?d:c-1;a&&"left"!==a&&function(t,e,n,i){if("right"===e){for(var r=[],o=t,a=0;o.length;){for(var s=0;s0;o--)nP(s,l*=.99,a),eP(s,r,n,i,a),hP(s,l,a),eP(s,r,n,i,a)}(t,e,o,r,i,a,s),function(t,e){var n="vertical"===e?"x":"y";E(t,(function(t){t.outEdges.sort((function(t,e){return t.node2.getLayout()[n]-e.node2.getLayout()[n]})),t.inEdges.sort((function(t,e){return t.node1.getLayout()[n]-e.node1.getLayout()[n]}))})),E(t,(function(t){var e=0,n=0;E(t.outEdges,(function(t){t.setLayout({sy:e},!0),e+=t.getLayout().dy})),E(t.inEdges,(function(t){t.setLayout({ty:n},!0),n+=t.getLayout().dy}))}))}(t,s)}(l,u,n,i,o,a,0!==B(l,(function(t){return 0===t.getLayout().value})).length?0:t.get("layoutIterations"),t.get("orient"),t.get("nodeAlign"))}))}function tP(t){var e=t.hostGraph.data.getRawDataItem(t.dataIndex);return null!=e.depth&&e.depth>=0}function eP(t,e,n,i,r){var o="vertical"===r?"x":"y";E(t,(function(t){var a,s,l;t.sort((function(t,e){return t.getLayout()[o]-e.getLayout()[o]}));for(var u=0,h=t.length,c="vertical"===r?"dx":"dy",p=0;p0&&(a=s.getLayout()[o]+l,"vertical"===r?s.setLayout({x:a},!0):s.setLayout({y:a},!0)),u=s.getLayout()[o]+s.getLayout()[c]+e;if((l=u-e-("vertical"===r?i:n))>0){a=s.getLayout()[o]-l,"vertical"===r?s.setLayout({x:a},!0):s.setLayout({y:a},!0),u=a;for(p=h-2;p>=0;--p)(l=(s=t[p]).getLayout()[o]+s.getLayout()[c]+e-u)>0&&(a=s.getLayout()[o]-l,"vertical"===r?s.setLayout({x:a},!0):s.setLayout({y:a},!0)),u=s.getLayout()[o]}}))}function nP(t,e,n){E(t.slice().reverse(),(function(t){E(t,(function(t){if(t.outEdges.length){var i=uP(t.outEdges,iP,n)/uP(t.outEdges,lP);if(isNaN(i)){var r=t.outEdges.length;i=r?uP(t.outEdges,rP,n)/r:0}if("vertical"===n){var o=t.getLayout().x+(i-sP(t,n))*e;t.setLayout({x:o},!0)}else{var a=t.getLayout().y+(i-sP(t,n))*e;t.setLayout({y:a},!0)}}}))}))}function iP(t,e){return sP(t.node2,e)*t.getValue()}function rP(t,e){return sP(t.node2,e)}function oP(t,e){return sP(t.node1,e)*t.getValue()}function aP(t,e){return sP(t.node1,e)}function sP(t,e){return"vertical"===e?t.getLayout().x+t.getLayout().dx/2:t.getLayout().y+t.getLayout().dy/2}function lP(t){return t.getValue()}function uP(t,e,n){for(var i=0,r=t.length,o=-1;++oo&&(o=e)})),E(n,(function(e){var n=new kD({type:"color",mappingMethod:"linear",dataExtent:[r,o],visual:t.get("color")}).mapValueToVisual(e.getLayout().value),i=e.getModel().get(["itemStyle","color"]);null!=i?(e.setVisual("color",i),e.setVisual("style",{fill:i})):(e.setVisual("color",n),e.setVisual("style",{fill:n}))}))}i.length&&E(i,(function(t){var e=t.getModel().get("lineStyle");t.setVisual("style",e)}))}))}var pP=function(){function t(){}return t.prototype.getInitialData=function(t,e){var n,i,r=e.getComponent("xAxis",this.get("xAxisIndex")),o=e.getComponent("yAxis",this.get("yAxisIndex")),a=r.get("type"),s=o.get("type");"category"===a?(t.layout="horizontal",n=r.getOrdinalMeta(),i=!0):"category"===s?(t.layout="vertical",n=o.getOrdinalMeta(),i=!0):t.layout=t.layout||"horizontal";var l=["x","y"],u="horizontal"===t.layout?0:1,h=this._baseAxisDim=l[u],c=l[1-u],p=[r,o],d=p[u].get("type"),f=p[1-u].get("type"),g=t.data;if(g&&i){var y=[];E(g,(function(t,e){var n;Y(t)?(n=t.slice(),t.unshift(e)):Y(t.value)?((n=A({},t)).value=n.value.slice(),t.value.unshift(e)):n=t,y.push(n)})),t.data=y}var v=this.defaultValueDimensions,m=[{name:h,type:Ym(d),ordinalMeta:n,otherDims:{tooltip:!1,itemName:0},dimsDef:["base"]},{name:c,type:Ym(f),dimsDef:v.slice()}];return RM(this,{coordDimensions:m,dimensionsCount:v.length+1,encodeDefaulter:H(td,m,this)})},t.prototype.getBaseAxis=function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+"Axis",this.get(t+"AxisIndex")).axis},t}(),dP=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.defaultValueDimensions=[{name:"min",defaultTooltip:!0},{name:"Q1",defaultTooltip:!0},{name:"median",defaultTooltip:!0},{name:"Q3",defaultTooltip:!0},{name:"max",defaultTooltip:!0}],n.visualDrawType="stroke",n}return n(e,t),e.type="series.boxplot",e.dependencies=["xAxis","yAxis","grid"],e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,layout:null,boxWidth:[7,50],itemStyle:{color:"#fff",borderWidth:1},emphasis:{scale:!0,itemStyle:{borderWidth:2,shadowBlur:5,shadowOffsetX:1,shadowOffsetY:1,shadowColor:"rgba(0,0,0,0.2)"}},animationDuration:800},e}(bg);R(dP,pP,!0);var fP=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=t.getData(),r=this.group,o=this._data;this._data||r.removeAll();var a="horizontal"===t.get("layout")?1:0;i.diff(o).add((function(t){if(i.hasValue(t)){var e=vP(i.getItemLayout(t),i,t,a,!0);i.setItemGraphicEl(t,e),r.add(e)}})).update((function(t,e){var n=o.getItemGraphicEl(e);if(i.hasValue(t)){var s=i.getItemLayout(t);n?(Sh(n),mP(s,n,i,t)):n=vP(s,i,t,a),r.add(n),i.setItemGraphicEl(t,n)}else r.remove(n)})).remove((function(t){var e=o.getItemGraphicEl(t);e&&r.remove(e)})).execute(),this._data=i},e.prototype.remove=function(t){var e=this.group,n=this._data;this._data=null,n&&n.eachItemGraphicEl((function(t){t&&e.remove(t)}))},e.type="boxplot",e}(Og),gP=function(){},yP=function(t){function e(e){var n=t.call(this,e)||this;return n.type="boxplotBoxPath",n}return n(e,t),e.prototype.getDefaultShape=function(){return new gP},e.prototype.buildPath=function(t,e){var n=e.points,i=0;for(t.moveTo(n[i][0],n[i][1]),i++;i<4;i++)t.lineTo(n[i][0],n[i][1]);for(t.closePath();ig){var _=[v,x];i.push(_)}}}return{boxData:n,outliers:i}}(e.getRawData(),t.config);return[{dimensions:["ItemName","Low","Q1","Q2","Q3","High"],data:i.boxData},{data:i.outliers}]}};var SP=["color","borderColor"],MP=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){this.group.removeClipPath(),this._progressiveEls=null,this._updateDrawMode(t),this._isLargeDraw?this._renderLarge(t):this._renderNormal(t)},e.prototype.incrementalPrepareRender=function(t,e,n){this._clear(),this._updateDrawMode(t)},e.prototype.incrementalRender=function(t,e,n,i){this._progressiveEls=[],this._isLargeDraw?this._incrementalRenderLarge(t,e):this._incrementalRenderNormal(t,e)},e.prototype.eachRendered=function(t){Jh(this._progressiveEls||this.group,t)},e.prototype._updateDrawMode=function(t){var e=t.pipelineContext.large;null!=this._isLargeDraw&&e===this._isLargeDraw||(this._isLargeDraw=e,this._clear())},e.prototype._renderNormal=function(t){var e=t.getData(),n=this._data,i=this.group,r=e.getLayout("isSimpleBox"),o=t.get("clip",!0),a=t.coordinateSystem,s=a.getArea&&a.getArea();this._data||i.removeAll(),e.diff(n).add((function(n){if(e.hasValue(n)){var a=e.getItemLayout(n);if(o&&DP(s,a))return;var l=CP(a,n,!0);mh(l,{shape:{points:a.ends}},t,n),AP(l,e,n,r),i.add(l),e.setItemGraphicEl(n,l)}})).update((function(a,l){var u=n.getItemGraphicEl(l);if(e.hasValue(a)){var h=e.getItemLayout(a);o&&DP(s,h)?i.remove(u):(u?(vh(u,{shape:{points:h.ends}},t,a),Sh(u)):u=CP(h),AP(u,e,a,r),i.add(u),e.setItemGraphicEl(a,u))}else i.remove(u)})).remove((function(t){var e=n.getItemGraphicEl(t);e&&i.remove(e)})).execute(),this._data=e},e.prototype._renderLarge=function(t){this._clear(),OP(t,this.group);var e=t.get("clip",!0)?PS(t.coordinateSystem,!1,t):null;e?this.group.setClipPath(e):this.group.removeClipPath()},e.prototype._incrementalRenderNormal=function(t,e){for(var n,i=e.getData(),r=i.getLayout("isSimpleBox");null!=(n=t.next());){var o=CP(i.getItemLayout(n));AP(o,i,n,r),o.incremental=!0,this.group.add(o),this._progressiveEls.push(o)}},e.prototype._incrementalRenderLarge=function(t,e){OP(e,this.group,this._progressiveEls,!0)},e.prototype.remove=function(t){this._clear()},e.prototype._clear=function(){this.group.removeAll(),this._data=null},e.type="candlestick",e}(Og),IP=function(){},TP=function(t){function e(e){var n=t.call(this,e)||this;return n.type="normalCandlestickBox",n}return n(e,t),e.prototype.getDefaultShape=function(){return new IP},e.prototype.buildPath=function(t,e){var n=e.points;this.__simpleBox?(t.moveTo(n[4][0],n[4][1]),t.lineTo(n[6][0],n[6][1])):(t.moveTo(n[0][0],n[0][1]),t.lineTo(n[1][0],n[1][1]),t.lineTo(n[2][0],n[2][1]),t.lineTo(n[3][0],n[3][1]),t.closePath(),t.moveTo(n[4][0],n[4][1]),t.lineTo(n[5][0],n[5][1]),t.moveTo(n[6][0],n[6][1]),t.lineTo(n[7][0],n[7][1]))},e}(ks);function CP(t,e,n){var i=t.ends;return new TP({shape:{points:n?kP(i,t):i},z2:100})}function DP(t,e){for(var n=!0,i=0;i0?"borderColor":"borderColor0"])||n.get(["itemStyle",t>0?"color":"color0"]);0===t&&(r=n.get(["itemStyle","borderColorDoji"]));var o=n.getModel("itemStyle").getItemStyle(SP);e.useStyle(o),e.style.fill=null,e.style.stroke=r}var NP=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.defaultValueDimensions=[{name:"open",defaultTooltip:!0},{name:"close",defaultTooltip:!0},{name:"lowest",defaultTooltip:!0},{name:"highest",defaultTooltip:!0}],n}return n(e,t),e.prototype.getShadowDim=function(){return"open"},e.prototype.brushSelector=function(t,e,n){var i=e.getItemLayout(t);return i&&n.rect(i.brushRect)},e.type="series.candlestick",e.dependencies=["xAxis","yAxis","grid"],e.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,layout:null,clip:!0,itemStyle:{color:"#eb5454",color0:"#47b262",borderColor:"#eb5454",borderColor0:"#47b262",borderColorDoji:null,borderWidth:1},emphasis:{scale:!0,itemStyle:{borderWidth:2}},barMaxWidth:null,barMinWidth:null,barWidth:null,large:!0,largeThreshold:600,progressive:3e3,progressiveThreshold:1e4,progressiveChunkMode:"mod",animationEasing:"linear",animationDuration:300},e}(bg);function EP(t){t&&Y(t.series)&&E(t.series,(function(t){q(t)&&"k"===t.type&&(t.type="candlestick")}))}R(NP,pP,!0);var zP=["itemStyle","borderColor"],VP=["itemStyle","borderColor0"],BP=["itemStyle","borderColorDoji"],FP=["itemStyle","color"],GP=["itemStyle","color0"],WP={seriesType:"candlestick",plan:kg(),performRawSeries:!0,reset:function(t,e){function n(t,e){return e.get(t>0?FP:GP)}function i(t,e){return e.get(0===t?BP:t>0?zP:VP)}if(!e.isSeriesFiltered(t))return!t.pipelineContext.large&&{progress:function(t,e){for(var r;null!=(r=t.next());){var o=e.getItemModel(r),a=e.getItemLayout(r).sign,s=o.getItemStyle();s.fill=n(a,o),s.stroke=i(a,o)||s.fill,A(e.ensureUniqueItemVisual(r,"style"),s)}}}}},HP={seriesType:"candlestick",plan:kg(),reset:function(t){var e=t.coordinateSystem,n=t.getData(),i=function(t,e){var n,i=t.getBaseAxis(),r="category"===i.type?i.getBandWidth():(n=i.getExtent(),Math.abs(n[1]-n[0])/e.count()),o=$r(rt(t.get("barMaxWidth"),r),r),a=$r(rt(t.get("barMinWidth"),1),r),s=t.get("barWidth");return null!=s?$r(s,r):Math.max(Math.min(r/2,o),a)}(t,n),r=["x","y"],o=n.getDimensionIndex(n.mapDimension(r[0])),a=z(n.mapDimensionsAll(r[1]),n.getDimensionIndex,n),s=a[0],l=a[1],u=a[2],h=a[3];if(n.setLayout({candleWidth:i,isSimpleBox:i<=1.3}),!(o<0||a.length<4))return{progress:t.pipelineContext.large?function(n,i){var r,a,c=Bx(4*n.count),p=0,d=[],f=[],g=i.getStore(),y=!!t.get(["itemStyle","borderColorDoji"]);for(;null!=(a=n.next());){var v=g.get(o,a),m=g.get(s,a),x=g.get(l,a),_=g.get(u,a),b=g.get(h,a);isNaN(v)||isNaN(_)||isNaN(b)?(c[p++]=NaN,p+=3):(c[p++]=YP(g,a,m,x,l,y),d[0]=v,d[1]=_,r=e.dataToPoint(d,null,f),c[p++]=r?r[0]:NaN,c[p++]=r?r[1]:NaN,d[1]=b,r=e.dataToPoint(d,null,f),c[p++]=r?r[1]:NaN)}i.setLayout("largePoints",c)}:function(t,n){var r,a=n.getStore();for(;null!=(r=t.next());){var c=a.get(o,r),p=a.get(s,r),d=a.get(l,r),f=a.get(u,r),g=a.get(h,r),y=Math.min(p,d),v=Math.max(p,d),m=M(y,c),x=M(v,c),_=M(f,c),b=M(g,c),w=[];I(w,x,0),I(w,m,1),w.push(C(b),C(x),C(_),C(m));var S=!!n.getItemModel(r).get(["itemStyle","borderColorDoji"]);n.setItemLayout(r,{sign:YP(a,r,p,d,l,S),initBaseline:p>d?x[1]:m[1],ends:w,brushRect:T(f,g,c)})}function M(t,n){var i=[];return i[0]=n,i[1]=t,isNaN(n)||isNaN(t)?[NaN,NaN]:e.dataToPoint(i)}function I(t,e,n){var r=e.slice(),o=e.slice();r[0]=Vh(r[0]+i/2,1,!1),o[0]=Vh(o[0]-i/2,1,!0),n?t.push(r,o):t.push(o,r)}function T(t,e,n){var r=M(t,n),o=M(e,n);return r[0]-=i/2,o[0]-=i/2,{x:r[0],y:r[1],width:i,height:o[1]-r[1]}}function C(t){return t[0]=Vh(t[0],1),t}}}}};function YP(t,e,n,i,r,o){return n>i?-1:n0?t.get(r,e-1)<=i?1:-1:1}function XP(t,e){var n=e.rippleEffectColor||e.color;t.eachChild((function(t){t.attr({z:e.z,zlevel:e.zlevel,style:{stroke:"stroke"===e.brushType?n:null,fill:"fill"===e.brushType?n:null}})}))}var UP=function(t){function e(e,n){var i=t.call(this)||this,r=new fS(e,n),o=new Br;return i.add(r),i.add(o),i.updateData(e,n),i}return n(e,t),e.prototype.stopEffectAnimation=function(){this.childAt(1).removeAll()},e.prototype.startEffectAnimation=function(t){for(var e=t.symbolType,n=t.color,i=t.rippleNumber,r=this.childAt(1),o=0;o0&&(o=this._getLineLength(i)/l*1e3),o!==this._period||a!==this._loop||s!==this._roundTrip){i.stopAnimation();var h=void 0;h=X(u)?u(n):u,i.__t>0&&(h=-o*i.__t),this._animateSymbol(i,o,h,a,s)}this._period=o,this._loop=a,this._roundTrip=s}},e.prototype._animateSymbol=function(t,e,n,i,r){if(e>0){t.__t=0;var o=this,a=t.animate("",i).when(r?2*e:e,{__t:r?2:1}).delay(n).during((function(){o._updateSymbolPosition(t)}));i||a.done((function(){o.remove(t)})),a.start()}},e.prototype._getLineLength=function(t){return Vt(t.__p1,t.__cp1)+Vt(t.__cp1,t.__p2)},e.prototype._updateAnimationPoints=function(t,e){t.__p1=e[0],t.__p2=e[1],t.__cp1=e[2]||[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},e.prototype.updateData=function(t,e,n){this.childAt(0).updateData(t,e,n),this._updateEffectSymbol(t,e)},e.prototype._updateSymbolPosition=function(t){var e=t.__p1,n=t.__p2,i=t.__cp1,r=t.__t<1?t.__t:2-t.__t,o=[t.x,t.y],a=o.slice(),s=In,l=Tn;o[0]=s(e[0],i[0],n[0],r),o[1]=s(e[1],i[1],n[1],r);var u=t.__t<1?l(e[0],i[0],n[0],r):l(n[0],i[0],e[0],1-r),h=t.__t<1?l(e[1],i[1],n[1],r):l(n[1],i[1],e[1],1-r);t.rotation=-Math.atan2(h,u)-Math.PI/2,"line"!==this._symbolType&&"rect"!==this._symbolType&&"roundRect"!==this._symbolType||(void 0!==t.__lastT&&t.__lastT=0&&!(i[o]<=e);o--);o=Math.min(o,r-2)}else{for(o=a;oe);o++);o=Math.min(o-1,r-2)}var s=(e-i[o])/(i[o+1]-i[o]),l=n[o],u=n[o+1];t.x=l[0]*(1-s)+s*u[0],t.y=l[1]*(1-s)+s*u[1];var h=t.__t<1?u[0]-l[0]:l[0]-u[0],c=t.__t<1?u[1]-l[1]:l[1]-u[1];t.rotation=-Math.atan2(c,h)-Math.PI/2,this._lastFrame=o,this._lastFramePercent=e,t.ignore=!1}},e}(qP),JP=function(){this.polyline=!1,this.curveness=0,this.segs=[]},QP=function(t){function e(e){var n=t.call(this,e)||this;return n._off=0,n.hoverDataIdx=-1,n}return n(e,t),e.prototype.reset=function(){this.notClear=!1,this._off=0},e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new JP},e.prototype.buildPath=function(t,e){var n,i=e.segs,r=e.curveness;if(e.polyline)for(n=this._off;n0){t.moveTo(i[n++],i[n++]);for(var a=1;a0){var c=(s+u)/2-(l-h)*r,p=(l+h)/2-(u-s)*r;t.quadraticCurveTo(c,p,u,h)}else t.lineTo(u,h)}this.incremental&&(this._off=n,this.notClear=!0)},e.prototype.findDataIndex=function(t,e){var n=this.shape,i=n.segs,r=n.curveness,o=this.style.lineWidth;if(n.polyline)for(var a=0,s=0;s0)for(var u=i[s++],h=i[s++],c=1;c0){if(ds(u,h,(u+p)/2-(h-d)*r,(h+d)/2-(p-u)*r,p,d,o,t,e))return a}else if(cs(u,h,p,d,o,t,e))return a;a++}return-1},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect();return t=n[0],e=n[1],i.contain(t,e)?(this.hoverDataIdx=this.findDataIndex(t,e))>=0:(this.hoverDataIdx=-1,!1)},e.prototype.getBoundingRect=function(){var t=this._rect;if(!t){for(var e=this.shape.segs,n=1/0,i=1/0,r=-1/0,o=-1/0,a=0;a0&&(o.dataIndex=n+t.__startIndex)}))},t.prototype._clear=function(){this._newAdded=[],this.group.removeAll()},t}(),eO={seriesType:"lines",plan:kg(),reset:function(t){var e=t.coordinateSystem;if(e){var n=t.get("polyline"),i=t.pipelineContext.large;return{progress:function(r,o){var a=[];if(i){var s=void 0,l=r.end-r.start;if(n){for(var u=0,h=r.start;h0&&(l||s.configLayer(o,{motionBlur:!0,lastFrameAlpha:Math.max(Math.min(a/10+.9,1),0)})),r.updateData(i);var u=t.get("clip",!0)&&PS(t.coordinateSystem,!1,t);u?this.group.setClipPath(u):this.group.removeClipPath(),this._lastZlevel=o,this._finished=!0},e.prototype.incrementalPrepareRender=function(t,e,n){var i=t.getData();this._updateLineDraw(i,t).incrementalPrepareUpdate(i),this._clearLayer(n),this._finished=!1},e.prototype.incrementalRender=function(t,e,n){this._lineDraw.incrementalUpdate(t,e.getData()),this._finished=t.end===e.getData().count()},e.prototype.eachRendered=function(t){this._lineDraw&&this._lineDraw.eachRendered(t)},e.prototype.updateTransform=function(t,e,n){var i=t.getData(),r=t.pipelineContext;if(!this._finished||r.large||r.progressiveRender)return{update:!0};var o=eO.reset(t,e,n);o.progress&&o.progress({start:0,end:i.count(),count:i.count()},i),this._lineDraw.updateLayout(),this._clearLayer(n)},e.prototype._updateLineDraw=function(t,e){var n=this._lineDraw,i=this._showEffect(e),r=!!e.get("polyline"),o=e.pipelineContext.large;return n&&i===this._hasEffet&&r===this._isPolyline&&o===this._isLargeDraw||(n&&n.remove(),n=this._lineDraw=o?new tO:new YA(r?i?$P:KP:i?qP:HA),this._hasEffet=i,this._isPolyline=r,this._isLargeDraw=o),this.group.add(n.group),n},e.prototype._showEffect=function(t){return!!t.get(["effect","show"])},e.prototype._clearLayer=function(t){var e=t.getZr();"svg"===e.painter.getType()||null==this._lastZlevel||e.painter.getLayer(this._lastZlevel).clear(!0)},e.prototype.remove=function(t,e){this._lineDraw&&this._lineDraw.remove(),this._lineDraw=null,this._clearLayer(e)},e.prototype.dispose=function(t,e){this.remove(t,e)},e.type="lines",e}(Og),iO="undefined"==typeof Uint32Array?Array:Uint32Array,rO="undefined"==typeof Float64Array?Array:Float64Array;function oO(t){var e=t.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(t.data=z(e,(function(t){var e={coords:[t[0].coord,t[1].coord]};return t[0].name&&(e.fromName=t[0].name),t[1].name&&(e.toName=t[1].name),D([e,t[0],t[1]])})))}var aO=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.visualStyleAccessPath="lineStyle",n.visualDrawType="stroke",n}return n(e,t),e.prototype.init=function(e){e.data=e.data||[],oO(e);var n=this._processFlatCoordsArray(e.data);this._flatCoords=n.flatCoords,this._flatCoordsOffset=n.flatCoordsOffset,n.flatCoords&&(e.data=new Float32Array(n.count)),t.prototype.init.apply(this,arguments)},e.prototype.mergeOption=function(e){if(oO(e),e.data){var n=this._processFlatCoordsArray(e.data);this._flatCoords=n.flatCoords,this._flatCoordsOffset=n.flatCoordsOffset,n.flatCoords&&(e.data=new Float32Array(n.count))}t.prototype.mergeOption.apply(this,arguments)},e.prototype.appendData=function(t){var e=this._processFlatCoordsArray(t.data);e.flatCoords&&(this._flatCoords?(this._flatCoords=vt(this._flatCoords,e.flatCoords),this._flatCoordsOffset=vt(this._flatCoordsOffset,e.flatCoordsOffset)):(this._flatCoords=e.flatCoords,this._flatCoordsOffset=e.flatCoordsOffset),t.data=new Float32Array(e.count)),this.getRawData().appendData(t.data)},e.prototype._getCoordsFromItemModel=function(t){var e=this.getData().getItemModel(t),n=e.option instanceof Array?e.option:e.getShallow("coords");return n},e.prototype.getLineCoordsCount=function(t){return this._flatCoordsOffset?this._flatCoordsOffset[2*t+1]:this._getCoordsFromItemModel(t).length},e.prototype.getLineCoords=function(t,e){if(this._flatCoordsOffset){for(var n=this._flatCoordsOffset[2*t],i=this._flatCoordsOffset[2*t+1],r=0;r ")})},e.prototype.preventIncremental=function(){return!!this.get(["effect","show"])},e.prototype.getProgressive=function(){var t=this.option.progressive;return null==t?this.option.large?1e4:this.get("progressive"):t},e.prototype.getProgressiveThreshold=function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?2e4:this.get("progressiveThreshold"):t},e.prototype.getZLevelKey=function(){var t=this.getModel("effect"),e=t.get("trailLength");return this.getData().count()>this.getProgressiveThreshold()?this.id:t.get("show")&&e>0?e+"":""},e.type="series.lines",e.dependencies=["grid","polar","geo","calendar"],e.defaultOption={coordinateSystem:"geo",z:2,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,clip:!0,label:{show:!1,position:"end"},lineStyle:{opacity:.5}},e}(bg);function sO(t){return t instanceof Array||(t=[t,t]),t}var lO={seriesType:"lines",reset:function(t){var e=sO(t.get("symbol")),n=sO(t.get("symbolSize")),i=t.getData();return i.setVisual("fromSymbol",e&&e[0]),i.setVisual("toSymbol",e&&e[1]),i.setVisual("fromSymbolSize",n&&n[0]),i.setVisual("toSymbolSize",n&&n[1]),{dataEach:i.hasItemOption?function(t,e){var n=t.getItemModel(e),i=sO(n.getShallow("symbol",!0)),r=sO(n.getShallow("symbolSize",!0));i[0]&&t.setItemVisual(e,"fromSymbol",i[0]),i[1]&&t.setItemVisual(e,"toSymbol",i[1]),r[0]&&t.setItemVisual(e,"fromSymbolSize",r[0]),r[1]&&t.setItemVisual(e,"toSymbolSize",r[1])}:null}}};var uO=function(){function t(){this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={inRange:null,outOfRange:null};var t=h.createCanvas();this.canvas=t}return t.prototype.update=function(t,e,n,i,r,o){var a=this._getBrush(),s=this._getGradient(r,"inRange"),l=this._getGradient(r,"outOfRange"),u=this.pointSize+this.blurSize,h=this.canvas,c=h.getContext("2d"),p=t.length;h.width=e,h.height=n;for(var d=0;d0){var I=o(v)?s:l;v>0&&(v=v*S+w),x[_++]=I[M],x[_++]=I[M+1],x[_++]=I[M+2],x[_++]=I[M+3]*v*256}else _+=4}return c.putImageData(m,0,0),h},t.prototype._getBrush=function(){var t=this._brushCanvas||(this._brushCanvas=h.createCanvas()),e=this.pointSize+this.blurSize,n=2*e;t.width=n,t.height=n;var i=t.getContext("2d");return i.clearRect(0,0,n,n),i.shadowOffsetX=n,i.shadowBlur=this.blurSize,i.shadowColor="#000",i.beginPath(),i.arc(-e,e,this.pointSize,0,2*Math.PI,!0),i.closePath(),i.fill(),t},t.prototype._getGradient=function(t,e){for(var n=this._gradientPixels,i=n[e]||(n[e]=new Uint8ClampedArray(1024)),r=[0,0,0,0],o=0,a=0;a<256;a++)t[e](a/255,!0,r),i[o++]=r[0],i[o++]=r[1],i[o++]=r[2],i[o++]=r[3];return i},t}();function hO(t){var e=t.dimensions;return"lng"===e[0]&&"lat"===e[1]}var cO=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i;e.eachComponent("visualMap",(function(e){e.eachTargetSeries((function(n){n===t&&(i=e)}))})),this._progressiveEls=null,this.group.removeAll();var r=t.coordinateSystem;"cartesian2d"===r.type||"calendar"===r.type?this._renderOnCartesianAndCalendar(t,n,0,t.getData().count()):hO(r)&&this._renderOnGeo(r,t,i,n)},e.prototype.incrementalPrepareRender=function(t,e,n){this.group.removeAll()},e.prototype.incrementalRender=function(t,e,n,i){var r=e.coordinateSystem;r&&(hO(r)?this.render(e,n,i):(this._progressiveEls=[],this._renderOnCartesianAndCalendar(e,i,t.start,t.end,!0)))},e.prototype.eachRendered=function(t){Jh(this._progressiveEls||this.group,t)},e.prototype._renderOnCartesianAndCalendar=function(t,e,n,i,r){var o,a,s,l,u=t.coordinateSystem,h=OS(u,"cartesian2d");if(h){var c=u.getAxis("x"),p=u.getAxis("y");0,o=c.getBandWidth()+.5,a=p.getBandWidth()+.5,s=c.scale.getExtent(),l=p.scale.getExtent()}for(var d=this.group,f=t.getData(),g=t.getModel(["emphasis","itemStyle"]).getItemStyle(),y=t.getModel(["blur","itemStyle"]).getItemStyle(),v=t.getModel(["select","itemStyle"]).getItemStyle(),m=t.get(["itemStyle","borderRadius"]),x=rc(t),_=t.getModel("emphasis"),b=_.get("focus"),w=_.get("blurScope"),S=_.get("disabled"),M=h?[f.mapDimension("x"),f.mapDimension("y"),f.mapDimension("value")]:[f.mapDimension("time"),f.mapDimension("value")],I=n;Is[1]||Al[1])continue;var k=u.dataToPoint([D,A]);T=new Ws({shape:{x:k[0]-o/2,y:k[1]-a/2,width:o,height:a},style:C})}else{if(isNaN(f.get(M[1],I)))continue;T=new Ws({z2:1,shape:u.dataToRect([f.get(M[0],I)]).contentShape,style:C})}if(f.hasItemOption){var L=f.getItemModel(I),P=L.getModel("emphasis");g=P.getModel("itemStyle").getItemStyle(),y=L.getModel(["blur","itemStyle"]).getItemStyle(),v=L.getModel(["select","itemStyle"]).getItemStyle(),m=L.get(["itemStyle","borderRadius"]),b=P.get("focus"),w=P.get("blurScope"),S=P.get("disabled"),x=rc(L)}T.shape.r=m;var O=t.getRawValue(I),R="-";O&&null!=O[2]&&(R=O[2]+""),ic(T,x,{labelFetcher:t,labelDataIndex:I,defaultOpacity:C.opacity,defaultText:R}),T.ensureState("emphasis").style=g,T.ensureState("blur").style=y,T.ensureState("select").style=v,Zl(T,b,w,S),T.incremental=r,r&&(T.states.emphasis.hoverLayer=!0),d.add(T),f.setItemGraphicEl(I,T),this._progressiveEls&&this._progressiveEls.push(T)}},e.prototype._renderOnGeo=function(t,e,n,i){var r=n.targetVisuals.inRange,o=n.targetVisuals.outOfRange,a=e.getData(),s=this._hmLayer||this._hmLayer||new uO;s.blurSize=e.get("blurSize"),s.pointSize=e.get("pointSize"),s.minOpacity=e.get("minOpacity"),s.maxOpacity=e.get("maxOpacity");var l=t.getViewRect().clone(),u=t.getRoamTransform();l.applyTransform(u);var h=Math.max(l.x,0),c=Math.max(l.y,0),p=Math.min(l.width+l.x,i.getWidth()),d=Math.min(l.height+l.y,i.getHeight()),f=p-h,g=d-c,y=[a.mapDimension("lng"),a.mapDimension("lat"),a.mapDimension("value")],v=a.mapArray(y,(function(e,n,i){var r=t.dataToPoint([e,n]);return r[0]-=h,r[1]-=c,r.push(i),r})),m=n.getExtent(),x="visualMap.continuous"===n.type?function(t,e){var n=t[1]-t[0];return e=[(e[0]-t[0])/n,(e[1]-t[0])/n],function(t){return t>=e[0]&&t<=e[1]}}(m,n.option.range):function(t,e,n){var i=t[1]-t[0],r=(e=z(e,(function(e){return{interval:[(e.interval[0]-t[0])/i,(e.interval[1]-t[0])/i]}}))).length,o=0;return function(t){var i;for(i=o;i=0;i--){var a;if((a=e[i].interval)[0]<=t&&t<=a[1]){o=i;break}}return i>=0&&i0?1:-1}(n,o,r,i,c),function(t,e,n,i,r,o,a,s,l,u){var h,c=l.valueDim,p=l.categoryDim,d=Math.abs(n[p.wh]),f=t.getItemVisual(e,"symbolSize");h=Y(f)?f.slice():null==f?["100%","100%"]:[f,f];h[p.index]=$r(h[p.index],d),h[c.index]=$r(h[c.index],i?d:Math.abs(o)),u.symbolSize=h;var g=u.symbolScale=[h[0]/s,h[1]/s];g[c.index]*=(l.isHorizontal?-1:1)*a}(t,e,r,o,0,c.boundingLength,c.pxSign,u,i,c),function(t,e,n,i,r){var o=t.get(dO)||0;o&&(gO.attr({scaleX:e[0],scaleY:e[1],rotation:n}),gO.updateTransform(),o/=gO.getLineScale(),o*=e[i.valueDim.index]);r.valueLineWidth=o||0}(n,c.symbolScale,l,i,c);var p=c.symbolSize,d=Zy(n.get("symbolOffset"),p);return function(t,e,n,i,r,o,a,s,l,u,h,c){var p=h.categoryDim,d=h.valueDim,f=c.pxSign,g=Math.max(e[d.index]+s,0),y=g;if(i){var v=Math.abs(l),m=it(t.get("symbolMargin"),"15%")+"",x=!1;m.lastIndexOf("!")===m.length-1&&(x=!0,m=m.slice(0,m.length-1));var _=$r(m,e[d.index]),b=Math.max(g+2*_,0),w=x?0:2*_,S=vo(i),M=S?i:OO((v+w)/b);b=g+2*(_=(v-M*g)/2/(x?M:Math.max(M-1,1))),w=x?0:2*_,S||"fixed"===i||(M=u?OO((Math.abs(u)+w)/b):0),y=M*b-w,c.repeatTimes=M,c.symbolMargin=_}var I=f*(y/2),T=c.pathPosition=[];T[p.index]=n[p.wh]/2,T[d.index]="start"===a?I:"end"===a?l-I:l/2,o&&(T[0]+=o[0],T[1]+=o[1]);var C=c.bundlePosition=[];C[p.index]=n[p.xy],C[d.index]=n[d.xy];var D=c.barRectShape=A({},n);D[d.wh]=f*Math.max(Math.abs(n[d.wh]),Math.abs(T[d.index]+I)),D[p.wh]=n[p.wh];var k=c.clipShape={};k[p.xy]=-n[p.xy],k[p.wh]=h.ecSize[p.wh],k[d.xy]=0,k[d.wh]=n[d.wh]}(n,p,r,o,0,d,s,c.valueLineWidth,c.boundingLength,c.repeatCutLength,i,c),c}function mO(t,e){return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))}function xO(t){var e=t.symbolPatternSize,n=Xy(t.symbolType,-e/2,-e/2,e,e);return n.attr({culling:!0}),"image"!==n.type&&n.setStyle({strokeNoScale:!0}),n}function _O(t,e,n,i){var r=t.__pictorialBundle,o=n.symbolSize,a=n.valueLineWidth,s=n.pathPosition,l=e.valueDim,u=n.repeatTimes||0,h=0,c=o[e.valueDim.index]+a+2*n.symbolMargin;for(kO(t,(function(t){t.__pictorialAnimationIndex=h,t.__pictorialRepeatTimes=u,h0:i<0)&&(r=u-1-t),e[l.index]=c*(r-u/2+.5)+s[l.index],{x:e[0],y:e[1],scaleX:n.symbolScale[0],scaleY:n.symbolScale[1],rotation:n.rotation}}}function bO(t,e,n,i){var r=t.__pictorialBundle,o=t.__pictorialMainPath;o?LO(o,null,{x:n.pathPosition[0],y:n.pathPosition[1],scaleX:n.symbolScale[0],scaleY:n.symbolScale[1],rotation:n.rotation},n,i):(o=t.__pictorialMainPath=xO(n),r.add(o),LO(o,{x:n.pathPosition[0],y:n.pathPosition[1],scaleX:0,scaleY:0,rotation:n.rotation},{scaleX:n.symbolScale[0],scaleY:n.symbolScale[1]},n,i))}function wO(t,e,n){var i=A({},e.barRectShape),r=t.__pictorialBarRect;r?LO(r,null,{shape:i},e,n):((r=t.__pictorialBarRect=new Ws({z2:2,shape:i,silent:!0,style:{stroke:"transparent",fill:"transparent",lineWidth:0}})).disableMorphing=!0,t.add(r))}function SO(t,e,n,i){if(n.symbolClip){var r=t.__pictorialClipPath,o=A({},n.clipShape),a=e.valueDim,s=n.animationModel,l=n.dataIndex;if(r)vh(r,{shape:o},s,l);else{o[a.wh]=0,r=new Ws({shape:o}),t.__pictorialBundle.setClipPath(r),t.__pictorialClipPath=r;var u={};u[a.wh]=n.clipShape[a.wh],Qh[i?"updateProps":"initProps"](r,{shape:u},s,l)}}}function MO(t,e){var n=t.getItemModel(e);return n.getAnimationDelayParams=IO,n.isAnimationEnabled=TO,n}function IO(t){return{index:t.__pictorialAnimationIndex,count:t.__pictorialRepeatTimes}}function TO(){return this.parentModel.isAnimationEnabled()&&!!this.getShallow("animation")}function CO(t,e,n,i){var r=new Br,o=new Br;return r.add(o),r.__pictorialBundle=o,o.x=n.bundlePosition[0],o.y=n.bundlePosition[1],n.symbolRepeat?_O(r,e,n):bO(r,0,n),wO(r,n,i),SO(r,e,n,i),r.__pictorialShapeStr=AO(t,n),r.__pictorialSymbolMeta=n,r}function DO(t,e,n,i){var r=i.__pictorialBarRect;r&&r.removeTextContent();var o=[];kO(i,(function(t){o.push(t)})),i.__pictorialMainPath&&o.push(i.__pictorialMainPath),i.__pictorialClipPath&&(n=null),E(o,(function(t){_h(t,{scaleX:0,scaleY:0},n,e,(function(){i.parent&&i.parent.remove(i)}))})),t.setItemGraphicEl(e,null)}function AO(t,e){return[t.getItemVisual(e.dataIndex,"symbol")||"none",!!e.symbolRepeat,!!e.symbolClip].join(":")}function kO(t,e,n){E(t.__pictorialBundle.children(),(function(i){i!==t.__pictorialBarRect&&e.call(n,i)}))}function LO(t,e,n,i,r,o){e&&t.attr(e),i.symbolClip&&!r?n&&t.attr(n):n&&Qh[r?"updateProps":"initProps"](t,n,i.animationModel,i.dataIndex,o)}function PO(t,e,n){var i=n.dataIndex,r=n.itemModel,o=r.getModel("emphasis"),a=o.getModel("itemStyle").getItemStyle(),s=r.getModel(["blur","itemStyle"]).getItemStyle(),l=r.getModel(["select","itemStyle"]).getItemStyle(),u=r.getShallow("cursor"),h=o.get("focus"),c=o.get("blurScope"),p=o.get("scale");kO(t,(function(t){if(t instanceof Ns){var e=t.style;t.useStyle(A({image:e.image,x:e.x,y:e.y,width:e.width,height:e.height},n.style))}else t.useStyle(n.style);var i=t.ensureState("emphasis");i.style=a,p&&(i.scaleX=1.1*t.scaleX,i.scaleY=1.1*t.scaleY),t.ensureState("blur").style=s,t.ensureState("select").style=l,u&&(t.cursor=u),t.z2=n.z2}));var d=e.valueDim.posDesc[+(n.boundingLength>0)],f=t.__pictorialBarRect;f.ignoreClip=!0,ic(f,rc(r),{labelFetcher:e.seriesModel,labelDataIndex:i,defaultText:pS(e.seriesModel.getData(),i),inheritColor:n.style.fill,defaultOpacity:n.style.opacity,defaultOutsidePosition:d}),Zl(t,h,c,o.get("disabled"))}function OO(t){var e=Math.round(t);return Math.abs(t-e)<1e-4?e:Math.ceil(t)}var RO=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n.defaultSymbol="roundRect",n}return n(e,t),e.prototype.getInitialData=function(e){return e.stack=null,t.prototype.getInitialData.apply(this,arguments)},e.type="series.pictorialBar",e.dependencies=["grid"],e.defaultOption=kc(qS.defaultOption,{symbol:"circle",symbolSize:null,symbolRotate:null,symbolPosition:null,symbolOffset:null,symbolMargin:null,symbolRepeat:!1,symbolRepeatDirection:"end",symbolClip:!1,symbolBoundingData:null,symbolPatternSize:400,barGap:"-100%",clip:!1,progressive:0,emphasis:{scale:!1},select:{itemStyle:{borderColor:"#212121"}}}),e}(qS);var NO=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._layers=[],n}return n(e,t),e.prototype.render=function(t,e,n){var i=t.getData(),r=this,o=this.group,a=t.getLayerSeries(),s=i.getLayout("layoutInfo"),l=s.rect,u=s.boundaryGap;function h(t){return t.name}o.x=0,o.y=l.y+u[0];var c=new Gm(this._layersSeries||[],a,h,h),p=[];function d(e,n,s){var l=r._layers;if("remove"!==e){for(var u,h,c=[],d=[],f=a[n].indices,g=0;go&&(o=s),i.push(s)}for(var u=0;uo&&(o=c)}return{y0:r,max:o}}(l),h=u.y0,c=n/u.max,p=o.length,d=o[0].indices.length,f=0;fI&&!so(C-I)&&C0?(r.virtualPiece?r.virtualPiece.updateData(!1,i,t,e,n):(r.virtualPiece=new BO(i,t,e,n),l.add(r.virtualPiece)),o.piece.off("click"),r.virtualPiece.on("click",(function(t){r._rootToNode(o.parentNode)}))):r.virtualPiece&&(l.remove(r.virtualPiece),r.virtualPiece=null)}(a,s),this._initEvents(),this._oldChildren=h},e.prototype._initEvents=function(){var t=this;this.group.off("click"),this.group.on("click",(function(e){var n=!1;t.seriesModel.getViewRoot().eachNode((function(i){if(!n&&i.piece&&i.piece===e.target){var r=i.getModel().get("nodeClick");if("rootToNode"===r)t._rootToNode(i);else if("link"===r){var o=i.getModel(),a=o.get("link");if(a)Mp(a,o.get("target",!0)||"_blank")}n=!0}}))}))},e.prototype._rootToNode=function(t){t!==this.seriesModel.getViewRoot()&&this.api.dispatchAction({type:FO,from:this.uid,seriesId:this.seriesModel.id,targetNode:t})},e.prototype.containPoint=function(t,e){var n=e.getData().getItemLayout(0);if(n){var i=t[0]-n.cx,r=t[1]-n.cy,o=Math.sqrt(i*i+r*r);return o<=n.r&&o>=n.r0}},e.type="sunburst",e}(Og),HO=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.ignoreStyleOnData=!0,n}return n(e,t),e.prototype.getInitialData=function(t,e){var n={name:t.name,children:t.data};YO(n);var i=this._levelModels=z(t.levels||[],(function(t){return new Cc(t,this,e)}),this),r=nD.createTree(n,this,(function(t){t.wrapMethod("getItemModel",(function(t,e){var n=r.getNodeByDataIndex(e),o=i[n.depth];return o&&(t.parentModel=o),t}))}));return r.data},e.prototype.optionUpdated=function(){this.resetViewRoot()},e.prototype.getDataParams=function(e){var n=t.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(e);return n.treePathInfo=aD(i,this),n},e.prototype.getLevelModel=function(t){return this._levelModels&&this._levelModels[t.depth]},e.prototype.getViewRoot=function(){return this._viewRoot},e.prototype.resetViewRoot=function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getRawData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)},e.prototype.enableAriaDecal=function(){pD(this)},e.type="series.sunburst",e.defaultOption={z:2,center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,stillShowZeroSum:!0,nodeClick:"rootToNode",renderLabelForZeroData:!1,label:{rotate:"radial",show:!0,opacity:1,align:"center",position:"inside",distance:5,silent:!0},itemStyle:{borderWidth:1,borderColor:"white",borderType:"solid",shadowBlur:0,shadowColor:"rgba(0, 0, 0, 0.2)",shadowOffsetX:0,shadowOffsetY:0,opacity:1},emphasis:{focus:"descendant"},blur:{itemStyle:{opacity:.2},label:{opacity:.1}},animationType:"expansion",animationDuration:1e3,animationDurationUpdate:500,data:[],sort:"desc"},e}(bg);function YO(t){var e=0;E(t.children,(function(t){YO(t);var n=t.value;Y(n)&&(n=n[0]),e+=n}));var n=t.value;Y(n)&&(n=n[0]),(null==n||isNaN(n))&&(n=e),n<0&&(n=0),Y(t.value)?t.value[0]=n:t.value=n}var XO=Math.PI/180;function UO(t,e,n){e.eachSeriesByType(t,(function(t){var e=t.get("center"),i=t.get("radius");Y(i)||(i=[0,i]),Y(e)||(e=[e,e]);var r=n.getWidth(),o=n.getHeight(),a=Math.min(r,o),s=$r(e[0],r),l=$r(e[1],o),u=$r(i[0],a/2),h=$r(i[1],a/2),c=-t.get("startAngle")*XO,p=t.get("minAngle")*XO,d=t.getData().tree.root,f=t.getViewRoot(),g=f.depth,y=t.get("sort");null!=y&&ZO(f,y);var v=0;E(f.children,(function(t){!isNaN(t.getValue())&&v++}));var m=f.getValue(),x=Math.PI/(m||v)*2,_=f.depth>0,b=f.height-(_?-1:1),w=(h-u)/(b||1),S=t.get("clockwise"),M=t.get("stillShowZeroSum"),I=S?1:-1,T=function(e,n){if(e){var i=n;if(e!==d){var r=e.getValue(),o=0===m&&M?x:r*x;o1;)r=r.parentNode;var o=n.getColorFromPalette(r.name||r.dataIndex+"",e);return t.depth>1&&U(o)&&(o=$n(o,(t.depth-1)/(i-1)*.5)),o}(r,t,i.root.height)),A(n.ensureUniqueItemVisual(r.dataIndex,"style"),o)}))}))}var qO={color:"fill",borderColor:"stroke"},KO={symbol:1,symbolSize:1,symbolKeepAspect:1,legendIcon:1,visualMeta:1,liftZ:1,decal:1},$O=Vo(),JO=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.optionUpdated=function(){this.currentZLevel=this.get("zlevel",!0),this.currentZ=this.get("z",!0)},e.prototype.getInitialData=function(t,e){return _x(null,this)},e.prototype.getDataParams=function(e,n,i){var r=t.prototype.getDataParams.call(this,e,n);return i&&(r.info=$O(i).info),r},e.type="series.custom",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",z:2,legendHoverLink:!0,clip:!1},e}(bg);function QO(t,e){return e=e||[0,0],z(["x","y"],(function(n,i){var r=this.getAxis(n),o=e[i],a=t[i]/2;return"category"===r.type?r.getBandWidth():Math.abs(r.dataToCoord(o-a)-r.dataToCoord(o+a))}),this)}function tR(t,e){return e=e||[0,0],z([0,1],(function(n){var i=e[n],r=t[n]/2,o=[],a=[];return o[n]=i-r,a[n]=i+r,o[1-n]=a[1-n]=e[1-n],Math.abs(this.dataToPoint(o)[n]-this.dataToPoint(a)[n])}),this)}function eR(t,e){var n=this.getAxis(),i=e instanceof Array?e[0]:e,r=(t instanceof Array?t[0]:t)/2;return"category"===n.type?n.getBandWidth():Math.abs(n.dataToCoord(i-r)-n.dataToCoord(i+r))}function nR(t,e){return e=e||[0,0],z(["Radius","Angle"],(function(n,i){var r=this["get"+n+"Axis"](),o=e[i],a=t[i]/2,s="category"===r.type?r.getBandWidth():Math.abs(r.dataToCoord(o-a)-r.dataToCoord(o+a));return"Angle"===n&&(s=s*Math.PI/180),s}),this)}function iR(t,e,n,i){return t&&(t.legacy||!1!==t.legacy&&!n&&!i&&"tspan"!==e&&("text"===e||_t(t,"text")))}function rR(t,e,n){var i,r,o,a=t;if("text"===e)o=a;else{o={},_t(a,"text")&&(o.text=a.text),_t(a,"rich")&&(o.rich=a.rich),_t(a,"textFill")&&(o.fill=a.textFill),_t(a,"textStroke")&&(o.stroke=a.textStroke),_t(a,"fontFamily")&&(o.fontFamily=a.fontFamily),_t(a,"fontSize")&&(o.fontSize=a.fontSize),_t(a,"fontStyle")&&(o.fontStyle=a.fontStyle),_t(a,"fontWeight")&&(o.fontWeight=a.fontWeight),r={type:"text",style:o,silent:!0},i={};var s=_t(a,"textPosition");n?i.position=s?a.textPosition:"inside":s&&(i.position=a.textPosition),_t(a,"textPosition")&&(i.position=a.textPosition),_t(a,"textOffset")&&(i.offset=a.textOffset),_t(a,"textRotation")&&(i.rotation=a.textRotation),_t(a,"textDistance")&&(i.distance=a.textDistance)}return oR(o,t),E(o.rich,(function(t){oR(t,t)})),{textConfig:i,textContent:r}}function oR(t,e){e&&(e.font=e.textFont||e.font,_t(e,"textStrokeWidth")&&(t.lineWidth=e.textStrokeWidth),_t(e,"textAlign")&&(t.align=e.textAlign),_t(e,"textVerticalAlign")&&(t.verticalAlign=e.textVerticalAlign),_t(e,"textLineHeight")&&(t.lineHeight=e.textLineHeight),_t(e,"textWidth")&&(t.width=e.textWidth),_t(e,"textHeight")&&(t.height=e.textHeight),_t(e,"textBackgroundColor")&&(t.backgroundColor=e.textBackgroundColor),_t(e,"textPadding")&&(t.padding=e.textPadding),_t(e,"textBorderColor")&&(t.borderColor=e.textBorderColor),_t(e,"textBorderWidth")&&(t.borderWidth=e.textBorderWidth),_t(e,"textBorderRadius")&&(t.borderRadius=e.textBorderRadius),_t(e,"textBoxShadowColor")&&(t.shadowColor=e.textBoxShadowColor),_t(e,"textBoxShadowBlur")&&(t.shadowBlur=e.textBoxShadowBlur),_t(e,"textBoxShadowOffsetX")&&(t.shadowOffsetX=e.textBoxShadowOffsetX),_t(e,"textBoxShadowOffsetY")&&(t.shadowOffsetY=e.textBoxShadowOffsetY))}function aR(t,e,n){var i=t;i.textPosition=i.textPosition||n.position||"inside",null!=n.offset&&(i.textOffset=n.offset),null!=n.rotation&&(i.textRotation=n.rotation),null!=n.distance&&(i.textDistance=n.distance);var r=i.textPosition.indexOf("inside")>=0,o=t.fill||"#000";sR(i,e);var a=null==i.textFill;return r?a&&(i.textFill=n.insideFill||"#fff",!i.textStroke&&n.insideStroke&&(i.textStroke=n.insideStroke),!i.textStroke&&(i.textStroke=o),null==i.textStrokeWidth&&(i.textStrokeWidth=2)):(a&&(i.textFill=t.fill||n.outsideFill||"#000"),!i.textStroke&&n.outsideStroke&&(i.textStroke=n.outsideStroke)),i.text=e.text,i.rich=e.rich,E(e.rich,(function(t){sR(t,t)})),i}function sR(t,e){e&&(_t(e,"fill")&&(t.textFill=e.fill),_t(e,"stroke")&&(t.textStroke=e.fill),_t(e,"lineWidth")&&(t.textStrokeWidth=e.lineWidth),_t(e,"font")&&(t.font=e.font),_t(e,"fontStyle")&&(t.fontStyle=e.fontStyle),_t(e,"fontWeight")&&(t.fontWeight=e.fontWeight),_t(e,"fontSize")&&(t.fontSize=e.fontSize),_t(e,"fontFamily")&&(t.fontFamily=e.fontFamily),_t(e,"align")&&(t.textAlign=e.align),_t(e,"verticalAlign")&&(t.textVerticalAlign=e.verticalAlign),_t(e,"lineHeight")&&(t.textLineHeight=e.lineHeight),_t(e,"width")&&(t.textWidth=e.width),_t(e,"height")&&(t.textHeight=e.height),_t(e,"backgroundColor")&&(t.textBackgroundColor=e.backgroundColor),_t(e,"padding")&&(t.textPadding=e.padding),_t(e,"borderColor")&&(t.textBorderColor=e.borderColor),_t(e,"borderWidth")&&(t.textBorderWidth=e.borderWidth),_t(e,"borderRadius")&&(t.textBorderRadius=e.borderRadius),_t(e,"shadowColor")&&(t.textBoxShadowColor=e.shadowColor),_t(e,"shadowBlur")&&(t.textBoxShadowBlur=e.shadowBlur),_t(e,"shadowOffsetX")&&(t.textBoxShadowOffsetX=e.shadowOffsetX),_t(e,"shadowOffsetY")&&(t.textBoxShadowOffsetY=e.shadowOffsetY),_t(e,"textShadowColor")&&(t.textShadowColor=e.textShadowColor),_t(e,"textShadowBlur")&&(t.textShadowBlur=e.textShadowBlur),_t(e,"textShadowOffsetX")&&(t.textShadowOffsetX=e.textShadowOffsetX),_t(e,"textShadowOffsetY")&&(t.textShadowOffsetY=e.textShadowOffsetY))}var lR={position:["x","y"],scale:["scaleX","scaleY"],origin:["originX","originY"]},uR=G(lR),hR=(V(mr,(function(t,e){return t[e]=1,t}),{}),mr.join(", "),["","style","shape","extra"]),cR=Vo();function pR(t,e,n,i,r){var o=t+"Animation",a=gh(t,i,r)||{},s=cR(e).userDuring;return a.duration>0&&(a.during=s?W(xR,{el:e,userDuring:s}):null,a.setToFinal=!0,a.scope=t),A(a,n[o]),a}function dR(t,e,n,i){var r=(i=i||{}).dataIndex,o=i.isInit,a=i.clearStyle,s=n.isAnimationEnabled(),l=cR(t),u=e.style;l.userDuring=e.during;var h={},c={};if(function(t,e,n){for(var i=0;i=0)){var c=t.getAnimationStyleProps(),p=c?c.style:null;if(p){!r&&(r=i.style={});var d=G(n);for(u=0;u0&&t.animateFrom(p,d)}else!function(t,e,n,i,r){if(r){var o=pR("update",t,e,i,n);o.duration>0&&t.animateFrom(r,o)}}(t,e,r||0,n,h);fR(t,e),u?t.dirty():t.markRedraw()}function fR(t,e){for(var n=cR(t).leaveToProps,i=0;i=0){!o&&(o=i[t]={});var p=G(a);for(h=0;hi[1]&&i.reverse(),{coordSys:{type:"polar",cx:t.cx,cy:t.cy,r:i[1],r0:i[0]},api:{coord:function(i){var r=e.dataToRadius(i[0]),o=n.dataToAngle(i[1]),a=t.coordToPoint([r,o]);return a.push(r,o*Math.PI/180),a},size:W(nR,t)}}},calendar:function(t){var e=t.getRect(),n=t.getRangeInfo();return{coordSys:{type:"calendar",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:t.getCellWidth(),cellHeight:t.getCellHeight(),rangeInfo:{start:n.start,end:n.end,weeks:n.weeks,dayCount:n.allDay}},api:{coord:function(e,n){return t.dataToPoint(e,n)}}}}};function zR(t){return t instanceof ks}function VR(t){return t instanceof Da}var BR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n,i){this._progressiveEls=null;var r=this._data,o=t.getData(),a=this.group,s=YR(t,o,e,n);r||a.removeAll(),o.diff(r).add((function(e){UR(n,null,e,s(e,i),t,a,o)})).remove((function(e){var n=r.getItemGraphicEl(e);n&&gR(n,$O(n).option,t)})).update((function(e,l){var u=r.getItemGraphicEl(l);UR(n,u,e,s(e,i),t,a,o)})).execute();var l=t.get("clip",!0)?PS(t.coordinateSystem,!1,t):null;l?a.setClipPath(l):a.removeClipPath(),this._data=o},e.prototype.incrementalPrepareRender=function(t,e,n){this.group.removeAll(),this._data=null},e.prototype.incrementalRender=function(t,e,n,i,r){var o=e.getData(),a=YR(e,o,n,i),s=this._progressiveEls=[];function l(t){t.isGroup||(t.incremental=!0,t.ensureState("emphasis").hoverLayer=!0)}for(var u=t.start;u=0?e.getStore().get(r,n):void 0}var o=e.get(i.name,n),a=i&&i.ordinalMeta;return a?a.categories[o]:o},styleEmphasis:function(n,i){0;null==i&&(i=s);var r=m(i,CR).getItemStyle(),o=x(i,CR),a=oc(o,null,null,!0,!0);a.text=o.getShallow("show")?ot(t.getFormattedLabel(i,CR),t.getFormattedLabel(i,DR),pS(e,i)):null;var l=ac(o,null,!0);return b(n,r),r=aR(r,a,l),n&&_(r,n),r.legacy=!0,r},visual:function(t,n){if(null==n&&(n=s),_t(qO,t)){var i=e.getItemVisual(n,"style");return i?i[qO[t]]:null}if(_t(KO,t))return e.getItemVisual(n,t)},barLayout:function(t){if("cartesian2d"===o.type){return function(t){var e=[],n=t.axis,i="axis0";if("category"===n.type){for(var r=n.getBandWidth(),o=0;o=c;f--){var g=e.childAt(f);JR(e,g,r)}}(t,c,n,i,r),a>=0?o.replaceAt(c,a):o.add(c),c}function jR(t,e,n){var i,r=$O(t),o=e.type,a=e.shape,s=e.style;return n.isUniversalTransitionEnabled()||null!=o&&o!==r.customGraphicType||"path"===o&&((i=a)&&(_t(i,"pathData")||_t(i,"d")))&&nN(a)!==r.customPathData||"image"===o&&_t(s,"image")&&s.image!==r.customImagePath}function qR(t,e,n){var i=e?KR(t,e):t,r=e?$R(t,i,CR):t.style,o=t.type,a=i?i.textConfig:null,s=t.textContent,l=s?e?KR(s,e):s:null;if(r&&(n.isLegacy||iR(r,o,!!a,!!l))){n.isLegacy=!0;var u=rR(r,o,!e);!a&&u.textConfig&&(a=u.textConfig),!l&&u.textContent&&(l=u.textContent)}if(!e&&l){var h=l;!h.type&&(h.type="text")}var c=e?n[e]:n.normal;c.cfg=a,c.conOpt=l}function KR(t,e){return e?t?t[e]:null:t}function $R(t,e,n){var i=e&&e.style;return null==i&&n===CR&&t&&(i=t.styleEmphasis),i}function JR(t,e,n){e&&gR(e,$O(t).option,n)}function QR(t,e){var n=t&&t.name;return null!=n?n:"e\0\0"+e}function tN(t,e){var n=this.context,i=null!=t?n.newChildren[t]:null,r=null!=e?n.oldChildren[e]:null;ZR(n.api,r,n.dataIndex,i,n.seriesModel,n.group)}function eN(t){var e=this.context,n=e.oldChildren[t];n&&gR(n,$O(n).option,e.seriesModel)}function nN(t){return t&&(t.pathData||t.d)}var iN=Vo(),rN=T,oN=W,aN=function(){function t(){this._dragging=!1,this.animationThreshold=15}return t.prototype.render=function(t,e,n,i){var r=e.get("value"),o=e.get("status");if(this._axisModel=t,this._axisPointerModel=e,this._api=n,i||this._lastValue!==r||this._lastStatus!==o){this._lastValue=r,this._lastStatus=o;var a=this._group,s=this._handle;if(!o||"hide"===o)return a&&a.hide(),void(s&&s.hide());a&&a.show(),s&&s.show();var l={};this.makeElOption(l,r,t,e,n);var u=l.graphicKey;u!==this._lastGraphicKey&&this.clear(n),this._lastGraphicKey=u;var h=this._moveAnimation=this.determineAnimation(t,e);if(a){var c=H(sN,e,h);this.updatePointerEl(a,l,c),this.updateLabelEl(a,l,c,e)}else a=this._group=new Br,this.createPointerEl(a,l,t,e),this.createLabelEl(a,l,t,e),n.getZr().add(a);cN(a,e,!0),this._renderHandle(r)}},t.prototype.remove=function(t){this.clear(t)},t.prototype.dispose=function(t){this.clear(t)},t.prototype.determineAnimation=function(t,e){var n=e.get("animation"),i=t.axis,r="category"===i.type,o=e.get("snap");if(!o&&!r)return!1;if("auto"===n||null==n){var a=this.animationThreshold;if(r&&i.getBandWidth()>a)return!0;if(o){var s=wI(t).seriesDataCount,l=i.getExtent();return Math.abs(l[0]-l[1])/s>a}return!1}return!0===n},t.prototype.makeElOption=function(t,e,n,i,r){},t.prototype.createPointerEl=function(t,e,n,i){var r=e.pointer;if(r){var o=iN(t).pointerEl=new Qh[r.type](rN(e.pointer));t.add(o)}},t.prototype.createLabelEl=function(t,e,n,i){if(e.label){var r=iN(t).labelEl=new Xs(rN(e.label));t.add(r),uN(r,i)}},t.prototype.updatePointerEl=function(t,e,n){var i=iN(t).pointerEl;i&&e.pointer&&(i.setStyle(e.pointer.style),n(i,{shape:e.pointer.shape}))},t.prototype.updateLabelEl=function(t,e,n,i){var r=iN(t).labelEl;r&&(r.setStyle(e.label.style),n(r,{x:e.label.x,y:e.label.y}),uN(r,i))},t.prototype._renderHandle=function(t){if(!this._dragging&&this.updateHandleTransform){var e,n=this._axisPointerModel,i=this._api.getZr(),r=this._handle,o=n.getModel("handle"),a=n.get("status");if(!o.get("show")||!a||"hide"===a)return r&&i.remove(r),void(this._handle=null);this._handle||(e=!0,r=this._handle=Uh(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){de(t.event)},onmousedown:oN(this._onHandleDragMove,this,0,0),drift:oN(this._onHandleDragMove,this),ondragend:oN(this._onHandleDragEnd,this)}),i.add(r)),cN(r,n,!1),r.setStyle(o.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var s=o.get("size");Y(s)||(s=[s,s]),r.scaleX=s[0]/2,r.scaleY=s[1]/2,Hg(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,e)}},t.prototype._moveHandleToValue=function(t,e){sN(this._axisPointerModel,!e&&this._moveAnimation,this._handle,hN(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},t.prototype._onHandleDragMove=function(t,e){var n=this._handle;if(n){this._dragging=!0;var i=this.updateHandleTransform(hN(n),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=i,n.stopAnimation(),n.attr(hN(i)),iN(n).lastProp=null,this._doDispatchAxisPointer()}},t.prototype._doDispatchAxisPointer=function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},t.prototype._onHandleDragEnd=function(){if(this._dragging=!1,this._handle){var t=this._axisPointerModel.get("value");this._moveHandleToValue(t),this._api.dispatchAction({type:"hideTip"})}},t.prototype.clear=function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),n=this._group,i=this._handle;e&&n&&(this._lastGraphicKey=null,n&&e.remove(n),i&&e.remove(i),this._group=null,this._handle=null,this._payloadInfo=null),Yg(this,"_doDispatchAxisPointer")},t.prototype.doClear=function(){},t.prototype.buildLabel=function(t,e,n){return{x:t[n=n||0],y:t[1-n],width:e[n],height:e[1-n]}},t}();function sN(t,e,n,i){lN(iN(n).lastProp,i)||(iN(n).lastProp=i,e?vh(n,i,t):(n.stopAnimation(),n.attr(i)))}function lN(t,e){if(q(t)&&q(e)){var n=!0;return E(e,(function(e,i){n=n&&lN(t[i],e)})),!!n}return t===e}function uN(t,e){t[e.get(["label","show"])?"show":"hide"]()}function hN(t){return{x:t.x||0,y:t.y||0,rotation:t.rotation||0}}function cN(t,e,n){var i=e.get("z"),r=e.get("zlevel");t&&t.traverse((function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=r&&(t.zlevel=r),t.silent=n)}))}function pN(t){var e,n=t.get("type"),i=t.getModel(n+"Style");return"line"===n?(e=i.getLineStyle()).fill=null:"shadow"===n&&((e=i.getAreaStyle()).stroke=null),e}function dN(t,e,n,i,r){var o=fN(n.get("value"),e.axis,e.ecModel,n.get("seriesDataIndices"),{precision:n.get(["label","precision"]),formatter:n.get(["label","formatter"])}),a=n.getModel("label"),s=vp(a.get("padding")||0),l=a.getFont(),u=Sr(o,l),h=r.position,c=u.width+s[1]+s[3],p=u.height+s[0]+s[2],d=r.align;"right"===d&&(h[0]-=c),"center"===d&&(h[0]-=c/2);var f=r.verticalAlign;"bottom"===f&&(h[1]-=p),"middle"===f&&(h[1]-=p/2),function(t,e,n,i){var r=i.getWidth(),o=i.getHeight();t[0]=Math.min(t[0]+e,r)-e,t[1]=Math.min(t[1]+n,o)-n,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}(h,c,p,i);var g=a.get("backgroundColor");g&&"auto"!==g||(g=e.get(["axisLine","lineStyle","color"])),t.label={x:h[0],y:h[1],style:oc(a,{text:o,font:l,fill:a.getTextColor(),padding:s,backgroundColor:g}),z2:10}}function fN(t,e,n,i,r){t=e.scale.parse(t);var o=e.scale.getLabel({value:t},{precision:r.precision}),a=r.formatter;if(a){var s={value:S_(e,{value:t}),axisDimension:e.dim,axisIndex:e.index,seriesData:[]};E(i,(function(t){var e=n.getSeriesByIndex(t.seriesIndex),i=t.dataIndexInside,r=e&&e.getDataParams(i);r&&s.seriesData.push(r)})),U(a)?o=a.replace("{value}",o):X(a)&&(o=a(s))}return o}function gN(t,e,n){var i=[1,0,0,1,0,0];return Se(i,i,n.rotation),we(i,i,n.position),Fh([t.dataToCoord(e),(n.labelOffset||0)+(n.labelDirection||1)*(n.labelMargin||0)],i)}function yN(t,e,n,i,r,o){var a=dI.innerTextLayout(n.rotation,0,n.labelDirection);n.labelMargin=r.get(["label","margin"]),dN(e,i,r,o,{position:gN(i.axis,t,n),align:a.textAlign,verticalAlign:a.textVerticalAlign})}function vN(t,e,n){return{x1:t[n=n||0],y1:t[1-n],x2:e[n],y2:e[1-n]}}function mN(t,e,n){return{x:t[n=n||0],y:t[1-n],width:e[n],height:e[1-n]}}function xN(t,e,n,i,r,o){return{cx:t,cy:e,r0:n,r:i,startAngle:r,endAngle:o,clockwise:!0}}var _N=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.makeElOption=function(t,e,n,i,r){var o=n.axis,a=o.grid,s=i.get("type"),l=bN(a,o).getOtherAxis(o).getGlobalExtent(),u=o.toGlobalCoord(o.dataToCoord(e,!0));if(s&&"none"!==s){var h=pN(i),c=wN[s](o,u,l);c.style=h,t.graphicKey=c.type,t.pointer=c}yN(e,t,iI(a.model,n),n,i,r)},e.prototype.getHandleTransform=function(t,e,n){var i=iI(e.axis.grid.model,e,{labelInside:!1});i.labelMargin=n.get(["handle","margin"]);var r=gN(e.axis,t,i);return{x:r[0],y:r[1],rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},e.prototype.updateHandleTransform=function(t,e,n,i){var r=n.axis,o=r.grid,a=r.getGlobalExtent(!0),s=bN(o,r).getOtherAxis(r).getGlobalExtent(),l="x"===r.dim?0:1,u=[t.x,t.y];u[l]+=e[l],u[l]=Math.min(a[1],u[l]),u[l]=Math.max(a[0],u[l]);var h=(s[1]+s[0])/2,c=[h,h];c[l]=u[l];return{x:u[0],y:u[1],rotation:t.rotation,cursorPoint:c,tooltipOption:[{verticalAlign:"middle"},{align:"center"}][l]}},e}(aN);function bN(t,e){var n={};return n[e.dim+"AxisIndex"]=e.index,t.getCartesian(n)}var wN={line:function(t,e,n){return{type:"Line",subPixelOptimize:!0,shape:vN([e,n[0]],[e,n[1]],SN(t))}},shadow:function(t,e,n){var i=Math.max(1,t.getBandWidth()),r=n[1]-n[0];return{type:"Rect",shape:mN([e-i/2,n[0]],[i,r],SN(t))}}};function SN(t){return"x"===t.dim?0:1}var MN=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="axisPointer",e.defaultOption={show:"auto",z:50,type:"line",snap:!1,triggerTooltip:!0,triggerEmphasis:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#B9BEC9",width:1,type:"dashed"},shadowStyle:{color:"rgba(210,219,238,0.2)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,borderRadius:3},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}},e}(zp),IN=Vo(),TN=E;function CN(t,e,n){if(!r.node){var i=e.getZr();IN(i).records||(IN(i).records={}),function(t,e){if(IN(t).initialized)return;function n(n,i){t.on(n,(function(n){var r=function(t){var e={showTip:[],hideTip:[]},n=function(i){var r=e[i.type];r?r.push(i):(i.dispatchAction=n,t.dispatchAction(i))};return{dispatchAction:n,pendings:e}}(e);TN(IN(t).records,(function(t){t&&i(t,n,r.dispatchAction)})),function(t,e){var n,i=t.showTip.length,r=t.hideTip.length;i?n=t.showTip[i-1]:r&&(n=t.hideTip[r-1]);n&&(n.dispatchAction=null,e.dispatchAction(n))}(r.pendings,e)}))}IN(t).initialized=!0,n("click",H(AN,"click")),n("mousemove",H(AN,"mousemove")),n("globalout",DN)}(i,e),(IN(i).records[t]||(IN(i).records[t]={})).handler=n}}function DN(t,e,n){t.handler("leave",null,n)}function AN(t,e,n,i){e.handler(t,n,i)}function kN(t,e){if(!r.node){var n=e.getZr();(IN(n).records||{})[t]&&(IN(n).records[t]=null)}}var LN=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=e.getComponent("tooltip"),r=t.get("triggerOn")||i&&i.get("triggerOn")||"mousemove|click";CN("axisPointer",n,(function(t,e,n){"none"!==r&&("leave"===t||r.indexOf(t)>=0)&&n({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})}))},e.prototype.remove=function(t,e){kN("axisPointer",e)},e.prototype.dispose=function(t,e){kN("axisPointer",e)},e.type="axisPointer",e}(Ag);function PN(t,e){var n,i=[],r=t.seriesIndex;if(null==r||!(n=e.getSeriesByIndex(r)))return{point:[]};var o=n.getData(),a=zo(o,t);if(null==a||a<0||Y(a))return{point:[]};var s=o.getItemGraphicEl(a),l=n.coordinateSystem;if(n.getTooltipPosition)i=n.getTooltipPosition(a)||[];else if(l&&l.dataToPoint)if(t.isStacked){var u=l.getBaseAxis(),h=l.getOtherAxis(u).dim,c=u.dim,p="x"===h||"radius"===h?1:0,d=o.mapDimension(c),f=[];f[p]=o.get(d,a),f[1-p]=o.get(o.getCalculationInfo("stackResultDimension"),a),i=l.dataToPoint(f)||[]}else i=l.dataToPoint(o.getValues(z(l.dimensions,(function(t){return o.mapDimension(t)})),a))||[];else if(s){var g=s.getBoundingRect().clone();g.applyTransform(s.transform),i=[g.x+g.width/2,g.y+g.height/2]}return{point:i,el:s}}var ON=Vo();function RN(t,e,n){var i=t.currTrigger,r=[t.x,t.y],o=t,a=t.dispatchAction||W(n.dispatchAction,n),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){BN(r)&&(r=PN({seriesIndex:o.seriesIndex,dataIndex:o.dataIndex},e).point);var l=BN(r),u=o.axesInfo,h=s.axesInfo,c="leave"===i||BN(r),p={},d={},f={list:[],map:{}},g={showPointer:H(EN,d),showTooltip:H(zN,f)};E(s.coordSysMap,(function(t,e){var n=l||t.containPoint(r);E(s.coordSysAxesInfo[e],(function(t,e){var i=t.axis,o=function(t,e){for(var n=0;n<(t||[]).length;n++){var i=t[n];if(e.axis.dim===i.axisDim&&e.axis.model.componentIndex===i.axisIndex)return i}}(u,t);if(!c&&n&&(!u||o)){var a=o&&o.value;null!=a||l||(a=i.pointToData(r)),null!=a&&NN(t,a,g,!1,p)}}))}));var y={};return E(h,(function(t,e){var n=t.linkGroup;n&&!d[e]&&E(n.axesInfo,(function(e,i){var r=d[i];if(e!==t&&r){var o=r.value;n.mapper&&(o=t.axis.scale.parse(n.mapper(o,VN(e),VN(t)))),y[t.key]=o}}))})),E(y,(function(t,e){NN(h[e],t,g,!0,p)})),function(t,e,n){var i=n.axesInfo=[];E(e,(function(e,n){var r=e.axisPointerModel.option,o=t[n];o?(!e.useHandle&&(r.status="show"),r.value=o.value,r.seriesDataIndices=(o.payloadBatch||[]).slice()):!e.useHandle&&(r.status="hide"),"show"===r.status&&i.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:r.value})}))}(d,h,p),function(t,e,n,i){if(BN(e)||!t.list.length)return void i({type:"hideTip"});var r=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};i({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:n.tooltipOption,position:n.position,dataIndexInside:r.dataIndexInside,dataIndex:r.dataIndex,seriesIndex:r.seriesIndex,dataByCoordSys:t.list})}(f,r,t,a),function(t,e,n){var i=n.getZr(),r="axisPointerLastHighlights",o=ON(i)[r]||{},a=ON(i)[r]={};E(t,(function(t,e){var n=t.axisPointerModel.option;"show"===n.status&&t.triggerEmphasis&&E(n.seriesDataIndices,(function(t){var e=t.seriesIndex+" | "+t.dataIndex;a[e]=t}))}));var s=[],l=[];E(o,(function(t,e){!a[e]&&l.push(t)})),E(a,(function(t,e){!o[e]&&s.push(t)})),l.length&&n.dispatchAction({type:"downplay",escapeConnect:!0,notBlur:!0,batch:l}),s.length&&n.dispatchAction({type:"highlight",escapeConnect:!0,notBlur:!0,batch:s})}(h,0,n),p}}function NN(t,e,n,i,r){var o=t.axis;if(!o.scale.isBlank()&&o.containData(e))if(t.involveSeries){var a=function(t,e){var n=e.axis,i=n.dim,r=t,o=[],a=Number.MAX_VALUE,s=-1;return E(e.seriesModels,(function(e,l){var u,h,c=e.getData().mapDimensionsAll(i);if(e.getAxisTooltipData){var p=e.getAxisTooltipData(c,t,n);h=p.dataIndices,u=p.nestestValue}else{if(!(h=e.getData().indicesOfNearest(c[0],t,"category"===n.type?.5:null)).length)return;u=e.getData().get(c[0],h[0])}if(null!=u&&isFinite(u)){var d=t-u,f=Math.abs(d);f<=a&&((f=0&&s<0)&&(a=f,s=d,r=u,o.length=0),E(h,(function(t){o.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})})))}})),{payloadBatch:o,snapToValue:r}}(e,t),s=a.payloadBatch,l=a.snapToValue;s[0]&&null==r.seriesIndex&&A(r,s[0]),!i&&t.snap&&o.containData(l)&&null!=l&&(e=l),n.showPointer(t,e,s),n.showTooltip(t,a,l)}else n.showPointer(t,e)}function EN(t,e,n,i){t[e.key]={value:n,payloadBatch:i}}function zN(t,e,n,i){var r=n.payloadBatch,o=e.axis,a=o.model,s=e.axisPointerModel;if(e.triggerTooltip&&r.length){var l=e.coordSys.model,u=MI(l),h=t.map[u];h||(h=t.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(h)),h.dataByAxis.push({axisDim:o.dim,axisIndex:a.componentIndex,axisType:a.type,axisId:a.id,value:i,valueLabelOpt:{precision:s.get(["label","precision"]),formatter:s.get(["label","formatter"])},seriesDataIndices:r.slice()})}}function VN(t){var e=t.axis.model,n={},i=n.axisDim=t.axis.dim;return n.axisIndex=n[i+"AxisIndex"]=e.componentIndex,n.axisName=n[i+"AxisName"]=e.name,n.axisId=n[i+"AxisId"]=e.id,n}function BN(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function FN(t){TI.registerAxisPointerClass("CartesianAxisPointer",_N),t.registerComponentModel(MN),t.registerComponentView(LN),t.registerPreprocessor((function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!Y(e)&&(t.axisPointer.link=[e])}})),t.registerProcessor(t.PRIORITY.PROCESSOR.STATISTIC,(function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=xI(t,e)})),t.registerAction({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},RN)}var GN=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.makeElOption=function(t,e,n,i,r){var o=n.axis;"angle"===o.dim&&(this.animationThreshold=Math.PI/18);var a=o.polar,s=a.getOtherAxis(o).getExtent(),l=o.dataToCoord(e),u=i.get("type");if(u&&"none"!==u){var h=pN(i),c=WN[u](o,a,l,s);c.style=h,t.graphicKey=c.type,t.pointer=c}var p=function(t,e,n,i,r){var o=e.axis,a=o.dataToCoord(t),s=i.getAngleAxis().getExtent()[0];s=s/180*Math.PI;var l,u,h,c=i.getRadiusAxis().getExtent();if("radius"===o.dim){var p=[1,0,0,1,0,0];Se(p,p,s),we(p,p,[i.cx,i.cy]),l=Fh([a,-r],p);var d=e.getModel("axisLabel").get("rotate")||0,f=dI.innerTextLayout(s,d*Math.PI/180,-1);u=f.textAlign,h=f.textVerticalAlign}else{var g=c[1];l=i.coordToPoint([g+r,a]);var y=i.cx,v=i.cy;u=Math.abs(l[0]-y)/g<.3?"center":l[0]>y?"left":"right",h=Math.abs(l[1]-v)/g<.3?"middle":l[1]>v?"top":"bottom"}return{position:l,align:u,verticalAlign:h}}(e,n,0,a,i.get(["label","margin"]));dN(t,n,i,r,p)},e}(aN);var WN={line:function(t,e,n,i){return"angle"===t.dim?{type:"Line",shape:vN(e.coordToPoint([i[0],n]),e.coordToPoint([i[1],n]))}:{type:"Circle",shape:{cx:e.cx,cy:e.cy,r:n}}},shadow:function(t,e,n,i){var r=Math.max(1,t.getBandWidth()),o=Math.PI/180;return"angle"===t.dim?{type:"Sector",shape:xN(e.cx,e.cy,i[0],i[1],(-n-r/2)*o,(r/2-n)*o)}:{type:"Sector",shape:xN(e.cx,e.cy,n-r/2,n+r/2,0,2*Math.PI)}}},HN=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.findAxisModel=function(t){var e;return this.ecModel.eachComponent(t,(function(t){t.getCoordSysModel()===this&&(e=t)}),this),e},e.type="polar",e.dependencies=["radiusAxis","angleAxis"],e.defaultOption={z:0,center:["50%","50%"],radius:"80%"},e}(zp),YN=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getCoordSysModel=function(){return this.getReferringComponents("polar",Wo).models[0]},e.type="polarAxis",e}(zp);R(YN,D_);var XN=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="angleAxis",e}(YN),UN=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="radiusAxis",e}(YN),ZN=function(t){function e(e,n){return t.call(this,"radius",e,n)||this}return n(e,t),e.prototype.pointToData=function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},e}(ab);ZN.prototype.dataToRadius=ab.prototype.dataToCoord,ZN.prototype.radiusToData=ab.prototype.coordToData;var jN=Vo(),qN=function(t){function e(e,n){return t.call(this,"angle",e,n||[0,360])||this}return n(e,t),e.prototype.pointToData=function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},e.prototype.calculateCategoryInterval=function(){var t=this,e=t.getLabelModel(),n=t.scale,i=n.getExtent(),r=n.count();if(i[1]-i[0]<1)return 0;var o=i[0],a=t.dataToCoord(o+1)-t.dataToCoord(o),s=Math.abs(a),l=Sr(null==o?"":o+"",e.getFont(),"center","top"),u=Math.max(l.height,7)/s;isNaN(u)&&(u=1/0);var h=Math.max(0,Math.floor(u)),c=jN(t.model),p=c.lastAutoInterval,d=c.lastTickCount;return null!=p&&null!=d&&Math.abs(p-h)<=1&&Math.abs(d-r)<=1&&p>h?h=p:(c.lastTickCount=r,c.lastAutoInterval=h),h},e}(ab);qN.prototype.dataToAngle=ab.prototype.dataToCoord,qN.prototype.angleToData=ab.prototype.coordToData;var KN=["radius","angle"],$N=function(){function t(t){this.dimensions=KN,this.type="polar",this.cx=0,this.cy=0,this._radiusAxis=new ZN,this._angleAxis=new qN,this.axisPointerEnabled=!0,this.name=t||"",this._radiusAxis.polar=this._angleAxis.polar=this}return t.prototype.containPoint=function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},t.prototype.containData=function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},t.prototype.getAxis=function(t){return this["_"+t+"Axis"]},t.prototype.getAxes=function(){return[this._radiusAxis,this._angleAxis]},t.prototype.getAxesByScale=function(t){var e=[],n=this._angleAxis,i=this._radiusAxis;return n.scale.type===t&&e.push(n),i.scale.type===t&&e.push(i),e},t.prototype.getAngleAxis=function(){return this._angleAxis},t.prototype.getRadiusAxis=function(){return this._radiusAxis},t.prototype.getOtherAxis=function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},t.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},t.prototype.getTooltipAxes=function(t){var e=null!=t&&"auto"!==t?this.getAxis(t):this.getBaseAxis();return{baseAxes:[e],otherAxes:[this.getOtherAxis(e)]}},t.prototype.dataToPoint=function(t,e){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)])},t.prototype.pointToData=function(t,e){var n=this.pointToCoord(t);return[this._radiusAxis.radiusToData(n[0],e),this._angleAxis.angleToData(n[1],e)]},t.prototype.pointToCoord=function(t){var e=t[0]-this.cx,n=t[1]-this.cy,i=this.getAngleAxis(),r=i.getExtent(),o=Math.min(r[0],r[1]),a=Math.max(r[0],r[1]);i.inverse?o=a-360:a=o+360;var s=Math.sqrt(e*e+n*n);e/=s,n/=s;for(var l=Math.atan2(-n,e)/Math.PI*180,u=la;)l+=360*u;return[s,l]},t.prototype.coordToPoint=function(t){var e=t[0],n=t[1]/180*Math.PI;return[Math.cos(n)*e+this.cx,-Math.sin(n)*e+this.cy]},t.prototype.getArea=function(){var t=this.getAngleAxis(),e=this.getRadiusAxis().getExtent().slice();e[0]>e[1]&&e.reverse();var n=t.getExtent(),i=Math.PI/180;return{cx:this.cx,cy:this.cy,r0:e[0],r:e[1],startAngle:-n[0]*i,endAngle:-n[1]*i,clockwise:t.inverse,contain:function(t,e){var n=t-this.cx,i=e-this.cy,r=n*n+i*i-1e-4,o=this.r,a=this.r0;return r<=o*o&&r>=a*a}}},t.prototype.convertToPixel=function(t,e,n){return JN(e)===this?this.dataToPoint(n):null},t.prototype.convertFromPixel=function(t,e,n){return JN(e)===this?this.pointToData(n):null},t}();function JN(t){var e=t.seriesModel,n=t.polarModel;return n&&n.coordinateSystem||e&&e.coordinateSystem}function QN(t,e){var n=this,i=n.getAngleAxis(),r=n.getRadiusAxis();if(i.scale.setExtent(1/0,-1/0),r.scale.setExtent(1/0,-1/0),t.eachSeries((function(t){if(t.coordinateSystem===n){var e=t.getData();E(C_(e,"radius"),(function(t){r.scale.unionExtentFromData(e,t)})),E(C_(e,"angle"),(function(t){i.scale.unionExtentFromData(e,t)}))}})),__(i.scale,i.model),__(r.scale,r.model),"category"===i.type&&!i.onBand){var o=i.getExtent(),a=360/i.scale.count();i.inverse?o[1]+=a:o[1]-=a,i.setExtent(o[0],o[1])}}function tE(t,e){var n;if(t.type=e.get("type"),t.scale=b_(e),t.onBand=e.get("boundaryGap")&&"category"===t.type,t.inverse=e.get("inverse"),function(t){return"angleAxis"===t.mainType}(e)){t.inverse=t.inverse!==e.get("clockwise");var i=e.get("startAngle"),r=null!==(n=e.get("endAngle"))&&void 0!==n?n:i+(t.inverse?-360:360);t.setExtent(i,r)}e.axis=t,t.model=e}var eE={dimensions:KN,create:function(t,e){var n=[];return t.eachComponent("polar",(function(t,i){var r=new $N(i+"");r.update=QN;var o=r.getRadiusAxis(),a=r.getAngleAxis(),s=t.findAxisModel("radiusAxis"),l=t.findAxisModel("angleAxis");tE(o,s),tE(a,l),function(t,e,n){var i=e.get("center"),r=n.getWidth(),o=n.getHeight();t.cx=$r(i[0],r),t.cy=$r(i[1],o);var a=t.getRadiusAxis(),s=Math.min(r,o)/2,l=e.get("radius");null==l?l=[0,"100%"]:Y(l)||(l=[0,l]);var u=[$r(l[0],s),$r(l[1],s)];a.inverse?a.setExtent(u[1],u[0]):a.setExtent(u[0],u[1])}(r,t,e),n.push(r),t.coordinateSystem=r,r.model=t})),t.eachSeries((function(t){if("polar"===t.get("coordinateSystem")){var e=t.getReferringComponents("polar",Wo).models[0];0,t.coordinateSystem=e.coordinateSystem}})),n}},nE=["axisLine","axisLabel","axisTick","minorTick","splitLine","minorSplitLine","splitArea"];function iE(t,e,n){e[1]>e[0]&&(e=e.slice().reverse());var i=t.coordToPoint([e[0],n]),r=t.coordToPoint([e[1],n]);return{x1:i[0],y1:i[1],x2:r[0],y2:r[1]}}function rE(t){return t.getRadiusAxis().inverse?0:1}function oE(t){var e=t[0],n=t[t.length-1];e&&n&&Math.abs(Math.abs(e.coord-n.coord)-360)<1e-4&&t.pop()}var aE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.axisPointerClass="PolarAxisPointer",n}return n(e,t),e.prototype.render=function(t,e){if(this.group.removeAll(),t.get("show")){var n=t.axis,i=n.polar,r=i.getRadiusAxis().getExtent(),o=n.getTicksCoords(),a=n.getMinorTicksCoords(),s=z(n.getViewLabels(),(function(t){t=T(t);var e=n.scale,i="ordinal"===e.type?e.getRawOrdinalNumber(t.tickValue):t.tickValue;return t.coord=n.dataToCoord(i),t}));oE(s),oE(o),E(nE,(function(e){!t.get([e,"show"])||n.scale.isBlank()&&"axisLine"!==e||sE[e](this.group,t,i,o,a,r,s)}),this)}},e.type="angleAxis",e}(TI),sE={axisLine:function(t,e,n,i,r,o){var a,s=e.getModel(["axisLine","lineStyle"]),l=n.getAngleAxis(),u=Math.PI/180,h=l.getExtent(),c=rE(n),p=c?0:1,d=360===Math.abs(h[1]-h[0])?"Circle":"Arc";(a=0===o[p]?new Qh[d]({shape:{cx:n.cx,cy:n.cy,r:o[c],startAngle:-h[0]*u,endAngle:-h[1]*u,clockwise:l.inverse},style:s.getLineStyle(),z2:1,silent:!0}):new Wu({shape:{cx:n.cx,cy:n.cy,r:o[c],r0:o[p]},style:s.getLineStyle(),z2:1,silent:!0})).style.fill=null,t.add(a)},axisTick:function(t,e,n,i,r,o){var a=e.getModel("axisTick"),s=(a.get("inside")?-1:1)*a.get("length"),l=o[rE(n)],u=z(i,(function(t){return new Ku({shape:iE(n,[l,l+s],t.coord)})}));t.add(Nh(u,{style:k(a.getModel("lineStyle").getLineStyle(),{stroke:e.get(["axisLine","lineStyle","color"])})}))},minorTick:function(t,e,n,i,r,o){if(r.length){for(var a=e.getModel("axisTick"),s=e.getModel("minorTick"),l=(a.get("inside")?-1:1)*s.get("length"),u=o[rE(n)],h=[],c=0;cf?"left":"right",v=Math.abs(d[1]-g)/p<.3?"middle":d[1]>g?"top":"bottom";if(s&&s[c]){var m=s[c];q(m)&&m.textStyle&&(a=new Cc(m.textStyle,l,l.ecModel))}var x=new Xs({silent:dI.isLabelSilent(e),style:oc(a,{x:d[0],y:d[1],fill:a.getTextColor()||e.get(["axisLine","lineStyle","color"]),text:i.formattedLabel,align:y,verticalAlign:v})});if(t.add(x),h){var _=dI.makeAxisEventDataBase(e);_.targetType="axisLabel",_.value=i.rawLabel,rl(x).eventData=_}}),this)},splitLine:function(t,e,n,i,r,o){var a=e.getModel("splitLine").getModel("lineStyle"),s=a.get("color"),l=0;s=s instanceof Array?s:[s];for(var u=[],h=0;h=0?"p":"n",C=b;m&&(i[s][I]||(i[s][I]={p:b,n:b}),C=i[s][I][T]);var D=void 0,A=void 0,k=void 0,L=void 0;if("radius"===c.dim){var P=c.dataToCoord(M)-b,O=o.dataToCoord(I);Math.abs(P)=L})}}}))}var gE={startAngle:90,clockwise:!0,splitNumber:12,axisLabel:{rotate:0}},yE={splitNumber:5},vE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="polar",e}(Ag);function mE(t,e){e=e||{};var n=t.coordinateSystem,i=t.axis,r={},o=i.position,a=i.orient,s=n.getRect(),l=[s.x,s.x+s.width,s.y,s.y+s.height],u={horizontal:{top:l[2],bottom:l[3]},vertical:{left:l[0],right:l[1]}};r.position=["vertical"===a?u.vertical[o]:l[0],"horizontal"===a?u.horizontal[o]:l[3]];r.rotation=Math.PI/2*{horizontal:0,vertical:1}[a];r.labelDirection=r.tickDirection=r.nameDirection={top:-1,bottom:1,right:1,left:-1}[o],t.get(["axisTick","inside"])&&(r.tickDirection=-r.tickDirection),it(e.labelInside,t.get(["axisLabel","inside"]))&&(r.labelDirection=-r.labelDirection);var h=e.rotate;return null==h&&(h=t.get(["axisLabel","rotate"])),r.labelRotation="top"===o?-h:h,r.z2=1,r}var xE=["axisLine","axisTickLabel","axisName"],_E=["splitArea","splitLine"],bE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.axisPointerClass="SingleAxisPointer",n}return n(e,t),e.prototype.render=function(e,n,i,r){var o=this.group;o.removeAll();var a=this._axisGroup;this._axisGroup=new Br;var s=mE(e),l=new dI(e,s);E(xE,l.add,l),o.add(this._axisGroup),o.add(l.getGroup()),E(_E,(function(t){e.get([t,"show"])&&wE[t](this,this.group,this._axisGroup,e)}),this),Hh(a,this._axisGroup,e),t.prototype.render.call(this,e,n,i,r)},e.prototype.remove=function(){AI(this)},e.type="singleAxis",e}(TI),wE={splitLine:function(t,e,n,i){var r=i.axis;if(!r.scale.isBlank()){var o=i.getModel("splitLine"),a=o.getModel("lineStyle"),s=a.get("color");s=s instanceof Array?s:[s];for(var l=a.get("width"),u=i.coordinateSystem.getRect(),h=r.isHorizontal(),c=[],p=0,d=r.getTicksCoords({tickModel:o}),f=[],g=[],y=0;y=e.y&&t[1]<=e.y+e.height:n.contain(n.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},t.prototype.pointToData=function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t["horizontal"===e.orient?0:1]))]},t.prototype.dataToPoint=function(t){var e=this.getAxis(),n=this.getRect(),i=[],r="horizontal"===e.orient?0:1;return t instanceof Array&&(t=t[0]),i[r]=e.toGlobalCoord(e.dataToCoord(+t)),i[1-r]=0===r?n.y+n.height/2:n.x+n.width/2,i},t.prototype.convertToPixel=function(t,e,n){return CE(e)===this?this.dataToPoint(n):null},t.prototype.convertFromPixel=function(t,e,n){return CE(e)===this?this.pointToData(n):null},t}();function CE(t){var e=t.seriesModel,n=t.singleAxisModel;return n&&n.coordinateSystem||e&&e.coordinateSystem}var DE={create:function(t,e){var n=[];return t.eachComponent("singleAxis",(function(i,r){var o=new TE(i,t,e);o.name="single_"+r,o.resize(i,e),i.coordinateSystem=o,n.push(o)})),t.eachSeries((function(t){if("singleAxis"===t.get("coordinateSystem")){var e=t.getReferringComponents("singleAxis",Wo).models[0];t.coordinateSystem=e&&e.coordinateSystem}})),n},dimensions:IE},AE=["x","y"],kE=["width","height"],LE=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.makeElOption=function(t,e,n,i,r){var o=n.axis,a=o.coordinateSystem,s=RE(a,1-OE(o)),l=a.dataToPoint(e)[0],u=i.get("type");if(u&&"none"!==u){var h=pN(i),c=PE[u](o,l,s);c.style=h,t.graphicKey=c.type,t.pointer=c}yN(e,t,mE(n),n,i,r)},e.prototype.getHandleTransform=function(t,e,n){var i=mE(e,{labelInside:!1});i.labelMargin=n.get(["handle","margin"]);var r=gN(e.axis,t,i);return{x:r[0],y:r[1],rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},e.prototype.updateHandleTransform=function(t,e,n,i){var r=n.axis,o=r.coordinateSystem,a=OE(r),s=RE(o,a),l=[t.x,t.y];l[a]+=e[a],l[a]=Math.min(s[1],l[a]),l[a]=Math.max(s[0],l[a]);var u=RE(o,1-a),h=(u[1]+u[0])/2,c=[h,h];return c[a]=l[a],{x:l[0],y:l[1],rotation:t.rotation,cursorPoint:c,tooltipOption:{verticalAlign:"middle"}}},e}(aN),PE={line:function(t,e,n){return{type:"Line",subPixelOptimize:!0,shape:vN([e,n[0]],[e,n[1]],OE(t))}},shadow:function(t,e,n){var i=t.getBandWidth(),r=n[1]-n[0];return{type:"Rect",shape:mN([e-i/2,n[0]],[i,r],OE(t))}}};function OE(t){return t.isHorizontal()?0:1}function RE(t,e){var n=t.getRect();return[n[AE[e]],n[AE[e]]+n[kE[e]]]}var NE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="single",e}(Ag);var EE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(e,n,i){var r=Rp(e);t.prototype.init.apply(this,arguments),zE(e,r)},e.prototype.mergeOption=function(e){t.prototype.mergeOption.apply(this,arguments),zE(this.option,e)},e.prototype.getCellSize=function(){return this.option.cellSize},e.type="calendar",e.defaultOption={z:2,left:80,top:60,cellSize:20,orient:"horizontal",splitLine:{show:!0,lineStyle:{color:"#000",width:1,type:"solid"}},itemStyle:{color:"#fff",borderWidth:1,borderColor:"#ccc"},dayLabel:{show:!0,firstDay:0,position:"start",margin:"50%",color:"#000"},monthLabel:{show:!0,position:"start",margin:5,align:"center",formatter:null,color:"#000"},yearLabel:{show:!0,position:null,margin:30,formatter:null,color:"#ccc",fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},e}(zp);function zE(t,e){var n,i=t.cellSize;1===(n=Y(i)?i:t.cellSize=[i,i]).length&&(n[1]=n[0]);var r=z([0,1],(function(t){return function(t,e){return null!=t[Cp[e][0]]||null!=t[Cp[e][1]]&&null!=t[Cp[e][2]]}(e,t)&&(n[t]="auto"),null!=n[t]&&"auto"!==n[t]}));Op(t,e,{type:"box",ignoreSize:r})}var VE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=this.group;i.removeAll();var r=t.coordinateSystem,o=r.getRangeInfo(),a=r.getOrient(),s=e.getLocaleModel();this._renderDayRect(t,o,i),this._renderLines(t,o,a,i),this._renderYearText(t,o,a,i),this._renderMonthText(t,s,a,i),this._renderWeekText(t,s,o,a,i)},e.prototype._renderDayRect=function(t,e,n){for(var i=t.coordinateSystem,r=t.getModel("itemStyle").getItemStyle(),o=i.getCellWidth(),a=i.getCellHeight(),s=e.start.time;s<=e.end.time;s=i.getNextNDay(s,1).time){var l=i.dataToRect([s],!1).tl,u=new Ws({shape:{x:l[0],y:l[1],width:o,height:a},cursor:"default",style:r});n.add(u)}},e.prototype._renderLines=function(t,e,n,i){var r=this,o=t.coordinateSystem,a=t.getModel(["splitLine","lineStyle"]).getLineStyle(),s=t.get(["splitLine","show"]),l=a.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var u=e.start,h=0;u.time<=e.end.time;h++){p(u.formatedDate),0===h&&(u=o.getDateInfo(e.start.y+"-"+e.start.m));var c=u.date;c.setMonth(c.getMonth()+1),u=o.getDateInfo(c)}function p(e){r._firstDayOfMonth.push(o.getDateInfo(e)),r._firstDayPoints.push(o.dataToRect([e],!1).tl);var l=r._getLinePointsOfOneWeek(t,e,n);r._tlpoints.push(l[0]),r._blpoints.push(l[l.length-1]),s&&r._drawSplitline(l,a,i)}p(o.getNextNDay(e.end.time,1).formatedDate),s&&this._drawSplitline(r._getEdgesPoints(r._tlpoints,l,n),a,i),s&&this._drawSplitline(r._getEdgesPoints(r._blpoints,l,n),a,i)},e.prototype._getEdgesPoints=function(t,e,n){var i=[t[0].slice(),t[t.length-1].slice()],r="horizontal"===n?0:1;return i[0][r]=i[0][r]-e/2,i[1][r]=i[1][r]+e/2,i},e.prototype._drawSplitline=function(t,e,n){var i=new Zu({z2:20,shape:{points:t},style:e});n.add(i)},e.prototype._getLinePointsOfOneWeek=function(t,e,n){for(var i=t.coordinateSystem,r=i.getDateInfo(e),o=[],a=0;a<7;a++){var s=i.getNextNDay(r.time,a),l=i.dataToRect([s.time],!1);o[2*s.day]=l.tl,o[2*s.day+1]=l["horizontal"===n?"bl":"tr"]}return o},e.prototype._formatterLabel=function(t,e){return U(t)&&t?(n=t,E(e,(function(t,e){n=n.replace("{"+e+"}",i?re(t):t)})),n):X(t)?t(e):e.nameMap;var n,i},e.prototype._yearTextPositionControl=function(t,e,n,i,r){var o=e[0],a=e[1],s=["center","bottom"];"bottom"===i?(a+=r,s=["center","top"]):"left"===i?o-=r:"right"===i?(o+=r,s=["center","top"]):a-=r;var l=0;return"left"!==i&&"right"!==i||(l=Math.PI/2),{rotation:l,x:o,y:a,style:{align:s[0],verticalAlign:s[1]}}},e.prototype._renderYearText=function(t,e,n,i){var r=t.getModel("yearLabel");if(r.get("show")){var o=r.get("margin"),a=r.get("position");a||(a="horizontal"!==n?"top":"left");var s=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],l=(s[0][0]+s[1][0])/2,u=(s[0][1]+s[1][1])/2,h="horizontal"===n?0:1,c={top:[l,s[h][1]],bottom:[l,s[1-h][1]],left:[s[1-h][0],u],right:[s[h][0],u]},p=e.start.y;+e.end.y>+e.start.y&&(p=p+"-"+e.end.y);var d=r.get("formatter"),f={start:e.start.y,end:e.end.y,nameMap:p},g=this._formatterLabel(d,f),y=new Xs({z2:30,style:oc(r,{text:g})});y.attr(this._yearTextPositionControl(y,c[a],n,a,o)),i.add(y)}},e.prototype._monthTextPositionControl=function(t,e,n,i,r){var o="left",a="top",s=t[0],l=t[1];return"horizontal"===n?(l+=r,e&&(o="center"),"start"===i&&(a="bottom")):(s+=r,e&&(a="middle"),"start"===i&&(o="right")),{x:s,y:l,align:o,verticalAlign:a}},e.prototype._renderMonthText=function(t,e,n,i){var r=t.getModel("monthLabel");if(r.get("show")){var o=r.get("nameMap"),a=r.get("margin"),s=r.get("position"),l=r.get("align"),u=[this._tlpoints,this._blpoints];o&&!U(o)||(o&&(e=Vc(o)||e),o=e.get(["time","monthAbbr"])||[]);var h="start"===s?0:1,c="horizontal"===n?0:1;a="start"===s?-a:a;for(var p="center"===l,d=0;d=i.start.time&&n.timea.end.time&&t.reverse(),t},t.prototype._getRangeInfo=function(t){var e,n=[this.getDateInfo(t[0]),this.getDateInfo(t[1])];n[0].time>n[1].time&&(e=!0,n.reverse());var i=Math.floor(n[1].time/BE)-Math.floor(n[0].time/BE)+1,r=new Date(n[0].time),o=r.getDate(),a=n[1].date.getDate();r.setDate(o+i-1);var s=r.getDate();if(s!==a)for(var l=r.getTime()-n[1].time>0?1:-1;(s=r.getDate())!==a&&(r.getTime()-n[1].time)*l>0;)i-=l,r.setDate(s-l);var u=Math.floor((i+n[0].day+6)/7),h=e?1-u:u-1;return e&&n.reverse(),{range:[n[0].formatedDate,n[1].formatedDate],start:n[0],end:n[1],allDay:i,weeks:u,nthWeek:h,fweek:n[0].day,lweek:n[1].day}},t.prototype._getDateByWeeksAndDay=function(t,e,n){var i=this._getRangeInfo(n);if(t>i.weeks||0===t&&ei.lweek)return null;var r=7*(t-1)-i.fweek+e,o=new Date(i.start.time);return o.setDate(+i.start.d+r),this.getDateInfo(o)},t.create=function(e,n){var i=[];return e.eachComponent("calendar",(function(r){var o=new t(r,e,n);i.push(o),r.coordinateSystem=o})),e.eachSeries((function(t){"calendar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("calendarIndex")||0])})),i},t.dimensions=["time","value"],t}();function GE(t){var e=t.calendarModel,n=t.seriesModel;return e?e.coordinateSystem:n?n.coordinateSystem:null}function WE(t,e){var n;return E(e,(function(e){null!=t[e]&&"auto"!==t[e]&&(n=!0)})),n}var HE=["transition","enterFrom","leaveTo"],YE=HE.concat(["enterAnimation","updateAnimation","leaveAnimation"]);function XE(t,e,n){if(n&&(!t[n]&&e[n]&&(t[n]={}),t=t[n],e=e[n]),t&&e)for(var i=n?HE:YE,r=0;r=0;l--){var p,d,f;if(f=null!=(d=Ro((p=n[l]).id,null))?r.get(d):null){var g=f.parent,y=(c=jE(g),{}),v=Lp(f,p,g===i?{width:o,height:a}:{width:c.width,height:c.height},null,{hv:p.hv,boundingMode:p.bounding},y);if(!jE(f).isNew&&v){for(var m=p.transition,x={},_=0;_=0)?x[b]=w:f[b]=w}vh(f,x,t,0)}else f.attr(y)}}},e.prototype._clear=function(){var t=this,e=this._elMap;e.each((function(n){JE(n,jE(n).option,e,t._lastGraphicModel)})),this._elMap=yt()},e.prototype.dispose=function(){this._clear()},e.type="graphic",e}(Ag);function KE(t){var e=_t(ZE,t)?ZE[t]:Lh(t);var n=new e({});return jE(n).type=t,n}function $E(t,e,n,i){var r=KE(n);return e.add(r),i.set(t,r),jE(r).id=t,jE(r).isNew=!0,r}function JE(t,e,n,i){t&&t.parent&&("group"===t.type&&t.traverse((function(t){JE(t,e,n,i)})),gR(t,e,i),n.removeKey(jE(t).id))}function QE(t,e,n,i){t.isGroup||E([["cursor",Da.prototype.cursor],["zlevel",i||0],["z",n||0],["z2",0]],(function(n){var i=n[0];_t(e,i)?t[i]=rt(e[i],n[1]):null==t[i]&&(t[i]=n[1])})),E(G(e),(function(n){if(0===n.indexOf("on")){var i=e[n];t[n]=X(i)?i:null}})),_t(e,"draggable")&&(t.draggable=e.draggable),null!=e.name&&(t.name=e.name),null!=e.id&&(t.id=e.id)}var tz=["x","y","radius","angle","single"],ez=["cartesian2d","polar","singleAxis"];function nz(t){return t+"Axis"}function iz(t,e){var n,i=yt(),r=[],o=yt();t.eachComponent({mainType:"dataZoom",query:e},(function(t){o.get(t.uid)||s(t)}));do{n=!1,t.eachComponent("dataZoom",a)}while(n);function a(t){!o.get(t.uid)&&function(t){var e=!1;return t.eachTargetAxis((function(t,n){var r=i.get(t);r&&r[n]&&(e=!0)})),e}(t)&&(s(t),n=!0)}function s(t){o.set(t.uid,!0),r.push(t),t.eachTargetAxis((function(t,e){(i.get(t)||i.set(t,[]))[e]=!0}))}return r}function rz(t){var e=t.ecModel,n={infoList:[],infoMap:yt()};return t.eachTargetAxis((function(t,i){var r=e.getComponent(nz(t),i);if(r){var o=r.getCoordSysModel();if(o){var a=o.uid,s=n.infoMap.get(a);s||(s={model:o,axisModels:[]},n.infoList.push(s),n.infoMap.set(a,s)),s.axisModels.push(r)}}})),n}var oz=function(){function t(){this.indexList=[],this.indexMap=[]}return t.prototype.add=function(t){this.indexMap[t]||(this.indexList.push(t),this.indexMap[t]=!0)},t}(),az=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._autoThrottle=!0,n._noTarget=!0,n._rangePropMode=["percent","percent"],n}return n(e,t),e.prototype.init=function(t,e,n){var i=sz(t);this.settledOption=i,this.mergeDefaultAndTheme(t,n),this._doInit(i)},e.prototype.mergeOption=function(t){var e=sz(t);C(this.option,t,!0),C(this.settledOption,e,!0),this._doInit(e)},e.prototype._doInit=function(t){var e=this.option;this._setDefaultThrottle(t),this._updateRangeUse(t);var n=this.settledOption;E([["start","startValue"],["end","endValue"]],(function(t,i){"value"===this._rangePropMode[i]&&(e[t[0]]=n[t[0]]=null)}),this),this._resetTarget()},e.prototype._resetTarget=function(){var t=this.get("orient",!0),e=this._targetAxisInfoMap=yt();this._fillSpecifiedTargetAxis(e)?this._orient=t||this._makeAutoOrientByTargetAxis():(this._orient=t||"horizontal",this._fillAutoTargetAxisByOrient(e,this._orient)),this._noTarget=!0,e.each((function(t){t.indexList.length&&(this._noTarget=!1)}),this)},e.prototype._fillSpecifiedTargetAxis=function(t){var e=!1;return E(tz,(function(n){var i=this.getReferringComponents(nz(n),Ho);if(i.specified){e=!0;var r=new oz;E(i.models,(function(t){r.add(t.componentIndex)})),t.set(n,r)}}),this),e},e.prototype._fillAutoTargetAxisByOrient=function(t,e){var n=this.ecModel,i=!0;if(i){var r="vertical"===e?"y":"x";o(n.findComponents({mainType:r+"Axis"}),r)}i&&o(n.findComponents({mainType:"singleAxis",filter:function(t){return t.get("orient",!0)===e}}),"single");function o(e,n){var r=e[0];if(r){var o=new oz;if(o.add(r.componentIndex),t.set(n,o),i=!1,"x"===n||"y"===n){var a=r.getReferringComponents("grid",Wo).models[0];a&&E(e,(function(t){r.componentIndex!==t.componentIndex&&a===t.getReferringComponents("grid",Wo).models[0]&&o.add(t.componentIndex)}))}}}i&&E(tz,(function(e){if(i){var r=n.findComponents({mainType:nz(e),filter:function(t){return"category"===t.get("type",!0)}});if(r[0]){var o=new oz;o.add(r[0].componentIndex),t.set(e,o),i=!1}}}),this)},e.prototype._makeAutoOrientByTargetAxis=function(){var t;return this.eachTargetAxis((function(e){!t&&(t=e)}),this),"y"===t?"vertical":"horizontal"},e.prototype._setDefaultThrottle=function(t){if(t.hasOwnProperty("throttle")&&(this._autoThrottle=!1),this._autoThrottle){var e=this.ecModel.option;this.option.throttle=e.animation&&e.animationDurationUpdate>0?100:20}},e.prototype._updateRangeUse=function(t){var e=this._rangePropMode,n=this.get("rangeMode");E([["start","startValue"],["end","endValue"]],(function(i,r){var o=null!=t[i[0]],a=null!=t[i[1]];o&&!a?e[r]="percent":!o&&a?e[r]="value":n?e[r]=n[r]:o&&(e[r]="percent")}))},e.prototype.noTarget=function(){return this._noTarget},e.prototype.getFirstTargetAxisModel=function(){var t;return this.eachTargetAxis((function(e,n){null==t&&(t=this.ecModel.getComponent(nz(e),n))}),this),t},e.prototype.eachTargetAxis=function(t,e){this._targetAxisInfoMap.each((function(n,i){E(n.indexList,(function(n){t.call(e,i,n)}))}))},e.prototype.getAxisProxy=function(t,e){var n=this.getAxisModel(t,e);if(n)return n.__dzAxisProxy},e.prototype.getAxisModel=function(t,e){var n=this._targetAxisInfoMap.get(t);if(n&&n.indexMap[e])return this.ecModel.getComponent(nz(t),e)},e.prototype.setRawRange=function(t){var e=this.option,n=this.settledOption;E([["start","startValue"],["end","endValue"]],(function(i){null==t[i[0]]&&null==t[i[1]]||(e[i[0]]=n[i[0]]=t[i[0]],e[i[1]]=n[i[1]]=t[i[1]])}),this),this._updateRangeUse(t)},e.prototype.setCalculatedRange=function(t){var e=this.option;E(["start","startValue","end","endValue"],(function(n){e[n]=t[n]}))},e.prototype.getPercentRange=function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},e.prototype.getValueRange=function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var n=this.findRepresentativeAxisProxy();return n?n.getDataValueWindow():void 0},e.prototype.findRepresentativeAxisProxy=function(t){if(t)return t.__dzAxisProxy;for(var e,n=this._targetAxisInfoMap.keys(),i=0;i=0}(e)){var n=nz(this._dimName),i=e.getReferringComponents(n,Wo).models[0];i&&this._axisIndex===i.componentIndex&&t.push(e)}}),this),t},t.prototype.getAxisModel=function(){return this.ecModel.getComponent(this._dimName+"Axis",this._axisIndex)},t.prototype.getMinMaxSpan=function(){return T(this._minMaxSpan)},t.prototype.calculateDataWindow=function(t){var e,n=this._dataExtent,i=this.getAxisModel().axis.scale,r=this._dataZoomModel.getRangePropMode(),o=[0,100],a=[],s=[];cz(["start","end"],(function(l,u){var h=t[l],c=t[l+"Value"];"percent"===r[u]?(null==h&&(h=o[u]),c=i.parse(Kr(h,o,n))):(e=!0,h=Kr(c=null==c?n[u]:i.parse(c),n,o)),s[u]=null==c||isNaN(c)?n[u]:c,a[u]=null==h||isNaN(h)?o[u]:h})),pz(s),pz(a);var l=this._minMaxSpan;function u(t,e,n,r,o){var a=o?"Span":"ValueSpan";zk(0,t,n,"all",l["min"+a],l["max"+a]);for(var s=0;s<2;s++)e[s]=Kr(t[s],n,r,!0),o&&(e[s]=i.parse(e[s]))}return e?u(s,a,n,o,!1):u(a,s,o,n,!0),{valueWindow:s,percentWindow:a}},t.prototype.reset=function(t){if(t===this._dataZoomModel){var e=this.getTargetSeriesModels();this._dataExtent=function(t,e,n){var i=[1/0,-1/0];cz(n,(function(t){!function(t,e,n){e&&E(C_(e,n),(function(n){var i=e.getApproximateExtent(n);i[0]t[1]&&(t[1]=i[1])}))}(i,t.getData(),e)}));var r=t.getAxisModel(),o=v_(r.axis.scale,r,i).calculate();return[o.min,o.max]}(this,this._dimName,e),this._updateMinMaxSpan();var n=this.calculateDataWindow(t.settledOption);this._valueWindow=n.valueWindow,this._percentWindow=n.percentWindow,this._setAxisModel()}},t.prototype.filterData=function(t,e){if(t===this._dataZoomModel){var n=this._dimName,i=this.getTargetSeriesModels(),r=t.get("filterMode"),o=this._valueWindow;"none"!==r&&cz(i,(function(t){var e=t.getData(),i=e.mapDimensionsAll(n);if(i.length){if("weakFilter"===r){var a=e.getStore(),s=z(i,(function(t){return e.getDimensionIndex(t)}),e);e.filterSelf((function(t){for(var e,n,r,l=0;lo[1];if(h&&!c&&!p)return!0;h&&(r=!0),c&&(e=!0),p&&(n=!0)}return r&&e&&n}))}else cz(i,(function(n){if("empty"===r)t.setData(e=e.map(n,(function(t){return function(t){return t>=o[0]&&t<=o[1]}(t)?t:NaN})));else{var i={};i[n]=o,e.selectRange(i)}}));cz(i,(function(t){e.setApproximateExtent(o,t)}))}}))}},t.prototype._updateMinMaxSpan=function(){var t=this._minMaxSpan={},e=this._dataZoomModel,n=this._dataExtent;cz(["min","max"],(function(i){var r=e.get(i+"Span"),o=e.get(i+"ValueSpan");null!=o&&(o=this.getAxisModel().axis.scale.parse(o)),null!=o?r=Kr(n[0]+o,n,[0,100],!0):null!=r&&(o=Kr(r,[0,100],n,!0)-n[0]),t[i+"Span"]=r,t[i+"ValueSpan"]=o}),this)},t.prototype._setAxisModel=function(){var t=this.getAxisModel(),e=this._percentWindow,n=this._valueWindow;if(e){var i=no(n,[0,500]);i=Math.min(i,20);var r=t.axis.scale.rawExtentInfo;0!==e[0]&&r.setDeterminedMinMax("min",+n[0].toFixed(i)),100!==e[1]&&r.setDeterminedMinMax("max",+n[1].toFixed(i)),r.freeze()}},t}();var fz={getTargetSeries:function(t){function e(e){t.eachComponent("dataZoom",(function(n){n.eachTargetAxis((function(i,r){var o=t.getComponent(nz(i),r);e(i,r,o,n)}))}))}e((function(t,e,n,i){n.__dzAxisProxy=null}));var n=[];e((function(e,i,r,o){r.__dzAxisProxy||(r.__dzAxisProxy=new dz(e,i,o,t),n.push(r.__dzAxisProxy))}));var i=yt();return E(n,(function(t){E(t.getTargetSeriesModels(),(function(t){i.set(t.uid,t)}))})),i},overallReset:function(t,e){t.eachComponent("dataZoom",(function(t){t.eachTargetAxis((function(e,n){t.getAxisProxy(e,n).reset(t)})),t.eachTargetAxis((function(n,i){t.getAxisProxy(n,i).filterData(t,e)}))})),t.eachComponent("dataZoom",(function(t){var e=t.findRepresentativeAxisProxy();if(e){var n=e.getDataPercentWindow(),i=e.getDataValueWindow();t.setCalculatedRange({start:n[0],end:n[1],startValue:i[0],endValue:i[1]})}}))}};var gz=!1;function yz(t){gz||(gz=!0,t.registerProcessor(t.PRIORITY.PROCESSOR.FILTER,fz),function(t){t.registerAction("dataZoom",(function(t,e){E(iz(e,t),(function(e){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})}))}))}(t),t.registerSubTypeDefaulter("dataZoom",(function(){return"slider"})))}function vz(t){t.registerComponentModel(lz),t.registerComponentView(hz),yz(t)}var mz=function(){},xz={};function _z(t,e){xz[t]=e}function bz(t){return xz[t]}var wz=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.optionUpdated=function(){t.prototype.optionUpdated.apply(this,arguments);var e=this.ecModel;E(this.option.feature,(function(t,n){var i=bz(n);i&&(i.getDefaultOption&&(i.defaultOption=i.getDefaultOption(e)),C(t,i.defaultOption))}))},e.type="toolbox",e.layoutMode={type:"box",ignoreSize:!0},e.defaultOption={show:!0,z:6,orient:"horizontal",left:"right",top:"top",backgroundColor:"transparent",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemSize:15,itemGap:8,showTitle:!0,iconStyle:{borderColor:"#666",color:"none"},emphasis:{iconStyle:{borderColor:"#3E98C5"}},tooltip:{show:!1,position:"bottom"}},e}(zp);function Sz(t,e){var n=vp(e.get("padding")),i=e.getItemStyle(["color","opacity"]);return i.fill=e.get("backgroundColor"),t=new Ws({shape:{x:t.x-n[3],y:t.y-n[0],width:t.width+n[1]+n[3],height:t.height+n[0]+n[2],r:e.get("borderRadius")},style:i,silent:!0,z2:-1})}var Mz=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n,i){var r=this.group;if(r.removeAll(),t.get("show")){var o=+t.get("itemSize"),a="vertical"===t.get("orient"),s=t.get("feature")||{},l=this._features||(this._features={}),u=[];E(s,(function(t,e){u.push(e)})),new Gm(this._featureNames||[],u).add(h).update(h).remove(H(h,null)).execute(),this._featureNames=u,function(t,e,n){var i=e.getBoxLayoutParams(),r=e.get("padding"),o={width:n.getWidth(),height:n.getHeight()},a=kp(i,o,r);Ap(e.get("orient"),t,e.get("itemGap"),a.width,a.height),Lp(t,i,o,r)}(r,t,n),r.add(Sz(r.getBoundingRect(),t)),a||r.eachChild((function(t){var e=t.__title,i=t.ensureState("emphasis"),a=i.textConfig||(i.textConfig={}),s=t.getTextContent(),l=s&&s.ensureState("emphasis");if(l&&!X(l)&&e){var u=l.style||(l.style={}),h=Sr(e,Xs.makeFont(u)),c=t.x+r.x,p=!1;t.y+r.y+o+h.height>n.getHeight()&&(a.position="top",p=!0);var d=p?-5-h.height:o+10;c+h.width/2>n.getWidth()?(a.position=["100%",d],u.align="right"):c-h.width/2<0&&(a.position=[0,d],u.align="left")}}))}function h(h,c){var p,d=u[h],f=u[c],g=s[d],y=new Cc(g,t,t.ecModel);if(i&&null!=i.newTitle&&i.featureName===d&&(g.title=i.newTitle),d&&!f){if(function(t){return 0===t.indexOf("my")}(d))p={onclick:y.option.onclick,featureName:d};else{var v=bz(d);if(!v)return;p=new v}l[d]=p}else if(!(p=l[f]))return;p.uid=Ac("toolbox-feature"),p.model=y,p.ecModel=e,p.api=n;var m=p instanceof mz;d||!f?!y.get("show")||m&&p.unusable?m&&p.remove&&p.remove(e,n):(!function(i,s,l){var u,h,c=i.getModel("iconStyle"),p=i.getModel(["emphasis","iconStyle"]),d=s instanceof mz&&s.getIcons?s.getIcons():i.get("icon"),f=i.get("title")||{};U(d)?(u={})[l]=d:u=d;U(f)?(h={})[l]=f:h=f;var g=i.iconPaths={};E(u,(function(l,u){var d=Uh(l,{},{x:-o/2,y:-o/2,width:o,height:o});d.setStyle(c.getItemStyle()),d.ensureState("emphasis").style=p.getItemStyle();var f=new Xs({style:{text:h[u],align:p.get("textAlign"),borderRadius:p.get("textBorderRadius"),padding:p.get("textPadding"),fill:null,font:cc({fontStyle:p.get("textFontStyle"),fontFamily:p.get("textFontFamily"),fontSize:p.get("textFontSize"),fontWeight:p.get("textFontWeight")},e)},ignore:!0});d.setTextContent(f),Kh({el:d,componentModel:t,itemName:u,formatterParamsExtra:{title:h[u]}}),d.__title=h[u],d.on("mouseover",(function(){var e=p.getItemStyle(),i=a?null==t.get("right")&&"right"!==t.get("left")?"right":"left":null==t.get("bottom")&&"bottom"!==t.get("top")?"bottom":"top";f.setStyle({fill:p.get("textFill")||e.fill||e.stroke||"#000",backgroundColor:p.get("textBackgroundColor")}),d.setTextConfig({position:p.get("textPosition")||i}),f.ignore=!t.get("showTitle"),n.enterEmphasis(this)})).on("mouseout",(function(){"emphasis"!==i.get(["iconStatus",u])&&n.leaveEmphasis(this),f.hide()})),("emphasis"===i.get(["iconStatus",u])?Ol:Rl)(d),r.add(d),d.on("click",W(s.onclick,s,e,n,u)),g[u]=d}))}(y,p,d),y.setIconStatus=function(t,e){var n=this.option,i=this.iconPaths;n.iconStatus=n.iconStatus||{},n.iconStatus[t]=e,i[t]&&("emphasis"===e?Ol:Rl)(i[t])},p instanceof mz&&p.render&&p.render(y,e,n,i)):m&&p.dispose&&p.dispose(e,n)}},e.prototype.updateView=function(t,e,n,i){E(this._features,(function(t){t instanceof mz&&t.updateView&&t.updateView(t.model,e,n,i)}))},e.prototype.remove=function(t,e){E(this._features,(function(n){n instanceof mz&&n.remove&&n.remove(t,e)})),this.group.removeAll()},e.prototype.dispose=function(t,e){E(this._features,(function(n){n instanceof mz&&n.dispose&&n.dispose(t,e)}))},e.type="toolbox",e}(Ag);var Iz=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.onclick=function(t,e){var n=this.model,i=n.get("name")||t.get("title.0.text")||"echarts",o="svg"===e.getZr().painter.getType(),a=o?"svg":n.get("type",!0)||"png",s=e.getConnectedDataURL({type:a,backgroundColor:n.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",connectedBackgroundColor:n.get("connectedBackgroundColor"),excludeComponents:n.get("excludeComponents"),pixelRatio:n.get("pixelRatio")}),l=r.browser;if("function"!=typeof MouseEvent||!l.newEdge&&(l.ie||l.edge))if(window.navigator.msSaveOrOpenBlob||o){var u=s.split(","),h=u[0].indexOf("base64")>-1,c=o?decodeURIComponent(u[1]):u[1];h&&(c=window.atob(c));var p=i+"."+a;if(window.navigator.msSaveOrOpenBlob){for(var d=c.length,f=new Uint8Array(d);d--;)f[d]=c.charCodeAt(d);var g=new Blob([f]);window.navigator.msSaveOrOpenBlob(g,p)}else{var y=document.createElement("iframe");document.body.appendChild(y);var v=y.contentWindow,m=v.document;m.open("image/svg+xml","replace"),m.write(c),m.close(),v.focus(),m.execCommand("SaveAs",!0,p),document.body.removeChild(y)}}else{var x=n.get("lang"),_='',b=window.open();b.document.write(_),b.document.title=i}else{var w=document.createElement("a");w.download=i+"."+a,w.target="_blank",w.href=s;var S=new MouseEvent("click",{view:document.defaultView,bubbles:!0,cancelable:!1});w.dispatchEvent(S)}},e.getDefaultOption=function(t){return{show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:t.getLocaleModel().get(["toolbox","saveAsImage","title"]),type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],lang:t.getLocaleModel().get(["toolbox","saveAsImage","lang"])}},e}(mz),Tz="__ec_magicType_stack__",Cz=[["line","bar"],["stack"]],Dz=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getIcons=function(){var t=this.model,e=t.get("icon"),n={};return E(t.get("type"),(function(t){e[t]&&(n[t]=e[t])})),n},e.getDefaultOption=function(t){return{show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z"},title:t.getLocaleModel().get(["toolbox","magicType","title"]),option:{},seriesIndex:{}}},e.prototype.onclick=function(t,e,n){var i=this.model,r=i.get(["seriesIndex",n]);if(Az[n]){var o,a={series:[]};E(Cz,(function(t){P(t,n)>=0&&E(t,(function(t){i.setIconStatus(t,"normal")}))})),i.setIconStatus(n,"emphasis"),t.eachComponent({mainType:"series",query:null==r?null:{seriesIndex:r}},(function(t){var e=t.subType,r=t.id,o=Az[n](e,r,t,i);o&&(k(o,t.option),a.series.push(o));var s=t.coordinateSystem;if(s&&"cartesian2d"===s.type&&("line"===n||"bar"===n)){var l=s.getAxesByScale("ordinal")[0];if(l){var u=l.dim+"Axis",h=t.getReferringComponents(u,Wo).models[0].componentIndex;a[u]=a[u]||[];for(var c=0;c<=h;c++)a[u][h]=a[u][h]||{};a[u][h].boundaryGap="bar"===n}}}));var s=n;"stack"===n&&(o=C({stack:i.option.title.tiled,tiled:i.option.title.stack},i.option.title),"emphasis"!==i.get(["iconStatus",n])&&(s="tiled")),e.dispatchAction({type:"changeMagicType",currentType:s,newOption:a,newTitle:o,featureName:"magicType"})}},e}(mz),Az={line:function(t,e,n,i){if("bar"===t)return C({id:e,type:"line",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},i.get(["option","line"])||{},!0)},bar:function(t,e,n,i){if("line"===t)return C({id:e,type:"bar",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},i.get(["option","bar"])||{},!0)},stack:function(t,e,n,i){var r=n.get("stack")===Tz;if("line"===t||"bar"===t)return i.setIconStatus("stack",r?"normal":"emphasis"),C({id:e,stack:r?"":Tz},i.get(["option","stack"])||{},!0)}};Cm({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},(function(t,e){e.mergeOption(t.newOption)}));var kz=new Array(60).join("-"),Lz="\t";function Pz(t){return t.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}var Oz=new RegExp("[\t]+","g");function Rz(t,e){var n=t.split(new RegExp("\n*"+kz+"\n*","g")),i={series:[]};return E(n,(function(t,n){if(function(t){if(t.slice(0,t.indexOf("\n")).indexOf(Lz)>=0)return!0}(t)){var r=function(t){for(var e=t.split(/\n+/g),n=[],i=z(Pz(e.shift()).split(Oz),(function(t){return{name:t,data:[]}})),r=0;r=0)&&t(r,i._targetInfoList)}))}return t.prototype.setOutputRanges=function(t,e){return this.matchOutputRanges(t,e,(function(t,e,n){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var i=jz[t.brushType](0,n,e);t.__rangeOffset={offset:Kz[t.brushType](i.values,t.range,[1,1]),xyMinMax:i.xyMinMax}}})),t},t.prototype.matchOutputRanges=function(t,e,n){E(t,(function(t){var i=this.findTargetInfo(t,e);i&&!0!==i&&E(i.coordSyses,(function(i){var r=jz[t.brushType](1,i,t.range,!0);n(t,r.values,i,e)}))}),this)},t.prototype.setInputRanges=function(t,e){E(t,(function(t){var n,i,r,o,a,s=this.findTargetInfo(t,e);if(t.range=t.range||[],s&&!0!==s){t.panelId=s.panelId;var l=jz[t.brushType](0,s.coordSys,t.coordRange),u=t.__rangeOffset;t.range=u?Kz[t.brushType](l.values,u.offset,(n=l.xyMinMax,i=u.xyMinMax,r=Jz(n),o=Jz(i),a=[r[0]/o[0],r[1]/o[1]],isNaN(a[0])&&(a[0]=1),isNaN(a[1])&&(a[1]=1),a)):l.values}}),this)},t.prototype.makePanelOpts=function(t,e){return z(this._targetInfoList,(function(n){var i=n.getPanelRect();return{panelId:n.panelId,defaultBrushType:e?e(n):null,clipPath:BL(i),isTargetByCursor:GL(i,t,n.coordSysModel),getLinearBrushOtherExtent:FL(i)}}))},t.prototype.controlSeries=function(t,e,n){var i=this.findTargetInfo(t,n);return!0===i||i&&P(i.coordSyses,e.coordinateSystem)>=0},t.prototype.findTargetInfo=function(t,e){for(var n=this._targetInfoList,i=Yz(e,t),r=0;rt[1]&&t.reverse(),t}function Yz(t,e){return Fo(t,e,{includeMainTypes:Gz})}var Xz={grid:function(t,e){var n=t.xAxisModels,i=t.yAxisModels,r=t.gridModels,o=yt(),a={},s={};(n||i||r)&&(E(n,(function(t){var e=t.axis.grid.model;o.set(e.id,e),a[e.id]=!0})),E(i,(function(t){var e=t.axis.grid.model;o.set(e.id,e),s[e.id]=!0})),E(r,(function(t){o.set(t.id,t),a[t.id]=!0,s[t.id]=!0})),o.each((function(t){var r=t.coordinateSystem,o=[];E(r.getCartesians(),(function(t,e){(P(n,t.getAxis("x").model)>=0||P(i,t.getAxis("y").model)>=0)&&o.push(t)})),e.push({panelId:"grid--"+t.id,gridModel:t,coordSysModel:t,coordSys:o[0],coordSyses:o,getPanelRect:Zz.grid,xAxisDeclared:a[t.id],yAxisDeclared:s[t.id]})})))},geo:function(t,e){E(t.geoModels,(function(t){var n=t.coordinateSystem;e.push({panelId:"geo--"+t.id,geoModel:t,coordSysModel:t,coordSys:n,coordSyses:[n],getPanelRect:Zz.geo})}))}},Uz=[function(t,e){var n=t.xAxisModel,i=t.yAxisModel,r=t.gridModel;return!r&&n&&(r=n.axis.grid.model),!r&&i&&(r=i.axis.grid.model),r&&r===e.gridModel},function(t,e){var n=t.geoModel;return n&&n===e.geoModel}],Zz={grid:function(){return this.coordSys.master.getRect().clone()},geo:function(){var t=this.coordSys,e=t.getBoundingRect().clone();return e.applyTransform(Bh(t)),e}},jz={lineX:H(qz,0),lineY:H(qz,1),rect:function(t,e,n,i){var r=t?e.pointToData([n[0][0],n[1][0]],i):e.dataToPoint([n[0][0],n[1][0]],i),o=t?e.pointToData([n[0][1],n[1][1]],i):e.dataToPoint([n[0][1],n[1][1]],i),a=[Hz([r[0],o[0]]),Hz([r[1],o[1]])];return{values:a,xyMinMax:a}},polygon:function(t,e,n,i){var r=[[1/0,-1/0],[1/0,-1/0]];return{values:z(n,(function(n){var o=t?e.pointToData(n,i):e.dataToPoint(n,i);return r[0][0]=Math.min(r[0][0],o[0]),r[1][0]=Math.min(r[1][0],o[1]),r[0][1]=Math.max(r[0][1],o[0]),r[1][1]=Math.max(r[1][1],o[1]),o})),xyMinMax:r}}};function qz(t,e,n,i){var r=n.getAxis(["x","y"][t]),o=Hz(z([0,1],(function(t){return e?r.coordToData(r.toLocalCoord(i[t]),!0):r.toGlobalCoord(r.dataToCoord(i[t]))}))),a=[];return a[t]=o,a[1-t]=[NaN,NaN],{values:o,xyMinMax:a}}var Kz={lineX:H($z,0),lineY:H($z,1),rect:function(t,e,n){return[[t[0][0]-n[0]*e[0][0],t[0][1]-n[0]*e[0][1]],[t[1][0]-n[1]*e[1][0],t[1][1]-n[1]*e[1][1]]]},polygon:function(t,e,n){return z(t,(function(t,i){return[t[0]-n[0]*e[i][0],t[1]-n[1]*e[i][1]]}))}};function $z(t,e,n,i){return[e[0]-i[t]*n[0],e[1]-i[t]*n[1]]}function Jz(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}var Qz,tV,eV=E,nV=Io+"toolbox-dataZoom_",iV=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n,i){this._brushController||(this._brushController=new lL(n.getZr()),this._brushController.on("brush",W(this._onBrush,this)).mount()),function(t,e,n,i,r){var o=n._isZoomActive;i&&"takeGlobalCursor"===i.type&&(o="dataZoomSelect"===i.key&&i.dataZoomSelectActive);n._isZoomActive=o,t.setIconStatus("zoom",o?"emphasis":"normal");var a=new Wz(oV(t),e,{include:["grid"]}),s=a.makePanelOpts(r,(function(t){return t.xAxisDeclared&&!t.yAxisDeclared?"lineX":!t.xAxisDeclared&&t.yAxisDeclared?"lineY":"rect"}));n._brushController.setPanels(s).enableBrush(!(!o||!s.length)&&{brushType:"auto",brushStyle:t.getModel("brushStyle").getItemStyle()})}(t,e,this,i,n),function(t,e){t.setIconStatus("back",function(t){return Bz(t).length}(e)>1?"emphasis":"normal")}(t,e)},e.prototype.onclick=function(t,e,n){rV[n].call(this)},e.prototype.remove=function(t,e){this._brushController&&this._brushController.unmount()},e.prototype.dispose=function(t,e){this._brushController&&this._brushController.dispose()},e.prototype._onBrush=function(t){var e=t.areas;if(t.isEnd&&e.length){var n={},i=this.ecModel;this._brushController.updateCovers([]),new Wz(oV(this.model),i,{include:["grid"]}).matchOutputRanges(e,i,(function(t,e,n){if("cartesian2d"===n.type){var i=t.brushType;"rect"===i?(r("x",n,e[0]),r("y",n,e[1])):r({lineX:"x",lineY:"y"}[i],n,e)}})),function(t,e){var n=Bz(t);zz(e,(function(e,i){for(var r=n.length-1;r>=0&&!n[r][i];r--);if(r<0){var o=t.queryComponents({mainType:"dataZoom",subType:"select",id:i})[0];if(o){var a=o.getPercentRange();n[0][i]={dataZoomId:i,start:a[0],end:a[1]}}}})),n.push(e)}(i,n),this._dispatchZoomAction(n)}function r(t,e,r){var o=e.getAxis(t),a=o.model,s=function(t,e,n){var i;return n.eachComponent({mainType:"dataZoom",subType:"select"},(function(n){n.getAxisModel(t,e.componentIndex)&&(i=n)})),i}(t,a,i),l=s.findRepresentativeAxisProxy(a).getMinMaxSpan();null==l.minValueSpan&&null==l.maxValueSpan||(r=zk(0,r.slice(),o.scale.getExtent(),0,l.minValueSpan,l.maxValueSpan)),s&&(n[s.id]={dataZoomId:s.id,startValue:r[0],endValue:r[1]})}},e.prototype._dispatchZoomAction=function(t){var e=[];eV(t,(function(t,n){e.push(T(t))})),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},e.getDefaultOption=function(t){return{show:!0,filterMode:"filter",icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:t.getLocaleModel().get(["toolbox","dataZoom","title"]),brushStyle:{borderWidth:0,color:"rgba(210,219,238,0.2)"}}},e}(mz),rV={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(function(t){var e=Bz(t),n=e[e.length-1];e.length>1&&e.pop();var i={};return zz(n,(function(t,n){for(var r=e.length-1;r>=0;r--)if(t=e[r][n]){i[n]=t;break}})),i}(this.ecModel))}};function oV(t){var e={xAxisIndex:t.get("xAxisIndex",!0),yAxisIndex:t.get("yAxisIndex",!0),xAxisId:t.get("xAxisId",!0),yAxisId:t.get("yAxisId",!0)};return null==e.xAxisIndex&&null==e.xAxisId&&(e.xAxisIndex="all"),null==e.yAxisIndex&&null==e.yAxisId&&(e.yAxisIndex="all"),e}Qz="dataZoom",tV=function(t){var e=t.getComponent("toolbox",0),n=["feature","dataZoom"];if(e&&null!=e.get(n)){var i=e.getModel(n),r=[],o=Fo(t,oV(i));return eV(o.xAxisModels,(function(t){return a(t,"xAxis","xAxisIndex")})),eV(o.yAxisModels,(function(t){return a(t,"yAxis","yAxisIndex")})),r}function a(t,e,n){var o=t.componentIndex,a={type:"select",$fromToolbox:!0,filterMode:i.get("filterMode",!0)||"filter",id:nV+e+o};a[n]=o,r.push(a)}},lt(null==od.get(Qz)&&tV),od.set(Qz,tV);var aV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="tooltip",e.dependencies=["axisPointer"],e.defaultOption={z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:null,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"#fff",shadowBlur:10,shadowColor:"rgba(0, 0, 0, .2)",shadowOffsetX:1,shadowOffsetY:2,borderRadius:4,borderWidth:1,padding:null,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#666",fontSize:14}},e}(zp);function sV(t){var e=t.get("confine");return null!=e?!!e:"richText"===t.get("renderMode")}function lV(t){if(r.domSupported)for(var e=document.documentElement.style,n=0,i=t.length;n-1?(u+="top:50%",h+="translateY(-50%) rotate("+(a="left"===s?-225:-45)+"deg)"):(u+="left:50%",h+="translateX(-50%) rotate("+(a="top"===s?225:45)+"deg)");var c=a*Math.PI/180,p=l+r,d=p*Math.abs(Math.cos(c))+p*Math.abs(Math.sin(c)),f=e+" solid "+r+"px;";return'
                '}(n,i,r)),U(t))o.innerHTML=t+a;else if(t){o.innerHTML="",Y(t)||(t=[t]);for(var s=0;s=0?this._tryShow(n,i):"leave"===e&&this._hide(i))}),this))},e.prototype._keepShow=function(){var t=this._tooltipModel,e=this._ecModel,n=this._api,i=t.get("triggerOn");if(null!=this._lastX&&null!=this._lastY&&"none"!==i&&"click"!==i){var r=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout((function(){!n.isDisposed()&&r.manuallyShowTip(t,e,n,{x:r._lastX,y:r._lastY,dataByCoordSys:r._lastDataByCoordSys})}))}},e.prototype.manuallyShowTip=function(t,e,n,i){if(i.from!==this.uid&&!r.node&&n.getDom()){var o=IV(i,n);this._ticket="";var a=i.dataByCoordSys,s=function(t,e,n){var i=Go(t).queryOptionMap,r=i.keys()[0];if(!r||"series"===r)return;var o=Yo(e,r,i.get(r),{useDefault:!1,enableAll:!1,enableNone:!1}),a=o.models[0];if(!a)return;var s,l=n.getViewOfComponentModel(a);if(l.group.traverse((function(e){var n=rl(e).tooltipConfig;if(n&&n.name===t.name)return s=e,!0})),s)return{componentMainType:r,componentIndex:a.componentIndex,el:s}}(i,e,n);if(s){var l=s.el.getBoundingRect().clone();l.applyTransform(s.el.transform),this._tryShow({offsetX:l.x+l.width/2,offsetY:l.y+l.height/2,target:s.el,position:i.position,positionDefault:"bottom"},o)}else if(i.tooltip&&null!=i.x&&null!=i.y){var u=wV;u.x=i.x,u.y=i.y,u.update(),rl(u).tooltipConfig={name:null,option:i.tooltip},this._tryShow({offsetX:i.x,offsetY:i.y,target:u},o)}else if(a)this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,dataByCoordSys:a,tooltipOption:i.tooltipOption},o);else if(null!=i.seriesIndex){if(this._manuallyAxisShowTip(t,e,n,i))return;var h=PN(i,e),c=h.point[0],p=h.point[1];null!=c&&null!=p&&this._tryShow({offsetX:c,offsetY:p,target:h.el,position:i.position,positionDefault:"bottom"},o)}else null!=i.x&&null!=i.y&&(n.dispatchAction({type:"updateAxisPointer",x:i.x,y:i.y}),this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,target:n.getZr().findHover(i.x,i.y).target},o))}},e.prototype.manuallyHideTip=function(t,e,n,i){var r=this._tooltipContent;this._tooltipModel&&r.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=this._lastDataByCoordSys=null,i.from!==this.uid&&this._hide(IV(i,n))},e.prototype._manuallyAxisShowTip=function(t,e,n,i){var r=i.seriesIndex,o=i.dataIndex,a=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=r&&null!=o&&null!=a){var s=e.getSeriesByIndex(r);if(s)if("axis"===MV([s.getData().getItemModel(o),s,(s.coordinateSystem||{}).model],this._tooltipModel).get("trigger"))return n.dispatchAction({type:"updateAxisPointer",seriesIndex:r,dataIndex:o,position:i.position}),!0}},e.prototype._tryShow=function(t,e){var n=t.target;if(this._tooltipModel){this._lastX=t.offsetX,this._lastY=t.offsetY;var i=t.dataByCoordSys;if(i&&i.length)this._showAxisTooltip(i,t);else if(n){var r,o;if("legend"===rl(n).ssrType)return;this._lastDataByCoordSys=null,Oy(n,(function(t){return null!=rl(t).dataIndex?(r=t,!0):null!=rl(t).tooltipConfig?(o=t,!0):void 0}),!0),r?this._showSeriesItemTooltip(t,r,e):o?this._showComponentItemTooltip(t,o,e):this._hide(e)}else this._lastDataByCoordSys=null,this._hide(e)}},e.prototype._showOrMove=function(t,e){var n=t.get("showDelay");e=W(e,this),clearTimeout(this._showTimout),n>0?this._showTimout=setTimeout(e,n):e()},e.prototype._showAxisTooltip=function(t,e){var n=this._ecModel,i=this._tooltipModel,r=[e.offsetX,e.offsetY],o=MV([e.tooltipOption],i),a=this._renderMode,s=[],l=og("section",{blocks:[],noHeader:!0}),u=[],h=new yg;E(t,(function(t){E(t.dataByAxis,(function(t){var e=n.getComponent(t.axisDim+"Axis",t.axisIndex),r=t.value;if(e&&null!=r){var o=fN(r,e.axis,n,t.seriesDataIndices,t.valueLabelOpt),c=og("section",{header:o,noHeader:!ut(o),sortBlocks:!0,blocks:[]});l.blocks.push(c),E(t.seriesDataIndices,(function(l){var p=n.getSeriesByIndex(l.seriesIndex),d=l.dataIndexInside,f=p.getDataParams(d);if(!(f.dataIndex<0)){f.axisDim=t.axisDim,f.axisIndex=t.axisIndex,f.axisType=t.axisType,f.axisId=t.axisId,f.axisValue=S_(e.axis,{value:r}),f.axisValueLabel=o,f.marker=h.makeTooltipMarker("item",Sp(f.color),a);var g=bf(p.formatTooltip(d,!0,null)),y=g.frag;if(y){var v=MV([p],i).get("valueFormatter");c.blocks.push(v?A({valueFormatter:v},y):y)}g.text&&u.push(g.text),s.push(f)}}))}}))})),l.blocks.reverse(),u.reverse();var c=e.position,p=o.get("order"),d=cg(l,h,a,p,n.get("useUTC"),o.get("textStyle"));d&&u.unshift(d);var f="richText"===a?"\n\n":"
                ",g=u.join(f);this._showOrMove(o,(function(){this._updateContentNotChangedOnAxis(t,s)?this._updatePosition(o,c,r[0],r[1],this._tooltipContent,s):this._showTooltipContent(o,g,s,Math.random()+"",r[0],r[1],c,null,h)}))},e.prototype._showSeriesItemTooltip=function(t,e,n){var i=this._ecModel,r=rl(e),o=r.seriesIndex,a=i.getSeriesByIndex(o),s=r.dataModel||a,l=r.dataIndex,u=r.dataType,h=s.getData(u),c=this._renderMode,p=t.positionDefault,d=MV([h.getItemModel(l),s,a&&(a.coordinateSystem||{}).model],this._tooltipModel,p?{position:p}:null),f=d.get("trigger");if(null==f||"item"===f){var g=s.getDataParams(l,u),y=new yg;g.marker=y.makeTooltipMarker("item",Sp(g.color),c);var v=bf(s.formatTooltip(l,!1,u)),m=d.get("order"),x=d.get("valueFormatter"),_=v.frag,b=_?cg(x?A({valueFormatter:x},_):_,y,c,m,i.get("useUTC"),d.get("textStyle")):v.text,w="item_"+s.name+"_"+l;this._showOrMove(d,(function(){this._showTooltipContent(d,b,g,w,t.offsetX,t.offsetY,t.position,t.target,y)})),n({type:"showTip",dataIndexInside:l,dataIndex:h.getRawIndex(l),seriesIndex:o,from:this.uid})}},e.prototype._showComponentItemTooltip=function(t,e,n){var i="html"===this._renderMode,r=rl(e),o=r.tooltipConfig.option||{},a=o.encodeHTMLContent;if(U(o)){o={content:o,formatter:o},a=!0}a&&i&&o.content&&((o=T(o)).content=re(o.content));var s=[o],l=this._ecModel.getComponent(r.componentMainType,r.componentIndex);l&&s.push(l),s.push({formatter:o.content});var u=t.positionDefault,h=MV(s,this._tooltipModel,u?{position:u}:null),c=h.get("content"),p=Math.random()+"",d=new yg;this._showOrMove(h,(function(){var n=T(h.get("formatterParams")||{});this._showTooltipContent(h,c,n,p,t.offsetX,t.offsetY,t.position,e,d)})),n({type:"showTip",from:this.uid})},e.prototype._showTooltipContent=function(t,e,n,i,r,o,a,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var u=this._tooltipContent;u.setEnterable(t.get("enterable"));var h=t.get("formatter");a=a||t.get("position");var c=e,p=this._getNearestPoint([r,o],n,t.get("trigger"),t.get("borderColor")).color;if(h)if(U(h)){var d=t.ecModel.get("useUTC"),f=Y(n)?n[0]:n;c=h,f&&f.axisType&&f.axisType.indexOf("time")>=0&&(c=Jc(f.axisValue,c,d)),c=bp(c,n,!0)}else if(X(h)){var g=W((function(e,i){e===this._ticket&&(u.setContent(i,l,t,p,a),this._updatePosition(t,a,r,o,u,n,s))}),this);this._ticket=i,c=h(n,i,g)}else c=h;u.setContent(c,l,t,p,a),u.show(t,p),this._updatePosition(t,a,r,o,u,n,s)}},e.prototype._getNearestPoint=function(t,e,n,i){return"axis"===n||Y(e)?{color:i||("html"===this._renderMode?"#fff":"none")}:Y(e)?void 0:{color:i||e.color||e.borderColor}},e.prototype._updatePosition=function(t,e,n,i,r,o,a){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get("position");var u=r.getSize(),h=t.get("align"),c=t.get("verticalAlign"),p=a&&a.getBoundingRect().clone();if(a&&p.applyTransform(a.transform),X(e)&&(e=e([n,i],o,r.el,p,{viewSize:[s,l],contentSize:u.slice()})),Y(e))n=$r(e[0],s),i=$r(e[1],l);else if(q(e)){var d=e;d.width=u[0],d.height=u[1];var f=kp(d,{width:s,height:l});n=f.x,i=f.y,h=null,c=null}else if(U(e)&&a){var g=function(t,e,n,i){var r=n[0],o=n[1],a=Math.ceil(Math.SQRT2*i)+8,s=0,l=0,u=e.width,h=e.height;switch(t){case"inside":s=e.x+u/2-r/2,l=e.y+h/2-o/2;break;case"top":s=e.x+u/2-r/2,l=e.y-o-a;break;case"bottom":s=e.x+u/2-r/2,l=e.y+h+a;break;case"left":s=e.x-r-a,l=e.y+h/2-o/2;break;case"right":s=e.x+u+a,l=e.y+h/2-o/2}return[s,l]}(e,p,u,t.get("borderWidth"));n=g[0],i=g[1]}else{g=function(t,e,n,i,r,o,a){var s=n.getSize(),l=s[0],u=s[1];null!=o&&(t+l+o+2>i?t-=l+o:t+=o);null!=a&&(e+u+a>r?e-=u+a:e+=a);return[t,e]}(n,i,r,s,l,h?null:20,c?null:20);n=g[0],i=g[1]}if(h&&(n-=TV(h)?u[0]/2:"right"===h?u[0]:0),c&&(i-=TV(c)?u[1]/2:"bottom"===c?u[1]:0),sV(t)){g=function(t,e,n,i,r){var o=n.getSize(),a=o[0],s=o[1];return t=Math.min(t+a,i)-a,e=Math.min(e+s,r)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}(n,i,r,s,l);n=g[0],i=g[1]}r.moveTo(n,i)},e.prototype._updateContentNotChangedOnAxis=function(t,e){var n=this._lastDataByCoordSys,i=this._cbParamsList,r=!!n&&n.length===t.length;return r&&E(n,(function(n,o){var a=n.dataByAxis||[],s=(t[o]||{}).dataByAxis||[];(r=r&&a.length===s.length)&&E(a,(function(t,n){var o=s[n]||{},a=t.seriesDataIndices||[],l=o.seriesDataIndices||[];(r=r&&t.value===o.value&&t.axisType===o.axisType&&t.axisId===o.axisId&&a.length===l.length)&&E(a,(function(t,e){var n=l[e];r=r&&t.seriesIndex===n.seriesIndex&&t.dataIndex===n.dataIndex})),i&&E(t.seriesDataIndices,(function(t){var n=t.seriesIndex,o=e[n],a=i[n];o&&a&&a.data!==o.data&&(r=!1)}))}))})),this._lastDataByCoordSys=t,this._cbParamsList=e,!!r},e.prototype._hide=function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},e.prototype.dispose=function(t,e){!r.node&&e.getDom()&&(Yg(this,"_updatePosition"),this._tooltipContent.dispose(),kN("itemTooltip",e))},e.type="tooltip",e}(Ag);function MV(t,e,n){var i,r=e.ecModel;n?(i=new Cc(n,r,r),i=new Cc(e.option,i,r)):i=e;for(var o=t.length-1;o>=0;o--){var a=t[o];a&&(a instanceof Cc&&(a=a.get("tooltip",!0)),U(a)&&(a={formatter:a}),a&&(i=new Cc(a,i,r)))}return i}function IV(t,e){return t.dispatchAction||W(e.dispatchAction,e)}function TV(t){return"center"===t||"middle"===t}var CV=["rect","polygon","keep","clear"];function DV(t,e){var n=To(t?t.brush:[]);if(n.length){var i=[];E(n,(function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(i=i.concat(e))}));var r=t&&t.toolbox;Y(r)&&(r=r[0]),r||(r={feature:{}},t.toolbox=[r]);var o=r.feature||(r.feature={}),a=o.brush||(o.brush={}),s=a.type||(a.type=[]);s.push.apply(s,i),function(t){var e={};E(t,(function(t){e[t]=1})),t.length=0,E(e,(function(e,n){t.push(n)}))}(s),e&&!s.length&&s.push.apply(s,CV)}}var AV=E;function kV(t){if(t)for(var e in t)if(t.hasOwnProperty(e))return!0}function LV(t,e,n){var i={};return AV(e,(function(e){var r,o=i[e]=((r=function(){}).prototype.__hidden=r.prototype,new r);AV(t[e],(function(t,i){if(kD.isValidType(i)){var r={type:i,visual:t};n&&n(r,e),o[i]=new kD(r),"opacity"===i&&((r=T(r)).type="colorAlpha",o.__hidden.__alphaForOpacity=new kD(r))}}))})),i}function PV(t,e,n){var i;E(n,(function(t){e.hasOwnProperty(t)&&kV(e[t])&&(i=!0)})),i&&E(n,(function(n){e.hasOwnProperty(n)&&kV(e[n])?t[n]=T(e[n]):delete t[n]}))}var OV={lineX:RV(0),lineY:RV(1),rect:{point:function(t,e,n){return t&&n.boundingRect.contain(t[0],t[1])},rect:function(t,e,n){return t&&n.boundingRect.intersect(t)}},polygon:{point:function(t,e,n){return t&&n.boundingRect.contain(t[0],t[1])&&P_(n.range,t[0],t[1])},rect:function(t,e,n){var i=n.range;if(!t||i.length<=1)return!1;var r=t.x,o=t.y,a=t.width,s=t.height,l=i[0];return!!(P_(i,r,o)||P_(i,r+a,o)||P_(i,r,o+s)||P_(i,r+a,o+s)||ze.create(t).contain(l[0],l[1])||Zh(r,o,r+a,o,i)||Zh(r,o,r,o+s,i)||Zh(r+a,o,r+a,o+s,i)||Zh(r,o+s,r+a,o+s,i))||void 0}}};function RV(t){var e=["x","y"],n=["width","height"];return{point:function(e,n,i){if(e){var r=i.range;return NV(e[t],r)}},rect:function(i,r,o){if(i){var a=o.range,s=[i[e[t]],i[e[t]]+i[n[t]]];return s[1]e[0][1]&&(e[0][1]=o[0]),o[1]e[1][1]&&(e[1][1]=o[1])}return e&&YV(e)}};function YV(t){return new ze(t[0][0],t[1][0],t[0][1]-t[0][0],t[1][1]-t[1][0])}var XV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new lL(e.getZr())).on("brush",W(this._onBrush,this)).mount()},e.prototype.render=function(t,e,n,i){this.model=t,this._updateController(t,e,n,i)},e.prototype.updateTransform=function(t,e,n,i){BV(e),this._updateController(t,e,n,i)},e.prototype.updateVisual=function(t,e,n,i){this.updateTransform(t,e,n,i)},e.prototype.updateView=function(t,e,n,i){this._updateController(t,e,n,i)},e.prototype._updateController=function(t,e,n,i){(!i||i.$from!==t.id)&&this._brushController.setPanels(t.brushTargetManager.makePanelOpts(n)).enableBrush(t.brushOption).updateCovers(t.areas.slice())},e.prototype.dispose=function(){this._brushController.dispose()},e.prototype._onBrush=function(t){var e=this.model.id,n=this.model.brushTargetManager.setOutputRanges(t.areas,this.ecModel);(!t.isEnd||t.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:e,areas:T(n),$from:e}),t.isEnd&&this.api.dispatchAction({type:"brushEnd",brushId:e,areas:T(n),$from:e})},e.type="brush",e}(Ag),UV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.areas=[],n.brushOption={},n}return n(e,t),e.prototype.optionUpdated=function(t,e){var n=this.option;!e&&PV(n,t,["inBrush","outOfBrush"]);var i=n.inBrush=n.inBrush||{};n.outOfBrush=n.outOfBrush||{color:"#ddd"},i.hasOwnProperty("liftZ")||(i.liftZ=5)},e.prototype.setAreas=function(t){t&&(this.areas=z(t,(function(t){return ZV(this.option,t)}),this))},e.prototype.setBrushOption=function(t){this.brushOption=ZV(this.option,t),this.brushType=this.brushOption.brushType},e.type="brush",e.dependencies=["geo","grid","xAxis","yAxis","parallel","series"],e.defaultOption={seriesIndex:"all",brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(210,219,238,0.3)",borderColor:"#D2DBEE"},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4},e}(zp);function ZV(t,e){return C({brushType:t.brushType,brushMode:t.brushMode,transformable:t.transformable,brushStyle:new Cc(t.brushStyle).getItemStyle(),removeOnClick:t.removeOnClick,z:t.z},e,!0)}var jV=["rect","polygon","lineX","lineY","keep","clear"],qV=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n){var i,r,o;e.eachComponent({mainType:"brush"},(function(t){i=t.brushType,r=t.brushOption.brushMode||"single",o=o||!!t.areas.length})),this._brushType=i,this._brushMode=r,E(t.get("type",!0),(function(e){t.setIconStatus(e,("keep"===e?"multiple"===r:"clear"===e?o:e===i)?"emphasis":"normal")}))},e.prototype.updateView=function(t,e,n){this.render(t,e,n)},e.prototype.getIcons=function(){var t=this.model,e=t.get("icon",!0),n={};return E(t.get("type",!0),(function(t){e[t]&&(n[t]=e[t])})),n},e.prototype.onclick=function(t,e,n){var i=this._brushType,r=this._brushMode;"clear"===n?(e.dispatchAction({type:"axisAreaSelect",intervals:[]}),e.dispatchAction({type:"brush",command:"clear",areas:[]})):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===n?i:i!==n&&n,brushMode:"keep"===n?"multiple"===r?"single":"multiple":r}})},e.getDefaultOption=function(t){return{show:!0,type:jV.slice(),icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:t.getLocaleModel().get(["toolbox","brush","title"])}},e}(mz);var KV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.layoutMode={type:"box",ignoreSize:!0},n}return n(e,t),e.type="title",e.defaultOption={z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bold",color:"#464646"},subtextStyle:{fontSize:12,color:"#6E7079"}},e}(zp),$V=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){if(this.group.removeAll(),t.get("show")){var i=this.group,r=t.getModel("textStyle"),o=t.getModel("subtextStyle"),a=t.get("textAlign"),s=rt(t.get("textBaseline"),t.get("textVerticalAlign")),l=new Xs({style:oc(r,{text:t.get("text"),fill:r.getTextColor()},{disableBox:!0}),z2:10}),u=l.getBoundingRect(),h=t.get("subtext"),c=new Xs({style:oc(o,{text:h,fill:o.getTextColor(),y:u.height+t.get("itemGap"),verticalAlign:"top"},{disableBox:!0}),z2:10}),p=t.get("link"),d=t.get("sublink"),f=t.get("triggerEvent",!0);l.silent=!p&&!f,c.silent=!d&&!f,p&&l.on("click",(function(){Mp(p,"_"+t.get("target"))})),d&&c.on("click",(function(){Mp(d,"_"+t.get("subtarget"))})),rl(l).eventData=rl(c).eventData=f?{componentType:"title",componentIndex:t.componentIndex}:null,i.add(l),h&&i.add(c);var g=i.getBoundingRect(),y=t.getBoxLayoutParams();y.width=g.width,y.height=g.height;var v=kp(y,{width:n.getWidth(),height:n.getHeight()},t.get("padding"));a||("middle"===(a=t.get("left")||t.get("right"))&&(a="center"),"right"===a?v.x+=v.width:"center"===a&&(v.x+=v.width/2)),s||("center"===(s=t.get("top")||t.get("bottom"))&&(s="middle"),"bottom"===s?v.y+=v.height:"middle"===s&&(v.y+=v.height/2),s=s||"top"),i.x=v.x,i.y=v.y,i.markRedraw();var m={align:a,verticalAlign:s};l.setStyle(m),c.setStyle(m),g=i.getBoundingRect();var x=v.margin,_=t.getItemStyle(["color","opacity"]);_.fill=t.get("backgroundColor");var b=new Ws({shape:{x:g.x-x[3],y:g.y-x[0],width:g.width+x[1]+x[3],height:g.height+x[0]+x[2],r:t.get("borderRadius")},style:_,subPixelOptimize:!0,silent:!0});i.add(b)}},e.type="title",e}(Ag);var JV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.layoutMode="box",n}return n(e,t),e.prototype.init=function(t,e,n){this.mergeDefaultAndTheme(t,n),this._initData()},e.prototype.mergeOption=function(e){t.prototype.mergeOption.apply(this,arguments),this._initData()},e.prototype.setCurrentIndex=function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(t>=e&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},e.prototype.getCurrentIndex=function(){return this.option.currentIndex},e.prototype.isIndexMax=function(){return this.getCurrentIndex()>=this._data.count()-1},e.prototype.setPlayState=function(t){this.option.autoPlay=!!t},e.prototype.getPlayState=function(){return!!this.option.autoPlay},e.prototype._initData=function(){var t,e=this.option,n=e.data||[],i=e.axisType,r=this._names=[];"category"===i?(t=[],E(n,(function(e,n){var i,o=Ro(Ao(e),"");q(e)?(i=T(e)).value=n:i=n,t.push(i),r.push(o)}))):t=n;var o={category:"ordinal",time:"time",value:"number"}[i]||"number";(this._data=new cx([{name:"value",type:o}],this)).initData(t,r)},e.prototype.getData=function(){return this._data},e.prototype.getCategories=function(){if("category"===this.get("axisType"))return this._names.slice()},e.type="timeline",e.defaultOption={z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:5,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{},label:{color:"#000"},data:[]},e}(zp),QV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="timeline.slider",e.defaultOption=kc(JV.defaultOption,{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"circle",symbolSize:12,lineStyle:{show:!0,width:2,color:"#DAE1F5"},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:"#A4B1D7"},itemStyle:{color:"#A4B1D7",borderWidth:1},checkpointStyle:{symbol:"circle",symbolSize:15,color:"#316bf3",borderColor:"#fff",borderWidth:2,shadowBlur:2,shadowOffsetX:1,shadowOffsetY:1,shadowColor:"rgba(0, 0, 0, 0.3)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:24,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"M2,18.5A1.52,1.52,0,0,1,.92,18a1.49,1.49,0,0,1,0-2.12L7.81,9.36,1,3.11A1.5,1.5,0,1,1,3,.89l8,7.34a1.48,1.48,0,0,1,.49,1.09,1.51,1.51,0,0,1-.46,1.1L3,18.08A1.5,1.5,0,0,1,2,18.5Z",prevIcon:"M10,.5A1.52,1.52,0,0,1,11.08,1a1.49,1.49,0,0,1,0,2.12L4.19,9.64,11,15.89a1.5,1.5,0,1,1-2,2.22L1,10.77A1.48,1.48,0,0,1,.5,9.68,1.51,1.51,0,0,1,1,8.58L9,.92A1.5,1.5,0,0,1,10,.5Z",prevBtnSize:18,nextBtnSize:18,color:"#A4B1D7",borderColor:"#A4B1D7",borderWidth:1},emphasis:{label:{show:!0,color:"#6f778d"},itemStyle:{color:"#316BF3"},controlStyle:{color:"#316BF3",borderColor:"#316BF3",borderWidth:2}},progress:{lineStyle:{color:"#316BF3"},itemStyle:{color:"#316BF3"},label:{color:"#6f778d"}},data:[]}),e}(JV);R(QV,_f.prototype);var tB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="timeline",e}(Ag),eB=function(t){function e(e,n,i,r){var o=t.call(this,e,n,i)||this;return o.type=r||"value",o}return n(e,t),e.prototype.getLabelModel=function(){return this.model.getModel("label")},e.prototype.isHorizontal=function(){return"horizontal"===this.model.get("orient")},e}(ab),nB=Math.PI,iB=Vo(),rB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(t,e){this.api=e},e.prototype.render=function(t,e,n){if(this.model=t,this.api=n,this.ecModel=e,this.group.removeAll(),t.get("show",!0)){var i=this._layout(t,n),r=this._createGroup("_mainGroup"),o=this._createGroup("_labelGroup"),a=this._axis=this._createAxis(i,t);t.formatTooltip=function(t){return og("nameValue",{noName:!0,value:a.scale.getLabel({value:t})})},E(["AxisLine","AxisTick","Control","CurrentPointer"],(function(e){this["_render"+e](i,r,a,t)}),this),this._renderAxisLabel(i,o,a,t),this._position(i,t)}this._doPlayStop(),this._updateTicksStatus()},e.prototype.remove=function(){this._clearTimer(),this.group.removeAll()},e.prototype.dispose=function(){this._clearTimer()},e.prototype._layout=function(t,e){var n,i,r,o,a=t.get(["label","position"]),s=t.get("orient"),l=function(t,e){return kp(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()},t.get("padding"))}(t,e),u={horizontal:"center",vertical:(n=null==a||"auto"===a?"horizontal"===s?l.y+l.height/2=0||"+"===n?"left":"right"},h={horizontal:n>=0||"+"===n?"top":"bottom",vertical:"middle"},c={horizontal:0,vertical:nB/2},p="vertical"===s?l.height:l.width,d=t.getModel("controlStyle"),f=d.get("show",!0),g=f?d.get("itemSize"):0,y=f?d.get("itemGap"):0,v=g+y,m=t.get(["label","rotate"])||0;m=m*nB/180;var x=d.get("position",!0),_=f&&d.get("showPlayBtn",!0),b=f&&d.get("showPrevBtn",!0),w=f&&d.get("showNextBtn",!0),S=0,M=p;"left"===x||"bottom"===x?(_&&(i=[0,0],S+=v),b&&(r=[S,0],S+=v),w&&(o=[M-g,0],M-=v)):(_&&(i=[M-g,0],M-=v),b&&(r=[0,0],S+=v),w&&(o=[M-g,0],M-=v));var I=[S,M];return t.get("inverse")&&I.reverse(),{viewRect:l,mainLength:p,orient:s,rotation:c[s],labelRotation:m,labelPosOpt:n,labelAlign:t.get(["label","align"])||u[s],labelBaseline:t.get(["label","verticalAlign"])||t.get(["label","baseline"])||h[s],playPosition:i,prevBtnPosition:r,nextBtnPosition:o,axisExtent:I,controlSize:g,controlGap:y}},e.prototype._position=function(t,e){var n=this._mainGroup,i=this._labelGroup,r=t.viewRect;if("vertical"===t.orient){var o=[1,0,0,1,0,0],a=r.x,s=r.y+r.height;we(o,o,[-a,-s]),Se(o,o,-nB/2),we(o,o,[a,s]),(r=r.clone()).applyTransform(o)}var l=y(r),u=y(n.getBoundingRect()),h=y(i.getBoundingRect()),c=[n.x,n.y],p=[i.x,i.y];p[0]=c[0]=l[0][0];var d,f=t.labelPosOpt;null==f||U(f)?(v(c,u,l,1,d="+"===f?0:1),v(p,h,l,1,1-d)):(v(c,u,l,1,d=f>=0?0:1),p[1]=c[1]+f);function g(t){t.originX=l[0][0]-t.x,t.originY=l[1][0]-t.y}function y(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function v(t,e,n,i,r){t[i]+=n[i][r]-e[i][r]}n.setPosition(c),i.setPosition(p),n.rotation=i.rotation=t.rotation,g(n),g(i)},e.prototype._createAxis=function(t,e){var n=e.getData(),i=e.get("axisType"),r=function(t,e){if(e=e||t.get("type"),e)switch(e){case"category":return new Rx({ordinalMeta:t.getCategories(),extent:[1/0,-1/0]});case"time":return new Kx({locale:t.ecModel.getLocaleModel(),useUTC:t.ecModel.get("useUTC")});default:return new Ex}}(e,i);r.getTicks=function(){return n.mapArray(["value"],(function(t){return{value:t}}))};var o=n.getDataExtent("value");r.setExtent(o[0],o[1]),r.calcNiceTicks();var a=new eB("value",r,t.axisExtent,i);return a.model=e,a},e.prototype._createGroup=function(t){var e=this[t]=new Br;return this.group.add(e),e},e.prototype._renderAxisLine=function(t,e,n,i){var r=n.getExtent();if(i.get(["lineStyle","show"])){var o=new Ku({shape:{x1:r[0],y1:0,x2:r[1],y2:0},style:A({lineCap:"round"},i.getModel("lineStyle").getLineStyle()),silent:!0,z2:1});e.add(o);var a=this._progressLine=new Ku({shape:{x1:r[0],x2:this._currentPointer?this._currentPointer.x:r[0],y1:0,y2:0},style:k({lineCap:"round",lineWidth:o.style.lineWidth},i.getModel(["progress","lineStyle"]).getLineStyle()),silent:!0,z2:1});e.add(a)}},e.prototype._renderAxisTick=function(t,e,n,i){var r=this,o=i.getData(),a=n.scale.getTicks();this._tickSymbols=[],E(a,(function(t){var a=n.dataToCoord(t.value),s=o.getItemModel(t.value),l=s.getModel("itemStyle"),u=s.getModel(["emphasis","itemStyle"]),h=s.getModel(["progress","itemStyle"]),c={x:a,y:0,onclick:W(r._changeTimeline,r,t.value)},p=oB(s,l,e,c);p.ensureState("emphasis").style=u.getItemStyle(),p.ensureState("progress").style=h.getItemStyle(),Ul(p);var d=rl(p);s.get("tooltip")?(d.dataIndex=t.value,d.dataModel=i):d.dataIndex=d.dataModel=null,r._tickSymbols.push(p)}))},e.prototype._renderAxisLabel=function(t,e,n,i){var r=this;if(n.getLabelModel().get("show")){var o=i.getData(),a=n.getViewLabels();this._tickLabels=[],E(a,(function(i){var a=i.tickValue,s=o.getItemModel(a),l=s.getModel("label"),u=s.getModel(["emphasis","label"]),h=s.getModel(["progress","label"]),c=n.dataToCoord(i.tickValue),p=new Xs({x:c,y:0,rotation:t.labelRotation-t.rotation,onclick:W(r._changeTimeline,r,a),silent:!1,style:oc(l,{text:i.formattedLabel,align:t.labelAlign,verticalAlign:t.labelBaseline})});p.ensureState("emphasis").style=oc(u),p.ensureState("progress").style=oc(h),e.add(p),Ul(p),iB(p).dataIndex=a,r._tickLabels.push(p)}))}},e.prototype._renderControl=function(t,e,n,i){var r=t.controlSize,o=t.rotation,a=i.getModel("controlStyle").getItemStyle(),s=i.getModel(["emphasis","controlStyle"]).getItemStyle(),l=i.getPlayState(),u=i.get("inverse",!0);function h(t,n,l,u){if(t){var h=Cr(rt(i.get(["controlStyle",n+"BtnSize"]),r),r),c=function(t,e,n,i){var r=i.style,o=Uh(t.get(["controlStyle",e]),i||{},new ze(n[0],n[1],n[2],n[3]));r&&o.setStyle(r);return o}(i,n+"Icon",[0,-h/2,h,h],{x:t[0],y:t[1],originX:r/2,originY:0,rotation:u?-o:0,rectHover:!0,style:a,onclick:l});c.ensureState("emphasis").style=s,e.add(c),Ul(c)}}h(t.nextBtnPosition,"next",W(this._changeTimeline,this,u?"-":"+")),h(t.prevBtnPosition,"prev",W(this._changeTimeline,this,u?"+":"-")),h(t.playPosition,l?"stop":"play",W(this._handlePlayClick,this,!l),!0)},e.prototype._renderCurrentPointer=function(t,e,n,i){var r=i.getData(),o=i.getCurrentIndex(),a=r.getItemModel(o).getModel("checkpointStyle"),s=this,l={onCreate:function(t){t.draggable=!0,t.drift=W(s._handlePointerDrag,s),t.ondragend=W(s._handlePointerDragend,s),aB(t,s._progressLine,o,n,i,!0)},onUpdate:function(t){aB(t,s._progressLine,o,n,i)}};this._currentPointer=oB(a,a,this._mainGroup,{},this._currentPointer,l)},e.prototype._handlePlayClick=function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},e.prototype._handlePointerDrag=function(t,e,n){this._clearTimer(),this._pointerChangeTimeline([n.offsetX,n.offsetY])},e.prototype._handlePointerDragend=function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},e.prototype._pointerChangeTimeline=function(t,e){var n=this._toAxisCoord(t)[0],i=Qr(this._axis.getExtent().slice());n>i[1]&&(n=i[1]),n=0&&(a[o]=+a[o].toFixed(c)),[a,h]}var vB={min:H(yB,"min"),max:H(yB,"max"),average:H(yB,"average"),median:H(yB,"median")};function mB(t,e){if(e){var n=t.getData(),i=t.coordinateSystem,r=i&&i.dimensions;if(!function(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}(e)&&!Y(e.coord)&&Y(r)){var o=xB(e,n,i,t);if((e=T(e)).type&&vB[e.type]&&o.baseAxis&&o.valueAxis){var a=P(r,o.baseAxis.dim),s=P(r,o.valueAxis.dim),l=vB[e.type](n,o.baseDataDim,o.valueDataDim,a,s);e.coord=l[0],e.value=l[1]}else e.coord=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis]}if(null!=e.coord&&Y(r))for(var u=e.coord,h=0;h<2;h++)vB[u[h]]&&(u[h]=wB(n,n.mapDimension(r[h]),u[h]));else e.coord=[];return e}}function xB(t,e,n,i){var r={};return null!=t.valueIndex||null!=t.valueDim?(r.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,r.valueAxis=n.getAxis(function(t,e){var n=t.getData().getDimensionInfo(e);return n&&n.coordDim}(i,r.valueDataDim)),r.baseAxis=n.getOtherAxis(r.valueAxis),r.baseDataDim=e.mapDimension(r.baseAxis.dim)):(r.baseAxis=i.getBaseAxis(),r.valueAxis=n.getOtherAxis(r.baseAxis),r.baseDataDim=e.mapDimension(r.baseAxis.dim),r.valueDataDim=e.mapDimension(r.valueAxis.dim)),r}function _B(t,e){return!(t&&t.containData&&e.coord&&!gB(e))||t.containData(e.coord)}function bB(t,e){return t?function(t,n,i,r){return If(r<2?t.coord&&t.coord[r]:t.value,e[r])}:function(t,n,i,r){return If(t.value,e[r])}}function wB(t,e,n){if("average"===n){var i=0,r=0;return t.each(e,(function(t,e){isNaN(t)||(i+=t,r++)})),i/r}return"median"===n?t.getMedian(e):t.getDataExtent(e)["max"===n?1:0]}var SB=Vo(),MB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(){this.markerGroupMap=yt()},e.prototype.render=function(t,e,n){var i=this,r=this.markerGroupMap;r.each((function(t){SB(t).keep=!1})),e.eachSeries((function(t){var r=dB.getMarkerModelFromSeries(t,i.type);r&&i.renderSeries(t,r,e,n)})),r.each((function(t){!SB(t).keep&&i.group.remove(t.group)}))},e.prototype.markKeep=function(t){SB(t).keep=!0},e.prototype.toggleBlurSeries=function(t,e){var n=this;E(t,(function(t){var i=dB.getMarkerModelFromSeries(t,n.type);i&&i.getData().eachItemGraphicEl((function(t){t&&(e?Nl(t):El(t))}))}))},e.type="marker",e}(Ag);function IB(t,e,n){var i=e.coordinateSystem;t.each((function(r){var o,a=t.getItemModel(r),s=$r(a.get("x"),n.getWidth()),l=$r(a.get("y"),n.getHeight());if(isNaN(s)||isNaN(l)){if(e.getMarkerPosition)o=e.getMarkerPosition(t.getValues(t.dimensions,r));else if(i){var u=t.get(i.dimensions[0],r),h=t.get(i.dimensions[1],r);o=i.dataToPoint([u,h])}}else o=[s,l];isNaN(s)||(o[0]=s),isNaN(l)||(o[1]=l),t.setItemLayout(r,o)}))}var TB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=dB.getMarkerModelFromSeries(t,"markPoint");e&&(IB(e.getData(),t,n),this.markerGroupMap.get(t.id).updateLayout())}),this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,new xS),u=function(t,e,n){var i;i=t?z(t&&t.dimensions,(function(t){return A(A({},e.getData().getDimensionInfo(e.getData().mapDimension(t))||{}),{name:t,ordinalMeta:null})})):[{name:"value",type:"float"}];var r=new cx(i,n),o=z(n.get("data"),H(mB,e));t&&(o=B(o,H(_B,t)));var a=bB(!!t,i);return r.initData(o,null,a),r}(r,t,e);e.setData(u),IB(e.getData(),t,i),u.each((function(t){var n=u.getItemModel(t),i=n.getShallow("symbol"),r=n.getShallow("symbolSize"),o=n.getShallow("symbolRotate"),s=n.getShallow("symbolOffset"),l=n.getShallow("symbolKeepAspect");if(X(i)||X(r)||X(o)||X(s)){var h=e.getRawValue(t),c=e.getDataParams(t);X(i)&&(i=i(h,c)),X(r)&&(r=r(h,c)),X(o)&&(o=o(h,c)),X(s)&&(s=s(h,c))}var p=n.getModel("itemStyle").getItemStyle(),d=Ay(a,"color");p.fill||(p.fill=d),u.setItemVisual(t,{symbol:i,symbolSize:r,symbolRotate:o,symbolOffset:s,symbolKeepAspect:l,style:p})})),l.updateData(u),this.group.add(l.group),u.eachItemGraphicEl((function(t){t.traverse((function(t){rl(t).dataModel=e}))})),this.markKeep(l),l.group.silent=e.get("silent")||t.get("silent")},e.type="markPoint",e}(MB);var CB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.createMarkerModelFromSeries=function(t,n,i){return new e(t,n,i)},e.type="markLine",e.defaultOption={z:5,symbol:["circle","arrow"],symbolSize:[8,16],symbolOffset:0,precision:2,tooltip:{trigger:"item"},label:{show:!0,position:"end",distance:5},lineStyle:{type:"dashed"},emphasis:{label:{show:!0},lineStyle:{width:3}},animationEasing:"linear"},e}(dB),DB=Vo(),AB=function(t,e,n,i){var r,o=t.getData();if(Y(i))r=i;else{var a=i.type;if("min"===a||"max"===a||"average"===a||"median"===a||null!=i.xAxis||null!=i.yAxis){var s=void 0,l=void 0;if(null!=i.yAxis||null!=i.xAxis)s=e.getAxis(null!=i.yAxis?"y":"x"),l=it(i.yAxis,i.xAxis);else{var u=xB(i,o,e,t);s=u.valueAxis,l=wB(o,xx(o,u.valueDataDim),a)}var h="x"===s.dim?0:1,c=1-h,p=T(i),d={coord:[]};p.type=null,p.coord=[],p.coord[c]=-1/0,d.coord[c]=1/0;var f=n.get("precision");f>=0&&j(l)&&(l=+l.toFixed(Math.min(f,20))),p.coord[h]=d.coord[h]=l,r=[p,d,{type:a,valueIndex:i.valueIndex,value:l}]}else r=[]}var g=[mB(t,r[0]),mB(t,r[1]),A({},r[2])];return g[2].type=g[2].type||null,C(g[2],g[0]),C(g[2],g[1]),g};function kB(t){return!isNaN(t)&&!isFinite(t)}function LB(t,e,n,i){var r=1-t,o=i.dimensions[t];return kB(e[r])&&kB(n[r])&&e[t]===n[t]&&i.getAxis(o).containData(e[t])}function PB(t,e){if("cartesian2d"===t.type){var n=e[0].coord,i=e[1].coord;if(n&&i&&(LB(1,n,i,t)||LB(0,n,i,t)))return!0}return _B(t,e[0])&&_B(t,e[1])}function OB(t,e,n,i,r){var o,a=i.coordinateSystem,s=t.getItemModel(e),l=$r(s.get("x"),r.getWidth()),u=$r(s.get("y"),r.getHeight());if(isNaN(l)||isNaN(u)){if(i.getMarkerPosition)o=i.getMarkerPosition(t.getValues(t.dimensions,e));else{var h=a.dimensions,c=t.get(h[0],e),p=t.get(h[1],e);o=a.dataToPoint([c,p])}if(OS(a,"cartesian2d")){var d=a.getAxis("x"),f=a.getAxis("y");h=a.dimensions;kB(t.get(h[0],e))?o[0]=d.toGlobalCoord(d.getExtent()[n?0:1]):kB(t.get(h[1],e))&&(o[1]=f.toGlobalCoord(f.getExtent()[n?0:1]))}isNaN(l)||(o[0]=l),isNaN(u)||(o[1]=u)}else o=[l,u];t.setItemLayout(e,o)}var RB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=dB.getMarkerModelFromSeries(t,"markLine");if(e){var i=e.getData(),r=DB(e).from,o=DB(e).to;r.each((function(e){OB(r,e,!0,t,n),OB(o,e,!1,t,n)})),i.each((function(t){i.setItemLayout(t,[r.getItemLayout(t),o.getItemLayout(t)])})),this.markerGroupMap.get(t.id).updateLayout()}}),this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,new YA);this.group.add(l.group);var u=function(t,e,n){var i;i=t?z(t&&t.dimensions,(function(t){return A(A({},e.getData().getDimensionInfo(e.getData().mapDimension(t))||{}),{name:t,ordinalMeta:null})})):[{name:"value",type:"float"}];var r=new cx(i,n),o=new cx(i,n),a=new cx([],n),s=z(n.get("data"),H(AB,e,t,n));t&&(s=B(s,H(PB,t)));var l=bB(!!t,i);return r.initData(z(s,(function(t){return t[0]})),null,l),o.initData(z(s,(function(t){return t[1]})),null,l),a.initData(z(s,(function(t){return t[2]}))),a.hasItemOption=!0,{from:r,to:o,line:a}}(r,t,e),h=u.from,c=u.to,p=u.line;DB(e).from=h,DB(e).to=c,e.setData(p);var d=e.get("symbol"),f=e.get("symbolSize"),g=e.get("symbolRotate"),y=e.get("symbolOffset");function v(e,n,r){var o=e.getItemModel(n);OB(e,n,r,t,i);var s=o.getModel("itemStyle").getItemStyle();null==s.fill&&(s.fill=Ay(a,"color")),e.setItemVisual(n,{symbolKeepAspect:o.get("symbolKeepAspect"),symbolOffset:rt(o.get("symbolOffset",!0),y[r?0:1]),symbolRotate:rt(o.get("symbolRotate",!0),g[r?0:1]),symbolSize:rt(o.get("symbolSize"),f[r?0:1]),symbol:rt(o.get("symbol",!0),d[r?0:1]),style:s})}Y(d)||(d=[d,d]),Y(f)||(f=[f,f]),Y(g)||(g=[g,g]),Y(y)||(y=[y,y]),u.from.each((function(t){v(h,t,!0),v(c,t,!1)})),p.each((function(t){var e=p.getItemModel(t).getModel("lineStyle").getLineStyle();p.setItemLayout(t,[h.getItemLayout(t),c.getItemLayout(t)]),null==e.stroke&&(e.stroke=h.getItemVisual(t,"style").fill),p.setItemVisual(t,{fromSymbolKeepAspect:h.getItemVisual(t,"symbolKeepAspect"),fromSymbolOffset:h.getItemVisual(t,"symbolOffset"),fromSymbolRotate:h.getItemVisual(t,"symbolRotate"),fromSymbolSize:h.getItemVisual(t,"symbolSize"),fromSymbol:h.getItemVisual(t,"symbol"),toSymbolKeepAspect:c.getItemVisual(t,"symbolKeepAspect"),toSymbolOffset:c.getItemVisual(t,"symbolOffset"),toSymbolRotate:c.getItemVisual(t,"symbolRotate"),toSymbolSize:c.getItemVisual(t,"symbolSize"),toSymbol:c.getItemVisual(t,"symbol"),style:e})})),l.updateData(p),u.line.eachItemGraphicEl((function(t){rl(t).dataModel=e,t.traverse((function(t){rl(t).dataModel=e}))})),this.markKeep(l),l.group.silent=e.get("silent")||t.get("silent")},e.type="markLine",e}(MB);var NB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.createMarkerModelFromSeries=function(t,n,i){return new e(t,n,i)},e.type="markArea",e.defaultOption={z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}},e}(dB),EB=Vo(),zB=function(t,e,n,i){var r=i[0],o=i[1];if(r&&o){var a=mB(t,r),s=mB(t,o),l=a.coord,u=s.coord;l[0]=it(l[0],-1/0),l[1]=it(l[1],-1/0),u[0]=it(u[0],1/0),u[1]=it(u[1],1/0);var h=D([{},a,s]);return h.coord=[a.coord,s.coord],h.x0=a.x,h.y0=a.y,h.x1=s.x,h.y1=s.y,h}};function VB(t){return!isNaN(t)&&!isFinite(t)}function BB(t,e,n,i){var r=1-t;return VB(e[r])&&VB(n[r])}function FB(t,e){var n=e.coord[0],i=e.coord[1],r={coord:n,x:e.x0,y:e.y0},o={coord:i,x:e.x1,y:e.y1};return OS(t,"cartesian2d")?!(!n||!i||!BB(1,n,i)&&!BB(0,n,i))||function(t,e,n){return!(t&&t.containZone&&e.coord&&n.coord&&!gB(e)&&!gB(n))||t.containZone(e.coord,n.coord)}(t,r,o):_B(t,r)||_B(t,o)}function GB(t,e,n,i,r){var o,a=i.coordinateSystem,s=t.getItemModel(e),l=$r(s.get(n[0]),r.getWidth()),u=$r(s.get(n[1]),r.getHeight());if(isNaN(l)||isNaN(u)){if(i.getMarkerPosition){var h=t.getValues(["x0","y0"],e),c=t.getValues(["x1","y1"],e),p=a.clampData(h),d=a.clampData(c),f=[];"x0"===n[0]?f[0]=p[0]>d[0]?c[0]:h[0]:f[0]=p[0]>d[0]?h[0]:c[0],"y0"===n[1]?f[1]=p[1]>d[1]?c[1]:h[1]:f[1]=p[1]>d[1]?h[1]:c[1],o=i.getMarkerPosition(f,n,!0)}else{var g=[m=t.get(n[0],e),x=t.get(n[1],e)];a.clampData&&a.clampData(g,g),o=a.dataToPoint(g,!0)}if(OS(a,"cartesian2d")){var y=a.getAxis("x"),v=a.getAxis("y"),m=t.get(n[0],e),x=t.get(n[1],e);VB(m)?o[0]=y.toGlobalCoord(y.getExtent()["x0"===n[0]?0:1]):VB(x)&&(o[1]=v.toGlobalCoord(v.getExtent()["y0"===n[1]?0:1]))}isNaN(l)||(o[0]=l),isNaN(u)||(o[1]=u)}else o=[l,u];return o}var WB=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]],HB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=dB.getMarkerModelFromSeries(t,"markArea");if(e){var i=e.getData();i.each((function(e){var r=z(WB,(function(r){return GB(i,e,r,t,n)}));i.setItemLayout(e,r),i.getItemGraphicEl(e).setShape("points",r)}))}}),this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,{group:new Br});this.group.add(l.group),this.markKeep(l);var u=function(t,e,n){var i,r,o=["x0","y0","x1","y1"];if(t){var a=z(t&&t.dimensions,(function(t){var n=e.getData();return A(A({},n.getDimensionInfo(n.mapDimension(t))||{}),{name:t,ordinalMeta:null})}));r=z(o,(function(t,e){return{name:t,type:a[e%2].type}})),i=new cx(r,n)}else i=new cx(r=[{name:"value",type:"float"}],n);var s=z(n.get("data"),H(zB,e,t,n));t&&(s=B(s,H(FB,t)));var l=t?function(t,e,n,i){return If(t.coord[Math.floor(i/2)][i%2],r[i])}:function(t,e,n,i){return If(t.value,r[i])};return i.initData(s,null,l),i.hasItemOption=!0,i}(r,t,e);e.setData(u),u.each((function(e){var n=z(WB,(function(n){return GB(u,e,n,t,i)})),o=r.getAxis("x").scale,s=r.getAxis("y").scale,l=o.getExtent(),h=s.getExtent(),c=[o.parse(u.get("x0",e)),o.parse(u.get("x1",e))],p=[s.parse(u.get("y0",e)),s.parse(u.get("y1",e))];Qr(c),Qr(p);var d=!!(l[0]>c[1]||l[1]p[1]||h[1]=0},e.prototype.getOrient=function(){return"vertical"===this.get("orient")?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},e.type="legend.plain",e.dependencies=["series"],e.defaultOption={z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,symbolRotate:"inherit",symbolKeepAspect:!0,inactiveColor:"#ccc",inactiveBorderColor:"#ccc",inactiveBorderWidth:"auto",itemStyle:{color:"inherit",opacity:"inherit",borderColor:"inherit",borderWidth:"auto",borderCap:"inherit",borderJoin:"inherit",borderDashOffset:"inherit",borderMiterLimit:"inherit"},lineStyle:{width:"auto",color:"inherit",inactiveColor:"#ccc",inactiveWidth:2,opacity:"inherit",type:"inherit",cap:"inherit",join:"inherit",dashOffset:"inherit",miterLimit:"inherit"},textStyle:{color:"#333"},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:"sans-serif",color:"#666",borderWidth:1,borderColor:"#666"},emphasis:{selectorLabel:{show:!0,color:"#eee",backgroundColor:"#666"}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1}},e}(zp),XB=H,UB=E,ZB=Br,jB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.newlineDisabled=!1,n}return n(e,t),e.prototype.init=function(){this.group.add(this._contentGroup=new ZB),this.group.add(this._selectorGroup=new ZB),this._isFirstRender=!0},e.prototype.getContentGroup=function(){return this._contentGroup},e.prototype.getSelectorGroup=function(){return this._selectorGroup},e.prototype.render=function(t,e,n){var i=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),t.get("show",!0)){var r=t.get("align"),o=t.get("orient");r&&"auto"!==r||(r="right"===t.get("left")&&"vertical"===o?"right":"left");var a=t.get("selector",!0),s=t.get("selectorPosition",!0);!a||s&&"auto"!==s||(s="horizontal"===o?"end":"start"),this.renderInner(r,t,e,n,a,o,s);var l=t.getBoxLayoutParams(),u={width:n.getWidth(),height:n.getHeight()},h=t.get("padding"),c=kp(l,u,h),p=this.layoutInner(t,r,c,i,a,s),d=kp(k({width:p.width,height:p.height},l),u,h);this.group.x=d.x-p.x,this.group.y=d.y-p.y,this.group.markRedraw(),this.group.add(this._backgroundEl=Sz(p,t))}},e.prototype.resetInner=function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl),this.getSelectorGroup().removeAll()},e.prototype.renderInner=function(t,e,n,i,r,o,a){var s=this.getContentGroup(),l=yt(),u=e.get("selectedMode"),h=[];n.eachRawSeries((function(t){!t.get("legendHoverLink")&&h.push(t.id)})),UB(e.getData(),(function(r,o){var a=r.get("name");if(!this.newlineDisabled&&(""===a||"\n"===a)){var c=new ZB;return c.newline=!0,void s.add(c)}var p=n.getSeriesByName(a)[0];if(!l.get(a)){if(p){var d=p.getData(),f=d.getVisual("legendLineStyle")||{},g=d.getVisual("legendIcon"),y=d.getVisual("style"),v=this._createItem(p,a,o,r,e,t,f,y,g,u,i);v.on("click",XB(qB,a,null,i,h)).on("mouseover",XB($B,p.name,null,i,h)).on("mouseout",XB(JB,p.name,null,i,h)),n.ssr&&v.eachChild((function(t){var e=rl(t);e.seriesIndex=p.seriesIndex,e.dataIndex=o,e.ssrType="legend"})),l.set(a,!0)}else n.eachRawSeries((function(s){if(!l.get(a)&&s.legendVisualProvider){var c=s.legendVisualProvider;if(!c.containName(a))return;var p=c.indexOfName(a),d=c.getItemVisual(p,"style"),f=c.getItemVisual(p,"legendIcon"),g=qn(d.fill);g&&0===g[3]&&(g[3]=.2,d=A(A({},d),{fill:ri(g,"rgba")}));var y=this._createItem(s,a,o,r,e,t,{},d,f,u,i);y.on("click",XB(qB,null,a,i,h)).on("mouseover",XB($B,null,a,i,h)).on("mouseout",XB(JB,null,a,i,h)),n.ssr&&y.eachChild((function(t){var e=rl(t);e.seriesIndex=s.seriesIndex,e.dataIndex=o,e.ssrType="legend"})),l.set(a,!0)}}),this);0}}),this),r&&this._createSelector(r,e,i,o,a)},e.prototype._createSelector=function(t,e,n,i,r){var o=this.getSelectorGroup();UB(t,(function(t){var i=t.type,r=new Xs({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){n.dispatchAction({type:"all"===i?"legendAllSelect":"legendInverseSelect"})}});o.add(r),ic(r,{normal:e.getModel("selectorLabel"),emphasis:e.getModel(["emphasis","selectorLabel"])},{defaultText:t.title}),Ul(r)}))},e.prototype._createItem=function(t,e,n,i,r,o,a,s,l,u,h){var c=t.visualDrawType,p=r.get("itemWidth"),d=r.get("itemHeight"),f=r.isSelected(e),g=i.get("symbolRotate"),y=i.get("symbolKeepAspect"),v=i.get("icon"),m=function(t,e,n,i,r,o,a){function s(t,e){"auto"===t.lineWidth&&(t.lineWidth=e.lineWidth>0?2:0),UB(t,(function(n,i){"inherit"===t[i]&&(t[i]=e[i])}))}var l=e.getModel("itemStyle"),u=l.getItemStyle(),h=0===t.lastIndexOf("empty",0)?"fill":"stroke",c=l.getShallow("decal");u.decal=c&&"inherit"!==c?mv(c,a):i.decal,"inherit"===u.fill&&(u.fill=i[r]);"inherit"===u.stroke&&(u.stroke=i[h]);"inherit"===u.opacity&&(u.opacity=("fill"===r?i:n).opacity);s(u,i);var p=e.getModel("lineStyle"),d=p.getLineStyle();if(s(d,n),"auto"===u.fill&&(u.fill=i.fill),"auto"===u.stroke&&(u.stroke=i.fill),"auto"===d.stroke&&(d.stroke=i.fill),!o){var f=e.get("inactiveBorderWidth"),g=u[h];u.lineWidth="auto"===f?i.lineWidth>0&&g?2:0:u.lineWidth,u.fill=e.get("inactiveColor"),u.stroke=e.get("inactiveBorderColor"),d.stroke=p.get("inactiveColor"),d.lineWidth=p.get("inactiveWidth")}return{itemStyle:u,lineStyle:d}}(l=v||l||"roundRect",i,a,s,c,f,h),x=new ZB,_=i.getModel("textStyle");if(!X(t.getLegendIcon)||v&&"inherit"!==v){var b="inherit"===v&&t.getData().getVisual("symbol")?"inherit"===g?t.getData().getVisual("symbolRotate"):g:0;x.add(function(t){var e=t.icon||"roundRect",n=Xy(e,0,0,t.itemWidth,t.itemHeight,t.itemStyle.fill,t.symbolKeepAspect);n.setStyle(t.itemStyle),n.rotation=(t.iconRotate||0)*Math.PI/180,n.setOrigin([t.itemWidth/2,t.itemHeight/2]),e.indexOf("empty")>-1&&(n.style.stroke=n.style.fill,n.style.fill="#fff",n.style.lineWidth=2);return n}({itemWidth:p,itemHeight:d,icon:l,iconRotate:b,itemStyle:m.itemStyle,lineStyle:m.lineStyle,symbolKeepAspect:y}))}else x.add(t.getLegendIcon({itemWidth:p,itemHeight:d,icon:l,iconRotate:g,itemStyle:m.itemStyle,lineStyle:m.lineStyle,symbolKeepAspect:y}));var w="left"===o?p+5:-5,S=o,M=r.get("formatter"),I=e;U(M)&&M?I=M.replace("{name}",null!=e?e:""):X(M)&&(I=M(e));var T=f?_.getTextColor():i.get("inactiveColor");x.add(new Xs({style:oc(_,{text:I,x:w,y:d/2,fill:T,align:S,verticalAlign:"middle"},{inheritColor:T})}));var C=new Ws({shape:x.getBoundingRect(),style:{fill:"transparent"}}),D=i.getModel("tooltip");return D.get("show")&&Kh({el:C,componentModel:r,itemName:e,itemTooltipOption:D.option}),x.add(C),x.eachChild((function(t){t.silent=!0})),C.silent=!u,this.getContentGroup().add(x),Ul(x),x.__legendDataIndex=n,x},e.prototype.layoutInner=function(t,e,n,i,r,o){var a=this.getContentGroup(),s=this.getSelectorGroup();Ap(t.get("orient"),a,t.get("itemGap"),n.width,n.height);var l=a.getBoundingRect(),u=[-l.x,-l.y];if(s.markRedraw(),a.markRedraw(),r){Ap("horizontal",s,t.get("selectorItemGap",!0));var h=s.getBoundingRect(),c=[-h.x,-h.y],p=t.get("selectorButtonGap",!0),d=t.getOrient().index,f=0===d?"width":"height",g=0===d?"height":"width",y=0===d?"y":"x";"end"===o?c[d]+=l[f]+p:u[d]+=h[f]+p,c[1-d]+=l[g]/2-h[g]/2,s.x=c[0],s.y=c[1],a.x=u[0],a.y=u[1];var v={x:0,y:0};return v[f]=l[f]+p+h[f],v[g]=Math.max(l[g],h[g]),v[y]=Math.min(0,h[y]+c[1-d]),v}return a.x=u[0],a.y=u[1],this.group.getBoundingRect()},e.prototype.remove=function(){this.getContentGroup().removeAll(),this._isFirstRender=!0},e.type="legend.plain",e}(Ag);function qB(t,e,n,i){JB(t,e,n,i),n.dispatchAction({type:"legendToggleSelect",name:null!=t?t:e}),$B(t,e,n,i)}function KB(t){for(var e,n=t.getZr().storage.getDisplayList(),i=0,r=n.length;in[r],f=[-c.x,-c.y];e||(f[i]=l[s]);var g=[0,0],y=[-p.x,-p.y],v=rt(t.get("pageButtonGap",!0),t.get("itemGap",!0));d&&("end"===t.get("pageButtonPosition",!0)?y[i]+=n[r]-p[r]:g[i]+=p[r]+v);y[1-i]+=c[o]/2-p[o]/2,l.setPosition(f),u.setPosition(g),h.setPosition(y);var m={x:0,y:0};if(m[r]=d?n[r]:c[r],m[o]=Math.max(c[o],p[o]),m[a]=Math.min(0,p[a]+y[1-i]),u.__rectSize=n[r],d){var x={x:0,y:0};x[r]=Math.max(n[r]-p[r]-v,0),x[o]=m[o],u.setClipPath(new Ws({shape:x})),u.__rectSize=x[r]}else h.eachChild((function(t){t.attr({invisible:!0,silent:!0})}));var _=this._getPageInfo(t);return null!=_.pageIndex&&vh(l,{x:_.contentPosition[0],y:_.contentPosition[1]},d?t:null),this._updatePageInfoView(t,_),m},e.prototype._pageGo=function(t,e,n){var i=this._getPageInfo(e)[t];null!=i&&n.dispatchAction({type:"legendScroll",scrollDataIndex:i,legendId:e.id})},e.prototype._updatePageInfoView=function(t,e){var n=this._controllerGroup;E(["pagePrev","pageNext"],(function(i){var r=null!=e[i+"DataIndex"],o=n.childOfName(i);o&&(o.setStyle("fill",r?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),o.cursor=r?"pointer":"default")}));var i=n.childOfName("pageText"),r=t.get("pageFormatter"),o=e.pageIndex,a=null!=o?o+1:0,s=e.pageCount;i&&r&&i.setStyle("text",U(r)?r.replace("{current}",null==a?"":a+"").replace("{total}",null==s?"":s+""):r({current:a,total:s}))},e.prototype._getPageInfo=function(t){var e=t.get("scrollDataIndex",!0),n=this.getContentGroup(),i=this._containerGroup.__rectSize,r=t.getOrient().index,o=oF[r],a=aF[r],s=this._findTargetItemIndex(e),l=n.children(),u=l[s],h=l.length,c=h?1:0,p={contentPosition:[n.x,n.y],pageCount:c,pageIndex:c-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!u)return p;var d=m(u);p.contentPosition[r]=-d.s;for(var f=s+1,g=d,y=d,v=null;f<=h;++f)(!(v=m(l[f]))&&y.e>g.s+i||v&&!x(v,g.s))&&(g=y.i>g.i?y:v)&&(null==p.pageNextDataIndex&&(p.pageNextDataIndex=g.i),++p.pageCount),y=v;for(f=s-1,g=d,y=d,v=null;f>=-1;--f)(v=m(l[f]))&&x(y,v.s)||!(g.i=e&&t.s<=e+i}},e.prototype._findTargetItemIndex=function(t){return this._showController?(this.getContentGroup().eachChild((function(i,r){var o=i.__legendDataIndex;null==n&&null!=o&&(n=r),o===t&&(e=r)})),null!=e?e:n):0;var e,n},e.type="legend.scroll",e}(jB);function lF(t){Vm(eF),t.registerComponentModel(nF),t.registerComponentView(sF),function(t){t.registerAction("legendScroll","legendscroll",(function(t,e){var n=t.scrollDataIndex;null!=n&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},(function(t){t.setScrollDataIndex(n)}))}))}(t)}var uF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="dataZoom.inside",e.defaultOption=kc(az.defaultOption,{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),e}(az),hF=Vo();function cF(t,e,n){hF(t).coordSysRecordMap.each((function(t){var i=t.dataZoomInfoMap.get(e.uid);i&&(i.getRange=n)}))}function pF(t,e){if(e){t.removeKey(e.model.uid);var n=e.controller;n&&n.dispose()}}function dF(t,e){t.isDisposed()||t.dispatchAction({type:"dataZoom",animation:{easing:"cubicOut",duration:100},batch:e})}function fF(t,e,n,i){return t.coordinateSystem.containPoint([n,i])}function gF(t){t.registerProcessor(t.PRIORITY.PROCESSOR.FILTER,(function(t,e){var n=hF(e),i=n.coordSysRecordMap||(n.coordSysRecordMap=yt());i.each((function(t){t.dataZoomInfoMap=null})),t.eachComponent({mainType:"dataZoom",subType:"inside"},(function(t){E(rz(t).infoList,(function(n){var r=n.model.uid,o=i.get(r)||i.set(r,function(t,e){var n={model:e,containsPoint:H(fF,e),dispatchAction:H(dF,t),dataZoomInfoMap:null,controller:null},i=n.controller=new nT(t.getZr());return E(["pan","zoom","scrollMove"],(function(t){i.on(t,(function(e){var i=[];n.dataZoomInfoMap.each((function(r){if(e.isAvailableBehavior(r.model.option)){var o=(r.getRange||{})[t],a=o&&o(r.dzReferCoordSysInfo,n.model.mainType,n.controller,e);!r.model.get("disabled",!0)&&a&&i.push({dataZoomId:r.model.id,start:a[0],end:a[1]})}})),i.length&&n.dispatchAction(i)}))})),n}(e,n.model));(o.dataZoomInfoMap||(o.dataZoomInfoMap=yt())).set(t.uid,{dzReferCoordSysInfo:n,model:t,getRange:null})}))})),i.each((function(t){var e,n=t.controller,r=t.dataZoomInfoMap;if(r){var o=r.keys()[0];null!=o&&(e=r.get(o))}if(e){var a=function(t){var e,n="type_",i={type_true:2,type_move:1,type_false:0,type_undefined:-1},r=!0;return t.each((function(t){var o=t.model,a=!o.get("disabled",!0)&&(!o.get("zoomLock",!0)||"move");i[n+a]>i[n+e]&&(e=a),r=r&&o.get("preventDefaultMouseMove",!0)})),{controlType:e,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!r}}}(r);n.enable(a.controlType,a.opt),n.setPointerChecker(t.containsPoint),Hg(t,"dispatchAction",e.model.get("throttle",!0),"fixRate")}else pF(i,t)}))}))}var yF=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="dataZoom.inside",e}return n(e,t),e.prototype.render=function(e,n,i){t.prototype.render.apply(this,arguments),e.noTarget()?this._clear():(this.range=e.getPercentRange(),cF(i,e,{pan:W(vF.pan,this),zoom:W(vF.zoom,this),scrollMove:W(vF.scrollMove,this)}))},e.prototype.dispose=function(){this._clear(),t.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){!function(t,e){for(var n=hF(t).coordSysRecordMap,i=n.keys(),r=0;r0?s.pixelStart+s.pixelLength-s.pixel:s.pixel-s.pixelStart)/s.pixelLength*(o[1]-o[0])+o[0],u=Math.max(1/i.scale,0);o[0]=(o[0]-l)*u+l,o[1]=(o[1]-l)*u+l;var h=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return zk(0,o,[0,100],0,h.minSpan,h.maxSpan),this.range=o,r[0]!==o[0]||r[1]!==o[1]?o:void 0}},pan:mF((function(t,e,n,i,r,o){var a=xF[i]([o.oldX,o.oldY],[o.newX,o.newY],e,r,n);return a.signal*(t[1]-t[0])*a.pixel/a.pixelLength})),scrollMove:mF((function(t,e,n,i,r,o){return xF[i]([0,0],[o.scrollDelta,o.scrollDelta],e,r,n).signal*(t[1]-t[0])*o.scrollDelta}))};function mF(t){return function(e,n,i,r){var o=this.range,a=o.slice(),s=e.axisModels[0];if(s)return zk(t(a,s,e,n,i,r),a,[0,100],"all"),this.range=a,o[0]!==a[0]||o[1]!==a[1]?a:void 0}}var xF={grid:function(t,e,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem.getRect();return t=t||[0,0],"x"===o.dim?(a.pixel=e[0]-t[0],a.pixelLength=s.width,a.pixelStart=s.x,a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=s.height,a.pixelStart=s.y,a.signal=o.inverse?-1:1),a},polar:function(t,e,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===n.mainType?(a.pixel=e[0]-t[0],a.pixelLength=l[1]-l[0],a.pixelStart=l[0],a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=u[1]-u[0],a.pixelStart=u[0],a.signal=o.inverse?-1:1),a},singleAxis:function(t,e,n,i,r){var o=n.axis,a=r.model.coordinateSystem.getRect(),s={};return t=t||[0,0],"horizontal"===o.orient?(s.pixel=e[0]-t[0],s.pixelLength=a.width,s.pixelStart=a.x,s.signal=o.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=a.height,s.pixelStart=a.y,s.signal=o.inverse?-1:1),s}};function _F(t){yz(t),t.registerComponentModel(uF),t.registerComponentView(yF),gF(t)}var bF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="dataZoom.slider",e.layoutMode="box",e.defaultOption=kc(az.defaultOption,{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,borderColor:"#d2dbee",borderRadius:3,backgroundColor:"rgba(47,69,84,0)",dataBackground:{lineStyle:{color:"#d2dbee",width:.5},areaStyle:{color:"#d2dbee",opacity:.2}},selectedDataBackground:{lineStyle:{color:"#8fb0f7",width:.5},areaStyle:{color:"#8fb0f7",opacity:.2}},fillerColor:"rgba(135,175,274,0.2)",handleIcon:"path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z",handleSize:"100%",handleStyle:{color:"#fff",borderColor:"#ACB8D1"},moveHandleSize:7,moveHandleIcon:"path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z",moveHandleStyle:{color:"#D2DBEE",opacity:.7},showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:"#6E7079"},brushSelect:!0,brushStyle:{color:"rgba(135,175,274,0.15)"},emphasis:{handleStyle:{borderColor:"#8FB0F7"},moveHandleStyle:{color:"#8FB0F7"}}}),e}(az),wF=Ws,SF="horizontal",MF="vertical",IF=["line","bar","candlestick","scatter"],TF={easing:"cubicOut",duration:100,delay:0},CF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._displayables={},n}return n(e,t),e.prototype.init=function(t,e){this.api=e,this._onBrush=W(this._onBrush,this),this._onBrushEnd=W(this._onBrushEnd,this)},e.prototype.render=function(e,n,i,r){if(t.prototype.render.apply(this,arguments),Hg(this,"_dispatchZoomAction",e.get("throttle"),"fixRate"),this._orient=e.getOrient(),!1!==e.get("show")){if(e.noTarget())return this._clear(),void this.group.removeAll();r&&"dataZoom"===r.type&&r.from===this.uid||this._buildView(),this._updateView()}else this.group.removeAll()},e.prototype.dispose=function(){this._clear(),t.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){Yg(this,"_dispatchZoomAction");var t=this.api.getZr();t.off("mousemove",this._onBrush),t.off("mouseup",this._onBrushEnd)},e.prototype._buildView=function(){var t=this.group;t.removeAll(),this._brushing=!1,this._displayables.brushRect=null,this._resetLocation(),this._resetInterval();var e=this._displayables.sliderGroup=new Br;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},e.prototype._resetLocation=function(){var t=this.dataZoomModel,e=this.api,n=t.get("brushSelect")?7:0,i=this._findCoordRect(),r={width:e.getWidth(),height:e.getHeight()},o=this._orient===SF?{right:r.width-i.x-i.width,top:r.height-30-7-n,width:i.width,height:30}:{right:7,top:i.y,width:30,height:i.height},a=Rp(t.option);E(["right","top","width","height"],(function(t){"ph"===a[t]&&(a[t]=o[t])}));var s=kp(a,r);this._location={x:s.x,y:s.y},this._size=[s.width,s.height],this._orient===MF&&this._size.reverse()},e.prototype._positionGroup=function(){var t=this.group,e=this._location,n=this._orient,i=this.dataZoomModel.getFirstTargetAxisModel(),r=i&&i.get("inverse"),o=this._displayables.sliderGroup,a=(this._dataShadowInfo||{}).otherAxisInverse;o.attr(n!==SF||r?n===SF&&r?{scaleY:a?1:-1,scaleX:-1}:n!==MF||r?{scaleY:a?-1:1,scaleX:-1,rotation:Math.PI/2}:{scaleY:a?-1:1,scaleX:1,rotation:Math.PI/2}:{scaleY:a?1:-1,scaleX:1});var s=t.getBoundingRect([o]);t.x=e.x-s.x,t.y=e.y-s.y,t.markRedraw()},e.prototype._getViewExtent=function(){return[0,this._size[0]]},e.prototype._renderBackground=function(){var t=this.dataZoomModel,e=this._size,n=this._displayables.sliderGroup,i=t.get("brushSelect");n.add(new wF({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40}));var r=new wF({shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:"transparent"},z2:0,onclick:W(this._onClickPanel,this)}),o=this.api.getZr();i?(r.on("mousedown",this._onBrushStart,this),r.cursor="crosshair",o.on("mousemove",this._onBrush),o.on("mouseup",this._onBrushEnd)):(o.off("mousemove",this._onBrush),o.off("mouseup",this._onBrushEnd)),n.add(r)},e.prototype._renderDataShadow=function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(this._displayables.dataShadowSegs=[],t){var e=this._size,n=this._shadowSize||[],i=t.series,r=i.getRawData(),o=i.getShadowDim&&i.getShadowDim(),a=o&&r.getDimensionInfo(o)?i.getShadowDim():t.otherDim;if(null!=a){var s=this._shadowPolygonPts,l=this._shadowPolylinePts;if(r!==this._shadowData||a!==this._shadowDim||e[0]!==n[0]||e[1]!==n[1]){var u=r.getDataExtent(a),h=.3*(u[1]-u[0]);u=[u[0]-h,u[1]+h];var c,p=[0,e[1]],d=[0,e[0]],f=[[e[0],0],[0,0]],g=[],y=d[1]/(r.count()-1),v=0,m=Math.round(r.count()/e[0]);r.each([a],(function(t,e){if(m>0&&e%m)v+=y;else{var n=null==t||isNaN(t)||""===t,i=n?0:Kr(t,u,p,!0);n&&!c&&e?(f.push([f[f.length-1][0],0]),g.push([g[g.length-1][0],0])):!n&&c&&(f.push([v,0]),g.push([v,0])),f.push([v,i]),g.push([v,i]),v+=y,c=n}})),s=this._shadowPolygonPts=f,l=this._shadowPolylinePts=g}this._shadowData=r,this._shadowDim=a,this._shadowSize=[e[0],e[1]];for(var x=this.dataZoomModel,_=0;_<3;_++){var b=w(1===_);this._displayables.sliderGroup.add(b),this._displayables.dataShadowSegs.push(b)}}}function w(t){var e=x.getModel(t?"selectedDataBackground":"dataBackground"),n=new Br,i=new Xu({shape:{points:s},segmentIgnoreThreshold:1,style:e.getModel("areaStyle").getAreaStyle(),silent:!0,z2:-20}),r=new Zu({shape:{points:l},segmentIgnoreThreshold:1,style:e.getModel("lineStyle").getLineStyle(),silent:!0,z2:-19});return n.add(i),n.add(r),n}},e.prototype._prepareDataShadowInfo=function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(!1!==e){var n,i=this.ecModel;return t.eachTargetAxis((function(r,o){E(t.getAxisProxy(r,o).getTargetSeriesModels(),(function(t){if(!(n||!0!==e&&P(IF,t.get("type"))<0)){var a,s=i.getComponent(nz(r),o).axis,l=function(t){var e={x:"y",y:"x",radius:"angle",angle:"radius"};return e[t]}(r),u=t.coordinateSystem;null!=l&&u.getOtherAxis&&(a=u.getOtherAxis(s).inverse),l=t.getData().mapDimension(l),n={thisAxis:s,series:t,thisDim:r,otherDim:l,otherAxisInverse:a}}}),this)}),this),n}},e.prototype._renderHandle=function(){var t=this.group,e=this._displayables,n=e.handles=[null,null],i=e.handleLabels=[null,null],r=this._displayables.sliderGroup,o=this._size,a=this.dataZoomModel,s=this.api,l=a.get("borderRadius")||0,u=a.get("brushSelect"),h=e.filler=new wF({silent:u,style:{fill:a.get("fillerColor")},textConfig:{position:"inside"}});r.add(h),r.add(new wF({silent:!0,subPixelOptimize:!0,shape:{x:0,y:0,width:o[0],height:o[1],r:l},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:1,fill:"rgba(0,0,0,0)"}})),E([0,1],(function(e){var o=a.get("handleIcon");!Wy[o]&&o.indexOf("path://")<0&&o.indexOf("image://")<0&&(o="path://"+o);var s=Xy(o,-1,0,2,2,null,!0);s.attr({cursor:DF(this._orient),draggable:!0,drift:W(this._onDragMove,this,e),ondragend:W(this._onDragEnd,this),onmouseover:W(this._showDataInfo,this,!0),onmouseout:W(this._showDataInfo,this,!1),z2:5});var l=s.getBoundingRect(),u=a.get("handleSize");this._handleHeight=$r(u,this._size[1]),this._handleWidth=l.width/l.height*this._handleHeight,s.setStyle(a.getModel("handleStyle").getItemStyle()),s.style.strokeNoScale=!0,s.rectHover=!0,s.ensureState("emphasis").style=a.getModel(["emphasis","handleStyle"]).getItemStyle(),Ul(s);var h=a.get("handleColor");null!=h&&(s.style.fill=h),r.add(n[e]=s);var c=a.getModel("textStyle");t.add(i[e]=new Xs({silent:!0,invisible:!0,style:oc(c,{x:0,y:0,text:"",verticalAlign:"middle",align:"center",fill:c.getTextColor(),font:c.getFont()}),z2:10}))}),this);var c=h;if(u){var p=$r(a.get("moveHandleSize"),o[1]),d=e.moveHandle=new Ws({style:a.getModel("moveHandleStyle").getItemStyle(),silent:!0,shape:{r:[0,0,2,2],y:o[1]-.5,height:p}}),f=.8*p,g=e.moveHandleIcon=Xy(a.get("moveHandleIcon"),-f/2,-f/2,f,f,"#fff",!0);g.silent=!0,g.y=o[1]+p/2-.5,d.ensureState("emphasis").style=a.getModel(["emphasis","moveHandleStyle"]).getItemStyle();var y=Math.min(o[1]/2,Math.max(p,10));(c=e.moveZone=new Ws({invisible:!0,shape:{y:o[1]-y,height:p+y}})).on("mouseover",(function(){s.enterEmphasis(d)})).on("mouseout",(function(){s.leaveEmphasis(d)})),r.add(d),r.add(g),r.add(c)}c.attr({draggable:!0,cursor:DF(this._orient),drift:W(this._onDragMove,this,"all"),ondragstart:W(this._showDataInfo,this,!0),ondragend:W(this._onDragEnd,this),onmouseover:W(this._showDataInfo,this,!0),onmouseout:W(this._showDataInfo,this,!1)})},e.prototype._resetInterval=function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[Kr(t[0],[0,100],e,!0),Kr(t[1],[0,100],e,!0)]},e.prototype._updateInterval=function(t,e){var n=this.dataZoomModel,i=this._handleEnds,r=this._getViewExtent(),o=n.findRepresentativeAxisProxy().getMinMaxSpan(),a=[0,100];zk(e,i,r,n.get("zoomLock")?"all":t,null!=o.minSpan?Kr(o.minSpan,a,r,!0):null,null!=o.maxSpan?Kr(o.maxSpan,a,r,!0):null);var s=this._range,l=this._range=Qr([Kr(i[0],r,a,!0),Kr(i[1],r,a,!0)]);return!s||s[0]!==l[0]||s[1]!==l[1]},e.prototype._updateView=function(t){var e=this._displayables,n=this._handleEnds,i=Qr(n.slice()),r=this._size;E([0,1],(function(t){var i=e.handles[t],o=this._handleHeight;i.attr({scaleX:o/2,scaleY:o/2,x:n[t]+(t?-1:1),y:r[1]/2-o/2})}),this),e.filler.setShape({x:i[0],y:0,width:i[1]-i[0],height:r[1]});var o={x:i[0],width:i[1]-i[0]};e.moveHandle&&(e.moveHandle.setShape(o),e.moveZone.setShape(o),e.moveZone.getBoundingRect(),e.moveHandleIcon&&e.moveHandleIcon.attr("x",o.x+o.width/2));for(var a=e.dataShadowSegs,s=[0,i[0],i[1],r[0]],l=0;le[0]||n[1]<0||n[1]>e[1])){var i=this._handleEnds,r=(i[0]+i[1])/2,o=this._updateInterval("all",n[0]-r);this._updateView(),o&&this._dispatchZoomAction(!1)}},e.prototype._onBrushStart=function(t){var e=t.offsetX,n=t.offsetY;this._brushStart=new De(e,n),this._brushing=!0,this._brushStartTime=+new Date},e.prototype._onBrushEnd=function(t){if(this._brushing){var e=this._displayables.brushRect;if(this._brushing=!1,e){e.attr("ignore",!0);var n=e.shape;if(!(+new Date-this._brushStartTime<200&&Math.abs(n.width)<5)){var i=this._getViewExtent(),r=[0,100];this._range=Qr([Kr(n.x,i,r,!0),Kr(n.x+n.width,i,r,!0)]),this._handleEnds=[n.x,n.x+n.width],this._updateView(),this._dispatchZoomAction(!1)}}}},e.prototype._onBrush=function(t){this._brushing&&(de(t.event),this._updateBrushRect(t.offsetX,t.offsetY))},e.prototype._updateBrushRect=function(t,e){var n=this._displayables,i=this.dataZoomModel,r=n.brushRect;r||(r=n.brushRect=new wF({silent:!0,style:i.getModel("brushStyle").getItemStyle()}),n.sliderGroup.add(r)),r.attr("ignore",!1);var o=this._brushStart,a=this._displayables.sliderGroup,s=a.transformCoordToLocal(t,e),l=a.transformCoordToLocal(o.x,o.y),u=this._size;s[0]=Math.max(Math.min(u[0],s[0]),0),r.setShape({x:l[0],y:0,width:s[0]-l[0],height:u[1]})},e.prototype._dispatchZoomAction=function(t){var e=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,animation:t?TF:null,start:e[0],end:e[1]})},e.prototype._findCoordRect=function(){var t,e=rz(this.dataZoomModel).infoList;if(!t&&e.length){var n=e[0].model.coordinateSystem;t=n.getRect&&n.getRect()}if(!t){var i=this.api.getWidth(),r=this.api.getHeight();t={x:.2*i,y:.2*r,width:.6*i,height:.6*r}}return t},e.type="dataZoom.slider",e}(uz);function DF(t){return"vertical"===t?"ns-resize":"ew-resize"}function AF(t){t.registerComponentModel(bF),t.registerComponentView(CF),yz(t)}var kF=function(t,e,n){var i=T((LF[t]||{})[e]);return n&&Y(i)?i[i.length-1]:i},LF={color:{active:["#006edd","#e0ffff"],inactive:["rgba(0,0,0,0)"]},colorHue:{active:[0,360],inactive:[0,0]},colorSaturation:{active:[.3,1],inactive:[0,0]},colorLightness:{active:[.9,.5],inactive:[0,0]},colorAlpha:{active:[.3,1],inactive:[0,0]},opacity:{active:[.3,1],inactive:[0,0]},symbol:{active:["circle","roundRect","diamond"],inactive:["none"]},symbolSize:{active:[10,50],inactive:[0,0]}},PF=kD.mapVisual,OF=kD.eachVisual,RF=Y,NF=E,EF=Qr,zF=Kr,VF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.stateList=["inRange","outOfRange"],n.replacableOptionKeys=["inRange","outOfRange","target","controller","color"],n.layoutMode={type:"box",ignoreSize:!0},n.dataBound=[-1/0,1/0],n.targetVisuals={},n.controllerVisuals={},n}return n(e,t),e.prototype.init=function(t,e,n){this.mergeDefaultAndTheme(t,n)},e.prototype.optionUpdated=function(t,e){var n=this.option;!e&&PV(n,t,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},e.prototype.resetVisual=function(t){var e=this.stateList;t=W(t,this),this.controllerVisuals=LV(this.option.controller,e,t),this.targetVisuals=LV(this.option.target,e,t)},e.prototype.getItemSymbol=function(){return null},e.prototype.getTargetSeriesIndices=function(){var t=this.option.seriesIndex,e=[];return null==t||"all"===t?this.ecModel.eachSeries((function(t,n){e.push(n)})):e=To(t),e},e.prototype.eachTargetSeries=function(t,e){E(this.getTargetSeriesIndices(),(function(n){var i=this.ecModel.getSeriesByIndex(n);i&&t.call(e,i)}),this)},e.prototype.isTargetSeries=function(t){var e=!1;return this.eachTargetSeries((function(n){n===t&&(e=!0)})),e},e.prototype.formatValueText=function(t,e,n){var i,r=this.option,o=r.precision,a=this.dataBound,s=r.formatter;n=n||["<",">"],Y(t)&&(t=t.slice(),i=!0);var l=e?t:i?[u(t[0]),u(t[1])]:u(t);return U(s)?s.replace("{value}",i?l[0]:l).replace("{value2}",i?l[1]:l):X(s)?i?s(t[0],t[1]):s(t):i?t[0]===a[0]?n[0]+" "+l[1]:t[1]===a[1]?n[1]+" "+l[0]:l[0]+" - "+l[1]:l;function u(t){return t===a[0]?"min":t===a[1]?"max":(+t).toFixed(Math.min(o,20))}},e.prototype.resetExtent=function(){var t=this.option,e=EF([t.min,t.max]);this._dataExtent=e},e.prototype.getDataDimensionIndex=function(t){var e=this.option.dimension;if(null!=e)return t.getDimensionIndex(e);for(var n=t.dimensions,i=n.length-1;i>=0;i--){var r=n[i],o=t.getDimensionInfo(r);if(!o.isCalculationCoord)return o.storeDimIndex}},e.prototype.getExtent=function(){return this._dataExtent.slice()},e.prototype.completeVisualOption=function(){var t=this.ecModel,e=this.option,n={inRange:e.inRange,outOfRange:e.outOfRange},i=e.target||(e.target={}),r=e.controller||(e.controller={});C(i,n),C(r,n);var o=this.isCategory();function a(n){RF(e.color)&&!n.inRange&&(n.inRange={color:e.color.slice().reverse()}),n.inRange=n.inRange||{color:t.get("gradientColor")}}a.call(this,i),a.call(this,r),function(t,e,n){var i=t[e],r=t[n];i&&!r&&(r=t[n]={},NF(i,(function(t,e){if(kD.isValidType(e)){var n=kF(e,"inactive",o);null!=n&&(r[e]=n,"color"!==e||r.hasOwnProperty("opacity")||r.hasOwnProperty("colorAlpha")||(r.opacity=[0,0]))}})))}.call(this,i,"inRange","outOfRange"),function(t){var e=(t.inRange||{}).symbol||(t.outOfRange||{}).symbol,n=(t.inRange||{}).symbolSize||(t.outOfRange||{}).symbolSize,i=this.get("inactiveColor"),r=this.getItemSymbol()||"roundRect";NF(this.stateList,(function(a){var s=this.itemSize,l=t[a];l||(l=t[a]={color:o?i:[i]}),null==l.symbol&&(l.symbol=e&&T(e)||(o?r:[r])),null==l.symbolSize&&(l.symbolSize=n&&T(n)||(o?s[0]:[s[0],s[0]])),l.symbol=PF(l.symbol,(function(t){return"none"===t?r:t}));var u=l.symbolSize;if(null!=u){var h=-1/0;OF(u,(function(t){t>h&&(h=t)})),l.symbolSize=PF(u,(function(t){return zF(t,[0,h],[0,s[0]],!0)}))}}),this)}.call(this,r)},e.prototype.resetItemSize=function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},e.prototype.isCategory=function(){return!!this.option.categories},e.prototype.setSelected=function(t){},e.prototype.getSelected=function(){return null},e.prototype.getValueState=function(t){return null},e.prototype.getVisualMeta=function(t){return null},e.type="visualMap",e.dependencies=["series"],e.defaultOption={show:!0,z:4,seriesIndex:"all",min:0,max:200,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:"vertical",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",contentColor:"#5793f3",inactiveColor:"#aaa",borderWidth:0,padding:5,textGap:10,precision:0,textStyle:{color:"#333"}},e}(zp),BF=[20,140],FF=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.optionUpdated=function(e,n){t.prototype.optionUpdated.apply(this,arguments),this.resetExtent(),this.resetVisual((function(t){t.mappingMethod="linear",t.dataExtent=this.getExtent()})),this._resetRange()},e.prototype.resetItemSize=function(){t.prototype.resetItemSize.apply(this,arguments);var e=this.itemSize;(null==e[0]||isNaN(e[0]))&&(e[0]=BF[0]),(null==e[1]||isNaN(e[1]))&&(e[1]=BF[1])},e.prototype._resetRange=function(){var t=this.getExtent(),e=this.option.range;!e||e.auto?(t.auto=1,this.option.range=t):Y(e)&&(e[0]>e[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},e.prototype.completeVisualOption=function(){t.prototype.completeVisualOption.apply(this,arguments),E(this.stateList,(function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=e[1]/3)}),this)},e.prototype.setSelected=function(t){this.option.range=t.slice(),this._resetRange()},e.prototype.getSelected=function(){var t=this.getExtent(),e=Qr((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]=n[1]||t<=e[1])?"inRange":"outOfRange"},e.prototype.findTargetDataIndices=function(t){var e=[];return this.eachTargetSeries((function(n){var i=[],r=n.getData();r.each(this.getDataDimensionIndex(r),(function(e,n){t[0]<=e&&e<=t[1]&&i.push(n)}),this),e.push({seriesId:n.id,dataIndex:i})}),this),e},e.prototype.getVisualMeta=function(t){var e=GF(this,"outOfRange",this.getExtent()),n=GF(this,"inRange",this.option.range.slice()),i=[];function r(e,n){i.push({value:e,color:t(e,n)})}for(var o=0,a=0,s=n.length,l=e.length;at[1])break;n.push({color:this.getControllerVisual(o,"color",e),offset:r/100})}return n.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),n},e.prototype._createBarPoints=function(t,e){var n=this.visualMapModel.itemSize;return[[n[0]-e[0],t[0]],[n[0],t[0]],[n[0],t[1]],[n[0]-e[1],t[1]]]},e.prototype._createBarGroup=function(t){var e=this._orient,n=this.visualMapModel.get("inverse");return new Br("horizontal"!==e||n?"horizontal"===e&&n?{scaleX:"bottom"===t?-1:1,rotation:-Math.PI/2}:"vertical"!==e||n?{scaleX:"left"===t?1:-1}:{scaleX:"left"===t?1:-1,scaleY:-1}:{scaleX:"bottom"===t?1:-1,rotation:Math.PI/2})},e.prototype._updateHandle=function(t,e){if(this._useHandle){var n=this._shapes,i=this.visualMapModel,r=n.handleThumbs,o=n.handleLabels,a=i.itemSize,s=i.getExtent();ZF([0,1],(function(l){var u=r[l];u.setStyle("fill",e.handlesColor[l]),u.y=t[l];var h=UF(t[l],[0,a[1]],s,!0),c=this.getControllerVisual(h,"symbolSize");u.scaleX=u.scaleY=c/a[0],u.x=a[0]-c/2;var p=Fh(n.handleLabelPoints[l],Bh(u,this.group));o[l].setStyle({x:p[0],y:p[1],text:i.formatValueText(this._dataInterval[l]),verticalAlign:"middle",align:"vertical"===this._orient?this._applyTransform("left",n.mainGroup):"center"})}),this)}},e.prototype._showIndicator=function(t,e,n,i){var r=this.visualMapModel,o=r.getExtent(),a=r.itemSize,s=[0,a[1]],l=this._shapes,u=l.indicator;if(u){u.attr("invisible",!1);var h=this.getControllerVisual(t,"color",{convertOpacityToAlpha:!0}),c=this.getControllerVisual(t,"symbolSize"),p=UF(t,o,s,!0),d=a[0]-c/2,f={x:u.x,y:u.y};u.y=p,u.x=d;var g=Fh(l.indicatorLabelPoint,Bh(u,this.group)),y=l.indicatorLabel;y.attr("invisible",!1);var v=this._applyTransform("left",l.mainGroup),m="horizontal"===this._orient;y.setStyle({text:(n||"")+r.formatValueText(e),verticalAlign:m?v:"middle",align:m?"center":v});var x={x:d,y:p,style:{fill:h}},_={style:{x:g[0],y:g[1]}};if(r.ecModel.isAnimationEnabled()&&!this._firstShowIndicator){var b={duration:100,easing:"cubicInOut",additive:!0};u.x=f.x,u.y=f.y,u.animateTo(x,b),y.animateTo(_,b)}else u.attr(x),y.attr(_);this._firstShowIndicator=!1;var w=this._shapes.handleLabels;if(w)for(var S=0;Sr[1]&&(u[1]=1/0),e&&(u[0]===-1/0?this._showIndicator(l,u[1],"< ",a):u[1]===1/0?this._showIndicator(l,u[0],"> ",a):this._showIndicator(l,l,"≈ ",a));var h=this._hoverLinkDataIndices,c=[];(e||JF(n))&&(c=this._hoverLinkDataIndices=n.findTargetDataIndices(u));var p=function(t,e){var n={},i={};return r(t||[],n),r(e||[],i,n),[o(n),o(i)];function r(t,e,n){for(var i=0,r=t.length;i=0&&(r.dimension=o,i.push(r))}})),t.getData().setVisual("visualMeta",i)}}];function iG(t,e,n,i){for(var r=e.targetVisuals[i],o=kD.prepareVisualTypes(r),a={color:Ay(t.getData(),"color")},s=0,l=o.length;s0:t.splitNumber>0)&&!t.calculable?"piecewise":"continuous"})),t.registerAction(tG,eG),E(nG,(function(e){t.registerVisual(t.PRIORITY.VISUAL.COMPONENT,e)})),t.registerPreprocessor(oG))}function uG(t){t.registerComponentModel(FF),t.registerComponentView(KF),lG(t)}var hG=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._pieceList=[],n}return n(e,t),e.prototype.optionUpdated=function(e,n){t.prototype.optionUpdated.apply(this,arguments),this.resetExtent();var i=this._mode=this._determineMode();this._pieceList=[],cG[this._mode].call(this,this._pieceList),this._resetSelected(e,n);var r=this.option.categories;this.resetVisual((function(t,e){"categories"===i?(t.mappingMethod="category",t.categories=T(r)):(t.dataExtent=this.getExtent(),t.mappingMethod="piecewise",t.pieceList=z(this._pieceList,(function(t){return t=T(t),"inRange"!==e&&(t.visual=null),t})))}))},e.prototype.completeVisualOption=function(){var e=this.option,n={},i=kD.listVisualTypes(),r=this.isCategory();function o(t,e,n){return t&&t[e]&&t[e].hasOwnProperty(n)}E(e.pieces,(function(t){E(i,(function(e){t.hasOwnProperty(e)&&(n[e]=1)}))})),E(n,(function(t,n){var i=!1;E(this.stateList,(function(t){i=i||o(e,t,n)||o(e.target,t,n)}),this),!i&&E(this.stateList,(function(t){(e[t]||(e[t]={}))[n]=kF(n,"inRange"===t?"active":"inactive",r)}))}),this),t.prototype.completeVisualOption.apply(this,arguments)},e.prototype._resetSelected=function(t,e){var n=this.option,i=this._pieceList,r=(e?n:t).selected||{};if(n.selected=r,E(i,(function(t,e){var n=this.getSelectedMapKey(t);r.hasOwnProperty(n)||(r[n]=!0)}),this),"single"===n.selectedMode){var o=!1;E(i,(function(t,e){var n=this.getSelectedMapKey(t);r[n]&&(o?r[n]=!1:o=!0)}),this)}},e.prototype.getItemSymbol=function(){return this.get("itemSymbol")},e.prototype.getSelectedMapKey=function(t){return"categories"===this._mode?t.value+"":t.index+""},e.prototype.getPieceList=function(){return this._pieceList},e.prototype._determineMode=function(){var t=this.option;return t.pieces&&t.pieces.length>0?"pieces":this.option.categories?"categories":"splitNumber"},e.prototype.setSelected=function(t){this.option.selected=T(t)},e.prototype.getValueState=function(t){var e=kD.findPieceIndex(t,this._pieceList);return null!=e&&this.option.selected[this.getSelectedMapKey(this._pieceList[e])]?"inRange":"outOfRange"},e.prototype.findTargetDataIndices=function(t){var e=[],n=this._pieceList;return this.eachTargetSeries((function(i){var r=[],o=i.getData();o.each(this.getDataDimensionIndex(o),(function(e,i){kD.findPieceIndex(e,n)===t&&r.push(i)}),this),e.push({seriesId:i.id,dataIndex:r})}),this),e},e.prototype.getRepresentValue=function(t){var e;if(this.isCategory())e=t.value;else if(null!=t.value)e=t.value;else{var n=t.interval||[];e=n[0]===-1/0&&n[1]===1/0?0:(n[0]+n[1])/2}return e},e.prototype.getVisualMeta=function(t){if(!this.isCategory()){var e=[],n=["",""],i=this,r=this._pieceList.slice();if(r.length){var o=r[0].interval[0];o!==-1/0&&r.unshift({interval:[-1/0,o]}),(o=r[r.length-1].interval[1])!==1/0&&r.push({interval:[o,1/0]})}else r.push({interval:[-1/0,1/0]});var a=-1/0;return E(r,(function(t){var e=t.interval;e&&(e[0]>a&&s([a,e[0]],"outOfRange"),s(e.slice()),a=e[1])}),this),{stops:e,outerColors:n}}function s(r,o){var a=i.getRepresentValue({interval:r});o||(o=i.getValueState(a));var s=t(a,o);r[0]===-1/0?n[0]=s:r[1]===1/0?n[1]=s:e.push({value:r[0],color:s},{value:r[1],color:s})}},e.type="visualMap.piecewise",e.defaultOption=kc(VF.defaultOption,{selected:null,minOpen:!1,maxOpen:!1,align:"auto",itemWidth:20,itemHeight:14,itemSymbol:"roundRect",pieces:null,categories:null,splitNumber:5,selectedMode:"multiple",itemGap:10,hoverLink:!0}),e}(VF),cG={splitNumber:function(t){var e=this.option,n=Math.min(e.precision,20),i=this.getExtent(),r=e.splitNumber;r=Math.max(parseInt(r,10),1),e.splitNumber=r;for(var o=(i[1]-i[0])/r;+o.toFixed(n)!==o&&n<5;)n++;e.precision=n,o=+o.toFixed(n),e.minOpen&&t.push({interval:[-1/0,i[0]],close:[0,0]});for(var a=0,s=i[0];a","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,n)}),this)}};function pG(t,e){var n=t.inverse;("vertical"===t.orient?!n:n)&&e.reverse()}var dG=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.doRender=function(){var t=this.group;t.removeAll();var e=this.visualMapModel,n=e.get("textGap"),i=e.textStyleModel,r=i.getFont(),o=i.getTextColor(),a=this._getItemAlign(),s=e.itemSize,l=this._getViewData(),u=l.endsText,h=it(e.get("showLabel",!0),!u);u&&this._renderEndsText(t,u[0],s,h,a),E(l.viewPieceList,(function(i){var l=i.piece,u=new Br;u.onclick=W(this._onItemClick,this,l),this._enableHoverLink(u,i.indexInModelPieceList);var c=e.getRepresentValue(l);if(this._createItemSymbol(u,c,[0,0,s[0],s[1]]),h){var p=this.visualMapModel.getValueState(c);u.add(new Xs({style:{x:"right"===a?-n:s[0]+n,y:s[1]/2,text:l.text,verticalAlign:"middle",align:a,font:r,fill:o,opacity:"outOfRange"===p?.5:1}}))}t.add(u)}),this),u&&this._renderEndsText(t,u[1],s,h,a),Ap(e.get("orient"),t,e.get("itemGap")),this.renderBackground(t),this.positionGroup(t)},e.prototype._enableHoverLink=function(t,e){var n=this;t.on("mouseover",(function(){return i("highlight")})).on("mouseout",(function(){return i("downplay")}));var i=function(t){var i=n.visualMapModel;i.option.hoverLink&&n.api.dispatchAction({type:t,batch:XF(i.findTargetDataIndices(e),i)})}},e.prototype._getItemAlign=function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return YF(t,this.api,t.itemSize);var n=e.align;return n&&"auto"!==n||(n="left"),n},e.prototype._renderEndsText=function(t,e,n,i,r){if(e){var o=new Br,a=this.visualMapModel.textStyleModel;o.add(new Xs({style:oc(a,{x:i?"right"===r?n[0]:0:n[0]/2,y:n[1]/2,verticalAlign:"middle",align:i?r:"center",text:e})})),t.add(o)}},e.prototype._getViewData=function(){var t=this.visualMapModel,e=z(t.getPieceList(),(function(t,e){return{piece:t,indexInModelPieceList:e}})),n=t.get("text"),i=t.get("orient"),r=t.get("inverse");return("horizontal"===i?r:!r)?e.reverse():n&&(n=n.slice().reverse()),{viewPieceList:e,endsText:n}},e.prototype._createItemSymbol=function(t,e,n){t.add(Xy(this.getControllerVisual(e,"symbol"),n[0],n[1],n[2],n[3],this.getControllerVisual(e,"color")))},e.prototype._onItemClick=function(t){var e=this.visualMapModel,n=e.option,i=n.selectedMode;if(i){var r=T(n.selected),o=e.getSelectedMapKey(t);"single"===i||!0===i?(r[o]=!0,E(r,(function(t,e){r[e]=e===o}))):r[o]=!r[o],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:r})}},e.type="visualMap.piecewise",e}(WF);function fG(t){t.registerComponentModel(hG),t.registerComponentView(dG),lG(t)}var gG={label:{enabled:!0},decal:{show:!1}},yG=Vo(),vG={};function mG(t,e){var n=t.getModel("aria");if(n.get("enabled")){var i=T(gG);C(i.label,t.getLocaleModel().get("aria"),!1),C(n.option,i,!1),function(){if(n.getModel("decal").get("show")){var e=yt();t.eachSeries((function(t){if(!t.isColorBySeries()){var n=e.get(t.type);n||(n={},e.set(t.type,n)),yG(t).scope=n}})),t.eachRawSeries((function(e){if(!t.isSeriesFiltered(e))if(X(e.enableAriaDecal))e.enableAriaDecal();else{var n=e.getData();if(e.isColorBySeries()){var i=pd(e.ecModel,e.name,vG,t.getSeriesCount()),r=n.getVisual("decal");n.setVisual("decal",u(r,i))}else{var o=e.getRawData(),a={},s=yG(e).scope;n.each((function(t){var e=n.getRawIndex(t);a[e]=t}));var l=o.count();o.each((function(t){var i=a[t],r=o.getName(t)||t+"",h=pd(e.ecModel,r,s,l),c=n.getItemVisual(i,"decal");n.setItemVisual(i,"decal",u(c,h))}))}}function u(t,e){var n=t?A(A({},e),t):e;return n.dirty=!0,n}}))}}(),function(){var i=e.getZr().dom;if(!i)return;var o=t.getLocaleModel().get("aria"),a=n.getModel("label");if(a.option=k(a.option,o),!a.get("enabled"))return;if(a.get("description"))return void i.setAttribute("aria-label",a.get("description"));var s,l=t.getSeriesCount(),u=a.get(["data","maxCount"])||10,h=a.get(["series","maxCount"])||10,c=Math.min(l,h);if(l<1)return;var p=function(){var e=t.get("title");e&&e.length&&(e=e[0]);return e&&e.text}();s=p?r(a.get(["general","withTitle"]),{title:p}):a.get(["general","withoutTitle"]);var d=[];s+=r(l>1?a.get(["series","multiple","prefix"]):a.get(["series","single","prefix"]),{seriesCount:l}),t.eachSeries((function(e,n){if(n1?a.get(["series","multiple",o]):a.get(["series","single",o]),{seriesId:e.seriesIndex,seriesName:e.get("name"),seriesType:(x=e.subType,_=t.getLocaleModel().get(["series","typeNames"]),_[x]||_.chart)});var s=e.getData();if(s.count()>u)i+=r(a.get(["data","partialData"]),{displayCnt:u});else i+=a.get(["data","allData"]);for(var h=a.get(["data","separator","middle"]),p=a.get(["data","separator","end"]),f=[],g=0;g":"gt",">=":"gte","=":"eq","!=":"ne","<>":"ne"},bG=function(){function t(t){if(null==(this._condVal=U(t)?new RegExp(t):et(t)?t:null)){var e="";0,wo(e)}}return t.prototype.evaluate=function(t){var e=typeof t;return U(e)?this._condVal.test(t):!!j(e)&&this._condVal.test(t+"")},t}(),wG=function(){function t(){}return t.prototype.evaluate=function(){return this.value},t}(),SG=function(){function t(){}return t.prototype.evaluate=function(){for(var t=this.children,e=0;e2&&l.push(e),e=[t,n]}function f(t,n,i,r){EG(t,i)&&EG(n,r)||e.push(t,n,i,r,i,r)}function g(t,n,i,r,o,a){var s=Math.abs(n-t),l=4*Math.tan(s/4)/3,u=nM:C2&&l.push(e),l}function VG(t,e,n,i,r,o,a,s,l,u){if(EG(t,n)&&EG(e,i)&&EG(r,a)&&EG(o,s))l.push(a,s);else{var h=2/u,c=h*h,p=a-t,d=s-e,f=Math.sqrt(p*p+d*d);p/=f,d/=f;var g=n-t,y=i-e,v=r-a,m=o-s,x=g*g+y*y,_=v*v+m*m;if(x=0&&_-w*w=0)l.push(a,s);else{var S=[],M=[];wn(t,n,r,a,.5,S),wn(e,i,o,s,.5,M),VG(S[0],M[0],S[1],M[1],S[2],M[2],S[3],M[3],l,u),VG(S[4],M[4],S[5],M[5],S[6],M[6],S[7],M[7],l,u)}}}}function BG(t,e,n){var i=t[e],r=t[1-e],o=Math.abs(i/r),a=Math.ceil(Math.sqrt(o*n)),s=Math.floor(n/a);0===s&&(s=1,a=n);for(var l=[],u=0;u0)for(u=0;uMath.abs(u),c=BG([l,u],h?0:1,e),p=(h?s:u)/c.length,d=0;d1?null:new De(d*l+t,d*u+e)}function HG(t,e,n){var i=new De;De.sub(i,n,e),i.normalize();var r=new De;return De.sub(r,t,e),r.dot(i)}function YG(t,e){var n=t[t.length-1];n&&n[0]===e[0]&&n[1]===e[1]||t.push(e)}function XG(t){var e=t.points,n=[],i=[];Ba(e,n,i);var r=new ze(n[0],n[1],i[0]-n[0],i[1]-n[1]),o=r.width,a=r.height,s=r.x,l=r.y,u=new De,h=new De;return o>a?(u.x=h.x=s+o/2,u.y=l,h.y=l+a):(u.y=h.y=l+a/2,u.x=s,h.x=s+o),function(t,e,n){for(var i=t.length,r=[],o=0;or,a=BG([i,r],o?0:1,e),s=o?"width":"height",l=o?"height":"width",u=o?"x":"y",h=o?"y":"x",c=t[s]/a.length,p=0;p0)for(var b=i/n,w=-i/2;w<=i/2;w+=b){var S=Math.sin(w),M=Math.cos(w),I=0;for(x=0;x0;l/=2){var u=0,h=0;(t&l)>0&&(u=1),(e&l)>0&&(h=1),s+=l*l*(3*u^h),0===h&&(1===u&&(t=l-1-t,e=l-1-e),a=t,t=e,e=a)}return s}function lW(t){var e=1/0,n=1/0,i=-1/0,r=-1/0,o=z(t,(function(t){var o=t.getBoundingRect(),a=t.getComputedTransform(),s=o.x+o.width/2+(a?a[4]:0),l=o.y+o.height/2+(a?a[5]:0);return e=Math.min(s,e),n=Math.min(l,n),i=Math.max(s,i),r=Math.max(l,r),[s,l]}));return z(o,(function(o,a){return{cp:o,z:sW(o[0],o[1],e,n,i,r),path:t[a]}})).sort((function(t,e){return t.z-e.z})).map((function(t){return t.path}))}function uW(t){return jG(t.path,t.count)}function hW(t){return Y(t[0])}function cW(t,e){for(var n=[],i=t.length,r=0;r=0;r--)if(!n[r].many.length){var l=n[s].many;if(l.length<=1){if(!s)return n;s=0}o=l.length;var u=Math.ceil(o/2);n[r].many=l.slice(u,o),n[s].many=l.slice(0,u),s++}return n}var pW={clone:function(t){for(var e=[],n=1-Math.pow(1-t.path.style.opacity,1/t.count),i=0;i0){var s,l,u=i.getModel("universalTransition").get("delay"),h=Object.assign({setToFinal:!0},a);hW(t)&&(s=t,l=e),hW(e)&&(s=e,l=t);for(var c=s?s===t:t.length>e.length,p=s?cW(l,s):cW(c?e:t,[c?t:e]),d=0,f=0;f1e4))for(var r=n.getIndices(),o=0;o0&&i.group.traverse((function(t){t instanceof ks&&!t.animators.length&&t.animateFrom({style:{opacity:0}},r)}))}))}function SW(t){var e=t.getModel("universalTransition").get("seriesKey");return e||t.id}function MW(t){return Y(t)?t.sort().join(","):t}function IW(t){if(t.hostModel)return t.hostModel.getModel("universalTransition").get("divideShape")}function TW(t,e){for(var n=0;n=0&&r.push({dataGroupId:e.oldDataGroupIds[n],data:e.oldData[n],divide:IW(e.oldData[n]),groupIdDim:t.dimension})})),E(To(t.to),(function(t){var i=TW(n.updatedSeries,t);if(i>=0){var r=n.updatedSeries[i].getData();o.push({dataGroupId:e.oldDataGroupIds[i],data:r,divide:IW(r),groupIdDim:t.dimension})}})),r.length>0&&o.length>0&&wW(r,o,i)}(t,i,n,e)}));else{var o=function(t,e){var n=yt(),i=yt(),r=yt();return E(t.oldSeries,(function(e,n){var o=t.oldDataGroupIds[n],a=t.oldData[n],s=SW(e),l=MW(s);i.set(l,{dataGroupId:o,data:a}),Y(s)&&E(s,(function(t){r.set(t,{key:l,dataGroupId:o,data:a})}))})),E(e.updatedSeries,(function(t){if(t.isUniversalTransitionEnabled()&&t.isAnimationEnabled()){var e=t.get("dataGroupId"),o=t.getData(),a=SW(t),s=MW(a),l=i.get(s);if(l)n.set(s,{oldSeries:[{dataGroupId:l.dataGroupId,divide:IW(l.data),data:l.data}],newSeries:[{dataGroupId:e,divide:IW(o),data:o}]});else if(Y(a)){var u=[];E(a,(function(t){var e=i.get(t);e.data&&u.push({dataGroupId:e.dataGroupId,divide:IW(e.data),data:e.data})})),u.length&&n.set(s,{oldSeries:u,newSeries:[{dataGroupId:e,data:o,divide:IW(o)}]})}else{var h=r.get(a);if(h){var c=n.get(h.key);c||(c={oldSeries:[{dataGroupId:h.dataGroupId,data:h.data,divide:IW(h.data)}],newSeries:[]},n.set(h.key,c)),c.newSeries.push({dataGroupId:e,data:o,divide:IW(o)})}}}})),n}(i,n);E(o.keys(),(function(t){var n=o.get(t);wW(n.oldSeries,n.newSeries,e)}))}E(n.updatedSeries,(function(t){t[_g]&&(t[_g]=!1)}))}for(var a=t.getSeries(),s=i.oldSeries=[],l=i.oldDataGroupIds=[],u=i.oldData=[],h=0;h + + + + 修改密码 + + + + +
                +
                +
                +
                +
                + +
                + +
                +
                + +
                + +
                + +
                +
                + +
                + +
                + +
                +
                + +
                +
                + + +
                +
                +
                +
                +
                +
                + + + + + \ No newline at end of file diff --git a/web/templates/admin/dashboard.html b/web/templates/admin/dashboard.html new file mode 100644 index 0000000..1e043b3 --- /dev/null +++ b/web/templates/admin/dashboard.html @@ -0,0 +1,54 @@ + + + + + 控制台 + + + + +
                +
                +
                +
                +
                设备总数
                +
                0
                +
                +
                +
                +
                +
                授权码总数
                +
                0
                +
                +
                +
                +
                +
                今日新增
                +
                0
                +
                +
                +
                +
                +
                在线设备
                +
                0
                +
                +
                +
                +
                +
                激活设备
                +
                0
                +
                +
                +
                +
                +
                过期设备
                +
                0
                +
                +
                +
                +
                + + + + + \ No newline at end of file diff --git a/web/templates/admin/device-files.html b/web/templates/admin/device-files.html new file mode 100644 index 0000000..181ce5f --- /dev/null +++ b/web/templates/admin/device-files.html @@ -0,0 +1,119 @@ + + + + + 设备文件管理 + + + + +
                +
                +
                + 设备文件管理 +
                + + +
                +
                +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                +
                +
                + + + + + + + + + + + + + + + + +
                文件名设备型号版本类型大小下载次数上传时间操作
                +
                +
                +
                + + + + + + + + \ No newline at end of file diff --git a/web/templates/admin/device-license.html b/web/templates/admin/device-license.html new file mode 100644 index 0000000..c2e1c3b --- /dev/null +++ b/web/templates/admin/device-license.html @@ -0,0 +1,129 @@ + + + + + 设备授权管理 + + + + +
                +
                +
                + 设备授权管理 +
                +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + + +
                +
                +
                + + +
                +
                +
                +
                + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/templates/admin/devices.html b/web/templates/admin/devices.html new file mode 100644 index 0000000..9b420cf --- /dev/null +++ b/web/templates/admin/devices.html @@ -0,0 +1,213 @@ + + + + + + + 设备管理 + + + + + + + +
                +
                +
                + 设备型号管理 + + +
                + +
                + + +
                +
                +
                + + +
                + +
                +
                + +
                + + +
                + +
                +
                + +
                + + +
                + +
                +
                + +
                + + + +
                +
                +
                + + + +
                +
                +
                +
                + + + + + + + + + + + + + + + + + + diff --git a/web/templates/admin/license-logs.html b/web/templates/admin/license-logs.html new file mode 100644 index 0000000..aa01985 --- /dev/null +++ b/web/templates/admin/license-logs.html @@ -0,0 +1,172 @@ + + + + + 授权码操作日志 + + + + +
                +
                +
                + 授权码操作日志 +
                + + +
                +
                +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                +
                +
                + + +
                +
                +
                +
                + + + + + + + + + + + \ No newline at end of file diff --git a/web/templates/admin/licenses.html b/web/templates/admin/licenses.html new file mode 100644 index 0000000..4458acd --- /dev/null +++ b/web/templates/admin/licenses.html @@ -0,0 +1,263 @@ + + + + + + + 授权码管理 + + + + + + + +
                +
                +
                + 授权码管理 + + +
                + +
                + + +
                +
                +
                + + +
                + +
                +
                + +
                + + +
                + +
                +
                + +
                + + +
                + +
                +
                + +
                + + +
                + +
                +
                + +
                + + + +
                +
                +
                + + + +
                +
                +
                +
                + + + + + + + + + + + + + + + + + + diff --git a/web/templates/admin/monitor.html b/web/templates/admin/monitor.html new file mode 100644 index 0000000..21ba3d2 --- /dev/null +++ b/web/templates/admin/monitor.html @@ -0,0 +1,325 @@ + + + + + + + + + 系统监控 + + + + + + + + + +
                + + + +
                + +
                + +
                + +
                运行时间
                + +
                + + 0天0小时0分钟 + +
                + +
                + +
                + +
                + +
                + +
                活跃用户
                + +
                + + 0 + +
                + +
                + +
                + +
                + +
                + +
                设备总数
                + +
                + + 0 + +
                + +
                + +
                + +
                + +
                + +
                系统负载
                + +
                + + 0.00 + +
                + +
                + +
                + +
                + + + + + +
                + +
                + +
                + +
                CPU使用率
                + +
                + +
                + +
                + +
                + +
                + +
                + +
                + +
                内存使用情况
                + +
                + +
                + +
                + +
                + +
                + +
                + + + + + +
                + +
                + +
                + +
                磁盘使用情况
                + +
                + +
                + +
                + +
                + +
                + +
                + +
                + +
                网络流量
                + +
                + +
                + +
                + +
                + +
                + +
                + + + + + +
                + +
                + +
                + +
                + + 进程列表(Top 10) + + 0 + +
                + +
                + + + + + + + + + + + + + + + + + + + + + + + +
                PID名称CPU使用率内存使用率运行时间
                + +
                + +
                + +
                + +
                + +
                + +
                系统信息
                + +
                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                主机名
                操作系统
                平台
                内核版本
                CPU型号
                CPU核心数
                启动时间
                + +
                + +
                + +
                + +
                + +
                + + + + + + + + + + + + + + diff --git a/web/templates/admin/site-settings.html b/web/templates/admin/site-settings.html new file mode 100644 index 0000000..a6bf234 --- /dev/null +++ b/web/templates/admin/site-settings.html @@ -0,0 +1,185 @@ + + + + + 站点设置 + + + + +
                +
                +
                站点设置
                +
                +
                +
                + +
                + +
                +
                + +
                + +
                + +
                +
                + +
                + +
                + +
                +
                + +
                + +
                + +
                +
                + +
                + +
                + +
                +
                + +
                + +
                + +
                +
                + +
                +
                + +
                +
                + +
                + +
                + +
                +
                + +
                +
                + +
                +
                + +
                +
                + + +
                +
                +
                +
                +
                +
                + + + + + \ No newline at end of file diff --git a/web/templates/admin/token-logs.html b/web/templates/admin/token-logs.html new file mode 100644 index 0000000..720076c --- /dev/null +++ b/web/templates/admin/token-logs.html @@ -0,0 +1,69 @@ + + + + + 令牌使用日志 + + + + +
                +
                +
                令牌使用日志
                +
                +
                +
                +
                +
                + + + + + + + + + + + \ No newline at end of file diff --git a/web/templates/admin/tokens.html b/web/templates/admin/tokens.html new file mode 100644 index 0000000..3c1a2ad --- /dev/null +++ b/web/templates/admin/tokens.html @@ -0,0 +1,130 @@ + + + + + 访问令牌管理 + + + + +
                +
                +
                + 访问令牌管理 + +
                +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                +
                +
                + + +
                +
                +
                +
                + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/templates/admin/user-edit.html b/web/templates/admin/user-edit.html new file mode 100644 index 0000000..2e379d0 --- /dev/null +++ b/web/templates/admin/user-edit.html @@ -0,0 +1,126 @@ + + + + + 编辑用户 + + + + +
                +
                +
                +
                + + +
                + +
                + +
                +
                + +
                + +
                + +
                +
                + +
                + +
                + +
                +
                + +
                +
                + + +
                +
                +
                +
                +
                +
                + + + + + \ No newline at end of file diff --git a/web/templates/admin/users.html b/web/templates/admin/users.html new file mode 100644 index 0000000..05c8c20 --- /dev/null +++ b/web/templates/admin/users.html @@ -0,0 +1,124 @@ + + + + + 用户管理 + + + + +
                +
                +
                + 用户管理 + +
                +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                + +
                +
                +
                + +
                +
                +
                + + +
                +
                +
                +
                + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/templates/index.html b/web/templates/index.html new file mode 100644 index 0000000..066e97a --- /dev/null +++ b/web/templates/index.html @@ -0,0 +1,111 @@ + + + + + 授权验证管理平台 + + + + + + + + + + diff --git a/web/templates/login.html b/web/templates/login.html new file mode 100644 index 0000000..5c18bea --- /dev/null +++ b/web/templates/login.html @@ -0,0 +1,49 @@ + + + + + 登录 - 授权验证管理平台 + + + + +
                +
                +
                + +
                +
                +
                + + + + \ No newline at end of file