From f4d3b89db5fb5436df736f8d2c1ca3de31e97d09 Mon Sep 17 00:00:00 2001 From: manxiaoqiang <manxiaoqiang@reyun.com> Date: Mon, 26 Feb 2018 17:15:25 +0800 Subject: [PATCH] new --- lib/cat-client-2.0.0.jar | Bin 0 -> 231494 bytes lib/cat-core-2.0.0.jar | Bin 0 -> 2855758 bytes lib/foundation-service-4.0.0.jar | Bin 0 -> 318108 bytes src/main/java/com/reyun/context/AppUtils.java | 23 +++++++++++++++++++++++ src/main/java/com/reyun/controller/AccountController.java | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/controller/AppController.java | 40 ++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/controller/CustomMenuController.java | 319 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/controller/EventController.java | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/controller/EventStatsController.java | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/controller/ExpressionController.java | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/controller/FunnelController.java | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/controller/manage/ExportReportInfoController.java | 259 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/dic/AppPlatformEnum.java | 29 +++++++++++++++++++++++++++++ src/main/java/com/reyun/dic/ChannelCategoryEnumType.java | 27 +++++++++++++++++++++++++++ src/main/java/com/reyun/dic/ChannelEnumType.java | 39 +++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/dic/ConfigEnumType.java | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/dic/CustomMenuType.java | 36 ++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/dic/DataViewEnumType.java | 41 +++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/dic/DivEnumType.java | 31 +++++++++++++++++++++++++++++++ src/main/java/com/reyun/dic/DownloadEnumType.java | 29 +++++++++++++++++++++++++++++ src/main/java/com/reyun/dic/DownloadStatusEnumType.java | 29 +++++++++++++++++++++++++++++ src/main/java/com/reyun/dic/FunctionEnumType.java | 40 ++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/exception/GlobalExceptionAdvice.java | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/Account.java | 558 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/AccountRestrict4Web.java | 195 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/App.java | 302 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/AttributeRestrict.java | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/Auth.java | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/BussinessMan.java | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/Category.java | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/CommonEvent.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/CommonIP.java | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/CommonParam.java | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/ComplicatedParam.java | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/ConfigParam.java | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/CustomMenu.java | 221 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/CustomMenuFavorites.java | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/CustomMenuShare.java | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/CustomMenuShareTemplate.java | 228 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/CustomMenuTemplate.java | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/DataAuth.java | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/DataParam.java | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/DemoAppointment.java | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/Dimension4Web.java | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/EditionPricingLevel4Web.java | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/Email.java | 42 ++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/Event.java | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/Event4Web.java | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/EventAttr4Web.java | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/EventAttributeMeta.java | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/EventMapPK.java | 38 ++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/EventMeta.java | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/EventStats.java | 147 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/EventViewAttr.java | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/EventtableMetadata.java | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/ExportReportInfo.java | 193 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/model/Funnel.java | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/AccountRepository.java | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/AppRepository.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/AttributeRestrictRepository.java | 19 +++++++++++++++++++ src/main/java/com/reyun/repository/AuthRepository.java | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/BussinessManRepository.java | 8 ++++++++ src/main/java/com/reyun/repository/CategoryRepository.java | 19 +++++++++++++++++++ src/main/java/com/reyun/repository/CommonEventRepository.java | 23 +++++++++++++++++++++++ src/main/java/com/reyun/repository/CommonIPRepository.java | 31 +++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/CommonParamRepository.java | 25 +++++++++++++++++++++++++ src/main/java/com/reyun/repository/ComplicatedParamRepository.java | 21 +++++++++++++++++++++ src/main/java/com/reyun/repository/ConfigParamRepository.java | 19 +++++++++++++++++++ src/main/java/com/reyun/repository/CustomMenuFavoritesRepository.java | 42 ++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/CustomMenuRepository.java | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/CustomMenuShareRepository.java | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/CustomMenuShareTempRepository.java | 25 +++++++++++++++++++++++++ src/main/java/com/reyun/repository/CustomMenuTemplateRepository.java | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/DataAuthRepository.java | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/DataParamRepository.java | 10 ++++++++++ src/main/java/com/reyun/repository/DemoAppointmentRepository.java | 18 ++++++++++++++++++ src/main/java/com/reyun/repository/EventAttributeMetaRepository.java | 28 ++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/EventMetaRepository.java | 30 ++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/EventRepository.java | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/EventStatsRepository.java | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/EventViewAttrRepository.java | 20 ++++++++++++++++++++ src/main/java/com/reyun/repository/EventtableMetadataRepository.java | 15 +++++++++++++++ src/main/java/com/reyun/repository/ExportReportInfoRepository.java | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/repository/FunnelRepository.java | 21 +++++++++++++++++++++ src/main/java/com/reyun/security/AbstractTokenManager.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/security/annotation/Authorization.java | 12 ++++++++++++ src/main/java/com/reyun/security/annotation/CurrentAccount.java | 15 +++++++++++++++ src/main/java/com/reyun/security/cors/CorsFilter.java | 32 ++++++++++++++++++++++++++++++++ src/main/java/com/reyun/security/interceptor/AuthorizationInterceptor.java | 264 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/AppService.java | 36 ++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/AuthService.java | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/CommonIPService.java | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/CommonParamService.java | 19 +++++++++++++++++++ src/main/java/com/reyun/service/ComplicateEventsService.java | 33 +++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/ConfigParamService.java | 26 ++++++++++++++++++++++++++ src/main/java/com/reyun/service/CustomMenuService.java | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/DemoAppointmentService.java | 19 +++++++++++++++++++ src/main/java/com/reyun/service/DemoService.java | 11 +++++++++++ src/main/java/com/reyun/service/EventService.java | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/EventStatsService.java | 29 +++++++++++++++++++++++++++++ src/main/java/com/reyun/service/ExportReportInfoService.java | 29 +++++++++++++++++++++++++++++ src/main/java/com/reyun/service/ExpressionService.java | 23 +++++++++++++++++++++++ src/main/java/com/reyun/service/FunnelService.java | 28 ++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/AppServiceImpl.java | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/AuthServiceImpl.java | 1252 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/CommonIPServiceImpl.java | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/CommonParamServiceImpl.java | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/ComplicatedEventsServiceImpl.java | 1262 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/ConfigParamServiceImpl.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/CustomMenuServiceImpl.java | 1119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/DemoAppointmentServiceImpl.java | 37 +++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/DemoServiceImpl.java | 21 +++++++++++++++++++++ src/main/java/com/reyun/service/impl/EventServiceImpl.java | 1503 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/EventStatsServiceImpl.java | 687 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/ExportReportInfoServiceImpl.java | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/ExpressionServiceImpl.java | 584 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/service/impl/FunnelServiceImpl.java | 433 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/task/EmailThread.java | 39 +++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/taskexecute/EventReportCallable.java | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/util/AwsS3Util.java | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/util/BeanUtils.java | 22 ++++++++++++++++++++++ src/main/java/com/reyun/util/CharacterUtils.java | 23 +++++++++++++++++++++++ src/main/java/com/reyun/util/CipherUtil.java | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/util/Constant.java | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/util/DBUtil.java | 230 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/util/DateUtil.java | 1518 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/util/DateUtil1.java | 1496 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/util/EventRedisUtil.java | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/util/ExcelUtil.java | 190 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/util/ExportReportUtil.java | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/com/reyun/util/GeneratePwd8.java | 33 +++++++++++++++++++++++++++++++++ src/main/resources/17monipdb.dat | Bin 0 -> 2657479 bytes src/main/resources/META-INF/app.properties | 1 + src/main/resources/applicationContext-schedule.xml | 12 ++++++++++++ src/main/resources/applicationContext.xml | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/resources/common.properties | 4 ++++ src/main/resources/db.properties | 4 ++++ src/main/resources/upgrade/feature_20170911_blacklist.sql | 1 + src/main/resources/upgrade/feature_20170911_shenmalogin.sql | 6 ++++++ src/main/websrc/404.html | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/502.html | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/504.html | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/activation.html | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/demo.html | 38 ++++++++++++++++++++++++++++++++++++++ src/main/websrc/failure.html | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/favicon.ico | Bin 0 -> 140206 bytes src/main/websrc/font/demo_fontclass.html | 256 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/font/svg/android.svg | 24 ++++++++++++++++++++++++ src/main/websrc/font/svg/app.svg | 12 ++++++++++++ src/main/websrc/font/svg/asmeffectevaluate.svg | 11 +++++++++++ src/main/websrc/font/svg/attribute.svg | 10 ++++++++++ src/main/websrc/font/svg/auth.svg | 11 +++++++++++ src/main/websrc/font/svg/campaign.svg | 10 ++++++++++ src/main/websrc/font/svg/campaigninfo.svg | 10 ++++++++++ src/main/websrc/font/svg/channel.svg | 20 ++++++++++++++++++++ src/main/websrc/font/svg/channeleffect.svg | 10 ++++++++++ src/main/websrc/font/svg/costrecovery.svg | 13 +++++++++++++ src/main/websrc/font/svg/custommenu.svg | 14 ++++++++++++++ src/main/websrc/font/svg/customset.svg | 11 +++++++++++ src/main/websrc/font/svg/dashboard.svg | 10 ++++++++++ src/main/websrc/font/svg/effectevaluate.svg | 11 +++++++++++ src/main/websrc/font/svg/event.svg | 10 ++++++++++ src/main/websrc/font/svg/eventlist.svg | 11 +++++++++++ src/main/websrc/font/svg/eventstats.svg | 13 +++++++++++++ src/main/websrc/font/svg/funnel.svg | 10 ++++++++++ src/main/websrc/forget.html | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/images/0415.png | Bin 0 -> 3541 bytes src/main/websrc/images/0416.png | Bin 0 -> 4088 bytes src/main/websrc/images/add.gif | Bin 0 -> 6197 bytes src/main/websrc/images/add03.png | Bin 0 -> 3021 bytes src/main/websrc/images/adddis.png | Bin 0 -> 114 bytes src/main/websrc/images/allow-right.png | Bin 0 -> 2992 bytes src/main/websrc/images/arrow.png | Bin 0 -> 1098 bytes src/main/websrc/images/arrow1.png | Bin 0 -> 1407 bytes src/main/websrc/images/arrow2.png | Bin 0 -> 1458 bytes src/main/websrc/images/auth.png | Bin 0 -> 2726 bytes src/main/websrc/images/behavior.png | Bin 0 -> 3746 bytes src/main/websrc/images/bottom.png | Bin 0 -> 421 bytes src/main/websrc/images/camp01.png | Bin 0 -> 3146 bytes src/main/websrc/images/channelmore.png | Bin 0 -> 1310 bytes src/main/websrc/images/chartarrow.png | Bin 0 -> 1260 bytes src/main/websrc/images/chartarrow2.png | Bin 0 -> 264 bytes src/main/websrc/images/close.png | Bin 0 -> 235251 bytes src/main/websrc/images/close1.png | Bin 0 -> 332 bytes src/main/websrc/images/complex.png | Bin 0 -> 704 bytes src/main/websrc/images/coop/h1.png | Bin 0 -> 5010 bytes src/main/websrc/images/coop/h10.png | Bin 0 -> 4645 bytes src/main/websrc/images/coop/h100.png | Bin 0 -> 4491 bytes src/main/websrc/images/coop/h101.png | Bin 0 -> 4909 bytes src/main/websrc/images/coop/h11.png | Bin 0 -> 5557 bytes src/main/websrc/images/coop/h12.png | Bin 0 -> 5688 bytes src/main/websrc/images/coop/h13.png | Bin 0 -> 4126 bytes src/main/websrc/images/coop/h14.png | Bin 0 -> 4023 bytes src/main/websrc/images/coop/h15.png | Bin 0 -> 4758 bytes src/main/websrc/images/coop/h16.png | Bin 0 -> 3441 bytes src/main/websrc/images/coop/h17.png | Bin 0 -> 3060 bytes src/main/websrc/images/custom.png | Bin 0 -> 15440 bytes src/main/websrc/images/custommenu01.png | Bin 0 -> 17103 bytes src/main/websrc/images/demo.png | Bin 0 -> 12532 bytes src/main/websrc/images/demoRight.png | Bin 0 -> 1201 bytes src/main/websrc/images/empty.png | Bin 0 -> 3117 bytes src/main/websrc/images/erweima.png | Bin 0 -> 13978 bytes src/main/websrc/images/event.png | Bin 0 -> 1378 bytes src/main/websrc/images/expiration.png | Bin 0 -> 4178 bytes src/main/websrc/images/export01.png | Bin 0 -> 1380 bytes src/main/websrc/images/first01.png | Bin 0 -> 7464 bytes src/main/websrc/images/first1.png | Bin 0 -> 13920 bytes src/main/websrc/images/first2.png | Bin 0 -> 14518 bytes src/main/websrc/images/first_1.png | Bin 0 -> 8149 bytes src/main/websrc/images/link/1.png | Bin 0 -> 2632 bytes src/main/websrc/images/link/10.png | Bin 0 -> 1914 bytes src/main/websrc/images/link/11.png | Bin 0 -> 2271 bytes src/main/websrc/images/link/2.png | Bin 0 -> 2684 bytes src/main/websrc/images/link/3.png | Bin 0 -> 2997 bytes src/main/websrc/images/link/4.png | Bin 0 -> 3573 bytes src/main/websrc/images/link/5.png | Bin 0 -> 2251 bytes src/main/websrc/images/link/6.png | Bin 0 -> 2286 bytes src/main/websrc/images/link/7.png | Bin 0 -> 2201 bytes src/main/websrc/images/link/8.png | Bin 0 -> 2299 bytes src/main/websrc/images/link/9.png | Bin 0 -> 1712 bytes src/main/websrc/js/app/DateDirective.js | 791 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/app/DateService.js | 231 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/app/app.js | 394 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/app/config.js | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/app/directive.js | 2038 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/app/filter.js | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/collect/custommenu.js | 1370 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/collect/eventstats.js | 1871 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/collect/expiration.js | 9 +++++++++ src/main/websrc/js/collect/funnel.js | 649 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/common/angular-animate.min.js | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/common/angular-ui-router.min.js | 7 +++++++ src/main/websrc/js/common/angular.min.js | 295 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/common/china.js | 27 +++++++++++++++++++++++++++ src/main/websrc/js/common/clipboard.min.js | 7 +++++++ src/main/websrc/js/common/date-utils.js | 762 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/common/dates.js | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/common/echarts.min.js | 35 +++++++++++++++++++++++++++++++++++ src/main/websrc/js/common/esl.js | 1 + src/main/websrc/js/home/demolist.js | 21 +++++++++++++++++++++ src/main/websrc/js/login/acvitation.js | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/login/echarts-all.js | 35 +++++++++++++++++++++++++++++++++++ src/main/websrc/js/login/failure.js | 40 ++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/login/forget.js | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/manage/activityevent.js | 236 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/manage/app.js | 483 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/manage/auth.js | 379 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/manage/channel.js | 1874 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/js/manage/event.js | 213 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/styles/animate.scss | 1068 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/collect/custommenu.html | 442 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/collect/eventstats.html | 312 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/collect/funnel.html | 192 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/common/channel.html | 30 ++++++++++++++++++++++++++++++ src/main/websrc/template/common/chart.html | 40 ++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/common/custom.html | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/common/datemonth.html | 36 ++++++++++++++++++++++++++++++++++++ src/main/websrc/template/common/datepicker.html | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/common/daterange.html | 8 ++++++++ src/main/websrc/template/common/dateweek.html | 36 ++++++++++++++++++++++++++++++++++++ src/main/websrc/template/common/delwin.html | 15 +++++++++++++++ src/main/websrc/template/common/export.html | 3 +++ src/main/websrc/template/common/flipinfo.html | 12 ++++++++++++ src/main/websrc/template/common/flipinfody.html | 12 ++++++++++++ src/main/websrc/template/home/demolist.html | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/manage/activityevent.html | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/manage/activityeventDetail.html | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/manage/app.html | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/manage/appDetail.html | 247 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/manage/auth.html | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/manage/authDetail.html | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/manage/event.html | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main/websrc/template/manage/img/1.png | Bin 0 -> 23888 bytes src/main/websrc/template/manage/img/2.png | Bin 0 -> 4817 bytes src/main/websrc/template/manage/img/3.png | Bin 0 -> 9730 bytes src/main/websrc/template/manage/img/4.png | Bin 0 -> 12485 bytes src/main/websrc/template/manage/img/5.png | Bin 0 -> 3970 bytes src/main/websrc/template/manage/img/addchannel.png | Bin 0 -> 30398 bytes src/main/websrc/template/manage/img/addchannel2.png | Bin 0 -> 41940 bytes src/main/websrc/template/manage/img/addchannel3.png | Bin 0 -> 43785 bytes src/main/websrc/template/manage/img/adwords/1.png | Bin 0 -> 10016 bytes src/main/websrc/template/manage/img/adwords/2.png | Bin 0 -> 8243 bytes src/main/websrc/template/manage/img/adwords/3.png | Bin 0 -> 21634 bytes src/main/websrc/template/manage/img/adwords/4.png | Bin 0 -> 80490 bytes src/main/websrc/template/manage/img/adwords/5.png | Bin 0 -> 91151 bytes src/main/websrc/template/manage/img/adwords/6.png | Bin 0 -> 23890 bytes src/main/websrc/template/manage/img/baidu1.png | Bin 0 -> 46983 bytes src/main/websrc/template/manage/img/baidu2.png | Bin 0 -> 39127 bytes src/main/websrc/template/manage/img/baidudsp.png | Bin 0 -> 54203 bytes src/main/websrc/template/manage/img/wxmp/1.png | Bin 0 -> 62462 bytes src/main/websrc/template/manage/img/wxmp/2.png | Bin 0 -> 52583 bytes src/main/websrc/template/manage/img/wxmp/3.png | Bin 0 -> 35034 bytes src/main/websrc/template/manage/img/wxmp/4.png | Bin 0 -> 48139 bytes src/main/websrc/template/manage/img/wxmp/5.png | Bin 0 -> 44892 bytes src/main/websrc/template/manage/img/zht/1.png | Bin 0 -> 35948 bytes src/main/websrc/template/manage/img/zht/2.png | Bin 0 -> 35435 bytes src/main/websrc/template/manage/img/zht/3.png | Bin 0 -> 49648 bytes src/main/websrc/template/manage/img/zht/4.png | Bin 0 -> 43035 bytes src/main/websrc/template/menu/collect.html | 183 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 299 files changed, 36484 insertions(+) create mode 100644 lib/cat-client-2.0.0.jar create mode 100644 lib/cat-core-2.0.0.jar create mode 100644 lib/foundation-service-4.0.0.jar create mode 100644 src/main/java/com/reyun/context/AppUtils.java create mode 100644 src/main/java/com/reyun/controller/AccountController.java create mode 100644 src/main/java/com/reyun/controller/AppController.java create mode 100644 src/main/java/com/reyun/controller/CustomMenuController.java create mode 100644 src/main/java/com/reyun/controller/EventController.java create mode 100644 src/main/java/com/reyun/controller/EventStatsController.java create mode 100644 src/main/java/com/reyun/controller/ExpressionController.java create mode 100644 src/main/java/com/reyun/controller/FunnelController.java create mode 100644 src/main/java/com/reyun/controller/manage/ExportReportInfoController.java create mode 100644 src/main/java/com/reyun/dic/AppPlatformEnum.java create mode 100644 src/main/java/com/reyun/dic/ChannelCategoryEnumType.java create mode 100644 src/main/java/com/reyun/dic/ChannelEnumType.java create mode 100644 src/main/java/com/reyun/dic/ConfigEnumType.java create mode 100644 src/main/java/com/reyun/dic/CustomMenuType.java create mode 100644 src/main/java/com/reyun/dic/DataViewEnumType.java create mode 100644 src/main/java/com/reyun/dic/DivEnumType.java create mode 100644 src/main/java/com/reyun/dic/DownloadEnumType.java create mode 100644 src/main/java/com/reyun/dic/DownloadStatusEnumType.java create mode 100644 src/main/java/com/reyun/dic/FunctionEnumType.java create mode 100644 src/main/java/com/reyun/exception/GlobalExceptionAdvice.java create mode 100644 src/main/java/com/reyun/model/Account.java create mode 100644 src/main/java/com/reyun/model/AccountRestrict4Web.java create mode 100644 src/main/java/com/reyun/model/App.java create mode 100644 src/main/java/com/reyun/model/AttributeRestrict.java create mode 100644 src/main/java/com/reyun/model/Auth.java create mode 100644 src/main/java/com/reyun/model/BussinessMan.java create mode 100644 src/main/java/com/reyun/model/Category.java create mode 100644 src/main/java/com/reyun/model/CommonEvent.java create mode 100644 src/main/java/com/reyun/model/CommonIP.java create mode 100644 src/main/java/com/reyun/model/CommonParam.java create mode 100644 src/main/java/com/reyun/model/ComplicatedParam.java create mode 100644 src/main/java/com/reyun/model/ConfigParam.java create mode 100644 src/main/java/com/reyun/model/CustomMenu.java create mode 100644 src/main/java/com/reyun/model/CustomMenuFavorites.java create mode 100644 src/main/java/com/reyun/model/CustomMenuShare.java create mode 100644 src/main/java/com/reyun/model/CustomMenuShareTemplate.java create mode 100644 src/main/java/com/reyun/model/CustomMenuTemplate.java create mode 100644 src/main/java/com/reyun/model/DataAuth.java create mode 100644 src/main/java/com/reyun/model/DataParam.java create mode 100644 src/main/java/com/reyun/model/DemoAppointment.java create mode 100644 src/main/java/com/reyun/model/Dimension4Web.java create mode 100644 src/main/java/com/reyun/model/EditionPricingLevel4Web.java create mode 100644 src/main/java/com/reyun/model/Email.java create mode 100644 src/main/java/com/reyun/model/Event.java create mode 100644 src/main/java/com/reyun/model/Event4Web.java create mode 100644 src/main/java/com/reyun/model/EventAttr4Web.java create mode 100644 src/main/java/com/reyun/model/EventAttributeMeta.java create mode 100644 src/main/java/com/reyun/model/EventMapPK.java create mode 100644 src/main/java/com/reyun/model/EventMeta.java create mode 100644 src/main/java/com/reyun/model/EventStats.java create mode 100644 src/main/java/com/reyun/model/EventViewAttr.java create mode 100644 src/main/java/com/reyun/model/EventtableMetadata.java create mode 100644 src/main/java/com/reyun/model/ExportReportInfo.java create mode 100644 src/main/java/com/reyun/model/Funnel.java create mode 100644 src/main/java/com/reyun/repository/AccountRepository.java create mode 100644 src/main/java/com/reyun/repository/AppRepository.java create mode 100644 src/main/java/com/reyun/repository/AttributeRestrictRepository.java create mode 100644 src/main/java/com/reyun/repository/AuthRepository.java create mode 100644 src/main/java/com/reyun/repository/BussinessManRepository.java create mode 100644 src/main/java/com/reyun/repository/CategoryRepository.java create mode 100644 src/main/java/com/reyun/repository/CommonEventRepository.java create mode 100644 src/main/java/com/reyun/repository/CommonIPRepository.java create mode 100644 src/main/java/com/reyun/repository/CommonParamRepository.java create mode 100644 src/main/java/com/reyun/repository/ComplicatedParamRepository.java create mode 100644 src/main/java/com/reyun/repository/ConfigParamRepository.java create mode 100644 src/main/java/com/reyun/repository/CustomMenuFavoritesRepository.java create mode 100644 src/main/java/com/reyun/repository/CustomMenuRepository.java create mode 100644 src/main/java/com/reyun/repository/CustomMenuShareRepository.java create mode 100644 src/main/java/com/reyun/repository/CustomMenuShareTempRepository.java create mode 100644 src/main/java/com/reyun/repository/CustomMenuTemplateRepository.java create mode 100644 src/main/java/com/reyun/repository/DataAuthRepository.java create mode 100644 src/main/java/com/reyun/repository/DataParamRepository.java create mode 100644 src/main/java/com/reyun/repository/DemoAppointmentRepository.java create mode 100644 src/main/java/com/reyun/repository/EventAttributeMetaRepository.java create mode 100644 src/main/java/com/reyun/repository/EventMetaRepository.java create mode 100644 src/main/java/com/reyun/repository/EventRepository.java create mode 100644 src/main/java/com/reyun/repository/EventStatsRepository.java create mode 100644 src/main/java/com/reyun/repository/EventViewAttrRepository.java create mode 100644 src/main/java/com/reyun/repository/EventtableMetadataRepository.java create mode 100644 src/main/java/com/reyun/repository/ExportReportInfoRepository.java create mode 100644 src/main/java/com/reyun/repository/FunnelRepository.java create mode 100644 src/main/java/com/reyun/security/AbstractTokenManager.java create mode 100644 src/main/java/com/reyun/security/annotation/Authorization.java create mode 100644 src/main/java/com/reyun/security/annotation/CurrentAccount.java create mode 100644 src/main/java/com/reyun/security/cors/CorsFilter.java create mode 100644 src/main/java/com/reyun/security/interceptor/AuthorizationInterceptor.java create mode 100644 src/main/java/com/reyun/service/AppService.java create mode 100644 src/main/java/com/reyun/service/AuthService.java create mode 100644 src/main/java/com/reyun/service/CommonIPService.java create mode 100644 src/main/java/com/reyun/service/CommonParamService.java create mode 100644 src/main/java/com/reyun/service/ComplicateEventsService.java create mode 100644 src/main/java/com/reyun/service/ConfigParamService.java create mode 100644 src/main/java/com/reyun/service/CustomMenuService.java create mode 100644 src/main/java/com/reyun/service/DemoAppointmentService.java create mode 100644 src/main/java/com/reyun/service/DemoService.java create mode 100644 src/main/java/com/reyun/service/EventService.java create mode 100644 src/main/java/com/reyun/service/EventStatsService.java create mode 100644 src/main/java/com/reyun/service/ExportReportInfoService.java create mode 100644 src/main/java/com/reyun/service/ExpressionService.java create mode 100644 src/main/java/com/reyun/service/FunnelService.java create mode 100644 src/main/java/com/reyun/service/impl/AppServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/AuthServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/CommonIPServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/CommonParamServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/ComplicatedEventsServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/ConfigParamServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/CustomMenuServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/DemoAppointmentServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/DemoServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/EventServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/EventStatsServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/ExportReportInfoServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/ExpressionServiceImpl.java create mode 100644 src/main/java/com/reyun/service/impl/FunnelServiceImpl.java create mode 100644 src/main/java/com/reyun/task/EmailThread.java create mode 100644 src/main/java/com/reyun/taskexecute/EventReportCallable.java create mode 100644 src/main/java/com/reyun/util/AwsS3Util.java create mode 100644 src/main/java/com/reyun/util/BeanUtils.java create mode 100644 src/main/java/com/reyun/util/CharacterUtils.java create mode 100644 src/main/java/com/reyun/util/CipherUtil.java create mode 100644 src/main/java/com/reyun/util/Constant.java create mode 100644 src/main/java/com/reyun/util/DBUtil.java create mode 100644 src/main/java/com/reyun/util/DateUtil.java create mode 100644 src/main/java/com/reyun/util/DateUtil1.java create mode 100644 src/main/java/com/reyun/util/EventRedisUtil.java create mode 100644 src/main/java/com/reyun/util/ExcelUtil.java create mode 100644 src/main/java/com/reyun/util/ExportReportUtil.java create mode 100644 src/main/java/com/reyun/util/GeneratePwd8.java create mode 100644 src/main/resources/17monipdb.dat create mode 100644 src/main/resources/META-INF/app.properties create mode 100644 src/main/resources/applicationContext-schedule.xml create mode 100644 src/main/resources/applicationContext.xml create mode 100644 src/main/resources/common.properties create mode 100644 src/main/resources/db.properties create mode 100644 src/main/resources/upgrade/feature_20170911_blacklist.sql create mode 100644 src/main/resources/upgrade/feature_20170911_shenmalogin.sql create mode 100644 src/main/websrc/404.html create mode 100644 src/main/websrc/502.html create mode 100644 src/main/websrc/504.html create mode 100644 src/main/websrc/activation.html create mode 100644 src/main/websrc/demo.html create mode 100644 src/main/websrc/failure.html create mode 100644 src/main/websrc/favicon.ico create mode 100644 src/main/websrc/font/demo_fontclass.html create mode 100644 src/main/websrc/font/svg/android.svg create mode 100644 src/main/websrc/font/svg/app.svg create mode 100644 src/main/websrc/font/svg/asmeffectevaluate.svg create mode 100644 src/main/websrc/font/svg/attribute.svg create mode 100644 src/main/websrc/font/svg/auth.svg create mode 100644 src/main/websrc/font/svg/campaign.svg create mode 100644 src/main/websrc/font/svg/campaigninfo.svg create mode 100644 src/main/websrc/font/svg/channel.svg create mode 100644 src/main/websrc/font/svg/channeleffect.svg create mode 100644 src/main/websrc/font/svg/costrecovery.svg create mode 100644 src/main/websrc/font/svg/custommenu.svg create mode 100644 src/main/websrc/font/svg/customset.svg create mode 100644 src/main/websrc/font/svg/dashboard.svg create mode 100644 src/main/websrc/font/svg/effectevaluate.svg create mode 100644 src/main/websrc/font/svg/event.svg create mode 100644 src/main/websrc/font/svg/eventlist.svg create mode 100644 src/main/websrc/font/svg/eventstats.svg create mode 100644 src/main/websrc/font/svg/funnel.svg create mode 100644 src/main/websrc/forget.html create mode 100644 src/main/websrc/images/0415.png create mode 100644 src/main/websrc/images/0416.png create mode 100644 src/main/websrc/images/add.gif create mode 100644 src/main/websrc/images/add03.png create mode 100644 src/main/websrc/images/adddis.png create mode 100644 src/main/websrc/images/allow-right.png create mode 100644 src/main/websrc/images/arrow.png create mode 100644 src/main/websrc/images/arrow1.png create mode 100644 src/main/websrc/images/arrow2.png create mode 100644 src/main/websrc/images/auth.png create mode 100644 src/main/websrc/images/behavior.png create mode 100644 src/main/websrc/images/bottom.png create mode 100644 src/main/websrc/images/camp01.png create mode 100644 src/main/websrc/images/channelmore.png create mode 100644 src/main/websrc/images/chartarrow.png create mode 100644 src/main/websrc/images/chartarrow2.png create mode 100644 src/main/websrc/images/close.png create mode 100644 src/main/websrc/images/close1.png create mode 100644 src/main/websrc/images/complex.png create mode 100644 src/main/websrc/images/coop/h1.png create mode 100644 src/main/websrc/images/coop/h10.png create mode 100644 src/main/websrc/images/coop/h100.png create mode 100644 src/main/websrc/images/coop/h101.png create mode 100644 src/main/websrc/images/coop/h11.png create mode 100644 src/main/websrc/images/coop/h12.png create mode 100644 src/main/websrc/images/coop/h13.png create mode 100644 src/main/websrc/images/coop/h14.png create mode 100644 src/main/websrc/images/coop/h15.png create mode 100644 src/main/websrc/images/coop/h16.png create mode 100644 src/main/websrc/images/coop/h17.png create mode 100644 src/main/websrc/images/custom.png create mode 100644 src/main/websrc/images/custommenu01.png create mode 100644 src/main/websrc/images/demo.png create mode 100644 src/main/websrc/images/demoRight.png create mode 100644 src/main/websrc/images/empty.png create mode 100644 src/main/websrc/images/erweima.png create mode 100644 src/main/websrc/images/event.png create mode 100644 src/main/websrc/images/expiration.png create mode 100644 src/main/websrc/images/export01.png create mode 100644 src/main/websrc/images/first01.png create mode 100644 src/main/websrc/images/first1.png create mode 100644 src/main/websrc/images/first2.png create mode 100644 src/main/websrc/images/first_1.png create mode 100644 src/main/websrc/images/link/1.png create mode 100644 src/main/websrc/images/link/10.png create mode 100644 src/main/websrc/images/link/11.png create mode 100644 src/main/websrc/images/link/2.png create mode 100644 src/main/websrc/images/link/3.png create mode 100644 src/main/websrc/images/link/4.png create mode 100644 src/main/websrc/images/link/5.png create mode 100644 src/main/websrc/images/link/6.png create mode 100644 src/main/websrc/images/link/7.png create mode 100644 src/main/websrc/images/link/8.png create mode 100644 src/main/websrc/images/link/9.png create mode 100644 src/main/websrc/js/app/DateDirective.js create mode 100644 src/main/websrc/js/app/DateService.js create mode 100644 src/main/websrc/js/app/app.js create mode 100644 src/main/websrc/js/app/config.js create mode 100644 src/main/websrc/js/app/directive.js create mode 100644 src/main/websrc/js/app/filter.js create mode 100644 src/main/websrc/js/collect/custommenu.js create mode 100644 src/main/websrc/js/collect/eventstats.js create mode 100644 src/main/websrc/js/collect/expiration.js create mode 100644 src/main/websrc/js/collect/funnel.js create mode 100644 src/main/websrc/js/common/angular-animate.min.js create mode 100644 src/main/websrc/js/common/angular-ui-router.min.js create mode 100644 src/main/websrc/js/common/angular.min.js create mode 100644 src/main/websrc/js/common/china.js create mode 100644 src/main/websrc/js/common/clipboard.min.js create mode 100644 src/main/websrc/js/common/date-utils.js create mode 100644 src/main/websrc/js/common/dates.js create mode 100644 src/main/websrc/js/common/echarts.min.js create mode 100644 src/main/websrc/js/common/esl.js create mode 100644 src/main/websrc/js/home/demolist.js create mode 100644 src/main/websrc/js/login/acvitation.js create mode 100644 src/main/websrc/js/login/echarts-all.js create mode 100644 src/main/websrc/js/login/failure.js create mode 100644 src/main/websrc/js/login/forget.js create mode 100644 src/main/websrc/js/manage/activityevent.js create mode 100644 src/main/websrc/js/manage/app.js create mode 100644 src/main/websrc/js/manage/auth.js create mode 100644 src/main/websrc/js/manage/channel.js create mode 100644 src/main/websrc/js/manage/event.js create mode 100644 src/main/websrc/styles/animate.scss create mode 100644 src/main/websrc/template/collect/custommenu.html create mode 100644 src/main/websrc/template/collect/eventstats.html create mode 100644 src/main/websrc/template/collect/funnel.html create mode 100644 src/main/websrc/template/common/channel.html create mode 100644 src/main/websrc/template/common/chart.html create mode 100644 src/main/websrc/template/common/custom.html create mode 100644 src/main/websrc/template/common/datemonth.html create mode 100644 src/main/websrc/template/common/datepicker.html create mode 100644 src/main/websrc/template/common/daterange.html create mode 100644 src/main/websrc/template/common/dateweek.html create mode 100644 src/main/websrc/template/common/delwin.html create mode 100644 src/main/websrc/template/common/export.html create mode 100644 src/main/websrc/template/common/flipinfo.html create mode 100644 src/main/websrc/template/common/flipinfody.html create mode 100644 src/main/websrc/template/home/demolist.html create mode 100644 src/main/websrc/template/manage/activityevent.html create mode 100644 src/main/websrc/template/manage/activityeventDetail.html create mode 100644 src/main/websrc/template/manage/app.html create mode 100644 src/main/websrc/template/manage/appDetail.html create mode 100644 src/main/websrc/template/manage/auth.html create mode 100644 src/main/websrc/template/manage/authDetail.html create mode 100644 src/main/websrc/template/manage/event.html create mode 100644 src/main/websrc/template/manage/img/1.png create mode 100644 src/main/websrc/template/manage/img/2.png create mode 100644 src/main/websrc/template/manage/img/3.png create mode 100644 src/main/websrc/template/manage/img/4.png create mode 100644 src/main/websrc/template/manage/img/5.png create mode 100644 src/main/websrc/template/manage/img/addchannel.png create mode 100644 src/main/websrc/template/manage/img/addchannel2.png create mode 100644 src/main/websrc/template/manage/img/addchannel3.png create mode 100644 src/main/websrc/template/manage/img/adwords/1.png create mode 100644 src/main/websrc/template/manage/img/adwords/2.png create mode 100644 src/main/websrc/template/manage/img/adwords/3.png create mode 100644 src/main/websrc/template/manage/img/adwords/4.png create mode 100644 src/main/websrc/template/manage/img/adwords/5.png create mode 100644 src/main/websrc/template/manage/img/adwords/6.png create mode 100644 src/main/websrc/template/manage/img/baidu1.png create mode 100644 src/main/websrc/template/manage/img/baidu2.png create mode 100644 src/main/websrc/template/manage/img/baidudsp.png create mode 100644 src/main/websrc/template/manage/img/wxmp/1.png create mode 100644 src/main/websrc/template/manage/img/wxmp/2.png create mode 100644 src/main/websrc/template/manage/img/wxmp/3.png create mode 100644 src/main/websrc/template/manage/img/wxmp/4.png create mode 100644 src/main/websrc/template/manage/img/wxmp/5.png create mode 100644 src/main/websrc/template/manage/img/zht/1.png create mode 100644 src/main/websrc/template/manage/img/zht/2.png create mode 100644 src/main/websrc/template/manage/img/zht/3.png create mode 100644 src/main/websrc/template/manage/img/zht/4.png create mode 100644 src/main/websrc/template/menu/collect.html diff --git a/lib/cat-client-2.0.0.jar b/lib/cat-client-2.0.0.jar new file mode 100644 index 0000000..94027cb Binary files /dev/null and b/lib/cat-client-2.0.0.jar differ diff --git a/lib/cat-core-2.0.0.jar b/lib/cat-core-2.0.0.jar new file mode 100644 index 0000000..724a182 Binary files /dev/null and b/lib/cat-core-2.0.0.jar differ diff --git a/lib/foundation-service-4.0.0.jar b/lib/foundation-service-4.0.0.jar new file mode 100644 index 0000000..c694252 Binary files /dev/null and b/lib/foundation-service-4.0.0.jar differ diff --git a/src/main/java/com/reyun/context/AppUtils.java b/src/main/java/com/reyun/context/AppUtils.java new file mode 100644 index 0000000..6324c04 --- /dev/null +++ b/src/main/java/com/reyun/context/AppUtils.java @@ -0,0 +1,23 @@ +package com.reyun.context; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Service; + +/** + * Created by nolan on 08/11/2016. + * description: + */ +@Service +public class AppUtils implements ApplicationContextAware { + private static ApplicationContext applicationContext = null; + + public static ApplicationContext getApplicationContext() { + return AppUtils.applicationContext; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) { + AppUtils.applicationContext = applicationContext; + } +} diff --git a/src/main/java/com/reyun/controller/AccountController.java b/src/main/java/com/reyun/controller/AccountController.java new file mode 100644 index 0000000..c56fd95 --- /dev/null +++ b/src/main/java/com/reyun/controller/AccountController.java @@ -0,0 +1,89 @@ +package com.reyun.controller; + +import com.reyun.model.Account; +import com.reyun.repository.AccountRepository; +import com.reyun.security.TokenManager; +import com.reyun.security.annotation.CurrentAccount; +import com.reyun.service.LoginService; +import com.reyun.util.ResultModel; +import com.reyun.util.ResultStatus; +import com.reyun.util.StringUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@Controller +@RequestMapping("account") +public class AccountController { + + @Autowired + AccountRepository accountRepository; + + @Autowired + LoginService loginService; + + @Autowired + TokenManager tokenManager; + + @RequestMapping(value = "register", method = RequestMethod.POST) + @ResponseBody + public ResultModel register(HttpServletResponse response, + @RequestBody Account account) { + return ResultModel.OK(loginService.save(account)); + } + + @RequestMapping(value = "find/{id}", method = RequestMethod.GET) + @ResponseBody + public ResultModel findone(HttpServletResponse response, + @PathVariable Long id) { + return ResultModel.OK(accountRepository.findOne(id)); + } + + /** + * 查询账户详情和登陆日志 + */ + @RequestMapping(value = "detail", method = RequestMethod.GET) + @ResponseBody + public ResultModel findAccountAndLog(@CurrentAccount Account loginAccount) { + + return ResultModel.OK(loginService.findAccountDetailAndLog(loginAccount)); + + } + + /** + * 更新账户基本信息 + */ + @RequestMapping(value = "updateBase", method = RequestMethod.PUT) + @ResponseBody + public ResultModel updateAccountInfo(HttpServletRequest request, @CurrentAccount Account loginAccount, @RequestBody Account updateAccount) { + + updateAccount.setId(loginAccount.getId()); + updateAccount.setEmail(loginAccount.getEmail()); + + return ResultModel.OK(loginService.updateAccountInfo(updateAccount, request)); + } + + /** + * 更新账户密码 + */ + @RequestMapping(value = "updatePwd", method = RequestMethod.PUT) + @ResponseBody + public ResultModel updateAccountPwd(@CurrentAccount Account loginAccount, @RequestParam String newPassword, + @RequestParam String oldPassword) { + + if (StringUtil.isEmpty(newPassword) || StringUtil.isEmpty(oldPassword) || oldPassword.equals(newPassword)) { + + return ResultModel.OK(0); + + } else { + + ResultStatus resultStatus = loginService.updateAccountPwd(newPassword, oldPassword, loginAccount); + + return new ResultModel(resultStatus.getCode(),resultStatus.getMessage(),1); + + } + } +} diff --git a/src/main/java/com/reyun/controller/AppController.java b/src/main/java/com/reyun/controller/AppController.java new file mode 100644 index 0000000..2062979 --- /dev/null +++ b/src/main/java/com/reyun/controller/AppController.java @@ -0,0 +1,40 @@ +package com.reyun.controller; + +import com.reyun.model.Account; +import com.reyun.security.annotation.CurrentAccount; +import com.reyun.service.AppService; +import com.reyun.util.ResultModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.IOException; + +/** + * Created by nolan on 22/12/2016. + * description: + */ +@Controller +@RequestMapping("app") +public class AppController { + + @Autowired + private AppService appService; + + @RequestMapping(value = "findall", method = RequestMethod.GET) + @ResponseBody + public ResultModel findAll(@CurrentAccount Account loginAccount) { + System.out.print(loginAccount.getId()); + return ResultModel.OK(appService.listAppByAccount(loginAccount.getId())); + } + + + @RequestMapping(value = "find/{subAccountId}/AuthApp", method = RequestMethod.GET) + @ResponseBody + public ResultModel findAuthApp(@CurrentAccount Account loginAccount, @PathVariable Long subAccountId){ + return ResultModel.OK(appService.listAuthAppByAccount(loginAccount, subAccountId)); + } +} diff --git a/src/main/java/com/reyun/controller/CustomMenuController.java b/src/main/java/com/reyun/controller/CustomMenuController.java new file mode 100644 index 0000000..7661f9a --- /dev/null +++ b/src/main/java/com/reyun/controller/CustomMenuController.java @@ -0,0 +1,319 @@ +package com.reyun.controller; + +import com.reyun.model.Account; +import com.reyun.model.CustomMenuShare; +import com.reyun.model.CustomMenuTemplate; +import com.reyun.security.annotation.CurrentAccount; +import com.reyun.service.CustomMenuService; +import com.reyun.service.EventService; +import com.reyun.util.ResultModel; +import com.reyun.util.ResultStatus; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; + +/** + * Created by sunhao on 17/4/24. + * desc:看单controller + */ +@Controller +@RequestMapping("custommenu") +public class CustomMenuController { + + @Autowired + private CustomMenuService customMenuService; + @Autowired + private EventService eventService; + + + /** + * 修改模板报表图表状态 + */ + @ResponseBody + @RequestMapping(value = "industry", method = RequestMethod.GET) + public ResultModel findIndustry() { + return ResultModel.OK(customMenuService.findIndustry()); + } + + /** + * 修改模板报表图表状态 + */ + @ResponseBody + @RequestMapping(value = "updateType/{id}", method = RequestMethod.PUT) + public ResultModel updateMenuType(@CurrentAccount Account account, @PathVariable Long id, @RequestParam String type) { + return ResultModel.OK(customMenuService.updateMyMenuTemplateType(account.getId(), id, type)); + } + + /** + * 修改模板顺序 + */ + @ResponseBody + @RequestMapping(value = "updateIndex/{id}", method = RequestMethod.PUT) + public ResultModel updateMenuIndex(@CurrentAccount Account account, @PathVariable Long id, @RequestParam int index) { + customMenuService.updateMyMenuTemplateIndex(account.getId(), id, index); + return ResultModel.OK(); + } + + /** + * 修改看单顺序 + */ + @ResponseBody + @RequestMapping(value = "updateIndex/{appId}/{menuId}", method = RequestMethod.PUT) + public ResultModel updateMenuIndex(@CurrentAccount Account account, @PathVariable Long appId, + @PathVariable Long menuId, @RequestParam int index) { + customMenuService.updateMyMenuIndex(account.getId(), appId, menuId, index); + return ResultModel.OK(); + } + + /** + * 查询所有看单内的报表 + */ + @ResponseBody + @RequestMapping(value = "report/{appId}/{originalReportId}", method = RequestMethod.GET) + public ResultModel queryAllReport(@CurrentAccount Account account, @PathVariable Long appId, @PathVariable Long originalReportId, + @RequestParam String menuType,@RequestParam String startDate,@RequestParam String endDate, + @RequestParam String viewFlag) { + + if (null != originalReportId && !StringUtils.isEmpty(menuType) && !StringUtils.isEmpty(startDate) && !StringUtils.isEmpty(endDate)) { + + return ResultModel.OK(customMenuService.queryAllReport(account.getId(), appId, originalReportId, menuType, startDate, endDate, viewFlag)); + + } else { + return ResultModel.ERROR(ResultStatus.PARAM_INVALID); + } + } + + /** + * 获取所有的看单菜单名称 + */ + @ResponseBody + @RequestMapping(value = "findName/{appId}", method = RequestMethod.GET) + public ResultModel getAllMyCustomMenuName(@CurrentAccount Account account, @PathVariable Long appId) { + return ResultModel.OK(customMenuService.listMyMenuList(account.getId(), appId)); + } + + /** + * 获取某个看单详情 + */ + @ResponseBody + @RequestMapping(value = "findDetail/{menuId}", method = RequestMethod.GET) + public ResultModel getMyCustomMenuDetail(@PathVariable Long menuId){ + return ResultModel.OK(customMenuService.getMyMenuDetail(menuId)); + } + + /** + * 查询是否有看单和收藏 + */ + @ResponseBody + @RequestMapping(value = "find/{appId}", method = RequestMethod.GET) + public ResultModel findAll(@CurrentAccount Account account,@PathVariable Long appId){ + return ResultModel.OK(customMenuService.findAllMenuAndFavorite(account.getId(),appId)); + } + + /** + * 查询行业看单列表 + */ + @ResponseBody + @RequestMapping(value = "findShare/{appId}", method = RequestMethod.GET) + public ResultModel findAllShare(@CurrentAccount Account account, @PathVariable Long appId) { + + return ResultModel.OK(customMenuService.listAllSharedMenuByCategory(account.getId(), appId)); + } + + /** + * 查询我的看单 + */ + @ResponseBody + @RequestMapping(value = "findMy/{appId}", method = RequestMethod.GET) + public ResultModel findMyCustomMenu(@CurrentAccount Account account, @PathVariable Long appId) { + return ResultModel.OK(customMenuService.listMyCustomMenu(account.getId(), appId)); + } + + /** + * 查询我的收藏 + */ + @ResponseBody + @RequestMapping(value = "findFavo/{appId}", method = RequestMethod.GET) + public ResultModel finaMyFavorite(@CurrentAccount Account account, @PathVariable Long appId) { + return ResultModel.OK(customMenuService.listMyFavorite(account.getId(), appId)); + } + + /** + * 自己创建看单 + */ + @ResponseBody + @RequestMapping(value = "saveMenu/{appId}", method = RequestMethod.POST) + public ResultModel saveCustomMenu(@CurrentAccount Account account, @PathVariable Long appId, @RequestParam String name) { + + name = name.trim(); + + //参数校验 + if(null == appId || StringUtils.isEmpty(name)){ + return ResultModel.ERROR(ResultStatus.PARAM_INVALID); + } + + //数量校验 + if(!customMenuService.validMyMenuNumber(account.getId(), appId)){ + return ResultModel.ERROR(ResultStatus.NUMBER_LIMIT); + } + + //名字校验 + if(!customMenuService.validMyMenuName(appId, name)){ + return ResultModel.ERROR(ResultStatus.NAME_EXIST); + } + + return ResultModel.OK(customMenuService.createMyMenu(account.getId(), appId, name)); + + } + + /** + * 添加模板 + * customMenuTemplate参数传menuType和id + */ + @ResponseBody + @RequestMapping(value = "addTemp/{appId}/{menuId}", method = RequestMethod.POST) + public ResultModel saveMenuTemplate(@CurrentAccount Account account, @PathVariable Long appId, + @PathVariable Long menuId, @RequestBody CustomMenuTemplate customMenuTemplate) { + //参数校验 + if(null == appId || null == customMenuTemplate || StringUtils.isEmpty(customMenuTemplate.getMenuType()) + || null == customMenuTemplate.getOriginalReportId()){ + return ResultModel.ERROR(ResultStatus.PARAM_INVALID); + } + + //校验数量和重复 + ResultModel resultModel = customMenuService.validMenuTemplate(account.getId(), menuId, customMenuTemplate.getOriginalReportId(),customMenuTemplate.getMenuType()); + + if (ResultStatus.SUCCESS.getCode() != resultModel.getCode()) { + return resultModel; + } + + //调用加入 + CustomMenuTemplate template = customMenuService.addCustomMenuTemplate(account, appId, menuId, customMenuTemplate); + + if (null == template) { + return ResultModel.ERROR(ResultStatus.FAILED); + } + + //加入成功 + return ResultModel.OK(template); + } + + /** + * 添加行业看单到我的看单 + */ + @ResponseBody + @RequestMapping(value = "addMenu/{appId}", method = RequestMethod.POST) + public ResultModel addShareMenu(@CurrentAccount Account account, @PathVariable Long appId, @RequestBody CustomMenuShare customMenuShare) { + //参数验证 + if(null == appId || CollectionUtils.isEmpty(customMenuShare.getTemplates())){ + return ResultModel.ERROR(ResultStatus.PARAM_INVALID); + } + //数量验证 + if(!customMenuService.validMyMenuNumber(account.getId(), appId)){ + return ResultModel.ERROR(ResultStatus.NUMBER_LIMIT); + } + //是否已经加入验证 + if(customMenuService.validIsExists(appId,customMenuShare.getId())){ + return ResultModel.ERROR(ResultStatus.RECORD_EXIST); + } + + //加入热云看单 + return ResultModel.OK(customMenuService.addToMyMenu(account, appId, customMenuShare)); + + + } + + /** + * 添加热云看单到我的看单 + */ + @ResponseBody + @RequestMapping(value = "addReyun/{appId}", method = RequestMethod.POST) + public ResultModel addReyunMenu(@CurrentAccount Account account, @PathVariable Long appId) { + + //校验是否加过 + if(customMenuService.findAllMenuAndFavorite(account.getId(), appId)){ + return ResultModel.ERROR(ResultStatus.RECORD_EXIST); + } + + //无事件处理 + if (CollectionUtils.isEmpty(eventService.findAllEventWithAttr(appId))) { + return ResultModel.ERROR(ResultStatus.EVENT_NULL); + } + + return ResultModel.OK(customMenuService.addReyunToMyMenu(account, appId)); + } + + /** + * 添加分享看单到收藏夹 + */ + @ResponseBody + @RequestMapping(value = "addFavorite/{appId}/{menuId}", method = RequestMethod.POST) + public ResultModel addFavorite(@CurrentAccount Account account, @PathVariable Long appId, @PathVariable Long menuId) { + + return ResultModel.OK(customMenuService.addToFavorite(account.getId(), appId, menuId)); + } + + + /** + * 修改看单名字 + */ + @ResponseBody + @RequestMapping(value = "updateName/{appId}/{menuId}", method = RequestMethod.PUT) + public ResultModel updateMenuName(@CurrentAccount Account account, @PathVariable Long appId, + @PathVariable Long menuId, @RequestParam String name) { + //名字校验 + if (!customMenuService.validMyMenuName(appId, name)) { + return ResultModel.ERROR(ResultStatus.NAME_EXIST); + } + + return ResultModel.OK(customMenuService.updateMyMenuName(account.getId(), menuId, name)); + } + + /** + * 删除我的看单 + */ + @ResponseBody + @RequestMapping(value = "delMenu/{appId}/{menuId}", method = RequestMethod.DELETE) + public ResultModel delCustomMenu(@CurrentAccount Account account, @PathVariable Long appId, @PathVariable Long menuId) { + return ResultModel.OK(customMenuService.deleteMyMenu(account.getId(), appId, menuId)); + } + + /** + * 删除看单模板 + */ + @ResponseBody + @RequestMapping(value = "delTemp/{templateId}", method = RequestMethod.DELETE) + public ResultModel delCustomMenuTemplate(@CurrentAccount Account account, @PathVariable Long templateId) { + return ResultModel.OK(customMenuService.deleteMyMenuTemplate(account.getId(), templateId)); + } + + /** + * 删除收藏夹 + */ + @ResponseBody + @RequestMapping(value = "delFavorite/{appId}/{menuId}", method = RequestMethod.DELETE) + public ResultModel delFavorite(@CurrentAccount Account account, @PathVariable Long appId, @PathVariable Long menuId) { + return ResultModel.OK(customMenuService.deleteFavorite(account.getId(), appId, menuId)); + } + + /** + * 取消分享 + */ + @ResponseBody + @RequestMapping(value = "cancelShare/{appId}/{menuId}", method = RequestMethod.DELETE) + public ResultModel cancelShareMyMenu(@CurrentAccount Account account, @PathVariable Long appId, @PathVariable Long menuId) { + + return ResultModel.OK(customMenuService.cancelShareMyMenu(account.getId(), appId, menuId)); + } + + /** + * 删除漏斗、留存、事件分析删除是验证是否有看单引用 + */ + @ResponseBody + @RequestMapping(value = "delete/valid/{id}", method = RequestMethod.GET) + public ResultModel deleteFunnel(@CurrentAccount Account account, @PathVariable Long id, @RequestParam String type) { + return ResultModel.OK(customMenuService.listByReportId(id, type)); + } +} diff --git a/src/main/java/com/reyun/controller/EventController.java b/src/main/java/com/reyun/controller/EventController.java new file mode 100644 index 0000000..289483b --- /dev/null +++ b/src/main/java/com/reyun/controller/EventController.java @@ -0,0 +1,119 @@ +package com.reyun.controller; + +import com.reyun.model.Account; +import com.reyun.model.Event4Web; +import com.reyun.model.VirtualEvent; +import com.reyun.security.annotation.CurrentAccount; +import com.reyun.service.EventService; +import com.reyun.service.VirtualEventService; +import com.reyun.util.ResultModel; +import org.json.JSONException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * Created by nolan on 22/12/2016. description: + */ +@Controller +@RequestMapping("{app}/event") +public class EventController { + + @Autowired + EventService eventService; + @Autowired + private VirtualEventService virtualService; + + @RequestMapping(value = "find/param", method = RequestMethod.GET) + @ResponseBody + public ResultModel findAll(@PathVariable Long app, @RequestParam String names, @RequestParam(required = false) String params) throws JSONException { + return ResultModel.OK(eventService.listAllNew(app, names, params)); + } + + @RequestMapping(value = "find/value/one", method = RequestMethod.GET) + @ResponseBody + public ResultModel findOneValue(@PathVariable Long app, @RequestParam String eventname, @RequestParam String attrname) { + return ResultModel.OK(eventService.listAllValue(app, eventname, attrname)); + } + + @RequestMapping(value = "find/value/attr", method = RequestMethod.GET) + @ResponseBody + public ResultModel findOneValueByAttr(@PathVariable Long app, @RequestParam String attrName) { + return ResultModel.OK(eventService.listAllValueByAttr(app, attrName)); + //return ResultModel.OK(eventService.listAllValueByAttrTop50(app, attrName)); + } + + @RequestMapping(value = "find/value/attrs", method = RequestMethod.GET) + @ResponseBody + public ResultModel findOneValueByAttrs(@PathVariable Long app, @RequestParam String attrNames) { + return ResultModel.OK(eventService.listAllValueByAttrs(app, attrNames)); + } + + @RequestMapping(value = "find/value", method = RequestMethod.GET) + @ResponseBody + public ResultModel findAllValue(@PathVariable Long app) { + return ResultModel.OK(eventService.listValues(app)); + } + + @RequestMapping(value = "find/allAttr", method = RequestMethod.GET) + @ResponseBody + public ResultModel findAllAttr( @PathVariable Long app) { + return ResultModel.OK(eventService.listAllAttr(app)); + } + + @RequestMapping(value = "find/group/properties", method = RequestMethod.GET) + @ResponseBody + public ResultModel findGroupAttributes(@PathVariable Long app) { + return ResultModel.OK(eventService.listAllAttributes(app));} + + @RequestMapping(value = "find/common/properties", method = RequestMethod.GET) + @ResponseBody + public ResultModel findCommonProperties(@PathVariable Long app) { + //return ResultModel.OK(eventService.listCommonProperties(app, "event")); + return ResultModel.OK(eventService.listAllEventAttributesTop50(app, "event")); + } + + @ResponseBody + @RequestMapping(value = "find", method = RequestMethod.GET) + public ResultModel findAllEvent(@PathVariable Long app) { + return ResultModel.OK(eventService.listAllEvent(app)); + } + + @ResponseBody + @RequestMapping(value = "find/callback", method = RequestMethod.GET) + public ResultModel findAllEventToCallback(@PathVariable Long app) { + return ResultModel.OK(eventService.listAllEventToCallback(app)); + } + + + @ResponseBody + @RequestMapping(value = "findOne", method = RequestMethod.GET) + public ResultModel findOneEventAttr(@PathVariable Long app, @RequestParam String eventName) { + //eventService.listAllAttr(app); + return ResultModel.OK(); + } + + @ResponseBody + @RequestMapping(value = "find/virtual", method = RequestMethod.GET) + public ResultModel findAllEvent(@PathVariable Long app, @CurrentAccount Account account) { + List<Event4Web> event4Webs = eventService.listAllEvent(app); + List<VirtualEvent> eventList = virtualService.findEventList(app, account); + Event4Web event4Web = null; + for (VirtualEvent virtualEvent : eventList) { + if (virtualEvent.isEnable() || virtualEvent.getType().equals("active")) { + event4Web = new Event4Web(); + event4Web.setEventNameAlias(virtualEvent.getCh_name()); + event4Web.setEventName(virtualEvent.getName()); + event4Web.setEventNumber(0); + event4Web.setStatus(true); + event4Web.setVirtual(true); + + event4Webs.add(event4Web); + } + + } + return ResultModel.OK(event4Webs); + } +} diff --git a/src/main/java/com/reyun/controller/EventStatsController.java b/src/main/java/com/reyun/controller/EventStatsController.java new file mode 100644 index 0000000..0341029 --- /dev/null +++ b/src/main/java/com/reyun/controller/EventStatsController.java @@ -0,0 +1,73 @@ +package com.reyun.controller; + +import com.reyun.model.Account; +import com.reyun.security.annotation.CurrentAccount; +import com.reyun.service.ComplicateEventsService; +import com.reyun.service.EventStatsService; +import com.reyun.util.ResultModel; +import com.reyun.util.ResultStatus; +import com.reyun.util.StringUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.servlet.http.HttpServletRequest; + +/** + * Created by sunhao on 17/4/10. + * + */ +@Service +@RequestMapping("eventstats") +public class EventStatsController { + + + @Autowired + private ComplicateEventsService complicateEventsService; + + + @RequestMapping(value = "complicated/query/{appId}", method = RequestMethod.GET) + @ResponseBody + public ResultModel queryComplicatedEvent(HttpServletRequest httpServletRequest, @CurrentAccount Account account, + @PathVariable Long appId) { + + String startDate = httpServletRequest.getParameter("startdate"); + String endDate = httpServletRequest.getParameter("enddate"); + String eventCondition = httpServletRequest.getParameter("eventCondition"); + String viewFlag = httpServletRequest.getParameter("viewflag"); + + if (!StringUtil.isEmpty(eventCondition) && !StringUtil.isEmpty(startDate) && !StringUtil.isEmpty(endDate)) { + + return ResultModel.OK(complicateEventsService.queryComplicatedEvent(appId, account.getId(), startDate, endDate, + eventCondition, viewFlag)); + } else { + + return ResultModel.ERROR(ResultStatus.PARAM_INVALID); + } + + } + + @RequestMapping(value = "complicated/query/total/{appId}", method = RequestMethod.GET) + @ResponseBody + public ResultModel queryDistinctTotal(HttpServletRequest httpServletRequest, @CurrentAccount Account account, + @PathVariable Long appId) { + + String startDate = httpServletRequest.getParameter("startdate"); + String endDate = httpServletRequest.getParameter("enddate"); + String eventCondition = httpServletRequest.getParameter("eventCondition"); + String viewFlag = httpServletRequest.getParameter("viewflag"); + + if (!StringUtil.isEmpty(eventCondition) && !StringUtil.isEmpty(startDate) && !StringUtil.isEmpty(endDate)) { + + return ResultModel.OK(complicateEventsService.queryDistinctTotalData(appId, account.getId(), startDate, endDate, + eventCondition, viewFlag)); + } else { + + return ResultModel.ERROR(ResultStatus.PARAM_INVALID); + } + + } +} diff --git a/src/main/java/com/reyun/controller/ExpressionController.java b/src/main/java/com/reyun/controller/ExpressionController.java new file mode 100644 index 0000000..fccfd8b --- /dev/null +++ b/src/main/java/com/reyun/controller/ExpressionController.java @@ -0,0 +1,90 @@ +package com.reyun.controller; + +import com.reyun.model.App; +import com.reyun.model.ComplicatedParam; +import com.reyun.model.EventAttr4Web; +import com.reyun.service.AppService; +import com.reyun.service.EventService; +import com.reyun.service.ExpressionService; +import com.reyun.util.ResultModel; +import com.reyun.util.ResultStatus; +import net.sf.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Controller +@RequestMapping("expression") +public class ExpressionController { + + @Autowired + private ExpressionService expressionService; + @Autowired + private EventService eventService; + @Autowired + private AppService appService; + + @ResponseBody + @RequestMapping(value = "transform", method = RequestMethod.POST) + public ResultModel transform(@RequestBody String param) { +// System.out.println(param); + JSONObject jsonObject = JSONObject.fromObject(param); + String expression = jsonObject.get("expression").toString(); + String appKey = jsonObject.get("appkey").toString(); + long appId = Long.parseLong(appKey); + + App byId = this.appService.findById(appId); + appKey = byId.getAppkey(); + +// boolean isValidate = expressionService.validateOriginalExpression(expression, appKey); + String mid = expressionService.originalExpressionToMidExp(expression, appKey); + if (mid == null) { + return ResultModel.ERROR(ResultStatus.EXP_INVALID); + } else { + return ResultModel.OK(mid); + } + } + + @ResponseBody + @RequestMapping(value = "properties/{event}/{appId}", method = RequestMethod.GET) + public ResultModel properties(@PathVariable String event, @PathVariable Long appId) { + + List<EventAttr4Web> eventAttributeMetas = eventService.listAllEventAttribute(event, appId); + return ResultModel.OK(eventAttributeMetas); + } + + + @ResponseBody + @RequestMapping(value = "viewList", method = RequestMethod.GET) + public ResultModel operations() { + + List<ComplicatedParam> allEventViewAttr = eventService.findAllComplicatedPatram(); + List<ComplicatedParam> eventViewList = new ArrayList<>(allEventViewAttr.size()); + List<ComplicatedParam> attrViewList = new ArrayList<>(allEventViewAttr.size()); + + for (ComplicatedParam complicatedParam : allEventViewAttr) { + switch (complicatedParam.getAttrLevel()) { + case 1: + eventViewList.add(complicatedParam); + continue; + case 2: + attrViewList.add(complicatedParam); + continue; + } + } + Map<String, Object> stringObjectMap = new HashMap<>(2); + stringObjectMap.put("eventViewList", eventViewList); + stringObjectMap.put("attrViewList", attrViewList); + + return ResultModel.OK(stringObjectMap); + } +} diff --git a/src/main/java/com/reyun/controller/FunnelController.java b/src/main/java/com/reyun/controller/FunnelController.java new file mode 100644 index 0000000..a76e8dd --- /dev/null +++ b/src/main/java/com/reyun/controller/FunnelController.java @@ -0,0 +1,69 @@ +package com.reyun.controller; + +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import com.reyun.model.Account; +import com.reyun.security.annotation.CurrentAccount; +import com.reyun.service.FunnelService; +import com.reyun.util.ResultModel; +import com.reyun.util.ResultStatus; +import com.reyun.util.StringUtil; + +@Controller +@RequestMapping("/funnel") +public class FunnelController { + protected Logger logger = LoggerFactory + .getLogger(FunnelController.class); + + @Autowired + FunnelService funnelService; + + + + + @RequestMapping(value = "find/{app}", method = RequestMethod.GET) + @ResponseBody + public ResultModel list(HttpServletRequest request, + @CurrentAccount Account account, @PathVariable Long app) { + return ResultModel.OK(funnelService.findByApp(app)); + } + + @RequestMapping(value = "report/{funnel}", method = RequestMethod.GET) + @ResponseBody + public ResultModel reportChart(HttpServletRequest request, + @PathVariable Long funnel, @CurrentAccount Account loginAccount) { + String startDate = request.getParameter("startdate"); + String endDate = request.getParameter("enddate"); + String usergroupStr = request.getParameter("usergroupid"); + String dimentionStr = request.getParameter("dimention"); + boolean isList = request.getParameter("datatype")==null?false:"list".equals(request.getParameter("datatype"))?true:false; + String isDeviceStr = request.getParameter("isdevice"); + String eventType = request.getParameter("eventType"); + boolean isProfile=false; + if(!StringUtils.isEmpty(eventType) && "profile".equals(eventType)){ + isProfile=true; + } + boolean isDevice = StringUtil.isEmpty(isDeviceStr)?false:"true".equals(isDeviceStr)?true:false; + Map<String, List> result = funnelService.funnelReport(funnel, startDate, endDate, usergroupStr, isList, dimentionStr, loginAccount, isDevice,isProfile); + + if (result.isEmpty()) { + return ResultModel.ERROR(ResultStatus.NETWORK_ERROR); + } else { + return ResultModel.OK(result); + } + } + +} diff --git a/src/main/java/com/reyun/controller/manage/ExportReportInfoController.java b/src/main/java/com/reyun/controller/manage/ExportReportInfoController.java new file mode 100644 index 0000000..5a1d9f4 --- /dev/null +++ b/src/main/java/com/reyun/controller/manage/ExportReportInfoController.java @@ -0,0 +1,259 @@ +package com.reyun.controller.manage; + +import com.reyun.dic.DownloadStatusEnumType; +import com.reyun.dic.FunctionEnumType; +import com.reyun.dic.LogEnumType; +import com.reyun.dic.OperateObjectEnumType; +import com.reyun.exception.TipException; +import com.reyun.model.Account; +import com.reyun.model.App; +import com.reyun.model.ExportReportInfo; +import com.reyun.security.annotation.CurrentAccount; +import com.reyun.service.AppService; +import com.reyun.service.ExportReportInfoService; +import com.reyun.service.UserLogService; +import com.reyun.util.Constant; +import com.reyun.util.ResultModel; +import com.reyun.util.ResultStatus; +import net.sf.json.JSONObject; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +/** + * Created by zxy on 27/04/2017. + * description: + */ +@Controller +@RequestMapping("/mng/export/report/{app}") +public class ExportReportInfoController { + @Autowired + private AppService appService; + @Autowired + UserLogService userLogService; + + @Autowired + ExportReportInfoService exportService; + + + @RequestMapping(value = "findall", method = RequestMethod.GET) + @ResponseBody + public ResultModel findAll(@CurrentAccount Account loginAccount, @PathVariable Long app) { + return ResultModel.OK(exportService.findByApp(loginAccount, app)); + } + + @RequestMapping(value = "/delete/{id}", method = RequestMethod.DELETE) + @ResponseBody + public ResultModel delete(@PathVariable Long id) { + exportService.delete(id); + return ResultModel.OK(); + } + + /** + * 漏斗、事件、自定义留存,有id的需要前端将id传过来,以保证文件名的唯一性. + */ + @RequestMapping(value = "generatefile", method = RequestMethod.POST) + @ResponseBody + public ResultModel addExportTask(final HttpServletRequest request, @PathVariable("app") Long app, @RequestBody ExportReportInfo resource, @CurrentAccount Account loginAccount) { + + App appEntity = appService.findById(app); + if (appEntity == null) { + throw new TipException("应用不存在"); + } + + if (!exportService.validFileName(resource)) { + return ResultModel.ERROR(ResultStatus.EXPORT_DATA_EXIST); + } + + //根据不同的功能类型,存储不同的conditions.funnel,customretention,detailcustomretention,commonretention,event,normal + if (StringUtils.isEmpty(resource.getConditions())) { + throw new TipException("导出条件不能为空"); + } + JSONObject conditions = JSONObject.fromObject(resource.getConditions()); + + String timestamp = String.valueOf(new Date().getTime()); + + //根据报表类型,生成不同的唯一标示的文件名 + String midFileName = ""; + if (resource.getFunctionType().equals(FunctionEnumType.REPORT.getKey())) { + + midFileName = resource.getReportName() + "_" + timestamp + "_" + (!StringUtils.isEmpty(resource.getSubType()) ? resource.getSubType() : ""); +/* List<Campaign> campaignList = campaignRepository.findAll(app); + + StringBuffer sb = new StringBuffer(); + for(Campaign campaign:campaignList){ + String campaignid = campaign.getCampaignid()+","; + sb.append(campaignid); + } + String campaignidStr = sb.append("_default_").toString(); + conditions.put("campaignid",campaignidStr);*/ + + } else if (resource.getFunctionType().equals(FunctionEnumType.FUNNEL.getKey())) { + + midFileName = FunctionEnumType.FUNNEL.getKey() + "_" + timestamp + "_" + (null == resource.getFunctionId() ? String.valueOf(new Date().getTime()) : resource.getFunctionId()); + + } else if (resource.getFunctionType().equals(FunctionEnumType.EVENTSTATS.getKey())) { + + midFileName = FunctionEnumType.EVENTSTATS.getKey() + "_" + timestamp + "_" + (null == resource.getFunctionId() ? String.valueOf(new Date().getTime()) : resource.getFunctionId()); + + } else if (resource.getFunctionType().equals(FunctionEnumType.COMPLICATED_EVENTS.getKey())) { + + midFileName = FunctionEnumType.COMPLICATED_EVENTS.getKey() + "_" + timestamp + "_" + (null == resource.getFunctionId() ? String.valueOf(new Date().getTime()) : resource.getFunctionId()); + + } else if (resource.getFunctionType().equals(FunctionEnumType.CUSTOMRETENTION.getKey())) { + + midFileName = FunctionEnumType.CUSTOMRETENTION.getKey() + "_" + timestamp + "_" + (null == resource.getFunctionId() ? String.valueOf(new Date().getTime()) : resource.getFunctionId()); + + } else if (resource.getFunctionType().equals(FunctionEnumType.DETAILCUSTOMRETENTION.getKey())) { + + midFileName = FunctionEnumType.DETAILCUSTOMRETENTION.getKey() + "_" + timestamp + "_" + (null == resource.getFunctionId() ? String.valueOf(new Date().getTime()) : resource.getFunctionId()); + + } else if (resource.getFunctionType().equals(FunctionEnumType.COMMONRETENTION.getKey())) { + + midFileName = resource.getReportName(); + + //是否按设备 + if (conditions.containsKey("isdevice") && conditions.getBoolean("isdevice")) { + midFileName = "device_" + midFileName + "_" + timestamp; + } + + //是否是详情 + if (conditions.containsKey("isdetail") && conditions.getBoolean("isdetail")) { + midFileName = midFileName + "detail_" + timestamp; + } + } + + //注收比日期参数特殊处理 + String startDate = conditions.containsKey("startdate") ? conditions.getString("startdate") : conditions.getString("install_startdate"); + String endDate = conditions.containsKey("enddate") ? conditions.getString("enddate") : conditions.getString("install_enddate"); + + String fileName = appEntity.getAppkey() + "_" + midFileName + "_" + startDate + "_" + endDate + ".csv"; + + resource.setApp(app); + resource.setFileName(fileName); + resource.setAccount(loginAccount.getId()); + resource.setAccountName(loginAccount.getName()); + Date date = new Date(); + resource.setCreateTime(date); + resource.setModifyTime(date); + resource.setStatus(DownloadStatusEnumType.INIT.getCode()); + resource.setReportType(conditions.getString("datatype")); + resource.setStartDate(startDate); + resource.setEndDate(endDate); + resource.setConditions(JSONObject.fromObject(conditions).toString()); + + return ResultModel.OK(exportService.save(resource)); + + } + + @RequestMapping(value = "refresh/{id}", method = RequestMethod.PUT) + @ResponseBody + public ResultModel refreshDownload(@PathVariable("app") Long app, @PathVariable Long id, @CurrentAccount Account loginAccount) throws IOException { + ExportReportInfo info = exportService.findOne(id); + if (info == null) + throw new TipException("下载记录不存在"); + + return ResultModel.OK(exportService.updateStatus(id, DownloadStatusEnumType.INIT.getCode(), loginAccount.getId())); + } + + @RequestMapping(value = "download/{id}", method = RequestMethod.GET) + public void getDownloadResponseEntity(HttpServletRequest request, HttpServletResponse response, @PathVariable("app") Long app, @PathVariable Long id, + @CurrentAccount Account loginAccount) throws IOException { + + /*ExportReportInfo info = exportService.findOne(id); + + userLogService.insertLog(loginAccount, LogEnumType.DOWNLOAD.getCode(), + LogEnumType.DOWNLOAD.getName() + "报表下载 ", info,app, OperateObjectEnumType.REPORTDOWN.getCode(), request); + + if (info == null) { + //无文件时候 返回204 + response.setStatus(HttpServletResponse.SC_NO_CONTENT); + return; + } + + App appEntity = this.appService.findById(app); + + String downloadIP = request.getHeader("x-forwarded-for") == null ? request.getRemoteAddr() : request.getHeader("x-forwarded-for"); + String filename = appEntity.getName() + "_" + info.getName() + "_" + info.getStartDate() + "_" + info.getEndDate() + + "_" + new SimpleDateFormat("yyyyMMddHHmmss").format(info.getCreateTime()) + ".csv"; + + //为了解决中文名称乱码问题 + filename = new String(filename.getBytes("UTF-8")); + filename = URLEncoder.encode(filename, "UTF-8"); + //设置结果集的中文 + response.setCharacterEncoding("GB18030"); + response.setHeader("filename", filename); + response.setHeader("content-disposition", "attachment; filename=" + filename); + response.setHeader("Content-Type", "text/csv"); + + InputStream in = null; + String content = ""; + + try { + + URL url = new URL(Constant.S3_ROOTDIR + "/reportdownload/" + URLEncoder.encode(info.getFileName(), StandardCharsets.UTF_8.toString())); + in = url.openStream(); + content = IOUtils.toString(in); + + if (content.contains("\t")) { + content = content.replace("\t", ","); + } + + response.getWriter().write(content); + + } catch (IOException e) { + //无文件时候 返回204 + e.printStackTrace(); + response.setStatus(HttpServletResponse.SC_NO_CONTENT); + return; + + } finally { + IOUtils.closeQuietly(in); + } + + //更新下载人和IP + exportService.updateDownloadInfo(info.getId(), loginAccount, downloadIP);*/ + } + + @RequestMapping(value = "checkexist/{id}", method = RequestMethod.GET) + @ResponseBody + public ResultModel checkFileExist(@PathVariable("app") Long app, @PathVariable Long id, @CurrentAccount Account loginAccount) throws MalformedURLException { + + /*ExportReportInfo info = exportService.findOne(id); + if (info == null) { + throw new TipException("下载记录不存在"); + } + + URL url = new URL(Constant.S3_ROOTDIR + File.separator + "reportdownload" + File.separator + URLEncoder.encode(info.getFileName())); + InputStream in = null; + + try { + in = url.openStream(); + } catch (IOException e) { + return ResultModel.OK(false); + } finally { + if (in != null) { + IOUtils.closeQuietly(in); + } + }*/ + return ResultModel.OK(true); + } + +} + + diff --git a/src/main/java/com/reyun/dic/AppPlatformEnum.java b/src/main/java/com/reyun/dic/AppPlatformEnum.java new file mode 100644 index 0000000..771f2e9 --- /dev/null +++ b/src/main/java/com/reyun/dic/AppPlatformEnum.java @@ -0,0 +1,29 @@ +package com.reyun.dic; + +/** + * Created by sunhao on 17/8/1. + * desc:app平台类型 + */ +public enum AppPlatformEnum { + + ANDROID("Android","安卓"), + IOS("iOS","iOS"), + H5("H5","h5"); + + private String key; + private String value; + + AppPlatformEnum(String key, String value) { + this.key = key; + this.value = value; + } + + public String getKey() { + return key; + } + + public String getValue() { + return value; + } + +} diff --git a/src/main/java/com/reyun/dic/ChannelCategoryEnumType.java b/src/main/java/com/reyun/dic/ChannelCategoryEnumType.java new file mode 100644 index 0000000..ed1e05b --- /dev/null +++ b/src/main/java/com/reyun/dic/ChannelCategoryEnumType.java @@ -0,0 +1,27 @@ +package com.reyun.dic; + +/** + * Created by nolan on 21/02/2017. + * description: + */ +public enum ChannelCategoryEnumType { + ADVERTISING("ADVERTISING", ""), + APPMARKET("APPMARKET", "分包"); + + private String key; + private String value; + + ChannelCategoryEnumType(String key, String value) { + this.key = key; + this.value = value; + } + + public String getKey() { + return key; + } + + public String getValue() { + return value; + } + +} diff --git a/src/main/java/com/reyun/dic/ChannelEnumType.java b/src/main/java/com/reyun/dic/ChannelEnumType.java new file mode 100644 index 0000000..ca2aa14 --- /dev/null +++ b/src/main/java/com/reyun/dic/ChannelEnumType.java @@ -0,0 +1,39 @@ +package com.reyun.dic; + +import com.reyun.exception.TipException; + +/** + * description: + * + * @author nolan + * @date 18/10/2017 + */ +public enum ChannelEnumType +{ + GDT("gdt"), + SM("smsearch"), + ADWORDS("adwords"); + + private String uniqueName; + + ChannelEnumType(String uniqueName) + { + this.uniqueName = uniqueName; + } + + public static ChannelEnumType getEnumType(String abbr) + { + for (ChannelEnumType channelEnumType : ChannelEnumType.values()) { + if (channelEnumType.getUniqueName().equals(abbr)) { + return channelEnumType; + } + } + + throw new TipException("[" + abbr + "]渠道枚举暂未定义"); + } + + public String getUniqueName() + { + return uniqueName; + } +} diff --git a/src/main/java/com/reyun/dic/ConfigEnumType.java b/src/main/java/com/reyun/dic/ConfigEnumType.java new file mode 100644 index 0000000..9a236be --- /dev/null +++ b/src/main/java/com/reyun/dic/ConfigEnumType.java @@ -0,0 +1,44 @@ +package com.reyun.dic; + +/** + * Created by sunhao on 17/3/6. + * 配置表KEY字段字典 + */ +public enum ConfigEnumType { + + MASTER_PWD_PREFIX("master_pwd_prefix","万能密码前缀"), + SM_CLIENT_ID("client_id","神马应用ID"), + SM_CLIENT_SECRET("client_secret","神马应用密匙"), + SM_REDIRECT_URI("redirect_uri","神马重定向"), + DOWNLOAD_FILE_PATH("download_file_path","下载文件地址"), + SERVER_REGED_DOWNLOAD_URL("reged_download_url", "注册"), + SERVER_INSTALL_DOWNLOAD_URL("install_download_url", "激活"), + SERVER_CLICK_DOWNLOAD_URL("click_download_url", "点击"), + SERVER_BLACKLIST_DOWNLOAD_URL("blacklist_download_url", "黑名单"), + OPENAPI_TOKEN("OPENAPI_TOKEN", "对外开放接口TOKEN"); + + + private String key; + private String value; + + ConfigEnumType(String key, String value) { + this.key = key; + this.value = value; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/main/java/com/reyun/dic/CustomMenuType.java b/src/main/java/com/reyun/dic/CustomMenuType.java new file mode 100644 index 0000000..8e12130 --- /dev/null +++ b/src/main/java/com/reyun/dic/CustomMenuType.java @@ -0,0 +1,36 @@ +package com.reyun.dic; + +/** + * Created by sunhao on 17/4/24. + * desc:看单表单类型,事件分析,漏斗,留存 + */ +public enum CustomMenuType { + + EVENT_STATS("eventstats","事件分析"), + FUNNEL("funnel","漏斗"), + RETENTION("retention","留存"); + + private String key; + private String value; + + CustomMenuType(String key, String value) { + this.key = key; + this.value = value; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/main/java/com/reyun/dic/DataViewEnumType.java b/src/main/java/com/reyun/dic/DataViewEnumType.java new file mode 100644 index 0000000..6f67ae2 --- /dev/null +++ b/src/main/java/com/reyun/dic/DataViewEnumType.java @@ -0,0 +1,41 @@ +package com.reyun.dic; + +/** + * Created by nolan on 29/12/2016. + * description: + */ +public enum DataViewEnumType { + DATE("date", "日期"), + CAMPAIGN("campaign", "活动"), + CAMPAIGN_DATE("campaigndate", "活动和日期"), + CAMPAIGNGROUP("campgroup", "活动组"), + CHANNEL("channel", "渠道"), + SUBCHANNEL("subchannel", "子渠道"), + BDKEYWORD("bdkeyword", "百度关键词"), + SUBACCOUNT("subaccount","子账户"), + CAMPAIGN_H5("campaign_h5","H5监测活动"); + + private String code; + private String name; + + DataViewEnumType(String code, String name) { + this.code = code; + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/src/main/java/com/reyun/dic/DivEnumType.java b/src/main/java/com/reyun/dic/DivEnumType.java new file mode 100644 index 0000000..90b9768 --- /dev/null +++ b/src/main/java/com/reyun/dic/DivEnumType.java @@ -0,0 +1,31 @@ +package com.reyun.dic; + +/** + * Created by nolan on 04/01/2017. + * description: + */ +public enum DivEnumType { + ALL("all", "所有"), + CAMPAIGN("campaign", "推广活动"), + CAMPAIGN_GROUP("campgroup", "推广活动组"), + CHANNEL("channel", "渠道"), + BACKFLOW("backflow", "回流"), + USERGROUP("usergroup", "用户组"); + + String code; + String name; + + DivEnumType(String code, String name) { + this.code = code; + this.name = name; + } + + public String getCode() { + return code; + } + + + public String getName() { + return name; + } +} diff --git a/src/main/java/com/reyun/dic/DownloadEnumType.java b/src/main/java/com/reyun/dic/DownloadEnumType.java new file mode 100644 index 0000000..880a33d --- /dev/null +++ b/src/main/java/com/reyun/dic/DownloadEnumType.java @@ -0,0 +1,29 @@ +package com.reyun.dic; + +/** + * Created by nolan on 04/01/2017. + * description: + */ +public enum DownloadEnumType { + INSTALL("install", "激活"), + REGED("reged", "注册"), + PAY("pay", "付费"), + BACKFLOW("backflow", "回流"), + USERGROUP("usergroup", "用户群"); + + String code; + String name; + + DownloadEnumType(String code, String name) { + this.code = code; + this.name = name; + } + + public String getCode() { + return code; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/com/reyun/dic/DownloadStatusEnumType.java b/src/main/java/com/reyun/dic/DownloadStatusEnumType.java new file mode 100644 index 0000000..03da731 --- /dev/null +++ b/src/main/java/com/reyun/dic/DownloadStatusEnumType.java @@ -0,0 +1,29 @@ +package com.reyun.dic; + +/** + * Created by nolan on 04/01/2017. + * description: + */ +public enum DownloadStatusEnumType { + INIT("init", "等待下载"), + DOWNLOADING("downloading", "正在下载"), + COMPLETE("complete", "下载完成"), + FAILED("failed", "下载失败"), + INVALID("invalid","文件失效"); + + String code; + String name; + + DownloadStatusEnumType(String code, String name) { + this.code = code; + this.name = name; + } + + public String getCode() { + return code; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/com/reyun/dic/FunctionEnumType.java b/src/main/java/com/reyun/dic/FunctionEnumType.java new file mode 100644 index 0000000..6528959 --- /dev/null +++ b/src/main/java/com/reyun/dic/FunctionEnumType.java @@ -0,0 +1,40 @@ +package com.reyun.dic; + +/** + * Created by zxy on 17/4/27. + * 报表结果导出时候,需要根据不同功能进行不同的处理.枚举功能类型. + */ +public enum FunctionEnumType { + + FUNNEL("funnel","漏斗"), + CUSTOMRETENTION("customretention","自定义留存"), + DETAILCUSTOMRETENTION("detailcustomretention","自定义留存明细"), + COMMONRETENTION("commonretention","固定留存"), + EVENTSTATS("eventstats", "事件"), + COMPLICATED_EVENTS("complicatedevents", "复杂事件"), + REPORT("normal", "普通"); + + private String key; + private String value; + + FunctionEnumType(String key, String value) { + this.key = key; + this.value = value; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/main/java/com/reyun/exception/GlobalExceptionAdvice.java b/src/main/java/com/reyun/exception/GlobalExceptionAdvice.java new file mode 100644 index 0000000..7a0108f --- /dev/null +++ b/src/main/java/com/reyun/exception/GlobalExceptionAdvice.java @@ -0,0 +1,47 @@ +package com.reyun.exception; + +import com.reyun.util.ResultModel; +import com.reyun.util.ResultStatus; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +/** + * Created by nolan on 18/11/2016. + * description: + */ +@ControllerAdvice +public class GlobalExceptionAdvice { + private Logger logger = LoggerFactory.getLogger(GlobalExceptionAdvice.class); + + @ExceptionHandler(TransferCurrentAccountException.class) + public ResponseEntity<ResultModel> handleTransferCurrentAccountException(TransferCurrentAccountException ex) { + logger.error("handleTransferCurrentAccountException......", ex); +// ex.printStackTrace(); + return new ResponseEntity<ResultModel>(ResultModel.ERROR(ResultStatus.USERNAME_LOGIN_EXPIRE), HttpStatus.OK); + } + + @ExceptionHandler(TipException.class) + public ResponseEntity<ResultModel> handleTipException(TipException ex) { + logger.error("handleTipException......", ex); + ex.printStackTrace(); + return new ResponseEntity<ResultModel>(new ResultModel(-999, ex.getMessage()), HttpStatus.OK); + } + + @ExceptionHandler(RuntimeException.class) + public ResponseEntity<ResultModel> handleRuntimeException(RuntimeException ex) { + logger.error("handleRuntimeException......", ex); + ex.printStackTrace(); + return new ResponseEntity<ResultModel>(new ResultModel(-999, ex.getMessage()), HttpStatus.EXPECTATION_FAILED); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity<ResultModel> handleAllException(Exception ex) { + logger.error("handleAllException......", ex); + ex.printStackTrace(); + return new ResponseEntity<ResultModel>(new ResultModel(-999, ex.getMessage()), HttpStatus.EXPECTATION_FAILED); + } +} diff --git a/src/main/java/com/reyun/model/Account.java b/src/main/java/com/reyun/model/Account.java new file mode 100644 index 0000000..e66b822 --- /dev/null +++ b/src/main/java/com/reyun/model/Account.java @@ -0,0 +1,558 @@ +package com.reyun.model; + +import javax.persistence.*; +import java.util.Date; +import java.util.List; + +@Entity +public class Account { + + private Long id; + private String email; + private String password; + private String company; + private String name; + private String phone; + private String qq; + private String wechat; + private boolean isSuperUser; + private Long parent = 0L; + private Long rootParent; + private String isSpecialAccount; + //母账号:-1表示未审核,0表示禁用,1表示已审核;子账号:0表示禁用,1表示启用;总之:1表示用户可用状态;补充:-3表示未激活 -2 表示未开通 + private int status; + private String pastDate; + private Date createTime = new Date(); + //审核通过的时间 + private Date pubDate; + private Long createAccount; + private Date modifyTime = new Date(); + private Long modifyAccount; + private Boolean delFlag; + private Boolean isChannelPerson; + private String channelAccount; + //角色ID,对应role_auth表的ID。 + private Long roleCategory; + private Long pricelevel; + private Long bussinessman; + private Long activeTime; + private Long forgetPwdTime; + //默认状态为空 false 忘记密码邮件发送后赋值; true 修改完密码之后赋值,表示完成修改密码操作,整个忘记密码流程结束 + private Boolean forgetPwdStatus; + //默认状态为空 false 激活邮件发送后赋值; true 激活操作之后赋值,表示完成激活操作,整个激活流程结束,防止重复提交url + private Boolean activeStatus; + private int appSize; + private String remark; + //默认为空 false 非全渠道设置参数 true全渠道设置参数 + private Boolean allChannelValidMatch; + private Boolean allChannelFakeMatch; + private Boolean allChannelBlackMatch; + + //Transient + private String modifyAccountName; + private String createAccountName; + private String roleName; + private Long parentRole; + private String authStr; + private boolean isMasterLogin; + private List<UserLog> userLogList; + private List<Auth> authList; + private Boolean valid; + private String regIpAddr; + private String regIpLocation; + private Boolean verifyEmail = false; + private Boolean allowBehavior; + private Boolean isFlowRestrict; + private String modifyPricelevelTime; + private Boolean newContract; + + public Boolean getFlowRestrict() { + return isFlowRestrict; + } + + public void setFlowRestrict(Boolean flowRestrict) { + isFlowRestrict = flowRestrict; + } + + public Boolean getAllowBehavior() { + return allowBehavior; + } + + public void setAllowBehavior(Boolean allowBehavior) { + this.allowBehavior = allowBehavior; + } + + public Account() { + super(); + } + + public Account(Long id, String email, String password, String company, + String name, String phone, String qq, boolean isSuperUser, + Long parent, String isSpecialAccount, int status, String pastDate, + Date createTime, Long createAccount, Date modifyTime, + Long modifyAccount, boolean delFlag) { + super(); + this.id = id; + this.email = email; + this.password = password; + this.company = company; + this.name = name; + this.phone = phone; + this.qq = qq; + this.isSuperUser = isSuperUser; + this.parent = parent; + this.isSpecialAccount = isSpecialAccount; + this.status = status; + this.pastDate = pastDate; + this.createTime = createTime; + this.createAccount = createAccount; + this.modifyTime = modifyTime; + this.modifyAccount = modifyAccount; + this.delFlag = delFlag; + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public boolean getIsSuperUser() { + return isSuperUser; + } + + public String getName() { + return name; + } + + public String getPassword() { + return password; + } + + public String getPhone() { + return phone; + } + + public String getQq() { + return qq; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCompany(String company) { + this.company = company; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getCompany() { + return company; + } + + public String getEmail() { + return email; + } + + public void setId(Long id) { + this.id = id; + } + + public void setIsSuperUser(boolean isSuperUser) { + this.isSuperUser = isSuperUser; + } + + public void setName(String name) { + this.name = name; + } + + public void setPassword(String password) { + this.password = password; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public void setQq(String qq) { + this.qq = qq; + } + + public void setSuperUser(boolean isSuperUser) { + this.isSuperUser = isSuperUser; + } + + public Long getParent() { + return parent; + } + + public void setParent(Long parent) { + this.parent = parent; + } + + public Long getRootParent() { + return rootParent; + } + + public void setRootParent(Long rootParent) { + this.rootParent = rootParent; + } + + public String getIsSpecialAccount() { + return isSpecialAccount; + } + + public void setIsSpecialAccount(String isSpecialAccount) { + this.isSpecialAccount = isSpecialAccount; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getPastDate() { + return pastDate; + } + + public void setPastDate(String pastDate) { + this.pastDate = pastDate; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Long getCreateAccount() { + return createAccount; + } + + public void setCreateAccount(Long createAccount) { + this.createAccount = createAccount; + } + + public Long getModifyAccount() { + return modifyAccount; + } + + public void setModifyAccount(Long modifyAccount) { + this.modifyAccount = modifyAccount; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public Boolean getDelFlag() { + return delFlag; + } + + public void setDelFlag(Boolean delFlag) { + this.delFlag = delFlag; + } + + public Boolean getIsChannelPerson() { + return isChannelPerson; + } + + public void setIsChannelPerson(Boolean isChannelPerson) { + this.isChannelPerson = isChannelPerson; + } + + public String getChannelAccount() { + return channelAccount; + } + + public void setChannelAccount(String channelAccount) { + this.channelAccount = channelAccount; + } + + public String getWechat() { + return wechat; + } + + public void setWechat(String wechat) { + this.wechat = wechat; + } + + public Long getPricelevel() { + return pricelevel; + } + + public void setPricelevel(Long pricelevel) { + this.pricelevel = pricelevel; + } + + public Long getBussinessman() { + return bussinessman; + } + + public void setBussinessman(Long bussinessman) { + this.bussinessman = bussinessman; + } + + public Date getPubDate() { + return pubDate; + } + + public void setPubDate(Date pubDate) { + this.pubDate = pubDate; + } + + public Long getActiveTime() { + return activeTime; + } + + public void setActiveTime(Long activeTime) { + this.activeTime = activeTime; + } + + public Long getForgetPwdTime() { + return forgetPwdTime; + } + + public void setForgetPwdTime(Long forgetPwdTime) { + this.forgetPwdTime = forgetPwdTime; + } + + public Boolean getForgetPwdStatus() { + return forgetPwdStatus; + } + + public void setForgetPwdStatus(Boolean forgetPwdStatus) { + this.forgetPwdStatus = forgetPwdStatus; + } + + public Boolean getActiveStatus() { + return activeStatus; + } + + public void setActiveStatus(Boolean activeStatus) { + this.activeStatus = activeStatus; + } + + public Long getRoleCategory() { + return roleCategory; + } + + public void setRoleCategory(Long roleCategory) { + this.roleCategory = roleCategory; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getModifyPricelevelTime() { + return modifyPricelevelTime; + } + + public void setModifyPricelevelTime(String modifyPricelevelTime) { + this.modifyPricelevelTime = modifyPricelevelTime; + } + + public Boolean getNewContract() { + return newContract; + } + + public void setNewContract(Boolean newContract) { + this.newContract = newContract; + } + + @Transient + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + + @Transient + public Long getParentRole() { + return parentRole; + } + + public void setParentRole(Long parentRole) { + this.parentRole = parentRole; + } + + @Transient + public String getAuthStr() { + return authStr; + } + + public void setAuthStr(String authStr) { + this.authStr = authStr; + } + + @Transient + public List<UserLog> getUserLogList() { + return userLogList; + } + + public void setUserLogList(List<UserLog> userLogList) { + this.userLogList = userLogList; + } + + @Transient + public boolean getIsMasterLogin() { + return isMasterLogin; + } + + public void setIsMasterLogin(boolean isMasterLogin) { + this.isMasterLogin = isMasterLogin; + } + + @Transient + public List<Auth> getAuthList() { + return authList; + } + + public void setAuthList(List<Auth> authList) { + this.authList = authList; + } + + @Transient + public String getCreateAccountName() { + return createAccountName; + } + + public void setCreateAccountName(String createAccountName) { + this.createAccountName = createAccountName; + } + + @Transient + public String getModifyAccountName() { + return modifyAccountName; + } + + public void setModifyAccountName(String modifyAccountName) { + this.modifyAccountName = modifyAccountName; + } + + @Transient + public Boolean getValid() { + return valid; + } + + public void setValid(Boolean valid) { + this.valid = valid; + } + + @Transient + public int getAppSize() + { + return appSize; + } + + public void setAppSize(int appSize) + { + this.appSize = appSize; + } + + public Boolean getAllChannelValidMatch() { + return allChannelValidMatch; + } + + public void setAllChannelValidMatch(Boolean allChannelValidMatch) { + this.allChannelValidMatch = allChannelValidMatch; + } + + public Boolean getAllChannelFakeMatch() { + return allChannelFakeMatch; + } + + public void setAllChannelFakeMatch(Boolean allChannelFakeMatch) { + this.allChannelFakeMatch = allChannelFakeMatch; + } + + public Boolean getAllChannelBlackMatch() { + return allChannelBlackMatch; + } + + public void setAllChannelBlackMatch(Boolean allChannelBlackMatch) { + this.allChannelBlackMatch = allChannelBlackMatch; + } + + public String getRegIpAddr() + { + return regIpAddr; + } + + public void setRegIpAddr(String regIpAddr) + { + this.regIpAddr = regIpAddr; + } + + public String getRegIpLocation() + { + return regIpLocation; + } + + public void setRegIpLocation(String regIpLocation) + { + this.regIpLocation = regIpLocation; + } + + public Boolean getVerifyEmail() + { + return verifyEmail; + } + + public void setVerifyEmail(Boolean verifyEmail) + { + this.verifyEmail = verifyEmail; + } + + @Override + public String toString() { + return "Account{" + + "id=" + id + + ", email='" + email + '\'' + + ", password='" + password + '\'' + + ", company='" + company + '\'' + + ", name='" + name + '\'' + + ", phone='" + phone + '\'' + + ", qq='" + qq + '\'' + + ", wechat='" + wechat + '\'' + + ", isSuperUser=" + isSuperUser + + ", parent=" + parent + + ", isSpecialAccount='" + isSpecialAccount + '\'' + + ", status=" + status + + ", pastDate='" + pastDate + '\'' + + ", createTime=" + createTime + + ", pubDate=" + pubDate + + ", createAccount=" + createAccount + + ", modifyTime=" + modifyTime + + ", modifyAccount=" + modifyAccount + + ", delFlag=" + delFlag + + ", roleCategory=" + roleCategory + + ", authStr='" + authStr + '\'' + + ", isChannelPerson=" + isChannelPerson + + ", channelAccount='" + channelAccount + '\'' + + ", userLogList=" + userLogList + + ", isMasterLogin=" + isMasterLogin + + ", pricelevel=" + pricelevel + + ", bussinessman=" + bussinessman + + ", activeTime=" + activeTime + + ", forgetPwdTime=" + forgetPwdTime + + ", forgetPwdStatus=" + forgetPwdStatus + + ", activeStatus=" + activeStatus + + '}'; + } +} diff --git a/src/main/java/com/reyun/model/AccountRestrict4Web.java b/src/main/java/com/reyun/model/AccountRestrict4Web.java new file mode 100644 index 0000000..461eafa --- /dev/null +++ b/src/main/java/com/reyun/model/AccountRestrict4Web.java @@ -0,0 +1,195 @@ +package com.reyun.model; + +import java.math.BigInteger; + +public class AccountRestrict4Web { + private String packageName; + private String originalName; + private BigInteger IOLimit; + private String pastDate; + private BigInteger TrackLimit; + private Long accountId; + private int priceLevel; + private int iOremainingDays; + private int trackRemainingDays; + private BigInteger TrackTotalFlow; + private BigInteger thisMonthIOFlow; + private Double trackRemainPercent; + private Double IORemainPercent; + private BigInteger lastMonthIOFlow; + private Boolean isFlowRestrict; + private Long packLevel; + private Boolean isTrackPastTimeNotified; + private Boolean isIOPastTimeNotified; + private Boolean isTrackFlowNotified; + private Boolean isIOFlowNotified; + private Boolean allowBehavior; + + public Long getPackLevel() { + return packLevel; + } + + public void setPackLevel(Long packLevel) { + this.packLevel = packLevel; + } + + public Boolean getFlowRestrict() { + return isFlowRestrict; + } + + public void setFlowRestrict(Boolean flowRestrict) { + isFlowRestrict = flowRestrict; + } + + public String getPackageName() { + return packageName; + } + + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public String getOriginalName() { + return originalName; + } + + public void setOriginalName(String originalName) { + this.originalName = originalName; + } + + public BigInteger getIOLimit() { + return IOLimit; + } + + public void setIOLimit(BigInteger IOLimit) { + this.IOLimit = IOLimit; + } + + public String getPastDate() { + return pastDate; + } + + public void setPastDate(String pastDate) { + this.pastDate = pastDate; + } + + public BigInteger getTrackLimit() { + return TrackLimit; + } + + public void setTrackLimit(BigInteger trackLimit) { + TrackLimit = trackLimit; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public int getPriceLevel() { + return priceLevel; + } + + public void setPriceLevel(int priceLevel) { + this.priceLevel = priceLevel; + } + + public int getiOremainingDays() { + return iOremainingDays; + } + + public void setiOremainingDays(int iOremainingDays) { + this.iOremainingDays = iOremainingDays; + } + + public int getTrackRemainingDays() { + return trackRemainingDays; + } + + public void setTrackRemainingDays(int trackRemainingDays) { + this.trackRemainingDays = trackRemainingDays; + } + + public BigInteger getTrackTotalFlow() { + return TrackTotalFlow; + } + + public void setTrackTotalFlow(BigInteger trackTotalFlow) { + TrackTotalFlow = trackTotalFlow; + } + + public BigInteger getThisMonthIOFlow() { + return thisMonthIOFlow; + } + + public void setThisMonthIOFlow(BigInteger thisMonthIOFlow) { + this.thisMonthIOFlow = thisMonthIOFlow; + } + + public Double getTrackRemainPercent() { + return trackRemainPercent; + } + + public void setTrackRemainPercent(Double trackRemainPercent) { + this.trackRemainPercent = trackRemainPercent; + } + + public Double getIORemainPercent() { + return IORemainPercent; + } + + public void setIORemainPercent(Double IORemainPercent) { + this.IORemainPercent = IORemainPercent; + } + + public BigInteger getLastMonthIOFlow() { + return lastMonthIOFlow; + } + + public void setLastMonthIOFlow(BigInteger lastMonthIOFlow) { + this.lastMonthIOFlow = lastMonthIOFlow; + } + + public Boolean getTrackPastTimeNotified() { + return isTrackPastTimeNotified; + } + + public void setTrackPastTimeNotified(Boolean trackPastTimeNotified) { + isTrackPastTimeNotified = trackPastTimeNotified; + } + + public Boolean getIOPastTimeNotified() { + return isIOPastTimeNotified; + } + + public void setIOPastTimeNotified(Boolean IOPastTimeNotified) { + isIOPastTimeNotified = IOPastTimeNotified; + } + + public Boolean getTrackFlowNotified() { + return isTrackFlowNotified; + } + + public void setTrackFlowNotified(Boolean trackFlowNotified) { + isTrackFlowNotified = trackFlowNotified; + } + + public Boolean getIOFlowNotified() { + return isIOFlowNotified; + } + + public void setIOFlowNotified(Boolean IOFlowNotified) { + isIOFlowNotified = IOFlowNotified; + } + + public Boolean getAllowBehavior() { + return allowBehavior; + } + + public void setAllowBehavior(Boolean allowBehavior) { + this.allowBehavior = allowBehavior; + } +} diff --git a/src/main/java/com/reyun/model/App.java b/src/main/java/com/reyun/model/App.java new file mode 100644 index 0000000..63aa932 --- /dev/null +++ b/src/main/java/com/reyun/model/App.java @@ -0,0 +1,302 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Transient; +import javax.validation.constraints.NotNull; +import java.util.Date; + +@Entity +public class App { + + private Long id; + @NotNull + private String name; + private String platform; + private String appGenre; + private String appGenreName; + private String gameGenre; + //private String gameCategory; + private String appkey; + private String url; + private Long account; +// private boolean sync; + // private boolean isActive; + private Long origiApp; + private String bundleid; + private String token; + private String installtoken; + private boolean regedbutton; + + private Date createTime = new Date(); + private String createAccount; + private Date modifyTime = new Date(); + private String modifyAccount; + private Boolean delFlag; + //是否同步DDB +// private Boolean syncDdb; + + private Long installNum; + private Long registerNum; + //是够是debug模式 true 是测试,false不是测试 + private Boolean isDebug; + + private Boolean ioExhaust; + private Boolean mainAccountExpire; + + + + public App() { + super(); + } + + public App(String name, String platform, String appGenre, String gameGenre) { + this.name = name; + this.platform = platform; + this.appGenre = appGenre; + this.gameGenre = gameGenre; + } + + public App(String name, String platform, String appGenre, String gameGenre, + Long account) { + this.name = name; + this.platform = platform; + this.appGenre = appGenre; + this.gameGenre = gameGenre; + this.account = account; + } + + // public boolean isActive() { + // return isActive; + // } + // + // public void setActive(boolean isActive) { + // this.isActive = isActive; + // } + public Long getAccount() { + return account; + } + + public String getAppGenre() { + return appGenre; + } + + @Transient + public String getAppGenreName() { + return appGenreName; + } + + public void setAppGenreName(String appGenreName) { + this.appGenreName = appGenreName; + } + + public String getAppkey() { + return appkey; + } + + public String getGameGenre() { + return gameGenre; + } + +/* @Transient + public String getGameCategory() { + return gameCategory; + } + public void setGameCategory(String gameCategory) { + this.gameCategory = gameCategory; + }*/ + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public String getPlatform() { + return platform; + } + + public String getUrl() { + return url; + } + + + public void setAccount(Long account) { + this.account = account; + } + + public void setAppGenre(String appGenre) { + this.appGenre = appGenre; + } + + public void setAppkey(String appkey) { + this.appkey = appkey; + } + + public void setGameGenre(String gameGenre) { + this.gameGenre = gameGenre; + } + + public void setId(Long id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + public void setPlatform(String platform) { + this.platform = platform; + } + + public void setUrl(String url) { + this.url = url; + } + + public Long getOrigiApp() { + return origiApp; + } + + public void setOrigiApp(Long origiApp) { + this.origiApp = origiApp; + } + + public String getBundleid() { + return bundleid; + } + + public void setBundleid(String bundleid) { + this.bundleid = bundleid; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public boolean isRegedbutton() { + return regedbutton; + } + + public void setRegedbutton(boolean regedbutton) { + this.regedbutton = regedbutton; + } + + public String getInstalltoken() { + return installtoken; + } + + public void setInstalltoken(String installtoken) { + this.installtoken = installtoken; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getCreateAccount() { + return createAccount; + } + + public void setCreateAccount(String createAccount) { + this.createAccount = createAccount; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public String getModifyAccount() { + return modifyAccount; + } + + public void setModifyAccount(String modifyAccount) { + this.modifyAccount = modifyAccount; + } + + public Boolean getDelFlag() { + return delFlag; + } + + public void setDelFlag(Boolean delFlag) { + this.delFlag = delFlag; + } + + public Boolean getIsDebug() { + return this.isDebug; + } + + public void setIsDebug(Boolean isDebug) { + this.isDebug = isDebug; + } + + + @Transient + public Boolean getIoExhaust() + { + return ioExhaust; + } + + public void setIoExhaust(Boolean ioExhaust) + { + this.ioExhaust = ioExhaust; + } + + @Transient + public Boolean getMainAccountExpire() { + return mainAccountExpire; + } + + public void setMainAccountExpire(Boolean mainAccountExpire) { + this.mainAccountExpire = mainAccountExpire; + } + + @Transient + public Long getInstallNum() { + return installNum; + } + + public void setInstallNum(Long installNum) { + this.installNum = installNum; + } + + @Transient + public Long getRegisterNum() { + return registerNum; + } + + public void setRegisterNum(Long registerNum) { + this.registerNum = registerNum; + } + + @Override + public String toString() { + return "App [id=" + id + ", name=" + name + ", platform=" + platform + + ", appGenre=" + appGenre + ", gameGenre=" + gameGenre + + ", appkey=" + appkey + ", url=" + url + ", account=" + + account + ", origiApp=" + origiApp + + ", bundleid=" + bundleid + ", token=" + token + + ", installtoken=" + installtoken + ", regedbutton=" + + regedbutton + ", createTime=" + createTime + + ", createAccount=" + createAccount + ", modifyTime=" + + modifyTime + ", modifyAccount=" + modifyAccount + + ", delFlag=" + delFlag + "]"; + } + +} diff --git a/src/main/java/com/reyun/model/AttributeRestrict.java b/src/main/java/com/reyun/model/AttributeRestrict.java new file mode 100644 index 0000000..a555a48 --- /dev/null +++ b/src/main/java/com/reyun/model/AttributeRestrict.java @@ -0,0 +1,156 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.util.Date; + +/** + * Created by song on 2017/9/28. + */ + +/** + * 字段说明: + * id:属性id + * attributeName:属性名字 + * appKey:appId + * isAllRestrict:是否所有的用户都进行了限制appId + * isRootRestrict:本app所属的母账户下的所有app是否都进行了限制 + * isParentRestrict:创建此app的账户所创建的所有的app是否都进行了限制 + * isAppRestrict:本app是否进行了限制 + * type:属性类型,是事件属性还是用户属性 + * isEventRestrict:此种类的属性是否进行了限制 + * isProfileRestrict:此种类的属性是否进行了限制 + * createTime:创建时间 + * modifyTime:修改时间 + * + * + * 插入数据说明: + * 1.表中的每一条记录是某一条属性针对某一个app建立的限制条件; + * 2.要限制所有的用户不能使用这个属性分组,那么需要在表中单独插入一条记录,属性名字定义为attributeName,appKey为all,如果所有用户都不能 + * 使用本条属性进行分组,那么就把isAllRestrict字段置为true,否则的话置为false, + * 3.如果要对某一个用户下的所有的app的某个属性进行限制,那么需要把这个账户下所有的app查出来,每一个app存一条记录,将isRootRestrict + * 字段置为true; + * 4.如果要对某一个子账户创建的app进行限制,那么就把这个子账户下的所有的app都查出来,每一个app存一条记录,将isParentRestrict字段置为true; + * 5.如果要对某一个app进行限制,那么就将这个app存一条记录,将isAppRestrict字段置为true; + * 6.type字段要区分是事件属性还是用户属性,因为用户属性和事件属性的名字可能相同,因此属性的类型不能为null; + * + * 查询数据说明: + * 1.在查询这个表的时候,应该先查询属性名为attributeName,appKey为all的记录,查询isAllRestrict这个字段的值, + * 如果没有限制,就查询本app所对应的记录,只要isRootRestrict、isParentRestrict、isAppRestrict或者这几个 + * 字段有一个字段为true,那么就说明对本属性进行了限制; + */ + +@Entity +public class AttributeRestrict { + @Id + @GeneratedValue + private Long id; + private String attributeName; + private String appKey; + private boolean isAllRestrict=false; + private boolean isRootRestrict=false; + private boolean isParentRestrict=false; + private boolean isAppRestrict=false; + private String type; + private boolean isEventRestrict=false; + private boolean isProfileRestrict=false; + private Date createTime=new Date(); + private Date modifyTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getAttributeName() { + return attributeName; + } + + public void setAttributeName(String attributeName) { + this.attributeName = attributeName; + } + + public String getAppKey() { + return appKey; + } + + public void setAppKey(String appKey) { + this.appKey = appKey; + } + + public boolean isAllRestrict() { + return isAllRestrict; + } + + public void setAllRestrict(boolean allRestrict) { + isAllRestrict = allRestrict; + } + + public boolean isRootRestrict() { + return isRootRestrict; + } + + public void setRootRestrict(boolean rootRestrict) { + isRootRestrict = rootRestrict; + } + + public boolean isParentRestrict() { + return isParentRestrict; + } + + public void setParentRestrict(boolean parentRestrict) { + isParentRestrict = parentRestrict; + } + + public boolean isAppRestrict() { + return isAppRestrict; + } + + public void setAppRestrict(boolean appRestrict) { + isAppRestrict = appRestrict; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public boolean isEventRestrict() { + return isEventRestrict; + } + + public void setEventRestrict(boolean eventRestrict) { + isEventRestrict = eventRestrict; + } + + public boolean isProfileRestrict() { + return isProfileRestrict; + } + + public void setProfileRestrict(boolean profileRestrict) { + isProfileRestrict = profileRestrict; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } +} diff --git a/src/main/java/com/reyun/model/Auth.java b/src/main/java/com/reyun/model/Auth.java new file mode 100644 index 0000000..c9401e2 --- /dev/null +++ b/src/main/java/com/reyun/model/Auth.java @@ -0,0 +1,200 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; + +@Entity +public class Auth { + + private Long id; + private Long roleCategory; + private String controlAuth; + private Long app; + private Long account; + private boolean retentionAuth; + private boolean payAuth; + private Long createAccount; + private Date createTime; + private Date modifyTime = new Date(); + private String modifyAccount; + private Boolean status; + private Boolean isNatureOpen; + private Boolean campaign; + private Boolean topAuth; + + //transient + private List<RoleAuthDetail> roleAuthDetailList; + private List<DataAuth> dataAuth; + + + public Auth() { + super(); + } + + public Auth(Long id, Long roleCategory, String controlAuth, + Long app, Long account) { + super(); + this.id = id; + this.roleCategory = roleCategory; + this.controlAuth = controlAuth; + this.app = app; + this.account = account; + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + + public Long getRoleCategory() { + return roleCategory; + } + + public void setRoleCategory(Long roleCategory) { + this.roleCategory = roleCategory; + } + + public String getControlAuth() { + return controlAuth; + } + + public void setControlAuth(String controlAuth) { + this.controlAuth = controlAuth; + } + + public Long getApp() { + return app; + } + + public void setApp(Long app) { + this.app = app; + } + + public Long getAccount() { + return account; + } + + public void setAccount(Long account) { + this.account = account; + } + + public boolean isRetentionAuth() { + return retentionAuth; + } + + public void setRetentionAuth(boolean retentionAuth) { + this.retentionAuth = retentionAuth; + } + + public boolean isPayAuth() { + return payAuth; + } + + public void setPayAuth(boolean payAuth) { + this.payAuth = payAuth; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public String getModifyAccount() { + return modifyAccount; + } + + public void setModifyAccount(String modifyAccount) { + this.modifyAccount = modifyAccount; + } + + public Boolean getStatus() { + return status; + } + + public void setStatus(Boolean status) { + this.status = status; + } + + public Boolean getIsNatureOpen() { + return isNatureOpen; + } + + public void setIsNatureOpen(Boolean isNatureOpen) { + this.isNatureOpen = isNatureOpen; + } + + public Boolean getCampaign() { + return campaign; + } + + public void setCampaign(Boolean campaign) { + this.campaign = campaign; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Long getCreateAccount() { + return createAccount; + } + + public void setCreateAccount(Long createAccount) { + this.createAccount = createAccount; + } + + public Boolean getTopAuth() { + return topAuth; + } + + public void setTopAuth(Boolean topAuth) { + this.topAuth = topAuth; + } + + @Transient + public List<RoleAuthDetail> getRoleAuthDetailList() { + return roleAuthDetailList; + } + + public void setRoleAuthDetailList(List<RoleAuthDetail> roleAuthDetailList) { + this.roleAuthDetailList = roleAuthDetailList; + } + + @Transient + public List<DataAuth> getDataAuth() { + return dataAuth; + } + + public void setDataAuth(List<DataAuth> dataAuth) { + this.dataAuth = dataAuth; + } + + @Override + public String toString() { + return "Auth [id=" + id + ", roleCategory=" + roleCategory + + ", controlAuth=" + controlAuth + ", app=" + app + + ", account=" + account + ", retentionAuth=" + retentionAuth + + ", payAuth=" + payAuth + ", modifyTime=" + modifyTime + + ", modifyAccount=" + modifyAccount + ", status=" + status + + "]"; + } + + +} diff --git a/src/main/java/com/reyun/model/BussinessMan.java b/src/main/java/com/reyun/model/BussinessMan.java new file mode 100644 index 0000000..fda5792 --- /dev/null +++ b/src/main/java/com/reyun/model/BussinessMan.java @@ -0,0 +1,57 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class BussinessMan { + + private Long id; + private String name; + private String email; + + + + public BussinessMan() { + super(); + } + + + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + + + public String getName() { + return name; + } + + + + public void setName(String name) { + this.name = name; + } + + + + public String getEmail() { + return email; + } + + + + public void setEmail(String email) { + this.email = email; + } + + +} diff --git a/src/main/java/com/reyun/model/Category.java b/src/main/java/com/reyun/model/Category.java new file mode 100644 index 0000000..ade4766 --- /dev/null +++ b/src/main/java/com/reyun/model/Category.java @@ -0,0 +1,48 @@ +package com.reyun.model; + +import java.util.Date; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.validation.constraints.NotNull; + + +@Entity +public class Category { + + private Long id; + private int categoryid; + private String categoryname; + private int isgame; + + @Id + @GeneratedValue + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + public int getCategoryid() { + return categoryid; + } + public void setCategoryid(int categoryid) { + this.categoryid = categoryid; + } + public String getCategoryname() { + return categoryname; + } + public void setCategoryname(String categoryname) { + this.categoryname = categoryname; + } + public int getIsgame() { + return isgame; + } + public void setIsgame(int isgame) { + this.isgame = isgame; + } + + + +} diff --git a/src/main/java/com/reyun/model/CommonEvent.java b/src/main/java/com/reyun/model/CommonEvent.java new file mode 100644 index 0000000..a865fba --- /dev/null +++ b/src/main/java/com/reyun/model/CommonEvent.java @@ -0,0 +1,50 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.validation.constraints.NotNull; + +/** + * Created by sunhao on 17/4/13. + * description: 通用事件 + */ +@Entity +public class CommonEvent { + + private Long id; + + private String event; + + private String alias; + + @Id + @GeneratedValue + public Long getId() { + + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @NotNull + public String getEvent() { + return event; + } + + public void setEvent(String event) { + this.event = event; + } + + @NotNull + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + +} diff --git a/src/main/java/com/reyun/model/CommonIP.java b/src/main/java/com/reyun/model/CommonIP.java new file mode 100644 index 0000000..94ed151 --- /dev/null +++ b/src/main/java/com/reyun/model/CommonIP.java @@ -0,0 +1,89 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.util.Date; + +/** + * Created by mxq on 2017/9/11. + */ +@Entity +public class CommonIP { + private Long id; + //账号id + private Long account; + + + private String ip; + + private Long createAccount; + private Date createTime; + private Date modifyTime = new Date(); + private Long modifyAccount; + private Boolean delFlag; + + @Id + @GeneratedValue + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + public Long getAccount() { + return account; + } + + public void setAccount(Long account) { + this.account = account; + } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public Long getCreateAccount() { + return createAccount; + } + + public void setCreateAccount(Long createAccount) { + this.createAccount = createAccount; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Boolean getDelFlag() { + return delFlag; + } + + public void setDelFlag(Boolean delFlag) { + this.delFlag = delFlag; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public Long getModifyAccount() { + return modifyAccount; + } + + public void setModifyAccount(Long modifyAccount) { + this.modifyAccount = modifyAccount; + } +} diff --git a/src/main/java/com/reyun/model/CommonParam.java b/src/main/java/com/reyun/model/CommonParam.java new file mode 100644 index 0000000..6a6b877 --- /dev/null +++ b/src/main/java/com/reyun/model/CommonParam.java @@ -0,0 +1,74 @@ +package com.reyun.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + + +@Entity +public class CommonParam { + + private Long id; + private String param; + private String alias; + private Integer sortId; + /** + * 事件通用属性值为event,用户通用属性值为profile + */ + private String type; + + private String dimension; + private String dataType; + + @Id + @GeneratedValue + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + public String getParam() { + return param; + } + public void setParam(String param) { + this.param = param; + } + public String getAlias() { + return alias; + } + public void setAlias(String alias) { + this.alias = alias; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + + public String getDimension() { + return dimension; + } + + public void setDimension(String dimension) { + this.dimension = dimension; + } + + public Integer getSortId() { + return sortId; + } + + public void setSortId(Integer sortId) { + this.sortId = sortId; + } + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } +} diff --git a/src/main/java/com/reyun/model/ComplicatedParam.java b/src/main/java/com/reyun/model/ComplicatedParam.java new file mode 100644 index 0000000..5e29668 --- /dev/null +++ b/src/main/java/com/reyun/model/ComplicatedParam.java @@ -0,0 +1,100 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.validation.constraints.NotNull; + +/** + * Created by sunhao on 17/9/21. + * 复杂事件操作符 + */ +@Entity +public class ComplicatedParam { + + private Long id; + + //属性名 + private String viewAttr; + + //属性中文名称 + private String viewAttrName; + + //属性类型 avg sum + private String attrType; + + //属性级别 1,2 + private Integer attrLevel; + + //有效性 + private Boolean valid; + + // view出现在哪个类型前面 + private String viewType; + + public ComplicatedParam(){} + + public ComplicatedParam(String viewAttr, String viewAttrName) { + this.viewAttr = viewAttr; + this.viewAttrName = viewAttrName; + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getViewAttr() { + return viewAttr; + } + + public void setViewAttr(String viewAttr) { + this.viewAttr = viewAttr; + } + + public String getViewAttrName() { + return viewAttrName; + } + + public void setViewAttrName(String viewAttrName) { + this.viewAttrName = viewAttrName; + } + + public String getAttrType() { + return attrType; + } + + public void setAttrType(String attrType) { + this.attrType = attrType; + } + + public Integer getAttrLevel() { + return attrLevel; + } + + public void setAttrLevel(Integer attrLevel) { + this.attrLevel = attrLevel; + } + + @NotNull + public Boolean getValid() { + return valid; + } + + public void setValid(Boolean valid) { + this.valid = valid; + } + + public String getViewType() { + return viewType; + } + + public void setViewType(String viewType) { + this.viewType = viewType; + } +} diff --git a/src/main/java/com/reyun/model/ConfigParam.java b/src/main/java/com/reyun/model/ConfigParam.java new file mode 100644 index 0000000..c4b32f6 --- /dev/null +++ b/src/main/java/com/reyun/model/ConfigParam.java @@ -0,0 +1,46 @@ +package com.reyun.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * Created by sunhao on 17/3/2. + */ +@Entity +public class ConfigParam { + + private Long id; + + private String keyParam; + + private String valueParam; + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Column(unique = true, nullable = false) + public String getKeyParam() { + return keyParam; + } + + public void setKeyParam(String keyParam) { + this.keyParam = keyParam; + } + + public String getValueParam() { + return valueParam; + } + + public void setValueParam(String valueParam) { + this.valueParam = valueParam; + } +} diff --git a/src/main/java/com/reyun/model/CustomMenu.java b/src/main/java/com/reyun/model/CustomMenu.java new file mode 100644 index 0000000..454e6ad --- /dev/null +++ b/src/main/java/com/reyun/model/CustomMenu.java @@ -0,0 +1,221 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; + +/** + * Created by sunhao on 17/4/20. + * desc:看单主表 + */ +@Entity +public class CustomMenu { + + private Long id; + + private String name; + + private Date createDate; + + private Long createAccount; + + private String createAccountName; + + private Long appId; + + private Long category; + + private String categoryName; + //是自建看单还是来自分享的看单,false自建,true分享 + private Boolean source; + //分享看单的Id + private Long shareId; + //分享者ID + private Long shareAccountId; + //分享者名称 + private String shareAccountName; + //分享时间 + private Date shareDate; + //看单排序 + private Integer menuOrder; + //是否已经分享过,不能标示为是否是自己分享过,只能用于前台显示是否能再次分享。 + private Boolean hasShare; + + private Long modifyAccount; + + private Date modifyDate; + + private Boolean delFlag; + //看单显示顺序 + private Integer orderindex; + + //Transient,展示模板列表 + private List<CustomMenuTemplate> templates; + + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public Long getCreateAccount() { + return createAccount; + } + + public void setCreateAccount(Long createAccount) { + this.createAccount = createAccount; + } + + public String getCreateAccountName() { + return createAccountName; + } + + public void setCreateAccountName(String createAccountName) { + this.createAccountName = createAccountName; + } + + public Long getAppId() { + return appId; + } + + public void setAppId(Long appId) { + this.appId = appId; + } + + public Long getCategory() { + return category; + } + + public void setCategory(Long category) { + this.category = category; + } + + public String getCategoryName() { + return categoryName; + } + + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + + public Boolean getSource() { + return source; + } + + public void setSource(Boolean source) { + this.source = source; + } + + public Long getShareId() { + return shareId; + } + + public void setShareId(Long shareId) { + this.shareId = shareId; + } + + public Long getShareAccountId() { + return shareAccountId; + } + + public void setShareAccountId(Long shareAccountId) { + this.shareAccountId = shareAccountId; + } + + public String getShareAccountName() { + return shareAccountName; + } + + public void setShareAccountName(String shareAccountName) { + this.shareAccountName = shareAccountName; + } + + public Date getShareDate() { + return shareDate; + } + + public void setShareDate(Date shareDate) { + this.shareDate = shareDate; + } + + public Integer getMenuOrder() { + return menuOrder; + } + + public void setMenuOrder(Integer menuOrder) { + this.menuOrder = menuOrder; + } + + @Transient + public List<CustomMenuTemplate> getTemplates() { + return templates; + } + + public void setTemplates(List<CustomMenuTemplate> templates) { + this.templates = templates; + } + + public Long getModifyAccount() { + return modifyAccount; + } + + public void setModifyAccount(Long modifyAccount) { + this.modifyAccount = modifyAccount; + } + + public Date getModifyDate() { + return modifyDate; + } + + public void setModifyDate(Date modifyDate) { + this.modifyDate = modifyDate; + } + + public Boolean getDelFlag() { + return delFlag; + } + + public void setDelFlag(Boolean delFlag) { + this.delFlag = delFlag; + } + + public Boolean getHasShare() { + return hasShare; + } + + public void setHasShare(Boolean hasShare) { + this.hasShare = hasShare; + } + + public Integer getOrderindex() { + return orderindex; + } + + public void setOrderindex(Integer orderindex) { + this.orderindex = orderindex; + } +} diff --git a/src/main/java/com/reyun/model/CustomMenuFavorites.java b/src/main/java/com/reyun/model/CustomMenuFavorites.java new file mode 100644 index 0000000..c8d8489 --- /dev/null +++ b/src/main/java/com/reyun/model/CustomMenuFavorites.java @@ -0,0 +1,111 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; + +/** + * Created by sunhao on 17/4/20. + * desc:看单收藏夹 + */ +@Entity +public class CustomMenuFavorites { + + private Long id; + + private Long accountId; + + private Long appId; + + private Long shareId; + + private Date createDate; + + private Double matchPercent; + + private Boolean delFlag; + //true分享有效,false分享无效 + private Boolean shareValid; + + public CustomMenuFavorites(){} + + public CustomMenuFavorites(Long accountId, Long appId, Long shareId, Double matchPercent){ + + this.accountId = accountId; + this.appId = appId; + this.shareId = shareId; + this.createDate = new Date(); + this.matchPercent = matchPercent; + this.delFlag = false; + this.shareValid = true; + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public Long getAppId() { + return appId; + } + + public void setAppId(Long appId) { + this.appId = appId; + } + + public Long getShareId() { + return shareId; + } + + public void setShareId(Long shareId) { + this.shareId = shareId; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public Double getMatchPercent() { + return matchPercent; + } + + public void setMatchPercent(Double matchPercent) { + this.matchPercent = matchPercent; + } + + public Boolean getDelFlag() { + return delFlag; + } + + public void setDelFlag(Boolean delFlag) { + this.delFlag = delFlag; + } + + public Boolean getShareValid() { + return shareValid; + } + + public void setShareValid(Boolean shareValid) { + this.shareValid = shareValid; + } +} diff --git a/src/main/java/com/reyun/model/CustomMenuShare.java b/src/main/java/com/reyun/model/CustomMenuShare.java new file mode 100644 index 0000000..8ea54af --- /dev/null +++ b/src/main/java/com/reyun/model/CustomMenuShare.java @@ -0,0 +1,215 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; + +/** + * Created by sunhao on 17/4/20. + * desc:分享看单 + */ +@Entity +public class CustomMenuShare { + + private Long id; + + private Long accountId; + + private String accountName; + + private String name; + + private Long category; + + private String categoryName; + + private Boolean delFlag; + + private Date shareDate; + + private Long originalMenu; + //使用人数 + private Long useNumber; + //收藏次数 + private Long favoriteNumber; + //是否是热云分享的看单 + private Boolean reyunMenu; + + //Transient,分享ID + private Long shareId; + //Transient,展示是否有效 + private Boolean shareValid; + //Transient,展示匹配度 + private Double matchPercent; + //Transient,展示是否收藏 + private Boolean hasFavorite; + //Transient,展示是否使用 + private Boolean hasUsed; + //Transient,展示看单的模板 + private List<CustomMenuShareTemplate> templates; + + + public CustomMenuShare(){} + + public CustomMenuShare(CustomMenuShare customMenuShare){ + this.accountId = customMenuShare.getAccountId(); + this.accountName = customMenuShare.getAccountName(); + this.name = customMenuShare.getName(); + this.category = customMenuShare.getCategory(); + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getCategory() { + return category; + } + + public void setCategory(Long category) { + this.category = category; + } + + public String getCategoryName() { + return categoryName; + } + + public void setCategoryName(String categoryName) { + this.categoryName = categoryName; + } + + public Boolean getDelFlag() { + return delFlag; + } + + public void setDelFlag(Boolean delFlag) { + this.delFlag = delFlag; + } + + public Date getShareDate() { + return shareDate; + } + + public void setShareDate(Date shareDate) { + this.shareDate = shareDate; + } + + public Long getOriginalMenu() { + return originalMenu; + } + + public void setOriginalMenu(Long originalMenu) { + this.originalMenu = originalMenu; + } + + public Long getUseNumber() { + return useNumber; + } + + public void setUseNumber(Long useNumber) { + this.useNumber = useNumber; + } + + public Long getFavoriteNumber() { + return favoriteNumber; + } + + public void setFavoriteNumber(Long favoriteNumber) { + this.favoriteNumber = favoriteNumber; + } + + public Boolean getReyunMenu() { + return reyunMenu; + } + + public void setReyunMenu(Boolean reyunMenu) { + this.reyunMenu = reyunMenu; + } + + @Transient + public Long getShareId() { + return shareId; + } + + public void setShareId(Long shareId) { + this.shareId = shareId; + } + + @Transient + public Boolean getShareValid() { + return shareValid; + } + + public void setShareValid(Boolean shareValid) { + this.shareValid = shareValid; + } + + @Transient + public Double getMatchPercent() { + return matchPercent; + } + + public void setMatchPercent(Double matchPercent) { + this.matchPercent = matchPercent; + } + + @Transient + public Boolean getHasFavorite() { + return hasFavorite; + } + + public void setHasFavorite(Boolean hasFavorite) { + this.hasFavorite = hasFavorite; + } + + @Transient + public Boolean getHasUsed() { + return hasUsed; + } + + public void setHasUsed(Boolean hasUsed) { + this.hasUsed = hasUsed; + } + + @Transient + public List<CustomMenuShareTemplate> getTemplates() { + return templates; + } + + public void setTemplates(List<CustomMenuShareTemplate> templates) { + this.templates = templates; + } +} diff --git a/src/main/java/com/reyun/model/CustomMenuShareTemplate.java b/src/main/java/com/reyun/model/CustomMenuShareTemplate.java new file mode 100644 index 0000000..d6b7231 --- /dev/null +++ b/src/main/java/com/reyun/model/CustomMenuShareTemplate.java @@ -0,0 +1,228 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Transient; +import java.util.Date; + +/** + * Created by sunhao on 17/4/27. + * desc:分享看单模板 + */ +@Entity +public class CustomMenuShareTemplate { + + + private Long id; + + private Long accountId; + + private Long customMenuId; + //模板名称 + private String name; + //查询条件 + private String queryCondition; + //所有事件 + private String events; + //留存参数 + private int relativeTime; + //查询SQL + private String querySql; + //报表类型,事件分析,漏斗,留存 + private String menuType; + //分享后查询出的数据,自建模板无数据 + private String queryData; + //漏斗,留存,事件分析的ID + private Long originalReportId; + + private Date createDate; + + private Long modifyAccount; + + private Date modifyDate; + + private Boolean delFlag; + + //Transient 是否匹配 + private Boolean hasMatch; + + private String type; + + private String descb; + + public CustomMenuShareTemplate(){} + + public CustomMenuShareTemplate(CustomMenuShareTemplate customMenuShareTemplate){ + this.accountId = customMenuShareTemplate.getAccountId(); + this.name = customMenuShareTemplate.getName(); + this.queryCondition = customMenuShareTemplate.getQueryCondition(); + this.querySql = customMenuShareTemplate.getQuerySql(); + this.events = customMenuShareTemplate.getEvents(); + this.relativeTime = customMenuShareTemplate.getRelativeTime(); + this.menuType = customMenuShareTemplate.getMenuType(); + this.modifyAccount = customMenuShareTemplate.getModifyAccount(); + this.originalReportId = customMenuShareTemplate.getOriginalReportId(); + this.createDate = new Date(); + this.modifyDate = new Date(); + this.delFlag = false; + } + + public CustomMenuShareTemplate(CustomMenuTemplate customMenuTemplate){ + this.accountId = customMenuTemplate.getAccountId(); + this.name = customMenuTemplate.getName(); + this.menuType = customMenuTemplate.getMenuType(); + this.modifyAccount = customMenuTemplate.getModifyAccount(); + this.originalReportId = customMenuTemplate.getOriginalReportId(); + this.createDate = new Date(); + this.modifyDate = new Date(); + this.delFlag = false; + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public Long getCustomMenuId() { + return customMenuId; + } + + public void setCustomMenuId(Long customMenuId) { + this.customMenuId = customMenuId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getQueryCondition() { + return queryCondition; + } + + public void setQueryCondition(String queryCondition) { + this.queryCondition = queryCondition; + } + + public String getEvents() { + return events; + } + + public void setEvents(String events) { + this.events = events; + } + + public String getQuerySql() { + return querySql; + } + + public void setQuerySql(String querySql) { + this.querySql = querySql; + } + + public String getMenuType() { + return menuType; + } + + public void setMenuType(String menuType) { + this.menuType = menuType; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public Long getModifyAccount() { + return modifyAccount; + } + + public void setModifyAccount(Long modifyAccount) { + this.modifyAccount = modifyAccount; + } + + public Date getModifyDate() { + return modifyDate; + } + + public void setModifyDate(Date modifyDate) { + this.modifyDate = modifyDate; + } + + public String getQueryData() { + return queryData; + } + + public void setQueryData(String queryData) { + this.queryData = queryData; + } + + public Boolean getDelFlag() { + return delFlag; + } + + public void setDelFlag(Boolean delFlag) { + this.delFlag = delFlag; + } + + public Long getOriginalReportId() { + return originalReportId; + } + + public void setOriginalReportId(Long originalReportId) { + this.originalReportId = originalReportId; + } + + public int getRelativeTime() { + return relativeTime; + } + + public void setRelativeTime(int relativeTime) { + this.relativeTime = relativeTime; + } + + @Transient + public Boolean getHasMatch() { + return hasMatch; + } + + public void setHasMatch(Boolean hasMatch) { + this.hasMatch = hasMatch; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getDescb() { + return descb; + } + + public void setDescb(String descb) { + this.descb = descb; + } +} diff --git a/src/main/java/com/reyun/model/CustomMenuTemplate.java b/src/main/java/com/reyun/model/CustomMenuTemplate.java new file mode 100644 index 0000000..54819d8 --- /dev/null +++ b/src/main/java/com/reyun/model/CustomMenuTemplate.java @@ -0,0 +1,160 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.util.Date; + +/** + * Created by sunhao on 17/4/20. + * desc:我的看单模板 + */ +@Entity +public class CustomMenuTemplate { + + private Long id; + + private Long accountId; + + private Long customMenuId; + //模板名称 + private String name; + //报表类型,事件分析,漏斗,留存 + private String menuType; + //漏斗,留存,事件分析的ID + private Long originalReportId; + + private Date createDate; + + private Long modifyAccount; + + private Date modifyDate; + + private Boolean delFlag; + //模板显示顺序 + private Integer orderindex; + //模板显示形式,折线、表格...... + private String type; + + public CustomMenuTemplate(){} + + public CustomMenuTemplate(CustomMenuTemplate customMenuTemplate){ + this.accountId = customMenuTemplate.getAccountId(); + this.name = customMenuTemplate.getName(); + this.menuType = customMenuTemplate.getMenuType(); + this.modifyAccount = customMenuTemplate.getModifyAccount(); + this.originalReportId = customMenuTemplate.getOriginalReportId(); + this.createDate = new Date(); + this.modifyDate = new Date(); + this.delFlag = false; + } + + public CustomMenuTemplate(CustomMenuShareTemplate customMenuShareTemplate){ + + this.accountId = customMenuShareTemplate.getAccountId(); + this.name = customMenuShareTemplate.getName(); + this.menuType = customMenuShareTemplate.getMenuType(); + this.modifyAccount = customMenuShareTemplate.getModifyAccount(); + this.createDate = new Date(); + this.modifyDate = new Date(); + this.delFlag = false; + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAccountId() { + return accountId; + } + + public void setAccountId(Long accountId) { + this.accountId = accountId; + } + + public Long getCustomMenuId() { + return customMenuId; + } + + public void setCustomMenuId(Long customMenuId) { + this.customMenuId = customMenuId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getMenuType() { + return menuType; + } + + public void setMenuType(String menuType) { + this.menuType = menuType; + } + + public Date getCreateDate() { + return createDate; + } + + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } + + public Long getModifyAccount() { + return modifyAccount; + } + + public void setModifyAccount(Long modifyAccount) { + this.modifyAccount = modifyAccount; + } + + public Date getModifyDate() { + return modifyDate; + } + + public void setModifyDate(Date modifyDate) { + this.modifyDate = modifyDate; + } + + public Boolean getDelFlag() { + return delFlag; + } + + public void setDelFlag(Boolean delFlag) { + this.delFlag = delFlag; + } + + public Long getOriginalReportId() { + return originalReportId; + } + + public void setOriginalReportId(Long originalReportId) { + this.originalReportId = originalReportId; + } + + public Integer getOrderindex() { + return orderindex; + } + + public void setOrderindex(Integer orderindex) { + this.orderindex = orderindex; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/src/main/java/com/reyun/model/DataAuth.java b/src/main/java/com/reyun/model/DataAuth.java new file mode 100644 index 0000000..290c652 --- /dev/null +++ b/src/main/java/com/reyun/model/DataAuth.java @@ -0,0 +1,141 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Transient; +import java.util.Date; +import java.util.List; + +@Entity +public class DataAuth { + + private Long id; + private Long account; + private Long app; + private Long campaign; + private String campaignCode; + private Long channel; + private Boolean allCampaign; + private Date modifyTime = new Date(); + private String modifyAccount; + private Boolean delFlag; + private Boolean channelPermit;//子账号渠道权限是否放开 + //Transient + private List<Long> campaignList; + + public DataAuth() { + super(); + } + + public DataAuth(Long id, Long app, Long campaign, String campaignCode, + Long channel, Boolean allCampaign,Boolean channelPermit) { + super(); + this.id = id; + this.app = app; + this.campaign = campaign; + this.campaignCode = campaignCode; + this.channel = channel; + this.allCampaign = allCampaign; + this.channelPermit = channelPermit; + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getApp() { + return app; + } + + public void setApp(Long app) { + this.app = app; + } + + public Long getCampaign() { + return campaign; + } + + public void setCampaign(Long campaign) { + this.campaign = campaign; + } + + public String getCampaignCode() { + return campaignCode; + } + + public void setCampaignCode(String campaignCode) { + this.campaignCode = campaignCode; + } + + public Long getChannel() { + return channel; + } + + public void setChannel(Long channel) { + this.channel = channel; + } + + public Long getAccount() { + return account; + } + + public void setAccount(Long account) { + this.account = account; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public String getModifyAccount() { + return modifyAccount; + } + + public void setModifyAccount(String modifyAccount) { + this.modifyAccount = modifyAccount; + } + + public Boolean getAllCampaign() { + return allCampaign; + } + + public void setAllCampaign(Boolean allCampaign) { + this.allCampaign = allCampaign; + } + + public Boolean getDelFlag() { + return delFlag; + } + + public void setDelFlag(Boolean delFlag) { + this.delFlag = delFlag; + } + + public Boolean getChannelPermit() { + return channelPermit; + } + + public void setChannelPermit(Boolean channelPermit) { + this.channelPermit = channelPermit; + } + + @Transient + public List<Long> getCampaignList() { + return campaignList; + } + + public void setCampaignList(List<Long> campaignList) { + this.campaignList = campaignList; + } +} diff --git a/src/main/java/com/reyun/model/DataParam.java b/src/main/java/com/reyun/model/DataParam.java new file mode 100644 index 0000000..cd42535 --- /dev/null +++ b/src/main/java/com/reyun/model/DataParam.java @@ -0,0 +1,54 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + + +@Entity +public class DataParam { + + private Long id; + private String dataKey; + private String descp; + private String value; + private String event; + + @Id + @GeneratedValue + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + + public String getDataKey() { + return dataKey; + } + public void setDataKey(String dataKey) { + this.dataKey = dataKey; + } + public String getDescp() { + return descp; + } + public void setDescp(String descp) { + this.descp = descp; + } + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } + public String getEvent() { + return event; + } + public void setEvent(String event) { + this.event = event; + } + + + + +} diff --git a/src/main/java/com/reyun/model/DemoAppointment.java b/src/main/java/com/reyun/model/DemoAppointment.java new file mode 100644 index 0000000..bf68ec1 --- /dev/null +++ b/src/main/java/com/reyun/model/DemoAppointment.java @@ -0,0 +1,118 @@ +package com.reyun.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.util.Date; + +/** + * Created by nolan on 06/06/2017. + * description: + */ +@Entity +public class DemoAppointment { + @Id + @GeneratedValue + private Long id; + private String email; + @Column(nullable = false) + private String name; + @Column(nullable = false) + private String phone; + private String company; + private String jobTitle; + private String area; //所属区域 + private String ipAddr; + private Date createTime; //预约时间 + private Integer status; //审核状态(1:未认领; 2:已认领) + private Date confirmTime; //确认时间 + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone; + } + + public String getCompany() { + return company; + } + + public void setCompany(String company) { + this.company = company; + } + + public String getJobTitle() { + return jobTitle; + } + + public void setJobTitle(String jobTitle) { + this.jobTitle = jobTitle; + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public String getIpAddr() { + return ipAddr; + } + + public void setIpAddr(String ipAddr) { + this.ipAddr = ipAddr; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Integer getStatus() { + return status; + } + + public void setStatus(Integer status) { + this.status = status; + } + + public Date getConfirmTime() { + return confirmTime; + } + + public void setConfirmTime(Date confirmTime) { + this.confirmTime = confirmTime; + } +} diff --git a/src/main/java/com/reyun/model/Dimension4Web.java b/src/main/java/com/reyun/model/Dimension4Web.java new file mode 100644 index 0000000..fbc9ef5 --- /dev/null +++ b/src/main/java/com/reyun/model/Dimension4Web.java @@ -0,0 +1,90 @@ +package com.reyun.model; + +import java.util.List; + +/** + * Created by sunhao on 17/4/19. + * description:分类维度页面显示 + */ +public class Dimension4Web { + + private String id; + + private String dimensionType; + + private String name; + + private String type; + + private List<?> key; + + private List<?> value; + + private String eventType; + + private int sortId; + + public String getEventType() { + return eventType; + } + + public void setEventType(String eventType) { + this.eventType = eventType; + } + + public int getSortId() { + return sortId; + } + + public void setSortId(int sortId) { + this.sortId = sortId; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDimensionType() { + return dimensionType; + } + + public void setDimensionType(String dimensionType) { + this.dimensionType = dimensionType; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public List<?> getKey() { + return key; + } + + public void setKey(List<?> key) { + this.key = key; + } + + public List<?> getValue() { + return value; + } + + public void setValue(List<?> value) { + this.value = value; + } +} diff --git a/src/main/java/com/reyun/model/EditionPricingLevel4Web.java b/src/main/java/com/reyun/model/EditionPricingLevel4Web.java new file mode 100644 index 0000000..5ea94eb --- /dev/null +++ b/src/main/java/com/reyun/model/EditionPricingLevel4Web.java @@ -0,0 +1,97 @@ +package com.reyun.model; + + +import java.util.Map; + +/** + * Created by nolan on 13/03/2017. + * description: + */ +public class EditionPricingLevel4Web { + + /** + * 数据量 + **/ + private Integer appNum; //创建应用数 + private Integer dataConversionFunnelNum; // 转化漏斗数 + private Integer dataUserGroupNum; //用户分群数 + + private Boolean funcMngRealtimeCallback;//推广实时回调 + + + /** + * 平台功能 + * + * @return + */ + private Boolean platformExport;//数据导出 + private Boolean platformServiceSupport; //7*24小时客户服务 + + //AB test处理 + private Map<String,Boolean> abTest; + + + + public EditionPricingLevel4Web(PackageType level) { + this.appNum = level.getAppNum(); + this.dataConversionFunnelNum = level.getDataConversionFunnelNum(); + this.dataUserGroupNum = level.getDataUserGroupNum(); + + this.funcMngRealtimeCallback = level.getFuncMngRealtimeCallback(); + this.platformExport = level.getPlatformExport(); + this.platformServiceSupport = level.getPlatformServiceSupport(); + } + + public Integer getAppNum() { + return appNum; + } + + public void setAppNum(Integer appNum) { + this.appNum = appNum; + } + + public Integer getDataConversionFunnelNum() { + return dataConversionFunnelNum; + } + public void setDataConversionFunnelNum(Integer dataConversionFunnelNum) { + this.dataConversionFunnelNum = dataConversionFunnelNum; + } + public Integer getDataUserGroupNum() { + return dataUserGroupNum; + } + public void setDataUserGroupNum(Integer dataUserGroupNum) { + this.dataUserGroupNum = dataUserGroupNum; + } + + public Boolean getFuncMngRealtimeCallback() { + return funcMngRealtimeCallback; + } + + public void setFuncMngRealtimeCallback(Boolean funcMngRealtimeCallback) { + this.funcMngRealtimeCallback = funcMngRealtimeCallback; + } + + public Boolean getPlatformExport() { + return platformExport; + } + + public void setPlatformExport(Boolean platformExport) { + this.platformExport = platformExport; + } + + public Boolean getPlatformServiceSupport() { + return platformServiceSupport; + } + + public void setPlatformServiceSupport(Boolean platformServiceSupport) { + this.platformServiceSupport = platformServiceSupport; + } + + public Map<String, Boolean> getAbTest() { + return abTest; + } + + public void setAbTest(Map<String, Boolean> abTest) { + this.abTest = abTest; + } +} diff --git a/src/main/java/com/reyun/model/Email.java b/src/main/java/com/reyun/model/Email.java new file mode 100644 index 0000000..70d97ac --- /dev/null +++ b/src/main/java/com/reyun/model/Email.java @@ -0,0 +1,42 @@ +package com.reyun.model; + +import java.util.List; + +public class Email { + private boolean isHaveMultPaths; + private String subject; + private String contents; + private List<String> userEmailAddress; + private String[] multiPaths; + public boolean isHaveMultPaths() { + return isHaveMultPaths; + } + public void setHaveMultPaths(boolean isHaveMultPaths) { + this.isHaveMultPaths = isHaveMultPaths; + } + public String getSubject() { + return subject; + } + public void setSubject(String subject) { + this.subject = subject; + } + public String getContents() { + return contents; + } + public void setContents(String contents) { + this.contents = contents; + } + public List<String> getUserEmailAddress() { + return userEmailAddress; + } + public void setUserEmailAddress(List<String> userEmailAddress) { + this.userEmailAddress = userEmailAddress; + } + public String[] getMultiPaths() { + return multiPaths; + } + public void setMultiPaths(String[] multiPaths) { + this.multiPaths = multiPaths; + } + +} diff --git a/src/main/java/com/reyun/model/Event.java b/src/main/java/com/reyun/model/Event.java new file mode 100644 index 0000000..690412d --- /dev/null +++ b/src/main/java/com/reyun/model/Event.java @@ -0,0 +1,74 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.IdClass; +import javax.persistence.Table; + +@Entity +@Table(name = "event_source") +@IdClass(EventMapPK.class) +public class Event { + + // 事件名 + @Id + private String eventName; + // 事件属性 + @Id + private String eventAttr; + private String dataType; + private boolean common; + @Id + private String appkey; + + public String getEventName() { + return eventName; + } + + public void setEventName(String eventName) { + this.eventName = eventName; + } + + public String getEventAttr() { + return eventAttr; + } + + public void setEventAttr(String eventAttr) { + this.eventAttr = eventAttr; + } + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public boolean isCommon() { + return common; + } + + public void setCommon(boolean common) { + this.common = common; + } + + public String getAppkey() { + return appkey; + } + + public void setAppkey(String appkey) { + this.appkey = appkey; + } + + @Override + public String toString() { + return "Event{" + + "eventName='" + eventName + '\'' + + ", eventAttr='" + eventAttr + '\'' + + ", dataType='" + dataType + '\'' + + ", common=" + common + + ", appkey='" + appkey + '\'' + + '}'; + } +} diff --git a/src/main/java/com/reyun/model/Event4Web.java b/src/main/java/com/reyun/model/Event4Web.java new file mode 100644 index 0000000..dcdd327 --- /dev/null +++ b/src/main/java/com/reyun/model/Event4Web.java @@ -0,0 +1,116 @@ +package com.reyun.model; + +import java.util.List; +import java.util.Map; + +/** + * Created by sunhao on 17/4/19. + * description:事件页面展示model + */ +public class Event4Web { + + private String eventName; + private String eventNameAlias; + private long eventNumber; + private List<EventAttr4Web> firstLevelAttr; + private List<EventAttr4Web> secondLevelAttr; + private List<EventAttr4Web> profiles; + private Map<String, EventAttr4Web> eventAttr4WebMap; + private Boolean isCommon; + private Boolean status; + private Boolean isVirtual; + + public Boolean getVirtual() { + return isVirtual; + } + + public void setVirtual(Boolean virtual) { + isVirtual = virtual; + } + + public String getEventName() { + return eventName; + } + + public void setEventName(String eventName) { + this.eventName = eventName; + } + + public String getEventNameAlias() { + return eventNameAlias; + } + + public void setEventNameAlias(String eventNameAlias) { + this.eventNameAlias = eventNameAlias; + } + + public long getEventNumber() { + return eventNumber; + } + + public void setEventNumber(long eventNumber) { + this.eventNumber = eventNumber; + } + + public List<EventAttr4Web> getFirstLevelAttr() { + return firstLevelAttr; + } + + public void setFirstLevelAttr(List<EventAttr4Web> firstLevelAttr) { + this.firstLevelAttr = firstLevelAttr; + } + + public List<EventAttr4Web> getSecondLevelAttr() { + return secondLevelAttr; + } + + public void setSecondLevelAttr(List<EventAttr4Web> secondLevelAttr) { + this.secondLevelAttr = secondLevelAttr; + } + + public List<EventAttr4Web> getProfiles() { + return profiles; + } + + public void setProfiles(List<EventAttr4Web> profiles) { + this.profiles = profiles; + } + + public Map<String, EventAttr4Web> getEventAttr4WebMap() { + return eventAttr4WebMap; + } + + public void setEventAttr4WebMap(Map<String, EventAttr4Web> eventAttr4WebMap) { + this.eventAttr4WebMap = eventAttr4WebMap; + } + + public Boolean getCommon() { + return isCommon; + } + + public void setCommon(Boolean common) { + isCommon = common; + } + + public Boolean getStatus() { + return status; + } + + public void setStatus(Boolean status) { + this.status = status; + } + + @Override + public String toString() { + return "{" + + "eventName='" + eventName + '\'' + + ", eventNameAlias='" + eventNameAlias + '\'' + + ", firstLevelAttr=" + firstLevelAttr + + ", secondLevelAttr=" + secondLevelAttr + + ", profiles=" + profiles + + ", eventAttr4WebMap=" + eventAttr4WebMap + + ", isCommon=" + isCommon + + ", status=" + status + + '}'; + } +} diff --git a/src/main/java/com/reyun/model/EventAttr4Web.java b/src/main/java/com/reyun/model/EventAttr4Web.java new file mode 100644 index 0000000..d1cbb89 --- /dev/null +++ b/src/main/java/com/reyun/model/EventAttr4Web.java @@ -0,0 +1,147 @@ +package com.reyun.model; + +import java.util.List; + +/** + * Created by sunhao on 17/4/19. + * description:事件属性页面展示model + */ +public class EventAttr4Web { + + private String attr; + private String attrAlias; + private String dataType; + private String data; + private String webType; + private String type; + private int sortId; + private List<?> key; + private List<?> value; + private Boolean isCommon; + private Boolean status; + private Boolean addStatsCondition; + private Boolean addStatsView; + + + public String getAttr() { + return attr; + } + + public void setAttr(String attr) { + this.attr = attr; + } + + public String getAttrAlias() { + return attrAlias; + } + + public void setAttrAlias(String attrAlias) { + this.attrAlias = attrAlias; + } + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getWebType() { + return webType; + } + + public void setWebType(String webType) { + this.webType = webType; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public int getSortId() { + return sortId; + } + + public void setSortId(int sortId) { + this.sortId = sortId; + } + + public List<?> getKey() { + return key; + } + + public void setKey(List<?> key) { + this.key = key; + } + + public List<?> getValue() { + return value; + } + + public void setValue(List<?> value) { + this.value = value; + } + + public Boolean getCommon() { + return isCommon; + } + + public void setCommon(Boolean common) { + isCommon = common; + } + + public Boolean getStatus() { + return status; + } + + public void setStatus(Boolean status) { + this.status = status; + } + + public Boolean getAddStatsCondition() { + return addStatsCondition; + } + + public void setAddStatsCondition(Boolean addStatsCondition) { + this.addStatsCondition = addStatsCondition; + } + + public Boolean getAddStatsView() { + return addStatsView; + } + + public void setAddStatsView(Boolean addStatsView) { + this.addStatsView = addStatsView; + } + + @Override + public String toString() { + return "{" + + "attr='" + attr + '\'' + + ", attrAlias='" + attrAlias + '\'' + + ", dataType='" + dataType + '\'' + + ", webType='" + webType + '\'' + + ", type='" + type + '\'' + + ", sortId=" + sortId + + ", key=" + key + + ", value=" + value + + ", isCommon=" + isCommon + + ", status=" + status + + ", addStatsCondition=" + addStatsCondition + + ", addStatsView=" + addStatsView + + '}'; + } +} diff --git a/src/main/java/com/reyun/model/EventAttributeMeta.java b/src/main/java/com/reyun/model/EventAttributeMeta.java new file mode 100644 index 0000000..08339df --- /dev/null +++ b/src/main/java/com/reyun/model/EventAttributeMeta.java @@ -0,0 +1,115 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.util.Date; + +@Entity +public class EventAttributeMeta { + + private Long id; + // 属性名 + private String attribute; + // 备用名 + private String alias; + private Boolean status; + private Boolean addStatsCondition; + private Boolean addStatsView; + private String appkey; + + private Long modifyAccount; + private Date modifyTime; + + + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public Boolean getStatus() { + return status; + } + + public void setStatus(Boolean status) { + this.status = status; + } + + public Long getModifyAccount() { + return modifyAccount; + } + + public void setModifyAccount(Long modifyAccount) { + this.modifyAccount = modifyAccount; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public String getAppkey() { + return appkey; + } + + public void setAppkey(String appkey) { + this.appkey = appkey; + } + + public String getAttribute() { + return attribute; + } + + public void setAttribute(String attribute) { + this.attribute = attribute; + } + + public Boolean getAddStatsCondition() { + return addStatsCondition; + } + + public void setAddStatsCondition(Boolean addStatsCondition) { + this.addStatsCondition = addStatsCondition; + } + + public Boolean getAddStatsView() { + return addStatsView; + } + + public void setAddStatsView(Boolean addStatsView) { + this.addStatsView = addStatsView; + } + + @Override + public String toString() { + return "EventAttributeMeta{" + + "id=" + id + + ", attribute='" + attribute + '\'' + + ", alias='" + alias + '\'' + + ", status=" + status + + ", addStatsCondition=" + addStatsCondition + + ", addStatsView=" + addStatsView + + ", appkey='" + appkey + '\'' + + ", modifyAccount=" + modifyAccount + + ", modifyTime=" + modifyTime + + '}'; + } +} diff --git a/src/main/java/com/reyun/model/EventMapPK.java b/src/main/java/com/reyun/model/EventMapPK.java new file mode 100644 index 0000000..bbb332d --- /dev/null +++ b/src/main/java/com/reyun/model/EventMapPK.java @@ -0,0 +1,38 @@ +package com.reyun.model; + +import java.io.Serializable; + +/** + * Created by admin on 2017/6/14. + */ +public class EventMapPK implements Serializable { + // 事件名 + private String eventName; + // 事件属性 + private String eventAttr; + private String appkey; + + public String getEventName() { + return eventName; + } + + public void setEventName(String eventName) { + this.eventName = eventName; + } + + public String getEventAttr() { + return eventAttr; + } + + public void setEventAttr(String eventAttr) { + this.eventAttr = eventAttr; + } + + public String getAppkey() { + return appkey; + } + + public void setAppkey(String appkey) { + this.appkey = appkey; + } +} diff --git a/src/main/java/com/reyun/model/EventMeta.java b/src/main/java/com/reyun/model/EventMeta.java new file mode 100644 index 0000000..bc4b5e6 --- /dev/null +++ b/src/main/java/com/reyun/model/EventMeta.java @@ -0,0 +1,83 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.util.Date; + +@Entity +public class EventMeta { + + private Long id; + // 事件名 + private String eventId; + // 事件名备用名 + private String alias; + private Boolean status; + private String appkey; + + private Long modifyAccount; + private Date modifyTime; + + + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getEventId() { + return eventId; + } + + public void setEventId(String eventId) { + this.eventId = eventId; + } + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public Boolean getStatus() { + return status; + } + + public void setStatus(Boolean status) { + this.status = status; + } + + public Long getModifyAccount() { + return modifyAccount; + } + + public void setModifyAccount(Long modifyAccount) { + this.modifyAccount = modifyAccount; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public String getAppkey() { + return appkey; + } + + public void setAppkey(String appkey) { + this.appkey = appkey; + } + + +} diff --git a/src/main/java/com/reyun/model/EventStats.java b/src/main/java/com/reyun/model/EventStats.java new file mode 100644 index 0000000..e7a8ac0 --- /dev/null +++ b/src/main/java/com/reyun/model/EventStats.java @@ -0,0 +1,147 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.util.Date; + +/** + * Created by sunhao on 17/4/10. + * description: 事件分析 + */ +@Entity +public class EventStats { + + private Long id; + + private Long app; + + private Long createAccount; + + private Date createTime; + + private Long modifyAccount; + + private Date modifyTime; + //事件分析名称 + private String name; + //事件名称 + private String eventName; + //事件别名 + private String eventAlias; + //事件属性条件 + private String eventCondition; + //查询sql + private String querySql; + //是否有效 + private Boolean valid; + + //是否是复杂事件 + private Boolean complicatedEvents; + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getApp() { + return app; + } + + public void setApp(Long app) { + this.app = app; + } + + public Long getCreateAccount() { + return createAccount; + } + + public void setCreateAccount(Long createAccount) { + this.createAccount = createAccount; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Long getModifyAccount() { + return modifyAccount; + } + + public void setModifyAccount(Long modifyAccount) { + this.modifyAccount = modifyAccount; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEventAlias() { + return eventAlias; + } + + public void setEventAlias(String eventAlias) { + this.eventAlias = eventAlias; + } + + public String getEventName() { + return eventName; + } + + public void setEventName(String eventName) { + this.eventName = eventName; + } + + public String getEventCondition() { + return eventCondition; + } + + public void setEventCondition(String eventCondition) { + this.eventCondition = eventCondition; + } + + public String getQuerySql() { + return querySql; + } + + public void setQuerySql(String querySql) { + this.querySql = querySql; + } + + public Boolean getValid() { + return valid; + } + + public void setValid(Boolean valid) { + this.valid = valid; + } + + public Boolean getComplicatedEvents() { + return complicatedEvents; + } + + public void setComplicatedEvents(Boolean complicatedEvents) { + this.complicatedEvents = complicatedEvents; + } +} diff --git a/src/main/java/com/reyun/model/EventViewAttr.java b/src/main/java/com/reyun/model/EventViewAttr.java new file mode 100644 index 0000000..bdce3ec --- /dev/null +++ b/src/main/java/com/reyun/model/EventViewAttr.java @@ -0,0 +1,106 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Transient; +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + * Created by sunhao on 17/4/11. + * desc:事件分析展示属性 + */ +@Entity +public class EventViewAttr { + + private Long id; + + //属性名 + private String viewAttr; + + //属性中文名称 + private String viewAttrName; + + //属性类型 avg sum + private String attrType; + + //属性级别 1,2 + private Integer attrLevel; + + //有效性 + private Boolean valid; + + // view出现在哪个类型前面 + private String viewType; + + + + public EventViewAttr(){} + + public EventViewAttr(String viewAttr, String viewAttrName) { + this.viewAttr = viewAttr; + this.viewAttrName = viewAttrName; + } + + + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getViewAttr() { + return viewAttr; + } + + public void setViewAttr(String viewAttr) { + this.viewAttr = viewAttr; + } + + public String getViewAttrName() { + return viewAttrName; + } + + public void setViewAttrName(String viewAttrName) { + this.viewAttrName = viewAttrName; + } + + public String getAttrType() { + return attrType; + } + + public void setAttrType(String attrType) { + this.attrType = attrType; + } + + public Integer getAttrLevel() { + return attrLevel; + } + + public void setAttrLevel(Integer attrLevel) { + this.attrLevel = attrLevel; + } + + @NotNull + public Boolean getValid() { + return valid; + } + + public void setValid(Boolean valid) { + this.valid = valid; + } + + public String getViewType() { + return viewType; + } + + public void setViewType(String viewType) { + this.viewType = viewType; + } +} diff --git a/src/main/java/com/reyun/model/EventtableMetadata.java b/src/main/java/com/reyun/model/EventtableMetadata.java new file mode 100644 index 0000000..c64393d --- /dev/null +++ b/src/main/java/com/reyun/model/EventtableMetadata.java @@ -0,0 +1,66 @@ +package com.reyun.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class EventtableMetadata { + + private Long id; + // 授权处显示的名字 + private String appkey; + + private String ds; + + private String bucketid; + + private String event; + + public EventtableMetadata() { + super(); + } + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getAppkey() { + return appkey; + } + + public void setAppkey(String appkey) { + this.appkey = appkey; + } + + public String getDs() { + return ds; + } + + public void setDs(String ds) { + this.ds = ds; + } + + public String getBucketid() { + return bucketid; + } + + public void setBucketid(String bucketid) { + this.bucketid = bucketid; + } + + public String getEvent() { + return event; + } + + public void setEvent(String event) { + this.event = event; + } + +} diff --git a/src/main/java/com/reyun/model/ExportReportInfo.java b/src/main/java/com/reyun/model/ExportReportInfo.java new file mode 100644 index 0000000..f946fc7 --- /dev/null +++ b/src/main/java/com/reyun/model/ExportReportInfo.java @@ -0,0 +1,193 @@ +package com.reyun.model; + +import java.util.Date; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; + + +@Entity +@Table(name="export_report_info") +public class ExportReportInfo { + + private Long id; + private Long app; + private String name; + private String startDate; + private String endDate; + private String reportName; + private String subType; + private String fileName; + private Date createTime = new Date(); + private Long account; + private String accountName; + private Date modifyTime = new Date(); + private Long modifyAccount; + private String reportType; + private String conditions; + //INIT("init", "等待下载"), + //DOWNLOADING("downloading", "正在下载"), + //COMPLETE("complete", "下载完成"), + //FAILED("failed", "下载失败"); + private String status; + private String functionType; + private Long functionId; + //下载人信息 + private Long downloadAccount; + private String downloadName; + private Date downloadTime; + private String downloadIp; + + @Id + @GeneratedValue + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + public Long getApp() { + return app; + } + public void setApp(Long app) { + this.app = app; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getReportName() { + return reportName; + } + public void setReportName(String reportName) { + this.reportName = reportName; + } + public Date getCreateTime() { + return createTime; + } + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + public Long getAccount() { + return account; + } + public void setAccount(Long account) { + this.account = account; + } + + public String getAccountName() { + return accountName; + } + + public void setAccountName(String accountName) { + this.accountName = accountName; + } + + public String getSubType() { + return subType; + } + + public void setSubType(String subType) { + this.subType = subType; + } + + public Date getModifyTime() { + return modifyTime; + } + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + public Long getModifyAccount() { + return modifyAccount; + } + public void setModifyAccount(Long modifyAccount) { + this.modifyAccount = modifyAccount; + } + public String getStatus() { + return status; + } + public void setStatus(String status) { + this.status = status; + } + public String getFileName() { + return fileName; + } + public void setFileName(String fileName) { + this.fileName = fileName; + } + public String getStartDate() { + return startDate; + } + public void setStartDate(String startDate) { + this.startDate = startDate; + } + public String getEndDate() { + return endDate; + } + public void setEndDate(String endDate) { + this.endDate = endDate; + } + public String getReportType() { + return reportType; + } + public void setReportType(String reportType) { + this.reportType = reportType; + } + public String getConditions() { + return conditions; + } + public void setConditions(String conditions) { + this.conditions = conditions; + } + public String getFunctionType() { + return functionType; + } + public void setFunctionType(String functionType) { + this.functionType = functionType; + } + public Long getFunctionId() { + return functionId; + } + public void setFunctionId(Long functionId) { + this.functionId = functionId; + } + + public Long getDownloadAccount() { + return downloadAccount; + } + + public void setDownloadAccount(Long downloadAccount) { + this.downloadAccount = downloadAccount; + } + + public String getDownloadName() { + return downloadName; + } + + public void setDownloadName(String downloadName) { + this.downloadName = downloadName; + } + + public Date getDownloadTime() { + return downloadTime; + } + + public void setDownloadTime(Date downloadTime) { + this.downloadTime = downloadTime; + } + + public String getDownloadIp() { + return downloadIp; + } + + public void setDownloadIp(String downloadIp) { + this.downloadIp = downloadIp; + } +} diff --git a/src/main/java/com/reyun/model/Funnel.java b/src/main/java/com/reyun/model/Funnel.java new file mode 100644 index 0000000..bcf8223 --- /dev/null +++ b/src/main/java/com/reyun/model/Funnel.java @@ -0,0 +1,156 @@ +package com.reyun.model; + +import java.util.Date; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Transient; + +@Entity +public class Funnel { + + private Long id; + private Long account; + private Long app; + private String name; + private String eventInfo; + private String querySql; + private int window; + private String events; + + private Long createAccount; + private Date createTime = new Date(); + private Date modifyTime = new Date(); + private Long modifyAccount; + private Boolean delFlag; + + private String cAccount; + private String mAcoucnt; + + @Id + @GeneratedValue + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAccount() { + return account; + } + + public void setAccount(Long account) { + this.account = account; + } + + public Long getApp() { + return app; + } + + public void setApp(Long app) { + this.app = app; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEventInfo() { + return eventInfo; + } + + public void setEventInfo(String eventInfo) { + this.eventInfo = eventInfo; + } + + public String getQuerySql() { + return querySql; + } + + public void setQuerySql(String querySql) { + this.querySql = querySql; + } + + public int getWindow() { + return window; + } + + public void setWindow(int window) { + this.window = window; + } + + public Long getCreateAccount() { + return createAccount; + } + + public void setCreateAccount(Long createAccount) { + this.createAccount = createAccount; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } + + public Long getModifyAccount() { + return modifyAccount; + } + + public void setModifyAccount(Long modifyAccount) { + this.modifyAccount = modifyAccount; + } + + public Boolean getDelFlag() { + return delFlag; + } + + public void setDelFlag(Boolean delFlag) { + this.delFlag = delFlag; + } + + public String getEvents() { + return events; + } + + public void setEvents(String events) { + this.events = events; + } + + @Transient + @Column(name="cAccount" ) + public String getcAccount() { + return cAccount; + } + + public void setcAccount(String cAccount) { + this.cAccount = cAccount; + } + + @Transient + public String getmAcoucnt() { + return mAcoucnt; + } + + public void setmAcoucnt(String mAcoucnt) { + this.mAcoucnt = mAcoucnt; + } +} diff --git a/src/main/java/com/reyun/repository/AccountRepository.java b/src/main/java/com/reyun/repository/AccountRepository.java new file mode 100644 index 0000000..9717263 --- /dev/null +++ b/src/main/java/com/reyun/repository/AccountRepository.java @@ -0,0 +1,107 @@ +package com.reyun.repository; + +import com.reyun.model.Account; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigInteger; +import java.util.Date; +import java.util.List; + +@Transactional +public interface AccountRepository extends JpaRepository<Account, Long> { + + @Query(value = "select * from account where id in (select distinct account from auth where app = ?1 and status is true) " + + " and id in (select distinct account from data_auth where app=?1 and all_campaign is false)" + + " and del_flag is not true and status = 1 and (past_date is null or past_date >= ?2) ", nativeQuery = true) + List<Account> findAuthorizedSubAndChannelAccount(Long appId, String currentDate); + + @Query(value = "select * from account where email = ?1", nativeQuery = true) + Account findAccountByEmail(String email); + + @Query(value = "select * from account where parent = ?1 and status = 1 order by create_time desc", nativeQuery = true) + List<Account> findAccountByParent(Long parent); + + @Query(value = "select * from account where parent = ?1 and id <> ?1 and is_channel_person is not true and status in (1,-3) order by modify_time desc", nativeQuery = true) + List<Account> findActiveByParent(Long accountId); + + @Query(value = "select * from account where root_parent = ?1 and id <> ?1 and is_channel_person is not true and status in (1,-3) order by modify_time desc", nativeQuery = true) + List<Account> findActiveByRoot(Long accountId); + + @Query(value = "select * from account where root_parent = ?1 and id <> ?1 and id <> ?2 and is_channel_person is not true and status in (1,-3) order by modify_time desc", nativeQuery = true) + List<Account> findActiveByRootExcludeSelf(Long rootParentId, Long accountId); + + @Query(value = "select * from account where parent = ?1 and id <> ?1 and is_channel_person is not true and status = 0 order by modify_time desc", nativeQuery = true) + List<Account> findDisableByParent(Long accountId); + + @Query(value = "select * from account where root_parent = ?1 and id <> ?1 and is_channel_person is not true and status = 0 order by modify_time desc", nativeQuery = true) + List<Account> findDisableByRoot(Long accountId); + + @Query(value = "select * from account where root_parent = ?1 and id <> ?1 and id <> ?2 and is_channel_person is not true and status = 0 order by modify_time desc", nativeQuery = true) + List<Account> findDisableByRootExcludeSelf(Long rootParentId, Long accountId); + + @Query(value = "select * from account where id = ?1 and password = ?2 ", nativeQuery = true) + Account findAccountByIdAndPwd(Long accountId, String pwd); + + @Query(value = "select id from account where id = ?1 or parent = ?1", nativeQuery = true) + List<Long> findAllAccountList(Long parentAccountId); + + @Query(value = "select * from account where id in ?1 and role_category = 5 order by modify_time desc", nativeQuery = true) + List<Account> findChannelAccountByAccountIds(List<Long> channelAccountIds); + + @Query(value = "select * from account where id in (select distinct create_account from account where id in ?1 and create_account is not null " + + " union " + + "select distinct modify_account from account where id in ?1 and modify_account is not null) ", nativeQuery = true) + List<Account> findCreateAndModifyAccount(List<Long> accountIds); + + @Query(value = "select count(*) from account where role_category = ?1 ", nativeQuery = true) + BigInteger findAccountNumByRoleId(Long roleId); + + @Query(value = "select count(*) from account where parent = ?1 and role_category = 1 ", nativeQuery = true) + BigInteger findSubMangerNumByParent(Long parentId); + + @Query(value = "select * from account where root_parent = ?1 and id <> ?1 and status = 1 order by create_time desc", nativeQuery = true) + List<Account> findAccountByRootParent(Long rootParent); + + + @Query(value = "select * from account where root_parent = ?1 and id <> ?2 and id <> ?1 and status = 1 order by create_time desc", nativeQuery = true) + List<Account> findAccountByRootParentExManager(Long rootParent, Long id); + + @Query(value = "select root_parent from account where id=?1", nativeQuery = true) + BigInteger findRootParentByAccountId(Long accountId); + + + @Transactional + @Modifying + @Query(value = "update Account set status = 1 where id = ?1") + int enable(Long account); + + @Transactional + @Modifying + @Query(value = "update Account set status = 0 where id = ?1") + int forbidden(Long account); + + @Transactional + @Modifying + @Query(value = "update Account set status = 0, modify_account = ?1,modify_time = ?2 where id = ?3") + int disableSubAccount(Long modifyAccount, Date modifyTime, Long subAccount); + + @Transactional + @Modifying + @Query(value = "update Account set status = 1, modify_account = ?1,modify_time = ?2 where id = ?3") + int enableSubAccount(Long modifyAccount, Date modifyTime, Long subAccount); + + List<Account> findByParent(Long account); + + @Transactional + @Modifying + @Query(value = "update Account a set a.name = ?1 ,a.company = ?2 , a.phone = ?3 , a.wechat = ?4 , a.qq = ?5 where a.id = ?6") + int updateAccountBaseInfo(String name, String company, String phone, String wechat, String qq, Long accountId); + + @Transactional + @Modifying + @Query(value = "update Account a set a.password = ?1 where a.password = ?2 and a.id = ?3") + int updateAccountPwd(String newPassword, String oldPassword, Long accountId); +} diff --git a/src/main/java/com/reyun/repository/AppRepository.java b/src/main/java/com/reyun/repository/AppRepository.java new file mode 100644 index 0000000..a38053f --- /dev/null +++ b/src/main/java/com/reyun/repository/AppRepository.java @@ -0,0 +1,56 @@ +package com.reyun.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import com.reyun.model.App; + +public interface AppRepository extends JpaRepository<App, Long> { + + @Query(value = "select * from app where account in (select id from account where parent = ?1 or id = ?1) and del_flag is not true", nativeQuery = true) + List<App> listAppByRootAccount(Long account); + + @Query(value="select appkey from app where id = ?1",nativeQuery=true) + String findAppkeyById(Long id); + + List<App> findByAccount(Long account); + + @Query(value = "select * from app where account =?1 and bundleid = ?2 and del_flag is not true", nativeQuery = true) + App findByBundleidInNotDel(Long account, String bundleid); + + @Query(value = "select * from app where account =?1 and name = ?2 and del_flag is not true", nativeQuery = true) + App findByNameNotDel(Long account, String name); + + @Query(value = "select * from app where token = ?1 limit 1", nativeQuery = true) + App findOneByAppToken(String token); + + @Query(value = "select * from app where id in ?1", nativeQuery = true) + List<App> findByIds(List<Long> ids); + + @Query(value = "select * from app where appkey in ?1", nativeQuery = true) + List<App> findByAppkeys(List<String> appkeys); + + @Query(value = "select * from app a join auth b on a.id = b.app where b.account = ?1 and b.create_account in (select id from account where root_parent = ?2) ", nativeQuery = true) + List<App> findAuthAppByRootParent(Long subAccountId, Long rootParent); + + @Query(value = "select * from app a join auth b on a.id = b.app where b.account = ?1 ", nativeQuery = true) + List<App> findAuthApp(Long subAccountId); + + @Query(value="select platform from app where id = ?1",nativeQuery=true) + String findPlatformByAppId(Long appId); + + @Query(value="select categoryname from category where categoryid=(select game_genre from app where id=?1);",nativeQuery=true) + String findGameCategoryByAppID(Long appId); + + @Query(value="select categoryname from category where categoryid=(select app_genre from app where id=?1);",nativeQuery=true) + String findAppGenreNameByAppID(Long id); + + @Query(value = "select DISTINCT a.* from app a right join data_auth d on a.id = d.app where d.account = ?1 and d.app in ?2 and d.channel = ?3 and (d.all_campaign is true or d.channel_permit is true)", nativeQuery = true) + List<App> listTotalAuthorizedApp(Long accountId, List<Long> appIdList, Long channelId); + + @Query(value = "select create_account from app where appkey=?1", nativeQuery = true) + String findCreateAccountByAppkey(String appKey); + +} diff --git a/src/main/java/com/reyun/repository/AttributeRestrictRepository.java b/src/main/java/com/reyun/repository/AttributeRestrictRepository.java new file mode 100644 index 0000000..55edd0d --- /dev/null +++ b/src/main/java/com/reyun/repository/AttributeRestrictRepository.java @@ -0,0 +1,19 @@ +package com.reyun.repository; + +import com.reyun.model.AttributeRestrict; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +/** + * Created by song on 2017/9/28. + */ +public interface AttributeRestrictRepository extends JpaRepository<AttributeRestrict, Long> { + + @Query(value = "select * from attribute_restrict where attribute_name=?1 and type=?2 and app_key=?3", nativeQuery = true) + AttributeRestrict findIsAllRestrictByNameAndType(String s, String profile,String appKey); + + @Query(value = "select * from attribute_restrict where app_key=?1 and type=?2 and attribute_name=?3",nativeQuery = true) + AttributeRestrict findIsRestrictByAppIdAndType(String appKey,String profile,String attribute_name); +} diff --git a/src/main/java/com/reyun/repository/AuthRepository.java b/src/main/java/com/reyun/repository/AuthRepository.java new file mode 100644 index 0000000..39938c3 --- /dev/null +++ b/src/main/java/com/reyun/repository/AuthRepository.java @@ -0,0 +1,56 @@ +package com.reyun.repository; + +import java.util.List; +import java.util.Map; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import com.reyun.model.Auth; +@Transactional +public interface AuthRepository extends JpaRepository<Auth, Long> { + + @Query(value = "select * from auth where account = ?1 and status is true ", nativeQuery = true) + List<Auth> findAuthByAccountId(Long accountId); + + @Query(value = "select * from auth where account = ?1 and create_account in ?2 and status is true ", nativeQuery = true) + List<Auth> findAuthByCreateIds(Long subAccountId, List<Long> createAccount); + + @Query(value = "select * from auth where account = ?1 and app = ?2 limit 1", nativeQuery = true) + Auth findAuthByAccountAndApp(Long account, Long app); + + @Query(value = "select distinct account from auth where create_account in ?1 and status is true ", nativeQuery = true) + List<Long> findActiveChannelAuth(List<Long> createAccountList); + + @Query(value = "select distinct account from auth where create_account in ?1 and status is not true ", nativeQuery = true) + List<Long> findDisableChannelAuth(List<Long> createAccountList); + + @Query(value = "select * from auth where create_account in ?1 and account = ?2 ", nativeQuery = true) + List<Auth> findAuthByCreateAccount(List<Long> createAccountList, Long channelAccount); + + @Query(value = "select * from auth where create_account in ?1 and account = ?2", nativeQuery = true) + List<Auth> findAuthByCreateAndAuth(List<Long> createAccountList, Long authAccount); + + @Query(value = "select * from auth where role_category = ?1 ", nativeQuery = true) + List<Auth> findAuthByRoleCategory(Long roleCategory); + + @Query(value = "select app from auth where account = ?1 and status is true ", nativeQuery = true) + List<Long> findAppListByAccount(Long accountId); + + @Transactional + @Modifying + @Query(value = "update auth set status = ?3 where account = ?1 and create_account in ?2 ", nativeQuery = true) + int updateStatusByCreateAccount(Long channelAccount, List<Long> createAccountList, Boolean status); + + @Transactional + @Modifying + @Query(value = "delete from auth where account = ?1", nativeQuery = true) + void deleteAuthByAccount(Long account); + + Iterable<Auth> findByApp(Long id); + + @Query(value="select account.email from data_auth,account where account.id=data_auth.account and app=?1 and all_campaign is true and channel=?2", nativeQuery = true) + List<String> findAllcampaignAccountByChanelApp(Long app, Long channel); +} diff --git a/src/main/java/com/reyun/repository/BussinessManRepository.java b/src/main/java/com/reyun/repository/BussinessManRepository.java new file mode 100644 index 0000000..b2cf2ce --- /dev/null +++ b/src/main/java/com/reyun/repository/BussinessManRepository.java @@ -0,0 +1,8 @@ +package com.reyun.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.reyun.model.BussinessMan; +public interface BussinessManRepository extends JpaRepository<BussinessMan, Long> { + +} diff --git a/src/main/java/com/reyun/repository/CategoryRepository.java b/src/main/java/com/reyun/repository/CategoryRepository.java new file mode 100644 index 0000000..d3d634f --- /dev/null +++ b/src/main/java/com/reyun/repository/CategoryRepository.java @@ -0,0 +1,19 @@ +package com.reyun.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import com.reyun.model.Category; + +import java.util.List; + +@Transactional +public interface CategoryRepository extends JpaRepository<Category, Long> { + + @Query(value = "select * from category c where c.categoryid in ?1", nativeQuery = true) + List<Category> findByIds(List<Long> ids); + + @Query(value = "select c.categoryname from category c where c.categoryid = ?1", nativeQuery = true) + String findNameByCategoryId(Long categoryId); +} diff --git a/src/main/java/com/reyun/repository/CommonEventRepository.java b/src/main/java/com/reyun/repository/CommonEventRepository.java new file mode 100644 index 0000000..25e39f1 --- /dev/null +++ b/src/main/java/com/reyun/repository/CommonEventRepository.java @@ -0,0 +1,23 @@ +package com.reyun.repository; + +import com.reyun.model.CommonEvent; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +/** + * Created by sunhao on 17/4/13. + * description:通用事件DAO + */ +public interface CommonEventRepository extends JpaRepository<CommonEvent,Long>{ + + @Query(value="select * from common_event ",nativeQuery=true) + List<CommonEvent> findAll(); + + @Query(value="select * from common_event where event=?1",nativeQuery=true) + CommonEvent findByEvent(String event); + + @Query(value = "SELECT * FROM `common_event` WHERE `alias`=?1", nativeQuery = true) + CommonEvent findByAlias(String alias); +} diff --git a/src/main/java/com/reyun/repository/CommonIPRepository.java b/src/main/java/com/reyun/repository/CommonIPRepository.java new file mode 100644 index 0000000..fbec466 --- /dev/null +++ b/src/main/java/com/reyun/repository/CommonIPRepository.java @@ -0,0 +1,31 @@ +package com.reyun.repository; + +import com.reyun.model.CommonIP; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigInteger; +import java.util.Date; +import java.util.List; + +@Transactional +public interface CommonIPRepository extends JpaRepository<CommonIP, Long> { + + @Query(value = "select * from commonip where del_flag is not true and account = ?1", nativeQuery = true) + List<CommonIP> findAllCommonIPByAccount(Long account); + + @Modifying + @Transactional + @Query(value = "update commonip set del_flag = true, modify_account = ?1 , modify_time = ?2 where id = ?3 and del_flag is not true", nativeQuery = true) + int deleteById(Long modifyAccount, Date modifyTime, Long id); + + @Transactional + @Modifying + @Query(value = "update commonip set ip = ?1 , modify_account = ?2 , modify_time = ?3 where id = ?4 ", nativeQuery = true) + int updateCommonIPById(String ip,Long modifyAccount, Date modifyTime, Long id); + + @Query(value = "select count(1) from commonip where del_flag is not true and account =?1 and ip=?2 ", nativeQuery = true) + BigInteger isCommonIpRepeatByAccount(Long account,String ip); +} diff --git a/src/main/java/com/reyun/repository/CommonParamRepository.java b/src/main/java/com/reyun/repository/CommonParamRepository.java new file mode 100644 index 0000000..895548c --- /dev/null +++ b/src/main/java/com/reyun/repository/CommonParamRepository.java @@ -0,0 +1,25 @@ +package com.reyun.repository; + +import java.math.BigInteger; +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import com.reyun.model.CommonParam; +@Transactional +public interface CommonParamRepository extends JpaRepository<CommonParam, Long> { + + @Query(value="select * from common_param where type=?1 order by sort_id ",nativeQuery=true) + List<CommonParam> findAllByType(String type); + + @Query(value="select * from common_param order by sort_id ",nativeQuery=true) + List<CommonParam> findAllCommonParam(); + + @Query(value = "SELECT * FROM common_param WHERE alias=?1 AND type=?2", nativeQuery = true) + CommonParam findByAlias(String alias, String type); + + @Query(value = "select count(*) from common_param where type=?1",nativeQuery = true) + BigInteger findNumByType(String type); +} diff --git a/src/main/java/com/reyun/repository/ComplicatedParamRepository.java b/src/main/java/com/reyun/repository/ComplicatedParamRepository.java new file mode 100644 index 0000000..283c4c0 --- /dev/null +++ b/src/main/java/com/reyun/repository/ComplicatedParamRepository.java @@ -0,0 +1,21 @@ +package com.reyun.repository; + +import com.reyun.model.ComplicatedParam; +import com.reyun.model.EventViewAttr; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +/** + * Created by sunhao on 17/9/21. + * 复杂事件操作符配置 + */ +public interface ComplicatedParamRepository extends JpaRepository<ComplicatedParam, Long> { + + @Query(value = "select * from complicated_param where valid is true ", nativeQuery = true) + List<ComplicatedParam> findAllParam(); + + @Query(value = "SELECT * FROM complicated_param WHERE view_attr_name = ?1 AND valid is true", nativeQuery = true) + ComplicatedParam findComplicateOperator(String operator); +} diff --git a/src/main/java/com/reyun/repository/ConfigParamRepository.java b/src/main/java/com/reyun/repository/ConfigParamRepository.java new file mode 100644 index 0000000..d680af7 --- /dev/null +++ b/src/main/java/com/reyun/repository/ConfigParamRepository.java @@ -0,0 +1,19 @@ +package com.reyun.repository; + +import com.reyun.model.ConfigParam; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +/** + * Created by sunhao on 17/3/2. + */ +public interface ConfigParamRepository extends JpaRepository<ConfigParam,Long> { + + @Query(value = "select value_param from config_param where key_param = ?1 ", nativeQuery = true) + String findParamsByKey(String key); + + @Query(value = "select * from config_param where key_param in ?1 ", nativeQuery = true) + List<ConfigParam> findParamsByKeys(List<String> keys); +} diff --git a/src/main/java/com/reyun/repository/CustomMenuFavoritesRepository.java b/src/main/java/com/reyun/repository/CustomMenuFavoritesRepository.java new file mode 100644 index 0000000..e62beb7 --- /dev/null +++ b/src/main/java/com/reyun/repository/CustomMenuFavoritesRepository.java @@ -0,0 +1,42 @@ +package com.reyun.repository; + +import com.reyun.model.CustomMenuFavorites; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * Created by sunhao on 17/4/24. + * desc:收藏看单DAO + */ +public interface CustomMenuFavoritesRepository extends JpaRepository<CustomMenuFavorites, Long> { + + + @Query(value = "select * from custom_menu_favorites where account_id = ?1 and app_id = ?2 and del_flag is false order by create_date desc ", nativeQuery = true) + List<CustomMenuFavorites> findAllFavorites(Long accountId,Long appId); + + @Query(value = "select * from custom_menu_favorites where account_id = ?1 and app_id = ?2 and share_id =?3 and del_flag is false limit 1", nativeQuery = true) + CustomMenuFavorites findFavoriteMenuByShareId(Long accountId,Long appId,Long shareId); + + @Query(value = "select * from custom_menu_favorites where account_id = ?1 and app_id = ?2 and share_id =?3 and del_flag is true limit 1", nativeQuery = true) + CustomMenuFavorites findHasAddToFavorite(Long accountId,Long appId,Long shareId); + + @Transactional + @Modifying + @Query(value = "update custom_menu_favorites set del_flag = true where account_id = ?1 and app_id = ?2 and share_id =?3 and del_flag is false ", nativeQuery = true) + int deleteFavorites(Long accountId,Long appId,Long menuId); + + + @Transactional + @Modifying + @Query(value = "update custom_menu_favorites set del_flag = false where account_id = ?1 and app_id = ?2 and share_id =?3 and del_flag is true ", nativeQuery = true) + int restoreFavorites(Long accountId,Long appId,Long menuId); + + @Transactional + @Modifying + @Query(value = "update custom_menu_favorites set share_valid = false where share_id = ?1 and del_flag is false ", nativeQuery = true) + int updateFavoritesShareInvalid(Long menuId); +} diff --git a/src/main/java/com/reyun/repository/CustomMenuRepository.java b/src/main/java/com/reyun/repository/CustomMenuRepository.java new file mode 100644 index 0000000..6ea751a --- /dev/null +++ b/src/main/java/com/reyun/repository/CustomMenuRepository.java @@ -0,0 +1,77 @@ +package com.reyun.repository; + +import com.reyun.model.CustomMenu; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigInteger; +import java.util.Date; +import java.util.List; + +/** + * Created by sunhao on 17/4/21. + * desc:我的看单 + */ +public interface CustomMenuRepository extends JpaRepository<CustomMenu, Long> { + + @Query(value = "select * from custom_menu where create_account = ?1 and app_id = ?2 and share_id = ?3 and source is true and del_flag is false ", nativeQuery = true) + CustomMenu findCustomMenuByShareId(Long accountId, Long appId, Long shareId); + + //查询所有有效地看单 + @Query(value = "select * from custom_menu where create_account = ?1 and app_id = ?2 and del_flag is false order by ifnull(modify_date,create_date) desc ", nativeQuery = true) + List<CustomMenu> findValidCustomMenu(Long accountId, Long appId); + + //按照app查询所有有效地看单 + @Query(value = "select * from custom_menu where app_id = ?1 and del_flag is false order by orderindex ", nativeQuery = true) + List<CustomMenu> findValidCustomMenuByApp(Long appId); + + //查询所有失效的看单 + @Query(value = "select * from custom_menu where app_id = ?1 ", nativeQuery = true) + List<CustomMenu> findAllCustomMenuByApp(Long appId); + + @Query(value = "select * from custom_menu where id in ?1 and del_flag is false ", nativeQuery = true) + List<CustomMenu> findAllByIds(List<Long> list); + + @Query(value = "select * from custom_menu where id = ?1 and has_share is false ", nativeQuery = true) + CustomMenu findUnsharedMenu(Long menuId); + + @Query(value = "select count(*) from custom_menu where app_id = ?1 and del_flag is false ", nativeQuery = true) + BigInteger findMyMenuNumber(Long appId); + + @Query(value = "select count(*) from custom_menu where app_id = ?1 and name = ?2 and del_flag is false ", nativeQuery = true) + BigInteger findMyMenuNumberByName(Long appId,String menuName); + + @Query(value = "select count(*) from custom_menu where app_id = ?1 and name like ?2% and del_flag is false ", nativeQuery = true) + BigInteger findNameLikeNumber(Long appId,String menuName); + + @Query(value = "select count(*) from custom_menu where app_id = ?1 and share_id = ?2 and del_flag is false ", nativeQuery = true) + BigInteger findByShareId(Long appId, Long shareId); + + @Transactional + @Modifying + @Query(value = "update custom_menu set del_flag = true where create_account = ?1 and app_id = ?2 and id = ?3 and del_flag is false ", nativeQuery = true) + int deleteMyMenu(Long accountId, Long appId, Long menuId); + + @Transactional + @Modifying + @Query(value = "update custom_menu set has_share = ?2 where id = ?1 and del_flag is false ", nativeQuery = true) + int updateMyMenuShare(Long menuId, Boolean isShare); + + @Transactional + @Modifying + @Query(value = "update custom_menu set name = ?3,modify_date = ?4,modify_account = ?1 where id = ?2 and del_flag is false ", nativeQuery = true) + int updateMyMenuName(Long accountId, Long menuId, String name, Date date); + + @Transactional + @Modifying + @Query(value = "update custom_menu set create_account_name = ?2 where create_account = ?1 ", nativeQuery = true) + int updateAccountName(Long accountId, String accountName); + + @Transactional + @Modifying + @Query(value = "update custom_menu set share_account_name = ?2 where share_account_id = ?1 ", nativeQuery = true) + int updateShareAccountName(Long accountId, String accountName); + +} diff --git a/src/main/java/com/reyun/repository/CustomMenuShareRepository.java b/src/main/java/com/reyun/repository/CustomMenuShareRepository.java new file mode 100644 index 0000000..4fda1b9 --- /dev/null +++ b/src/main/java/com/reyun/repository/CustomMenuShareRepository.java @@ -0,0 +1,65 @@ +package com.reyun.repository; + +import com.reyun.model.CustomMenuShare; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * Created by sunhao on 17/4/21. + * desc:分享看单(即行业看单模板) + */ +public interface CustomMenuShareRepository extends JpaRepository<CustomMenuShare,Long>{ + + @Query(value = "select * from custom_menu_share where category = ?1 and del_flag is false order by share_date desc ",nativeQuery = true) + List<CustomMenuShare> listAllSharedByCategory(Long categoryId); + + @Query(value = "select * from custom_menu_share where del_flag is false order by share_date desc ",nativeQuery = true) + List<CustomMenuShare> listAllShared(); + + @Query(value = "select * from custom_menu_share where original_menu = ?1 and del_flag is false ",nativeQuery = true) + CustomMenuShare findShareByOriginalMenu(Long menuId); + + @Query(value = "SELECT * from custom_menu_share where del_flag is FALSE GROUP BY (category)", nativeQuery = true) + List<CustomMenuShare> findIndustry(); + + @Query(value = "select * from custom_menu_share where id = ?1 ", nativeQuery = true) + CustomMenuShare findShareById(Long shareId); + + @Query(value = "select * from custom_menu_share where reyun_menu is true and category = ?1", nativeQuery = true) + List<CustomMenuShare> findReyunMenu(Long categoryId); + + @Transactional + @Modifying + @Query(value = "update custom_menu_share set use_number = use_number + 1 where id = ?1 ",nativeQuery = true) + int addUserNumber(Long menuId); + + @Transactional + @Modifying + @Query(value = "update custom_menu_share set use_number = (CASE WHEN use_number - 1 < 0 THEN 0 ELSE use_number - 1 END) where id = ?1 ",nativeQuery = true) + int minusUserNumber(Long menuId); + + @Transactional + @Modifying + @Query(value = "update custom_menu_share set favorite_number = favorite_number + 1 where id = ?1 ",nativeQuery = true) + int addFavoriteNumber(Long menuId); + + @Transactional + @Modifying + @Query(value = "update custom_menu_share set favorite_number = (CASE WHEN favorite_number - 1 < 0 THEN 0 ELSE favorite_number - 1 END) where id = ?1 ",nativeQuery = true) + int minusFavoriteNumber(Long menuId); + + @Transactional + @Modifying + @Query(value = "update custom_menu_share set del_flag = true where id = ?1 and del_flag is false", nativeQuery = true) + int deleteShareMenu(Long menuId); + + + @Transactional + @Modifying + @Query(value = "update custom_menu_share set account_name = ?2 where account_id = ?1 ", nativeQuery = true) + int updateAccountName(Long accountId, String accountName); +} diff --git a/src/main/java/com/reyun/repository/CustomMenuShareTempRepository.java b/src/main/java/com/reyun/repository/CustomMenuShareTempRepository.java new file mode 100644 index 0000000..65098b2 --- /dev/null +++ b/src/main/java/com/reyun/repository/CustomMenuShareTempRepository.java @@ -0,0 +1,25 @@ +package com.reyun.repository; + +import com.reyun.model.CustomMenuShareTemplate; +import com.reyun.model.CustomMenuTemplate; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * Created by sunhao on 17/4/27. + * desc:分析看单模板DAO + */ +public interface CustomMenuShareTempRepository extends JpaRepository<CustomMenuShareTemplate,Long>{ + + @Query(value = "select * from custom_menu_share_template where custom_menu_id = ?1 and del_flag is false ", nativeQuery = true) + List<CustomMenuShareTemplate> findShareTemplateById(Long customMenuId); + + @Transactional + @Modifying + @Query(value = "update custom_menu_share_template set query_data = ?2 where id = ?1 ", nativeQuery = true) + int updateQueryDataById(Long templateId, String queryData); +} diff --git a/src/main/java/com/reyun/repository/CustomMenuTemplateRepository.java b/src/main/java/com/reyun/repository/CustomMenuTemplateRepository.java new file mode 100644 index 0000000..987a8f0 --- /dev/null +++ b/src/main/java/com/reyun/repository/CustomMenuTemplateRepository.java @@ -0,0 +1,45 @@ +package com.reyun.repository; + +import com.reyun.model.CustomMenuTemplate; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigInteger; +import java.util.List; + +/** + * Created by sunhao on 17/4/24. + * desc:我的看单包含的模板DAO + */ +public interface CustomMenuTemplateRepository extends JpaRepository<CustomMenuTemplate,Long>{ + + @Query(value = "select * from custom_menu_template where custom_menu_id = ?1 and del_flag is false order by orderindex ", nativeQuery = true) + List<CustomMenuTemplate> findMyTemplateById(Long customMenuId); + + @Query(value = "select * from custom_menu_template where custom_menu_id = ?1 and original_report_id = ?2 and menu_type = ?3 and del_flag is false ", nativeQuery = true) + CustomMenuTemplate findMyTemplateByReportId(Long customMenuId, Long reportId, String menuType); + + @Query(value = "select count(*) from custom_menu_template where custom_menu_id = ?1 and del_flag is false ", nativeQuery = true) + BigInteger countNumberByMenu(Long menuId); + + @Query(value = "select id from custom_menu_template where original_report_id = ?1 and menu_type = ?2 and del_flag is false", nativeQuery = true) + List<Long> findTemplateByOriginal(Long originalId, String menuType); + + @Query(value = "select * from custom_menu_template where original_report_id = ?1 and menu_type = ?2 and del_flag is false", nativeQuery = true) + List<CustomMenuTemplate> findAllTemplateByOriginal(Long originalId, String menuType); + + @Query(value = "select custom_menu_id from custom_menu_template where original_report_id = ?1 and menu_type = ?2 and del_flag is false", nativeQuery = true) + List<Long> findMenuByOriginal(Long originalId, String menuType); + + @Transactional + @Modifying + @Query(value = "update custom_menu_template set del_flag = true, modify_account = ?1 where id in ?2 and del_flag is false ", nativeQuery = true) + int deleteTemplateByIds(Long accountId, List<Long> templateIds); + + @Transactional + @Modifying + @Query(value = "update custom_menu_template set del_flag = true, modify_account = ?1 where id = ?2 and del_flag is false ", nativeQuery = true) + int updateTemplateInvalid(Long accountId, Long templateId); +} diff --git a/src/main/java/com/reyun/repository/DataAuthRepository.java b/src/main/java/com/reyun/repository/DataAuthRepository.java new file mode 100644 index 0000000..a00b760 --- /dev/null +++ b/src/main/java/com/reyun/repository/DataAuthRepository.java @@ -0,0 +1,44 @@ +package com.reyun.repository; + +import com.reyun.model.DataAuth; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Transactional +public interface DataAuthRepository extends JpaRepository<DataAuth, Long> { + + @Query(value = "select * from data_auth where account in ?1", nativeQuery = true) + List<DataAuth> findDataAuthByAccount(List<Long> account); + + @Query(value = "select * from data_auth where account = ?1", nativeQuery = true) + List<DataAuth> findDataAuthByAccount(Long account); + + @Query(value = "select * from data_auth where account = ?1 and app=?2", nativeQuery = true) + List<DataAuth> findDataAuthByAccountAndApp(Long account, Long app); + + @Query(value = "select * from data_auth where account = ?2 and app in (select app from auth where create_account in ?1 and account = ?2)", nativeQuery = true) + List<DataAuth> findDataAuthByCreateAccount(List<Long> createAccount, Long channelAccount); + + @Transactional + @Modifying + @Query(value = "delete from data_auth where account = ?1", nativeQuery = true) + void deleteAuthByAccount(Long account); + + @Query(value = "select * from data_auth where app = ?1 and channel =?2 and campaign =?3", nativeQuery = true) + List<DataAuth> listDataAuthByAppChnCam(Long app, Long channel, Long campain); + + Iterable<DataAuth> findByApp(Long id); + + @Query(value = "select account from data_auth where app = ?1 and channel =?2 and campaign =?3", nativeQuery = true) + List<Long> listAccountByAppChnCam(Long app, Long channel, Long campain); + + @Query(value = "select * from data_auth where channel =?1", nativeQuery = true) + List<DataAuth> listDataAuthByChannel(Long channel); + + @Query(value = "select * from data_auth where account = ?1 and app = ?2 and all_campaign = 1", nativeQuery = true) + List<DataAuth> listByAllCampaign(Long account, Long app); +} diff --git a/src/main/java/com/reyun/repository/DataParamRepository.java b/src/main/java/com/reyun/repository/DataParamRepository.java new file mode 100644 index 0000000..43f84b8 --- /dev/null +++ b/src/main/java/com/reyun/repository/DataParamRepository.java @@ -0,0 +1,10 @@ +package com.reyun.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.reyun.model.DataParam; + +public interface DataParamRepository extends JpaRepository<DataParam, Long> { + + +} diff --git a/src/main/java/com/reyun/repository/DemoAppointmentRepository.java b/src/main/java/com/reyun/repository/DemoAppointmentRepository.java new file mode 100644 index 0000000..1f76626 --- /dev/null +++ b/src/main/java/com/reyun/repository/DemoAppointmentRepository.java @@ -0,0 +1,18 @@ +package com.reyun.repository; + +import com.reyun.model.DemoAppointment; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.math.BigInteger; + + +/** + * Created by nolan on 06/06/2017. + * description: + */ +public interface DemoAppointmentRepository extends JpaRepository<DemoAppointment, Long> { + + @Query(value = "select count(*) from demo_appointment where phone = ?1 and create_time between date_sub(date_add(now(), INTERVAL 8 hour), INTERVAL 30 day) and date_add(now(), INTERVAL 8 hour)", nativeQuery = true) + BigInteger countByPhone(String phone); +} diff --git a/src/main/java/com/reyun/repository/EventAttributeMetaRepository.java b/src/main/java/com/reyun/repository/EventAttributeMetaRepository.java new file mode 100644 index 0000000..8211b34 --- /dev/null +++ b/src/main/java/com/reyun/repository/EventAttributeMetaRepository.java @@ -0,0 +1,28 @@ +package com.reyun.repository; + +import com.reyun.model.Event; +import com.reyun.model.EventAttributeMeta; +import com.reyun.model.EventMeta; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Transactional +public interface EventAttributeMetaRepository extends JpaRepository<EventAttributeMeta, Long> { + + List<EventAttributeMeta> findByAppkey(String appkey); + + @Query(value = "select * from event_attribute_meta where appkey = ?1 and attribute = ?2", nativeQuery = true) + EventAttributeMeta findByAttribute(String appkey, String name); + + @Query(value = "select * from event_attribute_meta where `appkey`=?1 and (`alias`=?2 OR `attribute`=?2)", nativeQuery = true) + EventAttributeMeta findByAliasOrName(String appkey, String name); + + @Query(value = "select * from event_attribute_meta where appkey = ?1 and status is true and (add_stats_condition is true or add_stats_view is true)", nativeQuery = true) + List<EventAttributeMeta> findByAppkeyAndCondition(String appkey); + + @Query(value = "SELECT * FROM event_attribute_meta WHERE appKey=?2 AND attribute IN(?1)", nativeQuery = true) + List<EventAttributeMeta> findAllByAttributeList(List<String> eventList, String appKey); +} diff --git a/src/main/java/com/reyun/repository/EventMetaRepository.java b/src/main/java/com/reyun/repository/EventMetaRepository.java new file mode 100644 index 0000000..d3b2d11 --- /dev/null +++ b/src/main/java/com/reyun/repository/EventMetaRepository.java @@ -0,0 +1,30 @@ +package com.reyun.repository; + +import com.reyun.model.Event; +import com.reyun.model.EventMeta; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Transactional +public interface EventMetaRepository extends JpaRepository<EventMeta, Long> { + + List<EventMeta> findByAppkey(String appkey); + + @Query(value = "select * from event_meta where appkey = ?1 and event_id = ?2", nativeQuery = true) + EventMeta findByEventId(String appkey, String name); + + @Query(value = "select * from event_meta where `appkey`=?1 and (`alias`=?2 OR `event_id`=?2)", nativeQuery = true) + EventMeta findByAliasOrName(String appkey, String alias); + + @Query(value = "select * from event_meta where appkey = ?1 and event_id in (?2) ", nativeQuery = true) + List<EventMeta> findByEventIds(String appKey, List<String> eventList); + + @Query(value = "select * from event_meta where appkey = ?1 and status is false", nativeQuery = true) + List<EventMeta> findByAppkeyAndStatusIsFalse(String appkey); + + @Query(value = "select * from event_meta where appkey = ?1 and status is true", nativeQuery = true) + List<EventMeta> findByAppkeyAndStatusIsTrue(String appkey); +} diff --git a/src/main/java/com/reyun/repository/EventRepository.java b/src/main/java/com/reyun/repository/EventRepository.java new file mode 100644 index 0000000..9819549 --- /dev/null +++ b/src/main/java/com/reyun/repository/EventRepository.java @@ -0,0 +1,57 @@ +package com.reyun.repository; + +import java.util.Date; +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import com.reyun.model.Event; + +@Transactional +public interface EventRepository extends JpaRepository<Event, Long> { + + List<Event> findByAppkey(String appkey); + + @Query(value = "select * from event_source where appkey = ?1 and event_name in ?2 ", nativeQuery = true) + List<Event> findByAppkeyAndNames(String appKey,List<String> names); + + @Query(value = "select * from event_source where appkey = ?1 group by event_name ", nativeQuery = true) + List<Event> findAllEventByAppKey(String appKey); + + @Query(value = "select * from event_source where appkey = ?1 and event_attr = ?2 limit 1", nativeQuery = true) + Event findOneEventByAttr(String appKey, String eventAttr); + + @Query(value = "select * from event_source where appkey = ?1 and event_attr = ?2 and event_name = ?3", nativeQuery = true) + Event findNumberAttrByEventAttr(String appKey,String attrName,String eventName); + + @Query(value = "select * from event_source where appkey = ?1 and event_name = ?2", nativeQuery = true) + List<Event> findByEventName(String appkey, String name); + + @Query(value = "select * from event_source where appkey = ?1 and common = true", nativeQuery = true) + List<Event> listCommonByApp(String appkey); + + @Query(value = "select * from event_source where appkey = ?1 and event_name in (?2)", nativeQuery = true) + List<Event> findEventAliasByEvent(String appkey, List<String> eventNames); + + @Query(value = "select * from event_source where appkey = ?1 and data_type = ?2 ", nativeQuery = true) + List<Event> findAllAttrByDataType(String appKey, String dataType); + + @Query(value = "select * from event_source where appkey = ?3 and event_attr = ?1 and event_name = ?2", nativeQuery = true) + List<Event> findByAttr(String attr, String eventName, String appKey); + + @Query(value = "select * from event_source where appkey = ?3 and event_attr = ?1 and event_name in (?2)", nativeQuery = true) + List<Event> findByEventsAndAttr(List<String> events, String attr, String appKey); + + @Transactional + @Modifying + @Query(value = "update event_source set add_stats_view = ?4 , modify_account = ?5, modify_time = ?6 where appkey = ?1 and event_name = ?2 and event_attr = ?3 and data_type = 'number' ", nativeQuery = true) + int updateEventStatsAttr(String appKey, String eventName, String attrName, Boolean statsFlag, Long account, Date date); + + @Transactional + @Modifying + @Query(value = "update event_source set add_stats_condition = ?4 , modify_account = ?5, modify_time = ?6 where appkey = ?1 and event_name = ?2 and event_attr = ?3 ", nativeQuery = true) + int updateEventStatsCondition(String appKey, String eventName, String attrName, Boolean statsFlag, Long account, Date date); +} diff --git a/src/main/java/com/reyun/repository/EventStatsRepository.java b/src/main/java/com/reyun/repository/EventStatsRepository.java new file mode 100644 index 0000000..d42e248 --- /dev/null +++ b/src/main/java/com/reyun/repository/EventStatsRepository.java @@ -0,0 +1,54 @@ +package com.reyun.repository; + +import com.reyun.model.EventStats; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigInteger; +import java.util.Date; +import java.util.List; + +/** + * Created by sunhao on 17/4/10. + */ +@Transactional +public interface EventStatsRepository extends JpaRepository<EventStats, Long> { + + @Query(value = "select * from event_stats where app = ?1 and complicated_events = ?2 and valid is true order by ifnull(modify_time,create_time) desc", nativeQuery = true) + List<EventStats> findAll(Long appId, Boolean complicatedEvents); + + @Query(value = "select * from event_stats where id = ?1 and valid is true ", nativeQuery = true) + EventStats findEventStats(Long eventStatsId); + + @Query(value = "select * from event_stats where name = ?1 and app = ?2 and valid is true ", nativeQuery = true) + EventStats findEventStatsByName(String eventStatsName, Long appId); + + @Query(value = "select count(*) from event_stats where name like ?3% and create_account = ?1 and app = ?2 ", nativeQuery = true) + BigInteger findCountLikeName(Long accountId, Long appId, String name); + + @Query(value = "select * from event_stats where create_account in (select id from account where root_parent = ?1) and valid is true and complicated_events is not true ", nativeQuery = true) + List<EventStats> findEventStatsByABTest(Long rootParent); + + @Query(value = "select * from event_stats where create_account in (select id from account where root_parent = ?1) and complicated_events is true", nativeQuery = true) + List<EventStats> findComplicatedRecord(Long rootParent); + + @Query(value = "select * from event_stats where complicated_events is not true and valid is true", nativeQuery = true) + List<EventStats> findAllEsay(); + + @Transactional + @Modifying + @Query(value = "update event_stats set modify_account = ?1,valid = false, modify_time = ?3 where id = ?2 ", nativeQuery = true) + int deleteEventStats(Long accountId, Long eventStatsId, Date modifyDate); + + @Transactional + @Modifying + @Query(value = "update event_stats set event_name = ?1, event_condition = ?2,query_sql = ?3,modify_account = ?4,modify_time = ?6 where id = ?5 ", nativeQuery = true) + int updateEventStats(String eventName, String eventCondition, String querySql, Long modifyAccount, Long eventStatsId, Date modifyDate); + + @Transactional + @Modifying + @Query(value = "update event_stats set event_name = ?1, event_condition = ?2,modify_account = ?3,modify_time = ?5,name = ?6 where id = ?4 ", nativeQuery = true) + int updateEventStats(String eventName, String eventCondition, Long modifyAccount, Long eventStatsId, Date modifyDate,String name); +} diff --git a/src/main/java/com/reyun/repository/EventViewAttrRepository.java b/src/main/java/com/reyun/repository/EventViewAttrRepository.java new file mode 100644 index 0000000..375b081 --- /dev/null +++ b/src/main/java/com/reyun/repository/EventViewAttrRepository.java @@ -0,0 +1,20 @@ +package com.reyun.repository; + +import com.reyun.model.EventViewAttr; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +/** + * Created by sunhao on 17/4/11. + * desc:事件分析展示属性 + */ +public interface EventViewAttrRepository extends JpaRepository<EventViewAttr,Long>{ + + @Query(value = "select * from event_view_attr where valid is true ", nativeQuery = true) + List<EventViewAttr> findEventViewAttr(); + + @Query(value = "SELECT * FROM event_view_attr WHERE `view_attr_name`=?1 AND valid is true", nativeQuery = true) + EventViewAttr findEventViewAttr(String viewAttrName); +} diff --git a/src/main/java/com/reyun/repository/EventtableMetadataRepository.java b/src/main/java/com/reyun/repository/EventtableMetadataRepository.java new file mode 100644 index 0000000..ba80fb3 --- /dev/null +++ b/src/main/java/com/reyun/repository/EventtableMetadataRepository.java @@ -0,0 +1,15 @@ +package com.reyun.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import com.reyun.model.EventtableMetadata; +public interface EventtableMetadataRepository extends JpaRepository<EventtableMetadata, Long> { + + + @Query(value="select distinct bucketid from eventtable_metadata where appkey=?1 and ds >= ?2 and ds <= ?3 and event in ?4",nativeQuery=true) + List<String> listBuckets(String appkey, String startdate, String enddate, List<String> event); + +} diff --git a/src/main/java/com/reyun/repository/ExportReportInfoRepository.java b/src/main/java/com/reyun/repository/ExportReportInfoRepository.java new file mode 100644 index 0000000..7446170 --- /dev/null +++ b/src/main/java/com/reyun/repository/ExportReportInfoRepository.java @@ -0,0 +1,48 @@ +package com.reyun.repository; + +import java.util.Date; +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.transaction.annotation.Transactional; + +import com.reyun.model.ExportReportInfo; + +@Transactional +public interface ExportReportInfoRepository extends JpaRepository<ExportReportInfo, Long> { + + @Query(value = "select * from export_report_info where app = ?1 and create_time > ?2 order by create_time desc ", nativeQuery = true) + List<ExportReportInfo> findByApp(Long app, Date startDate); + + @Query(value = "select * from export_report_info where app = ?1 and create_time > ?2 and account = ?3 order by create_time desc ", nativeQuery = true) + List<ExportReportInfo> findByAccountAndApp(Long app, Date startDate, Long accountId); + + + @Query(value = "select * from export_report_info where app = ?1 and file_name = ?2", nativeQuery = true) + ExportReportInfo findByAppAndFileName(Long app, String fileName); + + @Transactional + @Modifying + @Query(value="update ExportReportInfo set status = ?2, modifyTime=?3, modifyAccount=?4 where id = ?1") + int updateStatus(Long id, String status, Date date, Long account); + + @Transactional + @Modifying + @Query(value="update ExportReportInfo set status = ?2, modifyTime=?3 where id = ?1") + int updateStatus(Long id, String status, Date date); + + @Transactional + @Modifying + @Query(value = "update ExportReportInfo set download_account = ?2, download_name = ?3, download_ip = ?4, download_time = ?5 where id = ?1 ") + int updateDownloadInfo(Long downloadId, Long downloadAccount, String downloadName, String downloadIp, Date downloadTime); + + + @Query(value = "select * from export_report_info where status in (?1,?2)", nativeQuery = true) + List<ExportReportInfo> findByStatus(String code, String code2); + + @Query(value = "select * from export_report_info where status = 'complete' and create_time < ?1", nativeQuery = true) + List<ExportReportInfo> listInvalidExport(Date nowDate); + +} diff --git a/src/main/java/com/reyun/repository/FunnelRepository.java b/src/main/java/com/reyun/repository/FunnelRepository.java new file mode 100644 index 0000000..63c234e --- /dev/null +++ b/src/main/java/com/reyun/repository/FunnelRepository.java @@ -0,0 +1,21 @@ +package com.reyun.repository; + +import java.math.BigInteger; +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import com.reyun.model.Funnel; +public interface FunnelRepository extends JpaRepository<Funnel, Long> { + + @Query(value="select f.*,a.email as cAccount from funnel f, account a where f.app=?1 and f.del_flag is not true and a.id=f.create_account order by f.modify_time desc",nativeQuery=true) + List<Funnel> findAllByApp(Long app); + + @Query(value="select * from funnel where app=?2 and del_flag is not true and name=?1",nativeQuery=true) + Funnel findByNameAndApp(String name, Long app); + + @Query(value="select count(*) from funnel where create_account = ?1 and app=?2 and name like ?3% ",nativeQuery=true) + BigInteger findCountLikeName(Long accountId,Long appId,String name); + +} diff --git a/src/main/java/com/reyun/security/AbstractTokenManager.java b/src/main/java/com/reyun/security/AbstractTokenManager.java new file mode 100644 index 0000000..72a4f0b --- /dev/null +++ b/src/main/java/com/reyun/security/AbstractTokenManager.java @@ -0,0 +1,110 @@ +package com.reyun.security; + +import com.reyun.security.exception.MethodNotSupportException; + +import java.util.UUID; + +public abstract class AbstractTokenManager implements TokenManager { + + protected int tokenExpireSeconds = 7 * 24 * 3600; + + protected boolean singleTokenWithUser = false; + + protected boolean flushExpireAfterOperation = true; + + public void setTokenExpireSeconds(int tokenExpireSeconds) { + this.tokenExpireSeconds = tokenExpireSeconds; + } + + public void setSingleTokenWithUser(boolean singleTokenWithUser) { + this.singleTokenWithUser = singleTokenWithUser; + } + + public void setFlushExpireAfterOperation(boolean flushExpireAfterOperation) { + this.flushExpireAfterOperation = flushExpireAfterOperation; + } + + @Override + public void delRelationshipByKey(String key) { + //如果是多个Token关联同一个Key,不允许直接通过Key删除所有Token,防止误操作 + if (!singleTokenWithUser) { + throw new MethodNotSupportException("非单点登录时无法调用该方法"); + } + delSingleRelationshipByKey(key); + } + + /** + * 一个用户只能绑定一个Token时通过Key删除关联关系 + * @param key + */ + protected abstract void delSingleRelationshipByKey(String key); + + private void createRelationship(String key, String token) { + //根据设置的每个用户是否只允许绑定一个Token,调用不同的方法 + if (singleTokenWithUser) { + createSingleRelationship(key, token); + } else { + createMultipleRelationship(key, token); + } + } + + /** + * 一个用户可以绑定多个Token时创建关联关系 + * @param key + * @param token + */ + protected abstract void createMultipleRelationship(String key, String token); + + /** + * 一个用户只能绑定一个Token时创建关联关系 + * @param key + * @param token + */ + protected abstract void createSingleRelationship(String key, String token); + + @Override + public String getKeyFromToken(String token) { + String key = getKeyByToken(token); + //根据设置,在每次有效操作后刷新过期时间 + if (key != null && flushExpireAfterOperation) { + flushExpireAfterOperation(key, token); + } + return key; + } + + @Override + public String getTokenFromKey(String key) { + return getTokenByKey(key); + } + + @Override + public String createToken(String key) { + final String token = generateToken(); + createRelationship(key, token); + return token; + } + + protected String generateToken(){ + return UUID.randomUUID().toString(); + } + /** + * 通过Token获得Key + * @param token + * @return + */ + protected abstract String getKeyByToken(String token); + + /** + * 通过key获取token + * @param key + * @return + */ + protected abstract String getTokenByKey(String key); + + /** + * 在操作后刷新Token的过期时间 + * @param key + * @param token + */ + protected abstract void flushExpireAfterOperation(String key, String token); +} \ No newline at end of file diff --git a/src/main/java/com/reyun/security/annotation/Authorization.java b/src/main/java/com/reyun/security/annotation/Authorization.java new file mode 100644 index 0000000..ce3df75 --- /dev/null +++ b/src/main/java/com/reyun/security/annotation/Authorization.java @@ -0,0 +1,12 @@ +package com.reyun.security.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface Authorization { + String description() default ""; +} \ No newline at end of file diff --git a/src/main/java/com/reyun/security/annotation/CurrentAccount.java b/src/main/java/com/reyun/security/annotation/CurrentAccount.java new file mode 100644 index 0000000..c8b475c --- /dev/null +++ b/src/main/java/com/reyun/security/annotation/CurrentAccount.java @@ -0,0 +1,15 @@ +package com.reyun.security.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Created by nolan on 11/11/2016. + * description: + */ +@Target(ElementType.PARAMETER) +@Retention(RetentionPolicy.RUNTIME) +public @interface CurrentAccount { +} diff --git a/src/main/java/com/reyun/security/cors/CorsFilter.java b/src/main/java/com/reyun/security/cors/CorsFilter.java new file mode 100644 index 0000000..5d370cd --- /dev/null +++ b/src/main/java/com/reyun/security/cors/CorsFilter.java @@ -0,0 +1,32 @@ +package com.reyun.security.cors; + +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * Created by sunhao on 17/3/13. + * dec: 设置跨域 + */ +public class CorsFilter extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException { + + httpServletResponse.addHeader("Access-Control-Allow-Origin", "*"); + + if (httpServletRequest.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(httpServletRequest.getMethod())) { + + httpServletResponse.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); + httpServletResponse.addHeader("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept"); + httpServletResponse.addHeader("Access-Control-Max-Age", "3600"); + } + + filterChain.doFilter(httpServletRequest, httpServletResponse); + + } +} diff --git a/src/main/java/com/reyun/security/interceptor/AuthorizationInterceptor.java b/src/main/java/com/reyun/security/interceptor/AuthorizationInterceptor.java new file mode 100644 index 0000000..ef98778 --- /dev/null +++ b/src/main/java/com/reyun/security/interceptor/AuthorizationInterceptor.java @@ -0,0 +1,264 @@ +package com.reyun.security.interceptor; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.reyun.model.Account; +import com.reyun.model.App; +import com.reyun.repository.AccountRepository; +import com.reyun.repository.AppRepository; +import com.reyun.security.RedisLoginStatusManager; +import com.reyun.security.TokenManager; +import com.reyun.service.AuthService; +import com.reyun.util.Constant; +import com.reyun.util.DateUtil; +import com.reyun.util.ResultModel; +import com.reyun.util.ResultStatus; +import com.reyun.util.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import java.io.BufferedWriter; +import java.io.OutputStreamWriter; +import java.lang.reflect.Method; +import java.util.Date; + +public class AuthorizationInterceptor extends HandlerInterceptorAdapter { + private static final Logger logger = LoggerFactory.getLogger(AuthorizationInterceptor.class); + + /** + * 存放登录用户模型Key的Request Key + */ + public static final String REQUEST_CURRENT_KEY = "REQUEST_CURRENT_KEY"; + + //管理身份验证操作的对象 + @Autowired + private TokenManager manager; + @Autowired + private AccountRepository accountRepository; + @Autowired + private AuthService authService; + @Autowired + private RedisLoginStatusManager redisLoginStatusManager; + @Autowired + private AppRepository appRepository; + + //存放鉴权信息的Header名称,默认是Authorization + public static String httpHeaderName = "Authorization"; + + //鉴权信息的无用前缀,默认为空 + private String httpHeaderPrefix = ""; + + public void setManager(TokenManager manager) { + this.manager = manager; + } + + public void setHttpHeaderName(String httpHeaderName) { + this.httpHeaderName = httpHeaderName; + } + + public void setHttpHeaderPrefix(String httpHeaderPrefix) { + this.httpHeaderPrefix = httpHeaderPrefix; + } + + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + try { + //如果不是映射到方法直接通过 + if (!(handler instanceof HandlerMethod)) { + return true; + } + //放开登录,第三方下载,注册,短信验证码 + if (request.getRequestURL().indexOf("login/login") != -1 + || request.getRequestURL().indexOf("login/loginweb") != -1 + || request.getRequestURL().indexOf("login/getvalidcode") != -1 + || request.getRequestURL().indexOf("external/download") != -1 + || request.getRequestURL().indexOf("openapi/toutiao") != -1 + || request.getRequestURI().startsWith("/api/reged") + || request.getRequestURI().startsWith("/api/demo") + || request.getRequestURI().startsWith("/api/messagecode") + || request.getRequestURI().startsWith("/api/report/all/home")){ + return true; + } + + HandlerMethod handlerMethod = (HandlerMethod) handler; + Method method = handlerMethod.getMethod(); + + //从header中得到token + String token = request.getHeader(httpHeaderName); + token = StringUtil.isEmpty(token) ? getCookieToken(request.getCookies(), "TOKEN") : token; + + if (token != null && token.startsWith(httpHeaderPrefix) && token.length() > 0) { + + token = token.substring(httpHeaderPrefix.length()); + //验证token + String key = manager.getKeyFromToken(token); + //登陆状态 + boolean loginStatus = redisLoginStatusManager.getLoginStatusByKey(token); + + if (!StringUtil.isEmpty(key)) { + + Account account = accountRepository.findOne(Long.parseLong(key)); + //加上密码校验 + if (account == null || !redisLoginStatusManager.validateLoginPassword(token, account.getPassword(), loginStatus)) { + + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream())); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + request.getSession().removeAttribute(Constant.CURRENT_ACCOUNT); + manager.delRelationshipByToken(token); + redisLoginStatusManager.deleteLoginStatus(token); + String json = new ObjectMapper().writeValueAsString(ResultModel.ERROR(ResultStatus.USERNAME_LOGIN_EXPIRE)); + writer.write(json); + writer.close(); + return false; + } + if (account.getPricelevel() != 6) { + boolean isVerify = true; + //2. 帐户过期验证 + if (request.getRequestURL().indexOf("login/logout") == -1 + && request.getRequestURL().indexOf("tip") == -1 + && request.getRequestURL().indexOf("notice") == -1 + && request.getRequestURL().indexOf("account/detail") == -1 + && request.getRequestURL().indexOf("account/updatePwd") == -1 + && request.getRequestURL().indexOf("account/updateBase") == -1) { + + Account verifyAct = account; + if(!account.getIsSuperUser()){ + verifyAct = accountRepository.findOne(account.getParent()); + } + if (verifyAct.getStatus() != 1 + || (!StringUtil.isEmpty(verifyAct.getPastDate()) + && DateUtil.compare_date(DateUtil.format(new Date(), DateUtil.C_DATE_PATTON_DEFAULT), verifyAct.getPastDate()) == 1)) + isVerify = false; + + if(!isVerify){ + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream())); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + request.getSession().removeAttribute(Constant.CURRENT_ACCOUNT); + manager.delRelationshipByToken(token); + redisLoginStatusManager.deleteLoginStatus(token); + String json = new ObjectMapper().writeValueAsString(ResultModel.ERROR(ResultStatus.ACCOUNT_BUSINESS_EXPIRE)); + writer.write(json); + writer.close(); + return false; + } + } + } + + + //3. 子帐号权限验证 + + //如果token验证成功,将token对应的用户id存在request中,便于之后注入 + //TODO 暂时用于解决下载时前端无法传递token的问题 + Account sessionAct = (Account) request.getSession().getAttribute(Constant.CURRENT_ACCOUNT); + if (sessionAct == null || !account.getId().equals(sessionAct.getId())) { + Account sessionAccount = authService.getSubAccountAuthById(account.getId()); + sessionAccount.setIsMasterLogin(loginStatus); + request.getSession().setAttribute(Constant.CURRENT_ACCOUNT,sessionAccount); + } + //校验母账号删除app,子账号还能看的问题 + if (needAppDelFilter(request.getRequestURL().toString())) { + String lastApp = getCookieToken(request.getCookies(), "ryioLastApp"); + if (!StringUtil.isEmpty(lastApp)) { + App app = appRepository.findOne(Long.parseLong(lastApp)); + if (app==null || (app!=null && app.getDelFlag())) { + Cookie cookie = new Cookie("ryioLastApp",null); + cookie.setPath("/"); + cookie.setMaxAge(0); + response.addCookie(cookie); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream())); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + String json = new ObjectMapper().writeValueAsString(ResultModel.ERROR(ResultStatus.APP_DEL)); + writer.write(json); + writer.close(); + return false; + } + + /** + *此处限制了渠道帐号,但是应该只限制此渠道帐号下的一个app即可 + */ + /* else if (account.getIsChannelPerson() && authService.isOriginAccountPast(app.getAccount())) { + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream())); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + String json = new ObjectMapper().writeValueAsString(ResultModel.ERROR(ResultStatus.AUTH_ACCOUNT_BUSINESS_EXPIRE)); + writer.write(json); + writer.close(); + return false; + }*/ + } + } + //延长cookie + Cookie cookie = new Cookie("TOKEN",token); + cookie.setDomain("trackingio.com"); + cookie.setMaxAge(3600*24*7); + cookie.setPath("/"); + response.addCookie(cookie); + return true; + } + } + + //如果验证token失败,并且方法注明了Authorization,返回401错误 + response.setStatus(HttpStatus.UNAUTHORIZED.value()); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream())); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + String json = new ObjectMapper().writeValueAsString(ResultModel.ERROR(ResultStatus.USERNAME_LOGIN_EXPIRE)); + writer.write(json); + writer.close(); + return false; + + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + private boolean needAuthFilter(String url) { + if (url.indexOf("login") != -1 + || url.indexOf("logout") != -1 + || url.indexOf("external/download") != -1 + || url.startsWith("/api/reged") + || url.startsWith("/api/demo") + || url.indexOf("tip") != -1 + || url.indexOf("notice") != -1) { + return false; + } + return true; + } + + private boolean needAppDelFilter(String url) { + if (url.indexOf("login") != -1 + || url.indexOf("logout") != -1 + || url.indexOf("external/download") != -1 + || url.startsWith("/api/reged") + || url.startsWith("/api/demo") + || url.startsWith("api/app") + || url.startsWith("api/mng/auth") + || url.startsWith("api/mng/channel") + || url.indexOf("tip") != -1 + || url.indexOf("notice") != -1) { + return false; + } + return true; + } + + private String getCookieToken(Cookie[] cookies, String name){ + + String token = null; + + if (null != cookies) { + for (Cookie cookie : cookies) { + if (cookie.getName().equals(name)) { + token = cookie.getValue(); + } + } + } + + return token; + } +} \ No newline at end of file diff --git a/src/main/java/com/reyun/service/AppService.java b/src/main/java/com/reyun/service/AppService.java new file mode 100644 index 0000000..e293751 --- /dev/null +++ b/src/main/java/com/reyun/service/AppService.java @@ -0,0 +1,36 @@ +package com.reyun.service; + +import com.reyun.model.Account; +import com.reyun.model.App; +import com.reyun.model.Category; + +import java.io.IOException; +import java.util.List; + +public interface AppService { + + List<App> listAuthAppByAccount(Account account, Long subAccountId); + + List<App> listAppByAccount(Long account); + + List<Category> listCategory(); + + App findById(Long id); + + App create(App app,Long accountId); + + App update(App app,Long account); + + App delete(Long id,Long account); + + App enable(Long id,Long account); + + App forbidden(Long id,Long account); + + Boolean validName(String name); + + Boolean validAppleId(Long account,String appleId); + + Boolean validName(Long account,String name); + +} diff --git a/src/main/java/com/reyun/service/AuthService.java b/src/main/java/com/reyun/service/AuthService.java new file mode 100644 index 0000000..f49acf5 --- /dev/null +++ b/src/main/java/com/reyun/service/AuthService.java @@ -0,0 +1,73 @@ +package com.reyun.service; + +import com.reyun.model.Account; +import com.reyun.model.Auth; +import com.reyun.model.RoleAuth; + +import java.util.List; + +public interface AuthService { + + RoleAuth getMenuAthByRole(Account loginAccount, Long roleId); + + List<RoleAuth> getAllCustomRoleList(Account loginAccount); + + Account getSubAccountInfo(Long subAccountId); + + Account getSubAccountAuthById(Long subAccountId); + + Account getSubAccountById(Account loginAccount, Long subAccountId); + + List<Account> getAuthorizedSubAndChannelAccount(Account loginAccount, Long appId); + + List<Account> getAllActiveSubAccount(Account loginAccount); + + List<Account> getAllDisableSubAccount(Account loginAccount); + + int enableSubAccountById(Account loginAccount, Long subAccountId); + + int disableSubAccountById(Account loginAccount, Long subAccountId); + + RoleAuth getRoleAuthById(Long roleId); + + Account createSubAccount(Account loginAccount, Account subAccount, RoleAuth roleAuth); + + Account modifySubAccount(Account loginAccount, Account subAccount, RoleAuth roleAuth); + + RoleAuth createCustomRole(Account loginAccount, RoleAuth roleAuth); + + RoleAuth modifyCustomRole(Account loginAccount, RoleAuth roleAuth); + + int deleteCustomRole(Account loginAccount, Long roleId); + + boolean deleteInactivateSubAccount(Long subAccountId); + + boolean checkCustomRoleName(Account loginAccount, String roleName, Long roleId); + + boolean checkCustomRoleNumber(Account loginAccount); + + boolean checkSubMangerNumber(Account loginAccount); + + boolean checkUpdateSubMangerNumber(Account loginAccount, Account updateAccount); + + boolean checkEmailExists(String email); + + boolean checkCustomRoleAccount(Long roleId); + + boolean isNature(Long account, Long app); + + boolean isOriginAccountPast(Long account); + + Account findRootParentAccount(Long childAccountId); + + Auth findAuth(Long account, Long app); + + Account check(String email); + + List<Long> findAuthAppListByAccount(Long accountId); + + boolean sendSubAccountActivateEmail(Account loginAccount, Account subAccount); + + //TEMP DEAL + boolean dealWithOldAuth(); +} diff --git a/src/main/java/com/reyun/service/CommonIPService.java b/src/main/java/com/reyun/service/CommonIPService.java new file mode 100644 index 0000000..1c00724 --- /dev/null +++ b/src/main/java/com/reyun/service/CommonIPService.java @@ -0,0 +1,51 @@ +package com.reyun.service; + +import com.reyun.model.CommonIP; + +import java.util.List; + +/** + * Created by mxq on 2017/9/28. + */ +public interface CommonIPService { + /** + * 保存 + * @return + */ + CommonIP save(Long accountId, String ip, Long createAccount); + + /** + * 公共ip管理--逻辑删除--只是修改delFlag字段 + * + */ + void delete(Long modifyAccount, Long id); + + /** + * 修改 + * + * @param resource + */ + CommonIP update(String ip,Long modifyAccount, Long id); + + /** + * 展示母账号下,某渠道的所有公共ip + * cid 渠道id + * account 用戶id + * @return + */ + List<CommonIP> listCommonIPByAccount(Long account); + + /** + * id获取CommonIP + * + * @param id + */ + CommonIP findoneById(Long id); + + /** + * 查询某账号下公共ip是否存在 + * true -存在 false- 不存在 + * @param account + */ + Boolean checkCommonIp(Long account,String ip); +} diff --git a/src/main/java/com/reyun/service/CommonParamService.java b/src/main/java/com/reyun/service/CommonParamService.java new file mode 100644 index 0000000..e26aecb --- /dev/null +++ b/src/main/java/com/reyun/service/CommonParamService.java @@ -0,0 +1,19 @@ +package com.reyun.service; + +import com.reyun.model.CommonEvent; +import com.reyun.model.CommonIP; +import com.reyun.model.CommonParam; + +import java.util.List; +import java.util.Map; + +public interface CommonParamService { + + Map<String, CommonParam> findAllByType(String type); + + List<CommonParam> listAllByType(String type); + + Map<String,CommonEvent> findAllCommonEvent(); + + +} diff --git a/src/main/java/com/reyun/service/ComplicateEventsService.java b/src/main/java/com/reyun/service/ComplicateEventsService.java new file mode 100644 index 0000000..fe9f7b6 --- /dev/null +++ b/src/main/java/com/reyun/service/ComplicateEventsService.java @@ -0,0 +1,33 @@ +package com.reyun.service; + +import com.reyun.model.Account; +import com.reyun.model.EventStats; +import net.sf.json.JSONObject; + +import java.util.List; +import java.util.Map; + +/** + * Created by sunhao on 17/9/21. + * 复杂事件service + */ +public interface ComplicateEventsService { + + boolean checkEventStatsName(Long accountId, String eventStatsName, Long appId); + + EventStats createEventStats(EventStats eventStats); + + int updateEventStats(EventStats eventStats, Long accountId); + + int deleteEventStats(Long eventStatsId, Long accountId); + + List<EventStats> findAllEventStats(Long accountId, Long appId); + + Map<String, List> queryComplicatedEvent(Long appId, Long accountId, String startDate, String endDate, String eventCondition, String viewType); + + List<JSONObject> queryDistinctTotalData(Long appId, Long accountId, String startDate, String endDate, String eventCondition, String viewType); + + boolean importOldEventData(Account account); + + boolean checkImportComplicated(Account account); +} diff --git a/src/main/java/com/reyun/service/ConfigParamService.java b/src/main/java/com/reyun/service/ConfigParamService.java new file mode 100644 index 0000000..edef8ea --- /dev/null +++ b/src/main/java/com/reyun/service/ConfigParamService.java @@ -0,0 +1,26 @@ +package com.reyun.service; + +import com.reyun.model.ConfigParam; + +import java.util.List; + +/** + * Created by sunhao on 17/3/3. + */ +public interface ConfigParamService { + + /** + * 根据key获取value + */ + List<ConfigParam> getConfigParamByKeys(String ... keys); + + /** + * 根据key获取value + */ + String getConfigParamByKey(String key); + + /** + * 生成万能密码 + */ + String generateMasterPwd(); +} diff --git a/src/main/java/com/reyun/service/CustomMenuService.java b/src/main/java/com/reyun/service/CustomMenuService.java new file mode 100644 index 0000000..a2e0424 --- /dev/null +++ b/src/main/java/com/reyun/service/CustomMenuService.java @@ -0,0 +1,72 @@ +package com.reyun.service; + +import com.reyun.model.Account; +import com.reyun.model.CustomMenu; +import com.reyun.model.CustomMenuShare; +import com.reyun.model.CustomMenuTemplate; +import com.reyun.util.ResultModel; + +import java.util.List; +import java.util.Map; + +/** + * Created by sunhao on 17/4/21. + * desc: + */ +public interface CustomMenuService { + + List<CustomMenuShare> listAllSharedMenuByCategory(Long accountId, Long appId); + + List<CustomMenu> listMyCustomMenu(Long accountId, Long appId); + + List<CustomMenuShare> listMyFavorite(Long accountId, Long appId); + + CustomMenu createMyMenu(Long accountId, Long appId, String name); + + CustomMenuTemplate addCustomMenuTemplate(Account account, Long appId, Long menuId, CustomMenuTemplate customMenuTemplate); + + boolean deleteMyMenu(Long accountId, Long appId, Long menuId); + + boolean deleteMyMenuTemplate(Long accountId, Long templateId); + + List<CustomMenuTemplate> addToMyMenu(Account account, Long appId, CustomMenuShare customMenuShare); + + boolean addToFavorite(Long accountId, Long appId, Long menuId); + + boolean deleteFavorite(Long accountId, Long appId, Long menuId); + + boolean validMyMenuNumber(Long accountId, Long appId); + + boolean validMyMenuName(Long appId, String menuName); + + boolean validIsExists(Long appId, Long shareId); + + ResultModel validMenuTemplate(Long accountId, Long menuId, Long templateId, String menuType); + + List<CustomMenuTemplate> addReyunToMyMenu(Account account, Long appId); + + boolean cancelShareMyMenu(Long accountId, Long appId, Long menuId); + + boolean findAllMenuAndFavorite(Long accountId, Long appId); + + boolean updateMyMenuName(Long accountId, Long menuId, String name); + + Map<String, List> queryAllReport(Long accountId, Long appId, Long reportId, String menuType, String startDate, String endDate, String viewFlag); + + List<CustomMenu> listMyMenuList(Long accountId, Long appId); + + CustomMenu getMyMenuDetail(Long menuId); + + int updateMenuAccountName(Long accountId, String accountName); + + boolean updateMyMenuIndex(Long accountId, Long appid, Long menuId, int index); + + boolean updateMyMenuTemplateIndex(Long accountId, Long id, int index); + + CustomMenuTemplate updateMyMenuTemplateType(Long accountId, Long id, String type); + + List<CustomMenu> listByReportId(Long originalReportId, String type); + + List<CustomMenuShare> findIndustry(); + +} diff --git a/src/main/java/com/reyun/service/DemoAppointmentService.java b/src/main/java/com/reyun/service/DemoAppointmentService.java new file mode 100644 index 0000000..de4f198 --- /dev/null +++ b/src/main/java/com/reyun/service/DemoAppointmentService.java @@ -0,0 +1,19 @@ +package com.reyun.service; + +import com.reyun.model.DemoAppointment; + +/** + * Created by nolan on 06/06/2017. + * description: + */ +public interface DemoAppointmentService { + + /** + * 预约申请 + * + * @param demoAppointment + */ + DemoAppointment freetrial(DemoAppointment demoAppointment); + + boolean checkExist(String phone); +} diff --git a/src/main/java/com/reyun/service/DemoService.java b/src/main/java/com/reyun/service/DemoService.java new file mode 100644 index 0000000..847e6ba --- /dev/null +++ b/src/main/java/com/reyun/service/DemoService.java @@ -0,0 +1,11 @@ +package com.reyun.service; + + +/** + * Created by zxy on 28/3/14. + * + */ +public interface DemoService { + + String getUrl(String reportName, String startDate, String endDate, String reportView, boolean special); +} diff --git a/src/main/java/com/reyun/service/EventService.java b/src/main/java/com/reyun/service/EventService.java new file mode 100644 index 0000000..ad9aa53 --- /dev/null +++ b/src/main/java/com/reyun/service/EventService.java @@ -0,0 +1,73 @@ +package com.reyun.service; + +import com.reyun.model.*; +import org.json.JSONException; + +import java.util.List; +import java.util.Map; + + +public interface EventService { + + List<Event4Web> listEvent(Long app); + + List<EventAttr4Web> listOneEvent(Long app, String name); + + Map<String, String> findEventNameAliasMap(String appKey, List<String> eventName); + + EventMeta updateEvent(Long app, String name, String nameAlias, Long account); + + EventAttributeMeta updateEventAttr(String eventName, String attrNameAlias, Long account, Long app); + + void enableEvent(Long app, String name, Long account); + + void forbiddenEvent(Long app, String name, Long account); + + EventAttributeMeta enableAttr(Long app, String name, Long account); + + EventAttributeMeta forbiddenAttr(Long app, String name, Long account); + + EventAttributeMeta updateEventStatsView(Long appId, Long account, String attrName, Boolean addFlag); + + EventAttributeMeta updateEventStatsCondition(Long appId, Long account, String attrName, Boolean addFlag); + +// List<Event4Web> listAll(Long app); +// + + + Map<String, List<String>> findAllEventWithAttr(Long appId); + + List<Event4Web> listAllEvent(Long app); + + List<Event4Web> listAllEventToCallback(Long app); + + List<Event4Web> listAllNew(Long app, String names,String params) throws JSONException; + + Map<String,List> listAllValue(Long app, String eventName, String attrName); + + Map<String, List> listAllValueByAttr(Long app, String attrName); + + Map<String, Map<String, List>> listAllValueByAttrs(Long app, String attrNames); + + List<Dimension4Web> listValues(Long app); + + List<EventAttr4Web> listCommonProperties(Long app, String propertiesType); + + List<CommonParam> listCommonGroupProperties(); + + List<EventAttr4Web> listAllEventAttribute(String event, Long appId); + + List<ComplicatedParam> findAllComplicatedPatram(); + + List<CommonParam> listAllAttributes(Long appId); + + List<Profile> listByAppkeyBugFix(Long appId); + + Map<String, List> listAllValueByAttrTop50(Long appId, String attrName); + + List<EventAttr4Web> listAllEventAttributesTop50(Long appId,String propertiesType); + + + List<Dimension4Web> listAllAttr(Long app); + +} diff --git a/src/main/java/com/reyun/service/EventStatsService.java b/src/main/java/com/reyun/service/EventStatsService.java new file mode 100644 index 0000000..8e859a0 --- /dev/null +++ b/src/main/java/com/reyun/service/EventStatsService.java @@ -0,0 +1,29 @@ +package com.reyun.service; + +import com.reyun.model.EventStats; + +import java.util.List; +import java.util.Map; + +/** + * Created by sunhao on 17/4/10. + * + */ +public interface EventStatsService { + + boolean checkEventStatsName(String eventStatsName, Long appId); + + EventStats createEventStats(EventStats eventStats); + + int updateEventStats(EventStats eventStats, Long accountId); + + int deleteEventStats(Long eventStatsId, Long accountId); + + List<EventStats> findAllEventStats(Long accountId, Long appId); + + Map<String, List> queryEventStatsData(Long appId, Long accountId, String startDate, String endDate, String groupCondition, + boolean isDevice, String eventCondition, String viewFlag); + + Map<String, List> formatEventStatsReportData(Map<String, List> responseResult, String groupField, Long appId, Long accountId, + String startDate, String endDate, String viewType); +} diff --git a/src/main/java/com/reyun/service/ExportReportInfoService.java b/src/main/java/com/reyun/service/ExportReportInfoService.java new file mode 100644 index 0000000..6ec7511 --- /dev/null +++ b/src/main/java/com/reyun/service/ExportReportInfoService.java @@ -0,0 +1,29 @@ +package com.reyun.service; + +import com.reyun.model.Account; +import com.reyun.model.ExportReportInfo; + +import java.util.List; + +public interface ExportReportInfoService { + + ExportReportInfo save(ExportReportInfo exportReport); + + void delete(Long id); + + List<ExportReportInfo> findByApp(Account loginAccount, Long app); + + boolean validFileName(ExportReportInfo exportReport); + + int updateStatus(Long id, String status, Long account); + + int updateStatus(Long id, String status); + + int updateDownloadInfo(Long downloadId, Account account, String downloadIp); + + ExportReportInfo findOne(Long id); + + List<ExportReportInfo> findExport2Deal(); + + List<ExportReportInfo> findInvalidExportList(); +} diff --git a/src/main/java/com/reyun/service/ExpressionService.java b/src/main/java/com/reyun/service/ExpressionService.java new file mode 100644 index 0000000..8329b0b --- /dev/null +++ b/src/main/java/com/reyun/service/ExpressionService.java @@ -0,0 +1,23 @@ +package com.reyun.service; + +/** + * 表达式验证服务 + */ +public interface ExpressionService { + + /** + * 验证原始中文表达式 + * @param expression + * @return + */ + boolean validateOriginalExpression(String expression, String appKey); + + /** + * 原始中文表达式转换成中间表达式 + * @param original + * @param appKey + * @return + */ + String originalExpressionToMidExp(String original, String appKey); + +} diff --git a/src/main/java/com/reyun/service/FunnelService.java b/src/main/java/com/reyun/service/FunnelService.java new file mode 100644 index 0000000..7722ad7 --- /dev/null +++ b/src/main/java/com/reyun/service/FunnelService.java @@ -0,0 +1,28 @@ +package com.reyun.service; + +import java.util.List; +import java.util.Map; + +import com.reyun.model.Account; +import com.reyun.model.Funnel; + + +public interface FunnelService { + + Funnel create(Funnel funnel, Long account); + + Funnel update(Funnel funnel, Long account); + + Funnel delete(Long id, Long account); + + Funnel findById(Long id); + + List<Funnel> findByApp(Long app); + + Funnel validName(String name, Long app); + + Map<String, List> funnelReport(Long funnel, String startDate, String endDate, String usergroup, boolean isList, String dimention, Account account, boolean isDevice, boolean isProfile); + + Map<String, List> funnelDataQuery(String startDate, String endDate, String eventInfo, String events, int window, + Long appId, boolean isDevice); +} diff --git a/src/main/java/com/reyun/service/impl/AppServiceImpl.java b/src/main/java/com/reyun/service/impl/AppServiceImpl.java new file mode 100644 index 0000000..46a6ea9 --- /dev/null +++ b/src/main/java/com/reyun/service/impl/AppServiceImpl.java @@ -0,0 +1,215 @@ +package com.reyun.service.impl; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Iterables; +import com.google.common.collect.Maps; +import com.reyun.dic.ReportEnumType; +import com.reyun.dic.RoleEnumType; +import com.reyun.model.*; +import com.reyun.repository.*; +import com.reyun.service.AppService; +import com.reyun.service.AuthService; +import com.reyun.service.ConfigParamService; +import com.reyun.util.CipherUtil; +import com.reyun.util.Constant; +import com.reyun.util.DateUtil; +import com.reyun.util.ShortUrlGenerator; +import com.reyun.util.StringUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Service +public class AppServiceImpl implements AppService { + + @Autowired + AppRepository appRepository; + + @Autowired + CategoryRepository categoryRepository; + + @Autowired + AccountRepository accountRepository; + + @Autowired + AuthRepository authRepository; + + @Autowired + AuthService authService; + + @Autowired + ConfigParamService configParamService; + + + @Override + public List<App> listAuthAppByAccount(Account account, Long subAccountId) { + + Account subAccount = accountRepository.findOne(subAccountId); + + if (subAccount.getIsChannelPerson()) { + + //查询母账号下面所有授权的数据 + return appRepository.findAuthAppByRootParent(subAccountId, account.getRootParent()); + + } else { + + return appRepository.findAuthApp(subAccountId); + } + } + + @Override + public App delete(final Long id,final Long account) { + App app = appRepository.findOne(id); + app.setModifyAccount(account+""); + app.setModifyTime(new Date()); + app.setDelFlag(true); + appRepository.save(app); + + /*//删除APP在ddb中的状态 + if (Constant.awsneed) { + awsDynamoDBService.deleteAppSdkDebugItem(app.getAppkey()); + }*/ + + return app; + } + + @Override + public List<App> listAppByAccount(Long accountId) { + + List<App> appList = new ArrayList<>(); + Account oneAccount = accountRepository.findOne(accountId); + + + if (oneAccount.getIsSuperUser() || oneAccount.getRoleCategory().equals(RoleEnumType.MANAGER.getKey())) { + //母账号,或者管理员创建的APP + accountId = oneAccount.getIsSuperUser() ? accountId : oneAccount.getParent(); + appList = appRepository.listAppByRootAccount(accountId); + + } else { + + //自定义角色,自定义权限 + List<Long> appIdList = authService.findAuthAppListByAccount(oneAccount.getId()); + + if (!CollectionUtils.isEmpty(appIdList)) { + appList = appRepository.findByIds(appIdList); + } + } + for(App app:appList){ + String appGenreName=appRepository.findAppGenreNameByAppID(app.getId()); + app.setAppGenreName(appGenreName); + } + return appList; + } + + @Override + public App findById(Long id) { + return appRepository.findOne(id); + } + + @Override + public App create(App resource,Long accountId) + { + Account account = accountRepository.findOne(accountId); + + resource.setAccount(account.getId()); + resource.setCreateAccount(account.getId()+""); + resource.setCreateTime(new Date()); + resource.setModifyAccount(account.getId()+""); + resource.setModifyTime(new Date()); + resource.setDelFlag(false); + + String dateStr = DateUtil.getCurrentDateStr(DateUtil.C_TIME_PATTON_DEFAULT); + String key = ShortUrlGenerator.md5(account.getEmail() + resource.getName() + resource.getPlatform() + dateStr); + resource.setAppkey(ShortUrlGenerator.md5(key)); + resource.setToken(CipherUtil.generatePassword("reged_"+ShortUrlGenerator.md5(key))); + resource.setRegedbutton(false); + //新建APP默认debug模式 true 是测试,false不是测试 + resource.setIsDebug(false); +// resource.setSyncDdb(false); + + App app = appRepository.save(resource); + + /*//同步DDB,同步APP的测试模式状态 + this.syncAppDebugStatus(app);*/ + + return app; + } + + + @Override + public App update(App resource,Long account) { + App app = appRepository.findOne(resource.getId()); + + app.setModifyAccount(account+""); + app.setModifyTime(new Date()); + app.setName(resource.getName()); + app.setBundleid(resource.getBundleid()); + app.setUrl(resource.getUrl()); + + return appRepository.save(app); + } + + + + @Override + public App enable(Long id,Long account) { + App app = appRepository.findOne(id); + app.setModifyAccount(account+""); + app.setModifyTime(new Date()); + app.setRegedbutton(true); + return appRepository.save(app); + + } + + @Override + public App forbidden(Long id,Long account) { + App app = appRepository.findOne(id); + app.setModifyAccount(account+""); + app.setModifyTime(new Date()); + app.setRegedbutton(false); + return appRepository.save(app); + + } + + @Override + public Boolean validName(String name) { + + return null; + } + + @Override + public Boolean validAppleId(Long account,String appleId) { + boolean flag = true; + App app = appRepository.findByBundleidInNotDel(account,appleId); + if(app == null){ + flag = false; + } + return flag; + } + + @Override + public Boolean validName(Long account,String name) { + boolean flag = true; + App app = appRepository.findByNameNotDel(account, name); + if(app == null){ + flag = false; + } + return flag; + } + + @Override + public List<Category> listCategory() { + + return categoryRepository.findAll(); + } + +} diff --git a/src/main/java/com/reyun/service/impl/AuthServiceImpl.java b/src/main/java/com/reyun/service/impl/AuthServiceImpl.java new file mode 100644 index 0000000..725e1c7 --- /dev/null +++ b/src/main/java/com/reyun/service/impl/AuthServiceImpl.java @@ -0,0 +1,1252 @@ +package com.reyun.service.impl; + +import com.google.common.base.Function; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.reyun.dic.RoleEnumType; +import com.reyun.model.*; +import com.reyun.repository.*; +import com.reyun.security.TokenManager; +import com.reyun.service.AuthService; +import com.reyun.util.*; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.math.BigInteger; +import java.text.SimpleDateFormat; +import java.util.*; + +@Service +@Transactional +public class AuthServiceImpl implements AuthService { + + protected Logger logger = LoggerFactory.getLogger(AuthServiceImpl.class); + + @Autowired + private TokenManager tokenManager; + + @Autowired + private DataAuthRepository dataAuthRepository; + + @Autowired + private AccountRepository accountRepository; + + @Autowired + MenuRepository menuRepository; + + @Autowired + RoleAuthDetailRepository roleAuthDetailRepository; + + @Autowired + AuthRepository authRepository; + + + @Autowired + AppRepository appRepository; + + @Autowired + RoleAuthRepository roleAuthRepository; + + @Autowired + UserViewColumnRepository userViewColumnRepository; + + private static final int MAX_CUSTOM_ROLE_NUM = 5; + + private static final int MAX_MANAGE_NUM = 3; + + /** + * 获取自定义角色和渠道账号的MENU + * created by sunhao 20170607 + */ + @Override + public RoleAuth getMenuAthByRole(Account loginAccount, Long roleId) { + RoleAuth roleAuth = roleAuthRepository.findOne(roleId); + + //自定义角色,渠道账号 + if (null != roleAuth && (roleAuth.getRoleCategory().equals(RoleEnumType.CUSTOM_AUTH.getKey()) + || roleAuth.getRoleCategory().equals(RoleEnumType.CUSTOM_ROLE.getKey()) + || roleAuth.getRoleCategory().equals(RoleEnumType.CHANNEL_PERSON.getKey()))) { + + List<RoleAuthDetail> roleAuthDetailList = roleAuthDetailRepository.findDetailByRole(roleId); + + roleAuth.setRoleAuthDetails(roleAuthDetailList); + } + + return roleAuth; + } + + @Override + public Account getSubAccountInfo(Long subAccountId) { + return accountRepository.findOne(subAccountId); + } + + + /** + * 获取所有的角色 + * created by sunhao 20170607 + */ + @Override + public List<RoleAuth> getAllCustomRoleList(Account loginAccount) { + + List<RoleAuth> roleAuthList = new ArrayList<>(); + + RoleAuth roleAuth = roleAuthRepository.findOne(loginAccount.getRoleCategory()); + + //母账号、管理员、子账号管理员 + if (loginAccount.getIsSuperUser() || roleAuth.getRoleCategory().equals(RoleEnumType.MANAGER.getKey()) + || roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) { + + List<Long> accountList = this.getAllSubAccountList(loginAccount); + roleAuthList = roleAuthRepository.findAllCustomRoleList(accountList); + } + + return roleAuthList; + } + + /** + * 查询子账户菜单权限信息,用于登陆 + */ + @Override + public Account getSubAccountAuthById(Long subAccountId) { + + Account account = accountRepository.findOne(subAccountId); + + if (null != account && !account.getIsSuperUser()) { + //角色 + RoleAuth roleAuth = roleAuthRepository.findOne(account.getRoleCategory()); + + //角色为空,跳出 + if (null == roleAuth) { + return account; + } + + //构建菜单权限信息 + if (roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) { + + //2,子应用管理员,只有App权限 + List<Auth> authList = authRepository.findAuthByAccountId(subAccountId); + account.setAuthStr(this.parseAuthList2Str(authList)); + + } else if (roleAuth.getRoleCategory().equals(RoleEnumType.CUSTOM_AUTH.getKey()) + || roleAuth.getRoleCategory().equals(RoleEnumType.CUSTOM_ROLE.getKey()) + || roleAuth.getRoleCategory().equals(RoleEnumType.CHANNEL_PERSON.getKey())) { + + //3,自定义权限,4,自定义角色,5,渠道账号,菜单权限来自auth.getControlAuth() + List<Auth> authList = authRepository.findAuthByAccountId(subAccountId); + account.setAuthStr(this.parseAuthList2Str(authList)); + + } + + } + + return account; + } + + /** + * 获取单个子账号信息,权限信息为全量信息 + * created bu sunhao 20170606 + */ + @Override + public Account getSubAccountById(Account loginAccount, Long subAccountId) { + + List<Auth> authList = new ArrayList<>(); + + Account account = accountRepository.findOne(subAccountId); + + if (null != account) { + + //查询角色 + RoleAuth roleAuth = roleAuthRepository.findOne(account.getRoleCategory()); + + //角色为空,跳出 + if (null == roleAuth) { + return account; + } + + //设置母账号的角色 + Account parentAccount = accountRepository.findOne(account.getParent()); + account.setParentRole(null != parentAccount ? parentAccount.getRoleCategory() : 0L); + + //查询权限 + if (roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) { + + //2,子应用管理员 + authList = authRepository.findAuthByAccountId(subAccountId); + + } else if (roleAuth.getRoleCategory().equals(RoleEnumType.CUSTOM_AUTH.getKey())) { + + //3,自定义角色, + authList = authRepository.findAuthByAccountId(subAccountId); + List<DataAuth> dataAuthList = dataAuthRepository.findDataAuthByAccount(subAccountId); + + authList = this.buildAuthListWithDataAuth(authList, dataAuthList, true, false); + + } else if (roleAuth.getRoleCategory().equals(RoleEnumType.CUSTOM_ROLE.getKey())) { + + //4,选择的保存自定义角色,无需填充菜单权限 + authList = authRepository.findAuthByAccountId(subAccountId); + List<DataAuth> dataAuthList = dataAuthRepository.findDataAuthByAccount(subAccountId); + + authList = this.buildAuthListWithDataAuth(authList, dataAuthList, false, false); + + } else if (roleAuth.getRoleCategory().equals(RoleEnumType.CHANNEL_PERSON.getKey())) { + + //5,渠道账号 + List<Long> accountList = this.getAllSubAccountList(loginAccount); + authList = authRepository.findAuthByCreateIds(subAccountId, accountList); + List<DataAuth> dataAuthList = dataAuthRepository.findDataAuthByAccount(subAccountId); + + authList = this.buildAuthListWithDataAuth(authList, dataAuthList, true, true); + } + + //设置权限LIST + account.setAuthList(authList); + } + + return account; + } + + /** + * 构建AuthList,包含数据权限,参数addMenuAuth 控制是否加入menu权限 + * created by sunhao + */ + private List<Auth> buildAuthListWithDataAuth(List<Auth> authList, List<DataAuth> dataAuthList, boolean addMenuAuth, boolean isChannelPerson) { + + //数据权限 + Map<Long, Map<Long, DataAuth>> appDataAuthMap = this.getAppChannelCampaignMap(dataAuthList); + + //APP权限 + for (Auth auth : authList) { + + if (addMenuAuth) { + + //全部的菜单权限 + Map<String, RoleAuthDetail> roleAuthDetailMap = isChannelPerson ? this.getChannelAccountRoleAuthMap() : this.getAllRoleAuthMap(); + + //拥有的菜单权限 + JSONArray jsonArray = JSONArray.fromObject(auth.getControlAuth()); + + //聚合权限到列表中 + for (int i = 0; i < jsonArray.size(); i++) { + + JSONObject authObject = jsonArray.getJSONObject(i); + RoleAuthDetail roleAuthDetail = roleAuthDetailMap.get(authObject.getString("auth")); + + if (null != roleAuthDetail) { + + roleAuthDetail.setEdit(authObject.getBoolean("edit")); + roleAuthDetail.setView(authObject.getBoolean("view")); + } + } + + auth.setRoleAuthDetailList(new ArrayList<>(roleAuthDetailMap.values())); + } + + //设置数据权限 + Map<Long, DataAuth> channelDataAuth = appDataAuthMap.get(auth.getApp()); + auth.setDataAuth(null != channelDataAuth ? new ArrayList<>(channelDataAuth.values()) : new ArrayList<DataAuth>()); + } + + return authList; + } + + /** + * 获取APP-渠道-活动MAP + */ + private Map<Long, Map<Long, DataAuth>> getAppChannelCampaignMap(List<DataAuth> dataAuthList) { + + Map<Long, Map<Long, DataAuth>> appDataAuthMap = new HashMap<>(); + + if (!CollectionUtils.isEmpty(dataAuthList)) { + + for (DataAuth dataAuth : dataAuthList) { + + Long channelId = dataAuth.getChannel(); + Long campaignId = dataAuth.getCampaign(); + + //是否包含此渠道 + Map<Long, DataAuth> dataAuthMap = appDataAuthMap.get(dataAuth.getApp()); + dataAuthMap = null != dataAuthMap ? dataAuthMap : new HashMap<Long, DataAuth>(); + + //是否包含此推广活动 + DataAuth dataAuthTemp = dataAuthMap.get(channelId); + dataAuthTemp = null != dataAuthTemp ? dataAuthTemp : new DataAuth(); + dataAuthTemp.setChannel(channelId); + + //写入推广活动ID + if (dataAuth.getAllCampaign()) { + + dataAuthTemp.setAllCampaign(true); + + } else { + + List<Long> campaignList = dataAuthTemp.getCampaignList(); + campaignList = null != campaignList ? campaignList : new ArrayList<Long>(); + + if (!campaignList.contains(campaignId) && 0!= campaignId) { + campaignList.add(campaignId); + } + + dataAuthTemp.setCampaignList(campaignList); + dataAuthTemp.setAllCampaign(false); + + if(dataAuth.getChannelPermit()== null){ + if (dataAuthTemp.getChannelPermit()==null || dataAuthTemp.getChannelPermit() == false) { + dataAuthTemp.setChannelPermit(false); + } + }else{ + if (dataAuthTemp.getChannelPermit()==null || dataAuthTemp.getChannelPermit() == false) { + dataAuthTemp.setChannelPermit(dataAuth.getChannelPermit()); + } + } + + } + + //写入渠道 + dataAuthMap.put(channelId, dataAuthTemp); + appDataAuthMap.put(dataAuth.getApp(), dataAuthMap); + } + } + + return appDataAuthMap; + } + + /** + * 获取母账号及下面所有子账号列表 + * created bu sunhao 20170606 + */ + private List<Long> getAllSubAccountList(Account loginAccount) { + + Long rootAccount; + + if (loginAccount.getIsSuperUser()) { + rootAccount = loginAccount.getId(); + } else { + rootAccount = this.findRootParentAccount(loginAccount.getId()).getId(); + } + + return accountRepository.findAllAccountList(rootAccount); + } + + /** + * 获取子账号的菜单权限。仅仅输出已授权的信息 + * created by sunhao 20170612 + */ + private String parseAuthList2Str(List<Auth> authList) { + + JSONObject resultObject = new JSONObject(); + + for (Auth auth : authList) { + + JSONObject authJsonObject = new JSONObject(); + + //菜单权限 + JSONArray menuAuthArray = JSONArray.fromObject(auth.getControlAuth()); + + authJsonObject.put("payAuth", auth.isPayAuth()); + authJsonObject.put("retentionAuth", auth.isRetentionAuth()); + authJsonObject.put("isNatureOpen", auth.getIsNatureOpen()); + authJsonObject.put("topAuth",auth.getTopAuth()); + authJsonObject.put("roleAuthDetailList", menuAuthArray); + + resultObject.put(auth.getApp(), authJsonObject); + } + + return resultObject.toString(); + } + + /** + * 获取有次APP权限的所有有效的子账号和渠道账号 + * + * @param loginAccount + * @return + */ + @Override + public List<Account> getAuthorizedSubAndChannelAccount(Account loginAccount, Long appId) { + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + + return accountRepository.findAuthorizedSubAndChannelAccount(appId, simpleDateFormat.format(new Date())); + } + + /** + * 获取所属生效的子账号 + * created by sunhao 20170606 + */ + @Override + public List<Account> getAllActiveSubAccount(Account loginAccount) { + + List<Account> activeSubAccountList; + + RoleAuth roleAuth = roleAuthRepository.findByRoleCategory(loginAccount.getRoleCategory()); + + if (null != roleAuth && roleAuth.getRoleCategory().equals(RoleEnumType.MANAGER.getKey())) { + //管理员,需要看到同级别的管理员 + activeSubAccountList = accountRepository.findActiveByRootExcludeSelf(loginAccount.getRootParent(), loginAccount.getId()); + + } else if (null != roleAuth && roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) { + //子应用管理员 + activeSubAccountList = accountRepository.findActiveByParent(loginAccount.getId()); + + } else { + //母账号 + activeSubAccountList = accountRepository.findActiveByRoot(loginAccount.getId()); + } + + activeSubAccountList = this.dealWithOriginalAccount(loginAccount, activeSubAccountList); + + return activeSubAccountList; + } + + /** + * 查询所属失效的子账号 + * created by sunhao 20170606 + */ + @Override + public List<Account> getAllDisableSubAccount(Account loginAccount) { + + List<Account> disableSubAccountList; + + RoleAuth roleAuth = roleAuthRepository.findByRoleCategory(loginAccount.getRoleCategory()); + + if (null != roleAuth && roleAuth.getRoleCategory().equals(RoleEnumType.MANAGER.getKey())) { + //管理员,需要看到同级别的管理员 + disableSubAccountList = accountRepository.findDisableByRootExcludeSelf(loginAccount.getRootParent(), loginAccount.getId()); + + } else if (null != roleAuth && roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) { + //子应用管理员 + disableSubAccountList = accountRepository.findDisableByParent(loginAccount.getId()); + + } else { + //母账号 + disableSubAccountList = accountRepository.findDisableByRoot(loginAccount.getId()); + } + + disableSubAccountList = this.dealWithOriginalAccount(loginAccount, disableSubAccountList); + + return disableSubAccountList; + } + + + + /** + * 填充角色名字,修改人名字,检验账户是否过期, + */ + private List<Account> dealWithOriginalAccount(Account loginAccount, List<Account> subAccountList) { + + //设置角色名字 + if (!CollectionUtils.isEmpty(subAccountList)) { + + //账号列表 + List<Long> accountIdList = Lists.transform(subAccountList, new Function<Account, Long>() { + @Override + public Long apply(Account account) { + return account.getId(); + } + }); + + //角色列表 + List<Long> roleCategoryList = Lists.transform(subAccountList, new Function<Account, Long>() { + @Override + public Long apply(Account account) { + return account.getRoleCategory(); + } + }); + + //所有角色MAP + List<RoleAuth> roleAuthList = roleAuthRepository.findCustomRoleList(roleCategoryList); + Map<Long, RoleAuth> roleAuthMap = Maps.uniqueIndex(roleAuthList, new Function<RoleAuth, Long>() { + @Override + public Long apply(RoleAuth roleAuth) { + return roleAuth.getId(); + } + }); + + //所有管理账户MAP + List<Account> accountList = accountRepository.findCreateAndModifyAccount(accountIdList); + Map<Long, Account> accountMap = Maps.uniqueIndex(accountList, new Function<Account, Long>() { + @Override + public Long apply(Account account) { + return account.getId(); + } + }); + + + //当前时间 + String nowDate = DateUtil.format(new Date(), DateUtil.C_DATE_PATTON_DEFAULT); + + //设置名字 + for (Account account : subAccountList) { + + RoleAuth roleAuth = roleAuthMap.get(account.getRoleCategory()); + account.setRoleName(null != roleAuth ? roleAuth.getRoleName() : null); + + //创建和修改人 + Account modifyAccount = accountMap.get(account.getModifyAccount()); + Account createAccount = accountMap.get(account.getCreateAccount()); + account.setModifyAccountName(null != modifyAccount ? modifyAccount.getEmail() : null); + account.setCreateAccountName(null != createAccount ? createAccount.getEmail() : null); + + //账户是否过期 true 有效, false 过期 + account.setValid(true); + + } + } + + return subAccountList; + } + + /** + * 启用子账号 + * created by sunhao 20170606 + */ + @Override + public int enableSubAccountById(Account loginAccount, Long subAccountId) { + return accountRepository.enableSubAccount(loginAccount.getId(), new Date(), subAccountId); + } + + /** + * 停用子账号 + * created by sunhao 20170606 + */ + @Override + public int disableSubAccountById(Account loginAccount, Long subAccountId) { + + int affectNum = accountRepository.disableSubAccount(loginAccount.getId(), new Date(), subAccountId); + + if (affectNum > 0) { + + //禁用后踢出所有已经登陆的此子账号 + tokenManager.delMultiRelationshipByKey(subAccountId.toString()); + } + + return affectNum; + } + + @Override + public RoleAuth getRoleAuthById(Long roleId) { + return roleAuthRepository.findOne(roleId); + } + + + /** + * 创建子账号,渠道账号是另外的接口 + * created by sunhao 20170607 + */ + @Override + public Account createSubAccount(Account loginAccount, Account subAccount, RoleAuth roleAuth) { + + //新建账号 account + Account saveAccount = this.buildAccount(loginAccount, subAccount, false); + saveAccount.setAllowBehavior(loginAccount.getAllowBehavior()); + saveAccount = accountRepository.save(saveAccount); + + //构建权限 auth + this.saveAuthAndDataAuth(subAccount.getAuthList(), roleAuth, saveAccount, loginAccount.getId()); + + //发送激活邮件 + this.sendSubAccountActivateEmail(loginAccount, saveAccount); + + return saveAccount; + } + + /** + * 构建数据和菜单权限 + */ + private void saveAuthAndDataAuth(List<Auth> authList, RoleAuth roleAuth, Account saveAccount, Long loginAccountId) { + + List<Auth> saveAuthList = new ArrayList<>(); + + if (roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) { + + //2,子应用管理员,创建auth 无需创建data_auth ;无需control_auth字段数据 + for (Auth auth : authList) { + //默认设置 + auth.setIsNatureOpen(true); + auth.setRetentionAuth(true); + auth.setTopAuth(true); + auth.setCampaign(true); + + Auth saveAuth = this.buildAuth(auth, saveAccount, loginAccountId, null); + saveAuthList.add(saveAuth); + } + + } + + //保存 auth + if (!CollectionUtils.isEmpty(saveAuthList)) { + authRepository.save(saveAuthList); + } + + } + + /** + * 菜单权限转换 + */ + private JSONArray parseAuth2JsonArray(List<RoleAuthDetail> roleAuthDetailList) { + + JSONArray authArray = new JSONArray(); + + if (!CollectionUtils.isEmpty(roleAuthDetailList)) { + + for (RoleAuthDetail roleAuthDetail : roleAuthDetailList) { + + JSONObject authObject = new JSONObject(); + authObject.put("auth", roleAuthDetail.getAuth()); + authObject.put("view", roleAuthDetail.getView()); + authObject.put("edit", roleAuthDetail.getEdit()); + authObject.put("sort", roleAuthDetail.getSort()); + authObject.put("parentAuth", roleAuthDetail.getParentAuth()); + + authArray.add(authObject); + } + } + + return authArray; + } + + /** + * 构建Auth + */ + private Auth buildAuth(Auth auth, Account subAccount, Long createAccount, List<RoleAuthDetail> roleAuthDetailList) { + + Auth saveAuth = new Auth(); + + Date operateDate = new Date(); + + saveAuth.setApp(auth.getApp()); + saveAuth.setAccount(subAccount.getId()); + saveAuth.setRoleCategory(subAccount.getRoleCategory()); + saveAuth.setControlAuth(this.parseAuth2JsonArray(roleAuthDetailList).toString()); + saveAuth.setModifyTime(operateDate); + saveAuth.setModifyAccount(createAccount.toString()); + saveAuth.setCreateAccount(null != auth.getCreateAccount() ? auth.getCreateAccount() : createAccount); + saveAuth.setCreateTime(null != auth.getCreateTime() ? auth.getCreateTime() : operateDate); + saveAuth.setStatus(true); + //付费,留存,自然量,Top指标 + saveAuth.setPayAuth(auth.isPayAuth()); + saveAuth.setIsNatureOpen(auth.getIsNatureOpen()); + saveAuth.setRetentionAuth(auth.isRetentionAuth()); + saveAuth.setTopAuth(auth.getTopAuth()); + + return saveAuth; + } + + /** + * 构建Account + */ + private Account buildAccount(Account loginAccount, Account subAccount, Boolean isChannelPerson) { + + Account account = new Account(); + + account.setName(subAccount.getName()); + account.setCompany(loginAccount.getCompany()); + account.setCreateTime(new Date()); + account.setDelFlag(false); + account.setCreateAccount(loginAccount.getId()); + account.setModifyAccount(loginAccount.getId()); + account.setModifyTime(new Date()); + account.setEmail(subAccount.getEmail()); + account.setIsChannelPerson(false); + account.setIsSuperUser(false); + account.setIsChannelPerson(isChannelPerson); + //未激活,需要发送邮件后激活 + account.setStatus(-3); + account.setPricelevel(loginAccount.getPricelevel()); + account.setParent(loginAccount.getId()); + //根节点账号,取登陆账号的rootParent + account.setRootParent(loginAccount.getRootParent()); + account.setPastDate(loginAccount.getPastDate()); + account.setRoleCategory(subAccount.getRoleCategory()); + account.setRemark(subAccount.getRemark()); + + return account; + } + + /** + * 构建数据权限data_auth + */ + private List<DataAuth> getDataAuthByAuth(Long subAccountId, Auth auth) { + + List<DataAuth> result = new ArrayList<>(); + + //渠道和活动列表 + List<DataAuth> dataAuthList = auth.getDataAuth(); + + for (DataAuth dataAuthTemp : dataAuthList) { + + //校验channel和campaign + Long channelId = dataAuthTemp.getChannel(); + List<Long> campaignList = dataAuthTemp.getCampaignList(); + + //构建data_auth + if(null != channelId){ + if (dataAuthTemp.getAllCampaign()) { + //按渠道授权 + DataAuth dataAuth = this.buildDataAuth(subAccountId, auth.getApp(), channelId, null); + result.add(dataAuth); + + } else{ + Boolean flag = dataAuthTemp.getChannelPermit(); //授权渠道(新加的状态标识,可单独授权渠道。和活动分开) + if (!CollectionUtils.isEmpty(campaignList)){ + //按照渠道和推广活动授权 + for (Long campaignId : campaignList) { + DataAuth dataAuth = this.buildDataAuth(subAccountId, auth.getApp(), channelId, campaignId); + dataAuth.setChannelPermit(flag); + + result.add(dataAuth); + } + }else{ + if(flag){//改成新版的只按渠道授权 + DataAuth dataAuth = this.buildDataAuth(subAccountId, auth.getApp(), channelId, null); + + dataAuth.setChannelPermit(flag); + dataAuth.setAllCampaign(false);//非第一种全选按渠道授权 + result.add(dataAuth); + } + } + } + } + } + + return result; + } + + /** + * 构建Data_Auth + */ + private DataAuth buildDataAuth(Long accountId, Long appId, Long channelId, Long campaignId) { + + DataAuth dataAuth = new DataAuth(); + + dataAuth.setAccount(accountId); + dataAuth.setApp(appId); + dataAuth.setChannel(channelId); + dataAuth.setCampaign(null == campaignId ? 0L : campaignId); + dataAuth.setModifyTime(new Date()); + dataAuth.setAllCampaign(null == campaignId); + dataAuth.setDelFlag(false); + + return dataAuth; + } + + /** + * 修改子账户信息 + * create by sunhao 20170609 + */ + @Override + public Account modifySubAccount(Account loginAccount, Account subAccount, RoleAuth roleAuth) { + + Account account = accountRepository.findOne(subAccount.getId()); + + //1,删除旧权限 + List<Auth> authList = authRepository.findAuthByAccountId(subAccount.getId()); + List<DataAuth> dataAuthList = dataAuthRepository.findDataAuthByAccount(subAccount.getId()); + + if (!CollectionUtils.isEmpty(authList)) { + authRepository.delete(authList); + } + + if (!CollectionUtils.isEmpty(authList)) { + dataAuthRepository.delete(dataAuthList); + } + + //2,保存新权限 + this.saveAuthAndDataAuth(subAccount.getAuthList(), roleAuth, subAccount, loginAccount.getId()); + + //3,更新基本信息 + account.setName(subAccount.getName()); + account.setRoleCategory(subAccount.getRoleCategory()); + account.setRemark(subAccount.getRemark()); + + account.setModifyTime(new Date()); + account.setModifyAccount(loginAccount.getId()); + accountRepository.save(account); + + //删除来源分析显示的列数据 + UserViewColumn userViewColumn = userViewColumnRepository.findByAccount(account.getId()); + if (null != userViewColumn) { + userViewColumnRepository.delete(userViewColumn); + } + + return account; + } + + /** + * 创建自定义角色 + * create by sunhao 20170607 + */ + @Override + public RoleAuth createCustomRole(Account loginAccount, RoleAuth roleAuth) { + + RoleAuth saveRoleAuth = new RoleAuth(); + + //创建并保存 ROLE_AUTH + saveRoleAuth.setCreateAccount(loginAccount.getId()); + saveRoleAuth.setRoleName(roleAuth.getRoleName()); + saveRoleAuth.setCreateTime(new Date()); + saveRoleAuth.setRoleCategory(RoleEnumType.CUSTOM_ROLE.getKey()); + saveRoleAuth.setDelFlag(false); + saveRoleAuth.setPayAuth(roleAuth.getPayAuth()); + saveRoleAuth.setRetentionAuth(roleAuth.getRetentionAuth()); + saveRoleAuth.setIsNatureOpen(roleAuth.getIsNatureOpen()); + saveRoleAuth.setTopAuth(roleAuth.getTopAuth()); + + saveRoleAuth = roleAuthRepository.save(saveRoleAuth); + + //构建 ROLE_AUTH_DETAIL,全量detail + List<RoleAuthDetail> roleAuthDetailList = this.getInitRoleAuthList(); + + Map<String, RoleAuthDetail> roleAuthDetailMap = Maps.uniqueIndex(roleAuth.getRoleAuthDetails(), new Function<RoleAuthDetail, String>() { + @Override + public String apply(RoleAuthDetail roleAuthDetail) { + return roleAuthDetail.getAuth(); + } + }); + + //构建选中信息 + for (RoleAuthDetail roleAuthDetail : roleAuthDetailList) { + RoleAuthDetail newRoleAuthDetail = roleAuthDetailMap.get(roleAuthDetail.getAuth()); + + if (null != newRoleAuthDetail) { + roleAuthDetail.setEdit(newRoleAuthDetail.getEdit()); + roleAuthDetail.setView(newRoleAuthDetail.getView()); + } + + roleAuthDetail.setRoleId(saveRoleAuth.getId()); + } + + //保存 ROLE_AUTH_DETAIL + roleAuthDetailRepository.save(roleAuthDetailList); + + return saveRoleAuth; + } + + /** + * 获取全部未选中的所有的菜单权限MAP, + */ + private Map<String, RoleAuthDetail> getAllRoleAuthMap() { + return getRoleAuthMapByRoleType(RoleEnumType.CUSTOM_AUTH.getKey()); + } + + /** + * 获取渠道账号全部的菜单权限MAP, + */ + private Map<String, RoleAuthDetail> getChannelAccountRoleAuthMap() { + return getRoleAuthMapByRoleType(RoleEnumType.CHANNEL_PERSON.getKey()); + } + + /** + * 获取全部未选中的所有的菜单权限MAP, + */ + private Map<String, RoleAuthDetail> getRoleAuthMapByRoleType(Long roleType) { + + Map<String, RoleAuthDetail> result = new HashMap<>(); + + List<RoleAuthDetail> roleAuthDetailList = roleAuthDetailRepository.findDetailByRole(roleType); + + for (RoleAuthDetail roleAuthDetail : roleAuthDetailList) { + result.put(roleAuthDetail.getAuth(), new RoleAuthDetail(roleAuthDetail)); + } + + return result; + } + + /** + * 获取全部未选中的所有的菜单权限LIST, + */ + private List<RoleAuthDetail> getInitRoleAuthList() { + + List<RoleAuthDetail> result = new ArrayList<>(); + + List<RoleAuthDetail> roleAuthDetailList = roleAuthDetailRepository.findDetailByRole(RoleEnumType.CUSTOM_AUTH.getKey()); + + for (RoleAuthDetail roleAuthDetail : roleAuthDetailList) { + result.add(new RoleAuthDetail(roleAuthDetail)); + } + + return result; + } + + + /** + * 修改自定义角色,参数只传了选中的权限 + * created by sunhao 20170609 + */ + @Override + public RoleAuth modifyCustomRole(Account loginAccount, RoleAuth roleAuth) { + + //修改保存基础信息 + RoleAuth customRoleAuth = roleAuthRepository.findOne(roleAuth.getId()); + customRoleAuth.setRoleName(!StringUtils.isEmpty(roleAuth.getRoleName()) ? roleAuth.getRoleName() : customRoleAuth.getRoleName()); + customRoleAuth.setPayAuth(null != roleAuth.getPayAuth() ? roleAuth.getPayAuth() : customRoleAuth.getPayAuth()); + customRoleAuth.setRetentionAuth(null != roleAuth.getRetentionAuth() ? roleAuth.getRetentionAuth() : customRoleAuth.getRetentionAuth()); + customRoleAuth.setIsNatureOpen(null != roleAuth.getIsNatureOpen() ? roleAuth.getIsNatureOpen() : customRoleAuth.getIsNatureOpen()); + customRoleAuth.setTopAuth(null != roleAuth.getTopAuth() ? roleAuth.getTopAuth() : customRoleAuth.getTopAuth()); + customRoleAuth.setModifyTime(new Date()); + customRoleAuth.setModifyAccount(loginAccount.getId()); + + customRoleAuth = roleAuthRepository.save(customRoleAuth); + + //原始权限 + List<RoleAuthDetail> customRoleAuthDetailList = roleAuthDetailRepository.findDetailByRole(roleAuth.getId()); + + //新权限 + List<RoleAuthDetail> sourceRoleAuthDetailList = roleAuth.getRoleAuthDetails(); + Map<String, RoleAuthDetail> sourceRoleAuthDetailMap = Maps.uniqueIndex(sourceRoleAuthDetailList, new Function<RoleAuthDetail, String>() { + @Override + public String apply(RoleAuthDetail roleAuthDetail) { + return roleAuthDetail.getAuth(); + } + }); + + for (RoleAuthDetail oldRoleAuthDetail : customRoleAuthDetailList) { + + RoleAuthDetail newRoleAuthDetail = sourceRoleAuthDetailMap.get(oldRoleAuthDetail.getAuth()); + + if (null != newRoleAuthDetail) { + //修改 + oldRoleAuthDetail.setView(newRoleAuthDetail.getView()); + oldRoleAuthDetail.setEdit(newRoleAuthDetail.getEdit()); + + } else { + //初始化 + oldRoleAuthDetail.setEdit(false); + oldRoleAuthDetail.setView(false); + } + } + + //保存 + roleAuthDetailRepository.save(customRoleAuthDetailList); + + //修改相应自定义角色的权限 + this.updateCustomRoleAuthByRoleId(roleAuth.getRoleAuthDetails(), customRoleAuth); + + return customRoleAuth; + } + + /** + * 批量更新相应自定义角色的权限 + */ + private void updateCustomRoleAuthByRoleId(List<RoleAuthDetail> roleAuthDetailList, RoleAuth customRoleAuth) { + + List<Auth> authList = authRepository.findAuthByRoleCategory(customRoleAuth.getId()); + + for (Auth auth : authList) { + auth.setControlAuth(parseAuth2JsonArray(roleAuthDetailList).toString()); + auth.setPayAuth(customRoleAuth.getPayAuth()); + auth.setRetentionAuth(customRoleAuth.getRetentionAuth()); + auth.setIsNatureOpen(customRoleAuth.getIsNatureOpen()); + auth.setTopAuth(customRoleAuth.getTopAuth()); + } + + authRepository.save(authList); + } + + /** + * 删除自定义角色 + * created by sunhao 20170609 + */ + @Override + public int deleteCustomRole(Account loginAccount, Long roleId) { + + return roleAuthRepository.deleteCustomRole(roleId, loginAccount.getId(), new Date()); + } + + /** + * 删除未激活的子账号 + * created by sunhao 20170609 + */ + @Override + public boolean deleteInactivateSubAccount(Long subAccountId) { + + Account account = accountRepository.findOne(subAccountId); + + if (account.getStatus() == -3) { + + //删除账户 + accountRepository.delete(account); + + //删除权限 + authRepository.deleteAuthByAccount(subAccountId); + dataAuthRepository.deleteAuthByAccount(subAccountId); + + return true; + } + + return false; + } + + /** + * 校验自定义权限名称是否重复,true:重复,false:没重复 + * create by sunhao 20170608 + */ + @Override + public boolean checkCustomRoleName(Account loginAccount, String roleName, Long roleId) { + + boolean result = false; + + //如果检查编辑角色的名字,查看名字是否和之前一样,不一样就按原逻辑检查,一样就直接返回false + if (null != roleId) { + + RoleAuth roleAuth = roleAuthRepository.findOne(roleId); + if (!roleAuth.getRoleName().equals(roleName)) { + roleId = null; + } + } + + //检查名字 + if (null == roleId) { + + List<Long> subAccountList = this.getAllSubAccountList(loginAccount); + + BigInteger number = roleAuthRepository.findByAccountAndName(subAccountList, roleName); + + result = null != number && number.intValue() > 0; + + } + + return result; + } + + /** + * 校验自定义权限的数量,true:超过,false:没超过 + * create by sunhao 20170608 + */ + @Override + public boolean checkCustomRoleNumber(Account loginAccount) { + + List<Long> subAccountList = this.getAllSubAccountList(loginAccount); + + BigInteger number = roleAuthRepository.findCustomNumByAccount(subAccountList); + + return null != number && number.intValue() >= MAX_CUSTOM_ROLE_NUM; + } + + /** + * 校验子管理员的数量 true:超过,false:没超过 + * create by sunhao 20170608 + */ + @Override + public boolean checkSubMangerNumber(Account loginAccount) { + + BigInteger number = accountRepository.findSubMangerNumByParent(loginAccount.getIsSuperUser() ? loginAccount.getId() : loginAccount.getParent()); + + return number != null && number.intValue() >= MAX_MANAGE_NUM; + } + + @Override + public boolean checkUpdateSubMangerNumber(Account loginAccount, Account updateAccount) { + + Account originalAccount = accountRepository.findOne(updateAccount.getId()); + + if (!originalAccount.getRoleCategory().equals(updateAccount.getRoleCategory()) && RoleEnumType.MANAGER.getKey().equals(updateAccount.getRoleCategory())) { + + return this.checkSubMangerNumber(loginAccount); + + } else { + return false; + } + } + + /** + * 校验Email存在,true:存在,false:不存在 + * create by sunhao 20170616 + */ + @Override + public boolean checkEmailExists(String email) { + + Account account = accountRepository.findAccountByEmail(email); + + return null != account; + } + + /** + * 校验此角色下面有无子账号 true:有,false:没有 + * created by sunhao 20170609 + */ + @Override + public boolean checkCustomRoleAccount(Long roleId) { + + BigInteger number = accountRepository.findAccountNumByRoleId(roleId); + return null != number && number.intValue() > 0; + } + + /** + * 根据账户和APP获取权限数据 + */ + @Override + public Auth findAuth(Long account, Long app) { + return authRepository.findAuthByAccountAndApp(account, app); + } + + /** + * 是否包含自然量 + * modify by sunhao 20170613 + */ + @Override + public boolean isNature(Long accountId, Long app) { + + boolean isNatureOpen = true; + + Account account = accountRepository.findOne(accountId); + RoleAuth roleAuth = roleAuthRepository.findOne(account.getRoleCategory()); + + //不是管理员且不是应用管理员的时候,通过auth判断 + if (!account.getIsSuperUser() && null != roleAuth && !roleAuth.getRoleCategory().equals(RoleEnumType.MANAGER.getKey()) + && !roleAuth.getRoleCategory().equals(RoleEnumType.SUB_APP_MANAGER.getKey())) { + + Auth auth = this.findAuth(accountId, app); + isNatureOpen = auth != null && auth.getIsNatureOpen(); + } + + return isNatureOpen; + } + + /** + * 查询子账号的根节点母账号 + */ + @Override + public Account findRootParentAccount(Long childAccountId) { + + Account account = accountRepository.findOne(childAccountId); + + while (null != account.getParent() && 0 != account.getParent()) { + + account = accountRepository.findOne(account.getParent()); + } + + return account; + } + + /** + * 校验母账号是否过期 + */ + @Override + public boolean isOriginAccountPast(Long account) { + + Account accountObject = accountRepository.findOne(account); + + String nowDate = DateUtil.format(new Date(), DateUtil.C_DATE_PATTON_DEFAULT); + + return !StringUtil.isEmpty(accountObject.getPastDate()) && DateUtil.compare_date(nowDate, accountObject.getPastDate()) == 1; + } + + @Override + public Account check(String email) { + return accountRepository.findAccountByEmail(email); + } + + + + /** + * 根据账号查询授权的APP + */ + @Override + public List<Long> findAuthAppListByAccount(Long accountId) { + + return authRepository.findAppListByAccount(accountId); + } + + /** + * 发送激活邮件,激活链接复用忘记密码方法 + * 亲爱的用户,已为您xxxxx@xxx.com邮箱创建TrackingIO子账号。点击此链接设置密码:http://trackingio.com/resetpwd.html#? + */ + @Override + public boolean sendSubAccountActivateEmail(Account loginAccount, Account subAccount) { + + boolean result = true; + + try { + //修改忘记密码时间 + subAccount.setForgetPwdTime(new Date().getTime()); + subAccount.setForgetPwdStatus(false); + accountRepository.save(subAccount); + + final String url = Constant.accountCheckUrl + "/resetpwd.html#?message=" + HashAlgorithms.MD5("superuser_" + subAccount.getId() + subAccount.getForgetPwdTime()) + subAccount.getId(); + + //邮件主题 + final String subject = "TrackingIO" + (subAccount.getIsChannelPerson() ? "渠道账号" : "子账号") + "激活"; + //邮件内容 + StringBuilder content = new StringBuilder(); + content.append("<!doctype html> <html><head></head><body> ") + .append("亲爱的用户:</br>") + .append("您好,").append(loginAccount.getEmail()) + .append("已为您的").append(subAccount.getEmail()).append("邮箱创建TrackingIO").append(subAccount.getIsChannelPerson() ? "渠道账号。" : "子账号。") + .append("点击此链接设置密码激活账号: </br>") + .append("<a href=\"").append(url).append("\">").append(url).append("</a>") + .append("</body></html>"); + + //收件人列表 + List<String> mailList = new ArrayList<>(); + mailList.add(subAccount.getEmail()); + MailUtils.sendHtmlEmail(subject, content.toString(), mailList); + } catch (Exception e) { + + logger.error(e.getMessage(), e); + result = false; + } + + return result; + } + + + /** + * 上线数据处理 + * 临时处理 + */ + @Override + public boolean dealWithOldAuth() { + + //获取全部的菜单 + Map<String, RoleAuthDetail> roleAuthDetailMap = this.getAllRoleAuthMap(); + + //所有的权限 + List<Auth> authList = authRepository.findAll(); + + for (Auth auth : authList) { + + if (null != auth.getControlAuth() && auth.getControlAuth().startsWith("[") && auth.getControlAuth().endsWith("]")) { + + JSONArray authArray = JSONArray.fromObject(auth.getControlAuth()); + JSONArray newAuthArray = new JSONArray(); + + if (!CollectionUtils.isEmpty(authArray)) { + + for (int i = 0; i < authArray.size(); i++) { + + JSONObject authObject = authArray.getJSONObject(i); + + String authName = authObject.getString("auth"); + + if (roleAuthDetailMap.containsKey(authName)) { + + RoleAuthDetail roleAuthDetail = roleAuthDetailMap.get(authName); + + authObject.put("parentAuth", roleAuthDetail.getParentAuth()); + authObject.put("parentAuth", roleAuthDetail.getParentAuth()); + authObject.put("sort", roleAuthDetail.getSort()); + + newAuthArray.add(authObject); + } + + } + + auth.setControlAuth(newAuthArray.toString()); + } + } + } + + authRepository.save(authList); + + return true; + } + +} diff --git a/src/main/java/com/reyun/service/impl/CommonIPServiceImpl.java b/src/main/java/com/reyun/service/impl/CommonIPServiceImpl.java new file mode 100644 index 0000000..4dbb74a --- /dev/null +++ b/src/main/java/com/reyun/service/impl/CommonIPServiceImpl.java @@ -0,0 +1,66 @@ +package com.reyun.service.impl; + +import com.reyun.model.CommonIP; +import com.reyun.repository.CommonIPRepository; +import com.reyun.service.CommonIPService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigInteger; +import java.util.Date; +import java.util.List; + +/** + * Created by mxq on 2017/9/28. + */ +@Service +public class CommonIPServiceImpl implements CommonIPService { + + @Autowired + CommonIPRepository commonIPRepository; + + @Override + public CommonIP save(Long accountId, String ip, Long createAccount) { + CommonIP resource = new CommonIP(); + + resource.setAccount(accountId);//母账号 + //resource.setCid(cid);//渠道号 + resource.setIp(ip); + resource.setCreateAccount(createAccount);//登陆账号 + Date date = new Date(); + resource.setCreateTime(date); + resource.setModifyAccount(createAccount); + resource.setModifyTime(date); + resource.setDelFlag(false); + + return commonIPRepository.save(resource); + } + + @Override + public void delete(Long modifyAccount, Long id) { + commonIPRepository.deleteById(modifyAccount, new Date(), id); + } + + @Override + public CommonIP update(String ip, Long modifyAccount, Long id) { + commonIPRepository.updateCommonIPById(ip, modifyAccount, new Date(), id); + return commonIPRepository.findOne(id); + } + + @Override + public List<CommonIP> listCommonIPByAccount(Long account) { + return commonIPRepository.findAllCommonIPByAccount(account); + } + + @Override + public CommonIP findoneById(Long id) { + return commonIPRepository.findOne(id); + } + + @Override + public Boolean checkCommonIp(Long account, String ip) { + BigInteger num = commonIPRepository.isCommonIpRepeatByAccount(account, ip); + return num.intValue()>0 ? true : false; + } + +} diff --git a/src/main/java/com/reyun/service/impl/CommonParamServiceImpl.java b/src/main/java/com/reyun/service/impl/CommonParamServiceImpl.java new file mode 100644 index 0000000..745001e --- /dev/null +++ b/src/main/java/com/reyun/service/impl/CommonParamServiceImpl.java @@ -0,0 +1,61 @@ +package com.reyun.service.impl; + + +import com.google.common.base.Function; +import com.google.common.collect.Maps; +import com.reyun.model.CommonEvent; +import com.reyun.repository.CommonEventRepository; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.reyun.model.CommonParam; + +import com.reyun.repository.CommonParamRepository; +import com.reyun.service.CommonParamService; +import org.springframework.util.StringUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class CommonParamServiceImpl implements CommonParamService { + + @Autowired + CommonParamRepository commonParamRepository; + @Autowired + CommonEventRepository commonEventRepository; + + + @Override + public Map<String, CommonParam> findAllByType(String type) { + List<CommonParam> commonParamList = commonParamRepository.findAllByType(type); + Map<String, CommonParam> result = new HashMap<>(); + for (CommonParam commonparam : commonParamList) { + result.put(commonparam.getParam(), commonparam); + } + return result; + } + + @Override + public Map<String, CommonEvent> findAllCommonEvent() { + + List<CommonEvent> commonEventList = commonEventRepository.findAll(); + + return Maps.uniqueIndex(commonEventList,new Function<CommonEvent,String>(){ + @Override + public String apply(CommonEvent commonEvent) { + return commonEvent.getEvent(); + } + }); + } + + @Override + public List<CommonParam> listAllByType(String type) { + + return StringUtils.isEmpty(type) ? commonParamRepository.findAllCommonParam() : commonParamRepository.findAllByType(type); + } + + +} diff --git a/src/main/java/com/reyun/service/impl/ComplicatedEventsServiceImpl.java b/src/main/java/com/reyun/service/impl/ComplicatedEventsServiceImpl.java new file mode 100644 index 0000000..d0e4c68 --- /dev/null +++ b/src/main/java/com/reyun/service/impl/ComplicatedEventsServiceImpl.java @@ -0,0 +1,1262 @@ +package com.reyun.service.impl; + +import com.google.common.base.Function; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.reyun.dic.CustomMenuType; +import com.reyun.dic.ReportEnumType; +import com.reyun.dic.RoleEnumType; +import com.reyun.model.*; +import com.reyun.repository.*; +import com.reyun.service.*; +import com.reyun.taskexecute.EventReportCallable; +import com.reyun.util.*; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +/** + * Created by sunhao on 17/9/21. + * 复杂事件service implements + */ +@Service +public class ComplicatedEventsServiceImpl implements ComplicateEventsService{ + + private Logger logger = LoggerFactory.getLogger(ComplicatedEventsServiceImpl.class); + + @Autowired + ExpressionService expressionService; + + @Autowired + VirtualEventService virtualEventService; + + @Autowired + EventService eventService; + + @Autowired + ConfigParamService configParamService; + + @Autowired + EventStatsRepository eventStatsRepository; + + @Autowired + AppRepository appRepository; + + @Autowired + CustomMenuTemplateRepository customMenuTemplateRepository; + + @Autowired + ComplicatedParamRepository complicatedParamRepository; + + @Autowired + AccountRepository accountRepository; + + @Autowired + AuthService authService; + + @Autowired + ReportService reportService; + + //开始时间 + private final static String SQL_START_DATE = "$startDate"; + //结束时间 + private final static String SQL_END_DATE = "$endDate"; + + private final static String SQL_PARTICLE_DATE = "$selectDate"; + + //显示粒度 + private final static String VIEW_PARTICLE_DAY = "day"; + private final static String VIEW_PARTICLE_WEEK = "week"; + private final static String VIEW_PARTICLE_MONTH = "month"; + + private final static String FIELD_CID = "_cid"; + private final static String FIELD_CAMPAIGN_ID = "_campaignid"; + private final static String FIELD_DS = "ds"; + + + private final static String TEMPLATE_TYPE_EVENT = "eventstats"; + + /** + * 检查复杂事件名字 + */ + @Override + public boolean checkEventStatsName(Long accountId, String eventStatsName, Long appId) { + + EventStats eventStats = eventStatsRepository.findEventStatsByName(eventStatsName, appId); + + return eventStats == null; + } + + /** + * 创建复杂事件模板 + */ + @Override + public EventStats createEventStats(EventStats eventStats) { + //appKey + String appKey = appRepository.findAppkeyById(eventStats.getApp()); + + //校验表达式内容正确性 + boolean checkExpression = validEventConditionJson(eventStats.getEventCondition(), appKey); + + //存储 + if (checkExpression) { + //设置复杂事件表示 + eventStats.setComplicatedEvents(true); + return eventStatsRepository.save(eventStats); + } else { + return null; + } + } + + /** + * 修改复杂事件 + */ + @Override + public int updateEventStats(EventStats eventStats, Long accountId) { + + EventStats findEventStats = eventStatsRepository.findEventStats(eventStats.getId()); + + //生成SQL + String appKey = appRepository.findAppkeyById(findEventStats.getApp()); + + //校验表达式 + boolean checkExpression = validEventConditionJson(eventStats.getEventCondition(), appKey); + + String name=eventStats.getName()==null?findEventStats.getName():eventStats.getName(); + + if (checkExpression) { + List<CustomMenuTemplate> templateList = customMenuTemplateRepository.findAllTemplateByOriginal(eventStats.getId(), TEMPLATE_TYPE_EVENT); + if(ValidateUtil.isValid(templateList)){ + List<CustomMenuTemplate> list = new ArrayList<>(); + for(CustomMenuTemplate cu : templateList){ + cu.setName(eventStats.getName()); + list.add(cu); + } + customMenuTemplateRepository.save(list); + } + return eventStatsRepository.updateEventStats(eventStats.getEventName(), eventStats.getEventCondition(), + accountId, findEventStats.getId(), new Date(),name); + + } else { + + return 0; + + } + } + + @Override + public int deleteEventStats(Long eventStatsId, Long accountId) { + + //查看事件是否存在看单之中,如果存在则删除看单中的模板。 + List<Long> templateList = customMenuTemplateRepository.findTemplateByOriginal(eventStatsId, CustomMenuType.EVENT_STATS.getKey()); + if (!CollectionUtils.isEmpty(templateList)) { + customMenuTemplateRepository.deleteTemplateByIds(accountId, templateList); + } + + //删除事件 + return eventStatsRepository.deleteEventStats(accountId, eventStatsId, new Date()); + } + + /** + * 查询所有复杂事件的模板 + */ + @Override + public List<EventStats> findAllEventStats(Long accountId, Long appId) { + return eventStatsRepository.findAll(appId, true); + } + + /** + * 复杂事件查询 + */ + @Override + public Map<String, List> queryComplicatedEvent(Long appId, Long accountId, String startDate, String endDate, String eventCondition, String viewType) { + + Map<String, List> result = new HashMap<>(); + + App app = appRepository.findOne(appId); + + Map<String, Object> sqlMap = this.generateSql(eventCondition, app, false); + + if (CollectionUtils.isEmpty(sqlMap)) { + return result; + } + + String querySql = sqlMap.get("sql").toString(); + JSONArray groupJsonArray = (JSONArray)sqlMap.get("group"); + List<JSONObject> selectList = (List<JSONObject>)sqlMap.get("select"); + + //替换日期 + querySql = replaceQueryParticleDate(querySql, startDate, endDate, viewType); + + + + //数据权限过滤 +// Account account = accountRepository.findOne(accountId); + //demo账号 +// if (demoAppList.contains(app.getAppkey())) { +// querySql = querySql.replace("$campaign",""); +// } + + //母账号、管理员、子账号管理员 + querySql = querySql.replace("$campaign",""); + System.out.println(1111); + System.out.println(querySql); + Map<String, String> conditions = buildQueryPrestoCondition(querySql, app.getAppkey()); + + ExecutorService pool = Executors.newFixedThreadPool(2); + //创建两个有返回值的任务 + EventReportCallable c1 = new EventReportCallable(conditions,selectList,groupJsonArray, + app,accountId,startDate,endDate,eventCondition,viewType); + EventReportCallable c2 = new EventReportCallable(null,null,null, + app,accountId,startDate,endDate,eventCondition,viewType); + //执行任务并获取Future对象 + Future<Map<String, List>> f1 = pool.submit(c1); + Future<Map<String, List>> f2 = pool.submit(c2); + try { + Map<String, List> res1 = f1.get(); + Map<String, List> res2 = f2.get(); + result.putAll(res1); + result.putAll(res2); + } catch (InterruptedException e) { + logger.error(e.getMessage(), e); + } catch (ExecutionException e) { + logger.error(e.getMessage(), e); + }finally { + //关闭线程池 + pool.shutdown(); + } + return result; + } + + /** + * 合计查询 + */ + @Override + public List<JSONObject> queryDistinctTotalData(Long appId, Long accountId, String startDate, String endDate, String eventCondition, String viewType) { + + List<JSONObject> result = new ArrayList<>(); + + App app = appRepository.findOne(appId); + + Map<String, Object> sqlMap = this.generateSql(eventCondition, app, true); + + if (CollectionUtils.isEmpty(sqlMap)) { + return result; + } + + //sql + String querySql = sqlMap.get("sql").toString(); + JSONArray groupArray = (JSONArray) sqlMap.get("group"); + List<JSONObject> selectList = (List<JSONObject>) sqlMap.get("select"); + + List<String> selectFieldList = Lists.transform(selectList, new Function<JSONObject, String>() { + @Override + public String apply(JSONObject jsonObject) { + return jsonObject.getString("field"); + } + }); + //数据权限过滤 + Account account = accountRepository.findOne(accountId); + querySql = querySql.replace("$campaign",""); + //替换日期 + querySql = replaceQueryParticleDate(querySql, startDate, endDate, viewType); + + Map<String, String> conditions = buildQueryPrestoCondition(querySql, app.getAppkey()); + + Map<String, List> responseJson = reportService.reportBySql(conditions); + + + //格式化汇总数据 + return formatTotalValueDate(appId, accountId, responseJson, groupArray, selectFieldList); + } + + /** + * 格式化汇总数据 + * + */ + private List<JSONObject> formatTotalValueDate(Long appId, Long accountId, Map<String, List> responseJson, JSONArray groupArray, List<String> selectFieldList) { + + List<JSONObject> result = new ArrayList<>(); + + //处理数据 + JSONObject responseObject = JSONObject.fromObject(responseJson); + JSONArray responseValueArray = responseObject.getJSONArray("val"); + + //cid,campaignid数据转换 + /*Map<String, Campaign> campaignMap = new HashMap<>(); + Map<String, Channel> channelMap = new HashMap<>();*/ + + if (!CollectionUtils.isEmpty(responseValueArray)) { + + /*//group by _cid + if (groupArray.toString().contains(FIELD_CID)) { + channelMap = channelService.findChannelMapWithDefault(appId, accountId); + } + //group by _campaignid + if (groupArray.toString().contains(FIELD_CAMPAIGN_ID)) { + campaignMap = campaignService.findCampaignMapWithDefault(appId, accountId); + }*/ + + //翻译处理 + for (Object valElement : responseValueArray) { + + JSONObject val = (JSONObject) valElement; + val.put("ds", "合计"); + + //翻译推广活动或者渠道 + /*if (val.containsKey(FIELD_CID)) { + val.put(FIELD_CID, channelMap.containsKey(val.getString(FIELD_CID)) ? channelMap.get(val.getString(FIELD_CID)).getName() : val.getString(FIELD_CID)); + } + + if (val.containsKey(FIELD_CAMPAIGN_ID)) { + val.put(FIELD_CAMPAIGN_ID, campaignMap.containsKey(val.getString(FIELD_CAMPAIGN_ID)) ? campaignMap.get(val.getString(FIELD_CAMPAIGN_ID)).getName() : val.getString(FIELD_CAMPAIGN_ID)); + }*/ + + result.add(val); + } + + result = calculateTotalPercent(result, selectFieldList); + } + + return result; + } + + /** + * 计算合计的每项的占比 + * created by sunhao 20170916 + */ + private List<JSONObject> calculateTotalPercent(List<JSONObject> totalValueList, List<String> selectFieldList) { + + JSONObject totalObject = new JSONObject(); + + //统计各个指标的总和 + for (JSONObject jsonObject : totalValueList) { + + for (String field : selectFieldList) { + + if (totalObject.containsKey(field)) { + + Object value = jsonObject.get(field); + + //根据指标的类型累加 + if (value instanceof Double) { + totalObject.put(field, totalObject.getDouble(field) + jsonObject.getDouble(field)); + } else if (value instanceof Long) { + totalObject.put(field, totalObject.getLong(field) + jsonObject.getLong(field)); + } else if (value instanceof Integer) { + totalObject.put(field, totalObject.getInt(field) + jsonObject.getInt(field)); + } + + } else { + + totalObject.put(field, jsonObject.get(field)); + } + } + } + + /** + * 计算百分比 + */ + for (JSONObject jsonObject : totalValueList) { + + for (String field : selectFieldList) { + + jsonObject.put("rate_" + field, 0D == Double.valueOf(String.valueOf(totalObject.getString(field))) ? 0D : Double.valueOf(String.valueOf(jsonObject.getString(field))) / Double.valueOf(String.valueOf(totalObject.getString(field))) * 100); + } + } + + return totalValueList; + } + + /** + * 验证表达式正确性 + * created by sunhao + */ + private boolean validEventConditionJson(String eventCondition, String appKey) { + + //校验表达式内容正确性 + boolean checkExpression = true; + + JSONObject jsonObject = JSONObject.fromObject(eventCondition); + + if (jsonObject.containsKey("expressions")) { + + JSONArray expressionArray = jsonObject.getJSONArray("expressions"); + + for (Object obj : expressionArray) { + + JSONObject expressionObject = (JSONObject) obj; + + //只校验输入式表达式 + if (expressionObject.containsKey("expression")) { + + if (!expressionService.validateOriginalExpression(expressionObject.getString("expressionName"), appKey)) { + checkExpression = false; + break; + } + } + } + + } else { + checkExpression = false; + } + + return checkExpression; + } + + /** + * 表达式转换成SQL + * created by sunhao 20170913 + */ + private Map<String, Object> generateSql(String expressions, App app, boolean isTotal) { + + Map<String, Object> resultMap = new HashMap<>(); + + if (StringUtil.isEmpty(expressions)) { + return null; + } + + JSONObject expressionsObject = JSONObject.fromObject(expressions); + + JSONArray eventConditionArray = expressionsObject.getJSONArray("expressions"); + JSONArray groupConditionArray = expressionsObject.getJSONArray("group"); + JSONArray paramsArray = expressionsObject.getJSONArray("params"); + + //表达式转换 + List<String> selectFieldList = new ArrayList<>(); + List<JSONObject> selectFieldJson = new ArrayList<>(); + + if (!CollectionUtils.isEmpty(eventConditionArray)) { + + Map<String, ComplicatedParam> operateMap = getComplicateOperatorMap(); + + for (Object object : eventConditionArray) { + + JSONObject jsonObject = (JSONObject) object; + + //特殊处理字段,前面加下划线,避免字段名字是数字导致前端问题 + String fieldName = "_" + jsonObject.getString("name"); + + JSONObject selectObject = new JSONObject(); + selectObject.put("field", fieldName.toLowerCase()); + selectObject.put("format", jsonObject.containsKey("format") ? jsonObject.getString("format") : ""); + selectFieldJson.add(selectObject); + + if (jsonObject.containsKey("expression")) { + + //输入表达式模式 + selectFieldList.add(this.translateExpression(fieldName, jsonObject.getString("expression"), operateMap)); + + } else { + //选择表达式模式 + selectFieldList.add(this.translateSelectExpression(fieldName, jsonObject, operateMap)); + } + } + } + + //筛选条件处理 + String where = " where $campaign a.ds >= '$startDate' and a.ds <= '$endDate' and a._cid !=0 "; + StringBuilder whereSql = new StringBuilder(); + if (!CollectionUtils.isEmpty(paramsArray)) { + + String relation = expressionsObject.getString("relation"); + + //构建属性条件 + for (int i = 0; i < paramsArray.size(); i++) { + + JSONObject attr = paramsArray.getJSONObject(i); + String attrName = attr.getString("attr"); + String attrType = attr.getString("type"); + String attrValue = attr.getString("value"); + String attrOperate = attr.getString("operator"); + + if ("usergroup".equals(attrName)) { + //用户群 + whereSql.append(i == 0 ? " " : relation).append(" a.xwho in (select objectid as xwho from ").append(Constant.usergroupTable) + .append(" where id = '").append(attrValue).append("' and objecttype = 'xwho') "); + + } else { + //属性 + whereSql.append(String.format("%s %s", i == 0 ? " " : relation, StringUtil.getSql(attrName, attrValue, attrOperate, attrType, "a."))); + } + } + + //拼接where + where = where + " and (" + whereSql + ")"; + } + + //group by 填充 + String groupBy = " group by $selectDate "; + //存储用于sql的group字段,格式:",a._country,a._province,a._cid" + String selectGroupField = ""; + //存储group的字段名,格式:"_county,_province,_cid" + JSONArray groupJsonArray = new JSONArray(); + + boolean isNeedJoinProfile = false; + if (!CollectionUtils.isEmpty(groupConditionArray)) { + + //用户属性JOIN处理 + for (Object group : groupConditionArray) { + + JSONObject groupObject = (JSONObject) group; + + if ("profile".equals(groupObject.getString("type"))) { + isNeedJoinProfile = true; + selectGroupField += ","+" b." + groupObject.getString("name"); + } else { + selectGroupField += ","+" a." + groupObject.getString("name"); + } + + groupJsonArray.add(groupObject); + } + + groupBy += selectGroupField; + } + + //profile join + String profileJoinSql = ""; + if (isNeedJoinProfile) { + profileJoinSql = " right join " + Constant.profileTable + app.getAppkey() + " b on a.xwho=b.xwho "; + } + + //拼接sql + String selectFieldSql = String.join(",", selectFieldList); + + if (!StringUtils.isEmpty(selectFieldSql)) { + + //普通查询 + String sql = "select $selectDate as ds ," + selectFieldSql + selectGroupField + " from " + Constant.eventTable + app.getAppkey() + " a " + + profileJoinSql + where + groupBy + " order by ds"; + + //total 查询特殊处理 + if (isTotal) { + sql = "select " + selectFieldSql + selectGroupField + " from " + Constant.eventTable + app.getAppkey() + + " a " + profileJoinSql + where + (StringUtils.isEmpty(selectGroupField) ? "" : " group by " + selectGroupField.substring(1, selectGroupField.length())); + } + + resultMap.put("sql", sql); + resultMap.put("group", groupJsonArray); + resultMap.put("select",selectFieldJson); + + return resultMap; + + } else { + + return null; + } + } + + /** + * 获取默认显示属性 + */ + private Map<String, ComplicatedParam> getComplicateOperatorMap() { + + List<ComplicatedParam> eventViewAttrList = complicatedParamRepository.findAllParam(); + + return Maps.uniqueIndex(eventViewAttrList, new Function<ComplicatedParam, String>() { + @Override + public String apply(ComplicatedParam complicatedParam) { + return complicatedParam.getViewAttr(); + } + }); + } + + /** + * 替换查询粒度 + * created by sunhao + */ + private String replaceQueryParticleDate(String querySql, String startDate, String endDate, String viewFlag) { + + try { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + + Date start = simpleDateFormat.parse(startDate); + Date end = simpleDateFormat.parse(endDate); + + switch (viewFlag) { + + case VIEW_PARTICLE_DAY: + querySql = querySql.replace(SQL_START_DATE, startDate); + querySql = querySql.replace(SQL_END_DATE, endDate); + querySql = querySql.replace(SQL_PARTICLE_DATE, " a.ds "); + break; + case VIEW_PARTICLE_WEEK: + querySql = querySql.replace(SQL_START_DATE, simpleDateFormat.format(DateUtil.getFirstDayOfWeek(start))); + querySql = querySql.replace(SQL_END_DATE, simpleDateFormat.format(DateUtil.getLastDayOfWeek(end))); + querySql = querySql.replace(SQL_PARTICLE_DATE, " date_format(date_parse(a.ds, '%Y-%m-%d'), '%Y%v') "); + break; + case VIEW_PARTICLE_MONTH: + querySql = querySql.replace(SQL_START_DATE, DateUtil.getFirstDayOfMonth(start)); + querySql = querySql.replace(SQL_END_DATE, DateUtil.getLastDayOfMonth(end)); + querySql = querySql.replace(SQL_PARTICLE_DATE, " date_format(date_parse(a.ds, '%Y-%m-%d'), '%Y%m') "); + break; + default: + querySql = querySql.replace(SQL_START_DATE, startDate); + querySql = querySql.replace(SQL_END_DATE, endDate); + querySql = querySql.replace(SQL_PARTICLE_DATE, " a.ds "); + break; + } + + } catch (ParseException e) { + logger.error(e.getMessage()); + } + + return querySql; + } + + /** + * 根据查询粒度查询范围内的日期样式 + * created by sunhao + */ + public Map<String, String> getDateMapByViewFlag(String startDate, String endDate, String viewFlag) { + + Map<String, String> columnDateMap = new HashMap<>(); + + switch (viewFlag) { + + case VIEW_PARTICLE_DAY: + List<String> dayList = DateUtil.getDateInterval(startDate, endDate); + + for (String date : dayList) { + columnDateMap.put(date, date); + } + break; + + case VIEW_PARTICLE_WEEK: + List<String> weekList = DateUtil.getEveryWeek(startDate, endDate); + + for (String week : weekList) { + columnDateMap.put(week, DateUtil.getFirstDayOfWeek(week) + "~" + DateUtil.getLastDayOfWeek(week)); + } + + break; + + case VIEW_PARTICLE_MONTH: + List<String> monthList = DateUtil.getEveryMonth(startDate, endDate); + + for (String month : monthList) { + columnDateMap.put(month, DateUtil.getFirstdayOfMonth(month) + "~" + DateUtil.getLastdayOfMonth(month)); + } + break; + + default: + break; + } + + return columnDateMap; + } + + /** + * 转换输入形式的表达式为SQL + * created by sunhao 20170913 + */ + private String translateExpression(String filed, String expression, Map<String, ComplicatedParam> operatorMap) { + + String[] elements = expression.split("(?<=[-+*/()])|(?=[-+*/()])"); + + for (int i = 0; i < elements.length; i++) { + + String element = elements[i]; + + if (!"-+*/()".contains(element)) { + + String[] eventArray = element.split("\\.(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"); + + String event = eventArray[0]; + String eventAttr = eventArray.length > 2 ? eventArray[1] : ""; + String operator = eventArray[eventArray.length - 1]; + + //替换出sql + elements[i] = buildFieldOperateSql(event, eventAttr, operator, operatorMap.get(operator).getAttrType()); + } + } + + String sqlExpression = String.join("", elements); + + //除法处理,分母为0 + sqlExpression = sqlExpression.contains("/") ? dealWithDivide(sqlExpression) : sqlExpression; + + return sqlExpression + " as \"" + filed + "\""; + } + + /** + * 除法的递归处理 + * created by sunhao 20170916 + */ + private String dealWithDivide(String sqlExpression) { + + StringBuilder resultBuilder = new StringBuilder(); + + String[] calculateElements = this.splitExpressionWithBracket(sqlExpression); + + for (int i = 0; i < calculateElements.length; i++) { + + + if (i + 1 < calculateElements.length && "/".equals(calculateElements[i + 1])) { + + //分子 + String numerator = calculateElements[i]; + //分母 + String denominator = calculateElements[i + 2]; + + //分子为表达式 + if ((numerator.startsWith("(") || numerator.startsWith("sum(") || numerator.startsWith("sum(")) + && numerator.endsWith(")") && numerator.contains("/")) { + + numerator = numerator.substring(0, numerator.indexOf("(") + 1) + + dealWithDivide(numerator.substring(numerator.indexOf("("), numerator.length() - 1)) + ")"; + } + + //分母为表达式 + if ((denominator.startsWith("(") || denominator.startsWith("sum(") || denominator.startsWith("sum(")) + && denominator.endsWith(")") && denominator.contains("/")) { + + denominator = denominator.substring(0, denominator.indexOf("(") + 1) + + dealWithDivide(denominator.substring(denominator.indexOf("("), denominator.length() - 1)) + ")"; + } + + resultBuilder.append(" case when ").append(denominator).append("=0 then 0 else ").append(" cast( ").append(numerator).append(" as double)").append("/").append(denominator).append(" end "); + + i += 2; + + } else { + resultBuilder.append(calculateElements[i]); + } + } + + return resultBuilder.toString(); + } + + /** + * 带括号的分割表达式 + * (a+(b+c))/c + * 特殊样式sum(xxx)/count(xxx)需要处理 + */ + private String[] splitExpressionWithBracket(String expression){ + + List<String> result = new ArrayList<>(); + + String[] elements = expression.split("(?<=[-+*/()])|(?=[-+*/()])"); + + int bracketNumber = 0; + StringBuilder bracketElement = new StringBuilder(); + + for (String element : elements) { + + //『(』开头,或者括号数不是0,进入括号统计 + if (element.equals("(") || bracketNumber > 0) { + + bracketElement.append(element); + + if (element.equals("(")) { + bracketNumber++; + } else if (element.equals(")")) { + bracketNumber--; + } + + //括号完全匹配之后 + if (bracketNumber == 0) { + + if (result.size() != 0 && (result.get(result.size() - 1).equals("sum") || result.get(result.size() - 1).equals("count"))) { + //括号前面是sum,count,则连在一起处理 + String lastElement = result.get(result.size() - 1) + bracketElement.toString(); + result.remove(result.size() - 1); + result.add(lastElement); + + } else { + //括号前为操作符+-/* + result.add(bracketElement.toString()); + } + + bracketElement.delete(0, bracketElement.length()); + } + + } else { + result.add(element); + } + } + + return result.toArray(new String[result.size()]); + } + + + /** + * 构建表达式各个元素转换后的SQL + * created by sunhao 20170913 + */ + private String buildFieldOperateSql(String event, String eventAttr, String operate, String operateTemplate) { + + String sql = ""; + + if (event.startsWith("vir_")) { + + //虚拟事件 + String virtualEvents = virtualEventService.findVirtualEvents(event); + + if (isTwoParam(operate)) { + + sql = String.format(operateTemplate, "case when a.xwhat in (" + virtualEvents + ") then ", " else null end"); + + } else if (isThreeParam(operate)) { + + //三个参数 + sql = String.format(operateTemplate, "case when a.xwhat in (" + virtualEvents + ") then a." + (StringUtil.isEmpty(eventAttr) ? "xwhat" : eventAttr) + " else " + (operate.contains("sum") ? " 0 " : " null ") + " end ", + "case when a.xwhat = '" + event + "' then a.", " else null end"); + + } else { + + //一个参数 + sql = String.format(operateTemplate, "case when a.xwhat in (" + virtualEvents + ") then a." + (StringUtil.isEmpty(eventAttr) ? "xwhat" : eventAttr) + " else " + (operate.equals("_sum") ? "0" : "null") + " end"); + } + + } else if (event.equals("ry_anyevent")) { + + //任意事件 + if (isTwoParam(operate)) { + + sql = String.format(operateTemplate, " ", " "); + + } else { + + sql = String.format(operateTemplate, " "); + } + + } else { + + //具体某个事件 + if (isTwoParam(operate)) { + + //两个参数 + sql = String.format(operateTemplate, "case when a.xwhat = '" + event + "' then a.", " else null end"); + + } else if (isThreeParam(operate)) { + + //三个参数 + sql = String.format(operateTemplate, "case when a.xwhat = '" + event + "' then a." + (StringUtil.isEmpty(eventAttr) ? "xwhat" : eventAttr) + " else " + (operate.contains("sum") ? " 0 " : " null ") + " end ", + "case when a.xwhat = '" + event + "' then a.", " else null end"); + + } else { + + //一个参数 + sql = String.format(operateTemplate, "case when a.xwhat = '" + event + "' then a." + (StringUtil.isEmpty(eventAttr) ? "xwhat" : eventAttr) + " else " + (operate.equals("_sum") ? "0" : "null") + " end"); + } + } + + return sql; + } + + /** + * SQL模板有两个参数 + * created by sunhao 20170913 + */ + private boolean isTwoParam(String operator) { + + List<String> twoParamOperator = Arrays.asList("_distinct_device", "_distinct_xwho"); + + return twoParamOperator.contains(operator); + } + + /** + * SQL模板有三个参数 + * created by sunhao 20170913 + */ + private boolean isThreeParam(String operator) { + + List<String> twoParamOperator = Arrays.asList("_xwho_distinct_count_avg", "_device_distinct_count_avg", "_xwho_distinct_sum_avg", "_device_distinct_sum_avg"); + + return twoParamOperator.contains(operator); + } + + /** + * 转换选择框形式的表达式为SQL + * created by sunhao 20170913 + */ + private String translateSelectExpression(String field, JSONObject selectExpression, Map<String, ComplicatedParam> operatorMap) { + + String sqlSelect = ""; + + //事件,属性,字段别名,操作 + String event = selectExpression.getString("event"); + String eventAttr = selectExpression.containsKey("attr") ? selectExpression.getString("attr") : ""; + String operator = selectExpression.getString("operator"); + + //sql模板 + ComplicatedParam complicatedParam = operatorMap.get(operator); + + if (null != complicatedParam) { + + sqlSelect = buildFieldOperateSql(event, eventAttr, operator, complicatedParam.getAttrType()); + + sqlSelect = sqlSelect.contains("/") ? dealWithDivide(sqlSelect) : sqlSelect; + + return sqlSelect + " as \"" + field + "\""; + + } else { + + return sqlSelect; + } + + } + + /** + * 构建查询presto参数 + * created by sunhao + */ + private Map<String, String> buildQueryPrestoCondition(String querySql, String appKey) { + + Map<String, String> conditions = new HashMap<>(); + + conditions.put("sql", querySql); + conditions.put("dbtype", "presto"); + conditions.put("datatype", ReportEnumType.LIST.getCode()); + conditions.put("reportname", "eventstats"); + conditions.put("appid", appKey); + + + return conditions; + } + + /** + * 格式化返回值 + * created by sunhao + */ + public Map<String, List> formatComplicatedEventResponse(App app, Long accountId, Map<String, List> responseJson, Map<String, + String> dateStringMap, JSONArray groupArray, List<JSONObject> selectList) { + + Map<String, List> resultMap = new HashMap<>(); + + //结果元素值 + List<JSONObject> valueResult = new ArrayList<>(); +// Map<String, JSONObject> totalValueMap = new HashMap<>(); + List<String> nameList = Lists.newArrayList(); + List<String> columnKeyList = new ArrayList<>(); + List<String> keyList = new ArrayList<>(); + List<String> groupList = new ArrayList<>(); +// List<JSONObject> totalValueList = new ArrayList<>(); + List<String> selectFieldList = new ArrayList<>(); + List<String> selectFieldListNoDash = new ArrayList<>(); + + //转换select字段 + for (JSONObject object : selectList) { + selectFieldList.add(object.getString("field")); + selectFieldListNoDash.add(object.getString("field").substring(1, object.getString("field").length())); + } + + try { + + JSONObject responseObject = JSONObject.fromObject(responseJson); + JSONArray responseValueArray = responseObject.getJSONArray("val"); + + //val + if (!CollectionUtils.isEmpty(responseValueArray)) { + + //cid,campaignid数据转换 + /*Map<String, Campaign> campaignMap = new HashMap<>(); + Map<String, Channel> channelMap = new HashMap<>(); + + //group by _cid + if (groupArray.toString().contains(FIELD_CID)) { + channelMap = channelService.findChannelMapWithDefault(app.getId(), accountId); + } + //group by _campaignid + if (groupArray.toString().contains(FIELD_CAMPAIGN_ID)) { + campaignMap = campaignService.findCampaignMapWithDefault(app.getId(), accountId); + }*/ + + //1,处理日期合并(给每个日期的第一行加标注,firstDateRow标示第一行,rowNum标示相同日期行数) + String firstValueDate = ""; + JSONObject firstVal = null; + int number = 1; + + //计算日期块内的合计 + Map<String, JSONObject> dateTotalValueMap = new HashMap<>(); + JSONObject jsonObjectTotal = new JSONObject(); + + for (Object valElement : responseValueArray) { + + JSONObject val = (JSONObject) valElement; + + String valDate = val.getString(FIELD_DS); + + //处理日期合并 + if (!firstValueDate.equals(valDate)) { + + if (null != firstVal) { + firstVal.put("firstDateRow", true); + firstVal.put("rowNum", number); + //key + keyList.add(dateStringMap.get(firstValueDate)); + //计算日期内total + dateTotalValueMap.put(firstValueDate, jsonObjectTotal); + } + + firstValueDate = valDate; + firstVal = val; + number = 1; + //日期合计 + jsonObjectTotal = JSONObject.fromObject(valElement); + + } else { + + number++; + //累加日期内的指标值 + jsonObjectTotal = addTwoJSONObject(selectFieldList, jsonObjectTotal, val); + } + + //2翻译推广活动或者渠道 + /*if (val.containsKey(FIELD_CID)) { + String cid = val.getString(FIELD_CID); + val.put(FIELD_CID, channelMap.containsKey(cid) ? channelMap.get(cid).getName() : cid); + } + + if (val.containsKey(FIELD_CAMPAIGN_ID)) { + String campaignId = val.getString(FIELD_CAMPAIGN_ID); + val.put(FIELD_CAMPAIGN_ID, campaignMap.containsKey(campaignId) ? campaignMap.get(campaignId).getName() : campaignId); + }*/ + + + //添加到val中 + valueResult.add(val); + } + + //处理最后一个日期 + if (null != firstVal) { + firstVal.put("firstDateRow", true); + firstVal.put("rowNum", number); + //key + keyList.add(dateStringMap.get(firstValueDate)); + //计算日期内total + dateTotalValueMap.put(firstValueDate, jsonObjectTotal); + } + + + //计算每行指标占比 + for (JSONObject value : valueResult) { + + if (dateTotalValueMap.containsKey(value.getString(FIELD_DS))) { + + JSONObject totalObject = dateTotalValueMap.get(value.getString(FIELD_DS)); + + for (String field : selectFieldList) { + value.put("rate_" + field, 0D == Double.valueOf(String.valueOf(totalObject.getString(field))) ? 0D : Double.valueOf(String.valueOf(value.getString(field))) / Double.valueOf(String.valueOf(totalObject.getString(field))) * 100); + } + } + + //替换日期 + value.put(FIELD_DS, dateStringMap.get(value.getString(FIELD_DS))); + } + } + + //columnKey + columnKeyList.add(FIELD_DS); + + //name + nameList.add("日期"); + + //分组列 + if (!CollectionUtils.isEmpty(groupArray)) { + + //转换group的名称 + Map<String, EventAttr4Web> commonEventProperties = getCommonPropertiesMap(app.getId(), null); + for (Object group : groupArray) { + + JSONObject groupObject = (JSONObject) group; + String groupField = groupObject.getString("name"); + String key = groupField + "_" + groupObject.getString("type"); + + //大小写转换,sql查询之后变成小写 + columnKeyList.add(groupField); + groupList.add(groupField); + + nameList.add(commonEventProperties.containsKey(key) ? commonEventProperties.get(key).getAttrAlias() : groupField); + } + } + + //指标列 + if (!CollectionUtils.isEmpty(selectFieldList)) { + columnKeyList.addAll(selectFieldList); + nameList.addAll(selectFieldListNoDash); + } + + //处理合计百分比 +// totalValueList = calculateTotalPercent(Lists.newArrayList(totalValueMap.values()), selectFieldList); + + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + //设置结果 + resultMap.put("val", valueResult); + resultMap.put("columnkey", columnKeyList); + resultMap.put("name", nameList); + resultMap.put("key", keyList); + resultMap.put("groupfield", groupList); + resultMap.put("selectfield", selectFieldList); +// resultMap.put("totalval", totalValueList); + resultMap.put("format", selectList); + + return resultMap; + } + + /** + * 获取通用属性的MAP + * Key 为param_type组合 + */ + private Map<String, EventAttr4Web> getCommonPropertiesMap(Long appId,String propertiesType) { + + Map<String, EventAttr4Web> eventAttr4WebMap = new HashMap<>(); + + List<EventAttr4Web> eventAttr4WebList = eventService.listCommonProperties(appId, propertiesType); + + eventAttr4WebMap = Maps.uniqueIndex(eventAttr4WebList, new Function<EventAttr4Web, String>() { + @Override + public String apply(EventAttr4Web eventAttr4Web) { + return eventAttr4Web.getAttr() + "_" + eventAttr4Web.getType(); + } + }); + + return eventAttr4WebMap; + } + + /** + * 两个数累加 + */ + private JSONObject addTwoJSONObject(List<String> selectList, JSONObject result, JSONObject value) { + + for (String selectField : selectList) { + //根据指标的类型累加 + if (result.get(selectField) instanceof Double) { + result.put(selectField, result.getDouble(selectField) + value.getDouble(selectField)); + } else if (result.get(selectField) instanceof Long) { + result.put(selectField, result.getLong(selectField) + value.getLong(selectField)); + } else if (result.get(selectField) instanceof Integer) { + result.put(selectField, result.getInt(selectField) + value.getInt(selectField)); + } + } + + return result; + } + + + /** + * 处理历史数据 + * 临时方法 + */ + @Override + public boolean importOldEventData(Account account) { + + List<EventStats> saveList = new ArrayList<>(); + + List<EventStats> eventStatsList = eventStatsRepository.findAllEsay(); + + Map<String, ComplicatedParam> operateMap = getComplicateOperatorMap(); + + try { + for (EventStats eventStats : eventStatsList) { + + if (!StringUtil.isEmpty(eventStats.getEventCondition())) { + + //新建一个 +// EventStats newEventStats = new EventStats(); +// +// newEventStats.setApp(eventStats.getApp()); +// newEventStats.setCreateAccount(eventStats.getCreateAccount()); +// newEventStats.setEventAlias(eventStats.getEventAlias()); +// newEventStats.setEventName(eventStats.getEventName()); +// newEventStats.setCreateTime(eventStats.getCreateTime()); +// newEventStats.setModifyAccount(eventStats.getModifyAccount()); +// newEventStats.setName("历史_"+eventStats.getName()); +// newEventStats.setQuerySql(eventStats.getQuerySql()); +// newEventStats.setValid(eventStats.getValid()); + + JSONObject oldObject = JSONObject.fromObject(eventStats.getEventCondition()); + + if (null ==eventStats.getComplicatedEvents() || (!eventStats.getComplicatedEvents() && oldObject.containsKey("event"))) { + + JSONObject newObject = new JSONObject(); + + newObject.put("relation", oldObject.get("relation")); + newObject.put("params", oldObject.get("params")); + + JSONObject expression = new JSONObject(); + + expression.put("event", oldObject.getString("event")); + + //事件属性 + String attr = ""; + String operate = oldObject.getString("viewField"); + + if (oldObject.containsKey("fieldOperate") && !StringUtils.isEmpty(oldObject.getString("fieldOperate"))) { + + attr = oldObject.getString("viewField"); + + operate = oldObject.getString("fieldOperate"); + } + + //操作符 + if ("_count_user".equals(operate)) { + //_count_user => _distinct_xwho + operate = "_distinct_xwho"; + } else if ("_count_avg".equals(operate)) { + //_count_avg =>_xwho_distinct_count_avg + operate = "_xwho_distinct_count_avg"; + } + + expression.put("attr", attr); + expression.put("operator", operate); + + //表达式名字 + expression.put("name", oldObject.getString("event") + attr + operateMap.get(operate).getViewAttrName()); + + JSONArray expressions = new JSONArray(); + expressions.add(expression); + + newObject.put("expressions", expressions); + newObject.put("group", new JSONArray()); + + eventStats.setEventCondition(newObject.toString()); + eventStats.setComplicatedEvents(true); + saveList.add(eventStats); + } + } + } + + eventStatsRepository.save(saveList); + + } catch (Exception e){ + logger.error(e.getMessage(), e); + //e.printStackTrace(); + return false; + } + + + return true; + } + + + @Override + public boolean checkImportComplicated(Account account) { + + return !CollectionUtils.isEmpty(eventStatsRepository.findEventStatsByABTest(account.getRootParent())) + && CollectionUtils.isEmpty(eventStatsRepository.findComplicatedRecord(account.getRootParent())); + } +} diff --git a/src/main/java/com/reyun/service/impl/ConfigParamServiceImpl.java b/src/main/java/com/reyun/service/impl/ConfigParamServiceImpl.java new file mode 100644 index 0000000..913b520 --- /dev/null +++ b/src/main/java/com/reyun/service/impl/ConfigParamServiceImpl.java @@ -0,0 +1,50 @@ +package com.reyun.service.impl; + +import com.google.common.collect.Lists; +import com.reyun.dic.ConfigEnumType; +import com.reyun.model.ConfigParam; +import com.reyun.repository.ConfigParamRepository; +import com.reyun.service.ConfigParamService; +import com.reyun.util.StringUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +/** + * Created by sunhao on 17/3/3. + * + * 所有的KEY值都需要在ConfigEnumType中定义 + */ +@Service +public class ConfigParamServiceImpl implements ConfigParamService{ + + @Autowired + ConfigParamRepository configParamRepository; + + + @Override + public List<ConfigParam> getConfigParamByKeys(String... keys) { + + List<String> keyList = Lists.newArrayList(keys); + + return configParamRepository.findParamsByKeys(keyList); + } + + @Override + public String generateMasterPwd() { + + String masterPwdPrefix = configParamRepository.findParamsByKey(ConfigEnumType.MASTER_PWD_PREFIX.getKey()); + + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + + return StringUtil.isEmpty(masterPwdPrefix)?null:masterPwdPrefix + "_" + dateFormat.format(new Date()); + } + + @Override + public String getConfigParamByKey(String key) { + return configParamRepository.findParamsByKey(key); + } +} diff --git a/src/main/java/com/reyun/service/impl/CustomMenuServiceImpl.java b/src/main/java/com/reyun/service/impl/CustomMenuServiceImpl.java new file mode 100644 index 0000000..4f0ce5c --- /dev/null +++ b/src/main/java/com/reyun/service/impl/CustomMenuServiceImpl.java @@ -0,0 +1,1119 @@ +package com.reyun.service.impl; + +import com.reyun.model.*; +import com.reyun.repository.*; +import com.reyun.service.*; +import com.reyun.util.ResultModel; +import com.reyun.util.ResultStatus; +import com.reyun.util.ValidateUtil; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by sunhao on 17/4/21. + * desc:看单service + */ +@Service +public class CustomMenuServiceImpl implements CustomMenuService { + + @Autowired + private CustomMenuRepository customMenuRepository; + @Autowired + private CustomMenuShareRepository customMenuShareRepository; + @Autowired + private CustomMenuTemplateRepository customMenuTemplateRepository; + @Autowired + private CustomMenuFavoritesRepository customMenuFavoritesRepository; + @Autowired + private CustomMenuShareTempRepository customMenuShareTempRepository; + @Autowired + private AppRepository appRepository; + @Autowired + private CategoryRepository categoryRepository; + @Autowired + private FunnelRepository funnelRepository; + @Autowired + private EventStatsRepository eventStatsRepository; + @Autowired + private RetentionRepository retentionRepository; + @Autowired + private AccountRepository accountRepository; + @Autowired + private EventService eventService; + @Autowired + private ConfigParamService configParamService; + @Autowired + private EventStatsService eventStatsService; + @Autowired + private FunnelService funnelService; + @Autowired + private RetentionService retentionService; + @Autowired + private ComplicateEventsService complicateEventsService; + + private final static String CUSTOM_MENU_NUMBER = "custom_menu_number"; + + private final static String CUSTOM_TEMPLATE_NUMBER = "custom_template_number"; + //事件分析,漏斗,留存 + private final static String TEMPLATE_TYPE_EVENT = "eventstats"; + private final static String TEMPLATE_TYPE_FUNNEL = "funnel"; + private final static String TEMPLATE_TYPE_RETENTION = "retention"; + private final static String TEMPLATE_NAME_PREFIX = "分享_"; + + private final static double MATCH_PERCENT_ZERO = 0.00D; + private final static double MATCH_PERCENT_ONE = 1.00D; + + private final static String VIEW_TYPE_DAY = "day"; + private final static String VIEW_TYPE_WEEK = "week"; + private final static int RETENTION_VIEW_WEEK_DAYS = 14; + + /** + * 列出所有的行业看单模板(即所有人分享列表) + * created by sunhao 20170424 + */ + @Override + public List<CustomMenuShare> listAllSharedMenuByCategory(Long accountId, Long appId) { + + List<CustomMenuShare> customMenuShareList = new ArrayList<>(); + + App app = appRepository.findOne(appId); + + if (null != app) { + + Long appCategory = Long.parseLong(app.getAppGenre()); + //列出所有分享看单,非以下类型取其他 + if (!appCategory.equals(39L) && !appCategory.equals(29L) && !appCategory.equals(17L)) { + appCategory = 8L; + } + customMenuShareList = customMenuShareRepository.listAllShared(); + + for (CustomMenuShare customMenuShare : customMenuShareList) { + + //看单模板 + customMenuShare.setTemplates(customMenuShareTempRepository.findShareTemplateById(customMenuShare.getId())); + + //计算匹配度 + if (accountId.equals(customMenuShare.getAccountId())) { + //自己分享的看单匹配度100% + //customMenuShare.setMatchPercent(MATCH_PERCENT_ONE); + customMenuShare.setHasFavorite(false); + customMenuShare.setHasUsed(false); + } else { + //customMenuShare.setMatchPercent(this.calculateMatchPercent(customMenuShare.getTemplates(), app.getId())); + //是否收藏或已加入看单 + customMenuShare.setHasFavorite(null != customMenuFavoritesRepository.findFavoriteMenuByShareId(app.getAccount(), + app.getId(), customMenuShare.getId())); + customMenuShare.setHasUsed(null != customMenuRepository.findCustomMenuByShareId(app.getAccount(), app.getId(), + customMenuShare.getId())); + } + } + } + + return customMenuShareList; + } + + /** + * 计算匹配度 + * 看单匹配率[n个模板,模板匹配率P],计算公式((P1+P2+...+Pn)/n)*100% + * 单个模板匹配率[i个事件,j个属性,事件匹配E(0,1),属性匹配个数A],计算公式:P= (E1(1+A1)+E2(1+A2)+...+Ei(1+Ai))/(i+j) + * created by sunhao 20170424 + */ + private Double calculateMatchPercent(List<CustomMenuShareTemplate> customMenuShareTemplateList, Long appId) { + + Double resultPercent = MATCH_PERCENT_ZERO; + + //获取用户的所有事件和属性 + Map<String, List<String>> eventAttrMap = eventService.findAllEventWithAttr(appId); + + if (CollectionUtils.isEmpty(eventAttrMap)) { + eventAttrMap = new HashMap<>(); + } + + //分别计算模板的匹配率求和 + for (CustomMenuShareTemplate customMenuShareTemplate : customMenuShareTemplateList) { + + Double tempMatch = MATCH_PERCENT_ZERO; + + switch (customMenuShareTemplate.getMenuType()) { + + case TEMPLATE_TYPE_EVENT: + //计算事件分析匹配度 + tempMatch = this.eventStatsMatchPercent(customMenuShareTemplate, eventAttrMap); + resultPercent += tempMatch; + break; + case TEMPLATE_TYPE_FUNNEL: + case TEMPLATE_TYPE_RETENTION: + //计算漏斗留存匹配度 + tempMatch = this.funnelAndRetentionMatchPercent(customMenuShareTemplate, eventAttrMap); + resultPercent += tempMatch; + break; + } + + customMenuShareTemplate.setHasMatch(tempMatch.equals(MATCH_PERCENT_ONE)); + } + + //模板匹配率平均值 + resultPercent = resultPercent / customMenuShareTemplateList.size(); + + return resultPercent; + } + + + /** + * 计算事件分析匹配度 + * 单个事件,N(N>=0)个属性 + * <p> + * eventStats:{"event":"install","relation":"and","params":[{"attr":"_country","type":"string","value":"中国","operator":"="}], + * "viewField":"_count","fieldOperate":""} + * <p> + * created by sunhao 20170424 + */ + private Double eventStatsMatchPercent(CustomMenuShareTemplate customMenuShareTemplate, Map<String, List<String>> eventAttrMap) { + + Double result; + + //模板事件 + JSONObject conditionJson = JSONObject.fromObject(customMenuShareTemplate.getQueryCondition()); + + //用户自己事件 + String eventName = conditionJson.getString("event"); + List<String> attrList = eventAttrMap.get(eventName); + + //匹配显示属性 + if (!StringUtils.isEmpty(conditionJson.getString("fieldOperate"))) { + + JSONArray paramJsonArray = conditionJson.getJSONArray("params"); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("attr", conditionJson.getString("viewField")); + paramJsonArray.add(jsonObject); + } + + //获取匹配度 + result = this.getOneEventMatchPercent(conditionJson, attrList); + + //设置查询条件 + customMenuShareTemplate.setQueryCondition(conditionJson.toString()); + + return result; + } + + /** + * 计算漏斗和留存匹配度 + * M(M>2)个事件,N(N>=0)个属性 + * <p> + * funnel:[{"event":"where","relation":"or","params":[{"attr":"city","type":"string","value":"北京,上海","operator":"in"},{"attr":"province","type":"string","value":"北京","operator":"="}]}, + * {"event":"net","relation":"and","params":[{"operator":"=","value":"移动","attr":"carrier","type":"string"}]}] + * <p> + * retention:[{"event":"install","relation":"and","params":[{"operator":"=","value":"爱奇艺","attr":"_campaignid","type":"string"}]}, + * {"event":"payment","relation":"and","params":[]}] + * <p> + * created by sunhao 20170424 + */ + private Double funnelAndRetentionMatchPercent(CustomMenuShareTemplate customMenuShareTemplate, Map<String, List<String>> eventAttrMap) { + + Double result = MATCH_PERCENT_ZERO; + + JSONArray eventArray = JSONArray.fromObject(customMenuShareTemplate.getQueryCondition()); + + for (int i = 0; i < eventArray.size(); i++) { + + //模板事件 + JSONObject eventObject = eventArray.getJSONObject(i); + + //用户自己事件 + String eventName = eventObject.getString("event"); + List<String> attrList = eventAttrMap.get(eventName); + + //获取匹配度和 + result += this.getOneEventMatchPercent(eventObject, attrList); + } + + //更新后的查询条件 + customMenuShareTemplate.setQueryCondition(eventArray.toString()); + + return result / eventArray.size(); + } + + /** + * 获取单个事件的匹配度 + * created by sunhao 20170424 + */ + private Double getOneEventMatchPercent(JSONObject eventJsonObject, List<String> attrList) { + + Double result = MATCH_PERCENT_ZERO; + + JSONArray paramJsonArray = eventJsonObject.getJSONArray("params"); + + //事件匹配,事件若没匹配,无需继续匹配属性,整个匹配度为0 + if (!CollectionUtils.isEmpty(attrList)) { + + //只有事件匹配没有属性,则100% + if (!CollectionUtils.isEmpty(paramJsonArray)) { + + double attrMatch = MATCH_PERCENT_ZERO; + //属性匹配 + for (int j = 0; j < paramJsonArray.size(); j++) { + + JSONObject attrObject = paramJsonArray.getJSONObject(j); + + if (attrList.contains(attrObject.getString("attr"))) { + attrMatch++; + attrObject.put("attrMatch", true); + } else { + attrObject.put("attrMatch", false); + } + } + + result = attrMatch / paramJsonArray.size(); + + } else { + + result = MATCH_PERCENT_ONE; + } + + eventJsonObject.put("eventMatch", true); + + } else { + + eventJsonObject.put("eventMatch", false); + } + + eventJsonObject.put("params", paramJsonArray); + + return result; + } + + + /** + * 查询我的看单 + * created by sunhao 20170424 + */ + @Override + public List<CustomMenu> listMyCustomMenu(Long accountId, Long appId) { + + //查询看单 + List<CustomMenu> customMenuList = customMenuRepository.findValidCustomMenuByApp(appId); + + for (CustomMenu customMenu : customMenuList) { + + //查询我的看单模板 + customMenu.setTemplates(customMenuTemplateRepository.findMyTemplateById(customMenu.getId())); + } + + return customMenuList; + } + + + /** + * 查询我的收藏夹 + * created by sunhao 20170424 + */ + @Override + public List<CustomMenuShare> listMyFavorite(Long accountId, Long appId) { + + List<CustomMenuShare> customMenuShareList = new ArrayList<>(); + + List<CustomMenuFavorites> customMenuFavoriteList = customMenuFavoritesRepository.findAllFavorites(accountId, appId); + + for (CustomMenuFavorites customMenuFavorites : customMenuFavoriteList) { + + CustomMenuShare customMenuShare = customMenuShareRepository.findShareById(customMenuFavorites.getShareId()); + + //设置ID + customMenuShare.setId(customMenuFavorites.getId()); + //shareId + customMenuShare.setShareId(customMenuFavorites.getShareId()); + //分享是否有效 + customMenuShare.setShareValid(customMenuFavorites.getShareValid()); + //是否收藏 + customMenuShare.setHasFavorite(true); + //是否使用 + customMenuShare.setHasUsed(customMenuRepository.findByShareId(appId, customMenuFavorites.getShareId()).intValue() > 0); + //填充匹配度 + customMenuShare.setMatchPercent(customMenuFavorites.getMatchPercent()); + //填充分析看单的模板 + List<CustomMenuShareTemplate> customMenuShareTemplateList = customMenuShareTempRepository.findShareTemplateById(customMenuFavorites.getShareId()); + //匹配填充 + this.calculateMatchPercent(customMenuShareTemplateList, appId); + customMenuShare.setTemplates(customMenuShareTemplateList); + + customMenuShareList.add(customMenuShare); + } + + return customMenuShareList; + } + + /** + * 创建自己的看单 + * created by sunhao 20170425 + */ + @Override + public CustomMenu createMyMenu(Long accountId, Long appId, String name) { + + CustomMenu customMenuSave = new CustomMenu(); + + Account account = accountRepository.findOne(accountId); + + if (null != account) { + + //保存主表 + App app = appRepository.findOne(appId); + + //创建者名字,名字->公司->email(需要?) + String accountName = StringUtils.isEmpty(account.getName()) ? account.getCompany() : account.getName(); + accountName = StringUtils.isEmpty(accountName) ? account.getEmail() : accountName; + customMenuSave.setCreateAccountName(accountName); + customMenuSave.setCategory(Long.parseLong(app.getAppGenre())); + customMenuSave.setCategoryName(categoryRepository.findNameByCategoryId(Long.parseLong(app.getAppGenre()))); + customMenuSave.setCreateAccount(account.getId()); + customMenuSave.setCreateDate(new Date()); + customMenuSave.setAppId(appId); + customMenuSave.setHasShare(false); + customMenuSave.setSource(false); + customMenuSave.setDelFlag(false); + customMenuSave.setName(name); + + //保存CustomMenu + customMenuSave = customMenuRepository.save(customMenuSave); + List<CustomMenu> menuList = customMenuRepository.findValidCustomMenuByApp(appId); +// List<CustomMenu> list = new ArrayList<>(); +// if(ValidateUtil.isValid(menuList)){ +// for(CustomMenu c : menuList){ +// c.setOrderindex(c.getOrderindex() + 1); +// list.add(c); +// } +// } + //list.add(customMenuSave); + customMenuSave.setOrderindex(menuList.size()); + customMenuSave = customMenuRepository.save(customMenuSave); + } + return customMenuSave; + } + + /** + * 添加模板到我的看单 + * created by sunhao 20170426 + */ + @Override + public CustomMenuTemplate addCustomMenuTemplate(Account account, Long appId, Long menuId, CustomMenuTemplate customMenuTemplate) { + + //构建模板 + customMenuTemplate.setAccountId(account.getId()); + customMenuTemplate.setModifyAccount(account.getId()); + customMenuTemplate.setCreateDate(new Date()); + customMenuTemplate.setModifyDate(new Date()); + customMenuTemplate.setCustomMenuId(menuId); + customMenuTemplate.setDelFlag(false); + + //填充condition,sql + customMenuTemplate = this.fillTemplateInfo(customMenuTemplate); + + if (null != customMenuTemplate.getOriginalReportId()) { + CustomMenuTemplate save = customMenuTemplateRepository.save(customMenuTemplate); + List<CustomMenuTemplate> list = customMenuTemplateRepository.findMyTemplateById(customMenuTemplate.getCustomMenuId()); + + save.setOrderindex(list.size()); +// List<CustomMenuTemplate> listNew = new ArrayList<>(); +// if(ValidateUtil.isValid(list)){ +// for(CustomMenuTemplate c : list){ +// c.setOrderindex(c.getOrderindex() + 1); +// listNew.add(c); +// } +// } +// listNew.add(save); + save = customMenuTemplateRepository.save(save); + return save; + } + + return null; + } + + /** + * 填充模板的条件和SQL + */ + private CustomMenuTemplate fillTemplateInfo(CustomMenuTemplate customMenuTemplate) { + + switch (customMenuTemplate.getMenuType()) { + + case TEMPLATE_TYPE_EVENT: + + EventStats eventStats = eventStatsRepository.findEventStats(customMenuTemplate.getOriginalReportId()); + if (null != eventStats) { + customMenuTemplate.setName(eventStats.getName()); + customMenuTemplate.setOriginalReportId(eventStats.getId()); + } + break; + + case TEMPLATE_TYPE_FUNNEL: + + Funnel funnel = funnelRepository.findOne(customMenuTemplate.getOriginalReportId()); + if (null != funnel) { + customMenuTemplate.setName(funnel.getName()); + customMenuTemplate.setOriginalReportId(funnel.getId()); + } + break; + + case TEMPLATE_TYPE_RETENTION: + + Retention retention = retentionRepository.findOne(customMenuTemplate.getOriginalReportId()); + if (null != retention) { + customMenuTemplate.setName(retention.getName()); + customMenuTemplate.setOriginalReportId(retention.getId()); + } + break; + } + + return customMenuTemplate; + } + + /** + * 删除我的看单 + * created by sunhao 20170424 + */ + @Override + public boolean deleteMyMenu(Long accountId, Long appId, Long menuId) { + + boolean result = false; + + int affectNum = customMenuRepository.deleteMyMenu(accountId, appId, menuId); + //此看单后面的看单顺序依次提前 + CustomMenu one = customMenuRepository.findOne(menuId); + List<CustomMenu> customMenuList = customMenuRepository.findValidCustomMenuByApp(appId); + List<CustomMenu> list = new ArrayList<>(); + if(ValidateUtil.isValid(customMenuList)){ + for(CustomMenu cu : customMenuList){ + if(cu.getOrderindex() > one.getOrderindex()){ + cu.setOrderindex(cu.getOrderindex() - 1); + list.add(cu); + } + } + } + if(list.size() > 0){ + customMenuRepository.save(list); + } + + if (affectNum > 0) { + + CustomMenu customMenu = one; + + if (customMenu.getSource()) { + //是来自分享,更新使用数量 + customMenuShareRepository.minusUserNumber(customMenu.getShareId()); + result = true; + + } else { + //是否分享,分享调用取消分享。 + CustomMenuShare customShare = customMenuShareRepository.findShareByOriginalMenu(menuId); + if (null != customShare) { + result = this.cancelShareMyMenu(accountId, appId, menuId); + } + } + } + + return result; + } + + /** + * 从分享添加到我的看单 + */ + @Override + public List<CustomMenuTemplate> addToMyMenu(Account account, Long appId, CustomMenuShare customMenuShare) { + + List<CustomMenuTemplate> customMenuTemplateList = new ArrayList<>(); + + //根据条件生成相应的报表模板 + CustomMenuShare customShare = customMenuShareRepository.findShareById(customMenuShare.getId()); + + if (null != customShare && !customShare.getDelFlag()) { + + //看单名字重复处理,后缀加上_1 + int nameNumber = customMenuRepository.findNameLikeNumber(appId, customShare.getName()).intValue(); + String name = nameNumber > 0 ? customMenuShare.getName() + "_" + (nameNumber + 1) : customMenuShare.getName(); + //添加到我的看单 + CustomMenu saveMenu = new CustomMenu(); + saveMenu.setCategoryName(customShare.getCategoryName()); + saveMenu.setCategory(customShare.getCategory()); + saveMenu.setAppId(appId); + saveMenu.setName(name); + saveMenu.setCreateAccount(account.getId()); + saveMenu.setCreateAccountName(account.getName()); + saveMenu.setCreateDate(new Date()); + saveMenu.setShareId(customShare.getId()); + saveMenu.setShareAccountId(customShare.getAccountId()); + saveMenu.setShareAccountName(customShare.getAccountName()); + saveMenu.setShareDate(customShare.getShareDate()); + saveMenu.setHasShare(true); + saveMenu.setSource(true); + saveMenu.setDelFlag(false); + //保存 + saveMenu = customMenuRepository.save(saveMenu); + + //添加相应的模板,生成SQL等 + customMenuTemplateList = this.createReportStatsFromTemplate(customMenuShare.getTemplates(), + account, appId, saveMenu.getId()); + + //保存模板 + customMenuTemplateList = customMenuTemplateRepository.save(customMenuTemplateList); + + //更新使用人数 + customMenuShareRepository.addUserNumber(customMenuShare.getId()); + + } + + return customMenuTemplateList; + } + + + /** + * 根据模板自动创建事件,漏斗,留存 + * created by sunhao 20170426 + */ + private List<CustomMenuTemplate> createReportStatsFromTemplate(List<CustomMenuShareTemplate> customMenuShareTemplateList, + Account account, Long appId, Long menuId) { + + List<CustomMenuTemplate> resultList = new ArrayList<>(); + + for (CustomMenuShareTemplate customMenuShareTemplate : customMenuShareTemplateList) { + + Date createDate = new Date(); + int nameNumber; + + StringBuilder nameString = new StringBuilder(); + CustomMenuTemplate template = new CustomMenuTemplate(customMenuShareTemplate); + + template.setCustomMenuId(menuId); + template.setCreateDate(new Date()); + template.setAccountId(account.getId()); + template.setModifyAccount(account.getId()); + template.setDelFlag(false); + //来自分享的模板名字加前缀 + nameString.append(TEMPLATE_NAME_PREFIX).append(template.getName()); + + switch (template.getMenuType()) { + + case TEMPLATE_TYPE_EVENT: + //相同名字后面数字自增 + nameNumber = eventStatsRepository.findCountLikeName(account.getId(), appId, nameString.toString()).intValue(); + if (nameNumber > 0) { + nameString.append("_").append(nameNumber + 1); + } + + EventStats eventStats = new EventStats(); + eventStats.setName(nameString.toString()); + eventStats.setApp(appId); + eventStats.setEventCondition(customMenuShareTemplate.getQueryCondition()); + eventStats.setCreateAccount(account.getId()); + eventStats.setCreateTime(createDate); + eventStats.setModifyTime(createDate); + eventStats.setModifyAccount(account.getId()); + eventStats.setValid(true); + eventStats = eventStatsService.createEventStats(eventStats); + + if (null != eventStats) { + template.setOriginalReportId(eventStats.getId()); + template.setName(nameString.toString()); + } + + break; + + case TEMPLATE_TYPE_FUNNEL: + //相同名字后面数字自增 + nameNumber = funnelRepository.findCountLikeName(account.getId(), appId, nameString.toString()).intValue(); + if (nameNumber > 0) { + nameString.append("_").append(nameNumber + 1); + } + Funnel funnel = new Funnel(); + funnel.setName(nameString.toString()); + funnel.setApp(appId); + funnel.setEventInfo(customMenuShareTemplate.getQueryCondition()); + funnel.setEvents(customMenuShareTemplate.getEvents()); + funnel.setCreateAccount(account.getId()); + funnel.setCreateTime(createDate); + funnel.setModifyTime(createDate); + funnel.setWindow(1); + funnel = funnelService.create(funnel, account.getId()); + + if (null != funnel) { + template.setOriginalReportId(funnel.getId()); + template.setName(nameString.toString()); + } + break; + + case TEMPLATE_TYPE_RETENTION: + //相同名字后面数字自增 + nameNumber = retentionRepository.findCountLikeName(account.getId(), appId, nameString.toString()).intValue(); + if (nameNumber > 0) { + nameString.append("_").append(nameNumber + 1); + } + Retention retention = new Retention(); + retention.setName(nameString.toString()); + retention.setApp(appId); + retention.setEventInfo(customMenuShareTemplate.getQueryCondition()); + retention.setRelativeTime(customMenuShareTemplate.getRelativeTime()); + retention.setAccount(account.getId()); + retention.setCreateTime(createDate); + retention.setModifyTime(createDate); + retention = retentionService.create(retention, account.getId()); + if (null != retention) { + template.setOriginalReportId(retention.getId()); + template.setName(nameString.toString()); + } + break; + + default: + break; + } + + //加入返回值 + if (null != template.getOriginalReportId()) { + resultList.add(template); + } + } + + return resultList; + } + + /** + * 添加到收藏夹 + * created by sunhao 20170424 + */ + @Override + public boolean addToFavorite(Long accountId, Long appId, Long menuId) { + + boolean result = false; + + //查询是否收藏过 + CustomMenuFavorites usedCustomMenuFavorites = customMenuFavoritesRepository.findHasAddToFavorite(accountId, appId, menuId); + + if (null != usedCustomMenuFavorites) { + + //收藏过直接更新 + int affectNum = customMenuFavoritesRepository.restoreFavorites(accountId, appId, menuId); + + if (affectNum > 0) { + result = customMenuShareRepository.addFavoriteNumber(menuId) > 0; + } + + } else { + //未收藏过插入新记录 + CustomMenuShare customMenuShare = customMenuShareRepository.findShareById(menuId); + if (null != customMenuShare && !customMenuShare.getDelFlag()) { + //查询模板 + List<CustomMenuShareTemplate> customMenuShareTemplateList = customMenuShareTempRepository.findShareTemplateById(customMenuShare.getId()); + //计算匹配度 + Double matchPercent = this.calculateMatchPercent(customMenuShareTemplateList, appId); + //保存收藏夹 + CustomMenuFavorites saveResult = customMenuFavoritesRepository.save(new CustomMenuFavorites(accountId, appId, customMenuShare.getId(), matchPercent)); + + //更新收藏数量 + if (null != saveResult) { + + customMenuShareRepository.addFavoriteNumber(customMenuShare.getId()); + result = true; + } + } + } + + return result; + } + + /** + * 删除收藏夹 + * created by sunhao 20170424 + */ + @Override + public boolean deleteFavorite(Long accountId, Long appId, Long menuId) { + + boolean result = false; + + int affectNum = customMenuFavoritesRepository.deleteFavorites(accountId, appId, menuId); + + //更新收藏数量 + if (affectNum > 0) { + + customMenuShareRepository.minusFavoriteNumber(menuId); + result = true; + } + + return result; + } + + /** + * 校验我的看单的个数 + * created by sunhao 20170425 + */ + @Override + public boolean validMyMenuNumber(Long accountId, Long appId) { + + //用户所有看单 + BigInteger menuNumber = customMenuRepository.findMyMenuNumber(appId); + //限制看单数 + String number = configParamService.getConfigParamByKey(CUSTOM_MENU_NUMBER); + + return menuNumber.intValue() < Integer.parseInt(number); + } + + /** + * 校验看单名称 + */ + @Override + public boolean validMyMenuName(Long appId, String menuName) { + + BigInteger menuNumber = customMenuRepository.findMyMenuNumberByName(appId, menuName); + return menuNumber.intValue() == 0; + } + + + /** + * 将热云看单添加到我的看单 + * created by sunhao 20170426 + */ + public List<CustomMenuTemplate> addReyunToMyMenu(Account account, Long appId) { + + List<CustomMenuTemplate> templateList = new ArrayList<>(); + + App app = appRepository.findOne(appId); + + Long appCategory = Long.parseLong(app.getAppGenre()); +// Long appCategory = 8L; + //如果APP类型不是以下四类,默认添加基础类型看单 + if (!appCategory.equals(17L) && !appCategory.equals(29L) && !appCategory.equals(39L) && !appCategory.equals(8L)) { + appCategory = 8L; + } + + List<CustomMenuShare> customMenuShareList = customMenuShareRepository.findReyunMenu(appCategory); + + for (CustomMenuShare customMenuShare : customMenuShareList) { + + List<CustomMenuShareTemplate> customMenuTemplateList = customMenuShareTempRepository.findShareTemplateById(customMenuShare.getId()); + + customMenuShare.setTemplates(customMenuTemplateList); + + templateList = this.addToMyMenu(account, appId, customMenuShare); + } + + return templateList; + } + + @Override + public boolean cancelShareMyMenu(Long accountId, Long appId, Long menuId) { + + CustomMenuShare customMenuShare = customMenuShareRepository.findShareByOriginalMenu(menuId); + + if (null != customMenuShare) { + + //删除分享 + int affectNum = customMenuShareRepository.deleteShareMenu(customMenuShare.getId()); + + if (affectNum > 0) { + + //取消我的看单中的分享状态 + customMenuRepository.updateMyMenuShare(customMenuShare.getOriginalMenu(), false); + //取消分享,所有收藏此看单的变成无效 + customMenuFavoritesRepository.updateFavoritesShareInvalid(customMenuShare.getId()); + + return true; + } + } + + return false; + } + + /** + * 查询我的看单和我的收藏是否为空 + * created by sunhao 20170426 + */ + @Override + public boolean findAllMenuAndFavorite(Long accountId, Long appId) { + + //查询所有的看单,包括失效的。 + List<CustomMenu> customMenuList = customMenuRepository.findAllCustomMenuByApp(appId); + + List<CustomMenuFavorites> customMenuFavoritesList = customMenuFavoritesRepository.findAllFavorites(accountId, appId); + + return !(CollectionUtils.isEmpty(customMenuList) && CollectionUtils.isEmpty(customMenuFavoritesList)); + + } + + + /** + * 校验看单内模板是否存在和模板数量是否超标 + * created by sunhao 20170426 + */ + @Override + public ResultModel validMenuTemplate(Long accountId, Long menuId, Long templateId, String menuType) { + + //查询是否添加过此模板 + CustomMenuTemplate template = customMenuTemplateRepository.findMyTemplateByReportId(menuId, templateId, menuType); + + if (null == template) { + //用户看单的所有模板 + BigInteger tempNumber = customMenuTemplateRepository.countNumberByMenu(menuId); + //限制模板数 + String number = configParamService.getConfigParamByKey(CUSTOM_TEMPLATE_NUMBER); + + if (tempNumber.intValue() >= Integer.parseInt(number)) { + return ResultModel.ERROR(ResultStatus.NUMBER_LIMIT); + } + + } else { + return ResultModel.ERROR(ResultStatus.RECORD_EXIST); + } + + return ResultModel.OK(); + } + + /** + * 修改看单名字 + * created by sunhao 20170426 + */ + @Override + public boolean updateMyMenuName(Long accountId, Long menuId, String name) { + + int affectNum = customMenuRepository.updateMyMenuName(accountId, menuId, name, new Date()); + + return affectNum > 0; + } + + + /** + * 删除模板 + */ + @Override + public boolean deleteMyMenuTemplate(Long accountId, Long templateId) { + + int affectNum = customMenuTemplateRepository.updateTemplateInvalid(accountId, templateId); + CustomMenuTemplate one = customMenuTemplateRepository.findOne(templateId); + List<CustomMenuTemplate> customMenuTemplateList = customMenuTemplateRepository.findMyTemplateById(one.getCustomMenuId()); + List<CustomMenuTemplate> list = new ArrayList<>(); + if(ValidateUtil.isValid(customMenuTemplateList)){ + for(CustomMenuTemplate cu : customMenuTemplateList){ + if(cu.getOrderindex() > one.getOrderindex()){ + cu.setOrderindex(cu.getOrderindex() - 1); + list.add(cu); + } + } + } + if(list.size() > 0){ + customMenuTemplateRepository.save(list); + } + return affectNum > 0; + } + + + @Override + public Map<String, List> queryAllReport(Long accountId, Long appId, Long originalReportId, String menuType, String startDate, String endDate, String viewFlag) { + + Map<String, List> resultData = new HashMap<>(); + + String dimension = ""; +// String viewFlag = VIEW_TYPE_DAY; + + switch (menuType) { + + case TEMPLATE_TYPE_EVENT: + + EventStats eventStats = eventStatsRepository.findOne(originalReportId); + + if (null != eventStats) { + resultData = complicateEventsService.queryComplicatedEvent(appId, accountId, startDate, endDate, + eventStats.getEventCondition(), viewFlag); + } + break; + + case TEMPLATE_TYPE_FUNNEL: + + Funnel funnel = funnelRepository.findOne(originalReportId); + + if (null != funnel) { + + resultData = funnelService.funnelDataQuery(startDate, endDate, funnel.getEventInfo(), funnel.getEvents(), 1, appId, false); + } + break; + + case TEMPLATE_TYPE_RETENTION: + +// try { +// //留存超过14天之后按照周显示 +// viewFlag = DateUtil.daysBetween(startDate, endDate) + 1 > RETENTION_VIEW_WEEK_DAYS ? VIEW_TYPE_WEEK : viewFlag; +// } catch (Exception e) { +// e.printStackTrace(); +// } + + Retention retention = retentionRepository.findOne(originalReportId); + + if (null != retention) { + resultData = retentionService.retentionReport(startDate, endDate, false, retention.getEventInfo(), + appId, null, "-all", viewFlag, 7, false, accountId,null,false); + } + break; + } + + return resultData; + } + + + /** + * 查询所有看单简单数据 + * created by sunhao 20170428 + */ + @Override + public List<CustomMenu> listMyMenuList(Long accountId, Long appId) { + + return customMenuRepository.findValidCustomMenuByApp(appId); + } + + + /** + * 查询我的看单详情 + * created by sunhao 20170428 + */ + @Override + public CustomMenu getMyMenuDetail(Long menuId) { + + CustomMenu customMenu = customMenuRepository.findOne(menuId); + + if (null != customMenu) { + //查询我的看单模板 + customMenu.setTemplates(customMenuTemplateRepository.findMyTemplateById(customMenu.getId())); + } + + return customMenu; + } + + /** + * 更新我的看单和分享看单的账户名称 + */ + @Override + public int updateMenuAccountName(Long accountId, String accountName) { + + //修改创建者名字 + int numCreate = customMenuRepository.updateAccountName(accountId, accountName); + //修改分享者名字 + int numShare = customMenuRepository.updateShareAccountName(accountId, accountName); + //修改行业看单分享名字 + int numMyShare = customMenuShareRepository.updateAccountName(accountId, accountName); + + return numCreate + numShare + numMyShare; + } + + /** + * 修改看单顺序 + */ + @Override + public boolean updateMyMenuIndex(Long accountId, Long appid, Long menuId, int index) { + List<CustomMenu> customMenuList = customMenuRepository.findValidCustomMenuByApp(appid); + CustomMenu customMenu = customMenuRepository.findOne(menuId); + List<CustomMenu> list = new ArrayList<>(); + //看单前移 + if(customMenu.getOrderindex() > index){ + for(CustomMenu cu : customMenuList){ + if((cu.getOrderindex() > index || cu.getOrderindex() == index) && cu.getOrderindex() < customMenu.getOrderindex()){ + cu.setOrderindex(cu.getOrderindex() + 1); + cu.setModifyAccount(accountId); + cu.setModifyDate(new Date()); + list.add(cu); + } + } + }//看单后移 + else if(customMenu.getOrderindex() > index){ + for(CustomMenu cu : customMenuList){ + if((cu.getOrderindex() < index || cu.getOrderindex() == index) && cu.getOrderindex() > customMenu.getOrderindex()){ + cu.setOrderindex(cu.getOrderindex() - 1); + cu.setModifyAccount(accountId); + cu.setModifyDate(new Date()); + list.add(cu); + } + } + } + + if(list.size() > 0){ + customMenu.setOrderindex(index); + list.add(customMenu); + customMenuRepository.save(list); + } + return true; + } + + @Override + public boolean updateMyMenuTemplateIndex(Long accountId, Long id, int index) { + CustomMenuTemplate one = customMenuTemplateRepository.findOne(id); + List<CustomMenuTemplate> menuTemplateList = customMenuTemplateRepository.findMyTemplateById(one.getCustomMenuId()); + List<CustomMenuTemplate> list = new ArrayList<>(); + //看单前移 + if(one.getOrderindex() > index){ + for(CustomMenuTemplate cu : menuTemplateList){ + if((cu.getOrderindex() > index || cu.getOrderindex() == index) && cu.getOrderindex() < one.getOrderindex()){ + cu.setModifyAccount(accountId); + cu.setModifyDate(new Date()); + cu.setOrderindex(cu.getOrderindex() + 1); + list.add(cu); + } + } + }//看单后移 + else if(one.getOrderindex() > index){ + for(CustomMenuTemplate cu : menuTemplateList){ + if((cu.getOrderindex() < index || cu.getOrderindex() == index) && cu.getOrderindex() > one.getOrderindex()){ + cu.setModifyAccount(accountId); + cu.setModifyDate(new Date()); + cu.setOrderindex(cu.getOrderindex() - 1); + list.add(cu); + } + } + } + + if(list.size() > 0){ + one.setOrderindex(index); + list.add(one); + customMenuTemplateRepository.save(list); + } + return true; + } + + @Override + public CustomMenuTemplate updateMyMenuTemplateType(Long accountId, Long id, String type) { + CustomMenuTemplate one = customMenuTemplateRepository.findOne(id); + one.setType(type); + one.setModifyDate(new Date()); + one.setModifyAccount(accountId); + + CustomMenuTemplate save = customMenuTemplateRepository.save(one); + return save; + } + + @Override + public List<CustomMenu> listByReportId(Long originalReportId, String type) { + List<Long> menuIdList = customMenuTemplateRepository.findMenuByOriginal(originalReportId,type); + if(ValidateUtil.isValid(menuIdList)){ + List<CustomMenu> menuList = customMenuRepository.findAllByIds(menuIdList); + return menuList; + } + return null; + } + + @Override + public List<CustomMenuShare> findIndustry() { + return customMenuShareRepository.findIndustry(); + } + + /** + * 根据分享ID和APPID校验是否已经加入过我的看单 + * created by sunhao 20170505 + */ + @Override + public boolean validIsExists(Long appId, Long shareId) { + + return customMenuRepository.findByShareId(appId, shareId).intValue() > 0; + } +} diff --git a/src/main/java/com/reyun/service/impl/DemoAppointmentServiceImpl.java b/src/main/java/com/reyun/service/impl/DemoAppointmentServiceImpl.java new file mode 100644 index 0000000..2834c46 --- /dev/null +++ b/src/main/java/com/reyun/service/impl/DemoAppointmentServiceImpl.java @@ -0,0 +1,37 @@ +package com.reyun.service.impl; + +import com.reyun.model.DemoAppointment; +import com.reyun.repository.DemoAppointmentRepository; +import com.reyun.service.DemoAppointmentService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigInteger; + +/** + * Created by nolan on 06/06/2017. + * description: + */ +@Service +public class DemoAppointmentServiceImpl implements DemoAppointmentService { + private static Logger logger = LoggerFactory.getLogger(DemoAppointmentServiceImpl.class); + + @Autowired + private DemoAppointmentRepository demoAppointmentRepository; + + @Override + public DemoAppointment freetrial(DemoAppointment demoAppointment) { + //1. 申请 + demoAppointment = demoAppointmentRepository.save(demoAppointment); + logger.debug("创建预约申请, {}", demoAppointment); + return demoAppointment; + } + + @Override + public boolean checkExist(String phone) { + BigInteger bigInteger = demoAppointmentRepository.countByPhone(phone); + return bigInteger.intValue() > 0; + } +} diff --git a/src/main/java/com/reyun/service/impl/DemoServiceImpl.java b/src/main/java/com/reyun/service/impl/DemoServiceImpl.java new file mode 100644 index 0000000..1b3de95 --- /dev/null +++ b/src/main/java/com/reyun/service/impl/DemoServiceImpl.java @@ -0,0 +1,21 @@ +package com.reyun.service.impl; + +import org.springframework.stereotype.Service; + +import com.reyun.service.DemoService; + +/** + * Created by zxy on 28/3/14. + * Description DemoUrl生成服务 + */ +@Service +public class DemoServiceImpl implements DemoService { + + @Override + public String getUrl(String reportName, String startDate, String endDate, + String reportView, boolean special) { + return null; + } + + +} diff --git a/src/main/java/com/reyun/service/impl/EventServiceImpl.java b/src/main/java/com/reyun/service/impl/EventServiceImpl.java new file mode 100644 index 0000000..c1e1424 --- /dev/null +++ b/src/main/java/com/reyun/service/impl/EventServiceImpl.java @@ -0,0 +1,1503 @@ +package com.reyun.service.impl; + +import com.google.common.base.Function; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.reyun.model.*; +import com.reyun.repository.*; +import com.reyun.service.*; +import com.reyun.util.EventRedisUtil; +import com.reyun.util.ValidateUtil; +import org.apache.commons.collections.CollectionUtils; +import org.json.JSONArray; +import org.json.JSONException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.annotation.Nullable; +import java.math.BigInteger; +import java.util.*; + +@Service +public class EventServiceImpl implements EventService { + private static final Logger logger = LoggerFactory.getLogger(EventServiceImpl.class); + + @Autowired + EventRepository eventRepository; + + @Autowired + AppRepository appRepository; + + @Autowired + EventViewAttrRepository eventViewAttrRepository; + + @Autowired + CommonEventRepository commonEventRepository; + + @Autowired + CommonParamService commonParamService; + + @Autowired + UserGroupService usergroupService; + + @Autowired + EventMetaRepository eventMetaRepository; + + @Autowired + EventAttributeMetaRepository eventAttributeMetaRepository; + + @Autowired + ComplicatedParamRepository complicatedParamRepository; + + @Autowired + AttributeRestrictRepository attributeRestrictRepository; + + @Autowired + ProfileRepository profileRepository; + + @Autowired + CommonParamRepository commonParamRepository; + + @Autowired + VirtualEventService virtualEventService; + + @Autowired + ProfileService profileService; + + @Autowired + EventService eventService; + + + private static final String EVENT_ATTR_CID = "_cid"; + + private static final String EVENT_ATTR_CAMPAIGNID = "_campaignid"; + + //默认统计属性 + private final static int VIEW_ATTR_DEFAULT = 1; + private final static int VIEW_ATTR_CUSTOM = 2; + private final static String ATTR_TYPE_DEFAULT = "default"; + + @Override + public List<CommonParam> listAllAttributes(Long appId) { + +/* String appkey = appRepository.findAppkeyById(appId); + ArrayList<String> attrName = new ArrayList<>(); + ArrayList<EventAttr4Web> attr4WebArrayList = new ArrayList<>(); + if (!StringUtils.isEmpty(eventList)) { + String[] events = eventList.split(","); + for (String event : events) { + List<EventAttr4Web> eventAttr4Webs = eventService.listOneEvent(appId, event); + for (EventAttr4Web eventAttr4Web : eventAttr4Webs) { + if (!attrName.contains(eventAttr4Web.getAttr())) { + attrName.add(eventAttr4Web.getAttr()); + attr4WebArrayList.add(eventAttr4Web); + } + } + } + }*/ + + List<Profile> profiles = this.listByAppkeyBugFix(appId); + ArrayList<CommonParam> allAttributes = new ArrayList<>(); + List<CommonParam> eventParams = commonParamService.listAllByType("event"); + List<CommonParam> profileParams = commonParamService.listAllByType("profile"); + + Map<String, CommonParam> eventParamsMap = Maps.uniqueIndex(eventParams, new Function<CommonParam, String>() { + @Nullable + @Override + public String apply(@Nullable CommonParam eventParams) { + return eventParams.getParam(); + } + }); + + Map<String, CommonParam> profileParamsMap = Maps.uniqueIndex(profileParams, new Function<CommonParam, String>() { + @Nullable + @Override + public String apply(@Nullable CommonParam profileParams) { + return profileParams.getParam(); + } + }); + + String appkey = appRepository.findAppkeyById(appId); + List<EventAttr4Web> eventAttr4WebsAll = eventService.listOneEvent(appId, null); + List<EventAttr4Web> eventAttr4Webs = new ArrayList<>(); + for (EventAttr4Web eventAttr4Web : eventAttr4WebsAll) { + if ((eventAttr4Web.getStatus() && eventAttr4Web.getAddStatsCondition()) || eventParamsMap.containsKey(eventAttr4Web.getAttr())) { + eventAttr4Webs.add(eventAttr4Web); + } + } + + int i = 33; + Integer j = commonParamRepository.findNumByType("profile").intValue(); + for (Profile profile : profiles) { + CommonParam commonParam = new CommonParam(); + AttributeRestrict allRestrict = attributeRestrictRepository.findIsAllRestrictByNameAndType(profile.getAttr(), "profile", "all"); + AttributeRestrict singleRestrict = attributeRestrictRepository.findIsRestrictByAppIdAndType(appkey, "profile", profile.getAttr()); + + boolean isAllRestrict = allRestrict == null ? false : (allRestrict.isAllRestrict() || allRestrict.isProfileRestrict()); + boolean isSingleRestrict = singleRestrict == null ? false : (singleRestrict.isRootRestrict() || singleRestrict.isParentRestrict() || singleRestrict.isAppRestrict() || singleRestrict.isProfileRestrict()); + if (!isAllRestrict && !isSingleRestrict) { + if (profileParamsMap.containsKey(profile.getAttr())) { + allAttributes.add(profileParamsMap.get(profile.getAttr())); + } else if (profile.isAdd_stats_condition() && profile.getStatus()) { + i++; + j++; + commonParam.setId(new Long(i)); + commonParam.setSortId(j); + commonParam.setAlias(profile.getAttrAlias()); + commonParam.setParam(profile.getAttr()); + commonParam.setType("profile"); + commonParam.setDataType("string"); + allAttributes.add(commonParam); + } + } + } + + Integer n = commonParamRepository.findNumByType("event").intValue(); + int m = 5; + for (EventAttr4Web event4Web : eventAttr4Webs) { + AttributeRestrict allRestrict = attributeRestrictRepository.findIsAllRestrictByNameAndType(event4Web.getAttr(), "event", "all"); + AttributeRestrict singleRestrict = attributeRestrictRepository.findIsRestrictByAppIdAndType(appkey, "event", event4Web.getAttr()); + boolean isAllRestrict = allRestrict == null ? false : (allRestrict.isAllRestrict() || allRestrict.isProfileRestrict()); + boolean isSingleRestrict = singleRestrict == null ? false : (singleRestrict.isRootRestrict() || singleRestrict.isParentRestrict() || singleRestrict.isAppRestrict() || singleRestrict.isProfileRestrict()); + if (!isAllRestrict && !isSingleRestrict) { + CommonParam commonParam = new CommonParam(); + if (eventParamsMap.containsKey(event4Web.getAttr())) { + allAttributes.add(eventParamsMap.get(event4Web.getAttr())); + } else { + n++; + m++; + commonParam.setId(new Long(m)); + commonParam.setSortId(n); + commonParam.setAlias(event4Web.getAttrAlias()); + commonParam.setParam(event4Web.getAttr()); + commonParam.setType("event"); + commonParam.setDataType(event4Web.getDataType()); + allAttributes.add(commonParam); + } + } + } + return allAttributes; + } + + + @Override + public List<EventAttr4Web> listAllEventAttributesTop50(Long appId, String propertiesType) { + ArrayList<CommonParam> allAttributes = new ArrayList<>(); + List<CommonParam> eventParams = commonParamService.listAllByType("event"); + Map<String, CommonParam> eventParamsMap = Maps.uniqueIndex(eventParams, new Function<CommonParam, String>() { + @Nullable + @Override + public String apply(@Nullable CommonParam eventParams) { + return eventParams.getParam(); + } + }); + + List<EventAttr4Web> eventAttr4WebsAll = eventService.listOneEvent(appId, null); + + List<EventAttr4Web> eventAttr4Webs2 = new ArrayList<>(); + + for (EventAttr4Web eventAttr4Web : eventAttr4WebsAll) { + if ((eventAttr4Web.getStatus() && eventAttr4Web.getAddStatsCondition()) || eventParamsMap.containsKey(eventAttr4Web.getAttr())) { + eventAttr4Webs2.add(eventAttr4Web); + } + } + + + Integer n = commonParamRepository.findNumByType("event").intValue(); + int m = 5; + for (EventAttr4Web event4Web : eventAttr4Webs2) { + CommonParam commonParam = new CommonParam(); + if (eventParamsMap.containsKey(event4Web.getAttr())) { + allAttributes.add(eventParamsMap.get(event4Web.getAttr())); + } else { + n++; + m++; + String s; + commonParam.setId(new Long(m)); + commonParam.setSortId(n); + commonParam.setAlias(event4Web.getAttrAlias()); + commonParam.setParam(event4Web.getAttr()); + commonParam.setType("event"); + commonParam.setDataType(event4Web.getDataType()); + allAttributes.add(commonParam); + } + } + + List<EventAttr4Web> allEventAttrProperties = new ArrayList<>(); + for (CommonParam commonParam : allAttributes) { + EventAttr4Web eventAttr4Web = new EventAttr4Web(); + + eventAttr4Web.setAttr(commonParam.getParam()); + eventAttr4Web.setAttrAlias(commonParam.getAlias()); + eventAttr4Web.setType(commonParam.getType()); + eventAttr4Web.setDataType(commonParam.getDataType()); + + //填充渠道 + if (EVENT_ATTR_CID.equals(commonParam.getParam())) { + eventAttr4Web.setWebType("string"); + } + allEventAttrProperties.add(eventAttr4Web); + } + return allEventAttrProperties; + } + + + @Override + public List<Profile> listByAppkeyBugFix(Long appid) { + String appkey = appRepository.findAppkeyById(appid); + List<Profile> oldResult = profileRepository.findAllByAppkey(appkey); + List<CommonParam> profileCommonParams = commonParamRepository.findAllByType("profile"); + Map<String, CommonParam> profileCommonParamsMaps = Maps.uniqueIndex(profileCommonParams, new Function<CommonParam, String>() { + @Nullable + @Override + public String apply(@Nullable CommonParam commonParam) { + return commonParam.getParam(); + } + }); + + List<Profile> newResult = new ArrayList<Profile>(); + for (CommonParam commonParam : profileCommonParams) { + Profile profile = new Profile(); + profile.setAppkey(appkey); + profile.setAttrAlias(commonParam.getAlias()); + profile.setAttr(commonParam.getParam()); + profile.setCommon(true); + profile.setStatus(true); + profile.setDataType(commonParam.getDataType()); + newResult.add(profile); + } + + for (Profile temp : oldResult) { + if (!profileCommonParamsMaps.containsKey(temp.getAttr())) { + if (ValidateUtil.validNotChinese(temp.getAttr())) { + if (!ValidateUtil.isValid(temp.getAttrAlias())) { + temp.setAttrAlias(temp.getAttr()); + } + newResult.add(temp); + } + } + } + return newResult; + } + + + + @Override + public List<Event4Web> listEvent(Long app) { + + String appkey = appRepository.findAppkeyById(app); + List<Event> eventList = eventRepository.findByAppkey(appkey); + List<EventMeta> metas = eventMetaRepository.findByAppkey(appkey); + List<CommonEvent> commonEventList = commonEventRepository.findAll(); + + Map<String, EventMeta> metaMap = new HashMap<>(); + if (ValidateUtil.isValid(metas)) { + for (EventMeta e : metas) { + metaMap.put(e.getEventId(), e); + } + } + + Map<String, CommonEvent> commonMap = new HashMap<>(); + if (ValidateUtil.isValid(commonEventList)) { + for (CommonEvent e : commonEventList) { + commonMap.put(e.getEvent(), e); + } + } + + LinkedList<Event4Web> result = new LinkedList<>(); + LinkedList<Event4Web> temp = new LinkedList<>(); + List<String> nameList = new ArrayList<>(); + if (ValidateUtil.isValid(eventList)) { + for (Event e : eventList) { + if (!nameList.contains(e.getEventName())) { + if (commonMap.containsKey(e.getEventName())) { + nameList.add(e.getEventName()); + + CommonEvent commonEvent = commonMap.get(e.getEventName()); + Event4Web event4Web = commonEventTo4Web(commonEvent); + result.add(event4Web); + } else { + nameList.add(e.getEventName()); + if (metaMap.containsKey(e.getEventName())) { + EventMeta eventMeta = metaMap.get(e.getEventName()); + Event4Web event4Web = eventMetaTo4Web(eventMeta); + temp.add(event4Web); + } else { + Event4Web event4Web = eventTo4Web(e); + temp.add(event4Web); + } + } + } + } + result.addAll(temp); + } + return result; + } + + + @Override + public List<EventAttr4Web> listOneEvent(Long app, String name) { + + String appkey = appRepository.findAppkeyById(app); + List<Event> eventList = null; + if (name != null) { + eventList = eventRepository.findByEventName(appkey, name); + } else { + eventList = eventRepository.findByAppkey(appkey); + } + + Map<String, CommonParam> map = commonParamService.findAllByType("event"); + List<EventAttributeMeta> metas = eventAttributeMetaRepository.findByAppkey(appkey); + + Map<String, EventAttributeMeta> metaMap = new HashMap<>(); + if (ValidateUtil.isValid(metas)) { + for (EventAttributeMeta e : metas) { + metaMap.put(e.getAttribute(), e); + } + } + + LinkedList<EventAttr4Web> result = new LinkedList<>(); + LinkedList<EventAttr4Web> temp = new LinkedList<>(); + TreeMap<Integer, EventAttr4Web> commonMap = new TreeMap<>(); + if (ValidateUtil.isValid(eventList)) { + + List<String> eventAttrNameList = new ArrayList<>(); + + for (Event event : eventList) { + if (!eventAttrNameList.contains(event.getEventAttr())) { + eventAttrNameList.add(event.getEventAttr()); + + if (map.containsKey(event.getEventAttr())) { + CommonParam commonParam = map.get(event.getEventAttr()); + EventAttr4Web eventAttr4Web = coomonEventAttrTo4Web(commonParam); + eventAttr4Web.setDataType(event.getDataType()); + commonMap.put(commonParam.getSortId(), eventAttr4Web); + } else { + if (metaMap.containsKey(event.getEventAttr())) { + EventAttributeMeta eventAttributeMeta = metaMap.get(event.getEventAttr()); + EventAttr4Web eventAttr4Web = eventAttrMetaTo4Web(eventAttributeMeta); + eventAttr4Web.setDataType(event.getDataType()); + temp.add(eventAttr4Web); + } else { + EventAttr4Web eventAttr4Web = eventAttrTo4Web(event); + eventAttr4Web.setDataType(event.getDataType()); + temp.add(eventAttr4Web); + } + } + } + } + if (ValidateUtil.isValid(commonMap)) { + for (Integer i : commonMap.keySet()) { + result.add(commonMap.get(i)); + } + } + result.addAll(temp); + } + + return result; + } + + public EventAttr4Web eventAttrTo4Web(Event e) { + EventAttr4Web ew = new EventAttr4Web(); + + ew.setStatus(true); + ew.setAddStatsCondition(false); + ew.setAddStatsView(false); + ew.setAttr(e.getEventAttr()); + ew.setAttrAlias(e.getEventAttr()); + ew.setCommon(false); + + return ew; + } + + public EventAttr4Web coomonEventAttrTo4Web(CommonParam e) { + EventAttr4Web ew = new EventAttr4Web(); + + ew.setStatus(true); + ew.setAddStatsCondition(false); + ew.setAddStatsView(false); + ew.setAttr(e.getParam()); + ew.setAttrAlias(e.getAlias()); + ew.setCommon(true); + return ew; + } + + public EventAttr4Web eventAttrMetaTo4Web(EventAttributeMeta e) { + EventAttr4Web ew = new EventAttr4Web(); + + ew.setStatus(e.getStatus()); + ew.setAddStatsCondition(e.getAddStatsCondition()); + ew.setAddStatsView(e.getAddStatsView()); + ew.setAttr(e.getAttribute()); + ew.setAttrAlias(e.getAlias() == null ? e.getAttribute() : e.getAlias()); + ew.setCommon(false); + return ew; + } + + @Override + public Map<String, String> findEventNameAliasMap(String appKey, List<String> eventNameList) { + + Map<String, String> resultMap = new HashMap<>(); + + //自定义别名 + List<EventMeta> eventMetaList = eventMetaRepository.findByEventIds(appKey, eventNameList); + Map<String, EventMeta> eventMetaMap = Maps.uniqueIndex(eventMetaList, new Function<EventMeta, String>() { + @Override + public String apply(EventMeta eventMeta) { + return eventMeta.getEventId(); + } + }); + + //通用事件别名 + Map<String, CommonEvent> commonEventMap = commonParamService.findAllCommonEvent(); + + for (String eventName : eventNameList) { + + if (eventMetaMap.containsKey(eventName) && !StringUtils.isEmpty(eventMetaMap.get(eventName).getAlias())) { + + resultMap.put(eventName, eventMetaMap.get(eventName).getAlias()); + + } else if (commonEventMap.containsKey(eventName) && !StringUtils.isEmpty(commonEventMap.get(eventName).getAlias())) { + + resultMap.put(eventName, commonEventMap.get(eventName).getAlias()); + + } else { + + resultMap.put(eventName, eventName); + } + } + + return resultMap; + } + + @Override + public EventMeta updateEvent(Long app, String name, String nameAlias, Long account) { + String appkey = appRepository.findAppkeyById(app); + EventMeta event = eventMetaRepository.findByEventId(appkey, name); + + if (event == null) { + EventMeta eventMeta = new EventMeta(); + eventMeta.setStatus(true); + eventMeta.setAlias(nameAlias); + eventMeta.setAppkey(appkey); + eventMeta.setEventId(name); + eventMeta.setModifyAccount(account); + eventMeta.setModifyTime(new Date()); + + return eventMetaRepository.save(eventMeta); + } else { + event.setModifyTime(new Date()); + event.setModifyAccount(account); + event.setAlias(nameAlias); + + return eventMetaRepository.save(event); + } + } + + @Override + public EventAttributeMeta updateEventAttr(String eventname, String attrnameAlias, Long account, Long app) { + String appkey = appRepository.findAppkeyById(app); + EventAttributeMeta attributeMeta = eventAttributeMetaRepository.findByAttribute(appkey, eventname); + + if (attributeMeta == null) { + EventAttributeMeta attr = new EventAttributeMeta(); + attr.setAttribute(eventname); + attr.setAlias(attrnameAlias); + attr.setStatus(true); + attr.setAddStatsView(false); + attr.setAddStatsCondition(false); + attr.setAppkey(appkey); + attr.setModifyAccount(account); + attr.setModifyTime(new Date()); + return eventAttributeMetaRepository.save(attr); + } else { + attributeMeta.setModifyTime(new Date()); + attributeMeta.setModifyAccount(account); + attributeMeta.setAlias(attrnameAlias); + + return eventAttributeMetaRepository.save(attributeMeta); + } + } + + @Override + public void enableEvent(Long app, String name, Long account) { + String appkey = appRepository.findAppkeyById(app); + EventMeta event = eventMetaRepository.findByEventId(appkey, name); + + event.setStatus(true); + + eventMetaRepository.save(event); + } + + @Override + public void forbiddenEvent(Long app, String name, Long account) { + String appkey = appRepository.findAppkeyById(app); + EventMeta event = eventMetaRepository.findByEventId(appkey, name); + + if (event == null) { + EventMeta eventMeta = new EventMeta(); + eventMeta.setStatus(false); + eventMeta.setEventId(name); + eventMeta.setAlias(name); + eventMeta.setAppkey(appkey); + eventMeta.setModifyAccount(account); + eventMeta.setModifyTime(new Date()); + + eventMetaRepository.save(eventMeta); + } else { + event.setModifyTime(new Date()); + event.setModifyAccount(account); + event.setStatus(false); + + eventMetaRepository.save(event); + } + } + + @Override + public EventAttributeMeta enableAttr(Long app, String name, Long account) { + String appkey = appRepository.findAppkeyById(app); + EventAttributeMeta attributeMeta = eventAttributeMetaRepository.findByAttribute(appkey, name); + + attributeMeta.setStatus(true); + EventAttributeMeta save = eventAttributeMetaRepository.save(attributeMeta); + return save; + } + + @Override + public EventAttributeMeta forbiddenAttr(Long app, String name, Long account) { + String appkey = appRepository.findAppkeyById(app); + EventAttributeMeta attributeMeta = eventAttributeMetaRepository.findByAttribute(appkey, name); + + if (attributeMeta == null) { + EventAttributeMeta attr = new EventAttributeMeta(); + attr.setAttribute(name); + attr.setAlias(name); + attr.setStatus(false); + attr.setAddStatsView(false); + attr.setAddStatsCondition(false); + attr.setAppkey(appkey); + attr.setModifyAccount(account); + attr.setModifyTime(new Date()); + + return eventAttributeMetaRepository.save(attr); + } else { + attributeMeta.setStatus(false); + attributeMeta.setModifyTime(new Date()); + attributeMeta.setModifyAccount(account); + + return eventAttributeMetaRepository.save(attributeMeta); + } + } + + /** + * 修改是否加入事件分析 + * modify by sunhao 20170504 + */ + @Override + public EventAttributeMeta updateEventStatsView(Long appId, Long account, String attrName, Boolean addFlag) { + + String appkey = appRepository.findAppkeyById(appId); + EventAttributeMeta attributeMeta = eventAttributeMetaRepository.findByAttribute(appkey, attrName); + + if (attributeMeta == null) { + EventAttributeMeta attr = new EventAttributeMeta(); + attr.setAttribute(attrName); + attr.setAlias(attrName); + attr.setStatus(true); + attr.setAddStatsView(true); + attr.setAddStatsCondition(false); + attr.setAppkey(appkey); + attr.setModifyAccount(account); + attr.setModifyTime(new Date()); + + return eventAttributeMetaRepository.save(attr); + } else { + attributeMeta.setAddStatsView(addFlag); + attributeMeta.setModifyTime(new Date()); + attributeMeta.setModifyAccount(account); + + return eventAttributeMetaRepository.save(attributeMeta); + } + } + + /** + * 修改是否加入事件分析条件 + */ + @Override + public EventAttributeMeta updateEventStatsCondition(Long appId, Long account, String attrName, Boolean addFlag) { + + String appkey = appRepository.findAppkeyById(appId); + EventAttributeMeta attributeMeta = eventAttributeMetaRepository.findByAttribute(appkey, attrName); + + if (attributeMeta == null) { + EventAttributeMeta attr = new EventAttributeMeta(); + attr.setAttribute(attrName); + attr.setAlias(attrName); + attr.setStatus(true); + attr.setAddStatsView(false); + attr.setAddStatsCondition(true); + attr.setAppkey(appkey); + attr.setModifyAccount(account); + attr.setModifyTime(new Date()); + + return eventAttributeMetaRepository.save(attr); + } else { + attributeMeta.setAddStatsCondition(addFlag); + attributeMeta.setModifyTime(new Date()); + attributeMeta.setModifyAccount(account); + + return eventAttributeMetaRepository.save(attributeMeta); + } + } + + public List<Event4Web> listAllNew(Long app, String names, String params) throws JSONException { + + List<Event4Web> resultList = new ArrayList<>(); + Map<String, Event4Web> valueEventMap = new HashMap<>(); + + String[] nameArr = names.split(","); + List<String> nameList = Arrays.asList(nameArr); + String appKey = appRepository.findAppkeyById(app); + List<Event> events = eventRepository.findByAppkeyAndNames(appKey, nameList); + List<EventMeta> eventMetaFalseList = eventMetaRepository.findByAppkeyAndStatusIsFalse(appKey); + List<EventMeta> eventMetaTrueList = eventMetaRepository.findByAppkeyAndStatusIsTrue(appKey); + List<EventAttributeMeta> attrMetaList = eventAttributeMetaRepository.findByAppkeyAndCondition(appKey); + Map<String, CommonParam> commonAttrMap = commonParamService.findAllByType("event"); + Map<String, CommonEvent> commonEventMap = commonParamService.findAllCommonEvent(); + + Map<String, EventMeta> eventMetaFalseMap = new HashMap<>(); + if (ValidateUtil.isValid(eventMetaFalseList)) { + for (EventMeta e : eventMetaFalseList) { + eventMetaFalseMap.put(e.getEventId(), e); + } + } + Map<String, EventMeta> eventMetaTrueMap = new HashMap<>(); + if (ValidateUtil.isValid(eventMetaTrueList)) { + for (EventMeta e : eventMetaTrueList) { + eventMetaTrueMap.put(e.getEventId(), e); + } + } + Map<String, EventAttributeMeta> attrMetaMap = new HashMap<>(); + if (ValidateUtil.isValid(attrMetaList)) { + for (EventAttributeMeta e : attrMetaList) { + attrMetaMap.put(e.getAttribute(), e); + } + } + + //筛选所有的通用事件 + Map<String, List<Event>> eventMap = new HashMap<>(); + if (ValidateUtil.isValid(events)) { + for (Event e : events) { + if ((commonEventMap.containsKey(e.getEventName()) || !eventMetaFalseMap.containsKey(e.getEventName())) && + (commonAttrMap.containsKey(e.getEventAttr()) || attrMetaMap.containsKey(e.getEventAttr()))) { + if (eventMap.containsKey(e.getEventName())) { + List<Event> list = eventMap.get(e.getEventName()); + list.add(e); + eventMap.put(e.getEventName(), list); + } else { + List<Event> list = new ArrayList<>(); + list.add(e); + eventMap.put(e.getEventName(), list); + } + } + } + } + + //事件显示属性 + List<EventAttr4Web> firstLevelAttr = new ArrayList<>(); + List<EventAttr4Web> secondLevelAttr = new ArrayList<>(); + setEventViewAttrList(firstLevelAttr, secondLevelAttr); + + Set<String> set = eventMap.keySet(); + if (ValidateUtil.isValid(set)) { + for (String eventName : set) { + List<EventAttr4Web> arrList = new ArrayList<>(); + Event4Web ew = new Event4Web(); + ew.setEventName(eventName); + ew.setFirstLevelAttr(firstLevelAttr); + ew.setProfiles(arrList); + ew.setSecondLevelAttr(new ArrayList<EventAttr4Web>()); + if (commonEventMap.containsKey(eventName)) { + CommonEvent commonEvent = commonEventMap.get(eventName); + ew.setEventNameAlias(commonEvent.getAlias()); + } else if (eventMetaTrueMap.containsKey(eventName)) { + EventMeta eventMeta = eventMetaTrueMap.get(eventName); + ew.setEventNameAlias(eventMeta.getAlias() == null ? eventName : eventMeta.getAlias()); + } else { + ew.setEventNameAlias(eventName); + } + + List<Event> list = eventMap.get(eventName); + for (Event e : list) { + String eventAttr = e.getEventAttr(); + if (commonAttrMap.containsKey(eventAttr)) { + CommonParam commonParam = commonAttrMap.get(eventAttr); + EventAttr4Web eaw = new EventAttr4Web(); + eaw.setAttr(eventAttr); + eaw.setAttrAlias(commonParam.getAlias()); + eaw.setSortId(commonParam.getSortId()); + eaw.setDataType(e.getDataType()); + //填充渠道 + if (EVENT_ATTR_CID.equals(eventAttr)) { + eaw.setWebType("string"); + } + List<EventAttr4Web> profiles = ew.getProfiles(); + profiles.add(eaw); + ew.setProfiles(profiles); + } else { + EventAttributeMeta meta = attrMetaMap.get(eventAttr); + + if (meta.getAddStatsCondition()) { + EventAttr4Web eaw = new EventAttr4Web(); + eaw.setAttr(eventAttr); + eaw.setDataType(e.getDataType()); + eaw.setAttrAlias(meta.getAlias() == null ? eventAttr : meta.getAlias()); + + List<EventAttr4Web> profiles = ew.getProfiles(); + profiles.add(eaw); + ew.setProfiles(profiles); + } + if (meta.getAddStatsView()) { + EventAttr4Web eaw = new EventAttr4Web(); + eaw.setAttr(eventAttr); + eaw.setDataType(e.getDataType()); + eaw.setType("custom"); + eaw.setAttrAlias(meta.getAlias() == null ? eventAttr : meta.getAlias()); + + List<EventAttr4Web> first = ew.getFirstLevelAttr(); + first.add(eaw); + ew.setFirstLevelAttr(first); + + ew.setSecondLevelAttr(secondLevelAttr); + } + } + + } + List<EventAttr4Web> profiles1 = ew.getProfiles(); + TreeMap<Integer, EventAttr4Web> map = new TreeMap<>(); + LinkedList<EventAttr4Web> common = new LinkedList<>(); + List<EventAttr4Web> temp = new ArrayList<>(); + if (ValidateUtil.isValid(profiles1)) { + for (EventAttr4Web e : profiles1) { + if (e.getSortId() != 0) { + map.put(e.getSortId(), e); + } else { + temp.add(e); + } + } + } + if (ValidateUtil.isValid(map)) { + for (Integer i : map.keySet()) { + common.add(map.get(i)); + } + } + common.addAll(temp); + ew.setProfiles(common); + valueEventMap.put(ew.getEventName(),ew); + + } + } + + Map<String, Map<String, Map<String, List>>> valMap = new HashMap<>(); + if (ValidateUtil.isValid(params)) { + JSONArray arr = new JSONArray(params); + if(ValidateUtil.isValid(arr)){ + for(int i =0 ; i< arr.length(); i++){ + String event = arr.getJSONObject(i).getString("event"); + JSONArray param = arr.getJSONObject(i).getJSONArray("param"); + if (ValidateUtil.isValid(param)) { + for (int j = 0; j < param.length(); j++) { + String attr = param.getString(j); + Map<String, List> map = listAllValue(app, event, attr); + if (valMap.containsKey(event)) { + Map<String, Map<String, List>> attrMap = valMap.get(event); + attrMap.put(attr, map); + valMap.put(event, attrMap); + } else { + Map<String, Map<String, List>> attrMap = new HashMap<>(); + attrMap.put(attr, map); + valMap.put(event, attrMap); + } + } + } + } + } + } + + if (ValidateUtil.isValid(valueEventMap)) { + for (String eventName : valueEventMap.keySet()) { + if (valMap.containsKey(eventName)) { + Map<String, Map<String, List>> map = valMap.get(eventName); + Event4Web event4Web = valueEventMap.get(eventName); + LinkedList<EventAttr4Web> profiles = (LinkedList<EventAttr4Web>) event4Web.getProfiles(); + LinkedList<EventAttr4Web> profilesNew = new LinkedList<>(); + if (ValidateUtil.isValid(profiles)) { + for (EventAttr4Web ea : profiles) { + if (map.containsKey(ea.getAttr())) { + Map<String, List> map1 = map.get(ea.getAttr()); + if (map1.containsKey("key")) { + ea.setKey(map1.get("key")); + } + ea.setValue(map1.get("value")); + profilesNew.add(ea); + } else { + profilesNew.add(ea); + } + } + } + event4Web.setProfiles(profilesNew); + resultList.add(event4Web); + } else { + resultList.add(valueEventMap.get(eventName)); + } + } + } + //没有属性 另行处理 + if (!ValidateUtil.isValid(resultList)) { + if (ValidateUtil.isValid(events)) { + List<String> name = new ArrayList<>(); + for (Event e : events) { + if(!name.contains(e.getEventName())){ + EventAttr4Web eaw = new EventAttr4Web(); + Event4Web ew = new Event4Web(); + ew.setEventName(e.getEventName()); + ew.setFirstLevelAttr(firstLevelAttr); + ew.setProfiles(new ArrayList<>()); + ew.setSecondLevelAttr(new ArrayList<EventAttr4Web>()); + if (commonEventMap.containsKey(e.getEventName())) { + CommonEvent commonEvent = commonEventMap.get(e.getEventName()); + ew.setEventNameAlias(commonEvent.getAlias()); + } else if (eventMetaTrueMap.containsKey(e.getEventName())) { + EventMeta eventMeta = eventMetaTrueMap.get(e.getEventName()); + ew.setEventNameAlias(eventMeta.getAlias() == null ? e.getEventName() : eventMeta.getAlias()); + } else { + ew.setEventNameAlias(e.getEventName()); + } + resultList.add(ew); + name.add(ew.getEventName()); + } + + } + } + + } + + return resultList; + } + + @Override + public Map<String, List> listAllValue(Long app, String eventName, String attrName) { + Map<String, List> result = new HashMap<>(); + + String appKey = appRepository.findAppkeyById(app); + Event event = eventRepository.findNumberAttrByEventAttr(appKey, attrName, eventName); + if (event != null) { + List<Event> byAppkey = eventRepository.findByAppkey(appKey); + + +// String key = appKey+","+eventName+","+attrName+","+event.getDataType()+","+(event.isCommon() ? "1" : "0"); + String key = String.format("%s,%s,%s,%s,%s", appKey, eventName, attrName, event.getDataType(), (event.isCommon() ? "1" : "0")); + Set<String> set = (Set<String>) EventRedisUtil.getInstance().get(key); + if (ValidateUtil.isValid(set)) { + List<String> list = new ArrayList<>(); + for (String s : set) { + list.add(s); + } + result.put("value", list); + } + } + return result; + } + + @Override + public Map<String, List> listAllValueByAttr(Long appId, String attrName) { + + Map<String, List> result = new LinkedHashMap<>(); + + if (!"usergroup".equals(attrName)) { + String appKey = appRepository.findAppkeyById(appId); + Event event = eventRepository.findOneEventByAttr(appKey, attrName); + List<Event> eventList = eventRepository.findAllEventByAppKey(appKey); + + String commonEvent = (event.isCommon() ? "1" : "0"); + + //生成redis的KEY LIST + List<String> keyList = new ArrayList<>(); + for (Event e : eventList) { + String key = String.format("%s,%s,%s,%s,%s", appKey, e.getEventName(), attrName, event.getDataType(), commonEvent); + keyList.add(key); + } + + //获取结果集 + Set<String> set = EventRedisUtil.getInstance().getZsetByKeys(keyList); + + if (!CollectionUtils.isEmpty(set)) { + + List<String> valueList = new ArrayList<>(set); + + result.put("value", valueList); + } + + } else { + + //查询用户群 + List<UserGroup> userGroupList = usergroupService.list(appId); + + List<Long> keyList = new ArrayList<>(); + List<String> valueList = new ArrayList<>(); + + for (UserGroup userGroup : userGroupList) { + keyList.add(userGroup.getId()); + valueList.add(userGroup.getName()); + } + + result.put("key", keyList); + result.put("value", valueList); + } + + + return result; + } + + @Override + public Map<String, List> listAllValueByAttrTop50(Long appId, String attrName) { + Map<String, List> stringListMap = listAllValueByAttr(appId, attrName); + LinkedHashMap<String, List> result = new LinkedHashMap<>(); + int i = 0; + for (String s : stringListMap.keySet()) { + result.put(s, stringListMap.get(s)); + if (i == 50) break; + i++; + } + return result; + } + + @Override + public Map<String, Map<String, List>> listAllValueByAttrs(Long app, String attrNames) { + Map<String, Map<String, List>> result = new HashMap<>(); + if (null != attrNames) { + String[] attrArr = attrNames.split(","); + for (int i = 0; i < attrArr.length; i++) { + Map<String, List> map = listAllValueByAttr(app, attrArr[i]); + result.put(attrArr[i], map); + } + } + + return result; + } + + + /** + * 获取显示属性一二级菜单 + * 填充传入参数firstLevelAttr,secondLevelAttr + * created by sunhao 2017-04-19 + */ + private void setEventViewAttrList(List<EventAttr4Web> firstLevelAttr, List<EventAttr4Web> secondLevelAttr) { + + //公共属性 + List<EventViewAttr> eventViewAttrList = eventViewAttrRepository.findEventViewAttr(); + //分离第一二级属性 + for (EventViewAttr eventViewAttr : eventViewAttrList) { + + EventAttr4Web eventAttr4Web = new EventAttr4Web(); + + eventAttr4Web.setAttr(eventViewAttr.getViewAttr()); + eventAttr4Web.setAttrAlias(eventViewAttr.getViewAttrName()); + eventAttr4Web.setDataType(eventViewAttr.getAttrType()); + + //默认属性 + if (VIEW_ATTR_DEFAULT == eventViewAttr.getAttrLevel()) { + + eventAttr4Web.setType(ATTR_TYPE_DEFAULT); + firstLevelAttr.add(eventAttr4Web); + + } else if (VIEW_ATTR_CUSTOM == eventViewAttr.getAttrLevel()) { + + secondLevelAttr.add(eventAttr4Web); + } + } + } + + + @Override + public List<Dimension4Web> listAllAttr(Long app) { + List<Dimension4Web> dimension4WebList = new ArrayList<>(); + Map<String, Event> eventAttrMap = new HashMap<>(); + + String appKey = appRepository.findAppkeyById(app); + List<Event> eventList = eventRepository.listCommonByApp(appKey); + List<CommonParam> commonParamList = this.commonParamService.listAllByType(null); + + if (ValidateUtil.isValid(eventList)) { + for (Event event : eventList) { + if (!eventAttrMap.containsKey(event.getEventAttr())) { + eventAttrMap.put(event.getEventAttr(), event); + } + } + } + + if (ValidateUtil.isValid(commonParamList) && ValidateUtil.isValid(eventAttrMap)) { + dimension4WebList = buildDimensionForWebAllAttr(eventAttrMap, commonParamList, dimension4WebList, app); + } + + return dimension4WebList; + } + + /** + * 获取分类维度(通用事件属性) + */ + @SuppressWarnings("deprecation") + @Override + public List<Dimension4Web> listValues(Long app) { + + List<Dimension4Web> dimension4WebList = new ArrayList<>(); + Map<String, Event> eventAttrMap = new HashMap<>(); + + String appKey = appRepository.findAppkeyById(app); + List<Event> eventList = eventRepository.listCommonByApp(appKey); + List<CommonParam> commonParamList = this.commonParamService.listAllByType("event"); + + //构建eventAttrMap,聚合value + if (ValidateUtil.isValid(eventList)) { + for (Event event : eventList) { + + if (!eventAttrMap.containsKey(event.getEventAttr())) { + + eventAttrMap.put(event.getEventAttr(), event); + + } + } + } + + //对属性排序 + if (ValidateUtil.isValid(commonParamList) && ValidateUtil.isValid(eventAttrMap)) { + + //生成结果jason + dimension4WebList = buildDimensionForWeb(eventAttrMap, commonParamList, dimension4WebList, app); + } + + return dimension4WebList; + } + + @Override + public List<EventAttr4Web> listCommonProperties(Long app, String propertiesType) { + + List<EventAttr4Web> commonProperties = new ArrayList<>(); + + Map<String, Event> eventAttrMap = new HashMap<>(); + + String appKey = appRepository.findAppkeyById(app); + List<Event> eventList = eventRepository.listCommonByApp(appKey); + List<CommonParam> commonParamList = this.commonParamService.listAllByType(propertiesType); + + //构建eventAttrMap,聚合value + if (ValidateUtil.isValid(eventList)) { + + for (Event event : eventList) { + + if (!eventAttrMap.containsKey(event.getEventAttr())) { + + eventAttrMap.put(event.getEventAttr(), event); + + } + } + } + + //构建通用属性 + if (ValidateUtil.isValid(commonParamList) && ValidateUtil.isValid(eventAttrMap)) { + commonProperties = buildEventAttrForWeb(eventAttrMap, commonParamList); + } + + return commonProperties; + } + + @Override + public List<CommonParam> listCommonGroupProperties() { + return this.commonParamService.listAllByType(null); + } + + /** + * 通过event名称和appkey获取attribute meta list + * + * @param eventName + * @param appId + * @return + */ + @Override + public List<EventAttr4Web> listAllEventAttribute(String eventName, Long appId) { + + Map<String, EventAttr4Web> eventAttr4WebMap = new HashMap<>(); + + List<Event> eventAttrList = new ArrayList<>(); + + String appKey = appRepository.findAppkeyById(appId); + + if (eventName.startsWith("vir_")) { + + List<String> eventList = virtualEventService.findVirtualEventList(eventName); + eventAttrList = eventRepository.findEventAliasByEvent(appKey, eventList); + + } else { + + eventAttrList = this.eventRepository.findByEventName(appKey, eventName); + } + + if (!CollectionUtils.isEmpty(eventAttrList)) { + + List<EventAttributeMeta> attrMetaList = eventAttributeMetaRepository.findByAppkeyAndCondition(appKey); + + Map<String, EventAttributeMeta> attributeMetaMap = Maps.uniqueIndex(attrMetaList, new Function<EventAttributeMeta, String>() { + @Override + public String apply(EventAttributeMeta eventAttributeMeta) { + return eventAttributeMeta.getAttribute(); + } + }); + + Map<String, CommonParam> commonAttrMap = commonParamService.findAllByType("event"); + int m = 0; + int n = 20; + + for (Event event : eventAttrList) { + + String attr = event.getEventAttr(); + + //属性排重 + if (!eventAttr4WebMap.containsKey(attr)) { + + EventAttr4Web eventAttr4Web = new EventAttr4Web(); + eventAttr4Web.setAttr(attr); + eventAttr4Web.setDataType(event.getDataType()); + + //属性别名 + String attrAlias = ""; + int sortId = 0; + if (event.isCommon()) { + attrAlias = commonAttrMap.containsKey(attr) ? commonAttrMap.get(attr).getAlias() : attrAlias; + sortId = commonAttrMap.containsKey(attr) ? commonAttrMap.get(attr).getSortId() : m; + m++; + } else { + attrAlias = attributeMetaMap.containsKey(attr) ? attributeMetaMap.get(attr).getAlias() : attr; + sortId = n; + n++; + } + + eventAttr4Web.setAttrAlias(StringUtils.isEmpty(attrAlias) ? attr : attrAlias); + eventAttr4Web.setSortId(sortId); + + //CID特殊处理 + if (EVENT_ATTR_CID.equals(attr)) { + eventAttr4Web.setWebType("string"); + } + + eventAttr4WebMap.put(attr, eventAttr4Web); + } + + } + } + + return Lists.newArrayList(eventAttr4WebMap.values()); + } + + @Override + public List<ComplicatedParam> findAllComplicatedPatram() { + return complicatedParamRepository.findAllParam(); + } + + private List<EventAttr4Web> buildEventAttrForWeb(Map<String, Event> eventAttrMap, List<CommonParam> commonParamList) { + + List<EventAttr4Web> eventAttr4WebList = new ArrayList<>(); + + //用户群 + EventAttr4Web userGroupAttr = new EventAttr4Web(); + userGroupAttr.setAttr("usergroup"); + userGroupAttr.setAttrAlias("用户分群"); + userGroupAttr.setDataType("number"); + userGroupAttr.setWebType("string"); + userGroupAttr.setAttrAlias("usergroup"); + + eventAttr4WebList.add(userGroupAttr); + + //通用属性 + for (CommonParam commonParam : commonParamList) { + + EventAttr4Web eventAttr4Web = new EventAttr4Web(); + + eventAttr4Web.setAttr(commonParam.getParam()); + eventAttr4Web.setAttrAlias(commonParam.getAlias()); + eventAttr4Web.setType(commonParam.getType()); + + Event eve = eventAttrMap.get(commonParam.getParam()); + if (eve != null) { + //数据类型 + eventAttr4Web.setDataType(eve.getDataType()); + } + + //填充渠道 + if (EVENT_ATTR_CID.equals(commonParam.getParam())) { + eventAttr4Web.setWebType("string"); + } + + eventAttr4WebList.add(eventAttr4Web); + } + + return eventAttr4WebList; + } + + /** + * 生成分类维度页面显示列表 + */ + private List<Dimension4Web> buildDimensionForWeb(Map<String, Event> eventAttrMap, List<CommonParam> commonParamList, + List<Dimension4Web> dimension4WebList, Long app) { + + for (CommonParam commonParam : commonParamList) { + + Dimension4Web dimension4Web = new Dimension4Web(); + + //替换通用事件属性的名称 + dimension4Web.setName(commonParam.getAlias()); + dimension4Web.setDimensionType(commonParam.getDimension()); + + Event eve = eventAttrMap.get(commonParam.getParam()); + if (eve != null) { + //数据类型 + dimension4Web.setType(eve.getDataType()); + } + + //设置ID和属性值列表 + dimension4Web.setId(commonParam.getParam()); + + dimension4WebList.add(dimension4Web); + } + List<UserGroup> list = usergroupService.list(app); + if (!list.isEmpty()) { + Dimension4Web dimension4Web = new Dimension4Web(); + dimension4Web.setId("usergroup"); + List<Long> keys = new ArrayList<>(); + List<String> values = new ArrayList<>(); + for (UserGroup ug : list) { + keys.add(ug.getId()); + values.add(ug.getName()); + } + + dimension4Web.setKey(keys); + dimension4Web.setValue(values); + dimension4Web.setName("用户分群"); + dimension4Web.setType("number"); + dimension4Web.setDimensionType("usergroup"); + dimension4WebList.add(0, dimension4Web); + } + + return dimension4WebList; + } + + /** + * @param eventAttrMap + * @param commonParamList + * @param dimension4WebList + * @param app + * @return 漏斗转化列出所有的事件通用属性和用户通用属性以及用户分群 + */ + private List<Dimension4Web> buildDimensionForWebAllAttr(Map<String, Event> eventAttrMap, List<CommonParam> commonParamList, + List<Dimension4Web> dimension4WebList, Long app) { + + for (CommonParam commonParam : commonParamList) { + + Dimension4Web dimension4Web = new Dimension4Web(); + dimension4Web.setEventType(commonParam.getType()); + dimension4Web.setSortId(commonParam.getSortId()); + dimension4Web.setName(commonParam.getAlias()); + dimension4Web.setDimensionType(commonParam.getDimension()); + + //设置数据类型 + if ("event".equals(commonParam.getType())) { + Event eve = eventAttrMap.get(commonParam.getParam()); + if (eve != null) { + dimension4Web.setType(eve.getDataType()); + } + } else { + dimension4Web.setType(commonParam.getDataType()); + } + //设置ID和属性值列表 + dimension4Web.setId(commonParam.getParam()); + + dimension4WebList.add(dimension4Web); + } + List<UserGroup> list = usergroupService.list(app); + if (!list.isEmpty()) { + List<Long> keys = new ArrayList<>(); + List<String> values = new ArrayList<>(); + Dimension4Web dimension4Web = new Dimension4Web(); + dimension4Web.setId("usergroup"); + for (UserGroup ug : list) { + keys.add(ug.getId()); + values.add(ug.getName()); + } + dimension4Web.setKey(keys); + dimension4Web.setValue(values); + dimension4Web.setName("用户分群"); + dimension4Web.setType("number"); + dimension4Web.setDimensionType("usergroup"); + dimension4WebList.add(0, dimension4Web); + } + return dimension4WebList; + } + + + /** + * _campaignid 获取活动名称列表 + * add by sunhao 2017-04-06 + *//* + private List<String> getCampaignNameList(List<String> campaignKeyList) { + + List<String> nameList = new ArrayList<>(); + + Map<String, Campaign> campaignMap = new HashMap<>(); + + List<Campaign> campaignList = campaignRepository.findAllByCampaignId(campaignKeyList); + + campaignList.add(new Campaign("_default_", "自然量")); + + if (!CollectionUtils.isEmpty(campaignList)) { + campaignMap = Maps.uniqueIndex(campaignList, new Function<Campaign, String>() { + @Override + public String apply(Campaign campaign) { + return campaign.getCampaignid(); + } + }); + } + + //填充values + for (String campaignid : campaignKeyList) { + + if (campaignMap.containsKey(campaignid)) { + nameList.add(campaignMap.get(campaignid).getName()); + } else { + nameList.add(campaignid); + } + } + + return nameList; + }*/ + + + + /** + * 查出所有的时间和属性 + */ + @Override + public Map<String, List<String>> findAllEventWithAttr(Long appId) { + + Map<String, List<String>> resultMap = new HashMap<>(); + + String appKey = appRepository.findAppkeyById(appId); + List<Event> events = eventRepository.findByAppkey(appKey); + List<EventMeta> eventMetaFalseList = eventMetaRepository.findByAppkeyAndStatusIsFalse(appKey); + List<EventAttributeMeta> attrMetaList = eventAttributeMetaRepository.findByAppkeyAndCondition(appKey); + Map<String, CommonParam> commonAttrMap = commonParamService.findAllByType("event"); + + Map<String, EventMeta> eventMetaFalseMap = new HashMap<>(); + if (ValidateUtil.isValid(eventMetaFalseList)) { + for (EventMeta e : eventMetaFalseList) { + eventMetaFalseMap.put(e.getEventId(), e); + } + } + + Map<String, EventAttributeMeta> attrMetaMap = new HashMap<>(); + if (ValidateUtil.isValid(attrMetaList)) { + for (EventAttributeMeta e : attrMetaList) { + attrMetaMap.put(e.getAttribute(), e); + } + } + + if (ValidateUtil.isValid(events)) { + for (Event e : events) { + String event = e.getEventName(); + String attr = e.getEventAttr(); + if (!eventMetaFalseMap.containsKey(event)) { + if (attrMetaMap.containsKey(attr) || commonAttrMap.containsKey(attr)) { + if (resultMap.containsKey(event)) { + List<String> list = resultMap.get(event); + list.add(attr); + resultMap.put(event, list); + } else { + List<String> list = new ArrayList<>(); + list.add(attr); + resultMap.put(event, list); + } + } + } + + } + } + + return resultMap; + } + + + /** + * 查询所有的事件以及名字,排重后 + */ + @Override + public List<Event4Web> listAllEvent(Long app) { + + List<Event4Web> result = new ArrayList<>(); + + List<Event4Web> event4Webs = listEvent(app); + if (ValidateUtil.isValid(event4Webs)) { + for (Event4Web e : event4Webs) { + if (e.getStatus()) { + result.add(e); + } + } + } + return result; + } + + @Override + public List<Event4Web> listAllEventToCallback(Long app) { + List<Event4Web> result = new ArrayList<>(); + + List<Event4Web> event4Webs = listEvent(app); + if (ValidateUtil.isValid(event4Webs)) { + for (Event4Web e : event4Webs) { + if (e.getStatus() && !e.getEventName().equals("reged") + && !e.getEventName().equals("loggedin") && !e.getEventName().equals("payment")) { + result.add(e); + } + } + } + return result; + } + + private Event4Web eventMetaTo4Web(EventMeta e) { + Event4Web ew = new Event4Web(); + ew.setCommon(false); + ew.setEventName(e.getEventId()); + ew.setEventNameAlias(e.getAlias() == null ? e.getEventId() : e.getAlias()); + ew.setStatus(e.getStatus()); + + return ew; + } + + private Event4Web eventTo4Web(Event e) { + Event4Web ew = new Event4Web(); + ew.setCommon(false); + ew.setEventName(e.getEventName()); + ew.setEventNameAlias(e.getEventName()); + ew.setStatus(true); + return ew; + } + + public Event4Web commonEventTo4Web(CommonEvent e) { + Event4Web ew = new Event4Web(); + ew.setCommon(true); + ew.setEventName(e.getEvent()); + ew.setEventNameAlias(e.getAlias()); + ew.setStatus(true); + return ew; + } +} diff --git a/src/main/java/com/reyun/service/impl/EventStatsServiceImpl.java b/src/main/java/com/reyun/service/impl/EventStatsServiceImpl.java new file mode 100644 index 0000000..0a9b217 --- /dev/null +++ b/src/main/java/com/reyun/service/impl/EventStatsServiceImpl.java @@ -0,0 +1,687 @@ +package com.reyun.service.impl; + +import com.google.common.base.Function; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.reyun.dic.CustomMenuType; +import com.reyun.dic.ReportEnumType; +import com.reyun.dic.RoleEnumType; +import com.reyun.model.*; +import com.reyun.repository.*; +import com.reyun.service.*; +import com.reyun.taskexecute.ReportCallable; +import com.reyun.util.*; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +/** + * Created by sunhao on 17/4/10. + * description:时间分析service + */ +@Service +public class EventStatsServiceImpl implements EventStatsService { + + private Logger logger = LoggerFactory.getLogger(EventStatsServiceImpl.class); + + @Autowired + EventService eventService; + @Autowired + EventStatsRepository eventStatsRepository; + @Autowired + EventViewAttrRepository eventViewAttrRepository; + @Autowired + EventRepository eventRepository; + @Autowired + AppRepository appRepository; + @Autowired + CustomMenuTemplateRepository customMenuTemplateRepository; + @Autowired + CommonParamService commonParamService; + @Autowired + UserGroupService userGroupService; + @Autowired + ConfigParamService configparamService; + @Autowired + AccountRepository accountRepository; + @Autowired + AuthService authService; + @Autowired + ReportService reportService; + + //分类维度 用户群 + private final static String DIMENSION_FIELD = "attr"; + private final static String DIMENSION_VALUES = "values"; + + //SQL参数 + //开始时间 + private final static String SQL_START_DATE = "$startData"; + //结束时间 + private final static String SQL_END_DATE = "$endDate"; + //select字段 + private final static String SQL_SELECT_FIELD = "$selectFieldSql"; + //group字段 + private final static String SQL_GROUP_FIELD = "$groupFieldSql"; + //条件字段 + private final static String SQL_WHERE_FIELD = "$whereFieldSql"; + + private final static String SQL_PARTICLE_DATE = "$selectDate"; + + //按照设备,按照账户 + private final static String SQL_XWHO = "xwho"; + private final static String SQL_DEVICE_ID = "_deviceid"; + + //显示粒度 + private final static String VIEW_PARTICLE_DAY = "day"; + private final static String VIEW_PARTICLE_WEEK = "week"; + private final static String VIEW_PARTICLE_MONTH = "month"; + + //查询URI + private final static String URI_REPORT_BY_SQL = "/api/trackingio/bysql"; + + private final static String DIMENSION_TOTAL = "total"; + private final static String DIMENSION_USER_GROUP = "usergroup"; + private final static String SELECT_FIELD_TOTAL = ", '整体' as total"; + + private final static String REPORT_CALLABLE_TYPE_EVENT = "eventstats"; + + + @Override + public boolean checkEventStatsName(String eventStatsName, Long appId) { + + EventStats eventStats = eventStatsRepository.findEventStatsByName(eventStatsName, appId); + + return eventStats == null; + } + + /** + * 创建事件分析 + * 参数校验在controller层 + */ + @Override + public EventStats createEventStats(EventStats eventStats) { + + //生成查询sql + String appKey = appRepository.findAppkeyById(eventStats.getApp()); + + String querySql = SqlUtil.generateEventStatsSqlTemplate(eventStats.getEventCondition(), appKey, getEventViewAttrMap()); + + eventStats.setQuerySql(querySql); + + //校验生成的SQL + if (StringUtil.isEmpty(querySql)) { + + return null; + + } else { + + return eventStatsRepository.save(eventStats); + } + } + + /** + * 修改事件分析,修改event_condition和query_sql + * 参数校验在controller层 + */ + @Override + public int updateEventStats(EventStats eventStats, Long accountId) { + + EventStats findEventStats = eventStatsRepository.findEventStats(eventStats.getId()); + + //生成SQL + String appKey = appRepository.findAppkeyById(findEventStats.getApp()); + String querySql = SqlUtil.generateEventStatsSqlTemplate(eventStats.getEventCondition(), appKey, getEventViewAttrMap()); + + //校验生成的SQL + if (StringUtil.isEmpty(querySql)) { + + return 0; + + } else { + + return eventStatsRepository.updateEventStats(eventStats.getEventName(), eventStats.getEventCondition(), + querySql, accountId, findEventStats.getId(), new Date()); + } + } + + /** + * 删除事件分析 + */ + @Override + public int deleteEventStats(Long eventStatsId, Long accountId) { + + //查看事件是否存在看单之中,如果存在则删除。 + List<Long> templateList = customMenuTemplateRepository.findTemplateByOriginal(eventStatsId, CustomMenuType.EVENT_STATS.getKey()); + if (!CollectionUtils.isEmpty(templateList)) { + customMenuTemplateRepository.deleteTemplateByIds(accountId, templateList); + } + + //删除事件 + return eventStatsRepository.deleteEventStats(accountId, eventStatsId, new Date()); + } + + /** + * 查询所有事件 + */ + @Override + public List<EventStats> findAllEventStats(Long accountId, Long appId) { + return eventStatsRepository.findAll(appId, false); + } + + /** + * 查询事件分析数据 + * 参数校验在controller层 + */ + @Override + public Map<String, List> queryEventStatsData(Long appId, Long accountId, String startDate, String endDate, String groupCondition, + boolean isDevice, String eventCondition, String viewFlag) { + + String appKey = appRepository.findAppkeyById(appId); + Map<String, EventViewAttr> eventViewAttrMap = getEventViewAttrMap(); + String querySql = SqlUtil.generateEventStatsSqlTemplate(eventCondition, appKey, eventViewAttrMap); + + //查询sql nul + if (StringUtil.isEmpty(querySql)) { + return null; + } + + querySql = querySql.replace("$campaign",""); + //默认聚合字段 + String groupField = "total"; + + //查询时间粒度 + querySql = replaceQueryParticleDate(querySql, startDate, endDate, viewFlag); + + if (!StringUtil.isEmpty(groupCondition)) { + + JSONObject fieldGroupObject = JSONObject.fromObject(groupCondition); + JSONArray values = fieldGroupObject.getJSONArray(DIMENSION_VALUES); + + groupField = fieldGroupObject.getString(DIMENSION_FIELD); + + if (DIMENSION_USER_GROUP.equals(groupField)) { + //用户群分组对比 + return getUserGroupDimensionResponse(querySql, values, isDevice, appId, appKey, accountId, startDate, endDate, viewFlag); + + } else { + //其他用户群对比 + return getOtherDimensionResponse(querySql, groupField, isDevice, appId, appKey, accountId, startDate, endDate, viewFlag); + } + } + + //非维度对比查询 + return getTotalResponse(appKey, querySql, groupField, isDevice, appId, accountId, startDate, endDate, viewFlag); + + } + + /** + * 获取整体的查询结果 + * created by sunhao 20170515 + */ + private Map<String, List> getTotalResponse(String appKey, String querySql, String groupField, boolean isDevice, Long appId, + Long accountId, String startDate, String endDate, String viewFlag) { + + querySql = replaceQuerySql(querySql, SELECT_FIELD_TOTAL, "", "", isDevice); + + Map<String, String> conditions = new HashMap<>(); + conditions.put("sql", querySql); + conditions.put("dbtype", "presto"); + conditions.put("datatype", ReportEnumType.LIST.getCode()); + conditions.put("reportname", "eventstats"); + conditions.put("appid", appKey); + + + Map<String, List> responseJson = reportService.reportBySql(conditions); + + + return formatEventStatsReportData(responseJson, groupField, appId, accountId, startDate, endDate, viewFlag); + + } + + /** + * 获取整体和其他维度对比查询结果 + * created by sunhao 20170515 + */ + private Map<String, List> getOtherDimensionResponse(String querySql, String groupField, boolean isDevice, Long appId,String appKey, + Long accountId, String startDate, String endDate, String viewFlag) { + + String totalSelect = SELECT_FIELD_TOTAL; + String dimensionSelect = getFieldSelectSql(groupField); + String dimensionGroup = getFieldSelectSql(groupField); + //整体 + String querySqlTotal = replaceQuerySql(querySql, totalSelect, "", "", isDevice); + //维度 + String querySqlDimension = replaceQuerySql(querySql, dimensionSelect, dimensionGroup, "", isDevice); + + //demo账号处理 TODO + + return getTotalAndDimensionResult(querySqlTotal, querySqlDimension, groupField, startDate, endDate, appId, appKey, accountId, viewFlag, false); + } + + /** + * 获取整体和用户群对比查询的结果 + * created by sunhao 20170515 + */ + private Map<String, List> getUserGroupDimensionResponse(String querySql, JSONArray values, boolean isDevice, Long appId,String appKey, + Long accountId, String startDate, String endDate, String viewFlag) { + + String userGroupValue = values.getString(0); + String totalSelect = SELECT_FIELD_TOTAL; + String dimensionSelect = ",'" + userGroupValue + "' as " + DIMENSION_USER_GROUP; + String dimensionWhere = getUserGroupWhereSql(values.getString(0)); + + //整体 + String querySqlTotal = replaceQuerySql(querySql, totalSelect, "", "", isDevice); + //用户群维度 + String querySqlUser = replaceQuerySql(querySql, dimensionSelect, "", dimensionWhere, isDevice); + + //demo账号处理 TODO + + return getTotalAndDimensionResult(querySqlTotal, querySqlUser, values.getString(0), startDate, endDate, appId, appKey, accountId, viewFlag, true); + } + + /** + * 获取整体和分类维度合并的结果 + * created by sunhao 20170515 + */ + private Map<String, List> getTotalAndDimensionResult(String querySqlTotal, String querySqlDimension, String groupField, String startDate, + String endDate, Long appId, String appKey, Long accountId, String viewFlag, boolean isUserGroup) { + + Map<String, List> result = new HashMap<>(); + + //创建一个线程池 + ExecutorService pool = Executors.newFixedThreadPool(2); + + try { + //创建两个有返回值的任务 + ReportCallable callableTotal = new ReportCallable(REPORT_CALLABLE_TYPE_EVENT, querySqlTotal, DIMENSION_TOTAL, + startDate, endDate, viewFlag, appId, appKey, accountId, null); + ReportCallable callableDimension = new ReportCallable(REPORT_CALLABLE_TYPE_EVENT, querySqlDimension, isUserGroup ? DIMENSION_USER_GROUP : groupField, + startDate, endDate, viewFlag, appId, appKey, accountId, groupField); + //执行任务并获取Future对象 + Future<Map<String, List>> futureTotal = pool.submit(callableTotal); + Future<Map<String, List>> futureDimension = pool.submit(callableDimension); + Map<String, List> resultTotal = futureTotal.get(); + Map<String, List> resultDimension = futureDimension.get(); + + //聚合两个结果 + if (isUserGroup) { + + result = combineResultOfUserGroup(resultTotal, resultDimension, groupField); + + } else { + + result = combineResultOfOtherDimension(resultTotal, resultDimension); + } + + } catch (Exception e) { + e.printStackTrace(); + } finally { + pool.shutdown(); + } + + return result; + } + + /** + * 聚合其他维度对比数据 + * 将resultDimension(多个维度的数据)的数据聚合到resultTotal中 + */ + private Map<String, List> combineResultOfOtherDimension(Map<String, List> resultTotal, Map<String, List> resultDimension){ + + List<?> valueListTotal = resultTotal.get("val"); + List<?> valueListUser = resultDimension.get("val"); + List<String> columnKeyList = resultDimension.get("columnkey"); + List<String> nameList = resultDimension.get("name"); + + if (!CollectionUtils.isEmpty(valueListUser) && !CollectionUtils.isEmpty(columnKeyList)) { + + columnKeyList.remove(0); + nameList.remove(0); + + for (String columnKey : columnKeyList) { + for (int i = 0; i < resultTotal.get("val").size(); i++) { + Map<String, Object> valueMap = (Map<String, Object>) valueListTotal.get(i); + valueMap.put(columnKey, ((Map<String, Object>) valueListUser.get(i)).get(columnKey)); + } + } + } + + resultTotal.get("name").addAll(nameList); + resultTotal.get("columnkey").addAll(columnKeyList); + + return resultTotal; + } + + /** + * 聚合用户群对比查询结果 + * 将resultUser(单维度)数据聚合到resultTotal + */ + private Map<String, List> combineResultOfUserGroup(Map<String, List> resultTotal, Map<String, List> resultUser, String userGroupValue) { + + UserGroup userGroup = userGroupService.findById(Long.parseLong(userGroupValue)); + + List<?> valueListTotal = resultTotal.get("val"); + List<?> valueListUser = resultUser.get("val"); + + if (CollectionUtils.isEmpty(valueListUser)) { + + for (int i = 0; i < resultTotal.get("val").size(); i++) { + Map<String, Object> valueMap = (Map<String, Object>) valueListTotal.get(i); + valueMap.put(userGroupValue, 0); + } + + } else { + + for (int i = 0; i < resultTotal.get("val").size(); i++) { + Map<String, Object> valueMap = (Map<String, Object>) valueListTotal.get(i); + valueMap.put(userGroupValue, ((Map<String, Object>) valueListUser.get(i)).get(userGroupValue)); + } + } + + resultTotal.get("name").add(userGroup.getName()); + resultTotal.get("columnkey").add(userGroupValue); + + return resultTotal; + } + + /** + * 替换SQL中的参数,对于关系如下 + * selectField:SQL_SELECT_FIELD + * groupField:SQL_GROUP_FIELD + * whereField:SQL_WHERE_FIELD + * created by sunhao 20170515 + */ + private String replaceQuerySql(String querySql, String selectField, String groupField, String whereField, boolean isDevice) { + + querySql = querySql.replace(SQL_SELECT_FIELD, selectField); + querySql = querySql.replace(SQL_GROUP_FIELD, groupField); + querySql = querySql.replace(SQL_WHERE_FIELD, whereField); + querySql = querySql.replaceAll(SQL_XWHO, isDevice ? SQL_DEVICE_ID : SQL_XWHO); + + return querySql; + } + + /** + * 获取用户群分组条件SQL + * created by sunhao 20170515 + */ + private String getUserGroupWhereSql(String userGroupValue) { + + String userGroupSql = " and xwho in (select objectid as xwho from " + Constant.usergroupTable + " where id = '%' and objecttype = 'xwho') "; + + return userGroupSql.replace("%", userGroupValue); + } + + /** + * 替换查询粒度 + */ + private String replaceQueryParticleDate(String querySql, String startDate, String endDate, String viewFlag) { + + try { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + + Date start = simpleDateFormat.parse(startDate); + Date end = simpleDateFormat.parse(endDate); + + switch (viewFlag) { + + case VIEW_PARTICLE_DAY: + querySql = querySql.replace(SQL_START_DATE, startDate); + querySql = querySql.replace(SQL_END_DATE, endDate); + querySql = querySql.replace(SQL_PARTICLE_DATE, " ds "); + break; + case VIEW_PARTICLE_WEEK: + querySql = querySql.replace(SQL_START_DATE, simpleDateFormat.format(DateUtil.getFirstDayOfWeek(start))); + querySql = querySql.replace(SQL_END_DATE, simpleDateFormat.format(DateUtil.getLastDayOfWeek(end))); + querySql = querySql.replace(SQL_PARTICLE_DATE, " date_format(date_parse(ds, '%Y-%m-%d'), '%Y%v') "); + break; + case VIEW_PARTICLE_MONTH: + querySql = querySql.replace(SQL_START_DATE, DateUtil.getFirstDayOfMonth(start)); + querySql = querySql.replace(SQL_END_DATE, DateUtil.getLastDayOfMonth(end)); + querySql = querySql.replace(SQL_PARTICLE_DATE, " date_format(date_parse(ds, '%Y-%m-%d'), '%Y%m') "); + break; + default: + querySql = querySql.replace(SQL_START_DATE, startDate); + querySql = querySql.replace(SQL_END_DATE, endDate); + querySql = querySql.replace(SQL_PARTICLE_DATE, " ds "); + break; + } + + } catch (ParseException e) { + logger.error(e.getMessage()); + } + + return querySql; + } + + /** + * 获取默认显示属性 + */ + private Map<String, EventViewAttr> getEventViewAttrMap() { + + List<EventViewAttr> eventViewAttrList = eventViewAttrRepository.findEventViewAttr(); + + return Maps.uniqueIndex(eventViewAttrList, new Function<EventViewAttr, String>() { + @Override + public String apply(EventViewAttr eventViewAttr) { + return eventViewAttr.getViewAttr(); + } + }); + } + + /** + * 生成带有,的字段 ,field + */ + private String getFieldSelectSql(String field) { + return ", " + field; + } + + /** + * 格式化sql查询出的数据 + */ + @Override + public Map<String, List> formatEventStatsReportData(Map<String, List> responseResult, String groupField, Long appId, Long accountId, + String startDate, String endDate, String viewType) { + + Map<String, List> result = new HashMap<>(); + + //获取时间范围内按照时间粒度的所有日期 + Map<String, String> dateStringMap = getDateMapByViewFlag(startDate, endDate, viewType); + + Map<String, JSONObject> valueMap = new HashMap<>(); + List<Map<String, Object>> valueResult = new ArrayList<>(); + List<String> nameList = Lists.newArrayList(); + List<String> columnKeyList = new ArrayList<>(); + List<String> keyList = new ArrayList<>(); + List<String> dateColumnList = new ArrayList<>(); + + try { + + JSONObject responseObject = JSONObject.fromObject(responseResult); + Object responseValueObject = responseObject.get("val"); + + if (null != responseValueObject && !CollectionUtils.isEmpty((JSONArray) responseValueObject)) { + + JSONArray valueArray = (JSONArray) responseValueObject; + + //获取日期列表 + dateColumnList.addAll(dateStringMap.keySet()); + + //筛选出所有的group内容 + for (int i = 0; i < valueArray.size(); i++) { + + JSONObject valueObject = valueArray.getJSONObject(i); + String date = valueObject.getString("ds"); + if (date.length() == 10 && viewType.equals("week")) { + date = DateUtil.getYYYYWW(date); + } else if (date.length() == 10 && viewType.equals("month")) { + date = DateUtil.getYYYYMM(date); + } + + String columnKey = valueObject.getString(groupField); + if (!columnKeyList.contains(columnKey)) { + + columnKeyList.add(columnKey); + } + + valueMap.put(date + columnKey, valueObject); + } + + //行转列 + for (String date : dateColumnList) { + + Map<String, Object> rowValue = new HashMap<>(); + + rowValue.put("ds", dateStringMap.get(date)); + + for (String columnKey : columnKeyList) { + + JSONObject value = valueMap.get(date + columnKey); + rowValue.put(columnKey, null != value ? value.get("sumdata") : 0); + } + + valueResult.add(rowValue); + } + + //排序,降序 + Collections.sort(valueResult, new Comparator<Map<String, Object>>() { + + public int compare(Map<String, Object> o1, Map<String, Object> o2) { + + return o2.get("ds").toString().compareTo(o1.get("ds").toString()); + } + }); + + //转换渠道和活动名称 + nameList = getColumnNameList(appId, accountId, columnKeyList, groupField); + + //处理列名 + keyList = getKeyList(new ArrayList<>(dateStringMap.values())); + columnKeyList.add(0, "ds"); + + } else if (DIMENSION_TOTAL.equals(groupField)) { + //整体的全零处理 + columnKeyList.add("ds"); + columnKeyList.add(groupField); + + nameList.add("日期"); + nameList.add("整体"); + + keyList = getKeyList(new ArrayList<>(dateStringMap.values())); + + //数据补零 + for (String date : dateStringMap.values()) { + Map<String, Object> rowValue = new HashMap<>(); + rowValue.put("ds", date); + rowValue.put(groupField,0); + valueResult.add(rowValue); + } + + //排序,降序 + Collections.sort(valueResult, new Comparator<Map<String, Object>>() { + + public int compare(Map<String, Object> o1, Map<String, Object> o2) { + + return o2.get("ds").toString().compareTo(o1.get("ds").toString()); + } + }); + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + + //设置结果 + result.put("val", valueResult); + result.put("columnkey", columnKeyList); + result.put("name", nameList); + result.put("key", keyList); + + return result; + } + + /** + * 获取日期段的前半部分 降序排列 + */ + private List<String> getKeyList(List<String> keyNameList) { + + List<String> keyList = new ArrayList<>(); + + for (String dateKey : keyNameList) { + keyList.add(dateKey.substring(0, 10)); + } + + Collections.sort(keyList); + + return keyList; + } + + + /** + * 获取列名中文名 + */ + private List<String> getColumnNameList(Long appId, Long accountId, List<String> columnKeyList, String groupField) { + + List<String> nameList = new ArrayList<>(); + + nameList.add("日期"); + + nameList.addAll(columnKeyList); + + return nameList; + } + + /** + * 根据查询粒度查询范围内的日期样式 + */ + private Map<String, String> getDateMapByViewFlag(String startDate, String endDate, String viewFlag) { + + Map<String, String> columnDateMap = new HashMap<>(); + + switch (viewFlag) { + + case VIEW_PARTICLE_DAY: + List<String> dayList = DateUtil.getDateInterval(startDate, endDate); + + for (String date : dayList) { + columnDateMap.put(date, date); + } + break; + + case VIEW_PARTICLE_WEEK: + List<String> weekList = DateUtil.getEveryWeek(startDate, endDate); + + for (String week : weekList) { + columnDateMap.put(week, DateUtil.getFirstDayOfWeek(week) + "~" + DateUtil.getLastDayOfWeek(week)); + } + + break; + + case VIEW_PARTICLE_MONTH: + List<String> monthList = DateUtil.getEveryMonth(startDate, endDate); + + for (String month : monthList) { + columnDateMap.put(month, DateUtil.getFirstdayOfMonth(month) + "~" + DateUtil.getLastdayOfMonth(month)); + } + break; + + default: + break; + } + + return columnDateMap; + } +} diff --git a/src/main/java/com/reyun/service/impl/ExportReportInfoServiceImpl.java b/src/main/java/com/reyun/service/impl/ExportReportInfoServiceImpl.java new file mode 100644 index 0000000..7855d8c --- /dev/null +++ b/src/main/java/com/reyun/service/impl/ExportReportInfoServiceImpl.java @@ -0,0 +1,117 @@ +package com.reyun.service.impl; + +import com.reyun.dic.DownloadStatusEnumType; +import com.reyun.model.Account; +import com.reyun.model.App; +import com.reyun.model.ExportReportInfo; +import com.reyun.repository.AppRepository; +import com.reyun.repository.ExportReportInfoRepository; +import com.reyun.service.ExportReportInfoService; +import com.reyun.util.AwsS3Util; +import org.joda.time.DateTime; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; + +@Service +public class ExportReportInfoServiceImpl implements ExportReportInfoService { + + @Autowired + ExportReportInfoRepository repository; + + @Autowired + AppRepository appRepository; + + private final static int EXPORT_INVALID_DAYS = 3; + private final static int EXPORT_INVALID_MONTH = 1; + + private static final String S3_DOWNLOAD_BUCKET = "reyundownload"; + + private static final String DOWNLOAD_PATH = "trackingio/reportdownload/"; + + @Override + public ExportReportInfo save(ExportReportInfo exportReport) { + exportReport.setCreateTime(new Date()); + return repository.save(exportReport); + } + + @Override + public void delete(Long id) { + ExportReportInfo reportInfo = repository.findOne(id); + final String s3key = DOWNLOAD_PATH + reportInfo.getFileName(); + //删除文件 + if (AwsS3Util.getInstance().getAmazonS3().doesObjectExist(S3_DOWNLOAD_BUCKET, s3key)) { + AwsS3Util.getInstance().deleteS3Object(S3_DOWNLOAD_BUCKET, s3key); + } + //删除记录 + repository.delete(id); + + } + + @Override + public List<ExportReportInfo> findByApp(Account loginAccount, Long app) { + + Date startDate = new DateTime().minusMonths(EXPORT_INVALID_MONTH).toDate(); + + //母账号查看所有导出报表,子账号只能查看自己创建的 add by sunhao 20170828 + if (loginAccount.getIsSuperUser()) { + + return repository.findByApp(app, startDate); + + } else { + + return repository.findByAccountAndApp(app, startDate, loginAccount.getId()); + } + } + + @Override + public boolean validFileName(ExportReportInfo exportReport) { + App app = appRepository.findOne(exportReport.getApp()); + String fileName = app.getAppkey() + "_" + exportReport.getReportName() + "_" + exportReport.getStartDate() + "_" + exportReport.getEndDate() + ".txt"; + ExportReportInfo export = repository.findByAppAndFileName(exportReport.getApp(), fileName); + if (export == null) { + return true; + } + return false; + } + + @Override + public int updateStatus(Long id, String status, Long account) { + return repository.updateStatus(id, status, new Date(), account); + } + + @Override + public int updateStatus(Long id, String status) { + return repository.updateStatus(id, status, new Date()); + } + + @Override + public ExportReportInfo findOne(Long id) { + return repository.findOne(id); + } + + @Override + public List<ExportReportInfo> findExport2Deal() { + return repository.findByStatus(DownloadStatusEnumType.INIT.getCode(), DownloadStatusEnumType.FAILED.getCode()); + } + + @Override + public List<ExportReportInfo> findInvalidExportList() { + + //获取三天前的日期 + Date threeDaysAgo = DateTime.now().minusDays(EXPORT_INVALID_DAYS).toDate(); + //查找三天前的已生成的数据 + return repository.listInvalidExport(threeDaysAgo); + } + + /** + * 更新下载信息 + */ + @Override + public int updateDownloadInfo(Long downloadId, Account account, String downloadIp) { + + return repository.updateDownloadInfo(downloadId, account.getId(), account.getName(), downloadIp, new Date()); + } +} diff --git a/src/main/java/com/reyun/service/impl/ExpressionServiceImpl.java b/src/main/java/com/reyun/service/impl/ExpressionServiceImpl.java new file mode 100644 index 0000000..461275a --- /dev/null +++ b/src/main/java/com/reyun/service/impl/ExpressionServiceImpl.java @@ -0,0 +1,584 @@ +package com.reyun.service.impl; + +import com.reyun.model.CommonEvent; +import com.reyun.model.CommonParam; +import com.reyun.model.ComplicatedParam; +import com.reyun.model.Event; +import com.reyun.model.EventAttributeMeta; +import com.reyun.model.EventMeta; +import com.reyun.model.VirtualEvent; +import com.reyun.repository.CommonEventRepository; +import com.reyun.repository.CommonParamRepository; +import com.reyun.repository.ComplicatedParamRepository; +import com.reyun.repository.EventAttributeMetaRepository; +import com.reyun.repository.EventMetaRepository; +import com.reyun.repository.EventRepository; +import com.reyun.service.ExpressionService; +import com.reyun.service.VirtualEventService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; +import java.util.StringTokenizer; + +@Service +public class ExpressionServiceImpl implements ExpressionService { + + @Autowired + VirtualEventService virtualEventService; + @Autowired + private EventMetaRepository eventMetaRepository; + @Autowired + private EventAttributeMetaRepository eventAttributeMetaRepository; + @Autowired + private EventRepository eventRepository; + @Autowired + private ComplicatedParamRepository complicatedParamRepository; + @Autowired + private CommonEventRepository commonEventRepository; + @Autowired + private CommonParamRepository commonParamRepository; + + @Override + public boolean validateOriginalExpression(String expression, String appKey) { + +// List<String> splitExp = this.splitExpression(expression); + List<String> splitExp = this.split(expression); + + boolean isValidExpression = this.validateExpression(splitExp); + if (!isValidExpression) { + System.out.println("表达式成分有问题"); + return false; + } + + boolean bracketsValid = this.validateBrackets(splitExp); + + if (!bracketsValid) { + System.out.println("括号验证没过"); + return false; + } + + String eventAndAttributeValid = this.validateEventAndAttribute(splitExp, appKey); + + if (eventAndAttributeValid == null) { + System.out.println("事件数据库验证未通过"); + return false; + } + return true; + } + + /** + * 验证事件和属性 + * + * @param splitExp + * @return + */ + private String validateEventAndAttribute(List<String> splitExp, String appKey) { + + StringBuilder sb = new StringBuilder(splitExp.size()); + String eventName = ""; + String attributeName = ""; + String viewName = ""; + for (int i = 0; i < splitExp.size(); i++) { + String str = splitExp.get(i); + + // 获取到的字符串为 + if (str.equals("(") || str.equals(")") || str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/")) { + sb.append(str); + continue; + } + + // 把事件 属性 操作 拆分 + StringTokenizer stringTokenizer = new StringTokenizer(str, "."); + if (stringTokenizer.countTokens() > 2) { + eventName = stringTokenizer.nextElement().toString(); + attributeName = stringTokenizer.nextElement().toString(); + viewName = stringTokenizer.nextElement().toString(); + } else { + eventName = stringTokenizer.nextElement().toString(); + // 解析表达式的时候, 第二个都没有 + if (!stringTokenizer.hasMoreElements()) { + return null; + } + viewName = stringTokenizer.nextElement().toString(); + if ("".equals(viewName)) { + return null; + } + } + + // 去掉两端双引号 + if (eventName.startsWith("\"") && eventName.endsWith("\"")) { + eventName = eventName.substring(1, eventName.length() - 1); + } + if (attributeName.startsWith("\"") && attributeName.endsWith("\"")) { + attributeName = attributeName.substring(1, attributeName.length() - 1); + } + if (viewName.startsWith("\"") && viewName.endsWith("\"")) { + viewName = viewName.substring(1, viewName.length() - 1); + } + String b = this.validateEAndA(eventName, attributeName, viewName, appKey); + if (b == null) { + return null; + } + sb.append(b); + } + + return sb.toString(); + } + + /** + * 到数据库去验证 + * + * @param eventName + * @param attributeName + * @param viewName + * @param appKey + * @return + */ + private String validateEAndA(String eventName, String attributeName, String viewName, String appKey) { + + StringBuilder sb = new StringBuilder(5); + + // 数据库读取event + String eventId = this.getEventId(eventName, appKey); + if (eventId == null || eventId.isEmpty()) { + System.out.println("事件校验有误"); + return null; + } + + sb.append(eventId).append("."); + + // 如果attribute传过来了, 数据库验证, 并验证和event的关系 + if (attributeName != null && !attributeName.isEmpty()) { + String attrId = this.getAttributeId(eventId, attributeName, appKey); + if (attrId == null || attrId.isEmpty()) { + System.out.println("属性校验有误"); + return null; + } + sb.append(attrId).append("."); + } + + // 验证operation + if (viewName != null && !"".equals(viewName)) { + ComplicatedParam complicatedParam = this.complicatedParamRepository.findComplicateOperator(viewName); + if (complicatedParam == null) { + System.out.println(viewName + "没找到"); + return null; + } else { + sb.append(complicatedParam.getViewAttr()); + } + } + + return sb.toString(); + } + + /** + * 验证括号匹配 + * + * @param splitExp + * @return + */ + private boolean validateBrackets(List<String> splitExp) { + Stack<String> stack = new Stack<>(); + // 配对验证 + for (String str : splitExp) { + if (str.equals("(")) { + stack.push("("); +// } else if (str.equals(")") && stack.size() > 0 && stack.peek().equals("(")) { +// stack.pop(); +// } else if (str.equals(")") && stack.size() > 0 && !stack.peek().equals("(")) { +// stack.push(str); + } else if (str.equals(")")) { + if (stack.size() > 0 && stack.peek().equals("(")) { + stack.pop(); + } else if (stack.size() > 0 && !stack.peek().equals("(")) { + stack.push(str); + } else { + stack.push(str); + } + } + } + if (stack.size() != 0) { + return false; + } + // 括号位置验证 + for (int i = 0; i < splitExp.size(); i++) { + String str = splitExp.get(i); + String next = i < splitExp.size() - 1 ? splitExp.get(i + 1) : ""; + String last = i > 0 ? splitExp.get(i - 1) : ""; + // 左括号的时候, 上一个不能是dot, 下一个不能是运算符号 + if ("(".equals(str) && (last.equals(".") || next.equals("+") || next.equals("-") || next.equals("*") || next.equals("/"))) { + return false; + } else if (")".equals(str) && (last.equals("+") || last.equals("-") || last.equals("*") || last.equals("/") || last.equals("."))) { + return false; + } + } + // 括号一对的内容验证 +// for (int i = 0; i < splitExp.size(); i++) { +// +// } + return true; + } + + + private List<String> split(String expression) { + List<String> list = new ArrayList<>(40); + + char[] chars = expression.toCharArray(); + // 存放单个属性 + StringBuilder sb = new StringBuilder(); + // 存放整个表达式 + StringBuilder sb2 = new StringBuilder(); + for (int i = 0; i < chars.length; i++) { + char c = chars[i]; + // 如果是符号, 四则运算/小括号/dot + if (c == '(' || c == ')' || c == '+' || c == '-' || c == '*' || c == '/') { + // 要判断运算符号是不是名称里面的 + + // 塞进去的字符串是以"开头的, 说明符号是名称里的 + if (sb.length() > 0 && sb.indexOf("\"") == 0) { + sb.append(c); + } + // 塞进去的字符串不是以"开头的, 不是以"开头, 说明这个符号不是名称里面的 + else if (sb.length() > 0 && sb.indexOf("\"") != 0) { + list.add(sb2.append(sb.toString()).toString()); +// list.add(sb.toString()); + sb.setLength(0); + sb2.setLength(0); + list.add(Character.toString(c)); + } + // 还没塞字符串 === 这个符号不是名称里的 + else { + list.add(Character.toString(c)); + } + } + // 如果是双引号, 并且sb中存放了已开始的字符串 + else if (c == '"' && sb.length() > 0) { + // 判断这个双引号是不是在名字中的. 判断逻辑为, 是否为字符串最后一个字符, 或下一个字符等于运算符号, 或下一个字符等于dot +// if (i == chars.length - 1 || chars[i + 1] == '(' || chars[i + 1] == ')' || chars[i + 1] == '+' || chars[i + 1] == '-' || chars[i + 1] == '*' || chars[i + 1] == '/' || chars[i + 1] == '.') { +// sb.append(c); +// list.add(sb.toString()); +// sb.setLength(0); +// } else { +// sb.append(c); +// } + // 如果是最后一个字符 + if (i == chars.length - 1) { + sb.append(c); + list.add(sb.toString()); + sb.setLength(0); + } else { + sb.append(c); + } + } + // 如果是双引号, 并且sb中没有字符串 + else if (c == '"' && sb.length() == 0) { + sb.append(c); + } +// // 如果是dot符号 + else if (c == '.') { + if (sb.length() > 0) { + sb2.append(sb.toString()); + sb.setLength(0); + } + sb2.append(c); + } + // 最后一个字符, 收尾 + else if (i == chars.length - 1) { + sb.append(c); + list.add(sb2.append(sb.toString()).toString()); + sb.setLength(0); + sb2.setLength(0); + } + // 其他 + else { + sb.append(c); + } + } + if (sb2.length() > 0) { + list.add(sb2.toString()); + } + return list; + } + + @Override + public String originalExpressionToMidExp(String original, String appKey) { + + List<String> splitExp = this.split(original); + if (splitExp.size() < 1) { + return null; + } + + boolean isValidExpression = this.validateExpression(original); + + if (!isValidExpression) { + System.out.println("表达式成分有问题"); + return null; + } + + boolean bracketsValid = this.validateBrackets(splitExp); + + if (!bracketsValid) { + System.out.println("括号验证有问题"); + return null; + } + + String eventAndAttributeValid = this.validateEventAndAttribute(splitExp, appKey); + + if (eventAndAttributeValid == null) { + System.out.println("事件数据库验证未通过"); + return null; + } + + return eventAndAttributeValid; + } + + private boolean validateExpression(List<String> splitExp) { + if (splitExp.size() == 0) { + return false; + } + // 获取表达式数量和符号数量 + int symbolCount = 0; + int expCount = 0; + for (String str : splitExp) { + if ("+".equals(str) || "-".equals(str) || "*".equals(str) || "/".equals(str)) { + symbolCount++; + } else if ("(".equals(str) || ")".equals(str)) { + continue; + } else { + expCount++; + if (str.startsWith(".") || str.endsWith(".")) { + return false; + } + } + } + + // 没有表达式 + if (expCount == 0) { + return false; + } + + // 判断开头 + String str = splitExp.get(0); + if (str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/") || str.equals(")") || str.equals(".")) { + return false; + } + // 判断结尾 + str = splitExp.get(splitExp.size() - 1); + if (str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/") || str.equals("(") || str.equals(".")) { + return false; + } + +// return symbolCount >= 1 && expCount >= 2; + return true; + } + + /** + * 获取eventId的逻辑方法 + * + * @param eventName + * @param appKey + * @return + */ + private String getEventId(String eventName, String appKey) { + if (eventName == null || eventName.isEmpty() || appKey == null || appKey.isEmpty()) { + return null; + } + + //根据事件ID和别名 + EventMeta eventMeta = this.eventMetaRepository.findByAliasOrName(appKey, eventName); + if (eventMeta != null) { + return eventMeta.getEventId(); + } + + //根据通用事件 + CommonEvent byAlias = this.commonEventRepository.findByAlias(eventName); + if (byAlias != null) { + return byAlias.getEvent(); + } + + //根据事件ID + List<Event> byEvent = eventRepository.findByEventName(appKey, eventName); + if (byEvent != null && byEvent.size() > 0) { + return eventName; + } + + //虚拟事件 + VirtualEvent virtualEvent = virtualEventService.getVirtualEvent(appKey, eventName); + if (null != virtualEvent) { + return virtualEvent.getName(); + } + + return null; + } + + /** + * 获取attr Id的方法 + * + * @param attributeName + * @param appKey + * @return + */ + private String getAttributeId(String eventId, String attributeName, String appKey) { + + if (attributeName == null || attributeName.isEmpty() || appKey == null || appKey.isEmpty()) { + return null; + } + + // 查询别名库表 + EventAttributeMeta eventAttributeMeta = this.eventAttributeMetaRepository.findByAliasOrName(appKey, attributeName); + if (eventAttributeMeta != null) { + return eventAttributeMeta.getAttribute(); + } + + //查询通用属性库表 + CommonParam byAlias = this.commonParamRepository.findByAlias(attributeName, "event"); + if (byAlias != null) { + return byAlias.getParam(); + } + + //查询属性ID + if (eventId.startsWith("vir_")) { + + //虚拟事件的属性查询 + List<String> virtualEventList = virtualEventService.findVirtualEventList(eventId); + if (CollectionUtils.isEmpty(eventRepository.findByEventsAndAttr(virtualEventList, attributeName, appKey))) { + return attributeName; + } + + } else { + + //自然事件 + List<Event> byAttr = eventRepository.findByAttr(attributeName, eventId, appKey); + if (byAttr != null && byAttr.size() > 0) { + return attributeName; + } + } + + System.out.println(attributeName + "事件属性BUG"); + return null; + } + + + /** + * 校验算数表达式 + * created by sunhao 20170925 + */ + private boolean validateExpression(String expression) { + + //判空处理,空括号处理 + if (StringUtils.isEmpty(expression)) { + return false; + } + + //1.分割以及括号处理 + List<String> expressionList = this.splitWithBracket(expression); + + + //2,再次校验表达式的符号 + if (!CollectionUtils.isEmpty(expressionList)) { + + //2.1,元素个数校验,偶数个false + if (expressionList.size() % 2 == 0) { + return false; + } + + //2.2,校验每个元素 + for (int i = 0; i < expressionList.size(); i++) { + + String element = expressionList.get(i); + + if (element.matches("[-+*/]")) { + //符号处理 + if (i - 1 < 0 || i + 1 >= expressionList.size() || expressionList.get(i - 1).matches("[-+*/]") + || expressionList.get(i + 1).matches("[-+*/]")) { + return false; + } + + } else if (element.startsWith("(") && element.endsWith(")")) { + //如果是带括号的,递归处理 + if (!validateExpression(element.substring(1, element.length() - 1))) { + return false; + } + + } else { + //正常元素处理,前后若有数据,必须是符号。 + if ((i - 1 > 0 && !expressionList.get(i - 1).matches("[-+*/]")) + || (i + 1 < expressionList.size() && !expressionList.get(i + 1).matches("[-+*/]")) + || (element.contains("(") && element.contains(")"))) { + return false; + } + } + } + + return true; + } + + return false; + } + + /** + * 按照算数运算元素分割,顺带校验括号,括号不合法时返回NULL + * created by sunhao 20170925 + */ + private List<String> splitWithBracket(String expression){ + + List<String> expressionList = new ArrayList<>(); + + String[] splitExpression = expression.split("(?<=[-+*/()])|(?=[-+*/()])"); + + //1.首先校验括号,顺便聚合括号内容。 + int bracketNumber = 0; + StringBuilder bracketElement = new StringBuilder(); + + for (String element : splitExpression) { + + //『(』开头,或者括号数不是0,进入括号统计 + if (element.equals("(") || bracketNumber > 0) { + + bracketElement.append(element); + + if (element.equals("(")) { + bracketNumber++; + } else if (element.equals(")")) { + bracketNumber--; + } + + //括号完全匹配之后 + if (bracketNumber == 0) { + + expressionList.add(bracketElement.toString()); + + //清空括号内容 + bracketElement.delete(0, bracketElement.length()); + } + + } else { + expressionList.add(element); + } + } + + //括号不匹配, + if(bracketNumber != 0){ + return null; + } + + return expressionList; + } + + + + + public static void main(String[] args) throws Exception { + + ExpressionServiceImpl expressionService = new ExpressionServiceImpl(); + + System.out.println(expressionService.validateExpression("(付费.设备数-(注册.设备均次数))/付费.设备数-注册.设备均次数*付费.设备数")); + + } + +} diff --git a/src/main/java/com/reyun/service/impl/FunnelServiceImpl.java b/src/main/java/com/reyun/service/impl/FunnelServiceImpl.java new file mode 100644 index 0000000..d42dd0b --- /dev/null +++ b/src/main/java/com/reyun/service/impl/FunnelServiceImpl.java @@ -0,0 +1,433 @@ +package com.reyun.service.impl; + +import com.reyun.dic.CustomMenuType; +import com.reyun.dic.LogEnumType; +import com.reyun.dic.OperateObjectEnumType; +import com.reyun.dic.RoleEnumType; +import com.reyun.model.*; +import com.reyun.repository.*; +import com.reyun.service.*; +import com.reyun.taskexecute.ReportCallable; +import com.reyun.util.*; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Service +public class FunnelServiceImpl implements FunnelService { + + private static Logger logger = LoggerFactory.getLogger(FunnelServiceImpl.class); + + @Autowired + AppRepository appRepository; + @Autowired + FunnelRepository funnelRepository; + @Autowired + AccountRepository accountRepository; + @Autowired + EventtableMetadataRepository eventtableMetadataRepository; + @Autowired + UserGroupRepository usergroupRepository; + @Autowired + EventRepository eventRepository; + @Autowired + UserLogService userLogService; + @Autowired + AuthService authService; + @Autowired + CommonParamService commonParamService; + @Autowired + CustomMenuTemplateRepository customMenuTemplateRepository; + @Autowired + ConfigParamService configparamService; + + @Autowired + EventMetaRepository eventMetaRepository; + + @Autowired + ReportService reportService; + + private final static String TEMPLATE_TYPE_FUNNEL = "funnel"; + + @Override + public Map<String, List> funnelReport(Long funnel, String startDate, String endDate, String usergroup, boolean isList, + String dimention, Account account, boolean isDevice, boolean isProfile) { + + Funnel funnelObject = funnelRepository.findOne(funnel); + App app = appRepository.findOne(funnelObject.getApp()); + + userLogService.insertLog(account, LogEnumType.FIND.getCode(), LogEnumType.FIND.getName() + "漏斗报表" + funnelObject.getName(), + funnelObject, app.getId(), OperateObjectEnumType.REPORT.getCode()); + + + List<Event> eventsAlias = eventRepository.findEventAliasByEvent(app.getAppkey(), Arrays.asList(funnelObject.getEvents().split(","))); + Map<String, String> eventAliasMap = new HashMap<>(); + Map<String, CommonEvent> commonEventMap = commonParamService.findAllCommonEvent(); + for (Event event : eventsAlias) { + EventMeta eventMeta = eventMetaRepository.findByEventId(event.getAppkey(), event.getEventName()); + String aliasStr = event.getEventName(); + if (eventMeta != null) { + aliasStr = StringUtil.isEmpty(eventMeta.getAlias()) ? event.getEventName() : eventMeta.getAlias(); + } + if (commonEventMap.containsKey(event.getEventName())) { + aliasStr = commonEventMap.get(event.getEventName()).getAlias(); + } + String eventName = event.getEventName(); + eventAliasMap.put(event.getEventName(), aliasStr); + } + + String sqlTemp = funnelObject.getQuerySql(); + + //数据权限过滤 + + String demoApps = configparamService.getConfigParamByKey("demo_appkey"); + List<String> demoAppList = Arrays.asList(demoApps.split(",")); + sqlTemp = sqlTemp.replace("$dimentionwhere",""); + sqlTemp = sqlTemp.replace("$startdatetime", DateUtil.parseDate(startDate).getTime() / 1000 + ""); + sqlTemp = sqlTemp.replace("$startdate", startDate); + int interval = DateUtil.getDateInterval(startDate, endDate).size(); + String firstEnddate = DateUtil.getBeforeDays(startDate, -interval); + String secondEnddate = DateUtil.getBeforeDays(startDate, -(interval + funnelObject.getWindow() - 1)); + sqlTemp = sqlTemp.replace("$firstenddate", firstEnddate); + sqlTemp = sqlTemp.replace("$secondenddate", secondEnddate); + sqlTemp = sqlTemp.replace("$interval", interval + ""); + boolean isCompare = false; + String dimentionKey = dimention; + + sqlTemp = sqlTemp.replaceAll("xwho", "a.xwho"); + sqlTemp = sqlTemp.replaceAll("xwhat", "a.xwhat"); + sqlTemp = sqlTemp.replaceAll("xwhen", "a.xwhen"); + sqlTemp = sqlTemp.replaceAll(" ds", " a.ds"); + sqlTemp = sqlTemp.replaceAll("_deviceid", "a._deviceid"); + + + String dataSource = ""; + String firstdimentionselect=""; + String[] split = sqlTemp.split(" "); + for (String s : split) { + s.replaceAll(" ", ""); + if (s.startsWith("tkio")) { + dataSource = s; + break; + } + } + + + if(!(sqlTemp.indexOf("_cid")==-1)){ + sqlTemp=sqlTemp.replace("_cid","a._cid"); + } + + if(!(sqlTemp.indexOf("_campaignid")==-1)){ + sqlTemp=sqlTemp.replace("_campaignid","a._campaignid"); + } + + + + Pattern pattern = Pattern.compile("\\$dimentionselect"); + Matcher matcher = pattern.matcher(sqlTemp); + sqlTemp=matcher.replaceFirst("\\$firstdimentionselect"); + + String afterReplace = new String(dataSource + " a \\$joinprofile"); + String beforeReplace = new String(dataSource); + + sqlTemp = sqlTemp.replaceAll(beforeReplace, afterReplace); + + String totalSql = sqlTemp; + String usergroupName = ""; + + if (StringUtil.isEmpty(usergroup)) { + sqlTemp = sqlTemp.replace("$usergroup", ""); + totalSql = totalSql.replace("$usergroup", ""); + } else { + usergroupName = usergroupRepository.findOne(Long.valueOf(usergroup)).getName(); + isCompare = true; + totalSql = totalSql.replace("$usergroup", ""); + sqlTemp = sqlTemp + .replace( + "$usergroup", + String.format( + " and a.xwho in (select objectid as xwho from %s where id='%s' and objecttype='xwho')", + Constant.usergroupTable, usergroup)); + } + + if (StringUtil.isEmpty(dimention) || dimention.equals("usergroup")) { + + sqlTemp = sqlTemp.replace("$dimentionaftergroupby", ""); + sqlTemp = sqlTemp.replace("$dimentionselect", ""); + sqlTemp = sqlTemp.replace("$dimentionwhere", ""); + sqlTemp = sqlTemp.replace("$dimentiongroupby", ""); + sqlTemp = sqlTemp.replace("$joinprofile", ""); + sqlTemp = sqlTemp.replace("$firstdimentionselect", ""); + + totalSql = totalSql.replace("$dimentionselect", ""); + totalSql = totalSql.replace("$dimentionwhere", ""); + totalSql = totalSql.replace("$dimentionaftergroupby", ""); + totalSql = totalSql.replace("$dimentiongroupby", ""); + totalSql = totalSql.replace("$joinprofile", ""); + totalSql = totalSql.replace("$firstdimentionselect", ""); + + + } else { + isCompare = true; + totalSql = totalSql.replace("$dimentionselect", ""); + totalSql = totalSql.replace("$dimentionwhere", ""); + totalSql = totalSql.replace("$dimentionaftergroupby", ""); + totalSql = totalSql.replace("$dimentiongroupby", ""); + totalSql = totalSql.replace("$joinprofile", ""); + totalSql = totalSql.replace("$firstdimentionselect", ""); + + if (isProfile) { + sqlTemp = sqlTemp.replace("$dimentionselect", "b." + dimention + ","); + sqlTemp = sqlTemp.replace("$dimentionaftergroupby", "," + " b." + dimention); + sqlTemp = sqlTemp.replace("$dimentiongroupby", " group by " + dimention); + sqlTemp = sqlTemp.replace("$dimentionwhere", ""); + sqlTemp = sqlTemp.replace("$firstdimentionselect", dimention + ", "); + + String profileSource = Constant.profileTable + app.getAppkey(); + sqlTemp = sqlTemp.replace("$joinprofile", "right join " + profileSource + " b on a.xwho=b.xwho"); + }else { + sqlTemp = sqlTemp.replace("$dimentionselect","a." + dimention + ","); + sqlTemp = sqlTemp.replace("$dimentionaftergroupby", "," + " a." + dimention); + sqlTemp = sqlTemp.replace("$dimentiongroupby", " group by " + dimention); + sqlTemp = sqlTemp.replace("$joinprofile", ""); + sqlTemp = sqlTemp.replace("$dimentionwhere", ""); + sqlTemp = sqlTemp.replace("$firstdimentionselect", dimention + ", "); + } + } + + + + Map<String, List> result = new HashMap<>(); + + try { + + if (!StringUtil.isEmpty(usergroup)) { + dimentionKey = "usergroup"; + } + + if (isCompare) { + //创建一个线程池 + ExecutorService pool = Executors.newFixedThreadPool(2); + //创建两个有返回值的任务 + ReportCallable c1 = new ReportCallable("funnel", totalSql, funnelObject, startDate, endDate, dimentionKey, + false, true, interval, "day", null, "", eventAliasMap, null, app.getAppkey()); + ReportCallable c2 = new ReportCallable("funnel", sqlTemp, funnelObject, startDate, endDate, dimentionKey, + isCompare, false, interval, "day", usergroup, usergroupName, eventAliasMap, null, app.getAppkey()); + //执行任务并获取Future对象 + Future<Map<String, List>> f1 = pool.submit(c1); + Future<Map<String, List>> f2 = pool.submit(c2); + //从Future对象上获取任务的返回值,并输出到控制台 + try { + result = f1.get(); + List<Map<String, Object>> val1 = result.get("val"); + if (!result.containsKey("isempty")) { + Map<String, List> result2 = f2.get(); + List<Map<String, Object>> val2 = result2.get("val"); + val1.addAll(val2); + } + result.put("val", val1); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + //关闭线程池 + pool.shutdown(); + } else { + + Map<String, String> conditions = new HashMap<String, String>(); + conditions.put("sql", sqlTemp); + conditions.put("dbtype", "presto"); + conditions.put("datatype", "list"); + conditions.put("reportname", "funnel"); + conditions.put("appid", app.getAppkey()); + + + Map<String, List> responseJson = reportService.reportBySql(conditions); + + + result = SqlUtil.format4Funnel(responseJson, Arrays.asList(funnelObject.getEvents().split(",")), isCompare, + dimentionKey, startDate, endDate, false, usergroup, usergroupName, eventAliasMap, null); + } + } catch (Exception e) { + e.printStackTrace(); + } + + + return result; + } + + /** + * 漏斗分享成看单之后查询数据 + * created by sunhao 20170426 + */ + @Override + public Map<String, List> funnelDataQuery(String startDate, String endDate, String eventInfo, String events, int window, + Long appId, boolean isDevice) { + + Map<String, List> result = new HashMap<>(); + + App app = appRepository.findOne(appId); + + //eventAliasMap + List<Event> eventsAlias = eventRepository.findEventAliasByEvent(app.getAppkey(), Arrays.asList(events.split(","))); + Map<String, String> eventAliasMap = new HashMap<>(); + Map<String, CommonEvent> commonEventMap = commonParamService.findAllCommonEvent(); + for (Event event : eventsAlias) { + EventMeta eventMeta = eventMetaRepository.findByEventId(event.getAppkey(), event.getEventName()); + String alias = event.getEventName(); + if (eventMeta != null) { + alias = StringUtil.isEmpty(eventMeta.getAlias()) ? event.getEventName() : eventMeta.getAlias(); + } + if (commonEventMap.containsKey(event.getEventName())) { + alias = commonEventMap.get(event.getEventName()).getAlias(); + } + eventAliasMap.put(event.getEventName(), alias); + } + + //生成SQL + String sqlTemp = SqlUtil.generateFunnelSqlTemp(eventInfo, app.getAppkey(), window); + + //日期替换 + int interval = DateUtil.getDateInterval(startDate, endDate).size(); + String firstEndDate = DateUtil.getBeforeDays(startDate, -interval); + String secondEndDate = DateUtil.getBeforeDays(startDate, -(interval + window - 1)); + + sqlTemp = sqlTemp.replace("$startdatetime", DateUtil.parseDate(startDate).getTime() / 1000 + ""); + sqlTemp = sqlTemp.replace("$startdate", startDate); + sqlTemp = sqlTemp.replace("$firstenddate", firstEndDate); + sqlTemp = sqlTemp.replace("$secondenddate", secondEndDate); + sqlTemp = sqlTemp.replace("$interval", interval + ""); + + //默认查询没有用户组 + sqlTemp = sqlTemp.replace("$usergroup", ""); + + //默认查询没有分类维度数据 + sqlTemp = sqlTemp.replace("$dimentionselect", ""); + sqlTemp = sqlTemp.replace("$dimentionwhere", ""); + sqlTemp = sqlTemp.replace("$dimentionaftergroupby", ""); + sqlTemp = sqlTemp.replace("$dimentiongroupby", ""); + + if (isDevice) { + sqlTemp = sqlTemp.replace("xwho", "_deviceid"); + } + + try { + + Map<String, String> conditions = new HashMap<String, String>(); + conditions.put("sql", sqlTemp); + conditions.put("dbtype", "presto"); + conditions.put("datatype", "list"); + conditions.put("appid", app.getAppkey()); + + Map<String, List> responseJson = reportService.reportBySql(conditions); + + + result = SqlUtil.format4Funnel(responseJson, Arrays.asList(events.split(",")), false, "", startDate, + endDate, false, "", "", eventAliasMap, null); + + } catch (Exception e) { + e.printStackTrace(); + } + + return result; + } + + @Override + public Funnel create(Funnel funnel, Long account) { + funnel.setAccount(account); + funnel.setCreateAccount(account); + App app = appRepository.findOne(funnel.getApp()); + String sqlTemp = SqlUtil.generateFunnelSqlTemp(funnel.getEventInfo(), app.getAppkey(), funnel.getWindow()); + funnel.setQuerySql(sqlTemp); + + return funnelRepository.save(funnel); + } + + @Override + public Funnel update(Funnel funnel, Long account) { + Funnel dbFunnel = funnelRepository.findOne(funnel.getId()); + dbFunnel.setName(funnel.getName()); + dbFunnel.setEventInfo(funnel.getEventInfo()); + dbFunnel.setEvents(funnel.getEvents()); + dbFunnel.setModifyTime(new Date()); + dbFunnel.setModifyAccount(account); + dbFunnel.setWindow(funnel.getWindow()); + + App app = appRepository.findOne(dbFunnel.getApp()); + + String sqlTemp = SqlUtil.generateFunnelSqlTemp(funnel.getEventInfo(), app.getAppkey(), funnel.getWindow()); + dbFunnel.setQuerySql(sqlTemp); + + List<CustomMenuTemplate> templateList = customMenuTemplateRepository.findAllTemplateByOriginal(dbFunnel.getId(), TEMPLATE_TYPE_FUNNEL); + if(ValidateUtil.isValid(templateList)){ + List<CustomMenuTemplate> list = new ArrayList<>(); + for(CustomMenuTemplate cu : templateList){ + cu.setName(dbFunnel.getName()); + list.add(cu); + } + customMenuTemplateRepository.save(list); + } + + return funnelRepository.save(dbFunnel); + } + + @Override + public Funnel delete(Long id, Long account) { + Funnel dbFunnel = funnelRepository.findOne(id); + dbFunnel.setModifyAccount(account); + dbFunnel.setModifyTime(new Date()); + dbFunnel.setDelFlag(true); + + //查看是否存在看单之中,如果存在则删除。 + List<Long> templateList = customMenuTemplateRepository.findTemplateByOriginal(id, CustomMenuType.FUNNEL.getKey()); + if(!CollectionUtils.isEmpty(templateList)){ + customMenuTemplateRepository.deleteTemplateByIds(account, templateList); + } + + return funnelRepository.save(dbFunnel); + } + + @Override + public Funnel findById(Long id) { + return funnelRepository.findOne(id); + } + + @Override + public List<Funnel> findByApp(Long app) { + List<Funnel> funnelList = funnelRepository.findAllByApp(app); + List<Long> account = new ArrayList<>(); + for (Funnel f : funnelList) { + account.add(f.getCreateAccount()); + } + Iterable<Account> accountList = accountRepository.findAll(account); + Iterator<Account> a = accountList.iterator(); + Map<Long, String> idNameMap = new HashMap<>(); + while (a.hasNext()) { + Account aObject = a.next(); + idNameMap.put(aObject.getId(), aObject.getEmail()); + } + for (Funnel f : funnelList) { + f.setcAccount(idNameMap.get(f.getCreateAccount())); + } + return funnelList; + } + + @Override + public Funnel validName(String name, Long app) { + return funnelRepository.findByNameAndApp(name, app); + } + +} diff --git a/src/main/java/com/reyun/task/EmailThread.java b/src/main/java/com/reyun/task/EmailThread.java new file mode 100644 index 0000000..ca7b40f --- /dev/null +++ b/src/main/java/com/reyun/task/EmailThread.java @@ -0,0 +1,39 @@ +package com.reyun.task; + +import com.reyun.util.MailUtils; + +import java.util.List; + +/** + * Created by Administrator on 2017/5/6 0006. + * desc:邮件发送线程 + */ +public class EmailThread + extends Thread { + + private String title; + private String content ; + private List<String> receiver; + + public EmailThread(){} + + public EmailThread(String title, String content, List<String> receiver) + { + + this.setName("SendEmailThread"); + this.title = title; + this.content = content; + this.receiver=receiver; + } + + @Override + public void run(){ + try { + MailUtils.sendHtmlEmail(title,content,receiver); + } catch (Exception e) { + e.printStackTrace(); + } + + } + +} diff --git a/src/main/java/com/reyun/taskexecute/EventReportCallable.java b/src/main/java/com/reyun/taskexecute/EventReportCallable.java new file mode 100644 index 0000000..c015d58 --- /dev/null +++ b/src/main/java/com/reyun/taskexecute/EventReportCallable.java @@ -0,0 +1,68 @@ +package com.reyun.taskexecute; + +import com.reyun.context.AppUtils; +import com.reyun.model.App; +import com.reyun.service.ReportService; +import com.reyun.service.impl.ComplicatedEventsServiceImpl; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Callable; + +/** + * Created by mxq on 2017/11/1. + */ +public class EventReportCallable implements Callable<Map<String, List>> { + + protected static Logger logger = LoggerFactory.getLogger(EventReportCallable.class); + private ComplicatedEventsServiceImpl eventStatsService = AppUtils.getApplicationContext().getBean(ComplicatedEventsServiceImpl.class); + private ReportService reportService = AppUtils.getApplicationContext().getBean(ReportService.class); + + private Map<String, String> conditions; + private List<JSONObject> selectList; + private JSONArray groupJsonArray; + + private App app; + private Long accountid; + private String startDate; + private String endDate; + private String eventCondition; + private String viewType; + + private Map<String, List> result; + + public EventReportCallable(Map<String, String> conditions, List<JSONObject> selectList, JSONArray groupJsonArray, App app, Long accountid, String startDate, String endDate, String eventCondition, String viewType) { + this.conditions = conditions; + this.selectList = selectList; + this.groupJsonArray = groupJsonArray; + this.app = app; + this.accountid = accountid; + this.startDate = startDate; + this.endDate = endDate; + this.eventCondition = eventCondition; + this.viewType = viewType; + } + + @Override + public Map<String, List> call() throws Exception { + + if(null != conditions){ + Map<String, List> responseJson = reportService.reportBySql(conditions); + //获取时间范围内按照时间粒度的所有日期 + Map<String, String> dateStringMap = eventStatsService.getDateMapByViewFlag(startDate, endDate, viewType); + //格式化数据 + result = eventStatsService.formatComplicatedEventResponse(app, accountid, responseJson, dateStringMap, groupJsonArray, selectList); + }else{ + //查询合计 + List<JSONObject> totalValue = eventStatsService.queryDistinctTotalData(app.getId(), accountid, startDate, endDate, eventCondition, viewType); + result = new HashMap<>(); + result.put("totalval",totalValue); + } + return result; + } +} diff --git a/src/main/java/com/reyun/util/AwsS3Util.java b/src/main/java/com/reyun/util/AwsS3Util.java new file mode 100644 index 0000000..9dee916 --- /dev/null +++ b/src/main/java/com/reyun/util/AwsS3Util.java @@ -0,0 +1,124 @@ +package com.reyun.util; + + +import com.amazonaws.ClientConfiguration; +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.regions.Regions; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.model.*; +import com.google.common.collect.Lists; +import com.reyun.service.impl.OpenApiServiceImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.*; +import java.util.List; + +public class AwsS3Util { + private static final Logger logger = LoggerFactory.getLogger(AwsS3Util.class); + + private static AwsS3Util awsS3Util = new AwsS3Util(); + + private AmazonS3 s3; + + private AwsS3Util() { + String accessKey = ""; + String secretKey = ""; + + if ((accessKey != null) && (secretKey != null)) { + AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); + + ClientConfiguration config = new ClientConfiguration(); + String proxyHost = System.getProperty("http.proxyHost"); + String proxyPort = System.getProperty("http.proxyPort"); + if (proxyHost != null && proxyPort != null) { + config.setProxyHost(proxyHost); + config.setProxyPort(Integer.valueOf(proxyPort)); + } + + if (s3 == null) + s3 = new AmazonS3Client(credentials, config); + + s3.setRegion(com.amazonaws.regions.Region.getRegion(Regions.CN_NORTH_1)); + } + } + + public static AwsS3Util getInstance() { + return awsS3Util; + } + + public AmazonS3 getAmazonS3() { + return s3; + } + + public List<String> getS3Keys(String bucket, String prefix) { + List<String> rtnList = Lists.newArrayList(); + ObjectListing objectListing = s3.listObjects(new ListObjectsRequest() + .withBucketName(bucket) + .withPrefix(prefix)); + for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) { + rtnList.add(objectSummary.getKey()); + } + return rtnList; + } + + public long uploadStreamToS3(String bucket, String s3key, InputStream in, String contentType, long contentLength) + throws IOException { + ObjectMetadata md = new ObjectMetadata(); + if (contentType != null) + md.setContentType(contentType); + md.setContentLength(contentLength); + AwsS3Util.getInstance().getAmazonS3().putObject(bucket, s3key, in, md); + return contentLength; + } + + public long uploadStringToS3(String s3bucket, String s3key, String str) + throws IOException { + final byte[] bytes = str.getBytes("UTF-8"); + BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(bytes)); + try { + return uploadStreamToS3(s3bucket, s3key, bis, "text/plain; charset=UTF-8", bytes.length); + } finally { + IOUtil.close(bis); + } + } + + public String downloadStringFromS3(String bucket, String s3key) throws IOException { + return new String(downloadBytesFromS3(bucket, s3key), "UTF-8"); + } + + public byte[] downloadBytesFromS3(String bucket, String s3key) throws IOException { + InputStream is = null; + ByteArrayOutputStream bos = null; + try { + is = downloadStreamFromS3(bucket, s3key); + bos = new ByteArrayOutputStream(); + IOUtil.copy(is, bos); + return bos.toByteArray(); + } finally { + if (bos != null) + IOUtil.close(bos); + if (is != null) + IOUtil.close(is); + } + } + + public InputStream downloadStreamFromS3(String bucket, String s3key) { + return getS3Object(bucket, s3key).getObjectContent(); + } + + public void deleteS3Object(String bucket, String s3key) { + AwsS3Util.getInstance().getAmazonS3().deleteObject(bucket, s3key); + } + + private S3Object getS3Object(String bucket, String s3key) { + return AwsS3Util.getInstance().getAmazonS3().getObject(bucket, s3key); + } + + public static void main(String[] args) { + OpenApiServiceImpl openApiService = new OpenApiServiceImpl(); + System.out.println(openApiService.listInfo4Toutiao("2017-09-12"));; + } +} \ No newline at end of file diff --git a/src/main/java/com/reyun/util/BeanUtils.java b/src/main/java/com/reyun/util/BeanUtils.java new file mode 100644 index 0000000..88c787f --- /dev/null +++ b/src/main/java/com/reyun/util/BeanUtils.java @@ -0,0 +1,22 @@ +package com.reyun.util; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.util.Map; + +/** + * Created by nolan on 16/9/28. + * description: + */ +public class BeanUtils { + + public static Map bean2Map(Object obj) { + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.convertValue(obj, Map.class); + } + + public static <T> T map2Bean(Map fromValue, Class<T> toValueType) throws IllegalArgumentException { + ObjectMapper objectMapper = new ObjectMapper(); + return objectMapper.convertValue(fromValue, toValueType); + } +} diff --git a/src/main/java/com/reyun/util/CharacterUtils.java b/src/main/java/com/reyun/util/CharacterUtils.java new file mode 100644 index 0000000..0f5fb3a --- /dev/null +++ b/src/main/java/com/reyun/util/CharacterUtils.java @@ -0,0 +1,23 @@ +package com.reyun.util; + +import java.util.Random; + +public class CharacterUtils { + + public static String getRandomString(int length){ + String str="abcdefABCDEF0123456789"; + Random random = new Random(); + StringBuffer sb = new StringBuffer(); + + for(int i = 0 ; i < length; ++i){ + int number = random.nextInt(22);//[0,62) + + sb.append(str.charAt(number)); + } + return sb.toString(); + } + + public static void main(String[] args){ + System.out.println(getRandomString(800)); + } +} diff --git a/src/main/java/com/reyun/util/CipherUtil.java b/src/main/java/com/reyun/util/CipherUtil.java new file mode 100644 index 0000000..1050980 --- /dev/null +++ b/src/main/java/com/reyun/util/CipherUtil.java @@ -0,0 +1,83 @@ +package com.reyun.util; + +import java.security.MessageDigest; + +public class CipherUtil { + // 十六进制下数字到字符的映射数组 + private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5", + "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; + + /** * 把inputString加密 */ + public static String generatePassword(String inputString) { + return encodeByMD5(inputString); + } + + /** + * 验证输入的密码是否正确 + * + * @param password + * 加密后的密码 + * @param inputString + * 输入的字符串 + * @return 验证结果,TRUE:正确 FALSE:错误 + */ + public static boolean validatePassword(String password, String inputString) { + if (password.equals(encodeByMD5(inputString))) { + return true; + } else { + return false; + } + } + + /** 对字符串进行MD5加密 */ + private static String encodeByMD5(String originString) { + if (originString != null) { + try { + // 创建具有指定算法名称的信息摘要 + MessageDigest md = MessageDigest.getInstance("MD5"); + // 使用指定的字节数组对摘要进行最后更新,然后完成摘要计算 + byte[] results = md.digest(originString.getBytes()); + // 将得到的字节数组变成字符串返回 + String resultString = byteArrayToHexString(results); + return resultString.toUpperCase(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + return null; + } + + /** + * 转换字节数组为十六进制字符串 + * + * @param b 字节数组 + * @return 十六进制字符串 + */ + private static String byteArrayToHexString(byte[] b) { + StringBuffer resultSb = new StringBuffer(); + for (int i = 0; i < b.length; i++) { + resultSb.append(byteToHexString(b[i])); + } + return resultSb.toString(); + } + + /** 将一个字节转化成十六进制形式的字符串 */ + private static String byteToHexString(byte b) { + int n = b; + if (n < 0) + n = 256 + n; + int d1 = n / 16; + int d2 = n % 16; + return hexDigits[d1] + hexDigits[d2]; + } + + + public static void main(String[] args) { + // String str = generatePassword("123"); + //account.getEmail() +// + resource.getName() + resource.getPlatform() + dateStr + System.out.println(generatePassword("demo@reyun.com金融产品iOS"+DateUtil + .getCurrentDateStr(DateUtil.C_TIME_PATTON_DEFAULT)).toLowerCase()); + } + +} diff --git a/src/main/java/com/reyun/util/Constant.java b/src/main/java/com/reyun/util/Constant.java new file mode 100644 index 0000000..4c72804 --- /dev/null +++ b/src/main/java/com/reyun/util/Constant.java @@ -0,0 +1,48 @@ +package com.reyun.util; + +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.List; +import java.util.ResourceBundle; + + + +public class Constant { + + public static String CURRENT_ACCOUNT = "$CURRENT_ACCOUNT$"; + + public static ResourceBundle resourceBundle = ResourceBundle.getBundle("db"); + public static String dburl = resourceBundle.getString("db.url"); + public static String dbusername = resourceBundle.getString("db.username"); + public static String dbpassword = resourceBundle.getString("db.password"); + public static String dbdriver = resourceBundle.getString("db.driver"); + + public static ResourceBundle resourcePrestoBundle = ResourceBundle.getBundle("presto"); + public static String prestoDriverClass = resourcePrestoBundle.getString("presto.driver"); + public static String prestoUrl = resourcePrestoBundle.getString("presto.url"); + public static String prestoUsername = resourcePrestoBundle.getString("presto.username"); + + public static ResourceBundle resourceHiveBundle = ResourceBundle.getBundle("hive"); + public static String hiveDriverClass = resourceHiveBundle.getString("hive.driver"); + public static String hiveUrl = resourceHiveBundle.getString("hive.url"); + public static String hiveUsername = resourceHiveBundle.getString("hive.username"); + + public static ResourceBundle commonBundle = ResourceBundle.getBundle("common"); + public static String profileTable = commonBundle.getString("profile.table"); + public static String eventTable = commonBundle.getString("event.table"); + public static String usergroupTable = commonBundle.getString("usergroup.table"); + public static String accountCheckUrl = commonBundle.getString("account.check.url"); + + + + public static ResourceBundle mailBundle = ResourceBundle.getBundle("mail"); + public static String mailHost = mailBundle.getString("mail.host"); + public static String mailUsername = mailBundle.getString("mail.username"); + public static String mailPassword = mailBundle.getString("mail.password"); + public static String mailContentType = mailBundle.getString("mail.content_type"); + public static String mailValidTime = mailBundle.getString("mail.valid_time"); + + + public static ResourceBundle redis = ResourceBundle.getBundle("redis"); + public static String REDIS_IP_REQUEST_TIMES = redis.getString("redis.ip.requesttimes"); +} diff --git a/src/main/java/com/reyun/util/DBUtil.java b/src/main/java/com/reyun/util/DBUtil.java new file mode 100644 index 0000000..c8ac7f0 --- /dev/null +++ b/src/main/java/com/reyun/util/DBUtil.java @@ -0,0 +1,230 @@ +package com.reyun.util; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.*; +import java.util.List; +import java.util.ResourceBundle; + +/** + * 数据库工具类 + * @author ruijie liruijie0603@126.com + * @date 2014-11-28 + */ +public class DBUtil { + private final static Logger logger = LoggerFactory.getLogger(DBUtil.class); + + private static DBUtil dbUtil; + + private String driverClass = ""; + private String url = ""; + private String username = ""; + private String password = ""; + + private String prestoDriverClass = ""; + private String prestoUrl = ""; + private String prestoUsername = ""; + + private String hiveDriverClass = ""; + private String hiveUrl = ""; + private String hiveUsername = ""; + + private DBUtil() { + driverClass = Constant.dbdriver; + url = Constant.dburl; + username = Constant.dbusername; + password = Constant.dbpassword; + prestoDriverClass = Constant.prestoDriverClass; + prestoUrl = Constant.prestoUrl; + prestoUsername = Constant.prestoUsername; + hiveDriverClass = Constant.hiveDriverClass; + hiveUrl = Constant.hiveUrl; + hiveUsername = Constant.hiveUsername; + } + + public static DBUtil newInstance() { + if (dbUtil == null) { + dbUtil = new DBUtil(); + } + return dbUtil; + } + + public Connection getConn() { + Connection conn = null; + try { + Class.forName(driverClass); + conn = DriverManager.getConnection(url, username, password); + } catch (ClassNotFoundException e) { + logger.error(e.getMessage(), e); + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } + + return conn; + } + + public Connection getPrestoConn() { + Connection conn = null; + try { + Class.forName(prestoDriverClass); + conn = DriverManager.getConnection(prestoUrl, prestoUsername, + ""); + } catch (ClassNotFoundException e) { + logger.error(e.getMessage(), e); + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } + + return conn; + } + + public Connection getHiveConn() { + Connection conn = null; + try { + Class.forName(hiveDriverClass); + conn = DriverManager.getConnection(hiveUrl, hiveUsername, + ""); + } catch (ClassNotFoundException e) { + logger.error(e.getMessage(), e); + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } + + return conn; + } + + public void insert(String sql) { + Connection conn = getConn(); + Statement statement = null; + try { + statement = conn.createStatement(); + statement.execute(sql); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + try { + if (statement != null) + statement.close(); + if (conn != null) + conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } + + public ResultSet query(String sql) { + Connection conn = getConn(); + Statement statement = null; + ResultSet rs = null; + try { + statement = conn.createStatement(); + rs = statement.executeQuery(sql); + } catch (SQLException e) { + e.printStackTrace(); + } + return rs; + } + + public PreparedStatement getStatement(Connection conn, String sql) { + PreparedStatement pstmt = null; + try { + pstmt = conn.prepareStatement(sql); + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } + return pstmt; + } + + public void release(ResultSet rs, PreparedStatement pstmt, Connection conn) { + try { + if (rs != null) { + rs.close(); + rs = null; + } + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } finally { + try { + if (pstmt != null) { + pstmt.close(); + pstmt = null; + } + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } finally { + try { + if (conn != null) { + conn.close(); + conn = null; + } + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } + } + } + } + + + public static void release(ResultSet rs,Statement pstmt, Connection conn) { + try { + if (rs != null) { + rs.close(); + rs = null; + } + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } finally { + try { + if (pstmt != null) { + pstmt.close(); + pstmt = null; + } + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } finally { + try { + if (conn != null) { + conn.close(); + conn = null; + } + } catch (SQLException e) { + logger.error(e.getMessage(), e); + } + } + } + } + + public void ExcuteNonQueryBatch(List<String> sqlList) { + Connection conn = null; + Statement _Statement = null; + try { + + if (sqlList != null && sqlList.size() > 0) { + conn = getConn(); + conn.setAutoCommit(false); + for (int i = 0; i < sqlList.size(); i++) { + _Statement = conn.createStatement(); + + logger.info(sqlList.get(i)); + _Statement.executeUpdate(sqlList.get(i)); + // System.out.println(sqlList.get(i)); + } + conn.commit(); + } + + } catch (Exception e) { + + try { + if (_Statement != null) + _Statement.close(); + if (conn != null) + conn.close(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/reyun/util/DateUtil.java b/src/main/java/com/reyun/util/DateUtil.java new file mode 100644 index 0000000..4c36d69 --- /dev/null +++ b/src/main/java/com/reyun/util/DateUtil.java @@ -0,0 +1,1518 @@ +package com.reyun.util; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.collect.Maps; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; +import java.util.Map; +import java.util.SimpleTimeZone; +import java.util.TimeZone; + +/** + * 日期转换工具 + */ +public class DateUtil { + protected static Logger logger = LoggerFactory.getLogger(DateUtil.class); + + public static final String C_DATE_DIVISION = "-"; + + public static final String C_TIME_PATTON_DEFAULT = "yyyy-MM-dd HH:mm:ss"; + public static final String C_MIN_PATTON_DEFAULT = "yyyy-MM-dd HH:mm"; + public static final String C_DATE_PATTON_DEFAULT = "yyyy-MM-dd"; + public static final String C_YM_PATTON_DEFAULT = "yyyy-MM"; + public static final String C_DATA_PATTON_YYYYMMDD = "yyyyMMdd"; + public static final String C_DATA_PATTON_MM_DD = "MM-dd"; + public static final String C_DATA_PATTON_MM = "MM"; + public static final String C_DATA_PATTON_HH = "HH"; + public static final String C_TIME_PATTON_HHMM = "HH:mm"; + public static final String C_TIME_PATTON_HHMMSS = "HH:mm:ss"; + public static final String C_TIME_PATTON_HHMMSSMM = "HH:MM:SS:MM"; + public static final int C_ONE_SECOND = 1000; + public static final int C_ONE_MINUTE = 60 * C_ONE_SECOND; + public static final int C_ONE_HOUR = 60 * C_ONE_MINUTE; + public static final long C_ONE_DAY = 24L * C_ONE_HOUR; + + /** + * Return the current date + * + * @return - DATE<br> + */ + public static Date getCurrentDate() { + Calendar cal = Calendar.getInstance(); + Date currDate = cal.getTime(); + + return currDate; + } + + /** + * Return the current date string + * + * @return - 产生的日期字符串<br> + */ + public static String getCurrentDateStr() { + Calendar cal = Calendar.getInstance(); + Date currDate = cal.getTime(); + + return format(currDate); + } + + /** + * Return the current date in the specified format + * + * @param strFormat + * @return + */ + public static String getCurrentDateStr(String strFormat) { + Calendar cal = Calendar.getInstance(); + Date currDate = cal.getTime(); + + return format(currDate, strFormat); + } + + /** + * Parse a string and return a date value + * + * @param dateValue + * @return + * @throws Exception + */ + public static Date parseDate(String dateValue) { + return parseDate(C_DATE_PATTON_DEFAULT, dateValue); + } + + /** + * Parse a strign and return a datetime value + * + * @param dateValue + * @return + */ + public static Date parseDateTime(String dateValue) { + return parseDate(C_TIME_PATTON_DEFAULT, dateValue); + } + + /** + * Parse a string and return the date value in the specified format + * + * @param strFormat + * @param dateValue + * @return + * @throws ParseException + * @throws Exception + */ + public static Date parseDate(String strFormat, String dateValue) { + if (dateValue == null) + return null; + + if (strFormat == null) + strFormat = C_DATE_PATTON_DEFAULT; + + SimpleDateFormat dateFormat = new SimpleDateFormat(strFormat); + Date newDate = null; + + try { + newDate = dateFormat.parse(dateValue); + } catch (ParseException pe) { + newDate = null; + } + + return newDate; + } + + /** + * 将Timestamp类型的日期转换为系统参数定义的格式的字符串。 + * + * @param aTs_Datetime + * 需要转换的日期。 + * @return 转换后符合给定格式的日期字符串 + */ + public static String format(Date aTs_Datetime) { + return format(aTs_Datetime, C_DATE_PATTON_DEFAULT); + } + + public static String formatMin(Date aTs_Datetime) { + return format(aTs_Datetime, C_MIN_PATTON_DEFAULT); + } + + /** + * 将Timestamp类型的日期转换为系统参数定义的格式的字符串。 + * + * @param aTs_Datetime + * 需要转换的日期。 + * @return 转换后符合给定格式的日期字符串 + */ + public static String formatTime(Date aTs_Datetime) { + return format(aTs_Datetime, C_TIME_PATTON_DEFAULT); + } + + /** + * 将Date类型的日期转换为系统参数定义的格式的字符串。 + * + * @param aTs_Datetime + * @param as_Pattern + * @return + */ + public static String format(Date aTs_Datetime, String as_Pattern) { + if (aTs_Datetime == null || as_Pattern == null) + return null; + + SimpleDateFormat dateFromat = new SimpleDateFormat(); + dateFromat.applyPattern(as_Pattern); + + return dateFromat.format(aTs_Datetime); + } + + /** + * @param aTs_Datetime + * @param as_Format + * @return + */ + public static String formatTime(Date aTs_Datetime, String as_Format) { + if (aTs_Datetime == null || as_Format == null) + return null; + + SimpleDateFormat dateFromat = new SimpleDateFormat(); + dateFromat.applyPattern(as_Format); + + return dateFromat.format(aTs_Datetime); + } + + public static String getFormatTime(Date dateTime) { + return formatTime(dateTime, C_TIME_PATTON_HHMMSS); + } + + public static String getFormatDate(Date dateTime) { + return formatTime(dateTime, C_DATE_PATTON_DEFAULT); + } + + public static String getFormatTimeHHMM(Date dateTime) { + return formatTime(dateTime, C_TIME_PATTON_HHMM); + } + + /** + * @param aTs_Datetime + * @param as_Pattern + * @return + */ + public static String format(Timestamp aTs_Datetime, String as_Pattern) { + if (aTs_Datetime == null || as_Pattern == null) + return null; + + SimpleDateFormat dateFromat = new SimpleDateFormat(); + dateFromat.applyPattern(as_Pattern); + + return dateFromat.format(aTs_Datetime); + } + + /** + * 取得指定日期N天后的日期 + * + * @param date + * @param days + * @return + */ + public static Date addDays(Date date, int days) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + + cal.add(Calendar.DAY_OF_MONTH, days); + + return cal.getTime(); + } + + public static Date addMin(Date date, int min) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + + cal.add(Calendar.MINUTE, min); + + return cal.getTime(); + } + + /** + * 计算两个日期之间相差的天数 + * + * @param date1 + * @param date2 + * @return + */ + public static int daysBetween(Date date1, Date date2) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date1); + long time1 = cal.getTimeInMillis(); + cal.setTime(date2); + long time2 = cal.getTimeInMillis(); + long between_days = (time2 - time1) / (1000 * 3600 * 24); + + return Integer.parseInt(String.valueOf(between_days)); + } + + public static int daysBetween(String date1, String date2) + throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar cal = Calendar.getInstance(); + cal.setTime(sdf.parse(date1)); + long time1 = cal.getTimeInMillis(); + cal.setTime(sdf.parse(date2)); + long time2 = cal.getTimeInMillis(); + long between_days = (time2 - time1) / (1000 * 3600 * 24); + + return Integer.parseInt(String.valueOf(between_days)); + } + + /** + * 计算两个日期之间相差的分钟 + * + * @param date1 + * @param date2 + * @return + */ + public static int minBetween(Date date1, Date date2) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date1); + long time1 = cal.getTimeInMillis(); + cal.setTime(date2); + long time2 = cal.getTimeInMillis(); + long between_min = (time2 - time1) / (1000 * 60); + + return Integer.parseInt(String.valueOf(between_min)); + } + + /** + * 计算两个日期之间相差的秒 + * + * @param date1 + * @param date2 + * @return + */ + public static int secondBetween(Date date1, Date date2) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date1); + long time1 = cal.getTimeInMillis(); + cal.setTime(date2); + long time2 = cal.getTimeInMillis(); + long between_sec = (time2 - time1) / 1000; + + return Integer.parseInt(String.valueOf(between_sec)); + } + + public static int minsBetween(Date date2) { + Date date1 = new Date(); + Calendar cal = Calendar.getInstance(); + cal.setTime(date1); + long time1 = cal.getTimeInMillis(); + cal.setTime(date2); + long time2 = cal.getTimeInMillis(); + long between_min = (time2 - time1) / (1000 * 60); + + return Integer.parseInt(String.valueOf(between_min)); + } + + /** + * 计算当前日期相对于"1977-12-01"的天数 + * + * @param date + * @return + */ + public static long getRelativeDays(Date date) { + Date relativeDate = DateUtil.parseDate("yyyy-MM-dd", "1977-12-01"); + + return DateUtil.daysBetween(relativeDate, date); + } + + public static Date getDateBeforTwelveMonth() { + String date = ""; + Calendar cla = Calendar.getInstance(); + cla.setTime(getCurrentDate()); + int year = cla.get(Calendar.YEAR) - 1; + int month = cla.get(Calendar.MONTH) + 1; + if (month > 9) { + date = String.valueOf(year) + C_DATE_DIVISION + + String.valueOf(month) + C_DATE_DIVISION + "01"; + } else { + date = String.valueOf(year) + C_DATE_DIVISION + "0" + + String.valueOf(month) + C_DATE_DIVISION + "01"; + } + + Date dateBefore = parseDate(date); + return dateBefore; + } + + /** + * 传入时间字符串,加一天后返回Date + * + * @param date + * 时间 格式 YYYY-MM-DD + * @return + */ + public static Date addDate(String date, String pattern) { + if (date == null) { + return null; + } + + Date tempDate = parseDate(pattern, date); + String year = format(tempDate, "yyyy"); + String month = format(tempDate, "MM"); + String day = format(tempDate, "dd"); + + GregorianCalendar calendar = new GregorianCalendar( + Integer.parseInt(year), Integer.parseInt(month) - 1, + Integer.parseInt(day)); + + calendar.add(GregorianCalendar.DATE, 1); + return calendar.getTime(); + } + + public static String dateToStr(long ll) { + + // long hour=dd/3600000; + // long min=(dd%3600000)/60000; + // long sec=((dd%3600000)%60000)/1000; + // long mil=((dd%3600000)%60000)%1000; + double dd = ll; + String ss = String.valueOf(dd / 1000) + " 秒"; + return ss; + } + + public static int compare_date(String DATE1, String DATE2) { + + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date dt1 = df.parse(DATE1); + Date dt2 = df.parse(DATE2); + if (dt1.getTime() > dt2.getTime()) { + // System.out.println("DATE1 大于 DATE2"); + return 1; + } else if (dt1.getTime() < dt2.getTime()) { + // System.out.println("DATE1 小于 DATE2"); + return -1; + } else { + return 0; + } + } catch (Exception exception) { + logger.error(exception.getMessage()); + } + return 0; + } + + public static int compareDate(String dt1, String dt2) { + Date d1 = parseDate(null, dt1); + Date d2 = parseDate(null, dt2); + return compareDate(d1, d2); + } + + public static int compareDate(Date dt1, Date dt2) { + + try { + + if (dt1.getTime() > dt2.getTime()) { + // //System.out.println("DATE1 大于 DATE2"); + return 1; + } else if (dt1.getTime() < dt2.getTime()) { + // //System.out.println("DATE1 小于 DATE2"); + return -1; + } else { + return 0; + } + } catch (Exception exception) { + logger.error(exception.getMessage()); + } + return 0; + } + + public static int compareD(Date dt1) { + Date dt2 = new Date(); + try { + + if (dt1.getTime() > dt2.getTime()) { + // //System.out.println("DATE1 大于 DATE2"); + return 1; + } else if (dt1.getTime() < dt2.getTime()) { + // //System.out.println("DATE1 小于 DATE2"); + return -1; + } else { + return 0; + } + } catch (Exception exception) { + logger.error(exception.getMessage()); + } + return 1; + } + + public static int getW(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int w = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (w == 0) { + w = 7; + } + return w; + } + + // 取得yyyyMMdd字符串 + public static String getYYYYMMDD() { + Date nowDate = new Date(); + return format(nowDate, C_DATA_PATTON_YYYYMMDD); + + } + + public static String stringToString(String strTime, String formatType) + throws ParseException, java.text.ParseException { + SimpleDateFormat formatter = new SimpleDateFormat(formatType); + Date date = null; + date = formatter.parse(strTime); + return format(date); + } + + // 取得yyyyWW(年加周) + public static String getYYYYWW(String dateStr) { + String yyyyWW = dateStr.substring(0, 4); + String MM = dateStr.substring(5, 7); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + try { + Date date = dateFormat.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.setFirstDayOfWeek(Calendar.MONDAY); + calendar.setMinimalDaysInFirstWeek(4); + int w = calendar.get(Calendar.WEEK_OF_YEAR); + if (w == 0) { + w = 1; + } + String week = ""; + if (w < 10) { + week = "0" + w; + } else { + week = "" + w; + } + if (MM.equals("12") && week.equals("01")) { + yyyyWW = String.valueOf(Integer.parseInt(yyyyWW) + 1); + } else if (MM.equals("01") && (week.equals("53") || week.equals("52"))) { + yyyyWW = String.valueOf(Integer.parseInt(yyyyWW) - 1); + } + yyyyWW = yyyyWW + week; + } catch (Exception e) { + logger.error(e.getMessage()); + } + return yyyyWW; + + } + + // 取得yyyyWW(年加周) + public static String getYYYYW(String dateStr) { + String yyyyW = dateStr.substring(0, 4); + String MM = dateStr.substring(5, 7); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + try { + Date date = dateFormat.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.setMinimalDaysInFirstWeek(4); + calendar.setFirstDayOfWeek(Calendar.MONDAY); + int w = calendar.get(Calendar.WEEK_OF_YEAR); + if (w == 0) { + w = 1; + } + String week = ""; + week = "" + w; + + if (MM.equals("12") && week.equals("1")) { + yyyyW = String.valueOf(Integer.parseInt(yyyyW) + 1); + } + yyyyW = yyyyW + week; + } catch (Exception e) { + logger.error(e.getMessage()); + } + return yyyyW; + + } + + // 取得yyyyWW(年加周) + public static String getYYYY_WW(String dateStr) { + String yyyyWW = dateStr.substring(0, 4); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + try { + Date date = dateFormat.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.setFirstDayOfWeek(Calendar.MONDAY); + calendar.setMinimalDaysInFirstWeek(4); + int w = calendar.get(Calendar.WEEK_OF_YEAR); + String week = ""; + if (w < 10) { + week = "0" + w; + } else { + week = "" + w; + } + yyyyWW = yyyyWW + "-" + week; + } catch (Exception e) { + logger.error(e.getMessage()); + } + return yyyyWW; + + } + + public static String getYYYYMM(String dateStr) { + String yyyyMM = dateStr.substring(0, 4); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + try { + Date date = dateFormat.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int m = calendar.get(Calendar.MONTH) + 1; + String month = ""; + if (m < 10) { + month = "0" + m; + } else { + month = "" + m; + } + yyyyMM = yyyyMM + month; + } catch (Exception e) { + logger.error(e.getMessage()); + } + return yyyyMM; + + } + + public static String getMM(String dateStr) { + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + String month = ""; + try { + Date date = dateFormat.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int m = calendar.get(Calendar.MONTH) + 1; + + if (m < 10) { + month = "0" + m; + } else { + month = "" + m; + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + return month; + + } + + public static String getYYYYM(String dateStr) { + String yyyyM = dateStr.substring(0, 4); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + try { + Date date = dateFormat.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int m = calendar.get(Calendar.MONTH) + 1; + String month = ""; + + month = "" + m; + + yyyyM = yyyyM + month; + } catch (Exception e) { + logger.error(e.getMessage()); + } + return yyyyM; + + } + + public static List<String> getDateInterval(String startDate, String endDate) { + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + List<String> dateIntervaList = new ArrayList<String>(); + + try { + dateIntervaList.add(startDate); + Date start = dateFormat.parse(startDate); + Date end = dateFormat.parse(endDate); + + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(start); + + Calendar endCalendar = Calendar.getInstance(); + endCalendar.setTime(end); + + Calendar tempCalendar = startCalendar; + + tempCalendar.add(Calendar.DAY_OF_YEAR, 1); + while (tempCalendar.before(endCalendar)) { + dateIntervaList.add(dateFormat.format(tempCalendar.getTime())); + tempCalendar.add(Calendar.DAY_OF_YEAR, 1); + } + if (!startDate.equals(endDate)) { + dateIntervaList.add(endDate); + } + + } catch (ParseException e) { + logger.error(e.getMessage()); + } + + return dateIntervaList; + } + + public static int getWeek(Date date) { + Calendar c = new GregorianCalendar(); + c.setFirstDayOfWeek(Calendar.MONDAY); + c.setMinimalDaysInFirstWeek(4); + c.setTime(date); + c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday + return c.get(Calendar.WEEK_OF_YEAR); + } + + /** + * 返回某一天所在月的最后一天的日期 + */ + public static String getLastDayOfMonth(Date date) { + Calendar c = convert(date); + int MaxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + // 按你的要求设置时间 + c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), MaxDay, 23, 59, 59); + return format(c.getTime()); + } + + /** + * 返回某一天所在月的第一天的日期 + */ + public static String getFirstDayOfMonth(Date date) { + Calendar c = convert(date); + // 按你的要求设置时间 + c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), 1, 23, 59, 59); + return format(c.getTime()); + } + + /** + * 将日期转换为日历 + * + * @param date + * 日期 + * @return 日历 + */ + private static Calendar convert(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + return calendar; + } + + public static boolean isLastDayOfMonth(Date date) { + Calendar c = Calendar.getInstance(); + c.setTime(date); + if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DAY_OF_MONTH)) { + return true; + } else { + return false; + } + } + + public static String conditionFormat(String str) { + str = "'" + str.replaceAll(",", "','") + "'"; + return str; + } + + // 取得MM-dd字符串 + public static String getMMDD() { + Date nowDate = new Date(); + return format(nowDate, C_DATA_PATTON_MM_DD); + + } + + // 取得hh字符串 + public static String getHH() { + Date nowDate = new Date(); + return format(nowDate, C_DATA_PATTON_HH); + + } + + public static int getHH(String dateValue) { + Date date = parseDateTime(dateValue); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int hh = cal.get(Calendar.HOUR_OF_DAY); + return hh; + } + + public static String addOneDay(String dateValue, String format) { + if (!"".equals(format)) { + return format(addDate(dateValue, format), format); + + } + return format(addDate(dateValue, C_DATE_PATTON_DEFAULT), + C_DATE_PATTON_DEFAULT); + } + + public static String getBeforeMonth() { + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(new Date()); + startCalendar.add(Calendar.DAY_OF_YEAR, -30); + String beforeMonth = format(startCalendar.getTime(), + C_DATA_PATTON_YYYYMMDD); + return beforeMonth; + } + + public static String getBeforeDays(int days) { + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(new Date()); + startCalendar.add(Calendar.DAY_OF_YEAR, -days); + String beforeDays = format(startCalendar.getTime(), + C_DATE_PATTON_DEFAULT); + return beforeDays; + } + + public static String getBeforeDays(String date, int days) { + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(parseDate(date)); + startCalendar.add(Calendar.DAY_OF_YEAR, -days); + String beforeDays = format(startCalendar.getTime(), + C_DATE_PATTON_DEFAULT); + return beforeDays; + } + + public static String getBeforeWeeks(int weeks) { + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.setTime(new Date()); + startCalendar.setMinimalDaysInFirstWeek(4); + startCalendar.add(Calendar.WEEK_OF_YEAR, -weeks); + String year = startCalendar.get(Calendar.YEAR) + ""; + int w = startCalendar.get(Calendar.WEEK_OF_YEAR); + String week = ""; + if (w < 10) { + week = "0" + w; + } else { + week = "" + w; + } + // System.out.println(year + week); + return year + week; + } + + public static String getAfterWeeks(String dateStr, int weeks) { + SimpleDateFormat sdf = new SimpleDateFormat(C_DATE_PATTON_DEFAULT); + Date date = null; + try { + date = sdf.parse(dateStr); + } catch (ParseException e) { + logger.error(e.getMessage()); + } + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.setMinimalDaysInFirstWeek(4); + startCalendar.setTime(date); + if (weeks != 0) { + startCalendar.add(Calendar.WEEK_OF_YEAR, weeks); + String year = startCalendar.get(Calendar.YEAR) + ""; + int w = startCalendar.get(Calendar.WEEK_OF_YEAR); + if (w < 10) { + return year + "0" + w; + } else { + return year + w; + } + } else { + return getYYYYWW(format(date)); + } + } + + public static String getBeforeWeeks(String end, int weeks) { + Calendar endCalendar = Calendar.getInstance(); + int endyear = Integer.valueOf(end.substring(0, 4)); + int endweek = Integer.valueOf(end.length() == 5 ? end.substring(4, 5) + : end.substring(4, 6)); + endCalendar.setWeekDate(endyear, endweek, Calendar.MONDAY); + endCalendar.setMinimalDaysInFirstWeek(4); + + endCalendar.add(Calendar.WEEK_OF_YEAR, -weeks); + String year = endCalendar.get(Calendar.YEAR) + ""; + int w = endCalendar.get(Calendar.WEEK_OF_YEAR); + return year + w; + } + + public static String getBeforeMonths(String end, int months) { + Calendar endCalendar = Calendar.getInstance(); + int endyear = Integer.valueOf(end.substring(0, 4)); + int endmonth = Integer.valueOf(end.length() == 5 ? end.substring(4, 5) + : end.substring(4, 6)); + endCalendar.set(Calendar.YEAR, endyear); + endCalendar.set(Calendar.MONTH, endmonth); + if (months > 0) { + endCalendar.add(Calendar.MONTH, -months); + String year = endCalendar.get(Calendar.YEAR) + ""; + int m = endCalendar.get(Calendar.MONTH); + if (m < 10) { + return year + "0" + m; + } else { + return year + m; + } + } else { + endCalendar.set(Calendar.MONTH, endmonth - 1); + System.out.println(format(endCalendar.getTime())); + return getYYYYMM(format(endCalendar.getTime())); + } + } + + public static List<String> getWeeks(String start, String end) { + Calendar startCalendar = Calendar.getInstance(); + int startyear = Integer.valueOf(start.substring(0, 4)); + int startweek = Integer.valueOf(start.length() == 5 ? start.substring( + 4, 5) : start.substring(4, 6)); + startCalendar.setWeekDate(startyear, startweek, Calendar.MONDAY); + startCalendar.setMinimalDaysInFirstWeek(4); + + Calendar endCalendar = Calendar.getInstance(); + int endyear = Integer.valueOf(end.substring(0, 4)); + int endweek = Integer.valueOf(end.length() == 5 ? end.substring(4, 5) + : end.substring(4, 6)); + endCalendar.setWeekDate(endyear, endweek, Calendar.MONDAY); + endCalendar.setMinimalDaysInFirstWeek(4); + + Calendar tempCalendar = startCalendar; + + List<String> weeks = new ArrayList<String>(); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + if (startyear == 2016) + tempCalendar.add(Calendar.DAY_OF_YEAR, 7); + while (tempCalendar.before(endCalendar)) { + if (!weeks.contains(getYYYYWW(dateFormat.format(tempCalendar + .getTime())))) + weeks.add(getYYYYWW(dateFormat.format(tempCalendar.getTime()))); + tempCalendar.add(Calendar.DAY_OF_YEAR, 7); + } + if (startCalendar.equals(endCalendar)) { + if (!weeks.contains(getYYYYWW(dateFormat.format(startCalendar + .getTime())))) + weeks.add(getYYYYWW(dateFormat.format(startCalendar.getTime()))); + } + if (!weeks.contains(end)) { + weeks.add(end); + } + return weeks; + } + + public static List<String> getMonths(String start, String end) { + Calendar startCalendar = Calendar.getInstance(); + int startyear = Integer.valueOf(start.substring(0, 4)); + int startmonth = Integer.valueOf(start.length() == 5 ? start.substring( + 4, 5) : start.substring(4, 6)); + startCalendar.set(Calendar.YEAR, startyear); + startCalendar.set(Calendar.MONTH, startmonth - 1); + + Calendar endCalendar = Calendar.getInstance(); + int endyear = Integer.valueOf(end.substring(0, 4)); + int endmonth = Integer.valueOf(end.length() == 5 ? end.substring(4, 5) + : end.substring(4, 6)); + endCalendar.set(Calendar.YEAR, endyear); + endCalendar.set(Calendar.MONTH, endmonth - 1); + + Calendar tempCalendar = startCalendar; + + List<String> months = new ArrayList<String>(); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + + while (tempCalendar.before(endCalendar)) { + if (!months.contains(getYYYYMM(dateFormat.format(tempCalendar + .getTime())))) + months.add(getYYYYMM(dateFormat.format(tempCalendar.getTime()))); + tempCalendar.add(Calendar.DAY_OF_YEAR, + tempCalendar.getActualMaximum(Calendar.DATE) - 1); + } + if (startCalendar.equals(endCalendar)) { + if (!months.contains(getYYYYMM(dateFormat.format(startCalendar + .getTime())))) + months.add(getYYYYMM(dateFormat.format(startCalendar.getTime()))); + } + if (!months.contains(end)) { + months.add(end); + } + return months; + } + + public static String getBeforeMonths(int months) { + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(new Date()); + startCalendar.add(Calendar.MONTH, -months); + String year = startCalendar.get(Calendar.YEAR) + ""; + int m = startCalendar.get(Calendar.MONTH); + m = m + 1; + String month = ""; + if (m < 10) { + month = "0" + m; + } else { + month = "" + m; + } + // System.out.println(year + month); + return year + month; + } + + public static String getAfterMonths(String dateStr, int months) { + Date date = DateUtil.parseDate(dateStr); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(date); + int oldm = startCalendar.get(Calendar.MONTH); + logger.debug((oldm+1)+""); + logger.debug(startCalendar.get(Calendar.YEAR) + ""); + startCalendar.add(Calendar.MONTH, months); + int m = startCalendar.get(Calendar.MONTH); + m = m + 1; + logger.debug(m+""); + String month = ""; + if (m < 10) { + month = "0" + m; + } else { + month = "" + m; + } + logger.debug(startCalendar.get(Calendar.YEAR) + ""); + String year = startCalendar.get(Calendar.YEAR) + ""; + // System.out.println(year + month); + return year + month; + } + + public static String convertWeekToDate(String dateStr) { + String year = dateStr.substring(0, 4); + String week = ""; + if (dateStr.length() == 5) { + week = dateStr.substring(4, 5); + } else { + week = dateStr.substring(4, 6); + } + int w = Integer.valueOf(week); + int y = Integer.valueOf(year); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.set(Calendar.YEAR, y); + startCalendar.set(Calendar.WEEK_OF_YEAR, w); + startCalendar.setMinimalDaysInFirstWeek(4); + // String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD ); + Date day = startCalendar.getTime(); + + String firstDay = format(getFirstDayOfWeek(day), C_DATE_PATTON_DEFAULT); + String lastDay = format(getLastDayOfWeek(day), C_DATE_PATTON_DEFAULT); + return firstDay + "至" + lastDay; + + } + + /** + * 获取某一周号的第一天. + * + * @param weekStr + * @return + */ + public static String getFirstDayOfWeek(String weekStr) { + String year = weekStr.substring(0, 4); + String week = ""; + if (weekStr.length() == 5) { + week = weekStr.substring(4, 5); + } else { + week = weekStr.substring(4, 6); + } + int w = Integer.valueOf(week); + int y = Integer.valueOf(year); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.set(Calendar.YEAR, y); + startCalendar.set(Calendar.WEEK_OF_YEAR, w); + startCalendar.setMinimalDaysInFirstWeek(4); + // String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD ); + Date day = startCalendar.getTime(); + return format(getFirstDayOfWeek(day), C_DATE_PATTON_DEFAULT); + } + + /** + * 获取某一周号的最后一天. + * + * @param weekStr + * @return + */ + public static String getLastDayOfWeek(String weekStr) { + String year = weekStr.substring(0, 4); + String week = ""; + if (weekStr.length() == 5) { + week = weekStr.substring(4, 5); + } else { + week = weekStr.substring(4, 6); + } + int w = Integer.valueOf(week); + int y = Integer.valueOf(year); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.set(Calendar.YEAR, y); + startCalendar.set(Calendar.WEEK_OF_YEAR, w); + startCalendar.setMinimalDaysInFirstWeek(4); + // String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD ); + Date day = startCalendar.getTime(); + return format(getLastDayOfWeek(day), C_DATE_PATTON_DEFAULT); + } + + /** */ + /** + * 取得某天所在周的第一天 + * + * @param date + * @return + */ + public static Date getFirstDayOfWeek(Date date) { + Calendar c = new GregorianCalendar(); + c.setFirstDayOfWeek(Calendar.MONDAY); + c.setTime(date); + c.setMinimalDaysInFirstWeek(4); + c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); + return c.getTime(); + } + + public static String getFirstDayStrOfWeek(Date date) { + return format(getFirstDayOfWeek(date)); + } + + public static String getLastDayStrOfWeek(Date date) { + return format(getLastDayOfWeek(date)); + } + + /** */ + /** + * 取得某天所在周的最后一天 + * + * @param date + * @return + */ + public static Date getLastDayOfWeek(Date date) { + Calendar c = new GregorianCalendar(); + c.setFirstDayOfWeek(Calendar.MONDAY); + c.setTime(date); + c.setMinimalDaysInFirstWeek(4); + c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); + return c.getTime(); + } + + /** + * 某一个月号第一天和最后一天 + * + * @param date + * @return + */ + public static String getFirstday_Lastday_Month(String dateStr) { + String year = dateStr.substring(0, 4); + String month = ""; + if (dateStr.length() == 5) { + month = dateStr.substring(4, 5); + } else { + month = dateStr.substring(4, 6); + } + int m = Integer.valueOf(month); + int y = Integer.valueOf(year); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.set(Calendar.YEAR, y); + startCalendar.set(Calendar.MONTH, m); + // String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD ); + Date day = startCalendar.getTime(); + + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(day); + calendar.add(Calendar.MONTH, -1); + Date theDate = calendar.getTime(); + + // 第一天 + GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance(); + gcLast.setTime(theDate); + gcLast.set(Calendar.DAY_OF_MONTH, 1); + String day_first = df.format(gcLast.getTime()); + // StringBuffer str = new + // StringBuffer().append(day_first).append(" 00:00:00"); + // day_first = str.toString(); + + // 最后一天 + calendar.add(Calendar.MONTH, 1); // 加一个月 + calendar.set(Calendar.DATE, 1); // 设置为该月第一天 + calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天 + String day_last = df.format(calendar.getTime()); + // StringBuffer endStr = new + // StringBuffer().append(day_last).append(" 23:59:59"); + // day_last = endStr.toString(); + + return day_first + "至" + day_last; + } + + /** + * 某一个月号第一天 + * + * @param date + * @return + */ + public static String getFirstdayOfMonth(String monthno) { + String year = monthno.substring(0, 4); + String month = ""; +// if (monthno.length() == 5) { +// month = monthno.substring(4, 5); +// } else { +// } + month = monthno.substring(4); + int m = Integer.valueOf(month); + int y = Integer.valueOf(year); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.set(Calendar.DATE,1); + startCalendar.set(Calendar.YEAR, y); + startCalendar.set(Calendar.MONTH, m); + // String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD ); + Date day = startCalendar.getTime(); + + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(day); + calendar.add(Calendar.MONTH, -1); + Date theDate = calendar.getTime(); + + // 第一天 + GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance(); + gcLast.setTime(theDate); + gcLast.set(Calendar.DAY_OF_MONTH, 1); + String day_first = df.format(gcLast.getTime()); + + return day_first; + } + + /** + * 某一个月号最后一天 + * + * @param date + * @return + */ + public static String getLastdayOfMonth(String monthno) { + String year = monthno.substring(0, 4); + String month = ""; + if (monthno.length() == 5) { + month = monthno.substring(4, 5); + } else { + month = monthno.substring(4, 6); + } + int m = Integer.valueOf(month); + int y = Integer.valueOf(year); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.set(Calendar.DATE,1); + startCalendar.set(Calendar.YEAR, y); + startCalendar.set(Calendar.MONTH, m); + // String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD ); + Date day = startCalendar.getTime(); + + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(day); + calendar.add(Calendar.MONTH, -1); + + // 最后一天 + calendar.add(Calendar.MONTH, 1); // 加一个月 + calendar.set(Calendar.DATE, 1); // 设置为该月第一天 + calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天 + String day_last = df.format(calendar.getTime()); + + return day_last; + } + + public static long getMillons(String hh, String mm) { + SimpleDateFormat sdf = new SimpleDateFormat(C_MIN_PATTON_DEFAULT); + sdf.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC")); + + Date nowDate = new Date(); + String date = format(nowDate, C_DATE_PATTON_DEFAULT); + date = date + " " + hh + ":" + mm; + // System.out.println(date); + + Date date2=parseDate(C_MIN_PATTON_DEFAULT, date); + + Date utcDate = null; + try { + utcDate = sdf.parse(date); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return utcDate.getTime(); + } + + public static long getMillons(String date) { + SimpleDateFormat sdf = new SimpleDateFormat(C_DATA_PATTON_YYYYMMDD); + sdf.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC")); + + Date utcDate = null; + try { + utcDate = sdf.parse(date); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return utcDate.getTime(); + } + + public static Date getFirstRunTime(String time) { + long daySpan = 24L * 60 * 60 * 1000; + // 规定的每天时间15:33:30运行 + final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd '" + time + + ":00:00'"); + // 首次运行时间 + Date startTime = null; + try { + startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf + .format(new Date())); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + // 如果今天的已经过了 首次运行时间就改为明天 + if (System.currentTimeMillis() > startTime.getTime()) { + startTime = new Date(startTime.getTime() + daySpan); + } + return startTime; + } + + public static List<String> getEveryWeek(String startDate, String endDate) { + List<String> wwSet = new ArrayList<String>(); + List<String> everyday = getDateInterval(startDate, endDate); + String _yyyyww; + for (String date : everyday) { + _yyyyww = getYYYYWW(date); + // if (_yyyyww.substring(4, 5).equals("0")) { + // if (!wwSet.contains(getYYYYW(date))) + // wwSet.add(getYYYYW(date)); + // } else { + // } + if (!wwSet.contains(_yyyyww)) + wwSet.add(_yyyyww); + } + return wwSet; + } + + // public static List<String> getEveryWeekBySE(String start, String end) { + // + // } + + public static List<String> getEveryMonth(String startDate, String endDate) { + List<String> mmSet = new ArrayList<String>(); + List<String> everyday = getDateInterval(startDate, endDate); + String _yyyymm; + for (String date : everyday) { + _yyyymm = getYYYYMM(date); + // if (_yyyymm.substring(4, 5).equals("0")) { + // if (!mmSet.contains(getYYYYM(date))) + // mmSet.add(getYYYYM(date)); + // } else { + // } + if (!mmSet.contains(_yyyymm)) + mmSet.add(_yyyymm); + } + return mmSet; + } + + public static List<String> getTimeIntegval() { + List<String> timeList = new ArrayList<String>(); + String _i, _j, _t; + + for (int i = 0; i < 24; i++) { + if (i < 10) { + _i = "0" + i; + } else { + _i = i + ""; + } + for (int j = 0; j < 60; j++) { + if (j % 5 == 0) { + if (j < 10) { + _j = "0" + j; + } else { + _j = j + ""; + } + _t = _i + ":" + _j; + timeList.add(_t); + } + } + } + return timeList; + } + + /** + * 当前时间点>=10,返回昨天;否则返回前天. + * + * @return 昨天或者前天. + */ + public static String getIDFAQueryDate() { + Date date = new Date(); + int time = date.getHours(); + if (time >= 10) { + return getBeforeDays(1); + } else { + return getBeforeDays(2); + } + } + + private static DateFormat format = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + + /** + * 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm"<br /> + * 如果获取失败,返回null + * + * @return + */ + public static String getUTCTimeStr() { + StringBuilder UTCTimeBuffer = new StringBuilder(); + // 1、取得本地时间: + Calendar cal = Calendar.getInstance(); + // 2、取得时间偏移量: + int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET); + // 3、取得夏令时差: + int dstOffset = cal.get(java.util.Calendar.DST_OFFSET); + // 4、从本地时间里扣除这些差量,即可以取得UTC时间: + cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset)); + System.out.println(cal.getTimeInMillis()); + int year = cal.get(Calendar.YEAR); + int month = cal.get(Calendar.MONTH) + 1; + int day = cal.get(Calendar.DAY_OF_MONTH); + int hour = cal.get(Calendar.HOUR_OF_DAY); + int minute = cal.get(Calendar.MINUTE); + int seconds = cal.get(Calendar.SECOND); + UTCTimeBuffer.append(year).append("-").append(month).append("-") + .append(day); + UTCTimeBuffer.append(" ").append(hour).append(":").append(minute) + .append(":").append(seconds); + try { + format.parse(UTCTimeBuffer.toString()); + return UTCTimeBuffer.toString(); + } catch (ParseException e) { + logger.error(e.getMessage()); + } + return null; + } + + /** + * 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm"<br /> + * 如果获取失败,返回null + * + * @return + */ + public static long getUTCTimeLong() { + StringBuilder UTCTimeBuffer = new StringBuilder(); + // 1、取得本地时间: + Calendar cal = Calendar.getInstance(); + // 2、取得时间偏移量: + int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET); + // 3、取得夏令时差: + int dstOffset = cal.get(java.util.Calendar.DST_OFFSET); + // 4、从本地时间里扣除这些差量,即可以取得UTC时间: + cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset)); + return cal.getTimeInMillis(); + } + + /** + * 将UTC时间转换为东八区时间 + * + * @param UTCTime + * @return + */ + public static String getLocalTimeFromUTC(String UTCTime) { + java.util.Date UTCDate = null; + String localTimeStr = null; + try { + UTCDate = format.parse(UTCTime); + format.setTimeZone(TimeZone.getTimeZone("GMT-8")); + localTimeStr = format.format(UTCDate); + } catch (ParseException e) { + logger.error(e.getMessage()); + } + + return localTimeStr; + } + + /** + * 将UTC时间转换为东八区时间 + * + * @param UTCTime + * @return + */ + public static String getLocalTimeFromUTC(long UTCTime) { + java.util.Date UTCDate = new Date(UTCTime); + String localTimeStr = null; + format.setTimeZone(TimeZone.getTimeZone("GMT-8")); + localTimeStr = format.format(UTCDate); + + return localTimeStr; + } + + /** + * 秒转化成天时分秒 + * + * @param ms + * @return + */ + public static String formatTime(long ms) { + + int ss = 1000; + int mi = ss * 60; + int hh = mi * 60; + int dd = hh * 24; + + long day = ms / dd; + long hour = (ms - day * dd) / hh; + long minute = (ms - day * dd - hour * hh) / mi; + long second = (ms - day * dd - hour * hh - minute * mi) / ss; + long milliSecond = ms - day * dd - hour * hh - minute * mi - second + * ss; + + String strDay = day < 10 ? "0" + day : "" + day; // 天 + String strHour = hour < 10 ? "0" + hour : "" + hour;// 小时 + String strMinute = minute < 10 ? "0" + minute : "" + minute;// 分钟 + String strSecond = second < 10 ? "0" + second : "" + second;// 秒 + String strMilliSecond = milliSecond < 10 ? "0" + milliSecond : "" + + milliSecond;// 毫秒 + strMilliSecond = milliSecond < 100 ? "0" + strMilliSecond : "" + + strMilliSecond; + + return strDay + " 天 " + strHour + " 时 " + strMinute + " 分钟 " + strSecond + + " 秒"; + } + + public static String parseDateTimeByLong(Long time) { + Date date = new Date(time); + SimpleDateFormat sdf=new SimpleDateFormat(C_TIME_PATTON_DEFAULT); + return sdf.format(date); + } + + public static void main(String[] args) { + // String UTCTimeStr = getUTCTimeStr() ; + // System.out.println(UTCTimeStr); + // System.out.println(getLocalTimeFromUTC(UTCTimeStr)); + // + // System.out.println(getLocalTimeFromUTC(getUTCTimeLong())); + // System.out.println(getFirstDayOfMonth(parseDate("2016-02-03"))); + // System.out.println(getLastDayOfMonth(parseDate("2016-02-03"))); + // + // System.out.println(getFirstday_Lastday_Month("201602")); +// System.out.println(getFirstdayOfMonth("201602")); +// System.out.println(getLastdayOfMonth("201602")); + +// long time = 1494066492782L; +// Date date = new Date(time); +// System.out.println(date); +// +// String newdate = DateUtil.format(date,DateUtil.C_TIME_PATTON_DEFAULT); +// System.out.println(newdate); + System.out.print(DateUtil.getBeforeDays("2017-03-31",-70)); + + } + +} diff --git a/src/main/java/com/reyun/util/DateUtil1.java b/src/main/java/com/reyun/util/DateUtil1.java new file mode 100644 index 0000000..b4e97ac --- /dev/null +++ b/src/main/java/com/reyun/util/DateUtil1.java @@ -0,0 +1,1496 @@ +package com.reyun.util; + +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; +import java.util.SimpleTimeZone; +import java.util.TimeZone; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 日期转换工具 + */ +public class DateUtil1 { + protected static Logger logger = LoggerFactory.getLogger(DateUtil1.class); + + public static final String C_DATE_DIVISION = "-"; + + public static final String C_TIME_PATTON_DEFAULT = "yyyy-MM-dd HH:mm:ss"; + public static final String C_MIN_PATTON_DEFAULT = "yyyy-MM-dd HH:mm"; + public static final String C_DATE_PATTON_DEFAULT = "yyyy-MM-dd"; + public static final String C_YM_PATTON_DEFAULT = "yyyy-MM"; + public static final String C_DATA_PATTON_YYYYMMDD = "yyyyMMdd"; + public static final String C_DATA_PATTON_MM_DD = "MM-dd"; + public static final String C_DATA_PATTON_MM = "MM"; + public static final String C_DATA_PATTON_HH = "HH"; + public static final String C_TIME_PATTON_HHMM = "HH:mm"; + public static final String C_TIME_PATTON_HHMMSS = "HH:mm:ss"; + public static final String C_TIME_PATTON_HHMMSSMM = "HH:MM:SS:MM"; + public static final int C_ONE_SECOND = 1000; + public static final int C_ONE_MINUTE = 60 * C_ONE_SECOND; + public static final int C_ONE_HOUR = 60 * C_ONE_MINUTE; + public static final long C_ONE_DAY = 24L * C_ONE_HOUR; + + /** + * Return the current date + * + * @return - DATE<br> + */ + public static Date getCurrentDate() { + Calendar cal = Calendar.getInstance(); + Date currDate = cal.getTime(); + + return currDate; + } + + /** + * Return the current date string + * + * @return - 产生的日期字符串<br> + */ + public static String getCurrentDateStr() { + Calendar cal = Calendar.getInstance(); + Date currDate = cal.getTime(); + + return format(currDate); + } + + /** + * Return the current date in the specified format + * + * @param strFormat + * @return + */ + public static String getCurrentDateStr(String strFormat) { + Calendar cal = Calendar.getInstance(); + Date currDate = cal.getTime(); + + return format(currDate, strFormat); + } + + /** + * Parse a string and return a date value + * + * @param dateValue + * @return + * @throws Exception + */ + public static Date parseDate(String dateValue) { + return parseDate(C_DATE_PATTON_DEFAULT, dateValue); + } + + /** + * Parse a strign and return a datetime value + * + * @param dateValue + * @return + */ + public static Date parseDateTime(String dateValue) { + return parseDate(C_TIME_PATTON_DEFAULT, dateValue); + } + + /** + * Parse a string and return the date value in the specified format + * + * @param strFormat + * @param dateValue + * @return + * @throws ParseException + * @throws Exception + */ + public static Date parseDate(String strFormat, String dateValue) { + if (dateValue == null) + return null; + + if (strFormat == null) + strFormat = C_DATE_PATTON_DEFAULT; + + SimpleDateFormat dateFormat = new SimpleDateFormat(strFormat); + Date newDate = null; + + try { + newDate = dateFormat.parse(dateValue); + } catch (ParseException pe) { + newDate = null; + } + + return newDate; + } + + /** + * 将Timestamp类型的日期转换为系统参数定义的格式的字符串。 + * + * @param aTs_Datetime + * 需要转换的日期。 + * @return 转换后符合给定格式的日期字符串 + */ + public static String format(Date aTs_Datetime) { + return format(aTs_Datetime, C_DATE_PATTON_DEFAULT); + } + + public static String formatMin(Date aTs_Datetime) { + return format(aTs_Datetime, C_MIN_PATTON_DEFAULT); + } + + /** + * 将Timestamp类型的日期转换为系统参数定义的格式的字符串。 + * + * @param aTs_Datetime + * 需要转换的日期。 + * @return 转换后符合给定格式的日期字符串 + */ + public static String formatTime(Date aTs_Datetime) { + return format(aTs_Datetime, C_TIME_PATTON_DEFAULT); + } + + /** + * 将Date类型的日期转换为系统参数定义的格式的字符串。 + * + * @param aTs_Datetime + * @param as_Pattern + * @return + */ + public static String format(Date aTs_Datetime, String as_Pattern) { + if (aTs_Datetime == null || as_Pattern == null) + return null; + + SimpleDateFormat dateFromat = new SimpleDateFormat(); + dateFromat.applyPattern(as_Pattern); + + return dateFromat.format(aTs_Datetime); + } + + /** + * @param aTs_Datetime + * @param as_Format + * @return + */ + public static String formatTime(Date aTs_Datetime, String as_Format) { + if (aTs_Datetime == null || as_Format == null) + return null; + + SimpleDateFormat dateFromat = new SimpleDateFormat(); + dateFromat.applyPattern(as_Format); + + return dateFromat.format(aTs_Datetime); + } + + public static String getFormatTime(Date dateTime) { + return formatTime(dateTime, C_TIME_PATTON_HHMMSS); + } + + public static String getFormatDate(Date dateTime) { + return formatTime(dateTime, C_DATE_PATTON_DEFAULT); + } + + public static String getFormatTimeHHMM(Date dateTime) { + return formatTime(dateTime, C_TIME_PATTON_HHMM); + } + + /** + * @param aTs_Datetime + * @param as_Pattern + * @return + */ + public static String format(Timestamp aTs_Datetime, String as_Pattern) { + if (aTs_Datetime == null || as_Pattern == null) + return null; + + SimpleDateFormat dateFromat = new SimpleDateFormat(); + dateFromat.applyPattern(as_Pattern); + + return dateFromat.format(aTs_Datetime); + } + + /** + * 取得指定日期N天后的日期 + * + * @param date + * @param days + * @return + */ + public static Date addDays(Date date, int days) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + + cal.add(Calendar.DAY_OF_MONTH, days); + + return cal.getTime(); + } + + public static Date addMin(Date date, int min) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + + cal.add(Calendar.MINUTE, min); + + return cal.getTime(); + } + + /** + * 计算两个日期之间相差的天数 + * + * @param date1 + * @param date2 + * @return + */ + public static int daysBetween(Date date1, Date date2) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date1); + long time1 = cal.getTimeInMillis(); + cal.setTime(date2); + long time2 = cal.getTimeInMillis(); + long between_days = (time2 - time1) / (1000 * 3600 * 24); + + return Integer.parseInt(String.valueOf(between_days)); + } + + public static int daysBetween(String date1, String date2) + throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar cal = Calendar.getInstance(); + cal.setTime(sdf.parse(date1)); + long time1 = cal.getTimeInMillis(); + cal.setTime(sdf.parse(date2)); + long time2 = cal.getTimeInMillis(); + long between_days = (time2 - time1) / (1000 * 3600 * 24); + + return Integer.parseInt(String.valueOf(between_days)); + } + + /** + * 计算两个日期之间相差的分钟 + * + * @param date1 + * @param date2 + * @return + */ + public static int minBetween(Date date1, Date date2) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date1); + long time1 = cal.getTimeInMillis(); + cal.setTime(date2); + long time2 = cal.getTimeInMillis(); + long between_min = (time2 - time1) / (1000 * 60); + + return Integer.parseInt(String.valueOf(between_min)); + } + + /** + * 计算两个日期之间相差的秒 + * + * @param date1 + * @param date2 + * @return + */ + public static int secondBetween(Date date1, Date date2) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date1); + long time1 = cal.getTimeInMillis(); + cal.setTime(date2); + long time2 = cal.getTimeInMillis(); + long between_sec = (time2 - time1) / 1000; + + return Integer.parseInt(String.valueOf(between_sec)); + } + + public static int minsBetween(Date date2) { + Date date1 = new Date(); + Calendar cal = Calendar.getInstance(); + cal.setTime(date1); + long time1 = cal.getTimeInMillis(); + cal.setTime(date2); + long time2 = cal.getTimeInMillis(); + long between_min = (time2 - time1) / (1000 * 60); + + return Integer.parseInt(String.valueOf(between_min)); + } + + /** + * 计算当前日期相对于"1977-12-01"的天数 + * + * @param date + * @return + */ + public static long getRelativeDays(Date date) { + Date relativeDate = DateUtil1.parseDate("yyyy-MM-dd", "1977-12-01"); + + return DateUtil1.daysBetween(relativeDate, date); + } + + public static Date getDateBeforTwelveMonth() { + String date = ""; + Calendar cla = Calendar.getInstance(); + cla.setTime(getCurrentDate()); + int year = cla.get(Calendar.YEAR) - 1; + int month = cla.get(Calendar.MONTH) + 1; + if (month > 9) { + date = String.valueOf(year) + C_DATE_DIVISION + + String.valueOf(month) + C_DATE_DIVISION + "01"; + } else { + date = String.valueOf(year) + C_DATE_DIVISION + "0" + + String.valueOf(month) + C_DATE_DIVISION + "01"; + } + + Date dateBefore = parseDate(date); + return dateBefore; + } + + /** + * 传入时间字符串,加一天后返回Date + * + * @param date + * 时间 格式 YYYY-MM-DD + * @return + */ + public static Date addDate(String date, String pattern) { + if (date == null) { + return null; + } + + Date tempDate = parseDate(pattern, date); + String year = format(tempDate, "yyyy"); + String month = format(tempDate, "MM"); + String day = format(tempDate, "dd"); + + GregorianCalendar calendar = new GregorianCalendar( + Integer.parseInt(year), Integer.parseInt(month) - 1, + Integer.parseInt(day)); + + calendar.add(GregorianCalendar.DATE, 1); + return calendar.getTime(); + } + + public static String dateToStr(long ll) { + + // long hour=dd/3600000; + // long min=(dd%3600000)/60000; + // long sec=((dd%3600000)%60000)/1000; + // long mil=((dd%3600000)%60000)%1000; + double dd = ll; + String ss = String.valueOf(dd / 1000) + " 秒"; + return ss; + } + + public static int compare_date(String DATE1, String DATE2) { + + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date dt1 = df.parse(DATE1); + Date dt2 = df.parse(DATE2); + if (dt1.getTime() > dt2.getTime()) { + // System.out.println("DATE1 大于 DATE2"); + return 1; + } else if (dt1.getTime() < dt2.getTime()) { + // System.out.println("DATE1 小于 DATE2"); + return -1; + } else { + return 0; + } + } catch (Exception exception) { + logger.error(exception.getMessage()); + } + return 0; + } + + public static int compareDate(String dt1, String dt2) { + Date d1 = parseDate(null, dt1); + Date d2 = parseDate(null, dt2); + return compareDate(d1, d2); + } + + public static int compareDate(Date dt1, Date dt2) { + + try { + + if (dt1.getTime() > dt2.getTime()) { + // //System.out.println("DATE1 大于 DATE2"); + return 1; + } else if (dt1.getTime() < dt2.getTime()) { + // //System.out.println("DATE1 小于 DATE2"); + return -1; + } else { + return 0; + } + } catch (Exception exception) { + logger.error(exception.getMessage()); + } + return 0; + } + + public static int compareD(Date dt1) { + Date dt2 = new Date(); + try { + + if (dt1.getTime() > dt2.getTime()) { + // //System.out.println("DATE1 大于 DATE2"); + return 1; + } else if (dt1.getTime() < dt2.getTime()) { + // //System.out.println("DATE1 小于 DATE2"); + return -1; + } else { + return 0; + } + } catch (Exception exception) { + logger.error(exception.getMessage()); + } + return 1; + } + + public static int getW(Date date) { + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int w = cal.get(Calendar.DAY_OF_WEEK) - 1; + if (w == 0) { + w = 7; + } + return w; + } + + // 取得yyyyMMdd字符串 + public static String getYYYYMMDD() { + Date nowDate = new Date(); + return format(nowDate, C_DATA_PATTON_YYYYMMDD); + + } + + public static String stringToString(String strTime, String formatType) + throws ParseException, java.text.ParseException { + SimpleDateFormat formatter = new SimpleDateFormat(formatType); + Date date = null; + date = formatter.parse(strTime); + return format(date); + } + + // 取得yyyyWW(年加周) + public static String getYYYYWW(String dateStr) { + String yyyyWW = dateStr.substring(0, 4); + String MM = dateStr.substring(5, 7); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + try { + Date date = dateFormat.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.setFirstDayOfWeek(Calendar.MONDAY); + calendar.setMinimalDaysInFirstWeek(4); + int w = calendar.get(Calendar.WEEK_OF_YEAR); + if (w == 0) { + w = 1; + } + String week = ""; + if (w < 10) { + week = "0" + w; + } else { + week = "" + w; + } + if (MM.equals("12") && week.equals("01")) { + yyyyWW = String.valueOf(Integer.parseInt(yyyyWW) + 1); + } else if (MM.equals("01") && week.equals("53")) { + yyyyWW = String.valueOf(Integer.parseInt(yyyyWW) - 1); + } + yyyyWW = yyyyWW + week; + } catch (Exception e) { + logger.error(e.getMessage()); + } + return yyyyWW; + + } + + // 取得yyyyWW(年加周) + public static String getYYYYW(String dateStr) { + String yyyyW = dateStr.substring(0, 4); + String MM = dateStr.substring(5, 7); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + try { + Date date = dateFormat.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.setMinimalDaysInFirstWeek(4); + calendar.setFirstDayOfWeek(Calendar.MONDAY); + int w = calendar.get(Calendar.WEEK_OF_YEAR); + if (w == 0) { + w = 1; + } + String week = ""; + week = "" + w; + + if (MM.equals("12") && week.equals("1")) { + yyyyW = String.valueOf(Integer.parseInt(yyyyW) + 1); + } + yyyyW = yyyyW + week; + } catch (Exception e) { + logger.error(e.getMessage()); + } + return yyyyW; + + } + + // 取得yyyyWW(年加周) + public static String getYYYY_WW(String dateStr) { + String yyyyWW = dateStr.substring(0, 4); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + try { + Date date = dateFormat.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.setFirstDayOfWeek(Calendar.MONDAY); + calendar.setMinimalDaysInFirstWeek(4); + int w = calendar.get(Calendar.WEEK_OF_YEAR); + String week = ""; + if (w < 10) { + week = "0" + w; + } else { + week = "" + w; + } + yyyyWW = yyyyWW + "-" + week; + } catch (Exception e) { + logger.error(e.getMessage()); + } + return yyyyWW; + + } + + public static String getYYYYMM(String dateStr) { + String yyyyMM = dateStr.substring(0, 4); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + try { + Date date = dateFormat.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int m = calendar.get(Calendar.MONTH) + 1; + String month = ""; + if (m < 10) { + month = "0" + m; + } else { + month = "" + m; + } + yyyyMM = yyyyMM + month; + } catch (Exception e) { + logger.error(e.getMessage()); + } + return yyyyMM; + + } + + public static String getMM(String dateStr) { + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + String month = ""; + try { + Date date = dateFormat.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int m = calendar.get(Calendar.MONTH) + 1; + + if (m < 10) { + month = "0" + m; + } else { + month = "" + m; + } + + } catch (Exception e) { + logger.error(e.getMessage()); + } + return month; + + } + + public static String getYYYYM(String dateStr) { + String yyyyM = dateStr.substring(0, 4); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + try { + Date date = dateFormat.parse(dateStr); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + int m = calendar.get(Calendar.MONTH) + 1; + String month = ""; + + month = "" + m; + + yyyyM = yyyyM + month; + } catch (Exception e) { + logger.error(e.getMessage()); + } + return yyyyM; + + } + + public static List<String> getDateInterval(String startDate, String endDate) { + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + List<String> dateIntervaList = new ArrayList<String>(); + + try { + dateIntervaList.add(startDate); + Date start = dateFormat.parse(startDate); + Date end = dateFormat.parse(endDate); + + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(start); + + Calendar endCalendar = Calendar.getInstance(); + endCalendar.setTime(end); + + Calendar tempCalendar = startCalendar; + + tempCalendar.add(Calendar.DAY_OF_YEAR, 1); + while (tempCalendar.before(endCalendar)) { + dateIntervaList.add(dateFormat.format(tempCalendar.getTime())); + tempCalendar.add(Calendar.DAY_OF_YEAR, 1); + } + if (!startDate.equals(endDate)) { + dateIntervaList.add(endDate); + } + + } catch (ParseException e) { + logger.error(e.getMessage()); + } + + return dateIntervaList; + } + + public static int getWeek(Date date) { + Calendar c = new GregorianCalendar(); + c.setFirstDayOfWeek(Calendar.MONDAY); + c.setMinimalDaysInFirstWeek(4); + c.setTime(date); + c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday + return c.get(Calendar.WEEK_OF_YEAR); + } + + /** + * 返回某一天所在月的最后一天的日期 + */ + public static String getLastDayOfMonth(Date date) { + Calendar c = convert(date); + int MaxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); + // 按你的要求设置时间 + c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), MaxDay, 23, 59, 59); + return format(c.getTime()); + } + + /** + * 返回某一天所在月的第一天的日期 + */ + public static String getFirstDayOfMonth(Date date) { + Calendar c = convert(date); + // 按你的要求设置时间 + c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), 1, 23, 59, 59); + return format(c.getTime()); + } + + /** + * 将日期转换为日历 + * + * @param date + * 日期 + * @return 日历 + */ + private static Calendar convert(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + return calendar; + } + + public static boolean isLastDayOfMonth(Date date) { + Calendar c = Calendar.getInstance(); + c.setTime(date); + if (c.get(Calendar.DATE) == c.getActualMaximum(Calendar.DAY_OF_MONTH)) { + return true; + } else { + return false; + } + } + + public static String conditionFormat(String str) { + str = "'" + str.replaceAll(",", "','") + "'"; + return str; + } + + // 取得MM-dd字符串 + public static String getMMDD() { + Date nowDate = new Date(); + return format(nowDate, C_DATA_PATTON_MM_DD); + + } + + // 取得hh字符串 + public static String getHH() { + Date nowDate = new Date(); + return format(nowDate, C_DATA_PATTON_HH); + + } + + public static int getHH(String dateValue) { + Date date = parseDateTime(dateValue); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + int hh = cal.get(Calendar.HOUR_OF_DAY); + return hh; + } + + public static String addOneDay(String dateValue, String format) { + if (!"".equals(format)) { + return format(addDate(dateValue, format), format); + + } + return format(addDate(dateValue, C_DATE_PATTON_DEFAULT), + C_DATE_PATTON_DEFAULT); + } + + public static String getBeforeMonth() { + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(new Date()); + startCalendar.add(Calendar.DAY_OF_YEAR, -30); + String beforeMonth = format(startCalendar.getTime(), + C_DATA_PATTON_YYYYMMDD); + return beforeMonth; + } + + public static String getBeforeDays(int days) { + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(new Date()); + startCalendar.add(Calendar.DAY_OF_YEAR, -days); + String beforeDays = format(startCalendar.getTime(), + C_DATE_PATTON_DEFAULT); + return beforeDays; + } + + public static String getBeforeDays(String date, int days) { + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(parseDate(date)); + startCalendar.add(Calendar.DAY_OF_YEAR, -days); + String beforeDays = format(startCalendar.getTime(), + C_DATE_PATTON_DEFAULT); + return beforeDays; + } + + public static String getBeforeWeeks(int weeks) { + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.setTime(new Date()); + startCalendar.setMinimalDaysInFirstWeek(4); + startCalendar.add(Calendar.WEEK_OF_YEAR, -weeks); + String year = startCalendar.get(Calendar.YEAR) + ""; + int w = startCalendar.get(Calendar.WEEK_OF_YEAR); + String week = ""; + if (w < 10) { + week = "0" + w; + } else { + week = "" + w; + } + // System.out.println(year + week); + return year + week; + } + + public static String getAfterWeeks(String dateStr, int weeks) { + SimpleDateFormat sdf = new SimpleDateFormat(C_DATE_PATTON_DEFAULT); + Date date = null; + try { + date = sdf.parse(dateStr); + } catch (ParseException e) { + logger.error(e.getMessage()); + } + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.setMinimalDaysInFirstWeek(4); + startCalendar.setTime(date); + if (weeks != 0) { + startCalendar.add(Calendar.WEEK_OF_YEAR, weeks); + String year = startCalendar.get(Calendar.YEAR) + ""; + int w = startCalendar.get(Calendar.WEEK_OF_YEAR); + if (w < 10) { + return year + "0" + w; + } else { + return year + w; + } + } else { + return getYYYYWW(format(date)); + } + } + + public static String getBeforeWeeks(String end, int weeks) { + Calendar endCalendar = Calendar.getInstance(); + int endyear = Integer.valueOf(end.substring(0, 4)); + int endweek = Integer.valueOf(end.length() == 5 ? end.substring(4, 5) + : end.substring(4, 6)); + endCalendar.setWeekDate(endyear, endweek, Calendar.MONDAY); + endCalendar.setMinimalDaysInFirstWeek(4); + + endCalendar.add(Calendar.WEEK_OF_YEAR, -weeks); + String year = endCalendar.get(Calendar.YEAR) + ""; + int w = endCalendar.get(Calendar.WEEK_OF_YEAR); + return year + w; + } + + public static String getBeforeMonths(String end, int months) { + Calendar endCalendar = Calendar.getInstance(); + int endyear = Integer.valueOf(end.substring(0, 4)); + int endmonth = Integer.valueOf(end.length() == 5 ? end.substring(4, 5) + : end.substring(4, 6)); + endCalendar.set(Calendar.YEAR, endyear); + endCalendar.set(Calendar.MONTH, endmonth); + if (months > 0) { + endCalendar.add(Calendar.MONTH, -months); + String year = endCalendar.get(Calendar.YEAR) + ""; + int m = endCalendar.get(Calendar.MONTH); + if (m < 10) { + return year + "0" + m; + } else { + return year + m; + } + } else { + endCalendar.set(Calendar.MONTH, endmonth - 1); + System.out.println(format(endCalendar.getTime())); + return getYYYYMM(format(endCalendar.getTime())); + } + } + + public static List<String> getWeeks(String start, String end) { + Calendar startCalendar = Calendar.getInstance(); + int startyear = Integer.valueOf(start.substring(0, 4)); + int startweek = Integer.valueOf(start.length() == 5 ? start.substring( + 4, 5) : start.substring(4, 6)); + startCalendar.setWeekDate(startyear, startweek, Calendar.MONDAY); + startCalendar.setMinimalDaysInFirstWeek(4); + + Calendar endCalendar = Calendar.getInstance(); + int endyear = Integer.valueOf(end.substring(0, 4)); + int endweek = Integer.valueOf(end.length() == 5 ? end.substring(4, 5) + : end.substring(4, 6)); + endCalendar.setWeekDate(endyear, endweek, Calendar.MONDAY); + endCalendar.setMinimalDaysInFirstWeek(4); + + Calendar tempCalendar = startCalendar; + + List<String> weeks = new ArrayList<String>(); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + tempCalendar.add(Calendar.DAY_OF_YEAR, 7); + while (tempCalendar.before(endCalendar)) { + if (!weeks.contains(getYYYYWW(dateFormat.format(tempCalendar + .getTime())))) + weeks.add(getYYYYWW(dateFormat.format(tempCalendar.getTime()))); + tempCalendar.add(Calendar.DAY_OF_YEAR, 7); + } + if (startCalendar.equals(endCalendar)) { + if (!weeks.contains(getYYYYWW(dateFormat.format(startCalendar + .getTime())))) + weeks.add(getYYYYWW(dateFormat.format(startCalendar.getTime()))); + } + if (!weeks.contains(end)) { + weeks.add(end); + } + return weeks; + } + + public static List<String> getMonths(String start, String end) { + Calendar startCalendar = Calendar.getInstance(); + int startyear = Integer.valueOf(start.substring(0, 4)); + int startmonth = Integer.valueOf(start.length() == 5 ? start.substring( + 4, 5) : start.substring(4, 6)); + startCalendar.set(Calendar.YEAR, startyear); + startCalendar.set(Calendar.MONTH, startmonth - 1); + + Calendar endCalendar = Calendar.getInstance(); + int endyear = Integer.valueOf(end.substring(0, 4)); + int endmonth = Integer.valueOf(end.length() == 5 ? end.substring(4, 5) + : end.substring(4, 6)); + endCalendar.set(Calendar.YEAR, endyear); + endCalendar.set(Calendar.MONTH, endmonth - 1); + + Calendar tempCalendar = startCalendar; + + List<String> months = new ArrayList<String>(); + SimpleDateFormat dateFormat = new SimpleDateFormat( + C_DATE_PATTON_DEFAULT); + + while (tempCalendar.before(endCalendar)) { + if (!months.contains(getYYYYMM(dateFormat.format(tempCalendar + .getTime())))) + months.add(getYYYYMM(dateFormat.format(tempCalendar.getTime()))); + tempCalendar.add(Calendar.DAY_OF_YEAR, + tempCalendar.getActualMaximum(Calendar.DATE) - 1); + } + if (startCalendar.equals(endCalendar)) { + if (!months.contains(getYYYYMM(dateFormat.format(startCalendar + .getTime())))) + months.add(getYYYYMM(dateFormat.format(startCalendar.getTime()))); + } + if (!months.contains(end)) { + months.add(end); + } + return months; + } + + public static String getBeforeMonths(int months) { + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(new Date()); + startCalendar.add(Calendar.MONTH, -months); + String year = startCalendar.get(Calendar.YEAR) + ""; + int m = startCalendar.get(Calendar.MONTH); + m = m + 1; + String month = ""; + if (m < 10) { + month = "0" + m; + } else { + month = "" + m; + } + // System.out.println(year + month); + return year + month; + } + + public static String getAfterMonths(String dateStr, int months) { + SimpleDateFormat sdf = new SimpleDateFormat(C_DATA_PATTON_YYYYMMDD); + Date date = null; + try { + date = sdf.parse(dateStr); + } catch (ParseException e) { + logger.error(e.getMessage()); + } + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setTime(date); + startCalendar.add(Calendar.MONTH, months); + String year = startCalendar.get(Calendar.YEAR) + ""; + int m = startCalendar.get(Calendar.MONTH); + m = m + 1; + String month = ""; + if (m < 10) { + month = "0" + m; + } else { + month = "" + m; + } + // System.out.println(year + month); + return year + month; + } + + public static String convertWeekToDate(String dateStr) { + String year = dateStr.substring(0, 4); + String week = ""; + if (dateStr.length() == 5) { + week = dateStr.substring(4, 5); + } else { + week = dateStr.substring(4, 6); + } + int w = Integer.valueOf(week); + int y = Integer.valueOf(year); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.set(Calendar.YEAR, y); + startCalendar.set(Calendar.WEEK_OF_YEAR, w); + startCalendar.setMinimalDaysInFirstWeek(4); + // String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD ); + Date day = startCalendar.getTime(); + + String firstDay = format(getFirstDayOfWeek(day), C_DATE_PATTON_DEFAULT); + String lastDay = format(getLastDayOfWeek(day), C_DATE_PATTON_DEFAULT); + return firstDay + "至" + lastDay; + + } + + /** + * 获取某一周号的第一天. + * + * @param weekStr + * @return + */ + public static String getFirstDayOfWeek(String weekStr) { + String year = weekStr.substring(0, 4); + String week = ""; + if (weekStr.length() == 5) { + week = weekStr.substring(4, 5); + } else { + week = weekStr.substring(4, 6); + } + int w = Integer.valueOf(week); + int y = Integer.valueOf(year); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.set(Calendar.YEAR, y); + startCalendar.set(Calendar.WEEK_OF_YEAR, w); + startCalendar.setMinimalDaysInFirstWeek(4); + // String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD ); + Date day = startCalendar.getTime(); + return format(getFirstDayOfWeek(day), C_DATE_PATTON_DEFAULT); + } + + /** + * 获取某一周号的最后一天. + * + * @param weekStr + * @return + */ + public static String getLastDayOfWeek(String weekStr) { + String year = weekStr.substring(0, 4); + String week = ""; + if (weekStr.length() == 5) { + week = weekStr.substring(4, 5); + } else { + week = weekStr.substring(4, 6); + } + int w = Integer.valueOf(week); + int y = Integer.valueOf(year); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.set(Calendar.YEAR, y); + startCalendar.set(Calendar.WEEK_OF_YEAR, w); + startCalendar.setMinimalDaysInFirstWeek(4); + // String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD ); + Date day = startCalendar.getTime(); + return format(getLastDayOfWeek(day), C_DATE_PATTON_DEFAULT); + } + + /** */ + /** + * 取得某天所在周的第一天 + * + * @param date + * @return + */ + public static Date getFirstDayOfWeek(Date date) { + Calendar c = new GregorianCalendar(); + c.setFirstDayOfWeek(Calendar.MONDAY); + c.setTime(date); + c.setMinimalDaysInFirstWeek(4); + c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); + return c.getTime(); + } + + /** */ + /** + * 取得某天所在周的最后一天 + * + * @param date + * @return + */ + public static Date getLastDayOfWeek(Date date) { + Calendar c = new GregorianCalendar(); + c.setFirstDayOfWeek(Calendar.MONDAY); + c.setTime(date); + c.setMinimalDaysInFirstWeek(4); + c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); + return c.getTime(); + } + + /** + * 某一个月号第一天和最后一天 + * + * @param date + * @return + */ + public static String getFirstday_Lastday_Month(String dateStr) { + String year = dateStr.substring(0, 4); + String month = ""; + if (dateStr.length() == 5) { + month = dateStr.substring(4, 5); + } else { + month = dateStr.substring(4, 6); + } + int m = Integer.valueOf(month); + int y = Integer.valueOf(year); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.set(Calendar.YEAR, y); + startCalendar.set(Calendar.MONTH, m); + // String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD ); + Date day = startCalendar.getTime(); + + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(day); + calendar.add(Calendar.MONTH, -1); + Date theDate = calendar.getTime(); + + // 第一天 + GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance(); + gcLast.setTime(theDate); + gcLast.set(Calendar.DAY_OF_MONTH, 1); + String day_first = df.format(gcLast.getTime()); + // StringBuffer str = new + // StringBuffer().append(day_first).append(" 00:00:00"); + // day_first = str.toString(); + + // 最后一天 + calendar.add(Calendar.MONTH, 1); // 加一个月 + calendar.set(Calendar.DATE, 1); // 设置为该月第一天 + calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天 + String day_last = df.format(calendar.getTime()); + // StringBuffer endStr = new + // StringBuffer().append(day_last).append(" 23:59:59"); + // day_last = endStr.toString(); + + return day_first + "至" + day_last; + } + + /** + * 某一个月号第一天 + * + * @param date + * @return + */ + public static String getFirstdayOfMonth(String monthno) { + String year = monthno.substring(0, 4); + String month = ""; + if (monthno.length() == 5) { + month = monthno.substring(4, 5); + } else { + month = monthno.substring(4, 6); + } + int m = Integer.valueOf(month); + int y = Integer.valueOf(year); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.set(Calendar.YEAR, y); + startCalendar.set(Calendar.MONTH, m); + // String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD ); + Date day = startCalendar.getTime(); + + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(day); + calendar.add(Calendar.MONTH, -1); + Date theDate = calendar.getTime(); + + // 第一天 + GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance(); + gcLast.setTime(theDate); + gcLast.set(Calendar.DAY_OF_MONTH, 1); + String day_first = df.format(gcLast.getTime()); + + return day_first; + } + + /** + * 某一个月号最后一天 + * + * @param date + * @return + */ + public static String getLastdayOfMonth(String monthno) { + String year = monthno.substring(0, 4); + String month = ""; + if (monthno.length() == 5) { + month = monthno.substring(4, 5); + } else { + month = monthno.substring(4, 6); + } + int m = Integer.valueOf(month); + int y = Integer.valueOf(year); + Calendar startCalendar = Calendar.getInstance(); + startCalendar.setFirstDayOfWeek(Calendar.MONDAY); + startCalendar.set(Calendar.YEAR, y); + startCalendar.set(Calendar.MONTH, m); + // String day=format(startCalendar.getTime(),C_DATA_PATTON_YYYYMMDD ); + Date day = startCalendar.getTime(); + + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(day); + calendar.add(Calendar.MONTH, -1); + + // 最后一天 + calendar.add(Calendar.MONTH, 1); // 加一个月 + calendar.set(Calendar.DATE, 1); // 设置为该月第一天 + calendar.add(Calendar.DATE, -1); // 再减一天即为上个月最后一天 + String day_last = df.format(calendar.getTime()); + + return day_last; + } + + public static long getMillons(String hh, String mm) { + SimpleDateFormat sdf = new SimpleDateFormat(C_MIN_PATTON_DEFAULT); + sdf.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC")); + + Date nowDate = new Date(); + String date = format(nowDate, C_DATE_PATTON_DEFAULT); + date = date + " " + hh + ":" + mm; + // System.out.println(date); + + Date date2=parseDate(C_MIN_PATTON_DEFAULT, date); + + Date utcDate = null; + try { + utcDate = sdf.parse(date); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return utcDate.getTime(); + } + + public static long getMillons(String date) { + SimpleDateFormat sdf = new SimpleDateFormat(C_DATA_PATTON_YYYYMMDD); + sdf.setTimeZone(new SimpleTimeZone(SimpleTimeZone.UTC_TIME, "UTC")); + + Date utcDate = null; + try { + utcDate = sdf.parse(date); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return utcDate.getTime(); + } + + public static Date getFirstRunTime(String time) { + long daySpan = 24L * 60 * 60 * 1000; + // 规定的每天时间15:33:30运行 + final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd '" + time + + ":00:00'"); + // 首次运行时间 + Date startTime = null; + try { + startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(sdf + .format(new Date())); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + // 如果今天的已经过了 首次运行时间就改为明天 + if (System.currentTimeMillis() > startTime.getTime()) { + startTime = new Date(startTime.getTime() + daySpan); + } + return startTime; + } + + public static List<String> getEveryWeek(String startDate, String endDate) { + List<String> wwSet = new ArrayList<String>(); + List<String> everyday = getDateInterval(startDate, endDate); + String _yyyyww; + for (String date : everyday) { + _yyyyww = getYYYYWW(date); + // if (_yyyyww.substring(4, 5).equals("0")) { + // if (!wwSet.contains(getYYYYW(date))) + // wwSet.add(getYYYYW(date)); + // } else { + // } + if (!wwSet.contains(_yyyyww)) + wwSet.add(_yyyyww); + } + return wwSet; + } + + // public static List<String> getEveryWeekBySE(String start, String end) { + // + // } + + public static List<String> getEveryMonth(String startDate, String endDate) { + List<String> mmSet = new ArrayList<String>(); + List<String> everyday = getDateInterval(startDate, endDate); + String _yyyymm; + for (String date : everyday) { + _yyyymm = getYYYYMM(date); + // if (_yyyymm.substring(4, 5).equals("0")) { + // if (!mmSet.contains(getYYYYM(date))) + // mmSet.add(getYYYYM(date)); + // } else { + // } + if (!mmSet.contains(_yyyymm)) + mmSet.add(_yyyymm); + } + return mmSet; + } + + public static List<String> getTimeIntegval() { + List<String> timeList = new ArrayList<String>(); + String _i, _j, _t; + + for (int i = 0; i < 24; i++) { + if (i < 10) { + _i = "0" + i; + } else { + _i = i + ""; + } + for (int j = 0; j < 60; j++) { + if (j % 5 == 0) { + if (j < 10) { + _j = "0" + j; + } else { + _j = j + ""; + } + _t = _i + ":" + _j; + timeList.add(_t); + } + } + } + return timeList; + } + + /** + * 当前时间点>=10,返回昨天;否则返回前天. + * + * @return 昨天或者前天. + */ + public static String getIDFAQueryDate() { + Date date = new Date(); + int time = date.getHours(); + if (time >= 10) { + return getBeforeDays(1); + } else { + return getBeforeDays(2); + } + } + + private static DateFormat format = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + + /** + * 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm"<br /> + * 如果获取失败,返回null + * + * @return + */ + public static String getUTCTimeStr() { + StringBuilder UTCTimeBuffer = new StringBuilder(); + // 1、取得本地时间: + Calendar cal = Calendar.getInstance(); + // 2、取得时间偏移量: + int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET); + // 3、取得夏令时差: + int dstOffset = cal.get(java.util.Calendar.DST_OFFSET); + // 4、从本地时间里扣除这些差量,即可以取得UTC时间: + cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset)); + System.out.println(cal.getTimeInMillis()); + int year = cal.get(Calendar.YEAR); + int month = cal.get(Calendar.MONTH) + 1; + int day = cal.get(Calendar.DAY_OF_MONTH); + int hour = cal.get(Calendar.HOUR_OF_DAY); + int minute = cal.get(Calendar.MINUTE); + int seconds = cal.get(Calendar.SECOND); + UTCTimeBuffer.append(year).append("-").append(month).append("-") + .append(day); + UTCTimeBuffer.append(" ").append(hour).append(":").append(minute) + .append(":").append(seconds); + try { + format.parse(UTCTimeBuffer.toString()); + return UTCTimeBuffer.toString(); + } catch (ParseException e) { + logger.error(e.getMessage()); + } + return null; + } + + /** + * 得到UTC时间,类型为字符串,格式为"yyyy-MM-dd HH:mm"<br /> + * 如果获取失败,返回null + * + * @return + */ + public static long getUTCTimeLong() { + StringBuilder UTCTimeBuffer = new StringBuilder(); + // 1、取得本地时间: + Calendar cal = Calendar.getInstance(); + // 2、取得时间偏移量: + int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET); + // 3、取得夏令时差: + int dstOffset = cal.get(java.util.Calendar.DST_OFFSET); + // 4、从本地时间里扣除这些差量,即可以取得UTC时间: + cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset)); + return cal.getTimeInMillis(); + } + + /** + * 将UTC时间转换为东八区时间 + * + * @param UTCTime + * @return + */ + public static String getLocalTimeFromUTC(String UTCTime) { + java.util.Date UTCDate = null; + String localTimeStr = null; + try { + UTCDate = format.parse(UTCTime); + format.setTimeZone(TimeZone.getTimeZone("GMT-8")); + localTimeStr = format.format(UTCDate); + } catch (ParseException e) { + logger.error(e.getMessage()); + } + + return localTimeStr; + } + + /** + * 将UTC时间转换为东八区时间 + * + * @param UTCTime + * @return + */ + public static String getLocalTimeFromUTC(long UTCTime) { + java.util.Date UTCDate = new Date(UTCTime); + String localTimeStr = null; + format.setTimeZone(TimeZone.getTimeZone("GMT-8")); + localTimeStr = format.format(UTCDate); + + return localTimeStr; + } + + /** + * 秒转化成天时分秒 + * + * @param ms + * @return + */ + public static String formatTime(long ms) { + + int ss = 1000; + int mi = ss * 60; + int hh = mi * 60; + int dd = hh * 24; + + long day = ms / dd; + long hour = (ms - day * dd) / hh; + long minute = (ms - day * dd - hour * hh) / mi; + long second = (ms - day * dd - hour * hh - minute * mi) / ss; + long milliSecond = ms - day * dd - hour * hh - minute * mi - second + * ss; + + String strDay = day < 10 ? "0" + day : "" + day; // 天 + String strHour = hour < 10 ? "0" + hour : "" + hour;// 小时 + String strMinute = minute < 10 ? "0" + minute : "" + minute;// 分钟 + String strSecond = second < 10 ? "0" + second : "" + second;// 秒 + String strMilliSecond = milliSecond < 10 ? "0" + milliSecond : "" + + milliSecond;// 毫秒 + strMilliSecond = milliSecond < 100 ? "0" + strMilliSecond : "" + + strMilliSecond; + + return strDay + " 天 " + strHour + " 时 " + strMinute + " 分钟 " + strSecond + + " 秒"; + } + + public static String parseDateTimeByLong(Long time) { + Date date = new Date(time); + SimpleDateFormat sdf=new SimpleDateFormat(C_TIME_PATTON_DEFAULT); + return sdf.format(date); + } + + public static void main(String[] args) { + // String UTCTimeStr = getUTCTimeStr() ; + // System.out.println(UTCTimeStr); + // System.out.println(getLocalTimeFromUTC(UTCTimeStr)); + // + // System.out.println(getLocalTimeFromUTC(getUTCTimeLong())); + // System.out.println(getFirstDayOfMonth(parseDate("2016-02-03"))); + // System.out.println(getLastDayOfMonth(parseDate("2016-02-03"))); + // + // System.out.println(getFirstday_Lastday_Month("201602")); +// System.out.println(getFirstdayOfMonth("201602")); +// System.out.println(getLastdayOfMonth("201602")); + + System.out.println(DateUtil.getDateInterval("2017-03-15", "2017-05-08").size()); + } + +} diff --git a/src/main/java/com/reyun/util/EventRedisUtil.java b/src/main/java/com/reyun/util/EventRedisUtil.java new file mode 100644 index 0000000..12c2a8c --- /dev/null +++ b/src/main/java/com/reyun/util/EventRedisUtil.java @@ -0,0 +1,129 @@ +package com.reyun.util; + +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.CollectionUtils; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.Pipeline; +import redis.clients.jedis.Response; +import redis.clients.jedis.exceptions.JedisConnectionException; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.ResourceBundle; +import java.util.Set; + +/** + * 单节点Jedis. + * + * @author Administrator + */ +public class EventRedisUtil +{ + private static Logger logger = LoggerFactory.getLogger(EventRedisUtil.class); + + private JedisPool pool; + + private EventRedisUtil() + { + ResourceBundle resourceBundle = ResourceBundle.getBundle("redis"); + pool = new JedisPool( + new GenericObjectPoolConfig(), + resourceBundle.getString("redis.event.host"), + Integer.valueOf(resourceBundle.getString("redis.event.port")), + Integer.parseInt(Constant.REDIS_IP_REQUEST_TIMES), + null, + Integer.valueOf(resourceBundle.getString("redis.event.database")), + null); + } + + public static EventRedisUtil getInstance() + { + return SingleHolder.instance; + } + + /** + * 取值 + * + * @param key + * @return + */ + public Set get(String key) + { + Jedis jedis = pool.getResource(); + try { + Set set = jedis.zrange(key, 0, -1); + return set; + } + finally { + pool.returnResource(jedis); + } + } + + /** + * 获取zset的值 + */ + public Set<String> getZsetByKeys(List<String> keys) { + + Set<String> resultSet = new HashSet<>(); + Set<String> resultSet50 = new HashSet<>(); + + Jedis jedis = null; + try { + jedis = pool.getResource(); + Pipeline p = jedis.pipelined(); + List<Response<Set<String>>> list = new ArrayList<>(); + + for (String key : keys) { + Response<Set<String>> response = p.zrange(key, 0, 50); + list.add(response); + } + + p.sync(); + pool.returnResource(jedis); + + if (ValidateUtil.isValid(list)) { + for (Response<Set<String>> res : list) { + Set<String> set = res.get(); + + if (!CollectionUtils.isEmpty(set)) { + resultSet.addAll(set); + } + } + } + + int i=0; + for(String s:resultSet){ + resultSet50.add(s); + if(i==50)break; + i++; + } + + } catch (JedisConnectionException e) { + + logger.error(e.getMessage(), e); + + if (null != jedis) { + pool.returnBrokenResource(jedis); + } + + throw new JedisConnectionException(e); + } + + //return resultSet; + return resultSet50; + } + + private static class SingleHolder + { + private static EventRedisUtil instance = new EventRedisUtil(); + } + + public static void main(String[] args) { + System.out.println(getInstance().get("20fae09987bba0e8609eaad64dbd440d,install,_province,string,1")); + } + +} diff --git a/src/main/java/com/reyun/util/ExcelUtil.java b/src/main/java/com/reyun/util/ExcelUtil.java new file mode 100644 index 0000000..9554047 --- /dev/null +++ b/src/main/java/com/reyun/util/ExcelUtil.java @@ -0,0 +1,190 @@ +package com.reyun.util; + +import com.reyun.dic.UploadErrorEnumType; +import com.reyun.model.UploadHistory; +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.ss.usermodel.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.StringUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by sunhao on 17/5/19. + * desc:EXCEL操作工具类 + */ +public class ExcelUtil { + + private static final Logger logger = LoggerFactory.getLogger(AwsS3Util.class); + private static final int MAX_UPLOAD_ROW = 1000; + private static final int MAX_KEYWORD_LENGTH = 40; + private static final int MAX_CREATIVE_LENGTH = 40; + private static final String KEYWORD_TABLE_HEAD_URL = "访问地址/应用下载地址"; + private static final String KEYWORD_TABLE_HEAD_KEYWORD = "关键词"; + private static final String KEYWORD_TABLE_HEAD_CREATIVE = "创意"; + + + + /** + * 读取keywords的EXCEL文件,最多支持读取1000行,之后的数据丢弃。 + * 文件格式:下载地址 关键字 创意 + * created by sunhao 20170519 + */ + public static UploadHistory readKeywordsExcel(InputStream inputStream){ + + UploadHistory uploadHistory = new UploadHistory(); + List<Integer> errorRowList = new ArrayList<>(); + Map<String,Map<Integer,String>> keywordCreativeMap = new HashMap<>(); + + try { + + //Get the workbook instance for XLS and XLSX file + Workbook workbook = WorkbookFactory.create(inputStream); + + //获取第一个SHEET + Sheet sheet = workbook.getSheetAt(0); + + //数据格式化 + DataFormatter cellDadaFormat = new DataFormatter(); + + //取行数,最多读1000行 + int rowNumber = sheet.getLastRowNum(); + rowNumber = rowNumber > MAX_UPLOAD_ROW ? MAX_UPLOAD_ROW : rowNumber; + + //校验表头格式false 不合法,true 合法 + boolean tableHeadValid = checkTableHead(sheet.getRow(0),cellDadaFormat); + + //空表校验 + if(rowNumber == 0){ + + if(tableHeadValid){ + uploadHistory.setErrorType(UploadErrorEnumType.TABLE_EMPTY.getKey()); + } else { + uploadHistory.setErrorType(UploadErrorEnumType.HEAD_ERROR.getKey()); + } + + return uploadHistory; + } + + //表头有误 + if(!tableHeadValid){ + uploadHistory.setErrorType(UploadErrorEnumType.HEAD_ERROR.getKey()); + return uploadHistory; + } + + + //从第二行读起 + for (int i = 1; i <= rowNumber; i++) { + + Row row = sheet.getRow(i); + + if (null == row) { + errorRowList.add(i + 1); + continue; + } + + //读取前三列,下载地址,关键字,创意 + String url = getCellStringValue(row, cellDadaFormat, 0); + String keyword = getCellStringValue(row, cellDadaFormat, 1); + String creative = getCellStringValue(row, cellDadaFormat, 2); + + //构建subCampaign,校验字符串合法性 + String keywordString = checkAndBuildKeywordString(url, keyword, creative); + + //构建 + if (!StringUtils.isEmpty(keywordString)) { + + String mapKey = getKeywordKey(keyword, creative); + + Map<Integer, String> rowDataMap = keywordCreativeMap.get(mapKey); + rowDataMap = (null == rowDataMap ? new HashMap<Integer, String>() : rowDataMap); + + rowDataMap.put(i + 1, keywordString); + keywordCreativeMap.put(mapKey, rowDataMap); + + } else { + + errorRowList.add(i + 1); + } + } + + uploadHistory.setUploadErrorList(errorRowList); + uploadHistory.setRowNumber(sheet.getLastRowNum()); + uploadHistory.setKeywordCreativeMap(keywordCreativeMap); + + } catch (IOException | InvalidFormatException e) { + logger.error(e.getMessage()); + uploadHistory = null; + } + + return uploadHistory; + } + + /** + * 校验表头是否正确 false 不合法,true 合法 + */ + private static boolean checkTableHead(Row row, DataFormatter cellDadaFormat) { + + if(null != row){ + + String urlHead = getCellStringValue(row, cellDadaFormat, 0); + String keywordHead = getCellStringValue(row, cellDadaFormat, 1); + String creativeHead = getCellStringValue(row, cellDadaFormat, 2); + + return urlHead.equals(KEYWORD_TABLE_HEAD_URL) && keywordHead.equals(KEYWORD_TABLE_HEAD_KEYWORD) && creativeHead.equals(KEYWORD_TABLE_HEAD_CREATIVE); + } + + return false; + } + + /** + * 获取KEY + */ + private static String getKeywordKey(String keyword, String creative){ + return keyword + "-" + creative; + } + + /** + * 获取单元格字符串 + */ + private static String getCellStringValue(Row row, DataFormatter cellDadaFormat, int index) { + + String result = ""; + + Cell cell = row.getCell(index); + + if (null != cell && !cell.getCellTypeEnum().equals(CellType.BLANK)) { + + result = cellDadaFormat.formatCellValue(cell); + } + + return result; + } + + /** + * 检验和构建SubCampaign + * + */ + private static String checkAndBuildKeywordString(String url, String keyword, String creative) { + + String keywordString = null; + + //满足URL格式,keyword格式,creative格式 + if (!StringUtils.isEmpty(url) && StringUtil.urlMatch(url.trim()) + && !StringUtils.isEmpty(keyword) && keyword.length() <= MAX_KEYWORD_LENGTH && StringUtil.nameMatch(keyword.trim()) + && (StringUtils.isEmpty(creative) || creative.length() <= MAX_CREATIVE_LENGTH)) { + + keywordString = url + ";" + keyword.trim() + (StringUtils.isEmpty(creative) ? "" : ";" + creative.trim()); + } + + return keywordString; + } + + +} diff --git a/src/main/java/com/reyun/util/ExportReportUtil.java b/src/main/java/com/reyun/util/ExportReportUtil.java new file mode 100644 index 0000000..1fa7656 --- /dev/null +++ b/src/main/java/com/reyun/util/ExportReportUtil.java @@ -0,0 +1,110 @@ +package com.reyun.util; + +import com.reyun.model.ReportListResult; +import net.sf.json.JSONObject; +import org.springframework.util.CollectionUtils; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +/** + * Created by sunhao on 17/7/7. + * desc:数据导出工具类 + */ +public class ExportReportUtil { + + private static final String REPORT_NAME_CAMPAIGN = "campaigninfo_bycampgroup"; + private static final String SUB_TYPE_CAMPAIGN = "campaign"; + private static final String SPECIAL_REPORT_NAME = "campaigninfo_bydatecampaign"; + + private ExportReportUtil(){} + + /** + * 获取conditionMap避免使用 new ObjectMapper().readValue(export.getConditions(), HashMap.class);转换不完全 + * created by sunhao 20150510 + */ + public static Map<String, String> changeCondition2Map(String conditions) { + + Map<String, String> resultMap = new HashMap<>(); + + JSONObject conditionObject = JSONObject.fromObject(conditions); + + Iterator<String> conditionIterator = conditionObject.keys(); + while (conditionIterator.hasNext()) { + String key = conditionIterator.next(); + resultMap.put(key, conditionObject.getString(key)); + } + + return resultMap; + } + + public static StringBuffer getExportContent(ReportListResult reportListResult, String subType) { + + StringBuffer sb = new StringBuffer(); + List<String> name = reportListResult.getName(); + List<Object> columnKey = reportListResult.getColumnkey(); + List<String> reportName = reportListResult.getReportname(); + String report = reportName.size() > 0 ? reportName.get(0) : ""; + + boolean isNeedChannelAndGroup = SUB_TYPE_CAMPAIGN.equals(subType) && REPORT_NAME_CAMPAIGN.equals(report) || SPECIAL_REPORT_NAME.equals(report); + + if (isNeedChannelAndGroup) { + name.add("渠道"); + name.add("活动组"); + } + + List<Map<String, Object>> value = reportListResult.getVal(); + + if (!CollectionUtils.isEmpty(name)) { + + sb.append(String.join(",", name)).append("\r\n"); + if (isNeedChannelAndGroup) { + for (Map<String, Object> v : value) { + for (int i = 0; i < columnKey.size(); i++) { + sb.append(v.get(columnKey.get(i))) + .append(columnKey.get(i).toString().startsWith("rate_") ? "%" : "") + .append(","); + } + + sb.append(v.containsKey("channelname") ? v.get("channelname") : " ").append(","); + sb.append(v.containsKey("groupname") ? v.get("groupname") : " ").append("\r\n"); + } + } else { + for (Map<String, Object> v : value) { + for (int i = 0; i < columnKey.size(); i++) { + sb.append(v.get(columnKey.get(i))) + .append(columnKey.get(i).toString().startsWith("rate_") ? "%" : "") + .append(i == columnKey.size() - 1 ? "\r\n" : ","); + } + } + } + + } + + return sb; + } + + public static StringBuffer getRoiExportContent(ReportListResult result, String name, boolean isFirst) { + StringBuffer sb = new StringBuffer(); + List<String> nameList = result.getName(); + List<Object> columnKey = result.getColumnkey(); + List<Map<String, Object>> value = result.getVal(); + + if (!CollectionUtils.isEmpty(nameList)) { + if(isFirst){ + sb.append(String.join(",", nameList)).append("\r\n"); + } + for (Map<String, Object> v : value) { + sb.append(name).append(","); + for (int i = 0; i < columnKey.size(); i++) { + sb.append(v.get(columnKey.get(i).toString())).append(columnKey.get(i).toString().startsWith("rate_") ? "%" : "") + .append(i == columnKey.size() - 1 ? "\r\n" : ","); + } + } + } + + return sb; + } +} diff --git a/src/main/java/com/reyun/util/GeneratePwd8.java b/src/main/java/com/reyun/util/GeneratePwd8.java new file mode 100644 index 0000000..9a7deeb --- /dev/null +++ b/src/main/java/com/reyun/util/GeneratePwd8.java @@ -0,0 +1,33 @@ +package com.reyun.util; + +import java.util.UUID; + +/** + * Created by Administrator on 2017/5/6 0006. + */ +public class GeneratePwd8 { + + public static String[] chars = new String[] { "a", "b", "c", "d", "e", "f", + "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", + "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", + "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", + "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", + "W", "X", "Y", "Z" }; + + + public static String generateShortUuid() { + StringBuffer shortBuffer = new StringBuffer(); + String uuid = UUID.randomUUID().toString().replace("-", ""); + for (int i = 0; i < 8; i++) { + String str = uuid.substring(i * 4, i * 4 + 4); + int x = Integer.parseInt(str, 16); + shortBuffer.append(chars[x % 0x3E]); + } + return shortBuffer.toString(); + } + + public static void main(String[] args) + { + System.out.println(GeneratePwd8.generateShortUuid()); + } +} diff --git a/src/main/resources/17monipdb.dat b/src/main/resources/17monipdb.dat new file mode 100644 index 0000000..a38c4d3 Binary files /dev/null and b/src/main/resources/17monipdb.dat differ diff --git a/src/main/resources/META-INF/app.properties b/src/main/resources/META-INF/app.properties new file mode 100644 index 0000000..9b3d990 --- /dev/null +++ b/src/main/resources/META-INF/app.properties @@ -0,0 +1 @@ +app.name=trackingio \ No newline at end of file diff --git a/src/main/resources/applicationContext-schedule.xml b/src/main/resources/applicationContext-schedule.xml new file mode 100644 index 0000000..9a5fdd8 --- /dev/null +++ b/src/main/resources/applicationContext-schedule.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:task="http://www.springframework.org/schema/task" + xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" + + default-lazy-init="true"> + + <description>调度配置</description> + +</beans> diff --git a/src/main/resources/applicationContext.xml b/src/main/resources/applicationContext.xml new file mode 100644 index 0000000..0f0a978 --- /dev/null +++ b/src/main/resources/applicationContext.xml @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8"?> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:context="http://www.springframework.org/schema/context" + xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee" + xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa" + xmlns:task="http://www.springframework.org/schema/task" xmlns:p="http://www.springframework.org/schema/p" + xmlns:aop="http://www.springframework.org/schema/aop" + xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd + http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd + http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd + http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd + http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd" + default-lazy-init="true"> + + <description>Spring公共配置</description> + <aop:aspectj-autoproxy proxy-target-class="true"/> + + <context:component-scan base-package="com.reyun.security" /> + <context:component-scan base-package="com.reyun.service" /> + <context:component-scan base-package="com.reyun.task" /> + <context:component-scan base-package="com.reyun.taskexecute" /> + + + <context:property-placeholder location="classpath:redis.properties" /> + + <!--Redis配置--> + <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> + <property name="maxIdle" value="300" /> + <property name="maxTotal" value="600" /> + <property name="maxWaitMillis" value="1000"></property> + <property name="testOnBorrow" value="true" /> + </bean> + + <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:hostName="${redis.surl.host}" p:port="${redis.surl.port}" p:poolConfig-ref="poolConfig"/> + + <bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"> + <property name="connectionFactory" ref="connectionFactory" /> + </bean> + <!--//Redis配置 --> + + <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> + <property name="driverClassName" value="${datasource.driver}" /> + <property name="url" value="${datasource.url}" /> + <property name="username" value="${datasource.username}" /> + <property name="password" value="${datasource.password}" /> + + <!-- 配置初始化大小、最小、最大 --> + <property name="initialSize" value="10" /> + <property name="minIdle" value="5" /> + <property name="maxActive" value="50" /> + + <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> + <property name="timeBetweenEvictionRunsMillis" value="60000" /> + + <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> + <property name="minEvictableIdleTimeMillis" value="300000" /> + </bean> + + <!--指定实现JPA的适配器 --> + <bean id="hibernateJpaVendorAdapter" + class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> + <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" /> + <!-- <property name="generateDdl" value="false" /> --> + </bean> + + <!-- JPA实体管理工厂的配置 --> + <bean id="entityManagerFactory" + class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> + <property name="dataSource" ref="dataSource" /> + <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter" /> + <property name="packagesToScan" value="com.reyun.model" /><!--待扫描的实体类包,不再需要persistence.xml了 --> + <property name="jpaProperties"> + <props> + <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop> + <prop key="hibernate.show_sql">false</prop> + <prop key="hibernate.hbm2ddl.auto">update</prop><!-- none --> + + <prop key="hibernate.connection.CharSet">utf8</prop> + <prop key="hibernate.connection.characterEncoding">utf8</prop> + <prop key="hibernate.connection.useUnicode">true</prop> + </props> + </property> + </bean> + + <!-- Spring Data Jpa配置 --> + <jpa:repositories base-package="com.reyun.repository" repository-impl-postfix="Impl" transaction-manager-ref="transactionManager" entity-manager-factory-ref="entityManagerFactory" /> + + <!-- Jpa 事务配置 --> + <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> + <property name="entityManagerFactory" ref="entityManagerFactory" /> + </bean> + + <tx:advice id="txAdvice" transaction-manager="transactionManager"> + <tx:attributes> + <tx:method name="report*" propagation="SUPPORTS" read-only="true" /> + <tx:method name="list*" propagation="SUPPORTS" read-only="true" /> + <tx:method name="query*" propagation="SUPPORTS" read-only="true" /> + <tx:method name="find*" propagation="SUPPORTS" read-only="true" /> + <tx:method name="*" propagation="REQUIRED" /> + </tx:attributes> + </tx:advice> + + <aop:config expose-proxy="true"> + <aop:pointcut id="txPointcut" expression="execution(* com.reyun.service.*.*(..))" /> + <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" /> + </aop:config> + + + <!-- JSR303 Validator定义 --> + <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> + + <bean id="appUtils" class="com.reyun.context.AppUtils" lazy-init="false" /> + + + <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> + <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> + <property name="defaultEncoding" value="UTF-8"/> + <!-- 指定所上传文件的总大小不能超过2000KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 --> + <property name="maxUploadSize" value="2000000"/> + </bean> +</beans> diff --git a/src/main/resources/common.properties b/src/main/resources/common.properties new file mode 100644 index 0000000..877142e --- /dev/null +++ b/src/main/resources/common.properties @@ -0,0 +1,4 @@ +profile.table=${profile.table} +event.table=${event.table} +usergroup.table=${usergroup.table} +account.check.url=${account.check.url} \ No newline at end of file diff --git a/src/main/resources/db.properties b/src/main/resources/db.properties new file mode 100644 index 0000000..00ba1e6 --- /dev/null +++ b/src/main/resources/db.properties @@ -0,0 +1,4 @@ +db.driver=${datasource.driver} +db.url=${datasource.url} +db.username=${datasource.username} +db.password=${datasource.password} diff --git a/src/main/resources/upgrade/feature_20170911_blacklist.sql b/src/main/resources/upgrade/feature_20170911_blacklist.sql new file mode 100644 index 0000000..4b1ec9c --- /dev/null +++ b/src/main/resources/upgrade/feature_20170911_blacklist.sql @@ -0,0 +1 @@ +insert into config_param (key_param, value_param) values ('blacklist_download_url', 'http://www.trackingio.com/api/external/download/blacklist'); \ No newline at end of file diff --git a/src/main/resources/upgrade/feature_20170911_shenmalogin.sql b/src/main/resources/upgrade/feature_20170911_shenmalogin.sql new file mode 100644 index 0000000..5714a28 --- /dev/null +++ b/src/main/resources/upgrade/feature_20170911_shenmalogin.sql @@ -0,0 +1,6 @@ +ALTER TABLE `channel` ADD COLUMN `orderindex` integer COMMENT '渠道顺序'; + + +update channel set orderindex = 1 where type is not null and unique_name = 'gdt'; +update channel set orderindex = 2 where type is not null and unique_name = 'smsearch'; +update channel set orderindex = 3 where type is not null and unique_name = 'adwords'; \ No newline at end of file diff --git a/src/main/websrc/404.html b/src/main/websrc/404.html new file mode 100644 index 0000000..4bd2491 --- /dev/null +++ b/src/main/websrc/404.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>灵犀</title> + <meta name="keywords" content="热云数据 灵犀" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport"> +</head> +<style type="text/css"> + html, body{ + height: 100%; + overflow: hidden; + font-family: 'PingFang SC','Microsoft Yahei'; + } + body{ + margin: 0; + padding: 0; + } + .top, .content{ + width: 100%; + height: 47px; + position: absolute; + } + .top{ + background-color: #1b1b21; + top: 0px; + line-height: 47px; + } + .content{ + height: auto; + background-color: #f1f1f1; + top: 47px; + bottom: 0px; + text-align: center; + } + .content img{ + margin-top: 100px; + } + .content div{ + margin-top: 30px; + color: #666666; + font-size: 16px; + } +</style> + <body> + <div class="top"> + <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAAAuCAYAAAE0B0cFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADR5JREFUeNpi/P//PwM9ARMDnQELPsnY+QwM334xcHOxMXxdnEgfH/5fncbwA4v4aSgtBsRzoOwSINYB4ix8BjLii0OgD8GSUN8xokkzA/FfNDE1IL5FtoW0AAABRFcLmQZF6gSlzJ9/GBjYWeBxR1ufrUplkAGlTpDFUHAFShugKX0NpV+SG2cwS0B5jgdJnBWIfw/6BAIQQHRP/oO+fI6aC2dOAeIQWAIebICsmIN6BFnjLyBmVxZlYGjwwVDODsQ/kficQPydSKtAGUocyrYB4iM0j7nvvxlMgZRjvhMDo78+uHooBFaICsLcGEqvIHnsNNSB6B6bg+aZmVC2DpSGmXpkNM8NZJuIngAggEZjbtRzw8FzoGrg7z9EEwZE3AW2hIJmDj7PsZCjKWEhmHqcacfAOP0QwzUgW4tEI8QJNQoHOlnKAD0GAprgyogNRe4wgUA8icU8dhz2nIfSjvTy3P8fvxn4ga3pW7/+MDjBkmfkXJzm/oHSIkhilUjsDWitGEkktiGU3khzz8kJQfsFzAyfgJQnkN4PpL+pAxOamQJWLfdx2BeAxxrkLkcOlJ5Oj3ru/9yjDIwHbiHalnnAZpipPJjPSKXswg/EHwn0+Ecr8VHPDUUAEEDDOlmOpspRMBpxo2AAuwTk9JFAANgYBbdheIDt4wXx4AkF0IiRVOAMhq9MwIYNMxNkYPvrLwaGdemjkTPgEQcDHKxgyhnY0d0DjUxQO/Q/Dzu8f/cK3vtFBXfR2qwtQDyPDCc8AXXTsJitTIZZp4DYDMqWgiZCkA+nAXHDcCsq+4F4D6hx//0XA0uECQMDkIZ170Cd8kAQg4cNkksbt8L1gQJWCYifQ2lQpF1igIzd+jNARvNBXUNXIL6GZB+oR2YJxMvRupTFQGwCZR9DUx8F7YktRBL/AMRBQFzHgBgnlofSllBzpRkg86KgSLs1nHIcyDOqIAYnGwMLsP++AsgM99ZlCA2dxSAOzI2giFsHDWRQ4DHceEEw0SEXqAehkSgL5WcDMR+UfRxKf4VmaOTci9z33wfEy6DsmUiDJQJI5gijuQMUgRfQxHiGRcQBI6kASFnHzGN4zcjIUArMZf+B7A0//jAEc7IylAMjbTVQ3puXg2HbtEhw3ecGxLuwGMWFxEaeb5kExE3QYjAfiDWAeCo0J3gCcRoQh0JzBCjSQPOz7kDcCSrBkczhxBL4ttAIT4fmJh80+RXQCF0PSmtQPtdw6ceBUv+K8NkMb9lYGHBaCIw4RmDE2UBz5mCZxpSCRjIo54GmzyRGO+CjYLQfN9IAQAD2rSYkqigKfzNPZ0YrzUAyiBa1yIiirEUU/UNIQWRJSYS2GowgapNRtKisFrUogij7M6wopIR+IIgIdJNEWYtwoRU4loMLC39izMnpnHfvnXnzeKMzRpMM98Bh3n1z581793vnnnPPd662OG1xWjRwWjRwGjgtGjgtfy//PHOimIFpXuDy7rivVDgbTT/tug54DGD7UqBsiQbnvwKnpH8YKK8TJXBntwHFRXhLpz81vQcaWgV6uR4NyKQDjoHJEbRO8YlnKFk1D8u//QC6+lA/xWPmEn+l4RaYQAppHzcxac9y427rF+wJfMc9lwtVdC4Q9zbF3xWXN3626USE7XmD7Rwnip9P4ForEZ/k5sRyUD6HkYnAVSc4z1n7qFe7/RoYjJEt7RAc3FX5OdcGhpJEdac+B7+qLHCQtNTWP38Mi1WSYxk7cgCogEg+M6UUzkTgzNLP0QgOLSjCnYJck3dThGVbdFRoSq2qjwOPJdt2rT456Gw1XIXJm22eIEaprINgypnoPGgDLWxp35efTPEwr8b8Wo+lL5O7N+R/OeUHK2ztIxnl4yxTUpAixgvlJXhKxx/I3+3t7EWlfKOPkZ42wSNb+ko+cP7MhNfbR/rYZiVMu+wgfQhBysrqZLMmmS3yJ+mA7bmHLS+GsvpF8piBPIUY693rcB89tvabTLI4ZqKZ0+KosnOT2G2whfRoqThW28tqkXw9tHWa5FKDj6TNEhyWboffMKm6OclARknjOH2n29ozMgK4FeSRwqMwIhE0ULPFcGN1zSOxtBv5DdelV1FggwTqYQpWvFypz5rlTnrW4HKChaRrLL7OqQDoJQSLncpMsz6Bj0w0hddkxFS5fy2mkvqbO1BZ14I8AqaXfFfhzmvwu13IzzZwjqcXAndW7VYa7UKz9ODiOBZmHTD2V8chin5uyqmQ95FwqcF5iFqUAtIHMlDZyG5WRn8RS/DitVmcem06SM/I3yjrMixWqXxilbT8K2lZXqWBjxuQAcQcWoAvo8CjyalTaASzG/1mldYtOfBlKf4Ph+dDKa7rUn146xZnp+g1bWvEdAQnHCZXvwsgQKB1Jerky0Z3fwiuPB8WQ5TPpSpDKfZPFrQXpAdI+b5OjtEvrQt7zYDrzIkWDZwWDZwGTsukkj8CtHetsVGUUfQsfQnYYAzUEJUqGsEUFBuV2EA0kZhqkB9aLGIkPigxamKMib+M1scfoz9AkNAoxB/aqBATkqYEkwJ1VbQqtjyadAtGIqWoKGKT1j7He2budr+dbrfbgk2z3pNM2p3OTHdm7/nuvd/ecz8LTgwGGykNBiOcwWAwwhkMRjiDwZACudlwE26/axZJz5oOvPVg0AMnBVg9xy/JWarJgjAWf/WGD2rtDDp15GuBJPvlPLrUquINRrgkRCJA3yCwr224hxEG5PX82b5SgWB7mRV6OEtz2UehtjEGdAntpmkNyZnzQE7EDMRghEsfI5NwA8DOH5L39w+ieGY+Tj5ehqpl1/vr1szpHcDpXYeA3S3Iz8vBPDn3uHtOjgXcBiPchLBTCFVBz7ctivp39vvFqkeFYJWy/+WC3OEO7qzi2jzBXNhtIzVCrIlAPtY/SffLYJpDzvMIqtNGA0sJWab/M4KuT5MxZ8C62HSVcKx9ZR911slS9dSTTYaY7WN4nhpeBRIMuE8IVsI+pkI29nhzl0tgD7ctKS8kuVzLKcnlelP+H5LtZgT6kCV6jUPOa25zJvneL81gQKXhr1ZiTgZYPE75YGFoP58N5Y57ESgI/tTB6REECrgPjHBTH/wQT8pWGtr/nYScJ3r6fQnK13qMi2f0g08CJ0+4UMs6+eir60Yo9lg7zWt9pRuN5w/nNbfT6vHYYnWZTtxwoQkqEuK9alch6JTJpomUcVKxd80o90ct7B49tl1/v3OMZ8KBYFuIiLzfcL3402rsJOM3CHrnnlDvP3OUa7O+m+pBisu4zBf75lJp6MpDqboID1mU+UjG7U9eUcf1pZKSz+Z9HTj4DGotpJy6oLf5Fo7sZsjDq2Lt1WtvB8pL/Fyv4K9ubP+wCdu/iCFSkOd3M41PptyjRlCKkBCB7SCO/x4sLERJ0cLxtaz01KgYXj4R+luxhnauOD1fw6pK2Q44n1mLkvHeseaQ9OcKDS3vl60udMwCjNSHcQCgOIIqTlcUyPdGRSc13PFFkebqsyJpnwx5WObE1NSdT/MeV6oX25PmmI1IXofPPNwUAiVZzSGyfT49D9Wb10g8uQg1QjYa/j+XzYD37F0of+5ueOLxKjWUiYNthTuQaJQ9IsSMTGwWcwiJZV9d0NMedgy+TA28C4l+0lDykSCvj/F/BjTUpVw0Ls+uy/A9MreLqqdxcVjJ4a5VtVVJ9V7o2EJkpiiepQNQukYHXdniHLKCcAwPOSHiBcLTz8JeRQjWSrldWzAmM6SKaf5CXWX0aMdwvhdLYQwtQtibuDAz17jg1iubXA+nzl3U21ivhK/S/IUhKnscsFt+TsjrTcvAmHnOWSUcvep420dHMtxHYW73Bdz39wi+G702zTFl6i0tpJwK2LXB92KI/YqaaDtqGtr8Kf07hGjxFQbmFeRi68YGRGVf7ZKrseDyGZJoiTm2/4bc/FxUiwfs0tyKa9Nd1T+I2RI+Nq9cDNxanFgI8D8CvTGV5Y8h0fQDSpLrkLxe3qeaG700hpfzG6JpaMjc7Yhs9Uroi4nXNO/kQHfQ2X+Fetix5CjM+Tbp5FaJ5rouHkag6l9oHm7q4BOGiZJPeVXL0fjxehTcUISD4pU26AfOcO0pCQM/EiJ6RzrgNbbD++UcvEvy0C/nvoKgJQPDmqHuPhQ+cAuad6zDfPl5Rsjm6XXWZvh+2nWiJBWYi4WbrvRqGLlcw81m9W6LdPR/CEG3nvgETZEew34frZrTMaxb7IStDUh00KHnvFIng3aHQsIWjFya5BhSd9Zh6Mdc929n334l9416/aiGl3M1d3Nt7KyeHw4fX9T752Dwo+ayMX2vnerVf8oGQ80WPVytjoS+AQwOofyNevQd68QL4tneHneI2oela25DU0Wpb/BNSHzHxuVn34Uh01x6k07K9NjjyC7CJbsQGRu3HBjuYzr+WQ15JBJm4k0xmaJCM5IMJj3YIHCVDkwDmncyV95hj+d/QDiDwXI4g8FghDMYjHAGgxHOYDBcKP4FR9hKCDLUAUMAAAAASUVORK5CYII="> + </div> + <div class="content"> + <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAABgCAYAAAFqEaAJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACtFJREFUeNpi/P//PwMIeK56C2GQAbaHCTOCaBaYgI0mOwOlgAVdoGbZCaI1t0RZ4DfsX5sz0Ya1XfmKwmcixRumpqZ45ZkIaYYZQMggrN5EBqdPn8bKJsllGRkZDD9+/MCq4cOHDwwPHjwg3mUzZszAabuAgAAYkxxmFKcz9OgmBTDCshM1AEAAgQ0D5ksQm1xTGYF5E+7F/+TmyyPXf4IcwEh2nqRafkSPHBZi8x6hFM9ErQxNdB4kK/8h50NQXps+fTpcDJmNLR3Bo79Kh5ukwAZGP7iMZxp0eY5q+Q0ggFAMoqQupBTA6lKswUSNepWMvE98+iYldZECCKUPJoZBCMh2FKiIuXnzJkpxg0wT0xSguqOQi66qqiqG9evXM7i5uZFcrJFcZhIC6urqYDowMBCFptRhRIcUqCxeuHAhGIPA8ePHwWIgAGsPbd26FateUJmNq81EVDmFXiTQI/fB6gOio4+SJhXV0hR6QTYQgJGhah+oPSc0iIqpdwABxIjUBwRR+4DYkc6O2A/ETqC2Krac5zgAoeKINy3RuyJGT7uDrr4jWASQ0nsnp0dBsoNIGQEYkk2Um0/+Dq02E9kOArWVYG2it2/fktRdo0mzBLlGFxYWhjvy1KlTFDVJyHIQrhCQk5NjiImJYZg0aRLZbSWyHASzCL1pCxIf0JYkzHJKHTE8chloOA/UPD1//jzD6tWrcaorLS2FJ3hYs5cmDoINBxoaGjKEhobiVBcVFYXCh7XLaZKGMjMzCaoBORgG8I15Dv+SesCaH9TugajLMA/xEBro7hBVh8qp1TcbVC4CCMCu1eM2CINR2qESbN0YOQQnYGTkAlwgXKBrJypOwMzIyFAxEAlxCHaGsFXqwloeqi3zF0SIAzg8yTI4dsj38tl837MHGVq4H7BnvJD8cNbMX0MzfTSm5vKrdIBv6MgjxeWBqbSZO0lLf8BTeBIPEffesL9/J6OgY03aa6Dtum5LOCiKgm49oWRZ1htTVdUiuWW16XYLYKjv+1IYhrTNsqyWdoA+7L1pmq1cUFiSTqdTIx/AeLKReQ3ooyhKi8A4jsUmyXEcajzRT3BN9jN7KWfdjs+DIGiRem3M7kliDYNgCeNJGzwFcm+appKu69RzumSwY4RekwBZlnvGQoJmd8WniBbu7TZnh50A61dZluKFANBoyVEx1EQe1TStqZMkof26JJIC4EgDJFlVVaU8zweJ7j7r1j9jFU+CtEs8wLZtKoJ7nicZhjE6DkQSMgF8B7wpiqLmnoQMrKjOPoubfjKlJ01JJSKkJYxUMqgnHWnJI95uaxwImh16LEhuD0+6lydt4dTWlkMAHMI7PwkP5397R4j4SN7q+iJt63jdVvBTFxWe9HUQNIr3unz+CcDOGbMmDERx/EbBOjqJuPsFxEVw0qFpF5e2o+DYD1AVcVBc2y8gKHV0aIrgYHe/gKuTk4ND1bn5H15IjosYi5pc3oOguajh/rx798783h3LkwzrGFnHneZCbK3jyTq+/eRI99bxFQFx2KGP5sEhThZoFMEh9eln2k+IN7o/tXWkNQlKHim7JoHCt4jV/Xk/edClPUh3GCISIMR//suiIUYCkUAkUKiD9LmmwmPW67V9rirDQcFSJpNhnU5Hbw+SQSpQHhBHFEnhef10OnV9BiX5p+A2oRcIfFEymXS1DQYDvi+BsGazyRqNhn0OUqTb7bo+o6VAqNeaz+dsMpm42gFUZbNZ+1wmPsrlMhuPx3oHaTCKtVqNM0N+DLGpUqmwdDqtd5AuFAquV2egzuVynN4QngMo1BmbADY4eUjYtQL11QQCTSbPSKLNMAw2HA5ZqVTi56Zpcq8R5Jqw2WzGFovFWeWSgRdIRZKJNgiDoFyv11kqlWL9fl+J7UGc1Wp11eF2szxI9igIgql9v997liJjeIJ5jESiqPIoMcS8DMyjKL2npQatxUgg2wSP6NcuAW7eXKB2u+3qHHYzANEKstVrQ0WYfA0wJ6BPZN/YINV5XUzz8r1UvxO4IN1qtTjeG4vF+Hm1WrWvIa/xst1uxzuK7y2XS3vHBhTAeHVavldohthms1G2Ywr3sng8zj0G3iYbimH83ivQAuXzedbr9fh7cNCCrj/WUfn74K7FUAOPXSwW7ViGzFt1r0uYFx9kN+rAUR97quFkMp37ANI0T3kQCUQCBcEiUaJAHkQCkUChi0G/7EB9Rqi4ZevHg14i6CzPfgQCef6IRXYEhEEfHw59Pm0tRuYQiL39vFuvrySF0j4Ct+0fTfMhsz8B2jt7lkaiKAzP/gA7EQJWVgqCYGUjWAkiiJVikcIi2LmNYOGWsVgsXBYRhPRiYSl20U6wUtBiG6uAYCNoLazPJSdMJjMxk8lsdmbeBwZhEu983DfnnPm47+05BjXHkEH1c9nTqcstvPTg3j0KGz83iF9ZXQLKPXvNfk58wRFFx8QaRTBLzTshF5WxJlBRvhcqGoVEJCQiIYb46quRhbHmWWCYI64ViUT2I1ERJnCQiFImC29AZoGkk3AonQldnQmJSKgmKhZYITD389vbW+QofUwzzs7O3JAds2ZhQPvq6mqsGUNwCmDm28nJSa9cLktEeQC7GRxVjDAR4dSCGQnWEYeHh040iKpWqznnBFxczs/P3bQ13cAwYBgzQimdpRh9MFVBQEErHz/YaSAgos7R0VEr6jC2f3d316tWqy4yMW43CvxJ8DBBQN22JRFlCISBCwadj20R0SWK09NT93dxcTH0czO7QWhmahOMYkQrxIdzUKVSUU2UZUhB1CGIh8hCJLFIEYXVP1FDlv0pzD/uG0cALKeAaPWVc4lElAGOj4+deRHphOiTllERaZLUZjXUwcHBl7WSRJQREJBFFqY+jcK8IM0MioiFz9rt7W3oVRgRBxCnzRqKgCzF+b3d/FAfsZAm/6XBpkSUgCiHMEtn1C1h39ve3nYi4hbA2NhYW1qiBrKUZUJASN22ZVeDeRVPYe8TdYNUhCgoxvH18xuuWsHNuiKmrG7EHTLU8eWkL+rrAexgSPIANmL097e0hgwJIREJiUiosI4PNp74DuIvaOBweXl56eZvB/wI8XPG/ZKrqqenJ296etpbX193rpY4X97f33e0PTMz02rD33aYj+Ha2pqbfx6bUR7OPjw8eBMTE97Ly4szleSKz0wl2d7S0lLbfPR2LDyQ7eW4olzKbT8koj6gY4IdDjc3N16j0fB2dnY6PsM/dmtrq+3//B0ZRZi4TKwnJyfOdjUIJpvj4+NtokhyXLaPwR+M0lmf0DEbGxtOFEQCP3d3dx0TyBjz8/POXj8uRDI615aLiwu3nrZoMwz2gX0Z1HGpJkoBnK6JADxdf3x8bK2fm5tzv9QgdArrZ2dnY2+LNMUv35bl5WW3nrZoM6zDWc++wOjoaIf/Mfa/pVKp5+NSTTRASC1+SFukMAO376mpKRctrq+vvff3d9dZKysr7lnWV+0FoYaKch2nw2mT7fMY4/n52RsZGXH1z+bmZstVHCfyer3uIox9Z2FhofUQuJfj6mV//hd0szEn6Gaj0H0iIREJke3CGnv5P40P9YRElIxhDf8VSmdCIhISkRB91kRXXsCetkBzohSJqzQjEe8g7Osc55r9Zj+nenX2o7kI4WB2GJ0Fkbgm+vW5fNepEH3yk5qorPMgElBBRLwp9ftzedX5EDF4beqm9Be/DcAm5uwH3wAAAABJRU5ErkJggg=="> + <div> + 糟糕, 您访问的页面不存在啦! + </div> + </div> + </body> +</html> diff --git a/src/main/websrc/502.html b/src/main/websrc/502.html new file mode 100644 index 0000000..c7b886b --- /dev/null +++ b/src/main/websrc/502.html @@ -0,0 +1,65 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>灵犀</title> + <meta name="keywords" content="热云数据 灵犀" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport"> +</head> +<style type="text/css"> + html, body{ + height: 100%; + overflow: hidden; + font-family: 'PingFang SC','Microsoft Yahei'; + } + body{ + margin: 0; + padding: 0; + } + .top, .content{ + width: 100%; + height: 47px; + position: absolute; + } + .top{ + background-color: #1b1b21; + top: 0px; + line-height: 47px; + } + .content{ + height: auto; + background-color: #f1f1f1; + top: 47px; + bottom: 0px; + text-align: center; + } + .content img{ + margin-top: 100px; + } + .content div{ + margin-top: 30px; + color: #333333; + font-size: 16px; + } + .content div div{ + margin-top: 10px; + color: #999999; + font-size: 14px; + } +</style> + <body> + <div class="top"> + <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAAAuCAYAAAE0B0cFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADR5JREFUeNpi/P//PwM9ARMDnQELPsnY+QwM334xcHOxMXxdnEgfH/5fncbwA4v4aSgtBsRzoOwSINYB4ix8BjLii0OgD8GSUN8xokkzA/FfNDE1IL5FtoW0AAABRFcLmQZF6gSlzJ9/GBjYWeBxR1ufrUplkAGlTpDFUHAFShugKX0NpV+SG2cwS0B5jgdJnBWIfw/6BAIQQHRP/oO+fI6aC2dOAeIQWAIebICsmIN6BFnjLyBmVxZlYGjwwVDODsQ/kficQPydSKtAGUocyrYB4iM0j7nvvxlMgZRjvhMDo78+uHooBFaICsLcGEqvIHnsNNSB6B6bg+aZmVC2DpSGmXpkNM8NZJuIngAggEZjbtRzw8FzoGrg7z9EEwZE3AW2hIJmDj7PsZCjKWEhmHqcacfAOP0QwzUgW4tEI8QJNQoHOlnKAD0GAprgyogNRe4wgUA8icU8dhz2nIfSjvTy3P8fvxn4ga3pW7/+MDjBkmfkXJzm/oHSIkhilUjsDWitGEkktiGU3khzz8kJQfsFzAyfgJQnkN4PpL+pAxOamQJWLfdx2BeAxxrkLkcOlJ5Oj3ru/9yjDIwHbiHalnnAZpipPJjPSKXswg/EHwn0+Ecr8VHPDUUAEEDDOlmOpspRMBpxo2AAuwTk9JFAANgYBbdheIDt4wXx4AkF0IiRVOAMhq9MwIYNMxNkYPvrLwaGdemjkTPgEQcDHKxgyhnY0d0DjUxQO/Q/Dzu8f/cK3vtFBXfR2qwtQDyPDCc8AXXTsJitTIZZp4DYDMqWgiZCkA+nAXHDcCsq+4F4D6hx//0XA0uECQMDkIZ170Cd8kAQg4cNkksbt8L1gQJWCYifQ2lQpF1igIzd+jNARvNBXUNXIL6GZB+oR2YJxMvRupTFQGwCZR9DUx8F7YktRBL/AMRBQFzHgBgnlofSllBzpRkg86KgSLs1nHIcyDOqIAYnGwMLsP++AsgM99ZlCA2dxSAOzI2giFsHDWRQ4DHceEEw0SEXqAehkSgL5WcDMR+UfRxKf4VmaOTci9z33wfEy6DsmUiDJQJI5gijuQMUgRfQxHiGRcQBI6kASFnHzGN4zcjIUArMZf+B7A0//jAEc7IylAMjbTVQ3puXg2HbtEhw3ecGxLuwGMWFxEaeb5kExE3QYjAfiDWAeCo0J3gCcRoQh0JzBCjSQPOz7kDcCSrBkczhxBL4ttAIT4fmJh80+RXQCF0PSmtQPtdw6ceBUv+K8NkMb9lYGHBaCIw4RmDE2UBz5mCZxpSCRjIo54GmzyRGO+CjYLQfN9IAQAD2rSYkqigKfzNPZ0YrzUAyiBa1yIiirEUU/UNIQWRJSYS2GowgapNRtKisFrUogij7M6wopIR+IIgIdJNEWYtwoRU4loMLC39izMnpnHfvnXnzeKMzRpMM98Bh3n1z581793vnnnPPd662OG1xWjRwWjRwGjgtGjgtfy//PHOimIFpXuDy7rivVDgbTT/tug54DGD7UqBsiQbnvwKnpH8YKK8TJXBntwHFRXhLpz81vQcaWgV6uR4NyKQDjoHJEbRO8YlnKFk1D8u//QC6+lA/xWPmEn+l4RaYQAppHzcxac9y427rF+wJfMc9lwtVdC4Q9zbF3xWXN3626USE7XmD7Rwnip9P4ForEZ/k5sRyUD6HkYnAVSc4z1n7qFe7/RoYjJEt7RAc3FX5OdcGhpJEdac+B7+qLHCQtNTWP38Mi1WSYxk7cgCogEg+M6UUzkTgzNLP0QgOLSjCnYJck3dThGVbdFRoSq2qjwOPJdt2rT456Gw1XIXJm22eIEaprINgypnoPGgDLWxp35efTPEwr8b8Wo+lL5O7N+R/OeUHK2ztIxnl4yxTUpAixgvlJXhKxx/I3+3t7EWlfKOPkZ42wSNb+ko+cP7MhNfbR/rYZiVMu+wgfQhBysrqZLMmmS3yJ+mA7bmHLS+GsvpF8piBPIUY693rcB89tvabTLI4ZqKZ0+KosnOT2G2whfRoqThW28tqkXw9tHWa5FKDj6TNEhyWboffMKm6OclARknjOH2n29ozMgK4FeSRwqMwIhE0ULPFcGN1zSOxtBv5DdelV1FggwTqYQpWvFypz5rlTnrW4HKChaRrLL7OqQDoJQSLncpMsz6Bj0w0hddkxFS5fy2mkvqbO1BZ14I8AqaXfFfhzmvwu13IzzZwjqcXAndW7VYa7UKz9ODiOBZmHTD2V8chin5uyqmQ95FwqcF5iFqUAtIHMlDZyG5WRn8RS/DitVmcem06SM/I3yjrMixWqXxilbT8K2lZXqWBjxuQAcQcWoAvo8CjyalTaASzG/1mldYtOfBlKf4Ph+dDKa7rUn146xZnp+g1bWvEdAQnHCZXvwsgQKB1Jerky0Z3fwiuPB8WQ5TPpSpDKfZPFrQXpAdI+b5OjtEvrQt7zYDrzIkWDZwWDZwGTsukkj8CtHetsVGUUfQsfQnYYAzUEJUqGsEUFBuV2EA0kZhqkB9aLGIkPigxamKMib+M1scfoz9AkNAoxB/aqBATkqYEkwJ1VbQqtjyadAtGIqWoKGKT1j7He2budr+dbrfbgk2z3pNM2p3OTHdm7/nuvd/ecz8LTgwGGykNBiOcwWAwwhkMRjiDwZACudlwE26/axZJz5oOvPVg0AMnBVg9xy/JWarJgjAWf/WGD2rtDDp15GuBJPvlPLrUquINRrgkRCJA3yCwr224hxEG5PX82b5SgWB7mRV6OEtz2UehtjEGdAntpmkNyZnzQE7EDMRghEsfI5NwA8DOH5L39w+ieGY+Tj5ehqpl1/vr1szpHcDpXYeA3S3Iz8vBPDn3uHtOjgXcBiPchLBTCFVBz7ctivp39vvFqkeFYJWy/+WC3OEO7qzi2jzBXNhtIzVCrIlAPtY/SffLYJpDzvMIqtNGA0sJWab/M4KuT5MxZ8C62HSVcKx9ZR911slS9dSTTYaY7WN4nhpeBRIMuE8IVsI+pkI29nhzl0tgD7ctKS8kuVzLKcnlelP+H5LtZgT6kCV6jUPOa25zJvneL81gQKXhr1ZiTgZYPE75YGFoP58N5Y57ESgI/tTB6REECrgPjHBTH/wQT8pWGtr/nYScJ3r6fQnK13qMi2f0g08CJ0+4UMs6+eir60Yo9lg7zWt9pRuN5w/nNbfT6vHYYnWZTtxwoQkqEuK9alch6JTJpomUcVKxd80o90ct7B49tl1/v3OMZ8KBYFuIiLzfcL3402rsJOM3CHrnnlDvP3OUa7O+m+pBisu4zBf75lJp6MpDqboID1mU+UjG7U9eUcf1pZKSz+Z9HTj4DGotpJy6oLf5Fo7sZsjDq2Lt1WtvB8pL/Fyv4K9ubP+wCdu/iCFSkOd3M41PptyjRlCKkBCB7SCO/x4sLERJ0cLxtaz01KgYXj4R+luxhnauOD1fw6pK2Q44n1mLkvHeseaQ9OcKDS3vl60udMwCjNSHcQCgOIIqTlcUyPdGRSc13PFFkebqsyJpnwx5WObE1NSdT/MeV6oX25PmmI1IXofPPNwUAiVZzSGyfT49D9Wb10g8uQg1QjYa/j+XzYD37F0of+5ueOLxKjWUiYNthTuQaJQ9IsSMTGwWcwiJZV9d0NMedgy+TA28C4l+0lDykSCvj/F/BjTUpVw0Ls+uy/A9MreLqqdxcVjJ4a5VtVVJ9V7o2EJkpiiepQNQukYHXdniHLKCcAwPOSHiBcLTz8JeRQjWSrldWzAmM6SKaf5CXWX0aMdwvhdLYQwtQtibuDAz17jg1iubXA+nzl3U21ivhK/S/IUhKnscsFt+TsjrTcvAmHnOWSUcvep420dHMtxHYW73Bdz39wi+G702zTFl6i0tpJwK2LXB92KI/YqaaDtqGtr8Kf07hGjxFQbmFeRi68YGRGVf7ZKrseDyGZJoiTm2/4bc/FxUiwfs0tyKa9Nd1T+I2RI+Nq9cDNxanFgI8D8CvTGV5Y8h0fQDSpLrkLxe3qeaG700hpfzG6JpaMjc7Yhs9Uroi4nXNO/kQHfQ2X+Fetix5CjM+Tbp5FaJ5rouHkag6l9oHm7q4BOGiZJPeVXL0fjxehTcUISD4pU26AfOcO0pCQM/EiJ6RzrgNbbD++UcvEvy0C/nvoKgJQPDmqHuPhQ+cAuad6zDfPl5Rsjm6XXWZvh+2nWiJBWYi4WbrvRqGLlcw81m9W6LdPR/CEG3nvgETZEew34frZrTMaxb7IStDUh00KHnvFIng3aHQsIWjFya5BhSd9Zh6Mdc929n334l9416/aiGl3M1d3Nt7KyeHw4fX9T752Dwo+ayMX2vnerVf8oGQ80WPVytjoS+AQwOofyNevQd68QL4tneHneI2oela25DU0Wpb/BNSHzHxuVn34Uh01x6k07K9NjjyC7CJbsQGRu3HBjuYzr+WQ15JBJm4k0xmaJCM5IMJj3YIHCVDkwDmncyV95hj+d/QDiDwXI4g8FghDMYjHAGgxHOYDBcKP4FR9hKCDLUAUMAAAAASUVORK5CYII="> + </div> + <div class="content"> + <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAABgCAYAAAFqEaAJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACXpJREFUeNpi/P//PwMIeK56C2GQAbaHCTOCaBaYgI0mOwOlgAVdoGbZCaI1t0RZ4DfsX5sz0Ya1XfmKwmfCpujNmzdgDAeNoeR5E91QEBBqWMPwc/Mchq8W/nA5ERERDPVYXQZSCMdTM8FinGd3YDWAaG9+3bsKoqg1mijv4vXmd30nMCYWMDFQEbBgj25OwjpffMUQYoRlJ2oAgAACGwbMlyA2uaYyAvMm3Iv/yc2XR67/BDmAkew8SbX8SHReRAEfX5OfD2GGwbLOm+zpFORBHkS6EllQgTcPshDjGjD4+pGCIgbJO1AbyMt3yF4hVLTgz3Mv8LFplN8AAgjFIErqQkoBrC7FGkzUqFfJyPvEpyYQqNLhproj0LM9SUkcb9FABiCUukl2FF7LkDI6Rl4lAzBRy0H/gG0SdAcSGzJUdRSyAxg3TsMqTpWGAdHpAa0txHh+H6aD61eTFVrkJ3Rg2gFZiC0DwMXR5KiW0BHZlxNHM4pUcTIchV6QDQRgZKjaB2rPCTEMHvAOIIAYkfqAIAqUWh3p7Ij9QOwEaqtiKw4cByBUHPGmJXpXxOhpl4lhkAGCRQApvXdyehQkO4iUEQBqNFHoHmU3n/ylblWCq/qgVpuJhSoGN0cA4/YvuIKleaImpuIV+QeJhk+n9zH8UtSjKISYKHYMtE3039SdgW/bgLcmMXtZ/Bv6B6jRhqXhBgKsT2/B1ZKT+MlusLG8vM8ggNx0OLMLwWkKY3iTNY2+USawpgst9v5jZ9M1yvCpX1TNwFA0k75tbCI00T7bUxJqdOlE0r35QVYPBBcAqleXYR7iITTQ3SGqDpVTq282qFwEEEBYQ4jC+YChDBhh/UOScv5AjJnSGxDKy0wMo4A2rX1adnFpAQh1m2keSJQ6YESkJFpMoVAbxO/4RLAVNFomDXRKIthlYSB+XIfxx1cG4bklDP84eBjeJXdT5A5q9koGTUpifX4XHEBgR/34wiAyNWv4piRcMYg3Zo9vYWDYtRAyYqBlwcB47QS4LQubERtoMPApaXUfPIDAgRRWAh6rgwMiV5UN+TIJFxBcUsfATMRyHlBAvcmcCoxSJqLLuWFRJgnPyMUaQEwTMhkYT+/E9PT0bAamL++Hd5mEnjJwgX8F0xkYt8xCHWuFAqGFVQwMkRUMDGrGwzu7EVo3wdQQgt+C5R0M30y8GLi8E4dxSqJCbcVFg3JntMU9VGs3UieZSJ2NpWYqoziQMCfLiRx+f/GVDPWkDe3DACWd29HsRq2UNBhWbQ3mbglosfD+ERIO+6H+xREQVfvYgPRzhsG1vG6wAFATXwKUkrpGAwh39xKImwECCN+8my8QLwNinmEeEF+AOBKIt2Cbc8NVHvkA8aYREDgMUD9uhiYIogNo2QjMUktJqfZ5YYzhPmuL1KzhHW08jrauRwNo6PX0h/t8/2gKonUKGu6LIUbEQghCGz9Gs9hoLTYaQEO3DEIGuJbP4JKjFRiWy2dAQHhOEXgCkvHX9+GZgiiK1XcvGBh+QgJGeH45A0P1spEVQISnrvMQnD+/GT5cO8vwR0x+NIuBAPvtMwzoGwcEVncMvxSEL+bwxurUuXAmYnUaUM99YMCZegzvWowQ4D6yBj6PClqR9t87lYERthJk21yGN4omA5rF6JaCcIKLe/GbeXg5A0Ng7shMQfxruxlYCSm6dIjhjW0kSW2r4VFI//3DwPriHlFKBZc1Dv9CGgN0Eb+SjPn9CwYRXm5gdcc5MrIY86c3DILfv2CIgxZ7Mt4+h1XP/55khrfpk6iehQZlFhNcXIddgpGR4b+iLnYpYOOR5fWjEZDFrp9gwLWb9L+xK8N/nzSM86vgjcdV7XRftU/3LCayqhenHGiZMOPFg3j1fzm4noHHPnB4ZjHu4+sJK/qNfwEXz4FlwziL3TrNQPcsPVR682BQPIthqIEB74vRAgyvvthoCsIdmLRSP2zHpAcjGA0gWmcx1GldUrcQ0Ej9i6+jKWg0i40G0NAugz4zQFd9jqDNLV9ISUHRIzCxRJESQKCV56CrYL6OgIAB+dEP6mcMMOhOkRtsALQtaiKQzhsNCqxg0qA79m+0mh9iACBAe+cTEkUUx/Hvbv6p0LXMixBEh4oIOtShQzezS5eMDhL9J5Qywoqigwr9WyhaoyQLrCBSKESk6A/lQamIpEMSdNBs7ZCuiMa2m5lrudOb3UVMd3F3dsbdefP9wIOBmZ0/b7/v92eY93tx26DIHDKVi6JVseukxSlatboRbf6cHqOsnQKSnqrI/5x0whGLWQtrWKFYquxESSoTWkCF/p4waCQUEaGICJnvb2KiYIa55mYglTOuaYmI+S2RFRZwoIgMxgx1HcxAsotw0J0RZmeE7swwtHw+nS6TAowgXb/nz+A4ik1WXxdy25ug2OwYLT6AiRXr2ClWEJFuo/XlPaDzWWhTLeHteHoD2FwCFO+mamQXkR7uLPdFA7LdXbN3vH2EwLAHP7ceNPcAoYiMRMGSlivIGPoa84jsz+9DC2H5dpxkd5lBRFpGnubROvkHqD8BeIfmPDTT04uChxeAiqsiv11geRExxVdRK7S4ymYJSFm9EcGzLaGmrJlRQuu7B6gtnyr5RxFZGVU4tUJA41Hm/ORNs2qOKN8bj/mF+A4BvhGKyLJ86wHqjoWqjWnmr3CD1yuAwT7LdqMULxu1kO3+ILKw2zrF4wrQcAb+bUcwsXJ9XPGalmdL1+zMkpZo0cd2/QQ0DcfzW1j46TUtkdmzszlpuw+8exLXoTaPG0pwMrwdp7vKefUAOcEAULSLIpLRneW23Y2UwY6TgS+wny9N/EJvWsMvJbfsN4U7klpEepLX6kLmoDuxUGftJiilp8OWqNk1VVY8rpiruxP20R/wba+kJTK9O1PdUf3x8DIOCWIbGYAyPhbeHu5P+PeZ/d0oaHYCh11Sv5SU2p3ZAr+R31QD27jGui9COPZL+5J7CHGOYG05vHvOYVnhcilFJHV2lt9YpV1AenbymB9LG2toiUzpznYKN/b4JvDLl9oHWeyAveSotEG23IH1qg3AqTsgdGeElih1gfVcLtLI8xt977REhO6MkLRyZ2p5+Z7+yRh7swy4on+ezm/0vVNE/5Gq6b+E7oxQRIQiIkRjTNSBGeVpLbQmipXoMNISFSFccZ3IizPyPxuanVVHGiEh1NVh2Ask6ZjommiV7AqikctqTLSX/UCSoEwVUaFodaJ52R8kAbwR3RT+Azu0G9c3F/mKAAAAAElFTkSuQmCC"> + <div> + 糟糕, 网络不畅 + <div> + 您可以点击 <a href="javascript:location.reload();" style="color: #4e93cf;">刷新</a> 或稍后再试 + </div> + </div> + </div> + </body> +</html> diff --git a/src/main/websrc/504.html b/src/main/websrc/504.html new file mode 100644 index 0000000..c7b886b --- /dev/null +++ b/src/main/websrc/504.html @@ -0,0 +1,65 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>灵犀</title> + <meta name="keywords" content="热云数据 灵犀" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport"> +</head> +<style type="text/css"> + html, body{ + height: 100%; + overflow: hidden; + font-family: 'PingFang SC','Microsoft Yahei'; + } + body{ + margin: 0; + padding: 0; + } + .top, .content{ + width: 100%; + height: 47px; + position: absolute; + } + .top{ + background-color: #1b1b21; + top: 0px; + line-height: 47px; + } + .content{ + height: auto; + background-color: #f1f1f1; + top: 47px; + bottom: 0px; + text-align: center; + } + .content img{ + margin-top: 100px; + } + .content div{ + margin-top: 30px; + color: #333333; + font-size: 16px; + } + .content div div{ + margin-top: 10px; + color: #999999; + font-size: 14px; + } +</style> + <body> + <div class="top"> + <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAAAuCAYAAAE0B0cFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAADR5JREFUeNpi/P//PwM9ARMDnQELPsnY+QwM334xcHOxMXxdnEgfH/5fncbwA4v4aSgtBsRzoOwSINYB4ix8BjLii0OgD8GSUN8xokkzA/FfNDE1IL5FtoW0AAABRFcLmQZF6gSlzJ9/GBjYWeBxR1ufrUplkAGlTpDFUHAFShugKX0NpV+SG2cwS0B5jgdJnBWIfw/6BAIQQHRP/oO+fI6aC2dOAeIQWAIebICsmIN6BFnjLyBmVxZlYGjwwVDODsQ/kficQPydSKtAGUocyrYB4iM0j7nvvxlMgZRjvhMDo78+uHooBFaICsLcGEqvIHnsNNSB6B6bg+aZmVC2DpSGmXpkNM8NZJuIngAggEZjbtRzw8FzoGrg7z9EEwZE3AW2hIJmDj7PsZCjKWEhmHqcacfAOP0QwzUgW4tEI8QJNQoHOlnKAD0GAprgyogNRe4wgUA8icU8dhz2nIfSjvTy3P8fvxn4ga3pW7/+MDjBkmfkXJzm/oHSIkhilUjsDWitGEkktiGU3khzz8kJQfsFzAyfgJQnkN4PpL+pAxOamQJWLfdx2BeAxxrkLkcOlJ5Oj3ru/9yjDIwHbiHalnnAZpipPJjPSKXswg/EHwn0+Ecr8VHPDUUAEEDDOlmOpspRMBpxo2AAuwTk9JFAANgYBbdheIDt4wXx4AkF0IiRVOAMhq9MwIYNMxNkYPvrLwaGdemjkTPgEQcDHKxgyhnY0d0DjUxQO/Q/Dzu8f/cK3vtFBXfR2qwtQDyPDCc8AXXTsJitTIZZp4DYDMqWgiZCkA+nAXHDcCsq+4F4D6hx//0XA0uECQMDkIZ170Cd8kAQg4cNkksbt8L1gQJWCYifQ2lQpF1igIzd+jNARvNBXUNXIL6GZB+oR2YJxMvRupTFQGwCZR9DUx8F7YktRBL/AMRBQFzHgBgnlofSllBzpRkg86KgSLs1nHIcyDOqIAYnGwMLsP++AsgM99ZlCA2dxSAOzI2giFsHDWRQ4DHceEEw0SEXqAehkSgL5WcDMR+UfRxKf4VmaOTci9z33wfEy6DsmUiDJQJI5gijuQMUgRfQxHiGRcQBI6kASFnHzGN4zcjIUArMZf+B7A0//jAEc7IylAMjbTVQ3puXg2HbtEhw3ecGxLuwGMWFxEaeb5kExE3QYjAfiDWAeCo0J3gCcRoQh0JzBCjSQPOz7kDcCSrBkczhxBL4ttAIT4fmJh80+RXQCF0PSmtQPtdw6ceBUv+K8NkMb9lYGHBaCIw4RmDE2UBz5mCZxpSCRjIo54GmzyRGO+CjYLQfN9IAQAD2rSYkqigKfzNPZ0YrzUAyiBa1yIiirEUU/UNIQWRJSYS2GowgapNRtKisFrUogij7M6wopIR+IIgIdJNEWYtwoRU4loMLC39izMnpnHfvnXnzeKMzRpMM98Bh3n1z581793vnnnPPd662OG1xWjRwWjRwGjgtGjgtfy//PHOimIFpXuDy7rivVDgbTT/tug54DGD7UqBsiQbnvwKnpH8YKK8TJXBntwHFRXhLpz81vQcaWgV6uR4NyKQDjoHJEbRO8YlnKFk1D8u//QC6+lA/xWPmEn+l4RaYQAppHzcxac9y427rF+wJfMc9lwtVdC4Q9zbF3xWXN3626USE7XmD7Rwnip9P4ForEZ/k5sRyUD6HkYnAVSc4z1n7qFe7/RoYjJEt7RAc3FX5OdcGhpJEdac+B7+qLHCQtNTWP38Mi1WSYxk7cgCogEg+M6UUzkTgzNLP0QgOLSjCnYJck3dThGVbdFRoSq2qjwOPJdt2rT456Gw1XIXJm22eIEaprINgypnoPGgDLWxp35efTPEwr8b8Wo+lL5O7N+R/OeUHK2ztIxnl4yxTUpAixgvlJXhKxx/I3+3t7EWlfKOPkZ42wSNb+ko+cP7MhNfbR/rYZiVMu+wgfQhBysrqZLMmmS3yJ+mA7bmHLS+GsvpF8piBPIUY693rcB89tvabTLI4ZqKZ0+KosnOT2G2whfRoqThW28tqkXw9tHWa5FKDj6TNEhyWboffMKm6OclARknjOH2n29ozMgK4FeSRwqMwIhE0ULPFcGN1zSOxtBv5DdelV1FggwTqYQpWvFypz5rlTnrW4HKChaRrLL7OqQDoJQSLncpMsz6Bj0w0hddkxFS5fy2mkvqbO1BZ14I8AqaXfFfhzmvwu13IzzZwjqcXAndW7VYa7UKz9ODiOBZmHTD2V8chin5uyqmQ95FwqcF5iFqUAtIHMlDZyG5WRn8RS/DitVmcem06SM/I3yjrMixWqXxilbT8K2lZXqWBjxuQAcQcWoAvo8CjyalTaASzG/1mldYtOfBlKf4Ph+dDKa7rUn146xZnp+g1bWvEdAQnHCZXvwsgQKB1Jerky0Z3fwiuPB8WQ5TPpSpDKfZPFrQXpAdI+b5OjtEvrQt7zYDrzIkWDZwWDZwGTsukkj8CtHetsVGUUfQsfQnYYAzUEJUqGsEUFBuV2EA0kZhqkB9aLGIkPigxamKMib+M1scfoz9AkNAoxB/aqBATkqYEkwJ1VbQqtjyadAtGIqWoKGKT1j7He2budr+dbrfbgk2z3pNM2p3OTHdm7/nuvd/ecz8LTgwGGykNBiOcwWAwwhkMRjiDwZACudlwE26/axZJz5oOvPVg0AMnBVg9xy/JWarJgjAWf/WGD2rtDDp15GuBJPvlPLrUquINRrgkRCJA3yCwr224hxEG5PX82b5SgWB7mRV6OEtz2UehtjEGdAntpmkNyZnzQE7EDMRghEsfI5NwA8DOH5L39w+ieGY+Tj5ehqpl1/vr1szpHcDpXYeA3S3Iz8vBPDn3uHtOjgXcBiPchLBTCFVBz7ctivp39vvFqkeFYJWy/+WC3OEO7qzi2jzBXNhtIzVCrIlAPtY/SffLYJpDzvMIqtNGA0sJWab/M4KuT5MxZ8C62HSVcKx9ZR911slS9dSTTYaY7WN4nhpeBRIMuE8IVsI+pkI29nhzl0tgD7ctKS8kuVzLKcnlelP+H5LtZgT6kCV6jUPOa25zJvneL81gQKXhr1ZiTgZYPE75YGFoP58N5Y57ESgI/tTB6REECrgPjHBTH/wQT8pWGtr/nYScJ3r6fQnK13qMi2f0g08CJ0+4UMs6+eir60Yo9lg7zWt9pRuN5w/nNbfT6vHYYnWZTtxwoQkqEuK9alch6JTJpomUcVKxd80o90ct7B49tl1/v3OMZ8KBYFuIiLzfcL3402rsJOM3CHrnnlDvP3OUa7O+m+pBisu4zBf75lJp6MpDqboID1mU+UjG7U9eUcf1pZKSz+Z9HTj4DGotpJy6oLf5Fo7sZsjDq2Lt1WtvB8pL/Fyv4K9ubP+wCdu/iCFSkOd3M41PptyjRlCKkBCB7SCO/x4sLERJ0cLxtaz01KgYXj4R+luxhnauOD1fw6pK2Q44n1mLkvHeseaQ9OcKDS3vl60udMwCjNSHcQCgOIIqTlcUyPdGRSc13PFFkebqsyJpnwx5WObE1NSdT/MeV6oX25PmmI1IXofPPNwUAiVZzSGyfT49D9Wb10g8uQg1QjYa/j+XzYD37F0of+5ueOLxKjWUiYNthTuQaJQ9IsSMTGwWcwiJZV9d0NMedgy+TA28C4l+0lDykSCvj/F/BjTUpVw0Ls+uy/A9MreLqqdxcVjJ4a5VtVVJ9V7o2EJkpiiepQNQukYHXdniHLKCcAwPOSHiBcLTz8JeRQjWSrldWzAmM6SKaf5CXWX0aMdwvhdLYQwtQtibuDAz17jg1iubXA+nzl3U21ivhK/S/IUhKnscsFt+TsjrTcvAmHnOWSUcvep420dHMtxHYW73Bdz39wi+G702zTFl6i0tpJwK2LXB92KI/YqaaDtqGtr8Kf07hGjxFQbmFeRi68YGRGVf7ZKrseDyGZJoiTm2/4bc/FxUiwfs0tyKa9Nd1T+I2RI+Nq9cDNxanFgI8D8CvTGV5Y8h0fQDSpLrkLxe3qeaG700hpfzG6JpaMjc7Yhs9Uroi4nXNO/kQHfQ2X+Fetix5CjM+Tbp5FaJ5rouHkag6l9oHm7q4BOGiZJPeVXL0fjxehTcUISD4pU26AfOcO0pCQM/EiJ6RzrgNbbD++UcvEvy0C/nvoKgJQPDmqHuPhQ+cAuad6zDfPl5Rsjm6XXWZvh+2nWiJBWYi4WbrvRqGLlcw81m9W6LdPR/CEG3nvgETZEew34frZrTMaxb7IStDUh00KHnvFIng3aHQsIWjFya5BhSd9Zh6Mdc929n334l9416/aiGl3M1d3Nt7KyeHw4fX9T752Dwo+ayMX2vnerVf8oGQ80WPVytjoS+AQwOofyNevQd68QL4tneHneI2oela25DU0Wpb/BNSHzHxuVn34Uh01x6k07K9NjjyC7CJbsQGRu3HBjuYzr+WQ15JBJm4k0xmaJCM5IMJj3YIHCVDkwDmncyV95hj+d/QDiDwXI4g8FghDMYjHAGgxHOYDBcKP4FR9hKCDLUAUMAAAAASUVORK5CYII="> + </div> + <div class="content"> + <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJEAAABgCAYAAAFqEaAJAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACXpJREFUeNpi/P//PwMIeK56C2GQAbaHCTOCaBaYgI0mOwOlgAVdoGbZCaI1t0RZ4DfsX5sz0Ya1XfmKwmfCpujNmzdgDAeNoeR5E91QEBBqWMPwc/Mchq8W/nA5ERERDPVYXQZSCMdTM8FinGd3YDWAaG9+3bsKoqg1mijv4vXmd30nMCYWMDFQEbBgj25OwjpffMUQYoRlJ2oAgAACGwbMlyA2uaYyAvMm3Iv/yc2XR67/BDmAkew8SbX8SHReRAEfX5OfD2GGwbLOm+zpFORBHkS6EllQgTcPshDjGjD4+pGCIgbJO1AbyMt3yF4hVLTgz3Mv8LFplN8AAgjFIErqQkoBrC7FGkzUqFfJyPvEpyYQqNLhproj0LM9SUkcb9FABiCUukl2FF7LkDI6Rl4lAzBRy0H/gG0SdAcSGzJUdRSyAxg3TsMqTpWGAdHpAa0txHh+H6aD61eTFVrkJ3Rg2gFZiC0DwMXR5KiW0BHZlxNHM4pUcTIchV6QDQRgZKjaB2rPCTEMHvAOIIAYkfqAIAqUWh3p7Ij9QOwEaqtiKw4cByBUHPGmJXpXxOhpl4lhkAGCRQApvXdyehQkO4iUEQBqNFHoHmU3n/ylblWCq/qgVpuJhSoGN0cA4/YvuIKleaImpuIV+QeJhk+n9zH8UtSjKISYKHYMtE3039SdgW/bgLcmMXtZ/Bv6B6jRhqXhBgKsT2/B1ZKT+MlusLG8vM8ggNx0OLMLwWkKY3iTNY2+USawpgst9v5jZ9M1yvCpX1TNwFA0k75tbCI00T7bUxJqdOlE0r35QVYPBBcAqleXYR7iITTQ3SGqDpVTq282qFwEEEBYQ4jC+YChDBhh/UOScv5AjJnSGxDKy0wMo4A2rX1adnFpAQh1m2keSJQ6YESkJFpMoVAbxO/4RLAVNFomDXRKIthlYSB+XIfxx1cG4bklDP84eBjeJXdT5A5q9koGTUpifX4XHEBgR/34wiAyNWv4piRcMYg3Zo9vYWDYtRAyYqBlwcB47QS4LQubERtoMPApaXUfPIDAgRRWAh6rgwMiV5UN+TIJFxBcUsfATMRyHlBAvcmcCoxSJqLLuWFRJgnPyMUaQEwTMhkYT+/E9PT0bAamL++Hd5mEnjJwgX8F0xkYt8xCHWuFAqGFVQwMkRUMDGrGwzu7EVo3wdQQgt+C5R0M30y8GLi8E4dxSqJCbcVFg3JntMU9VGs3UieZSJ2NpWYqoziQMCfLiRx+f/GVDPWkDe3DACWd29HsRq2UNBhWbQ3mbglosfD+ERIO+6H+xREQVfvYgPRzhsG1vG6wAFATXwKUkrpGAwh39xKImwECCN+8my8QLwNinmEeEF+AOBKIt2Cbc8NVHvkA8aYREDgMUD9uhiYIogNo2QjMUktJqfZ5YYzhPmuL1KzhHW08jrauRwNo6PX0h/t8/2gKonUKGu6LIUbEQghCGz9Gs9hoLTYaQEO3DEIGuJbP4JKjFRiWy2dAQHhOEXgCkvHX9+GZgiiK1XcvGBh+QgJGeH45A0P1spEVQISnrvMQnD+/GT5cO8vwR0x+NIuBAPvtMwzoGwcEVncMvxSEL+bwxurUuXAmYnUaUM99YMCZegzvWowQ4D6yBj6PClqR9t87lYERthJk21yGN4omA5rF6JaCcIKLe/GbeXg5A0Ng7shMQfxruxlYCSm6dIjhjW0kSW2r4VFI//3DwPriHlFKBZc1Dv9CGgN0Eb+SjPn9CwYRXm5gdcc5MrIY86c3DILfv2CIgxZ7Mt4+h1XP/55khrfpk6iehQZlFhNcXIddgpGR4b+iLnYpYOOR5fWjEZDFrp9gwLWb9L+xK8N/nzSM86vgjcdV7XRftU/3LCayqhenHGiZMOPFg3j1fzm4noHHPnB4ZjHu4+sJK/qNfwEXz4FlwziL3TrNQPcsPVR682BQPIthqIEB74vRAgyvvthoCsIdmLRSP2zHpAcjGA0gWmcx1GldUrcQ0Ej9i6+jKWg0i40G0NAugz4zQFd9jqDNLV9ISUHRIzCxRJESQKCV56CrYL6OgIAB+dEP6mcMMOhOkRtsALQtaiKQzhsNCqxg0qA79m+0mh9iACBAe+cTEkUUx/Hvbv6p0LXMixBEh4oIOtShQzezS5eMDhL9J5Qywoqigwr9WyhaoyQLrCBSKESk6A/lQamIpEMSdNBs7ZCuiMa2m5lrudOb3UVMd3F3dsbdefP9wIOBmZ0/b7/v92eY93tx26DIHDKVi6JVseukxSlatboRbf6cHqOsnQKSnqrI/5x0whGLWQtrWKFYquxESSoTWkCF/p4waCQUEaGICJnvb2KiYIa55mYglTOuaYmI+S2RFRZwoIgMxgx1HcxAsotw0J0RZmeE7swwtHw+nS6TAowgXb/nz+A4ik1WXxdy25ug2OwYLT6AiRXr2ClWEJFuo/XlPaDzWWhTLeHteHoD2FwCFO+mamQXkR7uLPdFA7LdXbN3vH2EwLAHP7ceNPcAoYiMRMGSlivIGPoa84jsz+9DC2H5dpxkd5lBRFpGnubROvkHqD8BeIfmPDTT04uChxeAiqsiv11geRExxVdRK7S4ymYJSFm9EcGzLaGmrJlRQuu7B6gtnyr5RxFZGVU4tUJA41Hm/ORNs2qOKN8bj/mF+A4BvhGKyLJ86wHqjoWqjWnmr3CD1yuAwT7LdqMULxu1kO3+ILKw2zrF4wrQcAb+bUcwsXJ9XPGalmdL1+zMkpZo0cd2/QQ0DcfzW1j46TUtkdmzszlpuw+8exLXoTaPG0pwMrwdp7vKefUAOcEAULSLIpLRneW23Y2UwY6TgS+wny9N/EJvWsMvJbfsN4U7klpEepLX6kLmoDuxUGftJiilp8OWqNk1VVY8rpiruxP20R/wba+kJTK9O1PdUf3x8DIOCWIbGYAyPhbeHu5P+PeZ/d0oaHYCh11Sv5SU2p3ZAr+R31QD27jGui9COPZL+5J7CHGOYG05vHvOYVnhcilFJHV2lt9YpV1AenbymB9LG2toiUzpznYKN/b4JvDLl9oHWeyAveSotEG23IH1qg3AqTsgdGeElih1gfVcLtLI8xt977REhO6MkLRyZ2p5+Z7+yRh7swy4on+ezm/0vVNE/5Gq6b+E7oxQRIQiIkRjTNSBGeVpLbQmipXoMNISFSFccZ3IizPyPxuanVVHGiEh1NVh2Ask6ZjommiV7AqikctqTLSX/UCSoEwVUaFodaJ52R8kAbwR3RT+Azu0G9c3F/mKAAAAAElFTkSuQmCC"> + <div> + 糟糕, 网络不畅 + <div> + 您可以点击 <a href="javascript:location.reload();" style="color: #4e93cf;">刷新</a> 或稍后再试 + </div> + </div> + </div> + </body> +</html> diff --git a/src/main/websrc/activation.html b/src/main/websrc/activation.html new file mode 100644 index 0000000..613d077 --- /dev/null +++ b/src/main/websrc/activation.html @@ -0,0 +1,82 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>灵犀</title> + <meta name="keywords" content="热云数据 灵犀" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport"> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> + <!-- build:css styles/login.css --> + <link rel="stylesheet" type="text/css" href="styles/login.css"> + <!-- endbuild --> + <!-- build:js scripts/change.js --> + <script src="js/app/page.js"></script> + <!-- endbuild --> + <!-- build:js scripts/regcom1.js --> + <script src="js/common/angular.min.js"></script> + <script src="js/common/echarts.min.js"></script> + <script src="js/common/jquery.min.js"></script> + <script src="js/common/jquery.cookie.min.js"></script> + <!-- endbuild --> + <!-- build:js scripts/regui.js --> + <script src="js/common/judge.js"></script> + <script src="js/login/module.js"></script> + <script src="js/app/HttpService.js"></script> + <script src="js/app/UtilService.js"></script> + <script src="js/login/acvitation.js"></script> + <!-- endbuild --> +</head> + + <body ng-app="app" ng-controller="acvitationCtrl"> + <div class="loginWrap register"> + <div class="activationWrap"> + <a class="logo" href="login.html"></a> + <div class="registerActivation">注册激活</div> + <div class="activationEmail" ng-show="acvitation == 0">激活邮件已发送至您的邮箱:{{registerEmail}}</div> + <div class="activationEmail" ng-show="acvitation == 1">激活邮件发送失败,请检查您的邮箱:{{registerEmail}}</div> + <div class="activationText" ng-show="acvitation == 0">请点击邮箱的链接完成账号注册!</div> + <div class="activationButton" ng-click="loginEmail()">立即登录邮箱</div> + <div class="sendChange"> + <li>没有收到邮件?<a ng-show="sendtype==1" href ng-click="sendAgain()">重新发一封</a><a ng-show="sendtype==2" href>{{time/1000}}秒后可重新发送</a></li> + <li>邮箱填错了?<a ng-show="sendtype==1" href ng-click="changeEmail()">更改邮箱</a><a ng-show="sendtype==2" href style="color:#a3a3b2;">更改邮箱</a></li> + </div> + </div> + </div> + <div class="openTipWin" ng-show="winFlag==1" style="z-index: 98"> + <div class="closeGray" ng-click="closeWin()"></div> + <p class="title">更改邮箱</p> + <div class="tipCont"> + <div class="formDetailItem"> + <div class="iptlabel must">注册邮箱:</div> + <input type="text" class="iptform" ng-model="oldemail" placeholder="请输入注册邮箱" readonly="readonly" style="background: #f3f3f3; color: #999; border: none"> + <div class="em"> + <em class="error" ng-if="tip.oldemail.status">{{tip.oldemail.txt}}</em> + </div> + </div> + <div class="formDetailItem"> + <div class="iptlabel must">新邮箱:</div> + <input type="text" class="iptform" ng-model="newemail" placeholder="请输入新邮箱"> + <div class="em"> + <em class="error" ng-if="tip.newemail.status">{{tip.newemail.txt}}</em> + </div> + </div> + </div> + <div class="openBtnGroup clearfix"> + <div class="btn" ng-click="saveNewEmail()">发送验证邮件</div> + </div> + </div> + <div class="copyright regt" ng-class="{'static':!hasReged}"> + 2017 TrackingIO.com All Rights Reserved <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a> + </div> + <div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;"> + <div class="spinner"> + <div class="rect1"></div> + <div class="rect2"></div> + <div class="rect3"></div> + <div class="rect4"></div> + <div class="rect5"></div> + </div> + </div> + </body> +</html> diff --git a/src/main/websrc/demo.html b/src/main/websrc/demo.html new file mode 100644 index 0000000..a8ab183 --- /dev/null +++ b/src/main/websrc/demo.html @@ -0,0 +1,38 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>灵犀</title> + <meta name="keywords" content="热云数据 灵犀" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport"> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> + <!-- build:js scripts/change.js --> + <script src="js/app/page.js"></script> + <!-- endbuild --> + <!-- build:js scripts/demo.js --> + <script src="js/common/jquery.min.js"></script> + <script src="js/common/jquery.cookie.min.js"></script> + <!-- endbuild --> + + <script type="text/javascript"> + $.get("/api/demo",function(data) { + data = JSON.parse(data); + var account = data.content.account,token = data.content.token; + + $.cookie("ryioUid",account.id); + $.cookie("ryioUname",account.email); + // $.cookie("ryioUauth",account.authStr); + window.localStorage.setItem("ryioUauth",account.authStr); + $.cookie("ryioToken",token); + $.cookie("ryioPastDate",account.pastDate); + + var isSuper = account.isSuperUser == true && account.isChannelPerson!=true; + $.cookie("ryioIsSuper",isSuper); + window.location.href="index.html"; + }); + </script> + </head> + <body> + </body> +</html> diff --git a/src/main/websrc/failure.html b/src/main/websrc/failure.html new file mode 100644 index 0000000..d1918c9 --- /dev/null +++ b/src/main/websrc/failure.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>灵犀</title> + <meta name="keywords" content="热云数据 灵犀" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport"> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> + <!-- build:css styles/login.css --> + <link rel="stylesheet" type="text/css" href="styles/login.css"> + <!-- endbuild --> + <!-- build:js scripts/change.js --> + <script src="js/app/page.js"></script> + <!-- endbuild --> + <!-- build:js scripts/regcom2.js --> + <script src="js/common/angular.min.js"></script> + <script src="js/common/echarts.min.js"></script> + <script src="js/common/jquery.min.js"></script> + <script src="js/common/jquery.cookie.min.js"></script> + <script src="js/common/china.js"></script> + <!-- endbuild --> + <!-- build:js scripts/failure.js --> + <script src="js/common/judge.js"></script> + <script src="js/login/module.js"></script> + <script src="js/app/HttpService.js"></script> + <script src="js/app/UtilService.js"></script> + <script src="js/login/failure.js"></script> + <!-- endbuild --> +</head> + + <body ng-app="app" ng-controller="failureCtrl"> + <div class="loginWrap register"> + <div class="activationWrap"> + <a class="logo" href="login.html"></a> + <div class="registerActivation">激活失败</div> + <div class="activationText">激活链接已失效!</div> + <div class="failureButton successButton" ng-click="sendAgain()" ng-show="failureType==1">重新激活</div> + <div class="failureButton successButton" ng-show="failureType==2" style="background:#a9a9a9;">重新激活</div> + <p class="failureError">{{failureText}}</p> + </div> + </div> + <div class="copyright regt" ng-class="{'static':!hasReged}"> + 2017 TrackingIO.com All Rights Reserved <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a> + </div> + <div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;"> + <div class="spinner"> + <div class="rect1"></div> + <div class="rect2"></div> + <div class="rect3"></div> + <div class="rect4"></div> + <div class="rect5"></div> + </div> + </div> +</body> +</html> diff --git a/src/main/websrc/favicon.ico b/src/main/websrc/favicon.ico new file mode 100644 index 0000000..44969a4 Binary files /dev/null and b/src/main/websrc/favicon.ico differ diff --git a/src/main/websrc/font/demo_fontclass.html b/src/main/websrc/font/demo_fontclass.html new file mode 100644 index 0000000..ac823d9 --- /dev/null +++ b/src/main/websrc/font/demo_fontclass.html @@ -0,0 +1,256 @@ + +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"/> + <title>IconFont</title> + <link rel="stylesheet" href="demo.css"> + <link rel="stylesheet" href="iconfont.css"> +</head> +<body> + <div class="main markdown"> + <h1>IconFont 图标</h1> + <ul class="icon_lists clear"> + + <li> + <i class="icon iconfont icon-campaigninfo"></i> + <div class="name">campaigninfo</div> + <div class="fontclass">.icon-campaigninfo</div> + </li> + + <li> + <i class="icon iconfont icon-attribute"></i> + <div class="name">attribute</div> + <div class="fontclass">.icon-attribute</div> + </li> + + <li> + <i class="icon iconfont icon-app"></i> + <div class="name">app</div> + <div class="fontclass">.icon-app</div> + </li> + + <li> + <i class="icon iconfont icon-campaign"></i> + <div class="name">campaign</div> + <div class="fontclass">.icon-campaign</div> + </li> + + <li> + <i class="icon iconfont icon-custommenu"></i> + <div class="name">custommenu</div> + <div class="fontclass">.icon-custommenu</div> + </li> + + <li> + <i class="icon iconfont icon-channel"></i> + <div class="name">channel</div> + <div class="fontclass">.icon-channel</div> + </li> + + <li> + <i class="icon iconfont icon-channeleffect"></i> + <div class="name">channeleffect</div> + <div class="fontclass">.icon-channeleffect</div> + </li> + + <li> + <i class="icon iconfont icon-costrecovery"></i> + <div class="name">costrecovery</div> + <div class="fontclass">.icon-costrecovery</div> + </li> + + <li> + <i class="icon iconfont icon-customset"></i> + <div class="name">customset</div> + <div class="fontclass">.icon-customset</div> + </li> + + <li> + <i class="icon iconfont icon-android"></i> + <div class="name">android</div> + <div class="fontclass">.icon-android</div> + </li> + + <li> + <i class="icon iconfont icon-dashboard"></i> + <div class="name">dashboard</div> + <div class="fontclass">.icon-dashboard</div> + </li> + + <li> + <i class="icon iconfont icon-auth"></i> + <div class="name">auth</div> + <div class="fontclass">.icon-auth</div> + </li> + + <li> + <i class="icon iconfont icon-eventlist"></i> + <div class="name">eventlist</div> + <div class="fontclass">.icon-eventlist</div> + </li> + + <li> + <i class="icon iconfont icon-funnel"></i> + <div class="name">funnel</div> + <div class="fontclass">.icon-funnel</div> + </li> + + <li> + <i class="icon iconfont icon-event"></i> + <div class="name">event</div> + <div class="fontclass">.icon-event</div> + </li> + + <li> + <i class="icon iconfont icon-effectevaluate"></i> + <div class="name">effectevaluate</div> + <div class="fontclass">.icon-effectevaluate</div> + </li> + + <li> + <i class="icon iconfont icon-eventstats"></i> + <div class="name">eventstats</div> + <div class="fontclass">.icon-eventstats</div> + </li> + + <li> + <i class="icon iconfont icon-intelligentpath"></i> + <div class="name">intelligentpath</div> + <div class="fontclass">.icon-intelligentpath</div> + </li> + + <li> + <i class="icon iconfont icon-ios"></i> + <div class="name">ios</div> + <div class="fontclass">.icon-ios</div> + </li> + + <li> + <i class="icon iconfont icon-keyword"></i> + <div class="name">keyword</div> + <div class="fontclass">.icon-keyword</div> + </li> + + <li> + <i class="icon iconfont icon-logdump"></i> + <div class="name">logdump</div> + <div class="fontclass">.icon-logdump</div> + </li> + + <li> + <i class="icon iconfont icon-logexport"></i> + <div class="name">logexport</div> + <div class="fontclass">.icon-logexport</div> + </li> + + <li> + <i class="icon iconfont icon-logtool"></i> + <div class="name">logtool</div> + <div class="fontclass">.icon-logtool</div> + </li> + + <li> + <i class="icon iconfont icon-realtime"></i> + <div class="name">realtime</div> + <div class="fontclass">.icon-realtime</div> + </li> + + <li> + <i class="icon iconfont icon-report"></i> + <div class="name">report</div> + <div class="fontclass">.icon-report</div> + </li> + + <li> + <i class="icon iconfont icon-logo"></i> + <div class="name">logo</div> + <div class="fontclass">.icon-logo</div> + </li> + + <li> + <i class="icon iconfont icon-roi"></i> + <div class="name">roi</div> + <div class="fontclass">.icon-roi</div> + </li> + + <li> + <i class="icon iconfont icon-packageinfo"></i> + <div class="name">packageinfo</div> + <div class="fontclass">.icon-packageinfo</div> + </li> + + <li> + <i class="icon iconfont icon-subcampaign"></i> + <div class="name">subcampaign</div> + <div class="fontclass">.icon-subcampaign</div> + </li> + + <li> + <i class="icon iconfont icon-usergroup"></i> + <div class="name">usergroup</div> + <div class="fontclass">.icon-usergroup</div> + </li> + + <li> + <i class="icon iconfont icon-systemparam"></i> + <div class="name">systemparam</div> + <div class="fontclass">.icon-systemparam</div> + </li> + + <li> + <i class="icon iconfont icon-retention"></i> + <div class="name">retention</div> + <div class="fontclass">.icon-retention</div> + </li> + + <li> + <i class="icon iconfont icon-wrap"></i> + <div class="name">wrap</div> + <div class="fontclass">.icon-wrap</div> + </li> + + <li> + <i class="icon iconfont icon-web"></i> + <div class="name">web</div> + <div class="fontclass">.icon-web</div> + </li> + + <li> + <i class="icon iconfont icon-userdetail"></i> + <div class="name">userdetail</div> + <div class="fontclass">.icon-userdetail</div> + </li> + + <li> + <i class="icon iconfont icon-asmeffectevaluate"></i> + <div class="name">asmeffectevaluate</div> + <div class="fontclass">.icon-asmeffectevaluate</div> + </li> + + </ul> + + <h2 id="font-class-">font-class引用</h2> + <hr> + + <p>font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题。</p> + <p>与unicode使用方式相比,具有如下特点:</p> + <ul> + <li>兼容性良好,支持ie8+,及所有现代浏览器。</li> + <li>相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。</li> + <li>因为使用class来定义图标,所以当要替换图标时,只需要修改class里面的unicode引用。</li> + <li>不过因为本质上还是使用的字体,所以多色图标还是不支持的。</li> + </ul> + <p>使用步骤如下:</p> + <h3 id="-fontclass-">第一步:引入项目下面生成的fontclass代码:</h3> + + + <pre><code class="lang-js hljs javascript"><span class="hljs-comment"><link rel="stylesheet" type="text/css" href="./iconfont.css"></span></code></pre> + <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3> + <pre><code class="lang-css hljs"><<span class="hljs-selector-tag">i</span> <span class="hljs-selector-tag">class</span>="<span class="hljs-selector-tag">iconfont</span> <span class="hljs-selector-tag">icon-xxx</span>"></<span class="hljs-selector-tag">i</span>></code></pre> + <blockquote> + <p>"iconfont"是你项目下的font-family。可以通过编辑项目查看,默认是"iconfont"。</p> + </blockquote> + </div> +</body> +</html> diff --git a/src/main/websrc/font/svg/android.svg b/src/main/websrc/font/svg/android.svg new file mode 100644 index 0000000..9bc6b39 --- /dev/null +++ b/src/main/websrc/font/svg/android.svg @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="-41 43 16 16" style="enable-background:new -41 43 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<g id="XMLID_9_"> + <g id="XMLID_10_"> + <path id="XMLID_11_" class="st0" d="M-37.3,48h8.7v0.2c0,2.2,0,4.3,0,6.5c0,0.7-0.4,1.1-1.1,1.1c-0.2,0-0.4,0-0.5,0 + c0,0.8,0,1.5,0,2.3c0,0.5-0.4,0.9-0.9,0.9s-0.9-0.3-1-0.8c0-0.8,0-1.5,0-2.3h-1.7c0,0.3,0,0.6,0,0.9c0,0.5,0,0.9,0,1.4 + c0,0.4-0.4,0.7-0.8,0.8c-0.5,0-0.9-0.2-1-0.6c0-0.1,0,0,0-0.1c0-0.6,0-1.3,0-1.9c0-0.1,0-0.2,0-0.3c-0.2,0-0.4,0-0.6,0 + c-0.6,0-1-0.4-1-1c0-2.2,0-4.4,0-6.6L-37.3,48L-37.3,48z M-28.7,47.4h-8.6c0-1.5,0.9-2.4,2.2-3.1c-0.2-0.2-0.3-0.4-0.4-0.6 + c-0.1-0.1-0.2-0.2-0.3-0.4c-0.1-0.1-0.2-0.2,0-0.3c0.2-0.1,0.2,0,0.3,0.1c0.1,0.3,0.3,0.5,0.5,0.8s0.2,0.3,0.5,0.2 + c1.1-0.3,2.2-0.3,3.2,0.1h0.1c0.2-0.3,0.4-0.7,0.7-1l0.1-0.1c0.1-0.1,0.1-0.2,0.2-0.1c0.1,0.1,0.1,0.2,0,0.2 + c-0.2,0.3-0.4,0.6-0.6,0.9c0,0.1-0.1,0.1-0.1,0.2C-29.6,45-28.7,45.9-28.7,47.4L-28.7,47.4z M-30.7,45.7c0-0.3-0.2-0.5-0.5-0.5 + c-0.3,0-0.5,0.2-0.5,0.5s0.2,0.5,0.5,0.5C-30.9,46.2-30.7,46-30.7,45.7L-30.7,45.7z M-34.4,45.7c0-0.3-0.2-0.5-0.5-0.5 + c-0.3,0-0.5,0.2-0.5,0.5s0.2,0.5,0.5,0.5C-34.6,46.2-34.4,46-34.4,45.7L-34.4,45.7z M-26.2,51c0,0.6,0,1.3,0,1.9s-0.4,1-0.9,1 + s-0.9-0.4-0.9-1c0-1.3,0-2.6,0-3.9c0-0.5,0.4-0.9,0.8-0.9c0.5-0.1,0.9,0.3,1,0.7c0,0.1,0,0.2,0,0.3C-26.2,49.7-26.2,50.3-26.2,51 + L-26.2,51z M-38,51c0,0.7,0,1.3,0,2c0,0.4-0.3,0.8-0.7,0.9c-0.4,0.1-0.8-0.1-1-0.4c-0.1-0.1-0.1-0.3-0.1-0.5c0-1.3,0-2.7,0-4 + c0-0.6,0.4-1,0.9-1s0.9,0.4,0.9,1C-37.9,49.6-38,50.3-38,51L-38,51L-38,51z"/> + </g> +</g> +</svg> diff --git a/src/main/websrc/font/svg/app.svg b/src/main/websrc/font/svg/app.svg new file mode 100644 index 0000000..062e018 --- /dev/null +++ b/src/main/websrc/font/svg/app.svg @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path class="st0" d="M12,7H9V4c0-1.7,1.3-3,3-3s3,1.3,3,3S13.7,7,12,7z M12,2c-1.1,0-2,0.9-2,2v2h2c1.1,0,2-0.9,2-2S13.1,2,12,2z + M4,15c-1.7,0-3-1.3-3-3s1.3-3,3-3h3v3C7,13.7,5.7,15,4,15z M6,10H4c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2V10z M1,4c0-1.7,1.3-3,3-3 + s3,1.3,3,3v3H4C2.3,7,1,5.7,1,4z M6,4c0-1.1-0.9-2-2-2S2,2.9,2,4s0.9,2,2,2h2V4z M15,12c0,1.7-1.3,3-3,3s-3-1.3-3-3V9h3 + C13.7,9,15,10.3,15,12z M10,12c0,1.1,0.9,2,2,2s2-0.9,2-2s-0.9-2-2-2h-2V12z"/> +</svg> diff --git a/src/main/websrc/font/svg/asmeffectevaluate.svg b/src/main/websrc/font/svg/asmeffectevaluate.svg new file mode 100644 index 0000000..22c7644 --- /dev/null +++ b/src/main/websrc/font/svg/asmeffectevaluate.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#5F97FB;} +</style> +<path id="XMLID_2_" class="st0" d="M12.5,5.9H2v8h2h1v1H2c-0.6,0-1-0.4-1-1v-8v-1v-3v-1h1h10.5C13.9,0.9,15,2,15,3.4 + S13.9,5.9,12.5,5.9z M12.5,1.9H2v3h10.5c0.8,0,1.5-0.7,1.5-1.5S13.3,1.9,12.5,1.9z M14,11.9c0-1.1-0.9-2-2-2H6.5l2,2l-0.7,0.7 + L5.1,9.9H5v-1h7c1.7,0,3,1.3,3,3s-1.3,3-3,3H7v-1h5C13.1,13.9,14,13,14,11.9z"/> +</svg> diff --git a/src/main/websrc/font/svg/attribute.svg b/src/main/websrc/font/svg/attribute.svg new file mode 100644 index 0000000..751ad27 --- /dev/null +++ b/src/main/websrc/font/svg/attribute.svg @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path class="st0" d="M15.2,14.5l-0.7,0.7l-3.7-3.7C9.8,12.4,8.4,13,7,13c-3.3,0-6-2.7-6-6V7c0-3.3,2.7-6,6-6c3.3,0,6,2.7,6,6V7 + c0,1.5-0.5,2.8-1.4,3.8L15.2,14.5z M12,7c0-2.8-2.2-5-5-5h0C4.2,2,2,4.2,2,7v0c0,2.8,2.2,5,5,5h0C9.7,12,12,9.8,12,7L12,7z"/> +</svg> diff --git a/src/main/websrc/font/svg/auth.svg b/src/main/websrc/font/svg/auth.svg new file mode 100644 index 0000000..b61b67d --- /dev/null +++ b/src/main/websrc/font/svg/auth.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path id="XMLID_2_" class="st0" d="M12.5,16h-9c-1.1,0-2-0.9-2-2c0-2.8,2.2-5,5-5h3c2.8,0,5,2.2,5,5C14.5,15.1,13.6,16,12.5,16z + M9.5,10h-3c-2.2,0-4,1.8-4,4c0,0.6,0.4,1,1,1h9c0.6,0,1-0.4,1-1C13.5,11.8,11.7,10,9.5,10z M7.5,8c-2.2,0-4-1.8-4-4s1.8-4,4-4 + s4,1.8,4,4S9.7,8,7.5,8z M7.5,1c-1.7,0-3,1.3-3,3s1.3,3,3,3s3-1.3,3-3S9.2,1,7.5,1z"/> +</svg> diff --git a/src/main/websrc/font/svg/campaign.svg b/src/main/websrc/font/svg/campaign.svg new file mode 100644 index 0000000..d281340 --- /dev/null +++ b/src/main/websrc/font/svg/campaign.svg @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path id="XMLID_3_" class="st0" d="M15.5,1.4v13.2l-1-0.3L9,12.5H8.5H5c-2.5,0-4.5-2-4.5-4.5s2-4.5,4.5-4.5h3.5H9l5.5-1.8 M8.5,4.5 + H5C3.1,4.5,1.5,6.1,1.5,8s1.6,3.5,3.5,3.5h3.5V4.5z M9.5,4.3v0.2v7v0.2l5,1.6V2.6L9.5,4.3z"/> +</svg> diff --git a/src/main/websrc/font/svg/campaigninfo.svg b/src/main/websrc/font/svg/campaigninfo.svg new file mode 100644 index 0000000..748a781 --- /dev/null +++ b/src/main/websrc/font/svg/campaigninfo.svg @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path id="XMLID_2_" class="st0" d="M16,6.1l-5.5-0.8L8,0L5.5,5.3L0,6.1l4,4.1L3,16l5-2.7l5,2.7L12,10.2L16,6.1z M8,12.1l-3.7,2.1 + L5,10L1.8,6.7l4.3-0.6l1.9-4l1.9,4l4.3,0.6L11,10l0.7,4.2L8,12.1z"/> +</svg> diff --git a/src/main/websrc/font/svg/channel.svg b/src/main/websrc/font/svg/channel.svg new file mode 100644 index 0000000..35a138b --- /dev/null +++ b/src/main/websrc/font/svg/channel.svg @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path id="XMLID_2_" class="st0" d="M15.9,9.1c0,0.4-0.1,0.7-0.2,1.1c-0.9-0.4-2,0-2.5,0.8c-0.5,0.9-0.3,2,0.5,2.6 + c-0.2,0.2-0.5,0.5-0.8,0.7c0,0,0,0,0,0c-0.3,0.2-0.6,0.5-1,0.7c0,0,0,0,0,0c-0.3,0.2-0.7,0.4-1.1,0.5c-0.3,0.1-0.6,0.2-1,0.3 + c-0.1-1-1-1.7-2-1.7s-1.8,0.8-2,1.7c-0.3-0.1-0.7-0.2-1-0.3c-0.4-0.1-0.7-0.3-1.1-0.5c0,0,0,0,0,0c-0.3-0.2-0.7-0.4-1-0.7 + c0,0,0,0,0,0c-0.3-0.2-0.5-0.4-0.8-0.7c0.8-0.6,1-1.7,0.5-2.6c-0.5-0.9-1.6-1.2-2.5-0.8C0.2,9.8,0.1,9.5,0.1,9.1C0,8.7,0,8.4,0,8 + s0-0.7,0.1-1.1c0.1-0.4,0.1-0.7,0.2-1.1c0.9,0.4,2,0,2.5-0.8c0.5-0.9,0.3-2-0.5-2.6C2.5,2.2,2.8,1.9,3,1.7c0,0,0,0,0,0 + c0.3-0.2,0.6-0.5,1-0.7c0,0,0,0,0,0c0.3-0.2,0.7-0.4,1.1-0.5c0.3-0.1,0.6-0.2,1-0.3C6.2,1.2,7,2,8,2s1.8-0.8,2-1.7 + c0.3,0.1,0.7,0.2,1,0.3c0.4,0.1,0.7,0.3,1.1,0.5c0,0,0,0,0,0c0.3,0.2,0.7,0.4,1,0.7c0,0,0,0,0,0c0.3,0.2,0.5,0.4,0.8,0.7 + c-0.8,0.6-1,1.7-0.5,2.6c0.5,0.9,1.6,1.2,2.5,0.8c0.1,0.3,0.2,0.7,0.2,1.1C16,7.3,16,7.6,16,8S16,8.7,15.9,9.1z M14.9,7 + c-1,0-2-0.5-2.6-1.5c-0.6-1-0.5-2.1,0-3c-0.5-0.4-1.1-0.8-1.8-1C10.1,2.4,9.1,3,8,3S5.9,2.4,5.4,1.5c-0.6,0.3-1.2,0.6-1.8,1 + c0.5,0.9,0.6,2,0,3C3.1,6.5,2.1,7,1.1,7C1,7.3,1,7.7,1,8s0,0.7,0.1,1c1,0,2,0.5,2.6,1.5c0.6,1,0.5,2.1,0,3c0.5,0.4,1.1,0.8,1.8,1 + C5.9,13.6,6.9,13,8,13s2.1,0.6,2.6,1.5c0.6-0.3,1.2-0.6,1.8-1c-0.5-0.9-0.6-2,0-3c0.6-1,1.6-1.5,2.6-1.5C15,8.7,15,8.3,15,8 + S15,7.3,14.9,7z M8,11c-1.7,0-3-1.3-3-3s1.3-3,3-3s3,1.3,3,3S9.7,11,8,11z M8,6C6.9,6,6,6.9,6,8s0.9,2,2,2s2-0.9,2-2S9.1,6,8,6z"/> +</svg> diff --git a/src/main/websrc/font/svg/channeleffect.svg b/src/main/websrc/font/svg/channeleffect.svg new file mode 100644 index 0000000..a35939d --- /dev/null +++ b/src/main/websrc/font/svg/channeleffect.svg @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path id="XMLID_2_" class="st0" d="M12.6,15.5v-1h-9v1h-3v-3h3v1h9v-1h3v3H12.6z M12.6,8.5h-3v1h-3v-1h-3v1h-3v-3h3v1h3v-1h1v-3h-1 + v-3h3v3h-1v3h1v1h3v-1h3v3h-3V8.5z"/> +</svg> diff --git a/src/main/websrc/font/svg/costrecovery.svg b/src/main/websrc/font/svg/costrecovery.svg new file mode 100644 index 0000000..81c0a4f --- /dev/null +++ b/src/main/websrc/font/svg/costrecovery.svg @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path id="XMLID_2_" class="st0" d="M15.6,8.5h-1c-0.2,3.2-2.8,5.7-6,5.9v1.1h-1v-1.1c-3.2-0.2-5.7-2.8-6-5.9h-1v-1h1 + c0.2-3.2,2.8-5.7,6-5.9v-1h1v1c3.2,0.2,5.7,2.8,6,5.9h1V8.5z M8.6,13.4c2.6-0.2,4.7-2.3,5-4.9h-2c-0.2,1.5-1.4,2.7-3,2.9V13.4z + M8.6,7.5h1.9c-0.2-1-1-1.8-1.9-1.9V7.5z M10.6,8.5H8.6v1.9C9.6,10.3,10.4,9.5,10.6,8.5z M7.6,8.5H5.7c0.2,1,1,1.8,1.9,1.9V8.5z + M7.6,13.4v-2c-1.5-0.2-2.7-1.4-3-2.9h-2C2.9,11.1,5,13.2,7.6,13.4z M7.6,2.5C5,2.8,2.9,4.9,2.7,7.5h2c0.2-1.5,1.4-2.7,3-2.9V2.5z + M5.7,7.5h1.9V5.6C6.6,5.7,5.9,6.5,5.7,7.5z M8.6,2.5v2c1.5,0.2,2.7,1.4,3,2.9h2C13.3,4.9,11.2,2.8,8.6,2.5z"/> +</svg> diff --git a/src/main/websrc/font/svg/custommenu.svg b/src/main/websrc/font/svg/custommenu.svg new file mode 100644 index 0000000..f72ad02 --- /dev/null +++ b/src/main/websrc/font/svg/custommenu.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path class="st0" d="M13.5,15.5h-11c-1.1,0-2-0.9-2-2v-11c0-1.1,0.9-2,2-2h11c1.1,0,2,0.9,2,2v11C15.5,14.6,14.6,15.5,13.5,15.5z + M14.5,2.5c0-0.6-0.4-1-1-1h-11c-0.6,0-1,0.4-1,1v11c0,0.6,0.4,1,1,1h11c0.6,0,1-0.4,1-1V2.5z M13,12H3c-0.3,0-0.5-0.2-0.5-0.5 + S2.7,11,3,11h10c0.3,0,0.5,0.2,0.5,0.5S13.3,12,13,12z M13,9c-0.3,0-0.5-0.2-0.5-0.5V5.8L9,9.8C8.7,10,8.3,10.1,8.1,9.9c0,0,0,0,0,0 + C8,9.8,7.8,9.8,7.7,9.7L5.2,7.2L3.6,9.4C3.3,9.6,3,9.6,2.8,9.4c-0.2-0.2-0.2-0.5,0-0.8l1.9-2.4c0.2-0.2,0.4-0.2,0.6-0.1 + c0.2,0,0.3,0.1,0.5,0.2l2.5,2.5L11.8,5H9C8.7,5,8.5,4.8,8.5,4.5S8.7,4,9,4h4c0.1,0,0.2,0,0.3,0.1l0,0c0,0,0.1,0,0.1,0.1 + c0.1,0.1,0.2,0.3,0.1,0.4v3.9C13.5,8.8,13.3,9,13,9z"/> +</svg> diff --git a/src/main/websrc/font/svg/customset.svg b/src/main/websrc/font/svg/customset.svg new file mode 100644 index 0000000..f5e370b --- /dev/null +++ b/src/main/websrc/font/svg/customset.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path class="st0" d="M14,15h-4c-0.6,0-1-0.4-1-1v-4c0-0.6,0.4-1,1-1h4c0.6,0,1,0.4,1,1v4C15,14.6,14.6,15,14,15z M14,7h-4 + C9.4,7,9,6.6,9,6V2c0-0.6,0.4-1,1-1h4c0.6,0,1,0.4,1,1v4C15,6.6,14.6,7,14,7z M6,15H2c-0.6,0-1-0.4-1-1v-4c0-0.6,0.4-1,1-1h4 + c0.6,0,1,0.4,1,1v4C7,14.6,6.6,15,6,15z M6,7H2C1.4,7,1,6.6,1,6V2c0-0.6,0.4-1,1-1h4c0.6,0,1,0.4,1,1v4C7,6.6,6.6,7,6,7z"/> +</svg> diff --git a/src/main/websrc/font/svg/dashboard.svg b/src/main/websrc/font/svg/dashboard.svg new file mode 100644 index 0000000..c0f2602 --- /dev/null +++ b/src/main/websrc/font/svg/dashboard.svg @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path class="st0" d="M8,16c-4.4,0-8-3.6-8-8s3.6-8,8-8s8,3.6,8,8S12.4,16,8,16z M8,1C4.1,1,1,4.1,1,8s3.1,7,7,7s7-3.1,7-7 + S11.9,1,8,1z M9,9H7V7h1.3l2.2-2.2l0.7,0.7L9,7.7V9z"/> +</svg> diff --git a/src/main/websrc/font/svg/effectevaluate.svg b/src/main/websrc/font/svg/effectevaluate.svg new file mode 100644 index 0000000..bd8182c --- /dev/null +++ b/src/main/websrc/font/svg/effectevaluate.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path id="XMLID_2_" class="st0" d="M11.2,10.5l4.1,4.1l-0.7,0.7l-4.2-4.2v4.4h-1v-5v-1h1h5v1H11.2z M7.5,1.5c-3.3,0-6,2.7-6,6 + c0,3,2.2,5.4,5,5.9v1c-3.4-0.5-6-3.4-6-6.9c0-3.9,3.1-7,7-7c3.5,0,6.4,2.6,6.9,6h-1C12.9,3.7,10.4,1.5,7.5,1.5z M7.5,6.5 + c0.6,0,1,0.4,1,1s-0.4,1-1,1c-0.6,0-1-0.4-1-1S6.9,6.5,7.5,6.5z"/> +</svg> diff --git a/src/main/websrc/font/svg/event.svg b/src/main/websrc/font/svg/event.svg new file mode 100644 index 0000000..4b63a40 --- /dev/null +++ b/src/main/websrc/font/svg/event.svg @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path class="st0" d="M8,16c-4.4,0-8-3.6-8-8s3.6-8,8-8s8,3.6,8,8S12.4,16,8,16z M8,1C4.1,1,1,4.1,1,8s3.1,7,7,7s7-3.1,7-7 + S11.9,1,8,1z M8,12c-2.2,0-4-1.8-4-4s1.8-4,4-4s4,1.8,4,4S10.2,12,8,12z M8,5C6.3,5,5,6.3,5,8s1.3,3,3,3s3-1.3,3-3S9.7,5,8,5z"/> +</svg> diff --git a/src/main/websrc/font/svg/eventlist.svg b/src/main/websrc/font/svg/eventlist.svg new file mode 100644 index 0000000..e9f6e4d --- /dev/null +++ b/src/main/websrc/font/svg/eventlist.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path id="XMLID_2_" class="st0" d="M8.5,14.5v-1h7v1H8.5z M8.5,10.5h7v1h-7V10.5z M8.5,4.5h7v1h-7V4.5z M8.5,1.5h7v1h-7V1.5z + M5.5,15.5h-4c-0.6,0-1-0.4-1-1v-4c0-0.6,0.4-1,1-1h4c0.6,0,1,0.4,1,1v4C6.5,15.1,6.1,15.5,5.5,15.5z M5.5,10.5h-4v4h4V10.5z + M5.5,6.5h-4c-0.6,0-1-0.4-1-1v-4c0-0.6,0.4-1,1-1h4c0.6,0,1,0.4,1,1v4C6.5,6.1,6.1,6.5,5.5,6.5z M5.5,1.5h-4v4h4V1.5z"/> +</svg> diff --git a/src/main/websrc/font/svg/eventstats.svg b/src/main/websrc/font/svg/eventstats.svg new file mode 100644 index 0000000..a523c7a --- /dev/null +++ b/src/main/websrc/font/svg/eventstats.svg @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path id="XMLID_2_" class="st0" d="M1.5,14.5c-0.6,0-1-0.4-1-1v-3c0-0.2,0.1-0.4,0.2-0.5C0.6,9.9,0.5,9.7,0.5,9.5v-3 + c0-0.2,0.1-0.4,0.2-0.5C0.6,5.9,0.5,5.7,0.5,5.5v-3c0-0.6,0.4-1,1-1h14v4v1v3v1v4H1.5z M14.5,2.5h-13v3h13V2.5z M14.5,6.5h-13v3h13 + V6.5z M14.5,10.5h-13v3h13V10.5z M3,11.5h2c0.3,0,0.5,0.2,0.5,0.5S5.3,12.5,5,12.5H3c-0.3,0-0.5-0.2-0.5-0.5S2.7,11.5,3,11.5z + M3,7.5h2c0.3,0,0.5,0.2,0.5,0.5S5.3,8.5,5,8.5H3C2.7,8.5,2.5,8.3,2.5,8S2.7,7.5,3,7.5z M3,3.5h2c0.3,0,0.5,0.2,0.5,0.5 + S5.3,4.5,5,4.5H3C2.7,4.5,2.5,4.3,2.5,4S2.7,3.5,3,3.5z"/> +</svg> diff --git a/src/main/websrc/font/svg/funnel.svg b/src/main/websrc/font/svg/funnel.svg new file mode 100644 index 0000000..9b5d4d0 --- /dev/null +++ b/src/main/websrc/font/svg/funnel.svg @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#4186EC;} +</style> +<path id="XMLID_2_" class="st0" d="M14.4,2.1l-3.7,4.5v7.5l0,1.2l-4.5-3.2l-0.4-0.3l0-5.1L1.9,2.1L1.7,1.9L1.1,1.1l0.7,0h0.6l0,0 + h11.6l0,0l0,0h1.3L14.4,2.1z M3.2,2.1l3.4,4l0.2,0.2v3.8l0,0v1.2l3,2.1v-3.3l0,0V6.3l0.1-0.1l3.3-4H3.2z"/> +</svg> diff --git a/src/main/websrc/forget.html b/src/main/websrc/forget.html new file mode 100644 index 0000000..676e7ee --- /dev/null +++ b/src/main/websrc/forget.html @@ -0,0 +1,82 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <title>灵犀</title> + <meta name="keywords" content="热云数据 灵犀" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0" name="viewport"> + <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> + <!-- build:css styles/login.css --> + <link rel="stylesheet" type="text/css" href="styles/login.css"> + <!-- endbuild --> + <!-- build:js scripts/change.js --> + <script src="js/app/page.js"></script> + <!-- endbuild --> + <!-- build:js scripts/regcom3.js --> + <script src="js/common/angular.min.js"></script> + <script src="js/common/echarts.min.js"></script> + <script src="js/common/jquery.min.js"></script> + <script src="js/common/jquery.cookie.min.js"></script> + <!-- endbuild --> + <!-- build:js scripts/forget.js --> + <script src="js/common/judge.js"></script> + <script src="js/login/module.js"></script> + <script src="js/app/HttpService.js"></script> + <script src="js/app/UtilService.js"></script> + <script src="js/login/forget.js"></script> + <!-- endbuild --> +</head> + + <body ng-app="app" ng-controller="forgetCtrl"> + <div class="loginWrap register"> + <div class="activationWrap"> + <a class="logo" href="login.html"></a> + <div class="registerActivation">找回密码</div> + <div class="forgetText" ng-show="forgettype!='success'">我们将会给您的电子邮箱发送一个新的密码,有效期为72小时,请及时登录并修改密码!</div> + <div class="formDetailItem forgetInput" ng-show="forgettype!='success'"> + <div class="iptlabel must">邮箱:</div> + <input type="text" class="iptform" ng-model="email" placeholder="请输入邮箱"> + <button ng-click="save()">确定</button> + <div class="em"> + <em class="error" ng-if="tip.email.status">{{tip.email.txt}}</em> + </div> + </div> + </div> + <div class="regedover" ng-show="forgettype=='success'"> + <div class="tipsucc"><span class="succIcon"></span>发送邮件成功</div> + <div class="activationButton" ng-click="loginEmail()" style="margin-top: 50px;">立即登录邮箱</div> + </div> + </div> + + <div class="openBgDiv" ng-show="noActive==1" ng-cloak></div> + <div class="openTipWin" ng-show="noActive==1" ng-cloak> + <div class="closeGray" ng-click="closeWin()"></div> + <p class="titleLogin" ng-show="!newNoRegister">该账户未激活,请点击激活。</p> + <p class="titleLogin" ng-show="newNoRegister">该子账号未激活,若未收到激活邮件,请联系主账号。</p> + + <div class="openBtnGroup clearfix" ng-show="!newNoRegister"> + <div class="btn" ng-click="sendAgain()" ng-show="loginSend=='yes'">发送激活邮箱</div> + <div class="btn1" ng-show="loginSend=='no'">发送激活邮箱</div> + </div> + + <div class="openBtnGroup clearfix" ng-show="newNoRegister"> + <div class="btn" ng-click="closeWin()">确定</div> + </div> + + </div> + + <div class="copyright regt" ng-class="{'static':!hasReged}"> + 2017 TrackingIO.com All Rights Reserved <a href="http://www.miitbeian.gov.cn/" target="_blank">京ICP备14021832号</a> + </div> + <div class="alphaDiv" id="sysLoad" style="display: none;z-index: 99;"> + <div class="spinner"> + <div class="rect1"></div> + <div class="rect2"></div> + <div class="rect3"></div> + <div class="rect4"></div> + <div class="rect5"></div> + </div> + </div> + </body> +</html> diff --git a/src/main/websrc/images/0415.png b/src/main/websrc/images/0415.png new file mode 100644 index 0000000..a186a6f Binary files /dev/null and b/src/main/websrc/images/0415.png differ diff --git a/src/main/websrc/images/0416.png b/src/main/websrc/images/0416.png new file mode 100644 index 0000000..2bd7ad1 Binary files /dev/null and b/src/main/websrc/images/0416.png differ diff --git a/src/main/websrc/images/add.gif b/src/main/websrc/images/add.gif new file mode 100644 index 0000000..aced343 Binary files /dev/null and b/src/main/websrc/images/add.gif differ diff --git a/src/main/websrc/images/add03.png b/src/main/websrc/images/add03.png new file mode 100644 index 0000000..d2e9310 Binary files /dev/null and b/src/main/websrc/images/add03.png differ diff --git a/src/main/websrc/images/adddis.png b/src/main/websrc/images/adddis.png new file mode 100644 index 0000000..abd7ccb Binary files /dev/null and b/src/main/websrc/images/adddis.png differ diff --git a/src/main/websrc/images/allow-right.png b/src/main/websrc/images/allow-right.png new file mode 100644 index 0000000..eb80eb3 Binary files /dev/null and b/src/main/websrc/images/allow-right.png differ diff --git a/src/main/websrc/images/arrow.png b/src/main/websrc/images/arrow.png new file mode 100644 index 0000000..6b4fa8d Binary files /dev/null and b/src/main/websrc/images/arrow.png differ diff --git a/src/main/websrc/images/arrow1.png b/src/main/websrc/images/arrow1.png new file mode 100644 index 0000000..0bcc7d0 Binary files /dev/null and b/src/main/websrc/images/arrow1.png differ diff --git a/src/main/websrc/images/arrow2.png b/src/main/websrc/images/arrow2.png new file mode 100644 index 0000000..27dcbc0 Binary files /dev/null and b/src/main/websrc/images/arrow2.png differ diff --git a/src/main/websrc/images/auth.png b/src/main/websrc/images/auth.png new file mode 100644 index 0000000..ee19655 Binary files /dev/null and b/src/main/websrc/images/auth.png differ diff --git a/src/main/websrc/images/behavior.png b/src/main/websrc/images/behavior.png new file mode 100644 index 0000000..df235b1 Binary files /dev/null and b/src/main/websrc/images/behavior.png differ diff --git a/src/main/websrc/images/bottom.png b/src/main/websrc/images/bottom.png new file mode 100644 index 0000000..69bccda Binary files /dev/null and b/src/main/websrc/images/bottom.png differ diff --git a/src/main/websrc/images/camp01.png b/src/main/websrc/images/camp01.png new file mode 100644 index 0000000..da2498c Binary files /dev/null and b/src/main/websrc/images/camp01.png differ diff --git a/src/main/websrc/images/channelmore.png b/src/main/websrc/images/channelmore.png new file mode 100644 index 0000000..3ed5240 Binary files /dev/null and b/src/main/websrc/images/channelmore.png differ diff --git a/src/main/websrc/images/chartarrow.png b/src/main/websrc/images/chartarrow.png new file mode 100644 index 0000000..a82bbf4 Binary files /dev/null and b/src/main/websrc/images/chartarrow.png differ diff --git a/src/main/websrc/images/chartarrow2.png b/src/main/websrc/images/chartarrow2.png new file mode 100644 index 0000000..4e4ed96 Binary files /dev/null and b/src/main/websrc/images/chartarrow2.png differ diff --git a/src/main/websrc/images/close.png b/src/main/websrc/images/close.png new file mode 100644 index 0000000..ae8cb0a Binary files /dev/null and b/src/main/websrc/images/close.png differ diff --git a/src/main/websrc/images/close1.png b/src/main/websrc/images/close1.png new file mode 100644 index 0000000..3f595a5 Binary files /dev/null and b/src/main/websrc/images/close1.png differ diff --git a/src/main/websrc/images/complex.png b/src/main/websrc/images/complex.png new file mode 100644 index 0000000..6f27840 Binary files /dev/null and b/src/main/websrc/images/complex.png differ diff --git a/src/main/websrc/images/coop/h1.png b/src/main/websrc/images/coop/h1.png new file mode 100644 index 0000000..6a41e03 Binary files /dev/null and b/src/main/websrc/images/coop/h1.png differ diff --git a/src/main/websrc/images/coop/h10.png b/src/main/websrc/images/coop/h10.png new file mode 100644 index 0000000..77737d0 Binary files /dev/null and b/src/main/websrc/images/coop/h10.png differ diff --git a/src/main/websrc/images/coop/h100.png b/src/main/websrc/images/coop/h100.png new file mode 100644 index 0000000..f297ddd Binary files /dev/null and b/src/main/websrc/images/coop/h100.png differ diff --git a/src/main/websrc/images/coop/h101.png b/src/main/websrc/images/coop/h101.png new file mode 100644 index 0000000..b0c5d89 Binary files /dev/null and b/src/main/websrc/images/coop/h101.png differ diff --git a/src/main/websrc/images/coop/h11.png b/src/main/websrc/images/coop/h11.png new file mode 100644 index 0000000..afdc4db Binary files /dev/null and b/src/main/websrc/images/coop/h11.png differ diff --git a/src/main/websrc/images/coop/h12.png b/src/main/websrc/images/coop/h12.png new file mode 100644 index 0000000..401a01b Binary files /dev/null and b/src/main/websrc/images/coop/h12.png differ diff --git a/src/main/websrc/images/coop/h13.png b/src/main/websrc/images/coop/h13.png new file mode 100644 index 0000000..db71906 Binary files /dev/null and b/src/main/websrc/images/coop/h13.png differ diff --git a/src/main/websrc/images/coop/h14.png b/src/main/websrc/images/coop/h14.png new file mode 100644 index 0000000..0aecb19 Binary files /dev/null and b/src/main/websrc/images/coop/h14.png differ diff --git a/src/main/websrc/images/coop/h15.png b/src/main/websrc/images/coop/h15.png new file mode 100644 index 0000000..3235106 Binary files /dev/null and b/src/main/websrc/images/coop/h15.png differ diff --git a/src/main/websrc/images/coop/h16.png b/src/main/websrc/images/coop/h16.png new file mode 100644 index 0000000..50bd5b3 Binary files /dev/null and b/src/main/websrc/images/coop/h16.png differ diff --git a/src/main/websrc/images/coop/h17.png b/src/main/websrc/images/coop/h17.png new file mode 100644 index 0000000..a69cd48 Binary files /dev/null and b/src/main/websrc/images/coop/h17.png differ diff --git a/src/main/websrc/images/custom.png b/src/main/websrc/images/custom.png new file mode 100644 index 0000000..97aa74b Binary files /dev/null and b/src/main/websrc/images/custom.png differ diff --git a/src/main/websrc/images/custommenu01.png b/src/main/websrc/images/custommenu01.png new file mode 100644 index 0000000..b7d9b27 Binary files /dev/null and b/src/main/websrc/images/custommenu01.png differ diff --git a/src/main/websrc/images/demo.png b/src/main/websrc/images/demo.png new file mode 100644 index 0000000..223fe5d Binary files /dev/null and b/src/main/websrc/images/demo.png differ diff --git a/src/main/websrc/images/demoRight.png b/src/main/websrc/images/demoRight.png new file mode 100644 index 0000000..5f32e82 Binary files /dev/null and b/src/main/websrc/images/demoRight.png differ diff --git a/src/main/websrc/images/empty.png b/src/main/websrc/images/empty.png new file mode 100644 index 0000000..1f745e6 Binary files /dev/null and b/src/main/websrc/images/empty.png differ diff --git a/src/main/websrc/images/erweima.png b/src/main/websrc/images/erweima.png new file mode 100644 index 0000000..1430c45 Binary files /dev/null and b/src/main/websrc/images/erweima.png differ diff --git a/src/main/websrc/images/event.png b/src/main/websrc/images/event.png new file mode 100644 index 0000000..e44fe27 Binary files /dev/null and b/src/main/websrc/images/event.png differ diff --git a/src/main/websrc/images/expiration.png b/src/main/websrc/images/expiration.png new file mode 100644 index 0000000..795427d Binary files /dev/null and b/src/main/websrc/images/expiration.png differ diff --git a/src/main/websrc/images/export01.png b/src/main/websrc/images/export01.png new file mode 100644 index 0000000..0be6bd7 Binary files /dev/null and b/src/main/websrc/images/export01.png differ diff --git a/src/main/websrc/images/first01.png b/src/main/websrc/images/first01.png new file mode 100644 index 0000000..cb96af3 Binary files /dev/null and b/src/main/websrc/images/first01.png differ diff --git a/src/main/websrc/images/first1.png b/src/main/websrc/images/first1.png new file mode 100644 index 0000000..bc2531a Binary files /dev/null and b/src/main/websrc/images/first1.png differ diff --git a/src/main/websrc/images/first2.png b/src/main/websrc/images/first2.png new file mode 100644 index 0000000..cd6b844 Binary files /dev/null and b/src/main/websrc/images/first2.png differ diff --git a/src/main/websrc/images/first_1.png b/src/main/websrc/images/first_1.png new file mode 100644 index 0000000..5596830 Binary files /dev/null and b/src/main/websrc/images/first_1.png differ diff --git a/src/main/websrc/images/link/1.png b/src/main/websrc/images/link/1.png new file mode 100644 index 0000000..f06e10a Binary files /dev/null and b/src/main/websrc/images/link/1.png differ diff --git a/src/main/websrc/images/link/10.png b/src/main/websrc/images/link/10.png new file mode 100644 index 0000000..72ec95f Binary files /dev/null and b/src/main/websrc/images/link/10.png differ diff --git a/src/main/websrc/images/link/11.png b/src/main/websrc/images/link/11.png new file mode 100644 index 0000000..53d77e2 Binary files /dev/null and b/src/main/websrc/images/link/11.png differ diff --git a/src/main/websrc/images/link/2.png b/src/main/websrc/images/link/2.png new file mode 100644 index 0000000..8a44345 Binary files /dev/null and b/src/main/websrc/images/link/2.png differ diff --git a/src/main/websrc/images/link/3.png b/src/main/websrc/images/link/3.png new file mode 100644 index 0000000..3686653 Binary files /dev/null and b/src/main/websrc/images/link/3.png differ diff --git a/src/main/websrc/images/link/4.png b/src/main/websrc/images/link/4.png new file mode 100644 index 0000000..e7e9c2d Binary files /dev/null and b/src/main/websrc/images/link/4.png differ diff --git a/src/main/websrc/images/link/5.png b/src/main/websrc/images/link/5.png new file mode 100644 index 0000000..ccaf75f Binary files /dev/null and b/src/main/websrc/images/link/5.png differ diff --git a/src/main/websrc/images/link/6.png b/src/main/websrc/images/link/6.png new file mode 100644 index 0000000..c2f078f Binary files /dev/null and b/src/main/websrc/images/link/6.png differ diff --git a/src/main/websrc/images/link/7.png b/src/main/websrc/images/link/7.png new file mode 100644 index 0000000..3e39171 Binary files /dev/null and b/src/main/websrc/images/link/7.png differ diff --git a/src/main/websrc/images/link/8.png b/src/main/websrc/images/link/8.png new file mode 100644 index 0000000..f7de2f8 Binary files /dev/null and b/src/main/websrc/images/link/8.png differ diff --git a/src/main/websrc/images/link/9.png b/src/main/websrc/images/link/9.png new file mode 100644 index 0000000..5cd3430 Binary files /dev/null and b/src/main/websrc/images/link/9.png differ diff --git a/src/main/websrc/js/app/DateDirective.js b/src/main/websrc/js/app/DateDirective.js new file mode 100644 index 0000000..9d8d5db --- /dev/null +++ b/src/main/websrc/js/app/DateDirective.js @@ -0,0 +1,791 @@ +(function(){ + angular.module("app") + .directive("myDatepicker",["ToolService","DateService","UtilService",myDatepicker]) + .directive("singleDatepicker",singleDatepicker) + .directive("myDateweek",['UtilService',myDateweek]) + .directive("myDatemonth",['UtilService',myDatemonth]); + + var tempVersion = new Date().getTime(); + /*日期 多日期*/ + function myDatepicker(ToolService,DateService,UtilService) { + var today = Date.today(); + var defaultOpsn = { + abbrWeeks: ['日', '一', '二', '三', '四', '五', '六'], + format: 'YYYY-MM-DD', + min: null, + max: today, + start: today, + end: today, + current: today, + months: 2, //默认显示2个面板 + chooseCls: 'is-choose', + todayCls: 'is-today' + }; + + return { + restrict: 'EA', + transclude: true, + replace:true, + templateUrl: '/template/common/datepicker.html?r='+tempVersion, + scope: { + dateName:'@', //日期传递名称 + noMax:"@", //是否有最大日期限制 + rangeDays:"@", //最多日期范围 -1:不需要控制范围 + rangeDays2:"=", //最多日期范围,动态 + initDay:"=", //初始化显示日期 + maxDay:'@', //最大日期选择,默认为今天,-1为昨天。。。 + maxDay2:"=", //同上,动态传参 + operationSel:"=", //当前可否操作 + min:"=" + }, + link: function(scope, elem, attrs) { + scope.maxDay = scope.maxDay || scope.maxDay2; + + var ddd = -1; + if(UtilService.isNullStr(scope.maxDay)){ + ddd = 0; + } + var cacheDates = { + 'yesday':DateService.getYesDay(), + 'd7':DateService.getLastDays(-7,ddd), + 'd14':DateService.getLastDays(-14,ddd), + 'd30':DateService.getLastDays(-30,ddd), + '-w1':DateService.getWeekRangeDate(-1,ddd), + 'w0':DateService.getWeekRangeDate(0,ddd), + '-m1':DateService.getMonthRangeDate(-1,ddd), + 'm0':DateService.getMonthRangeDate(0,ddd) + } + scope.$watch("operationSel",function(n){ + if(angular.isUndefined(scope.operationSel)){ + scope.operSel = true; + } + else{ + scope.operSel = n; + } + }); + //根据选择日期设置相对时间范围flag + scope.getRelativeFlag = function(startDate,endDate){ + var relFlag = ""; + for(var k in cacheDates){ + var range = cacheDates[k]; + if(startDate == range.startDate && endDate == range.endDate){ + relFlag = k; + break; + } + } + scope.selDayflag = relFlag; + } + //把初始化日期赋值到日期框里面 + scope.$watch("initDay",function(n){ + if(angular.isDefined(n) && n.startDate){ + if(!scope.options.start.isSameDay(new Date(n.startDate)) || !scope.options.end.isSameDay(new Date(n.endDate))){ + scope.getRelativeFlag(n.startDate,n.endDate); + scope.options.start = scope.completeStrat = new Date(n.startDate); + scope.options.end = scope.completeEnd = new Date(n.endDate); + } + } + }); + scope.selme = false; + scope.$watch("rangeDays+rangeDays2",function(e){ + var rds = scope.rangeDays || scope.rangeDays2; + if(angular.isDefined(rds)){ + scope.rgDays = Number(rds); + }else{ + scope.rgDays = 31; + } + }); + + var maxTime = today,emitName = scope.dateName || "dateCustos"; + if(scope.maxDay && scope.maxDay == -1){ + maxTime = Date.yesterday(); + } + //如果最大可选日期不是当天,则在当前年上加上100年 + if(scope.noMax && scope.noMax == 'true'){ + var future = Date.today(); + future.setFullYear(today.getFullYear()+100); + maxTime = future; + } + + var minTime = ""; + scope.$watch("min",function(n){ + if(angular.isDefined(n)){ + minTime = new Date(n).addDays(-1); + } + }); + var defaultOps = UtilService.cloneJSON(defaultOpsn); + var setOption = function() { + defaultOps.start = maxTime; + defaultOps.end = maxTime; + defaultOps.max = maxTime; + defaultOps.current = today; + scope.options = angular.extend(defaultOps, scope.options || {}); + //清除时分秒毫秒 + scope.options.start.clearTime(); + scope.options.end.clearTime(); + + scope.completeStrat = scope.options.start; + scope.completeEnd = scope.options.end; + scope.customStrat = scope.options.start.toFormat(scope.options.format); + scope.customEnd = scope.options.end.toFormat(scope.options.format); + + //最后一个日期面板的日期 + scope.panelEndDate = Date.getFirstDay(scope.options.end); + }; + setOption(); + var render = function(date) { + var panels = [], + months = scope.options.months, + date = (date || scope.panelEndDate).clone(); + for (var p = 0; p < months; p++) { + var weeks = [], + dateOfPanel = date.clone().addMonths(-(months - 1 - p)), //每个日期面板的日期 + firstDay = Date.getFirstDay(dateOfPanel), //该月的第一天 + firstWeekDay = firstDay.getDay(), //该月的一个星期 + daysOfMonth = Date.getDaysInMonth(dateOfPanel.getFullYear(), dateOfPanel.getMonth()), //该月有几天 + rowNums = Math.ceil((firstWeekDay + daysOfMonth) / 7), //该月日历的行数 + curDate = firstDay.clone().addDays(-firstWeekDay); //循环遍历的日期 + + for (var i = 0; i < rowNums; i++) { + // weeks.push([]) + var days = []; + for (var j = 0; j < 7; j++) { + var tmp = curDate.clone(); + days.push({ + day: tmp, + choose: tmp.between(scope.options.start, scope.options.end), + other: tmp.getMonth() != dateOfPanel.getMonth(), + today: Date.isSameDay(tmp, today) //是否是今日 + }); + curDate = curDate.addDays(1); + } + + weeks.push(days); + } + + panels.push({ + date: dateOfPanel, + weeks: weeks + }); + } + //可选最大时间不是今天,禁用"今天,昨天,最近七天按钮,默认显示最大天数" + // if (maxTime !== today) { + // scope.complete(); + // $(elem).parent().prevAll().hide(); + // } else { + $(elem).parent().prevAll().show(); + // } + scope.panels = panels; + scope.wstyle = {"width":(months*274 + 80)+"px"}; + }; + //初始化面板上日期的css + scope.cellClass = function(cell) { + if(cell.other){ + return "other-month"; + } + else if(cell.day.isSameDay(scope.options.start) || cell.day.isSameDay(scope.options.end)){ + return "start_end"; + } + else if(cell.day.between(scope.options.start, scope.options.end)){ + return "choose"; + } + else if(cell.day.isSameDay(scope.options.current) && cell.day.isSameDay(maxTime)){ + return "is-today"; + } + else if(cell.day.isAfter(maxTime) || (minTime!='' && cell.day.isBefore(minTime))){ + return "disabled"; + } + else{ + return ""; + } + }; + //切换月份 + scope.changeMonth = function(index, date, num) { + scope.dateMonth = scope.panelEndDate.addMonths(num); + render(scope.dateMonth); + }; + //点击显示或隐藏日期面板 + scope.showDateTable = function() { + if(!scope.operSel){return false;} + + var curDateWrap = $(elem).find(".dateTabRange"); + $(".dateTabRange").each(function(){ + if($(this)!==curDateWrap){ + $(this).addClass("ng-hide"); + } + }); + if(curDateWrap.hasClass("ng-hide")){ + scope.showFlag = true; + curDateWrap.removeClass("ng-hide") + } + else{ + scope.showFlag = false; + curDateWrap.addClass("ng-hide") + } + + // if (typeof scope.showFlag == 'undefined') { + // $(".dateTabRange").addClass("ng-hide"); + // scope.showFlag = true; + // } else if (scope.showFlag == true) { + // scope.showFlag = false; + // } else if (scope.showFlag == false) { + // $(".dateTabRange").addClass("ng-hide"); + // scope.showFlag = true; + // } + } + + + //选择具体日期 + var chooseCounts = 0; + scope.chooseDate = function(cell) { + //是否大于今天 + // if (cell.day.isAfter(today)) { + // return; + // } + //是否大于可选择最大时间 + if (cell.day.isAfter(maxTime)) { + return; + } + //是否小于可选择最小时间 + if (minTime!='' && cell.day.isBefore(minTime)) { + return; + } + if (chooseCounts >= 2) chooseCounts = 0; + chooseCounts++; + + if (chooseCounts === 1) { + scope.options.end = scope.options.start = cell.day; + } else if (chooseCounts === 2) { + cell.day.isAfter(scope.options.start) ? scope.options.end = cell.day : scope.options.start = cell.day; + } + }; + + scope.setRelDate = function(flag){ + + var daterange = cacheDates[flag]; + if(scope.rgDays!=-1){ + var diff = diffDate(daterange.startDate,daterange.endDate); + if(diff > scope.rgDays){ + ToolService.showTips("日期范围不能大于"+scope.rgDays+"天"); + return false; + } + } + + scope.selDayflag = flag; + if(minTime!='' && new Date(daterange.startDate).isBefore(minTime)){ + ToolService.showTips("超出最小可选日期限制了"); + return; + } + else{ + scope.options.start = new Date(daterange.startDate); + } + + if(minTime!='' && new Date(daterange.endDate).isBefore(minTime)){ + ToolService.showTips("超出最小可选日期限制了"); + return; + } + else{ + scope.options.end = new Date(daterange.endDate); + } + + scope.complete(1); + } + //点击确定,完成日期选择,传递日期 + scope.complete = function(isrel) { + if(angular.isUndefined(isrel) && scope.rgDays!=-1){ + var diff = diffDate(scope.options.start,scope.options.end) + if(diff > scope.rgDays){ + ToolService.showTips("日期范围不能大于"+scope.rgDays+"天"); + return false; + } + } + + scope.completeStrat = scope.options.start; + scope.completeEnd = scope.options.end; + + var startDate = scope.completeStrat.toFormat(scope.options.format),endDate = scope.completeEnd.toFormat(scope.options.format); + if(angular.isUndefined(isrel)){ + scope.getRelativeFlag(startDate,endDate); + + } + scope.$emit(emitName, {"startDate":startDate,"endDate":endDate,"dateflag":scope.selDayflag}); + + scope.showFlag = false; + }; + //取消选择,关闭面板 + scope.cancel = function() { + if(scope.options.start != scope.completeStrat || scope.options.end != scope.completeEnd){ + scope.options.start = scope.completeStrat; + scope.options.end = scope.completeEnd; + scope.getRelativeFlag(scope.completeStrat.toFormat(scope.options.format),scope.completeEnd.toFormat(scope.options.format)); + } + scope.showFlag = false; + }; + //检测选择日期操作 + scope.$watch('options.start+options.end', function() { + scope.customStrat = scope.options.start.toFormat(scope.options.format); + scope.customEnd = scope.options.end.toFormat(scope.options.format); + }); + render(); + + $(document).on("click",function(){ + scope.cancel(); + scope.$apply(); + }); + } + }; + }; + + /*单日期控件*/ + function singleDatepicker() { + var today = Date.today(); + var defaultOps = { + abbrWeeks: ['日', '一', '二', '三', '四', '五', '六'], + format: 'YYYY-MM-DD', + min: null, + max: today, + start: today, + end: today, + current: today, + months: 1, + chooseCls: 'is-choose', + todayCls: 'is-today' + }; + + return { + restrict: 'EA', + transclude: true, + replace:true, + templateUrl: '/template/common/datepicker.html?r='+tempVersion, + scope: { + dateName:"@", + campareDays:"=", + operationSel:"=" //当前可否操作 + }, + link: function(scope, elem, attrs) { + scope.$watch("operationSel",function(n){ + if(angular.isUndefined(scope.operationSel)){ + scope.operSel = true; + } + else{ + scope.operSel = n; + } + }); + + var maxTime = today,emitName = scope.dateName; + var setOption = function() { + defaultOps.start = maxTime; + defaultOps.end = maxTime; + defaultOps.max = maxTime; + defaultOps.current = maxTime; + scope.options = angular.extend(defaultOps, scope.options || {}); + //清除时分秒毫秒 + scope.options.start.clearTime(); + scope.options.end.clearTime(); + + scope.completeStrat = scope.options.start; + scope.completeEnd = scope.options.end; + scope.customStrat = scope.options.start.toFormat(scope.options.format); + scope.customEnd = scope.options.end.toFormat(scope.options.format); + + //最后一个日期面板的日期 + scope.panelEndDate = Date.getFirstDay(scope.options.end); + }; + setOption(); + var render = function(date) { + var panels = [], + months = scope.options.months, + date = (date || scope.panelEndDate).clone(); + + months = 1; + for (var p = 0; p < months; p++) { + var weeks = [], + dateOfPanel = date.clone().addMonths(-(months - 1 - p)), //每个日期面板的日期 + firstDay = Date.getFirstDay(dateOfPanel), //该月的第一天 + firstWeekDay = firstDay.getDay(), //该月的一个星期 + daysOfMonth = Date.getDaysInMonth(dateOfPanel.getFullYear(), dateOfPanel.getMonth()), //该月有几天 + rowNums = Math.ceil((firstWeekDay + daysOfMonth) / 7), //该月日历的行数 + curDate = firstDay.clone().addDays(-firstWeekDay); //循环遍历的日期 + + for (var i = 0; i < rowNums; i++) { + // weeks.push([]) + var days = []; + for (var j = 0; j < 7; j++) { + var tmp = curDate.clone(); + days.push({ + day: tmp, + choose: tmp.between(scope.options.start, scope.options.end), + other: tmp.getMonth() != dateOfPanel.getMonth(), + today: Date.isSameDay(tmp, today) //是否是今日 + }); + curDate = curDate.addDays(1); + } + + weeks.push(days); + } + + panels.push({ + date: dateOfPanel, + weeks: weeks + }); + } + //可选最大时间不是今天,禁用"今天,昨天,最近七天按钮,默认显示最大天数" + if (maxTime !== today) { + scope.complete(); + $(elem).parent().prevAll().hide(); + } else { + $(elem).parent().prevAll().show(); + } + scope.panels = panels; + scope.wstyle = {"width":months*274+"px"}; + }; + scope.cellClass = function(cell) { + return cell.other ? "other-month" : + cell.day.between(scope.options.start, scope.options.end) ? "choose" : + cell.day.isSameDay(maxTime) ? "is-today" : + cell.day.isAfter(maxTime) ? "disabled" : ''; + }; + scope.changeMonth = function(index, date, num) { + scope.dateMonth = scope.panelEndDate.addMonths(num); + render(scope.dateMonth); + }; + + scope.showDateTable = function() { + if(!scope.operSel){return false;} + + if (typeof scope.showFlag == 'undefined') { + scope.showFlag = true; + } else if (scope.showFlag == true) { + scope.showFlag = false; + } else if (scope.showFlag == false) { + scope.showFlag = true; + } + } + + var chooseCounts = 0; + scope.chooseDate = function(cell) { + //是否大于今天 + if (cell.day.isAfter(today)) { + return; + } + //是否大于可选择最大时间 + if (cell.day.isAfter(maxTime)) { + return; + } + if (chooseCounts >= 2) chooseCounts = 0; + chooseCounts++; + + //如果有对比日期,用所选日期-去对比天数=对比开始日期 + if(angular.isDefined(scope.campareDays) && scope.campareDays>0){ + scope.options.end = cell.day; + scope.options.start = new Date(addDate(cell.day,-scope.campareDays)); + }else{ + scope.options.end = scope.options.start = cell.day; + } + scope.complete(); + }; + scope.complete = function() { + scope.completeStrat = scope.options.start; + scope.completeEnd = scope.options.end; + + if(angular.isDefined(scope.campareDays) && scope.campareDays>0){ + scope.$emit(emitName, scope.completeStrat.toFormat(scope.options.format) + ' - ' + scope.completeEnd.toFormat(scope.options.format)); + }else{ + scope.$emit(emitName, scope.completeStrat.toFormat(scope.options.format)); + } + scope.showFlag = false; + }; + scope.cancel = function() { + scope.options.start = scope.completeStrat; + scope.options.end = scope.completeEnd; + scope.showFlag = false; + }; + scope.$watch('options.start+options.end', function() { + scope.customStrat = scope.options.start.toFormat(scope.options.format); + scope.customEnd = scope.options.end.toFormat(scope.options.format); + }); + render(); + + $(document).on("click",function(){ + scope.cancel(); + scope.$apply(); + }); + } + }; + }; + + + /*日期 选择周*/ + function myDateweek(UtilService) { + var today = Date.yesterday(); + + return { + restrict: 'EA', + transclude: true, + replace:true, + templateUrl: '/template/common/dateweek.html?r='+tempVersion, + scope: { + dateName:"@", + weeks:"@" + }, + link: function(scope, elem, attrs) { + scope.options = {}; + if(scope.weeks){ + scope.options.weeks = scope.weeks; + }else{ + scope.options.weeks = 1; + } + + scope.showDateTable = function() { + if (typeof scope.showFlag == 'undefined') { + scope.showFlag = true; + } else if (scope.showFlag == true) { + scope.showFlag = false; + } else if (scope.showFlag == false) { + scope.showFlag = true; + } + } + + var nyear = scope.nowyear = today.getFullYear(); + var selectday = today.clone(); + + var nowW = new Date().getDay(); + nowW = nowW == 0 ? 7 : nowW; + scope.options.start = scope.options.end = { + week : getNowWeek(), + date : new Date().clone().addDays(7 - nowW), + year : scope.nowyear + } + + scope.setWeeklist = function(){ + scope.weeklist = []; + var weeknum = 7; + var firstDay = new Date(scope.nowyear, 0, 1),fw = firstDay.getDay(); + var maxDay = new Date(scope.nowyear, 11, 31),rowweek = []; + + fw = fw == 0 ? 7 :fw; + var endDay = firstDay.clone().addDays(7 - fw),w = 0; + if(fw > 0 && fw < 5){ //当年的第一天为周五周六周日并到上一年 + w = 1; + rowweek.push({ + week : w, + // date : endDay.toFormat("YYYY-MM-DD"), + date : endDay, + year : scope.nowyear + }); + } + + while(endDay < maxDay && !maxDay.isSameDay(endDay)){ + w ++ ; + endDay = endDay.clone().addDays(7); + rowweek.push({ + week : w, + // date : endDay.toFormat("YYYY-MM-DD"), + date : endDay, + year : scope.nowyear + }); + + if(w % weeknum == 0){ + scope.weeklist.push(rowweek); + rowweek = []; + } + } + + var lastDay = new Date(scope.nowyear, 11, 31),lastW = lastDay.getDay(); + //当年最后一天是周五周六或者周日时,移到下一年 + if(lastW > 0 && lastW < 4){ + if(rowweek.length == 0){ + scope.weeklist[scope.weeklist.length-1].pop(); + }else{ + rowweek.pop(); + } + } + + if(rowweek.length > 0){ + scope.weeklist.push(rowweek); + } + } + + scope.changeYear = function(n){ + scope.nowyear+=n; + scope.setWeeklist(); + } + scope.setWeeklist(); + + var chooseCounts = 0; + scope.chooseDate = function(cell) { + if(cell.date.clone().addDays(-6).isAfter(today)){ + return false; + } + if(scope.options.weeks == 1){ + selectday = cell.date; + scope.options.start = scope.options.end = cell; + scope.$emit(scope.dateName,cell.year+""+getStr(cell.week)); + scope.cancel(); + }else{ //2 + if (chooseCounts >= 2) chooseCounts = 0; + chooseCounts++; + + if(chooseCounts == 1){ + scope.options.start = scope.options.end = cell; + }else{ + var preCell = scope.options.start; + if(preCell.date > cell.date){ + scope.options.start = cell; + }else{ + scope.options.end = cell; + } + } + } + + } + scope.complete = function(){ + var start = scope.options.start.year + "" + UtilService.getStr(scope.options.start.week); + var end = scope.options.end.year + "" + UtilService.getStr(scope.options.end.week); + scope.$emit(scope.dateName,{start:start,end:end}); + scope.cancel(); + } + scope.cellClass = function(cell) { + if(cell.date.between(scope.options.start.date,scope.options.end.date)){ + return "choose"; + } + else if((cell.year == scope.options.start.year && cell.week == scope.options.start.week) || (cell.year == scope.options.end.year && cell.week == scope.options.end.week)){ + return "start_end"; + } + else if(today.between(cell.date.clone().addDays(-6),cell.date)){ + return "is-now"; + } + else if(cell.date.isAfter(today)){ + return "disabled"; + } + else{ + return ''; + } + }; + scope.cancel = function() { + scope.showFlag = false; + }; + + $(document).on("click",function(){ + scope.cancel(); + scope.$apply(); + }); + } + }; + }; + /*日期 选择月*/ + function myDatemonth(UtilService) { + var today = Date.yesterday(); + return { + restrict: 'EA', + transclude: true, + replace:true, + templateUrl: '/template/common/datemonth.html?r='+tempVersion, + scope: { + dateName:"@", + months:"@" + }, + link: function(scope, elem, attrs) { + var nyear = scope.nowyear = today.getFullYear(); + var selectmonth = scope.nowMonth = today.getMonth() + 1; + + scope.options = {}; + if(scope.months){ + scope.options.months = scope.months; + }else{ + scope.options.months = 1; + } + + scope.showDateTable = function() { + if (typeof scope.showFlag == 'undefined') { + scope.showFlag = true; + } else if (scope.showFlag == true) { + scope.showFlag = false; + } else if (scope.showFlag == false) { + scope.showFlag = true; + } + } + scope.changeYear = function(n){ + scope.nowyear+=n; + scope.setmonthList(); + } + scope.setmonthList = function(){ + scope.monthList = []; + var rowNums = 4,row = []; + for(var i=1;i<=12;i++){ + row.push({ + month : i, + year : scope.nowyear, + date : new Date(scope.nowyear,i-1,1) + }); + + if(angular.isUndefined(scope.options.start) && i == selectmonth && scope.nowyear == nyear){ + scope.options.start = scope.options.end = row.slice(-1)[0]; + } + + if(i%rowNums == 0){ + scope.monthList.push(row); + row = []; + } + } + } + scope.setmonthList(); + + var chooseCounts = 0; + scope.chooseDate = function(cell) { + if(cell.year > nyear || (cell.month > scope.nowMonth && cell.year == nyear)){ + return false; + } + + if(scope.options.months == 1){ + selectmonth = cell.month; + scope.options.start = scope.options.end = cell; + scope.$emit(scope.dateName,cell.year+""+ UtilService.getStr(cell.month)); + scope.cancel(); + }else{ //2 + if (chooseCounts >= 2) chooseCounts = 0; + chooseCounts++; + + if(chooseCounts == 1){ + scope.options.start = scope.options.end = cell; + }else{ + var preCell = scope.options.start; + if(preCell.year > cell.year || (preCell.year == cell.year && preCell.month > cell.month)){ + scope.options.start = cell; + }else{ + scope.options.end = cell; + } + } + } + } + scope.complete = function(){ + var start = scope.options.start.year + "" + UtilService.getStr(scope.options.start.month); + var end = scope.options.end.year + "" + UtilService.getStr(scope.options.end.month); + + scope.$emit(scope.dateName,{start:start,end:end}); + scope.cancel(); + } + scope.cellClass = function(cell) { + if(cell.date.between(scope.options.start.date,scope.options.end.date)){ + return "choose"; + } + else if(cell.month == scope.nowMonth && cell.year == nyear){ + return "is-today"; + } + else if(cell.year > nyear || (cell.month > scope.nowMonth && cell.year == nyear)){ + return "disabled"; + } + else{ + return ''; + } + }; + scope.cancel = function() { + scope.showFlag = false; + }; + $(document).on("click",function(){ + scope.cancel(); + scope.$apply(); + }); + } + }; + }; +})(); \ No newline at end of file diff --git a/src/main/websrc/js/app/DateService.js b/src/main/websrc/js/app/DateService.js new file mode 100644 index 0000000..30d24ac --- /dev/null +++ b/src/main/websrc/js/app/DateService.js @@ -0,0 +1,231 @@ +(function () { + 'use strict'; + + angular.module("app") + .factory("DateService",DateService); + + function DateService(){ + var service = {}; + + /*0今天,-1昨天。。。*/ + service.getDay = function(num){ + var time = new Date(), + dayFn = function(date) { + var YY = date.getFullYear(), + MM = date.getMonth() + 1, + DD = date.getDate(); + if (MM < 10) MM = "0" + MM; + if (DD < 10) DD = "0" + DD; + return YY + "-" + MM + "-" + DD + }, + times = time.getTime() + (1000 * 60 * 60 * 24 * num); + + time.setTime(times); + + return dayFn(time); + }; + + //一年多少周 + service.getYearWeekList = function(year){ + if(typeof year == 'undefined'){ + var d = new Date(); + year = d.getFullYear(); + } + + var weeklist = []; + var firstDay = new Date(year, 0, 1),fw = firstDay.getDay(); + var maxDay = new Date(year, 11, 31); + + fw = fw == 0 ? 7 :fw; + var endDay = firstDay.clone().addDays(7 - fw),w = 0; + //当年的第一天为周五周六周日并到上一年 + if(fw > 0 && fw < 5){ + w = 1; + weeklist.push({ + week : w, + date : endDay, + year : year + }); + } + + while(endDay < maxDay && !maxDay.isSameDay(endDay)){ + w ++ ; + endDay = endDay.clone().addDays(7); + weeklist.push({ + week : w, + date : endDay, + year : year + }); + } + + var lastDay = new Date(year, 11, 31),lastW = lastDay.getDay(); + //当年最后一天是周五周六或者周日时,移到下一年 + if(lastW > 0 && lastW < 4){ + weeklist.pop(); + } + return weeklist; + } + + //一年多少周数 + service.getYearWeekCount = function(year){ + return service.getYearWeekList(year).length; + } + + //当前周数 + service.getNowWeekNum = function(){ + var today = Date.today(); + var firstDay = new Date(today.getFullYear(), 0, 1),fw = firstDay.getDay(); + var endDay = firstDay.clone(),n = 0; + if( fw > 0){ + endDay = endDay.addDays(8-fw); + n = 1; + } + var days = diffDate(endDay , today); + return Math.ceil(days/7) + n; + } + //今天 + service.getToday = function(){ + return { + startDate:service.getDay(0), + endDate:service.getDay(0) + } + } + //昨天 + service.getYesDay = function(){ + return { + startDate:service.getDay(-1), + endDate:service.getDay(-1) + } + } + //最近几天,默认从昨天往前推 + service.getLastDays = function(d,flag){ + if(angular.isUndefined(flag)){ + flag = -1; + } + if(flag == 0 && d<0){ + d += 1; + } + if(flag == 0 && d>0){ + d -= 1; + } + return { + startDate:service.getDay(d), + endDate:service.getDay(flag) + } + } + //最近几周 + service.getLastWeeks = function(d){ + var w = service.getNowWeekNum(), + date = new Date(), + year = date.getFullYear(); + + var range = {end:year+service.getStr(w)},pd = d + w +1; + if(pd > 0 ){ + range.start = year + service.getStr(pd); + }else{ + var pr = service.getYearWeekCount(year-1); + range.start = (year-1) + service.getStr(pr + pd); + } + return range; + } + //最近几月 + service.getLastMonths = function(d){ + var date = new Date(),year = date.getFullYear(),month = date.getMonth()+1; + + var range = {end:year+service.getStr(month)},pm = month+d+1; + if(pm > 0 ){ + range.start = year + service.getStr(pm); + }else{ + range.start = (year-1) + service.getStr(12 + pm); + } + return range; + } + service.getStr = function(n){ + if(n < 10){ + return "0"+n; + }else{ + return n+""; + } + } + + //某周日期范围 d:0当前周 -1往前 1往后 + //flag传值就是最大天数是昨天 目前传-1表示最大昨天 + service.getWeekRangeDate = function(d,flag){ + d = d ? d : 0; + var date = new Date(),w = date.getDay(); + w = w == 0 ? 7 : w; + + var start = date.clone().addDays(-w+1),end = date; + + if(d > 0){ + start = start.clone().addDays(d*7); + end = start.clone().addDays(6); + } + else if(d < 0){ + end = start.clone().addDays(-1+(d+1)*7); + start = start.clone().addDays(d*7); + } + + if(flag && flag == -1 && Date.isSameDay(end,Date.today())){ + if(start == end){ + start = end = end.clone().addDays(-1); + } + else{ + end = end.clone().addDays(-1); + } + } + return { + startDate:start.Format("yyyy-MM-dd"), + endDate:end.Format("yyyy-MM-dd") + } + } + + //某月日期范围 d:0当前月 -1往前 1往后 + //flag传值就是最大天数是昨天 目前传-1表示最大昨天 + service.getMonthRangeDate = function(d,flag){ + d = d ? d : 0; + var date = new Date(),year = date.getFullYear(),m = date.getMonth(),day = date.getDate(); + var start = null,end = null; + if(d!=0){ + m += d; + if(m<0){ + m += 11; + -- year; + } + day = Date.getDaysInMonth(year,m); + end = new Date(year,m,day); + + start = end.clone(); + start.setDate(1); + } + else{ + if(flag && flag == -1){ + day += -1; + } + start = date.clone(),end = date; + start.setDate(1); + end.setDate(day); + } + + return { + startDate:start.Format("yyyy-MM-dd"), + endDate:end.Format("yyyy-MM-dd") + } + } + //计算两个日期时间差 + service.getDaysNum = function(strDateStart,strDateEnd){ + var strSeparator = "-"; //日期分隔符 + var oDate1; + var oDate2; + var iDays; + oDate1= strDateStart.split(strSeparator); + oDate2= strDateEnd.split(strSeparator); + var strDateS = new Date(oDate1[0], oDate1[1]-1, oDate1[2]); + var strDateE = new Date(oDate2[0], oDate2[1]-1, oDate2[2]); + iDays = parseInt(Math.abs(strDateS - strDateE ) / 1000 / 60 / 60 /24)//把相差的毫秒数转换为天数 + return iDays; + } + + return service; + } +})(); \ No newline at end of file diff --git a/src/main/websrc/js/app/app.js b/src/main/websrc/js/app/app.js new file mode 100644 index 0000000..df1fb48 --- /dev/null +++ b/src/main/websrc/js/app/app.js @@ -0,0 +1,394 @@ +(function(){ + angular.module("app") + .controller("indexCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$state","$location","DateService","$timeout",indexCtrl]); + + + function indexCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$state,$location,DateService,$timeout){ + + $rootScope.unfoldFlag = $rootScope.unfoldFlag==undefined?false:$rootScope.unfoldFlag; + $scope.queryLimit = function(appid){ + if(angular.isDefined(appid)){ + limitPM = HttpService.getInfo("login/limit/"+appid); + } + else{ + limitPM = HttpService.getInfo("login/limit"); + } + + limitPM.then(function(data){ + $rootScope.limitInfo = data; + UtilService.setItem("limitInfo",JSON.stringify($rootScope.limitInfo)); + }); + } + + $rootScope.demoU = ToolService.isDemoUser(); + $scope.goLogin = function(){ + window.location.href = "/login.html"; + } + + //msgflag=1,新建app刷list + $scope.queryApp = function(msgflag){ + var appPM = HttpService.getInfo("app/findall"); + appPM.then(function(data){ + $scope.appAlllistInfo = data; + $scope.applistInfo = data.filter(function(item){ + return item.isDebug!=true; + }); + + if(msgflag==1){return false;} + + var lastId = UtilService.getCookie("ryioLastApp"); + var demoapk = UtilService.getCookie("ryioDemoapk"); + UtilService.setCookie("ryioDemoapk",""); + if($scope.applistInfo.length > 0){ + if(UtilService.isNullStr(lastId)){ + lastId = "-1"; + } + lastId = Number(lastId); + var apps = $scope.applistInfo.filter(function(item){ + if(!UtilService.isNullStr(demoapk)){ + return item.appkey == demoapk; + } + else{ + return item.id == lastId; + } + }); + if(apps.length == 0){ + lastId = $scope.applistInfo[0].id; + } + else{ + lastId = apps[0].id; + } + if($scope.appidInit == lastId){ + $scope.appfresh = ++rmd; + }else{ + $scope.appidInit = lastId; + } + for(i=0; i < $scope.applistInfo.length; i++){ + if($scope.applistInfo[i].id == $scope.appidInit){ + $scope.appkey = $scope.applistInfo[i].appkey; + } + } + } + else{ + if($rootScope.isSuper || $rootScope.isManage || $rootScope.isAppManage){ + $state.go("collect.app"); + } + else{ + $scope.goLogin(); + } + } + }); + }; + + $scope.$on('f5Applist',function(e,msg){ + $scope.queryApp(msg); + }); + $scope.hasSubMenus = function(){ + $scope.showMenuFlag = {}; + var menus = $rootScope.curRoleAuth.roleAuthDetailList; + var first = ""; + for(var i=0;i<menus.length;i++){ + if($scope.showMenuFlag.admonitor && $scope.showMenuFlag.behavior && $scope.showMenuFlag.export){ + break; + } + if(menus[i].parentAuth=='admonitor' || menus[i].parentAuth == 'campaignmanager'){ + $scope.showMenuFlag.admonitor = true; + }else if(menus[i].parentAuth=='behavior' || menus[i].parentAuth == 'eventmanage'){ + $scope.showMenuFlag.behavior = true; + }else if(menus[i].parentAuth=='export'){ + $scope.showMenuFlag.export = true; + } + } + if($rootScope.mainMenu == 'export' && !$scope.showMenuFlag.export){ + $rootScope.mainMenu = ""; + }else if($rootScope.mainMenu == 'behavior' && !$scope.showMenuFlag.behavior){ + $rootScope.mainMenu = ""; + }else if($rootScope.mainMenu == 'admonitor' && !$scope.showMenuFlag.admonitor){ + $rootScope.mainMenu = ""; + } + } + + $rootScope.webHideMenus = []; + $scope.$on("appid",function(e,msg){ + $rootScope.appInstance = msg.info; + $scope.platform = msg.info.platform; + $rootScope.isandroid = $scope.platform == 'Android'; + $rootScope.isios = $scope.platform == 'iOS'; + $rootScope.isweb = $scope.platform == 'H5'; + + var path = $location.$$path,idx = path.indexOf("Detail"); + if(path.indexOf('appDetail')>-1){return false;} + + if(idx>-1){ + $scope.appid = undefined; + $location.path(path.substring(0,idx)); + } + else if($rootScope.isweb && $rootScope.webHideMenus.indexOf($rootScope.pagePath)>-1){ + $scope.appid = undefined; + $location.path($rootScope.firstMeau); + } + + if($rootScope.pagePath == '' || $rootScope.pagePath == 'collect' + || (!$rootScope.isSuper && $rootScope.curRoleAuth && !$scope.hasTheMenu($rootScope.pagePath))) + { + $scope.appid = undefined; + $location.path($rootScope.firstMeau); + } + + $rootScope.appid = $scope.appid = msg.info.id; + UtilService.setCookie("ryioLastApp",$scope.appid,7); + }); + + $scope.goToCustom = function(id,name){ + $location.path("/collect/custommenu/"+id); + $rootScope.custID = id; + } + $scope.gotoCustonMenu = function(menuId){ + var url = $state.href('collect.custommenu'); + window.open(url+'/'+menuId,'_blank'); + } + var rmd = new Date().getTime(); + $scope.$on("mngappTo",function(e,msg){ + if($scope.appid == msg){return false;} + if($scope.appidInit == msg){ + $scope.appfresh = ++rmd; + }else{ + $scope.appidInit = msg; + } + }); + + $scope.loginuserName = UtilService.getCookie("ryioUname"); + $scope.currentAccountId = UtilService.getCookie("ryioUid"); + $scope.userPastDate = UtilService.getCookie("ryioPastDate"); + + $scope.errorBack = function(msg){ + ToolService.showTips(msg); + }; + + var rmdId = UtilService.randRangeId(),auid = UtilService.getCookie("ryioUid"); + + $scope.goPage = function(ui){ + $rootScope.channeluniqueName = 'normal'; + if(ui == 'home'){ + ui = $rootScope.firstMeau; + ui = ui.substring(1).replace("/","."); + } + + if(ui == 'collect.custommenu'){ + $rootScope.custID = ""; + } + var mmenu = ui.substring(ui.indexOf('.')+1); + if(mmenu == 'channel'){ + $rootScope.channeluniqueName = "normal"; + } + if($state.current && $state.current.name == ui){ + $state.reload(ui,{pageid:null}); + }else{ + $state.go(ui,{pageid:null}); + } + } + $scope.resizeStyle = function(){ + var mleft = '0px'; + if($rootScope.pagePath == "userinfo" || $rootScope.pagePath == "nopower"){ + $rootScope.mainMenu = false; + }else{ + mleft = $rootScope.unfoldFlag?'40px':'186px'; + } + $(".conditionAlpha").css('left',mleft); + $rootScope.panelw = $(window).width()-mleft.slice(0,-2)-84; + return {'margin-left':mleft}; + } + $scope.toggleMenu = function(){ + $rootScope.unfoldFlag = !$rootScope.unfoldFlag; + UtilService.setCookie("unfoldFlag",$rootScope.unfoldFlag); + + $scope.$broadcast("conentresize",true); + } + + //flag:1一级菜单显示权限 2:编辑权限 + $rootScope.hasTheMenu = function(name,flag,getmenus){ + var menus = $rootScope.curRoleAuth.roleAuthDetailList.filter(function(item){ + if(angular.isDefined(flag) && flag == 1){ + if($rootScope.isweb){ + return item.parentAuth == name && $scope.webHideMenus.indexOf(item.auth)==-1; + } + else{ + return item.parentAuth == name; + } + } + if(angular.isDefined(flag) && flag == 2){ + return item.auth == name && item.edit == true; + } + else{ + if(name == 'export'){ + return $rootScope.hasTheMenu(name,1); + } + else{ + return item.auth == name && item.view == true; + } + + } + }); + if(angular.isDefined(getmenus)){ + return menus; + } + else{ + return menus.length>0; + } + } + $rootScope.showSubMenus = function(mainMenu){ + if($scope.channelAlert){ + return false; + } + if(mainMenu!='management' && $scope.applistInfo && $scope.applistInfo.length == 0){ + if($scope.appAlllistInfo.length > 0){ + ToolService.showTips("请先完成"+$scope.appAlllistInfo[0].name+"的数据调试"); + } + else{ + ToolService.showTips("请先创建应用"); + } + return false; + } + $rootScope.mainMenu = mainMenu; + var first = ""; + if(mainMenu=='behavior'){ + first = "/collect/"+$rootScope.mainMenus.behavior[0]; + }else if(mainMenu=='export'){ + first = "/collect/"+$rootScope.mainMenus.dataexport[$rootScope.isweb?1:0]; + }else{ + first = "/manage/"+$rootScope.mainMenus.manage[0]; + } + $location.path(first); + } + $rootScope.showMenu = function(name,flag){ + if(name == null){ + name = $scope.pagePath; + } + if($scope.isweb && $scope.webHideMenus.indexOf(name)>-1){ + return false; + } + if($rootScope.isSuper || $rootScope.isManage || $rootScope.isAppManage){ + $scope.campaigninfoGroup = true; + return true; + }else{ + if($rootScope.curRoleAuth){ + return $scope.hasTheMenu(name,flag); + } + else{ + return false; + } + } + } + $rootScope.hasEditPower = function(){ + return $rootScope.showMenu(null,2); + } + + $scope.showDataModel = function(m){ + if($rootScope.isweb && m == 'retention'){return false;} + if(m == 'flow'){return true;} + if(m == 'channel'){return true;} + + var key = {'pay':'payAuth','retention':'retentionAuth','isnatureopen':'isNatureOpen','topauth':"topAuth"}[m]; + if($rootScope.isSuper || $rootScope.isManage || $rootScope.isAppManage){ + return true; + }else{ + if($rootScope.curRoleAuth){ + return $rootScope.curRoleAuth[key]; + } + else{ + return false; + } + } + } + $scope.formTipMsg = "信息没填全或数据格式有误,请检查"; + + $rootScope.$watch("pagePath+isweb",function(n){ + n = $scope.pagePath; + if(angular.isDefined(n) && n!='' && n!= "product"){ + var tipPM = HttpService.getInfo("tip/"+n, {}); + tipPM.then(function(data){ + $rootScope.currentPageTips = data; + },function(data){ + $rootScope.currentPageTips = {}; + }); + } + else{ + $rootScope.currentPageTips = {}; + } + }); + + $scope.userLogout = function(){ + var lgPM = HttpService.getInfo("login/logout", {}); + lgPM.then(function(data){ + HttpService.logOutCookie(); + }); + } + + $scope.showNoticew = false; + $scope.queryNotice = function(){ + var noticePM = HttpService.getInfo("notice/findDeploy", {}); + noticePM.then(function(data){ + $scope.noticeList = data; + + var sortNotice = UtilService.cloneJSON(data); + if(sortNotice && angular.isArray(sortNotice)){ + sortNotice.sort(function(a,b){ + return new Date(a.deployDate) > new Date(b.deployDate) ? -1 : 1; + }); + } + else{ + sortNotice = []; + } + if(sortNotice.length>0){ + $scope.newNoticeInfo = sortNotice[0]; + } + }); + $timeout($scope.queryNotice,1000*60*3); + } + $scope.showNoticeWin = function(){ + $scope.showNoticew = true; + ToolService.showAlp(); + } + $scope.hideNoticeWin = function(){ + $scope.showNoticew = false; + ToolService.hideAlp(); + } + $scope.clickNotice = function(news){ + var id = news.id; + if($scope.curNoticeId == id){ + $scope.curNoticeId = -1; + } + else{ + $scope.curNoticeId = id; + if(!news.isRead){ + news.isRead = true; + if($scope.newNoticeInfo && $scope.newNoticeInfo.id == id){ + $scope.newNoticeInfo.isRead = true; + } + HttpService.postInfo("notice/saveReadLog/"+id, {}); + } + } + } + $scope.initpage = function(){ + $scope.queryLimit(); + $scope.queryApp(); + $scope.queryNotice(); + } + + var lpath = $location.path(); + if(lpath!='/active/product'){ + $scope.initpage(); + } + //判断是否需要向后台发送请求检测名称重复 + $scope.judgeNameChange = function(oldname,newname){ + if(!UtilService.isNullStr(newname) && (oldname !='' && newname !='' && angular.lowercase(oldname) != angular.lowercase(newname) || (oldname=='' && newname!=''))){ + return true; + } + else{ + return false; + } + } + + $scope.pwdPlacehold = "仅支持数字,大小写字母,且至少包含其中2种,长度限制为6-18位"; + } +})(); diff --git a/src/main/websrc/js/app/config.js b/src/main/websrc/js/app/config.js new file mode 100644 index 0000000..736522f --- /dev/null +++ b/src/main/websrc/js/app/config.js @@ -0,0 +1,152 @@ +(function () { + 'use strict'; + + angular.module('app') + .run(['$rootScope', '$state', '$stateParams','UtilService','$templateCache', '$location','$window','ToolService','HttpService','DateService','$timeout', + function($rootScope, $state, $stateParams,UtilService,$templateCache,$location,$window,ToolService,HttpService,DateService,$timeout) { + $rootScope.$state = $state; + $rootScope.$stateParams = $stateParams; + $rootScope.isSuper = UtilService.getCookie("ryioIsSuper")=='true' || UtilService.getCookie("ryioIsSuper")==true; + + var ryioRole = UtilService.getCookie("ryioRole"); + if(ryioRole && ryioRole == '1'){ //管理员 + $rootScope.isManage = true; + } + else if(ryioRole && ryioRole == '2'){//子应用管理员 + $rootScope.isAppManage = true; + } + $rootScope.isall = $rootScope.isSuper || $rootScope.isManage || $rootScope.isAppManage; + $rootScope.firstMeau = '/collect/custommenu'; + + var userID = UtilService.getCookie("ryioUid"); + + var speMenus = ["userinfo","product","nopower","expiration"]; + $rootScope.mainMenus ={ + behavior:["custommenu","eventstats","retention","funnel","usergroup","profile","event","activityevent","custommenuDetail","intelligentpath"], + // dataexport:["logtool","report"], + dataexport:["report"], + manage:["app","auth"] + }; + $rootScope.$on('$stateChangeStart', function(event,next,o,current){ + var name = next.name,nextMenu = name.substring(name.indexOf(".")+1),idd = nextMenu.indexOf("Detail"); + var curname = current.name,curMenu = curname.substring(curname.indexOf(".")+1); + if(curname == '' && (nextMenu == 'nopower' || nextMenu == 'expiration')){ + window.location.href = "index.html"; + return false; + } + + var mname = nextMenu?nextMenu:curMenu; + if($rootScope.mainMenus.behavior.indexOf(mname) > -1){ + $rootScope.mainMenu = 'behavior'; + }else if($rootScope.mainMenus.dataexport.indexOf(mname) > -1){ + $rootScope.mainMenu = 'export'; + }else if($rootScope.mainMenus.manage.indexOf(mname) > -1){ + $rootScope.mainMenu = 'management'; + } + + var nextDo = function(){ + var isUnfoldFlag = UtilService.getCookie("unfoldFlag"); + if(isUnfoldFlag){ + $rootScope.unfoldFlag = isUnfoldFlag=="false"?false:true; + } + document.getElementById("sysLoad").style.display = "none"; + document.getElementById("alpLoad").style.display = "none"; + if(idd > -1){ + nextMenu = nextMenu.substring(0,idd); + } + + var submenu = "",submenuDir = { + 'activityevent':"虚拟事件" + }; + + if(nextMenu == 'activityevent'){ + submenu = nextMenu; + nextMenu = 'event'; + } + + var web = $rootScope.isweb && $rootScope.webHideMenus.indexOf(nextMenu)>-1; + if(nextMenu=='' || nextMenu == 'collect' || web){ + $location.path($rootScope.firstMeau); + return false; + } + else if(nextMenu == 'systemparam' && $rootScope.demoU){} + else if(speMenus.indexOf(nextMenu)>-1){} + else if(!$rootScope.isSuper && $rootScope.curRoleAuth && !$rootScope.hasTheMenu(nextMenu)){ + var firstMeau = $rootScope.firstMeau, + nowmenu = firstMeau.substring(firstMeau.lastIndexOf("/")+1); + + $location.path($rootScope.firstMeau); + if(nowmenu == $rootScope.pagePath){ + $window.location.reload(); + } + return false; + // console.log(nowmenu,$rootScope.pagePath) + } + + if(speMenus.indexOf(nextMenu)>-1){ + $rootScope.backReport = true; + }else{ + $rootScope.backReport = false; + } + + if(nextMenu == 'product' || (nextMenu=='userinfo' && curMenu=='product')){ + $rootScope.preStatus = true; + }else{ + $rootScope.preStatus = false; + } + + + $(".rightWrap").scrollTop(0); + + $rootScope.pagePath = nextMenu; + } + if(!$rootScope.limitInfo){ + $timeout(function(){ + nextDo(); + },100); + } + else{ + nextDo(); + } + }); + + //清除页面缓存 + var stateChangeSuccess = $rootScope.$on('$stateChangeSuccess', stateChangeSuccess); + function stateChangeSuccess($rootScope) { + $templateCache.removeAll(); + } + } + ]) + /*捕获异常*/ + .config(["$provide",function ($provide) { + $provide.decorator("$exceptionHandler", ['$delegate', function($delegate) { + return function (exception, cause) { + document.getElementById("sysLoad").style.display = "none"; + if(String(exception).indexOf("$compile:tpload")==-1){ + $delegate(exception, cause); + } + } + }]) + }]) + .factory('httpInterceptor', [function() { + var timestampMarker = { + request: function(config) { + var token = $.cookie("ryioToken"); + config.headers.Authorization = token; + config.requestTimestamp = new Date().getTime(); + config.timeout = 3000 * 10; + return config; + }, + response: function(response) { + response.config.responseTimestamp = new Date().getTime(); + return response; + } + }; + return timestampMarker; + }]) + /*设置请求header*/ + .config(["$httpProvider",function($httpProvider) { + $httpProvider.interceptors.push('httpInterceptor'); + }]); + +})(); diff --git a/src/main/websrc/js/app/directive.js b/src/main/websrc/js/app/directive.js new file mode 100644 index 0000000..bb9a12c --- /dev/null +++ b/src/main/websrc/js/app/directive.js @@ -0,0 +1,2038 @@ +(function(){ + var tempVersion = new Date().getTime(); + + angular.module("app") + .directive("flipInfo",flipInfo) + .directive("flipInfoDy",flipInfoDy) + .directive("selectList",["ToolService",selectList]) + .directive("selectTList",selectTList) + .directive("selectMoreList",selectMoreList) + .directive("selectParams",["ToolService",selectParams]) + .directive("delTip",delTip) + .directive("wincrmTip",wincrmTip) + .directive("okcrmTip",['ToolService',okcrmTip]) + .directive("stopEvent",stopEvent) + .directive("minChart",["OptionService","$window","$timeout","HttpService","UtilService","ToolService","$rootScope",minChart]) + .directive("exportButton",["HttpService","UtilService","ToolService","$rootScope",exportButton]) + .directive("ngEnter",ngEnter) + .directive("popTip",popTip) + .directive("isLoading",isLoading) + .directive("dateRange",["ToolService",dateRange]) + .directive("selectChannel",["$state","$rootScope",selectChannel]) + .directive("numberTxt",numberTxt) + .directive("integerTxt",integerTxt) + .directive("fixHeader",["$timeout",fixHeader]) + .directive("helpTip",["ToolService","$rootScope",helpTip]) + .directive("helpWinTip",["ToolService","$rootScope","$filter",helpWinTip]) + .directive("noData",[noData]) + .directive("customEvent",["UtilService","ToolService","$timeout","HttpService","$rootScope",customEvent]) + .directive("fileModel",["$parse",fileModel]) + .directive("searchGroup",[searchGroup]) + .directive("bigTable",["$timeout","$compile",bigTable]) + .directive("dragOrder",[dragOrder]); + + function delTip(){ + return{ + restrict : "E", + replace : true, + templateUrl : '/template/common/delwin.html?r='+tempVersion, + transclude:true, + scope:{ + delfn:"&", + status :"=", + okTitle :"@" + }, + link:function($scope,el){ + $scope.btnname = $scope.okTitle ? $scope.okTitle : "确定" + $scope.hideWin = function(){ + $scope.status = false; + } + } + } + } + + function wincrmTip(){ + return{ + restrict : "E", + replace : true, + templateUrl : '/template/common/wincrm.html?r='+tempVersion, + transclude:true, + scope:{ + okfn:"&", + nofn:"&", + title:"@", + status :"=", + okTitle:"@", + noTitle:"@" + }, + link:function($scope,el){ + if(angular.isUndefined($scope.okTitle)){ + $scope.okTitle = "确定"; + } + if(angular.isUndefined($scope.noTitle)){ + $scope.noTitle = "取消"; + } + $scope.hideWin = function(){ + $scope.status = false; + $scope.nofn(); + } + $scope.crmWin = function(){ + $scope.status = false; + $scope.okfn(); + } + } + } + } + + function okcrmTip(ToolService){ + return{ + restrict : "E", + replace : true, + templateUrl : '/template/common/okcrm.html?r='+tempVersion, + transclude:true, + scope:{ + title:"@", + status :"=", + okfn : "&" + }, + link:function($scope,el){ + $scope.$watch("status",function(n){ + if(angular.isDefined(n) && n == true){ + ToolService.showAlp(); + } + }); + $scope.crmWin = function(){ + $scope.status = false; + ToolService.hideAlp() + $scope.okfn(); + } + } + } + } + + function stopEvent(){ + return { + restrict: "A", + link: function($scope, el) { + jQuery(el).on("click",function(event){ + event.stopPropagation(); + }); + } + } + }; + + function selectList(ToolService){ + return { + restrict: 'E', + replace: true, + templateUrl: '/template/common/select.html?r='+tempVersion, + scope: { + meauInfo:'=', //列表数据 + meauName:"=", //初始name,eg:请选择 + meauId:"@", //select的id + meauId2:"=",//动态ID + meauData:"=", //初始选择的id值 + meauRefresh:"=", //强制刷新下拉框 + keyname:"@", //显示名 + keyid:"@",//传递ID + meauNull:"=", //置空 + meauRed:"=", //红色框 + nosearch:"@", //为true,强制不显示搜索框 + operationSel:"=", //当前sel可否操作 + iconType:"@", //true箭头白色 + meauSpe:"=" + }, + link: function($scope,$element) { + // console.log(angular.element($element).getBoundingClientRect().bottom) + // console.log($(".selList").offset().top,$(window).height(),$element.getBoundingClientRect().bottom) + $scope.selme = false; + $scope.meauId = $scope.meauId || $scope.meauId2; + $scope.clickMeau = function(meau){ + if(!$scope.operSel || (meau[$scope.keyid]=='pie' && $scope.meauSpe)){ + ToolService.showTips("饼状图只适用于有分组的事件分析。"); + return false; + } + + $scope.currentInfo = meau; + $scope.selName = meau[$scope.keyname]; + $scope.selId = meau[$scope.keyid]; + $scope.meauRed = false; + $scope.$emit($scope.meauId,{info:meau}) + } + $scope.$watch("operationSel",function(n){ + if(angular.isUndefined($scope.operationSel)){ + $scope.operSel = true; + } + else{ + $scope.operSel = n; + } + }); + + $scope.showsearch = $scope.nosearch != 'true'; + if(angular.isUndefined($scope.keyname)){ + $scope.keyname = "name"; + } + if(angular.isUndefined($scope.keyid)){ + $scope.keyid = "id"; + } + $scope.$watch("meauData+meauName+meauRefresh+meauInfo",function(){ + if($scope.meauInfo && angular.isDefined($scope.meauData) && $scope.meauData!=-1){ + var temp = $scope.meauInfo.filter(function(item){ + return item[$scope.keyid] == $scope.meauData; + }); + if(temp.length>0){ + $scope.clickMeau(temp[0]); + }else{ + $scope.selName = $scope.meauName; + $scope.selId = ""; + } + }else{ + $scope.selName = $scope.meauName; + $scope.selId = ""; + } + }); + $scope.$watch("meauNull",function(n){ + if(angular.isDefined(n)){ + $scope.selName = $scope.meauName; + $scope.selId = ""; + } + }); + } + } + }; + //有分类间隔线的下拉框 + function selectTList(){ + return { + restrict: 'E', + replace: true, + templateUrl: '/template/common/selectT.html?r='+tempVersion, + scope: { + meauInfo:'=', //列表数据 + meauName:"=", //初始name,eg:请选择 + meauId:"@", //select的id + meauId2:"=",//动态ID + meauData:"=", //初始选择的id值 + meauType:"=", + meauRefresh:"=", //强制刷新下拉框 + keyname:"@", //显示名 + keyid:"@",//传递ID + meauNull:"=", //置空 + meauRed:"=", //红色框 + meauTypekey:"@", + meauTypename:"@", + operationSel:"=" //当前sel可否操作 + }, + link: function($scope,$element) { + if(angular.isDefined($scope.meauTypekey)){ + $scope.typeKey = eval($scope.meauTypekey); + $scope.typeName = eval($scope.meauTypename); + } + $scope.$watch("operationSel",function(n){ + if(angular.isUndefined($scope.operationSel)){ + $scope.operSel = true; + } + else{ + $scope.operSel = n; + } + }); + $scope.selme = false; + $scope.meauId = $scope.meauId || $scope.meauId2; + $scope.clickMeau = function(meau){ + if(!$scope.operSel){return false;} + + $scope.selName = meau[$scope.keyname]; + $scope.selId = meau[$scope.keyid]; + $scope.meauRed = false; + $scope.$emit($scope.meauId,{info:meau}) + } + + if(angular.isUndefined($scope.keyname)){ + $scope.keyname = "name"; + } + if(angular.isUndefined($scope.keyid)){ + $scope.keyid = "id"; + } + $scope.$watch("meauData+meauName+meauRefresh+meauInfo",function(){ + if($scope.meauInfo && angular.isDefined($scope.meauData) && $scope.meauData!=-1){ + var temp = $scope.meauInfo.filter(function(item){ + return item[$scope.keyid] == $scope.meauData && (item.type == $scope.meauType || !$scope.meauType); + }); + if(temp.length>0){ + $scope.clickMeau(temp[0]); + }else{ + $scope.selName = $scope.meauName; + } + }else{ + $scope.selName = $scope.meauName; + } + }); + + $scope.haslist = function(type){ + if(!$scope.meauInfo){return false;} + + var bol = false; + for(var i=0;i<$scope.meauInfo.length;i++){ + if($scope.meauInfo[i].type== type || $scope.meauInfo[i].dimensionType == type){ + bol = true; + break; + } + } + return bol; + } + $scope.$watch("searchlitxt",function(n){ + if(angular.isUndefined(n) || !n){return false;} + $scope.virtual = ""; + $scope.nature = ""; + $scope.meauInfo.filter(function(item){ + if(angular.uppercase(item.name).indexOf(angular.uppercase(n))>-1 && item.type=="virtual"){ + $scope.virtual = item.type; + } + if(angular.uppercase(item.name).indexOf(angular.uppercase(n))>-1 && item.type=="nature"){ + $scope.nature = item.type; + } + }); + }); + } + } + }; + + //多选 + function selectMoreList(){ + return { + restrict: 'E', + replace: true, + templateUrl: '/template/common/selectmore.html?r='+tempVersion, + scope: { + meauInfo:'=', //列表数据 + meauName:"=", //初始name,eg:请选择 + meauId:"@", //select的id + meauData:"=", //初始选择的id值 + meauRefresh:"=", //强制刷新下拉框 + keyname:"@", //显示名 + keyid:"@",//传递ID + meauRed:"="//红色框 + }, + link: function($scope,$element) { + $scope.ischeckall = false; + $scope.selme = false; + + if(angular.isUndefined($scope.keyname)){ + $scope.keyname = "name"; + } + if(angular.isUndefined($scope.keyid)){ + $scope.keyid = "id"; + } + + $scope.clickMeau = function(meau){ + $scope.meauRed = false; + var idx = $scope.selIDS.indexOf(meau[$scope.keyid]); + if(idx>-1){ + $scope.selIDS.splice(idx,1); + $scope.selNames.splice(idx,1); + $scope.ischeckall = false; + }else{ + $scope.selIDS.push(meau[$scope.keyid]); + $scope.selNames.push(meau[$scope.keyname]); + } + } + + $scope.okSelect = function(){ + $scope.$emit($scope.meauId,{info:$scope.selIDS.join(",")}); + $scope.selme = false; + } + $scope.$watch("selme",function(){ + if(!$scope.selme && $scope.keyid=='eventName' && $scope.selIDS){ + $scope.$emit($scope.meauId,{info:$scope.selIDS.join(",")}); + } + }); + $scope.$watch("meauData+meauName+meauRefresh+meauInfo",function(){ + $scope.selIDS = []; + $scope.selNames = []; + $scope.ischeckall = false; + if($scope.meauInfo && angular.isDefined($scope.meauData) && $scope.meauData!=-1 + && typeof($scope.meauData)=='string'){ + var arr = $scope.meauData.split(","); + var temp = $scope.meauInfo.filter(function(item){ + return arr.indexOf(item[$scope.keyid])>-1; + }); + if(temp.length>0){ + angular.forEach(temp,function(item){ + $scope.clickMeau(item); + }) + }else{ + $scope.selName = $scope.meauName; + } + }else{ + $scope.selName = $scope.meauName; + } + }); + + $scope.checkAll = function(){ + $scope.ischeckall = !$scope.ischeckall; + $scope.meauInfo.filter(function(meau){ + var idx = $scope.selIDS.indexOf(meau[$scope.keyid]); + if(!$scope.ischeckall && idx>-1){ + $scope.selIDS.splice(idx,1); + $scope.selNames.splice(idx,1); + } + + if($scope.ischeckall && idx==-1){ + $scope.selIDS.push(meau[$scope.keyid]); + $scope.selNames.push(meau[$scope.keyname]); + } + }); + } + } + } + }; + + //多选 + function selectParams(ToolService){ + return { + restrict: 'E', + replace: true, + templateUrl: '/template/common/selectparams.html?r='+tempVersion, + scope: { + meauInfo:'=', //列表数据 + meauName:"=", //初始name,eg:请选择 + meauId:"@", //select的id + meauRefresh:"=" + }, + link: function($scope,$element) { + $scope.selme = false; + $scope.secondSel = false; + $scope.showSelWin = function(){ + $scope.selme = true; + if($scope.selId){ + $scope.secondSel = true; + } + } + $scope.clickMeau = function(meau){ + var w = $($element).find(".optionList:eq(0)").width(); + if($scope.selId!=meau.id){ + $scope.secIDS = []; + $scope.secKeys = []; + } + $scope.selId = meau.id; + $scope.selN = meau.name; + $scope.evtType = meau.type; + + $scope.secondSel = true; + $scope.secondList = meau.value; + $scope.secKeyList = meau.key; + $scope.secondStyle = {left:w+"px"} + } + $scope.clickSecMeau = function(v,midx){ + var idx = $scope.secIDS.indexOf(v); + if(idx>-1){ + $scope.secIDS.splice(idx,1); + if($scope.secKeyList){ + $scope.secKeys.splice(idx,1); + } + }else{ + $scope.secIDS.push(v); + if($scope.secKeyList){ + $scope.secKeys.push($scope.secKeyList[midx]); + } + } + } + $scope.okSelect = function(){ + var pv = ""; + if($scope.selId && $scope.selId != ""){ + var pas = {}; + + if($scope.secIDS.length == 0 || $scope.secIDS.length>10){ + ToolService.showTips("请选择10个以内对比属性值"); + return false; + } + if($scope.secKeyList){ + pas[$scope.selId] = $scope.secKeys.join(","); + } + else{ + pas[$scope.selId] = $scope.secIDS.join(","); + } + + pas.type = $scope.evtType; + pv = JSON.stringify(pas); + + // $scope.selName = $scope.selN + "=" + $scope.secIDS.join(","); + $scope.selName = $scope.selN; + }else{ + $scope.selName = $scope.meauName; + } + $scope.$emit($scope.meauId,{info:pv,name:$scope.selN}); + + $scope.selme = false; + $scope.secondSel = false; + } + $scope.$watch("meauName+meauInfo+meauRefresh",function(){ + if($scope.meauInfo){ + $scope.secIDS = []; + $scope.secondList = []; + $scope.selId = ""; + $scope.secondSel = false; + } + $scope.selName = $scope.meauName; + }); + + angular.element(document).on("click",function(){ + $scope.$apply(function(){ + $scope.selme=false; + $scope.secondSel=false; + }); + }); + } + } + }; + + //分页 + function flipInfo(){ + return { + restrict : "E", + replace : true, + templateUrl : '/template/common/flipinfo.html?r='+tempVersion, + scope:{ + listInfo:"=", //数据数组 + searchTxt:"=",//搜索值 + searchName:"@",//匹配字段 + listKey:"@", //列表key,用于同一个页面多个翻页区分 + searchKey:"=", //匹配字段,scope动态 + listRefresh:"=" //排序跳转到第一页 + }, + link:function($scope,el){ + $scope.everyId = "everyId"; + $scope.everyList = [ + {"id":10,"name":"每页10条"}, + {"id":20,"name":"每页20条"}, + {"id":30,"name":"每页30条"} + ]; + $scope.minNum = $scope.everyInit = $scope.everyList[0].id; + $scope.$on($scope.everyId,function(e,msg){ + var num = msg.info.id; + if(num == 'all'){ + $scope.everyNum = $scope.listInfo.length; + }else{ + $scope.everyNum = num; + } + }); + + $scope.page = {}; + $scope.$watch("listInfo+everyNum",function(n){ + if(angular.isDefined($scope.listInfo)){ + var totalLen = 0; + if(angular.isDefined($scope.searchTxt) && $scope.searchTxt!=''){ + totalLen = $scope.filterCurList.length; + } + else{ + totalLen = $scope.listInfo.length; + } + $scope.refreshInfos(totalLen); + } + }); + + //模糊搜索的时候,重新记录翻页数据 + $scope.$watch("searchTxt",function(n){ + if(angular.isDefined(n) && $scope.listInfo){ + $scope.searchN = $scope.searchName || $scope.searchKey; + if(angular.isDefined($scope.searchN)){ + $scope.searchNames = $scope.searchN.split(","); + } + var infos = $scope.listInfo.filter(function(item){ + var has = false; + for(var i=$scope.searchNames.length-1;i>=0;i--){ + if(item[$scope.searchNames[i]] && angular.uppercase(String(item[$scope.searchNames[i]])).indexOf(angular.uppercase(n))>-1){ + has = true; + break; + } + } + return has; + }); + $scope.filterCurList = infos; + $scope.refreshInfos(infos.length); + }; + }); + + $scope.refreshInfos = function(totalLen){ + var emitnum = $scope.everyNum ? $scope.everyNum : $scope.everyInit; + + $scope.page.totals = totalLen; //总条数 + $scope.page.totalpages = Math.ceil($scope.page.totals/emitnum); //总页数 + $scope.page.curpage = 1;//当前页 + + $scope.sendData(); + } + + $scope.goto = function(flag,p){ + switch(flag){ + case 0: //跳转 + $scope.page.curpage = p; + break; + case 2: //上一页 + if($scope.page.curpage > 1){ + $scope.page.curpage --; + } + break; + case 3://下一页 + if($scope.page.curpage < $scope.page.totalpages){ + $scope.page.curpage ++; + } + break; + case 4: //末页 + $scope.page.curpage = $scope.page.totalpages; + break; + case 5://跳转 + if($scope.gonum!='' && angular.isNumber($scope.gonum) && $scope.gonum <= $scope.page.totalpages){ + $scope.page.curpage = $scope.gonum; + } + else{ + $scope.gonum = ''; + } + break; + default: + break; + } + $scope.sendData(); + } + + $scope.$watch("page.curpage",function(n){ + if(angular.isDefined(n)){ + $scope.gonum = n; + } + }); + $scope.$watch("listRefresh",function(n){ + if(angular.isDefined(n)){ + $scope.goto(0,1); + } + }); + + $scope.sendData = function(){ + var start = ($scope.page.curpage -1) * $scope.everyNum - 1; + var end = $scope.page.curpage * $scope.everyNum; + + $scope.$emit("flipinfo",{start:start,end:end,listkey:$scope.listKey,pagen:$scope.everyNum}); + } + } + } + } + + //动态分页 + function flipInfoDy(){ + return { + restrict : "E", + replace : true, + templateUrl : '/template/common/flipinfody.html?r='+tempVersion, + scope:{ + totalNum:"=", //总条数 + listKey:"@", //列表key,用于同一个页面多个翻页区分 + listRefresh:"=" //排序跳转到第一页 + }, + link:function($scope,el){ + $scope.everyId = "everyId"; + $scope.everyList = [ + {"id":20,"name":"每页20条"}, + {"id":50,"name":"每页50条"}, + {"id":100,"name":"每页100条"} + ]; + $scope.minNum = $scope.everyInit = $scope.everyList[0].id; + $scope.$on($scope.everyId,function(e,msg){ + var num = msg.info.id; + if(num == 'all'){ + $scope.everyNum = $scope.totalNum; + }else{ + $scope.everyNum = num; + } + }); + + $scope.page = {}; + $scope.$watch("totalNum+everyNum+listRefresh",function(n){ + if(angular.isDefined($scope.totalNum)){ + $scope.refreshInfos($scope.totalNum-1); + } + }); + + $scope.refreshInfos = function(totalLen){ + var emitnum = $scope.everyNum ? $scope.everyNum : $scope.everyInit; + $scope.page.totals = totalLen; //总条数 + $scope.page.totalpages = Math.ceil($scope.page.totals/emitnum); //总页数 + $scope.page.curpage = 1;//当前页 + + $scope.sendData(); + } + + $scope.goto = function(flag,p){ + var dis = false; + switch(flag){ + case 0: //跳转 + if($scope.page.curpage == p){ + dis = true; + } + $scope.page.curpage = p; + break; + case 2: //上一页 + if($scope.page.curpage==1){ + dis = true; + } + if($scope.page.curpage > 1){ + $scope.page.curpage --; + } + break; + case 3://下一页 + if($scope.page.curpage == $scope.page.totalpages || $scope.page.totalpages<=1){ + dis = true; + } + if($scope.page.curpage < $scope.page.totalpages){ + $scope.page.curpage ++; + } + break; + case 4: //末页 + if($scope.page.curpage == $scope.page.totalpages){ + dis = true; + } + $scope.page.curpage = $scope.page.totalpages; + break; + case 5://跳转 + if($scope.gonum!='' && angular.isNumber($scope.gonum) && $scope.gonum <= $scope.page.totalpages){ + if($scope.page.curpage == $scope.gonum){ + dis = true; + } + $scope.page.curpage = $scope.gonum; + } + else{ + $scope.gonum = ''; + } + break; + default: + break; + } + if(!dis){ + $scope.sendData(); + } + } + + $scope.$watch("page.curpage",function(n){ + if(angular.isDefined(n)){ + $scope.gonum = n; + } + }); + + $scope.sendData = function(){ + $scope.$emit("flipinfo",{current:$scope.page.curpage,pagenum:$scope.everyNum,listkey:$scope.listKey}); + } + } + } + } + + var exportTips = "导出成功,请到数据导出-下载报表处进行下载", + expTimeTips = "请1分钟后再点",expLimitTime = 1000 * 60; + function minChart(OptionService,$window,$timeout,HttpService,UtilService,ToolService,$rootScope){ + return{ + restrict : "E", + replace : true, + templateUrl : '/template/common/chart.html?r='+tempVersion, + scope:{ + chartTitle:"@", //图描述标题 + chartData :"=", //图数据 + chartType:"@", //图类型 + chartTp:"=", + chartConfig:"=", + chartLoading:"=", + chartResize:"@", //yes需要重新resize + chartCondition:"=", + chartBack:"="//回传显示数值 + }, + link:function($scope,el){ + var chartInstance = echarts.init($(el).find(".chartInfo").get(0)); + + $scope.$watch("chartLoading",function(){ + if($scope.chartLoading == true){ + // chartInstance.showLoading(); + } + }); + var predate = 0; + $scope.$watch("chartData",function(){ + if(angular.isUndefined($scope.chartData)){ + return false; + } + predate = 0; + $scope.chartType = $scope.chartTp || $scope.chartType; + var options = null; + if($scope.chartType == 'funnel'){ + var bw = $(el).find(".chartInfo").width(); + $scope.chartConfig.barwidth = bw; + } + + // if(angular.isDefined($scope.chartTp)){ + chartInstance.clear(); + // } + if($scope.chartType == 'pie'){ + options = OptionService.getPieOption($scope.chartData,$scope.chartType,$scope.chartConfig || {}); + } + else if($scope.chartType == 'map'){ + options = OptionService.getMapOption($scope.chartData,$scope.chartType,$scope.chartConfig || {}); + } + else{ + options = OptionService.getOption($scope.chartData,$scope.chartType,$scope.chartConfig || {}); + } + + if($scope.chartType == 'funnel' && $scope.chartConfig.barwidth==0){ + + }else{ + chartInstance.setOption(options); + var bw = $(el).find(".chartInfo").width(); + if($scope.chartResize && $scope.chartResize=='yes'){ + chartInstance.resize(); + } + else if(bw == 0){ + $timeout(function(){ + chartInstance.resize(); + },500); + } + } + + $timeout(function(){ + if($scope.chartType == 'funnel' && $scope.chartConfig.barwidth == 0){ + var bw = $(el).find(".chartInfo").width(); + $scope.chartConfig.barwidth = bw; + options = OptionService.getOption($scope.chartData,$scope.chartType,$scope.chartConfig || {}); + chartInstance.setOption(options); + } + chartInstance.resize(); + },200); + chartInstance.hideLoading(); + + angular.element($window).bind('resize', function(){ + chartInstance.resize(); + }); + //菜单伸缩 + $scope.$on("conentresize",function(){ + $timeout(function(){ + chartInstance.resize(); + },50); + }); + },true); + + $scope.isChart = true; + $scope.changeChart = function(bol){ + $scope.isChart = bol; + if(bol){ + $timeout(function(){ + chartInstance.resize(); + },100); + } + } + //有导出权限 + $rootScope.$watch("limitInfo",function(n){ + if(angular.isDefined(n)){ + $scope.iscanExport = $rootScope.showMenu('export') && $rootScope.limitInfo.platformExport==true; + } + }); + + $scope.exportData = function(){ + var nowdate = new Date().getTime(); + if(predate>0){ + if(nowdate - predate <= expLimitTime){ + predate = nowdate; + ToolService.showTips(expTimeTips); + return false; + } + } + predate = nowdate; + ToolService.showLoading(); + var expPM = HttpService.postInfo("mng/export/report/"+$scope.chartCondition.app+"/generatefile",$scope.chartCondition); + expPM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips(exportTips); + }); + } + } + } + } + //列表导出 + function exportButton(HttpService,UtilService,ToolService,$rootScope){ + return { + restrict: "E", + transclude: true, + replace:true, + templateUrl : '/template/common/export.html?r='+tempVersion, + scope:{ + exportCondition:"=" + }, + link: function($scope, el) { + $scope.style1 = {"float":"right","margin-top":"11px","margin-right":"10px"}; + var predate = 0; + $scope.$watch("exportCondition",function(){ + predate = 0; + }); + $scope.exportData = function(){ + var nowdate = new Date().getTime(); + if(predate>0){ + if(nowdate - predate <= expLimitTime){ + predate = nowdate; + ToolService.showTips(expTimeTips); + return false; + } + } + predate = nowdate; + ToolService.showLoading(); + var expPM = HttpService.postInfo("mng/export/report/"+$scope.exportCondition.app+"/generatefile",$scope.exportCondition); + expPM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips(exportTips); + }); + } + + //有导出权限 + $rootScope.$watch("limitInfo",function(n){ + if(angular.isDefined(n)){ + $scope.iscanExport = $rootScope.showMenu('export') && $rootScope.limitInfo.platformExport==true; + } + }); + } + } + } + + function ngEnter(){ + return function (scope, element, attrs) { + element.bind("keydown keypress", function (event) { + if(event.which === 13) { + scope.$apply(function (){ + scope.$eval(attrs.ngEnter); + }); + + event.preventDefault(); + } + }); + }; + } + + function selectChannel($state,$rootScope){ + return{ + restrict : "E", + replace : true, + templateUrl : '/template/common/channel.html?r='+tempVersion, + scope:{ + channelList:"=", //渠道列表 + appOs:"=",//游戏操作类型 + type:"="//是否为H5类型 + }, + link:function($scope,el){ + $scope.isSuper = $rootScope.isSuper; + if($scope.type){ + $scope.channType = null; + }else{ + $scope.channType = "ry_coop"; + } + $scope.category = 'ADVERTISING'; + $scope.letter = ""; + + $scope.popchannellist = false; + angular.element(el).parent().bind("click",function(){ + $scope.$broadcast("popchannel",{}); + $scope.$apply(); + }); + + $scope.$on("popchannel",function(){ + $scope.popchannellist = true; + }); + + $scope.$watch("appOs",function(n){ + if(angular.isDefined(n)){ + $scope.appplattype = n; + } + }); + + $scope.changeType = function(type){ + $scope.channType = type; + $scope.category = 'ADVERTISING'; + $scope.letter = ""; + }; + + $scope.$watch("channType+appplattype+channelList+category",function(n){ + if(angular.isDefined($scope.channelList) && angular.isDefined($scope.appplattype) && angular.isDefined($scope.category)){ + if($scope.appplattype==2){ + if($scope.channType!='ry_bd'){ + $scope.curChannelList = $scope.channelList.filter(function(channel){ + return channel.type == $scope.channType && channel.osAndroid && channel.category == $scope.category; + }); + } + else{ + $scope.curChannelList = $scope.channelList.filter(function(channel){ + return channel.type == $scope.channType && channel.osAndroid; + }); + } + + } + else if($scope.appplattype==1){ + $scope.curChannelList = $scope.channelList.filter(function(channel){ + return channel.type == $scope.channType && channel.osIos && channel.category == 'ADVERTISING'; + }); + }else{ + $scope.curChannelList = $scope.channelList.filter(function(channel){ + return channel.type == $scope.channType && channel.osWeb; + }); + } + + } + }); + + + $scope.clickChannel = function(channel){ + $scope.$emit("curchannel",{info:channel}); + $scope.curchid = channel.id; + $scope.popchannellist = false; + } + + $scope.goChannel = function(){ + $state.go("collect.channel"); + } + } + }; + } + + function popTip(){ + return { + restrict: "E", + transclude: true, + replace:true, + template:'<div class="opIcon p" ng-mouseleave="showtip=false" style="height:30px;"><span ng-transclude ng-click="clickTip()"></span><div class="poptips" ng-show="showtip"><div class="poparrow"></div>{{tipinfo}}</div></div>', + scope:{ + tipinfo:"=" + }, + link: function($scope, el) { + $scope.showtip = false; + + $scope.clickTip = function(){ + $scope.showtip = !$scope.showtip; + } + } + } + } + + function isLoading(){ + return { + restrict: "E", + replace:true, + templateUrl : '/template/common/loading.html?r='+tempVersion, + scope:{ + doLoading:"=" + }, + link: function($scope, el) { + $scope.myLoading = false; + $scope.$watch("doLoading",function(n){ + if(angular.isDefined(n)){ + $scope.myLoading = n; + } + }); + } + } + } + + function noData(){ + return { + restrict: "E", + replace:true, + templateUrl : '/template/common/nodata.html?r='+tempVersion, + scope:{ + + }, + link: function($scope, el) { + + } + } + } + + function dateRange(ToolService){ + return { + restrict: "E", + replace:true, + templateUrl : '/template/common/daterange.html?r='+tempVersion, + scope:{ + nodrange:"@", + noToday:"@", + datekey:"@", + maxRange:"@" + }, + link: function($scope, el) { + if(angular.isUndefined($scope.nodrange)){ + $scope.nodrange = false; + } + + if(ToolService.isDemoUser()){ + $scope.nodrange = true; + } + + if(angular.isUndefined($scope.noToday)){ + $scope.noToday = true; + } + else{ + $scope.noToday = $scope.noToday!='false' && $scope.noToday!=false; + } + + if(angular.isUndefined($scope.datekey)){ + $scope.datekey = "curdate"; + } + + + var today = ToolService.getToday(),yesDay = ToolService.getYesDay(); + $scope.changeDate = function(flag){ + switch (flag){ + case 'today': + $scope.subfix = "hour"; + $scope.mydate = today; + break; + case 'yesday': + $scope.subfix = "hour"; + $scope.mydate = yesDay; + break; + case 'd7': + $scope.subfix = "ds"; + $scope.mydate = ToolService.getLastDays(-7,0); + break; + case 'd14': + $scope.subfix = "ds"; + $scope.mydate = ToolService.getLastDays(-14,0); + break; + case 'd30': + $scope.subfix = "ds"; + $scope.mydate = ToolService.getLastDays(-30,0); + break; + default: + break; + } + $scope.timeflag = flag; + } + + $scope.maxDay = 0; + if($scope.noToday==true){ + $scope.changeDate('yesday'); + $scope.maxDay = -1; + }else{ + $scope.changeDate('today'); + } + $scope.myrangeday = $scope.maxRange; + + $scope.$on("dateCustos",function(e,msg){ + if(msg.startDate == msg.endDate && msg.startDate == today.startDate){ + $scope.timeflag = "today"; + $scope.subfix = "hour"; + } + else if(msg.startDate == msg.endDate && msg.startDate == yesDay.startDate){ + $scope.timeflag = "yesday"; + $scope.subfix = "hour"; + } + else{ + $scope.timeflag = msg.dateflag; + $scope.subfix = "ds"; + } + $scope.mydate = msg; + }); + + $scope.$watch("mydate",function(n){ + if(angular.isDefined(n)){ + $scope.datestr = $scope.mydate.startDate + "至" + $scope.mydate.endDate; + + $scope.$emit($scope.datekey,{date:$scope.mydate,subfix:$scope.subfix,timeflag:$scope.timeflag}) + } + },true); + } + } + } + + //输入框只能输入数字和小数点 + function numberTxt(){ + return { + restrict: "A", + link: function($scope, el) { + el.bind("keydown",function(event){ + event = window.event || event; + if((event.keyCode>=48 && event.keyCode<=57) || (event.keyCode>=96 && event.keyCode<=105) || event.keyCode==8 || event.keyCode==190){ + + }else{ + event.preventDefault(); + } + }) + .bind("input propertychange",function(){ + // var v = $(el).val().replace(/[^\x00-\x80A-Za-z]/gi,""); + // $(el).val(v); + }); + } + } + } + //输入框只能输入数字 + function integerTxt(){ + return { + restrict: "A", + link: function($scope, el) { + el.bind("keydown",function(event){ + event = window.event || event; + if((event.keyCode>=48 && event.keyCode<=57) || (event.keyCode>=96 && event.keyCode<=105) || event.keyCode==8){ + + }else{ + event.preventDefault(); + } + }) + .bind("input propertychange",function(){ + var v = $(el).val().replace(/\D/g,""); + $(el).val(v); + }); + } + } + } + + function helpTip(ToolService,$rootScope){ + return { + restrict: "E", + replace:true, + scope:{ + name:"@", + dname:"=", + dn2:"=", + hidx:"@", + red:"=" + }, + templateUrl : '/template/common/helptip.html?r='+tempVersion, + link: function($scope, el) { + $scope.showtip=false; + var hidx = $scope.hidx ? $scope.hidx : 2; + $scope.spanStyle = {"z-index":hidx}; + + var now = $(el).find(".helpTipWrap"),zIdx = Number($(el).parent().css("z-index")); + now.hide(); + $scope.showTip = function(){ + zIdx = Number($(el).parent().css("z-index")); + if(angular.isNumber(zIdx)){ + $(el).parent().css("z-index",zIdx+1); + } + $(".helpTipWrap").not(now).parent().parent().css("z-index",zIdx); + $(".helpTipWrap").not(now).hide().animate({opacity:0}); + now.show().animate({opacity:1},100,'linear'); + } + angular.element(document).on("click",function(){ + if(angular.isNumber(zIdx)){ + now.parent().parent().css("z-index",zIdx); + } + now.animate({opacity:0}).hide(); + }); + + $scope.$watch('name+dname+dn2',function(n){ + var name = $scope.name ? $scope.name : $scope.dname; + if(angular.isDefined($scope.dn2)){ + name += $scope.dn2; + } + + if(angular.isDefined(name)){ + $scope.tipname = name; + $scope.tipcontent = ToolService.getMenuTip($scope.tipname); + } + }); + + $rootScope.$watch("currentPageTips",function(){ + $scope.tipcontent = ToolService.getMenuTip($scope.tipname); + }); + } + } + } + + function helpWinTip(ToolService,$rootScope,$filter){ + return { + restrict: "E", + scope:{ + name:"@", + dname:"=", + zIndex:"=", + titlev:"@", + helpw:"@" + }, + replace:true, + template : '<span ng-click="showTip()" title="{{titlev}}" stop-event></span>', + link: function($scope, el) { + angular.element(document).on("click",function(){ + $("#winTC").hide(); + }); + $scope.showTip = function(){ + var name = $scope.name ? $scope.name : $scope.dname; + + var offset = $(el).offset(), + left = offset.left, + top = offset.top + h = $(el).innerHeight(), + w = $(el).innerWidth(), + winWidth = $(window).width(); + + top = Math.ceil(top + h); + + var cssStyle = {top:top,'display':'block',opacity:1},winObj = $("#winTC"); + if($scope.zIndex){ + winObj.css("z-index",$scope.zIndex); + } + if($scope.helpw){ + winObj.css("width",$scope.helpw+"px"); + } + else{ + winObj.css("width","200px"); + } + if($(el).hasClass("rightTip")){ + winObj.addClass("rightPosition"); + left = Math.ceil(left - winObj.innerWidth() + w); + } + else{ + winObj.removeClass("rightPosition"); + } + if(winWidth-left<200){ + winObj.addClass("rightPosition"); + left = Math.ceil(left - winObj.innerWidth() + w); + } + cssStyle.left = left; + winObj.html(ToolService.getMenuTip(name)).css(cssStyle); + } + } + } + } + + /*固定首行or首列*/ + function fixHeader($timeout) { + return { + restrict: "A", + scope:{ + titleName:"=", //动态表头列表 + fixFirtd:"@", //固定首列 + fixList:"=" //列表数据 + }, + link: function($scope, el) { + + var obj = $(el),p = obj.parent(),fixTd = 0,firTds = null,zidx = 1; + //固定首列 + if(angular.isDefined($scope.fixFirtd)){ + fixTd = Number($scope.fixFirtd); + zidx = 2; + } + //固定首行 + $scope.$watch("titleName",function(){ + $timeout(function() { + obj.find("thead th").css({"position":"relative","z-index":zidx}); + p.scroll(function(){ + var t = $(this).scrollTop(); + if(t>5){t--;} + obj.find("thead th").css({"top":t+"px"}); + }); + + }); + }); + + //固定首列 + if(fixTd>0){ + $scope.$watch("fixList",function(){ + $timeout(function() { + firTds = obj.find("tr td:nth-child("+fixTd+")"); + firTds.css({"position":"relative","z-index":1}); + p.scroll(function(){ + var l = $(this).scrollLeft(); + if(l > 5){l-=2;} + firTds.css({"left":l+"px"}); + }); + }); + }); + } + } + } + }; + + //看单事件 + function customEvent(UtilService,ToolService,$timeout,HttpService,$rootScope){ + return { + restrict: "E", + replace:true, + templateUrl : '/template/common/custom.html?r='+tempVersion, + scope:{ + type:"=", //报表类型,1事件分析,2留存分析,3漏斗分析 + eventList:"=",//事件列表 + oldInfo:"="//初始化事件详情 + }, + link: function($scope, el) { + var rmd = new Date().getTime(); + $scope.$watch("oldInfo",function(e){ + if(angular.isDefined($scope.oldInfo)){ + if($scope.type == 'eventstats'){ + $scope.changeEvent(null,$scope.oldInfo); + } + else{ + $scope.eventInfo = [],evts = [],evtvals = []; + + $scope.oldInfo.filter(function(item){ + var temp = {event:item.event,param:[]}; + var pppm = UtilService.cloneJSON(item.params); + pppm.filter(function(pm){ + temp.param.push(pm.attr); + }); + evts.push(item.event); + evtvals.push(temp); + }); + ToolService.showLoading(); + var evtprofilePM = HttpService.getInfo($rootScope.appid+"/event/find/param?names="+evts.join(",")+"¶ms="+JSON.stringify(evtvals)); + evtprofilePM.then(function(pros){ + pros.filter(function(evt){ + for(var i=0;i<$scope.eventList.length;i++){ + if(evt.eventName == $scope.eventList[i].eventName){ + $scope.eventList[i].profiles = evt.profiles; + break; + } + } + }); + $scope.oldInfo.filter(function(e){ + e.oldparams = UtilService.cloneJSON(e.params); + delete e.params; + $scope.addEvent(e); + }); + ToolService.hideLoading(); + }); + } + } + }); + + $scope.$on("eventId",function(e,msg){ + $scope.changeEvent(msg.info); + }); + $scope.initEvent = function(){ + $scope.eventinitname = "全部事件"; + $scope.eventInit = 0 - rmd; + + $scope.event = {}; + $scope.propertyList = []; + $scope.sumtypeList = []; + } + $scope.changeEvent = function(event,obj){ + + if(obj){ //编辑查找 + $scope.initEvent(); + $scope.eventinitname = obj.event; + $scope.properinitname = obj.viewField; + + var nowEvents = $scope.eventList.filter(function(item){ + return item.eventName == obj.event; + }); + if(nowEvents.length>0){ + event = nowEvents[0]; + $scope.eventinitname = event.eventNameAlias; + $scope.evnullevent = false; + } + else{ + $scope.evnullevent = true; + } + } + $scope.event = { + id:"evt_"+rmd, + params:[], + paramsList:[], + relation:"and" + } + + if(!UtilService.isNullStr(event)){ + $scope.eventId = event.eventName; + $scope.eventstatsEvtName = event.eventNameAlias; + + var setattr = function(){ + $scope.propertyList = event.firstLevelAttr; + $scope.sumtypeList = event.secondLevelAttr; + $scope.event.paramsList = event.profiles; + } + if(event.secondLevelAttr){ + setattr(); + } + else{ + var evtvals = [],temp = {event:$scope.eventId,param:[]}; + if(obj){ + obj.params.filter(function(pitem){ + temp.param.push(pitem.attr); + }); + evtvals.push(temp); + } + + ToolService.showLoading(); + var evtprofilePM = HttpService.getInfo($rootScope.appid+"/event/find/param?names="+$scope.eventId+"¶ms="+JSON.stringify(evtvals)); + evtprofilePM.then(function(pros){ + pros.filter(function(evt){ + for(var i=0;i<$scope.eventList.length;i++){ + if(evt.eventName == $scope.eventList[i].eventName){ + $scope.eventList[i].profiles = evt.profiles; + $scope.eventList[i].firstLevelAttr = evt.firstLevelAttr; + $scope.eventList[i].secondLevelAttr = evt.secondLevelAttr; + break; + } + } + }); + setattr(); + ToolService.hideLoading(); + }); + } + } + + if(obj){ + $scope.event.relation = obj.relation; + $timeout(function(){ + $scope.propertyInit = obj.viewField; + $scope.prorefresh = ++rmd; + + $scope.event.secondval = obj.fieldOperate; + if(obj.fieldOperate!=''){ + $scope.event.second = true; + $scope.suminitname = obj.fieldOperate; + } + obj.params.filter(function(pitem){ + pitem.attrMatch = false; + $scope.addEventParams($scope.event,pitem); + }); + }); + } + else{ + $scope.propertyInit = $scope.propertyList[0].attr; + $scope.prorefresh = ++rmd; + } + } + //属性 + $scope.$on("propertyId",function(e,msg){ + $scope.event.proId = msg.info.attr; + $scope.event.sumId = ""; + if(msg.info.type!='default'){ + $scope.event.second = true; + if($scope.event.secondval){ + $scope.sumtypeInit = $scope.event.secondval; + delete $scope.event.secondval; + } + else{ + $scope.sumtypeInit = $scope.sumtypeList[0].attr; + } + } + else{ + $scope.sumtypeInit = ""; + $scope.event.second = false; + } + }); + //属性聚合形式 + $scope.$on("sumtypeId",function(e,msg){ + $scope.event.sumId = msg.info.attr; + }); + + $scope.getEventNum = function(){ + if(!$scope.eventInfo){return 20;} + + var es = $scope.eventInfo.filter(function(item){ + return item.show!=false; + }); + return es.length; + } + $scope.setEventSteps = function(){ + if(!$scope.eventInfo){return 20;} + + var idx = -1; + var len = $scope.eventInfo.length; + $scope.eventInfo.filter(function(item,i){ + if(item.show!=false){ + idx ++; + item.steps = ['一','二','三','四','五','六','七','八','九','十'][idx]; + item.style = {'z-index':len-i}; + } + }); + } + $scope.addEvent = function(obj){ + + rmd ++; + var temp = {id:"evt_"+rmd,eventid:"event_"+rmd,relation:"and"}; + + if(obj){ + for(var k in obj){ + temp[k] = obj[k]; + } + temp.eventinit = obj.event; + temp.eventinitname = obj.event; + temp.params = []; + + var evts = $scope.eventList.filter(function(item){ + return item.eventName == obj.event; + }); + if(evts.length == 0){ + temp.nullevent = true; + if(temp.oldparams){ + temp.oldparams.filter(function(pm){ + $scope.addEventParams(temp,pm); + }); + delete temp.oldparams; + } + } + } + (function(temp){ + $scope.$on(temp.eventid,function(e,msg){ + temp.params = []; + temp.event = msg.info.eventName; + temp.evtname = msg.info.eventNameAlias; + temp.nullevent = false; + + var setparams = function(){ + temp.paramsList = msg.info.profiles; + if(temp.oldparams){ + temp.oldparams.filter(function(item){ + $scope.addEventParams(temp,item); + }); + delete temp.oldparams; + } + } + if(angular.isArray(msg.info.profiles)){ + setparams(msg.info.profiles); + } + else{ + var proPM = HttpService.getInfo($rootScope.appid+"/event/find/param?names="+temp.event); + proPM.then(function(data){ + msg.info.profiles = data[0].profiles; + setparams(); + }); + } + + }); + })(temp); + + $scope.eventInfo.push(temp); + $scope.setEventSteps(); + } + $scope.removeEvent = function(event){ + if($scope.getEventNum()<=2 && $scope.type == 'funnel'){ + ToolService.showTips("漏斗步骤不能少于2步"); + return false; + } + + for(var i=0;i<$scope.eventInfo.length;i++){ + if($scope.eventInfo[i].id == event.id){ + $scope.eventInfo[i].show = false; + break; + } + } + $scope.setEventSteps(); + } + $scope.changeRel = function(event){ + event.relation = event.relation == 'and' ? "or" : 'and'; + } + $scope.getEventParamsNum = function(event){ + if(!event.params){return 5;} + + var eps = event.params.filter(function(item){ + return item.show!=false; + }); + return eps.length; + } + $scope.addEventParams = function(event,obj){ + if(!event.params || $scope.getEventParamsNum(event)>=3){return false;}; + rmd ++; + var tempparam = {id:"pam_"+rmd,pid:event.id}; + if(obj){ + for(var k in obj){ + tempparam[k] = obj[k]; + } + } + event.params.push(tempparam); + } + $scope.removeEventParams = function(event,param){ + for(var i=0;i<event.params.length;i++){ + if(event.params[i].id == param.id){ + event.params[i].show = false; + break; + } + } + } + $scope.$on("event",function(e,msg){ + if($scope.type == 'eventstats'){ + var params = $scope.event.params; + for(var j=0;j<params.length;j++){ + if(params[j].id == msg.id){ + params[j] = msg; + break; + } + } + } + else{ + for(var i=0;i<$scope.eventInfo.length;i++){ + if($scope.eventInfo[i].id == msg.pid){ + var params = $scope.eventInfo[i].params; + for(var j=0;j<params.length;j++){ + if(params[j].id == msg.id){ + params[j] = msg; + break; + } + } + } + } + } + }); + + $scope.okSave = function(){ + var hasNull = false; + var eventInfo = [],myEvents = []; + + $scope.eventInfo.filter(function(item){ + if(item.show!=false){ + var temp = {event:item.event,relation:item.relation,params:[],eventMatch:true}; + if(UtilService.isNullStr(item.event) || item.nullevent == true){ + item.nullevent = true; + hasNull = true; + } + else{ + item.nullevent = false; + item.params.filter(function(pm){ + if(pm.show!=false){ + var pms = {}; + for(var k in pm){ + if(k!='id' && k!='pid'){ + if(k!='value'){ + pms[k] = pm[k]; + }else{ + pms[k] = pm[k].join(","); + } + if(UtilService.isNullStr(pm[k])){ + $scope.$broadcast(pm.id, "null"); + hasNull = true; + } + } + } + temp.params.push(pms); + } + }); + } + eventInfo.push(temp); + myEvents.push(item.evtname); + } + }); + if(!hasNull && eventInfo.length>0){ + $scope.$emit("matchok",{info:eventInfo,names:myEvents}); + } + else{ + ToolService.showTips("信息没填全或数据有误,请检查"); + } + } + + $scope.eventSave = function(){ + if(!$scope.event.params){return false;} + var hasNull = false; + var eventInfo = {event:$scope.eventId,relation:$scope.event.relation,params:[]}; + eventInfo.viewField = $scope.event.proId; + if($scope.event.second){ //有二级选项 + eventInfo.fieldOperate = $scope.event.sumId; + } + else{ + eventInfo.fieldOperate = ""; + } + $scope.event.params.filter(function(pm){ + if(pm.show!=false){ + if(UtilService.isNullStr(pm.attr)){ + $scope.$broadcast(pm.id, "error"); + hasNull = true; + } + var pms = {}; + for(var k in pm){ + if(k!='id' && k!='pid'){ + if(k!='value'){ + pms[k] = pm[k]; + }else{ + pms[k] = pm[k].join(","); + } + if(UtilService.isNullStr(pm[k])){ + $scope.$broadcast(pm.id, "error"); + hasNull = true; + } + } + } + eventInfo.params.push(pms); + } + }); + if(hasNull || !$scope.eventId){ + ToolService.showTips("信息没填全或数据有误,请检查"); + } + else{ + $scope.$emit("matchok",{info:eventInfo,names:[$scope.eventstatsEvtName]}); + } + } + } + } + } + + //文件上传 + function fileModel($parse){ + return { + restrict: 'A', + scope:{ + + }, + link: function(scope, element, attrs) { + var model = $parse(attrs.fileModel); + var modelSetter = model.assign; + + element.bind('change', function(){ + var val = angular.element(element).val(); + if(val == ''){return false;} + + scope.$apply(function(){ + var myFile = element[0].files; + if (attrs.multiple) { + modelSetter(scope, element[0].files); + } + else { + modelSetter(scope, element[0].files[0]); + myFile = element[0].files[0]; + } + scope.$emit("myFile",myFile); + angular.element(element).val(""); + }); + }); + } + }; + } + + //文件上传 + function searchGroup(){ + return { + restrict: 'E', + replace:true, + scope:{ + filterfn:"&", + initTxt:"=", + initf5:"=", + list:"=" + }, + templateUrl : '/template/common/searchGroup.html?r='+tempVersion, + link: function($scope, element, attrs) { + + $scope.query = function(){ + if($scope.preTxt == $scope.srhTxt){ + return false; + } + $scope.filterfn({txt:$scope.srhTxt}); + $scope.preTxt = $scope.srhTxt; + } + $scope.$watch("initTxt+initf5+list",function(){ + $scope.srhTxt = $scope.preTxt = $scope.initTxt || ""; + }); + + $scope.doNull = function(){ + $scope.srhTxt = ""; + $scope.query(); + } + } + }; + } + //固定表格 + function bigTable($timeout,$compile){ + return { + restrict: 'A', + replace:true, + scope:{ + fixedCol:"@", //固定列数 + fixChange:"=", //列表变化,翻页排序等,只需要更新滑动条即可 + infoList:"=", //列表数据 + initf5:"=", //初始化列表,一般是数据列表重新查询 + noScroll:"@", + noAllScroll:"@", + noEmpty:"=" + }, + link: function($scope, element) { + var tableSpline = $(element).find(".tableSpline"), + tableHeader = $(element).find(".tableHeader"), + tableInfo = $(element).find(".tableInfo"); + var copyColWrap = $(element).find(".copyColWrap"),copyTable = copyColWrap.find("table"); + + var totalLeft = 0, infoh = 0, isEmpty = false, before = 0, after = 0,preLeft = 0; + var helpTip = $(".helpTipWrap"); + if(tableSpline.length==0){ + $(element).append("<div class='tableSpline'></div>"); + tableSpline = $(element).find(".tableSpline"); + } + if(copyColWrap.length==0){ + $(element).prepend("<div class='copyColWrap'><table></table></div>"); + copyColWrap = $(element).find(".copyColWrap"); + copyTable = copyColWrap.find("table"); + if($scope.noAllScroll){ + copyColWrap.css({"max-height":"233px","top":"35px"}); + } + } + var init = function(){ + totalLeft = 1; //1像素边框 + tableHeader.scrollLeft(0); + tableInfo.scrollLeft(0); + tableInfo.scrollTop(0); + infoh = tableInfo.find("table").height(); + for(var i = 0; i < $scope.fixedCol; i++){ + totalLeft += tableHeader.find("#title_"+i).parent().width(); + } + tableSpline.css({"left":totalLeft}); + $(element).find(".tableHeader th:lt("+$scope.fixedCol+")").css("left","0px"); + preLeft = 0; + } + var updateBar = function(){ + var info = tableInfo.find("table"), + header = tableHeader.find("table"); + + if($scope.noEmpty){ + isEmpty = false; + }else{ + isEmpty = $scope.infoList && $scope.infoList.length==0; + } + + var headerw = header.css("width"), + headerh = header.css("height"), + tableH = info.find("tbody").height(),headH = header.height(); + + var trlast = tableInfo.find("table tr:last"); + if(isEmpty){ + if(trlast.length==0){ + info.append("<tr></tr>") + } + info.width(headerw); + info.height(infoh==0?headerh:infoh); + tableSpline.height(headerh); + } + else{ + tableInfo.find("table").width(''); + tableInfo.find("table").height(''); + + var tsh = headH+tableH,maxh = $(element).height(); + tableSpline.height(tsh > maxh ? maxh : tsh); + + if(!trlast.html()) trlast.remove(); + } + + tableInfo.perfectScrollbar("update"); + tableInfo.scrollLeft(preLeft); //此行代码是为了兼容火狐浏览器 + tableInfo.scrollTop(0); + } + var updateFixTds = function(){ + copyTable.html(""); + if(!isEmpty){ + tableInfo.find("tr").each(function(i){ + copyTable.append("<tr></tr>"); + + var lastTr = copyTable.find("tr:last-child"); + for(var c=0;c<$scope.fixedCol;c++){ + lastTr.append($(this).children("td:eq("+c+")").clone(true)); + //首列带有click下钻特殊处理 + if(c==0){ + //这里单独指compile列里面的div,是因为列上很多时候有ng-repeat + var Tds = lastTr.find("td"); + Tds.each(function(){ + var hm = $(this).find("div").html(); + $(this).html( + $compile($(this).clone(true))($scope.$parent) + ); + $(this).find("div").html(hm); + } + ); + } + } + }); + } + } + $scope.$watch("initf5",function(n){ + if(angular.isDefined(n)){ + tableSpline.hide(); + copyTable.html(""); + var timer = $timeout(function() { + init(); + },50); + timer.then(function(){ + $timeout.cancel(timer); + }); + } + }); + $scope.$watch("fixChange",function(n){ + if(angular.isDefined(n) && $scope.infoList){ + copyTable.html(""); + var timer = $timeout(function() { + updateBar(); + updateFixTds(); + },100); + timer.then(function(){ + $timeout.cancel(timer); + }); + } + }); + + $scope.$on("conentresize",function(){ + tableInfo.perfectScrollbar("update"); + tableInfo.scrollLeft(0); + tableInfo.scrollTop(0); + tableSpline.hide(); + }); + + var before = 0; + tableInfo.scroll(function(e){ + helpTip.hide(); + + var target = e.target,left = target.scrollLeft; + preLeft = left; + tableHeader.scrollLeft(left); + + var cellCss = { + "position":"relative", + "left":left, + "-webkit-overflow-scroll":"touch" + }; + + $(element).find(".tableHeader th:lt("+$scope.fixedCol+")").each(function(i){ + $(this).css(cellCss); + }); + + if(left>0){ + tableSpline.show(); + } + else{ + tableSpline.hide().css('-webkit-overflow-scroll','auto'); + } + after = $(this).scrollTop(); + copyColWrap.scrollTop(after); + if($scope.noAllScroll){return;} + if(before>after){ + if(after < 200 && !$scope.noScroll) + $(".rightWrap").scrollTop(after); + } + else{ + if(!$scope.noScroll){ + if(after >= tableInfo.find("table").height()-tableInfo.height() && this.scrollTop>0) + $(".rightWrap").scrollTop(this.scrollHeight); + }else{ + $(".rightWrap").scrollTop($(".rightWrap").scrollTop()+this.scrollHeight); + } + } + before = after; + }); + + $(".rightWrap").scroll(function() { + helpTip.hide(); + }); + tableInfo.perfectScrollbar(); + } + }; + } + + //拖拽排序 + var sourceId = 0; + function dragOrder($parse){ + return { + restrict: 'A', + scope:{ + dragId:"=", + dragflag:'@' + }, + link: function($scope, element, attrs) { + element.attr("draggable",true); + + angular.element(element).on("dragstart",function(event){ + sourceId = $scope.dragId; + }); + angular.element(element).on("dragover",function(event){ + event.preventDefault(); + }); + angular.element(element).on("drop",function(event){ + var replaceDom = $(this),info = JSON.parse(replaceDom.attr("drag-info")); + event.preventDefault(); + if(sourceId != info.id){ + $scope.$emit("dragorder",{id:sourceId,index:info.orderindex,flag:$scope.dragflag}); + } + }); + } + }; + } +})(); diff --git a/src/main/websrc/js/app/filter.js b/src/main/websrc/js/app/filter.js new file mode 100644 index 0000000..f0684c9 --- /dev/null +++ b/src/main/websrc/js/app/filter.js @@ -0,0 +1,109 @@ +(function(){ + var tempVersion = new Date().getTime(); + + angular.module("app") + .filter("charfilter",charfilter) + .filter("filterList",filterList) + .filter("filterPay",filterPay) + .filter("numFixed",["UtilService",numFixed]) + .filter("filterHtml",["$sce",filterHtml]) + .filter("formatRate",["UtilService",formatRate]); + + //渠道首字母过滤 + function charfilter(){ + return function(input, param) { + if(param == ""){ + return input; + }else{ + var output = []; + angular.forEach(input, function(v,k){ + if (param.indexOf(v.firstchar)>-1) { + output.push(v); + } + }); + return output; + } + }; + } + + //列表多个属性过滤 + function filterList(){ + return function(input,v, param) { + if(!v || v == ""){ + return input; + }else{ + var paramkeys = param.split(","); + return input.filter(function(item){ + var has = false; + for(var i = paramkeys.length-1;i>=0;i--){ + if(item[paramkeys[i]] && angular.uppercase(String(item[paramkeys[i]])).indexOf(angular.uppercase(v))>-1){ + has = true; + break; + } + } + return has; + }); + } + }; + } + + function filterPay(){ + return function(input){ + if(input < 10000){ + return input; + } + else{ + return (input/10000).toFixed(1) +"w"; + } + } + } + function filterHtml($sce){ + return function (text) { + if(text == null){ + return ""; + }else{ + return $sce.trustAsHtml(text); + } + }; + } + + function numFixed(UtilService){ + return function(num,params){ + if(num == null || num =='null'){return 0;} + params = params ? params : 2; + if(isNaN(Number(num))){ + return num; + }else{ + return UtilService.decimal2(Number(num),params); + } + } + } + + function formatRate(UtilService){ + return function(num,rate,formatjson,rate1){ + if(num == null || num =='null' || !rate || !formatjson){return num;} + if(isNaN(Number(num))){ + if(num.indexOf("_")==0){num = num.substring(1);} + return num; + } + if(rate1){rate = rate1;} + + var format = formatjson[rate]; + if(!format){format = 'float';} + + if(format == 'percent'){ + return UtilService.decimal2(Number(num)*100,2) + "%"; + } + else if(format == 'float'){ + return UtilService.decimal2(Number(num),2); + } + else if(format == 'int'){ + return Math.round(Number(num)); + } + else{ + return num; + } + } + + } +})(); \ No newline at end of file diff --git a/src/main/websrc/js/collect/custommenu.js b/src/main/websrc/js/collect/custommenu.js new file mode 100644 index 0000000..47d8fec --- /dev/null +++ b/src/main/websrc/js/collect/custommenu.js @@ -0,0 +1,1370 @@ +(function(){ + angular.module("app.collect") + .controller("custommenuCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$timeout","$stateParams","$state","$filter","$location",custommenuCtrl]); + + function custommenuCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$timeout,$stateParams,$state,$filter,$location){ + $scope.pageId = $stateParams.pageid; + $scope.viewFlag = 1; //1看单,2收藏,3行业看单 + if($scope.pageId!=null){ + $scope.viewFlag = 0; + } + $scope.menuInit = $scope.pageId; + var isinit = true; + if($scope.pageId){ + isinit = false; + } + + var rmd = new Date().getTime(); + $scope.$on("industryId",function(e,msg){ + if(msg.info.id == 'all'){ + $scope.industryInitName = ''; + $scope.industryInit = 'all'; + }else{ + $scope.industryInitName = msg.info.name; + $scope.industryInit = msg.info.id; + } + }); + $scope.$on("menuId",function(e,msg){ + $scope.menuDetail(msg.info); + }); + $scope.timeFlag='day'; + $scope.disTimeFlag = ['hour']; + $scope.changeTimeFlag = function(flag){ + if($scope.disTimeFlag.indexOf(flag)>-1){return false;} + + $scope.timeFlag = flag; + } + $scope.changeViewFlag = function(flag){ + if($scope.viewFlag == flag){return false;} + + $rootScope.thirdtab = ['','我的看单','我的收藏','行业看单模板'][flag]; + + $scope.viewFlag = flag; + $scope.lookMyMenu(); + } + $scope.pageFlag = 0; //1还没有看单,2看单设置完毕,3进入我的看单,4看单详情 + $scope.addReyunMenu = function(){ + var savePM = HttpService.postInfo("custommenu/addReyun/"+$scope.appid); + ToolService.showLoading(); + savePM.then(function(data){ + ToolService.hideLoading(); + if(data.length>0){ + $scope.pageFlag = 2; + $scope.reyunList = data; + $scope.$emit("f5CtmMenus",{}); + } + else{ + if(data.code == -6002){ + ToolService.showTips("请集成sdk并上报数据"); + } + else{ + ToolService.showTips("操作失败"); + } + } + }); + + } + + $scope.date = ToolService.getLastDays(-7,0); + $scope.$on("dateCustos",function(e,msg){ + if(msg.startDate == msg.endDate){ + $scope.disTimeFlag = ["week","month"]; + } + else{ + $scope.disTimeFlag = ["hour"]; + + } + if($scope.disTimeFlag.indexOf($scope.timeFlag)>-1){ + $scope.timeFlag = 'day'; + } + $scope.date = msg; + }); + $scope.$watch("date",function(){ + if(angular.isDefined($scope.date)){ + $scope.datestr = $scope.date.startDate + "至" + $scope.date.endDate; + } + }); + + var eventPM = null; + // $scope.menuInitName = "看单名称"; + //查看我的看单 + $scope.lookMyMenu = function(flag){ + if(flag && flag == 2){ //加入看单后-查看我的看单 + $scope.viewFlag = 1; + } + $scope.closeWin(); + ToolService.showLoading(); + var url = ""; + $scope.searchTxt = ""; + $scope.orderFlag = 0; + $scope.industryList = []; + if($scope.industryList.length==0){ + var industryPM = HttpService.getInfo("custommenu/industry"); + industryPM.then(function(data){ + data.filter(function(item){ + var obj = {}; + obj.id = item.category; + obj.name = item.categoryName; + $scope.industryList.push(obj); + }); + $scope.industryList.unshift({id:"all",name:"全部行业"}); + $scope.industryInit = $scope.appInstance.appGenre==43 || $scope.appInstance.appGenre==64?$scope.appInstance.appGenre:'all'; + $scope.industryInitName = $scope.appInstance.appGenreName==43 || $scope.appInstance.appGenreName==64 + ?$scope.appInstance.appGenreName:"全部行业"; + }); + } + switch ($scope.viewFlag) { + case 2: + url = "custommenu/findFavo/"+$scope.appid; + break; + case 3: + url = "custommenu/findShare/"+$scope.appid; + break; + case 1:default: + url = "custommenu/findMy/"+$scope.appid; + break; + } + $scope.menuInfoList = []; + var menuPM = HttpService.getInfo(url); + menuPM.then(function(data){ + $scope.menuInfoList = data; + if($scope.pageId!=null){ + var ms = $scope.menuInfoList.filter(function(item){ + return item.id == $scope.pageId; + }); + if(ms.length>0){ + $scope.menuDetail(ms[0]); + } + $scope.viewFlag = 1; + } + else{ + //子账户进来 + // if(!$rootScope.isSuper && data.length>0){ + // $scope.menuDetail(data[0]); + // } + } + if((flag && flag == 1)){ + $scope.menuDetail(data.slice(-1)[0]); + } + ToolService.hideLoading(); + }); + if(eventPM == null){ + $scope.queryInfoByApp(); + } + $scope.pageFlag = 3; + } + + $scope.menuDetail = function(menu){ + $scope.pageFlag = 4; + $scope.currentMenu = menu; + $scope.changeMatchFlag(0); + if($scope.viewFlag == 1){ + // $rootScope.custID = menu.id; + $rootScope.thirdtab = menu.name; + + } + if($scope.menuInit == menu.id){ + $scope.query(); + }else{ + $scope.menuInit = menu.id; + } + } + $scope.orderFlag = 0; + $scope.menuOrder = function(flag){ + $scope.orderFlag = flag; + switch (flag) { + case 2: + $scope.menuInfoList.sort(function(x,y){ + return x.matchPercent == y.matchPercent ? 0 : (x.matchPercent > y.matchPercent ? -1 : 1); + }); + break; + case 3: + $scope.menuInfoList.sort(function(x,y){ + return x.useNumber == y.useNumber ? 0 : (x.useNumber > y.useNumber ? -1 : 1); + }); + break; + case 4: + $scope.menuInfoList.sort(function(x,y){ + return x.favoriteNumber == y.favoriteNumber ? 0 : (x.favoriteNumber > y.favoriteNumber ? -1 : 1); + }); + break; + case 1:default: + $scope.menuInfoList.sort(function(x,y){ + return x.id == y.id ? 0 : (x.id > y.id ? -1 : 1); + }); + break; + } + } + $scope.backToMenu = function(){ + if($scope.viewFlag == 2 && !$scope.currentMenu.hasFavorite){ + for(var i=0;i<$scope.menuInfoList.length;i++){ + var item = $scope.menuInfoList[i]; + if(item.id == $scope.currentMenu.id){ + $scope.menuInfoList.splice(i,1); + break; + } + } + } + if($scope.viewFlag==1){ + $location.path("/collect/custommenu"); + } + $scope.pageFlag = 3; + } + $scope.typeInitname = "请选择"; + $scope.$on("typeId",function(e,msg){ + $scope.customTypeId = msg.info.id; + }); + $scope.customTypeFlag = 0;//1事件,2留存,3漏斗 + $scope.changeCustomFlag = function(flag){ + if($scope.customTypeFlag == flag){return false;} + + $scope.customTypeFlag = flag; + switch (flag) { + case 2: + $scope.typeList = $scope.retentionList; + break; + case 3: + $scope.typeList = $scope.funnelList; + break; + case 1:default: + $scope.typeList = $scope.eventstatsList; + break; + } + if($scope.typeList.length>0){ + var initid = $scope.typeList[0].id; + if($scope.typeinit == initid){ + $scope.typef5 = ++rmd; + } + else { + $scope.typeinit = initid; + } + } + else{ + $scope.customTypeId = $scope.typeinit = -1; + } + } + //查看埋点及规则 + $scope.showDetail = function(temp){ + ToolService.showAlp(); + $scope.detailInfo = JSON.parse(temp.info.descb); + $scope.custitle = temp.info.name+(temp.info.menuType=='funnel'?"漏斗":temp.info.menuType=='retention'?"留存":""); + $scope.isdetail = true; + angular.element(document).on("click",function(){ + $scope.$apply(function(){ + $scope.hideDetail(); + }); + }); + } + $scope.hideDetail = function(){ + ToolService.hideAlp(); + $scope.isdetail = false; + + } + $scope.maxMenu = 10;//最大看单数 + $scope.maxReport = 16;//最大报表数 + $scope.winFlag = 0; //1添加看单,2修改看单,3删除看单 ,4分享看单 5加入我的看单 6添加报表 7删除报表 + var oldename = ""; + $scope.showWin = function(flag,obj){ + if(flag == 1 && $scope.menuInfoList && $scope.menuInfoList.length>=$scope.maxMenu){ + return false; + } + if(flag == 6 && $scope.currentMenu && $scope.currentMenu.templates && $scope.currentMenu.templates.length>=$scope.maxReport){ + ToolService.showTips("每个看单最多支持"+$scope.maxReport+"个图表"); + return false; + } + + var show = true; + switch (flag) { + case 1: + $scope.ename = oldename = ""; + break; + case 2: + $scope.ename = oldename = obj.name; + $scope.winId = obj.id; + break; + case 4: + $scope.shareMenu = obj; + if(!obj.templates || obj.templates.length<1){ + ToolService.showTips("请添加报表后再分享"); + show = false; + } + $scope.mname = obj.name; + $scope.winId = obj.id; + break; + case 3:case 7: + $scope.delname = obj.name; + $scope.winId = obj.id; + break; + case 6: + // $scope.changeCustomFlag(1); + if(obj){ + $scope.currentMenu = obj; + $scope.changeMatchFlag(0); + } + $scope.changeCustomFlag(1); + break; + default: + break; + } + if(show){ + ToolService.showAlp(); + $scope.winFlag = flag; + } + } + $scope.closeWin = function(flag){ + ToolService.hideAlp(); + $scope.winFlag = 0; + + if(flag == 1){ //加入看单返回到分享页 + $scope.matchFlag = 0; + } + } + $scope.getMaxTips = function(){ + if($scope.chartDatas && $scope.chartDatas.length>=$scope.maxReport){ + return "每个看单最多支持"+$scope.maxReport+"个图表"; + } + else{ + return ""; + } + } + $scope.doFavorite = function(){ + var favorPM = null,num=0,id = $scope.currentMenu.id; + if(!UtilService.isNullStr($scope.currentMenu.shareId)){ + id = $scope.currentMenu.shareId; + } + if($scope.currentMenu.hasFavorite==false){ + favorPM = HttpService.postInfo("custommenu/addFavorite/"+$scope.appid+"/"+id); + num = 1; + } + else{ + favorPM = HttpService.deleteInfo("custommenu/delFavorite/"+$scope.appid+"/"+id); + num = -1; + } + ToolService.showLoading(); + favorPM.then(function(data){ + ToolService.hideLoading(); + if(data==true){ + $scope.currentMenu.favoriteNumber += num; + $scope.currentMenu.hasFavorite = num > 0 ? true : false; + ToolService.showTips("操作成功"); + } + else{ + ToolService.showTips("操作失败"); + } + }); + } + $scope.doFavoriteByMenu = function(menu){ + var favorPM = HttpService.deleteInfo("custommenu/delFavorite/"+$scope.appid+"/"+menu.shareId); + ToolService.showLoading(); + favorPM.then(function(data){ + ToolService.hideLoading(); + if(data==true){ + $scope.menuInfoList.filter(function(item,index){ + if(item.id == menu.id){ + $scope.menuInfoList.splice(index,1); + } + }); + ToolService.showTips("操作成功"); + } + else{ + ToolService.showTips("操作失败"); + } + }); + } + $scope.doShare = function(menu){ + if(angular.isUndefined(menu)){ + ToolService.showLoading(); + var sharePM = HttpService.postInfo("custommenu/share/"+$scope.appid+"/"+$scope.winId); + sharePM.then(function(data){ + $scope.closeWin(); + ToolService.hideLoading(); + if(data==true){ + ToolService.showTips("分享成功"); + $scope.shareMenu.hasShare = true; + } + else{ + ToolService.showTips("分享失败"); + } + + }); + } + else{ + var sharePM = HttpService.deleteInfo("custommenu/cancelShare/"+$scope.appid+"/"+menu.id); + ToolService.showLoading(); + sharePM.then(function(data){ + ToolService.hideLoading(); + if(data==true){ + ToolService.showTips("取消成功"); + menu.hasShare = false; + } + else{ + ToolService.showTips("取消失败"); + } + }); + } + + } + $scope.saveMenu = function(){ + var verPar = { + name: { + min:1, + max:24, + key: 'spcname', + val: $scope.ename + } + }; + $scope.tip = formJudge(verPar); + if(UtilService.isNullStr($scope.ename) || $scope.tip.succ != true){ + ToolService.showTips("请输入12个汉字以内名称,允许字符为中英文数字_-"); + return false; + } + else{ + var savePM = null,txtTips = "添加成功",flag = 1; + if($scope.winFlag==2){//修改看单 + if(angular.lowercase(oldename) == angular.lowercase($scope.ename)){ + $scope.closeWin(); + return false; + } + savePM = HttpService.putInfo("custommenu/updateName/"+$scope.appid+"/"+$scope.winId+"?name="+$scope.ename,{}); + txtTips = "修改成功"; + flag = 0; + }else{ //添加看单 + savePM = HttpService.postInfo("custommenu/saveMenu/"+$scope.appid+"?name="+$scope.ename,{}); + } + ToolService.showLoading(); + savePM.then(function(data){ + ToolService.hideLoading(); + if(data.code == -6001){ + ToolService.showTips("名称已存在"); + } + else if(data.code == -300){ + ToolService.showTips("最多支持"+$scope.maxMenu+"个看单"); + } + else{ + $scope.closeWin(); + ToolService.showTips(txtTips); + $scope.lookMyMenu(flag); + $scope.$emit("f5CtmMenus",{}); + } + + },function(data){ + ToolService.hideLoading(); + if(data.code == -6001){ + ToolService.showTips("名称已存在"); + } + else{ + ToolService.showTips(data.message); + } + }); + } + } + //添加报表 + $scope.addReport = function(){ + if(!$scope.customTypeId || $scope.customTypeId<1){ + ToolService.showTips('请选择模板'); + return false; + } + var par = { + menuType:['eventstats','retention','funnel'][$scope.customTypeFlag-1], + originalReportId:$scope.customTypeId + } + var savePM = HttpService.postInfo("custommenu/addTemp/"+$scope.appid+"/"+$scope.currentMenu.id,par); + ToolService.showLoading(); + savePM.then(function(data){ + ToolService.hideLoading(); + if(data.code == -6000){ + ToolService.showTips("本看单中已存在该图表,请重新选择。"); + } + else if(data.code == -300){ + ToolService.showTips("每个看单最多支持"+$scope.maxReport+"个图表"); + } + else{ + if($scope.viewFlag == 1){ + $scope.pageFlag = 4; + $scope.goToCustom($scope.currentMenu.id); + } + $scope.closeWin(); + ToolService.showTips('添加成功'); + $scope.query(data); + $scope.currentMenu.templates.push(data); + } + + }); + } + $scope.getEventTypeCount = function(list){ + var evt = 0,ret = 0,fun = 0; + list.filter(function(item){ + if(item.menuType == 'eventstats'){ + evt ++; + } + else if(item.menuType == 'retention'){ + ret ++; + } + else if(item.menuType == 'funnel'){ + fun ++; + } + }); + return evt+"个事件细分,"+ret+"个留存,"+fun+"个漏斗"; + } + $scope.getShareName = function(currentMenu){ + if(currentMenu.accountId == $scope.currentAccountId){ + return "来自我的分享"; + } + else{ + return "来自“"+currentMenu.accountName+"”的分享"; + } + } + $scope.reportDetail = function(template){ + $state.go("collect."+template.menuType,{pageid:template.originalReportId}); + } + $scope.getTipWidth = function(temp){ + var wid = {}; + if(temp.tooltipChart.length==1){ + wid = {'width':$scope.showCount==3?'300px':'400px'}; + }else if(temp.tooltipChart.length==2){ + wid = {'width':$scope.showCount==3?'120px':'200px'}; + }else{ + wid = {'width':$scope.showCount==3?'70px':'90px'}; + } + return wid; + } + //删除 + $scope.doDelete = function(flag){ + $scope.closeWin(); + ToolService.showLoading(); + var deletePM = null; + + if(flag==3){//删除看单 + deletePM = HttpService.deleteInfo("custommenu/delMenu/"+$scope.appid+"/"+$scope.winId); + } + else if(flag==7){//删除报表 + deletePM = HttpService.deleteInfo("custommenu/delTemp/"+$scope.winId); + } + if(deletePM!=null){ + deletePM.then(function(){ + ToolService.showTips("删除成功"); + ToolService.hideLoading(); + + if(flag == 7){ + $scope.currentMenu.templates.filter(function(item,index){ + if(item.id == $scope.winId){ + $scope.currentMenu.templates.splice(index,1); + $scope.chartDatas.splice(index,1); + } + }); + } + else{ + $scope.lookMyMenu(); + $scope.$emit("f5CtmMenus",{}); + } + }); + } + } + + $scope.matchFlag = 0; //1匹配详情,2加入我的看单 + $scope.changeMatchFlag = function(flag){ + if($scope.showEditEvent){ + $scope.showEditEvent = false; + return false; + } + if(flag == 0){ + $scope.matchFlag = 0; + return false; + } + $scope.matchFlag = flag; + + $scope.currentMenu.templates.filter(function(item){ + var condition = JSON.parse(item.queryCondition),menuType = item.menuType; + + if(menuType=='eventstats'){ + item.isMatch = condition.eventMatch; + item.eventname = $scope.getEventName(condition.event); + } + else{ + item.isMatch = true; + var names = []; + condition.filter(function(cond){ + if(!cond.eventMatch){ + item.isMatch = false; + } + var n = $scope.getEventName(cond.event); + if(n!=''){ + names.push(n); + } + }); + if((names.length>2 && !item.isMatch) || names.length == 0){ + item.eventname = '事件不匹配'; + } + else if(names.length>2 && item.isMatch){ + item.eventname = '事件全匹配'; + } + else{ + item.eventname = names.join(","); + } + } + item.jsonCondition = condition; + }); + } + $scope.editTemplateEvent = function(template,idx){ + $scope.currentTemplate = template; + $scope.tempIndex = idx; + + $scope.showEditEvent = true; + + } + $scope.canJoin = function(){ + if(!$scope.currentMenu){return false;} + var can = true; + var temps = $scope.currentMenu.templates.filter(function(item){ + return item.isMatch == false; + }); + if(temps.length>0){ + can = false; + } + return can; + } + //根据event获取name + $scope.getEventName = function(evt){ + if(!$scope.eventList){return "";} + var name = evt; + for(var i=0;i<$scope.eventList.length;i++){ + if(evt == $scope.eventList[i].eventName){ + name = $scope.eventList[i].eventNameAlias; + break; + } + } + return name; + } + //加入到我的看单 + $scope.addShareMenu = function(){ + if(!$scope.canJoin()){return false;} + var par = {name:$scope.currentMenu.name,templates:[],id:$scope.currentMenu.id}; + if($scope.viewFlag == 2){ + par.id = $scope.currentMenu.shareId; + } + $scope.currentMenu.templates.filter(function(temp){ + var condition = temp.queryCondition,sevent = []; + if(temp.menuType == 'funnel'){ + var condJSON = JSON.parse(condition); + condJSON.filter(function(json){ + sevent.push(json.event); + }); + } + par.templates.push({ + id:temp.id, + menuType:temp.menuType, + queryCondition:condition, + name:temp.name, + events:sevent.join(",") + }); + }); + var saPM = HttpService.postInfo("custommenu/addMenu/"+$scope.appid,par); + ToolService.showLoading(); + saPM.then(function(data){ + ToolService.hideLoading(); + if(data.length>0){ + $scope.$emit("f5CtmMenus",{}); + $scope.changeMatchFlag(0); + $scope.showWin(5); + } + else{ + if(data.code && data.code == -300){ + ToolService.showTips("您的账号仅支持创建"+$scope.maxMenu+"个看单,如需增加,请联系商务"); + } + else{ + ToolService.showTips("加入失败"); + } + + } + }); + } + $scope.$on("matchok",function(e,msg){ + $scope.currentMenu.templates[$scope.tempIndex].queryCondition = JSON.stringify(msg.info); + $scope.currentMenu.templates[$scope.tempIndex].isMatch = true; + if(msg.names.length>2){ + $scope.currentMenu.templates[$scope.tempIndex].eventname = "事件全匹配"; + } + else{ + $scope.currentMenu.templates[$scope.tempIndex].eventname = msg.names.join(","); + } + + $scope.showEditEvent = false; + }); + $scope.queryInfoByApp = function(){ + $scope.pageFlag = 3; + //app下所有事件 + eventPM = HttpService.getInfo($scope.appid +"/event/find"); + eventPM.then(function(data){ + $scope.eventList = data; + }); + + $timeout(function(){ + //事件分析模板 + if($scope.showMenu('eventstats')){ + var url = "mng/eventstats/complicated/findAll/"; + var eventstatsPM = HttpService.getInfo(url+$scope.appid); + eventstatsPM.then(function(data){ + $scope.eventstatsList = data; + }); + } + else{ + $scope.eventstatsList = []; + } + + //留存模板 + if($scope.showMenu('retention')){ + var retentionPM = HttpService.getInfo("mng/retention/find/"+$scope.appid); + retentionPM.then(function(data){ + $scope.retentionList = data; + }); + } + else{ + $scope.retentionList = []; + } + + //漏斗模板 + if($scope.showMenu('funnel')){ + var funnelPM = HttpService.getInfo("funnel/find/"+$scope.appid); + funnelPM.then(function(data){ + $scope.funnelList = data; + }); + } + else{ + $scope.funnelList = []; + } + + },300); + } + //根据已选的指标和分组,重新生成图表数据 + $scope.changeChartData = function(tempData){ + tempData.tooltipChart = []; + var xKey = tempData.trendList.key,temp = { + key:xKey, + val:[], + name:[], + rmd : ++rmd + }; + var zero = []; + xKey.filter(function(d,index){ + zero.push(0); + }); + if(tempData.charts.chartType == "pie"){ + tempData.ischeckall = tempData.group_List.length==tempData.grouped_List.length?true:false; + tempData.charts.chartConfig.flag = false; + if(tempData.rateListed.length>2){ + tempData.rateListed = tempData.rateListed.slice(0,2); + } + var json = {}, grList = UtilService.cloneJSON(tempData.grouped_List); + tempData.rateListed.filter(function(rate){ + var arr = []; + var totalval = 0; + tempData.grouped_List.filter(function(group){ + tempData.totalList.filter(function(total){ + var groupnames = ""; + var val = {}; + tempData.trendList.groupfield.filter(function(gid){ + groupnames += total[gid]+","; + }); + if(group == groupnames.slice(0,-1)){ + arr.push(total[rate]); + totalval += total[rate]; + } + }); + }); + if(grList.indexOf("其他")>-1){ + grList.splice(grList.indexOf("其他"),1); + } + if(tempData.totalVal[rate]-totalval>0 && tempData.group_List.length>0){ + arr.push(tempData.totalVal[rate]-totalval); + grList.push("其他"); + } + json[rate] = arr; + }); + tempData.charts.chartData.key = tempData.rateListed; + tempData.charts.chartData.name = grList; + if(!angular.equals({}, json)){ + tempData.charts.chartData.val = [json]; + }else{ + tempData.charts.chartData.val = []; + } + }else if(tempData.charts.chartType == "table"){ + if(tempData.grouplen>0){ + tempData.trendList.name = tempData.trendList.name.slice(tempData.grouplen+1); + tempData.trendList.columnkey = tempData.trendList.columnkey.slice(tempData.grouplen+1); + tempData.trendList.columnkey.unshift("groupnames"); + tempData.trendList.name.unshift("分组"); + $scope.mysort(tempData.infoList,tempData.trendList.columnkey[1],true); + } + var names = [],keys=[]; + tempData.rateListed.filter(function(rate){ + names.push($scope.substrName(rate)); + }); + if(names.length>0){ + names.unshift(tempData.trendList.name[0]); + keys = UtilService.cloneJSON(tempData.rateListed); + keys.unshift(tempData.trendList.columnkey[0]); + tempData.trendList.name = names; + tempData.trendList.columnkey = keys; + } + tempData.colsStyle = ToolService.getTableColsWidth(tempData.trendList.name,$scope.timeFlag,$scope.showCount); + tempData.fixrefresh = ++rmd; + }else{ + if(tempData.charts.chartType == "columnstack"){ + tempData.charts.chartConfig.flag = tempData.group_List.length>0?'hasGro':'nohasGro'; + if(tempData.grouped_List.length>5){ + tempData.grouped_List = tempData.grouped_List.slice(0,5); + } + if(tempData.rateListed.length>2){ + tempData.rateListed = tempData.rateListed.slice(0,2); + } + }else{ + tempData.charts.chartConfig.flag = false; + if(tempData.rateListed.length>4){ + tempData.rateListed = tempData.rateListed.slice(0,4); + } + var groLen = tempData.rateListed.length==1?4:2; + tempData.grouped_List = tempData.grouped_List.slice(0,groLen); + } + tempData.charts.chartConfig.namesub = []; + tempData.trendList.val.filter(function(item){ + var date = item.ds,gname = item.groupnames; + + if(tempData.grouped_List.indexOf(gname)>-1 || tempData.grouped_List.length == 0){ + var dateIdx = xKey.indexOf(date); + tempData.rateListed.filter(function(rate){ + var format = tempData.trendList.format[rate]; + var chartname = gname + rate; + if(tempData.grouped_List.length == 0){ + chartname = rate.substring(1); //因为加了下划线,要去掉 + } + var dataIdx = temp.name.indexOf(chartname),dataArr = []; + + if(dataIdx == -1){ + temp.name.push(chartname); + tempData.charts.chartConfig.namesub.push(format=='percent'?"%":""); + dataArr = UtilService.cloneJSON(zero); + temp.val.push(dataArr); + } + else{ + dataArr = temp.val[dataIdx]; + } + + var rateNum = Number(item[rate]); + if(format == 'percent'){ + rateNum = UtilService.decimal2(rateNum*100,2); + } + else if(format == 'int'){ + rateNum = Math.round(rateNum); + } + else + { + rateNum = UtilService.decimal2(rateNum,2); + } + + dataArr[dateIdx] = rateNum; + }); + } + }); + tempData.charts.chartData = temp; + var klen = tempData.charts.chartData.key.length-1; + if(tempData.group_List.length>0 && tempData.charts.chartType=='columnstack'){ + var total = 0; + tempData.charts.chartData.val.filter(function(item){ + total += item[item.length-1]; + }); + var obj = {seriesName:$scope.substrName(tempData.rateListed[0]), + value:total, + name:tempData.charts.chartData.key[klen]}; + tempData.tooltipChart.push(obj); + }else{ + tempData.charts.chartData.name.filter(function(item,index){ + var vlen = tempData.charts.chartData.val[index].length-1, + obj = {seriesName:item, + value:tempData.charts.chartData.val[index][vlen], + name:tempData.charts.chartData.key[klen], + color:tempData.charts.chartConfig.color[index]}; + tempData.tooltipChart.push(obj); + }); + } + } + if(tempData.group_List.length>0 && tempData.charts.chartType!='table'){ + tempData.selectName = tempData.grouped_List.length+"个分组"; + } + if(tempData.group_List.length==0 || tempData.charts.chartType=='table'){ + tempData.selectName = tempData.rateListed.length+"个指标"; + } + } + + $scope.$on("conentresize",function(){ + if($scope.chartDatas && $scope.chartDatas.length>0){ + $scope.chartDatas.filter(function(tempData){ + if(tempData.trendList){ + tempData.colsStyle = ToolService.getTableColsWidth(tempData.trendList.name,$scope.timeFlag,$scope.showCount); + tempData.fixrefresh = ++rmd; + } + }); + } + }); + $scope.orderCol = function(tempData,predicate, reverse) { + tempData.sortCol = predicate; + $scope.mysort(tempData.infoList, predicate, reverse); + tempData.fixrefresh = ++rmd; + }; + $scope.mysort = function(tempArr,key,flag){ + if (flag==true) { + tempArr.sort(function(x, y) { + return x[key] == y[key] ? 0 : (x[key] > y[key] ? -1 : 1); + }); + } else { + tempArr.sort(function(x, y) { + return x[key] == y[key] ? 0 : (x[key] > y[key] ? 1 : -1); + }); + } + } + //图表加显示指标 + $scope.changeRate = function(tempData,rate){ + if(!$scope.canAdd(tempData,1,rate)){return false;} + + var idx = tempData.rateListed.indexOf(rate); + if(idx>-1){ + tempData.rateListed.splice(idx,1); + } + else{ + tempData.rateListed.push(rate); + } + $scope.changeChartData(tempData); + } + //图表加显示分组 + $scope.changeGroup = function(tempData,group){ + if(!$scope.canAdd(tempData,2,group)){return false;} + + var idx = tempData.grouped_List.indexOf(group); + if(idx>-1){ + tempData.grouped_List.splice(idx,1); + } + else{ + tempData.grouped_List.push(group); + } + $scope.changeChartData(tempData); + } + //当前是否还能添加指标或者分组,flag:1指标,2分组 + var lengedMax = 4; + $scope.canAdd = function(tempData,flag,cell){ + var arr = []; + lengedMax = $scope.showCount==3?3:4; + if(flag==1){ + arr = tempData.rateListed; + } + else{ + arr = tempData.grouped_List; + } + var idx = arr.indexOf(cell); + if(idx==-1){ + var rl = tempData.rateListed.length,gl = tempData.grouped_List.length; + if(tempData.charts.chartType == 'line'){ + if(flag == 1){ + return (rl+1)*(gl==0?gl+1:gl) <= lengedMax; + } + else{ + return rl*(gl+1)<= lengedMax; + } + }else{ + if(flag == 1){ + return rl+1 <= (tempData.charts.chartType == 'columnstack'?2:(tempData.charts.chartType == 'pie'?1:tempData.rateList.length)); + } + else{ + return gl+1 <= (tempData.charts.chartType == 'columnstack'?5:tempData.group_List.length); + } + } + + } + return true; + } + $scope.substrName = function(name){ + return name.substring(1); + } + var changeChart = function(tempData){ + $scope.changeChartData(tempData); + (function(tempData){ + $scope.$on(tempData.charts.chartTypeId,function(e,msg){ + if(msg.info.id != tempData.charts.chartType && $scope.viewFlag==1){ + var changePM = HttpService.putInfo("custommenu/updateType/"+tempData.info.id+"?type="+msg.info.id,{}); + ToolService.showLoading(); + changePM.then(function(data){ + ToolService.hideLoading(); + },function(data){ + ToolService.hideLoading(); + ToolService.showTips(data.message); + }); + } + tempData.charts.chartType = msg.info.id; + $scope.changeChartData(tempData); + }); + })(tempData); + } + $scope.gotoDetail = function(temp){ + if($scope.viewFlag!=1)return; + $state.go("collect."+temp.menuType,{pageid:temp.originalReportId}); + } + + $scope.percentPre = "rate_";//显示比例时的前缀 + //onetemp 是为了添加成功后动态查询当前报表 + $scope.query = function(onetemp){ + if(!isinit){ + isinit = !isinit; + return false + } + var templates = []; + if(onetemp){ + if(angular.isUndefined($scope.chartDatas)){ + $scope.chartDatas = []; + } + templates = [onetemp]; + } + else{ + $scope.chartDatas = []; + templates = $scope.currentMenu.templates; + } + var myChartDatas = []; + var setLineData = function(data,tempData,type){ + if(data.val && data.val.length>0){ + var lineData = data.val[0]; + if(type == 'funnel') + { + tempData.charts.chartData = ToolService.getFunnelData(lineData,data.key,data.eventname); + } + else if(type == 'retention') + { + tempData.charts.chartData.key = data.key.slice(1); + var columns = data.columnkey,line = []; + tempData.charts.chartData.name.push(lineData[columns[0]]); + + for(var i=2;i<columns.length;i++){ + line.push(lineData['rate_'+columns[i]]); + } + tempData.charts.chartData.val.push(line); + } + // else if(type == 'eventstats') + // { + // lineData = data.val; + // tempData.charts.chartData.key = data.key; + // tempData.charts.chartData.name = data.name.slice(1); + // var columns = data.columnkey,line = []; + + // lineData.filter(function(item){ + // line.unshift(item[columns[1]]); + // }); + + // tempData.charts.chartData.val = [line]; + // } + else if(type == 'eventstats') + { + + var format = data.format,formatjson = {}; + if(format){ + format.filter(function(f){ + formatjson[f.field] = f.format; + }); + } + + data.format = formatjson; + tempData.trendList = data; + tempData.totalList = data.totalval; + tempData.infoList = data.val; + tempData.eventChartLoading = false; + + tempData.rateList = data.selectfield; + tempData.totalVal = {}; + tempData.rateList.filter(function(rate){ + tempData.totalList.filter(function(total){ + if(!tempData.totalVal[rate]){ + tempData.totalVal[rate] = 0; + } + tempData.totalVal[rate] += total[rate]; + }); + }); + tempData.group_List = $scope.getGroupNames(tempData,data.groupfield); + tempData.grouplen = data.groupfield.length; + $scope.getChartTypeList(tempData); + if(tempData.infoList.length>0){ + $scope.limit(tempData); + if(tempData.group_List.length == 0){ //没有分组情况,不显示占比 + tempData.ispercent = false; + } + changeChart(tempData); + if(tempData.group_List.length>0){ + tempData.dsList = []; + tempData.trendList.key.filter(function(ds,index){ + var dsObj = {id:index,name:ds,dsflag:'ds'}; + tempData.dsList.unshift(dsObj); + }); + tempData.dsInit = tempData.dsList[0].id; + (function(tempData){ + $scope.$on(tempData.dsId,function(e,msg){ + tempData.ds = msg.info.name; + tempData.fixrefresh = ++rmd; + }); + })(tempData); + } + tempData.fixrefresh = ++rmd; + tempData.initrefresh = ++rmd; + } + } + } + tempData.charts.chartLoading = false; + } + + templates.filter(function(item,idx){ + if(item.toShow!=false){ + var tempData = {info:item}; + tempData.charts = { + chartConfig:{color:ToolService.getTenColors(),legend:false,issmart:true,namesub:[],id:item.menuType=='eventstats'?++rmd:""}, + chartLoading:true, + chartData: ToolService.noDataChart(), + rmd : ++rmd, + chartTypeId: $scope.timeFlag+'_'+(++rmd), + dsId : 'ds_'+(++rmd) + }; + if(onetemp){ + $scope.chartDatas.push(tempData); + } + else{ + myChartDatas.push(tempData); + } + + (function(item,idx,tempData){ + $timeout(function(){ + var type = item.menuType; + tempData.charts.chartType = (type=='funnel' ? 'funnel' : 'line'); + //收藏和行业模板 + if(angular.isDefined(item.queryData)){ + setLineData(JSON.parse(item.queryData),tempData,type); + } + else{ + var chartPM = HttpService.getInfo("custommenu/report/"+$scope.appid+"/"+item.originalReportId,{startDate:$scope.date.startDate,endDate:$scope.date.endDate,menuType:type,viewFlag:$scope.timeFlag}); + chartPM.then(function(data){ + setLineData(data,tempData,type); + },function(data){ + tempData.charts.chartLoading = false; + }); + } + },idx*200*(Math.ceil(idx+1)/4)); + })(item,idx,tempData); + } + }); + if(!onetemp){ + $scope.chartDatas = myChartDatas; + } + } + $rootScope.$on("tooltipObj",function(e,msg){ + $timeout(function() { + if($scope.chartDatas && $scope.chartDatas.length>0){ + $scope.chartDatas.filter(function(temp){ + if(msg.id == temp.charts.chartConfig.id && temp.info.menuType=='eventstats'){ + temp.tooltipChart = []; + if(temp.group_List.length>0 && temp.charts.chartType=='columnstack'){ + var total = 0; + msg.objs.filter(function(item){ + total += item.value; + }); + var obj = {seriesName:$scope.substrName(temp.rateListed[0]),value:total,name:msg.objs[0].name} + temp.tooltipChart.push(obj); + }else{ + temp.tooltipChart = msg.objs; + } + } + }); + } + }, 100); + }) + $scope.getFormatNumber = function(num){ + if(num >= 100000000){ + return UtilService.decimal2(num/100000000) + '亿'; + } + else if(num >= 10000000){ + return UtilService.decimal2(num/10000000) + '千万'; + } + else if(num >= 1000000){ + return UtilService.decimal2(num/1000000) + '百万'; + } + else if(num >= 10000){ + return UtilService.decimal2(num/10000) + '万'; + } + else{ + return num; + } + } + $scope.changeCount = function(){ + if(!$scope.showCount || $scope.showCount==2){ + $scope.showCount = 3; + $scope.chartDatas.filter(function(temp){ + if(temp.info.menuType=='eventstats' && temp.rateListed){ + var rateLen = temp.rateListed.length==0?1:temp.rateListed.length, + groLen = temp.grouped_List.length==0?1:temp.grouped_List.length + if(temp.charts.chartType == 'line' && rateLen*groLen>3){ + temp.rateListed = temp.rateList.slice(0,1); + temp.grouped_List = temp.group_List.slice(0, 3); + if(temp.grouped_List.length < 2){ + temp.rateListed = temp.rateList.slice(0,3); + } + $scope.changeChartData(temp); + } + } + }); + }else{ + $scope.showCount = 2; + } + $scope.$broadcast("conentresize",true); + $scope.chartDatas.filter(function(temp){ + temp.fixrefresh = ++rmd; + }); + } + $scope.checkAll = function(temp){ + temp.ischeckall = !temp.ischeckall; + temp.grouped_List = temp.ischeckall?UtilService.cloneJSON(temp.group_List):[]; + $scope.changeChartData(temp); + } + $scope.chartAllList = [{id:"line",name:"折线图",platform:"line"}, + {id:"columnstack",name:"柱状图",platform:"columnstack"}, + {id:"table",name:"表格",platform:"table"}, + {id:"pie",name:"饼状图",platform:"pie"}]; + $scope.getChartTypeList = function(tempData){ + if(tempData.rateList.length >= 1 && tempData.grouplen == 0){ + tempData.chartList = $scope.chartAllList.slice(0,3);; + tempData.charts.chartType = "line"; + tempData.charts.chartTypeInit = "line"; + } + else if(tempData.rateList.length == 1 && tempData.grouplen > 0){ + tempData.chartList = $scope.chartAllList.slice(0); + } + else if(tempData.rateList.length >1 && tempData.grouplen > 0){ + tempData.chartList = $scope.chartAllList.slice(2,-1); + tempData.charts.chartType = "table"; + tempData.charts.chartTypeInit = "table"; + } + tempData.charts.chartType = tempData.info.type?tempData.info.type:tempData.charts.chartType; + tempData.charts.chartTypeInit = tempData.charts.chartType; + } + $scope.limit = function(tempData){ + if(tempData.charts.chartType == 'line'){ + tempData.rateListed = tempData.rateList.slice(0,1); + tempData.grouped_List = tempData.group_List.slice(0, 3); + if(tempData.grouped_List.length < 2){ + tempData.rateListed = tempData.rateList.slice(0,3); + } + }else if(tempData.charts.chartType == 'columnstack'){ + tempData.rateListed = tempData.rateList.slice(0,2); + tempData.grouped_List = tempData.group_List.slice(0, 3); + }else if(tempData.charts.chartType == 'pie'){ + tempData.rateListed = tempData.rateList.slice(0,1); + tempData.grouped_List = tempData.group_List.slice(0); + }else{ + tempData.rateListed = tempData.rateList.slice(0); + tempData.grouped_List = tempData.group_List.slice(0); + } + } + //得到图的分组,同时处理成分页需要的数据格式 + $scope.getGroupNames = function(tempData,gns){ + var names = [],listArr = []; + if(gns.length == 0){ //没有分组情况下的处理 + var hasgroup = tempData.trendList.groupfield.length>0; + tempData.trendList.val.filter(function(item,index){ + var listChild = {}; + if(!hasgroup){ + listChild = item; + } + + if(item.firstDateRow){ + listChild.ds = item.ds; + listChild.groupnames = item.ds; + if(hasgroup){ + listChild.children = $scope.trendList.val.slice(index,index+item.rowNum); + } + else{ + listChild.rsnum = 1; + listChild.isrs = true; + } + listArr.push(listChild); + } + }); + } + else{ + tempData.trendList.val.filter(function(item,index){ + var temps = [],listChild = {}; + gns.filter(function(k){ + temps.push(item[k]); + }); + + var tn = temps.join(","),idx = names.indexOf(tn); + item.groupnames = tn; + if(idx == -1){ + names.push(tn); + }; + + if(item.firstDateRow){ + listChild.ds = item.ds; + listChild.groupnames = tn; + listChild.children = tempData.trendList.val.slice(index,index+item.rowNum); + listArr.push(listChild); + } + + }); + } + $scope.detailAllList = listArr; + if($scope.istranfer){ + $scope.transformList(); + } + else{ + $scope.lsChange++; + } + return names; + } + $scope.$on("dragorder",function(event,msg){ + ToolService.showLoading(); + var url = ""; + if(msg.flag == 'menu'){ + url = "custommenu/updateIndex/"+$scope.appid+"/"+msg.id+"?index="+msg.index; + } + else{ + url = "custommenu/updateIndex/"+msg.id+"?index="+msg.index; + } + + var updatePM = HttpService.putInfo(url,{}); + updatePM.then(function(){ + if(msg.flag == 'menu'){ + $scope.lookMyMenu(); + } + else{ + $scope.query(); + } + },function(){ + ToolService.hideLoading(); + }); + + }); + + $scope.$watch("appid",function(n){ + if(angular.isDefined($scope.appid)){ + eventPM = null; + // 查询该用户是否有看单(我的看单和收藏) + var hasPM = HttpService.getInfo("custommenu/find/"+$scope.appid); + ToolService.showLoading(); + hasPM.then(function(data){ + ToolService.hideLoading(); + if(data==true){ + $scope.lookMyMenu(); + } + else{ + $scope.pageFlag = 1; + } + }); + } + }); + + $scope.$watch("date.startDate+date.endDate+timeFlag",function(){ + if(angular.isDefined($scope.date) && $scope.pageFlag == 4){ + $scope.query(); + } + }); + } +})(); diff --git a/src/main/websrc/js/collect/eventstats.js b/src/main/websrc/js/collect/eventstats.js new file mode 100644 index 0000000..f09410b --- /dev/null +++ b/src/main/websrc/js/collect/eventstats.js @@ -0,0 +1,1871 @@ +(function(){ + angular.module("app.collect") + .controller("eventstatsCtrl",["$scope","$rootScope","HttpService","ToolService","UtilService","$filter","$timeout","$stateParams","$q",eventstatsCtrl]); + + String.prototype.visualLength = function() + { + var ruler = $("#ruler"); + ruler.text(this); + return ruler.width(); + } + function eventstatsCtrl($scope,$rootScope,HttpService,ToolService,UtilService,$filter,$timeout,$stateParams,$q){ + $scope.formatList = [ + {format:"percent",name:"百分比"}, + {format:"float",name:"两位小数"}, + {format:"int",name:"整数"} + ]; + $scope.formatinitname = "整数"; + $scope.groupbys = []; + $scope.dimensionname = "请选择分组"; + $scope.dimenInit = "-all"; + + angular.element(document).on("click",function(){ + $scope.$apply(function(){ + $scope.showProList = false; + $scope.nowEvent = ""; + }); + }); + $scope.getwidth = function(name){ + return ToolService.getByteLen(name)*6; + } + //得到最后一次出现加减乘除符号的下标 + var getLastIndex = function(str,reg){ + if(!str)return; + var len = str.length,index = 0; + if(len>0){ + index = str.split("").reverse().join("").search(reg?reg:regexp); + if(index > -1){ + index = len - index - 1; + } + } + return index; + } + var ischrome = UtilService.getBrowser().indexOf('Chrome')>-1; + $scope.changeExpression = function(ex,index,event){ + $scope.expressionObj = index>=0?document.getElementById("expression_"+index):$scope.expressionObj; + var focusIndex = sectionTool.getCursortPosition($scope.expressionObj), + value = ex.expressionName?ex.expressionName:""; + value = value.substring(0, focusIndex); + var s1 = value.substring(getLastIndex(value),focusIndex),filterTxt = ""; + $scope.currentIndex = index; + //如果第一个字符是计算字符,减去,以便过滤等 + if(getLastIndex(s1) == s1.length-1){ + s1 = s1.substring(1); + } + + var showList = function(){ + $scope.showProList = true; + + var boxXY = document.getElementById("evtBox").getBoundingClientRect(), + preTxt = $scope.expressionObj.value.substring(0,focusIndex), + mx = preTxt.visualLength() - $scope.expressionObj.scrollLeft, + inputXY = $scope.expressionObj.getBoundingClientRect(), + // top = inputXY.top + inputXY.height - boxXY.top + $(".rightWrap").scrollTop(), + top = inputXY.top + inputXY.height - boxXY.top, + len = filterTxt.visualLength(); + + var left = inputXY.left - boxXY.left + mx - len+13; + if(!ischrome){ + left -=16; + if($scope.expressionObj.scrollLeft>36){ + if(focusIndex == $scope.expressionObj.value.length){ + left -= 36; + } + else{ + left -= 10; + } + } + } + document.getElementById('optionList').style.left = left + "px"; + document.getElementById('optionList').style.top = top + "px"; + } + $scope.eventIndex = -1; + $(".optionList ul").scrollTop(0); + $scope.nowEvent = ""; + if(s1.indexOf(".")==-1){ + $scope.epropertyList = $scope.eventList; + filterTxt = s1; + var filterIndex = filterTxt.search(regexp); + if(filterIndex>-1){ + filterTxt = filterTxt.slice(filterIndex+1); + } + $scope.typeName = eval(['自然事件','虚拟事件']); + $scope.typeKey = eval(['nature','virtual']); + } + else{ + //根据截图的数据来判断当前段有几个.,以此来判断是到事件的第几级 + $scope.typeName = []; + $scope.typeKey = []; + var count = s1.match(/\./g).length; + + filterTxt = s1.substring(s1.lastIndexOf(".")+1); + if(count == 1){ + var findex = s1.split("").join("").search(regexp),start = 0; + if(findex == 0){ + start = 1; + } + var tn = s1.substring(start,s1.indexOf(".")); + $scope.getEventName(tn); + $scope.getAttrByEvent($scope.selectEvent,showList); + } + else if(count == 2){ + var findex = s1.split("").join("").search(regexp),start = 0,fd = s1.indexOf("."); + if(findex == 0){ + start = 1; + } + var en = s1.substring(start,fd),pn = s1.substring(fd+1,s1.lastIndexOf(".")); + $scope.getEventName(en); + + $scope.getAttrByEvent($scope.selectEvent,function(list){ + + for(var m=0;m<list.length;m++){ + if(list[m].name == pn){ + $scope.selectAttr = list[m]; + break; + } + } + + if(list.length>0 && $scope.selectAttr && !$scope.selectAttr.isleaf){ + var kpiList = $scope.kpiList.filter(function(item){ + return item.viewType == $scope.selectAttr.type || item.viewType == "all"; + }); + $scope.showProList = true; + $scope.epropertyList = kpiList; + } + else{ + $scope.epropertyList = []; + } + },1); + } + else{ + $scope.epropertyList = []; + } + } + + if($scope.epropertyList.length>0 && ((event && !event.isleaf) || !event) ){ + showList(); + } + else{ + $scope.showProList = false; + } + $scope.filterSearch = filterTxt; + $scope.currentExpression = ex; + + } + $scope.getEventName = function(name){ + for(var i=0;i<$scope.eventList.length;i++){ + if($scope.eventList[i].name == name){ + $scope.selectEvent = $scope.eventList[i]; + break; + } + } + } + $scope.$watch("filterSearch",function(n){ + if(angular.isUndefined(n) || !n){return false;} + $scope.virtual = ""; + $scope.nature = ""; + $scope.epropertyList.filter(function(item){ + if(angular.uppercase(item.name).indexOf(angular.uppercase(n))>-1 && item.type=="virtual"){ + $scope.virtual = item.type; + } + if(angular.uppercase(item.name).indexOf(angular.uppercase(n))>-1 && item.type=="nature"){ + $scope.nature = item.type; + } + }); + }); + $scope.expresstionTransform = function(n){ + var par = { + expression:n.expressionName, + appkey:$scope.appid + } + var validPM = HttpService.postInfo("expression/transform",par); + var temp = n; + validPM.then(function(data){ + temp.error = false; + if(data.code == 11000){ + temp.error = true; + }else{ + temp.error = false; + temp.expression = data; + } + },function(){ + temp.error = true; + }); + + } + $scope.showFlow = true; + $scope.changeFlow = function(flag){ + if(flag == 1){ + $scope.showFlow = false; + } + else{ + $scope.showFlow = true; + } + } + $scope.$watch("currentExpression",function(n,o){ + if(angular.isUndefined(n) || !n){return false;} + if(!n.expressionName){ + $scope.changeExpression(n,$scope.currentIndex); + return; + } + if(!o || (n == o) || (n && o && n.expressionName==o.expressionName))return; + $scope.expresstionTransform(n); + var name = n.expressionName; + if(getLastIndex(name) == name.length-1 || name.slice(-1)=="."){ + $scope.changeExpression(n,$scope.currentIndex); + } + },true); + var regexp = /[\+\-\*\/\(\)]/g; + //需要考虑怎么存储点击的事件数据,这样下次定光标的时候可以获取到前面的事件实时查询当前的属性等 + $scope.getProperty = function(event){ + var focusIndex = $scope.expressionObj.selectionStart, + value = $scope.currentExpression.expressionName?$scope.currentExpression.expressionName:""; + + var val1 = value.substring(0,focusIndex),val2 = value.substring(focusIndex),attrType="",isleaf=""; + var reg = /[\+\-\*\/\(\)\.]/g; + val1 = val1.slice(0,getLastIndex(val1,reg)+1); + + for (var i = 0; i < $scope.epropertyList.length; i++) { + var index = val2.search(regexp); + var attr = ""; + if(val2.indexOf(".") < index){ + attr = val2.slice(0,val2.indexOf(".")); + }else if(val2.indexOf(".") > index){ + attr = val2.slice(0,index); + }else{ + attr = val2.slice(0); + } + + if(attr == $scope.epropertyList[i].name){ + attrType = $scope.epropertyList[i].type; + isleaf = $scope.epropertyList[i].isleaf; + break; + } + } + if(val2.indexOf(".")!=0 && !event.viewType){ + var index = val2.search(regexp); + if((index == -1 && val2.indexOf(".") > -1 ) || (val2.indexOf(".") > -1 && index > -1 && val2.indexOf(".") < index)){ + val2 = val2.substring(val2.indexOf(".")); + }else{ + val2 = "." + val2; + } + } + + //这里需要修改,要判断当前数据情况进行插入 + if(attrType && event.type != attrType && !event.isleaf || event.isleaf || isleaf){ + var index = val2.search(regexp); + if(!event.isleaf && !isleaf){ + val2 = "."+val2.substring(index); + + }else{ + val2 = (event.isleaf?"":".")+(index>-1?val2.substring(index):""); + } + + } + + $scope.currentExpression.expressionName = val1 + event.name + val2; + $scope.expressionObj.value = $scope.currentExpression.expressionName; + var bstr = val1 + event.name; + var len = bstr[bstr.length-1]=="." || event.viewType || event.isleaf?bstr.length:(bstr.length+1); + sectionTool.setCaretPosition($scope.expressionObj,len); + $scope.selectEvent = !event.type && !event.isleaf?event:$scope.selectEvent; + $scope.selectAttr = event.type && !event.isleaf?event:$scope.selectAttr; + $timeout(function(){ + $scope.changeExpression($scope.currentExpression,-1,event); + },100); + } + $scope.watchKey = function(n,e){ + + if(e.keyCode == 37 || e.keyCode == 39){ + var timer = $timeout(function() { + $scope.changeExpression(n,$scope.currentIndex); + }, 100); + timer.then(function(){ + $timeout.cancel(timer); + }); + + } + if(e.keyCode == 40){ + e.preventDefault(); + $scope.eventIndex++; + $scope.eventIndex = $scope.eventIndex<$scope.epropertyList.length?$scope.eventIndex:0; + $(".optionList ul").scrollTop(34*($scope.eventIndex==0?1:$scope.eventIndex)); + $scope.nowEvent = $scope.epropertyList[$scope.eventIndex]; + } + if(e.keyCode == 38){ + e.preventDefault(); + $scope.eventIndex--; + $scope.eventIndex = $scope.eventIndex<0?$scope.epropertyList.length-1:$scope.eventIndex; + $(".optionList ul").scrollTop(34*($scope.eventIndex==0?1:$scope.eventIndex)); + $scope.nowEvent = $scope.epropertyList[$scope.eventIndex]; + } + + } + $(document).keydown(function(event){ + if(event.keyCode == 13 && $scope.nowEvent){ + $scope.getProperty($scope.nowEvent); + } + }); + var fid = $stateParams.pageid; + var rmd = new Date().getTime(); + var commonEventPros = []; + var eventPM = null; + $scope.queryInfoByApp = function(flag,dID){ + if(angular.isUndefined(flag) || flag==5){ + //app下所有事件 + eventPM = HttpService.getInfo($scope.appid +"/event/find/virtual"); + eventPM.then(function(data){ + $scope.eventList = []; + angular.forEach(data,function(item){ + var event = {}; + event.id = item.eventName; + event.name = item.eventNameAlias; + event.type = item.virtual?"virtual":"nature"; + $scope.eventList.push(event); + + }); + }); + + $scope.haslist = function(type){ + if(!$scope.eventList){return false;} + + var bol = false; + for(var i=0;i<$scope.eventList.length;i++){ + if($scope.eventList[i].type== type){ + bol = true; + break; + } + } + return bol; + } + var fixedAttrPM = HttpService.getInfo("expression/viewList"); + fixedAttrPM.then(function(data){ + $scope.kpiList = []; + $scope.fixedAttrList = data.eventViewList; + + commonEventPros = []; + angular.forEach($scope.fixedAttrList,function(item,index){ + var event = {}; + event.id = item.viewAttr; + event.name = item.viewAttrName; + event.isleaf = true; + if(index==$scope.fixedAttrList.length-1){ + event.border = true; + } + commonEventPros.push(event); + }); + + angular.forEach(data.attrViewList,function(item){ + var event = {}; + event.id = item.viewAttr; + event.name = item.viewAttrName; + event.viewType = item.viewType; + event.isleaf = true; + $scope.kpiList.push(event); + + }); + }); + //分组 + var profilePM = HttpService.getInfo($scope.appid+"/event/find/group/properties"); + profilePM.then(function(data){ + $scope.dimensionList = data; + }); + //通用属性 + var profilePM = HttpService.getInfo($scope.appid+"/event/find/common/properties"); + profilePM.then(function(data){ + $scope.commonAttrList = data; + }); + } + + var definePM = HttpService.getInfo("mng/eventstats/complicated/findAll/"+$scope.appid); + $scope.define = {}; + definePM.then(function(data){ + $scope.defineList = data; + if(data.length>0){ + $scope.addFirst = false; + if(!UtilService.isNullStr(fid)){ + dID = fid; + } + if(dID){ //修改自定义事件 + for(var i=0;i<$scope.defineList.length;i++){ + if($scope.defineList[i].id == dID){ + $scope.define = $scope.defineList[i]; + break; + } + } + if(!UtilService.isNullStr(fid)){ + $scope.clickDefine($scope.define); + fid = null; + } + else{ + $scope.defineFlag = ++rmd; + } + } + else{ + $scope.clickDefine(data[0]); + } + } + else{ + var oldPM = HttpService.getInfo("mng/eventstats/complicated/show/import"); + ToolService.showLoading(); + oldPM.then(function(data){ + ToolService.hideLoading(); + if(typeof data.content !='undefined'){ + $scope.isold = data.content; + } + else{ + $scope.isold = data; + } + }); + } + }); + } + $scope.importOld = function(){ + var importPM = HttpService.putInfo("mng/eventstats/complicated/import/old/data"); + ToolService.showLoading(); + importPM.then(function(data){ + ToolService.hideLoading(); + $scope.queryInfoByApp(1); + }); + } + var doDevice = ['_count_user','_count_avg']; + $scope.$watch("define",function(obj){ + if(obj && obj.id){ + $scope.isEditInfo = true; + } + }); + $scope.addTitName = "新建事件统计细分"; + $scope.getTrendTitle = function(){ + if($scope.showTempLook){ + return $scope.addTitName + "的趋势"; + } + else if($scope.define && $scope.define.id){ + return $scope.define.name + "的趋势"; + } + else{ + return "事件趋势"; + } + } + + //已保存的事件 + $scope.definename = "请选择事件"; + $scope.clickDefine = function(m){ + $scope.define = m; + $scope.defineFlag = ++rmd; + $scope.isEditInfo = true; + $scope.isShowCache = false; + + $rootScope.thirdtab = m.name; + } + $scope.deleteDefine = function(d){ + $scope.delDefine = d; + ToolService.showAlp(); + ToolService.showLoading(); + var validPM = HttpService.getInfo("custommenu/delete/valid/"+d.id+"?type=eventstats"); + validPM.then(function(data){ + ToolService.hideLoading(); + $scope.wantDelete = true; + $scope.custommenus = angular.isArray(data) && data.length>0?data:false; + }); + } + $scope.doDelete = function(){ + $scope.closeWin(); + ToolService.showLoading(); + var deletePM = HttpService.deleteInfo("mng/eventstats/complicated/delete/"+$scope.delDefine.id); + deletePM.then(function(){ + ToolService.showTips("删除成功"); + $scope.queryInfoByApp(1); + ToolService.hideLoading(); + }); + } + + $scope.date = ToolService.getLastDays(-7,0); + $scope.timeFlag='day'; + $scope.disTimeFlag = ['hour']; + $scope.changeTimeFlag = function(flag){ + if($scope.disTimeFlag.indexOf(flag)>-1){return false;} + + $scope.timeFlag = flag; + } + $scope.$on("dateCustos",function(e,msg){ + if(msg.startDate == msg.endDate){ + $scope.disTimeFlag = ["week","month"]; + } + else{ + $scope.disTimeFlag = ["hour"]; + + } + if($scope.disTimeFlag.indexOf($scope.timeFlag)>-1){ + $scope.timeFlag = 'day'; + } + $scope.date = msg; + }); + $scope.$watch("date",function(){ + if(angular.isDefined($scope.date)){ + $scope.datestr = $scope.date.startDate + "至" + $scope.date.endDate; + } + }); + + var proertyCollection = {},lastid = -1; + $scope.getAttrByEvent = function(event,callback,flag){ + // ToolService.showLoading(); + if(!event || event.isleaf){ + $scope.epropertyList = []; + callback && callback([]); + return false; + }; + + var myPropertys = function(profiles){ + var tempList = UtilService.cloneJSON(commonEventPros); + angular.forEach(profiles,function(item){ + var event = {}; + event.id = item.attr; + event.name = item.attrAlias; + event.type = item.webType || item.dataType; + tempList.push(event); + + }); + if(flag){ //此种情况是直接匹配获取相应的属性指标 + callback && callback(tempList); + } + else{ + $scope.epropertyList = tempList; + callback && callback(tempList); + } + } + $scope.epropertyList = []; + + if(proertyCollection[event.id]){ + myPropertys(proertyCollection[event.id]); + $scope.attrShow = true; + } + else{ + //阻止重复发送事件 + if(lastid == event.id && flag!=2){return false;} //flag:2,编辑时需要发送 + + lastid = event.id; + var evtprofilePM = HttpService.getInfo("expression/properties/"+event.id+"/"+$scope.appid); + + evtprofilePM.then(function(pros){ + var properties = orderBy(pros,"sortId"); + myPropertys(properties); + proertyCollection[event.id] = properties; + }); + } + } + + $scope.changeEvent = function(event,obj){ + + if(obj){ //编辑查找 + $scope.eventRel = obj.relation; + } + + var set = function(){ + $scope.event = { + id:"evt_"+rmd, + params:[], + paramsList:$scope.commonAttrList + } + + if(obj){ + $timeout(function(){ + $scope.propertyInit = obj.viewField; + $scope.prorefresh = ++rmd; + $scope.event.secondval = obj.fieldOperate; + obj.params.filter(function(pitem){ + $scope.addEventParams($scope.event,pitem); + }); + }); + } + } + set(); + } + $scope.eventinitname = "请选择事件"; + $scope.eventRel = "and"; + $scope.changeRel = function(){ + $scope.eventRel = $scope.eventRel == "and" ? "or" : "and"; + } + $scope.initCondition = function(){ + if($scope.event.id){ + $scope.initComplexEvent(); + } + } + $scope.changeForm = function(ex){ + $scope.nowEvent = ""; + ex.expression = !ex.expression; + if(ex.expression){ + if(ex.operator){ + var events = [], pros = [], target = [], proStr = "", tarStr = ""; + if(ex.event){ + events = $scope.eventList.filter(function(item){ + return ex.event == item.id; + }); + } + var pro = ex.property || ex.operator; + if(pro){ + pros = ex.epropertyList.filter(function(item){ + return pro == item.id; + }); + proStr = "."+pros[0].name; + } + if(ex.operator && ex.property){ + target = ex.targetList.filter(function(item){ + return ex.operator == item.id; + }); + tarStr = "."+target[0].name; + } + + + ex.expressionName = events[0].name+proStr+tarStr; + }else{ + ex.expressionName = $scope.eventList[0].name+".总次数/"+$scope.eventList[0].name+".用户数"; + } + $scope.expresstionTransform(ex); + }else{ + ex.extip = ""; + } + + }; + $scope.showEventWin = false; + $scope.currentEvent = []; + $scope.addComplexEvent = function(flag,n){ + var cache = UtilService.getItem($scope.appid); + if(flag==1 || cache){ //编辑 + if(!$scope.define.id && !$scope.isShowCache){return false;} + $scope.isShowCache = flag==0 || n; + if(!$scope.isShowCache){ + $scope.currentDefine = $scope.define; + $scope.ename = $scope.define.name; + }else{ + $scope.currentDefine = {}; + } + var eventCondition = $scope.isShowCache?JSON.parse(cache):JSON.parse($scope.currentDefine.eventCondition); + $scope.isEditInfo = true; + + } + else{ + $scope.currentDefine = {}; + $scope.isEditInfo = false; + $scope.isShowCache = false; + } + $scope.initComplexEvent(flag,eventCondition); + $scope.showEventWin = true; + } + $scope.initComplexEvent = function(flag,eventCondition){ + $scope.currentEvent.filter(function(item){ + item.show = false; + }); + $scope.groupbys.filter(function(item){ + item.show = false; + }); + if(eventCondition){ + ToolService.showLoading(); + $q.all([eventPM]).then(function(data){ + var eventInfo = eventCondition; + eventInfo.expressions.filter(function(e){ + $scope.addEvents(e); + }); + eventInfo.group.filter(function(e){ + $scope.addGroupby(e); + }); + ToolService.hideLoading(); + }); + var attrs = []; + eventCondition.params.filter(function(e){ + attrs.push(e.attr); + }); + if(attrs.length>0){ + var profilePM = HttpService.getInfo($scope.appid+"/event/find/value/attrs?attrNames="+attrs.join(",")); + profilePM.then(function(pros){ + var prosInfo = pros; + $scope.commonAttrList.filter(function(item){ + var valueJSON = prosInfo[item.attr]; + if(valueJSON && valueJSON.key){ + item.key = valueJSON.key; + } + if(valueJSON && valueJSON.value){ + item.value = valueJSON.value; + } + + }); + $scope.changeEvent(null,eventCondition); + + }); + } + + }else{ + $scope.addEvents(); + } + $scope.event = { + id:"evt_"+rmd, + params:[], + relation:$scope.eventRel, + paramsList:$scope.commonAttrList + } + } + $scope.addFirst = false; + $scope.addFirstEvent = function(){ + $scope.addFirst = true; + $scope.showEventWin = true; + $scope.currentDefine = {}; + $scope.initComplexEvent(); + } + $scope.closeAddWin = function(){ + $scope.showEventWin = false; + $scope.addFirst = false; + $scope.isEditInfo = true; + } + $scope.maxparams = 10; + $scope.maxevents = 10; + $scope.maxgroupbys = 3; + $scope.addGroupby = function(obj){ + if($scope.getGroupByNum()>=$scope.maxgroupbys)return; + ++ rmd; + var temp = {id:"gby_"+rmd,dimensionId:"groupby_"+rmd,show:true}; + if(obj){ + for(var k in obj){ + temp[k] = obj[k]; + } + temp.dimenInit = obj.name; + } + (function(temp){ + $scope.$on(temp.dimensionId,function(e,msg){ + temp.dimenId = msg.info.param; + temp.type = msg.info.type; + }); + })(temp); + $scope.groupbys.push(temp); + } + $scope.addEvents = function(obj){ + if($scope.getEventNum()>=$scope.maxevents)return; + ++rmd; + var temp = {id:"evt_"+rmd,relation:"and",format_id:"for_"+rmd,show:true, + eventId:"event_"+rmd,propertyId:"pro_"+rmd,targetId:"tar_"+rmd}; + if(obj){ + for(var k in obj){ + temp[k] = obj[k]; + } + temp.formatInit = obj.format; + temp.eventInit = obj.event; + temp.event = obj.event; + temp.propertyinit = obj.attr?obj.attr:obj.operator; + temp.targetinit = obj.operator; + } + + (function(temp){ + var event_name = "", pro_name = "", target_name =""; + $scope.$on(temp.format_id,function(e,msg){ + temp.formatId = msg.info.format; + }); + $scope.$on(temp.eventId,function(e,msg){ + if(temp.event && msg.info.id != temp.event){ + temp.prorefresh = ++rmd; + temp.propertyinit = -1; + temp.tarrefresh = ++rmd; + temp.targetinit = -1; + temp.operator = ""; + temp.property = ""; + if(!obj){ + temp.name = ""; + } + } + temp.event = msg.info.id; + $scope.getAttrByEvent(msg.info,function(list){ + temp.epropertyList = list; + },2); + temp.propertyShow = true; + temp.targetShow = false; + temp.propertyinitname = "请选择事件属性"; + event_name = msg.info.name; + + }); + $scope.$on(temp.propertyId,function(e,msg){ + var evObj = {id:temp.event}; + if(!msg.info.isleaf){ + temp.targetinitname = "请选择属性指标"; + temp.operator = ""; + if(temp.property && msg.info.id != temp.property){ + temp.tarrefresh = ++rmd; + temp.targetinit = -1; + if(!obj){ + temp.name = ""; + target_name = ""; + } + } + $scope.getAttrByEvent(evObj,function(list){ + var proObj = list.filter(function(item){ + return msg.info.id == item.id; + }); + var kpiList = $scope.kpiList.filter(function(item){ + return item.viewType == proObj[0].type || item.viewType == "all"; + }); + temp.targetList = kpiList; + temp.targetShow = true; + },1); + temp.property = msg.info.id; + pro_name = msg.info.name; + if(!obj){ + temp.name = target_name?(event_name + pro_name + target_name):""; + } + }else{ + temp.operator = msg.info.id; + temp.targetShow = false; + temp.targetinit = ""; + temp.property = ""; + if(!obj){ + temp.name = event_name + msg.info.name; + target_name = ""; + } + } + + }); + $scope.$on(temp.targetId,function(e,msg){ + temp.operator = msg.info.id; + temp.targetShow = true; + target_name = msg.info.name; + if(!obj){ + temp.name = event_name + pro_name + msg.info.name; + } + }); + })(temp); + $scope.currentEvent.push(temp); + } + $scope.getEventParamsNum = function(event){ + if(!event || !event.params){return $scope.maxparams;} + + var eps = event.params.filter(function(item){ + return item.show!=false; + }); + return eps.length; + } + $scope.getEventNum = function(event){ + var eps = $scope.currentEvent.filter(function(item){ + return item.show!=false; + }); + return eps.length; + } + $scope.getGroupByNum = function(event){ + var eps = $scope.groupbys.filter(function(item){ + return item.show!=false; + }); + return eps.length; + } + $scope.addEventParams = function(event,obj){ + if(!event || !event.params || $scope.getEventParamsNum(event)>=$scope.maxparams){return false;}; + rmd ++; + var tempparam = {id:"pam_"+rmd,pid:"param_"+rmd}; + if(obj){ + for(var k in obj){ + tempparam[k] = obj[k]; + } + } + $scope.event.params.push(tempparam); + } + $scope.removeEvent = function(e){ + for(var i=0;i<$scope.currentEvent.length;i++){ + if($scope.currentEvent[i].id == e.id){ + $scope.currentEvent[i].show = false; + break; + } + } + $scope.eventLen = $scope.groupbys.length-1; + } + $scope.removeGroupby = function(g){ + for(var i=0;i<$scope.groupbys.length;i++){ + if($scope.groupbys[i].id == g.id){ + $scope.groupbys[i].show = false; + break; + } + } + } + $scope.removeEventParams = function(event,param){ + for(var i=0;i<event.params.length;i++){ + if(event.params[i].id == param.id){ + event.params[i].show = false; + break; + } + } + } + $scope.$on("event",function(e,msg){ + var params = $scope.event.params; + for(var j=0;j<params.length;j++){ + if(params[j].id == msg.id){ + params[j] = msg; + break; + } + } + }); + + $scope.nameWin = function(flag){ + var eventInfo = $scope.getReportEventInfo(); + if(eventInfo.hasNull){ + ToolService.hideLoading(); + ToolService.showTips($scope.formTipMsg); + return false; + } + ToolService.showAlp(); + $scope.wantSave = true; + + $scope.currentDefine = {}; + $scope.ename = ""; + $scope.isotherSave = false; + if(angular.isDefined(flag)){ //编辑 + $scope.currentDefine = {id:0}; + $scope.isotherSave = true; + } + } + $scope.lookReport = function(){ + var eventInfo = $scope.getReportEventInfo(),condition=""; + if(!eventInfo.hasNull){ + condition = JSON.stringify(eventInfo); + UtilService.setItem($scope.appid,condition); + $scope.isShowCache = true; + $scope.query(condition); + } + else{ + ToolService.showTips($scope.formTipMsg); + return false; + } + } + $scope.closeWin = function(flag){ + $scope.wantSave = false; + $scope.wantDelete = false; + if(flag){ + if(flag == 2 && $scope.isotherSave){ + $scope.currentDefine = $scope.define; + } + } + ToolService.hideAlp(); + } + $scope.getReportEventInfo = function(){ + var hasNull = false; + var expressions = [] , group = [], + eventInfo = {relation:$scope.eventRel,params:[]}; + $scope.currentEvent.filter(function(item){ + if(item.show){ + var obj = {}; + if(item.expression){ + obj.expressionName = item.expressionName; + obj.format = item.formatId?item.formatId:"int"; + obj.expression = item.expression; + var exLen = item.expressionName.match(/[\+\-\*\/]/g); + item.extip = exLen && exLen.length>5?"表达式最多可输入5个运算符(运算符包括+-*/)":""; + if(item.expressionName){ + $scope.expresstionTransform(item); + } + item.error = !item.error && item.expressionName && !item.extip?false:true; + }else{ + var e = $scope.eventList.filter(function(e){ + return e.id == item.event; + }); + obj.attr = item.property, + obj.event = item.event, + obj.operator = item.operator; + item.proerror = (!item.property && item.operator) || item.property ?false:true; + item.eventerror = e.length>0 && item.event?false:true; + item.tarerror = item.operator?false:true; + } + obj.name = item.name; + var verPar = { + name: { + key: 'spcname', + val: item.name + } + }; + item.tip = formJudge(verPar); + item.nameerror = item.name && item.tip.succ?false:true; + + var existName = $scope.currentEvent.filter(function(event){ + return event.name == item.name && event.id!=item.id && event.show; + }); + if (existName && existName.length>0) {item.nameerror=true;} + if(item.nameerror || item.error || item.proerror + || item.eventerror || item.tarerror){ + hasNull = true; + } + expressions.push(obj); + + } + }); + $scope.groupbys.filter(function(item){ + if(item.show){ + var obj = {}; + obj.name = item.dimenId; + obj.type = item.type; + item.groerror = item.dimenId?false:true; + var existGroup = $scope.groupbys.filter(function(gro){ + return gro.dimenId == item.dimenId && gro.id != item.id && gro.show && item.type == gro.type; + }); + if (existGroup && existGroup.length>0) {item.groerror=true;} + if(item.groerror){ + hasNull = true; + } + group.push(obj); + } + }); + eventInfo.expressions = expressions; + eventInfo.group = group; + $scope.event.params.filter(function(pm){ + if(pm.show!=false){ + if(UtilService.isNullStr(pm.attr)){ + $scope.$broadcast(pm.id, "error"); + hasNull = true; + } + var pms = {}; + for(var k in pm){ + if(k!='id' && k!='pid'){ + if(k!='value'){ + pms[k] = pm[k]; + }else{ + pms[k] = pm[k].join(","); + } + if(UtilService.isNullStr(pm[k])){ + $scope.$broadcast(pm.id, "error"); + hasNull = true; + } + } + } + eventInfo.params.push(pms); + } + }); + + if(hasNull || (!$scope.ename && $scope.currentDefine.id)){ + eventInfo.hasNull = true; + } + $scope.enameerror = !$scope.ename && $scope.currentDefine.id?true:false; + return eventInfo; + + } + $scope.save = function(flag){ + var doSave = function(){ + var par = { + name: $scope.ename, + app:$scope.appid + }; + var eventInfo = $scope.getReportEventInfo(); + if(!eventInfo.hasNull){ + par.eventName = eventInfo.event; + par.eventCondition = JSON.stringify(eventInfo); + } + else{ + ToolService.showTips($scope.formTipMsg); + return false; + } + var savePM = null,txtTips = "添加成功"; + if($scope.currentDefine.id && flag!=2){ + par.id = $scope.currentDefine.id; + savePM = HttpService.putInfo("mng/eventstats/complicated/update",par); + txtTips = "修改成功"; + }else{ + savePM = HttpService.postInfo("mng/eventstats/complicated/create",par); + } + + ToolService.showLoading(); + savePM.then(function(data){ + $scope.closeWin(1); + ToolService.hideLoading(); + ToolService.showTips(txtTips); + if($scope.currentDefine.id && flag!=2){ + $scope.queryInfoByApp(2,$scope.currentDefine.id); + $scope.currentDefine = {}; + } + else{ + $scope.queryInfoByApp(1); + if($scope.isShowCache){ + localStorage.removeItem($scope.appid); + } + } + + }); + } + // if(!$scope.currentDefine.id){ + var verPar = { + name: { + key: 'spcname', + val: $scope.ename + } + }; + $scope.tip = formJudge(verPar); + if(UtilService.isNullStr($scope.ename) || $scope.tip.succ != true){ + ToolService.showTips("事件分析名称请输入20个汉字以内名称,允许字符为中英文数字_-"); + return false; + } + else{ + ToolService.showLoading(); + var existPM = HttpService.getInfo("mng/eventstats/checkName/"+$scope.appid,{eventStatsName:$scope.ename}); + existPM.then(function(data){ + if(data!=true && (!$scope.currentDefine.id || ($scope.define.name!=$scope.ename || flag==2))){ + ToolService.hideLoading(); + ToolService.showTips("事件分析名称已存在"); + } + else{ + doSave(); + } + }); + } + // } + // else{ + // ToolService.showLoading(); + // var existPM = HttpService.getInfo("mng/eventstats/checkName/"+$scope.appid,{eventStatsName:$scope.ename}); + // existPM.then(function(data){ + // if(data!=true && ($scope.define.name!=$scope.ename || flag==2)){ + // ToolService.hideLoading(); + // ToolService.showTips("名称已存在"); + // } + // else{ + // doSave(); + // } + // }); + // } + } + + $scope.eventChartConfig = { + color:ToolService.getTenColors(), + namesub:[] + }; + $scope.lsChange = rmd; + $scope.$on('flipinfo',function(e,msg){ + $scope.flipPage = msg; + $scope.lsChange++; + }); + $scope.showTempLook = false; + $scope.rateList = []; //所有指标 + $scope.rateListed = []; //选中指标 + $scope.group_List = []; //所有分组 + $scope.grouped_List = []; //选中分组 + $scope.istranfer = false;//是否行列转换 + $scope.ispercent = false;//是否显示占比 + $scope.isshowTotal = false;//是否显示汇总 + $scope.percentPre = "rate_"; //显示比例时的前缀,占比是'rate_',同比? + var queryParams = {}; + $scope.chartList = [{id:"line",name:"折线图",platform:"line"}, + {id:"columnstack",name:"柱状图",platform:"columnstack"}, + {id:"pie",name:"饼状图",platform:"pie"}]; + $scope.chartTypeInit = "line"; + + var numIndexs = ['一','二','三','四','五','六','七','八','九','十']; + $scope.query = function(condition){ + $scope.showEventWin = false; + $scope.rateFlag = 1; + + var params = ToolService.getParams($scope); + params.datatype = 'list'; + params.viewflag = $scope.timeFlag; + var ddID = null,ddname = "事件分析"; + if(condition){ //不保存直接应用 + params.eventCondition = condition; + $scope.showTempLook = true; + ddname += $scope.getTrendTitle(); + } + else{ + var cache = UtilService.getItem($scope.appid); + params.eventCondition = $scope.isShowCache?cache:$scope.define.eventCondition; + $scope.showTempLook = $scope.isShowCache?true:false; + + ddID = $scope.define.id; + ddname += '-' + $scope.define.name; + } + params.eventCondition = encodeURIComponent(params.eventCondition); + + queryParams = params; + $scope.totalList = []; + $scope.eventChartLoading = true; + $scope.chartListLoading = true; + var areport = "eventstats/complicated/query/"+$scope.appid; + + var listPM = HttpService.getInfo(areport,params); + listPM.then(function(data){ + var format = data.format,formatjson = {}; + format.filter(function(f){ + formatjson[f.field] = f.format; + }); + data.format = formatjson; + + $scope.trendList = data; + $scope.totalList = data.totalval; + + $scope.infoList = data.val; + $scope.eventChartLoading = false; + + $scope.rateList = data.selectfield; + $scope.totalVal = {}; + $scope.rateList.filter(function(rate){ + $scope.totalList.filter(function(total){ + if(!$scope.totalVal[rate]){ + $scope.totalVal[rate] = 0; + } + $scope.totalVal[rate] += total[rate]; + }); + }); + $scope.group_List = $scope.getGroupNames(data.groupfield); + $scope.grouplen = data.groupfield.length; + + if($scope.infoList.length>0){ + $scope.limit(); + if($scope.group_List.length == 0){ //没有分组情况,不显示占比 + $scope.ispercent = false; + } + $scope.changeChartData($scope.chartType); + } + else{ + $scope.myChartData = ToolService.noDataChart(); + } + + $scope.sortCol = ""; + $scope.sortCol1 = ""; + $scope.chartListLoading = false; + + if($scope.istranfer){ + $scope.transformList(); + } + else{ + $scope.pageAllList = $scope.infoList; + $timeout(function(){ + if($scope.listkey){ + $scope.reverse1 = true; + $scope.order($scope.listkey[0], true,0); + } + },300); + } + + var condjson = JSON.parse(decodeURIComponent(params.eventCondition)).expressions,newjson = []; + + ++rmd; + condjson.filter(function(item,index){ + item.id = item.orderindex = rmd + index; + item.indexname = numIndexs[index]; + newjson.push(item); + }); + $scope.condList = newjson; + + $scope.myChartDataCondition = ToolService.getChartConditions(ddname,areport,params,"complicatedevents",ddID); + },function(data){ + $scope.myChartData = ToolService.noDataChart(); + $scope.infoList = []; + $scope.totalList = []; + $scope.eventChartLoading = false; + $scope.chartListLoading = false; + }); + } + $scope.$on("chartTypeId",function(e,msg){ + if($scope.trendList){ + $scope.chartType = msg.info.id; + $scope.chartTypeInit = $scope.chartType; + $scope.changeChartData(); + } + }); + $scope.limit = function(){ + $scope.chartType = $scope.group_List.length == 0 && $scope.chartType == 'pie'?'line':$scope.chartType; + $scope.chartTypeInit = $scope.chartType; + if($scope.chartType == 'line'){ + $scope.rateListed = $scope.rateList.slice(0,1); + $scope.grouped_List = $scope.group_List.slice(0, 5); + if($scope.grouped_List.length < 2){ + $scope.rateListed = $scope.rateList.slice(0,5); + } + }else if($scope.chartType == 'columnstack'){ + $scope.rateListed = $scope.rateList.slice(0,2); + $scope.grouped_List = $scope.group_List.slice(0, 3); + }else{ + $scope.rateListed = $scope.rateList.slice(0,2); + $scope.grouped_List = $scope.group_List.slice(0); + } + + } + $scope.chartType = "line"; + //得到图的分组,同时处理成分页需要的数据格式 + $scope.getGroupNames = function(gns){ + var names = [],listArr = []; + if(gns.length == 0){ //没有分组情况下的处理 + var hasgroup = $scope.trendList.groupfield.length>0; + $scope.trendList.val.filter(function(item,index){ + var listChild = {}; + if(!hasgroup){ + listChild = item; + } + + if(item.firstDateRow){ + listChild.ds = item.ds; + listChild.groupnames = item.ds; + if(hasgroup){ + listChild.children = $scope.trendList.val.slice(index,index+item.rowNum); + } + else{ + listChild.rsnum = 1; + listChild.isrs = true; + } + listArr.push(listChild); + } + }); + } + else{ + $scope.trendList.val.filter(function(item,index){ + var temps = [],listChild = {}; + gns.filter(function(k){ + temps.push(item[k]); + }); + + var tn = temps.join(","),idx = names.indexOf(tn); + item.groupnames = tn; + if(idx == -1){ + names.push(tn); + }; + + if(item.firstDateRow){ + listChild.ds = item.ds; + listChild.groupnames = tn; + listChild.children = $scope.trendList.val.slice(index,index+item.rowNum); + listArr.push(listChild); + } + + }); + } + $scope.detailAllList = listArr; + if($scope.istranfer){ + $scope.transformList(); + } + else{ + $scope.lsChange++; + } + return names; + } + //页数变动或者数据变动,重新获取当前页展示数据 + $scope.$watch("lsChange",function(){ + if($scope.flipPage && $scope.detailAllList){ + var start = $scope.flipPage.start+1, + end = $scope.flipPage.end - 1, + pagen = $scope.flipPage.pagen, + lists = [], + index = 0, + sepcObj = null, + dataAllArr = []; + + if($scope.istranfer){ + dataAllArr = $scope.transfromAllList; + $scope.listname = $scope.transformTitle.name; + $scope.listkey = $scope.transformTitle.key; + } + else{ + dataAllArr = $scope.detailAllList; + $scope.listname = $scope.trendList.name; + $scope.listkey = $scope.trendList.columnkey; + } + // $scope.colsStyle = ToolService.getTableColsWidth($scope.listname); + + if($scope.trendList.groupfield.length>0){ + for(var i=0;i<dataAllArr.length;i++){ + var children = dataAllArr[i].children,rs = 0; + for(var j=0;j<children.length;j++){ + if(index > $scope.flipPage.start && index < $scope.flipPage.end){ + if(rs==0){ + sepcObj = children[j]; + sepcObj.rsnum = 0; + sepcObj.isrs = true; + } + else{ + children[j].isrs = false; + } + rs++; + sepcObj.rsnum++; + lists.push(children[j]); + } + index ++; + + if(pagen == lists.length){ + break; + } + } + } + $scope.currentDetailList = lists; + } + else{ + $scope.currentDetailList = dataAllArr.slice(start,end); + } + } + else{ + $scope.currentDetailList = []; + } + }); + var refreshList = function(){ + if($scope.flipPage.start > 5){ + $scope.listf5 = ++rmd; + } + else{ + $scope.lsChange++; + } + } + //行列转换或者占比 + $scope.changeFlag = function(flag){ + if(flag == 1){ + $scope.istranfer = !$scope.istranfer; + if($scope.group_List.length == 0){ + $scope.ispercent = false; + } + if($scope.istranfer){ + $scope.transformList(); + } + else{ + $scope.pageAllList = $scope.infoList; + refreshList(); + } + } + else{ + $scope.ispercent = !$scope.ispercent; + } + } + //行转换成列 + $scope.transformList = function(){ + var transArr = [], + titlename = $scope.trendList.name.slice(1,$scope.trendList.groupfield.length+1), + titlekey = $scope.trendList.groupfield.slice(0); + + titlename.push('指标'); + titlekey.push("_myzb"); + + titlename.push('合计'); + titlekey.push("_total"); + + var zero = {},allList = []; + $scope.trendList.key.filter(function(key,index){ + titlename.push(key); + titlekey.push("_ds"+(index+1)); + zero["_ds"+(index+1)] = 0; + }); + $scope.totalList.filter(function(item){ + var temps = [],transobj = {children:[]}; + $scope.trendList.groupfield.filter(function(k){ + temps.push(item[k]); + transobj[k] = item[k]; + }); + transobj.groupnames = temps.join(","); + transobj.rsnum = $scope.trendList.selectfield.length; + + $scope.trendList.selectfield.filter(function(s){ + var zb = UtilService.cloneJSON(transobj); + zb._myzb = s; + zb._total = item[s]; + // zb["rate__total"] = item["rate_"+s]; + + for(var k in zero){ + zb[k] = zero[k]; + } + if(temps.length>0){ + var prerate = 0; + $scope.detailAllList.filter(function(info){ + info.children.filter(function(child){ + if(transobj.groupnames == child.groupnames){ + var dIdx = $scope.trendList.key.indexOf(info.ds); + + var nowrate = child[s],rateprecent = 0; + zb["_ds"+(dIdx+1)] = nowrate; + if(prerate!=0){ + rateprecent = (nowrate - prerate)/prerate*100; + } + prerate = nowrate; + zb["rate__ds"+(dIdx+1)] = rateprecent; + } + }); + }); + transobj.children.push(zb); + allList.push(zb); + } + else{ //没有分组情况 + var prerate = 0; + $scope.detailAllList.filter(function(info){ + var dIdx = $scope.trendList.key.indexOf(info.ds); + + var nowrate = info[s],rateprecent = 0; + zb["_ds"+(dIdx+1)] = nowrate; + if(prerate!=0){ + rateprecent = (nowrate - prerate)/prerate*100; + } + prerate = nowrate; + zb["_ds"+(dIdx+1)] = info[s]; + zb["rate__ds"+(dIdx+1)] = rateprecent; + }); + transArr.push(zb); + allList.push(zb); + } + + }); + if(temps.length>0){ + transArr.push(transobj); + } + + }); + //重新的表头 + $scope.transformTitle = { + key:titlekey, + name:titlename + } + + $scope.transfromAllList = transArr; + $scope.pageAllList = allList; + refreshList(); + } + $scope.checkAll = function(){ + $scope.ischeckall = !$scope.ischeckall; + $scope.grouped_List = $scope.ischeckall?UtilService.cloneJSON($scope.group_List):[]; + $scope.changeChartData(); + } + //图表加显示指标 + $scope.changeRate = function(rate){ + if(!$scope.canAdd(1,rate)){return false;} + + var idx = $scope.rateListed.indexOf(rate); + if(idx>-1){ + $scope.rateListed.splice(idx,1); + } + else{ + $scope.rateListed.push(rate); + } + + $scope.changeChartData(); + } + //图表加显示分组 + $scope.changeGroup = function(group){ + if(!$scope.canAdd(2,group)){return false;} + + var idx = $scope.grouped_List.indexOf(group); + if(idx>-1){ + $scope.grouped_List.splice(idx,1); + } + else{ + $scope.grouped_List.push(group); + } + $scope.changeChartData(); + } + //当前是否还能添加指标或者分组,flag:1指标,2分组 + var lengedMax = 10; + $scope.canAdd = function(flag,cell){ + var arr = []; + if(flag==1){ + arr = $scope.rateListed; + } + else{ + arr = $scope.grouped_List; + } + var idx = arr.indexOf(cell); + if(idx==-1){ + var rl = $scope.rateListed.length,gl = $scope.grouped_List.length; + if($scope.chartType == 'line'){ + if(flag == 1){ + return (rl+1)*gl <= lengedMax; + } + else{ + return rl*(gl+1)<= lengedMax; + } + }else{ + if(flag == 1){ + return rl+1 <= ($scope.chartType == 'columnstack'?3:2); + } + else{ + return gl+1 <= ($scope.chartType == 'columnstack'?5:$scope.group_List.length); + } + } + + } + return true; + } + //根据已选的指标和分组,重新生成图表数据 + $scope.changeChartData = function(){ + $scope.eventChartConfig.namesub = []; + var xKey = $scope.trendList.key,tempData = { + key:xKey, + val:[], + name:[], + rmd : ++rmd + }; + var zero = []; + xKey.filter(function(d,index){ + zero.push(0); + }); + if($scope.chartType == "pie"){ + $scope.ischeckall = $scope.group_List.length==$scope.grouped_List.length?true:false; + $scope.eventChartConfig.flag = false; + if($scope.rateListed.length>2){ + $scope.rateListed = $scope.rateListed.slice(0,2); + } + var json = {}, grList = UtilService.cloneJSON($scope.grouped_List); + $scope.rateListed.filter(function(rate){ + var arr = []; + var totalval = 0; + $scope.grouped_List.filter(function(group){ + $scope.totalList.filter(function(total){ + var groupnames = ""; + var val = {}; + $scope.trendList.groupfield.filter(function(gid){ + groupnames += total[gid]+","; + }); + if(group == groupnames.slice(0,-1)){ + arr.push(total[rate]); + totalval += total[rate]; + } + }); + }); + if(grList.indexOf("其他")>-1){ + grList.splice(grList.indexOf("其他"),1); + } + if($scope.totalVal[rate]-totalval>0 && $scope.group_List.length>0){ + arr.push($scope.totalVal[rate]-totalval); + grList.push("其他"); + } + json[rate] = arr; + }); + $scope.myChartData.key = $scope.rateListed; + $scope.myChartData.name = grList; + if(!angular.equals({}, json)){ + $scope.myChartData.val = [json]; + }else{ + $scope.myChartData.val = []; + } + }else{ + if($scope.chartType == "columnstack"){ + $scope.eventChartConfig.flag = true; + if($scope.grouped_List.length>5){ + $scope.grouped_List = $scope.grouped_List.slice(0,5); + } + }else{ + $scope.eventChartConfig.flag = false; + var groLen = $scope.rateListed.length==1?10:$scope.rateListed.length>2?3:5; + $scope.grouped_List = $scope.grouped_List.slice(0,groLen); + } + $scope.eventChartConfig.namesub = []; + $scope.trendList.val.filter(function(item){ + var date = item.ds,gname = item.groupnames; + + if($scope.grouped_List.indexOf(gname)>-1 || $scope.grouped_List.length == 0){ + var dateIdx = xKey.indexOf(date); + + $scope.rateListed.filter(function(rate){ + var format = $scope.trendList.format[rate]; + var chartname = gname + rate; + if($scope.grouped_List.length == 0){ + chartname = rate.substring(1); //因为加了下划线,要去掉 + } + var dataIdx = tempData.name.indexOf(chartname),dataArr = []; + + if(dataIdx == -1){ + tempData.name.push(chartname); + $scope.eventChartConfig.namesub.push(format=='percent'?"%":""); + dataArr = UtilService.cloneJSON(zero); + tempData.val.push(dataArr); + } + else{ + dataArr = tempData.val[dataIdx]; + } + + var rateNum = Number(item[rate]); + if(format == 'percent'){ + rateNum = UtilService.decimal2(rateNum*100,2); + } + else if(format == 'int'){ + rateNum = Math.round(rateNum); + } + else + { + rateNum = UtilService.decimal2(rateNum,2); + } + + dataArr[dateIdx] = rateNum; + }); + } + }); + $scope.myChartData = tempData; + } + } + $scope.substrName = function(name){ + return name.substring(1); + } + + var orderBy = $filter('orderBy'); + $scope.sortCol = ""; + $scope.sortCol1 = ""; + $scope.order = function(predicate, reverse,idx) { + var outorder = false; + if($scope.istranfer && idx < $scope.trendList.groupfield.length){ + outorder = true; + } + else{ + outorder = idx==0; + } + var dataAllArr = []; + if($scope.istranfer){ + dataAllArr = $scope.transfromAllList; + } + else{ + dataAllArr = $scope.detailAllList; + } + + if(!outorder && $scope.trendList.groupfield.length == 0){ //么有分组情况 + $scope.sortCol = predicate; + $scope.mysort(dataAllArr, predicate, reverse); + } + else{ + if(!outorder){ + $scope.sortCol = predicate; + $scope.mysort($scope.totalList, predicate, reverse); + dataAllArr.filter(function(item){ + $scope.mysort(item.children, predicate, reverse); + }); + } + else{//第一列的日期排序 + $scope.sortCol1 = predicate; + $scope.mysort(dataAllArr, predicate, reverse); + } + } + + refreshList(); + }; + $scope.mysort = function(tempArr,key,flag){ + if (flag==true) { + tempArr.sort(function(x, y) { + return x[key] == y[key] ? 0 : (x[key] > y[key] ? -1 : 1); + }); + } else { + tempArr.sort(function(x, y) { + return x[key] == y[key] ? 0 : (x[key] > y[key] ? 1 : -1); + }); + } + } + $scope.$watch("appid+defineFlag+timeFlag+date.startDate+date.endDate",function(e){ + if(angular.isDefined($scope.appid) && (angular.isDefined($scope.defineFlag) || $scope.isShowCache)){ + $scope.query(); + } + }); + $scope.$watch("appid",function(n){ + if(angular.isDefined(n)){ + $scope.lengedNames = []; + $scope.defineFlag = undefined; + $scope.queryInfoByApp(5); + } + }); + + var haschangeOrder = false; + $scope.showOrderList = function(){ + $scope.showOrderWin = true; + haschangeOrder = false; + ToolService.showAlp(); + } + $scope.closeOrder = function(){ + $scope.showOrderWin = false; + ToolService.hideAlp(); + } + $scope.okOrderWin = function(){ + $scope.closeOrder(); + if(!haschangeOrder){return false;} + + ToolService.showLoading(); + var condition = JSON.parse(decodeURIComponent($scope.define.eventCondition)); + $scope.condList.filter(function(item){ + delete item.id; + delete item.orderindex; + delete item.indexname; + }); + condition.expressions = $scope.condList; + var par = { + name: $scope.define.name, + app:$scope.appid, + id:$scope.define.id, + eventCondition:JSON.stringify(condition) + }; + var savePM = HttpService.putInfo("mng/eventstats/complicated/update",par); + savePM.then(function(data){ + ToolService.hideLoading(); + $scope.queryInfoByApp(2,$scope.define.id); + }); + + } + $scope.$on("dragorder",function(event,msg){ + var curid = msg.id,replaceId = msg.index; + var curIdx = 0,replaceIdx = 0; + + $scope.condList.filter(function(item,index){ + if(item.id === curid){ + curIdx = index; + } + if(item.id === replaceId){ + replaceIdx = index; + } + }); + + var newArr = UtilService.cloneJSON($scope.condList); + if(curIdx > 0 || replaceIdx > 0){ + var curobj = UtilService.cloneJSON(newArr[replaceIdx]); + newArr.splice(replaceIdx,1,newArr[curIdx]); + newArr.splice(curIdx,1,curobj); + } + ++rmd; + newArr.filter(function(item,index){ + item.id = item.orderindex = rmd + index; + item.indexname = numIndexs[index]; + }); + + $scope.$apply(function(){ + $scope.condList = newArr; + }); + haschangeOrder = true; + }); + } + + var sectionTool = { + //获取光标位置 + getCursortPosition:function(textDom) { + var cursorPos = 0; + if (document.selection) { + // IE Support + textDom.focus (); + var selectRange = document.selection.createRange(); + selectRange.moveStart ('character', -textDom.value.length); + cursorPos = selectRange.text.length; + } + else if (textDom.selectionStart || textDom.selectionStart == '0') { + // Firefox support + cursorPos = textDom.selectionStart; + } + return cursorPos; + }, + //设置光标位置 + setCaretPosition:function(textDom, pos){ + if(textDom.setSelectionRange) { + // IE Support + textDom.focus(); + textDom.setSelectionRange(pos, pos); + } + else if (textDom.createTextRange) { + // Firefox support + var range = textDom.createTextRange(); + range.collapse(true); + range.moveEnd('character', pos); + range.moveStart('character', pos); + range.select(); + } + }, + //光标后插入文本 + insertAfterText:function(textDom, value) { + var selectRange; + if (document.selection) { + // IE Support + textDom.focus(); + selectRange = document.selection.createRange(); + selectRange.text = value; + textDom.focus(); + } + else if (textDom.selectionStart || textDom.selectionStart == '0') { + // Firefox support + var startPos = textDom.selectionStart; + var endPos = textDom.selectionEnd; + var scrollTop = textDom.scrollTop; + textDom.value = textDom.value.substring(0, startPos) + value + textDom.value.substring(endPos, textDom.value.length); + textDom.focus(); + textDom.selectionStart = startPos + value.length; + textDom.selectionEnd = startPos + value.length; + textDom.scrollTop = scrollTop; + } + else { + textDom.value += value; + textDom.focus(); + } + } + } +})(); diff --git a/src/main/websrc/js/collect/expiration.js b/src/main/websrc/js/collect/expiration.js new file mode 100644 index 0000000..43d3480 --- /dev/null +++ b/src/main/websrc/js/collect/expiration.js @@ -0,0 +1,9 @@ +(function(){ + angular.module("app.collect") + .controller("expirationCtrl",["$rootScope","$scope","HttpService","ToolService","$filter","UtilService",expirationCtrl]); + + function expirationCtrl($rootScope,$scope,HttpService,ToolService,$filter,UtilService){ + //$rootScope.mainMenu = 'behavior'; + //alert($rootScope.pagePath); + } +})(); \ No newline at end of file diff --git a/src/main/websrc/js/collect/funnel.js b/src/main/websrc/js/collect/funnel.js new file mode 100644 index 0000000..fe161c6 --- /dev/null +++ b/src/main/websrc/js/collect/funnel.js @@ -0,0 +1,649 @@ +(function(){ + angular.module("app.collect") + .controller("funnelCtrl",["$scope","$rootScope","HttpService","ToolService","$state","$stateParams","UtilService","$q",funnelCtrl]); + + function funnelCtrl($scope,$rootScope,HttpService,ToolService,$state,$stateParams,UtilService,$q){ + var fid = $stateParams.pageid; + $scope.addFirst = false; + $scope.addFirstFunnel = function(){ + $scope.addFirst = true; + $scope.showEventWin = true; + $scope.currentFunnel = {}; + $scope.isEditInfo = 2; + $scope.initFunnel(); + } + var rmd = new Date().getTime(); + var eventPM = null; + $scope.queryInfoByApp = function(flag,id){ + if(angular.isUndefined(flag) || flag == 5){ + //app下所有事件 + eventPM = HttpService.getInfo($scope.appid+"/event/find"); + eventPM.then(function(data){ + $scope.eventListAll = data; + $scope.eventList = $scope.eventListAll.filter(function(item){ + return item.eventName != 'install'; + }); + }); + //通用属性 + var profilePM = HttpService.getInfo($scope.appid+"/event/find/allAttr"); + profilePM.then(function(data){ + data.unshift({"dimensionType":"whole",id:"-all",name:"总体",type:"string"}); + + for(var i=0; i< data.length; i++){ + if(data[i].dimensionType == 'population' || data[i].dimensionType == 'source'){ + data[i].dimensionType = 'eventlist'; + } + } + $scope.dimensionList = data; + }); + } + + var funPM = HttpService.getInfo("funnel/find/"+$scope.appid); + funPM.then(function(data){ + $scope.funnelList = data; + $scope.isEditInfo = 1; + if(data.length>0){ + if(!UtilService.isNullStr(fid)){ + id = fid; + } + if(!UtilService.isNullStr(id)){ + var has = false; + for(var i=0;i<$scope.funnelList.length;i++){ + if($scope.funnelList[i].id == id){ + $scope.funnelInfo = $scope.funnelList[i]; + has = true; + break; + } + } + if(has){//修改 + if(!UtilService.isNullStr(fid)){ + $scope.clickFunnel($scope.funnelInfo); + fid = null; + } + else{ + $scope.defineFlag = ++rmd; + } + } + else if(!has && $scope.funnelInfo.id == id){ //删除当前 + $scope.clickFunnel(data[0]); + } + + } + else{ + $scope.clickFunnel(data[0]); + } + } + else{ + $scope.addFirst = false; + $scope.funnelInfo = {}; + } + if(flag == 5){ + $scope.dimenRmd = ++rmd; + } + }); + } + + //选择按设备或者按用户 + /*$scope.deviceList = ToolService.getDeviceTypeList(); + $scope.deviceInit = $scope.deviceList[0].id; + $scope.$on("deviceId",function(e,msg){ + $scope.seeFlag = msg.info.id; + });*/ + $scope.deviceId = false; + + $scope.dimensionname = "维度对比"; + $scope.usergroupid = -1; + $scope.$on("dimensionId",function(e,msg){ + $scope.dimenId = msg.info.id; + $scope.dimenObj = msg.info; + $scope.dimenEventType = msg.info.eventType; + + if($scope.dimenId == 'usergroup' && $scope.usergroupid == -1){ + $scope.lengedNames = ["整体"]; + $scope.dimenugkeys = UtilService.cloneJSON(msg.info.key); + $scope.dimenugkeys.unshift("all"); + + msg.info.value.filter(function(item){ + $scope.lengedNames.push(item); + }); + + $scope.usergroupid = msg.info.key[0]; + } + else{ + $scope.usergroupid = -1; + } + }); + + $scope.date = ToolService.getLastDays(-7,0); + $scope.$on("dateCustos",function(e,msg){ + $scope.date = msg; + }); + $scope.$watch("date",function(){ + if(angular.isDefined($scope.date)){ + $scope.datestr = $scope.date.startDate + "至" + $scope.date.endDate; + } + }); + + //已保存的事件 + $scope.definename = "请选择漏斗"; + $scope.clickFunnel = function(m){ + $scope.funnelInfo = m; + $scope.ename = m.name; + $scope.defineFlag = ++rmd; + $scope.showEventWin = false; + $scope.isEditInfo = 1; + $rootScope.thirdtab = m.name; + } + $scope.deleteFunnel = function(d){ + $scope.delDefine = d; + ToolService.showAlp(); + ToolService.showLoading(); + var validPM = HttpService.getInfo("custommenu/delete/valid/"+d.id+"?type=funnel"); + validPM.then(function(data){ + ToolService.hideLoading(); + $scope.wantDelete = true; + $scope.custommenus = angular.isArray(data) && data.length>0?data:false; + }); + } + $scope.doDelete = function(){ + $scope.closeWin(); + ToolService.showLoading(); + var deletePM = HttpService.deleteInfo("mng/funnel/delete/"+$scope.delDefine.id); + deletePM.then(function(){ + ToolService.showTips("删除成功"); + $scope.queryInfoByApp(3,$scope.delDefine.id); + ToolService.hideLoading(); + }); + } + $scope.closeAddWin = function(){ + $scope.showEventWin = false; + $scope.isEditInfo = 1; + $scope.addFirst = false; + } + + $scope.eventinitname = "请选择事件"; + $scope.getEventNum = function(){ + if(!$scope.eventInfo){return 20;} + + var es = $scope.eventInfo.filter(function(item){ + return item.show!=false; + }); + return es.length; + } + $scope.setEventSteps = function(){ + if(!$scope.eventInfo){return 20;} + + var idx = -1; + var len = $scope.eventInfo.length; + $scope.eventInfo.filter(function(item,i){ + if(item.show!=false){ + idx ++; + item.steps = ['一','二','三','四','五','六','七','八','九','十'][idx]; + item.style = {'z-index':len-i}; + } + }); + } + $scope.maxStep = 7; + $scope.addEvent = function(obj){ + if($scope.getEventNum()>=$scope.maxStep){return false;} + + rmd ++; + var temp = {id:"evt_"+rmd,eventid:"event_"+rmd,relation:"and"}; + + if(obj){ + for(var k in obj){ + temp[k] = obj[k]; + } + temp.eventinit = obj.event; + } + (function(temp){ + $scope.$on(temp.eventid,function(e,msg){ + temp.params = []; + temp.event = msg.info.eventName; + temp.nullevent = false; + var setparams = function(){ + temp.paramsList = msg.info.profiles; + if(temp.oldparams){ + temp.oldparams.filter(function(item){ + $scope.addEventParams(temp,item); + }); + delete temp.oldparams; + } + } + if(angular.isArray(msg.info.profiles)){ + setparams(msg.info.profiles); + } + else{ + var proPM = HttpService.getInfo($scope.appid+"/event/find/param?names="+temp.event); + proPM.then(function(data){ + msg.info.profiles = data[0].profiles; + setparams(); + }); + } + }); + })(temp); + + $scope.eventInfo.push(temp); + $scope.setEventSteps(); + } + $scope.removeEvent = function(event){ + if($scope.getEventNum()<=2){ + ToolService.showTips("漏斗步骤不能少于2步"); + return false; + } + + for(var i=0;i<$scope.eventInfo.length;i++){ + if($scope.eventInfo[i].id == event.id){ + $scope.eventInfo[i].show = false; + break; + } + } + $scope.setEventSteps(); + } + $scope.changeRel = function(event){ + event.relation = event.relation == 'and' ? "or" : 'and'; + } + $scope.getEventParamsNum = function(event){ + if(!event.params){return 5;} + + var eps = event.params.filter(function(item){ + return item.show!=false; + }); + return eps.length; + } + $scope.addEventParams = function(event,obj){ + if(!event.params || $scope.getEventParamsNum(event)>=3){return false;}; + rmd ++; + var tempparam = {id:"pam_"+rmd,pid:event.id}; + if(obj){ + for(var k in obj){ + tempparam[k] = obj[k]; + } + } + event.params.push(tempparam); + } + $scope.removeEventParams = function(event,param){ + for(var i=0;i<event.params.length;i++){ + if(event.params[i].id == param.id){ + event.params[i].show = false; + break; + } + } + } + $scope.$on("event",function(e,msg){ + for(var i=0;i<$scope.eventInfo.length;i++){ + if($scope.eventInfo[i].id == msg.pid){ + var params = $scope.eventInfo[i].params; + for(var j=0;j<params.length;j++){ + if(params[j].id == msg.id){ + params[j] = msg; + break; + } + } + } + } + }); + + $scope.dayList = [ + {id:1,name:"1天"}, + {id:2,name:"2天"}, + {id:3,name:"3天"}, + {id:4,name:"4天"}, + {id:5,name:"5天"}, + {id:6,name:"6天"}, + {id:7,name:"7天"} + ]; + + $scope.windowsinit = $scope.dayList[0].id; + $scope.$on("windows",function(e,msg){ + $scope.windows = msg.info.id; + }); + $scope.eventInfo = []; + $scope.initFunnel = function(flag){ + $scope.eventInfo.filter(function(item){ + item.show = false; + }); + if(flag){ + $scope.ename = $scope.funnelInfo.name; + $scope.windowsinit = $scope.funnelInfo.window; + + ToolService.showLoading(); + $q.all([eventPM]).then(function(data){ + var eventInfo = JSON.parse($scope.funnelInfo.eventInfo),evts = [],evtvals = []; + eventInfo.filter(function(item){ + var temp = {event:item.event,param:[]}; + var pppm = UtilService.cloneJSON(item.params); + pppm.filter(function(pm){ + temp.param.push(pm.attr); + }); + evts.push(item.event); + evtvals.push(temp); + }); + var evtprofilePM = HttpService.getInfo($scope.appid+"/event/find/param?names="+evts.join(",")+"¶ms="+JSON.stringify(evtvals)); + evtprofilePM.then(function(pros){ + pros.filter(function(evt){ + for(var i=0;i<$scope.eventList.length;i++){ + if(evt.eventName == $scope.eventList[i].eventName){ + $scope.eventList[i].profiles = evt.profiles; + break; + } + } + }); + + eventInfo.filter(function(e){ + if(JSON.stringify($scope.eventList).indexOf(e.event) > -1){ + e.oldparams = UtilService.cloneJSON(e.params); + } + delete e.params; + $scope.addEvent(e); + }); + ToolService.hideLoading(); + }); + }); + } + else{ + $scope.addEvent(); + $scope.addEvent(); + } + }; + + $scope.isEditInfo = 1; + $scope.addFunnel = function(flag){ + if(flag){ //修改 + if(!$scope.funnelInfo || !$scope.funnelInfo.id || $scope.isEditInfo==2){return false;} + $scope.isEditInfo = 3; + $scope.currentFunnel = $scope.funnelInfo; + }else{ + $scope.isEditInfo = 2; + $scope.currentFunnel = {}; + } + $scope.initFunnel(flag); + $scope.showEventWin = true; + } + $scope.initCondition = function(){ + if($scope.canSave()){ + $scope.initFunnel(); + } + } + + $scope.getFunnelEventInfo = function(){ + var hasNull = false; + var eventInfo = [],myEvents = []; + + $scope.eventInfo.filter(function(item){ + if(item.show!=false && JSON.stringify($scope.eventList).indexOf(item.event) < 0){ + item.nullevent = true; + hasNull = true; + } + if(item.show!=false && JSON.stringify($scope.eventList).indexOf(item.event) > -1){ + var temp = {event:item.event,relation:item.relation,params:[]}; + if(UtilService.isNullStr(item.event)){ + item.nullevent = true; + hasNull = true; + } + else{ + item.nullevent = false; + item.params.filter(function(pm){ + if(pm.show!=false){ + var pms = {}; + for(var k in pm){ + if(k!='id' && k!='pid'){ + if(k!='value'){ + pms[k] = pm[k]; + }else{ + pms[k] = pm[k].join(","); + } + if(UtilService.isNullStr(pm[k])){ + $scope.$broadcast(pm.id, "null"); + hasNull = true; + } + } + } + temp.params.push(pms); + } + }); + } + eventInfo.push(temp); + myEvents.push(item.event); + } + }); + + if(!hasNull && eventInfo.length>0){ + return { + eventInfo:JSON.stringify(eventInfo), + events : myEvents.join(",") + } + } + else{ + return {}; + } + } + + $scope.nameWin = function(flag){ + var nowEvents = $scope.getFunnelEventInfo(); + if(!nowEvents.events){ + ToolService.showTips($scope.formTipMsg); + return false; + } + + ToolService.showAlp(); + $scope.wantSave = true; + + $scope.ename = ""; + if(flag){ + $scope.currentFunnel = {id:0}; + } + } + $scope.closeWin = function(flag){ + $scope.wantSave = false; + $scope.wantDelete = false; + if(flag){ + if(flag == 2 && $scope.isEditInfo == 3){ + $scope.currentFunnel = $scope.funnelInfo; + } + else{ + $scope.showEventWin = false; + } + } + ToolService.hideAlp(); + } + $scope.canSave = function(){ + if(!$scope.eventInfo || $scope.eventInfo.length == 0){return false;} + + var can = false; + for(var i=0;i<$scope.eventInfo.length;i++){ + var temp = $scope.eventInfo[i]; + if(temp.show != false && temp.event){ + can = true; + break; + } + } + return can; + } + $scope.save = function(){ + var doSave = function(){ + var par = { + name: $scope.ename, + app:$scope.appid, + window:$scope.windows + }; + + var nowEvents = $scope.getFunnelEventInfo(); + if(nowEvents.events){ + par.eventInfo = nowEvents.eventInfo; + par.events = nowEvents.events; + } + else{ + ToolService.showTips($scope.formTipMsg); + return false; + } + + var savePM = null,txtTips = "添加成功"; + if($scope.currentFunnel.id){ + par.id = $scope.currentFunnel.id; + savePM = HttpService.putInfo("mng/funnel/update",par); + txtTips = "修改成功"; + }else{ + savePM = HttpService.postInfo("mng/funnel/create",par); + } + ToolService.showLoading(); + savePM.then(function(data){ + $scope.closeWin(1); + ToolService.hideLoading(); + ToolService.showTips(txtTips); + $scope.queryInfoByApp(1,$scope.currentFunnel.id) + }); + } + + if(!$scope.currentFunnel.id || $scope.currentFunnel.id==0){ + var verPar = { + name: { + key: 'spcname', + val: $scope.ename + } + }; + $scope.tip = formJudge(verPar); + if(UtilService.isNullStr($scope.ename) || $scope.tip.succ != true){ + ToolService.showTips("请输入20个汉字以内名称,允许字符为中英文数字_-"); + return false; + } + else{ + ToolService.showLoading(); + var existPM = HttpService.getInfo("mng/funnel/valid/"+$scope.appid,{name:$scope.ename}); + existPM.then(function(data){ + if(data==true){ + ToolService.hideLoading(); + ToolService.showTips("名称已存在"); + } + else{ + doSave(); + } + }); + } + } + else{ + doSave(); + } + } + + $scope.dimenInit = $scope.dimenId = "-all"; + $scope.$watch("appid",function(n){ + if(angular.isDefined(n)){ + $scope.dimenId = "-all"; + $scope.lengedNames = []; + $scope.funnelInfo = {}; + $scope.queryInfoByApp(5); + } + }); + + $scope.chartKey = []; + $scope.chartConfig = {color:['#5fb5f1','#e6e6e6'],legend:false,ispercent:true}; + $scope.queryList = function(){ + var params = { + startdate:$scope.date.startDate, + enddate:$scope.date.endDate, + appid:$scope.appid + }; + params.datatype = "list"; + params.eventType = $scope.dimenEventType; + if($scope.dimenId && $scope.dimenId!='-all'){ + params.dimention = $scope.dimenId; + if(params.dimention == 'usergroup'){ + if($scope.usergroupid==-1){return false;} + params.usergroupid = $scope.usergroupid; + } + } + params.isdevice = $scope.seeFlag == 'device'; + $scope.chartConfig.isdevice = params.isdevice; + //列表 + var areport = "funnel/report/"+$scope.funnelInfo.id; + var listPM = HttpService.getInfo(areport,params); + $scope.listInfoLoading = true; + + $scope.chartLoading = true; + + $scope.currentChartName = ""; + listPM.then(function(data){ + $scope.listInfoData = data; + $scope.listInfoLoading = false; + + $scope.chartListInfo = data.val; + if(params.dimention){ + $scope.listInfoData.name[0] = $scope.dimenObj.name; + + if(params.dimention!='usergroup'){ + $scope.lengedNames = []; + var col1 = data.columnkey[0]; + $scope.chartListInfo.filter(function(item){ + $scope.lengedNames.push(item[col1]); + }); + } + } + $scope.chartKey = $scope.listInfoData.key; + $scope.chartKeyName = $scope.listInfoData.eventname; + + if(params.dimention=='usergroup'){ + $scope.setFunnelData(1); + } + else{ + $scope.setFunnelData(0); + } + + $scope.listInfoDataCondition = ToolService.getChartConditions("漏斗转化-"+$scope.funnelInfo.name,areport,params,"funnel",$scope.funnelInfo.id); + },function(data){ + // $scope.errorBack(data.message); + $scope.chartData = ToolService.noDataChart(); + $scope.listInfoData = {}; + $scope.listInfoLoading = false; + $scope.chartLoading = false; + }); + } + + $scope.currentChartName = ""; + $scope.setFunnelData = function(idx,flag){ + if(flag && flag == 1){ + idx = $scope.lengedNames.indexOf(idx); + } + var fdata = $scope.chartListInfo[idx]; + //用户分群页面点击 + if($scope.dimenId == 'usergroup' && flag && flag == 1){ + if(idx > 0 && $scope.dimenugkeys.indexOf($scope.usergroupid) != idx){ + $scope.usergroupid = $scope.dimenugkeys[idx]; + return false; + } + if(idx>0){ + fdata = $scope.chartListInfo[1]; + } + } + + if($scope.lengedNames && $scope.lengedNames.length>0){ + if($scope.currentChartName == $scope.lengedNames[idx]){ + return false; + } + else{ + $scope.currentChartName = $scope.lengedNames[idx] + } + } + else{ + $scope.currentChartName = "整体"; + } + $scope.chartLoading = false; + $scope.chartData = ToolService.getFunnelData(fdata,$scope.chartKey,$scope.chartKeyName); + } + $scope.getChartStyle = function(n){ + var idx = $scope.lengedNames.indexOf(n); + if( ($scope.dimenId!='usergroup' && $scope.currentChartName == $scope.lengedNames[idx]) || ($scope.dimenId=='usergroup' && (($scope.currentChartName != "整体" && $scope.dimenugkeys.indexOf($scope.usergroupid) == idx) || ($scope.currentChartName == "整体" && idx == 0)))){ + return {"background-color":$scope.chartConfig.color[0],"border-color":"transparent"}; + } + else{ + return {}; + } + } + + $scope.$watch("date.startDate+date.endDate+defineFlag+seeFlag+dimenId+usergroupid",function(n){ + if(angular.isUndefined($scope.appid) || angular.isUndefined($scope.date) || angular.isUndefined($scope.funnelInfo) || !$scope.funnelInfo.id){return false;} + + $scope.queryList(); + }); + } +})(); diff --git a/src/main/websrc/js/common/angular-animate.min.js b/src/main/websrc/js/common/angular-animate.min.js new file mode 100644 index 0000000..9461603 --- /dev/null +++ b/src/main/websrc/js/common/angular-animate.min.js @@ -0,0 +1,56 @@ +/* + AngularJS v1.4.8 + (c) 2010-2015 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(H,u,Sa){'use strict';function wa(a,b,c){if(!a)throw ngMinErr("areq",b||"?",c||"required");return a}function xa(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;X(a)&&(a=a.join(" "));X(b)&&(b=b.join(" "));return a+" "+b}function Ia(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function T(a,b,c){var d="";a=X(a)?a:a&&I(a)&&a.length?a.split(/\s+/):[];q(a,function(a,s){a&&0<a.length&&(d+=0<s?" ":"",d+=c?b+a:a+b)});return d}function Ja(a){if(a instanceof L)switch(a.length){case 0:return[]; +case 1:if(1===a[0].nodeType)return a;break;default:return L(ma(a))}if(1===a.nodeType)return L(a)}function ma(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(1==c.nodeType)return c}}function Ka(a,b,c){q(b,function(b){a.addClass(b,c)})}function La(a,b,c){q(b,function(b){a.removeClass(b,c)})}function N(a){return function(b,c){c.addClass&&(Ka(a,b,c.addClass),c.addClass=null);c.removeClass&&(La(a,b,c.removeClass),c.removeClass=null)}}function ia(a){a=a||{};if(!a.$$prepared){var b=a.domOperation|| +M;a.domOperation=function(){a.$$domOperationFired=!0;b();b=M};a.$$prepared=!0}return a}function da(a,b){ya(a,b);za(a,b)}function ya(a,b){b.from&&(a.css(b.from),b.from=null)}function za(a,b){b.to&&(a.css(b.to),b.to=null)}function Q(a,b,c){var d=(b.addClass||"")+" "+(c.addClass||""),e=(b.removeClass||"")+" "+(c.removeClass||"");a=Ma(a.attr("class"),d,e);c.preparationClasses&&(b.preparationClasses=Y(c.preparationClasses,b.preparationClasses),delete c.preparationClasses);d=b.domOperation!==M?b.domOperation: +null;Aa(b,c);d&&(b.domOperation=d);b.addClass=a.addClass?a.addClass:null;b.removeClass=a.removeClass?a.removeClass:null;return b}function Ma(a,b,c){function d(a){I(a)&&(a=a.split(" "));var b={};q(a,function(a){a.length&&(b[a]=!0)});return b}var e={};a=d(a);b=d(b);q(b,function(a,b){e[b]=1});c=d(c);q(c,function(a,b){e[b]=1===e[b]?null:-1});var s={addClass:"",removeClass:""};q(e,function(b,c){var e,d;1===b?(e="addClass",d=!a[c]):-1===b&&(e="removeClass",d=a[c]);d&&(s[e].length&&(s[e]+=" "),s[e]+=c)}); +return s}function B(a){return a instanceof u.element?a[0]:a}function Na(a,b,c){var d="";b&&(d=T(b,"ng-",!0));c.addClass&&(d=Y(d,T(c.addClass,"-add")));c.removeClass&&(d=Y(d,T(c.removeClass,"-remove")));d.length&&(c.preparationClasses=d,a.addClass(d))}function ja(a,b){var c=b?"-"+b+"s":"";ea(a,[fa,c]);return[fa,c]}function na(a,b){var c=b?"paused":"",d=U+"PlayState";ea(a,[d,c]);return[d,c]}function ea(a,b){a.style[b[0]]=b[1]}function Y(a,b){return a?b?a+" "+b:a:b}function Ba(a,b,c){var d=Object.create(null), +e=a.getComputedStyle(b)||{};q(c,function(a,b){var c=e[a];if(c){var v=c.charAt(0);if("-"===v||"+"===v||0<=v)c=Oa(c);0===c&&(c=null);d[b]=c}});return d}function Oa(a){var b=0;a=a.split(/\s*,\s*/);q(a,function(a){"s"==a.charAt(a.length-1)&&(a=a.substring(0,a.length-1));a=parseFloat(a)||0;b=b?Math.max(a,b):a});return b}function oa(a){return 0===a||null!=a}function Ca(a,b){var c=O,d=a+"s";b?c+="Duration":d+=" linear all";return[c,d]}function Da(){var a=Object.create(null);return{flush:function(){a=Object.create(null)}, +count:function(b){return(b=a[b])?b.total:0},get:function(b){return(b=a[b])&&b.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}function Ea(a,b,c){q(c,function(c){a[c]=V(a[c])?a[c]:b.style.getPropertyValue(c)})}var M=u.noop,Aa=u.extend,L=u.element,q=u.forEach,X=u.isArray,I=u.isString,pa=u.isObject,qa=u.isUndefined,V=u.isDefined,Fa=u.isFunction,ra=u.isElement,O,sa,U,ta;qa(H.ontransitionend)&&V(H.onwebkittransitionend)?(O="WebkitTransition",sa="webkitTransitionEnd transitionend"): +(O="transition",sa="transitionend");qa(H.onanimationend)&&V(H.onwebkitanimationend)?(U="WebkitAnimation",ta="webkitAnimationEnd animationend"):(U="animation",ta="animationend");var ka=U+"Delay",ua=U+"Duration",fa=O+"Delay";H=O+"Duration";var Pa={transitionDuration:H,transitionDelay:fa,transitionProperty:O+"Property",animationDuration:ua,animationDelay:ka,animationIterationCount:U+"IterationCount"},Qa={transitionDuration:H,transitionDelay:fa,animationDuration:ua,animationDelay:ka};u.module("ngAnimate", +[]).directive("ngAnimateChildren",[function(){return function(a,b,c){a=c.ngAnimateChildren;u.isString(a)&&0===a.length?b.data("$$ngAnimateChildren",!0):c.$observe("ngAnimateChildren",function(a){b.data("$$ngAnimateChildren","on"===a||"true"===a)})}}]).factory("$$rAFScheduler",["$$rAF",function(a){function b(a){d=d.concat(a);c()}function c(){if(d.length){for(var b=d.shift(),h=0;h<b.length;h++)b[h]();e||a(function(){e||c()})}}var d,e;d=b.queue=[];b.waitUntilQuiet=function(b){e&&e();e=a(function(){e= +null;b();c()})};return b}]).factory("$$AnimateRunner",["$q","$sniffer","$$animateAsyncRun",function(a,b,c){function d(a){this.setHost(a);this._doneCallbacks=[];this._runInAnimationFrame=c();this._state=0}d.chain=function(a,b){function c(){if(d===a.length)b(!0);else a[d](function(a){!1===a?b(!1):(d++,c())})}var d=0;c()};d.all=function(a,b){function c(h){v=v&&h;++d===a.length&&b(v)}var d=0,v=!0;q(a,function(a){a.done(c)})};d.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state? +a():this._doneCallbacks.push(a)},progress:M,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},"finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end(); +this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel();this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._runInAnimationFrame(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(q(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=2)}};return d}]).factory("$$animateAsyncRun",["$$rAF",function(a){function b(b){c.push(b);1<c.length||a(function(){for(var a=0;a<c.length;a++)c[a]();c=[]})}var c=[];return function(){var a= +!1;b(function(){a=!0});return function(c){a?c():b(c)}}}]).provider("$$animateQueue",["$animateProvider",function(a){function b(a,b,c,q){return d[a].some(function(a){return a(b,c,q)})}function c(a,b){a=a||{};var c=0<(a.addClass||"").length,d=0<(a.removeClass||"").length;return b?c&&d:c||d}var d=this.rules={skip:[],cancel:[],join:[]};d.join.push(function(a,b,d){return!b.structural&&c(b.options)});d.skip.push(function(a,b,d){return!b.structural&&!c(b.options)});d.skip.push(function(a,b,c){return"leave"== +c.event&&b.structural});d.skip.push(function(a,b,c){return c.structural&&2===c.state&&!b.structural});d.cancel.push(function(a,b,c){return c.structural&&b.structural});d.cancel.push(function(a,b,c){return 2===c.state&&b.structural});d.cancel.push(function(a,b,c){a=b.options;c=c.options;return a.addClass&&a.addClass===c.removeClass||a.removeClass&&a.removeClass===c.addClass});this.$get=["$$rAF","$rootScope","$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$jqLite", +"$$forceReflow",function(d,s,h,g,v,r,$,u,R,C){function D(){var a=!1;return function(b){a?b():s.$$postDigest(function(){a=!0;b()})}}function K(a,b,c){var f=B(b),d=B(a),n=[];(a=t[c])&&q(a,function(a){a.node.contains(f)?n.push(a.callback):"leave"===c&&a.node.contains(d)&&n.push(a.callback)});return n}function l(a,f,k){function n(b,c,f,t){R(function(){var b=K(v,a,c);b.length&&d(function(){q(b,function(b){b(a,f,t)})})});b.progress(c,f,t)}function t(b){var c=a,f=k;f.preparationClasses&&(c.removeClass(f.preparationClasses), +f.preparationClasses=null);f.activeClasses&&(c.removeClass(f.activeClasses),f.activeClasses=null);Ha(a,k);da(a,k);k.domOperation();h.complete(!b)}var A,v;if(a=Ja(a))A=B(a),v=a.parent();k=ia(k);var h=new $,R=D();X(k.addClass)&&(k.addClass=k.addClass.join(" "));k.addClass&&!I(k.addClass)&&(k.addClass=null);X(k.removeClass)&&(k.removeClass=k.removeClass.join(" "));k.removeClass&&!I(k.removeClass)&&(k.removeClass=null);k.from&&!pa(k.from)&&(k.from=null);k.to&&!pa(k.to)&&(k.to=null);if(!A)return t(),h; +var z=[A.className,k.addClass,k.removeClass].join(" ");if(!Ra(z))return t(),h;var l=0<=["enter","move","leave"].indexOf(f),g=!G||F.get(A),z=!g&&m.get(A)||{},C=!!z.state;g||C&&1==z.state||(g=!la(a,v,f));if(g)return t(),h;l&&y(a);g={structural:l,element:a,event:f,close:t,options:k,runner:h};if(C){if(b("skip",a,g,z)){if(2===z.state)return t(),h;Q(a,z.options,k);return z.runner}if(b("cancel",a,g,z))if(2===z.state)z.runner.end();else if(z.structural)z.close();else return Q(a,z.options,g.options),z.runner; +else if(b("join",a,g,z))if(2===z.state)Q(a,k,{});else return Na(a,l?f:null,k),f=g.event=z.event,k=Q(a,z.options,g.options),z.runner}else Q(a,k,{});(C=g.structural)||(C="animate"===g.event&&0<Object.keys(g.options.to||{}).length||c(g.options));if(!C)return t(),w(a),h;var u=(z.counter||0)+1;g.counter=u;x(a,1,g);s.$$postDigest(function(){var b=m.get(A),d=!b,b=b||{},K=0<(a.parent()||[]).length&&("animate"===b.event||b.structural||c(b.options));if(d||b.counter!==u||!K){d&&(Ha(a,k),da(a,k));if(d||l&&b.event!== +f)k.domOperation(),h.end();K||w(a)}else f=!b.structural&&c(b.options,!0)?"setClass":b.event,x(a,2),b=r(a,f,b.options),b.done(function(b){t(!b);(b=m.get(A))&&b.counter===u&&w(B(a));n(h,f,"close",{})}),h.setHost(b),n(h,f,"start",{})});return h}function y(a){a=B(a).querySelectorAll("[data-ng-animate]");q(a,function(a){var b=parseInt(a.getAttribute("data-ng-animate")),c=m.get(a);switch(b){case 2:c.runner.end();case 1:c&&m.remove(a)}})}function w(a){a=B(a);a.removeAttribute("data-ng-animate");m.remove(a)} +function f(a,b){return B(a)===B(b)}function la(a,b,c){c=L(g[0].body);var d=f(a,c)||"HTML"===a[0].nodeName,t=f(a,h),n=!1,w;for((a=a.data("$ngAnimatePin"))&&(b=a);b&&b.length;){t||(t=f(b,h));a=b[0];if(1!==a.nodeType)break;var x=m.get(a)||{};n||(n=x.structural||F.get(a));if(qa(w)||!0===w)a=b.data("$$ngAnimateChildren"),V(a)&&(w=a);if(n&&!1===w)break;t||(t=f(b,h),t||(a=b.data("$ngAnimatePin"))&&(b=a));d||(d=f(b,c));b=b.parent()}return(!n||w)&&t&&d}function x(a,b,c){c=c||{};c.state=b;a=B(a);a.setAttribute("data-ng-animate", +b);c=(b=m.get(a))?Aa(b,c):c;m.put(a,c)}var m=new v,F=new v,G=null,A=s.$watch(function(){return 0===u.totalPendingRequests},function(a){a&&(A(),s.$$postDigest(function(){s.$$postDigest(function(){null===G&&(G=!0)})}))}),t={},n=a.classNameFilter(),Ra=n?function(a){return n.test(a)}:function(){return!0},Ha=N(R);return{on:function(a,b,c){b=ma(b);t[a]=t[a]||[];t[a].push({node:b,callback:c})},off:function(a,b,c){function f(a,b,c){var d=ma(b);return a.filter(function(a){return!(a.node===d&&(!c||a.callback=== +c))})}var d=t[a];d&&(t[a]=1===arguments.length?null:f(d,b,c))},pin:function(a,b){wa(ra(a),"element","not an element");wa(ra(b),"parentElement","not an element");a.data("$ngAnimatePin",b)},push:function(a,b,c,f){c=c||{};c.domOperation=f;return l(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!G;else if(ra(a)){var f=B(a),d=F.get(f);1===c?b=!d:(b=!!b)?d&&F.remove(f):F.put(f,!0)}else b=G=!!a;return b}}}]}]).provider("$$animation",["$animateProvider",function(a){function b(a){return a.data("$$animationRunner")} +var c=this.drivers=[];this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$HashMap","$$rAFScheduler",function(a,e,s,h,g,v){function r(a){function b(a){if(a.processed)return a;a.processed=!0;var f=a.domNode,d=f.parentNode;e.put(f,a);for(var x;d;){if(x=e.get(d)){x.processed||(x=b(x));break}d=d.parentNode}(x||c).children.push(a);return a}var c={children:[]},d,e=new g;for(d=0;d<a.length;d++){var h=a[d];e.put(h.domNode,a[d]={domNode:h.domNode,fn:h.fn,children:[]})}for(d=0;d<a.length;d++)b(a[d]); +return function(a){var b=[],c=[],d;for(d=0;d<a.children.length;d++)c.push(a.children[d]);a=c.length;var m=0,e=[];for(d=0;d<c.length;d++){var h=c[d];0>=a&&(a=m,m=0,b.push(e),e=[]);e.push(h.fn);h.children.forEach(function(a){m++;c.push(a)});a--}e.length&&b.push(e);return b}(c)}var $=[],u=N(a);return function(g,C,D){function K(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];q(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b} +function l(a){var b=[],c={};q(a,function(a,f){var d=B(a.element),t=0<=["enter","move"].indexOf(a.event),d=a.structural?K(d):[];if(d.length){var m=t?"to":"from";q(d,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][m]={animationID:f,element:L(a)}})}else b.push(a)});var f={},d={};q(c,function(c,m){var w=c.from,e=c.to;if(w&&e){var h=a[w.animationID],g=a[e.animationID],x=w.animationID.toString();if(!d[x]){var A=d[x]={structural:!0,beforeStart:function(){h.beforeStart();g.beforeStart()}, +close:function(){h.close();g.close()},classes:y(h.classes,g.classes),from:h,to:g,anchors:[]};A.classes.length?b.push(A):(b.push(h),b.push(g))}d[x].anchors.push({out:w.element,"in":e.element})}else w=w?w.animationID:e.animationID,e=w.toString(),f[e]||(f[e]=!0,b.push(a[w]))});return b}function y(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],f=0;f<a.length;f++){var d=a[f];if("ng-"!==d.substring(0,3))for(var m=0;m<b.length;m++)if(d===b[m]){c.push(d);break}}return c.join(" ")}function w(a){for(var b= +c.length-1;0<=b;b--){var f=c[b];if(s.has(f)&&(f=s.get(f)(a)))return f}}function f(a,c){a.from&&a.to?(b(a.from.element).setHost(c),b(a.to.element).setHost(c)):b(a.element).setHost(c)}function la(){var a=b(g);!a||"leave"===C&&D.$$domOperationFired||a.end()}function x(b){g.off("$destroy",la);g.removeData("$$animationRunner");u(g,D);da(g,D);D.domOperation();A&&a.removeClass(g,A);g.removeClass("ng-animate");F.complete(!b)}D=ia(D);var m=0<=["enter","move","leave"].indexOf(C),F=new h({end:function(){x()}, +cancel:function(){x(!0)}});if(!c.length)return x(),F;g.data("$$animationRunner",F);var G=xa(g.attr("class"),xa(D.addClass,D.removeClass)),A=D.tempClasses;A&&(G+=" "+A,D.tempClasses=null);$.push({element:g,classes:G,event:C,structural:m,options:D,beforeStart:function(){g.addClass("ng-animate");A&&a.addClass(g,A)},close:x});g.on("$destroy",la);if(1<$.length)return F;e.$$postDigest(function(){var a=[];q($,function(c){b(c.element)?a.push(c):c.close()});$.length=0;var c=l(a),d=[];q(c,function(a){d.push({domNode:B(a.from? +a.from.element:a.element),fn:function(){a.beforeStart();var c,d=a.close;if(b(a.anchors?a.from.element||a.to.element:a.element)){var m=w(a);m&&(c=m.start)}c?(c=c(),c.done(function(a){d(!a)}),f(a,c)):d()}})});v(r(d))});return F}}]}]).provider("$animateCss",["$animateProvider",function(a){var b=Da(),c=Da();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$animate",function(a,e,s,h,g,v,r,u){function Ga(a,b){var c=a.parentNode;return(c.$$ngAnimateParentKey|| +(c.$$ngAnimateParentKey=++l))+"-"+a.getAttribute("class")+"-"+b}function R(w,f,h,g){var m;0<b.count(h)&&(m=c.get(h),m||(f=T(f,"-stagger"),e.addClass(w,f),m=Ba(a,w,g),m.animationDuration=Math.max(m.animationDuration,0),m.transitionDuration=Math.max(m.transitionDuration,0),e.removeClass(w,f),c.put(h,m)));return m||{}}function C(a){y.push(a);r.waitUntilQuiet(function(){b.flush();c.flush();for(var a=g(),d=0;d<y.length;d++)y[d](a);y.length=0})}function D(c,f,e){f=b.get(e);f||(f=Ba(a,c,Pa),"infinite"=== +f.animationIterationCount&&(f.animationIterationCount=1));b.put(e,f);c=f;e=c.animationDelay;f=c.transitionDelay;c.maxDelay=e&&f?Math.max(e,f):e||f;c.maxDuration=Math.max(c.animationDuration*c.animationIterationCount,c.transitionDuration);return c}var K=N(e),l=0,y=[];return function(a,c){function d(){m()}function g(){m(!0)}function m(b){if(!(ga||va&&k)){ga=!0;k=!1;c.$$skipPreparationClasses||e.removeClass(a,Z);e.removeClass(a,Y);na(n,!1);ja(n,!1);q(y,function(a){n.style[a[0]]=""});K(a,c);da(a,c);Object.keys(t).length&& +q(t,function(a,b){a?n.style.setProperty(b,a):n.style.removeProperty(b)});if(c.onDone)c.onDone();H&&H.complete(!b)}}function F(a){p.blockTransition&&ja(n,a);p.blockKeyframeAnimation&&na(n,!!a)}function G(){H=new s({end:d,cancel:g});C(M);m();return{$$willAnimate:!1,start:function(){return H},end:d}}function A(){function b(){if(!ga){F(!1);q(y,function(a){n.style[a[0]]=a[1]});K(a,c);e.addClass(a,Y);if(p.recalculateTimingStyles){ha=n.className+" "+Z;aa=Ga(n,ha);E=D(n,ha,aa);W=E.maxDelay;I=Math.max(W,0); +J=E.maxDuration;if(0===J){m();return}p.hasTransitions=0<E.transitionDuration;p.hasAnimations=0<E.animationDuration}p.applyAnimationDelay&&(W="boolean"!==typeof c.delay&&oa(c.delay)?parseFloat(c.delay):W,I=Math.max(W,0),E.animationDelay=W,ca=[ka,W+"s"],y.push(ca),n.style[ca[0]]=ca[1]);N=1E3*I;z=1E3*J;if(c.easing){var k,l=c.easing;p.hasTransitions&&(k=O+"TimingFunction",y.push([k,l]),n.style[k]=l);p.hasAnimations&&(k=U+"TimingFunction",y.push([k,l]),n.style[k]=l)}E.transitionDuration&&x.push(sa);E.animationDuration&& +x.push(ta);A=Date.now();var v=N+1.5*z;k=A+v;var l=a.data("$$animateCss")||[],r=!0;if(l.length){var G=l[0];(r=k>G.expectedEndTime)?h.cancel(G.timer):l.push(m)}r&&(v=h(d,v,!1),l[0]={timer:v,expectedEndTime:k},l.push(m),a.data("$$animateCss",l));a.on(x.join(" "),g);c.to&&(c.cleanupStyles&&Ea(t,n,Object.keys(c.to)),za(a,c))}}function d(){var b=a.data("$$animateCss");if(b){for(var c=1;c<b.length;c++)b[c]();a.removeData("$$animateCss")}}function g(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp|| +b.timeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(3));Math.max(a-A,0)>=N&&b>=J&&(va=!0,m())}if(!ga)if(n.parentNode){var A,x=[],l=function(a){if(va)k&&a&&(k=!1,m());else if(k=!a,E.animationDuration)if(a=na(n,k),k)y.push(a);else{var b=y,c=b.indexOf(a);0<=a&&b.splice(c,1)}},v=0<V&&(E.transitionDuration&&0===S.transitionDuration||E.animationDuration&&0===S.animationDuration)&&Math.max(S.animationDelay,S.transitionDelay);v?h(b,Math.floor(v*V*1E3),!1):b();L.resume=function(){l(!0)};L.pause=function(){l(!1)}}else m()} +var t={},n=B(a);if(!n||!n.parentNode||!u.enabled())return G();c=ia(c);var y=[],r=a.attr("class"),l=Ia(c),ga,k,va,H,L,I,N,J,z;if(0===c.duration||!v.animations&&!v.transitions)return G();var ba=c.event&&X(c.event)?c.event.join(" "):c.event,Q="",P="";ba&&c.structural?Q=T(ba,"ng-",!0):ba&&(Q=ba);c.addClass&&(P+=T(c.addClass,"-add"));c.removeClass&&(P.length&&(P+=" "),P+=T(c.removeClass,"-remove"));c.applyClassesEarly&&P.length&&K(a,c);var Z=[Q,P].join(" ").trim(),ha=r+" "+Z,Y=T(Z,"-active"),r=l.to&&0< +Object.keys(l.to).length;if(!(0<(c.keyframeStyle||"").length||r||Z))return G();var aa,S;0<c.stagger?(l=parseFloat(c.stagger),S={transitionDelay:l,animationDelay:l,transitionDuration:0,animationDuration:0}):(aa=Ga(n,ha),S=R(n,Z,aa,Qa));c.$$skipPreparationClasses||e.addClass(a,Z);c.transitionStyle&&(l=[O,c.transitionStyle],ea(n,l),y.push(l));0<=c.duration&&(l=0<n.style[O].length,l=Ca(c.duration,l),ea(n,l),y.push(l));c.keyframeStyle&&(l=[U,c.keyframeStyle],ea(n,l),y.push(l));var V=S?0<=c.staggerIndex? +c.staggerIndex:b.count(aa):0;(ba=0===V)&&!c.skipBlocking&&ja(n,9999);var E=D(n,ha,aa),W=E.maxDelay;I=Math.max(W,0);J=E.maxDuration;var p={};p.hasTransitions=0<E.transitionDuration;p.hasAnimations=0<E.animationDuration;p.hasTransitionAll=p.hasTransitions&&"all"==E.transitionProperty;p.applyTransitionDuration=r&&(p.hasTransitions&&!p.hasTransitionAll||p.hasAnimations&&!p.hasTransitions);p.applyAnimationDuration=c.duration&&p.hasAnimations;p.applyTransitionDelay=oa(c.delay)&&(p.applyTransitionDuration|| +p.hasTransitions);p.applyAnimationDelay=oa(c.delay)&&p.hasAnimations;p.recalculateTimingStyles=0<P.length;if(p.applyTransitionDuration||p.applyAnimationDuration)J=c.duration?parseFloat(c.duration):J,p.applyTransitionDuration&&(p.hasTransitions=!0,E.transitionDuration=J,l=0<n.style[O+"Property"].length,y.push(Ca(J,l))),p.applyAnimationDuration&&(p.hasAnimations=!0,E.animationDuration=J,y.push([ua,J+"s"]));if(0===J&&!p.recalculateTimingStyles)return G();if(null!=c.delay){var ca=parseFloat(c.delay); +p.applyTransitionDelay&&y.push([fa,ca+"s"]);p.applyAnimationDelay&&y.push([ka,ca+"s"])}null==c.duration&&0<E.transitionDuration&&(p.recalculateTimingStyles=p.recalculateTimingStyles||ba);N=1E3*I;z=1E3*J;c.skipBlocking||(p.blockTransition=0<E.transitionDuration,p.blockKeyframeAnimation=0<E.animationDuration&&0<S.animationDelay&&0===S.animationDuration);c.from&&(c.cleanupStyles&&Ea(t,n,Object.keys(c.from)),ya(a,c));p.blockTransition||p.blockKeyframeAnimation?F(J):c.skipBlocking||ja(n,!1);return{$$willAnimate:!0, +end:d,start:function(){if(!ga)return L={end:d,cancel:g,resume:null,pause:null},H=new s(L),C(A),H}}}}]}]).provider("$$animateCssDriver",["$$animationProvider",function(a){a.drivers.push("$$animateCssDriver");this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(a,c,d,e,s,h,g){function v(a){return a.replace(/\bng-\S+\b/g,"")}function r(a,b){I(a)&&(a=a.split(" "));I(b)&&(b=b.split(" "));return a.filter(function(a){return-1===b.indexOf(a)}).join(" ")} +function u(c,e,g){function h(a){var b={},c=B(a).getBoundingClientRect();q(["width","height","top","left"],function(a){var d=c[a];switch(a){case "top":d+=C.scrollTop;break;case "left":d+=C.scrollLeft}b[a]=Math.floor(d)+"px"});return b}function f(){var c=v(g.attr("class")||""),d=r(c,m),c=r(m,c),d=a(x,{to:h(g),addClass:"ng-anchor-in "+d,removeClass:"ng-anchor-out "+c,delay:!0});return d.$$willAnimate?d:null}function s(){x.remove();e.removeClass("ng-animate-shim");g.removeClass("ng-animate-shim")}var x= +L(B(e).cloneNode(!0)),m=v(x.attr("class")||"");e.addClass("ng-animate-shim");g.addClass("ng-animate-shim");x.addClass("ng-anchor");D.append(x);var F;c=function(){var c=a(x,{addClass:"ng-anchor-out",delay:!0,from:h(e)});return c.$$willAnimate?c:null}();if(!c&&(F=f(),!F))return s();var G=c||F;return{start:function(){function a(){c&&c.end()}var b,c=G.start();c.done(function(){c=null;if(!F&&(F=f()))return c=F.start(),c.done(function(){c=null;s();b.complete()}),c;s();b.complete()});return b=new d({end:a, +cancel:a})}}}function H(a,b,c,e){var f=R(a,M),g=R(b,M),h=[];q(e,function(a){(a=u(c,a.out,a["in"]))&&h.push(a)});if(f||g||0!==h.length)return{start:function(){function a(){q(b,function(a){a.end()})}var b=[];f&&b.push(f.start());g&&b.push(g.start());q(h,function(a){b.push(a.start())});var c=new d({end:a,cancel:a});d.all(b,function(a){c.complete(a)});return c}}}function R(c){var d=c.element,e=c.options||{};c.structural&&(e.event=c.event,e.structural=!0,e.applyClassesEarly=!0,"leave"===c.event&&(e.onDone= +e.domOperation));e.preparationClasses&&(e.event=Y(e.event,e.preparationClasses));c=a(d,e);return c.$$willAnimate?c:null}if(!s.animations&&!s.transitions)return M;var C=g[0].body;c=B(e);var D=L(c.parentNode&&11===c.parentNode.nodeType||C.contains(c)?c:C);N(h);return function(a){return a.from&&a.to?H(a.from,a.to,a.classes,a.anchors):R(a)}}]}]).provider("$$animateJs",["$animateProvider",function(a){this.$get=["$injector","$$AnimateRunner","$$jqLite",function(b,c,d){function e(c){c=X(c)?c:c.split(" "); +for(var d=[],e={},r=0;r<c.length;r++){var q=c[r],s=a.$$registeredAnimations[q];s&&!e[q]&&(d.push(b.get(s)),e[q]=!0)}return d}var s=N(d);return function(a,b,d,r){function u(){r.domOperation();s(a,r)}function H(a,b,d,e,f){switch(d){case "animate":b=[b,e.from,e.to,f];break;case "setClass":b=[b,D,K,f];break;case "addClass":b=[b,D,f];break;case "removeClass":b=[b,K,f];break;default:b=[b,f]}b.push(e);if(a=a.apply(a,b))if(Fa(a.start)&&(a=a.start()),a instanceof c)a.done(f);else if(Fa(a))return a;return M} +function B(a,b,d,e,f){var g=[];q(e,function(e){var h=e[f];h&&g.push(function(){var e,f,g=!1,k=function(a){g||(g=!0,(f||M)(a),e.complete(!a))};e=new c({end:function(){k()},cancel:function(){k(!0)}});f=H(h,a,b,d,function(a){k(!1===a)});return e})});return g}function C(a,b,d,e,f){var g=B(a,b,d,e,f);if(0===g.length){var h,l;"beforeSetClass"===f?(h=B(a,"removeClass",d,e,"beforeRemoveClass"),l=B(a,"addClass",d,e,"beforeAddClass")):"setClass"===f&&(h=B(a,"removeClass",d,e,"removeClass"),l=B(a,"addClass", +d,e,"addClass"));h&&(g=g.concat(h));l&&(g=g.concat(l))}if(0!==g.length)return function(a){var b=[];g.length&&q(g,function(a){b.push(a())});b.length?c.all(b,a):a();return function(a){q(b,function(b){a?b.cancel():b.end()})}}}3===arguments.length&&pa(d)&&(r=d,d=null);r=ia(r);d||(d=a.attr("class")||"",r.addClass&&(d+=" "+r.addClass),r.removeClass&&(d+=" "+r.removeClass));var D=r.addClass,K=r.removeClass,l=e(d),y,w;if(l.length){var f,I;"leave"==b?(I="leave",f="afterLeave"):(I="before"+b.charAt(0).toUpperCase()+ +b.substr(1),f=b);"enter"!==b&&"move"!==b&&(y=C(a,b,r,l,I));w=C(a,b,r,l,f)}if(y||w)return{start:function(){function b(c){f=!0;u();da(a,r);g.complete(c)}var d,e=[];y&&e.push(function(a){d=y(a)});e.length?e.push(function(a){u();a(!0)}):u();w&&e.push(function(a){d=w(a)});var f=!1,g=new c({end:function(){f||((d||M)(void 0),b(void 0))},cancel:function(){f||((d||M)(!0),b(!0))}});c.chain(e,b);return g}}}}]}]).provider("$$animateJsDriver",["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver"); +this.$get=["$$animateJs","$$AnimateRunner",function(a,c){function d(c){return a(c.element,c.event,c.classes,c.options)}return function(a){if(a.from&&a.to){var b=d(a.from),h=d(a.to);if(b||h)return{start:function(){function a(){return function(){q(d,function(a){a.end()})}}var d=[];b&&d.push(b.start());h&&d.push(h.start());c.all(d,function(a){e.complete(a)});var e=new c({end:a(),cancel:a()});return e}}}else return d(a)}}]}])})(window,window.angular); +//# sourceMappingURL=angular-animate.min.js.map diff --git a/src/main/websrc/js/common/angular-ui-router.min.js b/src/main/websrc/js/common/angular-ui-router.min.js new file mode 100644 index 0000000..18d8307 --- /dev/null +++ b/src/main/websrc/js/common/angular-ui-router.min.js @@ -0,0 +1,7 @@ +/** + * State-based routing for AngularJS + * @version v0.2.15 + * @link http://angular-ui.github.com/ + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(a,b,c){"use strict";function d(a,b){return N(new(N(function(){},{prototype:a})),b)}function e(a){return M(arguments,function(b){b!==a&&M(b,function(b,c){a.hasOwnProperty(c)||(a[c]=b)})}),a}function f(a,b){var c=[];for(var d in a.path){if(a.path[d]!==b.path[d])break;c.push(a.path[d])}return c}function g(a){if(Object.keys)return Object.keys(a);var b=[];return M(a,function(a,c){b.push(c)}),b}function h(a,b){if(Array.prototype.indexOf)return a.indexOf(b,Number(arguments[2])||0);var c=a.length>>>0,d=Number(arguments[2])||0;for(d=0>d?Math.ceil(d):Math.floor(d),0>d&&(d+=c);c>d;d++)if(d in a&&a[d]===b)return d;return-1}function i(a,b,c,d){var e,i=f(c,d),j={},k=[];for(var l in i)if(i[l].params&&(e=g(i[l].params),e.length))for(var m in e)h(k,e[m])>=0||(k.push(e[m]),j[e[m]]=a[e[m]]);return N({},j,b)}function j(a,b,c){if(!c){c=[];for(var d in a)c.push(d)}for(var e=0;e<c.length;e++){var f=c[e];if(a[f]!=b[f])return!1}return!0}function k(a,b){var c={};return M(a,function(a){c[a]=b[a]}),c}function l(a){var b={},c=Array.prototype.concat.apply(Array.prototype,Array.prototype.slice.call(arguments,1));return M(c,function(c){c in a&&(b[c]=a[c])}),b}function m(a){var b={},c=Array.prototype.concat.apply(Array.prototype,Array.prototype.slice.call(arguments,1));for(var d in a)-1==h(c,d)&&(b[d]=a[d]);return b}function n(a,b){var c=L(a),d=c?[]:{};return M(a,function(a,e){b(a,e)&&(d[c?d.length:e]=a)}),d}function o(a,b){var c=L(a)?[]:{};return M(a,function(a,d){c[d]=b(a,d)}),c}function p(a,b){var d=1,f=2,i={},j=[],k=i,l=N(a.when(i),{$$promises:i,$$values:i});this.study=function(i){function n(a,c){if(s[c]!==f){if(r.push(c),s[c]===d)throw r.splice(0,h(r,c)),new Error("Cyclic dependency: "+r.join(" -> "));if(s[c]=d,J(a))q.push(c,[function(){return b.get(a)}],j);else{var e=b.annotate(a);M(e,function(a){a!==c&&i.hasOwnProperty(a)&&n(i[a],a)}),q.push(c,a,e)}r.pop(),s[c]=f}}function o(a){return K(a)&&a.then&&a.$$promises}if(!K(i))throw new Error("'invocables' must be an object");var p=g(i||{}),q=[],r=[],s={};return M(i,n),i=r=s=null,function(d,f,g){function h(){--u||(v||e(t,f.$$values),r.$$values=t,r.$$promises=r.$$promises||!0,delete r.$$inheritedValues,n.resolve(t))}function i(a){r.$$failure=a,n.reject(a)}function j(c,e,f){function j(a){l.reject(a),i(a)}function k(){if(!H(r.$$failure))try{l.resolve(b.invoke(e,g,t)),l.promise.then(function(a){t[c]=a,h()},j)}catch(a){j(a)}}var l=a.defer(),m=0;M(f,function(a){s.hasOwnProperty(a)&&!d.hasOwnProperty(a)&&(m++,s[a].then(function(b){t[a]=b,--m||k()},j))}),m||k(),s[c]=l.promise}if(o(d)&&g===c&&(g=f,f=d,d=null),d){if(!K(d))throw new Error("'locals' must be an object")}else d=k;if(f){if(!o(f))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else f=l;var n=a.defer(),r=n.promise,s=r.$$promises={},t=N({},d),u=1+q.length/3,v=!1;if(H(f.$$failure))return i(f.$$failure),r;f.$$inheritedValues&&e(t,m(f.$$inheritedValues,p)),N(s,f.$$promises),f.$$values?(v=e(t,m(f.$$values,p)),r.$$inheritedValues=m(f.$$values,p),h()):(f.$$inheritedValues&&(r.$$inheritedValues=m(f.$$inheritedValues,p)),f.then(h,i));for(var w=0,x=q.length;x>w;w+=3)d.hasOwnProperty(q[w])?h():j(q[w],q[w+1],q[w+2]);return r}},this.resolve=function(a,b,c,d){return this.study(a)(b,c,d)}}function q(a,b,c){this.fromConfig=function(a,b,c){return H(a.template)?this.fromString(a.template,b):H(a.templateUrl)?this.fromUrl(a.templateUrl,b):H(a.templateProvider)?this.fromProvider(a.templateProvider,b,c):null},this.fromString=function(a,b){return I(a)?a(b):a},this.fromUrl=function(c,d){return I(c)&&(c=c(d)),null==c?null:a.get(c,{cache:b,headers:{Accept:"text/html"}}).then(function(a){return a.data})},this.fromProvider=function(a,b,d){return c.invoke(a,null,d||{params:b})}}function r(a,b,e){function f(b,c,d,e){if(q.push(b),o[b])return o[b];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(b))throw new Error("Invalid parameter name '"+b+"' in pattern '"+a+"'");if(p[b])throw new Error("Duplicate parameter name '"+b+"' in pattern '"+a+"'");return p[b]=new P.Param(b,c,d,e),p[b]}function g(a,b,c,d){var e=["",""],f=a.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!b)return f;switch(c){case!1:e=["(",")"+(d?"?":"")];break;case!0:e=["?(",")?"];break;default:e=["("+c+"|",")?"]}return f+e[0]+b+e[1]}function h(e,f){var g,h,i,j,k;return g=e[2]||e[3],k=b.params[g],i=a.substring(m,e.index),h=f?e[4]:e[4]||("*"==e[1]?".*":null),j=P.type(h||"string")||d(P.type("string"),{pattern:new RegExp(h,b.caseInsensitive?"i":c)}),{id:g,regexp:h,segment:i,type:j,cfg:k}}b=N({params:{}},K(b)?b:{});var i,j=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,k=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l="^",m=0,n=this.segments=[],o=e?e.params:{},p=this.params=e?e.params.$$new():new P.ParamSet,q=[];this.source=a;for(var r,s,t;(i=j.exec(a))&&(r=h(i,!1),!(r.segment.indexOf("?")>=0));)s=f(r.id,r.type,r.cfg,"path"),l+=g(r.segment,s.type.pattern.source,s.squash,s.isOptional),n.push(r.segment),m=j.lastIndex;t=a.substring(m);var u=t.indexOf("?");if(u>=0){var v=this.sourceSearch=t.substring(u);if(t=t.substring(0,u),this.sourcePath=a.substring(0,m+u),v.length>0)for(m=0;i=k.exec(v);)r=h(i,!0),s=f(r.id,r.type,r.cfg,"search"),m=j.lastIndex}else this.sourcePath=a,this.sourceSearch="";l+=g(t)+(b.strict===!1?"/?":"")+"$",n.push(t),this.regexp=new RegExp(l,b.caseInsensitive?"i":c),this.prefix=n[0],this.$$paramNames=q}function s(a){N(this,a)}function t(){function a(a){return null!=a?a.toString().replace(/\//g,"%2F"):a}function e(a){return null!=a?a.toString().replace(/%2F/g,"/"):a}function f(){return{strict:p,caseInsensitive:m}}function i(a){return I(a)||L(a)&&I(a[a.length-1])}function j(){for(;w.length;){var a=w.shift();if(a.pattern)throw new Error("You cannot override a type's .pattern at runtime.");b.extend(u[a.name],l.invoke(a.def))}}function k(a){N(this,a||{})}P=this;var l,m=!1,p=!0,q=!1,u={},v=!0,w=[],x={string:{encode:a,decode:e,is:function(a){return null==a||!H(a)||"string"==typeof a},pattern:/[^/]*/},"int":{encode:a,decode:function(a){return parseInt(a,10)},is:function(a){return H(a)&&this.decode(a.toString())===a},pattern:/\d+/},bool:{encode:function(a){return a?1:0},decode:function(a){return 0!==parseInt(a,10)},is:function(a){return a===!0||a===!1},pattern:/0|1/},date:{encode:function(a){return this.is(a)?[a.getFullYear(),("0"+(a.getMonth()+1)).slice(-2),("0"+a.getDate()).slice(-2)].join("-"):c},decode:function(a){if(this.is(a))return a;var b=this.capture.exec(a);return b?new Date(b[1],b[2]-1,b[3]):c},is:function(a){return a instanceof Date&&!isNaN(a.valueOf())},equals:function(a,b){return this.is(a)&&this.is(b)&&a.toISOString()===b.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:b.toJson,decode:b.fromJson,is:b.isObject,equals:b.equals,pattern:/[^/]*/},any:{encode:b.identity,decode:b.identity,equals:b.equals,pattern:/.*/}};t.$$getDefaultValue=function(a){if(!i(a.value))return a.value;if(!l)throw new Error("Injectable functions cannot be called at configuration time");return l.invoke(a.value)},this.caseInsensitive=function(a){return H(a)&&(m=a),m},this.strictMode=function(a){return H(a)&&(p=a),p},this.defaultSquashPolicy=function(a){if(!H(a))return q;if(a!==!0&&a!==!1&&!J(a))throw new Error("Invalid squash policy: "+a+". Valid policies: false, true, arbitrary-string");return q=a,a},this.compile=function(a,b){return new r(a,N(f(),b))},this.isMatcher=function(a){if(!K(a))return!1;var b=!0;return M(r.prototype,function(c,d){I(c)&&(b=b&&H(a[d])&&I(a[d]))}),b},this.type=function(a,b,c){if(!H(b))return u[a];if(u.hasOwnProperty(a))throw new Error("A type named '"+a+"' has already been defined.");return u[a]=new s(N({name:a},b)),c&&(w.push({name:a,def:c}),v||j()),this},M(x,function(a,b){u[b]=new s(N({name:b},a))}),u=d(u,{}),this.$get=["$injector",function(a){return l=a,v=!1,j(),M(x,function(a,b){u[b]||(u[b]=new s(a))}),this}],this.Param=function(a,b,d,e){function f(a){var b=K(a)?g(a):[],c=-1===h(b,"value")&&-1===h(b,"type")&&-1===h(b,"squash")&&-1===h(b,"array");return c&&(a={value:a}),a.$$fn=i(a.value)?a.value:function(){return a.value},a}function j(b,c,d){if(b.type&&c)throw new Error("Param '"+a+"' has two type configurations.");return c?c:b.type?b.type instanceof s?b.type:new s(b.type):"config"===d?u.any:u.string}function k(){var b={array:"search"===e?"auto":!1},c=a.match(/\[\]$/)?{array:!0}:{};return N(b,c,d).array}function m(a,b){var c=a.squash;if(!b||c===!1)return!1;if(!H(c)||null==c)return q;if(c===!0||J(c))return c;throw new Error("Invalid squash policy: '"+c+"'. Valid policies: false, true, or arbitrary string")}function p(a,b,d,e){var f,g,i=[{from:"",to:d||b?c:""},{from:null,to:d||b?c:""}];return f=L(a.replace)?a.replace:[],J(e)&&f.push({from:e,to:c}),g=o(f,function(a){return a.from}),n(i,function(a){return-1===h(g,a.from)}).concat(f)}function r(){if(!l)throw new Error("Injectable functions cannot be called at configuration time");var a=l.invoke(d.$$fn);if(null!==a&&a!==c&&!w.type.is(a))throw new Error("Default value ("+a+") for parameter '"+w.id+"' is not an instance of Type ("+w.type.name+")");return a}function t(a){function b(a){return function(b){return b.from===a}}function c(a){var c=o(n(w.replace,b(a)),function(a){return a.to});return c.length?c[0]:a}return a=c(a),H(a)?w.type.$normalize(a):r()}function v(){return"{Param:"+a+" "+b+" squash: '"+z+"' optional: "+y+"}"}var w=this;d=f(d),b=j(d,b,e);var x=k();b=x?b.$asArray(x,"search"===e):b,"string"!==b.name||x||"path"!==e||d.value!==c||(d.value="");var y=d.value!==c,z=m(d,y),A=p(d,x,y,z);N(this,{id:a,type:b,location:e,array:x,squash:z,replace:A,isOptional:y,value:t,dynamic:c,config:d,toString:v})},k.prototype={$$new:function(){return d(this,N(new k,{$$parent:this}))},$$keys:function(){for(var a=[],b=[],c=this,d=g(k.prototype);c;)b.push(c),c=c.$$parent;return b.reverse(),M(b,function(b){M(g(b),function(b){-1===h(a,b)&&-1===h(d,b)&&a.push(b)})}),a},$$values:function(a){var b={},c=this;return M(c.$$keys(),function(d){b[d]=c[d].value(a&&a[d])}),b},$$equals:function(a,b){var c=!0,d=this;return M(d.$$keys(),function(e){var f=a&&a[e],g=b&&b[e];d[e].type.equals(f,g)||(c=!1)}),c},$$validates:function(a){var d,e,f,g,h,i=this.$$keys();for(d=0;d<i.length&&(e=this[i[d]],f=a[i[d]],f!==c&&null!==f||!e.isOptional);d++){if(g=e.type.$normalize(f),!e.type.is(g))return!1;if(h=e.type.encode(g),b.isString(h)&&!e.type.pattern.exec(h))return!1}return!0},$$parent:c},this.ParamSet=k}function u(a,d){function e(a){var b=/^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(a.source);return null!=b?b[1].replace(/\\(.)/g,"$1"):""}function f(a,b){return a.replace(/\$(\$|\d{1,2})/,function(a,c){return b["$"===c?0:Number(c)]})}function g(a,b,c){if(!c)return!1;var d=a.invoke(b,b,{$match:c});return H(d)?d:!0}function h(d,e,f,g){function h(a,b,c){return"/"===p?a:b?p.slice(0,-1)+a:c?p.slice(1)+a:a}function m(a){function b(a){var b=a(f,d);return b?(J(b)&&d.replace().url(b),!0):!1}if(!a||!a.defaultPrevented){o&&d.url()===o;o=c;var e,g=j.length;for(e=0;g>e;e++)if(b(j[e]))return;k&&b(k)}}function n(){return i=i||e.$on("$locationChangeSuccess",m)}var o,p=g.baseHref(),q=d.url();return l||n(),{sync:function(){m()},listen:function(){return n()},update:function(a){return a?void(q=d.url()):void(d.url()!==q&&(d.url(q),d.replace()))},push:function(a,b,e){var f=a.format(b||{});null!==f&&b&&b["#"]&&(f+="#"+b["#"]),d.url(f),o=e&&e.$$avoidResync?d.url():c,e&&e.replace&&d.replace()},href:function(c,e,f){if(!c.validates(e))return null;var g=a.html5Mode();b.isObject(g)&&(g=g.enabled);var i=c.format(e);if(f=f||{},g||null===i||(i="#"+a.hashPrefix()+i),null!==i&&e&&e["#"]&&(i+="#"+e["#"]),i=h(i,g,f.absolute),!f.absolute||!i)return i;var j=!g&&i?"/":"",k=d.port();return k=80===k||443===k?"":":"+k,[d.protocol(),"://",d.host(),k,j,i].join("")}}}var i,j=[],k=null,l=!1;this.rule=function(a){if(!I(a))throw new Error("'rule' must be a function");return j.push(a),this},this.otherwise=function(a){if(J(a)){var b=a;a=function(){return b}}else if(!I(a))throw new Error("'rule' must be a function");return k=a,this},this.when=function(a,b){var c,h=J(b);if(J(a)&&(a=d.compile(a)),!h&&!I(b)&&!L(b))throw new Error("invalid 'handler' in when()");var i={matcher:function(a,b){return h&&(c=d.compile(b),b=["$match",function(a){return c.format(a)}]),N(function(c,d){return g(c,b,a.exec(d.path(),d.search()))},{prefix:J(a.prefix)?a.prefix:""})},regex:function(a,b){if(a.global||a.sticky)throw new Error("when() RegExp must not be global or sticky");return h&&(c=b,b=["$match",function(a){return f(c,a)}]),N(function(c,d){return g(c,b,a.exec(d.path()))},{prefix:e(a)})}},j={matcher:d.isMatcher(a),regex:a instanceof RegExp};for(var k in j)if(j[k])return this.rule(i[k](a,b));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(a){a===c&&(a=!0),l=a},this.$get=h,h.$inject=["$location","$rootScope","$injector","$browser"]}function v(a,e){function f(a){return 0===a.indexOf(".")||0===a.indexOf("^")}function m(a,b){if(!a)return c;var d=J(a),e=d?a:a.name,g=f(e);if(g){if(!b)throw new Error("No reference point given for path '"+e+"'");b=m(b);for(var h=e.split("."),i=0,j=h.length,k=b;j>i;i++)if(""!==h[i]||0!==i){if("^"!==h[i])break;if(!k.parent)throw new Error("Path '"+e+"' not valid for state '"+b.name+"'");k=k.parent}else k=b;h=h.slice(i).join("."),e=k.name+(k.name&&h?".":"")+h}var l=z[e];return!l||!d&&(d||l!==a&&l.self!==a)?c:l}function n(a,b){A[a]||(A[a]=[]),A[a].push(b)}function p(a){for(var b=A[a]||[];b.length;)q(b.shift())}function q(b){b=d(b,{self:b,resolve:b.resolve||{},toString:function(){return this.name}});var c=b.name;if(!J(c)||c.indexOf("@")>=0)throw new Error("State must have a valid name");if(z.hasOwnProperty(c))throw new Error("State '"+c+"'' is already defined");var e=-1!==c.indexOf(".")?c.substring(0,c.lastIndexOf(".")):J(b.parent)?b.parent:K(b.parent)&&J(b.parent.name)?b.parent.name:"";if(e&&!z[e])return n(e,b.self);for(var f in C)I(C[f])&&(b[f]=C[f](b,C.$delegates[f]));return z[c]=b,!b[B]&&b.url&&a.when(b.url,["$match","$stateParams",function(a,c){y.$current.navigable==b&&j(a,c)||y.transitionTo(b,a,{inherit:!0,location:!1})}]),p(c),b}function r(a){return a.indexOf("*")>-1}function s(a){for(var b=a.split("."),c=y.$current.name.split("."),d=0,e=b.length;e>d;d++)"*"===b[d]&&(c[d]="*");return"**"===b[0]&&(c=c.slice(h(c,b[1])),c.unshift("**")),"**"===b[b.length-1]&&(c.splice(h(c,b[b.length-2])+1,Number.MAX_VALUE),c.push("**")),b.length!=c.length?!1:c.join("")===b.join("")}function t(a,b){return J(a)&&!H(b)?C[a]:I(b)&&J(a)?(C[a]&&!C.$delegates[a]&&(C.$delegates[a]=C[a]),C[a]=b,this):this}function u(a,b){return K(a)?b=a:b.name=a,q(b),this}function v(a,e,f,h,l,n,p,q,t){function u(b,c,d,f){var g=a.$broadcast("$stateNotFound",b,c,d);if(g.defaultPrevented)return p.update(),D;if(!g.retry)return null;if(f.$retry)return p.update(),E;var h=y.transition=e.when(g.retry);return h.then(function(){return h!==y.transition?A:(b.options.$retry=!0,y.transitionTo(b.to,b.toParams,b.options))},function(){return D}),p.update(),h}function v(a,c,d,g,i,j){function m(){var c=[];return M(a.views,function(d,e){var g=d.resolve&&d.resolve!==a.resolve?d.resolve:{};g.$template=[function(){return f.load(e,{view:d,locals:i.globals,params:n,notify:j.notify})||""}],c.push(l.resolve(g,i.globals,i.resolve,a).then(function(c){if(I(d.controllerProvider)||L(d.controllerProvider)){var f=b.extend({},g,i.globals);c.$$controller=h.invoke(d.controllerProvider,null,f)}else c.$$controller=d.controller;c.$$state=a,c.$$controllerAs=d.controllerAs,i[e]=c}))}),e.all(c).then(function(){return i.globals})}var n=d?c:k(a.params.$$keys(),c),o={$stateParams:n};i.resolve=l.resolve(a.resolve,o,i.resolve,a);var p=[i.resolve.then(function(a){i.globals=a})];return g&&p.push(g),e.all(p).then(m).then(function(a){return i})}var A=e.reject(new Error("transition superseded")),C=e.reject(new Error("transition prevented")),D=e.reject(new Error("transition aborted")),E=e.reject(new Error("transition failed"));return x.locals={resolve:null,globals:{$stateParams:{}}},y={params:{},current:x.self,$current:x,transition:null},y.reload=function(a){return y.transitionTo(y.current,n,{reload:a||!0,inherit:!1,notify:!0})},y.go=function(a,b,c){return y.transitionTo(a,b,N({inherit:!0,relative:y.$current},c))},y.transitionTo=function(b,c,f){c=c||{},f=N({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},f||{});var g,j=y.$current,l=y.params,o=j.path,q=m(b,f.relative),r=c["#"];if(!H(q)){var s={to:b,toParams:c,options:f},t=u(s,j.self,l,f);if(t)return t;if(b=s.to,c=s.toParams,f=s.options,q=m(b,f.relative),!H(q)){if(!f.relative)throw new Error("No such state '"+b+"'");throw new Error("Could not resolve '"+b+"' from state '"+f.relative+"'")}}if(q[B])throw new Error("Cannot transition to abstract state '"+b+"'");if(f.inherit&&(c=i(n,c||{},y.$current,q)),!q.params.$$validates(c))return E;c=q.params.$$values(c),b=q;var z=b.path,D=0,F=z[D],G=x.locals,I=[];if(f.reload){if(J(f.reload)||K(f.reload)){if(K(f.reload)&&!f.reload.name)throw new Error("Invalid reload state object");var L=f.reload===!0?o[0]:m(f.reload);if(f.reload&&!L)throw new Error("No such reload state '"+(J(f.reload)?f.reload:f.reload.name)+"'");for(;F&&F===o[D]&&F!==L;)G=I[D]=F.locals,D++,F=z[D]}}else for(;F&&F===o[D]&&F.ownParams.$$equals(c,l);)G=I[D]=F.locals,D++,F=z[D];if(w(b,c,j,l,G,f))return r&&(c["#"]=r),y.params=c,O(y.params,n),f.location&&b.navigable&&b.navigable.url&&(p.push(b.navigable.url,c,{$$avoidResync:!0,replace:"replace"===f.location}),p.update(!0)),y.transition=null,e.when(y.current);if(c=k(b.params.$$keys(),c||{}),f.notify&&a.$broadcast("$stateChangeStart",b.self,c,j.self,l).defaultPrevented)return a.$broadcast("$stateChangeCancel",b.self,c,j.self,l),p.update(),C;for(var M=e.when(G),P=D;P<z.length;P++,F=z[P])G=I[P]=d(G),M=v(F,c,F===b,M,G,f);var Q=y.transition=M.then(function(){var d,e,g;if(y.transition!==Q)return A;for(d=o.length-1;d>=D;d--)g=o[d],g.self.onExit&&h.invoke(g.self.onExit,g.self,g.locals.globals),g.locals=null;for(d=D;d<z.length;d++)e=z[d],e.locals=I[d],e.self.onEnter&&h.invoke(e.self.onEnter,e.self,e.locals.globals);return r&&(c["#"]=r),y.transition!==Q?A:(y.$current=b,y.current=b.self,y.params=c,O(y.params,n),y.transition=null,f.location&&b.navigable&&p.push(b.navigable.url,b.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===f.location}),f.notify&&a.$broadcast("$stateChangeSuccess",b.self,c,j.self,l),p.update(!0),y.current)},function(d){return y.transition!==Q?A:(y.transition=null,g=a.$broadcast("$stateChangeError",b.self,c,j.self,l,d),g.defaultPrevented||p.update(),e.reject(d))});return Q},y.is=function(a,b,d){d=N({relative:y.$current},d||{});var e=m(a,d.relative);return H(e)?y.$current!==e?!1:b?j(e.params.$$values(b),n):!0:c},y.includes=function(a,b,d){if(d=N({relative:y.$current},d||{}),J(a)&&r(a)){if(!s(a))return!1;a=y.$current.name}var e=m(a,d.relative);return H(e)?H(y.$current.includes[e.name])?b?j(e.params.$$values(b),n,g(b)):!0:!1:c},y.href=function(a,b,d){d=N({lossy:!0,inherit:!0,absolute:!1,relative:y.$current},d||{});var e=m(a,d.relative);if(!H(e))return null;d.inherit&&(b=i(n,b||{},y.$current,e));var f=e&&d.lossy?e.navigable:e;return f&&f.url!==c&&null!==f.url?p.href(f.url,k(e.params.$$keys().concat("#"),b||{}),{absolute:d.absolute}):null},y.get=function(a,b){if(0===arguments.length)return o(g(z),function(a){return z[a].self});var c=m(a,b||y.$current);return c&&c.self?c.self:null},y}function w(a,b,c,d,e,f){function g(a,b,c){function d(b){return"search"!=a.params[b].location}var e=a.params.$$keys().filter(d),f=l.apply({},[a.params].concat(e)),g=new P.ParamSet(f);return g.$$equals(b,c)}return!f.reload&&a===c&&(e===c.locals||a.self.reloadOnSearch===!1&&g(c,d,b))?!0:void 0}var x,y,z={},A={},B="abstract",C={parent:function(a){if(H(a.parent)&&a.parent)return m(a.parent);var b=/^(.+)\.[^.]+$/.exec(a.name);return b?m(b[1]):x},data:function(a){return a.parent&&a.parent.data&&(a.data=a.self.data=N({},a.parent.data,a.data)),a.data},url:function(a){var b=a.url,c={params:a.params||{}};if(J(b))return"^"==b.charAt(0)?e.compile(b.substring(1),c):(a.parent.navigable||x).url.concat(b,c);if(!b||e.isMatcher(b))return b;throw new Error("Invalid url '"+b+"' in state '"+a+"'")},navigable:function(a){return a.url?a:a.parent?a.parent.navigable:null},ownParams:function(a){var b=a.url&&a.url.params||new P.ParamSet;return M(a.params||{},function(a,c){b[c]||(b[c]=new P.Param(c,null,a,"config"))}),b},params:function(a){return a.parent&&a.parent.params?N(a.parent.params.$$new(),a.ownParams):new P.ParamSet},views:function(a){var b={};return M(H(a.views)?a.views:{"":a},function(c,d){d.indexOf("@")<0&&(d+="@"+a.parent.name),b[d]=c}),b},path:function(a){return a.parent?a.parent.path.concat(a):[]},includes:function(a){var b=a.parent?N({},a.parent.includes):{};return b[a.name]=!0,b},$delegates:{}};x=q({name:"",url:"^",views:null,"abstract":!0}),x.navigable=null,this.decorator=t,this.state=u,this.$get=v,v.$inject=["$rootScope","$q","$view","$injector","$resolve","$stateParams","$urlRouter","$location","$urlMatcherFactory"]}function w(){function a(a,b){return{load:function(c,d){var e,f={template:null,controller:null,view:null,locals:null,notify:!0,async:!0,params:{}};return d=N(f,d),d.view&&(e=b.fromConfig(d.view,d.params,d.locals)),e&&d.notify&&a.$broadcast("$viewContentLoading",d),e}}}this.$get=a,a.$inject=["$rootScope","$templateFactory"]}function x(){var a=!1;this.useAnchorScroll=function(){a=!0},this.$get=["$anchorScroll","$timeout",function(b,c){return a?b:function(a){return c(function(){a[0].scrollIntoView()},0,!1)}}]}function y(a,c,d,e){function f(){return c.has?function(a){return c.has(a)?c.get(a):null}:function(a){try{return c.get(a)}catch(b){return null}}}function g(a,b){var c=function(){return{enter:function(a,b,c){b.after(a),c()},leave:function(a,b){a.remove(),b()}}};if(j)return{enter:function(a,b,c){var d=j.enter(a,null,b,c);d&&d.then&&d.then(c)},leave:function(a,b){var c=j.leave(a,b);c&&c.then&&c.then(b)}};if(i){var d=i&&i(b,a);return{enter:function(a,b,c){d.enter(a,null,b),c()},leave:function(a,b){d.leave(a),b()}}}return c()}var h=f(),i=h("$animator"),j=h("$animate"),k={restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(c,f,h){return function(c,f,i){function j(){l&&(l.remove(),l=null),n&&(n.$destroy(),n=null),m&&(r.leave(m,function(){l=null}),l=m,m=null)}function k(g){var k,l=A(c,i,f,e),s=l&&a.$current&&a.$current.locals[l];if(g||s!==o){k=c.$new(),o=a.$current.locals[l];var t=h(k,function(a){r.enter(a,f,function(){n&&n.$emit("$viewContentAnimationEnded"),(b.isDefined(q)&&!q||c.$eval(q))&&d(a)}),j()});m=t,n=k,n.$emit("$viewContentLoaded"),n.$eval(p)}}var l,m,n,o,p=i.onload||"",q=i.autoscroll,r=g(i,c);c.$on("$stateChangeSuccess",function(){k(!1)}),c.$on("$viewContentLoading",function(){k(!1)}),k(!0)}}};return k}function z(a,b,c,d){return{restrict:"ECA",priority:-400,compile:function(e){var f=e.html();return function(e,g,h){var i=c.$current,j=A(e,h,g,d),k=i&&i.locals[j];if(k){g.data("$uiView",{name:j,state:k.$$state}),g.html(k.$template?k.$template:f);var l=a(g.contents());if(k.$$controller){k.$scope=e,k.$element=g;var m=b(k.$$controller,k);k.$$controllerAs&&(e[k.$$controllerAs]=m),g.data("$ngControllerController",m),g.children().data("$ngControllerController",m)}l(e)}}}}}function A(a,b,c,d){var e=d(b.uiView||b.name||"")(a),f=c.inheritedData("$uiView");return e.indexOf("@")>=0?e:e+"@"+(f?f.state.name:"")}function B(a,b){var c,d=a.match(/^\s*({[^}]*})\s*$/);if(d&&(a=b+"("+d[1]+")"),c=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/),!c||4!==c.length)throw new Error("Invalid state ref '"+a+"'");return{state:c[1],paramExpr:c[3]||null}}function C(a){var b=a.parent().inheritedData("$uiView");return b&&b.state&&b.state.name?b.state:void 0}function D(a,c){var d=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(e,f,g,h){var i=B(g.uiSref,a.current.name),j=null,k=C(f)||a.$current,l="[object SVGAnimatedString]"===Object.prototype.toString.call(f.prop("href"))?"xlink:href":"href",m=null,n="A"===f.prop("tagName").toUpperCase(),o="FORM"===f[0].nodeName,p=o?"action":l,q=!0,r={relative:k,inherit:!0},s=e.$eval(g.uiSrefOpts)||{};b.forEach(d,function(a){a in s&&(r[a]=s[a])});var t=function(c){if(c&&(j=b.copy(c)),q){m=a.href(i.state,j,r);var d=h[1]||h[0];return d&&d.$$addStateInfo(i.state,j),null===m?(q=!1,!1):void g.$set(p,m)}};i.paramExpr&&(e.$watch(i.paramExpr,function(a,b){a!==j&&t(a)},!0),j=b.copy(e.$eval(i.paramExpr))),t(),o||f.bind("click",function(b){var d=b.which||b.button;if(!(d>1||b.ctrlKey||b.metaKey||b.shiftKey||f.attr("target"))){var e=c(function(){a.go(i.state,j,r)});b.preventDefault();var g=n&&!m?1:0;b.preventDefault=function(){g--<=0&&c.cancel(e)}}})}}}function E(a,b,c){return{restrict:"A",controller:["$scope","$element","$attrs",function(b,d,e){function f(){g()?d.addClass(i):d.removeClass(i)}function g(){for(var a=0;a<j.length;a++)if(h(j[a].state,j[a].params))return!0;return!1}function h(b,c){return"undefined"!=typeof e.uiSrefActiveEq?a.is(b.name,c):a.includes(b.name,c)}var i,j=[];i=c(e.uiSrefActiveEq||e.uiSrefActive||"",!1)(b),this.$$addStateInfo=function(b,c){var e=a.get(b,C(d));j.push({state:e||{name:b},params:c}),f()},b.$on("$stateChangeSuccess",f)}]}}function F(a){var b=function(b){return a.is(b)};return b.$stateful=!0,b}function G(a){var b=function(b){return a.includes(b)};return b.$stateful=!0,b}var H=b.isDefined,I=b.isFunction,J=b.isString,K=b.isObject,L=b.isArray,M=b.forEach,N=b.extend,O=b.copy;b.module("ui.router.util",["ng"]),b.module("ui.router.router",["ui.router.util"]),b.module("ui.router.state",["ui.router.router","ui.router.util"]),b.module("ui.router",["ui.router.state"]),b.module("ui.router.compat",["ui.router"]),p.$inject=["$q","$injector"],b.module("ui.router.util").service("$resolve",p),q.$inject=["$http","$templateCache","$injector"],b.module("ui.router.util").service("$templateFactory",q);var P;r.prototype.concat=function(a,b){var c={caseInsensitive:P.caseInsensitive(),strict:P.strictMode(),squash:P.defaultSquashPolicy()};return new r(this.sourcePath+a+this.sourceSearch,N(c,b),this)},r.prototype.toString=function(){return this.source},r.prototype.exec=function(a,b){function c(a){function b(a){return a.split("").reverse().join("")}function c(a){return a.replace(/\\-/g,"-")}var d=b(a).split(/-(?!\\)/),e=o(d,b);return o(e,c).reverse()}var d=this.regexp.exec(a);if(!d)return null;b=b||{};var e,f,g,h=this.parameters(),i=h.length,j=this.segments.length-1,k={};if(j!==d.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");for(e=0;j>e;e++){g=h[e];var l=this.params[g],m=d[e+1];for(f=0;f<l.replace;f++)l.replace[f].from===m&&(m=l.replace[f].to);m&&l.array===!0&&(m=c(m)),k[g]=l.value(m)}for(;i>e;e++)g=h[e],k[g]=this.params[g].value(b[g]);return k},r.prototype.parameters=function(a){return H(a)?this.params[a]||null:this.$$paramNames},r.prototype.validates=function(a){return this.params.$$validates(a)},r.prototype.format=function(a){function b(a){return encodeURIComponent(a).replace(/-/g,function(a){return"%5C%"+a.charCodeAt(0).toString(16).toUpperCase()})}a=a||{};var c=this.segments,d=this.parameters(),e=this.params;if(!this.validates(a))return null;var f,g=!1,h=c.length-1,i=d.length,j=c[0];for(f=0;i>f;f++){var k=h>f,l=d[f],m=e[l],n=m.value(a[l]),p=m.isOptional&&m.type.equals(m.value(),n),q=p?m.squash:!1,r=m.type.encode(n);if(k){var s=c[f+1];if(q===!1)null!=r&&(j+=L(r)?o(r,b).join("-"):encodeURIComponent(r)),j+=s;else if(q===!0){var t=j.match(/\/$/)?/\/?(.*)/:/(.*)/;j+=s.match(t)[1]}else J(q)&&(j+=q+s)}else{if(null==r||p&&q!==!1)continue;L(r)||(r=[r]),r=o(r,encodeURIComponent).join("&"+l+"="),j+=(g?"&":"?")+(l+"="+r),g=!0}}return j},s.prototype.is=function(a,b){return!0},s.prototype.encode=function(a,b){return a},s.prototype.decode=function(a,b){return a},s.prototype.equals=function(a,b){return a==b},s.prototype.$subPattern=function(){var a=this.pattern.toString();return a.substr(1,a.length-2)},s.prototype.pattern=/.*/,s.prototype.toString=function(){return"{Type:"+this.name+"}"},s.prototype.$normalize=function(a){return this.is(a)?a:this.decode(a)},s.prototype.$asArray=function(a,b){function d(a,b){function d(a,b){return function(){return a[b].apply(a,arguments)}}function e(a){return L(a)?a:H(a)?[a]:[]}function f(a){switch(a.length){case 0:return c;case 1:return"auto"===b?a[0]:a;default:return a}}function g(a){return!a}function h(a,b){return function(c){c=e(c);var d=o(c,a);return b===!0?0===n(d,g).length:f(d)}}function i(a){return function(b,c){var d=e(b),f=e(c);if(d.length!==f.length)return!1;for(var g=0;g<d.length;g++)if(!a(d[g],f[g]))return!1;return!0}}this.encode=h(d(a,"encode")),this.decode=h(d(a,"decode")),this.is=h(d(a,"is"),!0),this.equals=i(d(a,"equals")),this.pattern=a.pattern,this.$normalize=h(d(a,"$normalize")),this.name=a.name,this.$arrayMode=b}if(!a)return this;if("auto"===a&&!b)throw new Error("'auto' array mode is for query parameters only");return new d(this,a)},b.module("ui.router.util").provider("$urlMatcherFactory",t),b.module("ui.router.util").run(["$urlMatcherFactory",function(a){}]),u.$inject=["$locationProvider","$urlMatcherFactoryProvider"],b.module("ui.router.router").provider("$urlRouter",u),v.$inject=["$urlRouterProvider","$urlMatcherFactoryProvider"],b.module("ui.router.state").value("$stateParams",{}).provider("$state",v),w.$inject=[],b.module("ui.router.state").provider("$view",w),b.module("ui.router.state").provider("$uiViewScroll",x),y.$inject=["$state","$injector","$uiViewScroll","$interpolate"],z.$inject=["$compile","$controller","$state","$interpolate"],b.module("ui.router.state").directive("uiView",y),b.module("ui.router.state").directive("uiView",z),D.$inject=["$state","$timeout"],E.$inject=["$state","$stateParams","$interpolate"],b.module("ui.router.state").directive("uiSref",D).directive("uiSrefActive",E).directive("uiSrefActiveEq",E),F.$inject=["$state"],G.$inject=["$state"],b.module("ui.router.state").filter("isState",F).filter("includedByState",G)}(window,window.angular); \ No newline at end of file diff --git a/src/main/websrc/js/common/angular.min.js b/src/main/websrc/js/common/angular.min.js new file mode 100644 index 0000000..b4f9b07 --- /dev/null +++ b/src/main/websrc/js/common/angular.min.js @@ -0,0 +1,295 @@ +/* + AngularJS v1.4.8 + (c) 2010-2015 Google, Inc. http://angularjs.org + License: MIT +*/ +(function(S,X,u){'use strict';function G(a){return function(){var b=arguments[0],d;d="["+(a?a+":":"")+b+"] http://errors.angularjs.org/1.4.8/"+(a?a+"/":"")+b;for(b=1;b<arguments.length;b++){d=d+(1==b?"?":"&")+"p"+(b-1)+"=";var c=encodeURIComponent,e;e=arguments[b];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;d+=c(e)}return Error(d)}}function za(a){if(null==a||Xa(a))return!1;if(I(a)||E(a)||B&&a instanceof B)return!0; +var b="length"in Object(a)&&a.length;return Q(b)&&(0<=b&&b-1 in a||"function"==typeof a.item)}function n(a,b,d){var c,e;if(a)if(z(a))for(c in a)"prototype"==c||"length"==c||"name"==c||a.hasOwnProperty&&!a.hasOwnProperty(c)||b.call(d,a[c],c,a);else if(I(a)||za(a)){var f="object"!==typeof a;c=0;for(e=a.length;c<e;c++)(f||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==n)a.forEach(b,d,a);else if(nc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&& +b.call(d,a[c],c,a);else for(c in a)qa.call(a,c)&&b.call(d,a[c],c,a);return a}function oc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function pc(a){return function(b,d){a(d,b)}}function Td(){return++nb}function Mb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(H(g)||z(g))for(var h=Object.keys(g),k=0,l=h.length;k<l;k++){var m=h[k],r=g[m];d&&H(r)?da(r)?a[m]=new Date(r.valueOf()):Ma(r)?a[m]=new RegExp(r):r.nodeName?a[m]=r.cloneNode(!0): +Nb(r)?a[m]=r.clone():(H(a[m])||(a[m]=I(r)?[]:{}),Mb(a[m],[r],!0)):a[m]=r}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function M(a){return Mb(a,ra.call(arguments,1),!1)}function Ud(a){return Mb(a,ra.call(arguments,1),!0)}function ea(a){return parseInt(a,10)}function Ob(a,b){return M(Object.create(a),b)}function x(){}function Ya(a){return a}function na(a){return function(){return a}}function qc(a){return z(a.toString)&&a.toString!==sa}function q(a){return"undefined"===typeof a}function y(a){return"undefined"!== +typeof a}function H(a){return null!==a&&"object"===typeof a}function nc(a){return null!==a&&"object"===typeof a&&!rc(a)}function E(a){return"string"===typeof a}function Q(a){return"number"===typeof a}function da(a){return"[object Date]"===sa.call(a)}function z(a){return"function"===typeof a}function Ma(a){return"[object RegExp]"===sa.call(a)}function Xa(a){return a&&a.window===a}function Za(a){return a&&a.$evalAsync&&a.$watch}function $a(a){return"boolean"===typeof a}function sc(a){return a&&Q(a.length)&& +Vd.test(sa.call(a))}function Nb(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function Wd(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function ta(a){return F(a.nodeName||a[0]&&a[0].nodeName)}function ab(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function bb(a,b){function d(a,b){var d=b.$$hashKey,e;if(I(a)){e=0;for(var f=a.length;e<f;e++)b.push(c(a[e]))}else if(nc(a))for(e in a)b[e]=c(a[e]);else if(a&&"function"===typeof a.hasOwnProperty)for(e in a)a.hasOwnProperty(e)&& +(b[e]=c(a[e]));else for(e in a)qa.call(a,e)&&(b[e]=c(a[e]));d?b.$$hashKey=d:delete b.$$hashKey;return b}function c(a){if(!H(a))return a;var b=e.indexOf(a);if(-1!==b)return f[b];if(Xa(a)||Za(a))throw Aa("cpws");var b=!1,c;I(a)?(c=[],b=!0):sc(a)?c=new a.constructor(a):da(a)?c=new Date(a.getTime()):Ma(a)?(c=new RegExp(a.source,a.toString().match(/[^\/]*$/)[0]),c.lastIndex=a.lastIndex):z(a.cloneNode)?c=a.cloneNode(!0):(c=Object.create(rc(a)),b=!0);e.push(a);f.push(c);return b?d(a,c):c}var e=[],f=[];if(b){if(sc(b))throw Aa("cpta"); +if(a===b)throw Aa("cpi");I(b)?b.length=0:n(b,function(a,c){"$$hashKey"!==c&&delete b[c]});e.push(a);f.push(b);return d(a,b)}return c(a)}function ia(a,b){if(I(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(H(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];return b||a}function ma(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d=typeof a,c;if(d==typeof b&&"object"==d)if(I(a)){if(!I(b))return!1;if((d=a.length)==b.length){for(c= +0;c<d;c++)if(!ma(a[c],b[c]))return!1;return!0}}else{if(da(a))return da(b)?ma(a.getTime(),b.getTime()):!1;if(Ma(a))return Ma(b)?a.toString()==b.toString():!1;if(Za(a)||Za(b)||Xa(a)||Xa(b)||I(b)||da(b)||Ma(b))return!1;d=$();for(c in a)if("$"!==c.charAt(0)&&!z(a[c])){if(!ma(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&y(b[c])&&!z(b[c]))return!1;return!0}return!1}function cb(a,b,d){return a.concat(ra.call(b,d))}function tc(a,b){var d=2<arguments.length?ra.call(arguments,2): +[];return!z(b)||b instanceof RegExp?b:d.length?function(){return arguments.length?b.apply(a,cb(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function Xd(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=u:Xa(b)?d="$WINDOW":b&&X===b?d="$DOCUMENT":Za(b)&&(d="$SCOPE");return d}function db(a,b){if("undefined"===typeof a)return u;Q(b)||(b=b?2:null);return JSON.stringify(a,Xd,b)}function uc(a){return E(a)?JSON.parse(a):a}function vc(a, +b){var d=Date.parse("Jan 01, 1970 00:00:00 "+a)/6E4;return isNaN(d)?b:d}function Pb(a,b,d){d=d?-1:1;var c=vc(b,a.getTimezoneOffset());b=a;a=d*(c-a.getTimezoneOffset());b=new Date(b.getTime());b.setMinutes(b.getMinutes()+a);return b}function ua(a){a=B(a).clone();try{a.empty()}catch(b){}var d=B("<div>").append(a).html();try{return a[0].nodeType===Na?F(d):d.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+F(b)})}catch(c){return F(d)}}function wc(a){try{return decodeURIComponent(a)}catch(b){}} +function xc(a){var b={};n((a||"").split("&"),function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=wc(e),y(e)&&(f=y(f)?wc(f):!0,qa.call(b,e)?I(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function Qb(a){var b=[];n(a,function(a,c){I(a)?n(a,function(a){b.push(ja(c,!0)+(!0===a?"":"="+ja(a,!0)))}):b.push(ja(c,!0)+(!0===a?"":"="+ja(a,!0)))});return b.length?b.join("&"):""}function ob(a){return ja(a,!0).replace(/%26/gi,"&").replace(/%3D/gi, +"=").replace(/%2B/gi,"+")}function ja(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function Yd(a,b){var d,c,e=Oa.length;for(c=0;c<e;++c)if(d=Oa[c]+b,E(d=a.getAttribute(d)))return d;return null}function Zd(a,b){var d,c,e={};n(Oa,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});n(Oa,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":", +"\\:")+"]"))&&(d=e,c=e.getAttribute(b))});d&&(e.strictDi=null!==Yd(d,"strict-di"),b(d,c?[c]:[],e))}function yc(a,b,d){H(d)||(d={});d=M({strictDi:!1},d);var c=function(){a=B(a);if(a.injector()){var c=a[0]===X?"document":ua(a);throw Aa("btstrpd",c.replace(/</,"<").replace(/>/,">"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);b.unshift("ng");c=eb(b,d.strictDi);c.invoke(["$rootScope", +"$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;S&&e.test(S.name)&&(d.debugInfoEnabled=!0,S.name=S.name.replace(e,""));if(S&&!f.test(S.name))return c();S.name=S.name.replace(f,"");fa.resumeBootstrap=function(a){n(a,function(a){b.push(a)});return c()};z(fa.resumeDeferredBootstrap)&&fa.resumeDeferredBootstrap()}function $d(){S.name="NG_ENABLE_DEBUG_INFO!"+S.name;S.location.reload()} +function ae(a){a=fa.element(a).injector();if(!a)throw Aa("test");return a.get("$$testability")}function zc(a,b){b=b||"_";return a.replace(be,function(a,c){return(c?b:"")+a.toLowerCase()})}function ce(){var a;if(!Ac){var b=pb();(oa=q(b)?S.jQuery:b?S[b]:u)&&oa.fn.on?(B=oa,M(oa.fn,{scope:Pa.scope,isolateScope:Pa.isolateScope,controller:Pa.controller,injector:Pa.injector,inheritedData:Pa.inheritedData}),a=oa.cleanData,oa.cleanData=function(b){var c;if(Rb)Rb=!1;else for(var e=0,f;null!=(f=b[e]);e++)(c= +oa._data(f,"events"))&&c.$destroy&&oa(f).triggerHandler("$destroy");a(b)}):B=N;fa.element=B;Ac=!0}}function qb(a,b,d){if(!a)throw Aa("areq",b||"?",d||"required");return a}function Qa(a,b,d){d&&I(a)&&(a=a[a.length-1]);qb(z(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Ra(a,b){if("hasOwnProperty"===a)throw Aa("badname",b);}function Bc(a,b,d){if(!b)return a;b=b.split(".");for(var c,e=a,f=b.length,g=0;g<f;g++)c=b[g],a&&(a=(e=a)[c]);return!d&& +z(a)?tc(e,a):a}function rb(a){for(var b=a[0],d=a[a.length-1],c,e=1;b!==d&&(b=b.nextSibling);e++)if(c||a[e]!==b)c||(c=B(ra.call(a,0,e))),c.push(b);return c||a}function $(){return Object.create(null)}function de(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=G("$injector"),c=G("ng");a=b(a,"angular",Object);a.$$minErr=a.$$minErr||G;return b(a,"module",function(){var a={};return function(f,g,h){if("hasOwnProperty"===f)throw c("badname","module");g&&a.hasOwnProperty(f)&&(a[f]=null);return b(a,f,function(){function a(b, +d,e,f){f||(f=c);return function(){f[e||"push"]([b,d,arguments]);return v}}function b(a,d){return function(b,e){e&&z(e)&&(e.$$moduleName=f);c.push([a,d,arguments]);return v}}if(!g)throw d("nomod",f);var c=[],e=[],t=[],A=a("$injector","invoke","push",e),v={_invokeQueue:c,_configBlocks:e,_runBlocks:t,requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide", +"decorator"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),config:A,run:function(a){t.push(a);return this}};h&&A(h);return v})}})}function ee(a){M(a,{bootstrap:yc,copy:bb,extend:M,merge:Ud,equals:ma,element:B,forEach:n,injector:eb,noop:x,bind:tc,toJson:db,fromJson:uc,identity:Ya,isUndefined:q,isDefined:y,isString:E,isFunction:z,isObject:H,isNumber:Q,isElement:Nb,isArray:I, +version:fe,isDate:da,lowercase:F,uppercase:sb,callbacks:{counter:0},getTestability:ae,$$minErr:G,$$csp:Ba,reloadWithDebugInfo:$d});Sb=de(S);Sb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:ge});a.provider("$compile",Cc).directive({a:he,input:Dc,textarea:Dc,form:ie,script:je,select:ke,style:le,option:me,ngBind:ne,ngBindHtml:oe,ngBindTemplate:pe,ngClass:qe,ngClassEven:re,ngClassOdd:se,ngCloak:te,ngController:ue,ngForm:ve,ngHide:we,ngIf:xe,ngInclude:ye,ngInit:ze,ngNonBindable:Ae, +ngPluralize:Be,ngRepeat:Ce,ngShow:De,ngStyle:Ee,ngSwitch:Fe,ngSwitchWhen:Ge,ngSwitchDefault:He,ngOptions:Ie,ngTransclude:Je,ngModel:Ke,ngList:Le,ngChange:Me,pattern:Ec,ngPattern:Ec,required:Fc,ngRequired:Fc,minlength:Gc,ngMinlength:Gc,maxlength:Hc,ngMaxlength:Hc,ngValue:Ne,ngModelOptions:Oe}).directive({ngInclude:Pe}).directive(tb).directive(Ic);a.provider({$anchorScroll:Qe,$animate:Re,$animateCss:Se,$$animateQueue:Te,$$AnimateRunner:Ue,$browser:Ve,$cacheFactory:We,$controller:Xe,$document:Ye,$exceptionHandler:Ze, +$filter:Jc,$$forceReflow:$e,$interpolate:af,$interval:bf,$http:cf,$httpParamSerializer:df,$httpParamSerializerJQLike:ef,$httpBackend:ff,$xhrFactory:gf,$location:hf,$log:jf,$parse:kf,$rootScope:lf,$q:mf,$$q:nf,$sce:of,$sceDelegate:pf,$sniffer:qf,$templateCache:rf,$templateRequest:sf,$$testability:tf,$timeout:uf,$window:vf,$$rAF:wf,$$jqLite:xf,$$HashMap:yf,$$cookieReader:zf})}])}function fb(a){return a.replace(Af,function(a,d,c,e){return e?c.toUpperCase():c}).replace(Bf,"Moz$1")}function Kc(a){a=a.nodeType; +return 1===a||!a||9===a}function Lc(a,b){var d,c,e=b.createDocumentFragment(),f=[];if(Tb.test(a)){d=d||e.appendChild(b.createElement("div"));c=(Cf.exec(a)||["",""])[1].toLowerCase();c=ka[c]||ka._default;d.innerHTML=c[1]+a.replace(Df,"<$1></$2>")+c[2];for(c=c[0];c--;)d=d.lastChild;f=cb(f,d.childNodes);d=e.firstChild;d.textContent=""}else f.push(b.createTextNode(a));e.textContent="";e.innerHTML="";n(f,function(a){e.appendChild(a)});return e}function N(a){if(a instanceof N)return a;var b;E(a)&&(a=U(a), +b=!0);if(!(this instanceof N)){if(b&&"<"!=a.charAt(0))throw Ub("nosel");return new N(a)}if(b){b=X;var d;a=(d=Ef.exec(a))?[b.createElement(d[1])]:(d=Lc(a,b))?d.childNodes:[]}Mc(this,a)}function Vb(a){return a.cloneNode(!0)}function ub(a,b){b||vb(a);if(a.querySelectorAll)for(var d=a.querySelectorAll("*"),c=0,e=d.length;c<e;c++)vb(d[c])}function Nc(a,b,d,c){if(y(c))throw Ub("offargs");var e=(c=wb(a))&&c.events,f=c&&c.handle;if(f)if(b){var g=function(b){var c=e[b];y(d)&&ab(c||[],d);y(d)&&c&&0<c.length|| +(a.removeEventListener(b,f,!1),delete e[b])};n(b.split(" "),function(a){g(a);xb[a]&&g(xb[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f,!1),delete e[b]}function vb(a,b){var d=a.ng339,c=d&&gb[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),Nc(a)),delete gb[d],a.ng339=u))}function wb(a,b){var d=a.ng339,d=d&&gb[d];b&&!d&&(a.ng339=d=++Ff,d=gb[d]={events:{},data:{},handle:u});return d}function Wb(a,b,d){if(Kc(a)){var c=y(d),e=!c&&b&&!H(b),f=!b;a=(a=wb(a, +!e))&&a.data;if(c)a[b]=d;else{if(f)return a;if(e)return a&&a[b];M(a,b)}}}function yb(a,b){return a.getAttribute?-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function zb(a,b){b&&a.setAttribute&&n(b.split(" "),function(b){a.setAttribute("class",U((" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+U(b)+" "," ")))})}function Ab(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");n(b.split(" "), +function(a){a=U(a);-1===d.indexOf(" "+a+" ")&&(d+=a+" ")});a.setAttribute("class",U(d))}}function Mc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"===typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function Oc(a,b){return Bb(a,"$"+(b||"ngController")+"Controller")}function Bb(a,b,d){9==a.nodeType&&(a=a.documentElement);for(b=I(b)?b:[b];a;){for(var c=0,e=b.length;c<e;c++)if(y(d=B.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&& +a.host}}function Pc(a){for(ub(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Xb(a,b){b||ub(a);var d=a.parentNode;d&&d.removeChild(a)}function Gf(a,b){b=b||S;if("complete"===b.document.readyState)b.setTimeout(a);else B(b).on("load",a)}function Qc(a,b){var d=Cb[b.toLowerCase()];return d&&Rc[ta(a)]&&d}function Hf(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=b[d||c.type],g=f?f.length:0;if(g){if(q(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation; +c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};var k=f.specialHandlerWrapper||If;1<g&&(f=ia(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||k(a,c,f[l])}};d.elem=a;return d}function If(a,b,d){d.call(a,b)}function Jf(a,b,d){var c=b.relatedTarget;c&&(c===a||Kf.call(a,c))||d.call(a,b)}function xf(){this.$get=function(){return M(N, +{hasClass:function(a,b){a.attr&&(a=a[0]);return yb(a,b)},addClass:function(a,b){a.attr&&(a=a[0]);return Ab(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);return zb(a,b)}})}}function Ca(a,b){var d=a&&a.$$hashKey;if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"==d||"object"==d&&null!==a?a.$$hashKey=d+":"+(b||Td)():d+":"+a}function Sa(a,b){if(b){var d=0;this.nextUid=function(){return++d}}n(a,this.put,this)}function Lf(a){return(a=a.toString().replace(Sc,"").match(Tc))? +"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function eb(a,b){function d(a){return function(b,c){if(H(b))n(b,pc(a));else return a(b,c)}}function c(a,b){Ra(a,"service");if(z(b)||I(b))b=t.instantiate(b);if(!b.$get)throw Da("pget",a);return r[a+"Provider"]=b}function e(a,b){return function(){var c=v.invoke(b,this);if(q(c))throw Da("undef",a);return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){qb(q(a)||I(a),"modulesToLoad","not an array");var b=[],c;n(a,function(a){function d(a){var b, +c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=t.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.put(a,!0);try{E(a)?(c=Sb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):z(a)?b.push(t.invoke(a)):I(a)?b.push(t.invoke(a)):Qa(a,"module")}catch(e){throw I(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Da("modulerr",a,e.stack||e.message||e);}}});return b}function h(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]=== +k)throw Da("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=k,a[b]=c(b,e)}catch(f){throw a[b]===k&&delete a[b],f;}finally{l.shift()}}function e(a,c,f,g){"string"===typeof f&&(g=f,f=null);var h=[],k=eb.$$annotate(a,b,g),l,m,t;m=0;for(l=k.length;m<l;m++){t=k[m];if("string"!==typeof t)throw Da("itkn",t);h.push(f&&f.hasOwnProperty(t)?f[t]:d(t,g))}I(a)&&(a=a[l]);return a.apply(c,h)}return{invoke:e,instantiate:function(a,b,c){var d=Object.create((I(a)?a[a.length-1]:a).prototype|| +null);a=e(a,d,b,c);return H(a)||z(a)?a:d},get:d,annotate:eb.$$annotate,has:function(b){return r.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},l=[],m=new Sa([],!0),r={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a,na(b),!1)}),constant:d(function(a,b){Ra(a,"constant");r[a]=b;A[a]=b}),decorator:function(a,b){var c=t.get(a+"Provider"),d=c.$get;c.$get=function(){var a= +v.invoke(d,c);return v.invoke(b,null,{$delegate:a})}}}},t=r.$injector=h(r,function(a,b){fa.isString(b)&&l.push(b);throw Da("unpr",l.join(" <- "));}),A={},v=A.$injector=h(A,function(a,b){var c=t.get(a+"Provider",b);return v.invoke(c.$get,c,u,a)});n(g(a),function(a){a&&v.invoke(a)});return v}function Qe(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,d,c){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===ta(a))return b= +a,!0});return b}function f(a){if(a){a.scrollIntoView();var c;c=g.yOffset;z(c)?c=c():Nb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):Q(c)||(c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=E(a)?a:d.hash();var b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a===b&&""===a||Gf(function(){c.$evalAsync(g)})}); +return g}]}function hb(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;I(a)&&(a=a.join(" "));I(b)&&(b=b.join(" "));return a+" "+b}function Mf(a){E(a)&&(a=a.split(" "));var b=$();n(a,function(a){a.length&&(b[a]=!0)});return b}function Ea(a){return H(a)?a:{}}function Nf(a,b,d,c){function e(a){try{a.apply(null,ra.call(arguments,1))}finally{if(v--,0===v)for(;T.length;)try{T.pop()()}catch(b){d.error(b)}}}function f(){L=null;g();h()}function g(){a:{try{p=m.state;break a}catch(a){}p=void 0}p=q(p)? +null:p;ma(p,J)&&(p=J);J=p}function h(){if(w!==k.url()||C!==p)w=k.url(),C=p,n(aa,function(a){a(k.url(),p)})}var k=this,l=a.location,m=a.history,r=a.setTimeout,t=a.clearTimeout,A={};k.isMock=!1;var v=0,T=[];k.$$completeOutstandingRequest=e;k.$$incOutstandingRequestCount=function(){v++};k.notifyWhenNoOutstandingRequests=function(a){0===v?a():T.push(a)};var p,C,w=l.href,ga=b.find("base"),L=null;g();C=p;k.url=function(b,d,e){q(e)&&(e=null);l!==a.location&&(l=a.location);m!==a.history&&(m=a.history);if(b){var f= +C===e;if(w===b&&(!c.history||f))return k;var h=w&&Fa(w)===Fa(b);w=b;C=e;if(!c.history||h&&f){if(!h||L)L=b;d?l.replace(b):h?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b;l.href!==b&&(L=b)}else m[d?"replaceState":"pushState"](e,"",b),g(),C=p;return k}return L||l.href.replace(/%27/g,"'")};k.state=function(){return p};var aa=[],D=!1,J=null;k.onUrlChange=function(b){if(!D){if(c.history)B(a).on("popstate",f);B(a).on("hashchange",f);D=!0}aa.push(b);return b};k.$$applicationDestroyed=function(){B(a).off("hashchange popstate", +f)};k.$$checkUrlChange=h;k.baseHref=function(){var a=ga.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};k.defer=function(a,b){var c;v++;c=r(function(){delete A[c];e(a)},b||0);A[c]=!0;return c};k.defer.cancel=function(a){return A[a]?(delete A[a],t(a),e(x),!0):!1}}function Ve(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new Nf(a,c,b,d)}]}function We(){this.$get=function(){function a(a,c){function e(a){a!=r&&(t?t==a&&(t=a.n):t=a,f(a.n,a.p),f(a,r),r=a, +r.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw G("$cacheFactory")("iid",a);var g=0,h=M({},c,{id:a}),k=$(),l=c&&c.capacity||Number.MAX_VALUE,m=$(),r=null,t=null;return b[a]={put:function(a,b){if(!q(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}a in k||g++;k[a]=b;g>l&&this.remove(t.key);return b}},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b==r&&(r=b.p);b==t&& +(t=b.n);f(b.n,b.p);delete m[a]}a in k&&(delete k[a],g--)},removeAll:function(){k=$();g=0;m=$();r=t=null},destroy:function(){m=h=k=null;delete b[a]},info:function(){return M({},h,{size:g})}}}var b={};a.info=function(){var a={};n(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}}function rf(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Cc(a,b){function d(a,b,c){var d=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,e={};n(a,function(a,f){var g=a.match(d); +if(!g)throw ha("iscp",b,f,a,c?"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f}});return e}function c(a){var b=a.charAt(0);if(!b||b!==F(b))throw ha("baddir",a);if(a!==a.trim())throw ha("baddir",a);}var e={},f=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,g=/(([\w\-]+)(?:\:([^;]+))?;?)/,h=Wd("ngSrc,ngSrcset,src,srcset"),k=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,l=/^(on[a-z]+|formaction)$/;this.directive=function t(b,f){Ra(b,"directive"); +E(b)?(c(b),qb(f,"directiveFactory"),e.hasOwnProperty(b)||(e[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var f=[];n(e[b],function(e,g){try{var h=a.invoke(e);z(h)?h={compile:na(h)}:!h.compile&&h.link&&(h.compile=na(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||b;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"EA";var k=h,l=h,m=h.name,t={isolateScope:null,bindToController:null};H(l.scope)&&(!0===l.bindToController?(t.bindToController=d(l.scope, +m,!0),t.isolateScope={}):t.isolateScope=d(l.scope,m,!1));H(l.bindToController)&&(t.bindToController=d(l.bindToController,m,!0));if(H(t.bindToController)){var v=l.controller,R=l.controllerAs;if(!v)throw ha("noctrl",m);var V;a:if(R&&E(R))V=R;else{if(E(v)){var n=Uc.exec(v);if(n){V=n[3];break a}}V=void 0}if(!V)throw ha("noident",m);}var s=k.$$bindings=t;H(s.isolateScope)&&(h.$$isolateBindings=s.isolateScope);h.$$moduleName=e.$$moduleName;f.push(h)}catch(u){c(u)}});return f}])),e[b].push(f)):n(b,pc(t)); +return this};this.aHrefSanitizationWhitelist=function(a){return y(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return y(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var m=!0;this.debugInfoEnabled=function(a){return y(a)?(m=a,this):m};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a, +b,c,d,p,C,w,ga,L,aa,D){function J(a,b){try{a.addClass(b)}catch(c){}}function K(a,b,c,d,e){a instanceof B||(a=B(a));n(a,function(b,c){b.nodeType==Na&&b.nodeValue.match(/\S+/)&&(a[c]=B(b).wrap("<span></span>").parent()[0])});var f=O(a,b,a,c,d,e);K.$$addScopeClass(a);var g=null;return function(b,c,d){qb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var h=d.parentBoundTranscludeFn,k=d.transcludeControllers;d=d.futureParentElement;h&&h.$$boundTransclude&&(h=h.$$boundTransclude);g||(g=(d= +d&&d[0])?"foreignobject"!==ta(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?B(Yb(g,B("<div>").append(a).html())):c?Pa.clone.call(a):a;if(k)for(var l in k)d.data("$"+l+"Controller",k[l].instance);K.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,h);return d}}function O(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,m,t,w,D;if(p)for(D=Array(c.length),m=0;m<h.length;m+=3)f=h[m],D[f]=c[f];else D=c;m=0;for(t=h.length;m<t;)k=D[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),K.$$addScopeInfo(B(k), +l)):l=a,w=c.transcludeOnThisElement?R(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?R(a,b):null,c(f,l,k,d,w)):f&&f(a,k.childNodes,u,e)}for(var h=[],k,l,m,t,p,w=0;w<a.length;w++){k=new fa;l=V(a[w],[],k,0===w?d:u,e);(f=l.length?Z(l,a[w],k,b,c,null,[],[],f):null)&&f.scope&&K.$$addScopeClass(k.$$element);k=f&&f.terminal||!(m=a[w].childNodes)||!m.length?null:O(m,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(w,f,k),t=!0,p=p||f;f=null}return t?g:null}function R(a, +b,c){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})}}function V(a,b,c,d,e){var h=c.$attr,k;switch(a.nodeType){case 1:P(b,va(ta(a)),"E",d,e);for(var l,m,t,p=a.attributes,w=0,D=p&&p.length;w<D;w++){var K=!1,A=!1;l=p[w];k=l.name;m=U(l.value);l=va(k);if(t=ka.test(l))k=k.replace(Vc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()});(l=l.match(la))&&G(l[1])&&(K=k,A=k.substr(0,k.length- +5)+"end",k=k.substr(0,k.length-6));l=va(k.toLowerCase());h[l]=k;if(t||!c.hasOwnProperty(l))c[l]=m,Qc(a,l)&&(c[l]=!0);W(a,b,m,l,t);P(b,l,"A",d,e,K,A)}a=a.className;H(a)&&(a=a.animVal);if(E(a)&&""!==a)for(;k=g.exec(a);)l=va(k[2]),P(b,l,"C",d,e)&&(c[l]=U(k[3])),a=a.substr(k.index+k[0].length);break;case Na:if(11===Ha)for(;a.parentNode&&a.nextSibling&&a.nextSibling.nodeType===Na;)a.nodeValue+=a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);N(b,a.nodeValue);break;case 8:try{if(k=f.exec(a.nodeValue))l= +va(k[1]),P(b,l,"M",d,e)&&(c[l]=U(k[2]))}catch(R){}}b.sort(Ia);return b}function Ta(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ha("uterdir",b,c);1==a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return B(d)}function s(a,b,c){return function(d,e,f,g,h){e=Ta(e[0],b,c);return a(d,e,f,g,h)}}function Z(a,b,d,e,f,g,h,l,m){function t(a,b,c,d){if(a){c&&(a=s(a,c,d));a.require=q.require;a.directiveName=x;if(O=== +q||q.$$isolateScope)a=ca(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=s(b,c,d));b.require=q.require;b.directiveName=x;if(O===q||q.$$isolateScope)b=ca(b,{isolateScope:!0});l.push(b)}}function p(a,b,c,d){var e;if(E(b)){var f=b.match(k);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];"^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance;e||(d="$"+b+"Controller",e=g?c.inheritedData(d):c.data(d));if(!e&&!f)throw ha("ctreq",b,a);}else if(I(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=p(a,b[g],c,d);return e|| +null}function w(a,b,c,d,e,f){var g=$(),h;for(h in d){var k=d[h],l={$scope:k===O||k.$$isolateScope?e:f,$element:a,$attrs:b,$transclude:c},m=k.controller;"@"==m&&(m=b[k.name]);l=C(m,l,!0,k.controllerAs);g[k.name]=l;aa||a.data("$"+k.name+"Controller",l.instance)}return g}function D(a,c,e,f,g){function k(a,b,c){var d;Za(a)||(c=b,b=a,a=u);aa&&(d=v);c||(c=aa?V.parent():V);return g(a,b,d,c,Ta)}var m,t,A,v,C,V,Ga;b===e?(f=d,V=d.$$element):(V=B(e),f=new fa(V,d));A=c;O?t=c.$new(!0):R&&(A=c.$parent);g&&(C=k, +C.$$boundTransclude=g);T&&(v=w(V,f,C,T,t,c));O&&(K.$$addScopeInfo(V,t,!0,!(J&&(J===O||J===O.$$originalDirective))),K.$$addScopeClass(V,!0),t.$$isolateBindings=O.$$isolateBindings,(Ga=ba(c,f,t,t.$$isolateBindings,O))&&t.$on("$destroy",Ga));for(var n in v){Ga=T[n];var ga=v[n],L=Ga.$$bindings.bindToController;ga.identifier&&L&&(m=ba(A,f,ga.instance,L,Ga));var q=ga();q!==ga.instance&&(ga.instance=q,V.data("$"+Ga.name+"Controller",q),m&&m(),m=ba(A,f,ga.instance,L,Ga))}F=0;for(M=h.length;F<M;F++)m=h[F], +ea(m,m.isolateScope?t:c,V,f,m.require&&p(m.directiveName,m.require,V,v),C);var Ta=c;O&&(O.template||null===O.templateUrl)&&(Ta=t);a&&a(Ta,e.childNodes,u,g);for(F=l.length-1;0<=F;F--)m=l[F],ea(m,m.isolateScope?t:c,V,f,m.require&&p(m.directiveName,m.require,V,v),C)}m=m||{};for(var A=-Number.MAX_VALUE,R=m.newScopeDirective,T=m.controllerDirectives,O=m.newIsolateScopeDirective,J=m.templateDirective,n=m.nonTlbTranscludeDirective,ga=!1,L=!1,aa=m.hasElementTranscludeDirective,Z=d.$$element=B(b),q,x,P,Ia= +e,G,F=0,M=a.length;F<M;F++){q=a[F];var N=q.$$start,Q=q.$$end;N&&(Z=Ta(b,N,Q));P=u;if(A>q.priority)break;if(P=q.scope)q.templateUrl||(H(P)?(Ua("new/isolated scope",O||R,q,Z),O=q):Ua("new/isolated scope",O,q,Z)),R=R||q;x=q.name;!q.templateUrl&&q.controller&&(P=q.controller,T=T||$(),Ua("'"+x+"' controller",T[x],q,Z),T[x]=q);if(P=q.transclude)ga=!0,q.$$tlb||(Ua("transclusion",n,q,Z),n=q),"element"==P?(aa=!0,A=q.priority,P=Z,Z=d.$$element=B(X.createComment(" "+x+": "+d[x]+" ")),b=Z[0],Y(f,ra.call(P,0), +b),Ia=K(P,e,A,g&&g.name,{nonTlbTranscludeDirective:n})):(P=B(Vb(b)).contents(),Z.empty(),Ia=K(P,e,u,u,{needsNewScope:q.$$isolateScope||q.$$newScope}));if(q.template)if(L=!0,Ua("template",J,q,Z),J=q,P=z(q.template)?q.template(Z,d):q.template,P=ja(P),q.replace){g=q;P=Tb.test(P)?Xc(Yb(q.templateNamespace,U(P))):[];b=P[0];if(1!=P.length||1!==b.nodeType)throw ha("tplrt",x,"");Y(f,Z,b);P={$attr:{}};var Wc=V(b,[],P),W=a.splice(F+1,a.length-(F+1));(O||R)&&y(Wc,O,R);a=a.concat(Wc).concat(W);S(d,P);M=a.length}else Z.html(P); +if(q.templateUrl)L=!0,Ua("template",J,q,Z),J=q,q.replace&&(g=q),D=Of(a.splice(F,a.length-F),Z,d,f,ga&&Ia,h,l,{controllerDirectives:T,newScopeDirective:R!==q&&R,newIsolateScopeDirective:O,templateDirective:J,nonTlbTranscludeDirective:n}),M=a.length;else if(q.compile)try{G=q.compile(Z,d,Ia),z(G)?t(null,G,N,Q):G&&t(G.pre,G.post,N,Q)}catch(da){c(da,ua(Z))}q.terminal&&(D.terminal=!0,A=Math.max(A,q.priority))}D.scope=R&&!0===R.scope;D.transcludeOnThisElement=ga;D.templateOnThisElement=L;D.transclude=Ia; +m.hasElementTranscludeDirective=aa;return D}function y(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=Ob(a[d],{$$isolateScope:b,$$newScope:c})}function P(b,d,f,g,h,k,l){if(d===h)return null;h=null;if(e.hasOwnProperty(d)){var m;d=a.get(d+"Directive");for(var p=0,w=d.length;p<w;p++)try{m=d[p],(q(g)||g>m.priority)&&-1!=m.restrict.indexOf(f)&&(k&&(m=Ob(m,{$$start:k,$$end:l})),b.push(m),h=m)}catch(D){c(D)}}return h}function G(b){if(e.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,f=c.length;d<f;d++)if(b= +c[d],b.multiElement)return!0;return!1}function S(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;n(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});n(b,function(b,f){"class"==f?(J(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function Of(a,b,c,e,f,g,h,k){var l=[],m,t,p=b[0],w=a.shift(),D=Ob(w,{templateUrl:null, +transclude:null,replace:null,$$originalDirective:w}),A=z(w.templateUrl)?w.templateUrl(b,c):w.templateUrl,K=w.templateNamespace;b.empty();d(A).then(function(d){var T,v;d=ja(d);if(w.replace){d=Tb.test(d)?Xc(Yb(K,U(d))):[];T=d[0];if(1!=d.length||1!==T.nodeType)throw ha("tplrt",w.name,A);d={$attr:{}};Y(e,b,T);var C=V(T,[],d);H(w.scope)&&y(C,!0);a=C.concat(a);S(c,d)}else T=p,b.html(d);a.unshift(D);m=Z(a,T,c,f,b,w,g,h,k);n(e,function(a,c){a==T&&(e[c]=b[0])});for(t=O(b[0].childNodes,f);l.length;){d=l.shift(); +v=l.shift();var ga=l.shift(),L=l.shift(),C=b[0];if(!d.$$destroyed){if(v!==p){var q=v.className;k.hasElementTranscludeDirective&&w.replace||(C=Vb(T));Y(ga,B(v),C);J(B(C),q)}v=m.transcludeOnThisElement?R(d,m.transclude,L):L;m(t,d,C,e,v)}}l=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(l?l.push(b,c,d,a):(m.transcludeOnThisElement&&(a=R(b,m.transclude,e)),m(t,b,c,d,a)))}}function Ia(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function Ua(a, +b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw ha("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,ua(d));}function N(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&K.$$addBindingClass(a);return function(a,c){var e=c.parent();b||K.$$addBindingClass(e);K.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function Yb(a,b){a=F(a||"html");switch(a){case "svg":case "math":var c=X.createElement("div"); +c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function Q(a,b){if("srcdoc"==b)return L.HTML;var c=ta(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return L.RESOURCE_URL}function W(a,c,d,e,f){var g=Q(a,e);f=h[e]||f;var k=b(d,!0,g,f);if(k){if("multiple"===e&&"select"===ta(a))throw ha("selmulti",ua(a));c.push({priority:100,compile:function(){return{pre:function(a,c,h){c=h.$$observers||(h.$$observers=$());if(l.test(e))throw ha("nodomevents"); +var m=h[e];m!==d&&(k=m&&b(m,!0,g,f),d=m);k&&(h[e]=k(a),(c[e]||(c[e]=[])).$$inter=!0,(h.$$observers&&h.$$observers[e].$$scope||a).$watch(k,function(a,b){"class"===e&&a!=b?h.$updateClass(a,b):h.$set(e,a)}))}}}})}}function Y(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=X.createDocumentFragment();a.appendChild(d); +B.hasData(d)&&(B.data(c,B.data(d)),oa?(Rb=!0,oa.cleanData([d])):delete B.cache[d[B.expando]]);d=1;for(e=b.length;d<e;d++)f=b[d],B(f).remove(),a.appendChild(f),delete b[d];b[0]=c;b.length=1}function ca(a,b){return M(function(){return a.apply(null,arguments)},a,b)}function ea(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,ua(d))}}function ba(a,c,d,e,f){var g=[];n(e,function(e,h){var k=e.attrName,l=e.optional,m,t,w,D;switch(e.mode){case "@":l||qa.call(c,k)||(d[h]=c[k]=void 0);c.$observe(k,function(a){E(a)&& +(d[h]=a)});c.$$observers[k].$$scope=a;E(c[k])&&(d[h]=b(c[k])(a));break;case "=":if(!qa.call(c,k)){if(l)break;c[k]=void 0}if(l&&!c[k])break;t=p(c[k]);D=t.literal?ma:function(a,b){return a===b||a!==a&&b!==b};w=t.assign||function(){m=d[h]=t(a);throw ha("nonassign",c[k],f.name);};m=d[h]=t(a);l=function(b){D(b,d[h])||(D(b,m)?w(a,b=d[h]):d[h]=b);return m=b};l.$stateful=!0;l=e.collection?a.$watchCollection(c[k],l):a.$watch(p(c[k],l),null,t.literal);g.push(l);break;case "&":t=c.hasOwnProperty(k)?p(c[k]): +x;if(t===x&&l)break;d[h]=function(b){return t(a,b)}}});return g.length&&function(){for(var a=0,b=g.length;a<b;++a)g[a]()}}var fa=function(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a};fa.prototype={$normalize:va,$addClass:function(a){a&&0<a.length&&aa.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&aa.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=Yc(a,b);c&&c.length&&aa.addClass(this.$$element, +c);(c=Yc(b,a))&&c.length&&aa.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=Qc(this.$$element[0],a),g=Zc[a],h=a;f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=zc(a,"-"));f=ta(this.$$element);if("a"===f&&"href"===a||"img"===f&&"src"===a)this[a]=b=D(b,"src"===a);else if("img"===f&&"srcset"===a){for(var f="",g=U(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(g)?k:/(,)/,g=g.split(k),k=Math.floor(g.length/2),l=0;l< +k;l++)var m=2*l,f=f+D(U(g[m]),!0),f=f+(" "+U(g[m+1]));g=U(g[2*l]).split(/\s/);f+=D(U(g[0]),!0);2===g.length&&(f+=" "+U(g[1]));this[a]=b=f}!1!==d&&(null===b||q(b)?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&n(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=$()),e=d[a]||(d[a]=[]);e.push(b);w.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||q(c[a])||b(c[a])});return function(){ab(e,b)}}};var da=b.startSymbol(), +ia=b.endSymbol(),ja="{{"==da||"}}"==ia?Ya:function(a){return a.replace(/\{\{/g,da).replace(/}}/g,ia)},ka=/^ngAttr[A-Z]/,la=/^(.+)Start$/;K.$$addBindingInfo=m?function(a,b){var c=a.data("$binding")||[];I(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:x;K.$$addBindingClass=m?function(a){J(a,"ng-binding")}:x;K.$$addScopeInfo=m?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:x;K.$$addScopeClass=m?function(a,b){J(a,b?"ng-isolate-scope":"ng-scope")}:x;return K}]}function va(a){return fb(a.replace(Vc, +""))}function Yc(a,b){var d="",c=a.split(/\s+/),e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],h=0;h<e.length;h++)if(g==e[h])continue a;d+=(0<d.length?" ":"")+g}return d}function Xc(a){a=B(a);var b=a.length;if(1>=b)return a;for(;b--;)8===a[b].nodeType&&Pf.call(a,b,1);return a}function Xe(){var a={},b=!1;this.register=function(b,c){Ra(b,"controller");H(b)?M(a,b):a[b]=c};this.allowGlobals=function(){b=!0};this.$get=["$injector","$window",function(d,c){function e(a,b,c,d){if(!a||!H(a.$scope))throw G("$controller")("noscp", +d,b);a.$scope[b]=c}return function(f,g,h,k){var l,m,r;h=!0===h;k&&E(k)&&(r=k);if(E(f)){k=f.match(Uc);if(!k)throw Qf("ctrlfmt",f);m=k[1];r=r||k[3];f=a.hasOwnProperty(m)?a[m]:Bc(g.$scope,m,!0)||(b?Bc(c,m,!0):u);Qa(f,m,!0)}if(h)return h=(I(f)?f[f.length-1]:f).prototype,l=Object.create(h||null),r&&e(g,r,l,m||f.name),M(function(){var a=d.invoke(f,l,g,m);a!==l&&(H(a)||z(a))&&(l=a,r&&e(g,r,l,m||f.name));return l},{instance:l,identifier:r});l=d.instantiate(f,g,m);r&&e(g,r,l,m||f.name);return l}}]}function Ye(){this.$get= +["$window",function(a){return B(a.document)}]}function Ze(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function Zb(a){return H(a)?da(a)?a.toISOString():db(a):a}function df(){this.$get=function(){return function(a){if(!a)return"";var b=[];oc(a,function(a,c){null===a||q(a)||(I(a)?n(a,function(a,d){b.push(ja(c)+"="+ja(Zb(a)))}):b.push(ja(c)+"="+ja(Zb(a))))});return b.join("&")}}}function ef(){this.$get=function(){return function(a){function b(a,e,f){null===a||q(a)|| +(I(a)?n(a,function(a,c){b(a,e+"["+(H(a)?c:"")+"]")}):H(a)&&!da(a)?oc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):d.push(ja(e)+"="+ja(Zb(a))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function $b(a,b){if(E(a)){var d=a.replace(Rf,"").trim();if(d){var c=b("Content-Type");(c=c&&0===c.indexOf($c))||(c=(c=d.match(Sf))&&Tf[c[0]].test(d));c&&(a=uc(d))}}return a}function ad(a){var b=$(),d;E(a)?n(a.split("\n"),function(a){d=a.indexOf(":");var e=F(U(a.substr(0,d)));a=U(a.substr(d+1));e&& +(b[e]=b[e]?b[e]+", "+a:a)}):H(a)&&n(a,function(a,d){var f=F(d),g=U(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function bd(a){var b;return function(d){b||(b=ad(a));return d?(d=b[F(d)],void 0===d&&(d=null),d):b}}function cd(a,b,d,c){if(z(c))return c(a,b,d);n(c,function(c){a=c(a,b,d)});return a}function cf(){var a=this.defaults={transformResponse:[$b],transformRequest:[function(a){return H(a)&&"[object File]"!==sa.call(a)&&"[object Blob]"!==sa.call(a)&&"[object FormData]"!==sa.call(a)?db(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"}, +post:ia(ac),put:ia(ac),patch:ia(ac)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},b=!1;this.useApplyAsync=function(a){return y(a)?(b=!!a,this):b};var d=!0;this.useLegacyPromiseExtensions=function(a){return y(a)?(d=!!a,this):d};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(e,f,g,h,k,l){function m(b){function c(a){var b=M({},a);b.data=cd(a.data,a.headers,a.status,f.transformResponse); +a=a.status;return 200<=a&&300>a?b:k.reject(b)}function e(a,b){var c,d={};n(a,function(a,e){z(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}if(!fa.isObject(b))throw G("$http")("badreq",b);var f=M({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer},b);f.headers=function(b){var c=a.headers,d=M({},b.headers),f,g,h,c=M({},c.common,c[F(b.method)]);a:for(f in c){g=F(f);for(h in d)if(F(h)===g)continue a;d[f]=c[f]}return e(d,ia(b))}(b); +f.method=sb(f.method);f.paramSerializer=E(f.paramSerializer)?l.get(f.paramSerializer):f.paramSerializer;var g=[function(b){var d=b.headers,e=cd(b.data,bd(d),u,b.transformRequest);q(e)&&n(d,function(a,b){"content-type"===F(b)&&delete d[b]});q(b.withCredentials)&&!q(a.withCredentials)&&(b.withCredentials=a.withCredentials);return r(b,e).then(c,c)},u],h=k.when(f);for(n(v,function(a){(a.request||a.requestError)&&g.unshift(a.request,a.requestError);(a.response||a.responseError)&&g.push(a.response,a.responseError)});g.length;){b= +g.shift();var m=g.shift(),h=h.then(b,m)}d?(h.success=function(a){Qa(a,"fn");h.then(function(b){a(b.data,b.status,b.headers,f)});return h},h.error=function(a){Qa(a,"fn");h.then(null,function(b){a(b.data,b.status,b.headers,f)});return h}):(h.success=dd("success"),h.error=dd("error"));return h}function r(c,d){function g(a,c,d,e){function f(){l(c,a,d,e)}J&&(200<=a&&300>a?J.put(R,[a,c,ad(d),e]):J.remove(R));b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function l(a,b,d,e){b=-1<=b?b:0;(200<=b&&300>b?n.resolve: +n.reject)({data:a,status:b,headers:bd(d),config:c,statusText:e})}function r(a){l(a.data,a.status,ia(a.headers()),a.statusText)}function v(){var a=m.pendingRequests.indexOf(c);-1!==a&&m.pendingRequests.splice(a,1)}var n=k.defer(),D=n.promise,J,K,O=c.headers,R=t(c.url,c.paramSerializer(c.params));m.pendingRequests.push(c);D.then(v,v);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(J=H(c.cache)?c.cache:H(a.cache)?a.cache:A);J&&(K=J.get(R),y(K)?K&&z(K.then)?K.then(r,r):I(K)?l(K[1], +K[0],ia(K[2]),K[3]):l(K,200,{},"OK"):J.put(R,D));q(K)&&((K=ed(c.url)?f()[c.xsrfCookieName||a.xsrfCookieName]:u)&&(O[c.xsrfHeaderName||a.xsrfHeaderName]=K),e(c.method,R,d,g,O,c.timeout,c.withCredentials,c.responseType));return D}function t(a,b){0<b.length&&(a+=(-1==a.indexOf("?")?"?":"&")+b);return a}var A=g("$http");a.paramSerializer=E(a.paramSerializer)?l.get(a.paramSerializer):a.paramSerializer;var v=[];n(c,function(a){v.unshift(E(a)?l.get(a):l.invoke(a))});m.pendingRequests=[];(function(a){n(arguments, +function(a){m[a]=function(b,c){return m(M({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){n(arguments,function(a){m[a]=function(b,c,d){return m(M({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");m.defaults=a;return m}]}function gf(){this.$get=function(){return function(){return new S.XMLHttpRequest}}}function ff(){this.$get=["$browser","$window","$document","$xhrFactory",function(a,b,d,c){return Uf(a,c,a.defer,b.angular.callbacks,d[0])}]}function Uf(a,b,d, +c,e){function f(a,b,d){var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m,!1);f.removeEventListener("error",m,!1);e.body.removeChild(f);f=null;var g=-1,A="unknown";a&&("load"!==a.type||c[b].called||(a={type:"error"}),A=a.type,g="error"===a.type?404:200);d&&d(g,A)};f.addEventListener("load",m,!1);f.addEventListener("error",m,!1);e.body.appendChild(f);return m}return function(e,h,k,l,m,r,t,A){function v(){C&&C();w&&w.abort()} +function T(b,c,e,f,g){y(L)&&d.cancel(L);C=w=null;b(c,e,f,g);a.$$completeOutstandingRequest(x)}a.$$incOutstandingRequestCount();h=h||a.url();if("jsonp"==F(e)){var p="_"+(c.counter++).toString(36);c[p]=function(a){c[p].data=a;c[p].called=!0};var C=f(h.replace("JSON_CALLBACK","angular.callbacks."+p),p,function(a,b){T(l,a,c[p].data,"",b);c[p]=x})}else{var w=b(e,h);w.open(e,h,!0);n(m,function(a,b){y(a)&&w.setRequestHeader(b,a)});w.onload=function(){var a=w.statusText||"",b="response"in w?w.response:w.responseText, +c=1223===w.status?204:w.status;0===c&&(c=b?200:"file"==wa(h).protocol?404:0);T(l,c,b,w.getAllResponseHeaders(),a)};e=function(){T(l,-1,null,null,"")};w.onerror=e;w.onabort=e;t&&(w.withCredentials=!0);if(A)try{w.responseType=A}catch(ga){if("json"!==A)throw ga;}w.send(q(k)?null:k)}if(0<r)var L=d(v,r);else r&&z(r.then)&&r.then(v)}}function af(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler", +"$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(m,a).replace(r,b)}function h(f,h,m,r){function p(a){try{var b=a;a=m?e.getTrusted(m,b):e.valueOf(b);var d;if(r&&!y(a))d=a;else if(null==a)d="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=db(a)}d=a}return d}catch(g){c(Ja.interr(f,g))}}r=!!r;for(var C,w,n=0,L=[],s=[],D=f.length,J=[],K=[];n<D;)if(-1!=(C=f.indexOf(a,n))&&-1!=(w=f.indexOf(b,C+k)))n!==C&&J.push(g(f.substring(n,C))),n=f.substring(C+ +k,w),L.push(n),s.push(d(n,p)),n=w+l,K.push(J.length),J.push("");else{n!==D&&J.push(g(f.substring(n)));break}m&&1<J.length&&Ja.throwNoconcat(f);if(!h||L.length){var O=function(a){for(var b=0,c=L.length;b<c;b++){if(r&&q(a[b]))return;J[K[b]]=a[b]}return J.join("")};return M(function(a){var b=0,d=L.length,e=Array(d);try{for(;b<d;b++)e[b]=s[b](a);return O(e)}catch(g){c(Ja.interr(f,g))}},{exp:f,expressions:L,$$watchDelegate:function(a,b){var c;return a.$watchGroup(s,function(d,e){var f=O(d);z(b)&&b.call(this, +f,d!==e?c:f,a);c=f})}})}}var k=a.length,l=b.length,m=new RegExp(a.replace(/./g,f),"g"),r=new RegExp(b.replace(/./g,f),"g");h.startSymbol=function(){return a};h.endSymbol=function(){return b};return h}]}function bf(){this.$get=["$rootScope","$window","$q","$$q",function(a,b,d,c){function e(e,h,k,l){var m=4<arguments.length,r=m?ra.call(arguments,4):[],t=b.setInterval,A=b.clearInterval,v=0,n=y(l)&&!l,p=(n?c:d).defer(),C=p.promise;k=y(k)?k:0;C.then(null,null,m?function(){e.apply(null,r)}:e);C.$$intervalId= +t(function(){p.notify(v++);0<k&&v>=k&&(p.resolve(v),A(C.$$intervalId),delete f[C.$$intervalId]);n||a.$apply()},h);f[C.$$intervalId]=p;return C}var f={};e.cancel=function(a){return a&&a.$$intervalId in f?(f[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete f[a.$$intervalId],!0):!1};return e}]}function bc(a){a=a.split("/");for(var b=a.length;b--;)a[b]=ob(a[b]);return a.join("/")}function fd(a,b){var d=wa(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=ea(d.port)||Vf[d.protocol]|| +null}function gd(a,b){var d="/"!==a.charAt(0);d&&(a="/"+a);var c=wa(a);b.$$path=decodeURIComponent(d&&"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname);b.$$search=xc(c.search);b.$$hash=decodeURIComponent(c.hash);b.$$path&&"/"!=b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function pa(a,b){if(0===b.indexOf(a))return b.substr(a.length)}function Fa(a){var b=a.indexOf("#");return-1==b?a:a.substr(0,b)}function ib(a){return a.replace(/(#.+)|#$/,"$1")}function cc(a,b,d){this.$$html5=!0;d=d||""; +fd(a,this);this.$$parse=function(a){var d=pa(b,a);if(!E(d))throw Db("ipthprfx",a,b);gd(d,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Qb(this.$$search),d=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(a?"?"+a:"")+d;this.$$absUrl=b+this.$$url.substr(1)};this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;y(f=pa(a,c))?(g=f,g=y(f=pa(d,f))?b+(pa("/",f)||f):a+g):y(f=pa(b,c))?g=b+f:b==c+"/"&&(g=b);g&&this.$$parse(g); +return!!g}}function dc(a,b,d){fd(a,this);this.$$parse=function(c){var e=pa(a,c)||pa(b,c),f;q(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",q(e)&&(a=c,this.replace())):(f=pa(d,e),q(f)&&(f=e));gd(f,this);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;0===f.indexOf(e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()};this.$$compose=function(){var b=Qb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+(this.$$url? +d+this.$$url:"")};this.$$parseLinkUrl=function(b,d){return Fa(a)==Fa(b)?(this.$$parse(b),!0):!1}}function hd(a,b,d){this.$$html5=!0;dc.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a==Fa(c)?f=c:(g=pa(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$compose=function(){var b=Qb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(b?"?"+b:"")+e;this.$$absUrl=a+d+this.$$url}}function Eb(a){return function(){return this[a]}} +function id(a,b){return function(d){if(q(d))return this[a];this[a]=b(d);this.$$compose();return this}}function hf(){var a="",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return y(b)?(a=b,this):a};this.html5Mode=function(a){return $a(a)?(b.enabled=a,this):H(a)?($a(a.enabled)&&(b.enabled=a.enabled),$a(a.requireBase)&&(b.requireBase=a.requireBase),$a(a.rewriteLinks)&&(b.rewriteLinks=a.rewriteLinks),this):b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window", +function(d,c,e,f,g){function h(a,b,d){var e=l.url(),f=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(g){throw l.url(e),l.$$state=f,g;}}function k(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,m;m=c.baseHref();var r=c.url(),t;if(b.enabled){if(!m&&b.requireBase)throw Db("nobase");t=r.substring(0,r.indexOf("/",r.indexOf("//")+2))+(m||"/");m=e.history?cc:hd}else t=Fa(r),m=dc;var A=t.substr(0,Fa(t).lastIndexOf("/")+1);l=new m(t,A,"#"+a);l.$$parseLinkUrl(r,r);l.$$state= +c.state();var v=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(b.rewriteLinks&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!=a.which&&2!=a.button){for(var e=B(a.target);"a"!==ta(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),k=e.attr("href")||e.attr("xlink:href");H(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=wa(h.animVal).href);v.test(h)||!h||e.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(h,k)||(a.preventDefault(),l.absUrl()!=c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]= +!0))}});ib(l.absUrl())!=ib(r)&&c.url(l.absUrl(),!0);var n=!0;c.onUrlChange(function(a,b){q(pa(A,a))?g.location.href=a:(d.$evalAsync(function(){var c=l.absUrl(),e=l.$$state,f;a=ib(a);l.$$parse(a);l.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;l.absUrl()===a&&(f?(l.$$parse(c),l.$$state=e,h(c,!1,e)):(n=!1,k(c,e)))}),d.$$phase||d.$digest())});d.$watch(function(){var a=ib(c.url()),b=ib(l.absUrl()),f=c.state(),g=l.$$replace,m=a!==b||l.$$html5&&e.history&&f!==l.$$state;if(n|| +m)n=!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,f).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=f):(m&&h(b,g,f===l.$$state?null:l.$$state),k(a,f)))});l.$$replace=!1});return l}]}function jf(){var a=!0,b=this;this.debugEnabled=function(b){return y(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&& +(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=d.console||{},e=b[a]||b.log||x;a=!1;try{a=!!e.apply}catch(k){}return a?function(){var a=[];n(arguments,function(b){a.push(c(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Va(a,b){if("__defineGetter__"===a||"__defineSetter__"===a||"__lookupGetter__"===a||"__lookupSetter__"=== +a||"__proto__"===a)throw ba("isecfld",b);return a}function jd(a,b){a+="";if(!E(a))throw ba("iseccst",b);return a}function xa(a,b){if(a){if(a.constructor===a)throw ba("isecfn",b);if(a.window===a)throw ba("isecwindow",b);if(a.children&&(a.nodeName||a.prop&&a.attr&&a.find))throw ba("isecdom",b);if(a===Object)throw ba("isecobj",b);}return a}function kd(a,b){if(a){if(a.constructor===a)throw ba("isecfn",b);if(a===Wf||a===Xf||a===Yf)throw ba("isecff",b);}}function ld(a,b){if(a&&(a===(0).constructor||a=== +(!1).constructor||a==="".constructor||a==={}.constructor||a===[].constructor||a===Function.constructor))throw ba("isecaf",b);}function Zf(a,b){return"undefined"!==typeof a?a:b}function md(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function W(a,b){var d,c;switch(a.type){case s.Program:d=!0;n(a.body,function(a){W(a.expression,b);d=d&&a.expression.constant});a.constant=d;break;case s.Literal:a.constant=!0;a.toWatch=[];break;case s.UnaryExpression:W(a.argument,b);a.constant=a.argument.constant; +a.toWatch=a.argument.toWatch;break;case s.BinaryExpression:W(a.left,b);W(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case s.LogicalExpression:W(a.left,b);W(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case s.ConditionalExpression:W(a.test,b);W(a.alternate,b);W(a.consequent,b);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case s.Identifier:a.constant= +!1;a.toWatch=[a];break;case s.MemberExpression:W(a.object,b);a.computed&&W(a.property,b);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=[a];break;case s.CallExpression:d=a.filter?!b(a.callee.name).$stateful:!1;c=[];n(a.arguments,function(a){W(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=a.filter&&!b(a.callee.name).$stateful?c:[a];break;case s.AssignmentExpression:W(a.left,b);W(a.right,b);a.constant=a.left.constant&&a.right.constant; +a.toWatch=[a];break;case s.ArrayExpression:d=!0;c=[];n(a.elements,function(a){W(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=c;break;case s.ObjectExpression:d=!0;c=[];n(a.properties,function(a){W(a.value,b);d=d&&a.value.constant;a.value.constant||c.push.apply(c,a.value.toWatch)});a.constant=d;a.toWatch=c;break;case s.ThisExpression:a.constant=!1,a.toWatch=[]}}function nd(a){if(1==a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:u}} +function od(a){return a.type===s.Identifier||a.type===s.MemberExpression}function pd(a){if(1===a.body.length&&od(a.body[0].expression))return{type:s.AssignmentExpression,left:a.body[0].expression,right:{type:s.NGValueParameter},operator:"="}}function qd(a){return 0===a.body.length||1===a.body.length&&(a.body[0].expression.type===s.Literal||a.body[0].expression.type===s.ArrayExpression||a.body[0].expression.type===s.ObjectExpression)}function rd(a,b){this.astBuilder=a;this.$filter=b}function sd(a, +b){this.astBuilder=a;this.$filter=b}function Fb(a){return"constructor"==a}function ec(a){return z(a.valueOf)?a.valueOf():$f.call(a)}function kf(){var a=$(),b=$();this.$get=["$filter",function(d){function c(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=ec(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function e(a,b,d,e,f){var g=e.inputs,h;if(1===g.length){var k=c,g=g[0];return a.$watch(function(a){var b=g(a);c(b,k)||(h=e(a,u,u,[b]),k=b&&ec(b));return h},b,d,f)}for(var l=[],m=[],r=0,n= +g.length;r<n;r++)l[r]=c,m[r]=null;return a.$watch(function(a){for(var b=!1,d=0,f=g.length;d<f;d++){var k=g[d](a);if(b||(b=!c(k,l[d])))m[d]=k,l[d]=k&&ec(k)}b&&(h=e(a,u,u,m));return h},b,d,f)}function f(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;z(b)&&b.apply(this,arguments);y(a)&&d.$$postDigest(function(){y(f)&&e()})},c)}function g(a,b,c,d){function e(a){var b=!0;n(a,function(a){y(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a, +c,d){g=a;z(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function h(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){z(b)&&b.apply(this,arguments);e()},c)}function k(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,c=c!==g&&c!==f?function(c,e,f,g){f=d&&g?g[0]:a(c,e,f,g);return b(f,c,e)}:function(c,d,e,f){e=a(c,d,e,f);c=b(e,c,d);return y(e)?c:e};a.$$watchDelegate&&a.$$watchDelegate!==e?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate= +e,d=!a.inputs,c.inputs=a.inputs?a.inputs:[a]);return c}var l=Ba().noUnsafeEval,m={csp:l,expensiveChecks:!1},r={csp:l,expensiveChecks:!0};return function(c,l,v){var n,p,q;switch(typeof c){case "string":q=c=c.trim();var w=v?b:a;n=w[q];n||(":"===c.charAt(0)&&":"===c.charAt(1)&&(p=!0,c=c.substring(2)),v=v?r:m,n=new fc(v),n=(new gc(n,d,v)).parse(c),n.constant?n.$$watchDelegate=h:p?n.$$watchDelegate=n.literal?g:f:n.inputs&&(n.$$watchDelegate=e),w[q]=n);return k(n,l);case "function":return k(c,l);default:return x}}}]} +function mf(){this.$get=["$rootScope","$exceptionHandler",function(a,b){return td(function(b){a.$evalAsync(b)},b)}]}function nf(){this.$get=["$browser","$exceptionHandler",function(a,b){return td(function(b){a.defer(b)},b)}]}function td(a,b){function d(a,b,c){function d(b){return function(c){e||(e=!0,b.call(a,c))}}var e=!1;return[d(b),d(c)]}function c(){this.$$state={status:0}}function e(a,b){return function(c){b.call(a,c)}}function f(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,a(function(){var a, +d,e;e=c.pending;c.processScheduled=!1;c.pending=u;for(var f=0,g=e.length;f<g;++f){d=e[f][0];a=e[f][c.status];try{z(a)?d.resolve(a(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),b(h)}}}))}function g(){this.promise=new c;this.resolve=e(this,this.resolve);this.reject=e(this,this.reject);this.notify=e(this,this.notify)}var h=G("$q",TypeError);M(c.prototype,{then:function(a,b,c){if(q(a)&&q(b)&&q(c))return this;var d=new g;this.$$state.pending=this.$$state.pending||[]; +this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&f(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return l(b,!0,a)},function(b){return l(b,!1,a)},b)}});M(g.prototype,{resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(h("qcycle",a)):this.$$resolve(a))},$$resolve:function(a){var c,e;e=d(this,this.$$resolve,this.$$reject);try{if(H(a)||z(a))c=a&&a.then;z(c)?(this.promise.$$state.status= +-1,c.call(a,e[0],e[1],this.notify)):(this.promise.$$state.value=a,this.promise.$$state.status=1,f(this.promise.$$state))}catch(g){e[1](g),b(g)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;f(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&a(function(){for(var a,e,f=0,g=d.length;f<g;f++){e=d[f][0];a=d[f][3];try{e.notify(z(a)? +a(c):c)}catch(h){b(h)}}})}});var k=function(a,b){var c=new g;b?c.resolve(a):c.reject(a);return c.promise},l=function(a,b,c){var d=null;try{z(c)&&(d=c())}catch(e){return k(e,!1)}return d&&z(d.then)?d.then(function(){return k(a,b)},function(a){return k(a,!1)}):k(a,b)},m=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)},r=function A(a){if(!z(a))throw h("norslvr",a);if(!(this instanceof A))return new A(a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise}; +r.defer=function(){return new g};r.reject=function(a){var b=new g;b.reject(a);return b.promise};r.when=m;r.resolve=m;r.all=function(a){var b=new g,c=0,d=I(a)?[]:{};n(a,function(a,e){c++;m(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise};return r}function wf(){this.$get=["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame|| +a.webkitCancelRequestAnimationFrame,e=!!d,f=e?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};f.supported=e;return f}]}function lf(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++nb;this.$$ChildScope=null}b.prototype=a;return b}var b=10,d=G("$rootScope"),c=null,e=null;this.digestTtl=function(a){arguments.length&& +(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse","$browser",function(f,g,h,k){function l(a){a.currentScope.$$destroyed=!0}function m(a){9===Ha&&(a.$$childHead&&m(a.$$childHead),a.$$nextSibling&&m(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=a.$$childTail=a.$root=a.$$watchers=null}function r(){this.$id=++nb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed= +!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function t(a){if(w.$$phase)throw d("inprog",w.$$phase);w.$$phase=a}function A(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function v(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function s(){}function p(){for(;aa.length;)try{aa.shift()()}catch(a){g(a)}e=null}function C(){null===e&&(e=k.defer(function(){w.$apply(p)}))}r.prototype={constructor:r, +$new:function(b,c){var d;c=c||this;b?(d=new r,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(b||c!=this)&&d.$on("$destroy",l);return d},$watch:function(a,b,d,e){var f=h(a);if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,a);var g=this,k=g.$$watchers,l={fn:b,last:s,get:f,exp:e||a,eq:!!d};c=null;z(b)||(l.fn=x);k|| +(k=g.$$watchers=[]);k.unshift(l);A(this,1);return function(){0<=ab(k,l)&&A(g,-1);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});n(a,function(a,b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}}, +$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!q(e)){if(H(e))if(za(e))for(f!==r&&(f=r,n=f.length=0,l++),a=e.length,n!==a&&(l++,f.length=n=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==t&&(f=t={},n=0,l++);a=0;for(b in e)qa.call(e,b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(n++,f[b]=g,l++));if(n>a)for(b in l++,f)qa.call(e,b)||(n--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,g,k=1<b.length,l=0,m= +h(a,c),r=[],t={},p=!0,n=0;return this.$watch(m,function(){p?(p=!1,b(e,e,d)):b(e,g,d);if(k)if(H(e))if(za(e)){g=Array(e.length);for(var a=0;a<e.length;a++)g[a]=e[a]}else for(a in g={},e)qa.call(e,a)&&(g[a]=e[a]);else g=e})},$digest:function(){var a,f,h,l,m,r,n=b,A,q=[],v,C;t("$digest");k.$$checkUrlChange();this===w&&null!==e&&(k.defer.cancel(e),p());c=null;do{r=!1;for(A=this;u.length;){try{C=u.shift(),C.scope.$eval(C.expression,C.locals)}catch(aa){g(aa)}c=null}a:do{if(l=A.$$watchers)for(m=l.length;m--;)try{if(a= +l[m])if((f=a.get(A))!==(h=a.last)&&!(a.eq?ma(f,h):"number"===typeof f&&"number"===typeof h&&isNaN(f)&&isNaN(h)))r=!0,c=a,a.last=a.eq?bb(f,null):f,a.fn(f,h===s?f:h,A),5>n&&(v=4-n,q[v]||(q[v]=[]),q[v].push({msg:z(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:f,oldVal:h}));else if(a===c){r=!1;break a}}catch(y){g(y)}if(!(l=A.$$watchersCount&&A.$$childHead||A!==this&&A.$$nextSibling))for(;A!==this&&!(l=A.$$nextSibling);)A=A.$parent}while(A=l);if((r||u.length)&&!n--)throw w.$$phase=null,d("infdig", +b,q);}while(r||u.length);for(w.$$phase=null;L.length;)try{L.shift()()}catch(x){g(x)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===w&&k.$$applicationDestroyed();A(this,-this.$$watchersCount);for(var b in this.$$listenerCount)v(this,this.$$listenerCount[b],b);a&&a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling= +this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=x;this.$on=this.$watch=this.$watchGroup=function(){return x};this.$$listeners={};this.$$nextSibling=null;m(this)}},$eval:function(a,b){return h(a)(this,b)},$evalAsync:function(a,b){w.$$phase||u.length||k.defer(function(){u.length&&w.$digest()});u.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){L.push(a)},$apply:function(a){try{t("$apply"); +try{return this.$eval(a)}finally{w.$$phase=null}}catch(b){g(b)}finally{try{w.$digest()}catch(c){throw g(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&aa.push(b);C()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,v(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,f=!1,h= +{name:a,targetScope:e,stopPropagation:function(){f=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=cb([h],arguments,1),l,m;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(m=d.length;l<m;l++)if(d[l])try{d[l].apply(null,k)}catch(r){g(r)}else d.splice(l,1),l--,m--;if(f)return h.currentScope=null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1}; +if(!this.$$listenerCount[a])return e;for(var f=cb([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,f)}catch(l){g(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var w=new r,u=w.$$asyncQueue=[],L=w.$$postDigestQueue=[],aa=w.$$applyAsyncQueue=[];return w}]}function ge(){var a=/^\s*(https?|ftp|mailto|tel|file):/, +b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return y(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return y(a)?(b=a,this):b};this.$get=function(){return function(d,c){var e=c?b:a,f;f=wa(d).href;return""===f||f.match(e)?d:"unsafe:"+f}}}function ag(a){if("self"===a)return a;if(E(a)){if(-1<a.indexOf("***"))throw ya("iwcard",a);a=ud(a).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+a+"$")}if(Ma(a))return new RegExp("^"+ +a.source+"$");throw ya("imatcher");}function vd(a){var b=[];y(a)&&n(a,function(a){b.push(ag(a))});return b}function pf(){this.SCE_CONTEXTS=la;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&(a=vd(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=vd(a));return b};this.$get=["$injector",function(d){function c(a,b){return"self"===a?ed(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype= +new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw ya("unsafe");};d.has("$sanitize")&&(f=d.get("$sanitize"));var g=e(),h={};h[la.HTML]=e(g);h[la.CSS]=e(g);h[la.URL]=e(g);h[la.JS]=e(g);h[la.RESOURCE_URL]=e(h[la.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw ya("icontext",a,b);if(null===b||q(b)||""===b)return b;if("string"!==typeof b)throw ya("itype", +a);return new c(b)},getTrusted:function(d,e){if(null===e||q(e)||""===e)return e;var g=h.hasOwnProperty(d)?h[d]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(d===la.RESOURCE_URL){var g=wa(e.toString()),r,t,n=!1;r=0;for(t=a.length;r<t;r++)if(c(a[r],g)){n=!0;break}if(n)for(r=0,t=b.length;r<t;r++)if(c(b[r],g)){n=!1;break}if(n)return e;throw ya("insecurl",e.toString());}if(d===la.HTML)return f(e);throw ya("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]} +function of(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>Ha)throw ya("iequirks");var c=ia(la);c.isEnabled=function(){return a};c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=Ya);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;n(la,function(a, +b){var d=F(b);c[fb("parse_as_"+d)]=function(b){return e(a,b)};c[fb("get_trusted_"+d)]=function(b){return f(a,b)};c[fb("trust_as_"+d)]=function(b){return g(a,b)}});return c}]}function qf(){this.$get=["$window","$document",function(a,b){var d={},c=ea((/android (\d+)/.exec(F((a.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((a.navigator||{}).userAgent),f=b[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,k=f.body&&f.body.style,l=!1,m=!1;if(k){for(var r in k)if(l=h.exec(r)){g=l[0];g=g.substr(0,1).toUpperCase()+ +g.substr(1);break}g||(g="WebkitOpacity"in k&&"webkit");l=!!("transition"in k||g+"Transition"in k);m=!!("animation"in k||g+"Animation"in k);!c||l&&m||(l=E(k.webkitTransition),m=E(k.webkitAnimation))}return{history:!(!a.history||!a.history.pushState||4>c||e),hasEvent:function(a){if("input"===a&&11>=Ha)return!1;if(q(d[a])){var b=f.createElement("div");d[a]="on"+a in b}return d[a]},csp:Ba(),vendorPrefix:g,transitions:l,animations:m,android:c}}]}function sf(){this.$get=["$templateCache","$http","$q","$sce", +function(a,b,d,c){function e(f,g){e.totalPendingRequests++;E(f)&&a.get(f)||(f=c.getTrustedResourceUrl(f));var h=b.defaults&&b.defaults.transformResponse;I(h)?h=h.filter(function(a){return a!==$b}):h===$b&&(h=null);return b.get(f,{cache:a,transformResponse:h})["finally"](function(){e.totalPendingRequests--}).then(function(b){a.put(f,b.data);return b.data},function(a){if(!g)throw ha("tpload",f,a.status,a.statusText);return d.reject(a)})}e.totalPendingRequests=0;return e}]}function tf(){this.$get=["$rootScope", +"$browser","$location",function(a,b,d){return{findBindings:function(a,b,d){a=a.getElementsByClassName("ng-binding");var g=[];n(a,function(a){var c=fa.element(a).data("$binding");c&&n(c,function(c){d?(new RegExp("(^|\\s)"+ud(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!=c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var k=a.querySelectorAll("["+g[h]+"model"+(d?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return d.url()}, +setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())},whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function uf(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(a,b,d,c,e){function f(f,k,l){z(f)||(l=k,k=f,f=x);var m=ra.call(arguments,3),r=y(l)&&!l,t=(r?c:d).defer(),n=t.promise,q;q=b.defer(function(){try{t.resolve(f.apply(null,m))}catch(b){t.reject(b),e(b)}finally{delete g[n.$$timeoutId]}r||a.$apply()},k);n.$$timeoutId=q;g[q]=t;return n}var g={}; +f.cancel=function(a){return a&&a.$$timeoutId in g?(g[a.$$timeoutId].reject("canceled"),delete g[a.$$timeoutId],b.defer.cancel(a.$$timeoutId)):!1};return f}]}function wa(a){Ha&&(Y.setAttribute("href",a),a=Y.href);Y.setAttribute("href",a);return{href:Y.href,protocol:Y.protocol?Y.protocol.replace(/:$/,""):"",host:Y.host,search:Y.search?Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname:"/"+Y.pathname}}function ed(a){a= +E(a)?wa(a):a;return a.protocol===wd.protocol&&a.host===wd.host}function vf(){this.$get=na(S)}function xd(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}var d=a[0]||{},c={},e="";return function(){var a,g,h,k,l;a=d.cookie||"";if(a!==e)for(e=a,a=e.split("; "),c={},h=0;h<a.length;h++)g=a[h],k=g.indexOf("="),0<k&&(l=b(g.substring(0,k)),q(c[l])&&(c[l]=b(g.substring(k+1))));return c}}function zf(){this.$get=xd}function Jc(a){function b(d,c){if(H(d)){var e={};n(d,function(a,c){e[c]= +b(c,a)});return e}return a.factory(d+"Filter",c)}this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];b("currency",yd);b("date",zd);b("filter",bg);b("json",cg);b("limitTo",dg);b("lowercase",eg);b("number",Ad);b("orderBy",Bd);b("uppercase",fg)}function bg(){return function(a,b,d){if(!za(a)){if(null==a)return a;throw G("filter")("notarray",a);}var c;switch(hc(b)){case "function":break;case "boolean":case "null":case "number":case "string":c=!0;case "object":b= +gg(b,d,c);break;default:return a}return Array.prototype.filter.call(a,b)}}function gg(a,b,d){var c=H(a)&&"$"in a;!0===b?b=ma:z(b)||(b=function(a,b){if(q(a))return!1;if(null===a||null===b)return a===b;if(H(b)||H(a)&&!qc(a))return!1;a=F(""+a);b=F(""+b);return-1!==a.indexOf(b)});return function(e){return c&&!H(e)?Ka(e,a.$,b,!1):Ka(e,a,b,d)}}function Ka(a,b,d,c,e){var f=hc(a),g=hc(b);if("string"===g&&"!"===b.charAt(0))return!Ka(a,b.substring(1),d,c);if(I(a))return a.some(function(a){return Ka(a,b,d,c)}); +switch(f){case "object":var h;if(c){for(h in a)if("$"!==h.charAt(0)&&Ka(a[h],b,d,!0))return!0;return e?!1:Ka(a,b,d,!1)}if("object"===g){for(h in b)if(e=b[h],!z(e)&&!q(e)&&(f="$"===h,!Ka(f?a:a[h],e,d,f,f)))return!1;return!0}return d(a,b);case "function":return!1;default:return d(a,b)}}function hc(a){return null===a?"null":typeof a}function yd(a){var b=a.NUMBER_FORMATS;return function(a,c,e){q(c)&&(c=b.CURRENCY_SYM);q(e)&&(e=b.PATTERNS[1].maxFrac);return null==a?a:Cd(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP, +e).replace(/\u00A4/g,c)}}function Ad(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Cd(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,c)}}function Cd(a,b,d,c,e){if(H(a))return"";var f=0>a;a=Math.abs(a);var g=Infinity===a;if(!g&&!isFinite(a))return"";var h=a+"",k="",l=!1,m=[];g&&(k="\u221e");if(!g&&-1!==h.indexOf("e")){var r=h.match(/([\d\.]+)e(-?)(\d+)/);r&&"-"==r[2]&&r[3]>e+1?a=0:(k=h,l=!0)}if(g||l)0<e&&1>a&&(k=a.toFixed(e),a=parseFloat(k),k=k.replace(ic,c));else{g=(h.split(ic)[1]||"").length; +q(e)&&(e=Math.min(Math.max(b.minFrac,g),b.maxFrac));a=+(Math.round(+(a.toString()+"e"+e)).toString()+"e"+-e);var g=(""+a).split(ic),h=g[0],g=g[1]||"",r=0,t=b.lgSize,n=b.gSize;if(h.length>=t+n)for(r=h.length-t,l=0;l<r;l++)0===(r-l)%n&&0!==l&&(k+=d),k+=h.charAt(l);for(l=r;l<h.length;l++)0===(h.length-l)%t&&0!==l&&(k+=d),k+=h.charAt(l);for(;g.length<e;)g+="0";e&&"0"!==e&&(k+=c+g.substr(0,e))}0===a&&(f=!1);m.push(f?b.negPre:b.posPre,k,f?b.negSuf:b.posSuf);return m.join("")}function Gb(a,b,d){var c=""; +0>a&&(c="-",a=-a);for(a=""+a;a.length<b;)a="0"+a;d&&(a=a.substr(a.length-b));return c+a}function ca(a,b,d,c){d=d||0;return function(e){e=e["get"+a]();if(0<d||e>-d)e+=d;0===e&&-12==d&&(e=12);return Gb(e,b,c)}}function Hb(a,b){return function(d,c){var e=d["get"+a](),f=sb(b?"SHORT"+a:a);return c[f][e]}}function Dd(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Ed(a){return function(b){var d=Dd(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))- ++d;b=1+Math.round(b/6048E5);return Gb(b,a)}}function jc(a,b){return 0>=a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function zd(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=ea(b[9]+b[10]),g=ea(b[9]+b[11]));h.call(a,ea(b[1]),ea(b[2])-1,ea(b[3]));f=ea(b[4]||0)-f;g=ea(b[5]||0)-g;h=ea(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));k.call(a,f,g,h,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; +return function(c,d,f){var g="",h=[],k,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;E(c)&&(c=hg.test(c)?ea(c):b(c));Q(c)&&(c=new Date(c));if(!da(c)||!isFinite(c.getTime()))return c;for(;d;)(l=ig.exec(d))?(h=cb(h,l,1),d=h.pop()):(h.push(d),d=null);var m=c.getTimezoneOffset();f&&(m=vc(f,c.getTimezoneOffset()),c=Pb(c,f,!0));n(h,function(b){k=jg[b];g+=k?k(c,a.DATETIME_FORMATS,m):b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function cg(){return function(a,b){q(b)&&(b=2);return db(a,b)}}function dg(){return function(a, +b,d){b=Infinity===Math.abs(Number(b))?Number(b):ea(b);if(isNaN(b))return a;Q(a)&&(a=a.toString());if(!I(a)&&!E(a))return a;d=!d||isNaN(d)?0:ea(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?a.slice(d,d+b):0===d?a.slice(b,a.length):a.slice(Math.max(0,d+b),d)}}function Bd(a){function b(b,d){d=d?-1:1;return b.map(function(b){var c=1,h=Ya;if(z(b))h=b;else if(E(b)){if("+"==b.charAt(0)||"-"==b.charAt(0))c="-"==b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(h=a(b),h.constant))var k=h(),h=function(a){return a[k]}}return{get:h, +descending:c*d}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}return function(a,e,f){if(!za(a))return a;I(e)||(e=[e]);0===e.length&&(e=["+"]);var g=b(e,f);g.push({get:function(){return{}},descending:f?-1:1});a=Array.prototype.map.call(a,function(a,b){return{value:a,predicateValues:g.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="string",e="null";else if("string"===c)e=e.toLowerCase();else if("object"===c)a:{if("function"===typeof e.valueOf&& +(e=e.valueOf(),d(e)))break a;if(qc(e)&&(e=e.toString(),d(e)))break a;e=b}return{value:e,type:c}})}});a.sort(function(a,b){for(var c=0,d=0,e=g.length;d<e;++d){var c=a.predicateValues[d],f=b.predicateValues[d],n=0;c.type===f.type?c.value!==f.value&&(n=c.value<f.value?-1:1):n=c.type<f.type?-1:1;if(c=n*g[d].descending)break}return c});return a=a.map(function(a){return a.value})}}function La(a){z(a)&&(a={link:a});a.restrict=a.restrict||"AC";return na(a)}function Fd(a,b,d,c,e){var f=this,g=[];f.$error= +{};f.$$success={};f.$pending=u;f.$name=e(b.name||b.ngForm||"")(d);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;f.$$parentForm=Ib;f.$rollbackViewValue=function(){n(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){n(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){Ra(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a);a.$$parentForm=f};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&& +f[a.$name]===a&&delete f[a.$name];n(f.$pending,function(b,c){f.$setValidity(c,null,a)});n(f.$error,function(b,c){f.$setValidity(c,null,a)});n(f.$$success,function(b,c){f.$setValidity(c,null,a)});ab(g,a);a.$$parentForm=Ib};Gd({ctrl:this,$element:a,set:function(a,b,c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(ab(d,c),0===d.length&&delete a[b])},$animate:c});f.$setDirty=function(){c.removeClass(a,Wa);c.addClass(a,Jb);f.$dirty=!0;f.$pristine=!1;f.$$parentForm.$setDirty()}; +f.$setPristine=function(){c.setClass(a,Wa,Jb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;n(g,function(a){a.$setPristine()})};f.$setUntouched=function(){n(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){c.addClass(a,"ng-submitted");f.$submitted=!0;f.$$parentForm.$setSubmitted()}}function kc(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function jb(a,b,d,c,e,f){var g=F(b[0].type);if(!e.android){var h=!1;b.on("compositionstart",function(a){h=!0}); +b.on("compositionend",function(){h=!1;k()})}var k=function(a){l&&(f.defer.cancel(l),l=null);if(!h){var e=b.val();a=a&&a.type;"password"===g||d.ngTrim&&"false"===d.ngTrim||(e=U(e));(c.$viewValue!==e||""===e&&c.$$hasNativeValidators)&&c.$setViewValue(e,a)}};if(e.hasEvent("input"))b.on("input",k);else{var l,m=function(a,b,c){l||(l=f.defer(function(){l=null;b&&b.value===c||k(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut", +m)}b.on("change",k);c.$render=function(){var a=c.$isEmpty(c.$viewValue)?"":c.$viewValue;b.val()!==a&&b.val(a)}}function Kb(a,b){return function(d,c){var e,f;if(da(d))return d;if(E(d)){'"'==d.charAt(0)&&'"'==d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(kg.test(d))return new Date(d);a.lastIndex=0;if(e=a.exec(d))return e.shift(),f=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0, +mm:0,ss:0,sss:0},n(e,function(a,c){c<b.length&&(f[b[c]]=+a)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function kb(a,b,d,c){return function(e,f,g,h,k,l,m){function r(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function n(a){return y(a)&&!da(a)?d(a)||u:a}Hd(e,f,g,h);jb(e,f,g,h,k,l);var A=h&&h.$options&&h.$options.timezone,v;h.$$parserName=a;h.$parsers.push(function(a){return h.$isEmpty(a)?null:b.test(a)?(a=d(a,v),A&&(a=Pb(a,A)),a):u});h.$formatters.push(function(a){if(a&& +!da(a))throw lb("datefmt",a);if(r(a))return(v=a)&&A&&(v=Pb(v,A,!0)),m("date")(a,c,A);v=null;return""});if(y(g.min)||g.ngMin){var s;h.$validators.min=function(a){return!r(a)||q(s)||d(a)>=s};g.$observe("min",function(a){s=n(a);h.$validate()})}if(y(g.max)||g.ngMax){var p;h.$validators.max=function(a){return!r(a)||q(p)||d(a)<=p};g.$observe("max",function(a){p=n(a);h.$validate()})}}}function Hd(a,b,d,c){(c.$$hasNativeValidators=H(b[0].validity))&&c.$parsers.push(function(a){var c=b.prop("validity")||{}; +return c.badInput&&!c.typeMismatch?u:a})}function Id(a,b,d,c,e){if(y(c)){a=a(c);if(!a.constant)throw lb("constexpr",d,c);return a(b)}return e}function lc(a,b){a="ngClass"+a;return["$animate",function(d){function c(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e==b[m])continue a;c.push(e)}return c}function e(a){var b=[];return I(a)?(n(a,function(a){b=b.concat(e(a))}),b):E(a)?a.split(" "):H(a)?(n(a,function(a,c){a&&(b=b.concat(c.split(" ")))}),b):a}return{restrict:"AC", +link:function(f,g,h){function k(a,b){var c=g.data("$classCounts")||$(),d=[];n(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}function l(a){if(!0===b||f.$index%2===b){var l=e(a||[]);if(!m){var n=k(l,1);h.$addClass(n)}else if(!ma(a,m)){var q=e(m),n=c(l,q),l=c(q,l),n=k(n,1),l=k(l,-1);n&&n.length&&d.addClass(g,n);l&&l.length&&d.removeClass(g,l)}}m=ia(a)}var m;f.$watch(h[a],l,!0);h.$observe("class",function(b){l(f.$eval(h[a]))});"ngClass"!== +a&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var l=e(f.$eval(h[a]));g===b?(g=k(l,1),h.$addClass(g)):(g=k(l,-1),h.$removeClass(g))}})}}}]}function Gd(a){function b(a,b){b&&!f[a]?(k.addClass(e,a),f[a]=!0):!b&&f[a]&&(k.removeClass(e,a),f[a]=!1)}function d(a,c){a=a?"-"+zc(a,"-"):"";b(mb+a,!0===c);b(Jd+a,!1===c)}var c=a.ctrl,e=a.$element,f={},g=a.set,h=a.unset,k=a.$animate;f[Jd]=!(f[mb]=e.hasClass(mb));c.$setValidity=function(a,e,f){q(e)?(c.$pending||(c.$pending={}),g(c.$pending,a,f)):(c.$pending&& +h(c.$pending,a,f),Kd(c.$pending)&&(c.$pending=u));$a(e)?e?(h(c.$error,a,f),g(c.$$success,a,f)):(g(c.$error,a,f),h(c.$$success,a,f)):(h(c.$error,a,f),h(c.$$success,a,f));c.$pending?(b(Ld,!0),c.$valid=c.$invalid=u,d("",null)):(b(Ld,!1),c.$valid=Kd(c.$error),c.$invalid=!c.$valid,d("",c.$valid));e=c.$pending&&c.$pending[a]?u:c.$error[a]?!1:c.$$success[a]?!0:null;d(a,e);c.$$parentForm.$setValidity(a,e,c)}}function Kd(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}var lg=/^\/(.+)\/([a-z]*)$/, +F=function(a){return E(a)?a.toLowerCase():a},qa=Object.prototype.hasOwnProperty,sb=function(a){return E(a)?a.toUpperCase():a},Ha,B,oa,ra=[].slice,Pf=[].splice,mg=[].push,sa=Object.prototype.toString,rc=Object.getPrototypeOf,Aa=G("ng"),fa=S.angular||(S.angular={}),Sb,nb=0;Ha=X.documentMode;x.$inject=[];Ya.$inject=[];var I=Array.isArray,Vd=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array\]$/,U=function(a){return E(a)?a.trim():a},ud=function(a){return a.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, +"\\$1").replace(/\x08/g,"\\x08")},Ba=function(){if(!y(Ba.rules)){var a=X.querySelector("[ng-csp]")||X.querySelector("[data-ng-csp]");if(a){var b=a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp");Ba.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==b.indexOf("no-inline-style")}}else{a=Ba;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,noInlineStyle:!1}}}return Ba.rules},pb=function(){if(y(pb.name_))return pb.name_;var a,b,d=Oa.length,c,e;for(b=0;b< +d;++b)if(c=Oa[b],a=X.querySelector("["+c.replace(":","\\:")+"jq]")){e=a.getAttribute(c+"jq");break}return pb.name_=e},Oa=["ng-","data-ng-","ng:","x-ng-"],be=/[A-Z]/g,Ac=!1,Rb,Na=3,fe={full:"1.4.8",major:1,minor:4,dot:8,codeName:"ice-manipulation"};N.expando="ng339";var gb=N.cache={},Ff=1;N._data=function(a){return this.cache[a[this.expando]]||{}};var Af=/([\:\-\_]+(.))/g,Bf=/^moz([A-Z])/,xb={mouseleave:"mouseout",mouseenter:"mouseover"},Ub=G("jqLite"),Ef=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,Tb=/<|&#?\w+;/, +Cf=/<([\w:-]+)/,Df=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,ka={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ka.optgroup=ka.option;ka.tbody=ka.tfoot=ka.colgroup=ka.caption=ka.thead;ka.th=ka.td;var Kf=Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)& +16)},Pa=N.prototype={ready:function(a){function b(){d||(d=!0,a())}var d=!1;"complete"===X.readyState?setTimeout(b):(this.on("DOMContentLoaded",b),N(S).on("load",b))},toString:function(){var a=[];n(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?B(this[a]):B(this[this.length+a])},length:0,push:mg,sort:[].sort,splice:[].splice},Cb={};n("multiple selected checked disabled readOnly required open".split(" "),function(a){Cb[F(a)]=a});var Rc={};n("input select option textarea button form details".split(" "), +function(a){Rc[a]=!0});var Zc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};n({data:Wb,removeData:vb,hasData:function(a){for(var b in gb[a.ng339])return!0;return!1}},function(a,b){N[b]=a});n({data:Wb,inheritedData:Bb,scope:function(a){return B.data(a,"$scope")||Bb(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return B.data(a,"$isolateScope")||B.data(a,"$isolateScopeNoTemplate")},controller:Oc,injector:function(a){return Bb(a, +"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:yb,css:function(a,b,d){b=fb(b);if(y(d))a.style[b]=d;else return a.style[b]},attr:function(a,b,d){var c=a.nodeType;if(c!==Na&&2!==c&&8!==c)if(c=F(b),Cb[c])if(y(d))d?(a[b]=!0,a.setAttribute(b,c)):(a[b]=!1,a.removeAttribute(c));else return a[b]||(a.attributes.getNamedItem(b)||x).specified?c:u;else if(y(d))a.setAttribute(b,d);else if(a.getAttribute)return a=a.getAttribute(b,2),null===a?u:a},prop:function(a,b,d){if(y(d))a[b]=d;else return a[b]}, +text:function(){function a(a,d){if(q(d)){var c=a.nodeType;return 1===c||c===Na?a.textContent:""}a.textContent=d}a.$dv="";return a}(),val:function(a,b){if(q(b)){if(a.multiple&&"select"===ta(a)){var d=[];n(a.options,function(a){a.selected&&d.push(a.value||a.text)});return 0===d.length?null:d}return a.value}a.value=b},html:function(a,b){if(q(b))return a.innerHTML;ub(a,!0);a.innerHTML=b},empty:Pc},function(a,b){N.prototype[b]=function(b,c){var e,f,g=this.length;if(a!==Pc&&q(2==a.length&&a!==yb&&a!==Oc? +b:c)){if(H(b)){for(e=0;e<g;e++)if(a===Wb)a(this[e],b);else for(f in b)a(this[e],f,b[f]);return this}e=a.$dv;g=q(e)?Math.min(g,1):g;for(f=0;f<g;f++){var h=a(this[f],b,c);e=e?e+h:h}return e}for(e=0;e<g;e++)a(this[e],b,c);return this}});n({removeData:vb,on:function(a,b,d,c){if(y(c))throw Ub("onargs");if(Kc(a)){c=wb(a,!0);var e=c.events,f=c.handle;f||(f=c.handle=Hf(a,e));c=0<=b.indexOf(" ")?b.split(" "):[b];for(var g=c.length,h=function(b,c,g){var h=e[b];h||(h=e[b]=[],h.specialHandlerWrapper=c,"$destroy"=== +b||g||a.addEventListener(b,f,!1));h.push(d)};g--;)b=c[g],xb[b]?(h(xb[b],Jf),h(b,u,!0)):h(b)}},off:Nc,one:function(a,b,d){a=B(a);a.on(b,function e(){a.off(b,d);a.off(b,e)});a.on(b,d)},replaceWith:function(a,b){var d,c=a.parentNode;ub(a);n(new N(b),function(b){d?c.insertBefore(b,d.nextSibling):c.replaceChild(b,a);d=b})},children:function(a){var b=[];n(a.childNodes,function(a){1===a.nodeType&&b.push(a)});return b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var d= +a.nodeType;if(1===d||11===d){b=new N(b);for(var d=0,c=b.length;d<c;d++)a.appendChild(b[d])}},prepend:function(a,b){if(1===a.nodeType){var d=a.firstChild;n(new N(b),function(b){a.insertBefore(b,d)})}},wrap:function(a,b){b=B(b).eq(0).clone()[0];var d=a.parentNode;d&&d.replaceChild(b,a);b.appendChild(a)},remove:Xb,detach:function(a){Xb(a,!0)},after:function(a,b){var d=a,c=a.parentNode;b=new N(b);for(var e=0,f=b.length;e<f;e++){var g=b[e];c.insertBefore(g,d.nextSibling);d=g}},addClass:Ab,removeClass:zb, +toggleClass:function(a,b,d){b&&n(b.split(" "),function(b){var e=d;q(e)&&(e=!yb(a,b));(e?Ab:zb)(a,b)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:Vb,triggerHandler:function(a,b,d){var c,e,f=b.type||b,g=wb(a);if(g=(g=g&&g.events)&&g[f])c={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented}, +stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:x,type:f,target:a},b.type&&(c=M(c,b)),b=ia(g),e=d?[c].concat(d):[c],n(b,function(b){c.isImmediatePropagationStopped()||b.apply(a,e)})}},function(a,b){N.prototype[b]=function(b,c,e){for(var f,g=0,h=this.length;g<h;g++)q(f)?(f=a(this[g],b,c,e),y(f)&&(f=B(f))):Mc(f,a(this[g],b,c,e));return y(f)?f:this};N.prototype.bind=N.prototype.on; +N.prototype.unbind=N.prototype.off});Sa.prototype={put:function(a,b){this[Ca(a,this.nextUid)]=b},get:function(a){return this[Ca(a,this.nextUid)]},remove:function(a){var b=this[a=Ca(a,this.nextUid)];delete this[a];return b}};var yf=[function(){this.$get=[function(){return Sa}]}],Tc=/^[^\(]*\(\s*([^\)]*)\)/m,ng=/,/,og=/^\s*(_?)(\S+?)\1\s*$/,Sc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Da=G("$injector");eb.$$annotate=function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw E(d)&& +d||(d=a.name||Lf(a)),Da("strictdi",d);b=a.toString().replace(Sc,"");b=b.match(Tc);n(b[1].split(ng),function(a){a.replace(og,function(a,b,d){c.push(d)})})}a.$inject=c}}else I(a)?(b=a.length-1,Qa(a[b],"fn"),c=a.slice(0,b)):Qa(a,"fn",!0);return c};var Md=G("$animate"),Ue=function(){this.$get=["$q","$$rAF",function(a,b){function d(){}d.all=x;d.chain=x;d.prototype={end:x,cancel:x,resume:x,pause:x,complete:x,then:function(c,d){return a(function(a){b(function(){a()})}).then(c,d)}};return d}]},Te=function(){var a= +new Sa,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function e(a,b,c){var d=!1;b&&(b=E(b)?b.split(" "):I(b)?b:[],n(b,function(b){b&&(d=!0,a[b]=c)}));return d}function f(){n(b,function(b){var c=a.get(b);if(c){var d=Mf(b.attr("class")),e="",f="";n(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});n(b,function(a){e&&Ab(a,e);f&&zb(a,f)});a.remove(b)}});b.length=0}return{enabled:x,on:x,off:x,pin:x,push:function(g,h,k,l){l&&l();k=k||{};k.from&&g.css(k.from); +k.to&&g.css(k.to);if(k.addClass||k.removeClass)if(h=k.addClass,l=k.removeClass,k=a.get(g)||{},h=e(k,h,!0),l=e(k,l,!1),h||l)a.put(g,k),b.push(g),1===b.length&&c.$$postDigest(f);return new d}}}]},Re=["$provide",function(a){var b=this;this.$$registeredAnimations=Object.create(null);this.register=function(d,c){if(d&&"."!==d.charAt(0))throw Md("notcsel",d);var e=d+"-animation";b.$$registeredAnimations[d.substr(1)]=e;a.factory(e,c)};this.classNameFilter=function(a){if(1===arguments.length&&(this.$$classNameFilter= +a instanceof RegExp?a:null)&&/(\s+|\/)ng-animate(\s+|\/)/.test(this.$$classNameFilter.toString()))throw Md("nongcls","ng-animate");return this.$$classNameFilter};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var h;a:{for(h=0;h<d.length;h++){var k=d[h];if(1===k.nodeType){h=k;break a}}h=void 0}!h||h.parentNode||h.previousElementSibling||(d=null)}d?d.after(a):c.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(e,f,g,h){f= +f&&B(f);g=g&&B(g);f=f||g.parent();b(e,f,g);return a.push(e,"enter",Ea(h))},move:function(e,f,g,h){f=f&&B(f);g=g&&B(g);f=f||g.parent();b(e,f,g);return a.push(e,"move",Ea(h))},leave:function(b,c){return a.push(b,"leave",Ea(c),function(){b.remove()})},addClass:function(b,c,g){g=Ea(g);g.addClass=hb(g.addclass,c);return a.push(b,"addClass",g)},removeClass:function(b,c,g){g=Ea(g);g.removeClass=hb(g.removeClass,c);return a.push(b,"removeClass",g)},setClass:function(b,c,g,h){h=Ea(h);h.addClass=hb(h.addClass, +c);h.removeClass=hb(h.removeClass,g);return a.push(b,"setClass",h)},animate:function(b,c,g,h,k){k=Ea(k);k.from=k.from?M(k.from,c):c;k.to=k.to?M(k.to,g):g;k.tempClasses=hb(k.tempClasses,h||"ng-inline-animate");return a.push(b,"animate",k)}}}]}],Se=function(){this.$get=["$$rAF","$q",function(a,b){var d=function(){};d.prototype={done:function(a){this.defer&&this.defer[!0===a?"reject":"resolve"]()},end:function(){this.done()},cancel:function(){this.done(!0)},getPromise:function(){this.defer||(this.defer= +b.defer());return this.defer.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},"finally":function(a){return this.getPromise()["finally"](a)}};return function(b,e){function f(){a(function(){e.addClass&&(b.addClass(e.addClass),e.addClass=null);e.removeClass&&(b.removeClass(e.removeClass),e.removeClass=null);e.to&&(b.css(e.to),e.to=null);g||h.done();g=!0});return h}e.cleanupStyles&&(e.from=e.to=null);e.from&&(b.css(e.from),e.from= +null);var g,h=new d;return{start:f,end:f}}}]},ha=G("$compile");Cc.$inject=["$provide","$$sanitizeUriProvider"];var Vc=/^((?:x|data)[\:\-_])/i,Qf=G("$controller"),Uc=/^(\S+)(\s+as\s+(\w+))?$/,$e=function(){this.$get=["$document",function(a){return function(b){b?!b.nodeType&&b instanceof B&&(b=b[0]):b=a[0].body;return b.offsetWidth+1}}]},$c="application/json",ac={"Content-Type":$c+";charset=utf-8"},Sf=/^\[|^\{(?!\{)/,Tf={"[":/]$/,"{":/}$/},Rf=/^\)\]\}',?\n/,pg=G("$http"),dd=function(a){return function(){throw pg("legacy", +a);}},Ja=fa.$interpolateMinErr=G("$interpolate");Ja.throwNoconcat=function(a){throw Ja("noconcat",a);};Ja.interr=function(a,b){return Ja("interr",a,b.toString())};var qg=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,Vf={http:80,https:443,ftp:21},Db=G("$location"),rg={$$html5:!1,$$replace:!1,absUrl:Eb("$$absUrl"),url:function(a){if(q(a))return this.$$url;var b=qg.exec(a);(b[1]||""===a)&&this.path(decodeURIComponent(b[1]));(b[2]||b[1]||""===a)&&this.search(b[3]||"");this.hash(b[5]||"");return this},protocol:Eb("$$protocol"), +host:Eb("$$host"),port:Eb("$$port"),path:id("$$path",function(a){a=null!==a?a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;case 1:if(E(a)||Q(a))a=a.toString(),this.$$search=xc(a);else if(H(a))a=bb(a,{}),n(a,function(b,c){null==b&&delete a[c]}),this.$$search=a;else throw Db("isrcharg");break;default:q(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}this.$$compose();return this},hash:id("$$hash",function(a){return null!== +a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};n([hd,dc,cc],function(a){a.prototype=Object.create(rg);a.prototype.state=function(b){if(!arguments.length)return this.$$state;if(a!==cc||!this.$$html5)throw Db("nostate");this.$$state=q(b)?null:b;return this}});var ba=G("$parse"),Wf=Function.prototype.call,Xf=Function.prototype.apply,Yf=Function.prototype.bind,Lb=$();n("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){Lb[a]=!0});var sg={n:"\n",f:"\f",r:"\r", +t:"\t",v:"\v","'":"'",'"':'"'},fc=function(a){this.options=a};fc.prototype={constructor:fc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(a))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++; +else{var b=a+this.peek(),d=b+this.peek(2),c=Lb[b],e=Lb[d];Lb[a]||c||e?(a=e?d:c?b:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a|| +"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=y(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw ba("lexerr",a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var d=F(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var c=this.peek(); +if("e"==d&&this.isExpOperator(c))a+=d;else if(this.isExpOperator(d)&&c&&this.isNumber(c)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||c&&this.isNumber(c)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:b,text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=this.index;this.index<this.text.length;){var b=this.text.charAt(this.index);if(!this.isIdent(b)&&!this.isNumber(b))break;this.index++}this.tokens.push({index:a, +text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var d="",c=a,e=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),c=c+f;if(e)"u"===f?(e=this.text.substring(this.index+1,this.index+5),e.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+e+"]"),this.index+=4,d+=String.fromCharCode(parseInt(e,16))):d+=sg[f]||f,e=!1;else if("\\"===f)e=!0;else{if(f===a){this.index++;this.tokens.push({index:b,text:c,constant:!0, +value:d});return}d+=f}this.index++}this.throwError("Unterminated quote",b)}};var s=function(a,b){this.lexer=a;this.options=b};s.Program="Program";s.ExpressionStatement="ExpressionStatement";s.AssignmentExpression="AssignmentExpression";s.ConditionalExpression="ConditionalExpression";s.LogicalExpression="LogicalExpression";s.BinaryExpression="BinaryExpression";s.UnaryExpression="UnaryExpression";s.CallExpression="CallExpression";s.MemberExpression="MemberExpression";s.Identifier="Identifier";s.Literal= +"Literal";s.ArrayExpression="ArrayExpression";s.Property="Property";s.ObjectExpression="ObjectExpression";s.ThisExpression="ThisExpression";s.NGValueParameter="NGValueParameter";s.prototype={ast:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.program();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);return a},program:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:s.Program, +body:a}},expressionStatement:function(){return{type:s.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();this.expect("=")&&(a={type:s.AssignmentExpression,left:a,right:this.assignment(),operator:"="});return a},ternary:function(){var a=this.logicalOR(),b,d;return this.expect("?")&&(b=this.expression(),this.consume(":"))? +(d=this.expression(),{type:s.ConditionalExpression,test:a,alternate:b,consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:s.LogicalExpression,operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:s.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),b;b=this.expect("==","!=","===","!==");)a={type:s.BinaryExpression, +operator:b.text,left:a,right:this.relational()};return a},relational:function(){for(var a=this.additive(),b;b=this.expect("<",">","<=",">=");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),b;b=this.expect("+","-");)a={type:s.BinaryExpression,operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*","/","%");)a={type:s.BinaryExpression,operator:b.text, +left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:s.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.constants.hasOwnProperty(this.peek().text)?a=bb(this.constants[this.consume().text]):this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant(): +this.throwError("not a primary expression",this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:s.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:s.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:s.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:s.CallExpression,callee:this.identifier(), +arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return b},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.expression());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:s.Identifier,name:a.text}},constant:function(){return{type:s.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break; +a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:s.ArrayExpression,elements:a}},object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;b={type:s.Property,kind:"init"};this.peek().constant?b.key=this.constant():this.peek().identifier?b.key=this.identifier():this.throwError("invalid key",this.peek());this.consume(":");b.value=this.expression();a.push(b)}while(this.expect(","))}this.consume("}");return{type:s.ObjectExpression,properties:a}}, +throwError:function(a,b){throw ba("syntax",b.text,a,b.index+1,this.text,this.text.substring(b.index));},consume:function(a){if(0===this.tokens.length)throw ba("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw ba("ueoe",this.text);return this.tokens[0]},peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c,e){if(this.tokens.length>a){a=this.tokens[a]; +var f=a.text;if(f===b||f===d||f===c||f===e||!(b||d||c||e))return a}return!1},expect:function(a,b,d,c){return(a=this.peek(a,b,d,c))?(this.tokens.shift(),a):!1},constants:{"true":{type:s.Literal,value:!0},"false":{type:s.Literal,value:!1},"null":{type:s.Literal,value:null},undefined:{type:s.Literal,value:u},"this":{type:s.ThisExpression}}};rd.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:b,fn:{vars:[],body:[],own:{}},assign:{vars:[], +body:[],own:{}},inputs:[]};W(c,d.$filter);var e="",f;this.stage="assign";if(f=pd(c))this.state.computing="assign",e=this.nextId(),this.recurse(f,e),this.return_(e),e="fn.assign="+this.generateFunction("assign","s,v,l");f=nd(c.body);d.stage="inputs";n(f,function(a,b){var c="fn"+b;d.state[c]={vars:[],body:[],own:{}};d.state.computing=c;var e=d.nextId();d.recurse(a,e);d.return_(e);d.state.inputs.push(c);a.watchId=b});this.state.computing="fn";this.stage="main";this.recurse(c);e='"'+this.USE+" "+this.STRICT+ +'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+e+this.watchFns()+"return fn;";e=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","getStringValue","ensureSafeAssignContext","ifDefined","plus","text",e))(this.$filter,Va,xa,kd,jd,ld,Zf,md,a);this.state=this.stage=u;e.literal=qd(c);e.constant=c.constant;return e},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;n(b,function(b){a.push("var "+b+"="+d.generateFunction(b, +"s"))});b.length&&a.push("fn.inputs=["+b.join(",")+"];");return a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;n(this.state.filters,function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b, +d,c,e,f){var g,h,k=this,l,m;c=c||x;if(!f&&y(a.watchId))b=b||this.nextId(),this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,e,!0));else switch(a.type){case s.Program:n(a.body,function(b,c){k.recurse(b.expression,u,u,function(a){h=a});c!==a.body.length-1?k.current().body.push(h,";"):k.return_(h)});break;case s.Literal:m=this.escape(a.value);this.assign(b,m);c(m);break;case s.UnaryExpression:this.recurse(a.argument,u,u,function(a){h=a});m=a.operator+"("+this.ifDefined(h, +0)+")";this.assign(b,m);c(m);break;case s.BinaryExpression:this.recurse(a.left,u,u,function(a){g=a});this.recurse(a.right,u,u,function(a){h=a});m="+"===a.operator?this.plus(g,h):"-"===a.operator?this.ifDefined(g,0)+a.operator+this.ifDefined(h,0):"("+g+")"+a.operator+"("+h+")";this.assign(b,m);c(m);break;case s.LogicalExpression:b=b||this.nextId();k.recurse(a.left,b);k.if_("&&"===a.operator?b:k.not(b),k.lazyRecurse(a.right,b));c(b);break;case s.ConditionalExpression:b=b||this.nextId();k.recurse(a.test, +b);k.if_(b,k.lazyRecurse(a.alternate,b),k.lazyRecurse(a.consequent,b));c(b);break;case s.Identifier:b=b||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);Va(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){e&&1!==e&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(b,k.nonComputedMember("s", +a.name))})},b&&k.lazyAssign(b,k.nonComputedMember("l",a.name)));(k.state.expensiveChecks||Fb(a.name))&&k.addEnsureSafeObject(b);c(b);break;case s.MemberExpression:g=d&&(d.context=this.nextId())||this.nextId();b=b||this.nextId();k.recurse(a.object,g,u,function(){k.if_(k.notNull(g),function(){if(a.computed)h=k.nextId(),k.recurse(a.property,h),k.getStringValue(h),k.addEnsureSafeMemberName(h),e&&1!==e&&k.if_(k.not(k.computedMember(g,h)),k.lazyAssign(k.computedMember(g,h),"{}")),m=k.ensureSafeObject(k.computedMember(g, +h)),k.assign(b,m),d&&(d.computed=!0,d.name=h);else{Va(a.property.name);e&&1!==e&&k.if_(k.not(k.nonComputedMember(g,a.property.name)),k.lazyAssign(k.nonComputedMember(g,a.property.name),"{}"));m=k.nonComputedMember(g,a.property.name);if(k.state.expensiveChecks||Fb(a.property.name))m=k.ensureSafeObject(m);k.assign(b,m);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(b,"undefined")});c(b)},!!e);break;case s.CallExpression:b=b||this.nextId();a.filter?(h=k.filter(a.callee.name),l=[],n(a.arguments, +function(a){var b=k.nextId();k.recurse(a,b);l.push(b)}),m=h+"("+l.join(",")+")",k.assign(b,m),c(b)):(h=k.nextId(),g={},l=[],k.recurse(a.callee,h,g,function(){k.if_(k.notNull(h),function(){k.addEnsureSafeFunction(h);n(a.arguments,function(a){k.recurse(a,k.nextId(),u,function(a){l.push(k.ensureSafeObject(a))})});g.name?(k.state.expensiveChecks||k.addEnsureSafeObject(g.context),m=k.member(g.context,g.name,g.computed)+"("+l.join(",")+")"):m=h+"("+l.join(",")+")";m=k.ensureSafeObject(m);k.assign(b,m)}, +function(){k.assign(b,"undefined")});c(b)}));break;case s.AssignmentExpression:h=this.nextId();g={};if(!od(a.left))throw ba("lval");this.recurse(a.left,u,g,function(){k.if_(k.notNull(g.context),function(){k.recurse(a.right,h);k.addEnsureSafeObject(k.member(g.context,g.name,g.computed));k.addEnsureSafeAssignContext(g.context);m=k.member(g.context,g.name,g.computed)+a.operator+h;k.assign(b,m);c(b||m)})},1);break;case s.ArrayExpression:l=[];n(a.elements,function(a){k.recurse(a,k.nextId(),u,function(a){l.push(a)})}); +m="["+l.join(",")+"]";this.assign(b,m);c(m);break;case s.ObjectExpression:l=[];n(a.properties,function(a){k.recurse(a.value,k.nextId(),u,function(b){l.push(k.escape(a.key.type===s.Identifier?a.key.name:""+a.key.value)+":"+b)})});m="{"+l.join(",")+"}";this.assign(b,m);c(m);break;case s.ThisExpression:this.assign(b,"s");c("s");break;case s.NGValueParameter:this.assign(b,"v"),c("v")}},getHasOwnProperty:function(a,b){var d=a+"."+b,c=this.current().own;c.hasOwnProperty(d)||(c[d]=this.nextId(!1,a+"&&("+ +this.escape(b)+" in "+a+")"));return c[d]},assign:function(a,b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,d){if(!0===a)b();else{var c=this.current().body;c.push("if(",a, +"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){return a+"."+b},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,b)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")}, +addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),";")},addEnsureSafeAssignContext:function(a){this.current().body.push(this.ensureSafeAssignContext(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},getStringValue:function(a){this.assign(a,"getStringValue("+a+",text)")},ensureSafeAssignContext:function(a){return"ensureSafeAssignContext("+ +a+",text)"},lazyRecurse:function(a,b,d,c,e,f){var g=this;return function(){g.recurse(a,b,d,c,e,f)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(E(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(Q(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if("undefined"=== +typeof a)return"undefined";throw ba("esc");},nextId:function(a,b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}};sd.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=b;W(c,d.$filter);var e,f;if(e=pd(c))f=this.recurse(e);e=nd(c.body);var g;e&&(g=[],n(e,function(a,b){var c=d.recurse(a);a.input=c;g.push(c);a.watchId=b}));var h=[];n(c.body,function(a){h.push(d.recurse(a.expression))}); +e=0===c.body.length?function(){}:1===c.body.length?h[0]:function(a,b){var c;n(h,function(d){c=d(a,b)});return c};f&&(e.assign=function(a,b,c){return f(a,c,b)});g&&(e.inputs=g);e.literal=qd(c);e.constant=c.constant;return e},recurse:function(a,b,d){var c,e,f=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case s.Literal:return this.value(a.value,b);case s.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case s.BinaryExpression:return c=this.recurse(a.left), +e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case s.LogicalExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case s.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case s.Identifier:return Va(a.name,f.expression),f.identifier(a.name,f.expensiveChecks||Fb(a.name),b,d,f.expression);case s.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(Va(a.property.name, +f.expression),e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(c,e,b,d,f.expression):this.nonComputedMember(c,e,f.expensiveChecks,b,d,f.expression);case s.CallExpression:return g=[],n(a.arguments,function(a){g.push(f.recurse(a))}),a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var r=[],n=0;n<g.length;++n)r.push(g[n](a,c,d,f));a=e.apply(u,r,f);return b?{context:u,name:u,value:a}:a}:function(a, +c,d,m){var r=e(a,c,d,m),n;if(null!=r.value){xa(r.context,f.expression);kd(r.value,f.expression);n=[];for(var q=0;q<g.length;++q)n.push(xa(g[q](a,c,d,m),f.expression));n=xa(r.value.apply(r.context,n),f.expression)}return b?{value:n}:n};case s.AssignmentExpression:return c=this.recurse(a.left,!0,1),e=this.recurse(a.right),function(a,d,g,m){var n=c(a,d,g,m);a=e(a,d,g,m);xa(n.value,f.expression);ld(n.context);n.context[n.name]=a;return b?{value:a}:a};case s.ArrayExpression:return g=[],n(a.elements,function(a){g.push(f.recurse(a))}), +function(a,c,d,e){for(var f=[],n=0;n<g.length;++n)f.push(g[n](a,c,d,e));return b?{value:f}:f};case s.ObjectExpression:return g=[],n(a.properties,function(a){g.push({key:a.key.type===s.Identifier?a.key.name:""+a.key.value,value:f.recurse(a.value)})}),function(a,c,d,e){for(var f={},n=0;n<g.length;++n)f[g[n].key]=g[n].value(a,c,d,e);return b?{value:f}:f};case s.ThisExpression:return function(a){return b?{value:a}:a};case s.NGValueParameter:return function(a,c,d,e){return b?{value:d}:d}}},"unary+":function(a, +b){return function(d,c,e,f){d=a(d,c,e,f);d=y(d)?+d:0;return b?{value:d}:d}},"unary-":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=y(d)?-d:0;return b?{value:d}:d}},"unary!":function(a,b){return function(d,c,e,f){d=!a(d,c,e,f);return b?{value:d}:d}},"binary+":function(a,b,d){return function(c,e,f,g){var h=a(c,e,f,g);c=b(c,e,f,g);h=md(h,c);return d?{value:h}:h}},"binary-":function(a,b,d){return function(c,e,f,g){var h=a(c,e,f,g);c=b(c,e,f,g);h=(y(h)?h:0)-(y(c)?c:0);return d?{value:h}:h}},"binary*":function(a, +b,d){return function(c,e,f,g){c=a(c,e,f,g)*b(c,e,f,g);return d?{value:c}:c}},"binary/":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)/b(c,e,f,g);return d?{value:c}:c}},"binary%":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)%b(c,e,f,g);return d?{value:c}:c}},"binary===":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)===b(c,e,f,g);return d?{value:c}:c}},"binary!==":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!==b(c,e,f,g);return d?{value:c}:c}},"binary==":function(a,b, +d){return function(c,e,f,g){c=a(c,e,f,g)==b(c,e,f,g);return d?{value:c}:c}},"binary!=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!=b(c,e,f,g);return d?{value:c}:c}},"binary<":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<b(c,e,f,g);return d?{value:c}:c}},"binary>":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>b(c,e,f,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<=b(c,e,f,g);return d?{value:c}:c}},"binary>=":function(a,b,d){return function(c, +e,f,g){c=a(c,e,f,g)>=b(c,e,f,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)&&b(c,e,f,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)||b(c,e,f,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(e,f,g,h){e=a(e,f,g,h)?b(e,f,g,h):d(e,f,g,h);return c?{value:e}:e}},value:function(a,b){return function(){return b?{context:u,name:u,value:a}:a}},identifier:function(a,b,d,c,e){return function(f,g,h,k){f= +g&&a in g?g:f;c&&1!==c&&f&&!f[a]&&(f[a]={});g=f?f[a]:u;b&&xa(g,e);return d?{context:f,name:a,value:g}:g}},computedMember:function(a,b,d,c,e){return function(f,g,h,k){var l=a(f,g,h,k),m,n;null!=l&&(m=b(f,g,h,k),m=jd(m),Va(m,e),c&&1!==c&&l&&!l[m]&&(l[m]={}),n=l[m],xa(n,e));return d?{context:l,name:m,value:n}:n}},nonComputedMember:function(a,b,d,c,e,f){return function(g,h,k,l){g=a(g,h,k,l);e&&1!==e&&g&&!g[b]&&(g[b]={});h=null!=g?g[b]:u;(d||Fb(b))&&xa(h,f);return c?{context:g,name:b,value:h}:h}},inputs:function(a, +b){return function(d,c,e,f){return f?f[b]:a(d,c,e)}}};var gc=function(a,b,d){this.lexer=a;this.$filter=b;this.options=d;this.ast=new s(this.lexer);this.astCompiler=d.csp?new sd(this.ast,b):new rd(this.ast,b)};gc.prototype={constructor:gc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};$();$();var $f=Object.prototype.valueOf,ya=G("$sce"),la={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},ha=G("$compile"),Y=X.createElement("a"),wd=wa(S.location.href); +xd.$inject=["$document"];Jc.$inject=["$provide"];yd.$inject=["$locale"];Ad.$inject=["$locale"];var ic=".",jg={yyyy:ca("FullYear",4),yy:ca("FullYear",2,0,!0),y:ca("FullYear",1),MMMM:Hb("Month"),MMM:Hb("Month",!0),MM:ca("Month",2,1),M:ca("Month",1,1),dd:ca("Date",2),d:ca("Date",1),HH:ca("Hours",2),H:ca("Hours",1),hh:ca("Hours",2,-12),h:ca("Hours",1,-12),mm:ca("Minutes",2),m:ca("Minutes",1),ss:ca("Seconds",2),s:ca("Seconds",1),sss:ca("Milliseconds",3),EEEE:Hb("Day"),EEE:Hb("Day",!0),a:function(a,b){return 12> +a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,b,d){a=-1*d;return a=(0<=a?"+":"")+(Gb(Math[0<a?"floor":"ceil"](a/60),2)+Gb(Math.abs(a%60),2))},ww:Ed(2),w:Ed(1),G:jc,GG:jc,GGG:jc,GGGG:function(a,b){return 0>=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}},ig=/((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,hg=/^\-?\d+$/;zd.$inject=["$locale"];var eg=na(F),fg=na(sb);Bd.$inject=["$parse"];var he=na({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a, +b){if("a"===b[0].nodeName.toLowerCase()){var e="[object SVGAnimatedString]"===sa.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(e)||a.preventDefault()})}}}}),tb={};n(Cb,function(a,b){function d(a,d,e){a.$watch(e[c],function(a){e.$set(b,!!a)})}if("multiple"!=a){var c=va("ng-"+b),e=d;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[c]&&d(a,b,e)});tb[c]=function(){return{restrict:"A",priority:100,link:e}}}});n(Zc,function(a,b){tb[b]=function(){return{priority:100,link:function(a, +c,e){if("ngPattern"===b&&"/"==e.ngPattern.charAt(0)&&(c=e.ngPattern.match(lg))){e.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(e[b],function(a){e.$set(b,a)})}}}});n(["src","srcset","href"],function(a){var b=va("ng-"+a);tb[b]=function(){return{priority:99,link:function(d,c,e){var f=a,g=a;"href"===a&&"[object SVGAnimatedString]"===sa.call(c.prop("href"))&&(g="xlinkHref",e.$attr[g]="xlink:href",f=null);e.$observe(b,function(b){b?(e.$set(g,b),Ha&&f&&c.prop(f,e[g])):"href"===a&&e.$set(g,null)})}}}}); +var Ib={$addControl:x,$$renameControl:function(a,b){a.$name=b},$removeControl:x,$setValidity:x,$setDirty:x,$setPristine:x,$setSubmitted:x};Fd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var Nd=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||x}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:Fd,compile:function(d,f){d.addClass(Wa).addClass(mb);var g=f.name?"name":a&&f.ngForm?"ngForm": +!1;return{pre:function(a,d,e,f){var n=f[0];if(!("action"in e)){var q=function(b){a.$apply(function(){n.$commitViewValue();n.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",q,!1);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",q,!1)},0,!1)})}(f[1]||n.$$parentForm).$addControl(n);var s=g?c(n.$name):x;g&&(s(a,n),e.$observe(g,function(b){n.$name!==b&&(s(a,u),n.$$parentForm.$$renameControl(n,b),s=c(n.$name),s(a,n))}));d.on("$destroy",function(){n.$$parentForm.$removeControl(n); +s(a,u);M(n,Ib)})}}}}}]},ie=Nd(),ve=Nd(!0),kg=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,tg=/^[A-Za-z][A-Za-z\d.+-]*:\/*(?:\w+(?::\w+)?@)?[^\s/]+(?::\d+)?(?:\/[\w#!:.?+=&%@\-/]*)?$/,ug=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,vg=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Od=/^(\d{4})-(\d{2})-(\d{2})$/,Pd=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,mc=/^(\d{4})-W(\d\d)$/,Qd=/^(\d{4})-(\d\d)$/, +Rd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Sd={text:function(a,b,d,c,e,f){jb(a,b,d,c,e,f);kc(c)},date:kb("date",Od,Kb(Od,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":kb("datetimelocal",Pd,Kb(Pd,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:kb("time",Rd,Kb(Rd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:kb("week",mc,function(a,b){if(da(a))return a;if(E(a)){mc.lastIndex=0;var d=mc.exec(a);if(d){var c=+d[1],e=+d[2],f=d=0,g=0,h=0,k=Dd(c),e=7*(e-1);b&&(d=b.getHours(),f= +b.getMinutes(),g=b.getSeconds(),h=b.getMilliseconds());return new Date(c,0,k.getDate()+e,d,f,g,h)}}return NaN},"yyyy-Www"),month:kb("month",Qd,Kb(Qd,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,e,f){Hd(a,b,d,c);jb(a,b,d,c,e,f);c.$$parserName="number";c.$parsers.push(function(a){return c.$isEmpty(a)?null:vg.test(a)?parseFloat(a):u});c.$formatters.push(function(a){if(!c.$isEmpty(a)){if(!Q(a))throw lb("numfmt",a);a=a.toString()}return a});if(y(d.min)||d.ngMin){var g;c.$validators.min=function(a){return c.$isEmpty(a)|| +q(g)||a>=g};d.$observe("min",function(a){y(a)&&!Q(a)&&(a=parseFloat(a,10));g=Q(a)&&!isNaN(a)?a:u;c.$validate()})}if(y(d.max)||d.ngMax){var h;c.$validators.max=function(a){return c.$isEmpty(a)||q(h)||a<=h};d.$observe("max",function(a){y(a)&&!Q(a)&&(a=parseFloat(a,10));h=Q(a)&&!isNaN(a)?a:u;c.$validate()})}},url:function(a,b,d,c,e,f){jb(a,b,d,c,e,f);kc(c);c.$$parserName="url";c.$validators.url=function(a,b){var d=a||b;return c.$isEmpty(d)||tg.test(d)}},email:function(a,b,d,c,e,f){jb(a,b,d,c,e,f);kc(c); +c.$$parserName="email";c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)||ug.test(d)}},radio:function(a,b,d,c){q(d.name)&&b.attr("name",++nb);b.on("click",function(a){b[0].checked&&c.$setViewValue(d.value,a&&a.type)});c.$render=function(){b[0].checked=d.value==c.$viewValue};d.$observe("value",c.$render)},checkbox:function(a,b,d,c,e,f,g,h){var k=Id(h,a,"ngTrueValue",d.ngTrueValue,!0),l=Id(h,a,"ngFalseValue",d.ngFalseValue,!1);b.on("click",function(a){c.$setViewValue(b[0].checked,a&& +a.type)});c.$render=function(){b[0].checked=c.$viewValue};c.$isEmpty=function(a){return!1===a};c.$formatters.push(function(a){return ma(a,k)});c.$parsers.push(function(a){return a?k:l})},hidden:x,button:x,submit:x,reset:x,file:x},Dc=["$browser","$sniffer","$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,h){h[0]&&(Sd[F(g.type)]||Sd.text)(e,f,g,h[0],b,a,d,c)}}}}],wg=/^(true|false|\d+)$/,Ne=function(){return{restrict:"A",priority:100,compile:function(a, +b){return wg.test(b.ngValue)?function(a,b,e){e.$set("value",a.$eval(e.ngValue))}:function(a,b,e){a.$watch(e.ngValue,function(a){e.$set("value",a)})}}}},ne=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b);return function(b,c,e){a.$$addBindingInfo(c,e.ngBind);c=c[0];b.$watch(e.ngBind,function(a){c.textContent=q(a)?"":a})}}}}],pe=["$interpolate","$compile",function(a,b){return{compile:function(d){b.$$addBindingClass(d);return function(c,d,f){c=a(d.attr(f.$attr.ngBindTemplate)); +b.$$addBindingInfo(d,c.expressions);d=d[0];f.$observe("ngBindTemplate",function(a){d.textContent=q(a)?"":a})}}}}],oe=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,e){var f=b(e.ngBindHtml),g=b(e.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(c);return function(b,c,e){d.$$addBindingInfo(c,e.ngBindHtml);b.$watch(g,function(){c.html(a.getTrustedHtml(f(b))||"")})}}}}],Me=na({restrict:"A",require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}), +qe=lc("",!0),se=lc("Odd",0),re=lc("Even",1),te=La({compile:function(a,b){b.$set("ngCloak",u);a.removeClass("ng-cloak")}}),ue=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Ic={},xg={blur:!0,focus:!0};n("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b=va("ng-"+a);Ic[b]=["$parse","$rootScope",function(d,c){return{restrict:"A",compile:function(e,f){var g= +d(f[b],null,!0);return function(b,d){d.on(a,function(d){var e=function(){g(b,{$event:d})};xg[a]&&c.$$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var xe=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(b,d,c,e,f){var g,h,k;b.$watch(c.ngIf,function(b){b?h||f(function(b,e){h=e;b[b.length++]=X.createComment(" end ngIf: "+c.ngIf+" ");g={clone:b};a.enter(b,d.parent(),d)}):(k&&(k.remove(),k=null),h&&(h.$destroy(),h=null),g&&(k= +rb(g.clone),a.leave(k).then(function(){k=null}),g=null))})}}}],ye=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:fa.noop,compile:function(c,e){var f=e.ngInclude||e.src,g=e.onload||"",h=e.autoscroll;return function(c,e,m,n,q){var s=0,v,u,p,C=function(){u&&(u.remove(),u=null);v&&(v.$destroy(),v=null);p&&(d.leave(p).then(function(){u=null}),u=p,p=null)};c.$watch(f,function(f){var m=function(){!y(h)||h&&!c.$eval(h)|| +b()},u=++s;f?(a(f,!0).then(function(a){if(u===s){var b=c.$new();n.template=a;a=q(b,function(a){C();d.enter(a,null,e).then(m)});v=b;p=a;v.$emit("$includeContentLoaded",f);c.$eval(g)}},function(){u===s&&(C(),c.$emit("$includeContentError",f))}),c.$emit("$includeContentRequested",f)):(C(),n.template=null)})}}}}],Pe=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(b,d,c,e){/SVG/.test(d[0].toString())?(d.empty(),a(Lc(e.template,X).childNodes)(b,function(a){d.append(a)}, +{futureParentElement:d})):(d.html(e.template),a(d.contents())(b))}}}],ze=La({priority:450,compile:function(){return{pre:function(a,b,d){a.$eval(d.ngInit)}}}}),Le=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var e=b.attr(d.$attr.ngList)||", ",f="false"!==d.ngTrim,g=f?U(e):e;c.$parsers.push(function(a){if(!q(a)){var b=[];a&&n(a.split(g),function(a){a&&b.push(f?U(a):a)});return b}});c.$formatters.push(function(a){return I(a)?a.join(e):u});c.$isEmpty=function(a){return!a|| +!a.length}}}},mb="ng-valid",Jd="ng-invalid",Wa="ng-pristine",Jb="ng-dirty",Ld="ng-pending",lb=G("ngModel"),yg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,b,d,c,e,f,g,h,k,l){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=u;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1; +this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=u;this.$name=l(d.name||"",!1)(a);this.$$parentForm=Ib;var m=e(d.ngModel),r=m.assign,t=m,s=r,v=null,B,p=this;this.$$setOptions=function(a){if((p.$options=a)&&a.getterSetter){var b=e(d.ngModel+"()"),f=e(d.ngModel+"($$$p)");t=function(a){var c=m(a);z(c)&&(c=b(a));return c};s=function(a,b){z(m(a))?f(a,{$$$p:p.$modelValue}):r(a,p.$modelValue)}}else if(!m.assign)throw lb("nonassign",d.ngModel,ua(c));};this.$render=x;this.$isEmpty= +function(a){return q(a)||""===a||null===a||a!==a};var C=0;Gd({ctrl:this,$element:c,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]},$animate:f});this.$setPristine=function(){p.$dirty=!1;p.$pristine=!0;f.removeClass(c,Jb);f.addClass(c,Wa)};this.$setDirty=function(){p.$dirty=!0;p.$pristine=!1;f.removeClass(c,Wa);f.addClass(c,Jb);p.$$parentForm.$setDirty()};this.$setUntouched=function(){p.$touched=!1;p.$untouched=!0;f.setClass(c,"ng-untouched","ng-touched")};this.$setTouched=function(){p.$touched= +!0;p.$untouched=!1;f.setClass(c,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){g.cancel(v);p.$viewValue=p.$$lastCommittedViewValue;p.$render()};this.$validate=function(){if(!Q(p.$modelValue)||!isNaN(p.$modelValue)){var a=p.$$rawModelValue,b=p.$valid,c=p.$modelValue,d=p.$options&&p.$options.allowInvalid;p.$$runValidators(a,p.$$lastCommittedViewValue,function(e){d||b===e||(p.$modelValue=e?a:u,p.$modelValue!==c&&p.$$writeModelToScope())})}};this.$$runValidators=function(a,b,c){function d(){var c= +!0;n(p.$validators,function(d,e){var g=d(a,b);c=c&&g;f(e,g)});return c?!0:(n(p.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;n(p.$asyncValidators,function(e,g){var h=e(a,b);if(!h||!z(h.then))throw lb("$asyncValidators",h);f(g,u);c.push(h.then(function(){f(g,!0)},function(a){d=!1;f(g,!1)}))});c.length?k.all(c).then(function(){g(d)},x):g(!0)}function f(a,b){h===C&&p.$setValidity(a,b)}function g(a){h===C&&c(a)}C++;var h=C;(function(){var a=p.$$parserName||"parse";if(q(B))f(a, +null);else return B||(n(p.$validators,function(a,b){f(b,null)}),n(p.$asyncValidators,function(a,b){f(b,null)})),f(a,B),B;return!0})()?d()?e():g(!1):g(!1)};this.$commitViewValue=function(){var a=p.$viewValue;g.cancel(v);if(p.$$lastCommittedViewValue!==a||""===a&&p.$$hasNativeValidators)p.$$lastCommittedViewValue=a,p.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var b=p.$$lastCommittedViewValue;if(B=q(b)?u:!0)for(var c=0;c<p.$parsers.length;c++)if(b=p.$parsers[c](b), +q(b)){B=!1;break}Q(p.$modelValue)&&isNaN(p.$modelValue)&&(p.$modelValue=t(a));var d=p.$modelValue,e=p.$options&&p.$options.allowInvalid;p.$$rawModelValue=b;e&&(p.$modelValue=b,p.$modelValue!==d&&p.$$writeModelToScope());p.$$runValidators(b,p.$$lastCommittedViewValue,function(a){e||(p.$modelValue=a?b:u,p.$modelValue!==d&&p.$$writeModelToScope())})};this.$$writeModelToScope=function(){s(a,p.$modelValue);n(p.$viewChangeListeners,function(a){try{a()}catch(c){b(c)}})};this.$setViewValue=function(a,b){p.$viewValue= +a;p.$options&&!p.$options.updateOnDefault||p.$$debounceViewValueCommit(b)};this.$$debounceViewValueCommit=function(b){var c=0,d=p.$options;d&&y(d.debounce)&&(d=d.debounce,Q(d)?c=d:Q(d[b])?c=d[b]:Q(d["default"])&&(c=d["default"]));g.cancel(v);c?v=g(function(){p.$commitViewValue()},c):h.$$phase?p.$commitViewValue():a.$apply(function(){p.$commitViewValue()})};a.$watch(function(){var b=t(a);if(b!==p.$modelValue&&(p.$modelValue===p.$modelValue||b===b)){p.$modelValue=p.$$rawModelValue=b;B=u;for(var c=p.$formatters, +d=c.length,e=b;d--;)e=c[d](e);p.$viewValue!==e&&(p.$viewValue=p.$$lastCommittedViewValue=e,p.$render(),p.$$runValidators(b,e,x))}return b})}],Ke=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:yg,priority:1,compile:function(b){b.addClass(Wa).addClass("ng-untouched").addClass(mb);return{pre:function(a,b,e,f){var g=f[0];b=f[1]||g.$$parentForm;g.$$setOptions(f[2]&&f[2].$options);b.$addControl(g);e.$observe("name",function(a){g.$name!==a&&g.$$parentForm.$$renameControl(g, +a)});a.$on("$destroy",function(){g.$$parentForm.$removeControl(g)})},post:function(b,c,e,f){var g=f[0];if(g.$options&&g.$options.updateOn)c.on(g.$options.updateOn,function(a){g.$$debounceViewValueCommit(a&&a.type)});c.on("blur",function(c){g.$touched||(a.$$phase?b.$evalAsync(g.$setTouched):b.$apply(g.$setTouched))})}}}}}],zg=/(\s+|^)default(\s+|$)/,Oe=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,b){var d=this;this.$options=bb(a.$eval(b.ngModelOptions));y(this.$options.updateOn)? +(this.$options.updateOnDefault=!1,this.$options.updateOn=U(this.$options.updateOn.replace(zg,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},Ae=La({terminal:!0,priority:1E3}),Ag=G("ngOptions"),Bg=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,Ie=["$compile","$parse",function(a, +b){function d(a,c,d){function e(a,b,c,d,f){this.selectValue=a;this.viewValue=b;this.label=c;this.group=d;this.disabled=f}function l(a){var b;if(!q&&za(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&"$"!==c.charAt(0)&&b.push(c)}return b}var m=a.match(Bg);if(!m)throw Ag("iexp",a,ua(c));var n=m[5]||m[7],q=m[6];a=/ as /.test(m[0])&&m[1];var s=m[9];c=b(m[2]?m[1]:n);var v=a&&b(a)||c,u=s&&b(s),p=s?function(a,b){return u(d,b)}:function(a){return Ca(a)},C=function(a,b){return p(a,z(a,b))},w=b(m[2]|| +m[1]),y=b(m[3]||""),B=b(m[4]||""),x=b(m[8]),D={},z=q?function(a,b){D[q]=b;D[n]=a;return D}:function(a){D[n]=a;return D};return{trackBy:s,getTrackByValue:C,getWatchables:b(x,function(a){var b=[];a=a||[];for(var c=l(a),e=c.length,f=0;f<e;f++){var g=a===c?f:c[f],k=z(a[g],g),g=p(a[g],k);b.push(g);if(m[2]||m[1])g=w(d,k),b.push(g);m[4]&&(k=B(d,k),b.push(k))}return b}),getOptions:function(){for(var a=[],b={},c=x(d)||[],f=l(c),g=f.length,m=0;m<g;m++){var n=c===f?m:f[m],r=z(c[n],n),q=v(d,r),n=p(q,r),t=w(d, +r),u=y(d,r),r=B(d,r),q=new e(n,q,t,u,r);a.push(q);b[n]=q}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[C(a)]},getViewValueFromOption:function(a){return s?fa.copy(a.viewValue):a.viewValue}}}}}var c=X.createElement("option"),e=X.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","?ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=x},post:function(b,g,h,k){function l(a,b){a.element=b;b.disabled=a.disabled;a.label!==b.label&&(b.label=a.label, +b.textContent=a.label);a.value!==b.value&&(b.value=a.selectValue)}function m(a,b,c,d){b&&F(b.nodeName)===c?c=b:(c=d.cloneNode(!1),b?a.insertBefore(c,b):a.appendChild(c));return c}function r(a){for(var b;a;)b=a.nextSibling,Xb(a),a=b}function q(a){var b=p&&p[0],c=z&&z[0];if(b||c)for(;a&&(a===b||a===c||8===a.nodeType||""===a.value);)a=a.nextSibling;return a}function s(){var a=D&&u.readValue();D=E.getOptions();var b={},d=g[0].firstChild;x&&g.prepend(p);d=q(d);D.items.forEach(function(a){var f,h;a.group? +(f=b[a.group],f||(f=m(g[0],d,"optgroup",e),d=f.nextSibling,f.label=a.group,f=b[a.group]={groupElement:f,currentOptionElement:f.firstChild}),h=m(f.groupElement,f.currentOptionElement,"option",c),l(a,h),f.currentOptionElement=h.nextSibling):(h=m(g[0],d,"option",c),l(a,h),d=h.nextSibling)});Object.keys(b).forEach(function(a){r(b[a].currentOptionElement)});r(d);v.$render();if(!v.$isEmpty(a)){var f=u.readValue();(E.trackBy?ma(a,f):a===f)||(v.$setViewValue(f),v.$render())}}var v=k[1];if(v){var u=k[0];k= +h.multiple;for(var p,C=0,w=g.children(),y=w.length;C<y;C++)if(""===w[C].value){p=w.eq(C);break}var x=!!p,z=B(c.cloneNode(!1));z.val("?");var D,E=d(h.ngOptions,g,b);k?(v.$isEmpty=function(a){return!a||0===a.length},u.writeValue=function(a){D.items.forEach(function(a){a.element.selected=!1});a&&a.forEach(function(a){(a=D.getOptionFromViewValue(a))&&!a.disabled&&(a.element.selected=!0)})},u.readValue=function(){var a=g.val()||[],b=[];n(a,function(a){(a=D.selectValueMap[a])&&!a.disabled&&b.push(D.getViewValueFromOption(a))}); +return b},E.trackBy&&b.$watchCollection(function(){if(I(v.$viewValue))return v.$viewValue.map(function(a){return E.getTrackByValue(a)})},function(){v.$render()})):(u.writeValue=function(a){var b=D.getOptionFromViewValue(a);b&&!b.disabled?g[0].value!==b.selectValue&&(z.remove(),x||p.remove(),g[0].value=b.selectValue,b.element.selected=!0,b.element.setAttribute("selected","selected")):null===a||x?(z.remove(),x||g.prepend(p),g.val(""),p.prop("selected",!0),p.attr("selected",!0)):(x||p.remove(),g.prepend(z), +g.val("?"),z.prop("selected",!0),z.attr("selected",!0))},u.readValue=function(){var a=D.selectValueMap[g.val()];return a&&!a.disabled?(x||p.remove(),z.remove(),D.getViewValueFromOption(a)):null},E.trackBy&&b.$watch(function(){return E.getTrackByValue(v.$viewValue)},function(){v.$render()}));x?(p.remove(),a(p)(b),p.removeClass("ng-scope")):p=B(c.cloneNode(!1));s();b.$watchCollection(E.getWatchables,s)}}}}}],Be=["$locale","$interpolate","$log",function(a,b,d){var c=/{}/g,e=/^when(Minus)?(.+)$/;return{link:function(f, +g,h){function k(a){g.text(a||"")}var l=h.count,m=h.$attr.when&&g.attr(h.$attr.when),r=h.offset||0,s=f.$eval(m)||{},u={},v=b.startSymbol(),y=b.endSymbol(),p=v+l+"-"+r+y,C=fa.noop,w;n(h,function(a,b){var c=e.exec(b);c&&(c=(c[1]?"-":"")+F(c[2]),s[c]=g.attr(h.$attr[b]))});n(s,function(a,d){u[d]=b(a.replace(c,p))});f.$watch(l,function(b){var c=parseFloat(b),e=isNaN(c);e||c in s||(c=a.pluralCat(c-r));c===w||e&&Q(w)&&isNaN(w)||(C(),e=u[c],q(e)?(null!=b&&d.debug("ngPluralize: no rule defined for '"+c+"' in "+ +m),C=x,k()):C=f.$watch(e,k),w=c)})}}}],Ce=["$parse","$animate",function(a,b){var d=G("ngRepeat"),c=function(a,b,c,d,k,l,m){a[c]=d;k&&(a[k]=l);a.$index=b;a.$first=0===b;a.$last=b===m-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(b&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(e,f){var g=f.ngRepeat,h=X.createComment(" end ngRepeat: "+g+" "),k=g.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/); +if(!k)throw d("iexp",g);var l=k[1],m=k[2],r=k[3],q=k[4],k=l.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);if(!k)throw d("iidexp",l);var s=k[3]||k[1],v=k[2];if(r&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(r)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(r)))throw d("badident",r);var x,p,y,w,z={$id:Ca};q?x=a(q):(y=function(a,b){return Ca(b)},w=function(a){return a});return function(a,e,f,k,l){x&&(p=function(b,c,d){v&&(z[v]=b);z[s]=c;z.$index= +d;return x(a,z)});var q=$();a.$watchCollection(m,function(f){var k,m,t=e[0],x,z=$(),D,E,H,F,I,G,J;r&&(a[r]=f);if(za(f))I=f,m=p||y;else for(J in m=p||w,I=[],f)qa.call(f,J)&&"$"!==J.charAt(0)&&I.push(J);D=I.length;J=Array(D);for(k=0;k<D;k++)if(E=f===I?k:I[k],H=f[E],F=m(E,H,k),q[F])G=q[F],delete q[F],z[F]=G,J[k]=G;else{if(z[F])throw n(J,function(a){a&&a.scope&&(q[a.id]=a)}),d("dupes",g,F,H);J[k]={id:F,scope:u,clone:u};z[F]=!0}for(x in q){G=q[x];F=rb(G.clone);b.leave(F);if(F[0].parentNode)for(k=0,m=F.length;k< +m;k++)F[k].$$NG_REMOVED=!0;G.scope.$destroy()}for(k=0;k<D;k++)if(E=f===I?k:I[k],H=f[E],G=J[k],G.scope){x=t;do x=x.nextSibling;while(x&&x.$$NG_REMOVED);G.clone[0]!=x&&b.move(rb(G.clone),null,B(t));t=G.clone[G.clone.length-1];c(G.scope,k,s,H,v,E,D)}else l(function(a,d){G.scope=d;var e=h.cloneNode(!1);a[a.length++]=e;b.enter(a,null,B(t));t=e;G.clone=a;z[G.id]=G;c(G.scope,k,s,H,v,E,D)});q=z})}}}}],De=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngShow,function(b){a[b? +"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],we=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngHide,function(b){a[b?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Ee=La(function(a,b,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&n(d,function(a,c){b.css(c,"")});a&&b.css(a)},!0)}),Fe=["$animate",function(a){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(b, +d,c,e){var f=[],g=[],h=[],k=[],l=function(a,b){return function(){a.splice(b,1)}};b.$watch(c.ngSwitch||c.on,function(b){var c,d;c=0;for(d=h.length;c<d;++c)a.cancel(h[c]);c=h.length=0;for(d=k.length;c<d;++c){var q=rb(g[c].clone);k[c].$destroy();(h[c]=a.leave(q)).then(l(h,c))}g.length=0;k.length=0;(f=e.cases["!"+b]||e.cases["?"])&&n(f,function(b){b.transclude(function(c,d){k.push(d);var e=b.element;c[c.length++]=X.createComment(" end ngSwitchWhen: ");g.push({clone:c});a.enter(c,e.parent(),e)})})})}}}], +Ge=La({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["!"+d.ngSwitchWhen]=c.cases["!"+d.ngSwitchWhen]||[];c.cases["!"+d.ngSwitchWhen].push({transclude:e,element:b})}}),He=La({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["?"]=c.cases["?"]||[];c.cases["?"].push({transclude:e,element:b})}}),Je=La({restrict:"EAC",link:function(a,b,d,c,e){if(!e)throw G("ngTransclude")("orphan",ua(b));e(function(a){b.empty(); +b.append(a)})}}),je=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,d){"text/ng-template"==d.type&&a.put(d.id,b[0].text)}}}],Cg={$setViewValue:x,$render:x},Dg=["$element","$scope","$attrs",function(a,b,d){var c=this,e=new Sa;c.ngModelCtrl=Cg;c.unknownOption=B(X.createElement("option"));c.renderUnknownOption=function(b){b="? "+Ca(b)+" ?";c.unknownOption.val(b);a.prepend(c.unknownOption);a.val(b)};b.$on("$destroy",function(){c.renderUnknownOption=x});c.removeUnknownOption= +function(){c.unknownOption.parent()&&c.unknownOption.remove()};c.readValue=function(){c.removeUnknownOption();return a.val()};c.writeValue=function(b){c.hasOption(b)?(c.removeUnknownOption(),a.val(b),""===b&&c.emptyOption.prop("selected",!0)):null==b&&c.emptyOption?(c.removeUnknownOption(),a.val("")):c.renderUnknownOption(b)};c.addOption=function(a,b){Ra(a,'"option value"');""===a&&(c.emptyOption=b);var d=e.get(a)||0;e.put(a,d+1);c.ngModelCtrl.$render();b[0].hasAttribute("selected")&&(b[0].selected= +!0)};c.removeOption=function(a){var b=e.get(a);b&&(1===b?(e.remove(a),""===a&&(c.emptyOption=u)):e.put(a,b-1))};c.hasOption=function(a){return!!e.get(a)};c.registerOption=function(a,b,d,e,l){if(e){var m;d.$observe("value",function(a){y(m)&&c.removeOption(m);m=a;c.addOption(a,b)})}else l?a.$watch(l,function(a,e){d.$set("value",a);e!==a&&c.removeOption(e);c.addOption(a,b)}):c.addOption(d.value,b);b.on("$destroy",function(){c.removeOption(d.value);c.ngModelCtrl.$render()})}}],ke=function(){return{restrict:"E", +require:["select","?ngModel"],controller:Dg,priority:1,link:{pre:function(a,b,d,c){var e=c[1];if(e){var f=c[0];f.ngModelCtrl=e;e.$render=function(){f.writeValue(e.$viewValue)};b.on("change",function(){a.$apply(function(){e.$setViewValue(f.readValue())})});if(d.multiple){f.readValue=function(){var a=[];n(b.find("option"),function(b){b.selected&&a.push(b.value)});return a};f.writeValue=function(a){var c=new Sa(a);n(b.find("option"),function(a){a.selected=y(c.get(a.value))})};var g,h=NaN;a.$watch(function(){h!== +e.$viewValue||ma(g,e.$viewValue)||(g=ia(e.$viewValue),e.$render());h=e.$viewValue});e.$isEmpty=function(a){return!a||0===a.length}}}}}}},me=["$interpolate",function(a){return{restrict:"E",priority:100,compile:function(b,d){if(y(d.value))var c=a(d.value,!0);else{var e=a(b.text(),!0);e||d.$set("value",b.text())}return function(a,b,d){var k=b.parent();(k=k.data("$selectController")||k.parent().data("$selectController"))&&k.registerOption(a,b,d,c,e)}}}}],le=na({restrict:"E",terminal:!1}),Fc=function(){return{restrict:"A", +require:"?ngModel",link:function(a,b,d,c){c&&(d.required=!0,c.$validators.required=function(a,b){return!d.required||!c.$isEmpty(b)},d.$observe("required",function(){c.$validate()}))}}},Ec=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e,f=d.ngPattern||d.pattern;d.$observe("pattern",function(a){E(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw G("ngPattern")("noregexp",f,a,ua(b));e=a||u;c.$validate()});c.$validators.pattern=function(a,b){return c.$isEmpty(b)|| +q(e)||e.test(b)}}}}},Hc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=-1;d.$observe("maxlength",function(a){a=ea(a);e=isNaN(a)?-1:a;c.$validate()});c.$validators.maxlength=function(a,b){return 0>e||c.$isEmpty(b)||b.length<=e}}}}},Gc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=0;d.$observe("minlength",function(a){e=ea(a)||0;c.$validate()});c.$validators.minlength=function(a,b){return c.$isEmpty(b)||b.length>=e}}}}};S.angular.bootstrap? +console.log("WARNING: Tried to load angular more than once."):(ce(),ee(fa),fa.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==b?0:a.length-b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "), +SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4", +negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",pluralCat:function(a,c){var e=a|0,f=c;u===f&&(f=Math.min(b(a),3));Math.pow(10,f);return 1==e&&0==f?"one":"other"}})}]),B(X).ready(function(){Zd(X,yc)}))})(window,document);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>'); +//# sourceMappingURL=angular.min.js.map diff --git a/src/main/websrc/js/common/china.js b/src/main/websrc/js/common/china.js new file mode 100644 index 0000000..3cd5f95 --- /dev/null +++ b/src/main/websrc/js/common/china.js @@ -0,0 +1,27 @@ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['exports', 'echarts'], factory); + } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { + // CommonJS + factory(exports, require('echarts')); + } else { + // Browser globals + factory({}, root.echarts); + } +}(this, function (exports, echarts) { + var log = function (msg) { + if (typeof console !== 'undefined') { + console && console.error && console.error(msg); + } + } + if (!echarts) { + log('ECharts is not Loaded'); + return; + } + if (!echarts.registerMap) { + log('ECharts Map is not loaded') + return; + } + echarts.registerMap('china', {"type":"FeatureCollection","features":[{"id":"710000","geometry":{"type":"MultiPolygon","coordinates":[["@@°Ü¯Û","@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚänÜƤɊĂǀĆĴĤNJŨxĚĮǂƺòƌâÔ®ĮXŦţƸZûÐƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ¿IċããF¥ĘWǬÏĶñÄ","@@\\p|WoYG¿¥Ij@","@@ ¡@V^RqBbAnTXeQr©C","@@ÆEEkWqë I"]],"encodeOffsets":[[[122886,24033],[123335,22980],[122375,24193],[122518,24117],[124427,22618]]]},"properties":{"cp":[121.509062,25.044332],"name":"台湾","childNum":5}},{"id":"130000","geometry":{"type":"MultiPolygon","coordinates":[["@@\\aM`ǽÓnUK Ĝēs¤©yrý§uģcJ»eIP]ªrºc_ħ²G¼s`jΟnüsÂľP","@@U`Ts¿mÄ","@@FOhđ©OiÃ`ww^ÌkÑH«ƇǤŗĺtFu {Z}Ö@U´ ʚLg®¯Oı°Ãw ^VbÉsmA ê]]w§RRl£ŭuwNÁ`ÇFēÝčȻuT¡Ĺ¯Õ¯sŗő£YªhVƍ£ƅnëYNgq¼ś¿µı²UºÝUąąŖóxV@tƯJ]eR¾fe|rHA|h~Ėƍl§ÏjVë` ØoÅbbx³^zÃĶ¶Sj®AyÂhðk`«P˵EFÛ¬Y¨Ļrõqi¼Wi°§Ð±²°`[À|ĠO@ÆxO\\ta\\p_Zõ^û{ġȧXýĪÓjùÎRb^λj{íděYfíÙTymńŵōHim½éŅaVcř§ax¹XŻácWU£ôãºQ¨÷Ñws¥qEHÙ|šYQoŕÇyáĂ£MðoťÊP¡mWO¡v{ôvîēÜISpÌhp¨ jdeŔQÖjX³àĈ[n`Yp@UcM`RKhEbpŞlNut®EtqnsÁgAiúoHqCXhfgu~ÏWP½¢G^}¯ÅīGCÑ^ãziMáļMTÃƘrMc|O_¯Ŏ´|morDkO\\mĆJfl@cĢ¬¢aĦtRıÒXòë¬WP{ŵǫƝ īÛ÷ąV×qƥV¿aȉd³BqPBmaËđŻģmÅ®V¹d^KKonYg¯XhqaLdu¥ÍpDž¡KąÅkĝęěhq}HyÃ]¹ǧ£ Í÷¿qágPmoei¤o^á¾ZEY^ Ný{nOl±Í@Mċèk§daNaÇį¿]øRiiñEūiDZàUtėGyl}ÓM}jpEC~¡FtoQiHkk{ILgĽxqÈƋÄdeVDJj£J|ÅdzÂFt~KŨ¸IÆv|¢r}èonb}`RÎÄn°ÒdÞ²^®lnÐèĄlðÓ×]ªÆ}LiñÖ`^°Ç¶p®đDcŋ`ZÔ¶êqvFÆN®ĆTH®¦O¾IbÐã´BĐɢŴÆíȦpĐÞXR·nndO¤OÀĈƒQgµFo|gȒęSWb©osx|hYhgŃfmÖĩnºTÌSp¢dYĤ¶UĈjlǐpäðëx³kÛfw²Xjz~ÂqbTÑěŨ@|oMzv¢ZrÃVw¬ŧĖ¸f°ÐTªqs{S¯r æÝl¼ÖĞ džiGĘJ¼lr}~K¨ŸƐÌWö¼Þ°nÞoĦL|C~D©|q]SvKÑcwpÏÏĿćènĪWlĄkT}¬Tp~®Hgd˒ĺBVtEÀ¢ôPĎƗè@~kü\\rÊĔÖæW_§¼F´©òDòjYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkvGpuARhÞÆǶgĘTǼƹS£¨¡ù³ŘÍ]¿ÂyôEP xX¶¹ÜO¡gÚ¡IwÃé¦ÅBÏ|Ç° N«úmH¯âbęU~xĈbȒ{^xÖlD¸dɂ~"]],"encodeOffsets":[[[120023,41045],[121616,39981],[122102,42307]]]},"properties":{"cp":[114.502461,38.045474],"name":"河北","childNum":3}},{"id":"140000","geometry":{"type":"Polygon","coordinates":["@@ħÜ_ªlìwGkÛÃǏokćiµVZģ¡coTS˹ĪmnÕńehZg{gtwªpXaĚThȑp{¶Eh®RćƑP¿£PmcªaJyý{ýȥoÅîɡųAďä³aÏJ½¥PGąSMsWz½µÛYÓŖgxoOkĒCoȵ]¯_²ÕjāK~©ÅØ^ÔkïçămÏk]±cݯÑÃmQÍ~_apm ~ç¡qu{JÅŧ·Ls}EyÁÆcI{¤IiCfUcƌÃp§]ě«vD@¡SÀµMÅwuYY¡DbÑc¡h×]nkoQdaMç~eDÛtT©±@¥ù@É¡ZcW|WqOJmĩl«ħşvOÓ«IqăV¥D[mI~Ó¢cehiÍ]Ɠ~ĥqX·eƷn±}v[ěďŕ]_œ`¹§ÕōIo©bs^}Ét±ū«³p£ÿ¥WÑxçÁ«h×u×¥ř¾dÒ{ºvĴÎêÌɊ²¶ü¨|ÞƸµȲLLúÉƎ¤ϊęĔV`_bªS^|dzY|dz¥pZbÆ£¶ÒK}tĦÔņƠPYznÍvX¶Ěn ĠÔzý¦ª÷ÑĸÙUȌ¸dòÜJð´ìúNM¬XZ´¤ŊǸ_tldI{¦ƀðĠȤ¥NehXnYGR° ƬDj¬¸|CĞKqºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBÊTĞHƘÁĪËĖĴŞȀÆÿȄlŤĒötνî¼ĨXh|ªM¤ÐzÞĩÒSrao³"],"encodeOffsets":[[117016,41452]]},"properties":{"cp":[112.549248,37.857014],"name":"山西","childNum":1}},{"id":"150000","geometry":{"type":"MultiPolygon","coordinates":[["@@ǪƫÌÛM Ă[`ÕCn}¶Vc ês¯PqFB |S³C|kñHdiÄ¥sʼnÅ PóÑÑE^ÅPpy_YtShQ·aHwsOnʼnÃs©iqjUSiº]ïW«gW¡ARëśijĘ ů`çõh]y»ǃǛҤxÒm~zf}pf|ÜroÈzrKÈĵSƧżĠu~è¬vîS¼ĂhĖMÈÄw\\fŦ°W ¢¾luŸDw\\Ŗĝ","@@GVu»Aylßí¹ãe]Eāò³C¹ð¾²iÒAdkò^P²CǜңDŽ z¼g^èöŰ_IJĕê}gÁnUI«m ]jvV¼euhwqAaW_µj »çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáGOUÛOB±XkŹ£k|e]olkVͼÕqtaÏõjgÁ£§U^RLËnX°ÇBz^~wfvypV ¯ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyxþp]ÉvïèvƀnÂĴÖ@V~Ĉ³MEĸÅĖtējyÄDXÄxGQuv_i¦aBçw˛wD©{tāmQ{EJ§KPśƘƿ¥@sCTÉ}ɃwƇy±gÑ}T[÷kÐ禫 SÒ¥¸ëBX½HáŵÀğtSÝÂa[ƣ°¯¦Pï¡]£ġÒk®G²èQ°óMq}EóƐÇ\\@áügQÍu¥FTÕ¿Jû]|mvāÎYua^WoÀa·ząÒot׶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶¿A[¡{d×uQAMxVvMOmăl«ct[wº_ÇÊjb£ĦS_éQZ_lwgOiýe`YYJq¥IÁdz£ÙË[ÕªuƏ³ÍTs·bÁĽäė[b[ŗfãcn¥îC¿÷µ[ŏÀQōĉm¿Á^£mJVmL[{Ï_£F¥Ö{ŹA} ×Wu©ÅaųijƳhB{·TQqÙIķËZđ©Yc|M¡ LeVUóK_QWk_ĥ¿ãZ»X\\ĴuUèlG®ěłTĠğDŃGÆÍz]± ŭ©Å]ÅÐ}UË¥©TċïxgckfWgi\\ÏĒ¥HkµEë{»ÏetcG±ahUiñiWsɁ·cCÕk]wȑ|ća}w VaĚá G°ùnM¬¯{ÈÐÆA¥ÄêJxÙ¢hP¢ÛºµwWOóFÁz^ÀŗÎú´§¢T¤ǻƺSėǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇqZñiñC³ª »E`¨åXēÕqÉû[l}ç@čƘóO¿¡FUsAʽīccocÇS}£IS~ălkĩXçmĈ ŀÐoÐdxÒuL^T{r@¢ÍĝKén£kQyÅõËXŷƏL§~}kq»IHėDžjĝ»ÑÞoå°qTt|r©ÏS¯·eŨĕx«È[eM¿yupN~¹ÏyN£{©għWí»Í¾səšDž_ÃĀɗ±ąijĉʍŌŷSÉA±åǥɋ@ë£R©ąP©}ĹªƏj¹erLDĝ·{i«ƫC½ÉshVz GS|úþXgp{ÁX¿ć{ƱȏñZáĔyoÁhA}ŅĆfdʼn_¹Y°ėǩÑ¡H¯¶oMQqð¡Ë|Ñ`ƭŁX½·óÛxğįÅcQs«tȋDžFù^it«Č¯[hAi©á¥ÇĚ×l|¹y¯Kȝqgů{ñǙµïċĹzŚȭ¶¡oŽäÕG\\ÄT¿Òõr¯LguÏYęRƩɷŌO\\İТæ^Ŋ IJȶȆbÜGĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľ]ėl¥ËĭûÁėéV©±ćn©ȇÍq¯½YÃÔʼnÉNÑÅÝy¹NqáʅDǡËñƁYÅy̱os§ȋµʽǘǏƬɱàưN¢ƔÊuľýľώȪƺɂļxZĈ}ÌʼnŪĺœĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~ǼȳÐUfdIxÿ\\G zâɏÙOº·pqy£@qþ@Ǟ˽IBäƣzsÂZÁàĻdñ°ŕzéØűzșCìDȐĴĺf®Àľưø@ɜÖÞKĊŇƄ§͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФÔ¤ƌĞ̪Qʤ´¼mȠJˀƲÀɠmɆDŽĜƠ´ǠN~ʢĜ¶ƌĆĘźʆȬ˪ĚĒ¸ĞGȖƴƀj`ĢçĶāàŃºēĢĖćYÀŎüôQÐÂŎŞdžŞêƖoˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^ªƂ`ªt¾äƚêĦĀ¼ÐĔǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDÄ|ø˂˜ƮЬɚwɲFjĔ²Äw°dždÀÉ_ĸdîàŎjÊêTЪŌŜWÈ|tqĢUB~´°ÎFCU¼pĀēƄN¦¾O¶łKĊOjĚj´ĜYp{¦SĚÍ\\TתV÷Ší¨ÅDK°ßtŇĔK¨ǵÂcḷ̌ĚǣȄĽFlġUĵŇȣFʉɁMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFxúQEr´Wrh¤Ɛ \\talĈDJÜ|[Pll̚¸ƎGú´P¬W¦^¦H]prRn|or¾wLVnÇIujkmon£cX^Bh`¥V¦U¤¸}xRj[^xN[~ªxQ[`ªHÆÂExx^wN¶Ê|¨ìMrdYpoRzNyÀDs~bcfÌ`L¾n|¾T°c¨È¢ar¤`[|òDŞĔöxElÖdHÀI`Ď\\Àì~ÆR¼tf¦^¢ķ¶eÐÚMptgjɡČÅyġLûŇV®ÄÈƀĎ°P|ªVVªj¬ĚÒêp¬E|ŬÂ_~¼rƐK f{ĘFĒƌXưăkÃĄ}nµo×q£çkX{uĩ«āíÓUŅÝVUŌ]Ť¥lyň[oi{¦Lĸ Ħ^ôâJ¨^UZðÚĒL¿Ìf£K£ʺoqNwğc`uetOj×°KJ±qÆġmĚŗos¬ qehqsuH{¸kH¡ ÊRǪÇƌbȆ¢´äÜ¢NìÉʖ¦â©Ɨؗ"]],"encodeOffsets":[[[128500,52752],[127089,51784]]]},"properties":{"cp":[111.670801,40.818311],"name":"内蒙古","childNum":2}},{"id":"210000","geometry":{"type":"MultiPolygon","coordinates":[["@@L@@s]","@@MnNm","@@dc","@@eÀC@b","@@f XwkbrÄ`qg","@@^jtWQ","@@~ Y[c","@@I`ĖN^_¿ZÁM","@@Ïxnj{q_×^Gigp","@@iX¶B Y","@@Y Z","@@L_yG`b","@@^WqCTZ","@@\\[§t|]","@@m`p[","@@@é^BntaÊU]x ¯ÄPIJ°hʙK³VÕ@Y~|EvĹsǦL^pòŸÒG Ël]xxÄ_fT¤Ď¤cPC¨¸TVjbgH²sdÎdHt`B²¬GJję¶[ÐhjeXdlwhðSȦªVÊÏÆZÆŶ®²^ÎyÅHńĚDMħĜŁHkçvV[ij¼WYÀäĦ`XlR`ôLUVfK¢{NZdĒªYĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~źB|¦ÕE¤Ð`\\|KUnnI]¤ÀÂĊnŎR®Ő¿¶\\ÀøíDm¦ÎbŨabaĘ\\ľã¸atÎSƐ´©v\\ÖÚÌǴ¤Â¨JKrZ_ZfjþhPkx`YRIjJcVf~sCN¤ EhæmsHy¨SðÑÌ\\\\ĐRÊwS¥fqŒßýáĞÙÉÖ[^¯ǤŲê´\\¦¬ĆPM¯£»uïpùzExanµyoluqe¦W^£ÊL}ñrkqWňûPUP¡ôJoo·U}£[·¨@XĸDXmÛݺGUCÁª½{íĂ^cjk¶Ã[q¤LÉö³cux«|Zd²BWÇ®Yß½ve±ÃCý£W{Ú^q^sÑ·¨ËMr¹·C¥GDrí@wÕKţëV·i}xËÍ÷i©ĝɝǡ]{c±OW³Ya±_ç©HĕoƫŇqr³Lys[ñ³¯OSďOMisZ±ÅFC¥Pq{Ã[Pg}\\¿ghćO k^ĩÃXaĕËĥMoEqqZûěʼn³F¦oĵhÕP{¯~TÍlªNßYÐ{Ps{ÃVUeĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀffdF~ĀeĖd`sx² ®EĦ¦dQÂd^~ăÔH¦\\LKpĄVez¤NP ǹÓRÆąJSha[¦´ÂghwmBШźhI|VV|p] ¼èNä¶ÜBÖ¼L`¼bØæKVpoúNZÞÒKxpw|ÊEMnzEQIZZNBčÚFÜçmĩWĪñtÞĵÇñZ«uD±|ƏlǗw·±PmÍada CLǑkùó¡³Ï«QaċÏOÃ¥ÕđQȥċƭy³ÁA"]],"encodeOffsets":[[[123686,41445],[126019,40435],[124393,40128],[126117,39963],[125322,40140],[126686,40700],[126041,40374],[125584,40168],[125509,40217],[125453,40165],[125362,40214],[125280,40291],[125774,39997],[125976,40496],[125822,39993],[122731,40949]]]},"properties":{"cp":[123.429096,41.796767],"name":"辽宁","childNum":16}},{"id":"220000","geometry":{"type":"Polygon","coordinates":["@@ñr½ÉKāGÁ¤ia Éȹ`\\xs¬dĆkNnuNUwNx¶c¸|\\¢ GªóĄ~RãÖÎĢùđŴÕhQxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp]vbÍZuĂ{n^IüÀSÖ¦EvRÎûh@â[ƏÈô~FNr¯ôçR±HÑlĢ^¤¢OðætxsŒ]ÞÁTĠs¶¿âÆGW¾ìA¦·TѬè¥ÏÐJ¨¼ÒÖ¼ƦɄxÊ~StD@Ă¼Ŵ¡jlºWvÐzƦZвCH AxiukdGgetqmcÛ£Ozy¥cE}| ¾cZ k¿uŐã[oxGikfeäT@ SUwpiÚFM©£è^Ú`@v¶eňf heP¶täOlÃUgÞzŸU`l}ÔÆUvØ_Ō¬Öi^ĉi§²ÃB~¡ĈÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYxƘDVÇĺĿg¿cwÅ\\¹¥Yĭl¤OvLjM_a W`zļMž·\\swqÝSAqŚij¯°kRē°wx^ĐkǂÒ\\]nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°G³¼XÀ¤¹i´o¤ŃÈ`ÌDzÄUĞd\\iÖmÈBĤÜɲDEh LG¾ƀľ{WaYÍÈĢĘÔRîĐj}ÇccjoUb½{h§Ǿ{KƖµÎ÷GĄØŜçưÌs«lyiē«`å§H¥Ae^§GK}iã\\c]v©ģZmÃ|[M}ģTɟĵÂÂ`ÀçmFK¥ÚíÁbX³ÌQÒHof{]ept·GŋĜYünĎųVY^ydõkÅZW«WUa~U·SbwGçǑiW^qFuNĝ·EwUtW·Ýďæ©PuqEzwAVXRãQ`©GY YhcUGorBd}ģÉb¡·µMicF«Yƅ» é\\ɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ýL¡ûsT\\rke\\PnwAKy}ywdSefµ]UhĿD@mÿvaÙNSkCun cÿ`lWėVâ¦÷~^fÏ~vwHCį`xqTlW«ï¸skmßEGqd¯R ©Ý¯¯S\\cZ¹iűƏCuƍÓXoR}M^o£ R}oªUF uuXHlEÅÏ©¤ßgXþ¤D²ÄufàÀXXȱAc{Yw¬dvõ´KÊ£\\rµÄlidā]|DÂVH¹Þ®ÜWnCķ W§@\\¸~¤Vp¸póIO¢VOŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúv𼤠N°ąO¥«³[éǣű]°Õ\\ÚÊĝôîŇÔaâBYlďQ[ Ë[ïÒ¥RI|`j]P"],"encodeOffsets":[[126831,44503]]},"properties":{"cp":[125.3245,43.886841],"name":"吉林","childNum":1}},{"id":"230000","geometry":{"type":"MultiPolygon","coordinates":[["@@UµNÿ¥īèçHÍøƕ¶Lǽ|g¨|a¾pVidd~ÈiíďÓQġėÇZÎXb½|ſÃH½KFgɱCģÛÇAnjÕc[VĝDZÃËÇ_ £ń³pj£º¿»WH´¯U¸đĢmtĜyzzNN|g¸÷äűѱĉā~mq^[ǁÑďlw]¯xQĔ¯l°řĴrBÞTxr[tŽ¸ĻN_yX`biNKu P£kZĮ¦[ºxÆÀdhĹŀUÈƗCwáZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFć}¢A±Äj¨]ĊÕjŋ«×`VuÓÅ~_kŷVÝyhVkÄãPsOµfgeŇ µf@u_Ù ÙcªNªÙEojVxT@ãSefjlwH\\pŏäÀvlY½d{F~¦dyz¤PÜndsrhfHcvlwjF£G±DÏƥYyÏu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|C˜zxAè¥bfudTrFWÁ¹Am|ĔĕsķÆF´N}ć UÕ@Áijſmuçuð^ÊýowFzØÎĕNőǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°Uzouxe]} AyÈW¯ÌmKQ]Īºif¸ÄX|sZt|½ÚUÎ lk^p{f¤lºlÆW A²PVÜPHÊâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi`¶bXrBgxfv»uUi^v~J¬mVp´£´VWrnP½ì¢BX¬hðX¹^TjVriªjtŊÄmtPGx¸bgRsT`ZozÆO]ÒFôÒOÆŊvÅpcGêsx´DR{AEOr°x|íb³Wm~DVjºéNNËܲɶGxŷCSt}]ûōSmtuÇÃĕNāg»íT«u}ç½BĵÞʣ¥ëÊ¡MÛ³ãȅ¡ƋaǩÈÉQG¢·lG|tvgrrf«ptęŘnÅĢrI²¯LiØsPf_vĠdxM prʹL¤¤eËÀđKïÙVY§]Ióáĥ]ķK¥j|pŇ\\kzţ¦šnņäÔVĂîĪ¬|vW®l¤èØrxm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄĄ»ƢjȦOǺ¨ìSŖÆƬyQv`cwZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨSfm ĊƀP̎ēz©ĊÄÕÊmgÇsJ¥ƔŊśæÎÑqv¿íUOµªÂnĦÁ_½ä@êí £P}Ġ[@gġ}gɊ×ûÏWXá¢užƻÌsNͽƎÁ§čŐAēeL³àydl¦ĘVçŁpśdžĽĺſÊQíÜçÛġÔsĕ¬Ǹ¯YßċġHµ ¡eå`ļrĉŘóƢFìĎWøxÊkƈdƬv|I|·©NqńRŀ¤éeŊŀàŀU²ŕƀBQ£Ď}L¹Îk@©ĈuǰųǨÚ§ƈnTËÇéƟÊcfčŤ^XmHĊĕË«W·ċëx³ǔķÐċJāwİ_ĸȀ^ôWr°oú¬Ħ ŨK~ȰCĐ´Ƕ£fNÎèâw¢XnŮeÂÆĶ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®ØCÔ ŬGƠƦYĜĘÜƬDJg_ͥœ@čŅĻA¶¯@wÎqC½Ĉ»NăëKďÍQÙƫ[«ÃígßÔÇOÝáWñuZ¯ĥŕā¡ÑķJu¤E 寰WKɱ_d_}}vyõu¬ï¹ÓU±½@gÏ¿rýDg Cdµ°MFYxw¿CG£Rƛ½Õ{]L§{qqą¿BÇƻğëܭNJË|c²}Fµ}ÙRsÓpg±QNqǫŋRwŕnéÑÉK«SeYR ŋ@{¤SJ}D Ûǖ֍]gr¡µŷjqWÛham³~S«Ü[","@@ƨĶTLÇyqpÇÛqe{~oyen}s`qiXGù]Ëp½©lÉÁp]Þñ´FĂ^fäîºkàz¼BUv¬D"]],"encodeOffsets":[[[134456,44547],[127123,51780]]]},"properties":{"cp":[126.642464,45.756967],"name":"黑龙江","childNum":2}},{"id":"320000","geometry":{"type":"Polygon","coordinates":["@@Õg^vÁbnÀ`Jnĝ¬òM¶ĘTÖŒbe¦¦{¸ZâćNp©Hp|`mjhSEb\\afv`sz^lkljÄtg¤D¾X¿À|ĐiZȀåB·î}GL¢õcßjayBFµÏC^ĭcÙt¿sğH]j{s©HM¢QnDÀ©DaÜÞ·jgàiDbPufjDk`dPOîhw¡ĥ¥GP²ĐobºrYî¶aHŢ´ ]´rılw³r_{£DB_Ûdåuk|Ũ¯F Cºyr{XFye³Þċ¿ÂkĭB¿MvÛpm`rÚã@Ę¹hågËÖƿxnlč¶Åì½Ot¾dJlVJĂǀŞqvnO^JZż·Q}êÍÅmµÒ]ƍ¦Dq}¬R^èĂ´ŀĻĊIÔtIJyQŐĠMNtR®òLhĚs©»}OÓGZz¶A\\jĨFäOĤHYJvÞHNiÜaĎÉnFQlNM¤B´ĄNöɂtpŬdZÅglmuÇUšŞÚb¤uŃJŴu»¹ĄlȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Yrřl¥i`ã__¢ćSÅr[Çq^ùzWmOĈaŐÝɞï²ʯʊáĘijĒǭPħ͍ôƋÄÄÍīçÛɈǥ£ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ¡RLčiXyÅNïă¡¸iĔÏNÌķoıdōîåŤûHcs}~Ûwbù¹£¦ÓCtOPrE^ÒogĉIµÛÅʹK ¤½phMú`mR¸¦PƚgÉLRs`£¯ãhD¨|³¤C"],"encodeOffsets":[[121451,32518]]},"properties":{"cp":[118.767413,32.041544],"name":"江苏","childNum":1}},{"id":"330000","geometry":{"type":"MultiPolygon","coordinates":[["@@jX^n ","@@sfdM","@@qP\\xz[_i","@@o\\VzRZ}mECy","@@R¢FX}°[m]","@@Cb\\}","@@e|v\\laus","@@v~s{","@@QxÂF©}","@@¹nvÞs©m","@@rQgYIh","@@bi«ZX","@@p[}ILd","@@À¿|","@@¹dnb ","@@rS}[Kl","@@g~h}","@@FlCk","@@ůTG°ĄLHm°UF","@@OdRe","@@v[u\\","@@FjâL~wyoo~sµLZ","@@¬e¹aH","@@\\nÔ¡q]L³ë\\ÿ®QÌ","@@ÊA©]ª","@@Kxv{","@@@hlIk_","@@pWcrxp","@@Md|_iA","@@¢ X£½z\\ðpN","@@hlÜ[LykAvyfw^E ","@@fp¤MusH","@@®_ma~LÁ¬`","@@@°¡mÛGĕ¨§Ianá[ýƤjfæÐNäGp","@@iMt\\","@@Zc[b","@@X®±GrÆ°Zæĉm","@@Z~dOSo|A¿qZv","@@@`EN£p","@@|s","@@@nDi","@@n a£¾uYL¯Qª mĉÅdMgÇjcº«ę¬K´B«Âącoċ\\xK`cįŧ«®á[~ıxu·ÅKsËÉc¢Ù\\ĭƛëbf¹ģSĜkáƉÔĈZB{aMµfzʼnfÓÔŹŁƋǝÊĉ{ğč±g³ne{çií´S¬\\ßðK¦w\\iqªĭiAuAµ_W¥ƣO\\lċĢttC¨£t`PZäuXßBsĻyekOđġĵHuXBµ]×\\°®¬F¢¾pµ¼kŘó¬Wät¸|@L¨¸µrºù³Ù~§WIZW®±Ð¨ÒÉx`²pĜrOògtÁZ{üÙ[|ûKwsPlU[}¦Rvn`hsª^nQ´ĘRWb_ rtČFIÖkĦPJ¶ÖÀÖJĈĄTĚòC ²@Pú Øz©PCÈÚĒ±hŖl¬â~nm¨f©iļ«mntqÒTÜÄjL®EÌFª²iÊxبIÈhhst[Ôx}dtüGæţŔïĬaĸpMËÐjē¢·ðĄÆMzjWKĎ¢Q¶À_ê_@ıi«pZgf¤Nrq]§ĂN®«H±yƳí¾×ŊďŀĐÏŴǝĂíÀBŖÕªÁŐTFqĉ¯³ËCĕģi¨hÜ·ñt»¯Ï","@@ºwZRkĕWK "]],"encodeOffsets":[[[125785,31436],[125729,31431],[125513,31380],[125329,30690],[125223,30438],[125115,30114],[124815,29155],[124419,28746],[124095,28635],[124005,28609],[125000,30713],[125111,30698],[125078,30682],[125150,30684],[124014,28103],[125008,31331],[125411,31468],[125329,31479],[125369,31139],[125626,30916],[125417,30956],[125254,30976],[125199,30997],[125095,31058],[125083,30915],[124885,31015],[125218,30798],[124867,30838],[124755,30788],[124802,30809],[125267,30657],[125218,30578],[125200,30562],[125192,30787],[124968,30474],[125167,30396],[125115,30363],[124955,29879],[124714,29781],[124762,29462],[124325,28754],[124863,30077],[125366,31477]]]},"properties":{"cp":[120.153576,30.287459],"name":"浙江","childNum":43}},{"id":"340000","geometry":{"type":"MultiPolygon","coordinates":[["@@^iuLV\\","@@e©Edh","@@´CE¶zAXêeödK¡~H¸íæAȽd{ďÅÀ½W®£ChÃsikkly]_teu[bFaTign{]GqªoĈMYá|·¥f¥őaSÕėNµñĞ«Im_m¿Âa]uĜp Z_§{Cäg¤°r[_YjÆOdý[I[á·¥Q_nùgL¾mzˆDÜƶĊJhpc¹O]iŠ]¥ jtsggDÑ¡w×jÉ©±EFËKiÛÃÕYv sm¬njĻª§emná}k«ŕgđ²ÙDÇ¤í¡ªOy×Où±@DñSęćăÕIÕ¿IµĥOlJÕÍRÍ|JìĻÒåyķrĕq§ÄĩsWÆßF¶X®¿mw RIÞfßoG³¾©uyHį{Ɓħ¯AFnuP ÍÔzVdàôº^Ðæd´oG¤{S¬ćxã}ŧ×Kǥĩ«ÕOEзÖdÖsƘѨ[Û^Xr¢¼§xvÄƵ`K§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē ßúLÃÃ_ÈÏ|]ÂÏHlg`ben¾¢pUh~ƴĖ¶_r sĄ~cƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³ ]u}f ïQl{skloNdjäËzDvčoQďHI¦rbrHĖ~BmlNRaĥTX\\{fÁKÁ®TLÂÄMtÊgĀDĄXƔvDcÎJbt[¤D@®hh~kt°ǾzÖ@¾ªdbYhüóV´ŮŒ¨Üc±r@J|àuYÇÔG·ĚąĐlŪÚpSJ¨ĸLvÞcPæķŨ®mÐálsgd×mQ¨ųÆ©Þ¤IÎs°KZpĄ|XwWdϵmkǀwÌÕæhºgBĝâqÙĊzÖgņtÀÁĂÆáhEz|WzqD¹°Eŧl{ævÜcA`¤C`|´qxIJkq^³³GšµbíZ ¹qpa±ď OH¦Ħx¢gPícOl_iCveaOjCh߸iÝbÛªCC¿mRV§¢A|tbkĜEÀtîm^g´fÄ"]],"encodeOffsets":[[[121722,32278],[119475,30423],[121606,33646]]]},"properties":{"cp":[117.283042,31.86119],"name":"安徽","childNum":3}},{"id":"350000","geometry":{"type":"MultiPolygon","coordinates":[["@@zht´}[","@@aj^~ĆGå","@@edH se","@@@vPGsyQ","@@sBzddW[O","@@S¨Qy","@@NVucW","@@qptB@q","@@¸[iu","@@Q\\pD[_","@@jSwUappI","@@eXª~","@@AjvFoo","@@fT_Çí\\v|ba¦jZÆy|®","@@IjLg","@@wJIx«¼AoNe{M¥","@@K±¡ÓČ~N¾","@@k¡¹Eh~c®uDqZì¡I~Māe£bN¨gZý¡a±Öcp©PhI¢Qq ÇGj|¥U g[Ky¬ŏv@OptÉEF\\@ åA¬V{XģĐBy cpě ¼³Ăp·¤¥ohqqÚ¡ŅLs^á§qlÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ßėuĕeûÒiÁŧS[¡Uûŗ½ùěcݧSùĩąSWó«íęACµeRåǃRCÒÇZÍ¢ź±^dlstjD¸ZpuÔâÃH¾oLUêÃÔjjēò´ĄWƛ ^Ñ¥Ħ@ÇòmOw¡õyJyD}¢ďÑÈġfZda©º²z£NjD°Ötj¶¬ZSÎ~¾c°¶ÐmxO¸¢Pl´SL|¥AȪĖMņIJg®áIJČĒü` QF¬h|ĂJ@zµ |ê³È ¸UÖŬŬÀCtrĸr]ðM¤ĶIJHtÏ AĬkvsq^aÎbvdfÊòSD´Z^xPsĂrvƞŀjJd×ŘÉ ®AΦĤdxĆqAZRÀMźnĊ»İÐZ YXæJyĊ²·¶q§·K@·{sXãô«lŗ¶»o½E¡«¢±¨Y®Ø¶^AvWĶGĒĢPlzfļtàAvWYãO_¤sD§ssČġ[kƤPX¦`¶®BBvĪjv©jx[L¥àï[F ¼ÍË»ğV`«Ip}ccÅĥZEãoP ´B@D¸m±z«Ƴ¿å³BRضWlâþäą`]Z£Tc ĹGµ¶Hm@_©k¾xĨôȉðX«½đCIbćqK³ÁÄš¬OAwã»aLʼnËĥW[ÂGIÂNxij¤D¢îĎÎB§°_JGs¥E@ ¤uć PåcuMuw¢BI¿]zG¹guĮI"]],"encodeOffsets":[[[123250,27563],[122541,27268],[123020,27189],[122916,27125],[122887,26845],[122808,26762],[122568,25912],[122778,26197],[122515,26757],[122816,26587],[123388,27005],[122450,26243],[122578,25962],[121255,25103],[120987,24903],[122339,25802],[121042,25093],[122439,26024]]]},"properties":{"cp":[119.306239,26.075302],"name":"福建","childNum":18}},{"id":"360000","geometry":{"type":"Polygon","coordinates":["@@ÖP¬ǦĪØLŨä~Ĉw«|TH£pc³Ïå¹]ĉđxe{ÎÓvOEm°BƂĨİ|Gvz½ª´HàpeJÝQxnÀWEµàXÅĪt¨ÃĖrÄwÀFÎ|Ă¡WÕ¸cf¥XaęST±m[r«_gmQu~¥V\\OkxtL E¢Ú^~ýØkbēqoě±_Êw§Ñ²ÏƟė¼mĉŹ¿NQ YBąrwģcÍ¥BŗÊcØiIƝĿuqtāwO]³YCñTeÉcaubÍ]trluī BÐGsĵıN£ï^ķqsq¿DūūVÕ·´Ç{éĈýÿOER_đûIċâJhŅıNȩĕB ¦K{Tk³¡OP·wnµÏd¯}½TÍ«YiµÕsC¯iM¤¦¯P|ÿUHvhe¥oFTuõ\\OSsMòđƇiaºćXĊĵà·çhƃ÷Ç{ígu^đgm[ÙxiIN¶Õ»lđÕwZSÆv©_ÈëJbVkĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B±ÌKyñ`w²¹· `gsÙfIěxŕeykpudjuTfb·hh¿Jd[\\LáƔĨƐAĈepÀÂMD~ņªe^\\^§ý©j×cZبzdÒa¶lÒJìõ`oz÷@¤u޸´ôęöY¼HČƶajlÞƩ¥éZ[|h}^U ¥pĄžƦO lt¸Æ Q\\aÆ|CnÂOjtĚĤdÈF`¶@Ðë ¦ōÒ¨SêvHĢÛ@[Æ QoxHW[ŰîÀt¦DŽ~NĠ¢lĄtZoCƞÔºCxrpČNpj¢{f_Y`_eq®Aot`@oDXfkp¨|s¬\\DÄSfè©Hn¬ ^DhÆyøJhØxĢĀLÊƠPżċĄwĮ¶"],"encodeOffsets":[[118923,30536]]},"properties":{"cp":[115.892151,28.676493],"name":"江西","childNum":1}},{"id":"370000","geometry":{"type":"MultiPolygon","coordinates":[["@@Xjd]mE","@@itnq","@@Dl@k","@@TGw","@@K¬U","@@Wd`c","@@PtMs","@@LnXlc","@@ppVu]Qn","@@cdzAU_","@@udRhnCE ","@@oIpP","@@M{ĿčwbxƨîKÎMĮ]ZF½Y]â£ph¶¨râøÀÎǨ¤^ºÄGz~grĚĜlĞÆLĆdž¢Îo¦cvKbgr°WhmZp L]LºcUÆnżĤÌĒbAnrOA´ȊcÀbƦUØrĆUÜøĬƞŶǬĴóò_Ä«ªdÎÉnb²ĦhņBĖįĦåXćì@L¯´ywƕCéõė ƿ¸lµZæyj|BíÂKNNnoƈfÈMZwnŐNàúÄsTJULîVjǎ¾ĒØDz²XPn±ŴPè¸ŔLƔÜƺ_TüÃĤBBċÈöA´faM¨{«M`¶d¡ôÖ°mȰBÔjj´PM|c^d¤u¤Û´ä«ƢfPk¶Môl]Lb}su^ke{lC MrDÇ]NÑFsmoõľHyGă{{çrnÓEƕZGª¹Fj¢ÿ©}ÌCǷë¡ąuhÛ¡^KxC`C\\bÅxì²ĝÝ¿_NīCȽĿåB¥¢·IŖÕy\\¹kxãČáKµË¤ÁçFQ¡KtŵƋ]CgÏAùSedcÚźuYfyMmhUWpSyGwMPqŀÁ¼zK¶GY§Ë@´śÇµƕBm@IogZ¯uTMx}CVKï{éƵP_K«pÛÙqċtkkù]gTğwoɁsMõ³ăAN£MRkmEÊčÛbMjÝGu IZGPģãħE[iµBEuDPÔ~ª¼ęt]ûG§¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~Ż¸YI] PumŝrƿIā[xedzL¯v¯s¬ÁY ~} ťuŁgƋpÝĄ_ņī¶ÏSR´ÁP~¿Cyċßdwk´SsX|t`Ä ÈðAªìÎT°¦Dda^lĎDĶÚY°`ĪŴǒàŠv\\ebZHŖR¬ŢƱùęOÑM³FÛaj"]],"encodeOffsets":[[[123806,39303],[123821,39266],[123742,39256],[123702,39203],[123649,39066],[123847,38933],[123580,38839],[123894,37288],[123043,36624],[123344,38676],[123522,38857],[123628,38858],[118267,36772]]]},"properties":{"cp":[117.000923,36.675807],"name":"山东","childNum":13}},{"id":"410000","geometry":{"type":"MultiPolygon","coordinates":[["@@dXD}~Hgq~ÔN~zkĘHVsDzßjŬŢ`Pûàl¢\\ÀEhİgÞē X¼`khÍLùµP³swIÓzeŠĠð´E®ÚPtºIŊʺL«šŕQGYfa[şußǑĩų_Z¯ĵÙčC]kbc¥CS¯ëÍB©ïÇÃ_{sWTt³xlàcČzÀD}ÂOQ³ÐTĬµƑпŸghłŦv~}ÂZ«¤lPÇ£ªÝŴÅR§ØnhctâknÏľŹUÓÝdKuķI§oTũÙďkęĆH¸Ó\\Ä¿PcnS{wBIvÉĽ[GqµuŇôYgûZca©@½Õǽys¯}lgg@C\\£asIdÍuCQñ[L±ęk·ţb¨©kK»KC²òGKmĨS`UQnk}AGēsqaJ¥ĐGRĎpCuÌy ã iMcplk|tRkðev~^´¦ÜSí¿_iyjI|ȑ|¿_»d}q^{Ƈdă}tqµ`ŷ飩V¡om½ZÙÏÁRD|JOÈpÀRsI{ùÓjuµ{t}uËRivGçJFjµåkWê´MÂHewixGw½Yŷpµú³XU½ġyłåkÚwZX·l¢Á¢KzOÎÎjc¼htoDHr |J½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ Ť]MÛfaQpě±ǽ¾]uFu÷nčįADp}AjmcEÇaª³o³ÆÍSƇĈÙDIzçñİ^KNiÞñ[aA²zzÌ÷D|[íijgfÕÞd®|`Ć~oĠƑô³ŊD×°¯Csø«ìUMhTº¨¸ǝêWÔDruÂÇZ£ĆPZW~ØØv¬gèÂÒw¦X¤Ā´oŬ¬²Ês~]®tªapŎJ¨Öº_ŔfŐ\\Đ\\Ĝu~m²Ƹ¸fWĦrƔ}Î^gjdfÔ¡J}\\n C¦þWxªJRÔŠu¬ĨĨmFdM{\\d\\YÊ¢ú@@¦ª²SÜsC}fNècbpRmlØ^gd¢aÒ¢CZZxvƶN¿¢T@uC¬^ĊðÄn|lIlXhun[","@@hzUq"]],"encodeOffsets":[[[116744,37216],[116480,33048]]]},"properties":{"cp":[113.665412,34.757975],"name":"河南","childNum":2}},{"id":"420000","geometry":{"type":"MultiPolygon","coordinates":[["@@ASd","@@ls{d","@@¾«}{ra®pîÃ\\{øCËyyB±b\\òÝjKL ]ĎĽÌJyÚCƈćÎT´Å´pb©ÈdFin~BCo°BĎÃømv®E^vǾ½Ĝ²RobÜeN^ĺ£R¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I¾®I{GqpCgyl{£ÍÍyPL¡¡¸kWxYlÙæŁĢz¾V´W¶ùŸo¾ZHxjwfxGNÁ³Xéæl¶EièIH ujÌQ~v|sv¶Ôi|ú¢FhQsğ¦SiŠBgÐE^ÁÐ{čnOÂÈUÎóĔÊēIJ}Z³½Mŧïeyp·uk³DsѨL¶_Åuèw»¡WqÜ]\\Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟOKÉġÿ×wg÷IÅzCg]m«ªGeçÃTC«[t§{loWeC@ps_Bprf_``Z|ei¡oċMqow¹DƝÓDYpûsYkıǃ}s¥ç³[§cY§HK«Qy]¢wwö¸ïx¼ņ¾Xv®ÇÀµRĠÐHM±cÏdƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy ¿³x¯No|¹HÏÛmjúË~TuęjCöAwě¬Rđl¯ ÑbŇTĿ_[IčĄʿnM¦ğ\\É[T·k¹©oĕ@A¾wya¥Y\\¥Âaz¯ãÁ¡k¥ne£ÛwE©Êō¶˓uoj_U¡cF¹[WvP©whuÕyBF`RqJUw\\i¡{jEPïÿ½fć QÑÀQ{°fLÔ~wXgītêݾĺHd³fJd]HJ² EoU¥HhwQsƐ»Xmg±çve]DmÍPoCc¾_hhøYrŊU¶eD°Č_N~øĹĚ·`z]Äþp¼ äÌQv\\rCé¾TnkžŐÚÜa¼ÝƆĢ¶Ûo d ĔňТJqPb ¾|J¾fXƐîĨ_Z¯À}úƲN_ĒÄ^ĈaŐyp»CÇÄKñL³ġM²wrIÒŭxjb[n«øæà ^²h¯ÚŐªÞ¸Y²ĒVø}Ā^İ´LÚm¥ÀJÞ{JVųÞŃx×sxxƈē ģMřÚðòIfĊŒ\\Ʈ±ŒdʧĘDvČ_Àæ~Dċ´A®µ¨ØLV¦êHÒ¤"]],"encodeOffsets":[[[113712,34000],[115612,30507],[113649,34054]]]},"properties":{"cp":[114.298572,30.584355],"name":"湖北","childNum":3}},{"id":"430000","geometry":{"type":"MultiPolygon","coordinates":[["@@nFZw","@@ãÆá½ÔXrCO ËRïÿĩTooQyÓ[ŅBE¬ÎÓXaį§Ã¸G °ITxpúxÚij¥ÏĢ¾edÄ©ĸG àGhM¤Â_U}Ċ}¢pczfþg¤ÇôAV","@@ȴÚĖÁĐiOĜ«BxDõĚivSÌ}iùÜnкG{p°M°yÂÒzJ²Ì ÂcXëöüiáÿñőФùTz²CȆȸǎŪƑÐc°dPÎğ˶[Ƚu¯½WM¡ÉB·rínZÒ `¨GA¾\\pēXhÃRCüWGġu Té§ŎÑ©êLM³}_EÇģc®ęisÁPDmÅ{b[RÅs·kPŽƥóRoOV~]{g\\êYƪ¦kÝbiċƵGZ»Ěõ ó·³vŝ£ø@pyö_ëIkѵbcѧy ×dYتiþUjŅ³C}ÁN»hĻħƏâƓKA·³CQ±µ§¿AUƑ¹AtćOwD]JUÖgk¯b£ylZFËѱH}EbóľA¡»Ku¦·³åş¥ùBD^{ÌC´¦ŷJ£^[ª¿ğ|ƅ N skóā¹¿ï]ă~÷O§@Vm¡Qđ¦¢Ĥ{ºjÔª¥nf´~Õo×ÛąGû¥cÑ[Z¶ŨĪ²SÊǔƐƀAÚŌ¦Qؼrŭ«}NÏürʬmjr@ĘrTW SsdHzƓ^ÇÂyUi¯DÅYlŹu{hT}mĉ¹¥ěDÿë©ıÓ[Oº£¥ótł¹MÕƪ`P DiÛU¾ÅâìUñBÈ£ýhedy¡oċ`pfmjP~kZa ZsÐd°wj§@Ĵ®w~^kÀÅKvNmX\\¨aŃqvíó¿F¤¡@ũÑVw}S@j}¾«pĂrªg àÀ²NJ¶¶Dô K|^ª°LX¾ŴäPĪ±£EXd^¶IJÞÜ~u¸ǔMRhsR e`ÄofIÔ\\Ø ićymnú¨cj ¢»GČìƊÿШXeĈĀ¾Oð Fi ¢|[jVxrIQ_EzAN¦zLU`cªxOTu RLĪpUĪȴ^ŎµªÉFx Üf¤ºgIJèy°Áb[¦Zb¦z½xBĖ@ªpºjS´rVźOd©ʪiĎăJP`"]],"encodeOffsets":[[[115640,30489],[112577,27316],[114113,30649]]]},"properties":{"cp":[112.982279,28.19409],"name":"湖南","childNum":3}},{"id":"440000","geometry":{"type":"MultiPolygon","coordinates":[["@@QdAsa","@@lxDRm","@@sbhNLo","@@Ă ý","@@WltOY[","@@Kr]S","@@e~AS}","@@I|Mym","@@Û³LS²Q","@@nvºBë¥cÕº","@@zdÛJm","@@°³","@@a yAª¸ËJIxØ@ĀHÉÕZofo o","@@sŗÃÔėAƁZÄ ~°ČPºb","@@¶ÝÌvmĞh¹Ĺ","@@HdSjĒ¢D}war u«ZqadY{K","@@el\\LqqO","@@~rMmX","@@f^E","@@øPªoj÷ÍÝħXČx°Q¨ıXJp","@@gÇƳmxatfu","@@EÆC½","@@¸B_¶ekWvSivc}p}Ăº¾NĎyj¦Èm th_®Ä}»âUzL˲Aā¡ßH©Ùñ}wkNÕ¹ÇO½¿£ēUlaUìIǪ`uTÅxYĒÖ¼kÖµMjJÚwn\\hĒv]îh|ÈƄøèg¸Ķß ĉĈWb¹ƀdéĘNTtP[öSvrCZaGubo´ŖÒÇĐ~¡zCI özx¢PnÈñ @ĥÒ¦]ƜX³ăĔñiiÄÓVépKG½ÄÓávYoC·sitiaÀyŧΡÈYDÑům}ý|m[węõĉZÅxUO}÷N¹³ĉo_qtăqwµŁYÙǝŕ¹tïÛUïmRCº ĭ|µÕÊK½Rē ó]GªęAxNqSF|ām¡diď×YïYWªʼnOeÚtĐ«zđ¹T āúEáÎÁWwíHcòßÎſ¿Çdğ·ùT×Çūʄ¡XgWÀLJğ·¿ÃOj YÇ÷Sğ³kzőõmĝ[³¡VÙæÅöM̳¹pÁaËýý©D©ÜJŹƕģGą¤{Ùū ÇO²«BƱéAÒĥ¡«BhlmtÃPµyU¯ucd·w_bŝcīímGOGBȅŹãĻFŷŽŕ@Óoo¿ē±ß}}ÓF÷tIJWÈCőâUâǙIğʼn©IijE× Á³AĥDĈ±ÌÜÓĨ£L]ĈÙƺZǾĆĖMĸĤfÎĵlŨnÈĐtFFĤêk¶^k°f¶g}®Faf`vXŲxl¦ÔÁ²¬Ð¦pqÊ̲iXØRDÎ}Ä@ZĠsx®AR~®ETtĄZƈfŠŠHâÒÐAµ\\S¸^wĖkRzalŜ|E¨ÈNĀňZTpBh£\\ĎƀuXĖtKL¶G|»ĺEļĞ~ÜĢÛĊrOÙîvd]n¬VÊĜ°RÖpMƀ¬HbwEÀ©\\ ¤]ŸI®¥D³|Ë]CúAŠ¦ æ´¥¸Lv¼¢ĽBaôF~®²GÌÒEYzk¤°ahlVÕI^CxĈPsBƒºVÀB¶¨R²´D","@@OR"]],"encodeOffsets":[[[117381,22988],[116552,22934],[116790,22617],[116973,22545],[116444,22536],[116931,22515],[116496,22490],[116453,22449],[113301,21439],[118726,21604],[118709,21486],[113210,20816],[115482,22082],[113171,21585],[113199,21590],[115232,22102],[115739,22373],[115134,22184],[113056,21175],[119573,21271],[119957,24020],[115859,22356],[116680,26053],[116561,22649]]]},"properties":{"cp":[113.280637,23.125178],"name":"广东","childNum":24}},{"id":"450000","geometry":{"type":"MultiPolygon","coordinates":[["@@H TI¡U","@@Ɣ_LÊFZg čPkini«qÇczÍY®¬Ů»qR×ō©DÕ§ƙǃŵTÉĩ±ıdÑnYYIJvNĆĆØÜ Öp}e³¦m©iÓ|¹ħņ|ª¦QF¢Â¬ʖovg¿em^ucäāmÇÖåB¡Õçĝ}FĻ¼Ĺ{µHKsLSđƃrč¤[AgoSŇYMÿ§Ç{FśbkylQxĕ]T·¶[B ÑÏGáşşƇe ăYSsFQ}BwtYğÃ@~ CÍQ ×Wj˱rÉ¥oÏ ±«ÓÂ¥kwWűue_bE~µh¯ecl¯Ïr¯EģJğ}w³Ƈē`ãògK_ÛsUʝćğ¶höO¤Ǜn³c`¡yię[ďĵűMę§]XÎ_íÛ]éÛUćİÕBƣ± dy¹T^dûÅÑŦ·PĻþÙ`K¦ ¢ÍeĥR¿³£[~äu¼dltW¸oRM¢ď\\z}Æzdvň{ÎXF¶°Â_ÒÂÏL©ÖTmu¼ãlīkiqéfA·Êµ\\őDc¥ÝFyÔćcűH_hLÜêĺШc}rn`½Ì@¸¶ªVLhŒ\\Ţĺk~Ġið°|gtTĭĸ^xvKVGréAébUuMJVÃO¡ qĂXËSģãlýà_juYÛÒBG^éÖ¶§EGÅzěƯ¤EkN[kdåucé¬dnYpAyČ{`]þ±X\\ÞÈk¡ĬjàhÂƄ¢Hè ŔâªLĒ^Öm¶ħĊAǦė¸zÚGn£¾rªŀÜt¬@ÖÚSx~øOŒŶÐÂæȠ\\ÈÜObĖw^oÞLf¬°bI lTØBÌF£Ć¹gñĤaYt¿¤VSñK¸¤nM¼JE±½¸ñoÜCƆæĪ^ĚQÖ¦^f´QüÜÊz¯lzUĺš@ìp¶n]sxtx¶@~ÒĂJb©gk{°~c°`Ô¬rV\\la¼¤ôá`¯¹LCÆbxEræOv[H[~|aB£ÖsºdAĐzNÂðsÞÆ Ĥªbab`ho¡³F«èVZs\\\\ÔRzpp®SĪº¨ÖºN ijd`a¦¤F³¢@`¢ĨĀìhYvlĆº¦Ċ~nS|gźv^kGÆÀè·"]],"encodeOffsets":[[[111707,21520],[113706,26955]]]},"properties":{"cp":[108.320004,22.82402],"name":"广西","childNum":2}},{"id":"460000","geometry":{"type":"Polygon","coordinates":["@@¦Ŝil¢XƦƞòïè§ŞCêɕrŧůÇąĻõ·ĉ³œ̅kÇm@ċȧŧĥĽʉƅſȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀоjNðĀÒRZdžzÐĊ¢DÀɘZ"],"encodeOffsets":[[112750,20508]]},"properties":{"cp":[110.33119,20.031971],"name":"海南","childNum":1}},{"id":"510000","geometry":{"type":"MultiPolygon","coordinates":[["@@LqSn","@@ĆOìÛÐ@ĞǔNY{¤Á§d i´ezÝúØãwIþËQǦÃqÉSJ»ĂéʔõÔƁİlƞ¹§ĬqtÀƄmÀêErĒtD®ċæcQE®³^ĭ¥©l}äQtoŖÜqÆkµªÔĻĴ¡@Ċ°B²Èw^^RsºTĀ£ŚæQPJvÄz^Đ¹Æ¯fLà´GC²dtĀRt¼¤ĦOðğfÔðDŨŁĞƘïPÈ®âbMüÀXZ ¸£@Å»»QÉ]dsÖ×_Í_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|YÔZśÎs´xº±Uñt|OĩĠºNbgþJy^dÂY Į]Řz¦gC³R`Āz¢Aj¸CL¤RÆ»@Ŏk\\Ç´£YW}z@Z}öoû¶]´^NÒ}èNªPÍy¹`S°´ATeVamdUĐwʄvĮÕ\\uÆŗ¨Yp¹àZÂmWh{á}WØǍÉüwga§ßAYrÅÂQĀÕ¬LŐý®Xøxª½Ű¦¦[þ`ÜUÖ´òrÙŠ°²ÄkijnDX{U~ET{ļº¦PZcjF²Ė@pg¨B{u¨ŦyhoÚD®¯¢ WòàFΤ¨GDäz¦kŮPġqË¥À]eâÚ´ªKxīPÖ|æ[xäJÞĥsNÖ½I¬nĨY´®ÐƐmDŝuäđđEb ee_v¡}ìęNJē}qÉåT¯µRs¡M@}ůaa¯wvƉåZw\\Z{åû`[±oiJDŦ]ĕãïrG réÏ·~ąSfy×Í·ºſƽĵȁŗūmHQ¡Y¡®ÁÃ×t«T¤JJJyJÈ`Ohߦ¡uËhIyCjmÿw ZG TiSsOB²fNmsPa{M{õE^Hj}gYpaeu¯oáwHjÁ½M¡pMuåmni{fk\\oÎqCwEZ¼KĝAy{m÷LwO×SimRI¯rKõBS«sFe]fµ¢óY_ÆPRcue°Cbo×bd£ŌIHgtrnyPt¦foaXďxlBowz_{ÊéWiêEGhܸºuFĈIxf®Y½ĀǙ]¤EyF²ċw¸¿@g¢§RGv»áW`ÃĵJwi]t¥wO½a[×]`ÃiüL¦LabbTÀåc}ÍhÆh®BHî|îºÉk¤Sy£ia©taį·Ɖ`ō¥UhO ĝLk}©Fos´JmµlŁu ønÑJWΪYÀïAetTŅÓGË«bo{ıwodƟ½OġܵxàNÖ¾P²§HKv¾]|BÆåoZ`¡Ø`ÀmºĠ~ÌЧnÇ ¿¤]wğ@srğu~Io[é±¹ ¿ſđÓ@qg¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@áťsZÏÅĭƋěpwDóÖáŻneQËq·GCœýS]x·ýq³OÕ¶Qzßti{řáÍÇWŝŭñzÇWpç¿JXĩè½cFÂLiVjx}\\NŇĖ¥GeJA¼ÄHfÈu~¸Æ«dE³ÉMA|bÒ ćhG¬CMõƤąAvüVéŀ_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»ÕZ³ġqDoy`L¬gdp°şp¦ėìÅĮZ°Iähzĵf²å ĚÑKpIN|Ñz]ń ·FU×é»R³MÉ»GM«kiér}Ã`¹ăÞmÈnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ þTº·àUȞÏʦ¶I«dĽĢdĬ¿»Ĕ×h\\c¬ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvwxBèĻĒ©Ĉt@Ğû¸£B¯¨ˋäßkķ½ªôNÔ~t¼Ŵu^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ®Z´ğ~Sn|ªWÚ©òzPOȸbð¢|øĞA"]],"encodeOffsets":[[[108815,30935],[100197,35028]]]},"properties":{"cp":[104.065735,30.659462],"name":"四川","childNum":2}},{"id":"520000","geometry":{"type":"MultiPolygon","coordinates":[["@@G\\lY£cj","@@q|mc¯vÏV","@@hÑ£IsNgßHHªķÃh_¹¡ĝħń¦uÙùgS¯JH|sÝÅtÁïyMDč»eÕtA¤{b\\}G®u\\åPFqwÅaD K°ºâ_£ùbµmÁÛĹM[q|hlaªāI}ѵ@swtwm^oµD鼊yVky°ÉûÛR ³e¥]RÕěħ[ƅåÛDpJiVÂF²I »mN·£LbÒYbWsÀbpkiTZĄă¶Hq` ĥ_J¯ae«KpÝx]aĕÛPÇȟ[ÁåŵÏő÷Pw}TÙ@Õs«ĿÛq©½m¤ÙH·yǥĘĉBµĨÕnđ]K©œáG级ÕßgǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊw¶øV¤w²Ĉ]ÊKx|`ź¦ÂÈdrcÈbe¸`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pĐ`oÒh¶pa^ÓĔ}D»^Xy`d[Kv JPhèhCrĂĚÂ^Êƌ wZLĠ£ÁbrzOIlMMĪŐžËr×ÎeŦtw|¢mKjSǘňĂStÎŦEtqFT¾E쬬ôxÌO¢ K³ŀºäYPVgŎ¦Ŋm޼VZwVlz¤ £Tl®ctĽÚó{GAÇge~Îd¿æaSba¥KKûj®_Ä^\\ؾbP®¦x^sxjĶI_Ä Xâ¼Hu¨Qh¡À@Ëô}±GNìĎlT¸ `V~R°tbÕĊ`¸úÛtÏFDu[MfqGH·¥yAztMFe|R_GkChZeÚ°tov`xbDnÐ{E}ZèxNEÞREn[Pv@{~rĆAB§EO¿|UZ~ìUf¨J²ĂÝÆsªB`s¶fvö¦Õ~dÔq¨¸º»uù[[§´sb¤¢zþF¢Æ ÀhÂW\\ıËIÝo±ĭŠ£þÊs}¡R]ěDg´VG¢j±®èºÃmpU[Á뺰rÜbNu¸}º¼`niºÔXĄ¤¼ÔdaµÁ_à ftQQgR·Ǔv}Ý×ĵ]µWc¤F²OĩųãW½¯K© ]{LóµCIµ±Mß¿h©āq¬o½~@i~TUxð´ĐhwÀEîôuĶb[§nWuMÆJl½]vuıµb"]],"encodeOffsets":[[[112158,27383],[112105,27474],[112095,27476]]]},"properties":{"cp":[106.713478,26.578343],"name":"贵州","childNum":3}},{"id":"530000","geometry":{"type":"Polygon","coordinates":["@@[ùx½}ÑRHYīĺûsÍniEoã½Ya²ė{c¬ĝgĂsAØÅwďõzFjw}«Dx¿}Uũlê@HÅF¨ÇoJ´Ónũuą¡Ã¢pÒÅØ TF²xa²ËXcÊlHîAßËŁkŻƑŷÉ©hWæßUËs¡¦}teèƶStÇÇ}Fd£jĈZĆƤTč\\D}O÷£U§~ŃGåŃDĝ¸Tsd¶¶Bª¤u¢ŌĎo~t¾ÍŶÒtD¦ÚiôözØX²ghįh½Û±¯ÿm·zR¦Ɵ`ªŊÃh¢rOÔ´£Ym¼èêf¯ŪĽncÚbw\\zlvWªâ ¦gmĿBĹ£¢ƹřbĥkǫßeeZkÙIKueT»sVesbaĕ ¶®dNĄÄpªy¼³BE®lGŭCǶwêżĔÂepÍÀQƞpC¼ŲÈAÎô¶RäQ^Øu¬°_Èôc´¹ò¨P΢hlϦ´ĦÆ´sâÇŲPnÊD^¯°Upv}®BP̪jǬxSöwlfòªvqĸ|`HviļndĜĆhňem·FyÞqóSį¯³X_ĞçêtryvL¤§z¦c¦¥jnŞklD¤øz½ĜàĂŧMÅ|áƆàÊcðÂFÜáŢ¥\\\\ºİøÒÐJĴîD¦zK²ǏÎEh~CDhMn^ÌöÄ©ČZÀaüfɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~ÄqêljN¬¼HÊNQ´ê¼VظE^ŃÒyM{JLoÒęæe±Ķygã¯JYÆĭĘëo¥Šo¯hcK«z_prC´ĢÖY¼ v¸¢RÅW³Â§fǸYi³xR´ďUË`êĿUûuĆBƣöNDH«ĈgÑaB{ÊNF´¬c·Åv}eÇÃGB»If¦HňĕM ~[iwjUÁKE¾dĪçWIèÀoÈXòyŞŮÈXâÎŚj|àsRyµÖPr´þ ¸^wþTDŔHr¸RÌmfżÕâCôoxĜƌÆĮÐYtâŦÔ@]ÈǮƒ\\Ī¼Ä£UsȯLbîƲŚºyhr@ĒÔƀÀ²º\\êpJ}ĠvqtĠ@^xÀ£È¨mËÏğ}n¹_¿¢×Y_æpÅA^{½Lu¨GO±Õ½ßM¶wÁĢÛPƢ¼pcIJx|ap̬HÐŊSfsðBZ¿©XÏÒKk÷Eû¿S rEFsÕūkóVǥʼniTL¡n{uxţÏhôŝ¬ğōNNJkyPaqÂğ¤K®YxÉƋÁ]āęDqçgOgILu\\_gz]W¼~CÔē]bµogpÑ_oď`´³Țkl`IªºÎȄqÔþ»E³ĎSJ»_f·adÇqÇc¥Á_Źw{L^ɱćxU£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣGË÷k°_^ý|_zċBZocmø¯hhcæ\\lMFlư£ĜÆyHF¨µêÕ]HA àÓ^it `þßäkĤÎT~Wlÿ¨ÔPzUCNVv [jâôDôď[}z¿msSh¯{jïğl}šĹ[őgK©U·µË@¾m_~q¡f¹ ÅË^»f³ø}Q¡Ö˳gͱ^Ç \\ëÃA_¿bWÏ[¶ƛé£F{īZgm@|kHǭƁć¦UĔť×ëǟ eċ¼ȡȘÏíBÉ£āĘPªij¶ʼnÿy©nď£G¹¡I±LÉĺÑdĉÜW¥}gÁ{aqÃ¥aıęÏZÁ`"],"encodeOffsets":[[104636,22969]]},"properties":{"cp":[102.712251,25.040609],"name":"云南","childNum":1}},{"id":"540000","geometry":{"type":"Polygon","coordinates":["@@ÂhľxŖxÒVºÅâAĪÝȆµę¯Ňa±r_w~uSÕňqOj]ɄQ £Z UDûoY»©M[L¼qãË{VÍçWVi]ë©Ä÷àyƛhÚU°adcQ~Mx¥caÛcSyFÖkuRýq¿ÔµQĽ³aG{¿FµëªéĜÿª@¬·K·àariĕĀ«V»ŶĴūgèLǴŇƶaftèBŚ£^âǐÝ®M¦ÁǞÿ¬LhJ¾óƾƺcxwf]Y ´¦|QLn°adĊ \\¨oǀÍŎ´ĩĀd`tÊQŞŕ|¨C^©Ĉ¦¦ÎJĊ{ëĎjª²rÐl`¼Ą[t|¦Stè¾PÜK¸dƄı]s¤î_v¹ÎVòŦj£Əsc¬_Ğ´|Ł¦Av¦w`ăaÝaa¢e¤ı²©ªSªÈMĄwÉØŔì@T¤Ę\\õª@þo´xA sÂtŎKzó²Çȵ¢r^nĊƬ×üG¢³ {âĊ]G~bÀgVjzlhǶfOfdªB]pjTOtĊn¤}®¦Č¥d¢¼»ddY¼t¢eȤJ¤}Ǿ¡°§¤AÐlc@ĝsªćļđAçwxUuzEÖġ~AN¹ÄÅȀŻ¦¿ģŁéì±H ãd«g[ؼēÀcīľġ¬cJµ ÐʥVȝ¸ßS¹ý±ğkƁ¼ą^ɛ¤Ûÿb[}¬ōõÃ]ËNm®g@Bg}ÍF±ǐyL¥íCIijÏ÷Ñį[¹¦[âšEÛïÁÉdƅß{âNÆāŨß¾ě÷yC£k´ÓH@¹TZ¥¢į·ÌAЧ®Zc v½Z¹|ÅWZqgW|ieZÅYVÓqdqbc²R@c¥Rã»GeeƃīQ}J[ÒK ¬Ə|oėjġĠÑN¡ð¯EBčnwôɍėª²CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛęgſ¶ҍć`ĘąŌJÞä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷f±iMÝ@ĥ°G¬ÃM¥n£Øąğ¯ß§aëbéüÑOčk£{\\eµª×MÉfm«Ƒ{Å×Gŏǩãy³©WÑăû··Qòı}¯ãIéÕÂZ¨īès¶ZÈsæĔTŘvgÌsN@îá¾ó@ÙwU±ÉT廣TđWxq¹Zobs[ׯcĩvėŧ³BM|¹kªħ¥TzNYnÝßpęrñĠĉRS~½ěVVµõ«M££µBĉ¥áºae~³AuĐh`ܳç@BÛïĿa©|z²Ý¼D£àč²ŸIûI āóK¥}rÝ_Á´éMaň¨~ªSĈ½½KÙóĿeƃÆB·¬ën×W|Uº}LJrƳlŒµ`bÔ`QÐÓ@s¬ñIÍ@ûws¡åQÑßÁ`ŋĴ{ĪTÚÅTSijYo|Ç[ǾµMW¢ĭiÕØ¿@Mh pÕ]jéò¿OƇĆƇpêĉâlØwěsǩĵ¸c bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB\\qTGªÇĜçPoÿfñòą¦óQīÈáPābß{ZŗĸIæÅhnszÁCËìñÏ·ąĚÝUm®óL·ăUÈíoù´Êj°ŁŤ_uµ^°ìÇ@tĶĒ¡ÆM³Ģ«İĨÅ®ğRāðggheÆ¢zÊ©Ô\\°ÝĎz~ź¤PnMĪÖB£kn駿ćĆKĒ°¼L¶èâz¨u¦¥LDĘz¬ýÎmĘd¾ßFzhg²Fy¦ĝ¤ċņbÎ@yĄæm°NĮZRÖíJ²öLĸÒ¨Y®ƌÐVàtt_ÚÂyĠz]ŢhzĎ{ÂĢXc|ÐqfO¢¤ögÌHNPKŖUú´xx[xvĐCûĀìÖT¬¸^}Ìsòd´_KgžLĴ ÀBon|H@Êx¦BpŰŌ¿fµƌA¾zLjRx¶FkĄźRzŀ~¶[´HnªVƞuĒȨƎcƽÌm¸ÁÈM¦x͊ëÀxdžBú^´W£dkɾĬpw˂ØɦļĬIŚÊnŔa¸~J°îlɌxĤÊÈðhÌ®gT´øàCÀ^ªerrƘd¢İP|Ė ŸWªĦ^¶´ÂLaT±üWƜǀRÂŶUńĖ[QhlLüAÜ\\qRĄ©"],"encodeOffsets":[[90849,37210]]},"properties":{"cp":[91.132212,29.660361],"name":"西藏","childNum":1}},{"id":"610000","geometry":{"type":"Polygon","coordinates":["@@¸ÂW¢xRFq§uF@N¢XLRMº[ğȣſï|¥Jkc`sʼnǷ£Y³WN«ùMëï³ÛIg÷±mTșÚÒķø©þ¥yÓğęmWµÎumZyOŅƟĥÓ~sÑL¤µaÅ Y¦ocyZ{y c]{Ta©`U_Ěē£ωÊƍKùK¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑdìUYOuFÕÈYvÁCqÓTǢí§·S¹NgV¬ë÷Át°DدC´ʼnƒópģ}ąiEË FéGU¥×K §¶³BČ}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO ñJÙïŚĤNĔwƇÄńwĪo[_KÓª³ÙnKÇěÿ]ďă_d©·©Ýŏ°Ù®g]±ß×¥¬÷m\\iaǑkěX{¢|ZKlçhLtŇîŵœè[É@ƉĄEtƇϳħZ«mJ ×¾MtÝĦ£IwÄå\\Õ{OwĬ©LÙ³ÙTª¿^¦rÌĢŭO¥lãyC§HÍ£ßEñX¡°ÙCgpťzb`wIvA|¥hoĕ@E±iYd¥OÿµÇvPW|mCĴŜǂÒW¶¸AĜh^Wx{@¬F¸¡ķn£P|ªĴ@^ĠĈæbÔc¶lYi ^MicĎ°Â[ävï¶gv@ÀĬ·lJ¸sn|¼u~a]ÆÈtŌºJpþ£KKf~¦UbyäIĺãnÔ¿^ŵMThĠܤko¼Ŏìąǜh`[tRd²IJ_XPrɲlXiL§à¹H°Ȧqº®QCbAŌJ¸ĕÚ³ĺ§ `d¨YjiZvRĺ±öVKkjGȊÄePĞZmļKÀ[`ösìhïÎoĬdtKÞ{¬èÒÒBÔpIJÇĬJŊ¦±J«[©ārHµàåVKe§|P²ÇÓ·vUzgnN¾yI@oHĆÛķhxen¡QQ±ƝJǖRbzy¸ËÐl¼EºpĤ¼x¼½~Ğà@ÚüdK^mÌSjp²ȮµûGĦ}Ħðǚ¶òƄjɂz°{ºØkÈęâ¦jªBg\\ċ°s¬]jú EȌdž¬stRÆdĠİwܸôW¾ƮłÒ_{Ìû¼jº¹¢GǪÒ¯ĘZ`ºŊecņą~BÂgzpâēòYƲȐĎ"],"encodeOffsets":[[113634,40474]]},"properties":{"cp":[108.948024,34.263161],"name":"陕西","childNum":1}},{"id":"620000","geometry":{"type":"MultiPolygon","coordinates":[["@@Vu_^","@@ųEĠtt~nkh`Q¦ÅÄÜdwAb×ĠąJ¤DüègĺqBqj°lI¡Ĩ¶ĖIHdjÎB°aZ¢KJO[|A£Dx}NìHUnrk kp¼Y kMJn[aGáÚÏ[½rc}aQxOgsPMnUsncZ sKúvAtÞġ£®ĀYKdnFw¢JE°Latf`¼h¬we|Æbj}GA·~W`¢MC¤tL©IJ°qdfObÞĬ¹ttu`^ZúE`[@Æsîz®¡CƳƜG²R¢RmfwĸgÜą G@pzJM½mhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬²I¥IʼnÈīoıÓÑAçÑ|«LÝcspīðÍg të_õ\\ĉñLYnĝgRǡÁiHLlõUĹ²uQjYi§Z_c¨´ĹĖÙ·ŋI aBDR¹ȥr¯GºßK¨jWkɱOqWij\\aQ\\sg_ĆǛōëp»£lğÛgSŶN®À]ÓämĹãJaz¥V}Le¤Lýo¹IsŋÅÇ^bz ³tmEÁ´a¹cčecÇNĊãÁ\\č¯dNj]jZµkÓdaćå]ğij@ ©O{¤ĸm¢E·®«|@Xwg]Aģ±¯XǁÑdzªcwQÚŝñsÕ³ÛV_ý¥\\ů¥©¾÷w©WÕÊĩhÿÖÁRo¸V¬âDb¨hûxÊ×nj~Zâg|XÁnßYoº§ZÅŘv[ĭÖʃuďxcVbnUSf B¯³_TzºÎO©çMÑ~M³]µ^püµÄY~y@X~¤Z³[Èōl@®Å¼£QK·Di¡ByÿQ_´D¥hŗy^ĭÁZ]cIzýah¹MĪğPs{ò²Vw¹t³ŜË[Ñ}X\\gsF£sPAgěp×ëfYHāďÖqēŭOÏëdLü\\it^c®Rʺ¶¢H°mrY£B¹čIoľu¶uI]vģSQ{UŻÅ}QÂ|Ì°ƅ¤ĩŪU ęĄÌZÒ\\v²PĔ»ƢNHĂyAmƂwVm`]ÈbH`Ì¢²ILvĜH®¤Dlt_¢JJÄämèÔDëþgºƫaʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b ð÷®üszMzÖĖQdȨýv§Tè|ªHþa¸|Ð ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v·À|\\ƁĚN´ĜçèÁz]ġ¤²¨QÒŨTIlªťØ}¼˗ƦvÄùØE«FïËIqōTvāÜŏíÛßÛVj³âwGăÂíNOPìyV³ʼnĖýZso§HÑiYw[ß\\X¦¥c]ÔƩÜ·«jÐqvÁ¦m^ċ±R¦ƈťĚgÀ»IïĨʗƮ°ƝĻþÍAƉſ±tÍEÕÞāNUÍ¡\\ſčåÒʻĘm ƭÌŹöʥëQ¤µÇcƕªoIýIÉ_mkl³ăƓ¦j¡YzŇi}Msßõīʋ }ÁVm_[n}eıUĥ¼ªI{ΧDÓƻėojqYhĹT©oūĶ£]ďxĩǑMĝq`B´ƃ˺Чç~²ņj@¥@đ´ί}ĥtPńǾV¬ufÓÉCtÓ̻ ¹£G³]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼĤŊɲĖÂKqĘʼn¼ĔDzņɾªǀÞĈĂD½ĄĎÌŗĞrôñnN¼â¾ʄľԆ|DŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿ĽĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY tÁƤyAã˾J@ǝrý@¤ rz¸oP¹ɐÚyáHĀ[Jw cVeȴÏ»ÈĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔĹŊũ~ËUă{ĻƹɁύȩþĽvĽƓÉ@ēĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶¨c~c¼īeXǚ\\đ¾JwÀďksãAfÕ¦L}waoZD½Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LFLzĈôe]gx}|KK}xklL]c¦£fRtív¦PŨ£","@@M T¥"]],"encodeOffsets":[[[108619,36299],[108594,36341],[108600,36306]]]},"properties":{"cp":[103.823557,36.058039],"name":"甘肃","childNum":3}},{"id":"630000","geometry":{"type":"MultiPolygon","coordinates":[["@@InJo","@@CƽOŃĦsΰ~Ē³¦@@Ņi±è}ШƄ˹A³r_ĞǒNĪĐw¤^ŬĵªpĺSZgrpiƼĘÔ¨C|ÍJ©Ħ»®VIJ~f\\m `UnÂ~ʌĬàöNt~ňjy¢ZiƔ¥Ąk´nl`JÊJþ©pdƖ®È£¶ìRʦźõƮËnʼėæÑƀĎ[¢VÎĂMÖÝÎF²sƊƀÎBļýƞ¯ʘƭðħ¼Jh¿ŦęΌƇ¥²Q]Č¥nuÂÏri¸¬ƪÛ^Ó¦d¥[Wà x\\ZjÒ¨GtpþYŊĕ´zUOëPîMĄÁxH´áiÜUàîÜŐĂÛSuŎrJð̬EFÁú×uÃÎkrĒ{V}İ«O_ÌËĬ©ÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u ºµ[gt£¸OƤĿéYõ·kĀq]juw¥DĩƍõÇPéĽG©ã¤G uȧþRcÕĕNyyûtøï»a½ē¿BMoį£Íj}éZËqbʍƬh¹ìÿÓAçãnIáI`ks£CGěUy×Cy @¶ʡÊBnāzGơMē¼±O÷õJËĚăVĪũƆ£¯{ËL½ÌzżVR|ĠTbuvJvµhĻĖHAëáa OÇðñęNw œľ·LmI±íĠĩPÉ×®ÿscB³±JKßĊ«` ađ»·QAmOVţéÿ¤¹SQt]]Çx±¯A@ĉij¢Óļ©l¶ÅÛrŕspãRk~¦ª]Į´FRådČsCqđéFn¿ÅƃmÉx{W©ºƝºįkÕƂƑ¸wWūЩÈF£\\tÈ¥ÄRÈýÌJ lGr^×äùyÞ³fjc¨£ÂZ|ǓMĝÏ@ëÜőRĝ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³ÞIňµç½©C¡į÷¯B»|St»]vųs»}MÓ ÿʪƟǭA¡fs»PY¼c¡»¦cċ¥£~msĉPSi^o©AecPeǵkgyUi¿h}aHĉ^|á´¡HØûÅ«ĉ®]m¡qċ¶±ÈyôōLÁstB®wn±ă¥HSòė£Së@לÊăxÇN©©T±ª£IJ¡fb®Þbb_Ą¥xu¥B{łĝ³«`dƐt¤ťiñÍUuºí`£^tƃIJc·ÛLO½sç¥Ts{ă\\_»kϱq©čiìĉ|ÍI¥ć¥]ª§D{ŝŖÉR_sÿc³ĪōƿΧp[ĉc¯bKmR¥{³Ze^wx¹dƽŽôIg §Mĕ ƹĴ¿ǣÜÍ]Ý]snåA{eƭ`ǻŊĿ\\ijŬűYÂÿ¬jĖqßb¸L«¸©@ěĀ©ê¶ìÀEH|´bRľÓ¶rÀQþvl®ÕETzÜdb hw¤{LRdcb¯ÙVgƜßzÃôì®^jUèXÎ|UäÌ»rK\\ªN¼pZCüVY¤ɃRi^rPŇTÖ}|br°qňbĚ°ªiƶGQ¾²x¦PmlŜ[Ĥ¡ΞsĦÔÏâ\\ªÚŒU\\f ¢N²§x|¤§xĔsZPòʛ²SÐqF`ªVÞŜĶƨVZÌL`¢dŐIqr\\oäõF礻Ŷ×h¹]ClÙ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ´ÃbEÄlbʔC|CŮkƮ[ʼ¬ň´KŮÈΰÌĪ¶ƶlðļATUvdTGº̼ÔsÊDÔveMg"]],"encodeOffsets":[[[105308,37219],[95370,40081]]]},"properties":{"cp":[101.778916,36.623178],"name":"青海","childNum":2}},{"id":"640000","geometry":{"type":"Polygon","coordinates":["@@KëÀęĞ«Oęȿȕı]ʼn¡åįÕÔ«ǴõƪĚQÐZhv K°öqÀÑS[ÃÖHƖčËnL]ûc Ùß@ĝ¾}w»»oģF¹»kÌÏ·{zP§B¢íyÅt@@á]Yv_ssģ¼ißĻL¾ġsKD£¡N_ X¸}B~HaiÅf{«x»ge_bsKF¯¡IxmELcÿZ¤ĢÝsuBLùtYdmVtNmtOPhRw~bd ¾qÐ\\âÙH\\bImlNZ»loqlVmGā§~QCw¤{A\\PKNY¯bFkC¥sks_Ã\\ă«¢ħkJi¯rrAhĹûç£CUĕĊ_ÔBixÅÙĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~hw^ófćKyEKzuÔ¡qQ¤xZÑ¢^ļöܾEp±âbÊÑÆ^fk¬ NC¾YpxbK~¥eÖäBlt¿Đx½I[ĒǙWf»Ĭ}d§dµùEuj¨IÆ¢¥dXªƅx¿]mtÏwßRĶX¢͎vÆzƂZò®ǢÌʆCrâºMÞzÆMÒÊÓŊZľr°Î®Ȉmª²ĈUªĚîøºĮ¦ÌĘk^FłĬhĚiĀĖ¾iİbjË"],"encodeOffsets":[[109366,40242]]},"properties":{"cp":[106.278179,38.46637],"name":"宁夏","childNum":1}},{"id":"650000","geometry":{"type":"Polygon","coordinates":["@@QØĔ²X¨~ǘBºjʐßØvKƔX¨vĊO÷¢i@~cĝe_«E}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX êÎf`C¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥OéÈ¿ÖğǤǷÂFÒzÉx[]Ĥĝœ¦EP}ûƥé¿İƷTėƫœŕƅƱB»Đ±ēO ¦E}`cȺrĦáŖuÒª«IJπdƺÏØZƴwʄ¤ĖGĐǂZĶèH¶}ÚZצʥĪï|ÇĦMŔ»İĝLjì¥Βba¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»òmqóŘĝč˾ăC ćāƿÝɽ©DZŅ»ēėŊLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕUv£ƁQïƵkŏ½ΉÃŭdzLŇʻ«ƭ\\lŭD{ʓDkaFÃÄa³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍöůʼnT¡c_ËKYƧUśĵÝU_©rETÏʜ±OñtYwē¨{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\śnkOw¥±T»ƷFɯàĩÞáB¹Æ ÑUwŕĽw]kE½Èå~Æ÷QyěCFmĭZīŵVÁƿQƛûXS²b½KϽĉS©ŷXĕ{ĕK·¥Ɨcqq©f¿]ßDõU³hgËÇïģÉɋwk¯í}I·œbmÉřīJɥĻˁ×xoɹīlc ¤³Xù]DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®ƝvUm©³G\\}µĿQyŹlăµEwLJQ½yƋBe¶ŋÀůo¥AÉw@{Gpm¿AijŽKLh³`ñcËtW±»ÕSëüÿďDu\\wwwù³VLŕOMËGh£õP¡erÏd{ġWÁ č|yšg^ğyÁzÙs`s|ÉåªÇ}m¢Ń¨`x¥ù^}Ì¥H«YªƅAйn~ź¯f¤áÀzgÇDIÔ´AňĀÒ¶ûEYospõD[{ù°]uJqU|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw ÞkrťË¿XGÉbřaDü·Ē÷Aê[ÄäI®BÕĐÞ_¢āĠpÛÄȉĖġDKwbmÄNôfƫVÉvidzHQµâFùÂœ³¦{YGd¢ĚÜO {Ö¦ÞÍÀP^bƾl[vt×ĈÍE˨¡Đ~´î¸ùÎhuè`¸HÕŔVºwĠââWò@{ÙNÝ´ə²ȕn{¿¥{l÷eé^eďXj©î\\ªÑòÜìc\\üqÕ[Č¡xoÂċªbØø|¶ȴZdÆÂońéG\\¼C°ÌÆn´nxÊOĨŪƴĸ¢¸òTxÊǪMīĞÖŲÃɎOvʦƢ~FRěò¿ġ~åŊúN¸qĘ[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾ĄYÒ©ÊfºmÔĘcDoĬMŬS¤s²ʘÚžȂVŦ èW°ªB|IJXŔþÈJĦÆæFĚêYĂªĂ]øªŖNÞüAfɨJ¯ÎrDDĤ`mz\\§~D¬{vJ«lµĂb¤pŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMTòP÷fØĶK¢ȝ˔Sô¹òEð`Ɩ½ǒÂň×äı§ĤƝ§C~¡hlåǺŦŞkâ~}FøàIJaĞfƠ¥Ŕd®U¸źXv¢aƆúŪtŠųƠjdƺƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹\\ĜÑŚ¶ZƄ³âjĦoâȴLÊȮĐĚăÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTiƢ¾ªì°`öøu®Ê¾ãÖ"],"encodeOffsets":[[88824,50096]]},"properties":{"cp":[87.617733,43.792818],"name":"新疆","childNum":1}},{"id":"110000","geometry":{"type":"Polygon","coordinates":["@@RºaYÕQaúÍÔiþĩȨWĢü|Ėu[qb[swP@ÅğP¿{\\¯Y²·Ñ¨j¯X\\¯MSvU¯YIŕY{[fkVÁûtŷmiÍt_H»Ĩ±d`¹{bw Yr³S]§§o¹qGtm_SŧoaFLgQN_dV@Zom_ć\\ßW´ÕiœRcfi o§ËgToÛJíĔóu |wP¤XnO¢ÉŦ¯pNÄā¤zâŖÈRpŢZÚ{GrFt¦Òx§ø¹RóäV¤XdżâºWbwŚ¨Ud®bêņ¾jnŎGŃŶnzÚScîĚZen¬"],"encodeOffsets":[[119421,42013]]},"properties":{"cp":[116.405285,39.904989],"name":"北京","childNum":1}},{"id":"120000","geometry":{"type":"Polygon","coordinates":["@@ŬgX§Ü«E ¶F̬O_ïlÁgz±AXeµÄĵ{¶]gitgIj·¥ì_iU¨ÐƎk}ĕ{gBqGf{¿aU^fIư³õ{YıëNĿk©ïËZukāAīlĕĥs¡bġ«@dekąI[nlPqCnp{ō³°`{PNdƗqSÄĻNNâyj]äÒD ĬH°Æ]~¡HO¾X}ÐxgpgWrDGpù^LrzWxZ^¨´T\\|~@IzbĤjeĊªz£®ĔvěLmV¾Ô_ÈNW~zbĬvG²ZmDM~~"],"encodeOffsets":[[120237,41215]]},"properties":{"cp":[117.190182,39.125596],"name":"天津","childNum":1}},{"id":"310000","geometry":{"type":"MultiPolygon","coordinates":[["@@ɧư¬EpƸÁx]","@@©²","@@MA","@@QpªKWT §¨","@@bŝÕÕEȣÚƥêImɇǦèÜĠÚÄÓŴ·ʌÇ","@@Sô¤r]ìƬįǜûȬɋŭ×^sYɍDŋŽąñCG²«ªč@h_p¯A{oloY¬j@IJ`gQÚpptǀ^MIJvtbe´Rh@oj¨","@@ÆLH{a}Eo¦"]],"encodeOffsets":[[[124702,32062],[124547,32200],[124808,31991],[124726,32110],[124903,32376],[124065,32166],[124870,31965]]]},"properties":{"cp":[121.472644,31.231706],"name":"上海","childNum":7}},{"id":"500000","geometry":{"type":"Polygon","coordinates":["@@TÂÛ`Ùƅően½SêqDu[Rå͹÷eXÍy¸_ĺę}÷`M¯ċfCVµqʼn÷Zgg^d½pDOÎCn^uf²ènh¼WtƏxRGg¦ pVFI±G^Ic´ecGĹÞ½sëÆNä̤KÓe¯|R¸§LÜkPoïƭNï¶}Gywdiù©nkĈzj@Óc£»Wă¹Óf§c[µo·Ó|MvÛaq½«è\\ÂoVnÓØͲ«bq¿ehCĜ^Q~ Évýş¤²ĮpEĶyhsŊwH½¿gÅ¡ýE¡ya£³t\\¨\\vú¹¼©·Ñr_oÒý¥et³]Et©uÖ¥±ă©KVeë]}wVPÀFA¨ąB}qTjgRemfFmQFÝ MyùnÑAmÑCawu_p¯sfÛ_gI_pNysB¦zG¸rHeN\\CvEsÐñÚkcDÖĉsaQ¯}_UzÁē}^R Äd^ÍĸZ¾·¶`wećJE¹vÛ·HgéFXjÉê`|ypxkAwWĐpb¥eOsmzwqChóUQl¥F^lafanòsrEvfQdÁUVfÎvÜ^eftET¬ôA\\¢sJnQTjPØxøK|nBzĞ»LY FDxÓvr[ehľvN¢o¾NiÂxGpâ¬zbfZo~hGi]öF||NbtOMn eA±tPTLjpYQ|SHYĀxinzDJÌg¢và¥Pg_ÇzIIII£®S¬Øs쥨^LnGIJļIJƤjÎƀƾ¹¸ØÎezĆT¸}êÐqHðqĖä¥^CÆIj²p \\_ æüY|[YxƊæu°xb® Űb@~¢NQt°¶Sæ Ê~rljĔëĚ¢~uf`faĔJåĊnÔ]jƎćÊ@£¾a®£Ű{ŶĕFègLk{Y|¡ĜWƔtƬJÑxq±ĢN´òKLÈüD|s`ŋć]Ã`đMùƱ¿~Y°ħ`ƏíW½eI½{aOIrÏ¡ĕŇapµÜƃġ²"],"encodeOffsets":[[111728,31311]]},"properties":{"cp":[106.504962,29.533155],"name":"重庆","childNum":1}},{"id":"810000","geometry":{"type":"MultiPolygon","coordinates":[["@@AlFi","@@mp","@@EpHo","@@rMUwAS¬]","@@ea¢pl¸Eõ¹hj[]ÔCÎ@lj¡uBX ´AI¹ [yDU]W`çwZkmc MpÅv}IoJlcafŃK°ä¬XJmÐ đhI®æÔtSHnEÒrÄc"]],"encodeOffsets":[[[117111,23002],[117072,22876],[117045,22887],[116882,22747],[116975,23082]]]},"properties":{"cp":[114.173355,22.320048],"name":"香港","childNum":5}},{"id":"820000","geometry":{"type":"Polygon","coordinates":["@@áw{Îr"],"encodeOffsets":[[116285,22746]]},"properties":{"cp":[113.54909,22.198951],"name":"澳门","childNum":1}}],"UTF8Encoding":true}); +})); \ No newline at end of file diff --git a/src/main/websrc/js/common/clipboard.min.js b/src/main/websrc/js/common/clipboard.min.js new file mode 100644 index 0000000..1993676 --- /dev/null +++ b/src/main/websrc/js/common/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v1.6.1 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Clipboard=e()}}(function(){var e,t,n;return function e(t,n,o){function i(a,c){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!c&&l)return l(a,!0);if(r)return r(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var s=n[a]={exports:{}};t[a][0].call(s.exports,function(e){var n=t[a][1][e];return i(n?n:e)},s,s.exports,e,t,n,o)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;a<o.length;a++)i(o[a]);return i}({1:[function(e,t,n){function o(e,t){for(;e&&e.nodeType!==i;){if(e.matches(t))return e;e=e.parentNode}}var i=9;if("undefined"!=typeof Element&&!Element.prototype.matches){var r=Element.prototype;r.matches=r.matchesSelector||r.mozMatchesSelector||r.msMatchesSelector||r.oMatchesSelector||r.webkitMatchesSelector}t.exports=o},{}],2:[function(e,t,n){function o(e,t,n,o,r){var a=i.apply(this,arguments);return e.addEventListener(n,a,r),{destroy:function(){e.removeEventListener(n,a,r)}}}function i(e,t,n,o){return function(n){n.delegateTarget=r(n.target,t),n.delegateTarget&&o.call(e,n)}}var r=e("./closest");t.exports=o},{"./closest":1}],3:[function(e,t,n){n.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},n.nodeList=function(e){var t=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===t||"[object HTMLCollection]"===t)&&"length"in e&&(0===e.length||n.node(e[0]))},n.string=function(e){return"string"==typeof e||e instanceof String},n.fn=function(e){var t=Object.prototype.toString.call(e);return"[object Function]"===t}},{}],4:[function(e,t,n){function o(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!c.string(t))throw new TypeError("Second argument must be a String");if(!c.fn(n))throw new TypeError("Third argument must be a Function");if(c.node(e))return i(e,t,n);if(c.nodeList(e))return r(e,t,n);if(c.string(e))return a(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function i(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}function r(e,t,n){return Array.prototype.forEach.call(e,function(e){e.addEventListener(t,n)}),{destroy:function(){Array.prototype.forEach.call(e,function(e){e.removeEventListener(t,n)})}}}function a(e,t,n){return l(document.body,e,t,n)}var c=e("./is"),l=e("delegate");t.exports=o},{"./is":3,delegate:2}],5:[function(e,t,n){function o(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var o=window.getSelection(),i=document.createRange();i.selectNodeContents(e),o.removeAllRanges(),o.addRange(i),t=o.toString()}return t}t.exports=o},{}],6:[function(e,t,n){function o(){}o.prototype={on:function(e,t,n){var o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){function o(){i.off(e,o),t.apply(n,arguments)}var i=this;return o._=t,this.on(e,o,n)},emit:function(e){var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),o=0,i=n.length;for(o;o<i;o++)n[o].fn.apply(n[o].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),o=n[e],i=[];if(o&&t)for(var r=0,a=o.length;r<a;r++)o[r].fn!==t&&o[r].fn._!==t&&i.push(o[r]);return i.length?n[e]=i:delete n[e],this}},t.exports=o},{}],7:[function(t,n,o){!function(i,r){if("function"==typeof e&&e.amd)e(["module","select"],r);else if("undefined"!=typeof o)r(n,t("select"));else{var a={exports:{}};r(a,i.select),i.clipboardAction=a.exports}}(this,function(e,t){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=n(t),r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),c=function(){function e(t){o(this,e),this.resolveOptions(t),this.initSelection()}return a(e,[{key:"resolveOptions",value:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function e(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function e(){var t=this,n="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=document.body.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[n?"right":"left"]="-9999px";var o=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=o+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,i.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function e(){this.fakeHandler&&(document.body.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function e(){this.selectedText=(0,i.default)(this.target),this.copyText()}},{key:"copyText",value:function e(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function e(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function e(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function e(){this.removeFake()}},{key:"action",set:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function e(){return this._action}},{key:"target",set:function e(t){if(void 0!==t){if(!t||"object"!==("undefined"==typeof t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function e(){return this._target}}]),e}();e.exports=c})},{select:5}],8:[function(t,n,o){!function(i,r){if("function"==typeof e&&e.amd)e(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if("undefined"!=typeof o)r(n,t("./clipboard-action"),t("tiny-emitter"),t("good-listener"));else{var a={exports:{}};r(a,i.clipboardAction,i.tinyEmitter,i.goodListener),i.clipboard=a.exports}}(this,function(e,t,n,o){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}var u=i(t),s=i(n),f=i(o),d=function(){function e(e,t){for(var n=0;n<t.length;n++){var o=t[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}return function(t,n,o){return n&&e(t.prototype,n),o&&e(t,o),t}}(),h=function(e){function t(e,n){r(this,t);var o=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this));return o.resolveOptions(n),o.listenClick(e),o}return c(t,e),d(t,[{key:"resolveOptions",value:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText}},{key:"listenClick",value:function e(t){var n=this;this.listener=(0,f.default)(t,"click",function(e){return n.onClick(e)})}},{key:"onClick",value:function e(t){var n=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new u.default({action:this.action(n),target:this.target(n),text:this.text(n),trigger:n,emitter:this})}},{key:"defaultAction",value:function e(t){return l("action",t)}},{key:"defaultTarget",value:function e(t){var n=l("target",t);if(n)return document.querySelector(n)}},{key:"defaultText",value:function e(t){return l("text",t)}},{key:"destroy",value:function e(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],n="string"==typeof t?[t]:t,o=!!document.queryCommandSupported;return n.forEach(function(e){o=o&&!!document.queryCommandSupported(e)}),o}}]),t}(s.default);e.exports=h})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)}); \ No newline at end of file diff --git a/src/main/websrc/js/common/date-utils.js b/src/main/websrc/js/common/date-utils.js new file mode 100644 index 0000000..f4451df --- /dev/null +++ b/src/main/websrc/js/common/date-utils.js @@ -0,0 +1,762 @@ +(function () { + // constants + var monthsAbbr = [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec' + ]; + + var monthsFull = [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December' + ]; + + var daysAbbr = [ + 'Sun', + 'Mon', + 'Tue', + 'Wed', + 'Thu', + 'Fri', + 'Sat' + ]; + + var daysFull = [ + 'Sunday', + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday' + ]; + + var dayNames = { + 'su': 0, + 'sun': 0, + 'sunday': 0, + 'mo': 1, + 'mon': 1, + 'monday': 1, + 'tu': 2, + 'tue': 2, + 'tuesday': 2, + 'we': 3, + 'wed': 3, + 'wednesday': 3, + 'th': 4, + 'thu': 4, + 'thursday': 4, + 'fr': 5, + 'fri': 5, + 'friday': 5, + 'sa': 6, + 'sat': 6, + 'saturday': 6 + }; + var monthsAll = monthsFull.concat(monthsAbbr); + var daysAll = [ + 'su', + 'sun', + 'sunday', + 'mo', + 'mon', + 'monday', + 'tu', + 'tue', + 'tuesday', + 'we', + 'wed', + 'wednesday', + 'th', + 'thu', + 'thursday', + 'fr', + 'fri', + 'friday', + 'sa', + 'sat', + 'saturday' + ]; + + var monthNames = { + 'jan': 0, + 'january': 0, + 'feb': 1, + 'february': 1, + 'mar': 2, + 'march': 2, + 'apr': 3, + 'april': 3, + 'may': 4, + 'jun': 5, + 'june': 5, + 'jul': 6, + 'july': 6, + 'aug': 7, + 'august': 7, + 'sep': 8, + 'september': 8, + 'oct': 9, + 'october': 9, + 'nov': 10, + 'november': 10, + 'dec': 11, + 'december': 11 + }; + + var daysInMonth = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]; + + + // private helper functions + /** @ignore */ + function pad(str, length) { + str = String(str); + while (str.length < length) { + str = '0' + str; + } + return str; + } + + var isInteger = function (str) { + if (str.match(/^(\d+)$/)) { + return true; + } + return false; + }; + var getInt = function (str, i, minlength, maxlength) { + for (var x = maxlength; x >= minlength; x--) { + var token = str.substring(i, i + x); + if (token.length < minlength) { + return null; + } + if (isInteger(token)) { + return token; + } + } + return null; + }; + + // static class methods + var origParse = Date.parse; + // ------------------------------------------------------------------ + // getDateFromFormat( date_string , format_string ) + // + // This function takes a date string and a format string. It matches + // If the date string matches the format string, it returns the + // getTime() of the date. If it does not match, it returns NaN. + // Original Author: Matt Kruse <matt@mattkruse.com> + // WWW: http://www.mattkruse.com/ + // Adapted from: http://www.mattkruse.com/javascript/date/source.html + // ------------------------------------------------------------------ + + + var getDateFromFormat = function (val, format) { + val = val + ""; + format = format + ""; + var iVal = 0; + var iFormat = 0; + var c = ""; + var token = ""; + var token2 = ""; + var x, y; + var now = new Date(); + var year = now.getYear(); + var month = now.getMonth() + 1; + var date = 1; + var hh = 0; + var mm = 0; + var ss = 0; + var ampm = ""; + + + + while (iFormat < format.length) { + // Get next token from format string + c = format.charAt(iFormat); + token = ""; + while ((format.charAt(iFormat) === c) && (iFormat < format.length)) { + token += format.charAt(iFormat++); + } + // Extract contents of value based on format token + if (token === "yyyy" || token === "yy" || token === "y") { + if (token === "yyyy") { + x = 4; + y = 4; + } + if (token === "yy") { + x = 2; + y = 2; + } + if (token === "y") { + x = 2; + y = 4; + } + year = getInt(val, iVal, x, y); + if (year === null) { + return NaN; + } + iVal += year.length; + if (year.length === 2) { + if (year > 70) { + year = 1900 + (year - 0); + } else { + year = 2000 + (year - 0); + } + } + } else if (token === "MMM" || token === "NNN") { + month = 0; + for (var i = 0; i < monthsAll.length; i++) { + var monthName = monthsAll[i]; + if (val.substring(iVal, iVal + monthName.length).toLowerCase() === monthName.toLowerCase()) { + if (token === "MMM" || (token === "NNN" && i > 11)) { + month = i + 1; + if (month > 12) { + month -= 12; + } + iVal += monthName.length; + break; + } + } + } + if ((month < 1) || (month > 12)) { + return NaN; + } + } else if (token === "EE" || token === "E") { + for (var n = 0; n < daysAll.length; n++) { + var dayName = daysAll[n]; + if (val.substring(iVal, iVal + dayName.length).toLowerCase() === dayName.toLowerCase()) { + iVal += dayName.length; + break; + } + } + } else if (token === "MM" || token === "M") { + month = getInt(val, iVal, token.length, 2); + if (month === null || (month < 1) || (month > 12)) { + return NaN; + } + iVal += month.length; + } else if (token === "dd" || token === "d") { + date = getInt(val, iVal, token.length, 2); + if (date === null || (date < 1) || (date > 31)) { + return NaN; + } + iVal += date.length; + } else if (token === "hh" || token === "h") { + hh = getInt(val, iVal, token.length, 2); + if (hh === null || (hh < 1) || (hh > 12)) { + return NaN; + } + iVal += hh.length; + } else if (token === "HH" || token === "H") { + hh = getInt(val, iVal, token.length, 2); + if (hh === null || (hh < 0) || (hh > 23)) { + return NaN; + } + iVal += hh.length; + } else if (token === "KK" || token === "K") { + hh = getInt(val, iVal, token.length, 2); + if (hh === null || (hh < 0) || (hh > 11)) { + return NaN; + } + iVal += hh.length; + } else if (token === "kk" || token === "k") { + hh = getInt(val, iVal, token.length, 2); + if (hh === null || (hh < 1) || (hh > 24)) { + return NaN; + } + iVal += hh.length; + hh--; + } else if (token === "mm" || token === "m") { + mm = getInt(val, iVal, token.length, 2); + if (mm === null || (mm < 0) || (mm > 59)) { + return NaN; + } + iVal += mm.length; + } else if (token === "ss" || token === "s") { + ss = getInt(val, iVal, token.length, 2); + if (ss === null || (ss < 0) || (ss > 59)) { + return NaN; + } + iVal += ss.length; + } else if (token === "a") { + if (val.substring(iVal, iVal + 2).toLowerCase() === "am") { + ampm = "AM"; + } else if (val.substring(iVal, iVal + 2).toLowerCase() === "pm") { + ampm = "PM"; + } else { + return NaN; + } + iVal += 2; + } else { + if (val.substring(iVal, iVal + token.length) !== token) { + return NaN; + } else { + iVal += token.length; + } + } + } + // If there are any trailing characters left in the value, it doesn't match + if (iVal !== val.length) { + return NaN; + } + // Is date valid for month? + if (month === 2) { + // Check for leap year + if (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)) { // leap year + if (date > 29) { + return NaN; + } + } else { + if (date > 28) { + return NaN; + } + } + } + if ((month === 4) || (month === 6) || (month === 9) || (month === 11)) { + if (date > 30) { + return NaN; + } + } + // Correct hours value + if (hh < 12 && ampm === "PM") { + hh = hh - 0 + 12; + } else if (hh > 11 && ampm === "AM") { + hh -= 12; + } + var newdate = new Date(year, month - 1, date, hh, mm, ss); + return newdate.getTime(); + }; + + + /** @ignore */ + Date.parse = function (date, format) { + if (format) { + return getDateFromFormat(date, format); + } + var timestamp = origParse(date), minutesOffset = 0, match; + if (isNaN(timestamp) && (match = /^(\d{4}|[+\-]\d{6})-(\d{2})-(\d{2})(?:[T ](\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?))?/.exec(date))) { + if (match[8] !== 'Z') { + minutesOffset = +match[10] * 60 + (+match[11]); + + if (match[9] === '+') { + minutesOffset = 0 - minutesOffset; + } + } + + match[7] = match[7] || '000'; + + timestamp = Date.UTC(+match[1], +match[2] - 1, +match[3], +match[4], +match[5] + minutesOffset, +match[6], +match[7].substr(0, 3)); + } + + return timestamp; + }; + + function polyfill(name, func) { + if (Date.prototype[name] === undefined) { + Date.prototype[name] = func; + } + } + + /** + Returns new instance of Date object with the date set to today and + the time set to midnight + @returns {Date} Today's Date + @function + */ + Date.today = function () { + return new Date().clearTime(); + }; + + /** + Returns new instance of Date object with the date set to today and + the time set to midnight in UTC + @returns {Date} Today's Date in UTC + @function + */ + Date.UTCtoday = function () { + return new Date().clearUTCTime(); + }; + + /** + Returns new instance of Date object with the date set to tomorrow and + the time set to midnight + @returns {Date} Tomorrow's Date + @function + */ + Date.tomorrow = function () { + return Date.today().add({days: 1}); + }; + + /** + Returns new instance of Date object with the date set to tomorrow and + the time set to midnight in UTC + @returns {Date} Tomorrow's Date in UTC + @function + */ + Date.UTCtomorrow = function () { + return Date.UTCtoday().add({days: 1}); + }; + + /** + Returns new instance of Date object with the date set to yesterday and + the time set to midnight + @returns {Date} Yesterday's Date + @function + */ + Date.yesterday = function () { + return Date.today().add({days: -1}); + }; + + /** + Returns new instance of Date object with the date set to yesterday and + the time set to midnight in UTC + @returns {Date} Yesterday's Date in UTC + @function + */ + Date.UTCyesterday = function () { + return Date.UTCtoday().add({days: -1}); + }; + + Date.validateDay = function (day, year, month) { + var date = new Date(year, month, day); + return (date.getFullYear() === year && + date.getMonth() === month && + date.getDate() === day); + }; + + Date.validateYear = function (year) { + return (year >= 0 && year <= 9999); + }; + + Date.validateSecond = function (second) { + return (second >= 0 && second < 60); + }; + + Date.validateMonth = function (month) { + return (month >= 0 && month < 12); + }; + + Date.validateMinute = function (minute) { + return (minute >= 0 && minute < 60); + }; + + Date.validateMillisecond = function (milli) { + return (milli >= 0 && milli < 1000); + }; + + Date.validateHour = function (hour) { + return (hour >= 0 && hour < 24); + }; + + Date.compare = function (date1, date2) { + if (date1.valueOf() < date2.valueOf()) { + return -1; + } else if (date1.valueOf() > date2.valueOf()) { + return 1; + } + return 0; + }; + + Date.equals = function (date1, date2) { + return date1.valueOf() === date2.valueOf(); + }; + + + Date.getDayNumberFromName = function (name) { + return dayNames[name.toLowerCase()]; + }; + + + Date.getMonthNumberFromName = function (name) { + return monthNames[name.toLowerCase()]; + }; + + Date.isLeapYear = function (year) { + return (new Date(year, 1, 29).getDate() === 29); + }; + + Date.getDaysInMonth = function (year, month) { + if (month === 1) { + return Date.isLeapYear(year) ? 29 : 28; + } + return daysInMonth[month]; + }; + + polyfill('getMonthAbbr', function () { + return monthsAbbr[this.getMonth()]; + }); + + polyfill('getMonthName', function () { + return monthsFull[this.getMonth()]; + }); + + polyfill('getUTCOffset', function () { + var tz = pad(Math.abs(this.getTimezoneOffset() / 0.6), 4); + if (this.getTimezoneOffset() > 0) { + tz = '-' + tz; + } + return tz; + }); + + polyfill('toCLFString', function () { + return pad(this.getDate(), 2) + '/' + this.getMonthAbbr() + '/' + + this.getFullYear() + ':' + pad(this.getHours(), 2) + ':' + + pad(this.getMinutes(), 2) + ':' + pad(this.getSeconds(), 2) + + ' ' + this.getUTCOffset(); + }); + + polyfill('toYMD', function (separator) { + separator = typeof separator === 'undefined' ? '-' : separator; + return this.getFullYear() + separator + pad(this.getMonth() + 1, 2) + + separator + pad(this.getDate(), 2); + }); + + polyfill('toDBString', function () { + return this.getUTCFullYear() + '-' + pad(this.getUTCMonth() + 1, 2) + + '-' + pad(this.getUTCDate(), 2) + ' ' + pad(this.getUTCHours(), 2) + + ':' + pad(this.getUTCMinutes(), 2) + ':' + pad(this.getUTCSeconds(), 2); + }); + + polyfill('clearTime', function () { + this.setHours(0); + this.setMinutes(0); + this.setSeconds(0); + this.setMilliseconds(0); + + return this; + }); + + polyfill('clearUTCTime', function () { + this.setUTCHours(0); + this.setUTCMinutes(0); + this.setUTCSeconds(0); + this.setUTCMilliseconds(0); + + return this; + }); + + polyfill('add', function (obj) { + if (obj.milliseconds !== undefined) { + this.setMilliseconds(this.getMilliseconds() + obj.milliseconds); + } + if (obj.seconds !== undefined) { + this.setSeconds(this.getSeconds() + obj.seconds); + } + if (obj.minutes !== undefined) { + this.setMinutes(this.getMinutes() + obj.minutes); + } + if (obj.hours !== undefined) { + this.setHours(this.getHours() + obj.hours); + } + if (obj.days !== undefined) { + this.setDate(this.getDate() + obj.days); + } + if (obj.weeks !== undefined) { + this.setDate(this.getDate() + (obj.weeks * 7)); + } + if (obj.months !== undefined) { + this.setMonth(this.getMonth() + obj.months); + } + if (obj.years !== undefined) { + this.setFullYear(this.getFullYear() + obj.years); + } + return this; + }); + + polyfill('addMilliseconds', function (milliseconds) { + return this.add({ milliseconds: milliseconds }); + }); + + polyfill('addSeconds', function (seconds) { + return this.add({ seconds: seconds }); + }); + + polyfill('addMinutes', function (minutes) { + return this.add({ minutes: minutes }); + }); + + polyfill('addHours', function (hours) { + return this.add({ hours: hours }); + }); + + polyfill('addDays', function (days) { + return this.add({ days: days }); + }); + + polyfill('addWeeks', function (weeks) { + return this.add({ days: (weeks * 7) }); + }); + + polyfill('addMonths', function (months) { + return this.add({ months: months }); + }); + + polyfill('addYears', function (years) { + return this.add({ years: years }); + }); + + polyfill('setTimeToNow', function () { + var n = new Date(); + this.setMilliseconds(n.getMilliseconds()); + this.setSeconds(n.getSeconds()); + this.setMinutes(n.getMinutes()); + this.setHours(n.getHours()); + }); + + polyfill('clone', function () { + return new Date(this.valueOf()); + }); + + polyfill('between', function (start, end) { + return (this.valueOf() >= start.valueOf() && + this.valueOf() <= end.valueOf()); + }); + + polyfill('compareTo', function (date) { + return Date.compare(this, date); + }); + + polyfill('equals', function (date) { + return Date.equals(this, date); + }); + + polyfill('isAfter', function (date) { + date = date ? date : new Date(); + return (this.compareTo(date) > 0); + }); + + polyfill('isBefore', function (date) { + date = date ? date : new Date(); + return (this.compareTo(date) < 0); + }); + + polyfill('getDaysBetween', function (date) { + return ((date.clone().valueOf() - this.valueOf()) / 86400000) | 0; + }); + + polyfill('getHoursBetween', function (date) { + return ((date.clone().valueOf() - this.valueOf()) / 3600000) | 0; + }); + + polyfill('getMinutesBetween', function (date) { + return ((date.clone().valueOf() - this.valueOf()) / 60000) | 0; + }); + + polyfill('getSecondsBetween', function (date) { + return ((date.clone().valueOf() - this.valueOf()) / 1000) | 0; + }); + + polyfill('getMillisecondsBetween', function (date) { + return ((date.clone().valueOf() - this.valueOf())) | 0; + }); + + polyfill('getOrdinalNumber', function () { + return Math.ceil((this.clone().clearTime() - new Date(this.getFullYear(), 0, 1)) / 86400000) + 1; + }); + + polyfill('toFormat', function (format) { + return toFormat(format, getReplaceMap(this)); + }); + + polyfill('toUTCFormat', function (format) { + return toFormat(format, getUTCReplaceMap(this)); + }); + + var toFormat = function(format, replaceMap) { + var f = [ format ], i, l, s; + var replace = function (str, rep) { + var i = 0, l = f.length, j, ll, t, n = []; + for (; i < l; i++) { + if (typeof f[i] == 'string') { + t = f[i].split(str); + for (j = 0, ll = t.length - 1; j < ll; j++) { + n.push(t[j]); + n.push([rep]); // replacement pushed as non-string + } + n.push(t[ll]); + } else { + // must be a replacement, don't process, just push + n.push(f[i]); + } + } + f = n; + }; + + for (i in replaceMap) { + replace(i, replaceMap[i]); + } + + s = ''; + for (i = 0, l = f.length; i < l; i++) + s += typeof f[i] == 'string' ? f[i] : f[i][0]; + return f.join(''); + }; + + var getReplaceMap = function(date) { + var hours = (date.getHours() % 12) ? date.getHours() % 12 : 12; + return { + 'YYYY': date.getFullYear(), + 'YY': String(date.getFullYear()).slice(-2), + 'MMMM': monthsFull[date.getMonth()], + 'MMM': monthsAbbr[date.getMonth()], + 'MM': pad(date.getMonth() + 1, 2), + 'MI': pad(date.getMinutes(), 2), + 'M': date.getMonth() + 1, + 'DDDD': daysFull[date.getDay()], + 'DDD': daysAbbr[date.getDay()], + 'DD': pad(date.getDate(), 2), + 'D': date.getDate(), + 'HH24': pad(date.getHours(), 2), + 'HH': pad(hours, 2), + 'H': hours, + 'SS': pad(date.getSeconds(), 2), + 'PP': (date.getHours() >= 12) ? 'PM' : 'AM', + 'P': (date.getHours() >= 12) ? 'pm' : 'am', + 'LL': pad(date.getMilliseconds(), 3) + }; + }; + + var getUTCReplaceMap = function(date) { + var hours = (date.getUTCHours() % 12) ? date.getUTCHours() % 12 : 12; + return { + 'YYYY': date.getUTCFullYear(), + 'YY': String(date.getUTCFullYear()).slice(-2), + 'MMMM': monthsFull[date.getUTCMonth()], + 'MMM': monthsAbbr[date.getUTCMonth()], + 'MM': pad(date.getUTCMonth() + 1, 2), + 'MI': pad(date.getUTCMinutes(), 2), + 'M': date.getUTCMonth() + 1, + 'DDDD': daysFull[date.getUTCDay()], + 'DDD': daysAbbr[date.getUTCDay()], + 'DD': pad(date.getUTCDate(), 2), + 'D': date.getUTCDate(), + 'HH24': pad(date.getUTCHours(), 2), + 'HH': pad(hours, 2), + 'H': hours, + 'SS': pad(date.getUTCSeconds(), 2), + 'PP': (date.getUTCHours() >= 12) ? 'PM' : 'AM', + 'P': (date.getUTCHours() >= 12) ? 'pm' : 'am', + 'LL': pad(date.getUTCMilliseconds(), 3) + }; + }; +}()); diff --git a/src/main/websrc/js/common/dates.js b/src/main/websrc/js/common/dates.js new file mode 100644 index 0000000..212a681 --- /dev/null +++ b/src/main/websrc/js/common/dates.js @@ -0,0 +1,75 @@ + +Date.getFirstDay = function(date){ + return new Date(date.getFullYear(),date.getMonth(),1); +}; + +Date.isSameDay = function(d1, d2){ + return d1 && d2 && (d1.getFullYear() === d2.getFullYear()) && (d1.getMonth() === d2.getMonth()) && (d1.getDate() === d2.getDate()); +} + +Date.prototype.isSameDay = function(date) { + return Date.isSameDay(this,date); +}; +Date.prototype.yestDay = function(){ + this.setDate(this.getDate()-1); + var d = this.toLocaleDateString(); + var YY = this.getFullYear(), + MM = this.getMonth() + 1, + DD = this.getDate(); + if (MM < 10) MM = "0" + MM; + if (DD < 10) DD = "0" + DD; + return YY + "-" + MM + "-" + DD +} +Date.prototype.Format = function (fmt) { //author: meizz + var o = { + "M+": this.getMonth() + 1, //月份 + "d+": this.getDate(), //日 + "h+": this.getHours(), //小时 + "m+": this.getMinutes(), //分 + "s+": this.getSeconds(), //秒 + "q+": Math.floor((this.getMonth() + 3) / 3), //季度 + "S": this.getMilliseconds() //毫秒 + }; + if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); + for (var k in o) + if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); + return fmt; +} +Date.prototype.rangeDate = function(endDate){ + var dates = []; + dates.push(this.Format("yyyy-MM-dd")); + if(!this.isSameDay(endDate)){ + this.setDate(this.getDate()+1); + while(!this.isSameDay(endDate)){ + dates.push(this.Format("yyyy-MM-dd")); + this.setDate(this.getDate()+1); + } + dates.push(endDate.Format("yyyy-MM-dd")); + } + return dates; +} +function rangeDate(sDate,eDate){ + return new Date(sDate).rangeDate(new Date(eDate)); +} + +function diffDate(sDate,eDate){ + return (new Date(eDate) - new Date(sDate))/(24*3600*1000) + 1; +} + +function addDate(date,days){ + var d = new Date(date); + d.setDate(d.getDate()+days); + return d.Format("yyyy-MM-dd"); +} + +function getNowWeek(){ + var today = Date.today(); + var firstDay = new Date(today.getFullYear(), 0, 1),fw = firstDay.getDay(); + var endDay = firstDay.clone(),n = 0; + if( fw > 0){ + endDay = endDay.addDays(8-fw); + n = 1; + } + var days = diffDate(endDay , today); + return Math.ceil(days/7) + n; +} \ No newline at end of file diff --git a/src/main/websrc/js/common/echarts.min.js b/src/main/websrc/js/common/echarts.min.js new file mode 100644 index 0000000..d1384e1 --- /dev/null +++ b/src/main/websrc/js/common/echarts.min.js @@ -0,0 +1,35 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.echarts=e():t.echarts=e()}(this,function(){return function(t){function e(n){if(i[n])return i[n].exports;var o=i[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var i={};return e.m=t,e.c=i,e.p="",e(0)}([function(t,e,i){t.exports=i(2),i(96),i(90),i(101),i(176),i(301),i(290),i(311),i(265),i(261),i(257),i(297),i(306),i(243),i(248),i(254),i(286),i(278),i(35),i(189),i(212),i(334),i(331),i(230),i(338),i(324),i(203),i(179),i(349),i(196),i(195),i(194),i(339),i(204),i(220)},function(t,e){function i(t){if("object"==typeof t&&null!==t){var e=t;if(t instanceof Array){e=[];for(var n=0,o=t.length;n<o;n++)e[n]=i(t[n])}else if(!M(t)&&!T(t)){e={};for(var r in t)t.hasOwnProperty(r)&&(e[r]=i(t[r]))}return e}return t}function n(t,e,o){if(!S(e)||!S(t))return o?i(e):t;for(var r in e)if(e.hasOwnProperty(r)){var a=t[r],s=e[r];!S(s)||!S(a)||_(s)||_(a)||T(s)||T(a)||M(s)||M(a)?!o&&r in t||(t[r]=i(e[r],!0)):n(a,s,o)}return t}function o(t,e){for(var i=t[0],o=1,r=t.length;o<r;o++)i=n(i,t[o],e);return i}function r(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);return t}function a(t,e,i){for(var n in e)e.hasOwnProperty(n)&&(i?null!=e[n]:null==t[n])&&(t[n]=e[n]);return t}function s(){return document.createElement("canvas")}function l(){return C||(C=N.createCanvas().getContext("2d")),C}function u(t,e){if(t){if(t.indexOf)return t.indexOf(e);for(var i=0,n=t.length;i<n;i++)if(t[i]===e)return i}return-1}function h(t,e){function i(){}var n=t.prototype;i.prototype=e.prototype,t.prototype=new i;for(var o in n)t.prototype[o]=n[o];t.prototype.constructor=t,t.superClass=e}function c(t,e,i){t="prototype"in t?t.prototype:t,e="prototype"in e?e.prototype:e,a(t,e,i)}function d(t){if(t)return"string"!=typeof t&&"number"==typeof t.length}function f(t,e,i){if(t&&e)if(t.forEach&&t.forEach===z)t.forEach(e,i);else if(t.length===+t.length)for(var n=0,o=t.length;n<o;n++)e.call(i,t[n],n,t);else for(var r in t)t.hasOwnProperty(r)&&e.call(i,t[r],r,t)}function p(t,e,i){if(t&&e){if(t.map&&t.map===R)return t.map(e,i);for(var n=[],o=0,r=t.length;o<r;o++)n.push(e.call(i,t[o],o,t));return n}}function g(t,e,i,n){if(t&&e){if(t.reduce&&t.reduce===V)return t.reduce(e,i,n);for(var o=0,r=t.length;o<r;o++)i=e.call(n,i,t[o],o,t);return i}}function m(t,e,i){if(t&&e){if(t.filter&&t.filter===O)return t.filter(e,i);for(var n=[],o=0,r=t.length;o<r;o++)e.call(i,t[o],o,t)&&n.push(t[o]);return n}}function v(t,e,i){if(t&&e)for(var n=0,o=t.length;n<o;n++)if(e.call(i,t[n],n,t))return t[n]}function y(t,e){var i=E.call(arguments,2);return function(){return t.apply(e,i.concat(E.call(arguments)))}}function x(t){var e=E.call(arguments,1);return function(){return t.apply(this,e.concat(E.call(arguments)))}}function _(t){return"[object Array]"===P.call(t)}function b(t){return"function"==typeof t}function w(t){return"[object String]"===P.call(t)}function S(t){var e=typeof t;return"function"===e||!!t&&"object"==e}function M(t){return!!D[P.call(t)]}function T(t){return t&&1===t.nodeType&&"string"==typeof t.nodeName}function I(t){for(var e=0,i=arguments.length;e<i;e++)if(null!=arguments[e])return arguments[e]}function A(){return Function.call.apply(E,arguments)}function L(t,e){if(!t)throw new Error(e)}var C,D={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1,"[object CanvasPattern]":1,"[object Image]":1},P=Object.prototype.toString,k=Array.prototype,z=k.forEach,O=k.filter,E=k.slice,R=k.map,V=k.reduce,N={inherits:h,mixin:c,clone:i,merge:n,mergeAll:o,extend:r,defaults:a,getContext:l,createCanvas:s,indexOf:u,slice:A,find:v,isArrayLike:d,each:f,map:p,reduce:g,filter:m,bind:y,curry:x,isArray:_,isString:w,isObject:S,isFunction:b,isBuildInObject:M,isDom:T,retrieve:I,assert:L,noop:function(){}};t.exports=N},function(t,e,i){function n(t){return function(e,i,n){e=e&&e.toLowerCase(),E.prototype[t].call(this,e,i,n)}}function o(){E.call(this)}function r(t,e,i){function n(t,e){return t.prio-e.prio}i=i||{},"string"==typeof e&&(e=it[e]),this.id,this.group,this._dom=t,this._zr=k.init(t,{renderer:i.renderer||"canvas",devicePixelRatio:i.devicePixelRatio,width:i.width,height:i.height}),this._theme=z.clone(e),this._chartsViews=[],this._chartsMap={},this._componentsViews=[],this._componentsMap={},this._api=new S(this),this._coordSysMgr=new M,E.call(this),this._messageCenter=new o,this._initEvents(),this.resize=z.bind(this.resize,this),this._pendingActions=[],R(et,n),R(J,n),this._zr.animation.on("frame",this._onframe,this)}function a(t,e,i){var n,o=this._model,r=this._coordSysMgr.getCoordinateSystems();e=P.parseFinder(o,e);for(var a=0;a<r.length;a++){var s=r[a];if(s[t]&&null!=(n=s[t](o,e,i)))return n}}function s(t,e){var i=this._model;i&&i.eachComponent({mainType:"series",query:e},function(n,o){var r=this._chartsMap[n.__viewId];r&&r.__alive&&r[t](n,i,this._api,e)},this)}function l(t,e){var i=Q[t.type],n=i.actionInfo,o=n.update||"update";this[q]=!0;var r=[t],a=!1;t.batch&&(a=!0,r=z.map(t.batch,function(e){return e=z.defaults(z.extend({},e),t),e.batch=null,e}));for(var s,l=[],u="highlight"===t.type||"downplay"===t.type,h=0;h<r.length;h++){var c=r[h];s=i.action(c,this._model),s=s||z.extend({},c),s.type=n.event||s.type,l.push(s),u&&Y[o].call(this,c)}"none"===o||u||(this[U]?(Y.prepareAndUpdate.call(this,t),this[U]=!1):Y[o].call(this,t)),s=a?{type:n.event||t.type,batch:l}:l[0],this[q]=!1,!e&&this._messageCenter.trigger(s.type,s)}function u(t){for(var e=this._pendingActions;e.length;){var i=e.shift();l.call(this,i,t)}}function h(t,e,i){var n=this._api;V(this._componentsViews,function(o){var r=o.__model;o[t](r,e,n,i),x(r,o)},this),e.eachSeries(function(o,r){var a=this._chartsMap[o.__viewId];a[t](o,e,n,i),x(o,a),y(o,a)},this),v(this._zr,e)}function c(t,e){for(var i="component"===t,n=i?this._componentsViews:this._chartsViews,o=i?this._componentsMap:this._chartsMap,r=this._zr,a=0;a<n.length;a++)n[a].__alive=!1;e[i?"eachComponent":"eachSeries"](function(t,a){if(i){if("series"===t)return}else a=t;var s=a.id+"_"+a.type,l=o[s];if(!l){var u=I.parseClassType(a.type),h=i?L.getClass(u.main,u.sub):C.getClass(u.sub);if(!h)return;l=new h,l.init(e,this._api),o[s]=l,n.push(l),r.add(l.group)}a.__viewId=s,l.__alive=!0,l.__id=s,l.__model=a},this);for(var a=0;a<n.length;){var s=n[a];s.__alive?a++:(r.remove(s.group),s.dispose(e,this._api),n.splice(a,1),delete o[s.__id])}}function d(t,e){V(J,function(i){i.func(t,e)})}function f(t){var e={};t.eachSeries(function(t){var i=t.get("stack"),n=t.getData();if(i&&"list"===n.type){var o=e[i];o&&(n.stackedOn=o),e[i]=n}})}function p(t,e){var i=this._api;V(et,function(n){n.isLayout&&n.func(t,i,e)})}function g(t,e){var i=this._api;t.clearColorPalette(),t.eachSeries(function(t){t.clearColorPalette()}),V(et,function(n){n.func(t,i,e)})}function m(t,e){var i=this._api;V(this._componentsViews,function(n){var o=n.__model;n.render(o,t,i,e),x(o,n)},this),V(this._chartsViews,function(t){t.__alive=!1},this),t.eachSeries(function(n,o){var r=this._chartsMap[n.__viewId];r.__alive=!0,r.render(n,t,i,e),r.group.silent=!!n.get("silent"),x(n,r),y(n,r)},this),v(this._zr,t),V(this._chartsViews,function(e){e.__alive||e.remove(t,i)},this)}function v(t,e){var i=t.storage,n=0;i.traverse(function(t){t.isGroup||n++}),n>e.get("hoverLayerThreshold")&&!b.node&&i.traverse(function(t){t.isGroup||(t.useHoverLayer=!0)})}function y(t,e){var i=0;e.group.traverse(function(t){"group"===t.type||t.ignore||i++});var n=+t.get("progressive"),o=i>t.get("progressiveThreshold")&&n&&!b.node;o&&e.group.traverse(function(t){t.isGroup||(t.progressive=o?Math.floor(i++/n):-1,o&&t.stopAnimation(!0))});var r=t.get("blendMode")||null;e.group.traverse(function(t){t.isGroup||t.setStyle("blend",r)})}function x(t,e){var i=t.get("z"),n=t.get("zlevel");e.group.traverse(function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=n&&(t.zlevel=n))})}function _(t){function e(t,e){for(var i=0;i<t.length;i++){var n=t[i];n[r]=e}}var i=0,n=1,o=2,r="__connectUpdateStatus";z.each(K,function(a,s){t._messageCenter.on(s,function(a){if(rt[t.group]&&t[r]!==i){var s=t.makeActionFromEvent(a),l=[];z.each(ot,function(e){e!==t&&e.group===t.group&&l.push(e)}),e(l,i),V(l,function(t){t[r]!==n&&t.dispatchAction(s)}),e(l,o)}})})}/*! + * ECharts, a javascript interactive chart library. + * + * Copyright (c) 2015, Baidu Inc. + * All rights reserved. + * + * LICENSE + * https://github.com/ecomfe/echarts/blob/master/LICENSE.txt + */ +var b=i(11),w=i(124),S=i(89),M=i(23),T=i(125),I=i(12),A=i(15),L=i(57),C=i(27),D=i(3),P=i(7),k=i(76),z=i(1),O=i(18),E=i(20),R=i(44),V=z.each,N=1e3,B=5e3,G=1e3,F=2e3,H=3e3,W=4e3,Z=5e3,q="__flagInMainProcess",j="__hasGradientOrPatternBg",U="__optionUpdated";o.prototype.on=n("on"),o.prototype.off=n("off"),o.prototype.one=n("one"),z.mixin(o,E);var X=r.prototype;X._onframe=function(){this[U]&&(this[q]=!0,Y.prepareAndUpdate.call(this),this[q]=!1,this[U]=!1)},X.getDom=function(){return this._dom},X.getZr=function(){return this._zr},X.setOption=function(t,e,i){if(this[q]=!0,!this._model||e){var n=new T(this._api),o=this._theme,r=this._model=new w(null,null,o,n);r.init(null,null,o,n)}this._model.setOption(t,tt),i?this[U]=!0:(Y.prepareAndUpdate.call(this),this._zr.flush(),this[U]=!1),this[q]=!1,u.call(this,!1)},X.setTheme=function(){console.log("ECharts#setTheme() is DEPRECATED in ECharts 3.0")},X.getModel=function(){return this._model},X.getOption=function(){return this._model&&this._model.getOption()},X.getWidth=function(){return this._zr.getWidth()},X.getHeight=function(){return this._zr.getHeight()},X.getRenderedCanvas=function(t){if(b.canvasSupported){t=t||{},t.pixelRatio=t.pixelRatio||1,t.backgroundColor=t.backgroundColor||this._model.get("backgroundColor");var e=this._zr,i=e.storage.getDisplayList();return z.each(i,function(t){t.stopAnimation(!0)}),e.painter.getRenderedCanvas(t)}},X.getDataURL=function(t){t=t||{};var e=t.excludeComponents,i=this._model,n=[],o=this;V(e,function(t){i.eachComponent({mainType:t},function(t){var e=o._componentsMap[t.__viewId];e.group.ignore||(n.push(e),e.group.ignore=!0)})});var r=this.getRenderedCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return V(n,function(t){t.group.ignore=!1}),r},X.getConnectedDataURL=function(t){if(b.canvasSupported){var e=this.group,i=Math.min,n=Math.max,o=1/0;if(rt[e]){var r=o,a=o,s=-o,l=-o,u=[],h=t&&t.pixelRatio||1;z.each(ot,function(o,h){if(o.group===e){var c=o.getRenderedCanvas(z.clone(t)),d=o.getDom().getBoundingClientRect();r=i(d.left,r),a=i(d.top,a),s=n(d.right,s),l=n(d.bottom,l),u.push({dom:c,left:d.left,top:d.top})}}),r*=h,a*=h,s*=h,l*=h;var c=s-r,d=l-a,f=z.createCanvas();f.width=c,f.height=d;var p=k.init(f);return V(u,function(t){var e=new D.Image({style:{x:t.left*h-r,y:t.top*h-a,image:t.dom}});p.add(e)}),p.refreshImmediately(),f.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}},X.convertToPixel=z.curry(a,"convertToPixel"),X.convertFromPixel=z.curry(a,"convertFromPixel"),X.containPixel=function(t,e){var i,n=this._model;return t=P.parseFinder(n,t),z.each(t,function(t,n){n.indexOf("Models")>=0&&z.each(t,function(t){var o=t.coordinateSystem;if(o&&o.containPoint)i|=!!o.containPoint(e);else if("seriesModels"===n){var r=this._chartsMap[t.__viewId];r&&r.containPoint&&(i|=r.containPoint(e,t))}},this)},this),!!i},X.getVisual=function(t,e){var i=this._model;t=P.parseFinder(i,t,{defaultMainType:"series"});var n=t.seriesModel,o=n.getData(),r=t.hasOwnProperty("dataIndexInside")?t.dataIndexInside:t.hasOwnProperty("dataIndex")?o.indexOfRawIndex(t.dataIndex):null;return null!=r?o.getItemVisual(r,e):o.getVisual(e)};var Y={update:function(t){var e=this._model,i=this._api,n=this._coordSysMgr,o=this._zr;if(e){e.restoreData(),n.create(this._model,this._api),d.call(this,e,i),f.call(this,e),n.update(e,i),g.call(this,e,t),m.call(this,e,t);var r=e.get("backgroundColor")||"transparent",a=o.painter;if(a.isSingleCanvas&&a.isSingleCanvas())o.configLayer(0,{clearColor:r});else{if(!b.canvasSupported){var s=O.parse(r);r=O.stringify(s,"rgb"),0===s[3]&&(r="transparent")}r.colorStops||r.image?(o.configLayer(0,{clearColor:r}),this[j]=!0,this._dom.style.background="transparent"):(this[j]&&o.configLayer(0,{clearColor:null}),this[j]=!1,this._dom.style.background=r)}}},updateView:function(t){var e=this._model;e&&(e.eachSeries(function(t){t.getData().clearAllVisual()}),g.call(this,e,t),h.call(this,"updateView",e,t))},updateVisual:function(t){var e=this._model;e&&(e.eachSeries(function(t){t.getData().clearAllVisual()}),g.call(this,e,t),h.call(this,"updateVisual",e,t))},updateLayout:function(t){var e=this._model;e&&(p.call(this,e,t),h.call(this,"updateLayout",e,t))},highlight:function(t){s.call(this,"highlight",t)},downplay:function(t){s.call(this,"downplay",t)},prepareAndUpdate:function(t){var e=this._model;c.call(this,"component",e),c.call(this,"chart",e),Y.update.call(this,t)}};X.resize=function(t){this[q]=!0,this._zr.resize(t);var e=this._model&&this._model.resetOption("media");Y[e?"prepareAndUpdate":"update"].call(this),this._loadingFX&&this._loadingFX.resize(),this[q]=!1,u.call(this)},X.showLoading=function(t,e){if(z.isObject(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),nt[t]){var i=nt[t](this._api,e),n=this._zr;this._loadingFX=i,n.add(i)}},X.hideLoading=function(){this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},X.makeActionFromEvent=function(t){var e=z.extend({},t);return e.type=K[t.type],e},X.dispatchAction=function(t,e){if(Q[t.type]){if(this[q])return void this._pendingActions.push(t);l.call(this,t,e),this._zr.flush(),u.call(this,e)}},X.on=n("on"),X.off=n("off"),X.one=n("one");var $=["click","dblclick","mouseover","mouseout","mousemove","mousedown","mouseup","globalout","contextmenu"];X._initEvents=function(){V($,function(t){this._zr.on(t,function(e){var i,n=this.getModel(),o=e.target;if("globalout"===t)i={};else if(o&&null!=o.dataIndex){var r=o.dataModel||n.getSeriesByIndex(o.seriesIndex);i=r&&r.getDataParams(o.dataIndex,o.dataType)||{}}else o&&o.eventData&&(i=z.extend({},o.eventData));i&&(i.event=e,i.type=t,this.trigger(t,i))},this)},this),V(K,function(t,e){this._messageCenter.on(e,function(t){this.trigger(e,t)},this)},this)},X.isDisposed=function(){return this._disposed},X.clear=function(){this.setOption({series:[]},!0)},X.dispose=function(){if(!this._disposed){this._disposed=!0;var t=this._api,e=this._model;V(this._componentsViews,function(i){i.dispose(e,t)}),V(this._chartsViews,function(i){i.dispose(e,t)}),this._zr.dispose(),delete ot[this.id]}},z.mixin(r,E);var Q=[],K={},J=[],tt=[],et=[],it={},nt={},ot={},rt={},at=new Date-0,st=new Date-0,lt="_echarts_instance_",ut={version:"3.3.1",dependencies:{zrender:"3.2.1"}};ut.init=function(t,e,i){var n=new r(t,e,i);return n.id="ec_"+at++,ot[n.id]=n,t.setAttribute&&t.setAttribute(lt,n.id),_(n),n},ut.connect=function(t){if(z.isArray(t)){var e=t;t=null,z.each(e,function(e){null!=e.group&&(t=e.group)}),t=t||"g_"+st++,z.each(e,function(e){e.group=t})}return rt[t]=!0,t},ut.disConnect=function(t){rt[t]=!1},ut.dispose=function(t){z.isDom(t)?t=ut.getInstanceByDom(t):"string"==typeof t&&(t=ot[t]),t instanceof r&&!t.isDisposed()&&t.dispose()},ut.getInstanceByDom=function(t){var e=t.getAttribute(lt);return ot[e]},ut.getInstanceById=function(t){return ot[t]},ut.registerTheme=function(t,e){it[t]=e},ut.registerPreprocessor=function(t){tt.push(t)},ut.registerProcessor=function(t,e){"function"==typeof t&&(e=t,t=N),J.push({prio:t,func:e})},ut.registerAction=function(t,e,i){"function"==typeof e&&(i=e,e="");var n=z.isObject(t)?t.type:[t,t={event:e}][0];t.event=(t.event||n).toLowerCase(),e=t.event,Q[n]||(Q[n]={action:i,actionInfo:t}),K[e]=n},ut.registerCoordinateSystem=function(t,e){M.register(t,e)},ut.registerLayout=function(t,e){"function"==typeof t&&(e=t,t=G),et.push({prio:t,func:e,isLayout:!0})},ut.registerVisual=function(t,e){"function"==typeof t&&(e=t,t=H),et.push({prio:t,func:e})},ut.registerLoading=function(t,e){nt[t]=e};var ht=I.parseClassType;ut.extendComponentModel=function(t,e){var i=I;if(e){var n=ht(e);i=I.getClass(n.main,n.sub,!0)}return i.extend(t)},ut.extendComponentView=function(t,e){var i=L;if(e){var n=ht(e);i=L.getClass(n.main,n.sub,!0)}return i.extend(t)},ut.extendSeriesModel=function(t,e){var i=A;if(e){e="series."+e.replace("series.","");var n=ht(e);i=I.getClass(n.main,n.sub,!0)}return i.extend(t)},ut.extendChartView=function(t,e){var i=C;if(e){e.replace("series.","");var n=ht(e);i=C.getClass(n.main,!0)}return i.extend(t)},ut.setCanvasCreator=function(t){z.createCanvas=t},ut.registerVisual(F,i(138)),ut.registerPreprocessor(i(132)),ut.registerLoading("default",i(123)),ut.registerAction({type:"highlight",event:"highlight",update:"highlight"},z.noop),ut.registerAction({type:"downplay",event:"downplay",update:"downplay"},z.noop),ut.List=i(14),ut.Model=i(10),ut.graphic=i(3),ut.number=i(4),ut.format=i(9),ut.matrix=i(19),ut.vector=i(5),ut.color=i(18),ut.util={},V(["map","each","filter","indexOf","inherits","reduce","filter","bind","curry","isArray","isString","isObject","isFunction","extend","defaults"],function(t){ut.util[t]=z[t]}),ut.PRIORITY={PROCESSOR:{FILTER:N,STATISTIC:B},VISUAL:{LAYOUT:G,GLOBAL:F,CHART:H,COMPONENT:W,BRUSH:Z}},t.exports=ut},function(t,e,i){"use strict";function n(t){return null!=t&&"none"!=t}function o(t){return"string"==typeof t?_.lift(t,-.1):t}function r(t){if(t.__hoverStlDirty){var e=t.style.stroke,i=t.style.fill,r=t.__hoverStl;r.fill=r.fill||(n(i)?o(i):null),r.stroke=r.stroke||(n(e)?o(e):null);var a={};for(var s in r)r.hasOwnProperty(s)&&(a[s]=t.style[s]);t.__normalStl=a,t.__hoverStlDirty=!1}}function a(t){t.__isHover||(r(t),t.useHoverLayer?t.__zr&&t.__zr.addHover(t,t.__hoverStl):(t.setStyle(t.__hoverStl),t.z2+=1),t.__isHover=!0)}function s(t){if(t.__isHover){var e=t.__normalStl;t.useHoverLayer?t.__zr&&t.__zr.removeHover(t):(e&&t.setStyle(e),t.z2-=1),t.__isHover=!1}}function l(t){"group"===t.type?t.traverse(function(t){"group"!==t.type&&a(t)}):a(t)}function u(t){"group"===t.type?t.traverse(function(t){"group"!==t.type&&s(t)}):s(t)}function h(t,e){t.__hoverStl=t.hoverStyle||e||{},t.__hoverStlDirty=!0,t.__isHover&&r(t)}function c(){!this.__isEmphasis&&l(this)}function d(){!this.__isEmphasis&&u(this)}function f(){this.__isEmphasis=!0,l(this)}function p(){this.__isEmphasis=!1,u(this)}function g(t,e,i,n,o,r){"function"==typeof o&&(r=o,o=null);var a=n&&(n.ifEnableAnimation?n.ifEnableAnimation():n.getShallow("animation"));if(a){var s=t?"Update":"",l=n&&n.getShallow("animationDuration"+s),u=n&&n.getShallow("animationEasing"+s),h=n&&n.getShallow("animationDelay"+s);"function"==typeof h&&(h=h(o)),l>0?e.animateTo(i,l,h||0,u,r):(e.attr(i),r&&r())}else e.attr(i),r&&r()}var m=i(1),v=i(168),y=Math.round,x=i(6),_=i(18),b=i(19),w=i(5),S={};S.Group=i(33),S.Image=i(48),S.Text=i(74),S.Circle=i(159),S.Sector=i(165),S.Ring=i(164),S.Polygon=i(161),S.Polyline=i(162),S.Rect=i(163),S.Line=i(160),S.BezierCurve=i(158),S.Arc=i(157),S.CompoundPath=i(152),S.LinearGradient=i(87),S.RadialGradient=i(153),S.BoundingRect=i(8),S.extendShape=function(t){return x.extend(t)},S.extendPath=function(t,e){return v.extendFromString(t,e)},S.makePath=function(t,e,i,n){var o=v.createFromString(t,e),r=o.getBoundingRect();if(i){var a=r.width/r.height;if("center"===n){var s,l=i.height*a;l<=i.width?s=i.height:(l=i.width,s=l/a);var u=i.x+i.width/2,h=i.y+i.height/2;i.x=u-l/2,i.y=h-s/2,i.width=l,i.height=s}this.resizePath(o,i)}return o},S.mergePath=v.mergePath,S.resizePath=function(t,e){if(t.applyTransform){var i=t.getBoundingRect(),n=i.calculateTransform(e);t.applyTransform(n)}},S.subPixelOptimizeLine=function(t){var e=S.subPixelOptimize,i=t.shape,n=t.style.lineWidth;return y(2*i.x1)===y(2*i.x2)&&(i.x1=i.x2=e(i.x1,n,!0)),y(2*i.y1)===y(2*i.y2)&&(i.y1=i.y2=e(i.y1,n,!0)),t},S.subPixelOptimizeRect=function(t){var e=S.subPixelOptimize,i=t.shape,n=t.style.lineWidth,o=i.x,r=i.y,a=i.width,s=i.height;return i.x=e(i.x,n,!0),i.y=e(i.y,n,!0),i.width=Math.max(e(o+a,n,!1)-i.x,0===a?0:1),i.height=Math.max(e(r+s,n,!1)-i.y,0===s?0:1),t},S.subPixelOptimize=function(t,e,i){var n=y(2*t);return(n+y(e))%2===0?n/2:(n+(i?1:-1))/2},S.setHoverStyle=function(t,e){"group"===t.type?t.traverse(function(t){"group"!==t.type&&h(t,e)}):h(t,e),t.on("mouseover",c).on("mouseout",d),t.on("emphasis",f).on("normal",p)},S.setText=function(t,e,i){var n=e.getShallow("position")||"inside",o=n.indexOf("inside")>=0?"white":i,r=e.getModel("textStyle");m.extend(t,{textDistance:e.getShallow("distance")||5,textFont:r.getFont(),textPosition:n,textFill:r.getTextColor()||o})},S.updateProps=function(t,e,i,n,o){g(!0,t,e,i,n,o)},S.initProps=function(t,e,i,n,o){g(!1,t,e,i,n,o)},S.getTransform=function(t,e){for(var i=b.identity([]);t&&t!==e;)b.mul(i,t.getLocalTransform(),i),t=t.parent;return i},S.applyTransform=function(t,e,i){return i&&(e=b.invert([],e)),w.applyTransform([],t,e)},S.transformDirection=function(t,e,i){var n=0===e[4]||0===e[5]||0===e[0]?1:Math.abs(2*e[4]/e[0]),o=0===e[4]||0===e[5]||0===e[2]?1:Math.abs(2*e[4]/e[2]),r=["left"===t?-n:"right"===t?n:0,"top"===t?-o:"bottom"===t?o:0];return r=S.applyTransform(r,e,i),Math.abs(r[0])>Math.abs(r[1])?r[0]>0?"right":"left":r[1]>0?"bottom":"top"},S.groupTransition=function(t,e,i,n){function o(t){var e={};return t.traverse(function(t){!t.isGroup&&t.anid&&(e[t.anid]=t)}),e}function r(t){var e={position:w.clone(t.position),rotation:t.rotation};return t.shape&&(e.shape=m.extend({},t.shape)),e}if(t&&e){var a=o(t);e.traverse(function(t){if(!t.isGroup&&t.anid){var e=a[t.anid];if(e){var n=r(t);t.attr(r(e)),S.updateProps(t,n,i,t.dataIndex)}}})}},t.exports=S},function(t,e){function i(t){return t.replace(/^\s+/,"").replace(/\s+$/,"")}var n={},o=1e-4;n.linearMap=function(t,e,i,n){var o=e[1]-e[0],r=i[1]-i[0];if(0===o)return 0===r?i[0]:(i[0]+i[1])/2;if(n)if(o>0){if(t<=e[0])return i[0];if(t>=e[1])return i[1]}else{if(t>=e[0])return i[0];if(t<=e[1])return i[1]}else{if(t===e[0])return i[0];if(t===e[1])return i[1]}return(t-e[0])/o*r+i[0]},n.parsePercent=function(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"string"==typeof t?i(t).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t},n.round=function(t,e){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),+(+t).toFixed(e)},n.asc=function(t){return t.sort(function(t,e){return t-e}),t},n.getPrecision=function(t){if(t=+t,isNaN(t))return 0;for(var e=1,i=0;Math.round(t*e)/e!==t;)e*=10,i++;return i},n.getPrecisionSafe=function(t){var e=t.toString(),i=e.indexOf(".");return i<0?0:e.length-1-i},n.getPixelPrecision=function(t,e){var i=Math.log,n=Math.LN10,o=Math.floor(i(t[1]-t[0])/n),r=Math.round(i(Math.abs(e[1]-e[0]))/n);return Math.max(-o+r,0)},n.MAX_SAFE_INTEGER=9007199254740991,n.remRadian=function(t){var e=2*Math.PI;return(t%e+e)%e},n.isRadianAroundZero=function(t){return t>-o&&t<o},n.parseDate=function(t){if(t instanceof Date)return t;if("string"==typeof t){var e=new Date(t);return isNaN(+e)&&(e=new Date(new Date(t.replace(/-/g,"/"))-new Date("1970/01/01"))),e}return new Date(Math.round(t))},n.quantity=function(t){return Math.pow(10,Math.floor(Math.log(t)/Math.LN10))},n.nice=function(t,e){var i,o=n.quantity(t),r=t/o;return i=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*o},t.exports=n},function(t,e){var i="undefined"==typeof Float32Array?Array:Float32Array,n={create:function(t,e){var n=new i(2);return null==t&&(t=0),null==e&&(e=0),n[0]=t,n[1]=e,n},copy:function(t,e){return t[0]=e[0],t[1]=e[1],t},clone:function(t){var e=new i(2);return e[0]=t[0],e[1]=t[1],e},set:function(t,e,i){return t[0]=e,t[1]=i,t},add:function(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t},scaleAndAdd:function(t,e,i,n){return t[0]=e[0]+i[0]*n,t[1]=e[1]+i[1]*n,t},sub:function(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t},len:function(t){return Math.sqrt(this.lenSquare(t))},lenSquare:function(t){return t[0]*t[0]+t[1]*t[1]},mul:function(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t},div:function(t,e,i){return t[0]=e[0]/i[0],t[1]=e[1]/i[1],t},dot:function(t,e){return t[0]*e[0]+t[1]*e[1]},scale:function(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t},normalize:function(t,e){var i=n.len(e);return 0===i?(t[0]=0,t[1]=0):(t[0]=e[0]/i,t[1]=e[1]/i),t},distance:function(t,e){return Math.sqrt((t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1]))},distanceSquare:function(t,e){return(t[0]-e[0])*(t[0]-e[0])+(t[1]-e[1])*(t[1]-e[1])},negate:function(t,e){return t[0]=-e[0],t[1]=-e[1],t},lerp:function(t,e,i,n){return t[0]=e[0]+n*(i[0]-e[0]),t[1]=e[1]+n*(i[1]-e[1]),t},applyTransform:function(t,e,i){var n=e[0],o=e[1];return t[0]=i[0]*n+i[2]*o+i[4],t[1]=i[1]*n+i[3]*o+i[5],t},min:function(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t},max:function(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t}};n.length=n.len,n.lengthSquare=n.lenSquare,n.dist=n.distance,n.distSquare=n.distanceSquare,t.exports=n},function(t,e,i){function n(t){o.call(this,t),this.path=new a}var o=i(36),r=i(1),a=i(28),s=i(148),l=i(63),u=l.prototype.getCanvasPattern,h=Math.abs;n.prototype={constructor:n,type:"path",__dirtyPath:!0,strokeContainThreshold:5,brush:function(t,e){var i=this.style,n=this.path,o=i.hasStroke(),r=i.hasFill(),a=i.fill,s=i.stroke,l=r&&!!a.colorStops,h=o&&!!s.colorStops,c=r&&!!a.image,d=o&&!!s.image;if(i.bind(t,this,e),this.setTransform(t),this.__dirty){var f=this.getBoundingRect();l&&(this._fillGradient=i.getGradient(t,a,f)),h&&(this._strokeGradient=i.getGradient(t,s,f))}l?t.fillStyle=this._fillGradient:c&&(t.fillStyle=u.call(a,t)),h?t.strokeStyle=this._strokeGradient:d&&(t.strokeStyle=u.call(s,t));var p=i.lineDash,g=i.lineDashOffset,m=!!t.setLineDash,v=this.getGlobalScale();n.setScale(v[0],v[1]),this.__dirtyPath||p&&!m&&o?(n=this.path.beginPath(t),p&&!m&&(n.setLineDash(p),n.setLineDashOffset(g)),this.buildPath(n,this.shape,!1),this.__dirtyPath=!1):(t.beginPath(),this.path.rebuildPath(t)),r&&n.fill(t),p&&m&&(t.setLineDash(p),t.lineDashOffset=g),o&&n.stroke(t),p&&m&&t.setLineDash([]),this.restoreTransform(t),null!=i.text&&this.drawRectText(t,this.getBoundingRect())},buildPath:function(t,e,i){},getBoundingRect:function(){var t=this._rect,e=this.style,i=!t;if(i){var n=this.path;this.__dirtyPath&&(n.beginPath(),this.buildPath(n,this.shape,!1)),t=n.getBoundingRect()}if(this._rect=t,e.hasStroke()){var o=this._rectWithStroke||(this._rectWithStroke=t.clone());if(this.__dirty||i){o.copy(t);var r=e.lineWidth,a=e.strokeNoScale?this.getLineScale():1;e.hasFill()||(r=Math.max(r,this.strokeContainThreshold||4)),a>1e-10&&(o.width+=r/a,o.height+=r/a,o.x-=r/a/2,o.y-=r/a/2)}return o}return t},contain:function(t,e){var i=this.transformCoordToLocal(t,e),n=this.getBoundingRect(),o=this.style;if(t=i[0],e=i[1],n.contain(t,e)){var r=this.path.data;if(o.hasStroke()){var a=o.lineWidth,l=o.strokeNoScale?this.getLineScale():1;if(l>1e-10&&(o.hasFill()||(a=Math.max(a,this.strokeContainThreshold)),s.containStroke(r,a/l,t,e)))return!0}if(o.hasFill())return s.contain(r,t,e)}return!1},dirty:function(t){null==t&&(t=!0),t&&(this.__dirtyPath=t,this._rect=null),this.__dirty=!0,this.__zr&&this.__zr.refresh(),this.__clipTarget&&this.__clipTarget.dirty()},animateShape:function(t){return this.animate("shape",t)},attrKV:function(t,e){"shape"===t?(this.setShape(e),this.__dirtyPath=!0,this._rect=null):o.prototype.attrKV.call(this,t,e)},setShape:function(t,e){var i=this.shape;if(i){if(r.isObject(t))for(var n in t)t.hasOwnProperty(n)&&(i[n]=t[n]);else i[t]=e;this.dirty(!0)}return this},getLineScale:function(){var t=this.transform;return t&&h(t[0]-1)>1e-10&&h(t[3]-1)>1e-10?Math.sqrt(h(t[0]*t[3]-t[2]*t[1])):1}},n.extend=function(t){var e=function(e){n.call(this,e),t.style&&this.style.extendFrom(t.style,!1);var i=t.shape;if(i){this.shape=this.shape||{};var o=this.shape;for(var r in i)!o.hasOwnProperty(r)&&i.hasOwnProperty(r)&&(o[r]=i[r])}t.init&&t.init.call(this,e)};r.inherits(e,n);for(var i in t)"style"!==i&&"shape"!==i&&(e.prototype[i]=t[i]);return e},r.inherits(n,o),t.exports=n},function(t,e,i){function n(t,e){return t&&t.hasOwnProperty(e)}var o=i(9),r=i(4),a=i(10),s=i(1),l={};l.normalizeToArray=function(t){return t instanceof Array?t:null==t?[]:[t]},l.defaultEmphasis=function(t,e){if(t){var i=t.emphasis=t.emphasis||{},n=t.normal=t.normal||{};s.each(e,function(t){var e=s.retrieve(i[t],n[t]);null!=e&&(i[t]=e)})}},l.LABEL_OPTIONS=["position","show","textStyle","distance","formatter"],l.getDataItemValue=function(t){return t&&(null==t.value?t:t.value)},l.isDataItemOption=function(t){return s.isObject(t)&&!(t instanceof Array)},l.converDataValue=function(t,e){var i=e&&e.type;return"ordinal"===i?t:("time"!==i||isFinite(t)||null==t||"-"===t||(t=+r.parseDate(t)),null==t||""===t?NaN:+t)},l.createDataFormatModel=function(t,e){var i=new a;return s.mixin(i,l.dataFormatMixin),i.seriesIndex=e.seriesIndex,i.name=e.name||"",i.mainType=e.mainType,i.subType=e.subType,i.getData=function(){return t},i},l.dataFormatMixin={getDataParams:function(t,e){var i=this.getData(e),n=this.seriesIndex,o=this.name,r=this.getRawValue(t,e),a=i.getRawIndex(t),s=i.getName(t,!0),l=i.getRawDataItem(t);return{componentType:this.mainType,componentSubType:this.subType,seriesType:"series"===this.mainType?this.subType:null,seriesIndex:n,seriesName:o,name:s,dataIndex:a,data:l,dataType:e,value:r,color:i.getItemVisual(t,"color"),$vars:["seriesName","name","value"]}},getFormattedLabel:function(t,e,i,n){e=e||"normal";var r=this.getData(i),a=r.getItemModel(t),s=this.getDataParams(t,i);null!=n&&s.value instanceof Array&&(s.value=s.value[n]);var l=a.get(["label",e,"formatter"]);return"function"==typeof l?(s.status=e,l(s)):"string"==typeof l?o.formatTpl(l,s):void 0},getRawValue:function(t,e){var i=this.getData(e),n=i.getRawDataItem(t);if(null!=n)return!s.isObject(n)||n instanceof Array?n:n.value},formatTooltip:s.noop},l.mappingToExists=function(t,e){e=(e||[]).slice();var i=s.map(t||[],function(t,e){return{exist:t}});return s.each(e,function(t,n){if(s.isObject(t)){for(var o=0;o<i.length;o++)if(!i[o].option&&null!=t.id&&i[o].exist.id===t.id+"")return i[o].option=t,void(e[n]=null);for(var o=0;o<i.length;o++){var r=i[o].exist;if(!(i[o].option||null!=r.id&&null!=t.id||null==t.name||l.isIdInner(t)||l.isIdInner(r)||r.name!==t.name+""))return i[o].option=t,void(e[n]=null)}}}),s.each(e,function(t,e){if(s.isObject(t)){for(var n=0;n<i.length;n++){var o=i[n].exist;if(!i[n].option&&!l.isIdInner(o)&&null==t.id){i[n].option=t;break}}n>=i.length&&i.push({option:t})}}),i},l.isIdInner=function(t){return s.isObject(t)&&t.id&&0===(t.id+"").indexOf("\0_ec_\0")},l.compressBatches=function(t,e){function i(t,e,i){for(var n=0,o=t.length;n<o;n++)for(var r=t[n].seriesId,a=l.normalizeToArray(t[n].dataIndex),s=i&&i[r],u=0,h=a.length;u<h;u++){var c=a[u];s&&s[c]?s[c]=null:(e[r]||(e[r]={}))[c]=1}}function n(t,e){var i=[];for(var o in t)if(t.hasOwnProperty(o)&&null!=t[o])if(e)i.push(+o);else{var r=n(t[o],!0);r.length&&i.push({seriesId:o,dataIndex:r})}return i}var o={},r={};return i(t||[],o),i(e||[],r,o),[n(o),n(r)]},l.queryDataIndex=function(t,e){return null!=e.dataIndexInside?e.dataIndexInside:null!=e.dataIndex?s.isArray(e.dataIndex)?s.map(e.dataIndex,function(e){return t.indexOfRawIndex(e)}):t.indexOfRawIndex(e.dataIndex):null!=e.name?s.isArray(e.name)?s.map(e.name,function(e){return t.indexOfName(e)}):t.indexOfName(e.name):void 0},l.parseFinder=function(t,e,i){if(s.isString(e)){var o={};o[e+"Index"]=0,e=o}var r=i&&i.defaultMainType;!r||n(e,r+"Index")||n(e,r+"Id")||n(e,r+"Name")||(e[r+"Index"]=0);var a={};return s.each(e,function(i,n){var i=e[n];if("dataIndex"===n||"dataIndexInside"===n)return void(a[n]=i);var o=n.match(/^(\w+)(Index|Id|Name)$/)||[],r=o[1],s=o[2];if(r&&s){var l={mainType:r};l[s.toLowerCase()]=i;var u=t.queryComponents(l);a[r+"Models"]=u,a[r+"Model"]=u[0]}}),a},t.exports=l},function(t,e,i){"use strict";function n(t,e,i,n){i<0&&(t+=i,i=-i),n<0&&(e+=n,n=-n),this.x=t,this.y=e,this.width=i,this.height=n}var o=i(5),r=i(19),a=o.applyTransform,s=Math.min,l=Math.abs,u=Math.max;n.prototype={constructor:n,union:function(t){var e=s(t.x,this.x),i=s(t.y,this.y);this.width=u(t.x+t.width,this.x+this.width)-e,this.height=u(t.y+t.height,this.y+this.height)-i,this.x=e,this.y=i},applyTransform:function(){var t=[],e=[];return function(i){i&&(t[0]=this.x,t[1]=this.y,e[0]=this.x+this.width,e[1]=this.y+this.height,a(t,t,i),a(e,e,i),this.x=s(t[0],e[0]),this.y=s(t[1],e[1]),this.width=l(e[0]-t[0]),this.height=l(e[1]-t[1]))}}(),calculateTransform:function(t){var e=this,i=t.width/e.width,n=t.height/e.height,o=r.create();return r.translate(o,o,[-e.x,-e.y]),r.scale(o,o,[i,n]),r.translate(o,o,[t.x,t.y]),o},intersect:function(t){t instanceof n||(t=n.create(t));var e=this,i=e.x,o=e.x+e.width,r=e.y,a=e.y+e.height,s=t.x,l=t.x+t.width,u=t.y,h=t.y+t.height;return!(o<s||l<i||a<u||h<r)},contain:function(t,e){var i=this;return t>=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},clone:function(){return new n(this.x,this.y,this.width,this.height)},copy:function(t){this.x=t.x,this.y=t.y,this.width=t.width,this.height=t.height},plain:function(){return{x:this.x,y:this.y,width:this.width,height:this.height}}},n.create=function(t){return new n(t.x,t.y,t.width,t.height)},t.exports=n},function(t,e,i){var n=i(1),o=i(4),r=i(16),a={};a.addCommas=function(t){return isNaN(t)?"-":(t=(t+"").split("."),t[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(t.length>1?"."+t[1]:""))},a.toCamelCase=function(t){return t.toLowerCase().replace(/-(.)/g,function(t,e){return e.toUpperCase()})},a.normalizeCssArray=function(t){var e=t.length;return"number"==typeof t?[t,t,t,t]:2===e?[t[0],t[1],t[0],t[1]]:3===e?[t[0],t[1],t[2],t[1]]:t},a.encodeHTML=function(t){return String(t).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")};var s=["a","b","c","d","e","f","g"],l=function(t,e){return"{"+t+(null==e?"":e)+"}"};a.formatTpl=function(t,e){n.isArray(e)||(e=[e]);var i=e.length;if(!i)return"";for(var o=e[0].$vars||[],r=0;r<o.length;r++){var a=s[r];t=t.replace(l(a),l(a,0))}for(var u=0;u<i;u++)for(var h=0;h<o.length;h++)t=t.replace(l(s[h],u),e[u][o[h]]);return t};var u=function(t){return t<10?"0"+t:t};a.formatTime=function(t,e){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var i=o.parseDate(e),n=i.getFullYear(),r=i.getMonth()+1,a=i.getDate(),s=i.getHours(),l=i.getMinutes(),h=i.getSeconds();return t=t.replace("MM",u(r)).toLowerCase().replace("yyyy",n).replace("yy",n%100).replace("dd",u(a)).replace("d",a).replace("hh",u(s)).replace("h",s).replace("mm",u(l)).replace("m",l).replace("ss",u(h)).replace("s",h)},a.capitalFirst=function(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t},a.truncateText=r.truncateText,t.exports=a},function(t,e,i){function n(t,e,i){this.parentModel=e,this.ecModel=i,this.option=t}var o=i(1),r=i(21);n.prototype={constructor:n,init:null,mergeOption:function(t){o.merge(this.option,t,!0)},get:function(t,e){if(!t)return this.option;"string"==typeof t&&(t=t.split("."));for(var i=this.option,n=this.parentModel,o=0;o<t.length&&(!t[o]||(i=i&&"object"==typeof i?i[t[o]]:null,null!=i));o++);return null==i&&n&&!e&&(i=n.get(t)),i},getShallow:function(t,e){var i=this.option,n=null==i?i:i[t],o=this.parentModel;return null==n&&o&&!e&&(n=o.getShallow(t)),n},getModel:function(t,e){var i=this.get(t,!0),o=this.parentModel,r=new n(i,e||o&&o.getModel(t),this.ecModel);return r},isEmpty:function(){return null==this.option},restoreData:function(){},clone:function(){var t=this.constructor;return new t(o.clone(this.option))},setReadOnly:function(t){r.setReadOnly(this,t)}},r.enableClassExtend(n);var a=o.mixin;a(n,i(130)),a(n,i(127)),a(n,i(131)),a(n,i(129)),t.exports=n},function(t,e){function i(t){var e={},i={},n=t.match(/Firefox\/([\d.]+)/),o=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),r=t.match(/Edge\/([\d.]+)/);return n&&(i.firefox=!0,i.version=n[1]),o&&(i.ie=!0,i.version=o[1]),r&&(i.edge=!0,i.version=r[1]),{browser:i,os:e,node:!1,canvasSupported:!!document.createElement("canvas").getContext,touchEventsSupported:"ontouchstart"in window&&!i.ie&&!i.edge,pointerEventsSupported:"onpointerdown"in window&&(i.edge||i.ie&&i.version>=10)}}var n={};n="undefined"==typeof navigator?{browser:{},os:{},node:!0,canvasSupported:!0}:i(navigator.userAgent),t.exports=n},function(t,e,i){function n(t){var e=[];return r.each(h.getClassesByMainType(t),function(t){a.apply(e,t.prototype.dependencies||[])}),r.map(e,function(t){return l.parseClassType(t).main})}var o=i(10),r=i(1),a=Array.prototype.push,s=i(43),l=i(21),u=i(13),h=o.extend({type:"component",id:"",name:"",mainType:"",subType:"",componentIndex:0,defaultOption:null,ecModel:null,dependentModels:[],uid:null,layoutMode:null,$constructor:function(t,e,i,n){o.call(this,t,e,i,n),this.uid=s.getUID("componentModel")},init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i)},mergeDefaultAndTheme:function(t,e){var i=this.layoutMode,n=i?u.getLayoutParams(t):{},o=e.getTheme();r.merge(t,o.get(this.mainType)),r.merge(t,this.getDefaultOption()),i&&u.mergeLayoutParam(t,n,i)},mergeOption:function(t,e){r.merge(this.option,t,!0);var i=this.layoutMode;i&&u.mergeLayoutParam(this.option,t,i)},optionUpdated:function(t,e){},getDefaultOption:function(){if(!this.hasOwnProperty("__defaultOption")){for(var t=[],e=this.constructor;e;){var i=e.prototype.defaultOption;i&&t.push(i),e=e.superClass}for(var n={},o=t.length-1;o>=0;o--)n=r.merge(n,t[o],!0);this.__defaultOption=n}return this.__defaultOption},getReferringComponents:function(t){return this.ecModel.queryComponents({mainType:t,index:this.get(t+"Index",!0),id:this.get(t+"Id",!0)})}});l.enableClassManagement(h,{registerWhenExtend:!0}),s.enableSubTypeDefaulter(h),s.enableTopologicalTravel(h,n),r.mixin(h,i(128)),t.exports=h},function(t,e,i){"use strict";function n(t,e,i,n,o){var r=0,a=0;null==n&&(n=1/0),null==o&&(o=1/0);var s=0;e.eachChild(function(l,u){var h,c,d=l.position,f=l.getBoundingRect(),p=e.childAt(u+1),g=p&&p.getBoundingRect();if("horizontal"===t){var m=f.width+(g?-g.x+f.x:0);h=r+m,h>n||l.newline?(r=0,h=m,a+=s+i,s=f.height):s=Math.max(s,f.height)}else{var v=f.height+(g?-g.y+f.y:0);c=a+v,c>o||l.newline?(r+=s+i,a=0,c=v,s=f.width):s=Math.max(s,f.width)}l.newline||(d[0]=r,d[1]=a,"horizontal"===t?r=h+i:a=c+i)})}var o=i(1),r=i(8),a=i(4),s=i(9),l=a.parsePercent,u=o.each,h={},c=["left","right","top","bottom","width","height"];h.box=n,h.vbox=o.curry(n,"vertical"),h.hbox=o.curry(n,"horizontal"),h.getAvailableSize=function(t,e,i){var n=e.width,o=e.height,r=l(t.x,n),a=l(t.y,o),u=l(t.x2,n),h=l(t.y2,o);return(isNaN(r)||isNaN(parseFloat(t.x)))&&(r=0),(isNaN(u)||isNaN(parseFloat(t.x2)))&&(u=n),(isNaN(a)||isNaN(parseFloat(t.y)))&&(a=0),(isNaN(h)||isNaN(parseFloat(t.y2)))&&(h=o),i=s.normalizeCssArray(i||0),{width:Math.max(u-r-i[1]-i[3],0),height:Math.max(h-a-i[0]-i[2],0)}},h.getLayoutRect=function(t,e,i){i=s.normalizeCssArray(i||0);var n=e.width,o=e.height,a=l(t.left,n),u=l(t.top,o),h=l(t.right,n),c=l(t.bottom,o),d=l(t.width,n),f=l(t.height,o),p=i[2]+i[0],g=i[1]+i[3],m=t.aspect;switch(isNaN(d)&&(d=n-h-g-a),isNaN(f)&&(f=o-c-p-u),isNaN(d)&&isNaN(f)&&(m>n/o?d=.8*n:f=.8*o),null!=m&&(isNaN(d)&&(d=m*f),isNaN(f)&&(f=d/m)),isNaN(a)&&(a=n-h-d-g),isNaN(u)&&(u=o-c-f-p),t.left||t.right){case"center":a=n/2-d/2-i[3];break;case"right":a=n-d-g}switch(t.top||t.bottom){case"middle":case"center":u=o/2-f/2-i[0];break;case"bottom":u=o-f-p}a=a||0,u=u||0,isNaN(d)&&(d=n-a-(h||0)),isNaN(f)&&(f=o-u-(c||0));var v=new r(a+i[3],u+i[0],d,f);return v.margin=i,v},h.positionGroup=function(t,e,i,n){var r=t.getBoundingRect();e=o.extend(o.clone(e),{width:r.width,height:r.height}),e=h.getLayoutRect(e,i,n),t.attr("position",[e.x-r.x,e.y-r.y])},h.mergeLayoutParam=function(t,e,i){function n(n){var o={},s=0,l={},h=0,c=i.ignoreSize?1:2;if(u(n,function(e){l[e]=t[e]}),u(n,function(t){r(e,t)&&(o[t]=l[t]=e[t]),a(o,t)&&s++,a(l,t)&&h++}),h!==c&&s){if(s>=c)return o;for(var d=0;d<n.length;d++){var f=n[d];if(!r(o,f)&&r(t,f)){o[f]=t[f];break}}return o}return l}function r(t,e){return t.hasOwnProperty(e)}function a(t,e){return null!=t[e]&&"auto"!==t[e]}function s(t,e,i){u(t,function(t){e[t]=i[t]})}!o.isObject(i)&&(i={});var l=["width","left","right"],h=["height","top","bottom"],c=n(l),d=n(h);s(l,t,c),s(h,t,d)},h.getLayoutParams=function(t){return h.copyLayoutParams({},t)},h.copyLayoutParams=function(t,e){return e&&t&&u(c,function(i){e.hasOwnProperty(i)&&(t[i]=e[i])}),t},t.exports=h},function(t,e,i){(function(e){function n(t){return d.isArray(t)||(t=[t]),t}function o(t,e){var i=t.dimensions,n=new v(d.map(i,t.getDimensionInfo,t),t.hostModel); +m(n,t);for(var o=n._storage={},r=t._storage,a=0;a<i.length;a++){var s=i[a],l=r[s];d.indexOf(e,s)>=0?o[s]=new l.constructor(r[s].length):o[s]=r[s]}return n}var r="undefined",a="undefined"==typeof window?e:window,s=typeof a.Float64Array===r?Array:a.Float64Array,l=typeof a.Int32Array===r?Array:a.Int32Array,u={"float":s,"int":l,ordinal:Array,number:Array,time:Array},h=i(10),c=i(45),d=i(1),f=i(7),p=d.isObject,g=["stackedOn","hasItemOption","_nameList","_idList","_rawData"],m=function(t,e){d.each(g.concat(e.__wrappedMethods||[]),function(i){e.hasOwnProperty(i)&&(t[i]=e[i])}),t.__wrappedMethods=e.__wrappedMethods},v=function(t,e){t=t||["x","y"];for(var i={},n=[],o=0;o<t.length;o++){var r,a={};"string"==typeof t[o]?(r=t[o],a={name:r,stackable:!1,type:"number"}):(a=t[o],r=a.name,a.type=a.type||"number"),n.push(r),i[r]=a}this.dimensions=n,this._dimensionInfos=i,this.hostModel=e,this.dataType,this.indices=[],this._storage={},this._nameList=[],this._idList=[],this._optionModels=[],this.stackedOn=null,this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._rawData,this._extent},y=v.prototype;y.type="list",y.hasItemOption=!0,y.getDimension=function(t){return isNaN(t)||(t=this.dimensions[t]||t),t},y.getDimensionInfo=function(t){return d.clone(this._dimensionInfos[this.getDimension(t)])},y.initData=function(t,e,i){t=t||[],this._rawData=t;var n=this._storage={},o=this.indices=[],r=this.dimensions,a=t.length,s=this._dimensionInfos,l=[],h={};e=e||[];for(var c=0;c<r.length;c++){var d=s[r[c]],p=u[d.type];n[r[c]]=new p(a)}var g=this;i||(g.hasItemOption=!1),i=i||function(t,e,i,n){var o=f.getDataItemValue(t);return f.isDataItemOption(t)&&(g.hasItemOption=!0),f.converDataValue(o instanceof Array?o[n]:o,s[e])};for(var m=0;m<t.length;m++){for(var v=t[m],y=0;y<r.length;y++){var x=r[y],_=n[x];_[m]=i(v,x,m,y)}o.push(m)}for(var c=0;c<t.length;c++){e[c]||t[c]&&null!=t[c].name&&(e[c]=t[c].name);var b=e[c]||"",w=t[c]&&t[c].id;!w&&b&&(h[b]=h[b]||0,w=b,h[b]>0&&(w+="__ec__"+h[b]),h[b]++),w&&(l[c]=w)}this._nameList=e,this._idList=l},y.count=function(){return this.indices.length},y.get=function(t,e,i){var n=this._storage,o=this.indices[e];if(null==o)return NaN;var r=n[t]&&n[t][o];if(i){var a=this._dimensionInfos[t];if(a&&a.stackable)for(var s=this.stackedOn;s;){var l=s.get(t,e);(r>=0&&l>0||r<=0&&l<0)&&(r+=l),s=s.stackedOn}}return r},y.getValues=function(t,e,i){var n=[];d.isArray(t)||(i=e,e=t,t=this.dimensions);for(var o=0,r=t.length;o<r;o++)n.push(this.get(t[o],e,i));return n},y.hasValue=function(t){for(var e=this.dimensions,i=this._dimensionInfos,n=0,o=e.length;n<o;n++)if("ordinal"!==i[e[n]].type&&isNaN(this.get(e[n],t)))return!1;return!0},y.getDataExtent=function(t,e){t=this.getDimension(t);var i=this._storage[t],n=this.getDimensionInfo(t);e=n&&n.stackable&&e;var o,r=(this._extent||(this._extent={}))[t+!!e];if(r)return r;if(i){for(var a=1/0,s=-(1/0),l=0,u=this.count();l<u;l++)o=this.get(t,l,e),o<a&&(a=o),o>s&&(s=o);return this._extent[t+!!e]=[a,s]}return[1/0,-(1/0)]},y.getSum=function(t,e){var i=this._storage[t],n=0;if(i)for(var o=0,r=this.count();o<r;o++){var a=this.get(t,o,e);isNaN(a)||(n+=a)}return n},y.indexOf=function(t,e){var i=this._storage,n=i[t],o=this.indices;if(n)for(var r=0,a=o.length;r<a;r++){var s=o[r];if(n[s]===e)return r}return-1},y.indexOfName=function(t){for(var e=this.indices,i=this._nameList,n=0,o=e.length;n<o;n++){var r=e[n];if(i[r]===t)return n}return-1},y.indexOfRawIndex=function(t){var e=this.indices,i=e[t];if(null!=i&&i===t)return t;for(var n=0,o=e.length-1;n<=o;){var r=(n+o)/2|0;if(e[r]<t)n=r+1;else{if(!(e[r]>t))return r;o=r-1}}return-1},y.indexOfNearest=function(t,e,i,n){var o=this._storage,r=o[t];null==n&&(n=1/0);var a=-1;if(r)for(var s=Number.MAX_VALUE,l=0,u=this.count();l<u;l++){var h=e-this.get(t,l,i),c=Math.abs(h);h<=n&&(c<s||c===s&&h>0)&&(s=c,a=l)}return a},y.getRawIndex=function(t){var e=this.indices[t];return null==e?-1:e},y.getRawDataItem=function(t){return this._rawData[this.getRawIndex(t)]},y.getName=function(t){return this._nameList[this.indices[t]]||""},y.getId=function(t){return this._idList[this.indices[t]]||this.getRawIndex(t)+""},y.each=function(t,e,i,o){"function"==typeof t&&(o=i,i=e,e=t,t=[]),t=d.map(n(t),this.getDimension,this);var r=[],a=t.length,s=this.indices;o=o||this;for(var l=0;l<s.length;l++)switch(a){case 0:e.call(o,l);break;case 1:e.call(o,this.get(t[0],l,i),l);break;case 2:e.call(o,this.get(t[0],l,i),this.get(t[1],l,i),l);break;default:for(var u=0;u<a;u++)r[u]=this.get(t[u],l,i);r[u]=l,e.apply(o,r)}},y.filterSelf=function(t,e,i,o){"function"==typeof t&&(o=i,i=e,e=t,t=[]),t=d.map(n(t),this.getDimension,this);var r=[],a=[],s=t.length,l=this.indices;o=o||this;for(var u=0;u<l.length;u++){var h;if(1===s)h=e.call(o,this.get(t[0],u,i),u);else{for(var c=0;c<s;c++)a[c]=this.get(t[c],u,i);a[c]=u,h=e.apply(o,a)}h&&r.push(l[u])}return this.indices=r,this._extent={},this},y.mapArray=function(t,e,i,n){"function"==typeof t&&(n=i,i=e,e=t,t=[]);var o=[];return this.each(t,function(){o.push(e&&e.apply(this,arguments))},i,n),o},y.map=function(t,e,i,r){t=d.map(n(t),this.getDimension,this);var a=o(this,t),s=a.indices=this.indices,l=a._storage,u=[];return this.each(t,function(){var i=arguments[arguments.length-1],n=e&&e.apply(this,arguments);if(null!=n){"number"==typeof n&&(u[0]=n,n=u);for(var o=0;o<n.length;o++){var r=t[o],a=l[r],h=s[i];a&&(a[h]=n[o])}}},i,r),a},y.downSample=function(t,e,i,n){for(var r=o(this,[t]),a=this._storage,s=r._storage,l=this.indices,u=r.indices=[],h=[],c=[],d=Math.floor(1/e),f=s[t],p=this.count(),g=0;g<a[t].length;g++)s[t][g]=a[t][g];for(var g=0;g<p;g+=d){d>p-g&&(d=p-g,h.length=d);for(var m=0;m<d;m++){var v=l[g+m];h[m]=f[v],c[m]=v}var y=i(h),v=c[n(h,y)||0];f[v]=y,u.push(v)}return r},y.getItemModel=function(t){var e=this.hostModel;return t=this.indices[t],new h(this._rawData[t],e,e&&e.ecModel)},y.diff=function(t){var e=this._idList,i=t&&t._idList;return new c(t?t.indices:[],this.indices,function(t){return i[t]||t+""},function(t){return e[t]||t+""})},y.getVisual=function(t){var e=this._visual;return e&&e[t]},y.setVisual=function(t,e){if(p(t))for(var i in t)t.hasOwnProperty(i)&&this.setVisual(i,t[i]);else this._visual=this._visual||{},this._visual[t]=e},y.setLayout=function(t,e){if(p(t))for(var i in t)t.hasOwnProperty(i)&&this.setLayout(i,t[i]);else this._layout[t]=e},y.getLayout=function(t){return this._layout[t]},y.getItemLayout=function(t){return this._itemLayouts[t]},y.setItemLayout=function(t,e,i){this._itemLayouts[t]=i?d.extend(this._itemLayouts[t]||{},e):e},y.clearItemLayouts=function(){this._itemLayouts.length=0},y.getItemVisual=function(t,e,i){var n=this._itemVisuals[t],o=n&&n[e];return null!=o||i?o:this.getVisual(e)},y.setItemVisual=function(t,e,i){var n=this._itemVisuals[t]||{};if(this._itemVisuals[t]=n,p(e))for(var o in e)e.hasOwnProperty(o)&&(n[o]=e[o]);else n[e]=i},y.clearAllVisual=function(){this._visual={},this._itemVisuals=[]};var x=function(t){t.seriesIndex=this.seriesIndex,t.dataIndex=this.dataIndex,t.dataType=this.dataType};y.setItemGraphicEl=function(t,e){var i=this.hostModel;e&&(e.dataIndex=t,e.dataType=this.dataType,e.seriesIndex=i&&i.seriesIndex,"group"===e.type&&e.traverse(x,e)),this._graphicEls[t]=e},y.getItemGraphicEl=function(t){return this._graphicEls[t]},y.eachItemGraphicEl=function(t,e){d.each(this._graphicEls,function(i,n){i&&t&&t.call(e,i,n)})},y.cloneShallow=function(){var t=d.map(this.dimensions,this.getDimensionInfo,this),e=new v(t,this.hostModel);return e._storage=this._storage,m(e,this),e.indices=this.indices.slice(),this._extent&&(e._extent=d.extend({},this._extent)),e},y.wrapMethod=function(t,e){var i=this[t];"function"==typeof i&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var t=i.apply(this,arguments);return e.apply(this,[t].concat(d.slice(arguments)))})},y.TRANSFERABLE_METHODS=["cloneShallow","downSample","map"],y.CHANGABLE_METHODS=["filterSelf"],t.exports=v}).call(e,function(){return this}())},function(t,e,i){"use strict";var n=i(1),o=i(9),r=i(7),a=i(12),s=i(56),l=i(11),u=o.encodeHTML,h=o.addCommas,c=a.extend({type:"series.__base__",seriesIndex:0,coordinateSystem:null,defaultOption:null,legendDataProvider:null,visualColorAccessPath:"itemStyle.normal.color",init:function(t,e,i,n){this.seriesIndex=this.componentIndex,this.mergeDefaultAndTheme(t,i),this._dataBeforeProcessed=this.getInitialData(t,i),this._data=this._dataBeforeProcessed.cloneShallow()},mergeDefaultAndTheme:function(t,e){n.merge(t,e.getTheme().get(this.subType)),n.merge(t,this.getDefaultOption()),r.defaultEmphasis(t.label,r.LABEL_OPTIONS),this.fillDataTextStyle(t.data)},mergeOption:function(t,e){t=n.merge(this.option,t,!0),this.fillDataTextStyle(t.data);var i=this.getInitialData(t,e);i&&(this._data=i,this._dataBeforeProcessed=i.cloneShallow())},fillDataTextStyle:function(t){if(t)for(var e=0;e<t.length;e++)t[e]&&t[e].label&&r.defaultEmphasis(t[e].label,r.LABEL_OPTIONS)},getInitialData:function(){},getData:function(t){return null==t?this._data:this._data.getLinkedData(t)},setData:function(t){this._data=t},getRawData:function(){return this._dataBeforeProcessed},coordDimToDataDim:function(t){return[t]},dataDimToCoordDim:function(t){return t},getBaseAxis:function(){var t=this.coordinateSystem;return t&&t.getBaseAxis&&t.getBaseAxis()},formatTooltip:function(t,e,i){function r(t){var i=[];return n.each(t,function(t,n){var r,s=a.getDimensionInfo(n),l=s&&s.type;r="ordinal"===l?t+"":"time"===l?e?"":o.formatTime("yyyy/MM/dd hh:mm:ss",t):h(t),r&&i.push(r)}),i.join(", ")}var a=this._data,s=this.getRawValue(t),l=n.isArray(s)?r(s):h(s),c=a.getName(t),d=a.getItemVisual(t,"color");n.isObject(d)&&d.colorStops&&(d=(d.colorStops[0]||{}).color),d=d||"transparent";var f='<span style="display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:'+d+'"></span>',p=this.name;return"\0-"===p&&(p=""),e?f+u(this.name)+" : "+l:(p&&u(p)+"<br />")+f+(c?u(c)+" : "+l:l)},ifEnableAnimation:function(){if(l.node)return!1;var t=this.getShallow("animation");return t&&this.getData().count()>this.getShallow("animationThreshold")&&(t=!1),t},restoreData:function(){this._data=this._dataBeforeProcessed.cloneShallow()},getColorFromPalette:function(t,e){var i=this.ecModel,n=s.getColorFromPalette.call(this,t,e);return n||(n=i.getColorFromPalette(t,e)),n},getAxisTooltipDataIndex:null,getTooltipPosition:null});n.mixin(c,r.dataFormatMixin),n.mixin(c,s),t.exports=c},function(t,e,i){function n(t,e){var i=t+":"+e;if(l[i])return l[i];for(var n=(t+"").split("\n"),o=0,r=0,a=n.length;r<a;r++)o=Math.max(p.measureText(n[r],e).width,o);return u>h&&(u=0,l={}),u++,l[i]=o,o}function o(t,e,i,o){var r=((t||"")+"").split("\n").length,a=n(t,e),s=n("国",e),l=r*s,u=new d(0,0,a,l);switch(u.lineHeight=s,o){case"bottom":case"alphabetic":u.y-=s;break;case"middle":u.y-=s/2}switch(i){case"end":case"right":u.x-=u.width;break;case"center":u.x-=u.width/2}return u}function r(t,e,i,n){var o=e.x,r=e.y,a=e.height,s=e.width,l=i.height,u=a/2-l/2,h="left";switch(t){case"left":o-=n,r+=u,h="right";break;case"right":o+=n+s,r+=u,h="left";break;case"top":o+=s/2,r-=n+l,h="center";break;case"bottom":o+=s/2,r+=a+n,h="center";break;case"inside":o+=s/2,r+=u,h="center";break;case"insideLeft":o+=n,r+=u,h="left";break;case"insideRight":o+=s-n,r+=u,h="right";break;case"insideTop":o+=s/2,r+=n,h="center";break;case"insideBottom":o+=s/2,r+=a-l-n,h="center";break;case"insideTopLeft":o+=n,r+=n,h="left";break;case"insideTopRight":o+=s-n,r+=n,h="right";break;case"insideBottomLeft":o+=n,r+=a-l-n;break;case"insideBottomRight":o+=s-n,r+=a-l-n,h="right"}return{x:o,y:r,textAlign:h,textBaseline:"top"}}function a(t,e,i,o,r){if(!e)return"";r=r||{},o=f(o,"...");for(var a=f(r.maxIterations,2),l=f(r.minChar,0),u=n("国",i),h=n("a",i),c=f(r.placeholder,""),d=e=Math.max(0,e-1),p=0;p<l&&d>=h;p++)d-=h;var g=n(o);g>d&&(o="",g=0),d=e-g;for(var m=(t+"").split("\n"),p=0,v=m.length;p<v;p++){var y=m[p],x=n(y,i);if(!(x<=e)){for(var _=0;;_++){if(x<=d||_>=a){y+=o;break}var b=0===_?s(y,d,h,u):x>0?Math.floor(y.length*d/x):0;y=y.substr(0,b),x=n(y,i)}""===y&&(y=c),m[p]=y}}return m.join("\n")}function s(t,e,i,n){for(var o=0,r=0,a=t.length;r<a&&o<e;r++){var s=t.charCodeAt(r);o+=0<=s&&s<=127?i:n}return r}var l={},u=0,h=5e3,c=i(1),d=i(8),f=c.retrieve,p={getWidth:n,getBoundingRect:o,adjustTextPositionOnRect:r,truncateText:a,measureText:function(t,e){var i=c.getContext();return i.font=e||"12px sans-serif",i.measureText(t)}};t.exports=p},function(t,e,i){"use strict";function n(t){return t>-w&&t<w}function o(t){return t>w||t<-w}function r(t,e,i,n,o){var r=1-o;return r*r*(r*t+3*o*e)+o*o*(o*n+3*r*i)}function a(t,e,i,n,o){var r=1-o;return 3*(((e-t)*r+2*(i-e)*o)*r+(n-i)*o*o)}function s(t,e,i,o,r,a){var s=o+3*(e-i)-t,l=3*(i-2*e+t),u=3*(e-t),h=t-r,c=l*l-3*s*u,d=l*u-9*s*h,f=u*u-3*l*h,p=0;if(n(c)&&n(d))if(n(l))a[0]=0;else{var g=-u/l;g>=0&&g<=1&&(a[p++]=g)}else{var m=d*d-4*c*f;if(n(m)){var v=d/c,g=-l/s+v,y=-v/2;g>=0&&g<=1&&(a[p++]=g),y>=0&&y<=1&&(a[p++]=y)}else if(m>0){var x=b(m),w=c*l+1.5*s*(-d+x),S=c*l+1.5*s*(-d-x);w=w<0?-_(-w,T):_(w,T),S=S<0?-_(-S,T):_(S,T);var g=(-l-(w+S))/(3*s);g>=0&&g<=1&&(a[p++]=g)}else{var I=(2*c*l-3*s*d)/(2*b(c*c*c)),A=Math.acos(I)/3,L=b(c),C=Math.cos(A),g=(-l-2*L*C)/(3*s),y=(-l+L*(C+M*Math.sin(A)))/(3*s),D=(-l+L*(C-M*Math.sin(A)))/(3*s);g>=0&&g<=1&&(a[p++]=g),y>=0&&y<=1&&(a[p++]=y),D>=0&&D<=1&&(a[p++]=D)}}return p}function l(t,e,i,r,a){var s=6*i-12*e+6*t,l=9*e+3*r-3*t-9*i,u=3*e-3*t,h=0;if(n(l)){if(o(s)){var c=-u/s;c>=0&&c<=1&&(a[h++]=c)}}else{var d=s*s-4*l*u;if(n(d))a[0]=-s/(2*l);else if(d>0){var f=b(d),c=(-s+f)/(2*l),p=(-s-f)/(2*l);c>=0&&c<=1&&(a[h++]=c),p>=0&&p<=1&&(a[h++]=p)}}return h}function u(t,e,i,n,o,r){var a=(e-t)*o+t,s=(i-e)*o+e,l=(n-i)*o+i,u=(s-a)*o+a,h=(l-s)*o+s,c=(h-u)*o+u;r[0]=t,r[1]=a,r[2]=u,r[3]=c,r[4]=c,r[5]=h,r[6]=l,r[7]=n}function h(t,e,i,n,o,a,s,l,u,h,c){var d,f,p,g,m,v=.005,y=1/0;I[0]=u,I[1]=h;for(var _=0;_<1;_+=.05)A[0]=r(t,i,o,s,_),A[1]=r(e,n,a,l,_),g=x(I,A),g<y&&(d=_,y=g);y=1/0;for(var w=0;w<32&&!(v<S);w++)f=d-v,p=d+v,A[0]=r(t,i,o,s,f),A[1]=r(e,n,a,l,f),g=x(A,I),f>=0&&g<y?(d=f,y=g):(L[0]=r(t,i,o,s,p),L[1]=r(e,n,a,l,p),m=x(L,I),p<=1&&m<y?(d=p,y=m):v*=.5);return c&&(c[0]=r(t,i,o,s,d),c[1]=r(e,n,a,l,d)),b(y)}function c(t,e,i,n){var o=1-n;return o*(o*t+2*n*e)+n*n*i}function d(t,e,i,n){return 2*((1-n)*(e-t)+n*(i-e))}function f(t,e,i,r,a){var s=t-2*e+i,l=2*(e-t),u=t-r,h=0;if(n(s)){if(o(l)){var c=-u/l;c>=0&&c<=1&&(a[h++]=c)}}else{var d=l*l-4*s*u;if(n(d)){var c=-l/(2*s);c>=0&&c<=1&&(a[h++]=c)}else if(d>0){var f=b(d),c=(-l+f)/(2*s),p=(-l-f)/(2*s);c>=0&&c<=1&&(a[h++]=c),p>=0&&p<=1&&(a[h++]=p)}}return h}function p(t,e,i){var n=t+i-2*e;return 0===n?.5:(t-e)/n}function g(t,e,i,n,o){var r=(e-t)*n+t,a=(i-e)*n+e,s=(a-r)*n+r;o[0]=t,o[1]=r,o[2]=s,o[3]=s,o[4]=a,o[5]=i}function m(t,e,i,n,o,r,a,s,l){var u,h=.005,d=1/0;I[0]=a,I[1]=s;for(var f=0;f<1;f+=.05){A[0]=c(t,i,o,f),A[1]=c(e,n,r,f);var p=x(I,A);p<d&&(u=f,d=p)}d=1/0;for(var g=0;g<32&&!(h<S);g++){var m=u-h,v=u+h;A[0]=c(t,i,o,m),A[1]=c(e,n,r,m);var p=x(A,I);if(m>=0&&p<d)u=m,d=p;else{L[0]=c(t,i,o,v),L[1]=c(e,n,r,v);var y=x(L,I);v<=1&&y<d?(u=v,d=y):h*=.5}}return l&&(l[0]=c(t,i,o,u),l[1]=c(e,n,r,u)),b(d)}var v=i(5),y=v.create,x=v.distSquare,_=Math.pow,b=Math.sqrt,w=1e-8,S=1e-4,M=b(3),T=1/3,I=y(),A=y(),L=y();t.exports={cubicAt:r,cubicDerivativeAt:a,cubicRootAt:s,cubicExtrema:l,cubicSubdivide:u,cubicProjectPoint:h,quadraticAt:c,quadraticDerivativeAt:d,quadraticRootAt:f,quadraticExtremum:p,quadraticSubdivide:g,quadraticProjectPoint:m}},function(t,e){function i(t){return t=Math.round(t),t<0?0:t>255?255:t}function n(t){return t=Math.round(t),t<0?0:t>360?360:t}function o(t){return t<0?0:t>1?1:t}function r(t){return i(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100*255:parseInt(t,10))}function a(t){return o(t.length&&"%"===t.charAt(t.length-1)?parseFloat(t)/100:parseFloat(t))}function s(t,e,i){return i<0?i+=1:i>1&&(i-=1),6*i<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}function l(t,e,i){return t+(e-t)*i}function u(t){if(t){t+="";var e=t.replace(/ /g,"").toLowerCase();if(e in x)return x[e].slice();if("#"!==e.charAt(0)){var i=e.indexOf("("),n=e.indexOf(")");if(i!==-1&&n+1===e.length){var o=e.substr(0,i),s=e.substr(i+1,n-(i+1)).split(","),l=1;switch(o){case"rgba":if(4!==s.length)return;l=a(s.pop());case"rgb":if(3!==s.length)return;return[r(s[0]),r(s[1]),r(s[2]),l];case"hsla":if(4!==s.length)return;return s[3]=a(s[3]),h(s);case"hsl":if(3!==s.length)return;return h(s);default:return}}}else{if(4===e.length){var u=parseInt(e.substr(1),16);if(!(u>=0&&u<=4095))return;return[(3840&u)>>4|(3840&u)>>8,240&u|(240&u)>>4,15&u|(15&u)<<4,1]}if(7===e.length){var u=parseInt(e.substr(1),16);if(!(u>=0&&u<=16777215))return;return[(16711680&u)>>16,(65280&u)>>8,255&u,1]}}}}function h(t){var e=(parseFloat(t[0])%360+360)%360/360,n=a(t[1]),o=a(t[2]),r=o<=.5?o*(n+1):o+n-o*n,l=2*o-r,u=[i(255*s(l,r,e+1/3)),i(255*s(l,r,e)),i(255*s(l,r,e-1/3))];return 4===t.length&&(u[3]=t[3]),u}function c(t){if(t){var e,i,n=t[0]/255,o=t[1]/255,r=t[2]/255,a=Math.min(n,o,r),s=Math.max(n,o,r),l=s-a,u=(s+a)/2;if(0===l)e=0,i=0;else{i=u<.5?l/(s+a):l/(2-s-a);var h=((s-n)/6+l/2)/l,c=((s-o)/6+l/2)/l,d=((s-r)/6+l/2)/l;n===s?e=d-c:o===s?e=1/3+h-d:r===s&&(e=2/3+c-h),e<0&&(e+=1),e>1&&(e-=1)}var f=[360*e,i,u];return null!=t[3]&&f.push(t[3]),f}}function d(t,e){var i=u(t);if(i){for(var n=0;n<3;n++)e<0?i[n]=i[n]*(1-e)|0:i[n]=(255-i[n])*e+i[n]|0;return y(i,4===i.length?"rgba":"rgb")}}function f(t,e){var i=u(t);if(i)return((1<<24)+(i[0]<<16)+(i[1]<<8)+ +i[2]).toString(16).slice(1)}function p(t,e,n){if(e&&e.length&&t>=0&&t<=1){n=n||[0,0,0,0];var o=t*(e.length-1),r=Math.floor(o),a=Math.ceil(o),s=e[r],u=e[a],h=o-r;return n[0]=i(l(s[0],u[0],h)),n[1]=i(l(s[1],u[1],h)),n[2]=i(l(s[2],u[2],h)),n[3]=i(l(s[3],u[3],h)),n}}function g(t,e,n){if(e&&e.length&&t>=0&&t<=1){var r=t*(e.length-1),a=Math.floor(r),s=Math.ceil(r),h=u(e[a]),c=u(e[s]),d=r-a,f=y([i(l(h[0],c[0],d)),i(l(h[1],c[1],d)),i(l(h[2],c[2],d)),o(l(h[3],c[3],d))],"rgba");return n?{color:f,leftIndex:a,rightIndex:s,value:r}:f}}function m(t,e,i,o){if(t=u(t))return t=c(t),null!=e&&(t[0]=n(e)),null!=i&&(t[1]=a(i)),null!=o&&(t[2]=a(o)),y(h(t),"rgba")}function v(t,e){if(t=u(t),t&&null!=e)return t[3]=o(e),y(t,"rgba")}function y(t,e){var i=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(i+=","+t[3]),e+"("+i+")"}var x={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]};t.exports={parse:u,lift:d,toHex:f,fastMapToColor:p,mapToColor:g,modifyHSL:m,modifyAlpha:v,stringify:y}},function(t,e){var i="undefined"==typeof Float32Array?Array:Float32Array,n={create:function(){var t=new i(6);return n.identity(t),t},identity:function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},copy:function(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},mul:function(t,e,i){var n=e[0]*i[0]+e[2]*i[1],o=e[1]*i[0]+e[3]*i[1],r=e[0]*i[2]+e[2]*i[3],a=e[1]*i[2]+e[3]*i[3],s=e[0]*i[4]+e[2]*i[5]+e[4],l=e[1]*i[4]+e[3]*i[5]+e[5];return t[0]=n,t[1]=o,t[2]=r,t[3]=a,t[4]=s,t[5]=l,t},translate:function(t,e,i){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+i[0],t[5]=e[5]+i[1],t},rotate:function(t,e,i){var n=e[0],o=e[2],r=e[4],a=e[1],s=e[3],l=e[5],u=Math.sin(i),h=Math.cos(i);return t[0]=n*h+a*u,t[1]=-n*u+a*h,t[2]=o*h+s*u,t[3]=-o*u+h*s,t[4]=h*r+u*l,t[5]=h*l-u*r,t},scale:function(t,e,i){var n=i[0],o=i[1];return t[0]=e[0]*n,t[1]=e[1]*o,t[2]=e[2]*n,t[3]=e[3]*o,t[4]=e[4]*n,t[5]=e[5]*o,t},invert:function(t,e){var i=e[0],n=e[2],o=e[4],r=e[1],a=e[3],s=e[5],l=i*a-r*n;return l?(l=1/l,t[0]=a*l,t[1]=-r*l,t[2]=-n*l,t[3]=i*l,t[4]=(n*s-a*o)*l,t[5]=(r*o-i*s)*l,t):null}};t.exports=n},function(t,e){var i=Array.prototype.slice,n=function(){this._$handlers={}};n.prototype={constructor:n,one:function(t,e,i){var n=this._$handlers;if(!e||!t)return this;n[t]||(n[t]=[]);for(var o=0;o<n[t].length;o++)if(n[t][o].h===e)return this;return n[t].push({h:e,one:!0,ctx:i||this}),this},on:function(t,e,i){var n=this._$handlers;if(!e||!t)return this;n[t]||(n[t]=[]);for(var o=0;o<n[t].length;o++)if(n[t][o].h===e)return this;return n[t].push({h:e,one:!1,ctx:i||this}),this},isSilent:function(t){var e=this._$handlers;return e[t]&&e[t].length},off:function(t,e){var i=this._$handlers;if(!t)return this._$handlers={},this;if(e){if(i[t]){for(var n=[],o=0,r=i[t].length;o<r;o++)i[t][o].h!=e&&n.push(i[t][o]);i[t]=n}i[t]&&0===i[t].length&&delete i[t]}else delete i[t];return this},trigger:function(t){if(this._$handlers[t]){var e=arguments,n=e.length;n>3&&(e=i.call(e,1));for(var o=this._$handlers[t],r=o.length,a=0;a<r;){switch(n){case 1:o[a].h.call(o[a].ctx);break;case 2:o[a].h.call(o[a].ctx,e[1]);break;case 3:o[a].h.call(o[a].ctx,e[1],e[2]);break;default:o[a].h.apply(o[a].ctx,e)}o[a].one?(o.splice(a,1),r--):a++}}return this},triggerWithContext:function(t){if(this._$handlers[t]){var e=arguments,n=e.length;n>4&&(e=i.call(e,1,e.length-1));for(var o=e[e.length-1],r=this._$handlers[t],a=r.length,s=0;s<a;){switch(n){case 1:r[s].h.call(o);break;case 2:r[s].h.call(o,e[1]);break;case 3:r[s].h.call(o,e[1],e[2]);break;default:r[s].h.apply(o,e)}r[s].one?(r.splice(s,1),a--):s++}}return this}},t.exports=n},function(t,e,i){function n(t,e){var i=r.slice(arguments,2);return this.superClass.prototype[e].apply(t,i)}function o(t,e,i){return this.superClass.prototype[e].apply(t,i)}var r=i(1),a={},s=".",l="___EC__COMPONENT__CONTAINER___",u=a.parseClassType=function(t){var e={main:"",sub:""};return t&&(t=t.split(s),e.main=t[0]||"",e.sub=t[1]||""),e};a.enableClassExtend=function(t,e){t.$constructor=t,t.extend=function(t){var e=this,i=function(){t.$constructor?t.$constructor.apply(this,arguments):e.apply(this,arguments)};return r.extend(i.prototype,t),i.extend=this.extend,i.superCall=n,i.superApply=o,r.inherits(i,this),i.superClass=e,i}},a.enableClassManagement=function(t,e){function i(t){var e=n[t.main];return e&&e[l]||(e=n[t.main]={},e[l]=!0),e}e=e||{};var n={};if(t.registerClass=function(t,e){if(e)if(e=u(e),e.sub){if(e.sub!==l){var o=i(e);o[e.sub]=t}}else n[e.main]=t;return t},t.getClass=function(t,e,i){var o=n[t];if(o&&o[l]&&(o=e?o[e]:null),i&&!o)throw new Error("Component "+t+"."+(e||"")+" not exists. Load it first.");return o},t.getClassesByMainType=function(t){t=u(t);var e=[],i=n[t.main];return i&&i[l]?r.each(i,function(t,i){i!==l&&e.push(t)}):e.push(i),e},t.hasClass=function(t){return t=u(t),!!n[t.main]},t.getAllClassMainTypes=function(){var t=[];return r.each(n,function(e,i){t.push(i)}),t},t.hasSubTypes=function(t){t=u(t);var e=n[t.main];return e&&e[l]},t.parseClassType=u,e.registerWhenExtend){var o=t.extend;o&&(t.extend=function(e){var i=o.call(this,e);return t.registerClass(i,e.type)})}return t},a.setReadOnly=function(t,e){},t.exports=a},function(t,e,i){var n=i(136),o=i(38);i(137),i(135);var r=i(31),a=i(4),s=i(1),l=i(16),u={};u.getScaleExtent=function(t,e){var i=t.scale,n=i.getExtent(),o=n[1]-n[0];if("ordinal"===i.type)return isFinite(o)?n:[0,0];var r=e.getMin?e.getMin():e.get("min"),l=e.getMax?e.getMax():e.get("max"),u=e.getNeedCrossZero?e.getNeedCrossZero():!e.get("scale"),h=e.get("boundaryGap");s.isArray(h)||(h=[h||0,h||0]),h[0]=a.parsePercent(h[0],1),h[1]=a.parsePercent(h[1],1);var c=!0,d=!0;return null==r&&(r=n[0]-h[0]*o,c=!1),null==l&&(l=n[1]+h[1]*o,d=!1),"dataMin"===r&&(r=n[0]),"dataMax"===l&&(l=n[1]),u&&(r>0&&l>0&&!c&&(r=0),r<0&&l<0&&!d&&(l=0)),[r,l]},u.niceScaleExtent=function(t,e){var i=t.scale,n=u.getScaleExtent(t,e),o=null!=(e.getMin?e.getMin():e.get("min")),r=null!=(e.getMax?e.getMax():e.get("max")),a=e.get("splitNumber");"log"===i.type&&(i.base=e.get("logBase")),i.setExtent(n[0],n[1]),i.niceExtent(a,o,r);var s=e.get("minInterval");if(isFinite(s)&&!o&&!r&&"interval"===i.type){var l=i.getInterval(),h=Math.max(Math.abs(l),s)/l;n=i.getExtent();var c=(n[1]+n[0])/2;i.setExtent(h*(n[0]-c)+c,h*(n[1]-c)+c),i.niceExtent(a)}var l=e.get("interval");null!=l&&i.setInterval&&i.setInterval(l)},u.createScaleByModel=function(t,e){if(e=e||t.get("type"))switch(e){case"category":return new n(t.getCategories(),[1/0,-(1/0)]);case"value":return new o;default:return(r.getClass(e)||o).create(t)}},u.ifAxisCrossZero=function(t){var e=t.scale.getExtent(),i=e[0],n=e[1];return!(i>0&&n>0||i<0&&n<0)},u.getAxisLabelInterval=function(t,e,i,n){var o,r=0,a=0,s=1;e.length>40&&(s=Math.floor(e.length/40));for(var u=0;u<t.length;u+=s){var h=t[u],c=l.getBoundingRect(e[u],i,"center","top");c[n?"x":"y"]+=h,c[n?"width":"height"]*=1.3,o?o.intersect(c)?(a++,r=Math.max(r,a)):(o.union(c),a=0):o=c.clone()}return 0===r&&s>1?s:(r+1)*s-1},u.getFormattedLabels=function(t,e){var i=t.scale,n=i.getTicksLabels(),o=i.getTicks();return"string"==typeof e?(e=function(t){return function(e){return t.replace("{value}",e)}}(e),s.map(n,e)):"function"==typeof e?s.map(o,function(n,o){return e("category"===t.type?i.getLabel(n):n,o)},this):n},t.exports=u},function(t,e,i){"use strict";function n(){this._coordinateSystems=[]}var o=i(1),r={};n.prototype={constructor:n,create:function(t,e){var i=[];o.each(r,function(n,o){var r=n.create(t,e);i=i.concat(r||[])}),this._coordinateSystems=i},update:function(t,e){o.each(this._coordinateSystems,function(i){i.update&&i.update(t,e)})},getCoordinateSystems:function(){return this._coordinateSystems.slice()}},n.register=function(t,e){r[t]=e},n.get=function(t){return r[t]},t.exports=n},function(t,e,i){"use strict";function n(t){return t.getBoundingClientRect?t.getBoundingClientRect():{left:0,top:0}}function o(t,e,i,n){return i=i||{},n||!h.canvasSupported?r(t,e,i):h.browser.firefox&&null!=e.layerX&&e.layerX!==e.offsetX?(i.zrX=e.layerX,i.zrY=e.layerY):null!=e.offsetX?(i.zrX=e.offsetX,i.zrY=e.offsetY):r(t,e,i),i}function r(t,e,i){var o=n(t);i.zrX=e.clientX-o.left,i.zrY=e.clientY-o.top}function a(t,e,i){if(e=e||window.event,null!=e.zrX)return e;var n=e.type,r=n&&n.indexOf("touch")>=0;if(r){var a="touchend"!=n?e.targetTouches[0]:e.changedTouches[0];a&&o(t,a,e,i)}else o(t,e,e,i),e.zrDelta=e.wheelDelta?e.wheelDelta/120:-(e.detail||0)/3;return e}function s(t,e,i){c?t.addEventListener(e,i):t.attachEvent("on"+e,i)}function l(t,e,i){c?t.removeEventListener(e,i):t.detachEvent("on"+e,i)}var u=i(20),h=i(11),c="undefined"!=typeof window&&!!window.addEventListener,d=c?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0};t.exports={clientToLocal:o,normalizeEvent:a,addEventListener:s,removeEventListener:l,stop:d,Dispatcher:u}},function(t,e){"use strict";var i={};t.exports={register:function(t,e){i[t]=e},get:function(t){return i[t]}}},function(t,e,i){"use strict";var n=i(3),o=i(8),r=n.extendShape({type:"triangle",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,r=e.height/2;t.moveTo(i,n-r),t.lineTo(i+o,n+r),t.lineTo(i-o,n+r),t.closePath()}}),a=n.extendShape({type:"diamond",shape:{cx:0,cy:0,width:0,height:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=e.width/2,r=e.height/2;t.moveTo(i,n-r),t.lineTo(i+o,n),t.lineTo(i,n+r),t.lineTo(i-o,n),t.closePath()}}),s=n.extendShape({type:"pin",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.x,n=e.y,o=e.width/5*3,r=Math.max(o,e.height),a=o/2,s=a*a/(r-a),l=n-r+a+s,u=Math.asin(s/a),h=Math.cos(u)*a,c=Math.sin(u),d=Math.cos(u);t.arc(i,l,a,Math.PI-u,2*Math.PI+u);var f=.6*a,p=.7*a;t.bezierCurveTo(i+h-c*f,l+s+d*f,i,n-p,i,n),t.bezierCurveTo(i,n-p,i-h+c*f,l+s+d*f,i-h,l+s),t.closePath()}}),l=n.extendShape({type:"arrow",shape:{x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.height,n=e.width,o=e.x,r=e.y,a=n/3*2;t.moveTo(o,r),t.lineTo(o+a,r+i),t.lineTo(o,r+i/4*3),t.lineTo(o-a,r+i),t.lineTo(o,r),t.closePath()}}),u={line:n.Line,rect:n.Rect,roundRect:n.Rect,square:n.Rect,circle:n.Circle,diamond:a,pin:s,arrow:l,triangle:r},h={line:function(t,e,i,n,o){o.x1=t,o.y1=e+n/2,o.x2=t+i,o.y2=e+n/2},rect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n},roundRect:function(t,e,i,n,o){o.x=t,o.y=e,o.width=i,o.height=n,o.r=Math.min(i,n)/4},square:function(t,e,i,n,o){var r=Math.min(i,n);o.x=t,o.y=e,o.width=r,o.height=r},circle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.r=Math.min(i,n)/2},diamond:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n},pin:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},arrow:function(t,e,i,n,o){o.x=t+i/2,o.y=e+n/2,o.width=i,o.height=n},triangle:function(t,e,i,n,o){o.cx=t+i/2,o.cy=e+n/2,o.width=i,o.height=n}},c={};for(var d in u)u.hasOwnProperty(d)&&(c[d]=new u[d]); +var f=n.extendShape({type:"symbol",shape:{symbolType:"",x:0,y:0,width:0,height:0},beforeBrush:function(){var t=this.style,e=this.shape;"pin"===e.symbolType&&"inside"===t.textPosition&&(t.textPosition=["50%","40%"],t.textAlign="center",t.textVerticalAlign="middle")},buildPath:function(t,e,i){var n=e.symbolType,o=c[n];"none"!==e.symbolType&&(o||(n="rect",o=c[n]),h[n](e.x,e.y,e.width,e.height,o.shape),o.buildPath(t,o.shape,i))}}),p=function(t){if("image"!==this.type){var e=this.style,i=this.shape;i&&"line"===i.symbolType?e.stroke=t:this.__isEmptyBrush?(e.stroke=t,e.fill="#fff"):(e.fill&&(e.fill=t),e.stroke&&(e.stroke=t)),this.dirty(!1)}},g={createSymbol:function(t,e,i,r,a,s){var l=0===t.indexOf("empty");l&&(t=t.substr(5,1).toLowerCase()+t.substr(6));var u;return u=0===t.indexOf("image://")?new n.Image({style:{image:t.slice(8),x:e,y:i,width:r,height:a}}):0===t.indexOf("path://")?n.makePath(t.slice(7),{},new o(e,i,r,a)):new f({shape:{symbolType:t,x:e,y:i,width:r,height:a}}),u.__isEmptyBrush=l,u.setColor=p,u.setColor(s),u}};t.exports=g},function(t,e,i){function n(){this.group=new a,this.uid=s.getUID("viewChart")}function o(t,e){if(t&&(t.trigger(e),"group"===t.type))for(var i=0;i<t.childCount();i++)o(t.childAt(i),e)}function r(t,e,i){var n=u.queryDataIndex(t,e);null!=n?h.each(u.normalizeToArray(n),function(e){o(t.getItemGraphicEl(e),i)}):t.eachItemGraphicEl(function(t){o(t,i)})}var a=i(33),s=i(43),l=i(21),u=i(7),h=i(1);n.prototype={type:"chart",init:function(t,e){},render:function(t,e,i,n){},highlight:function(t,e,i,n){r(t.getData(),n,"emphasis")},downplay:function(t,e,i,n){r(t.getData(),n,"normal")},remove:function(t,e){this.group.removeAll()},dispose:function(){}};var c=n.prototype;c.updateView=c.updateLayout=c.updateVisual=function(t,e,i,n){this.render(t,e,i,n)},l.enableClassExtend(n,["dispose"]),l.enableClassManagement(n,{registerWhenExtend:!0}),t.exports=n},function(t,e,i){"use strict";var n=i(17),o=i(5),r=i(73),a=i(8),s=i(32).devicePixelRatio,l={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},u=[],h=[],c=[],d=[],f=Math.min,p=Math.max,g=Math.cos,m=Math.sin,v=Math.sqrt,y=Math.abs,x="undefined"!=typeof Float32Array,_=function(){this.data=[],this._len=0,this._ctx=null,this._xi=0,this._yi=0,this._x0=0,this._y0=0,this._ux=0,this._uy=0};_.prototype={constructor:_,_lineDash:null,_dashOffset:0,_dashIdx:0,_dashSum:0,setScale:function(t,e){this._ux=y(1/s/t)||0,this._uy=y(1/s/e)||0},getContext:function(){return this._ctx},beginPath:function(t){return this._ctx=t,t&&t.beginPath(),t&&(this.dpr=t.dpr),this._len=0,this._lineDash&&(this._lineDash=null,this._dashOffset=0),this},moveTo:function(t,e){return this.addData(l.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},lineTo:function(t,e){var i=y(t-this._xi)>this._ux||y(e-this._yi)>this._uy||this._len<5;return this.addData(l.L,t,e),this._ctx&&i&&(this._needsDash()?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),i&&(this._xi=t,this._yi=e),this},bezierCurveTo:function(t,e,i,n,o,r){return this.addData(l.C,t,e,i,n,o,r),this._ctx&&(this._needsDash()?this._dashedBezierTo(t,e,i,n,o,r):this._ctx.bezierCurveTo(t,e,i,n,o,r)),this._xi=o,this._yi=r,this},quadraticCurveTo:function(t,e,i,n){return this.addData(l.Q,t,e,i,n),this._ctx&&(this._needsDash()?this._dashedQuadraticTo(t,e,i,n):this._ctx.quadraticCurveTo(t,e,i,n)),this._xi=i,this._yi=n,this},arc:function(t,e,i,n,o,r){return this.addData(l.A,t,e,i,i,n,o-n,0,r?0:1),this._ctx&&this._ctx.arc(t,e,i,n,o,r),this._xi=g(o)*i+t,this._xi=m(o)*i+t,this},arcTo:function(t,e,i,n,o){return this._ctx&&this._ctx.arcTo(t,e,i,n,o),this},rect:function(t,e,i,n){return this._ctx&&this._ctx.rect(t,e,i,n),this.addData(l.R,t,e,i,n),this},closePath:function(){this.addData(l.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash()&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},fill:function(t){t&&t.fill(),this.toStatic()},stroke:function(t){t&&t.stroke(),this.toStatic()},setLineDash:function(t){if(t instanceof Array){this._lineDash=t,this._dashIdx=0;for(var e=0,i=0;i<t.length;i++)e+=t[i];this._dashSum=e}return this},setLineDashOffset:function(t){return this._dashOffset=t,this},len:function(){return this._len},setData:function(t){var e=t.length;this.data&&this.data.length==e||!x||(this.data=new Float32Array(e));for(var i=0;i<e;i++)this.data[i]=t[i];this._len=e},appendPath:function(t){t instanceof Array||(t=[t]);for(var e=t.length,i=0,n=this._len,o=0;o<e;o++)i+=t[o].len();x&&this.data instanceof Float32Array&&(this.data=new Float32Array(n+i));for(var o=0;o<e;o++)for(var r=t[o].data,a=0;a<r.length;a++)this.data[n++]=r[a];this._len=n},addData:function(t){var e=this.data;this._len+arguments.length>e.length&&(this._expandData(),e=this.data);for(var i=0;i<arguments.length;i++)e[this._len++]=arguments[i];this._prevCmd=t},_expandData:function(){if(!(this.data instanceof Array)){for(var t=[],e=0;e<this._len;e++)t[e]=this.data[e];this.data=t}},_needsDash:function(){return this._lineDash},_dashedLineTo:function(t,e){var i,n,o=this._dashSum,r=this._dashOffset,a=this._lineDash,s=this._ctx,l=this._xi,u=this._yi,h=t-l,c=e-u,d=v(h*h+c*c),g=l,m=u,y=a.length;for(h/=d,c/=d,r<0&&(r=o+r),r%=o,g-=r*h,m-=r*c;h>0&&g<=t||h<0&&g>=t||0==h&&(c>0&&m<=e||c<0&&m>=e);)n=this._dashIdx,i=a[n],g+=h*i,m+=c*i,this._dashIdx=(n+1)%y,h>0&&g<l||h<0&&g>l||c>0&&m<u||c<0&&m>u||s[n%2?"moveTo":"lineTo"](h>=0?f(g,t):p(g,t),c>=0?f(m,e):p(m,e));h=g-t,c=m-e,this._dashOffset=-v(h*h+c*c)},_dashedBezierTo:function(t,e,i,o,r,a){var s,l,u,h,c,d=this._dashSum,f=this._dashOffset,p=this._lineDash,g=this._ctx,m=this._xi,y=this._yi,x=n.cubicAt,_=0,b=this._dashIdx,w=p.length,S=0;for(f<0&&(f=d+f),f%=d,s=0;s<1;s+=.1)l=x(m,t,i,r,s+.1)-x(m,t,i,r,s),u=x(y,e,o,a,s+.1)-x(y,e,o,a,s),_+=v(l*l+u*u);for(;b<w&&(S+=p[b],!(S>f));b++);for(s=(S-f)/_;s<=1;)h=x(m,t,i,r,s),c=x(y,e,o,a,s),b%2?g.moveTo(h,c):g.lineTo(h,c),s+=p[b]/_,b=(b+1)%w;b%2!==0&&g.lineTo(r,a),l=r-h,u=a-c,this._dashOffset=-v(l*l+u*u)},_dashedQuadraticTo:function(t,e,i,n){var o=i,r=n;i=(i+2*t)/3,n=(n+2*e)/3,t=(this._xi+2*t)/3,e=(this._yi+2*e)/3,this._dashedBezierTo(t,e,i,n,o,r)},toStatic:function(){var t=this.data;t instanceof Array&&(t.length=this._len,x&&(this.data=new Float32Array(t)))},getBoundingRect:function(){u[0]=u[1]=c[0]=c[1]=Number.MAX_VALUE,h[0]=h[1]=d[0]=d[1]=-Number.MAX_VALUE;for(var t=this.data,e=0,i=0,n=0,s=0,f=0;f<t.length;){var p=t[f++];switch(1==f&&(e=t[f],i=t[f+1],n=e,s=i),p){case l.M:n=t[f++],s=t[f++],e=n,i=s,c[0]=n,c[1]=s,d[0]=n,d[1]=s;break;case l.L:r.fromLine(e,i,t[f],t[f+1],c,d),e=t[f++],i=t[f++];break;case l.C:r.fromCubic(e,i,t[f++],t[f++],t[f++],t[f++],t[f],t[f+1],c,d),e=t[f++],i=t[f++];break;case l.Q:r.fromQuadratic(e,i,t[f++],t[f++],t[f],t[f+1],c,d),e=t[f++],i=t[f++];break;case l.A:var v=t[f++],y=t[f++],x=t[f++],_=t[f++],b=t[f++],w=t[f++]+b,S=(t[f++],1-t[f++]);1==f&&(n=g(b)*x+v,s=m(b)*_+y),r.fromArc(v,y,x,_,b,w,S,c,d),e=g(w)*x+v,i=m(w)*_+y;break;case l.R:n=e=t[f++],s=i=t[f++];var M=t[f++],T=t[f++];r.fromLine(n,s,n+M,s+T,c,d);break;case l.Z:e=n,i=s}o.min(u,u,c),o.max(h,h,d)}return 0===f&&(u[0]=u[1]=h[0]=h[1]=0),new a(u[0],u[1],h[0]-u[0],h[1]-u[1])},rebuildPath:function(t){for(var e,i,n,o,r,a,s=this.data,u=this._ux,h=this._uy,c=this._len,d=0;d<c;){var f=s[d++];switch(1==d&&(n=s[d],o=s[d+1],e=n,i=o),f){case l.M:e=n=s[d++],i=o=s[d++],t.moveTo(n,o);break;case l.L:r=s[d++],a=s[d++],(y(r-n)>u||y(a-o)>h||d===c-1)&&(t.lineTo(r,a),n=r,o=a);break;case l.C:t.bezierCurveTo(s[d++],s[d++],s[d++],s[d++],s[d++],s[d++]),n=s[d-2],o=s[d-1];break;case l.Q:t.quadraticCurveTo(s[d++],s[d++],s[d++],s[d++]),n=s[d-2],o=s[d-1];break;case l.A:var p=s[d++],v=s[d++],x=s[d++],_=s[d++],b=s[d++],w=s[d++],S=s[d++],M=s[d++],T=x>_?x:_,I=x>_?1:x/_,A=x>_?_/x:1,L=Math.abs(x-_)>.001,C=b+w;L?(t.translate(p,v),t.rotate(S),t.scale(I,A),t.arc(0,0,T,b,C,1-M),t.scale(1/I,1/A),t.rotate(-S),t.translate(-p,-v)):t.arc(p,v,T,b,C,1-M),1==d&&(e=g(b)*x+p,i=m(b)*_+v),n=g(C)*x+p,o=m(C)*_+v;break;case l.R:e=n=s[d],i=o=s[d+1],t.rect(s[d++],s[d++],s[d++],s[d++]);break;case l.Z:t.closePath(),n=e,o=i}}}},_.CMD=l,t.exports=_},function(t,e,i){function n(t,e,i,n){if(!e)return t;var s=o(e[0]),l=r.isArray(s)&&s.length||1;i=i||[],n=n||"extra";for(var u=0;u<l;u++)if(!t[u]){var h=i[u]||n+(u-i.length);t[u]=a(e,u)?{type:"ordinal",name:h}:h}return t}function o(t){return r.isArray(t)?t:r.isObject(t)?t.value:t}var r=i(1),a=n.guessOrdinal=function(t,e){for(var i=0,n=t.length;i<n;i++){var a=o(t[i]);if(!r.isArray(a))return!1;var a=a[e];if(null!=a&&isFinite(a))return!1;if(r.isString(a)&&"-"!==a)return!0}return!1};t.exports=n},function(t,e,i){var n=i(1);t.exports=function(t){for(var e=0;e<t.length;e++)t[e][1]||(t[e][1]=t[e][0]);return function(e){for(var i={},o=0;o<t.length;o++){var r=t[o][1];if(!(e&&n.indexOf(e,r)>=0)){var a=this.getShallow(r);null!=a&&(i[t[o][0]]=a)}}return i}}},function(t,e,i){function n(){this._extent=[1/0,-(1/0)],this._interval=0,this.init&&this.init.apply(this,arguments)}var o=i(21),r=n.prototype;r.parse=function(t){return t},r.contain=function(t){var e=this._extent;return t>=e[0]&&t<=e[1]},r.normalize=function(t){var e=this._extent;return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])},r.scale=function(t){var e=this._extent;return t*(e[1]-e[0])+e[0]},r.unionExtent=function(t){var e=this._extent;t[0]<e[0]&&(e[0]=t[0]),t[1]>e[1]&&(e[1]=t[1])},r.getExtent=function(){return this._extent.slice()},r.setExtent=function(t,e){var i=this._extent;isNaN(t)||(i[0]=t),isNaN(e)||(i[1]=e)},r.getTicksLabels=function(){for(var t=[],e=this.getTicks(),i=0;i<e.length;i++)t.push(this.getLabel(e[i]));return t},o.enableClassExtend(n),o.enableClassManagement(n,{registerWhenExtend:!0}),t.exports=n},function(t,e){var i=1;"undefined"!=typeof window&&(i=Math.max(window.devicePixelRatio||1,1));var n={debugMode:0,devicePixelRatio:i};t.exports=n},function(t,e,i){var n=i(1),o=i(58),r=i(8),a=function(t){t=t||{},o.call(this,t);for(var e in t)t.hasOwnProperty(e)&&(this[e]=t[e]);this._children=[],this.__storage=null,this.__dirty=!0};a.prototype={constructor:a,isGroup:!0,type:"group",silent:!1,children:function(){return this._children.slice()},childAt:function(t){return this._children[t]},childOfName:function(t){for(var e=this._children,i=0;i<e.length;i++)if(e[i].name===t)return e[i]},childCount:function(){return this._children.length},add:function(t){return t&&t!==this&&t.parent!==this&&(this._children.push(t),this._doAdd(t)),this},addBefore:function(t,e){if(t&&t!==this&&t.parent!==this&&e&&e.parent===this){var i=this._children,n=i.indexOf(e);n>=0&&(i.splice(n,0,t),this._doAdd(t))}return this},_doAdd:function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__storage,i=this.__zr;e&&e!==t.__storage&&(e.addToMap(t),t instanceof a&&t.addChildrenToStorage(e)),i&&i.refresh()},remove:function(t){var e=this.__zr,i=this.__storage,o=this._children,r=n.indexOf(o,t);return r<0?this:(o.splice(r,1),t.parent=null,i&&(i.delFromMap(t.id),t instanceof a&&t.delChildrenFromStorage(i)),e&&e.refresh(),this)},removeAll:function(){var t,e,i=this._children,n=this.__storage;for(e=0;e<i.length;e++)t=i[e],n&&(n.delFromMap(t.id),t instanceof a&&t.delChildrenFromStorage(n)),t.parent=null;return i.length=0,this},eachChild:function(t,e){for(var i=this._children,n=0;n<i.length;n++){var o=i[n];t.call(e,o,n)}return this},traverse:function(t,e){for(var i=0;i<this._children.length;i++){var n=this._children[i];t.call(e,n),"group"===n.type&&n.traverse(t,e)}return this},addChildrenToStorage:function(t){for(var e=0;e<this._children.length;e++){var i=this._children[e];t.addToMap(i),i instanceof a&&i.addChildrenToStorage(t)}},delChildrenFromStorage:function(t){for(var e=0;e<this._children.length;e++){var i=this._children[e];t.delFromMap(i.id),i instanceof a&&i.delChildrenFromStorage(t)}},dirty:function(){return this.__dirty=!0,this.__zr&&this.__zr.refresh(),this},getBoundingRect:function(t){for(var e=null,i=new r(0,0,0,0),n=t||this._children,o=[],a=0;a<n.length;a++){var s=n[a];if(!s.ignore&&!s.invisible){var l=s.getBoundingRect(),u=s.getLocalTransform(o);u?(i.copy(l),i.applyTransform(u),e=e||i.clone(),e.union(i)):(e=e||l.clone(),e.union(l))}}return e||i}},n.inherits(a,o),t.exports=a},function(t,e,i){"use strict";function n(t){for(var e=0;e<t.length&&null==t[e];)e++;return t[e]}function o(t){var e=n(t);return null!=e&&!c.isArray(p(e))}function r(t,e,i){t=t||[];var n=e.get("coordinateSystem"),r=m[n],a=f.get(n),s=r&&r(t,e,i),v=s&&s.dimensions;v||(v=a&&a.dimensions||["x","y"],v=h(v,t,v.concat(["value"])));var y=s?s.categoryIndex:-1,x=new u(v,e),_=l(s,t),b={},w=y>=0&&o(t)?function(t,e,i,n){return d.isDataItemOption(t)&&(x.hasItemOption=!0),n===y?i:g(p(t),v[n])}:function(t,e,i,n){var o=p(t),r=g(o&&o[n],v[n]);d.isDataItemOption(t)&&(x.hasItemOption=!0);var a=s&&s.categoryAxesModels;return a&&a[e]&&"string"==typeof r&&(b[e]=b[e]||a[e].getCategories(),r=c.indexOf(b[e],r),r<0&&!isNaN(r)&&(r=+r)),r};return x.hasItemOption=!1,x.initData(t,_,w),x}function a(t){return"category"!==t&&"time"!==t}function s(t){return"category"===t?"ordinal":"time"===t?"time":"float"}function l(t,e){var i,n=[],o=t&&t.dimensions[t.categoryIndex];if(o&&(i=t.categoryAxesModels[o.name]),i){var r=i.getCategories();if(r){var a=e.length;if(c.isArray(e[0])&&e[0].length>1){n=[];for(var s=0;s<a;s++)n[s]=r[e[s][t.categoryIndex||0]]}else n=r.slice(0)}}return n}var u=i(14),h=i(29),c=i(1),d=i(7),f=i(23),p=d.getDataItemValue,g=d.converDataValue,m={cartesian2d:function(t,e,i){var n=c.map(["xAxis","yAxis"],function(t){return i.queryComponents({mainType:t,index:e.get(t+"Index"),id:e.get(t+"Id")})[0]}),o=n[0],r=n[1],l=o.get("type"),u=r.get("type"),d=[{name:"x",type:s(l),stackable:a(l)},{name:"y",type:s(u),stackable:a(u)}],f="category"===l,p="category"===u;h(d,t,["x","y","z"]);var g={};return f&&(g.x=o),p&&(g.y=r),{dimensions:d,categoryIndex:f?0:p?1:-1,categoryAxesModels:g}},polar:function(t,e,i){var n=i.queryComponents({mainType:"polar",index:e.get("polarIndex"),id:e.get("polarId")})[0],o=n.findAxisModel("angleAxis"),r=n.findAxisModel("radiusAxis"),l=r.get("type"),u=o.get("type"),c=[{name:"radius",type:s(l),stackable:a(l)},{name:"angle",type:s(u),stackable:a(u)}],d="category"===u,f="category"===l;h(c,t,["radius","angle","value"]);var p={};return f&&(p.radius=r),d&&(p.angle=o),{dimensions:c,categoryIndex:d?1:f?0:-1,categoryAxesModels:p}},geo:function(t,e,i){return{dimensions:h([{name:"lng"},{name:"lat"}],t,["lng","lat","value"])}}};t.exports=r},function(t,e,i){"use strict";var n=i(3),o=i(1),r=i(2);i(54),i(106),r.extendComponentView({type:"grid",render:function(t,e){this.group.removeAll(),t.get("show")&&this.group.add(new n.Rect({shape:t.coordinateSystem.getRect(),style:o.defaults({fill:t.get("backgroundColor")},t.getItemStyle()),silent:!0,z2:-1}))}}),r.registerPreprocessor(function(t){t.xAxis&&t.yAxis&&!t.grid&&(t.grid={})})},function(t,e,i){function n(t){t=t||{},a.call(this,t);for(var e in t)t.hasOwnProperty(e)&&"style"!==e&&(this[e]=t[e]);this.style=new r(t.style),this._rect=null,this.__clipPaths=[]}var o=i(1),r=i(64),a=i(58),s=i(75);n.prototype={constructor:n,type:"displayable",__dirty:!0,invisible:!1,z:0,z2:0,zlevel:0,draggable:!1,dragging:!1,silent:!1,culling:!1,cursor:"pointer",rectHover:!1,progressive:-1,beforeBrush:function(t){},afterBrush:function(t){},brush:function(t,e){},getBoundingRect:function(){},contain:function(t,e){return this.rectContain(t,e)},traverse:function(t,e){t.call(e,this)},rectContain:function(t,e){var i=this.transformCoordToLocal(t,e),n=this.getBoundingRect();return n.contain(i[0],i[1])},dirty:function(){this.__dirty=!0,this._rect=null,this.__zr&&this.__zr.refresh()},animateStyle:function(t){return this.animate("style",t)},attrKV:function(t,e){"style"!==t?a.prototype.attrKV.call(this,t,e):this.style.set(e)},setStyle:function(t,e){return this.style.set(t,e),this.dirty(!1),this},useStyle:function(t){return this.style=new r(t),this.dirty(!1),this}},o.inherits(n,a),o.mixin(n,s),t.exports=n},function(t,e){var i=function(t){this.colorStops=t||[]};i.prototype={constructor:i,addColorStop:function(t,e){this.colorStops.push({offset:t,color:e})}},t.exports=i},function(t,e,i){var n=i(4),o=i(9),r=i(31),a=Math.floor,s=Math.ceil,l=n.getPrecisionSafe,u=n.round,h=r.extend({type:"interval",_interval:0,setExtent:function(t,e){var i=this._extent;isNaN(t)||(i[0]=parseFloat(t)),isNaN(e)||(i[1]=parseFloat(e))},unionExtent:function(t){var e=this._extent;t[0]<e[0]&&(e[0]=t[0]),t[1]>e[1]&&(e[1]=t[1]),h.prototype.setExtent.call(this,e[0],e[1])},getInterval:function(){return this._interval||this.niceTicks(),this._interval},setInterval:function(t){this._interval=t,this._niceExtent=this._extent.slice()},getTicks:function(){this._interval||this.niceTicks();var t=this._interval,e=this._extent,i=[],n=1e4;if(t){var o=this._niceExtent,r=l(t)+2;e[0]<o[0]&&i.push(e[0]);for(var a=o[0];a<=o[1];)if(i.push(a),a=u(a+t,r),i.length>n)return[];e[1]>(i.length?i[i.length-1]:o[1])&&i.push(e[1])}return i},getTicksLabels:function(){for(var t=[],e=this.getTicks(),i=0;i<e.length;i++)t.push(this.getLabel(e[i]));return t},getLabel:function(t){return o.addCommas(t)},niceTicks:function(t){t=t||5;var e=this._extent,i=e[1]-e[0];if(isFinite(i)){i<0&&(i=-i,e.reverse());var o=u(n.nice(i/t,!0),Math.max(l(e[0]),l(e[1]))+2),r=l(o)+2,h=[u(s(e[0]/o)*o,r),u(a(e[1]/o)*o,r)];this._interval=o,this._niceExtent=h}},niceExtent:function(t,e,i){var n=this._extent;if(n[0]===n[1])if(0!==n[0]){var o=n[0];i?n[0]-=o/2:(n[1]+=o/2,n[0]-=o/2)}else n[1]=1;var r=n[1]-n[0];isFinite(r)||(n[0]=0,n[1]=1),this.niceTicks(t);var l=this._interval;e||(n[0]=u(a(n[0]/l)*l)),i||(n[1]=u(s(n[1]/l)*l))}});h.create=function(){return new h},t.exports=h},function(t,e,i){function n(t){this.group=new r.Group,this._symbolCtor=t||a}function o(t,e,i){var n=t.getItemLayout(e);return n&&!isNaN(n[0])&&!isNaN(n[1])&&!(i&&i(e))&&"none"!==t.getItemVisual(e,"symbol")}var r=i(3),a=i(49),s=n.prototype;s.updateData=function(t,e){var i=this.group,n=t.hostModel,a=this._data,s=this._symbolCtor,l={itemStyle:n.getModel("itemStyle.normal").getItemStyle(["color"]),hoverItemStyle:n.getModel("itemStyle.emphasis").getItemStyle(),symbolRotate:n.get("symbolRotate"),symbolOffset:n.get("symbolOffset"),hoverAnimation:n.get("hoverAnimation"),labelModel:n.getModel("label.normal"),hoverLabelModel:n.getModel("label.emphasis")};t.diff(a).add(function(n){var r=t.getItemLayout(n);if(o(t,n,e)){var a=new s(t,n,l);a.attr("position",r),t.setItemGraphicEl(n,a),i.add(a)}}).update(function(u,h){var c=a.getItemGraphicEl(h),d=t.getItemLayout(u);return o(t,u,e)?(c?(c.updateData(t,u,l),r.updateProps(c,{position:d},n)):(c=new s(t,u),c.attr("position",d)),i.add(c),void t.setItemGraphicEl(u,c)):void i.remove(c)}).remove(function(t){var e=a.getItemGraphicEl(t);e&&e.fadeOut(function(){i.remove(e)})}).execute(),this._data=t},s.updateLayout=function(){var t=this._data;t&&t.eachItemGraphicEl(function(e,i){var n=t.getItemLayout(i);e.attr("position",n)})},s.remove=function(t){var e=this.group,i=this._data;i&&(t?i.eachItemGraphicEl(function(t){t.fadeOut(function(){e.remove(t)})}):e.removeAll())},t.exports=n},function(t,e,i){function n(t){var e={};return c(["start","end","startValue","endValue","throttle"],function(i){t.hasOwnProperty(i)&&(e[i]=t[i])}),e}function o(t,e,i,n){null!=i[e]&&null==i[t]&&(n[t]=null)}var r=i(1),a=i(11),s=i(2),l=i(7),u=i(110),h=i(180),c=r.each,d=u.eachAxisDim,f=s.extendComponentModel({type:"dataZoom",dependencies:["xAxis","yAxis","zAxis","radiusAxis","angleAxis","series"],defaultOption:{zlevel:0,z:4,orient:null,xAxisIndex:null,yAxisIndex:null,filterMode:"filter",throttle:null,start:0,end:100,startValue:null,endValue:null},init:function(t,e,i){this._dataIntervalByAxis={},this._dataInfo={},this._axisProxies={},this.textStyleModel,this._autoThrottle=!0;var o=n(t);this.mergeDefaultAndTheme(t,i),this.doInit(o)},mergeOption:function(t){var e=n(t);r.merge(this.option,t,!0),this.doInit(e)},doInit:function(t){var e=this.option;a.canvasSupported||(e.realtime=!1),this._setDefaultThrottle(t),o("start","startValue",t,e),o("end","endValue",t,e),this.textStyleModel=this.getModel("textStyle"),this._resetTarget(),this._giveAxisProxies()},_giveAxisProxies:function(){var t=this._axisProxies;this.eachTargetAxis(function(e,i,n,o){var r=this.dependentModels[e.axis][i],a=r.__dzAxisProxy||(r.__dzAxisProxy=new h(e.name,i,this,o));t[e.name+"_"+i]=a},this)},_resetTarget:function(){var t=this.option,e=this._judgeAutoMode();d(function(e){var i=e.axisIndex;t[i]=l.normalizeToArray(t[i])},this),"axisIndex"===e?this._autoSetAxisIndex():"orient"===e&&this._autoSetOrient()},_judgeAutoMode:function(){var t=this.option,e=!1;d(function(i){null!=t[i.axisIndex]&&(e=!0)},this);var i=t.orient;return null==i&&e?"orient":e?void 0:(null==i&&(t.orient="horizontal"),"axisIndex")},_autoSetAxisIndex:function(){var t=!0,e=this.get("orient",!0),i=this.option;if(t){var n="vertical"===e?{dim:"y",axisIndex:"yAxisIndex",axis:"yAxis"}:{dim:"x",axisIndex:"xAxisIndex",axis:"xAxis"};this.dependentModels[n.axis].length&&(i[n.axisIndex]=[0],t=!1)}t&&d(function(e){if(t){var n=[],o=this.dependentModels[e.axis];if(o.length&&!n.length)for(var r=0,a=o.length;r<a;r++)"category"===o[r].get("type")&&n.push(r);i[e.axisIndex]=n,n.length&&(t=!1)}},this),t&&this.ecModel.eachSeries(function(t){this._isSeriesHasAllAxesTypeOf(t,"value")&&d(function(e){var n=i[e.axisIndex],o=t.get(e.axisIndex),a=t.get(e.axisId),s=t.ecModel.queryComponents({mainType:e.axis,index:o,id:a})[0];o=s.componentIndex,r.indexOf(n,o)<0&&n.push(o)})},this)},_autoSetOrient:function(){var t;this.eachTargetAxis(function(e){!t&&(t=e.name)},this),this.option.orient="y"===t?"vertical":"horizontal"},_isSeriesHasAllAxesTypeOf:function(t,e){var i=!0;return d(function(n){var o=t.get(n.axisIndex),r=this.dependentModels[n.axis][o];r&&r.get("type")===e||(i=!1)},this),i},_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}},getFirstTargetAxisModel:function(){var t;return d(function(e){if(null==t){var i=this.get(e.axisIndex);i.length&&(t=this.dependentModels[e.axis][i[0]])}},this),t},eachTargetAxis:function(t,e){var i=this.ecModel;d(function(n){c(this.get(n.axisIndex),function(o){t.call(e,n,o,this,i)},this)},this)},getAxisProxy:function(t,e){return this._axisProxies[t+"_"+e]},setRawRange:function(t){c(["start","end","startValue","endValue"],function(e){this.option[e]=t[e]},this)},getPercentRange:function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},getValueRange:function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var i=this.findRepresentativeAxisProxy();return i?i.getDataValueWindow():void 0},findRepresentativeAxisProxy:function(){var t=this._axisProxies;for(var e in t)if(t.hasOwnProperty(e)&&t[e].hostedBy(this))return t[e];for(var e in t)if(t.hasOwnProperty(e)&&!t[e].hostedBy(this))return t[e]}});t.exports=f},function(t,e,i){var n=i(57);t.exports=n.extend({type:"dataZoom",render:function(t,e,i,n){this.dataZoomModel=t,this.ecModel=e,this.api=i},getTargetInfo:function(){function t(t,e,i,n){for(var o,r=0;r<i.length;r++)if(i[r].model===t){o=i[r];break}o||i.push(o={model:t,axisModels:[],coordIndex:n}),o.axisModels.push(e)}var e=this.dataZoomModel,i=this.ecModel,n=[],o=[],r=[];return e.eachTargetAxis(function(e,a){var s=i.getComponent(e.axis,a);if(s){r.push(s);var l,u=e.axis;"xAxis"===u||"yAxis"===u?l="grid":"angleAxis"!==u&&"radiusAxis"!==u||(l="polar");var h=l?i.queryComponents({mainType:l,index:s.get(l+"Index"),id:s.get(l+"Id")})[0]:null;null!=h&&t(h,s,"grid"===l?n:o,h.componentIndex)}},this),{cartesians:n,polars:o,axisModels:r}}})},function(t,e,i){function n(t,e){var i=t[1]-t[0],n=e,o=i/n/2;t[0]+=o,t[1]-=o}var o=i(4),r=o.linearMap,a=i(1),s=[0,1],l=function(t,e,i){this.dim=t,this.scale=e,this._extent=i||[0,0],this.inverse=!1,this.onBand=!1};l.prototype={constructor:l,contain:function(t){var e=this._extent,i=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return t>=i&&t<=n},containData:function(t){return this.contain(this.dataToCoord(t))},getExtent:function(){var t=this._extent.slice();return t},getPixelPrecision:function(t){return o.getPixelPrecision(t||this.scale.getExtent(),this._extent)},setExtent:function(t,e){var i=this._extent;i[0]=t,i[1]=e},dataToCoord:function(t,e){var i=this._extent,o=this.scale;return t=o.normalize(t),this.onBand&&"ordinal"===o.type&&(i=i.slice(),n(i,o.count())),r(t,s,i,e)},coordToData:function(t,e){var i=this._extent,o=this.scale;this.onBand&&"ordinal"===o.type&&(i=i.slice(),n(i,o.count()));var a=r(t,i,s,e);return this.scale.scale(a)},getTicksCoords:function(t){if(this.onBand&&!t){for(var e=this.getBands(),i=[],n=0;n<e.length;n++)i.push(e[n][0]);return e[n-1]&&i.push(e[n-1][1]),i}return a.map(this.scale.getTicks(),this.dataToCoord,this)},getLabelsCoords:function(){return a.map(this.scale.getTicks(),this.dataToCoord,this)},getBands:function(){for(var t=this.getExtent(),e=[],i=this.scale.count(),n=t[0],o=t[1],r=o-n,a=0;a<i;a++)e.push([r*a/i+n,r*(a+1)/i+n]);return e},getBandWidth:function(){var t=this._extent,e=this.scale.getExtent(),i=e[1]-e[0]+(this.onBand?1:0);0===i&&(i=1);var n=Math.abs(t[1]-t[0]);return Math.abs(n)/i}},t.exports=l},function(t,e,i){var n=i(1),o=i(21),r=o.parseClassType,a=0,s={},l="_";s.getUID=function(t){return[t||"",a++,Math.random()].join(l)},s.enableSubTypeDefaulter=function(t){var e={};return t.registerSubTypeDefaulter=function(t,i){t=r(t),e[t.main]=i},t.determineSubType=function(i,n){var o=n.type;if(!o){var a=r(i).main;t.hasSubTypes(i)&&e[a]&&(o=e[a](n))}return o},t},s.enableTopologicalTravel=function(t,e){function i(t){var i={},a=[];return n.each(t,function(s){var l=o(i,s),u=l.originalDeps=e(s),h=r(u,t);l.entryCount=h.length,0===l.entryCount&&a.push(s),n.each(h,function(t){n.indexOf(l.predecessor,t)<0&&l.predecessor.push(t);var e=o(i,t);n.indexOf(e.successor,t)<0&&e.successor.push(s)})}),{graph:i,noEntryList:a}}function o(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}function r(t,e){var i=[];return n.each(t,function(t){n.indexOf(e,t)>=0&&i.push(t)}),i}t.topologicalTravel=function(t,e,o,r){function a(t){u[t].entryCount--,0===u[t].entryCount&&h.push(t)}function s(t){c[t]=!0,a(t)}if(t.length){var l=i(e),u=l.graph,h=l.noEntryList,c={};for(n.each(t,function(t){c[t]=!0});h.length;){var d=h.pop(),f=u[d],p=!!c[d];p&&(o.call(r,d,f.originalDeps.slice()),delete c[d]),n.each(f.successor,p?s:a)}n.each(c,function(){throw new Error("Circle dependency may exists")})}}},t.exports=s},function(t,e){function i(t){for(var e=0;t>=h;)e|=1&t,t>>=1;return t+e}function n(t,e,i,n){var r=e+1;if(r===i)return 1;if(n(t[r++],t[e])<0){for(;r<i&&n(t[r],t[r-1])<0;)r++;o(t,e,r)}else for(;r<i&&n(t[r],t[r-1])>=0;)r++;return r-e}function o(t,e,i){for(i--;e<i;){var n=t[e];t[e++]=t[i],t[i--]=n}}function r(t,e,i,n,o){for(n===e&&n++;n<i;n++){for(var r,a=t[n],s=e,l=n;s<l;)r=s+l>>>1,o(a,t[r])<0?l=r:s=r+1;var u=n-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 a(t,e,i,n,o,r){var a=0,s=0,l=1;if(r(t,e[i+o])>0){for(s=n-o;l<s&&r(t,e[i+o+l])>0;)a=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),a+=o,l+=o}else{for(s=o+1;l<s&&r(t,e[i+o-l])<=0;)a=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s);var u=a;a=o-l,l=o-u}for(a++;a<l;){var h=a+(l-a>>>1);r(t,e[i+h])>0?a=h+1:l=h}return l}function s(t,e,i,n,o,r){var a=0,s=0,l=1;if(r(t,e[i+o])<0){for(s=o+1;l<s&&r(t,e[i+o-l])<0;)a=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s);var u=a;a=o-l,l=o-u}else{for(s=n-o;l<s&&r(t,e[i+o+l])>=0;)a=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),a+=o,l+=o}for(a++;a<l;){var h=a+(l-a>>>1);r(t,e[i+h])<0?l=h:a=h+1}return l}function l(t,e){function i(t,e){h[y]=t,f[y]=e,y+=1}function n(){for(;y>1;){var t=y-2;if(t>=1&&f[t-1]<=f[t]+f[t+1]||t>=2&&f[t-2]<=f[t]+f[t-1])f[t-1]<f[t+1]&&t--;else if(f[t]>f[t+1])break;r(t)}}function o(){for(;y>1;){var t=y-2;t>0&&f[t-1]<f[t+1]&&t--,r(t)}}function r(i){var n=h[i],o=f[i],r=h[i+1],c=f[i+1];f[i]=o+c,i===y-3&&(h[i+1]=h[i+2],f[i+1]=f[i+2]),y--;var d=s(t[r],t,n,o,0,e);n+=d,o-=d,0!==o&&(c=a(t[n+o-1],t,r,c,c-1,e),0!==c&&(o<=c?l(n,o,r,c):u(n,o,r,c)))}function l(i,n,o,r){var l=0;for(l=0;l<n;l++)x[l]=t[i+l];var u=0,h=o,d=i;if(t[d++]=t[h++],0!==--r){if(1===n){for(l=0;l<r;l++)t[d+l]=t[h+l];return void(t[d+r]=x[u])}for(var f,g,m,v=p;;){f=0,g=0,m=!1;do if(e(t[h],x[u])<0){if(t[d++]=t[h++],g++,f=0,0===--r){m=!0;break}}else if(t[d++]=x[u++],f++,g=0,1===--n){m=!0;break}while((f|g)<v);if(m)break;do{if(f=s(t[h],x,u,n,0,e),0!==f){for(l=0;l<f;l++)t[d+l]=x[u+l];if(d+=f,u+=f,n-=f,n<=1){m=!0;break}}if(t[d++]=t[h++],0===--r){m=!0;break}if(g=a(x[u],t,h,r,0,e),0!==g){for(l=0;l<g;l++)t[d+l]=t[h+l];if(d+=g,h+=g,r-=g,0===r){m=!0;break}}if(t[d++]=x[u++],1===--n){m=!0;break}v--}while(f>=c||g>=c);if(m)break;v<0&&(v=0),v+=2}if(p=v,p<1&&(p=1),1===n){for(l=0;l<r;l++)t[d+l]=t[h+l];t[d+r]=x[u]}else{if(0===n)throw new Error;for(l=0;l<n;l++)t[d+l]=x[u+l]}}else for(l=0;l<n;l++)t[d+l]=x[u+l]}function u(i,n,o,r){var l=0;for(l=0;l<r;l++)x[l]=t[o+l];var u=i+n-1,h=r-1,d=o+r-1,f=0,g=0;if(t[d--]=t[u--],0!==--n){if(1===r){for(d-=n,u-=n,g=d+1,f=u+1,l=n-1;l>=0;l--)t[g+l]=t[f+l];return void(t[d]=x[h])}for(var m=p;;){var v=0,y=0,_=!1;do if(e(x[h],t[u])<0){if(t[d--]=t[u--],v++,y=0,0===--n){_=!0;break}}else if(t[d--]=x[h--],y++,v=0,1===--r){_=!0;break}while((v|y)<m);if(_)break;do{if(v=n-s(x[h],t,i,n,n-1,e),0!==v){for(d-=v,u-=v,n-=v,g=d+1,f=u+1,l=v-1;l>=0;l--)t[g+l]=t[f+l];if(0===n){_=!0;break}}if(t[d--]=x[h--],1===--r){_=!0;break}if(y=r-a(t[u],x,0,r,r-1,e),0!==y){for(d-=y,h-=y,r-=y,g=d+1,f=h+1,l=0;l<y;l++)t[g+l]=x[f+l];if(r<=1){_=!0;break}}if(t[d--]=t[u--],0===--n){_=!0;break}m--}while(v>=c||y>=c);if(_)break;m<0&&(m=0),m+=2}if(p=m,p<1&&(p=1),1===r){for(d-=n,u-=n,g=d+1,f=u+1,l=n-1;l>=0;l--)t[g+l]=t[f+l];t[d]=x[h]}else{if(0===r)throw new Error;for(f=d-(r-1),l=0;l<r;l++)t[f+l]=x[l]}}else for(f=d-(r-1),l=0;l<r;l++)t[f+l]=x[l]}var h,f,p=c,g=0,m=d,v=0,y=0;g=t.length,g<2*d&&(m=g>>>1);var x=[];v=g<120?5:g<1542?10:g<119151?19:40,h=[],f=[],this.mergeRuns=n,this.forceMergeRuns=o,this.pushRun=i}function u(t,e,o,a){o||(o=0),a||(a=t.length);var s=a-o;if(!(s<2)){var u=0;if(s<h)return u=n(t,o,a,e),void r(t,o,a,o+u,e);var c=new l(t,e),d=i(s);do{if(u=n(t,o,a,e),u<d){var f=s;f>d&&(f=d),r(t,o,o+f,o+u,e),u=f}c.pushRun(o,u),c.mergeRuns(),s-=u,o+=u}while(0!==s);c.forceMergeRuns()}}var h=32,c=7,d=256;t.exports=u},function(t,e){"use strict";function i(t){return t}function n(t,e,n,o){this._old=t,this._new=e,this._oldKeyGetter=n||i,this._newKeyGetter=o||i}function o(t,e,i,n){for(var o=0;o<t.length;o++){var r=n(t[o],o),a=e[r];null==a?(i.push(r),e[r]=o):(a.length||(e[r]=a=[a]),a.push(o))}}n.prototype={constructor:n,add:function(t){return this._add=t,this},update:function(t){return this._update=t,this},remove:function(t){return this._remove=t,this},execute:function(){var t,e=this._old,i=this._new,n=this._oldKeyGetter,r=this._newKeyGetter,a={},s={},l=[],u=[];for(o(e,a,l,n),o(i,s,u,r),t=0;t<e.length;t++){var h=l[t],c=s[h];if(null!=c){var d=c.length;d?(1===d&&(s[h]=null),c=c.unshift()):s[h]=null,this._update&&this._update(c,t)}else this._remove&&this._remove(t)}for(var t=0;t<u.length;t++){var h=u[t];if(s.hasOwnProperty(h)){var c=s[h];if(null==c)continue;if(c.length)for(var f=0,d=c.length;f<d;f++)this._add&&this._add(c[f]);else this._add&&this._add(c)}}}},t.exports=n},function(t,e){t.exports=function(t,e,i,n,o){n.eachRawSeriesByType(t,function(t){var o=t.getData(),r=t.get("symbol")||e,a=t.get("symbolSize");o.setVisual({legendSymbol:i||r,symbol:r,symbolSize:a}),n.isSeriesFiltered(t)||("function"==typeof a&&o.each(function(e){var i=t.getRawValue(e),n=t.getDataParams(e);o.setItemVisual(e,"symbolSize",a(i,n))}),o.each(function(t){var e=o.getItemModel(t),i=e.getShallow("symbol",!0),n=e.getShallow("symbolSize",!0);null!=i&&o.setItemVisual(t,"symbol",i),null!=n&&o.setItemVisual(t,"symbolSize",n)}))})}},function(t,e,i){var n=i(32);t.exports=function(){if(0!==n.debugMode)if(1==n.debugMode)for(var t in arguments)throw new Error(arguments[t]);else if(n.debugMode>1)for(var t in arguments)console.log(arguments[t])}},function(t,e,i){ +function n(t){o.call(this,t)}var o=i(36),r=i(8),a=i(1),s=i(150),l=new s(50);n.prototype={constructor:n,type:"image",brush:function(t,e){var i,n=this.style,o=n.image;if(n.bind(t,this,e),i="string"==typeof o?this._image:o,!i&&o){var r=l.get(o);if(!r)return i=new Image,i.onload=function(){i.onload=null;for(var t=0;t<r.pending.length;t++)r.pending[t].dirty()},r={image:i,pending:[this]},i.src=o,l.put(o,r),void(this._image=i);if(i=r.image,this._image=i,!i.width||!i.height)return void r.pending.push(this)}if(i){var a=n.width||i.width,s=n.height||i.height,u=n.x||0,h=n.y||0;if(!i.width||!i.height)return;if(this.setTransform(t),n.sWidth&&n.sHeight){var c=n.sx||0,d=n.sy||0;t.drawImage(i,c,d,n.sWidth,n.sHeight,u,h,a,s)}else if(n.sx&&n.sy){var c=n.sx,d=n.sy,f=a-c,p=s-d;t.drawImage(i,c,d,f,p,u,h,a,s)}else t.drawImage(i,u,h,a,s);null==n.width&&(n.width=a),null==n.height&&(n.height=s),this.restoreTransform(t),null!=n.text&&this.drawRectText(t,this.getBoundingRect())}},getBoundingRect:function(){var t=this.style;return this._rect||(this._rect=new r(t.x||0,t.y||0,t.width||0,t.height||0)),this._rect}},a.inherits(n,o),t.exports=n},function(t,e,i){function n(t){return t=t instanceof Array?t.slice():[+t,+t],t[0]/=2,t[1]/=2,t}function o(t,e,i){l.Group.call(this),this.updateData(t,e,i)}function r(t,e){this.parent.drift(t,e)}var a=i(1),s=i(26),l=i(3),u=i(4),h=o.prototype;h._createSymbol=function(t,e,i){this.removeAll();var o=e.hostModel,a=e.getItemVisual(i,"color"),u=s.createSymbol(t,-1,-1,2,2,a);u.attr({z2:100,culling:!0,scale:[0,0]}),u.drift=r;var h=n(e.getItemVisual(i,"symbolSize"));l.initProps(u,{scale:h},o,i),this._symbolType=t,this.add(u)},h.stopSymbolAnimation=function(t){this.childAt(0).stopAnimation(t)},h.getSymbolPath=function(){return this.childAt(0)},h.getScale=function(){return this.childAt(0).scale},h.highlight=function(){this.childAt(0).trigger("emphasis")},h.downplay=function(){this.childAt(0).trigger("normal")},h.setZ=function(t,e){var i=this.childAt(0);i.zlevel=t,i.z=e},h.setDraggable=function(t){var e=this.childAt(0);e.draggable=t,e.cursor=t?"move":"pointer"},h.updateData=function(t,e,i){this.silent=!1;var o=t.getItemVisual(e,"symbol")||"circle",r=t.hostModel,a=n(t.getItemVisual(e,"symbolSize"));if(o!==this._symbolType)this._createSymbol(o,t,e);else{var s=this.childAt(0);l.updateProps(s,{scale:a},r,e)}this._updateCommon(t,e,a,i),this._seriesModel=r};var c=["itemStyle","normal"],d=["itemStyle","emphasis"],f=["label","normal"],p=["label","emphasis"];h._updateCommon=function(t,e,i,o){var r=this.childAt(0),s=t.hostModel,h=t.getItemVisual(e,"color");"image"!==r.type&&r.useStyle({strokeNoScale:!0}),o=o||null;var g=o&&o.itemStyle,m=o&&o.hoverItemStyle,v=o&&o.symbolRotate,y=o&&o.symbolOffset,x=o&&o.labelModel,_=o&&o.hoverLabelModel,b=o&&o.hoverAnimation;if(!o||t.hasItemOption){var w=t.getItemModel(e);g=w.getModel(c).getItemStyle(["color"]),m=w.getModel(d).getItemStyle(),v=w.getShallow("symbolRotate"),y=w.getShallow("symbolOffset"),x=w.getModel(f),_=w.getModel(p),b=w.getShallow("hoverAnimation")}else m=a.extend({},m);var S=r.style;r.attr("rotation",(v||0)*Math.PI/180||0),y&&r.attr("position",[u.parsePercent(y[0],i[0]),u.parsePercent(y[1],i[1])]),r.setColor(h),r.setStyle(g);var M=t.getItemVisual(e,"opacity");null!=M&&(S.opacity=M);for(var T,I,A=t.dimensions.slice();A.length&&(T=A.pop(),I=t.getDimensionInfo(T).type,"ordinal"===I||"time"===I););null!=T&&x.getShallow("show")?(l.setText(S,x,h),S.text=a.retrieve(s.getFormattedLabel(e,"normal"),t.get(T,e))):S.text="",null!=T&&_.getShallow("show")?(l.setText(m,_,h),m.text=a.retrieve(s.getFormattedLabel(e,"emphasis"),t.get(T,e))):m.text="";var L=n(t.getItemVisual(e,"symbolSize"));if(r.off("mouseover").off("mouseout").off("emphasis").off("normal"),r.hoverStyle=m,l.setHoverStyle(r),b&&s.ifEnableAnimation()){var C=function(){var t=L[1]/L[0];this.animateTo({scale:[Math.max(1.1*L[0],L[0]+3),Math.max(1.1*L[1],L[1]+3*t)]},400,"elasticOut")},D=function(){this.animateTo({scale:L},400,"elasticOut")};r.on("mouseover",C).on("mouseout",D).on("emphasis",C).on("normal",D)}},h.fadeOut=function(t){var e=this.childAt(0);this.silent=!0,e.style.text="",l.updateProps(e,{scale:[0,0]},this._seriesModel,this.dataIndex,t)},a.inherits(o,l.Group),t.exports=o},function(t,e,i){function n(t){var e={componentType:t.mainType};return e[t.mainType+"Index"]=t.componentIndex,e}function o(t,e,i){var n,o,r=d(e-t.rotation);return f(r)?(o=i>0?"top":"bottom",n="center"):f(r-v)?(o=i>0?"bottom":"top",n="center"):(o="middle",n=r>0&&r<v?i>0?"right":"left":i>0?"left":"right"),{rotation:r,textAlign:n,verticalAlign:o}}function r(t,e,i,n){var o,r,a=d(i-t.rotation),s=n[0]>n[1],l="start"===e&&!s||"start"!==e&&s;return f(a-v/2)?(r=l?"bottom":"top",o="center"):f(a-1.5*v)?(r=l?"top":"bottom",o="center"):(r="middle",o=a<1.5*v&&a>v/2?l?"left":"right":l?"right":"left"),{rotation:a,textAlign:o,verticalAlign:r}}function a(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)}var s=i(1),l=i(9),u=i(3),h=i(10),c=i(4),d=c.remRadian,f=c.isRadianAroundZero,p=i(5),g=p.applyTransform,m=s.retrieve,v=Math.PI,y=function(t,e){this.opt=e,this.axisModel=t,s.defaults(e,{labelOffset:0,nameDirection:1,tickDirection:1,labelDirection:1,silent:!0}),this.group=new u.Group;var i=new u.Group({position:e.position.slice(),rotation:e.rotation});i.updateTransform(),this._transform=i.transform,this._dumbGroup=i};y.prototype={constructor:y,hasBuilder:function(t){return!!x[t]},add:function(t){x[t].call(this)},getGroup:function(){return this.group}};var x={axisLine:function(){var t=this.opt,e=this.axisModel;if(e.get("axisLine.show")){var i=this.axisModel.axis.getExtent(),n=this._transform,o=[i[0],0],r=[i[1],0];n&&(g(o,o,n),g(r,r,n)),this.group.add(new u.Line(u.subPixelOptimizeLine({anid:"line",shape:{x1:o[0],y1:o[1],x2:r[0],y2:r[1]},style:s.extend({lineCap:"round"},e.getModel("axisLine.lineStyle").getLineStyle()),strokeContainThreshold:t.strokeContainThreshold||5,silent:!0,z2:1})))}},axisTick:function(){var t=this.axisModel;if(t.get("axisTick.show"))for(var e=t.axis,i=t.getModel("axisTick"),n=this.opt,o=i.getModel("lineStyle"),r=i.get("length"),a=b(i,n.labelInterval),l=e.getTicksCoords(i.get("alignWithLabel")),h=e.scale.getTicks(),c=[],d=[],f=this._transform,p=0;p<l.length;p++)if(!_(e,p,a)){var m=l[p];c[0]=m,c[1]=0,d[0]=m,d[1]=n.tickDirection*r,f&&(g(c,c,f),g(d,d,f)),this.group.add(new u.Line(u.subPixelOptimizeLine({anid:"tick_"+h[p],shape:{x1:c[0],y1:c[1],x2:d[0],y2:d[1]},style:s.defaults(o.getLineStyle(),{stroke:t.get("axisLine.lineStyle.color")}),z2:2,silent:!0})))}},axisLabel:function(){function t(t,e){var i=t&&t.getBoundingRect().clone(),n=e&&e.getBoundingRect().clone();if(i&&n)return i.applyTransform(t.getLocalTransform()),n.applyTransform(e.getLocalTransform()),i.intersect(n)}var e=this.opt,i=this.axisModel,r=m(e.axisLabelShow,i.get("axisLabel.show"));if(r){var s=i.axis,l=i.getModel("axisLabel"),c=l.getModel("textStyle"),d=l.get("margin"),f=s.scale.getTicks(),p=i.getFormattedLabels(),g=m(e.labelRotation,l.get("rotate"))||0;g=g*v/180;for(var y=o(e,g,e.labelDirection),x=i.get("data"),b=[],w=a(i),S=i.get("triggerEvent"),M=0;M<f.length;M++)if(!_(s,M,e.labelInterval)){var T=c;x&&x[M]&&x[M].textStyle&&(T=new h(x[M].textStyle,c,i.ecModel));var I=T.getTextColor()||i.get("axisLine.lineStyle.color"),A=s.dataToCoord(f[M]),L=[A,e.labelOffset+e.labelDirection*d],C=s.scale.getLabel(f[M]),D=new u.Text({anid:"label_"+f[M],style:{text:p[M],textAlign:T.get("align",!0)||y.textAlign,textVerticalAlign:T.get("baseline",!0)||y.verticalAlign,textFont:T.getFont(),fill:"function"==typeof I?I(C):I},position:L,rotation:y.rotation,silent:w,z2:10});S&&(D.eventData=n(i),D.eventData.targetType="axisLabel",D.eventData.value=C),this._dumbGroup.add(D),D.updateTransform(),b.push(D),this.group.add(D),D.decomposeTransform()}if("category"!==s.type){if(i.getMin?i.getMin():i.get("min")){var P=b[0],k=b[1];t(P,k)&&(P.ignore=!0)}if(i.getMax?i.getMax():i.get("max")){var z=b[b.length-1],O=b[b.length-2];t(O,z)&&(z.ignore=!0)}}}},axisName:function(){var t=this.opt,e=this.axisModel,i=m(t.axisName,e.get("name"));if(i){var h,c=e.get("nameLocation"),d=t.nameDirection,f=e.getModel("nameTextStyle"),p=e.get("nameGap")||0,g=this.axisModel.axis.getExtent(),y=g[0]>g[1]?-1:1,x=["start"===c?g[0]-y*p:"end"===c?g[1]+y*p:(g[0]+g[1])/2,"middle"===c?t.labelOffset+d*p:0],_=e.get("nameRotate");null!=_&&(_=_*v/180);var b;"middle"===c?h=o(t,null!=_?_:t.rotation,d):(h=r(t,c,_||0,g),b=t.axisNameAvailableWidth,null!=b&&(b=Math.abs(b/Math.sin(h.rotation)),!isFinite(b)&&(b=null)));var w=f.getFont(),S=e.get("nameTruncate",!0)||{},M=S.ellipsis,T=m(S.maxWidth,b),I=null!=M&&null!=T?l.truncateText(i,T,w,M,{minChar:2,placeholder:S.placeholder}):i,A=e.get("tooltip",!0),L=e.mainType,C={componentType:L,name:i,$vars:["name"]};C[L+"Index"]=e.componentIndex;var D=new u.Text({anid:"name",__fullText:i,__truncatedText:I,style:{text:I,textFont:w,fill:f.getTextColor()||e.get("axisLine.lineStyle.color"),textAlign:h.textAlign,textVerticalAlign:h.verticalAlign},position:x,rotation:h.rotation,silent:a(e),z2:1,tooltip:A&&A.show?s.extend({content:i,formatter:function(){return i},formatterParams:C},A):null});e.get("triggerEvent")&&(D.eventData=n(e),D.eventData.targetType="axisName",D.eventData.name=i),this._dumbGroup.add(D),D.updateTransform(),this.group.add(D),D.decomposeTransform()}}},_=y.ifIgnoreOnTick=function(t,e,i){var n,o=t.scale;return"ordinal"===o.type&&("function"==typeof i?(n=o.getTicks()[e],!i(n,o.getLabel(n))):e%(i+1))},b=y.getInterval=function(t,e){var i=t.get("interval");return null!=i&&"auto"!=i||(i=e),i};t.exports=y},function(t,e,i){function n(t){return a.isObject(t)&&null!=t.value?t.value:t}function o(){return"category"===this.get("type")&&a.map(this.get("data"),n)}function r(){return s.getFormattedLabels(this.axis,this.get("axisLabel.formatter"))}var a=i(1),s=i(22);t.exports={getFormattedLabels:r,getCategories:o}},function(t,e,i){var n=i(81),o=i(1),r=i(12),a=i(13),s=["value","category","time","log"];t.exports=function(t,e,i,l){o.each(s,function(r){e.extend({type:t+"Axis."+r,mergeDefaultAndTheme:function(e,n){var s=this.layoutMode,l=s?a.getLayoutParams(e):{},u=n.getTheme();o.merge(e,u.get(r+"Axis")),o.merge(e,this.getDefaultOption()),e.type=i(t,e),s&&a.mergeLayoutParam(e,l,s)},defaultOption:o.mergeAll([{},n[r+"Axis"],l],!0)})}),r.registerSubTypeDefaulter(t+"Axis",o.curry(i,t))}},function(t,e,i){"use strict";function n(t,e){return e.type||(e.data?"category":"value")}var o=i(12),r=i(1),a=i(52),s=o.extend({type:"cartesian2dAxis",axis:null,init:function(){s.superApply(this,"init",arguments),this.resetRange()},mergeOption:function(){s.superApply(this,"mergeOption",arguments),this.resetRange()},restoreData:function(){s.superApply(this,"restoreData",arguments),this.resetRange()},findGridModel:function(){return this.ecModel.queryComponents({mainType:"grid",index:this.get("gridIndex"),id:this.get("gridId")})[0]}});r.merge(s.prototype,i(51)),r.merge(s.prototype,i(82));var l={offset:0};a("x",s,n,l),a("y",s,n,l),t.exports=s},function(t,e,i){function n(t,e,i){return t.findGridModel()===e}function o(t){var e,i=t.model,n=i.getFormattedLabels(),o=1,r=n.length;r>40&&(o=Math.ceil(r/40));for(var a=0;a<r;a+=o)if(!t.isLabelIgnored(a)){var s=i.getTextRect(n[a]);e?e.union(s):e=s}return e}function r(t,e,i){this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this._initCartesian(t,e,i),this._model=t}function a(t,e){var i=t.getExtent(),n=i[0]+i[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return n-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return n-t+e}}function s(t,e){return c.map(y,function(e){var i=t.getReferringComponents(e)[0];return i})}function l(t){return"cartesian2d"===t.get("coordinateSystem")}var u=i(13),h=i(22),c=i(1),d=i(119),f=i(117),p=c.each,g=h.ifAxisCrossZero,m=h.niceScaleExtent;i(120);var v=r.prototype;v.type="grid",v.getRect=function(){return this._rect},v.update=function(t,e){function i(t){var e=n[t];for(var i in e)if(e.hasOwnProperty(i)){var o=e[i];if(o&&("category"===o.type||!g(o)))return!0}return!1}var n=this._axesMap;this._updateScale(t,this._model),p(n.x,function(t){m(t,t.model)}),p(n.y,function(t){m(t,t.model)}),p(n.x,function(t){i("y")&&(t.onZero=!1)}),p(n.y,function(t){i("x")&&(t.onZero=!1)}),this.resize(this._model,e)},v.resize=function(t,e){function i(){p(r,function(t){var e=t.isHorizontal(),i=e?[0,n.width]:[0,n.height],o=t.inverse?1:0;t.setExtent(i[o],i[1-o]),a(t,e?n.x:n.y)})}var n=u.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()});this._rect=n;var r=this._axesList;i(),t.get("containLabel")&&(p(r,function(t){if(!t.model.get("axisLabel.inside")){var e=o(t);if(e){var i=t.isHorizontal()?"height":"width",r=t.model.get("axisLabel.margin");n[i]-=e[i]+r,"top"===t.position?n.y+=e.height+r:"left"===t.position&&(n.x+=e.width+r)}}}),i())},v.getAxis=function(t,e){var i=this._axesMap[t];if(null!=i){if(null==e)for(var n in i)if(i.hasOwnProperty(n))return i[n];return i[e]}},v.getCartesian=function(t,e){if(null!=t&&null!=e){var i="x"+t+"y"+e;return this._coordsMap[i]}for(var n=0,o=this._coordsList;n<o.length;n++)if(o[n].getAxis("x").index===t||o[n].getAxis("y").index===e)return o[n]},v.convertToPixel=function(t,e,i){var n=this._findConvertTarget(t,e);return n.cartesian?n.cartesian.dataToPoint(i):n.axis?n.axis.toGlobalCoord(n.axis.dataToCoord(i)):null},v.convertFromPixel=function(t,e,i){var n=this._findConvertTarget(t,e);return n.cartesian?n.cartesian.pointToData(i):n.axis?n.axis.coordToData(n.axis.toLocalCoord(i)):null},v._findConvertTarget=function(t,e){var i,n,o=e.seriesModel,r=e.xAxisModel||o&&o.getReferringComponents("xAxis")[0],a=e.yAxisModel||o&&o.getReferringComponents("yAxis")[0],s=e.gridModel,l=this._coordsList;if(o)i=o.coordinateSystem,c.indexOf(l,i)<0&&(i=null);else if(r&&a)i=this.getCartesian(r.componentIndex,a.componentIndex);else if(r)n=this.getAxis("x",r.componentIndex);else if(a)n=this.getAxis("y",a.componentIndex);else if(s){var u=s.coordinateSystem;u===this&&(i=this._coordsList[0])}return{cartesian:i,axis:n}},v.containPoint=function(t){var e=this._coordsList[0];if(e)return e.containPoint(t)},v._initCartesian=function(t,e,i){function o(i){return function(o,l){if(n(o,t,e)){var u=o.get("position");"x"===i?"top"!==u&&"bottom"!==u&&(u="bottom",r[u]&&(u="top"===u?"bottom":"top")):"left"!==u&&"right"!==u&&(u="left",r[u]&&(u="left"===u?"right":"left")),r[u]=!0;var c=new f(i,h.createScaleByModel(o),[0,0],o.get("type"),u),d="category"===c.type;c.onBand=d&&o.get("boundaryGap"),c.inverse=o.get("inverse"),c.onZero=o.get("axisLine.onZero"),o.axis=c,c.model=o,c.grid=this,c.index=l,this._axesList.push(c),a[i][l]=c,s[i]++}}}var r={left:!1,right:!1,top:!1,bottom:!1},a={x:{},y:{}},s={x:0,y:0};return e.eachComponent("xAxis",o("x"),this),e.eachComponent("yAxis",o("y"),this),s.x&&s.y?(this._axesMap=a,void p(a.x,function(t,e){p(a.y,function(i,n){var o="x"+e+"y"+n,r=new d(o);r.grid=this,this._coordsMap[o]=r,this._coordsList.push(r),r.addAxis(t),r.addAxis(i)},this)},this)):(this._axesMap={},void(this._axesList=[]))},v._updateScale=function(t,e){function i(t,e,i){p(i.coordDimToDataDim(e.dim),function(i){e.scale.unionExtent(t.getDataExtent(i,"ordinal"!==e.scale.type))})}c.each(this._axesList,function(t){t.scale.setExtent(1/0,-(1/0))}),t.eachSeries(function(o){if(l(o)){var r=s(o,t),a=r[0],u=r[1];if(!n(a,e,t)||!n(u,e,t))return;var h=this.getCartesian(a.componentIndex,u.componentIndex),c=o.getData(),d=h.getAxis("x"),f=h.getAxis("y");"list"===c.type&&(i(c,d,o),i(c,f,o))}},this)};var y=["xAxis","yAxis"];r.create=function(t,e){var i=[];return t.eachComponent("grid",function(n,o){var a=new r(n,t,e);a.name="grid_"+o,a.resize(n,e),n.coordinateSystem=a,i.push(a)}),t.eachSeries(function(e){if(l(e)){var i=s(e,t),n=i[0],o=i[1],r=n.findGridModel(),a=r.coordinateSystem;e.coordinateSystem=a.getCartesian(n.componentIndex,o.componentIndex)}}),i},r.dimensions=d.prototype.dimensions,i(23).register("cartesian2d",r),t.exports=r},function(t,e){t.exports=function(t,e){e.eachSeriesByType(t,function(t){var e=t.getData(),i=t.coordinateSystem;if(i){var n=i.dimensions;"singleAxis"===i.type?e.each(n[0],function(t,n){e.setItemLayout(n,isNaN(t)?[NaN,NaN]:i.dataToPoint(t))}):e.each(n,function(t,n,o){e.setItemLayout(o,isNaN(t)||isNaN(n)?[NaN,NaN]:i.dataToPoint([t,n]))},!0)}})}},function(t,e){t.exports={clearColorPalette:function(){this._colorIdx=0,this._colorNameMap={}},getColorFromPalette:function(t,e){e=e||this;var i=e._colorIdx||0,n=e._colorNameMap||(e._colorNameMap={});if(n[t])return n[t];var o=this.get("color",!0)||[];if(o.length){var r=o[i];return t&&(n[t]=r),e._colorIdx=(i+1)%o.length,r}}}},function(t,e,i){var n=i(33),o=i(43),r=i(21),a=function(){this.group=new n,this.uid=o.getUID("viewComponent")};a.prototype={constructor:a,init:function(t,e){},render:function(t,e,i,n){},dispose:function(){}};var s=a.prototype;s.updateView=s.updateLayout=s.updateVisual=function(t,e,i,n){},r.enableClassExtend(a),r.enableClassManagement(a,{registerWhenExtend:!0}),t.exports=a},function(t,e,i){"use strict";var n=i(62),o=i(20),r=i(88),a=i(166),s=i(1),l=function(t){r.call(this,t),o.call(this,t),a.call(this,t),this.id=t.id||n()};l.prototype={type:"element",name:"",__zr:null,ignore:!1,clipPath:null,drift:function(t,e){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.dirty(!1)},beforeUpdate:function(){},afterUpdate:function(){},update:function(){this.updateTransform()},traverse:function(t,e){},attrKV:function(t,e){if("position"===t||"scale"===t||"origin"===t){if(e){var i=this[t];i||(i=this[t]=[]),i[0]=e[0],i[1]=e[1]}}else this[t]=e},hide:function(){this.ignore=!0,this.__zr&&this.__zr.refresh()},show:function(){this.ignore=!1,this.__zr&&this.__zr.refresh()},attr:function(t,e){if("string"==typeof t)this.attrKV(t,e);else if(s.isObject(t))for(var i in t)t.hasOwnProperty(i)&&this.attrKV(i,t[i]);return this.dirty(!1),this},setClipPath:function(t){var e=this.__zr;e&&t.addSelfToZr(e),this.clipPath&&this.clipPath!==t&&this.removeClipPath(),this.clipPath=t,t.__zr=e,t.__clipTarget=this,this.dirty(!1)},removeClipPath:function(){var t=this.clipPath;t&&(t.__zr&&t.removeSelfFromZr(t.__zr),t.__zr=null,t.__clipTarget=null,this.clipPath=null,this.dirty(!1))},addSelfToZr:function(t){this.__zr=t;var e=this.animators;if(e)for(var i=0;i<e.length;i++)t.animation.addAnimator(e[i]);this.clipPath&&this.clipPath.addSelfToZr(t)},removeSelfFromZr:function(t){this.__zr=null;var e=this.animators;if(e)for(var i=0;i<e.length;i++)t.animation.removeAnimator(e[i]);this.clipPath&&this.clipPath.removeSelfFromZr(t)}},s.mixin(l,a),s.mixin(l,r),s.mixin(l,o),t.exports=l},function(t,e,i){function n(t,e){return t[e]}function o(t,e,i){t[e]=i}function r(t,e,i){return(e-t)*i+t}function a(t,e,i){return i>.5?e:t}function s(t,e,i,n,o){var a=t.length;if(1==o)for(var s=0;s<a;s++)n[s]=r(t[s],e[s],i);else for(var l=t[0].length,s=0;s<a;s++)for(var u=0;u<l;u++)n[s][u]=r(t[s][u],e[s][u],i)}function l(t,e,i){var n=t.length,o=e.length;if(n!==o){var r=n>o;if(r)t.length=o;else for(var a=n;a<o;a++)t.push(1===i?e[a]:x.call(e[a]))}for(var s=t[0]&&t[0].length,a=0;a<t.length;a++)if(1===i)isNaN(t[a])&&(t[a]=e[a]);else for(var l=0;l<s;l++)isNaN(t[a][l])&&(t[a][l]=e[a][l])}function u(t,e,i){if(t===e)return!0;var n=t.length;if(n!==e.length)return!1;if(1===i){for(var o=0;o<n;o++)if(t[o]!==e[o])return!1}else for(var r=t[0].length,o=0;o<n;o++)for(var a=0;a<r;a++)if(t[o][a]!==e[o][a])return!1;return!0}function h(t,e,i,n,o,r,a,s,l){var u=t.length;if(1==l)for(var h=0;h<u;h++)s[h]=c(t[h],e[h],i[h],n[h],o,r,a);else for(var d=t[0].length,h=0;h<u;h++)for(var f=0;f<d;f++)s[h][f]=c(t[h][f],e[h][f],i[h][f],n[h][f],o,r,a)}function c(t,e,i,n,o,r,a){var s=.5*(i-t),l=.5*(n-e);return(2*(e-i)+s+l)*a+(-3*(e-i)-2*s-l)*r+s*o+e}function d(t){if(y(t)){var e=t.length;if(y(t[0])){for(var i=[],n=0;n<e;n++)i.push(x.call(t[n]));return i}return x.call(t)}return t}function f(t){return t[0]=Math.floor(t[0]),t[1]=Math.floor(t[1]),t[2]=Math.floor(t[2]),"rgba("+t.join(",")+")"}function p(t,e,i,n,o){var d=t._getter,p=t._setter,v="spline"===e,x=n.length;if(x){var _,b=n[0].value,w=y(b),S=!1,M=!1,T=w&&y(b[0])?2:1;n.sort(function(t,e){return t.time-e.time}),_=n[x-1].time;for(var I=[],A=[],L=n[0].value,C=!0,D=0;D<x;D++){I.push(n[D].time/_);var P=n[D].value;if(w&&u(P,L,T)||!w&&P===L||(C=!1),L=P,"string"==typeof P){var k=m.parse(P);k?(P=k,S=!0):M=!0}A.push(P)}if(!C){for(var z=A[x-1],D=0;D<x-1;D++)w?l(A[D],z,T):!isNaN(A[D])||isNaN(z)||M||S||(A[D]=z);w&&l(d(t._target,o),z,T);var O,E,R,V,N,B,G=0,F=0;if(S)var H=[0,0,0,0];var W=function(t,e){var i;if(e<0)i=0;else if(e<F){for(O=Math.min(G+1,x-1),i=O;i>=0&&!(I[i]<=e);i--);i=Math.min(i,x-2)}else{for(i=G;i<x&&!(I[i]>e);i++);i=Math.min(i-1,x-2)}G=i,F=e;var n=I[i+1]-I[i];if(0!==n)if(E=(e-I[i])/n,v)if(V=A[i],R=A[0===i?i:i-1],N=A[i>x-2?x-1:i+1],B=A[i>x-3?x-1:i+2],w)h(R,V,N,B,E,E*E,E*E*E,d(t,o),T);else{var l;if(S)l=h(R,V,N,B,E,E*E,E*E*E,H,1),l=f(H);else{if(M)return a(V,N,E);l=c(R,V,N,B,E,E*E,E*E*E)}p(t,o,l)}else if(w)s(A[i],A[i+1],E,d(t,o),T);else{var l;if(S)s(A[i],A[i+1],E,H,1),l=f(H);else{if(M)return a(A[i],A[i+1],E);l=r(A[i],A[i+1],E)}p(t,o,l)}},Z=new g({target:t._target,life:_,loop:t._loop,delay:t._delay,onframe:W,ondestroy:i});return e&&"spline"!==e&&(Z.easing=e),Z}}}var g=i(144),m=i(18),v=i(1),y=v.isArrayLike,x=Array.prototype.slice,_=function(t,e,i,r){this._tracks={},this._target=t,this._loop=e||!1,this._getter=i||n,this._setter=r||o,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};_.prototype={when:function(t,e){var i=this._tracks;for(var n in e)if(e.hasOwnProperty(n)){if(!i[n]){i[n]=[];var o=this._getter(this._target,n);if(null==o)continue;0!==t&&i[n].push({time:0,value:d(o)})}i[n].push({time:t,value:e[n]})}return this},during:function(t){return this._onframeList.push(t),this},_doneCallback:function(){this._tracks={},this._clipList.length=0;for(var t=this._doneList,e=t.length,i=0;i<e;i++)t[i].call(this)},start:function(t){var e,i=this,n=0,o=function(){n--,n||i._doneCallback()};for(var r in this._tracks)if(this._tracks.hasOwnProperty(r)){var a=p(this,t,o,this._tracks[r],r);a&&(this._clipList.push(a),n++,this.animation&&this.animation.addClip(a),e=a)}if(e){var s=e.onframe;e.onframe=function(t,e){s(t,e);for(var n=0;n<i._onframeList.length;n++)i._onframeList[n](t,e)}}return n||this._doneCallback(),this},stop:function(t){for(var e=this._clipList,i=this.animation,n=0;n<e.length;n++){var o=e[n];t&&o.onframe(this._target,1),i&&i.removeClip(o)}e.length=0},delay:function(t){return this._delay=t,this},done:function(t){return t&&this._doneList.push(t),this},getClips:function(){return this._clipList}},t.exports=_},function(t,e){t.exports="undefined"!=typeof window&&(window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){setTimeout(t,16)}},function(t,e){var i=2*Math.PI;t.exports={normalizeRadian:function(t){return t%=i,t<0&&(t+=i),t}}},function(t,e){var i=2311;t.exports=function(){return i++}},function(t,e){var i=function(t,e){this.image=t,this.repeat=e,this.type="pattern"};i.prototype.getCanvasPattern=function(t){return this._canvasPattern||(this._canvasPattern=t.createPattern(this.image,this.repeat))},t.exports=i},function(t,e){function i(t,e,i){var n=e.x,o=e.x2,r=e.y,a=e.y2;e.global||(n=n*i.width+i.x,o=o*i.width+i.x,r=r*i.height+i.y,a=a*i.height+i.y);var s=t.createLinearGradient(n,r,o,a);return s}function n(t,e,i){var n=i.width,o=i.height,r=Math.min(n,o),a=e.x,s=e.y,l=e.r;e.global||(a=a*n+i.x,s=s*o+i.y,l*=r);var u=t.createRadialGradient(a,s,0,a,s,l);return u}var o=[["shadowBlur",0],["shadowOffsetX",0],["shadowOffsetY",0],["shadowColor","#000"],["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]],r=function(t){this.extendFrom(t)};r.prototype={constructor:r,fill:"#000000",stroke:null,opacity:1,lineDash:null,lineDashOffset:0,shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,lineWidth:1,strokeNoScale:!1,text:null,textFill:"#000",textStroke:null,textPosition:"inside",textBaseline:null,textAlign:null,textVerticalAlign:null,textDistance:5,textShadowBlur:0,textShadowOffsetX:0,textShadowOffsetY:0,textTransform:!1,textRotation:0,blend:null,bind:function(t,e,i){for(var n=this,r=i&&i.style,a=!r,s=0;s<o.length;s++){var l=o[s],u=l[0];(a||n[u]!==r[u])&&(t[u]=n[u]||l[1])}if((a||n.fill!==r.fill)&&(t.fillStyle=n.fill),(a||n.stroke!==r.stroke)&&(t.strokeStyle=n.stroke),(a||n.opacity!==r.opacity)&&(t.globalAlpha=null==n.opacity?1:n.opacity),(a||n.blend!==r.blend)&&(t.globalCompositeOperation=n.blend||"source-over"),this.hasStroke()){var h=n.lineWidth;t.lineWidth=h/(this.strokeNoScale&&e&&e.getLineScale?e.getLineScale():1)}},hasFill:function(){var t=this.fill;return null!=t&&"none"!==t},hasStroke:function(){var t=this.stroke;return null!=t&&"none"!==t&&this.lineWidth>0},extendFrom:function(t,e){if(t){var i=this;for(var n in t)!t.hasOwnProperty(n)||!e&&i.hasOwnProperty(n)||(i[n]=t[n])}},set:function(t,e){"string"==typeof t?this[t]=e:this.extendFrom(t,!0)},clone:function(){var t=new this.constructor;return t.extendFrom(this,!0),t},getGradient:function(t,e,o){for(var r="radial"===e.type?n:i,a=r(t,e,o),s=e.colorStops,l=0;l<s.length;l++)a.addColorStop(s[l].offset,s[l].color);return a}};for(var a=r.prototype,s=0;s<o.length;s++){var l=o[s];l[0]in a||(a[l[0]]=l[1])}r.getGradient=a.getGradient,t.exports=r},function(t,e,i){var n=i(156),o=i(155);t.exports={buildPath:function(t,e,i){var r=e.points,a=e.smooth;if(r&&r.length>=2){if(a&&"spline"!==a){var s=o(r,a,i,e.smoothConstraint);t.moveTo(r[0][0],r[0][1]);for(var l=r.length,u=0;u<(i?l:l-1);u++){var h=s[2*u],c=s[2*u+1],d=r[(u+1)%l];t.bezierCurveTo(h[0],h[1],c[0],c[1],d[0],d[1])}}else{"spline"===a&&(r=n(r,i)),t.moveTo(r[0][0],r[0][1]);for(var u=1,f=r.length;u<f;u++)t.lineTo(r[u][0],r[u][1])}i&&t.closePath()}}}},function(t,e,i){var n=i(1);t.exports={updateSelectedMap:function(t){this._selectTargetMap=n.reduce(t||[],function(t,e){return t[e.name]=e,t},{})},select:function(t){var e=this._selectTargetMap,i=e[t],o=this.get("selectedMode");"single"===o&&n.each(e,function(t){t.selected=!1}),i&&(i.selected=!0)},unSelect:function(t){var e=this._selectTargetMap[t];e&&(e.selected=!1)},toggleSelected:function(t){var e=this._selectTargetMap[t];if(null!=e)return this[e.selected?"unSelect":"select"](t),e.selected},isSelected:function(t){var e=this._selectTargetMap[t];return e&&e.selected}}},function(t,e,i){function n(t){o.defaultEmphasis(t.label,o.LABEL_OPTIONS)}var o=i(7),r=i(1),a=i(11),s=i(9),l=s.addCommas,u=s.encodeHTML,h=i(2).extendComponentModel({type:"marker",dependencies:["series","grid","polar","geo"],init:function(t,e,i,n){this.mergeDefaultAndTheme(t,i),this.mergeOption(t,i,n.createdBySelf,!0)},ifEnableAnimation:function(){if(a.node)return!1;var t=this.__hostSeries;return this.getShallow("animation")&&t&&t.ifEnableAnimation()},mergeOption:function(t,e,i,o){var a=this.constructor,s=this.mainType+"Model";i||e.eachSeries(function(t){var i=t.get(this.mainType),l=t[s];return i&&i.data?(l?l.mergeOption(i,e,!0):(o&&n(i),r.each(i.data,function(t){t instanceof Array?(n(t[0]),n(t[1])):n(t)}),l=new a(i,this,e),r.extend(l,{mainType:this.mainType,seriesIndex:t.seriesIndex,name:t.name,createdBySelf:!0}),l.__hostSeries=t),void(t[s]=l)):void(t[s]=null)},this)},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=r.isArray(i)?r.map(i,l).join(", "):l(i),o=e.getName(t),a=this.name;return(null!=i||o)&&(a+="<br />"),o&&(a+=u(o),null!=i&&(a+=" : ")),null!=i&&(a+=n),a},getData:function(){return this._data},setData:function(t){this._data=t}});r.mixin(h,o.dataFormatMixin),t.exports=h},function(t,e,i){t.exports=i(2).extendComponentView({type:"marker",init:function(){this.markerGroupMap={}},render:function(t,e,i){var n=this.markerGroupMap;for(var o in n)n.hasOwnProperty(o)&&(n[o].__keep=!1);var r=this.type+"Model";e.eachSeries(function(t){var n=t[r];n&&this.renderSeries(t,n,e,i)},this);for(var o in n)n.hasOwnProperty(o)&&!n[o].__keep&&this.group.remove(n[o].group)},renderSeries:function(){}})},function(t,e,i){function n(t){return!(isNaN(parseFloat(t.x))&&isNaN(parseFloat(t.y)))}function o(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}function r(t,e,i){var n=-1;do n=Math.max(l.getPrecision(t.get(e,i)),n),t=t.stackedOn;while(t);return n}function a(t,e,i,n,o,a){var s=[],l=m(e,n,t),u=e.indexOfNearest(n,l,!0);s[o]=e.get(i,u,!0),s[a]=e.get(n,u,!0);var h=r(e,n,u);return h>=0&&(s[a]=+s[a].toFixed(h)),s}var s=i(1),l=i(4),u=s.indexOf,h=s.curry,c={min:h(a,"min"),max:h(a,"max"),average:h(a,"average")},d=function(t,e){var i=t.getData(),n=t.coordinateSystem;if(e&&!o(e)&&!s.isArray(e.coord)&&n){var r=n.dimensions,a=f(e,i,n,t);if(e=s.clone(e),e.type&&c[e.type]&&a.baseAxis&&a.valueAxis){var l=u(r,a.baseAxis.dim),h=u(r,a.valueAxis.dim);e.coord=c[e.type](i,a.baseDataDim,a.valueDataDim,l,h),e.value=e.coord[h]}else{for(var d=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],p=0;p<2;p++)if(c[d[p]]){var g=t.coordDimToDataDim(r[p])[0];d[p]=m(i,g,d[p])}e.coord=d}}return e},f=function(t,e,i,n){var o={};return null!=t.valueIndex||null!=t.valueDim?(o.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,o.valueAxis=i.getAxis(n.dataDimToCoordDim(o.valueDataDim)),o.baseAxis=i.getOtherAxis(o.valueAxis),o.baseDataDim=n.coordDimToDataDim(o.baseAxis.dim)[0]):(o.baseAxis=n.getBaseAxis(),o.valueAxis=i.getOtherAxis(o.baseAxis),o.baseDataDim=n.coordDimToDataDim(o.baseAxis.dim)[0],o.valueDataDim=n.coordDimToDataDim(o.valueAxis.dim)[0]),o},p=function(t,e){return!(t&&t.containData&&e.coord&&!n(e))||t.containData(e.coord)},g=function(t,e,i,n){return n<2?t.coord&&t.coord[n]:t.value},m=function(t,e,i){if("average"===i){var n=0,o=0;return t.each(e,function(t,e){isNaN(t)||(n+=t,o++)},!0),n/o}return t.getDataExtent(e,!0)["max"===i?1:0]};t.exports={dataTransform:d,dataFilter:p,dimValueGetter:g,getAxisInfo:f,numCalculate:m}},function(t,e){t.exports=function(t,e){var i=e.findComponents({mainType:"legend"});i&&i.length&&e.eachSeriesByType(t,function(t){var e=t.getData();e.filterSelf(function(t){for(var n=e.getName(t),o=0;o<i.length;o++)if(!i[o].isSelected(n))return!1;return!0},this)},this)}},function(t,e,i){function n(t){var e=t.pieceList;t.hasSpecialVisual=!1,p.each(e,function(e,i){e.originIndex=i,null!=e.visual&&(t.hasSpecialVisual=!0)})}function o(t){var e=t.categories,i=t.visual,n=t.categoryMap={};if(v(e,function(t,e){n[t]=e}),!p.isArray(i)){var o=[];p.isObject(i)?v(i,function(t,e){var i=n[e];o[null!=i?i:x]=t}):o[x]=i,i=t.visual=o}for(var r=e.length-1;r>=0;r--)null==i[r]&&(delete n[e[r]],e.pop())}function r(t,e){var i=t.visual,n=[];p.isObject(i)?v(i,function(t){n.push(t)}):null!=i&&n.push(i);var o={color:1,symbol:1};e||1!==n.length||o.hasOwnProperty(t.type)||(n[1]=n[0]),t.visual=n}function a(t){return{applyVisual:function(e,i,n){e=this.mapValueToVisual(e),n("color",t(i("color"),e))},_doMap:c([0,1])}}function s(t,e){var i=this.option.visual;return i[Math.round(m(e,[0,1],[0,i.length-1],!0))]||{}}function l(t){return function(e,i,n){n(t,this.mapValueToVisual(e))}}function u(t){var e=this.option.visual;return e[this.option.loop&&t!==x?t%e.length:t]}function h(){return this.option.visual[0]}function c(t){return{linear:function(e){return m(e,t,this.option.visual,!0)},category:u,piecewise:function(e,i){var n=d.call(this,i);return null==n&&(n=m(e,t,this.option.visual,!0)),n},fixed:h}}function d(t){var e=this.option,i=e.pieceList;if(e.hasSpecialVisual){var n=_.findPieceIndex(t,i),o=i[n];if(o&&o.visual)return o.visual[this.type]}}function f(t,e,i){return t?e<=i:e<i}var p=i(1),g=i(18),m=i(4).linearMap,v=p.each,y=p.isObject,x=-1,_=function(t){var e=t.mappingMethod,i=t.type,a=this.option=p.clone(t);this.type=i,this.mappingMethod=e,this._normalizeData=w[e];var s=b[i];this.applyVisual=s.applyVisual,this.getColorMapper=s.getColorMapper,this._doMap=s._doMap[e],"piecewise"===e?(r(a),n(a)):"category"===e?a.categories?o(a):r(a,!0):(p.assert("linear"!==e||a.dataExtent), +r(a))};_.prototype={constructor:_,mapValueToVisual:function(t){var e=this._normalizeData(t);return this._doMap(e,t)},getNormalizer:function(){return p.bind(this._normalizeData,this)}};var b=_.visualHandlers={color:{applyVisual:l("color"),getColorMapper:function(){var t=this.option,e=p.map(t.visual,g.parse);return p.bind("category"===t.mappingMethod?function(t,e){return!e&&(t=this._normalizeData(t)),u(this,t)}:function(t,i,n){var o=!!n;return!i&&(t=this._normalizeData(t)),n=g.fastMapToColor(t,e,n),o?n:p.stringify(n,"rgba")},this)},_doMap:{linear:function(t){return g.mapToColor(t,this.option.visual)},category:u,piecewise:function(t,e){var i=d.call(this,e);return null==i&&(i=g.mapToColor(t,this.option.visual)),i},fixed:h}},colorHue:a(function(t,e){return g.modifyHSL(t,e)}),colorSaturation:a(function(t,e){return g.modifyHSL(t,null,e)}),colorLightness:a(function(t,e){return g.modifyHSL(t,null,null,e)}),colorAlpha:a(function(t,e){return g.modifyAlpha(t,e)}),opacity:{applyVisual:l("opacity"),_doMap:c([0,1])},symbol:{applyVisual:function(t,e,i){var n=this.mapValueToVisual(t);if(p.isString(n))i("symbol",n);else if(y(n))for(var o in n)n.hasOwnProperty(o)&&i(o,n[o])},_doMap:{linear:s,category:u,piecewise:function(t,e){var i=d.call(this,e);return null==i&&(i=s.call(this,t)),i},fixed:h}},symbolSize:{applyVisual:l("symbolSize"),_doMap:c([0,1])}},w={linear:function(t){return m(t,this.option.dataExtent,[0,1],!0)},piecewise:function(t){var e=this.option.pieceList,i=_.findPieceIndex(t,e,!0);if(null!=i)return m(i,[0,e.length-1],[0,1],!0)},category:function(t){var e=this.option.categories?this.option.categoryMap[t]:t;return null==e?x:e},fixed:p.noop};_.addVisualHandler=function(t,e){b[t]=e},_.isValidType=function(t){return b.hasOwnProperty(t)},_.eachVisual=function(t,e,i){p.isObject(t)?p.each(t,e,i):e.call(i,t)},_.mapVisual=function(t,e,i){var n,o=p.isArray(t)?[]:p.isObject(t)?{}:(n=!0,null);return _.eachVisual(t,function(t,r){var a=e.call(i,t,r);n?o=a:o[r]=a}),o},_.retrieveVisuals=function(t){var e,i={};return t&&v(b,function(n,o){t.hasOwnProperty(o)&&(i[o]=t[o],e=!0)}),e?i:null},_.prepareVisualTypes=function(t){if(y(t)){var e=[];v(t,function(t,i){e.push(i)}),t=e}else{if(!p.isArray(t))return[];t=t.slice()}return t.sort(function(t,e){return"color"===e&&"color"!==t&&0===t.indexOf("color")?1:-1}),t},_.dependsOn=function(t,e){return"color"===e?!(!t||0!==t.indexOf(e)):t===e},_.findPieceIndex=function(t,e,i){function n(e,i){var n=Math.abs(e-t);n<r&&(r=n,o=i)}for(var o,r=1/0,a=0,s=e.length;a<s;a++){var l=e[a].value;if(null!=l){if(l===t)return a;i&&n(l,a)}}for(var a=0,s=e.length;a<s;a++){var u=e[a],h=u.interval,c=u.close;if(h){if(h[0]===-(1/0)){if(f(c[1],t,h[1]))return a}else if(h[1]===1/0){if(f(c[0],h[0],t))return a}else if(f(c[0],h[0],t)&&f(c[1],t,h[1]))return a;i&&n(h[0],a),i&&n(h[1],a)}}if(i)return t===1/0?e.length-1:t===-(1/0)?0:o},t.exports=_},function(t,e){t.exports=function(t,e){var i={};e.eachRawSeriesByType(t,function(t){var n=t.getRawData(),o={};if(!e.isSeriesFiltered(t)){var r=t.getData();r.each(function(t){var e=r.getRawIndex(t);o[e]=t}),n.each(function(e){var a=n.getItemModel(e),s=o[e],l=null!=s&&r.getItemVisual(s,"color",!0);if(l)n.setItemVisual(e,"color",l);else{var u=a.get("itemStyle.normal.color")||t.getColorFromPalette(n.getName(e),i);n.setItemVisual(e,"color",u),null!=s&&r.setItemVisual(s,"color",u)}})}})}},function(t,e,i){var n=i(5),o=i(17),r={},a=Math.min,s=Math.max,l=Math.sin,u=Math.cos,h=n.create(),c=n.create(),d=n.create(),f=2*Math.PI;r.fromPoints=function(t,e,i){if(0!==t.length){var n,o=t[0],r=o[0],l=o[0],u=o[1],h=o[1];for(n=1;n<t.length;n++)o=t[n],r=a(r,o[0]),l=s(l,o[0]),u=a(u,o[1]),h=s(h,o[1]);e[0]=r,e[1]=u,i[0]=l,i[1]=h}},r.fromLine=function(t,e,i,n,o,r){o[0]=a(t,i),o[1]=a(e,n),r[0]=s(t,i),r[1]=s(e,n)};var p=[],g=[];r.fromCubic=function(t,e,i,n,r,l,u,h,c,d){var f,m=o.cubicExtrema,v=o.cubicAt,y=m(t,i,r,u,p);for(c[0]=1/0,c[1]=1/0,d[0]=-(1/0),d[1]=-(1/0),f=0;f<y;f++){var x=v(t,i,r,u,p[f]);c[0]=a(x,c[0]),d[0]=s(x,d[0])}for(y=m(e,n,l,h,g),f=0;f<y;f++){var _=v(e,n,l,h,g[f]);c[1]=a(_,c[1]),d[1]=s(_,d[1])}c[0]=a(t,c[0]),d[0]=s(t,d[0]),c[0]=a(u,c[0]),d[0]=s(u,d[0]),c[1]=a(e,c[1]),d[1]=s(e,d[1]),c[1]=a(h,c[1]),d[1]=s(h,d[1])},r.fromQuadratic=function(t,e,i,n,r,l,u,h){var c=o.quadraticExtremum,d=o.quadraticAt,f=s(a(c(t,i,r),1),0),p=s(a(c(e,n,l),1),0),g=d(t,i,r,f),m=d(e,n,l,p);u[0]=a(t,r,g),u[1]=a(e,l,m),h[0]=s(t,r,g),h[1]=s(e,l,m)},r.fromArc=function(t,e,i,o,r,a,s,p,g){var m=n.min,v=n.max,y=Math.abs(r-a);if(y%f<1e-4&&y>1e-4)return p[0]=t-i,p[1]=e-o,g[0]=t+i,void(g[1]=e+o);if(h[0]=u(r)*i+t,h[1]=l(r)*o+e,c[0]=u(a)*i+t,c[1]=l(a)*o+e,m(p,h,c),v(g,h,c),r%=f,r<0&&(r+=f),a%=f,a<0&&(a+=f),r>a&&!s?a+=f:r<a&&s&&(r+=f),s){var x=a;a=r,r=x}for(var _=0;_<a;_+=Math.PI/2)_>r&&(d[0]=u(_)*i+t,d[1]=l(_)*o+e,m(p,d,p),v(g,d,g))},t.exports=r},function(t,e,i){var n=i(36),o=i(1),r=i(16),a=function(t){n.call(this,t)};a.prototype={constructor:a,type:"text",brush:function(t,e){var i=this.style,n=i.x||0,o=i.y||0,a=i.text;if(null!=a&&(a+=""),i.bind(t,this,e),a){this.setTransform(t);var s,l=i.textAlign,u=i.textFont||i.font;if(i.textVerticalAlign){var h=r.getBoundingRect(a,u,i.textAlign,"top");switch(s="middle",i.textVerticalAlign){case"middle":o-=h.height/2-h.lineHeight/2;break;case"bottom":o-=h.height-h.lineHeight/2;break;default:o+=h.lineHeight/2}}else s=i.textBaseline;t.font=u||"12px sans-serif",t.textAlign=l||"left",t.textAlign!==l&&(t.textAlign="left"),t.textBaseline=s||"alphabetic",t.textBaseline!==s&&(t.textBaseline="alphabetic");for(var c=r.measureText("国",t.font).width,d=a.split("\n"),f=0;f<d.length;f++)i.hasFill()&&t.fillText(d[f],n,o),i.hasStroke()&&t.strokeText(d[f],n,o),o+=c;this.restoreTransform(t)}},getBoundingRect:function(){if(!this._rect){var t=this.style,e=t.textVerticalAlign,i=r.getBoundingRect(t.text+"",t.textFont||t.font,t.textAlign,e?"top":t.textBaseline);switch(e){case"middle":i.y-=i.height/2;break;case"bottom":i.y-=i.height}i.x+=t.x||0,i.y+=t.y||0,this._rect=i}return this._rect}},o.inherits(a,n),t.exports=a},function(t,e,i){function n(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t}var o=i(16),r=i(8),a=new r,s=function(){};s.prototype={constructor:s,drawRectText:function(t,e,i){var r=this.style,s=r.text;if(null!=s&&(s+=""),s){t.save();var l,u,h=r.textPosition,c=r.textDistance,d=r.textAlign,f=r.textFont||r.font,p=r.textBaseline,g=r.textVerticalAlign;i=i||o.getBoundingRect(s,f,d,p);var m=this.transform;if(r.textTransform?this.setTransform(t):m&&(a.copy(e),a.applyTransform(m),e=a),h instanceof Array){if(l=e.x+n(h[0],e.width),u=e.y+n(h[1],e.height),d=d||"left",p=p||"top",g){switch(g){case"middle":u-=i.height/2-i.lineHeight/2;break;case"bottom":u-=i.height-i.lineHeight/2;break;default:u+=i.lineHeight/2}p="middle"}}else{var v=o.adjustTextPositionOnRect(h,e,i,c);l=v.x,u=v.y,d=d||v.textAlign,p=p||v.textBaseline}t.textAlign=d||"left",t.textBaseline=p||"alphabetic";var y=r.textFill,x=r.textStroke;y&&(t.fillStyle=y),x&&(t.strokeStyle=x),t.font=f||"12px sans-serif",t.shadowBlur=r.textShadowBlur,t.shadowColor=r.textShadowColor||"transparent",t.shadowOffsetX=r.textShadowOffsetX,t.shadowOffsetY=r.textShadowOffsetY;var _=s.split("\n");r.textRotation&&(m&&t.translate(m[4],m[5]),t.rotate(r.textRotation),m&&t.translate(-m[4],-m[5]));for(var b=0;b<_.length;b++)y&&t.fillText(_[b],l,u),x&&t.strokeText(_[b],l,u),u+=i.lineHeight;t.restore()}}},t.exports=s},function(t,e,i){function n(t){delete f[t]}/*! + * ZRender, a high performance 2d drawing library. + * + * Copyright (c) 2013, Baidu Inc. + * All rights reserved. + * + * LICENSE + * https://github.com/ecomfe/zrender/blob/master/LICENSE.txt + */ +var o=i(62),r=i(11),a=i(1),s=i(139),l=i(142),u=i(143),h=i(151),c=!r.canvasSupported,d={canvas:i(141)},f={},p={};p.version="3.2.1",p.init=function(t,e){var i=new g(o(),t,e);return f[i.id]=i,i},p.dispose=function(t){if(t)t.dispose();else{for(var e in f)f.hasOwnProperty(e)&&f[e].dispose();f={}}return p},p.getInstance=function(t){return f[t]},p.registerPainter=function(t,e){d[t]=e};var g=function(t,e,i){i=i||{},this.dom=e,this.id=t;var n=this,o=new l,f=i.renderer;if(c){if(!d.vml)throw new Error("You need to require 'zrender/vml/vml' to support IE8");f="vml"}else f&&d[f]||(f="canvas");var p=new d[f](e,o,i);this.storage=o,this.painter=p;var g=r.node?null:new h(p.getViewportRoot());this.handler=new s(o,p,g,p.root),this.animation=new u({stage:{update:a.bind(this.flush,this)}}),this.animation.start(),this._needsRefresh;var m=o.delFromMap,v=o.addToMap;o.delFromMap=function(t){var e=o.get(t);m.call(o,t),e&&e.removeSelfFromZr(n)},o.addToMap=function(t){v.call(o,t),t.addSelfToZr(n)}};g.prototype={constructor:g,getId:function(){return this.id},add:function(t){this.storage.addRoot(t),this._needsRefresh=!0},remove:function(t){this.storage.delRoot(t),this._needsRefresh=!0},configLayer:function(t,e){this.painter.configLayer(t,e),this._needsRefresh=!0},refreshImmediately:function(){this._needsRefresh=!1,this.painter.refresh(),this._needsRefresh=!1},refresh:function(){this._needsRefresh=!0},flush:function(){this._needsRefresh&&this.refreshImmediately(),this._needsRefreshHover&&this.refreshHoverImmediately()},addHover:function(t,e){this.painter.addHover&&(this.painter.addHover(t,e),this.refreshHover())},removeHover:function(t){this.painter.removeHover&&(this.painter.removeHover(t),this.refreshHover())},clearHover:function(){this.painter.clearHover&&(this.painter.clearHover(),this.refreshHover())},refreshHover:function(){this._needsRefreshHover=!0},refreshHoverImmediately:function(){this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.refreshHover()},resize:function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},clearAnimation:function(){this.animation.clear()},getWidth:function(){return this.painter.getWidth()},getHeight:function(){return this.painter.getHeight()},pathToImage:function(t,e,i){var n=o();return this.painter.pathToImage(n,t,e,i)},setCursorStyle:function(t){this.handler.setCursorStyle(t)},on:function(t,e,i){this.handler.on(t,e,i)},off:function(t,e){this.handler.off(t,e)},trigger:function(t,e){this.handler.trigger(t,e)},clear:function(){this.storage.delRoot(),this.painter.clear()},dispose:function(){this.animation.stop(),this.clear(),this.storage.dispose(),this.painter.dispose(),this.handler.dispose(),this.animation=this.storage=this.painter=this.handler=null,n(this.id)}},t.exports=p},function(t,e,i){var n=i(2),o=i(1);t.exports=function(t,e){o.each(e,function(e){e.update="updateView",n.registerAction(e,function(i,n){var o={};return n.eachComponent({mainType:"series",subType:t,query:i},function(t){t[e.method]&&t[e.method](i.name);var n=t.getData();n.each(function(e){var i=n.getName(e);o[i]=t.isSelected(i)||!1})}),{name:i.name,selected:o}})})}},function(t,e,i){var n=i(1),o={retrieveTargetInfo:function(t,e){if(t&&("treemapZoomToNode"===t.type||"treemapRootToNode"===t.type)){var i=e.getData().tree.root,n=t.targetNode;if(n&&i.contains(n))return{node:n};var o=t.targetNodeId;if(null!=o&&(n=i.getNodeById(o)))return{node:n}}},getPathToRoot:function(t){for(var e=[];t;)t=t.parentNode,t&&e.push(t);return e.reverse()},aboveViewRoot:function(t,e){var i=o.getPathToRoot(t);return n.indexOf(i,e)>=0},wrapTreePathInfo:function(t,e){for(var i=[];t;){var n=t.dataIndex;i.push({name:t.name,dataIndex:n,value:e.getRawValue(n)}),t=t.parentNode}return i.reverse(),i}};t.exports=o},function(t,e,i){function n(t){if(!t.target||!t.target.draggable){var e=t.offsetX,i=t.offsetY;this.containsPoint&&this.containsPoint(e,i)&&(this._x=e,this._y=i,this._dragging=!0)}}function o(t){if(this._dragging&&(d.stop(t.event),"pinch"!==t.gestureEvent)){if(f.isTaken(this._zr,"globalPan"))return;var e=t.offsetX,i=t.offsetY,n=this._x,o=this._y,r=e-n,a=i-o;this._x=e,this._y=i;var s=this.target;if(s){var l=s.position;l[0]+=r,l[1]+=a,s.dirty()}d.stop(t.event),this.trigger("pan",r,a,n,o,e,i)}}function r(t){this._dragging=!1}function a(t){var e=t.wheelDelta>0?1.1:1/1.1;l.call(this,t,e,t.offsetX,t.offsetY)}function s(t){if(!f.isTaken(this._zr,"globalPan")){var e=t.pinchScale>1?1.1:1/1.1;l.call(this,t,e,t.pinchX,t.pinchY)}}function l(t,e,i,n){if(this.containsPoint&&this.containsPoint(i,n)){d.stop(t.event);var o=this.target,r=this.zoomLimit;if(o){var a=o.position,s=o.scale,l=this.zoom=this.zoom||1;if(l*=e,r){var u=r.min||0,h=r.max||1/0;l=Math.max(Math.min(h,l),u)}var c=l/this.zoom;this.zoom=l,a[0]-=(i-a[0])*(c-1),a[1]-=(n-a[1])*(c-1),s[0]*=c,s[1]*=c,o.dirty()}this.trigger("zoom",e,i,n)}}function u(t,e){this.target=e,this.containsPoint,this.zoomLimit,this.zoom,this._zr=t;var i=c.bind,l=i(n,this),u=i(o,this),d=i(r,this),f=i(a,this),p=i(s,this);h.call(this),this.setContainsPoint=function(t){this.containsPoint=t},this.enable=function(e){this.disable(),null==e&&(e=!0),e!==!0&&"move"!==e&&"pan"!==e||(t.on("mousedown",l),t.on("mousemove",u),t.on("mouseup",d)),e!==!0&&"scale"!==e&&"zoom"!==e||(t.on("mousewheel",f),t.on("pinch",p))},this.disable=function(){t.off("mousedown",l),t.off("mousemove",u),t.off("mouseup",d),t.off("mousewheel",f),t.off("pinch",p)},this.dispose=this.disable,this.isDragging=function(){return this._dragging},this.isPinching=function(){return this._pinching}}var h=i(20),c=i(1),d=i(24),f=i(115);c.mixin(u,h),t.exports=u},function(t,e){t.exports=function(t,e,i,n,o){function r(t,e,i){var n=e.length?e.slice():[e,e];return e[0]>e[1]&&n.reverse(),t<0&&n[0]+t<i[0]&&(t=i[0]-n[0]),t>0&&n[1]+t>i[1]&&(t=i[1]-n[1]),t}return t?("rigid"===n?(t=r(t,e,i),e[0]+=t,e[1]+=t):(t=r(t,e[o],i),e[o]+=t,"push"===n&&e[0]>e[1]&&(e[1-o]=e[o])),e):e}},function(t,e,i){var n=i(1),o={show:!0,zlevel:0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisLine:{show:!0,onZero:!0,lineStyle:{color:"#333",width:1,type:"solid"}},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,margin:8,textStyle:{fontSize:12}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},r=n.merge({boundaryGap:!0,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},o),a=n.merge({boundaryGap:[0,0],splitNumber:5},o),s=n.defaults({scale:!0,min:"dataMin",max:"dataMax"},a),l=n.defaults({logBase:10},a);l.scale=!0,t.exports={categoryAxis:r,valueAxis:a,timeAxis:s,logAxis:l}},function(t,e){t.exports={getMin:function(){var t=this.option,e=null!=t.rangeStart?t.rangeStart:t.min;return e instanceof Date&&(e=+e),e},getMax:function(){var t=this.option,e=null!=t.rangeEnd?t.rangeEnd:t.max;return e instanceof Date&&(e=+e),e},getNeedCrossZero:function(){var t=this.option;return null==t.rangeStart&&null==t.rangeEnd&&!t.scale},setRange:function(t,e){this.option.rangeStart=t,this.option.rangeEnd=e},resetRange:function(){this.option.rangeStart=this.option.rangeEnd=null}}},function(t,e){var i={},n="\0__throttleOriginMethod",o="\0__throttleRate",r="\0__throttleType";i.throttle=function(t,e,i){function n(){u=(new Date).getTime(),h=null,t.apply(a,s||[])}var o,r,a,s,l=0,u=0,h=null;e=e||0;var c=function(){o=(new Date).getTime(),a=this,s=arguments,r=o-(i?l:u)-e,clearTimeout(h),i?h=setTimeout(n,e):r>=0?n():h=setTimeout(n,-r),l=o};return c.clear=function(){h&&(clearTimeout(h),h=null)},c},i.createOrUpdate=function(t,e,a,s){var l=t[e];if(l){var u=l[n]||l,h=l[r],c=l[o];if(c!==a||h!==s){if(null==a||!s)return t[e]=u;l=t[e]=i.throttle(u,a,"debounce"===s),l[n]=u,l[r]=s,l[o]=a}return l}},i.clear=function(t,e){var i=t[e];i&&i[n]&&(t[e]=i[n])},t.exports=i},function(t,e){t.exports={containStroke:function(t,e,i,n,o,r,a){if(0===o)return!1;var s=o,l=0,u=t;if(a>e+s&&a>n+s||a<e-s&&a<n-s||r>t+s&&r>i+s||r<t-s&&r<i-s)return!1;if(t===i)return Math.abs(r-t)<=s/2;l=(e-n)/(t-i),u=(t*n-i*e)/(t-i);var h=l*r-a+u,c=h*h/(l*l+1);return c<=s/2*s/2}}},function(t,e,i){var n=i(17);t.exports={containStroke:function(t,e,i,o,r,a,s,l,u){if(0===s)return!1;var h=s;if(u>e+h&&u>o+h&&u>a+h||u<e-h&&u<o-h&&u<a-h||l>t+h&&l>i+h&&l>r+h||l<t-h&&l<i-h&&l<r-h)return!1;var c=n.quadraticProjectPoint(t,e,i,o,r,a,l,u,null);return c<=h/2}}},function(t,e){t.exports=function(t,e,i,n,o,r){if(r>e&&r>n||r<e&&r<n)return 0;if(n===e)return 0;var a=n<e?1:-1,s=(r-e)/(n-e);1!==s&&0!==s||(a=n<e?.5:-.5);var l=s*(i-t)+t;return l>o?a:0}},function(t,e,i){"use strict";var n=i(1),o=i(37),r=function(t,e,i,n,r,a){this.x=null==t?0:t,this.y=null==e?0:e,this.x2=null==i?1:i,this.y2=null==n?0:n,this.type="linear",this.global=a||!1,o.call(this,r)};r.prototype={constructor:r},n.inherits(r,o),t.exports=r},function(t,e,i){"use strict";function n(t){return t>s||t<-s}var o=i(19),r=i(5),a=o.identity,s=5e-5,l=function(t){t=t||{},t.position||(this.position=[0,0]),null==t.rotation&&(this.rotation=0),t.scale||(this.scale=[1,1]),this.origin=this.origin||null},u=l.prototype;u.transform=null,u.needLocalTransform=function(){return n(this.rotation)||n(this.position[0])||n(this.position[1])||n(this.scale[0]-1)||n(this.scale[1]-1)},u.updateTransform=function(){var t=this.parent,e=t&&t.transform,i=this.needLocalTransform(),n=this.transform;return i||e?(n=n||o.create(),i?this.getLocalTransform(n):a(n),e&&(i?o.mul(n,t.transform,n):o.copy(n,t.transform)),this.transform=n,this.invTransform=this.invTransform||o.create(),void o.invert(this.invTransform,n)):void(n&&a(n))},u.getLocalTransform=function(t){t=t||[],a(t);var e=this.origin,i=this.scale,n=this.rotation,r=this.position;return e&&(t[4]-=e[0],t[5]-=e[1]),o.scale(t,t,i),n&&o.rotate(t,t,n),e&&(t[4]+=e[0],t[5]+=e[1]),t[4]+=r[0],t[5]+=r[1],t},u.setTransform=function(t){var e=this.transform,i=t.dpr||1;e?t.setTransform(i*e[0],i*e[1],i*e[2],i*e[3],i*e[4],i*e[5]):t.setTransform(i,0,0,i,0,0)},u.restoreTransform=function(t){var e=(this.transform,t.dpr||1);t.setTransform(e,0,0,e,0,0)};var h=[];u.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(o.mul(h,t.invTransform,e),e=h);var i=e[0]*e[0]+e[1]*e[1],r=e[2]*e[2]+e[3]*e[3],a=this.position,s=this.scale;n(i-1)&&(i=Math.sqrt(i)),n(r-1)&&(r=Math.sqrt(r)),e[0]<0&&(i=-i),e[3]<0&&(r=-r),a[0]=e[4],a[1]=e[5],s[0]=i,s[1]=r,this.rotation=Math.atan2(-e[1]/r,e[0]/i)}},u.getGlobalScale=function(){var t=this.transform;if(!t)return[1,1];var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]),i=Math.sqrt(t[2]*t[2]+t[3]*t[3]);return t[0]<0&&(e=-e),t[3]<0&&(i=-i),[e,i]},u.transformCoordToLocal=function(t,e){var i=[t,e],n=this.invTransform;return n&&r.applyTransform(i,i,n),i},u.transformCoordToGlobal=function(t,e){var i=[t,e],n=this.transform;return n&&r.applyTransform(i,i,n),i},t.exports=l},function(t,e,i){"use strict";function n(t){o.each(r,function(e){this[e]=o.bind(t[e],t)},this)}var o=i(1),r=["getDom","getZr","getWidth","getHeight","dispatchAction","isDisposed","on","off","getDataURL","getConnectedDataURL","getModel","getOption"];t.exports=n},function(t,e,i){var n=i(1);i(54),i(91),i(92);var o=i(122),r=i(2);r.registerLayout(n.curry(o,"bar")),r.registerVisual(function(t){t.eachSeriesByType("bar",function(t){var e=t.getData();e.setVisual("legendSymbol","roundRect")})}),i(35)},function(t,e,i){"use strict";var n=i(15),o=i(34);t.exports=n.extend({type:"series.bar",dependencies:["grid","polar"],getInitialData:function(t,e){return o(t.data,this,e)},getMarkerPosition:function(t){var e=this.coordinateSystem;if(e){var i=e.dataToPoint(t,!0),n=this.getData(),o=n.getLayout("offset"),r=n.getLayout("size"),a=e.getBaseAxis().isHorizontal()?0:1;return i[a]+=o+r/2,i}return[NaN,NaN]},brushSelector:"rect",defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,itemStyle:{normal:{},emphasis:{}}}})},function(t,e,i){"use strict";function n(t,e){var i=t.width>0?1:-1,n=t.height>0?1:-1;e=Math.min(e,Math.abs(t.width),Math.abs(t.height)),t.x+=i*e/2,t.y+=n*e/2,t.width-=i*e,t.height-=n*e}var o=i(1),r=i(3);o.extend(i(10).prototype,i(93)),t.exports=i(2).extendChartView({type:"bar",render:function(t,e,i){var n=t.get("coordinateSystem");return"cartesian2d"===n&&this._renderOnCartesian(t,e,i),this.group},dispose:o.noop,_renderOnCartesian:function(t,e,i){function a(e,i){var a=l.getItemLayout(e),s=l.getItemModel(e).get(p)||0;n(a,s);var u=new r.Rect({shape:o.extend({},a)});if(f){var h=u.shape,c=d?"height":"width",g={};h[c]=0,g[c]=a[c],r[i?"updateProps":"initProps"](u,{shape:g},t,e)}return u}var s=this.group,l=t.getData(),u=this._data,h=t.coordinateSystem,c=h.getBaseAxis(),d=c.isHorizontal(),f=t.get("animation"),p=["itemStyle","normal","barBorderWidth"];l.diff(u).add(function(t){if(l.hasValue(t)){var e=a(t);l.setItemGraphicEl(t,e),s.add(e)}}).update(function(e,i){var o=u.getItemGraphicEl(i);if(!l.hasValue(e))return void s.remove(o);o||(o=a(e,!0));var h=l.getItemLayout(e),c=l.getItemModel(e).get(p)||0;n(h,c),r.updateProps(o,{shape:h},t,e),l.setItemGraphicEl(e,o),s.add(o)}).remove(function(e){var i=u.getItemGraphicEl(e);i&&(i.style.text="",r.updateProps(i,{shape:{width:0}},t,e,function(){s.remove(i)}))}).execute(),this._updateStyle(t,l,d),this._data=l},_updateStyle:function(t,e,i){function n(t,e,i,n,o){r.setText(t,e,i),t.text=n,"outside"===t.textPosition&&(t.textPosition=o)}e.eachItemGraphicEl(function(a,s){var l=e.getItemModel(s),u=e.getItemVisual(s,"color"),h=e.getItemVisual(s,"opacity"),c=e.getItemLayout(s),d=l.getModel("itemStyle.normal"),f=l.getModel("itemStyle.emphasis").getBarItemStyle();a.setShape("r",d.get("barBorderRadius")||0),a.useStyle(o.defaults({fill:u,opacity:h},d.getBarItemStyle()));var p=i?c.height>0?"bottom":"top":c.width>0?"left":"right",g=l.getModel("label.normal"),m=l.getModel("label.emphasis"),v=a.style;g.get("show")?n(v,g,u,o.retrieve(t.getFormattedLabel(s,"normal"),t.getRawValue(s)),p):v.text="",m.get("show")?n(f,m,u,o.retrieve(t.getFormattedLabel(s,"emphasis"),t.getRawValue(s)),p):f.text="",r.setHoverStyle(a,f)})},remove:function(t,e){var i=this.group;t.get("animation")?this._data&&this._data.eachItemGraphicEl(function(e){e.style.text="",r.updateProps(e,{shape:{width:0}},t,e.dataIndex,function(){i.remove(e)})}):i.removeAll()}})},function(t,e,i){var n=i(30)([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["stroke","barBorderColor"],["lineWidth","barBorderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]);t.exports={getBarItemStyle:function(t){var e=n.call(this,t);if(this.getBorderLineDash){var i=this.getBorderLineDash();i&&(e.lineDash=i)}return e}}},function(t,e,i){function n(t){return"_"+t+"Type"}function o(t,e,i){var n=e.getItemVisual(i,"color"),o=e.getItemVisual(i,t),r=e.getItemVisual(i,t+"Size");if(o&&"none"!==o){f.isArray(r)||(r=[r,r]);var a=u.createSymbol(o,-r[0]/2,-r[1]/2,r[0],r[1],n);return a.name=t,a}}function r(t){var e=new c({name:"line"});return a(e.shape,t),e}function a(t,e){var i=e[0],n=e[1],o=e[2];t.x1=i[0],t.y1=i[1],t.x2=n[0],t.y2=n[1],t.percent=1,o?(t.cpx1=o[0],t.cpy1=o[1]):(t.cpx1=NaN,t.cpy1=NaN)}function s(){var t=this,e=t.childOfName("fromSymbol"),i=t.childOfName("toSymbol"),n=t.childOfName("label");if(e||i||!n.ignore){for(var o=1,r=this.parent;r;)r.scale&&(o/=r.scale[0]),r=r.parent;var a=t.childOfName("line");if(this.__dirty||a.__dirty){var s=a.shape.percent,l=a.pointAt(0),u=a.pointAt(s),c=h.sub([],u,l);if(h.normalize(c,c),e){e.attr("position",l);var d=a.tangentAt(0);e.attr("rotation",Math.PI/2-Math.atan2(d[1],d[0])),e.attr("scale",[o*s,o*s])}if(i){i.attr("position",u);var d=a.tangentAt(1);i.attr("rotation",-Math.PI/2-Math.atan2(d[1],d[0])),i.attr("scale",[o*s,o*s])}if(!n.ignore){n.attr("position",u);var f,p,g,m=5*o;if("end"===n.__position)f=[c[0]*m+u[0],c[1]*m+u[1]],p=c[0]>.8?"left":c[0]<-.8?"right":"center",g=c[1]>.8?"top":c[1]<-.8?"bottom":"middle";else if("middle"===n.__position){var v=s/2,d=a.tangentAt(v),y=[d[1],-d[0]],x=a.pointAt(v);y[1]>0&&(y[0]=-y[0],y[1]=-y[1]),f=[x[0]+y[0]*m,x[1]+y[1]*m],p="center",g="bottom";var _=-Math.atan2(d[1],d[0]);u[0]<l[0]&&(_=Math.PI+_),n.attr("rotation",_)}else f=[-c[0]*m+l[0],-c[1]*m+l[1]],p=c[0]>.8?"right":c[0]<-.8?"left":"center",g=c[1]>.8?"bottom":c[1]<-.8?"top":"middle";n.attr({style:{textVerticalAlign:n.__verticalAlign||g,textAlign:n.__textAlign||p},position:f,scale:[o,o]})}}}}function l(t,e,i){d.Group.call(this),this._createLine(t,e,i)}var u=i(26),h=i(5),c=i(175),d=i(3),f=i(1),p=i(4),g=["fromSymbol","toSymbol"],m=l.prototype;m.beforeUpdate=s,m._createLine=function(t,e,i){var a=t.hostModel,s=t.getItemLayout(e),l=r(s);l.shape.percent=0,d.initProps(l,{shape:{percent:1}},a,e),this.add(l);var u=new d.Text({name:"label"});this.add(u),f.each(g,function(i){var r=o(i,t,e);this.add(r),this[n(i)]=t.getItemVisual(e,i)},this),this._updateCommonStl(t,e,i)},m.updateData=function(t,e,i){var r=t.hostModel,s=this.childOfName("line"),l=t.getItemLayout(e),u={shape:{}};a(u.shape,l),d.updateProps(s,u,r,e),f.each(g,function(i){var r=t.getItemVisual(e,i),a=n(i);if(this[a]!==r){this.remove(this.childOfName(i));var s=o(i,t,e);this.add(s)}this[a]=r},this),this._updateCommonStl(t,e,i)},m._updateCommonStl=function(t,e,i){var n=t.hostModel,o=this.childOfName("line"),r=i&&i.lineStyle,a=i&&i.hoverLineStyle,s=i&&i.labelModel,l=i&&i.hoverLabelModel;if(!i||t.hasItemOption){var u=t.getItemModel(e);r=u.getModel("lineStyle.normal").getLineStyle(),a=u.getModel("lineStyle.emphasis").getLineStyle(),s=u.getModel("label.normal"),l=u.getModel("label.emphasis")}var h=t.getItemVisual(e,"color"),c=f.retrieve(t.getItemVisual(e,"opacity"),r.opacity,1);o.useStyle(f.defaults({strokeNoScale:!0,fill:"none",stroke:h,opacity:c},r)),o.hoverStyle=a,f.each(g,function(t){var e=this.childOfName(t);e&&(e.setColor(h),e.setStyle({opacity:c}))},this);var m,v,y=s.getShallow("show"),x=l.getShallow("show"),_=this.childOfName("label");if(y||x){var b=n.getRawValue(e);v=null==b?v=t.getName(e):isFinite(b)?p.round(b):b,m=h||"#000"}if(y){var w=s.getModel("textStyle");_.setStyle({text:f.retrieve(n.getFormattedLabel(e,"normal",t.dataType),v),textFont:w.getFont(),fill:w.getTextColor()||m}),_.__textAlign=w.get("align"),_.__verticalAlign=w.get("baseline"),_.__position=s.get("position")}else _.setStyle("text","");if(x){var S=l.getModel("textStyle");_.hoverStyle={text:f.retrieve(n.getFormattedLabel(e,"emphasis",t.dataType),v),textFont:S.getFont(),fill:S.getTextColor()||m}}else _.hoverStyle={text:""};_.ignore=!y&&!x,d.setHoverStyle(this)},m.updateLayout=function(t,e){this.setLinePoints(t.getItemLayout(e))},m.setLinePoints=function(t){var e=this.childOfName("line");a(e.shape,t),e.dirty()},f.inherits(l,d.Group),t.exports=l},function(t,e,i){function n(t){return isNaN(t[0])||isNaN(t[1])}function o(t){return!n(t[0])&&!n(t[1])}function r(t){this._ctor=t||s,this.group=new a.Group}var a=i(3),s=i(94),l=r.prototype;l.updateData=function(t){var e=this._lineData,i=this.group,n=this._ctor,r=t.hostModel,a={lineStyle:r.getModel("lineStyle.normal").getLineStyle(),hoverLineStyle:r.getModel("lineStyle.emphasis").getLineStyle(),labelModel:r.getModel("label.normal"),hoverLabelModel:r.getModel("label.emphasis")};t.diff(e).add(function(e){if(o(t.getItemLayout(e))){var r=new n(t,e,a);t.setItemGraphicEl(e,r),i.add(r)}}).update(function(r,s){var l=e.getItemGraphicEl(s);return o(t.getItemLayout(r))?(l?l.updateData(t,r,a):l=new n(t,r,a),t.setItemGraphicEl(r,l),void i.add(l)):void i.remove(l)}).remove(function(t){i.remove(e.getItemGraphicEl(t))}).execute(),this._lineData=t},l.updateLayout=function(){var t=this._lineData;t.eachItemGraphicEl(function(e,i){e.updateLayout(t,i)},this)},l.remove=function(){this.group.removeAll()},t.exports=r},function(t,e,i){var n=i(1),o=i(2),r=o.PRIORITY;i(97),i(98),o.registerVisual(n.curry(i(46),"line","circle","line")),o.registerLayout(n.curry(i(55),"line")),o.registerProcessor(r.PROCESSOR.STATISTIC,n.curry(i(134),"line")),i(35)},function(t,e,i){"use strict";var n=i(34),o=i(15);t.exports=o.extend({type:"series.line",dependencies:["grid","polar"],getInitialData:function(t,e){return n(t.data,this,e)},defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,clipOverflow:!0,label:{normal:{position:"top"}},lineStyle:{normal:{width:2,type:"solid"}},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:!1,connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0}})},function(t,e,i){"use strict";function n(t,e){if(t.length===e.length){for(var i=0;i<t.length;i++){var n=t[i],o=e[i];if(n[0]!==o[0]||n[1]!==o[1])return}return!0}}function o(t){return"number"==typeof t?t:t?.3:0}function r(t){var e=t.getGlobalExtent();if(t.onBand){var i=t.getBandWidth()/2-1,n=e[1]>e[0]?1:-1;e[0]+=n*i,e[1]-=n*i}return e}function a(t){return t>=0?1:-1}function s(t,e){var i=t.getBaseAxis(),n=t.getOtherAxis(i),o=i.onZero?0:n.scale.getExtent()[0],r=n.dim,s="x"===r||"radius"===r?1:0;return e.mapArray([r],function(n,l){for(var u,h=e.stackedOn;h&&a(h.get(r,l))===a(n);){u=h;break}var c=[];return c[s]=e.get(i.dim,l),c[1-s]=u?u.get(r,l,!0):o,t.dataToPoint(c)},!0)}function l(t,e,i){var n=r(t.getAxis("x")),o=r(t.getAxis("y")),a=t.getBaseAxis().isHorizontal(),s=Math.min(n[0],n[1]),l=Math.min(o[0],o[1]),u=Math.max(n[0],n[1])-s,h=Math.max(o[0],o[1])-l,c=i.get("lineStyle.normal.width")||2,d=i.get("clipOverflow")?c/2:Math.max(u,h);a?(l-=d,h+=2*d):(s-=d,u+=2*d);var f=new y.Rect({shape:{x:s,y:l,width:u,height:h}});return e&&(f.shape[a?"width":"height"]=0,y.initProps(f,{shape:{width:u,height:h}},i)),f}function u(t,e,i){var n=t.getAngleAxis(),o=t.getRadiusAxis(),r=o.getExtent(),a=n.getExtent(),s=Math.PI/180,l=new y.Sector({shape:{cx:t.cx,cy:t.cy,r0:r[0],r:r[1],startAngle:-a[0]*s,endAngle:-a[1]*s,clockwise:n.inverse}});return e&&(l.shape.endAngle=-a[0]*s,y.initProps(l,{shape:{endAngle:-a[1]*s}},i)),l}function h(t,e,i){return"polar"===t.type?u(t,e,i):l(t,e,i)}function c(t,e,i){for(var n=e.getBaseAxis(),o="x"===n.dim||"radius"===n.dim?0:1,r=[],a=0;a<t.length-1;a++){var s=t[a+1],l=t[a];r.push(l);var u=[];switch(i){case"end":u[o]=s[o],u[1-o]=l[1-o],r.push(u);break;case"middle":var h=(l[o]+s[o])/2,c=[];u[o]=c[o]=h,u[1-o]=l[1-o],c[1-o]=s[1-o],r.push(u),r.push(c);break;default:u[o]=l[o],u[1-o]=s[1-o],r.push(u)}}return t[a]&&r.push(t[a]),r}function d(t,e){return Math.max(Math.min(t,e[1]),e[0])}function f(t,e){var i=t.getVisual("visualMeta");if(i&&i.length&&t.count()){for(var n,o=i.length-1;o>=0;o--)if(i[o].dimension<2){n=i[o];break}if(n&&"cartesian2d"===e.type){var r=n.dimension,a=t.dimensions[r],s=t.getDataExtent(a),l=n.stops,u=[];l[0].interval&&l.sort(function(t,e){return t.interval[0]-e.interval[0]});var h=l[0],c=l[l.length-1],f=h.interval?d(h.interval[0],s):h.value,p=c.interval?d(c.interval[1],s):c.value,g=p-f;if(0===g)return t.getItemVisual(0,"color");for(var o=0;o<l.length;o++)if(l[o].interval){if(l[o].interval[1]===l[o].interval[0])continue;u.push({offset:(d(l[o].interval[0],s)-f)/g,color:l[o].color},{offset:(d(l[o].interval[1],s)-f)/g,color:l[o].color})}else u.push({offset:(l[o].value-f)/g,color:l[o].color});var m=new y.LinearGradient(0,0,0,0,u,(!0)),v=e.getAxis(a),x=v.toGlobalCoord(v.dataToCoord(f)),_=v.toGlobalCoord(v.dataToCoord(p));return m[a]=x,m[a+"2"]=_,m}}}var p=i(1),g=i(39),m=i(49),v=i(99),y=i(3),x=i(7),_=i(100),b=i(27);t.exports=b.extend({type:"line",init:function(){var t=new y.Group,e=new g;this.group.add(e.group),this._symbolDraw=e,this._lineGroup=t},render:function(t,e,i){var r=t.coordinateSystem,a=this.group,l=t.getData(),u=t.getModel("lineStyle.normal"),d=t.getModel("areaStyle.normal"),g=l.mapArray(l.getItemLayout,!0),m="polar"===r.type,v=this._coordSys,y=this._symbolDraw,x=this._polyline,_=this._polygon,b=this._lineGroup,w=t.get("animation"),S=!d.isEmpty(),M=s(r,l),T=t.get("showSymbol"),I=T&&!m&&!t.get("showAllSymbol")&&this._getSymbolIgnoreFunc(l,r),A=this._data;A&&A.eachItemGraphicEl(function(t,e){t.__temp&&(a.remove(t),A.setItemGraphicEl(e,null))}),T||y.remove(),a.add(b);var L=!m&&t.get("step");x&&v.type===r.type&&L===this._step?(S&&!_?_=this._newPolygon(g,M,r,w):_&&!S&&(b.remove(_),_=this._polygon=null),b.setClipPath(h(r,!1,t)),T&&y.updateData(l,I),l.eachItemGraphicEl(function(t){t.stopAnimation(!0)}),n(this._stackedOnPoints,M)&&n(this._points,g)||(w?this._updateAnimation(l,M,r,i,L):(L&&(g=c(g,r,L),M=c(M,r,L)),x.setShape({points:g}),_&&_.setShape({points:g,stackedOnPoints:M})))):(T&&y.updateData(l,I),L&&(g=c(g,r,L),M=c(M,r,L)),x=this._newPolyline(g,r,w),S&&(_=this._newPolygon(g,M,r,w)),b.setClipPath(h(r,!0,t)));var C=f(l,r)||l.getVisual("color");x.useStyle(p.defaults(u.getLineStyle(),{fill:"none",stroke:C,lineJoin:"bevel"}));var D=t.get("smooth");if(D=o(t.get("smooth")),x.setShape({smooth:D,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")}),_){var P=l.stackedOn,k=0;if(_.useStyle(p.defaults(d.getAreaStyle(),{fill:C,opacity:.7,lineJoin:"bevel"})),P){var z=P.hostModel;k=o(z.get("smooth"))}_.setShape({smooth:D,stackedOnSmooth:k,smoothMonotone:t.get("smoothMonotone"),connectNulls:t.get("connectNulls")})}this._data=l,this._coordSys=r,this._stackedOnPoints=M,this._points=g,this._step=L},dispose:function(){},highlight:function(t,e,i,n){var o=t.getData(),r=x.queryDataIndex(o,n);if(!(r instanceof Array)&&null!=r&&r>=0){var a=o.getItemGraphicEl(r);if(!a){var s=o.getItemLayout(r);a=new m(o,r),a.position=s,a.setZ(t.get("zlevel"),t.get("z")),a.ignore=isNaN(s[0])||isNaN(s[1]),a.__temp=!0,o.setItemGraphicEl(r,a),a.stopSymbolAnimation(!0),this.group.add(a)}a.highlight()}else b.prototype.highlight.call(this,t,e,i,n)},downplay:function(t,e,i,n){var o=t.getData(),r=x.queryDataIndex(o,n);if(null!=r&&r>=0){var a=o.getItemGraphicEl(r);a&&(a.__temp?(o.setItemGraphicEl(r,null),this.group.remove(a)):a.downplay())}else b.prototype.downplay.call(this,t,e,i,n)},_newPolyline:function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new _.Polyline({shape:{points:t},silent:!0,z2:10}),this._lineGroup.add(e),this._polyline=e,e},_newPolygon:function(t,e){var i=this._polygon;return i&&this._lineGroup.remove(i),i=new _.Polygon({shape:{points:t,stackedOnPoints:e},silent:!0}),this._lineGroup.add(i),this._polygon=i,i},_getSymbolIgnoreFunc:function(t,e){var i=e.getAxesByScale("ordinal")[0];if(i&&i.isLabelIgnored)return p.bind(i.isLabelIgnored,i)},_updateAnimation:function(t,e,i,n,o){var r=this._polyline,a=this._polygon,s=t.hostModel,l=v(this._data,t,this._stackedOnPoints,e,this._coordSys,i),u=l.current,h=l.stackedOnCurrent,d=l.next,f=l.stackedOnNext;o&&(u=c(l.current,i,o),h=c(l.stackedOnCurrent,i,o),d=c(l.next,i,o),f=c(l.stackedOnNext,i,o)),r.shape.__points=l.current,r.shape.points=u,y.updateProps(r,{shape:{points:d}},s),a&&(a.setShape({points:u,stackedOnPoints:h}),y.updateProps(a,{shape:{points:d,stackedOnPoints:f}},s));for(var p=[],g=l.status,m=0;m<g.length;m++){var x=g[m].cmd;if("="===x){var _=t.getItemGraphicEl(g[m].idx1);_&&p.push({el:_,ptIdx:m})}}r.animators&&r.animators.length&&r.animators[0].during(function(){for(var t=0;t<p.length;t++){var e=p[t].el;e.attr("position",r.shape.__points[p[t].ptIdx])}})},remove:function(t){var e=this.group,i=this._data;this._lineGroup.removeAll(),this._symbolDraw.remove(!0),i&&i.eachItemGraphicEl(function(t,n){t.__temp&&(e.remove(t),i.setItemGraphicEl(n,null))}),this._polyline=this._polygon=this._coordSys=this._points=this._stackedOnPoints=this._data=null}})},function(t,e){function i(t){return t>=0?1:-1}function n(t,e,n){for(var o,r=t.getBaseAxis(),a=t.getOtherAxis(r),s=r.onZero?0:a.scale.getExtent()[0],l=a.dim,u="x"===l||"radius"===l?1:0,h=e.stackedOn,c=e.get(l,n);h&&i(h.get(l,n))===i(c);){o=h;break}var d=[];return d[u]=e.get(r.dim,n),d[1-u]=o?o.get(l,n,!0):s,t.dataToPoint(d)}function o(t,e){var i=[];return e.diff(t).add(function(t){i.push({cmd:"+",idx:t})}).update(function(t,e){i.push({cmd:"=",idx:e,idx1:t})}).remove(function(t){i.push({cmd:"-",idx:t})}).execute(),i}t.exports=function(t,e,i,r,a,s){for(var l=o(t,e),u=[],h=[],c=[],d=[],f=[],p=[],g=[],m=s.dimensions,v=0;v<l.length;v++){var y=l[v],x=!0;switch(y.cmd){case"=":var _=t.getItemLayout(y.idx),b=e.getItemLayout(y.idx1);(isNaN(_[0])||isNaN(_[1]))&&(_=b.slice()),u.push(_),h.push(b),c.push(i[y.idx]),d.push(r[y.idx1]),g.push(e.getRawIndex(y.idx1));break;case"+":var w=y.idx;u.push(a.dataToPoint([e.get(m[0],w,!0),e.get(m[1],w,!0)])),h.push(e.getItemLayout(w).slice()),c.push(n(a,e,w)),d.push(r[w]),g.push(e.getRawIndex(w));break;case"-":var w=y.idx,S=t.getRawIndex(w);S!==w?(u.push(t.getItemLayout(w)),h.push(s.dataToPoint([t.get(m[0],w,!0),t.get(m[1],w,!0)])),c.push(i[w]),d.push(n(s,t,w)),g.push(S)):x=!1}x&&(f.push(y),p.push(p.length))}p.sort(function(t,e){return g[t]-g[e]});for(var M=[],T=[],I=[],A=[],L=[],v=0;v<p.length;v++){var w=p[v];M[v]=u[w],T[v]=h[w],I[v]=c[w],A[v]=d[w],L[v]=f[w]}return{current:M,next:T,stackedOnCurrent:I,stackedOnNext:A,status:L}}},function(t,e,i){function n(t){return isNaN(t[0])||isNaN(t[1])}function o(t,e,i,o,r,a,g,m,v,y,x){for(var _=0,b=i,w=0;w<o;w++){var S=e[b];if(b>=r||b<0)break;if(n(S)){if(x){b+=a;continue}break}if(b===i)t[a>0?"moveTo":"lineTo"](S[0],S[1]),c(f,S);else if(v>0){var M=b+a,T=e[M];if(x)for(;T&&n(e[M]);)M+=a,T=e[M];var I=.5,A=e[_],T=e[M];if(!T||n(T))c(p,S);else{n(T)&&!x&&(T=S),s.sub(d,T,A);var L,C;if("x"===y||"y"===y){var D="x"===y?0:1;L=Math.abs(S[D]-A[D]),C=Math.abs(S[D]-T[D])}else L=s.dist(S,A),C=s.dist(S,T);I=C/(C+L),h(p,S,d,-v*(1-I))}l(f,f,m),u(f,f,g),l(p,p,m),u(p,p,g),t.bezierCurveTo(f[0],f[1],p[0],p[1],S[0],S[1]),h(f,S,d,v*I)}else t.lineTo(S[0],S[1]);_=b,b+=a}return w}function r(t,e){var i=[1/0,1/0],n=[-(1/0),-(1/0)];if(e)for(var o=0;o<t.length;o++){var r=t[o];r[0]<i[0]&&(i[0]=r[0]),r[1]<i[1]&&(i[1]=r[1]),r[0]>n[0]&&(n[0]=r[0]),r[1]>n[1]&&(n[1]=r[1])}return{min:e?i:n,max:e?n:i}}var a=i(6),s=i(5),l=s.min,u=s.max,h=s.scaleAndAdd,c=s.copy,d=[],f=[],p=[];t.exports={Polyline:a.extend({type:"ec-polyline",shape:{points:[],smooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},style:{fill:null,stroke:"#000"},buildPath:function(t,e){var i=e.points,a=0,s=i.length,l=r(i,e.smoothConstraint);if(e.connectNulls){for(;s>0&&n(i[s-1]);s--);for(;a<s&&n(i[a]);a++);}for(;a<s;)a+=o(t,i,a,s,s,1,l.min,l.max,e.smooth,e.smoothMonotone,e.connectNulls)+1}}),Polygon:a.extend({type:"ec-polygon",shape:{points:[],stackedOnPoints:[],smooth:0,stackedOnSmooth:0,smoothConstraint:!0,smoothMonotone:null,connectNulls:!1},buildPath:function(t,e){var i=e.points,a=e.stackedOnPoints,s=0,l=i.length,u=e.smoothMonotone,h=r(i,e.smoothConstraint),c=r(a,e.smoothConstraint);if(e.connectNulls){for(;l>0&&n(i[l-1]);l--);for(;s<l&&n(i[s]);s++);}for(;s<l;){var d=o(t,i,s,l,l,1,h.min,h.max,e.smooth,u,e.connectNulls);o(t,a,s+d-1,d,l,-1,c.min,c.max,e.stackedOnSmooth,u,e.connectNulls),s+=d+1,t.closePath()}}})}},function(t,e,i){var n=i(1),o=i(2);i(102),i(103),i(77)("pie",[{type:"pieToggleSelect",event:"pieselectchanged",method:"toggleSelected"},{type:"pieSelect",event:"pieselected",method:"select"},{type:"pieUnSelect",event:"pieunselected",method:"unSelect"}]),o.registerVisual(n.curry(i(72),"pie")),o.registerLayout(n.curry(i(105),"pie")),o.registerProcessor(n.curry(i(70),"pie"))},function(t,e,i){"use strict";var n=i(14),o=i(1),r=i(7),a=i(29),s=i(66),l=i(2).extendSeriesModel({type:"series.pie",init:function(t){l.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._dataBeforeProcessed},this.updateSelectedMap(t.data),this._defaultLabelLine(t)},mergeOption:function(t){l.superCall(this,"mergeOption",t),this.updateSelectedMap(this.option.data)},getInitialData:function(t,e){var i=a(["value"],t.data),o=new n(i,this);return o.initData(t.data),o},getDataParams:function(t){var e=this._data,i=l.superCall(this,"getDataParams",t),n=e.getSum("value");return i.percent=n?+(e.get("value",t)/n*100).toFixed(2):0, +i.$vars.push("percent"),i},_defaultLabelLine:function(t){r.defaultEmphasis(t.labelLine,["show"]);var e=t.labelLine.normal,i=t.labelLine.emphasis;e.show=e.show&&t.label.normal.show,i.show=i.show&&t.label.emphasis.show},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,selectedOffset:10,avoidLabelOverlap:!0,label:{normal:{rotate:!1,show:!0,position:"outer"},emphasis:{}},labelLine:{normal:{show:!0,length:15,length2:15,smooth:!1,lineStyle:{width:1,type:"solid"}}},itemStyle:{normal:{borderWidth:1},emphasis:{}},animationEasing:"cubicOut",data:[]}});o.mixin(l,s),t.exports=l},function(t,e,i){function n(t,e,i,n){var r=e.getData(),a=this.dataIndex,s=r.getName(a),l=e.get("selectedOffset");n.dispatchAction({type:"pieToggleSelect",from:t,name:s,seriesId:e.id}),r.each(function(t){o(r.getItemGraphicEl(t),r.getItemLayout(t),e.isSelected(r.getName(t)),l,i)})}function o(t,e,i,n,o){var r=(e.startAngle+e.endAngle)/2,a=Math.cos(r),s=Math.sin(r),l=i?n:0,u=[a*l,s*l];o?t.animate().when(200,{position:u}).start("bounceOut"):t.attr("position",u)}function r(t,e){function i(){r.ignore=r.hoverIgnore,a.ignore=a.hoverIgnore}function n(){r.ignore=r.normalIgnore,a.ignore=a.normalIgnore}s.Group.call(this);var o=new s.Sector({z2:2}),r=new s.Polyline,a=new s.Text;this.add(o),this.add(r),this.add(a),this.updateData(t,e,!0),this.on("emphasis",i).on("normal",n).on("mouseover",i).on("mouseout",n)}function a(t,e,i,n,o){var r=n.getModel("textStyle"),a="inside"===o||"inner"===o;return{fill:r.getTextColor()||(a?"#fff":t.getItemVisual(e,"color")),opacity:t.getItemVisual(e,"opacity"),textFont:r.getFont(),text:l.retrieve(t.hostModel.getFormattedLabel(e,i),t.getName(e))}}var s=i(3),l=i(1),u=r.prototype;u.updateData=function(t,e,i){function n(){a.stopAnimation(!0),a.animateTo({shape:{r:c.r+10}},300,"elasticOut")}function r(){a.stopAnimation(!0),a.animateTo({shape:{r:c.r}},300,"elasticOut")}var a=this.childAt(0),u=t.hostModel,h=t.getItemModel(e),c=t.getItemLayout(e),d=l.extend({},c);d.label=null,i?(a.setShape(d),a.shape.endAngle=c.startAngle,s.updateProps(a,{shape:{endAngle:c.endAngle}},u,e)):s.updateProps(a,{shape:d},u,e);var f=h.getModel("itemStyle"),p=t.getItemVisual(e,"color");a.useStyle(l.defaults({lineJoin:"bevel",fill:p},f.getModel("normal").getItemStyle())),a.hoverStyle=f.getModel("emphasis").getItemStyle(),o(this,t.getItemLayout(e),h.get("selected"),u.get("selectedOffset"),u.get("animation")),a.off("mouseover").off("mouseout").off("emphasis").off("normal"),h.get("hoverAnimation")&&u.ifEnableAnimation()&&a.on("mouseover",n).on("mouseout",r).on("emphasis",n).on("normal",r),this._updateLabel(t,e),s.setHoverStyle(this)},u._updateLabel=function(t,e){var i=this.childAt(1),n=this.childAt(2),o=t.hostModel,r=t.getItemModel(e),l=t.getItemLayout(e),u=l.label,h=t.getItemVisual(e,"color");s.updateProps(i,{shape:{points:u.linePoints||[[u.x,u.y],[u.x,u.y],[u.x,u.y]]}},o,e),s.updateProps(n,{style:{x:u.x,y:u.y}},o,e),n.attr({style:{textVerticalAlign:u.verticalAlign,textAlign:u.textAlign,textFont:u.font},rotation:u.rotation,origin:[u.x,u.y],z2:10});var c=r.getModel("label.normal"),d=r.getModel("label.emphasis"),f=r.getModel("labelLine.normal"),p=r.getModel("labelLine.emphasis"),g=c.get("position")||d.get("position");n.setStyle(a(t,e,"normal",c,g)),n.ignore=n.normalIgnore=!c.get("show"),n.hoverIgnore=!d.get("show"),i.ignore=i.normalIgnore=!f.get("show"),i.hoverIgnore=!p.get("show"),i.setStyle({stroke:h,opacity:t.getItemVisual(e,"opacity")}),i.setStyle(f.getModel("lineStyle").getLineStyle()),n.hoverStyle=a(t,e,"emphasis",d,g),i.hoverStyle=p.getModel("lineStyle").getLineStyle();var m=f.get("smooth");m&&m===!0&&(m=.4),i.setShape({smooth:m})},l.inherits(r,s.Group);var h=i(27).extend({type:"pie",init:function(){var t=new s.Group;this._sectorGroup=t},render:function(t,e,i,o){if(!o||o.from!==this.uid){var a=t.getData(),s=this._data,u=this.group,h=e.get("animation"),c=!s,d=l.curry(n,this.uid,t,h,i),f=t.get("selectedMode");if(a.diff(s).add(function(t){var e=new r(a,t);c&&e.eachChild(function(t){t.stopAnimation(!0)}),f&&e.on("click",d),a.setItemGraphicEl(t,e),u.add(e)}).update(function(t,e){var i=s.getItemGraphicEl(e);i.updateData(a,t),i.off("click"),f&&i.on("click",d),u.add(i),a.setItemGraphicEl(t,i)}).remove(function(t){var e=s.getItemGraphicEl(t);u.remove(e)}).execute(),h&&c&&a.count()>0){var p=a.getItemLayout(0),g=Math.max(i.getWidth(),i.getHeight())/2,m=l.bind(u.removeClipPath,u);u.setClipPath(this._createClipPath(p.cx,p.cy,g,p.startAngle,p.clockwise,m,t))}this._data=a}},dispose:function(){},_createClipPath:function(t,e,i,n,o,r,a){var l=new s.Sector({shape:{cx:t,cy:e,r0:0,r:i,startAngle:n,endAngle:n,clockwise:o}});return s.initProps(l,{shape:{endAngle:n+(o?1:-1)*Math.PI*2}},a,r),l},containPoint:function(t,e){var i=e.getData(),n=i.getItemLayout(0);if(n){var o=t[0]-n.cx,r=t[1]-n.cy,a=Math.sqrt(o*o+r*r);return a<=n.r&&a>=n.r0}}});t.exports=h},function(t,e,i){"use strict";function n(t,e,i,n,o,r,a){function s(e,i,n,o){for(var r=e;r<i;r++)if(t[r].y+=n,r>e&&r+1<i&&t[r+1].y>t[r].y+t[r].height)return void l(r,n/2);l(i-1,n/2)}function l(e,i){for(var n=e;n>=0&&(t[n].y-=i,!(n>0&&t[n].y>t[n-1].y+t[n-1].height));n--);}function u(t,e,i,n,o,r){for(var a=r>0?e?Number.MAX_VALUE:0:e?Number.MAX_VALUE:0,s=0,l=t.length;s<l;s++)if("center"!==t[s].position){var u=Math.abs(t[s].y-n),h=t[s].len,c=t[s].len2,d=u<o+h?Math.sqrt((o+h+c)*(o+h+c)-u*u):Math.abs(t[s].x-i);e&&d>=a&&(d=a-10),!e&&d<=a&&(d=a+10),t[s].x=i+d*r,a=d}}t.sort(function(t,e){return t.y-e.y});for(var h,c=0,d=t.length,f=[],p=[],g=0;g<d;g++)h=t[g].y-c,h<0&&s(g,d,-h,o),c=t[g].y+t[g].height;a-c<0&&l(d-1,c-a);for(var g=0;g<d;g++)t[g].y>=i?p.push(t[g]):f.push(t[g]);u(f,!1,e,i,n,o),u(p,!0,e,i,n,o)}function o(t,e,i,o,r,a){for(var s=[],l=[],u=0;u<t.length;u++)t[u].x<e?s.push(t[u]):l.push(t[u]);n(l,e,i,o,1,r,a),n(s,e,i,o,-1,r,a);for(var u=0;u<t.length;u++){var h=t[u].linePoints;if(h){var c=h[1][0]-h[2][0];t[u].x<e?h[2][0]=t[u].x+3:h[2][0]=t[u].x-3,h[1][1]=h[2][1]=t[u].y,h[1][0]=h[2][0]+c}}}var r=i(16);t.exports=function(t,e,i,n){var a,s,l=t.getData(),u=[],h=!1;l.each(function(i){var n,o,c,d,f=l.getItemLayout(i),p=l.getItemModel(i),g=p.getModel("label.normal"),m=g.get("position")||p.get("label.emphasis.position"),v=p.getModel("labelLine.normal"),y=v.get("length"),x=v.get("length2"),_=(f.startAngle+f.endAngle)/2,b=Math.cos(_),w=Math.sin(_);a=f.cx,s=f.cy;var S="inside"===m||"inner"===m;if("center"===m)n=f.cx,o=f.cy,d="center";else{var M=(S?(f.r+f.r0)/2*b:f.r*b)+a,T=(S?(f.r+f.r0)/2*w:f.r*w)+s;if(n=M+3*b,o=T+3*w,!S){var I=M+b*(y+e-f.r),A=T+w*(y+e-f.r),L=I+(b<0?-1:1)*x,C=A;n=L+(b<0?-5:5),o=C,c=[[M,T],[I,A],[L,C]]}d=S?"center":b>0?"left":"right"}var D=g.getModel("textStyle").getFont(),P=g.get("rotate")?b<0?-_+Math.PI:-_:0,k=t.getFormattedLabel(i,"normal")||l.getName(i),z=r.getBoundingRect(k,D,d,"top");h=!!P,f.label={x:n,y:o,position:m,height:z.height,len:y,len2:x,linePoints:c,textAlign:d,verticalAlign:"middle",font:D,rotation:P},S||u.push(f.label)}),!h&&t.get("avoidLabelOverlap")&&o(u,a,s,e,i,n)}},function(t,e,i){var n=i(4),o=n.parsePercent,r=i(104),a=i(1),s=2*Math.PI,l=Math.PI/180;t.exports=function(t,e,i,u){e.eachSeriesByType(t,function(t){var e=t.get("center"),u=t.get("radius");a.isArray(u)||(u=[0,u]),a.isArray(e)||(e=[e,e]);var h=i.getWidth(),c=i.getHeight(),d=Math.min(h,c),f=o(e[0],h),p=o(e[1],c),g=o(u[0],d/2),m=o(u[1],d/2),v=t.getData(),y=-t.get("startAngle")*l,x=t.get("minAngle")*l,_=v.getSum("value"),b=Math.PI/(_||v.count())*2,w=t.get("clockwise"),S=t.get("roseType"),M=v.getDataExtent("value");M[0]=0;var T=s,I=0,A=y,L=w?1:-1;if(v.each("value",function(t,e){var i;i="area"!==S?0===_?b:t*b:s/(v.count()||1),i<x?(i=x,T-=x):I+=t;var o=A+L*i;v.setItemLayout(e,{angle:i,startAngle:A,endAngle:o,clockwise:w,cx:f,cy:p,r0:g,r:S?n.linearMap(t,M,[g,m]):m}),A=o},!0),T<s)if(T<=.001){var C=s/v.count();v.each(function(t){var e=v.getItemLayout(t);e.startAngle=y+L*t*C,e.endAngle=y+L*(t+1)*C})}else b=T/I,A=y,v.each("value",function(t,e){var i=v.getItemLayout(e),n=i.angle===x?x:t*b;i.startAngle=A,i.endAngle=A+L*n,A+=L*n});r(t,m,h,c)})}},function(t,e,i){"use strict";i(53),i(107)},function(t,e,i){function n(t,e){function i(t,e){var i=n.getAxis(t);return i.toGlobalCoord(i.dataToCoord(0))}var n=t.coordinateSystem,o=e.axis,r={},a=o.position,s=o.onZero?"onZero":a,l=o.dim,u=n.getRect(),h=[u.x,u.x+u.width,u.y,u.y+u.height],c=e.get("offset")||0,d={x:{top:h[2]-c,bottom:h[3]+c},y:{left:h[0]-c,right:h[1]+c}};d.x.onZero=Math.max(Math.min(i("y"),d.x.bottom),d.x.top),d.y.onZero=Math.max(Math.min(i("x"),d.y.right),d.y.left),r.position=["y"===l?d.y[s]:h[0],"x"===l?d.x[s]:h[3]],r.rotation=Math.PI/2*("x"===l?0:1);var f={top:-1,bottom:1,left:-1,right:1};r.labelDirection=r.tickDirection=r.nameDirection=f[a],o.onZero&&(r.labelOffset=d[l][a]-d[l].onZero),e.getModel("axisTick").get("inside")&&(r.tickDirection=-r.tickDirection),e.getModel("axisLabel").get("inside")&&(r.labelDirection=-r.labelDirection);var p=e.getModel("axisLabel").get("rotate");return r.labelRotation="top"===s?-p:p,r.labelInterval=o.getLabelInterval(),r.z2=1,r}var o=i(1),r=i(3),a=i(50),s=a.ifIgnoreOnTick,l=a.getInterval,u=["axisLine","axisLabel","axisTick","axisName"],h=["splitArea","splitLine"],c=i(2).extendComponentView({type:"axis",render:function(t,e){this.group.removeAll();var i=this._axisGroup;if(this._axisGroup=new r.Group,this.group.add(this._axisGroup),t.get("show")){var s=t.findGridModel(),l=n(s,t),c=new a(t,l);o.each(u,c.add,c),this._axisGroup.add(c.getGroup()),o.each(h,function(e){t.get(e+".show")&&this["_"+e](t,s,l.labelInterval)},this),r.groupTransition(i,this._axisGroup,t)}},_splitLine:function(t,e,i){var n=t.axis,a=t.getModel("splitLine"),u=a.getModel("lineStyle"),h=u.get("color"),c=l(a,i);h=o.isArray(h)?h:[h];for(var d=e.coordinateSystem.getRect(),f=n.isHorizontal(),p=0,g=n.getTicksCoords(),m=n.scale.getTicks(),v=[],y=[],x=u.getLineStyle(),_=0;_<g.length;_++)if(!s(n,_,c)){var b=n.toGlobalCoord(g[_]);f?(v[0]=b,v[1]=d.y,y[0]=b,y[1]=d.y+d.height):(v[0]=d.x,v[1]=b,y[0]=d.x+d.width,y[1]=b);var w=p++%h.length;this._axisGroup.add(new r.Line(r.subPixelOptimizeLine({anid:"line_"+m[_],shape:{x1:v[0],y1:v[1],x2:y[0],y2:y[1]},style:o.defaults({stroke:h[w]},x),silent:!0})))}},_splitArea:function(t,e,i){var n=t.axis,a=t.getModel("splitArea"),u=a.getModel("areaStyle"),h=u.get("color"),c=e.coordinateSystem.getRect(),d=n.getTicksCoords(),f=n.scale.getTicks(),p=n.toGlobalCoord(d[0]),g=n.toGlobalCoord(d[0]),m=0,v=l(a,i),y=u.getAreaStyle();h=o.isArray(h)?h:[h];for(var x=1;x<d.length;x++)if(!s(n,x,v)){var _,b,w,S,M=n.toGlobalCoord(d[x]);n.isHorizontal()?(_=p,b=c.y,w=M-_,S=c.height):(_=c.x,b=g,w=c.width,S=M-b);var T=m++%h.length;this._axisGroup.add(new r.Rect({anid:"area_"+f[x],shape:{x:_,y:b,width:w,height:S},style:o.defaults({fill:h[T]},y),silent:!0})),p=_+w,g=b+S}}});c.extend({type:"xAxis"}),c.extend({type:"yAxis"})},function(t,e,i){var n=i(1),o=i(110),r=i(2);r.registerAction("dataZoom",function(t,e){var i=o.createLinkedNodesFinder(n.bind(e.eachComponent,e,"dataZoom"),o.eachAxisDim,function(t,e){return t.get(e.axisIndex)}),r=[];e.eachComponent({mainType:"dataZoom",query:t},function(t,e){r.push.apply(r,i(t).nodes)}),n.each(r,function(e,i){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})})})},function(t,e,i){function n(t,e,i){i.getAxisProxy(t.name,e).reset(i)}function o(t,e,i){i.getAxisProxy(t.name,e).filterData(i)}var r=i(2);r.registerProcessor(function(t,e){t.eachComponent("dataZoom",function(t){t.eachTargetAxis(n),t.eachTargetAxis(o)}),t.eachComponent("dataZoom",function(t){var e=t.findRepresentativeAxisProxy(),i=e.getDataPercentWindow(),n=e.getDataValueWindow();t.setRawRange({start:i[0],end:i[1],startValue:n[0],endValue:n[1]})})})},function(t,e,i){var n=i(9),o=i(1),r={},a=["x","y","z","radius","angle"];r.createNameEach=function(t,e){t=t.slice();var i=o.map(t,n.capitalFirst);e=(e||[]).slice();var r=o.map(e,n.capitalFirst);return function(n,a){o.each(t,function(t,o){for(var s={name:t,capital:i[o]},l=0;l<e.length;l++)s[e[l]]=t+r[l];n.call(a,s)})}},r.eachAxisDim=r.createNameEach(a,["axisIndex","axis","index","id"]),r.createLinkedNodesFinder=function(t,e,i){function n(t,e){return o.indexOf(e.nodes,t)>=0}function r(t,n){var r=!1;return e(function(e){o.each(i(t,e)||[],function(t){n.records[e.name][t]&&(r=!0)})}),r}function a(t,n){n.nodes.push(t),e(function(e){o.each(i(t,e)||[],function(t){n.records[e.name][t]=!0})})}return function(i){function o(t){!n(t,s)&&r(t,s)&&(a(t,s),l=!0)}var s={nodes:[],records:{}};if(e(function(t){s.records[t.name]={}}),!i)return s;a(i,s);var l;do l=!1,t(o);while(l);return s}},t.exports=r},function(t,e,i){function n(t){var e=t[a];return e||(e=t[a]=[{}]),e}var o=i(1),r=o.each,a="\0_ec_hist_store",s={push:function(t,e){var i=n(t);r(e,function(e,n){for(var o=i.length-1;o>=0;o--){var r=i[o];if(r[n])break}if(o<0){var a=t.queryComponents({mainType:"dataZoom",subType:"select",id:n})[0];if(a){var s=a.getPercentRange();i[0][n]={dataZoomId:n,start:s[0],end:s[1]}}}}),i.push(e)},pop:function(t){var e=n(t),i=e[e.length-1];e.length>1&&e.pop();var o={};return r(i,function(t,i){for(var n=e.length-1;n>=0;n--){var t=e[n][i];if(t){o[i]=t;break}}}),o},clear:function(t){t[a]=null},count:function(t){return n(t).length}};t.exports=s},function(t,e,i){i(12).registerSubTypeDefaulter("dataZoom",function(t){return"slider"})},function(t,e,i){function n(t){V.call(this),this._zr=t,this.group=new G.Group,this._brushType,this._brushOption,this._panels,this._track=[],this._dragging,this._covers=[],this._creatingCover,this._creatingPanel,this._enableGlobalPan,this._uid="brushController_"+it++,this._handlers={},Z(nt,function(t,e){this._handlers[e]=N.bind(t,this)},this)}function o(t,e){var i=t._zr;t._enableGlobalPan||F.take(i,K,t._uid),Z(t._handlers,function(t,e){i.on(e,t)}),t._brushType=e.brushType,t._brushOption=N.merge(N.clone(et),e,!0)}function r(t){var e=t._zr;F.release(e,K,t._uid),Z(t._handlers,function(t,i){e.off(i,t)}),t._brushType=t._brushOption=null}function a(t,e){var i=ot[e.brushType].createCover(t,e);return u(i),i.__brushOption=e,t.group.add(i),i}function s(t,e){var i=c(e);return i.endCreating&&(i.endCreating(t,e),u(e)),e}function l(t,e){var i=e.__brushOption;c(e).updateCoverShape(t,e,i.range,i)}function u(t){t.traverse(function(t){t.z=Y,t.z2=Y})}function h(t,e){c(e).updateCommon(t,e),l(t,e)}function c(t){return ot[t.__brushOption.brushType]}function d(t,e,i){var n=t._panels;if(!n)return!0;var o;return Z(n,function(t){t.contain(e,i)&&(o=t)}),o}function f(t,e){var i=t._panels;if(!i)return!0;var n=e.__brushOption.panelId;return null==n||i[n]}function p(t){var e=t._covers,i=e.length;return Z(e,function(e){t.group.remove(e)},t),e.length=0,!!i}function g(t,e){var i=q(t._covers,function(t){var e=t.__brushOption,i=N.clone(e.range);return{brushType:e.brushType,panelId:e.panelId,range:i}});t.trigger("brush",i,{isEnd:!!e.isEnd,removeOnClick:!!e.removeOnClick})}function m(t){var e=t._track;if(!e.length)return!1;var i=e[e.length-1],n=e[0],o=i[0]-n[0],r=i[1]-n[1],a=X(o*o+r*r,.5);return a>$}function v(t){var e=t.length-1;return e<0&&(e=0),[t[0],t[e]]}function y(t,e,i,n){var o=new G.Group;return o.add(new G.Rect({name:"main",style:w(i),silent:!0,draggable:!0,cursor:"move",drift:W(t,e,o,"nswe"),ondragend:W(g,e,{isEnd:!0})})),Z(n,function(i){o.add(new G.Rect({name:i,style:{opacity:0},draggable:!0,silent:!0,invisible:!0,drift:W(t,e,o,i),ondragend:W(g,e,{isEnd:!0})}))}),o}function x(t,e,i,n){var o=n.brushStyle.lineWidth||0,r=U(o,Q),a=i[0][0],s=i[1][0],l=a-o/2,u=s-o/2,h=i[0][1],c=i[1][1],d=h-r+o/2,f=c-r+o/2,p=h-a,g=c-s,m=p+o,v=g+o;b(t,e,"main",a,s,p,g),n.transformable&&(b(t,e,"w",l,u,r,v),b(t,e,"e",d,u,r,v),b(t,e,"n",l,u,m,r),b(t,e,"s",l,f,m,r),b(t,e,"nw",l,u,r,r),b(t,e,"ne",d,u,r,r),b(t,e,"sw",l,f,r,r),b(t,e,"se",d,f,r,r))}function _(t,e){var i=e.__brushOption,n=i.transformable,o=e.childAt(0);o.useStyle(w(i)),o.attr({silent:!n,cursor:n?"move":"default"}),Z(["w","e","n","s","se","sw","ne","nw"],function(i){var o=e.childOfName(i),r=T(t,i);o&&o.attr({silent:!n,invisible:!n,cursor:n?tt[r]+"-resize":null})})}function b(t,e,i,n,o,r,a){var s=e.childOfName(i);s&&s.setShape(D(C(t,e,[[n,o],[n+r,o+a]])))}function w(t){return N.defaults({strokeNoScale:!0},t.brushStyle)}function S(t,e,i,n){var o=[j(t,i),j(e,n)],r=[U(t,i),U(e,n)];return[[o[0],r[0]],[o[1],r[1]]]}function M(t){return G.getTransform(t.group)}function T(t,e){if(e.length>1){e=e.split("");var i=[T(t,e[0]),T(t,e[1])];return("e"===i[0]||"w"===i[0])&&i.reverse(),i.join("")}var n={w:"left",e:"right",n:"top",s:"bottom"},o={left:"w",right:"e",top:"n",bottom:"s"},i=G.transformDirection(n[e],M(t));return o[i]}function I(t,e,i,n,o,r,a,s){var l=n.__brushOption,u=t(l.range),c=L(i,r,a);Z(o.split(""),function(t){var e=J[t];u[e[0]][e[1]]+=c[e[0]]}),l.range=e(S(u[0][0],u[1][0],u[0][1],u[1][1])),h(i,n),g(i,{isEnd:!1})}function A(t,e,i,n,o){var r=e.__brushOption.range,a=L(t,i,n);Z(r,function(t){t[0]+=a[0],t[1]+=a[1]}),h(t,e),g(t,{isEnd:!1})}function L(t,e,i){var n=t.group,o=n.transformCoordToLocal(e,i),r=n.transformCoordToLocal(0,0);return[o[0]-r[0],o[1]-r[1]]}function C(t,e,i){var n=f(t,e);if(n===!0)return N.clone(i);var o=n.getBoundingRect();return N.map(i,function(t){var e=t[0];e=U(e,o.x),e=j(e,o.x+o.width);var i=t[1];return i=U(i,o.y),i=j(i,o.y+o.height),[e,i]})}function D(t){var e=j(t[0][0],t[1][0]),i=j(t[0][1],t[1][1]),n=U(t[0][0],t[1][0]),o=U(t[0][1],t[1][1]);return{x:e,y:i,width:n-e,height:o-i}}function P(t,e){var i=e.offsetX,n=e.offsetY,o=t._zr;if(t._brushType){for(var r,a=t._panels,s=t._covers,l=0;l<s.length;l++)if(ot[s[l].__brushOption.brushType].contain(s[l],i,n)){r=!0;break}r||(a?Z(a,function(t){t.contain(i,n)&&o.setCursorStyle("crosshair")}):o.setCursorStyle("crosshair"))}}function k(t){var e=t.event;e.preventDefault&&e.preventDefault()}function z(t,e,i){return t.childOfName("main").contain(e,i)}function O(t,e,i){var n,o=e.offsetX,r=e.offsetY,u=t._creatingCover,h=t._creatingPanel,c=t._brushOption;if(t._track.push(t.group.transformCoordToLocal(o,r)),m(t)||u){if(h&&!u){"single"===c.brushMode&&p(t);var f=N.clone(c);f.panelId=h===!0?null:h.__brushPanelId,u=t._creatingCover=a(t,f),t._covers.push(u)}if(u){var g=ot[t._brushType],v=u.__brushOption;v.range=g.getCreatingRange(C(t,u,t._track)),i&&(s(t,u),g.updateCommon(t,u)),l(t,u),n={isEnd:i}}}else i&&"single"===c.brushMode&&c.removeOnClick&&d(t,o,r)&&p(t)&&(n={isEnd:i,removeOnClick:!0});return n}function E(t){if(this._dragging){k(t);var e=O(this,t,!0);this._dragging=!1,this._track=[],this._creatingCover=null,e&&g(this,e)}}function R(t){return{createCover:function(e,i){return y(W(I,function(e){var i=[e,[0,100]];return t&&i.reverse(),i},function(e){return e[t]}),e,i,[["w","e"],["n","s"]][t])},getCreatingRange:function(e){var i=v(e),n=j(i[0][t],i[1][t]),o=U(i[0][t],i[1][t]);return[n,o]},updateCoverShape:function(e,i,n,o){var r,a=o.brushStyle.width;if(null==a){var s=f(e,i),l=0;if(s!==!0){var u=s.getBoundingRect();a=t?u.width:u.height,l=t?u.x:u.y}r=[l,l+(a||0)]}else r=[-a/2,a/2];var h=[n,r];t&&h.reverse(),x(e,i,h,o)},updateCommon:_,contain:z}}var V=i(20),N=i(1),B=i(8),G=i(3),F=i(115),H=i(45),W=N.curry,Z=N.each,q=N.map,j=Math.min,U=Math.max,X=Math.pow,Y=1e4,$=6,Q=6,K="globalPan",J={w:[0,0],e:[0,1],n:[1,0],s:[1,1]},tt={w:"ew",e:"ew",n:"ns",s:"ns",ne:"nesw",sw:"nesw",nw:"nwse",se:"nwse"},et={brushStyle:{lineWidth:2,stroke:"rgba(0,0,0,0.3)",fill:"rgba(0,0,0,0.1)"},transformable:!0,brushMode:"single",removeOnClick:!1},it=0;n.prototype={constructor:n,enableBrush:function(t){return this._brushType&&r(this),t.brushType&&o(this,t),this},setPanels:function(t){var e=this._panels||{},i=this._panels=t&&t.length&&{},n=this.group;return i&&Z(t,function(t){var o=t.panelId,r=e[o];r||(r=new G.Rect({silent:!0,invisible:!0}),n.add(r));var a=t.rect;a instanceof B||(a=B.create(a)),r.attr("shape",a.plain()),r.__brushPanelId=o,i[o]=r,e[o]=null}),Z(e,function(t){t&&n.remove(t)}),this},mount:function(t){t=t||{},this._enableGlobalPan=t.enableGlobalPan;var e=this.group;return this._zr.add(e),e.attr({position:t.position||[0,0],rotation:t.rotation||0,scale:t.scale||[1,1]}),this},eachCover:function(t,e){Z(this._covers,t,e)},updateCovers:function(t){function e(t,e){return(null!=t.id?t.id:r+e)+"-"+t.brushType}function i(t,i){return e(t.__brushOption,i)}function n(e,i){var n=t[e];if(null!=i&&l[i]===d)u[e]=l[i];else{var o=u[e]=null!=i?(l[i].__brushOption=n,l[i]):s(c,a(c,n));h(c,o)}}function o(t){l[t]!==d&&c.group.remove(l[t])}t=N.map(t,function(t){return N.merge(N.clone(et),t,!0)});var r="\0-brush-index-",l=this._covers,u=this._covers=[],c=this,d=this._creatingCover;return new H(l,t,i,e).add(n).update(n).remove(o).execute(),this},unmount:function(){return this.enableBrush(!1),p(this),this._zr.remove(this.group),this},dispose:function(){this.unmount(),this.off()}},N.mixin(n,V);var nt={mousedown:function(t){if(this._dragging)E.call(this,t);else if(!t.target||!t.target.draggable){k(t);var e=t.offsetX,i=t.offsetY;this._creatingCover=null;var n=this._creatingPanel=d(this,e,i);n&&(this._dragging=!0,this._track=[this.group.transformCoordToLocal(e,i)])}},mousemove:function(t){if(P(this,t),this._dragging){k(t);var e=O(this,t,!1);e&&g(this,e)}},mouseup:E},ot={lineX:R(0),lineY:R(1),rect:{createCover:function(t,e){return y(W(I,function(t){return t},function(t){return t}),t,e,["w","e","n","s","se","sw","ne","nw"])},getCreatingRange:function(t){var e=v(t);return S(e[1][0],e[1][1],e[0][0],e[0][1])},updateCoverShape:function(t,e,i,n){x(t,e,i,n)},updateCommon:_,contain:z},polygon:{createCover:function(t,e){var i=new G.Group;return i.add(new G.Polyline({name:"main",style:w(e),silent:!0})),i},getCreatingRange:function(t){return t},endCreating:function(t,e){e.remove(e.childAt(0)),e.add(new G.Polygon({name:"main",draggable:!0,drift:W(A,t,e),ondragend:W(g,t,{isEnd:!0})}))},updateCoverShape:function(t,e,i,n){e.childAt(0).setShape({points:C(t,e,i)})},updateCommon:_,contain:z}};t.exports=n},function(t,e,i){function n(t){return t[0]>t[1]&&t.reverse(),t}function o(t,e){for(var i=!0,n=0;n<h.length;n++){var o=h[n]+"Index";if(t[o]>=0){i=!1;for(var r=0;r<e.length;r++)if(e[r][o]===t[o])return e[r]}}return i}function r(t,e,i,o){var r=i.coordSys.getAxis(t);return n(a.map([0,1],function(t){return e?r.coordToData(r.toLocalCoord(o[t])):r.toGlobalCoord(r.dataToCoord(o[t]))}))}var a=i(1),s=i(3),l=a.each,u={},h=["geo","xAxis","yAxis"],c="--",d=["dataToPoint","pointToData"];u.parseOutputRanges=function(t,e,i,n){l(t,function(t,i){var r=t.panelId;if(r){r=r.split(c),t[r[0]+"Index"]=+r[1];var a=o(t,e);t.coordRange=f[t.brushType](1,a,t.range),n&&(n[i]=a)}})},u.parseInputRanges=function(t,e){l(t.areas,function(e){var i=o(e,t.coordInfoList);e.range=e.range||[],i&&i!==!0&&(e.range=f[e.brushType](0,i,e.coordRange),e.panelId=i.panelId)})},u.makePanelOpts=function(t){var e=[];return l(t,function(t){var i,n=t.coordSys;t.geoIndex>=0?(i=n.getBoundingRect().clone(),i.applyTransform(s.getTransform(n))):i=n.grid.getRect().clone(),e.push({panelId:t.panelId,rect:i})}),e},u.makeCoordInfoList=function(t,e){var i=[];return l(h,function(n){var o=t[n+"Index"];null!=o&&"none"!==o&&("all"===o||a.isArray(o)||(o=[o]),e.eachComponent({mainType:n},function(t,e){if(!("all"!==o&&a.indexOf(o,e)<0)){var r,s;"xAxis"===n||"yAxis"===n?r=t.axis.grid:s=t.coordinateSystem;for(var l,u=0,h=i.length;u<h;u++){var d=i[u];if("yAxis"===n&&!d.yAxis&&d.xAxis){var f=r.getCartesian(d.xAxisIndex,e);if(f){s=f,l=d;break}}}!l&&i.push(l={}),l[n]=t,l[n+"Index"]=e,l.panelId=n+c+e,l.coordSys=s||r.getCartesian(l.xAxisIndex,l.yAxisIndex),l.coordSys?i[n+"Has"]=!0:i.pop()}}))}),i},u.controlSeries=function(t,e,i){var n=o(t,e.coordInfoList);return n===!0||n&&n.coordSys===i.coordinateSystem};var f={lineX:a.curry(r,"x"),lineY:a.curry(r,"y"),rect:function(t,e,i){var o=e.coordSys,r=o[d[t]]([i[0][0],i[1][0]]),a=o[d[t]]([i[0][1],i[1][1]]);return[n([r[0],a[0]]),n([r[1],a[1]])]},polygon:function(t,e,i){var n=e.coordSys;return a.map(i,n[d[t]],n)}};t.exports=u},function(t,e,i){function n(t){return t[o]||(t[o]={})}var o="\0_ec_interaction_mutex",r={take:function(t,e,i){var o=n(t);o[e]=i},release:function(t,e,i){var o=n(t),r=o[e];r===i&&(o[e]=null)},isTaken:function(t,e){return!!n(t)[e]}};i(2).registerAction({type:"takeGlobalCursor",event:"globalCursorTaken",update:"update"},function(){}),t.exports=r},function(t,e,i){function n(t,e,i){o.positionGroup(t,e.getBoxLayoutParams(),{width:i.getWidth(),height:i.getHeight()},e.get("padding"))}var o=i(13),r=i(9),a=i(3);t.exports={layout:function(t,e,i){var r=o.getLayoutRect(e.getBoxLayoutParams(),{width:i.getWidth(),height:i.getHeight()},e.get("padding"));o.box(e.get("orient"),t,e.get("itemGap"),r.width,r.height),n(t,e,i)},addBackground:function(t,e){var i=r.normalizeCssArray(e.get("padding")),n=t.getBoundingRect(),o=e.getItemStyle(["color","opacity"]);o.fill=e.get("backgroundColor");var s=new a.Rect({shape:{x:n.x-i[3],y:n.y-i[0],width:n.width+i[1]+i[3],height:n.height+i[0]+i[2]},style:o,silent:!0,z2:-1});a.subPixelOptimizeRect(s),t.add(s)}}},function(t,e,i){var n=i(1),o=i(42),r=i(121),a=function(t,e,i,n,r){o.call(this,t,e,i),this.type=n||"value",this.position=r||"bottom"};a.prototype={constructor:a,index:0,onZero:!1,model:null,isHorizontal:function(){var t=this.position;return"top"===t||"bottom"===t},getGlobalExtent:function(){var t=this.getExtent();return t[0]=this.toGlobalCoord(t[0]),t[1]=this.toGlobalCoord(t[1]),t},getLabelInterval:function(){var t=this._labelInterval;return t||(t=this._labelInterval=r(this)),t},isLabelIgnored:function(t){if("category"===this.type){var e=this.getLabelInterval();return"function"==typeof e&&!e(t,this.scale.getLabel(t))||t%(e+1)}},toLocalCoord:null,toGlobalCoord:null},n.inherits(a,o),t.exports=a},function(t,e,i){"use strict";function n(t){return this._axes[t]}var o=i(1),r=function(t){this._axes={},this._dimList=[],this.name=t||""};r.prototype={constructor:r,type:"cartesian",getAxis:function(t){return this._axes[t]},getAxes:function(){return o.map(this._dimList,n,this)},getAxesByScale:function(t){return t=t.toLowerCase(),o.filter(this.getAxes(),function(e){return e.scale.type===t})},addAxis:function(t){var e=t.dim;this._axes[e]=t,this._dimList.push(e)},dataToCoord:function(t){return this._dataCoordConvert(t,"dataToCoord")},coordToData:function(t){return this._dataCoordConvert(t,"coordToData")},_dataCoordConvert:function(t,e){for(var i=this._dimList,n=t instanceof Array?[]:{},o=0;o<i.length;o++){var r=i[o],a=this._axes[r];n[r]=a[e](t[r])}return n}},t.exports=r},function(t,e,i){"use strict";function n(t){r.call(this,t)}var o=i(1),r=i(118);n.prototype={constructor:n,type:"cartesian2d",dimensions:["x","y"],getBaseAxis:function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},containPoint:function(t){var e=this.getAxis("x"),i=this.getAxis("y");return e.contain(e.toLocalCoord(t[0]))&&i.contain(i.toLocalCoord(t[1]))},containData:function(t){return this.getAxis("x").containData(t[0])&&this.getAxis("y").containData(t[1])},dataToPoints:function(t,e){return t.mapArray(["x","y"],function(t,e){return this.dataToPoint([t,e])},e,this)},dataToPoint:function(t,e){var i=this.getAxis("x"),n=this.getAxis("y");return[i.toGlobalCoord(i.dataToCoord(t[0],e)),n.toGlobalCoord(n.dataToCoord(t[1],e))]},pointToData:function(t,e){var i=this.getAxis("x"),n=this.getAxis("y");return[i.coordToData(i.toLocalCoord(t[0]),e),n.coordToData(n.toLocalCoord(t[1]),e)]},getOtherAxis:function(t){return this.getAxis("x"===t.dim?"y":"x")}},o.inherits(n,r),t.exports=n},function(t,e,i){"use strict";i(53);var n=i(12);t.exports=n.extend({type:"grid",dependencies:["xAxis","yAxis"],layoutMode:"box",coordinateSystem:null,defaultOption:{show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:60,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"}})},function(t,e,i){"use strict";var n=i(1),o=i(22);t.exports=function(t){var e=t.model,i=e.getModel("axisLabel"),r=i.get("interval");return"category"!==t.type||"auto"!==r?"auto"===r?0:r:o.getAxisLabelInterval(n.map(t.scale.getTicks(),t.dataToCoord,t),e.getFormattedLabels(),i.getModel("textStyle").getFont(),t.isHorizontal())}},function(t,e,i){"use strict";function n(t){return t.get("stack")||"__ec_stack_"+t.seriesIndex}function o(t){return t.dim+t.index}function r(t,e){var i={};s.each(t,function(t,e){var r=t.getData(),a=t.coordinateSystem,s=a.getBaseAxis(),l=s.getExtent(),h="category"===s.type?s.getBandWidth():Math.abs(l[1]-l[0])/r.count(),c=i[o(s)]||{bandWidth:h,remainedWidth:h,autoWidthCount:0,categoryGap:"20%",gap:"30%",stacks:{}},d=c.stacks;i[o(s)]=c;var f=n(t);d[f]||c.autoWidthCount++,d[f]=d[f]||{width:0,maxWidth:0};var p=u(t.get("barWidth"),h),g=u(t.get("barMaxWidth"),h),m=t.get("barGap"),v=t.get("barCategoryGap");p&&!d[f].width&&(p=Math.min(c.remainedWidth,p),d[f].width=p,c.remainedWidth-=p),g&&(d[f].maxWidth=g),null!=m&&(c.gap=m),null!=v&&(c.categoryGap=v)});var r={};return s.each(i,function(t,e){r[e]={};var i=t.stacks,n=t.bandWidth,o=u(t.categoryGap,n),a=u(t.gap,1),l=t.remainedWidth,h=t.autoWidthCount,c=(l-o)/(h+(h-1)*a);c=Math.max(c,0),s.each(i,function(t,e){var i=t.maxWidth;!t.width&&i&&i<c&&(i=Math.min(i,l),l-=i,t.width=i,h--)}),c=(l-o)/(h+(h-1)*a),c=Math.max(c,0);var d,f=0;s.each(i,function(t,e){t.width||(t.width=c),d=t,f+=t.width*(1+a)}),d&&(f-=d.width*a);var p=-f/2;s.each(i,function(t,i){r[e][i]=r[e][i]||{offset:p,width:t.width},p+=t.width*(1+a)})}),r}function a(t,e,i){var a=r(s.filter(e.getSeriesByType(t),function(t){return!e.isSeriesFiltered(t)&&t.coordinateSystem&&"cartesian2d"===t.coordinateSystem.type})),l={},u={};e.eachSeriesByType(t,function(t){var e=t.getData(),i=t.coordinateSystem,r=i.getBaseAxis(),s=n(t),h=a[o(r)][s],c=h.offset,d=h.width,f=i.getOtherAxis(r),p=t.get("barMinHeight")||0,g=r.onZero?f.toGlobalCoord(f.dataToCoord(0)):f.getGlobalExtent()[0],m=i.dataToPoints(e,!0);l[s]=l[s]||[],u[s]=u[s]||[],e.setLayout({offset:c,size:d}),e.each(f.dim,function(t,i){if(!isNaN(t)){l[s][i]||(l[s][i]={p:g,n:g},u[s][i]={p:g,n:g});var n,o,r,a,h=t>=0?"p":"n",v=m[i],y=l[s][i][h],x=u[s][i][h];f.isHorizontal()?(n=y,o=v[1]+c,r=v[0]-x,a=d,u[s][i][h]+=r,Math.abs(r)<p&&(r=(r<0?-1:1)*p),l[s][i][h]+=r):(n=v[0]+c,o=y,r=d,a=v[1]-x,u[s][i][h]+=a,Math.abs(a)<p&&(a=(a<=0?-1:1)*p),l[s][i][h]+=a),e.setItemLayout(i,{x:n,y:o,width:r,height:a})}},!0)},this)}var s=i(1),l=i(4),u=l.parsePercent;t.exports=a},function(t,e,i){var n=i(3),o=i(1),r=Math.PI;t.exports=function(t,e){e=e||{},o.defaults(e,{text:"loading",color:"#c23531",textColor:"#000",maskColor:"rgba(255, 255, 255, 0.8)",zlevel:0});var i=new n.Rect({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4}),a=new n.Arc({shape:{startAngle:-r/2,endAngle:-r/2+.1,r:10},style:{stroke:e.color,lineCap:"round",lineWidth:5},zlevel:e.zlevel,z:10001}),s=new n.Rect({style:{fill:"none",text:e.text,textPosition:"right",textDistance:10,textFill:e.textColor},zlevel:e.zlevel,z:10001});a.animateShape(!0).when(1e3,{endAngle:3*r/2}).start("circularInOut"),a.animateShape(!0).when(1e3,{startAngle:3*r/2}).delay(300).start("circularInOut");var l=new n.Group;return l.add(a),l.add(s),l.add(i),l.resize=function(){var e=t.getWidth()/2,n=t.getHeight()/2;a.setShape({cx:e,cy:n});var o=a.shape.r;s.setShape({x:e-o,y:n-o,width:2*o,height:2*o}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},l.resize(),l}},function(t,e,i){function n(t,e){c.each(e,function(e,i){_.hasClass(i)||("object"==typeof e?t[i]=t[i]?c.merge(t[i],e,!1):c.clone(e):null==t[i]&&(t[i]=e))})}function o(t){t=t,this.option={},this.option[w]=1,this._componentsMap={},this._seriesIndices=null,n(t,this._theme.option),c.merge(t,b,!1),this.mergeOption(t)}function r(t,e){c.isArray(e)||(e=e?[e]:[]);var i={};return p(e,function(e){i[e]=(t[e]||[]).slice()}),i}function a(t,e){var i={};p(e,function(t,e){var n=t.exist;n&&(i[n.id]=t)}),p(e,function(e,n){var o=e.option;if(c.assert(!o||null==o.id||!i[o.id]||i[o.id]===e,"id duplicates: "+(o&&o.id)),o&&null!=o.id&&(i[o.id]=e),x(o)){var r=s(t,o,e.exist);e.keyInfo={mainType:t,subType:r}}}),p(e,function(t,e){var n=t.exist,o=t.option,r=t.keyInfo; +if(x(o)){if(r.name=null!=o.name?o.name+"":n?n.name:"\0-",n)r.id=n.id;else if(null!=o.id)r.id=o.id+"";else{var a=0;do r.id="\0"+r.name+"\0"+a++;while(i[r.id])}i[r.id]=t}})}function s(t,e,i){var n=e.type?e.type:i?i.subType:_.determineSubType(t,e);return n}function l(t){return m(t,function(t){return t.componentIndex})||[]}function u(t,e){return e.hasOwnProperty("subType")?g(t,function(t){return t.subType===e.subType}):t}function h(t){}var c=i(1),d=i(7),f=i(10),p=c.each,g=c.filter,m=c.map,v=c.isArray,y=c.indexOf,x=c.isObject,_=i(12),b=i(126),w="\0_ec_inner",S=f.extend({constructor:S,init:function(t,e,i,n){i=i||{},this.option=null,this._theme=new f(i),this._optionManager=n},setOption:function(t,e){c.assert(!(w in t),"please use chart.getOption()"),this._optionManager.setOption(t,e),this.resetOption()},resetOption:function(t){var e=!1,i=this._optionManager;if(!t||"recreate"===t){var n=i.mountOption("recreate"===t);this.option&&"recreate"!==t?(this.restoreData(),this.mergeOption(n)):o.call(this,n),e=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var r=i.getTimelineOption(this);r&&(this.mergeOption(r),e=!0)}if(!t||"recreate"===t||"media"===t){var a=i.getMediaOption(this,this._api);a.length&&p(a,function(t){this.mergeOption(t,e=!0)},this)}return e},mergeOption:function(t){function e(e,o){var s=d.normalizeToArray(t[e]),u=d.mappingToExists(n[e],s);a(e,u);var h=r(n,o);i[e]=[],n[e]=[],p(u,function(t,o){var r=t.exist,a=t.option;if(c.assert(x(a)||r,"Empty component definition"),a){var s=_.getClass(e,t.keyInfo.subType,!0);if(r&&r instanceof s)r.name=t.keyInfo.name,r.mergeOption(a,this),r.optionUpdated(a,!1);else{var l=c.extend({dependentModels:h,componentIndex:o},t.keyInfo);r=new s(a,this,this,l),c.extend(r,l),r.init(a,this,this,l),r.optionUpdated(null,!0)}}else r.mergeOption({},this),r.optionUpdated({},!1);n[e][o]=r,i[e][o]=r.option},this),"series"===e&&(this._seriesIndices=l(n.series))}var i=this.option,n=this._componentsMap,o=[];p(t,function(t,e){null!=t&&(_.hasClass(e)?o.push(e):i[e]=null==i[e]?c.clone(t):c.merge(i[e],t,!0))}),_.topologicalTravel(o,_.getAllClassMainTypes(),e,this),this._seriesIndices=this._seriesIndices||[]},getOption:function(){var t=c.clone(this.option);return p(t,function(e,i){if(_.hasClass(i)){for(var e=d.normalizeToArray(e),n=e.length-1;n>=0;n--)d.isIdInner(e[n])&&e.splice(n,1);t[i]=e}}),delete t[w],t},getTheme:function(){return this._theme},getComponent:function(t,e){var i=this._componentsMap[t];if(i)return i[e||0]},queryComponents:function(t){var e=t.mainType;if(!e)return[];var i=t.index,n=t.id,o=t.name,r=this._componentsMap[e];if(!r||!r.length)return[];var a;if(null!=i)v(i)||(i=[i]),a=g(m(i,function(t){return r[t]}),function(t){return!!t});else if(null!=n){var s=v(n);a=g(r,function(t){return s&&y(n,t.id)>=0||!s&&t.id===n})}else if(null!=o){var l=v(o);a=g(r,function(t){return l&&y(o,t.name)>=0||!l&&t.name===o})}else a=r;return u(a,t)},findComponents:function(t){function e(t){var e=o+"Index",i=o+"Id",n=o+"Name";return t&&(t.hasOwnProperty(e)||t.hasOwnProperty(i)||t.hasOwnProperty(n))?{mainType:o,index:t[e],id:t[i],name:t[n]}:null}function i(e){return t.filter?g(e,t.filter):e}var n=t.query,o=t.mainType,r=e(n),a=r?this.queryComponents(r):this._componentsMap[o];return i(u(a,t))},eachComponent:function(t,e,i){var n=this._componentsMap;if("function"==typeof t)i=e,e=t,p(n,function(t,n){p(t,function(t,o){e.call(i,n,t,o)})});else if(c.isString(t))p(n[t],e,i);else if(x(t)){var o=this.findComponents(t);p(o,e,i)}},getSeriesByName:function(t){var e=this._componentsMap.series;return g(e,function(e){return e.name===t})},getSeriesByIndex:function(t){return this._componentsMap.series[t]},getSeriesByType:function(t){var e=this._componentsMap.series;return g(e,function(e){return e.subType===t})},getSeries:function(){return this._componentsMap.series.slice()},eachSeries:function(t,e){h(this),p(this._seriesIndices,function(i){var n=this._componentsMap.series[i];t.call(e,n,i)},this)},eachRawSeries:function(t,e){p(this._componentsMap.series,t,e)},eachSeriesByType:function(t,e,i){h(this),p(this._seriesIndices,function(n){var o=this._componentsMap.series[n];o.subType===t&&e.call(i,o,n)},this)},eachRawSeriesByType:function(t,e,i){return p(this.getSeriesByType(t),e,i)},isSeriesFiltered:function(t){return h(this),c.indexOf(this._seriesIndices,t.componentIndex)<0},filterSeries:function(t,e){h(this);var i=g(this._componentsMap.series,t,e);this._seriesIndices=l(i)},restoreData:function(){var t=this._componentsMap;this._seriesIndices=l(t.series);var e=[];p(t,function(t,i){e.push(i)}),_.topologicalTravel(e,_.getAllClassMainTypes(),function(e,i){p(t[e],function(t){t.restoreData()})})}});c.mixin(S,i(56)),t.exports=S},function(t,e,i){function n(t){this._api=t,this._timelineOptions=[],this._mediaList=[],this._mediaDefault,this._currentMediaIndices=[],this._optionBackup,this._newBaseOption}function o(t,e,i){var n,o,r=[],a=[],s=t.timeline;if(t.baseOption&&(o=t.baseOption),(s||t.options)&&(o=o||{},r=(t.options||[]).slice()),t.media){o=o||{};var l=t.media;d(l,function(t){t&&t.option&&(t.query?a.push(t):n||(n=t))})}return o||(o=t),o.timeline||(o.timeline=s),d([o].concat(r).concat(u.map(a,function(t){return t.option})),function(t){d(e,function(e){e(t,i)})}),{baseOption:o,timelineOptions:r,mediaDefault:n,mediaList:a}}function r(t,e,i){var n={width:e,height:i,aspectratio:e/i},o=!0;return u.each(t,function(t,e){var i=e.match(m);if(i&&i[1]&&i[2]){var r=i[1],s=i[2].toLowerCase();a(n[s],t,r)||(o=!1)}}),o}function a(t,e,i){return"min"===i?t>=e:"max"===i?t<=e:t===e}function s(t,e){return t.join(",")===e.join(",")}function l(t,e){e=e||{},d(e,function(e,i){if(null!=e){var n=t[i];if(c.hasClass(i)){e=h.normalizeToArray(e),n=h.normalizeToArray(n);var o=h.mappingToExists(n,e);t[i]=p(o,function(t){return t.option&&t.exist?g(t.exist,t.option,!0):t.exist||t.option})}else t[i]=g(n,e,!0)}})}var u=i(1),h=i(7),c=i(12),d=u.each,f=u.clone,p=u.map,g=u.merge,m=/^(min|max)?(.+)$/;n.prototype={constructor:n,setOption:function(t,e){t=f(t,!0);var i=this._optionBackup,n=o.call(this,t,e,!i);this._newBaseOption=n.baseOption,i?(l(i.baseOption,n.baseOption),n.timelineOptions.length&&(i.timelineOptions=n.timelineOptions),n.mediaList.length&&(i.mediaList=n.mediaList),n.mediaDefault&&(i.mediaDefault=n.mediaDefault)):this._optionBackup=n},mountOption:function(t){var e=this._optionBackup;return this._timelineOptions=p(e.timelineOptions,f),this._mediaList=p(e.mediaList,f),this._mediaDefault=f(e.mediaDefault),this._currentMediaIndices=[],f(t?e.baseOption:this._newBaseOption)},getTimelineOption:function(t){var e,i=this._timelineOptions;if(i.length){var n=t.getComponent("timeline");n&&(e=f(i[n.getCurrentIndex()],!0))}return e},getMediaOption:function(t){var e=this._api.getWidth(),i=this._api.getHeight(),n=this._mediaList,o=this._mediaDefault,a=[],l=[];if(!n.length&&!o)return l;for(var u=0,h=n.length;u<h;u++)r(n[u].query,e,i)&&a.push(u);return!a.length&&o&&(a=[-1]),a.length&&!s(a,this._currentMediaIndices)&&(l=p(a,function(t){return f(t===-1?o.option:n[t].option)})),this._currentMediaIndices=a,l}},t.exports=n},function(t,e){var i="";"undefined"!=typeof navigator&&(i=navigator.platform||""),t.exports={color:["#c23531","#2f4554","#61a0a8","#d48265","#91c7ae","#749f83","#ca8622","#bda29a","#6e7074","#546570","#c4ccd3"],textStyle:{fontFamily:i.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,animation:!0,animationDuration:1e3,animationDurationUpdate:300,animationEasing:"exponentialOut",animationEasingUpdate:"cubicOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3}},function(t,e,i){t.exports={getAreaStyle:i(30)([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]])}},function(t,e){t.exports={getBoxLayoutParams:function(){return{left:this.get("left"),top:this.get("top"),right:this.get("right"),bottom:this.get("bottom"),width:this.get("width"),height:this.get("height")}}}},function(t,e,i){var n=i(30)([["fill","color"],["stroke","borderColor"],["lineWidth","borderWidth"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"],["textPosition"],["textAlign"]]);t.exports={getItemStyle:function(t){var e=n.call(this,t),i=this.getBorderLineDash();return i&&(e.lineDash=i),e},getBorderLineDash:function(){var t=this.get("borderType");return"solid"===t||null==t?null:"dashed"===t?[5,5]:[1,1]}}},function(t,e,i){var n=i(30)([["lineWidth","width"],["stroke","color"],["opacity"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["shadowColor"]]);t.exports={getLineStyle:function(t){var e=n.call(this,t),i=this.getLineDash(e.lineWidth);return i&&(e.lineDash=i),e},getLineDash:function(t){null==t&&(t=1);var e=this.get("type"),i=Math.max(t,2),n=4*t;return"solid"===e||null==e?null:"dashed"===e?[n,n]:[i,i]}}},function(t,e,i){function n(t,e){return t&&t.getShallow(e)}var o=i(16);t.exports={getTextColor:function(){var t=this.ecModel;return this.getShallow("color")||t&&t.get("textStyle.color")},getFont:function(){var t=this.ecModel,e=t&&t.getModel("textStyle");return[this.getShallow("fontStyle")||n(e,"fontStyle"),this.getShallow("fontWeight")||n(e,"fontWeight"),(this.getShallow("fontSize")||n(e,"fontSize")||12)+"px",this.getShallow("fontFamily")||n(e,"fontFamily")||"sans-serif"].join(" ")},getTextRect:function(t){var e=this.get("textStyle")||{};return o.getBoundingRect(t,this.getFont(),e.align,e.baseline)},truncateText:function(t,e,i,n){return o.truncateText(t,e,this.getFont(),i,n)}}},function(t,e,i){function n(t,e){e=e.split(",");for(var i=t,n=0;n<e.length&&(i=i&&i[e[n]],null!=i);n++);return i}function o(t,e,i,n){e=e.split(",");for(var o,r=t,a=0;a<e.length-1;a++)o=e[a],null==r[o]&&(r[o]={}),r=r[o];(n||null==r[e[a]])&&(r[e[a]]=i)}function r(t){c(l,function(e){e[0]in t&&!(e[1]in t)&&(t[e[1]]=t[e[0]])})}var a=i(1),s=i(133),l=[["x","left"],["y","top"],["x2","right"],["y2","bottom"]],u=["grid","geo","parallel","legend","toolbox","title","visualMap","dataZoom","timeline"],h=["bar","boxplot","candlestick","chord","effectScatter","funnel","gauge","lines","graph","heatmap","line","map","parallel","pie","radar","sankey","scatter","treemap"],c=a.each;t.exports=function(t){c(t.series,function(t){if(a.isObject(t)){var e=t.type;if(s(t),"pie"!==e&&"gauge"!==e||null!=t.clockWise&&(t.clockwise=t.clockWise),"gauge"===e){var i=n(t,"pointer.color");null!=i&&o(t,"itemStyle.normal.color",i)}for(var l=0;l<h.length;l++)if(h[l]===t.type){r(t);break}}}),t.dataRange&&(t.visualMap=t.dataRange),c(u,function(e){var i=t[e];i&&(a.isArray(i)||(i=[i]),c(i,function(t){r(t)}))})}},function(t,e,i){function n(t){var e=t&&t.itemStyle;e&&o.each(r,function(i){var n=e.normal,r=e.emphasis;n&&n[i]&&(t[i]=t[i]||{},t[i].normal?o.merge(t[i].normal,n[i]):t[i].normal=n[i],n[i]=null),r&&r[i]&&(t[i]=t[i]||{},t[i].emphasis?o.merge(t[i].emphasis,r[i]):t[i].emphasis=r[i],r[i]=null)})}var o=i(1),r=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];t.exports=function(t){if(t){n(t),n(t.markPoint),n(t.markLine);var e=t.data;if(e){for(var i=0;i<e.length;i++)n(e[i]);var r=t.markPoint;if(r&&r.data)for(var a=r.data,i=0;i<a.length;i++)n(a[i]);var s=t.markLine;if(s&&s.data)for(var l=s.data,i=0;i<l.length;i++)o.isArray(l[i])?(n(l[i][0]),n(l[i][1])):n(l[i])}}}},function(t,e){var i={average:function(t){for(var e=0,i=0,n=0;n<t.length;n++)isNaN(t[n])||(e+=t[n],i++);return 0===i?NaN:e/i},sum:function(t){for(var e=0,i=0;i<t.length;i++)e+=t[i]||0;return e},max:function(t){for(var e=-(1/0),i=0;i<t.length;i++)t[i]>e&&(e=t[i]);return e},min:function(t){for(var e=1/0,i=0;i<t.length;i++)t[i]<e&&(e=t[i]);return e},nearest:function(t){return t[0]}},n=function(t,e){return Math.round(t.length/2)};t.exports=function(t,e,o){e.eachSeriesByType(t,function(t){var e=t.getData(),o=t.get("sampling"),r=t.coordinateSystem;if("cartesian2d"===r.type&&o){var a=r.getBaseAxis(),s=r.getOtherAxis(a),l=a.getExtent(),u=l[1]-l[0],h=Math.round(e.count()/u);if(h>1){var c;"string"==typeof o?c=i[o]:"function"==typeof o&&(c=o),c&&(e=e.downSample(s.dim,1/h,c,n),t.setData(e))}}},this)}},function(t,e,i){function n(t,e){return c(t,h(e))}var o=i(1),r=i(31),a=i(4),s=i(38),l=r.prototype,u=s.prototype,h=a.getPrecisionSafe,c=a.round,d=Math.floor,f=Math.ceil,p=Math.pow,g=Math.log,m=r.extend({type:"log",base:10,$constructor:function(){r.apply(this,arguments),this._originalScale=new s},getTicks:function(){var t=this._originalScale,e=this._extent,i=t.getExtent();return o.map(u.getTicks.call(this),function(o){var r=a.round(p(this.base,o));return r=o===e[0]&&t.__fixMin?n(r,i[0]):r,r=o===e[1]&&t.__fixMax?n(r,i[1]):r},this)},getLabel:u.getLabel,scale:function(t){return t=l.scale.call(this,t),p(this.base,t)},setExtent:function(t,e){var i=this.base;t=g(t)/g(i),e=g(e)/g(i),u.setExtent.call(this,t,e)},getExtent:function(){var t=this.base,e=l.getExtent.call(this);e[0]=p(t,e[0]),e[1]=p(t,e[1]);var i=this._originalScale,o=i.getExtent();return i.__fixMin&&(e[0]=n(e[0],o[0])),i.__fixMax&&(e[1]=n(e[1],o[1])),e},unionExtent:function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=g(t[0])/g(e),t[1]=g(t[1])/g(e),l.unionExtent.call(this,t)},niceTicks:function(t){t=t||10;var e=this._extent,i=e[1]-e[0];if(!(i===1/0||i<=0)){var n=a.quantity(i),o=t/i*n;for(o<=.5&&(n*=10);!isNaN(n)&&Math.abs(n)<1&&Math.abs(n)>0;)n*=10;var r=[a.round(f(e[0]/n)*n),a.round(d(e[1]/n)*n)];this._interval=n,this._niceExtent=r}},niceExtent:function(t,e,i){u.niceExtent.call(this,t,e,i);var n=this._originalScale;n.__fixMin=e,n.__fixMax=i}});o.each(["contain","normalize"],function(t){m.prototype[t]=function(e){return e=g(e)/g(this.base),l[t].call(this,e)}}),m.create=function(){return new m},t.exports=m},function(t,e,i){var n=i(1),o=i(31),r=o.prototype,a=o.extend({type:"ordinal",init:function(t,e){this._data=t,this._extent=e||[0,t.length-1]},parse:function(t){return"string"==typeof t?n.indexOf(this._data,t):Math.round(t)},contain:function(t){return t=this.parse(t),r.contain.call(this,t)&&null!=this._data[t]},normalize:function(t){return r.normalize.call(this,this.parse(t))},scale:function(t){return Math.round(r.scale.call(this,t))},getTicks:function(){for(var t=[],e=this._extent,i=e[0];i<=e[1];)t.push(i),i++;return t},getLabel:function(t){return this._data[t]},count:function(){return this._extent[1]-this._extent[0]+1},niceTicks:n.noop,niceExtent:n.noop});a.create=function(){return new a},t.exports=a},function(t,e,i){var n=i(1),o=i(4),r=i(9),a=i(38),s=a.prototype,l=Math.ceil,u=Math.floor,h=1e3,c=60*h,d=60*c,f=24*d,p=function(t,e,i,n){for(;i<n;){var o=i+n>>>1;t[o][2]<e?i=o+1:n=o}return i},g=a.extend({type:"time",getLabel:function(t){var e=this._stepLvl,i=new Date(t);return r.formatTime(e[0],i)},niceExtent:function(t,e,i){var n=this._extent;if(n[0]===n[1]&&(n[0]-=f,n[1]+=f),n[1]===-(1/0)&&n[0]===1/0){var r=new Date;n[1]=new Date(r.getFullYear(),r.getMonth(),r.getDate()),n[0]=n[1]-f}this.niceTicks(t);var a=this._interval;e||(n[0]=o.round(u(n[0]/a)*a)),i||(n[1]=o.round(l(n[1]/a)*a))},niceTicks:function(t){t=t||10;var e=this._extent,i=e[1]-e[0],n=i/t,r=m.length,a=p(m,n,0,r),s=m[Math.min(a,r-1)],h=s[2];if("year"===s[0]){var c=i/h,d=o.nice(c/t,!0);h*=d}var f=[l(e[0]/h)*h,u(e[1]/h)*h];this._stepLvl=s,this._interval=h,this._niceExtent=f},parse:function(t){return+o.parseDate(t)}});n.each(["contain","normalize"],function(t){g.prototype[t]=function(e){return s[t].call(this,this.parse(e))}});var m=[["hh:mm:ss",1,h],["hh:mm:ss",5,5*h],["hh:mm:ss",10,10*h],["hh:mm:ss",15,15*h],["hh:mm:ss",30,30*h],["hh:mm\nMM-dd",1,c],["hh:mm\nMM-dd",5,5*c],["hh:mm\nMM-dd",10,10*c],["hh:mm\nMM-dd",15,15*c],["hh:mm\nMM-dd",30,30*c],["hh:mm\nMM-dd",1,d],["hh:mm\nMM-dd",2,2*d],["hh:mm\nMM-dd",6,6*d],["hh:mm\nMM-dd",12,12*d],["MM-dd\nyyyy",1,f],["week",7,7*f],["month",1,31*f],["quarter",3,380*f/4],["half-year",6,380*f/2],["year",1,380*f]];g.create=function(){return new g},t.exports=g},function(t,e,i){var n=i(37);t.exports=function(t){function e(e){var i=(e.visualColorAccessPath||"itemStyle.normal.color").split("."),o=e.getData(),r=e.get(i)||e.getColorFromPalette(e.get("name"));o.setVisual("color",r),t.isSeriesFiltered(e)||("function"!=typeof r||r instanceof n||o.each(function(t){o.setItemVisual(t,"color",r(e.getDataParams(t)))}),o.each(function(t){var e=o.getItemModel(t),n=e.get(i,!0);null!=n&&o.setItemVisual(t,"color",n)}))}t.eachRawSeries(e)}},function(t,e,i){"use strict";function n(t,e,i){return{type:t,event:i,target:e,cancelBubble:!1,offsetX:i.zrX,offsetY:i.zrY,gestureEvent:i.gestureEvent,pinchX:i.pinchX,pinchY:i.pinchY,pinchScale:i.pinchScale,wheelDelta:i.zrDelta}}function o(){}function r(t,e,i){if(t[t.rectHover?"rectContain":"contain"](e,i)){for(var n=t;n;){if(n.silent||n.clipPath&&!n.clipPath.contain(e,i))return!1;n=n.parent}return!0}return!1}var a=i(1),s=i(167),l=i(20);o.prototype.dispose=function(){};var u=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],h=function(t,e,i,n){l.call(this),this.storage=t,this.painter=e,this.painterRoot=n,i=i||new o,this.proxy=i,i.handler=this,this._hovered,this._lastTouchMoment,this._lastX,this._lastY,s.call(this),a.each(u,function(t){i.on&&i.on(t,this[t],this)},this)};h.prototype={constructor:h,mousemove:function(t){var e=t.zrX,i=t.zrY,n=this.findHover(e,i,null),o=this._hovered,r=this.proxy;this._hovered=n,r.setCursor&&r.setCursor(n?n.cursor:"default"),o&&n!==o&&o.__zr&&this.dispatchToElement(o,"mouseout",t),this.dispatchToElement(n,"mousemove",t),n&&n!==o&&this.dispatchToElement(n,"mouseover",t)},mouseout:function(t){this.dispatchToElement(this._hovered,"mouseout",t);var e,i=t.toElement||t.relatedTarget;do i=i&&i.parentNode;while(i&&9!=i.nodeType&&!(e=i===this.painterRoot));!e&&this.trigger("globalout",{event:t})},resize:function(t){this._hovered=null},dispatch:function(t,e){var i=this[t];i&&i.call(this,e)},dispose:function(){this.proxy.dispose(),this.storage=this.proxy=this.painter=null},setCursorStyle:function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},dispatchToElement:function(t,e,i){for(var o="on"+e,r=n(e,t,i),a=t;a&&(a[o]&&(r.cancelBubble=a[o].call(a,r)),a.trigger(e,r),a=a.parent,!r.cancelBubble););r.cancelBubble||(this.trigger(e,r),this.painter&&this.painter.eachOtherLayer(function(t){"function"==typeof t[o]&&t[o].call(t,r),t.trigger&&t.trigger(e,r)}))},findHover:function(t,e,i){for(var n=this.storage.getDisplayList(),o=n.length-1;o>=0;o--)if(!n[o].silent&&n[o]!==i&&!n[o].ignore&&r(n[o],t,e))return n[o]}},a.each(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){h.prototype[t]=function(e){var i=this.findHover(e.zrX,e.zrY,null);if("mousedown"===t)this._downel=i,this._upel=i;else if("mosueup"===t)this._upel=i;else if("click"===t&&this._downel!==this._upel)return;this.dispatchToElement(i,t,e)}}),a.mixin(h,l),a.mixin(h,s),t.exports=h},function(t,e,i){function n(){return!1}function o(t,e,i,n){var o=document.createElement(e),r=i.getWidth(),a=i.getHeight(),s=o.style;return s.position="absolute",s.left=0,s.top=0,s.width=r+"px",s.height=a+"px",o.width=r*n,o.height=a*n,o.setAttribute("data-zr-dom-id",t),o}var r=i(1),a=i(32),s=i(64),l=i(63),u=function(t,e,i){var s;i=i||a.devicePixelRatio,"string"==typeof t?s=o(t,"canvas",e,i):r.isObject(t)&&(s=t,t=s.id),this.id=t,this.dom=s;var l=s.style;l&&(s.onselectstart=n,l["-webkit-user-select"]="none",l["user-select"]="none",l["-webkit-touch-callout"]="none",l["-webkit-tap-highlight-color"]="rgba(0,0,0,0)",l.padding=0,l.margin=0,l["border-width"]=0),this.domBack=null,this.ctxBack=null,this.painter=e,this.config=null,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.dpr=i};u.prototype={constructor:u,elCount:0,__dirty:!0,initContext:function(){this.ctx=this.dom.getContext("2d"),this.ctx.dpr=this.dpr},createBackBuffer:function(){var t=this.dpr;this.domBack=o("back-"+this.id,"canvas",this.painter,t),this.ctxBack=this.domBack.getContext("2d"),1!=t&&this.ctxBack.scale(t,t)},resize:function(t,e){var i=this.dpr,n=this.dom,o=n.style,r=this.domBack;o.width=t+"px",o.height=e+"px",n.width=t*i,n.height=e*i,r&&(r.width=t*i,r.height=e*i,1!=i&&this.ctxBack.scale(i,i))},clear:function(t){var e=this.dom,i=this.ctx,n=e.width,o=e.height,r=this.clearColor,a=this.motionBlur&&!t,u=this.lastFrameAlpha,h=this.dpr;if(a&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation="copy",this.ctxBack.drawImage(e,0,0,n/h,o/h)),i.clearRect(0,0,n,o),r){var c;r.colorStops?(c=r.__canvasGradient||s.getGradient(i,r,{x:0,y:0,width:n,height:o}),r.__canvasGradient=c):r.image&&(c=l.prototype.getCanvasPattern.call(r,i)),i.save(),i.fillStyle=c||r,i.fillRect(0,0,n,o),i.restore()}if(a){var d=this.domBack;i.save(),i.globalAlpha=u,i.drawImage(d,0,0,n,o),i.restore()}}},t.exports=u},function(t,e,i){"use strict";function n(t){return parseInt(t,10)}function o(t){return!!t&&(!!t.isBuildin||"function"==typeof t.resize&&"function"==typeof t.refresh)}function r(t){t.__unusedCount++}function a(t){1==t.__unusedCount&&t.clear()}function s(t,e,i){return x.copy(t.getBoundingRect()),t.transform&&x.applyTransform(t.transform),_.width=e,_.height=i,!x.intersect(_)}function l(t,e){if(t==e)return!1;if(!t||!e||t.length!==e.length)return!0;for(var i=0;i<t.length;i++)if(t[i]!==e[i])return!0}function u(t,e){for(var i=0;i<t.length;i++){var n=t[i],o=n.path;n.setTransform(e),o.beginPath(e),n.buildPath(o,n.shape),e.clip(),n.restoreTransform(e)}}function h(t,e){var i=document.createElement("div");return i.style.cssText=["position:relative","overflow:hidden","width:"+t+"px","height:"+e+"px","padding:0","margin:0","border-width:0"].join(";")+";",i}var c=i(32),d=i(1),f=i(47),p=i(8),g=i(44),m=i(140),v=i(60),y=5,x=new p(0,0,0,0),_=new p(0,0,0,0),b=function(t,e,i){var n=!t.nodeName||"CANVAS"===t.nodeName.toUpperCase();this._opts=i=d.extend({},i||{}),this.dpr=i.devicePixelRatio||c.devicePixelRatio,this._singleCanvas=n,this.root=t;var o=t.style;o&&(o["-webkit-tap-highlight-color"]="transparent",o["-webkit-user-select"]=o["user-select"]=o["-webkit-touch-callout"]="none",t.innerHTML=""),this.storage=e;var r=this._zlevelList=[],a=this._layers={};if(this._layerConfig={},n){var s=t.width,l=t.height;this._width=s,this._height=l;var u=new m(t,this,1);u.initContext(),a[0]=u,r.push(0)}else{this._width=this._getSize(0),this._height=this._getSize(1);var f=this._domRoot=h(this._width,this._height);t.appendChild(f)}this.pathToImage=this._createPathToImage(),this._progressiveLayers=[],this._hoverlayer,this._hoverElements=[]};b.prototype={constructor:b,isSingleCanvas:function(){return this._singleCanvas},getViewportRoot:function(){return this._singleCanvas?this._layers[0].dom:this._domRoot},refresh:function(t){var e=this.storage.getDisplayList(!0),i=this._zlevelList;this._paintList(e,t);for(var n=0;n<i.length;n++){var o=i[n],r=this._layers[o];!r.isBuildin&&r.refresh&&r.refresh()}return this.refreshHover(),this._progressiveLayers.length&&this._startProgessive(),this},addHover:function(t,e){if(!t.__hoverMir){var i=new t.constructor({style:t.style,shape:t.shape});i.__from=t,t.__hoverMir=i,i.setStyle(e),this._hoverElements.push(i)}},removeHover:function(t){var e=t.__hoverMir,i=this._hoverElements,n=d.indexOf(i,e);n>=0&&i.splice(n,1),t.__hoverMir=null},clearHover:function(t){for(var e=this._hoverElements,i=0;i<e.length;i++){var n=e[i].__from;n&&(n.__hoverMir=null)}e.length=0},refreshHover:function(){var t=this._hoverElements,e=t.length,i=this._hoverlayer;if(i&&i.clear(),e){g(t,this.storage.displayableSortFunc),i||(i=this._hoverlayer=this.getLayer(1e5));var n={};i.ctx.save();for(var o=0;o<e;){var r=t[o],a=r.__from;a&&a.__zr?(o++,a.invisible||(r.transform=a.transform,r.invTransform=a.invTransform,r.__clipPaths=a.__clipPaths,this._doPaintEl(r,i,!0,n))):(t.splice(o,1),a.__hoverMir=null,e--)}i.ctx.restore()}},_startProgessive:function(){function t(){i===e._progressiveToken&&e.storage&&(e._doPaintList(e.storage.getDisplayList()),e._furtherProgressive?(e._progress++,v(t)):e._progressiveToken=-1)}var e=this;if(e._furtherProgressive){var i=e._progressiveToken=+new Date;e._progress++,v(t)}},_clearProgressive:function(){this._progressiveToken=-1,this._progress=0,d.each(this._progressiveLayers,function(t){t.__dirty&&t.clear()})},_paintList:function(t,e){null==e&&(e=!1),this._updateLayerStatus(t),this._clearProgressive(),this.eachBuildinLayer(r),this._doPaintList(t,e),this.eachBuildinLayer(a)},_doPaintList:function(t,e){function i(t){var e=r.dpr||1;r.save(),r.globalAlpha=1,r.shadowBlur=0,n.__dirty=!0,r.setTransform(1,0,0,1,0,0),r.drawImage(t.dom,0,0,h*e,c*e),r.restore()}for(var n,o,r,a,s,l,u=0,h=this._width,c=this._height,p=this._progress,g=0,m=t.length;g<m;g++){var v=t[g],x=this._singleCanvas?0:v.zlevel,_=v.__frame;if(_<0&&s&&(i(s),s=null),o!==x&&(r&&r.restore(),a={},o=x,n=this.getLayer(o),n.isBuildin||f("ZLevel "+o+" has been used by unkown layer "+n.id),r=n.ctx,r.save(),n.__unusedCount=0,(n.__dirty||e)&&n.clear()),n.__dirty||e){if(_>=0){if(!s){if(s=this._progressiveLayers[Math.min(u++,y-1)],s.ctx.save(),s.renderScope={},s&&s.__progress>s.__maxProgress){g=s.__nextIdxNotProg-1;continue}l=s.__progress,s.__dirty||(p=l),s.__progress=p+1}_===p&&this._doPaintEl(v,s,!0,s.renderScope)}else this._doPaintEl(v,n,e,a);v.__dirty=!1}}s&&i(s),r&&r.restore(),this._furtherProgressive=!1,d.each(this._progressiveLayers,function(t){t.__maxProgress>=t.__progress&&(this._furtherProgressive=!0)},this)},_doPaintEl:function(t,e,i,n){var o=e.ctx,r=t.transform;if((e.__dirty||i)&&!t.invisible&&0!==t.style.opacity&&(!r||r[0]||r[3])&&(!t.culling||!s(t,this._width,this._height))){var a=t.__clipPaths;(n.prevClipLayer!==e||l(a,n.prevElClipPaths))&&(n.prevElClipPaths&&(n.prevClipLayer.ctx.restore(),n.prevClipLayer=n.prevElClipPaths=null,n.prevEl=null),a&&(o.save(),u(a,o),n.prevClipLayer=e,n.prevElClipPaths=a)),t.beforeBrush&&t.beforeBrush(o),t.brush(o,n.prevEl||null),n.prevEl=t,t.afterBrush&&t.afterBrush(o)}},getLayer:function(t){if(this._singleCanvas)return this._layers[0];var e=this._layers[t];return e||(e=new m("zr_"+t,this,this.dpr),e.isBuildin=!0,this._layerConfig[t]&&d.merge(e,this._layerConfig[t],!0),this.insertLayer(t,e),e.initContext()),e},insertLayer:function(t,e){var i=this._layers,n=this._zlevelList,r=n.length,a=null,s=-1,l=this._domRoot;if(i[t])return void f("ZLevel "+t+" has been used already");if(!o(e))return void f("Layer of zlevel "+t+" is not valid");if(r>0&&t>n[0]){for(s=0;s<r-1&&!(n[s]<t&&n[s+1]>t);s++);a=i[n[s]]}if(n.splice(s+1,0,t),a){var u=a.dom;u.nextSibling?l.insertBefore(e.dom,u.nextSibling):l.appendChild(e.dom)}else l.firstChild?l.insertBefore(e.dom,l.firstChild):l.appendChild(e.dom);i[t]=e},eachLayer:function(t,e){var i,n,o=this._zlevelList;for(n=0;n<o.length;n++)i=o[n],t.call(e,this._layers[i],i)},eachBuildinLayer:function(t,e){var i,n,o,r=this._zlevelList;for(o=0;o<r.length;o++)n=r[o],i=this._layers[n],i.isBuildin&&t.call(e,i,n)},eachOtherLayer:function(t,e){var i,n,o,r=this._zlevelList;for(o=0;o<r.length;o++)n=r[o],i=this._layers[n],i.isBuildin||t.call(e,i,n)},getLayers:function(){return this._layers},_updateLayerStatus:function(t){var e=this._layers,i=this._progressiveLayers,n={},o={};this.eachBuildinLayer(function(t,e){n[e]=t.elCount,t.elCount=0,t.__dirty=!1}),d.each(i,function(t,e){o[e]=t.elCount,t.elCount=0,t.__dirty=!1});for(var r,a,s=0,l=0,u=0,h=t.length;u<h;u++){var c=t[u],f=this._singleCanvas?0:c.zlevel,p=e[f],g=c.progressive;if(p&&(p.elCount++,p.__dirty=p.__dirty||c.__dirty),g>=0){a!==g&&(a=g,l++);var v=c.__frame=l-1;if(!r){var x=Math.min(s,y-1);r=i[x],r||(r=i[x]=new m("progressive",this,this.dpr),r.initContext()),r.__maxProgress=0}r.__dirty=r.__dirty||c.__dirty,r.elCount++,r.__maxProgress=Math.max(r.__maxProgress,v),r.__maxProgress>=r.__progress&&(p.__dirty=!0)}else c.__frame=-1,r&&(r.__nextIdxNotProg=u,s++,r=null)}r&&(s++,r.__nextIdxNotProg=u),this.eachBuildinLayer(function(t,e){n[e]!==t.elCount&&(t.__dirty=!0)}),i.length=Math.min(s,y),d.each(i,function(t,e){o[e]!==t.elCount&&(c.__dirty=!0),t.__dirty&&(t.__progress=0)})},clear:function(){return this.eachBuildinLayer(this._clearLayer),this},_clearLayer:function(t){t.clear()},configLayer:function(t,e){if(e){var i=this._layerConfig;i[t]?d.merge(i[t],e,!0):i[t]=e;var n=this._layers[t];n&&d.merge(n,i[t],!0)}},delLayer:function(t){var e=this._layers,i=this._zlevelList,n=e[t];n&&(n.dom.parentNode.removeChild(n.dom),delete e[t],i.splice(d.indexOf(i,t),1))},resize:function(t,e){var i=this._domRoot;i.style.display="none";var n=this._opts;if(null!=t&&(n.width=t),null!=e&&(n.height=e),t=this._getSize(0),e=this._getSize(1),i.style.display="",this._width!=t||e!=this._height){i.style.width=t+"px",i.style.height=e+"px";for(var o in this._layers)this._layers.hasOwnProperty(o)&&this._layers[o].resize(t,e);d.each(this._progressiveLayers,function(i){i.resize(t,e)}),this.refresh(!0)}return this._width=t,this._height=e,this},clearLayer:function(t){var e=this._layers[t];e&&e.clear()},dispose:function(){this.root.innerHTML="",this.root=this.storage=this._domRoot=this._layers=null},getRenderedCanvas:function(t){if(t=t||{},this._singleCanvas)return this._layers[0].dom;var e=new m("image",this,t.pixelRatio||this.dpr);e.initContext(),e.clearColor=t.backgroundColor,e.clear();for(var i=this.storage.getDisplayList(!0),n={},o=0;o<i.length;o++){var r=i[o];this._doPaintEl(r,e,!0,n)}return e.dom},getWidth:function(){return this._width},getHeight:function(){return this._height},_getSize:function(t){var e=this._opts,i=["width","height"][t],o=["clientWidth","clientHeight"][t],r=["paddingLeft","paddingTop"][t],a=["paddingRight","paddingBottom"][t];if(null!=e[i]&&"auto"!==e[i])return parseFloat(e[i]);var s=this.root,l=document.defaultView.getComputedStyle(s);return(s[o]||n(l[i])||n(s.style[i]))-(n(l[r])||0)-(n(l[a])||0)|0},_pathToImage:function(t,e,n,o,r){var a=document.createElement("canvas"),s=a.getContext("2d");a.width=n*r,a.height=o*r,s.clearRect(0,0,n*r,o*r);var l={position:e.position,rotation:e.rotation,scale:e.scale};e.position=[0,0,0],e.rotation=0,e.scale=[1,1],e&&e.brush(s);var u=i(48),h=new u({id:t,style:{x:0,y:0,image:a}});return null!=l.position&&(h.position=e.position=l.position),null!=l.rotation&&(h.rotation=e.rotation=l.rotation),null!=l.scale&&(h.scale=e.scale=l.scale),h},_createPathToImage:function(){var t=this;return function(e,i,n,o){return t._pathToImage(e,i,n,o,t.dpr)}}},t.exports=b},function(t,e,i){"use strict";function n(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}var o=i(1),r=i(11),a=i(33),s=i(44),l=function(){this._elements={},this._roots=[],this._displayList=[],this._displayListLen=0};l.prototype={constructor:l,traverse:function(t,e){for(var i=0;i<this._roots.length;i++)this._roots[i].traverse(t,e)},getDisplayList:function(t,e){return e=e||!1,t&&this.updateDisplayList(e),this._displayList},updateDisplayList:function(t){this._displayListLen=0;for(var e=this._roots,i=this._displayList,o=0,a=e.length;o<a;o++)this._updateAndAddDisplayable(e[o],null,t);i.length=this._displayListLen,r.canvasSupported&&s(i,n)},_updateAndAddDisplayable:function(t,e,i){if(!t.ignore||i){t.beforeUpdate(),t.__dirty&&t.update(),t.afterUpdate();var n=t.clipPath;if(n&&(n.parent=t,n.updateTransform(),e?(e=e.slice(),e.push(n)):e=[n]),t.isGroup){for(var o=t._children,r=0;r<o.length;r++){var a=o[r];t.__dirty&&(a.__dirty=!0),this._updateAndAddDisplayable(a,e,i)}t.__dirty=!1}else t.__clipPaths=e,this._displayList[this._displayListLen++]=t}},addRoot:function(t){this._elements[t.id]||(t instanceof a&&t.addChildrenToStorage(this),this.addToMap(t),this._roots.push(t))},delRoot:function(t){if(null==t){for(var e=0;e<this._roots.length;e++){var i=this._roots[e];i instanceof a&&i.delChildrenFromStorage(this)}return this._elements={},this._roots=[],this._displayList=[],void(this._displayListLen=0)}if(t instanceof Array)for(var e=0,n=t.length;e<n;e++)this.delRoot(t[e]);else{var r;r="string"==typeof t?this._elements[t]:t;var s=o.indexOf(this._roots,r);s>=0&&(this.delFromMap(r.id),this._roots.splice(s,1),r instanceof a&&r.delChildrenFromStorage(this)); +}},addToMap:function(t){return t instanceof a&&(t.__storage=this),t.dirty(!1),this._elements[t.id]=t,this},get:function(t){return this._elements[t]},delFromMap:function(t){var e=this._elements,i=e[t];return i&&(delete e[t],i instanceof a&&(i.__storage=null)),this},dispose:function(){this._elements=this._renderList=this._roots=null},displayableSortFunc:n},t.exports=l},function(t,e,i){"use strict";var n=i(1),o=i(24).Dispatcher,r=i(60),a=i(59),s=function(t){t=t||{},this.stage=t.stage||{},this.onframe=t.onframe||function(){},this._clips=[],this._running=!1,this._time,this._pausedTime,this._pauseStart,this._paused=!1,o.call(this)};s.prototype={constructor:s,addClip:function(t){this._clips.push(t)},addAnimator:function(t){t.animation=this;for(var e=t.getClips(),i=0;i<e.length;i++)this.addClip(e[i])},removeClip:function(t){var e=n.indexOf(this._clips,t);e>=0&&this._clips.splice(e,1)},removeAnimator:function(t){for(var e=t.getClips(),i=0;i<e.length;i++)this.removeClip(e[i]);t.animation=null},_update:function(){for(var t=(new Date).getTime()-this._pausedTime,e=t-this._time,i=this._clips,n=i.length,o=[],r=[],a=0;a<n;a++){var s=i[a],l=s.step(t);l&&(o.push(l),r.push(s))}for(var a=0;a<n;)i[a]._needsRemove?(i[a]=i[n-1],i.pop(),n--):a++;n=o.length;for(var a=0;a<n;a++)r[a].fire(o[a]);this._time=t,this.onframe(e),this.trigger("frame",e),this.stage.update&&this.stage.update()},_startLoop:function(){function t(){e._running&&(r(t),!e._paused&&e._update())}var e=this;this._running=!0,r(t)},start:function(){this._time=(new Date).getTime(),this._pausedTime=0,this._startLoop()},stop:function(){this._running=!1},pause:function(){this._paused||(this._pauseStart=(new Date).getTime(),this._paused=!0)},resume:function(){this._paused&&(this._pausedTime+=(new Date).getTime()-this._pauseStart,this._paused=!1)},clear:function(){this._clips=[]},animate:function(t,e){e=e||{};var i=new a(t,e.loop,e.getter,e.setter);return i}},n.mixin(s,o),t.exports=s},function(t,e,i){function n(t){this._target=t.target,this._life=t.life||1e3,this._delay=t.delay||0,this._initialized=!1,this.loop=null!=t.loop&&t.loop,this.gap=t.gap||0,this.easing=t.easing||"Linear",this.onframe=t.onframe,this.ondestroy=t.ondestroy,this.onrestart=t.onrestart}var o=i(145);n.prototype={constructor:n,step:function(t){this._initialized||(this._startTime=t+this._delay,this._initialized=!0);var e=(t-this._startTime)/this._life;if(!(e<0)){e=Math.min(e,1);var i=this.easing,n="string"==typeof i?o[i]:i,r="function"==typeof n?n(e):e;return this.fire("frame",r),1==e?this.loop?(this.restart(t),"restart"):(this._needsRemove=!0,"destroy"):null}},restart:function(t){var e=(t-this._startTime)%this._life;this._startTime=t-e+this.gap,this._needsRemove=!1},fire:function(t,e){t="on"+t,this[t]&&this[t](this._target,e)}},t.exports=n},function(t,e){var i={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*(-Math.pow(2,-10*(t-1))+2)},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,i=.1,n=.4;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=n/4):e=n*Math.asin(1/i)/(2*Math.PI),-(i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)))},elasticOut:function(t){var e,i=.1,n=.4;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=n/4):e=n*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},elasticInOut:function(t){var e,i=.1,n=.4;return 0===t?0:1===t?1:(!i||i<1?(i=1,e=n/4):e=n*Math.asin(1/i)/(2*Math.PI),(t*=2)<1?-.5*(i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)):i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.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?.5*(t*t*((e+1)*t-e)):.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-i.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*i.bounceIn(2*t):.5*i.bounceOut(2*t-1)+.5}};t.exports=i},function(t,e,i){var n=i(61).normalizeRadian,o=2*Math.PI;t.exports={containStroke:function(t,e,i,r,a,s,l,u,h){if(0===l)return!1;var c=l;u-=t,h-=e;var d=Math.sqrt(u*u+h*h);if(d-c>i||d+c<i)return!1;if(Math.abs(r-a)%o<1e-4)return!0;if(s){var f=r;r=n(a),a=n(f)}else r=n(r),a=n(a);r>a&&(a+=o);var p=Math.atan2(h,u);return p<0&&(p+=o),p>=r&&p<=a||p+o>=r&&p+o<=a}}},function(t,e,i){var n=i(17);t.exports={containStroke:function(t,e,i,o,r,a,s,l,u,h,c){if(0===u)return!1;var d=u;if(c>e+d&&c>o+d&&c>a+d&&c>l+d||c<e-d&&c<o-d&&c<a-d&&c<l-d||h>t+d&&h>i+d&&h>r+d&&h>s+d||h<t-d&&h<i-d&&h<r-d&&h<s-d)return!1;var f=n.cubicProjectPoint(t,e,i,o,r,a,s,l,h,c,null);return f<=d/2}}},function(t,e,i){"use strict";function n(t,e){return Math.abs(t-e)<x}function o(){var t=b[0];b[0]=b[1],b[1]=t}function r(t,e,i,n,r,a,s,l,u,h){if(h>e&&h>n&&h>a&&h>l||h<e&&h<n&&h<a&&h<l)return 0;var c=g.cubicRootAt(e,n,a,l,h,_);if(0===c)return 0;for(var d,f,p=0,m=-1,v=0;v<c;v++){var y=_[v],x=0===y||1===y?.5:1,w=g.cubicAt(t,i,r,s,y);w<u||(m<0&&(m=g.cubicExtrema(e,n,a,l,b),b[1]<b[0]&&m>1&&o(),d=g.cubicAt(e,n,a,l,b[0]),m>1&&(f=g.cubicAt(e,n,a,l,b[1]))),p+=2==m?y<b[0]?d<e?x:-x:y<b[1]?f<d?x:-x:l<f?x:-x:y<b[0]?d<e?x:-x:l<d?x:-x)}return p}function a(t,e,i,n,o,r,a,s){if(s>e&&s>n&&s>r||s<e&&s<n&&s<r)return 0;var l=g.quadraticRootAt(e,n,r,s,_);if(0===l)return 0;var u=g.quadraticExtremum(e,n,r);if(u>=0&&u<=1){for(var h=0,c=g.quadraticAt(e,n,r,u),d=0;d<l;d++){var f=0===_[d]||1===_[d]?.5:1,p=g.quadraticAt(t,i,o,_[d]);p<a||(h+=_[d]<u?c<e?f:-f:r<c?f:-f)}return h}var f=0===_[0]||1===_[0]?.5:1,p=g.quadraticAt(t,i,o,_[0]);return p<a?0:r<e?f:-f}function s(t,e,i,n,o,r,a,s){if(s-=e,s>i||s<-i)return 0;var l=Math.sqrt(i*i-s*s);_[0]=-l,_[1]=l;var u=Math.abs(n-o);if(u<1e-4)return 0;if(u%y<1e-4){n=0,o=y;var h=r?1:-1;return a>=_[0]+t&&a<=_[1]+t?h:0}if(r){var l=n;n=p(o),o=p(l)}else n=p(n),o=p(o);n>o&&(o+=y);for(var c=0,d=0;d<2;d++){var f=_[d];if(f+t>a){var g=Math.atan2(s,f),h=r?1:-1;g<0&&(g=y+g),(g>=n&&g<=o||g+y>=n&&g+y<=o)&&(g>Math.PI/2&&g<1.5*Math.PI&&(h=-h),c+=h)}}return c}function l(t,e,i,o,l){for(var h=0,p=0,g=0,y=0,x=0,_=0;_<t.length;){var b=t[_++];switch(b===u.M&&_>1&&(i||(h+=m(p,g,y,x,o,l))),1==_&&(p=t[_],g=t[_+1],y=p,x=g),b){case u.M:y=t[_++],x=t[_++],p=y,g=x;break;case u.L:if(i){if(v(p,g,t[_],t[_+1],e,o,l))return!0}else h+=m(p,g,t[_],t[_+1],o,l)||0;p=t[_++],g=t[_++];break;case u.C:if(i){if(c.containStroke(p,g,t[_++],t[_++],t[_++],t[_++],t[_],t[_+1],e,o,l))return!0}else h+=r(p,g,t[_++],t[_++],t[_++],t[_++],t[_],t[_+1],o,l)||0;p=t[_++],g=t[_++];break;case u.Q:if(i){if(d.containStroke(p,g,t[_++],t[_++],t[_],t[_+1],e,o,l))return!0}else h+=a(p,g,t[_++],t[_++],t[_],t[_+1],o,l)||0;p=t[_++],g=t[_++];break;case u.A:var w=t[_++],S=t[_++],M=t[_++],T=t[_++],I=t[_++],A=t[_++],L=(t[_++],1-t[_++]),C=Math.cos(I)*M+w,D=Math.sin(I)*T+S;_>1?h+=m(p,g,C,D,o,l):(y=C,x=D);var P=(o-w)*T/M+w;if(i){if(f.containStroke(w,S,T,I,I+A,L,e,P,l))return!0}else h+=s(w,S,T,I,I+A,L,P,l);p=Math.cos(I+A)*M+w,g=Math.sin(I+A)*T+S;break;case u.R:y=p=t[_++],x=g=t[_++];var k=t[_++],z=t[_++],C=y+k,D=x+z;if(i){if(v(y,x,C,x,e,o,l)||v(C,x,C,D,e,o,l)||v(C,D,y,D,e,o,l)||v(y,D,y,x,e,o,l))return!0}else h+=m(C,x,C,D,o,l),h+=m(y,D,y,x,o,l);break;case u.Z:if(i){if(v(p,g,y,x,e,o,l))return!0}else h+=m(p,g,y,x,o,l);p=y,g=x}}return i||n(g,x)||(h+=m(p,g,y,x,o,l)||0),0!==h}var u=i(28).CMD,h=i(84),c=i(147),d=i(85),f=i(146),p=i(61).normalizeRadian,g=i(17),m=i(86),v=h.containStroke,y=2*Math.PI,x=1e-4,_=[-1,-1,-1],b=[-1,-1];t.exports={contain:function(t,e,i){return l(t,0,!1,e,i)},containStroke:function(t,e,i,n){return l(t,e,!0,i,n)}}},function(t,e,i){"use strict";function n(t){var e=t[1][0]-t[0][0],i=t[1][1]-t[0][1];return Math.sqrt(e*e+i*i)}function o(t){return[(t[0][0]+t[1][0])/2,(t[0][1]+t[1][1])/2]}var r=i(24),a=function(){this._track=[]};a.prototype={constructor:a,recognize:function(t,e,i){return this._doTrack(t,e,i),this._recognize(t)},clear:function(){return this._track.length=0,this},_doTrack:function(t,e,i){var n=t.touches;if(n){for(var o={points:[],touches:[],target:e,event:t},a=0,s=n.length;a<s;a++){var l=n[a],u=r.clientToLocal(i,l,{});o.points.push([u.zrX,u.zrY]),o.touches.push(l)}this._track.push(o)}},_recognize:function(t){for(var e in s)if(s.hasOwnProperty(e)){var i=s[e](this._track,t);if(i)return i}}};var s={pinch:function(t,e){var i=t.length;if(i){var r=(t[i-1]||{}).points,a=(t[i-2]||{}).points||r;if(a&&a.length>1&&r&&r.length>1){var s=n(r)/n(a);!isFinite(s)&&(s=1),e.pinchScale=s;var l=o(r);return e.pinchX=l[0],e.pinchY=l[1],{type:"pinch",target:t[0].target,event:e}}}}};t.exports=a},function(t,e){var i=function(){this.head=null,this.tail=null,this._len=0},n=i.prototype;n.insert=function(t){var e=new o(t);return this.insertEntry(e),e},n.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,this.tail=t):this.head=this.tail=t,this._len++},n.remove=function(t){var e=t.prev,i=t.next;e?e.next=i:this.head=i,i?i.prev=e:this.tail=e,t.next=t.prev=null,this._len--},n.len=function(){return this._len};var o=function(t){this.value=t,this.next,this.prev},r=function(t){this._list=new i,this._map={},this._maxSize=t||10},a=r.prototype;a.put=function(t,e){var i=this._list,n=this._map;if(null==n[t]){var o=i.len();if(o>=this._maxSize&&o>0){var r=i.head;i.remove(r),delete n[r.key]}var a=i.insert(e);a.key=t,n[t]=a}},a.get=function(t){var e=this._map[t],i=this._list;if(null!=e)return e!==i.tail&&(i.remove(e),i.insertEntry(e)),e.value},a.clear=function(){this._list.clear(),this._map={}},t.exports=r},function(t,e,i){function n(t){return"mousewheel"===t&&d.browser.firefox?"DOMMouseScroll":t}function o(t,e,i){var n=t._gestureMgr;"start"===i&&n.clear();var o=n.recognize(e,t.handler.findHover(e.zrX,e.zrY,null),t.dom);if("end"===i&&n.clear(),o){var r=o.type;e.gestureEvent=r,t.handler.dispatchToElement(o.target,r,o.event)}}function r(t){t._touching=!0,clearTimeout(t._touchTimer),t._touchTimer=setTimeout(function(){t._touching=!1},700)}function a(){return d.touchEventsSupported}function s(t){function e(t,e){return function(){if(!e._touching)return t.apply(e,arguments)}}for(var i=0;i<x.length;i++){var n=x[i];t._handlers[n]=h.bind(_[n],t)}for(var i=0;i<y.length;i++){var n=y[i];t._handlers[n]=e(_[n],t)}}function l(t){function e(e,i){h.each(e,function(e){p(t,n(e),i._handlers[e])},i)}c.call(this),this.dom=t,this._touching=!1,this._touchTimer,this._gestureMgr=new f,this._handlers={},s(this),a()&&e(x,this),e(y,this)}var u=i(24),h=i(1),c=i(20),d=i(11),f=i(149),p=u.addEventListener,g=u.removeEventListener,m=u.normalizeEvent,v=300,y=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],x=["touchstart","touchend","touchmove"],_={mousemove:function(t){t=m(this.dom,t),this.trigger("mousemove",t)},mouseout:function(t){t=m(this.dom,t);var e=t.toElement||t.relatedTarget;if(e!=this.dom)for(;e&&9!=e.nodeType;){if(e===this.dom)return;e=e.parentNode}this.trigger("mouseout",t)},touchstart:function(t){t=m(this.dom,t),this._lastTouchMoment=new Date,o(this,t,"start"),_.mousemove.call(this,t),_.mousedown.call(this,t),r(this)},touchmove:function(t){t=m(this.dom,t),o(this,t,"change"),_.mousemove.call(this,t),r(this)},touchend:function(t){t=m(this.dom,t),o(this,t,"end"),_.mouseup.call(this,t),+new Date-this._lastTouchMoment<v&&_.click.call(this,t),r(this)}};h.each(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(t){_[t]=function(e){e=m(this.dom,e),this.trigger(t,e)}});var b=l.prototype;b.dispose=function(){for(var t=y.concat(x),e=0;e<t.length;e++){var i=t[e];g(this.dom,n(i),this._handlers[i])}},b.setCursor=function(t){this.dom.style.cursor=t||"default"},h.mixin(l,c),t.exports=l},function(t,e,i){var n=i(6);t.exports=n.extend({type:"compound",shape:{paths:null},_updatePathDirty:function(){for(var t=this.__dirtyPath,e=this.shape.paths,i=0;i<e.length;i++)t=t||e[i].__dirtyPath;this.__dirtyPath=t,this.__dirty=this.__dirty||t},beforeBrush:function(){this._updatePathDirty();for(var t=this.shape.paths||[],e=this.getGlobalScale(),i=0;i<t.length;i++)t[i].path.setScale(e[0],e[1])},buildPath:function(t,e){for(var i=e.paths||[],n=0;n<i.length;n++)i[n].buildPath(t,i[n].shape,!0)},afterBrush:function(){for(var t=this.shape.paths,e=0;e<t.length;e++)t[e].__dirtyPath=!1},getBoundingRect:function(){return this._updatePathDirty(),n.prototype.getBoundingRect.call(this)}})},function(t,e,i){"use strict";var n=i(1),o=i(37),r=function(t,e,i,n,r){this.x=null==t?.5:t,this.y=null==e?.5:e,this.r=null==i?.5:i,this.type="radial",this.global=r||!1,o.call(this,n)};r.prototype={constructor:r},n.inherits(r,o),t.exports=r},function(t,e){t.exports={buildPath:function(t,e){var i,n,o,r,a=e.x,s=e.y,l=e.width,u=e.height,h=e.r;l<0&&(a+=l,l=-l),u<0&&(s+=u,u=-u),"number"==typeof h?i=n=o=r=h:h instanceof Array?1===h.length?i=n=o=r=h[0]:2===h.length?(i=o=h[0],n=r=h[1]):3===h.length?(i=h[0],n=r=h[1],o=h[2]):(i=h[0],n=h[1],o=h[2],r=h[3]):i=n=o=r=0;var c;i+n>l&&(c=i+n,i*=l/c,n*=l/c),o+r>l&&(c=o+r,o*=l/c,r*=l/c),n+o>u&&(c=n+o,n*=u/c,o*=u/c),i+r>u&&(c=i+r,i*=u/c,r*=u/c),t.moveTo(a+i,s),t.lineTo(a+l-n,s),0!==n&&t.quadraticCurveTo(a+l,s,a+l,s+n),t.lineTo(a+l,s+u-o),0!==o&&t.quadraticCurveTo(a+l,s+u,a+l-o,s+u),t.lineTo(a+r,s+u),0!==r&&t.quadraticCurveTo(a,s+u,a,s+u-r),t.lineTo(a,s+i),0!==i&&t.quadraticCurveTo(a,s,a+i,s)}}},function(t,e,i){var n=i(5),o=n.min,r=n.max,a=n.scale,s=n.distance,l=n.add;t.exports=function(t,e,i,u){var h,c,d,f,p=[],g=[],m=[],v=[];if(u){d=[1/0,1/0],f=[-(1/0),-(1/0)];for(var y=0,x=t.length;y<x;y++)o(d,d,t[y]),r(f,f,t[y]);o(d,d,u[0]),r(f,f,u[1])}for(var y=0,x=t.length;y<x;y++){var _=t[y];if(i)h=t[y?y-1:x-1],c=t[(y+1)%x];else{if(0===y||y===x-1){p.push(n.clone(t[y]));continue}h=t[y-1],c=t[y+1]}n.sub(g,c,h),a(g,g,e);var b=s(_,h),w=s(_,c),S=b+w;0!==S&&(b/=S,w/=S),a(m,g,-b),a(v,g,w);var M=l([],_,m),T=l([],_,v);u&&(r(M,M,d),o(M,M,f),r(T,T,d),o(T,T,f)),p.push(M),p.push(T)}return i&&p.push(p.shift()),p}},function(t,e,i){function n(t,e,i,n,o,r,a){var s=.5*(i-t),l=.5*(n-e);return(2*(e-i)+s+l)*a+(-3*(e-i)-2*s-l)*r+s*o+e}var o=i(5);t.exports=function(t,e){for(var i=t.length,r=[],a=0,s=1;s<i;s++)a+=o.distance(t[s-1],t[s]);var l=a/2;l=l<i?i:l;for(var s=0;s<l;s++){var u,h,c,d=s/(l-1)*(e?i:i-1),f=Math.floor(d),p=d-f,g=t[f%i];e?(u=t[(f-1+i)%i],h=t[(f+1)%i],c=t[(f+2)%i]):(u=t[0===f?f:f-1],h=t[f>i-2?i-1:f+1],c=t[f>i-3?i-1:f+2]);var m=p*p,v=p*m;r.push([n(u[0],g[0],h[0],c[0],p,m,v),n(u[1],g[1],h[1],c[1],p,m,v)])}return r}},function(t,e,i){t.exports=i(6).extend({type:"arc",shape:{cx:0,cy:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},style:{stroke:"#000",fill:null},buildPath:function(t,e){var i=e.cx,n=e.cy,o=Math.max(e.r,0),r=e.startAngle,a=e.endAngle,s=e.clockwise,l=Math.cos(r),u=Math.sin(r);t.moveTo(l*o+i,u*o+n),t.arc(i,n,o,r,a,!s)}})},function(t,e,i){"use strict";function n(t,e,i){var n=t.cpx2,o=t.cpy2;return null===n||null===o?[(i?c:u)(t.x1,t.cpx1,t.cpx2,t.x2,e),(i?c:u)(t.y1,t.cpy1,t.cpy2,t.y2,e)]:[(i?h:l)(t.x1,t.cpx1,t.x2,e),(i?h:l)(t.y1,t.cpy1,t.y2,e)]}var o=i(17),r=i(5),a=o.quadraticSubdivide,s=o.cubicSubdivide,l=o.quadraticAt,u=o.cubicAt,h=o.quadraticDerivativeAt,c=o.cubicDerivativeAt,d=[];t.exports=i(6).extend({type:"bezier-curve",shape:{x1:0,y1:0,x2:0,y2:0,cpx1:0,cpy1:0,percent:1},style:{stroke:"#000",fill:null},buildPath:function(t,e){var i=e.x1,n=e.y1,o=e.x2,r=e.y2,l=e.cpx1,u=e.cpy1,h=e.cpx2,c=e.cpy2,f=e.percent;0!==f&&(t.moveTo(i,n),null==h||null==c?(f<1&&(a(i,l,o,f,d),l=d[1],o=d[2],a(n,u,r,f,d),u=d[1],r=d[2]),t.quadraticCurveTo(l,u,o,r)):(f<1&&(s(i,l,h,o,f,d),l=d[1],h=d[2],o=d[3],s(n,u,c,r,f,d),u=d[1],c=d[2],r=d[3]),t.bezierCurveTo(l,u,h,c,o,r)))},pointAt:function(t){return n(this.shape,t,!1)},tangentAt:function(t){var e=n(this.shape,t,!0);return r.normalize(e,e)}})},function(t,e,i){"use strict";t.exports=i(6).extend({type:"circle",shape:{cx:0,cy:0,r:0},buildPath:function(t,e,i){i&&t.moveTo(e.cx+e.r,e.cy),t.arc(e.cx,e.cy,e.r,0,2*Math.PI,!0)}})},function(t,e,i){t.exports=i(6).extend({type:"line",shape:{x1:0,y1:0,x2:0,y2:0,percent:1},style:{stroke:"#000",fill:null},buildPath:function(t,e){var i=e.x1,n=e.y1,o=e.x2,r=e.y2,a=e.percent;0!==a&&(t.moveTo(i,n),a<1&&(o=i*(1-a)+o*a,r=n*(1-a)+r*a),t.lineTo(o,r))},pointAt:function(t){var e=this.shape;return[e.x1*(1-t)+e.x2*t,e.y1*(1-t)+e.y2*t]}})},function(t,e,i){var n=i(65);t.exports=i(6).extend({type:"polygon",shape:{points:null,smooth:!1,smoothConstraint:null},buildPath:function(t,e){n.buildPath(t,e,!0)}})},function(t,e,i){var n=i(65);t.exports=i(6).extend({type:"polyline",shape:{points:null,smooth:!1,smoothConstraint:null},style:{stroke:"#000",fill:null},buildPath:function(t,e){n.buildPath(t,e,!1)}})},function(t,e,i){var n=i(154);t.exports=i(6).extend({type:"rect",shape:{r:0,x:0,y:0,width:0,height:0},buildPath:function(t,e){var i=e.x,o=e.y,r=e.width,a=e.height;e.r?n.buildPath(t,e):t.rect(i,o,r,a),t.closePath()}})},function(t,e,i){t.exports=i(6).extend({type:"ring",shape:{cx:0,cy:0,r:0,r0:0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=2*Math.PI;t.moveTo(i+e.r,n),t.arc(i,n,e.r,0,o,!1),t.moveTo(i+e.r0,n),t.arc(i,n,e.r0,0,o,!0)}})},function(t,e,i){t.exports=i(6).extend({type:"sector",shape:{cx:0,cy:0,r0:0,r:0,startAngle:0,endAngle:2*Math.PI,clockwise:!0},buildPath:function(t,e){var i=e.cx,n=e.cy,o=Math.max(e.r0||0,0),r=Math.max(e.r,0),a=e.startAngle,s=e.endAngle,l=e.clockwise,u=Math.cos(a),h=Math.sin(a);t.moveTo(u*o+i,h*o+n),t.lineTo(u*r+i,h*r+n),t.arc(i,n,r,a,s,!l),t.lineTo(Math.cos(s)*o+i,Math.sin(s)*o+n),0!==o&&t.arc(i,n,o,s,a,l),t.closePath()}})},function(t,e,i){"use strict";var n=i(59),o=i(1),r=o.isString,a=o.isFunction,s=o.isObject,l=i(47),u=function(){this.animators=[]};u.prototype={constructor:u,animate:function(t,e){var i,r=!1,a=this,s=this.__zr;if(t){var u=t.split("."),h=a;r="shape"===u[0];for(var c=0,d=u.length;c<d;c++)h&&(h=h[u[c]]);h&&(i=h)}else i=a;if(!i)return void l('Property "'+t+'" is not existed in element '+a.id);var f=a.animators,p=new n(i,e);return p.during(function(t){a.dirty(r)}).done(function(){f.splice(o.indexOf(f,p),1)}),f.push(p),s&&s.animation.addAnimator(p),p},stopAnimation:function(t){for(var e=this.animators,i=e.length,n=0;n<i;n++)e[n].stop(t);return e.length=0,this},animateTo:function(t,e,i,n,o){function s(){u--,u||o&&o()}r(i)?(o=n,n=i,i=0):a(n)?(o=n,n="linear",i=0):a(i)?(o=i,i=0):a(e)?(o=e,e=500):e||(e=500),this.stopAnimation(),this._animateToShallow("",this,t,e,i,n,o);var l=this.animators.slice(),u=l.length;u||o&&o();for(var h=0;h<l.length;h++)l[h].done(s).start(n)},_animateToShallow:function(t,e,i,n,r){var a={},l=0;for(var u in i)if(i.hasOwnProperty(u))if(null!=e[u])s(i[u])&&!o.isArrayLike(i[u])?this._animateToShallow(t?t+"."+u:u,e[u],i[u],n,r):(a[u]=i[u],l++);else if(null!=i[u])if(t){var h={};h[t]={},h[t][u]=i[u],this.attr(h)}else this.attr(u,i[u]);return l>0&&this.animate(t,!1).when(null==n?500:n,a).delay(r||0),this}},t.exports=u},function(t,e){function i(){this.on("mousedown",this._dragStart,this),this.on("mousemove",this._drag,this),this.on("mouseup",this._dragEnd,this),this.on("globalout",this._dragEnd,this)}i.prototype={constructor:i,_dragStart:function(t){var e=t.target;e&&e.draggable&&(this._draggingTarget=e,e.dragging=!0,this._x=t.offsetX,this._y=t.offsetY,this.dispatchToElement(e,"dragstart",t.event))},_drag:function(t){var e=this._draggingTarget;if(e){var i=t.offsetX,n=t.offsetY,o=i-this._x,r=n-this._y;this._x=i,this._y=n,e.drift(o,r,t),this.dispatchToElement(e,"drag",t.event);var a=this.findHover(i,n,e),s=this._dropTarget;this._dropTarget=a,e!==a&&(s&&a!==s&&this.dispatchToElement(s,"dragleave",t.event),a&&a!==s&&this.dispatchToElement(a,"dragenter",t.event))}},_dragEnd:function(t){var e=this._draggingTarget;e&&(e.dragging=!1),this.dispatchToElement(e,"dragend",t.event),this._dropTarget&&this.dispatchToElement(this._dropTarget,"drop",t.event),this._draggingTarget=null,this._dropTarget=null}},t.exports=i},function(t,e,i){function n(t,e,i,n,o,r,a,s,l,u,h){var g=l*(p/180),y=f(g)*(t-i)/2+d(g)*(e-n)/2,x=-1*d(g)*(t-i)/2+f(g)*(e-n)/2,_=y*y/(a*a)+x*x/(s*s);_>1&&(a*=c(_),s*=c(_));var b=(o===r?-1:1)*c((a*a*(s*s)-a*a*(x*x)-s*s*(y*y))/(a*a*(x*x)+s*s*(y*y)))||0,w=b*a*x/s,S=b*-s*y/a,M=(t+i)/2+f(g)*w-d(g)*S,T=(e+n)/2+d(g)*w+f(g)*S,I=v([1,0],[(y-w)/a,(x-S)/s]),A=[(y-w)/a,(x-S)/s],L=[(-1*y-w)/a,(-1*x-S)/s],C=v(A,L);m(A,L)<=-1&&(C=p),m(A,L)>=1&&(C=0),0===r&&C>0&&(C-=2*p),1===r&&C<0&&(C+=2*p),h.addData(u,M,T,a,s,I,C,g,r)}function o(t){if(!t)return[];var e,i=t.replace(/-/g," -").replace(/ /g," ").replace(/ /g,",").replace(/,,/g,",");for(e=0;e<h.length;e++)i=i.replace(new RegExp(h[e],"g"),"|"+h[e]);var o,r=i.split("|"),a=0,l=0,u=new s,c=s.CMD;for(e=1;e<r.length;e++){var d,f=r[e],p=f.charAt(0),g=0,m=f.slice(1).replace(/e,-/g,"e-").split(",");m.length>0&&""===m[0]&&m.shift();for(var v=0;v<m.length;v++)m[v]=parseFloat(m[v]);for(;g<m.length&&!isNaN(m[g])&&!isNaN(m[0]);){var y,x,_,b,w,S,M,T=a,I=l;switch(p){case"l":a+=m[g++],l+=m[g++],d=c.L,u.addData(d,a,l);break;case"L":a=m[g++],l=m[g++],d=c.L,u.addData(d,a,l);break;case"m":a+=m[g++],l+=m[g++],d=c.M,u.addData(d,a,l),p="l";break;case"M":a=m[g++],l=m[g++],d=c.M,u.addData(d,a,l),p="L";break;case"h":a+=m[g++],d=c.L,u.addData(d,a,l);break;case"H":a=m[g++],d=c.L,u.addData(d,a,l);break;case"v":l+=m[g++],d=c.L,u.addData(d,a,l);break;case"V":l=m[g++],d=c.L,u.addData(d,a,l);break;case"C":d=c.C,u.addData(d,m[g++],m[g++],m[g++],m[g++],m[g++],m[g++]),a=m[g-2],l=m[g-1];break;case"c":d=c.C,u.addData(d,m[g++]+a,m[g++]+l,m[g++]+a,m[g++]+l,m[g++]+a,m[g++]+l),a+=m[g-2],l+=m[g-1];break;case"S":y=a,x=l;var A=u.len(),L=u.data;o===c.C&&(y+=a-L[A-4],x+=l-L[A-3]),d=c.C,T=m[g++],I=m[g++],a=m[g++],l=m[g++],u.addData(d,y,x,T,I,a,l);break;case"s":y=a,x=l;var A=u.len(),L=u.data;o===c.C&&(y+=a-L[A-4],x+=l-L[A-3]),d=c.C,T=a+m[g++],I=l+m[g++],a+=m[g++],l+=m[g++],u.addData(d,y,x,T,I,a,l);break;case"Q":T=m[g++],I=m[g++],a=m[g++],l=m[g++],d=c.Q,u.addData(d,T,I,a,l);break;case"q":T=m[g++]+a,I=m[g++]+l,a+=m[g++],l+=m[g++],d=c.Q,u.addData(d,T,I,a,l);break;case"T":y=a,x=l;var A=u.len(),L=u.data;o===c.Q&&(y+=a-L[A-4],x+=l-L[A-3]),a=m[g++],l=m[g++],d=c.Q,u.addData(d,y,x,a,l);break;case"t":y=a,x=l;var A=u.len(),L=u.data;o===c.Q&&(y+=a-L[A-4],x+=l-L[A-3]),a+=m[g++],l+=m[g++],d=c.Q,u.addData(d,y,x,a,l);break;case"A":_=m[g++],b=m[g++],w=m[g++],S=m[g++],M=m[g++],T=a,I=l,a=m[g++],l=m[g++],d=c.A,n(T,I,a,l,S,M,_,b,w,d,u);break;case"a":_=m[g++],b=m[g++],w=m[g++],S=m[g++],M=m[g++],T=a,I=l,a+=m[g++],l+=m[g++],d=c.A,n(T,I,a,l,S,M,_,b,w,d,u)}}"z"!==p&&"Z"!==p||(d=c.Z,u.addData(d)),o=d}return u.toStatic(),u}function r(t,e){var i,n=o(t);return e=e||{},e.buildPath=function(t){t.setData(n.data),i&&l(t,i);var e=t.getContext();e&&t.rebuildPath(e)},e.applyTransform=function(t){i||(i=u.create()),u.mul(i,t,i),this.dirty(!0)},e}var a=i(6),s=i(28),l=i(169),u=i(19),h=["m","M","l","L","v","V","h","H","z","Z","c","C","q","Q","t","T","s","S","a","A"],c=Math.sqrt,d=Math.sin,f=Math.cos,p=Math.PI,g=function(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])},m=function(t,e){return(t[0]*e[0]+t[1]*e[1])/(g(t)*g(e))},v=function(t,e){return(t[0]*e[1]<t[1]*e[0]?-1:1)*Math.acos(m(t,e))};t.exports={createFromString:function(t,e){return new a(r(t,e))},extendFromString:function(t,e){return a.extend(r(t,e))},mergePath:function(t,e){for(var i=[],n=t.length,o=0;o<n;o++){var r=t[o];r.__dirty&&r.buildPath(r.path,r.shape,!0),i.push(r.path)}var s=new a(e);return s.buildPath=function(t){t.appendPath(i);var e=t.getContext();e&&t.rebuildPath(e)},s}}},function(t,e,i){function n(t,e){var i,n,r,h,c,d,f=t.data,p=o.M,g=o.C,m=o.L,v=o.R,y=o.A,x=o.Q;for(r=0,h=0;r<f.length;){switch(i=f[r++],h=r,n=0,i){case p:n=1;break;case m:n=1;break;case g:n=3;break;case x:n=2;break;case y:var _=e[4],b=e[5],w=l(e[0]*e[0]+e[1]*e[1]),S=l(e[2]*e[2]+e[3]*e[3]),M=u(-e[1]/S,e[0]/w);f[r++]+=_,f[r++]+=b,f[r++]*=w,f[r++]*=S,f[r++]+=M,f[r++]+=M,r+=2,h=r;break;case v:d[0]=f[r++],d[1]=f[r++],a(d,d,e),f[h++]=d[0],f[h++]=d[1],d[0]+=f[r++],d[1]+=f[r++],a(d,d,e),f[h++]=d[0],f[h++]=d[1]}for(c=0;c<n;c++){var d=s[c];d[0]=f[r++],d[1]=f[r++],a(d,d,e),f[h++]=d[0],f[h++]=d[1]}}}var o=i(28).CMD,r=i(5),a=r.applyTransform,s=[[],[],[]],l=Math.sqrt,u=Math.atan2;t.exports=n},function(t,e,i){if(!i(11).canvasSupported){var n,o="urn:schemas-microsoft-com:vml",r=window,a=r.document,s=!1;try{!a.namespaces.zrvml&&a.namespaces.add("zrvml",o),n=function(t){return a.createElement("<zrvml:"+t+' class="zrvml">')}}catch(l){n=function(t){return a.createElement("<"+t+' xmlns="'+o+'" class="zrvml">')}}var u=function(){if(!s){s=!0;var t=a.styleSheets;t.length<31?a.createStyleSheet().addRule(".zrvml","behavior:url(#default#VML)"):t[0].addRule(".zrvml","behavior:url(#default#VML)")}};t.exports={doc:a,initVML:u,createNode:n}}},function(t,e,i){"use strict";function n(t){return null==t.value?t:t.value}var o=i(14),r=i(29),a=i(285),s=i(1),l={_baseAxisDim:null,getInitialData:function(t,e){var i,a,s=e.getComponent("xAxis",this.get("xAxisIndex")),l=e.getComponent("yAxis",this.get("yAxisIndex")),u=s.get("type"),h=l.get("type");"category"===u?(t.layout="horizontal",i=s.getCategories(),a=!0):"category"===h?(t.layout="vertical",i=l.getCategories(),a=!0):t.layout=t.layout||"horizontal",this._baseAxisDim="horizontal"===t.layout?"x":"y";var c=t.data,d=this.dimensions=["base"].concat(this.valueDimensions);r(d,c);var f=new o(d,this);return f.initData(c,i?i.slice():null,function(t,e,i,o){var r=n(t);return a?"base"===e?i:r[o-1]:r[o]}),f},coordDimToDataDim:function(t){var e=this.valueDimensions.slice(),i=["base"],n={horizontal:{x:i,y:e},vertical:{x:e,y:i}};return n[this.get("layout")][t]},dataDimToCoordDim:function(t){var e;return s.each(["x","y"],function(i,n){var o=this.coordDimToDataDim(i);s.indexOf(o,t)>=0&&(e=i)},this),e},getBaseAxis:function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+"Axis",this.get(t+"AxisIndex")).axis}},u={init:function(){var t=this._whiskerBoxDraw=new a(this.getStyleUpdater());this.group.add(t.group)},render:function(t,e,i){this._whiskerBoxDraw.updateData(t.getData())},remove:function(t){this._whiskerBoxDraw.remove()}};t.exports={seriesModelMixin:l,viewMixin:u}},function(t,e,i){function n(t,e){var i,n=this.getBoundingRect(),o=t.get("layoutCenter"),r=t.get("layoutSize"),s=e.getWidth(),u=e.getHeight(),h=t.get("aspectScale")||.75,c=n.width/n.height*h,d=!1;o&&r&&(o=[l.parsePercent(o[0],s),l.parsePercent(o[1],u)],r=l.parsePercent(r,Math.min(s,u)),isNaN(o[0])||isNaN(o[1])||isNaN(r)||(d=!0));var f;if(d){var f={};c>1?(f.width=r,f.height=r/c):(f.height=r,f.width=r*c),f.y=o[1]-f.height/2,f.x=o[0]-f.width/2}else i=t.getBoxLayoutParams(),i.aspect=c,f=a.getLayoutRect(i,{width:s,height:u});this.setViewRect(f.x,f.y,f.width,f.height),this.setCenter(t.get("center")),this.setZoom(t.get("zoom"))}function o(t,e){s.each(e.get("geoCoord"),function(e,i){t.addGeoCoord(i,e)})}var r=i(356),a=i(13),s=i(1),l=i(4),u={},h={dimensions:r.prototype.dimensions,create:function(t,e){var i=[];t.eachComponent("geo",function(t,a){var s=t.get("map"),l=u[s],h=new r(s+a,s,l&&l.geoJson,l&&l.specialAreas,t.get("nameMap"));h.zoomLimit=t.get("scaleLimit"),i.push(h),o(h,t),t.coordinateSystem=h,h.model=t,h.resize=n,h.resize(t,e)}),t.eachSeries(function(t){var e=t.get("coordinateSystem");if("geo"===e){var n=t.get("geoIndex")||0;t.coordinateSystem=i[n]}});var a={};return t.eachSeriesByType("map",function(t){var e=t.get("map");a[e]=a[e]||[],a[e].push(t)}),s.each(a,function(t,a){var l=u[a],h=s.map(t,function(t){return t.get("nameMap")}),c=new r(a,a,l&&l.geoJson,l&&l.specialAreas,s.mergeAll(h));c.zoomLimit=s.retrieve.apply(null,s.map(t,function(t){return t.get("scaleLimit")})),i.push(c),c.resize=n,c.resize(t[0],e),s.each(t,function(t){t.coordinateSystem=c,o(c,t)})}),i},registerMap:function(t,e,i){e.geoJson&&!e.features&&(i=e.specialAreas,e=e.geoJson),"string"==typeof e&&(e="undefined"!=typeof JSON&&JSON.parse?JSON.parse(e):new Function("return ("+e+");")()),u[t]={geoJson:e,specialAreas:i}},getMap:function(t){return u[t]},getFilledRegions:function(t,e){var i=(t||[]).slice(),n=h.getMap(e),o=n&&n.geoJson;if(!o)return t;for(var r={},a=o.features,s=0;s<i.length;s++)r[i[s].name]=i[s];for(var s=0;s<a.length;s++){var l=a[s].properties.name;r[l]||i.push({name:l})}return i}},c=i(2);c.registerMap=h.registerMap,c.getMap=h.getMap,c.loadMap=function(){},c.registerCoordinateSystem("geo",h),t.exports=h},function(t,e,i){function n(t){if(t)for(var e in t)if(t.hasOwnProperty(e))return!0}var o=i(1),r=i(71),a=o.each,s={createVisualMappings:function(t,e,i){function n(){var t=function(){};t.prototype.__hidden=t.prototype;var e=new t;return e}var s={};return a(e,function(e){var l=s[e]=n();a(t[e],function(t,n){if(r.isValidType(n)){var a={type:n,visual:t};i&&i(a,e),l[n]=new r(a),"opacity"===n&&(a=o.clone(a),a.type="colorAlpha",l.__hidden.__alphaForOpacity=new r(a))}})}),s},replaceVisualOption:function(t,e,i){var r;o.each(i,function(t){e.hasOwnProperty(t)&&n(e[t])&&(r=!0)}),r&&o.each(i,function(i){e.hasOwnProperty(i)&&n(e[i])?t[i]=o.clone(e[i]):delete t[i]})},applyVisual:function(t,e,i,n,a,s){function l(t){return i.getItemVisual(d,t)}function u(t,e){i.setItemVisual(d,t,e)}function h(t,i){d=null==s?t:i;for(var o=n.call(a,t),r=e[o],h=c[o],f=0,p=h.length;f<p;f++){var g=h[f];r[g]&&r[g].applyVisual(t,l,u)}}var c={};o.each(t,function(t){var i=r.prepareVisualTypes(e[t]);c[t]=i});var d;null==s?i.each(h,!0):i.each([s],h,!0)}};t.exports=s},function(t,e,i){function n(){this.group=new o.Group,this._symbolEl=new a({})}var o=i(3),r=i(26),a=o.extendShape({shape:{points:null,sizes:null},symbolProxy:null,buildPath:function(t,e){for(var i=e.points,n=e.sizes,o=this.symbolProxy,r=o.shape,a=0;a<i.length;a++){var s=i[a],l=n[a];l[0]<4?t.rect(s[0]-l[0]/2,s[1]-l[1]/2,l[0],l[1]):(r.x=s[0]-l[0]/2,r.y=s[1]-l[1]/2,r.width=l[0],r.height=l[1],o.buildPath(t,r,!0))}},findDataIndex:function(t,e){for(var i=this.shape,n=i.points,o=i.sizes,r=n.length-1;r>=0;r--){var a=n[r],s=o[r],l=a[0]-s[0]/2,u=a[1]-s[1]/2;if(t>=l&&e>=u&&t<=l+s[0]&&e<=u+s[1])return r}return-1}}),s=n.prototype;s.updateData=function(t){this.group.removeAll();var e=this._symbolEl,i=t.hostModel;e.setShape({points:t.mapArray(t.getItemLayout),sizes:t.mapArray(function(e){var i=t.getItemVisual(e,"symbolSize");return i instanceof Array||(i=[i,i]),i})}),e.symbolProxy=r.createSymbol(t.getVisual("symbol"),0,0,0,0),e.setColor=e.symbolProxy.setColor,e.useStyle(i.getModel("itemStyle.normal").getItemStyle(["color"]));var n=t.getVisual("color");n&&e.setColor(n),e.seriesIndex=i.seriesIndex,e.on("mousemove",function(t){e.dataIndex=null;var i=e.findDataIndex(t.offsetX,t.offsetY);i>0&&(e.dataIndex=i)}),this.group.add(e)},s.updateLayout=function(t){var e=t.getData();this._symbolEl.setShape({points:e.mapArray(e.getItemLayout)})},s.remove=function(){this.group.removeAll()},t.exports=n},function(t,e,i){function n(t){return isNaN(+t.cpx1)||isNaN(+t.cpy1)}var o=i(3),r=i(5),a=o.Line.prototype,s=o.BezierCurve.prototype;t.exports=o.extendShape({type:"ec-line",style:{stroke:"#000",fill:null},shape:{x1:0,y1:0,x2:0,y2:0,percent:1,cpx1:null,cpy1:null},buildPath:function(t,e){ +(n(e)?a:s).buildPath(t,e)},pointAt:function(t){return n(this.shape)?a.pointAt.call(this,t):s.pointAt.call(this,t)},tangentAt:function(t){var e=this.shape,i=n(e)?[e.x2-e.x1,e.y2-e.y1]:s.tangentAt.call(this,t);return r.normalize(i,i)}})},function(t,e,i){var n=i(1),o=i(2);i(177),i(178),o.registerVisual(n.curry(i(46),"scatter","circle",null)),o.registerLayout(n.curry(i(55),"scatter")),i(35)},function(t,e,i){"use strict";var n=i(34),o=i(15);t.exports=o.extend({type:"series.scatter",dependencies:["grid","polar"],getInitialData:function(t,e){var i=n(t.data,this,e);return i},brushSelector:"point",defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{normal:{opacity:.8}}}})},function(t,e,i){var n=i(39),o=i(174);i(2).extendChartView({type:"scatter",init:function(){this._normalSymbolDraw=new n,this._largeSymbolDraw=new o},render:function(t,e,i){var n=t.getData(),o=this._largeSymbolDraw,r=this._normalSymbolDraw,a=this.group,s=t.get("large")&&n.count()>t.get("largeThreshold")?o:r;this._symbolDraw=s,s.updateData(n),a.add(s.group),a.remove(s===o?r.group:o.group)},updateLayout:function(t){this._symbolDraw.updateLayout(t)},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(e,!0)},dispose:function(){}})},function(t,e,i){i(112),i(40),i(41),i(185),i(186),i(181),i(182),i(109),i(108)},function(t,e,i){function n(t,e){var i=[1/0,-(1/0)];return u(e,function(e){var n=e.getData();n&&u(e.coordDimToDataDim(t),function(t){var e=n.getDataExtent(t);e[0]<i[0]&&(i[0]=e[0]),e[1]>i[1]&&(i[1]=e[1])})},this),i}function o(t,e,i){var n=i.getAxisModel(),o=n.axis.scale,a=[0,100],s=[t.start,t.end],c=[];return e=e.slice(),r(e,n,o),u(["startValue","endValue"],function(e){c.push(null!=t[e]?o.parse(t[e]):null)}),u([0,1],function(t){var i=c[t],n=s[t];null!=n||null==i?(null==n&&(n=a[t]),i=o.parse(l.linearMap(n,a,e,!0))):n=l.linearMap(i,e,a,!0),c[t]=i,s[t]=n}),{valueWindow:h(c),percentWindow:h(s)}}function r(t,e,i){return u(["min","max"],function(n,o){var r=e.get(n,!0);null!=r&&(r+"").toLowerCase()!=="data"+n&&(t[o]=i.parse(r))}),e.get("scale",!0)||(t[0]>0&&(t[0]=0),t[1]<0&&(t[1]=0)),t}function a(t,e){var i=t.getAxisModel(),n=t._percentWindow,o=t._valueWindow;if(n){var r=e||0===n[0]&&100===n[1],a=!e&&l.getPixelPrecision(o,[0,500]),s=!(e||a<20&&a>=0),u=e||r||s;i.setRange&&i.setRange(u?null:+o[0].toFixed(a),u?null:+o[1].toFixed(a))}}var s=i(1),l=i(4),u=s.each,h=l.asc,c=function(t,e,i,n){this._dimName=t,this._axisIndex=e,this._valueWindow,this._percentWindow,this._dataExtent,this.ecModel=n,this._dataZoomModel=i};c.prototype={constructor:c,hostedBy:function(t){return this._dataZoomModel===t},getDataExtent:function(){return this._dataExtent.slice()},getDataValueWindow:function(){return this._valueWindow.slice()},getDataPercentWindow:function(){return this._percentWindow.slice()},getTargetSeriesModels:function(){var t=[],e=this.ecModel;return e.eachSeries(function(i){var n=i.get("coordinateSystem");if("cartesian2d"===n||"polar"===n){var o=this._dimName,r=e.queryComponents({mainType:o+"Axis",index:i.get(o+"AxisIndex"),id:i.get(o+"AxisId")})[0];this._axisIndex===(r&&r.componentIndex)&&t.push(i)}},this),t},getAxisModel:function(){return this.ecModel.getComponent(this._dimName+"Axis",this._axisIndex)},getOtherAxisModel:function(){var t,e,i=this._dimName,n=this.ecModel,o=this.getAxisModel(),r="x"===i||"y"===i;r?(e="gridIndex",t="x"===i?"y":"x"):(e="polarIndex",t="angle"===i?"radius":"angle");var a;return n.eachComponent(t+"Axis",function(t){(t.get(e)||0)===(o.get(e)||0)&&(a=t)}),a},reset:function(t){if(t===this._dataZoomModel){var e=this._dataExtent=n(this._dimName,this.getTargetSeriesModels()),i=o(t.option,e,this);this._valueWindow=i.valueWindow,this._percentWindow=i.percentWindow,a(this)}},restore:function(t){t===this._dataZoomModel&&(this._valueWindow=this._percentWindow=null,a(this,!0))},filterData:function(t){function e(t){return t>=r[0]&&t<=r[1]}if(t===this._dataZoomModel){var i=this._dimName,n=this.getTargetSeriesModels(),o=t.get("filterMode"),r=this._valueWindow,a=this.getOtherAxisModel();t.get("$fromToolbox")&&a&&"category"===a.get("type")&&(o="empty"),u(n,function(t){var n=t.getData();n&&u(t.coordDimToDataDim(i),function(i){"empty"===o?t.setData(n.map(i,function(t){return e(t)?t:NaN})):n.filterSelf(i,e)})})}}},t.exports=c},function(t,e,i){t.exports=i(40).extend({type:"dataZoom.inside",defaultOption:{disabled:!1,zoomLock:!1}})},function(t,e,i){function n(t){var e=[0,100];return!(t[0]<=e[1])&&(t[0]=e[1]),!(t[1]<=e[1])&&(t[1]=e[1]),!(t[0]>=e[0])&&(t[0]=e[0]),!(t[1]>=e[0])&&(t[1]=e[0]),t}var o=i(41),r=i(1),a=i(80),s=i(187),l=r.bind,u=o.extend({type:"dataZoom.inside",init:function(t,e){this._range},render:function(t,e,i,n){u.superApply(this,"render",arguments),s.shouldRecordRange(n,t.id)&&(this._range=t.getPercentRange());var o=this.getTargetInfo();r.each(["cartesians","polars"],function(e){var n=o[e],a=r.map(n,function(t){return s.generateCoordId(t.model)});r.each(n,function(n){var o=n.model,r=o.coordinateSystem;s.register(i,{coordId:s.generateCoordId(o),allCoordIds:a,coordinateSystem:r,containsPoint:l(h[e].containsPoint,this,r),dataZoomId:t.id,throttleRate:t.get("throttle",!0),panGetRange:l(this._onPan,this,n,e),zoomGetRange:l(this._onZoom,this,n,e)})},this)},this)},dispose:function(){s.unregister(this.api,this.dataZoomModel.id),u.superApply(this,"dispose",arguments),this._range=null},_onPan:function(t,e,i,n,o,r,s,l,u){if(this.dataZoomModel.option.disabled)return this._range;var c=this._range.slice(),d=t.axisModels[0];if(d){var f=h[e].getDirectionInfo([r,s],[l,u],d,i,t),p=f.signal*(c[1]-c[0])*f.pixel/f.pixelLength;return a(p,c,[0,100],"rigid"),this._range=c}},_onZoom:function(t,e,i,o,r,a){var s=this.dataZoomModel.option;if(s.disabled||s.zoomLock)return this._range;var l=this._range.slice(),u=t.axisModels[0];if(u){var c=h[e].getDirectionInfo(null,[r,a],u,i,t),d=(c.pixel-c.pixelStart)/c.pixelLength*(l[1]-l[0])+l[0];return o=Math.max(1/o,0),l[0]=(l[0]-d)*o+d,l[1]=(l[1]-d)*o+d,this._range=n(l)}}}),h={cartesians:{getDirectionInfo:function(t,e,i,n,o){var r=i.axis,a={},s=o.model.coordinateSystem.getRect();return t=t||[0,0],"x"===r.dim?(a.pixel=e[0]-t[0],a.pixelLength=s.width,a.pixelStart=s.x,a.signal=r.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=s.height,a.pixelStart=s.y,a.signal=r.inverse?-1:1),a},containsPoint:function(t,e,i){return t.getRect().contain(e,i)}},polars:{getDirectionInfo:function(t,e,i,n,o){var r=i.axis,a={},s=o.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===i.mainType?(a.pixel=e[0]-t[0],a.pixelLength=l[1]-l[0],a.pixelStart=l[0],a.signal=r.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=u[1]-u[0],a.pixelStart=u[0],a.signal=r.inverse?-1:1),a},containsPoint:function(t,e,i){var n=t.getRadiusAxis().getExtent()[1],o=t.cx,r=t.cy;return Math.pow(e-o,2)+Math.pow(i-r,2)<=Math.pow(n,2)}}};t.exports=u},function(t,e,i){var n=i(40);t.exports=n.extend({type:"dataZoom.select"})},function(t,e,i){t.exports=i(41).extend({type:"dataZoom.select"})},function(t,e,i){var n=i(40),o=n.extend({type:"dataZoom.slider",layoutMode:"box",defaultOption:{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,backgroundColor:"rgba(47,69,84,0)",dataBackground:{lineStyle:{color:"#2f4554",width:.5,opacity:.3},areaStyle:{color:"rgba(47,69,84,0.3)",opacity:.3}},borderColor:"#ddd",fillerColor:"rgba(167,183,204,0.4)",handleIcon:"M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z",handleSize:"100%",handleStyle:{color:"#a7b7cc"},labelPrecision:null,labelFormatter:null,showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:"#333"}}});t.exports=o},function(t,e,i){function n(t){return"x"===t?"y":"x"}var o=i(1),r=i(3),a=i(83),s=i(41),l=r.Rect,u=i(4),h=u.linearMap,c=i(13),d=i(80),f=u.asc,p=o.bind,g=o.each,m=7,v=1,y=30,x="horizontal",_="vertical",b=5,w=["line","bar","candlestick","scatter"],S=s.extend({type:"dataZoom.slider",init:function(t,e){this._displayables={},this._orient,this._range,this._handleEnds,this._size,this._handleWidth,this._handleHeight,this._location,this._dragging,this._dataShadowInfo,this.api=e},render:function(t,e,i,n){return S.superApply(this,"render",arguments),a.createOrUpdate(this,"_dispatchZoomAction",this.dataZoomModel.get("throttle"),"fixRate"),this._orient=t.get("orient"),this.dataZoomModel.get("show")===!1?void this.group.removeAll():(n&&"dataZoom"===n.type&&n.from===this.uid||this._buildView(),void this._updateView())},remove:function(){S.superApply(this,"remove",arguments),a.clear(this,"_dispatchZoomAction")},dispose:function(){S.superApply(this,"dispose",arguments),a.clear(this,"_dispatchZoomAction")},_buildView:function(){var t=this.group;t.removeAll(),this._resetLocation(),this._resetInterval();var e=this._displayables.barGroup=new r.Group;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},_resetLocation:function(){var t=this.dataZoomModel,e=this.api,i=this._findCoordRect(),n={width:e.getWidth(),height:e.getHeight()},r=this._orient===x?{right:n.width-i.x-i.width,top:n.height-y-m,width:i.width,height:y}:{right:m,top:i.y,width:y,height:i.height},a=c.getLayoutParams(t.option);o.each(["right","top","width","height"],function(t){"ph"===a[t]&&(a[t]=r[t])});var s=c.getLayoutRect(a,n,t.padding);this._location={x:s.x,y:s.y},this._size=[s.width,s.height],this._orient===_&&this._size.reverse()},_positionGroup:function(){var t=this.group,e=this._location,i=this._orient,n=this.dataZoomModel.getFirstTargetAxisModel(),o=n&&n.get("inverse"),r=this._displayables.barGroup,a=(this._dataShadowInfo||{}).otherAxisInverse;r.attr(i!==x||o?i===x&&o?{scale:a?[-1,1]:[-1,-1]}:i!==_||o?{scale:a?[-1,-1]:[-1,1],rotation:Math.PI/2}:{scale:a?[1,-1]:[1,1],rotation:Math.PI/2}:{scale:a?[1,1]:[1,-1]});var s=t.getBoundingRect([r]);t.attr("position",[e.x-s.x,e.y-s.y])},_getViewExtent:function(){return[0,this._size[0]]},_renderBackground:function(){var t=this.dataZoomModel,e=this._size;this._displayables.barGroup.add(new l({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40}))},_renderDataShadow:function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(t){var e=this._size,i=t.series,n=i.getRawData(),a=i.getShadowDim?i.getShadowDim():t.otherDim,s=n.getDataExtent(a),l=.3*(s[1]-s[0]);s=[s[0]-l,s[1]+l];var u,c=[0,e[1]],d=[0,e[0]],f=[[e[0],0],[0,0]],p=[],g=d[1]/(n.count()-1),m=0,v=Math.round(n.count()/e[0]);n.each([a],function(t,e){if(v>0&&e%v)return void(m+=g);var i=null==t||isNaN(t)||""===t,n=i?0:h(t,s,c,!0);i&&!u&&e?(f.push([f[f.length-1][0],0]),p.push([p[p.length-1][0],0])):!i&&u&&(f.push([m,0]),p.push([m,0])),f.push([m,n]),p.push([m,n]),m+=g,u=i});var y=this.dataZoomModel;this._displayables.barGroup.add(new r.Polygon({shape:{points:f},style:o.defaults({fill:y.get("dataBackgroundColor")},y.getModel("dataBackground.areaStyle").getAreaStyle()),silent:!0,z2:-20})),this._displayables.barGroup.add(new r.Polyline({shape:{points:p},style:y.getModel("dataBackground.lineStyle").getLineStyle(),silent:!0,z2:-19}))}},_prepareDataShadowInfo:function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(e!==!1){var i,r=this.ecModel;return t.eachTargetAxis(function(a,s){var l=t.getAxisProxy(a.name,s).getTargetSeriesModels();o.each(l,function(t){if(!(i||e!==!0&&o.indexOf(w,t.get("type"))<0)){var l=n(a.name),u=r.getComponent(a.axis,s).axis;i={thisAxis:u,series:t,thisDim:a.name,otherDim:l,otherAxisInverse:t.coordinateSystem.getOtherAxis(u).inverse}}},this)},this),i}},_renderHandle:function(){var t=this._displayables,e=t.handles=[],i=t.handleLabels=[],n=this._displayables.barGroup,o=this._size,a=this.dataZoomModel;n.add(t.filler=new l({draggable:!0,cursor:"move",drift:p(this._onDragMove,this,"all"),ondragstart:p(this._showDataInfo,this,!0),ondragend:p(this._onDragEnd,this),onmouseover:p(this._showDataInfo,this,!0),onmouseout:p(this._showDataInfo,this,!1),style:{fill:a.get("fillerColor"),textPosition:"inside"}})),n.add(new l(r.subPixelOptimizeRect({silent:!0,shape:{x:0,y:0,width:o[0],height:o[1]},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:v,fill:"rgba(0,0,0,0)"}})));var s=a.get("handleIcon");g([0,1],function(t){var o=r.makePath(s,{style:{strokeNoScale:!0},rectHover:!0,cursor:"vertical"===this._orient?"ns-resize":"ew-resize",draggable:!0,drift:p(this._onDragMove,this,t),ondragend:p(this._onDragEnd,this),onmouseover:p(this._showDataInfo,this,!0),onmouseout:p(this._showDataInfo,this,!1)},{x:-.5,y:0,width:1,height:1},"center"),l=o.getBoundingRect();this._handleHeight=u.parsePercent(a.get("handleSize"),this._size[1]),this._handleWidth=l.width/l.height*this._handleHeight,o.setStyle(a.getModel("handleStyle").getItemStyle());var h=a.get("handleColor");null!=h&&(o.style.fill=h),n.add(e[t]=o);var c=a.textStyleModel;this.group.add(i[t]=new r.Text({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textVerticalAlign:"middle",textAlign:"center",fill:c.getTextColor(),textFont:c.getFont()},z2:10}))},this)},_resetInterval:function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[h(t[0],[0,100],e,!0),h(t[1],[0,100],e,!0)]},_updateInterval:function(t,e){var i=this._handleEnds,n=this._getViewExtent();d(e,i,n,"all"===t||this.dataZoomModel.get("zoomLock")?"rigid":"cross",t),this._range=f([h(i[0],n,[0,100],!0),h(i[1],n,[0,100],!0)])},_updateView:function(){var t=this._displayables,e=this._handleEnds,i=f(e.slice()),n=this._size;g([0,1],function(i){var o=t.handles[i],r=this._handleHeight;o.attr({scale:[r,r],position:[e[i],n[1]/2-r/2]})},this),t.filler.setShape({x:i[0],y:0,width:i[1]-i[0],height:n[1]}),this._updateDataInfo()},_updateDataInfo:function(){function t(t){var e=r.getTransform(i.handles[t].parent,this.group),s=r.transformDirection(0===t?"right":"left",e),l=this._handleWidth/2+b,h=r.applyTransform([u[t]+(0===t?-l:l),this._size[1]/2],e);n[t].setStyle({x:h[0],y:h[1],textVerticalAlign:o===x?"middle":s,textAlign:o===x?s:"center",text:a[t]})}var e=this.dataZoomModel,i=this._displayables,n=i.handleLabels,o=this._orient,a=["",""];if(e.get("showDetail")){var s,l;e.eachTargetAxis(function(t,i){s||(s=e.getAxisProxy(t.name,i).getDataValueWindow(),l=this.ecModel.getComponent(t.axis,i).axis)},this),s&&(a=[this._formatLabel(s[0],l),this._formatLabel(s[1],l)])}var u=f(this._handleEnds.slice());t.call(this,0),t.call(this,1)},_formatLabel:function(t,e){var i=this.dataZoomModel,n=i.get("labelFormatter"),r=i.get("labelPrecision");null!=r&&"auto"!==r||(r=e.getPixelPrecision());var a=null==t&&isNaN(t)?"":"category"===e.type||"time"===e.type?e.scale.getLabel(Math.round(t)):t.toFixed(Math.min(r,20));return o.isFunction(n)?n(t,a):o.isString(n)?n.replace("{value}",a):a},_showDataInfo:function(t){t=this._dragging||t;var e=this._displayables.handleLabels;e[0].attr("invisible",!t),e[1].attr("invisible",!t)},_onDragMove:function(t,e,i){this._dragging=!0;var n=this._applyBarTransform([e,i],!0);this._updateInterval(t,n[0]),this._updateView(),this.dataZoomModel.get("realtime")&&this._dispatchZoomAction()},_onDragEnd:function(){this._dragging=!1,this._showDataInfo(!1),this._dispatchZoomAction()},_dispatchZoomAction:function(){var t=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,start:t[0],end:t[1]})},_applyBarTransform:function(t,e){var i=this._displayables.barGroup.getLocalTransform();return r.applyTransform(t,i,e)},_findCoordRect:function(){var t,e=this.getTargetInfo();if(e.cartesians.length)t=e.cartesians[0].model.coordinateSystem.getRect();else{var i=this.api.getWidth(),n=this.api.getHeight();t={x:.2*i,y:.2*n,width:.6*i,height:.6*n}}return t}});t.exports=S},function(t,e,i){function n(t){var e=t.getZr();return e[p]||(e[p]={})}function o(t,e,i){var n=new c(t.getZr());return n.enable(),n.on("pan",f(a,i)),n.on("zoom",f(s,i)),n}function r(t){h.each(t,function(e,i){e.count||(e.controller.dispose(),delete t[i])})}function a(t,e,i,n,o,r,a){l(t,function(s){return s.panGetRange(t.controller,e,i,n,o,r,a)})}function s(t,e,i,n){l(t,function(o){return o.zoomGetRange(t.controller,e,i,n)})}function l(t,e){var i=[];h.each(t.dataZoomInfos,function(t){var n=e(t);n&&i.push({dataZoomId:t.dataZoomId,start:n[0],end:n[1]})}),t.dispatchAction(i)}function u(t,e){t.dispatchAction({type:"dataZoom",batch:e})}var h=i(1),c=i(79),d=i(83),f=h.curry,p="\0_ec_dataZoom_roams",g={register:function(t,e){var i=n(t),a=e.dataZoomId,s=e.coordId;h.each(i,function(t,i){var n=t.dataZoomInfos;n[a]&&h.indexOf(e.allCoordIds,s)<0&&(delete n[a],t.count--)}),r(i);var l=i[s];l||(l=i[s]={coordId:s,dataZoomInfos:{},count:0},l.controller=o(t,e,l),l.dispatchAction=h.curry(u,t)),l.controller.setContainsPoint(e.containsPoint),d.createOrUpdate(l,"dispatchAction",e.throttleRate,"fixRate"),!l.dataZoomInfos[a]&&l.count++,l.dataZoomInfos[a]=e},unregister:function(t,e){var i=n(t);h.each(i,function(t){t.controller.dispose();var i=t.dataZoomInfos;i[e]&&(delete i[e],t.count--)}),r(i)},shouldRecordRange:function(t,e){if(t&&"dataZoom"===t.type&&t.batch)for(var i=0,n=t.batch.length;i<n;i++)if(t.batch[i].dataZoomId===e)return!1;return!0},generateCoordId:function(t){return t.type+"\0_"+t.id}};t.exports=g},function(t,e,i){i(112),i(40),i(41),i(183),i(184),i(109),i(108)},function(t,e,i){i(190),i(192),i(191);var n=i(2);n.registerProcessor(i(193))},function(t,e,i){"use strict";var n=i(1),o=i(10),r=i(2).extendComponentModel({type:"legend",dependencies:["series"],layoutMode:{type:"box",ignoreSize:!0},init:function(t,e,i){this.mergeDefaultAndTheme(t,i),t.selected=t.selected||{}},mergeOption:function(t){r.superCall(this,"mergeOption",t)},optionUpdated:function(){this._updateData(this.ecModel);var t=this._data;if(t[0]&&"single"===this.get("selectedMode")){for(var e=!1,i=0;i<t.length;i++){var n=t[i].get("name");if(this.isSelected(n)){this.select(n),e=!0;break}}!e&&this.select(t[0].get("name"))}},_updateData:function(t){var e=n.map(this.get("data")||[],function(t){return"string"!=typeof t&&"number"!=typeof t||(t={name:t}),new o(t,this,this.ecModel)},this);this._data=e;var i=n.map(t.getSeries(),function(t){return t.name});t.eachSeries(function(t){if(t.legendDataProvider){var e=t.legendDataProvider();i=i.concat(e.mapArray(e.getName))}}),this._availableNames=i},getData:function(){return this._data},select:function(t){var e=this.option.selected,i=this.get("selectedMode");if("single"===i){var o=this._data;n.each(o,function(t){e[t.get("name")]=!1})}e[t]=!0},unSelect:function(t){"single"!==this.get("selectedMode")&&(this.option.selected[t]=!1)},toggleSelected:function(t){var e=this.option.selected;e.hasOwnProperty(t)||(e[t]=!0),this[e[t]?"unSelect":"select"](t)},isSelected:function(t){var e=this.option.selected;return!(e.hasOwnProperty(t)&&!e[t])&&n.indexOf(this._availableNames,t)>=0},defaultOption:{zlevel:0,z:4,show:!0,orient:"horizontal",left:"center",top:"top",align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,inactiveColor:"#ccc",textStyle:{color:"#333"},selectedMode:!0,tooltip:{show:!1}}});t.exports=r},function(t,e,i){function n(t,e){e.dispatchAction({type:"legendToggleSelect",name:t})}function o(t,e,i){var n=i.getZr().storage.getDisplayList()[0];n&&n.useHoverLayer||t.get("legendHoverLink")&&i.dispatchAction({type:"highlight",seriesName:t.name,name:e})}function r(t,e,i){var n=i.getZr().storage.getDisplayList()[0];n&&n.useHoverLayer||t.get("legendHoverLink")&&i.dispatchAction({type:"downplay",seriesName:t.name,name:e})}var a=i(1),s=i(26),l=i(3),u=i(116),h=a.curry;t.exports=i(2).extendComponentView({type:"legend",init:function(){this._symbolTypeStore={}},render:function(t,e,i){var s=this.group;if(s.removeAll(),t.get("show")){var c=t.get("selectedMode"),d=t.get("align");"auto"===d&&(d="right"===t.get("left")&&"vertical"===t.get("orient")?"right":"left");var f={};a.each(t.getData(),function(a){var u=a.get("name");if(""===u||"\n"===u)return void s.add(new l.Group({newline:!0}));var p=e.getSeriesByName(u)[0];if(!f[u])if(p){var g=p.getData(),m=g.getVisual("color");"function"==typeof m&&(m=m(p.getDataParams(0)));var v=g.getVisual("legendSymbol")||"roundRect",y=g.getVisual("symbol"),x=this._createItem(u,a,t,v,y,d,m,c);x.on("click",h(n,u,i)).on("mouseover",h(o,p,null,i)).on("mouseout",h(r,p,null,i)),f[u]=!0}else e.eachRawSeries(function(e){if(!f[u]&&e.legendDataProvider){var s=e.legendDataProvider(),l=s.indexOfName(u);if(l<0)return;var p=s.getItemVisual(l,"color"),g="roundRect",m=this._createItem(u,a,t,g,null,d,p,c);m.on("click",h(n,u,i)).on("mouseover",h(o,e,u,i)).on("mouseout",h(r,e,u,i)),f[u]=!0}},this)},this),u.layout(s,t,i),u.addBackground(s,t)}},_createItem:function(t,e,i,n,o,r,u,h){var c=i.get("itemWidth"),d=i.get("itemHeight"),f=i.get("inactiveColor"),p=i.isSelected(t),g=new l.Group,m=e.getModel("textStyle"),v=e.get("icon"),y=e.getModel("tooltip"),x=y.parentModel;if(n=v||n,g.add(s.createSymbol(n,0,0,c,d,p?u:f)),!v&&o&&(o!==n||"none"==o)){var _=.8*d;"none"===o&&(o="circle"),g.add(s.createSymbol(o,(c-_)/2,(d-_)/2,_,_,p?u:f))}var b="left"===r?c+5:-5,w=r,S=i.get("formatter"),M=t;"string"==typeof S&&S?M=S.replace("{name}",t):"function"==typeof S&&(M=S(t));var T=new l.Text({style:{text:M,x:b,y:d/2,fill:p?m.getTextColor():f,textFont:m.getFont(),textAlign:w,textVerticalAlign:"middle"}});g.add(T);var I=new l.Rect({shape:g.getBoundingRect(),invisible:!0,tooltip:y.get("show")?a.extend({content:t,formatter:x.get("formatter",!0)||function(){return t},formatterParams:{componentType:"legend",legendIndex:i.componentIndex,name:t,$vars:["name"]}},y.option):null});return g.add(I),g.eachChild(function(t){t.silent=!0}),I.silent=!h,this.group.add(g),l.setHoverStyle(g),g}})},function(t,e,i){function n(t,e,i){var n,o={},a="toggleSelected"===t;return i.eachComponent("legend",function(i){a&&null!=n?i[n?"select":"unSelect"](e.name):(i[t](e.name),n=i.isSelected(e.name));var s=i.getData();r.each(s,function(t){var e=t.get("name");if("\n"!==e&&""!==e){var n=i.isSelected(e);e in o?o[e]=o[e]&&n:o[e]=n}})}),{name:e.name,selected:o}}var o=i(2),r=i(1);o.registerAction("legendToggleSelect","legendselectchanged",r.curry(n,"toggleSelected")),o.registerAction("legendSelect","legendselected",r.curry(n,"select")),o.registerAction("legendUnSelect","legendunselected",r.curry(n,"unSelect"))},function(t,e){t.exports=function(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&t.filterSeries(function(t){for(var i=0;i<e.length;i++)if(!e[i].isSelected(t.name))return!1;return!0})}},function(t,e,i){i(197),i(198),i(2).registerPreprocessor(function(t){t.markArea=t.markArea||{}})},function(t,e,i){i(199),i(200),i(2).registerPreprocessor(function(t){t.markLine=t.markLine||{}})},function(t,e,i){i(201),i(202),i(2).registerPreprocessor(function(t){t.markPoint=t.markPoint||{}})},function(t,e,i){t.exports=i(67).extend({type:"markArea",defaultOption:{zlevel:0,z:1,tooltip:{trigger:"item"},animation:!1,label:{normal:{show:!0,position:"top"},emphasis:{show:!0,position:"top"}},itemStyle:{normal:{borderWidth:0}}}})},function(t,e,i){function n(t){return!isNaN(t)&&!isFinite(t)}function o(t,e,i,o){var r=1-t;return n(e[r])&&n(i[r])}function r(t,e){var i=e.coord[0],n=e.coord[1];return!("cartesian2d"!==t.type||!i||!n||!o(1,i,n,t)&&!o(0,i,n,t))||(f.dataFilter(t,{coord:i,x:e.x0,y:e.y0})||f.dataFilter(t,{coord:n,x:e.x1,y:e.y1}))}function a(t,e,i,o,r){var a,s=o.coordinateSystem,l=t.getItemModel(e),u=h.parsePercent(l.get(i[0]),r.getWidth()),c=h.parsePercent(l.get(i[1]),r.getHeight());if(isNaN(u)||isNaN(c)){if(o.getMarkerPosition)a=o.getMarkerPosition(t.getValues(i,e));else{var d=t.get(i[0],e),f=t.get(i[1],e);a=s.dataToPoint([d,f],!0)}if("cartesian2d"===s.type){var p=s.getAxis("x"),g=s.getAxis("y"),d=t.get(i[0],e),f=t.get(i[1],e);n(d)?a[0]=p.toGlobalCoord(p.getExtent()["x0"===i[0]?0:1]):n(f)&&(a[1]=g.toGlobalCoord(g.getExtent()["y0"===i[1]?0:1]))}isNaN(u)||(a[0]=u),isNaN(c)||(a[1]=c)}else a=[u,c];return a}function s(t,e,i){var n,o,a=["x0","y0","x1","y1"];t?(n=l.map(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.coordDimToDataDim(t)[0])||{};return i.name=t,i}),o=new u(l.map(a,function(t,e){return{name:t,type:n[e%2].type}}),i)):(n=[{name:"value",type:"float"}],o=new u(n,i));var s=l.map(i.get("data"),l.curry(p,e,t,i));t&&(s=l.filter(s,l.curry(r,t)));var h=t?function(t,e,i,n){return t.coord[Math.floor(n/2)][n%2]}:function(t){return t.value};return o.initData(s,null,h),o.hasItemOption=!0,o}var l=i(1),u=i(14),h=i(4),c=i(3),d=i(18),f=i(69),p=function(t,e,i,n){var o=f.dataTransform(t,n[0]),r=f.dataTransform(t,n[1]),a=l.retrieve,s=o.coord,u=r.coord;s[0]=a(s[0],-(1/0)),s[1]=a(s[1],-(1/0)),u[0]=a(u[0],1/0),u[1]=a(u[1],1/0);var h=l.mergeAll([{},o,r]);return h.coord=[o.coord,r.coord],h.x0=o.x,h.y0=o.y,h.x1=r.x,h.y1=r.y,h},g=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]];i(68).extend({type:"markArea",updateLayout:function(t,e,i){e.eachSeries(function(t){var e=t.markAreaModel;if(e){var n=e.getData();n.each(function(e){var o=l.map(g,function(o){return a(n,e,o,t,i)});n.setItemLayout(e,o);var r=n.getItemGraphicEl(e);r.setShape("points",o)})}},this)},renderSeries:function(t,e,i,n){var o=t.coordinateSystem,r=t.name,u=t.getData(),h=this.markerGroupMap,f=h[r];f||(f=h[r]={group:new c.Group}),this.group.add(f.group),f.__keep=!0;var p=s(o,t,e);e.setData(p),p.each(function(e){p.setItemLayout(e,l.map(g,function(i){return a(p,e,i,t,n)})),p.setItemVisual(e,{color:u.getVisual("color")})}),p.diff(f.__data).add(function(t){var e=new c.Polygon({shape:{points:p.getItemLayout(t)}});p.setItemGraphicEl(t,e),f.group.add(e)}).update(function(t,i){var n=f.__data.getItemGraphicEl(i);c.updateProps(n,{shape:{points:p.getItemLayout(t)}},e,t),f.group.add(n),p.setItemGraphicEl(t,n)}).remove(function(t){var e=f.__data.getItemGraphicEl(t);f.group.remove(e)}).execute(),p.eachItemGraphicEl(function(t,i){var n=p.getItemModel(i),o=n.getModel("label.normal"),r=n.getModel("label.emphasis"),a=p.getItemVisual(i,"color");t.useStyle(l.defaults(n.getModel("itemStyle.normal").getItemStyle(),{fill:d.modifyAlpha(a,.4),stroke:a})),t.hoverStyle=n.getModel("itemStyle.normal").getItemStyle();var s=p.getName(i)||"",u=a||t.style.fill;c.setText(t.style,o,u),t.style.text=l.retrieve(e.getFormattedLabel(i,"normal"),s),c.setText(t.hoverStyle,r,u),t.hoverStyle.text=l.retrieve(e.getFormattedLabel(i,"emphasis"),s),c.setHoverStyle(t,{}),t.dataModel=e}),f.__data=p,f.group.silent=e.get("silent")||t.get("silent")}})},function(t,e,i){t.exports=i(67).extend({type:"markLine",defaultOption:{zlevel:0,z:5,symbol:["circle","arrow"],symbolSize:[8,16],precision:2,tooltip:{trigger:"item"},label:{normal:{show:!0,position:"end"},emphasis:{show:!0}},lineStyle:{normal:{type:"dashed"},emphasis:{width:3}},animationEasing:"linear"}})},function(t,e,i){function n(t){return!isNaN(t)&&!isFinite(t)}function o(t,e,i,o){var r=1-t,a=o.dimensions[t];return n(e[r])&&n(i[r])&&e[t]===i[t]&&o.getAxis(a).containData(e[t])}function r(t,e){if("cartesian2d"===t.type){var i=e[0].coord,n=e[1].coord;if(i&&n&&(o(1,i,n,t)||o(0,i,n,t)))return!0}return c.dataFilter(t,e[0])&&c.dataFilter(t,e[1])}function a(t,e,i,o,r){var a,s=o.coordinateSystem,l=t.getItemModel(e),u=h.parsePercent(l.get("x"),r.getWidth()),c=h.parsePercent(l.get("y"),r.getHeight());if(isNaN(u)||isNaN(c)){if(o.getMarkerPosition)a=o.getMarkerPosition(t.getValues(t.dimensions,e));else{var d=s.dimensions,f=t.get(d[0],e),p=t.get(d[1],e);a=s.dataToPoint([f,p])}if("cartesian2d"===s.type){var g=s.getAxis("x"),m=s.getAxis("y"),d=s.dimensions;n(t.get(d[0],e))?a[0]=g.toGlobalCoord(g.getExtent()[i?0:1]):n(t.get(d[1],e))&&(a[1]=m.toGlobalCoord(m.getExtent()[i?0:1]))}isNaN(u)||(a[0]=u),isNaN(c)||(a[1]=c)}else a=[u,c];t.setItemLayout(e,a)}function s(t,e,i){var n;n=t?l.map(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.coordDimToDataDim(t)[0])||{};return i.name=t,i}):[{name:"value",type:"float"}];var o=new u(n,i),a=new u(n,i),s=new u([],i),h=l.map(i.get("data"),l.curry(f,e,t,i));t&&(h=l.filter(h,l.curry(r,t)));var d=t?c.dimValueGetter:function(t){return t.value};return o.initData(l.map(h,function(t){return t[0]}),null,d),a.initData(l.map(h,function(t){return t[1]}),null,d),s.initData(l.map(h,function(t){return t[2]})),s.hasItemOption=!0,{from:o,to:a,line:s}}var l=i(1),u=i(14),h=i(4),c=i(69),d=i(95),f=function(t,e,i,n){var o=t.getData(),r=n.type;if(!l.isArray(n)&&("min"===r||"max"===r||"average"===r||null!=n.xAxis||null!=n.yAxis)){var a,s,u;if(null!=n.yAxis||null!=n.xAxis)s=null!=n.yAxis?"y":"x",a=e.getAxis(s),u=l.retrieve(n.yAxis,n.xAxis);else{var h=c.getAxisInfo(n,o,e,t);s=h.valueDataDim,a=h.valueAxis,u=c.numCalculate(o,s,r)}var d="x"===s?0:1,f=1-d,p=l.clone(n),g={};p.type=null,p.coord=[],g.coord=[],p.coord[f]=-(1/0),g.coord[f]=1/0;var m=i.get("precision");m>=0&&"number"==typeof u&&(u=+u.toFixed(m)),p.coord[d]=g.coord[d]=u,n=[p,g,{type:r,valueIndex:n.valueIndex,value:u}]}return n=[c.dataTransform(t,n[0]),c.dataTransform(t,n[1]),l.extend({},n[2])],n[2].type=n[2].type||"",l.merge(n[2],n[0]),l.merge(n[2],n[1]),n};i(68).extend({type:"markLine",updateLayout:function(t,e,i){e.eachSeries(function(t){var e=t.markLineModel;if(e){var n=e.getData(),o=e.__from,r=e.__to;o.each(function(e){a(o,e,!0,t,i),a(r,e,!1,t,i)}),n.each(function(t){n.setItemLayout(t,[o.getItemLayout(t),r.getItemLayout(t)])}),this.markerGroupMap[t.name].updateLayout()}},this)},renderSeries:function(t,e,i,n){function o(e,i,o){var r=e.getItemModel(i);a(e,i,o,t,n),e.setItemVisual(i,{symbolSize:r.get("symbolSize")||x[o?0:1],symbol:r.get("symbol",!0)||y[o?0:1],color:r.get("itemStyle.normal.color")||h.getVisual("color")})}var r=t.coordinateSystem,u=t.name,h=t.getData(),c=this.markerGroupMap,f=c[u];f||(f=c[u]=new d),this.group.add(f.group);var p=s(r,t,e),g=p.from,m=p.to,v=p.line;e.__from=g,e.__to=m,e.setData(v);var y=e.get("symbol"),x=e.get("symbolSize");l.isArray(y)||(y=[y,y]),"number"==typeof x&&(x=[x,x]),p.from.each(function(t){o(g,t,!0),o(m,t,!1)}),v.each(function(t){var e=v.getItemModel(t).get("lineStyle.normal.color");v.setItemVisual(t,{color:e||g.getItemVisual(t,"color")}),v.setItemLayout(t,[g.getItemLayout(t),m.getItemLayout(t)]),v.setItemVisual(t,{fromSymbolSize:g.getItemVisual(t,"symbolSize"),fromSymbol:g.getItemVisual(t,"symbol"),toSymbolSize:m.getItemVisual(t,"symbolSize"),toSymbol:m.getItemVisual(t,"symbol")})}),f.updateData(v),p.line.eachItemGraphicEl(function(t,i){t.traverse(function(t){t.dataModel=e})}),f.__keep=!0,f.group.silent=e.get("silent")||t.get("silent")}})},function(t,e,i){t.exports=i(67).extend({type:"markPoint",defaultOption:{zlevel:0,z:5,symbol:"pin",symbolSize:50,tooltip:{trigger:"item"},label:{normal:{show:!0,position:"inside"},emphasis:{show:!0}},itemStyle:{normal:{borderWidth:2}}}})},function(t,e,i){function n(t,e,i){var n=e.coordinateSystem;t.each(function(o){var r,a=t.getItemModel(o),l=s.parsePercent(a.get("x"),i.getWidth()),u=s.parsePercent(a.get("y"),i.getHeight());if(isNaN(l)||isNaN(u)){if(e.getMarkerPosition)r=e.getMarkerPosition(t.getValues(t.dimensions,o));else if(n){var h=t.get(n.dimensions[0],o),c=t.get(n.dimensions[1],o);r=n.dataToPoint([h,c])}}else r=[l,u];isNaN(l)||(r[0]=l),isNaN(u)||(r[1]=u),t.setItemLayout(o,r)})}function o(t,e,i){var n;n=t?a.map(t&&t.dimensions,function(t){var i=e.getData().getDimensionInfo(e.coordDimToDataDim(t)[0])||{};return i.name=t,i}):[{name:"value",type:"float"}];var o=new l(n,i),r=a.map(i.get("data"),a.curry(u.dataTransform,e));return t&&(r=a.filter(r,a.curry(u.dataFilter,t))),o.initData(r,null,t?u.dimValueGetter:function(t){return t.value}),o}var r=i(39),a=i(1),s=i(4),l=i(14),u=i(69);i(68).extend({type:"markPoint",updateLayout:function(t,e,i){e.eachSeries(function(t){var e=t.markPointModel;e&&(n(e.getData(),t,i),this.markerGroupMap[t.name].updateLayout(e))},this)},renderSeries:function(t,e,i,a){var s=t.coordinateSystem,l=t.name,u=t.getData(),h=this.markerGroupMap,c=h[l];c||(c=h[l]=new r); +var d=o(s,t,e);e.setData(d),n(e.getData(),t,a),d.each(function(t){var i=d.getItemModel(t),n=i.getShallow("symbolSize");"function"==typeof n&&(n=n(e.getRawValue(t),e.getDataParams(t))),d.setItemVisual(t,{symbolSize:n,color:i.get("itemStyle.normal.color")||u.getVisual("color"),symbol:i.getShallow("symbol")})}),c.updateData(d),this.group.add(c.group),d.eachItemGraphicEl(function(t){t.traverse(function(t){t.dataModel=e})}),c.__keep=!0,c.group.silent=e.get("silent")||t.get("silent")}})},function(t,e,i){"use strict";var n=i(2),o=i(3),r=i(13);n.extendComponentModel({type:"title",layoutMode:{type:"box",ignoreSize:!0},defaultOption:{zlevel:0,z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}}}),n.extendComponentView({type:"title",render:function(t,e,i){if(this.group.removeAll(),t.get("show")){var n=this.group,a=t.getModel("textStyle"),s=t.getModel("subtextStyle"),l=t.get("textAlign"),u=t.get("textBaseline"),h=new o.Text({style:{text:t.get("text"),textFont:a.getFont(),fill:a.getTextColor()},z2:10}),c=h.getBoundingRect(),d=t.get("subtext"),f=new o.Text({style:{text:d,textFont:s.getFont(),fill:s.getTextColor(),y:c.height+t.get("itemGap"),textBaseline:"top"},z2:10}),p=t.get("link"),g=t.get("sublink");h.silent=!p,f.silent=!g,p&&h.on("click",function(){window.open(p,"_"+t.get("target"))}),g&&f.on("click",function(){window.open(g,"_"+t.get("subtarget"))}),n.add(h),d&&n.add(f);var m=n.getBoundingRect(),v=t.getBoxLayoutParams();v.width=m.width,v.height=m.height;var y=r.getLayoutRect(v,{width:i.getWidth(),height:i.getHeight()},t.get("padding"));l||(l=t.get("left")||t.get("right"),"middle"===l&&(l="center"),"right"===l?y.x+=y.width:"center"===l&&(y.x+=y.width/2)),u||(u=t.get("top")||t.get("bottom"),"center"===u&&(u="middle"),"bottom"===u?y.y+=y.height:"middle"===u&&(y.y+=y.height/2),u=u||"top"),n.attr("position",[y.x,y.y]);var x={textAlign:l,textVerticalAlign:u};h.setStyle(x),f.setStyle(x),m=n.getBoundingRect();var _=y.margin,b=t.getItemStyle(["color","opacity"]);b.fill=t.get("backgroundColor");var w=new o.Rect({shape:{x:m.x-_[3],y:m.y-_[0],width:m.width+_[1]+_[3],height:m.height+_[0]+_[2]},style:b,silent:!0});o.subPixelOptimizeRect(w),n.add(w)}}})},function(t,e,i){i(205),i(206),i(211),i(209),i(207),i(208),i(210)},function(t,e,i){var n=i(25),o=i(1),r=i(2).extendComponentModel({type:"toolbox",layoutMode:{type:"box",ignoreSize:!0},mergeDefaultAndTheme:function(t){r.superApply(this,"mergeDefaultAndTheme",arguments),o.each(this.option.feature,function(t,e){var i=n.get(e);i&&o.merge(t,i.defaultOption)})},defaultOption:{show:!0,z:6,zlevel:0,orient:"horizontal",left:"right",top:"top",backgroundColor:"transparent",borderColor:"#ccc",borderWidth:0,padding:5,itemSize:15,itemGap:8,showTitle:!0,iconStyle:{normal:{borderColor:"#666",color:"none"},emphasis:{borderColor:"#3E98C5"}}}});t.exports=r},function(t,e,i){(function(e){function n(t){return 0===t.indexOf("my")}var o=i(25),r=i(1),a=i(3),s=i(10),l=i(45),u=i(116),h=i(16);t.exports=i(2).extendComponentView({type:"toolbox",render:function(t,e,i,c){function d(r,a){var l,u=y[r],h=y[a],d=m[u],p=new s(d,t,t.ecModel);if(u&&!h){if(n(u))l={model:p,onclick:p.option.onclick,featureName:u};else{var g=o.get(u);if(!g)return;l=new g(p,e,i)}v[u]=l}else{if(l=v[h],!l)return;l.model=p,l.ecModel=e,l.api=i}return!u&&h?void(l.dispose&&l.dispose(e,i)):!p.get("show")||l.unusable?void(l.remove&&l.remove(e,i)):(f(p,l,u),p.setIconStatus=function(t,e){var i=this.option,n=this.iconPaths;i.iconStatus=i.iconStatus||{},i.iconStatus[t]=e,n[t]&&n[t].trigger(e)},void(l.render&&l.render(p,e,i,c)))}function f(n,o,s){var l=n.getModel("iconStyle"),u=o.getIcons?o.getIcons():n.get("icon"),h=n.get("title")||{};if("string"==typeof u){var c=u,d=h;u={},h={},u[s]=c,h[s]=d}var f=n.iconPaths={};r.each(u,function(s,u){var c=l.getModel("normal").getItemStyle(),d=l.getModel("emphasis").getItemStyle(),m={x:-g/2,y:-g/2,width:g,height:g},v=0===s.indexOf("image://")?(m.image=s.slice(8),new a.Image({style:m})):a.makePath(s.replace("path://",""),{style:c,hoverStyle:d,rectHover:!0},m,"center");a.setHoverStyle(v),t.get("showTitle")&&(v.__title=h[u],v.on("mouseover",function(){var t=l.getModel("emphasis").getItemStyle();v.setStyle({text:h[u],textPosition:t.textPosition||"bottom",textFill:t.fill||t.stroke||"#000",textAlign:t.textAlign||"center"})}).on("mouseout",function(){v.setStyle({textFill:null})})),v.trigger(n.get("iconStatus."+u)||"normal"),p.add(v),v.on("click",r.bind(o.onclick,o,e,i,u)),f[u]=v})}var p=this.group;if(p.removeAll(),t.get("show")){var g=+t.get("itemSize"),m=t.get("feature")||{},v=this._features||(this._features={}),y=[];r.each(m,function(t,e){y.push(e)}),new l(this._featureNames||[],y).add(d).update(d).remove(r.curry(d,null)).execute(),this._featureNames=y,u.layout(p,t,i),u.addBackground(p,t),p.eachChild(function(t){var e=t.__title,n=t.hoverStyle;if(n&&e){var o=h.getBoundingRect(e,n.font),r=t.position[0]+p.position[0],a=t.position[1]+p.position[1]+g,s=!1;a+o.height>i.getHeight()&&(n.textPosition="top",s=!0);var l=s?-5-o.height:g+8;r+o.width/2>i.getWidth()?(n.textPosition=["100%",l],n.textAlign="right"):r-o.width/2<0&&(n.textPosition=[0,l],n.textAlign="left")}})}},updateView:function(t,e,i,n){r.each(this._features,function(t){t.updateView&&t.updateView(t.model,e,i,n)})},updateLayout:function(t,e,i,n){r.each(this._features,function(t){t.updateLayout&&t.updateLayout(t.model,e,i,n)})},remove:function(t,e){r.each(this._features,function(i){i.remove&&i.remove(t,e)}),this.group.removeAll()},dispose:function(t,e){r.each(this._features,function(i){i.dispose&&i.dispose(t,e)})}})}).call(e,i(217))},function(t,e,i){function n(t){var e={},i=[],n=[];return t.eachRawSeries(function(t){var o=t.coordinateSystem;if(!o||"cartesian2d"!==o.type&&"polar"!==o.type)i.push(t);else{var r=o.getBaseAxis();if("category"===r.type){var a=r.dim+"_"+r.index;e[a]||(e[a]={categoryAxis:r,valueAxis:o.getOtherAxis(r),series:[]},n.push({axisDim:r.dim,axisIndex:r.index})),e[a].series.push(t)}else i.push(t)}}),{seriesGroupByCategoryAxis:e,other:i,meta:n}}function o(t){var e=[];return p.each(t,function(t,i){var n=t.categoryAxis,o=t.valueAxis,r=o.dim,a=[" "].concat(p.map(t.series,function(t){return t.name})),s=[n.model.getCategories()];p.each(t.series,function(t){s.push(t.getRawData().mapArray(r,function(t){return t}))});for(var l=[a.join(v)],u=0;u<s[0].length;u++){for(var h=[],c=0;c<s.length;c++)h.push(s[c][u]);l.push(h.join(v))}e.push(l.join("\n"))}),e.join("\n\n"+m+"\n\n")}function r(t){return p.map(t,function(t){var e=t.getRawData(),i=[t.name],n=[];return e.each(e.dimensions,function(){for(var t=arguments.length,o=arguments[t-1],r=e.getName(o),a=0;a<t-1;a++)n[a]=arguments[a];i.push((r?r+v:"")+n.join(v))}),i.join("\n")}).join("\n\n"+m+"\n\n")}function a(t){var e=n(t);return{value:p.filter([o(e.seriesGroupByCategoryAxis),r(e.other)],function(t){return t.replace(/[\n\t\s]/g,"")}).join("\n\n"+m+"\n\n"),meta:e.meta}}function s(t){return t.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function l(t){var e=t.slice(0,t.indexOf("\n"));if(e.indexOf(v)>=0)return!0}function u(t){for(var e=t.split(/\n+/g),i=s(e.shift()).split(y),n=[],o=p.map(i,function(t){return{name:t,data:[]}}),r=0;r<e.length;r++){var a=s(e[r]).split(y);n.push(a.shift());for(var l=0;l<a.length;l++)o[l]&&(o[l].data[r]=a[l])}return{series:o,categories:n}}function h(t){for(var e=t.split(/\n+/g),i=s(e.shift()),n=[],o=0;o<e.length;o++){var r,a=s(e[o]).split(y),l="",u=!1;isNaN(a[0])?(u=!0,l=a[0],a=a.slice(1),n[o]={name:l,value:[]},r=n[o].value):r=n[o]=[];for(var h=0;h<a.length;h++)r.push(+a[h]);1===r.length&&(u?n[o].value=r[0]:n[o]=r[0])}return{name:i,data:n}}function c(t,e){var i=t.split(new RegExp("\n*"+m+"\n*","g")),n={series:[]};return p.each(i,function(t,i){if(l(t)){var o=u(t),r=e[i],a=r.axisDim+"Axis";r&&(n[a]=n[a]||[],n[a][r.axisIndex]={data:o.categories},n.series=n.series.concat(o.series))}else{var o=h(t);n.series.push(o)}}),n}function d(t){this._dom=null,this.model=t}function f(t,e){return p.map(t,function(t,i){var n=e&&e[i];return p.isObject(n)&&!p.isArray(n)?(p.isObject(t)&&!p.isArray(t)&&(t=t.value),p.defaults({value:t},n)):t})}var p=i(1),g=i(24),m=new Array(60).join("-"),v="\t",y=new RegExp("["+v+"]+","g");d.defaultOption={show:!0,readOnly:!1,optionToContent:null,contentToOption:null,icon:"M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28",title:"数据视图",lang:["数据视图","关闭","刷新"],backgroundColor:"#fff",textColor:"#000",textareaColor:"#fff",textareaBorderColor:"#333",buttonColor:"#c23531",buttonTextColor:"#fff"},d.prototype.onclick=function(t,e){function i(){n.removeChild(r),M._dom=null}var n=e.getDom(),o=this.model;this._dom&&n.removeChild(this._dom);var r=document.createElement("div");r.style.cssText="position:absolute;left:5px;top:5px;bottom:5px;right:5px;",r.style.backgroundColor=o.get("backgroundColor")||"#fff";var s=document.createElement("h4"),l=o.get("lang")||[];s.innerHTML=l[0]||o.get("title"),s.style.cssText="margin: 10px 20px;",s.style.color=o.get("textColor");var u=document.createElement("div"),h=document.createElement("textarea");u.style.cssText="display:block;width:100%;overflow:hidden;";var d=o.get("optionToContent"),f=o.get("contentToOption"),m=a(t);if("function"==typeof d){var y=d(e.getOption());"string"==typeof y?u.innerHTML=y:p.isDom(y)&&u.appendChild(y)}else u.appendChild(h),h.readOnly=o.get("readOnly"),h.style.cssText="width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;",h.style.color=o.get("textColor"),h.style.borderColor=o.get("textareaBorderColor"),h.style.backgroundColor=o.get("textareaColor"),h.value=m.value;var x=m.meta,_=document.createElement("div");_.style.cssText="position:absolute;bottom:0;left:0;right:0;";var b="float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px",w=document.createElement("div"),S=document.createElement("div");b+=";background-color:"+o.get("buttonColor"),b+=";color:"+o.get("buttonTextColor");var M=this;g.addEventListener(w,"click",i),g.addEventListener(S,"click",function(){var t;try{t="function"==typeof f?f(u,e.getOption()):c(h.value,x)}catch(n){throw i(),new Error("Data view format error "+n)}t&&e.dispatchAction({type:"changeDataView",newOption:t}),i()}),w.innerHTML=l[1],S.innerHTML=l[2],S.style.cssText=b,w.style.cssText=b,!o.get("readOnly")&&_.appendChild(S),_.appendChild(w),g.addEventListener(h,"keydown",function(t){if(9===(t.keyCode||t.which)){var e=this.value,i=this.selectionStart,n=this.selectionEnd;this.value=e.substring(0,i)+v+e.substring(n),this.selectionStart=this.selectionEnd=i+1,g.stop(t)}}),r.appendChild(s),r.appendChild(u),r.appendChild(_),u.style.height=n.clientHeight-80+"px",n.appendChild(r),this._dom=r},d.prototype.remove=function(t,e){this._dom&&e.getDom().removeChild(this._dom)},d.prototype.dispose=function(t,e){this.remove(t,e)},i(25).register("dataView",d),i(2).registerAction({type:"changeDataView",event:"dataViewChanged",update:"prepareAndUpdate"},function(t,e){var i=[];p.each(t.newOption.series,function(t){var n=e.getSeriesByName(t.name)[0];if(n){var o=n.get("data");i.push({name:t.name,data:f(t.data,o)})}else i.push(p.extend({type:"scatter"},t))}),e.mergeOption(p.defaults({series:i},t.newOption))}),t.exports=d},function(t,e,i){"use strict";function n(t,e,i){(this._brushController=new l(i.getZr())).on("brush",s.bind(this._onBrush,this)).mount(),this._isZoomActive}function o(t){var e={};return s.each(["xAxisIndex","yAxisIndex"],function(i){e[i]=t[i],null==e[i]&&(e[i]="all"),(e[i]===!1||"none"===e[i])&&(e[i]=[])}),e}function r(t,e){t.setIconStatus("back",h.count(e)>1?"emphasis":"normal")}function a(t,e,i,n){var r=i._isZoomActive;n&&"takeGlobalCursor"===n.type&&(r="dataZoomSelect"===n.key&&n.dataZoomSelectActive),i._isZoomActive=r,t.setIconStatus("zoom",r?"emphasis":"normal");var a=u.makeCoordInfoList(o(t.option),e),s=a.xAxisHas&&!a.yAxisHas?"lineX":!a.xAxisHas&&a.yAxisHas?"lineY":"rect";i._brushController.setPanels(u.makePanelOpts(a)).enableBrush(!!r&&{brushType:s,brushStyle:{lineWidth:0,fill:"rgba(0,0,0,0.2)"}})}var s=i(1),l=i(113),u=i(114),h=i(111),c=s.each;i(188);var d="\0_ec_\0toolbox-dataZoom_";n.defaultOption={show:!0,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:{zoom:"区域缩放",back:"区域缩放还原"}};var f=n.prototype;f.render=function(t,e,i,n){this.model=t,this.ecModel=e,this.api=i,a(t,e,this,n),r(t,e)},f.onclick=function(t,e,i){p[i].call(this)},f.remove=function(t,e){this._brushController.unmount()},f.dispose=function(t,e){this._brushController.dispose()};var p={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(h.pop(this.ecModel))}};f._onBrush=function(t,e){function i(t,e,i){var o=n(t,i[t],a);o&&(r[o.id]={dataZoomId:o.id,startValue:e[0],endValue:e[1]})}function n(t,e,i){var n;return i.eachComponent({mainType:"dataZoom",subType:"select"},function(o,r){var a=o.get(t+"Index");null!=a&&i.getComponent(t,a)===e&&(n=o)}),n}if(e.isEnd&&t.length){var r={},a=this.ecModel;this._brushController.updateCovers([]);var s=u.makeCoordInfoList(o(this.model.option),a),l=[];u.parseOutputRanges(t,s,a,l);var c=t[0],d=l[0],f=c.coordRange,p=c.brushType;if(d&&f)if("rect"===p)i("xAxis",f[0],d),i("yAxis",f[1],d);else{var g={lineX:"xAxis",lineY:"yAxis"};i(g[p],f,d)}h.push(a,r),this._dispatchZoomAction(r)}},f._dispatchZoomAction=function(t){var e=[];c(t,function(t,i){e.push(s.clone(t))}),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},i(25).register("dataZoom",n),i(2).registerPreprocessor(function(t){function e(t,e){if(e){var o=t+"Index",r=e[o];null==r||"all"==r||s.isArray(r)||(r=r===!1||"none"===r?[]:[r]),i(t,function(e,i){if(null==r||"all"==r||s.indexOf(r,i)!==-1){var a={type:"select",$fromToolbox:!0,id:d+t+i};a[o]=i,n.push(a)}})}}function i(e,i){var n=t[e];s.isArray(n)||(n=n?[n]:[]),c(n,i)}if(t){var n=t.dataZoom||(t.dataZoom=[]);s.isArray(n)||(t.dataZoom=n=[n]);var o=t.toolbox;if(o&&(s.isArray(o)&&(o=o[0]),o&&o.feature)){var r=o.feature.dataZoom;e("xAxis",r),e("yAxis",r)}}}),t.exports=n},function(t,e,i){"use strict";function n(t){this.model=t}var o=i(1);n.defaultOption={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",tiled:"M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z"},title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"},option:{},seriesIndex:{}};var r=n.prototype;r.getIcons=function(){var t=this.model,e=t.get("icon"),i={};return o.each(t.get("type"),function(t){e[t]&&(i[t]=e[t])}),i};var a={line:function(t,e,i,n){if("bar"===t)return o.merge({id:e,type:"line",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},n.get("option.line")||{},!0)},bar:function(t,e,i,n){if("line"===t)return o.merge({id:e,type:"bar",data:i.get("data"),stack:i.get("stack"),markPoint:i.get("markPoint"),markLine:i.get("markLine")},n.get("option.bar")||{},!0)},stack:function(t,e,i,n){if("line"===t||"bar"===t)return o.merge({id:e,stack:"__ec_magicType_stack__"},n.get("option.stack")||{},!0)},tiled:function(t,e,i,n){if("line"===t||"bar"===t)return o.merge({id:e,stack:""},n.get("option.tiled")||{},!0)}},s=[["line","bar"],["stack","tiled"]];r.onclick=function(t,e,i){var n=this.model,r=n.get("seriesIndex."+i);if(a[i]){var l={series:[]},u=function(e){var r=e.subType,s=e.id,u=a[i](r,s,e,n);u&&(o.defaults(u,e.option),l.series.push(u));var h=e.coordinateSystem;if(h&&"cartesian2d"===h.type&&("line"===i||"bar"===i)){var c=h.getAxesByScale("ordinal")[0];if(c){var d=c.dim,f=d+"Axis",p=t.queryComponents({mainType:f,index:e.get(name+"Index"),id:e.get(name+"Id")})[0],g=p.componentIndex;l[f]=l[f]||[];for(var m=0;m<=g;m++)l[f][g]=l[f][g]||{};l[f][g].boundaryGap="bar"===i}}};o.each(s,function(t){o.indexOf(t,i)>=0&&o.each(t,function(t){n.setIconStatus(t,"normal")})}),n.setIconStatus(i,"emphasis"),t.eachComponent({mainType:"series",query:null==r?null:{seriesIndex:r}},u),e.dispatchAction({type:"changeMagicType",currentType:i,newOption:l})}};var l=i(2);l.registerAction({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},function(t,e){e.mergeOption(t.newOption)}),i(25).register("magicType",n),t.exports=n},function(t,e,i){"use strict";function n(t){this.model=t}var o=i(111);n.defaultOption={show:!0,icon:"M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5",title:"还原"};var r=n.prototype;r.onclick=function(t,e,i){o.clear(t),e.dispatchAction({type:"restore",from:this.uid})},i(25).register("restore",n),i(2).registerAction({type:"restore",event:"restore",update:"prepareAndUpdate"},function(t,e){e.resetOption("recreate")}),t.exports=n},function(t,e,i){function n(t){this.model=t}var o=i(11);n.defaultOption={show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:"保存为图片",type:"png",name:"",excludeComponents:["toolbox"],pixelRatio:1,lang:["右键另存为图片"]},n.prototype.unusable=!o.canvasSupported;var r=n.prototype;r.onclick=function(t,e){var i=this.model,n=i.get("name")||t.get("title.0.text")||"echarts",o=document.createElement("a"),r=i.get("type",!0)||"png";o.download=n+"."+r,o.target="_blank";var a=e.getConnectedDataURL({type:r,backgroundColor:i.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",excludeComponents:i.get("excludeComponents"),pixelRatio:i.get("pixelRatio")});if(o.href=a,"function"==typeof MouseEvent){var s=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1});o.dispatchEvent(s)}else{var l=i.get("lang"),u='<body style="margin:0;"><img src="'+a+'" style="max-width:100%;" title="'+(l&&l[0]||"")+'" /></body>',h=window.open();h.document.write(u)}},i(25).register("saveAsImage",n),t.exports=n},function(t,e,i){i(214),i(215),i(2).registerAction({type:"showTip",event:"showTip",update:"none"},function(){}),i(2).registerAction({type:"hideTip",event:"hideTip",update:"none"},function(){})},function(t,e,i){function n(t){var e="cubic-bezier(0.23, 1, 0.32, 1)",i="left "+t+"s "+e+",top "+t+"s "+e;return s.map(p,function(t){return t+"transition:"+i}).join(";")}function o(t){var e=[],i=t.get("fontSize"),n=t.getTextColor();return n&&e.push("color:"+n),e.push("font:"+t.getFont()),i&&e.push("line-height:"+Math.round(3*i/2)+"px"),c(["decoration","align"],function(i){var n=t.get(i);n&&e.push("text-"+i+":"+n)}),e.join(";")}function r(t){t=t;var e=[],i=t.get("transitionDuration"),r=t.get("backgroundColor"),a=t.getModel("textStyle"),s=t.get("padding");return i&&e.push(n(i)),r&&(f.canvasSupported?e.push("background-Color:"+r):(e.push("background-Color:#"+l.toHex(r)),e.push("filter:alpha(opacity=70)"))),c(["width","color","radius"],function(i){var n="border-"+i,o=d(n),r=t.get(o);null!=r&&e.push(n+":"+r+("color"===i?"":"px"))}),e.push(o(a)),null!=s&&e.push("padding:"+h.normalizeCssArray(s).join("px ")+"px"),e.join(";")+";"}function a(t,e){var i=document.createElement("div"),n=e.getZr();this.el=i,this._x=e.getWidth()/2,this._y=e.getHeight()/2,t.appendChild(i),this._container=t,this._show=!1,this._hideTimeout;var o=this;i.onmouseenter=function(){o.enterable&&(clearTimeout(o._hideTimeout),o._show=!0),o._inContent=!0},i.onmousemove=function(e){if(e=e||window.event,!o.enterable){var i=n.handler;u.normalizeEvent(t,e,!0),i.dispatch("mousemove",e)}},i.onmouseleave=function(){o.enterable&&o._show&&o.hideLater(o._hideDelay),o._inContent=!1}}var s=i(1),l=i(18),u=i(24),h=i(9),c=s.each,d=h.toCamelCase,f=i(11),p=["","-webkit-","-moz-","-o-"],g="position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;";a.prototype={constructor:a,enterable:!0,update:function(){var t=this._container,e=t.currentStyle||document.defaultView.getComputedStyle(t),i=t.style;"absolute"!==i.position&&"absolute"!==e.position&&(i.position="relative")},show:function(t){clearTimeout(this._hideTimeout);var e=this.el;e.style.cssText=g+r(t)+";left:"+this._x+"px;top:"+this._y+"px;"+(t.get("extraCssText")||""),e.style.display=e.innerHTML?"block":"none",this._show=!0},setContent:function(t){var e=this.el;e.innerHTML=t,e.style.display=t?"block":"none"},moveTo:function(t,e){var i=this.el.style;i.left=t+"px",i.top=e+"px",this._x=t,this._y=e},hide:function(){this.el.style.display="none",this._show=!1},hideLater:function(t){!this._show||this._inContent&&this.enterable||(t?(this._hideDelay=t,this._show=!1,this._hideTimeout=setTimeout(s.bind(this.hide,this),t)):this.hide())},isShow:function(){return this._show}},t.exports=a},function(t,e,i){i(2).extendComponentModel({type:"tooltip",defaultOption:{zlevel:0,z:8,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove",alwaysShowContent:!1,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"rgba(50,50,50,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:!0,animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",lineStyle:{color:"#555",width:1,type:"solid"},crossStyle:{color:"#555",width:1,type:"dashed",textStyle:{}},shadowStyle:{color:"rgba(150,150,150,0.3)"}},textStyle:{color:"#fff",fontSize:14}}})},function(t,e,i){function n(t,e){if(!t||!e)return!1;var i=g.round;return i(t[0])===i(e[0])&&i(t[1])===i(e[1])}function o(t,e,i,n){return{x1:t,y1:e,x2:i,y2:n}}function r(t,e,i,n){return{x:t,y:e,width:i,height:n}}function a(t,e,i,n,o,r){return{cx:t,cy:e,r0:i,r:n,startAngle:o,endAngle:r,clockwise:!0}}function s(t,e,i,n,o){var r=i.clientWidth,a=i.clientHeight,s=20;return t+r+s>n?t-=r+s:t+=s,e+a+s>o?e-=a+s:e+=s,[t,e]}function l(t,e,i){var n=i.clientWidth,o=i.clientHeight,r=5,a=0,s=0,l=e.width,u=e.height;switch(t){case"inside":a=e.x+l/2-n/2,s=e.y+u/2-o/2;break;case"top":a=e.x+l/2-n/2,s=e.y-o-r;break;case"bottom":a=e.x+l/2-n/2,s=e.y+u+r;break;case"left":a=e.x-n-r,s=e.y+u/2-o/2;break;case"right":a=e.x+l+r,s=e.y+u/2-o/2}return[a,s]}function u(t,e,i,n,o,r,a){var u=a.getWidth(),h=a.getHeight(),c=r&&r.getBoundingRect().clone();if(r&&c.applyTransform(r.transform),"function"==typeof t&&(t=t([e,i],o,n.el,c)),f.isArray(t))e=v(t[0],u),i=v(t[1],h);else if("string"==typeof t&&r){var d=l(t,c,n.el);e=d[0],i=d[1]}else{var d=s(e,i,n.el,u,h);e=d[0],i=d[1]}n.moveTo(e,i)}function h(t){var e=t.coordinateSystem,i=t.get("tooltip.trigger",!0);return!(!e||"cartesian2d"!==e.type&&"polar"!==e.type&&"singleAxis"!==e.type||"item"===i)}var c=i(213),d=i(3),f=i(1),p=i(9),g=i(4),m=i(7),v=g.parsePercent,y=i(11),x=i(10);i(2).extendComponentView({type:"tooltip",_axisPointers:{},init:function(t,e){if(!y.node){var i=new c(e.getDom(),e);this._tooltipContent=i,e.on("showTip",this._manuallyShowTip,this),e.on("hideTip",this._manuallyHideTip,this)}},render:function(t,e,i){if(!y.node){this.group.removeAll(),this._axisPointers={},this._tooltipModel=t,this._ecModel=e,this._api=i,this._lastHover={};var n=this._tooltipContent;n.update(),n.enterable=t.get("enterable"),this._alwaysShowContent=t.get("alwaysShowContent"),this._seriesGroupByAxis=this._prepareAxisTriggerData(t,e);var o=this._crossText;o&&this.group.add(o);var r=t.get("triggerOn");if(null!=this._lastX&&null!=this._lastY&&"none"!==r){var a=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){a._manuallyShowTip({x:a._lastX,y:a._lastY})})}var s=this._api.getZr();s.off("click",this._tryShow),s.off("mousemove",this._mousemove),s.off("mouseout",this._hide),s.off("globalout",this._hide),"click"===r?s.on("click",this._tryShow,this):"mousemove"===r&&(s.on("mousemove",this._mousemove,this),s.on("mouseout",this._hide,this),s.on("globalout",this._hide,this))}},_mousemove:function(t){var e=this._tooltipModel.get("showDelay"),i=this;clearTimeout(this._showTimeout),e>0?this._showTimeout=setTimeout(function(){i._tryShow(t)},e):this._tryShow(t)},_manuallyShowTip:function(t){if(t.from!==this.uid){var e=this._ecModel,i=t.seriesIndex,n=e.getSeriesByIndex(i),o=this._api;if(null==t.x||null==t.y){if(n||e.eachSeries(function(t){h(t)&&!n&&(n=t)}),n){var r=n.getData(),a=m.queryDataIndex(r,t);if(null==a||f.isArray(a))return;var s,l,u=r.getItemGraphicEl(a),c=n.coordinateSystem;if(n.getTooltipPosition){var d=n.getTooltipPosition(a)||[];s=d[0],l=d[1]}else if(c&&c.dataToPoint){var d=c.dataToPoint(r.getValues(f.map(c.dimensions,function(t){return n.coordDimToDataDim(t)[0]}),a,!0));s=d&&d[0],l=d&&d[1]}else if(u){var p=u.getBoundingRect().clone();p.applyTransform(u.transform),s=p.x+p.width/2,l=p.y+p.height/2}null!=s&&null!=l&&this._tryShow({offsetX:s,offsetY:l,position:t.position,target:u,event:{}})}}else{var u=o.getZr().handler.findHover(t.x,t.y);this._tryShow({offsetX:t.x,offsetY:t.y,position:t.position,target:u,event:{}})}}},_manuallyHideTip:function(t){t.from!==this.uid&&this._hide()},_prepareAxisTriggerData:function(t,e){var i={};return e.eachSeries(function(t){if(h(t)){var e,n,o=t.coordinateSystem;"cartesian2d"===o.type?(e=o.getBaseAxis(),n=e.dim+e.index):"singleAxis"===o.type?(e=o.getAxis(),n=e.dim+e.type):(e=o.getBaseAxis(),n=e.dim+o.name),i[n]=i[n]||{coordSys:[],series:[]},i[n].coordSys.push(o),i[n].series.push(t)}},this),i},_tryShow:function(t){var e=t.target,i=this._tooltipModel,n=i.get("trigger"),o=this._ecModel,r=this._api;if(i)if(this._lastX=t.offsetX,this._lastY=t.offsetY,e&&null!=e.dataIndex){var a=e.dataModel||o.getSeriesByIndex(e.seriesIndex),s=e.dataIndex,l=a.getData().getItemModel(s);"axis"===(l.get("tooltip.trigger")||n)?this._showAxisTooltip(i,o,t):(this._ticket="",this._hideAxisPointer(),this._resetLastHover(),this._showItemTooltipContent(a,s,e.dataType,t)),r.dispatchAction({type:"showTip",from:this.uid,dataIndexInside:e.dataIndex,seriesIndex:e.seriesIndex})}else if(e&&e.tooltip){var u=e.tooltip;if("string"==typeof u){var h=u;u={content:h,formatter:h}}var c=new x(u,i),d=c.get("content"),f=Math.random();this._showTooltipContent(c,d,c.get("formatterParams")||{},f,t.offsetX,t.offsetY,t.position,e,r)}else"item"===n?this._hide():this._showAxisTooltip(i,o,t),"cross"===i.get("axisPointer.type")&&r.dispatchAction({type:"showTip",from:this.uid,x:t.offsetX,y:t.offsetY})},_showAxisTooltip:function(t,e,i){var o=t.getModel("axisPointer"),r=o.get("type");if("cross"===r){var a=i.target;if(a&&null!=a.dataIndex){var s=e.getSeriesByIndex(a.seriesIndex),l=a.dataIndex;this._showItemTooltipContent(s,l,a.dataType,i)}}this._showAxisPointer();var u=!0;f.each(this._seriesGroupByAxis,function(t){var e=t.coordSys,a=e[0],s=[i.offsetX,i.offsetY];if(!a.containPoint(s))return void this._hideAxisPointer(a.name);u=!1;var l=a.dimensions,h=a.pointToData(s,!0);s=a.dataToPoint(h);var c=a.getBaseAxis(),d=o.get("axis");"auto"===d&&(d=c.dim);var p=!1,g=this._lastHover;if("cross"===r)n(g.data,h)&&(p=!0),g.data=h;else{var m=f.indexOf(l,d);g.data===h[m]&&(p=!0),g.data=h[m]}"cartesian2d"!==a.type||p?"polar"!==a.type||p?"singleAxis"!==a.type||p||this._showSinglePointer(o,a,d,s):this._showPolarPointer(o,a,d,s):this._showCartesianPointer(o,a,d,s),"cross"!==r&&this._dispatchAndShowSeriesTooltipContent(a,t.series,s,h,p,i.position)},this),this._tooltipModel.get("show")||this._hideAxisPointer(),u&&this._hide()},_showCartesianPointer:function(t,e,i,n){function a(i,n,r){var a="x"===i?o(n[0],r[0],n[0],r[1]):o(r[0],n[1],r[1],n[1]),s=l._getPointerElement(e,t,i,a);d.subPixelOptimizeLine({shape:a,style:s.style}),c?d.updateProps(s,{shape:a},t):s.attr({shape:a})}function s(i,n,o){var a=e.getAxis(i),s=a.getBandWidth(),u=o[1]-o[0],h="x"===i?r(n[0]-s/2,o[0],s,u):r(o[0],n[1]-s/2,u,s),f=l._getPointerElement(e,t,i,h);c?d.updateProps(f,{shape:h},t):f.attr({shape:h})}var l=this,u=t.get("type"),h=e.getBaseAxis(),c="cross"!==u&&"category"===h.type&&h.getBandWidth()>20;if("cross"===u)a("x",n,e.getAxis("y").getGlobalExtent()),a("y",n,e.getAxis("x").getGlobalExtent()),this._updateCrossText(e,n,t);else{var f=e.getAxis("x"===i?"y":"x"),p=f.getGlobalExtent();"cartesian2d"===e.type&&("line"===u?a:s)(i,n,p)}},_showSinglePointer:function(t,e,i,n){function r(i,n,r){var s=e.getAxis(),u=s.orient,h="horizontal"===u?o(n[0],r[0],n[0],r[1]):o(r[0],n[1],r[1],n[1]),c=a._getPointerElement(e,t,i,h);l?d.updateProps(c,{shape:h},t):c.attr({shape:h})}var a=this,s=t.get("type"),l="cross"!==s&&"category"===e.getBaseAxis().type,u=e.getRect(),h=[u.y,u.y+u.height];r(i,n,h)},_showPolarPointer:function(t,e,i,n){function r(i,n,r){var a,s=e.pointToCoord(n);if("angle"===i){var u=e.coordToPoint([r[0],s[1]]),h=e.coordToPoint([r[1],s[1]]);a=o(u[0],u[1],h[0],h[1])}else a={cx:e.cx,cy:e.cy,r:s[0]};var c=l._getPointerElement(e,t,i,a);f?d.updateProps(c,{shape:a},t):c.attr({shape:a})}function s(i,n,o){var r,s=e.getAxis(i),u=s.getBandWidth(),h=e.pointToCoord(n),c=Math.PI/180;r="angle"===i?a(e.cx,e.cy,o[0],o[1],(-h[1]-u/2)*c,(-h[1]+u/2)*c):a(e.cx,e.cy,h[0]-u/2,h[0]+u/2,0,2*Math.PI);var p=l._getPointerElement(e,t,i,r);f?d.updateProps(p,{shape:r},t):p.attr({shape:r})}var l=this,u=t.get("type"),h=e.getAngleAxis(),c=e.getRadiusAxis(),f="cross"!==u&&"category"===e.getBaseAxis().type;if("cross"===u)r("angle",n,c.getExtent()),r("radius",n,h.getExtent()),this._updateCrossText(e,n,t);else{var p=e.getAxis("radius"===i?"angle":"radius"),g=p.getExtent();("line"===u?r:s)(i,n,g)}},_updateCrossText:function(t,e,i){var n=i.getModel("crossStyle"),o=n.getModel("textStyle"),r=this._tooltipModel,a=this._crossText;a||(a=this._crossText=new d.Text({style:{textAlign:"left",textVerticalAlign:"bottom"}}),this.group.add(a));var s=t.pointToData(e),l=t.dimensions;s=f.map(s,function(e,i){var n=t.getAxis(l[i]);return e="category"===n.type||"time"===n.type?n.scale.getLabel(e):p.addCommas(e.toFixed(n.getPixelPrecision()))}),a.setStyle({fill:o.getTextColor()||n.get("color"),textFont:o.getFont(),text:s.join(", "),x:e[0]+5,y:e[1]-5}),a.z=r.get("z"),a.zlevel=r.get("zlevel")},_getPointerElement:function(t,e,i,n){var o=this._tooltipModel,r=o.get("z"),a=o.get("zlevel"),s=this._axisPointers,l=t.name;if(s[l]=s[l]||{},s[l][i])return s[l][i];var u=e.get("type"),h=e.getModel(u+"Style"),c="shadow"===u,f=h[c?"getAreaStyle":"getLineStyle"](),p="polar"===t.type?c?"Sector":"radius"===i?"Circle":"Line":c?"Rect":"Line";c?f.stroke=null:f.fill=null;var g=s[l][i]=new d[p]({style:f,z:r,zlevel:a,silent:!0,shape:n});return this.group.add(g),g},_dispatchAndShowSeriesTooltipContent:function(t,e,i,n,o,r){var a=this._tooltipModel,s=t.getBaseAxis(),l="x"===s.dim||"radius"===s.dim?0:1,h=f.map(e,function(t){return{seriesIndex:t.seriesIndex,dataIndexInside:t.getAxisTooltipDataIndex?t.getAxisTooltipDataIndex(t.coordDimToDataDim(s.dim),n,s):t.getData().indexOfNearest(t.coordDimToDataDim(s.dim)[0],n[l],!1,"category"===s.type?.5:null)}}),c=this._lastHover,d=this._api;if(c.payloadBatch&&!o&&d.dispatchAction({type:"downplay",batch:c.payloadBatch}),o||(d.dispatchAction({type:"highlight",batch:h}),c.payloadBatch=h),d.dispatchAction({type:"showTip",dataIndexInside:h[0].dataIndexInside,seriesIndex:h[0].seriesIndex,from:this.uid}),s&&a.get("showContent")&&a.get("show")){var p=f.map(e,function(t,e){return t.getDataParams(h[e].dataIndexInside)});if(o)u(r||a.get("position"),i[0],i[1],this._tooltipContent,p,null,d);else{var g=h[0].dataIndexInside,m="time"===s.type?s.scale.getLabel(n[l]):e[0].getData().getName(g),v=(m?m+"<br />":"")+f.map(e,function(t,e){ +return t.formatTooltip(h[e].dataIndexInside,!0)}).join("<br />"),y="axis_"+t.name+"_"+g;this._showTooltipContent(a,v,p,y,i[0],i[1],r,null,d)}}},_showItemTooltipContent:function(t,e,i,n){var o=this._api,r=t.getData(i),a=r.getItemModel(e),s=a.get("tooltip",!0);if("string"==typeof s){var l=s;s={formatter:l}}var u=this._tooltipModel,h=t.getModel("tooltip",u),c=new x(s,h,h.ecModel),d=t.getDataParams(e,i),f=t.formatTooltip(e,!1,i),p="item_"+t.name+"_"+e;this._showTooltipContent(c,f,d,p,n.offsetX,n.offsetY,n.position,n.target,o)},_showTooltipContent:function(t,e,i,n,o,r,a,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var h=this._tooltipContent,c=t.get("formatter");a=a||t.get("position");var d=e;if(c)if("string"==typeof c)d=p.formatTpl(c,i);else if("function"==typeof c){var f=this,g=n,m=function(t,e){t===f._ticket&&(h.setContent(e),u(a,o,r,h,i,s,l))};f._ticket=g,d=c(i,g,m)}h.show(t),h.setContent(d),u(a,o,r,h,i,s,l)}},_showAxisPointer:function(t){if(t){var e=this._axisPointers[t];e&&f.each(e,function(t){t.show()})}else this.group.eachChild(function(t){t.show()}),this.group.show()},_resetLastHover:function(){var t=this._lastHover;t.payloadBatch&&this._api.dispatchAction({type:"downplay",batch:t.payloadBatch}),this._lastHover={}},_hideAxisPointer:function(t){if(t){var e=this._axisPointers[t];e&&f.each(e,function(t){t.hide()})}else this.group.children().length&&this.group.hide()},_hide:function(){clearTimeout(this._showTimeout),this._hideAxisPointer(),this._resetLastHover(),this._alwaysShowContent||this._tooltipContent.hideLater(this._tooltipModel.get("hideDelay")),this._api.dispatchAction({type:"hideTip",from:this.uid}),this._lastX=this._lastY=null},dispose:function(t,e){if(!y.node){var i=e.getZr();this._tooltipContent.hide(),i.off("click",this._tryShow),i.off("mousemove",this._mousemove),i.off("mouseout",this._hide),i.off("globalout",this._hide),e.off("showTip",this._manuallyShowTip),e.off("hideTip",this._manuallyHideTip)}}})},function(t,e,i){function n(t,e){var i=t.get("center"),n=t.get("radius"),o=e.getWidth(),r=e.getHeight(),a=s.parsePercent;this.cx=a(i[0],o),this.cy=a(i[1],r);var l=this.getRadiusAxis(),u=Math.min(o,r)/2;l.setExtent(0,a(n,u))}function o(t,e){var i=this,n=i.getAngleAxis(),o=i.getRadiusAxis();if(n.scale.setExtent(1/0,-(1/0)),o.scale.setExtent(1/0,-(1/0)),t.eachSeries(function(t){if(t.coordinateSystem===i){var e=t.getData();o.scale.unionExtent(e.getDataExtent("radius","category"!==o.type)),n.scale.unionExtent(e.getDataExtent("angle","category"!==n.type))}}),u(n,n.model),u(o,o.model),"category"===n.type&&!n.onBand){var r=n.getExtent(),a=360/n.scale.count();n.inverse?r[1]+=a:r[1]-=a,n.setExtent(r[0],r[1])}}function r(t,e){if(t.type=e.get("type"),t.scale=l.createScaleByModel(e),t.onBand=e.get("boundaryGap")&&"category"===t.type,"angleAxis"===e.mainType){var i=e.get("startAngle");t.inverse=e.get("inverse")^e.get("clockwise"),t.setExtent(i,i+(t.inverse?-360:360))}e.axis=t,t.model=e}var a=i(369),s=i(4),l=(i(1),i(22)),u=l.niceScaleExtent;i(370);var h={dimensions:a.prototype.dimensions,create:function(t,e){var i=[];return t.eachComponent("polar",function(t,s){var l=new a(s);l.resize=n,l.update=o;var u=l.getRadiusAxis(),h=l.getAngleAxis(),c=t.findAxisModel("radiusAxis"),d=t.findAxisModel("angleAxis");r(u,c),r(h,d),l.resize(t,e),i.push(l),t.coordinateSystem=l}),t.eachSeries(function(e){if("polar"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"polar",index:e.get("polarIndex"),id:e.get("polarId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}};i(23).register("polar",h)},function(t,e){function i(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function o(t){if(h===setTimeout)return setTimeout(t,0);if((h===i||!h)&&setTimeout)return h=setTimeout,setTimeout(t,0);try{return h(t,0)}catch(e){try{return h.call(null,t,0)}catch(e){return h.call(this,t,0)}}}function r(t){if(c===clearTimeout)return clearTimeout(t);if((c===n||!c)&&clearTimeout)return c=clearTimeout,clearTimeout(t);try{return c(t)}catch(e){try{return c.call(null,t)}catch(e){return c.call(this,t)}}}function a(){g&&f&&(g=!1,f.length?p=f.concat(p):m=-1,p.length&&s())}function s(){if(!g){var t=o(a);g=!0;for(var e=p.length;e;){for(f=p,p=[];++m<e;)f&&f[m].run();m=-1,e=p.length}f=null,g=!1,r(t)}}function l(t,e){this.fun=t,this.array=e}function u(){}var h,c,d=t.exports={};!function(){try{h="function"==typeof setTimeout?setTimeout:i}catch(t){h=i}try{c="function"==typeof clearTimeout?clearTimeout:n}catch(t){c=n}}();var f,p=[],g=!1,m=-1;d.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)e[i-1]=arguments[i];p.push(new l(t,e)),1!==p.length||g||o(s)},l.prototype.run=function(){this.fun.apply(null,this.array)},d.title="browser",d.browser=!0,d.env={},d.argv=[],d.version="",d.versions={},d.on=u,d.addListener=u,d.once=u,d.off=u,d.removeListener=u,d.removeAllListeners=u,d.emit=u,d.binding=function(t){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(t){throw new Error("process.chdir is not supported")},d.umask=function(){return 0}},function(t,e,i){function n(t){return parseInt(t,10)}function o(t,e){s.initVML(),this.root=t,this.storage=e;var i=document.createElement("div"),n=document.createElement("div");i.style.cssText="display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;",n.style.cssText="position:absolute;left:0;top:0;",t.appendChild(i),this._vmlRoot=n,this._vmlViewport=i,this.resize();var o=e.delFromMap,r=e.addToMap;e.delFromMap=function(t){var i=e.get(t);o.call(e,t),i&&i.onRemove&&i.onRemove(n)},e.addToMap=function(t){t.onAdd&&t.onAdd(n),r.call(e,t)},this._firstPaint=!0}function r(t){return function(){a('In IE8.0 VML mode painter not support method "'+t+'"')}}var a=i(47),s=i(170);o.prototype={constructor:o,getViewportRoot:function(){return this._vmlViewport},refresh:function(){var t=this.storage.getDisplayList(!0,!0);this._paintList(t)},_paintList:function(t){for(var e=this._vmlRoot,i=0;i<t.length;i++){var n=t[i];n.invisible||n.ignore?(n.__alreadyNotVisible||n.onRemove(e),n.__alreadyNotVisible=!0):(n.__alreadyNotVisible&&n.onAdd(e),n.__alreadyNotVisible=!1,n.__dirty&&(n.beforeBrush&&n.beforeBrush(),(n.brushVML||n.brush).call(n,e),n.afterBrush&&n.afterBrush())),n.__dirty=!1}this._firstPaint&&(this._vmlViewport.appendChild(e),this._firstPaint=!1)},resize:function(t,e){var t=null==t?this._getWidth():t,e=null==e?this._getHeight():e;if(this._width!=t||this._height!=e){this._width=t,this._height=e;var i=this._vmlViewport.style;i.width=t+"px",i.height=e+"px"}},dispose:function(){this.root.innerHTML="",this._vmlRoot=this._vmlViewport=this.storage=null},getWidth:function(){return this._width},getHeight:function(){return this._height},clear:function(){this._vmlViewport&&this.root.removeChild(this._vmlViewport)},_getWidth:function(){var t=this.root,e=t.currentStyle;return(t.clientWidth||n(e.width))-n(e.paddingLeft)-n(e.paddingRight)|0},_getHeight:function(){var t=this.root,e=t.currentStyle;return(t.clientHeight||n(e.height))-n(e.paddingTop)-n(e.paddingBottom)|0}};for(var l=["getLayer","insertLayer","eachLayer","eachBuildinLayer","eachOtherLayer","getLayers","modLayer","delLayer","clearLayer","toDataURL","pathToImage"],u=0;u<l.length;u++){var h=l[u];o.prototype[h]=r(h)}t.exports=o},function(t,e,i){if(!i(11).canvasSupported){var n=i(5),o=i(8),r=i(28).CMD,a=i(18),s=i(16),l=i(75),u=i(36),h=i(48),c=i(74),d=i(6),f=i(37),p=i(170),g=Math.round,m=Math.sqrt,v=Math.abs,y=Math.cos,x=Math.sin,_=Math.max,b=n.applyTransform,w=",",S="progid:DXImageTransform.Microsoft",M=21600,T=M/2,I=1e5,A=1e3,L=function(t){t.style.cssText="position:absolute;left:0;top:0;width:1px;height:1px;",t.coordsize=M+","+M,t.coordorigin="0,0"},C=function(t){return String(t).replace(/&/g,"&").replace(/"/g,""")},D=function(t,e,i){return"rgb("+[t,e,i].join(",")+")"},P=function(t,e){e&&t&&e.parentNode!==t&&t.appendChild(e)},k=function(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)},z=function(t,e,i){return(parseFloat(t)||0)*I+(parseFloat(e)||0)*A+i},O=function(t,e){return"string"==typeof t?t.lastIndexOf("%")>=0?parseFloat(t)/100*e:parseFloat(t):t},E=function(t,e,i){var n=a.parse(e);i=+i,isNaN(i)&&(i=1),n&&(t.color=D(n[0],n[1],n[2]),t.opacity=i*n[3])},R=function(t){var e=a.parse(t);return[D(e[0],e[1],e[2]),e[3]]},V=function(t,e,i){var n=e.fill;if(null!=n)if(n instanceof f){var o,r=0,a=[0,0],s=0,l=1,u=i.getBoundingRect(),h=u.width,c=u.height;if("linear"===n.type){o="gradient";var d=i.transform,p=[n.x*h,n.y*c],g=[n.x2*h,n.y2*c];d&&(b(p,p,d),b(g,g,d));var m=g[0]-p[0],v=g[1]-p[1];r=180*Math.atan2(m,v)/Math.PI,r<0&&(r+=360),r<1e-6&&(r=0)}else{o="gradientradial";var p=[n.x*h,n.y*c],d=i.transform,y=i.scale,x=h,w=c;a=[(p[0]-u.x)/x,(p[1]-u.y)/w],d&&b(p,p,d),x/=y[0]*M,w/=y[1]*M;var S=_(x,w);s=0/S,l=2*n.r/S-s}var T=n.colorStops.slice();T.sort(function(t,e){return t.offset-e.offset});for(var I=T.length,A=[],L=[],C=0;C<I;C++){var D=T[C],P=R(D.color);L.push(D.offset*l+s+" "+P[0]),0!==C&&C!==I-1||A.push(P)}if(I>=2){var k=A[0][0],z=A[1][0],O=A[0][1]*e.opacity,V=A[1][1]*e.opacity;t.type=o,t.method="none",t.focus="100%",t.angle=r,t.color=k,t.color2=z,t.colors=L.join(","),t.opacity=V,t.opacity2=O}"radial"===o&&(t.focusposition=a.join(","))}else E(t,n,e.opacity)},N=function(t,e){null!=e.lineDash&&(t.dashstyle=e.lineDash.join(" ")),null==e.stroke||e.stroke instanceof f||E(t,e.stroke,e.opacity)},B=function(t,e,i,n){var o="fill"==e,r=t.getElementsByTagName(e)[0];null!=i[e]&&"none"!==i[e]&&(o||!o&&i.lineWidth)?(t[o?"filled":"stroked"]="true",i[e]instanceof f&&k(t,r),r||(r=p.createNode(e)),o?V(r,i,n):N(r,i),P(t,r)):(t[o?"filled":"stroked"]="false",k(t,r))},G=[[],[],[]],F=function(t,e){var i,n,o,a,s,l,u=r.M,h=r.C,c=r.L,d=r.A,f=r.Q,p=[];for(a=0;a<t.length;){switch(o=t[a++],n="",i=0,o){case u:n=" m ",i=1,s=t[a++],l=t[a++],G[0][0]=s,G[0][1]=l;break;case c:n=" l ",i=1,s=t[a++],l=t[a++],G[0][0]=s,G[0][1]=l;break;case f:case h:n=" c ",i=3;var v,_,S=t[a++],I=t[a++],A=t[a++],L=t[a++];o===f?(v=A,_=L,A=(A+2*S)/3,L=(L+2*I)/3,S=(s+2*S)/3,I=(l+2*I)/3):(v=t[a++],_=t[a++]),G[0][0]=S,G[0][1]=I,G[1][0]=A,G[1][1]=L,G[2][0]=v,G[2][1]=_,s=v,l=_;break;case d:var C=0,D=0,P=1,k=1,z=0;e&&(C=e[4],D=e[5],P=m(e[0]*e[0]+e[1]*e[1]),k=m(e[2]*e[2]+e[3]*e[3]),z=Math.atan2(-e[1]/k,e[0]/P));var O=t[a++],E=t[a++],R=t[a++],V=t[a++],N=t[a++]+z,B=t[a++]+N+z;a++;var F=t[a++],H=O+y(N)*R,W=E+x(N)*V,S=O+y(B)*R,I=E+x(B)*V,Z=F?" wa ":" at ";Math.abs(H-S)<1e-10&&(Math.abs(B-N)>.01?F&&(H+=270/M):Math.abs(W-E)<1e-10?F&&H<O||!F&&H>O?I-=270/M:I+=270/M:F&&W<E||!F&&W>E?S+=270/M:S-=270/M),p.push(Z,g(((O-R)*P+C)*M-T),w,g(((E-V)*k+D)*M-T),w,g(((O+R)*P+C)*M-T),w,g(((E+V)*k+D)*M-T),w,g((H*P+C)*M-T),w,g((W*k+D)*M-T),w,g((S*P+C)*M-T),w,g((I*k+D)*M-T)),s=S,l=I;break;case r.R:var q=G[0],j=G[1];q[0]=t[a++],q[1]=t[a++],j[0]=q[0]+t[a++],j[1]=q[1]+t[a++],e&&(b(q,q,e),b(j,j,e)),q[0]=g(q[0]*M-T),j[0]=g(j[0]*M-T),q[1]=g(q[1]*M-T),j[1]=g(j[1]*M-T),p.push(" m ",q[0],w,q[1]," l ",j[0],w,q[1]," l ",j[0],w,j[1]," l ",q[0],w,j[1]);break;case r.Z:p.push(" x ")}if(i>0){p.push(n);for(var U=0;U<i;U++){var X=G[U];e&&b(X,X,e),p.push(g(X[0]*M-T),w,g(X[1]*M-T),U<i-1?w:"")}}}return p.join("")};d.prototype.brushVML=function(t){var e=this.style,i=this._vmlEl;i||(i=p.createNode("shape"),L(i),this._vmlEl=i),B(i,"fill",e,this),B(i,"stroke",e,this);var n=this.transform,o=null!=n,r=i.getElementsByTagName("stroke")[0];if(r){var a=e.lineWidth;if(o&&!e.strokeNoScale){var s=n[0]*n[3]-n[1]*n[2];a*=m(v(s))}r.weight=a+"px"}var l=this.path;this.__dirtyPath&&(l.beginPath(),this.buildPath(l,this.shape),l.toStatic(),this.__dirtyPath=!1),i.path=F(l.data,this.transform),i.style.zIndex=z(this.zlevel,this.z,this.z2),P(t,i),null!=e.text?this.drawRectText(t,this.getBoundingRect()):this.removeRectText(t)},d.prototype.onRemove=function(t){k(t,this._vmlEl),this.removeRectText(t)},d.prototype.onAdd=function(t){P(t,this._vmlEl),this.appendRectText(t)};var H=function(t){return"object"==typeof t&&t.tagName&&"IMG"===t.tagName.toUpperCase()};h.prototype.brushVML=function(t){var e,i,n=this.style,o=n.image;if(H(o)){var r=o.src;if(r===this._imageSrc)e=this._imageWidth,i=this._imageHeight;else{var a=o.runtimeStyle,s=a.width,l=a.height;a.width="auto",a.height="auto",e=o.width,i=o.height,a.width=s,a.height=l,this._imageSrc=r,this._imageWidth=e,this._imageHeight=i}o=r}else o===this._imageSrc&&(e=this._imageWidth,i=this._imageHeight);if(o){var u=n.x||0,h=n.y||0,c=n.width,d=n.height,f=n.sWidth,v=n.sHeight,y=n.sx||0,x=n.sy||0,M=f&&v,T=this._vmlEl;T||(T=p.doc.createElement("div"),L(T),this._vmlEl=T);var I,A=T.style,C=!1,D=1,k=1;if(this.transform&&(I=this.transform,D=m(I[0]*I[0]+I[1]*I[1]),k=m(I[2]*I[2]+I[3]*I[3]),C=I[1]||I[2]),C){var O=[u,h],E=[u+c,h],R=[u,h+d],V=[u+c,h+d];b(O,O,I),b(E,E,I),b(R,R,I),b(V,V,I);var N=_(O[0],E[0],R[0],V[0]),B=_(O[1],E[1],R[1],V[1]),G=[];G.push("M11=",I[0]/D,w,"M12=",I[2]/k,w,"M21=",I[1]/D,w,"M22=",I[3]/k,w,"Dx=",g(u*D+I[4]),w,"Dy=",g(h*k+I[5])),A.padding="0 "+g(N)+"px "+g(B)+"px 0",A.filter=S+".Matrix("+G.join("")+", SizingMethod=clip)"}else I&&(u=u*D+I[4],h=h*k+I[5]),A.filter="",A.left=g(u)+"px",A.top=g(h)+"px";var F=this._imageEl,W=this._cropEl;F||(F=p.doc.createElement("div"),this._imageEl=F);var Z=F.style;if(M){if(e&&i)Z.width=g(D*e*c/f)+"px",Z.height=g(k*i*d/v)+"px";else{var q=new Image,j=this;q.onload=function(){q.onload=null,e=q.width,i=q.height,Z.width=g(D*e*c/f)+"px",Z.height=g(k*i*d/v)+"px",j._imageWidth=e,j._imageHeight=i,j._imageSrc=o},q.src=o}W||(W=p.doc.createElement("div"),W.style.overflow="hidden",this._cropEl=W);var U=W.style;U.width=g((c+y*c/f)*D),U.height=g((d+x*d/v)*k),U.filter=S+".Matrix(Dx="+-y*c/f*D+",Dy="+-x*d/v*k+")",W.parentNode||T.appendChild(W),F.parentNode!=W&&W.appendChild(F)}else Z.width=g(D*c)+"px",Z.height=g(k*d)+"px",T.appendChild(F),W&&W.parentNode&&(T.removeChild(W),this._cropEl=null);var X="",Y=n.opacity;Y<1&&(X+=".Alpha(opacity="+g(100*Y)+") "),X+=S+".AlphaImageLoader(src="+o+", SizingMethod=scale)",Z.filter=X,T.style.zIndex=z(this.zlevel,this.z,this.z2),P(t,T),null!=n.text&&this.drawRectText(t,this.getBoundingRect())}},h.prototype.onRemove=function(t){k(t,this._vmlEl),this._vmlEl=null,this._cropEl=null,this._imageEl=null,this.removeRectText(t)},h.prototype.onAdd=function(t){P(t,this._vmlEl),this.appendRectText(t)};var W,Z="normal",q={},j=0,U=100,X=document.createElement("div"),Y=function(t){var e=q[t];if(!e){j>U&&(j=0,q={});var i,n=X.style;try{n.font=t,i=n.fontFamily.split(",")[0]}catch(o){}e={style:n.fontStyle||Z,variant:n.fontVariant||Z,weight:n.fontWeight||Z,size:0|parseFloat(n.fontSize||12),family:i||"Microsoft YaHei"},q[t]=e,j++}return e};s.measureText=function(t,e){var i=p.doc;W||(W=i.createElement("div"),W.style.cssText="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;",p.doc.body.appendChild(W));try{W.style.font=e}catch(n){}return W.innerHTML="",W.appendChild(i.createTextNode(t)),{width:W.offsetWidth}};for(var $=new o,Q=function(t,e,i,n){var o=this.style,r=o.text;if(null!=r&&(r+=""),r){var a,l,u=o.textAlign,h=Y(o.textFont),c=h.style+" "+h.variant+" "+h.weight+" "+h.size+'px "'+h.family+'"',d=o.textBaseline,f=o.textVerticalAlign;i=i||s.getBoundingRect(r,c,u,d);var m=this.transform;if(m&&!n&&($.copy(e),$.applyTransform(m),e=$),n)a=e.x,l=e.y;else{var v=o.textPosition,y=o.textDistance;if(v instanceof Array)a=e.x+O(v[0],e.width),l=e.y+O(v[1],e.height),u=u||"left",d=d||"top";else{var x=s.adjustTextPositionOnRect(v,e,i,y);a=x.x,l=x.y,u=u||x.textAlign,d=d||x.textBaseline}}if(f){switch(f){case"middle":l-=i.height/2;break;case"bottom":l-=i.height}d="top"}var _=h.size;switch(d){case"hanging":case"top":l+=_/1.75;break;case"middle":break;default:l-=_/2.25}switch(u){case"left":break;case"center":a-=i.width/2;break;case"right":a-=i.width}var S,M,T,I=p.createNode,A=this._textVmlEl;A?(T=A.firstChild,S=T.nextSibling,M=S.nextSibling):(A=I("line"),S=I("path"),M=I("textpath"),T=I("skew"),M.style["v-text-align"]="left",L(A),S.textpathok=!0,M.on=!0,A.from="0 0",A.to="1000 0.05",P(A,T),P(A,S),P(A,M),this._textVmlEl=A);var D=[a,l],k=A.style;m&&n?(b(D,D,m),T.on=!0,T.matrix=m[0].toFixed(3)+w+m[2].toFixed(3)+w+m[1].toFixed(3)+w+m[3].toFixed(3)+",0,0",T.offset=(g(D[0])||0)+","+(g(D[1])||0),T.origin="0 0",k.left="0px",k.top="0px"):(T.on=!1,k.left=g(a)+"px",k.top=g(l)+"px"),M.string=C(r);try{M.style.font=c}catch(E){}B(A,"fill",{fill:n?o.fill:o.textFill,opacity:o.opacity},this),B(A,"stroke",{stroke:n?o.stroke:o.textStroke,opacity:o.opacity,lineDash:o.lineDash},this),A.style.zIndex=z(this.zlevel,this.z,this.z2),P(t,A)}},K=function(t){k(t,this._textVmlEl),this._textVmlEl=null},J=function(t){P(t,this._textVmlEl)},tt=[l,u,h,d,c],et=0;et<tt.length;et++){var it=tt[et].prototype;it.drawRectText=Q,it.removeRectText=K,it.appendRectText=J}c.prototype.brushVML=function(t){var e=this.style;null!=e.text?this.drawRectText(t,{x:e.x||0,y:e.y||0,width:0,height:0},this.getBoundingRect(),!0):this.removeRectText(t)},c.prototype.onRemove=function(t){this.removeRectText(t)},c.prototype.onAdd=function(t){this.appendRectText(t)}}},function(t,e,i){i(219),i(76).registerPainter("vml",i(218))},function(t,e,i){var n=i(1),o=i(222),r=i(2);r.registerAction({type:"geoRoam",event:"geoRoam",update:"updateLayout"},function(t,e){var i=t.componentType||"series";e.eachComponent({mainType:i,query:t},function(e){var r=e.coordinateSystem;if("geo"===r.type){var a=o.updateCenterAndZoom(r,t,e.get("scaleLimit"));e.setCenter&&e.setCenter(a.center),e.setZoom&&e.setZoom(a.zoom),"series"===i&&n.each(e.seriesGroup,function(t){t.setCenter(a.center),t.setZoom(a.zoom)})}})})},function(t,e){var i={};i.updateCenterAndZoom=function(t,e,i){var n=t.getZoom(),o=t.getCenter(),r=e.zoom,a=t.dataToPoint(o);if(null!=e.dx&&null!=e.dy){a[0]-=e.dx,a[1]-=e.dy;var o=t.pointToData(a);t.setCenter(o)}if(null!=r){if(i){var s=i.min||0,l=i.max||1/0;r=Math.max(Math.min(n*r,l),s)/n}t.scale[0]*=r,t.scale[1]*=r;var u=t.position,h=(e.originX-u[0])*(r-1),c=(e.originY-u[1])*(r-1);u[0]-=h,u[1]-=c,t.updateTransform();var o=t.pointToData(a);t.setCenter(o),t.setZoom(r*n)}return{center:t.getCenter(),zoom:t.getZoom()}},t.exports=i},function(t,e,i){var n=i(5);t.exports=function(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var i=e.getBoundingRect(),o=t.getData(),r=o.graph,a=0,s=o.getSum("value"),l=2*Math.PI/(s||o.count()),u=i.width/2+i.x,h=i.height/2+i.y,c=Math.min(i.width,i.height)/2;r.eachNode(function(t){var e=t.getValue("value");a+=l*(s?e:1)/2,t.setLayout([c*Math.cos(a)+u,c*Math.sin(a)+h]),a+=l*(s?e:1)/2}),o.setLayout({cx:u,cy:h}),r.eachEdge(function(t){var e,i=t.getModel().get("lineStyle.normal.curveness")||0,o=n.clone(t.node1.getLayout()),r=n.clone(t.node2.getLayout()),a=(o[0]+r[0])/2,s=(o[1]+r[1])/2;+i&&(i*=3,e=[u*i+a*(1-i),h*i+s*(1-i)]),t.setLayout([o,r,e])})}}},function(t,e,i){var n=i(5);t.exports=function(t){t.eachEdge(function(t){var e=t.getModel().get("lineStyle.normal.curveness")||0,i=n.clone(t.node1.getLayout()),o=n.clone(t.node2.getLayout()),r=[i,o];+e&&r.push([(i[0]+o[0])/2-(i[1]-o[1])*e,(i[1]+o[1])/2-(o[0]-i[0])*e]),t.setLayout(r)})}},function(t,e,i){var n=i(224);t.exports=function(t){var e=t.coordinateSystem;if(!e||"view"===e.type){var i=t.getGraph();i.eachNode(function(t){var e=t.getModel();t.setLayout([+e.get("x"),+e.get("y")])}),n(i)}}},function(t,e,i){function n(t,e,i){o.Group.call(this),this.add(this.createLine(t,e,i)),this._updateEffectSymbol(t,e)}var o=i(3),r=i(94),a=i(1),s=i(26),l=i(5),u=i(17),h=n.prototype;h.createLine=function(t,e,i){return new r(t,e,i)},h._updateEffectSymbol=function(t,e){var i=t.getItemModel(e),n=i.getModel("effect"),o=n.get("symbolSize"),r=n.get("symbol");a.isArray(o)||(o=[o,o]);var l=n.get("color")||t.getItemVisual(e,"color"),u=this.childAt(1);this._symbolType!==r&&(this.remove(u),u=s.createSymbol(r,-.5,-.5,1,1,l),u.z2=100,u.culling=!0,this.add(u)),u&&(u.setStyle("shadowColor",l),u.setStyle(n.getItemStyle(["color"])),u.attr("scale",o),u.setColor(l),u.attr("scale",o),this._symbolType=r,this._updateEffectAnimation(t,n,e))},h._updateEffectAnimation=function(t,e,i){var n=this.childAt(1);if(n){var o=this,r=t.getItemLayout(i),s=1e3*e.get("period"),l=e.get("loop"),u=e.get("constantSpeed"),h=a.retrieve(e.get("delay"),function(e){return e/t.count()*s/3}),c="function"==typeof h;if(n.ignore=!0,this.updateAnimationPoints(n,r),u>0&&(s=this.getLineLength(n)/u*1e3),s!==this._period||l!==this._loop){n.stopAnimation();var d=h;c&&(d=h(i)),n.__t>0&&(d=-s*n.__t),n.__t=0;var f=n.animate("",l).when(s,{__t:1}).delay(d).during(function(){o.updateSymbolPosition(n)});l||f.done(function(){o.remove(n)}),f.start()}this._period=s,this._loop=l}},h.getLineLength=function(t){return l.dist(t.__p1,t.__cp1)+l.dist(t.__cp1,t.__p2)},h.updateAnimationPoints=function(t,e){t.__p1=e[0],t.__p2=e[1],t.__cp1=e[2]||[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},h.updateData=function(t,e,i){this.childAt(0).updateData(t,e,i),this._updateEffectSymbol(t,e)},h.updateSymbolPosition=function(t){var e=t.__p1,i=t.__p2,n=t.__cp1,o=t.__t,r=t.position,a=u.quadraticAt,s=u.quadraticDerivativeAt;r[0]=a(e[0],n[0],i[0],o),r[1]=a(e[1],n[1],i[1],o);var l=s(e[0],n[0],i[0],o),h=s(e[1],n[1],i[1],o);t.rotation=-Math.atan2(h,l)-Math.PI/2,t.ignore=!1},h.updateLayout=function(t,e){this.childAt(0).updateLayout(t,e);var i=t.getItemModel(e).getModel("effect");this._updateEffectAnimation(t,i,e)},a.inherits(n,o.Group),t.exports=n},function(t,e,i){function n(t,e,i){o.Group.call(this),this._createPolyline(t,e,i)}var o=i(3),r=i(1),a=n.prototype;a._createPolyline=function(t,e,i){var n=t.getItemLayout(e),r=new o.Polyline({shape:{points:n}});this.add(r),this._updateCommonStl(t,e,i)},a.updateData=function(t,e,i){var n=t.hostModel,r=this.childAt(0),a={shape:{points:t.getItemLayout(e)}};o.updateProps(r,a,n,e),this._updateCommonStl(t,e,i)},a._updateCommonStl=function(t,e,i){var n=this.childAt(0),a=t.getItemModel(e),s=t.getItemVisual(e,"color"),l=i&&i.lineStyle,u=i&&i.hoverLineStyle;i&&!t.hasItemOption||(l=a.getModel("lineStyle.normal").getLineStyle(),u=a.getModel("lineStyle.emphasis").getLineStyle()),n.useStyle(r.defaults({strokeNoScale:!0,fill:"none",stroke:s},l)),n.hoverStyle=u,o.setHoverStyle(this)},a.updateLayout=function(t,e){var i=this.childAt(0);i.setShape("points",t.getItemLayout(e))},r.inherits(n,o.Group),t.exports=n},function(t,e,i){var n=i(14),o=i(379),r=i(241),a=i(29),s=i(23),l=i(1),u=i(34);t.exports=function(t,e,i,h,c){for(var d=new o(h),f=0;f<t.length;f++)d.addNode(l.retrieve(t[f].id,t[f].name,f),f);for(var p=[],g=[],m=0,f=0;f<e.length;f++){var v=e[f],y=v.source,x=v.target;d.addEdge(y,x,m)&&(g.push(v),p.push(l.retrieve(v.id,y+" > "+x)),m++)}var _,b=i.get("coordinateSystem");if("cartesian2d"===b||"polar"===b)_=u(t,i,i.ecModel);else{var w=s.get(b),S=a((w&&"view"!==w.type?w.dimensions||[]:[]).concat(["value"]),t);_=new n(S,i),_.initData(t)}var M=new n(["value"],i);return M.initData(g,p),c&&c(_,M),r({mainData:_,struct:d,structAttr:"graph",datas:{node:_,edge:M},datasAttr:{node:"data",edge:"edgeData"}}),d.update(),d}},function(t,e,i){function n(t,e){var i=t.getItemStyle(),n=t.get("areaColor");return n&&(i.fill=n),i}function o(t,e,i,n){e.off("click"),t.get("selectedMode")&&e.on("click",function(o){for(var a=o.target;!a.__region;)a=a.parent;if(a){var s=a.__region,l={type:("geo"===t.mainType?"geo":"map")+"ToggleSelect",name:s.name,from:n.uid};l[t.mainType+"Id"]=t.id,i.dispatchAction(l),r(t,e)}})}function r(t,e){e.eachChild(function(e){e.__region&&e.trigger(t.isSelected(e.__region.name)?"emphasis":"normal")})}function a(t,e){var i=new l.Group;this._controller=new s(t.getZr(),e?i:null,null),this.group=i,this._updateGroup=e}var s=i(79),l=i(3),u=i(1);a.prototype={constructor:a,draw:function(t,e,i,a,s){var h=t.getData&&t.getData(),c=t.coordinateSystem,d=this.group,f=c.scale,p={position:c.position,scale:f};!d.childAt(0)||s?d.attr(p):l.updateProps(d,p,t),d.removeAll();var g=["itemStyle","normal"],m=["itemStyle","emphasis"],v=["label","normal"],y=["label","emphasis"];u.each(c.regions,function(e){var i=new l.Group,o=new l.CompoundPath({shape:{paths:[]}});i.add(o);var r,a=t.getRegionModel(e.name)||t,s=a.getModel(g),c=a.getModel(m),p=n(s,f),x=n(c,f),_=a.getModel(v),b=a.getModel(y);if(h){r=h.indexOfName(e.name);var w=h.getItemVisual(r,"color",!0);w&&(p.fill=w)}var S=_.getModel("textStyle"),M=b.getModel("textStyle");u.each(e.contours,function(t){var e=new l.Polygon({shape:{points:t}});o.shape.paths.push(e)}),o.setStyle(p),o.style.strokeNoScale=!0,o.culling=!0;var T=_.get("show"),I=b.get("show"),A=h&&isNaN(h.get("value",r)),L=h&&h.getItemLayout(r);if(!h||A&&(T||I)||L&&L.showLabel){var C=h?r:e.name,D=t.getFormattedLabel(C,"normal"),P=t.getFormattedLabel(C,"emphasis"),k=new l.Text({style:{text:T?D||e.name:"",fill:S.getTextColor(),textFont:S.getFont(),textAlign:"center",textVerticalAlign:"middle"},hoverStyle:{text:I?P||e.name:"",fill:M.getTextColor(),textFont:M.getFont()},position:e.center.slice(),scale:[1/f[0],1/f[1]],z2:10,silent:!0});i.add(k)}if(h)h.setItemGraphicEl(r,i);else{var a=t.getRegionModel(e.name);o.eventData={componentType:"geo",geoIndex:t.componentIndex,name:e.name,region:a&&a.option||{}}}i.__region=e,l.setHoverStyle(i,x),d.add(i)}),this._updateController(t,e,i),o(t,d,i,a),r(t,d)},remove:function(){this.group.removeAll(),this._controller.dispose()},_updateController:function(t,e,i){function n(){var e={type:"geoRoam",componentType:a};return e[a+"Id"]=t.id,e}var o=t.coordinateSystem,r=this._controller;r.zoomLimit=t.get("scaleLimit"),r.zoom=o.getZoom(),r.enable(t.get("roam")||!1);var a=t.mainType;r.off("pan").on("pan",function(t,e){i.dispatchAction(u.extend(n(),{dx:t,dy:e}))}),r.off("zoom").on("zoom",function(t,e,o){if(i.dispatchAction(u.extend(n(),{zoom:t,originX:e,originY:o})),this._updateGroup){var r=this.group,a=r.scale;r.traverse(function(t){"text"===t.type&&t.attr("scale",[1/a[0],1/a[1]])})}},this),r.setContainsPoint(function(t,e){return o.getViewRectAfterRoam().contain(t,e)})}},t.exports=a},function(t,e,i){i(240),i(365),i(333);var n=i(2),o=i(1),r=5;n.extendComponentView({type:"parallel",render:function(t,e,i){var n=i.getZr();if(!this.__onMouseDown){var a;n.on("mousedown",this.__onMouseDown=function(t){a=[t.offsetX,t.offsetY]}),n.on("mouseup",this.__onMouseUp=function(e){var n=[e.offsetX,e.offsetY],s=Math.pow(a[0]-n[0],2)+Math.pow(a[1]-n[1],2);if(t.get("axisExpandable")&&!(s>r)){var l=t.coordinateSystem,u=l.findClosestAxisDim(n);if(u){var h=o.indexOf(l.dimensions,u);i.dispatchAction({type:"parallelAxisExpand",axisExpandCenter:h})}}})}},dispose:function(t,e){e.getZr().off(this.__onMouseDown),e.getZr().off(this.__onMouseUp)}}),n.registerPreprocessor(i(366))},function(t,e,i){var n=i(2),o=i(1),r=i(11),a=i(383),s=i(71),l=i(173),u=s.mapVisual,h=i(7),c=s.eachVisual,d=i(4),f=o.isArray,p=o.each,g=d.asc,m=d.linearMap,v=o.noop,y=["#f6efa6","#d88273","#bf444c"],x=n.extendComponentModel({type:"visualMap",dependencies:["series"],stateList:["inRange","outOfRange"],replacableOptionKeys:["inRange","outOfRange","target","controller","color"],dataBound:[-(1/0),1/0],layoutMode:{type:"box",ignoreSize:!0},defaultOption:{show:!0,zlevel:0,z:4,seriesIndex:null,min:0,max:200,dimension:null,inRange:null,outOfRange:null,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,color:null,formatter:null,text:null,textStyle:{color:"#333"}},init:function(t,e,i){this._dataExtent,this.targetVisuals={},this.controllerVisuals={},this.textStyleModel,this.itemSize,this.mergeDefaultAndTheme(t,i)},optionUpdated:function(t,e){var i=this.option;r.canvasSupported||(i.realtime=!1),!e&&l.replaceVisualOption(i,t,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},resetVisual:function(t){var e=this.stateList;t=o.bind(t,this),this.controllerVisuals=l.createVisualMappings(this.option.controller,e,t),this.targetVisuals=l.createVisualMappings(this.option.target,e,t)},resetTargetSeries:function(){var t=this.option,e=null==t.seriesIndex;t.seriesIndex=e?[]:h.normalizeToArray(t.seriesIndex),e&&this.ecModel.eachSeries(function(e,i){t.seriesIndex.push(i)})},eachTargetSeries:function(t,e){o.each(this.option.seriesIndex,function(i){t.call(e,this.ecModel.getSeriesByIndex(i))},this)},isTargetSeries:function(t){var e=!1;return this.eachTargetSeries(function(i){i===t&&(e=!0)}),e},formatValueText:function(t,e,i){function n(t){return t===u[0]?"min":t===u[1]?"max":(+t).toFixed(l)}var r,a,s=this.option,l=s.precision,u=this.dataBound,h=s.formatter;return i=i||["<",">"],o.isArray(t)&&(t=t.slice(),r=!0),a=e?t:r?[n(t[0]),n(t[1])]:n(t),o.isString(h)?h.replace("{value}",r?a[0]:a).replace("{value2}",r?a[1]:a):o.isFunction(h)?r?h(t[0],t[1]):h(t):r?t[0]===u[0]?i[0]+" "+a[1]:t[1]===u[1]?i[1]+" "+a[0]:a[0]+" - "+a[1]:a},resetExtent:function(){var t=this.option,e=g([t.min,t.max]);this._dataExtent=e},getDataDimension:function(t){var e=this.option.dimension;return null!=e?e:t.dimensions.length-1},getExtent:function(){return this._dataExtent.slice()},completeVisualOption:function(){function t(t){f(n.color)&&!t.inRange&&(t.inRange={color:n.color.slice().reverse()}),t.inRange=t.inRange||{color:y},p(this.stateList,function(e){var i=t[e];if(o.isString(i)){var n=a.get(i,"active",d);n?(t[e]={},t[e][i]=n):delete t[e]}},this)}function e(t,e,i){var n=t[e],o=t[i];n&&!o&&(o=t[i]={},p(n,function(t,e){if(s.isValidType(e)){var i=a.get(e,"inactive",d);null!=i&&(o[e]=i,"color"!==e||o.hasOwnProperty("opacity")||o.hasOwnProperty("colorAlpha")||(o.opacity=[0,0]))}}))}function i(t){var e=(t.inRange||{}).symbol||(t.outOfRange||{}).symbol,i=(t.inRange||{}).symbolSize||(t.outOfRange||{}).symbolSize,n=this.get("inactiveColor");p(this.stateList,function(r){var a=this.itemSize,s=t[r];s||(s=t[r]={color:d?n:[n]}),null==s.symbol&&(s.symbol=e&&o.clone(e)||(d?"roundRect":["roundRect"])),null==s.symbolSize&&(s.symbolSize=i&&o.clone(i)||(d?a[0]:[a[0],a[0]])),s.symbol=u(s.symbol,function(t){return"none"===t||"square"===t?"roundRect":t});var l=s.symbolSize;if(null!=l){var h=-(1/0);c(l,function(t){t>h&&(h=t)}),s.symbolSize=u(l,function(t){return m(t,[0,h],[0,a[0]],!0)})}},this)}var n=this.option,r={inRange:n.inRange,outOfRange:n.outOfRange},l=n.target||(n.target={}),h=n.controller||(n.controller={});o.merge(l,r),o.merge(h,r);var d=this.isCategory();t.call(this,l),t.call(this,h),e.call(this,l,"inRange","outOfRange"),i.call(this,h)},resetItemSize:function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},isCategory:function(){return!!this.option.categories},setSelected:v,getValueState:v});t.exports=x},function(t,e,i){var n=i(1),o=i(3),r=i(9),a=i(13),s=i(2),l=i(71);t.exports=s.extendComponentView({type:"visualMap",autoPositionValues:{left:1,right:1,top:1,bottom:1},init:function(t,e){this.ecModel=t,this.api=e,this.visualMapModel},render:function(t,e,i,n){return this.visualMapModel=t,t.get("show")===!1?void this.group.removeAll():void this.doRender.apply(this,arguments)},renderBackground:function(t){var e=this.visualMapModel,i=r.normalizeCssArray(e.get("padding")||0),n=t.getBoundingRect();t.add(new o.Rect({z2:-1,silent:!0,shape:{x:n.x-i[3],y:n.y-i[0],width:n.width+i[3]+i[1],height:n.height+i[0]+i[2]},style:{fill:e.get("backgroundColor"),stroke:e.get("borderColor"),lineWidth:e.get("borderWidth")}}))},getControllerVisual:function(t,e,i){function o(t){return u[t]}function r(t,e){u[t]=e}i=i||{};var a=i.forceState,s=this.visualMapModel,u={};if("symbol"===e&&(u.symbol=s.get("itemSymbol")),"color"===e){var h=s.get("contentColor");u.color=h}var c=s.controllerVisuals[a||s.getValueState(t)],d=l.prepareVisualTypes(c);return n.each(d,function(n){var a=c[n];i.convertOpacityToAlpha&&"opacity"===n&&(n="colorAlpha",a=c.__alphaForOpacity),l.dependsOn(n,e)&&a&&a.applyVisual(t,o,r)}),u[e]},positionGroup:function(t){var e=this.visualMapModel,i=this.api;a.positionGroup(t,e.getBoxLayoutParams(),{width:i.getWidth(), +height:i.getHeight()})},doRender:n.noop})},function(t,e,i){var n=i(1),o=i(13),r={getItemAlign:function(t,e,i){var n=t.option,r=n.align;if(null!=r&&"auto"!==r)return r;for(var a={width:e.getWidth(),height:e.getHeight()},s="horizontal"===n.orient?1:0,l=[["left","right","width"],["top","bottom","height"]],u=l[s],h=[0,null,10],c={},d=0;d<3;d++)c[l[1-s][d]]=h[d],c[u[d]]=2===d?i[0]:n[u[d]];var f=[["x","width",3],["y","height",0]][s],p=o.getLayoutRect(c,a,n.padding);return u[(p.margin[f[2]]||0)+p[f[0]]+.5*p[f[1]]<.5*a[f[1]]?0:1]},convertDataIndex:function(t){return n.each(t||[],function(e){null!=t.dataIndex&&(t.dataIndexInside=t.dataIndex,t.dataIndex=null)}),t}};t.exports=r},function(t,e,i){function n(t,e){return t&&t.hasOwnProperty&&t.hasOwnProperty(e)}var o=i(1),r=o.each;t.exports=function(t){var e=t&&t.visualMap;o.isArray(e)||(e=e?[e]:[]),r(e,function(t){if(t){n(t,"splitList")&&!n(t,"pieces")&&(t.pieces=t.splitList,delete t.splitList);var e=t.pieces;e&&o.isArray(e)&&r(e,function(t){o.isObject(t)&&(n(t,"start")&&!n(t,"min")&&(t.min=t.start),n(t,"end")&&!n(t,"max")&&(t.max=t.end))})}})}},function(t,e,i){i(12).registerSubTypeDefaulter("visualMap",function(t){return t.categories||(t.pieces?t.pieces.length>0:t.splitNumber>0)&&!t.calculable?"piecewise":"continuous"})},function(t,e,i){function n(t,e){t.eachTargetSeries(function(e){var i=e.getData();s.applyVisual(t.stateList,t.targetVisuals,i,t.getValueState,t,t.getDataDimension(i))})}function o(t){t.eachSeries(function(e){var i=e.getData(),n=[];t.eachComponent("visualMap",function(t){if(t.isTargetSeries(e)){var o={};n.push(o),o.stops=t.getStops(e,r),o.dimension=t.getDataDimension(i)}}),e.getData().setVisual("visualMeta",n)})}function r(t,e,i){function n(t){return s[t]}function o(t,e){s[t]=e}for(var r=t.targetVisuals[i],a=l.prepareVisualTypes(r),s={},u=0,h=a.length;u<h;u++){var c=a[u],d=r["colorAlpha"===c?"__alphaForOpacity":c];d&&d.applyVisual(e,n,o)}return s.color}var a=i(2),s=i(173),l=i(71);a.registerVisual(a.PRIORITY.VISUAL.COMPONENT,function(t){t.eachComponent("visualMap",function(e){n(e,t)}),o(t)})},function(t,e,i){var n=i(2),o={type:"selectDataRange",event:"dataRangeSelected",update:"update"};n.registerAction(o,function(t,e){e.eachComponent({mainType:"visualMap",query:t},function(e){e.setSelected(t.selected)})})},function(t,e,i){function n(){l.call(this)}function o(t){this.name=t,this.zoomLimit,l.call(this),this._roamTransform=new n,this._viewTransform=new n,this._center,this._zoom}function r(t,e,i,n){var o=i.seriesModel,r=o?o.coordinateSystem:null;return r===this?r[t](n):null}var a=i(5),s=i(19),l=i(88),u=i(1),h=i(8),c=a.applyTransform;u.mixin(n,l),o.prototype={constructor:o,type:"view",dimensions:["x","y"],setBoundingRect:function(t,e,i,n){return this._rect=new h(t,e,i,n),this._rect},getBoundingRect:function(){return this._rect},setViewRect:function(t,e,i,n){this.transformTo(t,e,i,n),this._viewRect=new h(t,e,i,n)},transformTo:function(t,e,i,n){var o=this.getBoundingRect(),r=this._viewTransform;r.transform=o.calculateTransform(new h(t,e,i,n)),r.decomposeTransform(),this._updateTransform()},setCenter:function(t){t&&(this._center=t,this._updateCenterAndZoom())},setZoom:function(t){t=t||1;var e=this.zoomLimit;e&&(null!=e.max&&(t=Math.min(e.max,t)),null!=e.min&&(t=Math.max(e.min,t))),this._zoom=t,this._updateCenterAndZoom()},getDefaultCenter:function(){var t=this.getBoundingRect(),e=t.x+t.width/2,i=t.y+t.height/2;return[e,i]},getCenter:function(){return this._center||this.getDefaultCenter()},getZoom:function(){return this._zoom||1},getRoamTransform:function(){return this._roamTransform},_updateCenterAndZoom:function(){var t=this._viewTransform.getLocalTransform(),e=this._roamTransform,i=this.getDefaultCenter(),n=this.getCenter(),o=this.getZoom();n=a.applyTransform([],n,t),i=a.applyTransform([],i,t),e.origin=n,e.position=[i[0]-n[0],i[1]-n[1]],e.scale=[o,o],this._updateTransform()},_updateTransform:function(){var t=this._roamTransform,e=this._viewTransform;e.parent=t,t.updateTransform(),e.updateTransform(),e.transform&&s.copy(this.transform||(this.transform=[]),e.transform),this.transform?(this.invTransform=this.invTransform||[],s.invert(this.invTransform,this.transform)):this.invTransform=null,this.decomposeTransform()},getViewRect:function(){return this._viewRect},getViewRectAfterRoam:function(){var t=this.getBoundingRect().clone();return t.applyTransform(this.transform),t},dataToPoint:function(t){var e=this.transform;return e?c([],t,e):[t[0],t[1]]},pointToData:function(t){var e=this.invTransform;return e?c([],t,e):[t[0],t[1]]},convertToPixel:u.curry(r,"dataToPoint"),convertFromPixel:u.curry(r,"pointToData"),containPoint:function(t){return this.getViewRect().contain(t[0],t[1])}},u.mixin(o,l),t.exports=o},function(t,e,i){function n(t,e,i){if(this.name=t,this.contours=e,i)i=[i[0],i[1]];else{var n=this.getBoundingRect();i=[n.x+n.width/2,n.y+n.height/2]}this.center=i}var o=i(242),r=i(8),a=i(73),s=i(5);n.prototype={constructor:n,getBoundingRect:function(){var t=this._rect;if(t)return t;for(var e=Number.MAX_VALUE,i=[e,e],n=[-e,-e],o=[],l=[],u=this.contours,h=0;h<u.length;h++)a.fromPoints(u[h],o,l),s.min(i,i,o),s.max(n,n,l);return 0===h&&(i[0]=i[1]=n[0]=n[1]=0),this._rect=new r(i[0],i[1],n[0]-i[0],n[1]-i[1])},contain:function(t){var e=this.getBoundingRect(),i=this.contours;if(e.contain(t[0],t[1]))for(var n=0,r=i.length;n<r;n++)if(o.contain(i[n],t[0],t[1]))return!0;return!1},transformTo:function(t,e,i,n){var o=this.getBoundingRect(),a=o.width/o.height;i?n||(n=i/a):i=a*n;for(var l=new r(t,e,i,n),u=o.calculateTransform(l),h=this.contours,c=0;c<h.length;c++)for(var d=0;d<h[c].length;d++)s.applyTransform(h[c][d],h[c][d],u);o=this._rect,o.copy(l),this.center=[o.x+o.width/2,o.y+o.height/2]}},t.exports=n},function(t,e,i){function n(t,e){var i=[];return t.eachComponent("parallel",function(n,r){var a=new o(n,t,e);a.name="parallel_"+r,a.resize(n,e),n.coordinateSystem=a,a.model=n,i.push(a)}),t.eachSeries(function(e){if("parallel"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"parallel",index:e.get("parallelIndex"),id:e.get("parallelId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}var o=i(363);i(23).register("parallel",{create:n})},function(t,e,i){function n(t){var e=t.mainData,i=t.datas;i||(i={main:e},t.datasAttr={main:"data"}),t.datas=t.mainData=null,u(e,i,t),d(i,function(i){d(e.TRANSFERABLE_METHODS,function(e){i.wrapMethod(e,c.curry(o,t))})}),e.wrapMethod("cloneShallow",c.curry(a,t)),d(e.CHANGABLE_METHODS,function(i){e.wrapMethod(i,c.curry(r,t))}),c.assert(i[e.dataType]===e)}function o(t,e){if(l(this)){var i=c.extend({},this[f]);i[this.dataType]=e,u(e,i,t)}else h(e,this.dataType,this[p],t);return e}function r(t,e){return t.struct&&t.struct.update(this),e}function a(t,e){return d(e[f],function(i,n){i!==e&&h(i.cloneShallow(),n,e,t)}),e}function s(t){var e=this[p];return null==t||null==e?e:e[f][t]}function l(t){return t[p]===t}function u(t,e,i){t[f]={},d(e,function(e,n){h(e,n,t,i)})}function h(t,e,i,n){i[f][e]=t,t[p]=i,t.dataType=e,n.struct&&(t[n.structAttr]=n.struct,n.struct[n.datasAttr[e]]=t),t.getLinkedData=s}var c=i(1),d=c.each,f="\0__link_datas",p="\0__link_mainData";t.exports=n},function(t,e,i){function n(t,e){return Math.abs(t-e)<a}function o(t,e,i){var o=0,a=t[0];if(!a)return!1;for(var s=1;s<t.length;s++){var l=t[s];o+=r(a[0],a[1],l[0],l[1],e,i),a=l}var u=t[0];return n(a[0],u[0])&&n(a[1],u[1])||(o+=r(a[0],a[1],u[0],u[1],e,i)),0!==o}var r=i(86),a=1e-8;t.exports={contain:o}},function(t,e,i){var n=i(2);i(244),i(245),n.registerVisual(i(247)),n.registerLayout(i(246))},function(t,e,i){"use strict";var n=i(1),o=i(15),r=i(171),a=o.extend({type:"series.boxplot",dependencies:["xAxis","yAxis","grid"],valueDimensions:["min","Q1","median","Q3","max"],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,layout:null,boxWidth:[7,50],itemStyle:{normal:{color:"#fff",borderWidth:1},emphasis:{borderWidth:2,shadowBlur:5,shadowOffsetX:2,shadowOffsetY:2,shadowColor:"rgba(0,0,0,0.4)"}},animationEasing:"elasticOut",animationDuration:800}});n.mixin(a,r.seriesModelMixin,!0),t.exports=a},function(t,e,i){"use strict";function n(t,e,i){var n=e.getItemModel(i),o=n.getModel(u),r=e.getItemVisual(i,"color"),s=o.getItemStyle(["borderColor"]),l=t.childAt(t.whiskerIndex);l.style.set(s),l.style.stroke=r,l.dirty();var c=t.childAt(t.bodyIndex);c.style.set(s),c.style.stroke=r,c.dirty();var d=n.getModel(h).getItemStyle();a.setHoverStyle(t,d)}var o=i(1),r=i(27),a=i(3),s=i(171),l=r.extend({type:"boxplot",getStyleUpdater:function(){return n},dispose:o.noop});o.mixin(l,s.viewMixin,!0);var u=["itemStyle","normal"],h=["itemStyle","emphasis"];t.exports=l},function(t,e,i){function n(t){var e=[],i=[];return t.eachSeriesByType("boxplot",function(t){var n=t.getBaseAxis(),o=a.indexOf(i,n);o<0&&(o=i.length,i[o]=n,e[o]={axis:n,seriesModels:[]}),e[o].seriesModels.push(t)}),e}function o(t){var e,i,n=t.axis,o=t.seriesModels,r=o.length,s=t.boxWidthList=[],h=t.boxOffsetList=[],c=[];if("category"===n.type)i=n.getBandWidth();else{var d=0;u(o,function(t){d=Math.max(d,t.getData().count())}),e=n.getExtent(),Math.abs(e[1]-e[0])/d}u(o,function(t){var e=t.get("boxWidth");a.isArray(e)||(e=[e,e]),c.push([l(e[0],i)||0,l(e[1],i)||0])});var f=.8*i-2,p=f/r*.3,g=(f-p*(r-1))/r,m=g/2-f/2;u(o,function(t,e){h.push(m),m+=p+g,s.push(Math.min(Math.max(g,c[e][0]),c[e][1]))})}function r(t,e,i){var n=t.coordinateSystem,o=t.getData(),r=t.dimensions,a=t.get("layout"),s=i/2;o.each(r,function(){function t(t){var i=[];i[f]=c,i[p]=t;var o;return isNaN(c)||isNaN(t)?o=[NaN,NaN]:(o=n.dataToPoint(i),o[f]+=e),o}function i(t,e){var i=t.slice(),n=t.slice();i[f]+=s,n[f]-=s,e?x.push(i,n):x.push(n,i)}function l(t){var e=[t.slice(),t.slice()];e[0][f]-=s,e[1][f]+=s,y.push(e)}var u=arguments,h=r.length,c=u[0],d=u[h],f="horizontal"===a?0:1,p=1-f,g=t(u[3]),m=t(u[1]),v=t(u[5]),y=[[m,t(u[2])],[v,t(u[4])]];l(m),l(v),l(g);var x=[];i(y[0][1],0),i(y[1][1],1),o.setItemLayout(d,{chartLayout:a,initBaseline:g[p],median:g,bodyEnds:x,whiskerEnds:y})})}var a=i(1),s=i(4),l=s.parsePercent,u=a.each;t.exports=function(t){var e=n(t);u(e,function(t){var e=t.seriesModels;e.length&&(o(t),u(e,function(e,i){r(e,t.boxOffsetList[i],t.boxWidthList[i])}))})}},function(t,e){var i=["itemStyle","normal","borderColor"];t.exports=function(t,e){var n=t.get("color");t.eachRawSeriesByType("boxplot",function(e){var o=n[e.seriesIndex%n.length],r=e.getData();r.setVisual({legendSymbol:"roundRect",color:e.get(i)||o}),t.isSeriesFiltered(e)||r.each(function(t){var e=r.getItemModel(t);r.setItemVisual(t,{color:e.get(i,!0)})})})}},function(t,e,i){var n=i(2);i(249),i(250),n.registerPreprocessor(i(253)),n.registerVisual(i(252)),n.registerLayout(i(251))},function(t,e,i){"use strict";var n=i(1),o=i(15),r=i(171),a=i(9),s=a.encodeHTML,l=a.addCommas,u=o.extend({type:"series.candlestick",dependencies:["xAxis","yAxis","grid"],valueDimensions:["open","close","lowest","highest"],dimensions:null,defaultOption:{zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,hoverAnimation:!0,layout:null,itemStyle:{normal:{color:"#c23531",color0:"#314656",borderWidth:1,borderColor:"#c23531",borderColor0:"#314656"},emphasis:{borderWidth:2}},animationUpdate:!1,animationEasing:"linear",animationDuration:300},getShadowDim:function(){return"open"},formatTooltip:function(t,e){var i=n.map(this.valueDimensions,function(e){return e+": "+l(this._data.get(e,t))},this);return s(this.name)+"<br />"+i.join("<br />")},brushSelector:function(t,e){return e.rect(t.brushRect)}});n.mixin(u,r.seriesModelMixin,!0),t.exports=u},function(t,e,i){"use strict";function n(t,e,i){var n=e.getItemModel(i),o=n.getModel(u),r=e.getItemVisual(i,"color"),s=e.getItemVisual(i,"borderColor")||r,l=o.getItemStyle(["color","color0","borderColor","borderColor0"]),c=t.childAt(t.whiskerIndex);c.useStyle(l),c.style.stroke=s;var d=t.childAt(t.bodyIndex);d.useStyle(l),d.style.fill=r,d.style.stroke=s;var f=n.getModel(h).getItemStyle();a.setHoverStyle(t,f)}var o=i(1),r=i(27),a=i(3),s=i(171),l=r.extend({type:"candlestick",getStyleUpdater:function(){return n},dispose:o.noop});o.mixin(l,s.viewMixin,!0);var u=["itemStyle","normal"],h=["itemStyle","emphasis"];t.exports=l},function(t,e){function i(t,e){var i,a=t.getBaseAxis(),s="category"===a.type?a.getBandWidth():(i=a.getExtent(),Math.abs(i[1]-i[0])/e.count());return s/2-2>o?s/2-2:s-o>r?o:Math.max(s-r,n)}var n=2,o=5,r=4;t.exports=function(t){t.eachSeriesByType("candlestick",function(t){var e=t.coordinateSystem,n=t.getData(),o=t.dimensions,r=t.get("layout"),a=i(t,n);n.each(o,function(){function t(t){var i=[];return i[d]=h,i[f]=t,isNaN(h)||isNaN(t)?[NaN,NaN]:e.dataToPoint(i)}function i(t,e){var i=t.slice(),n=t.slice();i[d]+=a/2,n[d]-=a/2,e?T.push(i,n):T.push(n,i)}function s(){var e=t(Math.min(p,g,m,v)),i=t(Math.max(p,g,m,v));return e[d]-=a/2,i[d]-=a/2,{x:e[0],y:e[1],width:f?a:i[0]-e[0],height:f?i[1]-e[1]:a}}var l=arguments,u=o.length,h=l[0],c=l[u],d="horizontal"===r?0:1,f=1-d,p=l[1],g=l[2],m=l[3],v=l[4],y=Math.min(p,g),x=Math.max(p,g),_=t(y),b=t(x),w=t(m),S=t(v),M=[[S,b],[w,_]],T=[];i(b,0),i(_,1),n.setItemLayout(c,{chartLayout:r,sign:p>g?-1:p<g?1:0,initBaseline:p>g?b[f]:_[f],bodyEnds:T,whiskerEnds:M,brushRect:s()})},!0)})}},function(t,e){var i=["itemStyle","normal","borderColor"],n=["itemStyle","normal","borderColor0"],o=["itemStyle","normal","color"],r=["itemStyle","normal","color0"];t.exports=function(t,e){t.eachRawSeriesByType("candlestick",function(e){var a=e.getData();a.setVisual({legendSymbol:"roundRect"}),t.isSeriesFiltered(e)||a.each(function(t){var e=a.getItemModel(t),s=a.getItemLayout(t).sign;a.setItemVisual(t,{color:e.get(s>0?o:r),borderColor:e.get(s>0?i:n)})})})}},function(t,e,i){var n=i(1);t.exports=function(t){t&&n.isArray(t.series)&&n.each(t.series,function(t){n.isObject(t)&&"k"===t.type&&(t.type="candlestick")})}},function(t,e,i){var n=i(1),o=i(2);i(255),i(256),o.registerVisual(n.curry(i(46),"effectScatter","circle",null)),o.registerLayout(n.curry(i(55),"effectScatter"))},function(t,e,i){"use strict";var n=i(34),o=i(15);t.exports=o.extend({type:"series.effectScatter",dependencies:["grid","polar"],getInitialData:function(t,e){var i=n(t.data,this,e);return i},brushSelector:"point",defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,effectType:"ripple",progressive:0,showEffectOn:"render",rippleEffect:{period:4,scale:2.5,brushType:"fill"},symbolSize:10}})},function(t,e,i){var n=i(39),o=i(283);i(2).extendChartView({type:"effectScatter",init:function(){this._symbolDraw=new n(o)},render:function(t,e,i){var n=t.getData(),o=this._symbolDraw;o.updateData(n),this.group.add(o.group)},updateLayout:function(){this._symbolDraw.updateLayout()},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(e)},dispose:function(){}})},function(t,e,i){var n=i(1),o=i(2);i(258),i(259),o.registerVisual(n.curry(i(72),"funnel")),o.registerLayout(i(260)),o.registerProcessor(n.curry(i(70),"funnel"))},function(t,e,i){"use strict";var n=i(14),o=i(7),r=i(29),a=i(2).extendSeriesModel({type:"series.funnel",init:function(t){a.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._dataBeforeProcessed},this._defaultLabelLine(t)},getInitialData:function(t,e){var i=r(["value"],t.data),o=new n(i,this);return o.initData(t.data),o},_defaultLabelLine:function(t){o.defaultEmphasis(t.labelLine,["show"]);var e=t.labelLine.normal,i=t.labelLine.emphasis;e.show=e.show&&t.label.normal.show,i.show=i.show&&t.label.emphasis.show},defaultOption:{zlevel:0,z:2,legendHoverLink:!0,left:80,top:60,right:80,bottom:60,minSize:"0%",maxSize:"100%",sort:"descending",gap:0,funnelAlign:"center",label:{normal:{show:!0,position:"outer"},emphasis:{show:!0}},labelLine:{normal:{show:!0,length:20,lineStyle:{width:1,type:"solid"}},emphasis:{}},itemStyle:{normal:{borderColor:"#fff",borderWidth:1},emphasis:{}}}});t.exports=a},function(t,e,i){function n(t,e){function i(){a.ignore=a.hoverIgnore,s.ignore=s.hoverIgnore}function n(){a.ignore=a.normalIgnore,s.ignore=s.normalIgnore}r.Group.call(this);var o=new r.Polygon,a=new r.Polyline,s=new r.Text;this.add(o),this.add(a),this.add(s),this.updateData(t,e,!0),this.on("emphasis",i).on("normal",n).on("mouseover",i).on("mouseout",n)}function o(t,e,i,n){var o=n.getModel("textStyle"),r=n.get("position"),s="inside"===r||"inner"===r||"center"===r;return{fill:o.getTextColor()||(s?"#fff":t.getItemVisual(e,"color")),textFont:o.getFont(),text:a.retrieve(t.hostModel.getFormattedLabel(e,i),t.getName(e))}}var r=i(3),a=i(1),s=n.prototype,l=["itemStyle","normal","opacity"];s.updateData=function(t,e,i){var n=this.childAt(0),o=t.hostModel,s=t.getItemModel(e),u=t.getItemLayout(e),h=t.getItemModel(e).get(l);h=null==h?1:h,n.useStyle({}),i?(n.setShape({points:u.points}),n.setStyle({opacity:0}),r.initProps(n,{style:{opacity:h}},o,e)):r.updateProps(n,{style:{opacity:h},shape:{points:u.points}},o,e);var c=s.getModel("itemStyle"),d=t.getItemVisual(e,"color");n.setStyle(a.defaults({lineJoin:"round",fill:d},c.getModel("normal").getItemStyle(["opacity"]))),n.hoverStyle=c.getModel("emphasis").getItemStyle(),this._updateLabel(t,e),r.setHoverStyle(this)},s._updateLabel=function(t,e){var i=this.childAt(1),n=this.childAt(2),a=t.hostModel,s=t.getItemModel(e),l=t.getItemLayout(e),u=l.label,h=t.getItemVisual(e,"color");r.updateProps(i,{shape:{points:u.linePoints||u.linePoints}},a,e),r.updateProps(n,{style:{x:u.x,y:u.y}},a,e),n.attr({style:{textAlign:u.textAlign,textVerticalAlign:u.verticalAlign,textFont:u.font},rotation:u.rotation,origin:[u.x,u.y],z2:10});var c=s.getModel("label.normal"),d=s.getModel("label.emphasis"),f=s.getModel("labelLine.normal"),p=s.getModel("labelLine.emphasis");n.setStyle(o(t,e,"normal",c)),n.ignore=n.normalIgnore=!c.get("show"),n.hoverIgnore=!d.get("show"),i.ignore=i.normalIgnore=!f.get("show"),i.hoverIgnore=!p.get("show"),i.setStyle({stroke:h}),i.setStyle(f.getModel("lineStyle").getLineStyle()),n.hoverStyle=o(t,e,"emphasis",d),i.hoverStyle=p.getModel("lineStyle").getLineStyle()},a.inherits(n,r.Group);var u=i(27).extend({type:"funnel",render:function(t,e,i){var o=t.getData(),r=this._data,a=this.group;o.diff(r).add(function(t){var e=new n(o,t);o.setItemGraphicEl(t,e),a.add(e)}).update(function(t,e){var i=r.getItemGraphicEl(e);i.updateData(o,t),a.add(i),o.setItemGraphicEl(t,i)}).remove(function(t){var e=r.getItemGraphicEl(t);a.remove(e)}).execute(),this._data=o},remove:function(){this.group.removeAll(),this._data=null},dispose:function(){}});t.exports=u},function(t,e,i){function n(t,e){return a.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function o(t,e){for(var i=t.mapArray("value",function(t){return t}),n=[],o="ascending"===e,r=0,a=t.count();r<a;r++)n[r]=r;return n.sort(function(t,e){return o?i[t]-i[e]:i[e]-i[t]}),n}function r(t){t.each(function(e){var i,n,o,r,a=t.getItemModel(e),s=a.getModel("label.normal"),l=s.get("position"),u=a.getModel("labelLine.normal"),h=t.getItemLayout(e),c=h.points,d="inner"===l||"inside"===l||"center"===l;if(d)n=(c[0][0]+c[1][0]+c[2][0]+c[3][0])/4,o=(c[0][1]+c[1][1]+c[2][1]+c[3][1])/4,i="center",r=[[n,o],[n,o]];else{var f,p,g,m=u.get("length");"left"===l?(f=(c[3][0]+c[0][0])/2,p=(c[3][1]+c[0][1])/2,g=f-m,n=g-5,i="right"):(f=(c[1][0]+c[2][0])/2,p=(c[1][1]+c[2][1])/2,g=f+m,n=g+5,i="left");var v=p;r=[[f,p],[g,v]],o=v}h.label={linePoints:r,x:n,y:o,verticalAlign:"middle",textAlign:i,inside:d}})}var a=i(13),s=i(4),l=s.parsePercent;t.exports=function(t,e,i){t.eachSeriesByType("funnel",function(t){var i=t.getData(),a=t.get("sort"),u=n(t,e),h=o(i,a),c=[l(t.get("minSize"),u.width),l(t.get("maxSize"),u.width)],d=i.getDataExtent("value"),f=t.get("min"),p=t.get("max");null==f&&(f=Math.min(d[0],0)),null==p&&(p=d[1]);var g=t.get("funnelAlign"),m=t.get("gap"),v=(u.height-m*(i.count()-1))/i.count(),y=u.y,x=function(t,e){var n,o=i.get("value",t)||0,r=s.linearMap(o,[f,p],c,!0);switch(g){case"left":n=u.x;break;case"center":n=u.x+(u.width-r)/2;break;case"right":n=u.x+u.width-r}return[[n,e],[n+r,e]]};"ascending"===a&&(v=-v,m=-m,y+=u.height,h=h.reverse());for(var _=0;_<h.length;_++){var b=h[_],w=h[_+1],S=x(b,y),M=x(w,y+v);y+=v+m,i.setItemLayout(b,{points:S.concat(M.slice().reverse())})}r(i)})}},function(t,e,i){i(262),i(263)},function(t,e,i){var n=i(14),o=i(15),r=i(1),a=o.extend({type:"series.gauge",getInitialData:function(t,e){var i=new n(["value"],this),o=t.data||[];return r.isArray(o)||(o=[o]),i.initData(o),i},defaultOption:{zlevel:0,z:2,center:["50%","50%"],legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,clockwise:!0,min:0,max:100,splitNumber:10,axisLine:{show:!0,lineStyle:{color:[[.2,"#91c7ae"],[.8,"#63869e"],[1,"#c23531"]],width:30}},splitLine:{show:!0,length:30,lineStyle:{color:"#eee",width:2,type:"solid"}},axisTick:{show:!0,splitNumber:5,length:8,lineStyle:{color:"#eee",width:1,type:"solid"}},axisLabel:{show:!0,distance:5,textStyle:{color:"auto"}},pointer:{show:!0,length:"80%",width:8},itemStyle:{normal:{color:"auto"}},title:{show:!0,offsetCenter:[0,"-40%"],textStyle:{color:"#333",fontSize:15}},detail:{show:!0,backgroundColor:"rgba(0,0,0,0)",borderWidth:0,borderColor:"#ccc",width:100,height:40,offsetCenter:[0,"40%"],textStyle:{color:"auto",fontSize:30}}}});t.exports=a},function(t,e,i){function n(t,e){var i=t.get("center"),n=e.getWidth(),o=e.getHeight(),r=Math.min(n,o),a=l(i[0],e.getWidth()),s=l(i[1],e.getHeight()),u=l(t.get("radius"),r/2);return{cx:a,cy:s,r:u}}function o(t,e){return e&&("string"==typeof e?t=e.replace("{value}",t):"function"==typeof e&&(t=e(t))),t}var r=i(264),a=i(3),s=i(4),l=s.parsePercent,u=2*Math.PI,h=i(27).extend({type:"gauge",render:function(t,e,i){this.group.removeAll();var o=t.get("axisLine.lineStyle.color"),r=n(t,i);this._renderMain(t,e,i,o,r)},dispose:function(){},_renderMain:function(t,e,i,n,o){for(var r=this.group,s=t.getModel("axisLine"),l=s.getModel("lineStyle"),h=t.get("clockwise"),c=-t.get("startAngle")/180*Math.PI,d=-t.get("endAngle")/180*Math.PI,f=(d-c)%u,p=c,g=l.get("width"),m=0;m<n.length;m++){var v=Math.min(Math.max(n[m][0],0),1),d=c+f*v,y=new a.Sector({shape:{startAngle:p,endAngle:d,cx:o.cx,cy:o.cy,clockwise:h,r0:o.r-g,r:o.r},silent:!0});y.setStyle({fill:n[m][1]}),y.setStyle(l.getLineStyle(["color","borderWidth","borderColor"])),r.add(y),p=d}var x=function(t){if(t<=0)return n[0][1];for(var e=0;e<n.length;e++)if(n[e][0]>=t&&(0===e?0:n[e-1][0])<t)return n[e][1];return n[e-1][1]};if(!h){var _=c;c=d,d=_}this._renderTicks(t,e,i,x,o,c,d,h),this._renderPointer(t,e,i,x,o,c,d,h),this._renderTitle(t,e,i,x,o),this._renderDetail(t,e,i,x,o)},_renderTicks:function(t,e,i,n,r,u,h,c){for(var d=this.group,f=r.cx,p=r.cy,g=r.r,m=t.get("min"),v=t.get("max"),y=t.getModel("splitLine"),x=t.getModel("axisTick"),_=t.getModel("axisLabel"),b=t.get("splitNumber"),w=x.get("splitNumber"),S=l(y.get("length"),g),M=l(x.get("length"),g),T=u,I=(h-u)/b,A=I/w,L=y.getModel("lineStyle").getLineStyle(),C=x.getModel("lineStyle").getLineStyle(),D=_.getModel("textStyle"),P=0;P<=b;P++){var k=Math.cos(T),z=Math.sin(T);if(y.get("show")){var O=new a.Line({shape:{x1:k*g+f,y1:z*g+p,x2:k*(g-S)+f,y2:z*(g-S)+p},style:L,silent:!0});"auto"===L.stroke&&O.setStyle({stroke:n(P/b)}),d.add(O)}if(_.get("show")){var E=o(s.round(P/b*(v-m)+m),_.get("formatter")),R=_.get("distance"),V=new a.Text({style:{text:E,x:k*(g-S-R)+f,y:z*(g-S-R)+p,fill:D.getTextColor(),textFont:D.getFont(),textVerticalAlign:z<-.4?"top":z>.4?"bottom":"middle",textAlign:k<-.4?"left":k>.4?"right":"center"},silent:!0});"auto"===V.style.fill&&V.setStyle({fill:n(P/b)}),d.add(V)}if(x.get("show")&&P!==b){for(var N=0;N<=w;N++){var k=Math.cos(T),z=Math.sin(T),B=new a.Line({shape:{x1:k*g+f,y1:z*g+p,x2:k*(g-M)+f,y2:z*(g-M)+p},silent:!0,style:C});"auto"===C.stroke&&B.setStyle({stroke:n((P+N/w)/b)}),d.add(B),T+=A}T-=A}else T+=I}},_renderPointer:function(t,e,i,n,o,u,h,c){var d=[+t.get("min"),+t.get("max")],f=[u,h],p=t.getData(),g=this._data,m=this.group;p.diff(g).add(function(e){var i=new r({shape:{angle:u}});a.updateProps(i,{shape:{angle:s.linearMap(p.get("value",e),d,f,!0)}},t),m.add(i),p.setItemGraphicEl(e,i)}).update(function(e,i){var n=g.getItemGraphicEl(i);a.updateProps(n,{shape:{angle:s.linearMap(p.get("value",e),d,f,!0)}},t),m.add(n),p.setItemGraphicEl(e,n)}).remove(function(t){var e=g.getItemGraphicEl(t);m.remove(e)}).execute(),p.eachItemGraphicEl(function(t,e){var i=p.getItemModel(e),r=i.getModel("pointer");t.setShape({x:o.cx,y:o.cy,width:l(r.get("width"),o.r),r:l(r.get("length"),o.r)}),t.useStyle(i.getModel("itemStyle.normal").getItemStyle()),"auto"===t.style.fill&&t.setStyle("fill",n((p.get("value",e)-d[0])/(d[1]-d[0]))),a.setHoverStyle(t,i.getModel("itemStyle.emphasis").getItemStyle())}),this._data=p},_renderTitle:function(t,e,i,n,o){var r=t.getModel("title");if(r.get("show")){var s=r.getModel("textStyle"),u=r.get("offsetCenter"),h=o.cx+l(u[0],o.r),c=o.cy+l(u[1],o.r),d=new a.Text({style:{x:h,y:c,text:t.getData().getName(0),fill:s.getTextColor(),textFont:s.getFont(),textAlign:"center",textVerticalAlign:"middle"}});this.group.add(d)}},_renderDetail:function(t,e,i,n,r){var u=t.getModel("detail"),h=t.get("min"),c=t.get("max");if(u.get("show")){var d=u.getModel("textStyle"),f=u.get("offsetCenter"),p=r.cx+l(f[0],r.r),g=r.cy+l(f[1],r.r),m=l(u.get("width"),r.r),v=l(u.get("height"),r.r),y=t.getData().get("value",0),x=new a.Rect({shape:{x:p-m/2,y:g-v/2,width:m,height:v},style:{text:o(y,u.get("formatter")),fill:u.get("backgroundColor"),textFill:d.getTextColor(),textFont:d.getFont()}});"auto"===x.style.textFill&&x.setStyle("textFill",n(s.linearMap(y,[h,c],[0,1],!0))),x.setStyle(u.getItemStyle(["color"])),this.group.add(x)}}});t.exports=h},function(t,e,i){t.exports=i(6).extend({type:"echartsGaugePointer",shape:{angle:0,width:10,r:10,x:0,y:0},buildPath:function(t,e){var i=Math.cos,n=Math.sin,o=e.r,r=e.width,a=e.angle,s=e.x-i(a)*r*(r>=o/3?1:2),l=e.y-n(a)*r*(r>=o/3?1:2);a=e.angle-Math.PI/2,t.moveTo(s,l),t.lineTo(e.x+i(a)*r,e.y+n(a)*r),t.lineTo(e.x+i(e.angle)*o,e.y+n(e.angle)*o),t.lineTo(e.x-i(a)*r,e.y-n(a)*r),t.lineTo(s,l)}})},function(t,e,i){var n=i(2),o=i(1);i(266),i(267),i(276),n.registerProcessor(i(269)),n.registerVisual(o.curry(i(46),"graph","circle",null)),n.registerVisual(i(270)),n.registerVisual(i(273)),n.registerLayout(i(277)),n.registerLayout(i(271)),n.registerLayout(i(275)),n.registerCoordinateSystem("graphView",{create:i(272)})},function(t,e,i){"use strict";var n=i(14),o=i(1),r=i(7),a=i(10),s=i(228),l=i(2).extendSeriesModel({type:"series.graph",init:function(t){l.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._categoriesData},this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeOption:function(t){l.superApply(this,"mergeOption",arguments),this.fillDataTextStyle(t.edges||t.links),this._updateCategoriesData()},mergeDefaultAndTheme:function(t){l.superApply(this,"mergeDefaultAndTheme",arguments),r.defaultEmphasis(t.edgeLabel,r.LABEL_OPTIONS)},getInitialData:function(t,e){function i(t,e){t.wrapMethod("getItemModel",function(t){var e=r._categoriesModels,i=t.getShallow("category"),n=e[i];return n&&(n.parentModel=t.parentModel,t.parentModel=n),t});var i=r.getModel("edgeLabel"),n=function(t,e){var o=(t||"").split(".");"label"===o[0]&&(e=e||i.getModel(o.slice(1)));var r=a.prototype.getModel.call(this,o,e);return r.getModel=n,r};e.wrapMethod("getItemModel",function(t){return t.getModel=n,t})}var n=t.edges||t.links||[],o=t.data||t.nodes||[],r=this;if(o&&n)return s(o,n,this,!0,i).data},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},getCategoriesData:function(){return this._categoriesData},formatTooltip:function(t,e,i){if("edge"===i){var n=this.getData(),o=this.getDataParams(t,i),r=n.graph.getEdgeByIndex(t),a=n.getName(r.node1.dataIndex),s=n.getName(r.node2.dataIndex),u=a+" > "+s;return o.value&&(u+=" : "+o.value),u}return l.superApply(this,"formatTooltip",arguments)},_updateCategoriesData:function(){var t=o.map(this.option.categories||[],function(t){return null!=t.value?t:o.extend({value:0},t)}),e=new n(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray(function(t){return e.getItemModel(t,!0)})},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},ifEnableAnimation:function(){return l.superCall(this,"ifEnableAnimation")&&!("force"===this.get("layout")&&this.get("force.layoutAnimation"))},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",legendHoverLink:!0,hoverAnimation:!0,layout:null,focusNodeAdjacency:!1,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{normal:{position:"middle"},emphasis:{}},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{normal:{show:!1,formatter:"{b}"},emphasis:{show:!0}},itemStyle:{normal:{},emphasis:{}},lineStyle:{normal:{color:"#aaa",width:1,curveness:0,opacity:.5},emphasis:{}}}});t.exports=l},function(t,e,i){function n(t,e){return t.getVisual("opacity")||t.getModel().get(e)}var o=i(39),r=i(95),a=i(79),s=i(3),l=i(268),u=i(1),h=["itemStyle","normal","opacity"],c=["lineStyle","normal","opacity"];i(2).extendChartView({type:"graph",init:function(t,e){var i=new o,n=new r,s=this.group,l=new a(e.getZr(),s);s.add(i.group),s.add(n.group),this._symbolDraw=i,this._lineDraw=n,this._controller=l,this._firstRender=!0},render:function(t,e,i){var n=t.coordinateSystem;this._model=t,this._nodeScaleRatio=t.get("nodeScaleRatio");var o=this._symbolDraw,r=this._lineDraw,a=this.group;if("view"===n.type){var u={position:n.position,scale:n.scale};this._firstRender?a.attr(u):s.updateProps(a,u,t)}l(t.getGraph(),this._getNodeGlobalScale(t));var h=t.getData();o.updateData(h);var c=t.getEdgeData();r.updateData(c),this._updateNodeAndLinkScale(),this._updateController(t,i),clearTimeout(this._layoutTimeout);var d=t.forceLayout,f=t.get("force.layoutAnimation");d&&this._startForceLayoutIteration(d,f),h.eachItemGraphicEl(function(t,e){var i=h.getItemModel(e);t.off("drag").off("dragend");var n=h.getItemModel(e).get("draggable");n&&t.on("drag",function(){d&&(d.warmUp(),!this._layouting&&this._startForceLayoutIteration(d,f),d.setFixed(e),h.setItemLayout(e,t.position))},this).on("dragend",function(){d&&d.setUnfixed(e)},this),t.setDraggable(n&&d),t.off("mouseover",this._focusNodeAdjacency),t.off("mouseout",this._unfocusAll),i.get("focusNodeAdjacency")&&(t.on("mouseover",this._focusNodeAdjacency,this),t.on("mouseout",this._unfocusAll,this))},this);var p="circular"===t.get("layout")&&t.get("circular.rotateLabel"),g=h.getLayout("cx"),m=h.getLayout("cy");h.eachItemGraphicEl(function(t,e){var i=t.getSymbolPath();if(p){var n=h.getItemLayout(e),o=Math.atan2(n[1]-m,n[0]-g);o<0&&(o=2*Math.PI+o);var r=n[0]<g;r&&(o-=Math.PI);var a=r?"left":"right";i.setStyle({textRotation:o,textPosition:a}),i.hoverStyle&&(i.hoverStyle.textPosition=a)}else i.setStyle({textRotation:0})}),this._firstRender=!1},dispose:function(){this._controller&&this._controller.dispose()},_focusNodeAdjacency:function(t){function e(t,e){var i=n(t,e),o=t.getGraphicEl();null==i&&(i=1),o.traverse(function(t){t.trigger("normal"),"group"!==t.type&&t.setStyle("opacity",.1*i)})}function i(t,e){var i=n(t,e),o=t.getGraphicEl();o.traverse(function(t){t.trigger("emphasis"),"group"!==t.type&&t.setStyle("opacity",i)})}var o=this._model.getData(),r=o.graph,a=t.target,s=a.dataIndex,l=a.dataType;if(null!==s&&"edge"!==l){r.eachNode(function(t){e(t,h)}),r.eachEdge(function(t){e(t,c)});var d=r.getNodeByIndex(s);i(d,h),u.each(d.edges,function(t){t.dataIndex<0||(i(t,c),i(t.node1,h),i(t.node2,h))})}},_unfocusAll:function(){var t=this._model.getData(),e=t.graph;e.eachNode(function(t){var e=n(t,h);t.getGraphicEl().traverse(function(t){t.trigger("normal"),"group"!==t.type&&t.setStyle("opacity",e)})}),e.eachEdge(function(t){var e=n(t,c);t.getGraphicEl().traverse(function(t){t.trigger("normal"),"group"!==t.type&&t.setStyle("opacity",e)})})},_startForceLayoutIteration:function(t,e){ +var i=this;!function n(){t.step(function(t){i.updateLayout(i._model),(i._layouting=!t)&&(e?i._layoutTimeout=setTimeout(n,16):n())})}()},_updateController:function(t,e){var i=this._controller,n=this.group;return i.setContainsPoint(function(t,e){var i=n.getBoundingRect();return i.applyTransform(n.transform),i.contain(t,e)}),"view"!==t.coordinateSystem.type?void i.disable():(i.enable(t.get("roam")),i.zoomLimit=t.get("scaleLimit"),i.zoom=t.coordinateSystem.getZoom(),void i.off("pan").off("zoom").on("pan",function(i,n){e.dispatchAction({seriesId:t.id,type:"graphRoam",dx:i,dy:n})}).on("zoom",function(i,n,o){e.dispatchAction({seriesId:t.id,type:"graphRoam",zoom:i,originX:n,originY:o}),this._updateNodeAndLinkScale(),l(t.getGraph(),this._getNodeGlobalScale(t)),this._lineDraw.updateLayout()},this))},_updateNodeAndLinkScale:function(){var t=this._model,e=t.getData(),i=this._getNodeGlobalScale(t),n=[i,i];e.eachItemGraphicEl(function(t,e){t.attr("scale",n)})},_getNodeGlobalScale:function(t){var e=t.coordinateSystem;if("view"!==e.type)return 1;var i=this._nodeScaleRatio,n=e.scale,o=n&&n[0]||1,r=e.getZoom(),a=(r-1)*i+1;return a/o},updateLayout:function(t){l(t.getGraph(),this._getNodeGlobalScale(t)),this._symbolDraw.updateLayout(),this._lineDraw.updateLayout()},remove:function(t,e){this._symbolDraw&&this._symbolDraw.remove(),this._lineDraw&&this._lineDraw.remove()}})},function(t,e,i){function n(t,e,i){for(var n,o=t[0],r=t[1],d=t[2],f=1/0,p=i*i,g=.1,m=.1;m<=.9;m+=.1){a[0]=u(o[0],r[0],d[0],m),a[1]=u(o[1],r[1],d[1],m);var v=c(h(a,e)-p);v<f&&(f=v,n=m)}for(var y=0;y<32;y++){var x=n+g;s[0]=u(o[0],r[0],d[0],n),s[1]=u(o[1],r[1],d[1],n),l[0]=u(o[0],r[0],d[0],x),l[1]=u(o[1],r[1],d[1],x);var v=h(s,e)-p;if(c(v)<.01)break;var _=h(l,e)-p;g/=2,v<0?_>=0?n+=g:n-=g:_>=0?n-=g:n+=g}return n}var o=i(17),r=i(5),a=[],s=[],l=[],u=o.quadraticAt,h=r.distSquare,c=Math.abs;t.exports=function(t,e){function i(t){var e=t.getVisual("symbolSize");return e instanceof Array&&(e=(e[0]+e[1])/2),e}var a=[],s=o.quadraticSubdivide,l=[[],[],[]],u=[[],[]],h=[];e/=2,t.eachEdge(function(t,o){var c=t.getLayout(),d=t.getVisual("fromSymbol"),f=t.getVisual("toSymbol");c.__original||(c.__original=[r.clone(c[0]),r.clone(c[1])],c[2]&&c.__original.push(r.clone(c[2])));var p=c.__original;if(null!=c[2]){if(r.copy(l[0],p[0]),r.copy(l[1],p[2]),r.copy(l[2],p[1]),d&&"none"!=d){var g=i(t.node1),m=n(l,p[0],g*e);s(l[0][0],l[1][0],l[2][0],m,a),l[0][0]=a[3],l[1][0]=a[4],s(l[0][1],l[1][1],l[2][1],m,a),l[0][1]=a[3],l[1][1]=a[4]}if(f&&"none"!=f){var g=i(t.node2),m=n(l,p[1],g*e);s(l[0][0],l[1][0],l[2][0],m,a),l[1][0]=a[1],l[2][0]=a[2],s(l[0][1],l[1][1],l[2][1],m,a),l[1][1]=a[1],l[2][1]=a[2]}r.copy(c[0],l[0]),r.copy(c[1],l[2]),r.copy(c[2],l[1])}else{if(r.copy(u[0],p[0]),r.copy(u[1],p[1]),r.sub(h,u[1],u[0]),r.normalize(h,h),d&&"none"!=d){var g=i(t.node1);r.scaleAndAdd(u[0],u[0],h,g*e)}if(f&&"none"!=f){var g=i(t.node2);r.scaleAndAdd(u[1],u[1],h,-g*e)}r.copy(c[0],u[0]),r.copy(c[1],u[1])}})}},function(t,e){t.exports=function(t){var e=t.findComponents({mainType:"legend"});e&&e.length&&t.eachSeriesByType("graph",function(t){var i=t.getCategoriesData(),n=t.getGraph(),o=n.data,r=i.mapArray(i.getName);o.filterSelf(function(t){var i=o.getItemModel(t),n=i.getShallow("category");if(null!=n){"number"==typeof n&&(n=r[n]);for(var a=0;a<e.length;a++)if(!e[a].isSelected(n))return!1}return!0})},this)}},function(t,e){t.exports=function(t){var e={};t.eachSeriesByType("graph",function(t){var i=t.getCategoriesData(),n=t.getData(),o={};i.each(function(n){var r=i.getName(n);o[r]=n;var a=i.getItemModel(n),s=a.get("itemStyle.normal.color")||t.getColorFromPalette(r,e);i.setItemVisual(n,"color",s)}),i.count()&&n.each(function(t){var e=n.getItemModel(t),r=e.getShallow("category");null!=r&&("string"==typeof r&&(r=o[r]),n.getItemVisual(t,"color",!0)||n.setItemVisual(t,"color",i.getItemVisual(r,"color")))})})}},function(t,e,i){var n=i(223);t.exports=function(t){t.eachSeriesByType("graph",function(t){"circular"===t.get("layout")&&n(t)})}},function(t,e,i){function n(t,e,i){var n=t.getBoxLayoutParams();return n.aspect=i,r.getLayoutRect(n,{width:e.getWidth(),height:e.getHeight()})}var o=i(238),r=i(13),a=i(73);t.exports=function(t,e){var i=[];return t.eachSeriesByType("graph",function(t){var r=t.get("coordinateSystem");if(!r||"view"===r){var s=t.getData(),l=s.mapArray(function(t){var e=s.getItemModel(t);return[+e.get("x"),+e.get("y")]}),u=[],h=[];a.fromPoints(l,u,h),h[0]-u[0]===0&&(h[0]+=1,u[0]-=1),h[1]-u[1]===0&&(h[1]+=1,u[1]-=1);var c=(h[0]-u[0])/(h[1]-u[1]),d=n(t,e,c);isNaN(c)&&(u=[d.x,d.y],h=[d.x+d.width,d.y+d.height]);var f=h[0]-u[0],p=h[1]-u[1],g=d.width,m=d.height,v=t.coordinateSystem=new o;v.zoomLimit=t.get("scaleLimit"),v.setBoundingRect(u[0],u[1],f,p),v.setViewRect(d.x,d.y,g,m),v.setCenter(t.get("center")),v.setZoom(t.get("zoom")),i.push(v)}}),i}},function(t,e){function i(t){return t instanceof Array||(t=[t,t]),t}t.exports=function(t){t.eachSeriesByType("graph",function(t){var e=t.getGraph(),n=t.getEdgeData(),o=i(t.get("edgeSymbol")),r=i(t.get("edgeSymbolSize")),a="lineStyle.normal.color".split("."),s="lineStyle.normal.opacity".split(".");n.setVisual("fromSymbol",o&&o[0]),n.setVisual("toSymbol",o&&o[1]),n.setVisual("fromSymbolSize",r&&r[0]),n.setVisual("toSymbolSize",r&&r[1]),n.setVisual("color",t.get(a)),n.setVisual("opacity",t.get(s)),n.each(function(t){var o=n.getItemModel(t),r=e.getEdgeByIndex(t),l=i(o.getShallow("symbol",!0)),u=i(o.getShallow("symbolSize",!0)),h=o.get(a),c=o.get(s);switch(h){case"source":h=r.node1.getVisual("color");break;case"target":h=r.node2.getVisual("color")}l[0]&&r.setVisual("fromSymbol",l[0]),l[1]&&r.setVisual("toSymbol",l[1]),u[0]&&r.setVisual("fromSymbolSize",u[0]),u[1]&&r.setVisual("toSymbolSize",u[1]),r.setVisual("color",h),r.setVisual("opacity",c)})})}},function(t,e,i){var n=i(5),o=n.scaleAndAdd;t.exports=function(t,e,i){for(var r=i.rect,a=r.width,s=r.height,l=[r.x+a/2,r.y+s/2],u=null==i.gravity?.1:i.gravity,h=0;h<t.length;h++){var c=t[h];c.p||(c.p=n.create(a*(Math.random()-.5)+l[0],s*(Math.random()-.5)+l[1])),c.pp=n.clone(c.p),c.edges=null}var d=.6;return{warmUp:function(){d=.5},setFixed:function(e){t[e].fixed=!0},setUnfixed:function(e){t[e].fixed=!1},step:function(i){for(var r=[],a=t.length,s=0;s<e.length;s++){var h=e[s],c=h.n1,f=h.n2;n.sub(r,f.p,c.p);var p=n.len(r)-h.d,g=f.w/(c.w+f.w);n.normalize(r,r),!c.fixed&&o(c.p,c.p,r,g*p*d),!f.fixed&&o(f.p,f.p,r,-(1-g)*p*d)}for(var s=0;s<a;s++){var m=t[s];m.fixed||(n.sub(r,l,m.p),n.scaleAndAdd(m.p,m.p,r,u*d))}for(var s=0;s<a;s++)for(var c=t[s],v=s+1;v<a;v++){var f=t[v];n.sub(r,f.p,c.p);var p=n.len(r);0===p&&(n.set(r,Math.random()-.5,Math.random()-.5),p=1);var y=(c.rep+f.rep)/p/p;!c.fixed&&o(c.pp,c.pp,r,y),!f.fixed&&o(f.pp,f.pp,r,-y)}for(var x=[],s=0;s<a;s++){var m=t[s];m.fixed||(n.sub(x,m.p,m.pp),n.scaleAndAdd(m.p,m.p,x,d),n.copy(m.pp,m.p))}d=.992*d,i&&i(t,e,d<.01)}}}},function(t,e,i){var n=i(274),o=i(4),r=i(225),a=i(223),s=i(5),l=i(1);t.exports=function(t){t.eachSeriesByType("graph",function(t){var e=t.coordinateSystem;if(!e||"view"===e.type)if("force"===t.get("layout")){var i=t.preservedPoints||{},u=t.getGraph(),h=u.data,c=u.edgeData,d=t.getModel("force"),f=d.get("initLayout");t.preservedPoints?h.each(function(t){var e=h.getId(t);h.setItemLayout(t,i[e]||[NaN,NaN])}):f&&"none"!==f?"circular"===f&&a(t):r(t);var p=h.getDataExtent("value"),g=c.getDataExtent("value"),m=d.get("repulsion"),v=d.get("edgeLength");l.isArray(m)||(m=[m,m]),l.isArray(v)||(v=[v,v]),v=[v[1],v[0]];var y=h.mapArray("value",function(t,e){var i=h.getItemLayout(e),n=o.linearMap(t,p,m);return isNaN(n)&&(n=(m[0]+m[1])/2),{w:n,rep:n,p:!i||isNaN(i[0])||isNaN(i[1])?null:i}}),x=c.mapArray("value",function(t,e){var i=u.getEdgeByIndex(e),n=o.linearMap(t,g,v);return isNaN(n)&&(n=(v[0]+v[1])/2),{n1:y[i.node1.dataIndex],n2:y[i.node2.dataIndex],d:n,curveness:i.getModel().get("lineStyle.normal.curveness")||0}}),e=t.coordinateSystem,_=e.getBoundingRect(),b=n(y,x,{rect:_,gravity:d.get("gravity")}),w=b.step;b.step=function(t){for(var e=0,n=y.length;e<n;e++)y[e].fixed&&s.copy(y[e].p,u.getNodeByIndex(e).getLayout());w(function(e,n,o){for(var r=0,a=e.length;r<a;r++)e[r].fixed||u.getNodeByIndex(r).setLayout(e[r].p),i[h.getId(r)]=e[r].p;for(var r=0,a=n.length;r<a;r++){var l=n[r],c=u.getEdgeByIndex(r),d=l.n1.p,f=l.n2.p,p=c.getLayout();p=p?p.slice():[],p[0]=p[0]||[],p[1]=p[1]||[],s.copy(p[0],d),s.copy(p[1],f),+l.curveness&&(p[2]=[(d[0]+f[0])/2-(d[1]-f[1])*l.curveness,(d[1]+f[1])/2-(f[0]-d[0])*l.curveness]),c.setLayout(p)}t&&t(o)})},t.forceLayout=b,t.preservedPoints=i,b.step()}else t.forceLayout=null})}},function(t,e,i){var n=i(2),o=i(222),r={type:"graphRoam",event:"graphRoam",update:"none"};n.registerAction(r,function(t,e){e.eachComponent({mainType:"series",query:t},function(e){var i=e.coordinateSystem,n=o.updateCenterAndZoom(i,t);e.setCenter&&e.setCenter(n.center),e.setZoom&&e.setZoom(n.zoom)})})},function(t,e,i){var n=i(225),o=i(224);t.exports=function(t,e){t.eachSeriesByType("graph",function(t){var e=t.get("layout"),i=t.coordinateSystem;if(i&&"view"!==i.type){var r=t.getData();r.each(i.dimensions,function(t,e,n){isNaN(t)||isNaN(e)?r.setItemLayout(n,[NaN,NaN]):r.setItemLayout(n,i.dataToPoint([t,e]))}),o(r.graph)}else e&&"none"!==e||n(t)})}},function(t,e,i){i(280),i(281)},function(t,e,i){function n(){var t=r.createCanvas();this.canvas=t,this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={}}var o=256,r=i(1);n.prototype={update:function(t,e,i,n,r,a){var s=this._getBrush(),l=this._getGradient(t,r,"inRange"),u=this._getGradient(t,r,"outOfRange"),h=this.pointSize+this.blurSize,c=this.canvas,d=c.getContext("2d"),f=t.length;c.width=e,c.height=i;for(var p=0;p<f;++p){var g=t[p],m=g[0],v=g[1],y=g[2],x=n(y);d.globalAlpha=x,d.drawImage(s,m-h,v-h)}for(var _=d.getImageData(0,0,c.width,c.height),b=_.data,w=0,S=b.length,M=this.minOpacity,T=this.maxOpacity,I=T-M;w<S;){var x=b[w+3]/256,A=4*Math.floor(x*(o-1));if(x>0){var L=a(x)?l:u;x>0&&(x=x*I+M),b[w++]=L[A],b[w++]=L[A+1],b[w++]=L[A+2],b[w++]=L[A+3]*x*256}else w+=4}return d.putImageData(_,0,0),c},_getBrush:function(){var t=this._brushCanvas||(this._brushCanvas=r.createCanvas()),e=this.pointSize+this.blurSize,i=2*e;t.width=i,t.height=i;var n=t.getContext("2d");return n.clearRect(0,0,i,i),n.shadowOffsetX=i,n.shadowBlur=this.blurSize,n.shadowColor="#000",n.beginPath(),n.arc(-e,e,this.pointSize,0,2*Math.PI,!0),n.closePath(),n.fill(),t},_getGradient:function(t,e,i){for(var n=this._gradientPixels,o=n[i]||(n[i]=new Uint8ClampedArray(1024)),r=[],a=0,s=0;s<256;s++)e[i](s/255,!0,r),o[a++]=r[0],o[a++]=r[1],o[a++]=r[2],o[a++]=r[3];return o}},t.exports=n},function(t,e,i){var n=i(15),o=i(34);t.exports=n.extend({type:"series.heatmap",getInitialData:function(t,e){return o(t.data,this,e)},defaultOption:{coordinateSystem:"cartesian2d",zlevel:0,z:2,geoIndex:0,blurSize:30,pointSize:20,maxOpacity:1,minOpacity:0}})},function(t,e,i){function n(t,e,i){var n=t[1]-t[0];e=l.map(e,function(e){return{interval:[(e.interval[0]-t[0])/n,(e.interval[1]-t[0])/n]}});var o=e.length,r=0;return function(t){for(var n=r;n<o;n++){var a=e[n].interval;if(a[0]<=t&&t<=a[1]){r=n;break}}if(n===o)for(var n=r-1;n>=0;n--){var a=e[n].interval;if(a[0]<=t&&t<=a[1]){r=n;break}}return n>=0&&n<o&&i[n]}}function o(t,e){var i=t[1]-t[0];return e=[(e[0]-t[0])/i,(e[1]-t[0])/i],function(t){return t>=e[0]&&t<=e[1]}}function r(t){var e=t.dimensions;return"lng"===e[0]&&"lat"===e[1]}var a=i(3),s=i(279),l=i(1);t.exports=i(2).extendChartView({type:"heatmap",render:function(t,e,i){var n;e.eachComponent("visualMap",function(e){e.eachTargetSeries(function(i){i===t&&(n=e)})}),this.group.removeAll();var o=t.coordinateSystem;"cartesian2d"===o.type?this._renderOnCartesian(o,t,i):r(o)&&this._renderOnGeo(o,t,n,i)},dispose:function(){},_renderOnCartesian:function(t,e,i){var n=t.getAxis("x"),o=t.getAxis("y"),r=this.group,s=n.getBandWidth(),u=o.getBandWidth(),h=e.getData(),c="itemStyle.normal",d="itemStyle.emphasis",f="label.normal",p="label.emphasis",g=e.getModel(c).getItemStyle(["color"]),m=e.getModel(d).getItemStyle(),v=e.getModel("label.normal"),y=e.getModel("label.emphasis");h.each(["x","y","z"],function(i,n,o,x){var _=h.getItemModel(x),b=t.dataToPoint([i,n]);if(!isNaN(o)){var w=new a.Rect({shape:{x:b[0]-s/2,y:b[1]-u/2,width:s,height:u},style:{fill:h.getItemVisual(x,"color"),opacity:h.getItemVisual(x,"opacity")}});h.hasItemOption&&(g=_.getModel(c).getItemStyle(["color"]),m=_.getModel(d).getItemStyle(),v=_.getModel(f),y=_.getModel(p));var S=e.getRawValue(x),M="-";S&&null!=S[2]&&(M=S[2]),v.getShallow("show")&&(a.setText(g,v),g.text=e.getFormattedLabel(x,"normal")||M),y.getShallow("show")&&(a.setText(m,y),m.text=e.getFormattedLabel(x,"emphasis")||M),w.setStyle(g),a.setHoverStyle(w,h.hasItemOption?m:l.extend({},m)),r.add(w),h.setItemGraphicEl(x,w)}})},_renderOnGeo:function(t,e,i,r){var l=i.targetVisuals.inRange,u=i.targetVisuals.outOfRange,h=e.getData(),c=this._hmLayer||this._hmLayer||new s;c.blurSize=e.get("blurSize"),c.pointSize=e.get("pointSize"),c.minOpacity=e.get("minOpacity"),c.maxOpacity=e.get("maxOpacity");var d=t.getViewRect().clone(),f=t.getRoamTransform().transform;d.applyTransform(f);var p=Math.max(d.x,0),g=Math.max(d.y,0),m=Math.min(d.width+d.x,r.getWidth()),v=Math.min(d.height+d.y,r.getHeight()),y=m-p,x=v-g,_=h.mapArray(["lng","lat","value"],function(e,i,n){var o=t.dataToPoint([e,i]);return o[0]-=p,o[1]-=g,o.push(n),o}),b=i.getExtent(),w="visualMap.continuous"===i.type?o(b,i.option.range):n(b,i.getPieceList(),i.option.selected);c.update(_,y,x,l.color.getNormalizer(),{inRange:l.color.getColorMapper(),outOfRange:u.color.getColorMapper()},w);var S=new a.Image({style:{width:y,height:x,x:p,y:g,image:c.canvas},silent:!0});this.group.add(S)}})},function(t,e,i){function n(t,e,i){a.call(this,t,e,i),this._lastFrame=0,this._lastFramePercent=0}var o=i(227),r=i(1),a=i(226),s=i(5),l=n.prototype;l.createLine=function(t,e,i){return new o(t,e,i)},l.updateAnimationPoints=function(t,e){this._points=e;for(var i=[0],n=0,o=1;o<e.length;o++){var r=e[o-1],a=e[o];n+=s.dist(r,a),i.push(n)}if(0!==n){for(var o=0;o<i.length;o++)i[o]/=n;this._offsets=i,this._length=n}},l.getLineLength=function(t){return this._length},l.updateSymbolPosition=function(t){var e=t.__t,i=this._points,n=this._offsets,o=i.length;if(n){var r,a=this._lastFrame;if(e<this._lastFramePercent){var l=Math.min(a+1,o-1);for(r=l;r>=0&&!(n[r]<=e);r--);r=Math.min(r,o-2)}else{for(var r=a;r<o&&!(n[r]>e);r++);r=Math.min(r-1,o-2)}s.lerp(t.position,i[r],i[r+1],(e-n[r])/(n[r+1]-n[r]));var u=i[r+1][0]-i[r][0],h=i[r+1][1]-i[r][1];t.rotation=-Math.atan2(h,u)-Math.PI/2,this._lastFrame=r,this._lastFramePercent=e,t.ignore=!1}},r.inherits(n,a),t.exports=n},function(t,e,i){function n(t){return a.isArray(t)||(t=[+t,+t]),t}function o(t,e){t.eachChild(function(t){t.attr({z:e.z,zlevel:e.zlevel,style:{stroke:"stroke"===e.brushType?e.color:null,fill:"fill"===e.brushType?e.color:null}})})}function r(t,e){c.call(this);var i=new h(t,e),n=new c;this.add(i),this.add(n),n.beforeUpdate=function(){this.attr(i.getScale())},this.updateData(t,e)}var a=i(1),s=i(26),l=i(3),u=i(4),h=i(49),c=l.Group,d=3,f=r.prototype;f.stopEffectAnimation=function(){this.childAt(1).removeAll()},f.startEffectAnimation=function(t){for(var e=t.symbolType,i=t.color,n=this.childAt(1),r=0;r<d;r++){var a=s.createSymbol(e,-1,-1,2,2,i);a.attr({style:{strokeNoScale:!0},z2:99,silent:!0,scale:[.5,.5]});var l=-r/d*t.period+t.effectOffset;a.animate("",!0).when(t.period,{scale:[t.rippleScale/2,t.rippleScale/2]}).delay(l).start(),a.animateStyle(!0).when(t.period,{opacity:0}).delay(l).start(),n.add(a)}o(n,t)},f.updateEffectAnimation=function(t){for(var e=this._effectCfg,i=this.childAt(1),n=["symbolType","period","rippleScale"],r=0;r<n;r++){var a=n[r];if(e[a]!==t[a])return this.stopEffectAnimation(),void this.startEffectAnimation(t)}o(i,t)},f.highlight=function(){this.trigger("emphasis")},f.downplay=function(){this.trigger("normal")},f.updateData=function(t,e){var i=t.hostModel;this.childAt(0).updateData(t,e);var o=this.childAt(1),r=t.getItemModel(e),a=t.getItemVisual(e,"symbol"),s=n(t.getItemVisual(e,"symbolSize")),l=t.getItemVisual(e,"color");o.attr("scale",s),o.traverse(function(t){t.attr({fill:l})});var h=r.getShallow("symbolOffset");if(h){var c=o.position;c[0]=u.parsePercent(h[0],s[0]),c[1]=u.parsePercent(h[1],s[1])}o.rotation=(r.getShallow("symbolRotate")||0)*Math.PI/180||0;var d={};if(d.showEffectOn=i.get("showEffectOn"),d.rippleScale=r.get("rippleEffect.scale"),d.brushType=r.get("rippleEffect.brushType"),d.period=1e3*r.get("rippleEffect.period"),d.effectOffset=e/t.count(),d.z=r.getShallow("z")||0,d.zlevel=r.getShallow("zlevel")||0,d.symbolType=a,d.color=l,this.off("mouseover").off("mouseout").off("emphasis").off("normal"),"render"===d.showEffectOn)this._effectCfg?this.updateEffectAnimation(d):this.startEffectAnimation(d),this._effectCfg=d;else{this._effectCfg=null,this.stopEffectAnimation();var f=this.childAt(0),p=function(){f.trigger("emphasis"),"render"!==d.showEffectOn&&this.startEffectAnimation(d)},g=function(){f.trigger("normal"),"render"!==d.showEffectOn&&this.stopEffectAnimation()};this.on("mouseover",p,this).on("mouseout",g,this).on("emphasis",p,this).on("normal",g,this)}this._effectCfg=d},f.fadeOut=function(t){this.off("mouseover").off("mouseout").off("emphasis").off("normal"),t&&t()},a.inherits(r,c),t.exports=r},function(t,e,i){function n(){this.group=new o.Group,this._lineEl=new s}var o=i(3),r=i(85),a=i(84),s=o.extendShape({shape:{polyline:!1,segs:[]},buildPath:function(t,e){for(var i=e.segs,n=e.polyline,o=0;o<i.length;o++){var r=i[o];if(n){t.moveTo(r[0][0],r[0][1]);for(var a=1;a<r.length;a++)t.lineTo(r[a][0],r[a][1])}else t.moveTo(r[0][0],r[0][1]),r.length>2?t.quadraticCurveTo(r[2][0],r[2][1],r[1][0],r[1][1]):t.lineTo(r[1][0],r[1][1])}},findDataIndex:function(t,e){for(var i=this.shape,n=i.segs,o=i.polyline,s=Math.max(this.style.lineWidth,1),l=0;l<n.length;l++){var u=n[l];if(o){for(var h=1;h<u.length;h++)if(a.containStroke(u[h-1][0],u[h-1][1],u[h][0],u[h][1],s,t,e))return l}else if(u.length>2){if(r.containStroke(u[0][0],u[0][1],u[2][0],u[2][1],u[1][0],u[1][1],s,t,e))return l}else if(a.containStroke(u[0][0],u[0][1],u[1][0],u[1][1],s,t,e))return l}return-1}}),l=n.prototype;l.updateData=function(t){this.group.removeAll();var e=this._lineEl,i=t.hostModel;e.setShape({segs:t.mapArray(t.getItemLayout),polyline:i.get("polyline")}),e.useStyle(i.getModel("lineStyle.normal").getLineStyle());var n=t.getVisual("color");n&&e.setStyle("stroke",n),e.setStyle("fill"),e.seriesIndex=i.seriesIndex,e.on("mousemove",function(t){e.dataIndex=null;var i=e.findDataIndex(t.offsetX,t.offsetY);i>0&&(e.dataIndex=i)}),this.group.add(e)},l.updateLayout=function(t){var e=t.getData();this._lineEl.setShape({segs:e.mapArray(e.getItemLayout)})},l.remove=function(){this.group.removeAll()},t.exports=n},function(t,e,i){function n(t,e,i,n){l.Group.call(this),this.bodyIndex,this.whiskerIndex,this.styleUpdater=i,this._createContent(t,e,n),this.updateData(t,e,n),this._seriesModel}function o(t,e,i){return s.map(t,function(t){return t=t.slice(),t[e]=i.initBaseline,t})}function r(t){var e={};return s.each(t,function(t,i){e["ends"+i]=t}),e}function a(t){this.group=new l.Group,this.styleUpdater=t}var s=i(1),l=i(3),u=i(6),h=u.extend({type:"whiskerInBox",shape:{},buildPath:function(t,e){for(var i in e)if(e.hasOwnProperty(i)&&0===i.indexOf("ends")){var n=e[i];t.moveTo(n[0][0],n[0][1]),t.lineTo(n[1][0],n[1][1])}}}),c=n.prototype;c._createContent=function(t,e,i){var n=t.getItemLayout(e),a="horizontal"===n.chartLayout?1:0,u=0;this.add(new l.Polygon({shape:{points:i?o(n.bodyEnds,a,n):n.bodyEnds},style:{strokeNoScale:!0},z2:100})),this.bodyIndex=u++;var c=s.map(n.whiskerEnds,function(t){return i?o(t,a,n):t});this.add(new h({shape:r(c),style:{strokeNoScale:!0},z2:100})),this.whiskerIndex=u++},c.updateData=function(t,e,i){var n=this._seriesModel=t.hostModel,o=t.getItemLayout(e),a=l[i?"initProps":"updateProps"];a(this.childAt(this.bodyIndex),{shape:{points:o.bodyEnds}},n,e),a(this.childAt(this.whiskerIndex),{shape:r(o.whiskerEnds)},n,e),this.styleUpdater.call(null,this,t,e)},s.inherits(n,l.Group);var d=a.prototype;d.updateData=function(t){var e=this.group,i=this._data,o=this.styleUpdater;t.diff(i).add(function(i){if(t.hasValue(i)){var r=new n(t,i,o,(!0));t.setItemGraphicEl(i,r),e.add(r)}}).update(function(r,a){var s=i.getItemGraphicEl(a);return t.hasValue(r)?(s?s.updateData(t,r):s=new n(t,r,o),e.add(s),void t.setItemGraphicEl(r,s)):void e.remove(s)}).remove(function(t){var n=i.getItemGraphicEl(t);n&&e.remove(n)}).execute(),this._data=t},d.remove=function(){var t=this.group,e=this._data;this._data=null,e&&e.eachItemGraphicEl(function(e){e&&t.remove(e)})},t.exports=a},function(t,e,i){i(287),i(288);var n=i(2);n.registerLayout(i(289))},function(t,e,i){"use strict";function n(t){var e=t.data;e&&e[0]&&e[0][0]&&e[0][0].coord&&(t.data=a.map(e,function(t){var e=[t[0].coord,t[1].coord],i={coords:e};return t[0].name&&(i.fromName=t[0].name),t[1].name&&(i.toName=t[1].name),a.mergeAll([i,t[0],t[1]])}))}var o=i(15),r=i(14),a=i(1),s=(i(23),o.extend({type:"series.lines",dependencies:["grid","polar"],visualColorAccessPath:"lineStyle.normal.color",init:function(t){n(t),s.superApply(this,"init",arguments)},mergeOption:function(t){n(t),s.superApply(this,"mergeOption",arguments)},getInitialData:function(t,e){var i=new r(["value"],this);return i.hasItemOption=!1,i.initData(t.data,[],function(t,e,n,o){if(t instanceof Array)return NaN;i.hasItemOption=!0;var r=t.value;return null!=r?r instanceof Array?r[o]:r:void 0}),i},formatTooltip:function(t){var e=this.getData(),i=e.getItemModel(t),n=i.get("name");if(n)return n;var o=i.get("fromName"),r=i.get("toName");return o+" > "+r},defaultOption:{coordinateSystem:"geo",zlevel:0,z:2,legendHoverLink:!0,hoverAnimation:!0,xAxisIndex:0,yAxisIndex:0,geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,label:{normal:{show:!1,position:"end"}},lineStyle:{normal:{opacity:.5}}}}))},function(t,e,i){var n=i(95),o=i(226),r=i(94),a=i(227),s=i(282),l=i(284);i(2).extendChartView({type:"lines",init:function(){},render:function(t,e,i){var u=t.getData(),h=this._lineDraw,c=t.get("effect.show"),d=t.get("polyline"),f=t.get("large")&&u.count()>=t.get("largeThreshold");c===this._hasEffet&&d===this._isPolyline&&f===this._isLarge||(h&&h.remove(),h=this._lineDraw=f?new l:new n(d?c?s:a:c?o:r),this._hasEffet=c,this._isPolyline=d,this._isLarge=f);var p=t.get("zlevel"),g=t.get("effect.trailLength"),m=i.getZr();if(m.painter.getLayer(p).clear(!0),null!=this._lastZlevel&&m.configLayer(this._lastZlevel,{motionBlur:!1}),c&&g){m.configLayer(p,{motionBlur:!0,lastFrameAlpha:Math.max(Math.min(g/10+.9,1),0)})}this.group.add(h.group),h.updateData(u),this._lastZlevel=p},updateLayout:function(t,e,i){this._lineDraw.updateLayout(t);var n=i.getZr();n.painter.getLayer(this._lastZlevel).clear(!0)},remove:function(t,e){this._lineDraw&&this._lineDraw.remove(e,!0)},dispose:function(){}})},function(t,e,i){t.exports=function(t){t.eachSeriesByType("lines",function(t){var e=t.coordinateSystem,i=t.getData();i.each(function(n){var o=i.getItemModel(n),r=o.option instanceof Array?o.option:o.get("coords"),a=[];if(t.get("polyline"))for(var s=0;s<r.length;s++)a.push(e.dataToPoint(r[s]));else{a[0]=e.dataToPoint(r[0]),a[1]=e.dataToPoint(r[1]);var l=o.get("lineStyle.normal.curveness");+l&&(a[2]=[(a[0][0]+a[1][0])/2-(a[0][1]-a[1][1])*l,(a[0][1]+a[1][1])/2-(a[1][0]-a[0][0])*l])}i.setItemLayout(n,a)})})}},function(t,e,i){var n=i(2),o=n.PRIORITY;i(291),i(292),i(221),i(172),n.registerLayout(i(295)),n.registerVisual(i(296)),n.registerProcessor(o.PROCESSOR.STATISTIC,i(294)),n.registerPreprocessor(i(293)),i(77)("map",[{type:"mapToggleSelect",event:"mapselectchanged",method:"toggleSelected"},{type:"mapSelect",event:"mapselected",method:"select"},{type:"mapUnSelect",event:"mapunselected",method:"unSelect"}])},function(t,e,i){var n=i(14),o=i(15),r=i(1),a=i(29),s=i(9),l=s.encodeHTML,u=s.addCommas,h=i(66),c=i(172),d=o.extend({type:"series.map",layoutMode:"box",needsDrawMap:!1,seriesGroup:[],init:function(t){t=this._fillOption(t,t.map),this.option=t,d.superApply(this,"init",arguments),this.updateSelectedMap(t.data)},getInitialData:function(t){var e=a(["value"],t.data||[]),i=new n(e,this);return i.initData(t.data),i},mergeOption:function(t){t.data&&(t=this._fillOption(t,this.option.map)),d.superCall(this,"mergeOption",t),this.updateSelectedMap(this.option.data)},_fillOption:function(t,e){return t=r.extend({},t),t.data=c.getFilledRegions(t.data,e),t},getRawValue:function(t){return this._data.get("value",t)},getRegionModel:function(t){var e=this.getData();return e.getItemModel(e.indexOfName(t))},formatTooltip:function(t){for(var e=this.getData(),i=u(this.getRawValue(t)),n=e.getName(t),o=this.seriesGroup,r=[],a=0;a<o.length;a++){var s=o[a].originalData.indexOfName(n);isNaN(o[a].originalData.get("value",s))||r.push(l(o[a].name))}return r.join(", ")+"<br />"+n+" : "+i},getTooltipPosition:function(t){if(null!=t){var e=this.getData().getName(t),i=this.coordinateSystem,n=i.getRegion(e);return n&&i.dataToPoint(n.center)}},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t},defaultOption:{zlevel:0,z:2,coordinateSystem:"geo",map:"china",left:"center",top:"center",aspectScale:.75,showLegendSymbol:!0,dataRangeHoverLink:!0,center:null,zoom:1,scaleLimit:null,label:{normal:{show:!1,textStyle:{color:"#000"}},emphasis:{show:!0,textStyle:{color:"rgb(100,0,0)"}}},itemStyle:{normal:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{areaColor:"rgba(255,215,0,0.8)"}}}});r.mixin(d,h),t.exports=d},function(t,e,i){var n=i(3),o=i(229);i(2).extendChartView({type:"map",render:function(t,e,i,n){if(!n||"mapToggleSelect"!==n.type||n.from!==this.uid){var r=this.group;if(r.removeAll(),n&&"geoRoam"===n.type&&"series"===n.componentType&&n.seriesId===t.id){var a=this._mapDraw;a&&r.add(a.group)}else if(t.needsDrawMap){var a=this._mapDraw||new o(i,(!0));r.add(a.group),a.draw(t,e,i,this,n),this._mapDraw=a}else this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null;t.get("showLegendSymbol")&&e.getComponent("legend")&&this._renderSymbols(t,e,i)}},remove:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null,this.group.removeAll()},dispose:function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null},_renderSymbols:function(t,e,i){var o=t.originalData,r=this.group;o.each("value",function(e,i){if(!isNaN(e)){var a=o.getItemLayout(i);if(a&&a.point){var s=a.point,l=a.offset,u=new n.Circle({style:{fill:t.getData().getVisual("color")},shape:{cx:s[0]+9*l,cy:s[1],r:3},silent:!0,z2:10});if(!l){var h=t.mainSeries.getData(),c=o.getName(i),d=c,f=h.indexOfName(c),p=o.getItemModel(i),g=p.getModel("label.normal"),m=p.getModel("label.emphasis"),v=g.getModel("textStyle"),y=m.getModel("textStyle"),x=h.getItemGraphicEl(f);u.setStyle({textPosition:"bottom"});var _=function(){u.setStyle({text:m.get("show")?d:"",textFill:y.getTextColor(),textFont:y.getFont()})},b=function(){u.setStyle({text:g.get("show")?d:"",textFill:v.getTextColor(),textFont:v.getFont()})};x.on("mouseover",_).on("mouseout",b).on("emphasis",_).on("normal",b),b()}r.add(u)}}})}})},function(t,e,i){var n=i(1);t.exports=function(t){var e=[];n.each(t.series,function(t){"map"===t.type&&e.push(t)}),n.each(e,function(t){t.map=t.map||t.mapType,n.defaults(t,t.mapLocation)})}},function(t,e,i){function n(t,e){for(var i={},n=["value"],o=0;o<t.length;o++)t[o].each(n,function(e,n){var r=t[o].getName(n);i[r]=i[r]||[],isNaN(e)||i[r].push(e)});return t[0].map(n,function(n,o){for(var r=t[0].getName(o),a=0,s=1/0,l=-(1/0),u=i[r].length,h=0;h<u;h++)s=Math.min(s,i[r][h]),l=Math.max(l,i[r][h]),a+=i[r][h];var c;return c="min"===e?s:"max"===e?l:"average"===e?a/u:a,0===u?NaN:c})}var o=i(1);t.exports=function(t){var e={};t.eachSeriesByType("map",function(t){var i=t.get("map");e[i]=e[i]||[],e[i].push(t)}),o.each(e,function(t,e){for(var i=n(o.map(t,function(t){return t.getData()}),t[0].get("mapValueCalculation")),r=0;r<t.length;r++)t[r].originalData=t[r].getData();for(var r=0;r<t.length;r++)t[r].seriesGroup=t,t[r].needsDrawMap=0===r,t[r].setData(i.cloneShallow()),t[r].mainSeries=t[0]})}},function(t,e,i){var n=i(1);t.exports=function(t){var e={};t.eachSeriesByType("map",function(i){var o=i.get("map");if(!e[o]){var r={};n.each(i.seriesGroup,function(e){var i=e.coordinateSystem,n=e.originalData;e.get("showLegendSymbol")&&t.getComponent("legend")&&n.each("value",function(t,e){var o=n.getName(e),a=i.getRegion(o);if(a&&!isNaN(t)){var s=r[o]||0,l=i.dataToPoint(a.center);r[o]=s+1,n.setItemLayout(e,{point:l,offset:s})}})});var a=i.getData();a.each(function(t){var e=a.getName(t),i=a.getItemLayout(t)||{};i.showLabel=!r[e],a.setItemLayout(t,i)}),e[o]=!0}})}},function(t,e){t.exports=function(t){t.eachSeriesByType("map",function(t){var e=t.get("color"),i=t.getModel("itemStyle.normal"),n=i.get("areaColor"),o=i.get("color")||e[t.seriesIndex%e.length];t.getData().setVisual({areaColor:n,color:o})})}},function(t,e,i){var n=i(2);i(230),i(298),i(299),n.registerVisual(i(300))},function(t,e,i){function n(t,e,i){var n=t.get("data"),r=o(e);n&&n.length&&s.each(i,function(t){if(t){var e=s.indexOf(n,t[r]);t[r]=e>=0?e:NaN}})}function o(t){return+t.replace("dim","")}function r(t,e){var i=0;s.each(t,function(t){var e=o(t);e>i&&(i=e)});var n=e[0];n&&n.length-1>i&&(i=n.length-1);for(var r=[],a=0;a<=i;a++)r.push("dim"+a);return r}var a=i(14),s=i(1),l=i(15),u=i(29);t.exports=l.extend({type:"series.parallel",dependencies:["parallel"],getInitialData:function(t,e){var i=e.getComponent("parallel",this.get("parallelIndex")),o=i.parallelAxisIndex,l=t.data,h=i.dimensions,c=r(h,l),d=s.map(c,function(t,i){var r=s.indexOf(h,t),a=r>=0&&e.getComponent("parallelAxis",o[r]);return a&&"category"===a.get("type")?(n(a,t,l),{name:t,type:"ordinal"}):r<0&&u.guessOrdinal(l,i)?{name:t,type:"ordinal"}:t}),f=new a(d,this);return f.initData(l),this.option.progressive&&(this.option.animation=!1),f},getRawIndicesByActiveState:function(t){var e=this.coordinateSystem,i=this.getData(),n=[];return e.eachActiveState(i,function(e,o){t===e&&n.push(i.getRawIndex(o))}),n},defaultOption:{zlevel:0,z:2,coordinateSystem:"parallel",parallelIndex:0,label:{normal:{show:!1},emphasis:{show:!1}},inactiveOpacity:.05,activeOpacity:1,lineStyle:{normal:{width:1,opacity:.45,type:"solid"}},progressive:!1,smooth:!1,animationEasing:"linear"}})},function(t,e,i){function n(t,e,i){var n=t.model,o=t.getRect(),r=new l.Rect({shape:{x:o.x,y:o.y,width:o.width,height:o.height}}),a="horizontal"===n.get("layout")?"width":"height";return r.setShape(a,0),l.initProps(r,{shape:{width:o.width,height:o.height}},e,i),r}function o(t,e,i,n){for(var o=[],r=0;r<i.length;r++){var a=i[r],l=t.get(a,e);s(l,n.getAxis(a).type)||o.push(n.dataToPoint(l,a))}return o}function r(t,e,i,n,r){var a=o(t,i,n,r),s=new l.Polyline({shape:{points:a},silent:!0,z2:10});e.add(s),t.setItemGraphicEl(i,s)}function a(t,e){var i=t.hostModel.getModel("lineStyle.normal"),n=i.getLineStyle();t.eachItemGraphicEl(function(o,r){if(t.hasItemOption){var a=t.getItemModel(r),s=a.getModel("lineStyle.normal",i);n=s.getLineStyle()}o.useStyle(u.extend(n,{fill:null,stroke:t.getItemVisual(r,"color"),opacity:t.getItemVisual(r,"opacity")})),o.shape.smooth=e})}function s(t,e){return"category"===e?null==t:null==t||isNaN(t)}var l=i(3),u=i(1),h=.3,c=i(27).extend({type:"parallel",init:function(){this._dataGroup=new l.Group,this.group.add(this._dataGroup),this._data},render:function(t,e,i,n){this._renderForNormal(t)},dispose:function(){},_renderForNormal:function(t){function e(t){r(c,u,t,p,f,null,m)}function i(e,i){var n=d.getItemGraphicEl(i),r=o(c,e,p,f);c.setItemGraphicEl(e,n),l.updateProps(n,{shape:{points:r}},t,e)}function s(t){var e=d.getItemGraphicEl(t);u.remove(e)}var u=this._dataGroup,c=t.getData(),d=this._data,f=t.coordinateSystem,p=f.dimensions,g=t.option,m=g.smooth?h:null;if(c.diff(d).add(e).update(i).remove(s).execute(), +a(c,m),!this._data){var v=n(f,t,function(){setTimeout(function(){u.removeClipPath()})});u.setClipPath(v)}this._data=c},remove:function(){this._dataGroup&&this._dataGroup.removeAll(),this._data=null}});t.exports=c},function(t,e){t.exports=function(t){t.eachSeriesByType("parallel",function(e){var i=e.getModel("itemStyle.normal"),n=e.getModel("lineStyle.normal"),o=t.get("color"),r=n.get("color")||i.get("color")||o[e.seriesIndex%o.length],a=e.get("inactiveOpacity"),s=e.get("activeOpacity"),l=e.getModel("lineStyle.normal").getLineStyle(),u=e.coordinateSystem,h=e.getData(),c={normal:l.opacity,active:s,inactive:a};u.eachActiveState(h,function(t,e){h.setItemVisual(e,"opacity",c[t])}),h.setVisual("color",r)})}},function(t,e,i){var n=i(1),o=i(2);i(335),i(302),i(303),o.registerVisual(n.curry(i(72),"radar")),o.registerVisual(n.curry(i(46),"radar","circle",null)),o.registerLayout(i(305)),o.registerProcessor(n.curry(i(70),"radar")),o.registerPreprocessor(i(304))},function(t,e,i){"use strict";var n=i(15),o=i(14),r=i(29),a=i(1),s=n.extend({type:"series.radar",dependencies:["radar"],init:function(t){s.superApply(this,"init",arguments),this.legendDataProvider=function(){return this._dataBeforeProcessed}},getInitialData:function(t,e){var i=t.data||[],n=r([],i,[],"indicator_"),a=new o(n,this);return a.initData(i),a},formatTooltip:function(t){var e=this.getRawValue(t),i=this.coordinateSystem,n=i.getIndicatorAxes();return(""==this._data.getName(t)?this.name:this._data.getName(t))+"<br/>"+a.map(n,function(t,i){return t.name+" : "+e[i]}).join("<br />")},defaultOption:{zlevel:0,z:2,coordinateSystem:"radar",legendHoverLink:!0,radarIndex:0,lineStyle:{normal:{width:2,type:"solid"}},label:{normal:{position:"top"}},symbol:"emptyCircle",symbolSize:4}});t.exports=s},function(t,e,i){function n(t){return r.isArray(t)||(t=[+t,+t]),t}var o=i(3),r=i(1),a=i(26);t.exports=i(2).extendChartView({type:"radar",render:function(t,e,i){function s(t,e){var i=t.getItemVisual(e,"symbol")||"circle",o=t.getItemVisual(e,"color");if("none"!==i){var r=a.createSymbol(i,-.5,-.5,1,1,o);return r.attr({style:{strokeNoScale:!0},z2:100,scale:n(t.getItemVisual(e,"symbolSize"))}),r}}function l(e,i,n,r,a,l){n.removeAll();for(var u=0;u<i.length-1;u++){var h=s(r,a);h&&(h.__dimIdx=u,e[u]?(h.attr("position",e[u]),o[l?"initProps":"updateProps"](h,{position:i[u]},t,a)):h.attr("position",i[u]),n.add(h))}}function u(t){return r.map(t,function(t){return[h.cx,h.cy]})}var h=t.coordinateSystem,c=this.group,d=t.getData(),f=this._data;d.diff(f).add(function(e){var i=d.getItemLayout(e);if(i){var n=new o.Polygon,r=new o.Polyline,a={shape:{points:i}};n.shape.points=u(i),r.shape.points=u(i),o.initProps(n,a,t,e),o.initProps(r,a,t,e);var s=new o.Group,h=new o.Group;s.add(r),s.add(n),s.add(h),l(r.shape.points,i,h,d,e,!0),d.setItemGraphicEl(e,s)}}).update(function(e,i){var n=f.getItemGraphicEl(i),r=n.childAt(0),a=n.childAt(1),s=n.childAt(2),u={shape:{points:d.getItemLayout(e)}};u.shape.points&&(l(r.shape.points,u.shape.points,s,d,e,!1),o.updateProps(r,u,t),o.updateProps(a,u,t),d.setItemGraphicEl(e,n))}).remove(function(t){c.remove(f.getItemGraphicEl(t))}).execute(),d.eachItemGraphicEl(function(e,i){function n(){u.attr("ignore",v)}function a(){u.attr("ignore",m)}var s=d.getItemModel(i),l=e.childAt(0),u=e.childAt(1),h=e.childAt(2),f=d.getItemVisual(i,"color");c.add(e),l.useStyle(r.defaults(s.getModel("lineStyle.normal").getLineStyle(),{fill:"none",stroke:f})),l.hoverStyle=s.getModel("lineStyle.emphasis").getLineStyle();var p=s.getModel("areaStyle.normal"),g=s.getModel("areaStyle.emphasis"),m=p.isEmpty()&&p.parentModel.isEmpty(),v=g.isEmpty()&&g.parentModel.isEmpty();v=v&&m,u.ignore=m,u.useStyle(r.defaults(p.getAreaStyle(),{fill:f,opacity:.7})),u.hoverStyle=g.getAreaStyle();var y=s.getModel("itemStyle.normal").getItemStyle(["color"]),x=s.getModel("itemStyle.emphasis").getItemStyle(),_=s.getModel("label.normal"),b=s.getModel("label.emphasis");h.eachChild(function(e){e.setStyle(y),e.hoverStyle=r.clone(x);var n=d.get(d.dimensions[e.__dimIdx],i);o.setText(e.style,_,f),e.setStyle({text:_.get("show")?r.retrieve(t.getFormattedLabel(i,"normal",null,e.__dimIdx),n):""}),o.setText(e.hoverStyle,b,f),e.hoverStyle.text=b.get("show")?r.retrieve(t.getFormattedLabel(i,"emphasis",null,e.__dimIdx),n):""}),e.off("mouseover").off("mouseout").off("normal").off("emphasis"),e.on("emphasis",n).on("mouseover",n).on("normal",a).on("mouseout",a),o.setHoverStyle(e)}),this._data=d},remove:function(){this.group.removeAll(),this._data=null},dispose:function(){}})},function(t,e,i){var n=i(1);t.exports=function(t){var e=t.polar;if(e){n.isArray(e)||(e=[e]);var i=[];n.each(e,function(e,o){e.indicator?(e.type&&!e.shape&&(e.shape=e.type),t.radar=t.radar||[],n.isArray(t.radar)||(t.radar=[t.radar]),t.radar.push(e)):i.push(e)}),t.polar=i}n.each(t.series,function(t){"radar"===t.type&&t.polarIndex&&(t.radarIndex=t.polarIndex)})}},function(t,e){t.exports=function(t){t.eachSeriesByType("radar",function(t){function e(t,e){n[e]=n[e]||[],n[e][r]=o.dataToPoint(t,r)}var i=t.getData(),n=[],o=t.coordinateSystem;if(o){for(var r=0;r<o.getIndicatorAxes().length;r++){var a=i.dimensions[r];i.each(a,e)}i.each(function(t){n[t][0]&&n[t].push(n[t][0].slice()),i.setItemLayout(t,n[t])})}})}},function(t,e,i){var n=i(2);i(307),i(308),n.registerLayout(i(309)),n.registerVisual(i(310))},function(t,e,i){var n=i(15),o=i(228),r=n.extend({type:"series.sankey",layoutInfo:null,getInitialData:function(t){var e=t.edges||t.links,i=t.data||t.nodes;if(i&&e){var n=o(i,e,this,!0);return n.data}},getGraph:function(){return this.getData().graph},getEdgeData:function(){return this.getGraph().edgeData},formatTooltip:function(t,e,i){if("edge"===i){var n=this.getDataParams(t,i),o=n.data,a=o.source+" -- "+o.target;return n.value&&(a+=" : "+n.value),a}return r.superCall(this,"formatTooltip",t,e)},defaultOption:{zlevel:0,z:2,coordinateSystem:"view",layout:null,left:"5%",top:"5%",right:"20%",bottom:"5%",nodeWidth:20,nodeGap:8,layoutIterations:32,label:{normal:{show:!0,position:"right",textStyle:{color:"#000",fontSize:12}},emphasis:{show:!0}},itemStyle:{normal:{borderWidth:1,borderColor:"#333"}},lineStyle:{normal:{color:"#314656",opacity:.2,curveness:.5},emphasis:{opacity:.6}},animationEasing:"linear",animationDuration:1e3}});t.exports=r},function(t,e,i){function n(t,e,i){var n=new o.Rect({shape:{x:t.x-10,y:t.y-10,width:0,height:t.height+20}});return o.initProps(n,{shape:{width:t.width+20,height:t.height+20}},e,i),n}var o=i(3),r=i(1),a=o.extendShape({shape:{x1:0,y1:0,x2:0,y2:0,cpx1:0,cpy1:0,cpx2:0,cpy2:0,extent:0},buildPath:function(t,e){var i=e.extent/2;t.moveTo(e.x1,e.y1-i),t.bezierCurveTo(e.cpx1,e.cpy1-i,e.cpx2,e.cpy2-i,e.x2,e.y2-i),t.lineTo(e.x2,e.y2+i),t.bezierCurveTo(e.cpx2,e.cpy2+i,e.cpx1,e.cpy1+i,e.x1,e.y1+i),t.closePath()}});t.exports=i(2).extendChartView({type:"sankey",_model:null,render:function(t,e,i){var s=t.getGraph(),l=this.group,u=t.layoutInfo,h=t.getData(),c=t.getData("edge");this._model=t,l.removeAll(),l.position=[u.x,u.y],s.eachEdge(function(e){var i=new a;i.dataIndex=e.dataIndex,i.seriesIndex=t.seriesIndex,i.dataType="edge";var n=e.getModel("lineStyle.normal"),r=n.get("curveness"),s=e.node1.getLayout(),u=e.node2.getLayout(),h=e.getLayout();i.shape.extent=Math.max(1,h.dy);var d=s.x+s.dx,f=s.y+h.sy+h.dy/2,p=u.x,g=u.y+h.ty+h.dy/2,m=d*(1-r)+p*r,v=f,y=d*r+p*(1-r),x=g;switch(i.setShape({x1:d,y1:f,x2:p,y2:g,cpx1:m,cpy1:v,cpx2:y,cpy2:x}),i.setStyle(n.getItemStyle()),i.style.fill){case"source":i.style.fill=e.node1.getVisual("color");break;case"target":i.style.fill=e.node2.getVisual("color")}o.setHoverStyle(i,e.getModel("lineStyle.emphasis").getItemStyle()),l.add(i),c.setItemGraphicEl(e.dataIndex,i)}),s.eachNode(function(e){var i=e.getLayout(),n=e.getModel(),a=n.getModel("label.normal"),s=a.getModel("textStyle"),u=n.getModel("label.emphasis"),c=u.getModel("textStyle"),d=new o.Rect({shape:{x:i.x,y:i.y,width:e.getLayout().dx,height:e.getLayout().dy},style:{text:a.get("show")?t.getFormattedLabel(e.dataIndex,"normal")||e.id:"",textFont:s.getFont(),textFill:s.getTextColor(),textPosition:a.get("position")}});d.setStyle(r.defaults({fill:e.getVisual("color")},n.getModel("itemStyle.normal").getItemStyle())),o.setHoverStyle(d,r.extend(e.getModel("itemStyle.emphasis"),{text:u.get("show")?t.getFormattedLabel(e.dataIndex,"emphasis")||e.id:"",textFont:c.getFont(),textFill:c.getTextColor(),textPosition:u.get("position")})),l.add(d),h.setItemGraphicEl(e.dataIndex,d),d.dataType="node"}),!this._data&&t.get("animation")&&l.setClipPath(n(l.getBoundingRect(),t,function(){l.removeClipPath()})),this._data=t.getData()},dispose:function(){}})},function(t,e,i){function n(t,e){return M.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}function o(t,e,i,n,o,r,s){a(t,i,o),u(t,e,r,n,s),m(t)}function r(t){I.each(t,function(t){var e=x(t.outEdges,S),i=x(t.inEdges,S),n=Math.max(e,i);t.setLayout({value:n},!0)})}function a(t,e,i){for(var n=t,o=null,r=0,a=0;n.length;){o=[];for(var u=0,h=n.length;u<h;u++){var c=n[u];c.setLayout({x:r},!0),c.setLayout({dx:e},!0);for(var d=0,f=c.outEdges.length;d<f;d++)o.push(c.outEdges[d].node2)}n=o,++r}s(t,r),a=(i-e)/(r-1),l(t,a)}function s(t,e){I.each(t,function(t){t.outEdges.length||t.setLayout({x:e-1},!0)})}function l(t,e){I.each(t,function(t){var i=t.getLayout().x*e;t.setLayout({x:i},!0)})}function u(t,e,i,n,o){var r=T().key(function(t){return t.getLayout().x}).sortKeys(w).entries(t).map(function(t){return t.values});h(t,r,e,i,n),c(r,n,i);for(var a=1;o>0;o--)a*=.99,d(r,a),c(r,n,i),p(r,a),c(r,n,i)}function h(t,e,i,n,o){var r=[];I.each(e,function(t){var e=t.length,i=0;I.each(t,function(t){i+=t.getLayout().value});var a=(n-(e-1)*o)/i;r.push(a)}),r.sort(function(t,e){return t-e});var a=r[0];I.each(e,function(t){I.each(t,function(t,e){t.setLayout({y:e},!0);var i=t.getLayout().value*a;t.setLayout({dy:i},!0)})}),I.each(i,function(t){var e=+t.getValue()*a;t.setLayout({dy:e},!0)})}function c(t,e,i){I.each(t,function(t){var n,o,r,a=0,s=t.length;for(t.sort(b),r=0;r<s;r++){if(n=t[r],o=a-n.getLayout().y,o>0){var l=n.getLayout().y+o;n.setLayout({y:l},!0)}a=n.getLayout().y+n.getLayout().dy+e}if(o=a-e-i,o>0){var l=n.getLayout().y-o;for(n.setLayout({y:l},!0),a=n.getLayout().y,r=s-2;r>=0;--r)n=t[r],o=n.getLayout().y+n.getLayout().dy+e-a,o>0&&(l=n.getLayout().y-o,n.setLayout({y:l},!0)),a=n.getLayout().y}})}function d(t,e){I.each(t.slice().reverse(),function(t){I.each(t,function(t){if(t.outEdges.length){var i=x(t.outEdges,f)/x(t.outEdges,S),n=t.getLayout().y+(i-_(t))*e;t.setLayout({y:n},!0)}})})}function f(t){return _(t.node2)*t.getValue()}function p(t,e){I.each(t,function(t){I.each(t,function(t){if(t.inEdges.length){var i=x(t.inEdges,g)/x(t.inEdges,S),n=t.getLayout().y+(i-_(t))*e;t.setLayout({y:n},!0)}})})}function g(t){return _(t.node1)*t.getValue()}function m(t){I.each(t,function(t){t.outEdges.sort(v),t.inEdges.sort(y)}),I.each(t,function(t){var e=0,i=0;I.each(t.outEdges,function(t){t.setLayout({sy:e},!0),e+=t.getLayout().dy}),I.each(t.inEdges,function(t){t.setLayout({ty:i},!0),i+=t.getLayout().dy})})}function v(t,e){return t.node2.getLayout().y-e.node2.getLayout().y}function y(t,e){return t.node1.getLayout().y-e.node1.getLayout().y}function x(t,e){for(var i=0,n=t.length,o=-1;++o<n;){var r=+e.call(t,t[o],o);isNaN(r)||(i+=r)}return i}function _(t){return t.getLayout().y+t.getLayout().dy/2}function b(t,e){return t.getLayout().y-e.getLayout().y}function w(t,e){return t<e?-1:t>e?1:t===e?0:NaN}function S(t){return t.getValue()}var M=i(13),T=i(382),I=i(1);t.exports=function(t,e,i){t.eachSeriesByType("sankey",function(t){var i=t.get("nodeWidth"),a=t.get("nodeGap"),s=n(t,e);t.layoutInfo=s;var l=s.width,u=s.height,h=t.getGraph(),c=h.nodes,d=h.edges;r(c);var f=c.filter(function(t){return 0===t.getLayout().value}),p=0!==f.length?0:t.get("layoutIterations");o(c,d,i,a,l,u,p)})}},function(t,e,i){var n=i(71);t.exports=function(t,e){t.eachSeriesByType("sankey",function(t){var e=t.getGraph(),i=e.nodes;i.sort(function(t,e){return t.getLayout().value-e.getLayout().value});var o=i[0].getLayout().value,r=i[i.length-1].getLayout().value;i.forEach(function(e){var i=new n({type:"color",mappingMethod:"linear",dataExtent:[o,r],visual:t.get("color")}),a=i.mapValueToVisual(e.getLayout().value);e.setVisual("color",a);var s=e.getModel(),l=s.get("itemStyle.normal.color");null!=l&&e.setVisual("color",l)})})}},function(t,e,i){var n=i(2);i(313),i(314),i(315),n.registerVisual(i(317)),n.registerLayout(i(316))},function(t,e,i){function n(t){this.group=new a.Group,t.add(this.group)}function o(t,e,i,n,o,r){var a=[[o?t:t-d,e],[t+i,e],[t+i,e+n],[o?t:t-d,e+n]];return!r&&a.splice(2,0,[t+i+d,e+n/2]),!o&&a.push([t,e+n/2]),a}function r(t,e,i){t.eventData={componentType:"series",componentSubType:"treemap",seriesIndex:e.componentIndex,seriesName:e.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:i&&i.dataIndex,name:i&&i.name},treePathInfo:i&&u.wrapTreePathInfo(i,e)}}var a=i(3),s=i(13),l=i(1),u=i(78),h=8,c=8,d=5;n.prototype={constructor:n,render:function(t,e,i,n){var o=t.getModel("breadcrumb"),r=this.group;if(r.removeAll(),o.get("show")&&i){var a=o.getModel("itemStyle.normal"),l=a.getModel("textStyle"),u={pos:{left:o.get("left"),right:o.get("right"),top:o.get("top"),bottom:o.get("bottom")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:o.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(i,u,l),this._renderContent(t,u,a,l,n),s.positionGroup(r,u.pos,u.box)}},_prepare:function(t,e,i){for(var n=t;n;n=n.parentNode){var o=n.getModel().get("name"),r=i.getTextRect(o),a=Math.max(r.width+2*h,e.emptyItemWidth);e.totalWidth+=a+c,e.renderList.push({node:n,text:o,width:a})}},_renderContent:function(t,e,i,n,u){for(var h=0,d=e.emptyItemWidth,f=t.get("breadcrumb.height"),p=s.getAvailableSize(e.pos,e.box),g=e.totalWidth,m=e.renderList,v=m.length-1;v>=0;v--){var y=m[v],x=y.node,_=y.width,b=y.text;g>p.width&&(g-=_-d,_=d,b="");var w=new a.Polygon({shape:{points:o(h,0,_,f,v===m.length-1,0===v)},style:l.defaults(i.getItemStyle(),{lineJoin:"bevel",text:b,textFill:n.getTextColor(),textFont:n.getFont()}),z:10,onclick:l.curry(u,x)});this.group.add(w),r(w,t,x),h+=_+c}},remove:function(){this.group.removeAll()}},t.exports=n},function(t,e,i){function n(t,e){var i=0;s.each(t.children,function(t){n(t,e);var o=t.value;s.isArray(o)&&(o=o[0]),i+=o});var o=t.value;e>=0&&(s.isArray(o)?o=o[0]:t.value=new Array(e)),(null==o||isNaN(o))&&(o=i),o<0&&(o=0),e>=0?t.value[0]=o:t.value=o}function o(t,e){var i=e.get("color");if(i){t=t||[];var n;if(s.each(t,function(t){var e=new l(t),i=e.get("color");(e.get("itemStyle.normal.color")||i&&"none"!==i)&&(n=!0)}),!n){var o=t[0]||(t[0]={});o.color=i.slice()}return t}}var r=i(15),a=i(380),s=i(1),l=i(10),u=i(9),h=i(78),c=u.encodeHTML,d=u.addCommas;t.exports=r.extend({type:"series.treemap",dependencies:["grid","polar"],_viewRoot:null,defaultOption:{progressive:0,hoverLayerThreshold:1/0,left:"center",top:"middle",right:null,bottom:null,width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{normal:{color:"rgba(0,0,0,0.7)",borderColor:"rgba(255,255,255,0.7)",borderWidth:1,shadowColor:"rgba(150,150,150,1)",shadowBlur:3,shadowOffsetX:0,shadowOffsetY:0,textStyle:{color:"#fff"}},emphasis:{textStyle:{}}}},label:{normal:{show:!0,position:"inside",textStyle:{color:"#fff",ellipsis:!0}}},itemStyle:{normal:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},getInitialData:function(t,e){var i=t.data||[],r=t.name;null==r&&(r=t.name);var l={name:r,children:t.data},u=(i[0]||{}).value;n(l,s.isArray(u)?u.length:-1);var h=t.levels||[];return h=t.levels=o(h,e),a.createTree(l,this,h).data},optionUpdated:function(){this.resetViewRoot()},formatTooltip:function(t){var e=this.getData(),i=this.getRawValue(t),n=d(s.isArray(i)?i[0]:i),o=e.getName(t);return c(o)+": "+n},getDataParams:function(t){var e=r.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(t);return e.treePathInfo=h.wrapTreePathInfo(i,this),e},setLayoutInfo:function(t){this.layoutInfo=this.layoutInfo||{},s.extend(this.layoutInfo,t)},mapIdToIndex:function(t){var e=this._idIndexMap;e||(e=this._idIndexMap={},this._idIndexMapCount=0);var i=e[t];return null==i&&(e[t]=i=this._idIndexMapCount++),i},getViewRoot:function(){return this._viewRoot},resetViewRoot:function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)}})},function(t,e,i){function n(){return{nodeGroup:[],background:[],content:[]}}function o(t,e,i,n,o,l,u,h,c,d){function f(e){E.dataIndex=u.dataIndex,E.seriesIndex=t.seriesIndex;var i=I.borderWidth,n=Math.max(A-2*i,0),o=Math.max(L-2*i,0);E.culling=!0,E.setShape({x:i,y:i,width:n,height:o});var r=u.getVisual("color",!0);p(E,function(){var t={fill:r},e=u.getModel("itemStyle.emphasis").getItemStyle();g(t,e,r,n,o),E.setStyle(t),s.setHoverStyle(E,e)}),e.add(E)}function p(t,e){C?!t.invisible&&l.push(t):(e(),t.__tmWillVisible||(t.invisible=!1))}function g(e,i,n,o,r){var a=u.getModel(),s=a.get("name");if(I.isLeafRoot){var l=t.get("drillDownIcon",!0);s=l?l+" "+s:s}y(s,e,a,_,n,o,r),y(s,i,a,b,n,o,r)}function y(t,e,i,n,o,r,a){var l=i.getModel(n),u=l.getModel("textStyle");s.setText(e,l,o),e.textAlign=u.get("align"),e.textVerticalAlign=u.get("baseline");var h=u.getTextRect(t);!l.getShallow("show")||h.height>a?e.text="":h.width>r?e.text=u.get("ellipsis")?u.truncateText(t,r,null,{minChar:2}):"":e.text=t}function x(t,n,a,s){var l=null!=P&&i[t][P],u=o[t];return l?(i[t][P]=null,w(u,l,t)):C||(l=new n({z:r(a,s)}),l.__tmDepth=a,l.__tmStorageName=t,T(u,l,t)),e[t][D]=l}function w(t,e,i){var n=t[D]={};n.old="nodeGroup"===i?e.position.slice():a.extend({},e.shape)}function T(t,e,i){var r=t[D]={},a=u.parentNode;if(a&&(!n||"drillDown"===n.direction)){var s=0,l=0,h=o.background[a.getRawIndex()];!n&&h&&h.old&&(s=h.old.width,l=h.old.height),r.old="nodeGroup"===i?[0,l]:{x:s,y:l,width:0,height:0}}r.fadein="nodeGroup"!==i}if(u){var I=u.getLayout();if(I&&I.isInView){var A=I.width,L=I.height,C=I.invisible,D=u.getRawIndex(),P=h&&h.getRawIndex(),k=x("nodeGroup",m);if(k){if(c.add(k),k.attr("position",[I.x||0,I.y||0]),k.__tmNodeWidth=A,k.__tmNodeHeight=L,I.isAboveViewRoot)return k;var z=x("background",v,d,S);z&&(z.setShape({x:0,y:0,width:A,height:L}),p(z,function(){z.setStyle("fill",u.getVisual("borderColor",!0))}),k.add(z));var O=u.viewChildren;if(!O||!O.length){var E=x("content",v,d,M);E&&f(k)}return k}}}}function r(t,e){var i=t*w+e;return(i-1)/i}var a=i(1),s=i(3),l=i(45),u=i(78),h=i(312),c=i(79),d=i(8),f=i(19),p=i(381),g=a.bind,m=s.Group,v=s.Rect,y=a.each,x=3,_=["label","normal"],b=["label","emphasis"],w=10,S=1,M=2;t.exports=i(2).extendChartView({type:"treemap",init:function(t,e){this._containerGroup,this._storage=n(),this._oldTree,this._breadcrumb,this._controller,this._state="ready",this._mayClick},render:function(t,e,i,n){var o=e.findComponents({mainType:"series",subType:"treemap",query:n});if(!(a.indexOf(o,t)<0)){this.seriesModel=t,this.api=i,this.ecModel=e;var r=u.retrieveTargetInfo(n,t),s=n&&n.type,l=t.layoutInfo,h=!this._oldTree,c=this._storage,d="treemapRootToNode"===s&&r&&c?{rootNodeGroup:c.nodeGroup[r.node.getRawIndex()],direction:n.direction}:null,f=this._giveContainerGroup(l),p=this._doRender(f,t,d);h||s&&"treemapZoomToNode"!==s&&"treemapRootToNode"!==s?p.renderFinally():this._doAnimation(f,p,t,d),this._resetController(i),this._renderBreadcrumb(t,i,r)}},_giveContainerGroup:function(t){var e=this._containerGroup;return e||(e=this._containerGroup=new m,this._initEvents(e),this.group.add(e)),e.attr("position",[t.x,t.y]),e},_doRender:function(t,e,i){function r(t,e,i,n,o){function s(t){return t.getId()}function u(a,s){var l=null!=a?t[a]:null,u=null!=s?e[s]:null,h=m(l,u,i,o);h&&r(l&&l.viewChildren||[],u&&u.viewChildren||[],h,n,o+1)}n?(e=t,y(t,function(t,e){!t.isRemoved()&&u(e,e)})):new l(e,t,s,s).add(u).update(u).remove(a.curry(u,null)).execute()}function s(t){var e=n();return t&&y(t,function(t,i){var n=e[i];y(t,function(t){t&&(n.push(t),t.__tmWillDelete=1)})}),e}function u(){y(v,function(t){y(t,function(t){t.parent&&t.parent.remove(t)})}),y(g,function(t){t.invisible=!0,t.dirty()})}var h=e.getData().tree,c=this._oldTree,d=n(),f=n(),p=this._storage,g=[],m=a.curry(o,e,f,p,i,d,g);r(h.root?[h.root]:[],c&&c.root?[c.root]:[],t,h===c||!c,0);var v=s(p);return this._oldTree=h,this._storage=f,{lastsForAnimation:d,willDeleteEls:v,renderFinally:u}},_doAnimation:function(t,e,i,n){if(i.get("animation")){var o=i.get("animationDurationUpdate"),r=i.get("animationEasing"),s=p.createWrap();y(e.willDeleteEls,function(t,e){y(t,function(t,i){if(!t.invisible){var a,l=t.parent;if(n&&"drillDown"===n.direction)a=l===n.rootNodeGroup?{shape:{x:0,y:0,width:l.__tmNodeWidth,height:l.__tmNodeHeight},style:{opacity:0}}:{style:{opacity:0}};else{var u=0,h=0;l.__tmWillDelete||(u=l.__tmNodeWidth/2,h=l.__tmNodeHeight/2),a="nodeGroup"===e?{position:[u,h],style:{opacity:0}}:{shape:{x:u,y:h,width:0,height:0},style:{opacity:0}}}a&&s.add(t,a,o,r)}})}),y(this._storage,function(t,i){y(t,function(t,n){var l=e.lastsForAnimation[i][n],u={};l&&("nodeGroup"===i?l.old&&(u.position=t.position.slice(),t.attr("position",l.old)):(l.old&&(u.shape=a.extend({},t.shape),t.setShape(l.old)),l.fadein?(t.setStyle("opacity",0),u.style={opacity:1}):1!==t.style.opacity&&(u.style={opacity:1})),s.add(t,u,o,r))})},this),this._state="animating",s.done(g(function(){this._state="ready",e.renderFinally()},this)).start()}},_resetController:function(t){var e=this._controller;e||(e=this._controller=new c(t.getZr()),e.enable(this.seriesModel.get("roam")),e.on("pan",g(this._onPan,this)),e.on("zoom",g(this._onZoom,this)));var i=new d(0,0,t.getWidth(),t.getHeight());e.setContainsPoint(function(t,e){return i.contain(t,e)})},_clearController:function(){var t=this._controller;t&&(t.dispose(),t=null)},_onPan:function(t,e){if(this._mayClick=!1,"animating"!==this._state&&(Math.abs(t)>x||Math.abs(e)>x)){var i=this.seriesModel.getData().tree.root;if(!i)return;var n=i.getLayout();if(!n)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:n.x+t,y:n.y+e,width:n.width,height:n.height}})}},_onZoom:function(t,e,i){if(this._mayClick=!1,"animating"!==this._state){var n=this.seriesModel.getData().tree.root;if(!n)return;var o=n.getLayout();if(!o)return;var r=new d(o.x,o.y,o.width,o.height),a=this.seriesModel.layoutInfo;e-=a.x,i-=a.y;var s=f.create();f.translate(s,s,[-e,-i]),f.scale(s,s,[t,t]),f.translate(s,s,[e,i]),r.applyTransform(s),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:r.x,y:r.y,width:r.width,height:r.height}})}},_initEvents:function(t){function e(t){var e=this.seriesModel.get("nodeClick",!0);if(e){var i=this.findTarget(t.offsetX,t.offsetY);if(i){var n=i.node;if(n.getLayout().isLeafRoot)this._rootToNode(i);else if("zoomToNode"===e)this._zoomToNode(i);else if("link"===e){var o=n.hostTree.data.getItemModel(n.dataIndex),r=o.get("link",!0),a=o.get("target",!0)||"blank";r&&window.open(r,a)}}}}t.on("mousedown",function(t){"ready"===this._state&&(this._mayClick=!0)},this),t.on("mouseup",function(t){this._mayClick&&(this._mayClick=!1,"ready"===this._state&&e.call(this,t))},this)},_renderBreadcrumb:function(t,e,i){function n(e){"animating"!==this._state&&(u.aboveViewRoot(t.getViewRoot(),e)?this._rootToNode({node:e}):this._zoomToNode({node:e}))}i||(i=null!=t.get("leafDepth",!0)?{node:t.getViewRoot()}:this.findTarget(e.getWidth()/2,e.getHeight()/2),i||(i={node:t.getData().tree.root})),(this._breadcrumb||(this._breadcrumb=new h(this.group))).render(t,e,i.node,g(n,this))},remove:function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage=n(),this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},dispose:function(){this._clearController()},_zoomToNode:function(t){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},_rootToNode:function(t){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},findTarget:function(t,e){var i,n=this.seriesModel.getViewRoot();return n.eachNode({attr:"viewChildren",order:"preorder"},function(n){var o=this._storage.background[n.getRawIndex()];if(o){var r=o.transformCoordToLocal(t,e),a=o.shape;if(!(a.x<=r[0]&&r[0]<=a.x+a.width&&a.y<=r[1]&&r[1]<=a.y+a.height))return!1;i={node:n,offsetX:r[0],offsetY:r[1]}}},this),i}})},function(t,e,i){for(var n=i(2),o=i(78),r=function(){},a=["treemapZoomToNode","treemapRender","treemapMove"],s=0;s<a.length;s++)n.registerAction({type:a[s],update:"updateView"},r);n.registerAction({type:"treemapRootToNode",update:"updateView"},function(t,e){function i(e,i){var n=o.retrieveTargetInfo(t,e);if(n){var r=e.getViewRoot();r&&(t.direction=o.aboveViewRoot(r,n.node)?"rollUp":"drillDown"),e.resetViewRoot(n.node)}}e.eachComponent({mainType:"series",subType:"treemap",query:t},i)})},function(t,e,i){function n(t,e,i){var n={mainType:"series",subType:"treemap",query:i};t.eachComponent(n,function(t){var n=e.getWidth(),r=e.getHeight(),a=t.option,s=a.size||[],l=b(w(a.width,s[0]),n),u=b(w(a.height,s[1]),r),h=m.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),g=i&&i.type,x=v.retrieveTargetInfo(i,t),_="treemapRender"===g||"treemapMove"===g?i.rootRect:null,M=t.getViewRoot(),T=v.getPathToRoot(M);if("treemapMove"!==g){var I="treemapZoomToNode"===g?c(t,x,M,l,u):_?[_.width,_.height]:[l,u],A=a.sort;A&&"asc"!==A&&"desc"!==A&&(A="desc");var L={squareRatio:a.squareRatio,sort:A,leafDepth:a.leafDepth};M.hostTree.clearLayouts();var C={x:0,y:0,width:I[0],height:I[1],area:I[0]*I[1]};M.setLayout(C),o(M,L,!1,0);var C=M.getLayout();S(T,function(t,e){var i=(T[e+1]||M).getValue();t.setLayout(p.extend({dataExtent:[i,i],borderWidth:0},C))})}var D=t.getData().tree.root;D.setLayout(d(h,_,x),!0),t.setLayoutInfo(h),f(D,new y((-h.x),(-h.y),n,r),T,M,0)})}function o(t,e,i,n){var a,s;if(!t.isRemoved()){var l=t.getLayout();a=l.width,s=l.height;var c=t.getModel("itemStyle.normal"),d=c.get("borderWidth"),f=c.get("gapWidth")/2,p=d-f,g=t.getModel();t.setLayout({borderWidth:d},!0),a=x(a-2*p,0),s=x(s-2*p,0);var m=a*s,v=r(t,g,m,e,i,n);if(v.length){var y={x:p,y:p,width:a,height:s},b=_(a,s),w=1/0,S=[];S.area=0;for(var M=0,T=v.length;M<T;){var I=v[M];S.push(I),S.area+=I.getLayout().area;var A=u(S,b,e.squareRatio);A<=w?(M++,w=A):(S.area-=S.pop().getLayout().area,h(S,b,y,f,!1),b=_(y.width,y.height),S.length=S.area=0,w=1/0)}if(S.length&&h(S,b,y,f,!0),!i){var L=g.get("childrenVisibleMin");null!=L&&m<L&&(i=!0)}for(var M=0,T=v.length;M<T;M++)o(v[M],e,i,n+1)}}}function r(t,e,i,n,o,r){var u=t.children||[],h=n.sort;"asc"!==h&&"desc"!==h&&(h=null);var c=null!=n.leafDepth&&n.leafDepth<=r;if(o&&!c)return t.viewChildren=[];u=p.filter(u,function(t){return!t.isRemoved()}),s(u,h);var d=l(e,u,h);if(0===d.sum)return t.viewChildren=[];if(d.sum=a(e,i,d.sum,h,u),0===d.sum)return t.viewChildren=[];for(var f=0,g=u.length;f<g;f++){var m=u[f].getValue()/d.sum*i;u[f].setLayout({area:m})}return c&&(u.length&&t.setLayout({isLeafRoot:!0},!0),u.length=0),t.viewChildren=u,t.setLayout({dataExtent:d.dataExtent},!0),u}function a(t,e,i,n,o){if(!n)return i;for(var r=t.get("visibleMin"),a=o.length,s=a,l=a-1;l>=0;l--){var u=o["asc"===n?a-l-1:l].getValue();u/i*e<r&&(s=l,i-=u)}return"asc"===n?o.splice(0,a-s):o.splice(s,a-s),i}function s(t,e){return e&&t.sort(function(t,i){return"asc"===e?t.getValue()-i.getValue():i.getValue()-t.getValue()}),t}function l(t,e,i){for(var n=0,o=0,r=e.length;o<r;o++)n+=e[o].getValue();var a,s=t.get("visualDimension");if(e&&e.length)if("value"===s&&i)a=[e[e.length-1].getValue(),e[0].getValue()],"asc"===i&&a.reverse();else{var a=[1/0,-(1/0)];S(e,function(t){var e=t.getValue(s);e<a[0]&&(a[0]=e),e>a[1]&&(a[1]=e)})}else a=[NaN,NaN];return{sum:n,dataExtent:a}}function u(t,e,i){for(var n,o=0,r=1/0,a=0,s=t.length;a<s;a++)n=t[a].getLayout().area,n&&(n<r&&(r=n),n>o&&(o=n));var l=t.area*t.area,u=e*e*i;return l?x(u*o/l,l/(u*r)):1/0}function h(t,e,i,n,o){var r=e===i.width?0:1,a=1-r,s=["x","y"],l=["width","height"],u=i[s[r]],h=e?t.area/e:0;(o||h>i[l[a]])&&(h=i[l[a]]);for(var c=0,d=t.length;c<d;c++){var f=t[c],p={},g=h?f.getLayout().area/h:0,m=p[l[a]]=x(h-2*n,0),v=i[s[r]]+i[l[r]]-u,y=c===d-1||v<g?v:g,b=p[l[r]]=x(y-2*n,0);p[s[a]]=i[s[a]]+_(n,m/2),p[s[r]]=u+_(n,b/2),u+=y,f.setLayout(p,!0)}i[s[a]]+=h,i[l[a]]-=h}function c(t,e,i,n,o){var r=(e||{}).node,a=[n,o];if(!r||r===i)return a;for(var s,l=n*o,u=l*t.option.zoomToNodeRatio;s=r.parentNode;){for(var h=0,c=s.children,d=0,f=c.length;d<f;d++)h+=c[d].getValue();var p=r.getValue();if(0===p)return a;u*=h/p;var m=s.getModel("itemStyle.normal").get("borderWidth");isFinite(m)&&(u+=4*m*m+4*m*Math.pow(u,.5)),u>g.MAX_SAFE_INTEGER&&(u=g.MAX_SAFE_INTEGER),r=s}u<l&&(u=l);var v=Math.pow(u/l,.5);return[n*v,o*v]}function d(t,e,i){if(e)return{x:e.x,y:e.y};var n={x:0,y:0};if(!i)return n;var o=i.node,r=o.getLayout();if(!r)return n;for(var a=[r.width/2,r.height/2],s=o;s;){var l=s.getLayout();a[0]+=l.x,a[1]+=l.y,s=s.parentNode}return{x:t.width/2-a[0],y:t.height/2-a[1]}}function f(t,e,i,n,o){var r=t.getLayout(),a=i[o],s=a&&a===t;if(!(a&&!s||o===i.length&&t!==n)){t.setLayout({isInView:!0,invisible:!s&&!e.intersect(r),isAboveViewRoot:s},!0);var l=new y(e.x-r.x,e.y-r.y,e.width,e.height);S(t.viewChildren||[],function(t){f(t,l,i,n,o+1)})}}var p=i(1),g=i(4),m=i(13),v=i(78),y=i(8),v=i(78),x=Math.max,_=Math.min,b=g.parsePercent,w=p.retrieve,S=p.each;t.exports=n},function(t,e,i){function n(t,e,i,s,u,c){var d=t.getModel(),p=t.getLayout();if(p&&!p.invisible&&p.isInView){var m,v=t.getModel(g),y=i[t.depth],x=o(v,e,y,s),_=v.get("borderColor"),b=v.get("borderColorSaturation");null!=b&&(m=r(x,t),_=a(b,m)),t.setVisual("borderColor",_);var w=t.viewChildren;if(w&&w.length){var S=l(t,d,p,v,x,w);f.each(w,function(t,e){if(t.depth>=u.length||t===u[t.depth]){var o=h(d,x,t,e,S,c);n(t,o,i,s,u,c)}})}else m=r(x,t),t.setVisual("color",m)}}function o(t,e,i,n){var o=f.extend({},e);return f.each(["color","colorAlpha","colorSaturation"],function(r){var a=t.get(r,!0);null==a&&i&&(a=i[r]),null==a&&(a=e[r]),null==a&&(a=n.get(r)),null!=a&&(o[r]=a)}),o}function r(t){var e=s(t,"color");if(e){var i=s(t,"colorAlpha"),n=s(t,"colorSaturation");return n&&(e=d.modifyHSL(e,null,null,n)),i&&(e=d.modifyAlpha(e,i)),e}}function a(t,e){return null!=e?d.modifyHSL(e,null,null,t):null}function s(t,e){var i=t[e];if(null!=i&&"none"!==i)return i}function l(t,e,i,n,o,r){if(r&&r.length){var a=u(e,"color")||null!=o.color&&"none"!==o.color&&(u(e,"colorAlpha")||u(e,"colorSaturation"));if(a){var s=e.get("visualMin"),l=e.get("visualMax"),h=i.dataExtent.slice();null!=s&&s<h[0]&&(h[0]=s),null!=l&&l>h[1]&&(h[1]=l);var d=e.get("colorMappingBy"),f={type:a.name,dataExtent:h,visual:a.range};"color"!==f.type||"index"!==d&&"id"!==d?f.mappingMethod="linear":(f.mappingMethod="category",f.loop=!0);var p=new c(f);return p.__drColorMappingBy=d,p}}}function u(t,e){var i=t.get(e);return p(i)&&i.length?{name:e,range:i}:null}function h(t,e,i,n,o,r){var a=f.extend({},e);if(o){var s=o.type,l="color"===s&&o.__drColorMappingBy,u="index"===l?n:"id"===l?r.mapIdToIndex(i.getId()):i.getValue(t.get("visualDimension"));a[s]=o.mapValueToVisual(u)}return a}var c=i(71),d=i(18),f=i(1),p=f.isArray,g="itemStyle.normal";t.exports=function(t,e,i){var o={mainType:"series",subType:"treemap",query:i};t.eachComponent(o,function(t){var e=t.getData().tree,i=e.root,o=t.getModel(g);if(!i.isRemoved()){var r=f.map(e.levelModels,function(t){ +return t?t.get(g):null});n(i,{},r,o,t.getViewRoot().getAncestors(),t)}})}},function(t,e,i){"use strict";i(216),i(319)},function(t,e,i){"use strict";function n(t,e,i,n){var o=t.coordToPoint([e,n]),r=t.coordToPoint([i,n]);return{x1:o[0],y1:o[1],x2:r[0],y2:r[1]}}var o=i(1),r=i(3),a=i(10),s=["axisLine","axisLabel","axisTick","splitLine","splitArea"];i(2).extendComponentView({type:"angleAxis",render:function(t,e){if(this.group.removeAll(),t.get("show")){var i=e.getComponent("polar",t.get("polarIndex")),n=t.axis,r=i.coordinateSystem,a=r.getRadiusAxis().getExtent(),l=n.getTicksCoords();"category"!==n.type&&l.pop(),o.each(s,function(e){t.get(e+".show")&&this["_"+e](t,r,l,a)},this)}},_axisLine:function(t,e,i,n){var o=t.getModel("axisLine.lineStyle"),a=new r.Circle({shape:{cx:e.cx,cy:e.cy,r:n[1]},style:o.getLineStyle(),z2:1,silent:!0});a.style.fill=null,this.group.add(a)},_axisTick:function(t,e,i,a){var s=t.getModel("axisTick"),l=(s.get("inside")?-1:1)*s.get("length"),u=o.map(i,function(t){return new r.Line({shape:n(e,a[1],a[1]+l,t)})});this.group.add(r.mergePath(u,{style:o.defaults(s.getModel("lineStyle").getLineStyle(),{stroke:t.get("axisLine.lineStyle.color")})}))},_axisLabel:function(t,e,i,n){for(var o=t.axis,s=t.get("data"),l=t.getModel("axisLabel"),u=l.getModel("textStyle"),h=t.getFormattedLabels(),c=l.get("margin"),d=o.getLabelsCoords(),f=0;f<i.length;f++){var p=n[1],g=e.coordToPoint([p+c,d[f]]),m=e.cx,v=e.cy,y=Math.abs(g[0]-m)/p<.3?"center":g[0]>m?"left":"right",x=Math.abs(g[1]-v)/p<.3?"middle":g[1]>v?"top":"bottom",_=u;s&&s[f]&&s[f].textStyle&&(_=new a(s[f].textStyle,u)),this.group.add(new r.Text({style:{x:g[0],y:g[1],fill:_.getTextColor()||t.get("axisLine.lineStyle.color"),text:h[f],textAlign:y,textVerticalAlign:x,textFont:_.getFont()},silent:!0}))}},_splitLine:function(t,e,i,a){var s=t.getModel("splitLine"),l=s.getModel("lineStyle"),u=l.get("color"),h=0;u=u instanceof Array?u:[u];for(var c=[],d=0;d<i.length;d++){var f=h++%u.length;c[f]=c[f]||[],c[f].push(new r.Line({shape:n(e,a[0],a[1],i[d])}))}for(var d=0;d<c.length;d++)this.group.add(r.mergePath(c[d],{style:o.defaults({stroke:u[d%u.length]},l.getLineStyle()),silent:!0,z:t.get("z")}))},_splitArea:function(t,e,i,n){var a=t.getModel("splitArea"),s=a.getModel("areaStyle"),l=s.get("color"),u=0;l=l instanceof Array?l:[l];for(var h=[],c=Math.PI/180,d=-i[0]*c,f=Math.min(n[0],n[1]),p=Math.max(n[0],n[1]),g=t.get("clockwise"),m=1;m<i.length;m++){var v=u++%l.length;h[v]=h[v]||[],h[v].push(new r.Sector({shape:{cx:e.cx,cy:e.cy,r0:f,r:p,startAngle:d,endAngle:-i[m]*c,clockwise:g},silent:!0})),d=-i[m]*c}for(var m=0;m<h.length;m++)this.group.add(r.mergePath(h[m],{style:o.defaults({fill:l[m%l.length]},s.getAreaStyle()),silent:!0}))}})},function(t,e,i){function n(t,e,i){return i&&"axisAreaSelect"===i.type&&e.findComponents({mainType:"parallelAxis",query:i})[0]===t}var o=i(1),r=i(50),a=i(113),s=i(3),l=["axisLine","axisLabel","axisTick","axisName"],u=i(2).extendComponentView({type:"parallelAxis",init:function(t,e){u.superApply(this,"init",arguments),(this._brushController=new a(e.getZr())).on("brush",o.bind(this._onBrush,this))},render:function(t,e,i,a){if(!n(t,e,a)){this.axisModel=t,this.api=i,this.group.removeAll();var u=this._axisGroup;if(this._axisGroup=new s.Group,this.group.add(this._axisGroup),t.get("show")){var h,c=e.getComponent("parallel",t.get("parallelIndex")).coordinateSystem,d=t.getAreaSelectStyle(),f=d.width,p=t.axis.dim,g=c.getAxisLayout(p),m=o.indexOf(c.dimensions,p),v=g.axisExpandWindow;v&&(m<=v[0]||m>=v[1])&&(h=!1);var y=o.extend({axisLabelShow:h,strokeContainThreshold:f},g),x=new r(t,y);o.each(l,x.add,x),this._axisGroup.add(x.getGroup()),this._refreshBrushController(y,d,t,f),s.groupTransition(u,this._axisGroup,t)}}},_refreshBrushController:function(t,e,i,n){var r=i.axis,a=o.map(i.activeIntervals,function(t){return{brushType:"lineX",panelId:"pl",range:[r.dataToCoord(t[0],!0),r.dataToCoord(t[1],!0)]}}),l=r.getExtent(),u=l[1]-l[0],h=Math.min(30,.1*Math.abs(u)),c=s.BoundingRect.create({x:l[0],y:-n/2,width:u,height:n});c.x-=h,c.width+=2*h,this._brushController.mount({enableGlobalPan:!0,rotation:t.rotation,position:t.position}).setPanels([{panelId:"pl",rect:c}]).enableBrush({brushType:"lineX",brushStyle:e,removeOnClick:!0}).updateCovers(a)},_onBrush:function(t,e){var i=this.axisModel,n=i.axis,r=o.map(t,function(t){return[n.coordToData(t.range[0],!0),n.coordToData(t.range[1],!0)]});(!i.option.realtime===e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:"axisAreaSelect",parallelAxisId:i.id,intervals:r})},dispose:function(){this._brushController.dispose()}});t.exports=u},function(t,e,i){"use strict";function n(t,e,i){return{position:[t.cx,t.cy],rotation:i/180*Math.PI,labelDirection:-1,tickDirection:-1,nameDirection:1,labelRotation:e.getModel("axisLabel").get("rotate"),z2:1}}var o=i(1),r=i(3),a=i(50),s=["axisLine","axisLabel","axisTick","axisName"],l=["splitLine","splitArea"];i(2).extendComponentView({type:"radiusAxis",render:function(t,e){if(this.group.removeAll(),t.get("show")){var i=e.getComponent("polar",t.get("polarIndex")),r=i.coordinateSystem.getAngleAxis(),u=t.axis,h=i.coordinateSystem,c=u.getTicksCoords(),d=r.getExtent()[0],f=u.getExtent(),p=n(h,t,d),g=new a(t,p);o.each(s,g.add,g),this.group.add(g.getGroup()),o.each(l,function(e){t.get(e+".show")&&this["_"+e](t,h,d,f,c)},this)}},_splitLine:function(t,e,i,n,a){var s=t.getModel("splitLine"),l=s.getModel("lineStyle"),u=l.get("color"),h=0;u=u instanceof Array?u:[u];for(var c=[],d=0;d<a.length;d++){var f=h++%u.length;c[f]=c[f]||[],c[f].push(new r.Circle({shape:{cx:e.cx,cy:e.cy,r:a[d]},silent:!0}))}for(var d=0;d<c.length;d++)this.group.add(r.mergePath(c[d],{style:o.defaults({stroke:u[d%u.length],fill:null},l.getLineStyle()),silent:!0}))},_splitArea:function(t,e,i,n,a){var s=t.getModel("splitArea"),l=s.getModel("areaStyle"),u=l.get("color"),h=0;u=u instanceof Array?u:[u];for(var c=[],d=a[0],f=1;f<a.length;f++){var p=h++%u.length;c[p]=c[p]||[],c[p].push(new r.Sector({shape:{cx:e.cx,cy:e.cy,r0:d,r:a[f],startAngle:0,endAngle:2*Math.PI},silent:!0})),d=a[f]}for(var f=0;f<c.length;f++)this.group.add(r.mergePath(c[f],{style:o.defaults({fill:u[f%u.length]},l.getAreaStyle()),silent:!0}))}})},function(t,e,i){function n(t){var e=t.coordinateSystem,i=t.axis,n={},o=i.position,r=i.orient,a=e.getRect(),s=[a.x,a.x+a.width,a.y,a.y+a.height],l={horizontal:{top:s[2],bottom:s[3]},vertical:{left:s[0],right:s[1]}};n.position=["vertical"===r?l.vertical[o]:s[0],"horizontal"===r?l.horizontal[o]:s[3]];var u={horizontal:0,vertical:1};n.rotation=Math.PI/2*u[r];var h={top:-1,bottom:1,right:1,left:-1};n.labelDirection=n.tickDirection=n.nameDirection=h[o],t.getModel("axisTick").get("inside")&&(n.tickDirection=-n.tickDirection),t.getModel("axisLabel").get("inside")&&(n.labelDirection=-n.labelDirection);var c=t.getModel("axisLabel").get("rotate");return n.labelRotation="top"===o?-c:c,n.labelInterval=i.getLabelInterval(),n.z2=1,n}var o=i(50),r=i(1),a=i(3),s=o.getInterval,l=o.ifIgnoreOnTick,u=["axisLine","axisLabel","axisTick","axisName"],h="splitLine",c=i(2).extendComponentView({type:"singleAxis",render:function(t,e){var i=this.group;i.removeAll();var a=n(t),s=new o(t,a);r.each(u,s.add,s),i.add(s.getGroup()),t.get(h+".show")&&this["_"+h](t,a.labelInterval)},_splitLine:function(t,e){var i=t.axis,n=t.getModel("splitLine"),o=n.getModel("lineStyle"),r=o.get("width"),u=o.get("color"),h=s(n,e);u=u instanceof Array?u:[u];for(var c=t.coordinateSystem.getRect(),d=i.isHorizontal(),f=[],p=0,g=i.getTicksCoords(),m=[],v=[],y=0;y<g.length;++y)if(!l(i,y,h)){var x=i.toGlobalCoord(g[y]);d?(m[0]=x,m[1]=c.y,v[0]=x,v[1]=c.y+c.height):(m[0]=c.x,m[1]=x,v[0]=c.x+c.width,v[1]=x);var _=p++%u.length;f[_]=f[_]||[],f[_].push(new a.Line(a.subPixelOptimizeLine({shape:{x1:m[0],y1:m[1],x2:v[0],y2:v[1]},style:{lineWidth:r},silent:!0})))}for(var y=0;y<f.length;++y)this.group.add(a.mergePath(f[y],{style:{stroke:u[y%u.length],lineDash:o.getLineDash(r),lineWidth:r},silent:!0}))}});t.exports=c},function(t,e,i){var n=i(2),o={type:"axisAreaSelect",event:"axisAreaSelected",update:"updateVisual"};n.registerAction(o,function(t,e){e.eachComponent({mainType:"parallelAxis",query:t},function(e){e.axis.model.setActiveIntervals(t.intervals)})}),n.registerAction("parallelAxisExpand",function(t,e){e.eachComponent({mainType:"parallel",query:t},function(e){e.setAxisExpand(t)})})},function(t,e,i){i(2).registerPreprocessor(i(328)),i(330),i(325),i(326),i(327),i(348)},function(t,e,i){var n=i(2),o=i(1),r=i(173),a=i(10),s=["#ddd"],l=n.extendComponentModel({type:"brush",dependencies:["geo","grid","xAxis","yAxis","parallel","series"],defaultOption:{toolbox:null,brushLink:null,seriesIndex:"all",geoIndex:null,xAxisIndex:null,yAxisIndex:null,brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(120,140,180,0.3)",borderColor:"rgba(120,140,180,0.8)",width:null},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0},areas:[],brushType:null,brushOption:{},coordInfoList:[],optionUpdated:function(t,e){var i=this.option;!e&&r.replaceVisualOption(i,t,["inBrush","outOfBrush"]),i.inBrush=i.inBrush||{},i.outOfBrush=i.outOfBrush||{color:s}},setAreas:function(t){t&&(this.areas=o.map(t,function(t){return this._mergeBrushOption(t)},this))},setBrushOption:function(t){this.brushOption=this._mergeBrushOption(t),this.brushType=this.brushOption.brushType},_mergeBrushOption:function(t){var e=this.option;return o.merge({brushType:e.brushType,brushMode:e.brushMode,transformable:e.transformable,brushStyle:new a(e.brushStyle).getItemStyle(),removeOnClick:e.removeOnClick},t,!0)}});t.exports=l},function(t,e,i){function n(t,e,i,n){(!n||n.$from!==t.id)&&this._brushController.setPanels(s.makePanelOpts(t.coordInfoList)).enableBrush(t.brushOption).updateCovers(t.areas.slice())}var o=i(1),r=i(113),a=i(2),s=i(114);t.exports=a.extendComponentView({type:"brush",init:function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new r(e.getZr())).on("brush",o.bind(this._onBrush,this)).mount()},render:function(t){return this.model=t,n.apply(this,arguments)},updateView:n,updateLayout:n,updateVisual:n,dispose:function(){this._brushController.dispose()},_onBrush:function(t,e){var i=this.model.id;s.parseOutputRanges(t,this.model.coordInfoList,this.ecModel),(!e.isEnd||e.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:i,areas:o.clone(t),$from:i})}})},function(t,e,i){var n=i(2);n.registerAction({type:"brush",event:"brush",update:"updateView"},function(t,e){e.eachComponent({mainType:"brush",query:t},function(e){e.setAreas(t.areas)})}),n.registerAction({type:"brushSelect",event:"brushSelected",update:"none"},function(){})},function(t,e,i){function n(t){var e={};o.each(t,function(t){e[t]=1}),t.length=0,o.each(e,function(e,i){t.push(i)})}var o=i(1),r=["rect","polygon","keep","clear"];t.exports=function(t,e){var i=t&&t.brush;if(o.isArray(i)||(i=i?[i]:[]),i.length){var a=[];o.each(i,function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(a=a.concat(e))});var s=t&&t.toolbox;o.isArray(s)&&(s=s[0]),s||(s={feature:{}},t.toolbox=[s]);var l=s.feature||(s.feature={}),u=l.brush||(l.brush={}),h=u.type||(u.type=[]);h.push.apply(h,a),n(h),e&&!h.length&&h.push.apply(h,r)}}},function(t,e,i){function n(t){var e=["x","y"],i=["width","height"];return{point:function(e,i,n){var r=n.range,a=e[t];return o(a,r)},rect:function(n,r,a){var s=a.range;return o(n[e[t]],s)||o(n[e[t]]+n[i[t]],s)}}}function o(t,e){return e[0]<=t&&t<=e[1]}function r(t,e,i,n,o){for(var r=0,s=o[o.length-1];r<o.length;r++){var l=o[r];if(a(t,e,i,n,l[0],l[1],s[0],s[1]))return!0;s=l}}function a(t,e,i,n,o,r,a,u){var h=l(i-t,o-a,n-e,r-u);if(s(h))return!1;var c=l(o-t,o-a,r-e,r-u)/h;if(c<0||c>1)return!1;var d=l(i-t,o-t,n-e,r-e)/h;return!(d<0||d>1)}function s(t){return t<=1e-6&&t>=-1e-6}function l(t,e,i,n){return t*n-e*i}var u=i(242).contain,h=i(8),c={lineX:n(0),lineY:n(1),rect:{point:function(t,e,i){return i.boundingRect.contain(t[0],t[1])},rect:function(t,e,i){return i.boundingRect.intersect(t)}},polygon:{point:function(t,e,i){return i.boundingRect.contain(t[0],t[1])&&u(i.range,t[0],t[1])},rect:function(t,e,i){var n=i.range;if(n.length<=1)return!1;var o=t.x,a=t.y,s=t.width,l=t.height,c=n[0];return!!(u(n,o,a)||u(n,o+s,a)||u(n,o,a+l)||u(n,o+s,a+l)||h.create(t).contain(c[0],c[1])||r(o,a,o+s,a,n)||r(o,a,o,a+l,n)||r(o+s,a,o+s,a+l,n)||r(o,a+l,o+s,a+l,n))||void 0}}};t.exports=c},function(t,e,i){function n(t,e,i,n,r){if(r){var a=t.getZr();if(!a[x]){a[y]||(a[y]=o);var s=g.createOrUpdate(a,y,i,e);s(t,n)}}}function o(t,e){if(!t.isDisposed()){var i=t.getZr();i[x]=!0,t.dispatchAction({type:"brushSelect",batch:e}),i[x]=!1}}function r(t,e,i,n){for(var o=i.getItemLayout(n),r=0,a=e.length;r<a;r++){var s=e[r];if(t[s.brushType](o,s.selectors,s))return!0}}function a(t){var e=t.brushSelector;if(d.isString(e)){var i=[];return d.each(p,function(t,n){i[n]=t[e]}),i}if(d.isFunction(e)){var n={};return d.each(p,function(t,i){n[i]=e}),n}return e}function s(t,e){var i=t.option.seriesIndex;return null!=i&&"all"!==i&&(d.isArray(i)?d.indexOf(i,e)<0:e!==i)}function l(t){var e=t.selectors={};return d.each(p[t.brushType],function(i,n){e[n]=function(n){return i(n,e,t)}}),t}function u(t){return new f(t[0][0],t[1][0],t[0][1]-t[0][0],t[1][1]-t[1][0])}var h=i(2),c=i(173),d=i(1),f=i(8),p=i(329),g=i(83),m=i(114),v=["inBrush","outOfBrush"],y="__ecBrushSelect",x="__ecInBrushSelectEvent",_=h.PRIORITY.VISUAL.BRUSH;h.registerLayout(_,function(t,e,i){t.eachComponent({mainType:"brush"},function(e){i&&"takeGlobalCursor"===i.type&&e.setBrushOption("brush"===i.key?i.brushOption:{brushType:!1}),e.coordInfoList=m.makeCoordInfoList(e.option,t),m.parseInputRanges(e,t)})}),h.registerVisual(_,function(t,e,i){var o,u,h=[];t.eachComponent({mainType:"brush"},function(e,i){function n(t){return"all"===_||w[t]}function f(t){return!!t.length}function p(t,e){var i=t.coordinateSystem;T|=i.hasAxisbrushed(),n(e)&&i.eachActiveState(t.getData(),function(t,e){"active"===t&&(S[e]=1)})}function g(t,i,o){var l=a(t);if(l&&!s(e,i)&&(d.each(I,function(i){l[i.brushType]&&m.controlSeries(i,e,t)&&o.push(i),T|=f(o)}),n(i)&&f(o))){var u=t.getData();u.each(function(t){r(l,o,u,t)&&(S[t]=1)})}}var y={brushId:e.id,brushIndex:i,brushName:e.name,areas:d.clone(e.areas),selected:[]};h.push(y);var x=e.option,_=x.brushLink,w=[],S=[],M=[],T=0;i||(o=x.throttleType,u=x.throttleDelay);var I=d.map(e.areas,function(t){return l(d.defaults({boundingRect:b[t.brushType](t)},t))}),A=c.createVisualMappings(e.option,v,function(t){t.mappingMethod="fixed"});d.isArray(_)&&d.each(_,function(t){w[t]=1}),t.eachSeries(function(t,e){var i=M[e]=[];"parallel"===t.subType?p(t,e,i):g(t,e,i)}),t.eachSeries(function(t,e){var i={seriesId:t.id,seriesIndex:e,seriesName:t.name,dataIndex:[]};y.selected.push(i);var o=a(t),s=M[e],l=t.getData(),u=n(e)?function(t){return S[t]?(i.dataIndex.push(l.getRawIndex(t)),"inBrush"):"outOfBrush"}:function(t){return r(o,s,l,t)?(i.dataIndex.push(l.getRawIndex(t)),"inBrush"):"outOfBrush"};(n(e)?T:f(s))&&c.applyVisual(v,A,l,u)})}),n(e,o,u,h,i)});var b={lineX:d.noop,lineY:d.noop,rect:function(t){return u(t.range)},polygon:function(t){for(var e,i=t.range,n=0,o=i.length;n<o;n++){e=e||[[1/0,-(1/0)],[1/0,-(1/0)]];var r=i[n];r[0]<e[0][0]&&(e[0][0]=r[0]),r[0]>e[0][1]&&(e[0][1]=r[0]),r[1]<e[1][0]&&(e[1][0]=r[1]),r[1]>e[1][1]&&(e[1][1]=r[1])}return e&&u(e)}}},function(t,e,i){function n(t,e){e.update="updateView",o.registerAction(e,function(e,i){var n={};return i.eachComponent({mainType:"geo",query:e},function(i){i[t](e.name);var o=i.coordinateSystem;r.each(o.regions,function(t){n[t.name]=i.isSelected(t.name)||!1})}),{selected:n,name:e.name}})}i(357),i(172),i(332),i(221);var o=i(2),r=i(1);n("toggleSelected",{type:"geoToggleSelect",event:"geoselectchanged"}),n("select",{type:"geoSelect",event:"geoselected"}),n("unSelect",{type:"geoUnSelect",event:"geounselected"})},function(t,e,i){"use strict";var n=i(229);t.exports=i(2).extendComponentView({type:"geo",init:function(t,e){var i=new n(e,(!0));this._mapDraw=i,this.group.add(i.group)},render:function(t,e,i,n){if(!n||"geoToggleSelect"!==n.type||n.from!==this.uid){var o=this._mapDraw;t.get("show")?o.draw(t,e,i,this,n):this._mapDraw.group.removeAll(),this.group.silent=t.get("silent")}},dispose:function(){this._mapDraw&&this._mapDraw.remove()}})},function(t,e,i){i(240),i(323),i(320)},function(t,e,i){"use strict";i(216),i(318),i(337),i(2).extendComponentView({type:"polar"})},function(t,e,i){i(373),i(374),i(336)},function(t,e,i){var n=i(50),o=i(1),r=i(3),a=["axisLine","axisLabel","axisTick","axisName"];t.exports=i(2).extendComponentView({type:"radar",render:function(t,e,i){var n=this.group;n.removeAll(),this._buildAxes(t),this._buildSplitLineAndArea(t)},_buildAxes:function(t){var e=t.coordinateSystem,i=e.getIndicatorAxes(),r=o.map(i,function(t){var i=new n(t.model,{position:[e.cx,e.cy],rotation:t.angle,labelDirection:-1,tickDirection:-1,nameDirection:1});return i});o.each(r,function(t){o.each(a,t.add,t),this.group.add(t.getGroup())},this)},_buildSplitLineAndArea:function(t){function e(t,e,i){var n=i%e.length;return t[n]=t[n]||[],n}var i=t.coordinateSystem,n=t.get("splitNumber"),a=i.getIndicatorAxes();if(a.length){var s=t.get("shape"),l=t.getModel("splitLine"),u=t.getModel("splitArea"),h=l.getModel("lineStyle"),c=u.getModel("areaStyle"),d=l.get("show"),f=u.get("show"),p=h.get("color"),g=c.get("color");p=o.isArray(p)?p:[p],g=o.isArray(g)?g:[g];var m=[],v=[];if("circle"===s)for(var y=a[0].getTicksCoords(),x=i.cx,_=i.cy,b=0;b<y.length;b++){if(d){var w=e(m,p,b);m[w].push(new r.Circle({shape:{cx:x,cy:_,r:y[b]}}))}if(f&&b<y.length-1){var w=e(v,g,b);v[w].push(new r.Ring({shape:{cx:x,cy:_,r0:y[b],r:y[b+1]}}))}}else for(var S=o.map(a,function(t,e){var n=t.getTicksCoords();return o.map(n,function(t){return i.coordToPoint(t,e)})}),M=[],b=0;b<=n;b++){for(var T=[],I=0;I<a.length;I++)T.push(S[I][b]);if(T[0]&&T.push(T[0].slice()),d){var w=e(m,p,b);m[w].push(new r.Polyline({shape:{points:T}}))}if(f&&M){var w=e(v,g,b-1);v[w].push(new r.Polygon({shape:{points:T.concat(M)}}))}M=T.slice().reverse()}var A=h.getLineStyle(),L=c.getAreaStyle();o.each(v,function(t,e){this.group.add(r.mergePath(t,{style:o.defaults({stroke:"none",fill:g[e%g.length]},L),silent:!0}))},this),o.each(m,function(t,e){this.group.add(r.mergePath(t,{style:o.defaults({fill:"none",stroke:p[e%p.length]},A),silent:!0}))},this)}}})},function(t,e,i){i(216),i(321)},function(t,e,i){i(378),i(322),i(375);var n=i(2);n.extendComponentView({type:"single"})},function(t,e,i){var n=i(2);n.registerPreprocessor(i(345)),i(347),i(346),i(340),i(341)},function(t,e,i){var n=i(343),o=i(1),r=i(7),a=n.extend({type:"timeline.slider",defaultOption:{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"emptyCircle",symbolSize:10,lineStyle:{show:!0,width:2,color:"#304654"},label:{position:"auto",normal:{show:!0,interval:"auto",rotate:0,textStyle:{color:"#304654"}},emphasis:{show:!0,textStyle:{color:"#c23531"}}},itemStyle:{normal:{color:"#304654",borderWidth:1},emphasis:{color:"#c23531"}},checkpointStyle:{symbol:"circle",symbolSize:13,color:"#c23531",borderWidth:5,borderColor:"rgba(194,53,49, 0.5)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:22,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:"path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z",prevIcon:"path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z",normal:{color:"#304654",borderColor:"#304654",borderWidth:1},emphasis:{color:"#c23531",borderColor:"#c23531",borderWidth:2}},data:[]}});o.mixin(a,r.dataFormatMixin),t.exports=a},function(t,e,i){function n(t,e){return u.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()},t.get("padding"))}function o(t,e,i,n){var o=l.makePath(t.get(e).replace(/^path:\/\//,""),s.clone(n||{}),new p(i[0],i[1],i[2],i[3]),"center");return o}function r(t,e,i,n,o,r){var a=e.get("color");if(o)o.setColor(a),i.add(o),r&&r.onUpdate(o);else{var l=t.get("symbol");o=d.createSymbol(l,-1,-1,2,2,a),o.setStyle("strokeNoScale",!0),i.add(o),r&&r.onCreate(o)}var u=e.getItemStyle(["color","symbol","symbolSize"]);o.setStyle(u),n=s.merge({rectHover:!0,z2:100},n,!0);var h=t.get("symbolSize");h=h instanceof Array?h.slice():[+h,+h],h[0]/=2,h[1]/=2,n.scale=h;var c=t.get("symbolOffset");if(c){var f=n.position=n.position||[0,0];f[0]+=m.parsePercent(c[0],h[0]),f[1]+=m.parsePercent(c[1],h[1])}var p=t.get("symbolRotate");return n.rotation=(p||0)*Math.PI/180||0,o.attr(n),o.updateTransform(),o}function a(t,e,i,n,o){if(!t.dragging){var r=n.getModel("checkpointStyle"),a=i.dataToCoord(n.getData().get(["value"],e));o||!r.get("animation",!0)?t.attr({position:[a,0]}):(t.stopAnimation(!0),t.animateTo({position:[a,0]},r.get("animationDuration",!0),r.get("animationEasing",!0)))}}var s=i(1),l=i(3),u=i(13),h=i(344),c=i(342),d=i(26),f=i(22),p=i(8),g=i(19),m=i(4),v=i(9),y=v.encodeHTML,x=s.bind,_=s.each,b=Math.PI;t.exports=h.extend({type:"timeline.slider",init:function(t,e){this.api=e,this._axis,this._viewRect,this._timer,this._currentPointer,this._mainGroup,this._labelGroup},render:function(t,e,i,n){if(this.model=t,this.api=i,this.ecModel=e,this.group.removeAll(),t.get("show",!0)){var o=this._layout(t,i),r=this._createGroup("mainGroup"),a=this._createGroup("labelGroup"),s=this._axis=this._createAxis(o,t);t.formatTooltip=function(t){return y(s.scale.getLabel(t))},_(["AxisLine","AxisTick","Control","CurrentPointer"],function(e){this["_render"+e](o,r,s,t)},this),this._renderAxisLabel(o,a,s,t),this._position(o,t)}this._doPlayStop()},remove:function(){this._clearTimer(),this.group.removeAll()},dispose:function(){this._clearTimer()},_layout:function(t,e){var i=t.get("label.normal.position"),o=t.get("orient"),r=n(t,e);null==i||"auto"===i?i="horizontal"===o?r.y+r.height/2<e.getHeight()/2?"-":"+":r.x+r.width/2<e.getWidth()/2?"+":"-":isNaN(i)&&(i={horizontal:{top:"-",bottom:"+"},vertical:{left:"-",right:"+"}}[o][i]);var a={horizontal:"center",vertical:i>=0||"+"===i?"left":"right"},s={horizontal:i>=0||"+"===i?"top":"bottom",vertical:"middle"},l={horizontal:0,vertical:b/2},u="vertical"===o?r.height:r.width,h=t.getModel("controlStyle"),c=h.get("show"),d=c?h.get("itemSize"):0,f=c?h.get("itemGap"):0,p=d+f,g=t.get("label.normal.rotate")||0;g=g*b/180;var m,v,y,x,_=h.get("position",!0),c=h.get("show",!0),w=c&&h.get("showPlayBtn",!0),S=c&&h.get("showPrevBtn",!0),M=c&&h.get("showNextBtn",!0),T=0,I=u;return"left"===_||"bottom"===_?(w&&(m=[0,0],T+=p),S&&(v=[T,0],T+=p),M&&(y=[I-d,0],I-=p)):(w&&(m=[I-d,0],I-=p),S&&(v=[0,0],T+=p),M&&(y=[I-d,0],I-=p)),x=[T,I],t.get("inverse")&&x.reverse(),{viewRect:r,mainLength:u,orient:o,rotation:l[o],labelRotation:g,labelPosOpt:i,labelAlign:a[o],labelBaseline:s[o],playPosition:m,prevBtnPosition:v,nextBtnPosition:y,axisExtent:x,controlSize:d,controlGap:f}},_position:function(t,e){function i(t){var e=t.position;t.origin=[c[0][0]-e[0],c[1][0]-e[1]]}function n(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function o(t,e,i,n,o){t[n]+=i[n][o]-e[n][o]}var r=this._mainGroup,a=this._labelGroup,s=t.viewRect;if("vertical"===t.orient){var l=g.create(),u=s.x,h=s.y+s.height;g.translate(l,l,[-u,-h]),g.rotate(l,l,-b/2),g.translate(l,l,[u,h]),s=s.clone(),s.applyTransform(l)}var c=n(s),d=n(r.getBoundingRect()),f=n(a.getBoundingRect()),p=r.position,m=a.position;m[0]=p[0]=c[0][0];var v=t.labelPosOpt;if(isNaN(v)){var y="+"===v?0:1;o(p,d,c,1,y),o(m,f,c,1,1-y)}else{var y=v>=0?0:1;o(p,d,c,1,y),m[1]=p[1]+v}r.attr("position",p),a.attr("position",m),r.rotation=a.rotation=t.rotation,i(r),i(a)},_createAxis:function(t,e){var i=e.getData(),n=e.get("axisType"),o=f.createScaleByModel(e,n),r=i.getDataExtent("value");o.setExtent(r[0],r[1]),this._customizeScale(o,i),o.niceTicks();var a=new c("value",o,t.axisExtent,n);return a.model=e,a},_customizeScale:function(t,e){t.getTicks=function(){return e.mapArray(["value"],function(t){return t})},t.getTicksLabels=function(){return s.map(this.getTicks(),t.getLabel,t)}},_createGroup:function(t){var e=this["_"+t]=new l.Group;return this.group.add(e),e},_renderAxisLine:function(t,e,i,n){var o=i.getExtent();n.get("lineStyle.show")&&e.add(new l.Line({shape:{x1:o[0],y1:0,x2:o[1],y2:0},style:s.extend({lineCap:"round"},n.getModel("lineStyle").getLineStyle()),silent:!0,z2:1}))},_renderAxisTick:function(t,e,i,n){var o=n.getData(),a=i.scale.getTicks();_(a,function(t,a){var s=i.dataToCoord(t),u=o.getItemModel(a),h=u.getModel("itemStyle.normal"),c=u.getModel("itemStyle.emphasis"),d={position:[s,0],onclick:x(this._changeTimeline,this,a)},f=r(u,h,e,d);l.setHoverStyle(f,c.getItemStyle()),u.get("tooltip")?(f.dataIndex=a,f.dataModel=n):f.dataIndex=f.dataModel=null},this)},_renderAxisLabel:function(t,e,i,n){var o=n.getModel("label.normal");if(o.get("show")){var r=n.getData(),a=i.scale.getTicks(),s=f.getFormattedLabels(i,o.get("formatter")),u=i.getLabelInterval();_(a,function(n,o){if(!i.isLabelIgnored(o,u)){var a=r.getItemModel(o),h=a.getModel("label.normal.textStyle"),c=a.getModel("label.emphasis.textStyle"),d=i.dataToCoord(n),f=new l.Text({style:{text:s[o],textAlign:t.labelAlign,textVerticalAlign:t.labelBaseline,textFont:h.getFont(),fill:h.getTextColor()},position:[d,0],rotation:t.labelRotation-t.rotation,onclick:x(this._changeTimeline,this,o),silent:!1});e.add(f),l.setHoverStyle(f,c.getItemStyle())}},this)}},_renderControl:function(t,e,i,n){function r(t,i,r,d){if(t){var f={position:t,origin:[a/2,0],rotation:d?-s:0,rectHover:!0,style:u,onclick:r},p=o(n,i,c,f);e.add(p),l.setHoverStyle(p,h)}}var a=t.controlSize,s=t.rotation,u=n.getModel("controlStyle.normal").getItemStyle(),h=n.getModel("controlStyle.emphasis").getItemStyle(),c=[0,-a/2,a,a],d=n.getPlayState(),f=n.get("inverse",!0);r(t.nextBtnPosition,"controlStyle.nextIcon",x(this._changeTimeline,this,f?"-":"+")),r(t.prevBtnPosition,"controlStyle.prevIcon",x(this._changeTimeline,this,f?"+":"-")),r(t.playPosition,"controlStyle."+(d?"stopIcon":"playIcon"),x(this._handlePlayClick,this,!d),!0)},_renderCurrentPointer:function(t,e,i,n){var o=n.getData(),s=n.getCurrentIndex(),l=o.getItemModel(s).getModel("checkpointStyle"),u=this,h={onCreate:function(t){t.draggable=!0,t.drift=x(u._handlePointerDrag,u),t.ondragend=x(u._handlePointerDragend,u),a(t,s,i,n,!0)},onUpdate:function(t){a(t,s,i,n)}};this._currentPointer=r(l,l,this._mainGroup,{},this._currentPointer,h)},_handlePlayClick:function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},_handlePointerDrag:function(t,e,i){this._clearTimer(),this._pointerChangeTimeline([i.offsetX,i.offsetY])},_handlePointerDragend:function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},_pointerChangeTimeline:function(t,e){var i=this._toAxisCoord(t)[0],n=this._axis,o=m.asc(n.getExtent().slice());i>o[1]&&(i=o[1]),i<o[0]&&(i=o[0]),this._currentPointer.position[0]=i,this._currentPointer.dirty();var r=this._findNearestTick(i),a=this.model;(e||r!==a.getCurrentIndex()&&a.get("realtime"))&&this._changeTimeline(r)},_doPlayStop:function(){function t(){var t=this.model;this._changeTimeline(t.getCurrentIndex()+(t.get("rewind",!0)?-1:1))}this._clearTimer(),this.model.getPlayState()&&(this._timer=setTimeout(x(t,this),this.model.get("playInterval")))},_toAxisCoord:function(t){var e=this._mainGroup.getLocalTransform();return l.applyTransform(t,e,!0)},_findNearestTick:function(t){var e,i=this.model.getData(),n=1/0,o=this._axis;return i.each(["value"],function(i,r){var a=o.dataToCoord(i),s=Math.abs(a-t);s<n&&(n=s,e=r)}),e},_clearTimer:function(){this._timer&&(clearTimeout(this._timer),this._timer=null)},_changeTimeline:function(t){var e=this.model.getCurrentIndex();"+"===t?t=e+1:"-"===t&&(t=e-1),this.api.dispatchAction({type:"timelineChange",currentIndex:t,from:this.uid})}})},function(t,e,i){var n=i(1),o=i(42),r=i(22),a=function(t,e,i,n){o.call(this,t,e,i),this.type=n||"value",this._autoLabelInterval,this.model=null};a.prototype={constructor:a,getLabelInterval:function(){var t=this.model,e=t.getModel("label.normal"),i=e.get("interval");if(null!=i&&"auto"!=i)return i;var i=this._autoLabelInterval;return i||(i=this._autoLabelInterval=r.getAxisLabelInterval(n.map(this.scale.getTicks(),this.dataToCoord,this),r.getFormattedLabels(this,e.get("formatter")),e.getModel("textStyle").getFont(),"horizontal"===t.get("orient"))),i},isLabelIgnored:function(t){if("category"===this.type){var e=this.getLabelInterval();return"function"==typeof e&&!e(t,this.scale.getLabel(t))||t%(e+1)}}},n.inherits(a,o),t.exports=a},function(t,e,i){var n=i(12),o=i(14),r=i(1),a=i(7),s=n.extend({type:"timeline",layoutMode:"box",defaultOption:{zlevel:0,z:4,show:!0,axisType:"time",realtime:!0,left:"20%",top:null,right:"20%",bottom:0,width:null,height:40,padding:5,controlPosition:"left",autoPlay:!1,rewind:!1,loop:!0,playInterval:2e3,currentIndex:0,itemStyle:{normal:{},emphasis:{}},label:{normal:{textStyle:{color:"#000"}},emphasis:{}},data:[]},init:function(t,e,i){this._data,this._names,this.mergeDefaultAndTheme(t,i),this._initData()},mergeOption:function(t){s.superApply(this,"mergeOption",arguments),this._initData()},setCurrentIndex:function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(t>=e&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},getCurrentIndex:function(){return this.option.currentIndex},isIndexMax:function(){return this.getCurrentIndex()>=this._data.count()-1},setPlayState:function(t){this.option.autoPlay=!!t},getPlayState:function(){return!!this.option.autoPlay},_initData:function(){var t=this.option,e=t.data||[],i=t.axisType,n=this._names=[];if("category"===i){var s=[];r.each(e,function(t,e){var i,o=a.getDataItemValue(t);r.isObject(t)?(i=r.clone(t),i.value=e):i=e,s.push(i),r.isString(o)||null!=o&&!isNaN(o)||(o=""),n.push(o+"")}),e=s}var l={category:"ordinal",time:"time"}[i]||"number",u=this._data=new o([{name:"value",type:l}],this);u.initData(e,n)},getData:function(){return this._data},getCategories:function(){if("category"===this.get("axisType"))return this._names.slice()}});t.exports=s},function(t,e,i){var n=i(57);t.exports=n.extend({type:"timeline"})},function(t,e,i){function n(t){var e=t.type,i={number:"value",time:"time"};if(i[e]&&(t.axisType=i[e],delete t.type),o(t),r(t,"controlPosition")){var n=t.controlStyle||(t.controlStyle={});r(n,"position")||(n.position=t.controlPosition),"none"!==n.position||r(n,"show")||(n.show=!1,delete n.position),delete t.controlPosition}a.each(t.data||[],function(t){a.isObject(t)&&!a.isArray(t)&&(!r(t,"value")&&r(t,"name")&&(t.value=t.name),o(t))})}function o(t){var e=t.itemStyle||(t.itemStyle={}),i=e.emphasis||(e.emphasis={}),n=t.label||t.label||{},o=n.normal||(n.normal={}),s={ +normal:1,emphasis:1};a.each(n,function(t,e){s[e]||r(o,e)||(o[e]=t)}),i.label&&!r(n,"emphasis")&&(n.emphasis=i.label,delete i.label)}function r(t,e){return t.hasOwnProperty(e)}var a=i(1);t.exports=function(t){var e=t&&t.timeline;a.isArray(e)||(e=e?[e]:[]),a.each(e,function(t){t&&n(t)})}},function(t,e,i){var n=i(2),o=i(1);n.registerAction({type:"timelineChange",event:"timelineChanged",update:"prepareAndUpdate"},function(t,e){var i=e.getComponent("timeline");return i&&null!=t.currentIndex&&(i.setCurrentIndex(t.currentIndex),!i.get("loop",!0)&&i.isIndexMax()&&i.setPlayState(!1)),e.resetOption("timeline"),o.defaults({currentIndex:i.option.currentIndex},t)}),n.registerAction({type:"timelinePlayChange",event:"timelinePlayChanged",update:"update"},function(t,e){var i=e.getComponent("timeline");i&&null!=t.playState&&i.setPlayState(t.playState)})},function(t,e,i){i(12).registerSubTypeDefaulter("timeline",function(){return"slider"})},function(t,e,i){"use strict";function n(t,e,i){this.model=t,this.ecModel=e,this.api=i,this._brushType,this._brushMode}var o=i(25),r=i(1);n.defaultOption={show:!0,type:["rect","polygon","lineX","lineY","keep","clear"],icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}};var a=n.prototype;a.render=a.updateView=a.updateLayout=function(t,e,i){var n,o,a;e.eachComponent({mainType:"brush"},function(t){n=t.brushType,o=t.brushOption.brushMode||"single",a|=t.areas.length}),this._brushType=n,this._brushMode=o,r.each(t.get("type",!0),function(e){t.setIconStatus(e,("keep"===e?"multiple"===o:"clear"===e?a:e===n)?"emphasis":"normal")})},a.getIcons=function(){var t=this.model,e=t.get("icon",!0),i={};return r.each(t.get("type",!0),function(t){e[t]&&(i[t]=e[t])}),i},a.onclick=function(t,e,i){var e=this.api,n=this._brushType,o=this._brushMode;"clear"===i?e.dispatchAction({type:"brush",areas:[]}):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===i?n:n!==i&&i,brushMode:"keep"===i?"multiple"===o?"single":"multiple":o}})},o.register("brush",n),t.exports=n},function(t,e,i){i(354),i(355)},function(t,e,i){function n(t,e,i){var n=t.targetVisuals[e].color;if(!n)return i.slice();var o=n.option.visual.length;if(o<=1||i[0]===i[1])return i.slice();for(var r=(i[1]-i[0])/(o-1),a=i[0],s=[],l=0;l<o&&a<i[1];l++)s.push(a),a+=r;return s.push(i[1]),s}function o(t,e,i,o){var r=n(t,e,i);a.each(r,function(t){for(var i={value:t,valueState:e},n=0,r=0;r<o.length;r++){if(n|="inRange"===o[r].valueState,t<o[r].value)return void o.splice(r,0,i);n&&(o[r].valueState="inRange")}o.push(i)})}var r=i(231),a=i(1),s=i(4),l=[20,140],u=r.extend({type:"visualMap.continuous",defaultOption:{align:"auto",calculable:!1,range:null,realtime:!0,itemHeight:null,itemWidth:null,hoverLink:!0,hoverLinkDataSize:null,hoverLinkOnHandle:!0},optionUpdated:function(t,e){u.superApply(this,"optionUpdated",arguments),this.resetTargetSeries(),this.resetExtent(),this.resetVisual(function(t){t.mappingMethod="linear",t.dataExtent=this.getExtent()}),this._resetRange()},resetItemSize:function(){u.superApply(this,"resetItemSize",arguments);var t=this.itemSize;"horizontal"===this._orient&&t.reverse(),(null==t[0]||isNaN(t[0]))&&(t[0]=l[0]),(null==t[1]||isNaN(t[1]))&&(t[1]=l[1])},_resetRange:function(){var t=this.getExtent(),e=this.option.range;!e||e.auto?(t.auto=1,this.option.range=t):a.isArray(e)&&(e[0]>e[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},completeVisualOption:function(){r.prototype.completeVisualOption.apply(this,arguments),a.each(this.stateList,function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=0)},this)},setSelected:function(t){this.option.range=t.slice(),this._resetRange()},getSelected:function(){var t=this.getExtent(),e=s.asc((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]<t[0]&&(e[0]=t[0]),e[1]<t[0]&&(e[1]=t[0]),e},getValueState:function(t){var e=this.option.range,i=this.getExtent();return(e[0]<=i[0]||e[0]<=t)&&(e[1]>=i[1]||t<=e[1])?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){t[0]<=e&&e<=t[1]&&n.push(i)},!0,this),e.push({seriesId:i.id,dataIndex:n})},this),e},getStops:function(t,e){var i=[];return o(this,"outOfRange",this.getExtent(),i),o(this,"inRange",this.option.range.slice(),i),a.each(i,function(t){t.color=e(this,t.value,t.valueState)},this),i}});t.exports=u},function(t,e,i){function n(t,e,i,n){return new u.Polygon({shape:{points:t},draggable:!!i,cursor:e,drift:i,ondragend:n})}function o(t,e){return 0===t?[[0,0],[e,0],[e,-e]]:[[0,0],[e,0],[e,e]]}function r(t,e,i,n){return t?[[0,-y(e,x(i,0))],[b,0],[0,y(e,x(n-i,0))]]:[[0,0],[5,-5],[5,5]]}function a(t,e,i){var n=_/2,o=t.get("hoverLinkDataSize");return o&&(n=m(o,e,i,!0)/2),n}function s(t){return!t.get("realtime")&&t.get("hoverLinkOnHandle")}var l=i(232),u=i(3),h=i(1),c=i(4),d=i(80),f=i(87),p=i(233),g=i(7),m=c.linearMap,v=h.each,y=Math.min,x=Math.max,_=12,b=6,w=l.extend({type:"visualMap.continuous",init:function(){w.superApply(this,"init",arguments),this._shapes={},this._dataInterval=[],this._handleEnds=[],this._orient,this._useHandle,this._hoverLinkDataIndices=[],this._dragging,this._hovering},doRender:function(t,e,i,n){n&&"selectDataRange"===n.type&&n.from===this.uid||this._buildView()},_buildView:function(){this.group.removeAll();var t=this.visualMapModel,e=this.group;this._orient=t.get("orient"),this._useHandle=t.get("calculable"),this._resetInterval(),this._renderBar(e);var i=t.get("text");this._renderEndsText(e,i,0),this._renderEndsText(e,i,1),this._updateView(!0),this.renderBackground(e),this._updateView(),this._enableHoverLinkToSeries(),this._enableHoverLinkFromSeries(),this.positionGroup(e)},_renderEndsText:function(t,e,i){if(e){var n=e[1-i];n=null!=n?n+"":"";var o=this.visualMapModel,r=o.get("textGap"),a=o.itemSize,s=this._shapes.barGroup,l=this._applyTransform([a[0]/2,0===i?-r:a[1]+r],s),h=this._applyTransform(0===i?"bottom":"top",s),c=this._orient,d=this.visualMapModel.textStyleModel;this.group.add(new u.Text({style:{x:l[0],y:l[1],textVerticalAlign:"horizontal"===c?"middle":h,textAlign:"horizontal"===c?h:"center",text:n,textFont:d.getFont(),fill:d.getTextColor()}}))}},_renderBar:function(t){var e=this.visualMapModel,i=this._shapes,o=e.itemSize,r=this._orient,a=this._useHandle,s=p.getItemAlign(e,this.api,o),l=i.barGroup=this._createBarGroup(s);l.add(i.outOfRange=n()),l.add(i.inRange=n(null,a?"move":null,h.bind(this._dragHandle,this,"all",!1),h.bind(this._dragHandle,this,"all",!0)));var u=e.textStyleModel.getTextRect("国"),c=x(u.width,u.height);a&&(i.handleThumbs=[],i.handleLabels=[],i.handleLabelPoints=[],this._createHandle(l,0,o,c,r,s),this._createHandle(l,1,o,c,r,s)),this._createIndicator(l,o,c,r),t.add(l)},_createHandle:function(t,e,i,r,a){var s=h.bind(this._dragHandle,this,e,!1),l=h.bind(this._dragHandle,this,e,!0),c=n(o(e,r),"move",s,l);c.position[0]=i[0],t.add(c);var d=this.visualMapModel.textStyleModel,f=new u.Text({draggable:!0,drift:s,ondragend:l,style:{x:0,y:0,text:"",textFont:d.getFont(),fill:d.getTextColor()}});this.group.add(f);var p=["horizontal"===a?r/2:1.5*r,"horizontal"===a?0===e?-(1.5*r):1.5*r:0===e?-r/2:r/2],g=this._shapes;g.handleThumbs[e]=c,g.handleLabelPoints[e]=p,g.handleLabels[e]=f},_createIndicator:function(t,e,i,o){var r=n([[0,0]],"move");r.position[0]=e[0],r.attr({invisible:!0,silent:!0}),t.add(r);var a=this.visualMapModel.textStyleModel,s=new u.Text({silent:!0,invisible:!0,style:{x:0,y:0,text:"",textFont:a.getFont(),fill:a.getTextColor()}});this.group.add(s);var l=["horizontal"===o?i/2:b+3,0],h=this._shapes;h.indicator=r,h.indicatorLabel=s,h.indicatorLabelPoint=l},_dragHandle:function(t,e,i,n){if(this._useHandle){if(this._dragging=!e,!e){var o=this._applyTransform([i,n],this._shapes.barGroup,!0);this._updateInterval(t,o[1]),this._updateView()}e===!this.visualMapModel.get("realtime")&&this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:this._dataInterval.slice()}),e?!this._hovering&&this._clearHoverLinkToSeries():s(this.visualMapModel)&&this._doHoverLinkToSeries(this._handleEnds[t],!1)}},_resetInterval:function(){var t=this.visualMapModel,e=this._dataInterval=t.getSelected(),i=t.getExtent(),n=[0,t.itemSize[1]];this._handleEnds=[m(e[0],i,n,!0),m(e[1],i,n,!0)]},_updateInterval:function(t,e){e=e||0;var i=this.visualMapModel,n=this._handleEnds;d(e,n,[0,i.itemSize[1]],"all"===t?"rigid":"push",t);var o=i.getExtent(),r=[0,i.itemSize[1]];this._dataInterval=[m(n[0],r,o,!0),m(n[1],r,o,!0)]},_updateView:function(t){var e=this.visualMapModel,i=e.getExtent(),n=this._shapes,o=[0,e.itemSize[1]],r=t?o:this._handleEnds,a=this._createBarVisual(this._dataInterval,i,r,"inRange"),s=this._createBarVisual(i,i,o,"outOfRange");n.inRange.setStyle({fill:a.barColor,opacity:a.opacity}).setShape("points",a.barPoints),n.outOfRange.setStyle({fill:s.barColor,opacity:s.opacity}).setShape("points",s.barPoints),this._updateHandle(r,a)},_createBarVisual:function(t,e,i,n){var o={forceState:n,convertOpacityToAlpha:!0},r=this._makeColorGradient(t,o),a=[this.getControllerVisual(t[0],"symbolSize",o),this.getControllerVisual(t[1],"symbolSize",o)],s=this._createBarPoints(i,a);return{barColor:new f(0,0,0,1,r),barPoints:s,handlesColor:[r[0].color,r[r.length-1].color]}},_makeColorGradient:function(t,e){var i=100,n=[],o=(t[1]-t[0])/i;n.push({color:this.getControllerVisual(t[0],"color",e),offset:0});for(var r=1;r<i;r++){var a=t[0]+o*r;if(a>t[1])break;n.push({color:this.getControllerVisual(a,"color",e),offset:r/i})}return n.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),n},_createBarPoints:function(t,e){var i=this.visualMapModel.itemSize;return[[i[0]-e[0],t[0]],[i[0],t[0]],[i[0],t[1]],[i[0]-e[1],t[1]]]},_createBarGroup:function(t){var e=this._orient,i=this.visualMapModel.get("inverse");return new u.Group("horizontal"!==e||i?"horizontal"===e&&i?{scale:"bottom"===t?[-1,1]:[1,1],rotation:-Math.PI/2}:"vertical"!==e||i?{scale:"left"===t?[1,1]:[-1,1]}:{scale:"left"===t?[1,-1]:[-1,-1]}:{scale:"bottom"===t?[1,1]:[-1,1],rotation:Math.PI/2})},_updateHandle:function(t,e){if(this._useHandle){var i=this._shapes,n=this.visualMapModel,o=i.handleThumbs,r=i.handleLabels;v([0,1],function(a){var s=o[a];s.setStyle("fill",e.handlesColor[a]),s.position[1]=t[a];var l=u.applyTransform(i.handleLabelPoints[a],u.getTransform(s,this.group));r[a].setStyle({x:l[0],y:l[1],text:n.formatValueText(this._dataInterval[a]),textVerticalAlign:"middle",textAlign:this._applyTransform("horizontal"===this._orient?0===a?"bottom":"top":"left",i.barGroup)})},this)}},_showIndicator:function(t,e,i,n){var o=this.visualMapModel,a=o.getExtent(),s=o.itemSize,l=[0,s[1]],h=m(t,a,l,!0),c=this._shapes,d=c.indicator;if(d){d.position[1]=h,d.attr("invisible",!1),d.setShape("points",r(!!i,n,h,s[1]));var f={convertOpacityToAlpha:!0},p=this.getControllerVisual(t,"color",f);d.setStyle("fill",p);var g=u.applyTransform(c.indicatorLabelPoint,u.getTransform(d,this.group)),v=c.indicatorLabel;v.attr("invisible",!1);var y=this._applyTransform("left",c.barGroup),x=this._orient;v.setStyle({text:(i?i:"")+o.formatValueText(e),textVerticalAlign:"horizontal"===x?y:"middle",textAlign:"horizontal"===x?"center":y,x:g[0],y:g[1]})}},_enableHoverLinkToSeries:function(){var t=this;this._shapes.barGroup.on("mousemove",function(e){if(t._hovering=!0,!t._dragging){var i=t.visualMapModel.itemSize,n=t._applyTransform([e.offsetX,e.offsetY],t._shapes.barGroup,!0,!0);n[1]=y(x(0,n[1]),i[1]),t._doHoverLinkToSeries(n[1],0<=n[0]&&n[0]<=i[0])}}).on("mouseout",function(){t._hovering=!1,!t._dragging&&t._clearHoverLinkToSeries()})},_enableHoverLinkFromSeries:function(){var t=this.api.getZr();this.visualMapModel.option.hoverLink?(t.on("mouseover",this._hoverLinkFromSeriesMouseOver,this),t.on("mouseout",this._hideIndicator,this)):this._clearHoverLinkFromSeries()},_doHoverLinkToSeries:function(t,e){var i=this.visualMapModel,n=i.itemSize;if(i.option.hoverLink){var o=[0,n[1]],r=i.getExtent();t=y(x(o[0],t),o[1]);var l=a(i,r,o),u=[t-l,t+l],h=m(t,o,r,!0),c=[m(u[0],o,r,!0),m(u[1],o,r,!0)];u[0]<o[0]&&(c[0]=-(1/0)),u[1]>o[1]&&(c[1]=1/0),e&&(c[0]===-(1/0)?this._showIndicator(h,c[1],"< ",l):c[1]===1/0?this._showIndicator(h,c[0],"> ",l):this._showIndicator(h,h,"≈ ",l));var d=this._hoverLinkDataIndices,f=[];(e||s(i))&&(f=this._hoverLinkDataIndices=i.findTargetDataIndices(c));var v=g.compressBatches(d,f);this._dispatchHighDown("downplay",p.convertDataIndex(v[0])),this._dispatchHighDown("highlight",p.convertDataIndex(v[1]))}},_hoverLinkFromSeriesMouseOver:function(t){var e=t.target;if(e&&null!=e.dataIndex){var i=e.dataModel||this.ecModel.getSeriesByIndex(e.seriesIndex),n=i.getData(e.dataType),o=n.getDimension(this.visualMapModel.getDataDimension(n)),r=n.get(o,e.dataIndex,!0);isNaN(r)||this._showIndicator(r,r)}},_hideIndicator:function(){var t=this._shapes;t.indicator&&t.indicator.attr("invisible",!0),t.indicatorLabel&&t.indicatorLabel.attr("invisible",!0)},_clearHoverLinkToSeries:function(){this._hideIndicator();var t=this._hoverLinkDataIndices;this._dispatchHighDown("downplay",p.convertDataIndex(t)),t.length=0},_clearHoverLinkFromSeries:function(){this._hideIndicator();var t=this.api.getZr();t.off("mouseover",this._hoverLinkFromSeriesMouseOver),t.off("mouseout",this._hideIndicator)},_applyTransform:function(t,e,i,n){var o=u.getTransform(e,n?null:this.group);return u[h.isArray(t)?"applyTransform":"transformDirection"](t,o,i)},_dispatchHighDown:function(t,e){e&&e.length&&this.api.dispatchAction({type:t,batch:e})},dispose:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()},remove:function(){this._clearHoverLinkFromSeries(),this._clearHoverLinkToSeries()}});t.exports=w},function(t,e,i){function n(t,e){var i=t.inverse;("vertical"===t.orient?!i:i)&&e.reverse()}function o(t){function e(t,i,n){return n=n||0,t.interval[n]<i.interval[n]||t.interval[n]===i.interval[n]&&(+t.close[n]>i.close[n]||e(t,i,1))}t.sort(function(t,i){return e(t,i)?-1:1});for(var i=-(1/0),n=0;n<t.length;n++)for(var o=t[n].interval,r=t[n].close,a=0;a<2;a++)o[a]<i&&(o[a]=i,r[a]=1-a),i=o[a]}var r=i(231),a=i(1),s=i(71),l=r.extend({type:"visualMap.piecewise",defaultOption:{selected:null,minOpen:!1,maxOpen:!1,align:"auto",itemWidth:20,itemHeight:14,itemSymbol:"roundRect",pieceList:null,categories:null,splitNumber:5,selectedMode:"multiple",itemGap:10,hoverLink:!0},optionUpdated:function(t,e){l.superApply(this,"optionUpdated",arguments),this._pieceList=[],this.resetTargetSeries(),this.resetExtent();var i=this._mode=this._determineMode();u[this._mode].call(this),this._resetSelected(t,e);var n=this.option.categories;this.resetVisual(function(t,e){"categories"===i?(t.mappingMethod="category",t.categories=a.clone(n)):(t.dataExtent=this.getExtent(),t.mappingMethod="piecewise",t.pieceList=a.map(this._pieceList,function(t){var t=a.clone(t);return"inRange"!==e&&(t.visual=null),t}))})},_resetSelected:function(t,e){var i=this.option,n=this._pieceList,o=(e?i:t).selected||{};if(i.selected=o,a.each(n,function(t,e){var i=this.getSelectedMapKey(t);o.hasOwnProperty(i)||(o[i]=!0)},this),"single"===i.selectedMode){var r=!1;a.each(n,function(t,e){var i=this.getSelectedMapKey(t);o[i]&&(r?o[i]=!1:r=!0)},this)}},getSelectedMapKey:function(t){return"categories"===this._mode?t.value+"":t.index+""},getPieceList:function(){return this._pieceList},_determineMode:function(){var t=this.option;return t.pieces&&t.pieces.length>0?"pieces":this.option.categories?"categories":"splitNumber"},setSelected:function(t){this.option.selected=a.clone(t)},getValueState:function(t){var e=s.findPieceIndex(t,this._pieceList);return null!=e&&this.option.selected[this.getSelectedMapKey(this._pieceList[e])]?"inRange":"outOfRange"},findTargetDataIndices:function(t){var e=[];return this.eachTargetSeries(function(i){var n=[],o=i.getData();o.each(this.getDataDimension(o),function(e,i){var o=s.findPieceIndex(e,this._pieceList);o===t&&n.push(i)},!0,this),e.push({seriesId:i.id,dataIndex:n})},this),e},getRepresentValue:function(t){var e;if(this.isCategory())e=t.value;else if(null!=t.value)e=t.value;else{var i=t.interval||[];e=(i[0]+i[1])/2}return e},getStops:function(t,e){function i(t){n.push(t),t.color=e(o,o.getRepresentValue(t),t.valueState)}var n=[],o=this,r=-(1/0);return a.each(this._pieceList,function(t){var e=t.interval;e&&(e[0]>r&&i({interval:[r,e[0]],valueState:"outOfRange"}),i({interval:e.slice(),valueState:this.getValueState((e[0]+e[1])/2)}),r=e[1])},this),n}}),u={splitNumber:function(){var t=this.option,e=this._pieceList,i=t.precision,n=this.getExtent(),r=t.splitNumber;r=Math.max(parseInt(r,10),1),t.splitNumber=r;for(var s=(n[1]-n[0])/r;+s.toFixed(i)!==s&&i<5;)i++;t.precision=i,s=+s.toFixed(i);var l=0;t.minOpen&&e.push({index:l++,interval:[-(1/0),n[0]],close:[0,0]});for(var u=n[0],h=l+r;l<h;u+=s){var c=l===r-1?n[1]:u+s;e.push({index:l++,interval:[u,c],close:[1,1]})}t.maxOpen&&e.push({index:l++,interval:[n[1],1/0],close:[0,0]}),o(e),a.each(e,function(t){t.text=this.formatValueText(t.interval)},this)},categories:function(){var t=this.option;a.each(t.categories,function(t){this._pieceList.push({text:this.formatValueText(t,!0),value:t})},this),n(t,this._pieceList)},pieces:function(){var t=this.option,e=this._pieceList;a.each(t.pieces,function(t,i){a.isObject(t)||(t={value:t});var n={text:"",index:i};if(null!=t.label&&(n.text=t.label),t.hasOwnProperty("value")){var o=n.value=t.value;n.interval=[o,o],n.close=[1,1]}else{for(var r=n.interval=[],l=n.close=[0,0],u=[1,0,1],h=[-(1/0),1/0],c=[],d=0;d<2;d++){for(var f=[["gte","gt","min"],["lte","lt","max"]][d],p=0;p<3&&null==r[d];p++)r[d]=t[f[p]],l[d]=u[p],c[d]=2===p;null==r[d]&&(r[d]=h[d])}c[0]&&r[1]===1/0&&(l[0]=0),c[1]&&r[0]===-(1/0)&&(l[1]=0),r[0]===r[1]&&l[0]&&l[1]&&(n.value=r[0])}n.visual=s.retrieveVisuals(t),e.push(n)},this),n(t,e),o(e),a.each(e,function(t){var e=t.close,i=[["<","≤"][e[1]],[">","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,i)},this)}};t.exports=l},function(t,e,i){var n=i(232),o=i(1),r=i(3),a=i(26),s=i(13),l=i(233),u=n.extend({type:"visualMap.piecewise",doRender:function(){function t(t){var a=t.piece,s=new r.Group;s.onclick=o.bind(this._onItemClick,this,a),this._enableHoverLink(s,t.indexInModelPieceList);var d=i.getRepresentValue(a);if(this._createItemSymbol(s,d,[0,0,c[0],c[1]]),f){var p=this.visualMapModel.getValueState(d);s.add(new r.Text({style:{x:"right"===h?-n:c[0]+n,y:c[1]/2,text:a.text,textVerticalAlign:"middle",textAlign:h,textFont:l,fill:u,opacity:"outOfRange"===p?.5:1}}))}e.add(s)}var e=this.group;e.removeAll();var i=this.visualMapModel,n=i.get("textGap"),a=i.textStyleModel,l=a.getFont(),u=a.getTextColor(),h=this._getItemAlign(),c=i.itemSize,d=this._getViewData(),f=!d.endsText,p=!f;p&&this._renderEndsText(e,d.endsText[0],c),o.each(d.viewPieceList,t,this),p&&this._renderEndsText(e,d.endsText[1],c),s.box(i.get("orient"),e,i.get("itemGap")),this.renderBackground(e),this.positionGroup(e)},_enableHoverLink:function(t,e){function i(t){var i=this.visualMapModel;i.option.hoverLink&&this.api.dispatchAction({type:t,batch:l.convertDataIndex(i.findTargetDataIndices(e))})}t.on("mouseover",o.bind(i,this,"highlight")).on("mouseout",o.bind(i,this,"downplay"))},_getItemAlign:function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return l.getItemAlign(t,this.api,t.itemSize);var i=e.align;return i&&"auto"!==i||(i="left"),i},_renderEndsText:function(t,e,i){if(e){var n=new r.Group,o=this.visualMapModel.textStyleModel;n.add(new r.Text({style:{x:i[0]/2,y:i[1]/2,textVerticalAlign:"middle",textAlign:"center",text:e,textFont:o.getFont(),fill:o.getTextColor()}})),t.add(n)}},_getViewData:function(){var t=this.visualMapModel,e=o.map(t.getPieceList(),function(t,e){return{piece:t,indexInModelPieceList:e}}),i=t.get("text"),n=t.get("orient"),r=t.get("inverse");return("horizontal"===n?r:!r)?e.reverse():i&&(i=i.slice().reverse()),{viewPieceList:e,endsText:i}},_createItemSymbol:function(t,e,i){t.add(a.createSymbol(this.getControllerVisual(e,"symbol"),i[0],i[1],i[2],i[3],this.getControllerVisual(e,"color")))},_onItemClick:function(t){var e=this.visualMapModel,i=e.option,n=o.clone(i.selected),r=e.getSelectedMapKey(t);"single"===i.selectedMode?(n[r]=!0,o.each(n,function(t,e){n[e]=e===r})):n[r]=!n[r],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:n})}});t.exports=u},function(t,e,i){i(2).registerPreprocessor(i(234)),i(235),i(236),i(350),i(351),i(237)},function(t,e,i){i(2).registerPreprocessor(i(234)),i(235),i(236),i(352),i(353),i(237)},function(t,e,i){function n(t,e,i,n,o){l.call(this,t),this.map=e,this._nameCoordMap={},this.loadGeoJson(i,n,o)}function o(t,e,i,n){var o=i.geoModel,r=i.seriesModel,a=o?o.coordinateSystem:r?r.coordinateSystem||(r.getReferringComponents("geo")[0]||{}).coordinateSystem:null;return a===this?a[t](n):null}var r=i(361),a=i(1),s=i(8),l=i(238),u=[i(359),i(360),i(358)];n.prototype={constructor:n,type:"geo",dimensions:["lng","lat"],containCoord:function(t){for(var e=this.regions,i=0;i<e.length;i++)if(e[i].contain(t))return!0;return!1},loadGeoJson:function(t,e,i){try{this.regions=t?r(t):[]}catch(n){throw"Invalid geoJson format\n"+n}e=e||{},i=i||{};for(var o=this.regions,s={},l=0;l<o.length;l++){var h=o[l].name;h=i[h]||h,o[l].name=h,s[h]=o[l],this.addGeoCoord(h,o[l].center);var c=e[h];c&&o[l].transformTo(c.left,c.top,c.width,c.height)}this._regionsMap=s,this._rect=null,a.each(u,function(t){t(this)},this)},transformTo:function(t,e,i,n){var o=this.getBoundingRect();o=o.clone(),o.y=-o.y-o.height;var r=this._viewTransform;r.transform=o.calculateTransform(new s(t,e,i,n)),r.decomposeTransform();var a=r.scale;a[1]=-a[1],r.updateTransform(),this._updateTransform()},getRegion:function(t){return this._regionsMap[t]},getRegionByCoord:function(t){for(var e=this.regions,i=0;i<e.length;i++)if(e[i].contain(t))return e[i]},addGeoCoord:function(t,e){this._nameCoordMap[t]=e},getGeoCoord:function(t){return this._nameCoordMap[t]},getBoundingRect:function(){if(this._rect)return this._rect;for(var t,e=this.regions,i=0;i<e.length;i++){var n=e[i].getBoundingRect();t=t||n.clone(),t.union(n)}return this._rect=t||new s(0,0,0,0)},dataToPoints:function(t){var e=[];return t.mapArray(["lng","lat"],function(t,i){return e[0]=t,e[1]=i,this.dataToPoint(e)},this)},dataToPoint:function(t){if("string"==typeof t&&(t=this.getGeoCoord(t)),t)return l.prototype.dataToPoint.call(this,t)},convertToPixel:a.curry(o,"dataToPoint"),convertFromPixel:a.curry(o,"pointToData")},a.mixin(n,l),t.exports=n},function(t,e,i){"use strict";var n=i(7),o=i(12),r=i(10),a=i(1),s=i(66),l=i(172),u=o.extend({type:"geo",coordinateSystem:null,layoutMode:"box",init:function(t){o.prototype.init.apply(this,arguments),n.defaultEmphasis(t.label,["position","show","textStyle","distance","formatter"])},optionUpdated:function(){var t=this.option,e=this;t.regions=l.getFilledRegions(t.regions,t.map),this._optionModelMap=a.reduce(t.regions||[],function(t,i){return i.name&&(t[i.name]=new r(i,e)),t},{}),this.updateSelectedMap(t.regions)},defaultOption:{zlevel:0,z:0,show:!0,left:"center",top:"center",aspectScale:.75,silent:!1,map:"",center:null,zoom:1,scaleLimit:null,label:{normal:{show:!1,textStyle:{color:"#000"}},emphasis:{show:!0,textStyle:{color:"rgb(100,0,0)"}}},itemStyle:{normal:{borderWidth:.5,borderColor:"#444",color:"#eee"},emphasis:{color:"rgba(255,215,0,0.8)"}},regions:[]},getRegionModel:function(t){return this._optionModelMap[t]},getFormattedLabel:function(t,e){var i=this.get("label."+e+".formatter"),n={name:t};return"function"==typeof i?(n.status=e,i(n)):"string"==typeof i?i.replace("{a}",n.seriesName):void 0},setZoom:function(t){this.option.zoom=t},setCenter:function(t){this.option.center=t}});a.mixin(u,s),t.exports=u},function(t,e,i){var n=i(1),o={Russia:[100,60],"United States of America":[-99,38]};t.exports=function(t){n.each(t.regions,function(t){var e=o[t.name];if(e){var i=t.center;i[0]=e[0],i[1]=e[1]}})}},function(t,e,i){for(var n=i(239),o=[126,25],r=[[[0,3.5],[7,11.2],[15,11.9],[30,7],[42,.7],[52,.7],[56,7.7],[59,.7],[64,.7],[64,0],[5,0],[0,3.5]],[[13,16.1],[19,14.7],[16,21.7],[11,23.1],[13,16.1]],[[12,32.2],[14,38.5],[15,38.5],[13,32.2],[12,32.2]],[[16,47.6],[12,53.2],[13,53.2],[18,47.6],[16,47.6]],[[6,64.4],[8,70],[9,70],[8,64.4],[6,64.4]],[[23,82.6],[29,79.8],[30,79.8],[25,82.6],[23,82.6]],[[37,70.7],[43,62.3],[44,62.3],[39,70.7],[37,70.7]],[[48,51.1],[51,45.5],[53,45.5],[50,51.1],[48,51.1]],[[51,35],[51,28.7],[53,28.7],[53,35],[51,35]],[[52,22.4],[55,17.5],[56,17.5],[53,22.4],[52,22.4]],[[58,12.6],[62,7],[63,7],[60,12.6],[58,12.6]],[[0,3.5],[0,93.1],[64,93.1],[64,0],[63,0],[63,92.4],[1,92.4],[1,3.5],[0,3.5]]],a=0;a<r.length;a++)for(var s=0;s<r[a].length;s++)r[a][s][0]/=10.5,r[a][s][1]/=-14,r[a][s][0]+=o[0],r[a][s][1]+=o[1];t.exports=function(t){"china"===t.map&&t.regions.push(new n("南海诸岛",r,o))}},function(t,e,i){var n=i(1),o={"南海诸岛":[32,80],"广东":[0,-10],"香港":[10,5],"澳门":[-10,10],"天津":[5,5]};t.exports=function(t){n.each(t.regions,function(t){var e=o[t.name];if(e){var i=t.center;i[0]+=e[0]/10.5,i[1]+=-e[1]/14}})}},function(t,e,i){function n(t){if(!t.UTF8Encoding)return t;for(var e=t.features,i=0;i<e.length;i++)for(var n=e[i],r=n.geometry,a=r.coordinates,s=r.encodeOffsets,l=0;l<a.length;l++){var u=a[l];if("Polygon"===r.type)a[l]=o(u,s[l]);else if("MultiPolygon"===r.type)for(var h=0;h<u.length;h++){var c=u[h];u[h]=o(c,s[l][h])}}return t.UTF8Encoding=!1,t}function o(t,e){for(var i=[],n=e[0],o=e[1],r=0;r<t.length;r+=2){var a=t.charCodeAt(r)-64,s=t.charCodeAt(r+1)-64;a=a>>1^-(1&a),s=s>>1^-(1&s),a+=n,s+=o,n=a,o=s,i.push([a/1024,s/1024])}return i}function r(t){for(var e=[],i=0;i<t.length;i++)for(var n=0;n<t[i].length;n++)e.push(t[i][n]);return e}var a=i(1),s=i(239);t.exports=function(t){return n(t),a.map(a.filter(t.features,function(t){return t.geometry&&t.properties}),function(t){var e=t.properties,i=t.geometry,n=i.coordinates;return"MultiPolygon"===i.type&&(n=r(n)),new s(e.name,n,e.cp)})}},function(t,e,i){function n(t,e){return e.type||(e.data?"category":"value")}var o=i(12),r=i(1),a=i(30),s=i(52),l=i(4),u=o.extend({type:"baseParallelAxis",axis:null,activeIntervals:[],getAreaSelectStyle:function(){return a([["fill","color"],["lineWidth","borderWidth"],["stroke","borderColor"],["width","width"],["opacity","opacity"]]).call(this.getModel("areaSelectStyle"))},setActiveIntervals:function(t){var e=this.activeIntervals=r.clone(t);if(e)for(var i=e.length-1;i>=0;i--)l.asc(e[i])},getActiveState:function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t)return"inactive";for(var i=0,n=e.length;i<n;i++)if(e[i][0]<=t&&t<=e[i][1])return"active";return"inactive"}}),h={type:"value",dim:null,areaSelectStyle:{width:20,borderWidth:1,borderColor:"rgba(160,197,232)",color:"rgba(160,197,232)",opacity:.3},realtime:!0,z:10};r.merge(u.prototype,i(51)),s("parallel",u,n,h),t.exports=u},function(t,e,i){function n(t,e,i){this._axesMap={},this._axesLayout={},this.dimensions=t.dimensions,this._rect,this._model=t,this._init(t,e,i)}var o=i(13),r=i(22),a=i(1),s=i(364),l=i(3),u=i(19),h=a.each,c=Math.PI;n.prototype={type:"parallel",constructor:n,_init:function(t,e,i){var n=t.dimensions,o=t.parallelAxisIndex;h(n,function(t,i){var n=o[i],a=e.getComponent("parallelAxis",n),l=this._axesMap[t]=new s(t,r.createScaleByModel(a),[0,0],a.get("type"),n),u="category"===l.type;l.onBand=u&&a.get("boundaryGap"),l.inverse=a.get("inverse"),a.axis=l,l.model=a},this)},update:function(t,e){this._updateAxesFromSeries(this._model,t)},_updateAxesFromSeries:function(t,e){e.eachSeries(function(i){if(t.contains(i,e)){var n=i.getData();h(this.dimensions,function(t){var e=this._axesMap[t];e.scale.unionExtent(n.getDataExtent(t)),r.niceScaleExtent(e,e.model)},this)}},this)},resize:function(t,e){this._rect=o.getLayoutRect(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),this._layoutAxes(t)},getRect:function(){return this._rect},_layoutAxes:function(t){var e=this._rect,i=t.get("layout"),n=this._axesMap,o=this.dimensions,r=[e.width,e.height],a="horizontal"===i?0:1,s=r[a],l=r[1-a],d=[0,l];h(n,function(t){var e=t.inverse?1:0;t.setExtent(d[e],d[1-e])});var f,p=t.get("axisExpandable"),g=t.get("axisExpandWidth"),m=t.get("axisExpandCenter"),v=t.get("axisExpandCount")||0;if(null!=m){var y=Math.max(0,Math.floor(m-(v-1)/2)),x=y+v-1;x>=o.length&&(x=o.length-1,y=Math.max(0,Math.floor(x-v+1))),f=[y,x]}var _=p&&f&&g?function(t,e,i){var n,o=f[1]-f[0],r=(e-g*o)/(i-1-o);return n=t<f[0]?(t-1)*r:t<=f[1]?f[0]*r+(t-f[0])*g:t===i-1?e:f[0]*r+o*g+(t-f[1])*r,{position:n,axisNameAvailableWidth:f[0]<t&&t<f[1]?g:r}}:function(t,e,i){var n=e/(i-1);return{position:n*t,axisNameAvailableWidth:n}};h(o,function(t,n){var r=_(n,s,o.length),a={horizontal:{x:r.position,y:l},vertical:{x:0,y:r.position}},h={horizontal:c/2,vertical:0},d=[a[i].x+e.x,a[i].y+e.y],p=h[i],g=u.create();u.rotate(g,g,p),u.translate(g,g,d),this._axesLayout[t]={position:d,rotation:p,transform:g,axisNameAvailableWidth:r.axisNameAvailableWidth,tickDirection:1,labelDirection:1,axisExpandWindow:f}},this)},getAxis:function(t){return this._axesMap[t]},dataToPoint:function(t,e){return this.axisCoordToPoint(this._axesMap[e].dataToCoord(t),e)},eachActiveState:function(t,e,i){for(var n=this.dimensions,o=this._axesMap,r=this.hasAxisbrushed(),a=0,s=t.count();a<s;a++){var l,u=t.getValues(n,a);if(r){l="active";for(var h=0,c=n.length;h<c;h++){var d=n[h],f=o[d].model.getActiveState(u[h],h);if("inactive"===f){l="inactive";break}}}else l="normal";e.call(i,l,a)}},hasAxisbrushed:function(){for(var t=this.dimensions,e=this._axesMap,i=!1,n=0,o=t.length;n<o;n++)"normal"!==e[t[n]].model.getActiveState()&&(i=!0);return i},axisCoordToPoint:function(t,e){var i=this._axesLayout[e];return l.applyTransform([t,0],i.transform)},getAxisLayout:function(t){return a.clone(this._axesLayout[t])},findClosestAxisDim:function(t){var e,i=1/0;return a.each(this._axesLayout,function(n,o){var r=l.applyTransform(t,n.transform,!0),a=this._axesMap[o].getExtent();if(!(r[0]<a[0]||r[0]>a[1])){var s=Math.abs(r[1]);s<i&&(i=s,e=o)}},this),e}},t.exports=n},function(t,e,i){var n=i(1),o=i(42),r=function(t,e,i,n,r){o.call(this,t,e,i),this.type=n||"value",this.axisIndex=r};r.prototype={constructor:r,model:null},n.inherits(r,o),t.exports=r},function(t,e,i){var n=i(1),o=i(12);i(362),o.extend({type:"parallel",dependencies:["parallelAxis"],coordinateSystem:null,dimensions:null,parallelAxisIndex:null,layoutMode:"box", +defaultOption:{zlevel:0,z:0,left:80,top:60,right:80,bottom:60,layout:"horizontal",axisExpandable:!1,axisExpandCenter:null,axisExpandCount:0,axisExpandWidth:50,parallelAxisDefault:null},init:function(){o.prototype.init.apply(this,arguments),this.mergeOption({})},mergeOption:function(t){var e=this.option;t&&n.merge(e,t,!0),this._initDimensions()},contains:function(t,e){var i=t.get("parallelIndex");return null!=i&&e.getComponent("parallel",i)===this},setAxisExpand:function(t){n.each(["axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth"],function(e){t.hasOwnProperty(e)&&(this.option[e]=t[e])},this)},_initDimensions:function(){var t=this.dimensions=[],e=this.parallelAxisIndex=[],i=n.filter(this.dependentModels.parallelAxis,function(t){return t.get("parallelIndex")===this.componentIndex});n.each(i,function(i){t.push("dim"+i.get("dim")),e.push(i.componentIndex)})}})},function(t,e,i){function n(t){if(!t.parallel){var e=!1;r.each(t.series,function(t){t&&"parallel"===t.type&&(e=!0)}),e&&(t.parallel=[{}])}}function o(t){var e=a.normalizeToArray(t.parallelAxis);r.each(e,function(e){if(r.isObject(e)){var i=e.parallelIndex||0,n=a.normalizeToArray(t.parallel)[i];n&&n.parallelAxisDefault&&r.merge(e,n.parallelAxisDefault,!1)}})}var r=i(1),a=i(7);t.exports=function(t){n(t),o(t)}},function(t,e,i){"use strict";function n(t,e){e=e||[0,360],r.call(this,"angle",t,e),this.type="category"}var o=i(1),r=i(42);n.prototype={constructor:n,dataToAngle:r.prototype.dataToCoord,angleToData:r.prototype.coordToData},o.inherits(n,r),t.exports=n},function(t,e,i){"use strict";function n(t,e){return e.type||(e.data?"category":"value")}var o=i(1),r=i(12),a=i(52),s=r.extend({type:"polarAxis",axis:null});o.merge(s.prototype,i(51)),o.merge(s.prototype,i(82));var l={angle:{startAngle:90,clockwise:!0,splitNumber:12,axisLabel:{rotate:!1}},radius:{splitNumber:5}};a("angle",s,n,l.angle),a("radius",s,n,l.radius)},function(t,e,i){"use strict";var n=i(371),o=i(367),r=function(t){this.name=t||"",this.cx=0,this.cy=0,this._radiusAxis=new n,this._angleAxis=new o};r.prototype={constructor:r,type:"polar",dimensions:["radius","angle"],containPoint:function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},containData:function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},getAxis:function(t){return this["_"+t+"Axis"]},getAxesByScale:function(t){var e=[],i=this._angleAxis,n=this._radiusAxis;return i.scale.type===t&&e.push(i),n.scale.type===t&&e.push(n),e},getAngleAxis:function(){return this._angleAxis},getRadiusAxis:function(){return this._radiusAxis},getOtherAxis:function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},getBaseAxis:function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},dataToPoints:function(t){return t.mapArray(this.dimensions,function(t,e){return this.dataToPoint([t,e])},this)},dataToPoint:function(t,e){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)])},pointToData:function(t,e){var i=this.pointToCoord(t);return[this._radiusAxis.radiusToData(i[0],e),this._angleAxis.angleToData(i[1],e)]},pointToCoord:function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=this.getAngleAxis(),o=n.getExtent(),r=Math.min(o[0],o[1]),a=Math.max(o[0],o[1]);n.inverse?r=a-360:a=r+360;var s=Math.sqrt(e*e+i*i);e/=s,i/=s;for(var l=Math.atan2(-i,e)/Math.PI*180,u=l<r?1:-1;l<r||l>a;)l+=360*u;return[s,l]},coordToPoint:function(t){var e=t[0],i=t[1]/180*Math.PI,n=Math.cos(i)*e+this.cx,o=-Math.sin(i)*e+this.cy;return[n,o]}},t.exports=r},function(t,e,i){"use strict";i(368),i(2).extendComponentModel({type:"polar",dependencies:["polarAxis","angleAxis"],coordinateSystem:null,findAxisModel:function(t){var e,i=this.ecModel;return i.eachComponent(t,function(t){var n=i.queryComponents({mainType:"polar",index:t.getShallow("polarIndex"),id:t.getShallow("polarId")})[0];n===this&&(e=t)},this),e},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"80%"}})},function(t,e,i){"use strict";function n(t,e){r.call(this,"radius",t,e),this.type="category"}var o=i(1),r=i(42);n.prototype={constructor:n,dataToRadius:r.prototype.dataToCoord,radiusToData:r.prototype.coordToData},o.inherits(n,r),t.exports=n},function(t,e,i){function n(t,e,i){r.call(this,t,e,i),this.type="value",this.angle=0,this.name="",this.model}var o=i(1),r=i(42);o.inherits(n,r),t.exports=n},function(t,e,i){function n(t,e,i){this._model=t,this.dimensions=[],this._indicatorAxes=o.map(t.getIndicatorModels(),function(t,e){var i="indicator_"+e,n=new r(i,new a);return n.name=t.get("name"),n.model=t,t.axis=n,this.dimensions.push(i),n},this),this.resize(t,i),this.cx,this.cy,this.r,this.startAngle}var o=i(1),r=i(372),a=i(38),s=i(4),l=i(22);n.prototype.getIndicatorAxes=function(){return this._indicatorAxes},n.prototype.dataToPoint=function(t,e){var i=this._indicatorAxes[e];return this.coordToPoint(i.dataToCoord(t),e)},n.prototype.coordToPoint=function(t,e){var i=this._indicatorAxes[e],n=i.angle,o=this.cx+t*Math.cos(n),r=this.cy-t*Math.sin(n);return[o,r]},n.prototype.pointToData=function(t){var e=t[0]-this.cx,i=t[1]-this.cy,n=Math.sqrt(e*e+i*i);e/=n,i/=n;for(var o,r=Math.atan2(-i,e),a=1/0,s=-1,l=0;l<this._indicatorAxes.length;l++){var u=this._indicatorAxes[l],h=Math.abs(r-u.angle);h<a&&(o=u,s=l,a=h)}return[s,+(o&&o.coodToData(n))]},n.prototype.resize=function(t,e){var i=t.get("center"),n=e.getWidth(),r=e.getHeight(),a=Math.min(n,r)/2;this.cx=s.parsePercent(i[0],n),this.cy=s.parsePercent(i[1],r),this.startAngle=t.get("startAngle")*Math.PI/180,this.r=s.parsePercent(t.get("radius"),a),o.each(this._indicatorAxes,function(t,e){t.setExtent(0,this.r);var i=this.startAngle+e*Math.PI*2/this._indicatorAxes.length;i=Math.atan2(Math.sin(i),Math.cos(i)),t.angle=i},this)},n.prototype.update=function(t,e){function i(t){var e=Math.pow(10,Math.floor(Math.log(t)/Math.LN10)),i=t/e;return 2===i?i=5:i*=2,i*e}var n=this._indicatorAxes,r=this._model;o.each(n,function(t){t.scale.setExtent(1/0,-(1/0))}),t.eachSeriesByType("radar",function(e,i){if("radar"===e.get("coordinateSystem")&&t.getComponent("radar",e.get("radarIndex"))===r){var a=e.getData();o.each(n,function(t){t.scale.unionExtent(a.getDataExtent(t.dim))})}},this);var a=r.get("splitNumber");o.each(n,function(t,e){var n=l.getScaleExtent(t,t.model);l.niceScaleExtent(t,t.model);var o=t.model,r=t.scale,u=o.get("min"),h=o.get("max"),c=r.getInterval();if(null!=u&&null!=h)r.setInterval((h-u)/a);else if(null!=u){var d;do d=u+c*a,r.setExtent(+u,d),r.setInterval(c),c=i(c);while(d<n[1]&&isFinite(d)&&isFinite(n[1]))}else if(null!=h){var f;do f=h-c*a,r.setExtent(f,+h),r.setInterval(c),c=i(c);while(f>n[0]&&isFinite(f)&&isFinite(n[0]))}else{var p=r.getTicks().length-1;p>a&&(c=i(c));var g=Math.round((n[0]+n[1])/2/c)*c,m=Math.round(a/2);r.setExtent(s.round(g-m*c),s.round(g+(a-m)*c)),r.setInterval(c)}})},n.dimensions=[],n.create=function(t,e){var i=[];return t.eachComponent("radar",function(o){var r=new n(o,t,e);i.push(r),o.coordinateSystem=r}),t.eachSeriesByType("radar",function(t){"radar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("radarIndex")||0])}),i},i(23).register("radar",n),t.exports=n},function(t,e,i){function n(t,e){return s.defaults({show:e},t)}var o=i(81),r=o.valueAxis,a=i(10),s=i(1),l=i(51),u=i(2).extendComponentModel({type:"radar",optionUpdated:function(){var t=this.get("boundaryGap"),e=this.get("splitNumber"),i=this.get("scale"),n=this.get("axisLine"),o=this.get("axisTick"),r=this.get("axisLabel"),u=this.get("name.textStyle"),h=this.get("name.show"),c=this.get("name.formatter"),d=this.get("nameGap"),f=this.get("triggerEvent"),p=s.map(this.get("indicator")||[],function(p){null!=p.max&&p.max>0&&!p.min?p.min=0:null!=p.min&&p.min<0&&!p.max&&(p.max=0),p=s.merge(s.clone(p),{boundaryGap:t,splitNumber:e,scale:i,axisLine:n,axisTick:o,axisLabel:r,name:p.text,nameLocation:"end",nameGap:d,nameTextStyle:u,triggerEvent:f},!1),h||(p.name=""),"string"==typeof c?p.name=c.replace("{value}",p.name):"function"==typeof c&&(p.name=c(p.name,p));var g=s.extend(new a(p,null,this.ecModel),l);return g.mainType="radar",g.componentIndex=this.componentIndex,g},this);this.getIndicatorModels=function(){return p}},defaultOption:{zlevel:0,z:0,center:["50%","50%"],radius:"75%",startAngle:90,name:{show:!0},boundaryGap:[0,0],splitNumber:5,nameGap:15,scale:!1,shape:"polygon",axisLine:s.merge({lineStyle:{color:"#bbb"}},r.axisLine),axisLabel:n(r.axisLabel,!1),axisTick:n(r.axisTick,!1),splitLine:n(r.splitLine,!0),splitArea:n(r.splitArea,!0),indicator:[]}});t.exports=u},function(t,e,i){function n(t,e){return e.type||(e.data?"category":"value")}var o=i(12),r=i(52),a=i(1),s=o.extend({type:"singleAxis",layoutMode:"box",axis:null,coordinateSystem:null}),l={left:"5%",top:"5%",right:"5%",bottom:"5%",type:"value",position:"bottom",orient:"horizontal",axisLine:{show:!0,lineStyle:{width:2,type:"solid"}},axisTick:{show:!0,length:6,lineStyle:{width:2}},axisLabel:{show:!0,interval:"auto"},splitLine:{show:!0,lineStyle:{type:"dashed",opacity:.2}}};a.merge(s.prototype,i(51)),r("single",s,n,l),t.exports=s},function(t,e,i){function n(t,e,i){this.dimension="x",this.dimensions=["x"],this._axis=null,this._rect,this._init(t,e,i),this._model=t}var o=i(377),r=i(22),a=i(13);n.prototype={type:"singleAxis",constructor:n,_init:function(t,e,i){var n=this.dimension,a=new o(n,r.createScaleByModel(t),[0,0],t.get("type"),t.get("position")),s="category"===a.type;a.onBand=s&&t.get("boundaryGap"),a.inverse=t.get("inverse"),a.orient=t.get("orient"),t.axis=a,a.model=t,this._axis=a},update:function(t,e){this._updateAxisFromSeries(t)},_updateAxisFromSeries:function(t){t.eachSeries(function(t){var e=t.getData(),i=this.dimension;this._axis.scale.unionExtent(e.getDataExtent(t.coordDimToDataDim(i))),r.niceScaleExtent(this._axis,this._axis.model)},this)},resize:function(t,e){this._rect=a.getLayoutRect({left:t.get("left"),top:t.get("top"),right:t.get("right"),bottom:t.get("bottom"),width:t.get("width"),height:t.get("height")},{width:e.getWidth(),height:e.getHeight()}),this._adjustAxis()},getRect:function(){return this._rect},_adjustAxis:function(){var t=this._rect,e=this._axis,i=e.isHorizontal(),n=i?[0,t.width]:[0,t.height],o=e.reverse?1:0;e.setExtent(n[o],n[1-o]),this._updateAxisTransform(e,i?t.x:t.y)},_updateAxisTransform:function(t,e){var i=t.getExtent(),n=i[0]+i[1],o=t.isHorizontal();t.toGlobalCoord=o?function(t){return t+e}:function(t){return n-t+e},t.toLocalCoord=o?function(t){return t-e}:function(t){return n-t+e}},getAxis:function(){return this._axis},getBaseAxis:function(){return this._axis},containPoint:function(t){var e=this.getRect(),i=this.getAxis(),n=i.orient;return"horizontal"===n?i.contain(i.toLocalCoord(t[0]))&&t[1]>=e.y&&t[1]<=e.y+e.height:i.contain(i.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},pointToData:function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t["horizontal"===e.orient?0:1]))]},dataToPoint:function(t){var e=this.getAxis(),i=this.getRect(),n=[],o="horizontal"===e.orient?0:1;return n[o]=e.toGlobalCoord(e.dataToCoord(+t)),n[1-o]=0===o?i.y+i.height/2:i.x+i.width/2,n}},t.exports=n},function(t,e,i){var n=i(1),o=i(42),r=i(22),a=function(t,e,i,n,r){o.call(this,t,e,i),this.type=n||"value",this.position=r||"bottom",this.orient=null,this._labelInterval=null};a.prototype={constructor:a,model:null,isHorizontal:function(){var t=this.position;return"top"===t||"bottom"===t},getLabelInterval:function(){var t=this._labelInterval;if(!t){var e=this.model,i=e.getModel("axisLabel"),o=i.get("interval");if("category"!==this.type||"auto"!==o)return t=this._labelInterval="auto"===o?0:o;t=this._labelInterval=r.getAxisLabelInterval(n.map(this.scale.getTicks(),this.dataToCoord,this),e.getFormattedLabels(),i.getModel("textStyle").getFont(),this.isHorizontal())}return t},toGlobalCoord:null,toLocalCoord:null},n.inherits(a,o),t.exports=a},function(t,e,i){function n(t,e){var i=[];return t.eachComponent("singleAxis",function(n,r){var a=new o(n,t,e);a.name="single_"+r,a.resize(n,e),n.coordinateSystem=a,i.push(a)}),t.eachSeries(function(e){if("singleAxis"===e.get("coordinateSystem")){var i=t.queryComponents({mainType:"singleAxis",index:e.get("singleAxisIndex"),id:e.get("singleAxisId")})[0];e.coordinateSystem=i.coordinateSystem}}),i}var o=i(376);i(23).register("single",{create:n,dimensions:o.prototype.dimensions})},function(t,e,i){"use strict";function n(t,e){this.id=null==t?"":t,this.inEdges=[],this.outEdges=[],this.edges=[],this.hostGraph,this.dataIndex=null==e?-1:e}function o(t,e,i){this.node1=t,this.node2=e,this.dataIndex=null==i?-1:i}var r=i(1),a=function(t){this._directed=t||!1,this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={},this.data,this.edgeData},s=a.prototype;s.type="graph",s.isDirected=function(){return this._directed},s.addNode=function(t,e){t=t||""+e;var i=this._nodesMap;if(!i[t]){var o=new n(t,e);return o.hostGraph=this,this.nodes.push(o),i[t]=o,o}},s.getNodeByIndex=function(t){var e=this.data.getRawIndex(t);return this.nodes[e]},s.getNodeById=function(t){return this._nodesMap[t]},s.addEdge=function(t,e,i){var r=this._nodesMap,a=this._edgesMap;if("number"==typeof t&&(t=this.nodes[t]),"number"==typeof e&&(e=this.nodes[e]),t instanceof n||(t=r[t]),e instanceof n||(e=r[e]),t&&e){var s=t.id+"-"+e.id;if(!a[s]){var l=new o(t,e,i);return l.hostGraph=this,this._directed&&(t.outEdges.push(l),e.inEdges.push(l)),t.edges.push(l),t!==e&&e.edges.push(l),this.edges.push(l),a[s]=l,l}}},s.getEdgeByIndex=function(t){var e=this.edgeData.getRawIndex(t);return this.edges[e]},s.getEdge=function(t,e){t instanceof n&&(t=t.id),e instanceof n&&(e=e.id);var i=this._edgesMap;return this._directed?i[t+"-"+e]:i[t+"-"+e]||i[e+"-"+t]},s.eachNode=function(t,e){for(var i=this.nodes,n=i.length,o=0;o<n;o++)i[o].dataIndex>=0&&t.call(e,i[o],o)},s.eachEdge=function(t,e){for(var i=this.edges,n=i.length,o=0;o<n;o++)i[o].dataIndex>=0&&i[o].node1.dataIndex>=0&&i[o].node2.dataIndex>=0&&t.call(e,i[o],o)},s.breadthFirstTraverse=function(t,e,i,o){if(e instanceof n||(e=this._nodesMap[e]),e){for(var r="out"===i?"outEdges":"in"===i?"inEdges":"edges",a=0;a<this.nodes.length;a++)this.nodes[a].__visited=!1;if(!t.call(o,e,null))for(var s=[e];s.length;)for(var l=s.shift(),u=l[r],a=0;a<u.length;a++){var h=u[a],c=h.node1===l?h.node2:h.node1;if(!c.__visited){if(t.call(c,c,l))return;s.push(c),c.__visited=!0}}}},s.update=function(){for(var t=this.data,e=this.edgeData,i=this.nodes,n=this.edges,o=0,r=i.length;o<r;o++)i[o].dataIndex=-1;for(var o=0,r=t.count();o<r;o++)i[t.getRawIndex(o)].dataIndex=o;e.filterSelf(function(t){var i=n[e.getRawIndex(t)];return i.node1.dataIndex>=0&&i.node2.dataIndex>=0});for(var o=0,r=n.length;o<r;o++)n[o].dataIndex=-1;for(var o=0,r=e.count();o<r;o++)n[e.getRawIndex(o)].dataIndex=o},s.clone=function(){for(var t=new a(this._directed),e=this.nodes,i=this.edges,n=0;n<e.length;n++)t.addNode(e[n].id,e[n].dataIndex);for(var n=0;n<i.length;n++){var o=i[n];t.addEdge(o.node1.id,o.node2.id,o.dataIndex)}return t},n.prototype={constructor:n,degree:function(){return this.edges.length},inDegree:function(){return this.inEdges.length},outDegree:function(){return this.outEdges.length},getModel:function(t){if(!(this.dataIndex<0)){var e=this.hostGraph,i=e.data.getItemModel(this.dataIndex);return i.getModel(t)}}},o.prototype.getModel=function(t){if(!(this.dataIndex<0)){var e=this.hostGraph,i=e.edgeData.getItemModel(this.dataIndex);return i.getModel(t)}};var l=function(t,e){return{getValue:function(i){var n=this[t][e];return n.get(n.getDimension(i||"value"),this.dataIndex)},setVisual:function(i,n){this.dataIndex>=0&&this[t][e].setItemVisual(this.dataIndex,i,n)},getVisual:function(i,n){return this[t][e].getItemVisual(this.dataIndex,i,n)},setLayout:function(i,n){this.dataIndex>=0&&this[t][e].setItemLayout(this.dataIndex,i,n)},getLayout:function(){return this[t][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[t][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[t][e].getRawIndex(this.dataIndex)}}};r.mixin(n,l("hostGraph","data")),r.mixin(o,l("hostGraph","edgeData")),a.Node=n,a.Edge=o,t.exports=a},function(t,e,i){function n(t,e){this.root,this.data,this._nodes=[],this.hostModel=t,this.levelModels=r.map(e||[],function(e){return new a(e,t,t.ecModel)})}function o(t,e){var i=e.children;t.parentNode!==e&&(i.push(t),t.parentNode=e)}var r=i(1),a=i(10),s=i(14),l=i(241),u=i(29),h=function(t,e){this.name=t||"",this.depth=0,this.height=0,this.parentNode=null,this.dataIndex=-1,this.children=[],this.viewChildren=[],this.hostTree=e};h.prototype={constructor:h,isRemoved:function(){return this.dataIndex<0},eachNode:function(t,e,i){"function"==typeof t&&(i=e,e=t,t=null),t=t||{},r.isString(t)&&(t={order:t});var n,o=t.order||"preorder",a=this[t.attr||"children"];"preorder"===o&&(n=e.call(i,this));for(var s=0;!n&&s<a.length;s++)a[s].eachNode(t,e,i);"postorder"===o&&e.call(i,this)},updateDepthAndHeight:function(t){var e=0;this.depth=t;for(var i=0;i<this.children.length;i++){var n=this.children[i];n.updateDepthAndHeight(t+1),n.height>e&&(e=n.height)}this.height=e+1},getNodeById:function(t){if(this.getId()===t)return this;for(var e=0,i=this.children,n=i.length;e<n;e++){var o=i[e].getNodeById(t);if(o)return o}},contains:function(t){if(t===this)return!0;for(var e=0,i=this.children,n=i.length;e<n;e++){var o=i[e].contains(t);if(o)return o}},getAncestors:function(t){for(var e=[],i=t?this:this.parentNode;i;)e.push(i),i=i.parentNode;return e.reverse(),e},getValue:function(t){var e=this.hostTree.data;return e.get(e.getDimension(t||"value"),this.dataIndex)},setLayout:function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},getLayout:function(){return this.hostTree.data.getItemLayout(this.dataIndex)},getModel:function(t){if(!(this.dataIndex<0)){var e=this.hostTree,i=e.data.getItemModel(this.dataIndex),n=this.getLevelModel();return i.getModel(t,(n||e.hostModel).getModel(t))}},getLevelModel:function(){return(this.hostTree.levelModels||[])[this.depth]},setVisual:function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},getVisual:function(t,e){return this.hostTree.data.getItemVisual(this.dataIndex,t,e)},getRawIndex:function(){return this.hostTree.data.getRawIndex(this.dataIndex)},getId:function(){return this.hostTree.data.getId(this.dataIndex)}},n.prototype={constructor:n,type:"tree",eachNode:function(t,e,i){this.root.eachNode(t,e,i)},getNodeByDataIndex:function(t){var e=this.data.getRawIndex(t);return this._nodes[e]},getNodeByName:function(t){return this.root.getNodeByName(t)},update:function(){for(var t=this.data,e=this._nodes,i=0,n=e.length;i<n;i++)e[i].dataIndex=-1;for(var i=0,n=t.count();i<n;i++)e[t.getRawIndex(i)].dataIndex=i},clearLayouts:function(){this.data.clearItemLayouts()}},n.createTree=function(t,e,i){function r(t,e){c.push(t);var i=new h(t.name,a);e?o(i,e):a.root=i,a._nodes.push(i);var n=t.children;if(n)for(var s=0;s<n.length;s++)r(n[s],i)}var a=new n(e,i),c=[];r(t),a.root.updateDepthAndHeight(0);var d=u([{name:"value"}],c),f=new s(d,e);return f.initData(c),l({mainData:f,struct:a,structAttr:"tree"}),a.update(),a},t.exports=n},function(t,e,i){function n(){var t,e=[],i={};return{add:function(t,n,r,a,s){return o.isString(a)&&(s=a,a=0),!i[t.id]&&(i[t.id]=1,e.push({el:t,target:n,time:r,delay:a,easing:s}),!0)},done:function(e){return t=e,this},start:function(){function n(){o--,o||(e.length=0,i={},t&&t())}for(var o=e.length,r=0,a=e.length;r<a;r++){var s=e[r];s.el.animateTo(s.target,s.time,s.delay,s.easing,n)}return this}}}var o=i(1);t.exports={createWrap:n}},function(t,e,i){function n(){function t(e,n){if(n>=i.length)return e;for(var r=-1,a=e.length,s=i[n++],l={},u={};++r<a;){var h=s(e[r]),c=u[h];c?c.push(e[r]):u[h]=[e[r]]}return o.each(u,function(e,i){l[i]=t(e,n)}),l}function e(t,r){if(r>=i.length)return t;var a=[],s=n[r++];return o.each(t,function(t,i){a.push({key:i,values:e(t,r)})}),s?a.sort(function(t,e){return s(t.key,e.key)}):a}var i=[],n=[];return{key:function(t){return i.push(t),this},sortKeys:function(t){return n[i.length-1]=t,this},entries:function(i){return e(t(i,0),0)}}}var o=i(1);t.exports=n},function(t,e,i){var n=i(1),o={get:function(t,e,i){var o=n.clone((r[t]||{})[e]);return i&&n.isArray(o)?o[o.length-1]:o}},r={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]}};t.exports=o}])}); \ No newline at end of file diff --git a/src/main/websrc/js/common/esl.js b/src/main/websrc/js/common/esl.js new file mode 100644 index 0000000..1f3ec77 --- /dev/null +++ b/src/main/websrc/js/common/esl.js @@ -0,0 +1 @@ +var define,require,esl;!function(n){function e(n,e){function r(n){0===n.indexOf(".")&&i.push(n)}var i=[];if("string"==typeof n?r(n):$(n,function(n){r(n)}),i.length>0)throw new Error("[REQUIRE_FATAL]Relative ID is not allowed in global require: "+i.join(", "));var o=C.waitSeconds;return o&&n instanceof Array&&(D&&clearTimeout(D),D=setTimeout(t,1e3*o)),_(n,e)}function t(){function n(a,u){if(!o[a]&&!l(a,N)){o[a]=1,l(a,L)||r[a]||(r[a]=1,e.push(a));var f=T[a];f?u&&(r[a]||(r[a]=1,e.push(a)),$(f.depMs,function(e){n(e.absId,e.hard)})):i[a]||(i[a]=1,t.push(a))}}var e=[],t=[],r={},i={},o={};for(var a in F)n(a,1);if(e.length||t.length)throw new Error("[MODULE_TIMEOUT]Hang( "+(e.join(", ")||"none")+" ) Miss( "+(t.join(", ")||"none")+" )")}function r(n){$(H,function(e){a(n,e.deps,e.factory)}),H.length=0,u(n)}function i(n,e,t){if(null==t&&(null==e?(t=n,n=null):(t=e,e=null,n instanceof Array&&(e=n,n=null))),null!=t){var r=window.opera;if(!n&&document.attachEvent&&(!r||"[object Opera]"!==r.toString())){var i=S();n=i&&i.getAttribute("data-require-id")}n?a(n,e,t):H[0]={deps:e,factory:t}}}function o(){var n=C.config[this.id];return n&&"object"==typeof n?n:{}}function a(n,e,t){T[n]||(T[n]={id:n,depsDec:e,deps:e||["require","exports","module"],factoryDeps:[],factory:t,exports:{},config:o,state:z,require:w(n),depMs:[],depMkv:{},depRs:[],depPMs:[]})}function u(n){var e=T[n];if(e&&!l(n,B)){var t=e.deps,r=e.factory,i=0;"function"==typeof r&&(i=Math.min(r.length,t.length),!e.depsDec&&r.toString().replace(/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/gm,"").replace(/require\(\s*(['"'])([^'"]+)\1\s*\)/g,function(n,e,r){t.push(r)}));var o=[];$(t,function(t,r){var a,u,f=I(t),c=q(f.mod,n);c&&!P[c]?(f.res&&(u={id:t,mod:c,res:f.res},F[c]=1,e.depPMs.push(c),e.depRs.push(u)),a=e.depMkv[c],a||(a={id:f.mod,absId:c,hard:i>r},e.depMs.push(a),e.depMkv[c]=a,o.push(c))):a={absId:c},i>r&&e.factoryDeps.push(u||a)}),e.state=B,s(n),m(o)}}function f(){for(var n in F)c(n),d(n)}function c(n){function e(n){if(!l(n,B))return!1;if(l(n,L)||t[n])return!0;t[n]=1;var r=T[n],i=!0;return $(r.depMs,function(n){return i=e(n.absId)}),i&&$(r.depRs,function(n){return i=!(!n.absId||!l(n.absId,N))}),i&&(r.state=L),i}var t={};e(n)}function s(e){function t(){if(!r&&i.state===L){r=1;var t=1,o=[];if($(i.factoryDeps,function(n){var e=n.absId;return P[e]||(d(e),l(e,N))?void o.push(e):(t=0,!1)}),t){try{var a=p(o,{require:i.require,exports:i.exports,module:i}),u=i.factory,f="function"==typeof u?u.apply(n,a):u;null!=f&&(i.exports=f),i.invokeFactory=null,delete F[e]}catch(c){if(r=0,/^\[MODULE_MISS\]"([^"]+)/.test(c.message)){var s=i.depMkv[RegExp.$1];return void(s&&(s.hard=1))}throw c}g(e)}}}var r,i=T[e];i.invokeFactory=t,$(i.depPMs,function(n){v(n,function(){$(i.depRs,function(t){t.absId||t.mod!==n||(t.absId=q(t.id,e),m([t.absId],f))})})})}function l(n,e){return T[n]&&T[n].state>=e}function d(n){var e=T[n];e&&e.invokeFactory&&e.invokeFactory()}function p(n,e){var t=[];return $(n,function(n,r){t[r]=e[n]||h(n)}),t}function v(n,e){if(l(n,N))return void e();var t=Q[n];t||(t=Q[n]=[]),t.push(e)}function g(n){var e=Q[n]||[],t=T[n];t.state=N;for(var r=e.length;r--;)e[r]();e.length=0,delete Q[n]}function h(n){return l(n,N)?T[n].exports:null}function m(e,t,r,i){function o(){if(!a){var r=1;$(e,function(n){return P[n]?void 0:r=!!l(n,N)}),r&&(a=1,"function"==typeof t&&t.apply(n,p(e,P)))}}if("string"==typeof e){if(d(e),!l(e,N))throw new Error('[MODULE_MISS]"'+e+'" is not exists!');return h(e)}i=i||{};var a=0;e instanceof Array&&(o(),a||($(e,function(n){P[n]||l(n,N)||(v(n,o),i[n]||(n.indexOf("!")>0?b:y)(n,r),u(n))}),f()))}function y(n){function e(){var e=t.readyState;if("undefined"==typeof e||/^(loaded|complete)$/.test(e)){t.onload=t.onreadystatechange=null,t=null,r(n);for(var i in F)u(i);f()}}if(!G[n]&&!T[n]){G[n]=1;var t=document.createElement("script");t.setAttribute("data-require-id",n),t.src=E(n+".js"),t.async=!0,t.readyState?t.onreadystatechange=e:t.onload=e,U(t)}}function b(n,e){function t(e){u.exports=e||!0,g(n)}function i(r){var i=e?T[e].require:_;r.load(a.res,i,t,o.call({id:n}))}if(!T[n]){var a=I(n),u={id:n,state:B};T[n]=u,t.fromText=function(n,e){F[n]=1,new Function(e)(),r(n)},i(h(a.mod))}}function M(n,e){var t=R(n,1,e);return t.sort(j),t}function k(){C.baseUrl=C.baseUrl.replace(/\/$/,"")+"/",J=M(C.paths),V=M(C.map,1),$(V,function(n){n.v=M(n.v)}),K=[],$(C.packages,function(n){var e=n;"string"==typeof n&&(e={name:n.split("/")[0],location:n,main:"main"}),e.location=e.location||e.name,e.main=(e.main||"main").replace(/\.js$/i,""),e.reg=O(e.name),K.push(e)}),K.sort(j),W=M(C.urlArgs,1),X=M(C.noRequests),$(X,function(n){var e=n.v,t={};n.v=t,e instanceof Array||(e=[e]),$(e,function(n){t[n]=1})})}function x(n,e,t){$(e,function(e){return e.reg.test(n)?(t(e.v,e.k,e),!1):void 0})}function E(n){var e=/(\.[a-z0-9]+)$/i,t=/(\?[^#]*)$/,r="",i=n,o="";t.test(n)&&(o=RegExp.$1,n=n.replace(t,"")),e.test(n)&&(r=RegExp.$1,i=n.replace(e,""));var a,u=i;return x(i,J,function(n,e){u=u.replace(e,n),a=1}),a||x(i,K,function(n,e,t){u=u.replace(t.name,t.location)}),/^([a-z]{2,10}:\/)?\//i.test(u)||(u=C.baseUrl+u),u+=r+o,x(i,W,function(n){u+=(u.indexOf("?")>0?"&":"?")+n}),u}function w(n){function e(e,r){if("string"==typeof e)return t[e]||(t[e]=m(q(e,n))),t[e];if(e instanceof Array){var i=[],o=[],a=[];$(e,function(e,t){var r=I(e),u=q(r.mod,n);o.push(u),F[u]=1,r.res?(i.push(u),a[t]=null):a[t]=u});var u={};$(o,function(n){var e;x(n,X,function(n){e=n}),e&&(e["*"]?u[n]=1:$(o,function(t){return e[t]?(u[n]=1,!1):void 0}))}),m(o,function(){$(a,function(t,r){null==t&&(a[r]=q(e[r],n))}),m(a,r,n)},n,u)}}var t={};return e.toUrl=function(e){return E(q(e,n))},e}function q(n,e){if(!n)return"";e=e||"";var t=I(n);if(!t)return n;var r=t.res,i=A(t.mod,e);if($(K,function(n){var e=n.name;return e===i?(i=e+"/"+n.main,!1):void 0}),x(e,V,function(n){x(i,n,function(n,e){i=i.replace(e,n)})}),r){var o=h(i);r=o.normalize?o.normalize(r,function(n){return q(n,e)}):q(r,e),i+="!"+r}return i}function A(n,e){if(0===n.indexOf(".")){var t=e.split("/"),r=n.split("/"),i=t.length-1,o=r.length,a=0,u=0;n:for(var f=0;o>f;f++)switch(r[f]){case"..":if(!(i>a))break n;a++,u++;break;case".":u++;break;default:break n}return t.length=i-a,r=r.slice(u),t.concat(r).join("/")}return n}function I(n){var e=n.split("!");return e[0]?{mod:e[0],res:e[1]}:null}function R(n,e,t){var r=[];for(var i in n)if(n.hasOwnProperty(i)){var o={k:i,v:n[i]};r.push(o),e&&(o.reg="*"===i&&t?/^/:O(i))}return r}function S(){if(Y)return Y;if(Z&&"interactive"===Z.readyState)return Z;for(var n=document.getElementsByTagName("script"),e=n.length;e--;){var t=n[e];if("interactive"===t.readyState)return Z=t,t}}function U(n){Y=n,ee?ne.insertBefore(n,ee):ne.appendChild(n),Y=null}function O(n){return new RegExp("^"+n+"(/|$)")}function $(n,e){if(n instanceof Array)for(var t=0,r=n.length;r>t&&e(n[t],t)!==!1;t++);}function j(n,e){var t=n.k||n.name,r=e.k||e.name;return"*"===r?-1:"*"===t?1:r.length-t.length}var D,T={},F={},z=1,B=2,L=3,N=4,P={require:e,exports:1,module:1},_=w(),C={baseUrl:"./",paths:{},config:{},map:{},packages:[],waitSeconds:0,noRequests:{},urlArgs:{}};e.version="1.8.8",e.loader="esl",e.toUrl=_.toUrl;var H=[];i.amd={};var Q={},G={};e.config=function(n){if(n){for(var e in C){var t=n[e],r=C[e];if(t)if("urlArgs"===e&&"string"==typeof t)C.urlArgs["*"]=t;else if(r instanceof Array)r.push.apply(r,t);else if("object"==typeof r)for(var i in t)r[i]=t[i];else C[e]=t}k()}},k();var J,K,V,W,X,Y,Z,ne=document.getElementsByTagName("head")[0],ee=document.getElementsByTagName("base")[0];ee&&(ne=ee.parentNode),define||(define=i,require||(require=e),esl=e)}(this); \ No newline at end of file diff --git a/src/main/websrc/js/home/demolist.js b/src/main/websrc/js/home/demolist.js new file mode 100644 index 0000000..498a6ac --- /dev/null +++ b/src/main/websrc/js/home/demolist.js @@ -0,0 +1,21 @@ +(function(){ + angular.module("app.home") + .controller("demolistCtrl",["$scope","OptionService","UtilService","$interval","HttpService",demolistCtrl]); + + function demolistCtrl($scope,OptionService,UtilService,$interval,HttpService){ + //loading加载 + $scope.showLoading = function(){ + document.getElementById("sysLoad").style.display = "block"; + } + $scope.hideLoading = function(){ + document.getElementById("sysLoad").style.display = "none"; + } + + $scope.goDemo = function(id){ + UtilService.setCookie("ryioDemoapk",id,7); + window.location.href = "demo.html"; + } + + + } +})(); \ No newline at end of file diff --git a/src/main/websrc/js/login/acvitation.js b/src/main/websrc/js/login/acvitation.js new file mode 100644 index 0000000..ff8e533 --- /dev/null +++ b/src/main/websrc/js/login/acvitation.js @@ -0,0 +1,162 @@ +(function(){ + angular.module("app.login") + .controller("acvitationCtrl",["$scope","UtilService","$http","$interval","$location",acvitationCtrl]); + + function acvitationCtrl($scope,UtilService,$http,$interval,$location){ + //loading加载 + + $scope.showLoading = function(){ + document.getElementById("sysLoad").style.display = "block"; + } + $scope.hideLoading = function(){ + document.getElementById("sysLoad").style.display = "none"; + } + $scope.registerId = $.cookie("regId"); + $scope.registerEmail= $.cookie("regEmail"); + $scope.flag = $.cookie("regFlag"); + $scope.activeStatus = $.cookie("ryioActiveStatus"); + $scope.acvitation = $.cookie("ryioAcvitation"); //0 success 1 failure + + //判断状态 + $scope.findStatus = function(){ + $scope.showLoading(); + $http.get("/api/reged/findbyemail?email="+$scope.registerEmail).success(function(data){ + $scope.hideLoading(); + $scope.activeStatus = data.content.activeStatus; + UtilService.setCookie("ryioActiveStatus",data.content.activeStatus,7); + if(data.content.status > -3 && $scope.flag != 1){ + window.location.href = "success.html"; + } + if($scope.activeStatus == true && $scope.flag == 1){ + window.location.href = "success.html"; + } + }) + } + $scope.findStatus(); + + $scope.hasReged = true; + $scope.loginEmail = function(){ + var mail = $scope.registerEmail.split("@"); + window.open("http://mail."+mail[1]); + } + + $scope.sendtype = 1; + $scope.sendAgain = function(){ + $scope.showLoading(); + $http.get("/api/reged/sendeactivemail/"+$scope.registerId+"/"+$scope.flag).success(function(data){ + $scope.hideLoading(); + if(data.content == "success"){ + $scope.sendtype = 2; + $scope.acvitation = 0; + $scope.time= 99000; + $one_minute = $interval(function(){ + $scope.time -= 1000; + if($scope.time == 0){ + $scope.sendtype = 1; + } + },1000); + }else if(data.content == "actived"){ + window.location.href = "success.html"; + }else{ + $scope.acvitation = 1; + } + }); + } + + $scope.changeEmail = function(){ + $scope.winFlag = 1; + $scope.oldemail = $scope.registerEmail; + } + $scope.closeWin = function(){ + $scope.winFlag = 0; + } + $scope.saveNewEmail = function(){ + var par = { + oldemail: $scope.oldemail, + newemail: $scope.newemail + }; + var verPar = { + oldemail: { + key: 'email', + max:48, + val: $scope.oldemail, + txt:"邮箱最长48位" + }, + newemail: { + key: 'email', + max:48, + val: $scope.newemail, + txt:"邮箱最长48位" + } + } + var reg = /^([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9]+\.[a-zA-Z]{1,63}$/; + $scope.tip = formJudge(verPar); + if($scope.newemail == undefined){ + if ($scope.tip.succ == true) { + $scope.tip.succ = false; + } + $scope.tip.newemail = { + status:true, + txt:"必填" + } + } + if($scope.newemail == ""){ + if ($scope.tip.succ == true) { + $scope.tip.succ = false; + } + $scope.tip.newemail = { + status:true, + txt:"必填" + } + } + if($scope.newemail != undefined && $scope.newemail != "" && !reg.test($scope.newemail)){ + if ($scope.tip.succ == true) { + $scope.tip.succ = false; + } + $scope.tip.newemail = { + status:true, + txt:"请输入正确的邮箱格式" + } + } + if ($scope.tip.succ != true) { + return false; + } + $scope.errorMessage = ""; + $scope.showLoading(); + $http.get("/api/reged/modifyemail/"+$scope.registerId+"?oldemail="+$scope.oldemail+"&newemail="+$scope.newemail).success(function(data){ + $scope.hideLoading(); + if(data.code== -1){ + $scope.tip.newemail = { + status:true, + txt:"该新邮箱已存在,请更换新邮箱" + } + }else if(data.code== 250){ + $scope.tip.newemail = { + status:true, + txt:"发送邮件失败" + } + }else if(data.code == 251){ + $scope.tip.newemail = { + status:true, + txt:"注册邮箱已激活,不可再修改" + } + }else if(data.content.id==null){ + $scope.tip.newemail = { + status:true, + txt:"注册邮箱错误,请修改" + } + }else{ + UtilService.setCookie("regFlag",$scope.flag,7); + UtilService.setCookie("regEmail",$scope.newemail,7); + $scope.registerEmail = $scope.newemail; + window.location.href = "activation.html"; + } + }); + } + $scope.keyEvt= function(e){ + if(e.keyCode == 13){ + $scope.save(); + } + } + } +})(); \ No newline at end of file diff --git a/src/main/websrc/js/login/echarts-all.js b/src/main/websrc/js/login/echarts-all.js new file mode 100644 index 0000000..b28a580 --- /dev/null +++ b/src/main/websrc/js/login/echarts-all.js @@ -0,0 +1,35 @@ +!function(e){var t,i;!function(){function e(e,t){if(!t)return e;if(0===e.indexOf(".")){var i=t.split("/"),n=e.split("/"),a=i.length-1,o=n.length,r=0,s=0;e:for(var l=0;o>l;l++)switch(n[l]){case"..":if(!(a>r))break e;r++,s++;break;case".":s++;break;default:break e}return i.length=a-r,n=n.slice(s),i.concat(n).join("/")}return e}function n(t){function i(i,r){if("string"==typeof i){var s=n[i];return s||(s=o(e(i,t)),n[i]=s),s}i instanceof Array&&(r=r||function(){},r.apply(this,a(i,r,t)))}var n={};return i}function a(i,n,a){for(var s=[],l=r[a],h=0,m=Math.min(i.length,n.length);m>h;h++){var V,U=e(i[h],a);switch(U){case"require":V=l&&l.require||t;break;case"exports":V=l.exports;break;case"module":V=l;break;default:V=o(U)}s.push(V)}return s}function o(e){var t=r[e];if(!t)throw new Error("No "+e);if(!t.defined){var i=t.factory,n=i.apply(this,a(t.deps||[],i,e));"undefined"!=typeof n&&(t.exports=n),t.defined=1}return t.exports}var r={};i=function(e,t,i){r[e]={id:e,deps:t,factory:i,defined:0,exports:{},require:n(e)}},t=n("")}(),i("echarts",["echarts/echarts"],function(e){return e}),i("echarts/echarts",["require","./config","zrender/tool/util","zrender/tool/event","zrender/tool/env","zrender","zrender/config","./chart/island","./component/toolbox","./component","./component/title","./component/tooltip","./component/legend","./util/ecData","./chart","zrender/tool/color","./component/timeline","zrender/shape/Image","zrender/loadingEffect/Bar","zrender/loadingEffect/Bubble","zrender/loadingEffect/DynamicLine","zrender/loadingEffect/Ring","zrender/loadingEffect/Spin","zrender/loadingEffect/Whirling","./theme/macarons","./theme/infographic"],function(e){function t(){r.Dispatcher.call(this)}function i(e){e.innerHTML="",this._themeConfig={},this.dom=e,this._connected=!1,this._status={dragIn:!1,dragOut:!1,needRefresh:!1},this._curEventType=!1,this._chartList=[],this._messageCenter=new t,this._messageCenterOutSide=new t,this.resize=this.resize(),this._init()}function n(e,t,i,n,a){for(var o=e._chartList,r=o.length;r--;){var s=o[r];"function"==typeof s[t]&&s[t](i,n,a)}}var a=e("./config"),o=e("zrender/tool/util"),r=e("zrender/tool/event"),s={},l=e("zrender/tool/env").canvasSupported,h=new Date-0,m={},V="_echarts_instance_";s.version="2.2.7",s.dependencies={zrender:"2.1.1"},s.init=function(t,n){var a=e("zrender");a.version.replace(".","")-0<s.dependencies.zrender.replace(".","")-0&&console.error("ZRender "+a.version+" is too old for ECharts "+s.version+". Current version need ZRender "+s.dependencies.zrender+"+"),t=t instanceof Array?t[0]:t;var o=t.getAttribute(V);return o||(o=h++,t.setAttribute(V,o)),m[o]&&m[o].dispose(),m[o]=new i(t),m[o].id=o,m[o].canvasSupported=l,m[o].setTheme(n),m[o]},s.getInstanceById=function(e){return m[e]},o.merge(t.prototype,r.Dispatcher.prototype,!0);var U=e("zrender/config").EVENT,d=["CLICK","DBLCLICK","MOUSEOVER","MOUSEOUT","DRAGSTART","DRAGEND","DRAGENTER","DRAGOVER","DRAGLEAVE","DROP"];return i.prototype={_init:function(){var t=this,i=e("zrender").init(this.dom);this._zr=i,this._messageCenter.dispatch=function(e,i,n,a){n=n||{},n.type=e,n.event=i,t._messageCenter.dispatchWithContext(e,n,a),t._messageCenterOutSide.dispatchWithContext(e,n,a)},this._onevent=function(e){return t.__onevent(e)};for(var n in a.EVENT)"CLICK"!=n&&"DBLCLICK"!=n&&"HOVER"!=n&&"MOUSEOUT"!=n&&"MAP_ROAM"!=n&&this._messageCenter.bind(a.EVENT[n],this._onevent,this);var o={};this._onzrevent=function(e){return t[o[e.type]](e)};for(var r=0,s=d.length;s>r;r++){var l=d[r],h=U[l];o[h]="_on"+l.toLowerCase(),i.on(h,this._onzrevent)}this.chart={},this.component={};var m=e("./chart/island");this._island=new m(this._themeConfig,this._messageCenter,i,{},this),this.chart.island=this._island;var V=e("./component/toolbox");this._toolbox=new V(this._themeConfig,this._messageCenter,i,{},this),this.component.toolbox=this._toolbox;var p=e("./component");p.define("title",e("./component/title")),p.define("tooltip",e("./component/tooltip")),p.define("legend",e("./component/legend")),(0===i.getWidth()||0===i.getHeight())&&console.error("Dom’s width & height should be ready before init.")},__onevent:function(e){e.__echartsId=e.__echartsId||this.id;var t=e.__echartsId===this.id;switch(this._curEventType||(this._curEventType=e.type),e.type){case a.EVENT.LEGEND_SELECTED:this._onlegendSelected(e);break;case a.EVENT.DATA_ZOOM:if(!t){var i=this.component.dataZoom;i&&(i.silence(!0),i.absoluteZoom(e.zoom),i.silence(!1))}this._ondataZoom(e);break;case a.EVENT.DATA_RANGE:t&&this._ondataRange(e);break;case a.EVENT.MAGIC_TYPE_CHANGED:if(!t){var n=this.component.toolbox;n&&(n.silence(!0),n.setMagicType(e.magicType),n.silence(!1))}this._onmagicTypeChanged(e);break;case a.EVENT.DATA_VIEW_CHANGED:t&&this._ondataViewChanged(e);break;case a.EVENT.TOOLTIP_HOVER:t&&this._tooltipHover(e);break;case a.EVENT.RESTORE:this._onrestore();break;case a.EVENT.REFRESH:t&&this._onrefresh(e);break;case a.EVENT.TOOLTIP_IN_GRID:case a.EVENT.TOOLTIP_OUT_GRID:if(t){if(this._connected){var o=this.component.grid;o&&(e.x=(e.event.zrenderX-o.getX())/o.getWidth(),e.y=(e.event.zrenderY-o.getY())/o.getHeight())}}else{var o=this.component.grid;o&&this._zr.trigger("mousemove",{connectTrigger:!0,zrenderX:o.getX()+e.x*o.getWidth(),zrenderY:o.getY()+e.y*o.getHeight()})}}if(this._connected&&t&&this._curEventType===e.type){for(var r in this._connected)this._connected[r].connectedEventHandler(e);this._curEventType=null}(!t||!this._connected&&t)&&(this._curEventType=null)},_onclick:function(e){if(n(this,"onclick",e),e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.CLICK,e.event,t,this)}},_ondblclick:function(e){if(n(this,"ondblclick",e),e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.DBLCLICK,e.event,t,this)}},_onmouseover:function(e){if(e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.HOVER,e.event,t,this)}},_onmouseout:function(e){if(e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.MOUSEOUT,e.event,t,this)}},_ondragstart:function(e){this._status={dragIn:!1,dragOut:!1,needRefresh:!1},n(this,"ondragstart",e)},_ondragenter:function(e){n(this,"ondragenter",e)},_ondragover:function(e){n(this,"ondragover",e)},_ondragleave:function(e){n(this,"ondragleave",e)},_ondrop:function(e){n(this,"ondrop",e,this._status),this._island.ondrop(e,this._status)},_ondragend:function(e){if(n(this,"ondragend",e,this._status),this._timeline&&this._timeline.ondragend(e,this._status),this._island.ondragend(e,this._status),this._status.needRefresh){this._syncBackupData(this._option);var t=this._messageCenter;t.dispatch(a.EVENT.DATA_CHANGED,e.event,this._eventPackage(e.target),this),t.dispatch(a.EVENT.REFRESH,null,null,this)}},_onlegendSelected:function(e){this._status.needRefresh=!1,n(this,"onlegendSelected",e,this._status),this._status.needRefresh&&this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_ondataZoom:function(e){this._status.needRefresh=!1,n(this,"ondataZoom",e,this._status),this._status.needRefresh&&this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_ondataRange:function(e){this._clearEffect(),this._status.needRefresh=!1,n(this,"ondataRange",e,this._status),this._status.needRefresh&&this._zr.refreshNextFrame()},_onmagicTypeChanged:function(){this._clearEffect(),this._render(this._toolbox.getMagicOption())},_ondataViewChanged:function(e){this._syncBackupData(e.option),this._messageCenter.dispatch(a.EVENT.DATA_CHANGED,null,e,this),this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_tooltipHover:function(e){var t=[];n(this,"ontooltipHover",e,t)},_onrestore:function(){this.restore()},_onrefresh:function(e){this._refreshInside=!0,this.refresh(e),this._refreshInside=!1},_syncBackupData:function(e){this.component.dataZoom&&this.component.dataZoom.syncBackupData(e)},_eventPackage:function(t){if(t){var i=e("./util/ecData"),n=i.get(t,"seriesIndex"),a=i.get(t,"dataIndex");return a=-1!=n&&this.component.dataZoom?this.component.dataZoom.getRealDataIndex(n,a):a,{seriesIndex:n,seriesName:(i.get(t,"series")||{}).name,dataIndex:a,data:i.get(t,"data"),name:i.get(t,"name"),value:i.get(t,"value"),special:i.get(t,"special")}}},_noDataCheck:function(e){for(var t=e.series,i=0,n=t.length;n>i;i++)if(t[i].type==a.CHART_TYPE_MAP||t[i].data&&t[i].data.length>0||t[i].markPoint&&t[i].markPoint.data&&t[i].markPoint.data.length>0||t[i].markLine&&t[i].markLine.data&&t[i].markLine.data.length>0||t[i].nodes&&t[i].nodes.length>0||t[i].links&&t[i].links.length>0||t[i].matrix&&t[i].matrix.length>0||t[i].eventList&&t[i].eventList.length>0)return!1;var o=this._option&&this._option.noDataLoadingOption||this._themeConfig.noDataLoadingOption||a.noDataLoadingOption||{text:this._option&&this._option.noDataText||this._themeConfig.noDataText||a.noDataText,effect:this._option&&this._option.noDataEffect||this._themeConfig.noDataEffect||a.noDataEffect};return this.clear(),this.showLoading(o),!0},_render:function(t){if(this._mergeGlobalConifg(t),!this._noDataCheck(t)){var i=t.backgroundColor;if(i)if(l||-1==i.indexOf("rgba"))this.dom.style.backgroundColor=i;else{var n=i.split(",");this.dom.style.filter="alpha(opacity="+100*n[3].substring(0,n[3].lastIndexOf(")"))+")",n.length=3,n[0]=n[0].replace("a",""),this.dom.style.backgroundColor=n.join(",")+")"}this._zr.clearAnimation(),this._chartList=[];var o=e("./chart"),r=e("./component");(t.xAxis||t.yAxis)&&(t.grid=t.grid||{},t.dataZoom=t.dataZoom||{});for(var s,h,m,V=["title","legend","tooltip","dataRange","roamController","grid","dataZoom","xAxis","yAxis","polar"],U=0,d=V.length;d>U;U++)h=V[U],m=this.component[h],t[h]?(m?m.refresh&&m.refresh(t):(s=r.get(/^[xy]Axis$/.test(h)?"axis":h),m=new s(this._themeConfig,this._messageCenter,this._zr,t,this,h),this.component[h]=m),this._chartList.push(m)):m&&(m.dispose(),this.component[h]=null,delete this.component[h]);for(var p,c,u,y={},U=0,d=t.series.length;d>U;U++)c=t.series[U].type,c?y[c]||(y[c]=!0,p=o.get(c),p?(this.chart[c]?(u=this.chart[c],u.refresh(t)):u=new p(this._themeConfig,this._messageCenter,this._zr,t,this),this._chartList.push(u),this.chart[c]=u):console.error(c+" has not been required.")):console.error("series["+U+"] chart type has not been defined.");for(c in this.chart)c==a.CHART_TYPE_ISLAND||y[c]||(this.chart[c].dispose(),this.chart[c]=null,delete this.chart[c]);this.component.grid&&this.component.grid.refixAxisShape(this.component),this._island.refresh(t),this._toolbox.refresh(t),t.animation&&!t.renderAsImage?this._zr.refresh():this._zr.render();var g="IMG"+this.id,b=document.getElementById(g);t.renderAsImage&&l?(b?b.src=this.getDataURL(t.renderAsImage):(b=this.getImage(t.renderAsImage),b.id=g,b.style.position="absolute",b.style.left=0,b.style.top=0,this.dom.firstChild.appendChild(b)),this.un(),this._zr.un(),this._disposeChartList(),this._zr.clear()):b&&b.parentNode.removeChild(b),b=null,this._option=t}},restore:function(){this._clearEffect(),this._option=o.clone(this._optionRestore),this._disposeChartList(),this._island.clear(),this._toolbox.reset(this._option,!0),this._render(this._option)},refresh:function(e){this._clearEffect(),e=e||{};var t=e.option;!this._refreshInside&&t&&(t=this.getOption(),o.merge(t,e.option,!0),o.merge(this._optionRestore,e.option,!0),this._toolbox.reset(t)),this._island.refresh(t),this._toolbox.refresh(t),this._zr.clearAnimation();for(var i=0,n=this._chartList.length;n>i;i++)this._chartList[i].refresh&&this._chartList[i].refresh(t);this.component.grid&&this.component.grid.refixAxisShape(this.component),this._zr.refresh()},_disposeChartList:function(){this._clearEffect(),this._zr.clearAnimation();for(var e=this._chartList.length;e--;){var t=this._chartList[e];if(t){var i=t.type;this.chart[i]&&delete this.chart[i],this.component[i]&&delete this.component[i],t.dispose&&t.dispose()}}this._chartList=[]},_mergeGlobalConifg:function(t){for(var i=["backgroundColor","calculable","calculableColor","calculableHolderColor","nameConnector","valueConnector","animation","animationThreshold","animationDuration","animationDurationUpdate","animationEasing","addDataAnimation","symbolList","DRAG_ENABLE_TIME"],n=i.length;n--;){var o=i[n];null==t[o]&&(t[o]=null!=this._themeConfig[o]?this._themeConfig[o]:a[o])}var r=t.color;r&&r.length||(r=this._themeConfig.color||a.color),this._zr.getColor=function(t){var i=e("zrender/tool/color");return i.getColor(t,r)},l||(t.animation=!1,t.addDataAnimation=!1)},setOption:function(e,t){return e.timeline?this._setTimelineOption(e):this._setOption(e,t)},_setOption:function(e,t,i){return!t&&this._option?this._option=o.merge(this.getOption(),o.clone(e),!0):(this._option=o.clone(e),!i&&this._timeline&&this._timeline.dispose()),this._optionRestore=o.clone(this._option),this._option.series&&0!==this._option.series.length?(this.component.dataZoom&&(this._option.dataZoom||this._option.toolbox&&this._option.toolbox.feature&&this._option.toolbox.feature.dataZoom&&this._option.toolbox.feature.dataZoom.show)&&this.component.dataZoom.syncOption(this._option),this._toolbox.reset(this._option),this._render(this._option),this):void this._zr.clear()},getOption:function(){function e(e){var n=i._optionRestore[e];if(n)if(n instanceof Array)for(var a=n.length;a--;)t[e][a].data=o.clone(n[a].data);else t[e].data=o.clone(n.data)}var t=o.clone(this._option),i=this;return e("xAxis"),e("yAxis"),e("series"),t},setSeries:function(e,t){return t?(this._option.series=e,this.setOption(this._option,t)):this.setOption({series:e}),this},getSeries:function(){return this.getOption().series},_setTimelineOption:function(t){this._timeline&&this._timeline.dispose();var i=e("./component/timeline"),n=new i(this._themeConfig,this._messageCenter,this._zr,t,this);return this._timeline=n,this.component.timeline=this._timeline,this},addData:function(e,t,i,n,r){function s(){if(V._zr){V._zr.clearAnimation();for(var e=0,t=X.length;t>e;e++)X[e].motionlessOnce=h.addDataAnimation&&X[e].addDataAnimation;V._messageCenter.dispatch(a.EVENT.REFRESH,null,{option:h},V)}}for(var l=e instanceof Array?e:[[e,t,i,n,r]],h=this.getOption(),m=this._optionRestore,V=this,U=0,d=l.length;d>U;U++){e=l[U][0],t=l[U][1],i=l[U][2],n=l[U][3],r=l[U][4];var p=m.series[e],c=i?"unshift":"push",u=i?"pop":"shift";if(p){var y=p.data,g=h.series[e].data;if(y[c](t),g[c](t),n||(y[u](),t=g[u]()),null!=r){var b,f;if(p.type===a.CHART_TYPE_PIE&&(b=m.legend)&&(f=b.data)){var k=h.legend.data;if(f[c](r),k[c](r),!n){var x=o.indexOf(f,t.name);-1!=x&&f.splice(x,1),x=o.indexOf(k,t.name),-1!=x&&k.splice(x,1)}}else if(null!=m.xAxis&&null!=m.yAxis){var _,L,W=p.xAxisIndex||0;(null==m.xAxis[W].type||"category"===m.xAxis[W].type)&&(_=m.xAxis[W].data,L=h.xAxis[W].data,_[c](r),L[c](r),n||(_[u](),L[u]())),W=p.yAxisIndex||0,"category"===m.yAxis[W].type&&(_=m.yAxis[W].data,L=h.yAxis[W].data,_[c](r),L[c](r),n||(_[u](),L[u]()))}}this._option.series[e].data=h.series[e].data}}this._zr.clearAnimation();for(var X=this._chartList,v=0,w=function(){v--,0===v&&s()},U=0,d=X.length;d>U;U++)h.addDataAnimation&&X[U].addDataAnimation&&(v++,X[U].addDataAnimation(l,w));return this.component.dataZoom&&this.component.dataZoom.syncOption(h),this._option=h,h.addDataAnimation||setTimeout(s,0),this},addMarkPoint:function(e,t){return this._addMark(e,t,"markPoint")},addMarkLine:function(e,t){return this._addMark(e,t,"markLine")},_addMark:function(e,t,i){var n,a=this._option.series;if(a&&(n=a[e])){var r=this._optionRestore.series,s=r[e],l=n[i],h=s[i];l=n[i]=l||{data:[]},h=s[i]=h||{data:[]};for(var m in t)"data"===m?(l.data=l.data.concat(t.data),h.data=h.data.concat(t.data)):"object"!=typeof t[m]||null==l[m]?l[m]=h[m]=t[m]:(o.merge(l[m],t[m],!0),o.merge(h[m],t[m],!0));var V=this.chart[n.type];V&&V.addMark(e,t,i)}return this},delMarkPoint:function(e,t){return this._delMark(e,t,"markPoint")},delMarkLine:function(e,t){return this._delMark(e,t,"markLine")},_delMark:function(e,t,i){var n,a,o,r=this._option.series;if(!(r&&(n=r[e])&&(a=n[i])&&(o=a.data)))return this;t=t.split(" > ");for(var s=-1,l=0,h=o.length;h>l;l++){var m=o[l];if(m instanceof Array){if(m[0].name===t[0]&&m[1].name===t[1]){s=l;break}}else if(m.name===t[0]){s=l;break}}if(s>-1){o.splice(s,1),this._optionRestore.series[e][i].data.splice(s,1);var V=this.chart[n.type];V&&V.delMark(e,t.join(" > "),i)}return this},getDom:function(){return this.dom},getZrender:function(){return this._zr},getDataURL:function(e){if(!l)return"";if(0===this._chartList.length){var t="IMG"+this.id,i=document.getElementById(t);if(i)return i.src}var n=this.component.tooltip;switch(n&&n.hideTip(),e){case"jpeg":break;default:e="png"}var a=this._option.backgroundColor;return a&&"rgba(0,0,0,0)"===a.replace(" ","")&&(a="#fff"),this._zr.toDataURL("image/"+e,a)},getImage:function(e){var t=this._optionRestore.title,i=document.createElement("img");return i.src=this.getDataURL(e),i.title=t&&t.text||"ECharts",i},getConnectedDataURL:function(t){if(!this.isConnected())return this.getDataURL(t);var i=this.dom,n={self:{img:this.getDataURL(t),left:i.offsetLeft,top:i.offsetTop,right:i.offsetLeft+i.offsetWidth,bottom:i.offsetTop+i.offsetHeight}},a=n.self.left,o=n.self.top,r=n.self.right,s=n.self.bottom;for(var l in this._connected)i=this._connected[l].getDom(),n[l]={img:this._connected[l].getDataURL(t),left:i.offsetLeft,top:i.offsetTop,right:i.offsetLeft+i.offsetWidth,bottom:i.offsetTop+i.offsetHeight},a=Math.min(a,n[l].left),o=Math.min(o,n[l].top),r=Math.max(r,n[l].right),s=Math.max(s,n[l].bottom);var h=document.createElement("div");h.style.position="absolute",h.style.left="-4000px",h.style.width=r-a+"px",h.style.height=s-o+"px",document.body.appendChild(h);var m=e("zrender").init(h),V=e("zrender/shape/Image");for(var l in n)m.addShape(new V({style:{x:n[l].left-a,y:n[l].top-o,image:n[l].img}}));m.render();var U=this._option.backgroundColor;U&&"rgba(0,0,0,0)"===U.replace(/ /g,"")&&(U="#fff");var d=m.toDataURL("image/png",U);return setTimeout(function(){m.dispose(),h.parentNode.removeChild(h),h=null},100),d},getConnectedImage:function(e){var t=this._optionRestore.title,i=document.createElement("img");return i.src=this.getConnectedDataURL(e),i.title=t&&t.text||"ECharts",i},on:function(e,t){return this._messageCenterOutSide.bind(e,t,this),this},un:function(e,t){return this._messageCenterOutSide.unbind(e,t),this},connect:function(e){if(!e)return this;if(this._connected||(this._connected={}),e instanceof Array)for(var t=0,i=e.length;i>t;t++)this._connected[e[t].id]=e[t];else this._connected[e.id]=e;return this},disConnect:function(e){if(!e||!this._connected)return this;if(e instanceof Array)for(var t=0,i=e.length;i>t;t++)delete this._connected[e[t].id];else delete this._connected[e.id];for(var n in this._connected)return this;return this._connected=!1,this},connectedEventHandler:function(e){e.__echartsId!=this.id&&this._onevent(e)},isConnected:function(){return!!this._connected},showLoading:function(t){var i={bar:e("zrender/loadingEffect/Bar"),bubble:e("zrender/loadingEffect/Bubble"),dynamicLine:e("zrender/loadingEffect/DynamicLine"),ring:e("zrender/loadingEffect/Ring"),spin:e("zrender/loadingEffect/Spin"),whirling:e("zrender/loadingEffect/Whirling")};this._toolbox.hideDataView(),t=t||{};var n=t.textStyle||{};t.textStyle=n;var r=o.merge(o.merge(o.clone(n),this._themeConfig.textStyle),a.textStyle);n.textFont=r.fontStyle+" "+r.fontWeight+" "+r.fontSize+"px "+r.fontFamily,n.text=t.text||this._option&&this._option.loadingText||this._themeConfig.loadingText||a.loadingText,null!=t.x&&(n.x=t.x),null!=t.y&&(n.y=t.y),t.effectOption=t.effectOption||{},t.effectOption.textStyle=n;var s=t.effect;return("string"==typeof s||null==s)&&(s=i[t.effect||this._option&&this._option.loadingEffect||this._themeConfig.loadingEffect||a.loadingEffect]||i.spin),this._zr.showLoading(new s(t.effectOption)),this},hideLoading:function(){return this._zr.hideLoading(),this},setTheme:function(t){if(t){if("string"==typeof t)switch(t){case"macarons":t=e("./theme/macarons");break;case"infographic":t=e("./theme/infographic");break;default:t={}}else t=t||{};this._themeConfig=t}if(!l){var i=this._themeConfig.textStyle;i&&i.fontFamily&&i.fontFamily2&&(i.fontFamily=i.fontFamily2),i=a.textStyle,i.fontFamily=i.fontFamily2}this._timeline&&this._timeline.setTheme(!0),this._optionRestore&&this.restore()},resize:function(){var e=this;return function(){if(e._clearEffect(),e._zr.resize(),e._option&&e._option.renderAsImage&&l)return e._render(e._option),e;e._zr.clearAnimation(),e._island.resize(),e._toolbox.resize(),e._timeline&&e._timeline.resize();for(var t=0,i=e._chartList.length;i>t;t++)e._chartList[t].resize&&e._chartList[t].resize();return e.component.grid&&e.component.grid.refixAxisShape(e.component),e._zr.refresh(),e._messageCenter.dispatch(a.EVENT.RESIZE,null,null,e),e}},_clearEffect:function(){this._zr.modLayer(a.EFFECT_ZLEVEL,{motionBlur:!1}),this._zr.painter.clearLayer(a.EFFECT_ZLEVEL)},clear:function(){return this._disposeChartList(),this._zr.clear(),this._option={},this._optionRestore={},this.dom.style.backgroundColor=null,this},dispose:function(){var e=this.dom.getAttribute(V);e&&delete m[e],this._island.dispose(),this._toolbox.dispose(),this._timeline&&this._timeline.dispose(),this._messageCenter.unbind(),this.clear(),this._zr.dispose(),this._zr=null}},s}),i("echarts/config",[],function(){var e={CHART_TYPE_LINE:"line",CHART_TYPE_BAR:"bar",CHART_TYPE_SCATTER:"scatter",CHART_TYPE_PIE:"pie",CHART_TYPE_RADAR:"radar",CHART_TYPE_VENN:"venn",CHART_TYPE_TREEMAP:"treemap",CHART_TYPE_TREE:"tree",CHART_TYPE_MAP:"map",CHART_TYPE_K:"k",CHART_TYPE_ISLAND:"island",CHART_TYPE_FORCE:"force",CHART_TYPE_CHORD:"chord",CHART_TYPE_GAUGE:"gauge",CHART_TYPE_FUNNEL:"funnel",CHART_TYPE_EVENTRIVER:"eventRiver",CHART_TYPE_WORDCLOUD:"wordCloud",CHART_TYPE_HEATMAP:"heatmap",COMPONENT_TYPE_TITLE:"title",COMPONENT_TYPE_LEGEND:"legend",COMPONENT_TYPE_DATARANGE:"dataRange",COMPONENT_TYPE_DATAVIEW:"dataView",COMPONENT_TYPE_DATAZOOM:"dataZoom",COMPONENT_TYPE_TOOLBOX:"toolbox",COMPONENT_TYPE_TOOLTIP:"tooltip",COMPONENT_TYPE_GRID:"grid",COMPONENT_TYPE_AXIS:"axis",COMPONENT_TYPE_POLAR:"polar",COMPONENT_TYPE_X_AXIS:"xAxis",COMPONENT_TYPE_Y_AXIS:"yAxis",COMPONENT_TYPE_AXIS_CATEGORY:"categoryAxis",COMPONENT_TYPE_AXIS_VALUE:"valueAxis",COMPONENT_TYPE_TIMELINE:"timeline",COMPONENT_TYPE_ROAMCONTROLLER:"roamController",backgroundColor:"rgba(0,0,0,0)",color:["#ff7f50","#87cefa","#da70d6","#32cd32","#6495ed","#ff69b4","#ba55d3","#cd5c5c","#ffa500","#40e0d0","#1e90ff","#ff6347","#7b68ee","#00fa9a","#ffd700","#6699FF","#ff6666","#3cb371","#b8860b","#30e0e0"],markPoint:{clickable:!0,symbol:"pin",symbolSize:10,large:!1,effect:{show:!1,loop:!0,period:15,type:"scale",scaleSize:2,bounceDistance:10},itemStyle:{normal:{borderWidth:2,label:{show:!0,position:"inside"}},emphasis:{label:{show:!0}}}},markLine:{clickable:!0,symbol:["circle","arrow"],symbolSize:[2,4],smoothness:.2,precision:2,effect:{show:!1,loop:!0,period:15,scaleSize:2},bundling:{enable:!1,maxTurningAngle:45},itemStyle:{normal:{borderWidth:1.5,label:{show:!0,position:"end"},lineStyle:{type:"dashed"}},emphasis:{label:{show:!1},lineStyle:{}}}},textStyle:{decoration:"none",fontFamily:"Arial, Verdana, sans-serif",fontFamily2:"微软雅黑",fontSize:12,fontStyle:"normal",fontWeight:"normal"},EVENT:{REFRESH:"refresh",RESTORE:"restore",RESIZE:"resize",CLICK:"click",DBLCLICK:"dblclick",HOVER:"hover",MOUSEOUT:"mouseout",DATA_CHANGED:"dataChanged",DATA_ZOOM:"dataZoom",DATA_RANGE:"dataRange",DATA_RANGE_SELECTED:"dataRangeSelected",DATA_RANGE_HOVERLINK:"dataRangeHoverLink",LEGEND_SELECTED:"legendSelected",LEGEND_HOVERLINK:"legendHoverLink",MAP_SELECTED:"mapSelected",PIE_SELECTED:"pieSelected",MAGIC_TYPE_CHANGED:"magicTypeChanged",DATA_VIEW_CHANGED:"dataViewChanged",TIMELINE_CHANGED:"timelineChanged",MAP_ROAM:"mapRoam",FORCE_LAYOUT_END:"forceLayoutEnd",TOOLTIP_HOVER:"tooltipHover",TOOLTIP_IN_GRID:"tooltipInGrid",TOOLTIP_OUT_GRID:"tooltipOutGrid",ROAMCONTROLLER:"roamController"},DRAG_ENABLE_TIME:120,EFFECT_ZLEVEL:10,effectBlendAlpha:.95,symbolList:["circle","rectangle","triangle","diamond","emptyCircle","emptyRectangle","emptyTriangle","emptyDiamond"],loadingEffect:"spin",loadingText:"数据读取中...",noDataEffect:"bubble",noDataText:"暂无数据",calculable:!1,calculableColor:"rgba(255,165,0,0.6)",calculableHolderColor:"#ccc",nameConnector:" & ",valueConnector:": ",animation:!0,addDataAnimation:!0,animationThreshold:2e3,animationDuration:2e3,animationDurationUpdate:500,animationEasing:"ExponentialOut"};return e}),i("zrender/tool/util",["require","../dep/excanvas"],function(e){function t(e){return e&&1===e.nodeType&&"string"==typeof e.nodeName}function i(e){if("object"==typeof e&&null!==e){var n=e;if(e instanceof Array){n=[];for(var a=0,o=e.length;o>a;a++)n[a]=i(e[a])}else if(!y[g.call(e)]&&!t(e)){n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]=i(e[r]))}return n}return e}function n(e,i,n,o){if(i.hasOwnProperty(n)){var r=e[n];"object"!=typeof r||y[g.call(r)]||t(r)?!o&&n in e||(e[n]=i[n]):a(e[n],i[n],o)}}function a(e,t,i){for(var a in t)n(e,t,a,i);return e}function o(){if(!U)if(e("../dep/excanvas"),window.G_vmlCanvasManager){var t=document.createElement("div");t.style.position="absolute",t.style.top="-1000px",document.body.appendChild(t),U=G_vmlCanvasManager.initElement(t).getContext("2d")}else U=document.createElement("canvas").getContext("2d");return U}function r(e,t){if(e.indexOf)return e.indexOf(t);for(var i=0,n=e.length;n>i;i++)if(e[i]===t)return i;return-1}function s(e,t){function i(){}var n=e.prototype;i.prototype=t.prototype,e.prototype=new i;for(var a in n)e.prototype[a]=n[a];e.constructor=e}function l(e,t,i){if(e&&t)if(e.forEach&&e.forEach===p)e.forEach(t,i);else if(e.length===+e.length)for(var n=0,a=e.length;a>n;n++)t.call(i,e[n],n,e);else for(var o in e)e.hasOwnProperty(o)&&t.call(i,e[o],o,e)}function h(e,t,i){if(e&&t){if(e.map&&e.map===c)return e.map(t,i);for(var n=[],a=0,o=e.length;o>a;a++)n.push(t.call(i,e[a],a,e));return n}}function m(e,t,i){if(e&&t){if(e.filter&&e.filter===u)return e.filter(t,i);for(var n=[],a=0,o=e.length;o>a;a++)t.call(i,e[a],a,e)&&n.push(e[a]);return n}}function V(e,t){return function(){e.apply(t,arguments)}}var U,d=Array.prototype,p=d.forEach,c=d.map,u=d.filter,y={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1},g=Object.prototype.toString;return{inherits:s,clone:i,merge:a,getContext:o,indexOf:r,each:l,map:h,filter:m,bind:V}}),i("zrender/tool/event",["require","../mixin/Eventful"],function(e){"use strict";function t(e){return"undefined"!=typeof e.zrenderX&&e.zrenderX||"undefined"!=typeof e.offsetX&&e.offsetX||"undefined"!=typeof e.layerX&&e.layerX||"undefined"!=typeof e.clientX&&e.clientX}function i(e){return"undefined"!=typeof e.zrenderY&&e.zrenderY||"undefined"!=typeof e.offsetY&&e.offsetY||"undefined"!=typeof e.layerY&&e.layerY||"undefined"!=typeof e.clientY&&e.clientY}function n(e){return"undefined"!=typeof e.zrenderDelta&&e.zrenderDelta||"undefined"!=typeof e.wheelDelta&&e.wheelDelta||"undefined"!=typeof e.detail&&-e.detail}var a=e("../mixin/Eventful"),o="function"==typeof window.addEventListener?function(e){e.preventDefault(),e.stopPropagation(),e.cancelBubble=!0}:function(e){e.returnValue=!1,e.cancelBubble=!0};return{getX:t,getY:i,getDelta:n,stop:o,Dispatcher:a}}),i("zrender/tool/env",[],function(){function e(e){var t=this.os={},i=this.browser={},n=e.match(/Web[kK]it[\/]{0,1}([\d.]+)/),a=e.match(/(Android);?[\s\/]+([\d.]+)?/),o=e.match(/(iPad).*OS\s([\d_]+)/),r=e.match(/(iPod)(.*OS\s([\d_]+))?/),s=!o&&e.match(/(iPhone\sOS)\s([\d_]+)/),l=e.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),h=l&&e.match(/TouchPad/),m=e.match(/Kindle\/([\d.]+)/),V=e.match(/Silk\/([\d._]+)/),U=e.match(/(BlackBerry).*Version\/([\d.]+)/),d=e.match(/(BB10).*Version\/([\d.]+)/),p=e.match(/(RIM\sTablet\sOS)\s([\d.]+)/),c=e.match(/PlayBook/),u=e.match(/Chrome\/([\d.]+)/)||e.match(/CriOS\/([\d.]+)/),y=e.match(/Firefox\/([\d.]+)/),g=e.match(/MSIE ([\d.]+)/),b=n&&e.match(/Mobile\//)&&!u,f=e.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/)&&!u,g=e.match(/MSIE\s([\d.]+)/);return(i.webkit=!!n)&&(i.version=n[1]),a&&(t.android=!0,t.version=a[2]),s&&!r&&(t.ios=t.iphone=!0,t.version=s[2].replace(/_/g,".")),o&&(t.ios=t.ipad=!0,t.version=o[2].replace(/_/g,".")),r&&(t.ios=t.ipod=!0,t.version=r[3]?r[3].replace(/_/g,"."):null),l&&(t.webos=!0,t.version=l[2]),h&&(t.touchpad=!0),U&&(t.blackberry=!0,t.version=U[2]),d&&(t.bb10=!0,t.version=d[2]),p&&(t.rimtabletos=!0,t.version=p[2]),c&&(i.playbook=!0),m&&(t.kindle=!0,t.version=m[1]),V&&(i.silk=!0,i.version=V[1]),!V&&t.android&&e.match(/Kindle Fire/)&&(i.silk=!0),u&&(i.chrome=!0,i.version=u[1]),y&&(i.firefox=!0,i.version=y[1]),g&&(i.ie=!0,i.version=g[1]),b&&(e.match(/Safari/)||t.ios)&&(i.safari=!0),f&&(i.webview=!0),g&&(i.ie=!0,i.version=g[1]),t.tablet=!!(o||c||a&&!e.match(/Mobile/)||y&&e.match(/Tablet/)||g&&!e.match(/Phone/)&&e.match(/Touch/)),t.phone=!(t.tablet||t.ipod||!(a||s||l||U||d||u&&e.match(/Android/)||u&&e.match(/CriOS\/([\d.]+)/)||y&&e.match(/Mobile/)||g&&e.match(/Touch/))),{browser:i,os:t,canvasSupported:document.createElement("canvas").getContext?!0:!1}}return e(navigator.userAgent)}),i("zrender",["zrender/zrender"],function(e){return e}),i("zrender/zrender",["require","./dep/excanvas","./tool/util","./tool/log","./tool/guid","./Handler","./Painter","./Storage","./animation/Animation","./tool/env"],function(e){function t(e){return function(){e._needsRefreshNextFrame&&e.refresh()}}e("./dep/excanvas");var i=e("./tool/util"),n=e("./tool/log"),a=e("./tool/guid"),o=e("./Handler"),r=e("./Painter"),s=e("./Storage"),l=e("./animation/Animation"),h={},m={};m.version="2.1.1",m.init=function(e){var t=new V(a(),e);return h[t.id]=t,t},m.dispose=function(e){if(e)e.dispose();else{for(var t in h)h[t].dispose();h={}}return m},m.getInstance=function(e){return h[e]},m.delInstance=function(e){return delete h[e],m};var V=function(i,n){this.id=i,this.env=e("./tool/env"),this.storage=new s,this.painter=new r(n,this.storage),this.handler=new o(n,this.storage,this.painter),this.animation=new l({stage:{update:t(this)}}),this.animation.start();var a=this;this.painter.refreshNextFrame=function(){a.refreshNextFrame()},this._needsRefreshNextFrame=!1;var a=this,h=this.storage,m=h.delFromMap;h.delFromMap=function(e){var t=h.get(e);a.stopAnimation(t),m.call(h,e)}};return V.prototype.getId=function(){return this.id},V.prototype.addShape=function(e){return this.addElement(e),this},V.prototype.addGroup=function(e){return this.addElement(e),this},V.prototype.delShape=function(e){return this.delElement(e),this},V.prototype.delGroup=function(e){return this.delElement(e),this},V.prototype.modShape=function(e,t){return this.modElement(e,t),this},V.prototype.modGroup=function(e,t){return this.modElement(e,t),this},V.prototype.addElement=function(e){return this.storage.addRoot(e),this._needsRefreshNextFrame=!0,this},V.prototype.delElement=function(e){return this.storage.delRoot(e),this._needsRefreshNextFrame=!0,this},V.prototype.modElement=function(e,t){return this.storage.mod(e,t),this._needsRefreshNextFrame=!0,this},V.prototype.modLayer=function(e,t){return this.painter.modLayer(e,t),this._needsRefreshNextFrame=!0,this},V.prototype.addHoverShape=function(e){return this.storage.addHover(e),this},V.prototype.render=function(e){return this.painter.render(e),this._needsRefreshNextFrame=!1,this},V.prototype.refresh=function(e){return this.painter.refresh(e),this._needsRefreshNextFrame=!1,this},V.prototype.refreshNextFrame=function(){return this._needsRefreshNextFrame=!0,this},V.prototype.refreshHover=function(e){return this.painter.refreshHover(e),this},V.prototype.refreshShapes=function(e,t){return this.painter.refreshShapes(e,t),this},V.prototype.resize=function(){return this.painter.resize(),this},V.prototype.animate=function(e,t,a){var o=this;if("string"==typeof e&&(e=this.storage.get(e)),e){var r;if(t){for(var s=t.split("."),l=e,h=0,m=s.length;m>h;h++)l&&(l=l[s[h]]);l&&(r=l)}else r=e;if(!r)return void n('Property "'+t+'" is not existed in element '+e.id); + +null==e.__animators&&(e.__animators=[]);var V=e.__animators,U=this.animation.animate(r,{loop:a}).during(function(){o.modShape(e)}).done(function(){var t=i.indexOf(e.__animators,U);t>=0&&V.splice(t,1)});return V.push(U),U}n("Element not existed")},V.prototype.stopAnimation=function(e){if(e.__animators){for(var t=e.__animators,i=t.length,n=0;i>n;n++)t[n].stop();t.length=0}return this},V.prototype.clearAnimation=function(){return this.animation.clear(),this},V.prototype.showLoading=function(e){return this.painter.showLoading(e),this},V.prototype.hideLoading=function(){return this.painter.hideLoading(),this},V.prototype.getWidth=function(){return this.painter.getWidth()},V.prototype.getHeight=function(){return this.painter.getHeight()},V.prototype.toDataURL=function(e,t,i){return this.painter.toDataURL(e,t,i)},V.prototype.shapeToImage=function(e,t,i){var n=a();return this.painter.shapeToImage(n,e,t,i)},V.prototype.on=function(e,t,i){return this.handler.on(e,t,i),this},V.prototype.un=function(e,t){return this.handler.un(e,t),this},V.prototype.trigger=function(e,t){return this.handler.trigger(e,t),this},V.prototype.clear=function(){return this.storage.delRoot(),this.painter.clear(),this},V.prototype.dispose=function(){this.animation.stop(),this.clear(),this.storage.dispose(),this.painter.dispose(),this.handler.dispose(),this.animation=this.storage=this.painter=this.handler=null,m.delInstance(this.id)},m}),i("zrender/config",[],function(){var e={EVENT:{RESIZE:"resize",CLICK:"click",DBLCLICK:"dblclick",MOUSEWHEEL:"mousewheel",MOUSEMOVE:"mousemove",MOUSEOVER:"mouseover",MOUSEOUT:"mouseout",MOUSEDOWN:"mousedown",MOUSEUP:"mouseup",GLOBALOUT:"globalout",DRAGSTART:"dragstart",DRAGEND:"dragend",DRAGENTER:"dragenter",DRAGOVER:"dragover",DRAGLEAVE:"dragleave",DROP:"drop",touchClickDelay:300},elementClassName:"zr-element",catchBrushException:!1,debugMode:0,devicePixelRatio:Math.max(window.devicePixelRatio||1,1)};return e}),i("echarts/chart/island",["require","./base","zrender/shape/Circle","../config","../util/ecData","zrender/tool/util","zrender/tool/event","zrender/tool/color","../util/accMath","../chart"],function(e){function t(e,t,n,a,r){i.call(this,e,t,n,a,r),this._nameConnector,this._valueConnector,this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth();var l=this;l.shapeHandler.onmousewheel=function(e){var t=e.target,i=e.event,n=s.getDelta(i);n=n>0?-1:1,t.style.r-=n,t.style.r=t.style.r<5?5:t.style.r;var a=o.get(t,"value"),r=a*l.option.island.calculateStep;a=r>1?Math.round(a-r*n):+(a-r*n).toFixed(2);var h=o.get(t,"name");t.style.text=h+":"+a,o.set(t,"value",a),o.set(t,"name",h),l.zr.modShape(t.id),l.zr.refreshNextFrame(),s.stop(i)}}var i=e("./base"),n=e("zrender/shape/Circle"),a=e("../config");a.island={zlevel:0,z:5,r:15,calculateStep:.1};var o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/event");return t.prototype={type:a.CHART_TYPE_ISLAND,_combine:function(t,i){var n=e("zrender/tool/color"),a=e("../util/accMath"),r=a.accAdd(o.get(t,"value"),o.get(i,"value")),s=o.get(t,"name")+this._nameConnector+o.get(i,"name");t.style.text=s+this._valueConnector+r,o.set(t,"value",r),o.set(t,"name",s),t.style.r=this.option.island.r,t.style.color=n.mix(t.style.color,i.style.color)},refresh:function(e){e&&(e.island=this.reformOption(e.island),this.option=e,this._nameConnector=this.option.nameConnector,this._valueConnector=this.option.valueConnector)},getOption:function(){return this.option},resize:function(){var e=this.zr.getWidth(),t=this.zr.getHeight(),i=e/(this._zrWidth||e),n=t/(this._zrHeight||t);if(1!==i||1!==n){this._zrWidth=e,this._zrHeight=t;for(var a=0,o=this.shapeList.length;o>a;a++)this.zr.modShape(this.shapeList[a].id,{style:{x:Math.round(this.shapeList[a].style.x*i),y:Math.round(this.shapeList[a].style.y*n)}})}},add:function(e){var t=o.get(e,"name"),i=o.get(e,"value"),a=null!=o.get(e,"series")?o.get(e,"series").name:"",r=this.getFont(this.option.island.textStyle),s=this.option.island,l={zlevel:s.zlevel,z:s.z,style:{x:e.style.x,y:e.style.y,r:this.option.island.r,color:e.style.color||e.style.strokeColor,text:t+this._valueConnector+i,textFont:r},draggable:!0,hoverable:!0,onmousewheel:this.shapeHandler.onmousewheel,_type:"island"};"#fff"===l.style.color&&(l.style.color=e.style.strokeColor),this.setCalculable(l),l.dragEnableTime=0,o.pack(l,{name:a},-1,i,-1,t),l=new n(l),this.shapeList.push(l),this.zr.addShape(l)},del:function(e){this.zr.delShape(e.id);for(var t=[],i=0,n=this.shapeList.length;n>i;i++)this.shapeList[i].id!=e.id&&t.push(this.shapeList[i]);this.shapeList=t},ondrop:function(e,t){if(this.isDrop&&e.target){var i=e.target,n=e.dragged;this._combine(i,n),this.zr.modShape(i.id),t.dragIn=!0,this.isDrop=!1}},ondragend:function(e,t){var i=e.target;this.isDragend?t.dragIn&&(this.del(i),t.needRefresh=!0):t.dragIn||(i.style.x=s.getX(e.event),i.style.y=s.getY(e.event),this.add(i),t.needRefresh=!0),this.isDragend=!1}},r.inherits(t,i),e("../chart").define("island",t),t}),i("echarts/component/toolbox",["require","./base","zrender/shape/Line","zrender/shape/Image","zrender/shape/Rectangle","../util/shape/Icon","../config","zrender/tool/util","zrender/config","zrender/tool/event","./dataView","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._magicType={},this._magicMap={},this._isSilence=!1,this._iconList,this._iconShapeMap={},this._featureTitle={},this._featureIcon={},this._featureColor={},this._featureOption={},this._enableColor="red",this._disableColor="#ccc",this._markShapeList=[];var r=this;r._onMark=function(e){r.__onMark(e)},r._onMarkUndo=function(e){r.__onMarkUndo(e)},r._onMarkClear=function(e){r.__onMarkClear(e)},r._onDataZoom=function(e){r.__onDataZoom(e)},r._onDataZoomReset=function(e){r.__onDataZoomReset(e)},r._onDataView=function(e){r.__onDataView(e)},r._onRestore=function(e){r.__onRestore(e)},r._onSaveAsImage=function(e){r.__onSaveAsImage(e)},r._onMagicType=function(e){r.__onMagicType(e)},r._onCustomHandler=function(e){r.__onCustomHandler(e)},r._onmousemove=function(e){return r.__onmousemove(e)},r._onmousedown=function(e){return r.__onmousedown(e)},r._onmouseup=function(e){return r.__onmouseup(e)},r._onclick=function(e){return r.__onclick(e)}}var i=e("./base"),n=e("zrender/shape/Line"),a=e("zrender/shape/Image"),o=e("zrender/shape/Rectangle"),r=e("../util/shape/Icon"),s=e("../config");s.toolbox={zlevel:0,z:6,show:!1,orient:"horizontal",x:"right",y:"top",color:["#1e90ff","#22bb22","#4b0082","#d2691e"],disableColor:"#ddd",effectiveColor:"red",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemSize:16,showTitle:!0,feature:{mark:{show:!1,title:{mark:"辅助线开关",markUndo:"删除辅助线",markClear:"清空辅助线"},lineStyle:{width:1,color:"#1e90ff",type:"dashed"}},dataZoom:{show:!1,title:{dataZoom:"区域缩放",dataZoomReset:"区域缩放后退"}},dataView:{show:!1,title:"数据视图",readOnly:!1,lang:["数据视图","关闭","刷新"]},magicType:{show:!1,title:{line:"折线图切换",bar:"柱形图切换",stack:"堆积",tiled:"平铺",force:"力导向布局图切换",chord:"和弦图切换",pie:"饼图切换",funnel:"漏斗图切换"},type:[]},restore:{show:!1,title:"还原"},saveAsImage:{show:!1,title:"保存为图片",type:"png",lang:["点击保存"]}}};var l=e("zrender/tool/util"),h=e("zrender/config"),m=e("zrender/tool/event"),V="stack",U="tiled";return t.prototype={type:s.COMPONENT_TYPE_TOOLBOX,_buildShape:function(){this._iconList=[];var e=this.option.toolbox;this._enableColor=e.effectiveColor,this._disableColor=e.disableColor;var t=e.feature,i=[];for(var n in t)if(t[n].show)switch(n){case"mark":i.push({key:n,name:"mark"}),i.push({key:n,name:"markUndo"}),i.push({key:n,name:"markClear"});break;case"magicType":for(var a=0,o=t[n].type.length;o>a;a++)t[n].title[t[n].type[a]+"Chart"]=t[n].title[t[n].type[a]],t[n].option&&(t[n].option[t[n].type[a]+"Chart"]=t[n].option[t[n].type[a]]),i.push({key:n,name:t[n].type[a]+"Chart"});break;case"dataZoom":i.push({key:n,name:"dataZoom"}),i.push({key:n,name:"dataZoomReset"});break;case"saveAsImage":this.canvasSupported&&i.push({key:n,name:"saveAsImage"});break;default:i.push({key:n,name:n})}if(i.length>0){for(var r,n,a=0,o=i.length;o>a;a++)r=i[a].name,n=i[a].key,this._iconList.push(r),this._featureTitle[r]=t[n].title[r]||t[n].title,t[n].icon&&(this._featureIcon[r]=t[n].icon[r]||t[n].icon),t[n].color&&(this._featureColor[r]=t[n].color[r]||t[n].color),t[n].option&&(this._featureOption[r]=t[n].option[r]||t[n].option);this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var a=0,o=this.shapeList.length;o>a;a++)this.zr.addShape(this.shapeList[a]);this._iconShapeMap.mark&&(this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear)),this._iconShapeMap.dataZoomReset&&0===this._zoomQueue.length&&this._iconDisable(this._iconShapeMap.dataZoomReset)}},_buildItem:function(){var t,i,n,o,s=this.option.toolbox,l=this._iconList.length,h=this._itemGroupLocation.x,m=this._itemGroupLocation.y,V=s.itemSize,U=s.itemGap,d=s.color instanceof Array?s.color:[s.color],p=this.getFont(s.textStyle);"horizontal"===s.orient?(i=this._itemGroupLocation.y/this.zr.getHeight()<.5?"bottom":"top",n=this._itemGroupLocation.x/this.zr.getWidth()<.5?"left":"right",o=this._itemGroupLocation.y/this.zr.getHeight()<.5?"top":"bottom"):i=this._itemGroupLocation.x/this.zr.getWidth()<.5?"right":"left",this._iconShapeMap={};for(var c=this,u=0;l>u;u++){switch(t={type:"icon",zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:h,y:m,width:V,height:V,iconType:this._iconList[u],lineWidth:1,strokeColor:this._featureColor[this._iconList[u]]||d[u%d.length],brushType:"stroke"},highlightStyle:{lineWidth:1,text:s.showTitle?this._featureTitle[this._iconList[u]]:void 0,textFont:p,textPosition:i,strokeColor:this._featureColor[this._iconList[u]]||d[u%d.length]},hoverable:!0,clickable:!0},this._featureIcon[this._iconList[u]]&&(t.style.image=this._featureIcon[this._iconList[u]].replace(new RegExp("^image:\\/\\/"),""),t.style.opacity=.8,t.highlightStyle.opacity=1,t.type="image"),"horizontal"===s.orient&&(0===u&&"left"===n&&(t.highlightStyle.textPosition="specific",t.highlightStyle.textAlign=n,t.highlightStyle.textBaseline=o,t.highlightStyle.textX=h,t.highlightStyle.textY="top"===o?m+V+10:m-10),u===l-1&&"right"===n&&(t.highlightStyle.textPosition="specific",t.highlightStyle.textAlign=n,t.highlightStyle.textBaseline=o,t.highlightStyle.textX=h+V,t.highlightStyle.textY="top"===o?m+V+10:m-10)),this._iconList[u]){case"mark":t.onclick=c._onMark;break;case"markUndo":t.onclick=c._onMarkUndo;break;case"markClear":t.onclick=c._onMarkClear;break;case"dataZoom":t.onclick=c._onDataZoom;break;case"dataZoomReset":t.onclick=c._onDataZoomReset;break;case"dataView":if(!this._dataView){var y=e("./dataView");this._dataView=new y(this.ecTheme,this.messageCenter,this.zr,this.option,this.myChart)}t.onclick=c._onDataView;break;case"restore":t.onclick=c._onRestore;break;case"saveAsImage":t.onclick=c._onSaveAsImage;break;default:this._iconList[u].match("Chart")?(t._name=this._iconList[u].replace("Chart",""),t.onclick=c._onMagicType):t.onclick=c._onCustomHandler}"icon"===t.type?t=new r(t):"image"===t.type&&(t=new a(t)),this.shapeList.push(t),this._iconShapeMap[this._iconList[u]]=t,"horizontal"===s.orient?h+=V+U:m+=V+U}},_buildBackground:function(){var e=this.option.toolbox,t=this.reformCssArray(this.option.toolbox.padding);this.shapeList.push(new o({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-t[3],y:this._itemGroupLocation.y-t[0],width:this._itemGroupLocation.width+t[3]+t[1],height:this._itemGroupLocation.height+t[0]+t[2],brushType:0===e.borderWidth?"fill":"both",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}}))},_getItemGroupLocation:function(){var e=this.option.toolbox,t=this.reformCssArray(this.option.toolbox.padding),i=this._iconList.length,n=e.itemGap,a=e.itemSize,o=0,r=0;"horizontal"===e.orient?(o=(a+n)*i-n,r=a):(r=(a+n)*i-n,o=a);var s,l=this.zr.getWidth();switch(e.x){case"center":s=Math.floor((l-o)/2);break;case"left":s=t[3]+e.borderWidth;break;case"right":s=l-o-t[1]-e.borderWidth;break;default:s=e.x-0,s=isNaN(s)?0:s}var h,m=this.zr.getHeight();switch(e.y){case"top":h=t[0]+e.borderWidth;break;case"bottom":h=m-r-t[2]-e.borderWidth;break;case"center":h=Math.floor((m-r)/2);break;default:h=e.y-0,h=isNaN(h)?0:h}return{x:s,y:h,width:o,height:r}},__onmousemove:function(e){this._marking&&(this._markShape.style.xEnd=m.getX(e.event),this._markShape.style.yEnd=m.getY(e.event),this.zr.addHoverShape(this._markShape)),this._zooming&&(this._zoomShape.style.width=m.getX(e.event)-this._zoomShape.style.x,this._zoomShape.style.height=m.getY(e.event)-this._zoomShape.style.y,this.zr.addHoverShape(this._zoomShape),this.dom.style.cursor="crosshair",m.stop(e.event)),this._zoomStart&&"pointer"!=this.dom.style.cursor&&"move"!=this.dom.style.cursor&&(this.dom.style.cursor="crosshair")},__onmousedown:function(e){if(!e.target){this._zooming=!0;var t=m.getX(e.event),i=m.getY(e.event),n=this.option.dataZoom||{};return this._zoomShape=new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:t,y:i,width:1,height:1,brushType:"both"},highlightStyle:{lineWidth:2,color:n.fillerColor||s.dataZoom.fillerColor,strokeColor:n.handleColor||s.dataZoom.handleColor,brushType:"both"}}),this.zr.addHoverShape(this._zoomShape),!0}},__onmouseup:function(){if(!this._zoomShape||Math.abs(this._zoomShape.style.width)<10||Math.abs(this._zoomShape.style.height)<10)return this._zooming=!1,!0;if(this._zooming&&this.component.dataZoom){this._zooming=!1;var e=this.component.dataZoom.rectZoom(this._zoomShape.style);e&&(this._zoomQueue.push({start:e.start,end:e.end,start2:e.start2,end2:e.end2}),this._iconEnable(this._iconShapeMap.dataZoomReset),this.zr.refreshNextFrame())}return!0},__onclick:function(e){if(!e.target)if(this._marking)this._marking=!1,this._markShapeList.push(this._markShape),this._iconEnable(this._iconShapeMap.markUndo),this._iconEnable(this._iconShapeMap.markClear),this.zr.addShape(this._markShape),this.zr.refreshNextFrame();else if(this._markStart){this._marking=!0;var t=m.getX(e.event),i=m.getY(e.event);this._markShape=new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{xStart:t,yStart:i,xEnd:t,yEnd:i,lineWidth:this.query(this.option,"toolbox.feature.mark.lineStyle.width"),strokeColor:this.query(this.option,"toolbox.feature.mark.lineStyle.color"),lineType:this.query(this.option,"toolbox.feature.mark.lineStyle.type")}}),this.zr.addHoverShape(this._markShape)}},__onMark:function(e){var t=e.target;if(this._marking||this._markStart)this._resetMark(),this.zr.refreshNextFrame();else{this._resetZoom(),this.zr.modShape(t.id,{style:{strokeColor:this._enableColor}}),this.zr.refreshNextFrame(),this._markStart=!0;var i=this;setTimeout(function(){i.zr&&i.zr.on(h.EVENT.CLICK,i._onclick)&&i.zr.on(h.EVENT.MOUSEMOVE,i._onmousemove)},10)}return!0},__onMarkUndo:function(){if(this._marking)this._marking=!1;else{var e=this._markShapeList.length;if(e>=1){var t=this._markShapeList[e-1];this.zr.delShape(t.id),this.zr.refreshNextFrame(),this._markShapeList.pop(),1===e&&(this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear))}}return!0},__onMarkClear:function(){this._marking&&(this._marking=!1);var e=this._markShapeList.length;if(e>0){for(;e--;)this.zr.delShape(this._markShapeList.pop().id);this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear),this.zr.refreshNextFrame()}return!0},__onDataZoom:function(e){var t=e.target;if(this._zooming||this._zoomStart)this._resetZoom(),this.zr.refreshNextFrame(),this.dom.style.cursor="default";else{this._resetMark(),this.zr.modShape(t.id,{style:{strokeColor:this._enableColor}}),this.zr.refreshNextFrame(),this._zoomStart=!0;var i=this;setTimeout(function(){i.zr&&i.zr.on(h.EVENT.MOUSEDOWN,i._onmousedown)&&i.zr.on(h.EVENT.MOUSEUP,i._onmouseup)&&i.zr.on(h.EVENT.MOUSEMOVE,i._onmousemove)},10),this.dom.style.cursor="crosshair"}return!0},__onDataZoomReset:function(){return this._zooming&&(this._zooming=!1),this._zoomQueue.pop(),this._zoomQueue.length>0?this.component.dataZoom.absoluteZoom(this._zoomQueue[this._zoomQueue.length-1]):(this.component.dataZoom.rectZoom(),this._iconDisable(this._iconShapeMap.dataZoomReset),this.zr.refreshNextFrame()),!0},_resetMark:function(){this._marking=!1,this._markStart&&(this._markStart=!1,this._iconShapeMap.mark&&this.zr.modShape(this._iconShapeMap.mark.id,{style:{strokeColor:this._iconShapeMap.mark.highlightStyle.strokeColor}}),this.zr.un(h.EVENT.CLICK,this._onclick),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove))},_resetZoom:function(){this._zooming=!1,this._zoomStart&&(this._zoomStart=!1,this._iconShapeMap.dataZoom&&this.zr.modShape(this._iconShapeMap.dataZoom.id,{style:{strokeColor:this._iconShapeMap.dataZoom.highlightStyle.strokeColor}}),this.zr.un(h.EVENT.MOUSEDOWN,this._onmousedown),this.zr.un(h.EVENT.MOUSEUP,this._onmouseup),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove))},_iconDisable:function(e){"image"!=e.type?this.zr.modShape(e.id,{hoverable:!1,clickable:!1,style:{strokeColor:this._disableColor}}):this.zr.modShape(e.id,{hoverable:!1,clickable:!1,style:{opacity:.3}})},_iconEnable:function(e){"image"!=e.type?this.zr.modShape(e.id,{hoverable:!0,clickable:!0,style:{strokeColor:e.highlightStyle.strokeColor}}):this.zr.modShape(e.id,{hoverable:!0,clickable:!0,style:{opacity:.8}})},__onDataView:function(){return this._dataView.show(this.option),!0},__onRestore:function(){return this._resetMark(),this._resetZoom(),this.messageCenter.dispatch(s.EVENT.RESTORE,null,null,this.myChart),!0},__onSaveAsImage:function(){var e=this.option.toolbox.feature.saveAsImage,t=e.type||"png";"png"!=t&&"jpeg"!=t&&(t="png");var i;i=this.myChart.isConnected()?this.myChart.getConnectedDataURL(t):this.zr.toDataURL("image/"+t,this.option.backgroundColor&&"rgba(0,0,0,0)"===this.option.backgroundColor.replace(" ","")?"#fff":this.option.backgroundColor);var n=document.createElement("div");n.id="__echarts_download_wrap__",n.style.cssText="position:fixed;z-index:99999;display:block;top:0;left:0;background-color:rgba(33,33,33,0.5);text-align:center;width:100%;height:100%;line-height:"+document.documentElement.clientHeight+"px;";var a=document.createElement("a");a.href=i,a.setAttribute("download",(e.name?e.name:this.option.title&&(this.option.title.text||this.option.title.subtext)?this.option.title.text||this.option.title.subtext:"ECharts")+"."+t),a.innerHTML='<img style="vertical-align:middle" src="'+i+'" title="'+(window.ActiveXObject||"ActiveXObject"in window?"右键->图片另存为":e.lang?e.lang[0]:"点击保存")+'"/>',n.appendChild(a),document.body.appendChild(n),a=null,n=null,setTimeout(function(){var e=document.getElementById("__echarts_download_wrap__");e&&(e.onclick=function(){var e=document.getElementById("__echarts_download_wrap__");e.onclick=null,e.innerHTML="",document.body.removeChild(e),e=null},e=null)},500)},__onMagicType:function(e){this._resetMark();var t=e.target._name;return this._magicType[t]||(this._magicType[t]=!0,t===s.CHART_TYPE_LINE?this._magicType[s.CHART_TYPE_BAR]=!1:t===s.CHART_TYPE_BAR&&(this._magicType[s.CHART_TYPE_LINE]=!1),t===s.CHART_TYPE_PIE?this._magicType[s.CHART_TYPE_FUNNEL]=!1:t===s.CHART_TYPE_FUNNEL&&(this._magicType[s.CHART_TYPE_PIE]=!1),t===s.CHART_TYPE_FORCE?this._magicType[s.CHART_TYPE_CHORD]=!1:t===s.CHART_TYPE_CHORD&&(this._magicType[s.CHART_TYPE_FORCE]=!1),t===V?this._magicType[U]=!1:t===U&&(this._magicType[V]=!1),this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED,e.event,{magicType:this._magicType},this.myChart)),!0},setMagicType:function(e){this._resetMark(),this._magicType=e,!this._isSilence&&this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED,null,{magicType:this._magicType},this.myChart)},__onCustomHandler:function(e){var t=e.target.style.iconType,i=this.option.toolbox.feature[t].onclick;"function"==typeof i&&i.call(this,this.option)},reset:function(e,t){if(t&&this.clear(),this.query(e,"toolbox.show")&&this.query(e,"toolbox.feature.magicType.show")){var i=e.toolbox.feature.magicType.type,n=i.length;for(this._magicMap={};n--;)this._magicMap[i[n]]=!0;n=e.series.length;for(var a,o;n--;)a=e.series[n].type,this._magicMap[a]&&(o=e.xAxis instanceof Array?e.xAxis[e.series[n].xAxisIndex||0]:e.xAxis,o&&"category"===(o.type||"category")&&(o.__boundaryGap=null!=o.boundaryGap?o.boundaryGap:!0),o=e.yAxis instanceof Array?e.yAxis[e.series[n].yAxisIndex||0]:e.yAxis,o&&"category"===o.type&&(o.__boundaryGap=null!=o.boundaryGap?o.boundaryGap:!0),e.series[n].__type=a,e.series[n].__itemStyle=l.clone(e.series[n].itemStyle||{})),(this._magicMap[V]||this._magicMap[U])&&(e.series[n].__stack=e.series[n].stack)}this._magicType=t?{}:this._magicType||{};for(var r in this._magicType)if(this._magicType[r]){this.option=e,this.getMagicOption();break}var s=e.dataZoom;if(s&&s.show){var h=null!=s.start&&s.start>=0&&s.start<=100?s.start:0,m=null!=s.end&&s.end>=0&&s.end<=100?s.end:100;h>m&&(h+=m,m=h-m,h-=m),this._zoomQueue=[{start:h,end:m,start2:0,end2:100}]}else this._zoomQueue=[]},getMagicOption:function(){var e,t;if(this._magicType[s.CHART_TYPE_LINE]||this._magicType[s.CHART_TYPE_BAR]){for(var i=this._magicType[s.CHART_TYPE_LINE]?!1:!0,n=0,a=this.option.series.length;a>n;n++)t=this.option.series[n].type,(t==s.CHART_TYPE_LINE||t==s.CHART_TYPE_BAR)&&(e=this.option.xAxis instanceof Array?this.option.xAxis[this.option.series[n].xAxisIndex||0]:this.option.xAxis,e&&"category"===(e.type||"category")&&(e.boundaryGap=i?!0:e.__boundaryGap),e=this.option.yAxis instanceof Array?this.option.yAxis[this.option.series[n].yAxisIndex||0]:this.option.yAxis,e&&"category"===e.type&&(e.boundaryGap=i?!0:e.__boundaryGap));this._defaultMagic(s.CHART_TYPE_LINE,s.CHART_TYPE_BAR)}if(this._defaultMagic(s.CHART_TYPE_CHORD,s.CHART_TYPE_FORCE),this._defaultMagic(s.CHART_TYPE_PIE,s.CHART_TYPE_FUNNEL),this._magicType[V]||this._magicType[U])for(var n=0,a=this.option.series.length;a>n;n++)this._magicType[V]?(this.option.series[n].stack="_ECHARTS_STACK_KENER_2014_",t=V):this._magicType[U]&&(this.option.series[n].stack=null,t=U),this._featureOption[t+"Chart"]&&l.merge(this.option.series[n],this._featureOption[t+"Chart"]||{},!0);return this.option},_defaultMagic:function(e,t){if(this._magicType[e]||this._magicType[t])for(var i=0,n=this.option.series.length;n>i;i++){var a=this.option.series[i].type;(a==e||a==t)&&(this.option.series[i].type=this._magicType[e]?e:t,this.option.series[i].itemStyle=l.clone(this.option.series[i].__itemStyle),a=this.option.series[i].type,this._featureOption[a+"Chart"]&&l.merge(this.option.series[i],this._featureOption[a+"Chart"]||{},!0))}},silence:function(e){this._isSilence=e},resize:function(){this._resetMark(),this.clear(),this.option&&this.option.toolbox&&this.option.toolbox.show&&this._buildShape(),this._dataView&&this._dataView.resize()},hideDataView:function(){this._dataView&&this._dataView.hide()},clear:function(e){this.zr&&(this.zr.delShape(this.shapeList),this.shapeList=[],e||(this.zr.delShape(this._markShapeList),this._markShapeList=[]))},onbeforDispose:function(){this._dataView&&(this._dataView.dispose(),this._dataView=null),this._markShapeList=null},refresh:function(e){e&&(this._resetMark(),this._resetZoom(),e.toolbox=this.reformOption(e.toolbox),this.option=e,this.clear(!0),e.toolbox.show&&this._buildShape(),this.hideDataView())}},l.inherits(t,i),e("../component").define("toolbox",t),t}),i("echarts/component",[],function(){var e={},t={};return e.define=function(i,n){return t[i]=n,e},e.get=function(e){return t[e]},e}),i("echarts/component/title",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","../config","zrender/tool/util","zrender/tool/area","zrender/tool/color","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("../config");o.title={zlevel:0,z:6,show:!0,text:"",subtext:"",x:"left",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:5,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}};var r=e("zrender/tool/util"),s=e("zrender/tool/area"),l=e("zrender/tool/color");return t.prototype={type:o.COMPONENT_TYPE_TITLE,_buildShape:function(){if(this.titleOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){var e=this.titleOption.text,t=this.titleOption.link,i=this.titleOption.target,a=this.titleOption.subtext,o=this.titleOption.sublink,r=this.titleOption.subtarget,s=this.getFont(this.titleOption.textStyle),h=this.getFont(this.titleOption.subtextStyle),m=this._itemGroupLocation.x,V=this._itemGroupLocation.y,U=this._itemGroupLocation.width,d=this._itemGroupLocation.height,p={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{y:V,color:this.titleOption.textStyle.color,text:e,textFont:s,textBaseline:"top"},highlightStyle:{color:l.lift(this.titleOption.textStyle.color,1),brushType:"fill"},hoverable:!1};t&&(p.hoverable=!0,p.clickable=!0,p.onclick=function(){i&&"self"==i?window.location=t:window.open(t)});var c={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{y:V+d,color:this.titleOption.subtextStyle.color,text:a,textFont:h,textBaseline:"bottom"},highlightStyle:{color:l.lift(this.titleOption.subtextStyle.color,1),brushType:"fill"},hoverable:!1};switch(o&&(c.hoverable=!0,c.clickable=!0,c.onclick=function(){r&&"self"==r?window.location=o:window.open(o)}),this.titleOption.x){case"center":p.style.x=c.style.x=m+U/2,p.style.textAlign=c.style.textAlign="center";break;case"left":p.style.x=c.style.x=m,p.style.textAlign=c.style.textAlign="left";break;case"right":p.style.x=c.style.x=m+U,p.style.textAlign=c.style.textAlign="right";break;default:m=this.titleOption.x-0,m=isNaN(m)?0:m,p.style.x=c.style.x=m}this.titleOption.textAlign&&(p.style.textAlign=c.style.textAlign=this.titleOption.textAlign),this.shapeList.push(new n(p)),""!==a&&this.shapeList.push(new n(c))},_buildBackground:function(){var e=this.reformCssArray(this.titleOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.titleOption.borderWidth?"fill":"both",color:this.titleOption.backgroundColor,strokeColor:this.titleOption.borderColor,lineWidth:this.titleOption.borderWidth}}))},_getItemGroupLocation:function(){var e,t=this.reformCssArray(this.titleOption.padding),i=this.titleOption.text,n=this.titleOption.subtext,a=this.getFont(this.titleOption.textStyle),o=this.getFont(this.titleOption.subtextStyle),r=Math.max(s.getTextWidth(i,a),s.getTextWidth(n,o)),l=s.getTextHeight(i,a)+(""===n?0:this.titleOption.itemGap+s.getTextHeight(n,o)),h=this.zr.getWidth();switch(this.titleOption.x){case"center":e=Math.floor((h-r)/2);break;case"left":e=t[3]+this.titleOption.borderWidth;break;case"right":e=h-r-t[1]-this.titleOption.borderWidth;break;default:e=this.titleOption.x-0,e=isNaN(e)?0:e}var m,V=this.zr.getHeight();switch(this.titleOption.y){case"top":m=t[0]+this.titleOption.borderWidth;break;case"bottom":m=V-l-t[2]-this.titleOption.borderWidth;break;case"center":m=Math.floor((V-l)/2);break;default:m=this.titleOption.y-0,m=isNaN(m)?0:m}return{x:e,y:m,width:r,height:l}},refresh:function(e){e&&(this.option=e,this.option.title=this.reformOption(this.option.title),this.titleOption=this.option.title,this.titleOption.textStyle=this.getTextStyle(this.titleOption.textStyle),this.titleOption.subtextStyle=this.getTextStyle(this.titleOption.subtextStyle)),this.clear(),this._buildShape()}},r.inherits(t,i),e("../component").define("title",t),t}),i("echarts/component/tooltip",["require","./base","../util/shape/Cross","zrender/shape/Line","zrender/shape/Rectangle","../config","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/area","zrender/tool/color","zrender/tool/util","zrender/shape/Base","../component"],function(e){function t(e,t,o,r,s){i.call(this,e,t,o,r,s),this.dom=s.dom;var l=this;l._onmousemove=function(e){return l.__onmousemove(e)},l._onglobalout=function(e){return l.__onglobalout(e)},this.zr.on(h.EVENT.MOUSEMOVE,l._onmousemove),this.zr.on(h.EVENT.GLOBALOUT,l._onglobalout),l._hide=function(e){return l.__hide(e)},l._tryShow=function(e){return l.__tryShow(e)},l._refixed=function(e){return l.__refixed(e)},l._setContent=function(e,t){return l.__setContent(e,t)},this._tDom=this._tDom||document.createElement("div"),this._tDom.onselectstart=function(){return!1},this._tDom.onmouseover=function(){l._mousein=!0},this._tDom.onmouseout=function(){l._mousein=!1},this._tDom.className="echarts-tooltip",this._tDom.style.position="absolute",this.hasAppend=!1,this._axisLineShape&&this.zr.delShape(this._axisLineShape.id),this._axisLineShape=new a({zlevel:this.getZlevelBase(),z:this.getZBase(),invisible:!0,hoverable:!1}),this.shapeList.push(this._axisLineShape),this.zr.addShape(this._axisLineShape),this._axisShadowShape&&this.zr.delShape(this._axisShadowShape.id),this._axisShadowShape=new a({zlevel:this.getZlevelBase(),z:1,invisible:!0,hoverable:!1}),this.shapeList.push(this._axisShadowShape),this.zr.addShape(this._axisShadowShape),this._axisCrossShape&&this.zr.delShape(this._axisCrossShape.id),this._axisCrossShape=new n({zlevel:this.getZlevelBase(),z:this.getZBase(),invisible:!0,hoverable:!1}),this.shapeList.push(this._axisCrossShape),this.zr.addShape(this._axisCrossShape),this.showing=!1,this.refresh(r)}var i=e("./base"),n=e("../util/shape/Cross"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=new o({}),s=e("../config");s.tooltip={zlevel:1,z:8,show:!0,showContent:!0,trigger:"item",islandFormatter:"{a} <br/>{b} : {c}",showDelay:20,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"rgba(0,0,0,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,axisPointer:{type:"line",lineStyle:{color:"#48b",width:2,type:"solid"},crossStyle:{color:"#1e90ff",width:1,type:"dashed"},shadowStyle:{color:"rgba(150,150,150,0.3)",width:"auto",type:"default"}},textStyle:{color:"#fff"}};var l=e("../util/ecData"),h=e("zrender/config"),m=e("zrender/tool/event"),V=e("zrender/tool/area"),U=e("zrender/tool/color"),d=e("zrender/tool/util"),p=e("zrender/shape/Base");return t.prototype={type:s.COMPONENT_TYPE_TOOLTIP,_gCssText:"position:absolute;display:block;border-style:solid;white-space:nowrap;",_style:function(e){if(!e)return"";var t=[];if(e.transitionDuration){var i="left "+e.transitionDuration+"s,top "+e.transitionDuration+"s";t.push("transition:"+i),t.push("-moz-transition:"+i),t.push("-webkit-transition:"+i),t.push("-o-transition:"+i)}e.backgroundColor&&(t.push("background-Color:"+U.toHex(e.backgroundColor)),t.push("filter:alpha(opacity=70)"),t.push("background-Color:"+e.backgroundColor)),null!=e.borderWidth&&t.push("border-width:"+e.borderWidth+"px"),null!=e.borderColor&&t.push("border-color:"+e.borderColor),null!=e.borderRadius&&(t.push("border-radius:"+e.borderRadius+"px"),t.push("-moz-border-radius:"+e.borderRadius+"px"),t.push("-webkit-border-radius:"+e.borderRadius+"px"),t.push("-o-border-radius:"+e.borderRadius+"px"));var n=e.textStyle;n&&(n.color&&t.push("color:"+n.color),n.decoration&&t.push("text-decoration:"+n.decoration),n.align&&t.push("text-align:"+n.align),n.fontFamily&&t.push("font-family:"+n.fontFamily),n.fontSize&&t.push("font-size:"+n.fontSize+"px"),n.fontSize&&t.push("line-height:"+Math.round(3*n.fontSize/2)+"px"),n.fontStyle&&t.push("font-style:"+n.fontStyle),n.fontWeight&&t.push("font-weight:"+n.fontWeight));var a=e.padding;return null!=a&&(a=this.reformCssArray(a),t.push("padding:"+a[0]+"px "+a[1]+"px "+a[2]+"px "+a[3]+"px")),t=t.join(";")+";"},__hide:function(){this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId=-1,this._tDom&&(this._tDom.style.display="none");var e=!1;this._axisLineShape.invisible||(this._axisLineShape.invisible=!0, +this.zr.modShape(this._axisLineShape.id),e=!0),this._axisShadowShape.invisible||(this._axisShadowShape.invisible=!0,this.zr.modShape(this._axisShadowShape.id),e=!0),this._axisCrossShape.invisible||(this._axisCrossShape.invisible=!0,this.zr.modShape(this._axisCrossShape.id),e=!0),this._lastTipShape&&this._lastTipShape.tipShape.length>0&&(this.zr.delShape(this._lastTipShape.tipShape),this._lastTipShape=!1,this.shapeList.length=2),e&&this.zr.refreshNextFrame(),this.showing=!1},_show:function(e,t,i,n){var a=this._tDom.offsetHeight,o=this._tDom.offsetWidth;e&&("function"==typeof e&&(e=e([t,i])),e instanceof Array&&(t=e[0],i=e[1])),t+o>this._zrWidth&&(t-=o+40),i+a>this._zrHeight&&(i-=a-20),20>i&&(i=0),this._tDom.style.cssText=this._gCssText+this._defaultCssText+(n?n:"")+"left:"+t+"px;top:"+i+"px;",(10>a||10>o)&&setTimeout(this._refixed,20),this.showing=!0},__refixed:function(){if(this._tDom){var e="",t=this._tDom.offsetHeight,i=this._tDom.offsetWidth;this._tDom.offsetLeft+i>this._zrWidth&&(e+="left:"+(this._zrWidth-i-20)+"px;"),this._tDom.offsetTop+t>this._zrHeight&&(e+="top:"+(this._zrHeight-t-10)+"px;"),""!==e&&(this._tDom.style.cssText+=e)}},__tryShow:function(){var e,t;if(this._curTarget){if("island"===this._curTarget._type&&this.option.tooltip.show)return void this._showItemTrigger();var i=l.get(this._curTarget,"series"),n=l.get(this._curTarget,"data");e=this.deepQuery([n,i,this.option],"tooltip.show"),null!=i&&null!=n&&e?(t=this.deepQuery([n,i,this.option],"tooltip.trigger"),"axis"===t?this._showAxisTrigger(i.xAxisIndex,i.yAxisIndex,l.get(this._curTarget,"dataIndex")):this._showItemTrigger()):(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._hidingTicket=setTimeout(this._hide,this._hideDelay))}else this._findPolarTrigger()||this._findAxisTrigger()},_findAxisTrigger:function(){if(!this.component.xAxis||!this.component.yAxis)return void(this._hidingTicket=setTimeout(this._hide,this._hideDelay));for(var e,t,i=this.option.series,n=0,a=i.length;a>n;n++)if("axis"===this.deepQuery([i[n],this.option],"tooltip.trigger"))return e=i[n].xAxisIndex||0,t=i[n].yAxisIndex||0,this.component.xAxis.getAxis(e)&&this.component.xAxis.getAxis(e).type===s.COMPONENT_TYPE_AXIS_CATEGORY?void this._showAxisTrigger(e,t,this._getNearestDataIndex("x",this.component.xAxis.getAxis(e))):this.component.yAxis.getAxis(t)&&this.component.yAxis.getAxis(t).type===s.COMPONENT_TYPE_AXIS_CATEGORY?void this._showAxisTrigger(e,t,this._getNearestDataIndex("y",this.component.yAxis.getAxis(t))):void this._showAxisTrigger(e,t,-1);"cross"===this.option.tooltip.axisPointer.type&&this._showAxisTrigger(-1,-1,-1)},_findPolarTrigger:function(){if(!this.component.polar)return!1;var e,t=m.getX(this._event),i=m.getY(this._event),n=this.component.polar.getNearestIndex([t,i]);return n?(e=n.valueIndex,n=n.polarIndex):n=-1,-1!=n?this._showPolarTrigger(n,e):!1},_getNearestDataIndex:function(e,t){var i=-1,n=m.getX(this._event),a=m.getY(this._event);if("x"===e){for(var o,r,s=this.component.grid.getXend(),l=t.getCoordByIndex(i);s>l&&(r=l,n>=l);)o=l,l=t.getCoordByIndex(++i);return 0>=i?i=0:r-n>=n-o?i-=1:null==t.getNameByIndex(i)&&(i-=1),i}for(var h,V,U=this.component.grid.getY(),l=t.getCoordByIndex(i);l>U&&(h=l,l>=a);)V=l,l=t.getCoordByIndex(++i);return 0>=i?i=0:a-h>=V-a?i-=1:null==t.getNameByIndex(i)&&(i-=1),i},_showAxisTrigger:function(e,t,i){if(!this._event.connectTrigger&&this.messageCenter.dispatch(s.EVENT.TOOLTIP_IN_GRID,this._event,null,this.myChart),null==this.component.xAxis||null==this.component.yAxis||null==e||null==t)return clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),void(this._hidingTicket=setTimeout(this._hide,this._hideDelay));var n,a,o,r,l=this.option.series,h=[],V=[],U="";if("axis"===this.option.tooltip.trigger){if(!this.option.tooltip.show)return;a=this.option.tooltip.formatter,o=this.option.tooltip.position}var d,p,c=-1!=e&&this.component.xAxis.getAxis(e).type===s.COMPONENT_TYPE_AXIS_CATEGORY?"xAxis":-1!=t&&this.component.yAxis.getAxis(t).type===s.COMPONENT_TYPE_AXIS_CATEGORY?"yAxis":!1;if(c){var u="xAxis"==c?e:t;n=this.component[c].getAxis(u);for(var y=0,g=l.length;g>y;y++)this._isSelected(l[y].name)&&l[y][c+"Index"]===u&&"axis"===this.deepQuery([l[y],this.option],"tooltip.trigger")&&(r=this.query(l[y],"tooltip.showContent")||r,a=this.query(l[y],"tooltip.formatter")||a,o=this.query(l[y],"tooltip.position")||o,U+=this._style(this.query(l[y],"tooltip")),null!=l[y].stack&&"xAxis"==c?(h.unshift(l[y]),V.unshift(y)):(h.push(l[y]),V.push(y)));this.messageCenter.dispatch(s.EVENT.TOOLTIP_HOVER,this._event,{seriesIndex:V,dataIndex:i},this.myChart);var b;"xAxis"==c?(d=this.subPixelOptimize(n.getCoordByIndex(i),this._axisLineWidth),p=m.getY(this._event),b=[d,this.component.grid.getY(),d,this.component.grid.getYend()]):(d=m.getX(this._event),p=this.subPixelOptimize(n.getCoordByIndex(i),this._axisLineWidth),b=[this.component.grid.getX(),p,this.component.grid.getXend(),p]),this._styleAxisPointer(h,b[0],b[1],b[2],b[3],n.getGap(),d,p)}else d=m.getX(this._event),p=m.getY(this._event),this._styleAxisPointer(l,this.component.grid.getX(),p,this.component.grid.getXend(),p,0,d,p),i>=0?this._showItemTrigger(!0):(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._tDom.style.display="none");if(h.length>0){if(this._lastItemTriggerId=-1,this._lastDataIndex!=i||this._lastSeriesIndex!=V[0]){this._lastDataIndex=i,this._lastSeriesIndex=V[0];var f,k;if("function"==typeof a){for(var x=[],y=0,g=h.length;g>y;y++)f=h[y].data[i],k=this.getDataFromOption(f,"-"),x.push({seriesIndex:V[y],seriesName:h[y].name||"",series:h[y],dataIndex:i,data:f,name:n.getNameByIndex(i),value:k,0:h[y].name||"",1:n.getNameByIndex(i),2:k,3:f});this._curTicket="axis:"+i,this._tDom.innerHTML=a.call(this.myChart,x,this._curTicket,this._setContent)}else if("string"==typeof a){this._curTicket=0/0,a=a.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}");for(var y=0,g=h.length;g>y;y++)a=a.replace("{a"+y+"}",this._encodeHTML(h[y].name||"")),a=a.replace("{b"+y+"}",this._encodeHTML(n.getNameByIndex(i))),f=h[y].data[i],f=this.getDataFromOption(f,"-"),a=a.replace("{c"+y+"}",f instanceof Array?f:this.numAddCommas(f));this._tDom.innerHTML=a}else{this._curTicket=0/0,a=this._encodeHTML(n.getNameByIndex(i));for(var y=0,g=h.length;g>y;y++)a+="<br/>"+this._encodeHTML(h[y].name||"")+" : ",f=h[y].data[i],f=this.getDataFromOption(f,"-"),a+=f instanceof Array?f:this.numAddCommas(f);this._tDom.innerHTML=a}}if(r===!1||!this.option.tooltip.showContent)return;this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(o,d+10,p+10,U)}},_showPolarTrigger:function(e,t){if(null==this.component.polar||null==e||null==t||0>t)return!1;var i,n,a,o=this.option.series,r=[],s=[],l="";if("axis"===this.option.tooltip.trigger){if(!this.option.tooltip.show)return!1;i=this.option.tooltip.formatter,n=this.option.tooltip.position}for(var h=this.option.polar[e].indicator[t].text,V=0,U=o.length;U>V;V++)this._isSelected(o[V].name)&&o[V].polarIndex===e&&"axis"===this.deepQuery([o[V],this.option],"tooltip.trigger")&&(a=this.query(o[V],"tooltip.showContent")||a,i=this.query(o[V],"tooltip.formatter")||i,n=this.query(o[V],"tooltip.position")||n,l+=this._style(this.query(o[V],"tooltip")),r.push(o[V]),s.push(V));if(r.length>0){for(var d,p,c,u=[],V=0,U=r.length;U>V;V++){d=r[V].data;for(var y=0,g=d.length;g>y;y++)p=d[y],this._isSelected(p.name)&&(p=null!=p?p:{name:"",value:{dataIndex:"-"}},c=this.getDataFromOption(p.value[t]),u.push({seriesIndex:s[V],seriesName:r[V].name||"",series:r[V],dataIndex:t,data:p,name:p.name,indicator:h,value:c,0:r[V].name||"",1:p.name,2:c,3:h}))}if(u.length<=0)return;if(this._lastItemTriggerId=-1,this._lastDataIndex!=t||this._lastSeriesIndex!=s[0])if(this._lastDataIndex=t,this._lastSeriesIndex=s[0],"function"==typeof i)this._curTicket="axis:"+t,this._tDom.innerHTML=i.call(this.myChart,u,this._curTicket,this._setContent);else if("string"==typeof i){i=i.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}");for(var V=0,U=u.length;U>V;V++)i=i.replace("{a"+V+"}",this._encodeHTML(u[V].seriesName)),i=i.replace("{b"+V+"}",this._encodeHTML(u[V].name)),i=i.replace("{c"+V+"}",this.numAddCommas(u[V].value)),i=i.replace("{d"+V+"}",this._encodeHTML(u[V].indicator));this._tDom.innerHTML=i}else{i=this._encodeHTML(u[0].name)+"<br/>"+this._encodeHTML(u[0].indicator)+" : "+this.numAddCommas(u[0].value);for(var V=1,U=u.length;U>V;V++)i+="<br/>"+this._encodeHTML(u[V].name)+"<br/>",i+=this._encodeHTML(u[V].indicator)+" : "+this.numAddCommas(u[V].value);this._tDom.innerHTML=i}if(a===!1||!this.option.tooltip.showContent)return;return this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(n,m.getX(this._event),m.getY(this._event),l),!0}},_showItemTrigger:function(e){if(this._curTarget){var t,i,n,a=l.get(this._curTarget,"series"),o=l.get(this._curTarget,"seriesIndex"),r=l.get(this._curTarget,"data"),h=l.get(this._curTarget,"dataIndex"),V=l.get(this._curTarget,"name"),U=l.get(this._curTarget,"value"),d=l.get(this._curTarget,"special"),p=l.get(this._curTarget,"special2"),c=[r,a,this.option],u="";if("island"!=this._curTarget._type){var y=e?"axis":"item";this.option.tooltip.trigger===y&&(t=this.option.tooltip.formatter,i=this.option.tooltip.position),this.query(a,"tooltip.trigger")===y&&(n=this.query(a,"tooltip.showContent")||n,t=this.query(a,"tooltip.formatter")||t,i=this.query(a,"tooltip.position")||i,u+=this._style(this.query(a,"tooltip"))),n=this.query(r,"tooltip.showContent")||n,t=this.query(r,"tooltip.formatter")||t,i=this.query(r,"tooltip.position")||i,u+=this._style(this.query(r,"tooltip"))}else this._lastItemTriggerId=0/0,n=this.deepQuery(c,"tooltip.showContent"),t=this.deepQuery(c,"tooltip.islandFormatter"),i=this.deepQuery(c,"tooltip.islandPosition");this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId!==this._curTarget.id&&(this._lastItemTriggerId=this._curTarget.id,"function"==typeof t?(this._curTicket=(a.name||"")+":"+h,this._tDom.innerHTML=t.call(this.myChart,{seriesIndex:o,seriesName:a.name||"",series:a,dataIndex:h,data:r,name:V,value:U,percent:d,indicator:d,value2:p,indicator2:p,0:a.name||"",1:V,2:U,3:d,4:p,5:r,6:o,7:h},this._curTicket,this._setContent)):"string"==typeof t?(this._curTicket=0/0,t=t.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),t=t.replace("{a0}",this._encodeHTML(a.name||"")).replace("{b0}",this._encodeHTML(V)).replace("{c0}",U instanceof Array?U:this.numAddCommas(U)),t=t.replace("{d}","{d0}").replace("{d0}",d||""),t=t.replace("{e}","{e0}").replace("{e0}",l.get(this._curTarget,"special2")||""),this._tDom.innerHTML=t):(this._curTicket=0/0,this._tDom.innerHTML=a.type===s.CHART_TYPE_RADAR&&d?this._itemFormatter.radar.call(this,a,V,U,d):a.type===s.CHART_TYPE_EVENTRIVER?this._itemFormatter.eventRiver.call(this,a,V,U,r):""+(null!=a.name?this._encodeHTML(a.name)+"<br/>":"")+(""===V?"":this._encodeHTML(V)+" : ")+(U instanceof Array?U:this.numAddCommas(U))));var g=m.getX(this._event),b=m.getY(this._event);this.deepQuery(c,"tooltip.axisPointer.show")&&this.component.grid?this._styleAxisPointer([a],this.component.grid.getX(),b,this.component.grid.getXend(),b,0,g,b):this._hide(),n!==!1&&this.option.tooltip.showContent&&(this.hasAppend||(this._tDom.style.left=this._zrWidth/2+"px",this._tDom.style.top=this._zrHeight/2+"px",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(i,g+20,b-20,u))}},_itemFormatter:{radar:function(e,t,i,n){var a="";a+=this._encodeHTML(""===t?e.name||"":t),a+=""===a?"":"<br />";for(var o=0;o<n.length;o++)a+=this._encodeHTML(n[o].text)+" : "+this.numAddCommas(i[o])+"<br />";return a},chord:function(e,t,i,n,a){if(null==a)return this._encodeHTML(t)+" ("+this.numAddCommas(i)+")";var o=this._encodeHTML(t),r=this._encodeHTML(n);return""+(null!=e.name?this._encodeHTML(e.name)+"<br/>":"")+o+" -> "+r+" ("+this.numAddCommas(i)+")<br />"+r+" -> "+o+" ("+this.numAddCommas(a)+")"},eventRiver:function(e,t,i,n){var a="";a+=this._encodeHTML(""===e.name?"":e.name+" : "),a+=this._encodeHTML(t),a+=""===a?"":"<br />",n=n.evolution;for(var o=0,r=n.length;r>o;o++)a+='<div style="padding-top:5px;">',n[o].detail&&(n[o].detail.img&&(a+='<img src="'+n[o].detail.img+'" style="float:left;width:40px;height:40px;">'),a+='<div style="margin-left:45px;">'+n[o].time+"<br/>",a+='<a href="'+n[o].detail.link+'" target="_blank">',a+=n[o].detail.text+"</a></div>",a+="</div>");return a}},_styleAxisPointer:function(e,t,i,n,a,o,r,s){if(e.length>0){var l,h,m=this.option.tooltip.axisPointer,V=m.type,U={line:{},cross:{},shadow:{}};for(var d in U)U[d].color=m[d+"Style"].color,U[d].width=m[d+"Style"].width,U[d].type=m[d+"Style"].type;for(var p=0,c=e.length;c>p;p++)l=e[p],h=this.query(l,"tooltip.axisPointer.type"),V=h||V,h&&(U[h].color=this.query(l,"tooltip.axisPointer."+h+"Style.color")||U[h].color,U[h].width=this.query(l,"tooltip.axisPointer."+h+"Style.width")||U[h].width,U[h].type=this.query(l,"tooltip.axisPointer."+h+"Style.type")||U[h].type);if("line"===V){var u=U.line.width,y=t==n;this._axisLineShape.style={xStart:y?this.subPixelOptimize(t,u):t,yStart:y?i:this.subPixelOptimize(i,u),xEnd:y?this.subPixelOptimize(n,u):n,yEnd:y?a:this.subPixelOptimize(a,u),strokeColor:U.line.color,lineWidth:u,lineType:U.line.type},this._axisLineShape.invisible=!1,this.zr.modShape(this._axisLineShape.id)}else if("cross"===V){var g=U.cross.width;this._axisCrossShape.style={brushType:"stroke",rect:this.component.grid.getArea(),x:this.subPixelOptimize(r,g),y:this.subPixelOptimize(s,g),text:("( "+this.component.xAxis.getAxis(0).getValueFromCoord(r)+" , "+this.component.yAxis.getAxis(0).getValueFromCoord(s)+" )").replace(" , "," ").replace(" , "," "),textPosition:"specific",strokeColor:U.cross.color,lineWidth:g,lineType:U.cross.type},this.component.grid.getXend()-r>100?(this._axisCrossShape.style.textAlign="left",this._axisCrossShape.style.textX=r+10):(this._axisCrossShape.style.textAlign="right",this._axisCrossShape.style.textX=r-10),s-this.component.grid.getY()>50?(this._axisCrossShape.style.textBaseline="bottom",this._axisCrossShape.style.textY=s-10):(this._axisCrossShape.style.textBaseline="top",this._axisCrossShape.style.textY=s+10),this._axisCrossShape.invisible=!1,this.zr.modShape(this._axisCrossShape.id)}else"shadow"===V&&((null==U.shadow.width||"auto"===U.shadow.width||isNaN(U.shadow.width))&&(U.shadow.width=o),t===n?Math.abs(this.component.grid.getX()-t)<2?(U.shadow.width/=2,t=n+=U.shadow.width/2):Math.abs(this.component.grid.getXend()-t)<2&&(U.shadow.width/=2,t=n-=U.shadow.width/2):i===a&&(Math.abs(this.component.grid.getY()-i)<2?(U.shadow.width/=2,i=a+=U.shadow.width/2):Math.abs(this.component.grid.getYend()-i)<2&&(U.shadow.width/=2,i=a-=U.shadow.width/2)),this._axisShadowShape.style={xStart:t,yStart:i,xEnd:n,yEnd:a,strokeColor:U.shadow.color,lineWidth:U.shadow.width},this._axisShadowShape.invisible=!1,this.zr.modShape(this._axisShadowShape.id));this.zr.refreshNextFrame()}},__onmousemove:function(e){if(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),!this._mousein||!this._enterable){var t=e.target,i=m.getX(e.event),n=m.getY(e.event);if(t){this._curTarget=t,this._event=e.event,this._event.zrenderX=i,this._event.zrenderY=n;var a;if(this._needAxisTrigger&&this.component.polar&&-1!=(a=this.component.polar.isInside([i,n])))for(var o=this.option.series,l=0,h=o.length;h>l;l++)if(o[l].polarIndex===a&&"axis"===this.deepQuery([o[l],this.option],"tooltip.trigger")){this._curTarget=null;break}this._showingTicket=setTimeout(this._tryShow,this._showDelay)}else this._curTarget=!1,this._event=e.event,this._event.zrenderX=i,this._event.zrenderY=n,this._needAxisTrigger&&this.component.grid&&V.isInside(r,this.component.grid.getArea(),i,n)?this._showingTicket=setTimeout(this._tryShow,this._showDelay):this._needAxisTrigger&&this.component.polar&&-1!=this.component.polar.isInside([i,n])?this._showingTicket=setTimeout(this._tryShow,this._showDelay):(!this._event.connectTrigger&&this.messageCenter.dispatch(s.EVENT.TOOLTIP_OUT_GRID,this._event,null,this.myChart),this._hidingTicket=setTimeout(this._hide,this._hideDelay))}},__onglobalout:function(){clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._hidingTicket=setTimeout(this._hide,this._hideDelay)},__setContent:function(e,t){this._tDom&&(e===this._curTicket&&(this._tDom.innerHTML=t),setTimeout(this._refixed,20))},ontooltipHover:function(e,t){if(!this._lastTipShape||this._lastTipShape&&this._lastTipShape.dataIndex!=e.dataIndex){this._lastTipShape&&this._lastTipShape.tipShape.length>0&&(this.zr.delShape(this._lastTipShape.tipShape),this.shapeList.length=2);for(var i=0,n=t.length;n>i;i++)t[i].zlevel=this.getZlevelBase(),t[i].z=this.getZBase(),t[i].style=p.prototype.getHighlightStyle(t[i].style,t[i].highlightStyle),t[i].draggable=!1,t[i].hoverable=!1,t[i].clickable=!1,t[i].ondragend=null,t[i].ondragover=null,t[i].ondrop=null,this.shapeList.push(t[i]),this.zr.addShape(t[i]);this._lastTipShape={dataIndex:e.dataIndex,tipShape:t}}},ondragend:function(){this._hide()},onlegendSelected:function(e){this._selectedMap=e.selected},_setSelectedMap:function(){this._selectedMap=this.component.legend?d.clone(this.component.legend.getSelectedMap()):{}},_isSelected:function(e){return null!=this._selectedMap[e]?this._selectedMap[e]:!0},showTip:function(e){if(e){var t,i=this.option.series;if(null!=e.seriesIndex)t=e.seriesIndex;else for(var n=e.seriesName,a=0,o=i.length;o>a;a++)if(i[a].name===n){t=a;break}var r=i[t];if(null!=r){var m=this.myChart.chart[r.type],V="axis"===this.deepQuery([r,this.option],"tooltip.trigger");if(m)if(V){var U=e.dataIndex;switch(m.type){case s.CHART_TYPE_LINE:case s.CHART_TYPE_BAR:case s.CHART_TYPE_K:case s.CHART_TYPE_RADAR:if(null==this.component.polar||r.data[0].value.length<=U)return;var d=r.polarIndex||0,p=this.component.polar.getVector(d,U,"max");this._event={zrenderX:p[0],zrenderY:p[1]},this._showPolarTrigger(d,U)}}else{var c,u,y=m.shapeList;switch(m.type){case s.CHART_TYPE_LINE:case s.CHART_TYPE_BAR:case s.CHART_TYPE_K:case s.CHART_TYPE_TREEMAP:case s.CHART_TYPE_SCATTER:for(var U=e.dataIndex,a=0,o=y.length;o>a;a++)if(null==y[a]._mark&&l.get(y[a],"seriesIndex")==t&&l.get(y[a],"dataIndex")==U){this._curTarget=y[a],c=y[a].style.x,u=m.type!=s.CHART_TYPE_K?y[a].style.y:y[a].style.y[0];break}break;case s.CHART_TYPE_RADAR:for(var U=e.dataIndex,a=0,o=y.length;o>a;a++)if("polygon"===y[a].type&&l.get(y[a],"seriesIndex")==t&&l.get(y[a],"dataIndex")==U){this._curTarget=y[a];var p=this.component.polar.getCenter(r.polarIndex||0);c=p[0],u=p[1];break}break;case s.CHART_TYPE_PIE:for(var g=e.name,a=0,o=y.length;o>a;a++)if("sector"===y[a].type&&l.get(y[a],"seriesIndex")==t&&l.get(y[a],"name")==g){this._curTarget=y[a];var b=this._curTarget.style,f=(b.startAngle+b.endAngle)/2*Math.PI/180;c=this._curTarget.style.x+Math.cos(f)*b.r/1.5,u=this._curTarget.style.y-Math.sin(f)*b.r/1.5;break}break;case s.CHART_TYPE_MAP:for(var g=e.name,k=r.mapType,a=0,o=y.length;o>a;a++)if("text"===y[a].type&&y[a]._mapType===k&&y[a].style._name===g){this._curTarget=y[a],c=this._curTarget.style.x+this._curTarget.position[0],u=this._curTarget.style.y+this._curTarget.position[1];break}break;case s.CHART_TYPE_CHORD:for(var g=e.name,a=0,o=y.length;o>a;a++)if("sector"===y[a].type&&l.get(y[a],"name")==g){this._curTarget=y[a];var b=this._curTarget.style,f=(b.startAngle+b.endAngle)/2*Math.PI/180;return c=this._curTarget.style.x+Math.cos(f)*(b.r-2),u=this._curTarget.style.y-Math.sin(f)*(b.r-2),void this.zr.trigger(h.EVENT.MOUSEMOVE,{zrenderX:c,zrenderY:u})}break;case s.CHART_TYPE_FORCE:for(var g=e.name,a=0,o=y.length;o>a;a++)if("circle"===y[a].type&&l.get(y[a],"name")==g){this._curTarget=y[a],c=this._curTarget.position[0],u=this._curTarget.position[1];break}}null!=c&&null!=u&&(this._event={zrenderX:c,zrenderY:u},this.zr.addHoverShape(this._curTarget),this.zr.refreshHover(),this._showItemTrigger())}}}},hideTip:function(){this._hide()},refresh:function(e){if(this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._lastTipShape&&this._lastTipShape.tipShape.length>0&&this.zr.delShape(this._lastTipShape.tipShape),this._lastTipShape=!1,this.shapeList.length=2,this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId=-1,e){this.option=e,this.option.tooltip=this.reformOption(this.option.tooltip),this.option.tooltip.textStyle=d.merge(this.option.tooltip.textStyle,this.ecTheme.textStyle),this._needAxisTrigger=!1,"axis"===this.option.tooltip.trigger&&(this._needAxisTrigger=!0);for(var t=this.option.series,i=0,n=t.length;n>i;i++)if("axis"===this.query(t[i],"tooltip.trigger")){this._needAxisTrigger=!0;break}this._showDelay=this.option.tooltip.showDelay,this._hideDelay=this.option.tooltip.hideDelay,this._defaultCssText=this._style(this.option.tooltip),this._setSelectedMap(),this._axisLineWidth=this.option.tooltip.axisPointer.lineStyle.width,this._enterable=this.option.tooltip.enterable,!this._enterable&&this._tDom.className.indexOf(h.elementClassName)<0&&(this._tDom.className+=" "+h.elementClassName)}if(this.showing){var a=this;setTimeout(function(){a.zr.trigger(h.EVENT.MOUSEMOVE,a.zr.handler._event)},50)}},onbeforDispose:function(){this._lastTipShape&&this._lastTipShape.tipShape.length>0&&this.zr.delShape(this._lastTipShape.tipShape),clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove),this.zr.un(h.EVENT.GLOBALOUT,this._onglobalout),this.hasAppend&&this.dom.firstChild&&this.dom.firstChild.removeChild(this._tDom),this._tDom=null},_encodeHTML:function(e){return String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}},d.inherits(t,i),e("../component").define("tooltip",t),t}),i("echarts/component/legend",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","zrender/shape/Sector","../util/shape/Icon","../util/shape/Candle","../config","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(e,t,n,a,o){if(!this.query(a,"legend.data"))return void console.error("option.legend.data has not been defined.");i.call(this,e,t,n,a,o);var r=this;r._legendSelected=function(e){r.__legendSelected(e)},r._dispatchHoverLink=function(e){return r.__dispatchHoverLink(e)},this._colorIndex=0,this._colorMap={},this._selectedMap={},this._hasDataMap={},this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("zrender/shape/Sector"),r=e("../util/shape/Icon"),s=e("../util/shape/Candle"),l=e("../config");l.legend={zlevel:0,z:4,show:!0,orient:"horizontal",x:"center",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,textStyle:{color:"#333"},selectedMode:!0};var h=e("zrender/tool/util"),m=e("zrender/tool/area");t.prototype={type:l.COMPONENT_TYPE_LEGEND,_buildShape:function(){if(this.legendOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){var e,t,i,a,o,s,l,V,U=this.legendOption.data,d=U.length,p=this.legendOption.textStyle,c=this.zr.getWidth(),u=this.zr.getHeight(),y=this._itemGroupLocation.x,g=this._itemGroupLocation.y,b=this.legendOption.itemWidth,f=this.legendOption.itemHeight,k=this.legendOption.itemGap;"vertical"===this.legendOption.orient&&"right"===this.legendOption.x&&(y=this._itemGroupLocation.x+this._itemGroupLocation.width-b);for(var x=0;d>x;x++)o=h.merge(U[x].textStyle||{},p),s=this.getFont(o),e=this._getName(U[x]),l=this._getFormatterName(e),""!==e?(t=U[x].icon||this._getSomethingByName(e).type,V=this.getColor(e),"horizontal"===this.legendOption.orient?200>c-y&&b+5+m.getTextWidth(l,s)+(x===d-1||""===U[x+1]?0:k)>=c-y&&(y=this._itemGroupLocation.x,g+=f+k):200>u-g&&f+(x===d-1||""===U[x+1]?0:k)>=u-g&&("right"===this.legendOption.x?y-=this._itemGroupLocation.maxWidth+k:y+=this._itemGroupLocation.maxWidth+k,g=this._itemGroupLocation.y),i=this._getItemShapeByType(y,g,b,f,this._selectedMap[e]&&this._hasDataMap[e]?V:"#ccc",t,V),i._name=e,i=new r(i),a={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:y+b+5,y:g+f/2,color:this._selectedMap[e]?"auto"===o.color?V:o.color:"#ccc",text:l,textFont:s,textBaseline:"middle"},highlightStyle:{color:V,brushType:"fill"},hoverable:!!this.legendOption.selectedMode,clickable:!!this.legendOption.selectedMode},"vertical"===this.legendOption.orient&&"right"===this.legendOption.x&&(a.style.x-=b+10,a.style.textAlign="right"),a._name=e,a=new n(a),this.legendOption.selectedMode&&(i.onclick=a.onclick=this._legendSelected,i.onmouseover=a.onmouseover=this._dispatchHoverLink,i.hoverConnect=a.id,a.hoverConnect=i.id),this.shapeList.push(i),this.shapeList.push(a),"horizontal"===this.legendOption.orient?y+=b+5+m.getTextWidth(l,s)+k:g+=f+k):"horizontal"===this.legendOption.orient?(y=this._itemGroupLocation.x,g+=f+k):("right"===this.legendOption.x?y-=this._itemGroupLocation.maxWidth+k:y+=this._itemGroupLocation.maxWidth+k,g=this._itemGroupLocation.y);"horizontal"===this.legendOption.orient&&"center"===this.legendOption.x&&g!=this._itemGroupLocation.y&&this._mLineOptimize()},_getName:function(e){return"undefined"!=typeof e.name?e.name:e},_getFormatterName:function(e){var t,i=this.legendOption.formatter;return t="function"==typeof i?i.call(this.myChart,e):"string"==typeof i?i.replace("{name}",e):e},_getFormatterNameFromData:function(e){var t=this._getName(e);return this._getFormatterName(t)},_mLineOptimize:function(){for(var e=[],t=this._itemGroupLocation.x,i=2,n=this.shapeList.length;n>i;i++)this.shapeList[i].style.x===t?e.push((this._itemGroupLocation.width-(this.shapeList[i-1].style.x+m.getTextWidth(this.shapeList[i-1].style.text,this.shapeList[i-1].style.textFont)-t))/2):i===n-1&&e.push((this._itemGroupLocation.width-(this.shapeList[i].style.x+m.getTextWidth(this.shapeList[i].style.text,this.shapeList[i].style.textFont)-t))/2);for(var a=-1,i=1,n=this.shapeList.length;n>i;i++)this.shapeList[i].style.x===t&&a++,0!==e[a]&&(this.shapeList[i].style.x+=e[a])},_buildBackground:function(){var e=this.reformCssArray(this.legendOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.legendOption.borderWidth?"fill":"both",color:this.legendOption.backgroundColor,strokeColor:this.legendOption.borderColor,lineWidth:this.legendOption.borderWidth}}))},_getItemGroupLocation:function(){var e=this.legendOption.data,t=e.length,i=this.legendOption.itemGap,n=this.legendOption.itemWidth+5,a=this.legendOption.itemHeight,o=this.legendOption.textStyle,r=this.getFont(o),s=0,l=0,V=this.reformCssArray(this.legendOption.padding),U=this.zr.getWidth()-V[1]-V[3],d=this.zr.getHeight()-V[0]-V[2],p=0,c=0;if("horizontal"===this.legendOption.orient){l=a;for(var u=0;t>u;u++)if(""!==this._getName(e[u])){var y=m.getTextWidth(this._getFormatterNameFromData(e[u]),e[u].textStyle?this.getFont(h.merge(e[u].textStyle||{},o)):r);p+n+y+i>U?(p-=i,s=Math.max(s,p),l+=a+i,p=0):(p+=n+y+i,s=Math.max(s,p-i))}else p-=i,s=Math.max(s,p),l+=a+i,p=0}else{for(var u=0;t>u;u++)c=Math.max(c,m.getTextWidth(this._getFormatterNameFromData(e[u]),e[u].textStyle?this.getFont(h.merge(e[u].textStyle||{},o)):r));c+=n,s=c;for(var u=0;t>u;u++)""!==this._getName(e[u])?p+a+i>d?(s+=c+i,p-=i,l=Math.max(l,p),p=0):(p+=a+i,l=Math.max(l,p-i)):(s+=c+i,p-=i,l=Math.max(l,p),p=0)}U=this.zr.getWidth(),d=this.zr.getHeight();var g;switch(this.legendOption.x){case"center":g=Math.floor((U-s)/2);break;case"left":g=V[3]+this.legendOption.borderWidth;break;case"right":g=U-s-V[1]-V[3]-2*this.legendOption.borderWidth;break;default:g=this.parsePercent(this.legendOption.x,U)}var b;switch(this.legendOption.y){case"top":b=V[0]+this.legendOption.borderWidth;break;case"bottom":b=d-l-V[0]-V[2]-2*this.legendOption.borderWidth;break;case"center":b=Math.floor((d-l)/2);break;default:b=this.parsePercent(this.legendOption.y,d)}return{x:g,y:b,width:s,height:l,maxWidth:c}},_getSomethingByName:function(e){for(var t,i=this.option.series,n=0,a=i.length;a>n;n++){if(i[n].name===e)return{type:i[n].type,series:i[n],seriesIndex:n,data:null,dataIndex:-1};if(i[n].type===l.CHART_TYPE_PIE||i[n].type===l.CHART_TYPE_RADAR||i[n].type===l.CHART_TYPE_CHORD||i[n].type===l.CHART_TYPE_FORCE||i[n].type===l.CHART_TYPE_FUNNEL||i[n].type===l.CHART_TYPE_TREEMAP){t=i[n].categories||i[n].data||i[n].nodes;for(var o=0,r=t.length;r>o;o++)if(t[o].name===e)return{type:i[n].type,series:i[n],seriesIndex:n,data:t[o],dataIndex:o}}}return{type:"bar",series:null,seriesIndex:-1,data:null,dataIndex:-1}},_getItemShapeByType:function(e,t,i,n,a,o,r){var s,h="#ccc"===a?r:a,m={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{iconType:"legendicon"+o,x:e,y:t,width:i,height:n,color:a,strokeColor:a,lineWidth:2},highlightStyle:{color:h,strokeColor:h,lineWidth:1},hoverable:this.legendOption.selectedMode,clickable:this.legendOption.selectedMode};if(o.match("image")){var s=o.replace(new RegExp("^image:\\/\\/"),"");o="image"}switch(o){case"line":m.style.brushType="stroke",m.highlightStyle.lineWidth=3;break;case"radar":case"venn":case"tree":case"treemap":case"scatter":m.highlightStyle.lineWidth=3;break;case"k":m.style.brushType="both",m.highlightStyle.lineWidth=3,m.highlightStyle.color=m.style.color=this.deepQuery([this.ecTheme,l],"k.itemStyle.normal.color")||"#fff",m.style.strokeColor="#ccc"!=a?this.deepQuery([this.ecTheme,l],"k.itemStyle.normal.lineStyle.color")||"#ff3200":a;break;case"image":m.style.iconType="image",m.style.image=s,"#ccc"===a&&(m.style.opacity=.5)}return m},__legendSelected:function(e){var t=e.target._name;if("single"===this.legendOption.selectedMode)for(var i in this._selectedMap)this._selectedMap[i]=!1;this._selectedMap[t]=!this._selectedMap[t],this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED,e.event,{selected:this._selectedMap,target:t},this.myChart)},__dispatchHoverLink:function(e){this.messageCenter.dispatch(l.EVENT.LEGEND_HOVERLINK,e.event,{target:e.target._name},this.myChart)},refresh:function(e){if(e){this.option=e||this.option,this.option.legend=this.reformOption(this.option.legend),this.legendOption=this.option.legend;var t,i,n,a,o=this.legendOption.data||[];if(this.legendOption.selected)for(var r in this.legendOption.selected)this._selectedMap[r]="undefined"!=typeof this._selectedMap[r]?this._selectedMap[r]:this.legendOption.selected[r];for(var s=0,h=o.length;h>s;s++)t=this._getName(o[s]),""!==t&&(i=this._getSomethingByName(t),i.series?(this._hasDataMap[t]=!0,a=!i.data||i.type!==l.CHART_TYPE_PIE&&i.type!==l.CHART_TYPE_FORCE&&i.type!==l.CHART_TYPE_FUNNEL?[i.series]:[i.data,i.series],n=this.getItemStyleColor(this.deepQuery(a,"itemStyle.normal.color"),i.seriesIndex,i.dataIndex,i.data),n&&i.type!=l.CHART_TYPE_K&&this.setColor(t,n),this._selectedMap[t]=null!=this._selectedMap[t]?this._selectedMap[t]:!0):this._hasDataMap[t]=!1)}this.clear(),this._buildShape()},getRelatedAmount:function(e){for(var t,i=0,n=this.option.series,a=0,o=n.length;o>a;a++)if(n[a].name===e&&i++,n[a].type===l.CHART_TYPE_PIE||n[a].type===l.CHART_TYPE_RADAR||n[a].type===l.CHART_TYPE_CHORD||n[a].type===l.CHART_TYPE_FORCE||n[a].type===l.CHART_TYPE_FUNNEL){t=n[a].type!=l.CHART_TYPE_FORCE?n[a].data:n[a].categories;for(var r=0,s=t.length;s>r;r++)t[r].name===e&&"-"!=t[r].value&&i++}return i},setColor:function(e,t){this._colorMap[e]=t},getColor:function(e){return this._colorMap[e]||(this._colorMap[e]=this.zr.getColor(this._colorIndex++)),this._colorMap[e]},hasColor:function(e){return this._colorMap[e]?this._colorMap[e]:!1},add:function(e,t){ +for(var i=this.legendOption.data,n=0,a=i.length;a>n;n++)if(this._getName(i[n])===e)return;this.legendOption.data.push(e),this.setColor(e,t),this._selectedMap[e]=!0,this._hasDataMap[e]=!0},del:function(e){for(var t=this.legendOption.data,i=0,n=t.length;n>i;i++)if(this._getName(t[i])===e)return this.legendOption.data.splice(i,1)},getItemShape:function(e){if(null!=e)for(var t,i=0,n=this.shapeList.length;n>i;i++)if(t=this.shapeList[i],t._name===e&&"text"!=t.type)return t},setItemShape:function(e,t){for(var i,n=0,a=this.shapeList.length;a>n;n++)i=this.shapeList[n],i._name===e&&"text"!=i.type&&(this._selectedMap[e]||(t.style.color="#ccc",t.style.strokeColor="#ccc"),this.zr.modShape(i.id,t))},isSelected:function(e){return"undefined"!=typeof this._selectedMap[e]?this._selectedMap[e]:!0},getSelectedMap:function(){return this._selectedMap},setSelected:function(e,t){if("single"===this.legendOption.selectedMode)for(var i in this._selectedMap)this._selectedMap[i]=!1;this._selectedMap[e]=t,this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED,null,{selected:this._selectedMap,target:e},this.myChart)},onlegendSelected:function(e,t){var i=e.selected;for(var n in i)this._selectedMap[n]!=i[n]&&(t.needRefresh=!0),this._selectedMap[n]=i[n]}};var V={line:function(e,t){var i=t.height/2;e.moveTo(t.x,t.y+i),e.lineTo(t.x+t.width,t.y+i)},pie:function(e,t){var i=t.x,n=t.y,a=t.width,r=t.height;o.prototype.buildPath(e,{x:i+a/2,y:n+r+2,r:r,r0:6,startAngle:45,endAngle:135})},eventRiver:function(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o),e.bezierCurveTo(i+a,n+o,i,n+4,i+a,n+4),e.lineTo(i+a,n),e.bezierCurveTo(i,n,i+a,n+o-4,i,n+o-4),e.lineTo(i,n+o)},k:function(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;s.prototype.buildPath(e,{x:i+a/2,y:[n+1,n+1,n+o-6,n+o],width:a-6})},bar:function(e,t){var i=t.x,n=t.y+1,a=t.width,o=t.height-2,r=3;e.moveTo(i+r,n),e.lineTo(i+a-r,n),e.quadraticCurveTo(i+a,n,i+a,n+r),e.lineTo(i+a,n+o-r),e.quadraticCurveTo(i+a,n+o,i+a-r,n+o),e.lineTo(i+r,n+o),e.quadraticCurveTo(i,n+o,i,n+o-r),e.lineTo(i,n+r),e.quadraticCurveTo(i,n,i+r,n)},force:function(e,t){r.prototype.iconLibrary.circle(e,t)},radar:function(e,t){var i=6,n=t.x+t.width/2,a=t.y+t.height/2,o=t.height/2,r=2*Math.PI/i,s=-Math.PI/2,l=n+o*Math.cos(s),h=a+o*Math.sin(s);e.moveTo(l,h),s+=r;for(var m=0,V=i-1;V>m;m++)e.lineTo(n+o*Math.cos(s),a+o*Math.sin(s)),s+=r;e.lineTo(l,h)}};V.chord=V.pie,V.map=V.bar;for(var U in V)r.prototype.iconLibrary["legendicon"+U]=V[U];return h.inherits(t,i),e("../component").define("legend",t),t}),i("echarts/util/ecData",[],function(){function e(e,t,i,n,a,o,r,s){var l;return"undefined"!=typeof n&&(l=null==n.value?n:n.value),e._echartsData={_series:t,_seriesIndex:i,_data:n,_dataIndex:a,_name:o,_value:l,_special:r,_special2:s},e._echartsData}function t(e,t){var i=e._echartsData;if(!t)return i;switch(t){case"series":case"seriesIndex":case"data":case"dataIndex":case"name":case"value":case"special":case"special2":return i&&i["_"+t]}return null}function i(e,t,i){switch(e._echartsData=e._echartsData||{},t){case"series":case"seriesIndex":case"data":case"dataIndex":case"name":case"value":case"special":case"special2":e._echartsData["_"+t]=i}}function n(e,t){t._echartsData={_series:e._echartsData._series,_seriesIndex:e._echartsData._seriesIndex,_data:e._echartsData._data,_dataIndex:e._echartsData._dataIndex,_name:e._echartsData._name,_value:e._echartsData._value,_special:e._echartsData._special,_special2:e._echartsData._special2}}return{pack:e,set:i,get:t,clone:n}}),i("echarts/chart",[],function(){var e={},t={};return e.define=function(i,n){return t[i]=n,e},e.get=function(e){return t[e]},e}),i("zrender/tool/color",["require","../tool/util"],function(e){function t(e){D=e}function i(){D=N}function n(e,t){return e=0|e,t=t||D,t[e%t.length]}function a(e){B=e}function o(){H=B}function r(){return B}function s(e,t,i,n,a,o,r){O||(O=P.getContext());for(var s=O.createRadialGradient(e,t,i,n,a,o),l=0,h=r.length;h>l;l++)s.addColorStop(r[l][0],r[l][1]);return s.__nonRecursion=!0,s}function l(e,t,i,n,a){O||(O=P.getContext());for(var o=O.createLinearGradient(e,t,i,n),r=0,s=a.length;s>r;r++)o.addColorStop(a[r][0],a[r][1]);return o.__nonRecursion=!0,o}function h(e,t,i){e=p(e),t=p(t),e=I(e),t=I(t);for(var n=[],a=(t[0]-e[0])/i,o=(t[1]-e[1])/i,r=(t[2]-e[2])/i,s=(t[3]-e[3])/i,l=0,h=e[0],m=e[1],U=e[2],d=e[3];i>l;l++)n[l]=V([S(Math.floor(h),[0,255]),S(Math.floor(m),[0,255]),S(Math.floor(U),[0,255]),d.toFixed(4)-0],"rgba"),h+=a,m+=o,U+=r,d+=s;return h=t[0],m=t[1],U=t[2],d=t[3],n[l]=V([h,m,U,d],"rgba"),n}function m(e,t){var i=[],n=e.length;if(void 0===t&&(t=20),1===n)i=h(e[0],e[0],t);else if(n>1)for(var a=0,o=n-1;o>a;a++){var r=h(e[a],e[a+1],t);o-1>a&&r.pop(),i=i.concat(r)}return i}function V(e,t){if(t=t||"rgb",e&&(3===e.length||4===e.length)){if(e=C(e,function(e){return e>1?Math.ceil(e):e}),t.indexOf("hex")>-1)return"#"+((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1);if(t.indexOf("hs")>-1){var i=C(e.slice(1,3),function(e){return e+"%"});e[1]=i[0],e[2]=i[1]}return t.indexOf("a")>-1?(3===e.length&&e.push(1),e[3]=S(e[3],[0,1]),t+"("+e.slice(0,4).join(",")+")"):t+"("+e.slice(0,3).join(",")+")"}}function U(e){e=L(e),e.indexOf("rgba")<0&&(e=p(e));var t=[],i=0;return e.replace(/[\d.]+/g,function(e){e=3>i?0|e:+e,t[i++]=e}),t}function d(e,t){if(!E(e))return e;var i=I(e),n=i[3];return"undefined"==typeof n&&(n=1),e.indexOf("hsb")>-1?i=F(i):e.indexOf("hsl")>-1&&(i=T(i)),t.indexOf("hsb")>-1||t.indexOf("hsv")>-1?i=A(i):t.indexOf("hsl")>-1&&(i=M(i)),i[3]=n,V(i,t)}function p(e){return d(e,"rgba")}function c(e){return d(e,"rgb")}function u(e){return d(e,"hex")}function y(e){return d(e,"hsva")}function g(e){return d(e,"hsv")}function b(e){return d(e,"hsba")}function f(e){return d(e,"hsb")}function k(e){return d(e,"hsla")}function x(e){return d(e,"hsl")}function _(e){for(var t in G)if(u(G[t])===u(e))return t;return null}function L(e){return String(e).replace(/\s+/g,"")}function W(e){if(G[e]&&(e=G[e]),e=L(e),e=e.replace(/hsv/i,"hsb"),/^#[\da-f]{3}$/i.test(e)){e=parseInt(e.slice(1),16);var t=(3840&e)<<8,i=(240&e)<<4,n=15&e;e="#"+((1<<24)+(t<<4)+t+(i<<4)+i+(n<<4)+n).toString(16).slice(1)}return e}function X(e,t){if(!E(e))return e;var i=t>0?1:-1;"undefined"==typeof t&&(t=0),t=Math.abs(t)>1?1:Math.abs(t),e=c(e);for(var n=I(e),a=0;3>a;a++)n[a]=1===i?n[a]*(1-t)|0:(255-n[a])*t+n[a]|0;return"rgb("+n.join(",")+")"}function v(e){if(!E(e))return e;var t=I(p(e));return t=C(t,function(e){return 255-e}),V(t,"rgb")}function w(e,t,i){if(!E(e)||!E(t))return e;"undefined"==typeof i&&(i=.5),i=1-S(i,[0,1]);for(var n=2*i-1,a=I(p(e)),o=I(p(t)),r=a[3]-o[3],s=((n*r===-1?n:(n+r)/(1+n*r))+1)/2,l=1-s,h=[],m=0;3>m;m++)h[m]=a[m]*s+o[m]*l;var U=a[3]*i+o[3]*(1-i);return U=Math.max(0,Math.min(1,U)),1===a[3]&&1===o[3]?V(h,"rgb"):(h[3]=U,V(h,"rgba"))}function K(){return"#"+(Math.random().toString(16)+"0000").slice(2,8)}function I(e){e=W(e);var t=e.match(R);if(null===t)throw new Error("The color format error");var i,n,a,o=[];if(t[2])i=t[2].replace("#","").split(""),a=[i[0]+i[1],i[2]+i[3],i[4]+i[5]],o=C(a,function(e){return S(parseInt(e,16),[0,255])});else if(t[4]){var r=t[4].split(",");n=r[3],a=r.slice(0,3),o=C(a,function(e){return e=Math.floor(e.indexOf("%")>0?2.55*parseInt(e,0):e),S(e,[0,255])}),"undefined"!=typeof n&&o.push(S(parseFloat(n),[0,1]))}else if(t[5]||t[6]){var s=(t[5]||t[6]).split(","),l=parseInt(s[0],0)/360,h=s[1],m=s[2];n=s[3],o=C([h,m],function(e){return S(parseFloat(e)/100,[0,1])}),o.unshift(l),"undefined"!=typeof n&&o.push(S(parseFloat(n),[0,1]))}return o}function J(e,t){if(!E(e))return e;null===t&&(t=1);var i=I(p(e));return i[3]=S(Number(t).toFixed(4),[0,1]),V(i,"rgba")}function C(e,t){if("function"!=typeof t)throw new TypeError;for(var i=e?e.length:0,n=0;i>n;n++)e[n]=t(e[n]);return e}function S(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e}function E(e){return e instanceof Array||"string"==typeof e}function F(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=255*r;else{var s=6*a;6===s&&(s=0);var l=0|s,h=r*(1-o),m=r*(1-o*(s-l)),V=r*(1-o*(1-(s-l))),U=0,d=0,p=0;0===l?(U=r,d=V,p=h):1===l?(U=m,d=r,p=h):2===l?(U=h,d=r,p=V):3===l?(U=h,d=m,p=r):4===l?(U=V,d=h,p=r):(U=r,d=h,p=m),t=255*U,i=255*d,n=255*p}return[t,i,n]}function T(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=255*r;else{var s;s=.5>r?r*(1+o):r+o-o*r;var l=2*r-s;t=255*z(l,s,a+1/3),i=255*z(l,s,a),n=255*z(l,s,a-1/3)}return[t,i,n]}function z(e,t,i){return 0>i&&(i+=1),i>1&&(i-=1),1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}function A(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r,h=s;if(0===l)t=0,i=0;else{i=l/s;var m=((s-n)/6+l/2)/l,V=((s-a)/6+l/2)/l,U=((s-o)/6+l/2)/l;n===s?t=U-V:a===s?t=1/3+m-U:o===s&&(t=2/3+V-m),0>t&&(t+=1),t>1&&(t-=1)}return t=360*t,i=100*i,h=100*h,[t,i,h]}function M(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r,h=(s+r)/2;if(0===l)t=0,i=0;else{i=.5>h?l/(s+r):l/(2-s-r);var m=((s-n)/6+l/2)/l,V=((s-a)/6+l/2)/l,U=((s-o)/6+l/2)/l;n===s?t=U-V:a===s?t=1/3+m-U:o===s&&(t=2/3+V-m),0>t&&(t+=1),t>1&&(t-=1)}return t=360*t,i=100*i,h=100*h,[t,i,h]}var O,P=e("../tool/util"),D=["#ff9277"," #dddd00"," #ffc877"," #bbe3ff"," #d5ffbb","#bbbbff"," #ddb000"," #b0dd00"," #e2bbff"," #ffbbe3","#ff7777"," #ff9900"," #83dd00"," #77e3ff"," #778fff","#c877ff"," #ff77ab"," #ff6600"," #aa8800"," #77c7ff","#ad77ff"," #ff77ff"," #dd0083"," #777700"," #00aa00","#0088aa"," #8400dd"," #aa0088"," #dd0000"," #772e00"],N=D,B="rgba(255,255,0,0.5)",H=B,R=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,G={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#f0f",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#789",lightslategrey:"#789",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#f0f",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#f00",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"};return{customPalette:t,resetPalette:i,getColor:n,getHighlightColor:r,customHighlight:a,resetHighlight:o,getRadialGradient:s,getLinearGradient:l,getGradientColors:m,getStepColors:h,reverse:v,mix:w,lift:X,trim:L,random:K,toRGB:c,toRGBA:p,toHex:u,toHSL:x,toHSLA:k,toHSB:f,toHSBA:b,toHSV:g,toHSVA:y,toName:_,toColor:V,toArray:U,alpha:J,getData:I}}),i("echarts/component/timeline",["require","./base","zrender/shape/Rectangle","../util/shape/Icon","../util/shape/Chain","../config","zrender/tool/util","zrender/tool/area","zrender/tool/event","../component"],function(e){function t(e,t,i,a,o){n.call(this,e,t,i,a,o);var r=this;if(r._onclick=function(e){return r.__onclick(e)},r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},r._setCurrentOption=function(){var e=r.timelineOption;r.currentIndex%=e.data.length;var t=r.options[r.currentIndex]||{};r.myChart._setOption(t,e.notMerge,!0),r.messageCenter.dispatch(s.EVENT.TIMELINE_CHANGED,null,{currentIndex:r.currentIndex,data:null!=e.data[r.currentIndex].name?e.data[r.currentIndex].name:e.data[r.currentIndex]},r.myChart)},r._onFrame=function(){r._setCurrentOption(),r._syncHandleShape(),r.timelineOption.autoPlay&&(r.playTicket=setTimeout(function(){return r.currentIndex+=1,!r.timelineOption.loop&&r.currentIndex>=r.timelineOption.data.length?(r.currentIndex=r.timelineOption.data.length-1,void r.stop()):void r._onFrame()},r.timelineOption.playInterval))},this.setTheme(!1),this.options=this.option.options,this.currentIndex=this.timelineOption.currentIndex%this.timelineOption.data.length,this.timelineOption.notMerge||0===this.currentIndex||(this.options[this.currentIndex]=l.merge(this.options[this.currentIndex],this.options[0])),this.timelineOption.show&&(this._buildShape(),this._syncHandleShape()),this._setCurrentOption(),this.timelineOption.autoPlay){var r=this;this.playTicket=setTimeout(function(){r.play()},null!=this.ecTheme.animationDuration?this.ecTheme.animationDuration:s.animationDuration)}}function i(e,t){var i=2,n=t.x+i,a=t.y+i+2,r=t.width-i,s=t.height-i,l=t.symbol;if("last"===l)e.moveTo(n+r-2,a+s/3),e.lineTo(n+r-2,a),e.lineTo(n+2,a+s/2),e.lineTo(n+r-2,a+s),e.lineTo(n+r-2,a+s/3*2),e.moveTo(n,a),e.lineTo(n,a);else if("next"===l)e.moveTo(n+2,a+s/3),e.lineTo(n+2,a),e.lineTo(n+r-2,a+s/2),e.lineTo(n+2,a+s),e.lineTo(n+2,a+s/3*2),e.moveTo(n,a),e.lineTo(n,a);else if("play"===l)if("stop"===t.status)e.moveTo(n+2,a),e.lineTo(n+r-2,a+s/2),e.lineTo(n+2,a+s),e.lineTo(n+2,a);else{var h="both"===t.brushType?2:3;e.rect(n+2,a,h,s),e.rect(n+r-h-2,a,h,s)}else if(l.match("image")){var m="";m=l.replace(new RegExp("^image:\\/\\/"),""),l=o.prototype.iconLibrary.image,l(e,{x:n,y:a,width:r,height:s,image:m})}}var n=e("./base"),a=e("zrender/shape/Rectangle"),o=e("../util/shape/Icon"),r=e("../util/shape/Chain"),s=e("../config");s.timeline={zlevel:0,z:4,show:!0,type:"time",notMerge:!1,realtime:!0,x:80,x2:80,y2:0,height:50,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,controlPosition:"left",autoPlay:!1,loop:!0,playInterval:2e3,lineStyle:{width:1,color:"#666",type:"dashed"},label:{show:!0,interval:"auto",rotate:0,textStyle:{color:"#333"}},checkpointStyle:{symbol:"auto",symbolSize:"auto",color:"auto",borderColor:"auto",borderWidth:"auto",label:{show:!1,textStyle:{color:"auto"}}},controlStyle:{itemSize:15,itemGap:5,normal:{color:"#333"},emphasis:{color:"#1e90ff"}},symbol:"emptyDiamond",symbolSize:4,currentIndex:0};var l=e("zrender/tool/util"),h=e("zrender/tool/area"),m=e("zrender/tool/event");return t.prototype={type:s.COMPONENT_TYPE_TIMELINE,_buildShape:function(){if(this._location=this._getLocation(),this._buildBackground(),this._buildControl(),this._chainPoint=this._getChainPoint(),this.timelineOption.label.show)for(var e=this._getInterval(),t=0,i=this._chainPoint.length;i>t;t+=e)this._chainPoint[t].showLabel=!0;this._buildChain(),this._buildHandle();for(var t=0,n=this.shapeList.length;n>t;t++)this.zr.addShape(this.shapeList[t])},_getLocation:function(){var e,t=this.timelineOption,i=this.reformCssArray(this.timelineOption.padding),n=this.zr.getWidth(),a=this.parsePercent(t.x,n),o=this.parsePercent(t.x2,n);null==t.width?(e=n-a-o,o=n-o):(e=this.parsePercent(t.width,n),o=a+e);var r,s,l=this.zr.getHeight(),h=this.parsePercent(t.height,l);return null!=t.y?(r=this.parsePercent(t.y,l),s=r+h):(s=l-this.parsePercent(t.y2,l),r=s-h),{x:a+i[3],y:r+i[0],x2:o-i[1],y2:s-i[2],width:e-i[1]-i[3],height:h-i[0]-i[2]}},_getReformedLabel:function(e){var t=this.timelineOption,i=null!=t.data[e].name?t.data[e].name:t.data[e],n=t.data[e].formatter||t.label.formatter;return n&&("function"==typeof n?i=n.call(this.myChart,i):"string"==typeof n&&(i=n.replace("{value}",i))),i},_getInterval:function(){var e=this._chainPoint,t=this.timelineOption,i=t.label.interval;if("auto"===i){var n=t.label.textStyle.fontSize,a=t.data,o=t.data.length;if(o>3){var r,s,l=!1;for(i=0;!l&&o>i;){i++,l=!0;for(var m=i;o>m;m+=i){if(r=e[m].x-e[m-i].x,0!==t.label.rotate)s=n;else if(a[m].textStyle)s=h.getTextWidth(e[m].name,e[m].textFont);else{var V=e[m].name+"",U=(V.match(/\w/g)||"").length,d=V.length-U;s=U*n*2/3+d*n}if(s>r){l=!1;break}}}}else i=1}else i=i-0+1;return i},_getChainPoint:function(){function e(e){return null!=h[e].name?h[e].name:h[e]+""}var t,i=this.timelineOption,n=i.symbol.toLowerCase(),a=i.symbolSize,o=i.label.rotate,r=i.label.textStyle,s=this.getFont(r),h=i.data,m=this._location.x,V=this._location.y+this._location.height/4*3,U=this._location.x2-this._location.x,d=h.length,p=[];if(d>1){var c=U/d;if(c=c>50?50:20>c?5:c,U-=2*c,"number"===i.type)for(var u=0;d>u;u++)p.push(m+c+U/(d-1)*u);else{p[0]=new Date(e(0).replace(/-/g,"/")),p[d-1]=new Date(e(d-1).replace(/-/g,"/"))-p[0];for(var u=1;d>u;u++)p[u]=m+c+U*(new Date(e(u).replace(/-/g,"/"))-p[0])/p[d-1];p[0]=m+c}}else p.push(m+U/2);for(var y,g,b,f,k,x=[],u=0;d>u;u++)m=p[u],y=h[u].symbol&&h[u].symbol.toLowerCase()||n,y.match("empty")?(y=y.replace("empty",""),b=!0):b=!1,y.match("star")&&(g=y.replace("star","")-0||5,y="star"),t=h[u].textStyle?l.merge(h[u].textStyle||{},r):r,f=t.align||"center",o?(f=o>0?"right":"left",k=[o*Math.PI/180,m,V-5]):k=!1,x.push({x:m,n:g,isEmpty:b,symbol:y,symbolSize:h[u].symbolSize||a,color:h[u].color,borderColor:h[u].borderColor,borderWidth:h[u].borderWidth,name:this._getReformedLabel(u),textColor:t.color,textAlign:f,textBaseline:t.baseline||"middle",textX:m,textY:V-(o?5:0),textFont:h[u].textStyle?this.getFont(t):s,rotation:k,showLabel:!1});return x},_buildBackground:function(){var e=this.timelineOption,t=this.reformCssArray(this.timelineOption.padding),i=this._location.width,n=this._location.height;(0!==e.borderWidth||"rgba(0,0,0,0)"!=e.backgroundColor.replace(/\s/g,""))&&this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._location.x-t[3],y:this._location.y-t[0],width:i+t[1]+t[3],height:n+t[0]+t[2],brushType:0===e.borderWidth?"fill":"both",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}}))},_buildControl:function(){var e=this,t=this.timelineOption,i=t.lineStyle,n=t.controlStyle;if("none"!==t.controlPosition){var a,r=n.itemSize,s=n.itemGap;"left"===t.controlPosition?(a=this._location.x,this._location.x+=3*(r+s)):(a=this._location.x2-(3*(r+s)-s),this._location.x2-=3*(r+s));var h=this._location.y,m={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{iconType:"timelineControl",symbol:"last",x:a,y:h,width:r,height:r,brushType:"stroke",color:n.normal.color,strokeColor:n.normal.color,lineWidth:i.width},highlightStyle:{color:n.emphasis.color,strokeColor:n.emphasis.color,lineWidth:i.width+1},clickable:!0};this._ctrLastShape=new o(m),this._ctrLastShape.onclick=function(){e.last()},this.shapeList.push(this._ctrLastShape),a+=r+s,this._ctrPlayShape=new o(l.clone(m)),this._ctrPlayShape.style.brushType="fill",this._ctrPlayShape.style.symbol="play",this._ctrPlayShape.style.status=this.timelineOption.autoPlay?"playing":"stop",this._ctrPlayShape.style.x=a,this._ctrPlayShape.onclick=function(){"stop"===e._ctrPlayShape.style.status?e.play():e.stop()},this.shapeList.push(this._ctrPlayShape),a+=r+s,this._ctrNextShape=new o(l.clone(m)),this._ctrNextShape.style.symbol="next",this._ctrNextShape.style.x=a,this._ctrNextShape.onclick=function(){e.next()},this.shapeList.push(this._ctrNextShape)}},_buildChain:function(){var e=this.timelineOption,t=e.lineStyle;this._timelineShae={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:this._location.x,y:this.subPixelOptimize(this._location.y,t.width),width:this._location.x2-this._location.x,height:this._location.height,chainPoint:this._chainPoint,brushType:"both",strokeColor:t.color,lineWidth:t.width,lineType:t.type},hoverable:!1,clickable:!0,onclick:this._onclick},this._timelineShae=new r(this._timelineShae),this.shapeList.push(this._timelineShae)},_buildHandle:function(){var e=this._chainPoint[this.currentIndex],t=e.symbolSize+1;t=5>t?5:t,this._handleShape={zlevel:this.getZlevelBase(),z:this.getZBase()+1,hoverable:!1,draggable:!0,style:{iconType:"diamond",n:e.n,x:e.x-t,y:this._location.y+this._location.height/4-t,width:2*t,height:2*t,brushType:"both",textPosition:"specific",textX:e.x,textY:this._location.y-this._location.height/4,textAlign:"center",textBaseline:"middle"},highlightStyle:{},ondrift:this._ondrift,ondragend:this._ondragend},this._handleShape=new o(this._handleShape),this.shapeList.push(this._handleShape)},_syncHandleShape:function(){if(this.timelineOption.show){var e=this.timelineOption,t=e.checkpointStyle,i=this._chainPoint[this.currentIndex];this._handleShape.style.text=t.label.show?i.name:"",this._handleShape.style.textFont=i.textFont,this._handleShape.style.n=i.n,"auto"===t.symbol?this._handleShape.style.iconType="none"!=i.symbol?i.symbol:"diamond":(this._handleShape.style.iconType=t.symbol,t.symbol.match("star")&&(this._handleShape.style.n=t.symbol.replace("star","")-0||5,this._handleShape.style.iconType="star"));var n;"auto"===t.symbolSize?(n=i.symbolSize+2,n=5>n?5:n):n=t.symbolSize-0,this._handleShape.style.color="auto"===t.color?i.color?i.color:e.controlStyle.emphasis.color:t.color,this._handleShape.style.textColor="auto"===t.label.textStyle.color?this._handleShape.style.color:t.label.textStyle.color,this._handleShape.highlightStyle.strokeColor=this._handleShape.style.strokeColor="auto"===t.borderColor?i.borderColor?i.borderColor:"#fff":t.borderColor,this._handleShape.style.lineWidth="auto"===t.borderWidth?i.borderWidth?i.borderWidth:0:t.borderWidth-0,this._handleShape.highlightStyle.lineWidth=this._handleShape.style.lineWidth+1,this.zr.animate(this._handleShape.id,"style").when(500,{x:i.x-n,textX:i.x,y:this._location.y+this._location.height/4-n,width:2*n,height:2*n}).start("ExponentialOut")}},_findChainIndex:function(e){var t=this._chainPoint,i=t.length;if(e<=t[0].x)return 0;if(e>=t[i-1].x)return i-1;for(var n=0;i-1>n;n++)if(e>=t[n].x&&e<=t[n+1].x)return Math.abs(e-t[n].x)<Math.abs(e-t[n+1].x)?n:n+1},__onclick:function(e){var t=m.getX(e.event),i=this._findChainIndex(t);return i===this.currentIndex?!0:(this.currentIndex=i,this.timelineOption.autoPlay&&this.stop(),clearTimeout(this.playTicket),void this._onFrame())},__ondrift:function(e,t){this.timelineOption.autoPlay&&this.stop();var i,n=this._chainPoint,a=n.length;e.style.x+t<=n[0].x-n[0].symbolSize?(e.style.x=n[0].x-n[0].symbolSize,i=0):e.style.x+t>=n[a-1].x-n[a-1].symbolSize?(e.style.x=n[a-1].x-n[a-1].symbolSize,i=a-1):(e.style.x+=t,i=this._findChainIndex(e.style.x));var o=n[i],r=o.symbolSize+2;if(e.style.iconType=o.symbol,e.style.n=o.n,e.style.textX=e.style.x+r/2,e.style.y=this._location.y+this._location.height/4-r,e.style.width=2*r,e.style.height=2*r,e.style.text=o.name,i===this.currentIndex)return!0;if(this.currentIndex=i,this.timelineOption.realtime){clearTimeout(this.playTicket);var s=this;this.playTicket=setTimeout(function(){s._setCurrentOption()},200)}return!0},__ondragend:function(){this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.timelineOption.realtime&&this._setCurrentOption(),t.dragOut=!0,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1,this._syncHandleShape())},last:function(){return this.timelineOption.autoPlay&&this.stop(),this.currentIndex-=1,this.currentIndex<0&&(this.currentIndex=this.timelineOption.data.length-1),this._onFrame(),this.currentIndex},next:function(){return this.timelineOption.autoPlay&&this.stop(),this.currentIndex+=1,this.currentIndex>=this.timelineOption.data.length&&(this.currentIndex=0),this._onFrame(),this.currentIndex},play:function(e,t){return this._ctrPlayShape&&"playing"!=this._ctrPlayShape.style.status&&(this._ctrPlayShape.style.status="playing",this.zr.modShape(this._ctrPlayShape.id),this.zr.refreshNextFrame()),this.timelineOption.autoPlay=null!=t?t:!0,this.timelineOption.autoPlay||clearTimeout(this.playTicket),this.currentIndex=null!=e?e:this.currentIndex+1,this.currentIndex>=this.timelineOption.data.length&&(this.currentIndex=0),this._onFrame(),this.currentIndex},stop:function(){return this._ctrPlayShape&&"stop"!=this._ctrPlayShape.style.status&&(this._ctrPlayShape.style.status="stop",this.zr.modShape(this._ctrPlayShape.id),this.zr.refreshNextFrame()),this.timelineOption.autoPlay=!1,clearTimeout(this.playTicket),this.currentIndex},resize:function(){this.timelineOption.show&&(this.clear(),this._buildShape(),this._syncHandleShape())},setTheme:function(e){this.timelineOption=this.reformOption(l.clone(this.option.timeline)),this.timelineOption.label.textStyle=this.getTextStyle(this.timelineOption.label.textStyle),this.timelineOption.checkpointStyle.label.textStyle=this.getTextStyle(this.timelineOption.checkpointStyle.label.textStyle),this.myChart.canvasSupported||(this.timelineOption.realtime=!1),this.timelineOption.show&&e&&(this.clear(),this._buildShape(),this._syncHandleShape())},onbeforDispose:function(){clearTimeout(this.playTicket)}},o.prototype.iconLibrary.timelineControl=i,l.inherits(t,n),e("../component").define("timeline",t),t}),i("zrender/shape/Image",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"image",brush:function(e,t,i){var n=this.style||{};t&&(n=this.getHighlightStyle(n,this.highlightStyle||{}));var a=n.image,o=this;if(this._imageCache||(this._imageCache={}),"string"==typeof a){var r=a;this._imageCache[r]?a=this._imageCache[r]:(a=new Image,a.onload=function(){a.onload=null,o.modSelf(),i()},a.src=r,this._imageCache[r]=a)}if(a){if("IMG"==a.nodeName.toUpperCase())if(window.ActiveXObject){if("complete"!=a.readyState)return}else if(!a.complete)return;var s=n.width||a.width,l=n.height||a.height,h=n.x,m=n.y;if(!a.width||!a.height)return;if(e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.sWidth&&n.sHeight){var V=n.sx||0,U=n.sy||0;e.drawImage(a,V,U,n.sWidth,n.sHeight,h,m,s,l)}else if(n.sx&&n.sy){var V=n.sx,U=n.sy,d=s-V,p=l-U;e.drawImage(a,V,U,d,p,h,m,s,l)}else e.drawImage(a,h,m,s,l);n.width||(n.width=s),n.height||(n.height=l),this.style.width||(this.style.width=s),this.style.height||(this.style.height=l),this.drawText(e,n,this.style),e.restore()}},getRect:function(e){return{x:e.x,y:e.y,width:e.width,height:e.height}},clearCache:function(){this._imageCache={}}},e("../tool/util").inherits(i,t),i}),i("zrender/loadingEffect/Bar",["require","./Base","../tool/util","../tool/color","../shape/Rectangle"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Rectangle");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#888"},backgroundColor:"rgba(250, 250, 250, 0.8)",effectOption:{x:0,y:this.canvasHeight/2-30,width:this.canvasWidth,height:5,brushType:"fill",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effectOption,h=new o({highlightStyle:n.clone(l)});return h.highlightStyle.color=l.color||a.getLinearGradient(l.x,l.y,l.x+l.width,l.y+l.height,[[0,"#ff6400"],[.5,"#ffe100"],[1,"#b1ff00"]]),null!=i.progress?(e(s),h.highlightStyle.width=this.adjust(i.progress,[0,1])*i.effectOption.width,e(h),e(r),void t()):(h.highlightStyle.width=0,setInterval(function(){e(s),h.highlightStyle.width<l.width?h.highlightStyle.width+=8:h.highlightStyle.width=0,e(h),e(r),t()},l.timeInterval))},t}),i("zrender/loadingEffect/Bubble",["require","./Base","../tool/util","../tool/color","../shape/Circle"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Circle");return n.inherits(t,i),t.prototype._start=function(e,t){for(var i=n.merge(this.options,{textStyle:{color:"#888"},backgroundColor:"rgba(250, 250, 250, 0.8)",effect:{n:50,lineWidth:2,brushType:"stroke",color:"random",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effect,h=l.n,m=l.brushType,V=l.lineWidth,U=[],d=this.canvasWidth,p=this.canvasHeight,c=0;h>c;c++){var u="random"==l.color?a.alpha(a.random(),.3):l.color;U[c]=new o({highlightStyle:{x:Math.ceil(Math.random()*d),y:Math.ceil(Math.random()*p),r:Math.ceil(40*Math.random()),brushType:m,color:u,strokeColor:u,lineWidth:V},animationY:Math.ceil(20*Math.random())})}return setInterval(function(){e(s);for(var i=0;h>i;i++){var n=U[i].highlightStyle;n.y-U[i].animationY+n.r<=0&&(U[i].highlightStyle.y=p+n.r,U[i].highlightStyle.x=Math.ceil(Math.random()*d)),U[i].highlightStyle.y-=U[i].animationY,e(U[i])}e(r),t()},l.timeInterval)},t}),i("zrender/loadingEffect/DynamicLine",["require","./Base","../tool/util","../tool/color","../shape/Line"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Line");return n.inherits(t,i),t.prototype._start=function(e,t){for(var i=n.merge(this.options,{textStyle:{color:"#fff"},backgroundColor:"rgba(0, 0, 0, 0.8)",effectOption:{n:30,lineWidth:1,color:"random",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effectOption,h=l.n,m=l.lineWidth,V=[],U=this.canvasWidth,d=this.canvasHeight,p=0;h>p;p++){var c=-Math.ceil(1e3*Math.random()),u=Math.ceil(400*Math.random()),y=Math.ceil(Math.random()*d),g="random"==l.color?a.random():l.color;V[p]=new o({highlightStyle:{xStart:c,yStart:y,xEnd:c+u,yEnd:y,strokeColor:g,lineWidth:m},animationX:Math.ceil(100*Math.random()),len:u})}return setInterval(function(){e(s);for(var i=0;h>i;i++){var n=V[i].highlightStyle;n.xStart>=U&&(V[i].len=Math.ceil(400*Math.random()),n.xStart=-400,n.xEnd=-400+V[i].len,n.yStart=Math.ceil(Math.random()*d),n.yEnd=n.yStart),n.xStart+=V[i].animationX,n.xEnd+=V[i].animationX,e(V[i])}e(r),t()},l.timeInterval)},t}),i("zrender/loadingEffect/Ring",["require","./Base","../tool/util","../tool/color","../shape/Ring","../shape/Sector"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../shape/Ring"),r=e("../shape/Sector");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#07a"},backgroundColor:"rgba(250, 250, 250, 0.8)",effect:{x:this.canvasWidth/2,y:this.canvasHeight/2,r0:60,r:100,color:"#bbdcff",brushType:"fill",textPosition:"inside",textFont:"normal 30px verdana",textColor:"rgba(30, 144, 255, 0.6)",timeInterval:100}}),s=i.effect,l=i.textStyle; + +null==l.x&&(l.x=s.x),null==l.y&&(l.y=s.y+(s.r0+s.r)/2-5);for(var h=this.createTextShape(i.textStyle),m=this.createBackgroundShape(i.backgroundColor),V=s.x,U=s.y,d=s.r0+6,p=s.r-6,c=s.color,u=a.lift(c,.1),y=new o({highlightStyle:n.clone(s)}),g=[],b=a.getGradientColors(["#ff6400","#ffe100","#97ff00"],25),f=15,k=240,x=0;16>x;x++)g.push(new r({highlightStyle:{x:V,y:U,r0:d,r:p,startAngle:k-f,endAngle:k,brushType:"fill",color:u},_color:a.getLinearGradient(V+d*Math.cos(k,!0),U-d*Math.sin(k,!0),V+d*Math.cos(k-f,!0),U-d*Math.sin(k-f,!0),[[0,b[2*x]],[1,b[2*x+1]]])})),k-=f;k=360;for(var x=0;4>x;x++)g.push(new r({highlightStyle:{x:V,y:U,r0:d,r:p,startAngle:k-f,endAngle:k,brushType:"fill",color:u},_color:a.getLinearGradient(V+d*Math.cos(k,!0),U-d*Math.sin(k,!0),V+d*Math.cos(k-f,!0),U-d*Math.sin(k-f,!0),[[0,b[2*x+32]],[1,b[2*x+33]]])})),k-=f;var _=0;if(null!=i.progress){e(m),_=100*this.adjust(i.progress,[0,1]).toFixed(2)/5,y.highlightStyle.text=5*_+"%",e(y);for(var x=0;20>x;x++)g[x].highlightStyle.color=_>x?g[x]._color:u,e(g[x]);return e(h),void t()}return setInterval(function(){e(m),_+=_>=20?-20:1,e(y);for(var i=0;20>i;i++)g[i].highlightStyle.color=_>i?g[i]._color:u,e(g[i]);e(h),t()},s.timeInterval)},t}),i("zrender/loadingEffect/Spin",["require","./Base","../tool/util","../tool/color","../tool/area","../shape/Sector"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/color"),o=e("../tool/area"),r=e("../shape/Sector");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#fff",textAlign:"start"},backgroundColor:"rgba(0, 0, 0, 0.8)"}),s=this.createTextShape(i.textStyle),l=10,h=o.getTextWidth(s.highlightStyle.text,s.highlightStyle.textFont),m=o.getTextHeight(s.highlightStyle.text,s.highlightStyle.textFont),V=n.merge(this.options.effect||{},{r0:9,r:15,n:18,color:"#fff",timeInterval:100}),U=this.getLocation(this.options.textStyle,h+l+2*V.r,Math.max(2*V.r,m));V.x=U.x+V.r,V.y=s.highlightStyle.y=U.y+U.height/2,s.highlightStyle.x=V.x+V.r+l;for(var d=this.createBackgroundShape(i.backgroundColor),p=V.n,c=V.x,u=V.y,y=V.r0,g=V.r,b=V.color,f=[],k=Math.round(180/p),x=0;p>x;x++)f[x]=new r({highlightStyle:{x:c,y:u,r0:y,r:g,startAngle:k*x*2,endAngle:k*x*2+k,color:a.alpha(b,(x+1)/p),brushType:"fill"}});var _=[0,c,u];return setInterval(function(){e(d),_[0]-=.3;for(var i=0;p>i;i++)f[i].rotation=_,e(f[i]);e(s),t()},V.timeInterval)},t}),i("zrender/loadingEffect/Whirling",["require","./Base","../tool/util","../tool/area","../shape/Ring","../shape/Droplet","../shape/Circle"],function(e){function t(e){i.call(this,e)}var i=e("./Base"),n=e("../tool/util"),a=e("../tool/area"),o=e("../shape/Ring"),r=e("../shape/Droplet"),s=e("../shape/Circle");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:"#888",textAlign:"start"},backgroundColor:"rgba(250, 250, 250, 0.8)"}),l=this.createTextShape(i.textStyle),h=10,m=a.getTextWidth(l.highlightStyle.text,l.highlightStyle.textFont),V=a.getTextHeight(l.highlightStyle.text,l.highlightStyle.textFont),U=n.merge(this.options.effect||{},{r:18,colorIn:"#fff",colorOut:"#555",colorWhirl:"#6cf",timeInterval:50}),d=this.getLocation(this.options.textStyle,m+h+2*U.r,Math.max(2*U.r,V));U.x=d.x+U.r,U.y=l.highlightStyle.y=d.y+d.height/2,l.highlightStyle.x=U.x+U.r+h;var p=this.createBackgroundShape(i.backgroundColor),c=new r({highlightStyle:{a:Math.round(U.r/2),b:Math.round(U.r-U.r/6),brushType:"fill",color:U.colorWhirl}}),u=new s({highlightStyle:{r:Math.round(U.r/6),brushType:"fill",color:U.colorIn}}),y=new o({highlightStyle:{r0:Math.round(U.r-U.r/3),r:U.r,brushType:"fill",color:U.colorOut}}),g=[0,U.x,U.y];return c.highlightStyle.x=u.highlightStyle.x=y.highlightStyle.x=g[1],c.highlightStyle.y=u.highlightStyle.y=y.highlightStyle.y=g[2],setInterval(function(){e(p),e(y),g[0]-=.3,c.rotation=g,e(c),e(u),e(l),t()},U.timeInterval)},t}),i("echarts/theme/macarons",[],function(){var e={color:["#2ec7c9","#b6a2de","#5ab1ef","#ffb980","#d87a80","#8d98b3","#e5cf0d","#97b552","#95706d","#dc69aa","#07a2a4","#9a7fd1","#588dd5","#f5994e","#c05050","#59678c","#c9ab00","#7eb00a","#6f5553","#c14089"],title:{textStyle:{fontWeight:"normal",color:"#008acd"}},dataRange:{itemWidth:15,color:["#5ab1ef","#e0ffff"]},toolbox:{color:["#1e90ff","#1e90ff","#1e90ff","#1e90ff"],effectiveColor:"#ff4500"},tooltip:{backgroundColor:"rgba(50,50,50,0.5)",axisPointer:{type:"line",lineStyle:{color:"#008acd"},crossStyle:{color:"#008acd"},shadowStyle:{color:"rgba(200,200,200,0.2)"}}},dataZoom:{dataBackgroundColor:"#efefff",fillerColor:"rgba(182,162,222,0.2)",handleColor:"#008acd"},grid:{borderColor:"#eee"},categoryAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitLine:{lineStyle:{color:["#eee"]}}},valueAxis:{axisLine:{lineStyle:{color:"#008acd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.1)","rgba(200,200,200,0.1)"]}},splitLine:{lineStyle:{color:["#eee"]}}},polar:{axisLine:{lineStyle:{color:"#ddd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(200,200,200,0.2)"]}},splitLine:{lineStyle:{color:"#ddd"}}},timeline:{lineStyle:{color:"#008acd"},controlStyle:{normal:{color:"#008acd"},emphasis:{color:"#008acd"}},symbol:"emptyCircle",symbolSize:3},bar:{itemStyle:{normal:{barBorderRadius:5},emphasis:{barBorderRadius:5}}},line:{smooth:!0,symbol:"emptyCircle",symbolSize:3},k:{itemStyle:{normal:{color:"#d87a80",color0:"#2ec7c9",lineStyle:{color:"#d87a80",color0:"#2ec7c9"}}}},scatter:{symbol:"circle",symbolSize:4},radar:{symbol:"emptyCircle",symbolSize:3},map:{itemStyle:{normal:{areaStyle:{color:"#ddd"},label:{textStyle:{color:"#d87a80"}}},emphasis:{areaStyle:{color:"#fe994e"}}}},force:{itemStyle:{normal:{linkStyle:{color:"#1e90ff"}}}},chord:{itemStyle:{normal:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}},emphasis:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}}}},gauge:{axisLine:{lineStyle:{color:[[.2,"#2ec7c9"],[.8,"#5ab1ef"],[1,"#d87a80"]],width:10}},axisTick:{splitNumber:10,length:15,lineStyle:{color:"auto"}},splitLine:{length:22,lineStyle:{color:"auto"}},pointer:{width:5}},textStyle:{fontFamily:"微软雅黑, Arial, Verdana, sans-serif"}};return e}),i("echarts/theme/infographic",[],function(){var e={color:["#C1232B","#B5C334","#FCCE10","#E87C25","#27727B","#FE8463","#9BCA63","#FAD860","#F3A43B","#60C0DD","#D7504B","#C6E579","#F4E001","#F0805A","#26C0C0"],title:{textStyle:{fontWeight:"normal",color:"#27727B"}},dataRange:{x:"right",y:"center",itemWidth:5,itemHeight:25,color:["#C1232B","#FCCE10"]},toolbox:{color:["#C1232B","#B5C334","#FCCE10","#E87C25","#27727B","#FE8463","#9BCA63","#FAD860","#F3A43B","#60C0DD"],effectiveColor:"#ff4500"},tooltip:{backgroundColor:"rgba(50,50,50,0.5)",axisPointer:{type:"line",lineStyle:{color:"#27727B",type:"dashed"},crossStyle:{color:"#27727B"},shadowStyle:{color:"rgba(200,200,200,0.3)"}}},dataZoom:{dataBackgroundColor:"rgba(181,195,52,0.3)",fillerColor:"rgba(181,195,52,0.2)",handleColor:"#27727B"},grid:{borderWidth:0},categoryAxis:{axisLine:{lineStyle:{color:"#27727B"}},splitLine:{show:!1}},valueAxis:{axisLine:{show:!1},splitArea:{show:!1},splitLine:{lineStyle:{color:["#ccc"],type:"dashed"}}},polar:{axisLine:{lineStyle:{color:"#ddd"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(200,200,200,0.2)"]}},splitLine:{lineStyle:{color:"#ddd"}}},timeline:{lineStyle:{color:"#27727B"},controlStyle:{normal:{color:"#27727B"},emphasis:{color:"#27727B"}},symbol:"emptyCircle",symbolSize:3},line:{itemStyle:{normal:{borderWidth:2,borderColor:"#fff",lineStyle:{width:3}},emphasis:{borderWidth:0}},symbol:"circle",symbolSize:3.5},k:{itemStyle:{normal:{color:"#C1232B",color0:"#B5C334",lineStyle:{width:1,color:"#C1232B",color0:"#B5C334"}}}},scatter:{itemStyle:{normal:{borderWidth:1,borderColor:"rgba(200,200,200,0.5)"},emphasis:{borderWidth:0}},symbol:"star4",symbolSize:4},radar:{symbol:"emptyCircle",symbolSize:3},map:{itemStyle:{normal:{areaStyle:{color:"#ddd"},label:{textStyle:{color:"#C1232B"}}},emphasis:{areaStyle:{color:"#fe994e"},label:{textStyle:{color:"rgb(100,0,0)"}}}}},force:{itemStyle:{normal:{linkStyle:{color:"#27727B"}}}},chord:{itemStyle:{normal:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}},emphasis:{borderWidth:1,borderColor:"rgba(128, 128, 128, 0.5)",chordStyle:{lineStyle:{color:"rgba(128, 128, 128, 0.5)"}}}}},gauge:{center:["50%","80%"],radius:"100%",startAngle:180,endAngle:0,axisLine:{show:!0,lineStyle:{color:[[.2,"#B5C334"],[.8,"#27727B"],[1,"#C1232B"]],width:"40%"}},axisTick:{splitNumber:2,length:5,lineStyle:{color:"#fff"}},axisLabel:{textStyle:{color:"#fff",fontWeight:"bolder"}},splitLine:{length:"5%",lineStyle:{color:"#fff"}},pointer:{width:"40%",length:"80%",color:"#fff"},title:{offsetCenter:[0,-20],textStyle:{color:"auto",fontSize:20}},detail:{offsetCenter:[0,0],textStyle:{color:"auto",fontSize:40}}},textStyle:{fontFamily:"微软雅黑, Arial, Verdana, sans-serif"}};return e}),i("zrender/dep/excanvas",["require"],function(){return document.createElement("canvas").getContext?G_vmlCanvasManager=!1:!function(){function e(){return this.context_||(this.context_=new f(this))}function t(e,t){var i=O.call(arguments,2);return function(){return e.apply(t,i.concat(O.call(arguments)))}}function i(e){return String(e).replace(/&/g,"&").replace(/"/g,""")}function n(e,t,i){e.namespaces[t]||e.namespaces.add(t,i,"#default#VML")}function a(e){if(n(e,"g_vml_","urn:schemas-microsoft-com:vml"),n(e,"g_o_","urn:schemas-microsoft-com:office:office"),!e.styleSheets.ex_canvas_){var t=e.createStyleSheet();t.owningElement.id="ex_canvas_",t.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}function o(e){var t=e.srcElement;switch(e.propertyName){case"width":t.getContext().clearRect(),t.style.width=t.attributes.width.nodeValue+"px",t.firstChild.style.width=t.clientWidth+"px";break;case"height":t.getContext().clearRect(),t.style.height=t.attributes.height.nodeValue+"px",t.firstChild.style.height=t.clientHeight+"px"}}function r(e){var t=e.srcElement;t.firstChild&&(t.firstChild.style.width=t.clientWidth+"px",t.firstChild.style.height=t.clientHeight+"px")}function s(){return[[1,0,0],[0,1,0],[0,0,1]]}function l(e,t){for(var i=s(),n=0;3>n;n++)for(var a=0;3>a;a++){for(var o=0,r=0;3>r;r++)o+=e[n][r]*t[r][a];i[n][a]=o}return i}function h(e,t){t.fillStyle=e.fillStyle,t.lineCap=e.lineCap,t.lineJoin=e.lineJoin,t.lineWidth=e.lineWidth,t.miterLimit=e.miterLimit,t.shadowBlur=e.shadowBlur,t.shadowColor=e.shadowColor,t.shadowOffsetX=e.shadowOffsetX,t.shadowOffsetY=e.shadowOffsetY,t.strokeStyle=e.strokeStyle,t.globalAlpha=e.globalAlpha,t.font=e.font,t.textAlign=e.textAlign,t.textBaseline=e.textBaseline,t.scaleX_=e.scaleX_,t.scaleY_=e.scaleY_,t.lineScale_=e.lineScale_}function m(e){var t=e.indexOf("(",3),i=e.indexOf(")",t+1),n=e.substring(t+1,i).split(",");return(4!=n.length||"a"!=e.charAt(3))&&(n[3]=1),n}function V(e){return parseFloat(e)/100}function U(e,t,i){return Math.min(i,Math.max(t,e))}function d(e){var t,i,n,a,o,r;if(a=parseFloat(e[0])/360%360,0>a&&a++,o=U(V(e[1]),0,1),r=U(V(e[2]),0,1),0==o)t=i=n=r;else{var s=.5>r?r*(1+o):r+o-r*o,l=2*r-s;t=p(l,s,a+1/3),i=p(l,s,a),n=p(l,s,a-1/3)}return"#"+D[Math.floor(255*t)]+D[Math.floor(255*i)]+D[Math.floor(255*n)]}function p(e,t,i){return 0>i&&i++,i>1&&i--,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}function c(e){if(e in R)return R[e];var t,i=1;if(e=String(e),"#"==e.charAt(0))t=e;else if(/^rgb/.test(e)){for(var n,a=m(e),t="#",o=0;3>o;o++)n=-1!=a[o].indexOf("%")?Math.floor(255*V(a[o])):+a[o],t+=D[U(n,0,255)];i=+a[3]}else if(/^hsl/.test(e)){var a=m(e);t=d(a),i=a[3]}else t=H[e]||e;return R[e]={color:t,alpha:i}}function u(e){if(Y[e])return Y[e];var t,i=document.createElement("div"),n=i.style;try{n.font=e,t=n.fontFamily.split(",")[0]}catch(a){}return Y[e]={style:n.fontStyle||G.style,variant:n.fontVariant||G.variant,weight:n.fontWeight||G.weight,size:n.fontSize||G.size,family:t||G.family}}function y(e,t){var i={};for(var n in e)i[n]=e[n];var a=parseFloat(t.currentStyle.fontSize),o=parseFloat(e.size);return i.size="number"==typeof e.size?e.size:-1!=e.size.indexOf("px")?o:-1!=e.size.indexOf("em")?a*o:-1!=e.size.indexOf("%")?a/100*o:-1!=e.size.indexOf("pt")?o/.75:a,i}function g(e){return e.style+" "+e.variant+" "+e.weight+" "+e.size+"px '"+e.family+"'"}function b(e){return Q[e]||"square"}function f(e){this.m_=s(),this.mStack_=[],this.aStack_=[],this.currentPath_=[],this.strokeStyle="#000",this.fillStyle="#000",this.lineWidth=1,this.lineJoin="miter",this.lineCap="butt",this.miterLimit=1*A,this.globalAlpha=1,this.font="12px 微软雅黑",this.textAlign="left",this.textBaseline="alphabetic",this.canvas=e;var t="width:"+e.clientWidth+"px;height:"+e.clientHeight+"px;overflow:hidden;position:absolute",i=e.ownerDocument.createElement("div");i.style.cssText=t,e.appendChild(i);var n=i.cloneNode(!1);n.style.backgroundColor="#fff",n.style.filter="alpha(opacity=0)",e.appendChild(n),this.element_=i,this.scaleX_=1,this.scaleY_=1,this.lineScale_=1}function k(e,t,i,n){e.currentPath_.push({type:"bezierCurveTo",cp1x:t.x,cp1y:t.y,cp2x:i.x,cp2y:i.y,x:n.x,y:n.y}),e.currentX_=n.x,e.currentY_=n.y}function x(e,t){var i=c(e.strokeStyle),n=i.color,a=i.alpha*e.globalAlpha,o=e.lineScale_*e.lineWidth;1>o&&(a*=o),t.push("<g_vml_:stroke",' opacity="',a,'"',' joinstyle="',e.lineJoin,'"',' miterlimit="',e.miterLimit,'"',' endcap="',b(e.lineCap),'"',' weight="',o,'px"',' color="',n,'" />')}function _(e,t,i,n){var a=e.fillStyle,o=e.scaleX_,r=e.scaleY_,s=n.x-i.x,l=n.y-i.y;if(a instanceof v){var h=0,m={x:0,y:0},V=0,U=1;if("gradient"==a.type_){var d=a.x0_/o,p=a.y0_/r,u=a.x1_/o,y=a.y1_/r,g=L(e,d,p),b=L(e,u,y),f=b.x-g.x,k=b.y-g.y;h=180*Math.atan2(f,k)/Math.PI,0>h&&(h+=360),1e-6>h&&(h=0)}else{var g=L(e,a.x0_,a.y0_);m={x:(g.x-i.x)/s,y:(g.y-i.y)/l},s/=o*A,l/=r*A;var x=C.max(s,l);V=2*a.r0_/x,U=2*a.r1_/x-V}var _=a.colors_;_.sort(function(e,t){return e.offset-t.offset});for(var W=_.length,X=_[0].color,K=_[W-1].color,I=_[0].alpha*e.globalAlpha,J=_[W-1].alpha*e.globalAlpha,S=[],E=0;W>E;E++){var F=_[E];S.push(F.offset*U+V+" "+F.color)}t.push('<g_vml_:fill type="',a.type_,'"',' method="none" focus="100%"',' color="',X,'"',' color2="',K,'"',' colors="',S.join(","),'"',' opacity="',J,'"',' g_o_:opacity2="',I,'"',' angle="',h,'"',' focusposition="',m.x,",",m.y,'" />')}else if(a instanceof w){if(s&&l){var T=-i.x,z=-i.y;t.push("<g_vml_:fill",' position="',T/s*o*o,",",z/l*r*r,'"',' type="tile"',' src="',a.src_,'" />')}}else{var M=c(e.fillStyle),O=M.color,P=M.alpha*e.globalAlpha;t.push('<g_vml_:fill color="',O,'" opacity="',P,'" />')}}function L(e,t,i){var n=e.m_;return{x:A*(t*n[0][0]+i*n[1][0]+n[2][0])-M,y:A*(t*n[0][1]+i*n[1][1]+n[2][1])-M}}function W(e){return isFinite(e[0][0])&&isFinite(e[0][1])&&isFinite(e[1][0])&&isFinite(e[1][1])&&isFinite(e[2][0])&&isFinite(e[2][1])}function X(e,t,i){if(W(t)&&(e.m_=t,e.scaleX_=Math.sqrt(t[0][0]*t[0][0]+t[0][1]*t[0][1]),e.scaleY_=Math.sqrt(t[1][0]*t[1][0]+t[1][1]*t[1][1]),i)){var n=t[0][0]*t[1][1]-t[0][1]*t[1][0];e.lineScale_=z(T(n))}}function v(e){this.type_=e,this.x0_=0,this.y0_=0,this.r0_=0,this.x1_=0,this.y1_=0,this.r1_=0,this.colors_=[]}function w(e,t){switch(I(e),t){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=t;break;default:K("SYNTAX_ERR")}this.src_=e.src,this.width_=e.width,this.height_=e.height}function K(e){throw new J(e)}function I(e){e&&1==e.nodeType&&"IMG"==e.tagName||K("TYPE_MISMATCH_ERR"),"complete"!=e.readyState&&K("INVALID_STATE_ERR")}function J(e){this.code=this[e],this.message=e+": DOM Exception "+this.code}var C=Math,S=C.round,E=C.sin,F=C.cos,T=C.abs,z=C.sqrt,A=10,M=A/2,O=(+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1],Array.prototype.slice);a(document);var P={init:function(e){var i=e||document;i.createElement("canvas"),i.attachEvent("onreadystatechange",t(this.init_,this,i))},init_:function(e){for(var t=e.getElementsByTagName("canvas"),i=0;i<t.length;i++)this.initElement(t[i])},initElement:function(t){if(!t.getContext){t.getContext=e,a(t.ownerDocument),t.innerHTML="",t.attachEvent("onpropertychange",o),t.attachEvent("onresize",r);var i=t.attributes;i.width&&i.width.specified?t.style.width=i.width.nodeValue+"px":t.width=t.clientWidth,i.height&&i.height.specified?t.style.height=i.height.nodeValue+"px":t.height=t.clientHeight}return t}};P.init();for(var D=[],N=0;16>N;N++)for(var B=0;16>B;B++)D[16*N+B]=N.toString(16)+B.toString(16);var H={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"},R={},G={style:"normal",variant:"normal",weight:"normal",size:12,family:"微软雅黑"},Y={},Q={butt:"flat",round:"round"},Z=f.prototype;Z.clearRect=function(){this.textMeasureEl_&&(this.textMeasureEl_.removeNode(!0),this.textMeasureEl_=null),this.element_.innerHTML=""},Z.beginPath=function(){this.currentPath_=[]},Z.moveTo=function(e,t){var i=L(this,e,t);this.currentPath_.push({type:"moveTo",x:i.x,y:i.y}),this.currentX_=i.x,this.currentY_=i.y},Z.lineTo=function(e,t){var i=L(this,e,t);this.currentPath_.push({type:"lineTo",x:i.x,y:i.y}),this.currentX_=i.x,this.currentY_=i.y},Z.bezierCurveTo=function(e,t,i,n,a,o){var r=L(this,a,o),s=L(this,e,t),l=L(this,i,n);k(this,s,l,r)},Z.quadraticCurveTo=function(e,t,i,n){var a=L(this,e,t),o=L(this,i,n),r={x:this.currentX_+2/3*(a.x-this.currentX_),y:this.currentY_+2/3*(a.y-this.currentY_)},s={x:r.x+(o.x-this.currentX_)/3,y:r.y+(o.y-this.currentY_)/3};k(this,r,s,o)},Z.arc=function(e,t,i,n,a,o){i*=A;var r=o?"at":"wa",s=e+F(n)*i-M,l=t+E(n)*i-M,h=e+F(a)*i-M,m=t+E(a)*i-M;s!=h||o||(s+=.125);var V=L(this,e,t),U=L(this,s,l),d=L(this,h,m);this.currentPath_.push({type:r,x:V.x,y:V.y,radius:i,xStart:U.x,yStart:U.y,xEnd:d.x,yEnd:d.y})},Z.rect=function(e,t,i,n){this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath()},Z.strokeRect=function(e,t,i,n){var a=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath(),this.stroke(),this.currentPath_=a},Z.fillRect=function(e,t,i,n){var a=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath(),this.fill(),this.currentPath_=a},Z.createLinearGradient=function(e,t,i,n){var a=new v("gradient");return a.x0_=e,a.y0_=t,a.x1_=i,a.y1_=n,a},Z.createRadialGradient=function(e,t,i,n,a,o){var r=new v("gradientradial");return r.x0_=e,r.y0_=t,r.r0_=i,r.x1_=n,r.y1_=a,r.r1_=o,r},Z.drawImage=function(e){var t,i,n,a,o,r,s,l,h=e.runtimeStyle.width,m=e.runtimeStyle.height;e.runtimeStyle.width="auto",e.runtimeStyle.height="auto";var V=e.width,U=e.height;if(e.runtimeStyle.width=h,e.runtimeStyle.height=m,3==arguments.length)t=arguments[1],i=arguments[2],o=r=0,s=n=V,l=a=U;else if(5==arguments.length)t=arguments[1],i=arguments[2],n=arguments[3],a=arguments[4],o=r=0,s=V,l=U;else{if(9!=arguments.length)throw Error("Invalid number of arguments");o=arguments[1],r=arguments[2],s=arguments[3],l=arguments[4],t=arguments[5],i=arguments[6],n=arguments[7],a=arguments[8]}var d=L(this,t,i),p=[],c=10,u=10,y=b=1;if(p.push(" <g_vml_:group",' coordsize="',A*c,",",A*u,'"',' coordorigin="0,0"',' style="width:',c,"px;height:",u,"px;position:absolute;"),1!=this.m_[0][0]||this.m_[0][1]||1!=this.m_[1][1]||this.m_[1][0]){var g=[],y=this.scaleX_,b=this.scaleY_;g.push("M11=",this.m_[0][0]/y,",","M12=",this.m_[1][0]/b,",","M21=",this.m_[0][1]/y,",","M22=",this.m_[1][1]/b,",","Dx=",S(d.x/A),",","Dy=",S(d.y/A),"");var f=d,k=L(this,t+n,i),x=L(this,t,i+a),_=L(this,t+n,i+a);f.x=C.max(f.x,k.x,x.x,_.x),f.y=C.max(f.y,k.y,x.y,_.y),p.push("padding:0 ",S(f.x/A),"px ",S(f.y/A),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",g.join(""),", SizingMethod='clip');")}else p.push("top:",S(d.y/A),"px;left:",S(d.x/A),"px;");p.push(' ">'),(o||r)&&p.push('<div style="overflow: hidden; width:',Math.ceil((n+o*n/s)*y),"px;"," height:",Math.ceil((a+r*a/l)*b),"px;"," filter:progid:DxImageTransform.Microsoft.Matrix(Dx=",-o*n/s*y,",Dy=",-r*a/l*b,');">'),p.push('<div style="width:',Math.round(y*V*n/s),"px;"," height:",Math.round(b*U*a/l),"px;"," filter:"),this.globalAlpha<1&&p.push(" progid:DXImageTransform.Microsoft.Alpha(opacity="+100*this.globalAlpha+")"),p.push(" progid:DXImageTransform.Microsoft.AlphaImageLoader(src=",e.src,',sizingMethod=scale)">'),(o||r)&&p.push("</div>"),p.push("</div></div>"),this.element_.insertAdjacentHTML("BeforeEnd",p.join(""))},Z.stroke=function(e){var t=[],i=10,n=10;t.push("<g_vml_:shape",' filled="',!!e,'"',' style="position:absolute;width:',i,"px;height:",n,'px;"',' coordorigin="0,0"',' coordsize="',A*i,",",A*n,'"',' stroked="',!e,'"',' path="');for(var a={x:null,y:null},o={x:null,y:null},r=0;r<this.currentPath_.length;r++){var s,l=this.currentPath_[r];switch(l.type){case"moveTo":s=l,t.push(" m ",S(l.x),",",S(l.y));break;case"lineTo":t.push(" l ",S(l.x),",",S(l.y));break;case"close":t.push(" x "),l=null;break;case"bezierCurveTo":t.push(" c ",S(l.cp1x),",",S(l.cp1y),",",S(l.cp2x),",",S(l.cp2y),",",S(l.x),",",S(l.y));break;case"at":case"wa":t.push(" ",l.type," ",S(l.x-this.scaleX_*l.radius),",",S(l.y-this.scaleY_*l.radius)," ",S(l.x+this.scaleX_*l.radius),",",S(l.y+this.scaleY_*l.radius)," ",S(l.xStart),",",S(l.yStart)," ",S(l.xEnd),",",S(l.yEnd))}l&&((null==a.x||l.x<a.x)&&(a.x=l.x),(null==o.x||l.x>o.x)&&(o.x=l.x),(null==a.y||l.y<a.y)&&(a.y=l.y),(null==o.y||l.y>o.y)&&(o.y=l.y))}t.push(' ">'),e?_(this,t,a,o):x(this,t),t.push("</g_vml_:shape>"),this.element_.insertAdjacentHTML("beforeEnd",t.join(""))},Z.fill=function(){this.stroke(!0)},Z.closePath=function(){this.currentPath_.push({type:"close"})},Z.save=function(){var e={};h(this,e),this.aStack_.push(e),this.mStack_.push(this.m_),this.m_=l(s(),this.m_)},Z.restore=function(){this.aStack_.length&&(h(this.aStack_.pop(),this),this.m_=this.mStack_.pop())},Z.translate=function(e,t){var i=[[1,0,0],[0,1,0],[e,t,1]];X(this,l(i,this.m_),!1)},Z.rotate=function(e){var t=F(e),i=E(e),n=[[t,i,0],[-i,t,0],[0,0,1]];X(this,l(n,this.m_),!1)},Z.scale=function(e,t){var i=[[e,0,0],[0,t,0],[0,0,1]];X(this,l(i,this.m_),!0)},Z.transform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];X(this,l(r,this.m_),!0)},Z.setTransform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];X(this,r,!0)},Z.drawText_=function(e,t,n,a,o){var r=this.m_,s=1e3,l=0,h=s,m={x:0,y:0},V=[],U=y(u(this.font),this.element_),d=g(U),p=this.element_.currentStyle,c=this.textAlign.toLowerCase();switch(c){case"left":case"center":case"right":break;case"end":c="ltr"==p.direction?"right":"left";break;case"start":c="rtl"==p.direction?"right":"left";break;default:c="left"}switch(this.textBaseline){case"hanging":case"top":m.y=U.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":m.y=-U.size/2.25}switch(c){case"right":l=s,h=.05;break;case"center":l=h=s/2}var b=L(this,t+m.x,n+m.y);V.push('<g_vml_:line from="',-l,' 0" to="',h,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!o,'" stroked="',!!o,'" style="position:absolute;width:1px;height:1px;">'),o?x(this,V):_(this,V,{x:-l,y:0},{x:h,y:U.size});var f=r[0][0].toFixed(3)+","+r[1][0].toFixed(3)+","+r[0][1].toFixed(3)+","+r[1][1].toFixed(3)+",0,0",k=S(b.x/A)+","+S(b.y/A);V.push('<g_vml_:skew on="t" matrix="',f,'" ',' offset="',k,'" origin="',l,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',i(e),'" style="v-text-align:',c,";font:",i(d),'" /></g_vml_:line>'),this.element_.insertAdjacentHTML("beforeEnd",V.join(""))},Z.fillText=function(e,t,i,n){this.drawText_(e,t,i,n,!1)},Z.strokeText=function(e,t,i,n){this.drawText_(e,t,i,n,!0)},Z.measureText=function(e){if(!this.textMeasureEl_){var t='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",t),this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";try{this.textMeasureEl_.style.font=this.font}catch(n){}return this.textMeasureEl_.appendChild(i.createTextNode(e)),{width:this.textMeasureEl_.offsetWidth}},Z.clip=function(){},Z.arcTo=function(){},Z.createPattern=function(e,t){return new w(e,t)},v.prototype.addColorStop=function(e,t){t=c(t),this.colors_.push({offset:e,color:t.color,alpha:t.alpha})};var q=J.prototype=new Error;q.INDEX_SIZE_ERR=1,q.DOMSTRING_SIZE_ERR=2,q.HIERARCHY_REQUEST_ERR=3,q.WRONG_DOCUMENT_ERR=4,q.INVALID_CHARACTER_ERR=5,q.NO_DATA_ALLOWED_ERR=6,q.NO_MODIFICATION_ALLOWED_ERR=7,q.NOT_FOUND_ERR=8,q.NOT_SUPPORTED_ERR=9,q.INUSE_ATTRIBUTE_ERR=10,q.INVALID_STATE_ERR=11,q.SYNTAX_ERR=12,q.INVALID_MODIFICATION_ERR=13,q.NAMESPACE_ERR=14,q.INVALID_ACCESS_ERR=15,q.VALIDATION_ERR=16,q.TYPE_MISMATCH_ERR=17,G_vmlCanvasManager=P,CanvasRenderingContext2D=f,CanvasGradient=v,CanvasPattern=w,DOMException=J}(),G_vmlCanvasManager}),i("zrender/mixin/Eventful",["require"],function(){var e=function(){this._handlers={}};return e.prototype.one=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!0,ctx:i||this}),this):this},e.prototype.bind=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!1,ctx:i||this}),this):this},e.prototype.unbind=function(e,t){var i=this._handlers;if(!e)return this._handlers={},this;if(t){if(i[e]){for(var n=[],a=0,o=i[e].length;o>a;a++)i[e][a].h!=t&&n.push(i[e][a]);i[e]=n}i[e]&&0===i[e].length&&delete i[e]}else delete i[e];return this},e.prototype.dispatch=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>3&&(t=Array.prototype.slice.call(t,1));for(var n=this._handlers[e],a=n.length,o=0;a>o;){switch(i){case 1:n[o].h.call(n[o].ctx);break;case 2:n[o].h.call(n[o].ctx,t[1]);break;case 3:n[o].h.call(n[o].ctx,t[1],t[2]);break;default:n[o].h.apply(n[o].ctx,t)}n[o].one?(n.splice(o,1),a--):o++}}return this},e.prototype.dispatchWithContext=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>4&&(t=Array.prototype.slice.call(t,1,t.length-1));for(var n=t[t.length-1],a=this._handlers[e],o=a.length,r=0;o>r;){switch(i){case 1:a[r].h.call(n);break;case 2:a[r].h.call(n,t[1]);break;case 3:a[r].h.call(n,t[1],t[2]);break;default:a[r].h.apply(n,t)}a[r].one?(a.splice(r,1),o--):r++}}return this},e}),i("zrender/tool/log",["require","../config"],function(e){var t=e("../config");return function(){if(0!==t.debugMode)if(1==t.debugMode)for(var e in arguments)throw new Error(arguments[e]);else if(t.debugMode>1)for(var e in arguments)console.log(arguments[e])}}),i("zrender/tool/guid",[],function(){var e=2311;return function(){return"zrender__"+e++}}),i("zrender/Handler",["require","./config","./tool/env","./tool/event","./tool/util","./tool/vector","./tool/matrix","./mixin/Eventful"],function(e){"use strict";function t(e,t){return function(i,n){return e.call(t,i,n)}}function i(e,t){return function(i,n,a){return e.call(t,i,n,a)}}function n(e){for(var i=d.length;i--;){var n=d[i];e["_"+n+"Handler"]=t(c[n],e)}}function a(e,t,i){if(this._draggingTarget&&this._draggingTarget.id==e.id||e.isSilent())return!1;var n=this._event;if(e.isCover(t,i)){e.hoverable&&this.storage.addHover(e);for(var a=e.parent;a;){if(a.clipShape&&!a.clipShape.isCover(this._mouseX,this._mouseY))return!1;a=a.parent}return this._lastHover!=e&&(this._processOutShape(n),this._processDragLeave(n),this._lastHover=e,this._processDragEnter(n)),this._processOverShape(n),this._processDragOver(n),this._hasfound=1,!0}return!1}var o=e("./config"),r=e("./tool/env"),s=e("./tool/event"),l=e("./tool/util"),h=e("./tool/vector"),m=e("./tool/matrix"),V=o.EVENT,U=e("./mixin/Eventful"),d=["resize","click","dblclick","mousewheel","mousemove","mouseout","mouseup","mousedown","touchstart","touchend","touchmove"],p=function(e){if(window.G_vmlCanvasManager)return!0;e=e||window.event;var t=e.toElement||e.relatedTarget||e.srcElement||e.target;return t&&t.className.match(o.elementClassName)},c={resize:function(e){e=e||window.event,this._lastHover=null,this._isMouseDown=0,this.dispatch(V.RESIZE,e)},click:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=this._lastHover;(i&&i.clickable||!i)&&this._clickThreshold<5&&this._dispatchAgency(i,V.CLICK,e),this._mousemoveHandler(e)}},dblclick:function(e,t){if(p(e)||t){e=e||window.event,e=this._zrenderEventFixed(e);var i=this._lastHover;(i&&i.clickable||!i)&&this._clickThreshold<5&&this._dispatchAgency(i,V.DBLCLICK,e),this._mousemoveHandler(e)}},mousewheel:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=e.wheelDelta||-e.detail,n=i>0?1.1:1/1.1,a=!1,o=this._mouseX,r=this._mouseY;this.painter.eachBuildinLayer(function(t){var i=t.position;if(t.zoomable){t.__zoom=t.__zoom||1;var l=t.__zoom;l*=n,l=Math.max(Math.min(t.maxZoom,l),t.minZoom),n=l/t.__zoom,t.__zoom=l,i[0]-=(o-i[0])*(n-1),i[1]-=(r-i[1])*(n-1),t.scale[0]*=n,t.scale[1]*=n,t.dirty=!0,a=!0,s.stop(e)}}),a&&this.painter.refresh(),this._dispatchAgency(this._lastHover,V.MOUSEWHEEL,e),this._mousemoveHandler(e)}},mousemove:function(e,t){if((p(e)||t)&&!this.painter.isLoading()){e=this._zrenderEventFixed(e),this._lastX=this._mouseX,this._lastY=this._mouseY,this._mouseX=s.getX(e),this._mouseY=s.getY(e);var i=this._mouseX-this._lastX,n=this._mouseY-this._lastY;this._processDragStart(e),this._hasfound=0,this._event=e,this._iterateAndFindHover(),this._hasfound||((!this._draggingTarget||this._lastHover&&this._lastHover!=this._draggingTarget)&&(this._processOutShape(e), +this._processDragLeave(e)),this._lastHover=null,this.storage.delHover(),this.painter.clearHover());var a="default";if(this._draggingTarget)this.storage.drift(this._draggingTarget.id,i,n),this._draggingTarget.modSelf(),this.storage.addHover(this._draggingTarget),this._clickThreshold++;else if(this._isMouseDown){var o=!1;this.painter.eachBuildinLayer(function(e){e.panable&&(a="move",e.position[0]+=i,e.position[1]+=n,o=!0,e.dirty=!0)}),o&&this.painter.refresh()}this._draggingTarget||this._hasfound&&this._lastHover.draggable?a="move":this._hasfound&&this._lastHover.clickable&&(a="pointer"),this.root.style.cursor=a,this._dispatchAgency(this._lastHover,V.MOUSEMOVE,e),(this._draggingTarget||this._hasfound||this.storage.hasHoverShape())&&this.painter.refreshHover()}},mouseout:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=e.toElement||e.relatedTarget;if(i!=this.root)for(;i&&9!=i.nodeType;){if(i==this.root)return void this._mousemoveHandler(e);i=i.parentNode}e.zrenderX=this._lastX,e.zrenderY=this._lastY,this.root.style.cursor="default",this._isMouseDown=0,this._processOutShape(e),this._processDrop(e),this._processDragEnd(e),this.painter.isLoading()||this.painter.refreshHover(),this.dispatch(V.GLOBALOUT,e)}},mousedown:function(e,t){if(p(e)||t){if(this._clickThreshold=0,2==this._lastDownButton)return this._lastDownButton=e.button,void(this._mouseDownTarget=null);this._lastMouseDownMoment=new Date,e=this._zrenderEventFixed(e),this._isMouseDown=1,this._mouseDownTarget=this._lastHover,this._dispatchAgency(this._lastHover,V.MOUSEDOWN,e),this._lastDownButton=e.button}},mouseup:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e),this.root.style.cursor="default",this._isMouseDown=0,this._mouseDownTarget=null,this._dispatchAgency(this._lastHover,V.MOUSEUP,e),this._processDrop(e),this._processDragEnd(e))},touchstart:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e,!0),this._lastTouchMoment=new Date,this._mobileFindFixed(e),this._mousedownHandler(e))},touchmove:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e,!0),this._mousemoveHandler(e),this._isDragging&&s.stop(e))},touchend:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e,!0),this._mouseupHandler(e);var i=new Date;i-this._lastTouchMoment<V.touchClickDelay&&(this._mobileFindFixed(e),this._clickHandler(e),i-this._lastClickMoment<V.touchClickDelay/2&&(this._dblclickHandler(e),this._lastHover&&this._lastHover.clickable&&s.stop(e)),this._lastClickMoment=i),this.painter.clearHover()}}},u=function(e,t,o){U.call(this),this.root=e,this.storage=t,this.painter=o,this._lastX=this._lastY=this._mouseX=this._mouseY=0,this._findHover=i(a,this),this._domHover=o.getDomHover(),n(this),window.addEventListener?(window.addEventListener("resize",this._resizeHandler),r.os.tablet||r.os.phone?(e.addEventListener("touchstart",this._touchstartHandler),e.addEventListener("touchmove",this._touchmoveHandler),e.addEventListener("touchend",this._touchendHandler)):(e.addEventListener("click",this._clickHandler),e.addEventListener("dblclick",this._dblclickHandler),e.addEventListener("mousewheel",this._mousewheelHandler),e.addEventListener("mousemove",this._mousemoveHandler),e.addEventListener("mousedown",this._mousedownHandler),e.addEventListener("mouseup",this._mouseupHandler)),e.addEventListener("DOMMouseScroll",this._mousewheelHandler),e.addEventListener("mouseout",this._mouseoutHandler)):(window.attachEvent("onresize",this._resizeHandler),e.attachEvent("onclick",this._clickHandler),e.ondblclick=this._dblclickHandler,e.attachEvent("onmousewheel",this._mousewheelHandler),e.attachEvent("onmousemove",this._mousemoveHandler),e.attachEvent("onmouseout",this._mouseoutHandler),e.attachEvent("onmousedown",this._mousedownHandler),e.attachEvent("onmouseup",this._mouseupHandler))};u.prototype.on=function(e,t,i){return this.bind(e,t,i),this},u.prototype.un=function(e,t){return this.unbind(e,t),this},u.prototype.trigger=function(e,t){switch(e){case V.RESIZE:case V.CLICK:case V.DBLCLICK:case V.MOUSEWHEEL:case V.MOUSEMOVE:case V.MOUSEDOWN:case V.MOUSEUP:case V.MOUSEOUT:this["_"+e+"Handler"](t,!0)}},u.prototype.dispose=function(){var e=this.root;window.removeEventListener?(window.removeEventListener("resize",this._resizeHandler),r.os.tablet||r.os.phone?(e.removeEventListener("touchstart",this._touchstartHandler),e.removeEventListener("touchmove",this._touchmoveHandler),e.removeEventListener("touchend",this._touchendHandler)):(e.removeEventListener("click",this._clickHandler),e.removeEventListener("dblclick",this._dblclickHandler),e.removeEventListener("mousewheel",this._mousewheelHandler),e.removeEventListener("mousemove",this._mousemoveHandler),e.removeEventListener("mousedown",this._mousedownHandler),e.removeEventListener("mouseup",this._mouseupHandler)),e.removeEventListener("DOMMouseScroll",this._mousewheelHandler),e.removeEventListener("mouseout",this._mouseoutHandler)):(window.detachEvent("onresize",this._resizeHandler),e.detachEvent("onclick",this._clickHandler),e.detachEvent("dblclick",this._dblclickHandler),e.detachEvent("onmousewheel",this._mousewheelHandler),e.detachEvent("onmousemove",this._mousemoveHandler),e.detachEvent("onmouseout",this._mouseoutHandler),e.detachEvent("onmousedown",this._mousedownHandler),e.detachEvent("onmouseup",this._mouseupHandler)),this.root=this._domHover=this.storage=this.painter=null,this.un()},u.prototype._processDragStart=function(e){var t=this._lastHover;if(this._isMouseDown&&t&&t.draggable&&!this._draggingTarget&&this._mouseDownTarget==t){if(t.dragEnableTime&&new Date-this._lastMouseDownMoment<t.dragEnableTime)return;var i=t;this._draggingTarget=i,this._isDragging=1,i.invisible=!0,this.storage.mod(i.id),this._dispatchAgency(i,V.DRAGSTART,e),this.painter.refresh()}},u.prototype._processDragEnter=function(e){this._draggingTarget&&this._dispatchAgency(this._lastHover,V.DRAGENTER,e,this._draggingTarget)},u.prototype._processDragOver=function(e){this._draggingTarget&&this._dispatchAgency(this._lastHover,V.DRAGOVER,e,this._draggingTarget)},u.prototype._processDragLeave=function(e){this._draggingTarget&&this._dispatchAgency(this._lastHover,V.DRAGLEAVE,e,this._draggingTarget)},u.prototype._processDrop=function(e){this._draggingTarget&&(this._draggingTarget.invisible=!1,this.storage.mod(this._draggingTarget.id),this.painter.refresh(),this._dispatchAgency(this._lastHover,V.DROP,e,this._draggingTarget))},u.prototype._processDragEnd=function(e){this._draggingTarget&&(this._dispatchAgency(this._draggingTarget,V.DRAGEND,e),this._lastHover=null),this._isDragging=0,this._draggingTarget=null},u.prototype._processOverShape=function(e){this._dispatchAgency(this._lastHover,V.MOUSEOVER,e)},u.prototype._processOutShape=function(e){this._dispatchAgency(this._lastHover,V.MOUSEOUT,e)},u.prototype._dispatchAgency=function(e,t,i,n){var a="on"+t,o={type:t,event:i,target:e,cancelBubble:!1},r=e;for(n&&(o.dragged=n);r&&(r[a]&&(o.cancelBubble=r[a](o)),r.dispatch(t,o),r=r.parent,!o.cancelBubble););if(e)o.cancelBubble||this.dispatch(t,o);else if(!n){var s={type:t,event:i};this.dispatch(t,s),this.painter.eachOtherLayer(function(e){"function"==typeof e[a]&&e[a](s),e.dispatch&&e.dispatch(t,s)})}},u.prototype._iterateAndFindHover=function(){var e=m.create();return function(){for(var t,i,n=this.storage.getShapeList(),a=[0,0],o=n.length-1;o>=0;o--){var r=n[o];if(t!==r.zlevel&&(i=this.painter.getLayer(r.zlevel,i),a[0]=this._mouseX,a[1]=this._mouseY,i.needTransform&&(m.invert(e,i.transform),h.applyTransform(a,a,e))),this._findHover(r,a[0],a[1]))break}}}();var y=[{x:10},{x:-20},{x:10,y:10},{y:-20}];return u.prototype._mobileFindFixed=function(e){this._lastHover=null,this._mouseX=e.zrenderX,this._mouseY=e.zrenderY,this._event=e,this._iterateAndFindHover();for(var t=0;!this._lastHover&&t<y.length;t++){var i=y[t];i.x&&(this._mouseX+=i.x),i.y&&(this._mouseY+=i.y),this._iterateAndFindHover()}this._lastHover&&(e.zrenderX=this._mouseX,e.zrenderY=this._mouseY)},u.prototype._zrenderEventFixed=function(e,t){if(e.zrenderFixed)return e;if(t){var i="touchend"!=e.type?e.targetTouches[0]:e.changedTouches[0];if(i){var n=this.painter._domRoot.getBoundingClientRect();e.zrenderX=i.clientX-n.left,e.zrenderY=i.clientY-n.top}}else{e=e||window.event;var a=e.toElement||e.relatedTarget||e.srcElement||e.target;a&&a!=this._domHover&&(e.zrenderX=("undefined"!=typeof e.offsetX?e.offsetX:e.layerX)+a.offsetLeft,e.zrenderY=("undefined"!=typeof e.offsetY?e.offsetY:e.layerY)+a.offsetTop)}return e.zrenderFixed=1,e},l.merge(u.prototype,U.prototype,!0),u}),i("zrender/Painter",["require","./config","./tool/util","./tool/log","./loadingEffect/Base","./Layer","./shape/Image"],function(e){"use strict";function t(){return!1}function i(){}function n(e){return e?e.isBuildin?!0:"function"!=typeof e.resize||"function"!=typeof e.refresh?!1:!0:!1}var a=e("./config"),o=e("./tool/util"),r=e("./tool/log"),s=e("./loadingEffect/Base"),l=e("./Layer"),h=function(e,i){this.root=e,e.style["-webkit-tap-highlight-color"]="transparent",e.style["-webkit-user-select"]="none",e.style["user-select"]="none",e.style["-webkit-touch-callout"]="none",this.storage=i,e.innerHTML="",this._width=this._getWidth(),this._height=this._getHeight();var n=document.createElement("div");this._domRoot=n,n.style.position="relative",n.style.overflow="hidden",n.style.width=this._width+"px",n.style.height=this._height+"px",e.appendChild(n),this._layers={},this._zlevelList=[],this._layerConfig={},this._loadingEffect=new s({}),this.shapeToImage=this._createShapeToImageProcessor(),this._bgDom=document.createElement("div"),this._bgDom.style.cssText=["position:absolute;left:0px;top:0px;width:",this._width,"px;height:",this._height+"px;","-webkit-user-select:none;user-select;none;","-webkit-touch-callout:none;"].join(""),this._bgDom.setAttribute("data-zr-dom-id","bg"),this._bgDom.className=a.elementClassName,n.appendChild(this._bgDom),this._bgDom.onselectstart=t;var o=new l("_zrender_hover_",this);this._layers.hover=o,n.appendChild(o.dom),o.initContext(),o.dom.onselectstart=t,o.dom.style["-webkit-user-select"]="none",o.dom.style["user-select"]="none",o.dom.style["-webkit-touch-callout"]="none",this.refreshNextFrame=null};return h.prototype.render=function(e){return this.isLoading()&&this.hideLoading(),this.refresh(e,!0),this},h.prototype.refresh=function(e,t){var i=this.storage.getShapeList(!0);this._paintList(i,t);for(var n=0;n<this._zlevelList.length;n++){var a=this._zlevelList[n],o=this._layers[a];!o.isBuildin&&o.refresh&&o.refresh()}return"function"==typeof e&&e(),this},h.prototype._preProcessLayer=function(e){e.unusedCount++,e.updateTransform()},h.prototype._postProcessLayer=function(e){e.dirty=!1,1==e.unusedCount&&e.clear()},h.prototype._paintList=function(e,t){"undefined"==typeof t&&(t=!1),this._updateLayerStatus(e);var i,n,o;this.eachBuildinLayer(this._preProcessLayer);for(var s=0,l=e.length;l>s;s++){var h=e[s];if(n!==h.zlevel&&(i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),n=h.zlevel,i=this.getLayer(n),i.isBuildin||r("ZLevel "+n+" has been used by unkown layer "+i.id),o=i.ctx,i.unusedCount=0,(i.dirty||t)&&i.clear(),i.needTransform&&(o.save(),i.setTransform(o))),(i.dirty||t)&&!h.invisible&&(!h.onbrush||h.onbrush&&!h.onbrush(o,!1)))if(a.catchBrushException)try{h.brush(o,!1,this.refreshNextFrame)}catch(m){r(m,"brush error of "+h.type,h)}else h.brush(o,!1,this.refreshNextFrame);h.__dirty=!1}i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),this.eachBuildinLayer(this._postProcessLayer)},h.prototype.getLayer=function(e){var t=this._layers[e];return t||(t=new l(e,this),t.isBuildin=!0,this._layerConfig[e]&&o.merge(t,this._layerConfig[e],!0),t.updateTransform(),this.insertLayer(e,t),t.initContext()),t},h.prototype.insertLayer=function(e,t){if(this._layers[e])return void r("ZLevel "+e+" has been used already");if(!n(t))return void r("Layer of zlevel "+e+" is not valid");var i=this._zlevelList.length,a=null,o=-1;if(i>0&&e>this._zlevelList[0]){for(o=0;i-1>o&&!(this._zlevelList[o]<e&&this._zlevelList[o+1]>e);o++);a=this._layers[this._zlevelList[o]]}this._zlevelList.splice(o+1,0,e);var s=a?a.dom:this._bgDom;s.nextSibling?s.parentNode.insertBefore(t.dom,s.nextSibling):s.parentNode.appendChild(t.dom),this._layers[e]=t},h.prototype.eachLayer=function(e,t){for(var i=0;i<this._zlevelList.length;i++){var n=this._zlevelList[i];e.call(t,this._layers[n],n)}},h.prototype.eachBuildinLayer=function(e,t){for(var i=0;i<this._zlevelList.length;i++){var n=this._zlevelList[i],a=this._layers[n];a.isBuildin&&e.call(t,a,n)}},h.prototype.eachOtherLayer=function(e,t){for(var i=0;i<this._zlevelList.length;i++){var n=this._zlevelList[i],a=this._layers[n];a.isBuildin||e.call(t,a,n)}},h.prototype.getLayers=function(){return this._layers},h.prototype._updateLayerStatus=function(e){var t=this._layers,i={};this.eachBuildinLayer(function(e,t){i[t]=e.elCount,e.elCount=0});for(var n=0,a=e.length;a>n;n++){var o=e[n],r=o.zlevel,s=t[r];if(s){if(s.elCount++,s.dirty)continue;s.dirty=o.__dirty}}this.eachBuildinLayer(function(e,t){i[t]!==e.elCount&&(e.dirty=!0)})},h.prototype.refreshShapes=function(e,t){for(var i=0,n=e.length;n>i;i++){var a=e[i];a.modSelf()}return this.refresh(t),this},h.prototype.setLoadingEffect=function(e){return this._loadingEffect=e,this},h.prototype.clear=function(){return this.eachBuildinLayer(this._clearLayer),this},h.prototype._clearLayer=function(e){e.clear()},h.prototype.modLayer=function(e,t){if(t){this._layerConfig[e]?o.merge(this._layerConfig[e],t,!0):this._layerConfig[e]=t;var i=this._layers[e];i&&o.merge(i,this._layerConfig[e],!0)}},h.prototype.delLayer=function(e){var t=this._layers[e];t&&(this.modLayer(e,{position:t.position,rotation:t.rotation,scale:t.scale}),t.dom.parentNode.removeChild(t.dom),delete this._layers[e],this._zlevelList.splice(o.indexOf(this._zlevelList,e),1))},h.prototype.refreshHover=function(){this.clearHover();for(var e=this.storage.getHoverShapes(!0),t=0,i=e.length;i>t;t++)this._brushHover(e[t]);var n=this._layers.hover.ctx;return n.flush&&n.flush(),this.storage.delHover(),this},h.prototype.clearHover=function(){var e=this._layers.hover;return e&&e.clear(),this},h.prototype.showLoading=function(e){return this._loadingEffect&&this._loadingEffect.stop(),e&&this.setLoadingEffect(e),this._loadingEffect.start(this),this.loading=!0,this},h.prototype.hideLoading=function(){return this._loadingEffect.stop(),this.clearHover(),this.loading=!1,this},h.prototype.isLoading=function(){return this.loading},h.prototype.resize=function(){var e=this._domRoot;e.style.display="none";var t=this._getWidth(),i=this._getHeight();if(e.style.display="",this._width!=t||i!=this._height){this._width=t,this._height=i,e.style.width=t+"px",e.style.height=i+"px";for(var n in this._layers)this._layers[n].resize(t,i);this.refresh(null,!0)}return this},h.prototype.clearLayer=function(e){var t=this._layers[e];t&&t.clear()},h.prototype.dispose=function(){this.isLoading()&&this.hideLoading(),this.root.innerHTML="",this.root=this.storage=this._domRoot=this._layers=null},h.prototype.getDomHover=function(){return this._layers.hover.dom},h.prototype.toDataURL=function(e,t,i){if(window.G_vmlCanvasManager)return null;var n=new l("image",this);this._bgDom.appendChild(n.dom),n.initContext();var o=n.ctx;n.clearColor=t||"#fff",n.clear();var s=this;this.storage.iterShape(function(e){if(!e.invisible&&(!e.onbrush||e.onbrush&&!e.onbrush(o,!1)))if(a.catchBrushException)try{e.brush(o,!1,s.refreshNextFrame)}catch(t){r(t,"brush error of "+e.type,e)}else e.brush(o,!1,s.refreshNextFrame)},{normal:"up",update:!0});var h=n.dom.toDataURL(e,i);return o=null,this._bgDom.removeChild(n.dom),h},h.prototype.getWidth=function(){return this._width},h.prototype.getHeight=function(){return this._height},h.prototype._getWidth=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientWidth||parseInt(t.width,10))-parseInt(t.paddingLeft,10)-parseInt(t.paddingRight,10)).toFixed(0)-0},h.prototype._getHeight=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientHeight||parseInt(t.height,10))-parseInt(t.paddingTop,10)-parseInt(t.paddingBottom,10)).toFixed(0)-0},h.prototype._brushHover=function(e){var t=this._layers.hover.ctx;if(!e.onbrush||e.onbrush&&!e.onbrush(t,!0)){var i=this.getLayer(e.zlevel);if(i.needTransform&&(t.save(),i.setTransform(t)),a.catchBrushException)try{e.brush(t,!0,this.refreshNextFrame)}catch(n){r(n,"hoverBrush error of "+e.type,e)}else e.brush(t,!0,this.refreshNextFrame);i.needTransform&&t.restore()}},h.prototype._shapeToImage=function(t,i,n,a,o){var r=document.createElement("canvas"),s=r.getContext("2d");r.style.width=n+"px",r.style.height=a+"px",r.setAttribute("width",n*o),r.setAttribute("height",a*o),s.clearRect(0,0,n*o,a*o);var l={position:i.position,rotation:i.rotation,scale:i.scale};i.position=[0,0,0],i.rotation=0,i.scale=[1,1],i&&i.brush(s,!1);var h=e("./shape/Image"),m=new h({id:t,style:{x:0,y:0,image:r}});return null!=l.position&&(m.position=i.position=l.position),null!=l.rotation&&(m.rotation=i.rotation=l.rotation),null!=l.scale&&(m.scale=i.scale=l.scale),m},h.prototype._createShapeToImageProcessor=function(){if(window.G_vmlCanvasManager)return i;var e=this;return function(t,i,n,o){return e._shapeToImage(t,i,n,o,a.devicePixelRatio)}},h}),i("zrender/Storage",["require","./tool/util","./Group"],function(e){"use strict";function t(e,t){return e.zlevel==t.zlevel?e.z==t.z?e.__renderidx-t.__renderidx:e.z-t.z:e.zlevel-t.zlevel}var i=e("./tool/util"),n=e("./Group"),a={hover:!1,normal:"down",update:!1},o=function(){this._elements={},this._hoverElements=[],this._roots=[],this._shapeList=[],this._shapeListOffset=0};return o.prototype.iterShape=function(e,t){if(t||(t=a),t.hover)for(var i=0,n=this._hoverElements.length;n>i;i++){var o=this._hoverElements[i];if(o.updateTransform(),e(o))return this}switch(t.update&&this.updateShapeList(),t.normal){case"down":for(var n=this._shapeList.length;n--;)if(e(this._shapeList[n]))return this;break;default:for(var i=0,n=this._shapeList.length;n>i;i++)if(e(this._shapeList[i]))return this}return this},o.prototype.getHoverShapes=function(e){for(var i=[],n=0,a=this._hoverElements.length;a>n;n++){i.push(this._hoverElements[n]);var o=this._hoverElements[n].hoverConnect;if(o){var r;o=o instanceof Array?o:[o];for(var s=0,l=o.length;l>s;s++)r=o[s].id?o[s]:this.get(o[s]),r&&i.push(r)}}if(i.sort(t),e)for(var n=0,a=i.length;a>n;n++)i[n].updateTransform();return i},o.prototype.getShapeList=function(e){return e&&this.updateShapeList(),this._shapeList},o.prototype.updateShapeList=function(){this._shapeListOffset=0;for(var e=0,i=this._roots.length;i>e;e++){var n=this._roots[e];this._updateAndAddShape(n)}this._shapeList.length=this._shapeListOffset;for(var e=0,i=this._shapeList.length;i>e;e++)this._shapeList[e].__renderidx=e;this._shapeList.sort(t)},o.prototype._updateAndAddShape=function(e,t){if(!e.ignore)if(e.updateTransform(),e.clipShape&&(e.clipShape.parent=e,e.clipShape.updateTransform(),t?(t=t.slice(),t.push(e.clipShape)):t=[e.clipShape]),"group"==e.type){for(var i=0;i<e._children.length;i++){var n=e._children[i];n.__dirty=e.__dirty||n.__dirty,this._updateAndAddShape(n,t)}e.__dirty=!1}else e.__clipShapes=t,this._shapeList[this._shapeListOffset++]=e},o.prototype.mod=function(e,t){if("string"==typeof e&&(e=this._elements[e]),e&&(e.modSelf(),t))if(t.parent||t._storage||t.__clipShapes){var n={};for(var a in t)"parent"!==a&&"_storage"!==a&&"__clipShapes"!==a&&t.hasOwnProperty(a)&&(n[a]=t[a]);i.merge(e,n,!0)}else i.merge(e,t,!0);return this},o.prototype.drift=function(e,t,i){var n=this._elements[e];return n&&(n.needTransform=!0,"horizontal"===n.draggable?i=0:"vertical"===n.draggable&&(t=0),(!n.ondrift||n.ondrift&&!n.ondrift(t,i))&&n.drift(t,i)),this},o.prototype.addHover=function(e){return e.updateNeedTransform(),this._hoverElements.push(e),this},o.prototype.delHover=function(){return this._hoverElements=[],this},o.prototype.hasHoverShape=function(){return this._hoverElements.length>0},o.prototype.addRoot=function(e){this._elements[e.id]||(e instanceof n&&e.addChildrenToStorage(this),this.addToMap(e),this._roots.push(e))},o.prototype.delRoot=function(e){if("undefined"==typeof e){for(var t=0;t<this._roots.length;t++){var a=this._roots[t];a instanceof n&&a.delChildrenFromStorage(this)}return this._elements={},this._hoverElements=[],this._roots=[],this._shapeList=[],void(this._shapeListOffset=0)}if(e instanceof Array)for(var t=0,o=e.length;o>t;t++)this.delRoot(e[t]);else{var r;r="string"==typeof e?this._elements[e]:e;var s=i.indexOf(this._roots,r);s>=0&&(this.delFromMap(r.id),this._roots.splice(s,1),r instanceof n&&r.delChildrenFromStorage(this))}},o.prototype.addToMap=function(e){return e instanceof n&&(e._storage=this),e.modSelf(),this._elements[e.id]=e,this},o.prototype.get=function(e){return this._elements[e]},o.prototype.delFromMap=function(e){var t=this._elements[e];return t&&(delete this._elements[e],t instanceof n&&(t._storage=null)),this},o.prototype.dispose=function(){this._elements=this._renderList=this._roots=this._hoverElements=null},o}),i("zrender/animation/Animation",["require","./Clip","../tool/color","../tool/util","../tool/event"],function(e){"use strict";function t(e,t){return e[t]}function i(e,t,i){e[t]=i}function n(e,t,i){return(t-e)*i+e}function a(e,t,i,a,o){var r=e.length;if(1==o)for(var s=0;r>s;s++)a[s]=n(e[s],t[s],i);else for(var l=e[0].length,s=0;r>s;s++)for(var h=0;l>h;h++)a[s][h]=n(e[s][h],t[s][h],i)}function o(e){switch(typeof e){case"undefined":case"string":return!1}return"undefined"!=typeof e.length}function r(e,t,i,n,a,o,r,l,h){var m=e.length;if(1==h)for(var V=0;m>V;V++)l[V]=s(e[V],t[V],i[V],n[V],a,o,r);else for(var U=e[0].length,V=0;m>V;V++)for(var d=0;U>d;d++)l[V][d]=s(e[V][d],t[V][d],i[V][d],n[V][d],a,o,r)}function s(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}function l(e){if(o(e)){var t=e.length;if(o(e[0])){for(var i=[],n=0;t>n;n++)i.push(c.call(e[n]));return i}return c.call(e)}return e}function h(e){return e[0]=Math.floor(e[0]),e[1]=Math.floor(e[1]),e[2]=Math.floor(e[2]),"rgba("+e.join(",")+")"}var m=e("./Clip"),V=e("../tool/color"),U=e("../tool/util"),d=e("../tool/event").Dispatcher,p=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},c=Array.prototype.slice,u=function(e){e=e||{},this.stage=e.stage||{},this.onframe=e.onframe||function(){},this._clips=[],this._running=!1,this._time=0,d.call(this)};u.prototype={add:function(e){this._clips.push(e)},remove:function(e){if(e.__inStep)e.__needsRemove=!0;else{var t=U.indexOf(this._clips,e);t>=0&&this._clips.splice(t,1)}},_update:function(){for(var e=(new Date).getTime(),t=e-this._time,i=this._clips,n=i.length,a=[],o=[],r=0;n>r;r++){var s=i[r];s.__inStep=!0;var l=s.step(e);s.__inStep=!1,l&&(a.push(l),o.push(s))}for(var r=0;n>r;)i[r].__needsRemove?(i[r]=i[n-1],i.pop(),n--):r++;n=a.length;for(var r=0;n>r;r++)o[r].fire(a[r]);this._time=e,this.onframe(t),this.dispatch("frame",t),this.stage.update&&this.stage.update()},start:function(){function e(){t._running&&(p(e),t._update())}var t=this;this._running=!0,this._time=(new Date).getTime(),p(e)},stop:function(){this._running=!1},clear:function(){this._clips=[]},animate:function(e,t){t=t||{};var i=new y(e,t.loop,t.getter,t.setter);return i.animation=this,i},constructor:u},U.merge(u.prototype,d.prototype,!0);var y=function(e,n,a,o){this._tracks={},this._target=e,this._loop=n||!1,this._getter=a||t,this._setter=o||i,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};return y.prototype={when:function(e,t){for(var i in t)this._tracks[i]||(this._tracks[i]=[],0!==e&&this._tracks[i].push({time:0,value:l(this._getter(this._target,i))})),this._tracks[i].push({time:parseInt(e,10),value:t[i]});return this},during:function(e){return this._onframeList.push(e),this},start:function(e){var t=this,i=this._setter,l=this._getter,U="spline"===e,d=function(){if(t._clipCount--,0===t._clipCount){t._tracks={};for(var e=t._doneList.length,i=0;e>i;i++)t._doneList[i].call(t)}},p=function(p,c){var u=p.length;if(u){var y=p[0].value,g=o(y),b=!1,f=g&&o(y[0])?2:1;p.sort(function(e,t){return e.time-t.time});var k;if(u){k=p[u-1].time;for(var x=[],_=[],L=0;u>L;L++){x.push(p[L].time/k);var W=p[L].value;"string"==typeof W&&(W=V.toArray(W),0===W.length&&(W[0]=W[1]=W[2]=0,W[3]=1),b=!0),_.push(W)}var X,L,v,w,K,I,J,C=0,S=0;if(b)var E=[0,0,0,0];var F=function(e,o){if(S>o){for(X=Math.min(C+1,u-1),L=X;L>=0&&!(x[L]<=o);L--);L=Math.min(L,u-2)}else{for(L=C;u>L&&!(x[L]>o);L++);L=Math.min(L-1,u-2)}C=L,S=o;var m=x[L+1]-x[L];if(0!==m){if(v=(o-x[L])/m,U)if(K=_[L],w=_[0===L?L:L-1],I=_[L>u-2?u-1:L+1],J=_[L>u-3?u-1:L+2],g)r(w,K,I,J,v,v*v,v*v*v,l(e,c),f);else{var V;b?(V=r(w,K,I,J,v,v*v,v*v*v,E,1),V=h(E)):V=s(w,K,I,J,v,v*v,v*v*v),i(e,c,V)}else if(g)a(_[L],_[L+1],v,l(e,c),f);else{var V;b?(a(_[L],_[L+1],v,E,1),V=h(E)):V=n(_[L],_[L+1],v),i(e,c,V)}for(L=0;L<t._onframeList.length;L++)t._onframeList[L](e,o)}},T=new m({target:t._target,life:k,loop:t._loop,delay:t._delay,onframe:F,ondestroy:d});e&&"spline"!==e&&(T.easing=e),t._clipList.push(T),t._clipCount++,t.animation.add(T)}}};for(var c in this._tracks)p(this._tracks[c],c);return this},stop:function(){for(var e=0;e<this._clipList.length;e++){var t=this._clipList[e];this.animation.remove(t)}this._clipList=[]},delay:function(e){return this._delay=e,this},done:function(e){return e&&this._doneList.push(e),this}},u}),i("zrender/tool/vector",[],function(){var e="undefined"==typeof Float32Array?Array:Float32Array,t={create:function(t,i){var n=new e(2);return n[0]=t||0,n[1]=i||0,n},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e},clone:function(t){var i=new e(2);return i[0]=t[0],i[1]=t[1],i},set:function(e,t,i){return e[0]=t,e[1]=i,e},add:function(e,t,i){return e[0]=t[0]+i[0],e[1]=t[1]+i[1],e},scaleAndAdd:function(e,t,i,n){return e[0]=t[0]+i[0]*n,e[1]=t[1]+i[1]*n,e},sub:function(e,t,i){return e[0]=t[0]-i[0],e[1]=t[1]-i[1],e},len:function(e){return Math.sqrt(this.lenSquare(e))},lenSquare:function(e){return e[0]*e[0]+e[1]*e[1]},mul:function(e,t,i){return e[0]=t[0]*i[0],e[1]=t[1]*i[1],e},div:function(e,t,i){return e[0]=t[0]/i[0],e[1]=t[1]/i[1],e},dot:function(e,t){return e[0]*t[0]+e[1]*t[1]},scale:function(e,t,i){return e[0]=t[0]*i,e[1]=t[1]*i,e},normalize:function(e,i){var n=t.len(i);return 0===n?(e[0]=0,e[1]=0):(e[0]=i[0]/n,e[1]=i[1]/n),e},distance:function(e,t){return Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1]))},distanceSquare:function(e,t){return(e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])},negate:function(e,t){return e[0]=-t[0],e[1]=-t[1],e},lerp:function(e,t,i,n){return e[0]=t[0]+n*(i[0]-t[0]),e[1]=t[1]+n*(i[1]-t[1]),e},applyTransform:function(e,t,i){var n=t[0],a=t[1];return e[0]=i[0]*n+i[2]*a+i[4],e[1]=i[1]*n+i[3]*a+i[5],e},min:function(e,t,i){return e[0]=Math.min(t[0],i[0]),e[1]=Math.min(t[1],i[1]),e},max:function(e,t,i){return e[0]=Math.max(t[0],i[0]),e[1]=Math.max(t[1],i[1]),e}};return t.length=t.len,t.lengthSquare=t.lenSquare,t.dist=t.distance,t.distSquare=t.distanceSquare,t}),i("zrender/tool/matrix",[],function(){var e="undefined"==typeof Float32Array?Array:Float32Array,t={create:function(){var i=new e(6);return t.identity(i),i},identity:function(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0,e},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e},mul:function(e,t,i){return e[0]=t[0]*i[0]+t[2]*i[1],e[1]=t[1]*i[0]+t[3]*i[1],e[2]=t[0]*i[2]+t[2]*i[3],e[3]=t[1]*i[2]+t[3]*i[3],e[4]=t[0]*i[4]+t[2]*i[5]+t[4],e[5]=t[1]*i[4]+t[3]*i[5]+t[5],e},translate:function(e,t,i){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4]+i[0],e[5]=t[5]+i[1],e},rotate:function(e,t,i){var n=t[0],a=t[2],o=t[4],r=t[1],s=t[3],l=t[5],h=Math.sin(i),m=Math.cos(i);return e[0]=n*m+r*h,e[1]=-n*h+r*m,e[2]=a*m+s*h,e[3]=-a*h+m*s,e[4]=m*o+h*l,e[5]=m*l-h*o,e},scale:function(e,t,i){var n=i[0],a=i[1];return e[0]=t[0]*n,e[1]=t[1]*a,e[2]=t[2]*n,e[3]=t[3]*a,e[4]=t[4]*n,e[5]=t[5]*a,e},invert:function(e,t){var i=t[0],n=t[2],a=t[4],o=t[1],r=t[3],s=t[5],l=i*r-o*n;return l?(l=1/l,e[0]=r*l,e[1]=-o*l,e[2]=-n*l,e[3]=i*l,e[4]=(n*s-r*a)*l,e[5]=(o*a-i*s)*l,e):null}};return t}),i("zrender/loadingEffect/Base",["require","../tool/util","../shape/Text","../shape/Rectangle"],function(e){function t(e){this.setOptions(e)}var i=e("../tool/util"),n=e("../shape/Text"),a=e("../shape/Rectangle"),o="Loading...",r="normal 16px Arial";return t.prototype.createTextShape=function(e){return new n({highlightStyle:i.merge({x:this.canvasWidth/2,y:this.canvasHeight/2,text:o,textAlign:"center",textBaseline:"middle",textFont:r,color:"#333",brushType:"fill"},e,!0)})},t.prototype.createBackgroundShape=function(e){return new a({highlightStyle:{x:0,y:0,width:this.canvasWidth,height:this.canvasHeight,brushType:"fill",color:e}})},t.prototype.start=function(e){function t(t){e.storage.addHover(t)}function i(){e.refreshHover()}this.canvasWidth=e._width,this.canvasHeight=e._height,this.loadingTimer=this._start(t,i)},t.prototype._start=function(){return setInterval(function(){},1e4)},t.prototype.stop=function(){clearInterval(this.loadingTimer)},t.prototype.setOptions=function(e){this.options=e||{}},t.prototype.adjust=function(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e},t.prototype.getLocation=function(e,t,i){var n=null!=e.x?e.x:"center";switch(n){case"center":n=Math.floor((this.canvasWidth-t)/2);break;case"left":n=0;break;case"right":n=this.canvasWidth-t}var a=null!=e.y?e.y:"center";switch(a){case"center":a=Math.floor((this.canvasHeight-i)/2);break;case"top":a=0;break;case"bottom":a=this.canvasHeight-i}return{x:n,y:a,width:t,height:i}},t}),i("zrender/Layer",["require","./mixin/Transformable","./tool/util","./config"],function(e){function t(){return!1}function i(e,t,i){var n=document.createElement(t),a=i.getWidth(),o=i.getHeight();return n.style.position="absolute",n.style.left=0,n.style.top=0,n.style.width=a+"px",n.style.height=o+"px",n.width=a*r.devicePixelRatio,n.height=o*r.devicePixelRatio,n.setAttribute("data-zr-dom-id",e),n}var n=e("./mixin/Transformable"),a=e("./tool/util"),o=window.G_vmlCanvasManager,r=e("./config"),s=function(e,a){this.id=e,this.dom=i(e,"canvas",a),this.dom.onselectstart=t,this.dom.style["-webkit-user-select"]="none",this.dom.style["user-select"]="none",this.dom.style["-webkit-touch-callout"]="none",this.dom.style["-webkit-tap-highlight-color"]="rgba(0,0,0,0)",this.dom.className=r.elementClassName,o&&o.initElement(this.dom),this.domBack=null,this.ctxBack=null,this.painter=a,this.unusedCount=0,this.config=null,this.dirty=!0,this.elCount=0,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.zoomable=!1,this.panable=!1,this.maxZoom=1/0,this.minZoom=0,n.call(this)};return s.prototype.initContext=function(){this.ctx=this.dom.getContext("2d");var e=r.devicePixelRatio;1!=e&&this.ctx.scale(e,e)},s.prototype.createBackBuffer=function(){if(!o){this.domBack=i("back-"+this.id,"canvas",this.painter),this.ctxBack=this.domBack.getContext("2d");var e=r.devicePixelRatio;1!=e&&this.ctxBack.scale(e,e)}},s.prototype.resize=function(e,t){var i=r.devicePixelRatio;this.dom.style.width=e+"px",this.dom.style.height=t+"px",this.dom.setAttribute("width",e*i),this.dom.setAttribute("height",t*i),1!=i&&this.ctx.scale(i,i),this.domBack&&(this.domBack.setAttribute("width",e*i),this.domBack.setAttribute("height",t*i),1!=i&&this.ctxBack.scale(i,i))},s.prototype.clear=function(){var e=this.dom,t=this.ctx,i=e.width,n=e.height,a=this.clearColor&&!o,s=this.motionBlur&&!o,l=this.lastFrameAlpha,h=r.devicePixelRatio;if(s&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation="copy",this.ctxBack.drawImage(e,0,0,i/h,n/h)),t.clearRect(0,0,i/h,n/h),a&&(t.save(),t.fillStyle=this.clearColor,t.fillRect(0,0,i/h,n/h),t.restore()),s){var m=this.domBack;t.save(),t.globalAlpha=l,t.drawImage(m,0,0,i/h,n/h),t.restore()}},a.merge(s.prototype,n.prototype),s}),i("zrender/shape/Text",["require","../tool/area","./Base","../tool/util"],function(e){ +var t=e("../tool/area"),i=e("./Base"),n=function(e){i.call(this,e)};return n.prototype={type:"text",brush:function(e,i){var n=this.style;if(i&&(n=this.getHighlightStyle(n,this.highlightStyle||{})),"undefined"!=typeof n.text&&n.text!==!1){e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.textFont&&(e.font=n.textFont),e.textAlign=n.textAlign||"start",e.textBaseline=n.textBaseline||"middle";var a,o=(n.text+"").split("\n"),r=t.getTextHeight("国",n.textFont),s=this.getRect(n),l=n.x;a="top"==n.textBaseline?s.y:"bottom"==n.textBaseline?s.y+r:s.y+r/2;for(var h=0,m=o.length;m>h;h++){if(n.maxWidth)switch(n.brushType){case"fill":e.fillText(o[h],l,a,n.maxWidth);break;case"stroke":e.strokeText(o[h],l,a,n.maxWidth);break;case"both":e.fillText(o[h],l,a,n.maxWidth),e.strokeText(o[h],l,a,n.maxWidth);break;default:e.fillText(o[h],l,a,n.maxWidth)}else switch(n.brushType){case"fill":e.fillText(o[h],l,a);break;case"stroke":e.strokeText(o[h],l,a);break;case"both":e.fillText(o[h],l,a),e.strokeText(o[h],l,a);break;default:e.fillText(o[h],l,a)}a+=r}e.restore()}},getRect:function(e){if(e.__rect)return e.__rect;var i=t.getTextWidth(e.text,e.textFont),n=t.getTextHeight(e.text,e.textFont),a=e.x;"end"==e.textAlign||"right"==e.textAlign?a-=i:"center"==e.textAlign&&(a-=i/2);var o;return o="top"==e.textBaseline?e.y:"bottom"==e.textBaseline?e.y-n:e.y-n/2,e.__rect={x:a,y:o,width:i,height:n},e.__rect}},e("../tool/util").inherits(n,i),n}),i("zrender/shape/Rectangle",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"rectangle",_buildRadiusPath:function(e,t){var i,n,a,o,r=t.x,s=t.y,l=t.width,h=t.height,m=t.radius;"number"==typeof m?i=n=a=o=m:m instanceof Array?1===m.length?i=n=a=o=m[0]:2===m.length?(i=a=m[0],n=o=m[1]):3===m.length?(i=m[0],n=o=m[1],a=m[2]):(i=m[0],n=m[1],a=m[2],o=m[3]):i=n=a=o=0;var V;i+n>l&&(V=i+n,i*=l/V,n*=l/V),a+o>l&&(V=a+o,a*=l/V,o*=l/V),n+a>h&&(V=n+a,n*=h/V,a*=h/V),i+o>h&&(V=i+o,i*=h/V,o*=h/V),e.moveTo(r+i,s),e.lineTo(r+l-n,s),0!==n&&e.quadraticCurveTo(r+l,s,r+l,s+n),e.lineTo(r+l,s+h-a),0!==a&&e.quadraticCurveTo(r+l,s+h,r+l-a,s+h),e.lineTo(r+o,s+h),0!==o&&e.quadraticCurveTo(r,s+h,r,s+h-o),e.lineTo(r,s+i),0!==i&&e.quadraticCurveTo(r,s,r+i,s)},buildPath:function(e,t){t.radius?this._buildRadiusPath(e,t):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y)),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-t/2),y:Math.round(e.y-t/2),width:e.width+t,height:e.height+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("zrender/tool/area",["require","./util","./curve"],function(e){"use strict";function t(e){return e%=C,0>e&&(e+=C),e}function i(e,t,i,o){if(!t||!e)return!1;var r=e.type;L=L||W.getContext();var s=n(e,t,i,o);if("undefined"!=typeof s)return s;if(e.buildPath&&L.isPointInPath)return a(e,L,t,i,o);switch(r){case"ellipse":return!0;case"trochoid":var l="out"==t.location?t.r1+t.r2+t.d:t.r1-t.r2+t.d;return d(t,i,o,l);case"rose":return d(t,i,o,t.maxr);default:return!1}}function n(e,t,i,n){var a=e.type;switch(a){case"bezier-curve":return"undefined"==typeof t.cpX2?l(t.xStart,t.yStart,t.cpX1,t.cpY1,t.xEnd,t.yEnd,t.lineWidth,i,n):s(t.xStart,t.yStart,t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd,t.lineWidth,i,n);case"line":return r(t.xStart,t.yStart,t.xEnd,t.yEnd,t.lineWidth,i,n);case"polyline":return m(t.pointList,t.lineWidth,i,n);case"ring":return V(t.x,t.y,t.r0,t.r,i,n);case"circle":return d(t.x,t.y,t.r,i,n);case"sector":var o=t.startAngle*Math.PI/180,h=t.endAngle*Math.PI/180;return t.clockWise||(o=-o,h=-h),p(t.x,t.y,t.r0,t.r,o,h,!t.clockWise,i,n);case"path":return t.pathArray&&k(t.pathArray,Math.max(t.lineWidth,5),t.brushType,i,n);case"polygon":case"star":case"isogon":return c(t.pointList,i,n);case"text":var u=t.__rect||e.getRect(t);return U(u.x,u.y,u.width,u.height,i,n);case"rectangle":case"image":return U(t.x,t.y,t.width,t.height,i,n)}}function a(e,t,i,n,a){return t.beginPath(),e.buildPath(t,i),t.closePath(),t.isPointInPath(n,a)}function o(e,t,n,a){return!i(e,t,n,a)}function r(e,t,i,n,a,o,r){if(0===a)return!1;var s=Math.max(a,5),l=0,h=e;if(r>t+s&&r>n+s||t-s>r&&n-s>r||o>e+s&&o>i+s||e-s>o&&i-s>o)return!1;if(e===i)return Math.abs(o-e)<=s/2;l=(t-n)/(e-i),h=(e*n-i*t)/(e-i);var m=l*o-r+h,V=m*m/(l*l+1);return s/2*s/2>=V}function s(e,t,i,n,a,o,r,s,l,h,m){if(0===l)return!1;var V=Math.max(l,5);if(m>t+V&&m>n+V&&m>o+V&&m>s+V||t-V>m&&n-V>m&&o-V>m&&s-V>m||h>e+V&&h>i+V&&h>a+V&&h>r+V||e-V>h&&i-V>h&&a-V>h&&r-V>h)return!1;var U=X.cubicProjectPoint(e,t,i,n,a,o,r,s,h,m,null);return V/2>=U}function l(e,t,i,n,a,o,r,s,l){if(0===r)return!1;var h=Math.max(r,5);if(l>t+h&&l>n+h&&l>o+h||t-h>l&&n-h>l&&o-h>l||s>e+h&&s>i+h&&s>a+h||e-h>s&&i-h>s&&a-h>s)return!1;var m=X.quadraticProjectPoint(e,t,i,n,a,o,s,l,null);return h/2>=m}function h(e,i,n,a,o,r,s,l,h){if(0===s)return!1;var m=Math.max(s,5);l-=e,h-=i;var V=Math.sqrt(l*l+h*h);if(V-m>n||n>V+m)return!1;if(Math.abs(a-o)>=C)return!0;if(r){var U=a;a=t(o),o=t(U)}else a=t(a),o=t(o);a>o&&(o+=C);var d=Math.atan2(h,l);return 0>d&&(d+=C),d>=a&&o>=d||d+C>=a&&o>=d+C}function m(e,t,i,n){for(var t=Math.max(t,10),a=0,o=e.length-1;o>a;a++){var s=e[a][0],l=e[a][1],h=e[a+1][0],m=e[a+1][1];if(r(s,l,h,m,t,i,n))return!0}return!1}function V(e,t,i,n,a,o){var r=(a-e)*(a-e)+(o-t)*(o-t);return n*n>r&&r>i*i}function U(e,t,i,n,a,o){return a>=e&&e+i>=a&&o>=t&&t+n>=o}function d(e,t,i,n,a){return i*i>(n-e)*(n-e)+(a-t)*(a-t)}function p(e,t,i,n,a,o,r,s,l){return h(e,t,(i+n)/2,a,o,r,n-i,s,l)}function c(e,t,i){for(var n=e.length,a=0,o=0,r=n-1;n>o;o++){var s=e[r][0],l=e[r][1],h=e[o][0],m=e[o][1];a+=u(s,l,h,m,t,i),r=o}return 0!==a}function u(e,t,i,n,a,o){if(o>t&&o>n||t>o&&n>o)return 0;if(n==t)return 0;var r=t>n?1:-1,s=(o-t)/(n-t),l=s*(i-e)+e;return l>a?r:0}function y(){var e=E[0];E[0]=E[1],E[1]=e}function g(e,t,i,n,a,o,r,s,l,h){if(h>t&&h>n&&h>o&&h>s||t>h&&n>h&&o>h&&s>h)return 0;var m=X.cubicRootAt(t,n,o,s,h,S);if(0===m)return 0;for(var V,U,d=0,p=-1,c=0;m>c;c++){var u=S[c],g=X.cubicAt(e,i,a,r,u);l>g||(0>p&&(p=X.cubicExtrema(t,n,o,s,E),E[1]<E[0]&&p>1&&y(),V=X.cubicAt(t,n,o,s,E[0]),p>1&&(U=X.cubicAt(t,n,o,s,E[1]))),d+=2==p?u<E[0]?t>V?1:-1:u<E[1]?V>U?1:-1:U>s?1:-1:u<E[0]?t>V?1:-1:V>s?1:-1)}return d}function b(e,t,i,n,a,o,r,s){if(s>t&&s>n&&s>o||t>s&&n>s&&o>s)return 0;var l=X.quadraticRootAt(t,n,o,s,S);if(0===l)return 0;var h=X.quadraticExtremum(t,n,o);if(h>=0&&1>=h){for(var m=0,V=X.quadraticAt(t,n,o,h),U=0;l>U;U++){var d=X.quadraticAt(e,i,a,S[U]);r>d||(m+=S[U]<h?t>V?1:-1:V>o?1:-1)}return m}var d=X.quadraticAt(e,i,a,S[0]);return r>d?0:t>o?1:-1}function f(e,i,n,a,o,r,s,l){if(l-=i,l>n||-n>l)return 0;var h=Math.sqrt(n*n-l*l);if(S[0]=-h,S[1]=h,Math.abs(a-o)>=C){a=0,o=C;var m=r?1:-1;return s>=S[0]+e&&s<=S[1]+e?m:0}if(r){var h=a;a=t(o),o=t(h)}else a=t(a),o=t(o);a>o&&(o+=C);for(var V=0,U=0;2>U;U++){var d=S[U];if(d+e>s){var p=Math.atan2(l,d),m=r?1:-1;0>p&&(p=C+p),(p>=a&&o>=p||p+C>=a&&o>=p+C)&&(p>Math.PI/2&&p<1.5*Math.PI&&(m=-m),V+=m)}}return V}function k(e,t,i,n,a){var o=0,m=0,V=0,U=0,d=0,p=!0,c=!0;i=i||"fill";for(var y="stroke"===i||"both"===i,k="fill"===i||"both"===i,x=0;x<e.length;x++){var _=e[x],L=_.points;if(p||"M"===_.command){if(x>0&&(k&&(o+=u(m,V,U,d,n,a)),0!==o))return!0;U=L[L.length-2],d=L[L.length-1],p=!1,c&&"A"!==_.command&&(c=!1,m=U,V=d)}switch(_.command){case"M":m=L[0],V=L[1];break;case"L":if(y&&r(m,V,L[0],L[1],t,n,a))return!0;k&&(o+=u(m,V,L[0],L[1],n,a)),m=L[0],V=L[1];break;case"C":if(y&&s(m,V,L[0],L[1],L[2],L[3],L[4],L[5],t,n,a))return!0;k&&(o+=g(m,V,L[0],L[1],L[2],L[3],L[4],L[5],n,a)),m=L[4],V=L[5];break;case"Q":if(y&&l(m,V,L[0],L[1],L[2],L[3],t,n,a))return!0;k&&(o+=b(m,V,L[0],L[1],L[2],L[3],n,a)),m=L[2],V=L[3];break;case"A":var W=L[0],X=L[1],v=L[2],w=L[3],K=L[4],I=L[5],J=Math.cos(K)*v+W,C=Math.sin(K)*w+X;c?(c=!1,U=J,d=C):o+=u(m,V,J,C);var S=(n-W)*w/v+W;if(y&&h(W,X,w,K,K+I,1-L[7],t,S,a))return!0;k&&(o+=f(W,X,w,K,K+I,1-L[7],S,a)),m=Math.cos(K+I)*v+W,V=Math.sin(K+I)*w+X;break;case"z":if(y&&r(m,V,U,d,t,n,a))return!0;p=!0}}return k&&(o+=u(m,V,U,d,n,a)),0!==o}function x(e,t){var i=e+":"+t;if(v[i])return v[i];L=L||W.getContext(),L.save(),t&&(L.font=t),e=(e+"").split("\n");for(var n=0,a=0,o=e.length;o>a;a++)n=Math.max(L.measureText(e[a]).width,n);return L.restore(),v[i]=n,++K>J&&(K=0,v={}),n}function _(e,t){var i=e+":"+t;if(w[i])return w[i];L=L||W.getContext(),L.save(),t&&(L.font=t),e=(e+"").split("\n");var n=(L.measureText("国").width+2)*e.length;return L.restore(),w[i]=n,++I>J&&(I=0,w={}),n}var L,W=e("./util"),X=e("./curve"),v={},w={},K=0,I=0,J=5e3,C=2*Math.PI,S=[-1,-1,-1],E=[-1,-1];return{isInside:i,isOutside:o,getTextWidth:x,getTextHeight:_,isInsidePath:k,isInsidePolygon:c,isInsideSector:p,isInsideCircle:d,isInsideLine:r,isInsideRect:U,isInsidePolyline:m,isInsideCubicStroke:s,isInsideQuadraticStroke:l}}),i("zrender/shape/Base",["require","../tool/matrix","../tool/guid","../tool/util","../tool/log","../mixin/Transformable","../mixin/Eventful","../tool/area","../tool/color"],function(e){function t(t,n,a,o,r,s,l){r&&(t.font=r),t.textAlign=s,t.textBaseline=l;var h=i(n,a,o,r,s,l);n=(n+"").split("\n");var m=e("../tool/area").getTextHeight("国",r);switch(l){case"top":o=h.y;break;case"bottom":o=h.y+m;break;default:o=h.y+m/2}for(var V=0,U=n.length;U>V;V++)t.fillText(n[V],a,o),o+=m}function i(t,i,n,a,o,r){var s=e("../tool/area"),l=s.getTextWidth(t,a),h=s.getTextHeight("国",a);switch(t=(t+"").split("\n"),o){case"end":case"right":i-=l;break;case"center":i-=l/2}switch(r){case"top":break;case"bottom":n-=h*t.length;break;default:n-=h*t.length/2}return{x:i,y:n,width:l,height:h*t.length}}var n=window.G_vmlCanvasManager,a=e("../tool/matrix"),o=e("../tool/guid"),r=e("../tool/util"),s=e("../tool/log"),l=e("../mixin/Transformable"),h=e("../mixin/Eventful"),m=function(e){e=e||{},this.id=e.id||o();for(var t in e)this[t]=e[t];this.style=this.style||{},this.highlightStyle=this.highlightStyle||null,this.parent=null,this.__dirty=!0,this.__clipShapes=[],l.call(this),h.call(this)};m.prototype.invisible=!1,m.prototype.ignore=!1,m.prototype.zlevel=0,m.prototype.draggable=!1,m.prototype.clickable=!1,m.prototype.hoverable=!0,m.prototype.z=0,m.prototype.brush=function(e,t){var i=this.beforeBrush(e,t);switch(e.beginPath(),this.buildPath(e,i),i.brushType){case"both":e.fill();case"stroke":i.lineWidth>0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},m.prototype.beforeBrush=function(e,t){var i=this.style;return this.brushTypeOnly&&(i.brushType=this.brushTypeOnly),t&&(i=this.getHighlightStyle(i,this.highlightStyle||{},this.brushTypeOnly)),"stroke"==this.brushTypeOnly&&(i.strokeColor=i.strokeColor||i.color),e.save(),this.doClip(e),this.setContext(e,i),this.setTransform(e),i},m.prototype.afterBrush=function(e){e.restore()};var V=[["color","fillStyle"],["strokeColor","strokeStyle"],["opacity","globalAlpha"],["lineCap","lineCap"],["lineJoin","lineJoin"],["miterLimit","miterLimit"],["lineWidth","lineWidth"],["shadowBlur","shadowBlur"],["shadowColor","shadowColor"],["shadowOffsetX","shadowOffsetX"],["shadowOffsetY","shadowOffsetY"]];m.prototype.setContext=function(e,t){for(var i=0,n=V.length;n>i;i++){var a=V[i][0],o=t[a],r=V[i][1];"undefined"!=typeof o&&(e[r]=o)}};var U=a.create();return m.prototype.doClip=function(e){if(this.__clipShapes&&!n)for(var t=0;t<this.__clipShapes.length;t++){var i=this.__clipShapes[t];if(i.needTransform){var o=i.transform;a.invert(U,o),e.transform(o[0],o[1],o[2],o[3],o[4],o[5])}if(e.beginPath(),i.buildPath(e,i.style),e.clip(),i.needTransform){var o=U;e.transform(o[0],o[1],o[2],o[3],o[4],o[5])}}},m.prototype.getHighlightStyle=function(t,i,n){var a={};for(var o in t)a[o]=t[o];var r=e("../tool/color"),s=r.getHighlightColor();"stroke"!=t.brushType?(a.strokeColor=s,a.lineWidth=(t.lineWidth||1)+this.getHighlightZoom(),a.brushType="both"):"stroke"!=n?(a.strokeColor=s,a.lineWidth=(t.lineWidth||1)+this.getHighlightZoom()):a.strokeColor=i.strokeColor||r.mix(t.strokeColor,r.toRGB(s));for(var o in i)"undefined"!=typeof i[o]&&(a[o]=i[o]);return a},m.prototype.getHighlightZoom=function(){return"text"!=this.type?6:2},m.prototype.drift=function(e,t){this.position[0]+=e,this.position[1]+=t},m.prototype.buildPath=function(){s("buildPath not implemented in "+this.type)},m.prototype.getRect=function(){s("getRect not implemented in "+this.type)},m.prototype.isCover=function(t,i){var n=this.transformCoordToLocal(t,i);return t=n[0],i=n[1],this.isCoverRect(t,i)?e("../tool/area").isInside(this,this.style,t,i):!1},m.prototype.isCoverRect=function(e,t){var i=this.style.__rect;return i||(i=this.style.__rect=this.getRect(this.style)),e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height},m.prototype.drawText=function(e,i,n){if("undefined"!=typeof i.text&&i.text!==!1){var a=i.textColor||i.color||i.strokeColor;e.fillStyle=a;var o,r,s,l,h=10,m=i.textPosition||this.textPosition||"top";switch(m){case"inside":case"top":case"bottom":case"left":case"right":if(this.getRect){var V=(n||i).__rect||this.getRect(n||i);switch(m){case"inside":s=V.x+V.width/2,l=V.y+V.height/2,o="center",r="middle","stroke"!=i.brushType&&a==i.color&&(e.fillStyle="#fff");break;case"left":s=V.x-h,l=V.y+V.height/2,o="end",r="middle";break;case"right":s=V.x+V.width+h,l=V.y+V.height/2,o="start",r="middle";break;case"top":s=V.x+V.width/2,l=V.y-h,o="center",r="bottom";break;case"bottom":s=V.x+V.width/2,l=V.y+V.height+h,o="center",r="top"}}break;case"start":case"end":var U=i.pointList||[[i.xStart||0,i.yStart||0],[i.xEnd||0,i.yEnd||0]],d=U.length;if(2>d)return;var p,c,u,y;switch(m){case"start":p=U[1][0],c=U[0][0],u=U[1][1],y=U[0][1];break;case"end":p=U[d-2][0],c=U[d-1][0],u=U[d-2][1],y=U[d-1][1]}s=c,l=y;var g=Math.atan((u-y)/(c-p))/Math.PI*180;0>c-p?g+=180:0>u-y&&(g+=360),h=5,g>=30&&150>=g?(o="center",r="bottom",l-=h):g>150&&210>g?(o="right",r="middle",s-=h):g>=210&&330>=g?(o="center",r="top",l+=h):(o="left",r="middle",s+=h);break;case"specific":s=i.textX||0,l=i.textY||0,o="start",r="middle"}null!=s&&null!=l&&t(e,i.text,s,l,i.textFont,i.textAlign||o,i.textBaseline||r)}},m.prototype.modSelf=function(){this.__dirty=!0,this.style&&(this.style.__rect=null),this.highlightStyle&&(this.highlightStyle.__rect=null)},m.prototype.isSilent=function(){return!(this.hoverable||this.draggable||this.clickable||this.onmousemove||this.onmouseover||this.onmouseout||this.onmousedown||this.onmouseup||this.onclick||this.ondragenter||this.ondragover||this.ondragleave||this.ondrop)},r.merge(m.prototype,l.prototype,!0),r.merge(m.prototype,h.prototype,!0),m}),i("zrender/tool/curve",["require","./vector"],function(e){function t(e){return e>-u&&u>e}function i(e){return e>u||-u>e}function n(e,t,i,n,a){var o=1-a;return o*o*(o*e+3*a*t)+a*a*(a*n+3*o*i)}function a(e,t,i,n,a){var o=1-a;return 3*(((t-e)*o+2*(i-t)*a)*o+(n-i)*a*a)}function o(e,i,n,a,o,r){var s=a+3*(i-n)-e,l=3*(n-2*i+e),h=3*(i-e),m=e-o,V=l*l-3*s*h,U=l*h-9*s*m,d=h*h-3*l*m,p=0;if(t(V)&&t(U))if(t(l))r[0]=0;else{var c=-h/l;c>=0&&1>=c&&(r[p++]=c)}else{var u=U*U-4*V*d;if(t(u)){var b=U/V,c=-l/s+b,f=-b/2;c>=0&&1>=c&&(r[p++]=c),f>=0&&1>=f&&(r[p++]=f)}else if(u>0){var k=Math.sqrt(u),x=V*l+1.5*s*(-U+k),_=V*l+1.5*s*(-U-k);x=0>x?-Math.pow(-x,g):Math.pow(x,g),_=0>_?-Math.pow(-_,g):Math.pow(_,g);var c=(-l-(x+_))/(3*s);c>=0&&1>=c&&(r[p++]=c)}else{var L=(2*V*l-3*s*U)/(2*Math.sqrt(V*V*V)),W=Math.acos(L)/3,X=Math.sqrt(V),v=Math.cos(W),c=(-l-2*X*v)/(3*s),f=(-l+X*(v+y*Math.sin(W)))/(3*s),w=(-l+X*(v-y*Math.sin(W)))/(3*s);c>=0&&1>=c&&(r[p++]=c),f>=0&&1>=f&&(r[p++]=f),w>=0&&1>=w&&(r[p++]=w)}}return p}function r(e,n,a,o,r){var s=6*a-12*n+6*e,l=9*n+3*o-3*e-9*a,h=3*n-3*e,m=0;if(t(l)){if(i(s)){var V=-h/s;V>=0&&1>=V&&(r[m++]=V)}}else{var U=s*s-4*l*h;if(t(U))r[0]=-s/(2*l);else if(U>0){var d=Math.sqrt(U),V=(-s+d)/(2*l),p=(-s-d)/(2*l);V>=0&&1>=V&&(r[m++]=V),p>=0&&1>=p&&(r[m++]=p)}}return m}function s(e,t,i,n,a,o){var r=(t-e)*a+e,s=(i-t)*a+t,l=(n-i)*a+i,h=(s-r)*a+r,m=(l-s)*a+s,V=(m-h)*a+h;o[0]=e,o[1]=r,o[2]=h,o[3]=V,o[4]=V,o[5]=m,o[6]=l,o[7]=n}function l(e,t,i,a,o,r,s,l,h,m,V){var U,d=.005,p=1/0;b[0]=h,b[1]=m;for(var y=0;1>y;y+=.05){f[0]=n(e,i,o,s,y),f[1]=n(t,a,r,l,y);var g=c.distSquare(b,f);p>g&&(U=y,p=g)}p=1/0;for(var x=0;32>x&&!(u>d);x++){var _=U-d,L=U+d;f[0]=n(e,i,o,s,_),f[1]=n(t,a,r,l,_);var g=c.distSquare(f,b);if(_>=0&&p>g)U=_,p=g;else{k[0]=n(e,i,o,s,L),k[1]=n(t,a,r,l,L);var W=c.distSquare(k,b);1>=L&&p>W?(U=L,p=W):d*=.5}}return V&&(V[0]=n(e,i,o,s,U),V[1]=n(t,a,r,l,U)),Math.sqrt(p)}function h(e,t,i,n){var a=1-n;return a*(a*e+2*n*t)+n*n*i}function m(e,t,i,n){return 2*((1-n)*(t-e)+n*(i-t))}function V(e,n,a,o,r){var s=e-2*n+a,l=2*(n-e),h=e-o,m=0;if(t(s)){if(i(l)){var V=-h/l;V>=0&&1>=V&&(r[m++]=V)}}else{var U=l*l-4*s*h;if(t(U)){var V=-l/(2*s);V>=0&&1>=V&&(r[m++]=V)}else if(U>0){var d=Math.sqrt(U),V=(-l+d)/(2*s),p=(-l-d)/(2*s);V>=0&&1>=V&&(r[m++]=V),p>=0&&1>=p&&(r[m++]=p)}}return m}function U(e,t,i){var n=e+i-2*t;return 0===n?.5:(e-t)/n}function d(e,t,i,n,a){var o=(t-e)*n+e,r=(i-t)*n+t,s=(r-o)*n+o;a[0]=e,a[1]=o,a[2]=s,a[3]=s,a[4]=r,a[5]=i}function p(e,t,i,n,a,o,r,s,l){var m,V=.005,U=1/0;b[0]=r,b[1]=s;for(var d=0;1>d;d+=.05){f[0]=h(e,i,a,d),f[1]=h(t,n,o,d);var p=c.distSquare(b,f);U>p&&(m=d,U=p)}U=1/0;for(var y=0;32>y&&!(u>V);y++){var g=m-V,x=m+V;f[0]=h(e,i,a,g),f[1]=h(t,n,o,g);var p=c.distSquare(f,b);if(g>=0&&U>p)m=g,U=p;else{k[0]=h(e,i,a,x),k[1]=h(t,n,o,x);var _=c.distSquare(k,b);1>=x&&U>_?(m=x,U=_):V*=.5}}return l&&(l[0]=h(e,i,a,m),l[1]=h(t,n,o,m)),Math.sqrt(U)}var c=e("./vector"),u=1e-4,y=Math.sqrt(3),g=1/3,b=c.create(),f=c.create(),k=c.create();return{cubicAt:n,cubicDerivativeAt:a,cubicRootAt:o,cubicExtrema:r,cubicSubdivide:s,cubicProjectPoint:l,quadraticAt:h,quadraticDerivativeAt:m,quadraticRootAt:V,quadraticExtremum:U,quadraticSubdivide:d,quadraticProjectPoint:p}}),i("zrender/mixin/Transformable",["require","../tool/matrix","../tool/vector"],function(e){"use strict";function t(e){return e>-s&&s>e}function i(e){return e>s||-s>e}var n=e("../tool/matrix"),a=e("../tool/vector"),o=[0,0],r=n.translate,s=5e-5,l=function(){this.position||(this.position=[0,0]),"undefined"==typeof this.rotation&&(this.rotation=[0,0,0]),this.scale||(this.scale=[1,1,0,0]),this.needLocalTransform=!1,this.needTransform=!1};return l.prototype={constructor:l,updateNeedTransform:function(){this.needLocalTransform=i(this.rotation[0])||i(this.position[0])||i(this.position[1])||i(this.scale[0]-1)||i(this.scale[1]-1)},updateTransform:function(){this.updateNeedTransform();var e=this.parent&&this.parent.needTransform;if(this.needTransform=this.needLocalTransform||e,this.needTransform){var t=this.transform||n.create();if(n.identity(t),this.needLocalTransform){var a=this.scale;if(i(a[0])||i(a[1])){o[0]=-a[2]||0,o[1]=-a[3]||0;var s=i(o[0])||i(o[1]);s&&r(t,t,o),n.scale(t,t,a),s&&(o[0]=-o[0],o[1]=-o[1],r(t,t,o))}if(this.rotation instanceof Array){if(0!==this.rotation[0]){o[0]=-this.rotation[1]||0,o[1]=-this.rotation[2]||0;var s=i(o[0])||i(o[1]);s&&r(t,t,o),n.rotate(t,t,this.rotation[0]),s&&(o[0]=-o[0],o[1]=-o[1],r(t,t,o))}}else 0!==this.rotation&&n.rotate(t,t,this.rotation);(i(this.position[0])||i(this.position[1]))&&r(t,t,this.position)}e&&(this.needLocalTransform?n.mul(t,this.parent.transform,t):n.copy(t,this.parent.transform)),this.transform=t,this.invTransform=this.invTransform||n.create(),n.invert(this.invTransform,t)}},setTransform:function(e){if(this.needTransform){var t=this.transform;e.transform(t[0],t[1],t[2],t[3],t[4],t[5])}},lookAt:function(){var e=a.create();return function(i){this.transform||(this.transform=n.create());var o=this.transform;if(a.sub(e,i,this.position),!t(e[0])||!t(e[1])){a.normalize(e,e);var r=this.scale;o[2]=e[0]*r[1],o[3]=e[1]*r[1],o[0]=e[1]*r[0],o[1]=-e[0]*r[0],o[4]=this.position[0],o[5]=this.position[1],this.decomposeTransform()}}}(),decomposeTransform:function(){if(this.transform){var e=this.transform,t=e[0]*e[0]+e[1]*e[1],n=this.position,a=this.scale,o=this.rotation;i(t-1)&&(t=Math.sqrt(t));var r=e[2]*e[2]+e[3]*e[3];i(r-1)&&(r=Math.sqrt(r)),n[0]=e[4],n[1]=e[5],a[0]=t,a[1]=r,a[2]=a[3]=0,o[0]=Math.atan2(-e[1]/r,e[0]/t),o[1]=o[2]=0}},transformCoordToLocal:function(e,t){var i=[e,t];return this.needTransform&&this.invTransform&&a.applyTransform(i,i,this.invTransform),i}},l}),i("zrender/Group",["require","./tool/guid","./tool/util","./mixin/Transformable","./mixin/Eventful"],function(e){var t=e("./tool/guid"),i=e("./tool/util"),n=e("./mixin/Transformable"),a=e("./mixin/Eventful"),o=function(e){e=e||{},this.id=e.id||t();for(var i in e)this[i]=e[i];this.type="group",this.clipShape=null,this._children=[],this._storage=null,this.__dirty=!0,n.call(this),a.call(this)};return o.prototype.ignore=!1,o.prototype.children=function(){return this._children.slice()},o.prototype.childAt=function(e){return this._children[e]},o.prototype.addChild=function(e){e!=this&&e.parent!=this&&(e.parent&&e.parent.removeChild(e),this._children.push(e),e.parent=this,this._storage&&this._storage!==e._storage&&(this._storage.addToMap(e),e instanceof o&&e.addChildrenToStorage(this._storage)))},o.prototype.removeChild=function(e){var t=i.indexOf(this._children,e);t>=0&&this._children.splice(t,1),e.parent=null,this._storage&&(this._storage.delFromMap(e.id),e instanceof o&&e.delChildrenFromStorage(this._storage))},o.prototype.clearChildren=function(){for(var e=0;e<this._children.length;e++){var t=this._children[e];this._storage&&(this._storage.delFromMap(t.id),t instanceof o&&t.delChildrenFromStorage(this._storage))}this._children.length=0},o.prototype.eachChild=function(e,t){for(var i=!!t,n=0;n<this._children.length;n++){var a=this._children[n];i?e.call(t,a):e(a)}},o.prototype.traverse=function(e,t){for(var i=!!t,n=0;n<this._children.length;n++){var a=this._children[n];i?e.call(t,a):e(a),"group"===a.type&&a.traverse(e,t)}},o.prototype.addChildrenToStorage=function(e){for(var t=0;t<this._children.length;t++){var i=this._children[t];e.addToMap(i),i instanceof o&&i.addChildrenToStorage(e)}},o.prototype.delChildrenFromStorage=function(e){for(var t=0;t<this._children.length;t++){var i=this._children[t];e.delFromMap(i.id),i instanceof o&&i.delChildrenFromStorage(e)}},o.prototype.modSelf=function(){this.__dirty=!0},i.merge(o.prototype,n.prototype,!0),i.merge(o.prototype,a.prototype,!0),o}),i("zrender/animation/Clip",["require","./easing"],function(e){function t(e){this._targetPool=e.target||{},this._targetPool instanceof Array||(this._targetPool=[this._targetPool]),this._life=e.life||1e3,this._delay=e.delay||0,this._startTime=(new Date).getTime()+this._delay,this._endTime=this._startTime+1e3*this._life,this.loop="undefined"==typeof e.loop?!1:e.loop,this.gap=e.gap||0,this.easing=e.easing||"Linear",this.onframe=e.onframe,this.ondestroy=e.ondestroy,this.onrestart=e.onrestart}var i=e("./easing");return t.prototype={step:function(e){var t=(e-this._startTime)/this._life;if(!(0>t)){t=Math.min(t,1);var n="string"==typeof this.easing?i[this.easing]:this.easing,a="function"==typeof n?n(t):t;return this.fire("frame",a),1==t?this.loop?(this.restart(),"restart"):(this.__needsRemove=!0,"destroy"):null}},restart:function(){var e=(new Date).getTime(),t=(e-this._startTime)%this._life;this._startTime=(new Date).getTime()-t+this.gap,this.__needsRemove=!1},fire:function(e,t){for(var i=0,n=this._targetPool.length;n>i;i++)this["on"+e]&&this["on"+e](this._targetPool[i],t)},constructor:t},t}),i("zrender/animation/easing",[],function(){var e={Linear:function(e){return e},QuadraticIn:function(e){return e*e},QuadraticOut:function(e){return e*(2-e)},QuadraticInOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)},CubicIn:function(e){return e*e*e},CubicOut:function(e){return--e*e*e+1},CubicInOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},QuarticIn:function(e){return e*e*e*e},QuarticOut:function(e){return 1- --e*e*e*e},QuarticInOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)},QuinticIn:function(e){return e*e*e*e*e},QuinticOut:function(e){return--e*e*e*e*e+1},QuinticInOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},SinusoidalIn:function(e){return 1-Math.cos(e*Math.PI/2)},SinusoidalOut:function(e){return Math.sin(e*Math.PI/2)},SinusoidalInOut:function(e){return.5*(1-Math.cos(Math.PI*e))},ExponentialIn:function(e){return 0===e?0:Math.pow(1024,e-1)},ExponentialOut:function(e){return 1===e?1:1-Math.pow(2,-10*e)},ExponentialInOut:function(e){return 0===e?0:1===e?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)},CircularIn:function(e){return 1-Math.sqrt(1-e*e)},CircularOut:function(e){return Math.sqrt(1- --e*e)},CircularInOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},ElasticIn:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),-(i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)))},ElasticOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*e)*Math.sin(2*(e-t)*Math.PI/n)+1)},ElasticInOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),(e*=2)<1?-.5*i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n):i*Math.pow(2,-10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)*.5+1)},BackIn:function(e){var t=1.70158;return e*e*((t+1)*e-t)},BackOut:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},BackInOut:function(e){var t=2.5949095;return(e*=2)<1?.5*e*e*((t+1)*e-t):.5*((e-=2)*e*((t+1)*e+t)+2)},BounceIn:function(t){return 1-e.BounceOut(1-t)},BounceOut:function(e){return 1/2.75>e?7.5625*e*e:2/2.75>e?7.5625*(e-=1.5/2.75)*e+.75:2.5/2.75>e?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},BounceInOut:function(t){return.5>t?.5*e.BounceIn(2*t):.5*e.BounceOut(2*t-1)+.5}};return e}),i("echarts/chart/base",["require","zrender/shape/Image","../util/shape/Icon","../util/shape/MarkLine","../util/shape/Symbol","zrender/shape/Polyline","zrender/shape/ShapeBundle","../config","../util/ecData","../util/ecAnimation","../util/ecEffect","../util/accMath","../component/base","../layout/EdgeBundling","zrender/tool/util","zrender/tool/area"],function(e){function t(e){return null!=e.x&&null!=e.y}function i(e,t,i,n,a){p.call(this,e,t,i,n,a);var o=this;this.selectedMap={},this.lastShapeList=[],this.shapeHandler={onclick:function(){o.isClick=!0},ondragover:function(e){var t=e.target;t.highlightStyle=t.highlightStyle||{};var i=t.highlightStyle,n=i.brushTyep,a=i.strokeColor,r=i.lineWidth;i.brushType="stroke",i.strokeColor=o.ecTheme.calculableColor||h.calculableColor,i.lineWidth="icon"===t.type?30:10,o.zr.addHoverShape(t),setTimeout(function(){i&&(i.brushType=n,i.strokeColor=a,i.lineWidth=r)},20)},ondrop:function(e){null!=m.get(e.dragged,"data")&&(o.isDrop=!0)},ondragend:function(){o.isDragend=!0}}}var n=e("zrender/shape/Image"),a=e("../util/shape/Icon"),o=e("../util/shape/MarkLine"),r=e("../util/shape/Symbol"),s=e("zrender/shape/Polyline"),l=e("zrender/shape/ShapeBundle"),h=e("../config"),m=e("../util/ecData"),V=e("../util/ecAnimation"),U=e("../util/ecEffect"),d=e("../util/accMath"),p=e("../component/base"),c=e("../layout/EdgeBundling"),u=e("zrender/tool/util"),y=e("zrender/tool/area");return i.prototype={setCalculable:function(e){return e.dragEnableTime=this.ecTheme.DRAG_ENABLE_TIME||h.DRAG_ENABLE_TIME,e.ondragover=this.shapeHandler.ondragover,e.ondragend=this.shapeHandler.ondragend,e.ondrop=this.shapeHandler.ondrop,e},ondrop:function(e,t){if(this.isDrop&&e.target&&!t.dragIn){var i,n=e.target,a=e.dragged,o=m.get(n,"seriesIndex"),r=m.get(n,"dataIndex"),s=this.series,l=this.component.legend;if(-1===r){if(m.get(a,"seriesIndex")==o)return t.dragOut=t.dragIn=t.needRefresh=!0,void(this.isDrop=!1);i={value:m.get(a,"value"),name:m.get(a,"name")},this.type===h.CHART_TYPE_PIE&&i.value<0&&(i.value=0);for(var V=!1,U=s[o].data,p=0,c=U.length;c>p;p++)U[p].name===i.name&&"-"===U[p].value&&(s[o].data[p].value=i.value,V=!0);!V&&s[o].data.push(i),l&&l.add(i.name,a.style.color||a.style.strokeColor)}else i=s[o].data[r]||"-",null!=i.value?(s[o].data[r].value="-"!=i.value?d.accAdd(s[o].data[r].value,m.get(a,"value")):m.get(a,"value"),(this.type===h.CHART_TYPE_FUNNEL||this.type===h.CHART_TYPE_PIE)&&(l&&1===l.getRelatedAmount(i.name)&&this.component.legend.del(i.name),i.name+=this.option.nameConnector+m.get(a,"name"),l&&l.add(i.name,a.style.color||a.style.strokeColor))):s[o].data[r]="-"!=i?d.accAdd(s[o].data[r],m.get(a,"value")):m.get(a,"value");t.dragIn=t.dragIn||!0,this.isDrop=!1;var u=this;setTimeout(function(){u.zr.trigger("mousemove",e.event)},300)}},ondragend:function(e,t){if(this.isDragend&&e.target&&!t.dragOut){var i=e.target,n=m.get(i,"seriesIndex"),a=m.get(i,"dataIndex"),o=this.series;if(null!=o[n].data[a].value){o[n].data[a].value="-";var r=o[n].data[a].name,s=this.component.legend;s&&0===s.getRelatedAmount(r)&&s.del(r)}else o[n].data[a]="-";t.dragOut=!0,t.needRefresh=!0,this.isDragend=!1}},onlegendSelected:function(e,t){var i=e.selected;for(var n in this.selectedMap)this.selectedMap[n]!=i[n]&&(t.needRefresh=!0),this.selectedMap[n]=i[n]},_buildPosition:function(){this._symbol=this.option.symbolList,this._sIndex2ShapeMap={},this._sIndex2ColorMap={},this.selectedMap={},this.xMarkMap={};for(var e,t,i,n,a=this.series,o={top:[],bottom:[],left:[],right:[],other:[]},r=0,s=a.length;s>r;r++)a[r].type===this.type&&(a[r]=this.reformOption(a[r]),this.legendHoverLink=a[r].legendHoverLink||this.legendHoverLink,e=a[r].xAxisIndex,t=a[r].yAxisIndex,i=this.component.xAxis.getAxis(e),n=this.component.yAxis.getAxis(t),i.type===h.COMPONENT_TYPE_AXIS_CATEGORY?o[i.getPosition()].push(r):n.type===h.COMPONENT_TYPE_AXIS_CATEGORY?o[n.getPosition()].push(r):o.other.push(r));for(var l in o)o[l].length>0&&this._buildSinglePosition(l,o[l]);this.addShapeList()},_buildSinglePosition:function(e,t){var i=this._mapData(t),n=i.locationMap,a=i.maxDataLength;if(0!==a&&0!==n.length){switch(e){case"bottom":case"top":this._buildHorizontal(t,a,n,this.xMarkMap);break;case"left":case"right":this._buildVertical(t,a,n,this.xMarkMap);break;case"other":this._buildOther(t,a,n,this.xMarkMap)}for(var o=0,r=t.length;r>o;o++)this.buildMark(t[o])}},_mapData:function(e){for(var t,i,n,a,o=this.series,r=0,s={},l="__kener__stack__",m=this.component.legend,V=[],U=0,d=0,p=e.length;p>d;d++){if(t=o[e[d]],n=t.name,this._sIndex2ShapeMap[e[d]]=this._sIndex2ShapeMap[e[d]]||this.query(t,"symbol")||this._symbol[d%this._symbol.length],m){if(this.selectedMap[n]=m.isSelected(n),this._sIndex2ColorMap[e[d]]=m.getColor(n),a=m.getItemShape(n)){var c=a.style;if(this.type==h.CHART_TYPE_LINE)c.iconType="legendLineIcon",c.symbol=this._sIndex2ShapeMap[e[d]];else if(t.itemStyle.normal.barBorderWidth>0){var u=a.highlightStyle;c.brushType="both",c.x+=1,c.y+=1,c.width-=2,c.height-=2,c.strokeColor=u.strokeColor=t.itemStyle.normal.barBorderColor,u.lineWidth=3}m.setItemShape(n,a)}}else this.selectedMap[n]=!0,this._sIndex2ColorMap[e[d]]=this.zr.getColor(e[d]);this.selectedMap[n]&&(i=t.stack||l+e[d],null==s[i]?(s[i]=r,V[r]=[e[d]],r++):V[s[i]].push(e[d])),U=Math.max(U,t.data.length)}return{locationMap:V,maxDataLength:U}},_calculMarkMapXY:function(e,t,i){for(var n=this.series,a=0,o=t.length;o>a;a++)for(var r=0,s=t[a].length;s>r;r++){var l=t[a][r],h="xy"==i?0:"",m=this.component.grid,V=e[l];if("-1"!=i.indexOf("x")){V["counter"+h]>0&&(V["average"+h]=V["sum"+h]/V["counter"+h]);var U=this.component.xAxis.getAxis(n[l].xAxisIndex||0).getCoord(V["average"+h]);V["averageLine"+h]=[[U,m.getYend()],[U,m.getY()]],V["minLine"+h]=[[V["minX"+h],m.getYend()],[V["minX"+h],m.getY()]],V["maxLine"+h]=[[V["maxX"+h],m.getYend()],[V["maxX"+h],m.getY()]],V.isHorizontal=!1}if(h="xy"==i?1:"","-1"!=i.indexOf("y")){V["counter"+h]>0&&(V["average"+h]=V["sum"+h]/V["counter"+h]);var d=this.component.yAxis.getAxis(n[l].yAxisIndex||0).getCoord(V["average"+h]);V["averageLine"+h]=[[m.getX(),d],[m.getXend(),d]],V["minLine"+h]=[[m.getX(),V["minY"+h]],[m.getXend(),V["minY"+h]]],V["maxLine"+h]=[[m.getX(),V["maxY"+h]],[m.getXend(),V["maxY"+h]]],V.isHorizontal=!0}}},addLabel:function(e,t,i,n,a){var o=[i,t],r=this.deepMerge(o,"itemStyle.normal.label"),s=this.deepMerge(o,"itemStyle.emphasis.label"),l=r.textStyle||{},h=s.textStyle||{}; + +if(r.show){var m=e.style;m.text=this._getLabelText(t,i,n,"normal"),m.textPosition=null==r.position?"horizontal"===a?"right":"top":r.position,m.textColor=l.color,m.textFont=this.getFont(l),m.textAlign=l.align,m.textBaseline=l.baseline}if(s.show){var V=e.highlightStyle;V.text=this._getLabelText(t,i,n,"emphasis"),V.textPosition=r.show?e.style.textPosition:null==s.position?"horizontal"===a?"right":"top":s.position,V.textColor=h.color,V.textFont=this.getFont(h),V.textAlign=h.align,V.textBaseline=h.baseline}return e},_getLabelText:function(e,t,i,n){var a=this.deepQuery([t,e],"itemStyle."+n+".label.formatter");a||"emphasis"!==n||(a=this.deepQuery([t,e],"itemStyle.normal.label.formatter"));var o=this.getDataFromOption(t,"-");return a?"function"==typeof a?a.call(this.myChart,{seriesName:e.name,series:e,name:i,value:o,data:t,status:n}):"string"==typeof a?a=a.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{a0}",e.name).replace("{b0}",i).replace("{c0}",this.numAddCommas(o)):void 0:o instanceof Array?null!=o[2]?this.numAddCommas(o[2]):o[0]+" , "+o[1]:this.numAddCommas(o)},buildMark:function(e){var t=this.series[e];this.selectedMap[t.name]&&(t.markLine&&this._buildMarkLine(e),t.markPoint&&this._buildMarkPoint(e))},_buildMarkPoint:function(e){for(var t,i,n=(this.markAttachStyle||{})[e],a=this.series[e],o=u.clone(a.markPoint),r=0,s=o.data.length;s>r;r++)t=o.data[r],i=this.getMarkCoord(e,t),t.x=null!=t.x?t.x:i[0],t.y=null!=t.y?t.y:i[1],!t.type||"max"!==t.type&&"min"!==t.type||(t.value=i[3],t.name=t.name||t.type,t.symbolSize=t.symbolSize||y.getTextWidth(i[3],this.getFont())/2+5);for(var l=this._markPoint(e,o),r=0,s=l.length;s>r;r++){var m=l[r];m.zlevel=a.zlevel,m.z=a.z+1;for(var V in n)m[V]=u.clone(n[V]);this.shapeList.push(m)}if(this.type===h.CHART_TYPE_FORCE||this.type===h.CHART_TYPE_CHORD)for(var r=0,s=l.length;s>r;r++)this.zr.addShape(l[r])},_buildMarkLine:function(e){for(var t,i=(this.markAttachStyle||{})[e],n=this.series[e],a=u.clone(n.markLine),o=0,r=a.data.length;r>o;o++){var s=a.data[o];!s.type||"max"!==s.type&&"min"!==s.type&&"average"!==s.type?t=[this.getMarkCoord(e,s[0]),this.getMarkCoord(e,s[1])]:(t=this.getMarkCoord(e,s),a.data[o]=[u.clone(s),{}],a.data[o][0].name=s.name||s.type,a.data[o][0].value="average"!==s.type?t[3]:+t[3].toFixed(null!=a.precision?a.precision:this.deepQuery([this.ecTheme,h],"markLine.precision")),t=t[2],s=[{},{}]),null!=t&&null!=t[0]&&null!=t[1]&&(a.data[o][0].x=null!=s[0].x?s[0].x:t[0][0],a.data[o][0].y=null!=s[0].y?s[0].y:t[0][1],a.data[o][1].x=null!=s[1].x?s[1].x:t[1][0],a.data[o][1].y=null!=s[1].y?s[1].y:t[1][1])}var m=this._markLine(e,a),V=a.large;if(V){var U=new l({style:{shapeList:m}}),d=m[0];if(d){u.merge(U.style,d.style),u.merge(U.highlightStyle={},d.highlightStyle),U.style.brushType="stroke",U.zlevel=n.zlevel,U.z=n.z+1,U.hoverable=!1;for(var p in i)U[p]=u.clone(i[p])}this.shapeList.push(U),this.zr.addShape(U),U._mark="largeLine";var c=a.effect;c.show&&(U.effect=c)}else{for(var o=0,r=m.length;r>o;o++){var y=m[o];y.zlevel=n.zlevel,y.z=n.z+1;for(var p in i)y[p]=u.clone(i[p]);this.shapeList.push(y)}if(this.type===h.CHART_TYPE_FORCE||this.type===h.CHART_TYPE_CHORD)for(var o=0,r=m.length;r>o;o++)this.zr.addShape(m[o])}},_markPoint:function(e,t){var i=this.series[e],n=this.component;u.merge(u.merge(t,u.clone(this.ecTheme.markPoint||{})),u.clone(h.markPoint)),t.name=i.name;var a,o,r,s,l,V,U,d=[],p=t.data,c=n.dataRange,y=n.legend,g=this.zr.getWidth(),b=this.zr.getHeight();if(t.large)a=this.getLargeMarkPointShape(e,t),a._mark="largePoint",a&&d.push(a);else for(var f=0,k=p.length;k>f;f++)null!=p[f].x&&null!=p[f].y&&(r=null!=p[f].value?p[f].value:"",y&&(o=y.getColor(i.name)),c&&(o=isNaN(r)?o:c.getColor(r),s=[p[f],t],l=this.deepQuery(s,"itemStyle.normal.color")||o,V=this.deepQuery(s,"itemStyle.emphasis.color")||l,null==l&&null==V)||(o=null==o?this.zr.getColor(e):o,p[f].tooltip=p[f].tooltip||t.tooltip||{trigger:"item"},p[f].name=null!=p[f].name?p[f].name:"",p[f].value=r,a=this.getSymbolShape(t,e,p[f],f,p[f].name,this.parsePercent(p[f].x,g),this.parsePercent(p[f].y,b),"pin",o,"rgba(0,0,0,0)","horizontal"),a._mark="point",U=this.deepMerge([p[f],t],"effect"),U.show&&(a.effect=U),i.type===h.CHART_TYPE_MAP&&(a._geo=this.getMarkGeo(p[f])),m.pack(a,i,e,p[f],f,p[f].name,r),d.push(a)));return d},_markLine:function(){function e(e,t){e[t]=e[t]instanceof Array?e[t].length>1?e[t]:[e[t][0],e[t][0]]:[e[t],e[t]]}return function(i,n){var a=this.series[i],o=this.component,r=o.dataRange,s=o.legend;u.merge(u.merge(n,u.clone(this.ecTheme.markLine||{})),u.clone(h.markLine));var l=s?s.getColor(a.name):this.zr.getColor(i);e(n,"symbol"),e(n,"symbolSize"),e(n,"symbolRotate");for(var V=n.data,U=[],d=this.zr.getWidth(),p=this.zr.getHeight(),y=0;y<V.length;y++){var g=V[y];if(t(g[0])&&t(g[1])){var b=this.deepMerge(g),f=[b,n],k=l,x=null!=b.value?b.value:"";if(r){k=isNaN(x)?k:r.getColor(x);var _=this.deepQuery(f,"itemStyle.normal.color")||k,L=this.deepQuery(f,"itemStyle.emphasis.color")||_;if(null==_&&null==L)continue}g[0].tooltip=b.tooltip||n.tooltip||{trigger:"item"},g[0].name=g[0].name||"",g[1].name=g[1].name||"",g[0].value=x,U.push({points:[[this.parsePercent(g[0].x,d),this.parsePercent(g[0].y,p)],[this.parsePercent(g[1].x,d),this.parsePercent(g[1].y,p)]],rawData:g,color:k})}}var W=this.query(n,"bundling.enable");if(W){var X=new c;X.maxTurningAngle=this.query(n,"bundling.maxTurningAngle")/180*Math.PI,U=X.run(U)}n.name=a.name;for(var v=[],y=0,w=U.length;w>y;y++){var K=U[y],I=K.rawEdge||K,g=I.rawData,x=null!=g.value?g.value:"",J=this.getMarkLineShape(n,i,g,y,K.points,W,I.color);J._mark="line";var C=this.deepMerge([g[0],g[1],n],"effect");C.show&&(J.effect=C,J.effect.large=n.large),a.type===h.CHART_TYPE_MAP&&(J._geo=[this.getMarkGeo(g[0]),this.getMarkGeo(g[1])]),m.pack(J,a,i,g[0],y,g[0].name+(""!==g[1].name?" > "+g[1].name:""),x),v.push(J)}return v}}(),getMarkCoord:function(){return[0,0]},getSymbolShape:function(e,t,i,o,r,s,l,h,V,U,d){var p=[i,e],c=this.getDataFromOption(i,"-");h=this.deepQuery(p,"symbol")||h;var u=this.deepQuery(p,"symbolSize");u="function"==typeof u?u(c):u,"number"==typeof u&&(u=[u,u]);var y=this.deepQuery(p,"symbolRotate"),g=this.deepMerge(p,"itemStyle.normal"),b=this.deepMerge(p,"itemStyle.emphasis"),f=null!=g.borderWidth?g.borderWidth:g.lineStyle&&g.lineStyle.width;null==f&&(f=h.match("empty")?2:0);var k=null!=b.borderWidth?b.borderWidth:b.lineStyle&&b.lineStyle.width;null==k&&(k=f+2);var x=this.getItemStyleColor(g.color,t,o,i),_=this.getItemStyleColor(b.color,t,o,i),L=u[0],W=u[1],X=new a({style:{iconType:h.replace("empty","").toLowerCase(),x:s-L,y:l-W,width:2*L,height:2*W,brushType:"both",color:h.match("empty")?U:x||V,strokeColor:g.borderColor||x||V,lineWidth:f},highlightStyle:{color:h.match("empty")?U:_||x||V,strokeColor:b.borderColor||g.borderColor||_||x||V,lineWidth:k},clickable:this.deepQuery(p,"clickable")});return h.match("image")&&(X.style.image=h.replace(new RegExp("^image:\\/\\/"),""),X=new n({style:X.style,highlightStyle:X.highlightStyle,clickable:this.deepQuery(p,"clickable")})),null!=y&&(X.rotation=[y*Math.PI/180,s,l]),h.match("star")&&(X.style.iconType="star",X.style.n=h.replace("empty","").replace("star","")-0||5),"none"===h&&(X.invisible=!0,X.hoverable=!1),X=this.addLabel(X,e,i,r,d),h.match("empty")&&(null==X.style.textColor&&(X.style.textColor=X.style.strokeColor),null==X.highlightStyle.textColor&&(X.highlightStyle.textColor=X.highlightStyle.strokeColor)),m.pack(X,e,t,i,o,r),X._x=s,X._y=l,X._dataIndex=o,X._seriesIndex=t,X},getMarkLineShape:function(e,t,i,n,a,r,l){var h=null!=i[0].value?i[0].value:"-",m=null!=i[1].value?i[1].value:"-",V=[i[0].symbol||e.symbol[0],i[1].symbol||e.symbol[1]],U=[i[0].symbolSize||e.symbolSize[0],i[1].symbolSize||e.symbolSize[1]];U[0]="function"==typeof U[0]?U[0](h):U[0],U[1]="function"==typeof U[1]?U[1](m):U[1];var d=[this.query(i[0],"symbolRotate")||e.symbolRotate[0],this.query(i[1],"symbolRotate")||e.symbolRotate[1]],p=[i[0],i[1],e],c=this.deepMerge(p,"itemStyle.normal");c.color=this.getItemStyleColor(c.color,t,n,i);var u=this.deepMerge(p,"itemStyle.emphasis");u.color=this.getItemStyleColor(u.color,t,n,i);var y=c.lineStyle,g=u.lineStyle,b=y.width;null==b&&(b=c.borderWidth);var f=g.width;null==f&&(f=null!=u.borderWidth?u.borderWidth:b+2);var k=this.deepQuery(p,"smoothness");this.deepQuery(p,"smooth")||(k=0);var x=r?s:o,_=new x({style:{symbol:V,symbolSize:U,symbolRotate:d,brushType:"both",lineType:y.type,shadowColor:y.shadowColor||y.color||c.borderColor||c.color||l,shadowBlur:y.shadowBlur,shadowOffsetX:y.shadowOffsetX,shadowOffsetY:y.shadowOffsetY,color:c.color||l,strokeColor:y.color||c.borderColor||c.color||l,lineWidth:b,symbolBorderColor:c.borderColor||c.color||l,symbolBorder:c.borderWidth},highlightStyle:{shadowColor:g.shadowColor,shadowBlur:g.shadowBlur,shadowOffsetX:g.shadowOffsetX,shadowOffsetY:g.shadowOffsetY,color:u.color||c.color||l,strokeColor:g.color||y.color||u.borderColor||c.borderColor||u.color||c.color||l,lineWidth:f,symbolBorderColor:u.borderColor||c.borderColor||u.color||c.color||l,symbolBorder:null==u.borderWidth?c.borderWidth+2:u.borderWidth},clickable:this.deepQuery(p,"clickable")}),L=_.style;return r?(L.pointList=a,L.smooth=k):(L.xStart=a[0][0],L.yStart=a[0][1],L.xEnd=a[1][0],L.yEnd=a[1][1],L.curveness=k,_.updatePoints(_.style)),_=this.addLabel(_,e,i[0],i[0].name+" : "+i[1].name)},getLargeMarkPointShape:function(e,t){var i,n,a,o,s,l,h=this.series[e],m=this.component,V=t.data,U=m.dataRange,d=m.legend,p=[V[0],t];if(d&&(n=d.getColor(h.name)),!U||(a=null!=V[0].value?V[0].value:"",n=isNaN(a)?n:U.getColor(a),o=this.deepQuery(p,"itemStyle.normal.color")||n,s=this.deepQuery(p,"itemStyle.emphasis.color")||o,null!=o||null!=s)){n=this.deepMerge(p,"itemStyle.normal").color||n;var c=this.deepQuery(p,"symbol")||"circle";c=c.replace("empty","").replace(/\d/g,""),l=this.deepMerge([V[0],t],"effect");var u=window.devicePixelRatio||1;return i=new r({style:{pointList:V,color:n,strokeColor:n,shadowColor:l.shadowColor||n,shadowBlur:(null!=l.shadowBlur?l.shadowBlur:8)*u,size:this.deepQuery(p,"symbolSize"),iconType:c,brushType:"fill",lineWidth:1},draggable:!1,hoverable:!1}),l.show&&(i.effect=l),i}},backupShapeList:function(){this.shapeList&&this.shapeList.length>0?(this.lastShapeList=this.shapeList,this.shapeList=[]):this.lastShapeList=[]},addShapeList:function(){var e,t,i=this.option.animationThreshold/(this.canvasSupported?2:4),n=this.lastShapeList,a=this.shapeList,o=n.length>0,r=o?this.query(this.option,"animationDurationUpdate"):this.query(this.option,"animationDuration"),s=this.query(this.option,"animationEasing"),l={},m={};if(this.option.animation&&!this.option.renderAsImage&&a.length<i&&!this.motionlessOnce){for(var V=0,U=n.length;U>V;V++)t=this._getAnimationKey(n[V]),t.match("undefined")?this.zr.delShape(n[V].id):(t+=n[V].type,l[t]?this.zr.delShape(n[V].id):l[t]=n[V]);for(var V=0,U=a.length;U>V;V++)t=this._getAnimationKey(a[V]),t.match("undefined")?this.zr.addShape(a[V]):(t+=a[V].type,m[t]=a[V]);for(t in l)m[t]||this.zr.delShape(l[t].id);for(t in m)l[t]?(this.zr.delShape(l[t].id),this._animateMod(l[t],m[t],r,s,0,o)):(e=this.type!=h.CHART_TYPE_LINE&&this.type!=h.CHART_TYPE_RADAR||0===t.indexOf("icon")?0:r/2,this._animateMod(!1,m[t],r,s,e,o));this.zr.refresh(),this.animationEffect()}else{this.motionlessOnce=!1,this.zr.delShape(n);for(var V=0,U=a.length;U>V;V++)this.zr.addShape(a[V])}},_getAnimationKey:function(e){return this.type!=h.CHART_TYPE_MAP&&this.type!=h.CHART_TYPE_TREEMAP&&this.type!=h.CHART_TYPE_VENN&&this.type!=h.CHART_TYPE_TREE?m.get(e,"seriesIndex")+"_"+m.get(e,"dataIndex")+(e._mark?e._mark:"")+(this.type===h.CHART_TYPE_RADAR?m.get(e,"special"):""):m.get(e,"seriesIndex")+"_"+m.get(e,"dataIndex")+(e._mark?e._mark:"undefined")},_animateMod:function(e,t,i,n,a,o){switch(t.type){case"polyline":case"half-smooth-polygon":V.pointList(this.zr,e,t,i,n);break;case"rectangle":V.rectangle(this.zr,e,t,i,n);break;case"image":case"icon":V.icon(this.zr,e,t,i,n,a);break;case"candle":o?this.zr.addShape(t):V.candle(this.zr,e,t,i,n);break;case"ring":case"sector":case"circle":o?"sector"===t.type?V.sector(this.zr,e,t,i,n):this.zr.addShape(t):V.ring(this.zr,e,t,i+(m.get(t,"dataIndex")||0)%20*100,n);break;case"text":V.text(this.zr,e,t,i,n);break;case"polygon":o?V.pointList(this.zr,e,t,i,n):V.polygon(this.zr,e,t,i,n);break;case"ribbon":V.ribbon(this.zr,e,t,i,n);break;case"gauge-pointer":V.gaugePointer(this.zr,e,t,i,n);break;case"mark-line":V.markline(this.zr,e,t,i,n);break;case"bezier-curve":case"line":V.line(this.zr,e,t,i,n);break;default:this.zr.addShape(t)}},animationMark:function(e,t,i){for(var i=i||this.shapeList,n=0,a=i.length;a>n;n++)i[n]._mark&&this._animateMod(!1,i[n],e,t,0,!0);this.animationEffect(i)},animationEffect:function(e){if(!e&&this.clearEffectShape(),e=e||this.shapeList,null!=e){var t=h.EFFECT_ZLEVEL;this.canvasSupported&&this.zr.modLayer(t,{motionBlur:!0,lastFrameAlpha:this.option.effectBlendAlpha||h.effectBlendAlpha});for(var i,n=0,a=e.length;a>n;n++)i=e[n],i._mark&&i.effect&&i.effect.show&&U[i._mark]&&(U[i._mark](this.zr,this.effectList,i,t),this.effectList[this.effectList.length-1]._mark=i._mark)}},clearEffectShape:function(e){var t=this.effectList;if(this.zr&&t&&t.length>0){e&&this.zr.modLayer(h.EFFECT_ZLEVEL,{motionBlur:!1}),this.zr.delShape(t);for(var i=0;i<t.length;i++)t[i].effectAnimator&&t[i].effectAnimator.stop()}this.effectList=[]},addMark:function(e,t,i){var n=this.series[e];if(this.selectedMap[n.name]){var a=this.query(this.option,"animationDurationUpdate"),o=this.query(this.option,"animationEasing"),r=n[i].data,s=this.shapeList.length;if(n[i].data=t.data,this["_build"+i.replace("m","M")](e),this.option.animation&&!this.option.renderAsImage)this.animationMark(a,o,this.shapeList.slice(s));else{for(var l=s,h=this.shapeList.length;h>l;l++)this.zr.addShape(this.shapeList[l]);this.zr.refreshNextFrame()}n[i].data=r}},delMark:function(e,t,i){i=i.replace("mark","").replace("large","").toLowerCase();var n=this.series[e];if(this.selectedMap[n.name]){for(var a=!1,o=[this.shapeList,this.effectList],r=2;r--;)for(var s=0,l=o[r].length;l>s;s++)if(o[r][s]._mark==i&&m.get(o[r][s],"seriesIndex")==e&&m.get(o[r][s],"name")==t){this.zr.delShape(o[r][s].id),o[r].splice(s,1),a=!0;break}a&&this.zr.refreshNextFrame()}}},u.inherits(i,p),i}),i("zrender/shape/Circle",["require","./Base","../tool/util"],function(e){"use strict";var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"circle",buildPath:function(e,t){e.moveTo(t.x+t.r,t.y),e.arc(t.x,t.y,t.r,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("echarts/util/accMath",[],function(){function e(e,t){var i=e.toString(),n=t.toString(),a=0;try{a=n.split(".")[1].length}catch(o){}try{a-=i.split(".")[1].length}catch(o){}return(i.replace(".","")-0)/(n.replace(".","")-0)*Math.pow(10,a)}function t(e,t){var i=e.toString(),n=t.toString(),a=0;try{a+=i.split(".")[1].length}catch(o){}try{a+=n.split(".")[1].length}catch(o){}return(i.replace(".","")-0)*(n.replace(".","")-0)/Math.pow(10,a)}function i(e,t){var i=0,n=0;try{i=e.toString().split(".")[1].length}catch(a){}try{n=t.toString().split(".")[1].length}catch(a){}var o=Math.pow(10,Math.max(i,n));return(Math.round(e*o)+Math.round(t*o))/o}function n(e,t){return i(e,-t)}return{accDiv:e,accMul:t,accAdd:i,accSub:n}}),i("echarts/util/shape/Icon",["require","zrender/tool/util","zrender/shape/Star","zrender/shape/Heart","zrender/shape/Droplet","zrender/shape/Image","zrender/shape/Base"],function(e){function t(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o),e.moveTo(i+13*a,n+10*o),e.lineTo(i+13*a,n+t.height)}function i(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o)}function n(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+4*a,n+15*o),e.lineTo(i+9*a,n+13*o),e.lineTo(i+14*a,n+8*o),e.lineTo(i+11*a,n+5*o),e.lineTo(i+6*a,n+10*o),e.lineTo(i+4*a,n+15*o),e.moveTo(i+5*a,n),e.lineTo(i+11*a,n),e.moveTo(i+5*a,n+o),e.lineTo(i+11*a,n+o),e.moveTo(i,n+2*o),e.lineTo(i+t.width,n+2*o),e.moveTo(i,n+5*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+13*a,n+t.height),e.lineTo(i+t.width,n+5*o)}function a(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+3*o),e.lineTo(i+6*a,n+3*o),e.moveTo(i+3*a,n),e.lineTo(i+3*a,n+6*o),e.moveTo(i+3*a,n+8*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n+3*o),e.lineTo(i+8*a,n+3*o)}function o(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+6*a,n),e.lineTo(i+2*a,n+3*o),e.lineTo(i+6*a,n+6*o),e.moveTo(i+2*a,n+3*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+14*a,n+11*o),e.moveTo(i+2*a,n+5*o),e.lineTo(i+2*a,n+13*o),e.lineTo(i+14*a,n+13*o),e.moveTo(i+10*a,n+10*o),e.lineTo(i+14*a,n+13*o),e.lineTo(i+10*a,n+t.height)}function r(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16,r=t.width/2;e.lineWidth=1.5,e.arc(i+r,n+r,r-a,0,2*Math.PI/3),e.moveTo(i+3*a,n+t.height),e.lineTo(i+0*a,n+12*o),e.lineTo(i+5*a,n+11*o),e.moveTo(i,n+8*o),e.arc(i+r,n+r,r-a,Math.PI,5*Math.PI/3),e.moveTo(i+13*a,n),e.lineTo(i+t.width,n+4*o),e.lineTo(i+11*a,n+5*o)}function s(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+2*a,n+14*o),e.lineTo(i+7*a,n+6*o),e.lineTo(i+11*a,n+11*o),e.lineTo(i+15*a,n+2*o)}function l(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+3*a,n+14*o),e.lineTo(i+3*a,n+6*o),e.lineTo(i+4*a,n+6*o),e.lineTo(i+4*a,n+14*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+7*a,n+2*o),e.lineTo(i+8*a,n+2*o),e.lineTo(i+8*a,n+14*o),e.moveTo(i+11*a,n+14*o),e.lineTo(i+11*a,n+9*o),e.lineTo(i+12*a,n+9*o),e.lineTo(i+12*a,n+14*o)}function h(e,t){var i=t.x,n=t.y,a=t.width-2,o=t.height-2,r=Math.min(a,o)/2;n+=2,e.moveTo(i+r+3,n+r-3),e.arc(i+r+3,n+r-3,r-1,0,-Math.PI/2,!0),e.lineTo(i+r+3,n+r-3),e.moveTo(i+r,n),e.lineTo(i+r,n+r),e.arc(i+r,n+r,r,-Math.PI/2,2*Math.PI,!0),e.lineTo(i+r,n+r),e.lineWidth=1.5}function m(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;n-=o,e.moveTo(i+1*a,n+2*o),e.lineTo(i+15*a,n+2*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+2*a,n+3*o),e.moveTo(i+3*a,n+6*o),e.lineTo(i+13*a,n+6*o),e.lineTo(i+12*a,n+7*o),e.lineTo(i+4*a,n+7*o),e.moveTo(i+5*a,n+10*o),e.lineTo(i+11*a,n+10*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+9*a,n+14*o),e.lineTo(i+8*a,n+15*o),e.lineTo(i+7*a,n+15*o)}function V(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=a/16,s=o/16,l=2*Math.min(r,s);e.moveTo(i+r+l,n+s+l),e.arc(i+r,n+s,l,Math.PI/4,3*Math.PI),e.lineTo(i+7*r-l,n+6*s-l),e.arc(i+7*r,n+6*s,l,Math.PI/4*5,4*Math.PI),e.arc(i+7*r,n+6*s,l/2,Math.PI/4*5,4*Math.PI),e.moveTo(i+7*r-l/2,n+6*s+l),e.lineTo(i+r+l,n+14*s-l),e.arc(i+r,n+14*s,l,-Math.PI/4,2*Math.PI),e.moveTo(i+7*r+l/2,n+6*s),e.lineTo(i+14*r-l,n+10*s-l/2),e.moveTo(i+16*r,n+10*s),e.arc(i+14*r,n+10*s,l,0,3*Math.PI),e.lineWidth=1.5}function U(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.min(a,o)/2;e.moveTo(i+a,n+o/2),e.arc(i+r,n+r,r,0,2*Math.PI),e.arc(i+r,n,r,Math.PI/4,Math.PI/5*4),e.arc(i,n+r,r,-Math.PI/3,Math.PI/3),e.arc(i+a,n+o,r,Math.PI,Math.PI/2*3),e.lineWidth=1.5}function d(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(o/3),s=Math.round((r-2)/2),l=3;l--;)e.rect(i,n+r*l+s,a,2)}function p(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(a/3),s=Math.round((r-2)/2),l=3;l--;)e.rect(i+r*l+s,n,2,o)}function c(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+15*a,n+t.height),e.lineTo(i+15*a,n),e.lineTo(i+a,n),e.moveTo(i+3*a,n+3*a),e.lineTo(i+13*a,n+3*a),e.moveTo(i+3*a,n+6*a),e.lineTo(i+13*a,n+6*a),e.moveTo(i+3*a,n+9*a),e.lineTo(i+13*a,n+9*a),e.moveTo(i+3*a,n+12*a),e.lineTo(i+9*a,n+12*a)}function u(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n),e.lineTo(i,n),e.moveTo(i+4*a,n),e.lineTo(i+4*a,n+8*o),e.lineTo(i+12*a,n+8*o),e.lineTo(i+12*a,n),e.moveTo(i+6*a,n+11*o),e.lineTo(i+6*a,n+13*o),e.lineTo(i+10*a,n+13*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o)}function y(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o/2),e.lineTo(i+a,n+o/2),e.moveTo(i+a/2,n),e.lineTo(i+a/2,n+o)}function g(e,t){var i=t.width/2,n=t.height/2,a=Math.min(i,n);e.moveTo(t.x+i+a,t.y+n),e.arc(t.x+i,t.y+n,a,0,2*Math.PI),e.closePath()}function b(e,t){e.rect(t.x,t.y,t.width,t.height),e.closePath()}function f(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o+r),e.lineTo(a-r,o+r),e.lineTo(a,o-r),e.closePath()}function k(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o),e.lineTo(a,o+r),e.lineTo(a-r,o),e.lineTo(a,o-r),e.closePath()}function x(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+8*a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+8*a,n+t.height/4*3),e.lineTo(i+15*a,n+t.height),e.lineTo(i+8*a,n),e.closePath()}function _(t,i){var n=e("zrender/shape/Star"),a=i.width/2,o=i.height/2;n.prototype.buildPath(t,{x:i.x+a,y:i.y+o,r:Math.min(a,o),n:i.n||5})}function L(t,i){var n=e("zrender/shape/Heart");n.prototype.buildPath(t,{x:i.x+i.width/2,y:i.y+.2*i.height,a:i.width/2,b:.8*i.height})}function W(t,i){var n=e("zrender/shape/Droplet");n.prototype.buildPath(t,{x:i.x+.5*i.width,y:i.y+.5*i.height,a:.5*i.width,b:.8*i.height})}function X(e,t){var i=t.x,n=t.y-t.height/2*1.5,a=t.width/2,o=t.height/2,r=Math.min(a,o);e.arc(i+a,n+o,r,Math.PI/5*4,Math.PI/5),e.lineTo(i+a,n+o+1.5*r),e.closePath()}function v(t,i,n){var a=e("zrender/shape/Image");this._imageShape=this._imageShape||new a({style:{}});for(var o in i)this._imageShape.style[o]=i[o];this._imageShape.brush(t,!1,n)}function w(e){I.call(this,e)}var K=e("zrender/tool/util"),I=e("zrender/shape/Base");return w.prototype={type:"icon",iconLibrary:{mark:t,markUndo:i,markClear:n,dataZoom:a,dataZoomReset:o,restore:r,lineChart:s,barChart:l,pieChart:h,funnelChart:m,forceChart:V,chordChart:U,stackChart:d,tiledChart:p,dataView:c,saveAsImage:u,cross:y,circle:g,rectangle:b,triangle:f,diamond:k,arrow:x,star:_,heart:L,droplet:W,pin:X,image:v},brush:function(t,i,n){var a=i?this.highlightStyle:this.style;a=a||{};var o=a.iconType||this.style.iconType;if("image"===o){var r=e("zrender/shape/Image");r.prototype.brush.call(this,t,i,n)}else{var a=this.beforeBrush(t,i);switch(t.beginPath(),this.buildPath(t,a,n),a.brushType){case"both":t.fill();case"stroke":a.lineWidth>0&&t.stroke();break;default:t.fill()}this.drawText(t,a,this.style),this.afterBrush(t)}},buildPath:function(e,t,i){this.iconLibrary[t.iconType]?this.iconLibrary[t.iconType].call(this,e,t,i):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y),e.closePath())},getRect:function(e){return e.__rect?e.__rect:(e.__rect={x:Math.round(e.x),y:Math.round(e.y-("pin"==e.iconType?e.height/2*1.5:0)),width:e.width,height:e.height*("pin"===e.iconType?1.25:1)},e.__rect)},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);e=i[0],t=i[1];var n=this.style.__rect;n||(n=this.style.__rect=this.getRect(this.style));var a=n.height<8||n.width<8?4:0;return e>=n.x-a&&e<=n.x+n.width+a&&t>=n.y-a&&t<=n.y+n.height+a}},K.inherits(w,I),w}),i("echarts/util/shape/MarkLine",["require","zrender/shape/Base","./Icon","zrender/shape/Line","zrender/shape/BezierCurve","zrender/tool/area","zrender/shape/util/dashedLineTo","zrender/tool/util","zrender/tool/curve"],function(e){function t(e){i.call(this,e),this.style.curveness>0&&this.updatePoints(this.style),this.highlightStyle.curveness>0&&this.updatePoints(this.highlightStyle)}var i=e("zrender/shape/Base"),n=e("./Icon"),a=e("zrender/shape/Line"),o=new a({}),r=e("zrender/shape/BezierCurve"),s=new r({}),l=e("zrender/tool/area"),h=e("zrender/shape/util/dashedLineTo"),m=e("zrender/tool/util"),V=e("zrender/tool/curve");return t.prototype={type:"mark-line",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildPath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i,0),this.brushSymbol(e,i,1),this.drawText(e,i,this.style),e.restore()},buildPath:function(e,t){var i=t.lineType||"solid";if(e.moveTo(t.xStart,t.yStart),t.curveness>0){var n=null;switch(i){case"dashed":n=[5,5];break;case"dotted":n=[1,1]}n&&e.setLineDash&&e.setLineDash(n),e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)}else if("solid"==i)e.lineTo(t.xEnd,t.yEnd);else{var a=(t.lineWidth||1)*("dashed"==t.lineType?5:1);h(e,t.xStart,t.yStart,t.xEnd,t.yEnd,a)}},updatePoints:function(e){var t=e.curveness||0,i=1,n=e.xStart,a=e.yStart,o=e.xEnd,r=e.yEnd,s=(n+o)/2-i*(a-r)*t,l=(a+r)/2-i*(o-n)*t;e.cpX1=s,e.cpY1=l},brushSymbol:function(e,t,i){if("none"!=t.symbol[i]){e.save(),e.beginPath(),e.lineWidth=t.symbolBorder,e.strokeStyle=t.symbolBorderColor;var a=t.symbol[i].replace("empty","").toLowerCase();t.symbol[i].match("empty")&&(e.fillStyle="#fff");var o=t.xStart,r=t.yStart,s=t.xEnd,l=t.yEnd,h=0===i?o:s,m=0===i?r:l,U=t.curveness||0,d=null!=t.symbolRotate[i]?t.symbolRotate[i]-0:0;if(d=d/180*Math.PI,"arrow"==a&&0===d)if(0===U){var p=0===i?-1:1;d=Math.PI/2+Math.atan2(p*(l-r),p*(s-o))}else{var c=t.cpX1,u=t.cpY1,y=V.quadraticDerivativeAt,g=y(o,c,s,i),b=y(r,u,l,i);d=Math.PI/2+Math.atan2(b,g)}e.translate(h,m),0!==d&&e.rotate(d);var f=t.symbolSize[i];n.prototype.buildPath(e,{x:-f,y:-f,width:2*f,height:2*f,iconType:a}),e.closePath(),e.fill(),e.stroke(),e.restore()}},getRect:function(e){return e.curveness>0?s.getRect(e):o.getRect(e),e.__rect},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?this.style.curveness>0?l.isInside(s,this.style,e,t):l.isInside(o,this.style,e,t):!1}},m.inherits(t,i),t}),i("echarts/util/shape/Symbol",["require","zrender/shape/Base","zrender/shape/Polygon","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Polygon"),a=new n({}),o=e("zrender/tool/util");return t.prototype={type:"symbol",buildPath:function(e,t){var i=t.pointList,n=i.length;if(0!==n)for(var a,o,r,s,l,h=1e4,m=Math.ceil(n/h),V=i[0]instanceof Array,U=t.size?t.size:2,d=U,p=U/2,c=2*Math.PI,u=0;m>u;u++){e.beginPath(),a=u*h,o=a+h,o=o>n?n:o;for(var y=a;o>y;y++)if(t.random&&(r=t["randomMap"+y%20]/100,d=U*r*r,p=d/2),V?(s=i[y][0],l=i[y][1]):(s=i[y].x,l=i[y].y),3>d)e.rect(s-p,l-p,d,d);else switch(t.iconType){case"circle":e.moveTo(s,l),e.arc(s,l,p,0,c,!0);break;case"diamond":e.moveTo(s,l-p),e.lineTo(s+p/3,l-p/3),e.lineTo(s+p,l),e.lineTo(s+p/3,l+p/3),e.lineTo(s,l+p),e.lineTo(s-p/3,l+p/3),e.lineTo(s-p,l),e.lineTo(s-p/3,l-p/3),e.lineTo(s,l-p);break;default:e.rect(s-p,l-p,d,d)}if(e.closePath(),m-1>u)switch(t.brushType){case"both":e.fill(),t.lineWidth>0&&e.stroke();break;case"stroke":t.lineWidth>0&&e.stroke();break;default:e.fill()}}},getRect:function(e){return e.__rect||a.getRect(e)},isCover:e("./normalIsCover")},o.inherits(t,i),t}),i("zrender/shape/Polyline",["require","./Base","./util/smoothSpline","./util/smoothBezier","./util/dashedLineTo","./Polygon","../tool/util"],function(e){var t=e("./Base"),i=e("./util/smoothSpline"),n=e("./util/smoothBezier"),a=e("./util/dashedLineTo"),o=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return o.prototype={type:"polyline",buildPath:function(e,t){var n=t.pointList;if(!(n.length<2)){var o=Math.min(t.pointList.length,Math.round(t.pointListLength||t.pointList.length));if(t.smooth&&"spline"!==t.smooth){t.controlPointList||this.updateControlPoints(t);var r=t.controlPointList;e.moveTo(n[0][0],n[0][1]);for(var s,l,h,m=0;o-1>m;m++)s=r[2*m],l=r[2*m+1],h=n[m+1],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if("spline"===t.smooth&&(n=i(n),o=n.length),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var V=(t.lineWidth||1)*("dashed"==t.lineType?5:1);e.moveTo(n[0][0],n[0][1]);for(var m=1;o>m;m++)a(e,n[m-1][0],n[m-1][1],n[m][0],n[m][1],V)}}else{e.moveTo(n[0][0],n[0][1]);for(var m=1;o>m;m++)e.lineTo(n[m][0],n[m][1])}}},updateControlPoints:function(e){e.controlPointList=n(e.pointList,e.smooth,!1,e.smoothConstraint)},getRect:function(t){return e("./Polygon").prototype.getRect(t)}},e("../tool/util").inherits(o,t),o}),i("zrender/shape/ShapeBundle",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={constructor:i,type:"shape-bundle",brush:function(e,t){var i=this.beforeBrush(e,t);e.beginPath();for(var n=0;n<i.shapeList.length;n++){var a=i.shapeList[n],o=a.style;t&&(o=a.getHighlightStyle(o,a.highlightStyle||{},a.brushTypeOnly)),a.buildPath(e,o)}switch(i.brushType){case"both":e.fill();case"stroke":i.lineWidth>0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},getRect:function(e){if(e.__rect)return e.__rect;for(var t=1/0,i=-(1/0),n=1/0,a=-(1/0),o=0;o<e.shapeList.length;o++)var r=e.shapeList[o],s=r.getRect(r.style),t=Math.min(s.x,t),n=Math.min(s.y,n),i=Math.max(s.x+s.width,i),a=Math.max(s.y+s.height,a);return e.__rect={x:t,y:n,width:i-t,height:a-n},e.__rect},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);if(e=i[0],t=i[1],this.isCoverRect(e,t))for(var n=0;n<this.style.shapeList.length;n++){var a=this.style.shapeList[n];if(a.isCover(e,t))return!0}return!1}},e("../tool/util").inherits(i,t),i}),i("echarts/util/ecAnimation",["require","zrender/tool/util","zrender/tool/curve","zrender/shape/Polygon"],function(e){function t(e,t,i,n,a){var o,r=i.style.pointList,s=r.length;if(!t){if(o=[],"vertical"!=i._orient)for(var l=r[0][1],h=0;s>h;h++)o[h]=[r[h][0],l];else for(var m=r[0][0],h=0;s>h;h++)o[h]=[m,r[h][1]];"half-smooth-polygon"==i.type&&(o[s-1]=p.clone(r[s-1]),o[s-2]=p.clone(r[s-2])),t={style:{pointList:o}}}o=t.style.pointList;var V=o.length;i.style.pointList=V==s?o:s>V?o.concat(r.slice(V)):o.slice(0,s),e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{pointList:r}).during(function(){i.updateControlPoints&&i.updateControlPoints(i.style)}).done(function(){i.__animating=!1}).start(a)}function i(e,t){for(var i=arguments.length,n=2;i>n;n++){var a=arguments[n];e.style[a]=t.style[a]}}function n(e,t,n,a,o){var r=n.style;t||(t={position:n.position,style:{x:r.x,y:"vertical"==n._orient?r.y+r.height:r.y,width:"vertical"==n._orient?r.width:0,height:"vertical"!=n._orient?r.height:0}});var s=r.x,l=r.y,h=r.width,m=r.height,V=[n.position[0],n.position[1]];i(n,t,"x","y","width","height"),n.position=t.position,e.addShape(n),(V[0]!=t.position[0]||V[1]!=t.position[1])&&e.animate(n.id,"").when(a,{position:V}).start(o),n.__animating=!0,e.animate(n.id,"style").when(a,{x:s,y:l,width:h,height:m}).done(function(){n.__animating=!1}).start(o)}function a(e,t,i,n,a){if(!t){var o=i.style.y;t={style:{y:[o[0],o[0],o[0],o[0]]}}}var r=i.style.y;i.style.y=t.style.y,e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{y:r}).done(function(){i.__animating=!1}).start(a)}function o(e,t,i,n,a){var o=i.style.x,r=i.style.y,s=i.style.r0,l=i.style.r;i.__animating=!0,"r"!=i._animationAdd?(i.style.r0=0,i.style.r=0,i.rotation=[2*Math.PI,o,r],e.addShape(i),e.animate(i.id,"style").when(n,{r0:s,r:l}).done(function(){i.__animating=!1}).start(a),e.animate(i.id,"").when(n,{rotation:[0,o,r]}).start(a)):(i.style.r0=i.style.r,e.addShape(i),e.animate(i.id,"style").when(n,{r0:s}).done(function(){i.__animating=!1}).start(a))}function r(e,t,n,a,o){t||(t="r"!=n._animationAdd?{ +style:{startAngle:n.style.startAngle,endAngle:n.style.startAngle}}:{style:{r0:n.style.r}});var r=n.style.startAngle,s=n.style.endAngle;i(n,t,"startAngle","endAngle"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{startAngle:r,endAngle:s}).done(function(){n.__animating=!1}).start(o)}function s(e,t,n,a,o){t||(t={style:{x:"left"==n.style.textAlign?n.style.x+100:n.style.x-100,y:n.style.y}});var r=n.style.x,s=n.style.y;i(n,t,"x","y"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{x:r,y:s}).done(function(){n.__animating=!1}).start(o)}function l(t,i,n,a,o){var r=e("zrender/shape/Polygon").prototype.getRect(n.style),s=r.x+r.width/2,l=r.y+r.height/2;n.scale=[.1,.1,s,l],t.addShape(n),n.__animating=!0,t.animate(n.id,"").when(a,{scale:[1,1,s,l]}).done(function(){n.__animating=!1}).start(o)}function h(e,t,n,a,o){t||(t={style:{source0:0,source1:n.style.source1>0?360:-360,target0:0,target1:n.style.target1>0?360:-360}});var r=n.style.source0,s=n.style.source1,l=n.style.target0,h=n.style.target1;t.style&&i(n,t,"source0","source1","target0","target1"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{source0:r,source1:s,target0:l,target1:h}).done(function(){n.__animating=!1}).start(o)}function m(e,t,i,n,a){t||(t={style:{angle:i.style.startAngle}});var o=i.style.angle;i.style.angle=t.style.angle,e.addShape(i),i.__animating=!0,e.animate(i.id,"style").when(n,{angle:o}).done(function(){i.__animating=!1}).start(a)}function V(e,t,i,a,o,r){if(i.style._x=i.style.x,i.style._y=i.style.y,i.style._width=i.style.width,i.style._height=i.style.height,t)n(e,t,i,a,o);else{var s=i._x||0,l=i._y||0;i.scale=[.01,.01,s,l],e.addShape(i),i.__animating=!0,e.animate(i.id,"").delay(r).when(a,{scale:[1,1,s,l]}).done(function(){i.__animating=!1}).start(o||"QuinticOut")}}function U(e,t,n,a,o){t||(t={style:{xStart:n.style.xStart,yStart:n.style.yStart,xEnd:n.style.xStart,yEnd:n.style.yStart}});var r=n.style.xStart,s=n.style.xEnd,l=n.style.yStart,h=n.style.yEnd;i(n,t,"xStart","xEnd","yStart","yEnd"),e.addShape(n),n.__animating=!0,e.animate(n.id,"style").when(a,{xStart:r,xEnd:s,yStart:l,yEnd:h}).done(function(){n.__animating=!1}).start(o)}function d(e,t,i,n,a){a=a||"QuinticOut",i.__animating=!0,e.addShape(i);var o=i.style,r=function(){i.__animating=!1},s=o.xStart,l=o.yStart,h=o.xEnd,m=o.yEnd;if(o.curveness>0){i.updatePoints(o);var V={p:0},U=o.cpX1,d=o.cpY1,p=[],u=[],y=c.quadraticSubdivide;e.animation.animate(V).when(n,{p:1}).during(function(){y(s,U,h,V.p,p),y(l,d,m,V.p,u),o.cpX1=p[1],o.cpY1=u[1],o.xEnd=p[2],o.yEnd=u[2],e.modShape(i)}).done(r).start(a)}else e.animate(i.id,"style").when(0,{xEnd:s,yEnd:l}).when(n,{xEnd:h,yEnd:m}).done(r).start(a)}var p=e("zrender/tool/util"),c=e("zrender/tool/curve");return{pointList:t,rectangle:n,candle:a,ring:o,sector:r,text:s,polygon:l,ribbon:h,gaugePointer:m,icon:V,line:U,markline:d}}),i("echarts/util/ecEffect",["require","../util/ecData","zrender/shape/Circle","zrender/shape/Image","zrender/tool/curve","../util/shape/Icon","../util/shape/Symbol","zrender/shape/ShapeBundle","zrender/shape/Polyline","zrender/tool/vector","zrender/tool/env"],function(e){function t(e,t,i,n){var a,r=i.effect,l=r.color||i.style.strokeColor||i.style.color,m=r.shadowColor||l,V=r.scaleSize,U=r.bounceDistance,d="undefined"!=typeof r.shadowBlur?r.shadowBlur:V;"image"!==i.type?(a=new h({zlevel:n,style:{brushType:"stroke",iconType:"droplet"!=i.style.iconType?i.style.iconType:"circle",x:d+1,y:d+1,n:i.style.n,width:i.style._width*V,height:i.style._height*V,lineWidth:1,strokeColor:l,shadowColor:m,shadowBlur:d},draggable:!1,hoverable:!1}),"pin"==i.style.iconType&&(a.style.y+=a.style.height/2*1.5),p&&(a.style.image=e.shapeToImage(a,a.style.width+2*d+2,a.style.height+2*d+2).style.image,a=new s({zlevel:a.zlevel,style:a.style,draggable:!1,hoverable:!1}))):a=new s({zlevel:n,style:i.style,draggable:!1,hoverable:!1}),o.clone(i,a),a.position=i.position,t.push(a),e.addShape(a);var c="image"!==i.type?window.devicePixelRatio||1:1,u=(a.style.width/c-i.style._width)/2;a.style.x=i.style._x-u,a.style.y=i.style._y-u,"pin"==i.style.iconType&&(a.style.y-=i.style.height/2*1.5);var y=100*(r.period+10*Math.random());e.modShape(i.id,{invisible:!0});var g=a.style.x+a.style.width/2/c,b=a.style.y+a.style.height/2/c;"scale"===r.type?(e.modShape(a.id,{scale:[.1,.1,g,b]}),e.animate(a.id,"",r.loop).when(y,{scale:[1,1,g,b]}).done(function(){i.effect.show=!1,e.delShape(a.id)}).start()):e.animate(a.id,"style",r.loop).when(y,{y:a.style.y-U}).when(2*y,{y:a.style.y}).done(function(){i.effect.show=!1,e.delShape(a.id)}).start()}function i(e,t,i,n){var a=i.effect,o=a.color||i.style.strokeColor||i.style.color,r=a.scaleSize,s=a.shadowColor||o,l="undefined"!=typeof a.shadowBlur?a.shadowBlur:2*r,h=window.devicePixelRatio||1,V=new m({zlevel:n,position:i.position,scale:i.scale,style:{pointList:i.style.pointList,iconType:i.style.iconType,color:o,strokeColor:o,shadowColor:s,shadowBlur:l*h,random:!0,brushType:"fill",lineWidth:1,size:i.style.size},draggable:!1,hoverable:!1});t.push(V),e.addShape(V),e.modShape(i.id,{invisible:!0});for(var U=Math.round(100*a.period),d={},p={},c=0;20>c;c++)V.style["randomMap"+c]=0,d={},d["randomMap"+c]=100,p={},p["randomMap"+c]=0,V.style["randomMap"+c]=100*Math.random(),e.animate(V.id,"style",!0).when(U,d).when(2*U,p).when(3*U,d).when(4*U,d).delay(Math.random()*U*c).start()}function n(e,t,i,n,a){var s=i.effect,h=i.style,m=s.color||h.strokeColor||h.color,V=s.shadowColor||h.strokeColor||m,c=h.lineWidth*s.scaleSize,u="undefined"!=typeof s.shadowBlur?s.shadowBlur:c,y=new r({zlevel:n,style:{x:u,y:u,r:c,color:m,shadowColor:V,shadowBlur:u},hoverable:!1}),g=0;if(p&&!a){var n=y.zlevel;y=e.shapeToImage(y,2*(c+u),2*(c+u)),y.zlevel=n,y.hoverable=!1,g=u}a||(o.clone(i,y),y.position=i.position,t.push(y),e.addShape(y));var b=function(){a||(i.effect.show=!1,e.delShape(y.id)),y.effectAnimator=null};if(i instanceof U){for(var f=[0],k=0,x=h.pointList,_=h.controlPointList,L=1;L<x.length;L++){if(_){var W=_[2*(L-1)],X=_[2*(L-1)+1];k+=d.dist(x[L-1],W)+d.dist(W,X)+d.dist(X,x[L])}else k+=d.dist(x[L-1],x[L]);f.push(k)}for(var v={p:0},w=e.animation.animate(v,{loop:s.loop}),L=0;L<f.length;L++)w.when(f[L]*s.period,{p:L});w.during(function(){var t,i,n=Math.floor(v.p);if(n==x.length-1)t=x[n][0],i=x[n][1];else{var o=v.p-n,r=x[n],s=x[n+1];if(_){var h=_[2*n],m=_[2*n+1];t=l.cubicAt(r[0],h[0],m[0],s[0],o),i=l.cubicAt(r[1],h[1],m[1],s[1],o)}else t=(s[0]-r[0])*o+r[0],i=(s[1]-r[1])*o+r[1]}y.style.x=t,y.style.y=i,a||e.modShape(y)}).done(b).start(),w.duration=k*s.period,y.effectAnimator=w}else{var K=h.xStart-g,I=h.yStart-g,J=h.xEnd-g,C=h.yEnd-g;y.style.x=K,y.style.y=I;var S=(J-K)*(J-K)+(C-I)*(C-I),E=Math.round(Math.sqrt(Math.round(S*s.period*s.period)));if(i.style.curveness>0){var F=h.cpX1-g,T=h.cpY1-g;y.effectAnimator=e.animation.animate(y,{loop:s.loop}).when(E,{p:1}).during(function(t,i){y.style.x=l.quadraticAt(K,F,J,i),y.style.y=l.quadraticAt(I,T,C,i),a||e.modShape(y)}).done(b).start()}else y.effectAnimator=e.animation.animate(y.style,{loop:s.loop}).when(E,{x:J,y:C}).during(function(){a||e.modShape(y)}).done(b).start();y.effectAnimator.duration=E}return y}function a(e,t,i,a){var o=new V({style:{shapeList:[]},zlevel:a,hoverable:!1}),r=i.style.shapeList,s=i.effect;o.position=i.position;for(var l=0,h=[],m=0;m<r.length;m++){r[m].effect=s;var U=n(e,null,r[m],a,!0),d=U.effectAnimator;o.style.shapeList.push(U),d.duration>l&&(l=d.duration),0===m&&(o.style.color=U.style.color,o.style.shadowBlur=U.style.shadowBlur,o.style.shadowColor=U.style.shadowColor),h.push(d)}t.push(o),e.addShape(o);var p=function(){for(var e=0;e<h.length;e++)h[e].stop()};if(l){o.__dummy=0;var c=e.animate(o.id,"",s.loop).when(l,{__dummy:1}).during(function(){e.modShape(o)}).done(function(){i.effect.show=!1,e.delShape(o.id)}).start(),u=c.stop;c.stop=function(){p(),u.call(this)}}}var o=e("../util/ecData"),r=e("zrender/shape/Circle"),s=e("zrender/shape/Image"),l=e("zrender/tool/curve"),h=e("../util/shape/Icon"),m=e("../util/shape/Symbol"),V=e("zrender/shape/ShapeBundle"),U=e("zrender/shape/Polyline"),d=e("zrender/tool/vector"),p=e("zrender/tool/env").canvasSupported;return{point:t,largePoint:i,line:n,largeLine:a}}),i("echarts/component/base",["require","../config","../util/ecData","../util/ecQuery","../util/number","zrender/tool/util","zrender/tool/env"],function(e){function t(e,t,a,o,r){this.ecTheme=e,this.messageCenter=t,this.zr=a,this.option=o,this.series=o.series,this.myChart=r,this.component=r.component,this.shapeList=[],this.effectList=[];var s=this;s._onlegendhoverlink=function(e){if(s.legendHoverLink)for(var t,a=e.target,o=s.shapeList.length-1;o>=0;o--)t=s.type==i.CHART_TYPE_PIE||s.type==i.CHART_TYPE_FUNNEL?n.get(s.shapeList[o],"name"):(n.get(s.shapeList[o],"series")||{}).name,t!=a||s.shapeList[o].invisible||s.shapeList[o].__animating||s.zr.addHoverShape(s.shapeList[o])},t&&t.bind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink)}var i=e("../config"),n=e("../util/ecData"),a=e("../util/ecQuery"),o=e("../util/number"),r=e("zrender/tool/util");return t.prototype={canvasSupported:e("zrender/tool/env").canvasSupported,_getZ:function(e){if(null!=this[e])return this[e];var t=this.ecTheme[this.type];return t&&null!=t[e]?t[e]:(t=i[this.type],t&&null!=t[e]?t[e]:0)},getZlevelBase:function(){return this._getZ("zlevel")},getZBase:function(){return this._getZ("z")},reformOption:function(e){return e=r.merge(r.merge(e||{},r.clone(this.ecTheme[this.type]||{})),r.clone(i[this.type]||{})),this.z=e.z,this.zlevel=e.zlevel,e},reformCssArray:function(e){if(!(e instanceof Array))return[e,e,e,e];switch(e.length+""){case"4":return e;case"3":return[e[0],e[1],e[2],e[1]];case"2":return[e[0],e[1],e[0],e[1]];case"1":return[e[0],e[0],e[0],e[0]];case"0":return[0,0,0,0]}},getShapeById:function(e){for(var t=0,i=this.shapeList.length;i>t;t++)if(this.shapeList[t].id===e)return this.shapeList[t];return null},getFont:function(e){var t=this.getTextStyle(r.clone(e));return t.fontStyle+" "+t.fontWeight+" "+t.fontSize+"px "+t.fontFamily},getTextStyle:function(e){return r.merge(r.merge(e||{},this.ecTheme.textStyle),i.textStyle)},getItemStyleColor:function(e,t,i,n){return"function"==typeof e?e.call(this.myChart,{seriesIndex:t,series:this.series[t],dataIndex:i,data:n}):e},getDataFromOption:function(e,t){return null!=e?null!=e.value?e.value:e:t},subPixelOptimize:function(e,t){return e=t%2===1?Math.floor(e)+.5:Math.round(e)},resize:function(){this.refresh&&this.refresh(),this.clearEffectShape&&this.clearEffectShape(!0);var e=this;setTimeout(function(){e.animationEffect&&e.animationEffect()},200)},clear:function(){this.clearEffectShape&&this.clearEffectShape(),this.zr&&this.zr.delShape(this.shapeList),this.shapeList=[]},dispose:function(){this.onbeforDispose&&this.onbeforDispose(),this.clear(),this.shapeList=null,this.effectList=null,this.messageCenter&&this.messageCenter.unbind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink),this.onafterDispose&&this.onafterDispose()},query:a.query,deepQuery:a.deepQuery,deepMerge:a.deepMerge,parsePercent:o.parsePercent,parseCenter:o.parseCenter,parseRadius:o.parseRadius,numAddCommas:o.addCommas,getPrecision:o.getPrecision},t}),i("echarts/layout/EdgeBundling",["require","../data/KDTree","zrender/tool/vector"],function(e){function t(e,t){e=e.array,t=t.array;var i=t[0]-e[0],n=t[1]-e[1],a=t[2]-e[2],o=t[3]-e[3];return i*i+n*n+a*a+o*o}function i(e){this.points=[e.mp0,e.mp1],this.group=e}function n(e){var t=e.points;t[0][1]<t[1][1]||e instanceof i?(this.array=[t[0][0],t[0][1],t[1][0],t[1][1]],this._startPoint=t[0],this._endPoint=t[1]):(this.array=[t[1][0],t[1][1],t[0][0],t[0][1]],this._startPoint=t[1],this._endPoint=t[0]),this.ink=m(t[0],t[1]),this.edge=e,this.group=null}function a(){this.edgeList=[],this.mp0=l(),this.mp1=l(),this.ink=0}function o(){this.maxNearestEdge=6,this.maxTurningAngle=Math.PI/4,this.maxIteration=20}var r=e("../data/KDTree"),s=e("zrender/tool/vector"),l=s.create,h=s.distSquare,m=s.dist,V=s.copy,U=s.clone;return n.prototype.getStartPoint=function(){return this._startPoint},n.prototype.getEndPoint=function(){return this._endPoint},a.prototype.addEdge=function(e){e.group=this,this.edgeList.push(e)},a.prototype.removeEdge=function(e){e.group=null,this.edgeList.splice(this.edgeList.indexOf(e),1)},o.prototype={constructor:o,run:function(e){function t(e,t){return h(e,t)<1e-10}function n(e,i){for(var n=[],a=0,o=0;o<e.length;o++)a>0&&t(e[o],n[a-1])||(n[a++]=U(e[o]));return i[0]&&!t(n[0],i[0])&&(n=n.reverse()),n}for(var a=this._iterate(e),o=0;o++<this.maxIteration;){for(var r=[],s=0;s<a.groups.length;s++)r.push(new i(a.groups[s]));var l=this._iterate(r);if(l.savedInk<=0)break;a=l}var m=[],V=function(e,t){for(var a,o=0;o<e.length;o++){var r=e[o];if(r.edgeList[0]&&r.edgeList[0].edge instanceof i){for(var s=[],l=0;l<r.edgeList.length;l++)s.push(r.edgeList[l].edge.group);a=t?t.slice():[],a.unshift(r.mp0),a.push(r.mp1),V(s,a)}else for(var l=0;l<r.edgeList.length;l++){var h=r.edgeList[l];a=t?t.slice():[],a.unshift(r.mp0),a.push(r.mp1),a.unshift(h.getStartPoint()),a.push(h.getEndPoint()),m.push({points:n(a,h.edge.points),rawEdge:h.edge})}}};return V(a.groups),m},_iterate:function(e){for(var i=[],o=[],s=0,h=0;h<e.length;h++){var m=new n(e[h]);i.push(m)}for(var U=new r(i,4),d=[],p=l(),c=l(),u=0,y=l(),g=l(),b=0,h=0;h<i.length;h++){var m=i[h];if(!m.group){U.nearestN(m,this.maxNearestEdge,t,d);for(var f=0,k=null,x=null,_=0;_<d.length;_++){var L=d[_],W=0;L.group?L.group!==x&&(x=L.group,u=this._calculateGroupEdgeInk(L.group,m,p,c),W=L.group.ink+m.ink-u):(u=this._calculateEdgeEdgeInk(m,L,p,c),W=L.ink+m.ink-u),W>f&&(f=W,k=L,V(g,c),V(y,p),b=u)}if(k){s+=f;var X;k.group||(X=new a,o.push(X),X.addEdge(k)),X=k.group,V(X.mp0,y),V(X.mp1,g),X.ink=b,k.group.addEdge(m)}else{var X=new a;o.push(X),V(X.mp0,m.getStartPoint()),V(X.mp1,m.getEndPoint()),X.ink=m.ink,X.addEdge(m)}}}return{groups:o,edges:i,savedInk:s}},_calculateEdgeEdgeInk:function(){var e=[],t=[];return function(i,n,a,o){e[0]=i.getStartPoint(),e[1]=n.getStartPoint(),t[0]=i.getEndPoint(),t[1]=n.getEndPoint(),this._calculateMeetPoints(e,t,a,o);var r=m(e[0],a)+m(a,o)+m(o,t[0])+m(e[1],a)+m(o,t[1]);return r}}(),_calculateGroupEdgeInk:function(e,t,i,n){for(var a=[],o=[],r=0;r<e.edgeList.length;r++){var s=e.edgeList[r];a.push(s.getStartPoint()),o.push(s.getEndPoint())}a.push(t.getStartPoint()),o.push(t.getEndPoint()),this._calculateMeetPoints(a,o,i,n);for(var l=m(i,n),r=0;r<a.length;r++)l+=m(a[r],i)+m(o[r],n);return l},_calculateMeetPoints:function(){var e=l(),t=l();return function(i,n,a,o){s.set(e,0,0),s.set(t,0,0);for(var r=i.length,l=0;r>l;l++)s.add(e,e,i[l]);s.scale(e,e,1/r),r=n.length;for(var l=0;r>l;l++)s.add(t,t,n[l]);s.scale(t,t,1/r),this._limitTurningAngle(i,e,t,a),this._limitTurningAngle(n,t,e,o)}}(),_limitTurningAngle:function(){var e=l(),t=l(),i=l(),n=l();return function(a,o,r,l){var V=Math.cos(this.maxTurningAngle),U=Math.tan(this.maxTurningAngle);s.sub(e,o,r),s.normalize(e,e),s.copy(l,o);for(var d=0,p=0;p<a.length;p++){var c=a[p];s.sub(t,c,o);var u=s.len(t);s.scale(t,t,1/u);var y=s.dot(t,e);if(V>y){s.scaleAndAdd(i,o,e,u*y);var g=m(i,c),b=g/U;s.scaleAndAdd(n,i,e,-b);var f=h(n,o);f>d&&(d=f,s.copy(l,n))}}}}()},o}),i("zrender/shape/Star",["require","../tool/math","./Base","../tool/util"],function(e){var t=e("../tool/math"),i=t.sin,n=t.cos,a=Math.PI,o=e("./Base"),r=function(e){o.call(this,e)};return r.prototype={type:"star",buildPath:function(e,t){var o=t.n;if(o&&!(2>o)){var r=t.x,s=t.y,l=t.r,h=t.r0;null==h&&(h=o>4?l*n(2*a/o)/n(a/o):l/3);var m=a/o,V=-a/2,U=r+l*n(V),d=s+l*i(V);V+=m;var p=t.pointList=[];p.push([U,d]);for(var c,u=0,y=2*o-1;y>u;u++)c=u%2===0?h:l,p.push([r+c*n(V),s+c*i(V)]),V+=m;p.push([U,d]),e.moveTo(p[0][0],p[0][1]);for(var u=0;u<p.length;u++)e.lineTo(p[u][0],p[u][1]);e.closePath()}},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(r,o),r}),i("zrender/shape/Heart",["require","./Base","./util/PathProxy","../tool/area","../tool/util"],function(e){"use strict";var t=e("./Base"),i=e("./util/PathProxy"),n=e("../tool/area"),a=function(e){t.call(this,e),this._pathProxy=new i};return a.prototype={type:"heart",buildPath:function(e,t){var n=this._pathProxy||new i;n.begin(e),n.moveTo(t.x,t.y),n.bezierCurveTo(t.x+t.a/2,t.y-2*t.b/3,t.x+2*t.a,t.y+t.b/3,t.x,t.y+t.b),n.bezierCurveTo(t.x-2*t.a,t.y+t.b/3,t.x-t.a/2,t.y-2*t.b/3,t.x,t.y),n.closePath()},getRect:function(e){return e.__rect?e.__rect:(this._pathProxy.isEmpty()||this.buildPath(null,e),this._pathProxy.fastBoundingRect())},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?n.isInsidePath(this._pathProxy.pathCommands,this.style.lineWidth,this.style.brushType,e,t):void 0}},e("../tool/util").inherits(a,t),a}),i("zrender/shape/Droplet",["require","./Base","./util/PathProxy","../tool/area","../tool/util"],function(e){"use strict";var t=e("./Base"),i=e("./util/PathProxy"),n=e("../tool/area"),a=function(e){t.call(this,e),this._pathProxy=new i};return a.prototype={type:"droplet",buildPath:function(e,t){var n=this._pathProxy||new i;n.begin(e),n.moveTo(t.x,t.y+t.a),n.bezierCurveTo(t.x+t.a,t.y+t.a,t.x+3*t.a/2,t.y-t.a/3,t.x,t.y-t.b),n.bezierCurveTo(t.x-3*t.a/2,t.y-t.a/3,t.x-t.a,t.y+t.a,t.x,t.y+t.a),n.closePath()},getRect:function(e){return e.__rect?e.__rect:(this._pathProxy.isEmpty()||this.buildPath(null,e),this._pathProxy.fastBoundingRect())},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?n.isInsidePath(this._pathProxy.pathCommands,this.style.lineWidth,this.style.brushType,e,t):void 0}},e("../tool/util").inherits(a,t),a}),i("zrender/tool/math",[],function(){function e(e,t){return Math.sin(t?e*a:e)}function t(e,t){return Math.cos(t?e*a:e)}function i(e){return e*a}function n(e){return e/a}var a=Math.PI/180;return{sin:e,cos:t,degreeToRadian:i,radianToDegree:n}}),i("zrender/shape/util/PathProxy",["require","../../tool/vector"],function(e){var t=e("../../tool/vector"),i=function(e,t){this.command=e,this.points=t||null},n=function(){this.pathCommands=[],this._ctx=null,this._min=[],this._max=[]};return n.prototype.fastBoundingRect=function(){var e=this._min,i=this._max;e[0]=e[1]=1/0,i[0]=i[1]=-(1/0);for(var n=0;n<this.pathCommands.length;n++){var a=this.pathCommands[n],o=a.points;switch(a.command){case"M":t.min(e,e,o),t.max(i,i,o);break;case"L":t.min(e,e,o),t.max(i,i,o);break;case"C":for(var r=0;6>r;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case"Q":for(var r=0;4>r;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case"A":var s=o[0],l=o[1],h=o[2],m=o[3];e[0]=Math.min(e[0],e[0],s-h),e[1]=Math.min(e[1],e[1],l-m),i[0]=Math.max(i[0],i[0],s+h),i[1]=Math.max(i[1],i[1],l+m)}}return{x:e[0],y:e[1],width:i[0]-e[0],height:i[1]-e[1]}},n.prototype.begin=function(e){return this._ctx=e||null,this.pathCommands.length=0,this},n.prototype.moveTo=function(e,t){return this.pathCommands.push(new i("M",[e,t])),this._ctx&&this._ctx.moveTo(e,t),this},n.prototype.lineTo=function(e,t){return this.pathCommands.push(new i("L",[e,t])),this._ctx&&this._ctx.lineTo(e,t),this},n.prototype.bezierCurveTo=function(e,t,n,a,o,r){return this.pathCommands.push(new i("C",[e,t,n,a,o,r])),this._ctx&&this._ctx.bezierCurveTo(e,t,n,a,o,r),this},n.prototype.quadraticCurveTo=function(e,t,n,a){return this.pathCommands.push(new i("Q",[e,t,n,a])),this._ctx&&this._ctx.quadraticCurveTo(e,t,n,a),this},n.prototype.arc=function(e,t,n,a,o,r){return this.pathCommands.push(new i("A",[e,t,n,n,a,o-a,0,r?0:1])),this._ctx&&this._ctx.arc(e,t,n,a,o,r),this},n.prototype.arcTo=function(e,t,i,n,a){return this._ctx&&this._ctx.arcTo(e,t,i,n,a),this},n.prototype.rect=function(e,t,i,n){return this._ctx&&this._ctx.rect(e,t,i,n),this},n.prototype.closePath=function(){return this.pathCommands.push(new i("z")),this._ctx&&this._ctx.closePath(),this},n.prototype.isEmpty=function(){return 0===this.pathCommands.length},n.PathSegment=i,n}),i("zrender/shape/Line",["require","./Base","./util/dashedLineTo","../tool/util"],function(e){var t=e("./Base"),i=e("./util/dashedLineTo"),n=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return n.prototype={type:"line",buildPath:function(e,t){if(t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var n=(t.lineWidth||1)*("dashed"==t.lineType?5:1);i(e,t.xStart,t.yStart,t.xEnd,t.yEnd,n)}}else e.moveTo(t.xStart,t.yStart),e.lineTo(t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=e.lineWidth||1;return e.__rect={x:Math.min(e.xStart,e.xEnd)-t,y:Math.min(e.yStart,e.yEnd)-t,width:Math.abs(e.xStart-e.xEnd)+t,height:Math.abs(e.yStart-e.yEnd)+t},e.__rect}},e("../tool/util").inherits(n,t),n}),i("zrender/shape/BezierCurve",["require","./Base","../tool/util"],function(e){"use strict";var t=e("./Base"),i=function(e){this.brushTypeOnly="stroke",this.textPosition="end",t.call(this,e)};return i.prototype={type:"bezier-curve",buildPath:function(e,t){e.moveTo(t.xStart,t.yStart),"undefined"!=typeof t.cpX2&&"undefined"!=typeof t.cpY2?e.bezierCurveTo(t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd):e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=Math.min(e.xStart,e.xEnd,e.cpX1),i=Math.min(e.yStart,e.yEnd,e.cpY1),n=Math.max(e.xStart,e.xEnd,e.cpX1),a=Math.max(e.yStart,e.yEnd,e.cpY1),o=e.cpX2,r=e.cpY2;"undefined"!=typeof o&&"undefined"!=typeof r&&(t=Math.min(t,o),i=Math.min(i,r),n=Math.max(n,o),a=Math.max(a,r));var s=e.lineWidth||1;return e.__rect={x:t-s,y:i-s,width:n-t+s,height:a-i+s},e.__rect}},e("../tool/util").inherits(i,t),i}),i("zrender/shape/util/dashedLineTo",[],function(){var e=[5,5];return function(t,i,n,a,o,r){if(t.setLineDash)return e[0]=e[1]=r,t.setLineDash(e),t.moveTo(i,n),void t.lineTo(a,o);r="number"!=typeof r?5:r;var s=a-i,l=o-n,h=Math.floor(Math.sqrt(s*s+l*l)/r);s/=h,l/=h;for(var m=!0,V=0;h>V;++V)m?t.moveTo(i,n):t.lineTo(i,n),m=!m,i+=s,n+=l;t.lineTo(a,o)}}),i("zrender/shape/Polygon",["require","./Base","./util/smoothSpline","./util/smoothBezier","./util/dashedLineTo","../tool/util"],function(e){var t=e("./Base"),i=e("./util/smoothSpline"),n=e("./util/smoothBezier"),a=e("./util/dashedLineTo"),o=function(e){t.call(this,e)};return o.prototype={type:"polygon",buildPath:function(e,t){var o=t.pointList;if(!(o.length<2)){if(t.smooth&&"spline"!==t.smooth){var r=n(o,t.smooth,!0,t.smoothConstraint);e.moveTo(o[0][0],o[0][1]);for(var s,l,h,m=o.length,V=0;m>V;V++)s=r[2*V],l=r[2*V+1],h=o[(V+1)%m],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if("spline"===t.smooth&&(o=i(o,!0)),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var U=t._dashLength||(t.lineWidth||1)*("dashed"==t.lineType?5:1);t._dashLength=U,e.moveTo(o[0][0],o[0][1]);for(var V=1,d=o.length;d>V;V++)a(e,o[V-1][0],o[V-1][1],o[V][0],o[V][1],U);a(e,o[o.length-1][0],o[o.length-1][1],o[0][0],o[0][1],U)}}else{e.moveTo(o[0][0],o[0][1]);for(var V=1,d=o.length;d>V;V++)e.lineTo(o[V][0],o[V][1]);e.lineTo(o[0][0],o[0][1])}e.closePath()}},getRect:function(e){if(e.__rect)return e.__rect;for(var t=Number.MAX_VALUE,i=Number.MIN_VALUE,n=Number.MAX_VALUE,a=Number.MIN_VALUE,o=e.pointList,r=0,s=o.length;s>r;r++)o[r][0]<t&&(t=o[r][0]),o[r][0]>i&&(i=o[r][0]),o[r][1]<n&&(n=o[r][1]),o[r][1]>a&&(a=o[r][1]);var l;return l="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(t-l/2),y:Math.round(n-l/2),width:i-t+l,height:a-n+l},e.__rect}},e("../tool/util").inherits(o,t),o}),i("echarts/util/shape/normalIsCover",[],function(){return function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)}}),i("zrender/shape/util/smoothSpline",["require","../../tool/vector"],function(e){function t(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}var i=e("../../tool/vector");return function(e,n){for(var a=e.length,o=[],r=0,s=1;a>s;s++)r+=i.distance(e[s-1],e[s]);var l=r/5;l=a>l?a:l;for(var s=0;l>s;s++){var h,m,V,U=s/(l-1)*(n?a:a-1),d=Math.floor(U),p=U-d,c=e[d%a];n?(h=e[(d-1+a)%a],m=e[(d+1)%a],V=e[(d+2)%a]):(h=e[0===d?d:d-1],m=e[d>a-2?a-1:d+1],V=e[d>a-3?a-1:d+2]);var u=p*p,y=p*u;o.push([t(h[0],c[0],m[0],V[0],p,u,y),t(h[1],c[1],m[1],V[1],p,u,y)])}return o}}),i("zrender/shape/util/smoothBezier",["require","../../tool/vector"],function(e){var t=e("../../tool/vector");return function(e,i,n,a){var o,r,s,l,h=[],m=[],V=[],U=[],d=!!a;if(d){s=[1/0,1/0],l=[-(1/0),-(1/0)];for(var p=0,c=e.length;c>p;p++)t.min(s,s,e[p]),t.max(l,l,e[p]);t.min(s,s,a[0]),t.max(l,l,a[1])}for(var p=0,c=e.length;c>p;p++){var o,r,u=e[p];if(n)o=e[p?p-1:c-1],r=e[(p+1)%c];else{if(0===p||p===c-1){h.push(t.clone(e[p]));continue}o=e[p-1],r=e[p+1]}t.sub(m,r,o),t.scale(m,m,i);var y=t.distance(u,o),g=t.distance(u,r),b=y+g;0!==b&&(y/=b,g/=b),t.scale(V,m,-y),t.scale(U,m,g);var f=t.add([],u,V),k=t.add([],u,U);d&&(t.max(f,f,s),t.min(f,f,l),t.max(k,k,s),t.min(k,k,l)),h.push(f),h.push(k)}return n&&h.push(t.clone(h.shift())),h}}),i("echarts/util/ecQuery",["require","zrender/tool/util"],function(e){function t(e,t){if("undefined"!=typeof e){if(!t)return e;t=t.split(".");for(var i=t.length,n=0;i>n;){if(e=e[t[n]],"undefined"==typeof e)return;n++}return e}}function i(e,i){for(var n,a=0,o=e.length;o>a;a++)if(n=t(e[a],i),"undefined"!=typeof n)return n}function n(e,i){for(var n,o=e.length;o--;){var r=t(e[o],i);"undefined"!=typeof r&&("undefined"==typeof n?n=a.clone(r):a.merge(n,r,!0))}return n}var a=e("zrender/tool/util");return{query:t,deepQuery:i,deepMerge:n}}),i("echarts/util/number",[],function(){function e(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")}function t(t,i){return"string"==typeof t?e(t).match(/%$/)?parseFloat(t)/100*i:parseFloat(t):t}function i(e,i){return[t(i[0],e.getWidth()),t(i[1],e.getHeight())]}function n(e,i){i instanceof Array||(i=[0,i]);var n=Math.min(e.getWidth(),e.getHeight())/2;return[t(i[0],n),t(i[1],n)]}function a(e){return isNaN(e)?"-":(e=(e+"").split("."),e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:""))}function o(e){for(var t=1,i=0;Math.round(e*t)/t!==e;)t*=10,i++;return i}return{parsePercent:t,parseCenter:i,parseRadius:n,addCommas:a,getPrecision:o}}),i("echarts/data/KDTree",["require","./quickSelect"],function(e){function t(e,t){this.left=null,this.right=null,this.axis=e,this.data=t}var i=e("./quickSelect"),n=function(e,t){e.length&&(t||(t=e[0].array.length),this.dimension=t,this.root=this._buildTree(e,0,e.length-1,0),this._stack=[],this._nearstNList=[])};return n.prototype._buildTree=function(e,n,a,o){if(n>a)return null;var r=Math.floor((n+a)/2);r=i(e,n,a,r,function(e,t){return e.array[o]-t.array[o]});var s=e[r],l=new t(o,s);return o=(o+1)%this.dimension,a>n&&(l.left=this._buildTree(e,n,r-1,o),l.right=this._buildTree(e,r+1,a,o)),l},n.prototype.nearest=function(e,t){var i=this.root,n=this._stack,a=0,o=1/0,r=null;for(i.data!==e&&(o=t(i.data,e),r=i),e.array[i.axis]<i.data.array[i.axis]?(i.right&&(n[a++]=i.right),i.left&&(n[a++]=i.left)):(i.left&&(n[a++]=i.left),i.right&&(n[a++]=i.right));a--;){i=n[a];var s=e.array[i.axis]-i.data.array[i.axis],l=0>s,h=!1;s*=s,o>s&&(s=t(i.data,e),o>s&&i.data!==e&&(o=s,r=i),h=!0),l?(h&&i.right&&(n[a++]=i.right),i.left&&(n[a++]=i.left)):(h&&i.left&&(n[a++]=i.left),i.right&&(n[a++]=i.right))}return r.data},n.prototype._addNearest=function(e,t,i){for(var n=this._nearstNList,a=e-1;a>0&&!(t>=n[a-1].dist);a--)n[a].dist=n[a-1].dist,n[a].node=n[a-1].node;n[a].dist=t,n[a].node=i},n.prototype.nearestN=function(e,t,i,n){if(0>=t)return n.length=0,n;for(var a=this.root,o=this._stack,r=0,s=this._nearstNList,l=0;t>l;l++)s[l]||(s[l]={}),s[l].dist=0,s[l].node=null;var h=i(a.data,e),m=0;for(a.data!==e&&(m++,this._addNearest(m,h,a)),e.array[a.axis]<a.data.array[a.axis]?(a.right&&(o[r++]=a.right),a.left&&(o[r++]=a.left)):(a.left&&(o[r++]=a.left),a.right&&(o[r++]=a.right));r--;){a=o[r];var h=e.array[a.axis]-a.data.array[a.axis],V=0>h,U=!1;h*=h,(t>m||h<s[m-1].dist)&&(h=i(a.data,e),(t>m||h<s[m-1].dist)&&a.data!==e&&(t>m&&m++,this._addNearest(m,h,a)),U=!0),V?(U&&a.right&&(o[r++]=a.right),a.left&&(o[r++]=a.left)):(U&&a.left&&(o[r++]=a.left),a.right&&(o[r++]=a.right))}for(var l=0;m>l;l++)n[l]=s[l].node.data;return n.length=m,n},n}),i("echarts/data/quickSelect",["require"],function(){function e(e,t){return e-t}function t(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function i(e,i,n,a,o){for(var r=i;n>i;){var r=Math.round((n+i)/2),s=e[r];t(e,r,n),r=i;for(var l=i;n-1>=l;l++)o(s,e[l])>=0&&(t(e,l,r),r++);if(t(e,n,r),r===a)return r;a>r?i=r+1:n=r-1}return i}function n(t,n,a,o,r){return arguments.length<=3&&(o=n,r=2==arguments.length?e:a,n=0,a=t.length-1),i(t,n,a,o,r)}return n}),i("echarts/component/dataView",["require","./base","../config","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._tDom=document.createElement("div"),this._textArea=document.createElement("textArea"),this._buttonRefresh=document.createElement("button"),this._buttonRefresh.setAttribute("type","button"),this._buttonClose=document.createElement("button"),this._buttonClose.setAttribute("type","button"),this._hasShow=!1,this._zrHeight=n.getHeight(),this._zrWidth=n.getWidth(),this._tDom.className="echarts-dataview",this.hide(),this.dom.firstChild.appendChild(this._tDom),window.addEventListener?(this._tDom.addEventListener("click",this._stop),this._tDom.addEventListener("mousewheel",this._stop),this._tDom.addEventListener("mousemove",this._stop),this._tDom.addEventListener("mousedown",this._stop),this._tDom.addEventListener("mouseup",this._stop),this._tDom.addEventListener("touchstart",this._stop),this._tDom.addEventListener("touchmove",this._stop),this._tDom.addEventListener("touchend",this._stop)):(this._tDom.attachEvent("onclick",this._stop),this._tDom.attachEvent("onmousewheel",this._stop),this._tDom.attachEvent("onmousemove",this._stop),this._tDom.attachEvent("onmousedown",this._stop),this._tDom.attachEvent("onmouseup",this._stop))}var i=e("./base"),n=e("../config"),a=e("zrender/tool/util");return t.prototype={type:n.COMPONENT_TYPE_DATAVIEW,_lang:["Data View","close","refresh"],_gCssText:"position:absolute;display:block;overflow:hidden;transition:height 0.8s,background-color 1s;-moz-transition:height 0.8s,background-color 1s;-webkit-transition:height 0.8s,background-color 1s;-o-transition:height 0.8s,background-color 1s;z-index:1;left:0;top:0;",hide:function(){this._sizeCssText="width:"+this._zrWidth+"px;height:0px;background-color:#f0ffff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText},show:function(e){this._hasShow=!0;var t=this.query(this.option,"toolbox.feature.dataView.lang")||this._lang;this.option=e,this._tDom.innerHTML='<p style="padding:8px 0;margin:0 0 10px 0;border-bottom:1px solid #eee">'+(t[0]||this._lang[0])+"</p>";var i=this.query(this.option,"toolbox.feature.dataView.optionToContent");"function"!=typeof i?this._textArea.value=this._optionToContent():(this._textArea=document.createElement("div"),this._textArea.innerHTML=i(this.option)),this._textArea.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:"+(this._zrHeight-100)+"px;",this._tDom.appendChild(this._textArea),this._buttonClose.style.cssText="float:right;padding:1px 6px;",this._buttonClose.innerHTML=t[1]||this._lang[1];var n=this;this._buttonClose.onclick=function(){n.hide()},this._tDom.appendChild(this._buttonClose),this.query(this.option,"toolbox.feature.dataView.readOnly")===!1?(this._buttonRefresh.style.cssText="float:right;margin-right:10px;padding:1px 6px;",this._buttonRefresh.innerHTML=t[2]||this._lang[2],this._buttonRefresh.onclick=function(){n._save()},this._textArea.readOnly=!1,this._textArea.style.cursor="default"):(this._buttonRefresh.style.cssText="display:none", +this._textArea.readOnly=!0,this._textArea.style.cursor="text"),this._tDom.appendChild(this._buttonRefresh),this._sizeCssText="width:"+this._zrWidth+"px;height:"+this._zrHeight+"px;background-color:#fff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText},_optionToContent:function(){var e,t,i,a,o,r,s=[],l="";if(this.option.xAxis)for(s=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],e=0,a=s.length;a>e;e++)if("category"==(s[e].type||"category")){for(r=[],t=0,i=s[e].data.length;i>t;t++)r.push(this.getDataFromOption(s[e].data[t]));l+=r.join(", ")+"\n\n"}if(this.option.yAxis)for(s=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],e=0,a=s.length;a>e;e++)if("category"==s[e].type){for(r=[],t=0,i=s[e].data.length;i>t;t++)r.push(this.getDataFromOption(s[e].data[t]));l+=r.join(", ")+"\n\n"}var h,m=this.option.series;for(e=0,a=m.length;a>e;e++){for(r=[],t=0,i=m[e].data.length;i>t;t++)o=m[e].data[t],h=m[e].type==n.CHART_TYPE_PIE||m[e].type==n.CHART_TYPE_MAP?(o.name||"-")+":":"",m[e].type==n.CHART_TYPE_SCATTER&&(o=this.getDataFromOption(o).join(", ")),r.push(h+this.getDataFromOption(o));l+=(m[e].name||"-")+" : \n",l+=r.join(m[e].type==n.CHART_TYPE_SCATTER?"\n":", "),l+="\n\n"}return l},_save:function(){var e=this.query(this.option,"toolbox.feature.dataView.contentToOption");if("function"!=typeof e){for(var t=this._textArea.value.split("\n"),i=[],a=0,o=t.length;o>a;a++)t[a]=this._trim(t[a]),""!==t[a]&&i.push(t[a]);this._contentToOption(i)}else e(this._textArea,this.option);this.hide();var r=this;setTimeout(function(){r.messageCenter&&r.messageCenter.dispatch(n.EVENT.DATA_VIEW_CHANGED,null,{option:r.option},r.myChart)},r.canvasSupported?800:100)},_contentToOption:function(e){var t,i,a,o,r,s,l,h=[],m=0;if(this.option.xAxis)for(h=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],t=0,o=h.length;o>t;t++)if("category"==(h[t].type||"category")){for(s=e[m].split(","),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||""),r=h[t].data[i],"undefined"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;m++}if(this.option.yAxis)for(h=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],t=0,o=h.length;o>t;t++)if("category"==h[t].type){for(s=e[m].split(","),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||""),r=h[t].data[i],"undefined"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;m++}var V=this.option.series;for(t=0,o=V.length;o>t;t++)if(m++,V[t].type==n.CHART_TYPE_SCATTER)for(var i=0,a=V[t].data.length;a>i;i++)s=e[m],l=s.replace(" ","").split(","),"undefined"!=typeof V[t].data[i].value?V[t].data[i].value=l:V[t].data[i]=l,m++;else{s=e[m].split(",");for(var i=0,a=V[t].data.length;a>i;i++)l=(s[i]||"").replace(/.*:/,""),l=this._trim(l),l="-"!=l&&""!==l?l-0:"-","undefined"!=typeof V[t].data[i].value?V[t].data[i].value=l:V[t].data[i]=l;m++}},_trim:function(e){var t=new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)","g");return e.replace(t,"")},_stop:function(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},resize:function(){this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._tDom.offsetHeight>10&&(this._sizeCssText="width:"+this._zrWidth+"px;height:"+this._zrHeight+"px;background-color:#fff;",this._tDom.style.cssText=this._gCssText+this._sizeCssText,this._textArea.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:"+(this._zrHeight-100)+"px;")},dispose:function(){window.removeEventListener?(this._tDom.removeEventListener("click",this._stop),this._tDom.removeEventListener("mousewheel",this._stop),this._tDom.removeEventListener("mousemove",this._stop),this._tDom.removeEventListener("mousedown",this._stop),this._tDom.removeEventListener("mouseup",this._stop),this._tDom.removeEventListener("touchstart",this._stop),this._tDom.removeEventListener("touchmove",this._stop),this._tDom.removeEventListener("touchend",this._stop)):(this._tDom.detachEvent("onclick",this._stop),this._tDom.detachEvent("onmousewheel",this._stop),this._tDom.detachEvent("onmousemove",this._stop),this._tDom.detachEvent("onmousedown",this._stop),this._tDom.detachEvent("onmouseup",this._stop)),this._buttonRefresh.onclick=null,this._buttonClose.onclick=null,this._hasShow&&(this._tDom.removeChild(this._textArea),this._tDom.removeChild(this._buttonRefresh),this._tDom.removeChild(this._buttonClose)),this._textArea=null,this._buttonRefresh=null,this._buttonClose=null,this.dom.firstChild.removeChild(this._tDom),this._tDom=null}},a.inherits(t,i),e("../component").define("dataView",t),t}),i("echarts/util/shape/Cross",["require","zrender/shape/Base","zrender/shape/Line","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Line"),a=e("zrender/tool/util");return t.prototype={type:"cross",buildPath:function(e,t){var i=t.rect;t.xStart=i.x,t.xEnd=i.x+i.width,t.yStart=t.yEnd=t.y,n.prototype.buildPath(e,t),t.xStart=t.xEnd=t.x,t.yStart=i.y,t.yEnd=i.y+i.height,n.prototype.buildPath(e,t)},getRect:function(e){return e.rect},isCover:e("./normalIsCover")},a.inherits(t,i),t}),i("zrender/shape/Sector",["require","../tool/math","../tool/computeBoundingBox","../tool/vector","./Base","../tool/util"],function(e){var t=e("../tool/math"),i=e("../tool/computeBoundingBox"),n=e("../tool/vector"),a=e("./Base"),o=n.create(),r=n.create(),s=n.create(),l=n.create(),h=function(e){a.call(this,e)};return h.prototype={type:"sector",buildPath:function(e,i){var n=i.x,a=i.y,o=i.r0||0,r=i.r,s=i.startAngle,l=i.endAngle,h=i.clockWise||!1;s=t.degreeToRadian(s),l=t.degreeToRadian(l),h||(s=-s,l=-l);var m=t.cos(s),V=t.sin(s);e.moveTo(m*o+n,V*o+a),e.lineTo(m*r+n,V*r+a),e.arc(n,a,r,s,l,!h),e.lineTo(t.cos(l)*o+n,t.sin(l)*o+a),0!==o&&e.arc(n,a,o,l,s,h),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var a=e.x,h=e.y,m=e.r0||0,V=e.r,U=t.degreeToRadian(e.startAngle),d=t.degreeToRadian(e.endAngle),p=e.clockWise;return p||(U=-U,d=-d),m>1?i.arc(a,h,m,U,d,!p,o,s):(o[0]=s[0]=a,o[1]=s[1]=h),i.arc(a,h,V,U,d,!p,r,l),n.min(o,o,r),n.max(s,s,l),e.__rect={x:o[0],y:o[1],width:s[0]-o[0],height:s[1]-o[1]},e.__rect}},e("../tool/util").inherits(h,a),h}),i("echarts/util/shape/Candle",["require","zrender/shape/Base","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/tool/util");return t.prototype={type:"candle",_numberOrder:function(e,t){return t-e},buildPath:function(e,t){var i=n.clone(t.y).sort(this._numberOrder);e.moveTo(t.x,i[3]),e.lineTo(t.x,i[2]),e.moveTo(t.x-t.width/2,i[2]),e.rect(t.x-t.width/2,i[2],t.width,i[1]-i[2]),e.moveTo(t.x,i[1]),e.lineTo(t.x,i[0])},getRect:function(e){if(!e.__rect){var t=0;("stroke"==e.brushType||"fill"==e.brushType)&&(t=e.lineWidth||1);var i=n.clone(e.y).sort(this._numberOrder);e.__rect={x:Math.round(e.x-e.width/2-t/2),y:Math.round(i[3]-t/2),width:e.width+t,height:i[0]-i[3]+t}}return e.__rect},isCover:e("./normalIsCover")},n.inherits(t,i),t}),i("zrender/tool/computeBoundingBox",["require","./vector","./curve"],function(e){function t(e,t,i){if(0!==e.length){for(var n=e[0][0],a=e[0][0],o=e[0][1],r=e[0][1],s=1;s<e.length;s++){var l=e[s];l[0]<n&&(n=l[0]),l[0]>a&&(a=l[0]),l[1]<o&&(o=l[1]),l[1]>r&&(r=l[1])}t[0]=n,t[1]=o,i[0]=a,i[1]=r}}function i(e,t,i,n,a,r){var s=[];o.cubicExtrema(e[0],t[0],i[0],n[0],s);for(var l=0;l<s.length;l++)s[l]=o.cubicAt(e[0],t[0],i[0],n[0],s[l]);var h=[];o.cubicExtrema(e[1],t[1],i[1],n[1],h);for(var l=0;l<h.length;l++)h[l]=o.cubicAt(e[1],t[1],i[1],n[1],h[l]);s.push(e[0],n[0]),h.push(e[1],n[1]);var m=Math.min.apply(null,s),V=Math.max.apply(null,s),U=Math.min.apply(null,h),d=Math.max.apply(null,h);a[0]=m,a[1]=U,r[0]=V,r[1]=d}function n(e,t,i,n,a){var r=o.quadraticExtremum(e[0],t[0],i[0]),s=o.quadraticExtremum(e[1],t[1],i[1]);r=Math.max(Math.min(r,1),0),s=Math.max(Math.min(s,1),0);var l=1-r,h=1-s,m=l*l*e[0]+2*l*r*t[0]+r*r*i[0],V=l*l*e[1]+2*l*r*t[1]+r*r*i[1],U=h*h*e[0]+2*h*s*t[0]+s*s*i[0],d=h*h*e[1]+2*h*s*t[1]+s*s*i[1];n[0]=Math.min(e[0],i[0],m,U),n[1]=Math.min(e[1],i[1],V,d),a[0]=Math.max(e[0],i[0],m,U),a[1]=Math.max(e[1],i[1],V,d)}var a=e("./vector"),o=e("./curve"),r=a.create(),s=a.create(),l=a.create(),h=function(e,t,i,n,o,h,m,V){if(Math.abs(n-o)>=2*Math.PI)return m[0]=e-i,m[1]=t-i,V[0]=e+i,void(V[1]=t+i);if(r[0]=Math.cos(n)*i+e,r[1]=Math.sin(n)*i+t,s[0]=Math.cos(o)*i+e,s[1]=Math.sin(o)*i+t,a.min(m,r,s),a.max(V,r,s),n%=2*Math.PI,0>n&&(n+=2*Math.PI),o%=2*Math.PI,0>o&&(o+=2*Math.PI),n>o&&!h?o+=2*Math.PI:o>n&&h&&(n+=2*Math.PI),h){var U=o;o=n,n=U}for(var d=0;o>d;d+=Math.PI/2)d>n&&(l[0]=Math.cos(d)*i+e,l[1]=Math.sin(d)*i+t,a.min(m,l,m),a.max(V,l,V))};return t.cubeBezier=i,t.quadraticBezier=n,t.arc=h,t}),i("echarts/util/shape/Chain",["require","zrender/shape/Base","./Icon","zrender/shape/util/dashedLineTo","zrender/tool/util","zrender/tool/matrix"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("./Icon"),a=e("zrender/shape/util/dashedLineTo"),o=e("zrender/tool/util"),r=e("zrender/tool/matrix");return t.prototype={type:"chain",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildLinePath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i),e.restore()},buildLinePath:function(e,t){var i=t.x,n=t.y+5,o=t.width,r=t.height/2-10;if(e.moveTo(i,n),e.lineTo(i,n+r),e.moveTo(i+o,n),e.lineTo(i+o,n+r),e.moveTo(i,n+r/2),t.lineType&&"solid"!=t.lineType){if("dashed"==t.lineType||"dotted"==t.lineType){var s=(t.lineWidth||1)*("dashed"==t.lineType?5:1);a(e,i,n+r/2,i+o,n+r/2,s)}}else e.lineTo(i+o,n+r/2)},brushSymbol:function(e,t){var i=t.y+t.height/4;e.save();for(var a,o=t.chainPoint,r=0,s=o.length;s>r;r++){if(a=o[r],"none"!=a.symbol){e.beginPath();var l=a.symbolSize;n.prototype.buildPath(e,{iconType:a.symbol,x:a.x-l,y:i-l,width:2*l,height:2*l,n:a.n}),e.fillStyle=a.isEmpty?"#fff":t.strokeColor,e.closePath(),e.fill(),e.stroke()}a.showLabel&&(e.font=a.textFont,e.fillStyle=a.textColor,e.textAlign=a.textAlign,e.textBaseline=a.textBaseline,a.rotation?(e.save(),this._updateTextTransform(e,a.rotation),e.fillText(a.name,a.textX,a.textY),e.restore()):e.fillText(a.name,a.textX,a.textY))}e.restore()},_updateTextTransform:function(e,t){var i=r.create();if(r.identity(i),0!==t[0]){var n=t[1]||0,a=t[2]||0;(n||a)&&r.translate(i,i,[-n,-a]),r.rotate(i,i,t[0]),(n||a)&&r.translate(i,i,[n,a])}e.transform.apply(e,i)},isCover:function(e,t){var i=this.style;return e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height?!0:!1}},o.inherits(t,i),t}),i("zrender/shape/Ring",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"ring",buildPath:function(e,t){e.arc(t.x,t.y,t.r,0,2*Math.PI,!1),e.moveTo(t.x+t.r0,t.y),e.arc(t.x,t.y,t.r0,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("echarts/component/axis",["require","./base","zrender/shape/Line","../config","../util/ecData","zrender/tool/util","zrender/tool/color","./categoryAxis","./valueAxis","../component"],function(e){function t(e,t,n,a,o,r){i.call(this,e,t,n,a,o),this.axisType=r,this._axisList=[],this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Line"),a=e("../config"),o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.COMPONENT_TYPE_AXIS,axisBase:{_buildAxisLine:function(){var e=this.option.axisLine.lineStyle.width,t=e/2,i={_axisShape:"axisLine",zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1},a=this.grid;switch(this.option.position){case"left":i.style={xStart:a.getX()-t,yStart:a.getYend(),xEnd:a.getX()-t,yEnd:a.getY(),lineCap:"round"};break;case"right":i.style={xStart:a.getXend()+t,yStart:a.getYend(),xEnd:a.getXend()+t,yEnd:a.getY(),lineCap:"round"};break;case"bottom":i.style={xStart:a.getX(),yStart:a.getYend()+t,xEnd:a.getXend(),yEnd:a.getYend()+t,lineCap:"round"};break;case"top":i.style={xStart:a.getX(),yStart:a.getY()-t,xEnd:a.getXend(),yEnd:a.getY()-t,lineCap:"round"}}var o=i.style;""!==this.option.name&&(o.text=this.option.name,o.textPosition=this.option.nameLocation,o.textFont=this.getFont(this.option.nameTextStyle),this.option.nameTextStyle.align&&(o.textAlign=this.option.nameTextStyle.align),this.option.nameTextStyle.baseline&&(o.textBaseline=this.option.nameTextStyle.baseline),this.option.nameTextStyle.color&&(o.textColor=this.option.nameTextStyle.color)),o.strokeColor=this.option.axisLine.lineStyle.color,o.lineWidth=e,this.isHorizontal()?o.yStart=o.yEnd=this.subPixelOptimize(o.yEnd,e):o.xStart=o.xEnd=this.subPixelOptimize(o.xEnd,e),o.lineType=this.option.axisLine.lineStyle.type,i=new n(i),this.shapeList.push(i)},_axisLabelClickable:function(e,t){return e?(o.pack(t,void 0,-1,void 0,-1,t.style.text),t.hoverable=!0,t.clickable=!0,t.highlightStyle={color:s.lift(t.style.color,1),brushType:"fill"},t):t},refixAxisShape:function(e,t){if(this.option.axisLine.onZero){var i;if(this.isHorizontal()&&null!=t)for(var n=0,a=this.shapeList.length;a>n;n++)"axisLine"===this.shapeList[n]._axisShape?(this.shapeList[n].style.yStart=this.shapeList[n].style.yEnd=this.subPixelOptimize(t,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):"axisTick"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.yEnd-this.shapeList[n].style.yStart,this.shapeList[n].style.yStart=t-i,this.shapeList[n].style.yEnd=t,this.zr.modShape(this.shapeList[n].id));if(!this.isHorizontal()&&null!=e)for(var n=0,a=this.shapeList.length;a>n;n++)"axisLine"===this.shapeList[n]._axisShape?(this.shapeList[n].style.xStart=this.shapeList[n].style.xEnd=this.subPixelOptimize(e,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):"axisTick"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.xEnd-this.shapeList[n].style.xStart,this.shapeList[n].style.xStart=e,this.shapeList[n].style.xEnd=e+i,this.zr.modShape(this.shapeList[n].id))}},getPosition:function(){return this.option.position},isHorizontal:function(){return"bottom"===this.option.position||"top"===this.option.position}},reformOption:function(e){if(!e||e instanceof Array&&0===e.length?e=[{type:a.COMPONENT_TYPE_AXIS_VALUE}]:e instanceof Array||(e=[e]),e.length>2&&(e=[e[0],e[1]]),"xAxis"===this.axisType){(!e[0].position||"bottom"!=e[0].position&&"top"!=e[0].position)&&(e[0].position="bottom"),e.length>1&&(e[1].position="bottom"===e[0].position?"top":"bottom");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||"category",e[t].xAxisIndex=t,e[t].yAxisIndex=-1}else{(!e[0].position||"left"!=e[0].position&&"right"!=e[0].position)&&(e[0].position="left"),e.length>1&&(e[1].position="left"===e[0].position?"right":"left");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||"value",e[t].xAxisIndex=-1,e[t].yAxisIndex=t}return e},refresh:function(t){var i;t&&(this.option=t,"xAxis"===this.axisType?(this.option.xAxis=this.reformOption(t.xAxis),i=this.option.xAxis):(this.option.yAxis=this.reformOption(t.yAxis),i=this.option.yAxis),this.series=t.series);for(var n=e("./categoryAxis"),a=e("./valueAxis"),o=Math.max(i&&i.length||0,this._axisList.length),r=0;o>r;r++)!this._axisList[r]||!t||i[r]&&this._axisList[r].type==i[r].type||(this._axisList[r].dispose&&this._axisList[r].dispose(),this._axisList[r]=!1),this._axisList[r]?this._axisList[r].refresh&&this._axisList[r].refresh(i?i[r]:!1,this.series):i&&i[r]&&(this._axisList[r]="category"===i[r].type?new n(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase):new a(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase,this.series))},getAxis:function(e){return this._axisList[e]},getAxisCount:function(){return this._axisList.length},clear:function(){for(var e=0,t=this._axisList.length;t>e;e++)this._axisList[e].dispose&&this._axisList[e].dispose();this._axisList=[]}},r.inherits(t,i),e("../component").define("axis",t),t}),i("echarts/component/grid",["require","./base","zrender/shape/Rectangle","../config","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("../config");a.grid={zlevel:0,z:0,x:80,y:60,x2:80,y2:60,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"};var o=e("zrender/tool/util");return t.prototype={type:a.COMPONENT_TYPE_GRID,getX:function(){return this._x},getY:function(){return this._y},getWidth:function(){return this._width},getHeight:function(){return this._height},getXend:function(){return this._x+this._width},getYend:function(){return this._y+this._height},getArea:function(){return{x:this._x,y:this._y,width:this._width,height:this._height}},getBbox:function(){return[[this._x,this._y],[this.getXend(),this.getYend()]]},refixAxisShape:function(e){for(var t,i,n,o=e.xAxis._axisList.concat(e.yAxis?e.yAxis._axisList:[]),r=o.length;r--;)n=o[r],n.type==a.COMPONENT_TYPE_AXIS_VALUE&&n._min<0&&n._max>=0&&(n.isHorizontal()?t=n.getCoord(0):i=n.getCoord(0));if("undefined"!=typeof t||"undefined"!=typeof i)for(r=o.length;r--;)o[r].refixAxisShape(t,i)},refresh:function(e){if(e||this._zrWidth!=this.zr.getWidth()||this._zrHeight!=this.zr.getHeight()){this.clear(),this.option=e||this.option,this.option.grid=this.reformOption(this.option.grid);var t=this.option.grid;this._zrWidth=this.zr.getWidth(),this._zrHeight=this.zr.getHeight(),this._x=this.parsePercent(t.x,this._zrWidth),this._y=this.parsePercent(t.y,this._zrHeight);var i=this.parsePercent(t.x2,this._zrWidth),a=this.parsePercent(t.y2,this._zrHeight);this._width="undefined"==typeof t.width?this._zrWidth-this._x-i:this.parsePercent(t.width,this._zrWidth),this._width=this._width<=0?10:this._width,this._height="undefined"==typeof t.height?this._zrHeight-this._y-a:this.parsePercent(t.height,this._zrHeight),this._height=this._height<=0?10:this._height,this._x=this.subPixelOptimize(this._x,t.borderWidth),this._y=this.subPixelOptimize(this._y,t.borderWidth),this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._x,y:this._y,width:this._width,height:this._height,brushType:t.borderWidth>0?"both":"fill",color:t.backgroundColor,strokeColor:t.borderColor,lineWidth:t.borderWidth}})),this.zr.addShape(this.shapeList[0])}}},o.inherits(t,i),e("../component").define("grid",t),t}),i("echarts/component/dataZoom",["require","./base","zrender/shape/Rectangle","zrender/shape/Polygon","../util/shape/Icon","../config","../util/date","zrender/tool/util","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},this._fillerSize=30,this._isSilence=!1,this._zoom={},this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this._handleSize=this.zoomOption.handleSize,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom.show&&this._buildShape(),this._syncData()}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("zrender/shape/Polygon"),o=e("../util/shape/Icon"),r=e("../config");r.dataZoom={zlevel:0,z:4,show:!1,orient:"horizontal",backgroundColor:"rgba(0,0,0,0)",dataBackgroundColor:"#eee",fillerColor:"rgba(144,197,237,0.2)",handleColor:"rgba(70,130,180,0.8)",handleSize:8,showDetail:!0,realtime:!0};var s=e("../util/date"),l=e("zrender/tool/util");return t.prototype={type:r.COMPONENT_TYPE_DATAZOOM,_buildShape:function(){this._buildBackground(),this._buildFiller(),this._buildHandle(),this._buildFrame();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e]);this._syncFrameShape()},_getLocation:function(){var e,t,i,n,a=this.component.grid;return"horizontal"==this.zoomOption.orient?(i=this.zoomOption.width||a.getWidth(),n=this.zoomOption.height||this._fillerSize,e=null!=this.zoomOption.x?this.zoomOption.x:a.getX(),t=null!=this.zoomOption.y?this.zoomOption.y:this.zr.getHeight()-n-2):(i=this.zoomOption.width||this._fillerSize,n=this.zoomOption.height||a.getHeight(),e=null!=this.zoomOption.x?this.zoomOption.x:2,t=null!=this.zoomOption.y?this.zoomOption.y:a.getY()),{x:e,y:t,width:i,height:n}},_getZoom:function(){var e=this.option.series,t=this.option.xAxis;!t||t instanceof Array||(t=[t],this.option.xAxis=t);var i=this.option.yAxis;!i||i instanceof Array||(i=[i],this.option.yAxis=i);var n,a,o=[],s=this.zoomOption.xAxisIndex;if(t&&null==s){n=[];for(var l=0,h=t.length;h>l;l++)("category"==t[l].type||null==t[l].type)&&n.push(l)}else n=s instanceof Array?s:null!=s?[s]:[];if(s=this.zoomOption.yAxisIndex,i&&null==s){a=[];for(var l=0,h=i.length;h>l;l++)"category"==i[l].type&&a.push(l)}else a=s instanceof Array?s:null!=s?[s]:[];for(var m,l=0,h=e.length;h>l;l++)if(m=e[l],m.type==r.CHART_TYPE_LINE||m.type==r.CHART_TYPE_BAR||m.type==r.CHART_TYPE_SCATTER||m.type==r.CHART_TYPE_K){for(var V=0,U=n.length;U>V;V++)if(n[V]==(m.xAxisIndex||0)){o.push(l);break}for(var V=0,U=a.length;U>V;V++)if(a[V]==(m.yAxisIndex||0)){o.push(l);break}null==this.zoomOption.xAxisIndex&&null==this.zoomOption.yAxisIndex&&m.data&&this.getDataFromOption(m.data[0])instanceof Array&&(m.type==r.CHART_TYPE_SCATTER||m.type==r.CHART_TYPE_LINE||m.type==r.CHART_TYPE_BAR)&&o.push(l)}var d=null!=this._zoom.start?this._zoom.start:null!=this.zoomOption.start?this.zoomOption.start:0,p=null!=this._zoom.end?this._zoom.end:null!=this.zoomOption.end?this.zoomOption.end:100;d>p&&(d+=p,p=d-p,d-=p);var c=Math.round((p-d)/100*("horizontal"==this.zoomOption.orient?this._location.width:this._location.height));return{start:d,end:p,start2:0,end2:100,size:c,xAxisIndex:n,yAxisIndex:a,seriesIndex:o,scatterMap:this._zoom.scatterMap||{}}},_backupData:function(){this._originalData={xAxis:{},yAxis:{},series:{}};for(var e=this.option.xAxis,t=this._zoom.xAxisIndex,i=0,n=t.length;n>i;i++)this._originalData.xAxis[t[i]]=e[t[i]].data;for(var a=this.option.yAxis,o=this._zoom.yAxisIndex,i=0,n=o.length;n>i;i++)this._originalData.yAxis[o[i]]=a[o[i]].data;for(var s,l=this.option.series,h=this._zoom.seriesIndex,i=0,n=h.length;n>i;i++)s=l[h[i]],this._originalData.series[h[i]]=s.data,s.data&&this.getDataFromOption(s.data[0])instanceof Array&&(s.type==r.CHART_TYPE_SCATTER||s.type==r.CHART_TYPE_LINE||s.type==r.CHART_TYPE_BAR)&&(this._backupScale(),this._calculScatterMap(h[i]))},_calculScatterMap:function(t){this._zoom.scatterMap=this._zoom.scatterMap||{},this._zoom.scatterMap[t]=this._zoom.scatterMap[t]||{};var i=e("../component"),n=i.get("axis"),a=l.clone(this.option.xAxis);"category"==a[0].type&&(a[0].type="value"),a[1]&&"category"==a[1].type&&(a[1].type="value");var o=new n(this.ecTheme,null,!1,{xAxis:a,series:this.option.series},this,"xAxis"),r=this.option.series[t].xAxisIndex||0;this._zoom.scatterMap[t].x=o.getAxis(r).getExtremum(),o.dispose(),a=l.clone(this.option.yAxis),"category"==a[0].type&&(a[0].type="value"),a[1]&&"category"==a[1].type&&(a[1].type="value"),o=new n(this.ecTheme,null,!1,{yAxis:a,series:this.option.series},this,"yAxis"),r=this.option.series[t].yAxisIndex||0,this._zoom.scatterMap[t].y=o.getAxis(r).getExtremum(),o.dispose()},_buildBackground:function(){var e=this._location.width,t=this._location.height;this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._location.x,y:this._location.y,width:e,height:t,color:this.zoomOption.backgroundColor}}));for(var i=0,o=this._originalData.xAxis,s=this._zoom.xAxisIndex,l=0,h=s.length;h>l;l++)i=Math.max(i,o[s[l]].length);for(var m=this._originalData.yAxis,V=this._zoom.yAxisIndex,l=0,h=V.length;h>l;l++)i=Math.max(i,m[V[l]].length);for(var U,d=this._zoom.seriesIndex[0],p=this._originalData.series[d],c=Number.MIN_VALUE,u=Number.MAX_VALUE,l=0,h=p.length;h>l;l++)U=this.getDataFromOption(p[l],0),this.option.series[d].type==r.CHART_TYPE_K&&(U=U[1]),isNaN(U)&&(U=0),c=Math.max(c,U),u=Math.min(u,U);var y=c-u,g=[],b=e/(i-(i>1?1:0)),f=t/(i-(i>1?1:0)),k=1;"horizontal"==this.zoomOption.orient&&1>b?k=Math.floor(3*i/e):"vertical"==this.zoomOption.orient&&1>f&&(k=Math.floor(3*i/t));for(var l=0,h=i;h>l;l+=k)U=this.getDataFromOption(p[l],0),this.option.series[d].type==r.CHART_TYPE_K&&(U=U[1]),isNaN(U)&&(U=0),g.push("horizontal"==this.zoomOption.orient?[this._location.x+b*l,this._location.y+t-1-Math.round((U-u)/y*(t-10))]:[this._location.x+1+Math.round((U-u)/y*(e-10)),this._location.y+f*(h-l-1)]);"horizontal"==this.zoomOption.orient?(g.push([this._location.x+e,this._location.y+t]),g.push([this._location.x,this._location.y+t])):(g.push([this._location.x,this._location.y]),g.push([this._location.x,this._location.y+t])),this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:g,color:this.zoomOption.dataBackgroundColor},hoverable:!1}))},_buildFiller:function(){this._fillerShae={zlevel:this.getZlevelBase(),z:this.getZBase(),draggable:!0,ondrift:this._ondrift,ondragend:this._ondragend,_type:"filler"},this._fillerShae.style="horizontal"==this.zoomOption.orient?{x:this._location.x+Math.round(this._zoom.start/100*this._location.width)+this._handleSize,y:this._location.y,width:this._zoom.size-2*this._handleSize,height:this._location.height,color:this.zoomOption.fillerColor,text:":::",textPosition:"inside"}:{x:this._location.x,y:this._location.y+Math.round(this._zoom.start/100*this._location.height)+this._handleSize,width:this._location.width,height:this._zoom.size-2*this._handleSize,color:this.zoomOption.fillerColor,text:"::",textPosition:"inside"},this._fillerShae.highlightStyle={brushType:"fill",color:"rgba(0,0,0,0)"},this._fillerShae=new n(this._fillerShae),this.shapeList.push(this._fillerShae)},_buildHandle:function(){var e=this.zoomOption.showDetail?this._getDetail():{start:"",end:""};this._startShape={zlevel:this.getZlevelBase(),z:this.getZBase(),draggable:!0,style:{iconType:"rectangle",x:this._location.x,y:this._location.y,width:this._handleSize,height:this._handleSize,color:this.zoomOption.handleColor,text:"=",textPosition:"inside"},highlightStyle:{text:e.start,brushType:"fill",textPosition:"left"},ondrift:this._ondrift,ondragend:this._ondragend},"horizontal"==this.zoomOption.orient?(this._startShape.style.height=this._location.height,this._endShape=l.clone(this._startShape),this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endShape.highlightStyle.text=e.end,this._endShape.highlightStyle.textPosition="right"):(this._startShape.style.width=this._location.width,this._endShape=l.clone(this._startShape),this._startShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._startShape.highlightStyle.textPosition="bottom",this._endShape.style.y=this._fillerShae.style.y-this._handleSize,this._endShape.highlightStyle.text=e.end,this._endShape.highlightStyle.textPosition="top"),this._startShape=new o(this._startShape),this._endShape=new o(this._endShape),this.shapeList.push(this._startShape),this.shapeList.push(this._endShape)},_buildFrame:function(){var e=this.subPixelOptimize(this._location.x,1),t=this.subPixelOptimize(this._location.y,1);this._startFrameShape={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:e,y:t,width:this._location.width-(e>this._location.x?1:0),height:this._location.height-(t>this._location.y?1:0),lineWidth:1,brushType:"stroke",strokeColor:this.zoomOption.handleColor}},this._endFrameShape=l.clone(this._startFrameShape),this._startFrameShape=new n(this._startFrameShape),this._endFrameShape=new n(this._endFrameShape),this.shapeList.push(this._startFrameShape),this.shapeList.push(this._endFrameShape)},_syncHandleShape:function(){"horizontal"==this.zoomOption.orient?(this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._zoom.start=(this._startShape.style.x-this._location.x)/this._location.width*100,this._zoom.end=(this._endShape.style.x+this._handleSize-this._location.x)/this._location.width*100):(this._startShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._endShape.style.y=this._fillerShae.style.y-this._handleSize,this._zoom.start=(this._location.y+this._location.height-this._startShape.style.y)/this._location.height*100,this._zoom.end=(this._location.y+this._location.height-this._endShape.style.y-this._handleSize)/this._location.height*100),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this._syncFrameShape(),this.zr.refreshNextFrame()},_syncFillerShape:function(){var e,t;"horizontal"==this.zoomOption.orient?(e=this._startShape.style.x,t=this._endShape.style.x,this._fillerShae.style.x=Math.min(e,t)+this._handleSize,this._fillerShae.style.width=Math.abs(e-t)-this._handleSize,this._zoom.start=(Math.min(e,t)-this._location.x)/this._location.width*100,this._zoom.end=(Math.max(e,t)+this._handleSize-this._location.x)/this._location.width*100):(e=this._startShape.style.y,t=this._endShape.style.y,this._fillerShae.style.y=Math.min(e,t)+this._handleSize,this._fillerShae.style.height=Math.abs(e-t)-this._handleSize,this._zoom.start=(this._location.y+this._location.height-Math.max(e,t))/this._location.height*100,this._zoom.end=(this._location.y+this._location.height-Math.min(e,t)-this._handleSize)/this._location.height*100),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refreshNextFrame()},_syncFrameShape:function(){"horizontal"==this.zoomOption.orient?(this._startFrameShape.style.width=this._fillerShae.style.x-this._location.x,this._endFrameShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endFrameShape.style.width=this._location.x+this._location.width-this._endFrameShape.style.x):(this._startFrameShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._startFrameShape.style.height=this._location.y+this._location.height-this._startFrameShape.style.y,this._endFrameShape.style.height=this._fillerShae.style.y-this._location.y),this.zr.modShape(this._startFrameShape.id),this.zr.modShape(this._endFrameShape.id)},_syncShape:function(){this.zoomOption.show&&("horizontal"==this.zoomOption.orient?(this._startShape.style.x=this._location.x+this._zoom.start/100*this._location.width,this._endShape.style.x=this._location.x+this._zoom.end/100*this._location.width-this._handleSize,this._fillerShae.style.x=this._startShape.style.x+this._handleSize,this._fillerShae.style.width=this._endShape.style.x-this._startShape.style.x-this._handleSize):(this._startShape.style.y=this._location.y+this._location.height-this._zoom.start/100*this._location.height,this._endShape.style.y=this._location.y+this._location.height-this._zoom.end/100*this._location.height-this._handleSize,this._fillerShae.style.y=this._endShape.style.y+this._handleSize,this._fillerShae.style.height=this._startShape.style.y-this._endShape.style.y-this._handleSize),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refresh())},_syncData:function(e){var t,i,n,a,o;for(var s in this._originalData){t=this._originalData[s];for(var l in t)o=t[l],null!=o&&(a=o.length,i=Math.floor(this._zoom.start/100*a),n=Math.ceil(this._zoom.end/100*a),this.getDataFromOption(o[0])instanceof Array&&this.option[s][l].type!=r.CHART_TYPE_K?(this._setScale(),this.option[s][l].data=this._synScatterData(l,o)):this.option[s][l].data=o.slice(i,n))}this._isSilence||!this.zoomOption.realtime&&!e||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart)},_synScatterData:function(e,t){if(0===this._zoom.start&&100==this._zoom.end&&0===this._zoom.start2&&100==this._zoom.end2)return t;var i,n,a,o,r,s=[],l=this._zoom.scatterMap[e]; + +"horizontal"==this.zoomOption.orient?(i=l.x.max-l.x.min,n=this._zoom.start/100*i+l.x.min,a=this._zoom.end/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start2/100*i+l.y.min,r=this._zoom.end2/100*i+l.y.min):(i=l.x.max-l.x.min,n=this._zoom.start2/100*i+l.x.min,a=this._zoom.end2/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start/100*i+l.y.min,r=this._zoom.end/100*i+l.y.min);var h;(h=l.x.dataMappingMethods)&&(n=h.coord2Value(n),a=h.coord2Value(a)),(h=l.y.dataMappingMethods)&&(o=h.coord2Value(o),r=h.coord2Value(r));for(var m,V=0,U=t.length;U>V;V++)m=t[V].value||t[V],m[0]>=n&&m[0]<=a&&m[1]>=o&&m[1]<=r&&s.push(t[V]);return s},_setScale:function(){var e=0!==this._zoom.start||100!==this._zoom.end||0!==this._zoom.start2||100!==this._zoom.end2,t={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var i in t)for(var n=0,a=t[i].length;a>n;n++)t[i][n].scale=e||t[i][n]._scale},_backupScale:function(){var e={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var t in e)for(var i=0,n=e[t].length;n>i;i++)e[t][i]._scale=e[t][i].scale},_getDetail:function(){for(var e=["xAxis","yAxis"],t=0,i=e.length;i>t;t++){var n=this._originalData[e[t]];for(var a in n){var o=n[a];if(null!=o){var r=o.length,l=Math.floor(this._zoom.start/100*r),h=Math.ceil(this._zoom.end/100*r);return h-=h>0?1:0,{start:this.getDataFromOption(o[l]),end:this.getDataFromOption(o[h])}}}}e="horizontal"==this.zoomOption.orient?"xAxis":"yAxis";var m=this._zoom.seriesIndex[0],V=this.option.series[m][e+"Index"]||0,U=this.option[e][V].type,d=this._zoom.scatterMap[m][e.charAt(0)].min,p=this._zoom.scatterMap[m][e.charAt(0)].max,c=p-d;if("value"==U)return{start:d+c*this._zoom.start/100,end:d+c*this._zoom.end/100};if("time"==U){p=d+c*this._zoom.end/100,d+=c*this._zoom.start/100;var u=s.getAutoFormatter(d,p).formatter;return{start:s.format(u,d),end:s.format(u,p)}}return{start:"",end:""}},__ondrift:function(e,t,i){this.zoomOption.zoomLock&&(e=this._fillerShae);var n="filler"==e._type?this._handleSize:0;if("horizontal"==this.zoomOption.orient?e.style.x+t-n<=this._location.x?e.style.x=this._location.x+n:e.style.x+t+e.style.width+n>=this._location.x+this._location.width?e.style.x=this._location.x+this._location.width-e.style.width-n:e.style.x+=t:e.style.y+i-n<=this._location.y?e.style.y=this._location.y+n:e.style.y+i+e.style.height+n>=this._location.y+this._location.height?e.style.y=this._location.y+this._location.height-e.style.height-n:e.style.y+=i,"filler"==e._type?this._syncHandleShape():this._syncFillerShape(),this.zoomOption.realtime&&this._syncData(),this.zoomOption.showDetail){var a=this._getDetail();this._startShape.style.text=this._startShape.highlightStyle.text=a.start,this._endShape.style.text=this._endShape.highlightStyle.text=a.end,this._startShape.style.textPosition=this._startShape.highlightStyle.textPosition,this._endShape.style.textPosition=this._endShape.highlightStyle.textPosition}return!0},__ondragend:function(){this.zoomOption.showDetail&&(this._startShape.style.text=this._endShape.style.text="=",this._startShape.style.textPosition=this._endShape.style.textPosition="inside",this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.refreshNextFrame()),this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.zoomOption.realtime&&this._syncData(),t.dragOut=!0,t.dragIn=!0,this._isSilence||this.zoomOption.realtime||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart),t.needRefresh=!1,this.isDragend=!1)},ondataZoom:function(e,t){t.needRefresh=!0},absoluteZoom:function(e){this._zoom.start=e.start,this._zoom.end=e.end,this._zoom.start2=e.start2,this._zoom.end2=e.end2,this._syncShape(),this._syncData(!0)},rectZoom:function(e){if(!e)return this._zoom.start=this._zoom.start2=0,this._zoom.end=this._zoom.end2=100,this._syncShape(),this._syncData(!0),this._zoom;var t=this.component.grid.getArea(),i={x:e.x,y:e.y,width:e.width,height:e.height};if(i.width<0&&(i.x+=i.width,i.width=-i.width),i.height<0&&(i.y+=i.height,i.height=-i.height),i.x>t.x+t.width||i.y>t.y+t.height)return!1;i.x<t.x&&(i.x=t.x),i.x+i.width>t.x+t.width&&(i.width=t.x+t.width-i.x),i.y+i.height>t.y+t.height&&(i.height=t.y+t.height-i.y);var n,a=(i.x-t.x)/t.width,o=1-(i.x+i.width-t.x)/t.width,r=1-(i.y+i.height-t.y)/t.height,s=(i.y-t.y)/t.height;return"horizontal"==this.zoomOption.orient?(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*a,this._zoom.end-=n*o,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*r,this._zoom.end2-=n*s):(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*r,this._zoom.end-=n*s,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*a,this._zoom.end2-=n*o),this._syncShape(),this._syncData(!0),this._zoom},syncBackupData:function(e){for(var t,i,n=this._originalData.series,a=e.series,o=0,r=a.length;r>o;o++){i=a[o].data||a[o].eventList,t=n[o]?Math.floor(this._zoom.start/100*n[o].length):0;for(var s=0,l=i.length;l>s;s++)n[o]&&(n[o][s+t]=i[s])}},syncOption:function(e){this.silence(!0),this.option=e,this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom&&this.option.dataZoom.show&&this._buildShape(),this._syncData(),this.silence(!1)},silence:function(e){this._isSilence=e},getRealDataIndex:function(e,t){if(!this._originalData||0===this._zoom.start&&100==this._zoom.end)return t;var i=this._originalData.series;return i[e]?Math.floor(this._zoom.start/100*i[e].length)+t:-1},resize:function(){this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this.option.dataZoom.show&&this._buildShape()}},l.inherits(t,i),e("../component").define("dataZoom",t),t}),i("echarts/component/categoryAxis",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","../config","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(e,t,n,a,o,r){if(a.data.length<1)return void console.error("option.data.length < 1.");i.call(this,e,t,n,a,o),this.grid=this.component.grid;for(var s in r)this[s]=r[s];this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=e("../config");r.categoryAxis={zlevel:0,z:0,show:!0,position:"bottom",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:!0,axisLine:{show:!0,onZero:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!0,interval:"auto",inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,interval:"auto",rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}};var s=e("zrender/tool/util"),l=e("zrender/tool/area");return t.prototype={type:r.COMPONENT_TYPE_AXIS_CATEGORY,_getReformedLabel:function(e){var t=this.getDataFromOption(this.option.data[e]),i=this.option.data[e].formatter||this.option.axisLabel.formatter;return i&&("function"==typeof i?t=i.call(this.myChart,t):"string"==typeof i&&(t=i.replace("{value}",t))),t},_getInterval:function(){var e=this.option.axisLabel.interval;if("auto"==e){var t=this.option.axisLabel.textStyle.fontSize,i=this.option.data,n=this.option.data.length;if(this.isHorizontal())if(n>3){var a,o,r=this.getGap(),h=!1,m=Math.floor(.5/r);for(m=1>m?1:m,e=Math.floor(15/r);!h&&n>e;){e+=m,h=!0,a=Math.floor(r*e);for(var V=Math.floor((n-1)/e)*e;V>=0;V-=e){if(0!==this.option.axisLabel.rotate)o=t;else if(i[V].textStyle)o=l.getTextWidth(this._getReformedLabel(V),this.getFont(s.merge(i[V].textStyle,this.option.axisLabel.textStyle)));else{var U=this._getReformedLabel(V)+"",d=(U.match(/\w/g)||"").length,p=U.length-d;o=d*t*2/3+p*t}if(o>a){h=!1;break}}}}else e=1;else if(n>3){var r=this.getGap();for(e=Math.floor(11/r);t>r*e-6&&n>e;)e++}else e=1}else e="function"==typeof e?1:e-0+1;return e},_buildShape:function(){if(this._interval=this._getInterval(),this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this.option.data,i=this.option.data.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width,l="function"==typeof n.interval?n.interval:"auto"==n.interval&&"function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,h=l?1:"auto"==n.interval?this._interval:n.interval-0+1,m=n.onGap,V=m?this.getGap()/2:"undefined"==typeof m&&this.option.boundaryGap?this.getGap()/2:0,U=V>0?-h:0;if(this.isHorizontal())for(var d,p="bottom"==this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,c=U;i>c;c+=h)(!l||l(c,t[c]))&&(d=this.subPixelOptimize(this.getCoordByIndex(c)+(c>=0?V:0),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:d,yStart:p,xEnd:d,yEnd:p+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e)));else for(var u,y="left"==this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,c=U;i>c;c+=h)(!l||l(c,t[c]))&&(u=this.subPixelOptimize(this.getCoordByIndex(c)-(c>=0?V:0),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:y,yStart:u,xEnd:y+o,yEnd:u,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e)))},_buildAxisLabel:function(){var e,t,i=this.option.data,a=this.option.data.length,o=this.option.axisLabel,r=o.rotate,l=o.margin,h=o.clickable,m=o.textStyle,V="function"==typeof o.interval?o.interval:!1;if(this.isHorizontal()){var U,d;"bottom"==this.option.position?(U=this.grid.getYend()+l,d="top"):(U=this.grid.getY()-l,d="bottom");for(var p=0;a>p;p+=this._interval)V&&!V(p,i[p])||""===this._getReformedLabel(p)||(t=s.merge(i[p].textStyle||{},m),e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:this.getCoordByIndex(p),y:U,color:t.color,text:this._getReformedLabel(p),textFont:this.getFont(t),textAlign:t.align||"center",textBaseline:t.baseline||d}},r&&(e.style.textAlign=r>0?"bottom"==this.option.position?"right":"left":"bottom"==this.option.position?"left":"right",e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(h,e))))}else{var c,u;"left"==this.option.position?(c=this.grid.getX()-l,u="right"):(c=this.grid.getXend()+l,u="left");for(var p=0;a>p;p+=this._interval)V&&!V(p,i[p])||""===this._getReformedLabel(p)||(t=s.merge(i[p].textStyle||{},m),e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:c,y:this.getCoordByIndex(p),color:t.color,text:this._getReformedLabel(p),textFont:this.getFont(t),textAlign:t.align||u,textBaseline:t.baseline||0===p&&""!==this.option.name?"bottom":p==a-1&&""!==this.option.name?"top":"middle"}},r&&(e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(h,e))))}},_buildSplitLine:function(){var e,t=this.option.data,i=this.option.data.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length,h="function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,m=n.onGap,V=m?this.getGap()/2:"undefined"==typeof m&&this.option.boundaryGap?this.getGap()/2:0;if(i-=m||"undefined"==typeof m&&this.option.boundaryGap?1:0,this.isHorizontal())for(var U,d=this.grid.getY(),p=this.grid.getYend(),c=0;i>c;c+=this._interval)(!h||h(c,t[c]))&&(U=this.subPixelOptimize(this.getCoordByIndex(c)+V,r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:U,yStart:d,xEnd:U,yEnd:p,strokeColor:s[c/this._interval%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e)));else for(var u,y=this.grid.getX(),g=this.grid.getXend(),c=0;i>c;c+=this._interval)(!h||h(c,t[c]))&&(u=this.subPixelOptimize(this.getCoordByIndex(c)-V,r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:y,yStart:u,xEnd:g,yEnd:u,strokeColor:s[c/this._interval%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e)))},_buildSplitArea:function(){var e,t=this.option.data,i=this.option.splitArea,n=i.areaStyle.color;if(n instanceof Array){var a=n.length,r=this.option.data.length,s="function"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,l=i.onGap,h=l?this.getGap()/2:"undefined"==typeof l&&this.option.boundaryGap?this.getGap()/2:0;if(this.isHorizontal())for(var m,V=this.grid.getY(),U=this.grid.getHeight(),d=this.grid.getX(),p=0;r>=p;p+=this._interval)s&&!s(p,t[p])&&r>p||(m=r>p?this.getCoordByIndex(p)+h:this.grid.getXend(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:d,y:V,width:m-d,height:U,color:n[p/this._interval%a]}},this.shapeList.push(new o(e)),d=m);else for(var c,u=this.grid.getX(),y=this.grid.getWidth(),g=this.grid.getYend(),p=0;r>=p;p+=this._interval)s&&!s(p,t[p])&&r>p||(c=r>p?this.getCoordByIndex(p)-h:this.grid.getY(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:u,y:c,width:y,height:g-c,color:n[p/this._interval%a]}},this.shapeList.push(new o(e)),g=c)}else e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:n}},this.shapeList.push(new o(e))},refresh:function(e){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=this.getTextStyle(this.option.axisLabel.textStyle)),this.clear(),this._buildShape()},getGap:function(){var e=this.option.data.length,t=this.isHorizontal()?this.grid.getWidth():this.grid.getHeight();return this.option.boundaryGap?t/e:t/(e>1?e-1:1)},getCoord:function(e){for(var t=this.option.data,i=t.length,n=this.getGap(),a=this.option.boundaryGap?n/2:0,o=0;i>o;o++){if(this.getDataFromOption(t[o])==e)return a=this.isHorizontal()?this.grid.getX()+a:this.grid.getYend()-a;a+=n}},getCoordByIndex:function(e){if(0>e)return this.isHorizontal()?this.grid.getX():this.grid.getYend();if(e>this.option.data.length-1)return this.isHorizontal()?this.grid.getXend():this.grid.getY();var t=this.getGap(),i=this.option.boundaryGap?t/2:0;return i+=e*t,i=this.isHorizontal()?this.grid.getX()+i:this.grid.getYend()-i},getNameByIndex:function(e){return this.getDataFromOption(this.option.data[e])},getIndexByName:function(e){for(var t=this.option.data,i=t.length,n=0;i>n;n++)if(this.getDataFromOption(t[n])==e)return n;return-1},getValueFromCoord:function(){return""},isMainAxis:function(e){return e%this._interval===0}},s.inherits(t,i),e("../component").define("categoryAxis",t),t}),i("echarts/component/valueAxis",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","../config","../util/date","zrender/tool/util","../util/smartSteps","../util/accMath","../util/smartLogSteps","../component"],function(e){function t(e,t,n,a,o,r,s){if(!s||0===s.length)return void console.err("option.series.length == 0.");i.call(this,e,t,n,a,o),this.series=s,this.grid=this.component.grid;for(var l in r)this[l]=r[l];this.refresh(a,s)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Rectangle"),r=e("../config");r.valueAxis={zlevel:0,z:0,show:!0,position:"left",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:[0,0],axisLine:{show:!0,onZero:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!1,inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}};var s=e("../util/date"),l=e("zrender/tool/util");return t.prototype={type:r.COMPONENT_TYPE_AXIS_VALUE,_buildShape:function(){if(this._hasData=!1,this._calculateValue(),this._hasData&&this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width;if(this.isHorizontal())for(var l,h="bottom"===this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,m=0;i>m;m++)l=this.subPixelOptimize(this.getCoord(t[m]),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:l,yStart:h,xEnd:l,yEnd:h+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e));else for(var V,U="left"===this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,m=0;i>m;m++)V=this.subPixelOptimize(this.getCoord(t[m]),s),e={_axisShape:"axisTick",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:U,yStart:V,xEnd:U+o,yEnd:V,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e))},_buildAxisLabel:function(){var e,t=this._valueList,i=this._valueList.length,a=this.option.axisLabel.rotate,o=this.option.axisLabel.margin,r=this.option.axisLabel.clickable,s=this.option.axisLabel.textStyle;if(this.isHorizontal()){var l,h;"bottom"===this.option.position?(l=this.grid.getYend()+o,h="top"):(l=this.grid.getY()-o,h="bottom");for(var m=0;i>m;m++)e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:this.getCoord(t[m]),y:l,color:"function"==typeof s.color?s.color(t[m]):s.color,text:this._valueLabel[m],textFont:this.getFont(s),textAlign:s.align||"center",textBaseline:s.baseline||h}},a&&(e.style.textAlign=a>0?"bottom"===this.option.position?"right":"left":"bottom"===this.option.position?"left":"right",e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}else{var V,U;"left"===this.option.position?(V=this.grid.getX()-o,U="right"):(V=this.grid.getXend()+o,U="left");for(var m=0;i>m;m++)e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:V,y:this.getCoord(t[m]),color:"function"==typeof s.color?s.color(t[m]):s.color,text:this._valueLabel[m],textFont:this.getFont(s),textAlign:s.align||U,textBaseline:s.baseline||(0===m&&""!==this.option.name?"bottom":m===i-1&&""!==this.option.name?"top":"middle")}},a&&(e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}},_buildSplitLine:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length;if(this.isHorizontal())for(var h,m=this.grid.getY(),V=this.grid.getYend(),U=0;i>U;U++)h=this.subPixelOptimize(this.getCoord(t[U]),r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:h,yStart:m,xEnd:h,yEnd:V,strokeColor:s[U%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e));else for(var d,p=this.grid.getX(),c=this.grid.getXend(),U=0;i>U;U++)d=this.subPixelOptimize(this.getCoord(t[U]),r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:p,yStart:d,xEnd:c,yEnd:d,strokeColor:s[U%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e))},_buildSplitArea:function(){var e,t=this.option.splitArea.areaStyle.color;if(t instanceof Array){var i=t.length,n=this._valueList,a=this._valueList.length;if(this.isHorizontal())for(var r,s=this.grid.getY(),l=this.grid.getHeight(),h=this.grid.getX(),m=0;a>=m;m++)r=a>m?this.getCoord(n[m]):this.grid.getXend(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:h,y:s,width:r-h,height:l,color:t[m%i]}},this.shapeList.push(new o(e)),h=r;else for(var V,U=this.grid.getX(),d=this.grid.getWidth(),p=this.grid.getYend(),m=0;a>=m;m++)V=a>m?this.getCoord(n[m]):this.grid.getY(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:U,y:V,width:d,height:p-V,color:t[m%i]}},this.shapeList.push(new o(e)),p=V}else e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:t}},this.shapeList.push(new o(e))},_calculateValue:function(){if(isNaN(this.option.min-0)||isNaN(this.option.max-0)){for(var e,t,i={},n=this.component.legend,a=0,o=this.series.length;o>a;a++)!(this.series[a].type!=r.CHART_TYPE_LINE&&this.series[a].type!=r.CHART_TYPE_BAR&&this.series[a].type!=r.CHART_TYPE_SCATTER&&this.series[a].type!=r.CHART_TYPE_K&&this.series[a].type!=r.CHART_TYPE_EVENTRIVER||n&&!n.isSelected(this.series[a].name)||(e=this.series[a].xAxisIndex||0,t=this.series[a].yAxisIndex||0,this.option.xAxisIndex!=e&&this.option.yAxisIndex!=t||!this._calculSum(i,a)));var s;for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)if(!isNaN(s[l])){this._hasData=!0,this._min=s[l],this._max=s[l];break}if(this._hasData)break}for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)isNaN(s[l])||(this._min=Math.min(this._min,s[l]),this._max=Math.max(this._max,s[l]))}var m="log"!==this.option.type?this.option.boundaryGap:[0,0],V=Math.abs(this._max-this._min);this._min=isNaN(this.option.min-0)?this._min-Math.abs(V*m[0]):this.option.min-0,this._max=isNaN(this.option.max-0)?this._max+Math.abs(V*m[1]):this.option.max-0,this._min===this._max&&(0===this._max?this._max=1:this._max>0?this._min=this._max/this.option.splitNumber!=null?this.option.splitNumber:5:this._max=this._max/this.option.splitNumber!=null?this.option.splitNumber:5),"time"===this.option.type?this._reformTimeValue():"log"===this.option.type?this._reformLogValue():this._reformValue(this.option.scale)}else this._hasData=!0,this._min=this.option.min-0,this._max=this.option.max-0,"time"===this.option.type?this._reformTimeValue():"log"===this.option.type?this._reformLogValue():this._customerValue()},_calculSum:function(e,t){var i,n,a=this.series[t].name||"kener";if(this.series[t].stack){var o="__Magic_Key_Positive__"+this.series[t].stack,l="__Magic_Key_Negative__"+this.series[t].stack;e[o]=e[o]||[],e[l]=e[l]||[],e[a]=e[a]||[],n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)i=this.getDataFromOption(n[h]),"-"!==i&&(i-=0,i>=0?null!=e[o][h]?e[o][h]+=i:e[o][h]=i:null!=e[l][h]?e[l][h]+=i:e[l][h]=i,this.option.scale&&e[a].push(i))}else if(e[a]=e[a]||[],this.series[t].type!=r.CHART_TYPE_EVENTRIVER){n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)i=this.getDataFromOption(n[h]),this.series[t].type===r.CHART_TYPE_K?(e[a].push(i[0]),e[a].push(i[1]),e[a].push(i[2]),e[a].push(i[3])):i instanceof Array?(-1!=this.option.xAxisIndex&&e[a].push("time"!=this.option.type?i[0]:s.getNewDate(i[0])),-1!=this.option.yAxisIndex&&e[a].push("time"!=this.option.type?i[1]:s.getNewDate(i[1]))):e[a].push(i)}else{n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)for(var V=n[h].evolution,U=0,d=V.length;d>U;U++)e[a].push(s.getNewDate(V[U].time))}},_reformValue:function(t){var i=e("../util/smartSteps"),n=this.option.splitNumber;!t&&this._min>=0&&this._max>=0&&(this._min=0),!t&&this._min<=0&&this._max<=0&&(this._max=0);var a=i(this._min,this._max,n);n=null!=n?n:a.secs,this._min=a.min,this._max=a.max,this._valueList=a.pnts,this._reformLabelData()},_reformTimeValue:function(){var e=null!=this.option.splitNumber?this.option.splitNumber:5,t=s.getAutoFormatter(this._min,this._max,e),i=t.formatter,n=t.gapValue;this._valueList=[s.getNewDate(this._min)];var a;switch(i){case"week":a=s.nextMonday(this._min);break;case"month":a=s.nextNthOnMonth(this._min,1);break;case"quarter":a=s.nextNthOnQuarterYear(this._min,1);break;case"half-year":a=s.nextNthOnHalfYear(this._min,1);break;case"year":a=s.nextNthOnYear(this._min,1);break;default:72e5>=n?a=(Math.floor(this._min/n)+1)*n:(a=s.getNewDate(this._min- -n),a.setHours(6*Math.round(a.getHours()/6)),a.setMinutes(0),a.setSeconds(0))}for(a-this._min<n/2&&(a-=-n),t=s.getNewDate(a),e*=1.5;e-->=0&&(("month"==i||"quarter"==i||"half-year"==i||"year"==i)&&t.setDate(1),!(this._max-t<n/2));)this._valueList.push(t),t=s.getNewDate(t- -n);this._valueList.push(s.getNewDate(this._max)),this._reformLabelData(function(e){return function(t){return s.format(e,t)}}(i))},_customerValue:function(){var t=e("../util/accMath"),i=null!=this.option.splitNumber?this.option.splitNumber:5,n=(this._max-this._min)/i;this._valueList=[];for(var a=0;i>=a;a++)this._valueList.push(t.accAdd(this._min,t.accMul(n,a)));this._reformLabelData()},_reformLogValue:function(){var t=this.option,i=e("../util/smartLogSteps")({dataMin:this._min,dataMax:this._max,logPositive:t.logPositive,logLabelBase:t.logLabelBase,splitNumber:t.splitNumber});this._min=i.dataMin,this._max=i.dataMax,this._valueList=i.tickList,this._dataMappingMethods=i.dataMappingMethods,this._reformLabelData(i.labelFormatter)},_reformLabelData:function(e){this._valueLabel=[];var t=this.option.axisLabel.formatter;if(t)for(var i=0,n=this._valueList.length;n>i;i++)"function"==typeof t?this._valueLabel.push(e?t.call(this.myChart,this._valueList[i],e):t.call(this.myChart,this._valueList[i])):"string"==typeof t&&this._valueLabel.push(e?s.format(t,this._valueList[i]):t.replace("{value}",this._valueList[i]));else for(var i=0,n=this._valueList.length;n>i;i++)this._valueLabel.push(e?e(this._valueList[i]):this.numAddCommas(this._valueList[i]))},getExtremum:function(){this._calculateValue();var e=this._dataMappingMethods;return{min:this._min,max:this._max,dataMappingMethods:e?l.merge({},e):null}},refresh:function(e,t){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=l.merge(this.option.axisLabel.textStyle||{},this.ecTheme.textStyle),this.series=t),this.zr&&(this.clear(),this._buildShape())},getCoord:function(e){this._dataMappingMethods&&(e=this._dataMappingMethods.value2Coord(e)),e=e<this._min?this._min:e,e=e>this._max?this._max:e;var t;return t=this.isHorizontal()?this.grid.getX()+(e-this._min)/(this._max-this._min)*this.grid.getWidth():this.grid.getYend()-(e-this._min)/(this._max-this._min)*this.grid.getHeight()},getCoordSize:function(e){return Math.abs(this.isHorizontal()?e/(this._max-this._min)*this.grid.getWidth():e/(this._max-this._min)*this.grid.getHeight())},getValueFromCoord:function(e){var t;return this.isHorizontal()?(e=e<this.grid.getX()?this.grid.getX():e,e=e>this.grid.getXend()?this.grid.getXend():e,t=this._min+(e-this.grid.getX())/this.grid.getWidth()*(this._max-this._min)):(e=e<this.grid.getY()?this.grid.getY():e,e=e>this.grid.getYend()?this.grid.getYend():e,t=this._max-(e-this.grid.getY())/this.grid.getHeight()*(this._max-this._min)),this._dataMappingMethods&&(t=this._dataMappingMethods.coord2Value(t)),t.toFixed(2)-0},isMaindAxis:function(e){for(var t=0,i=this._valueList.length;i>t;t++)if(this._valueList[t]===e)return!0;return!1}},l.inherits(t,i),e("../component").define("valueAxis",t),t}),i("echarts/util/date",[],function(){function e(e,t,i){i=i>1?i:2;for(var n,a,o,r,s=0,l=m.length;l>s;s++)if(n=m[s].value,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,Math.round(a/n)<=1.2*i){o=m[s].formatter,r=m[s].value;break}return null==o&&(o="year",n=317088e5,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,r=Math.round(a/(i-1)/n)*n),{formatter:o,gapValue:r}}function t(e){return 10>e?"0"+e:e}function i(e,i){("week"==e||"month"==e||"quarter"==e||"half-year"==e||"year"==e)&&(e="MM - dd\nyyyy");var n=h(i),a=n.getFullYear(),o=n.getMonth()+1,r=n.getDate(),s=n.getHours(),l=n.getMinutes(),m=n.getSeconds();return e=e.replace("MM",t(o)),e=e.toLowerCase(),e=e.replace("yyyy",a),e=e.replace("yy",a%100),e=e.replace("dd",t(r)),e=e.replace("d",r),e=e.replace("hh",t(s)),e=e.replace("h",s),e=e.replace("mm",t(l)),e=e.replace("m",l),e=e.replace("ss",t(m)),e=e.replace("s",m)}function n(e){return e=h(e),e.setDate(e.getDate()+8-e.getDay()),e}function a(e,t,i){return e=h(e),e.setMonth(Math.ceil((e.getMonth()+1)/i)*i),e.setDate(t),e}function o(e,t){return a(e,t,1)}function r(e,t){return a(e,t,3)}function s(e,t){return a(e,t,6)}function l(e,t){return a(e,t,12)}function h(e){return e instanceof Date?e:new Date("string"==typeof e?e.replace(/-/g,"/"):e)}var m=[{formatter:"hh : mm : ss",value:1e3},{formatter:"hh : mm : ss",value:5e3},{formatter:"hh : mm : ss",value:1e4},{formatter:"hh : mm : ss",value:15e3},{formatter:"hh : mm : ss",value:3e4},{formatter:"hh : mm\nMM - dd",value:6e4},{formatter:"hh : mm\nMM - dd",value:3e5},{formatter:"hh : mm\nMM - dd",value:6e5},{formatter:"hh : mm\nMM - dd",value:9e5},{formatter:"hh : mm\nMM - dd",value:18e5},{formatter:"hh : mm\nMM - dd",value:36e5},{formatter:"hh : mm\nMM - dd",value:72e5},{formatter:"hh : mm\nMM - dd",value:216e5},{formatter:"hh : mm\nMM - dd",value:432e5},{formatter:"MM - dd\nyyyy",value:864e5},{formatter:"week",value:6048e5},{formatter:"month",value:26784e5},{formatter:"quarter",value:8208e6},{formatter:"half-year",value:16416e6},{formatter:"year",value:32832e6}];return{getAutoFormatter:e,getNewDate:h,format:i,nextMonday:n,nextNthPerNmonth:a,nextNthOnMonth:o,nextNthOnQuarterYear:r,nextNthOnHalfYear:s,nextNthOnYear:l}}),i("echarts/util/smartSteps",[],function(){function e(e){return X.log(I(e))/X.LN10}function t(e){return X.pow(10,e)}function i(e){return e===w(e)}function n(e,t,n,a){b=a||{},f=b.steps||L,k=b.secs||W,n=v(+n||0)%99,e=+e||0,t=+t||0,x=_=0,"min"in b&&(e=+b.min||0,x=1),"max"in b&&(t=+b.max||0,_=1),e>t&&(t=[e,e=t][0]);var o=t-e;if(x&&_)return g(e,t,n);if((n||5)>o){if(i(e)&&i(t))return d(e,t,n);if(0===o)return p(e,t,n)}return h(e,t,n)}function a(e,i,n,a){a=a||0;var s=o((i-e)/n,-1),l=o(e,-1,1),h=o(i,-1),m=X.min(s.e,l.e,h.e);0===l.c?m=X.min(s.e,h.e):0===h.c&&(m=X.min(s.e,l.e)),r(s,{c:0,e:m}),r(l,s,1),r(h,s),a+=m,e=l.c,i=h.c;for(var V=(i-e)/n,U=t(a),d=0,p=[],c=n+1;c--;)p[c]=(e+V*c)*U;if(0>a){d=u(U),V=+(V*U).toFixed(d),e=+(e*U).toFixed(d),i=+(i*U).toFixed(d);for(var c=p.length;c--;)p[c]=p[c].toFixed(d),0===+p[c]&&(p[c]="0")}else e*=U,i*=U,V*=U;return k=0,f=0,b=0,{min:e,max:i,secs:n,step:V,fix:d,exp:a,pnts:p}}function o(n,a,o){a=v(a%10)||2,0>a&&(i(n)?a=(""+I(n)).replace(/0+$/,"").length||1:(n=n.toFixed(15).replace(/0+$/,""),a=n.replace(".","").replace(/^[-0]+/,"").length,n=+n));var r=w(e(n))-a+1,s=+(n*t(-r)).toFixed(15)||0;return s=o?w(s):K(s),!s&&(r=0),(""+I(s)).length>a&&(r+=1,s/=10),{c:s,e:r}}function r(e,i,n){var a=i.e-e.e;a&&(e.e+=a,e.c*=t(-a),e.c=n?w(e.c):K(e.c))}function s(e,t,i){e.e<t.e?r(t,e,i):r(e,t,i)}function l(e,t){t=t||L,e=o(e);for(var i=e.c,n=0;i>t[n];)n++;if(!t[n])for(i/=10,e.e+=1,n=0;i>t[n];)n++;return e.c=t[n],e}function h(e,t,n){var s,h=n||+k.slice(-1),p=l((t-e)/h,f),u=o(t-e),g=o(e,-1,1),b=o(t,-1);if(r(u,p),r(g,p,1),r(b,p),n?s=V(g,b,h):h=m(g,b),i(e)&&i(t)&&e*t>=0){if(h>t-e)return d(e,t,h);h=U(e,t,n,g,b,h)}var L=c(e,t,g.c,b.c);return g.c=L[0],b.c=L[1],(x||_)&&y(e,t,g,b),a(g.c,b.c,h,b.e)}function m(e,i){for(var n,a,o,r,s=[],h=k.length;h--;)n=k[h],a=l((i.c-e.c)/n,f),a=a.c*t(a.e),o=w(e.c/a)*a,r=K(i.c/a)*a,s[h]={min:o,max:r,step:a,span:r-o};return s.sort(function(e,t){var i=e.span-t.span;return 0===i&&(i=e.step-t.step),i}),s=s[0],n=s.span/s.step,e.c=s.min,i.c=s.max,3>n?2*n:n}function V(e,i,n){for(var a,o,r=i.c,s=(i.c-e.c)/n-1;r>e.c;)s=l(s+1,f),s=s.c*t(s.e),a=s*n,o=K(i.c/s)*s,r=o-a;var h=e.c-r,m=o-i.c,V=h-m;return V>1.1*s&&(V=v(V/s/2)*s,r+=V,o+=V),e.c=r,i.c=o,s}function U(e,n,a,o,r,s){var l=r.c-o.c,h=l/s*t(r.e);if(!i(h)&&(h=w(h),l=h*s,n-e>l&&(h+=1,l=h*s,!a&&h*(s-1)>=n-e&&(s-=1,l=h*s)),l>=n-e)){var m=l-(n-e);o.c=v(e-m/2),r.c=v(n+m/2),o.e=0,r.e=0}return s}function d(e,t,i){if(i=i||5,x)t=e+i;else if(_)e=t-i;else{var n=i-(t-e),o=v(e-n/2),r=v(t+n/2),s=c(e,t,o,r);e=s[0],t=s[1]}return a(e,t,i)}function p(e,t,i){i=i||5;var n=X.min(I(t/i),i)/2.1;return x?t=e+n:_?e=t-n:(e-=n,t+=n),h(e,t,i)}function c(e,t,i,n){ +return e>=0&&0>i?(n-=i,i=0):0>=t&&n>0&&(i-=n,n=0),[i,n]}function u(e){return e=(+e).toFixed(15).split("."),e.pop().replace(/0+$/,"").length}function y(e,t,i,n){if(x){var a=o(e,4,1);i.e-a.e>6&&(a={c:0,e:i.e}),s(i,a),s(n,a),n.c+=a.c-i.c,i.c=a.c}else if(_){var r=o(t,4);n.e-r.e>6&&(r={c:0,e:n.e}),s(i,r),s(n,r),i.c+=r.c-n.c,n.c=r.c}}function g(e,t,i){var n=i?[i]:k,s=t-e;if(0===s)return t=o(t,3),i=n[0],t.c=v(t.c+i/2),a(t.c-i,t.c,i,t.e);I(t/s)<1e-6&&(t=0),I(e/s)<1e-6&&(e=0);var l,h,m,V=[[5,10],[10,2],[50,10],[100,2]],U=[],d=[],p=o(t-e,3),c=o(e,-1,1),u=o(t,-1);r(c,p,1),r(u,p),s=u.c-c.c,p.c=s;for(var y=n.length;y--;){i=n[y],l=K(s/i),h=l*i-s,m=3*(h+3),m+=2*(i-n[0]+2),i%5===0&&(m-=10);for(var g=V.length;g--;)l%V[g][0]===0&&(m/=V[g][1]);d[y]=[i,l,h,m].join(),U[y]={secs:i,step:l,delta:h,score:m}}return U.sort(function(e,t){return e.score-t.score}),U=U[0],c.c=v(c.c-U.delta/2),u.c=v(u.c+U.delta/2),a(c.c,u.c,U.secs,p.e)}var b,f,k,x,_,L=[10,20,25,50],W=[4,5,6],X=Math,v=X.round,w=X.floor,K=X.ceil,I=X.abs;return n}),i("echarts/util/smartLogSteps",["require","./number"],function(e){function t(e){return i(),u=e||{},n(),a(),[o(),i()][0]}function i(){U=u=g=c=b=f=y=k=d=p=null}function n(){d=u.logLabelBase,null==d?(p="plain",d=10,c=I):(d=+d,1>d&&(d=10),p="exponent",c=L(d)),y=u.splitNumber,null==y&&(y=E);var e=parseFloat(u.dataMin),t=parseFloat(u.dataMax);isFinite(e)||isFinite(t)?isFinite(e)?isFinite(t)?e>t&&(t=[e,e=t][0]):t=e:e=t:e=t=1,U=u.logPositive,null==U&&(U=t>0||0===e),b=U?e:-t,f=U?t:-e,S>b&&(b=S),S>f&&(f=S)}function a(){function e(){y>m&&(y=m);var e=w(l(m/y)),t=v(l(m/e)),i=e*t,n=(i-U)/2,a=w(l(r-n));V(a-r)&&(a-=1),g=-a*c;for(var s=a;o>=s-e;s+=e)k.push(W(d,s))}function t(){for(var e=i(h,0),t=e+2;t>e&&a(e+1)+n(e+1)*C<r;)e++;for(var l=i(s,0),t=l-2;l>t&&a(l-1)+n(l-1)*C>o;)l--;g=-(a(e)*I+n(e)*J);for(var m=e;l>=m;m++){var V=a(m),U=n(m);k.push(W(10,V)*W(2,U))}}function i(e,t){return 3*e+t}function n(e){return e-3*a(e)}function a(e){return w(l(e/3))}k=[];var o=l(L(f)/c),r=l(L(b)/c),s=v(o),h=w(r),m=s-h,U=o-r;"exponent"===p?e():F>=m&&y>F?t():e()}function o(){for(var e=[],t=0,i=k.length;i>t;t++)e[t]=(U?1:-1)*k[t];!U&&e.reverse();var n=s(),a=n.value2Coord,o=a(e[0]),l=a(e[e.length-1]);return o===l&&(o-=1,l+=1),{dataMin:o,dataMax:l,tickList:e,logPositive:U,labelFormatter:r(),dataMappingMethods:n}}function r(){if("exponent"===p){var e=d,t=c;return function(i){if(!isFinite(parseFloat(i)))return"";var n="";return 0>i&&(i=-i,n="-"),n+e+m(L(i)/t)}}return function(e){return isFinite(parseFloat(e))?x.addCommas(h(e)):""}}function s(){var e=U,t=g;return{value2Coord:function(i){return null==i||isNaN(i)||!isFinite(i)?i:(i=parseFloat(i),isFinite(i)?e&&S>i?i=S:!e&&i>-S&&(i=-S):i=S,i=X(i),(e?1:-1)*(L(i)+t))},coord2Value:function(i){return null==i||isNaN(i)||!isFinite(i)?i:(i=parseFloat(i),isFinite(i)||(i=S),e?W(K,i-t):-W(K,-i+t))}}}function l(e){return+Number(+e).toFixed(14)}function h(e){return Number(e).toFixed(15).replace(/\.?0*$/,"")}function m(e){e=h(Math.round(e));for(var t=[],i=0,n=e.length;n>i;i++){var a=e.charAt(i);t.push(T[a]||"")}return t.join("")}function V(e){return e>-S&&S>e}var U,d,p,c,u,y,g,b,f,k,x=e("./number"),_=Math,L=_.log,W=_.pow,X=_.abs,v=_.ceil,w=_.floor,K=_.E,I=_.LN10,J=_.LN2,C=J/I,S=1e-9,E=5,F=2,T={0:"⁰",1:"¹",2:"²",3:"³",4:"⁴",5:"⁵",6:"⁶",7:"⁷",8:"⁸",9:"⁹","-":"⁻"};return t}),i("echarts/chart/line",["require","./base","zrender/shape/Polyline","../util/shape/Icon","../util/shape/HalfSmoothPolygon","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,i,a,o){n.call(this,e,t,i,a,o),this.refresh(a)}function i(e,t,i){var n=t.x,a=t.y,r=t.width,s=t.height,l=s/2;t.symbol.match("empty")&&(e.fillStyle="#fff"),t.brushType="both";var h=t.symbol.replace("empty","").toLowerCase();h.match("star")?(l=h.replace("star","")-0||5,a-=1,h="star"):("rectangle"===h||"arrow"===h)&&(n+=(r-s)/2,r=s);var m="";if(h.match("image")&&(m=h.replace(new RegExp("^image:\\/\\/"),""),h="image",n+=Math.round((r-s)/2)-1,r=s+=2),h=o.prototype.iconLibrary[h]){var V=t.x,U=t.y;e.moveTo(V,U+l),e.lineTo(V+5,U+l),e.moveTo(V+t.width-5,U+l),e.lineTo(V+t.width,U+l);var d=this;h(e,{x:n+4,y:a+4,width:r-8,height:s-8,n:l,image:m},function(){d.modSelf(),i()})}else e.moveTo(n,a+l),e.lineTo(n+r,a+l)}var n=e("./base"),a=e("zrender/shape/Polyline"),o=e("../util/shape/Icon"),r=e("../util/shape/HalfSmoothPolygon");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var s=e("../config");s.line={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,dataFilter:"nearest",itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid",shadowColor:"rgba(0,0,0,0)",shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0}},emphasis:{label:{show:!1}}},symbolSize:2,showAllSymbol:!1};var l=e("../util/ecData"),h=e("zrender/tool/util"),m=e("zrender/tool/color");return t.prototype={type:s.CHART_TYPE_LINE,_buildShape:function(){this.finalPLMap={},this._buildPosition()},_buildHorizontal:function(e,t,i,n){for(var a,o,r,s,l,h,m,V,U,d=this.series,p=i[0][0],c=d[p],u=this.component.xAxis.getAxis(c.xAxisIndex||0),y={},g=0,b=t;b>g&&null!=u.getNameByIndex(g);g++){o=u.getCoordByIndex(g);for(var f=0,k=i.length;k>f;f++){a=this.component.yAxis.getAxis(d[i[f][0]].yAxisIndex||0),l=s=m=h=a.getCoord(0);for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),y[p]=y[p]||[],n[p]=n[p]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},"-"!==U?(U>=0?(s-=x>0?a.getCoordSize(U):l-a.getCoord(U),r=s):0>U&&(h+=x>0?a.getCoordSize(U):a.getCoord(U)-m,r=h),y[p].push([o,r,g,u.getNameByIndex(g),o,l]),n[p].min>U&&(n[p].min=U,n[p].minY=r,n[p].minX=o),n[p].max<U&&(n[p].max=U,n[p].maxY=r,n[p].maxX=o),n[p].sum+=U,n[p].counter++):y[p].length>0&&(this.finalPLMap[p]=this.finalPLMap[p]||[],this.finalPLMap[p].push(y[p]),y[p]=[])}s=this.component.grid.getY();for(var L,f=0,k=i.length;k>f;f++)for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),"-"==U&&this.deepQuery([V,c,this.option],"calculable")&&(L=this.deepQuery([V,c],"symbolSize"),s+=2*L+5,r=s,this.shapeList.push(this._getCalculableItem(p,g,u.getNameByIndex(g),o,r,"horizontal")))}for(var W in y)y[W].length>0&&(this.finalPLMap[W]=this.finalPLMap[W]||[],this.finalPLMap[W].push(y[W]),y[W]=[]);this._calculMarkMapXY(n,i,"y"),this._buildBorkenLine(e,this.finalPLMap,u,"horizontal")},_buildVertical:function(e,t,i,n){for(var a,o,r,s,l,h,m,V,U,d=this.series,p=i[0][0],c=d[p],u=this.component.yAxis.getAxis(c.yAxisIndex||0),y={},g=0,b=t;b>g&&null!=u.getNameByIndex(g);g++){r=u.getCoordByIndex(g);for(var f=0,k=i.length;k>f;f++){a=this.component.xAxis.getAxis(d[i[f][0]].xAxisIndex||0),l=s=m=h=a.getCoord(0);for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),y[p]=y[p]||[],n[p]=n[p]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},"-"!==U?(U>=0?(s+=x>0?a.getCoordSize(U):a.getCoord(U)-l,o=s):0>U&&(h-=x>0?a.getCoordSize(U):m-a.getCoord(U),o=h),y[p].push([o,r,g,u.getNameByIndex(g),l,r]),n[p].min>U&&(n[p].min=U,n[p].minX=o,n[p].minY=r),n[p].max<U&&(n[p].max=U,n[p].maxX=o,n[p].maxY=r),n[p].sum+=U,n[p].counter++):y[p].length>0&&(this.finalPLMap[p]=this.finalPLMap[p]||[],this.finalPLMap[p].push(y[p]),y[p]=[])}s=this.component.grid.getXend();for(var L,f=0,k=i.length;k>f;f++)for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,"-"),"-"==U&&this.deepQuery([V,c,this.option],"calculable")&&(L=this.deepQuery([V,c],"symbolSize"),s-=2*L+5,o=s,this.shapeList.push(this._getCalculableItem(p,g,u.getNameByIndex(g),o,r,"vertical")))}for(var W in y)y[W].length>0&&(this.finalPLMap[W]=this.finalPLMap[W]||[],this.finalPLMap[W].push(y[W]),y[W]=[]);this._calculMarkMapXY(n,i,"x"),this._buildBorkenLine(e,this.finalPLMap,u,"vertical")},_buildOther:function(e,t,i,n){for(var a,o=this.series,r={},s=0,l=i.length;l>s;s++)for(var h=0,m=i[s].length;m>h;h++){var V=i[s][h],U=o[V];a=this.component.xAxis.getAxis(U.xAxisIndex||0);var d=this.component.yAxis.getAxis(U.yAxisIndex||0),p=d.getCoord(0);r[V]=r[V]||[],n[V]=n[V]||{min0:Number.POSITIVE_INFINITY,min1:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum0:0,sum1:0,counter0:0,counter1:0,average0:0,average1:0};for(var c=0,u=U.data.length;u>c;c++){var y=U.data[c],g=this.getDataFromOption(y,"-");if(g instanceof Array){var b=a.getCoord(g[0]),f=d.getCoord(g[1]);r[V].push([b,f,c,g[0],b,p]),n[V].min0>g[0]&&(n[V].min0=g[0],n[V].minY0=f,n[V].minX0=b),n[V].max0<g[0]&&(n[V].max0=g[0],n[V].maxY0=f,n[V].maxX0=b),n[V].sum0+=g[0],n[V].counter0++,n[V].min1>g[1]&&(n[V].min1=g[1],n[V].minY1=f,n[V].minX1=b),n[V].max1<g[1]&&(n[V].max1=g[1],n[V].maxY1=f,n[V].maxX1=b),n[V].sum1+=g[1],n[V].counter1++}}}for(var k in r)r[k].length>0&&(this.finalPLMap[k]=this.finalPLMap[k]||[],this.finalPLMap[k].push(r[k]),r[k]=[]);this._calculMarkMapXY(n,i,"xy"),this._buildBorkenLine(e,this.finalPLMap,a,"other")},_buildBorkenLine:function(e,t,i,n){for(var o,s="other"==n?"horizontal":n,V=this.series,U=e.length-1;U>=0;U--){var d=e[U],p=V[d],c=t[d];if(p.type===this.type&&null!=c)for(var u=this._getBbox(d,s),y=this._sIndex2ColorMap[d],g=this.query(p,"itemStyle.normal.lineStyle.width"),b=this.query(p,"itemStyle.normal.lineStyle.type"),f=this.query(p,"itemStyle.normal.lineStyle.color"),k=this.getItemStyleColor(this.query(p,"itemStyle.normal.color"),d,-1),x=null!=this.query(p,"itemStyle.normal.areaStyle"),_=this.query(p,"itemStyle.normal.areaStyle.color"),L=0,W=c.length;W>L;L++){var X=c[L],v="other"!=n&&this._isLarge(s,X);if(v)X=this._getLargePointList(s,X,p.dataFilter);else for(var w=0,K=X.length;K>w;w++)o=p.data[X[w][2]],(this.deepQuery([o,p,this.option],"calculable")||this.deepQuery([o,p],"showAllSymbol")||"categoryAxis"===i.type&&i.isMainAxis(X[w][2])&&"none"!=this.deepQuery([o,p],"symbol"))&&this.shapeList.push(this._getSymbol(d,X[w][2],X[w][3],X[w][0],X[w][1],s));var I=new a({zlevel:p.zlevel,z:p.z,style:{miterLimit:g,pointList:X,strokeColor:f||k||y,lineWidth:g,lineType:b,smooth:this._getSmooth(p.smooth),smoothConstraint:u,shadowColor:this.query(p,"itemStyle.normal.lineStyle.shadowColor"),shadowBlur:this.query(p,"itemStyle.normal.lineStyle.shadowBlur"),shadowOffsetX:this.query(p,"itemStyle.normal.lineStyle.shadowOffsetX"),shadowOffsetY:this.query(p,"itemStyle.normal.lineStyle.shadowOffsetY")},hoverable:!1,_main:!0,_seriesIndex:d,_orient:s});if(l.pack(I,V[d],d,0,L,V[d].name),this.shapeList.push(I),x){var J=new r({zlevel:p.zlevel,z:p.z,style:{miterLimit:g,pointList:h.clone(X).concat([[X[X.length-1][4],X[X.length-1][5]],[X[0][4],X[0][5]]]),brushType:"fill",smooth:this._getSmooth(p.smooth),smoothConstraint:u,color:_?_:m.alpha(y,.5)},highlightStyle:{brushType:"fill"},hoverable:!1,_main:!0,_seriesIndex:d,_orient:s});l.pack(J,V[d],d,0,L,V[d].name),this.shapeList.push(J)}}}},_getBbox:function(e,t){var i=this.component.grid.getBbox(),n=this.xMarkMap[e];return null!=n.minX0?[[Math.min(n.minX0,n.maxX0,n.minX1,n.maxX1),Math.min(n.minY0,n.maxY0,n.minY1,n.maxY1)],[Math.max(n.minX0,n.maxX0,n.minX1,n.maxX1),Math.max(n.minY0,n.maxY0,n.minY1,n.maxY1)]]:("horizontal"===t?(i[0][1]=Math.min(n.minY,n.maxY),i[1][1]=Math.max(n.minY,n.maxY)):(i[0][0]=Math.min(n.minX,n.maxX),i[1][0]=Math.max(n.minX,n.maxX)),i)},_isLarge:function(e,t){return t.length<2?!1:"horizontal"===e?Math.abs(t[0][0]-t[1][0])<.5:Math.abs(t[0][1]-t[1][1])<.5},_getLargePointList:function(e,t,i){var n;n="horizontal"===e?this.component.grid.getWidth():this.component.grid.getHeight();var a=t.length,o=[];if("function"!=typeof i)switch(i){case"min":i=function(e){return Math.max.apply(null,e)};break;case"max":i=function(e){return Math.min.apply(null,e)};break;case"average":i=function(e){for(var t=0,i=0;i<e.length;i++)t+=e[i];return t/e.length};break;default:i=function(e){return e[0]}}for(var r=[],s=0;n>s;s++){var l=Math.floor(a/n*s),h=Math.min(Math.floor(a/n*(s+1)),a);if(!(l>=h)){for(var m=l;h>m;m++)r[m-l]="horizontal"===e?t[m][1]:t[m][0];r.length=h-l;for(var V=i(r),U=-1,d=1/0,m=l;h>m;m++){var p="horizontal"===e?t[m][1]:t[m][0],c=Math.abs(p-V);d>c&&(U=m,d=c)}var u=t[U].slice();"horizontal"===e?u[1]=V:u[0]=V,o.push(u)}}return o},_getSmooth:function(e){return e?.3:0},_getCalculableItem:function(e,t,i,n,a,o){var r=this.series,l=r[e].calculableHolderColor||this.ecTheme.calculableHolderColor||s.calculableHolderColor,h=this._getSymbol(e,t,i,n,a,o);return h.style.color=l,h.style.strokeColor=l,h.rotation=[0,0],h.hoverable=!1,h.draggable=!1,h.style.text=void 0,h},_getSymbol:function(e,t,i,n,a,o){var r=this.series,s=r[e],l=s.data[t],h=this.getSymbolShape(s,e,l,t,i,n,a,this._sIndex2ShapeMap[e],this._sIndex2ColorMap[e],"#fff","vertical"===o?"horizontal":"vertical");return h.zlevel=s.zlevel,h.z=s.z+1,this.deepQuery([l,s,this.option],"calculable")&&(this.setCalculable(h),h.draggable=!0),h},getMarkCoord:function(e,t){var i=this.series[e],n=this.xMarkMap[e],a=this.component.xAxis.getAxis(i.xAxisIndex),o=this.component.yAxis.getAxis(i.yAxisIndex);if(t.type&&("max"===t.type||"min"===t.type||"average"===t.type)){var r=null!=t.valueIndex?t.valueIndex:null!=n.maxX0?"1":"";return[n[t.type+"X"+r],n[t.type+"Y"+r],n[t.type+"Line"+r],n[t.type+r]]}return["string"!=typeof t.xAxis&&a.getCoordByIndex?a.getCoordByIndex(t.xAxis||0):a.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&o.getCoordByIndex?o.getCoordByIndex(t.yAxis||0):o.getCoord(t.yAxis||0)]},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},ontooltipHover:function(e,t){for(var i,n,a=e.seriesIndex,o=e.dataIndex,r=a.length;r--;)if(i=this.finalPLMap[a[r]])for(var s=0,l=i.length;l>s;s++){n=i[s];for(var h=0,m=n.length;m>h;h++)o===n[h][2]&&t.push(this._getSymbol(a[r],n[h][2],n[h][3],n[h][0],n[h][1],"horizontal"))}},addDataAnimation:function(e,t){function i(){c--,0===c&&t&&t()}function n(e){e.style.controlPointList=null}for(var a=this.series,o={},r=0,s=e.length;s>r;r++)o[e[r][0]]=e[r];for(var l,h,m,V,U,d,p,c=0,r=this.shapeList.length-1;r>=0;r--)if(U=this.shapeList[r]._seriesIndex,o[U]&&!o[U][3]){if(this.shapeList[r]._main&&this.shapeList[r].style.pointList.length>1){if(d=this.shapeList[r].style.pointList,h=Math.abs(d[0][0]-d[1][0]),V=Math.abs(d[0][1]-d[1][1]),p="horizontal"===this.shapeList[r]._orient,o[U][2]){if("half-smooth-polygon"===this.shapeList[r].type){var u=d.length;this.shapeList[r].style.pointList[u-3]=d[u-2],this.shapeList[r].style.pointList[u-3][p?0:1]=d[u-4][p?0:1],this.shapeList[r].style.pointList[u-2]=d[u-1]}this.shapeList[r].style.pointList.pop(),p?(l=h,m=0):(l=0,m=-V)}else{if(this.shapeList[r].style.pointList.shift(),"half-smooth-polygon"===this.shapeList[r].type){var y=this.shapeList[r].style.pointList.pop();p?y[0]=d[0][0]:y[1]=d[0][1],this.shapeList[r].style.pointList.push(y)}p?(l=-h,m=0):(l=0,m=V)}this.shapeList[r].style.controlPointList=null,this.zr.modShape(this.shapeList[r])}else{if(o[U][2]&&this.shapeList[r]._dataIndex===a[U].data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!o[U][2]&&0===this.shapeList[r]._dataIndex){this.zr.delShape(this.shapeList[r].id);continue}}this.shapeList[r].position=[0,0],c++,this.zr.animate(this.shapeList[r].id,"").when(this.query(this.option,"animationDurationUpdate"),{position:[l,m]}).during(n).done(i).start()}c||t&&t()}},o.prototype.iconLibrary.legendLineIcon=i,h.inherits(t,n),e("../chart").define("line",t),t}),i("echarts/util/shape/HalfSmoothPolygon",["require","zrender/shape/Base","zrender/shape/util/smoothBezier","zrender/tool/util","zrender/shape/Polygon"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/util/smoothBezier"),a=e("zrender/tool/util");return t.prototype={type:"half-smooth-polygon",buildPath:function(t,i){var a=i.pointList;if(!(a.length<2))if(i.smooth){var o=n(a.slice(0,-2),i.smooth,!1,i.smoothConstraint);t.moveTo(a[0][0],a[0][1]);for(var r,s,l,h=a.length,m=0;h-3>m;m++)r=o[2*m],s=o[2*m+1],l=a[m+1],t.bezierCurveTo(r[0],r[1],s[0],s[1],l[0],l[1]);t.lineTo(a[h-2][0],a[h-2][1]),t.lineTo(a[h-1][0],a[h-1][1]),t.lineTo(a[0][0],a[0][1])}else e("zrender/shape/Polygon").prototype.buildPath(t,i)}},a.inherits(t,i),t}),i("echarts/chart/bar",["require","./base","zrender/shape/Rectangle","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Rectangle");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var a=e("../config");a.bar={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,barMinHeight:0,barGap:"30%",barCategoryGap:"20%",itemStyle:{normal:{barBorderColor:"#fff",barBorderRadius:0,barBorderWidth:0,label:{show:!1}},emphasis:{barBorderColor:"#fff",barBorderRadius:0,barBorderWidth:0,label:{show:!1}}}};var o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.CHART_TYPE_BAR,_buildShape:function(){this._buildPosition()},_buildNormal:function(e,t,i,o,r){for(var s,l,h,m,V,U,d,p,c,u,y,g,b=this.series,f=i[0][0],k=b[f],x="horizontal"==r,_=this.component.xAxis,L=this.component.yAxis,W=x?_.getAxis(k.xAxisIndex):L.getAxis(k.yAxisIndex),X=this._mapSize(W,i),v=X.gap,w=X.barGap,K=X.barWidthMap,I=X.barMaxWidthMap,J=X.barWidth,C=X.barMinHeightMap,S=X.interval,E=this.deepQuery([this.ecTheme,a],"island.r"),F=0,T=t;T>F&&null!=W.getNameByIndex(F);F++){x?m=W.getCoordByIndex(F)-v/2:V=W.getCoordByIndex(F)+v/2;for(var z=0,A=i.length;A>z;z++){var M=b[i[z][0]].yAxisIndex||0,O=b[i[z][0]].xAxisIndex||0;s=x?L.getAxis(M):_.getAxis(O),d=U=c=p=s.getCoord(0);for(var P=0,D=i[z].length;D>P;P++)f=i[z][P],k=b[f],y=k.data[F],g=this.getDataFromOption(y,"-"),o[f]=o[f]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},h=Math.min(I[f]||Number.MAX_VALUE,K[f]||J),"-"!==g&&(g>0?(l=P>0?s.getCoordSize(g):x?d-s.getCoord(g):s.getCoord(g)-d,1===D&&C[f]>l&&(l=C[f]),x?(U-=l,V=U):(m=U,U+=l)):0>g?(l=P>0?s.getCoordSize(g):x?s.getCoord(g)-c:c-s.getCoord(g),1===D&&C[f]>l&&(l=C[f]),x?(V=p,p+=l):(p-=l,m=p)):(l=0,x?(U-=l,V=U):(m=U,U+=l)),o[f][F]=x?m+h/2:V-h/2,o[f].min>g&&(o[f].min=g,x?(o[f].minY=V,o[f].minX=o[f][F]):(o[f].minX=m+l,o[f].minY=o[f][F])),o[f].max<g&&(o[f].max=g,x?(o[f].maxY=V,o[f].maxX=o[f][F]):(o[f].maxX=m+l,o[f].maxY=o[f][F])),o[f].sum+=g,o[f].counter++,F%S===0&&(u=this._getBarItem(f,F,W.getNameByIndex(F),m,V-(x?0:h),x?h:l,x?l:h,x?"vertical":"horizontal"),this.shapeList.push(new n(u))));for(var P=0,D=i[z].length;D>P;P++)f=i[z][P],k=b[f],y=k.data[F],g=this.getDataFromOption(y,"-"),h=Math.min(I[f]||Number.MAX_VALUE,K[f]||J),"-"==g&&this.deepQuery([y,k,this.option],"calculable")&&(x?(U-=E,V=U):(m=U,U+=E),u=this._getBarItem(f,F,W.getNameByIndex(F),m,V-(x?0:h),x?h:E,x?E:h,x?"vertical":"horizontal"),u.hoverable=!1,u.draggable=!1,u.style.lineWidth=1,u.style.brushType="stroke",u.style.strokeColor=k.calculableHolderColor||this.ecTheme.calculableHolderColor||a.calculableHolderColor,this.shapeList.push(new n(u)));x?m+=h+w:V-=h+w}}this._calculMarkMapXY(o,i,x?"y":"x")},_buildHorizontal:function(e,t,i,n){return this._buildNormal(e,t,i,n,"horizontal")},_buildVertical:function(e,t,i,n){return this._buildNormal(e,t,i,n,"vertical")},_buildOther:function(e,t,i,a){for(var o=this.series,r=0,s=i.length;s>r;r++)for(var l=0,h=i[r].length;h>l;l++){var m=i[r][l],V=o[m],U=V.xAxisIndex||0,d=this.component.xAxis.getAxis(U),p=d.getCoord(0),c=V.yAxisIndex||0,u=this.component.yAxis.getAxis(c),y=u.getCoord(0);a[m]=a[m]||{min0:Number.POSITIVE_INFINITY,min1:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum0:0,sum1:0,counter0:0,counter1:0,average0:0,average1:0};for(var g=0,b=V.data.length;b>g;g++){var f=V.data[g],k=this.getDataFromOption(f,"-");if(k instanceof Array){var x,_,L=d.getCoord(k[0]),W=u.getCoord(k[1]),X=[f,V],v=this.deepQuery(X,"barWidth")||10,w=this.deepQuery(X,"barHeight");null!=w?(x="horizontal",k[0]>0?(v=L-p,L-=v):v=k[0]<0?p-L:0,_=this._getBarItem(m,g,k[0],L,W-w/2,v,w,x)):(x="vertical",k[1]>0?w=y-W:k[1]<0?(w=W-y,W-=w):w=0,_=this._getBarItem(m,g,k[0],L-v/2,W,v,w,x)),this.shapeList.push(new n(_)),L=d.getCoord(k[0]),W=u.getCoord(k[1]),a[m].min0>k[0]&&(a[m].min0=k[0],a[m].minY0=W,a[m].minX0=L),a[m].max0<k[0]&&(a[m].max0=k[0],a[m].maxY0=W,a[m].maxX0=L),a[m].sum0+=k[0],a[m].counter0++,a[m].min1>k[1]&&(a[m].min1=k[1],a[m].minY1=W,a[m].minX1=L),a[m].max1<k[1]&&(a[m].max1=k[1],a[m].maxY1=W,a[m].maxX1=L),a[m].sum1+=k[1],a[m].counter1++}}}this._calculMarkMapXY(a,i,"xy")},_mapSize:function(e,t,i){var n,a,o=this._findSpecialBarSzie(t,i),r=o.barWidthMap,s=o.barMaxWidthMap,l=o.barMinHeightMap,h=o.sBarWidthCounter,m=o.sBarWidthTotal,V=o.barGap,U=o.barCategoryGap,d=1;if(t.length!=h){if(i)n=e.getGap(),V=0,a=+(n/t.length).toFixed(2),0>=a&&(d=Math.floor(t.length/n),a=1);else if(n="string"==typeof U&&U.match(/%$/)?(e.getGap()*(100-parseFloat(U))/100).toFixed(2)-0:e.getGap()-U,"string"==typeof V&&V.match(/%$/)?(V=parseFloat(V)/100,a=+((n-m)/((t.length-1)*V+t.length-h)).toFixed(2),V=a*V):(V=parseFloat(V),a=+((n-m-V*(t.length-1))/(t.length-h)).toFixed(2)),0>=a)return this._mapSize(e,t,!0)}else if(n=h>1?"string"==typeof U&&U.match(/%$/)?+(e.getGap()*(100-parseFloat(U))/100).toFixed(2):e.getGap()-U:m,a=0,V=h>1?+((n-m)/(h-1)).toFixed(2):0,0>V)return this._mapSize(e,t,!0);return this._recheckBarMaxWidth(t,r,s,l,n,a,V,d)},_findSpecialBarSzie:function(e,t){for(var i,n,a,o,r=this.series,s={},l={},h={},m=0,V=0,U=0,d=e.length;d>U;U++)for(var p={barWidth:!1,barMaxWidth:!1},c=0,u=e[U].length;u>c;c++){var y=e[U][c],g=r[y];if(!t){if(p.barWidth)s[y]=i;else if(i=this.query(g,"barWidth"),null!=i){s[y]=i,V+=i,m++,p.barWidth=!0;for(var b=0,f=c;f>b;b++){var k=e[U][b];s[k]=i}}if(p.barMaxWidth)l[y]=n;else if(n=this.query(g,"barMaxWidth"),null!=n){l[y]=n,p.barMaxWidth=!0;for(var b=0,f=c;f>b;b++){var k=e[U][b];l[k]=n}}}h[y]=this.query(g,"barMinHeight"),a=null!=a?a:this.query(g,"barGap"),o=null!=o?o:this.query(g,"barCategoryGap")}return{barWidthMap:s,barMaxWidthMap:l,barMinHeightMap:h,sBarWidth:i,sBarMaxWidth:n,sBarWidthCounter:m,sBarWidthTotal:V,barGap:a,barCategoryGap:o}},_recheckBarMaxWidth:function(e,t,i,n,a,o,r,s){for(var l=0,h=e.length;h>l;l++){var m=e[l][0];i[m]&&i[m]<o&&(a-=o-i[m])}return{barWidthMap:t,barMaxWidthMap:i,barMinHeightMap:n,gap:a,barWidth:o,barGap:r,interval:s}},_getBarItem:function(e,t,i,n,a,r,l,h){var m,V=this.series,U=V[e],d=U.data[t],p=this._sIndex2ColorMap[e],c=[d,U],u=this.deepMerge(c,"itemStyle.normal"),y=this.deepMerge(c,"itemStyle.emphasis"),g=u.barBorderWidth;m={zlevel:U.zlevel,z:U.z,clickable:this.deepQuery(c,"clickable"),style:{x:n,y:a,width:r,height:l,brushType:"both",color:this.getItemStyleColor(this.deepQuery(c,"itemStyle.normal.color")||p,e,t,d),radius:u.barBorderRadius,lineWidth:g,strokeColor:u.barBorderColor},highlightStyle:{color:this.getItemStyleColor(this.deepQuery(c,"itemStyle.emphasis.color"),e,t,d),radius:y.barBorderRadius,lineWidth:y.barBorderWidth,strokeColor:y.barBorderColor},_orient:h};var b=m.style;m.highlightStyle.color=m.highlightStyle.color||("string"==typeof b.color?s.lift(b.color,-.3):b.color),b.x=Math.floor(b.x),b.y=Math.floor(b.y),b.height=Math.ceil(b.height),b.width=Math.ceil(b.width),g>0&&b.height>g&&b.width>g?(b.y+=g/2,b.height-=g,b.x+=g/2,b.width-=g):b.brushType="fill",m.highlightStyle.textColor=m.highlightStyle.color,m=this.addLabel(m,U,d,i,h);for(var f=[b,m.highlightStyle],k=0,x=f.length;x>k;k++){var _=f[k].textPosition;if("insideLeft"===_||"insideRight"===_||"insideTop"===_||"insideBottom"===_){var L=5;switch(_){case"insideLeft":f[k].textX=b.x+L,f[k].textY=b.y+b.height/2,f[k].textAlign="left",f[k].textBaseline="middle";break;case"insideRight":f[k].textX=b.x+b.width-L,f[k].textY=b.y+b.height/2,f[k].textAlign="right",f[k].textBaseline="middle";break;case"insideTop":f[k].textX=b.x+b.width/2,f[k].textY=b.y+L/2,f[k].textAlign="center",f[k].textBaseline="top";break;case"insideBottom":f[k].textX=b.x+b.width/2,f[k].textY=b.y+b.height-L/2,f[k].textAlign="center",f[k].textBaseline="bottom"}f[k].textPosition="specific",f[k].textColor=f[k].textColor||"#fff"}}return this.deepQuery([d,U,this.option],"calculable")&&(this.setCalculable(m),m.draggable=!0),o.pack(m,V[e],e,V[e].data[t],t,i),m},getMarkCoord:function(e,t){var i,n,a=this.series[e],o=this.xMarkMap[e],r=this.component.xAxis.getAxis(a.xAxisIndex),s=this.component.yAxis.getAxis(a.yAxisIndex);if(!t.type||"max"!==t.type&&"min"!==t.type&&"average"!==t.type)if(o.isHorizontal){i="string"==typeof t.xAxis&&r.getIndexByName?r.getIndexByName(t.xAxis):t.xAxis||0;var l=o[i];l=null!=l?l:"string"!=typeof t.xAxis&&r.getCoordByIndex?r.getCoordByIndex(t.xAxis||0):r.getCoord(t.xAxis||0),n=[l,s.getCoord(t.yAxis||0)]}else{i="string"==typeof t.yAxis&&s.getIndexByName?s.getIndexByName(t.yAxis):t.yAxis||0;var h=o[i];h=null!=h?h:"string"!=typeof t.yAxis&&s.getCoordByIndex?s.getCoordByIndex(t.yAxis||0):s.getCoord(t.yAxis||0),n=[r.getCoord(t.xAxis||0),h]}else{var m=null!=t.valueIndex?t.valueIndex:null!=o.maxX0?"1":"";n=[o[t.type+"X"+m],o[t.type+"Y"+m],o[t.type+"Line"+m],o[t.type+m]]}return n},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){c--,0===c&&t&&t()}for(var n=this.series,a={},r=0,s=e.length;s>r;r++)a[e[r][0]]=e[r];for(var l,h,m,V,U,d,p,c=0,r=this.shapeList.length-1;r>=0;r--)if(d=o.get(this.shapeList[r],"seriesIndex"),a[d]&&!a[d][3]&&"rectangle"===this.shapeList[r].type){if(p=o.get(this.shapeList[r],"dataIndex"),U=n[d],a[d][2]&&p===U.data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!a[d][2]&&0===p){this.zr.delShape(this.shapeList[r].id);continue}"horizontal"===this.shapeList[r]._orient?(V=this.component.yAxis.getAxis(U.yAxisIndex||0).getGap(),m=a[d][2]?-V:V,l=0):(h=this.component.xAxis.getAxis(U.xAxisIndex||0).getGap(),l=a[d][2]?h:-h,m=0),this.shapeList[r].position=[0,0],c++,this.zr.animate(this.shapeList[r].id,"").when(this.query(this.option,"animationDurationUpdate"),{position:[l,m]}).done(i).start()}c||t&&t()}},r.inherits(t,i),e("../chart").define("bar",t),t}),i("echarts/chart/scatter",["require","./base","../util/shape/Symbol","../component/axis","../component/grid","../component/dataZoom","../component/dataRange","../config","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../util/shape/Symbol");e("../component/axis"),e("../component/grid"),e("../component/dataZoom"),e("../component/dataRange");var a=e("../config");a.scatter={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,symbolSize:4,large:!1,largeThreshold:2e3,itemStyle:{normal:{label:{show:!1}},emphasis:{label:{show:!1}}}};var o=e("zrender/tool/util"),r=e("zrender/tool/color");return t.prototype={type:a.CHART_TYPE_SCATTER,_buildShape:function(){var e=this.series;this._sIndex2ColorMap={},this._symbol=this.option.symbolList,this._sIndex2ShapeMap={},this.selectedMap={},this.xMarkMap={};for(var t,i,n,o,s=this.component.legend,l=[],h=0,m=e.length;m>h;h++)if(t=e[h],i=t.name,t.type===a.CHART_TYPE_SCATTER){if(e[h]=this.reformOption(e[h]),this.legendHoverLink=e[h].legendHoverLink||this.legendHoverLink,this._sIndex2ShapeMap[h]=this.query(t,"symbol")||this._symbol[h%this._symbol.length],s){if(this.selectedMap[i]=s.isSelected(i),this._sIndex2ColorMap[h]=r.alpha(s.getColor(i),.5),n=s.getItemShape(i)){var o=this._sIndex2ShapeMap[h];n.style.brushType=o.match("empty")?"stroke":"both",o=o.replace("empty","").toLowerCase(),o.match("rectangle")&&(n.style.x+=Math.round((n.style.width-n.style.height)/2),n.style.width=n.style.height),o.match("star")&&(n.style.n=o.replace("star","")-0||5,o="star"),o.match("image")&&(n.style.image=o.replace(new RegExp("^image:\\/\\/"),""),n.style.x+=Math.round((n.style.width-n.style.height)/2),n.style.width=n.style.height,o="image"),n.style.iconType=o,s.setItemShape(i,n)}}else this.selectedMap[i]=!0,this._sIndex2ColorMap[h]=r.alpha(this.zr.getColor(h),.5);this.selectedMap[i]&&l.push(h)}this._buildSeries(l),this.addShapeList()},_buildSeries:function(e){if(0!==e.length){for(var t,i,n,a,o,r,s,l,h=this.series,m={},V=0,U=e.length;U>V;V++)if(t=e[V],i=h[t],0!==i.data.length){o=this.component.xAxis.getAxis(i.xAxisIndex||0),r=this.component.yAxis.getAxis(i.yAxisIndex||0),m[t]=[];for(var d=0,p=i.data.length;p>d;d++)n=i.data[d],a=this.getDataFromOption(n,"-"),"-"===a||a.length<2||(s=o.getCoord(a[0]),l=r.getCoord(a[1]),m[t].push([s,l,d,n.name||""]));this.xMarkMap[t]=this._markMap(o,r,i.data,m[t]),this.buildMark(t)}this._buildPointList(m)}},_markMap:function(e,t,i,n){for(var a,o={min0:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,sum0:0,counter0:0,average0:0,min1:Number.POSITIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum1:0,counter1:0,average1:0},r=0,s=n.length;s>r;r++)a=i[n[r][2]].value||i[n[r][2]],o.min0>a[0]&&(o.min0=a[0],o.minY0=n[r][1],o.minX0=n[r][0]),o.max0<a[0]&&(o.max0=a[0],o.maxY0=n[r][1],o.maxX0=n[r][0]),o.sum0+=a[0],o.counter0++,o.min1>a[1]&&(o.min1=a[1],o.minY1=n[r][1],o.minX1=n[r][0]),o.max1<a[1]&&(o.max1=a[1],o.maxY1=n[r][1],o.maxX1=n[r][0]),o.sum1+=a[1],o.counter1++;var l=this.component.grid.getX(),h=this.component.grid.getXend(),m=this.component.grid.getY(),V=this.component.grid.getYend();o.average0=o.sum0/o.counter0;var U=e.getCoord(o.average0);o.averageLine0=[[U,V],[U,m]],o.minLine0=[[o.minX0,V],[o.minX0,m]],o.maxLine0=[[o.maxX0,V],[o.maxX0,m]],o.average1=o.sum1/o.counter1;var d=t.getCoord(o.average1);return o.averageLine1=[[l,d],[h,d]],o.minLine1=[[l,o.minY1],[h,o.minY1]],o.maxLine1=[[l,o.maxY1],[h,o.maxY1]],o},_buildPointList:function(e){var t,i,n,a,o=this.series;for(var r in e)if(t=o[r],i=e[r],t.large&&t.data.length>t.largeThreshold)this.shapeList.push(this._getLargeSymbol(t,i,this.getItemStyleColor(this.query(t,"itemStyle.normal.color"),r,-1)||this._sIndex2ColorMap[r]));else for(var s=0,l=i.length;l>s;s++)n=i[s],a=this._getSymbol(r,n[2],n[3],n[0],n[1]),a&&this.shapeList.push(a)},_getSymbol:function(e,t,i,n,a){var o,r=this.series,s=r[e],l=s.data[t],h=this.component.dataRange;if(h){if(o=isNaN(l[2])?this._sIndex2ColorMap[e]:h.getColor(l[2]),!o)return null}else o=this._sIndex2ColorMap[e];var m=this.getSymbolShape(s,e,l,t,i,n,a,this._sIndex2ShapeMap[e],o,"rgba(0,0,0,0)","vertical");return m.zlevel=s.zlevel,m.z=s.z,m._main=!0,m},_getLargeSymbol:function(e,t,i){return new n({zlevel:e.zlevel,z:e.z,_main:!0,hoverable:!1,style:{pointList:t,color:i,strokeColor:i},highlightStyle:{pointList:[]}})},getMarkCoord:function(e,t){var i,n=this.series[e],a=this.xMarkMap[e],o=this.component.xAxis.getAxis(n.xAxisIndex),r=this.component.yAxis.getAxis(n.yAxisIndex);if(!t.type||"max"!==t.type&&"min"!==t.type&&"average"!==t.type)i=["string"!=typeof t.xAxis&&o.getCoordByIndex?o.getCoordByIndex(t.xAxis||0):o.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&r.getCoordByIndex?r.getCoordByIndex(t.yAxis||0):r.getCoord(t.yAxis||0)];else{var s=null!=t.valueIndex?t.valueIndex:1;i=[a[t.type+"X"+s],a[t.type+"Y"+s],a[t.type+"Line"+s],a[t.type+s]]}return i},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},ondataRange:function(e,t){this.component.dataRange&&(this.refresh(),t.needRefresh=!0)}},o.inherits(t,i),e("../chart").define("scatter",t),t}),i("echarts/component/dataRange",["require","./base","zrender/shape/Text","zrender/shape/Rectangle","../util/shape/HandlePolygon","../config","zrender/tool/util","zrender/tool/event","zrender/tool/area","zrender/tool/color","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var s=this;s._ondrift=function(e,t){return s.__ondrift(this,e,t)},s._ondragend=function(){return s.__ondragend()},s._dataRangeSelected=function(e){return s.__dataRangeSelected(e)},s._dispatchHoverLink=function(e){return s.__dispatchHoverLink(e)},s._onhoverlink=function(e){return s.__onhoverlink(e); + +},this._selectedMap={},this._range={},this.refresh(a),t.bind(r.EVENT.HOVER,this._onhoverlink)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Rectangle"),o=e("../util/shape/HandlePolygon"),r=e("../config");r.dataRange={zlevel:0,z:4,show:!0,orient:"vertical",x:"left",y:"bottom",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,precision:0,splitNumber:5,splitList:null,calculable:!1,selectedMode:!0,hoverLink:!0,realtime:!0,color:["#006edd","#e0ffff"],textStyle:{color:"#333"}};var s=e("zrender/tool/util"),l=e("zrender/tool/event"),h=e("zrender/tool/area"),m=e("zrender/tool/color");return t.prototype={type:r.COMPONENT_TYPE_DATARANGE,_textGap:10,_buildShape:function(){if(this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._isContinuity()?this._buildGradient():this._buildItem(),this.dataRangeOption.show)for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e]);this._syncShapeFromRange()},_buildItem:function(){var e,t,i,o,r=this._valueTextList,s=r.length,l=this.getFont(this.dataRangeOption.textStyle),m=this._itemGroupLocation.x,V=this._itemGroupLocation.y,U=this.dataRangeOption.itemWidth,d=this.dataRangeOption.itemHeight,p=this.dataRangeOption.itemGap,c=h.getTextHeight("国",l);"vertical"==this.dataRangeOption.orient&&"right"==this.dataRangeOption.x&&(m=this._itemGroupLocation.x+this._itemGroupLocation.width-U);var u=!0;this.dataRangeOption.text&&(u=!1,this.dataRangeOption.text[0]&&(i=this._getTextShape(m,V,this.dataRangeOption.text[0]),"horizontal"==this.dataRangeOption.orient?m+=h.getTextWidth(this.dataRangeOption.text[0],l)+this._textGap:(V+=c+this._textGap,i.style.y+=c/2+this._textGap,i.style.textBaseline="bottom"),this.shapeList.push(new n(i))));for(var y=0;s>y;y++)e=r[y],o=this.getColorByIndex(y),t=this._getItemShape(m,V,U,d,this._selectedMap[y]?o:"#ccc"),t._idx=y,t.onmousemove=this._dispatchHoverLink,this.dataRangeOption.selectedMode&&(t.clickable=!0,t.onclick=this._dataRangeSelected),this.shapeList.push(new a(t)),u&&(i={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:m+U+5,y:V,color:this._selectedMap[y]?this.dataRangeOption.textStyle.color:"#ccc",text:r[y],textFont:l,textBaseline:"top"},highlightStyle:{brushType:"fill"}},"vertical"==this.dataRangeOption.orient&&"right"==this.dataRangeOption.x&&(i.style.x-=U+10,i.style.textAlign="right"),i._idx=y,i.onmousemove=this._dispatchHoverLink,this.dataRangeOption.selectedMode&&(i.clickable=!0,i.onclick=this._dataRangeSelected),this.shapeList.push(new n(i))),"horizontal"==this.dataRangeOption.orient?m+=U+(u?5:0)+(u?h.getTextWidth(e,l):0)+p:V+=d+p;!u&&this.dataRangeOption.text[1]&&("horizontal"==this.dataRangeOption.orient?m=m-p+this._textGap:V=V-p+this._textGap,i=this._getTextShape(m,V,this.dataRangeOption.text[1]),"horizontal"!=this.dataRangeOption.orient&&(i.style.y-=5,i.style.textBaseline="top"),this.shapeList.push(new n(i)))},_buildGradient:function(){var t,i,o=this.getFont(this.dataRangeOption.textStyle),r=this._itemGroupLocation.x,s=this._itemGroupLocation.y,l=this.dataRangeOption.itemWidth,m=this.dataRangeOption.itemHeight,V=h.getTextHeight("国",o),U=10,d=!0;this.dataRangeOption.text&&(d=!1,this.dataRangeOption.text[0]&&(i=this._getTextShape(r,s,this.dataRangeOption.text[0]),"horizontal"==this.dataRangeOption.orient?r+=h.getTextWidth(this.dataRangeOption.text[0],o)+this._textGap:(s+=V+this._textGap,i.style.y+=V/2+this._textGap,i.style.textBaseline="bottom"),this.shapeList.push(new n(i))));for(var p=e("zrender/tool/color"),c=1/(this.dataRangeOption.color.length-1),u=[],y=0,g=this.dataRangeOption.color.length;g>y;y++)u.push([y*c,this.dataRangeOption.color[y]]);"horizontal"==this.dataRangeOption.orient?(t={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:r,y:s,width:l*U,height:m,color:p.getLinearGradient(r,s,r+l*U,s,u)},hoverable:!1},r+=l*U+this._textGap):(t={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:r,y:s,width:l,height:m*U,color:p.getLinearGradient(r,s,r,s+m*U,u)},hoverable:!1},s+=m*U+this._textGap),this.shapeList.push(new a(t)),this._calculableLocation=t.style,this.dataRangeOption.calculable&&(this._buildFiller(),this._bulidMask(),this._bulidHandle()),this._buildIndicator(),!d&&this.dataRangeOption.text[1]&&(i=this._getTextShape(r,s,this.dataRangeOption.text[1]),this.shapeList.push(new n(i)))},_buildIndicator:function(){var e,t,i=this._calculableLocation.x,n=this._calculableLocation.y,a=this._calculableLocation.width,r=this._calculableLocation.height,s=5;"horizontal"==this.dataRangeOption.orient?"bottom"!=this.dataRangeOption.y?(e=[[i,n+r],[i-s,n+r+s],[i+s,n+r+s]],t="bottom"):(e=[[i,n],[i-s,n-s],[i+s,n-s]],t="top"):"right"!=this.dataRangeOption.x?(e=[[i+a,n],[i+a+s,n-s],[i+a+s,n+s]],t="right"):(e=[[i,n],[i-s,n-s],[i-s,n+s]],t="left"),this._indicatorShape={style:{pointList:e,color:"#fff",__rect:{x:Math.min(e[0][0],e[1][0]),y:Math.min(e[0][1],e[1][1]),width:s*("horizontal"==this.dataRangeOption.orient?2:1),height:s*("horizontal"==this.dataRangeOption.orient?1:2)}},highlightStyle:{brushType:"fill",textPosition:t,textColor:this.dataRangeOption.textStyle.color},hoverable:!1},this._indicatorShape=new o(this._indicatorShape)},_buildFiller:function(){this._fillerShape={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:this._calculableLocation.x,y:this._calculableLocation.y,width:this._calculableLocation.width,height:this._calculableLocation.height,color:"rgba(255,255,255,0)"},highlightStyle:{strokeColor:"rgba(255,255,255,0.5)",lineWidth:1},draggable:!0,ondrift:this._ondrift,ondragend:this._ondragend,onmousemove:this._dispatchHoverLink,_type:"filler"},this._fillerShape=new a(this._fillerShape),this.shapeList.push(this._fillerShape)},_bulidHandle:function(){var e,t,i,n,a,r,s,l,m=this._calculableLocation.x,V=this._calculableLocation.y,U=this._calculableLocation.width,d=this._calculableLocation.height,p=this.getFont(this.dataRangeOption.textStyle),c=h.getTextHeight("国",p),u=Math.max(h.getTextWidth(this._textFormat(this.dataRangeOption.max),p),h.getTextWidth(this._textFormat(this.dataRangeOption.min),p))+2;"horizontal"==this.dataRangeOption.orient?"bottom"!=this.dataRangeOption.y?(e=[[m,V],[m,V+d+c],[m-c,V+d+c],[m-1,V+d],[m-1,V]],t=m-u/2-c,i=V+d+c/2+2,n={x:m-u-c,y:V+d,width:u+c,height:c},a=[[m+U,V],[m+U,V+d+c],[m+U+c,V+d+c],[m+U+1,V+d],[m+U+1,V]],r=m+U+u/2+c,s=i,l={x:m+U,y:V+d,width:u+c,height:c}):(e=[[m,V+d],[m,V-c],[m-c,V-c],[m-1,V],[m-1,V+d]],t=m-u/2-c,i=V-c/2-2,n={x:m-u-c,y:V-c,width:u+c,height:c},a=[[m+U,V+d],[m+U,V-c],[m+U+c,V-c],[m+U+1,V],[m+U+1,V+d]],r=m+U+u/2+c,s=i,l={x:m+U,y:V-c,width:u+c,height:c}):(u+=c,"right"!=this.dataRangeOption.x?(e=[[m,V],[m+U+c,V],[m+U+c,V-c],[m+U,V-1],[m,V-1]],t=m+U+u/2+c/2,i=V-c/2,n={x:m+U,y:V-c,width:u+c,height:c},a=[[m,V+d],[m+U+c,V+d],[m+U+c,V+c+d],[m+U,V+1+d],[m,V+d+1]],r=t,s=V+d+c/2,l={x:m+U,y:V+d,width:u+c,height:c}):(e=[[m+U,V],[m-c,V],[m-c,V-c],[m,V-1],[m+U,V-1]],t=m-u/2-c/2,i=V-c/2,n={x:m-u-c,y:V-c,width:u+c,height:c},a=[[m+U,V+d],[m-c,V+d],[m-c,V+c+d],[m,V+1+d],[m+U,V+d+1]],r=t,s=V+d+c/2,l={x:m-u-c,y:V+d,width:u+c,height:c})),this._startShape={style:{pointList:e,text:this._textFormat(this.dataRangeOption.max),textX:t,textY:i,textFont:p,color:this.getColor(this.dataRangeOption.max),rect:n,x:e[0][0],y:e[0][1],_x:e[0][0],_y:e[0][1]}},this._startShape.highlightStyle={strokeColor:this._startShape.style.color,lineWidth:1},this._endShape={style:{pointList:a,text:this._textFormat(this.dataRangeOption.min),textX:r,textY:s,textFont:p,color:this.getColor(this.dataRangeOption.min),rect:l,x:a[0][0],y:a[0][1],_x:a[0][0],_y:a[0][1]}},this._endShape.highlightStyle={strokeColor:this._endShape.style.color,lineWidth:1},this._startShape.zlevel=this._endShape.zlevel=this.getZlevelBase(),this._startShape.z=this._endShape.z=this.getZBase()+1,this._startShape.draggable=this._endShape.draggable=!0,this._startShape.ondrift=this._endShape.ondrift=this._ondrift,this._startShape.ondragend=this._endShape.ondragend=this._ondragend,this._startShape.style.textColor=this._endShape.style.textColor=this.dataRangeOption.textStyle.color,this._startShape.style.textAlign=this._endShape.style.textAlign="center",this._startShape.style.textPosition=this._endShape.style.textPosition="specific",this._startShape.style.textBaseline=this._endShape.style.textBaseline="middle",this._startShape.style.width=this._endShape.style.width=0,this._startShape.style.height=this._endShape.style.height=0,this._startShape.style.textPosition=this._endShape.style.textPosition="specific",this._startShape=new o(this._startShape),this._endShape=new o(this._endShape),this.shapeList.push(this._startShape),this.shapeList.push(this._endShape)},_bulidMask:function(){var e=this._calculableLocation.x,t=this._calculableLocation.y,i=this._calculableLocation.width,n=this._calculableLocation.height;this._startMask={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:e,y:t,width:"horizontal"==this.dataRangeOption.orient?0:i,height:"horizontal"==this.dataRangeOption.orient?n:0,color:"#ccc"},hoverable:!1},this._endMask={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:"horizontal"==this.dataRangeOption.orient?e+i:e,y:"horizontal"==this.dataRangeOption.orient?t:t+n,width:"horizontal"==this.dataRangeOption.orient?0:i,height:"horizontal"==this.dataRangeOption.orient?n:0,color:"#ccc"},hoverable:!1},this._startMask=new a(this._startMask),this._endMask=new a(this._endMask),this.shapeList.push(this._startMask),this.shapeList.push(this._endMask)},_buildBackground:function(){var e=this.reformCssArray(this.dataRangeOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.dataRangeOption.borderWidth?"fill":"both",color:this.dataRangeOption.backgroundColor,strokeColor:this.dataRangeOption.borderColor,lineWidth:this.dataRangeOption.borderWidth}}))},_getItemGroupLocation:function(){var e=this._valueTextList,t=e.length,i=this.dataRangeOption.itemGap,n=this.dataRangeOption.itemWidth,a=this.dataRangeOption.itemHeight,o=0,r=0,s=this.getFont(this.dataRangeOption.textStyle),l=h.getTextHeight("国",s),m=10;if("horizontal"==this.dataRangeOption.orient){if(this.dataRangeOption.text||this._isContinuity())o=(this._isContinuity()?n*m+i:t*(n+i))+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[0]?h.getTextWidth(this.dataRangeOption.text[0],s)+this._textGap:0)+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[1]?h.getTextWidth(this.dataRangeOption.text[1],s)+this._textGap:0);else{n+=5;for(var V=0;t>V;V++)o+=n+h.getTextWidth(e[V],s)+i}o-=i,r=Math.max(l,a)}else{var U;if(this.dataRangeOption.text||this._isContinuity())r=(this._isContinuity()?a*m+i:t*(a+i))+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[0]?this._textGap+l:0)+(this.dataRangeOption.text&&"undefined"!=typeof this.dataRangeOption.text[1]?this._textGap+l:0),U=Math.max(h.getTextWidth(this.dataRangeOption.text&&this.dataRangeOption.text[0]||"",s),h.getTextWidth(this.dataRangeOption.text&&this.dataRangeOption.text[1]||"",s)),o=Math.max(n,U);else{r=(a+i)*t,n+=5,U=0;for(var V=0;t>V;V++)U=Math.max(U,h.getTextWidth(e[V],s));o=n+U}r-=i}var d,p=this.reformCssArray(this.dataRangeOption.padding),c=this.zr.getWidth();switch(this.dataRangeOption.x){case"center":d=Math.floor((c-o)/2);break;case"left":d=p[3]+this.dataRangeOption.borderWidth;break;case"right":d=c-o-p[1]-this.dataRangeOption.borderWidth;break;default:d=this.parsePercent(this.dataRangeOption.x,c),d=isNaN(d)?0:d}var u,y=this.zr.getHeight();switch(this.dataRangeOption.y){case"top":u=p[0]+this.dataRangeOption.borderWidth;break;case"bottom":u=y-r-p[2]-this.dataRangeOption.borderWidth;break;case"center":u=Math.floor((y-r)/2);break;default:u=this.parsePercent(this.dataRangeOption.y,y),u=isNaN(u)?0:u}if(this.dataRangeOption.calculable){var g=Math.max(h.getTextWidth(this.dataRangeOption.max,s),h.getTextWidth(this.dataRangeOption.min,s))+l;"horizontal"==this.dataRangeOption.orient?(g>d&&(d=g),d+o+g>c&&(d-=g)):(l>u&&(u=l),u+r+l>y&&(u-=l))}return{x:d,y:u,width:o,height:r}},_getTextShape:function(e,t,i){return{zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:"horizontal"==this.dataRangeOption.orient?e:this._itemGroupLocation.x+this._itemGroupLocation.width/2,y:"horizontal"==this.dataRangeOption.orient?this._itemGroupLocation.y+this._itemGroupLocation.height/2:t,color:this.dataRangeOption.textStyle.color,text:i,textFont:this.getFont(this.dataRangeOption.textStyle),textBaseline:"horizontal"==this.dataRangeOption.orient?"middle":"top",textAlign:"horizontal"==this.dataRangeOption.orient?"left":"center"},hoverable:!1}},_getItemShape:function(e,t,i,n,a){return{zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:e,y:t+1,width:i,height:n-2,color:a},highlightStyle:{strokeColor:a,lineWidth:1}}},__ondrift:function(e,t,i){var n=this._calculableLocation.x,a=this._calculableLocation.y,o=this._calculableLocation.width,r=this._calculableLocation.height;return"horizontal"==this.dataRangeOption.orient?e.style.x+t<=n?e.style.x=n:e.style.x+t+e.style.width>=n+o?e.style.x=n+o-e.style.width:e.style.x+=t:e.style.y+i<=a?e.style.y=a:e.style.y+i+e.style.height>=a+r?e.style.y=a+r-e.style.height:e.style.y+=i,"filler"==e._type?this._syncHandleShape():this._syncFillerShape(e),this.dataRangeOption.realtime&&this._dispatchDataRange(),!0},__ondragend:function(){this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(t.dragOut=!0,t.dragIn=!0,this.dataRangeOption.realtime||this._dispatchDataRange(),t.needRefresh=!1,this.isDragend=!1)},_syncShapeFromRange:function(){var e=this.dataRangeOption.range||{},t=e.start,i=e.end;if(t>i&&(t=[i,i=t][0]),this._range.end=null!=t?t:null!=this._range.end?this._range.end:0,this._range.start=null!=i?i:null!=this._range.start?this._range.start:100,100!=this._range.start||0!==this._range.end){if("horizontal"==this.dataRangeOption.orient){var n=this._fillerShape.style.width;this._fillerShape.style.x+=n*(100-this._range.start)/100,this._fillerShape.style.width=n*(this._range.start-this._range.end)/100}else{var a=this._fillerShape.style.height;this._fillerShape.style.y+=a*(100-this._range.start)/100,this._fillerShape.style.height=a*(this._range.start-this._range.end)/100}this.zr.modShape(this._fillerShape.id),this._syncHandleShape()}},_syncHandleShape:function(){var e=this._calculableLocation.x,t=this._calculableLocation.y,i=this._calculableLocation.width,n=this._calculableLocation.height;"horizontal"==this.dataRangeOption.orient?(this._startShape.style.x=this._fillerShape.style.x,this._startMask.style.width=this._startShape.style.x-e,this._endShape.style.x=this._fillerShape.style.x+this._fillerShape.style.width,this._endMask.style.x=this._endShape.style.x,this._endMask.style.width=e+i-this._endShape.style.x,this._range.start=Math.ceil(100-(this._startShape.style.x-e)/i*100),this._range.end=Math.floor(100-(this._endShape.style.x-e)/i*100)):(this._startShape.style.y=this._fillerShape.style.y,this._startMask.style.height=this._startShape.style.y-t,this._endShape.style.y=this._fillerShape.style.y+this._fillerShape.style.height,this._endMask.style.y=this._endShape.style.y,this._endMask.style.height=t+n-this._endShape.style.y,this._range.start=Math.ceil(100-(this._startShape.style.y-t)/n*100),this._range.end=Math.floor(100-(this._endShape.style.y-t)/n*100)),this._syncShape()},_syncFillerShape:function(e){var t,i,n=this._calculableLocation.x,a=this._calculableLocation.y,o=this._calculableLocation.width,r=this._calculableLocation.height;"horizontal"==this.dataRangeOption.orient?(t=this._startShape.style.x,i=this._endShape.style.x,e.id==this._startShape.id&&t>=i?(i=t,this._endShape.style.x=t):e.id==this._endShape.id&&t>=i&&(t=i,this._startShape.style.x=t),this._fillerShape.style.x=t,this._fillerShape.style.width=i-t,this._startMask.style.width=t-n,this._endMask.style.x=i,this._endMask.style.width=n+o-i,this._range.start=Math.ceil(100-(t-n)/o*100),this._range.end=Math.floor(100-(i-n)/o*100)):(t=this._startShape.style.y,i=this._endShape.style.y,e.id==this._startShape.id&&t>=i?(i=t,this._endShape.style.y=t):e.id==this._endShape.id&&t>=i&&(t=i,this._startShape.style.y=t),this._fillerShape.style.y=t,this._fillerShape.style.height=i-t,this._startMask.style.height=t-a,this._endMask.style.y=i,this._endMask.style.height=a+r-i,this._range.start=Math.ceil(100-(t-a)/r*100),this._range.end=Math.floor(100-(i-a)/r*100)),this._syncShape()},_syncShape:function(){this._startShape.position=[this._startShape.style.x-this._startShape.style._x,this._startShape.style.y-this._startShape.style._y],this._startShape.style.text=this._textFormat(this._gap*this._range.start+this.dataRangeOption.min),this._startShape.style.color=this._startShape.highlightStyle.strokeColor=this.getColor(this._gap*this._range.start+this.dataRangeOption.min),this._endShape.position=[this._endShape.style.x-this._endShape.style._x,this._endShape.style.y-this._endShape.style._y],this._endShape.style.text=this._textFormat(this._gap*this._range.end+this.dataRangeOption.min),this._endShape.style.color=this._endShape.highlightStyle.strokeColor=this.getColor(this._gap*this._range.end+this.dataRangeOption.min),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.modShape(this._startMask.id),this.zr.modShape(this._endMask.id),this.zr.modShape(this._fillerShape.id),this.zr.refreshNextFrame()},_dispatchDataRange:function(){this.messageCenter.dispatch(r.EVENT.DATA_RANGE,null,{range:{start:this._range.end,end:this._range.start}},this.myChart)},__dataRangeSelected:function(e){if("single"===this.dataRangeOption.selectedMode)for(var t in this._selectedMap)this._selectedMap[t]=!1;var i=e.target._idx;this._selectedMap[i]=!this._selectedMap[i];var n,a;this._useCustomizedSplit()?(n=this._splitList[i].max,a=this._splitList[i].min):(n=(this._colorList.length-i)*this._gap+this.dataRangeOption.min,a=n-this._gap),this.messageCenter.dispatch(r.EVENT.DATA_RANGE_SELECTED,e.event,{selected:this._selectedMap,target:i,valueMax:n,valueMin:a},this.myChart),this.messageCenter.dispatch(r.EVENT.REFRESH,null,null,this.myChart)},__dispatchHoverLink:function(e){var t,i;if(this.dataRangeOption.calculable){var n,a=this.dataRangeOption.max-this.dataRangeOption.min;n="horizontal"==this.dataRangeOption.orient?(1-(l.getX(e.event)-this._calculableLocation.x)/this._calculableLocation.width)*a:(1-(l.getY(e.event)-this._calculableLocation.y)/this._calculableLocation.height)*a,t=n-.05*a,i=n+.05*a}else if(this._useCustomizedSplit()){var o=e.target._idx;i=this._splitList[o].max,t=this._splitList[o].min}else{var o=e.target._idx;i=(this._colorList.length-o)*this._gap+this.dataRangeOption.min,t=i-this._gap}this.messageCenter.dispatch(r.EVENT.DATA_RANGE_HOVERLINK,e.event,{valueMin:t,valueMax:i},this.myChart)},__onhoverlink:function(e){if(this.dataRangeOption.show&&this.dataRangeOption.hoverLink&&this._indicatorShape&&e&&null!=e.seriesIndex&&null!=e.dataIndex){var t=e.value;if(""===t||isNaN(t))return;t<this.dataRangeOption.min?t=this.dataRangeOption.min:t>this.dataRangeOption.max&&(t=this.dataRangeOption.max),this._indicatorShape.position="horizontal"==this.dataRangeOption.orient?[(this.dataRangeOption.max-t)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._calculableLocation.width,0]:[0,(this.dataRangeOption.max-t)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._calculableLocation.height],this._indicatorShape.style.text=this._textFormat(e.value),this._indicatorShape.style.color=this.getColor(t),this.zr.addHoverShape(this._indicatorShape)}},_textFormat:function(e,t){var i=this.dataRangeOption;if(e!==-Number.MAX_VALUE&&(e=(+e).toFixed(i.precision)),null!=t&&t!==Number.MAX_VALUE&&(t=(+t).toFixed(i.precision)),i.formatter){if("string"==typeof i.formatter)return i.formatter.replace("{value}",e===-Number.MAX_VALUE?"min":e).replace("{value2}",t===Number.MAX_VALUE?"max":t);if("function"==typeof i.formatter)return i.formatter.call(this.myChart,e,t)}return null==t?e:e===-Number.MAX_VALUE?"< "+t:t===Number.MAX_VALUE?"> "+e:e+" - "+t},_isContinuity:function(){var e=this.dataRangeOption;return!(e.splitList?e.splitList.length>0:e.splitNumber>0)||e.calculable},_useCustomizedSplit:function(){var e=this.dataRangeOption;return e.splitList&&e.splitList.length>0},_buildColorList:function(e){if(this._colorList=m.getGradientColors(this.dataRangeOption.color,Math.max((e-this.dataRangeOption.color.length)/(this.dataRangeOption.color.length-1),0)+1),this._colorList.length>e){for(var t=this._colorList.length,i=[this._colorList[0]],n=t/(e-1),a=1;e-1>a;a++)i.push(this._colorList[Math.floor(a*n)]);i.push(this._colorList[t-1]),this._colorList=i}if(this._useCustomizedSplit())for(var o=this._splitList,a=0,t=o.length;t>a;a++)o[a].color&&(this._colorList[a]=o[a].color)},_buildGap:function(e){if(!this._useCustomizedSplit()){var t=this.dataRangeOption.precision;for(this._gap=(this.dataRangeOption.max-this.dataRangeOption.min)/e;this._gap.toFixed(t)-0!=this._gap&&5>t;)t++;this.dataRangeOption.precision=t,this._gap=((this.dataRangeOption.max-this.dataRangeOption.min)/e).toFixed(t)-0}},_buildDataList:function(e){for(var t=this._valueTextList=[],i=this.dataRangeOption,n=this._useCustomizedSplit(),a=0;e>a;a++){this._selectedMap[a]=!0;var o="";if(n){var r=this._splitList[e-1-a];o=null!=r.label?r.label:null!=r.single?this._textFormat(r.single):this._textFormat(r.min,r.max)}else o=this._textFormat(a*this._gap+i.min,(a+1)*this._gap+i.min);t.unshift(o)}},_buildSplitList:function(){if(this._useCustomizedSplit())for(var e=this.dataRangeOption.splitList,t=this._splitList=[],i=0,n=e.length;n>i;i++){var a=e[i];if(!a||null==a.start&&null==a.end)throw new Error("Empty item exists in splitList!");var o={label:a.label,color:a.color};o.min=a.start,o.max=a.end,o.min>o.max&&(o.min=[o.max,o.max=o.min][0]),o.min===o.max&&(o.single=o.max),null==o.min&&(o.min=-Number.MAX_VALUE),null==o.max&&(o.max=Number.MAX_VALUE),t.push(o)}},refresh:function(e){if(e){this.option=e,this.option.dataRange=this.reformOption(this.option.dataRange);var t=this.dataRangeOption=this.option.dataRange;if(!this._useCustomizedSplit()&&(null==t.min||null==t.max))throw new Error("option.dataRange.min or option.dataRange.max has not been defined.");this.myChart.canvasSupported||(t.realtime=!1);var i=this._isContinuity()?100:this._useCustomizedSplit()?t.splitList.length:t.splitNumber;this._buildSplitList(),this._buildColorList(i),this._buildGap(i),this._buildDataList(i)}this.clear(),this._buildShape()},getColor:function(e){if(isNaN(e))return null;var t;if(this._useCustomizedSplit()){for(var i=this._splitList,n=0,a=i.length;a>n;n++)if(i[n].min<=e&&i[n].max>=e){t=n;break}}else{if(this.dataRangeOption.min==this.dataRangeOption.max)return this._colorList[0];if(e<this.dataRangeOption.min?e=this.dataRangeOption.min:e>this.dataRangeOption.max&&(e=this.dataRangeOption.max),this.dataRangeOption.calculable&&(e-(this._gap*this._range.start+this.dataRangeOption.min)>5e-5||e-(this._gap*this._range.end+this.dataRangeOption.min)<-5e-5))return null;t=this._colorList.length-Math.ceil((e-this.dataRangeOption.min)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._colorList.length),t==this._colorList.length&&t--}return this._selectedMap[t]?this._colorList[t]:null},getColorByIndex:function(e){return e>=this._colorList.length?e=this._colorList.length-1:0>e&&(e=0),this._colorList[e]},onbeforDispose:function(){this.messageCenter.unbind(r.EVENT.HOVER,this._onhoverlink)}},s.inherits(t,i),e("../component").define("dataRange",t),t}),i("echarts/util/shape/HandlePolygon",["require","zrender/shape/Base","zrender/shape/Polygon","zrender/tool/util"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/shape/Polygon"),a=e("zrender/tool/util");return t.prototype={type:"handle-polygon",buildPath:function(e,t){n.prototype.buildPath(e,t)},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);e=i[0],t=i[1];var n=this.style.rect;return e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height?!0:!1}},a.inherits(t,i),t}),i("echarts/chart/k",["require","./base","../util/shape/Candle","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../util/shape/Candle");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var a=e("../config");a.k={zlevel:0,z:2,clickable:!0,hoverable:!0,legendHoverLink:!1,xAxisIndex:0,yAxisIndex:0,itemStyle:{normal:{color:"#fff",color0:"#00aa11",lineStyle:{width:1,color:"#ff3200",color0:"#00aa11"},label:{show:!1}},emphasis:{label:{show:!1}}}};var o=e("../util/ecData"),r=e("zrender/tool/util");return t.prototype={type:a.CHART_TYPE_K,_buildShape:function(){var e=this.series;this.selectedMap={};for(var t,i={top:[],bottom:[]},n=0,o=e.length;o>n;n++)e[n].type===a.CHART_TYPE_K&&(e[n]=this.reformOption(e[n]),this.legendHoverLink=e[n].legendHoverLink||this.legendHoverLink,t=this.component.xAxis.getAxis(e[n].xAxisIndex),t.type===a.COMPONENT_TYPE_AXIS_CATEGORY&&i[t.getPosition()].push(n));for(var r in i)i[r].length>0&&this._buildSinglePosition(r,i[r]);this.addShapeList()},_buildSinglePosition:function(e,t){var i=this._mapData(t),n=i.locationMap,a=i.maxDataLength;if(0!==a&&0!==n.length){this._buildHorizontal(t,a,n);for(var o=0,r=t.length;r>o;o++)this.buildMark(t[o])}},_mapData:function(e){for(var t,i,n=this.series,a=this.component.legend,o=[],r=0,s=0,l=e.length;l>s;s++)t=n[e[s]],i=t.name,this.selectedMap[i]=a?a.isSelected(i):!0,this.selectedMap[i]&&o.push(e[s]),r=Math.max(r,t.data.length);return{locationMap:o,maxDataLength:r}},_buildHorizontal:function(e,t,i){for(var n,a,o,r,s,l,h,m,V,U,d=this.series,p={},c=0,u=i.length;u>c;c++){n=i[c],a=d[n],o=a.xAxisIndex||0,r=this.component.xAxis.getAxis(o),h=a.barWidth||Math.floor(r.getGap()/2),U=a.barMaxWidth,U&&h>U&&(h=U),s=a.yAxisIndex||0,l=this.component.yAxis.getAxis(s),p[n]=[];for(var y=0,g=t;g>y&&null!=r.getNameByIndex(y);y++)m=a.data[y],V=this.getDataFromOption(m,"-"),"-"!==V&&4==V.length&&p[n].push([r.getCoordByIndex(y),h,l.getCoord(V[0]),l.getCoord(V[1]),l.getCoord(V[2]),l.getCoord(V[3]),y,r.getNameByIndex(y)])}this._buildKLine(e,p)},_buildKLine:function(e,t){for(var i,n,o,r,s,l,h,m,V,U,d,p,c,u,y,g,b,f=this.series,k=0,x=e.length;x>k;k++)if(b=e[k],d=f[b],u=t[b],this._isLarge(u)&&(u=this._getLargePointList(u)),d.type===a.CHART_TYPE_K&&null!=u){p=d,i=this.query(p,"itemStyle.normal.lineStyle.width"),n=this.query(p,"itemStyle.normal.lineStyle.color"),o=this.query(p,"itemStyle.normal.lineStyle.color0"),r=this.query(p,"itemStyle.normal.color"),s=this.query(p,"itemStyle.normal.color0"),l=this.query(p,"itemStyle.emphasis.lineStyle.width"),h=this.query(p,"itemStyle.emphasis.lineStyle.color"),m=this.query(p,"itemStyle.emphasis.lineStyle.color0"),V=this.query(p,"itemStyle.emphasis.color"),U=this.query(p,"itemStyle.emphasis.color0");for(var _=0,L=u.length;L>_;_++)y=u[_],c=d.data[y[6]],p=c,g=y[3]<y[2],this.shapeList.push(this._getCandle(b,y[6],y[7],y[0],y[1],y[2],y[3],y[4],y[5],g?this.query(p,"itemStyle.normal.color")||r:this.query(p,"itemStyle.normal.color0")||s,this.query(p,"itemStyle.normal.lineStyle.width")||i,g?this.query(p,"itemStyle.normal.lineStyle.color")||n:this.query(p,"itemStyle.normal.lineStyle.color0")||o,g?this.query(p,"itemStyle.emphasis.color")||V||r:this.query(p,"itemStyle.emphasis.color0")||U||s,this.query(p,"itemStyle.emphasis.lineStyle.width")||l||i,g?this.query(p,"itemStyle.emphasis.lineStyle.color")||h||n:this.query(p,"itemStyle.emphasis.lineStyle.color0")||m||o))}},_isLarge:function(e){return e[0][1]<.5},_getLargePointList:function(e){for(var t=this.component.grid.getWidth(),i=e.length,n=[],a=0;t>a;a++)n[a]=e[Math.floor(i/t*a)];return n},_getCandle:function(e,t,i,a,r,s,l,h,m,V,U,d,p,c,u){var y=this.series,g=y[e],b=g.data[t],f=[b,g],k={zlevel:g.zlevel,z:g.z,clickable:this.deepQuery(f,"clickable"),hoverable:this.deepQuery(f,"hoverable"),style:{x:a,y:[s,l,h,m],width:r,color:V,strokeColor:d,lineWidth:U,brushType:"both"},highlightStyle:{color:p,strokeColor:u,lineWidth:c},_seriesIndex:e};return k=this.addLabel(k,g,b,i),o.pack(k,g,e,b,t,i),k=new n(k)},getMarkCoord:function(e,t){var i=this.series[e],n=this.component.xAxis.getAxis(i.xAxisIndex),a=this.component.yAxis.getAxis(i.yAxisIndex);return["string"!=typeof t.xAxis&&n.getCoordByIndex?n.getCoordByIndex(t.xAxis||0):n.getCoord(t.xAxis||0),"string"!=typeof t.yAxis&&a.getCoordByIndex?a.getCoordByIndex(t.yAxis||0):a.getCoord(t.yAxis||0)]},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){p--,0===p&&t&&t()}for(var n=this.series,a={},r=0,s=e.length;s>r;r++)a[e[r][0]]=e[r];for(var l,h,m,V,U,d,p=0,r=0,s=this.shapeList.length;s>r;r++)if(U=this.shapeList[r]._seriesIndex,a[U]&&!a[U][3]&&"candle"===this.shapeList[r].type){if(d=o.get(this.shapeList[r],"dataIndex"),V=n[U],a[U][2]&&d===V.data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!a[U][2]&&0===d){this.zr.delShape(this.shapeList[r].id);continue}h=this.component.xAxis.getAxis(V.xAxisIndex||0).getGap(),l=a[U][2]?h:-h,m=0,p++,this.zr.animate(this.shapeList[r].id,"").when(this.query(this.option,"animationDurationUpdate"),{position:[l,m]}).done(i).start()}p||t&&t()}},r.inherits(t,i),e("../chart").define("k",t),t}),i("echarts/chart/pie",["require","./base","zrender/shape/Text","zrender/shape/Ring","zrender/shape/Circle","zrender/shape/Sector","zrender/shape/Polyline","../config","../util/ecData","zrender/tool/util","zrender/tool/math","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r.shapeHandler.onmouseover=function(e){var t=e.target,i=h.get(t,"seriesIndex"),n=h.get(t,"dataIndex"),a=h.get(t,"special"),o=[t.style.x,t.style.y],s=t.style.startAngle,l=t.style.endAngle,m=((l+s)/2+360)%360,V=t.highlightStyle.color,U=r.getLabel(i,n,a,o,m,V,!0);U&&r.zr.addHoverShape(U);var d=r.getLabelLine(i,n,o,t.style.r0,t.style.r,m,V,!0);d&&r.zr.addHoverShape(d)},this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Ring"),o=e("zrender/shape/Circle"),r=e("zrender/shape/Sector"),s=e("zrender/shape/Polyline"),l=e("../config");l.pie={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,center:["50%","50%"],radius:[0,"75%"],clockWise:!0,startAngle:90,minAngle:0,selectedOffset:10,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!1},labelLine:{show:!1,length:20,lineStyle:{width:1,type:"solid"}}}}};var h=e("../util/ecData"),m=e("zrender/tool/util"),V=e("zrender/tool/math"),U=e("zrender/tool/color");return t.prototype={type:l.CHART_TYPE_PIE,_buildShape:function(){var e=this.series,t=this.component.legend;this.selectedMap={},this._selected={};var i,n,r;this._selectedMode=!1;for(var s,m=0,V=e.length;V>m;m++)if(e[m].type===l.CHART_TYPE_PIE){if(e[m]=this.reformOption(e[m]),this.legendHoverLink=e[m].legendHoverLink||this.legendHoverLink,s=e[m].name||"",this.selectedMap[s]=t?t.isSelected(s):!0,!this.selectedMap[s])continue;i=this.parseCenter(this.zr,e[m].center),n=this.parseRadius(this.zr,e[m].radius),this._selectedMode=this._selectedMode||e[m].selectedMode,this._selected[m]=[],this.deepQuery([e[m],this.option],"calculable")&&(r={zlevel:e[m].zlevel,z:e[m].z,hoverable:!1,style:{x:i[0],y:i[1],r0:n[0]<=10?0:n[0]-10,r:n[1]+10,brushType:"stroke",lineWidth:1,strokeColor:e[m].calculableHolderColor||this.ecTheme.calculableHolderColor||l.calculableHolderColor}},h.pack(r,e[m],m,void 0,-1),this.setCalculable(r),r=n[0]<=10?new o(r):new a(r),this.shapeList.push(r)),this._buildSinglePie(m),this.buildMark(m)}this.addShapeList()},_buildSinglePie:function(e){for(var t,i=this.series,n=i[e],a=n.data,o=this.component.legend,r=0,s=0,l=0,h=Number.NEGATIVE_INFINITY,m=[],V=0,U=a.length;U>V;V++)t=a[V].name, +this.selectedMap[t]=o?o.isSelected(t):!0,this.selectedMap[t]&&!isNaN(a[V].value)&&(0!==+a[V].value?r++:s++,l+=+a[V].value,h=Math.max(h,+a[V].value));if(0!==l){for(var d,p,c,u,y,g,b=100,f=n.clockWise,k=(n.startAngle.toFixed(2)-0+360)%360,x=n.minAngle||.01,_=360-x*r-.01*s,L=n.roseType,V=0,U=a.length;U>V;V++)if(t=a[V].name,this.selectedMap[t]&&!isNaN(a[V].value)){if(p=o?o.getColor(t):this.zr.getColor(V),b=a[V].value/l,d="area"!=L?f?k-b*_-(0!==b?x:.01):b*_+k+(0!==b?x:.01):f?k-360/U:360/U+k,d=d.toFixed(2)-0,b=(100*b).toFixed(2),c=this.parseCenter(this.zr,n.center),u=this.parseRadius(this.zr,n.radius),y=+u[0],g=+u[1],"radius"===L?g=a[V].value/h*(g-y)*.8+.2*(g-y)+y:"area"===L&&(g=Math.sqrt(a[V].value/h)*(g-y)+y),f){var W;W=k,k=d,d=W}this._buildItem(m,e,V,b,a[V].selected,c,y,g,k,d,p),f||(k=d)}this._autoLabelLayout(m,c,g);for(var V=0,U=m.length;U>V;V++)this.shapeList.push(m[V]);m=null}},_buildItem:function(e,t,i,n,a,o,r,s,l,m,V){var U=this.series,d=((m+l)/2+360)%360,p=this.getSector(t,i,n,a,o,r,s,l,m,V);h.pack(p,U[t],t,U[t].data[i],i,U[t].data[i].name,n),e.push(p);var c=this.getLabel(t,i,n,o,d,V,!1),u=this.getLabelLine(t,i,o,r,s,d,V,!1);u&&(h.pack(u,U[t],t,U[t].data[i],i,U[t].data[i].name,n),e.push(u)),c&&(h.pack(c,U[t],t,U[t].data[i],i,U[t].data[i].name,n),c._labelLine=u,e.push(c))},getSector:function(e,t,i,n,a,o,s,l,h,m){var d=this.series,p=d[e],c=p.data[t],u=[c,p],y=this.deepMerge(u,"itemStyle.normal")||{},g=this.deepMerge(u,"itemStyle.emphasis")||{},b=this.getItemStyleColor(y.color,e,t,c)||m,f=this.getItemStyleColor(g.color,e,t,c)||("string"==typeof b?U.lift(b,-.2):b),k={zlevel:p.zlevel,z:p.z,clickable:this.deepQuery(u,"clickable"),style:{x:a[0],y:a[1],r0:o,r:s,startAngle:l,endAngle:h,brushType:"both",color:b,lineWidth:y.borderWidth,strokeColor:y.borderColor,lineJoin:"round"},highlightStyle:{color:f,lineWidth:g.borderWidth,strokeColor:g.borderColor,lineJoin:"round"},_seriesIndex:e,_dataIndex:t};if(n){var x=((k.style.startAngle+k.style.endAngle)/2).toFixed(2)-0;k.style._hasSelected=!0,k.style._x=k.style.x,k.style._y=k.style.y;var _=this.query(p,"selectedOffset");k.style.x+=V.cos(x,!0)*_,k.style.y-=V.sin(x,!0)*_,this._selected[e][t]=!0}else this._selected[e][t]=!1;return this._selectedMode&&(k.onclick=this.shapeHandler.onclick),this.deepQuery([c,p,this.option],"calculable")&&(this.setCalculable(k),k.draggable=!0),(this._needLabel(p,c,!0)||this._needLabelLine(p,c,!0))&&(k.onmouseover=this.shapeHandler.onmouseover),k=new r(k)},getLabel:function(e,t,i,a,o,r,s){var l=this.series,h=l[e],U=h.data[t];if(this._needLabel(h,U,s)){var d,p,c,u=s?"emphasis":"normal",y=m.merge(m.clone(U.itemStyle)||{},h.itemStyle),g=y[u].label,b=g.textStyle||{},f=a[0],k=a[1],x=this.parseRadius(this.zr,h.radius),_="middle";g.position=g.position||y.normal.label.position,"center"===g.position?(d=f,p=k,c="center"):"inner"===g.position||"inside"===g.position?(x=(x[0]+x[1])*(g.distance||.5),d=Math.round(f+x*V.cos(o,!0)),p=Math.round(k-x*V.sin(o,!0)),r="#fff",c="center"):(x=x[1]- -y[u].labelLine.length,d=Math.round(f+x*V.cos(o,!0)),p=Math.round(k-x*V.sin(o,!0)),c=o>=90&&270>=o?"right":"left"),"center"!=g.position&&"inner"!=g.position&&"inside"!=g.position&&(d+="left"===c?20:-20),U.__labelX=d-("left"===c?5:-5),U.__labelY=p;var L=new n({zlevel:h.zlevel,z:h.z+1,hoverable:!1,style:{x:d,y:p,color:b.color||r,text:this.getLabelText(e,t,i,u),textAlign:b.align||c,textBaseline:b.baseline||_,textFont:this.getFont(b)},highlightStyle:{brushType:"fill"}});return L._radius=x,L._labelPosition=g.position||"outer",L._rect=L.getRect(L.style),L._seriesIndex=e,L._dataIndex=t,L}},getLabelText:function(e,t,i,n){var a=this.series,o=a[e],r=o.data[t],s=this.deepQuery([r,o],"itemStyle."+n+".label.formatter");return s?"function"==typeof s?s.call(this.myChart,{seriesIndex:e,seriesName:o.name||"",series:o,dataIndex:t,data:r,name:r.name,value:r.value,percent:i}):"string"==typeof s?(s=s.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}"),s=s.replace("{a0}",o.name).replace("{b0}",r.name).replace("{c0}",r.value).replace("{d0}",i)):void 0:r.name},getLabelLine:function(e,t,i,n,a,o,r,l){var h=this.series,U=h[e],d=U.data[t];if(this._needLabelLine(U,d,l)){var p=l?"emphasis":"normal",c=m.merge(m.clone(d.itemStyle)||{},U.itemStyle),u=c[p].labelLine,y=u.lineStyle||{},g=i[0],b=i[1],f=a,k=this.parseRadius(this.zr,U.radius)[1]- -u.length,x=V.cos(o,!0),_=V.sin(o,!0);return new s({zlevel:U.zlevel,z:U.z+1,hoverable:!1,style:{pointList:[[g+f*x,b-f*_],[g+k*x,b-k*_],[d.__labelX,d.__labelY]],strokeColor:y.color||r,lineType:y.type,lineWidth:y.width},_seriesIndex:e,_dataIndex:t})}},_needLabel:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".label.show")},_needLabelLine:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".labelLine.show")},_autoLabelLayout:function(e,t,i){for(var n=[],a=[],o=0,r=e.length;r>o;o++)("outer"===e[o]._labelPosition||"outside"===e[o]._labelPosition)&&(e[o]._rect._y=e[o]._rect.y,e[o]._rect.x<t[0]?n.push(e[o]):a.push(e[o]));this._layoutCalculate(n,t,i,-1),this._layoutCalculate(a,t,i,1)},_layoutCalculate:function(e,t,i,n){function a(t,i,n){for(var a=t;i>a;a++)if(e[a]._rect.y+=n,e[a].style.y+=n,e[a]._labelLine&&(e[a]._labelLine.style.pointList[1][1]+=n,e[a]._labelLine.style.pointList[2][1]+=n),a>t&&i>a+1&&e[a+1]._rect.y>e[a]._rect.y+e[a]._rect.height)return void o(a,n/2);o(i-1,n/2)}function o(t,i){for(var n=t;n>=0&&(e[n]._rect.y-=i,e[n].style.y-=i,e[n]._labelLine&&(e[n]._labelLine.style.pointList[1][1]-=i,e[n]._labelLine.style.pointList[2][1]-=i),!(n>0&&e[n]._rect.y>e[n-1]._rect.y+e[n-1]._rect.height));n--);}function r(e,t,i,n,a){for(var o,r,s,l=i[0],h=i[1],m=a>0?t?Number.MAX_VALUE:0:t?Number.MAX_VALUE:0,V=0,U=e.length;U>V;V++)r=Math.abs(e[V]._rect.y-h),s=e[V]._radius-n,o=n+s>r?Math.sqrt((n+s+20)*(n+s+20)-Math.pow(e[V]._rect.y-h,2)):Math.abs(e[V]._rect.x+(a>0?0:e[V]._rect.width)-l),t&&o>=m&&(o=m-10),!t&&m>=o&&(o=m+10),e[V]._rect.x=e[V].style.x=l+o*a,e[V]._labelLine&&(e[V]._labelLine.style.pointList[2][0]=l+(o-5)*a,e[V]._labelLine.style.pointList[1][0]=l+(o-20)*a),m=o}e.sort(function(e,t){return e._rect.y-t._rect.y});for(var s,l=0,h=e.length,m=[],V=[],U=0;h>U;U++)s=e[U]._rect.y-l,0>s&&a(U,h,-s,n),l=e[U]._rect.y+e[U]._rect.height;this.zr.getHeight()-l<0&&o(h-1,l-this.zr.getHeight());for(var U=0;h>U;U++)e[U]._rect.y>=t[1]?V.push(e[U]):m.push(e[U]);r(V,!0,t,i,n),r(m,!1,t,i,n)},reformOption:function(e){var t=m.merge;return e=t(t(e||{},m.clone(this.ecTheme.pie||{})),m.clone(l.pie)),e.itemStyle.normal.label.textStyle=this.getTextStyle(e.itemStyle.normal.label.textStyle),e.itemStyle.emphasis.label.textStyle=this.getTextStyle(e.itemStyle.emphasis.label.textStyle),this.z=e.z,this.zlevel=e.zlevel,e},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){s--,0===s&&t&&t()}for(var n=this.series,a={},o=0,r=e.length;r>o;o++)a[e[o][0]]=e[o];var s=0,h={},m={},V={},U=this.shapeList;this.shapeList=[];for(var d,p,c,u={},o=0,r=e.length;r>o;o++)d=e[o][0],p=e[o][2],c=e[o][3],n[d]&&n[d].type===l.CHART_TYPE_PIE&&(p?(c||(h[d+"_"+n[d].data.length]="delete"),u[d]=1):c?u[d]=0:(h[d+"_-1"]="delete",u[d]=-1),this._buildSinglePie(d));for(var y,g,o=0,r=this.shapeList.length;r>o;o++)switch(d=this.shapeList[o]._seriesIndex,y=this.shapeList[o]._dataIndex,g=d+"_"+y,this.shapeList[o].type){case"sector":h[g]=this.shapeList[o];break;case"text":m[g]=this.shapeList[o];break;case"polyline":V[g]=this.shapeList[o]}this.shapeList=[];for(var b,o=0,r=U.length;r>o;o++)if(d=U[o]._seriesIndex,a[d]){if(y=U[o]._dataIndex+u[d],g=d+"_"+y,b=h[g],!b)continue;if("sector"===U[o].type)"delete"!=b?(s++,this.zr.animate(U[o].id,"style").when(400,{startAngle:b.style.startAngle,endAngle:b.style.endAngle}).done(i).start()):(s++,this.zr.animate(U[o].id,"style").when(400,u[d]<0?{startAngle:U[o].style.startAngle}:{endAngle:U[o].style.endAngle}).done(i).start());else if("text"===U[o].type||"polyline"===U[o].type)if("delete"===b)this.zr.delShape(U[o].id);else switch(U[o].type){case"text":s++,b=m[g],this.zr.animate(U[o].id,"style").when(400,{x:b.style.x,y:b.style.y}).done(i).start();break;case"polyline":s++,b=V[g],this.zr.animate(U[o].id,"style").when(400,{pointList:b.style.pointList}).done(i).start()}}this.shapeList=U,s||t&&t()},onclick:function(e){var t=this.series;if(this.isClick&&e.target){this.isClick=!1;for(var i,n=e.target,a=n.style,o=h.get(n,"seriesIndex"),r=h.get(n,"dataIndex"),s=0,m=this.shapeList.length;m>s;s++)if(this.shapeList[s].id===n.id){if(o=h.get(n,"seriesIndex"),r=h.get(n,"dataIndex"),a._hasSelected)n.style.x=n.style._x,n.style.y=n.style._y,n.style._hasSelected=!1,this._selected[o][r]=!1;else{var U=((a.startAngle+a.endAngle)/2).toFixed(2)-0;n.style._hasSelected=!0,this._selected[o][r]=!0,n.style._x=n.style.x,n.style._y=n.style.y,i=this.query(t[o],"selectedOffset"),n.style.x+=V.cos(U,!0)*i,n.style.y-=V.sin(U,!0)*i}this.zr.modShape(n.id)}else this.shapeList[s].style._hasSelected&&"single"===this._selectedMode&&(o=h.get(this.shapeList[s],"seriesIndex"),r=h.get(this.shapeList[s],"dataIndex"),this.shapeList[s].style.x=this.shapeList[s].style._x,this.shapeList[s].style.y=this.shapeList[s].style._y,this.shapeList[s].style._hasSelected=!1,this._selected[o][r]=!1,this.zr.modShape(this.shapeList[s].id));this.messageCenter.dispatch(l.EVENT.PIE_SELECTED,e.event,{selected:this._selected,target:h.get(n,"name")},this.myChart),this.zr.refreshNextFrame()}}},m.inherits(t,i),e("../chart").define("pie",t),t}),i("echarts/chart/radar",["require","./base","zrender/shape/Polygon","../component/polar","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../util/accMath","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Polygon");e("../component/polar");var a=e("../config");a.radar={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,polarIndex:0,itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid"}},emphasis:{label:{show:!1}}},symbolSize:2};var o=e("../util/ecData"),r=e("zrender/tool/util"),s=e("zrender/tool/color");return t.prototype={type:a.CHART_TYPE_RADAR,_buildShape:function(){this.selectedMap={},this._symbol=this.option.symbolList,this._queryTarget,this._dropBoxList=[],this._radarDataCounter=0;for(var e,t=this.series,i=this.component.legend,n=0,o=t.length;o>n;n++)t[n].type===a.CHART_TYPE_RADAR&&(this.serie=this.reformOption(t[n]),this.legendHoverLink=t[n].legendHoverLink||this.legendHoverLink,e=this.serie.name||"",this.selectedMap[e]=i?i.isSelected(e):!0,this.selectedMap[e]&&(this._queryTarget=[this.serie,this.option],this.deepQuery(this._queryTarget,"calculable")&&this._addDropBox(n),this._buildSingleRadar(n),this.buildMark(n)));this.addShapeList()},_buildSingleRadar:function(e){for(var t,i,n,a,o=this.component.legend,r=this.serie.data,s=this.deepQuery(this._queryTarget,"calculable"),l=0;l<r.length;l++)n=r[l].name||"",this.selectedMap[n]=o?o.isSelected(n):!0,this.selectedMap[n]&&(o?(i=o.getColor(n),t=o.getItemShape(n),t&&(t.style.brushType=this.deepQuery([r[l],this.serie],"itemStyle.normal.areaStyle")?"both":"stroke",o.setItemShape(n,t))):i=this.zr.getColor(l),a=this._getPointList(this.serie.polarIndex,r[l]),this._addSymbol(a,i,l,e,this.serie.polarIndex),this._addDataShape(a,i,r[l],e,l,s),this._radarDataCounter++)},_getPointList:function(e,t){for(var i,n,a=[],o=this.component.polar,r=0,s=t.value.length;s>r;r++)n=this.getDataFromOption(t.value[r]),i="-"!=n?o.getVector(e,r,n):!1,i&&a.push(i);return a},_addSymbol:function(e,t,i,n,a){for(var r,s=this.series,l=this.component.polar,h=0,m=e.length;m>h;h++)r=this.getSymbolShape(this.deepMerge([s[n].data[i],s[n]]),n,s[n].data[i].value[h],h,l.getIndicatorText(a,h),e[h][0],e[h][1],this._symbol[this._radarDataCounter%this._symbol.length],t,"#fff","vertical"),r.zlevel=this.getZlevelBase(),r.z=this.getZBase()+1,o.set(r,"data",s[n].data[i]),o.set(r,"value",s[n].data[i].value),o.set(r,"dataIndex",i),o.set(r,"special",h),this.shapeList.push(r)},_addDataShape:function(e,t,i,a,r,l){var h=this.series,m=[i,this.serie],V=this.getItemStyleColor(this.deepQuery(m,"itemStyle.normal.color"),a,r,i),U=this.deepQuery(m,"itemStyle.normal.lineStyle.width"),d=this.deepQuery(m,"itemStyle.normal.lineStyle.type"),p=this.deepQuery(m,"itemStyle.normal.areaStyle.color"),c=this.deepQuery(m,"itemStyle.normal.areaStyle"),u={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:e,brushType:c?"both":"stroke",color:p||V||("string"==typeof t?s.alpha(t,.5):t),strokeColor:V||t,lineWidth:U,lineType:d},highlightStyle:{brushType:this.deepQuery(m,"itemStyle.emphasis.areaStyle")||c?"both":"stroke",color:this.deepQuery(m,"itemStyle.emphasis.areaStyle.color")||p||V||("string"==typeof t?s.alpha(t,.5):t),strokeColor:this.getItemStyleColor(this.deepQuery(m,"itemStyle.emphasis.color"),a,r,i)||V||t,lineWidth:this.deepQuery(m,"itemStyle.emphasis.lineStyle.width")||U,lineType:this.deepQuery(m,"itemStyle.emphasis.lineStyle.type")||d}};o.pack(u,h[a],a,i,r,i.name,this.component.polar.getIndicator(h[a].polarIndex)),l&&(u.draggable=!0,this.setCalculable(u)),u=new n(u),this.shapeList.push(u)},_addDropBox:function(e){var t=this.series,i=this.deepQuery(this._queryTarget,"polarIndex");if(!this._dropBoxList[i]){var n=this.component.polar.getDropBox(i);n.zlevel=this.getZlevelBase(),n.z=this.getZBase(),this.setCalculable(n),o.pack(n,t,e,void 0,-1),this.shapeList.push(n),this._dropBoxList[i]=!0}},ondragend:function(e,t){var i=this.series;if(this.isDragend&&e.target){var n=e.target,a=o.get(n,"seriesIndex"),r=o.get(n,"dataIndex");this.component.legend&&this.component.legend.del(i[a].data[r].name),i[a].data.splice(r,1),t.dragOut=!0,t.needRefresh=!0,this.isDragend=!1}},ondrop:function(t,i){var n=this.series;if(this.isDrop&&t.target){var a,r,s=t.target,l=t.dragged,h=o.get(s,"seriesIndex"),m=o.get(s,"dataIndex"),V=this.component.legend;if(-1===m)a={value:o.get(l,"value"),name:o.get(l,"name")},n[h].data.push(a),V&&V.add(a.name,l.style.color||l.style.strokeColor);else{var U=e("../util/accMath");a=n[h].data[m],V&&V.del(a.name),a.name+=this.option.nameConnector+o.get(l,"name"),r=o.get(l,"value");for(var d=0;d<r.length;d++)a.value[d]=U.accAdd(a.value[d],r[d]);V&&V.add(a.name,l.style.color||l.style.strokeColor)}i.dragIn=i.dragIn||!0,this.isDrop=!1}},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},r.inherits(t,i),e("../chart").define("radar",t),t}),i("echarts/component/polar",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Polygon","zrender/shape/Circle","zrender/shape/Ring","../config","zrender/tool/util","../util/coordinates","../util/accMath","../util/smartSteps","../component"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Polygon"),r=e("zrender/shape/Circle"),s=e("zrender/shape/Ring"),l=e("../config");l.polar={zlevel:0,z:0,center:["50%","50%"],radius:"75%",startAngle:90,boundaryGap:[0,0],splitNumber:5,name:{show:!0,textStyle:{color:"#333"}},axisLine:{show:!0,lineStyle:{color:"#ccc",width:1,type:"solid"}},axisLabel:{show:!1,textStyle:{color:"#333"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}},splitLine:{show:!0,lineStyle:{width:1,color:"#ccc"}},type:"polygon"};var h=e("zrender/tool/util"),m=e("../util/coordinates");return t.prototype={type:l.COMPONENT_TYPE_POLAR,_buildShape:function(){for(var e=0;e<this.polar.length;e++)this._index=e,this.reformOption(this.polar[e]),this._queryTarget=[this.polar[e],this.option],this._createVector(e),this._buildSpiderWeb(e),this._buildText(e),this._adjustIndicatorValue(e),this._addAxisLabel(e);for(var e=0;e<this.shapeList.length;e++)this.zr.addShape(this.shapeList[e])},_createVector:function(e){for(var t,i=this.polar[e],n=this.deepQuery(this._queryTarget,"indicator"),a=n.length,o=i.startAngle,r=2*Math.PI/a,s=this._getRadius(),l=i.__ecIndicator=[],h=0;a>h;h++)t=m.polar2cartesian(s,o*Math.PI/180+r*h),l.push({vector:[t[1],-t[0]]})},_getRadius:function(){var e=this.polar[this._index];return this.parsePercent(e.radius,Math.min(this.zr.getWidth(),this.zr.getHeight())/2)},_buildSpiderWeb:function(e){var t=this.polar[e],i=t.__ecIndicator,n=t.splitArea,a=t.splitLine,o=this.getCenter(e),r=t.splitNumber,s=a.lineStyle.color,l=a.lineStyle.width,h=a.show,m=this.deepQuery(this._queryTarget,"axisLine");this._addArea(i,r,o,n,s,l,h),m.show&&this._addLine(i,o,m)},_addAxisLabel:function(t){for(var i,a,o,r,a,s,l,m,V,U,d=e("../util/accMath"),p=this.polar[t],c=this.deepQuery(this._queryTarget,"indicator"),u=p.__ecIndicator,y=this.deepQuery(this._queryTarget,"splitNumber"),g=this.getCenter(t),b=0;b<c.length;b++)if(i=this.deepQuery([c[b],p,this.option],"axisLabel"),i.show){var f=this.deepQuery([i,p,this.option],"textStyle"),k=this.deepQuery([i,p],"formatter");if(o={},o.textFont=this.getFont(f),o.color=f.color,o=h.merge(o,i),o.lineWidth=o.width,a=u[b].vector,s=u[b].value,m=b/c.length*2*Math.PI,V=i.offset||10,U=i.interval||0,!s)return;for(var x=1;y>=x;x+=U+1)r=h.merge({},o),l=d.accAdd(s.min,d.accMul(s.step,x)),l="function"==typeof k?k(l):"string"==typeof k?k.replace("{a}","{a0}").replace("{a0}",l):this.numAddCommas(l),r.text=l,r.x=x*a[0]/y+Math.cos(m)*V+g[0],r.y=x*a[1]/y+Math.sin(m)*V+g[1],this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:r,draggable:!1,hoverable:!1}))}},_buildText:function(e){for(var t,i,a,o,r,s,l,h=this.polar[e],m=h.__ecIndicator,V=this.deepQuery(this._queryTarget,"indicator"),U=this.getCenter(e),d=0,p=0,c=0;c<V.length;c++)o=this.deepQuery([V[c],h,this.option],"name"),o.show&&(l=this.deepQuery([o,h,this.option],"textStyle"),i={},i.textFont=this.getFont(l),i.color=l.color,i.text="function"==typeof o.formatter?o.formatter.call(this.myChart,V[c].text,c):"string"==typeof o.formatter?o.formatter.replace("{value}",V[c].text):V[c].text,m[c].text=i.text,t=m[c].vector,a=Math.round(t[0])>0?"left":Math.round(t[0])<0?"right":"center",null==o.margin?t=this._mapVector(t,U,1.1):(s=o.margin,d=t[0]>0?s:-s,p=t[1]>0?s:-s,d=0===t[0]?0:d,p=0===t[1]?0:p,t=this._mapVector(t,U,1)),i.textAlign=a,i.x=t[0]+d,i.y=t[1]+p,r=o.rotate?[o.rotate/180*Math.PI,t[0],t[1]]:[0,0,0],this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:i,draggable:!1,hoverable:!1,rotation:r})))},getIndicatorText:function(e,t){return this.polar[e]&&this.polar[e].__ecIndicator[t]&&this.polar[e].__ecIndicator[t].text},getDropBox:function(e){var t,i,e=e||0,n=this.polar[e],a=this.getCenter(e),o=n.__ecIndicator,r=o.length,s=[],l=n.type;if("polygon"==l){for(var h=0;r>h;h++)t=o[h].vector,s.push(this._mapVector(t,a,1.2));i=this._getShape(s,"fill","rgba(0,0,0,0)","",1)}else"circle"==l&&(i=this._getCircle("",1,1.2,a,"fill","rgba(0,0,0,0)"));return i},_addArea:function(e,t,i,n,a,o,r){for(var s,l,h,m,V=this.deepQuery(this._queryTarget,"type"),U=0;t>U;U++)l=(t-U)/t,r&&("polygon"==V?(m=this._getPointList(e,l,i),s=this._getShape(m,"stroke","",a,o)):"circle"==V&&(s=this._getCircle(a,o,l,i,"stroke")),this.shapeList.push(s)),n.show&&(h=(t-U-1)/t,this._addSplitArea(e,n,l,h,i,U))},_getCircle:function(e,t,i,n,a,o){var s=this._getRadius();return new r({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:n[0],y:n[1],r:s*i,brushType:a,strokeColor:e,lineWidth:t,color:o},hoverable:!1,draggable:!1})},_getRing:function(e,t,i,n){var a=this._getRadius();return new s({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:n[0],y:n[1],r:t*a,r0:i*a,color:e,brushType:"fill"},hoverable:!1,draggable:!1})},_getPointList:function(e,t,i){for(var n,a=[],o=e.length,r=0;o>r;r++)n=e[r].vector,a.push(this._mapVector(n,i,t));return a},_getShape:function(e,t,i,n,a){return new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:e,brushType:t,color:i,strokeColor:n,lineWidth:a},hoverable:!1,draggable:!1})},_addSplitArea:function(e,t,i,n,a,o){var r,s,l,h,m,V=e.length,U=t.areaStyle.color,d=[],V=e.length,p=this.deepQuery(this._queryTarget,"type");if("string"==typeof U&&(U=[U]),s=U.length,r=U[o%s],"polygon"==p)for(var c=0;V>c;c++)d=[],l=e[c].vector,h=e[(c+1)%V].vector,d.push(this._mapVector(l,a,i)),d.push(this._mapVector(l,a,n)),d.push(this._mapVector(h,a,n)),d.push(this._mapVector(h,a,i)),m=this._getShape(d,"fill",r,"",1),this.shapeList.push(m);else"circle"==p&&(m=this._getRing(r,i,n,a),this.shapeList.push(m))},_mapVector:function(e,t,i){return[e[0]*i+t[0],e[1]*i+t[1]]},getCenter:function(e){var e=e||0;return this.parseCenter(this.zr,this.polar[e].center)},_addLine:function(e,t,i){for(var n,a,o=e.length,r=i.lineStyle,s=r.color,l=r.width,h=r.type,m=0;o>m;m++)a=e[m].vector,n=this._getLine(t[0],t[1],a[0]+t[0],a[1]+t[1],s,l,h),this.shapeList.push(n)},_getLine:function(e,t,i,n,o,r,s){return new a({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{xStart:e,yStart:t,xEnd:i,yEnd:n,strokeColor:o,lineWidth:r,lineType:s},hoverable:!1})},_adjustIndicatorValue:function(t){for(var i,n,a,o=this.polar[t],r=this.deepQuery(this._queryTarget,"indicator"),s=r.length,l=o.__ecIndicator,h=this._getSeriesData(t),m=o.boundaryGap,V=o.splitNumber,U=o.scale,d=e("../util/smartSteps"),p=0;s>p;p++){if("number"==typeof r[p].max)i=r[p].max,n=r[p].min||0,a={max:i,min:n};else{var c=this._findValue(h,p,V,m);n=c.min,i=c.max}!U&&n>=0&&i>=0&&(n=0),!U&&0>=n&&0>=i&&(i=0);var u=d(n,i,V,a);l[p].value={min:u.min,max:u.max,step:u.step}}},_getSeriesData:function(e){for(var t,i,n,a=[],o=this.component.legend,r=0;r<this.series.length;r++)if(t=this.series[r],t.type==l.CHART_TYPE_RADAR){i=t.data||[];for(var s=0;s<i.length;s++)n=this.deepQuery([i[s],t,this.option],"polarIndex")||0,n!=e||o&&!o.isSelected(i[s].name)||a.push(i[s])}return a},_findValue:function(e,t,i,n){function a(e){(e>o||void 0===o)&&(o=e),(r>e||void 0===r)&&(r=e)}var o,r,s;if(e&&0!==e.length){if(1==e.length&&(r=0),1!=e.length)for(var l=0;l<e.length;l++)a(this.getDataFromOption(e[l].value[t]));else{s=e[0];for(var l=0;l<s.value.length;l++)a(this.getDataFromOption(s.value[l]))}var h=Math.abs(o-r);return r-=Math.abs(h*n[0]),o+=Math.abs(h*n[1]),r===o&&(0===o?o=1:o>0?r=o/i:o/=i),{max:o,min:r}}},getVector:function(e,t,i){e=e||0,t=t||0;var n=this.polar[e].__ecIndicator;if(!(t>=n.length)){var a,o=this.polar[e].__ecIndicator[t],r=this.getCenter(e),s=o.vector,l=o.value.max,h=o.value.min;if("undefined"==typeof i)return r;switch(i){case"min":i=h;break;case"max":i=l;break;case"center":i=(l+h)/2}return a=l!=h?(i-h)/(l-h):.5,this._mapVector(s,r,a)}},isInside:function(e){var t=this.getNearestIndex(e);return t?t.polarIndex:-1},getNearestIndex:function(e){for(var t,i,n,a,o,r,s,l,h,V=0;V<this.polar.length;V++){if(t=this.polar[V],i=this.getCenter(V),e[0]==i[0]&&e[1]==i[1])return{polarIndex:V,valueIndex:0};if(n=this._getRadius(),o=t.startAngle,r=t.indicator,s=r.length,l=2*Math.PI/s,a=m.cartesian2polar(e[0]-i[0],i[1]-e[1]),e[0]-i[0]<0&&(a[1]+=Math.PI),a[1]<0&&(a[1]+=2*Math.PI),h=a[1]-o/180*Math.PI+2*Math.PI,Math.abs(Math.cos(h%(l/2)))*n>a[0])return{polarIndex:V,valueIndex:Math.floor((h+l/2)/l)%s}}},getIndicator:function(e){var e=e||0;return this.polar[e].indicator},refresh:function(e){e&&(this.option=e,this.polar=this.option.polar,this.series=this.option.series),this.clear(),this._buildShape()}},h.inherits(t,i),e("../component").define("polar",t),t}),i("echarts/util/coordinates",["require","zrender/tool/math"],function(e){function t(e,t){return[e*n.sin(t),e*n.cos(t)]}function i(e,t){return[Math.sqrt(e*e+t*t),Math.atan(t/e)]}var n=e("zrender/tool/math");return{polar2cartesian:t,cartesian2polar:i}}),i("echarts/chart/chord",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Sector","../util/shape/Ribbon","../util/shape/Icon","zrender/shape/BezierCurve","../config","../util/ecData","zrender/tool/util","zrender/tool/vector","../data/Graph","../layout/Chord","../chart"],function(e){"use strict";function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.scaleLineLength=4,this.scaleUnitAngle=4,this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Sector"),r=e("../util/shape/Ribbon"),s=e("../util/shape/Icon"),l=e("zrender/shape/BezierCurve"),h=e("../config");h.chord={zlevel:0,z:2,clickable:!0,radius:["65%","75%"],center:["50%","50%"],padding:2,sort:"none",sortSub:"none",startAngle:90,clockWise:!0,ribbonType:!0,minRadius:10,maxRadius:20,symbol:"circle",showScale:!1,showScaleText:!1,itemStyle:{normal:{borderWidth:0,borderColor:"#000",label:{show:!0,rotate:!1,distance:5},chordStyle:{width:1,color:"black",borderWidth:1,borderColor:"#999",opacity:.5}},emphasis:{borderWidth:0,borderColor:"#000",chordStyle:{width:1,color:"black",borderWidth:1,borderColor:"#999"}}}};var m=e("../util/ecData"),V=e("zrender/tool/util"),U=e("zrender/tool/vector"),d=e("../data/Graph"),p=e("../layout/Chord");return t.prototype={type:h.CHART_TYPE_CHORD,_init:function(){var e=this.series;this.selectedMap={};for(var t={},i={},n=0,a=e.length;a>n;n++)if(e[n].type===this.type){var o=this.isSelected(e[n].name);this.selectedMap[e[n].name]=o,o&&this.buildMark(n),this.reformOption(e[n]),t[e[n].name]=e[n]}for(var n=0,a=e.length;a>n;n++)if(e[n].type===this.type)if(e[n].insertToSerie){var r=t[e[n].insertToSerie];e[n]._referenceSerie=r}else i[e[n].name]=[e[n]];for(var n=0,a=e.length;a>n;n++)if(e[n].type===this.type&&e[n].insertToSerie){for(var s=e[n]._referenceSerie;s&&s._referenceSerie;)s=s._referenceSerie;i[s.name]&&this.selectedMap[e[n].name]&&i[s.name].push(e[n])}for(var l in i)this._buildChords(i[l]);this.addShapeList()},_getNodeCategory:function(e,t){return e.categories&&e.categories[t.category||0]},_getNodeQueryTarget:function(e,t){var i=this._getNodeCategory(e,t);return[t,i,e]},_getEdgeQueryTarget:function(e,t,i){return i=i||"normal",[t.itemStyle&&t.itemStyle[i],e.itemStyle[i].chordStyle]},_buildChords:function(e){for(var t=[],i=e[0],n=function(e){return e.layout.size>0},a=function(e){return function(t){return e.getEdge(t.node2,t.node1)}},o=0;o<e.length;o++){var r=e[o];if(this.selectedMap[r.name]){var s;r.matrix?s=this._getSerieGraphFromDataMatrix(r,i):r.links&&(s=this._getSerieGraphFromNodeLinks(r,i)),s.filterNode(n,this),r.ribbonType&&s.filterEdge(a(s)),t.push(s),s.__serie=r}}if(t.length){var l=t[0];if(!i.ribbonType){var h=i.minRadius,m=i.maxRadius,V=1/0,U=-(1/0);l.eachNode(function(e){U=Math.max(e.layout.size,U),V=Math.min(e.layout.size,V)});var d=(m-h)/(U-V);l.eachNode(function(e){var t=this._getNodeQueryTarget(i,e),n=this.query(t,"symbolSize");e.layout.size=U===V?n||V:n||(e.layout.size-V)*d+h},this)}var c=new p;c.clockWise=i.clockWise,c.startAngle=i.startAngle*Math.PI/180,c.clockWise||(c.startAngle=-c.startAngle),c.padding=i.padding*Math.PI/180,c.sort=i.sort,c.sortSub=i.sortSub,c.directed=i.ribbonType,c.run(t);var u=this.query(i,"itemStyle.normal.label.show");if(i.ribbonType){this._buildSectors(i,0,l,i,t),u&&this._buildLabels(i,0,l,i,t);for(var o=0,y=0;o<e.length;o++)this.selectedMap[e[o].name]&&this._buildRibbons(e,o,t[y++],i);i.showScale&&this._buildScales(i,0,l)}else{this._buildNodeIcons(i,0,l,i,t),u&&this._buildLabels(i,0,l,i,t);for(var o=0,y=0;o<e.length;o++)this.selectedMap[e[o].name]&&this._buildEdgeCurves(e,o,t[y++],i,l)}this._initHoverHandler(e,t)}},_getSerieGraphFromDataMatrix:function(e,t){for(var i=[],n=0,a=[],o=0;o<e.matrix.length;o++)a[o]=e.matrix[o].slice();for(var r=e.data||e.nodes,o=0;o<r.length;o++){var s={},l=r[o];l.rawIndex=o;for(var h in l)"name"===h?s.id=l.name:s[h]=l[h];var m=this._getNodeCategory(t,l),V=m?m.name:l.name;if(this.selectedMap[V]=this.isSelected(V),this.selectedMap[V])i.push(s),n++;else{a.splice(n,1);for(var U=0;U<a.length;U++)a[U].splice(n,1)}}var p=d.fromMatrix(i,a,!0);return p.eachNode(function(e){e.layout={size:e.data.outValue},e.rawIndex=e.data.rawIndex}),p.eachEdge(function(e){e.layout={weight:e.data.weight}}),p},_getSerieGraphFromNodeLinks:function(e,t){for(var i=new d(!0),n=e.data||e.nodes,a=0,o=n.length;o>a;a++){var r=n[a];if(r&&!r.ignore){var s=this._getNodeCategory(t,r),l=s?s.name:r.name;if(this.selectedMap[l]=this.isSelected(l),this.selectedMap[l]){var h=i.addNode(r.name,r);h.rawIndex=a}}}for(var a=0,o=e.links.length;o>a;a++){var m=e.links[a],V=m.source,U=m.target;"number"==typeof V&&(V=n[V],V&&(V=V.name)),"number"==typeof U&&(U=n[U],U&&(U=U.name));var p=i.addEdge(V,U,m);p&&(p.rawIndex=a)}return i.eachNode(function(e){var i=e.data.value;if(null==i)if(i=0,t.ribbonType)for(var n=0;n<e.outEdges.length;n++)i+=e.outEdges[n].data.weight||0;else for(var n=0;n<e.edges.length;n++)i+=e.edges[n].data.weight||0;e.layout={size:i}}),i.eachEdge(function(e){e.layout={weight:null==e.data.weight?1:e.data.weight}}),i},_initHoverHandler:function(e,t){var i=e[0],n=t[0],a=this;n.eachNode(function(e){e.shape.onmouseover=function(){n.eachNode(function(e){e.shape.style.opacity=.1,e.labelShape&&(e.labelShape.style.opacity=.1,e.labelShape.modSelf()),e.shape.modSelf()});for(var i=0;i<t.length;i++)for(var o=0;o<t[i].edges.length;o++){var r=t[i].edges[o],s=a._getEdgeQueryTarget(t[i].__serie,r.data);r.shape.style.opacity=.1*a.deepQuery(s,"opacity"),r.shape.modSelf()}e.shape.style.opacity=1,e.labelShape&&(e.labelShape.style.opacity=1);for(var i=0;i<t.length;i++){var l=t[i].getNodeById(e.id);if(l)for(var o=0;o<l.outEdges.length;o++){var r=l.outEdges[o],s=a._getEdgeQueryTarget(t[i].__serie,r.data);r.shape.style.opacity=a.deepQuery(s,"opacity");var h=t[0].getNodeById(r.node2.id);h&&(h.shape&&(h.shape.style.opacity=1),h.labelShape&&(h.labelShape.style.opacity=1))}}a.zr.refreshNextFrame()},e.shape.onmouseout=function(){n.eachNode(function(e){e.shape.style.opacity=1,e.labelShape&&(e.labelShape.style.opacity=1,e.labelShape.modSelf()),e.shape.modSelf()});for(var e=0;e<t.length;e++)for(var o=0;o<t[e].edges.length;o++){var r=t[e].edges[o],s=[r.data,i];r.shape.style.opacity=a.deepQuery(s,"itemStyle.normal.chordStyle.opacity"),r.shape.modSelf()}a.zr.refreshNextFrame()}})},_buildSectors:function(e,t,i,n){var a=this.parseCenter(this.zr,n.center),r=this.parseRadius(this.zr,n.radius),s=n.clockWise,l=s?1:-1;i.eachNode(function(i){var h=this._getNodeCategory(n,i.data),V=this.getColor(h?h.name:i.id),U=i.layout.startAngle/Math.PI*180*l,d=i.layout.endAngle/Math.PI*180*l,p=new o({zlevel:e.zlevel,z:e.z,style:{x:a[0],y:a[1],r0:r[0],r:r[1],startAngle:U,endAngle:d,brushType:"fill",opacity:1,color:V,clockWise:s},clickable:n.clickable,highlightStyle:{brushType:"fill"}});p.style.lineWidth=this.deepQuery([i.data,n],"itemStyle.normal.borderWidth"),p.highlightStyle.lineWidth=this.deepQuery([i.data,n],"itemStyle.emphasis.borderWidth"),p.style.strokeColor=this.deepQuery([i.data,n],"itemStyle.normal.borderColor"),p.highlightStyle.strokeColor=this.deepQuery([i.data,n],"itemStyle.emphasis.borderColor"),p.style.lineWidth>0&&(p.style.brushType="both"),p.highlightStyle.lineWidth>0&&(p.highlightStyle.brushType="both"),m.pack(p,e,t,i.data,i.rawIndex,i.id,i.category),this.shapeList.push(p),i.shape=p},this)},_buildNodeIcons:function(e,t,i,n){var a=this.parseCenter(this.zr,n.center),o=this.parseRadius(this.zr,n.radius),r=o[1];i.eachNode(function(i){var o=i.layout.startAngle,l=i.layout.endAngle,h=(o+l)/2,V=r*Math.cos(h),U=r*Math.sin(h),d=this._getNodeQueryTarget(n,i.data),p=this._getNodeCategory(n,i.data),c=this.deepQuery(d,"itemStyle.normal.color");c||(c=this.getColor(p?p.name:i.id));var u=new s({zlevel:e.zlevel,z:e.z+1,style:{x:-i.layout.size,y:-i.layout.size,width:2*i.layout.size,height:2*i.layout.size,iconType:this.deepQuery(d,"symbol"),color:c,brushType:"both",lineWidth:this.deepQuery(d,"itemStyle.normal.borderWidth"),strokeColor:this.deepQuery(d,"itemStyle.normal.borderColor")},highlightStyle:{color:this.deepQuery(d,"itemStyle.emphasis.color"),lineWidth:this.deepQuery(d,"itemStyle.emphasis.borderWidth"),strokeColor:this.deepQuery(d,"itemStyle.emphasis.borderColor")},clickable:n.clickable,position:[V+a[0],U+a[1]]});m.pack(u,e,t,i.data,i.rawIndex,i.id,i.category),this.shapeList.push(u),i.shape=u},this)},_buildLabels:function(e,t,i,a){var o=this.query(a,"itemStyle.normal.label.rotate"),r=this.query(a,"itemStyle.normal.label.distance"),s=this.parseCenter(this.zr,a.center),l=this.parseRadius(this.zr,a.radius),h=a.clockWise,m=h?1:-1; + +i.eachNode(function(t){var i=t.layout.startAngle/Math.PI*180*m,h=t.layout.endAngle/Math.PI*180*m,V=(i*-m+h*-m)/2;V%=360,0>V&&(V+=360);var d=90>=V||V>=270;V=V*Math.PI/180;var p=[Math.cos(V),-Math.sin(V)],c=0;c=a.ribbonType?a.showScaleText?35+r:r:r+t.layout.size;var u=U.scale([],p,l[1]+c);U.add(u,u,s);var y={zlevel:e.zlevel,z:e.z+1,hoverable:!1,style:{text:null==t.data.label?t.id:t.data.label,textAlign:d?"left":"right"}};o?(y.rotation=d?V:Math.PI+V,y.style.x=d?l[1]+c:-l[1]-c,y.style.y=0,y.position=s.slice()):(y.style.x=u[0],y.style.y=u[1]),y.style.color=this.deepQuery([t.data,a],"itemStyle.normal.label.textStyle.color")||"#000000",y.style.textFont=this.getFont(this.deepQuery([t.data,a],"itemStyle.normal.label.textStyle")),y=new n(y),this.shapeList.push(y),t.labelShape=y},this)},_buildRibbons:function(e,t,i,n){var a=e[t],o=this.parseCenter(this.zr,n.center),s=this.parseRadius(this.zr,n.radius);i.eachEdge(function(l,h){var V,U=i.getEdge(l.node2,l.node1);if(U&&!l.shape){if(U.shape)return void(l.shape=U.shape);var d=l.layout.startAngle/Math.PI*180,p=l.layout.endAngle/Math.PI*180,c=U.layout.startAngle/Math.PI*180,u=U.layout.endAngle/Math.PI*180;V=this.getColor(1===e.length?l.layout.weight<=U.layout.weight?l.node1.id:l.node2.id:a.name);var y,g,b=this._getEdgeQueryTarget(a,l.data),f=this._getEdgeQueryTarget(a,l.data,"emphasis"),k=new r({zlevel:a.zlevel,z:a.z,style:{x:o[0],y:o[1],r:s[0],source0:d,source1:p,target0:c,target1:u,brushType:"both",opacity:this.deepQuery(b,"opacity"),color:V,lineWidth:this.deepQuery(b,"borderWidth"),strokeColor:this.deepQuery(b,"borderColor"),clockWise:n.clockWise},clickable:n.clickable,highlightStyle:{brushType:"both",opacity:this.deepQuery(f,"opacity"),lineWidth:this.deepQuery(f,"borderWidth"),strokeColor:this.deepQuery(f,"borderColor")}});l.layout.weight<=U.layout.weight?(y=U.node1,g=U.node2):(y=l.node1,g=l.node2),m.pack(k,a,t,l.data,null==l.rawIndex?h:l.rawIndex,l.data.name||y.id+"-"+g.id,y.id,g.id),this.shapeList.push(k),l.shape=k}},this)},_buildEdgeCurves:function(e,t,i,n,a){var o=e[t],r=this.parseCenter(this.zr,n.center);i.eachEdge(function(e,i){var n=a.getNodeById(e.node1.id),s=a.getNodeById(e.node2.id),h=n.shape,V=s.shape,U=this._getEdgeQueryTarget(o,e.data),d=this._getEdgeQueryTarget(o,e.data,"emphasis"),p=new l({zlevel:o.zlevel,z:o.z,style:{xStart:h.position[0],yStart:h.position[1],xEnd:V.position[0],yEnd:V.position[1],cpX1:r[0],cpY1:r[1],lineWidth:this.deepQuery(U,"width"),strokeColor:this.deepQuery(U,"color"),opacity:this.deepQuery(U,"opacity")},highlightStyle:{lineWidth:this.deepQuery(d,"width"),strokeColor:this.deepQuery(d,"color"),opacity:this.deepQuery(d,"opacity")}});m.pack(p,o,t,e.data,null==e.rawIndex?i:e.rawIndex,e.data.name||e.node1.id+"-"+e.node2.id,e.node1.id,e.node2.id),this.shapeList.push(p),e.shape=p},this)},_buildScales:function(e,t,i){var o,r,s=e.clockWise,l=this.parseCenter(this.zr,e.center),h=this.parseRadius(this.zr,e.radius),m=s?1:-1,V=0,d=-(1/0);e.showScaleText&&(i.eachNode(function(e){var t=e.data.value;t>d&&(d=t),V+=t}),d>1e10?(o="b",r=1e-9):d>1e7?(o="m",r=1e-6):d>1e4?(o="k",r=.001):(o="",r=1));var p=V/(360-e.padding);i.eachNode(function(t){for(var i=t.layout.startAngle/Math.PI*180,V=t.layout.endAngle/Math.PI*180,d=i;;){if(s&&d>V||!s&&V>d)break;var c=d/180*Math.PI,u=[Math.cos(c),Math.sin(c)],y=U.scale([],u,h[1]+1);U.add(y,y,l);var g=U.scale([],u,h[1]+this.scaleLineLength);U.add(g,g,l);var b=new a({zlevel:e.zlevel,z:e.z-1,hoverable:!1,style:{xStart:y[0],yStart:y[1],xEnd:g[0],yEnd:g[1],lineCap:"round",brushType:"stroke",strokeColor:"#666",lineWidth:1}});this.shapeList.push(b),d+=m*this.scaleUnitAngle}if(e.showScaleText)for(var f=i,k=5*p*this.scaleUnitAngle,x=0;;){if(s&&f>V||!s&&V>f)break;var c=f;c%=360,0>c&&(c+=360);var _=90>=c||c>=270,L=new n({zlevel:e.zlevel,z:e.z-1,hoverable:!1,style:{x:_?h[1]+this.scaleLineLength+4:-h[1]-this.scaleLineLength-4,y:0,text:Math.round(10*x)/10+o,textAlign:_?"left":"right"},position:l.slice(),rotation:_?[-c/180*Math.PI,0,0]:[-(c+180)/180*Math.PI,0,0]});this.shapeList.push(L),x+=k*r,f+=m*this.scaleUnitAngle*5}},this)},refresh:function(e){if(e&&(this.option=e,this.series=e.series),this.legend=this.component.legend,this.legend)this.getColor=function(e){return this.legend.getColor(e)},this.isSelected=function(e){return this.legend.isSelected(e)};else{var t={},i=0;this.getColor=function(e){return t[e]?t[e]:(t[e]||(t[e]=this.zr.getColor(i++)),t[e])},this.isSelected=function(){return!0}}this.backupShapeList(),this._init()},reformOption:function(e){var t=V.merge;e=t(t(e||{},this.ecTheme.chord),h.chord),e.itemStyle.normal.label.textStyle=this.getTextStyle(e.itemStyle.normal.label.textStyle),this.z=e.z,this.zlevel=e.zlevel}},V.inherits(t,i),e("../chart").define("chord",t),t}),i("echarts/util/shape/Ribbon",["require","zrender/shape/Base","zrender/shape/util/PathProxy","zrender/tool/util","zrender/tool/area"],function(e){function t(e){i.call(this,e),this._pathProxy=new n}var i=e("zrender/shape/Base"),n=e("zrender/shape/util/PathProxy"),a=e("zrender/tool/util"),o=e("zrender/tool/area");return t.prototype={type:"ribbon",buildPath:function(e,t){var i=t.clockWise||!1,n=this._pathProxy;n.begin(e);var a=t.x,o=t.y,r=t.r,s=t.source0/180*Math.PI,l=t.source1/180*Math.PI,h=t.target0/180*Math.PI,m=t.target1/180*Math.PI,V=a+Math.cos(s)*r,U=o+Math.sin(s)*r,d=a+Math.cos(l)*r,p=o+Math.sin(l)*r,c=a+Math.cos(h)*r,u=o+Math.sin(h)*r,y=a+Math.cos(m)*r,g=o+Math.sin(m)*r;n.moveTo(V,U),n.arc(a,o,t.r,s,l,!i),n.bezierCurveTo(.7*(a-d)+d,.7*(o-p)+p,.7*(a-c)+c,.7*(o-u)+u,c,u),(t.source0!==t.target0||t.source1!==t.target1)&&(n.arc(a,o,t.r,h,m,!i),n.bezierCurveTo(.7*(a-y)+y,.7*(o-g)+g,.7*(a-V)+V,.7*(o-U)+U,V,U))},getRect:function(e){return e.__rect?e.__rect:(this._pathProxy.isEmpty()||this.buildPath(null,e),this._pathProxy.fastBoundingRect())},isCover:function(e,t){var i=this.getRect(this.style);return e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height?o.isInsidePath(this._pathProxy.pathCommands,0,"fill",e,t):void 0}},a.inherits(t,i),t}),i("echarts/data/Graph",["require","zrender/tool/util"],function(e){var t=e("zrender/tool/util"),i=function(e){this._directed=e||!1,this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={}};i.prototype.isDirected=function(){return this._directed},i.prototype.addNode=function(e,t){if(this._nodesMap[e])return this._nodesMap[e];var n=new i.Node(e,t);return this.nodes.push(n),this._nodesMap[e]=n,n},i.prototype.getNodeById=function(e){return this._nodesMap[e]},i.prototype.addEdge=function(e,t,n){if("string"==typeof e&&(e=this._nodesMap[e]),"string"==typeof t&&(t=this._nodesMap[t]),e&&t){var a=e.id+"-"+t.id;if(this._edgesMap[a])return this._edgesMap[a];var o=new i.Edge(e,t,n);return this._directed&&(e.outEdges.push(o),t.inEdges.push(o)),e.edges.push(o),e!==t&&t.edges.push(o),this.edges.push(o),this._edgesMap[a]=o,o}},i.prototype.removeEdge=function(e){var i=e.node1,n=e.node2,a=i.id+"-"+n.id;this._directed&&(i.outEdges.splice(t.indexOf(i.outEdges,e),1),n.inEdges.splice(t.indexOf(n.inEdges,e),1)),i.edges.splice(t.indexOf(i.edges,e),1),i!==n&&n.edges.splice(t.indexOf(n.edges,e),1),delete this._edgesMap[a],this.edges.splice(t.indexOf(this.edges,e),1)},i.prototype.getEdge=function(e,t){return"string"!=typeof e&&(e=e.id),"string"!=typeof t&&(t=t.id),this._directed?this._edgesMap[e+"-"+t]:this._edgesMap[e+"-"+t]||this._edgesMap[t+"-"+e]},i.prototype.removeNode=function(e){if("string"!=typeof e||(e=this._nodesMap[e])){delete this._nodesMap[e.id],this.nodes.splice(t.indexOf(this.nodes,e),1);for(var i=0;i<this.edges.length;){var n=this.edges[i];n.node1===e||n.node2===e?this.removeEdge(n):i++}}},i.prototype.filterNode=function(e,t){for(var i=this.nodes.length,n=0;i>n;)e.call(t,this.nodes[n],n)?n++:(this.removeNode(this.nodes[n]),i--)},i.prototype.filterEdge=function(e,t){for(var i=this.edges.length,n=0;i>n;)e.call(t,this.edges[n],n)?n++:(this.removeEdge(this.edges[n]),i--)},i.prototype.eachNode=function(e,t){for(var i=this.nodes.length,n=0;i>n;n++)this.nodes[n]&&e.call(t,this.nodes[n],n)},i.prototype.eachEdge=function(e,t){for(var i=this.edges.length,n=0;i>n;n++)this.edges[n]&&e.call(t,this.edges[n],n)},i.prototype.clear=function(){this.nodes.length=0,this.edges.length=0,this._nodesMap={},this._edgesMap={}},i.prototype.breadthFirstTraverse=function(e,t,i,n){if("string"==typeof t&&(t=this._nodesMap[t]),t){var a="edges";"out"===i?a="outEdges":"in"===i&&(a="inEdges");for(var o=0;o<this.nodes.length;o++)this.nodes[o].__visited=!1;if(!e.call(n,t,null))for(var r=[t];r.length;)for(var s=r.shift(),l=s[a],o=0;o<l.length;o++){var h=l[o],m=h.node1===s?h.node2:h.node1;if(!m.__visited){if(e.call(m,m,s))return;r.push(m),m.__visited=!0}}}},i.prototype.clone=function(){for(var e=new i(this._directed),t=0;t<this.nodes.length;t++)e.addNode(this.nodes[t].id,this.nodes[t].data);for(var t=0;t<this.edges.length;t++){var n=this.edges[t];e.addEdge(n.node1.id,n.node2.id,n.data)}return e};var n=function(e,t){this.id=e,this.data=t||null,this.inEdges=[],this.outEdges=[],this.edges=[]};n.prototype.degree=function(){return this.edges.length},n.prototype.inDegree=function(){return this.inEdges.length},n.prototype.outDegree=function(){return this.outEdges.length};var a=function(e,t,i){this.node1=e,this.node2=t,this.data=i||null};return i.Node=n,i.Edge=a,i.fromMatrix=function(e,t,n){if(t&&t.length&&t[0].length===t.length&&e.length===t.length){for(var a=t.length,o=new i(n),r=0;a>r;r++){var s=o.addNode(e[r].id,e[r]);s.data.value=0,n&&(s.data.outValue=s.data.inValue=0)}for(var r=0;a>r;r++)for(var l=0;a>l;l++){var h=t[r][l];n&&(o.nodes[r].data.outValue+=h,o.nodes[l].data.inValue+=h),o.nodes[r].data.value+=h,o.nodes[l].data.value+=h}for(var r=0;a>r;r++)for(var l=r;a>l;l++){var h=t[r][l];if(0!==h){var m=o.nodes[r],V=o.nodes[l],U=o.addEdge(m,V,{});if(U.data.weight=h,r!==l&&n&&t[l][r]){var d=o.addEdge(V,m,{});d.data.weight=t[l][r]}}}return o}},i}),i("echarts/layout/Chord",["require"],function(){var e=function(e){e=e||{},this.sort=e.sort||null,this.sortSub=e.sortSub||null,this.padding=.05,this.startAngle=e.startAngle||0,this.clockWise=null==e.clockWise?!1:e.clockWise,this.center=e.center||[0,0],this.directed=!0};e.prototype.run=function(e){e instanceof Array||(e=[e]);var n=e.length;if(n){for(var a=e[0],o=a.nodes.length,r=[],s=0,l=0;o>l;l++){var h=a.nodes[l],m={size:0,subGroups:[],node:h};r.push(m);for(var V=0,U=0;U<e.length;U++){var d=e[U],p=d.getNodeById(h.id);if(p){m.size+=p.layout.size;for(var c=this.directed?p.outEdges:p.edges,u=0;u<c.length;u++){var y=c[u],g=y.layout.weight;m.subGroups.push({weight:g,edge:y,graph:d}),V+=g}}}s+=m.size;for(var b=m.size/V,u=0;u<m.subGroups.length;u++)m.subGroups[u].weight*=b;"ascending"===this.sortSub?m.subGroups.sort(t):"descending"===this.sort&&(m.subGroups.sort(t),m.subGroups.reverse())}"ascending"===this.sort?r.sort(i):"descending"===this.sort&&(r.sort(i),r.reverse());for(var b=(2*Math.PI-this.padding*o)/s,f=this.startAngle,k=this.clockWise?1:-1,l=0;o>l;l++){var m=r[l];m.node.layout.startAngle=f,m.node.layout.endAngle=f+k*m.size*b,m.node.layout.subGroups=[];for(var u=0;u<m.subGroups.length;u++){var x=m.subGroups[u];x.edge.layout.startAngle=f,f+=k*x.weight*b,x.edge.layout.endAngle=f}f=m.node.layout.endAngle+k*this.padding}}};var t=function(e,t){return e.weight-t.weight},i=function(e,t){return e.size-t.size};return e}),i("echarts/chart/force",["require","./base","../data/Graph","../layout/Force","zrender/shape/Line","zrender/shape/BezierCurve","zrender/shape/Image","../util/shape/Icon","../config","../util/ecData","zrender/tool/util","zrender/config","zrender/tool/vector","../chart"],function(e){"use strict";function t(e,t,o,h,m){var V=this;r.call(this,e,t,o,h,m),this.__nodePositionMap={},this._graph=new s(!0),this._layout=new l,this._layout.onupdate=function(){V._step()},this._steps=1,this.ondragstart=function(){i.apply(V,arguments)},this.ondragend=function(){a.apply(V,arguments)},this.ondrop=function(){},this.shapeHandler.ondragstart=function(){V.isDragstart=!0},this.onmousemove=function(){n.apply(V,arguments)},this.refresh(h)}function i(e){if(this.isDragstart&&e.target){var t=e.target;t.fixed=!0,this.isDragstart=!1,this.zr.on(u.EVENT.MOUSEMOVE,this.onmousemove)}}function n(){this._layout.temperature=.8,this._step()}function a(e,t){if(this.isDragend&&e.target){var i=e.target;i.fixed=!1,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1,this.zr.un(u.EVENT.MOUSEMOVE,this.onmousemove)}}function o(e,t,i){var n=y.create();return n[0]=(Math.random()-.5)*i+e,n[1]=(Math.random()-.5)*i+t,n}var r=e("./base"),s=e("../data/Graph"),l=e("../layout/Force"),h=e("zrender/shape/Line"),m=e("zrender/shape/BezierCurve"),V=e("zrender/shape/Image"),U=e("../util/shape/Icon"),d=e("../config");d.force={zlevel:1,z:2,center:["50%","50%"],size:"100%",preventOverlap:!1,coolDown:.99,minRadius:10,maxRadius:20,ratioScaling:!1,large:!1,useWorker:!1,steps:1,scaling:1,gravity:1,symbol:"circle",symbolSize:0,linkSymbol:null,linkSymbolSize:[10,15],draggable:!0,clickable:!0,roam:!1,itemStyle:{normal:{label:{show:!1,position:"inside"},nodeStyle:{brushType:"both",borderColor:"#5182ab",borderWidth:1},linkStyle:{color:"#5182ab",width:1,type:"line"}},emphasis:{label:{show:!1},nodeStyle:{},linkStyle:{opacity:0}}}};var p=e("../util/ecData"),c=e("zrender/tool/util"),u=e("zrender/config"),y=e("zrender/tool/vector");return t.prototype={constructor:t,type:d.CHART_TYPE_FORCE,_init:function(){this.selectedMap={};var e,t=this.component.legend,i=this.series;this.clear();for(var n=0,a=i.length;a>n;n++){var o=i[n];if(o.type===d.CHART_TYPE_FORCE){if(i[n]=this.reformOption(i[n]),e=i[n].name||"",this.selectedMap[e]=t?t.isSelected(e):!0,!this.selectedMap[e])continue;this.buildMark(n),this._initSerie(o,n);break}}this.animationEffect()},_getNodeCategory:function(e,t){return e.categories&&e.categories[t.category||0]},_getNodeQueryTarget:function(e,t,i){i=i||"normal";var n=this._getNodeCategory(e,t)||{};return[t.itemStyle&&t.itemStyle[i],n&&n.itemStyle&&n.itemStyle[i],e.itemStyle[i].nodeStyle]},_getEdgeQueryTarget:function(e,t,i){return i=i||"normal",[t.itemStyle&&t.itemStyle[i],e.itemStyle[i].linkStyle]},_initSerie:function(e,t){this._temperature=1,e.matrix?this._graph=this._getSerieGraphFromDataMatrix(e):e.links&&(this._graph=this._getSerieGraphFromNodeLinks(e)),this._buildLinkShapes(e,t),this._buildNodeShapes(e,t);var i=e.roam===!0||"move"===e.roam,n=e.roam===!0||"scale"===e.roam;this.zr.modLayer(this.getZlevelBase(),{panable:i,zoomable:n}),(this.query("markPoint.effect.show")||this.query("markLine.effect.show"))&&this.zr.modLayer(d.EFFECT_ZLEVEL,{panable:i,zoomable:n}),this._initLayout(e),this._step()},_getSerieGraphFromDataMatrix:function(e){for(var t=[],i=0,n=[],a=0;a<e.matrix.length;a++)n[a]=e.matrix[a].slice();for(var o=e.data||e.nodes,a=0;a<o.length;a++){var r={},l=o[a];for(var h in l)"name"===h?r.id=l.name:r[h]=l[h];var m=this._getNodeCategory(e,l),V=m?m.name:l.name;if(this.selectedMap[V]=this.isSelected(V),this.selectedMap[V])t.push(r),i++;else{n.splice(i,1);for(var U=0;U<n.length;U++)n[U].splice(i,1)}}var d=s.fromMatrix(t,n,!0);return d.eachNode(function(e,t){e.layout={size:e.data.value,mass:0},e.rawIndex=t}),d.eachEdge(function(e){e.layout={weight:e.data.weight}}),d},_getSerieGraphFromNodeLinks:function(e){for(var t=new s(!0),i=e.data||e.nodes,n=0,a=i.length;a>n;n++){var o=i[n];if(o&&!o.ignore){var r=this._getNodeCategory(e,o),l=r?r.name:o.name;if(this.selectedMap[l]=this.isSelected(l),this.selectedMap[l]){var h=t.addNode(o.name,o);h.rawIndex=n}}}for(var n=0,a=e.links.length;a>n;n++){var m=e.links[n],V=m.source,U=m.target;"number"==typeof V&&(V=i[V],V&&(V=V.name)),"number"==typeof U&&(U=i[U],U&&(U=U.name));var d=t.addEdge(V,U,m);d&&(d.rawIndex=n)}return t.eachNode(function(e){var t=e.data.value;if(null==t){t=0;for(var i=0;i<e.edges.length;i++)t+=e.edges[i].data.weight||0}e.layout={size:t,mass:0}}),t.eachEdge(function(e){e.layout={weight:null==e.data.weight?1:e.data.weight}}),t},_initLayout:function(e){var t=this._graph,i=t.nodes.length,n=this.query(e,"minRadius"),a=this.query(e,"maxRadius");this._steps=e.steps||1;var r=this._layout;r.center=this.parseCenter(this.zr,e.center),r.width=this.parsePercent(e.size,this.zr.getWidth()),r.height=this.parsePercent(e.size,this.zr.getHeight()),r.large=e.large,r.scaling=e.scaling,r.ratioScaling=e.ratioScaling,r.gravity=e.gravity,r.temperature=1,r.coolDown=e.coolDown,r.preventNodeEdgeOverlap=e.preventOverlap,r.preventNodeOverlap=e.preventOverlap;for(var s=1/0,l=-(1/0),h=0;i>h;h++){var m=t.nodes[h];l=Math.max(m.layout.size,l),s=Math.min(m.layout.size,s)}for(var V=l-s,h=0;i>h;h++){var m=t.nodes[h];V>0?(m.layout.size=(m.layout.size-s)*(a-n)/V+n,m.layout.mass=m.layout.size/a):(m.layout.size=(a-n)/2,m.layout.mass=.5)}for(var h=0;i>h;h++){var m=t.nodes[h];if("undefined"!=typeof this.__nodePositionMap[m.id])m.layout.position=y.create(),y.copy(m.layout.position,this.__nodePositionMap[m.id]);else if("undefined"!=typeof m.data.initial)m.layout.position=y.create(),y.copy(m.layout.position,m.data.initial);else{var U=this._layout.center,d=Math.min(this._layout.width,this._layout.height);m.layout.position=o(U[0],U[1],.8*d)}var p=m.shape.style,c=m.layout.size;p.width=p.width||2*c,p.height=p.height||2*c,p.x=-p.width/2,p.y=-p.height/2,y.copy(m.shape.position,m.layout.position)}i=t.edges.length,l=-(1/0);for(var h=0;i>h;h++){var u=t.edges[h];u.layout.weight>l&&(l=u.layout.weight)}for(var h=0;i>h;h++){var u=t.edges[h];u.layout.weight/=l}this._layout.init(t,e.useWorker)},_buildNodeShapes:function(e,t){var i=this._graph,n=this.query(e,"categories");i.eachNode(function(i){var a=this._getNodeCategory(e,i.data),o=[i.data,a,e],r=this._getNodeQueryTarget(e,i.data),s=this._getNodeQueryTarget(e,i.data,"emphasis"),l=new U({style:{x:0,y:0,color:this.deepQuery(r,"color"),brushType:"both",strokeColor:this.deepQuery(r,"strokeColor")||this.deepQuery(r,"borderColor"),lineWidth:this.deepQuery(r,"lineWidth")||this.deepQuery(r,"borderWidth")},highlightStyle:{color:this.deepQuery(s,"color"),strokeColor:this.deepQuery(s,"strokeColor")||this.deepQuery(s,"borderColor"),lineWidth:this.deepQuery(s,"lineWidth")||this.deepQuery(s,"borderWidth")},clickable:e.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()});l.style.color||(l.style.color=this.getColor(a?a.name:i.id)),l.style.iconType=this.deepQuery(o,"symbol");var h=this.deepQuery(o,"symbolSize")||0;"number"==typeof h&&(h=[h,h]),l.style.width=2*h[0],l.style.height=2*h[1],l.style.iconType.match("image")&&(l.style.image=l.style.iconType.replace(new RegExp("^image:\\/\\/"),""),l=new V({style:l.style,highlightStyle:l.highlightStyle,clickable:l.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()})),this.deepQuery(o,"itemStyle.normal.label.show")&&(l.style.text=null==i.data.label?i.id:i.data.label,l.style.textPosition=this.deepQuery(o,"itemStyle.normal.label.position"),l.style.textColor=this.deepQuery(o,"itemStyle.normal.label.textStyle.color"),l.style.textFont=this.getFont(this.deepQuery(o,"itemStyle.normal.label.textStyle")||{})),this.deepQuery(o,"itemStyle.emphasis.label.show")&&(l.highlightStyle.textPosition=this.deepQuery(o,"itemStyle.emphasis.label.position"),l.highlightStyle.textColor=this.deepQuery(o,"itemStyle.emphasis.label.textStyle.color"),l.highlightStyle.textFont=this.getFont(this.deepQuery(o,"itemStyle.emphasis.label.textStyle")||{})),this.deepQuery(o,"draggable")&&(this.setCalculable(l),l.dragEnableTime=0,l.draggable=!0,l.ondragstart=this.shapeHandler.ondragstart,l.ondragover=null);var m="";if("undefined"!=typeof i.category){var a=n[i.category];m=a&&a.name||""}p.pack(l,e,t,i.data,i.rawIndex,i.data.name||"",i.category),this.shapeList.push(l),this.zr.addShape(l),i.shape=l},this)},_buildLinkShapes:function(e,t){for(var i=this._graph,n=i.edges.length,a=0;n>a;a++){var o=i.edges[a],r=o.data,s=o.node1,l=o.node2,V=i.getEdge(l,s),d=this._getEdgeQueryTarget(e,r),u=this.deepQuery(d,"type");e.linkSymbol&&"none"!==e.linkSymbol&&(u="line");var y="line"===u?h:m,g=new y({style:{xStart:0,yStart:0,xEnd:0,yEnd:0},clickable:this.query(e,"clickable"),highlightStyle:{},zlevel:this.getZlevelBase(),z:this.getZBase()});if(V&&V.shape&&(g.style.offset=4,V.shape.style.offset=4),c.merge(g.style,this.query(e,"itemStyle.normal.linkStyle"),!0),c.merge(g.highlightStyle,this.query(e,"itemStyle.emphasis.linkStyle"),!0),"undefined"!=typeof r.itemStyle&&(r.itemStyle.normal&&c.merge(g.style,r.itemStyle.normal,!0),r.itemStyle.emphasis&&c.merge(g.highlightStyle,r.itemStyle.emphasis,!0)),g.style.lineWidth=g.style.lineWidth||g.style.width,g.style.strokeColor=g.style.strokeColor||g.style.color,g.highlightStyle.lineWidth=g.highlightStyle.lineWidth||g.highlightStyle.width,g.highlightStyle.strokeColor=g.highlightStyle.strokeColor||g.highlightStyle.color,p.pack(g,e,t,o.data,null==o.rawIndex?a:o.rawIndex,o.data.name||s.id+" - "+l.id,s.id,l.id),this.shapeList.push(g),this.zr.addShape(g),o.shape=g,e.linkSymbol&&"none"!==e.linkSymbol){var b=new U({style:{x:-5,y:0,width:e.linkSymbolSize[0],height:e.linkSymbolSize[1],iconType:e.linkSymbol,brushType:"fill",color:g.style.strokeColor},highlightStyle:{brushType:"fill"},position:[0,0],rotation:0,zlevel:this.getZlevelBase(),z:this.getZBase()});g._symbolShape=b,this.shapeList.push(b),this.zr.addShape(b)}}},_updateLinkShapes:function(){for(var e=y.create(),t=y.create(),i=y.create(),n=y.create(),a=this._graph.edges,o=0,r=a.length;r>o;o++){var s=a[o],l=s.node1.shape,h=s.node2.shape;y.copy(i,l.position),y.copy(n,h.position);var m=s.shape.style;if(y.sub(e,i,n),y.normalize(e,e),m.offset?(t[0]=e[1],t[1]=-e[0],y.scaleAndAdd(i,i,t,m.offset),y.scaleAndAdd(n,n,t,m.offset)):"bezier-curve"===s.shape.type&&(m.cpX1=(i[0]+n[0])/2-(n[1]-i[1])/4,m.cpY1=(i[1]+n[1])/2-(i[0]-n[0])/4),m.xStart=i[0],m.yStart=i[1],m.xEnd=n[0],m.yEnd=n[1],s.shape.modSelf(),s.shape._symbolShape){var V=s.shape._symbolShape;y.copy(V.position,n),y.scaleAndAdd(V.position,V.position,e,h.style.width/2+2);var U=Math.atan2(e[1],e[0]);V.rotation=Math.PI/2-U,V.modSelf()}}},_syncNodePositions:function(){for(var e=this._graph,t=0;t<e.nodes.length;t++){var i=e.nodes[t],n=i.layout.position,a=i.data,o=i.shape,r=o.fixed||a.fixX,s=o.fixed||a.fixY;r===!0?r=1:isNaN(r)&&(r=0),s===!0?s=1:isNaN(s)&&(s=0),o.position[0]+=(n[0]-o.position[0])*(1-r),o.position[1]+=(n[1]-o.position[1])*(1-s),y.copy(n,o.position);var l=a.name;if(l){var h=this.__nodePositionMap[l];h||(h=this.__nodePositionMap[l]=y.create()),y.copy(h,n)}o.modSelf()}},_step:function(){this._syncNodePositions(),this._updateLinkShapes(),this.zr.refreshNextFrame(),this._layout.temperature>.01?this._layout.step(this._steps):this.messageCenter.dispatch(d.EVENT.FORCE_LAYOUT_END,{},{},this.myChart)},refresh:function(e){if(e&&(this.option=e,this.series=this.option.series),this.legend=this.component.legend,this.legend)this.getColor=function(e){return this.legend.getColor(e)},this.isSelected=function(e){return this.legend.isSelected(e)};else{var t={},i=0;this.getColor=function(e){return t[e]?t[e]:(t[e]||(t[e]=this.zr.getColor(i++)),t[e])},this.isSelected=function(){return!0}}this._init()},dispose:function(){this.clear(),this.shapeList=null,this.effectList=null,this._layout.dispose(),this._layout=null,this.__nodePositionMap={}},getPosition:function(){var e=[];return this._graph.eachNode(function(t){t.layout&&e.push({name:t.data.name,position:Array.prototype.slice.call(t.layout.position)})}),e}},c.inherits(t,r),e("../chart").define("force",t),t}),i("echarts/layout/Force",["require","./forceLayoutWorker","zrender/tool/vector"],function(e){function t(){if("undefined"!=typeof Worker&&"undefined"!=typeof Blob)try{var e=new Blob([n.getWorkerCode()]);i=window.URL.createObjectURL(e)}catch(t){i=""}return i}var i,n=e("./forceLayoutWorker"),a=e("zrender/tool/vector"),o=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},r="undefined"==typeof Float32Array?Array:Float32Array,s=function(e){"undefined"==typeof i&&t(),e=e||{},this.width=e.width||500,this.height=e.height||500,this.center=e.center||[this.width/2,this.height/2],this.ratioScaling=e.ratioScaling||!1,this.scaling=e.scaling||1,this.gravity="undefined"!=typeof e.gravity?e.gravity:1,this.large=e.large||!1,this.preventNodeOverlap=e.preventNodeOverlap||!1,this.preventNodeEdgeOverlap=e.preventNodeEdgeOverlap||!1,this.maxSpeedIncrease=e.maxSpeedIncrease||1,this.onupdate=e.onupdate||function(){},this.temperature=e.temperature||1,this.coolDown=e.coolDown||.99,this._layout=null,this._layoutWorker=null;var n=this,a=this._$onupdate;this._$onupdate=function(e){a.call(n,e)}};return s.prototype.updateConfig=function(){var e=this.width,t=this.height,i=Math.min(e,t),n={center:this.center,width:this.ratioScaling?e:i,height:this.ratioScaling?t:i,scaling:this.scaling||1,gravity:this.gravity||1,barnesHutOptimize:this.large,preventNodeOverlap:this.preventNodeOverlap,preventNodeEdgeOverlap:this.preventNodeEdgeOverlap,maxSpeedIncrease:this.maxSpeedIncrease};if(this._layoutWorker)this._layoutWorker.postMessage({cmd:"updateConfig",config:n});else for(var a in n)this._layout[a]=n[a]},s.prototype.init=function(e,t){if(this._layoutWorker&&(this._layoutWorker.terminate(),this._layoutWorker=null),i&&t)try{this._layoutWorker||(this._layoutWorker=new Worker(i),this._layoutWorker.onmessage=this._$onupdate),this._layout=null}catch(a){this._layoutWorker=null,this._layout||(this._layout=new n)}else this._layout||(this._layout=new n);this.temperature=1,this.graph=e;for(var o=e.nodes.length,s=new r(2*o),l=new r(o),h=new r(o),m=0;o>m;m++){var V=e.nodes[m];s[2*m]=V.layout.position[0],s[2*m+1]=V.layout.position[1],l[m]="undefined"==typeof V.layout.mass?1:V.layout.mass,h[m]="undefined"==typeof V.layout.size?1:V.layout.size,V.layout.__index=m}o=e.edges.length;for(var U=new r(2*o),d=new r(o),m=0;o>m;m++){var p=e.edges[m];U[2*m]=p.node1.layout.__index,U[2*m+1]=p.node2.layout.__index,d[m]=p.layout.weight||1}this._layoutWorker?this._layoutWorker.postMessage({cmd:"init",nodesPosition:s,nodesMass:l,nodesSize:h,edges:U,edgesWeight:d}):(this._layout.initNodes(s,l,h),this._layout.initEdges(U,d)),this.updateConfig()},s.prototype.step=function(e){var t=this.graph.nodes;if(this._layoutWorker){for(var i=new r(2*t.length),n=0;n<t.length;n++){var s=t[n];i[2*n]=s.layout.position[0],i[2*n+1]=s.layout.position[1]}this._layoutWorker.postMessage(i.buffer,[i.buffer]),this._layoutWorker.postMessage({cmd:"update",steps:e,temperature:this.temperature,coolDown:this.coolDown});for(var n=0;e>n;n++)this.temperature*=this.coolDown}else{o(this._$onupdate);for(var n=0;n<t.length;n++){var s=t[n];a.copy(this._layout.nodes[n].position,s.layout.position)}for(var n=0;e>n;n++)this._layout.temperature=this.temperature,this._layout.update(),this.temperature*=this.coolDown}},s.prototype._$onupdate=function(e){if(this._layoutWorker){for(var t=new Float32Array(e.data),i=0;i<this.graph.nodes.length;i++){var n=this.graph.nodes[i];n.layout.position[0]=t[2*i],n.layout.position[1]=t[2*i+1]}this.onupdate&&this.onupdate()}else if(this._layout){for(var i=0;i<this.graph.nodes.length;i++){var n=this.graph.nodes[i];a.copy(n.layout.position,this._layout.nodes[i].position)}this.onupdate&&this.onupdate()}},s.prototype.dispose=function(){this._layoutWorker&&this._layoutWorker.terminate(),this._layoutWorker=null,this._layout=null},s}),i("echarts/layout/forceLayoutWorker",["require","zrender/tool/vector"],function o(e){"use strict";function t(){this.subRegions=[],this.nSubRegions=0,this.node=null,this.mass=0,this.centerOfMass=null,this.bbox=new l(4),this.size=0}function i(){this.position=r.create(),this.force=r.create(),this.forcePrev=r.create(),this.speed=r.create(),this.speedPrev=r.create(),this.mass=1,this.inDegree=0,this.outDegree=0}function n(e,t){this.node1=e,this.node2=t,this.weight=1}function a(){this.barnesHutOptimize=!1,this.barnesHutTheta=1.5,this.repulsionByDegree=!1,this.preventNodeOverlap=!1,this.preventNodeEdgeOverlap=!1,this.strongGravity=!0,this.gravity=1,this.scaling=1,this.edgeWeightInfluence=1,this.center=[0,0],this.width=500,this.height=500,this.maxSpeedIncrease=1,this.nodes=[],this.edges=[],this.bbox=new l(4),this._rootRegion=new t,this._rootRegion.centerOfMass=r.create(),this._massArr=null,this._k=0}var r,s="undefined"==typeof window&&"undefined"==typeof e;r=s?{create:function(e,t){var i=new Float32Array(2);return i[0]=e||0,i[1]=t||0,i},dist:function(e,t){var i=t[0]-e[0],n=t[1]-e[1];return Math.sqrt(i*i+n*n)},len:function(e){var t=e[0],i=e[1];return Math.sqrt(t*t+i*i)},scaleAndAdd:function(e,t,i,n){return e[0]=t[0]+i[0]*n,e[1]=t[1]+i[1]*n,e},scale:function(e,t,i){return e[0]=t[0]*i,e[1]=t[1]*i,e},add:function(e,t,i){return e[0]=t[0]+i[0],e[1]=t[1]+i[1],e},sub:function(e,t,i){return e[0]=t[0]-i[0],e[1]=t[1]-i[1],e},dot:function(e,t){return e[0]*t[0]+e[1]*t[1]},normalize:function(e,t){var i=t[0],n=t[1],a=i*i+n*n;return a>0&&(a=1/Math.sqrt(a),e[0]=t[0]*a,e[1]=t[1]*a),e},negate:function(e,t){return e[0]=-t[0],e[1]=-t[1],e},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e},set:function(e,t,i){return e[0]=t,e[1]=i,e}}:e("zrender/tool/vector");var l="undefined"==typeof Float32Array?Array:Float32Array;if(t.prototype.beforeUpdate=function(){for(var e=0;e<this.nSubRegions;e++)this.subRegions[e].beforeUpdate();this.mass=0,this.centerOfMass&&(this.centerOfMass[0]=0,this.centerOfMass[1]=0),this.nSubRegions=0,this.node=null},t.prototype.afterUpdate=function(){this.subRegions.length=this.nSubRegions;for(var e=0;e<this.nSubRegions;e++)this.subRegions[e].afterUpdate()},t.prototype.addNode=function(e){if(0===this.nSubRegions){if(null==this.node)return void(this.node=e);this._addNodeToSubRegion(this.node),this.node=null}this._addNodeToSubRegion(e),this._updateCenterOfMass(e)},t.prototype.findSubRegion=function(e,t){for(var i=0;i<this.nSubRegions;i++){var n=this.subRegions[i];if(n.contain(e,t))return n}},t.prototype.contain=function(e,t){return this.bbox[0]<=e&&this.bbox[2]>=e&&this.bbox[1]<=t&&this.bbox[3]>=t},t.prototype.setBBox=function(e,t,i,n){this.bbox[0]=e,this.bbox[1]=t,this.bbox[2]=i,this.bbox[3]=n,this.size=(i-e+n-t)/2},t.prototype._newSubRegion=function(){var e=this.subRegions[this.nSubRegions];return e||(e=new t,this.subRegions[this.nSubRegions]=e),this.nSubRegions++,e},t.prototype._addNodeToSubRegion=function(e){var t=this.findSubRegion(e.position[0],e.position[1]),i=this.bbox;if(!t){var n=(i[0]+i[2])/2,a=(i[1]+i[3])/2,o=(i[2]-i[0])/2,r=(i[3]-i[1])/2,s=e.position[0]>=n?1:0,l=e.position[1]>=a?1:0,t=this._newSubRegion();t.setBBox(s*o+i[0],l*r+i[1],(s+1)*o+i[0],(l+1)*r+i[1])}t.addNode(e)},t.prototype._updateCenterOfMass=function(e){null==this.centerOfMass&&(this.centerOfMass=r.create());var t=this.centerOfMass[0]*this.mass,i=this.centerOfMass[1]*this.mass;t+=e.position[0]*e.mass,i+=e.position[1]*e.mass,this.mass+=e.mass,this.centerOfMass[0]=t/this.mass,this.centerOfMass[1]=i/this.mass},a.prototype.nodeToNodeRepulsionFactor=function(e,t,i){return i*i*e/t},a.prototype.edgeToNodeRepulsionFactor=function(e,t,i){return i*e/t},a.prototype.attractionFactor=function(e,t,i){return e*t/i},a.prototype.initNodes=function(e,t,n){this.temperature=1;var a=e.length/2;this.nodes.length=0;for(var o="undefined"!=typeof n,r=0;a>r;r++){var s=new i;s.position[0]=e[2*r],s.position[1]=e[2*r+1],s.mass=t[r],o&&(s.size=n[r]),this.nodes.push(s)}this._massArr=t,o&&(this._sizeArr=n)},a.prototype.initEdges=function(e,t){var i=e.length/2;this.edges.length=0;for(var a="undefined"!=typeof t,o=0;i>o;o++){var r=e[2*o],s=e[2*o+1],l=this.nodes[r],h=this.nodes[s];if(l&&h){l.outDegree++,h.inDegree++;var m=new n(l,h);a&&(m.weight=t[o]),this.edges.push(m)}}},a.prototype.update=function(){var e=this.nodes.length;if(this.updateBBox(),this._k=.4*this.scaling*Math.sqrt(this.width*this.height/e),this.barnesHutOptimize){this._rootRegion.setBBox(this.bbox[0],this.bbox[1],this.bbox[2],this.bbox[3]),this._rootRegion.beforeUpdate();for(var t=0;e>t;t++)this._rootRegion.addNode(this.nodes[t]);this._rootRegion.afterUpdate()}else{var i=0,n=this._rootRegion.centerOfMass;r.set(n,0,0);for(var t=0;e>t;t++){var a=this.nodes[t];i+=a.mass,r.scaleAndAdd(n,n,a.position,a.mass); + +}i>0&&r.scale(n,n,1/i)}this.updateForce(),this.updatePosition()},a.prototype.updateForce=function(){for(var e=this.nodes.length,t=0;e>t;t++){var i=this.nodes[t];r.copy(i.forcePrev,i.force),r.copy(i.speedPrev,i.speed),r.set(i.force,0,0)}this.updateNodeNodeForce(),this.gravity>0&&this.updateGravityForce(),this.updateEdgeForce(),this.preventNodeEdgeOverlap&&this.updateNodeEdgeForce()},a.prototype.updatePosition=function(){for(var e=this.nodes.length,t=r.create(),i=0;e>i;i++){var n=this.nodes[i],a=n.speed;r.scale(n.force,n.force,1/30);var o=r.len(n.force)+.1,s=Math.min(o,500)/o;r.scale(n.force,n.force,s),r.add(a,a,n.force),r.scale(a,a,this.temperature),r.sub(t,a,n.speedPrev);var l=r.len(t);if(l>0){r.scale(t,t,1/l);var h=r.len(n.speedPrev);h>0&&(l=Math.min(l/h,this.maxSpeedIncrease)*h,r.scaleAndAdd(a,n.speedPrev,t,l))}var m=r.len(a),s=Math.min(m,100)/(m+.1);r.scale(a,a,s),r.add(n.position,n.position,a)}},a.prototype.updateNodeNodeForce=function(){for(var e=this.nodes.length,t=0;e>t;t++){var i=this.nodes[t];if(this.barnesHutOptimize)this.applyRegionToNodeRepulsion(this._rootRegion,i);else for(var n=t+1;e>n;n++){var a=this.nodes[n];this.applyNodeToNodeRepulsion(i,a,!1)}}},a.prototype.updateGravityForce=function(){for(var e=0;e<this.nodes.length;e++)this.applyNodeGravity(this.nodes[e])},a.prototype.updateEdgeForce=function(){for(var e=0;e<this.edges.length;e++)this.applyEdgeAttraction(this.edges[e])},a.prototype.updateNodeEdgeForce=function(){for(var e=0;e<this.nodes.length;e++)for(var t=0;t<this.edges.length;t++)this.applyEdgeToNodeRepulsion(this.edges[t],this.nodes[e])},a.prototype.applyRegionToNodeRepulsion=function(){var e=r.create();return function(t,i){if(t.node)this.applyNodeToNodeRepulsion(t.node,i,!0);else{if(0===t.mass&&0===i.mass)return;r.sub(e,i.position,t.centerOfMass);var n=e[0]*e[0]+e[1]*e[1];if(n>this.barnesHutTheta*t.size*t.size){var a=this._k*this._k*(i.mass+t.mass)/(n+1);r.scaleAndAdd(i.force,i.force,e,2*a)}else for(var o=0;o<t.nSubRegions;o++)this.applyRegionToNodeRepulsion(t.subRegions[o],i)}}}(),a.prototype.applyNodeToNodeRepulsion=function(){var e=r.create();return function(t,i,n){if(t!==i&&(0!==t.mass||0!==i.mass)){r.sub(e,t.position,i.position);var a=e[0]*e[0]+e[1]*e[1];if(0!==a){var o,s=t.mass+i.mass,l=Math.sqrt(a);r.scale(e,e,1/l),this.preventNodeOverlap?(l=l-t.size-i.size,l>0?o=this.nodeToNodeRepulsionFactor(s,l,this._k):0>=l&&(o=this._k*this._k*10*s)):o=this.nodeToNodeRepulsionFactor(s,l,this._k),n||r.scaleAndAdd(t.force,t.force,e,2*o),r.scaleAndAdd(i.force,i.force,e,2*-o)}}}}(),a.prototype.applyEdgeAttraction=function(){var e=r.create();return function(t){var i=t.node1,n=t.node2;r.sub(e,i.position,n.position);var a,o=r.len(e);a=0===this.edgeWeightInfluence?1:1==this.edgeWeightInfluence?t.weight:Math.pow(t.weight,this.edgeWeightInfluence);var s;if(!(this.preventOverlap&&(o=o-i.size-n.size,0>=o))){var s=this.attractionFactor(a,o,this._k);r.scaleAndAdd(i.force,i.force,e,-s),r.scaleAndAdd(n.force,n.force,e,s)}}}(),a.prototype.applyNodeGravity=function(){var e=r.create();return function(t){r.sub(e,this.center,t.position),this.width>this.height?e[1]*=this.width/this.height:e[0]*=this.height/this.width;var i=r.len(e)/100;this.strongGravity?r.scaleAndAdd(t.force,t.force,e,i*this.gravity*t.mass):r.scaleAndAdd(t.force,t.force,e,this.gravity*t.mass/(i+1))}}(),a.prototype.applyEdgeToNodeRepulsion=function(){var e=r.create(),t=r.create(),i=r.create();return function(n,a){var o=n.node1,s=n.node2;if(o!==a&&s!==a){r.sub(e,s.position,o.position),r.sub(t,a.position,o.position);var l=r.len(e);r.scale(e,e,1/l);var h=r.dot(e,t);if(!(0>h||h>l)){r.scaleAndAdd(i,o.position,e,h);var m=r.dist(i,a.position)-a.size,V=this.edgeToNodeRepulsionFactor(a.mass,Math.max(m,.1),100);r.sub(e,a.position,i),r.normalize(e,e),r.scaleAndAdd(a.force,a.force,e,V),r.scaleAndAdd(o.force,o.force,e,-V),r.scaleAndAdd(s.force,s.force,e,-V)}}}}(),a.prototype.updateBBox=function(){for(var e=1/0,t=1/0,i=-(1/0),n=-(1/0),a=0;a<this.nodes.length;a++){var o=this.nodes[a].position;e=Math.min(e,o[0]),t=Math.min(t,o[1]),i=Math.max(i,o[0]),n=Math.max(n,o[1])}this.bbox[0]=e,this.bbox[1]=t,this.bbox[2]=i,this.bbox[3]=n},a.getWorkerCode=function(){var e=o.toString();return e.slice(e.indexOf("{")+1,e.lastIndexOf("return"))},s){var h=null;self.onmessage=function(e){if(e.data instanceof ArrayBuffer){if(!h)return;for(var t=new Float32Array(e.data),i=t.length/2,n=0;i>n;n++){var o=h.nodes[n];o.position[0]=t[2*n],o.position[1]=t[2*n+1]}}else switch(e.data.cmd){case"init":h||(h=new a),h.initNodes(e.data.nodesPosition,e.data.nodesMass,e.data.nodesSize),h.initEdges(e.data.edges,e.data.edgesWeight);break;case"updateConfig":if(h)for(var r in e.data.config)h[r]=e.data.config[r];break;case"update":var s=e.data.steps;if(h){var i=h.nodes.length,t=new Float32Array(2*i);h.temperature=e.data.temperature;for(var n=0;s>n;n++)h.update(),h.temperature*=e.data.coolDown;for(var n=0;i>n;n++){var o=h.nodes[n];t[2*n]=o.position[0],t[2*n+1]=o.position[1]}self.postMessage(t.buffer,[t.buffer])}else{var l=new Float32Array;self.postMessage(l.buffer,[l.buffer])}}}}return a}),i("echarts/chart/map",["require","./base","zrender/shape/Text","zrender/shape/Path","zrender/shape/Circle","zrender/shape/Rectangle","zrender/shape/Line","zrender/shape/Polygon","zrender/shape/Ellipse","zrender/shape/Image","../component/dataRange","../component/roamController","../layer/heatmap","../config","../util/ecData","zrender/tool/util","zrender/config","zrender/tool/event","../util/mapData/params","../util/mapData/textFixed","../util/mapData/geoCoord","../util/projection/svg","../util/projection/normal","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._onmousewheel=function(e){return r.__onmousewheel(e)},r._onmousedown=function(e){return r.__onmousedown(e)},r._onmousemove=function(e){return r.__onmousemove(e)},r._onmouseup=function(e){return r.__onmouseup(e)},r._onroamcontroller=function(e){return r.__onroamcontroller(e)},r._ondrhoverlink=function(e){return r.__ondrhoverlink(e)},this._isAlive=!0,this._selectedMode={},this._activeMapType={},this._clickable={},this._hoverable={},this._showLegendSymbol={},this._selected={},this._mapTypeMap={},this._mapDataMap={},this._nameMap={},this._specialArea={},this._refreshDelayTicket,this._mapDataRequireCounter,this._markAnimation=!1,this._hoverLinkMap={},this._roamMap={},this._scaleLimitMap={},this._mx,this._my,this._mousedown,this._justMove,this._curMapType,this.refresh(a),this.zr.on(c.EVENT.MOUSEWHEEL,this._onmousewheel),this.zr.on(c.EVENT.MOUSEDOWN,this._onmousedown),t.bind(U.EVENT.ROAMCONTROLLER,this._onroamcontroller),t.bind(U.EVENT.DATA_RANGE_HOVERLINK,this._ondrhoverlink)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Path"),o=e("zrender/shape/Circle"),r=e("zrender/shape/Rectangle"),s=e("zrender/shape/Line"),l=e("zrender/shape/Polygon"),h=e("zrender/shape/Ellipse"),m=e("zrender/shape/Image");e("../component/dataRange"),e("../component/roamController");var V=e("../layer/heatmap"),U=e("../config");U.map={zlevel:0,z:2,mapType:"china",showLegendSymbol:!0,dataRangeHoverLink:!0,hoverable:!0,clickable:!0,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,areaStyle:{color:"#ccc"},label:{show:!1,textStyle:{color:"rgb(139,69,19)"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,areaStyle:{color:"rgba(255,215,0,0.8)"},label:{show:!1,textStyle:{color:"rgb(100,0,0)"}}}}};var d=e("../util/ecData"),p=e("zrender/tool/util"),c=e("zrender/config"),u=e("zrender/tool/event"),y=e("../util/mapData/params").params,g=e("../util/mapData/textFixed"),b=e("../util/mapData/geoCoord");return t.prototype={type:U.CHART_TYPE_MAP,_buildShape:function(){var e=this.series;this.selectedMap={},this._activeMapType={};for(var t,i,n,a,o=this.component.legend,r={},s={},l={},h={},m=0,V=e.length;V>m;m++)if(e[m].type==U.CHART_TYPE_MAP&&(e[m]=this.reformOption(e[m]),i=e[m].mapType,s[i]=s[i]||{},s[i][m]=!0,l[i]=l[i]||e[m].mapValuePrecision,this._scaleLimitMap[i]=this._scaleLimitMap[i]||{},e[m].scaleLimit&&p.merge(this._scaleLimitMap[i],e[m].scaleLimit,!0),this._roamMap[i]=e[m].roam||this._roamMap[i],(null==this._hoverLinkMap[i]||this._hoverLinkMap[i])&&(this._hoverLinkMap[i]=e[m].dataRangeHoverLink),this._nameMap[i]=this._nameMap[i]||{},e[m].nameMap&&p.merge(this._nameMap[i],e[m].nameMap,!0),this._activeMapType[i]=!0,e[m].textFixed&&p.merge(g,e[m].textFixed,!0),e[m].geoCoord&&p.merge(b,e[m].geoCoord,!0),this._selectedMode[i]=this._selectedMode[i]||e[m].selectedMode,(null==this._hoverable[i]||this._hoverable[i])&&(this._hoverable[i]=e[m].hoverable),(null==this._clickable[i]||this._clickable[i])&&(this._clickable[i]=e[m].clickable),(null==this._showLegendSymbol[i]||this._showLegendSymbol[i])&&(this._showLegendSymbol[i]=e[m].showLegendSymbol),h[i]=h[i]||e[m].mapValueCalculation,t=e[m].name,this.selectedMap[t]=o?o.isSelected(t):!0,this.selectedMap[t])){r[i]=r[i]||{},n=e[m].data;for(var d=0,c=n.length;c>d;d++){a=this._nameChange(i,n[d].name),r[i][a]=r[i][a]||{seriesIndex:[],valueMap:{},precision:0};for(var u in n[d])"value"!=u?r[i][a][u]=n[d][u]:isNaN(n[d].value)||(null==r[i][a].value&&(r[i][a].value=0),r[i][a].precision=Math.max(this.getPrecision(+n[d].value),r[i][a].precision),r[i][a].value+=+n[d].value,r[i][a].valueMap[m]=+n[d].value);r[i][a].seriesIndex.push(m)}}this._mapDataRequireCounter=0;for(var f in r)this._mapDataRequireCounter++;this._clearSelected(),0===this._mapDataRequireCounter&&(this.clear(),this.zr&&this.zr.delShape(this.lastShapeList),this.lastShapeList=[]);for(var f in r){for(var c in r[f]){"average"==h[f]&&(r[f][c].value/=r[f][c].seriesIndex.length);var k=r[f][c].value;null!=k&&(r[f][c].value=k.toFixed(null==l[f]?r[f][c].precision:l[f])-0)}this._mapDataMap[f]=this._mapDataMap[f]||{},this._mapDataMap[f].mapData?this._mapDataCallback(f,r[f],s[f])(this._mapDataMap[f].mapData):y[f.replace(/\|.*/,"")].getGeoJson&&(this._specialArea[f]=y[f.replace(/\|.*/,"")].specialArea||this._specialArea[f],y[f.replace(/\|.*/,"")].getGeoJson(this._mapDataCallback(f,r[f],s[f])))}},_mapDataCallback:function(t,i,n){var a=this;return function(o){a._isAlive&&null!=a._activeMapType[t]&&(-1!=t.indexOf("|")&&(o=a._getSubMapData(t,o)),a._mapDataMap[t].mapData=o,o.firstChild?(a._mapDataMap[t].rate=1,a._mapDataMap[t].projection=e("../util/projection/svg")):(a._mapDataMap[t].rate=.75,a._mapDataMap[t].projection=e("../util/projection/normal")),a._buildMap(t,a._getProjectionData(t,o,n),i,n),a._buildMark(t,n),--a._mapDataRequireCounter<=0&&(a.addShapeList(),a.zr.refreshNextFrame()),a._buildHeatmap(t))}},_clearSelected:function(){for(var e in this._selected)this._activeMapType[this._mapTypeMap[e]]||(delete this._selected[e],delete this._mapTypeMap[e])},_getSubMapData:function(e,t){for(var i=e.replace(/^.*\|/,""),n=t.features,a=0,o=n.length;o>a;a++)if(n[a].properties&&n[a].properties.name==i){n=n[a],"United States of America"==i&&n.geometry.coordinates.length>1&&(n={geometry:{coordinates:n.geometry.coordinates.slice(5,6),type:n.geometry.type},id:n.id,properties:n.properties,type:n.type});break}return{type:"FeatureCollection",features:[n]}},_getProjectionData:function(e,t,i){var n,a=this._mapDataMap[e].projection,o=[],r=this._mapDataMap[e].bbox||a.getBbox(t,this._specialArea[e]);n=this._mapDataMap[e].hasRoam?this._mapDataMap[e].transform:this._getTransform(r,i,this._mapDataMap[e].rate);var s,l=this._mapDataMap[e].lastTransform||{scale:{}};n.left!=l.left||n.top!=l.top||n.scale.x!=l.scale.x||n.scale.y!=l.scale.y?(s=a.geoJson2Path(t,n,this._specialArea[e]),l=p.clone(n)):(n=this._mapDataMap[e].transform,s=this._mapDataMap[e].pathArray),this._mapDataMap[e].bbox=r,this._mapDataMap[e].transform=n,this._mapDataMap[e].lastTransform=l,this._mapDataMap[e].pathArray=s;for(var h=[n.left,n.top],m=0,V=s.length;V>m;m++)o.push(this._getSingleProvince(e,s[m],h));if(this._specialArea[e])for(var U in this._specialArea[e])o.push(this._getSpecialProjectionData(e,t,U,this._specialArea[e][U],h));if("china"==e){var d=this.geo2pos(e,b["南海诸岛"]||y["南海诸岛"].textCoord),c=n.scale.x/10.5,u=[32*c+d[0],83*c+d[1]];g["南海诸岛"]&&(u[0]+=g["南海诸岛"][0],u[1]+=g["南海诸岛"][1]),o.push({name:this._nameChange(e,"南海诸岛"),path:y["南海诸岛"].getPath(d,c),position:h,textX:u[0],textY:u[1]})}return o},_getSpecialProjectionData:function(t,i,n,a,o){i=this._getSubMapData("x|"+n,i);var r=e("../util/projection/normal"),s=r.getBbox(i),l=this.geo2pos(t,[a.left,a.top]),h=this.geo2pos(t,[a.left+a.width,a.top+a.height]),m=Math.abs(h[0]-l[0]),V=Math.abs(h[1]-l[1]),U=s.width,d=s.height,p=m/.75/U,c=V/d;p>c?(p=.75*c,m=U*p):(c=p,p=.75*c,V=d*c);var u={OffsetLeft:l[0],OffsetTop:l[1],scale:{x:p,y:c}},y=r.geoJson2Path(i,u);return this._getSingleProvince(t,y[0],o)},_getSingleProvince:function(e,t,i){var n,a=t.properties.name,o=g[a]||[0,0];if(b[a])n=this.geo2pos(e,b[a]);else if(t.cp)n=[t.cp[0]+o[0],t.cp[1]+o[1]];else{var r=this._mapDataMap[e].bbox;n=this.geo2pos(e,[r.left+r.width/2,r.top+r.height/2]),n[0]+=o[0],n[1]+=o[1]}return t.name=this._nameChange(e,a),t.position=i,t.textX=n[0],t.textY=n[1],t},_getTransform:function(e,t,i){var n,a,o,r,s,l,h,m=this.series,V=this.zr.getWidth(),U=this.zr.getHeight(),d=Math.round(.02*Math.min(V,U));for(var p in t)n=m[p].mapLocation||{},o=n.x||o,s=n.y||s,l=n.width||l,h=n.height||h;a=this.parsePercent(o,V),a=isNaN(a)?d:a,r=this.parsePercent(s,U),r=isNaN(r)?d:r,l=null==l?V-a-2*d:this.parsePercent(l,V),h=null==h?U-r-2*d:this.parsePercent(h,U);var c=e.width,u=e.height,y=l/i/c,g=h/u;if(y>g?(y=g*i,l=c*y):(g=y,y=g*i,h=u*g),isNaN(o))switch(o=o||"center",o+""){case"center":a=Math.floor((V-l)/2);break;case"right":a=V-l}if(isNaN(s))switch(s=s||"center",s+""){case"center":r=Math.floor((U-h)/2);break;case"bottom":r=U-h}return{left:a,top:r,width:l,height:h,baseScale:1,scale:{x:y,y:g}}},_buildMap:function(e,t,i,m){for(var V,c,u,y,g,b,f,k,x,_,L,W=this.series,X=this.component.legend,v=this.component.dataRange,w=0,K=t.length;K>w;w++){if(k=p.clone(t[w]),x={name:k.name,path:k.path,position:p.clone(k.position)},c=k.name,u=i[c]){g=[u],V="";for(var I=0,J=u.seriesIndex.length;J>I;I++){var C=W[u.seriesIndex[I]];g.push(C),V+=C.name+" ",X&&this._showLegendSymbol[e]&&X.hasColor(C.name)&&this.shapeList.push(new o({zlevel:C.zlevel,z:C.z+1,position:p.clone(k.position),_mapType:e,style:{x:k.textX+3+7*I,y:k.textY-10,r:3,color:X.getColor(C.name)},hoverable:!1}))}y=u.value}else{u={name:c,value:"-"},V="",g=[];for(var S in m)g.push(W[S]);y="-"}switch(this.ecTheme.map&&g.push(this.ecTheme.map),g.push(U.map),b=v&&!isNaN(y)?v.getColor(y):null,k.color=k.color||b||this.getItemStyleColor(this.deepQuery(g,"itemStyle.normal.color"),u.seriesIndex,-1,u)||this.deepQuery(g,"itemStyle.normal.areaStyle.color"),k.strokeColor=k.strokeColor||this.deepQuery(g,"itemStyle.normal.borderColor"),k.lineWidth=k.lineWidth||this.deepQuery(g,"itemStyle.normal.borderWidth"),x.color=this.getItemStyleColor(this.deepQuery(g,"itemStyle.emphasis.color"),u.seriesIndex,-1,u)||this.deepQuery(g,"itemStyle.emphasis.areaStyle.color")||k.color,x.strokeColor=this.deepQuery(g,"itemStyle.emphasis.borderColor")||k.strokeColor,x.lineWidth=this.deepQuery(g,"itemStyle.emphasis.borderWidth")||k.lineWidth,k.brushType=x.brushType=k.brushType||"both",k.lineJoin=x.lineJoin="round",k._name=x._name=c,f=this.deepQuery(g,"itemStyle.normal.label.textStyle"),L={zlevel:this.getZlevelBase(),z:this.getZBase()+1,position:p.clone(k.position),_mapType:e,_geo:this.pos2geo(e,[k.textX,k.textY]),style:{brushType:"fill",x:k.textX,y:k.textY,text:this.getLabelText(c,y,g,"normal"),_name:c,textAlign:"center",color:this.deepQuery(g,"itemStyle.normal.label.show")?this.deepQuery(g,"itemStyle.normal.label.textStyle.color"):"rgba(0,0,0,0)",textFont:this.getFont(f)}},L._style=p.clone(L.style),L.highlightStyle=p.clone(L.style),this.deepQuery(g,"itemStyle.emphasis.label.show")?(L.highlightStyle.text=this.getLabelText(c,y,g,"emphasis"),L.highlightStyle.color=this.deepQuery(g,"itemStyle.emphasis.label.textStyle.color")||L.style.color,f=this.deepQuery(g,"itemStyle.emphasis.label.textStyle")||f,L.highlightStyle.textFont=this.getFont(f)):L.highlightStyle.color="rgba(0,0,0,0)",_={zlevel:this.getZlevelBase(),z:this.getZBase(),position:p.clone(k.position),style:k,highlightStyle:x,_style:p.clone(k),_mapType:e},null!=k.scale&&(_.scale=p.clone(k.scale)),L=new n(L),_.style.shapeType){case"rectangle":_=new r(_);break;case"line":_=new s(_);break;case"circle":_=new o(_);break;case"polygon":_=new l(_);break;case"ellipse":_=new h(_);break;default:_=new a(_),_.buildPathArray&&(_.style.pathArray=_.buildPathArray(_.style.path))}(this._selectedMode[e]&&this._selected[c]&&u.selected!==!1||u.selected===!0)&&(L.style=L.highlightStyle,_.style=_.highlightStyle),L.clickable=_.clickable=this._clickable[e]&&(null==u.clickable||u.clickable),this._selectedMode[e]&&(this._selected[c]=null!=this._selected[c]?this._selected[c]:u.selected,this._mapTypeMap[c]=e,(null==u.selectable||u.selectable)&&(_.clickable=L.clickable=!0,_.onclick=L.onclick=this.shapeHandler.onclick)),this._hoverable[e]&&(null==u.hoverable||u.hoverable)?(L.hoverable=_.hoverable=!0,_.hoverConnect=L.id,L.hoverConnect=_.id):L.hoverable=_.hoverable=!1,d.pack(L,{name:V,tooltip:this.deepQuery(g,"tooltip")},0,u,0,c),this.shapeList.push(L),d.pack(_,{name:V,tooltip:this.deepQuery(g,"tooltip")},0,u,0,c),this.shapeList.push(_)}},_buildMark:function(e,t){this._seriesIndexToMapType=this._seriesIndexToMapType||{},this.markAttachStyle=this.markAttachStyle||{};var i=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top];"none"==e&&(i=[0,0]);for(var n in t)this._seriesIndexToMapType[n]=e,this.markAttachStyle[n]={position:i,_mapType:e},this.buildMark(n)},_buildHeatmap:function(e){for(var t=this.series,i=0,n=t.length;n>i;i++)if(t[i].heatmap){var a=t[i].heatmap.data;if(t[i].heatmap.needsTransform===!1){for(var o=[],r=0,s=a.length;s>r;++r)o.push([a[r][3],a[r][4],a[r][2]]);var l=[0,0]}else{var h=t[i].heatmap._geoData;if(void 0===h){t[i].heatmap._geoData=[];for(var r=0,s=a.length;s>r;++r)t[i].heatmap._geoData[r]=a[r];h=t[i].heatmap._geoData}for(var s=a.length,U=0;s>U;++U)a[U]=this.geo2pos(e,[h[U][0],h[U][1]]);var l=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top]}var d=new V(t[i].heatmap),p=d.getCanvas(a[0][3]?o:a,this.zr.getWidth(),this.zr.getHeight()),c=new m({zlevel:this.getZlevelBase(),z:this.getZBase()+1,position:l,scale:[1,1],hoverable:!1,style:{x:0,y:0,image:p,width:p.width,height:p.height}});c.type="heatmap",c._mapType=e,this.shapeList.push(c),this.zr.addShape(c)}},getMarkCoord:function(e,t){return t.geoCoord||b[t.name]?this.geo2pos(this._seriesIndexToMapType[e],t.geoCoord||b[t.name]):[0,0]},getMarkGeo:function(e){return e.geoCoord||b[e.name]},_nameChange:function(e,t){return this._nameMap[e][t]||t},getLabelText:function(e,t,i,n){var a=this.deepQuery(i,"itemStyle."+n+".label.formatter");return a?"function"==typeof a?a.call(this.myChart,e,t):"string"==typeof a?(a=a.replace("{a}","{a0}").replace("{b}","{b0}"),a=a.replace("{a0}",e).replace("{b0}",t)):void 0:e},_findMapTypeByPos:function(e,t){var i,n,a,o,r;for(var s in this._mapDataMap)if(i=this._mapDataMap[s].transform,i&&this._roamMap[s]&&this._activeMapType[s]&&(n=i.left,a=i.top,o=i.width,r=i.height,e>=n&&n+o>=e&&t>=a&&a+r>=t))return s},__onmousewheel:function(e){function t(e,t){for(var i=0;i<e.pointList.length;i++){var n=e.pointList[i];n[0]*=t,n[1]*=t}var a=e.controlPointList;if(a)for(var i=0;i<a.length;i++){var n=a[i];n[0]*=t,n[1]*=t}}function i(e,t){e.xStart*=t,e.yStart*=t,e.xEnd*=t,e.yEnd*=t,null!=e.cpX1&&(e.cpX1*=t,e.cpY1*=t)}if(!(this.shapeList.length<=0)){for(var n=0,a=this.shapeList.length;a>n;n++){var o=this.shapeList[n];if(o.__animating)return}var r,s,l=e.event,h=u.getX(l),m=u.getY(l),V=u.getDelta(l),d=e.mapTypeControl;d||(d={},s=this._findMapTypeByPos(h,m),s&&this._roamMap[s]&&"move"!=this._roamMap[s]&&(d[s]=!0));var p=!1;for(s in d)if(d[s]){p=!0;var c=this._mapDataMap[s].transform,y=c.left,g=c.top,b=c.width,f=c.height,k=this.pos2geo(s,[h-y,m-g]);if(V>0){if(r=1.2,null!=this._scaleLimitMap[s].max&&c.baseScale>=this._scaleLimitMap[s].max)continue}else if(r=1/1.2,null!=this._scaleLimitMap[s].min&&c.baseScale<=this._scaleLimitMap[s].min)continue;c.baseScale*=r,c.scale.x*=r,c.scale.y*=r,c.width=b*r,c.height=f*r,this._mapDataMap[s].hasRoam=!0,this._mapDataMap[s].transform=c,k=this.geo2pos(s,k),c.left-=k[0]-(h-y),c.top-=k[1]-(m-g),this._mapDataMap[s].transform=c,this.clearEffectShape(!0);for(var n=0,a=this.shapeList.length;a>n;n++){var o=this.shapeList[n];if(o._mapType==s){var x=o.type,_=o.style;switch(o.position[0]=c.left,o.position[1]=c.top,x){case"path":case"symbol":case"circle":case"rectangle":case"polygon":case"line":case"ellipse":case"heatmap":o.scale[0]*=r,o.scale[1]*=r;break;case"mark-line":i(_,r);break;case"polyline":t(_,r);break;case"shape-bundle":for(var L=0;L<_.shapeList.length;L++){var W=_.shapeList[L];"mark-line"==W.type?i(W.style,r):"polyline"==W.type&&t(W.style,r)}break;case"icon":case"image":k=this.geo2pos(s,o._geo),_.x=_._x=k[0]-_.width/2,_.y=_._y=k[1]-_.height/2;break;default:k=this.geo2pos(s,o._geo),_.x=k[0],_.y=k[1],"text"==x&&(o._style.x=o.highlightStyle.x=k[0],o._style.y=o.highlightStyle.y=k[1])}this.zr.modShape(o.id)}}}if(p){u.stop(l),this.zr.refreshNextFrame();var X=this;clearTimeout(this._refreshDelayTicket),this._refreshDelayTicket=setTimeout(function(){X&&X.shapeList&&X.animationEffect()},100),this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:"scale"},this.myChart)}}},__onmousedown:function(e){if(!(this.shapeList.length<=0)){var t=e.target;if(!t||!t.draggable){var i=e.event,n=u.getX(i),a=u.getY(i),o=this._findMapTypeByPos(n,a);if(o&&this._roamMap[o]&&"scale"!=this._roamMap[o]){this._mousedown=!0,this._mx=n,this._my=a,this._curMapType=o,this.zr.on(c.EVENT.MOUSEUP,this._onmouseup);var r=this;setTimeout(function(){r.zr.on(c.EVENT.MOUSEMOVE,r._onmousemove)},100)}}}},__onmousemove:function(e){if(this._mousedown&&this._isAlive){var t=e.event,i=u.getX(t),n=u.getY(t),a=this._mapDataMap[this._curMapType].transform;a.hasRoam=!0,a.left-=this._mx-i,a.top-=this._my-n,this._mx=i,this._my=n,this._mapDataMap[this._curMapType].transform=a;for(var o=0,r=this.shapeList.length;r>o;o++)this.shapeList[o]._mapType==this._curMapType&&(this.shapeList[o].position[0]=a.left,this.shapeList[o].position[1]=a.top,this.zr.modShape(this.shapeList[o].id));this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:"move"},this.myChart),this.clearEffectShape(!0),this.zr.refreshNextFrame(),this._justMove=!0,u.stop(t)}},__onmouseup:function(e){var t=e.event;this._mx=u.getX(t),this._my=u.getY(t),this._mousedown=!1;var i=this;setTimeout(function(){i._justMove&&i.animationEffect(),i._justMove=!1,i.zr.un(c.EVENT.MOUSEMOVE,i._onmousemove),i.zr.un(c.EVENT.MOUSEUP,i._onmouseup)},120)},__onroamcontroller:function(e){var t=e.event;t.zrenderX=this.zr.getWidth()/2,t.zrenderY=this.zr.getHeight()/2;var i=e.mapTypeControl,n=0,a=0,o=e.step;switch(e.roamType){case"scaleUp":return t.zrenderDelta=1,void this.__onmousewheel({event:t,mapTypeControl:i});case"scaleDown":return t.zrenderDelta=-1,void this.__onmousewheel({event:t,mapTypeControl:i});case"up":n=-o;break;case"down":n=o;break;case"left":a=-o;break;case"right":a=o}var r,s;for(s in i)this._mapDataMap[s]&&this._activeMapType[s]&&(r=this._mapDataMap[s].transform,r.hasRoam=!0,r.left-=a,r.top-=n,this._mapDataMap[s].transform=r);for(var l=0,h=this.shapeList.length;h>l;l++)s=this.shapeList[l]._mapType,i[s]&&this._activeMapType[s]&&(r=this._mapDataMap[s].transform,this.shapeList[l].position[0]=r.left,this.shapeList[l].position[1]=r.top,this.zr.modShape(this.shapeList[l].id));this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:"move"},this.myChart),this.clearEffectShape(!0),this.zr.refreshNextFrame(),clearTimeout(this.dircetionTimer);var m=this;this.dircetionTimer=setTimeout(function(){m.animationEffect()},150)},__ondrhoverlink:function(e){for(var t,i,n=0,a=this.shapeList.length;a>n;n++)t=this.shapeList[n]._mapType,this._hoverLinkMap[t]&&this._activeMapType[t]&&(i=d.get(this.shapeList[n],"value"),null!=i&&i>=e.valueMin&&i<=e.valueMax&&this.zr.addHoverShape(this.shapeList[n]))},onclick:function(e){if(this.isClick&&e.target&&!this._justMove&&"icon"!=e.target.type){this.isClick=!1;var t=e.target,i=t.style._name,n=this.shapeList.length,a=t._mapType||"";if("single"==this._selectedMode[a])for(var o in this._selected)if(this._selected[o]&&this._mapTypeMap[o]==a){for(var r=0;n>r;r++)this.shapeList[r].style._name==o&&this.shapeList[r]._mapType==a&&(this.shapeList[r].style=this.shapeList[r]._style,this.zr.modShape(this.shapeList[r].id));o!=i&&(this._selected[o]=!1)}this._selected[i]=!this._selected[i];for(var r=0;n>r;r++)this.shapeList[r].style._name==i&&this.shapeList[r]._mapType==a&&(this.shapeList[r].style=this._selected[i]?this.shapeList[r].highlightStyle:this.shapeList[r]._style,this.zr.modShape(this.shapeList[r].id));this.messageCenter.dispatch(U.EVENT.MAP_SELECTED,e.event,{selected:this._selected,target:i},this.myChart),this.zr.refreshNextFrame();var s=this;setTimeout(function(){s.zr.trigger(c.EVENT.MOUSEMOVE,e.event)},100)}},refresh:function(e){e&&(this.option=e,this.series=e.series),this._mapDataRequireCounter>0?this.clear():this.backupShapeList(),this._buildShape(),this.zr.refreshHover()},ondataRange:function(e,t){this.component.dataRange&&(this.refresh(),t.needRefresh=!0)},pos2geo:function(e,t){return this._mapDataMap[e].transform?this._mapDataMap[e].projection.pos2geo(this._mapDataMap[e].transform,t):null},getGeoByPos:function(e,t){if(!this._mapDataMap[e].transform)return null;var i=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top];return t instanceof Array?(t[0]-=i[0],t[1]-=i[1]):(t.x-=i[0],t.y-=i[1]),this.pos2geo(e,t)},geo2pos:function(e,t){return this._mapDataMap[e].transform?this._mapDataMap[e].projection.geo2pos(this._mapDataMap[e].transform,t):null},getPosByGeo:function(e,t){if(!this._mapDataMap[e].transform)return null;var i=this.geo2pos(e,t);return i[0]+=this._mapDataMap[e].transform.left,i[1]+=this._mapDataMap[e].transform.top,i},getMapPosition:function(e){return this._mapDataMap[e].transform?[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top]:null},onbeforDispose:function(){this._isAlive=!1,this.zr.un(c.EVENT.MOUSEWHEEL,this._onmousewheel),this.zr.un(c.EVENT.MOUSEDOWN,this._onmousedown),this.messageCenter.unbind(U.EVENT.ROAMCONTROLLER,this._onroamcontroller),this.messageCenter.unbind(U.EVENT.DATA_RANGE_HOVERLINK,this._ondrhoverlink)}},p.inherits(t,i),e("../chart").define("map",t),t}),i("zrender/shape/Path",["require","./Base","./util/PathProxy","../tool/util"],function(e){var t=e("./Base"),i=e("./util/PathProxy"),n=i.PathSegment,a=function(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])},o=function(e,t){return(e[0]*t[0]+e[1]*t[1])/(a(e)*a(t))},r=function(e,t){return(e[0]*t[1]<e[1]*t[0]?-1:1)*Math.acos(o(e,t))},s=function(e){t.call(this,e)};return s.prototype={type:"path",buildPathArray:function(e,t,i){if(!e)return[];t=t||0,i=i||0;var a=e,o=["m","M","l","L","v","V","h","H","z","Z","c","C","q","Q","t","T","s","S","a","A"];a=a.replace(/-/g," -"),a=a.replace(/ /g," "),a=a.replace(/ /g,","),a=a.replace(/,,/g,",");var r;for(r=0;r<o.length;r++)a=a.replace(new RegExp(o[r],"g"),"|"+o[r]);var s=a.split("|"),l=[],h=0,m=0;for(r=1;r<s.length;r++){var V=s[r],U=V.charAt(0);V=V.slice(1),V=V.replace(new RegExp("e,-","g"),"e-");var d=V.split(",");d.length>0&&""===d[0]&&d.shift();for(var p=0;p<d.length;p++)d[p]=parseFloat(d[p]);for(;d.length>0&&!isNaN(d[0]);){var c,u,y,g,b,f,k,x,_=null,L=[],W=h,X=m;switch(U){case"l":h+=d.shift(),m+=d.shift(),_="L",L.push(h,m);break;case"L":h=d.shift(),m=d.shift(),L.push(h,m);break;case"m":h+=d.shift(),m+=d.shift(),_="M",L.push(h,m),U="l";break;case"M":h=d.shift(),m=d.shift(),_="M",L.push(h,m),U="L";break;case"h":h+=d.shift(),_="L",L.push(h,m);break;case"H":h=d.shift(),_="L",L.push(h,m);break;case"v":m+=d.shift(),_="L",L.push(h,m);break;case"V":m=d.shift(),_="L",L.push(h,m);break;case"C":L.push(d.shift(),d.shift(),d.shift(),d.shift()),h=d.shift(),m=d.shift(),L.push(h,m);break;case"c":L.push(h+d.shift(),m+d.shift(),h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_="C",L.push(h,m);break;case"S":c=h,u=m,y=l[l.length-1],"C"===y.command&&(c=h+(h-y.points[2]),u=m+(m-y.points[3])),L.push(c,u,d.shift(),d.shift()),h=d.shift(),m=d.shift(),_="C",L.push(h,m);break;case"s":c=h,u=m,y=l[l.length-1],"C"===y.command&&(c=h+(h-y.points[2]),u=m+(m-y.points[3])),L.push(c,u,h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_="C",L.push(h,m);break;case"Q":L.push(d.shift(),d.shift()),h=d.shift(),m=d.shift(),L.push(h,m);break;case"q":L.push(h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_="Q",L.push(h,m);break;case"T":c=h,u=m,y=l[l.length-1],"Q"===y.command&&(c=h+(h-y.points[0]),u=m+(m-y.points[1])),h=d.shift(),m=d.shift(),_="Q",L.push(c,u,h,m);break;case"t":c=h,u=m,y=l[l.length-1],"Q"===y.command&&(c=h+(h-y.points[0]),u=m+(m-y.points[1])),h+=d.shift(),m+=d.shift(),_="Q",L.push(c,u,h,m);break;case"A":g=d.shift(),b=d.shift(),f=d.shift(),k=d.shift(),x=d.shift(),W=h,X=m,h=d.shift(),m=d.shift(),_="A",L=this._convertPoint(W,X,h,m,k,x,g,b,f);break;case"a":g=d.shift(),b=d.shift(),f=d.shift(),k=d.shift(),x=d.shift(),W=h,X=m,h+=d.shift(),m+=d.shift(),_="A",L=this._convertPoint(W,X,h,m,k,x,g,b,f)}for(var v=0,w=L.length;w>v;v+=2)L[v]+=t,L[v+1]+=i;l.push(new n(_||U,L))}("z"===U||"Z"===U)&&l.push(new n("z",[]))}return l},_convertPoint:function(e,t,i,n,a,s,l,h,m){var V=m*(Math.PI/180),U=Math.cos(V)*(e-i)/2+Math.sin(V)*(t-n)/2,d=-1*Math.sin(V)*(e-i)/2+Math.cos(V)*(t-n)/2,p=U*U/(l*l)+d*d/(h*h);p>1&&(l*=Math.sqrt(p),h*=Math.sqrt(p));var c=Math.sqrt((l*l*h*h-l*l*d*d-h*h*U*U)/(l*l*d*d+h*h*U*U));a===s&&(c*=-1),isNaN(c)&&(c=0);var u=c*l*d/h,y=c*-h*U/l,g=(e+i)/2+Math.cos(V)*u-Math.sin(V)*y,b=(t+n)/2+Math.sin(V)*u+Math.cos(V)*y,f=r([1,0],[(U-u)/l,(d-y)/h]),k=[(U-u)/l,(d-y)/h],x=[(-1*U-u)/l,(-1*d-y)/h],_=r(k,x);return o(k,x)<=-1&&(_=Math.PI),o(k,x)>=1&&(_=0),0===s&&_>0&&(_-=2*Math.PI),1===s&&0>_&&(_+=2*Math.PI),[g,b,l,h,f,_,V,s]},buildPath:function(e,t){var i=t.path,n=t.x||0,a=t.y||0;t.pathArray=t.pathArray||this.buildPathArray(i,n,a);for(var o=t.pathArray,r=t.pointList=[],s=[],l=0,h=o.length;h>l;l++){"M"==o[l].command.toUpperCase()&&(s.length>0&&r.push(s),s=[]);for(var m=o[l].points,V=0,U=m.length;U>V;V+=2)s.push([m[V],m[V+1]])}s.length>0&&r.push(s);for(var l=0,h=o.length;h>l;l++){var d=o[l].command,m=o[l].points;switch(d){case"L":e.lineTo(m[0],m[1]);break;case"M":e.moveTo(m[0],m[1]);break;case"C":e.bezierCurveTo(m[0],m[1],m[2],m[3],m[4],m[5]);break;case"Q":e.quadraticCurveTo(m[0],m[1],m[2],m[3]);break;case"A":var p=m[0],c=m[1],u=m[2],y=m[3],g=m[4],b=m[5],f=m[6],k=m[7],x=u>y?u:y,_=u>y?1:u/y,L=u>y?y/u:1;e.translate(p,c),e.rotate(f),e.scale(_,L),e.arc(0,0,x,g,g+b,1-k),e.scale(1/_,1/L),e.rotate(-f),e.translate(-p,-c);break;case"z":e.closePath()}}},getRect:function(e){if(e.__rect)return e.__rect;var t;t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0;for(var i=Number.MAX_VALUE,n=Number.MIN_VALUE,a=Number.MAX_VALUE,o=Number.MIN_VALUE,r=e.x||0,s=e.y||0,l=e.pathArray||this.buildPathArray(e.path),h=0;h<l.length;h++)for(var m=l[h].points,V=0;V<m.length;V++)V%2===0?(m[V]+r<i&&(i=m[V]),m[V]+r>n&&(n=m[V])):(m[V]+s<a&&(a=m[V]),m[V]+s>o&&(o=m[V]));var U;return U=i===Number.MAX_VALUE||n===Number.MIN_VALUE||a===Number.MAX_VALUE||o===Number.MIN_VALUE?{x:0,y:0,width:0,height:0}:{x:Math.round(i-t/2),y:Math.round(a-t/2),width:n-i+t,height:o-a+t},e.__rect=U,U}},e("../tool/util").inherits(s,t),s}),i("zrender/shape/Ellipse",["require","./Base","../tool/util"],function(e){var t=e("./Base"),i=function(e){t.call(this,e)};return i.prototype={type:"ellipse",buildPath:function(e,t){var i=.5522848,n=t.x,a=t.y,o=t.a,r=t.b,s=o*i,l=r*i;e.moveTo(n-o,a),e.bezierCurveTo(n-o,a-l,n-s,a-r,n,a-r),e.bezierCurveTo(n+s,a-r,n+o,a-l,n+o,a),e.bezierCurveTo(n+o,a+l,n+s,a+r,n,a+r),e.bezierCurveTo(n-s,a+r,n-o,a+l,n-o,a),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var t;return t="stroke"==e.brushType||"fill"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.a-t/2), +y:Math.round(e.y-e.b-t/2),width:2*e.a+t,height:2*e.b+t},e.__rect}},e("../tool/util").inherits(i,t),i}),i("echarts/component/roamController",["require","./base","zrender/shape/Rectangle","zrender/shape/Sector","zrender/shape/Circle","../config","zrender/tool/util","zrender/tool/color","zrender/tool/event","../component"],function(e){function t(e,t,n,a,o){if(this.rcOption={},a.roamController&&a.roamController.show){if(!a.roamController.mapTypeControl)return void console.error("option.roamController.mapTypeControl has not been defined.");i.call(this,e,t,n,a,o),this.rcOption=a.roamController;var r=this;this._drictionMouseDown=function(e){return r.__drictionMouseDown(e)},this._drictionMouseUp=function(e){return r.__drictionMouseUp(e)},this._drictionMouseMove=function(e){return r.__drictionMouseMove(e)},this._drictionMouseOut=function(e){return r.__drictionMouseOut(e)},this._scaleHandler=function(e){return r.__scaleHandler(e)},this.refresh(a)}}var i=e("./base"),n=e("zrender/shape/Rectangle"),a=e("zrender/shape/Sector"),o=e("zrender/shape/Circle"),r=e("../config");r.roamController={zlevel:0,z:4,show:!0,x:"left",y:"top",width:80,height:120,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,handleColor:"#6495ed",fillerColor:"#fff",step:15,mapTypeControl:null};var s=e("zrender/tool/util"),l=e("zrender/tool/color"),h=e("zrender/tool/event");return t.prototype={type:r.COMPONENT_TYPE_ROAMCONTROLLER,_buildShape:function(){if(this.rcOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){this.shapeList.push(this._getDirectionShape("up")),this.shapeList.push(this._getDirectionShape("down")),this.shapeList.push(this._getDirectionShape("left")),this.shapeList.push(this._getDirectionShape("right")),this.shapeList.push(this._getScaleShape("scaleUp")),this.shapeList.push(this._getScaleShape("scaleDown"))},_getDirectionShape:function(e){var t=this._itemGroupLocation.r,i=this._itemGroupLocation.x+t,n=this._itemGroupLocation.y+t,o={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:i,y:n,r:t,startAngle:-45,endAngle:45,color:this.rcOption.handleColor,text:">",textX:i+t/2+4,textY:n-.5,textAlign:"center",textBaseline:"middle",textPosition:"specific",textColor:this.rcOption.fillerColor,textFont:Math.floor(t/2)+"px arial"},highlightStyle:{color:l.lift(this.rcOption.handleColor,-.2),brushType:"fill"},clickable:!0};switch(e){case"up":o.rotation=[Math.PI/2,i,n];break;case"left":o.rotation=[Math.PI,i,n];break;case"down":o.rotation=[-Math.PI/2,i,n]}return o=new a(o),o._roamType=e,o.onmousedown=this._drictionMouseDown,o.onmouseup=this._drictionMouseUp,o.onmousemove=this._drictionMouseMove,o.onmouseout=this._drictionMouseOut,o},_getScaleShape:function(e){var t=this._itemGroupLocation.width,i=this._itemGroupLocation.height-t;i=0>i?20:i;var n=Math.min(t/2-5,i)/2,a=this._itemGroupLocation.x+("scaleDown"===e?t-n:n),r=this._itemGroupLocation.y+this._itemGroupLocation.height-n,s={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:a,y:r,r:n,color:this.rcOption.handleColor,text:"scaleDown"===e?"-":"+",textX:a,textY:r-2,textAlign:"center",textBaseline:"middle",textPosition:"specific",textColor:this.rcOption.fillerColor,textFont:Math.floor(n)+"px verdana"},highlightStyle:{color:l.lift(this.rcOption.handleColor,-.2),brushType:"fill"},clickable:!0};return s=new o(s),s._roamType=e,s.onmousedown=this._scaleHandler,s},_buildBackground:function(){var e=this.reformCssArray(this.rcOption.padding);this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.rcOption.borderWidth?"fill":"both",color:this.rcOption.backgroundColor,strokeColor:this.rcOption.borderColor,lineWidth:this.rcOption.borderWidth}}))},_getItemGroupLocation:function(){var e,t=this.reformCssArray(this.rcOption.padding),i=this.rcOption.width,n=this.rcOption.height,a=this.zr.getWidth(),o=this.zr.getHeight();switch(this.rcOption.x){case"center":e=Math.floor((a-i)/2);break;case"left":e=t[3]+this.rcOption.borderWidth;break;case"right":e=a-i-t[1]-t[3]-2*this.rcOption.borderWidth;break;default:e=this.parsePercent(this.rcOption.x,a)}var r;switch(this.rcOption.y){case"top":r=t[0]+this.rcOption.borderWidth;break;case"bottom":r=o-n-t[0]-t[2]-2*this.rcOption.borderWidth;break;case"center":r=Math.floor((o-n)/2);break;default:r=this.parsePercent(this.rcOption.y,o)}return{x:e,y:r,r:i/2,width:i,height:n}},__drictionMouseDown:function(e){this.mousedown=!0,this._drictionHandlerOn(e)},__drictionMouseUp:function(e){this.mousedown=!1,this._drictionHandlerOff(e)},__drictionMouseMove:function(e){this.mousedown&&this._drictionHandlerOn(e)},__drictionMouseOut:function(e){this._drictionHandlerOff(e)},_drictionHandlerOn:function(e){this._dispatchEvent(e.event,e.target._roamType),clearInterval(this.dircetionTimer);var t=this;this.dircetionTimer=setInterval(function(){t._dispatchEvent(e.event,e.target._roamType)},100),h.stop(e.event)},_drictionHandlerOff:function(){clearInterval(this.dircetionTimer)},__scaleHandler:function(e){this._dispatchEvent(e.event,e.target._roamType),h.stop(e.event)},_dispatchEvent:function(e,t){this.messageCenter.dispatch(r.EVENT.ROAMCONTROLLER,e,{roamType:t,mapTypeControl:this.rcOption.mapTypeControl,step:this.rcOption.step},this.myChart)},refresh:function(e){e&&(this.option=e||this.option,this.option.roamController=this.reformOption(this.option.roamController),this.rcOption=this.option.roamController),this.clear(),this._buildShape()}},s.inherits(t,i),e("../component").define("roamController",t),t}),i("echarts/layer/heatmap",["require"],function(){function e(e){if(this.option=e,e)for(var i in t)this.option[i]=void 0!==e[i]?e[i]:t[i];else this.option=t}var t={blurSize:30,gradientColors:["blue","cyan","lime","yellow","red"],minAlpha:.05,valueScale:1,opacity:1},i=20,n=256;return e.prototype={getCanvas:function(e,t,a){var o=this._getBrush(),r=this._getGradient(),s=i+this.option.blurSize,l=document.createElement("canvas");l.width=t,l.height=a;for(var h=l.getContext("2d"),m=e.length,V=0;m>V;++V){var U=e[V],d=U[0],p=U[1],c=U[2],u=Math.min(1,Math.max(c*this.option.valueScale||this.option.minAlpha,this.option.minAlpha));h.globalAlpha=u,h.drawImage(o,d-s,p-s)}for(var y=h.getImageData(0,0,l.width,l.height),g=y.data,m=g.length/4;m--;){var b=4*m+3,u=g[b]/256,f=Math.floor(u*(n-1));g[b-3]=r[4*f],g[b-2]=r[4*f+1],g[b-1]=r[4*f+2],g[b]*=this.option.opacity}return h.putImageData(y,0,0),l},_getBrush:function(){if(!this._brushCanvas){this._brushCanvas=document.createElement("canvas");var e=i+this.option.blurSize,t=2*e;this._brushCanvas.width=t,this._brushCanvas.height=t;var n=this._brushCanvas.getContext("2d");n.shadowOffsetX=t,n.shadowBlur=this.option.blurSize,n.shadowColor="black",n.beginPath(),n.arc(-e,e,i,0,2*Math.PI,!0),n.closePath(),n.fill()}return this._brushCanvas},_getGradient:function(){if(!this._gradientPixels){var e=n,t=document.createElement("canvas");t.width=1,t.height=e;for(var i=t.getContext("2d"),a=i.createLinearGradient(0,0,0,e),o=this.option.gradientColors.length,r=0;o>r;++r)"string"==typeof this.option.gradientColors[r]?a.addColorStop((r+1)/o,this.option.gradientColors[r]):a.addColorStop(this.option.gradientColors[r].offset,this.option.gradientColors[r].color);i.fillStyle=a,i.fillRect(0,0,1,e),this._gradientPixels=i.getImageData(0,0,1,e).data}return this._gradientPixels}},e}),i("echarts/util/mapData/params",["require"],function(e){function t(e){if(!e.UTF8Encoding)return e;for(var t=e.features,n=0;n<t.length;n++)for(var a=t[n],o=a.geometry.coordinates,r=a.geometry.encodeOffsets,s=0;s<o.length;s++){var l=o[s];if("Polygon"===a.geometry.type)o[s]=i(l,r[s]);else if("MultiPolygon"===a.geometry.type)for(var h=0;h<l.length;h++){var m=l[h];l[h]=i(m,r[s][h])}}return e.UTF8Encoding=!1,e}function i(e,t){for(var i=[],n=t[0],a=t[1],o=0;o<e.length;o+=2){var r=e.charCodeAt(o)-64,s=e.charCodeAt(o+1)-64;r=r>>1^-(1&r),s=s>>1^-(1&s),r+=n,s+=a,n=r,a=s,i.push([r/1024,s/1024])}return i}var n={none:{getGeoJson:function(e){e({type:"FeatureCollection",features:[{type:"Feature",geometry:{coordinates:[],encodeOffsets:[],type:"Polygon"},properties:{}}]})}},world:{getGeoJson:function(i){e(["./geoJson/world_geo"],function(e){i(t(e))})}},china:{getGeoJson:function(i){e(["./geoJson/china_geo"],function(e){i(t(e))})}},"南海诸岛":{textCoord:[126,25],getPath:function(e,t){for(var i=[[[0,3.5],[7,11.2],[15,11.9],[30,7],[42,.7],[52,.7],[56,7.7],[59,.7],[64,.7],[64,0],[5,0],[0,3.5]],[[13,16.1],[19,14.7],[16,21.7],[11,23.1],[13,16.1]],[[12,32.2],[14,38.5],[15,38.5],[13,32.2],[12,32.2]],[[16,47.6],[12,53.2],[13,53.2],[18,47.6],[16,47.6]],[[6,64.4],[8,70],[9,70],[8,64.4],[6,64.4]],[[23,82.6],[29,79.8],[30,79.8],[25,82.6],[23,82.6]],[[37,70.7],[43,62.3],[44,62.3],[39,70.7],[37,70.7]],[[48,51.1],[51,45.5],[53,45.5],[50,51.1],[48,51.1]],[[51,35],[51,28.7],[53,28.7],[53,35],[51,35]],[[52,22.4],[55,17.5],[56,17.5],[53,22.4],[52,22.4]],[[58,12.6],[62,7],[63,7],[60,12.6],[58,12.6]],[[0,3.5],[0,93.1],[64,93.1],[64,0],[63,0],[63,92.4],[1,92.4],[1,3.5],[0,3.5]]],n="",a=e[0],o=e[1],r=0,s=i.length;s>r;r++){n+="M "+((i[r][0][0]*t+a).toFixed(2)-0)+" "+((i[r][0][1]*t+o).toFixed(2)-0)+" ";for(var l=1,h=i[r].length;h>l;l++)n+="L "+((i[r][l][0]*t+a).toFixed(2)-0)+" "+((i[r][l][1]*t+o).toFixed(2)-0)+" "}return n+" Z"}},"新疆维吾尔自治区":{getGeoJson:function(i){e(["./geoJson/xin_jiang_geo"],function(e){i(t(e))})}},"西藏自治区":{getGeoJson:function(i){e(["./geoJson/xi_zang_geo"],function(e){i(t(e))})}},"内蒙古自治区":{getGeoJson:function(i){e(["./geoJson/nei_meng_gu_geo"],function(e){i(t(e))})}},"青海省":{getGeoJson:function(i){e(["./geoJson/qing_hai_geo"],function(e){i(t(e))})}},"四川省":{getGeoJson:function(i){e(["./geoJson/si_chuan_geo"],function(e){i(t(e))})}},"黑龙江省":{getGeoJson:function(i){e(["./geoJson/hei_long_jiang_geo"],function(e){i(t(e))})}},"甘肃省":{getGeoJson:function(i){e(["./geoJson/gan_su_geo"],function(e){i(t(e))})}},"云南省":{getGeoJson:function(i){e(["./geoJson/yun_nan_geo"],function(e){i(t(e))})}},"广西壮族自治区":{getGeoJson:function(i){e(["./geoJson/guang_xi_geo"],function(e){i(t(e))})}},"湖南省":{getGeoJson:function(i){e(["./geoJson/hu_nan_geo"],function(e){i(t(e))})}},"陕西省":{getGeoJson:function(i){e(["./geoJson/shan_xi_1_geo"],function(e){i(t(e))})}},"广东":{getGeoJson:function(i){e(["./geoJson/guang_dong_geo"],function(e){i(t(e))})}},"吉林省":{getGeoJson:function(i){e(["./geoJson/ji_lin_geo"],function(e){i(t(e))})}},"河北省":{getGeoJson:function(i){e(["./geoJson/he_bei_geo"],function(e){i(t(e))})}},"湖北省":{getGeoJson:function(i){e(["./geoJson/hu_bei_geo"],function(e){i(t(e))})}},"贵州省":{getGeoJson:function(i){e(["./geoJson/gui_zhou_geo"],function(e){i(t(e))})}},"山东省":{getGeoJson:function(i){e(["./geoJson/shan_dong_geo"],function(e){i(t(e))})}},"江西省":{getGeoJson:function(i){e(["./geoJson/jiang_xi_geo"],function(e){i(t(e))})}},"河南省":{getGeoJson:function(i){e(["./geoJson/he_nan_geo"],function(e){i(t(e))})}},"辽宁省":{getGeoJson:function(i){e(["./geoJson/liao_ning_geo"],function(e){i(t(e))})}},"山西省":{getGeoJson:function(i){e(["./geoJson/shan_xi_2_geo"],function(e){i(t(e))})}},"安徽省":{getGeoJson:function(i){e(["./geoJson/an_hui_geo"],function(e){i(t(e))})}},"福建省":{getGeoJson:function(i){e(["./geoJson/fu_jian_geo"],function(e){i(t(e))})}},"浙江省":{getGeoJson:function(i){e(["./geoJson/zhe_jiang_geo"],function(e){i(t(e))})}},"江苏省":{getGeoJson:function(i){e(["./geoJson/jiang_su_geo"],function(e){i(t(e))})}},"重庆":{getGeoJson:function(i){e(["./geoJson/chong_qing_geo"],function(e){i(t(e))})}},"宁夏回族自治区":{getGeoJson:function(i){e(["./geoJson/ning_xia_geo"],function(e){i(t(e))})}},"海南省":{getGeoJson:function(i){e(["./geoJson/hai_nan_geo"],function(e){i(t(e))})}},"台湾":{getGeoJson:function(i){e(["./geoJson/tai_wan_geo"],function(e){i(t(e))})}},"北京":{getGeoJson:function(i){e(["./geoJson/bei_jing_geo"],function(e){i(t(e))})}},"天津":{getGeoJson:function(i){e(["./geoJson/tian_jin_geo"],function(e){i(t(e))})}},"上海":{getGeoJson:function(i){e(["./geoJson/shang_hai_geo"],function(e){i(t(e))})}},"香港":{getGeoJson:function(i){e(["./geoJson/xiang_gang_geo"],function(e){i(t(e))})}},"澳门特别行政区":{getGeoJson:function(i){e(["./geoJson/ao_men_geo"],function(e){i(t(e))})}}};return{decode:t,params:n}}),i("echarts/util/mapData/textFixed",[],function(){return{"广东省":[0,-10],"香港":[10,10],"澳门":[-10,18],"黑龙江省":[0,20],"天津":[5,5],"深圳市":[-35,0],"红河哈尼族彝族自治州":[0,20],"楚雄彝族自治州":[-5,15],"石河子市":[-5,5],"五家渠市":[0,-10],"昌吉回族自治州":[10,10],"昌江黎族自治县":[0,20],"陵水黎族自治县":[0,20],"东方市":[0,20],"渭南市":[0,20]}}),i("echarts/util/mapData/geoCoord",[],function(){return{Russia:[100,60],"United States of America":[-99,38]}}),i("echarts/util/projection/svg",["require","zrender/shape/Path"],function(e){function t(e){return parseFloat(e||0)}function i(e){for(var i=e.firstChild;"svg"!=i.nodeName.toLowerCase()||1!=i.nodeType;)i=i.nextSibling;var n=t(i.getAttribute("x")),a=t(i.getAttribute("y")),o=t(i.getAttribute("width")),r=t(i.getAttribute("height"));return{left:n,top:a,width:o,height:r}}function n(e,t){function i(e){var t=e.tagName;if(m[t]){var o=m[t](e,n);o&&(o.scale=n,o.properties={name:e.getAttribute("name")||""},o.id=e.id,s(o,e),a.push(o))}for(var r=e.childNodes,l=0,h=r.length;h>l;l++)i(r[l])}var n=[t.scale.x,t.scale.y],a=[];return i(e),a}function a(e,t){var i=t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y];return[i[0]/e.scale.x,i[1]/e.scale.y]}function o(e,t){var i=t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y];return[i[0]*e.scale.x,i[1]*e.scale.y]}function r(e){return e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function s(e,t){var i=t.getAttribute("fill"),n=t.getAttribute("stroke"),a=t.getAttribute("stroke-width"),o=t.getAttribute("opacity");i&&"none"!=i?(e.color=i,n?(e.brushType="both",e.strokeColor=n):e.brushType="fill"):n&&"none"!=n&&(e.strokeColor=n,e.brushType="stroke"),a&&"none"!=a&&(e.lineWidth=parseFloat(a)),o&&"none"!=o&&(e.opacity=parseFloat(o))}function l(e){for(var t=r(e).replace(/,/g," ").split(/\s+/),i=[],n=0;n<t.length;){var a=parseFloat(t[n++]),o=parseFloat(t[n++]);i.push([a,o])}return i}var h=e("zrender/shape/Path"),m={path:function(e,t){var i=e.getAttribute("d"),n=h.prototype.getRect({path:i});return{shapeType:"path",path:i,cp:[(n.x+n.width/2)*t[0],(n.y+n.height/2)*t[1]]}},rect:function(e,i){var n=t(e.getAttribute("x")),a=t(e.getAttribute("y")),o=t(e.getAttribute("width")),r=t(e.getAttribute("height"));return{shapeType:"rectangle",x:n,y:a,width:o,height:r,cp:[(n+o/2)*i[0],(a+r/2)*i[1]]}},line:function(e,i){var n=t(e.getAttribute("x1")),a=t(e.getAttribute("y1")),o=t(e.getAttribute("x2")),r=t(e.getAttribute("y2"));return{shapeType:"line",xStart:n,yStart:a,xEnd:o,yEnd:r,cp:[.5*(n+o)*i[0],.5*(a+r)*i[1]]}},circle:function(e,i){var n=t(e.getAttribute("cx")),a=t(e.getAttribute("cy")),o=t(e.getAttribute("r"));return{shapeType:"circle",x:n,y:a,r:o,cp:[n*i[0],a*i[1]]}},ellipse:function(e,t){var i=parseFloat(e.getAttribute("cx")||0),n=parseFloat(e.getAttribute("cy")||0),a=parseFloat(e.getAttribute("rx")||0),o=parseFloat(e.getAttribute("ry")||0);return{shapeType:"ellipse",x:i,y:n,a:a,b:o,cp:[i*t[0],n*t[1]]}},polygon:function(e,t){var i=e.getAttribute("points"),n=[1/0,1/0],a=[-(1/0),-(1/0)];if(i){i=l(i);for(var o=0;o<i.length;o++){var r=i[o];n[0]=Math.min(r[0],n[0]),n[1]=Math.min(r[1],n[1]),a[0]=Math.max(r[0],a[0]),a[1]=Math.max(r[1],a[1])}return{shapeType:"polygon",pointList:i,cp:[(n[0]+a[0])/2*t[0],(n[1]+a[1])/2*t[0]]}}},polyline:function(e,t){var i=m.polygon(e,t);return i}};return{getBbox:i,geoJson2Path:n,pos2geo:a,geo2pos:o}}),i("echarts/util/projection/normal",[],function(){function e(e,i){return i=i||{},e.srcSize||t(e,i),e.srcSize}function t(e,t){t=t||{},r.xmin=360,r.xmax=-360,r.ymin=180,r.ymax=-180;for(var i,n,a=e.features,o=0,s=a.length;s>o;o++)if(n=a[o],!n.properties.name||!t[n.properties.name])switch(n.type){case"Feature":r[n.geometry.type](n.geometry.coordinates);break;case"GeometryCollection":i=n.geometries;for(var l=0,h=i.length;h>l;l++)r[i[l].type](i[l].coordinates)}return e.srcSize={left:1*r.xmin.toFixed(4),top:1*r.ymin.toFixed(4),width:1*(r.xmax-r.xmin).toFixed(4),height:1*(r.ymax-r.ymin).toFixed(4)},e}function i(e,i,n){function a(e,t){c=e.type,u=e.coordinates,o._bbox={xmin:360,xmax:-360,ymin:180,ymax:-180},y=o[c](u),m.push({path:y,cp:o.makePoint(t.properties.cp?t.properties.cp:[(o._bbox.xmin+o._bbox.xmax)/2,(o._bbox.ymin+o._bbox.ymax)/2]),properties:t.properties,id:t.id})}n=n||{},o.scale=null,o.offset=null,e.srcSize||t(e,n),i.offset={x:e.srcSize.left,y:e.srcSize.top,left:i.OffsetLeft||0,top:i.OffsetTop||0},o.scale=i.scale,o.offset=i.offset;for(var r,s,l,h=e.features,m=[],V=0,U=h.length;U>V;V++)if(l=h[V],!l.properties.name||!n[l.properties.name])if("Feature"==l.type)a(l.geometry,l);else if("GeometryCollection"==l.type){r=l.geometries;for(var d=0,p=r.length;p>d;d++)s=r[d],a(s,s)}var c,u,y;return m}function n(e,t){var i,n;return t instanceof Array?(i=1*t[0],n=1*t[1]):(i=1*t.x,n=1*t.y),i=i/e.scale.x+e.offset.x-168.5,i=i>180?i-360:i,n=90-(n/e.scale.y+e.offset.y),[i,n]}function a(e,t){return o.offset=e.offset,o.scale=e.scale,o.makePoint(t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y])}var o={formatPoint:function(e){return[(e[0]<-168.5&&e[1]>63.8?e[0]+360:e[0])+168.5,90-e[1]]},makePoint:function(e){var t=this,i=t.formatPoint(e);t._bbox.xmin>e[0]&&(t._bbox.xmin=e[0]),t._bbox.xmax<e[0]&&(t._bbox.xmax=e[0]),t._bbox.ymin>e[1]&&(t._bbox.ymin=e[1]),t._bbox.ymax<e[1]&&(t._bbox.ymax=e[1]);var n=(i[0]-o.offset.x)*o.scale.x+o.offset.left,a=(i[1]-o.offset.y)*o.scale.y+o.offset.top;return[n,a]},Point:function(e){return e=this.makePoint(e),e.join(",")},LineString:function(e){for(var t,i="",n=0,a=e.length;a>n;n++)t=o.makePoint(e[n]),i=0===n?"M"+t.join(","):i+"L"+t.join(",");return i},Polygon:function(e){for(var t="",i=0,n=e.length;n>i;i++)t=t+o.LineString(e[i])+"z";return t},MultiPoint:function(e){for(var t=[],i=0,n=e.length;n>i;i++)t.push(o.Point(e[i]));return t},MultiLineString:function(e){for(var t="",i=0,n=e.length;n>i;i++)t+=o.LineString(e[i]);return t},MultiPolygon:function(e){for(var t="",i=0,n=e.length;n>i;i++)t+=o.Polygon(e[i]);return t}},r={formatPoint:o.formatPoint,makePoint:function(e){var t=this,i=t.formatPoint(e),n=i[0],a=i[1];t.xmin>n&&(t.xmin=n),t.xmax<n&&(t.xmax=n),t.ymin>a&&(t.ymin=a),t.ymax<a&&(t.ymax=a)},Point:function(e){this.makePoint(e)},LineString:function(e){for(var t=0,i=e.length;i>t;t++)this.makePoint(e[t])},Polygon:function(e){for(var t=0,i=e.length;i>t;t++)this.LineString(e[t])},MultiPoint:function(e){for(var t=0,i=e.length;i>t;t++)this.Point(e[t])},MultiLineString:function(e){for(var t=0,i=e.length;i>t;t++)this.LineString(e[t])},MultiPolygon:function(e){for(var t=0,i=e.length;i>t;t++)this.Polygon(e[t])}};return{getBbox:e,geoJson2Path:i,pos2geo:n,geo2pos:a}}),i("echarts/util/mapData/geoJson/an_hui_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3415",properties:{name:"六安市",cp:[116.3123,31.8329],childNum:6},geometry:{type:"Polygon",coordinates:["@@nJUXUV°UÑnU@mlLVaVln@@bn@VU@xlb@lLnKlVIJUVxnI@lVL@b°VX@bxnVVUnVVnU@kX@VwV@al¥UUnUWa@@wĸULU¥lKUa@aUI@alLVaU¯anWkUKm@XV@VaXlW@aU_UWVUI¯@ma¯W¯I@UU@WWU@U@@UU@VkV@@WUUm@UaU@lK@IUKL@KWmXUWaXI@@a@a@U@U@KV¥lwk°b²JVIVKlV@UXlaUl`UVLVVVUJU@Lnm@_VK@KUIW@J@Xk@WW@UmmXmWk@kK@aUUVmmkUwUmWL@WmU@UJmUULkKWakLWVkIlwULW@X°lUJ@°ULWVwmJ@bmb¯Vkm@@WkWm¯wL@lkXWmXym¯UImJUbkV@Vn¯@V@lUb@mk@maUxmlUbULWn@JLmKUkWKkwUKbmXWxkVUKmLkVV@JUUWL@xkJUUV@X@VVlUbVX@xk¤x¼xWxnnn@Þ¼JVb°aVn@mlnXUJlbVlkz@lUlXJmxVxXnWxXÈWlU@UxU@VX@xUL@UÆmLnV@lWXk@@JlbXblnlJ"],encodeOffsets:[[118710,33351]]}},{type:"Feature",id:"3408",properties:{name:"安庆市",cp:[116.7517,30.5255],childNum:9},geometry:{type:"Polygon",coordinates:["@@n°znWXlW@kK°xXnl@Xn@l°Una@anIxXUVK@¯VIkW¯X@VKxklJXUlKXblLVKnVVIV@Xn@XKVnVxlnnUlmV@²óUkVlWbln@VVVIn@lw@WVIXblV@ÈxaUaVIVVnKVLKln@b²K@»U£ÑķġÝÅbKa@Im@Û@kWÓkkmKÅnóJUÅ£W@wĕ@wĉţ¯¯UkK±l¯U¥UÑkÝUķ»Ý¥¯JIUVbUl¯ÈV¼VJU¼Vb@bkLUl@VJ@bUXÇ@lkVmXmKkLVxVL@VkVVVlzWkbmLUUUbVbUVlÒnJlUnLllUL@bUVxlLXVƦÈVU¦WJ"],encodeOffsets:[[118834,31759]]}},{type:"Feature",id:"3411",properties:{name:"滁州市",cp:[118.1909,32.536],childNum:7},geometry:{type:"Polygon",coordinates:["@@@`nnl@xK@X°KXVIXVlbXVWnXlL@È»LVan@VJêVVn@X@laÞbVayn@_xnWVXnWl@VnUVkI@lnXKVLVV@V@kW@LlVô@J@bVnnKnkVa@»lç@nwKmaUUUVÑ@nmWXalI@alVn@VwUaVU@nlaôJnUVVXlJaXXVK@UV@VWx@nXVWXVUlLUbVULVVnUVbUbVb@@aKÆnnKVK@U@UU@@a@V°¯ÈJVIlķ@aaUaVKU_@mkxUI@aUlyU@@wkKWmUbUnUVWbkJW_J@bn@Vm@@KULk@V@@bVbÅm@LW@UVVbkK@UkKWL@VULUKWIUJUbkK@_WVXUJka@XVa@ky@aVIUUW@@mUlLKWÑUKVan@UkVmmIXKaVaUwVU@UmykU¯@±UUL@WUIVUU@KkIWaaU@kUUaÇUó»mKk¯@y@kWK@bkI¯`mnl¯XWlkVUzUJlbUbVJl@nnm@VULV`XnWÆbmUUnJmUknJ¯km@yk@kUxL@VUbmnn¤lX@`z@JmaULUVl@Xn@xllkXWaaW@UVmUb@mVXWxXbWbUÒnVVnVVUL"],encodeOffsets:[[120004,33520]]}},{type:"Feature",id:"3418",properties:{name:"宣城市",cp:[118.8062,30.6244],childNum:7},geometry:{type:"Polygon",coordinates:["@@Vb@XLJXxlIXxlVlV@I²¤nlUnVU@VULWVUJ@Lnb@lV@UnV@@VVVlLnbnJUVkUUVWn@@anUVnVJVIV@@nUJVbUb@VUbVK@bn@VbnIlxkllXVlXKWUXUlL°¤UVVb@bUlkXWxXz@IlaUlnUlJVInVÆJULVUnVK°@VnlVnxV@XLlK@wVL@KnUlJXUbnKVLXlUw@VWlLXKm@@a@VLnmlIVVnKn@kVaVlwk@@a@k@VIUa@maUa@wna@kmWUUmVUIVÇ@aKmakUJ@InmUUaVaklX@Vk@m@VU@wnK@alKVUkUkKbmUkm@U£WVk@@UÝbbaÇx@b@WVUa¯@wVwUUV@VwnK@KWaÅ@KIUyUI@WmXóUbWaKm@km@IUyIUaWKx@zUKUL@llVUnkLVVkJWX@VUKUVIkVWakb@VWb@n@JkXUlmL@xkL@`VxLUÈUJ@Vm@@bmIUlUL@VUVVbknm@mKUwKVÈ@J@LV±kkJUIl"],encodeOffsets:[[120803,31247]]}},{type:"Feature",id:"3412",properties:{name:"阜阳市",cp:[115.7629,32.9919],childNum:6},geometry:{type:"Polygon",coordinates:["@@Vn@ak°a±@¥@UUI@aUmlwUUxb@¥XU@mmI@a@Kn@@_W@@WI@mUVVXUl@XaV@K@I@aLX@aVI°K@KVLUUwyXkK@kKÆbXnlK@k@aJlU@w@U@»@aXKWn_JXkVKn@°LlKXW@¯U@aUK@kmJUwVIUJkmLK@kka@wUVm@@am@UkUbkK@nmVÒ¯VUWVVmIULk@ma@kkK@nUbUamU`UUVUkKVkkW@@bkmnmUXVKXVL@VbUmbVXJ@nmKÅI@KWKUXVJUL@VUKUX@KUKWL@LUJmaXXm@kVVV@L@VUL@VlK@L@V@LUK@VUb@UUU@°@nVxU`Lkn@`@XVJ@XVmk@UKmV¯LVVn±Wm@Ub@JlLUl@VLk@lmVVn@bnV@V°IVaVJXI°K°V@XXVlVVUnKVlUbWXnV@bV`U@@m@@@nxmn@bXVlL@¤nbUl¦VVUnJVUVl@@bÞL"],encodeOffsets:[[118418,34392]]}},{type:"Feature",id:"3413",properties:{name:"宿州市",cp:[117.5208,33.6841],childNum:5},geometry:{type:"Polygon",coordinates:["@@@UWU@bkW@aWU@aUIkWVlLXblVIUVV@mn@V_n@VaUK@I@UaanJVU@lVUVnnKVVlaUaI@wnKLnll@nVlk@wVKXkl@@bbUJ@VU@UUUyVk@aVUXwlWXXWU¹@aU@WUI@mlUnJ@Il@aXbV@VKl@XxVL@WIJlb@al@IUUm@@aVK@¥¯@mUķ¯bWk£Vm@akm@VaÅ@UVWa@UJWkJUbWbU@UlXk@amV@K¯nk@lU@Uxmz@bU`ÇbUbÅVm£U@Wwx@akLUK@UlakwUJWVkLmaUal@n_mVUnKVUUmÅXWa@kJmx@XUJ@bVLXxl@VVUVVUbkLWbU@@lUVVVVXK@XkJ@nU@@bV@VxUVlbU@xXLWn@UxVbVĊV@b@XV`mnkJ@kUKmbaU@VbnbÆx@XU@@`k@@bl@@bkL@WakXWaU@Vmkx@XWW@@wUUUbJU¯V@¯ÞU@WxXlL@bkb@lVlnbJW@kkU@mbkaWJIVlmz¯`UnU@mb@@`@bkVlnV@b@V@aVxn@VxKXnl@nbVKbVK@a_V@Vw@WLlwnK@UmIU@VW@UÈ@lKnalw@@V°@aUmlUUw@V@@UXK"],encodeOffsets:[[119836,35061]]}},{type:"Feature",id:"3410",properties:{name:"黄山市",cp:[118.0481,29.9542],childNum:5},geometry:{type:"Polygon",coordinates:["@@lXnlWX@VUJVnUJVzXJVxkVJlI²lU@K@IUÇLVxnLn@lmUaVU@UVKVknJ@an@@UVIVÇKUw@_lK@wnKVklW@I@mXa@UlaXblUJVUVL@UXWlIUUlKVmkU@kVKVL@ywXLVbJVz@Jln@nLXbVaônW@la@UVWUa@@a@mk@WIk@VwUa¯¥m@UUVK@ImK@aX£kKÅVa_@±akXWWLnU@@a@¯mK@LJUWwUVVmbXX@lWLn`mzUJUbLk@makVWmkXambkKkna@ab@U@Unm@WV@VbUbUJWIk@@lmL@°UVUVmn@@kmWkb@x_m@@aU@b@JlUzlWxXn@b²@l`IVlUlL@VKnVbUl@VlIn@@bbVWUk@@bX@Valb@bnb°Vn@xVKlbVnV@VxL@ln@UXVVL"],encodeOffsets:[[120747,31095]]}},{type:"Feature",id:"3414",properties:{name:"巢湖市",cp:[117.7734,31.4978],childNum:5},geometry:{type:"Polygon",coordinates:["@@VV@blL@XlWnnn@VXXl@@WIX@VJ@LxŎxln@bXJVblX@VVbUVn@VbUVlb@LnJVbVLVXLÒVLÒVbVIVylUXk°Wknm°_lJ@aXL@lz°@lnLô¼VÈVUUaVKU@WW@@UUa@knmVLlaV@a@kak±@UmwkKmkljÝUUkL@mlIVmnÝWkkUÝ@KƑĉa@»mma@mX¤¯Uw@@UU@bU±±L@akmLUKmLUUUJVbbÇw@kUWaUJ@Xkxm@UJUUm@kakXUVl±ôU@kn"],encodeOffsets:[[119847,32007]]}},{type:"Feature",id:"3416",properties:{name:"亳州市",cp:[116.1914,33.4698],childNum:4},geometry:{type:"Polygon",coordinates:["@@lU@Un@@anUlw@KVmUwlaX_lKna@KU@@kWKUU@ankWXK@@V²VVIÈU@al@VaÈamK@wU@klaUV@XVUU»WUUbkmUkVmk@aÈw@mWU@VkIkVWKUÑķXȭºU¯l@kkLWmÅaL@lLWlzVxVUK@L¯LUJ@bWK@b@JLU@Wbk@WVUUV@nJ@XX@@`m@@L@bnJ@nWV@¦awVVkxVn@bVJ@V¦@²¯blb@mUU@¼¦XbUV`@nnxUxWLkUkVWKkV@XV@@VVL@VX@lVV@L@blL@`L@xXKVL@VnU@lwnU@ml@XnV@@UVW°LnalUI@aUK@aa@UkXW@I@mWL@UXK@UVW@U@@kWn@@V@XblaVxL@bVKXbIlJ"],encodeOffsets:[[119183,34594]]}},{type:"Feature",id:"3417",properties:{name:"池州市",cp:[117.3889,30.2014],childNum:4},geometry:{type:"Polygon",coordinates:["@@V°°ĊŤ@xĖ@xXƤVôIÆmnLllXÔ@lÜn@@JbLÆaĢÞĸ°VVUUKVanK@UV@VLVVnln@xnklxXamk@WV@Xa@naVkKlk@mkUWwkJWwIWK@UaUwWIUyVIUmVI@UXWmkkWKUUVWm@@kKw@UUUmkaULwm@¯Uma@akaUbW@@a@VlUXa@am@kJ@UVkUamL@UkKVUkJk_±@a@WmXwÇkkaVaUa±wV@VkwnyUaW@UU¯amLk@m@kmmU¯K@L@lUX¯WlkXVbbVUL@J@LVKnlJXnlb@`nXlalV@bnL@Vnb¼@lXbWlkLK@zUJmIUxUVUVmX","@@llUL@VlxL@a@UwXa¯@"],encodeOffsets:[[119543,30781],[120061,31152]]}},{type:"Feature",id:"3401",properties:{name:"合肥市",cp:[117.29,32.0581],childNum:4},geometry:{type:"Polygon",coordinates:["@@LxVĊLÞkVlVVXaWaXwWnU@anVVUX@bXblWkk@wWmk@VUVKnb@Iy@_kWm£nmVa@UKwlVl@zn@°lIlmnVIVmnVaXÅWmU_VK@Unmmk@UIVakaaUÑUKÑWKUUKUamI@KkaVUUam@VUUa@UkWUaWI@akmōwwUL@`mn@KVIUVUUUKVk_VkbW@VkUULUJ±I¯alkxU¦@L@V@V@b@b@WJXbWVXn@LKVL@JkLV@Vbn@VV@XU@UlV@@VV@V@XXV@@VJ°°Xnb°@JUVVXV`@bkXWUbU@Wn@VLXlm°bVUbkK@bVJ@bVbkLV¦KķV@x@XbmVVVk¦"],encodeOffsets:[[119678,33323]]}},{type:"Feature",id:"3403",properties:{name:"蚌埠市",cp:[117.4109,33.1073],childNum:4},geometry:{type:"Polygon",coordinates:["@@VÒXLlUlJ@UXV@nÇx@bnlUVllnVaXVV¼UVWU@V²wVV@Vl@VnwlI@XbÆWVnUVmLUVnm`k@VbnblKXUVIlxkb@VVLlK@bwXxV@n¤ÆUVaÈaV_@anyVwV@kl@°m@LnUbl@WVkV@XaaVIXlIV@XbVUÆ@XKWwUkmW@_UmnIlJXkWKXmV@w@_XV@Kl@kU@KlX@@UUUUKWLm@klJVUUmk@mXUWmXw`m@zUbÝakbW@m@UUéUIm@UbKǼ@kKWXmWUkaWUJWU¯L@WLwk@mm@_ÅlUVkmWUnV@VWLUbbƑĬ¯l"],encodeOffsets:[[119543,33722]]}},{type:"Feature",id:"3402",properties:{name:"芜湖市",cp:[118.3557,31.0858],childNum:4},geometry:{type:"Polygon",coordinates:["@@bVaV@XllLXU°lL@V@VUnVl¯IkVUVU@@b@lUXUWmbn@¼bƒĊLÞ@lVXlmÞUnkJ@nlKVVÞXklWVaVI@aUKn»lL@Kn@XXwlm@mn°@V@WywXlWVk@aUaVU¯£kKWVXVWLUkkWlkkwmJUam@@aULVa@UVaUaVI@m@UUJUIUmmV@bm@UXVVUlVmImakKUU@UU@VmU@@kma@KVIXUVK@UVmUkVm±£@JkU@nlkLUlmb@WbU@@XnlWb"],encodeOffsets:[[120814,31585]]}},{type:"Feature",id:"3406",properties:{name:"淮北市",cp:[116.6968,33.6896],childNum:3},geometry:{type:"MultiPolygon",coordinates:[["@@lnnK@¦n@@VV@@VV@nIVV@VW²a@b@bVnUVVV@Vz@l@°UVIVaVV@x@XX@WlwUnV@XblWb@XlK@a@k@al@@_V@@WÅwmaUaV@bnaVL@llInmU_@W@aUUĉUaVwm@XWK@wVkaVUUwU@@aV@@mlI@WLWUUUVU@kV@XalKVaUVUUUk@WwUK@aVI@WUk@@UUU±xkb@lV@xnLÇbUbk@@bÇVUJ±U@U@WLXml@bVVXL@lV@@LmbkLW`kbVxUn@LkxmV@bm@@VkV"],["@@VVVkV@¥@UV@U@VUUJkWakKUlXVJ@bXV@blX@aXV@V"]],encodeOffsets:[[[119183,34594]],[[119836,35061]]]}},{type:"Feature",id:"3404",properties:{name:"淮南市",cp:[116.7847,32.7722],childNum:2},geometry:{type:"Polygon",coordinates:["@@°kƒīaVaXK@UUVmnXUlVÆkVKUUUmmUÑkUUÝlĉKUwKbU@UxW@@lmVUUVmUUmwaWkL¯K@mULWlIm`XWL@b@¼@V@xkVI@b@l@lkV°Ȯ¹ĸW"],encodeOffsets:[[119543,33722]]}},{type:"Feature",id:"3405",properties:{name:"马鞍山市",cp:[118.6304,31.5363],childNum:2},geometry:{type:"Polygon",coordinates:["@@NJnllLnxV@laXLVKmaaXbVIbVKVVVIVyn@n_W@@UnJlUVVXlLnaUWlV@VVIXW@_W@XK@K@UVUUwVamÑXmmwwKUnUKçU@JU¯@m@nknWxWm@@LkKm¼VL@bUJUbkXWl"],encodeOffsets:[[121219,32288]]}},{type:"Feature",id:"3407",properties:{name:"铜陵市",cp:[117.9382,30.9375],childNum:3},geometry:{type:"MultiPolygon",coordinates:[["@@ÒV¤@¼V²@aVV@@x°V£nW@nbnaVXVW@k@aV@VUUl°JUkVm@U@UkK¯WVkKWkU@Ubakwmlwm@kUmUUKU@@VmLUbVLUV¯U"],["@@LllUL@VlxL@a@UwXamK"]],encodeOffsets:[[[120522,31529]],[[120094,31146]]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/ao_men_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"8200",properties:{name:"澳门",cp:[113.5715,22.1583],childNum:1},geometry:{type:"Polygon",coordinates:["@@HQFMDIDGBI@E@EEKEGCEIGGEKEMGSEU@CBEDAJAP@F@LBT@JCHMPOdADCFADAB@LFLDFFP@DAB@@AF@D@B@@FBD@FADHBBHAD@FAJ@JEDCJI`gFIJW"],encodeOffsets:[[116325,22699]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/bei_jing_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"110228",properties:{name:"密云县",cp:[117.0923,40.5121],childNum:1},geometry:{type:"Polygon",coordinates:["@@vIHZDZQtDLNMXIbHRCXXITbJ@H`LGPRDDJNCLHTOCWFGvGBUJMKGFO^IHWXITQCIY^AXGfRDXF`DJOLB~G\\DZIHHpErUVMhHb]\\MBVF@FTP`@zTbD\\@~M\\K`H^EVODWICAakAQXoIcCOCIgGYNWFWNGGKKGaJEGMEIKYJUT_J_Go@_SyQaSFMEGTcYOQLIIi@EKAUPCV[EEXQCW|aMUMAaYCYNIDGGACIMGGSKDQGaF_C[GaB@GOIiOKAYLmI@CN]F[SWWAcKKI@HMUimEKbeYQYISNUOcBKPIFBNgvDPGZYFSf]CMSIWGEUFgDIQ[MeDMJS@RR@LphFPCHaBAJKF@J]IBJO@HlO@@RKAMPJHCNDJTHFP@ZGNANBRFH@J_fM^ONJNF\\VTDJHDON@XRND\\XRCPVETCLBVKDFJINHRGPRV@\\CLJN@VbXbLVT"],encodeOffsets:[[119561,41684]]}},{type:"Feature",id:"110116",properties:{name:"怀柔区",cp:[116.6377,40.6219],childNum:1},geometry:{type:"Polygon",coordinates:["@@JHTVHXCHPfnDJGHNDJSB[JSBGVSAOH@PMPuDEHHXZN@PHF@ZLJ@LHVYJA\\OFWP]BMtMBSRGV[JeVAPQVIFENMD¡@^NV\\JH@NNL@NM\\kTQ\\I^FNIpBHGTBFFAZQfKDIXQTLXFXNNVMVHRGpCFLlRLEVBBH`IVO\\G`RDPAXLXBXORHZEHTDLLN@VGTMrQNFPeASKG@GMOAKBYMK@GTUHUXSHMVDNMOUEOZMJML@^KRACMZEZMRQLUHE@OFENPR@DI\\ChMHIDG\\GJMDWHCKGMDCIQCHO_K@GaIJSWWQDaGWJMNCKRsCYGYuJUSaKaW@UIMDK@[QUHOGQJMEILCAUDKFSOUQD[WMCQ@WPMGCCIUSE[IMPMN]`e@IEGAQBMHM@YEOSGCIDMIGNOLB@QP@GkP@AI^J@ILEBIbADGEOog@KQQWSekWQQUOFKZLF@PUNmIaHIUeBCTSHENcJa@_IWSaGu`GLSBKJQFOXGDXVQVOBIHcDSJWBEFGTMH[^mLaXcHiKElTRKtFXZ`MHMPCNRDxZB\\ICIHK@KHbIVFZ@BPnGTGbDXRDJaZKRiGEFSFEJhjFNZFjn"],encodeOffsets:[[119314,41552]]}},{type:"Feature",id:"110111",properties:{name:"房山区",cp:[115.8453,39.7163],childNum:1},geometry:{type:"Polygon",coordinates:["@@h@bl@HRJDZ``TA\\VVD^H`\\pF\\J`JGv@ZO\\GPSTEjPTR`FnEbDTDHEhLFMTK@ETSPULKEI@OVISKSJACEQNQbVIXGDIN@dMB[IIBcN]ZHNLP@XOWCFWCNRHTpATD@^NVNLED@Rh@jCEF}E[OOHUEW]W@QGGDIQSH_MmFmCUT_K]i@MHCMWFCFE{BMHMPOHKS]CFNGBELDH_@BcAKOACESAOBELaXAROB@FODMEDWJAG[aE@UM@DImEWJMC@OeCA{aE[@{L@MINUCQXKfUJORCHqJBF@TCXWNQX]M[EAJO@@KMBQJIC]EWMCCUBEBFHKDOTMBGNGF]MWDBRDdMDQVyE@LPVHDCP@JVVMTG~HNSH[CmRUvHPHBbA\\PTNRC\\YNJPRARPJDDR"],encodeOffsets:[[118343,40770]]}},{type:"Feature",id:"110229",properties:{name:"延庆县",cp:[116.1543,40.5286],childNum:1},geometry:{type:"Polygon",coordinates:["@@^AXOPEB[ZIGU@KKI@YGE@OYMGWFGvCNO@OPGTBHUTA\\ITACIGMIHmCOeDGGWSUIGimYEEMgiFITEFEjHLQbYCIWQaCSHmHAOY@UEaJG@LGLDJ[JAwYQCDMNONGY_EWLsSQFkMO[NWAIGaIYL@HMBOKiOQDWEUDMQSF_QIUBWdg@[NaAKQ@M]OQ@WhgLUMMFYQDIRCEUZOOCIOJ[KIUMKL@HIDKVEBM`HJAJSJUdBLGNEdMBMO[BYEWJSNKNaD]PE\\SjOT_RQVEZPpNQXfNA~lNG`@PNLp¼RFLfbdKbATUh@FSNWjGFZVLFHVA~X¨PPROfFJbNJPLFbENJPrEFNPFRHDDJdENJLVEPBJTVTHGHFRFH@PXP\\ORQHW\\BjWFDERLPPBbB\\E`B\\D\\L`@F]FCnJ^AZL"],encodeOffsets:[[119262,41751]]}},{type:"Feature",id:"110109",properties:{name:"门头沟区",cp:[115.8,39.9957],childNum:1},geometry:{type:"Polygon",coordinates:["@@V@XMnGPY²JQNEhH\\AZMPDVTTDZCPiJkHSHCjIdFtEHITCNITQEKUAMCEIKCECABYESKFWAKBEIIHABGDCKCAIHMHALKEI\\CFIBILIJQZS]BBEECS@E@@C]COKI@CABAAEEDMGCH]A[M@CJWHJaUMRFRBDTITLUJ@PFJKLOVST@FSLENgKGFSCaCmF_ESQiOSFOT[HYPu@IH_[IoE_[]GUC[USB__CYQI@Gakg@qZeHQNMNV\\FVLPgJAFJPRLCH[XcPELUT[JiV_EELFTADBXRTRLJC@fHXHHbPd`fR@NfT`@TLplHMpCEJHJBVLF@JTVnG^KXDXHNVGRLRXFJVdDHSNWLGfEzA"],encodeOffsets:[[118635,41113]]}},{type:"Feature",id:"110114",properties:{name:"昌平区",cp:[116.1777,40.2134],childNum:1},geometry:{type:"Polygon",coordinates:["@@VNLJI\\JPPDYPFVQDCJZRNEVNhKXgR@^P@NLRbB\\Mh@XcVARJE`RTCNFVXRCjPPLNA@GZKbJJHXB\\MNPjLdGbWnK\\]NGHSFEXATIdCJGPARUWUHCPWRELITAHKv_E@iYCaW_BQ\\Y@QIO@QDCIGZCEMWGFMFAFgHEDOCSqKCCFGAMKEAC@ODGCGs@WH@KQA@EE@CE@GEA@EH@GGUEEJEAYD@JM@@DAA@FHD@FTJEHUC@JUBKCKG@G[CIIQReAYhO@OXGDO@@FF@IHJFCPEBACBIAAKDOABXARHPNEHGbQAAKQFGIAM[C@WHKaGiCEGOAHUKCIokSCUSOCYN[BgGMFIR±OZmHWNU@ShbbXDHVXXGJ^lZ@PZ\\Nb@\\FHJAD"], +encodeOffsets:[[118750,41232]]}},{type:"Feature",id:"110115",properties:{name:"大兴区",cp:[116.4716,39.6352],childNum:1},geometry:{type:"Polygon",coordinates:["@@F\\E~DFN@BDFEpHFCHBBEGCDCJBHUDSBB@ELCPbF@B\\J@BJVAFJ\\ADKTCBGECFMT@BMN@@FH@DaNBEnvB@FPBATK@FHEFIAKFBFL@@PKBFJHC@FXBRAFCDMPDTOL@JIVFDHH@DDH@BGRFCDLD@N^@@CNA@KNOAEBCECFEGCFGMGFIPMOEJOLBADBBHGG@GCHIECY@INC@DMGS\\AIOZAAEYA@GT@KKMBEETCGMVINFxA@MJADB@FlA@HJA@NND@DFA@DVAZBBOFKH_JA@K^GBC@EFEG@gAENMXKJigC@IbSJMqGOP£RGSMGE@kbQFDPEFiBSGGSBK]I{CDWCIDOic[C_G@SuSO@EWKCO@MNY@\\uZOPENQD[LKESSKGBKEG@EJGAGHoH¥CqhifeJkX_XFFGHFNEDFPENKHM^IFIVL^S`DVEnNnG`RTCJHH@R^XFXGVPP"],encodeOffsets:[[119042,40704]]}},{type:"Feature",id:"110113",properties:{name:"顺义区",cp:[116.7242,40.1619],childNum:1},geometry:{type:"Polygon",coordinates:["@@EhEBENXHFNYDJHCD@RJP@R[ZARX`DbjZF@bHXT`Jb@dIFMTGDSfAJVbGnJVM@OKELYPERVXRflXTT@NIfC\\NJRhCVEHFJXNT^DTeZEHYCOhuAMJELOdAVPTMOWBWNMNEJgl]@WGUFIC[T{EEDEHGCIGMI@SECUQI[D{A{GQESPUH]CsiMCmHUeoHENcAaDGCMDGMQCACCBaCGLMAHB@DIEQLOAAEEJ@CW@CDINGAAGKQOCgV@LG@BEGDKNeREFBNCFIDOPKD[@YRW@GFWDAFE@EHDDrLDTCPGF","@@KrJEH[\\B@FF@CHFBHUNAJKADGECBCMAG^E@EbI@BEGP"],encodeOffsets:[[119283,41084],[119377,41046]]}},{type:"Feature",id:"110117",properties:{name:"平谷区",cp:[117.1706,40.2052],childNum:1},geometry:{type:"Polygon",coordinates:["@@ZJZRafFLjnVGNJ@LLBdXX\\T^EDMJ@nZKLBjPPJ@HbA\\H`DbERHLCFK^BZaFWXQLAGMHa\\OLO@SBIpBdCLVQfElO@GSAKEDQTC@GEBKG@ORIJBDAPDFA@CaOq@GGQAAEJK@KMUGAAGEAa@MGMBGCGSIIW@WSUCMDOJeWOM@IUF{WMWaDIMgIoRoCOKeEOEAG_I[cg@wLIFENQFDVTFJ@HNDJGHCFFFS|D\\EJHV@Xk^IhMFMNAXPX"],encodeOffsets:[[119748,41190]]}},{type:"Feature",id:"110112",properties:{name:"通州区",cp:[116.7297,39.8131],childNum:1},geometry:{type:"Polygon",coordinates:["@@FDAJTGDNDCTDDEDBBE@DT@@EHCDGJ@EIZ@@FDBR@ATFBBVFFE@@HNA\\VE@CLIFNJFNJBCP]A@LJFA@HJEDD\\C@DBCHLAEPF@@DH@APHAERDF\\GIxDTM@CFLBBFJ@CNUPMHECGDBF]BMFPDLRBHHBJMDCX@@DFIBFPBRKJF@CGANBHKbDDABDRDHNNCHDbCdBFMpGHiOYMefKJMC}HWAUNW\\NNBNAkNU|]HMTMN@MZBLFFF@RIRUTBMFIEGaAGGAOIIUGTSFcYKS@MSLYPKRUBU]EWDOI]CKGASgW@MTWKIMCS@uMAKKADMECGAKVUTSDy@IjWLMNBF@hHEF@FAD]H@LIBG`ELAPYAUB@CEB@CMC@MIB@GkB@ECAIB@NwBMEUJHNSDFFNALLS@@HZBBFYBJP[BHTCND@JMZ@FDGJHDH@GHAABCKAIPPFONEJNHEHHDEFFDADBFMP@L"],encodeOffsets:[[119329,40782]]}},{type:"Feature",id:"110105",properties:{name:"朝阳区",cp:[116.4977,39.949],childNum:2},geometry:{type:"MultiPolygon",coordinates:[["@@bFGHBHFBFIVFHHG@@FFB@HDFF@@FRB@LXGt@DHCH@PBDLFBNF@BEXCHEX@ZQ\\@LCPOJCDEAMFEfQLMHCAFH@@KhUNE^AAEHCFDNGVODMI@AEKADEN@CSJw[HCEFQGBBOG@@CE@FOKBDGCAD@C[FCGIB@IE@K^BDOIAEMMIJEDKF@[UMB@GF@EEAUEABSQ@CA@EY@FJI@CHGD@FS@@CAFCACFSCCDCMSHBIECMB@D]@@MKCDCQEAHG@CCG@CGUEIJK@SPOCCNEDQBDNDB@DJCDLFCBBALJB@BVGPBKVO@KHCCCD@FE@BNA@FNCTDDJA@FGB@NBDW@CL@hT@@ZHHQDDDAFSAANBC@HG@EFS@@DE@@PCB@Ue@CADNJB@FCBWA@LI^ix@FIHrH"],["@@HUNAJKADGECBCMAG^E@EbI@BEGPKrJEH[\\B@FF@CHFB"]],encodeOffsets:[[[119169,40992]],[[119398,41063]]]}},{type:"Feature",id:"110108",properties:{name:"海淀区",cp:[116.2202,40.0239],childNum:1},geometry:{type:"Polygon",coordinates:["@@plDJVLGPBFHjDbHGL@X\\DBNHJREBLRBHaFGMGOBQAWPBLCBBAJBDFADOIEJGE@@EP@HCPWP@ZgfBRQJJ\\D@HLHLDVA@IVDFGSI@EGC@EBB@CN@@IZCAGHGaEqGJG@EjwJ]@K@GSA@e_I@NE@CA@Kg@KC@ENCFAKQAW@WIMK@V@I@@F@^EDFB@HcIaDYCBRRDCHD@EFLN@FE@CJUPEJOJMTBPEDIFCMIAKNOGMRFJNDVBFLSRMJSDGJsFcEiJGDGTIlOjYD"],encodeOffsets:[[118834,41050]]}},{type:"Feature",id:"110106",properties:{name:"丰台区",cp:[116.2683,39.8309],childNum:1},geometry:{type:"Polygon",coordinates:["@@hMN@NFTQCFRCBJFA@HJ@@HJ@HJ\\FTACD@@UNLXJX@@MA@@IECAQlDFEHBDI~D@GXCFMVDFCH@@NF@ANJC@FnAB@AMF@@EDCDDLGP@LUOAUH@AIABKAAEDCKID@CCACMWA@EGDEILA@OK@AELEJBFEEGL@BSOA@EuAFmMACbG@@EM@ANS@ENFDAHSDCL[BEIUBAII@A[E@OaKD@FAACTGVIACDHDAFGAEDoGEFACM@ig@@QFCMKMU@]SCoBGSMQDEXXDWPO@MKYGM^AdJJA\\cNB\\G^DNHFCBFABDBJ@PL^D@DF@T@FDAF^A"],encodeOffsets:[[118958,40846]]}},{type:"Feature",id:"110107",properties:{name:"石景山区",cp:[116.1887,39.9346],childNum:1},geometry:{type:"Polygon",coordinates:["@@NQPHLMJBDNJEFCAONSPIFIVODIF@@EKMFEC@DGQCAQZDbCdJ@GEAFC@]@EJ@DCSB[EGII@@GI@@GEBAIQDDESRMEM@gNYTIRKJAJEJ[DFJKLGBGNBJLDCDAHGBJJAFBLEXTLZFBAFDLD"],encodeOffsets:[[118940,40953]]}},{type:"Feature",id:"110102",properties:{name:"西城区",cp:[116.3631,39.9353],childNum:1},geometry:{type:"Polygon",coordinates:["@@XBDA@EIACM@IJAD]BC@SFABISAD]H@@OAEDQEW@BLEMD@FLDh@@LDBF@@M`J@fTB@H"],encodeOffsets:[[119175,40932]]}},{type:"Feature",id:"110101",properties:{name:"东城区",cp:[116.418,39.9367],childNum:1},geometry:{type:"Polygon",coordinates:["@@DBf@@VDA@OF@@CT@FEH@@GADBMTBBECCRCGG@YS@@gDK@AC@PG@C^TBAJEB@TADC^IB@J"],encodeOffsets:[[119182,40921]]}},{type:"Feature",id:"110104",properties:{name:"宣武区",cp:[116.3603,39.8852],childNum:1},geometry:{type:"Polygon",coordinates:["@@RBX@RFFCBFU@aK@WA}CCJGAEFkCBRFD@JB@@N"],encodeOffsets:[[119118,40855]]}},{type:"Feature",id:"110103",properties:{name:"崇文区",cp:[116.4166,39.8811],childNum:1},geometry:{type:"Polygon",coordinates:["@@XBL@@bEVD@BX@AC@MHA@EIBCCDSEMmB@EIDBME@@MG@EDUCENWD@H"],encodeOffsets:[[119175,40829]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/china_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"xin_jiang",properties:{name:"新疆维吾尔自治区",cp:[84.9023,41.748],childNum:18},geometry:{type:"Polygon",coordinates:["@@@ρȁôƧƦóəʵסʵóƪԫʵѵͩƧͩړυࡓɛʵ@ȃ@óᇑѵƨɝɚôóНѺͩɜ̏ԭʵôƧɞñ@υƩ݇ȂóƩƧ@ѵȂυƥŌਗ॥ɛóʵѵƧѹ݇̍ࢯəɞυρͩ̏óਙƨƧŋôōó̍ͩóʵןóŋړͪƧѶ@ɜԭԫƦɛȄ̍ɝȄöςƩȂ̏ñȀ̏ƩóóŎə@Ő̎@ɞȀɝŎôƨóנѵȄƧ@óŏɝóɜôŎ̍ͨςŎ@ƨóôƨɞ݈ʶóƨφó̎Ȁƨ̍ԮòѸԮמ@ѺȀ@ƪၬֆòȂñ̐òȂɜóƨ̒Ŏ̑@φρȀ@Ő๐ς̎Ƨφ@ɝφڔ೦Ԯǿࢰ@ƦŏԮƨƨȄƧ۬ɜʶڔŐɚɚóŐôƨôƧƧó̐ƥóŏѺǿƦȁφƧςƨƧ̒@ɜƥƦυ̐ɛƪͩƩəƪʷ̑ə@ȃƨʵנŋྸōਚԭԪ@ɝƨŋ̒օςʵôƧ"],encodeOffsets:[[98730,43786]]}},{type:"Feature",id:"xi_zang",properties:{name:"西藏自治区",cp:[88.7695,31.6846],childNum:7},geometry:{type:"Polygon",coordinates:["@@ôŌנôʶ̎ͪôóŎƨŌਚƧ̐ôςͪφɚɝࢰ݈̎ѺѶƨôʶ०ɜਘƦŋφѶȁ̍ôŏɚŋ@̑ə@ŏò̍ɜóƥôʷƧ̍φѹԪ̍ע@Ѹʷɜ@ôñנ@Ѷɛɞô̐ŏѶƨѸƧƥōƦôŏô@ƧôƩ̒ŋƨŌƦǿô̎ɜȁ̒óʶѶôôО̒ςƥɜНφσɛȁ̎υƨఱƧŏ@ʵƥ@ŌóóóͩƨƧóŋ̑õóɞóɝԩͪɝρôƧ̍ƧѹͨڑŎ̑ōóƧࢭͩ̏ѵɝóఱóóԪυô@̒ƥŌ̏Ƨ̑Ȅ݇ŎƧѵӏ@ɛõŏɛȄôӒƧŌѵǿɝƧŋԫ@̏ʴƥ@óǿ̑Ȁóǿ̍ςóóυô@ʶɛñρƦƩŐó̎óѵó̑ͪࢯОóɜןƧ̏ƥȄ̎̏̐ןŎɝɜöɞƩȀôöɛȀóͪ̐ƨƪ̍̎ȂƥԪυО@φɞôƪ"],encodeOffsets:[[80911,35146]]}},{type:"Feature",id:"nei_meng_gu",properties:{name:"内蒙古自治区",cp:[117.5977,44.3408],childNum:12},geometry:{type:"Polygon",coordinates:["@@ኊȁöƩɜɛנñԮɛѶóԮô@ȁѸóמ̎ගѺၬ@ʶԮӒ̎@ŐѹӒ̒Ԫƨöග̑ѶȄ̒ς।ѶɚöɞɜʴڔôôȂ̎ѺȀςƨƪóԪɜôɛОਕڔԭѵ̍ѹȂԫɛƥ̍Ȃóɜ̎ô@ʶ݊ੲࢮʵږͪנƨôȂƧ̐ͪ@ŐƦƨφԬѶɜôƦ@ŐƧôôƦəŐ̏@ŐڒѶԬô̐ʳԩНςōôŏɞ@ƨȂѶəóƧ̒ػ̎ó̐Őנóƨô̒@ƨɚɚ@עԫɛɛ@ȁυͩƥʳòևρ̑ࡗƧͪ༃ॣԮփ̎Ʀ@ôô@ôō@@ȁѵóƨ̍υȃóʵɛƨƥóυȂóəƪ̐ρƧͩɜԭڔȄ̎عƧȁ̐ŏó̍ɛƥƧ̑óρŐ@Ƨ̏ɝəɛͩ̍ͩɝО̍ƪƧóóӓƨóƧʳ݇@ɝςƪ@ʴƩƧƦôƨɛȄəƧŋυóͩѵ@ɝǿóŌן̍ɛóО̍̑̏ôȁ̍ŏòȁñóƦͩ@ǿə@ɛƧ̑ρȁυô̍օѹóȃə@ȂσʵѷƪòƩ̍ôóۯôʳƧóõʵѵóѹɜ̍ȂѹôɛŌφֈƩͨρóυӑóޟఱ̑݇ͪóƪƨŌóȄڔԬƩςםñ̑ȃѵŐԭŏƨȁɛǿρôõɚɛóƧОə@ѹ̐ѵöԪͨôͪɛ̒ןŏƧƥóôƥƧɛŌôóɝó@̒݇Ӓ̒Ō@Ŏԭࢰ"],encodeOffsets:[[99540,43830]]}},{type:"Feature",id:"qing_hai",properties:{name:"青海省",cp:[96.2402,35.4199],childNum:8},geometry:{type:"Polygon",coordinates:["@@ƨ@ôƪ݈ȁƪ@φɝòóƨԮʶɛ̐ѹͪôОəóƧɞᇒѶ@ôږô@ǿѶƪȁςɜͩφςŋɞôѶɛƨŌɞ@ɚςŐñԪॢͩƨȂɞóƨŐ̎ŏעӏ̎óƧƦô̒ȁɜςͩ̒ɚɛƨôƨɝφɛóȁƨŋóóɚͩƨóóƩ@ƧəŋƦƩ̍@ƧƧôǿυ̑@ȁɞǿõŏρƥסɚƧóτԫɞôƧƦ@ñȃòñƥóυôôѹѵ@ŏ̏Ȅɝó@ȂəŌóəѹƦ@Ő̍Ōυ݈ԩŐƧóôƧ̑ôʵɞƧ̑ѵôƩɞƧ̑óНѵóôʵ̑ɛȂó̍ƥȀƧŋ̑Ōóƪ@ƨóóŐƥƦŎѷƨѵƧ̏Őɝóѵɜן@óòɛ@ѷʸס@ԩ̎υѺƨ̎óʸôƦɛñ̎@Őɚ@̒əŌóŐ̎"],encodeOffsets:[[91890,36945]]}},{type:"Feature",id:"si_chuan",properties:{name:"四川省",cp:[102.9199,30.1904],childNum:21},geometry:{type:"Polygon",coordinates:["@@ôôŋó̑Ԯ̒ɛОמͪƨōöͫƥôȃƨóóñôƧóƧôōڔŏƨŐ@ŎôòƥѺŎ@ōɜóנôǿôƦôԮ̍ɜôɚƧñɛɚȁ̍Ƨɛևυ@óóôŋρԭɝ@Ƨʸ̍ŏυɜƧƧóƧƨȁρ̍ƨȃɚôʵφóô̑̏Ȃ̑ʵɜʵɞ@ƨʳסƩóŎəóɜƧôƩƧρóôôô@ŎƧƨƨƪѹó̍̍Ʃ@̏ѹНôޟ̍ƩóƪυɝɛəƨôŎɛȀ@Ȃ@ñɝʶ@Ōρנ̏õóɛͨƨȂѵОɛʵ@̏ƩŐóƧల̍φɜȂυτɛОρƦɝƨóƪ̒Ѷɝƨóʶ̒óƨƨôԪŏφ݇̎ŋ@ŏѺƥôɚɚŋ@ȁɞô̐ȃ@ŐѶóѺφóƦôñòòȄ"],encodeOffsets:[[104220,34336]]}},{type:"Feature",id:"hei_long_jiang",properties:{name:"黑龙江省",cp:[128.1445,48.5156],childNum:13},geometry:{type:"Polygon",coordinates:["@@ᇔȂਚНƨŐѶŏöƥςŏñƧƦóƨȁ@óƨóȁφӑóóƨóǿ̎̑ôНɞó̑ɜə̎ǿ̒ôڒӑφ@Ƨȁ̎̏ƥƩ̎ρశôȂςƨφ@נɞ݈̑ƥƧɛƨʵƧȃƥ@Ƨƥ@ŏ̑ԩôɝρρóɛƧƩͩƧóʸ̍ʷѹƥɞڕõ̍öɝυ̍ȂƧ̐̑ŏóƨñŋѹóóȁ̍̏Ԭõʸ̏ŏ@ǿ̍@ƧОυ@ñƨòȀƥŎ̑ŐѵóɛŌóȂԫōƧŎѹñ̍ʶóОן@Ƨ̎Ѷô@Ȃ@óŎó@@ó̍ƥԭք༄।ƨͩ̒ࡘςñֈƦʴφͪ@ȂɜɜסԬə@Ƨə̑@Ƨóןô̏ŏ̍ô̑ؼôƨѵɚƧȁɝ@óŐρŎԪО̏ʴ"],encodeOffsets:[[124380,54630]]}},{type:"Feature",id:"gan_su",properties:{name:"甘肃省",cp:[95.7129,40.166],childNum:14},geometry:{type:"Polygon",coordinates:["@@ڔôԮࢯ@ō̑ŋ݈ӑ@̑ɞôóôɜŋƦƨôóƨƦנŐɜ̑óͩԩͧѶõѺ̏ɚ@ƨНɜôöəςóɜȀƧȂԮŐѶŏ̒ȄמòƪρړԫôȃƧŋôƩ݈ͩɚ@@ǿɜ@φͩóŏɜӑƧōôǿ̎ôƥƪóõö@ôƨôƧƦôó̒ɜ@ɞŌõʶ̏Ő@ȀóôƨȂ@ʶע@@ƥӑó̑óŋôʵóɛړ@@ƩöóƩóρɛƨ̑@óʷƥƥ̎ɛƧôōƧǿôͩѵôɝȃɞȁõƧρóó@ōƧŏړŐóŎôƨóƨôòƧôóȄƦõͬƧŎםͩɜНԭ̑ô̒óŌóƥ@óƨɝσԬƨôעəςƦöŐɝȀ@Ȃφ̒óȀƨƨ̎@ƥƪɚŌ@ƨôƪƧôəͪôôƧŌôȂυɜƧɞƧóəɜ̑ρͪɛ̑Ȃóƨƥ̍ôסӐ̍ŐƧŏɝôƧȁॡͪòԩρŏ@əɝƧŋѵɜɝóρŌυɛͪρƩȂѵ@Ȁڕó@ȄɜʶφࡔڔƨͪѶͪԬʶôƩעʶɚʶƥôóƨςȂ"],encodeOffsets:[[98730,43740]]}},{type:"Feature",id:"yun_nan",properties:{name:"云南省",cp:[101.8652,25.1807],childNum:16},geometry:{type:"Polygon",coordinates:["@@ôɞôɝ̒öôŌƧƨôͪôô@ŋƦ@ʶƨŐôƪŏ@̐ɜʶѶНƧȁɜͧöô̐ςן@ŋɞʵ@ò@ȁɜǿóōɚƧɜφɞôƩ̎ƪóޠѺО@̐̎ƪô̎ѺƧƩƨƧ@ōóóôóςƪƨƨóôɛó̑ԭƥŌɛǿɝƨɛͩô@ǿƨȁѺŌɚɛ̍ןѶНɛƧôóƥȁƦͩôŎɞƨ̑ɜòôφ@ƨʵ@ɛѹōóȃəƨυǿóʵρƧƧŌƩɛ̏ȄñƧƧȀɝ̍ԩʶƧ̑υóŌƥʳɚӑóНƥô̑óӒѵʵѹƧӐןôƪφõŌƪ̒ԫŌƧؼƨƨסρȁƧƨȂóʶó@@ʴƨôôφ̎Ŏ@ȀƨƪɚƨóƨôôôςóޤƧŌƩŋƧԪ"],encodeOffsets:[[100530,28800]]}},{type:"Feature",id:"guang_xi",properties:{name:"广西壮族自治区",cp:[108.2813,23.6426],childNum:14},geometry:{type:"Polygon",coordinates:["@@ƦŋѺ̎ڔʵƨŐ@ƦמȄƪôóȂɜŌɚͩɜ@öóɜôôȂƦôɜȁ@ɞφóȄ̎ƨʶɞŋƨʴɚǿ̐̎Ԭ@ôñ@̏ƨρ۫ôɚƨƨНƪŐ̎ƥóƦʵƥŋ@ȃóƥƧ@@ŏɝǿôυƧȁѵɛ@əóŏ̑@@ə̍óƧó@ȁƩρóòНƥô@Ӓ̑@óŎ̍ƥσŎυ@̍ƨ@Ō̑ôóͪƨ̒óŌړ̏Ŏ@ŌôȄѺŎ@ɜƧʶυ@ñóɛƧ̒ɝóōƥͪ"],encodeOffsets:[[107011,25335]]}},{type:"Feature",id:"hu_nan",properties:{name:"湖南省",cp:[111.5332,27.3779],childNum:14},geometry:{type:"Polygon",coordinates:["@@@քɜОƨ@öŐמóƪôƩɚ̒ŐȁςͩɜòƪɜȀòñɝòѺͪ@ŏƨŋóɝôǿƨɚȃóəƨȃѵͩó̍@ȃƨóóƥƨƧ@ʵƦóͩɜɛóñԭɛōυȂ̍ƧƦō@ɛƥɛȀ̑óʷóō̍ƩŏƧОəƧóς۬Ƨ@̐óòԫ@̏̍əȀƧʳɝŌóɞƧƨɜóŐƨò@ȄƧŌρŋóôԪОóʶ@̎óȄ"],encodeOffsets:[[111870,29161]]}},{type:"Feature",id:"shan_xi_1",properties:{name:"陕西省",cp:[109.5996,35.6396],childNum:10},geometry:{type:"Polygon",coordinates:["@@ςôöƨɝȂɞȄѶóóͪƨȀóŎƨ̍ɜƦƦôʸ̒@ɜƧςƪôõô@ƪڔ@ôɜóʶôŌô̒Ӓ@Ʀ@Ѻ̎ɜѺɛѶôöʶôƨóʴ۰óô̎ñƪѸƩτʶ@ȁòŋəѹóǿ̑ʵ@ȁ̒ʷυփô݉ôН̏ط@ȁƨóô̏ƪõ@ʳ̐ʵ@ɝɛŋƩŌɛóןôƧŋ̒ó@ŏ̐ƥ@ŏυ@ƧƧôן̏@ƥȂѹɜəɛóԭ̎ƥóóóȀןɛô@ŎѹōñƦ"],encodeOffsets:[[108001,33705]]}},{type:"Feature",id:"guang_dong",properties:{name:"广东省",cp:[113.4668,22.8076],childNum:21},geometry:{type:"Polygon",coordinates:["@@@Ȃôôƨ̎@ɚ̒@ôŐ@ɚѶɜƨȂóφɞȀ@Őƨ@ôƦ@ȄƦŌƥʶƦôôŎôʸ̒ɜǿƦ@ɜƥŎ̎ƨφȁɜŎòƥԮŎƨōóŏɛƧɝəɞƧɜςȃñȄƦŎ̒ōôòƨəƨɚН@əƨ̏ƪʵυŌəɛóəԭŏəóŏѹρʵɝƦ̏ƥʳѶöō̑óóŋρȀυƧƥɛѹōƧôןɛŏѵ@óŋôʵɝƪԩõ@Ƨō̍@Ƨ@@ƦɝԮƪО@@","@@X¯aWĀ@l"],encodeOffsets:[[112411,21916],[116325,22697]]}},{type:"Feature",id:"ji_lin",properties:{name:"吉林省",cp:[126.4746,43.5938],childNum:9},geometry:{type:"Polygon",coordinates:["@@נ@ôН̎ʵѺòƨōԬŎôȁɜŋѶô̒ŏƦōñǿòƧφ@ƨН̎@@Ȁ̐Őöʷ̐ԫ̎ôȂѺôòŌôƧ̒Őƨ̏̎ȁφ@ŋƩͩםȃƨ@ȁ̑ʶ@Ōóôɛƥѹ̑συ݇@ɜρƧȃࢯƨôəȂɛōƩɛ̏υρóõƪʴυφ@ʶôŌóρք@ɜƧ@ɝǿƧͪρȀƩó̏ŐƨȂ̍غړȃɛԮƨͪ̏ςƩôɚφȁƦôɜƧôʶφȄ"],encodeOffsets:[[126181,47341]]}},{type:"Feature",id:"he_bei",properties:{name:"河北省",cp:[115.4004,37.9688],childNum:11},geometry:{type:"MultiPolygon",coordinates:[["@@Ʃ̒̏ŌѺ̒ƩóȄƧŌƥͪòôñȂ̎ŐóȂ̒̐̎ôНɜנ̎ôŋɞȀѶ@ôͪφƨŌɚɜȃóƧƨƥƪ@ʳƩɞρ݈@υНφʵɜƦρƨƧ̍ɝóɛѹ̍ρŏ̑ôóƨ@ƧƦôƨɛ@ƥƨ@ȂƦ@@ôəŐƧʶƨŌυ̍̎ɛŋôōɝ@óƧ̍ƦʵѵʳôʵɜŏςôƪŋƨŌɚ@ôНƥƧ@ōѸɛ̐ô̎ʵѵНԭ@̍̍Ƨò@ȁɝ@əρυͩƪ̏ƩõƧŎƧōóॡȄɛʶɜȀ@ɞςѶƧƥςɛŐ@ɚɜɜ@Ŏôôςƪς"],["@@õə@Ƨɛ@ŐóƦφô"]],encodeOffsets:[[[117271,40455]],[[120061,41040]]]}},{type:"Feature",id:"hu_bei",properties:{name:"湖北省",cp:[112.2363,31.1572],childNum:17},geometry:{type:"Polygon",coordinates:["@@ñȄυƦöŐƩóנƨƨφ@@Ő̏Ʀ@Ő̑ôƨŌנóɜôƪŋɜŌѶօڔə݈òɞōɜŎôӏƦóƨô̒óôȃƨó̎ŐôƧƪ@ƨȁςƧə̑̎Н@̍Ƨŏρôԭͩԫ̍ʵƧóȀôɞƧŌ@ŐѹͩñòɞñɛǿƩɛñρͪȂ̑ŏƪəƩóםôõŏƧ@ɛНƥȄó̑ѺƧôφóƨƨƦƪóɜŐôóòôƨóφ̐ƨóƦ̎"],encodeOffsets:[[112860,31905]]}},{type:"Feature",id:"gui_zhou",properties:{name:"贵州省",cp:[106.6113,26.9385],childNum:9},geometry:{type:"Polygon",coordinates:["@@ɜȀƦŋԮô̒ɚôōעƪƧʴɝ@ɛʶ̒ʶ̐ȁƦóȂô@ôŏ@ōôƨʶѸô@ʶƨɞó@ōτöòυƨ@@əƨô@ɛ̒@Ʀɜôȃ@̍ôʵԩНôóςŌƨŋ@ȃƧñôŏƧɛƨôɝƧʵ̍ôȃυ@ɝɛȂƥóóȁɛóõôɛ@əͪɛŋôȁƩóםȃ@ƥƧŏړʶѹ̍ƥŌƦȂóôɜƨѵО̎נəɜѹŋƧȂ@ȀóɜͪɞƧ"],encodeOffsets:[[106651,27901]]}},{type:"Feature",id:"shan_dong",properties:{name:"山东省",cp:[118.7402,36.4307],childNum:17},geometry:{type:"Polygon",coordinates:["@@Ʃ̐φͪɚςɞ@@Ȃƨñ̎̎Ԯ@ѶОƨƧڔ@φН̑ŋ@Ʃ̒ǿ̎@ƨɜԬςôʶ̐ʶöԫƨƧנƥɜŎôō̎@ôŏóρƧŏԫôóƧԩó@ƥɜƧԭóƨʵɛƨӑɜНԩóô̑óƧʳəóɛƧ@õȀƧ̍ȃɛŐóŏυО̍óɝƩԩ@ƧɚԫȄɚʶƨɞʶԪ̐ړɛƪ̒"],encodeOffsets:[[118261,37036]]}},{type:"Feature",id:"jiang_xi",properties:{name:"江西省",cp:[116.0156,27.29],childNum:11},geometry:{type:"Polygon",coordinates:["@@ƧȄôɚəȄ̎ʶԬԮͪςóƨŐƪτɞƦōƥƧ@ŏςôóŐôô̒ʷѶƪƩƩǿ@ō̒ɛôυ@Ƨȁѹɛəƨѹ̑ƨ̏óƥѵʷô̍ɛȁôŏɝǿƧԫƧôʳƥōòȃρȄɛɝƨɞɚɜƨôŐƧŎԭōñƦòԮɜôɛôͪƥ@ʶƧƨôƦƧô@Ȅô̎Ѷͪ"],encodeOffsets:[[117e3,29025]]}},{type:"Feature",id:"he_nan",properties:{name:"河南省",cp:[113.4668,33.8818],childNum:17},geometry:{type:"Polygon",coordinates:["@@φ̎ƪ̐ɞȄɚ@@Ȃעó̎ŌѺ̒ôֆॢȃôƨŎƨōƪöƩ̑ڔɜԩ̏ɝʵƧəʵԬȃƨəԪ@@Ƨ̒ŏô̍υȁƧɚ̍ôóŋ@ɝƧŋõ̑σ@ŏɜŋôɝ̒ƧɚôôطρóóɛƩ@óƨ̍ŏƧôóȄ̑ôƧóƥôóӐɛōɝŎ݇ñړɚѵֆ@ɞ̏ʶ@ʴƩöó̐"],encodeOffsets:[[113040,35416]]}},{type:"Feature",id:"liao_ning",properties:{name:"辽宁省",cp:[122.3438,41.0889],childNum:14},geometry:{type:"Polygon",coordinates:["@@ƨʴƧôôӔƨô̎ƩɞН̎ͪͪɜɞɚ̐@ƨςŏ̒ôƦƨɜô̎ƪôςǿƨͩɞȀƨ@@ɛςփôóŋ@ʵφυƩʳö॥փρѹס@əɛ@ͩࢯ@ѹʵρƩʶφȀƧ݈̒۬óʸɝŎѵ@ԭԫןɛƧƨƥςɛυʶφО"],encodeOffsets:[[122131,42301]]}},{type:"Feature",id:"shan_xi_2",properties:{name:"山西省",cp:[112.4121,37.6611],childNum:11},geometry:{type:"Polygon",coordinates:["@@ɚѺñŌɚôȄѺ̎ֆφóςȂ̒ɜƨɚ@@Ȁƨŋôȃƪѹ̑̐ŋƪ̑Ʃρρóó@ōɛɛ@əɜŏƦρƨρѵ@ɝɛǿɜʵóօѹ̑̍ŋסô@ȁə@ɝȃ̏̍ƩυƧô@Ȃ̐ظóОó݊φք̑ʸ@Ȃ̒ʶôȀ"],encodeOffsets:[[113581,39645]]}},{type:"Feature",id:"an_hui",properties:{name:"安徽省",cp:[117.2461,32.0361],childNum:17},geometry:{type:"Polygon",coordinates:["@@ó̎̑Ő@ƨƪѶǿɜ̑φƦʵ̐ƧѵôóƪôôυςƨȂɞŏ@̍ԫôò̑ƥóȃѶͩƧƥôŏѺôŏƦ@ƥͩƧôȁυó@̑ƧɛѵʵƩƪѵ̑ʸóóôŏρó@ŐƦƨƥŎσɝƩ@̎̍Оɚ̒ρƨƧȂôɜςôóظəó̑ƨóɞɛŌ@Őτö̒ƨŌ@ɞôŌ̎óƨəφȂ"],encodeOffsets:[[119431,34741]]}},{type:"Feature",id:"fu_jian",properties:{name:"福建省",cp:[118.3008,25.9277],childNum:9},geometry:{type:"Polygon",coordinates:["@@̎óȁƨӑ̒̎ɚƨͩφŐƨɝ̎ŋóŏρ@ōƨòʳəóƨō̏õɛƧ@ƨѵƧōəŏóŋƧô̑ɝɛʳƥ@@óɛõ@Ƨ̑ƧóȁəƧ̑Ƨ̐@ɚəОƧƧɚóñ̑ŎóʴƨƨԬɞȀóŐɜȂó̎ѶʸôƦƧ̐Ѻ̒ɚƧѺɜƨȂ"],encodeOffsets:[[121321,28981]]}},{type:"Feature",id:"zhe_jiang",properties:{name:"浙江省",cp:[120.498,29.0918],childNum:11},geometry:{type:"Polygon",coordinates:["@@Ѷʶƨɜ@̒φôóȂƨƦͪ@̐Ѹ̍τȂ̒̑נŐמôƪƧôӑ̑@ƥρͩƨօ̏@@υɝó@ŋɛ@ôƩəóƧѵυó@ƩɜŋƧ@̍ŌƧɞυŏƧͪ̍ə̑ƧӒôȂ̍@óφ̑ɜ@ŎƪȀ"],encodeOffsets:[[121051,30105]]}},{type:"Feature",id:"jiang_su",properties:{name:"江苏省",cp:[120.0586,32.915],childNum:13},geometry:{type:"Polygon",coordinates:["@@ôɞ̎φНôŐɜŏ̎Ȅƨöǿƨ@ôɜɚƨʴ̒ôôó@Ƨ̎əԮȃԪૉöͩ̐ƧòʵφƧôʵ@óړɜóŏɜǿƧɝρσȁѷ̎̏ƥóŐѹóŐƨƦѵͪôȄƦñ̒Ԭó@̎ɝŐƧȁρóφƩóóôƨѶ̏ƥʶυɛ̒ѵȀ"],encodeOffsets:[[119161,35460]]}},{type:"Feature",id:"chong_qing",properties:{name:"重庆",cp:[107.7539,30.1904],childNum:40},geometry:{type:"Polygon",coordinates:["@@əȂòɜƨѺɛƦȁ̐@ƪõŏφƥòȃƥ̍Ƨôυ̏ƧôñóóôɛŏƩôƧƥôƧóυƨ̒ѹôƦȃ@փƥɛ̑@@ɜƧó@ɚƧ@ñφσõ@ŎɝôƧ@ʵѷóƧʵó@ŎóŐó@ôȁƥó̒υôóʶəƧȄς̎ƧȂôƨƨƨφɛ̎Őƨʷɞ@ςԮóŌôôφ@ɜֈ̎ƨ"],encodeOffsets:[[111150,32446]]}},{type:"Feature",id:"ning_xia",properties:{name:"宁夏回族自治区",cp:[105.9961,37.3096],childNum:5},geometry:{type:"Polygon",coordinates:["@@ల̒ôޠφӒςôƪͧυևɜŋѺó̎ȁ̍ɛ@ѹס@@ʵƧȁôó@ǿ̐ŏöʵɝŋɛ@ô̑ƥóóƨƧóôó@ƩôóƦ̍óȀƨŎɛӒôŐυͪɛ@@Ȁə@"],encodeOffsets:[[106831,38340]]}},{type:"Feature",id:"hai_nan",properties:{name:"海南省",cp:[109.9512,19.2041],childNum:18},geometry:{type:"Polygon",coordinates:["@@φɜƦʶ̐ôφô̎@ƨŎö@τʵƦԩ۫õН̏óƥȃƧ@Ʃəםƨ̑Ʀ@ޤ"],encodeOffsets:[[111240,19846]]}},{type:"Feature",id:"tai_wan",properties:{name:"台湾",cp:[121.0254,23.5986],childNum:1},geometry:{type:"Polygon",coordinates:["@@ôƩɝöƧɝѵəޣ̏ρƩԭóōóͪρɞƧОôԪ݈ଦѶɜ̒ɛ"],encodeOffsets:[[124831,25650]]}},{type:"Feature",id:"bei_jing",properties:{name:"北京",cp:[116.4551,40.2539],childNum:19},geometry:{type:"Polygon",coordinates:["@@óóóυóôƥ@ŏóóə@ƧŋƩŌρóɛŐóʶѶʴƥʶ̎ôƨɞ@óŎɜŌ̎̍φƧŋƨʵ"],encodeOffsets:[[120241,41176]]}},{type:"Feature",id:"tian_jin",properties:{name:"天津",cp:[117.4219,39.4189],childNum:18},geometry:{type:"Polygon",coordinates:["@@ôôɜ@ƨöɚôôôɚŏ@óƥ@@ȁƦƧɜ@óƧƨƥ@ƧóəН̏óѷɜ@ŎƦƨóО"],encodeOffsets:[[119610,40545]]}},{type:"Feature",id:"shang_hai",properties:{name:"上海",cp:[121.4648,31.2891],childNum:19},geometry:{type:"Polygon",coordinates:["@@ɞςƨɛȀôŐڔɛóυô̍ןŏ̑̒"],encodeOffsets:[[123840,31771]]}},{type:"Feature",id:"xiang_gang",properties:{name:"香港特别行政区",cp:[114.2578,22.3242],childNum:1},geometry:{type:"Polygon",coordinates:["@@óɛƩ@ρ@óôȀɚŎƨ@ö@@ōƨ@"],encodeOffsets:[[117361,22950]]}},{type:"Feature",id:"ao_men",properties:{name:"澳门特别行政区",cp:[113.5547,22.1484],childNum:1},geometry:{type:"Polygon",coordinates:["@@X¯aWĀ@l"],encodeOffsets:[[116325,22697]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/chong_qing_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"500242",properties:{name:"酉阳土家族苗族自治县",cp:[108.8196,28.8666],childNum:1},geometry:{type:"Polygon",coordinates:["@@XJ°lJX@lbl@XbV@VLnJlxnbUU@IVK@lVIVwnJlU@n@J@L@Jn@l_nWVLVln@@blLmV@@xÔ`nxVÈLlxLVxVVV_U»VWn_m¥XwVmnX°lmUUVwÞaVk@a@mmIUa@mwk@m@@U¯a@UV@@K@ykkmwkV@kU@ÑVkKWLÅamaUm@kyU@WkU@UaIUaVaUUmUUa@aVLXKWa¯UUbmJXnWnX`l@@xkzWÆ@VLU¦x@b@JkIkJ@LmbUamJwm@óxnk@V@xVnUVmVUVUbVlUbkXW"],encodeOffsets:[[110914,29695]]}},{type:"Feature",id:"500236",properties:{name:"奉节县",cp:[109.3909,30.9265],childNum:1},geometry:{type:"Polygon",coordinates:["@@WVXbUnK@x@b²kxmKkl¯_VV°VU@bnKVVV@@nk@nbn@°@VLČU@°WV@VnU@InKVl@nUbKnXWlknLlKUwnalLaVlUXmWk@UU@UWWIUyķ¹XaWW@XKUIVmU@W@UVU@KV@n»VkUkÇmUmVIUmULUbm@wUaKkkm¯ÑUL@bWVnx@VmxUI@klmkkK@aK@IlJ@I¯k@mak@mnkJVL@bV@UbW`UUUVI@VU@VVbUJVLUVVbUXVVxk¦VJUnVxnVVUJV@Ubl@@bXV@L"],encodeOffsets:[[111781,31658]]}},{type:"Feature",id:"500238",properties:{name:"巫溪县",cp:[109.3359,31.4813],childNum:1},geometry:{type:"Polygon",coordinates:["@@nLWbXVLVUV@KIVl@b@lbUVnU@JÆU@V@n°KĢUl@VbÞKV@_VKXUU@KX@wlkkU@mWKUU@UôJ@XV@aVmÞIVaVL@»km@UkLU@aU@WWLUUUKkbwWa@KU@kaXmWLamVk@UmL@JmVUU@¯X@ċVUK¯@ÅnWKLkKULWK@UXK@wW@LkV@bVLlXn`¯xU°LnlV@n°Lnl"],encodeOffsets:[[111488,32361]]}},{type:"Feature",id:"500234",properties:{name:"开县",cp:[108.4131,31.2561],childNum:1},geometry:{type:"Polygon",coordinates:["@@n@naIw@@VVKLVbVxnVÆUnanKWXamKmk¯K@mkUm¯KV°w@Wm@UIUUlKUU@a¯KWanwmUXamKkUWUnU@KkUwWKXaWLUWkImaUUUKka±k@l¯wwmbUkXm@UJkIWXXbmUJXUV@°KllVXV@xmbnV@blV@VU`UL@Va@bULlb°VXbÜ@V@bL@JxnLVb@lVb@V@@zbXWXKVLV@@bUVVL@blVna@ll@zl@@J"],encodeOffsets:[[111150,32434]]}},{type:"Feature",id:"500243",properties:{name:"彭水苗族土家族自治县",cp:[108.2043,29.3994],childNum:1},geometry:{type:"Polygon",coordinates:["@@Jlb@nVV@bXb@ÆlLUl`nVKU¼VxkbWnlUxlXX@°°WnnJ@VUn@Jk°L@VlV@nUJx@bVVVz@VnLlaKnalVlIU¼@nV@@anKUwVal@UlJlI@akU@UWXKVI¯Uak@@KmkXWÜkXWykIWwXw@laXamkVUUym_XmlkkmmakwmIUKU@Wak@kaW@kI¯WIk¦VUUmaUV@XkVUV±aUb¯b¯¥m@@ImJ@mmL@kUKUkkJbV¦"],encodeOffsets:[[110408,29729]]}},{type:"Feature",id:"500235",properties:{name:"云阳县",cp:[108.8306,31.0089],childNum:1},geometry:{type:"Polygon",coordinates:["@@lbLVVVnblJVXXKWbXLVxl@LmVXVVlnLWbnVmxXb°L@bVVkLVVVJn@@X_WmkUK@alUKX@@xWL@VXLVKlLKXLÆm@ma@ml@mU@UUmL@aVUU¯U°`lknLlw±@a@wmLVWaXU@KWU@ak@VaU@IUVmUUwVmUIl¥UwUVWUaVUUKVIUa@UUUUJUUmknl@@VWV@L¯aUbUlx@@b@VULUx@VUxVVU@bU@mxUU@mUVklkk@WxknlxK@amLKUK"],encodeOffsets:[[111016,31742]]}},{type:"Feature",id:"500101",properties:{name:"万州区",cp:[108.3911,30.6958],childNum:1},geometry:{type:"Polygon",coordinates:["@@ĸĊVInaWWXlJVIn@lWVnax°xkl@²LVLnK@bLkwlmXw@lllkUnVV@VnwV@@aVUUVw@UVwVK@U@a@kwVVa°b@KXU@U@mkÇÑamlkUVmn@VULUm@kUVkUawUWm@Uw¯mKUUmVUUULUKUW@XbWVkaWwkUUk@maUbmbVlk¦xUVUIWVUkJVVkL@UmJUUVU@lLUVUlx@@VbJUL¯¤@V"],encodeOffsets:[[110464,31551]]}},{type:"Feature",id:"500229",properties:{name:"城口县",cp:[108.7756,31.9098],childNum:1},geometry:{type:"Polygon",coordinates:["@@VK@w¯L@m@UÅV@ImVUVka@@aUkJ@LUUVUKmLmbÅVmUUwUaKUL@U@xJmbm@nVJ@X@VkVnlLXx@b@bUVLU`UnbU@@mVVX@JX@VLVVklV`@bUL@VLVKn@U@UJkn@lmLmK@X@Jn@mbnÞWVXnJkKČÑÆ@VK@knaÜmXlUČW°kôÇÆ@a@yÞ_VmUnU@K"],encodeOffsets:[[111893,32513]]}},{type:"Feature",id:"500116",properties:{name:"江津区",cp:[106.2158,28.9874],childNum:1},geometry:{type:"Polygon",coordinates:["@@InWUUlU@LValX@°²lÒXxlK@Ul@@Un@UaVJ@I@W@UUUVUwVIUKUaUUVwn@Üx@XUlnnbJ@¥VklKUUlk@ynU@kVUUVWnI@¥V£VWVIUKU@UVa@n@Vm@@nlUaVkUwJ@blLkLW@XWmXkmmLn@m@U@UVm@UVUUlakUVaVkV@@wnaWUk@VwklmVIkUUxmJ@U@KIkx±V@IUm@K@IUKkbWKUbnm@bmVnbmb@xkxUJ@ULW`@bX@WVXL@V¯mk¯@UJ@VmLUaWnX@WJ@nkKkxW@UIV@@KkImmkK@UW@XaWIU@UIkbWbxXlLVbnV@bWlX@VxVLnl@nÆÞVÜ"],encodeOffsets:[[108585,30032]]}},{type:"Feature",id:"500240",properties:{name:"石柱土家族自治县",cp:[108.2813,30.1025],childNum:1},geometry:{type:"Polygon",coordinates:["@@@kl@¼UbmVXJ@bV@nxVIVJULVVk@@LWbnJVU@bVbUJ@blLXnWV@mbnV@Vbn@VJVLnaVanbl@VlVXxlbXUWaX@VUUVwUUVm@I@WmI@amlLlK@alwnUV@kóVaÝk@UlbVK@VU»VUUVWU@U`ULkwm@@KmU@knK»VkJkUmbLkbmK@UUyUU@awm@@XXJ@VVLVVUbVnUJVX@Kk`WXXJWXUbmW@bkLUm`Xnb@JVL@LU@°VVXKVnUxVLUbmJ"],encodeOffsets:[[110588,30769]]}},{type:"Feature",id:"500237",properties:{name:"巫山县",cp:[109.8853,31.1188],childNum:1},geometry:{type:"Polygon",coordinates:["@@kVUbkKmbVxkLmKkllbV@@LXbxlaLVVVKXXV@@bVlKV@ln@¼°KXaU@Ulw°JXalIUaÝWXW@kVU@VUVWUUUamUw@aVamwn@VUUlLXWm£@wÇĉkKklmLUÒ¯Wn@ğ±kwmaWm¼U@@LUV@V@XVUnVJLW@XXWbĸºVzXJVXV@@VXlWn"],encodeOffsets:[[112399,31917]]}},{type:"Feature",id:"500102",properties:{name:"涪陵区",cp:[107.3364,29.6796],childNum:1},geometry:{type:"Polygon",coordinates:["@@nèVblĖVVnL@xVn@nJ@LUVVX@lbUJV@@nn@VVVK@zV@nzVJVUlmX@@_VVVbnaVal@@knW@wnaVK@aVIJ@£kUVW@wXUVJam@Ik_X¥@WwkKkwmkUxnÅmm¥WV@Um@UlVL@JU@@X@UVkKVkKVkKkb@bmJVXUVVUbU@@`W_UV¯b"],encodeOffsets:[[109508,30207]]}},{type:"Feature",id:"500230",properties:{name:"丰都县",cp:[107.8418,29.9048],childNum:1},geometry:{type:"Polygon",coordinates:["@@Þè@XUK@LlV@blbUJ@V@bnV@VVVXU@lbXal@VXnKV@maXUÞ@amk@aVKXVanb£°mnIVaUKVwUmWLUU¯V@@KUK@IaWmn_VlK@anXVaXWWIXWl_@LUWVIUmVaUUUK@UWI@Wn@VI@mkU@U¯Kl@ImVÅLwU¤óbUU@wWXkmm@LU@@VUIWVUL@JUnax@JnbUIWVx@UXlV@¤IUJ@bULmb@xmX@lk@UbmbUaUU@`W@kn"],encodeOffsets:[[110048,30713]]}},{type:"Feature",id:"500232",properties:{name:"武隆县",cp:[107.655,29.35],childNum:1},geometry:{type:"Polygon",coordinates:["@@lwbVm@IVKXUVJ@UV@@KnnWlX@xVVôaV£xÆKnUVm@UmIXm¯¯@WkWVwmkXlaUwV»ULmk_VkK@ÅWa@aUU@mkaIb@n¼nm_@mmK@ULUVVmI@aUJ@XWJ@U`UIkm±kk@@lULmUmKUnVnlUVmI@VkVlxbkIVmLUxkKUXn¦ÆnmVwlnlxlLXx@W¦`"],encodeOffsets:[[110262,30291]]}},{type:"Feature",id:"500119",properties:{name:"南川区",cp:[107.1716,29.1302],childNum:1},geometry:{type:"Polygon",coordinates:["@@VUbVJVUn@VLX@WVXVVI@VUVWxU@m@ĊX@@¼V°aVUX`@_V@VaUUVUWnI@alaLUlLUllLVU@@WV@@IUKVkn@@VlLVwnKUlJakwlU@UnJVUmkUVmXa@wVK@UUw@VVI@ak@alInwlKXUmaUW@wWLkKVak_ÇaUV@XbLVxUlWIk@UK@V@kU@VbUVUlVnLUV@lVXmxkV@L@V@Vk@WbUwmL@JUI@xVxkx"],encodeOffsets:[[109463,29830]]}},{type:"Feature",id:"500241",properties:{name:"秀山土家族苗族自治县",cp:[109.0173,28.5205],childNum:1},geometry:{type:"Polygon",coordinates:["@@XlV@lzn@VnbÆbXKlLUÒV@@llUnxll@z@LU@@V°b@Vn@l@VÑUnK@UU@aUakVm@K¯wklmnnUl`nI@almkIUwmWVkUakkJmUUa@K@aU@@_m@@wUyVUUa@Um@awl@Wka±UkUykIWVb@bUVk@aU@UXUUIWakUWmUxUV@nUVWb@XXVVmXX@VbVLkVWx"],encodeOffsets:[[111330,29183]]}},{type:"Feature",id:"500114",properties:{name:"黔江区",cp:[108.7207,29.4708],childNum:1},geometry:{type:"Polygon",coordinates:["@@VX@V@LV@VJUL@lVnnxlb@VXVXV@@W@UIVK@kUKna@£VWUaVUUalIVJVIUW_lm@bXKV@mn@JUUw@KnIVll@VanLVmUkVKXLVKUIVamw@UaU_lwKlwUWV_Ua@aUa@KUwm_Ó@wU@nkK@am@UkUKmXk`m@@I@K@I@mkVmIUxUJ@kUL@JVVlnklWnn`VzUVnlWbkb@WxXxlJXzWÛlWXnl@Ll@Vb°UJWLX@VlV@bkJ"],encodeOffsets:[[111106,30420]]}},{type:"Feature",id:"500117",properties:{name:"合川区",cp:[106.3257,30.108],childNum:1},geometry:{type:"Polygon",coordinates:["@@XKVXlKVL@UnV@aValXXKU@WVwUaVU@IV@@aVWL@U@anVV@@bVK@UVL@bnJWL@VnUnb@@JnIlVl@@bXIWbn@UKVLVKXLlaV@VVnK@bVLmIV@KmknUUWVI@aVJ@_WU_VmUwU@KVak@am¯mJU_UJUkU@WkIV`UI@JV@LmmU@@mbUzÅ@VK@nUKbakb@UWK@bkVVbVÛ@@`Xk@W@n@lXL@bmb@VVJUn@JnUlnUlmX@`XLlbkJW@kzlb@`@b@b"],encodeOffsets:[[108529,31101]]}},{type:"Feature",id:"500222",properties:{name:"綦江县",cp:[106.6553,28.8171],childNum:1},geometry:{type:"Polygon",coordinates:["@@@¦@XlVX@@UVKlVUX@lanVlUVbXWVXVVVUnKVUlwUwU@UJ@nmVkUVlwXam@VaUUUw@W@kk»mV@UmKkwVKVUU@@LUKVI@mV@XVWxnXVKUUUK@wWU@UUWnUlLXamUIam@wI@K@amImUUkI@makUkKWUUan@wamLVxk@UVmUUL@Vm@kV@I@ak@@bWVXJlLVbVL@@bn@@`Un@WbUKULWVXb@UVmbXWVb@bVmxUKUV@Un@V@V@nmnKlnnWWXX@lKkK@aIVxUlVbk@mn@@U@mbVUV@VLUJUXU¤"],encodeOffsets:[[109137,29779]]}},{type:"Feature",id:"500233",properties:{name:"忠县",cp:[107.8967,30.3223],childNum:1},geometry:{type:"Polygon",coordinates:["@@VLÞĊU@W@¼V@lk@w²mlVUllVnI@VlKUUlIVXUVJVUwl¥UkUKUIm@aU@mUna@XUWmkK@aVIUa@aUVmIXa@Kl@UUVKUIUJmwU@@aWInUVa»k@@l¯n¤mabWUUL@bnl@bÝWVnbU@mLUWk@Wbka@WVUU@UmUmVkUULVlVUxl@L@VbÈÒlb"],encodeOffsets:[[110239,31146]]}},{type:"Feature",id:"500228",properties:{name:"梁平县",cp:[107.7429,30.6519],childNum:1},geometry:{type:"Polygon",coordinates:["@@XLV@VV@b°°nnkb@bnJWVXblIUVxWnUJnVVLVUJlUnLVK@UnUVJ²nKVbVKla@aXlJkKlb@U°£KVIUa@@kwVVUkKV@VUkkUVk±n@xkl@U@»@XVÝĉUJnxWb@UXKkVUbUKWUkVmkkLU`b"],encodeOffsets:[[109980,31247]]}},{type:"Feature",id:"500113",properties:{name:"巴南区",cp:[106.7322,29.4214],childNum:1},geometry:{type:"Polygon",coordinates:["@@nxnVlJlUXL¦@x@Vl@nKVVX@V_V@@KlVXU@lKlxXIl@ÈĊ@Vl@n_VJlnVlnb²VVVJVVmUUkĕUamçU@»W@@ĉnV@XwVU@UUJWUXUW@UKm@UVUIVaUUVmLUVUUUWWXUakVmUkbW@UVkUL@VW@kUW@mJUXVVU@lmV@zklVVkLUl@¦I"],encodeOffsets:[[108990,30061]]}},{type:"Feature",id:"500223",properties:{name:"潼南县",cp:[105.7764,30.1135],childNum:1},geometry:{type:"Polygon",coordinates:["@@@a@a@_kalyX@lIkaWK@_nWVkkmmV@IVmUI@Una@aWK@k@mkbWaknmJUk@mk@@kUal@Ua@Wa@aXLlwUKlkk@KmI@VUJ@Lk@@VUUmL@amJU£kKUaWakLmU@bVVUbnbWV@xkL@bUbxUxVbXJVbUVWIUVU@kLWxkKWV@n¯VUbU@@VVX@VmaUL@VUK@VVbn@lVnI@@lnLULm@Ub@l@na@lK@XVVkJ@b@zl@@VnV@bVb@J@bnXV`lXXmVI@W@InbV@@aVKUblKVLUanLlmnLlK"],encodeOffsets:[[108529,31101]]}},{type:"Feature",id:"500118",properties:{name:"永川区",cp:[105.8643,29.2566],childNum:1},geometry:{type:"Polygon",coordinates:["@@@bÜnWVLXlxVVxXxlVn@@bVblK@a@UnLVJV@@UnLVU@VXaVKVX@n`WUÿ@IUKlaUUUkWyUÛÅÝ@mmkUKUwW@Xk@amUUakKWwXaK@VVLklXVlkxVUL@bm@Vxn`IVxUVkLVUl@@lkXmmVUn@VV@Xb"],encodeOffsets:[[108192,30038]]}},{type:"Feature",id:"500231",properties:{name:"垫江县",cp:[107.4573,30.2454],childNum:1},geometry:{type:"Polygon",coordinates:["@@Ċ°¤nÒ¼aV_lKnllUXVVLValULVW@XamwVIUKkaÇÑa@U@KkVwkUUVKlVnU@aU@VIka@akU@KVL@WÝçUV@Vmbů@LKnnJWVkxlL@VX@VxmnXVWxUb@bkn"],encodeOffsets:[[109812,30961]]}},{type:"Feature",id:"500112",properties:{name:"渝北区",cp:[106.7212,29.8499],childNum:1},geometry:{type:"Polygon",coordinates:["@@@bVVXLa@lnbWn@L@XVlK@VVLUVlbkLUKVVVL@VnXVL@VV@UbVb@x@¦UxVb@bUJL@LVVxlK@nk@U@WUVLlKXV@VblU@UUKVU@wn@VJVanLlkX@VaVK¯@a@U@U@VaUKkUU±maUkm@UUkbm@@Vk@@JwU@Ub@I@JmwUL@a@@KkVÇLkWk@kUU@@xUVmKUnllUb"],encodeOffsets:[[109013,30381]]}},{type:"Feature",id:"500115",properties:{name:"长寿区",cp:[107.1606,29.9762],childNum:1},geometry:{type:"Polygon",coordinates:["@@VVUbXlX¥l@XnVmlxUx@@blVnnôĀlm@aVaXwWUnmUwW@@UkKlwUXmImL@KÆ°na@UUImyU@@yULUUm@@mU@VIkaW@UUV@KI@mmUw@mKUnUUIlVLUb@@V@V@b°ULUbW@klmKUbUIm@@xUVVL"],encodeOffsets:[[109429,30747]]}},{type:"Feature",id:"500225",properties:{name:"大足县",cp:[105.7544,29.6136],childNum:1},geometry:{type:"Polygon",coordinates:["@@XUmaVaUU@anVlKXbValU@aV@@IXK@@bV@VxVK@UXLlUJXa@_@@aVKÅWVkwWawUa@am@kUWLU@kWmX@ykI@W@UV@na@LlLV@UkwWUKmXX`mIVl@bXLWVkbkkx@`VXm@@J@U@UUKUxk@WbUIVl@VXLWJUkUlUImxXlmb@X@VUJUnVbW@UV@@VVX@bnW@LVxUnlJUV@n@VxVIn@l`UVVVL"],encodeOffsets:[[108270,30578]]}},{type:"Feature",id:"500224",properties:{name:"铜梁县",cp:[106.0291,29.8059],childNum:1},geometry:{type:"Polygon",coordinates:["@@VblLV¤nI@bnKVV@Ul@@KVI@UnJ@LlklVLkxWK@bXb@Vbk@Vb@ll@@nVlnIlmXblaXl@W@_Ü@UUalU@aXL@VlabaVL@mUL@UUÇXUWX_WaU»m_@UWULWb@UUVmK@VU@UImK@V@bkLxXblxXUÆUL@b@@`WbIkVWK@VULUwU@@a@WL@JU@@bkVUb"],encodeOffsets:[[108316,30527]]}},{type:"Feature",id:"500226",properties:{name:"荣昌县",cp:[105.5127,29.4708],childNum:1},geometry:{type:"Polygon",coordinates:["@@VI@U@WnaWknwVJVkVlIXWK@UUkVJXal@VwVL@V@V@In@UW@_wlllaXUWK@aUknJW_Û@aWaU@@UVmUUaUImJVnÅUmVUm`kUUVWLnVU@VVmXK@nxmULkxImJ@nU`@X@Vkn@`@nlV@nVJVaXVLnK@bVV@nV@lbXW@"],encodeOffsets:[[108012,30392]]}},{type:"Feature",id:"500227",properties:{name:"璧山县",cp:[106.2048,29.5807],childNum:1},geometry:{type:"Polygon",coordinates:["@@XzVlVVkbVL@JVĀX¼VXbW`XWVÈVVVkV@@UXa@alK@IU@UKWUyUI@wVUUWVak@VUkW¹@WXI@yVIUK@kWwkѯ±W@kUb@KkVVVmXJ"],encodeOffsets:[[108585,30032]]}},{type:"Feature",id:"500109",properties:{name:"北碚区",cp:[106.5674,29.8883],childNum:1},geometry:{type:"Polygon",coordinates:["@@XVLV@@JkL@bWb@VU@UlÆVya@nV@nn@KU@IVJU_lJXV@VlVIV`nIn°@blUbKVI@aUaVw@¥@wUaVaU@@UUKWm@UUKUUVLlKkaVUUK@UkLWU@@KXmma@kbWKUU@aUamLnÞ@VWLk@@Wm@ULU@@UKUVWI"],encodeOffsets:[[108855,30449]]}},{type:"Feature",id:"500110",properties:{name:"万盛区",cp:[106.908,28.9325],childNum:1},geometry:{type:"Polygon",coordinates:["@@VIV@@wVJ@InKVxXal@@U@U@KlUnwUW@kVUKUmVkUa@I@KW@@bk@@mU@m@k@a@aIUxmJk@wULwkKmVVX@VXV@xVLVVULmWXwWUU@@nUJVL@KV@UVULlxnL@VnUl¼@l@XVxVVUbn@WbkxUlVnU@m"],encodeOffsets:[[109452,29779]]}},{type:"Feature",id:"500107",properties:{name:"九龙坡区",cp:[106.3586,29.4049],childNum:1},geometry:{type:"Polygon",coordinates:["@@XKL@V@XbV@lW@UV@@VXIV@UVKlL@KnnJ@VV@VU@I@@mVUVWUUmL@V¯LUK@UV@UU@a@U@yU@WLUK@X@KUVmL@@aXI@w@ammVk@WÛwm@UxVVVbVLUJVxVUV@V@X@JUIVbm@@Vk@@VkL@lVLUJ@zWJ@X"],encodeOffsets:[[108799,30241]]}},{type:"Feature",id:"500106",properties:{name:"沙坪坝区",cp:[106.3696,29.6191],childNum:1},geometry:{type:"Polygon",coordinates:["@@XºlUVl@UbVXUV@xVJVzXJVUL@VV@VKn@@Xl@XK@UmÝnKVbVakkVm@kUK@UmIm@LkKULVU@WJ@UU@@VkXU@Wa@@UKWL"],encodeOffsets:[[108799,30241]]}},{type:"Feature",id:"500108",properties:{name:"南岸区",cp:[106.6663,29.5367],childNum:1},geometry:{type:"Polygon",coordinates:["@@VVJVL@bUVVnl`XIlwXJlw°nnlIXW@UÇĉk@WJkwkL@WVkU@LU@U`W@UXUV@n"],encodeOffsets:[[109092,30241]]}},{type:"Feature",id:"500105",properties:{name:"江北区",cp:[106.8311,29.6191],childNum:1},geometry:{type:"Polygon",coordinates:["@@nLVU@wV@lV@XllÈKlU@L@@bVKnx@I@JVaV@x@Il@@Un@laVVn@mkUIm`k@WXJmk¯mkxWIkxWJk_UmVUUK@UU@@l"],encodeOffsets:[[109013,30319]]}},{type:"Feature",id:"500104",properties:{name:"大渡口区",cp:[106.4905,29.4214],childNum:1},geometry:{type:"Polygon",coordinates:["@@k@@U@w¥WKkVkImUmwa@b@xWJ@b@nKVU@L@WVLXKV@@z@V@bVVU@@VVL°K@U"],encodeOffsets:[[109080,30190]]}},{type:"Feature",id:"500111",properties:{name:"双桥区",cp:[105.7874,29.4928],childNum:1},geometry:{type:"Polygon",coordinates:["@@WwUwU@kK@KmbU@@V@XlJ@znWlXV@XK"],encodeOffsets:[[108372,30235]]}},{type:"Feature",id:"500103",properties:{name:"渝中区",cp:[106.5344,29.5477],childNum:1},geometry:{type:"Polygon",coordinates:["@@VL@VV@VL@aUKIUU@@JUVU@"],encodeOffsets:[[109036,30257]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/fu_jian_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3507",properties:{name:"南平市",cp:[118.136,27.2845],childNum:10},geometry:{type:"Polygon",coordinates:["@@@knyk@KU¥wV@nkWzUmk@@lKUa@aVI@UKUamKUUVaUI@X@UV@K±IUVVlUbUbUL@KWUXmWk@KkXmmkÅKUa@amUbkUkKWUnwUÇwVUUÝUKV£U@nKWwXLVKm¥@wUXkmWk@@wX@lU@yVImaXwV@knU@mbk@mlUXmU@mV@n@bnW@bUIWJImVUKWbUK@nkKaU@W_VUUmWmL@UU@bUWUL@V@bmVUz@`mUUVVbXL@VL@lmLUxmVamXkW@xWbUVbUxkU±@ÅUmmkLUbW@@`kLknVlV@lbXxlVUXVVUU@UbWkIWVUUUJkI@llbUxVL@VVUU°ULUmWXUV@VULWb@xm@UaVLVKUa@w@VbkmVambUUm@@VkK@@bxlxX@n¤@X@@lkLWV@nVkb@bWJXLWx@nkxmmbXn@VWVUn@VnJ@bVXl@VJXnWbX`lLUlJVI@@VXV@Vl@bn@@Æmn@VxXU@mVIlxVnIl@nVJaXI@mlU@aXkVm°klmnVV_na°@V@xܦXKVnnUlVXbVKLXKV@naV@@VVl@@lXblXWnLlbVK²n@@VLUnlV@lXxô°V@UnaUUlKXLVUVVUbVVlUnJVX@VW@an@lb@nl@VU@anUVW@kaUm@InVVKVU@kUW@Uam@km@kVa@a@nwU@WlI@mVI@WXaW_n@nlkkW@U¥@kV@Uw@wU@@IXK¥VIn@nU@`@Xl@VVLnaWbVaUwnU@VIKlV"],encodeOffsets:[[122119,28086]]}},{type:"Feature",id:"3504",properties:{name:"三明市",cp:[117.5317,26.3013],childNum:11},geometry:{type:"Polygon",coordinates:["@@lL@Un@VVnabnUla@Ux@VbULUKVbn@w@XaVK@UVUXWVnVKV¯VU@UUKVwka@klJVIVVXUlJXVaV@VUUVWkUWwkaU@UklmlK@_X@ValKnnÆV²@lVVwUaVXa@wlXnWbnUVwnK@kK@UWKUaVUnV@_VynU@a@UVKVXaV@@VnKnXVVUX`V@blL@mVLXaVLnUJXIVJ@amX@a@mnUV@nVWnkl@naV@ml@@KmKUam@UU@@UlKUVkUK@aVaUwVU¥UIkJ@wmI@mbkwkVW@UXKULU`IVKUa@LkkVmUU@WlULUWÅU@I@WWnU@@w@a@Uam_XyVIVWkk@mwVKXUV@nwVXkWÅU@aU¯KUnK@¯mULXVLnWVbVbUVm@Ub¯¼W@am`kbamLUUUaUXV`@x@XmJ@n@L@xkJUU@kU@mWm@kUUwUUVWl@VUkIy@kkaVUUmIWVXbWxU@kmVkK@nWVX¦WxU@@bkx@VU@Wk@kUbmJUUmkUW@_kKWK@knV¤kIUKWLUbV@Wbk@@VWL@VkI@lUXVxUVU@@mWIV@a¯nUaaUV@Jb@bÞ°VbU@XaUVmL@VXblnV°n@Vnx@VUUUlK@InJVb@Vlnn@VL@VWJUx@XlJUVVVl@LUUUJ@L@lUL°¦kVVnV@xVl@blLnlLVaXll@nVUn@xn@nml°X@lb"], +encodeOffsets:[[119858,27754]]}},{type:"Feature",id:"3508",properties:{name:"龙岩市",cp:[116.8066,25.2026],childNum:7},geometry:{type:"Polygon",coordinates:["@@aI@VUbVb°m@bUXJ@nV@VUUwVW@klJ@UXK@Ul@Xa@UVaXKVLlJU£lm@XLlL@`VXnlVVnIVall@XV@@Ulw@aV@XwW¥XU@mlLnUlV@XwWaXUJVnUVlb@lzlJUVk@UXVVVxlVn@nXV@@lVVlI@w@K@mnI@W@wU_VWbVVVnKbla_nbX@°»Van@VUUaUamXUKWK@a@Uk@wWkXWW@wUUKw@_lywUkU@@U@kamVmXaUVUka@Wk@»UUUVKkbWUVUbk@mkxkKnIVUmW@kUKmXUmVaU@kU@m@KUWVkIWJ@U@UI@wUUUa@KW»nU@mVkUmm@XwWU@UUmL@w@mnVUU@aWak@@amxU@UxULWVXbVLU`mbUImVUbnV@@bVn@bnVWxLmyUbIUK@aVmakbVUXWUlKWbkV@WLUlk@@nbb@lkKmU@UIWJkw¯UUVVxm@@XkbWxXKlUzWJkUUL@bmKkV@@VUIUlWV@XK@VkbWx°xUb@LUbk@@VWb@LXJ@VWXU@@bUVVVVn@VVlLn@l@xk¦Vx@bVJXbn@JlnXxV@@nJ@X@V@lmxbUn@xVL@VVKlL@lnLVaVL@xkl@LxVl°XWVXVlJWnxlJ"],encodeOffsets:[[119194,26657]]}},{type:"Feature",id:"3509",properties:{name:"宁德市",cp:[119.6521,26.9824],childNum:9},geometry:{type:"Polygon",coordinates:["@@@LVKVaVaUkVU²J@LVU@@WVJUbVVnLVbL@VUJ@bVbkL@l@VnyXmlU@xV¦L@lmz@lnL@bVVbVb@lnKVkVl¤@zXV@l@XJVLVKnXVKVnU@wUm@KU@UlVlw@U@U@UaUKlU@kXKlmXIWKXaVIVUVK@KU@@kJVUnLVJUL@VIVa@VnLKUnl`VbVV@Vbn@Vzn@lKnVlIVVKUalkXJl@XXVWVLVUUmVU@Unm£lK@Uk@WUXK@U@WVwVkĠkĢÇ°aUÅUwmaţɱUÇaw±V¹XalKôx@UVaÜʓͿVóbÅLJm¯Vk¦k@mamXkKUULakbk@mV@LkJWb@VkmXk@UVmaUV@amLUKUamI@KUaU@WbU@UUUUIWJUkm@wKkVJm@kxÇVUK@mUVUkmlkkVm@amwLVWU@UbVLkUb@VmK@XaVWU_VJnwV@@kUmWakx@kwWakIWxnbUJz@kVW@@x@XllnVW@xn¦ULWKXxmL@VU¤VLÞVVUÈxVmxXVlLlVanV@bbVLlÆnnlW@LXlWnXV"],encodeOffsets:[[121816,27816]]}},{type:"Feature",id:"3501",properties:{name:"福州市",cp:[119.4543,25.9222],childNum:9},geometry:{type:"Polygon",coordinates:["@@lxna@nJ@xlIVJV¦UVxUb@bLVUlVkL@V@VVn@VbLn@LUlJXblx@lwXbVn@lU@mxUIV`UXWb@nLU@ValUKVaV@UXKnxbn@lUkllnUVnV@VLUÈlwn@UIlLxn@VlXIVJVVVV@XaV@Vb@LnJVbVLnK@bVUnbVUl@nWl@UXalI@KnUl@labVKVlLnWnbl@l¥°UnIÆKôaUa@UUwÇWǓIUWUÅVkƨm@@£@KmLU¤ULˣJkUVǟUUķ@ĉVKUk@Ñ°wôÇç@īé@Åţ¥mīÛkm¼Å@VķVó°ō¦U°n@bVJXVVL@bUakLmx@xmxXzW`XbWnXV@bWLÛ@a@aXbWVkaÝwU@mlWKkLWWkLUKULW@kVmVUUÝUamV¤n@xUVUzkJV¦lJU"],encodeOffsets:[[121253,26511]]}},{type:"Feature",id:"3506",properties:{name:"漳州市",cp:[117.5757,24.3732],childNum:10},geometry:{type:"Polygon",coordinates:["@@@bl@Xb@bVVUm@nx@nKVV@XVWxn@VnUl@nmVX¼@LVbVV@xVJV@@XIlJXUV@Ln@lVV@UbVnnWVL@lnXUVmJLlwnll@VaUXVlaLVUVV@¼Xl@lbUVVWbnnUlb@@VV@aVUmlUaUny@kU@Wkk@WaUVk@@ammk@@U@UlU@aUa@wl@mXLllnLU@anVnU@L@VVV@KlXnWVnVanUw@w@wmnÅ@waUam@UkmUl@@aa@U@¥kôKwȯ°w@ŻkwǕaKÑÛk@ĕōřċ£ĵUKW»kÅŻLU@Ulġw@¤VzVUbkKUbmLmlULU¼UxmbXl@bWVb@bUnVUVbULU@@VkbVL@`U@WX@XV@b°@b¯@¤@Xm@@b@`UVVUL"],encodeOffsets:[[119712,24953]]}},{type:"Feature",id:"3505",properties:{name:"泉州市",cp:[118.3228,25.1147],childNum:9},geometry:{type:"Polygon",coordinates:["@@Vlxkz@`xLVV@xXXWXl@xl@V@bnV°@LVm°LVbV@ÆXWlUmxU@WVULnx@llUXUJWzn`Vb@@b@xV@mXX@@JÆVVXVKXkV@nVlUl@KVbULJV_VKLVWX@lUVkIU¥lIVyVU@wm£nUVWU@am@UmWw@UX@@amVUn@@aUUlUVanaWUXWmUnkK@VUlVVUUw@XLWWXma@knmbVbVXbVL@XJlInlLwmXów@çV»ÇçŋaķƧóƅóKġ°nÅUķƑUÇW@¯xÇ°öÆlVn@lla@Lb`@VXVVx@V@bULVJUkÇ@¼XUKk@mmULkaWbk@x@UkL@a@K@U@UmKmbU@kV@UmVUbUmmXkW@LUU@U@KmVmU@bVmKkkWKnk@@xVb@bkV@V@Vl@nn@bl@VUXbl@XlV@@lmzVVbknUVb"],encodeOffsets:[[120398,25797]]}},{type:"Feature",id:"3503",properties:{name:"莆田市",cp:[119.0918,25.3455],childNum:2},geometry:{type:"Polygon",coordinates:["@@VbÞVVnUlUX@VKVLlKXXlKXLnkV@ÞxlbXUWab@bÜ@XK@aWUXmWaX_Wynw@wnwlKbV@aUKWUUI@amV¯Ŏ¥ô¯ĸUUÆ@n»¯aƿé@ţ¯nĉĬÝKóó@ÑU¼@èxWônxKmkkJWI@UKWaUUaamn@lnbWXXWK@VxUVkUV@ULmlnVWXXVmbUbkVVV@bm@UVn@bW@@VXxn@Vn@bVUX"],encodeOffsets:[[121388,26264]]}},{type:"Feature",id:"3502",properties:{name:"厦门市",cp:[118.1689,24.6478],childNum:1},geometry:{type:"Polygon",coordinates:["@@@VlUV@nanL@V@V@L@blK@Vwl@XalbVKnnl@VLW»È@lVUIVK@a@UUwWUU@_aK@bkkm@UkõÅxóLl@¦@Vb@bk@VnVln@Vbb@xmÆn@x@xx"],encodeOffsets:[[120747,25465]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/gan_su_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6209",properties:{name:"酒泉市",cp:[96.2622,40.4517],childNum:8},geometry:{type:"Polygon",coordinates:["@@ÇnÅaĉ@U¯¥UŹ£WUýUU±JkkUwyÞIČxĊĕĊ¯¥ÆUkţUÅÓ±¼IUx¯UÒƑÝÅ°KÝnğ°ÅU@@Vn@þ¼¯WnŎ°XLWlnVnbWnVXxmbabóUlǕUUaIUmlU¥k¥ĉwkkÝɛa@¯U¯°mVkVnKlōÑÇÑU@klUġkUŻnUW@¯k»mWV£UKnUmUww@UIVaXwm»Èmmwn¯ċ¯LĉUJUalka±Va@Uk@ÛѯWmnUaɝ¤Ûmn¯m±x@wóxÛLġÒUx¯VÈJUbózÝÇKĉ¯ōlÝUÅWl¯nťbÝ@¯ǩLġmV@ƯĢkÆmĊkVťLɃmÝXó°@ĢbVóVݦɱ@ƧaġUVĠÇÈV¼UVţwmbJÇwˋaXmǯKkkmbXm¼V¼ǬŚ²¤ôŰÆƴô̐ŤǪnɆӨ¼ɆLÆłUĊxŎƞȘǔˎǬǪnƨŮǬö°»ġÞÜÆĸÒĊǀbƾèôÈ@¼¯þŤĸƧ°VĀ¯b@lÈĊʠń̐ȘKǀֲॗţÿǕý@ʊǓƨóÆÑǖŃôw@ʈƆÅÈVVĊVóĊÅ@ÞƒĬV@Þī@°V@ĸĢ°XτƜĠ@ÈaÜ¥ŐƅnğóĕVġUůƿŋĕa±VUťÇğÑ"],encodeOffsets:[[101892,40821]]}},{type:"Feature",id:"6207",properties:{name:"张掖市",cp:[99.7998,38.7433],childNum:9},geometry:{type:"Polygon",coordinates:["@@ÈÒŎÒkmLUlU¯nV°@°ɜbÞĠaÈ»ĸlLVUÈ@Ċ@ýUm@@ÆVĠ¯ÞmLƯރѰVVwJ²»ÆÔVlŤÅV¦ĉ°ĉĖċwÝJzVxll²IVVVþX¤źV°¦VĊ@ÆbÈmǔLĸĠ¯Ģaô¯ĸmÆÛUlÇĸk°XyĊUǔVǩnmV»a@ýnK°n@l¥@»żĊ¤mç@£ČU@mmVkÞUƐ±²¹°ĠwÅƑŃU¯V¯aÈŁÇ»ġn_°xŎKlxklx@Þw@Æm²bDzLlkWXať¯ĊaÑK±w@wUÅçV±Uk@@¯¯xU±±UU°ōxVxÅÔō°ó¯UݦóbÝþ@ĉÈóUVUx@VUVÝwÅÈÇóVkk¯JÇkmmL@KÇx@bk@U°ķ²ó`mn¯°UwlÅkU`¦ɛôķz@ÅnÇ°U¼¯KmVk²J¼ƏÞķô¤UL@mnğ`ÇnUxÇ@ÛÿU@kŻ@x@móJkÅ¥VŹĉóÒĉlċ°ķUƽÜ@x"],encodeOffsets:[[99720,40090]]}},{type:"Feature",id:"6230",properties:{name:"甘南藏族自治州",cp:[102.9199,34.6893],childNum:9},geometry:{type:"Polygon",coordinates:["@@ÞnKlnwX¥WÝXkxÞUn°aĊVnUUKlÞĶWXnĠ¥ô»@nmVL@¤°VzJanU@aÆwna@kU¯yX_aĉbwéXkWwÅa¯V¥m¯UI@@mb°aÈçU¥@»knwɜƇ°I°ÑÈmVU¯Xa@wW@wV¯Č¥l¯Uwnm@kaUaóKkk@Çab@ÒWa¯IÇxÛam¼VUxÒl@zÝÒ¯bÝaĉVĉwÇWzJmJn²mܯU¯ĉ@ġ¤Åb@²nml@@ULVxVU¼Ålmab@°l@WIU¯@m@ó@UzţyXÇUÇVUUVLkbWakVWmUbkkKUÆ»n°Knk@aUVmnk»l¯Ģlw@_kKVU@na@lUk@¯¥mV@kmbWb¯Åõa@mkU@kÇkU@`@óóbl¼Uxn¼lVÈx@blVkVVn`XÈġÈ@ÇK£ÝJmUUnUĖmlUmKUnVÅaUwUĉ`¯n¯wW¼nxV@bĉnkIċŘkXU±ÒxÈ@X°`lVIȯĊVVVan@VaUVażVmblkÈWWIXaalL@wVbV¦lL@lĠnÒUnkL@ÆÞkÞKbñþW¦ÛċVULUºkÈlŎUxÆxÞUUxÒx@XbL@lÆ@ÒlXVln@bm¼J@Ånx@bnĠmxVXmbÈè@Ċ£ČWw"],encodeOffsets:[[105210,36349]]}},{type:"Feature",id:"6206",properties:{name:"武威市",cp:[103.0188,38.1061],childNum:4},geometry:{type:"Polygon",coordinates:["@@±¯¥@klwU»ÞÝmwKm¯ç@kVÇUL¯lVUKġġm@a@U@X£°l°LŎÇ@aōVÝwÔKUÅWJ¯lm@ÛVWa@klĉUmaLUanak¯J±KkXóÜÅx²Ç@nUÒĊb°@ÆkLXÇÆ@xÝnxWxţ¯¤I@ÆnVVVlU²ÆèV@x²xLÒĉbŦ°WbXklÞ@l¤XĊ`wl@ĢÈŎm@bnVUb@ÈÆÛLèÇUÒŦlĸ`°ĮʟÆǓbĉôϚĊÆĢnŤéÑĸĀĊ¦@@l°l¦Ȯ¦ɆÞĊKŤĵĸů»mŁyġķŭ@Çɱȭ¯mƧUĊķnŁŻ»UaUƛɞÝƨů"],encodeOffsets:[[106336,38543]]}},{type:"Feature",id:"6212",properties:{name:"陇南市",cp:[105.304,33.5632],childNum:9},geometry:{type:"Polygon",coordinates:["@@ÈÞ@l`UmV¼@nnÆwVlnVVaLVÈ_ÿÞ@naxÆ@l_@VxnK@llLnxmÈŎJnbUxI°l@n¦lÈIlmX¥k°@kJk²é@klaUaVaU@@ÝnIWnmnxkºÞaV°V@nwKxôbÞ£VUbþLn»mVwIJ°@nb@°°IġUkÇKV@ů»lLnm£@anK@ÑÜn@»mL@£ykUUmbUÞÝ@kyÇbó»XUxWVzb±mÝbXawUamL¯»@wUKVwm¯ĵJ°ÅUWVkKVk°wÈVVÑlU¥kmVamknUw¯¯bċ¥ÅKkKkVċVk£kKVwÑa@kóyÛ¯ÇVkówXō¥Ç¼ów¯U±k@xIĉÒÅVmÈnÜ@n°bUbÝVUnnJ¯Į@m¦nVÜ@L°JXbÑ@aÈb@llôLVbb@lmnVxk°ċ¦U°@xX@xWb°UVÇn¯Ò¯Jɛƈmxl@¼"],encodeOffsets:[[106527,34943]]}},{type:"Feature",id:"6210",properties:{name:"庆阳市",cp:[107.5342,36.2],childNum:8},geometry:{type:"Polygon",coordinates:["@@kwĉ»VamV¯wIóVkl¯KmVō¯ÝWkL@bÝKō¦@@Lx@b@la@km@@l¯nm@UaÅ@óWUXm¥nw`@UUxķôÇ°ğ¦@VJ_nIVnalxkXJWn¯nVLxl¤nnVbklVX@xnxmV@bUK@nm@@xV°±aÅnkUWnUax@mn@¯LmUĀlU@lV@blLUblxklkIÇx¯°UXbaVUnV@°LUlnbX@`°nVmbnÆmVkLmK¦U@Xy@kl@U°K@¼XbW@bWnLVaVVz@xlVČ¥lbUxÞlVU@nÆWôn²VJlUƧLnmÜLXan@mw@wlUlV²mblwVÈlLÞ±@lVnUlxnkma@mkJ@kXVU@mn@¼VXUVlLnmVbôaVnWV»ÈUl°È¯ÆInÆU@kk»mKkÆġk¯@»mk¯@óÇlÇ@VykklUml¯Þ@w"],encodeOffsets:[[111229,36383]]}},{type:"Feature",id:"6204",properties:{name:"白银市",cp:[104.8645,36.5076],childNum:6},geometry:{type:"Polygon",coordinates:["@@VKUÈl@è°nLnxÝÞV¼kx@l¦²°ĊóĠĊ»@ÈxaĊxlwÈVŤa@¯²aÇ£Jk£lnUÞ@°ô@ywl»lIX¥Ǫnw@ÑÞWlaÅlL@Uwĉakl@¯mwna°JV¯nUVÓÞÑm£²óWaUÇ@óÝUçV»ÈkkW@¯xV@XlK@wX@Vmm_@wÈÝKU¯ÇwVwÅK¯VkJXkWVaIm¯UkÇlVĀV°mxók@¼óWxĉÜU@UbzÛJÇk@ÆnVlÔ@kxô@ĬWL¯K@aÛImm@IUa@UÇêU¤VÒÇx¯ÒVlk@Wbĉ¦UbkWV_y¯Laók@b@nmbkx°"],encodeOffsets:[[106077,37885]]}},{type:"Feature",id:"6211",properties:{name:"定西市",cp:[104.5569,35.0848],childNum:7},geometry:{type:"Polygon",coordinates:["@@aV²wVJV_@LlanÅllŦçÜÓ_lnWaôkxUbmV@È°lènk°l¦`@nnL@ÈlÜIyVaV@ĊÛXwô@»lônwU¯ÿUÈkl°VnJUblXWIl°UV@aVVVmnL@lUUwmk£bV¥VUVwÛlaÇÝÞmk£LUy¯L@WlkKW_XaWmġU@akakXkmVwmŹVUbWónmwnWW£KÈnV¥¥Æ_klWbU¯V°aôbnaVwmaōInÇmwkK@kmLUw@`kÅ@wb@mÝĀÇ`UKUbmUUkÅxmm@»nUVk_Ý@ǦVÇè¯ban@@JV°nU¦°ÆbXxWlêxĊabW`zV°@lmbÅx@bmVbI`¦@ÒUVUI@ÆL@b¼@@lmxnL°ULÞğÞ°kLUL°xVnKVl@zX@"],encodeOffsets:[[106122,36794]]}},{type:"Feature",id:"6205",properties:{name:"天水市",cp:[105.6445,34.6289],childNum:6},geometry:{type:"Polygon",coordinates:["@@UyÈVVUnn@VU`UblzJnk@VbKU°lwW°nkVUÈl£°V@n¥VklkU±Unlw¯UkwmKUlmkUmnkym@Å@UmWÈU°l°anlJkUKlU¯Èm@kmWV»kkÝLUWUx±b@¯ma@¯IJUxnm¼KýaVUݤóawLmxU@¯UbݹlmwmnXmJ@ÞV@UbVbkbl@±êlIl¯@lW¦knÇJkm¥k@¯Jmbóa¯bUV°akXlÅ`¦U¦ÇmLX¤mXnxmôXaVźUnUxlnlWbl@bĢVnXWbX`lLXk@°KVzKl¤nÞÝÈkbÜ"],encodeOffsets:[[108180,35984]]}},{type:"Feature",id:"6201",properties:{name:"兰州市",cp:[103.5901,36.3043],childNum:5},geometry:{type:"MultiPolygon",coordinates:[["@@lW²L°IlmbVbKnbĊVlk@XbÜU@kn°XIÆVLÓÞxŎUlôb°KzU`lXVaĊ¥Xal@kU°ÑÈwUÑV£ÈéV@VbJ@nnÜJ@bL°XK@īówl@kÓmUÅmK@m_k¥l¯mkçǯ@nUaVwólXbmk`ÛÔťèkkmÆkbK@U`UI±xUbWlXmbVbÅÒólkIWJk@zKŻ¼@xUxó¯LWb@ÅÒ±¦U`nbťĀUVbLU"],["@@¯lwna@mōȯK¯kW¤@@V@bĢnĢVLU°k"]],encodeOffsets:[[[105188,37649]],[[106077,37885]]]}},{type:"Feature",id:"6208",properties:{name:"平凉市",cp:[107.0728,35.321],childNum:7},geometry:{type:"Polygon",coordinates:["@@ÆLUxÈxV°LÇÞ@xn`Ü@X@nĊÆwnJmwUxaUkw@V@waVmlLXÝl@XVĢmV°@nl@UUUWK@wÿVI²Òlm@nÝĊýVV@nJ°Ułm@kV¼nKĢȤôKblnKllVk²aĠ¥È¯ĸóVw@V_xmn¦VWôXÆ@Vbn@°m@kn@@lb@ka@wK@@UlKVaWXW²¹lÓw@_°n@@_lKÅķW@mLUWn»Û@l_Ç`Ûmm°ÅbWb@VWbUUKÇÅaġlmkUġl»LlUm¦@¯U¤ÇkVUml¯Xx¯kVLUa@mlIkyVa_UV@mmUVUÇVzUxUVU¦a¤lnVxVk@mKUnUU@bU","@@@ż@mlkġk"],encodeOffsets:[[107877,36338],[108439,36265]]}},{type:"Feature",id:"6229",properties:{name:"临夏回族自治州",cp:[103.2715,35.5737],childNum:8},geometry:{type:"Polygon",coordinates:["@@@ż»Ly@lXIJlôkÆÑUanaWXkW@yk@ULmUw¯KVlK¯ĠÝÝVK¯mKnwk@@»@aK@ÅVJVU@Ñ¥_Uy¯@£UKmn@ó¼ğ¦WmĵXÝkVLmVĉU¯bmÝVwWlXÞW¦xkmmLݱU@VÞ@ÅÈW°XܼƨyUĮnWnXÝxUx°lVXJlôV"],encodeOffsets:[[105548,37075]]}},{type:"Feature",id:"6203",properties:{name:"金昌市",cp:[102.074,38.5126],childNum:2},geometry:{type:"Polygon",coordinates:["@@ĢÈ¼Çł°bU°VƒńÆǖŰnÆōĬǔaʠůĭ_kķÆ¥VÑÈçÜKÅ@ÇVaUm@aōnġÇk@xĉ_Wk£@ݱKȱaÅn@Ýx@kwlkwōL¯wm`"],encodeOffsets:[[103849,38970]]}},{type:"Feature",id:"6202",properties:{name:"嘉峪关市",cp:[98.1738,39.8035],childNum:1},geometry:{type:"Polygon",coordinates:["@@llĊx¦l¦kVVnJVbǖVkôVabnaWwUXmmamUXkWKō¯Xm°»ĉÇ@UVKķkǼğb"],encodeOffsets:[[100182,40664]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/guang_dong_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4418",properties:{name:"清远市",cp:[112.9175,24.3292],childNum:8},geometry:{type:"Polygon",coordinates:["@@lǯkÿaV¯VaÈU¥ÆÇIlxmnbUxlUôl°kWl@ôVwUanUl@xVkaX¥kU»a¯±@kka@UwmUkwJk±k@L@ÝWUwVÝxÇU¯ÇX@mÅ@@yĉ£VmUwȗ»ÇUnlUnWU¯`Uk@@x@bÇxX¼VV¯LĀkÝL¯@VĀ¯lnĊW¦kVÇôkUÇUK@ţU@aóÜUU»@¦k@VxKVbn@Æl@xbWnlUlxÈlVÈ°Æ@¼@xWxŎVK°¥nÆkŎ@ÈÑmK@¥k@ô@nôV"],encodeOffsets:[[115707,25527]]}},{type:"Feature",id:"4402",properties:{name:"韶关市",cp:[113.7964,24.7028],childNum:8},geometry:{type:"Polygon",coordinates:["@@WXk±Ñ@UwmUwĉwlmn@Æwn£mkI¥ÇÅ@¥aón£nWWw£V`Þ@nVml@xô¼IV¥kUmkamUkVWwÛ»mó£UVÅKmn@x@kbmm¯aXkaVĉaUbݲlIlxnVVx@lb@l²°bV¼lW¦bUlwk@mVVbUxó@kX¯lókVkwVmankwJÅȦÇVUbU°blĀ°kÈ@x¦ÆÜ°@°¦óaVUôlUlbXl@nÜVnKlnIVÞ°W°U@bnm@¥IV²Ul°VnalzXyl_Vyƒ¦lLlx@ÞbKmknVWanwÑVwČº@n_ÞVaVÜIl@KÈVJ@a£È@@kmaV¯W@_a¯KmbkÇkLmw@Å¥"],encodeOffsets:[[117147,25549]]}},{type:"Feature",id:"4408",properties:{name:"湛江市",cp:[110.3577,20.9894],childNum:6},geometry:{type:"Polygon",coordinates:["@@@kX@aUUċlkJk@wVJXUWk°W@nKnwlUl²blU@lIl@XbWxnm@lW@wwUJX¯VU°`ŎóˋkÝÝkÅ@ÇmğÈřmwaĵVxUÛ»°ĠǷnýmóX¥ɅĵҏÇ@°²ĊUĖ±ĮU¤Ç°Ā¯ɐnżUĊĊĬV@è@ÔÒU¼l¤nĠbêVĠ°ÈyzVaVnUÆLabVlwÆ@"],encodeOffsets:[[113040,22416]]}},{type:"Feature",id:"4414",properties:{name:"梅州市",cp:[116.1255,24.1534],childNum:8},geometry:{type:"Polygon",coordinates:["@@nÔlW¼x¦@lVllLkèa@z¤Ė¼UxlnUKUbÝlU¼lb@VxVklJÈwV¯@ĠlÛĖnbkÆźÞUÈôklmL¥LWnKUkVa°Vx@IVV@x°bUkaa@mV@@ywLÑUwVUVUbÞVVann@XwÇÿ¯²aVamkXaÆ»@»nw@¥UXakbWa¯KUw@¥m@kwmLU»UUJ@kmU@UUWU@yanwmçÛl¯¯UmKUmwVkmÝXbW@XWÝbk¯@±w@»U@W¯Å@Ç¥UU@IUakJĀê°þXkam@_J°m@X"],encodeOffsets:[[118125,24419]]}},{type:"Feature",id:"4416",properties:{name:"河源市",cp:[114.917,23.9722],childNum:6},geometry:{type:"Polygon",coordinates:["@@°VlmX¹laĢÒlm@V£@¦Ģklynn¼lW°zW°VbÈV@lÆbnnJkXVÆaÅW@UUw@kaV»ÞkVaVLkmVw»ĕ£@yblçkKkU@k¥wX»kmÓ@Wn¯I`@nlbWý¯éÿlI@XUmWUw@@UJUÇmKUV@xţk¯¯LWnUxK@ű»Vwa¯@¤WX@Û¦@¤ÇIȼWxX@WxwUnVbÅèmVa±²UWl@klȤnôܼXxlUnVlbVnlU¦Jó»@wnkmUÝ@U_¤XxmXm¤ôb@¦ÈƦlJn"],encodeOffsets:[[117057,25167]]}},{type:"Feature",id:"4412",properties:{name:"肇庆市",cp:[112.1265,23.5822],childNum:7},geometry:{type:"Polygon",coordinates:["@@l@¥@V¼VôÛ@bV@ŤVLÈlVÈólUX¥mĉ°kÿU°@ÞKlÿ°KUUW»Èw@aw@@nm@w£kÓVUVnKk¥£Vam@nkKkbÆǫmakmLU¥UmÛwmVUmUJÇaUxÇIn`mb@Þ¯b@nJ@nlUVlVULW¯Û`Ç_¯`m¯IbĉWċzx±Jx¯ÆU_k@J@UmbXôlLn¦@¼ĊxlUXxUbLĠUnVĊwlUb@lWXm²@ÞWxXUnb"],encodeOffsets:[[114627,24818]]}},{type:"Feature",id:"4413",properties:{name:"惠州市",cp:[114.6204,23.1647],childNum:4},geometry:{type:"Polygon",coordinates:["@@lbW°bnnla@@wnmÆLVUkÇl@XkV²±bnUÆçUaVmxXw@WXwÇ»ÈJ@£Ü¥@XW@£°bUx²¼@ÆLVwmX°K°Ťl@wVUnLÈVVIky±wkKU¯ÅkXġÑÛlwUwlm@mnKWaÅm¯óÇmğb¯alĉUwķbmb@lÞÒVnmĀŹ@VbVUnmakLm`@xĉkklVÔVJVnlVUnmJmaLUblzmkLaō@@zV¦UV²kJnÜU@VXUL@lJL@bݤUnVb@xVnlK²Vx°VxlIlkVl²k¤@n"],encodeOffsets:[[116776,24492]]}},{type:"Feature",id:"4409",properties:{name:"茂名市",cp:[111.0059,22.0221],childNum:5},geometry:{type:"Polygon",coordinates:["@@LnÇlkKnkÆLUmÈxlUJló°n@ana@@X_@mÝóóU@aaU¯mL¯kV¯ÇVwkw@V±Ŏ£@@alw±Vk@mÅm¯ÿÅƧIÇ`ōô¯_UVW°IVx@xkX@mnwXWa@kkJ@kVa±kkVmxmL@¯XXlWVUI@xlIklVČV@blW@@nUxVblVxkôlxnynIƻưaXwlKbVnXbL¤kLèVV¼²IlĠVXynz°KVx°@VlLlblK"],encodeOffsets:[[113761,23237]]}},{type:"Feature",id:"4407",properties:{name:"江门市",cp:[112.6318,22.1484],childNum:5},geometry:{type:"Polygon",coordinates:["@@lUXx°JWnnÆXVWX@ºVLV¯nUVnbôxaXmWXIUb°xlKl¯KxXÞ°XÈ¥Ü@ĉÞUç»nóVmax¯UÅU¥Ý¯@ç@ș@çĉÅUmUç±ĉKÝxÝ_ÅJk¯»ó¯nmèkǀWx¼mnUÜġ°@¦@xLkÇaVnUxVVlnIlbnÆÆKX¦"],encodeOffsets:[[114852,22928]]}},{type:"Feature",id:"4417",properties:{name:"阳江市",cp:[111.8298,22.0715],childNum:4},geometry:{type:"Polygon",coordinates:["@@°nKV°b@bôVÞô@nVlÒôÆUnlnn@lmkmVkaÈkÆÆk¥ÅÞ»ÆKXkW¥ÅLmÅkamJUkUVwUmÈblKw@@¥Ģ¯VÛnm»Xwlƿ@kbWaʵ@óLl¯ƽ@Ln°Æ@nUl²kxb@@ō¤U²@lxUxÈU°l"],encodeOffsets:[[114053,22782]]}},{type:"Feature",id:"4453",properties:{name:"云浮市",cp:[111.7859,22.8516],childNum:5},geometry:{type:"Polygon",coordinates:["@@@VIl@`V°Åw²IwČyĊXa°Jn°_È`Ü_°XKVkUUVk@mmI@°a@Ýnam_ÈJVwlĉX@lUómaUmVU°UK¹@WXUWmÅXm¯IWwkVWlÅLݼÆl¦ÅÅÇlbUllnknm@kmVmóÅkÑUW`@@bmb@¯mkôIkVÇwnVÅKmlLklmÈKVĊK°²`n¤nUbWlxVxLUx@°nXm`VklVxmnnx"],encodeOffsets:[[114053,23873]]}},{type:"Feature",id:"4401",properties:{name:"广州市",cp:[113.5107,23.2196],childNum:13},geometry:{type:"Polygon",coordinates:["@@Ș¼VxUnĊ¤@z@Æ@nÈW°ÈVwUÞVxÞX@Kl@ÞVaĊbU@ml£k±lUkkJw¯UUw±kLUm@waUVmÞ£@aKkI@KVUW@ÛVmlIU±VU¥@yğzƧÇƽĠřÅnī±m@²¯l°@nÝÆóUll@XnÝVU¦mVV°V¼Jnb@°mbn@²¯¯wVw@@nmxX¤¯L@VLUm@@l"],encodeOffsets:[[115673,24019]]}},{type:"Feature",id:"4415",properties:{name:"汕尾市",cp:[115.5762,23.0438],childNum:4},geometry:{type:"Polygon",coordinates:["@@@@VxnXWV@bVJV@ÞÅU¥Ċx£UWUwÅUU¥WVUkĊÇnkV`°LVwnU@lbĊ¯Vnal@@çkUÝ¥ġaó¯ÅaÅLŻÆUýmy¯ó@ĉÆóȯwÆXbmL@nknVxkxÜĢÒWÆlV°Ll²xlz"],encodeOffsets:[[118193,23806]]}},{type:"Feature",id:"4452",properties:{name:"揭阳市",cp:[116.1255,23.313],childNum:5},geometry:{type:"Polygon",coordinates:["@@VȦÆ@X°V@@¼x²°@lÞaWXX@aÞWlnUxVnnL°V@kmĢl@ak@mlk°aX±nwm±²¯JV²@wW_maV»U@m¯ĉUÑJlabVnlĸLlƅÛDZwÝ@ĉxó@è@kmbUĉ°ka@mVxU¯KU_mlĉÈVlXUV¦ÆVxVVX¤ĉwV¦ÝÆ"],encodeOffsets:[[118384,24036]]}},{type:"Feature",id:"4404",properties:{name:"珠海市",cp:[113.7305,22.1155],childNum:1},geometry:{type:"Polygon",coordinates:["@@è@Þ°V¦VÆ°wnbUÆ»nçÆ@nxܤ²llU°VnÈJÞ°UôéķUklô£VVˌKÞV°£n¥£ȗÝy¯¯mÅkw¯bÇĔğ@Ýn¯ĊVğōŁŻķJ@Ț","@@X¯kmèVbnJ"],encodeOffsets:[[115774,22602],[116325,22697]]}},{type:"Feature",id:"4406",properties:{name:"佛山市",cp:[112.8955,23.1097],childNum:1},geometry:{type:"Polygon",coordinates:["@@ÈbInVVnUÜxnVV¦nKlnbÅǬlalL@mnUb¤l¦LUmUVlÔ¤@xmnVl°_XVVmkVmÈ@kn@VUK@°KW£nw@m@Ux°x°@±mna@¯amIU»U¯nUV¥ÞUWmk@Vk¯UknÑWÝĊÛ@ǦW¯WÝwLk°kL¯wVaWJXWnbwkVW@kĊ"],encodeOffsets:[[115088,23316]]}},{type:"Feature",id:"4451",properties:{name:"潮州市",cp:[116.7847,23.8293],childNum:3},geometry:{type:"Polygon",coordinates:["@@°Üknèmxbz@VVX@VnV@lIVVV¼nKlxn@@¦Vx°LXblaWbV°£¯W@nW@aUñVwW»@¥ŤÅUÝǓÝóV@ńÇkUVmIUwÅVWÇX¹@W¯bkl@nlb@kġn@l"],encodeOffsets:[[119161,24306]]}},{type:"Feature",id:"4405",properties:{name:"汕头市",cp:[117.1692,23.3405],childNum:2},geometry:{type:"Polygon",coordinates:["@@@U±°I±n²mx²@WºXÈÆUVxJUnlVÈ@ŃôUǔÞVçn»VyĢÛVm@»kaÝUǼóÛÈķKċ¥X¥Wwğk¯@wķKkUmabkIVÒ°Ċ@nVU¼bn`Xx"],encodeOffsets:[[119251,24059]]}},{type:"Feature",id:"4403",properties:{name:"深圳市",cp:[114.5435,22.5439],childNum:1},geometry:{type:"Polygon",coordinates:["@@ÞL@xbVVK°X°Kô¥Vw@anUèlkĊl@wn_lKnbVmUaUź@nÿUmÝѯUbk@ÆkxŻ@aÇXwJ¯LķÝUĕóĸóêWº@b²nmĬÆ"],encodeOffsets:[[116404,23265]]}},{type:"Feature",id:"4419",properties:{name:"东莞市",cp:[113.8953,22.901],childNum:1},geometry:{type:"Polygon",coordinates:["@@Ŏ@blKnykVaKnbnIVmUkUmUIUÓçmV@bUxó¦¯LW¯LUUa@wÝKğŚƾƨÈĠy"],encodeOffsets:[[116573,23670]]}},{type:"Feature",id:"4420",properties:{name:"中山市",cp:[113.4229,22.478],childNum:1},geometry:{type:"Polygon",coordinates:["@@XÒlmV°ôÞÅ@m¯°k±@@aX¹¯VÝÇIUmV¯kk±Û£mw@Åmèżmô¼èV"],encodeOffsets:[[115887,23209]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/guang_xi_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4510",properties:{name:"百色市",cp:[106.6003,23.9227],childNum:12},geometry:{type:"Polygon",coordinates:["@@lklWXL@VIl@XnJn@VUUalk@mK@kny@UlU@a°UU@VmaU@Ua@UWw@n@KmLm@alkmnIm@an@VIUamWÅImwU@@a@KX@JVLUVmUaVkUa@m@@Ulmkk°UaVUlKXbVwVIkaVmUk@KVk@aaW¯m@w¥laX@KmakVmnUl@nxVKInU@yVaVIV@na°KlxX@@_lmXUV`VIVV@n@lbn@@WUkValK@²yl@VUV@@K°L@KU@@UVaXIVVV@naVkVa@K@UUK@UUaLWaw@m@K@UVV@mVUUVKnLmVLKbVK@UUIkmI@mUIVK@IUK@VkL@WU@mU@WmUk@I@VJk@WwX_@amK@UUWkIK@LVb@mVmakL@J@bU@Ux@xbmI@`Iwm@UbmKUaUWa¯UkJWV@XJUU¯LUmV@ma@kkamKwLUUmWVkkm@aVUUkVKnVVUmXK@UW@km@Ukkm@@W@UkUy@I@aUUmb¤U@kUmL@bmJU@Ua@wkLWWkL@U@VaU@LUakKWbkUWVkKkLVLUV@JVbz@V@VmUU@kVmK¯@VU_VWakVmIUKUaU@@bml@XU@@V@LmKUVmVUKKbkaUXKUL@x@V@l@mxU¦V@lL@V@Ln@@VV@nlKUaV@nLUbmJnL@VWLkbmV@@LWXLlxVVIVV@x@V²blUVmLVUK@kWWXUlV@Xl`LXl@@Vn@VnbV@lVUVUÈVb@@`UXU`l@@XUVm@k@xmVknUJVXUbmKULmbx@VlJ@LVbkKUbVLÇUUVUVmU@VaUkUKVUwmLkUUVVlbkaXmwKUVVU@@V±Uk@VWUUm»XamUbKk`U@UnWW_kKmbUVUVmnUV@nJVUlUbU@UV@n@JmI@VmbnVUXlx¯kKmnVV@L@VbkVUmm@Ub¯LmlUL@VWLkmkLmmn£WmnKU_mWbnbmx@U¦UJU@Xmlk¦@mnUUm@@Jn@lVÔVJnIVWI@aÆK@I@aVKIlÞnnl@nl`nbÆX²l@xV@llbVn²VVl@nnV@IlW@Un@@kVa°KnÈmVaVXUlaVÈUVlwôUlynIVaan@lVXbI@n¥la@K_n@bÆx@XnJVnKVz@`VXVU`@b¦UV@VIlxUnVKXÈbVllbVbnVn@"],encodeOffsets:[[109126,25684]]}},{type:"Feature",id:"4512",properties:{name:"河池市",cp:[107.8638,24.5819],childNum:11},geometry:{type:"Polygon",coordinates:["@@lLVlbVV@nXVlI@JVXmnW°bIVV@ln@nalVUbnW@kVkÒlbVKn²°bUlV²@X@`nbaUI@°wlU@aXJVI@aVK@wUamIXm@XUV@@bV@VmImnUUwVaVKXUnVK@akVwV@nL@UV`n@@XlnIUJl@X¦V@aUIVm@anV@UwnL@VlbVL@KVVXUWwUUVUka@UVJnUlbnalbVVn@°LV`Þ@XVxV@@bVlUVVbXnWlXnml@XXWVXJmbUI@VllUVkn@@VWV@Vnb@VXUJVnn`lLVka»lVLnw@WV@lInw@WnU@U@mknUVóKwUmUXUU@@wVJVIl@XKVVVbVIJ@Un@lVLnmb@U@Ul@nU°VUVJnnVJV@@mVU@@wkUVwkKWkyUUkU@alkÈ@lJ@xIl@UUWVkUw@Kn@@kmaVUlUULÇUUKl@UUmL@aXU@mlUUwmKkUUVKVUaKUnK@U@Vl@XUWUKlwX@b@K@XkV@UwWJka@aUwmV@U@@U@wUm@»kLWVkIWXnmV@VkbmKLUbkVa@aa@@aVU@aVak£@±UkVU¯VUUJVUI@kxmUmWUbLw@K@aU@@aVU@Kma@aka@_VWkk@UWVUKULWKULU@KUnwVaUKxU@UmaLm@kVmVa@UkmI@@KmIkxU@@KU@mmakI@VLkmWkkJ_U@V@L@nxXbKVb@VVL@V@LUbUlmbU@UUWJUb@VV@@L¯K@LU@UVk@±z@kLUbVl@Xm@akm@U@UUJU_VWkn@`W@kw¯LmbU@UJUb@zmVJULmwk@mVUnlnb@LWkb¦@x°nXb@bUl@LVlUnlbUJUxWakLUVVb¯llkn@V@@nVbUlVbUnVUK@IW@L@bV@nxÆJnXVbUJm@@bnmJnkl@bnnK@Lm@Xx@VVbV@nb@UVV¯@bkV@Vmz@lnLl@kVbUVm@mI@WkJ@UWKkXkl"],encodeOffsets:[[109126,25684]]}},{type:"Feature",id:"4503",properties:{name:"桂林市",cp:[110.5554,25.318],childNum:13},geometry:{type:"Polygon",coordinates:["@@nU@JX@`XLm¦Vb`lVXXW@VblČnVlanLnmVLK@_Va¥@kUa@VmVbaV@XVVzlVVK@knKVmX£VKLlbn@b@llL@xĊôXaV@°È@¤bnV@@Wl_VU@WnVamwwVbn@KVLX@VmVUxlV@nVV_nK@mI@Wn@@IUĊ@@wVWX@@I°VVm@wmU@m@IUVklkUmmkÅV@@aV@@Wn_UKla@kaVlVanb@k@@KlVn@@aV@nIWWUUaVU@kKmwU@UImKk@UU@w@W@k@UkW@mk_W@Ua@a@¯mV£@mUUam@kWakVama@UUm@nw@alaUmnUlVlIVLVyk£Vm@k@UUJkK@kmKUwKkWK@UXImyVwnI@mkUlkUKkUVmw@kkJWUÈm@_k@@aaW@UUJUwU@@IWKkmUUV@nVl@bVb@bUUXakw@WUkbkKbm@xUlkLm@@wmKUX@UaVWXVmU@@UUUxkmWXkKkUWaUaUbL@`UL@LV`UXmK@VmakLVbkLxUJUIVbUVVb¯KV@Xnl@lVXbmÒnV@L@VWKkVUIWJkIUamUUbm@UkU@JUbW@XWxUam@kbVVUnUJmUUV@bU@UUV@Vk@bmULV¦U@VU`VLUL@xVbn@UJ@nWJXXVVV@bkxVbUxL@x¦@UlXUVVlULV@@nUb@xlnJVnlVknUlVUbmU@bVx"],encodeOffsets:[[112399,26500]]}},{type:"Feature",id:"4501",properties:{name:"南宁市",cp:[108.479,23.1152],childNum:7},geometry:{type:"Polygon",coordinates:["@@lKnbnU@Ua@KLlJVX@VnL@bW`Xxl@I@UJl@nV@XV@nXV@lK@UVL@JULVJ@nnJlVJ@VULaLUKnmKULVVU@nU`lIXllnK@UlJnb@nV@LV@lwnJ@L@nJl@VUbUn@lnKnbVV@wVLUbxVm@LVVKXLVKVLXU@VllUX@`lb@bnbL@UV@bV@@b@LxKVanXVUUmVUUUaVUkyUUaImK@mUUVUkKU_@W@UVVVIUWUVaVU@UUKn@k@al@ll@bnL@bVUVX@V@@bKnblmn@V_@aUalL@a@akK@kVKUKlwUUnV¥VmU_VWVIVaX@VaalÅK@LVJnalL@LnKwlVUwmX@VXlLUVnblaUmVUVwXU@Wm¯Va@ÞKnw@wmk»UVW²a@_mW@U@IyLVUUKW@@LX@VUV@@yVU@UV@nwUUmJka@IU@mVkaW@UwUX@`@kLWUk@mkUUm@kUUWkUkWxk@@VK@nV@UVaUUJmIkV@UamLUbkVmamLka@kmL¯WI@wJmwx@akU@aUKmbkaW_nW@_U@Wm@a@wkwUKmk@bkbw@mKUkkU@J@bW@kVWz@bVUaVUx@ULkJWbXVVX`@mJUVU@@Lk@WbU@UJlnXlmVx@Ln@b@KLXWJUUW@kaUVUbmV@nnV@n@lVLVmLXmXkV±@kxÅLUbJWIÅJ@ImXalkUamKkkL±aVwKUU@mÞnbWJXm@lbmKULWUUVkabnn@Vl@VVV@VbVbnLWLXJWxXLV@@VV"],encodeOffsets:[[109958,23806]]}},{type:"Feature",id:"4502",properties:{name:"柳州市",cp:[109.3799,24.9774],childNum:7},geometry:{type:"Polygon",coordinates:["@@wUaV@nVaUVklmkUUmmIk@waVm@U@VKUkVUkWV@¥@wKVwUalw@aUUUWWXI@mVIm@Ua@wVKUKV_UV@U¥VKnal@U@VU@VV@aVUnVVIVmUUlan@VbXwWX@Va@IlVVn@VanVVblJXIVJlUXL@U@KmUnÑWakU@mkJUI@mk@wUmmUV@JXaWIXWmaUIJkk@WnJ@aUak@kkJ@kUKU_@myUóWUkm¥kUmL@KUKm@k_UmVa@k@@UmU@mm_JWIUVUWLUlbVUJÇVUIVwKUVk@mU@n@lUL@Km@@l@LVzJmUU¤m@UbV²U`U@@¼Vn@x@V@@VnUVx@blbXIVxU@Wl@@LaW@kxLXVWVk@@U@VmLVLbUVULVVlnLVxkV@nWV@bnKVVk@VLVÈVKVVkUnb@lm@@LVxUlVX@VkJ@wkIÇ@kl@blVVVzXllLUxlV@x@UV@nU@UImmUIUV¯mVk@@V@VamnUKkm@@VIUJUaUUWLk@UJUI@xV@VVWVnxLUômVV@VkVVVUnV@UVkL@VVV@bVxla@bkXVJVn`nU@bb@bVL@VnJ@l@VaU@@_lW@UUU@Unlll@XLl@@UX@°bVWVanLlknVV@VVX@VVnUVLmbXJ@nllXX@`VXlmaXVWk@WkwJ@VL@JbnU@bn@@bVKUnVJVIVVVL²a@bV@@Vl@nUVakalmUL@VUL@Va@mXl@nK@UlKL@Vl@@nkllb@Vnn@nVV°lVInwlKXxlU°n@@I@UnVlakUJWkUK@anUWK@_ÞJ@U"],encodeOffsets:[[112399,26500]]}},{type:"Feature",id:"4514",properties:{name:"崇左市",cp:[107.3364,22.4725],childNum:7},geometry:{type:"Polygon",coordinates:["@@@JVzl@V@Xn@ll@VlnX@@VWLnUVmUULVlUV@blnUlnXVVKxnLlb@lnbU@Vn°KVVI@WXUlI°VXbVVbnLVan@xJ@_nJa@wVwV@@a@IU@UU@WKXwWIXKmKUaa@UUUUk@@UmmalbVUXVVKnLa@knWXImanÝV@VLUx²blKlnLVbklWbn@JÆIXJIVaÆKlw²@lUnWWnKUUK@k@mmU@mnUVaVUb@lVXVXIWK@Lam@@KUwnWkkmVIV@Xal@@KV@VUnI@_UWWUkam@kkm@ka@mk@wkJWIUU@WXkWXkWWLUU@UakLWXV±VIVWUU@anUWaUK@IU@Vak@@UUKWa@m@ak@@wUkla@mUaUklakwV¯¯@WWUkLkKmakLUnV`UxWX@Jkn@bmlakkk@b@l¯bmbJb@VXnbVV@bJUkkKWVU@mÛVUUW@UVUJWXkVkKmUL@WW@UVl@XXKWXJ@XVlmbUxnnm@UlVnV@XVm¦VJb@mLkKÇbXblVkn@l@bWnX`V@@IVV@VV°n@@_naÆVVbUVVbUJnzlVUlXkV@Vlx@XVnxbKUK@b¯VVUVL"],encodeOffsets:[[109227,23440]]}},{type:"Feature",id:"4513",properties:{name:"来宾市",cp:[109.7095,23.8403],childNum:6},geometry:{type:"Polygon",coordinates:["@@nVlw@VJUIVVUV°lU²V@l¤Ub@bUV@b@b@bUblVaKnLla@UnUWmXlJXUlKV@V_U±Van@V£nVIyU@K@kn@@LVK@k@mnVl@VULUxVJÈUVIUaVkXKVVUXJIn`@nnV@Vl@@UbVnl`n@VL@LnKlVn¦VlôXVnz@V`VL@llIll@Vbb@mIXl@lIVJnbWXXJWb@IUnVVn@xl@nVJI@WU°LUaVUUaVJVIwlKUalKnb@UnLVWU_@KVK@_KVa@VKU¯VLVKn@laaUkU@maVUJ@k@Um@XmbkyVaUIUU@KV@laVn@KXKWUkUk@aWUUVw@aXKmVaUUkmIlUU@wUaxUmmU¯U@WLUmVIUym@UVmUa@wmw@çm@aWLUJUIUamKmL@ax¯¥kU¥U@±kUVmKU_mJUbkKmLÅÇ_@WWUXUmaVUkKUWW@nVxkUxmL@KkKmbUI@KLkÆbUbW@UbUJUXV`UnU¦mVVkxVLUL@llL@b@bkKVb@bU`m@knmaL@a@@UWVUU@amK@akkk@@b@lmVL@VUVUbVVXUJUU@V@XV`lLUVVV@nnLJVbVlzUVVbVVnUVVU"],encodeOffsets:[[111083,24599]]}},{type:"Feature",id:"4509",properties:{name:"玉林市",cp:[110.2148,22.3792],childNum:6},geometry:{type:"Polygon",coordinates:["@@VJUXVVXlWX@VxVnX@@`ULWUXÅbWK@mULUUmJ@n¯b@l@VULVxxXU`VXXJVIV@nm`@nUVXn@lWVn@b@Jn@nU@Lm`@Xn@WJ¦U@@VnLlV@@Xl`nIlJnkVLw@KVK@UaVL@bVKXlUUKVK@IVLa@U@WLUlVL@bU@@blb@VlbUxVbXUVJ@xVLUlV@VUbVLnKlXJ@Lb@an@VanL@`VLKV_UWl@U_a@WVInlVUUUVm@I@W@wVakIWm@U@XwlaVbnI@m»Va@aXaVLU»@aVa@kKkL@KmU@WzUK@wU@VWUUVUUKUa@mKmbUK@_nWVaUkVaUaVUVLXKVVUVmVI@UkKkLm`UkW@UwWW_UaU@WakXmK@xUXJkUUWUk@WlmJ@km@@aUKzmyVka@kkWVUU¯lmU@@wkkmV@Vk@mÅIUka@Ub@m@UUU`mUbWaWmbXXKWIXUWm@Å@y@UkIUJUUWLUWL@UkVUxW@kaWbKWnXxW¦nm`XLVlUbVbUxI@JmLUKUb@VW@@bkL@b@VlU@xk@L@lxXxWXX°V@VVVbUVV@UVVbULVnVJUb²baUb@VVVVInlV@VnXaVUlIVUb"],encodeOffsets:[[112478,22872]]}},{type:"Feature",id:"4504",properties:{name:"梧州市",cp:[110.9949,23.5052],childNum:6},geometry:{type:"Polygon",coordinates:["@@VbXblVlLXWlnwVV@VV@UnWUXVb@VWXa@kVKUaVaVkUlyX@VaVmUwUaVU@UÈymI@aU°@nWV@VaVaw@IV@VmnLVK@kmmna@VbVI@aV@XbW`ULUVVx@VbUV@bl@VLXblJn¦lL°°@n@K@UlLnKa°LWbnJ¦UÒVUllLlVnKnbWnnV`w@@Xa±nl@XKV_WVkVa@kVyUa@wU£UW@UIVW@@awWaX_WKkVmUULmak@UJUI@±m»k@m»VyUImnmmwnkUmVaVIUn_mW@»Vk@VwkmmUXa@IaVmm@Wm_U@mIUWóLmUk@laXmmkUK@UmKULUUmWUL@VakU@Ub@b¼VUKWb@bUbn¼@mJUakbWx@@VXnlJUb@x@X@JUnVVUVmkUJ@XbV`k@VXU`LUK@_mKUbm@@b@U`@nlV@bUnbVbn@@`VbUbVV¯bm@@mJXb@bVnUllVXUlbUl@LU¦VVmkLVb@bl@V@XlK@V@nUJUz°mwmLmlXbWVU@UUUlIU@VVmV@@¦bXbWxXWlXVWL@LUmkbU@@LVVVJUblzna@WVn@@lIUVnbV@Vlbkbm@ULUKV°UL@"],encodeOffsets:[[112973,24863]]}},{type:"Feature",id:"4511",properties:{name:"贺州市",cp:[111.3135,24.4006],childNum:4},geometry:{type:"Polygon",coordinates:["@@nL@xn@lKVkwn@alLlaXV@lxbVWV@aUa@aUk@mVUnVlXL@JV@VxVIVX@b@bl@@`ÇnXVlI@lxUnlVVLkllV@nmJUxnzWJ@VXLlLVxnL@lLlVI@V@lUnl¤UzK@Vl@LlLnb@VnVVU@kaKnxn@VkVJ@ÅUlakmWIUaVanm@_UK@UVWUa@klXamU@VmVIXW@lUVknVlKVLXVXW@b@VlnnVL@KXLKn@lb@UnW°@VaXWVb°aVa@I¯aUkUaVKVwaXk@aa@wkm@alanUVw@alK@Umkw@UaUmU@WXUaUK@UW@UaVWI@¥Xa@w@WWVXwU@mKUXUWVU@a¯kl@akU@UULmK¯VUVW@U_m`U@@xVbUz@lUbUlXU`WLk@m²Wb@@xU_mXmmamLkUkKVkUVÑ¥mIXa¯KbmLkK@V@Lm¯@¯kKm¥kIWaUKk@@aVUUa@UwVUKVX_WaU@@bUJUa@mbnn@lULmKUnU@@JxUbUbU@mX¯@V@bnJÇz@VUVVbVxUnUbW@kzVUlUbVbUL@lWb"],encodeOffsets:[[113220,24947]]}},{type:"Feature",id:"4507",properties:{name:"钦州市",cp:[109.0283,22.0935],childNum:3},geometry:{type:"Polygon",coordinates:["@@@IlVVlnL@xlaal@nVLlx@x@bXnV@@`mXX`lbnaVL@blV@bwnxI@xXJ°nKl@lbnKnblUVanKVb@lUnJVIVUb@VU@mL@Ul@XwllVVXV@lVnlVnl@XVlK@@_VWVxX@lbUnV@@JlbnIlmnVV@UwVK@U@k°a@mnIVVVK@nXLÆaVWXVK@_W@Umw@UXWWkUUVWUIVaUkJUVWbUmU@mkUJUU@UVab±aVaUIUmVKUaVUU@VUUaUUU@W¯XWWww@k@Kl@wkV@U@alK@aX@@UmIUWUI@mmkXU`U_WJUnUJmUk@@amLU@UVW@UkU@@VbUWVUk@@wmKkUWLUWX@JmIlUkkKWKkLWU@UKWa@bU@@a@_UKWUUUmJmw@nV_@ġğKóLmbU¼VÆ@xUX@Um@wklVnUnlkaUV@lV²WVklWXXbWlkVkIm`UULUU@UWx@XU@@lWLU@kbUbV`UXllUV@bmb@LnKVbULmnVVIV`X@"],encodeOffsets:[[110881,22742]]}},{type:"Feature",id:"4508",properties:{name:"贵港市",cp:[109.9402,23.3459],childNum:3},geometry:{type:"Polygon",coordinates:["@@n@VzUJnVK@XV°nVVnwVb@xVVknJlVVUbnWL@bUxVVXbl@lVXkWXwWaa@¥@nUUUV@JVkVVV@XUWanknKxn¯VyVI@m@UkL@W@Uk@aUalKnUUV¥@KVkkaWVkUVkUm@aWanI@n@°aUUVaUa@_m@UamaV@akU@mV_@a@KWIkmLUKaUVU@kVUK@wUIWVUaVwka@Uka@aV@@aUKVkK@X@VbKU@JULVLkVWUL@aUKb@VUL@LxUKmlkImJk_@WU@kmK@UV@¥XIm@@Wn_@KmVm@@I@aUmkXm@UWV@mn_@mUUJWIUWV_WwU@mUknVVmxU@@VUV@zU@UVW@K@X@VLUVKz@J@VnX@`±bUXV¼ln@xmxÝL@Ubn°@XWVUxUVVnkbWVXV@X`ÆÈKnlLVanIV`nLVUl²V@V¦l°¦wb@nKnLVbVJIVXK@bn@ènx@xVbUnV"],encodeOffsets:[[112568,24255]]}},{type:"Feature",id:"4506",properties:{name:"防城港市",cp:[108.0505,21.9287],childNum:3},geometry:{type:"Polygon",coordinates:["@@XV@X°°UlxkbVlVb@nkbVl@xl@@b@nXbVL@Vl@UbV@@JVLXbmV@bVVUXUJU²WXlKVb@VVXKlXWlXXWV@VXJlI@xl@nlbn@lln@lbXalIVK@VwUVbU@aXylUX@@aW@U_UJmUnVKUamL@Kna@aVUkkVWU_ValaV@XK@kV@@WwVXV@VKVVn_lJlUXkWaXWlkXU±kU@VUlbkVmUmlk¯ÝW@mb@¦VxULmkJUU@ma¯wmkX@VóJ±bUVUXÝWklWXXlxUabIğÇ@U@mVUKkkm@UJm@XnWV@x"],encodeOffsets:[[110070,22174]]}},{type:"Feature",id:"4505",properties:{name:"北海市",cp:[109.314,21.6211],childNum:2},geometry:{type:"Polygon",coordinates:["@@VaVLnK@IJVwUaVaUkWKn_mX¥WwXmLXalbU£UyVÅ@Ýwm@°lLÅUmkmwÛaƑLÝUUm@ȣÆV_Ó@£UUV¼U°W̄ÞVbXbôx@b@bmV@ÇUÝ@@ĢU`m@nxnIVVVXVL@`@bV@@aXbVL@XVlKXLlLVlknJ@IWVXXKlVnL@xl@UVVXa@UV@VlX@VUV@nK@bl@nVVIVmXIV`V_lWnn@VJVXnJ"],encodeOffsets:[[112242,22444]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/gui_zhou_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5203",properties:{name:"遵义市",cp:[106.908,28.1744],childNum:14},geometry:{type:"MultiPolygon",coordinates:[["@@@UnUlJnwJU°VL@bnVUwlJ@XXVlU@klVUJknlUllL@bUJ@xULUlUblVkblbnwUXmla@wV@VK@L@UXaVKVLXWUVa@U@Im@@W@£UKUakKWIXU@al@@llUnL@W@Un@@VlUV@VIUanKl@Xb@lmxVb@b°bb@nlJVVnnJ@b@LV@ln@LmV@Vx@blnVKnlJXIlwJ@Òb@nlK@Un@UL@VVVVUUUVKl@VUVLJ@UVUUw@Wm@UVÈVlbUb@JLlX@@xLmk@@nlx@bUJUzVJ@@LVxUV@bWxnLnVVK@_K²xVbV@n¥@aVI@b@l@VaKnb@n`nmmýW@U_wV@VlVV@Vn@n@nI@Jn@°¦VaUU@mVVWVaUÅU@aVKnVbVUmmU@a@kUwm@aUUmUUJ¯lakUaXaWUUaVkkamkmUnVlULVlJ@XU@UJWUUwk@aU@WbkWL@U@WU@@XUKmV@aUVwUĕUJUamUUVUÑmnIVJ@kl@XalJVn@KVL¥@UWIXWmU@mVUKnUWLUKUaWUUKVU@U@anUny@UlUkK@w@a@aVU»UkVw@WmkJÅmUUVmwXalLXWWUnam@XkJ@UVU@U@W@@U@I@Wl@Ènlw@KXLWblVUkalKUUVVaV@@wnIlaUmkUKWU@KkUkLWaKUUWUn@VK@LnnWJUIVkUWVnV@V@@XK@VUIUJ@IWJkX@VVJIVkK@I@UVaUWk@m@wnUWKk@mxk@@lV@bxmb@x@VUmLkUJ@nVV@b@VkLVbU`¯Il@U_UW@UU@K¯wm@xL¯¥kI@bkb@Ua@m@kkW@XVbmV@kV@bWbUbV@¦xXlmVk@¦bkaWL@KUImK@wUK@VUIb@bmK@LÅy@akXW@kbWlXblL@ULUb`@UkUymX¯@mUJUUJL@Lm@@WX@lUVlXll@l@Èk°V°X@VU@UVll@XUJVXUVm@@VXLWlnV@Xk@mVULnxV@@bmkL@VWLUbU@UVm@b@ķ¥UnmJ@UUVkkJUlÔU`UIW@°kLUlUI@WVIU@mWKkXk@WU@bXW@J@xX@l@LVl@xLVxXX@xKnxVknbKVV@ULWlXU`@nUlX@llVXVUKlkUKlI@anKVLXKVaUIVWV_VK@VnLlU»VKVLm"],["@@@KlKkUUVVX"]], +encodeOffsets:[[[108799,29239]],[[110532,27822]]]}},{type:"Feature",id:"5226",properties:{name:"黔东南苗族侗族自治州",cp:[108.4241,26.4166],childNum:17},geometry:{type:"MultiPolygon",coordinates:[["@@VV@XkV@bUbWJU¼Vb@Vnb@b@J@bL@LV@UVlUI@aKULVb@bkJmxlLVxknVJkxnKmnnL@bn`WIXlWLU@UxVbUVmKVXI@JVIVJ@UL@W@@UmUXUlVUVJXImm@KL@UVmVXVLXblKlV@LXVLlVVnkbmJ@xnXl@bXa@VanaÒLmVnIlÞ¦°k@b@@lVnJlUnVX_@lVlKVUUxVLVWVIXJUlnnWlI@KUaUUVKn@VaVXV@na@mw¯@mUkJUamI@lk@@am@@IUmVImUUw@anUVaUU@LU@WaWUXWWwV@VwnU@L@ynbl@@X@aJ@nW@@Vn@lVLlxnIl@@UWKUnIlJXIVllIVV¼XK@aVIV@@bn@VKXLVKVVVInwJ@UWI@mX@WKnI@KmUUVJUL@VKW@@k@aU@@W@InJWUXwWI@W@¯wkaVaUIl@nValIXWWI@UUm@anwWkXWWIUbk@UJmIUamKVUUUVVama¯VkIVVUlKnXVwX@@WVaUUVa@IlaVmknawkUU@U@mUVUVwl°LVbnJVU¯la@mX@@UWKXU@aV_V@@JlkU¯@VnK@km¯kU@WUW@mmU@kmlU@wkL@WUkL@VmLJ@b@V@bknUUVK@UVKUK@Uk@Wa@LUVVnUbmVk@@UU@@aV¯K@U@UU@WmUL@aU@WVw@IxXll@UXK@KXXVJna@wWa£naUKVm@UU@mUmalm@@XkVm@U@VLmWU@kkWxU@@bVV@VkXVlV@UUk@@mI@KUwm@UmVUUwU@lwkV@IUa@mUaVIVKVa@w@U@UJkb@n@bmJ@XmlVUxWXkJmUkUUVWxUlU@aULUmbU@@WXkmL@xUV@nUxÇm@XLWbnlnVnnUVUnVVz@lbUVVlULVb@V@nUJkwm@Ux@bWbUK@UULkaJbUU@U@lUK@XUJmnJ@bU@UwWax@zkJWnUJUUVVV@bXn@xVb@JLm@Xw@`@bkb@VmXUV¯L@mW@@n@V@L@KIW@@aaUx¯@Um@XbW@@LV@bnVWVkKUzlV@bÆa@lnI@VV@@LnVVKUaV_VJVbnU@bn@nX@yVIVxXKVLlUVaXU°J","@@@KlKkUUVVX"],["@@UUVUkUmV@ln@VXVK@K"]],encodeOffsets:[[[110318,27214],[110532,27822]],[[112219,27394]]]}},{type:"Feature",id:"5224",properties:{name:"毕节地区",cp:[105.1611,27.0648],childNum:8},geometry:{type:"Polygon",coordinates:["@@UkV@kW@Xn@@KKVIVVIn°@nWVzl@V_VaVK@kKWaXklaX@lW@bÆz@KnL@aaVJ@UVL@xnLVJ@LXKlba¥l@nUWkw¥U@VaXa@amLkUKm¯kmkIUaKUIWkKm@anw@mlwXImUk¯@a@amU`kkKWVkxmUUak_mJmw@wmXUW¯X_@WnI@aVwkWWýÅU@WLkUaUbVV@lUVVnm@kUmV¯kKLwmVUUaWVaaWw¯wÈ@VULUVUUK@nWJkIl@Umxnbm@kbUJa¯bUbVxmLUVaU@VUUWxkVVV@bUV@XWbnlUbbUJlbUV¯b@z`WbXnmbawUwVWUbUxmbU@Uam@VkVawVaUWI@mUKóz@lUlÅ@WIb@xXxml@XklULWKUmwUa¯KUXWJkaULmKkLWbkKUVImWa@kUaULW¯LK¯@kbL@bx@J@bmnnlUlzU`U@@Ub@mn¦°bUVx@bkVm¼mx@mkmVV@bkxVnaVV@bU@mL@b²`lIVV@lXLlbVxn@@bl@XllIVnbVn°°wlbXw@mVa°lVnU@mVLVbn@@b@@WVnUV@Xlxn`VznJVb@L@bV`V@UnwU@WUXKV@UUlmUUlaXalLmbIVbnJVIlVVaUUnWVXnVLk@nWnblnlb²xxVKVXlVXLVWLlUVJna@wVL¼@JVX@`@nnx@nWJU@Vx@XXKUblxU°LVKVVlL@KnbVUnJIlUnKl£VWxIlJ@nVÞUVVnbVX@V_°lnK","@@@UmWUwkU@Um@@VkL@V@VVkV@nbVa@"],encodeOffsets:[[108552,28412],[107213,27445]]}},{type:"Feature",id:"5227",properties:{name:"黔南布依族苗族自治州",cp:[107.2485,25.8398],childNum:12},geometry:{type:"Polygon",coordinates:["@@V@IöalK@UV@@KUaVIVVLlaVbVWnX@@LnUlxl@naVLXVVaVUJ@lUUanWWI@VlV@Xbb@Vn@VmVVbk@kU@VV@XJ@zn`ULW@kK@_WVUK@LUb@Jlxn@nnWlU@@bx@XVVU@UbVb@n`VI@VVLUlUIUV@KmL@VV@XIV@@lVLVmXV@WLXLW@U`nkb@Vl@UL@VVVLllX@`lIXbJIXWLaVL@XXWĢb@bmK@L@°@VnxmxnK@xVn@VkL@VLakbl`VnnxVnUlV@@VVXV`@k°JV_UalK@U@aUU@mIlVnKV@U@wnaw@akU@l@nwl@XLmV@xnl@VXUb@V@JlLUJUI@UlWUnLVUUaVwV@XKWkXJm_@amKnmmLwlUIlmUwkKnwlI@aUaVKL@bVJkVUU@@KK@a@I@ama@UUaV»XIVa@alU@WUU¯IWVUbkVUKWLUwUJ@zmWm@@amVUaUIU`VbULmU@KU@@UmJ@kÅb@akUVylLXUmU@aU@KX@Wan@V°@Vwb@bX@J@LK@@U@mX@@n°KVUnW@Ula@a@_x@WnK@IUa@wWm@aUUUVVVIXmlI@ywXbVxV@@aInmVI@WVL@k@VVVaIlbVK@VVLXa@aVwn@lxVI@m@UUaVKUkVUka@UymUVVUmmUmmkXaWK@ÈnVw@mVU@wKlnXW@V@naVVKUk@KVIUW@mk@KXU@Um@@lVk@UVJna@UWaL@a@Xa@kmmVUUk@mkkamJImJUUmIm±aUUkambkamVUU@VlbUbVVxXWVUU@VUakU@UmUVU@mnUVVnUbVJ@bUW¥kLVamVkUaWJU_UVWKk@@nlUVVJUXm@Vm@UnVlmbnmJUbULU@@UUKWVIWxnJVb@xUL@bUJWIkxbkb@xVJbmU@kW±LkKUkVa@a¯am¥ULkalÑlKXUWXaVakImV@ka@UUJ¯aXmmbKWU@wUUaUaKmU@UXlWb¼WLUKUb°UlVbkbVL@VJ@nVlUbUXmJ@VX@lbUbU@@bWb@VnLVJ@bVVUzVL@lnL@bVVVULmKUkJkbm@xVb@VkKVnnV@b@WXUnVlVVXVJUXlVXbWV@VU@Ubk@@KWbUUmL@JnXV°XJ@_`UbkXVVlÆkb@VLXVV@V@kKXX@`V@@n"],encodeOffsets:[[108912,26905]]}},{type:"Feature",id:"5222",properties:{name:"铜仁地区",cp:[108.6218,28.0096],childNum:10},geometry:{type:"Polygon",coordinates:["@@°a@aÈbVUlU@aVKnVVVUlyX¹lWVa@UVnUVU@m@mUl@mÞw@xnIVbna@KVIJ@kwV¥UXÇVkVW@kkKWU@aXUWmnIVa°VXbmL@VVbnVVVUbVbJVbVKXkVKVanU@aWnWUWa@Unk@mVIVK@wXxlLXbVJVlKbl@VI@maXalVVVbX@@aalnkx@b@Vb@Vnx@bVVUXn¤WXn@Vl@Vlzn@`@I@KUU@V£namVkXa@aVKnnU@anVlKa@UUU@amk@»kU¯@aVWnkWmkImU@akaVm@»VUV@UKnkW¯XWlkUKnIWa@nmlIXmWUnwUwWm@wULmaUJkIUaaWaklwkwmJmU@bkJ@XUJ¯W@XbWbUKUkWJUUVKnn@UmmXUWa@mU@@UI@WmXVykwm@kaULWwU@¯lKUUVU@mU@UkmaUbmV@bxVnVUJVn@Jn@@bl@@knJVblInV°@nx@mbU@UWUbm@ULVVVb@LkJmXkmVWIUJUXUKVwVUkLkU@W`UmkVmIU@k@@a¯lÝ¥kmJUnKÑmbUb@Wbak@mWU@UbUVVkLlbUVkXaWK@LkxÇmk@@X@J@V@@X@VUV@VIWln@mbXVWXkKWbnxVUnVÆInl@XUxVl¼UV@b@b@xlLkV@VmzmV@b@VUVVLXVVbVLXKmVVLU@nnVWXXJ@V¦UK@LUmkIWbk@@lUImJnVÒVUnVVbVIVĖUxV@bnUVL@WV@@X@VKlXXaV@@blVxXVVIV@@WkIUVKUkVmlnnbllUVbXVWbblVkb°VInVVV@bnVx@l@bnVVnUUamUL@bVVÆUbUXUn@VVUb"],encodeOffsets:[[110667,29785]]}},{type:"Feature",id:"5223",properties:{name:"黔西南布依族苗族自治州",cp:[105.5347,25.3949],childNum:8},geometry:{type:"Polygon",coordinates:["@@VL@Vl@@IXW@kVUVbnW@XlKVVnUVlL@baVbb@xX°ÔUxV@kbm@VxkxWJV¦@ÈnVKxWXJmV@nÒ@xVbn@@blLk`VX@bla²JVUlnn@U±lw@wnw@mlwVIX@@m@klKnkaKnwmmXkÆVmU¥l@nb°n@aVwVmVIVnI@a¯@mU°l@@VnI@JV@UV@b@IUbVJmXöºzllUbVa@aXUl@U@llLnKVaUa@UmK@UwVbnKV@VwVK@UXV@Vbn@w@UWnX@a@mI@UUKlaUaVk¯VaVLXK»XaWk¯mkğwmW@mIVkwJUIÇVwUUkVKkm@UkmU@WÅwm£Vm¤¯IkJWa_lUbmJzÝJkUÇVU@bUÝnm¯LUb@`mL@VkL@VUmmk@UU±Umka@kU@ķymUkk@mmkÝmUaUakImV@V@VÅL¦JUXmJXWb@n°Æx¼nV@LlbUUbmL¯@ÞbV¤nbVx@bUVlblI@KVVUnVJUn@VlLUlmLUUUxmK@I@@VW@@bU@UJmUkLVVUl@b@V"],encodeOffsets:[[107157,25965]]}},{type:"Feature",id:"5202",properties:{name:"六盘水市",cp:[104.7546,26.0925],childNum:5},geometry:{type:"MultiPolygon",coordinates:[["@@ôyVL@nXJVUbxbUlU@nVbV@naVwaVUXVxxbnaWmXa_@y°aVUkaVIaVamkXa@WVU@aUUlUXwVV@UVbVUnKUwVa°abVIlan@manw@VklJXI@mLVVVUVK@UÇk@KUa@UkaVU@UVWV_XWVXVWlLXKlLXaÆKwVL@akKm@Uw@@XUVk@VUI@wWK@aUVI@UkK@mLW@kImJUÅVmkXUW@UJkx@nmx@xkxV²m@kmUV±Ikb@aUWl_kK@am@Ua@wÑ@mnUWIXwULm@ÇU¥XIlwUwn@laU@Vw¯ÓW@waUab@akKUmVUUkL@WmXUaUV@lWX@Jk@@UUKULmLUJmzkKmVX°VUnWKULL@mU@UnVJ@b@UV@X`m_@l@@bmbXJmnn@°wnn@VLX@V@nVl@nk@@bl@nn°WlXzW`XXVKnUlxVbUb@VXb@VxÈbVlnbmn@kVUL@mLUVVL"],["@@@@UmWUwkU@Um@@VkL@V@@V@VkV@nbVa"]],encodeOffsets:[[[107089,27181]],[[107213,27479]]]}},{type:"Feature",id:"5204",properties:{name:"安顺市",cp:[105.9082,25.9882],childNum:6},geometry:{type:"Polygon",coordinates:["@@lL@bUKxÅLWbkKWLkKUXUWWXU`UX@VUVlb@VVb@Ll°xXxbbXUVbVnUxKlL°nUlVn@UmVU@kUUVablVXKV@ÆXþlXUxnU@mVK@_@ml@UU@blU@KnLVyUw@@UmkWVw@UVK@VXzVK@nVVUUW@kVJnla@nKWkaWL@Uõb@JU@mU@@_WWL@lUU@WUUK@lakÅUUlWVa_@`WIU¯mW@InKVVXa@Ll@VaV@@UXUWakUVWUIUWUkUmVXW@@amUUmLl@UUawn@laIVlnLVKUUU@amK@kUKVyUU@aUImK@UXa@aV@VakaW@@UnIVWVaUkb@mWX@Vxm@UaU@W@VULUxU@mLaUx@VnL@VVbUbmLkK@kVk@WV@bUbVakkyõ¹nWUIVa@J@aVUU@@ImJ@Uk@¯V@n°@bmJUUJUnUxbm@¯mak@¦VUnÅWlnnmxLbmlkL@l@nWVnlÆUVnIlJ@XnK@lL@VJVU@bXL@xVJUl@VU@W@Vxn@"],encodeOffsets:[[108237,26792]]}},{type:"Feature",id:"5201",properties:{name:"贵阳市",cp:[106.6992,26.7682],childNum:5},geometry:{type:"Polygon",coordinates:["@@nlLXVJLVblJn°lnLlVnKlU@nUUa@WlX@ln@Vb@la@alJ°¦Kwn@°xLVkUmmwUmk_labK@UlK@UUm@wLmnwmw@U@¯@KnL@aaġXWW@UKbKWXJIWakJ@_kWkKUU@UVKk@@UlamV_X@WKXK@WUUnUK@kU@WJU@@UnK@LVUVJVkUK@UUJm_@UaVaV@UU@Ww@aV@Xkmmm@kw@IVa@KVLXU@`lLX@VKm_@yI@WU@UlVl@UanU@Um@UaWaU@Uk@XJmXVbkV@IUVUbWUUKmbk@kwmV@K@mWUXUakbKUUUJVb@LU@@VkL@VXKlbXmL@kbmUI@lVXUVU@mULWy@UUL@VUxXnl@V@VxUzmK@LkVa@VVk@@n@`UL@nmV@bmJ@X`WX°WVn@xnxnIl`VbnVlwXUlLl_nV@b@bl°VnWJkx@nmx@b"],encodeOffsets:[[108945,27760]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hai_nan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"469003",properties:{name:"儋州市",cp:[109.3291,19.5653],childNum:1},geometry:{type:"Polygon",coordinates:["@@஼jpnr``pRVHÊ̤Zt^JÖA[CâlTébQhRPOhMBcRSQiROE[FYdGNOEIH]MgEAMLLIAG_WMCSL@ED]PCLYC[ZIHgjSxJTMbHNEFCMEE_HSDFHSLECRNSFDRICHNADGPI\\RZGIJTIAHLDQOHG`GTNCOIC@eIGDWHIS[kiE[FMbECZS@KKS[FDWsCeRuU_DUQNOE[LKGUBM¨EDQP@HWHGDImXCog_~I_fGDG|QDUWKBC\\ore|}[KLsISBHVXHCN`lNdQLOnFJSXcUEJMCKSHOUMDIm_DI`kNDIGEYFM\\YPEEIPMSGLIKOVAU_EBGQ@CIk`WGGDUM_XcIOLCJphHT_NCISG_R@V]\\OjSGAQSAKF]@q^mGFKSW^cQUC[]T}SGD@^_aRUTO@OHAT"],encodeOffsets:[[111506,20018]]}},{type:"Feature",id:"469005",properties:{name:"文昌市",cp:[110.8905,19.7823],childNum:1},geometry:{type:"Polygon",coordinates:["@@hIJ¤Ī¯LQDaFßL[VQìwGF~Z^Ab[¹ZYöpFº lN®D´INQQk]U[GSU©S_c}aoSiA£cÅ¡©EiQeUqWoESKSSOmwćõWkàmJMAAMMCWHGoM]gA[FGZLZCTURFNBncVOXCdGB@TSbk\\gDOKMNKWQHIvXDJ\\VDTXPERHJMFNj@OwX@LOTGzL^GHN^@RPHPE^KTDhhtBjZL[Pg@MNGLEdHV[HbRb@JHEV_NKLBRTPZhERHJcH^HDRlZJOPGdDJPOpXTETaV[GOZXTARQTRLBLWDa^QAF`ENUPBP \\Eji`yºEvåà"],encodeOffsets:[[113115,20665]]}},{type:"Feature",id:"469033",properties:{name:"乐东黎族自治县",cp:[109.0283,18.6301],childNum:1},geometry:{type:"Polygon",coordinates:["@@ªVLP`@PEdNRAHOPEAKHEVL`GZBJfvdTAXNNTZJFPrHHNpKTD\\ILHbEVd^JOHLh@NNBnHP`\\xH@NBRLJTlNv_^CTLd@bNDVFbxdFVUPBTKOGEOUO@OEBXQP[H_EI\\EbeYa@UO_JMEJ_IEDKJUGMDcNUd_FMTEJSGoZ]EIYGO[YWgEQ]a@WHEDQKUSDUGAbYBUpSCYNiWqOSQEoF[UcQISWWNMSDe_cLQ_UBiKQOOASQAWgSā]ZaSPÝZ]XMXS[^oVËNgNKlE RôEø"],encodeOffsets:[[111263,19164]]}},{type:"Feature",id:"4602",properties:{name:"三亚市",cp:[109.3716,18.3698],childNum:1},geometry:{type:"Polygon",coordinates:["@@®ĂhTBXTRPBRPjLVAR`dKf`TCNXMTXRJVdE\\FpTRrPjXZMTDVoZABaVHTCLVCRGF@X^bFRhZXP\\ZHHMA[^wBWXJlW¤EJ[bCTOFWWMm@ILMGWQ@DQ^QNWFSHEbF`OXNbOVNKTEPDTLTCCVTREfvfEHNbRAENH^RJXCFHNFRpVGHWISDOTMVCZeGamaLoLÛD¹¹ėgsia{OųETtlÉwr}jR±E{L}j]HąKÃT[P"],encodeOffsets:[[111547,18737]]}},{type:"Feature",id:"469036",properties:{name:"琼中黎族苗族自治县",cp:[109.8413,19.0736],childNum:1},geometry:{type:"Polygon",coordinates:["@@bRFnHNbHgN@NPEnbXP@bND`NT\\@\\QZb@`@J]V@XhDpWnCJGHGXO@CR§FANHVKLF\\MPVR`CvVfQtDPKpGHG@S`WJP~^dSTHWX\\RHTFACQTIAUPOU@MG__IaYSFQKNSbORHXCZeTFJgB`YBMNMFi~IVDV[tGJWXGDQRGF]JrALgESLSAYDGIaFeXQLS\\MKSLSQYJY}eKO[EHiGSaK[Yw[bmdURgEK^_kcSGEOHKIAS]aFSU@Y]IWFUTYlkP_CUOUEkmYbSQK@EMWUuAU\\M@EpK^_ZMDQ^OXwC_ZODBrERURGVVZ\\DTXcFWNIAWJWAYUUFYEWLQQaCIZeDM`cLKRGpanJZQd"],encodeOffsets:[[112153,19488]]}},{type:"Feature",id:"469007",properties:{name:"东方市",cp:[108.8498,19.0414],childNum:1},geometry:{type:"Polygon",coordinates:["@@ºxJYZQIYXLl@dR\\WZEn]bA\\S~F`KXaDeTiNO^EEKWEDQXITBXaWaDQMUJOIaTWf@NJV@dSxGZFu_@WMKAU}AQ@MwG_[GOAmMMg@GKP]IUcaFKG[JSCoLGMqGEOYIMSWMSBucIeYA_HUKGFBLOFGPQBcMOF_@KO©UAtERadwZQ\\@ÊJÒgòUĪRlR°KĮVLJ"],encodeOffsets:[[111208,19833]]}},{type:"Feature",id:"4601",properties:{name:"海口市",cp:[110.3893,19.8516],childNum:1},geometry:{type:"Polygon",coordinates:["@@ńZƂtĢ¬æßFuz¹j_Fi[AOVOFME_RBb]XCAKQKRSBQWSPY\\HbUFSWSPoIOcCOHIPkYCQ]GdGGIFQYgSOAQLK`MFUIGa@aQ\\GGUFcHKNMh@\\OYKAigsCgLSF]GOQO]@GM]HyKSHKPW@Pxi@EMINYREXWRQ@MQcFGWIAwXGRH\\yDI`KJIdOCGRNPNtd\\UTMbQYi@]JeYOWaL[EcICMUJqWGDNZEXGJWFEXNbZRELFV]XQbAZFrYVUBCLNFCHmJaMIDDHXHEhQNXZ_TARFHVB@DTQIRR@YHAJVnAbKFUEMLd\\c^ÍÞ"],encodeOffsets:[[112711,20572]]}},{type:"Feature",id:"469006",properties:{name:"万宁市",cp:[110.3137,18.8388],childNum:1},geometry:{type:"Polygon",coordinates:["@@^J@ZTVbET^JBGLFPTHld]`FLQhcVanx\\\\ZbLHTGj\\FLP~fIZRZPVTQFSVAFJE^NDLEE[~LjsxVTG\\NZZNGlLRRGLJTV@hPZANN^@T\\NEPPbDZXO`d^HSvcJDIV\\XZAJUFCLNP@PQ¤@[ïKLÑIÏ]ÇE±I{uYśUćFcYUmsVeBSVgB[RO@aYYPO^]@UVaNeDShMLG\\EfFVE\\F`"],encodeOffsets:[[112657,19182]]}},{type:"Feature",id:"469027",properties:{name:"澄迈县",cp:[109.9937,19.7314],childNum:1},geometry:{type:"Polygon",coordinates:["@@T\\GJCXJH@fJDDPNCNJENN^NLHBNSx@DDYbBLLDRbjZTj@`XXTlG^Xr@PJLW\\WLTlWR@HDJTD@X_PO@STMDNTMVV@NLDM`M\\XM\\JNBH[PYZúYzŸ`Ċ\\ÎÝd]c[NKVFLEBaUmBIZGQ@JQSR@CUAEGBQ`SWYRMFgWGCGJCbNnIDGMEDKVAZUEqBYRa^WEUFKYQMaFWXEHIFWMYHCrXVIIiaK@aMCUYNSIISTwXALKH@XWXIEIJQCG[IEQDE_XSBaa[AIPW@]RS[FWS[CD]PEBYNGFSaSyJG]@ugEUDQlGHiBKHUIoNSKqHFaPMICK]UUHIPDJMuCA[SCPIDIOILGAEmU[POPBVSJDREBGS[QXWSGcT}]IO_X@TGHoHOLCX\\ELT@LYTDaFENF\\lj"],encodeOffsets:[[112385,19987]]}},{type:"Feature",id:"469030",properties:{name:"白沙黎族自治县",cp:[109.3703,19.211],childNum:1},geometry:{type:"Polygon",coordinates:["@@D\\RV]dTXELnHr]^@LETBBRTHPi^[@U`QTHDJ`MGSogDIPKdJ`WVNHCXHl_DJR@AH`FBVPUJLHKNTJOFFZON[ZEHFCJlMJ_Cn`CJVNGPLTNDFIdVTWEIPmRKMc_kDMWGGUTAtJLK~\\f{pqD[LAVXRCH{HC`eJ`}@W^U@I@_Ya[R[@MSC_aMO@aWFmMOM@haGGMEmaQ[@MESHaIQJQ MckBIw[AOSKKAMPSDSLOAV_@@`KJRbKRDfMdHZERgAWVsDMTUHqOUr@VQXTT@TfgL^NH\\@heTCZaESNObHPHeZF\\X^ElM^F^"],encodeOffsets:[[111665,19890]]}},{type:"Feature",id:"469002",properties:{name:"琼海市",cp:[110.4208,19.224],childNum:1},geometry:{type:"Polygon",coordinates:["@@TP\\pATHTGlZDJGAQjE\\Rb@jVBDCN`JZ[NCNHNXbULPrP\\KNbMTLjJJRFP`pNLZz^FLRHjVPZ@hxVKbHBHMNNJFRlLzGPnNHhIrHHADcPWdUAmEMVQDSKYHY\\EhBN^HpXGNDBNNBnIßÅ_g{³So]ã@ORO@KMEDIVYB[WJUICudGTc]P_YWaCOOMFS[]@MMYBgOU@ISHKQQkKMHYY[MSHwUit}KF\\KFMCF]EIUBETSROUKTLT[NKTWREfJbCHBZKTFTKh"],encodeOffsets:[[112763,19595]]}},{type:"Feature",id:"469031",properties:{name:"昌江黎族自治县",cp:[109.0407,19.2137],childNum:1},geometry:{type:"Polygon",coordinates:["@@`ZĤd`òü BSPGP@VSbQ`@]HC~T^SE]N]FkW]E[fYGGOPaTMbFDYfS@g[MGK]he@SSSRW@UVqrPVGNStCXUhBFQGYNcCeLQQaLI@_`@EUwcEaCUaMc@SK]Du`MSkKI~BVNL@X`EvYwHcTU@MIe@SXJbIPNVCRXbWbSAWJCRXFFL]FMPSjCfWb_L}E[TaBm^YF[XcQk@WKZJYRIZw¹ "],encodeOffsets:[[111208,19833]]}},{type:"Feature",id:"469028",properties:{name:"临高县",cp:[109.6957,19.8063],childNum:1},geometry:{type:"Polygon",coordinates:["@@jD`hNd\\^dZädĒH´Op@ùZY\\OAGIMN[[W_NCNMKU@NUMSNCTSP@`O@WSCCI@GXQSkXKX[IK@OWqH]SkWW@_SiiYQaKCAKZaCCw@MTGAMKM]FMMIMDSM_HGHRPKCBGSJJIYH[QOJCHMBDGQJECMTDQKFGTCEGTF`NFEDMFaGSNwIiTGhYJD\\KZODC^@FTKND`XBHKJNKFBNhG^FJMPcHEZF\\QPRjQTAdgNOPgQaRSê"],encodeOffsets:[[112122,20431]]}},{type:"Feature",id:"469034",properties:{name:"陵水黎族自治县",cp:[109.9924,18.5415],childNum:1},geometry:{type:"Polygon",coordinates:["@@R]NC`YL]FoN@V[vBXVFNL@TRZalnVFVP`DlOZkVSXEE_F[EUFeH[NKTgfCbMVU^@P]ZObZP@\\QhATUfAtUasñiāEoI]eYǯ@aKmaeWuCºKÜKpnbHbYfUDSNCPJTRAHJTDJSfDNLHXC``VBNGTYCQDIXMDSP@xLNEFRNXBIpVNLXah@RgF@`qOML@LJNSPLbaHAh@Jdj"],encodeOffsets:[[112409,19261]]}},{type:"Feature",id:"469026",properties:{name:"屯昌县",cp:[110.0377,19.362],childNum:1},geometry:{type:"Polygon",coordinates:["@@\\OnVBFKHPJCJOJTDB\\vDINOCGJVVL^JDONEbrGTLpMVJLGjAHGRkVChF@vH^zIbTETMHAZOFC^\\DXT\\EffAP\\PdAV@UIYfS|S@YPICMeM@sC[_A]VQEwyHSMuNcAUlQJMVGMS@mVBZPFO\\CSFQK[LqDMACiUa@[QiFBRIHYCHkGSBS[oSOqBIE^QHCRWHIXsHU\\UC}JEjMNAN_ZAIhSEYfWDQGaPMTLERZTJb``NHV@"],encodeOffsets:[[112513,19852]]}},{type:"Feature",id:"469025",properties:{name:"定安县",cp:[110.3384,19.4698],childNum:1},geometry:{type:"Polygon",coordinates:["@@JjDNdJ\\FbKPXfZ^Ij@RZNaVSc[MsMOHQPDJcLIJ_zCG[HQxWJBHXdENRR@XQFWZQQGOFSWUCI[WCJuRGLXNMPLhCl[Ta@SqGgJMGOmyHkKEQMINMAGaGULgwY@UOGiKQ]EYyMKoO_QEIIKiNSMa[LqOKOaVMWMGMDY\\_IKrL\\ERT[DEPYOUA@nNTUHINkRBVMdNvGTxzRF^U`BD\\@tfNDNOJ@Z{TeTJZ@VUcB[OBOeeQT@^OXBJb\\AbWTF`RCJFH\\RDJIJFXW@WLGBKxWTSJJMTVZND@bbL"],encodeOffsets:[[112903,20139]]}},{type:"Feature",id:"469035",properties:{name:"保亭黎族苗族自治县",cp:[109.6284,18.6108],childNum:1},geometry:{type:"Polygon",coordinates:["@@FJp@fxpQ\\ApN\\GNPNBM`HLMrXLXj\\PEHnI@WUCEM\\GTc\\GZYHTPBHRCPTdH\\K\\@HXiBJILJJAVNTOZJNtFPC`YxDPWci@IBgbGKaTOIM@KNKrP@_hE@QbgKWUMJoWAQMFEKM@wTONCJWRCZDHSAM_UD_GWMKeCITSCGIQBGXUHQoMEEGWDQIG]FMQBMaFGueFeSQDUSDSKOCSFMLUaPWM_PaEGFETMX]RCRR@HXKN@JNnXXESPaDI\\£FkXWIAX]xB\\GN"],encodeOffsets:[[112031,19071]]}},{type:"Feature",id:"469001",properties:{name:"五指山市",cp:[109.5282,18.8299],childNum:1},geometry:{type:"Polygon",coordinates:["@@TCNOLBTLBPx\\AJdlNRRIbJTGNF\\@RcIYbmHoLQdKN_fCJYbDRRXKZFVEZVXBXIJBXMdESW[CUYHUVQFQAqsEIMPYMSBUIIJKAIjGW[@[LGScDOGQOAGSYZ[HSd[HFNVD@XmJFG[OWiWKNqGKN_MAMO[HoM[BoRewo@Y^HpITSFENc`MVCdHNIVCLJFI`NFIP`@VZbaf[FFJG`O\\WRFA@PVPFPPH"],encodeOffsets:[[111973,19401]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hei_long_jiang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"2311",properties:{name:"黑河市",cp:[127.1448,49.2957],childNum:6},geometry:{type:"Polygon",coordinates:["@@VÈÞ@kxnX°VÈa°V@kôwbJVkXlVUx@lL@xkVV°VbxlVUnVxk@KkVbIl@°kVl@lÆnkll@@VVX@V²bUlVlVUVÇn@nkJlkVb@x²V@n°VUnlKUn`@n°bWLnVUblVUVVbknV`°kkl@@V°@nzJ@XxlWXb°n@bĠlbXbbVbJ@Vba@@lbUbVmn@lVmnIW@WbÞ@n@x°@ĢaƐéϚnlČ¯ĠŻÈwm@ôçUmm£Xy°UV@wÈ£Ǫ¯kõÝçUÑUķĢkVÑÆÞU°nŎ¥ČUĊx°m°¦żVƐx°Ç£@yUônÞÆ@Èĉ°Kô¦WkWUbÇ»@ÈĕWÇÈ£ŤU@n£ÆUUKVamanwÅmÝJ¯k@JIkaVaUUÇbkaÆÑkWmÝUÛÝ@wnU±@kkV¯KUkJ¼U¦Å@ówķaķůV¥Uaó@Åwm_kVwĉĉmmn_V»a@UVwķóU¦LǫéóXÇmōLǓÇķxÝkĉkmakbUĶ°@W¼@bÈÆ@ĖLl@°J¯mkl¯LݱLamJ@¼VƧUóUXċb¯ńVbkÆÝI@llxk°V²V@UxÞL@b@b`Çzkókݤ@ğ¯WLĉÇLmmnċVkbUaL@¯bU°ğLÝÝ@"],encodeOffsets:[[127744,50102]]}},{type:"Feature",id:"2327",properties:{name:"大兴安岭地区",cp:[124.1016,52.2345],childNum:3},geometry:{type:"Polygon",coordinates:["@@kϙmƏêġb¯@@wmÝ@XV@Ill@bUxl¯VlVbV@ULVlUV_kxVVVÈÝJ@¯Ulm¯x@xóÒĉ¼m¯Wxţ@Uz¯WwnUwť@knW£óVUUwğyó¦WIVmmI@±kwÇ@@b@ĉ¼ó@¯wó@¯aó¼KÅaUwmWUwÅI@aKó@UaLaVÅwō¼UUÝl±I¤VxÇx@zkJmnnmbnzxll¯ČkJl°@kbmx@x@kêmVnWxôXxU°bWLóJnÇWĵV¦UUbbÆġKk¯VU±aXmċÑUwĉKġkVxkÇKkbIÛXWl¯bX¯KbĊÞVÆnĸ²lxU°n°òÈb¦xVb@¯Vx@¯VķÞČlĊ°KĸȘI°¤ČIôò»ƨnȰKǬ¦ôWŎÈƨwlnKVXmbX`lbwkVWXXL°aƾaĊ£n°@°¥ŎzÞ¥»alwôkƒJa@ĶK£bU°ĊxźVÈUĠ¥ƨVI@XU°x°Ln¥w°UmwXmÝV¥Ģ°@nU@mÆ£¯lKÜw@aÅU¥UaÝIkmV²nn@Ķ»@Uk¥VKÞ@ÞÛ@kVmĢa@_Jómǖ¯ÆwóÇa@alUwwĢřk@wÆWXUWXWam@_ƒ»ÇéXaĸwVa@ÝKkUWkXkKXxn@lĊV@¯m¯nřÆw¥"],encodeOffsets:[[130084,52206]]}},{type:"Feature",id:"2301",properties:{name:"哈尔滨市",cp:[127.9688,45.368],childNum:11},geometry:{type:"Polygon",coordinates:["@@°`_JlU@@V¦°JUnLôlnŤ@@ÈaUÒVbkbl¤zk°ÇVÛô°IlVUVôUxÆU@bźĀº@¦b@l²UVl@°ÒĠxnXxÆVô¼Þ@Üx²KÞlVÑ°UȰôlwô@²ĸ°lanV@VŎUll@bÈnÜmwĢ@la@ÝÞb°UXblŎ²ÆkVI@nJnĠ°knÜbĢwna@akÞKƒĀaIVbU¥wĠwkôxnLċVçkaU±IUmnġW°WôĉalÞÅĵ¯@W¹XÝab¯a±X¯ºLaVmkLóbkaVUKVkkKV_@aÝykk±L@ÅU@yV_aU¥ówÇx@UkVn@lkÅlwWVwUkĉmkklW@abVwnWWwWL@UUÇLÇm@wJĉL¥@Ý_@a¯yUWw¯¯Uġx¯aÝXVmaU£ó±¯nwa¯óÅVXmanUlUXkWa@mkIğamIklÇUkĊzkKlUōĬl@nX°@llUxŹ²mKĉVWwk@UbUK@bmVmIVmwaWxXlWČmºÞÆbUxV@ĵńWÆĉLkWUbaWzkbĉ`U±LklōwUVÝ£UW`Uwk@mk¯VkaõVX@WbLK@XƧºWzxK@lmX@bkVVÆk¼Vbk@Vn"],encodeOffsets:[[128712,46604]]}},{type:"Feature",id:"2302",properties:{name:"齐齐哈尔市",cp:[124.541,47.5818],childNum:11},geometry:{type:"Polygon",coordinates:["@@Þ@ÞĠKV¯a°@KVblaČUmnnKĊÈKX°Ġ@Þ£ôllÈy_@a@aKÝVwU@±¯Ulkw@kÞJlÅUa°ŃČaWVôƨVU@»nIb²KÞ°Klkn°¯I@kK@ĕÇÅ@aX»¯@VĵlaÿVamI@aÅÝउýĊȗJôȁÅkmƑÛ@kxġ@@laVk¯»īŹak¥Å¯JUaWU@@wa»KUkÆkUmUmwÛ±±UUbUUXwWwÆÝklkUanaWwnKlkal¯kaƽakÅxa¯@amb¯VlÇwÛĀV@xmêVÆVVaôVwÈx@ˌx¦VÞ¯VlmX@L@¯Ua¯LmV@°XċKV@UÈ@¥@wġIUkm¥Źw¦¯lmn@°kxVV@¦óamn¦l@nxlĉVómxnÒĉĀĊ¼þǔêÞ°ˌĠÞÒ°ĀɲĀƨźˤȤƨĊ°w@£nymwnkUUV¥ôÑVmkÆmUUVamVIkmôlxkXÞþbll@kVƆVxV@¼VÒ@UnnÞJ"],encodeOffsets:[[127744,50102]]}},{type:"Feature",id:"2310",properties:{name:"牡丹江市",cp:[129.7815,44.7089],childNum:7},geometry:{type:"Polygon",coordinates:["@@U`lLUlVLUlbaôlKnUbK°¹²W°baÞbknyUlUkamř²L@m°@lm²n`ôÅlKxÜKnxV@l@ÅXyW_k@wmŹĕmX»Ûl°ôÈ»ôô_WW@Ual»wU@@wUV@VXI@wĢ͑ÞȻaU_@mUkly@¯óV»XmWUXUWmnm¥nUUaWLk»Æ²IÇawÅaÝ°¯nUa±a@¦õÆğ@@ÅbxUÜnÇłlb¯¦ôó»m@±Uk@Wwa¯xUV°xXbÇÅUVK@¹KUaȯ@ōÝXallÛkalÇUǫÇÅÇakbÝƆ¯nl¯@¼VUx@x¯W¼Æ¯mĖĬ¯ČVkķÅmx°ô²V¤bUnÞW°bĢw°V°XxV°z@bÞ`@¦KĊI@xnÈÈKV@VXKxXmXUxab@kXllĊnVlUxXkxlÆkm@UVl@ÈwôxV¦bU`@zÆV@²KllÞz@b"],encodeOffsets:[[132672,46936]]}},{type:"Feature",id:"2312",properties:{name:"绥化市",cp:[126.7163,46.8018],childNum:10},geometry:{type:"Polygon",coordinates:["@@ऊþÆÞ@bnJUbĀnblĊÞlĸwǔÈŎKÈnôWǬêKV¥ĸôUx@VbU¼m`nnĊĊxlUmkaVÿLw@°»UmbKmÝUwUmVknKUUl¯KUUÈnK@ĠkX±lX°L@¯¥@wV_mĵ¯WwL¯UkōÇVUlwVó±¯aVka°wVk°mÞ¯ŦřÆl²ŎkU@mUkb¯ķ±ó@kxȯó¯VUÒkݱLÛwÝ@ó»ÅUWwmğw¯Ñ@UkV±@ka@¥¹Źÿ@aÅVwóVVUkU¯JÜóÈUl¯yk£laUaVÑÇb@ţ@kmómKV¯IU¥@@kVI`@ô¼blUlbÈb@xÇKkĢɳaÅɆō@VK@z@@¥ÆKnÜ@@aÛUwwnUķ@_V°@klVnULVVÞbVl@°@nxn°LÅÆlVÈmU²@VmĠLxn¯xkWzJwnLmbXbW°Æ²@x@JVxLĀ²Æ°I¯ºÈ@ÒnÈ"],encodeOffsets:[[128352,48421]]}},{type:"Feature",id:"2307",properties:{name:"伊春市",cp:[129.1992,47.9608],childNum:3},geometry:{type:"Polygon",coordinates:["@@K¯kWW²ğl@mLÇVVLk°VVmLUlVnxVnÞLnaV¯¼@xKUĀlbn`nÆxô@VbU¦ĸŰĸbôxÆ@V¥»IVl°LUll@²mVx@ÞÜÞVnlXÅÒlbÈaVVUblbJ@I°lÞInÆmxnbUbVLÅVm¤@ţVǤXÈÇĖ@ȼaXVÜaXbWnzŎařKôbUlw@¯naÆKnUU¯Üa@mkkVUĊmżÝǖK°L²lÆI@¯¥ĉƛVaÞk@ÝVaĠlnUVwóma@wĉ@aVxamX@a@UaÅLaVW_nWm£nWm_ÅV¯m@mó¤Ý¦¯ÅalmX£VWUÅwmÇ@@IVWUw@aI@k@wŎ»WÅVaKIka@¥lUkUlwÅwVyÈwWU@a¯U°mÇ@UçaVa¯mV»ÅwÝUlUkV@kmUkX£w°@@ÇaÝIamÛam¯lğmmI@JUl±ÅōkWa¯VÝa@Þkbġ@xÛnÇm@akkōVōl±kÅťŚÝ°¯nUl¯xlbU°b²ôUxkVÈUŎVl°KXxĶ°nU`@x°¦@"],encodeOffsets:[[131637,48556]]}},{type:"Feature",id:"2308",properties:{name:"佳木斯市",cp:[133.0005,47.5763],childNum:7},geometry:{type:"Polygon",coordinates:["@@nbÞJb@ȯ@xW¤Vln@lUVlkÞVÆxU¼°nUbbVèÈ@nIn@ĢmlUw°żVUn@lnL@VôbwĊlJķĸĢlwôwƨxVVUŦxLźÈ°`nnĠwŎJÞĶwôJ@¤XnÜĸln°¼È°lUbx@l@ÞÞÈm°lôwL°¼ĸ°Þ²nĠ@ôwÞ`ŤIVÒĠU@VJĸbƲ@°ĊKJĶaĢȰ@ô¥°n¤bČU@VxmUw@aÝţÇķ@ĕķīU¯²@ÆmVÑô¯X¥ċç@ĉ»U¥ÝţKWVÅkUVÝŎUmÇÝx¯aķxÛUóL¯a±óōb¯ÑÅVÿ_Åķa@UK@wm@Van@UmmLVa@VImmXUWÝUÅKUwÝUUkVk@l¯XÅ_J¯kJmÅLa@¥U@¯Vz¯@`@¼mxƥŏKÛk@±laÛ@@Xm@@xƽ@WŎnˣĕÅ@@aÅ@@nÝbǯ@_UkUWkbwÝU@çWlw@anI¯lyX°m°VaÛm@mVwÞK°XlaXmm_@UkwÝK@VIXmV»I@a¯ğWbġaU_¯JU¯ġĉkō`±nÝÆkbóĊ¯XĢXmVn²JVlbUèČmKwlóğxxV¦UaJbƑÿÝLl@bmbġx"],encodeOffsets:[[132615,47740]]}},{type:"Feature",id:"2303",properties:{name:"鸡西市",cp:[132.7917,45.7361],childNum:4},geometry:{type:"Polygon",coordinates:["@@LKVVnkbVÈb²U°VnklVlaÈL@anU°ÜmXV`nôLèxlLXL²aVVmÈX@ķlnUÈl`ȹ@Ť°U@xKnnVmlnnUllVnnaŎwlVÞÒ@n¦LV°lwVkLaÞlnÒ@xmLÞ¤Wn¼WÈLVVUxlÈôWVaU_VKKXUÆbnnôKbÞw°bÆWXamVwKUw¯WUkUlJUwVUa@@kmyzmĉw@kVwkW¯ÅKU_VmxU@aW@@kK@wa@K@@kVUaky°_Vmkna¯K@Lwġk@@IÇóXwVakmV@mwXUWanlĉ@ÇUwKóܛNJÛm°@wÅ@±b¯W¹WVwŹĕ¯kVmōb¯w@awmVUUbVIkaVwķxk¼b@VXXó`ó¼Çó¯kܼWnźĖnxl@X`WzÆ"],encodeOffsets:[[133921,46716]]}},{type:"Feature",id:"2305",properties:{name:"双鸭山市",cp:[133.5938,46.7523],childNum:5},geometry:{type:"Polygon",coordinates:["@@UUwómÑÞÑUÝÝUkmmÅyV¯ī¥Uÿĉ¯mÇkaWbÅX¯aÝxaóLmmÅaWVLULV`UbXókÇVwUUÇKX»XmÝ£nK@wmÑkÝbKUlx¯kUKm¥@ÝÑkUōxmbUmkVkmmnkUmmL@w¯Vţ@Ǻk_ÇmVk@ĸVxVÈ°lLkllUbōwnVW¼nlUx¯XmWUnÝ@xÝUó¼¯J@LVbkJWnkbW¯ÝLUxn@nÜb¯U¯nWkz°mJ@bkxX@èÞVxlaXlVV`°@ÈÞa@mÆ@@bÆ@ˤĖmXōƾ@@wn@@WÜ@kb@²ÜlŐLƦnw@»_°@y°UV@@¦bÆKnI°lIÆ`°W@kllUVÞVVxLÆÞVXWVnnUJ@UbnKVnm@Ubn@@xL@VbÆĸ`UĀÆÒ°Ŏa²ô°bôKÜVĸw°bÞwÈVnÞōVUÆlXU"],encodeOffsets:[[137577,48578]]}},{type:"Feature",id:"2306",properties:{name:"大庆市",cp:[124.7717,46.4282],childNum:5},geometry:{type:"Polygon",coordinates:["@@mÇ@ÑÇ°¹¯J±ÅÿKUwI@w@±ÅX¯WanamKxIylX°wmwğKUn±@nVÇUÅkƯKmmw@@¯UkÝaUUVKmUlk@¯U`ĸ@VmxVxÜ@bÛ@mÅL@¦@@yLUŎ@ÆɅɴblġÈL@wÇaakkVa»@ó¯_ÝJwÇaÅXnyU¯¥Å@wbÝaLmm@@VUlbğVm¯Xm_`¯_UxmLa¯b@maó¦Çk¤V@bóJknVxVXx±aLUbVxkLVlLWl@nX@VÅbWlÈnxbWÅbm@xbml°bXbWXVmnn`Lmnbmb@k@mwU@@¯Jlbk°lbkmLXxmbVbkllÅÞxXxVWVVa²VܲnxVVnÅlVlL¼b@xV@XVbIÆ°¦lźbĬ°¼Ulb@kĢ@lw@ƒÜlnȂÆóȘIĉ"],encodeOffsets:[[128352,48421]]}},{type:"Feature",id:"2304",properties:{name:"鹤岗市",cp:[130.4407,47.7081],childNum:3},geometry:{type:"Polygon",coordinates:["@@Þ¥ô£nn@°ÆUn`mXn¤mX`UXbÆKVb@@bnWbwUbĊ@x@nbWVm_mm@ó»UmÅWXkĠ»²¯¯nķwŎ@ĊŎK°bĸUnÑKȦĠÈbÆknJÆUĢV°IVƾwaVkǯ¯»mķkÛWm@£óIĵxÝōIğxmm¯_ÇŹKwťUVUƧwóxxġkĸķIkĉxóa@UmK@kVmUŻ¯Vxkġn@mmJ¯n°V@bXVÇxUzÆxkxlVkV@¦lbJLUbÆXō¼@xl@J@bVxXU@JÈ@nxVÆUXW¤knÆb°"],encodeOffsets:[[132998,49478]]}},{type:"Feature",id:"2309",properties:{name:"七台河市",cp:[131.2756,45.9558],childNum:2},geometry:{type:"Polygon",coordinates:["@@²mŎ_lĊĢV°°IV`ĢbaĠX°@bJU¼WnUJ@ÞLlxV@n`lIUa@K°Iô»ÞVwÞ@VmnX°WVwmkX»UmŎxVaklkkKǯUUwÇWUnU±bKWKkwçóKmU_nW¯ÛmV@bÇKkbkUml¯U±VÇaUamlUULKk@U@mwÛLwkLóÆm_±nk¯@@n±KnŚlbkVVmzlWXº@Ķ°"],encodeOffsets:[[133369,47228]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/he_bei_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"1308",properties:{name:"承德市",cp:[117.5757,41.4075],childNum:11},geometry:{type:"Polygon",coordinates:["@@lLnlmxnIVVlUnb@VVxXJWL@LÞVnnVJ_@wkmKbxwXkWXXKlb²K@nVVVbL@WlU²lKVnUJVz@VVb@lżmVUVnbôaVX@°Ub@lWbX@b@bVb°x@VxÈLVlaÆ@Þb²k°@lVU@Xn@VWLXb@¤VXKVVVLnm°_ƨ¤@aUIVaalkX°kV@alwUVyU@kó°na°UVUUmUÆw@mkLVUWVIWLnn@xlVnKmyU@U°UXaV@U¥U@UÆ@aVUkWU¯aU@WLUV@bkbmKULmKkUVUkmVIUwlWV²Uml°U@WLUwVm@UUK@_KUUÜaXw@VKUU@mVIUUlmnIVVVbÈVlKnbVK@nI@nVnwVLVKKVnb@aUIVW@In°@lVnI@lWĢ@°UVL@b@VyUUa@w@WUnU@WǯK@UkkJWaÛbmk@mVaÞU@amkW@mXUKkÿ£@akl@Um°UXwlaal@nmlXnW°znW@awV@akbĉ¥VmU@IVUJkUmWUKbmkUaKkUVU@KV@@klwWaU@kmXVènbmlUUKX¯JkbI@JmIUWU@Lml@XkJ@UkK@aVKwWaIWwmU@mU@J@UaċUaUUVkI±k@UU@UbVVm@UVKLlkIWaULUWXUJU@WbUb@lkXUxm@@JVn@J@bnb@Vkx@bLUÆnJaVXnKVVmzX°V@_lJXxWXK¯bÅamU@lUIbñJ@LÇKkIÇ`kxWL@@@bUVUb¯xWKkÅVlULW@n¦Ul@IlmUUUVm@kWnkKma¯XUKWmnwVwÝLmVUbUVWb@LnxmxVmbXx¦@nb@`V@kbLUmVUlkbVXkºmnm@@xk¦bĢÜl"],encodeOffsets:[[118868,42784]]}},{type:"Feature",id:"1307",properties:{name:"张家口市",cp:[115.1477,40.8527],childNum:15},geometry:{type:"Polygon",coordinates:["@@kġÛal¥@wn@nml¹UWlaVknUVKla@U@_ma@¥WwnaUwnmw@KXaVUVaUnmWUk°lnUVUXWVwIWVóKUI@WXxUU@mma@kUKWLkw@yk@aVkUUċaUU@Wk@Unm@UVmLm±IUkJkW@aI@m@UVUla@VXVXmVwnkWKKU_k@m¥mX_JmnU@km@U@KmUVU@U@Umk@@LmW@Û£Wka@wk@aI@mmk@mUa@UmUIwW@aWUbU@kbÇ@kw@makVUkU@am@aU@mxkUbKUXU±KXVWLUK@wkU@V@WXUa@WbUxJI@¦VèVVX@±ê¯KUI`¯UULVx@V@UKIVkLmVkKm@nUJÝbkIUJVXVVxVbUVJUn°bVmlU°XnK@Ul@lVÈVUXx@W@VXVKÞbn@VnbVm`UxkW@UVkLKm¼@lUnUJVnVXV@Vm@@LVklIkl@VWlULWKUL@mJ@blbUVUlmzUJUxm@UUbċÜk@Ub@VLVV¦ôbVmUKUkU@m@VlVn¼WbUJ¯@@°nIllÈl@nXWlLkJ@bkxlxkxlXUlklJXL@bWn`@nÆXxlL@xl@XbLKlVlIXblVUbUJW@lX@VL@VVXJwn@WnL°KbVbl@VI@K@U@nmVmV@XUWI@aXm@VUUkWmn@lmUUk@mUmK@UnwVĉ@mU_V@XJôVVULVUn@llUnJl_n@ml@XlLlw²LVJUL@VmbVblVXmVnl@Ť¦nn@Ü@bl@@XV`Unb@VlLVb²JXn¥ÆÑ@¥Þ@"],encodeOffsets:[[118868,42784]]}},{type:"Feature",id:"1306",properties:{name:"保定市",cp:[115.0488,39.0948],childNum:23},geometry:{type:"Polygon",coordinates:["@@VbXW@@UlV@xVLXKWU²LVVWLalVnwV@@bn@bVVllUnb@lxÈ@laV@aXV@bXxJnV@VVb@nnl@nJ@bll@aU_VWUwVUkUmUkb±mVwU@VIUW@UWk@VU@ynLm@IV@bnKLVaVmnIlaXwV@@WVL°@@xnX@V`V@VbUVVLVKnwnL@ll@@_V@VVnaÆ@KVXÆ@n@wKmUWm@km@kÜKXU@ÑW±nIUwVKla@I°wU±kkmm¯m_JnawW@IVaUama@wUmU@mVw@aXk@mWa@£km@a_kVmUnWW@¯bkUmk@VÇm@@kUUKUU@UVUamVUaWIkb@xU@@amUkKVkam@@kVUkUWmKmUkLUb@xmJU@UImVÛVmnUwJU@VX@UWm@Ub°¦UmxklmX@`ULU@@UW@@xkn¯@makVUmxUb°lUbUbnUJUUVaLkbUUJUU@mUUUJka@xUIWJUnJ@Vz@kb@`@bln@lb@X@@@XlbnbVb@VJlInlbVw@UKl@lbnan@VbJôLnUzlV@lÈLVbVK@LVxVWXX`WxXzbV`UXV¤nx@bVlVnVlUL"],encodeOffsets:[[117304,40512]]}},{type:"Feature",id:"1302",properties:{name:"唐山市",cp:[118.4766,39.6826],childNum:11},geometry:{type:"Polygon",coordinates:["@@@VVl@²lJUVVbČVVb@@InV@VnXxJXbxUL@bLl@VlI@WnkKV@VXnJ@IJla°IWLVVnkmaUçWVkôaܯ@nV°wnJlaV@VUnUUaW¯wXWWwna@£UaWKU¯¯@aVUkKUamUUn»anIVwUWlk@LlWVakU@K_lbÞU°@y°n@KÈkWWţ¥ĉōkġWUw¯£¯Çwţw@kK@k¥ÝwÅbÇ¤ÛťVlW°@ĸx@VVVULVLkl@V@X`Ub@Xm@UWbk@ÆVbnLWV@lnXUbl@X¯lmUVkKWLkK@_UK@U@UmmUxmVXLWVULkU@`W@ULUK@XlJXzV@@xml@VU@UX@Kk@WbUK@Xn`XmJnmkxUVbUVlVVxUbV@nKlLkVKÞbVKXI°KVmVUIUKULVxVJVLkV@V@UbU@WUU@UbUK@b@nV@VkLmb@b"],encodeOffsets:[[120398,41159]]}},{type:"Feature",id:"1309",properties:{name:"沧州市",cp:[116.8286,38.2104],childNum:15},geometry:{type:"Polygon",coordinates:["@@@ln@UÈl@Vnl°aX@mXnVlU`@bln@¤Xb@nWl@bUx@nnVV@xnbVbUb@JXxbmXa@kUVwlWkKôVm@wkkK@kl»ÈmVKXkla°@XVV@VI@ml@@Vn@VX@V@J@VxUzVV²blVk¦@Ġ@@»@VK@VÈLlK@XnJ@alIUlaVVb@n@aU@WUIV@mUn@mKXml@lL@LnWb@XV@@aVVbV@VVIVWÈbIÈ»ƒǟlWaVUÅUUm@kVUWVkaUwmaóUJUU¯ÑU¥mk¯UaKÅnÇyóXmWÛX¯aċbÛaJWÝU¯»aóóUm@IVVl@bLUJWLX@@xXUxl¤V@VnVUVXVbV@@@VVn°V@ţU¯VUmUWV@mUXabUKUwUaÇKnVk¦Wb@VnLmV@bkV@nxW`Å_UVV@bUklVX@VmlUx@VVL@xVWVL@VW@UUm@"],encodeOffsets:[[118485,39280]]}},{type:"Feature",id:"1301",properties:{name:"石家庄市",cp:[114.4995,38.1006],childNum:19},geometry:{type:"Polygon",coordinates:["@@la@y@UImVXIVJw@lbIVVnV@VVIVVlaKbVUVVImVaaVk¯VanwVlUnb°@lm@wX@@VV@VK@_nWlknwV¯¥Van@VX@W@UVIVxnmÜUnUVJV@nI@wValKnV@kmU£na@mVk°KLVa@UU@UmknWWkXU@aWW@@km@UaU@@klK@UkaWaUnamm@Ua¯wWU@UkL@Un@xVlUXVJUbLmU@aUWUkmKkLUUm@mWXammkkWUm@@U¯JUUmkU¯@mKĉxÝwÝ¥LUómwkUUUWVkKmkKmLXlxVLVxXJ@nVJnz@VWL@`nX@x@kVUUmJmIXxJVnUV@UVV@LU`UXVVlXL@l@b@VmX@bxn°UbkKWLXlW@@bKmKULmakLUlmb@Xb@xmXU`Vb@`lLx@nWVXL@°WlXnlbKVKXVb@X@l_lJ@V@XnI"],encodeOffsets:[[116562,39691]]}},{type:"Feature",id:"1305",properties:{name:"邢台市",cp:[114.8071,37.2821],childNum:18},geometry:{type:"Polygon",coordinates:["@@nKlLnlLXUVVlVnxôVKÞ¦ÞxĊwnL°@lVnVV°I@Vn@VlXnlnbWnXn@VVlKnLVlVX@bnVKVaUIVWkU@wVm@¯@U¥VmU_°lKkw@LXVaU@wUUUKlUóW@UVUUl°KwlKU_naKVnlKkkWWa@IJVa@IlJnU@KVUUmVlaXUl@lm@kXWÝÑnk±k@wğ@@U@mKĉLmVJ@zmlnWLUÝJU_@@mJkXUVlbklÝ@Ýab¯@¯±JÅwġaUU@kU@mVI±bUKLWUXJkaLóKULWbUVkKmnk@@bmLUl@b@mnmJkUULabnmn@lVV@¦n@l@bznx@`Vz@bxnV@xllbnKVx"],encodeOffsets:[[116764,38346]]}},{type:"Feature",id:"1304",properties:{name:"邯郸市",cp:[114.4775,36.535],childNum:18},geometry:{type:"Polygon",coordinates:["@@bVKlVnInm@@akVnK@al@nmlLVUXaVKôLKlbIVWXKVL²aJnU@lV@VVĢbÆx²I°°@aÞbÞ@lkkaVUlWnI@@V`ÞIVXKmnk@yInUĊKÇkUUamUUk@aU@Uk@WUwVkVJVkkw°a@mK@UX@VVLVW@wwVa@¯Xm@@lUIWaU@UWkXWmU@UwmUkKmn@lkV²VaULUVmJUUUwLma@UmkIUmLmVmx@bLUamKÅL@VmbkU¯KÝamzkJUb±VkbL@lU@WIkJzkKmKnUalWkkKW@@nkbk@WW¯XUVUJ@XlJ@X@XlWLkU`VUnaWaUV@UVIaUxUUmVK@I@W@ÇU@@U@b@nmKXmx@UxkVWUX@`VLlL@`zXÝb@b@VUVkIUJVz°KVlnLlKnLxlLVVUVlXUJ@nnI@mVUlbn@@m@bVnV"],encodeOffsets:[[116528,37885]]}},{type:"Feature",id:"1303",properties:{name:"秦皇岛市",cp:[119.2126,40.0232],childNum:5},geometry:{type:"Polygon",coordinates:["@@lnV@Xbkx@lU@@LUVlVLVbnlaLXVVnlIVUJV@UnĊ¦lab@nJ°UmV@wn@VUJVI°bnWlXnWVLVK²bakklI@aUaVUwVUUalaVwnUVak¥X@WkLVÓmmUK@_lW@n_UK@alÅ@ğÅƑŃÝm@ÑţÇlL@¯mz¯@ÝVak`@LlVUbkXK@klVXUxJmbm¼VnVVblLUV@b°V°XLVb@¤mbXxWX°xXVbmVUVU@kbmI¯xmU@Û°óbUl"],encodeOffsets:[[121411,41254]]}},{type:"Feature",id:"1311",properties:{name:"衡水市",cp:[115.8838,37.7161],childNum:11},geometry:{type:"Polygon",coordinates:["@@KVlV@X°xb@VnnmbVXblb@VkL@lV@Vbn@@l@XX@bWVXlmXnlVV@@VUbK¯LUl@nmbV¤n@lLXnlVUV@ln@lbUlLnV@bV@@wlaXJVbnUVbVU@VVLVVn@VVX@@UKXUU@wUK@UwVnk@UUWlkV@aUVUÆ`X_w@mlU@anUmK@UXal¥UmÈLVbVxVLabVW@nXUVnV°UŤV@U¯Um@U@@UUaWVUmUUU@k£VwW@wW@XKIUa@wU@@al@UK@_mKXKbUU@aVKm@Xm±@kbÇakLğVaUw@a@mkUJk@ykw@£WX@lknk@WVkbUVnUVL@mVkI@JUbI@JXbXllkLUmLmbV`kLx¯LkVUV@VôXkVVLVV@xVUbW@KxlL¯kV`UnV¦°@"],encodeOffsets:[[118024,38549]]}},{type:"Feature",id:"1310",properties:{name:"廊坊市",cp:[116.521,39.0509],childNum:9},geometry:{type:"MultiPolygon",coordinates:[["@@laU@UnL@VWbklWxnIVVV@XJlbUlXVbn@@KmV@@X°WVInJmn²@lmVbnL@amKV_kwlmX@@LVamaXaaVU@UnJVanLlUkaW@UaVakK@IlKUU@an@ln@alKUkIVa@a@klaUKUV@UkUV¯KVV@kUmU@@a¯ImJUU@VV@UL@U@@WXUWa@Ukwm@X@@w@al@@aVIUmVUUUVWUknK@I@l¥kU±aUUVyUw@@I@UUWm@@Uk@@nUJU@WU¯@kbWlULnÇk¼@llLl@xUnóLlkXUxV@lWbI`°nnnllV²¯x@JkbLUVxmJX²@ÒWVÛL@lln@XnnVL"],["@@@kX@Valaa@KWI@UXW@WanaUIW@UaUKķk_W@UVUKU@b@UamxVXnJUbWVXLVbn@W°kb@U@Wó¼mIU¼k`V@bVbl@lX@lUôVlUIV`lXVn@lUlVn@l@UVaIUWl£UmVWU@@UUKlUUUnVL@KUnLVWUa@U"]],encodeOffsets:[[[119037,40467]],[[119970,40776]]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/he_nan_geo",[],function(){ +return{type:"FeatureCollection",features:[{type:"Feature",id:"4113",properties:{name:"南阳市",cp:[112.4011,33.0359],childNum:12},geometry:{type:"Polygon",coordinates:["@@lKl@nVV@bn@VVnmnLLXx@VLlKVUIXWÜ@Člbl@XUĊUlwnWLÞwm@ÞUVmnVl@nXJXLm@VnnJlaI@VkxVb@VlnJ@knKVn@°aVanal@XK°b@¯VJXIVK@al@nVk@nKab@XL@blVVKVLXK@VaVI°mVaX@V_@a@yUkVwVIVaJ°@anIlaV@nKnXÆm@wUUV±UUWUKnaWwXUWmůVam@kakImUK»lan@VXXaW@@UlUUa@a@UlwUV@Xal@@anIVaUK@VXmwVmUmVLXl@nalLnal@nKlkV@@UnJUXnl@nVl¦V@@VnJ@nUVVVVIn@VaJÆn@@K@mka@kmWVaUI@a@k@@aUL@mmaVIUKUV@@IU@mUmmL@K@UUUU@mW@@nU@ğ»mVmbk@klW@UXnV@LJmlUnUJUUUW@UnkKxmLa@@@lUUbmUVWk@@nkUmam@UakJU_Vm@ÅlÇLUVmVUwULKU@k@UVUlU@@U@UaUUWaÅzJaWLklb@bmL@kKabWUV_@mV@b¯JmXUbUK¤ÇLUU@b@JkLWmkUWIkJ@VmX@JUbVXU`¯VV¯blK@LXKlUV@Um@@Uk@kxWkbL@KkbmL@UXmaU@@l@x@blX@xUJ@bULUlULÇ@@VnU`W@@nÛ¼U@@VmKUkm@VVX@@xÇ@bUbVb@VX@@xLUb@l¼XLlbUlVVUUb@n"],encodeOffsets:[[113671,34364]]}},{type:"Feature",id:"4115",properties:{name:"信阳市",cp:[114.8291,32.0197],childNum:9},geometry:{type:"Polygon",coordinates:["@@VllInJlknJVkVU@mXlUÞ`VnVVU@U@y@nXlKVnJVkXKWaXIb@yVkVUkVwn@K@nW@kKlUXVVUlbnUV`n@V_V@llX@@Vb@bV@@nlVUb¯WLnbmb@nLnKbUbVWnLlaX@VVUX@Vln@`kL@ll@VXVJÈIVl@XÞJ°UnaLlylU@UXKlnn@lanLWWnbVI@KXKVL@LVWVL@UVKUIVWX@@XÆJ@In`@lJVI@aWÛnK@UlK@UU@VKnlmnXalUllLUbVVknJ@nV@Vm@al@@xnVlJVUU@w@ak@XW@_mWnUlŁUmVKV@VXwW»XWaUwnkWUkVUU@@@WlaUkkaIWVkm¯xmIUmLUVaUIó»m@mmwXk@amk¯¯l@wmkLmmU@UbkUWJ@XUbJ@b@l@znÆmK@Xk@Ub@lm@I@akmVKUUVUkU@U±JUbk@IWmkxa@UUVUWVkIUaW@UlLWn@VkJI@VkK@L@bmKkJmUUaUKWXk¼VxnJ@V@@VULV¼@@UkaUlWL@U@W@IkKmL@KULUWULWKUXUJmIbK²UWnWKUUkLUmUUam@UU@mUL@xkV@VV@bmV@Vk@mwkUVUx@mbXÇnVbUL¯WnUVLVb@xnlWnU@UVUVVUbVVlVkn@llVUXUWUXVbUJ@bmLUJnb@nVK@bl@@@bVJUbnX@lb"],encodeOffsets:[[116551,33385]]}},{type:"Feature",id:"4103",properties:{name:"洛阳市",cp:[112.0605,34.3158],childNum:11},geometry:{type:"Polygon",coordinates:["@@VVUllLXl@LWn@J@bKUVmnL@`VblLnbV@b@JmL@LnV@VV@¯VJVnXL@nm@aÞ@ak@mImVbXLynLk°@°aVJnUV@UVVXk@WJ@VXLlUnJVnn°U@»°Uwl@bWmUXÆ@VLXU@m@Ua@Imkba@naWW@_@WXUV@@U²@K@I±U@¥kKWLóLla@£Um@kWKXU@mlLXUVKUU±J¯_@`UL¯Wmk@WakklUnVUVaU@KUU@mmK@_a@KX@VaUIm±kaVKVUkw@kaW@kbkL±UUaK@UUKVak£@UmmL@lIkmU@Ualw@UJkbmIUmn@WKImWk@mUUnÝV@nÝxKmXkxĉVWVk@kaċÛ@WXJUV@zmVWnbUbVbLlUnlUÒnWVVWnk@@Vm@kxm@Unl@Ll@@V@XnkJVV@nlVXxU@ln@a@VLnWĊ¦nx@lbVKXLl@ÞVLXJl@XXl`lIXVl@XlXUVKwV@lanxzUbVJ@VVX@b"],encodeOffsets:[[114683,35551]]}},{type:"Feature",id:"4117",properties:{name:"驻马店市",cp:[114.1589,32.9041],childNum:10},geometry:{type:"Polygon",coordinates:["@@n@b°UÆXnVlnLÜ@VLm@n@na@Jm@k@lVVxXX@V`lLVXVV@VVÞLVV°²@labnxV@@bLmlm_VWnIWUna@lLbnV°VL@KVLVUVaVLXK@mÆXna@wVma@Xw@KlL@a@Va@wUkaWnIVla@Kn@Vn@VUl@nKVnJ@LnK@aVkVUUW@VakUVanI²XW@UUU°KnUVLl@XaVK@aU@KUI@W@_lm@KkLUKV_U@»@UVJ@XV@@mVL@K@U@Kk@VwUUm@kmWL@VkVkzKmb¯VÝI@WUkÇJUIUWk@@klK@_km@UVWUUW@kbmKUXaVamLmK@namaXK°VakU@mU@@aa@UW@kkU@U`m@U_mVkaUVWUkVL@lmX@Lm@UxVlUUl@zaWJXbWLUlmIUkLmW@@z@VUVUUmÝ_kVW@nUVUlmIklmIkJUkl@n@Lm@ÅIUbm@UJUUVU@mmI@UU@k¥mUk@WmVmI@VU@klmLk@mbkKmb@WkKUVnUnnxW@UVLUbmJ@bk@WbU@Vkx@V@bVbkV@V@XWbUWm@kb¼VLnlJlb"],encodeOffsets:[[115920,33863]]}},{type:"Feature",id:"4116",properties:{name:"周口市",cp:[114.873,33.6951],childNum:10},geometry:{type:"Polygon",coordinates:["@@lnb@xlJ@UnLlKXUlJl_KnV@xVL@bkbVVUè@Wb@UbmkVmbXVJnUl@a°@@bLVblXxInmnLVwanJÆw²IlmnXVl°VVbÈaVb@lkn@VWnLlUVmÞUUklkVkUaVaVaUwK@kkaVWmw_l@nUVVb@baV@VV@zXJl@@kl@lk°WVnÆbnbUVJI@VKVm@kK@_kK@a@aU@@wW@@k@aUW@IUWVUnLlUlVXKVwmk@W@VWa¥@k@lnUIÇKUaU@UUVmIUVUk¥Vma@¯k@Wanwm@@n@@m@UIVkUVamUXWaVU_@mUVUImW@aUIĉK@VmIb@lU@@nJkU@KIUmmLk@UVm@Um@@LkbUmJXlbV@xUb@@bkK@LWx@bUn@xmbÅW@nWLUKUbUVKU@LUK¯mU@VV@xULUVL@bU`WUz¯aUamKUa@@xkX@x"],encodeOffsets:[[116832,34527]]}},{type:"Feature",id:"4114",properties:{name:"商丘市",cp:[115.741,34.2828],childNum:8},geometry:{type:"Polygon",coordinates:["@@XVl@lLÈ@VkV@V»UanWX@VaÆÇô@ÈaVX@xVJXUÞUaVLĸbXKlV@m°Vn_nyXX»mUk¥lK@a_@yInaVKVa°_@WXI@@KVnIlbnaV@l@a@_w@lwUKmXa@UV@»Vw@kUKVUUm@w±VUXUKUwmJUU@km@@±mXkmUI@mmKUwkbWakLWaUIkJmX@l@@VUX@JWbX@VbULWblUVULknlV@bVJkmb¯KknWmk@@nmVkx@VmU¯KUnUL@JUIVmaÅaUm¯Xlkk@@lk@WI@yUUU@b@aUaUmVk@`nxUXlb@lLVxUbUbVbUllkVlÝVUnkVmKUXm@kl@nUx@xnxn@`VX@V²x@V@b@Wl@zU`VUVVbL@VbW@bkXllkLWV@V@VVÈwlV@@XK²LlbWnnÆL@VnJWn"],encodeOffsets:[[118024,35680]]}},{type:"Feature",id:"4112",properties:{name:"三门峡市",cp:[110.8301,34.3158],childNum:6},geometry:{type:"Polygon",coordinates:["@@WKUmUI°U@@UmU@KnK@IaU@makKUa@_KnmVUL@a@IXm@KWkkKVkUU@aUW@UUIVaymwkbU@xLVUWWkk@WUkJk_WWk@WIUKÝk@WKULka@mwĉ¥mXUK@@bm@kVWwkU@mUUlIWm@@Uk@@KkVmn@lwn@@Ul@XmUXUmVÑkmkVKUaVamaUXn@ykLUK@WwKmKnUm@UmaU@mUk@kL@lxċxUnkVmnXxWb@`kzWJ@VLmVUnlmUL@lW@Ub@VXUb`VLUbUJ@nmnUlUUm@@bUJlnUU@lxkb@@XJUn@kb¯VVVmlXXlJlzn@VlkVW@bkKbmkUbVblXVxKÈnwÞlĊKlVnKlwX@lL@xlUnVn@l@lmX@ÆÈb°¼ÈwVJlx_°xalUÈxlUnbVxnL@lllbmn@nb@@VL@V@@VLJnIVVlKnV_"],encodeOffsets:[[114661,35911]]}},{type:"Feature",id:"4107",properties:{name:"新乡市",cp:[114.2029,35.3595],childNum:9},geometry:{type:"Polygon",coordinates:["@@XVlLK°bUblbUbl@nX@WXVVKVk@@mb@UbnW`kLLV@VVLnKlVXIlV@@a@l£nWlkVa@°bnUlLVlnabnUVUXKlU@@lk@aI°y@ôkUU@wmônkWakmlUkVmkUlmUUm@nkUKWanamULXW@UVnUln`lblL°KXV@ĠJ@L°JUVwanK@UUImmkK@¯±Um@IVmUmmÅnWaUK¯aUkw@W±kVxUVwnÅJUIWaÝJóIbm`ÝbÅImJUI¯¥¯@mU¯UJmnUVóUkl±V@zXlbWVXL@bmmº@@XmJUXU°llk@nWJk@U@¦U`m¯Wx"],encodeOffsets:[[116100,36349]]}},{type:"Feature",id:"4104",properties:{name:"平顶山市",cp:[112.9724,33.739],childNum:8},geometry:{type:"Polygon",coordinates:["@@l¤UbVL@VLVb²VlKlaX@lb@lxUVULbln²VJUbW@@Lb@`nL@nVV@LVUbUVmkVllXbl@Xn°VK@_°`²IVVV@VUVJnInaWK@U@KLÆ@nmlXXWVUUw@klKVa@knyVkVanIJXUl@XbVUl@@aa@mXkbnK@UlK@UUUVaXaWmkUm¥nWmXaWakl@VmÞbKVL@aVI@mUwVm@KÅméULKVaUk@kUK@UWXI@VlKXU@VVnInVV@VLlK@UUkKU_@WWUwU@kln@@Imb@@mnUKÛ@mKUkWVXxmbVLXVVU²VV@xÅnmWmLU@kbmJ@b¯IUbJUUxVl@z@bU`W@Ub¯nUJUb@WLUKULkU@aWK@abmL@lmUk@@bULWJUI°@¯aWLk@mbUb¯b"],encodeOffsets:[[114942,34527]]}},{type:"Feature",id:"4101",properties:{name:"郑州市",cp:[113.4668,34.6234],childNum:8},geometry:{type:"Polygon",coordinates:["@@@nWVUKÅ@WnVnIV@kÆwV@nn@lxÞlnôJzXJl@nalUČVll@²UlkôVVUnmI°VnV°@°¦VJnIÆJÞan_VmU@ama@kU¥kaUklw@UIV¥kVUI@mmUÅmUlwVU@amUJWbUakVVé¯Im`k@wVWmLkU¯XkWmLmx@UUbm@@xJ@LbW@UUVWUkVK@kaIUamKUkkmmLUkJUVWXkWmnÅ@KL@@VXLmbmJUIUVU@ULWVkK@nWVXL@lVn@¤bkôKXKlL@¦²V@JL±@@VU@WV@X@`XXmb@blan@Jb@V"],encodeOffsets:[[115617,35584]]}},{type:"Feature",id:"4105",properties:{name:"安阳市",cp:[114.5325,36.0022],childNum:6},geometry:{type:"Polygon",coordinates:["@@°kVaV¥kVmUkWkWVkVKUwkkmKUU@awWWXWakKWkXmlaIVmX¥U@a@WnK@kVI¯@KğI@WU¯LkKak_kmmVU@VWXKnVmbXbVLmln@VVknlVUnVlklnXbmlmlXblnÈlWbn@@nK@VLbVV°VVzln@VxIbU@WLUa¯VUkWõ@¯kkmxk¼lXUlVbVLnlULmU@lLkVUlX@xW@¯mU@UmIUWL@aXakU¯anWk°@kkKmmUIWaambUkkKmV¯a@UblkmXk¤@@b@UbULWVnb@lUVVnmnVVUJ@bWXX@WJkL@blVU°UV@XlWnXUbW@UVkVVWbnLUJWLUK@Lnn@blVUnUblxVUVJXUa@UbLnUVV@mVIVVn@UbV@XbmbUV_lVXUWanJVI@WkI@WVIVU°WXXl@la@mX@lLXlkVbmXylIXJV@@kKla²UVaIVyÞb°LlVna@UÆKnLVbK@anwU"],encodeOffsets:[[117676,36917]]}},{type:"Feature",id:"4102",properties:{name:"开封市",cp:[114.5764,34.6124],childNum:6},geometry:{type:"Polygon",coordinates:["@@lUVbXaInV@bUVxknVVÆnn@VJlUU¦VJ@kxVllb¦lV@nb@bVUnaôJÞIXbVJÆImxUVwU²l@XxVl°bVLXb`XklUnmVblL@lmx°LVK@UXIVaWlL@Uk°KkVaVUXmmI@UÅKmmXka±KL@W@kUÇxUU@@UXUlKkklW@aXa@UKUaVUUV_@yXk@@a@U±w@UUW@_mmw@wVwmUaÇbUa¯UUkmWkn±JÅxmIbUxmKmnJWwkUaK@a¯@bk@mVUIWLmwm@Ua@WJUb@LUl@UUmLUbWJ@VL@VmXWWzUJUê"],encodeOffsets:[[116641,35280]]}},{type:"Feature",id:"4108",properties:{name:"焦作市",cp:[112.8406,35.1508],childNum:8},geometry:{type:"Polygon",coordinates:["@@V@VL@x@bXWV@XklUWX@J@nI@KlLKUVaV@JlL@KUk@KÞLl²_@nWlLUVV@nLWVUJVn@anV@awÞUVLVxb@lW@lbXnVn@@¼L°mKVn@bnl@nVK@blbLWU@VWLXV@nlKn@lVVbXw°nV_@¥Vl@XI@mlkkV¯VWnI@W@n¹n@aWKXUaWk@yk@kċUkVmbk@WIyóImÝkkwm@mU@xÅlU@mJXak@x¯V@¼¯VmUmmIkVWK@UXIl@UWVUU@mVUI¯b¯@lmKzWKUanJ@nlbÝ@@b"],encodeOffsets:[[114728,35888]]}},{type:"Feature",id:"4110",properties:{name:"许昌市",cp:[113.6975,34.0466],childNum:6},geometry:{type:"Polygon",coordinates:["@@lIVnKlnVlnLVbJlb@ULVlUXVVX@a@KI@wn@aVV@nwnKlXW°lVnKUXx@ln_°JVIXyXnW@UK@UXIVanKVV@Vk@KVaXI@Vbn@nxKnaUlnVa@Xa@VçUUla@aUK@wmULk`kIWVkLmK@V@XUln@JXV@nmbUóImUa±@@ÑóVUUk@UlKVU@akWVUUlUUaUK@UUKWbUkÅJ@XWa@XbmJ@nUJ@bUKLÝaUnk@lXbWbXnmn¦lVXnWbUbVV@VkL@VmLaWl@nb@bk@UVWak@WVImJUbUlmz@lUbkL@lVx"],encodeOffsets:[[115797,35089]]}},{type:"Feature",id:"4109",properties:{name:"濮阳市",cp:[115.1917,35.799],childNum:6},geometry:{type:"Polygon",coordinates:["@@lLXbWXXx@bVVnLllVxULUlXXlVlUnlU¦Ub¯lnK@VbVb@XbVLKVxVVnIlaba¥lU@wnalLnVVlVLXnlWVXn@@lVI@WnU@mÅW¥aW_k@WwXy@km@wUm¦lUxVLV@UwJ°x@VX@Vb@`VX@VX@llIVbnJlIbVlJ@mѯLóa@KUakX@UK@wU@lWUUݯImW¯aLUKU@k»k@mwa@UnKWI@UU@akVWKk@a±bóUWKXUmkKUmLbUx@lmLX@@bVW¦UnJkbWnXl"],encodeOffsets:[[117642,36501]]}},{type:"Feature",id:"4111",properties:{name:"漯河市",cp:[113.8733,33.6951],childNum:3},geometry:{type:"Polygon",coordinates:["@@@LUnVxnIWa@Xb@WÆIVlXaVL@VVLVbkVVUVlX@bUVkLVl@VVôU@Ò²@VbnôJVan@mWU@ImVk@WkI@wmak@wlW@w@VbnLVb°bVyXV_@aUKVVK@wUU@aK@kmbXVmJUX`knnK@aU@mwakb±@¯UUÝKUUU@WU@VkLUKU@mUmJUU@WVkL@UWJX@VVL@lVlUbLVKnêÆ"],encodeOffsets:[[116348,34431]]}},{type:"Feature",id:"4106",properties:{name:"鹤壁市",cp:[114.3787,35.744],childNum:3},geometry:{type:"Polygon",coordinates:["@@ón@xVVól@¯zJ@bkl@@kVWLUVmVXbVJnnlLl¯@Xlm°bVlWb@bKVXnJ@VV°nX@@wWVklUK@knVVKmkUKUaVkWkl»nwl°lö@lXV°UVbXKV@aJw@UmkUy¯UUUaK@UL@mm@XaÇkkmWank"],encodeOffsets:[[117158,36338]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hu_bei_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4228",properties:{name:"恩施土家族苗族自治州",cp:[109.5007,30.2563],childNum:8},geometry:{type:"Polygon",coordinates:["@@VKbX@lbUVnL°@VlVnUl@VUX@aVmaXlaUUU@wmaVUn@Vnmmk@mU@knaaU¥VamX_@WUmW@_kVaVKnLl@VVal@k¥@kUW@kUKVUlUVÑW@kÇaU»ValmkUVUVak@aV¯_@WUkmVUlU@aalI@akkVWUaWXUWwWVbÆ@lalIVK@Um@UUW@al²a¯UağÇm@bkk@w@@WaULmxIUb¯@U`UXJmL¯aKXWUL@aknmK@aWUXaWm@I@UÅmVU@aUV@bVI@WkUbXkm@VakwUKULWKXmJ@XUK@mL@KUwVaUI@KU@mmnmXka@»V@@UUaw¯yVk@UUVmmkÛÈU@mWUnmxmlUbV¦UlbWVUL@UUIUmÇKVVbUVVxknLUxV`VX@kJVVUXWaUVVlUnmKUbkI@WULmK@L@LVlLnmUIWV@akn`VXUJIVlUVVbUX@¤mbnLmm@UXk@mm@Uka¥@kV@@KkU@aUKWbkLWVkIVk@UbVlmX@bU@@mmL@bn`@Ln@llVLVk@XVVU@`VXU¼k`VULka@VllVIn¤VU@@blÜbkx@bkLkKn@bn@@b@JUnV`UnVbVKlVXUlbn@°Vx@@bnVbUllVn@VVK@UnW@UVUlnkVÈÞxVbVVIxVaÆ@@aka@UVaU@@ak@Wl@nbVIÆ@Jk@L@VlXnlla@VJnw@UmwXU@aVK°ÒnllnLlbxnKVaV@l¦²nVl@llLx@XVVĶ@nax@U@alXUVaLÈþV°XxWXkK@mLnlUb@bxnLVlVVkb@UJ@xWXX"],encodeOffsets:[[112816,32052]]}},{type:"Feature",id:"4203",properties:{name:"十堰市",cp:[110.5115,32.3877],childNum:9},geometry:{type:"MultiPolygon",coordinates:[["@@@a@w@kV@nbVK@nUla@laÅl@nlVakwWX@WkLaVmwV@anK@UlIXmWkk@@mmLkWlwk@U_mKXwWK@U¯K@UU@VUakmkIyUUVUmanU@mlwk@_mWXaUWU@Ç@U@aUaVwUKUIVkK@UWIXmaV@k@Vm@UnwlUamk@V@ULUamxUJkU@I`WkkK¯XWak@@W@IUVLWJkXkaÇVUK@kUmbmUUUKbkKWUkI@kKÝ@@aUm»nI@mU@UnWV_@aUmWbkLUl¯b@akkk@WkkJm_k@UV±@J@bnU@@WÝIUJVbXL@nlJkx@Wn@VkJmbLmU`VbUL@xVn@XV@mVVnnJVbUx@VnVUbVVx@nbUK@b@bJm²VUlbXzVJVJVbn@@Xmb@V@bVJÈ@Vnkn@°aVVV@XKnalLVmUnnVKVlnLWlXXKlk°XWkLUVVV@nU@ml¯nmbk@W`Å@mbLWm¯UxnêVèk@mbVnUK@kKmXk@@JUIlÛLllnbVnlJ@LULnlÆaVLnV@nkVJ@lkô@²bÆm°wLWV@VXKVXI@W°ÆVKb°UJVIVV¦XKVL@lInaVÝnUl@@bX@nmVL@lVLlVLVUnbVW@xXnbU°¤V@a@kWKUUn@VlnL@UV@Ü»@mX@V_akaÞ@VK¯@kkW"],["@@mUkUUm@nllVKXXVK"]],encodeOffsets:[[[113918,33739]],[[113817,32811]]]}},{type:"Feature",id:"4205",properties:{name:"宜昌市",cp:[111.1707,30.7617],childNum:9},geometry:{type:"Polygon",coordinates:["@@°`U@blUbUVlVknUbV¼Èb@lXUÒkVUVVL@lVX@ll¦k@UbU@kmKULUbl@`nXV@XW`nUbV¦bmb@lV@nnlmnUm@UVnb@xVVVkbWnbVnVa@an@UaVUJXnWlXX@l¦@lKÆXbXV@VV@°¯°xXxXV@nV°UVWU_VWXkmaVnWVkn@lln@lb@UVLXWlnX@aXUmaVK@UXUU@WVIWXXVU@¥VK@UÞa²LlV@kV@UanKma@UVUnK@UVLXyVLknJ@UV@@UXKWUXaV@Vb@mVLnKWm@aUUm@@UkK@UlaLXKWaXI@alKlmUk@wVKXL@m@WWn@UVa@K@wna@aW_XWWkXbVW@k@U¯WWwka@UUaVIVkU@m±@U@@wVKka_@VV@XUVwU¥yUkm@V±ÈUKk»ÇLmmLk@ó£kmWwm@UIkWKXwWU@kLwkbmabkK@VLkmWIUKkUUÇIǫJXÅJULVÇLUV@UK@kI@WVI@UaWmXVVUL`±kÅLmKkkÅ@UaXXxWVXVbUXll@bkJb@bkVUVlnV@X"],encodeOffsets:[[112906,30961]]}},{type:"Feature",id:"4206",properties:{name:"襄樊市",cp:[111.9397,31.9263],childNum:7},geometry:{type:"Polygon",coordinates:["@@@Xl@Xb°WlLXl_@JlVVInwVbVK@@UnlVbkmx@VUnl@U@nbWXJ@VlLUVJVLUxVb@b@VÈ@XVVWbnX@`lkx@nmVnbUVVVzlJnlVbUV@@V°L@VXLWxnLV`l@kxlXnK@nl@XlWn`Xnl@@UVa@VÈK£VLVanW°U@UVU@`VInmV@nV@Xa@aVW@UalkXKblIyÆXnlJXbl@@VV@nklU@`nVKLVKVb@VU@UÈKUVKIlUX@V`lIVbn@nblVVmV@@XXJUVV@knKVn@`@XVnKwlLVmUUU@U@aXL@WlU@UUW@UmU@KkLWaXkWmXUWm@U@nk@UmK@U@UaUVUUKV_@al@namWUI@KUK@aV@WUIb¥ULUJkImK@U@KV@U@a@UkU@K@wVaUwlU@mUULmKUkV@@anIWmUK@I¯mKkl@LUb±lUakLmk@WwUKÝVUIm`¯n@Uk@makJU_@Jma¯ImwUVkKbaUÅ@wWaU@VU@mXIVmmUkJkwm@mIlUKWzUK@VmLUV@VnbmLVbU@@lkU±KbÝV@UL@¦VWUWXUJ@XVWV@VULnbWVbW@kmWXUK@Vkam@kkm@UlmXUnbWlUXV`UX¯VmUU@Ul@Lll@nnJ@LnWmbm@b`","@@kUUm@nllVKXXVKmU"],encodeOffsets:[[113423,32597],[113794,32800]]}},{type:"Feature",id:"4211",properties:{name:"黄冈市",cp:[115.2686,30.6628],childNum:10},geometry:{type:"Polygon",coordinates:["@@VVUnWVXnVJ@U@V@VXV@@IVJUn@V@L@KlIVlVanLVbnVlIn@@a@Kl@@IJlI@aXU@KlKkVblJXUVlU@VbVkVKXn@VlxVa²I@VlVUxln@bJXklaVWnLmÅ@y@k@aI@W@aXIlVVaV@nnlKnLVW@IUa@a@KUVVlI@wXKVV@IUla@lUXwWnnalLlxXLll°@XwVKVaXIlnb@nln@Va@U@k°UmÆUVaXIJV¯ÇUmmkU@WaKmakVm@U@aVKkkmKkVmIkÇ°£@aUUVaVVnKlkXmk@lUVaX@@Um@UmlUXVUVU@wK²¥Ua@I@UVl@UV±UIUÇ°»VkUmVI@a@Umĉ¯V±bŹĖğaÇL¯lmkX@óĀ@mÝêb±WkLn@xXx@@b@V@LW@UblţX`kxWnXô¯¦ÆV@L@JVLxkK@V@bkz°llXz@JUlVla@XUVbVKXnW`XXV@laVV@VX@V¯xx@xULVbUJ@n@LU@VmmakbUK@bIWWUUVkUmkLm@VJkb@nUJ@`V@kXaUaVmmLkUmJ@Uk@U±lkzmJUb@bVUxVXU¤L@JX@VlL@JkLUVU@mnUl¦@V"],encodeOffsets:[[117181,32063]]}},{type:"Feature",id:"4210",properties:{name:"荆州市",cp:[113.291,30.0092],childNum:7},geometry:{type:"Polygon",coordinates:["@@ÈJVlVVLXJlnK@UlLanblaxlK@XVWxXLlJ@VnXxlnô¤l@nKnÈKl¼VL²ÇUn@VlzV¦UxWVU@@U`lbUL@xV@²@@nlVUUJVb@VlbXx°XVWX_VKUwVKVa@UVKUUVk@KnblaUU@wnWl@UX@lÆ@@aIVmUkxVJUbÜ@Uk@WWnk@VVm@I@m@Un@mXUlVlUnJ@knJVU°@@aÆLX@llL@¦nJV@XblLVa²U@UlW@VX@`@LV@@bXJlIXml_lJU°bKÆLnVVl@öVmXaVIĢllUlVnLVlX@@bannxVLbn@°ÆXmmkĉ¯w±Uċ@KÝÅƧŃÝçUw¯m¯k@WkV@¯UIUJW¼kbUwk@W`@¦Uônb@VÆlÈ@VU@£UWWnUÆUnmJkUÇ£VWUI@aUU@WkI@Ua@JW@k£kaWVUKmnkKbkkVWbVmUUmwU@kk@UakUUa@V@nlx@lUb±lUbnnWLUyk@UamUK@mlk@Wb@VXL@x@xWI@a¯¯V@bVn@LkKmL@`XmKmVU@@bkL@V±bk@UaaLKUVIWXamVVbUK@b@Lm@UWkxULWVUnm@UlUX"],encodeOffsets:[[113918,30764]]}},{type:"Feature",id:"4208",properties:{name:"荆门市",cp:[112.6758,30.9979],childNum:4},geometry:{type:"Polygon",coordinates:["@@n@lxlInVUnWJ@nUVV@Xb@xVÆbalLVUnx°JnbI@V`lInbl@@V°mn_VJÞUVLXx@nllKVb²kVa@KlknL°@JVLXnmJ@bU@VlnLVKV@nX@lUKVaXal@VKn@¥°L@UnwbnaV@KV@VUX@lVXI@KW@@IXWV@laVLKlaXUVVnkVWV@lwXblIXWVkVmaU£VaUmVIkU@y@WakKUamU@UUK@kmK@w@@mK@LV¯U@WwkmULamVVUU@IbUKUakmm@UakLmxU@UÒWlULţÿmwkIUm@akÈblW@UVUUk@JW@XkWWUkUKUIlw@aUWknWUUmnIWaUwVaÛaVUIwVlUnJ@bÅ@@kVWk@mX@xVVkbma@LUlVVUL@VUbULVxULW`UX@V@lUXWaXlWXX`@bmb@x@LUb@VmXX@@nWKUL@xVlknkL@bWJXbWLKkb@VlL@Vn@VV@bnXmLUK@nUaU@WbXVWL@VU@@V"],encodeOffsets:[[114548,31984]]}},{type:"Feature",id:"4212",properties:{name:"咸宁市",cp:[114.2578,29.6631],childNum:6},geometry:{type:"Polygon",coordinates:["@@ÞÆLČ@V²°xĊnlWnům@aK@°nJwnVIUaÆJÅ@wwVXW@aV_l@²V°lĊwlaXLwlUkalVVaX@lVXI@aUXJ@U°UU¥VIVKVklanLVa@VÈIVV@nk@aVa@mV_@aK@klKUa@UnKWk@@lU@@UW@@nUWUwmaVIXlV@mLXblJ@kV@kk@KU@WkUWVÅwkLmW@UmL@lULKULak@maUUÝwUJIbKUU@aWK@kUWVkUwVw@mÝ@I@wkW@aww@LU¥kJ@nVJIkVVnkVUkyUIUl@xWUkaW@@°kzWxkLUWmzk@@bVVVb@@XlV@Vl@bVbUn`Wn@WbVVI@`LVbXLV`mnU@@lL@LUak@Lk@WbUJn¦@lVb@xVb@n"],encodeOffsets:[[116303,30567]]}},{type:"Feature",id:"4213",properties:{name:"随州市",cp:[113.4338,31.8768],childNum:2},geometry:{type:"Polygon",coordinates:["@@@n`lwkUmUVWX@lk@VanUĠ¼V@@mX@@nVVVXLmJVLnK@bV@@J@VUn@VaVUUUVWVLV@@Kk_@almaVkUU@WVVUVLXmmk@wUaUKUV@°@kmaUaÈmWmUVklaX@lVnxl@@UnaUk@VUVwVKn@VVn@VbVJUknUmmVmk_VwKUUmVak¥@UVKVIkW@UmIVWkIVkmmLkwmVU@LUU@VVXL@JmLUbmK@UUKmkKUUmVUaUnÇlk¯mJUnmLUaUJUaWL@UkJU@aklkU@¯@KWLUmUUWVkbLUKkbU@WX@JX@@LWJkUW@UVU@@LUmbamx@V¯K@¦mULk@WbUbLkVW@kVVxUb@x@LlV@V@b@VU@L@VLnlJVIVK¦aVJ@XU@bLV@LVJnXmbk@@bU`VLUVVb@V@VnL@Vml@@VXnWVXnWlXblK@LnV@VVX@VkV@XWK@bVV@VV"],encodeOffsets:[[115830,33154]]}},{type:"Feature",id:"4209",properties:{name:"孝感市",cp:[113.9502,31.1188],childNum:7},geometry:{type:"Polygon",coordinates:["@@VnXK@L@°lVlkb@VlI@VXKVbVIVbnKVmnI°lÈkVmVbnUVVlLnVL@VnLVanK@IWKUUV@V@KVnUlxnKlnUlJUXnJ@VlXUJUL@Vl¦UbnVVLUxl`UnnnmVVlnVKbmVX@a°Ý°LaXJV@VUnKVXVK@LnKlLUbVVX@VwVJVn@@UU¥V@@UUK@maUVUkkJ@L@K@UmVUI@JU@W@U@UV@UIWmXUVmUUÇ@UVmIlmnmakK@akaW@UwVUkKVnUlKVwkVU_WKUkVW@UXaWkUa@w@VU@XaW±@IkbKb¯L@WXkW@UakL@UV@UmVUmL@UXWVL@aUVUUUVU@yUUIUa@wUKWVU@kWk¯UkwVKLUxK@nVxUlUUWVUmw@wUUyXWlX¦WbUV@U@blbUVVbXXl@lVL@bk@lxkVVnVx¦`UnkL@V@L@@@xnL@lVL@VnVVblLXb@@zlVUJVnUbV¤bUnUlWXkJWakxU@UXml"],encodeOffsets:[[116033,32091]]}},{type:"Feature",id:"4201",properties:{name:"武汉市",cp:[114.3896,30.6628],childNum:1},geometry:{type:"Polygon",coordinates:["@@nbnmknJVUÈ@@U¥VknmV@VUlK@IkK@UW@IKV£UWVwU@aVanIly²kVl@@VnIlVnKUnVbblWU@@_VI@mlaUIn@lKVnUlVVXXJ@aVLlanbUnV@@K@mVIUaVK@ww°w@UW@UUUkbU@WWX_WmULaVU@WkbkUV@IWyk¯kly@a@UlLwUK@I@KÅUW@űUm@wl¥ka@@_Vw@ķa@akw@kKW£XVUVwVwUaU@VUUxWKkbĉx¯k±Uk@U`@bWXUx@xÆÅIVbUJmxIm¯@UmxnUVVbnJV@L@@kV@bVn@UVULlx°VXllV@XUVL@xVbJVV@zUVVVUVV@bUKWX@VnKUVVnU@@VlKVb@lXW@X°KaLla@JX²Wb@UV@@xVbXlWb@VUXVlXLV`UlUxkLmVUlLUVVxX@lb@blL"],encodeOffsets:[[117e3,32097]]}},{type:"Feature",id:"4202",properties:{name:"黄石市",cp:[115.0159,29.9213],childNum:3},geometry:{type:"Polygon",coordinates:["@@VUVV@VbUxaWUblUVmnKlX@bXJVIlVUxVVVIUzlx¯@VbnL@xx@UVaXKb@XkWU_Vm²klWXVKl@nXV@@wmlK²XaÞén@ôÿ@lWn°kUKmmUÑUmm@wkImWU@UakL@bVLUVċ@bUK@alIXKWK@nXnKmkUVw@¯b@LlUL±Wn@KULUaW@kL@lL@bU`@nUb@bmlU@UÇJ@UUbmKkblUULUJV¦¯V@VWIV@bWJkUW@UbkUlbkV"],encodeOffsets:[[117282,30685]]}},{type:"Feature",id:"429021",properties:{name:"神农架林区",cp:[110.4565,31.5802],childNum:1},geometry:{type:"Polygon",coordinates:["@@n`lIXll@ll@b°aVklKXaVn@bU`mX@VV@nmJn¼V@bÞ@lL@lJXVlLaVLVnVnalV@VLÈUlblWXIKVU@J_@annaXm@KmI@mkk@KVkWWw¯w¯°@UUU@WaÅWkL@¥@kWWXkWmIUVVbm@@bUbmUUbW@UVk@mVkU@U¯mKVUkaW@aULÆVbb@VÅ@Un@VLWl¯L"],encodeOffsets:[[112624,32266]]}},{type:"Feature",id:"429006",properties:{name:"天门市",cp:[113.0273,30.6409],childNum:1},geometry:{type:"Polygon",coordinates:["@@@K@UlKVm_¥UwUmlUkwl@@aUK@kkWWUaVUka@aV@VUXaW¥Xk@WWIklm@ÅxmIVÝUkxka@bWJaUL@W@l¯UULUbkVUa¯bm¤UnÇUkmUUxb@VkXÇal@bVnlJnxŤĀVKXkVÑV@nwlKVbn@nlVbVLaJ@VVUnUbVKlnXxV@°U@KnL"],encodeOffsets:[[116056,31636]]}},{type:"Feature",id:"429004",properties:{name:"仙桃市",cp:[113.3789,30.3003],childNum:1},geometry:{type:"Polygon",coordinates:["@@VK°VkX@@VKbXI@alblwÞVUnJÆwn@lkXJ@XWVzV@xnxVXUVVVkUw@mLVwKVU@Um@alU@@@KUmIUaVUmnwmwmb@aW@UkmKkUkVġkUJWbnUõ@UkmUÅKL¯aVkIk`WnkJ@xVLUVVbUbk@WlXbmVxnxUblbUV@@VUV@nVL"],encodeOffsets:[[115662,31259]]}},{type:"Feature",id:"429005",properties:{name:"潜江市",cp:[112.7637,30.3607],childNum:1},geometry:{type:"Polygon",coordinates:["@@UbVxbXmJVnXVlmVX@bkxVJVLVlXXWlX@@IVlVUaVwVlnÈVVmn£°aVbUlaVUK@mVU@U@VUkaVamwUwnWaXkl@VaUaVUUK@wWI@aU@@K@_UW@kX@V±VUbkKWaU@mI@¥kKkW@ÅK@b¯@UVmI@lmIkVkUWVnm@@V@n@JUnU@mlXXl@@V"],encodeOffsets:[[115234,31118]]}},{type:"Feature",id:"4207",properties:{name:"鄂州市",cp:[114.7302,30.4102],childNum:1},geometry:{type:"Polygon",coordinates:["@@°¥WóXmlw_ŤWkVaX@@K@U@a@WwU@mWk@ULWkX±lUnV`XWl@aWLUb@Vw@wmKUa@°kwyVUJUUVwkUUJWI@akWmLUnkVaXVbUxUVWX¤lL@lx@bb@ĸUx@`@lbk¦@xn²VÆX@"],encodeOffsets:[[117541,31349]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/hu_nan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"4312",properties:{name:"怀化市",cp:[109.9512,27.4438],childNum:12},geometry:{type:"Polygon",coordinates:["@@@n@b@XnJ@k°x@aVUnlUXnV@@VnJWUJVnIVV°UbVVVL@²LUVa°V@aV@nmUXblLXWVXVmVLVK@an_`@X@l°VlXXW`nX@Jmn@b@nV@Lm`bUbn@VUVl@nIVbUlV@LkJUnVV@xVblVUbU@zUKU@mx@xUnn@@WV@lbUb@nVWXXV@VIV@VUnJ@VUz@JWbXllI@VXVVL@Vn@Wlb@lXVlLaV@VJ@XX`kVwVl@bkbUlVXIlnLVamVwV@@nV@XaVJVbX@lwV@n@nV@VWnIVVUÆ@Xxa@IUUKmk@mVIXmWUVJnUVU@anaVwkU@UXa@W@m_@a¯@@K@UVbnK@blIlbXa@WW_n@VU@¯bmyUkUJÇÅ@WU@kWKÅwnm°KVkmankVWnXVWV@UwXkV@mUlLnaVaX@VUn@VnVK@xlnXWU@a@@klakVwmUaV@wmIÛ`m@mVUXmlIXVI@K@aU@UaV_UK@wkUmmUKWXmVkUL@mU_nK@aVU@Ukak»@U@ymU¯UUVKkam@nka@mwkLWb¯mka_VaVKUIUw@kKmU@WK@UnmaULkU@wUalWV¹U@@WUI@WU@_@W@U@mU@WbbUK@Um@@UmbUwWWkk@WUa@anUUwlWUwUU@wlJVUnnV@@mnI@mK@U@wa@wUm@_mVUUaVUk_kċUkVWL@mlU@kn¥W@UwUWV@VÝU@lXLWVUbVLXlVIlknmU@VUJk@@@kVmwmVkxU@@XmVUb@xnKVLl@VxUxkIU`@bWVXX@JWL@bkb¤@bmUUU¯Kkmb@VVUVVn@@Vb@`lnxmblUnbk@xUmV@bmWbUV@VJIl@nVUbK@nn@VbnJVIlJVkXJ@X@lmx@bnnWVXJWXU@UlU@mk@@llb°xIUbnJ@VWbXVmI@JVX@bk@bWL@JUXUK@U@U`n@@Xm@XVW@@nX@@`ImxU@@JUI@KLmK@UÅUUV@VW@¯kUU@UamVUUmJ@nxmLKkmJkwkKm_mKXU@aU@b@Wk@ma@zUJVUmbUlU@xnXlWlXXblK¤V@@nUVVLkVl@Xb@VVKnXKVx@znW@X@@lVK@X@JXbWbnn@JUamLVVXIVxnK@aWUX@x@VnI@WlI@anVIVxkl@lbXXxVVVJVInbV@@ln¦ml@XXVWbkJWb","@@XLVKVXVKUa@UUUmV@l"],encodeOffsets:[[112050,28384],[112174,27394]]}},{type:"Feature",id:"4311",properties:{name:"永州市",cp:[111.709,25.752],childNum:10},geometry:{type:"Polygon",coordinates:["@@lxUXVlXUVnlVĢJVbUXVJV@XUW¯VIUK@klW@Un@nl@V`XUVL@l@Vx@XXW`UnUbxUlVnUVlb@VnJUVVVInJlUVnwVklKnwLVJVV@nIV@nbVa@KVVVUUaKV_nVVJ@_VWnV@n¥lI@anl¥X_VKlwVlULUVVV@U@VXL@IUmn@VU@wmKXUWU@m²l@VIXWWkWUkWlkIVamUXamUnmWUU@@UnlK@XJl@kVUk@mWKXkl@@aVU@UVWUUVaIn`VUVLnw@U@K@U@w@UVmUU°K@UnV@bV@Xk@KVm@amkaU£VWUUmUUwm`UbULkaKXU@kVmU@aV_UWVIn@yXXK@klmVV_kWVUn@WUU@UmaU@wnwWanUmmXkam@UakLmK@bxUUUU@Km¥Va¯@kUaVUlmUU@mUUÇmUkUybbUaXUWWbÅLmL@VaL@WWXUKmmk@a@UUKXW¥kU@VUkxmVkUWbUJnVJ@nVJXzWxk@lVbUX@VVL@`mbUnUnVV¼k@Ulm@mwLb@lmLUK@UamWkK@£Ua@UkJkUmbVlkX@bWbUVnnUVl@bbVK@VX@lbV@nU¤x²Knblb@xVô@l@b@l@XWxnVl@VV@XLVlLUUXV`bXXmJU@@bm@UUkLW@UlUKWUUbwUmL@nklVVmVXXm@@bUKlÆnXkllVUVVL@nUbV@V@nnV@xUn¯U@JW@UX@xĉ@`m@@LV@b"],encodeOffsets:[[113671,26989]]}},{type:"Feature",id:"4305",properties:{name:"邵阳市",cp:[110.9619,26.8121],childNum:10},geometry:{type:"Polygon",coordinates:["@@XIlJIVVK@n@VVVKnLVwVmnLVK@U@wJ@wVIÆ°X@ÜÈUÈxll@kn@VwVaXJWXn@@WVL@UUKVKV_U@@aVKx@UaV@lk@XylbUaV_Vnal@WU@aI@aV@@aVUl@XmUXWaXml@@kk@ma@V_UnUVUUWJUa@kkaWLUmk@@LUVWUkJWkK@¼UnWJIkV@b@JUIm@UlVm@Uw@a@kWXWKUknW@WUU@kmxUkVmIUJUUVmI@UkaUVUmVkwVaVmX_WW@Uw@@kUKWVU_k@mm@@VkX@lVLUJX°WVU@UIVWUaIUġmkVUkWUVWkwWXk`mI@¥kUVUUn±@mXkWknVUVmmU@@XVUk`@Xk@¥¯»mbĉó@mkU@kUKmX@UnmL@lULkKUWUU@bUaUn@Vb@l¦Ub@l@UKmnKUnlUVVbUVn@`Vn@xb@x@VL@nmJ@nU@mmUVkI@xVVVxkXVxmV@bbXVl@XlXVxna@Vn@@VVLaXaV@n@@V@X`V@@XVJ@XV@UºkXVb@xlVVKnbm@VXLV@nlL@VxJVULUb`lb°nXalKnx@lbmn@lbULVV°nV@z@Vl¼lb@VUV@bmLV`@nKlVnUXWVLnnlV@xVLU`VbV@"],encodeOffsets:[[113535,28322]]}},{type:"Feature",id:"4310",properties:{name:"郴州市",cp:[113.2361,25.8673],childNum:10},geometry:{type:"Polygon",coordinates:["@@²zVaVlnVl@nVkJl_XJlIVmnL@mV@VXn@lV@XzV@lyV¯²U@UlJ@XVKnVVIXl@UVLV`@n@JI@mlIKVLnUlVUVVLXaKVLl@nb@WXV°KUnVVL@xVJL@b@LUVVVUVXbmbVbn@@lUbm@x@XVVV@@@bkImx@Vm@Xbb@l°XU¤aLmnL@bl@@VUX@VxnVanLnW¥XKVwnUWXmVIUWÆLVxLw@wVmlU@¥XWUkwlÇn_UwWV@VU°wnUy@aVkVlnL@lVnw@VlJ@bXx@bVKnb@U@WVUl@@Vnbl@XLlK@aVLVKnxÞn@aLlmUaVUm@ÅknUmaUKmVk@mkk@UlWUkVm@w@kUU@WU¯¥@wÇ@aVIlUV@kUWU@UUm»@k@mKVkUKUwaUaUa@kkUWJkImaU@UK@maUzk`@zy@XmJkL@UUJmUkV@z@kkVmK@¦UbWL@a@UbmKmwUKXkVUUkmVkw@UUKmL@WUIWaJW_k@@WmI@mk@WkWULUUVKUUVm@Ub@nUÇ@U@wV@Ua@aL@akl@kUJwó@@L@V@`@J@xnnmV@bkJmUó@nJWUUmU@UV@LkWlnnmVXbmxxV@nbVV@XVm@UVlXU`Ukn@lWLWzm@UJVXU`@bVUn@lWVLlbVKVan_VxnVVVUXV¤bnl@bUn@LWlU@@amU@V¯LVVUn@V@x@V@L@VmxUKUVm_JUbVV"],encodeOffsets:[[114930,26747]]}},{type:"Feature",id:"4307",properties:{name:"常德市",cp:[111.4014,29.2676],childNum:8},geometry:{type:"Polygon",coordinates:["@@lUmkUwUyV@VW@¯VaVmUU@KVUVUVLnaWnkUÓV_@mVU@Ýw@ka@kVmUmK@IkaUamKkXWaUW@WUk@@KVU@aU@L@J@XÇVUKVak_mWkLWakVUbmLUUmlUVKUU@kUWW@UImJ@xkLkKm@@X@óÝ@UUk@UKVULKXkWWbkaIUWU@mUk@WLaUJġ@@XÈÆVIlVnz°aV@Um@X`@XWbkakJ@amLaU@V@L°@@bn`@@XWb@VVlUxmb@bUVmVUIXVWnJU@nnlVLV@JbWzk`m@UVK²VxkLVl@Vn@V°xVKVkVVlUblx@bUÆ@@nVnUllkx@VW@@VkLWxUL@bÝ@kKkVõV@bkXVVUV@VkUkVLkVa@@¯xUxmX@JVb°WXkK@Vm@kVbbn¤xUXkJblxnXÆK²l_@Wnan@UL@bJnIlV@lU@@¯ô@lWȂIVKVmU@aXaV@lwVXn@@K@UVKUUnUbn@lWXlJnULKV@l@²a@UlK@aV@naVXWV_nKlL@KUm@a°U°@VXL@a@wWmXal@k@VLnV@@bl@VnX@mwVa²aVU@mk@"],encodeOffsets:[[114976,30201]]}},{type:"Feature",id:"4331",properties:{name:"湘西土家族苗族自治州",cp:[109.7864,28.6743],childNum:8},geometry:{type:"Polygon",coordinates:["@@@KL@wnK±nnm@WUkÜÈn@n»@mVamkmUl@VnmmU@wUan¯VKLnVWlInyWUI@WWk@KXUn@mnUmU@WmkV@kXaaVaUmIk@kaX@Um@UKWU@UkJWkXa@IVy@UmIUVU@UJU@WXWmU@VakaU@@Xm@Vm@wnwV@VLyV@VakUUa@wUUVmlI@KUVkUamJk@VU@UmVaan_@KmU@@anm@ImWX_WWUk¯@k@W_m`@bULUKUnUWWXkKWaVmnU@@b¯UUbV±K@UKUUVa¯UUmJUVIXmI@UU@WmVmkUV@b¯w@lmI@W@a@m¯LXbmJVLklWL@V@XXmbVVU@@VU²Ul@VlX@b`XxzUmkUVÒl@bXLWxXVl@VbkLma@nmVmULVbmVUb@lnzmbUÒVl@°nLVlJkn@bmJk_VmmkblxÈx@LUbxVb@Vn@JmLVU@nV@¦VbnJ@lVVbkxbm@UxVLV@n`UnVVVkl°zxVb@VU@@ÆlXnWm¦nbVK@XVVUVVl@XKUV@nVL@WnIWXLVKVLlxUbVKXVWbn@@UnKVLVbJU@aVU°b"],encodeOffsets:[[112354,30325]]}},{type:"Feature",id:"4304",properties:{name:"衡阳市",cp:[112.4121,26.7902],childNum:9},geometry:{type:"Polygon",coordinates:["@@lV@XV@mXVlXLWX@l@bVxn@UVkn@VJ@I@alUJXIVm@»LXllIXVVU@Kl@VnXKlb@lVbXIVVUmVVU`@nbl@@lXLVVVKVbnXWJ@VXbWxXbUlVK¦nLVVUVVbbK@ULnK@Un@VxlUV`UnnL@VVL@JV@VUnxnKVbV@@VIVUnJUVUl@nWXllIUaKVbÞLV¼²`V@VIUwlaVmXa@IWanK@U@mkVVUVaX@lnaVLÈ@¥@kkJUWJUaXkaUmwVXJ@_lWUU@¥n_KkamUK@amKnKbV£¯W@kaWan@@UnwlJ@a@@UUU@Wwn@Va@km@UanaWaUVUUVU@K@aKUI@wKUUVm¯LWUX@mak@UKLWbUKVUkUmVUKLkJ@nJ@I@mU_UK@VWkUJmUUL@WkI@V±VU°kzU@Wy@kUm@UWU@@nmKUnkJWIk`IUlmk@mUUkUb±yUX@VUV@bk@WlXL@nVlUlk@WI@kLm@VV@XVmnnVWbnVUblJXkVlXXlWXUJk@±@nXVWVnL@xUVm@Vn@JWK@UV@UUVUVKUkkxULW`k¦m@bkJm¦U@mUX@`UImUU`LVbUVUU@LUbmaU@mJU@UUIKmxkLUl"],encodeOffsets:[[114222,27484]]}},{type:"Feature",id:"4306",properties:{name:"岳阳市",cp:[113.2361,29.1357],childNum:7},geometry:{type:"Polygon",coordinates:["@@@wUklmUUmU@@UVm@wUaV_mmUKmwkIkJmUUnm@@UUbUKUmÛamm¯xVLkbÇÆUVUzkVUlUUKWLX¦W@VUUUaKUbmLKm@akU@amVaUUVIVWkk@wk@@xmLlmÅwmbVlXlÝIWVkK@kkVL@VWKU@Ublnam@b@bnW`@XUJk@UUWKk@UKnn@xmLUVm@kbVbVnV@Vb@KnVLWXÆVĢ¦VblnUJWz@ÆVóUVbkVaÅx@¦lVUbVVknWKk@wKVUÅl@zkb@`m_mJ@xXmbVb@llV@n@llbXLUXalUlalVnwnLVKlVbX@@IV@blJ@bVL@VVVUXȤVnkVÑXmlbnVKkÑÅ@UmaVç@±XUlIxlV@VaX¯lUVVUVJnV@°°n°Vxĸł°¦b²¦lJ@U@aUK@kUm@_m±VIXal@Kl@bV@KK@km@UmUUaK@_UJaXU@Xm_VmUk@WUk@kU@a@m@UaUUU@al@nyXXWWwkly@¯n@@bnV@k@mVIVlUUmlUJUwIbXVaUal@Kb@VKVkXVl@VkUU@ylUVVaVL"],encodeOffsets:[[116888,29526]]}},{type:"Feature",id:"4309",properties:{name:"益阳市",cp:[111.731,28.3832],childNum:5},geometry:{type:"Polygon",coordinates:["@@ÆxXL@lV@ĢVIbXKl@nVV@XVJlbXalXWLVKUVLl@VV@ôÞ@@Wn@lLlK@wnIVJX@VX@lVVULVnkVVnKValUXblKnXl`UbVLÈU@W@IKV@@bUV@L@lXV@VXXblWnLVblb@JnLVUn@llb@x@ÞUV@nU`VÔmlXmbUKUVUV@LVVUnUb@°UX@UVzVxnlVkVnlVnaW@wnIn`@_la@ykÆVULxl@XLlmUUVakU@¥ÆwblUUaôVU@ÅXyVImkUaġ¥ÅUWXKmU@La@UmUUUalan@VUnK@wmmL@VlXLVVl@VI@WX_m@a¯mKUkwW¥UK@_UWWLUVkUWL@WUIkVU@JwkLUUmJVI@WkXm@VmkKUIU@mmm_@VUV@kJċwUU@KUWkkW@IWW@km@klwkWVkkUV¯m@kWLU`mIkmkXm@@`@L@xUKWkU@VL@JUU@mbUKVa¯WVnL@`lXUVkU@xW@UbUWVU@UJ@lnU@mnÈmVa@bULwUb@@VkxmUUUVK@IUmk@akm@wmIkK@bVWXkm@wULUmm@UVW@UbmbkKVnU@WlxVU@UXmWUXmlnbUl¯Lmn"],encodeOffsets:[[113378,28981]]}},{type:"Feature",id:"4301",properties:{name:"长沙市",cp:[113.0823,28.2568],childNum:5},geometry:{type:"Polygon",coordinates:["@@lVUllXkx@lln@XX@JlXXlV@LVVČxlI@VU@Un`nnV@VJlLUnn@lW@XUJnIVVlKx@IVlUVJ@XXKlVVUXKVX@`VLX¦lxVnL°an@bkmVaV@XL@UKlU@llLXUÞJWkUknaÆxnknK@w@l@xllUXUJVVUbn@blV@bnLnKVaLVbVVUX@W¥XKVLVVklUVyUVÈÅlaUK°wnnÜbnVVLaVV@n@VmnVlIlJna@Valkn@na@amwm@UXwK@aUUVUUaVawWK@kU@UaW@kKUU@kW¯XWan@kmmÅ@@I@U@KmLkaVUKkLWVUk@UVmU@am@kkk¥UVUKmaUb@UbI@aKkkWm@W¯K¯b@VmaULVxUXlVk@UxVJVbUb@xUL@ULWWLĕmxVVL@VbKUwaŲWwX@@WUWLU@VbkV@aU@@VUnmJ@VUn@VLUK@UmUIk@UÇmU@@UW@J@LbUmVI@aUmW@@bkXUx@lmLUbm@UbkJ@V@XmlUbkKm@ma@kUaVU@aUK@mImJUIkVUVUakbWwka@UWKkLUamKUXm`Å_UULmaU@@lUV@X"],encodeOffsets:[[114582,28694]]}},{type:"Feature",id:"4302",properties:{name:"株洲市",cp:[113.5327,27.0319],childNum:6},geometry:{type:"Polygon",coordinates:["@@XUnwĖKXXVK@VK@wVaUaUIVwl@kUVWUwVKnb@U°a°LX@XnllL@bJVa@VanbVLUV@al@@UV¯ÅÇ@Ummkw@¯yVwnUVVVUkmWVnKVUa@WXkVKn@lUVUVVVXIlV°VnI@VlKnV@mwVm@LXKWkU¥wWw@k@mX@KX¯V@VUVa@VnKWkV@VUkm@aWa@wkUWwkmV£VÿXUVL@mVIXaò@nW@aU@@am@aUUUmXmWUk@nUW@_maVmwUkamaUL@awW@akI@UxUm@kmKUklU@bzVm¯xUVU@XVxm`kÈlxXVW@¦kVUn@xxKUwÅKVXUJWnXmVUxWL¦XmmKbmUUwW@UV@k@VLnlbLm`@¦VVkX@`WIUxVnlbWVbXIVlI@l¦Ç@UKmbkW@UbUVUl@n@VmLXb@JWbUnkbVxUJUxWXXlWL@V@V@XXJWxzUVVVVKnXW`@bkIUlnLVJUbUIWVXlWV@XklVbnn@xl"],encodeOffsets:[[115774,28587]]}},{type:"Feature",id:"4308",properties:{name:"张家界市",cp:[110.5115,29.328],childNum:3},geometry:{type:"Polygon",coordinates:["@@@InWVw°w@@blUKlUlVU@VUUUlW@aöUlUlLÞ@@aVKXwlK@UX@@UlwkVkUm@m@ÅV@akwVaUkUUlUL¯w@UUm@UkKlw±UULVn@l_XyWwÅ@VUUmJUXU@@mmU@kxW@UaUIWbU@@mU@UxnUbmKkWJkUVal@aUkUxlW_@WUIU@bkKWUJVnUbbWblU@nl@XnVmV@nmWV@LXl@XJXVmzkJUXmKULm°Vb@xnVmnUk@VnnlUb@nm¼m@ÛÇVl@Xmnm²mL@xK@LUl@nULÆx@V@VXVWbXXl@nLlm@bVKXWL°bnU@VaVU@mVwJnwVK°zn@VVba@Ċ¼"],encodeOffsets:[[113288,30471]]}},{type:"Feature",id:"4313",properties:{name:"娄底市",cp:[111.6431,27.7185],childNum:5},geometry:{type:"Polygon",coordinates:["@@lLnJ@xln@bnlV@JLVUVnVlw@U@VaxVK@abnUmÇnV@km@I@VUVVXVaX@@wlVVUkW@_mKXU°UbVLnaV@V@IUKV@XlVL@w@K@_n@lWlnnJV_XK@l°nU@WVU@kV@nbVKVl@nLlLXU@lmkw@nW@UKVa¯IVn@@aVUUKl@nXVKVn²aXblKnLlmVI@KUU@akLUaVaUXm@a@wVUVKnLnWlXln@@U@anUVm@UInm@IUK@UmKVmU_kVUwm@@VmLK@VLaUaVUUUmK¥ULkVWaXwWa@UXImWUaULUUWKk@WnXbWVWnk@UV@bU@@bJ@bV@XkmbUU`VbkaWz@klU@b@VwUL@bV@U`ULVL@VUK@Xm@XWWIUbUxm@@lkkÇwVÛÇW@¯ÅUJ@xIx@@VULmKUnUxmKULUUm@@ULUJkIWJ@b@LJUWkJWnUV@nnÜ_nJxU@VbnUxlkb@l@"],encodeOffsets:[[113682,28699]]}},{type:"Feature",id:"4303",properties:{name:"湘潭市",cp:[112.5439,27.7075],childNum:4},geometry:{type:"Polygon",coordinates:["@@Æ`n_VWnLVblKXL@VlbXxlaVbUVlUVJnInJ@VL@bUVVb@lnbn@lLVank@W@UlIVan@VanK@kVwlW@aX@Vn@bUJVna@KIX@@VV@nVÈl@VJn@VVLK@UVm@UnIVm@UV@@blUUaV@XKV@XW@XxƱbVxLUa@UKWk@wmmUalk@WXUWkXUVJVaUImKVklJ@aX_mWULUUVUyXwWI@W@U@UXKWkXWVwU@±_U»ÝKUaLVbkJkWmXk@UVVmIUVJ@UU@UamLmwUVU@mnJ@VUnmV@b@Vm@kkWmXmKULUV@x@bWnVUbVblK@bVV@LUJknmKkLWa±bUmULmWk@VLUV@bm@U°JUbVLX@@mlxkn@WVKkmK@k"],encodeOffsets:[[114683,28576]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/jiang_su_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3209",properties:{name:"盐城市",cp:[120.2234,33.5577],childNum:8},geometry:{type:"Polygon",coordinates:["@@n@°ĀÞ°@¦ULWKkx@bkLWb@lUlVXXJVbnUKmxXV@bm@@XLÞܦXlVnmzVJ@n@²ÞôkÆÞaȰĉwnljÜóéVÛnĊīČljĉ@ō@KÞUlU@kklÇÈÑÑlġXɛ@UġaU@U_W@n@kaUL@VW@kKmkUV@bkbWW@bkzma@JWI@KUKUL@U¦`@XUJU@KmXw¯KXkmy@aUIWJXXmV@K¯UU@@bVL@¤VLXbV@@JVXVK@JVn@bkKmakVVXUVVVlI@`U@nzVVb@¤n@@UlKXLVVI@V@nV@V@ÈUx@óVōkÅWó@mU@bk@Ýwk@WbXxm@@J@zV@kVbVnLWVUXWUXUWLU@Wl°z@VkxU@UVWIxWJkbĬnW@@bUl"], +encodeOffsets:[[122344,34504]]}},{type:"Feature",id:"3203",properties:{name:"徐州市",cp:[117.5208,34.3268],childNum:7},geometry:{type:"Polygon",coordinates:["@@XKVX@WnIVx@K°Lnll@@I°KnVaU°x²mlx@VanU@ak@akmV@@w@Ua@aUwVwUw@w@UK@£kaĉlóIÇVk±@@kUKmVkIkxW@Ua¯UUm@UVI@WVIJV@@Um@UanaU@mI@J@XV@XaVlkXVaUUWLUyVIXmWak@XkJókJUL@KWkk@ULU@WalUIkJmImkVbV@lV°kXUKWKULUmb@VUlVnb@VV@IVKUUmU@ak@@bmV@xklUU@UKmV@nJVbkXKUamLUJ¯UUVmIbVVLl`@LLU`m@kXUVU@VlxUK@xkIWbUKx@VkVVnb¯@@U@xkmbkLÇKb@@XnJ@LmVkl@@XlUVkxakVVb@bVnUbU@@xVUVb@nIĊ`XVVôJ_K@xlU²KlkU@VaVVÈm@kVUVmnamUUaVXIVJ@ç@¥nkVLn@@XVK@VUX@JVUV@UnVJVLUJVLUVlnIbKnU@m°VanI@anVKVLanlKblKÞk@¦@¤@VKnLVKLKVzlWLX@VmV@VbnU°@UalkWXLVUKWkUUW@£Wa"],encodeOffsets:[[121005,35213]]}},{type:"Feature",id:"3206",properties:{name:"南通市",cp:[121.1023,32.1625],childNum:7},geometry:{type:"Polygon",coordinates:["@@VJ@bnzWl°LxnW@LVVI@W_V¥@VKVL@LXJI@nbly@aXXla@aVUnllLX@@UVKlb@@mXV`V@bĢlkČÇÆȘ¯wnĕVĉVÿUƒUĠŦğlXÑVǵ@±ōLʵĖ¯lÇbÝÞ¯xk@Çkķén¯@ğġƴǫ@kVVlUbL@xULÇóLUl¤@nkVV°VLkxVb@laUXUKWĖklVX@¤UUkb"],encodeOffsets:[[123087,33385]]}},{type:"Feature",id:"3208",properties:{name:"淮安市",cp:[118.927,33.4039],childNum:5},geometry:{type:"Polygon",coordinates:["@@nźUôÒɴèl¦nĖVkbmX@xVlVL@xUb@bUJVnUxlKVLÈxmzXV@lW@XVb@bÈVxnbVIXa°LaÆVVaXUlK@aXIÆVlXKVUlIXalK@alwXLVK@¥Ý¯¯ÿ@mVk@aX@mīlaXIwXJVUV@lw@U¯ybUaUġUÅaUKVknaġm@kUm@wÆIV±nLÆwÇnUUk@ƅÝU¯JÝI¯¦Ul@b@@VVL@l@LLÅmL@b@UaVaUWmLUKV¹KLWKX¥WI@mXk@UmaUVUU@VmL@WbkIUWUmVóIkbmm@UbVLUxmJkU@bkJWbnXU`WzKUÞÈlVbLmx@kè@Æ"],encodeOffsets:[[121062,33975]]}},{type:"Feature",id:"3205",properties:{name:"苏州市",cp:[120.6519,31.3989],childNum:6},geometry:{type:"Polygon",coordinates:["@@ôèĊVnX°¤²lxƒÈÜ@²x@J@b@X`nIUÆUUV@bl@VVnL@L@xJ@X@blJXnW@@`XbWkV@UbVxXUxkV@LóxVbUVW²VJĸklUǬ@ĢƳĠ°@mƒī°»ÈÇ¥ULUU±a@bU@¯U@KnImUVWUkmXUVU@lIVaUUVWKUbUkWKU¥n£WakJUkULK¯LKkVIn@VaUVUUUkVk@U@amUkJ@UUlwX¥W@@UkVmk@JUakL@kk¯ÝmJUn@nmVXlmbVVkn@UJ@±WUxV¯a¯KōbżÇxUxUUlWL"],encodeOffsets:[[122794,31917]]}},{type:"Feature",id:"3213",properties:{name:"宿迁市",cp:[118.5535,33.7775],childNum:4},geometry:{type:"Polygon",coordinates:["@@XbWnUJVzXKVVUbWklUWbU@@W@IJ@nVmbVbn@@V@UIUJ@XUJ@VVn°VVbX@lwlJnUVL@l²@lÈUôJĊklb@¤VL@@xVxUxVx@bVb@@xU@lnmnXmXLVmV@X@lxVnVJôLLXax@b@@KVL@bn@@m@@alLUUVaU¥nIV±I@mXI@aWWXU@LlUXWW_XWmaUwÇ@aaWUX@@kWUynÇwUKkLVwUmVI@aVa@wUKUk@wWnlaUmĕk¥ɳçóÑŹVmmzkVmm@a@Iók@@LWU@`WbXLWlkImJVn@`nXVbXmL@Vn@l@nUVl°Xx°U@LVĠ@z°@¦UV@Xn@VJmV"],encodeOffsets:[[121005,34560]]}},{type:"Feature",id:"3207",properties:{name:"连云港市",cp:[119.1248,34.552],childNum:5},geometry:{type:"Polygon",coordinates:["@@@lzXxmÆV@@¦@l`XnlKXXmKnLlab@xmbm@kL@V@Vl@@VUXJXmb@@°Æ@èÈzlW°XĢJlÈ`lInbWV_@m@UUķnôw°ÆmnaVVÛVmĸ»Ģw±Ý@@mUInyUmWkÛ¥ÝK@Wn@@aWUnwVLmUaWIUWVk@kkJUVWLUkÅWJ@bkLWVUbÅUb¯KWbUJWXX`WXkV@KWVXX@bWJ@nJU²mJV¦UbVVkK@b@@nm@@aUK@L@@awWbKóKUIUmkwW@U@UnWKnmWn@bl@bmVUb@kw±n¯wVUb"],encodeOffsets:[[121253,35264]]}},{type:"Feature",id:"3210",properties:{name:"扬州市",cp:[119.4653,32.8162],childNum:5},geometry:{type:"Polygon",coordinates:["@@VUXblVVVb@xV@kzV@lwVLUbVV@VU@VbUblb@nkĶ°IÞV@ƆVlmVÈÅxmKU²ÅJ@xVn@lĢnmbUlVLÆbĢVVbVaXk@VXKVVWXVWXUmKUaWaU@¥@£XWUUV@@ynam_VWkUVUna@ÆV@mnkWmXkWUW@k@@akkllWUI@UnKl¥I@VVma@a@I@U@a@anK@UmK@ÅVUnJlkI@aVwka@mVIUW@UWL@WÅbmIULkaUWUxkLUKWlXL@VImÅVUmĉLUól¯I±l@ÒUbVbUVVXUJUnVV@lnbl@"],encodeOffsets:[[121928,33244]]}},{type:"Feature",id:"3201",properties:{name:"南京市",cp:[118.8062,31.9208],childNum:3},geometry:{type:"Polygon",coordinates:["@@k@ma@kUUVmVIUWVUUaVa@Ѳk°Jôk@Wmk¯KmX¯aUakKWU@XULXaV@@mUaVUUl@VmkaUXm@WUUna°IlmVmIUW@Uk@@aV@VVX@VI°»nmU@VKVan@m»UaU@U_@WlIUaaVaUala@¯n@kaUkUUWKU@mwkUUmmL@K@LmUUVKVÅImUJVkVVLèVLVU@WLV@nVÜULVUL@bW@XbWbkJUUVUxVXmVk@WUUkVmIV@nbnVWbJUkUULa@Jma@XkK@VVL@L@JLUVU@V¼nXlbm@kbUKmn@lVb@VXXVUV@b@LVbÆxXbl@@lV@UVV@XVK²VlI`UbVbUlVVn@WXn@@VUV@@KmbVLXÒLkKV@nX@VVUV@bnVllbmnbIWVXU@`lLlknVnmlLlbUmVInK°nUU@l@VU@Vn@@alI`VIXaVaVa"],encodeOffsets:[[121928,33244]]}},{type:"Feature",id:"3212",properties:{name:"泰州市",cp:[120.0586,32.5525],childNum:5},geometry:{type:"Polygon",coordinates:["@@lUU@@y@In@WwXal@Þxl@@anVô@ÆXlŎôU@Vw@ÇUU@@m@UJUUWKkL@Vm@@£aUUmyV@@_kJUUVUUWlUnblL@aUmI@ULUW@IU@WaUK@£UK@aV@°V@LnUWWXIlaVV@£UWlkXĕVLVWb@kUalwUKU¯lU@mk£VôKÈVK@wKVaUkķlUI±ğ¥ÝUŹ¯ôm¦ĸ@XXK@VVXUJ@nlbUx@blJkmIUV@ÆnL@VmL@b@b@V@J@bnbU@UJk¦mL@VVJkXkll@b@@lXXVWlXnml@nÅU@mbUVlVUXn`mb@zU@VVWX@¤¦V@Xb"],encodeOffsets:[[122592,34015]]}},{type:"Feature",id:"3202",properties:{name:"无锡市",cp:[120.3442,31.5527],childNum:3},geometry:{type:"Polygon",coordinates:["@@nLÒlxUVkLam@kVWUULUxVVVbUV@bVLUnnźÞVĠ¦XVUUaôw@KlUVwWUwVa@lUXWa@_X@WmkI@a@WI@w@KmKUUk@@aVUVVÅmJ_@W@a@I±wÛ@ƑÇkw±¯£mWĉUóçK¯VkUWK@XkV¯UWabmUaUUblln@b@xbXWX`@VxUblL@bn@Vb@`m@XbWnn@l¤n@xnVlUVLÆWkV@VbÞJ_nl@nKVU@aUU@mVk°WVLUV¯bVXbXlVn@VmL@xV@bl@nW@X@VVJ@²VJVU"],encodeOffsets:[[123064,32513]]}},{type:"Feature",id:"3204",properties:{name:"常州市",cp:[119.4543,31.5582],childNum:3},geometry:{type:"Polygon",coordinates:["@@LnxUbVVL@xnnWnn@VVXn@yImx°La¥n@VkKVwW@nXVJ@b@UVn@UnUV@Lb@`VLklVÞnÆ@VaXLlÈJmmVUK@aVUUaUUVwVKXVlUn@blKVUkwÑmKUVUI@±UI@U@WmX@k@aU@wnK@UUmWkaWU°aVUUK¯XUl@nVV@bUVmLk@m`ÝIUaU@lÅXUKkVmU@wmk£m@XmWan@@_Uam@@akKVaUw@W_XWa@w@akmm@mL@UJmnUK@@XnJWLkKUb@VxkWLaWVUImVULUK@L@lkLVVVllbm@@°kbVbUbbVbkJ@XV`V@Vbn¼"],encodeOffsets:[[122097,32389]]}},{type:"Feature",id:"3211",properties:{name:"镇江市",cp:[119.4763,31.9702],childNum:4},geometry:{type:"Polygon",coordinates:["@@VĊKnVÆUnJ@UWKXkVLlKVwXVlbVKnJÆaķn¥°óÇIkWKUbÅ@mUÝlkUK@_a@KVUVm@mVU@@aUIW@mXUxLUlm@¦bK¯nwJzm@UW@UmmXmm@wKUUVamwKm@UbUL@Vmn¯¼JUW@UUU@@bl@@VVXJnnUk¯JmbVVXn@VWlbUnk@VVUVb@nU@WbKWV@XVlLVb°bnW°Lnl@X"],encodeOffsets:[[122097,32997]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/jiang_xi_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3607",properties:{name:"赣州市",cp:[115.2795,25.8124],childNum:18},geometry:{type:"Polygon",coordinates:["@@`l@Èbln@KVLl@V@bÈlnKXkVlVL@lJnb¦VKVVnXW@w°@VUmlnUV`UbVUV@xnKVI°KXKVkVL@al@XaLVlULWVVVL@bx@VXVmb@x@VVV@nn¤lb°b°KXXWbX`lbXxz@x`VIVUnKLxWXLVKVbVLVU@wnW°b@nalXmXVJn@U²mKkVlU@@xlnaVmlKn@JVLlnVl@XXÆèVlUX@xVLXVb°W@wnUWmXk@KLVwUmUkUKUw@wVaVK@k@WnkUKWkwlmXL@KVUlLVKXmWUL@aL@malaVk@aaanX@VVUblbJnXaVwn£K@UWmUk@UaWIV@bJW@KmmU@aUUUkmKkVKlUUnKVUlVaV£Å¥WUUK@UkUUw@m@mIkUUWLK¯Uw°¯@wUKUbKm@kkKUL@UUKV¥U@manw@k@U@Wm@@U@WwkmwWaUU@UUmV¯kw@@kmkKkUW@UK@ÅV@XWWkXa@Ul@Va@KVaUUU@aXwla@UkVWaXk@K@lmkUmV@Vmbk@»XI¥VUkVUVU@anKVUKUalU@wX@@a@K@ÝwL@UnÇlUIkJmn@bVVb@VmnkLV¯U@±lIWm@kaUI@aÇU@K@KUIkbWbJUIUyX¯UbU@méUUmUkWKxWIkJm@V¥U_UJUwmVkUU@@knwm@UmkWJkL@n@VW@@U@knm@kUml@xÅx@@XUJlb@VXJVxn@lbV@lULnV@VlnV@bWV@bXL@lVLVbV@blLn@VlK@xln@bX@laLVbnKUVVbKlXVVkxV@nnVUblV@@z°WWkbIkWL@LUJ@bUI@b`@UmI@mkK¯XWmUV¯@UUVUUam@@VULWUJIm`IUJKUkW@UxnWbnnmlXbmIUVmV@Vnb@VLUKWLnÒVVV@VUL@kJUV@bÈ@V°@XVV@l@xUz"],encodeOffsets:[[116753,26596]]}},{type:"Feature",id:"3608",properties:{name:"吉安市",cp:[114.884,26.9659],childNum:12},geometry:{type:"Polygon",coordinates:["@@lxnb@V@bV@ln@nlIn@blVXKnk¼@VUKWL@bL@`UXU`@V¦XLĠ@lJ¦@nV@l°nn@mVXna@nbKn@lIV@VanJ@_lKVVnL@LK@Vn@VbUVanKlLnbnJVbnWVnVVanI@Vb@LbVKVanXVbVJVU@aXLllbôlƼXxVLVK@Xn@xnVVVmb@LnVVKVXV@@mnaVXUVnVK@_UaUmwnKV_anKVL»K@¯ÝU@U@kWlUnlknKVnaUkma@UIUwl»Åw@VwV@nn@ÈXlKVmna@kVw@anm@n_WWk@mUkUK@ImkLUnbkm@wV@klUnLV±m@UInWkWmb@¯amX@xUVUKUaULWKXwKmLUVUJ_@wyWwkaW_XaWW¯L¯akam£@mUU@U@wnaWU@Uw@aUKUXUVKUkKWbk@@bUKUlWL¯LUJmLwU@UVaVU_VkmnUV¯@@xXmWUUUL¥makI@UKUkWlLkmÇ@aUk@UKL@kmÇak@_VlkL@`lbnlLVanLnbmVÆln@kJlbknmKUbÝmmwULUK@bkLWKULUUma@Kk@UV@L@llbVzxUxnl@bVLm@IVJXVlLV`@bn²@J@V@Xmbñ@WbUJ@bm@@LUĬU¦lV@xXb@blnUV"],encodeOffsets:[[116652,27608]]}},{type:"Feature",id:"3611",properties:{name:"上饶市",cp:[117.8613,28.7292],childNum:12},geometry:{type:"Polygon",coordinates:["@@@VI°`nm¤²@bVJUVVXUl@Vmb@xV@XbmVV@lkLmbn`VbnU@VaUnbVllUXVa@w°VW@_VWLnVlbLVbnlKnVK@IUW@_@am@ÑUólK@U@WU@VwU@UI@aUUaX@kwmJV@yX@kan@mkwVmmI@aUU@aUUW@kVkV@@anK»XVWnIVUl`@_W@wlUV@UWKnUbn°InJlUV@VnIbWn@VklL@l@Vn²m@U`kI@bWJnV@°VXnJmXVmx@VVL@bkLmWULUmU@bWXb@llnX@xkxVVnVV@¤nLnVxnJVXX@bn`VIb@blmlLnaV@blWXnlUnbl@KVanUVmm_XK@kWWnaU@UnaWUXaXamUkKmXUWLX¯WakKmnUWwXa@KW_aXWW_@WnIVl@XULnWVknK@ImyUUÆbXKÛ@W@IÆUnVÝlkVK@mUIVwkUVaUm@aVIVyXIaÈwmmk@UnanVUmÅaó»lwW@kkUVmUK@WKLUmWULkamKLk@Wa@wk@UU@U@mbUIWVKUXWmkUmVmU@LkakKw@w@U¯UUn¯l@bmn@xkJWxkL@VkI@mkmJUI@V@b@VVxnbWlkÈkVLbkKmVL@V@²nxWkLUL@xlKVxbXmVnWJ@Þ°@nxUKUw±`UImVmnU@kalm@akwU@UUJmxU@@U@kU@Um@@KnVm@kKmkU@@WUnkLWxkVUwmKmLkUbmKUbV@xUnkJ@n±UxVXUWJ@LUblUnm@W@nknUJUVm@kXllknVbÆKVVb¼V@Ul"],encodeOffsets:[[119194,29751]]}},{type:"Feature",id:"3604",properties:{name:"九江市",cp:[115.4224,29.3774],childNum:12},geometry:{type:"Polygon",coordinates:["@@WUkVUkmaVUb@mVUam_nalK@kUnUWaU@@wna@UVkUWVUUI@a±n£m¯_JU@ĉ¦Ul@UVKmmLlm@ğ¹m`Uk¯@@UVK¯@UUK@amkmKkVVUa@UkUKUaL@VVXUJ@n@WUbnVb¯V@LÅlÝIJÅkÝm@UaWUU@UmUXmmwVUUKWUX±mUam@kWzUaVmÇw@aÅLmKXUWKkL@W¯IwVwlkUJ@Um@ÛÈWKUxWkaUU@KkLVl@UKUX±KUb@nVVUbUVmaUlUL@aUL@@nUlWzX`@V@lx²@Vlb@bVÞ@°nl@UxVL@lUbVV@n²xVUVmnUÞbaJ@IV°xnbl@nbÆ@VwnK@VnXlK°xnUlVXV@Vl@L@lk@W_XK@KkWxUL@JnVx@aX@VVUaIXlmL@bVVX@VbnKa²XVWk°a@UnV¤nbmLmW@XbmJUbVLaÞKL@K@U@aVKlbV@nXlJxV@VnVÈÞKôbźĕČmV@Ċ²xÆIV@Þ¦ĸ¼ÞVlVÞnxln°JkLXWVUVUVwnJVI@yn@lXlaXmWI@w»ma@UmK@akKkXmW@_kaWakKWk@@K@IWkUa"],encodeOffsets:[[119487,30319]]}},{type:"Feature",id:"3610",properties:{name:"抚州市",cp:[116.4441,27.4933],childNum:11},geometry:{type:"Polygon",coordinates:["@@°V°UnÜ@n@lnLlV@bV°LlnLllVzVVXlVV@@L@xX@WlXm@UVL@V@n°kVmVUnKlaXxVbnlU@lVVnaVI@aX@VJ@V@bb@Vb@X@lUL@@VlIVm@wUVanLalVnKnLVxlUXwlKVm@k@Una@mWIXKWUÛVk@a@UVWn@@kl@@WXlW@_Um@UVK@aLnalInWV@@xnI@¥Km@kKmnk@mlI¤laXbVblknV@UKXVlUXa@@Unw@±mU@ak_±a@UJUIVKW_Xa@aWUK@mmUVa@IXa@UWmannlmX¯WKXwVUVw@XUlK@klJXa@kkmm@Uww@¯W¯kw@WmbULaUUU@mVUUWmkUbKmkkK@akU¯¥Ulm@akU@m@KVIVV@KUkUVUkaUWbmIkaVaUU@mWbb@bUlkbb@nK@bKXVWnULkKUV@LWKknlxXVLml@X@lULUb@xVxVLVlVnUxK@LWlXnmV@x¯XaWUUK@wVWUkÅçm`@mn@bUx@lmbUnkLÇWm@mU@Ux@Æxk¼VxVJ@nbVlmbUmLklmkVlX@VV@°Þ"],encodeOffsets:[[118508,28396]]}},{type:"Feature",id:"3609",properties:{name:"宜春市",cp:[115.0159,28.3228],childNum:10},geometry:{type:"Polygon",coordinates:["@@@VlbnK@b@JLlUnx±ĀXxÆWX@l@V@@blJ@nX@xUbVVUbVV@bVmnmJ@bmbm@klUbLmb@lVb@xUX@bVVVbV¤@LVVbXlVwLXÜÇn@@VIlVkUxx°J@XlKXLVWnLÆK@bÈxUnVbylXn@VbnW²XVLVVUnxWnnV@VVVXVbn@ÞÆlIÞJÆk@K°UUamVa@UUU»@wV@VkkUKUVW£U@UmW@@aXkVUnVlKVVUUkVmU@kWaUanUVVamIX¥W@@aUaUVW@_mW@UnIVVn@VbVm@bVL@anKVUkWKUXVIkx@nabVKb@nVJ_V@VwVUVVXUlUUaV@X@VblabnKlkVaXa¯@m@UKVUn@WXkW@@w@KU@UWkUUUykkmKk¯KU@akUmK@k@mmÛ¯V¯U@L¼UKmLbU`mLxVnVb@`LmUVUUWmb@nU@UWULmU@KnaUUmUwmJ¯IUJWIkVkaWVUIUlWaUIUVkKmbUIÒlVUnn@VlLUJ@bUX¯@aWVUKUXKUbm@UwKWa@a@VkUWn@Uak@mbXWJXbm@mLaWVk@wL@WmanU@knwWmkaWLKWUXaU@¥lUVVVbnw¥nKV»@aUk@a@UJ@kmLma@mbUWnm@ULǺ@LXnmxUm@UbkbW@@akLmWk@UXmJmUkV@VUXVlULmKUxkL@lmXnJ@Xl°Vnb@bU@WbKUX@VmKUX"],encodeOffsets:[[116652,28666]]}},{type:"Feature",id:"3601",properties:{name:"南昌市",cp:[116.0046,28.6633],childNum:6},geometry:{type:"Polygon",coordinates:["@@X@m@VIUW@UKVbLlV@VVbUlUnLnl@bVL@V°UL@V°@Vln_Ġºn@knKnLVU@VkĊ¥Vk@U»UaUÅLUalmkklWn@VUVIlm@mXn@VmkVa@KXIVUWVw²@m@U@VK@k@WUa@a@aU@IUW@@bUJmbUU@kkVmUaWwkbmLUVUnlWbUbklmLakbUaW@U@VbkVWVUUUVUx@U`UI@maULamb@lwJWUVXLlUVmL@bUK@aUnUam@UUmJ@VnX@`UXVVb@bX@W¦nJUbUmVVbXb@lVUnVlVUUkLmUUVWl@bX@VnV@X¤VUVLllUU@@x¼VV@V"],encodeOffsets:[[118249,29700]]}},{type:"Feature",id:"3602",properties:{name:"景德镇市",cp:[117.334,29.3225],childNum:3},geometry:{type:"Polygon",coordinates:["@@VVX@VbmzxUlU@mbmL@V²xVbUVVblbX@VkVykValKVI@bn@n`lVWnX@lL@WKnVIVa@¯nK@alIXJVIVWUwn@nUnK@alI@a@anKm_aW@UWmIUwmmK@£UUmUUlwwW@km@kWaXaV@VnVKnXlK@aUK@UnwWUnmIUW@¯mUXI@alJV_n@m±@U@kkKUlm@XamJ@UVUkmI¯JmamVXL@VUkV@xX@`k_UVmJUXW¼mL@bU@UllX@VV@bVV@bnJUnlx@nmb@lW@zUnIlx@WbVV@bVJV@UxV@@X@VkLVôÒn@@b@`VX@J"],encodeOffsets:[[119903,30409]]}},{type:"Feature",id:"3603",properties:{name:"萍乡市",cp:[113.9282,27.4823],childNum:4},geometry:{type:"Polygon",coordinates:["@@VWnL@UVWLXaV@@ama¯Uk@WmInW@klKVwnLVKUkVW@UlUnVnIVWl@nXlK@bX@laVan@VnwWm@KȹVK¯m@kmU@¥kIğ@WKU¥@V_VW@_K@aXKVL@Ul»mWLkU@amkJm@kmU@@a@UmakwU@Xl@VXk`UIW¼kWWX@@lxV¦XlW@Ubn@mUkL@UmJ¯UkUWVUaUlm@UXWlnUJ@LmLUnXll@bUVUUmVUn@¦xlnn@VÆÈU°kbVVxllnL@VnVVUl@VanL"],encodeOffsets:[[116652,28666]]}},{type:"Feature",id:"3606",properties:{name:"鹰潭市",cp:[117.0813,28.2349],childNum:3},geometry:{type:"Polygon",coordinates:["@@@XV@nlL@lUnm@Ln@@VlV@@VV@nwVI@VVlx@bknlbV@nmnUVJ_²VxVLw@m¯@ÝXImnUWaUwkL@wVKlKXmw@±@UKnUlLaKlUlÇXkmaUw@U@a@UUkwUJ@zWJw@WbkVWUL@VmUklUaWakb£kJ@nmlnlL@nL@¦mJ@wU@mXkJmbK@bUL@VVn@`kXW@Xk@@lm@UX@V@blÜUXVWLXJ@nmb@V@l"],encodeOffsets:[[119599,29025]]}},{type:"Feature",id:"3605",properties:{name:"新余市",cp:[114.95,27.8174],childNum:2},geometry:{type:"Polygon",coordinates:["@@m@@WULUKWwÅ»ókakkWK@bUVUIUamWUbULa@KUa@mJUbmUXUmUamImakKmLUbVUam@@UL@KKmUUkL@`mIUb@U@V@bVl@b¼UmL¦mxUaUUVk@¦VWbXVLXKlbXnmx@lmVnb@XKxl@XUbnKn@WaXIWnal@Vb@XmlV@U@bXbLVxn@VaLVWVLXUb°@VW@aVIkK@UmVmkUÑVJnalLVUVJXbVkVJXUlblUXJVI°JnI"],encodeOffsets:[[118182,28542]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/ji_lin_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"2224",properties:{name:"延边朝鲜族自治州",cp:[129.397,43.2587],childNum:8},geometry:{type:"Polygon",coordinates:["@@Wxĵm@ó¤VX@@xܼƨ²xWxVV@XVbWXllaÞU°Ċ@ô¼LôÝWanV¥Ñnĉ°¥ÅX¥°¯@w°w@»°k£°mÈŹmÈbÆŎ¦K°z@kxl¦UbU¤klVKŤÞȰ@@bV@nVVUlÞ¦lUllVlU°ÑU¯V°wbXxl@V²@nô¼ó°kmVk²ĕw@wVÞÞ@@Ġö»¯@bnb°mÞ¯°V°ÈJmX¥mamUÅUlaU¯@wKkl±n@@wkÝVUUl±¯I¯bal@kLmakb@ġŹé°Þb°ékLmwXaÅb@bVlbVbÒVbUbUUanwakbVUVak¯ULmxV°UxnôŻX@JXklbkbĉabWU@kWUU¯@@klm@@Å@awWXlKkI@WbUaVIUanU@ĕ¯KmUnWUwm@£ċèkUmbUmm@@nkJUalwk@@nmWUan_óaWmnw±KIwl@UmI@an@@mlUÅmV_KUk@U`@_KUmU@U¯mmb¯@kbImV¯LkbKÛ@ÇnɱJóaÝĢkb@xÒÇll@²VÆUVVUÇ°XóxlV¯lV@bV@nx@¤@șŎnxV¼knJnKX°¦UlnVbUbÆVnÞWVX¦llb@l°VJôÒnLVbbX"],encodeOffsets:[[131086,44798]]}},{type:"Feature",id:"2202",properties:{name:"吉林市",cp:[126.8372,43.6047],childNum:6},geometry:{type:"Polygon",coordinates:["@@ôlzaÈV°K@mLWlnVxUVÈ@ÝĬUÈnôLa²VmĀkV@ĠĊnU@bV@b@nl°UVnÞaôJ@bV¦mlkbmVXx¯@VxmnbbÈKV@bÈLwĠyônmnbÜ@nnVx@n²KJ@kal@nxÞULź±Vwkw¯LWWUkŎīVww°yVĕ°wÈVlkÛ»@wW@Uô£@nĶXwWaUamKóÑUI¯@kakkW¥XUmÝÅUVaUamVk¥W¯LmIlmU»mwȚō@£kJUÇk@am¯y¯UVwa@wġx¦K¯X°Ċ¯¦U°ċWULÅa±b¯@UkÅWmVkIUlóċ¹`óIlXWXxmbULÝbƧ@x¯bÈl@x¯zaݤ@nmVWb²bmn¯J¯Ò@n"],encodeOffsets:[[128701,44303]]}},{type:"Feature",id:"2208",properties:{name:"白城市",cp:[123.0029,45.2637],childNum:5},geometry:{type:"Polygon",coordinates:["@@óǩŁ@WlwUaƑwÛÅÇéĉamKōÇ@IôġVȁÑŹçÝUƧċĉwóóÝ@Ƒ»ğL¯ll²@ƆÅV@¦mÅb@nmlU²VxlUn@VbnWbÇbkÒn@èlnlUÒ°Lx@¼ĉb@ÒUċxÅènLVxÒbÅJ±a@_ÅJÅnVbKlnUÜĊ@UxXVÆnmVJÞ¯VĠwXw°xWLxKV¦ôUwVÝǬóÞÞ¼ÞkVôȘxÞUlVn¦ÞĊa°wb°@bÆwlŤL²`z°@V@@nJVnl@@¥nUmmn@mwnmmUnk@mlwUaLnwn¯°anWakIÇmXwÆamUXUlJXaUUklKUknmÞV@K@VWÞ@VkUwV"],encodeOffsets:[[127350,46553]]}},{type:"Feature",id:"2207",properties:{name:"松原市",cp:[124.0906,44.7198],childNum:5},geometry:{type:"Polygon",coordinates:["@@źèȂÒUóĢ@JŎÈLnĊbÈêÜƃxVbkx@XǪłôkÞ`Wb@n°abKnVw°`_X`W¦ĊIkmVakwKx°UÞbU@ll@°¦VWaÞbxÞI@mVI@VkÅUWK¥nLa@@È@°Æ@nU@KÞalkUwVékUWwkUVkkJk¯@»ókV¯ÆÇI@bĉô¯@ķw¯nmmÅL¯wVUÞy@UówÇLkmm@@UóxkkĉmL¯wVwkWWXmLõm@kűV_ô»ÛƯ@VaVaĠVlmğwķUóÝƽ£ÇJkbǫaƽLW@nxݤkzy¯XɅm@VôÇX¯Ė¯ºÝnUnLVlUÔmV"],encodeOffsets:[[126068,45580]]}},{type:"Feature",id:"2201",properties:{name:"长春市",cp:[125.8154,44.2584],childNum:5},geometry:{type:"Polygon",coordinates:["@@U°xÆKnn°mĸx°@Ċó@aÈJ°ÅUôl@¼l°IllUlVXxlVUêVxkllnÈUVll@Vx²IÞ¤VUlVnIôlÞlwô_bVaĶLXÅÞÇ@K¯@wÛaçn¥¯WXyW¯XwUmmÛ@manómğzxÇK@aUÇLamanUw°@WwnUalnk¥U@aóIÝbUm¯Vmk@@aU@amVğĉ@lUnÿ±UbóKmVÇÞī@ÇVUUwmXkKn@L¯ÇUbyókōè@bn@lÝX@x¯ô@ÆUV_maXm@aóJWxnX@VVnĖVnUJ@nōÆǼV¼kxLklÝw@xx@zV`ÅbmxU±xUnnmknğUbUUb@Å°Üó¼U`Ʋ@lönKnXWlXUx°xnKĊllôw@Vn@lnÈKôx@VÝzV"],encodeOffsets:[[128262,45940]]}},{type:"Feature",id:"2206",properties:{name:"白山市",cp:[127.2217,42.0941],childNum:5},geometry:{type:"Polygon",coordinates:["@@Ul¦kÒÆ°IlÒU¤ôz¼lJUnÆXVl°@²aÆbVKČXV¯°¥¯ĉ°WL¥Ģw@xbUx°V°znb@ÈlVlI@w@mU@akU°kUôwWȯVUVUűU@kÈkÑw@laÞġUÞ£@ƅKnÑĢ¯@WaUaVUVkkw@a¯@¯ÝVXnW@@WkXmK@xkKUb@bW@Uw¯mmb@WKUbmUbUaWbJĉIVW@Il±LkmUbUm@nkKWa¯n@`UbmaĉL@bÆ@W`L@n¯Xb@kb@xL@VkL±mlUIU¥mL@lÅx@_la@UaV@kmmK£LmKUnÅKVbmXVlèĉUUbmlĢŤIl¯bǦl@ô¼Ģ@x°l¤nal@xb"],encodeOffsets:[[129567,43262]]}},{type:"Feature",id:"2205",properties:{name:"通化市",cp:[125.9583,41.8579],childNum:7},geometry:{type:"Polygon",coordinates:["@@ÆlXnĠxĢ°lÈ°K°kXm@¦VbkŤJnݤkVÞVVkÈb°y@wkÇ°awƨ@aÞKVnaWwXWkôJ_ČºôVk»óyV£kÑJůlÑk¥Va@wkbmk£¯@wġó»@kÈ¥°akJÆ£ġnkVaĊVkçWUnUaÆLVmnLKU±@m@a¯UbmV¯m@_KUaÅWó¹@UanmWak@@wmI@y@mkJVa@UaIkJ@n@Um±kkxmIkbÇm@°bXnV@°ÈmlÞ¼¯XVº¯LmkWWXLmVVlkn@@lnWÆVxbmnm¯lÝaVÈè@¼VbÆ°ÞUVJkxIxIV¤ÒXxmn"],encodeOffsets:[[128273,43330]]}},{type:"Feature",id:"2203",properties:{name:"四平市",cp:[124.541,43.4894],childNum:5},geometry:{type:"Polygon",coordinates:["@@Ɇn°WzlyÞ£mwX@ƾKǬblaÈIƾ¤ôÞĸVĠxnmmV²wVnwÆaU_@yw@wÞxlkKlwU»È»ŎÅ@mVIUmmĕUU@mWXwIô@bWnnbU`V@Å°ó@wÞW@km@aŎç@m°Ñ°Inm±aXaUn@mƑU¦@ǯaU£aUġ¦ÅÒJōUŻókUÇ@¥¯ak¯mUVak@@aċçÅaUm¦Ý`XbÆ@n`IxĊÞōÞml@Ub@Wl_¯JkÇUÝÆÅb@nllUb¯±a@WĉJġĀ¯Unóm¤xôaVnxôI@xV@bmÆ@lnLmÞ¯ÞxVb¯þ"],encodeOffsets:[[126293,45124]]}},{type:"Feature",id:"2204",properties:{name:"辽源市",cp:[125.343,42.7643],childNum:3},geometry:{type:"Polygon",coordinates:["@@żôŎVIÆÑĢ¥VbV¤°bÈ@V¥ƒÞ£lÇUUUÝlÞ£mţIlUa@¥nlW¯L¯kÇġ¯ğwWmÅk¯UVUbWlXlmnbUx¯xVVknlUbVÇKUb@VnbmlnzUº±bmJUbWÈnèmÒ@X`WL"],encodeOffsets:[[127879,44168]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/liao_ning_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"2102",properties:{name:"大连市",cp:[122.2229,39.4409],childNum:5},geometry:{type:"Polygon",coordinates:["@@IÞmVk@wXWÜbnwlLnU@nLlbXW@awnbl@XLa@Ċ¥@LULnJ@xVnmV@VXXV@VJkn@VÜKXXôJlbxl@IVbnJVLUbnlnVwJVU@XUaUUlwn@°nVKnV°_VJwl@nwlVIXWlIVVnK@IWmkIVaVU@WÈUlmU@UWUalkXġŻ@kI»mmakUmĉUŁV»²ġVĕ@aUU؍IɃ`ȃ@kw@Umwĉ@WķÑIĉÇbÝLkymbIwÇmÛbmbU¯ÜõÈkÆVbŎxnXVÆnǪ¦b¤UxÝnĉÒmĊVȤÈbƼĀÆÆÞźbVVbX°²¤"],encodeOffsets:[[124786,41102]]}},{type:"Feature",id:"2113",properties:{name:"朝阳市",cp:[120.0696,41.4899],childNum:6},geometry:{type:"Polygon",coordinates:["@@na@UVI@mÑWkaV¥UI@wl@aÈbm@wVak@@K@k@a@UUmUUalmU@KÇUű¯@±kUKVkUaaU@¥m@@¯k@WLUmkn@mmIkm@amU@wVmkU@Klk@UmaXIWWULaULVbmk@UUmUk±_Uym@mbkImaX¯WWxWKzU@WkJWwkV@Um@UbVVVVXb@VWX@W@Vkb@VnUK±aUUlwXÇWKknU@mmUkLUVVUUVUawbkKmwnIkJ@nmb`kmVkLWwUm@UUUK@UmaUa@UUaWK@mU¯Wkk¯VmUUxVXUVmL¯ymXkWUbmXUKVknWx¯JVnkLl@VVxnxlĀVL²WlXl@bÝVUn@bnlÜaXblIVl@@Ȧ@VmbXV@@xVVnUn@`°@VnXU@K@VV@VmbnVn@ln@bx°Ub@bLV`ÅnW@@lUnnWVU@Vbkl@Xl`XxVUblkX@°¦VUVVbUlkV@UbVbkLUxmJkX@bbxVKÆlXXbnnala@Uk@UVVklKVUXKVU°KVan@VUnLKVLWVaU_@mmUXa@mwXwVkVWXkk@k@klm@wXKl@U@KVUUUVaUV@alLxUx@b°°VnnVxlIXJmxLUVlV@bnX@VbaVx@XJ@bn@VVXÈl@llX@lUVô°°@ÞVbn@Vk@VW"],encodeOffsets:[[123919,43262]]}},{type:"Feature",id:"2106",properties:{name:"丹东市",cp:[124.541,40.4242],childNum:4},geometry:{type:"Polygon",coordinates:["@@lzXJU@²x@@V@bUVmKUn°n@lnVKnV@n@VlV°WbXn@VzJ@¦@bkbbUl@bkbJ¯zWULWbklVnb¦VJ@K°Ukl@@WbVn°@Vm²UnX`UÜLXmVXlKVbUVVnUbnX@VUL@lUbWx@²kl`n@Vlb@nUVWVLVU@aV@²bl@ÈmxWXVÈUJVl@laWnXKÈkÈ@Va°bÆm@XV°IVV°UnalVUn@UwVU@@VVJI@bl@XK@wWmXUUVbkJVXnJVI@mknwlKXL@`l@VI@UUaVKÞnaVm@aÇ£XWU@aÇUU@mbkKm£@WWL@@Kk@klUbWKUkUU¯UõÛmUUaVUU@WU_W@kVkJ_WKkV@bUL¯¯±mk¯ġğÑ@UmwKUaka@am¥ÝIUWmk@wmţLKʝbȗKWĢklVbX@VVknÇV@XUVUblJXn@J"],encodeOffsets:[[126372,40967]]}},{type:"Feature",id:"2112",properties:{name:"铁岭市",cp:[124.2773,42.7423],childNum:7},geometry:{type:"Polygon",coordinates:["@@XJm@¯mXUlnVbUJU@bV@UJWL@VXLmJVbkXlJXxVL@b@V@n@b@`Vbk@lxknV@VVV@bUL@bV@@bVK@VXLWLXJ@LV@nbWJ@IUVx@LVJUXVxVx@VV@@LXJWL@VU@@L@VnL@bVVmVX@@VVInJmbnLWVnVULVVU@VVmX@@JVzl@nVVKVXÞ@mk_lmUUWV_nJlUÞÑÞVVUVVLUVJ@IVna@@KV@XwWknwnKlalUwaĉÝwJl_@aUaKUUU@WU@WXUÆ@@UVK@n@UnVVblK@bllb@bbW@Xbl@UlnLl°°b¦nKlVnIV@UWU@WXkw@am@nm@aVw@I@KUaVIm±XÑlknJVnVJaX_VaUaVKmwnkmmn@lU@U@mnaXlKUmUIVmklaUK@UlUVUW@UkVma@UUU@JmUU@@bmbKWV¯XUKm@ka@UVKVk@aUKmLkKUUÝUmbXbÇJ@k@WU_@m@klm@UXKVaUI@KWUXaÇWkaWUkWUL±U@lUU@UJI@V¯JmIm@@aU@Uwa@UV@VkIV¯aUkWkb@bVL@@VVVUXW@Ua@@bÝbUVÝ@LmUkVUbVllLUV@LXWbUXm@U`@kxlnnJlbnIllLXlVlUXmVKnV@L"],encodeOffsets:[[126720,43572]]}},{type:"Feature",id:"2101",properties:{name:"沈阳市",cp:[123.1238,42.1216],childNum:5},geometry:{type:"Polygon",coordinates:["@@ȚĊÜ°bLlÞxUbUn±@ÈnVÆL@xnLlUVbxkImJkn@V±LUxkV@bbKVKnzVl@L°@VaxÞUlbôxVV@@V±bn@llXLöXĶnal@nkVJVI@aU@@aVK@aUUUU@lmkwl@Ua@_@a@m@U@aUKWwkIlWUanIWK@UXKVIU@@aVVIUamVknW°n@WI@KUmULWnkVkUWKkkmJkamIkmlw@V_n@VWXaW@KVUkKUkValUnVK@ÞVUÞa@a@VbX@VWUU@U@UK@ala@IkKmUUa@U@VkkWVwU_@KÜUXbl@V¥XUVmXakÅlUUkIm`UIUJW@UIKmkm@UUJImmU@VUXU`mIUbUK@LJUUl@X@UbJkU@nm@Uam@@aUmLKwmWXUK@kUaÇa@JUIUa@aKVUUXmUy_@lmbkLUKWLX`n@bVL@JXLWX@Vnb@Vm@UbnVmL@V@x@LUbVV@V@LUVl@mb¯U@xU@UVVV@X@VVblJ@bnVKUnx@llnL±¤b@k`VXÆK@kV@¼kl@bWIUl@VmLnbm@@JXXmb"],encodeOffsets:[[125359,43139]]}},{type:"Feature",id:"2104",properties:{name:"抚顺市",cp:[124.585,41.8579],childNum:4},geometry:{type:"Polygon",coordinates:["@@XVl°bUlJ@UVU@bVxV@@bn@nJ°I@UJIVV@V@k²VVKlXXVblÈXWbXV@LVJUbWL@Vkn@l@nV`@X@lÈIWanaÞVVVlLnKVL@bUlUL@Vlbn@VL°WXULna@aV@nV@IVV@VbUnl@VXnKVa@UUnyWkXaaVk@aabnm@_WKXmWanU@alaUl@XJVLVxX@wnKnVlw@V_@a¯¥@UkKWUaUUanK@IaU@WUaVw@klUVyUUVUUÇ@Iôba@mnUma@kXa@UWak@Wal@a@WULmU@U`mIUU`mUk@@UUK±nkJbUam@kwm@@a@UU@Ua@@K@VK@kmKU_UKUUaĉWmkkL@`LnmlkLkbmK@k@Ulmb@b@xUVIUlmVXXxm@JUUk@WUk@akx±@¯x¯UmbKUUVmUU¯UmVVnWkÆlWbUnWVU¦k@WaÛV@LV`UxXllU@@VVbnVlL@J"],encodeOffsets:[[126754,42992]]}},{type:"Feature",id:"2114",properties:{name:"葫芦岛市",cp:[120.1575,40.578],childNum:4},geometry:{type:"Polygon",coordinates:["@@ll°XnV@XLVb@VVbnb@VLVV@VVnXxlKnUl_na@mlImJnxlLaxVbUVVUVUKVlnnV@lmXLÈWkxVV²bVLm@Ula@UX@XW@UWaUUUUVan@V@lUXxlIXV@yXLwXXW°nblJnan@Vz`l²nVVVl@nUaVKbVKnXVaUaVUynXK@kVK@X@m@mLXaLWU¯w@a@UVw¥°ó¯¯y¯Uǯ»w¯Im¯ÇUUl¯»ţKċÑţķm¯w@mU_ómk¼VnU`±IkbVlnnU¼±Lk`@XWl¦UbmVUxkXVlkbllUVb@bkVmx@XVV@Jb±aULkKWXkWmX¯aUJmIkVm@xU@n"],encodeOffsets:[[122097,41575]]}},{type:"Feature",id:"2109",properties:{name:"阜新市",cp:[122.0032,42.2699],childNum:4},geometry:{type:"Polygon",coordinates:["@@Xnb°lVlnXVJLlVnl@zÆxnK@bblKVLn@@VaVLVK@L@Vl@XVVInVVKVwlUXwlKLVVb@aV@XlUXbVW@nlWnXKV@@V@XUVVLUVV@@bVVV@@ln@VbVUXVIxVanJ@UIVWL@UV@@¤V@nInwWklnIVxlnzUVÇJ¦VVÜLĸUnW@aV_WĊXXaKnkl@nmLa@alUVw²K@UlmnIlJwaVUkmK@wÅKmU@DzVmVaÝwkKaÛ¯șĉķ¥ğ¥@kUWkƏīÝ@@akUK@KWIUm¯nU¯JmwUVmIkJÇLm@UImJUU@aW@U@@nUbJabXVWn@UVmX@V@b@l@L@lUb@xnÇabk@@xVJU¦lbXÒ@nUJ@Vmb"],encodeOffsets:[[123919,43262]]}},{type:"Feature",id:"2107",properties:{name:"锦州市",cp:[121.6626,41.4294],childNum:5},geometry:{type:"Polygon",coordinates:["@@nJ@nlmVnXKl@@°n@@¦VbVbUlVL²l°@ƲÈV@LVknVbVVnnWVU@XmWUabIVa@mV@X@@bVVnIVJ@nÈKlInJVUnx°IV°mVnXJ@LLlV@b@ÞƐĬXllV@Ġ¦ĸ¦naWW@In@manK@UVkXJ@alk@»lU@ÅLUWl_@a²£Kkm@kwVmULm@akIUa@U@WUUVUaÝ@ğwkmĉ£UW@@bÇL@ma@_mKlXUwKLţÓ@UWw@K@UI@mU@UV¥@°UnJ°@@_KUwW@UnaWUmmI@mķwUaÇLóVĵwÝUUW¯¦Ux@Vb@xV°XKWbK@n@nW@UL@lWLmzUVVbUbmWXXWJbn@Vkl@LlVUn@xnV@bln"],encodeOffsets:[[123694,42391]]}},{type:"Feature",id:"2103",properties:{name:"鞍山市",cp:[123.0798,40.6055],childNum:4},geometry:{type:"Polygon",coordinates:["@@lxĠÞ@bV@@w°Vna@UkV@K@UUUVa@K@w@UnKmUVan@@Uma@UXWWK@IUK@amW_XKVLlKna@kmKVak@VU@VmU@anIÆan@aUVnb@blLV`ÞLlUbnaKn@naVU@¥°IVK@anUUKVaUVak@mJkXUVwkVUUa°U@W@WlkXWlIXUlJlaxIVVXLll@nLV@lLXlKĊz¥maUlkXaVKX°yIla@aVkala@a@¥IUy@WmXa¯kU@U@mmUULkmm@¯VmnLVU@a@U@±w@VWIkymLUUkJWXJkUmxk@xUI¯`mUULm¯m@kxVVbWV@UVIUx@bkVVVxUbVV@V@zJVXUlnk@@lkLlLUU±Jkm@UIUVLUVU@K@UnnV@l@LlaUJ@zn`@nWlIUVUUUV±Ln@nmL@VUVkLVlUxVLVlÅXma@@akLmWUX@JUnVJVkXJ@X@`WXVUVUIlbW@bVUVL@`Un@¦U`@bUV@z@Jm@@XV`LUL¯J@IVKmKÅI@JnWVnLnVxV¤z@bmV@VUV@bUL"],encodeOffsets:[[125123,42447]]}},{type:"Feature",id:"2105",properties:{name:"本溪市",cp:[124.1455,41.1987],childNum:3},geometry:{type:"Polygon",coordinates:["@@lb@VnlnVVUb@VJ@nnJ@bmXUx@xVbkbkWLUxnl@Ul@xWx@nUV@¼UllknkK@bmbnlLVJX@VIVJn_lJVVXUmnU°VVVUnVVLna°V°w²@lwbl@XVl@VVIn@wWWnUVkJVUw@@anaVk@@lnLlalKnkmK@_lKnlĊXVbVVLV`nL@lUL@@L@VbV@@V@bn@lxn@VbalI²mVL@Vl@nV_VVnJV_@nVKV@X@bkXbl@XblylUUk@Xa@UVIlK@UUWVULlm@UUUnKWU@K@UXmXVa@U°KVUUWUk@aUVKkaWkKUknaWa@U@m@mk@aUJk@@_WKkLmxl@nUJmIUWlIUaVWVXn@xWLk@@aJUI@U@UVVxm@UVkmb¯VUU¯JWU@Ån¯aUbÇ@ÇlLmWXkbk@UIÇVUXWwÇnk@±aU@@bUVUKUXmV@kaUm@k_±l@XwVa@kVK@UWmVaUmVUUakLUWWnÛKVW_m±VnU¯@Uma@Xk@l¯V"],encodeOffsets:[[126552,41839]]}},{type:"Feature",id:"2108",properties:{name:"营口市",cp:[122.4316,40.4297],childNum:4},geometry:{type:"Polygon",coordinates:["@@ĊĖÆn¤°Ċ¯ŎWô@xXbwnKl@nX@VUVKmL@VU@UxÝ@VlbxU@VUb@bk`IUlVUnV@@UV@@JnXlK@b@nbÆWUkUKVwUklKVU@UnK@mm²KVUVVVUJXk@mm_@yVIbk@K@kmUm@VLV@VUKVUVJn@l²IVVKklK@kl@kmVUWI@y@UUUVawUUUl@akmmVaUKmIUaJk@wkaóIWWÛL@UlmUIU@WW@UnUUm@wmIVK@Kĉ¦@bWKk@max@bWXkamK@mVkKmxÛaWX@xUlÝnJ"],encodeOffsets:[[124786,41102]]}},{type:"Feature",id:"2110",properties:{name:"辽阳市",cp:[123.4094,41.1383],childNum:5},geometry:{type:"Polygon",coordinates:["@@`VzWnVUVL@bVbVJ@IÈbVb@lVLXWnxLnKVb@n@Vbn@mV@lIVa@@WkVVI@KVLVanJV_VWUV@nnJVIVn@na@alLlmkVk@»VU@mXwwk@@VmkVwXKllaUa@wVwnW@amI@mUI@VaUUkmm@UkaL@UIĉyLWkkKU@mKk@kWKUUJwkbkIWVkJWXkl@X@X¯VVbUVlUxVWlnI@lUbVUbVLmV@bUL¯J@¦UVmbm@LmbakVÝKU_kK@amaVUbm@ÅbmJ@bVUn@UVl@UbnL"],encodeOffsets:[[125562,42194]]}},{type:"Feature",id:"2111",properties:{name:"盘锦市",cp:[121.9482,41.0449],childNum:3},geometry:{type:"Polygon",coordinates:["@@Vbĸx@nnJVnXmb@VXVxL@`¯@mI¯V@U¦@VV@nJ@V@LXx@VŤÔKLVxWknL@`b@nÈK@a@VXĊ¤nVK@aVU@UnU@ayU£UwmmKXUm@IÆJnLUL@J°IVKKU_@Wn@@I@yVU@aV_@¥Vm@_UKUV@aXkaVJVUUXW@_@WWIUlUIVm@IVW@IU@@VU@mUVVkJ_l@aVa@UVwka@UÞVwV@@UnKLVU@UmWk@mLxWa@wóUVUIÇÆĉ¦¯¦¯xʟJ"],encodeOffsets:[[124392,41822]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/nei_meng_gu_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"1507",properties:{name:"呼伦贝尔市",cp:[120.8057,50.2185],childNum:13},geometry:{type:"Polygon",coordinates:["@@m@Łkklô@£kJ°ýɅķÑó¤ğLĉÅlÇğŁW¯¯ƥóÿlwkţÈéÝƛó°ÞÅxV¤ĉĖWƒ¯lȭţυ̃ɱÿķƅˋğɱřÝţϙȍƧĊţ@¯kWKUKm¹Å@ķJU@ƧÑƧō¥˹Ɔ@L@ÞVLn@VōČWJX¦@JŻbU@ţÞmVU@ȁýóbkWWLůUWġkmó±UŹôV¼ƽ¼ł̥ĖƽǬʉxĉŻȗKΕ̛ʵƨʟÞ˹»Ƨţ»Ǖō˷Ȍ±ȚʊĠUɾɜɨmÜ֞˸ƅȂ¯ǖKˢğÈÒǔnƾŎŐ@Ċbôô̐¼ƒ@ĊôĊÞĀxĖƧL±U°U°ĬƒČ°ÜêɴȂVł°@nxŎèbÈÞȌǸl²IlxĊl²ÒmôĖÈlĵºmÈêVþxɛČʉÇĵVmÒÈɆôƐŰǀĊ°ÆǬĮƾbyĊ@ĠƒXǀċm»ôw°Ûk¥Çm¯çkkÇǫţǕéX_ĶWǖīŎaÆĵĸĊ@ȚȘĊLĢĉVÆĉʊÇĕóaU¥ĉ°mkÅ°ġUĠřk°mÑČÿÛƒWĸ£ʠÆxÈÞŎÞ»ʈ²ĊÇČalÒ°Ť±ĸzĊKȲm¤Ŏ@Ò°¼nyȂUźīǖƳÈē°@ÝĶ@Èkl¥ÇçkxkJXÇUÅ@£k»óƿīÛ@lÅJl¥óý@¯ƽġÆÅanċ°é¯¹"],encodeOffsets:[[128194,51014]]}},{type:"Feature",id:"1529",properties:{name:"阿拉善盟",cp:[102.019,40.1001],childNum:3},geometry:{type:"Polygon",coordinates:["@@ƏnǟƨʫŹɆÿ°¯ÆV²ˢżÿ@ÝÆŁȰ¯ȀƳĉó@ğky¹@īwl£Ź¯Ŧé@ÇÇxŋĉƩUUŃōLÇĵóÝnóç@ó@ġƱ¥çWUçÆō@éçťKçȭVһƽ̻aW¥ȁ£ʵNJǓƲɳÞǔlżÞmĠóĬȂɲȮ@ÈĢŮźÔnĶŻǠŎȭгŃċóȭţΗÆƑÞƧÅΫóȘǫɱȁġlÛkÇ°ȁÈnõl¯ôÞɛÝkĢóWĊzÇɼʝ@ÇÈķlUČÅÜķnέƒǓKȮŎŎb°ĢǀŌ@ȼôĬmĠğŰōĖƧbЇƧōx@ķó£Ål±ĀƧīXÝġÆêĉK°Ýʇƅ@ΌʉżÅÒϱʈ@˺ƾ֛।ţશóЈèʞU¤Ґ_Ƒʠɽ̦ÝɜLɛϜóȂJϚÈ@ǟͪaÞ»Ȯź"],encodeOffsets:[[107764,42750]]}},{type:"Feature",id:"1525",properties:{name:"锡林郭勒盟",cp:[115.6421,44.176],childNum:12},geometry:{type:"Polygon",coordinates:["@@ʶĬĊIȘƨƨ@ĬÛĢșŤĉĬĀóUÈŚÜènŦƐȤȄłϰUƨťƾÑ܆ğɲƜǔÈèʈƲĊƞƒɆ¯̼V˺Ò˺ȂŤVĢêUÜxĀˌ˘ƨÆ°ѢmÞżU¼ÆlŎ@ĊçŎnÈÒͪŎźĸU°lżwUb°°°V£ÞlĠĉĊLÞɆnźÞn¦ĊaȂīġŃ¯Iĉůl»kÇý¥Ŏ¯én£ġÑÝȭxÇ@Åçķ»óƱŎ¥çWÿmlóa£ÇbyVÅČÇV»ÝU¯KĉýǕċţnġ¯»ÇōUm»ğÑwƏbċÇÅċwˋÈÛÿʉÑ°Łkw@óÇ»ĉw¥VÑŹUmW»ğğljVÿŤÅźī@ř¯ğnõƐ@ÞÅnŁVljóJwĊÑkĕÝw¯nk¥ŏaó¦ĉV¦Å`ğÑÑÝ@mwn¯m±@óƒÛKˍƏǓ±UÝa¯lōșkèĬÞn@ŤġŰk°ċx@ĉ`Ƨĕ°@ţÒĉwmĉ@na¥ķnÞĉVóÆókĉķ@ÝkƧƧÛa°Ç@ÝÈUóbݼ@ÛÒV°@V¼ˋLÞɅŤŹǠVÞȗŤÇĖÅōbȁƜ"],encodeOffsets:[[113817,44421]]}},{type:"Feature",id:"1506",properties:{name:"鄂尔多斯市",cp:[108.9734,39.2487],childNum:8},geometry:{type:"Polygon",coordinates:["@@ĶL²ĬVłƑkkl@ȎŘWńÈĬȗ¯ºlz@ĠĊôŦôÒĠ°kÞÜn@¤UĸèĸbŌÈXĸLlÒĢxɲƤÈÛƾJÈÝ°UÅĶ»²VW¯ĸJôbkV@ôlbnĊyÈzVôab@ĸÞUl°yǬ²Ǭm°k±lbn°@È»JXVŎÑÆJ@kLÆl²Ġ²ʊůĊġřóƛÞÅ@mmLUÿóĉƧ@»L@`ČĸmȗÑţů±ĉğl¯ĀwÇçƧŤÛI@±ÜĉǓçō°UwôǫůķƳűbÅ£ÓÇwnÑó@ȁƽ@ÇƧĢón»ŏĕóĊ¯bÅVȯÅImōKULǓ±ÝxċŋV±Āȗ°Źl±Û@WÒȁŚŹНŚÅèŌô¼°ȰɞȂVĊ"],encodeOffsets:[[109542,39983]]}},{type:"Feature",id:"1504",properties:{name:"赤峰市",cp:[118.6743,43.2642],childNum:10},geometry:{type:"Polygon",coordinates:["@@ɲŁĢljĊwƾōÞĭ°_ŎŃźȹƒUČÿl»¯ôķVÿǬƽɅġÅÑǫ»̐ʟȣU¯wVWÝÈġW»Þ¹m݃ɛŎÿŎōͩůV¹ōéċóŹÅVVĢǩʈ@Ėċ@ķÛV°¯xÇÅţ¥»°Ûôĉʟ¥WýČ¥wç»±mnÅķ¥ˋVbUÒġ»ÅxğLƧbWĖÅx¦U°ÝVóŰlô²@¥ÜÞÛôV@²±`¦¯Ý@ÅVÒō¼ô¤V²ŹĬÇĊƑţxç¯Lk»ʟlƽýmłÝÆƏ@mö°Ġ@ŚŹĬţÆUĀĠNJĠX¼nźVUÒ¦Ċxȼ@ôlx¯łʊÒÜĀˌÇČxÆČÈƐaxÒĠn¼ŎVȼĢ°ŤmǖČĊþLV°ÞU¼ċÈUÆzÈa¤ôbknXĀè"],encodeOffsets:[[122232,46328]]}},{type:"Feature",id:"1508",properties:{name:"巴彦淖尔市",cp:[107.5562,41.3196],childNum:7},geometry:{type:"Polygon",coordinates:["@@²@Ζǀݴʶհĸƒ¦Ķ̒Uˌ¼ӾÇƾ¼̨UÞĉƧéÝ»ĕĉƐȍōǪakóó¯a@ôţaV¯Þ¯°@²él¥ĵğťwōxó¯k±Vó@aóbUÇyĉzmkaóU@laóķIX°±Uĵ¼Æ¯VÇÞƽIÇÜÅ£ɱġwkÑķKWŋÇķaķçV@£mÛlÝğ¯Ñťóǿƴȯ°Åł@ÞŻĀˡ±ÅU¯°ɅĀźƧʬmǠƐ"],encodeOffsets:[[107764,42750]]}},{type:"Feature",id:"1505",properties:{name:"通辽市",cp:[121.4758,43.9673],childNum:8},geometry:{type:"Polygon",coordinates:["@@ôƲĸ¼Æè@ÈȮwƾ»ʠĢ¥VÆ@²¥@»ŎѯĊJŤ£k»ÆÇX¯̼ōī°aX£ôƾȁź¥aôŤĢL°ĸ@Ȯ¼ÈÒʈŚôVXůÆaĠƛÈKķĉôÿ@ğÈĉ»ÇVnĉVwXĠÝ°ČÿĸwV¯¯ǵ±ĉǫÅÅm»²Ż±ƽIm¥ţÈķ@¯ƧJV»ÞUÝç¯UġºU£ţóaÅÅlƧī¯K¯ÞÝğL̑ȍƽ@ōŎōĀƑɜnÞݺX¼ÇĢÞUX°xVʠȤ̏Ǭ¼ÆÒɆĢǫƾUĀóĸ°k¼ċĀƑVŹȺōń¯`ÝĮƽŎĉxġNJɱłō¦"],encodeOffsets:[[122097,46379]]}},{type:"Feature",id:"1509",properties:{name:"乌兰察布市",cp:[112.5769,41.77],childNum:11},geometry:{type:"Polygon",coordinates:["@@ʠǠÞĸɲȺƒÒȂƛŎaÆÈĕȘţUÝźǟɆţÝˌKU»@U¯ÜÑ@Þ»ôaVÞÇÈ@¯ÜbƨƨÞlĸ@ĊôlôÅĊUÝĸm¦bmĊ@nĊxŤÑ@¯ƨĖĊ_@Čwl¯ȭLÝ»ƽ¯ķůǓ@ÇǓbċÅÅÆwÿĠÇU£óa¥¯aŎğĠţkw°»¯ůlÝĵkǻݰɱƧǫaóôɱ»Çk¯ŃóʇŐŻĉNJŻĢ¯ÒÈUl°x°nÒĬónĊğ°ÇŚĉ¦ʵV°°ĬÛżÇJȁńʇʹó˂ƽŎÆţ¦"],encodeOffsets:[[112984,43763]]}},{type:"Feature",id:"1522",properties:{name:"兴安盟",cp:[121.3879,46.1426],childNum:6},geometry:{type:"Polygon",coordinates:["@@ÆXnlŎ°@LVLĠþxĊUȮĊnUĠV@żaW¯XIŎġ¥Ý@K@w@K@I˺ŻŎ¦ƨƨÒŎIÆ@X@VºnX°lŎ@ƾĉˤƒȘǷȘÑÝÝÞbVţĸÿŤxÈĖƐêÇKnĸ¥ô@ķÞUnÒl@UÅaīˋ¯ÑƧx@±kXřƐƏÛéVˋ»lō¯ĉÅÇÓǫÞĖġV@ğ»°ĵÇÞǓ¼¯mÛÅŃĉĠÇƾb²çéż¯VğÞml»ōÑVç»V¯¯ĕÆU¯y°k¯¯V»ôÇÑ°a@ŹkġKţóbŹ¦ƽȂóW¤¯bĬ̻ŎW°ÅÈl¼ţ¤ĉI°ōÒ@¼±¦Å@Uġ¦ʟƽ¼ÞĢÒm¤êō°¦Èþlk¼ĊŰ°JĢńȁĬ°żnÇbVݼ@¼óĸţ¤@°Ånl"],encodeOffsets:[[122412,48482]]}},{type:"Feature",id:"1502",properties:{name:"包头市",cp:[110.3467,41.4899],childNum:5},geometry:{type:"Polygon",coordinates:["@@źxżĀǔÆǬVȘĀŤ¥ÅƾōôˁʈͳȂŃÈIÜŻ¯ī¯ōm¯ɱĖ¯ķÒÝIÝ»ÅVlÅôÑġğVmÞnnWçkWÜXƝÆwU»Șĕ£ĉÑğ±±ÅkK@lÅIōÒUWIǼ¯@mka²l¯ǫnǫ±¯zkÝVķUôl²ô°ŎwŦxĶĠk¦±ê¯@Ý°U°bóŤ@°bôlôǩbŎƏȎĊĖÞ¼êƨÝĊ"],encodeOffsets:[[112017,43465]]}},{type:"Feature",id:"1501", +properties:{name:"呼和浩特市",cp:[111.4124,40.4901],childNum:6},geometry:{type:"Polygon",coordinates:["@@ʶUĊ¥ÈřĠ¯ĉômīѯmwk¯ÇV°ÑżġĊljǓɱţǓƝóX¯ɛÒóa@nÝÆôƜŚĉĢʉŰĊÒ¤ȗĖV¼ÅxWƞÛlXXèmÝmUnĠĢóÒkÆÆUÞ¼ÞJĸÑ°ɲĕ°Ŏn"],encodeOffsets:[[114098,42312]]}},{type:"Feature",id:"1503",properties:{name:"乌海市",cp:[106.886,39.4739],childNum:1},geometry:{type:"Polygon",coordinates:["@@Ș°ÇīXŃŗ@ȍlkƒlUŁ±īĵKō¼VÇôXĸ¯@ťê°źk¤x@Ĭ"],encodeOffsets:[[109317,40799]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/ning_xia_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6403",properties:{name:"吴忠市",cp:[106.853,37.3755],childNum:4},geometry:{type:"Polygon",coordinates:["@@nLV@VLaÞbn@@l@bUVlUVzVx¤kÞVèXn@nm°a@UÑ@VXnV@VaUVKUUU@@U@@KVa@U²@wXkWnk±lLnU@UmmVKnIVWnI@UK@UK@@UVKXkmWLWUXmlkVwUyVa@ww@aVIK@aVÈwKlLVV@LnVVVnUܲ°WÈIUÆ@nÞ¼@¦@UÞUVW@UxUxVnbKb¯ÞU`VbǬV@XXÆVVl°InmnUô°¯anam£WVXKXmkôaVU@Vak@@wman@K@UÛUWKXUÇ@UIb@alW@akLUKV@@Ukw±InL@kmwkWmk@JUIůVmnnU@m@UKVKlkUwknVUKmbkI±KkmVkKb@U@aVkUmn`kIlaUK@UUKmbUIÝUa@mUa@am@UUULUK@bmKkbWI@WXwlkXWa@k@kKLVkkK@L@JUVmzUKlwUUnW£XVlKUwVU@aXI@aWaUw@W@_nam@¯UkWVkUWaU@nwmJkUVkWVUmUkJ@ImbUa@@WÅ_mJknmak@@mXaUV@xU@@VUnkV@Vn@`ULUbWLXVW@kbUJ@XW`@nÅĖWJ@m°@xxbnUaw²lÞ°xŤIVVULÛWbbkVVXÆ`UbVL@kx°LlV@VWbJn@bl¤ULV°@lmL@£U@@aUwmKULVxUVVx@@kU@mK¯LÇa¯@"],encodeOffsets:[[108124,38605]]}},{type:"Feature",id:"6405",properties:{name:"中卫市",cp:[105.4028,36.9525],childNum:3},geometry:{type:"Polygon",coordinates:["@@°@Èb°KnL@lV@@UwVUUwVKnLVx@bV@¤@nK@k¯UVKk£@amIXa@UkU¯Klw@UKVaÅ_UWlUaXaÜVKUUţJ¯wݱkxVbmaw@wn¯@XIÆĕm@X_@WVIlaX@WUXKVaVK@_Um@lUVm@U@Vw@VUÛwm@@W@ImKUkU@UaaX@wWaUKkw@UVaUamLUnk@»±`¯@kW@UaykbI@VWJkLWUkJwU@n¤mL¯wm@Um²XVWbnV@bmxVkxUblLUV@kVWKU¼kU@mn@JnV@bUnmJUn@k@XlxLVVnKlLVV@@LkKULVbk`WL@lkXW@kV@UÞUlÇXlkaUbmV¯@@L@V@bkb@xlWbbW@±@UJ@IU@mVkVxV@@lIlln@Vm@VUbl@JLmKÛXmVkUKULU`@LĉwKUXlVUl@VbJX¦̼bÞxŎxɜĖĠŎaô@"],encodeOffsets:[[108124,38605]]}},{type:"Feature",id:"6404",properties:{name:"固原市",cp:[106.1389,35.9363],childNum:6},geometry:{type:"MultiPolygon",coordinates:[["@@Vnn@°xnK£mV@xlIXVlKXI@UJlazVbX@l°@²_@¼mlVnKVbUb@VlxVLXb@xWbVbV@VlnL@J@Xn@ÜxbW@nl@nblmnIÆ`@X@Vbna@aVUUWVk@kbWakbU@VwW@_l@nmn@@alVlk@UkmVak@@aUXaL@¯@KVa@axWI@KnkVaVJn_lJ@X@m@nVanUVb@mXLlJVWnLlaVVaVX@KXVVkVKlknKVa@aVU@KXb@klJUknUm@K@_UW@alIUamaU¯kJma@IUK@U@@UW@@aXLVVJVaXIKlaUkUV@ambUUJkIWJ@wUIV@JU@UwV@@Um@nU`@UkUmVUxWUUV@aÅb@aWXkKUUUUaWK@wnm@IVU@aXwm@UmVaUalk@anKUwlUwlkK@wmaUkmmIk@VmkUUbW@UVUnW@kV@xkVmbVnU@UbUV@ak@kkW@kLW¤@nV@VU@W_UVUU`VLUV@IUVõVULU@UUUJ@wmkUJ@WI@l@bkKkbVVbVbUL@UUJ@Vm@@L@xbVVVLVlVwX@Vb@bmUkbk@@JWIUVÅw@Km@UkWKXxWLÅ@UVUnWK@xkVW@KULwWVXVWzXVVKVXkVV@VUbV@UVV@@LXxVL@VbLnKVLVxXVmb@l"],["@@@J@aU@LWK¯UUxVVn@ĠLUW@UbUUUa@KUX"]],encodeOffsets:[[[108023,37052]],[[108541,36299]]]}},{type:"Feature",id:"6401",properties:{name:"银川市",cp:[106.3586,38.1775],childNum:4},geometry:{type:"Polygon",coordinates:["@@UwVK@UVWÞUbwV@knV@@KU_VK@Kn@W_XWlL@Vn@Ċw@Ula@Wanamī@a»ŋó@aÆÅɲÿUaV_°ÝaLaUmVwVwX@VUVÝ@@¥Ý»@mVÅÇJ¯XÛ±VUmUmU@KUUkKLÇxU@bLUJ@bx@xUbVzUxklWnXVKnXWlUL@V@VL@VL@mJUXmJULnn@VmVkK²mlXWlx±@@VUb@L@@VV@VVULVUbU@WmU@Ò@V¯bmn@V@lVnUnVWXVl@¦VVUn@x@XL@¦lXxVb"],encodeOffsets:[[108563,39803]]}},{type:"Feature",id:"6402",properties:{name:"石嘴山市",cp:[106.4795,39.0015],childNum:2},geometry:{type:"Polygon",coordinates:["@@U¯ķó±ÇÛ¯ķmbXb@kb@Vĉxm@@UkKWXX`m@@LULV`@L@mU@lUxaÝVUX@VULxVkLWV@JnVLXVlUV@zlVL@V@bn@lU²WVLlLVbUVxUx@xǀLxôÒkK²VaU@wXa@WÈĉUa@bÈkm@¯"],encodeOffsets:[[109542,39938]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/qing_hai_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6328",properties:{name:"海西蒙古族藏族自治州",cp:[94.9768,37.1118],childNum:7},geometry:{type:"MultiPolygon",coordinates:[["@@V£°@laXô±źwô@UlżaÜnKw@Uaa²LmÈLÆÈxlaUawÞmÜbÞUnJ°akôÑkwÝVğwÇ@ÝkkV¯¥@ò»nŤ¥XImw@mVwa@ÅwmLkaWw¥l»kçó»@WÑĉğ@ĉŃUwóřVómĵ»Ý@VǕ¯kÝĊÅk°ÓUklkU±IÇÞk±@ƽJ@UġIk@W¦VÑșÓÅnťKULn¯X@¯mUÛ@WÅmóKknōbxÝ@U@kw@ÿÇLţÝUkmwklċVÅU¦LkUWlÅÑ@a@ÅѱUóġŹ¼ÈĉmŻ@@wkwKl¯Uġ@lÇUÓ¯_Waĉ²Åló¼VbknKÇÅ@ƧĢō°Ý@ğWÅxUUm@ÝXÛWULUè¯@mbUaLbUWġxIUJWza¯by@ōÈóLU`ÇXUlUĉV¯nmÛbǕLklUĉVóaġƏbġKţnkbÝmmnÝWȭÈÝXţWókUÇl¯U¯ġUɅĀ@°¯¯VÆnmJ@ĊķnóJUbÝXUlVkL@lVxnnmb@¤Vz`ÞÞŤ@VnÆJV°bUôJkzlkl@²ó@ÆÇ°kĖÇbÛU@lmbXVkzVɅĀXˢlńĬŹ@éÅ@ĉńÆ°ğbUlɜ_°@xŦkbVbƒKĢŤVŎ°@żÈźlĊôKôb@nôxŦÆ@ôŎL@þÆb@nnWˌbÈxInaŎxlU@Ѳ±ğVUĢƨbɲ@Þ¥ôUUķWVô¯ĊWʶnôaŤˁ@£nmnIôǪK°xUXô@Ŧa°mkXÆÞVŎkĊ°ÞLÈôyVaIlwX°UVwĢÑÜKôw@nV@m°nmnÜɞ£VbmXn°ÜÒ@xx@Vb²UlbkxVnJUnVVĊ°KČm°nxÇnn¤±¦@UXVV@lVbmVVÈVxÒ°IbźaČbVw@VLƾÑ@Ŧô¯ĊkôÑ"],["@@@@nòVaw²bVxxÜaČVô_ĊJIVmLa°@Ŏ¥XlK@klKVbUb@nUĢnaÈ@lmǬ»Ġ¯nmnƨVyÑǖĠ»ɲIn@@ÅĢƳ@¯°ôVKÈbVIÇ¥¯@Ýó@ÑnīWKkk@¥¯ÅaX±VÅw@±Ġ¯@»nWmw@@¯VUUWçKĉa±VkkV¯wx@UJx@bknÇbmÅ@Uw±U¯¦UKm¯I¯ť¼ğĊ@ÇŹÈ¯@Ý»ÇnˡJbÛèÇnÅK¯ġĠŹW¼Ålm@¤n²Ýb@b¯l¯@ŤW¼nV@x°@Vx@lbUblbX¼WDzlU@¼V¦@bÇlVxUbVxÞbVbm¦VV"]],encodeOffsets:[[[100452,39719]],[[91980,35742]]]}},{type:"Feature",id:"6327",properties:{name:"玉树藏族自治州",cp:[93.5925,33.9368],childNum:6},geometry:{type:"Polygon",coordinates:["@@ɆÿĢV°°VÈklVôŤXÞWȮÇÞXnmÞnlaŤmĢLƐaĢôbĊUVlkǖKÜan°mĊUVVkÈWV_ôKŎÇ@z°abXyVIJĢwVXaKVbna°@VçVKXÜÞWn@VVÆwXĠÞ@Ŏ¯ƨġÆ@ÈLlmUaô»ÆkĊ±Xb°`ÔVkÈĢ@Vk°Llx@xż@ĊnÇź»ôĢ²VÆÒ@@bÆÒXklVKV¥ÆČUklnxlç¥ċç@±m¥wÅJ@VmÈIléÈa°U¥@kÞVK²ÑW°w²ÑK²ñyÆÝVmw»kkWĉJWUVÅwLmÅ@@mwkn¥VÑ»°°@@»¯LlaJônVUůU@W¯Umѯ¯k@WykU@¯wV¥kVwţk»wWÇĉĶçKÞÇaĉbIlU@kwWXU°w±@UKn£WĉKWxkĕVamwXw@Wmnk@aVkbĉLlImmwUÇWxnÝJn@¥ÆkwaXÜĉ¯ÅV¯¤mkx¯kķܲVWôŹVU@V£¥@°wn@m@¯@UbUôķmn@ÆÛ@ÇýVaUÇĊV@Çlğ¯xÝŤlVÈÈVx¤VxkK@@x@kVĖġ¥kIWbXŎx@nxÅUW`_@±UaLUxK¯WbkVlbbmLÛÆWIUwWkwÝV@kIéUbUUkV¯Km¯k@Umݯm¯mLÞĉÛUmġ£UxkKm°Lwk@kVmKVUk@¯a¯ĢmóKUUxImlÅnÇbXèVVU°@@xXnm@¼ğ°@²ÆxU²WÆb°@¦llXLmĬ@ÒÞô°@ȦUJÇaLóU¯@°ġƴ@Æ@mɱJğ¼ǕÒUzƧmnmğ°ǫ¼knÇ@bġmmV@VaUaLkl@kLWō¦¯@bKUnJĉIó`ċUÛbwUw±axbñUm@@babÇÅXmƒÝÅôVbÞblUÞVÞU°VUx@UV@l`¼nL@ĊLW¤kXķWġXUVVVķUbVb@°kVVxÈa@ȦĊbaźJU@ÈVl@XkôaWĢÞ@laĸUÆb²mÞLĠÞÑôbÒĊaJVbm¦"],encodeOffsets:[[93285,37030]]}},{type:"Feature",id:"6326",properties:{name:"果洛藏族自治州",cp:[99.3823,34.0466],childNum:6},geometry:{type:"Polygon",coordinates:["@@ÞVŤÈK@ĀlxV@Þ@wŎalmôLnXÆÜ@nV°@°WmVKŦLÆmȚÔÒUX¥l@ĢJV@ƾI@wW°Ån¥kÅÝVwôÈç@lÑĊĕaJnaÆLVw°kny°UnkÆVČĊll¦Vƾ@@nUźÈÇIn°XwÞKô¦VWV£@£°ókċ±Iam¯Va»ČĉV¥°@mk¥l@Ċm@aUmwX@wÆxmĢ_`VnÆbKVw@@nUVğVmVVöIll@@çÛm£UÇw°@VU¯»m¯JōĖÅLa@»ĉĢ±`U_k`ÇçókXlK@akÝÞ£WċkÝkxJݯÅwxķxmIÅx@k±J@ýŋ¤UkmV°ÅÝxkwmġnÝVU¦ŤlmóXk¤UKç@mVkK@klī£m¯VUbW¯¼ċb¯ĵam¼mVXm@k¤ÇXÇbU¯J¯¯È@bVXVÒ¤V¼kxÝV@lVWxÛ¦W¯mKnlkU@nƑUĉÝ@ǺÛċUĉ¥UÞÅz±òL±Ò¯xX±ÒLÝU@lV¦¯ÇbkêÇJnU@ÆIxn¦@²Čè¦è"],encodeOffsets:[[99709,36130]]}},{type:"Feature",id:"6325",properties:{name:"海南藏族自治州",cp:[100.3711,35.9418],childNum:5},geometry:{type:"Polygon",coordinates:["@@Vxń@ĊĠĊXÒ°UƾĕÞm°£nb@@LUUWÛº@nlÆǬĠ£ÞV°UXbVȂǵé@kWanm°@xzK°¯ĠVVkwLnm°kÞxÆa¥@wnĉÆ@_l_VwmĸèŤÅČU@Wn@ÑmKUnğK@°¯UÿV£nmLlUUÛé±óókkmnakV@Ç°óÝXWəÞťIţxmmVÛUVȂÓnWyȁĉkV°WnkĊa¥_K°ÿWna@mU¯wlÝIU¤UXó¥ÝLx¯WmJÇÈŹmV@ƽ@Uk¥ĉkċÅUml¯Vmz¯lUxÅKmbIbĉĖkÒ@ÇèóUxÆÞlm¦Æ¯X@x@²ÝlÈJV²klVl¯ÔlĉÆÞ°lUǖÞ@Ķ¼nUôôŚ"],encodeOffsets:[[101712,37632]]}},{type:"Feature",id:"6322",properties:{name:"海北藏族自治州",cp:[100.3711,37.9138],childNum:4},geometry:{type:"Polygon",coordinates:["@@ōmġxƽUm±LǿþġÔ@kxmWb¯I¯mIUx@bbŹVÇkĵblĉI¯¥Um@ƯÈ@aóUlČ»@w»wXaó°ţçÝkUaV¥ÅbÝw¯lmnKlxUğU¯°Lyw¯@mnXbl@êȁǶUWa¯VÝUğ¤ǫkÅ@mܹXVV@K@ma¯¤ÝnƽĖ¯V@¼ôlèk¼¦xXlbnKÆx@bUx@nnxWJţ¦m¼ñ@°¦lUÞlÈ@ĠxÞUlxÒól¯bmIÝVÛaÝnxVbkbÇwÅÇKn±Kbb@VxLmÛŻbkVó@Źxó²Wkb@¯U¤źĊ@lUX°lÆôUlLXaV°wxUb°xÜôÈKVkÈmlwkÈKwKVUŤĉŎ»»Il¥na°LV»²¯Üy@wĢ°ĸwlwĢw°±_lVk@°bƯz@l_@Ģ±lÅVlUaÞLVnKlnÈ°IllČawÞÑ°xUU@wVkmĠLô»KÞýôaÞ¥ôĀÞmÆmUŎV¥Èl°²°a²¥V@@wamm@Ñn@Æ£żVĠ£@W¯Þl@»@Uk@"],encodeOffsets:[[105087,37992]]}},{type:"Feature",id:"6323",properties:{name:"黄南藏族自治州",cp:[101.5686,35.1178],childNum:4},geometry:{type:"Polygon",coordinates:["@@ôl²ôÜêVVkKmnU¤VĀ¯°@LmĠVnLÈL@alb@al@n°V_XmWUÈamaVIn@naV£óVWU£°axÈ¥@aĊwȹ@óağbm@kw@maÆw@In¯mm@UkkWÑÅ@@kċÅçVkÝJÅkVykŹl¥@¯ĢUÜX¥òýmmXÝÅlmU@£WlyXW»Åbl@aI»k@klm@UxUUV¼¯XlaUnķI@x@¯KĉUU`ólČ¯ô@¤ÞJk°xVn@mbX¯ĀL`¦ĉbml¯XUlȂĊXzmȁÔUÜVUnnŤwŦJɚÝXÞW¯ô@ÈlUbmln"],encodeOffsets:[[103984,36344]]}},{type:"Feature",id:"6321",properties:{name:"海东地区",cp:[102.3706,36.2988],childNum:6},geometry:{type:"Polygon",coordinates:["@@@Òb¤ÆI°ôU¼°UnnWx@b¯L@lUUWbXxWlƨnxVUllXVUnL@lȀý²KVnƾĢwV»@mÞ£nÆÞÑmLKUaVżĕWVk²ÆÝ@Xw°@ô@a°wóUUmIkaVmÞwmkny¹VÿƧnÅm£X»naV±Ýw@ab@am¯ĉVó¦kÝWKUU@WanUb@ôǺĉxb@Ǧw¯bV¤UXôU¤bmm@UJnbÇbXVWn`¯Umk@@bka@bÇK"],encodeOffsets:[[104108,37030]]}},{type:"Feature",id:"6301",properties:{name:"西宁市",cp:[101.4038,36.8207],childNum:4},geometry:{type:"Polygon",coordinates:["@@@kmKVUWkVkUmwƧXkWwXaVV@k°K@aXwmmV¯V»¯óÅJ£amX@ċVţÆķçnUx`k`@ÅmĊx@¦U¦blVÞŤèô¯Wbx¼@xċ¼kVôbÇ@Å°@nV°¦ĊJkĶalÈźUa@aVwnJ°°JanXlw@ĢÓ"],encodeOffsets:[[104356,38042]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shang_hai_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"310230",properties:{name:"崇明县",cp:[121.5637,31.5383],childNum:1},geometry:{type:"Polygon",coordinates:["@@uŏu»GPIV±ÐɃŜ{\\qJmC[W\\t¾ÕjÕpnñÂ|ěÔe`² nZzZ~V|B^IpUbU{bs\\a\\OvQKªsMň£RAhQĤlA`GĂA@ĥWĝO"],encodeOffsets:[[124908,32105]]}},{type:"Feature",id:"310119",properties:{name:"南汇区",cp:[121.8755,30.954],childNum:1},geometry:{type:"Polygon",coordinates:["@@`yĉNǕDwǏ»ÖLxCdJ`HB@LBTD@CPFXANC@@PGBKNECCBB@EBFHEDDDSNKAUNBDMNqf[HcDCCcF @EFGLEBa@ACoCCDDD@LGHD@DJFBBJED@BGAEGGFKIGDBDLBAD@FHBEF@RFDMLE@SGANFFJBANPH@@E@FJjRIACDMDOEKLFD@DbDAJI@AP@BGHFBCBGDCC@DCA@CECGH@FKCEHFJGBFDIHACEDNJDCVFBDCRKRLDLITB@CjNJI^DBCfNVDHDFKHAFGDIICDWBIF@@CFAjFJNJBBHD@CJ@AEFJ@@DH@BFBCPDBMFEQGDIFCNDHIP@HDABFACBJFHEBSZC@DP@@JDBƤ~"],encodeOffsets:[[124854,31907]]}},{type:"Feature",id:"310120",properties:{name:"奉贤区",cp:[121.5747,30.8475],childNum:1},geometry:{type:"Polygon",coordinates:["@@~T~JjZdDbLXDLCB_J@@FHFZJJIAGH@HGR@BENBLID@@LFCDF\\FpDBDb@FAHKFE@dEDDdC\\GreNMACVMLBTMCCFCEGFAA@DAFDLMHA@OD@BMEWDOC@AS@KGAI_DcKwÕísƝåĆctKbMBQ@EGEBEJ@@MBKL@BJB@FIBGKE@ABG@@FMFCPL@AjCD@ZOFCJIDICIlKJHNGJALH@@FPDCTJDGDBNCn"],encodeOffsets:[[124274,31722]]}},{type:"Feature",id:"310115",properties:{name:"浦东新区",cp:[121.6928,31.2561],childNum:1},geometry:{type:"Polygon",coordinates:["@@EN@JJLNHjLJNR^GRYVBNZJRBV@PDvbLNDN@LGNER@nCNQNuT_TIVFV\\Z\\XnDrI|[Ʉś²ÏJUHOƣ}CA@IO@@CYDATGFIEDAEBBAGCO@GJMCEDCJRHEFANOCADAEG@@CI@FE@BDIC@AGIAIMiEEB@DE@AJCXJDCJEHGBELGCUCeMAD]CIJiM@DSAKJKCLQDQACUECDMIFCBDJGECHAEIWCK@GLMCCGEACNKCEJG@MMBMC@@CIJUINT@JAJSTEPZZCP"],encodeOffsets:[[124383,31915]]}},{type:"Feature",id:"310116",properties:{name:"金山区",cp:[121.2657,30.8112],childNum:1},geometry:{type:"Polygon",coordinates:["@@L@BIHFN@@EE@@EFBDGDAADVDD@@EF@CA@IIsRE@GDAF@BF@CV@|FBCHBLCNHAFCADBMDCFZXHILBVEEQA@MWFARJJ@DCX@@TEFBLHAAERE@AJABRPBNK\\BrJ\\VHGND@CNADKDADQjGAGNC@GJ@FCFFHC@JF@@dLBDSFADHVG\\DTEPDDHJALIJkJDJCDIPE@YDCBiK@DONE@EH@BAF@HLJA@EIA@ALKNA@@FIFAFHR@NALadsæąyQY@A±DʼnXUVI^BF@FFF@HBJEDFFGFEBSRkVEXGHFBMFIVW@GAEEFOIAIPKABGWEKFSCQLQBSEIBC\\FdBLRR@JGACFDDEF@AWB@LJJYNABBA@CUEGPaO_AIE@MYMFIGAEFECHSAAKAO\\[JEDB@E@MMA@@AGBKMGDFFCDDFEDFJF@NPBAFLHFH@EDDHBADDC@DDCDHHCDDFDABDAD@FEFOBCJ[D@HEDDNJBDDHABJIBBvGLBJAH"],encodeOffsets:[[123901,31695]]}},{type:"Feature",id:"310118",properties:{name:"青浦区",cp:[121.1751,31.1909],childNum:1},geometry:{type:"Polygon",coordinates:["@@RUNKdOFDJCbRFMLAHPLDN@JGL@@APBWYCKN@TU@SHGCEJIDIJKVIZVNM`iNY@CIE@CA@KBOEGEUFCCSADEIEFCDDDIDDHC@CKIeDCG@IG@DHWFEEGCH@@GO@@O]CNpeEQDBFME[JC]DGF@CKOA@QSB@GB@@GW@@ED@AQIJIAAFE@@DO@CFI@KNG@CDACAFEGKGBEGBDCCAIFCCLIECFI@MBCLDHGNAHSF@DMB@EEKBA@@C]DEICFG@ADBHGFKCDAKKHKD@@FHGAANGEEFCHKCECBCKG@ADKCNE\\[A[I@@mGBDQQEO@BCE@AI[AML@JGACLOAFKEMM@EQKC@CUCBCCBCHEA@FF@@FM@GEAJK@GNF@EXPH@FD@M^@HIADJCFDBER@DK@@DE@CAKFOCCBDHIBCNSB@GFC@GQEEOWFICGDUAEJIDBTAHJHEB@DIF@NE@H|HBDBEH@DKBAHEF@HEEUB@FGFGCCCE@AHOB@NH@PRLVNNFBX@RCPbAvMtBfH@DJF@ELBFA@EH@HNED@FFB@HLC@CJ@@DJ@PIRf@HE@CFF@GPHD@DKE@FFBEFFD@DEFCA@DD@IjCRFBAHFDKD@HF@@PM@H@BlbDJDBFEF@DLXB@HCD@@IFCBIFEJD@FDC@FBALLF@PAACJERACAJCBD@EL@JD"],encodeOffsets:[[124061,32028]]}},{type:"Feature",id:"310117",properties:{name:"松江区",cp:[121.1984,31.0268],childNum:1},geometry:{type:"Polygon",coordinates:["@@@DLDFRN@FNELPBDKHB@INK\\BBJF@ADP@RFCRHA@nJ@B\\[\\MFLDBCH@DLDADFGLEDFFMHBBGH@EC@GLLLCBLDHEAGBCH@DEFJ^C@DB@LAFFA@CNE@GTMBGHKCAD@NEJFDKJDDJEDBCDHAAFLHFHBEBDDCH@LMJ@DEP@@CF@BEJBJIBRC@@FX@@HA@@HTA@RPBDLE@CHD^\\INFAERCfFMo^D@PP@@HG@HDFFXECGH@@JDHfCLJ@DGDCCCJCCEDJFCFTBDDVEHFPFLAB@NBFCFKFC@CHIACNOHWHCAAFIDD@CDAGEI@ACFMF@R@R_@GQED@EGFEQEDE_IAHKAEXCQUOQCUDEN@ZI\\DDmAMHCICDSOC@EG@BKHIGMIBCGOCSF[CUHCGEBCTKA@cE@@IGDEEEDI@@HMDBHiHCRCBCLMB@DMCGH[UqI[AMLOAAQIB@BQFBFGBAKFE@SW@CDI@QIEBNXB@FRUFKAGJYWDENCCADBBEMGKDGAAD{EU@@DAEE@CB@HQFJt@JDBE@@FC@"],encodeOffsets:[[123933,31687]]}},{type:"Feature",id:"310114",properties:{name:"嘉定区",cp:[121.2437,31.3625],childNum:1},geometry:{type:"Polygon",coordinates:["@@F@LI@IDKJADKIEJICADGACFECCJ@HKCAFOHAJI@aCBEE@ICAEB[GFGCKL@FGEIFADMLCAEJM@ELQECEIG@BE^QKKLQCA@EHBIGQ[GEHOMGGDHKH@JOECFCjCBEFDNCACMBCILGTABDLEEOEIG@GFIMM@CGKFBFCDE@@GEAGEEACIcGaHMFITIHDN[AKF@FS@OA@BK@IHM@KCGOKBENaQIDECcPMLQVFHFB@BFBKLGD@FAJOVGIACQ@A`LPCB@JEF@RU@ANS@@RCL\\HIFpRBFRBBDKLLDADJDGBFDABHBEDNF@DGBBBADKDAHC@\\JJFBDEH[DEFDH\\LX@XLBLbT@DNJLDCEL@VJABJNDHB@HBHYFBAA@GNFB@@AFB@AFABFLFBHFCL@HJBAFBLC@DN@HN"],encodeOffsets:[[124213,32254]]}},{type:"Feature",id:"310113",properties:{name:"宝山区",cp:[121.4346,31.4051],childNum:1},geometry:{type:"Polygon",coordinates:["@@mÖoÖi½[s[YEUJU`SCIEBCCWJY_LIICDWU@@FaBCJIB[ICH[@@CDKEE@MK@@IMCAEBCH@AMFI@SMGEFGB@FK@BHCAIFJNQD@FEBDFMBKGACG@ECWH@@CDDTOEEBGEK@GC@EE@GPHFR\\JHGA@FDBKRLL]RAFH@FJFDKR@FINBFKDCNEBFJEHK@DLEH\\HFADB@JFFDA@bIJGBEPDBGLI@DDEFBDCHDBIJJFCLIBCL@JKJE@ADHDBHJ@HIBBDFHBBAEIJ@BJFAVL¢"],encodeOffsets:[[124300,32302]]}},{type:"Feature",id:"310112",properties:{name:"闵行区",cp:[121.4992,31.0838],childNum:1},geometry:{type:"Polygon",coordinates:["@@T@@ELE\\BCMJGJSNEbGdHDJFBJAFIEIFCEWG@@gMENSFCVJFAxR~B@IH@AIiI@GE@FGEAFQPDRiV[\\DFSGMHAXHDOMCJCDETBBNVJJI@DD@ANNNH@FILDDMFBDHNDHKL@XDFGLD@EHGFD@DDB@CDDHCDAEAHG@ABOJ@BIaC@CECLKPFNCDCJBiQEIF@@@OGBMIAEEBMTHF@NKEC@QFEGA@EBCKAACHCLJHEFHHB@AFCAIEACIC@HG@KCCDC[ECEED@KC@KJMAAFQ@GHG@BHIJYIGE@EI@A`KDWCaKcCiY}I}S[CYJM@CFDVPRRVWDFLBBG`JCFRFEFFHC@RF@HQ`Q@E@ENBDJ@HFCB@DCCEJBBGDGXMPBDGJ@DEDELEDMA@DJF@DMZ_jMNYUUJILCJIJDFGH@TSVM@DLXZ"],encodeOffsets:[[124165,32010]]}},{type:"Feature",id:"310110",properties:{name:"杨浦区",cp:[121.528,31.2966],childNum:1},geometry:{type:"Polygon",coordinates:["@@V@CXJDKJZ`XIDDFADJvSRMDM@mFQHM@KCMKMuaOCU@BDAJSX@HKJGD@PNJCJWAGT@R"],encodeOffsets:[[124402,32064]]}},{type:"Feature",id:"310107",properties:{name:"普陀区",cp:[121.3879,31.2602],childNum:1},geometry:{type:"Polygon",coordinates:["@@F@@FHDL@HFFAPFCSDC@@XGFDH@BDLHNACEFA@ERCIMJEDBAGL@@EHAFENHHJ\\ONQBQCIBC[MKACKI@GGGH@I_G@CW@[DMHCDIBMTDHN@JNHEH@FJFPKFACSBKHDJNABDMDECAFiDEDFDIPG@GLHCNH"],encodeOffsets:[[124248,32045]]}},{type:"Feature",id:"310104",properties:{name:"徐汇区",cp:[121.4333,31.1607],childNum:1},geometry:{type:"Polygon",coordinates:["@@RADL\\NCPHFfLJaJ@FWLGMGIK@IFMDOYYFOTSBI@IMSAMSACFIDNDCPWGGBHNET[CU\\QjOCERFBEHF@@HjJBJG@@J"],encodeOffsets:[[124327,31941]]}},{type:"Feature",id:"310105",properties:{name:"长宁区",cp:[121.3852,31.2115],childNum:1},geometry:{type:"Polygon",coordinates:["@@HFFB@HF@DCAELENSJADCNG\\CX@@D`H@JHGHHJ@BINBFUGEDO[MCKQB}AwQEBUIEDMTNF@hH@FXEDFJEJIB"],encodeOffsets:[[124250,31987]]}},{type:"Feature",id:"310108",properties:{name:"闸北区",cp:[121.4511,31.2794],childNum:1},geometry:{type:"Polygon",coordinates:["@@CSG@BQGODUPWTOBQAAFMECKBGEMFKEOHADDJARMR[PGI@TEJBNG@ADBFND@JL@@NFFCL@D\\@DG\\JJADI"],encodeOffsets:[[124385,32068]]}},{type:"Feature",id:"310109",properties:{name:"虹口区",cp:[121.4882,31.2788],childNum:1},geometry:{type:"Polygon",coordinates:["@@bA@E@QHSXBDIMI@OHCLI@GTWBIACQAYIOFGCENBBARSPOXCVHPARH@DT"],encodeOffsets:[[124385,32068]]}},{type:"Feature",id:"310101",properties:{name:"黄浦区",cp:[121.4868,31.219],childNum:1},geometry:{type:"Polygon",coordinates:["@@NEHFLAFDHDPEAMZUHQQ]IMKJG@EPERABHBGRUCCNGV"],encodeOffsets:[[124379,31992]]}},{type:"Feature",id:"310103",properties:{name:"卢湾区",cp:[121.4758,31.2074],childNum:1},geometry:{type:"Polygon",coordinates:["@@VDHQGABAFQFOH@LIiKKHEXI@IbAFZB"],encodeOffsets:[[124385,31974]]}},{type:"Feature",id:"310106",properties:{name:"静安区",cp:[121.4484,31.2286],childNum:1},geometry:{type:"Polygon",coordinates:["@@DLLB\\NPGLFHUDMYABEeKEVMAAJ"],encodeOffsets:[[124343,31979]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shan_dong_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3706",properties:{name:"烟台市",cp:[120.7397,37.5128],childNum:9},geometry:{type:"Polygon",coordinates:["@@ŤLLllVń²è°xżĢĠÆlÒŤbV¤ĊXnlĢVĊÒÈ°ĊŰÞèL±@џn»VUźċ²»ÆkôVɆkĊŃ²kŤVVwUUVmUa@KkU@mUmmk@UwUkmW@UVIXa@mw@aKULax@Uk@UbWU@yULmK¯@kXVUwm@@JUUknWKUVLUbU@wWykIa@w@mUI@aUVynIWak@@Wbl@@knmK@wnIl°Kna@V¥ğ@ġUķ»¥@UōJX¯¤k@wmI¯k@mwak@@lX@bUJ@VbknWxkLkxlLVlkLmb@bU@bU@VbU`Vb@nL@mbU@VnUVmnU@mm@kIUWVIUKVkkUJUnmL@VmLUaVWaXamU@U@KUUmVUJUVÇwğnm@mXĉV@l¯xnô"],encodeOffsets:[[122446,38042]]}},{type:"Feature",id:"3713",properties:{name:"临沂市",cp:[118.3118,35.2936],childNum:10},geometry:{type:"Polygon",coordinates:["@@bXll@zlV@lXXmkbVVlU@Vn@@Vmb@XKVXWJ@XXl@ÈbVLUl`@XXV@VVUxVbUxVb¦@WnXVJ@bnVUzl@°ÆxUKlU@mUUnUlUVWVUnVV@XX°V@Vll@VkaXVl@Ux@bmbXLlKlb@b@bUJn@@b@n°x°K@an@@UlLVKVbXb@bVVnK°LVa@UVa@XwKVxnLU°@naV@UWUkWULmVwÝKUUla@aó_@mK@aUU@WUkwVm@aVI°W@@IUw@a±¯@¥kUVUm@awkw@K@kVKk@maXalI@alLWXblaVLVUV@LnK@l@waXaLlnUlLmV@n°J@_VmnIVym£UKmI@WnIVm@anUVmÇ_kġIÅWUXÇm@U@ݯÅ@@naWIVW@IkK@klKn@naWImk@abkKkLWnWkLWmk_@UaVUKmLUw@mn£WwUmUaóV@UkUm@UKULUwmJUX@WW@XÒzVblJXWXk@UVWKX¤UL@xU@@VUaU@@XmVkLmWkXUyÝLmKXnV@n@lx@bWLnVVn`knULmxUlWLXVb@VK@z¯x¯¼WxKUn@bk@lVVVz"],encodeOffsets:[[120241,36119]]}},{type:"Feature",id:"3707",properties:{name:"潍坊市",cp:[119.0918,36.524],childNum:9},geometry:{type:"Polygon",coordinates:["@@l@@UK@@L@bX@@VlL@JLUVnX@`ÜXn`V²mJ@bU@@nb@l°xnnĸVÆ°@Ċ£Þ@lWnÑnkʶJmó°w@kk»V@»¥k@V@kw@wVmaÅmaô£ŎXI@mlnKla@mV_UK@kUkw@alWIU»m@WUIl±UUÅUbkJ@a@wUKUaVIÆmXIWaka@m@Ul£XKVw@UIJUkmJVkU@aWKImV@UxmL@bX`WXU@U`ÇkUak@@°UblXkmLUKmL@VULóVk@@Vlbn@Ub@ċaUJUbIUlVLUVVbVKXVlVXU@mb¯@VmKUwLWx@Ub@VUb¯KmLUU@aWaUaULkK@Vm@@b¯L¯w@ma@m@UUU@U¦lJUXVmkb@nmXVWkbIVxUV@VUbWLXVLW`Ux@nk@Vn@x@VkJ@V`mXk@VxV@lVI@VULVUIV`°bVXXxV@VWVnL@xVUb"],encodeOffsets:[[121332,37840]]}},{type:"Feature",id:"3702",properties:{name:"青岛市",cp:[120.4651,36.3373],childNum:6},geometry:{type:"Polygon",coordinates:["@@@nUJXL@blVUnIVlIVJ@UxWLk¤@V@nlbXbWJÅnUJVbVL@x@blIaÆVVVk²VJ@XnV¼JkX@blxlV@VLU`@nkbLkm@nWJōó¤bnÆbUn@xlxU@l@¦@¼Ul¼ĊUnW@nĠmÈxUVIVnUVV@LV@nVWbXbUVbnK@UnKVmVIllUVLUJVXlJ@nnV@nmVUUm@Vna@K@mUaV_UaV@aV@@aanlKUkKklwlKXwlma@UVI@akW@l@bnxl@°nJxl@°£WŎIUÑn»lamô¹Ŏ¥VaUUkmkġWɱIUUŹ`@kk@ĉƨřV¥_Ç@Ĭ¤ÝL¯m¯£ƽóķwUW±ī¯kōaĉĕkğmó°bW@UKkLUaVmz@V@UxVn"],encodeOffsets:[[122389,36580]]}},{type:"Feature",id:"3717",properties:{name:"菏泽市",cp:[115.6201,35.2057],childNum:9},geometry:{type:"Polygon",coordinates:["@@@¥IVUÈmÞ»@UlU@Un@VW@UVmkk@aVUUKVÝ@UVknK@UV@VVnIV@wnmwmKXaWaXI@UV@Vy²blkVKkamU@kb@Um@VmUkmKmkXKWwkU@Ul@UnK@UVUUmKXwUVLwKU@@Wl@@wUkV¥@@I@W@_V@VWUw@UUa@aaWa@@_mKUwl¯amzmV@WKnU@kWLķaUKbÝVmV@UWÇbÛ@X°UbW@XmVlk²UJUbmLÇxÅWUzl¯Ll@VkKXUbWJ@bU@¯@kbLmKka@l_WXºVbUz@Jn²V@¤lXnV°Ln`WbXLôVlKVUxXnlXLlU@bVV@XJWLUVnVV@@nl°nnVKÈbVXÆJU°VnXVkV@@xVL@Wlb"],encodeOffsets:[[118654,36726]]}},{type:"Feature",id:"3708",properties:{name:"济宁市",cp:[116.8286,35.3375],childNum:11},geometry:{type:"Polygon",coordinates:["@@nam_nKlVLXaIl`_@KVVXI@m@w@@k@Knô@n`VbV@@LL@KVVn@VX@VLJl@VUUU@Uam@UkwKWaXamkJmIUVUÈblaUnV@kVKl@@lXL°kVJ@VÈnVJUX@VLXl@xVLnU@VKV@aIUaV@bĊUxKkVJXUlVUVaI@WUI@KlUnwmWk@WXIWUL@Wna@Um@@UVkUUlanWW@kkU@ykWkaWVUlÝbUU@kJUIU@@JmaókLKÇUUkKWLk@WbkUUabmKn¯°¥V@XwV@VanaVaU_@Wlk@WÈ@VUÈVVÛmaklKȯlLVUX@lK@aX@@kV@VmV@VwnJV_UWUwXam@kW@wVUkKVIUUVmU@UV@IVK@aUL@aV@LmUKmx@ômLkUWJ@nXmlUxUL@VknVUU@VL`Ub±LkV@kUKÇbÛ@UWó_mJ@Wk@@X@VLxUKVWxLVnUV@VmL@Vk@VlVXxWLnlLnVlUnn@@VlaV@nlbULkl±aUzU@@VWJXbWbnLnxm@xUmJUUU@@VmLUl@VUÞVLUV@bllUn@VUXm@@VkV@VݼÇnUVJ@¦nnlnVlL@Þb°KVV"],encodeOffsets:[[118834,36844]]}},{type:"Feature",id:"3714",properties:{name:"德州市",cp:[116.6858,37.2107],childNum:11},geometry:{type:"Polygon",coordinates:["@@¤@VmbVXnVVbVJX@ll@zlVInl@@bVxUbĠl@ÈblaIxXVWb@L@nULWVXXWWLnL@`@LUVVL@lVnJU@UUkanVôôb°¼VÞXIÜbČabôWXÞWÈzÆmnLVJ°ÈnlV²lbnW@@UUVmnwmkkKWkla@mVIUKUaaUwmnJU@@amIk@@bVlkX@mmUklUUa@_UaUUV@wwWkXmW@I@WUaÝU@UXaWUU@UUVW@UUUWUn¥nUVa@m@k@alU@wkLWa@UUm@@wnmUwla@anKn_@alK@Ý_@@WUUUmlkaIyU@UwU_Wa¯yU_mWUwkImm@InWWUk@@UVWVkW¯U@VL@b¯b@l±¦@VV@lUbV@kxVnUl¼XV@b@lV@nIWxnb@UULxÅxm¯aUwU@mUÅVÝKULm@bmKUXó@"],encodeOffsets:[[118542,37801]]}},{type:"Feature",id:"3716",properties:{name:"滨州市",cp:[117.8174,37.4963],childNum:7},geometry:{type:"Polygon",coordinates:["@@Vb@`bVkVlnV@nlWUk@al@nJ@bV@InmVxbVbVLUJ@nkblXlLnlmxnUV@V@mXnlbĸ@nnVxb@lnXV@UJ@nVxxnxVbÆVn¯ƒĕ@@wÈçUÇlķVIb@Çmk@¥k@UkUK@aWakUóJW_UW@wkkWK@U@K@XUUkmUUalKXala@U@kkWlkÈl@kVmVIVmU_awnwVW@wwU@wU£wkJWIyUI±bkVUJ@nmVUklXmx@lnbWkVUkLWxkKUUmUkbJ±LÇxUKmkUmkkWamUaVkJÆ_²KĠ@UW@wU¥nUWwK@aÝUkÅVaVK@akLW¯I@bnbVx¯JWñWbUL@nV@VmbkUUV@IÇak@@bWak@WJUJWL@bXV@@VJlb@zUlUUImnbVmz@°UV@VbV@@V@L@xLmKUnmJVXJ@VkLW@UVUL@b"],encodeOffsets:[[120083,38442]]}},{type:"Feature",id:"3715",properties:{name:"聊城市",cp:[115.9167,36.4032],childNum:8},geometry:{type:"Polygon",coordinates:["@@ô@VWnLan@VKÞLÆUnVV@xVbn°ÆwwKVV@maXwmJU@@k@aWUk»VUmlw@UVa@kUU@²¥@k°a@aK@UU@mmm@ówѱ¥¯@@wKmwI¥kU¯UmakJmIUaVkKUkm@VUUaU@UaKUK¯@wUVUIUKVwk¥wbV@xn@lWnXxlL@`XlJX¦l°XxW¦@¦Uln@@@Um@@VXVmx@¯bllUnUJ@VULVn@bxVVL@bVlnVVblVÈnVlIVJLôlJ@xl²"],encodeOffsets:[[118542,37801]]}},{type:"Feature",id:"3705",properties:{name:"东营市",cp:[118.7073,37.5513],childNum:5},geometry:{type:"Polygon",coordinates:["@@ͬUǪlô@°Uw°ōĠ¯»Ģç»XÇ@wwƑaÇkwVƑ¯@ÅķUmm¯w@ka@mV@@anIU±m_ÛW@_mWVUK@IkK@UW@@a@K@L@Vk@±U@UV@lm@mUU@kLmxV¤@xVx@xUXmxxbV`UnUJnU@lÇkkllX@l@VkbWbkLVbnVVlWV@@L@VXLll@xVXX`ôIlVXb@bVLVll@@¦nlÈ@aUJkĸVÈÇè@x"],encodeOffsets:[[121005,39066]]}},{type:"Feature",id:"3701",properties:{name:"济南市",cp:[117.1582,36.8701],childNum:5},geometry:{type:"Polygon",coordinates:["@@²¦Òôxn@nn@V°VlXUUX@Vl@XVmX@JnnlJVxnXV`°zXbV`VxV@zJlbkVnVV@X@`@ÞkL@bm`mL@bkbxnVm@xn@VV@XbKl@xkV@b@l@nUbmVm¦XVVV@VUXVVV@XVWb@VÞVVb@X@JnXlWXx@xUVV@aVKVUX@lK@UIUWnIVmnLK@w@K@UU@a@UVU@¯nyUmanVJVVk@ykaIU@@WU@aXKIVXIl@Xb@al@Èb@JVUlVna@UmU@VKXaòX°IUwma@aU@UU@wVW@Ñw@aI±`kbUkwUmJ@UkmÇUUkmKknUV@mJUkaWka@KmKkULmyXa¯_@WmImmbLmUkVUbUVJbUkkWJkUlIUmkLlK@knaVmkI@mWaLUKUU@@VmLUVLWK@UUUWUkkVmx@Vl¦"],encodeOffsets:[[119014,37041]]}},{type:"Feature",id:"3709",properties:{name:"泰安市",cp:[117.0264,36.0516],childNum:5},geometry:{type:"Polygon",coordinates:["@@n¼WnxL@x°@¥Uk@nwlUVlXVV@VXLKVUnK@UV@VVLKXb@nlJUnmb@lkLKlVnJklVXIllVaIVUValUnVKannnJ@X°`WbnzKlVnL@LbXlbVlnI@VUU@UmV@U@U¥@VmV@@_Ua@m°@@kmUUm@UVmn@nX@@aanJVUVLmlIVJn@nkVLVa@KVmVLXVVL@@U°bn@VaV@@K@aVkbWaXUVymU@aUImWX@¥UaVwUaVwUUU@WW@k_VUKÇa@nmxkV@LVJ@XJUbVkUWVUIlLwĉVaU@VbJ@bUUL@mVUK@wWkK@UVWUIÇm@UUI¯lWK@kk@UL@lmUVkbÇaUVVnJlInWbXbLxVln@VbV@VUV@kIUK@UWm@UU@LK@KU@Uam_ó@m@L@l@@x@nWJUU@L`k_JWbUKkmLn`mb"],encodeOffsets:[[118834,36844]]}},{type:"Feature",id:"3710",properties:{name:"威海市",cp:[121.9482,37.1393],childNum:4},geometry:{type:"Polygon",coordinates:["@@VbUnVVUxĊ¼¼ô@ÞѯWǬLŎUÆW¹UÇō¯ÑÝkţţóġóLł̥Uwm¥kÝmkkKóbÝ@U¦@mb¯LkmJ@xLmn@lk@a@X@lXbmJUzV@bVJ@n@xblJXzxV@VaKVUXLlmVV@In@VxUlW°@nLVK@zXVVal@@VwbVKL@bnx@WbUJ@VnXVlVxl@nnnV@lV@L"],encodeOffsets:[[124842,38312]]}},{type:"Feature",id:"3711",properties:{name:"日照市",cp:[119.2786,35.5023],childNum:3},geometry:{type:"Polygon",coordinates:["@@UaVUUKVkJVaVIČb@Vam@ka@Ul@UôVK@UnKVLnKlkWVa@¯l@VbÈlV_V@XWW_@anKVwUmVw@@UnyUVblKVLX@aô¯ó¥mÛĊÿÈ¥Þ¹lUī¯Kĉ¼ʟbÇVUUXmakJUnmV@bUnmJ@XnJVLn¤UzmJUn@`¯ImU@nKVkkmKWbb@xk@mL@KUUVUKkbWaXkK@bkJWbnbl@UL@lL@lxx@bnUVlV@¦²°@bVx@J@¯XUJ@bUnlxVX@VV@bL@nô`@bkbVVÞLxnU"],encodeOffsets:[[121883,36895]]}},{type:"Feature",id:"3703",properties:{name:"淄博市",cp:[118.0371,36.6064],childNum:4},geometry:{type:"Polygon",coordinates:["@@nlKV@nVn@@kVU@²VVaU@wmKXU@UUWwUW¯aU_JUVVK@UJU@kUw@UlnWU_@lI@U@wUml@@mVwX_KWUXKVa@UVUUwJlaXWUn@mlanUVWkIV¥V@VVVI@a@akakLWKna@aVwk@WUbUlk@k@U¯UWWU@mUUVUXkVmVVV@nkVLVÅw¯k@WVXbaUl@bV@@b@xkVVXVxkJ@nk@@VLUlVbVXUVVUzVLVbUbVVWVkLmkJ@n±@UxUVVkV@bx@ÒUX@xVVV@°JXlK@bULUblÆÞV@bLXxmV¦V@xXVğ@±LÅ`IUlVbnbXllVnnlVLÈwK²IlanVVVlLwXlKVlUXma@knwWlkVnU@mVIUl²aVJzXJlI"],encodeOffsets:[[121129,37891]]}},{type:"Feature",id:"3704",properties:{name:"枣庄市",cp:[117.323,34.8926],childNum:2},geometry:{type:"Polygon",coordinates:["@@yUUUkl@@aVmLXw°»°w@yL@UUaWXKVknwVKlm_UmmUXK@aw@k@mUWmUL@@@£@KbÝV@akwaULmbUKLUU@lm@°mL@nUJVxVXU`mIUxU@UnU@@lW@@bkLW@UVkKÇ°kLlbnUÜÇUUVÇ@@Xkl@XV`UbmbUbU@WxU@¯¦m°nLaVblVXal@XKlLVVÈLKôlnbI@V@VJI@lVVÞaVkXU"],encodeOffsets:[[120241,36119]]}},{type:"Feature",id:"3712",properties:{name:"莱芜市",cp:[117.6526,36.2714],childNum:1},geometry:{type:"Polygon",coordinates:["@@lmnLVlÈVln@VnIVlxVla²_JlUUUVVw²@@mlInlKXUUUVaUaKUVyUUWVUUaVkUK@l@@mlIUwUWlU@w@aU@@LU@Ubm@¯a@V@UKWUUKUn@LUbUKmlm@UIkJnUKUVmIb@b@mWm@Un@VVnnVl@¯@@nVb@`U@Un@¦@V@VUVnV@"],encodeOffsets:[[120173,37334]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shan_xi_1_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6108",properties:{name:"榆林市",cp:[109.8743,38.205],childNum:12},geometry:{type:"Polygon",coordinates:["@@ýVnIW»W@»kUÇLÝU¯¥ÇIUWWÑUWwX¯m@»n@ÜÈķô@a±kȱwÑmwçċmU»ÆkkVyImĉÿ@ݹWnwÇVÅazmmĉ¦ókVmxxU¼VkVm_UlVlk°IVkmJa¦kLmmV@XmKnlUôVXbb@UaÇLğÜÅw£mKnmċwÅ@UkbmaVn@m¯aUJm_k@kWXyl@@kÅamwLUÞmWÅzUKUk±@b@nnKbX¤mzVVxÇn¯@ÒknWVUbkķÈÑWkk@VaU@mUkbÝÅ@Ý¥ÇbkĬXV`kLÇVmalUUanV±nwmkJ@In°KVw¯UnÅ@¥U±bUU±mWbÛKWnUm`UƒVK@bmnmÈż@VL@xxmŤ°n@VmK²VllKkô@êÜV@VXLlm¦UV°Ș¯²ÿ@¥@ÆĊ²ImĶnnb°bKVĸLlÞ@UȮÜ°IVÞÝÞlx@ķĀWUxèÆ@°XnlĊĖ°mnV²V°ÒƦaÞ@zll@bÞĀl¼nKĊ¼óÈb²±IǪÒ¯ĖV@lxnVlkJlaXwŌĉ@VnlÆĕUÆLèŌŤôxÈlU@xlaUċĕXmIWmnkVVVW_@aÈWUUmk@¯çVm»±W¯n¥VmkXw±ÇVw"],encodeOffsets:[[113592,39645]]}},{type:"Feature",id:"6106",properties:{name:"延安市",cp:[109.1052,36.4252],childNum:13},geometry:{type:"Polygon",coordinates:["@@@kkÇmImUwVkUU²WmVkm@m`mIĢĕUVa@mXÿVVkyUýĕ@l_UmnWKVkţ¥awğ@@aôWakUma¯¯a±£kxmmxUwÝ@xmUb¯KwóÝ@kmm¹Ub@lklVbmnnVUV@xUknƧJUX@LÇWkwLķƧÅwWJkLkþĉxWzJUnÇk@Ɛk¼ÜÔÈKè@°lÈÆk¦ln@l¼@l¯L°UUVÇ°¹`m¼mXkbUaV@U¯x@¦ÇUUmlmUVmnnmlkw@@¦ÅÇLmx¯Ikl@¦mÆ°VUx¯Lm@JInlmxU²mVbkVbUnÈlKU_WlīÈaÞ¦Æ@ÞlanV@VUbl@XlÇÒĸlVaUXlm@Ñ°ÈmUwUnyW£amL@ma²@lVVLÆynXÝVKnxÆb@lk@WzX@lln`IV°b@nmUnbaVlÆ@ČxmnnL¤ÆxĠÛÈKVb@aWaUókVmnL@WUnnKl¥bnIlU¯JlUkVkn`lUUV»wnwlUôĊ¥nnyÆb"],encodeOffsets:[[113074,37862]]}},{type:"Feature",id:"6107",properties:{name:"汉中市",cp:[106.886,33.0139],childNum:11},geometry:{type:"Polygon",coordinates:["@@lKnb@nlWb°bkxĸwVb@łnlĊ¥L@XlÈVblÈKbakVwôml²`n@nVKlk²xŎ°¦VUJĊw@çnWçÞVkUóÛ@¥kwUmX¯WÑk@UymIUwlUn¥mUk²a°¯V»@ÝVÈÝċÅÅVl»@l@a°±@_kammÅba@m@żKknõĠ@m¯LÅwLVxmb@¼kV@mw¯wVakKW»X±¼¯Vkxb¼W@nx@x±bóakb@ÝmU@ķÓÛLkVUmk¯¤ÝLUlÝ@Ýzx@x°bmX¯aUJW¯k@bÇWwÛwWx@XWlb@VÈUlwLnl°VlUô¦U°¤VUxVXUxlbkVVlI°ÅVlU°m@kÇU¯xUlLUlVL@b°ĠInĠ°ÈnK@xÞa²naUyXUKVkWô¼Èaz°JXUVÇV_JVz@nb"],encodeOffsets:[[109137,34392]]}},{type:"Feature",id:"6109",properties:{name:"安康市",cp:[109.1162,32.7722],childNum:10},geometry:{type:"Polygon",coordinates:["@@bĊaƨèwôô¼b°aXVÞVUÞ@aXm¥kImx¯¯V@anU@UÇéğL@¯¥V£m@ÝÈbKX°wČÿb@xÈblxȯĊmÆUVnÈ@ƨÜLĢ¥Źn°VnnKaô_ÈwUaXmnW¯klLXÇō¦ÝaÅVmbğUn¥±wÅéVan¥U»°am¥£Ý@wVw¥nUÑUmmVwmķIÅaóVWxkblb@ból@ğÒĉ¤ċX¯XxkÇ@óÆÅx@xķ_kmÝÇ£kblb@`¯²@bk@k¼ÆUČÆÞÇÞU@U¼¯°±bVlnm¦kVVxnJVz@lÒXW°nVlx@¦ôÜVUlÝXèm@è"],encodeOffsets:[[110644,34521]]}},{type:"Feature",id:"6110",properties:{name:"商洛市",cp:[109.8083,33.761],childNum:7},geometry:{type:"Polygon",coordinates:["@@²nlôb°aVwnKÞI`°wXôw°VĊ°@ÅÞÆVzÞK@x@aLÅ@b@nLl@lnmnLVwabVVnbU¼V°blbÈ@ĶŦb@nÇ@amIyUI@ĠVmôUVwkwlanJ¯lwó¥@an°J_@nóƒó@£l¥UwmaÑ@Um±V_J£JUW¥¯@_k¯¼mUVUè¯b@wmL»ğVmağI¯¤ċIUWXKĵ¦ķaJUbIlUóVmk@WÅÅÇ@mUÅVnĉÇ°kwÇa@waċĀ¯xWLÇa@ÞnU¤°¦@ĠKÈê@VmV@bU°°nwlJn¦WbÝ@V"],encodeOffsets:[[111454,34628]]}},{type:"Feature",id:"6103",properties:{name:"宝鸡市",cp:[107.1826,34.3433],childNum:10},geometry:{type:"Polygon",coordinates:["@@@£@°Ib@¯°ynŹaUlU£Umĵĉ@@ylUÞ@@£kWU¯WaU£¯ÇV¥@kb¯wn¥ÇkUÇnU@¯±kULm@m±_kónUxlbaÇLkUaÇkW@Kĉ¦km@ŁUaķxlw¯aXak@mmakL@mÛ@¼m@lXV`nKU°°@²¤UÈ@VxmôxKlVV²aVwXlaVlx@UVnÇnk°VVLlkIJÇk¯V@knÆn@lznmlVkzVVVx@Uxz@x±¼VxxUlkb@¼ČkVXlĠkôV²wLUKlwJ@aIV¥Þn¯Ün@nkl²kÆ@°aVbnI@Ťn"],encodeOffsets:[[110408,35815]]}},{type:"Feature",id:"6105",properties:{name:"渭南市",cp:[109.7864,35.0299],childNum:11},geometry:{type:"Polygon",coordinates:["@@@ÈôLxU°Þ@mÈnl¤nUôLwX`@ÞÝLUmLôôbVbnºlnÞ@ôx°LanVwÞ@Vxnwnlw²¤b°°bVnlXbó@bĠ@xb¦ŤVXġ£W¥ƽɽó@ýóƝÝ»£XmƅĊkU@ókťaĵÇ@aka¯UV»maUUabUxmKnkm@kmK@xó@¯n¯KǦ@ôÅèlxkx°nƾ¯KU¯WķL@VÝIUbyWbX¼Ç°"],encodeOffsets:[[111589,35657]]}},{type:"Feature",id:"6104",properties:{name:"咸阳市",cp:[108.4131,34.8706],childNum:14},geometry:{type:"Polygon",coordinates:["@@IXyĊwlýKlXIVaķ»a£¯aVU@awÈōaL²»VUln°WȯW»XazVaÞJ@U»@¯Ýbğwly@£kÑţ±WÑ@kaIUn@¯ómţUbU¯lÇIÝb@¤Ý@kV@zĊ@ĶnVV¤kVbmź¯z@°a¯J@¤@bUxb@`xUÔ±ºVXWUnUJLĢ¯ÈKlblmÈXŎ°U°LlkÞK@Èxl_°ĶUÒkbl"],encodeOffsets:[[111229,36394]]}},{type:"Feature",id:"6101",properties:{name:"西安市",cp:[109.1162,34.2004],childNum:5},geometry:{type:"Polygon",coordinates:["@@°²@mVVÈÈl¦m°xla@U¦°ÈV¤XbV°lXÞaÈJ°kVaŤVôn°@mVJlb@XÒŤ²lÒ@¤kzĠxÞa@°¼ĸK°XV°Lƽ¯mlwkwÆç@óÈ¥°L°mô@w@aÆK@b@wÝLyÅUÝÆ@ĉ¯¯UóxW¯x_ÝJmLUx¯bóak±mÝUUW¯ba»óóxƧçĉbaĉxIUV¯¥ō±wl"],encodeOffsets:[[110206,34532]]}},{type:"Feature",id:"6102",properties:{name:"铜川市",cp:[109.0393,35.1947],childNum:2},geometry:{type:"Polygon",coordinates:["@@ÆxĸƨKlxÈXK@VWƨIlmV@wVUmUnmUalk@kVaUaóaónKVÞK@ÝW_xóKmVk£ÇmnÝ@¯VwóK@ǯXkmVU±¼KbÇŎx@bUV°b¤b¼ĸUb"],encodeOffsets:[[111477,36192]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/shan_xi_2_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"1409",properties:{name:"忻州市",cp:[112.4561,38.8971],childNum:14},geometry:{type:"Polygon",coordinates:["@@Vx@lnbn¦WlnnUm°²VVVVVnUnºlz@l@J@kXWVXl@La@KULlbnKlLnKLnKÆXn°bVV@bUVl°Un@LnaVJUbW@UX²l@ČwlVVIWnkÆa°anVKn°UW¯@aVUVk@Un@aV@ValwUanmWUk@WVUUanaVwnLVl°@nk@mVU@UVK@wLVKVU@K@UUKVUV@@bnLaVaôlIXmlKX_°KVV@bVV@zV`kblIVUlL@bnV@VĊllVlIXW@kaU²blKVnIlJalbXXlWVn°JnnL@l@XlJlaX@XW²@l_VmnKUblU@mnkVK¯@U@ma@kX¥VmakkLa@a@WIUUVXWWnk@a°a@kkm@kUUmJm@WUUUIk`m@VkaWWkXKmXk¯@WKLkak@±bw@aa@aka@ma¯@LKÇÅkKWbkmġ±ÅULUKVVkm¯LUVVbUwUW¯bmULxWJ@klmkUm@@KnwVkVK@akw@@a¯bKknVUIb¯mmbk@UbmKUL@xUU@klmLUlVXIVVVUVUU`mLXVWbXnW`Ų°xmxU@mĉwU@mbU@UmbkVW¦kJ@X@`¯Im@UlUVVnb@bWJXnmbJUUUUa@UamIkax@@x@b"], +encodeOffsets:[[113614,39657]]}},{type:"Feature",id:"1411",properties:{name:"吕梁市",cp:[111.3574,37.7325],childNum:13},geometry:{type:"Polygon",coordinates:["@@@a@w@wlbnJVb@VbVVVInaWmXI@aaUmVUVkn@°J@_W@lIX¥lUnaVV@naV@xĊnV@wn¯wƱX_WmXaWUnKV_VVUUUUWJkUVnKlk¯@@kmKUaűKkU@WmI@WUIlUUmVwXw@UlUVwV@LnbW@anU@UaVkô@l»n@naJnUÈLVaÆUUVmVKV²L@mU_lK@UVWkUa@a@U¯aUaÑóÑUbKk@@ak¯mVaUwVÑkWUmK@UUKmXUWÝwUaLUU@aWJUUU@UaÝU@WL@VKVaVI@WnU@alIVK@kImIkJ@m@@@_K@x@kaW@U@Vmn@UK@mIJUXV¤XXWlkKkkK@XmJVakImJU@ó¯LWKUV@nUVLkxmKkLma@kXKmmLabLmK@V@mXVÆUxX@`nLaV@@VmLUVnLlLb@°²nx@bVUxlb@V¯bUV@zVXVĊXVx@lVn@VnnmU@LlJXVz¯VWVXbV@bmnVUVkÇþÅ@XVxmbUlVUlnW@Xl@VLXÒ@bÞJ°¦Lò@nUb@°X@XbmVUVnb@xx"],encodeOffsets:[[113614,39657]]}},{type:"Feature",id:"1410",properties:{name:"临汾市",cp:[111.4783,36.1615],childNum:17},geometry:{type:"Polygon",coordinates:["@@nW@@UnLKabKnnWL@lnblKnLlwKVU@mVUXL°KôV@nIlJUbnI@WlLllLXkWWU£VWInJ@VL@nm@UVX@lb@@wL@`@n@V@lw@nVmVXWmwnUla@_lKwVlUn°xVKVXXWlUVVI@K@Kn°KwlVlU@kna@V_WnmUVm@kXml_@mLlKXw°m@_ôJVUV@Xl@UaV@Va°Ilk»VwUkVmwUmmVn@V¯@KUwmK@U¯wUVÝ@mJUnWK@@UnKVa_lykUmKÛnm@x@UUlwVkXW@a@U@@K@kIVnammVakUl@wX@@k¯@VVbml@°UbULmlVbnbÅK±VKVXUJWa@ULWaUU@@U@aWK@UkxUKLUUUJ±UkL@V±kk@kam@UV@l@LWl@n@VVUxLlUUx@VUVU@aIUlL@°mLUbkUUaWUUaUU@aWKLWJ@bUL@VUVVbU@m@a@kmKmnĉlUKXWUblbxmIkU@xWb@lkVxLXmzVV@bklVVUzm@bk@Vx@xlU@lUbVnl@Wxnl@n@UbVmLmb@`X@lUX@@xlnkLWaUJnnWVVn@l@bULVV@lV@XnJVX"],encodeOffsets:[[113063,37784]]}},{type:"Feature",id:"1407",properties:{name:"晋中市",cp:[112.7747,37.37],childNum:11},geometry:{type:"Polygon",coordinates:["@@@lInJlJ@ULkJ@bmV@XUJUbL@UXKV@ÞVbV@VVXI@bVVKVbÞxVXnWVL@VnLVlXÒUVxUb°nl@bl@LVaôÒÒVb°b@VnLnnV@lmn@lbUV@JUVVXkl@lUzmJ@xXklbUnJVUbnUlbV@nlLX@lakV`Ub°@XVJnUL²KlxnI@KV@lbUbVVKnVl@zlm@U@nI@WUaVl@@mVU@XkW@nkVKV_Vwy@knwVa@XalU@Vnml@X@VLKVaÞbnnlJImVKnVVVInVlU@m@mXK@UmyUI@mWUUakamw@wUwmLkakwVmKw@wUam£y@am_W@UU@knmmamU@WUa@knw@UUUUV@nJm@mVUkKVUUUkKmwKULKUImV@lUnnm@mbUK@°bUnmbUmkkWUb@am@UXkK@a±@V@ĉÅVUXVxUVkLWl¯@@bULUlm@@nm`XlWakIkmVUbUL@Vm@kI@@Km@VaXI@W@aU@kUVU_KbJkkÇb@nkKmLwÅW@kVUUVU@WUIJmIXmma@_kyVaUUlkUm@kUx¯Lm@L@LUJUkVWXUWUL¯wVmUkxkL@`bkmVnxXUWUnm@kxU@"],encodeOffsets:[[114087,37682]]}},{type:"Feature",id:"1408",properties:{name:"运城市",cp:[111.1487,35.2002],childNum:13},geometry:{type:"Polygon",coordinates:["@@VlnJwkaVaXWVLĊknmnLl@@bnV@UaVU@UVK@aXIKXL@bVVVbXVVblVaVnK@¯KVkJ@bVVU@UVwkVKVwUUm@@Xk@K@kVUn@lbl@²l@UlK²VVIVVKVLlw@VXL@b@VV@VXbVK@XbVIUWLU²ÆLmaUankVKVa¯@nkUaU°@n@@kWaUVaXUW@IXKVw@UWU@W@@UUU@mn@`m@UUULkUmJIU@@UK@U@anak_@wmKUwmakVkmKVk¯bw`kwUIÇx¯»ÇaÅmn@@mmUkV@wkKW@kxmLUkĉLÝkxÝw¯lóVUmV@ĀVVX¦W¤kz@`Vx°²ĸ@Ul@xêĸNJ°¤VVlXLWnXxmV@nUl@"],encodeOffsets:[[113232,36597]]}},{type:"Feature",id:"1402",properties:{name:"大同市",cp:[113.7854,39.8035],childNum:8},geometry:{type:"Polygon",coordinates:["@@²£yl@ČĖ@bĸĢbĸXaKŤnn@ŎôllÈxnVnÞÇV@bnXllL°KbVb@J@b@UxlKXLlKlXk@UlkJlkUVKXUÇVIVm@_nÇLalwVnU@UUwma@aaÝaLmUk@@W@U@@XwVWÝUUUk@@VmLKV»nwUwaUL@`mzJUIVUaUwKUaVIlJôanÑlLVUn@a@VV@@UUwVK°Vn_lJÆLéW@UUUÅ@»lm@aÞIVwXWUUkkm@U@aU@mwU£VWU_kWmXwW_°yUkkK@UÇK@kkUVymóKU@KWIbUak@mJ@bkbmLkUmkVUW¦@lnb@@V°ULml@nkVaVmLUnk`±@XWW@kbǦX¯WxI@xmbmxXlWV@bÅUz@Jb@bÞbU@Wbk@xk@WX¯VÛWÝbÝUkVUU@alI@a@akLWam@U¯UUmÇL@K@aU@¯VUkKmX@`@kJ@nVUb@lbVÆXVWULU`VbkLUV@XWl@bXJ@VbV@Vl"],encodeOffsets:[[115335,41209]]}},{type:"Feature",id:"1404",properties:{name:"长治市",cp:[112.8625,36.4746],childNum:12},geometry:{type:"Polygon",coordinates:["@@UkLky@IJVa@mÞaWy@_W@_WXVlUVw@nw°K@mUVamVkU@mmmnLVUmKXaU@IlKVUnK@UmWkX@WV_V@akU@aKWIXyIUVmUnUa@WaXUVKVmkUWVkULU@@VbKbIUm@mbVLxWUUkn±V¯wbÅJUbmLkbmKÅKbVnUbVKUbKUbmLKmbaKkUm@UnnVnxUVlUxl¼k¯JUbU@Vbk@WU@UVóI@`¯nWxkLK@nk`Wn@lUnVnmXU`@mb@lkV@VnklVVUblz@`nbWnnJIVJ@XUVVUV@lÆXxnKlL@maÈllIaLV`UlVV@@b@XJWUb@n@L@lJn@@UVKVaUlnlJXbkWn_@mn@VkVK@a°@XklKVUUwVWUĊÆ@U²@@blLVWn@@bVaXllVnnaVma@¯VLnan@mVm@knUVJ"],encodeOffsets:[[116269,37637]]}},{type:"Feature",id:"1406",properties:{name:"朔州市",cp:[113.0713,39.6991],childNum:5},geometry:{type:"Polygon",coordinates:["@@XXWVXVWnnlnn@èƼ@xlVnblVÈUVl@blnLÜĊmUkU@Ua@WI@aXk@WVUlKUaV_VKXWUUÅka@VaU@mlI@@_nWLVl°UV@@b@LÈKVn°V@VnXblK@b@bkJ@bVVlUÞVÞaXÜ°UXWl@wl@XaV@Ýa@aa@IVyÆ@aXUWknwna@wJXw°WÈ¥kI@W@kmKm¯IUmkXWWkabkImJUkL±aVb@lWXkJUkĉk@UmU@aKkVUkJlaU_y@UU@aUU¯LW`kLWnkJóbUbmK@aU@UVVL@VL@UVULK@xUL@VUV@nml¯@UkmKUxmbVbUV@XlXVmnVbkxUbU@bm@@VUlUVb°@VX¯m"],encodeOffsets:[[114615,40562]]}},{type:"Feature",id:"1405",properties:{name:"晋城市",cp:[112.7856,35.6342],childNum:6},geometry:{type:"Polygon",coordinates:["@@lVLbanLnKVaLVaLUVaUmaÆLnLlanKVaÆIa°x²UlmVVXwUKna@VnJaLa@UV@@alUkKVKnkmmVwUkw@@kxWUXW@@mk@aUa@a¯aLkKmwkUm@kL@K@aWIXmVXWkUVakL@UVKw@aUK@UUKmLU@¯nKUwVUIWJUWmka@UXJk@UkmW@kLWKVx@bmI@VUaVU@a¯@UUmVKmX@±`kÝKVxUL±akL@VbLkKmV@XWVUbVXb@lm@@lW@@xklVUbnnmbUlJ@@L@@Vb@WXUlkxVV@wn@ÜmnLlVkz`UbmL@V@XLmVnIÞ@VU°x@VnLxV@LU°"],encodeOffsets:[[115223,36895]]}},{type:"Feature",id:"1401",properties:{name:"太原市",cp:[112.3352,37.9413],childNum:5},geometry:{type:"Polygon",coordinates:["@@@VV@wVKnLVal@na°naVJUlmL°a@b@lx@bULUlmx@Ln@lVknl@XIwKVn°aVXVxUaVU°KnUlUVLKÆV²ĢlnXalLÈÆLKUaVkUanmWUa@WwkUWU¯y¯Ñ@anIl@@aVUmIymULUUVakaU@@LmJkw±LKmVUI@W¯VaU_lkbW@kK@mUkaVmVaUIVmalkW@wnIVy@klkWUUVI@UVkam@knU@mmmK@bblVUX@VkLV`@n±KUULUnVVÅUbÇKmVImbm@k¼ó@Ulb@VmV@bXmaK@UUxkVV@xWUxVnkVVJ@XnJ@XlV²LÆVbnL@l@°"],encodeOffsets:[[114503,39134]]}},{type:"Feature",id:"1403",properties:{name:"阳泉市",cp:[113.4778,38.0951],childNum:3},geometry:{type:"Polygon",coordinates:["@@°@nb@lb@bbb@x²al@lbKXU@mkUWkkmUUVwV@XUW@naVklKXblKnLnLVanImaXKlLaV@U@KUKWalXK@£WKXUV@VUUUVW_V@W@@K@UIWmXUmULnJkImmÝaUbLK@UWk@mnU@kVWb@Ubmx@lzUx`UULml@XWl@UV@nk@UVb@XJm@@Vknyk@zJnUV@bk@mJ@b°Ò°zXVlVXx@bXVmnVbUlVb"],encodeOffsets:[[115864,39336]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/si_chuan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5133",properties:{name:"甘孜藏族自治州",cp:[99.9207,31.0803],childNum:18},geometry:{type:"Polygon",coordinates:["@@aXam¯wm@±°wUwV@UaVw²KU@UU¥a@£ÞôxKnkmX¥IUÝUwlk°V@ÈKUwlkUyV¹mx²XllÑW»lw°UŎnJl¯°V@wôIVÇnnUllLVÇLô¼XW£@±@¥k_ÇJkUékwXa@Llw²Vxbm¼ÈxlLÈVWÞn¯mÇÑUÝlÛkwlĉmULmwUJç@wkm@ÑlUXÑôġVaUѯ@wķÓkbVmnU@@y¯IķKV@¹aé@kmÞU°¥@a¯@anKlblU¥@óğç@Çw@wklaçݱk¯±@ğÝUÛmݯw@kb±¯akXWÜkXUÆÇU¤X_ƐwV@¤XUbUIUlÇUkġ@aXČmlUlèUV@mVk¦Vx@¦±¯¯¯anlW¯nÅw@w°KVak£m@klKknÇU»óKīlaUaV£@¯@ÆUVÛÝÇXÇlÓlŹ»WUğJ¯£mxLĵôºXVlUll²bllxónn°ÝU¼mJU¯nV@êĉ°Uĸw@m@¯kmXamѯaUwÝKU¥mÅn¥Wmn¹n±ƑƆÇôXê±NJnUôlĖkȂVÒ¯¼VnȮ¯ĀnƆĢ@k°V°¯ĢVlkVxm¼X²Ŏ@VxknWÜ°U¯nÆÝ@`ôݲÒÇznmX@xè°K°ÅUČĬóĖÝó¼ÅêÒbmk@V@Òl@nĉÜêx@ĖmlÅJ¯¦óxȭ°Ým¯LĵèĀ@Æl°żX@xmkV@z@°blnÞ°J@bn@ƼUVUóóL°X°ÝLxUn°Ĭn@lnL@Æ@nKÆxnUnVInĬmÆnxŎ¼ĊIĢóÞ@ĊƨbUmV¥lkwnLmÅÆ¥XwU@wwUÞ@alUUÅUVkkm°aU°Ó°w°Ub°a²K¯ĕ@ÈbÞĊa»XVm°InĬk¼VbaJô£VĊankůnÜU@anKnĮbÈmÆ»nIé£Ġ"],encodeOffsets:[[103073,33295]]}},{type:"Feature",id:"5132",properties:{name:"阿坝藏族羌族自治州",cp:[102.4805,32.4536],childNum:13},geometry:{type:"Polygon",coordinates:["@@l@@þ²I@lVL°wnJ°UĸŎèIlwV°¤nĮ¤ÝlèL@@xlè²ôĊ_ĊġVÈôJżīlbXÆÈVkxÇVn°¦Üb@è@nn@@°UÈ¥WÇ_Uala¯¯UÇk»mVwk»k²°VxlL@¤_@x`ÈĖöb@l²alXa@bnK°¦VK@nnWmx@nUnl@@llĉk°l°UXkmW@Un`kÇLWÛÈVxVVlVk@lIXb@ylXÈWĮWŤzy@mI²J@n°@VJ°aÅ@ŎkVÇkaUwKVwV@nkm@±ôkôĊJ¼InÑm±nIÞXÈĊxĊUÈbÜyÈ£Vkw@kVUVm@a»ÜbÈmUXwÝxUn¥@°ġÅaJVkaW¯Û@W¥UŏĶ@¯kUŃ@aI@mmanwÞW@mw°»Uřk¹±WxVx¯¦U°zţWw@°ÇVÑk¯@y°a£@mnl¼aÝÝakwU±aĉImlĵn@m@kkV¯Ñmĸ°xl@XVÞmlÛÝĉUÅ¥mwÅ¥VaUwXġċaVůÛŹlwU¯Uó±xÛV±¯¯n¯mċLmnĊm@_kJWaXmwUĉK»@mwXÝUÇkKÇw»naUw±kxK@WbxlVêlÈIl`@¦@²X¤Wó»KUÈKkkmVmUÈóJ@x¯Uk°Imō¯VxkX¼Òkk±WwnUºVzklVxLÇ@¯UklVxÞVJW¦nmlLówÝ@¤b¦V@VV±LUxVbU@Vx¯x@²n°xnWbb"],encodeOffsets:[[103073,33295]]}},{type:"Feature",id:"5134",properties:{name:"凉山彝族自治州",cp:[101.9641,27.6746],childNum:17},geometry:{type:"Polygon",coordinates:["@@ĶóKnw°¤ĠIXV¼kźÔkÈWÞÈÜUVÅ°@@U¤VbkbĬôL¼ÈVlmLlkn@l¤Ub¯L@xÆx°mXmk°b°°²@¥Uwl¥nU@VUkçVnkWċbĢ@lÈVVkJVaVW@£UƏxW`£ÈVVÅlWXÛlW°b²la@°xnÞVÜĠÞ²@l°Þ²èkbl@xÈx@Ġènal£nUDz@ÞKnn¤@¼°U¼nVXUbnĠUVbUlV°LX@lVèÜUnK@_yXVyUwmIU»VkÇ¥ÿkkV¯m±n@n¯ÜanVVÆz@bwÜbm@wa@kmk»@a@VUUów@nb°mXmnVbÞVôanwJak£lwLÅnÝ@wl¥IÇÓ@UL¼kVÇÅó¯kVmmw@n_Vn»°LÅ»@éÇçŹīVÇÝ@ÝğUaVݯķlŭġl@óÞÛċ@¯nkUÓm±IVġUwóKUn±¯Kw»KÝVnl@óxUwţ£ĉUmÅÇÝKÝUlmK£UV@ÞÈW¦Ò@Ĭnny@nÒmV¼@°Vbl@VlnUUwl°a@@llnk°lbnKWĀnUVxU²Åm¦ÛÇÅaUVb@¦m`móXUmmxÅ@±Þnè²U¯»mVm@wU@wÝÝmLa@VÇUkl°¯VlkV¦UmxaULUèVx@kIUxmWV¼¯VmȯUnlÈ@m»ÅVWxÅbÅğW@km@kVV¦mlnn@ōl¦ÅÆxk"],encodeOffsets:[[102466,28756]]}},{type:"Feature",id:"5107",properties:{name:"绵阳市",cp:[104.7327,31.8713],childNum:8},geometry:{type:"Polygon",coordinates:["@@ńlV°@ŐĵVX»ÆUĊÑJw@È»m»£°Kk@ÇnÑÆ@w°JUwnw@wbVb@VlźLUwa»aUklyUUVakwWXwWUxkLmn¥mwkUXlJw@aIk°X¥W²l¥aUIlmkklÈL@m°nlWUaW@V@UaV¥@ak@Çk¹K@aK@kKkÇX@VU@kx±VèkIWwUVUkkKÇ@a@wkml¯@kUWn£WaaVwnaVÝw¯@UaWxnJÅUxUma@L@mbUU±VVnkxUÆVm@kkKW°X@¤ÇUkÆÇnU¦¯kmLVwÅK@UóbÇÆV¦L@±êX¦mVÞkÜÝnWU@k¯wķn°ÒUlln@@ĶmnkĊJ²bVlxÞbÞbk»mn@¤¯bz@l°UÒ¯È@xŤXyV¯°¥Uww²XlºVŚ¯¼nx@XÝmxnb@nJ@b"],encodeOffsets:[[106448,33694]]}},{type:"Feature",id:"5117",properties:{name:"达州市",cp:[107.6111,31.333],childNum:7},geometry:{type:"Polygon",coordinates:["@@Uxn°bnlUnÒÆnn@n¤LnxlUV@Ælx°XXxl`XVWLè±nÈb°b@²x°Kܼ°ĉV¦lJnU@¦ÞJÞğmLÞ»xUlbVÆannalVÆX@lnŎVmUmaÅXa@aWm@£@wĉJVkkkkmnk@mna@alKJ@ÞwmÅÅ@ambkU@KUġKU@mak¯±a@aĉÑÅaVwXlw±V¥l@@ak@@£mĉÝónWV@nÝÇÇxUmbaVkkk@m@m°ÝýXmakÅī@@mb@@xmnb@mxkWL@¯b@WUXmWWKkbm@kxXmm@LUlxlêóKnUallLlLó°m¯JVUK@xK²Āô¦l°"],encodeOffsets:[[109519,31917]]}},{type:"Feature",id:"5108",properties:{name:"广元市",cp:[105.6885,32.2284],childNum:5},geometry:{type:"Polygon",coordinates:["@@ÆLĊx°»Ŧ¦WLÈ@xÞKÜ°ÞnVxÅĀlÒnJ°a@wV¯l@XWknKnwVÈ°XXalX°VI°bWna¥@w°n@yÆ@nkÞ@°¯lJn°IÈlUlXÅ@ķlUV¥VUUÝÞUU@UwJUkĉm@ýlkWUwVwWJk@VUKlUkaVUmLkm@@UIk`@UmlUkV¯ÇXKÝ_mm¯@U`kwml¼±KV¯¯Vk±Vk±kzmaKUnDZbk¦±X¦¯WlJ@bxkIWVlxnm¦nlKVwXWxXlxUbVVkzVlb¼bVxŹKUk@Uaa@xmxVx¯Ix@ÅmÒ@Èl¯L¤n¼"],encodeOffsets:[[107146,33452]]}},{type:"Feature",id:"5118",properties:{name:"雅安市",cp:[102.6672,29.8938],childNum:8},geometry:{type:"Polygon",coordinates:["@@ln@xèVInxVKnĊklxkÜVÞÒnÈm°nx@¼ĊLVnxWXblI`@nmĉnKČôÅlUÑmUK²¹@ÇÅVÓůVýÞWUVmXÆbnwKUÿ@UmmIUb¯¥Uw¯ÇmçmanUm»UUlk¤a¯bVU_WĕmÇűĢUlUlÛVçkU@W¯KUVkUağVmaVWUmV»¯@»m£mÝL±@ÈmVk¤mb@ô¦kVkamL@b°@b¯¦ÝVn@lêb@ºUĸL°J@zV@nmUlaĸÔ@x°VÒUbóĢÒWkV@Ò"],encodeOffsets:[[104727,30797]]}},{type:"Feature",id:"5115",properties:{name:"宜宾市",cp:[104.6558,28.548],childNum:10},geometry:{type:"Polygon",coordinates:["@@VlÈnlXnWLX`m²nV@b°xĢçlnVmnn@@°UzlV°nÞÒkxlw`UnVbmL@albÞKÈÛmܼ°@XÇ@wmW@ÅKĊLlVLVŎçÞL²±ğkw@Uy@¹lKXlKVa@wČ@w@aÇU¯n@@wġakaōK@Å»VakUWmķwkbğ¥mLak@ġÞ°¯xVVÞ@VxVVWxXlxU@k²WVÅULmèULVĊklĠVJVx±nů¦mwğ@mlğkkl±@kUk@¯±ÇKkxl¤bImx"],encodeOffsets:[[106099,29279]]}},{type:"Feature",id:"5111",properties:{name:"乐山市",cp:[103.5791,29.1742],childNum:9},geometry:{type:"Polygon",coordinates:["@@kVkÆkV²UlºÈIlxLXèÜlUXUmkbVèx°@@¼°Knnn@mÆIUbnJ@bVI°b°±@nK@mVakkKl¯nbmĸèl@VnÈlUUwwmwnm°¥LlLnU@VaImbkmKnk@mbLVJVUUVnkVmb@a¯JUaÆkk¥IW¥KlwÑmÝU¯kVy¯@@mmnUkmġè¯w@aU±mnW_XKWmkÇmUkóbUÝUanmW¯nma@xVôUV@b@l¼n@lb@xnÛaxa@yUÅmUÛbm°@mn²U°llĀȦlUV¼nJVxUzWz@`mL"],encodeOffsets:[[105480,29993]]}},{type:"Feature",id:"5113",properties:{name:"南充市",cp:[106.2048,31.1517],childNum:7},geometry:{type:"Polygon",coordinates:["@@ȲVmLnblyl²²UUl°U°²L»knlx_V°@nnÞ`WL°ÈUVlnkV@l_JV@n@lnKV£ÇUV¯m@laXUUbVx@VkôJU°Jn@wUk°wnUV_nJmknmm¯Vwk¯ó¥±ÿL@wLVUkUbX¯mykI@a±Kk¦ULmaXVm¯Kz±klUIVbÇJkL¯lUÿUlUkJUmUUkVVklKk@@aU@J²x¦kĬ@¼±ºXnWbxU@xx@lL@bLlº@Èl@bU¦Vb@U@XbVkX¯m@nÇKkllknJV"],encodeOffsets:[[107989,32282]]}},{type:"Feature",id:"5119",properties:{name:"巴中市",cp:[107.0618,31.9977],childNum:4},geometry:{type:"Polygon",coordinates:["@@VUlbkVVLUl@XIUxVxXkl@þĊnVlIVx@VVÝVÞUVU¦kV@ĸWÆô²@VÞn@Vaôb²W@K@XUmÑUW°¯°Ina@y_lWn¼lLUbô¼Kla@nkUyôÆx°@n£Ý@¥mVkIU¥Ċ¯Û»¯L±w@¯aÇa²mçKXUWk_Ww¯WwÅk@UkVmwK£@mmmÅmÑkVmamnnlmIU`Vm¯xVlx@m¯IVóIUl@UwVaVWkb@nU°VÈU¤"],encodeOffsets:[[108957,32569]]}},{type:"Feature",id:"5105",properties:{name:"泸州市",cp:[105.4578,28.493],childNum:5},geometry:{type:"Polygon",coordinates:["@@VVXwVKnwnVnl@b¯xmKUbVn°°X°@blLènV@Vnl@ULnmmUnaVV_ĶV@wnJl@@kkKVólaUwnJmwUlm@aUaôKVnJWbÞ@VwVLX¥VV_Þ`wWÞŹmmnIn¥W@kWV¯@°kILk¼Ç@k¤±XknmݯUlÅÛKWV¯klUwkLÓ@U@w@ġXVWX@UbVbV_kÇVlU°lnwŎ¦ÞaƯnmm¯Um¥nkVmkl_ó¥¯UÇl¯@Lk`¯ķLUy¯@mw¼ķ°ġ_ÅU°mlnÇVUÞ@_JUnVUXblĢb@x@mV°Èb@xċ@@xUbkLWkL@ºzV@lxĠ±²"],encodeOffsets:[[107674,29639]]}},{type:"Feature",id:"5101",properties:{name:"成都市",cp:[103.9526,30.7617],childNum:11},geometry:{type:"Polygon",coordinates:["@@°n°m²°ÜUw²ôV°VkxÜźUŰČbĢlaÈL»@kwVÇ@nÛÆ»ÈUÝ°Kl_V°U`Vbn@VbÈLaVU@ƨ»VnIlUUa±lIk±@VnKmÅ@WaK¦lVōkKÝ@maXÇmw¯IU@kVwUmVIçÿU±Å@¯È@xK@wLUbÇKÅ@mÝ£@yóUóóUxkI@WlIUabaVĀLmxÅaWUnVÝXUþÆ°UÔÈÆ@±ºLnVVÒkóÆ"],encodeOffsets:[[105492,31534]]}},{type:"Feature",id:"5120",properties:{name:"资阳市",cp:[104.9744,30.1575],childNum:4},geometry:{type:"Polygon",coordinates:["@@èUJVnxU@lV°JnxWÈnbÞ@lLŎUk¥LXbÆ@nmLU@zlbXmlnVynLçJVbUnómUnamUan¥lKV_²aValWôn@nbVK°¯VblW@kklUnlV£°W@wUXk°KVwmVkwVyVI@wkmVÅ_Umm@Uÿmbk£xUaVw±V¼V¤kLWxU@UkbyXóm°V@@zÝÒkKn±U@@_VVkÇaVwnLWalm@@kkVVl¦kIV`±n@wKk²aVUUV¤nkxmUkVWVnLUbVb`kUUmLUmX@`ÅbÇXbWLXn"],encodeOffsets:[[106695,31062]]}},{type:"Feature",id:"5104",properties:{name:"攀枝花市",cp:[101.6895,26.7133],childNum:3},geometry:{type:"Polygon",coordinates:["@@bKÞnÞ@xV@xnUn°¼V±mç²ÝÆ@wnnVWnôn_@¥UaVbÆÈÜn¥Æ±VUwVmXÿmLkal¯km@k@¯bkVxmVUkk@Ua@¯»UnmÑ@mzm@īÑX¥Ç@ÝxU¦ÅÇUkx@lbUWVXmV@xĵĖ±@@¯xUÆLnÆmx@nXL±lUUVwKWak@WxkbÞĉbUn@@@xó¦Ŏ"],encodeOffsets:[[103602,27816]]}},{type:"Feature",id:"5114",properties:{name:"眉山市",cp:[103.8098,30.0146],childNum:6},geometry:{type:"Polygon",coordinates:["@@Vx°¦VanJVn@baVbkJ@XlJVwôôôV@zÞ¤@nÆÈLVaK@xL@w°ÇÆ@²VĀmWXKWaÈÆa@_nWVnKVlV_UaVamKXUWwnmmwÑm£@ynUkWĉUkWVkkV±çkJmkKK¯¦mnnxxVxVÇkUmk@çķnmak°LllUb@nmL@¯²¯aUJ@amIVaÅJnm@mm¯L@»¯@wUçanlVWVÛkWçKkwÇJk¹±VUÅlġV²ÈÆnXĖV`U°ab£lkVVn¼mVnbèÈn°"],encodeOffsets:[[105683,30685]]}},{type:"Feature",id:"5116",properties:{name:"广安市",cp:[106.6333,30.4376],childNum:5},geometry:{type:"Polygon",coordinates:["@@VlIVkVĀVk°lKÈIUaVJlk²yLn°UWnbVKl¥²L@blJnzW°alV°Inô¯KkKkkbVmôLkéwVk@KnnWlwn@laXLnXVW@X°a@XKlnw@man@w@na@@wĕġġwUkUWb@mk@¦¥mUÛb±yÅn@bml@kV@lknVbmVnlmbÇk¯bWyk@V_UamJ@I@WaVXamIVWkUkbVaUUx@VnkVU¼bkKUxmK@WxnV@n"],encodeOffsets:[[108518,31208]]}},{type:"Feature",id:"5106",properties:{name:"德阳市",cp:[104.48,31.1133],childNum:6},geometry:{type:"Polygon",coordinates:["@@nUW¥²é@K¥UÈÅôa@VÆLUxnKl°V¥ÈmlÅÈV@£WX¯lLln@UVÅlwUm²UVVna@@KnbVVwÆImXwWkIVwÝĕVUaIèmKUzkmWnka@y@l²kJ²VbVkmJUƧ¼@UVbÇKUam@Ua_¯VUk`¯LVÞÇżmÜ@UÈx@l¼ÇKkbWVxUbƦnxƦĊV"],encodeOffsets:[[106594,32457]]}},{type:"Feature",id:"5110",properties:{name:"内江市",cp:[104.8535,29.6136],childNum:4},geometry:{type:"Polygon",coordinates:["@@²èlUUllXĊVXlmV@zn¤ÒnxmnXxlUnVlwmU£VVUbl±L@x²mU_lJ¥UklU@ln@kXbmKUxÈblUU@`V@²mlLÞÑ@yU@¯ônWzaVlV@XwlKU£»aVaUwm@mwUVUwklVDzLlKVm_@ykUm@mUçkKmxkIUÝ@LUJ@n±kºLXb¼@mmIXa@mamnkWKUx_U`UklwUwmUbV²akbmkn@`UmÒVxUbI`UaÝÈ"],encodeOffsets:[[106774,30342]]}},{type:"Feature",id:"5109",properties:{name:"遂宁市",cp:[105.5347,30.6683],childNum:4},geometry:{type:"Polygon",coordinates:["@@ÞĖUxlJXVb°@xUÞmbUxbXbm¤VX@lk°ln@xbÈ@lLVlVUXxlJç²UlwV@@UÈWlLw@wVwXaWm²¹@»lī¥w±I@V@bl@kLUllUVVn@mmUwXċbVb@VUkbmamW@ka@k@laUa@¯b@mmwó@@lkXUa¯°LUamm@ókXUb±bU`kLm¦bnVmbnVmô"],encodeOffsets:[[107595,31270]]}},{type:"Feature",id:"5103",properties:{name:"自贡市",cp:[104.6667,29.2786],childNum:3},geometry:{type:"Polygon",coordinates:["@@lIÞÇbV_JVaUwnÑV@_lmnlab±UVanVxkxVlV_`wVLlXnmnb@WbnJ@n»WaKl¹²@mVI@KÞVlJnw@aW¯¯¯UmVanL°w@akmmUxmULWxUUÝKōèUKUkĉKL@ÆnX@xWȯ@Û»nÇÜÝLka@bKnUaVm_xkLX¦Jl¦ÅlVb°I@bnaUmlUVUVIUKa@nmlnLlnaJUbV@"],encodeOffsets:[[106752,30347]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/tai_wan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"7100",properties:{name:"台湾",cp:[121.0295,23.6082],childNum:1},geometry:{type:"Polygon",coordinates:["@@\\s@pS}aekgKSuSsMß`¡CqZ·be@Q^o@gieMp]}}Ľc_Kk {ùA¡r[uom@ÑĥJiq©mʼnq¯Bq]ÙYgSåk_gwUisTE ĕiqiUEkue_OSsZaWKo¡qycY£w}ĩĕS§Z©SN¥SyLÑ¡±Ks^IYPdY[UoFp}´\\¬\\j]eÜò¤¡ā a\\bnU㺹Ìs¼j®[cíȈEĝĆ`ļf¶®K|VØDdKGpVnUFjpHF`B[pMºxÖjbpÎxp¬|ΟÜÒC²®ÜApZG~dÞàV¨|¸`|²tx~\\~|dFf^zGĄŚhdL\\hĸ¼OªP®lV`p\\]Xpllæ¤CpQ|oF}fMRiNSon_²qämMNM\\"],encodeOffsets:[[124853,25650]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/tian_jin_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"120225",properties:{name:"蓟县",cp:[117.4672,40.004],childNum:1},geometry:{type:"Polygon",coordinates:["@@EUDAEI@WNMNCBFAHFFNACDJDPBD@@GD@DIFFHEFGDBDEQOFG@EI_KG@OcJQM]RMEKBGPG@[LaCIICBWKCEEG@WBQHCDFD@HSLEJI@IHWECFGAAEKCGDBFCBSBIDCKKHEADMJMFABKOKEQAA@IEEG@GIQAEK@OZEESMOLlu@SLUTYFQCMG@@SQUAYKAACA@IB@BDB@B@DC@@BGAEFAA@BEGKJCC@AGAIHA@@JC@QEIP@@A@EGIDC@O@C@@@@CJCWKABFLBBEBSQGBAAMIEM@AKBcJEN@BEBCFMAEFEF@J@BG@BFABECKFG@AFQ@@F@BEB@@A@@AAAKAE@GFGDECEFEECBKIKDELDFEDYH@EIACDCHKBEB@BAAC@ADBHABKJIAIJICEDGDCD@@A@A@DHCHJHDFEFGBKRKBGIK@GIMHSBCH_BOJECCJCFKKMD@DNJEDEGC@OJCJHRUL@HRJ@H[DCNKDZHCTFDHCFFKR`TANVDFZRDLFARB@HPAPG`ILAR@TERNDFNHDLCLDDCXDYbHF@FEB@LDDVE@JPNfXPINCVDJJD@NJPAJHLXHDNANHhB@DPNLRMTBFRBHHr@`NBFEBOCCBIAQJDHCHLHFA@HSDCRLFTB@HEFLNF@PELBDJALFLTC@EPFLLP@tUHQJDfIHGTB^JTCPDLKAIBATFPADIEGECEMJ@JIAIHGECFEAGDI\\SPOXAFCL@BQTQBBTMZECYGAHA@GJAE@HCAEME@IECFKJADDBABLTHHG@ILEAMNDJCDHEBF@@JNFJELDFKTOT@JETBFFHBHEHKI@@IJEJ@XKEOUMS@AF@CEB"],encodeOffsets:[[120575,41009]]}},{type:"Feature",id:"120114",properties:{name:"武清区",cp:[117.0621,39.4121],childNum:1},geometry:{type:"Polygon",coordinates:["@@FWôµ@IFCLIB@EHNBp]AGEAKAEDMGZKFGBGME@ILGP@HEFB@BXMEAHUGC@IHCLOD@X[NWHWPKAEF[@EKIOL@EKGBNMJ@EIEHKBIC@BAKMIACCFQZCF]DB@ERAKADIHGEIBCGIIECFaGLZO@EFCNGAGDGAKL@BMG@IE@ADSDEH[JGC@CGA@BMDeK@EIACFE@@GG@FIAMM@CCGC@EM@ADE@CFMAAGHBDKIEAJG@DOGCDEKAGIS@KFCHKAEHIE]BeKNO[IFIOELC@A]GMBKVYCDDgGAICARc@MW@AQE@DGI@@AQ@@BKBAIQQYEFW@CEADIGGBCEIiMEMF_LGEKMBBDWEBGRC@E_CHYGCH_IAED@FFBQh@FGJaJ}AHRAREF@bE\\C@CT`FHC@\\BBF@BID@HGDDJ@@FAHKBARECKDAZBJIVNHCTA@EREAMLHDAFFBVFFC@RNRETHD@FOJMACH@CAB@P@DF@@FGDWE@FFSIEMKQDYCCHKb^JADOCIDGNDBdBCFJB@EC\\A@BJEA@JAAAD@HHD@LFBCFF@BERDHNhZQHMBGHOACCEBWEGD@PSJKCGEUD@CINLFGHE@AJK@HDABBHTB@F`DBFLBBHEDARCFG@ABJBAPVFE^FBGLGCFG_BMLEXGAAFE@@JNRVJHFALFBEHQJCTbNDHCF@PlFLJSXCHFHfVBTNJ\\BPJXC^FAVNFCHFB@FFH@JF@\\ABCFD\\BDMCAAJKQBGAILOEGHILECQLWFENJHADC@QxNHFJNLDFA@CBA@DUÂmR@FBL@BD"],encodeOffsets:[[119959,40574]]}},{type:"Feature",id:"120115",properties:{name:"宝坻区",cp:[117.4274,39.5913],childNum:1},geometry:{type:"Polygon",coordinates:["@@TZbB@JHD@DODCLM@AP@LL@BNH@ETFN@`E@DNG@CHLBCJA@AICFKDDBKA@\\N@AFNAGRBFjFFFL@DHLBLFQPcXAZMJ]GAVHAIZJFNE@JpDRRDCLFDGXA@EFF@CFFPDfEBDB@DCHCFCJDJIJBLI@I@CB@@ADBB@FALADGDC@@H@BB@FZGFCCE@@FMLALJDAFFFEFDFCB@@AHCF@L@@BBB@BB@FC@E@@R@BEL@HEFD@G@AH@AIB@@@FEFEBALDDEFAFO^IF@JCBBFPNJJ@D@PRDCEKBAXL@BIFD@T@JE@BHHJORFDI@@B@JGH@@B@BDDLIFFHCD@D@DEE@BAAAB@DAF@B@H@NGLJLMRDNMfGIEPMI@GDAKK@KIDIJ@GE@CFDN@FE@GFEPGV@TCDFKHBBF@RW@DD@@ID@TJFKIKLI@EP@IGBCLAEKLEN@KSHIGYACSD@SEAMBBMGEBMQBCMIGKFB[D@HDLPHDBC@IFITDLG@IIIFGVBNJDLN@VIRI@YIAIHIC@CLKZCBEE@JECEIHEAKGDGECBGEEM@@DA@CCCBBEGA[GEDBBoNAAH]MKiIAWKQoIIPMFQAEEDMH@FMSUYIeF@EK@BIOEKJEBICFKaKPFAFSE@LWCCFMHDDEKESBOGBKIEIODLG@CCDEQCEDWEMDIEIB@EHGEEDAEAa@@HqDEJGF[AECCFa@WCEIKAAEQB@FCAE^YDERDDJBLNABD@AJGLJF@FNIAMLH@FPKLJ@FE\\BFOLGXMXW\\C@KPGD@JHDGVFBWN@AEAGFO@KH@JNFAHEHYLNHFCLBFBBHo^MAFGA@KJED@Jó¶EX"],encodeOffsets:[[119959,40574]]}},{type:"Feature",id:"120223",properties:{name:"静海县",cp:[116.9824,38.8312],childNum:1},geometry:{type:"Polygon",coordinates:["@@NGFMDATCNDR@CCbINEHNJA@C\\EEGVE@IhE[wepc¢·²^QEKIEKIgiQDkehY£uSDBMkUDOJDHC@GF@CAFBFEN@CQ@BeP@@G@HD@@MHQKi@[IGCOCESE@GMA_OcCGDu`a@VZzKDkJBLNXGDqKEWE@cFEFA@ISIi@@KMABJGBcMuFEzGVH\\ATSEUBeALCEMG@CEBUHUCGXaBPtUBBFIBFTDFF@DDKBFNGBJPHXDDMDCLJ^mBIHIL@LR\\@LCR[@@z@NFD@LLBNb@RHDBNTPT\\F@BJF@BXCFBHHBDLFB@HODADE@@JHVXCPDHCFTLBBFNCDCCCU@@GAABEHHZHBCAEdEjFDD@GfD@DXFCHF@ERFDLBH@"],encodeOffsets:[[119688,40010]]}},{type:"Feature",id:"120221",properties:{name:"宁河县",cp:[117.6801,39.3853],childNum:1},geometry:{type:"Polygon",coordinates:["@@BFLBFJXDb@DEFD\\BHEFIrC@Gb@FBCBFFGH@FJAJFNCXFFCRDCFDDH@CKJPJFALPHTALFCFGCENDDKXF@ETEBObLELJDFALIPFAJL@@FfEZJTVENG@CNFFRBNEJOpJLRBXjJNLG^BBpMAAFC\\HHBAFDADDB@@CN@FFAHFDCHLHFBJGFCFUNKJJTD\\XUXF\\^F@DDDQXXBRLRCBDFEVCDLVDpUl@LEDJHAPRFGL@CETGPBTCDDVI@CFF@GFDCCVGLKEK[Y@MECISG@BKNSCGCKWEAaEBEKNGFSECO@GGM@GYI@DÅCMLHPTF@DJHAVVNKEGDETJ^[TJNNd@NOAMFYJ@@GFANDPEJB^aOadSTQSI@MHBDIEOKCG@EEFCKCqXO@@DMFENCDDHCCGJ]AKFoDaGGHYFDHKJiCMFGC@EQ@AEHGAC@IEAATKOHGIC@IXIFEoGE[JCFCDHNmRADFZMF[EEBMO{GU@AOW@@]ZeHBDEHBKEfQkuIWBs@EC@d[@[^EDMTKCEEcI@cDAB@FCBCACmOCG{PYHeBgPwPFDDALFFFCHQGSD@BHFAR[TaFYXMASUiGFL@DQNCJI@@D@PLDN`ETEFIGMCGBCE~CAIFDPEHGEQPHJADFJGHCJLB"],encodeOffsets:[[120145,40295]]}},{type:"Feature",id:"120109",properties:{name:"大港区",cp:[117.3875,38.757],childNum:1},geometry:{type:"Polygon",coordinates:["@@JFFL°_`ONJKDDFIFZN xlb~yFVNRrdJGzDPVFBCTNND\\UR@E`F@@Ip@IWGUoawOEE@ÏDgK{İEEMFëCb @KwOCDHHKBDJCDEEEAGHOABFABMCgDLSQ@CFEBMgYIDQINE@AUSwSAdYEHQMEyK[KI@GRMLE@@OqOoBOnpJ@BmEAFHL^FDB[C@BBDVFAHFJENB@sNEjQAMYsUgCSBGDJH@\\LjGR@NC@@G@HO@AfR@DM@EFEADBE@@HGDICCPlVANTC¤vgZlfRChjLJ"],encodeOffsets:[[120065,39771]]}},{type:"Feature",id:"120107",properties:{name:"塘沽区",cp:[117.6801,38.9987],childNum:1},geometry:{type:"Polygon",coordinates:["@@|ODHnPBDADEDA@CB@ddJFFLDNSFC\\]\\@@cFD@nACOMW@M@ITURBRZNHNWRQoOj½fcqAqeiDÿÍyÓįFL|Ch@ÐFFxPpbHVJXo@@JCTR^BPABQA]^MB@bE@@FQBFVJRH@FXtPNZSBAja@@NDTLJrQTHFXZFB`"],encodeOffsets:[[120391,40118]]}},{type:"Feature",id:"120111",properties:{name:"西青区",cp:[117.1829,39.0022],childNum:1},geometry:{type:"Polygon",coordinates:["@@@LHAHRHATh`LHNHDG`HDGZ`D@FQDAHXFACNAFLVRTBFOfHDCVBFQH@HSXHEPFB@LDBF[bDbLFKJBFLADBDjLvCPEI]FGEIGCBEUSjcFiBIVWfaHCjN^HtwBBFGPBJGjFBEGECGDONMFAP]TDHQOWCMGAMHKIJEIGQ]aDlUG]VGEGDC{PEbBZmE@@GH@BCA@FMQCFMYMJECELCMI_P¯`]R±¡¸odfx\\gF@JUFFH[F@DIBGMMFaJDDQ@MCSDCBENMH"],encodeOffsets:[[119688,40010]]}},{type:"Feature",id:"120113",properties:{name:"北辰区",cp:[117.1761,39.2548],childNum:1},geometry:{type:"Polygon",coordinates:["@@ROHFFGCOJEDB}DFHANDJHFEFSM_KC@O@CJ@DIRM@CEKKA L FKACHoLSJSIBETDJaEIIE]E]K[MYUYQILC@GF[MGNKEK@A@BCWECAIFEFYAGFOMI[OFuDiKACBCEKIAELaKaCE\\CA@KEAFOWGGTG@ERUACDeGEPSAUQKHE`FNjNFJADHHCJFB@DEXZFRRBJLA@AR@@BJ@CHF@BRX@@NQdDBBJhHCCZDLUNA^H@BKDPFEJ\\JMPfL^AJFFGLBDGLET@HJLBCFHDCPH@BIJFCLGABHNBDEF@BCN@@FHDDDN@BNEJH@@HF@DEJB@FfLNC@AHB@DHD\\IFGTCBCF@@JNH@ALKHBHCHBDMFEP@KYbHDEJF"],encodeOffsets:[[120139,40273]]}},{type:"Feature",id:"120110",properties:{name:"东丽区",cp:[117.4013,39.1223],childNum:1},geometry:{type:"Polygon",coordinates:["@@ZV\\N^L^FJFFJIbSCAFTJTIpKDGLBEKLBjHTVNBZWbE\\SBQGE@ATCRHDGEEKECBECxOhOfAZGA_YEEWSGqRKISC@Mb@BiTAMYsOEWG@IQEURA@EF@@acUOXQRYCUDCHDTEF[SUEgAYDcVGJM`iAWDWLQRMHUHgDsDBLHJFCFDFGHBFFVEAGHCJN@RJFPIhBD\\FENCPWA@LFBAFHBEJUEARCDIAEDQBRNa^"],encodeOffsets:[[120048,40134]]}},{type:"Feature",id:"120108",properties:{name:"汉沽区",cp:[117.8888,39.2191],childNum:1},geometry:{type:"Polygon",coordinates:["@@LMEI\\MTABKN@FCDMH@COAcH[AoēAM¡Wa[MeqpQRMXMGQYQASV@J@NNXDPmBAtJXlveRLFGACFGAYf@^X@BPV@|HNPFA\\FNEEYBCnQGMDCDE\\IHFpEFWJ@JJDGHLPBSFB@JBDGHBFR@@FHDNEjDLICGZEHGbHpCLE^BHIDDCGDCFMNE@CP@rWLDEDFFH@"],encodeOffsets:[[120859,40235]]}},{type:"Feature",id:"120112",properties:{name:"津南区",cp:[117.3958,38.9603],childNum:1},geometry:{type:"Polygon",coordinates:["@@TLv@CNHFFBHGZFETNPhCVGNGRQXKXCjBN_HIdUZChBVF\\TFECSDGVCZDRQPWdVNA^]RBBAAOQ]DSE@F_Q@[VMCSMADUECOHycIqMQEU}zkawENRDENB@ADG@@HF@YnaAOF|CDFHUHH^kVbCR^JHIFLJNGHBDNPXGRSCO^EBMNCPDHHFAFiEIHOAEH"],encodeOffsets:[[120045,39982]]}},{type:"Feature",id:"120103",properties:{name:"河西区",cp:[117.2365,39.0804],childNum:1},geometry:{type:"Polygon",coordinates:["@@d@hZNFdcLYXKRCtCMOFSYEGHEAGEDMu@SKAAsx]GMTGt"],encodeOffsets:[[119992,40041]]}},{type:"Feature",id:"120102",properties:{name:"河东区",cp:[117.2571,39.1209],childNum:1},geometry:{type:"Polygon",coordinates:["@@ZBVFFIGABEEA@KXBDOFM[EACJgOIE@QIMGDBHUFEEGAEHECEDGIAKQDWLKZcdQPEP@FOFBJTJ@HNORJf@DBCN"],encodeOffsets:[[120063,40098]]}},{type:"Feature",id:"120104",properties:{name:"南开区",cp:[117.1527,39.1065],childNum:1},geometry:{type:"Polygon",coordinates:["@@NMVDCG\\E^B@HlB@YEDS@C HsNSiMGDebUXAJEjidVTAFHDFJ"],encodeOffsets:[[119940,40093]]}},{type:"Feature",id:"120105",properties:{name:"河北区",cp:[117.2145,39.1615],childNum:1},geometry:{type:"Polygon",coordinates:["@@DBXFADB@L@LFHM\\NHED@JKZRb]QMRAFCJBDCBQYADMCAe@QIMP@GSIAIPE@E[EGH@ZEF]^HJAXK@KF"],encodeOffsets:[[119980,40125]]}},{type:"Feature",id:"120106",properties:{name:"红桥区",cp:[117.1596,39.1663],childNum:1},geometry:{type:"Polygon",coordinates:["@@J\\PNHEZBFEJELEL@BWGI^]FEkA@G]A[FDHUCMNEHJ^"],encodeOffsets:[[119942,40112]]}},{type:"Feature",id:"120101",properties:{name:"和平区",cp:[117.2008,39.1189],childNum:1},geometry:{type:"Polygon",coordinates:["@@DT@FCHG\\FFOROMEgYc@"],encodeOffsets:[[119992,40041]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/world_geo",[],function(){return{type:"FeatureCollection",offset:{x:170,y:90},features:[{type:"Feature",id:"AFG",properties:{name:"Afghanistan"},geometry:{type:"Polygon",coordinates:["@@ࡪ͇وŐǬϠڐŶӂʮǚڦ۾njƀ̚ІɣʪҴMوǯʲĹ،˒˰Nj˖ϪԈiżŬĘͺβ̈Ҕȏĝʱʪ¡ý۷ͪ˟̊ǰώĊԼϖׂ×ࢀAƬʋӧĥяƹ७ĭࣗǭӫλȤΣĪллΛ͑ɳ̡ߛͦ։ɅΥԕ²ԋ͡ɿ̳þٝŋğɻسDҵӇ܍થΓבôǝȁԇņűටіހހåզُƚßՔ˟ڢάҢιŮɲؒਸ"],encodeOffsets:[[62680,36506]]}},{type:"Feature",id:"AGO",properties:{name:"Angola"},geometry:{type:"MultiPolygon",coordinates:[["@@ȸصʌԋȘ˕͐ѯ֊æˤŠҬşŲɀɂӨԶ®ƤіHñ̡৴RfՉǞ͕ūԑÖԫ˪̷ৃȼüκsԴŴϦ¹ĘʹĩСƨϿů̿î́ყZᦵ֤ۋպԽŠЖ₭ŵÏԃϞկ~ԉƝЙDžÿՈŜ݊̂ޒªΰ˚ݶȨΆӘռːϐĘج«ӊʣ̜ɡԚȵԎ®Ǩʶͬʭǣ֚сՐĄǎΌŔʒg̎ĸៜ["],["@@ɉėɣلͼδʪƘ̀˽̩ǯƍɍλ"]],encodeOffsets:[[[16719,-6018]],[[12736,-5820]]]}},{type:"Feature",id:"ALB",properties:{name:"Albania"},geometry:{type:"Polygon",coordinates:["@@Ń˷ŢέΒȳiə˗ŧ»˙ϷСƛÐgȂү˰ñАîֶŖʼƗƂÉˌθаÂƿɨôǴɥȪďȨ̂"],encodeOffsets:[[21085,42860]]}},{type:"Feature",id:"ARE",properties:{name:"United Arab Emirates"},geometry:{type:"Polygon",coordinates:["@@Ƭ¤ɱڂƂ۞uԖ{ֺ֪ظՠՎԮdž˹ŖڑѕGçճƪŝϝǑE΅ʓΏuͷǝDZᡋъ͏࡚Ț"],encodeOffsets:[[52818,24828]]}},{type:"Feature",id:"ARG",properties:{name:"Argentina"},geometry:{type:"MultiPolygon",coordinates:[["@@ߗ§ѓ̔ԑx࣑@Aሞ͒ϵрؿનԋ୲ȿϙп"],["@@Ӵ؇͠ڰॠƊǷോۊŷਆاࡾ͡Ŧχࠡ౧ࡒɭ़ŷڔƈނ٢ƎݐжLjфӝiڣۻҩ֟ॅࠃ૭ଧȽڥɣࡹT࠷ǽȇÝիËѫ੨ܙŗ׃Հν§Ч߯ઁఛ҉။ǩउĎǰԅǣػƺщԋ̏ࡱř̪͕߱ɗŜ࠳֨ʧҠˆʢѧޛʻڭԹūࡋȣ҇ߏEڃљʋؿؙࠞߦǝ˿ݭӃձটލͧ΅Ͽ˔ࢍ֔ӡΟ¨ީƀ᎓ŒΑӪhؾ֓Ą̃̏óࢺ٤φˈՒĭьѾܔ̬ěӲξDŽę̈́ϵǚˢΜϛ͈ȝॺǢƙȠࡲɤݢԊ̨ʭࠐEޚَոo۰ӒࠎDޜɓƶϭฐԬࡺÿࠀ̜ބռ߂צԺʥ͢Ǭ˔ඔࣶд̀ࢎĹɂ۬ݺશȱ"]],encodeOffsets:[[[-67072,-56524]],[[-66524,-22605]]]}},{type:"Feature",id:"ARM",properties:{name:"Armenia"},geometry:{type:"Polygon",coordinates:["@@ƀǨə͌ƣǛɁ҄˽ʁˋΦɫϘƏḷ}ӢHżχCʝɤǩuͧʖرȼĄФƛ̒"],encodeOffsets:[[44629,42079]]}},{type:"Feature",id:"ATF",properties:{name:"French Southern and Antarctic Lands"},geometry:{type:"Polygon",coordinates:["@@ը˃ߐĿDžɽϣಇÃq҂ŮΎÊǢ"],encodeOffsets:[[70590,-49792]]}},{type:"Feature",id:"AUS",properties:{name:"Australia"},geometry:{type:"MultiPolygon",coordinates:[["@@ߺ́ҜŘپNJԎÉÐঽ˽́ēگ̉ɰבǧ®ԫԭܘŗֈӝܸtϬռõ"],["@@̢ڇբ̈́˦ΡЖ͟đϋǴܛŸнɄĹɬܕąѥ˖֭࣬ѭצЋ֞λŋȯӔՃࣧ͜ͲȂ;ηȴźƢࢹԩϸ͋ڀڹʀڭtӏËԳА܋µݓơϵɩݡjӕǕχއثЭ̫ٱ˫гʝܧ͕нɅػʼnׁªˇӕ̇वޡ·ϫ͙ԕέ۟ψԥƪżѬҝǃ݁؉ܩɪӉƄӑÔ߿ʐիԮƻْțьЭ;߱ĸˢРȯزЧݝƷѮҬŶӞ͘ЬãجہܑԿ˽͏ڛٽΊ~ҀԿ،ѹ̀ǂȘઃԚןz߯Цຓāછ̝ख़˫ߡÈࢻљܯȗljѱ̳Ϳ܉qՅõݑƶğֽԁ҃ʕуʁЗˋ֛ؕBࢽ՜ҋDŽlӖкŘƚȒ̠ĺאģӼѻࡖƏӒӎͭնsʚϋͰĽڄӓڔřΪτε˳ެиʑʞ͗aјеڎă˄țʦĠӠǢȸŘрęӮΎÚٕ׀ۀˬЦΪٜ̰ϤàɴĻڎ̺ԚĤŶȀɞüҬoࢨʖҚώɊ҆ӲѐͲvҘטΠܩΦǚ̗Ј˂ТψǻĸٖҠаȮͨцƜ`ɼτĭdɂτŦОŔبϫҲӽՂMՖÿDZҦДڪϜɘſȾκӒԘ̒јıۺǂeі؛ˢ҂Ū֎ȻҀ·ۼɋʈĐԶʵӬʊ͂ñȠNJϬеɡ͉҇ͻ˿Įͱʙп̗ЭÔʁڜҫ٨ˏѠ́؈ӻʂBѰɍŶʷߤ˵ֈ˼ǐҊǠόľҤʰڞŝОÔʔīӔŌنLjǠŽˬȮѾdžҦtʈ̸̾ʂЩÎՃȾķΛ̨ёÚӇ̥"]],encodeOffsets:[[[148888,-41771]],[[147008,-14093]]]}},{type:"Feature",id:"AUT",properties:{name:"Austria"},geometry:{type:"Polygon",coordinates:["@@ÛӁCǎǻ˧էLJƗܽsщȏۛÞயɐȉ̊ࠧƣĭDžԗŢѕxϝƶźȴƬʪ²ьɹŤɜݎƮЖ}ˀǣþƜšո̠ń̒ϰز˓ӀΆ̐ÚٶʱЂªϰǁãŃČ̅"],encodeOffsets:[[17388,49279]]}},{type:"Feature",id:"AZE",properties:{name:"Azerbaijan"},geometry:{type:"MultiPolygon",coordinates:[["@@ʞɣψDGŻ΄ӡֽŒщϰƃ͆Ǫv"],["@@ϊËƞɈԈͺѴѵђϺʸɧۗãƣٵƟ̭̍ȝvзȽ¥ԻѲ̂дʝʚ̿×যإkϗƐΥɬʂˌ҃˾ǜɂ͋ƤǧɚȶƎضʍҐ¹ŘIJбҔɔŚʀ ׀ԙ"]],encodeOffsets:[[[46083,40694]],[[48511,42210]]]}},{type:"Feature",id:"BDI",properties:{name:"Burundi"},geometry:{type:"Polygon",coordinates:["@@Á০ɃϢԜßʲӎҀŸͧǸȏT˗ȹǭ͛ѫ̧̥"],encodeOffsets:[[30045,-4607]]}},{type:"Feature",id:"BEL",properties:{name:"Belgium"},geometry:{type:"Polygon",coordinates:["@@áުǪՐοҦȝħ֧ɕĝһܿϦћßדІϷͶϷ`ũ̒ڪǔ"],encodeOffsets:[[3395,52579]]}},{type:"Feature",id:"BEN",properties:{name:"Benin"},geometry:{type:"Polygon",coordinates:["@@ۛįȹ׆ኞǛǦЮ̇̌ʱʞņѶ̀ĨǠξЪĀȀʤˮʘ̠F٘ә˩ȎӽǓͷĘɧСԳʵʳǁՉtµണ"],encodeOffsets:[[2757,6410]]}},{type:"Feature",id:"BFA",properties:{name:"Burkina Faso"},geometry:{type:"Polygon",coordinates:["@@ֹɐϽ̍Ƀϗǰƥ˦ϙǾÅӦɮΤo˴ښۢŬּɲȴОœΚǢŘɎٴϖdžˀΒҦŢɀLJՠJáСŔϣӀչНॺȏmֻǿʣЩÿǟν˿ħ݁lϳâ˓ƉωÖร¡qӉŘم"],encodeOffsets:[[-2895,9874]]}},{type:"Feature",id:"BGD",properties:{name:"Bangladesh"},geometry:{type:"Polygon",coordinates:["@@ỉŶÆگʉѬµєDžКΕӨޟü˃ҳΧǠũƵʃĠ͗øŽۖ̅لƜԒԫɤȆ̪Հ̼Ѽ֮̔ږεВ£ôߞřު^Ӟƛϯ܅ϕµʷӍҢѥƎ՞ɶFѶ೯"],encodeOffsets:[[94897,22571]]}},{type:"Feature",id:"BGR",properties:{name:"Bulgaria"},geometry:{type:"Polygon",coordinates:["@@ʎΉ͚Ö٦ſ«иɌবȜ̩ؒӴĕѥΏ̫˔ӏܣŒࡥ˃Uлޅÿס̊ڧɱة|Ñ֊сːƒŢĝĴƘˌ͌ˀСδ÷̬ȸȐ"],encodeOffsets:[[23201,45297]]}},{type:"Feature",id:"BHS",properties:{name:"The Bahamas"},geometry:{type:"MultiPolygon",coordinates:[["@@ȵ£ɇӜ̿ʐǾՔʨۣ̎Jӥ"],["@@ࣷƅÏ̴Ђäֈ{~ɕ"],["@@ƟׯƷņ`ѮϓͪCĪڐϗ"]],encodeOffsets:[[[-79395,24330]],[[-79687,27218]],[[-78848,27229]]]}},{type:"Feature",id:"BIH",properties:{name:"Bosnia and Herzegovina"},geometry:{type:"Polygon",coordinates:["@@̦FȿσМ͓ūЃȡƽû˙țūҥݓ͈ͅΘ͋Ȅϭ̾ǻʺЩϾǬΒ̞ȕǼǨϾnܠƓ\\Ϟȅ"],encodeOffsets:[[19462,45937]]}},{type:"Feature",id:"BLR",properties:{name:"Belarus"},geometry:{type:"Polygon",coordinates:["@@Mࣰ̈́ȚӄېːÿϔԜƚ͖ࣘࢮɁŢȻѲĴࠒȧĊЁǷɧՄսƳ»Ʊ֦Ʃʎɡ͝ǿڳljÿȠ˧ȸ՝ܝ¹ʵȁÃхͭĆݷ¡əȞ̿ƥ́ŨڍjफȬࡕàٱmҡɩГeϐʷϴԌǢLͰɷ͌ϊ"],encodeOffsets:[[24048,55207]]}},{type:"Feature",id:"BLZ",properties:{name:"Belize"},geometry:{type:"Polygon",coordinates:["@@OŮĸƴı̞ԔDŽZHūDŽGaɭƋεôŻĕ̝ÀăīщǓɟƱǓ̅ʣ@àॆPژ"],encodeOffsets:[[-91282,18236]]}},{type:"Feature",id:"BMU",properties:{name:"Bermuda"},geometry:{type:"Polygon",coordinates:["@@OEMA]NOGNG\\Q^McMOI_OK@CQSGa@WNLVWHFLJXVFGJ`ZRTDLeeWKIHGIK@@[MQNi`]VDTBHCJAPBJLVFjT^LV\\RJZRn^RH`TfJjZHHOTTFJP_NOX[EYQQKMEJOLANJH@HQHAARF@ZEPS[U_IcRQXE@EEKKOCGGCQCOGISKYGUC"],encodeOffsets:[[-66334,33083]]}},{type:"Feature",id:"BOL",properties:{name:"Bolivia"},geometry:{type:"Polygon",coordinates:["@@य़͟گӳ؈વȲ۫ݹŗ͡ҋऺˆ߾ѳŏ؆ЫֲՌαۺȖ˰ƭ̶͠рh¤נǸ˶ܩഠزíѠnȈʪ݀;Ѷ͂સƚęؽļ͓ãࣰ֛ݫऴƑ̻ͦ֨ǕΐʑՈTӦʟӟǐʕZγʓa͒এྖūӟĜͧҞɽȤԹƫڋɯρĄӏʿǥaʶјޭ^ัʓЕsҋͥƉǸ"],encodeOffsets:[[-64354,-22563]]}},{type:"Feature",id:"BRA",properties:{name:"Brazil"},geometry:{type:"Polygon",coordinates:["@@૮ନॆࠄ֠ۼҪjڤуӞеLJǒӜŖӼBҦ̡ƴ̿Ƌ̻į͔ýޔƿʤ֥ɪǏࢱLjÈଜʝҴˀǦăӐɰςƬڌȣԺҝɾěͨŬӠྕ͑ঐʔbYδǏʖӠӥʠՇSΏʒ֧ǖ̼ͥळƒ࣯ݬä֜Ļ͔Ěؾષƙѵ́ܿͽȇʩџmرîӃƟϡĪÈ౨ۏӷݏv҄ͅ֏¶DzΰұԞΓݴɜƶAԖʎċҔɊ̈Ôϼ०ֲێNJŔŴݴϚᘰpθſӔύ̬LؐӀƒǚē͐ӯĔYՀ࿖k˦̂ɸˉǐӷǂļҨѻٸÆnjʲشȞΊƐĮΤʆ¯Ǯ܅ðśՊ֞ϓɒǀþجŅڜȿʐȤžल̮͎̾ŏʂѪȜȗʼnσ̀ŵȖϷɷ̏ƅɌыÔϳԬϿЮ¥ĢǒˆϠƦ˚ɢҬíȲҚçøǢƗǘĎʐͺõЈĒӔDZξǥʺɪȊŘɿДÒ͒͊ʴؤӼޒ˺¢ȺҫҼ҈ƑxׅمەʾʩƁࡃٔր̟ඊԡШӱƏҫʶ࿐ѹఴఔव٪ʏܖ̦˅˸੭Ɣԗͯ൹ёշஅୡՙोثܯȿgɻءÒ༽ɹಓęօˇͧƫ૱࡛ƛࢁڹηȟԋ࣯Fೕ͓סύवʗڝ܅ũطƔҫƽࡓȏЧחҥट๕݉ڗ֯Ͻϥߛ։ӑɷӈψЊӟֲڇҬࡹՠ̹{ࡅٰձę"], +encodeOffsets:[[-59008,-30941]]}},{type:"Feature",id:"BRN",properties:{name:"Brunei"},geometry:{type:"Polygon",coordinates:["@@ͬ̾ҢЯ·՛Бǭ˹ϥѦ"],encodeOffsets:[[116945,4635]]}},{type:"Feature",id:"BTN",properties:{name:"Bhutan"},geometry:{type:"Polygon",coordinates:["@@ˍÏԩۇ{ۿÈՇſޅ͊kǚزҒɈșѺqπɥ"],encodeOffsets:[[93898,28439]]}},{type:"Feature",id:"BWA",properties:{name:"Botswana"},geometry:{type:"Polygon",coordinates:["@@ǜƭ˄ӡॎइήĝD̑ʚՑٰŹ՚ϝأݭع˩֓ʧ́ҙãƧГďʽ՝țہ¤БɾΟĸХșȵГЉʧпϑđȇ̐üԠӽߚɧŲAរࠤ|Ჾشಖ͎̎՜ͤʮDӂȎưÙ͔ڣ"],encodeOffsets:[[26265,-18980]]}},{type:"Feature",id:"CAF",properties:{name:"Central African Republic"},geometry:{type:"Polygon",coordinates:["@@ۜÚƺɎƔgȾȏ͐Τ͠Ѭ̌ĉ̐ʂüߺ½߆ϴ؊ࣺю;ՐƜĪΫӜԿFƋΓÄʻ̆ʍٖοҢͻT˗֠ѫΖεɆԋغͩƊˉˣęաpكĘ̹ïųȱ˕}ͧDzधнϥĎŗÝʥԕطǐؙĊ̴ۓ˸҉˓͛яùדգ²֩ƘԅѻѯޱėʐϦϧ˔̳Ѡï̠ЇѮæʢċΞÞٴȬƴц"],encodeOffsets:[[15647,7601]]}},{type:"Feature",id:"CAN",properties:{name:"Canada"},geometry:{type:"MultiPolygon",coordinates:[["@@؎œުxЯ΅̵ÅΦȿˬ͆ʸ̎С"],["@@Хcઝ˂ޯІ̄îɁΗ|Ʒ"],["@@хŝൡϢʥ̘ݩ̌Ưʈࡻư͕ҜðȚࢨǿԨŵ߄ė˺̃дЋ࠼Όҩ"],["@@։ܿո˴֠ǵ̏̉ݚɱϰȴ࠼ʵʹ؛טƞņѿʼԷΝ݉ϝփǂǾیɻńইܯԅצЂ߫Ȳࣙ¹࿅~ŹʠԼ̐λɬ۸ԒࢄԶӎܲ̂϶Njɫ҅Չ"],["@@@@@@@@߰äʥ॓ܶگͯDԑϪ̵ϮчʾƻτºˎЂŋ"],["@@͡ѳχîəʢ Î͖ʦΆkɈǣ"],["@@ঝҧץnǿɪزϲ଼SiǍ"],["@@ƼυјżӨɗं˽४ʽöЍؤÞ˥ݙ˃ಳȬҽϚ࠭ҁѣ˿Ӯଗăܴдņڌ˺ޔ؈å"],["@@ष¥ȿЪΦҼޖŜپɷXέħřձʛ"],["@@Է̍ଉʬۃğଫϘ݊ʼטζࢼʃԎƯʦDžԠ͍"],["@@G૰ڄեʡح߾֥࢚؈ؖܨ°ईஞÝఔūૼй¼зس҃פ҇ŃУחୡŻࢃʨʣуߵ۽ʓοই֩ளÇڏΡÇձĿਉڻ࣭ु͙ڏ±উంƕϜϼّ୲ǔ༞εࡀ͋ЅɳࢸΟ൶µࣴąƍܫʼࡋ،ळనߗ٨˚ҔࡺѭೢףѶഎЀ॒לҮהç֭֘܌৷لলࢤνݾ˫ಾגȘɫࡸć۠ɚ˵ਚӣʮ͙ຄÛ}۷˪ਜ਼ގſ،ӵҰߦऔϸٺݣબੳघ͵ՅӁݰӓംɏբˍͬ܃ټŏͶͅÖऻ؍́̏൯̗ۑƋᅛǮుPࢇÍ۱ੳωॵޡ܌Ɛഘૄᄈ۪సČݔЫߍ֟ˊࣟ˜هતп൸ŨࡆीÎ؍ժ̥ਣսᇷԁͽयٓÖ܆ฤ۞णĹջӆBନύʐ֛ƛ˧ɚٙىʱٹ̕ϡΥŽˏ¥čȹAMϛƷࢵĿßˍ͝ޗBࠛGϛƅƊǑøʯeďષлࡽſউ҅Ɂ@˷ƂĥŦnĔȂ̎ЂҦʘӺǙܴǵނЂľƬūĺɳ@ǛƆ¥ȤǍēɥ¾ĊȡĊćɚٵːڹ˪ࠑ͘߁̨ݧʃ˝SਕɔڻʼnࠁʺƆו¾ʻƜƫҤ˳IE͓BᮝA᭯@ᡃ@ᠿ@៙@ᢡ@ࠛ@᠁@ᛷ@őFࠜδຽΐҳݖŤԨΨƧڴ৭؎iѠҲКwՌෙॠՁޑϚ֣ΈѿѢࡇ˕ࠇҹݛւדπࠋɸࠟ|JⷎNᷲ༬ȭЙ࢘û݆ΖৰˀఢĹ఼τ൘Ⱦ־ΑظȠȊЄęෆݫ૦֬ŖّਔƐ͆ʖৰ·౼Λዸ̭ୄƛࠖÄଊэзຶǷᗘIJܒƦࣆԋࣴьࡩΦժ˼৾ڦĎڴȩࡊҗरäϛಬƄ௬oĭԺݞƦದ˵KߑՖڠڰuϞࡊ࣑কͺäघশ؎ૌƇࡘχଞॅݗЭ༠ǝ"],["@@нϿሎʬୠщॊіސ˟یࠛфΒࡰ݊Ŭ࠲ƇशՆࠉʼץථеະЉĝσൡã՚͓˱ູ̯Ƃฃɪঋ»ཅ˷ᒃűāҕІଫɮݙģਛږ֔ĚಘƜஈરƦྷȞᅗãjѷ̴ዎͲಗ[ืɚ۶ـגͮᖬԠNj"],["@@݉ևಹך˸Şٔȁ"],["@@öɵࢿ|ࣟjࣿőʑ¼ऍѾ̠ИÈነěชң"],["@@ڎԽޤڴᒆΈࢅůջဒʒߒͮሀыୄЏŊν༚Ȑ࢘᎐ܸͩߐϹጘչೲȁீޙೖÇʽכ้ঋਗά߲ઙĿŁӕࢪӥଜϯΌɟմࠩ́ɪᑏڨஎܣԕƎ̉ᗱͲᅩӤ৳Ц̌ʂయќТ`ʑᝡƅ܃˾ֆؤdႸņ˫̜̊оચࠊɳϊ͕˾౿Рၳ˺՞ɆࢷԺ´ڏ˸҇ʛŅᵝȈᄫʚഹŴۥ̐࢞ϦHˉ࡚٦ݨࡺ΄ᓪɢأի"],["@@ǯຄńɖʑЕαƱݳ൝͗߳ê͎ᐡٮjˎ႖ĽएռসР"],["@@࣓عय़Խ݆`кѮΨ࠰ɮცྈȱళݟǍ"],["@@ᕍЙѷςኹѺήΤؘܰւࠑԦᭊƀǧᒰ±ࠄʑࣖΝ੍ɃᏝןਫי@ν"],["@@ҙ͙Øৱɖ҂Ϛீɨܼ̬̍ˇ"],["@@ٞϵљϣس൱đࣗƈjӬ൝ÝÁٮࣜౌ˺ஂµÜŎ"],["@@̙͢ݠƘࢢƪЩԝЋ᭗Žᑯη౩mŅ˜პϊ④ij୯Ʈପࠐ߈ɾᛄ˳ӻฺÛறߨޔ̪ࢄĭ˲Џ"],["@@ढ˓ကFܨˡȑ́८ȍՔȧଊ௬ëǼႊðീÏ࣒ͅȊԽɟభǷĸᜱŻႫcഫļᖁ˔̃ҦĹжࡇξĺঅʼ͂ΈႾÁ"],["@@ŗ٣٩̇£༝ΫŹଗǼ@@ුؼႮծಆ[ସŬ"],["@@ϣy༽Âɡɼၜ]מƻĵĩ"],["@@༩ʋఝ˔ڼˎ௮Đஈſ˩ʥ"],["@@৽ǏඉBbŤࡴʦҌદǝ"],["@@కǥۃȚέ͂áΎજӪÅ̇ɫ̣"],["@@͜Ε൏Ĥ൩˘ሏߺʠ৫ȮÕ͐ŕᗢ̫ٞЍ"],["@@০˕ଽʟ༇كÓდņࣗ΄^̦ڔɢOए˨ՑϠώʲࡴÎοȖዜ¨੶҅මǵ൞ǃڒև"],["@@ᖢßᅮŅɫɡᏅη᎙ǟݻȉᆬJጡԙേʃ෯ۇႿƓՙǡᡷěୈĿׇƭ۞бߙ˽ಛʃЋ͡୫ʣŞȏ෬lȳᖟԋᔧɴឿŻధĸཟªĿЖ༊Ȑб؆ԢÐᖤγբഹLjڼ͘Ȩʄ̊͠ΥѠᘞڒĝ಼̪ቃĬ᰽Á˸۩ͼগʘȁ˺దLjঘƌం̺ਬ©ࣤɽٔҒૐƈບĢᢲҀĝƚᆔÁᆒÁ"]],encodeOffsets:[[[-65192,47668]],[[-63289,50284]],[[-126474,49675]],[[-57481,51904]],[[-135895,55337]],[[-81168,63651]],[[-83863,64216]],[[-87205,67234]],[[-77686,68761]],[[-97943,70767]],[[-92720,71166]],[[-116907,74877]],[[-107008,75183]],[[-78172,74858]],[[-88639,74914]],[[-102764,75617]],[[-95433,74519]],[[-123351,73097]],[[-95859,76780]],[[-100864,78562]],[[-110808,78031]],[[-96956,78949]],[[-118987,79509]],[[-96092,79381]],[[-112831,79562]],[[-112295,80489]],[[-98130,79931]],[[-102461,80205]],[[-89108,81572]],[[-70144,85101]]]}},{type:"Feature",id:"CHE",properties:{name:"Switzerland"},geometry:{type:"Polygon",coordinates:["@@ƫŹȳϞƵіwá΅χƙةŀǻЏơƄһ˵Л¡αǶ˽ςБſ^ϠؚҾɈϤûɲƞMǦǼ࣒ʱ"],encodeOffsets:[[9825,48666]]}},{type:"Feature",id:"CHL",properties:{name:"Chile"},geometry:{type:"MultiPolygon",coordinates:[["@@Bም࣒@Ԓw˧ͻܛʻЭӻä؏ʨ࢟ŨੑҸҎୃशۘǭ̟֗ѢϬ˘ֺޠΎװı"],["@@͢؆ŘĺɁ˿ࢍࣵгඓǫ˓ʦ͡ץԹջ߁̛ރĀ߿ԫࡹϮฏɔƵCޛӑࠍpۯٍշFޙʮࠏԉ̧ɣݡȟࡱƚͷǡȞॹϜ͇ˡΛ϶ǙĚ̓νǃĜӱ̫ѽܓĮыˇՑ٣υôࢹ̧̐֔ÄgؽΒө᎔őުſݝPЙȷݷ̣ƉΣoॅ˚१ג@@ਲ਼ӔˁՒʄӰх֒ŅΦ߰ࢴٰౣʔߞݒ˸ඊत̏Ѯგ֝ɠʿՉŠ˂ல˺༒ϮָʍࠎéूΠԨപഎΤబȗ఼ʤۚĵਞӮਆưྺ˒ნˀሤÕ൘ǩќɌɦњЬֱŐѴΡ˅߽Ҍह"]],encodeOffsets:[[[-70281,-53899]],[[-69857,-22010]]]}},{type:"Feature",id:"CHN",properties:{name:"China"},geometry:{type:"MultiPolygon",coordinates:[["@@ԑഓΫۏѷ܂ĩخӶࠜڦَϨʡƣԓ","@@ܩЗۏʺyܢаϠࣾɾӚoȊ͍σσșӟ"],["@@ฬˍׯͼ߃౨Cܰͨ൸ʜѳݱ͙̭˽ः֡ࠇ৵ƪܝ̑ɜܙťѕwLяթӺͯһಙαƀѹܩЍ˂ֽऑҋۃա୭ʑأϽࣝɭ҂ϴǭ͞ږ֠ѹѲܷ̓ॉԫթ࠙¡ѓϻѸ֩یƏϕڔʕसݚ͝լuƌѱஓɻϻҏࠇућיࣜҥͦࠝԞޓ֮٥_دՅɯȪ҃ӶʻŻۃɇڗҷ÷ؗࣧڹિޭোିޡୟۻृĩԣύ̃˘Ӈй୭сࢵŹ˻ࢱҭ·ə؎Ȧ͘ૻːЇƍࡍɔЏƄӜޏƶЙܑ̀҃ࠇīڡJ҉ȳѥūŶ॥҃x÷Ȣ}Ύ؝ʓεƸر͂ʔۤՏǎȧޜࢱƓĴাߔۮۚ{٠νȨ˭ӶӭÙࣟŲ˴ΜϿԺ׳Ν۵ȸॷއسڳĿοɦѹrȚґɇرëڌԟǭওĈोȖڿτٵǔ˯ЖҽŦࡓոکʴΑȩଢ଼טࠛՒɽऐőіͭјĐۆࣙঠ൧ͼʝ٦ةϼƫʌųӎ͜ԛȔ˟ďɇިʈȔśȠߤЈǐࢸő͆՜ંIJͮ̚ҔŠȐãӐּɔݱฦဘͲјȈ؆ຒဠˡҲϞ¢ࡆۦĀٖ֔͢èɚו۸ѽப̿׆ڱ͕ঙ̢ηূƝଆŝ৪ԻԲġϤޟӲӿऒnჄȉŜࠦůఔԛ৮BόʽঐҌബ̈ాঘ̒҈ך˰Ƌˤˍ͔ѴըӀùࡺǝ࠸Ѿ͚؞֊נʆŐڐĥĠ̘ݿזګː٥̳ࠣžӇŃɏΆר࠾Цو̓ஆՎQτݸࢾҲːWҪңȦۜмਰƲvసʡ݈̱ࡏ̀α̊ԩ̶ࠕ"]],encodeOffsets:[[[124701,24980],[112988,19127]],[[130722,50955]]]}},{type:"Feature",id:"CIV",properties:{name:"Ivory Coast"},geometry:{type:"Polygon",coordinates:["@@ϣUוǒ՟Wহƥʍ̯ࠫNjvÞۖĄŀ}ͨΣΚˉÈʕɲǾώčО ʔƄB¸ξÝnjĄŜ̸ĶȹڨȗΎæ˸ǘÞŊúɸųٮOƸʖƢgʎĦžΫȞłΌŰϚǽƦ˥Ϙǯ̎ɄϾֺɏɠΟ۷ɕेθܣͧ"],encodeOffsets:[[-2924,5115]]}},{type:"Feature",id:"CMR",properties:{name:"Cameroon"},geometry:{type:"Polygon",coordinates:["@@Ľ°ӻŇԝŒЋÅnŬڒ͟֊ϧƚǟϖɋŦXɶɎתЎ߸ʒRԄӮ͈bҾΉ־˲ĀΔȌͺžь҆ΊǞךDzȊŢѨɜ՚۾ٲ¬˨ĠƲͫͰˌʂ¶ͮ՟Ê֏֏ҜޅҷTʁÏϥČǻЅӸөμƛŠΏˆ׃ſɩх࡛ȫƳÝٳČΝåʡЈѭð̴̟џϨ˓ϥĘʏÓґڛȤڷɜ"],encodeOffsets:[[13390,2322]]}},{type:"Feature",id:"COD",properties:{name:"Democratic Republic of the Congo"},geometry:{type:"Polygon",coordinates:["@@»ঙͶŕˑ̗͓ɟ͍ѫǯϷ±ګț͍OهʍɹԃŗÝýҟɄϡÂưޝċѧǘӣӤҹҒͥĒ૿ƙɣĵʇՙȊχƫষĻࡇɨƫט͝ɲƴìٟࣟR·Ҧ̳ΨٟŠȋѰԣ˅ڧŞ˫ϢՕüϽqµʾ́rϥºԳųιtȻû®ৄ˩̸ÕԬŬԒǝ͖eՊ৳Qò̢ѕGƣԵɁӧűȿҫŠˣş։å͏Ѱȗ˖ʋԌȷض៛\\̍ķʑhœşʼɊĘμƎɎ̪ǰɚđ˼͐ҜSÄʃ̼ƩӶՄӨШɆː۔θࠆϬўքМĪˌt̰Ǝ̆«ӊŀݖǐԾʦ҈¸Ԕúה͜ѐҊ˔۔˷ؚ̳ĉظǏʦԖŘÞϦčनоͨDZ˖~ŴȲ̺ðلėբoˤĚԘۙϘķɤƖϲÅҶDzȦΫ݊֏"],encodeOffsets:[[31574,3594]]}},{type:"Feature",id:"COG",properties:{name:"Republic of the Congo"},geometry:{type:"Polygon",coordinates:["@@̿˾ʩƗͻγۏࢸٖҪ̓˾ɂ֦ĺäό҆ЗݐʴЈł֒ĝڀЉӺζȽǘسçɻѢÔξڸɛڜȣÔҒѰԆѼ֪Ɨդ±·ԓʥ҇ǏԽĿݕ¬Ӊƍ̅s̯ĩˋփЛϫѝηࠅۓɅˏӧЧӵՃ̻ƪÃʄқT˻͏əĒ"],encodeOffsets:[[13308,-4895]]}},{type:"Feature",id:"COL",properties:{name:"Colombia"},geometry:{type:"Polygon",coordinates:["@@ΫȤЭ˨ʅƅ܉Ŝȱΰƽ_Ӓŕʺ̼ÚтȢ̦иÊΞՆ͐Ѵ̳ȦDŽӦȏސǸɚƃ܄ͻ҄ņТ˔ÑǂʠțӶĺŬѢـהΌĚT˦ƺ܂ӖϸՊfäǪڂéڌъ͞ȊОК̖»ɚɛǍ˱գƕɇп͗ʋʓ̷ĹɷӭѢÇņϭȄȁâij̵ǫȸéȨ̉ઊĄӦŃעܡͼĚӐĪ̔ƟƱҍȇ˯ßǜ֑ʆʟȉэл̨ȃɠ̋ʰ࠹ǁĻǏӸɷˊ˥́࿕lZԿӰē ͏ǙĔҿƑK؏ώ̫ƀӓoηϙᘯп҂ʣpժࡤٟϾԍị̈ƤҧɝصŀӵࢤϳɐˍІ֑Њɡā"],encodeOffsets:[[-77182,-155]]}},{type:"Feature",id:"CRI",properties:{name:"Costa Rica"},geometry:{type:"Polygon",coordinates:["@@җȆǟǮĬƤȄɷȪͥǔ́ņÅʖəƮÄʑǗȩȓɸˑĊŗǞLʮŎˆʁŠȖnjŴňֆɝȖŊˊéƔǥʜÇȪDzɈҙ͖ͷЂΩ͗õLͷǪűűıƱëǟ©Ǖ"],encodeOffsets:[[-84956,8423]]}},{type:"Feature",id:"CUB",properties:{name:"Cuba"},geometry:{type:"Polygon",coordinates:["@@ܨÑڊW߄˹̭ͮĨ̔ȡ܈ԳԺϛˢ\\ԆǟÕʁئٌ΅ıȟ֑Ń֡¥׃âளą֜ҶɔէÈ̃ʐȥӎӃɦʥǬભž̋ǐ̀ɀࠗ¨ѧΏ[ťȳеğΫĂѺʸǼ̤ϞȈіǎَĄȰĢ"],encodeOffsets:[[-84242,23746]]}},{type:"Feature",id:"-99",properties:{name:"Northern Cyprus"},geometry:{type:"Polygon",coordinates:["@@ÐJŨȮYކʢ֧ΧÔƿęLJÙűj¥iĎѾNjVɫïƿ¬"],encodeOffsets:[[33518,35984]]}},{type:"Feature",id:"CYP",properties:{name:"Cyprus"},geometry:{type:"Polygon",coordinates:["@@ãࡱͿЩŊȟͶЎǀ«ɬðnjUÒ½jč¦ŲiLjÚĚ"],encodeOffsets:[[34789,35900]]}},{type:"Feature",id:"CZE",properties:{name:"Czech Republic"},geometry:{type:"Polygon",coordinates:["@@ϯǂЁ©ٵʲ̏Ùҿ΅ر˔ӃΰѕȬėΠƧʠؒǾ̸ȾǎɂdžɜīϒĖЊ˓ؼñ¿ɳҘǧŲɒּĥĄʿز»ϮЯʡCŽƯȕÅȑLJ¡wý˹ēϋbšȁ"],encodeOffsets:[[17368,49764]]}},{type:"Feature",id:"DEU",properties:{name:"Germany"},geometry:{type:"Polygon",coordinates:["@@d͗ࡔțS̗ࡢǂҾɰॊͧІˋȞёɹɣ̨̙Ⱥ҅ß́Έ՛ϑĕɛĬɁDžǍ̷ȽؑǽƨʟĘΟіȫӄί̑ϯ̟ŃŢշýƛʿǤЕ~ƭݍţɛыɺʩ±࣑ʲǥǻ܍Nń״ьֺƸЇɘ´ςǗȐĨ֨ƗࢢԎ@Ɉ͂Ⱦޔƿ˴ǐDz۰°Ƽȃ֮вȓ̀ӈٌōՠŸ"],encodeOffsets:[[10161,56303]]}},{type:"Feature",id:"DJI",properties:{name:"Djibouti"},geometry:{type:"Polygon",coordinates:["@@ȤʹΑӏȩήɯ̱҇ȅƬȭÏҷb_ʮßɶ˴Ѐ̐ϊήñʪȴ"],encodeOffsets:[[44116,13005]]}},{type:"Feature",id:"DNK",properties:{name:"Denmark"},geometry:{type:"MultiPolygon",coordinates:[["@@ԋڹ࢟ӄŝΒ˨ˎу"],["@@ȵ̓ʡĞɮХ՟ŷًŎͽҲ}ƔɪʌʦÀ̐ɴڮʂѝʟ˙ĶɽҘŵ"]],encodeOffsets:[[[12995,56945]],[[11175,57814]]]}},{type:"Feature",id:"DOM",properties:{name:"Dominican Republic"},geometry:{type:"Polygon",coordinates:["@@ŀƞپIӾɏɜtƴ̕ҠhʡϐЮ̷̯ͿЍǼϫˡ¢ƱƵ͑½ŷȲˣťͳֻɏƆ§ʎjɬɍʦȲƚÞ͒óҜ"],encodeOffsets:[[-73433,20188]]}},{type:"Feature",id:"DZA",properties:{name:"Algeria"},geometry:{type:"Polygon",coordinates:["@@ᮩཽᝩஇϑटćUϵƌԹʊȧЀᬻᆴᬻᆴṕᎠfnj@ÊQബب࠼Ÿێɦ͎тচͪجӢòϞ̶સƚƸ͜ɛDz̃ࢲ¹Ԟ́ՠ߰ҠࣦƢՌΎ߶ʰƬർæшůߊͨ࣌Pȝֺ¾ǟћƄߟȡۙԭҵôمۊԃRȯԮΪຝ˖ݏ°ϵƧۇÔϥŃҟòՇͫΗӺؓέ̘ҵϼƸڒϷςՃ"],encodeOffsets:[[12288,24035]]}},{type:"Feature",id:"ECU",properties:{name:"Ecuador"},geometry:{type:"Polygon",coordinates:["@@҂غǻξ͍ϵԉςǞʀƙބ̎ŴƺԼ͆զÍ΄ҢǸ׀Ͱࡀӑƾ`Ȳί܊śʆƆЮ˧άȣŞٓʽճࣷ࢟য়ͧԥܵǃ֣ӅΙъͻĞáw̮ʈȨıΔ"],encodeOffsets:[[-82229,-3486]]}},{type:"Feature",id:"EGY",properties:{name:"Egypt"},geometry:{type:"Polygon",coordinates:["@@ɽͷǹىɫѩȝƥ˩˔ϛϒஸđùΐࢯԪࡋٌವ̴ҙ˒ӃݮछǗƣճݭƨǣΏ@Ὁ@@@ᶶ@ᲴʥڲɐŻά̤Ж૦b߲ɝ࠲ʛϴſ٨ˊΌʊݎêװŃɮеȜ˜ڨȣټ³аɄւ"],encodeOffsets:[[35761,30210]]}},{type:"Feature",id:"ERI",properties:{name:"Eritrea"},geometry:{type:"Polygon",coordinates:["@@˻˖ΉӰϋ˒ɏܷ̄ͶֻXȭǬӯȡԛϢʽطǬęʹβఀĊ֒ˆʴؤƐьӒӦঃɴޗҢУବߏҲӍҖӝˀ˿аʧʩȳέò"],encodeOffsets:[[43368,12844]]}},{type:"Feature",id:"ESP",properties:{name:"Spain"},geometry:{type:"Polygon",coordinates:["@@¦״θஒ؆ਊƱ૾NࣂƝۦªമͰ͛ϡ̨ǺीϝআŊ®ӥߓ֓ઁǯõ˱ԩү͕ہ͞ӑӟϑǹճىǗש٥੧_ߟhՃ͍̓ͅЩê̵˴ʃӚžé˦̶̀Śɬ̃ʢɶրͳԌδèЈƎŬZپϲɪɻфөƝŁӹCɁЬū̥ɇ"],encodeOffsets:[[-9251,42886]]}},{type:"Feature",id:"EST",properties:{name:"Estonia"},geometry:{type:"Polygon",coordinates:["@@ĮӸ̱ŁՓ̘ñӘਫ਼ɼŨ࣮Ƒࢂ|ŴƣׯӝʞΫˉۙDܡ̸ρļƩ"],encodeOffsets:[[24897,59181]]}},{type:"Feature",id:"ETH",properties:{name:"Ethiopia"},geometry:{type:"Polygon",coordinates:["@@ԜϡӰȢȮǫּWܸ͵ɐ̃όˑΊӯ˼˕̏ω˳Ͽàɵ`ʭҸaȮÐȆƫǽ̴̕ҧ̴Й̛͎ᩨঽۺNᛛᡃફݟףաeɯ˅ַB˴ލΙʝΓ֕àȃĬȟwˇT܌ב@˹ˢ@ҾѧƘӻࣴϥȚƧʹэЦԧÒ˸ӐҀrŲʰ[ݲʞࢠЊɾĎ΄ήٜԔиࠠƆܠǫʾظ"],encodeOffsets:[[38816,15319]]}},{type:"Feature",id:"FIN",properties:{name:"Finland"},geometry:{type:"Polygon",coordinates:["@@ūיಀ֓ޡىख़֡ܛݴس΅յఘֻ́ѓޭӟᅡੵໃá๑̯ൃǯӡҞ߿ˠȈࠢСݶАӪނՆ࣮֖ǬēୟЈ˳͜uಒֲ૩ЪԊɞतѻલ¦ࣘȭߠϊЬ؞ಬ˶ͯΡכ"],encodeOffsets:[[29279,70723]]}},{type:"Feature",id:"FJI",properties:{name:"Fiji"},geometry:{type:"MultiPolygon",coordinates:[["@@̂ʍƓѭԳŗҩļąτ͖̀ϤĻȼƐ"],["@@՛ǯŅ̼оǤˊ°Ӱˀ@ЧՕȷ"],["@@é@ШǨĽЗ"]],encodeOffsets:[[[182655,-17756]],[[183669,-17204]],[[-184235,-16897]]]}},{type:"Feature",id:"FLK",properties:{name:"Falkland Islands"},geometry:{type:"Polygon",coordinates:["@@ԌȿԌʹڦϙʥ̋ଋʥϙ̌܋ϙпϚ"],encodeOffsets:[[-62668,-53094]]}},{type:"Feature",id:"FRA",properties:{name:"France"},geometry:{type:"MultiPolygon",coordinates:[["@@ˣ٭ϡǠș֢ǜ̺ը͎Ɯܛ"],["@@הЅќà݀ϥȊñʎjЈɗெƷыֹŃ׳ɱƝϣüɇؙҽ]ϟВƀ˾ρʁʚ̿̅ʯɐٱҖŃĩηݿӅစɬ௧˗ĩԑঅʼnिϞ̧ǹϢͯ͜ѢԎdžူࢁࢤإю౹͒čؖઠǾථɏˇॎߌέዠپʨێܾǞŪ̑ϸ_ϸ͵"]],encodeOffsets:[[[9790,43165]],[[3675,51589]]]}},{type:"Feature",id:"GAB",properties:{name:"Gabon"},geometry:{type:"Polygon",coordinates:["@@ࡹࡔ։ۚԙࢄ˨ǾˎȲؔǜخ˴¶SOৠЌÆԞőӼňľ¯ÓνɼѡشèȾǗεঃЊӹĞٿŁ֑ʳЇݏ҅Иãϋ֥Ĺ˽Ɂٕ̈́ҩ"],encodeOffsets:[[11361,-4074]]}},{type:"Feature",id:"GBR",properties:{name:"United Kingdom"},geometry:{type:"MultiPolygon",coordinates:[["@@҉ֽًǦԱ[ǦҊǥ҈۴ࣔԳ"],["@@࣋ࣧࡦŘऄIɕۅݯݩࢄÃäĕݠֺƇԬढ़ʈͧৰDžķ՝ѓʗͲѣݱѯRෝɱϻǒ։ϿޥĪם͍ҁǘࢨݪǺOBಽƔʃͰ࢜ʺҡҐdžռఢ÷D@ŮӤ֛Ԯ_\\৵ƨȧɬ̨ϒˡɴҍЇ·߶щє̨ࢆٶھڤá০ì"]],encodeOffsets:[[[-5797,55864]],[[-3077,60043]]]}},{type:"Feature",id:"GEO",properties:{name:"Georgia"},geometry:{type:"Polygon",coordinates:["@@Ųάȿִӟ̲ҭĬ̯ʴĺIJ܄ƝఆƋଦЕƦƻԚƂǭʴ·Նșɓřвғŗıҏºصʎȵƍଢ଼ſ߳Юࣅ¡"],encodeOffsets:[[42552,42533]]}},{type:"Feature",id:"GHA",properties:{name:"Ghana"},geometry:{type:"Polygon",coordinates:["@@ӯҳ˽ݳʑݡʆͨηܤɖैΠ۸ɟŗنrӊฤ¢ϊÕ˔ƊϴáÕʿΖџC؍Ąڍɂ̫ȅݳäйɢՓȈ̍"],encodeOffsets:[[1086,6072]]}},{type:"Feature",id:"GIN",properties:{name:"Guinea"},geometry:{type:"Polygon",coordinates:["@@ʃtǡͷʁJǏǴÈͶΗԨɕħǵmɳ³V̮ƇɘʔǻΜɹ̜ڥDțǁɵoƝǷīɹ҅σρӼ͛͢ɋŊȿǖħϊūȂʓƐώЦʮeɖƘȄDƄŎï˨ĢĖd˶МUȱȄlÚĤҜáŨ´¶̭ƆBɖŒƔɸɇάãɲǺ˖ŒȬŠǚuȈȁĴɳΆΙǣɏ˙ǴĊŀį«ʡʲʍǗÝå˷ȘȺڧ̷ĵăśÞNj·νƃA"],encodeOffsets:[[-8641,7871]]}},{type:"Feature",id:"GMB",properties:{name:"Gambia"},geometry:{type:"Polygon",coordinates:["@@ņόࣶzȎȦˊ`ͨȷʼIˢƚǞʏεȋιdέǰ̷ȗƭQȫŝއl"],encodeOffsets:[[-17245,13468]]}},{type:"Feature",id:"GNB",properties:{name:"Guinea Bissau"},geometry:{type:"Polygon",coordinates:["@@҅ΘΝÈȕʀLŸʯǴÁǶѼƌ˦ɦĨ༈c˵ġĕð˧ƃōȃCɕƗʭfύХ"],encodeOffsets:[[-15493,11306]]}},{type:"Feature",id:"GNQ",properties:{name:"Equatorial Guinea"},geometry:{type:"Polygon",coordinates:["@@ƿŴ़̀െmPয়T˳µ"],encodeOffsets:[[9721,1035]]}},{type:"Feature",id:"GRC",properties:{name:"Greece"},geometry:{type:"MultiPolygon",coordinates:[["@@Ҡ˱ٺ¶شÑqƣҜĶĿʛíTƒਁǎƺΦ"],["@@ʹՁȥĥԟ|ѫĀৱɓҿяƋҳAѻўƿȁȊԅрЁ̓ǿҴϯжʑ^ӅޥɠʜѕՓĕ͈ݏ֏Yۍμ̿ڦƧ֒͝ϮљӐÉʆϸТ¼˚˘Ũjɚռö͌ȀҖgƒƦdžت{ڨɲע̉ކĀVмЦɝ"]],encodeOffsets:[[[24269,36562]],[[27243,42560]]]}},{type:"Feature",id:"GRL",properties:{name:"Greenland"},geometry:{type:"Polygon",coordinates:["@@ᬜԆ᱒ੴ̴ᲈĄ䀦Ŀ㉊ڗ༅͕ộ⭏ćшƫᲐĠᡚ́࿈ʴۦ̝इӧᒞ̺✘͚ᠼNjҾΫ⃝ױӃȕ᧑ơወ¡ছؕگկधշಽ൧ˇ༂ѽȢ܋࣍ýઞܡህÑঈ˟̑இŽE֩\\Ϗပΐћɣଌȿ઼ԣ͈ڱກlj٫͖ਣӘ˼֭উѵᕖ¯ᖯܵᗿڏឧ́ओIࢅ͓ୟࢱᅵכׅ૧ȷȝܛԱ[כыտോڧͺٿϗљࠍஅ½ۈဿLࠁҢ֕ࠐฝਲэոŗݮޢ̢ئ֗̒ࠪচొ̺ͨΘǬڀॡ̕қůݯţਏ˜Éְ͢҂ެ\\႔ɟՔݩ˾࠷ş۫ȼमԝ̺ڗৡࢼ੯͚XΚᖷӮᄻÖᖟᏅ×ইˌวՈᕂ˄ၚ¬≹ɖ΄Ś͜ẊИᶎИ̪͘ᗗ̠ܺͰ᯲זĚΓϘጲɜᣚƂᣖRࣺʽᕺҨፘ̽áპ˙ፅҐŘή"],encodeOffsets:[[-47886,84612]]}},{type:"Feature",id:"GTM",properties:{name:"Guatemala"},geometry:{type:"Polygon",coordinates:["@@ћƦԻfϩǖҍΌrʖĮȠšƾКۆFt˸Ƌ¾ġǺ̵Ț̹ˬϜDBӂBަUOڗßॅʤ@˚ƱòŰʘŃϥ͍ЉɻÏljâǑǧɇȟ½¬ıƿġ˽Ƀ}ŭ"],encodeOffsets:[[-92257,14065]]}},{type:"Feature",id:"GUF",properties:{name:"French Guiana"},geometry:{type:"Polygon",coordinates:["@@͉͑ГÑŗʀȉʹɩνǦɈΪòϤƢή͛ӸáֺѪܠ˸ğؤȥࢸۿƔ·ӻޑʳأ"],encodeOffsets:[[-53817,2565]]}},{type:"Feature",id:"GUY",properties:{name:"Guyana"},geometry:{type:"Polygon",coordinates:["@@ր̯Դյzџ̈́o҈Чͪ̇Ƈݱԛɕ°ȣƹџϊ؏ːAŎӃԢܳȱҫî˙ɡϟƥ˅ġǑЭ¦ԫЀÓϴɋьƆܐɸ̐ȕϸ˿ŶŊτțȘѩْ֩ɬɲiϲԬƊȾƾ˽̸ô̬ږӲ"],encodeOffsets:[[-61192,8568]]}},{type:"Feature",id:"HND",properties:{name:"Honduras"},geometry:{type:"Polygon",coordinates:["@@ơˀʭòÐʹŗĞǣÒσijŔʩƈǷǚʛìǨɈáǒÐNJЊɼϦ͎ĔȂƨʊ\\þ垦ϸùϲv˒ĢİĦˎ©ȪÉɘnǖòϨśƄkʲƿʐį̏Źɜɳ˽jśŕ̇ŋɃAȅŃǙƛźĕ{ŇȩăRaǥ̉ɳƹıđĽʛǞǹɣǫPȟqlЭūQĿȓʽ"],encodeOffsets:[[-89412,13297]]}},{type:"Feature",id:"HRV",properties:{name:"Croatia"},geometry:{type:"Polygon",coordinates:["@@Ȳ͗ˊʇ͓̓ϝȆׇ[ܟƔϽmǻǧ̝ȖǫΑЪϽǼʹϮ̽͌ȃ͆Ηݔ͇ġƛ߃̶ӣ̢ޑʠ۹ؤǞØϥΞe˲եƄʱγʝˮn̆bג Ƹƚ˸ƍͤgGɼ̈ĒĈͺڞɠˊĻؼέۜlj̼Ų"],encodeOffsets:[[19282,47011]]}},{type:"Feature",id:"HTI",properties:{name:"Haiti"},geometry:{type:"Polygon",coordinates:["@@ԢܰƁôқÝ͑ȱƙɎʥiɫ֏ƜЅÍԡÔϽƿ҉ʾö˔ޜśيã̢ȈϧθP͎ՋžȌɶ"],encodeOffsets:[[-74946,20394]]}},{type:"Feature",id:"HUN",properties:{name:"Hungary"},geometry:{type:"Polygon",coordinates:["@@˨ըǍǼӂDÜ΄ђɋ̲ğ۸ļäǚͮ~ЦžĜÃЂŀȠȢˠ¼࣒ʭǴĒҲɭÎɣԡǭЉ֫ԕ֭کǁԽ١ə̻űۛNJػήˉļǍ˴ƗV"],encodeOffsets:[[16592,47977]]}},{type:"Feature",id:"IDN",properties:{name:"Indonesia"},geometry:{type:"MultiPolygon",coordinates:[["@@ΛeךǒѴʭ̎ʭ»ɩ"],["@@ܙȁijĶø˸ΰԢࠨͬĐǓfʫշع"],["@@̢ɣԲèȼΥॿǛőҍP̀ӚҤPɤ̖"],["@@ūұʅૣľE̬ښǪՂʥ֔Üݬ̮"],["@@ྔċȂΌ༘З̪կీƵਐӿय़͋ऍݻwࢍØưঅ͎؝ČΓŁ໕ΌƣΰޑØּߤ৶·ڴ͡ΒÛŘ̗"],["@@ѝֱćنƬ̠Ǭ˴ȒʗCЏ"],["@@̿˥ׅƸǏΰࡘ¢Ⱦˣ"],["@@̨ٝۿΌۯìӃÅׇȦҦਠऎʕ"],["@@ɼയ࢈ԉ۰ࢼ८ԔݜBܘ̉خ̛ࣘLJbᩑbᩑݟېǜȷʇ}ΦۂՈɺɕࣲЕ۸࿃܆ۗêృަʛУ͑óȏ̮GκٛЮ̢ࣞ״gëɠ௵DͩԄݥƺΡдଈȰњ˜ഘ·Ƃ̹"],["@@ڭ࠭كlj߱ǐඓ¥ܽŧţٍݪݛҒϠ༪˸çϯλŪιӯ͙݉ߒƵ˿ݲॻQտ҅ʙ̐͡Мی࠙͗ȻɶŊ͖ӲØࠌ֕ʭîওறՓũίʚʌޜŽ߸ΛPʻֺΎվŤښфǮΎذپʛśॴࠨ؎Ʀȉ"],["@@©ܽџĈŷԝΌѷɽĵՒʟǚڤ˨̨ÔҝӸóĀ"],["@@सާহį˫ֵݿַ߱u࠷͕౻ŭ̚ॕϙͫԤ׳´лːৃ̟̩Оս¯ۗĬŹૺнɺЕܘŝ݀ĮުԂƖָ֗ӅըǠ՜ÑӪъЖôߒɽۆǶњୠ͔̈̆क़ॲ@ܰƙӍݷآߓơϭ"],["@@छkۻ۰અۊέԚٍۄзؾٕ୴۪݅ʙܠ̳ڀݵՊѭܘمҺऒóђզಢNjݔࠓٮ֫ҪΓߔࣙࡢ_ۺֹӠ۳٘ϥͳۉӖ̞̅sƜו̊ҵؠõФՏɁಟ"]],encodeOffsets:[[[123613,-10485]],[[127423,-10383]],[[120730,-8289]],[[125854,-8288]],[[111231,-6940]],[[137959,-6363]],[[130304,-3542]],[[133603,-3168]],[[137363,-1179]],[[128247,1454]],[[131777,1160]],[[120705,1872]],[[108358,-5992]]]}},{type:"Feature",id:"IND",properties:{name:"India"},geometry:{type:"Polygon",coordinates:["@@ࣚটďۅͮїѕŒɾएࠜՑחՑϟ͛ࠀͅߊЭરһସʼnӜёٮāৠȝ۪bĪͪŋՖÞβԠǮìڋlǙކ͉Ոƀ܀Çۈ|ÐԪˎڴŀވشॸ۶ȷ״ΞЀԹ˳Λ࣠űÜ͇̍ƷèԫƲછׅ~ӓҩ۵§ХϏۗځȒࢇȏ˹ĚΣгȥѵɵEƍ՝ҡѦʸӎϖ¶ϰ܆ӝƜީ]ߝŚóאБ¤ڕζ֭̓؆ѻԿ̻ȅ̩Ԭɣƛԑ̆كžەţֱ̫Zਛǩ´ك҃ӻ֡ळكՋ࠷ջCϭлȹݳ̝Ͻ«ʥٙǪધ®ۡΣߙIѣ¡ϣٙʰˣދʃ˱֯͵ʍߑϳ୴͑ࡒ̍Јѿ߰ȻੂơՀޅ଼Α࿀ʣHৰǍԉףĶ৲И̤ʝͤড܊֖֔ᇜCǗܞҽюĩ٨ջϘऒࢢঊÙ࢞ࢢՄ࡞ࠄࡈ_״ܒӠڳд֪݂̇̕ЬβȱपŰߺ۸"],encodeOffsets:[[79706,36346]]}},{type:"Feature",id:"IRL",properties:{name:"Ireland"},geometry:{type:"Polygon",coordinates:["@@ƒًݣӹŶڼ࢚ѭࡢତڄٌϼǦ҇ǥ҉Բ\\ٌǥ"],encodeOffsets:[[-6346,55161]]}},{type:"Feature",id:"IRN",properties:{name:"Iran"},geometry:{type:"Polygon",coordinates:["@@݈njװӔ֚{τƾװýघэڤğ।ݓظòۻɱؑκŭΫҡˠڡàՓِƙæեݿݿжѵԓߦυx݉ДƋêϯѡ̓উཌྷʪࣷȖेŊΧਐЕƪ٣ƭࡑНਇ˦ࡑ٦߳ʈ֗ߘا૪ҍƋՕ˦̻͝ҭѴS҂ˍ@Ɛ،ѝٔҢߜȜپц̂ÙӬտʨխҟڨǐʼʿ६ּʈƄͅъϯ־ő̤~রئ̀Øʞʙ́гԼѱȾ¦ˈإߖǩуƟಾɞĄȞ"],encodeOffsets:[[55216,38092]]}},{type:"Feature",id:"IRQ",properties:{name:"Iraq"},geometry:{type:"Polygon",coordinates:["@@րʧÚӫх́țٽߛҡўٓƏ؋ˎ@TҁҮѳӿ¤֟ê؝߭༟äᛍၖఫךৡɪ৾ᇶ͆৬āؘҢȺјԾΰžŇ̐ɉЖƚծ"],encodeOffsets:[[46511,36842]]}},{type:"Feature",id:"ISL",properties:{name:"Iceland"},geometry:{type:"Polygon",coordinates:["@@șիॊֵથٙᝓֹܣƵૉŮᚑˈࠠψᆧЪǎʘᄋȜ֨նౠŰಸ֭౨Ҝʃൌ҄ආÑ"],encodeOffsets:[[-14856,68051]]}},{type:"Feature",id:"ISR",properties:{name:"Israel"},geometry:{type:"Polygon",coordinates:["@@ƥ˅̣Ŝǫ֓ɂĥɋřɛЄŖp͛нഉցʔˢ˶ɞϼǠيŤɆzVˬCþƦɤ\\`·ŕŵhM"],encodeOffsets:[[36578,33495]]}},{type:"Feature",id:"ITA",properties:{name:"Italy"},geometry:{type:"MultiPolygon",coordinates:[["@@̟ڋŲʹǭѝٝ̈́ёĞ୩ѐŞќজûࡪĠْò"],["@@ԌşϣÂ˫͇ɞ২ȓӒҨ¥рʼ"],["@@ரɏĝЯȬΧڝŪہ̗²зĻʇˠё߀чцۛदڱچLȲȃɽǗݪ̥ؠʩܜѫĔƿƽ̛үϼܳƐΝի؈̷ıѫΗ¹҅ܛΕÝHʲǢҊǼǶ͝ӤʱшΑŀʛδգƴεͶثÆٿϜޑմ֯ӜʿࠪйĮہˤϯŕӝϵΓÕĪθҕńɏٲ̆ʰʙ̀ʂβǵМ¢Ҽ˶ƢƃАǼͺتĿψƚâΆԘšĮdžࠨƤȊ̉"]],encodeOffsets:[[[15893,39149]],[[9432,42200]],[[12674,47890]]]}},{type:"Feature",id:"JAM",properties:{name:"Jamaica"},geometry:{type:"Polygon",coordinates:["@@֢÷ҀȫƔɯןeʭƗҹƊӑ̪ĶȔΜÎȒ"],encodeOffsets:[[-79431,18935]]}},{type:"Feature",id:"JOR",properties:{name:"Jordan"},geometry:{type:"Polygon",coordinates:["@@Ʀˆपͫࣆͺ৽Džų၅у࠸ˣƛƑ˭ٙřȩ̡εʵधƆŨоഊo͜Ůʚ@Ԥ"],encodeOffsets:[[36399,33172]]}},{type:"Feature",id:"JPN",properties:{name:"Japan"},geometry:{type:"MultiPolygon",coordinates:[["@@ņ˽ҿԕΉːљțɝӭշʈRЊҬԆӌīΊΜؠǹ"],["@@́ڡƤсѩףЃ๏½ணॡ͔֡غษȃষЃঝe࡞أ֗իΝН͜ȶݶՏʒͿ־ߐʶѲՈࡌѢ؞ָာʤ࣎ǣࢠ֔Бࡀӌ͜ՈਈƟाՎࣀƸҞୗ}ڻޥࡍbࢁ"],["@@נǵרΤȈहఝɯ݁࠱ָқँण]ř࠴д٨࣌²ʖʜټন٤˯"]],encodeOffsets:[[[137870,34969]],[[144360,38034]],[[147365,45235]]]}},{type:"Feature",id:"KAZ",properties:{name:"Kazakhstan"},geometry:{type:"Polygon",coordinates:["@@ӕƹ્דο̹KɱЊ੫ǡێХNÚࡆؘßডũߣݶۋ͆ಥƽðᓗӹᶽљ£יچ֧ɼॕǩχ˧±ȲȶΖDž̊অ˺ϛݮҩɆ ˜ࠊāؘƎܼűƲࠎƭԲ£܍ȴঃσǭяƌĐўՙ֘دw܉֬ӞِʕǢڢऊࡺӣŀؘჄࣴಾtᇢͻࢼΠjѥʔʠɂЊഷ׀߮Цƿɮ߮ɔֺϬ˼Ḯ̈ШȺᑆ̴ݰΒຢǹ˄ࢉ࢚Ȳઆ˹éҝ߮´ᑌߎ̭ˁ੶٭ሠᒑ҄ѰୄӛீɎҪƯКӟטNjΨΥŒѾԣٕ֓ۥÿ¡ࡅұϝဟˢຑїȇဗͱݲลֻɓäӏԭŬу̠ఝĖඃx̧ġΞӉǧŽӹ൩̂փşȉρ"],encodeOffsets:[[72666,43281]]}},{type:"Feature",id:"KEN",properties:{name:"Kenya"},geometry:{type:"Polygon",coordinates:["@@ӾۙיͱȹΕ̿ÕšףˑǏ֑ͷ˥ࡀËӤᵁႌƙĢSࢺʊ;а̨ؔσ॰įтЉԬԈ֬ֆѨƗ@ҽ˺ˡג@܋ˈSȠxȄī֖ßʞΔގΚͺ˳ָAܽ॑Xᵣ"],encodeOffsets:[[41977,-878]]}},{type:"Feature",id:"KGZ",properties:{name:"Kyrgyzstan"},geometry:{type:"Polygon",coordinates:["@@ȊςքŠ൪́žӺӊǨΝ̨Ģwఞĕф̟Ԯūşȏғ̙ͭઁıͅ՛ࢷŒׇǏߣЇŜȟʇȓཟŵਡ˘࣫ÝĂӜࣴƕ̮ʸٖĉѸױȽإ͂۶ծʟĊ"],encodeOffsets:[[72666,43281]]}},{type:"Feature",id:"KHM",properties:{name:"Cambodia"},geometry:{type:"Polygon",coordinates:["@@Ѭыࢄȣ২ՠۨઘdž߀ťۚ͡Ϟׄݖ̱Ȝ֕Ļඳ٧τԙࢥÓܫͷ۱Ū"],encodeOffsets:[[105982,10888]]}},{type:"Feature",id:"KOR",properties:{name:"South Korea"},geometry:{type:"Polygon",coordinates:["@@ܨযȺխPॷ̓ҥݽljڥΏݳïĥҚƼـχذƚֻܘÂúϒ͞Ϝצ¢ΨÈŨȮ"],encodeOffsets:[[131431,39539]]}},{type:"Feature",id:"CS-KM",properties:{name:"Kosovo"},geometry:{type:"Polygon",coordinates:["@@ǣŃPĘ́ȩĐdzɦƾȌȪÒŜ˨ư²Ţşƾ¿ŌƅƒǎƻŢLĥȳijij×ȉӹŻ"],encodeOffsets:[[21261,43062]]}},{type:"Feature",id:"KWT",properties:{name:"Kuwait"},geometry:{type:"Polygon",coordinates:["@@Ǭχõȓ˔هשuȽАݟĆ؞߮֠é"],encodeOffsets:[[49126,30696]]}},{type:"Feature",id:"LAO",properties:{name:"Laos"},geometry:{type:"Polygon",coordinates:["@@˚Ϝ܆ڹܸ¿ٕࠦھٍÎǛ̉ӯyʣƨࢯԅoݬȸࢮ֧³ԎηʸǴ̲ܐնøȡ҄wŵ०ѦŬӮڏϖޅਚO͚ܹ՝ɗʉ̟ԉۦՌَɄץƵݕ̲ϝ׃ۙ͢"],encodeOffsets:[[107745,14616]]}},{type:"Feature",id:"LBN",properties:{name:"Lebanon"},geometry:{type:"Polygon",coordinates:["@@ɣ[ýƥ˫D̘ۄмעfϘ§Ɛͣқ̓ȷҟ"],encodeOffsets:[[36681,34077]]}},{type:"Feature",id:"LBR",properties:{name:"Liberia"},geometry:{type:"Polygon",coordinates:["@@ɗQࡽАޅٖҢ֣ըȪː¬ʔϜҘϺϺǶnɖĨΘԧÇ͵ǐdzʂIǢʄsʓĎНǽύʖɱˊÇΤΙ~ͧăĿÝە"],encodeOffsets:[[-7897,4470]]}},{type:"Feature",id:"LBY",properties:{name:"Libya"},geometry:{type:"Polygon",coordinates:["@@ק̷ҿҤ೧βρՄڑϸϻƷ̗ҶήӹؔͬΘñՈńҠÓϦƨۈ¯϶˕ݐШȜðΠėΒ־͔ʶːЦʌ´٦দ́ΜðۮƓϓЀݛݮǍஆΙࣆйЦɔЖϮț٠˂ФЀׂŘǣ˺ϑ̺Iˌƛ࠴ıȲˣ̣ЕżΫɏԯʦڱ@Ჳ@ᶵ@့ॱGYΙ‧ྐ‧ྒࡓҟ"],encodeOffsets:[[15208,23412]]}},{type:"Feature",id:"LKA",properties:{name:"Sri Lanka"},geometry:{type:"Polygon",coordinates:["@@ųΙʇܵȓЍڜƫீϠ഼׆ұϺסО"],encodeOffsets:[[83751,7704]]}},{type:"Feature",id:"LSO",properties:{name:"Lesotho"},geometry:{type:"Polygon",coordinates:["@@̆ʩʳУƛ˛ҳſƹˍ̛ċؿ٨҄ՐҖ͢ϼǠξʵ"],encodeOffsets:[[29674,-29650]]}},{type:"Feature",id:"LTU",properties:{name:"Lithuania"},geometry:{type:"Polygon",coordinates:["@@ãɊĚɲχƄࢡƨDZ۸२ʴඬÁࠜĊŞǩ҂Ã߲СĀϓۏˏșӃ࣯̓NȫʶљĜ"],encodeOffsets:[[23277,55632]]}},{type:"Feature",id:"LUX",properties:{name:"Luxembourg"},geometry:{type:"Polygon",coordinates:["@@ǘȏ³ρʍiȉòĞҼɖ"],encodeOffsets:[[6189,51332]]}},{type:"Feature",id:"LVA",properties:{name:"Latvia"},geometry:{type:"Polygon",coordinates:["@@نЮՆߊ˼ڜعڪhNJ٤ܐƪςĻܢ̷ۚCКȕîС˒ӷ͕ࣗԛƙ߱ТҁÄŝǪࠛĉණÂ१ʳ"],encodeOffsets:[[21562,57376]]}},{type:"Feature",id:"MAR",properties:{name:"Morocco"},geometry:{type:"Polygon",coordinates:["@@ԒΥߜÎࢊȃκU͂՟ºԝ̄ࢱɜDZƷ͛ષƙϝ̵ӡñثঙ͍ͩсۍɥ࠻ŷഫاRহŷ@@@p҉Ա˓ȑϡ@̥Ŋ۹ě˛ٻʿÕЁୟ࣡ˣୋ΅ϗĵ̡ቅãaD ϶͒ɮ˞ѪÃ˶̀פҴՖ˲ƊɞӬp҂̤Բ̪֔Ւf\\ц͔ްĢڎָтɠۮۮȿਸ਼͊ܢŔѶդ֨ࡈϦخΐ֘࢈˄ԪؤI"],encodeOffsets:[[-5318,36614]]}},{type:"Feature",id:"MDA",properties:{name:"Moldova"},geometry:{type:"Polygon",coordinates:["@@ȨŮ֒ĊؤʽΊϞɥÑ˵̪ƏŨΗ̊ɇÏűƾčɝ×ӷ|ĉŜǫãÒƭɱˍƥ˽ɁĝƯϦĘΪςӝԂˉΠʹʠʯĈ"],encodeOffsets:[[27259,49379]]}},{type:"Feature",id:"MDG",properties:{name:"Madagascar"},geometry:{type:"Polygon",coordinates:["@@ɠΥȺ։Ɗঢ়ɒϽĉЗƩʙ˷ӰǁʝLjثõΥɵȗ¿܅ͧওбԯཧ͑ୟϛইہȣܻΡӛɊڙ̜ɳѺÇݘ̑ڠùƮϰƢD˪Дِø՚șЈǃՌãޠ̊ҺŔՒмҶǤ̶Ʋτ\\ӐӎۖԮʦцŗάΦĵҪfԐ˦ϔ̊ί"],encodeOffsets:[[50733,-12769]]}},{type:"Feature",id:"MEX",properties:{name:"Mexico"},geometry:{type:"Polygon",coordinates:["@@͙݅ƥÕąЧƤқʺЧǚٳ֎سȞӏ͢бࢾɝΐΙ݄ɾٚĎؼưՊƠՖȨӬè۸Ƣʖ֬ɚࢶȚݔԚîȬDZ ЙҋԁȥԝƸƥűγɁٽɅɎǭcǃY̝ԓƳIJķPŭޥVAAӁϛC̺˫̶șĢǹƌ½s˷ઃEЙۅŢƽĭȟqʕ्ࣞџ˘ۇɖҷÓګ́чĉץɜؿDŽϬؿŠ्ϸ۱ВɃɤҹºˈΓϦࣗӊсՌȧЦ˪ĈđʈȖɔJ̄˱Ϙùͮ˭ъ࠴ࡋڀУԼܝ΄ƷȴŸԲѓȞӹФȽהҍæӣѸϿФˀҍو̓٠^͔؇ͬ˫ӑɴƇͿƔЕĆف̀خׁƒȡŸÓŎ˽Ƭ\\ǜթʮɇǴ̕Նё˨ޯʠρɸϿ²ѷКͶϡ̨ϑqƭΝ̱ƫJɛԞջӎРїɈؚŵҖЏʺֿϒŏŇɃɖԭȰӷӦÖÚΊ³̸̼Ϝ٩ӱɶ̱Հ̷վϳڦͿݲॖÞ੪ĞÿǑСኀףဪPژ@DΌผ@̪̕јˇԀσ˨ѭȾҥѢʩۤʥՊڒۊhפͱфֹ̄ӯӸӏȂחɾЃپʹȁ͞|"],encodeOffsets:[[-99471,26491]]}},{type:"Feature",id:"MKD",properties:{name:"Macedonia"},geometry:{type:"Polygon",coordinates:["@@ńOǤӺżȊ˺¶ϴbтˏÒ։DžƑƥҕh͋ǿջõΑȴšήń˸"],encodeOffsets:[[21085,42860]]}},{type:"Feature",id:"MLI",properties:{name:"Mali"},geometry:{type:"Polygon",coordinates:["@@˰ƶƘӶˊpזɻӄǖ͖ÇŴȈ⁚^ȈךƣļЛ⋈Л⋆౾dᬼᆳᬼᆳȨϿԺʉ϶ƋVठĈFካҟ֗íԭݛƃï̳̗ա՟IȿLjҥšΑDžʿٳϕŗɍΙǡНŔɱȳūֻڙۡp˳ɭΣÆӥůȝŁŽάʍĥơhƷʕ٭PɷŴʼnùʱʎ¬ʢĿİdzĉ˚Ǥɐ΅ΚijɴȇȂǙvȫş˕őɱǹΫäɷɈƓɕőƅAµ̮ʾí̽͘ʀǓӔԺ"],encodeOffsets:[[-12462,14968]]}},{type:"Feature",id:"MMR",properties:{name:"Myanmar"},geometry:{type:"Polygon",coordinates:["@@ӫηץϥࣥΟƳО݅ՔؗΈօ̭ܵ̃ƹȪу֖ڙĪҷ_ϵ͠ދңСࡷăذʴ٠˯ӼæࣸͽѤ˛Ʊਗ਼εۢօуॕ׳ҽöԳȠ̂ਪǫڅॺļ̢ӭņۆÅڰ̊ŵjдȦęΤȐ˺࢈ڂȑϐۘ¨ЦҪ۶}Ӕજ׆ƱçԬ̎ƸÛ͈ӮÚˮӵξȧ|ٟۙߓۭijঽࢲƔȨޛՐǍʓۣز́ζƷ؞ʔ~յdẕӓȗ"],encodeOffsets:[[101933,20672]]}},{type:"Feature",id:"MNE",properties:{name:"Montenegro"},geometry:{type:"Polygon",coordinates:["@@ÁǀηЯÊˋǫÞɽ˞εǖĢƜŬҦ˚ȜƾüɠƟŬśˠě͌ǧçïƽȋɧó"],encodeOffsets:[[20277,43521]]}},{type:"Feature",id:"MNG",properties:{name:"Mongolia"},geometry:{type:"Polygon",coordinates:["@@ࢮƢ྄ܤ౬Єܴʳ࢚]֘Ͻ࠼ௐɁࠈגͿӶࢊࢊशނįনɍLjؿஜΛߐƺਫ਼ŌࡆōࠖЗԚѕެTƋޜȼૈƒ௸פԌĝѰ˭ৌêХهק࠽ɐ΅ӈńࠤŽ٦̴ڬˏހוğ̗ڏĦŏןʅ؝։͙࠷ѽࡹǞҿúѳէˎ͓ƌˣי˯҇গ̑ఽഫ̇এҋϋʾ৭AఓԜࠥŰૣśჃȊऑmӱԀϣޠԱĢ৩ԼଅŞুƞ̡θ͖চׅڲன̀۷Ѿəז"],encodeOffsets:[[89858,50481]]}},{type:"Feature",id:"MOZ",properties:{name:"Mozambique"},geometry:{type:"Polygon",coordinates:["@@لæʁɖńגt̚ʦԌaऀ͜ڞӤƊϕ࠷ľ݅ಿƨЫʣ͙Եޏ͉ृСॉ͓ࣕƵוׯȗí׳ЌُǔӱZʣƪ¦{ࠗƋϷȤƝűΓΗ̗ۗ˳য়ҕρ̳ðΟɊÉíѵّRïϊůϖí̠ƬपɓװГஂࢬ॔ɜ؆ŶúĨӶƉʞغǐEѥ˒ЏÔǹȼϳǰ۫gÅ̼āװᢈۘӚЕɴüͨɅ¸͵ǯϷØסոԱʲζǰíઊΙ؈̣˖̅]ɽદɾٔ"],encodeOffsets:[[35390,-11796]]}},{type:"Feature",id:"MRT",properties:{name:"Mauritania"},geometry:{type:"Polygon",coordinates:["@@և־ԗؤ֍ɞГʚҵUЧǽйð˽ˏïҐɺаŀߊģࠨĵкČмɑЎѵδǾˬᾔMǃȴќ߀øᒸ᪂©FṖ౽cМ⋅М⋇ƤĻȇי⁙]ųȇ͕ÈӃǕוɼˉoƗӵ˯Ƶ"],encodeOffsets:[[-12462,14968]]}},{type:"Feature",id:"MWI",properties:{name:"Malawi"},geometry:{type:"Polygon",coordinates:["@@ɽٓɾથ̆^̤˕Κ؇îઉεǯʱշԲ×עǰϸ·ͶͧɆɳûәЖѵɔʮޮ˄̈LJۢǚڼƞɪɉ܌Ѕϐ࠘ƽǜɵ˶Ϲɾଡ"],encodeOffsets:[[35390,-11796]]}},{type:"Feature",id:"MYS",properties:{name:"Malaysia"},geometry:{type:"MultiPolygon",coordinates:[["@@àћֈĶ˞ΈȘýӸԓΜ֛¶֣ęϡĆ˿Öӻ̒ɵͤݑe˳Éߑخښįђӟ֚ś̡۠ҜĠؔȃΤƤƮۈρ"],["@@أ˹ܯƚॱ@̅ॗ͓̇љୟۅǵߑɾЕóөщ՛Òէǟַӆƕ֘˽ٮǀǜ܆άǂǺڔЬՐϦѥǮ˺В¸՜а٪אшڀͼHќыιֆɻ۬ʧÑ֝͡¥ƮЧ"]],encodeOffsets:[[[103502,6354]],[[121466,4586]]]}},{type:"Feature",id:"NAM",properties:{name:"Namibia"},geometry:{type:"Polygon",coordinates:["@@رٌؖ͡ȃࠊȷ،˯ಒmŅҞ͛ΌѡۜѳǽՆۃࠐ»٢КdžԊƞհ}ԄϝŶÐ₮ЕşیȒհµͨȍPéӁȍʭC՛͍ͣΎಕ̍س{ᲽࠣBយA᷋ݣѕҋÕՇDŽϗÔƗάͩɰГг"],encodeOffsets:[[16738,-29262]]}},{type:"Feature",id:"NCL",properties:{name:"New Caledonia"},geometry:{type:"Polygon",coordinates:["@@ېԵѨϭ͉ȫҥɪϚէѼ։פś˶β[Һ˹φ˷ˎɻ"],encodeOffsets:[[169759,-21585]]}},{type:"Feature",id:"NER",properties:{name:"Niger"},geometry:{type:"Polygon",coordinates:["@@nּॹȐОҿպœϤâТբ̴̘ପðݜƄîԮҠ֘Eኬஈϒᝪ᮪ཾ೨αӀңר̸ȸಯ̾ɓ`ˋΔ˽ǻί͕ၻ«ધੳߋγૉΔ̵CեբmčЃʁµˋƻm֩ंȟځҷٱʔҍ¸ʏşӯ~ӷΧѓq৯ѢЉȵѓb̿͆ࡅ̼ࣗıɕǻşӗʋÍݣٗӚ̟E˭ʗ"],encodeOffsets:[[2207,12227]]}},{type:"Feature",id:"NGA",properties:{name:"Nigeria"},geometry:{type:"Polygon",coordinates:["@@ࢍ̡͉¬͓ȉڥl҇Ղˡ؊שֆكYݍB¶തsǂՊʶʴТԴėɨǔȍӾ˪ÎݤʌͺŠӘɖǼࣘIJࡆ̻̀ͅєaЊȶৰѡєrӸΨӰ}ʐŠҎ·ٲʓڂҸȠ֪ँƼnͬͯğƱ«˧۽ٱɛՙšѧDZȉǝי҅ΉŽыȋÿΓֽ˱ҽΊ͇aԃӭʑQЍ߷ɍש"],encodeOffsets:[[8705,4887]]}},{type:"Feature",id:"NIC",properties:{name:"Nicaragua"},geometry:{type:"Polygon",coordinates:["@@̃ˆϽͺȁ˲Ο˄сϜĤžƒŵÚÒʾŀȔŬRkЮȠrǬOǺɤʜǝĒľƺIJ̊ɴbǦĄQňȪĖ|ƜŹǚȆńɄB̈ŌŜŖ˾iïă§ȉĐ̫ȗ˹ěͷυ®ɏtϙŹĉýΫÌɛǣɋ ɩźƏȩDZʛÈƓǦˉêȕʼnօɞųŇ"],encodeOffsets:[[-87769,11355]]}},{type:"Feature",id:"NLD",properties:{name:"Netherlands"},geometry:{type:"Polygon",coordinates:["@@ۦyǀ˳Ƚޓɇ́ԍ@ƘࢡҥȞՏπީǩ؛âѠɲ݀ఆଲΘ"],encodeOffsets:[[6220,54795]]}},{type:"Feature",id:"NOR",properties:{name:"Norway"},geometry:{type:"MultiPolygon",coordinates:[["@@᥆ؙઍɣऄՅෛ͵ڵûלઃͰಫ˵Ы؝ߟωࣗȮ¥णѼԉɝԷūփནƊɝҵ߭Hևױझಫ̨˹̇ͫbձ¾՞э˥ধֻۧυӛ֝Ԫဋঁ૫ȟє̛ࣚˇޞզᕠ۶ဌࢂ୦፺ྴඦلᘼᇎπ൪౮ۢ໖ພǘ"],["@@ም΅Ȝ׆ɐԕˎეǚͮ̿ொȍ"],["@@᪖صᑟͥұأ݅ǁЍۡৣᅵԢނ̘ఽʐ࿕܂ٷڄᘎ̜Ң̋\\͊˼̋"],["@@̏ఝҍı៙ƖƫɴஹdँϬᣴɼȫࡘʤᑺȽ"]],encodeOffsets:[[[28842,72894]],[[25318,79723]],[[18690,81615]],[[26059,82338]]]}},{type:"Feature",id:"NPL",properties:{name:"Nepal"},geometry:{type:"Polygon",coordinates:["@@ÝαŌՕĩͩ۩aয়Ȟ٭ĂӛђଷŊયҼ߉Ю߿͆͜ՒϠΒȪڪʳࡔշҾť˰ЕٶǓۀσौȕঔć"],encodeOffsets:[[90236,28546]]}},{type:"Feature",id:"NZL",properties:{name:"New Zealand"},geometry:{type:"MultiPolygon",coordinates:[["@@Ȓװ;ʐΡBΝ̹ϳչإїͷ̴З٭Yܗ̓ɣջӋࡗڇϓнʇޝlխˢࣱÐƗ̰Ҍذࠦժǀ͌ܜѰԎѦώظ͈ɆŰҶלϴȆΧ"],["@@،ࢫlָϜɯŲًڰ˛֨ãӒ͎юĭȯݗʯӫٛjɡʭþαūƻͅҏзֹ٭ͯƟɘΕŨӞ۔˟ҨࣛͲz̦؈̌ƚ٨լͻ֜vƪБΎڋݔΗת̸àҚұٺɑʂݡ"]],encodeOffsets:[[[177173,-41901]],[[178803,-37024]]]}},{type:"Feature",id:"OMN",properties:{name:"Oman"},geometry:{type:"MultiPolygon",coordinates:[["@@ֹ̻ϟªǩȧƉэļ֗ÿĻϯFԽ̻ćХȓǯԹP͡ɃJͻПɷҩĂ֗˳ϱ³˝טٿ൴ᠾ࠾֖၂ϩתvʔΐFΆϞǒƩŞèմіHϖֵҸ̧؞ŋӼƳϜӕɨ˧̞ŃCȉ̩ԃƅɽΟˏ"],["@@ʼnƳDž˺ʔ˺ľñā"]],encodeOffsets:[[[60274,21621]],[[57745,26518]]]}},{type:"Feature",id:"PAK",properties:{name:"Pakistan"},geometry:{type:"Polygon",coordinates:["@@تϻʞ٥൨ͻ߹۷ऩůౣȲЫα̖݁̈֩ڴгܑӟ`׳ࠃࡇՃ࢝ࢡউÚऑࢡռϗĪ٧ҾэǘܝᇛD֓֕؛Ɇʣ٭٘ǁിeஃŝ̈́ঊொѢéϰГƌw݊ߥφͷԔеѶඨѕࡀŲԈŅǞȂגóદΔҶӈشCĠɼٞŌ̴ý͢ʀ±ԌΦԖɆͥ֊ߜɴ̢͒мΜĩмȣΤӬμࣘǮ८ĮѐƺӨĦ"],encodeOffsets:[[76962,38025]]}},{type:"Feature",id:"PAN",properties:{name:"Panama"},geometry:{type:"Polygon",coordinates:["@@˫ʎǵҒȺɢɅÎƿˤлɸοÁǝ̇ͻɁǽĉǩВҗɯŅŧŭϷ©ơԈŋƛˡ¸ǝ·ÈɓİέCǻĩŶªǖìǠƲŲIJǩŲK͘ö̠̝iDZͲĀæɴȵЮÔΨɄԜǞ˺ʤҬ·ĉҶ ώơ˜ʧ̈́ɵĹūȜӵǁʟ˓ÒŅС"],encodeOffsets:[[-79750,7398]]}},{type:"Feature",id:"PER",properties:{name:"Peru"},geometry:{type:"Polygon",coordinates:["@@ɥљћɋࡅӘñΈရࡊທࣾ٫ΏۜƐʎ܅ાࠣ༄ߍီ΅Ϥ˃ؤٷպױͼ˖ϒПߢʼךڢՎIJΓʇȧx̭ΎâͼĝΚщӆΌDŽ֤ԦܶৠͨࣸࢠʾմŝٔɢĂ֒ЉˎЅϴɏӶࢣضĿҨɞ̤ƣԎð٠Ͻթࡣʤoрҁݳ œųۍlj॥ֱÓϻɉ̇ČғԕʍBΡɛƵΔݳҲԝDZίµ͆҃ݐuېӸÇ౧ϢĩӄƠܪടǷ˵£ןg܍͟пƮ̵ȕ˯β۹Ջ࣡"],encodeOffsets:[[-71260,-18001]]}},{type:"Feature",id:"PHL",properties:{name:"Philippines"},geometry:{type:"MultiPolygon",coordinates:[["@@Đ֏ºҽ˹ޑ̫ࡨϽэˎإʉϿӦɿ؊ʰЎՑЈˁΑЃثҵƑʖ͢۾ՌʀҜ̈́̔ϝٔɰƎϒרv·ٰڼЋêхÐ̱"],["@@̟ˡˁՍ˃ʝԫǦɤɂɾĢԸҨ¸Ɖ֣جߺāߡ"],["@@ૣߕЬט؈ԎѰ࠲Ʈۅևҧѳֿ"],["@@ԎʹBgΗϳΣՕʧϸÒєŽА"],["@@ʀभ٫ɞj˭ȶԯЍȋעʧªƁԘӶãY͈ԣٜ߮mɴ̻"],["@@ɟܩέоѓ٘ܚ̡̈"],["@@ԮʉʶɖüɇƍΑ˼ɛۥӷ˥ƁڳȊڝѾġϊIJਾүăҙ˜ȫēϯٻЮ̵Ѵɍ̯ԊރůлȆ¨ΎˀɊʣȘŇ̡бӚűμߨͺˡĔೄ˜ހԘA"]],encodeOffsets:[[[129410,8617]],[[126959,10526]],[[121349,9540]],[[124809,12178]],[[128515,12455]],[[124445,13384]],[[124234,18949]]]}},{type:"Feature",id:"PNG",properties:{name:"Papua New Guinea"},geometry:{type:"MultiPolygon",coordinates:[["@@ɽčε͔ρՔǷ٘ŜĆĜʡʬȏРՑЈ˵ŝɽ"],["@@ѯçƃɽҟȱћȟѽBۏʔӑɺêʺݬũҠàŶЖŦrĆѽӐÜʂ˼Ҹ̚ġӸԌfǜƏgү˯ԡ"],["@@ݤտղࢻӖω٬ƛʥǁࣀΝġʏÏȷɔܟĦࡕŴٷ՚ӉҦѧ݀ભπ܇ʇԡˣńإڇ˿һƖࢅaᩒaᩒภ׃༊ӓׄїҴхŸӵඔԱȲѽޛěȄ֕"],["@@ʿɡǁӸȝ͘ϝ˞ӍΪ؇ʚɺȮҒɻ˸ȁΜȫʹΛ͊ˏĶѧ"]],encodeOffsets:[[[159622,-6983]],[[155631,-5609]],[[150725,-7565]],[[156816,-4607]]]}},{type:"Feature",id:"POL",properties:{name:"Poland"},geometry:{type:"Polygon",coordinates:["@@·՜à̂ȹ̧҆̚ɺɤȝђָʘ಼ϴ˴࠼ƙÚȱ߸Yਚħ^њěȬʵωɸ͋KͯԋǡʸϳfϏцܻěɽзįރۥɒϗǿ¶ߙ͔šЇĒӹǵч̖Ήŕ³¼ϭаر¼ăˀֻĦűɑҗǨÀɴػòЉ˔"],encodeOffsets:[[15378,52334]]}},{type:"Feature",id:"PRI",properties:{name:"Puerto Rico"},geometry:{type:"Polygon",coordinates:["@@јõưǕɋɃمLӫ·άŢŬیK"],encodeOffsets:[[-67873,18960]]}},{type:"Feature",id:"PRK",properties:{name:"North Korea"},geometry:{type:"Polygon",coordinates:["@@Şƥ͉ºη˵ʣ˷ѣȅƫƧ̓ʝ֓ƏηɥηįġͰƋӈσŧȭΧÇץ¡͝ϛϑÁùСdžĵƿʙéǀɑüɥƆɰφȤİõƶɆҒÅƎөĠЇɤۄբऒҌ־ЎˁܪſѺಚβͰҼժӹ"],encodeOffsets:[[133776,43413]]}},{type:"Feature",id:"PRT",properties:{name:"Portugal"},geometry:{type:"Polygon",coordinates:["@@̦Ɉ΄ŬɂЫӺDƞłӪɼуϱɩYٽƍūЇγçʹԋɵտ̄ʡřɫ̵̿ê˥ͷɓѷŠџġŸڂÿԬϓþȩ͈äռͰ̨ÒͼǪԎkΤǙ̠˲"],encodeOffsets:[[-9251,42886]]}},{type:"Feature",id:"PRY",properties:{name:"Paraguay"},geometry:{type:"Polygon",coordinates:["@@ͦtҌЖาʔޮ]їbʵʞҳÇଛࢲLJ΄ǐ֦ɩǀʣþޓİ͓̼̀ƌ̢ƳAҥŕӻǑӛƍݏށ١ړƇऻŸࡑɮࠢ౨ťψࡽ͢ਅبۉŸൌ"],encodeOffsets:[[-64189,-22783]]}},{type:"Feature",id:"QAT",properties:{name:"Qatar"},geometry:{type:"Polygon",coordinates:["@@ÇؔɨѲɰĜʬˁdӯǽӳɵÑʫǖ"],encodeOffsets:[[52030,25349]]}},{type:"Feature",id:"ROU",properties:{name:"Romania"},geometry:{type:"Polygon",coordinates:["@@δǶԴġՠGϸȳ˺źبĄɄȠΠ@ʰćʺʟˊΟӞԁρėΩưϥϒƹЂƊϠƟpɏПǹʯĀɻӳĖ̪ؑফțзɋ¬٥ƀ͙ÕʍΊƵƦȚƘȷŀ˃ȋөʔßΌԟȢĥˌҕͤڪǂԖ֮Њ֬ԢǮ"],encodeOffsets:[[23256,49032]]}},{type:"Feature",id:"RUS",properties:{name:"Russia"},geometry:{type:"MultiPolygon",coordinates:[["@@ࡌకˤԫ்ࠌࡳyוُԒսٱƻ۸ĤࠊħȚٌӯࠜôରަϮͭϴϐŠɔ։̆ߵuࠟΎࡑ"],["@@]ਙĨȒτ˚ࢢƧψƃęɱäɉ"],["@@֦Ƚțؐᗸű࠭λ൛ēsࠑͳǩ~ٗ̊ૣʖȉθƎॗʼnҗ̎Ǽ̸ȥϚЃӉΣ@„Ꮪٛᔺ࠳ïԷ"],["@@ः©ƭˌੲΖ@ַ"],["@@ળ»@ָň܈Eʉïŗࡽȩ"],["@@ౡMႣĤƧ¬ߘͪੀþஞ͏ĸə"],["@@ॿͩഉø༛ͨȪ˖༨ųᑔɗ"],["@@ډرᶽzඃȣမղҎ׀ǂᕞᴬѽ"],["@@ӹóᩣŊɟώູɦūҒǶ Ҟသܒޙĺ፨݆ɩϢሤѺ᪪բǀ෴̸࿐Ŋאͩ֟ʻᲗзЏᤙߝఫࠍ߱Ǡۥྎۏ"],["@@ɨгސȲឤYቈЧڬ̿ȽѧङʝᕅүفʟਬşఖɃݴDŽєաτɔഊƂ᧪ƑȴϽ↲ů´ٜᄼƥഄLബѷϮ՝ӹΙੌڋͿ߸ࢦഖϙɦྼʵؤʀൖşޮૐζ䢀ձܐӿᔲٛ₎DŽာƑ۪ĹؙਜʇǤvཚǑཪĢะݛਪˎڷ՞ϐώᧆɻფºᝂБ୲ν@”MKઇσઝÖݶҁԄەϲɧĮΏɑɝ༧Ǿمݛĭ౽ןԧ̱ϣயᔗڇϣ̸ߵΫ૱Ř˓ց߽ͻड़ȋőޭΫ۱Δαѕ̅ॡభȳʥேׂ̳έ௬ҵለИ܀ԆªϾರȊຊคࡺຢڢڮஆ৷ëԍۗᒉइۍਖᓧ˷ᑃටۚԧሙɕಝēÔ؊ಯŶЭᢵƠʟᨩủጝŁаՃࠄȅ՞оईÃௌऍ܍ځ࠽ë্ϛഉ్˯ׇଙଇॻթӹ૩ӱՉYՇФૻؙſ˩ŝƦKѐіxŦɛܚܞ̒৶Ʃ֢ࠈ˾ऄ͚̮Ѵݲ൷ʛܯͧ౧Dͻ߄হװหˎ̵ࠖ̉Ԫ̿βԯࡐ̲݇షʢuਯƱۛлҤȥXҩұˑݷࢻRσஅՍ̈́োéѯˮԋĞ௷ףેƑޛȻੑƌޫSԙіࠕИࡅŎŋߏƹΜLJـধɎށİवΎࢉࢉӵࠇבɂ࠻֗Ͼ࢙^ܳʴ౫Ѓྃܣࢭơ͡çѽԤઍőΧΦחnjЙӠҩưிɍୃӜ҃ѯሟᒒੵٮ̮˂ᑋߍ߭³êҞઅ˺࢙ȱ˃ࢊມǺݯΑᑅ̳Чȹḭ̇ϫ˻؆ֹ߭ɓǀɭ߭ХസֿɁЉʓʟѦ೯iࢻΟহͼᇡಽsჃࣳĿؗࡹӤڡउʖǡӝُ܊֫ذx՚֗ďѝѐƋϥӽ߿Ƒ࠳ࢁކߕĉ֣ࣼফԇƝɇωÌֿԚɿՅȚʳΈǮԙƁƥƼଥЖఅƌ܃ƞĹıੱ܂य़̈́ܩӴؒƈۤ۰ҹͪఌ΄uȀݯƉώѠɼÖƄ˪ȅҪѰWʚఉ˚ӭUԯЀ١ƃ੩̐lǒ̗θڟ¤éʼɀǞ՝ӈࢋąʭ¦Ƀȑ̽ȷ՞ȟ˨NJĀڴ͞Ȁʍɢ֥ƪ¼ƲƴՃվǸɨĉЂࠑȨѱijšȼࢭɂˑӸíТЙȖάˊʝװӞųƤक़ҬࢡЎᅢ੶ޮӠ͂єగּΆնݳش֢ܜग़ޢي౿֔ŬךڶüොͶࢀ̈൦ԕᘨȧṺो٤ЋÆ֓टѳ൏ɡ⏷ٔ؟Ńൌ؛ÂϵÆઌʯڂɓňРԑΰ͈᎖Թ۾Ȳ֣ዦࠖޢµ̋Ӫ׀۫ԄЪԊءԶᚠˑӔҹĻNҳڌ˽ಜǼȶ՚ჶАᰪܞي£ࠣԙਬĕ˼༾xఢΐफ़ԏॖࢡӢѪˤ២ʫʿᴾॣ֚ѰࡡѺ{ǴৣĈˢЌ҅ټ}ː༄ݾրކزǒᕮɛǬұߕڽԺˋ˒חȏଵऒԧέ֕०ŭ̢ͮऎɎɞжܮЎөӌϼֈࣿêȫҲڢࡈણۆຒ֦șװмnѴүͧ߷࣐Ƶϥඤͦლ¬༈ӏݛ۪ċࣆศǞᆘŌہѮংւॲx࿎иᕠŐ˪ɲᕂþیȋሴҀaɶδߤΨጤΈ˗ଥȷበŹ"],["@@ⵙ͕ໞીےĦقÃᒈӋʟͿ"],["@@૽ōݱÛśƏঙƑ࣫ȦӐʾል~ƶ౨XǢɧӘȬߊƐఞǿ͗ŷ"],["@@ᆳĿᚉʎඅ͎٣ǔᔆָᆎȎ࿌чኬȹݯ"]],encodeOffsets:[[[147096,51966]],[[23277,55632]],[[-179214,68183]],[[184320,72533]],[[-182982,72595]],[[147051,74970]],[[154350,76887]],[[148569,77377]],[[58917,72418]],[[109538,78822]],[[107598,80187]],[[52364,82481]],[[102339,80775]]]}},{type:"Feature",id:"RWA",properties:{name:"Rwanda"},geometry:{type:"Polygon",coordinates:["@@ͬӃµӵʏŁѿÆʱӍԛàþҠŘÞԄʎɺȰďԈʸ"],encodeOffsets:[[31150,-1161]]}},{type:"Feature",id:"ESH",properties:{name:"Western Sahara"},geometry:{type:"Polygon",coordinates:["@@oҊŸ@@ÉeNjEౝ᪁ªᒷ÷ȳћDŽ்ᾓNǽ˫bCቆäĶ̢ΆϘˤୌୠЂˀÖ˜ټۺĜ̦ʼnϢ@˔ȒԲ"],encodeOffsets:[[-9005,27772]]}},{type:"Feature",id:"SAU",properties:{name:"Saudi Arabia"},geometry:{type:"Polygon",coordinates:["@@ʼnΪʩʨÝͲѡ̞҃۴ʁۆׇ׀ϑƐߠīאӾӕञϿ͠ґǨˡӖ°ȎɹѦʕȊ͝زԟڴѓ־лIžҦ̌ļͲनƅζʶȪ̢ٚŚƒˮˤƜ࠷ࡀ၆фdžŴৢɩబיᛎၕ༠ãݠąȾЏתv͠ܥаȓƠִ̏Λ¼ċ˩ł˯ʎɽŐ˟ŲȵʬǕɶÒdž͍ș࡙͐ᡌщǞDzϪש֕၁ᠽ࠽ᝑ͑ϙࢥϹƕɁˬ͏§ĎƷČॹmɫùΉɔɝЭĒΟρˋ"],encodeOffsets:[[43807,16741]]}},{type:"Feature",id:"SDN",properties:{name:"Sudan"},geometry:{type:"Polygon",coordinates:["@@śhdмĵ̀џͨĵĶبϳÌÍȇԍ©Ȭʕðԍңңлџđ۹Ӫͅǥđʓџǃ ǥ࠵@řǦ̡ƝɳîѝӬƟɲŗɱϵɏݣ˿ǁʳğå ̅ʎÃʼƌΔE΄ӛՀĩάZȰ̱ʜUӦǭ͖̍µĎ̰ɒΖħΐˢʴǫȞɞϨئܦÏ¥ ZΚॲH@း@Ὂ@ῼ@˔ࠗȁƳŪࡻ্̰͌ȷҠ̳ыӑأƏ˅ʳĉ֑αĚͳƅܟͿࠟԓзέٛčЉɽʝ࢟Dij"],encodeOffsets:[[34779,9692]]}},{type:"Feature",id:"SDS",properties:{name:"South Sudan"},geometry:{type:"Polygon",coordinates:["@@Xٽűʯѿq˷ӏԨÑюХƨͳϦșӼࣳ֫օԫԇԫϭסFگȟՕȊɭ݉ȥάҵDZϱÆɣƕϗĸԗۚƉˊعͪɅԌΕζ֟ѬS˘ҡͼ֯͠ʴĠ̀ǂɐݤɲ϶ŘƠɱўӫɴí̢ƞ Śǥ࠶@ǦѠDŽĒʔ͆ǦۺөѠĒм؆ҤҤïԎȫʖԎªÎȈϴËĵاĶѠͧĶ˿cлŜg"],encodeOffsets:[[34779,9692]]}},{type:"Feature",id:"SEN",properties:{name:"Senegal"},geometry:{type:"Polygon",coordinates:["@@ٺн̚φDŽРמȦќ˾ːкïШǾҶVДʙ֎ɝԘأֈֽԹǔӓ̾ɿî͗ʽŧ³қâÙģȃkȲЛV༇ɥħ˥ѻƋƏ٢ވkȬŞƮR̸ȘήǯκcζȌǝʐˡƙʻJͧȸˉ_ȍȥࣵy"],encodeOffsets:[[-17114,13922]]}},{type:"Feature",id:"SLB",properties:{name:"Solomon Islands"},geometry:{type:"MultiPolygon",coordinates:[["@@ɾ˿חN͉ԬԈȯǜ"],["@@͝mԧĎǫżÀͮֈƁ˜ǭƎə"],["@@ųƹحܰǫԈ˺@̠ڥʹЗ"],["@@ǛڅΦҟ̠̿˪ŰĐϮȫېϭȢˉ"],["@@Ǘ³οȒ·Ί¨ƖԈΡͰ˛"]],encodeOffsets:[[[166010,-10734]],[[164713,-10109]],[[165561,-9830]],[[163713,-8537]],[[161320,-7524]]]}},{type:"Feature",id:"SLE",properties:{name:"Sierra Leone"},geometry:{type:"Polygon",coordinates:["@@ɧØͺѩ҈Ƨ̬Ĺت҆τĬɺƞǸɶpȜǂڦCɺ̛ǼΛʓƈɗṶɴ´ϹϹϛҗ«ʓȩˏ"],encodeOffsets:[[-11713,6949]]}},{type:"Feature",id:"SLV",properties:{name:"El Salvador"},geometry:{type:"Polygon",coordinates:["@@ġȡӡ^̡ĄǘұÀʃǶ~Ů˾ɄǀĢ«IJȠ¾ʜëǸǙʪƇœτĴǤÑŘĝÏͳ"],encodeOffsets:[[-89900,13706]]}},{type:"Feature",id:"-99",properties:{name:"Somaliland"},geometry:{type:"Polygon",coordinates:["@@ϛԩד۫۹Mᩧা͍̜̳К̳ҨǾ̖̲҈˚ƹǒΏϜΗкGߊɌࣴĴʼиÆ̚ƶӎKaEAࡑ@ѫ"], +encodeOffsets:[[50113,9679]]}},{type:"Feature",id:"SOM",properties:{name:"Somalia"},geometry:{type:"Polygon",coordinates:["@@ѼĎЊ˾͈FpɵýӧHѳǯ̣ʁࣥЙयԱܝ௷ܓवধࡁڹషٕँৱȗѷȍȣӽۚWᵤܾ॒ɰˆբfݠפબᛜᡄה۬ϜԪ@ѬBࡒFΌLbːhϰŰ"],encodeOffsets:[[50923,11857]]}},{type:"Feature",id:"SRB",properties:{name:"Republic of Serbia"},geometry:{type:"Polygon",coordinates:["@@ԠȡàӪʓ˄ȌȸĿșƗƶƥȷȏø̫Тγ͋ʿƗˋĞijƑšϳa˹µØĴĴĦȴšKǍƼƑ ŋƆƽÀšŠƯ±ś˧ȩÑèð͋Ǩ˟ĜūŜɟƠȢŬЄЛ͔ɀτ̥Ë͔́ˉʈȱ͘٢ɚԾҖͣĦˋ"],encodeOffsets:[[21376,46507]]}},{type:"Feature",id:"SUR",properties:{name:"Suriname"},geometry:{type:"Polygon",coordinates:["@@ǙĞưڶÔࣚɥѩܟâֹͤӽƥίóϩɉΛӓDzЇđöčʏƘǗ÷ǡҙèԡܴōӄˏBωؐƺѠ¯ȤԜɖƈݲ"],encodeOffsets:[[-58518,6117]]}},{type:"Feature",id:"SVK",properties:{name:"Slovakia"},geometry:{type:"Polygon",coordinates:["@@´»ΊŖш̕ӺǶЈđŢߚ͓ɷɓǏdzđ࣑ʮ˟»ȟȡЁĿěÄХŽͭ}ãǙ۷Ļ̱ĠёɌċ̆äńŢȂόa˺ĔxþLj¢ÆȒȖžưʢD"],encodeOffsets:[[19306,50685]]}},{type:"Feature",id:"SVN",properties:{name:"Slovenia"},geometry:{type:"Polygon",coordinates:["@@ۜÝъȐܾtLjƘƘUǎ˳ڝɟć̇đHɻͣh˷ƎƷƙבȈúȫΨĞа"],encodeOffsets:[[14138,47626]]}},{type:"Feature",id:"SWE",properties:{name:"Sweden"},geometry:{type:"Polygon",coordinates:["@@ࠁוƀԥڭྱܡؓஃײףߦүޗॅȝ͍තӋ৳ĆӅڗঃˉߐ۳॔ٓஐφӜּۨ˦ন՝ю½ૠղ߀࠰ä̧ͬ˺ಬஂࡀञֈײ߮GɞҶཔƉŬքԸ૪Щ಼ֱv˴͛ฃʃ"],encodeOffsets:[[22716,67302]]}},{type:"Feature",id:"SWZ",properties:{name:"Swaziland"},geometry:{type:"Polygon",coordinates:["@@ǡύӭěԅҖS̄ɰ̀ĂʔʐÒшƵŰϕðω"],encodeOffsets:[[32842,-27375]]}},{type:"Feature",id:"SYR",properties:{name:"Syria"},geometry:{type:"Polygon",coordinates:["@@ࣅऩͬgNŖŶ_ΈȸҠҜ̈́Əͤϗ¨ÿٞȶΌɤȀɤȀ°Ҹ˞Ǐऎɺ҂ƿۖFॴ̀Ґaक़žїԽҡȹĂؗͅ৫ᇵ"],encodeOffsets:[[39724,34180]]}},{type:"Feature",id:"TCD",properties:{name:"Chad"},geometry:{type:"Polygon",coordinates:["@@ĎЄաnDզΓ̶δੴߌ¬ન͖ၼǼΰΓ˾_ˌ̽ɔȷರࡔҠ…ྑ…ྏ¦ ܥÐϧإɝԯǬȝˡʳĨΏɑΕč̯̎¶Ǯ͕Vӥ̲ʛYȯՏƛэͽ؉ࣹ߅ϳ߹¾ʁûĊ̏ѫ̋Σ͟͏ȽȐƓhƹɍۛÙƀɪ˅ׄşΐλƜӷӪǼІϦċʂÐҸSқކÉͭՠ"],encodeOffsets:[[14844,13169]]}},{type:"Feature",id:"TGO",properties:{name:"Togo"},geometry:{type:"Polygon",coordinates:["@@ڱdzȇ̎ɡՔãкȆݴɁ̬ăڎD؎ΕѠÖˀ݂kŅѵʲʝ̈̋ЭǜǥኝȺׅ"],encodeOffsets:[[1911,6290]]}},{type:"Feature",id:"THA",properties:{name:"Thailand"},geometry:{type:"Polygon",coordinates:["@@ݭϬܗeŬڈ݉Káऋґ௯˙ݏÌ؋նދưܭҶӓԚĭѤѧ˝·ևĵßќۇςƣƭͧ͒ƝжҁӄПЌƏӳǃҲĠԾʚ߬ТࡸҤ͟ތ`϶ĩҸ֕ښȩф̄ƺ̮ܶ·ֆՓؘН݆ΠƴϦࣦצӬθӔȘθʷ´ԍ֨ȷࢭpݫࢰԆʤƧӰzǜَ̊ÍٖڽÀࠥںܷ܅˙ϛŦગDž՟ۧȤ১"],encodeOffsets:[[105047,12480]]}},{type:"Feature",id:"TJK",properties:{name:"Tajikistan"},geometry:{type:"Polygon",coordinates:["@@̭ʷࣳƖāӛ࣬Þਢ˗འŶɈާˠĐԜȓ͛ŴӍࡿBׁØԻϕύĉ̉ǯͩˠþ۸ʩ¢ĞʲғȐα̇ėŻūԇj˕ϩ˯nj؋ˑʱĺӀࡘǹض؟ȨɔφۮЌҬˌբȜǩϵŤɹΎv"],encodeOffsets:[[72719,41211]]}},{type:"Feature",id:"TKM",properties:{name:"Turkmenistan"},geometry:{type:"Polygon",coordinates:["@@ñۼطॣݔڣĠगюׯþσƽ֙|ׯӓ݇NjƻרŪ࢞ٽ˶Ɏֺ֏¸Ȇ۾ߊȵ݈ˎؓԎʉӔڱɋď؛ʿհψ˨ॖǪ֨ɻךڅњ¤ॆ\\Əцܖ̂۾ӦଆѹĜڡ͐ǣࣦˮƳаࡽ०ׇոЃ࢞ЩΫwԥʩЅɤſ̙۽NjǙڥӁʭڏŵǫϟهŏࡩ͈"],encodeOffsets:[[62680,36506]]}},{type:"Feature",id:"TLS",properties:{name:"East Timor"},geometry:{type:"Polygon",coordinates:["@@IJȤܢȌזˀŀ͆Ľ̯ɫο۳ʋeʬďǔ"],encodeOffsets:[[127968,-9106]]}},{type:"Feature",id:"TTO",properties:{name:"Trinidad and Tobago"},geometry:{type:"Polygon",coordinates:["@@ӚŊǮصۭġƯúʒɲiͪ"],encodeOffsets:[[-63160,11019]]}},{type:"Feature",id:"TUN",properties:{name:"Tunisia"},geometry:{type:"Polygon",coordinates:["@@ΩພԭͺQȰۉԄóنԮҶȢۚƃߠǠќࣶͺךĵ}ы܊̲ÒljпЫMϱ̆ȽōܫփхDŽқѤaɄЍ͊ſ³٥Хʋʵˏֽ͓ĘΑïΟЧț"],encodeOffsets:[[9710,31035]]}},{type:"Feature",id:"TUR",properties:{name:"Turkey"},geometry:{type:"MultiPolygon",coordinates:[["@@͗ঐżܤõলѬࣆ¢ߴЭƜ̑ăУزȻͨʕֻʇˀ५ǏʻҠڧЕƙ̏ɊňίŽॗŽҏbॳ̿ەEҁǀऍɹ˝ǐ¯ҷɣǿɣǿ̱Ϡ͈͂ԟí۱ȖֿәౣĥڹҊࣟȗΑׇij҄ࣻeӽ࠶ؗҰЦٸՓВठߨಒΜྀٔŏհʄർlุף"],["@@۫ҏ˃Ϻ\\ǦȦĦʺՂХɞࡦ˄ܤőĴ͓ܼ˓Ƶȵি±Ωʷ"]],encodeOffsets:[[[37800,42328]],[[27845,41668]]]}},{type:"Feature",id:"TZA",properties:{name:"United Republic of Tanzania"},geometry:{type:"Polygon",coordinates:["@@ƚġᵂႋÌӣϱਙ¸Ӊՠ̩~ɓɳԓ¶ʭÇГ̌Ճΐ̰ࠡǿڝӣࣿ͛ԋb̙ʥבsɕŃঢ়ʂكåɽଢ˵ϺǛɶࠗƾӉʨՕƘͯƘΗɈґӣҺǗӤČѨƯޞΎ ̨̦͜ѬȺǮS˘ǷȐ·ͨʐł¶Ӷͫӄ̎Ķऄ[ႎà"],encodeOffsets:[[34718,-972]]}},{type:"Feature",id:"UGA",properties:{name:"Uganda"},geometry:{type:"Polygon",coordinates:["@@ः\\̍ĵԇʷȯĐPوȜ͎²ڬǰϸ͎Ѭ͔ɠ˒̘͵Ŗ¼চΌɮՖȉڰȠעEԬϮЊİсτ९̧ؓЯʉͽTࢹႍß"],encodeOffsets:[[32631,-1052]]}},{type:"Feature",id:"UKR",properties:{name:"Ukraine"},geometry:{type:"Polygon",coordinates:["@@̾ɄȒʮ¥ࢌĆ՞Ӈȿǝêʻڠ£̘ηkǑ੪̏٢ƄϿӮVఊ˙XʙͿѯȆҩƃ˩Õџɻύڡã֑˕«ܣ̻¸ԹЪȭࡨ¼Ǐ̛ँơଛӟұǠȄЂࣽʘƨLjߪ˪ʑȔಯɆË̼ީĻ̷ҧٱةϟƠЁƉϑƺɂĞƦ˾ɲˎÑƮǬäĊśӸ{ɞØƽĎÐŲ̉ɈŧΘ̩ƐÒ˶ϝɦΉأʾ֑ĉȧŭΟ@Ƀȟاă˹ŹϷȴ՟HԳĢγǵÍɤұɮǐͺɸɔȀµɑϘބۦиİĜɾхܼДҢɪٲnࡖßबȫڎi͂ŧ̀Ʀɚȝݸ¢ͮąÄцʶȂܞº"],encodeOffsets:[[32549,53353]]}},{type:"Feature",id:"URY",properties:{name:"Uruguay"},geometry:{type:"Polygon",coordinates:["@@ղĚࡆٯ̺|ࡺ՟ڈҫӠֱχЉɸӇεՇॉұاǚғěޥΰ֫ԟҬÞլǾȈS࠸ɤࡺȾڦ"],encodeOffsets:[[-59008,-30941]]}},{type:"Feature",id:"USA",properties:{name:"United States of America"},geometry:{type:"MultiPolygon",coordinates:[["@@ũƕȽŤ|ɾƓ̨¦ĤƤƎÍǔ¸þÜe͐ƙƬñƌőɊ̍q¯͟ǵˏſ"],["@@˭ÑƟǮīèQÀĈî̘āɘŹëĵ"],["@@ĝ҉|Úĸа"],["@@µÓŻŃȒɤŚêÃʐ˥"],["@@ıĉ˱ƴªÖŸĈȘijȝ"],["@@Ƭңʼƛז½ƅࠂʹڼŊਖɓ˞Tݨʄ߂̧ࠒ͗ں˩ٶˏĈəȢĉ½ĉɦǎĔ¦ȣǜƅɴ@ŬĹĽƫЁǶށǚܳʗӹЁҥȁ̍mēĦť˸Ɓɂ@ঊ҆ࡾƀસмfĐ÷ʰƉǒϜƆࠜHޘAˎ͞ŀàࢶϜƸ౦NBĎȺː¦Φž̖Ϣʲٺٚي˨ə֜ƜώʏAଧռӅƢ˝࣋Пࡷ̃ࢱʝѻӿƛȋSѽˤѽΒsė̬ʦȇãʇ֥ƋЗhةƥλ¥ӥ¥۫ʏఀǂʠǃ୳ʥC|ĺʭɷʚǹؑ٧×Ɏȁª˟ɀǪҍȼƭ^ͅˏ͛ҿڡûʺֲѕ͎įۦljεǴՑևƀׂ˓ߛʊÍĖ̃ŠࡁՕدࢇʝցӱнÁэ̱ţ˭इձӁЍЅӽŻׯƪˬܗώשLεЊঅ֥͛ȿԡʣŃЯĺƁς͋ȖѻܢϹٞű͢ǤɽҦٻ۲͟źࡑϡƭ¦СϼՃȺोŁݗĤٙÍΏſƲɟaͽǴǓLJō̵Ů́ǃ؍طѺܻĿ؏ȚԹÏۻȝއح࠳γҝБȕϗUׅ¨ЕDŽ˹͝{ȂٽʺɽЄȁטӷӐ̃ӰуֺףͲۉgՉڑۣʦѡʪȽҦ˧Ѯӿτїˈ̩̖ป@Cڗ@ဩOቿפТĀǒ੩ĝॕÝƙіխӚϻĴğʌһ¦̝ɪޭĊɉƌĹҢࠁࡊ۩ୠȚχˤٯ۴řۆ҃ҞȀۢ ܜˍ٢͠ߊĸނĺނƱૼˇܘʓ϶ĸǐ˷҂ߋȺɜƇې˷ێᛸ@᠂@ࠜ@ᢢ@៚@ᡀ@ᡄ@᭰@ᮞBაAF͔˴J"],["@@࠽͋ѕɐŽЀބ̘҆ŸÉΤʻܫЍ"],["@@ԧŽսƾԛɮࠦƞښùĂ͑"],["@@DžԾĒڸɛ࠲őéĝُDZٕǾ͋Ʋݍµȧôº̈́"],["@@؊ϛώnjහ»¹ȕ౾ƛࡨČᄚ˅ྤā٨ʼn૦Ǝౢʧࣲŝ@@MᷱIⷍࠠ{ࠌɵהρݜցࠈҺࡈ˖Ҁѡ֤·ޒϙՂय़ේxՋұЙҥ͂ݍˌʃܺએںҍߎ߯ÄrটʌࢎߩDŽ̜íϬৃΨटǯǦҫÁঁǫ݉˱झdzťӶϚࠚࣀʶɱɂੱҵֵ֑ױؚСߏࣗΗࡁʱȻωಽѡ˅ϿছΫֽÞɻ˹ۧ˫ʉſƘऀϾࠔʸࣆҠਬĨвΈԊȈǚب̒ƢْђӸॹʫ˓Ơҕ̧շюɧ̝̽мͳԩBïԄƲ̮ե̚થLJ܁ЀַȬIӈ٩Ϊ͘ӘۆҸ̚њںÖ־ƇڴМ؎ï٘ʼƻϨҹưج͖ԩWࢻǽʯȃڏȄஏĥ௷ȬΛӦΘመШ۔@ŕнᄢڽԶਕ͌ױр߫ΨଽˈҺѲਗ਼ϦȨФЎࠊĪཪώޜÉಐ҄ౚǭ"]],encodeOffsets:[[[-159275,19542]],[[-159825,21140]],[[-160520,21686]],[[-161436,21834]],[[-163169,22510]],[[-97093,50575]],[[-156678,58487]],[[-169553,61348]],[[-175853,65314]],[[-158789,72856]]]}},{type:"Feature",id:"UZB",properties:{name:"Uzbekistan"},geometry:{type:"Polygon",coordinates:["@@xԦૣά࢝ЪշЄ॥Яࡾ˭ƴࣥ͏ǤěڢଅѺ۽ӥܕ́Ɛхॅ[ᶾᓘӺƾïದیͅߤݵঢŪàؗÙࡅЦMǢۍ੬ɲЉ̺LπהӖƺʠĉ۵խئ́ײȾ়ѷٕĊuţɺǪ϶૱țˋաЋҫۭ ɓυؠȧǺصҿࡗهǰҳN"],encodeOffsets:[[68116,38260]]}},{type:"Feature",id:"VEN",properties:{name:"Venezuela"},geometry:{type:"Polygon",coordinates:["@@yȣӱĭ˜ϡYѭυӥ͆ڙδÆȌ؈ʻ̒§َਸ਼řІ̎ˆ̞ןל_մҵ˧ݮQ࣌ĔӖϕٞĻҼʾXɄਨ¼\\܉ʛ˼Їڦ×ِЯƆڧѬn͢ȣڕӱó̫˾̷ȽƽԫƉjϱɫɱّ֪Őʁ̭͍ऱ̽Žʏȣڛɀثņƿýϔɑ֝ŜՉ܆ï°ǭʅĭΣΉƏسȝNjʱٷÅҧѼʯ࠺ɟ̧̌Ȅюм ȊʅʠǛ֒àȈ˰ƲҎ̓Ơӏĩ®ͻęסܢӥńઉăȧ̊ȷêǬĴ̶áͺȃȂŅϮѡÈɸӮĺʔ̸͘ʌɈрդƖ"],encodeOffsets:[[-73043,12059]]}},{type:"Feature",id:"VNM",properties:{name:"Vietnam"},geometry:{type:"Polygon",coordinates:["@@૭ܗ۫ߍȁ٠ࢭળނԱԞګϪ།ŕ๓۫փ१եۇ۫ޱ̧ՠʀ֬دӌܬࢦÔσԚප٨ļț֖ƶࡀɃצٍאՋۥԊʊ̠՞ɘ͙ܺਙPϕކӭڐҊȴڢIࠈĬܒ҄К̿ސƵƃӛАͿࡎɓ"],encodeOffsets:[[110644,22070]]}},{type:"Feature",id:"VUT",properties:{name:"Vanuatu"},geometry:{type:"MultiPolygon",coordinates:[["@@ˣō˭ςɤՆӗ"],["@@ƌڱɥŀǩťɴi٢Дʵ"]],encodeOffsets:[[[171874,-16861]],[[171119,-15292]]]}},{type:"Feature",id:"PSE",properties:{name:"West Bank"},geometry:{type:"Polygon",coordinates:["@@@ԣŭʙЃŕɜɌŚɁĦǬ̤֔ś"],encodeOffsets:[[36399,33172]]}},{type:"Feature",id:"YEM",properties:{name:"Yemen"},geometry:{type:"Polygon",coordinates:["@@؉ɥNjύo˹࠷Οഇϻݩףυ±ʥºӭΑlj۷©ɃµǿɛəÕŻɇеlˍœ¨ɓӬzҠƍʜǑتʋΊǚ¤đϨĸNJξςˌđΠɞЮΊɓɬúॺnƸċč͐¨ɂ˫ϺƖࢦϚᝒ͒ڀ൳˞ח"],encodeOffsets:[[54384,17051]]}},{type:"Feature",id:"ZAF",properties:{name:"South Africa"},geometry:{type:"Polygon",coordinates:["@@ǏŧΣяɻћӇोࢁףԋًϣ࢛͙ѓ«ŇɷԛŰеDž࣫NJԙĹΏ¬ࡿͩܓƃԱͅϡoΣ̚˳fαϒśŏɦLӰ˙֞˔ƴs٤սх܈AFતДдͪɯƘΫϘÓՈǃҌÖݤіB᷌ɨűӾߙûԟȈ̏ĒрϒЊʨȶДЦȚΠķВɽۂ£՞ȜĐʾƨДҚäʨ͂˪֔ݮغஒؤUОƛ˲Ķ҂ċДɔׯƫऩî̟чƶʏÑāʓɯ̿T̃ԆҕӮĜǢώْQȿؑıۥɑϛֵщ","@@νʶϻǟҕ҃͡Տـ٧̜ČƺˎҴƀƜ˜ʴФ̅ʪ"],encodeOffsets:[[32278,-29959],[29674,-29650]]}},{type:"Feature",id:"ZMB",properties:{name:"Zambia"},geometry:{type:"Polygon",coordinates:["@@ІϏɊ܋ƝɩǙڻLjۡ˃̇ʭޭѶɓᢇۗĂׯٍřӍͯĹ̛̅ßܵۓҭխ˳o˗ĬऱĠƯÚOêͧȎկ¶ۋȑչԾ֣یᦶშYí̂Ű̀ƧЀĪТėʺ̂q¶ʽϾrՖûˬϡڨŝԤˆȌѯ٠ş̴ΧΈҥ٠Që࣠ɱƳח͞ɧƬļࡈƬসȉψʈ՚ɤĶƚͦđΘɇͰƗՖƗӊʧ"],encodeOffsets:[[33546,-9452]]}},{type:"Feature",id:"ZWE",properties:{name:"Zimbabwe"},geometry:{type:"Polygon",coordinates:["@@ҁČ˱ĵНƜVՙϞٯźʙՒC̒έĞ्ई˃ӢǛƮ͓ڤलğ˘ī˴pҮծܶ۔̜àĺ̆ӎͰَŚÆ̻۬hϴǯǺȻАÓѦˑFǏعƊʝħӵŵùɛࢫ॓"],encodeOffsets:[[31941,-22785]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/xiang_gang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"8100",properties:{name:"香港特别行政区",cp:[114.2784,22.3057],childNum:1},geometry:{type:"Polygon",coordinates:["@@@}ScTʟ@cWuJÁ]l¦RLj¼BĄà H@TOHCTDDDHDNAT@PEHDDNJLX@BABALHFF@DKHADBBLDHHFBLEJB@GDBBFBADDB@@KFAFBBJJA@BB@@FFDDADFF@FADDDBJC@AFBD@@DDD@DAA@D@DB@DHHBFJBBFEHDFAN@DGDC@DLCBDDCFDlAFBFCBEF@BC@GDAB@FD@DZJX´HĐMja@Ý`p_PCZ@lLnRGSDMFK|a\\Y}§Mën"],encodeOffsets:[[117078,22678]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/xin_jiang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"6528",properties:{name:"巴音郭楞蒙古自治州",cp:[88.1653,39.6002],childNum:9},geometry:{type:"Polygon",coordinates:["@@@ÈÒĊanwŎVȮ¦ͪŃĢÜōȂçČéƐżLɆóĊĊaʊŁ±¯²Um»ˌmÈ»VʠţWÑůǓéôƑƒğÆīŎī@Ƿwô˺LÞ¯ƨVǪуĢȘV°wĢôk°¯ƒ»@Ȃ»ĸǔ@͔ôôLɆó̐ÝɜLɲōͪƨóŤK@ī@IU܃ÛmȻţǩÝ˹ÛljťǓǫō@Ɲ²¯VçōKͿŁΗÇţ»ƽɅƑLÓŏÅÅɱV@ÝĊU¯ÑĊĭÞLÞŎJ±̃XȣˌōlUȯŎKÆƅ°XÑܱnŗġV¯óaUƧUōŁÑ±çɲ¥lĉkğ°k¥nğţL¯ÝÝUƽĬlķ°@ōXÿݯV»ŹLʉÞɱŤĉó°ÝJ¦ÝKÝ£ţÜÈĉ@xǩUċƑ@ky͓¹`U²ĉVġ»ğa¯¥ť@ĉó@ŻÛÛJw¯nó¯ġWƽʩķÝɛwĉĕݼȭÞķō@ó£ÅƑ¯ôȯÞ¯ȰÆōèĉXǼó@ÝnºĸÞVƜĸȚUʶõˀĵĖɱŎÝĖVࢰӒѢ°˘nϚVˌÈmɼĵŦW¤öʊõʔ@°ÈXVènŎȁb¯ǫĉ±Èğ`ġwōÔğ»mVVÝ¥ó@ĸķô@bXĶmV²²`Þ_ɴbͪÈ°ÞWĸÈŌmÞkɲÈUÆ»n¼ǬVķĸźô¯°n¦ɄÇÈ"],encodeOffsets:[[86986,44534]]}},{type:"Feature",id:"6532",properties:{name:"和田地区",cp:[81.167,36.9855],childNum:8},geometry:{type:"Polygon",coordinates:["@@ƨ¥èź٨ΘƑᩄbUࢯÞĕɲōĶĕöʿVʵķșUƛÝķm¹Þô@È»ĊWŎçÅ°ȯȰÝ°óƒÆͿĉ»̽çnmɱĵƧºóUƽ@±wóL¯°̻L±Æ¯Vƴķb¯VÇ¥ğ²Ǖbk¥ÇKlÅɱġ@ÑóK@ÇaÝXğţxĉČǫķê¯K@ÑaŹƑK¼¯VóaónġwóÞéUġbóĉğÇl¹aUóğKWVůnÇŋƑķnʇ»óxĉwçÇ°Åw°ċXób±kÈÇJm²ţx@ÒÝŦǺnó¼n°ÇbUÒ±¼XĸĠłƽXmwĉºzÈÜmnxmx²ĖmÒbnƧêUºĊêÆVóĖóUĉ¼ÅĬƑ°ɆƆŻŚlłÞL¼nĠ¼@ÞÞź@ŎÞ°VɄɴжϼِ͈Ŏ"],encodeOffsets:[[81293,39764]]}},{type:"Feature",id:"6522",properties:{name:"哈密地区",cp:[93.7793,42.9236],childNum:3},geometry:{type:"Polygon",coordinates:["@@WnŐÆĶLĢ¦ţºźlxÅĸƽŚɄĮè@ô²ÞUĔƐńV°¯ĸX¦Ɛm̐bƒ»ɆaĢƐLˤȘÑnІljĸÿn¯ĶaŎ¯ĢĕȘ¯°la¯¥ǕǔwˤӱlťО̻nŻmɃĕċţUw°WUóƨÅţķ°ýV±óÅǓéʉ¯ƽŁéōǖȁÝƏůǕw˹ǫȗǓƧǕVýé@ĬţLƧôͩɱŎɛK̏ÞɅôóK@²@°ōŘ¼lŦ¯ŰóƜÛlV¼ķ¼°kȰŰĠǬŚÝŎmĖ`@ÇÜn"],encodeOffsets:[[93387,44539]]}},{type:"Feature",id:"6529",properties:{name:"阿克苏地区",cp:[82.9797,41.0229],childNum:10},geometry:{type:"Polygon",coordinates:["@@VÆxˌŎÞŎ°nȂÒ°²VĊ¯VğƾˍǬƨÞÞKÈÞĊVźôɆÞĢèŌôWČ²ŤVÞĸʶbl¯ôn_VÆĸlmÞnVź_ĸ¼ȮmǖéĸW°°ĸJkʠ¼Æw°¤ÈlxɆzČºĶI²ÆǔU°ô@Þ¦UnUĠ¼ŎÓĢxĠ_²ÇĊǬ°ȂamōçUÇW@¯öʓõʉX£ĶťnɻÇUˋmϙ¯˗ӑѡᩃaΗƒɜ°xWƴUxɃÒˣ¤ɅwğʉōóÝŹ±°ȗ@¯Æƒ²¼","@@ōгwȁ¥Ƨ°ŹÑķV¼ÞêĊ»lĵm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘnIÇŃÛÝĊÑĠƏ"],encodeOffsets:[[80022,41294],[83914,41474]]}},{type:"Feature",id:"6543",properties:{name:"阿勒泰地区",cp:[88.2971,47.0929],childNum:7},geometry:{type:"Polygon",coordinates:["@@ɲˣĊIÈ¥ÅU±Ċýkō°ĉƽó»ĶƽXóʵʵȯƑÅȁɅ¯ĉ@ÇሗK֛@@ˤV֜ʵрƒǬVĸƑŎ@ƆϯÑóķ@ʇ»ķ¦έmlÈĸĊX¼WźÛÞÝѸĢČþĀĊôάVö¼ĊUƨ°°èŎČUÜÆóôVôô²êȘlˌç°`n²ǬĊaÛ°±kğmm»@°ÝɆÛÅÇVaÝVm͔ğôÝÈb@n¯ÜUĢÑĊ@źīżWŤÈǖWôŁÆI²ÓƨL@ĊXmmÑÆ»ȰÑkĶō@ý°m¯"],encodeOffsets:[[92656,48460]]}},{type:"Feature",id:"6531",properties:{name:"喀什地区",cp:[77.168,37.8534],childNum:13},geometry:{type:"Polygon",coordinates:["@@Č@°ĠôÓô@Ŏĉ@Ƴĸ@Ť£ĢlVôWVóřXĉŤêÞ@ƐÒĢÑlèÈV@ĠIk°ÆŘ@ÈÈĀ@ǶťÒğ@@ÒĉlŻ_@ƧĖÅĬōÆ@bźÞnƒlVÝĬWƼʇÝÅ@ÇÅÈwWóĉ±ğzĬČƨÆÝIĉݯbÇÑĉ¯ʈV°xUŰĊ¤ƪ_ôÓɚI@lȚXȮŎlɴȘ¦ɲÆʈ_ɴźôÞʊŎĠɆxˤ£ɄÑVwXƳ¯wɛŹ٧çƧ¦ōُ͇еϻɃɳUݯ@ōÝŹ@Ý»mğ»ÝKkŁżřɅƅƒ¯ÆīĊ»ôVôĕÅUĉéV¹ƨémanѱĕnwmwnÇÛyĉ¹ŹlŏkĵèķmōÞġKñÔċKÅèĉzômxȗÿƿI@þÅČÝKÝ°@¼ÈVº@ÅĢÆUċłnÝÆǕČĵJm£ÝJ¦@ĊxV°ƏLċ¼ǩ@m@ÅĢómÇÆğ¹ÇÆĖÞKxwô¦ÆÑÆL²ÆƾU±ŚÅŻĖ@ĬŤÈñ@ǔÇxÈǃ","@@VÇţ°ğUĠ¯mk¯ó¥ķIġÿƏbĉa±ÒĸĀlKU_m»nwm@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁVé"],encodeOffsets:[[76624,39196],[81507,40877]]}},{type:"Feature",id:"6542",properties:{name:"塔城地区",cp:[86.6272,45.8514],childNum:7},geometry:{type:"Polygon",coordinates:["@@ήnĸ¥ʈ¼ĸ@ôϰÒ@ƅƒōUķƑǫʶпU֛܃LګK@ĸ@Æ£ÞġÅĠċLVÝ»@Å»Ýnm¯»nŻĊ@nķŃ@¯ómóÛÝǟ¯aÝóȭ¥ōUmxĉbÇÑ@bUº¯X¯ÆƧbVÒĉnǕw¯°ƑVÇ@kx±UɱnÅK¯ƒĠǠU°ɜL@°xnĬĀŋŎÇLğϱÞέƜkôÅĀǕłĸĊŤUŰĢ°¦ȂϰÜɨ°x@°żǠÆƈČVĠ»ČL°ÇbĊÑ̐óÞlĶwÞɆVÞwǬxǪţȼÜLŐĶˢ@","@@óKĵĀV͈ĉłƾNJÆŤzXl°ÆL²¼źôÈĢǔ¦lô°ɜÞʊĠğÅm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI»ĉmğnaċƨbVğwġ¯@UōaĉÝJğÑÆŎkŎÞĀlź¦"],encodeOffsets:[[87593,48184],[86884,45760]]}},{type:"Feature",id:"6523",properties:{name:"昌吉回族自治州",cp:[89.6814,44.4507],childNum:7},geometry:{type:"MultiPolygon",coordinates:[["@@መL@È°ĊȂɆƒÆĊ£ťôWÓɆbĢÅŎƦČÑW¥°ķU¯ƏŃVē±Ý@óçĭɃƾřÆķkwŹŤ¹ġ¥ĵKŏÅXmˍщwǓ¤Ƒ@wóōVķ£ɱġôÛa±ÒȁóèţIVƽ¼k¤ó¹ġJmx»ÝU²@ÅÆĸǫŎĊmŎǬ"],["@@Þô°bÞǠôÜôn@°ĸńǶkł¼UÞKğČÆÝĢŤķ@@ΌڬL܄K@ˣȂ˭lĉÅW¥ĵVÆý@ŃÞēUŃȗƅ@ŹƩǕĉ»k»ÇVğóřXŻKƏċêȁèÛŎġͩń"]],encodeOffsets:[[[90113,46080]],[[87638,44579]]]}},{type:"Feature",id:"6530",properties:{name:"克孜勒苏柯尔克孜自治州",cp:[74.6301,39.5233],childNum:4},geometry:{type:"Polygon",coordinates:["@@ˎǫĠƽ°UUĉ¯±ȁÑm¯ÝōˋōwUű»ÅƑ°Ș@²¯ɳʇ`ɱÅ¥ɳȗōkȭșW@kəJóÔƩ`ĉ£Vů¯wU°ʇĊÈÒ°aĊÞÞJÅċƧīĠyĊ²XôÇxÈÆÆ@ÞʈÅ»XÞīUƑkmŹÝ@aŎÅÆīƨĕ@ż`Ċk@ÑĠ@ŦÑ@ǵÇÿ@ÇÅŗl¯ğJ@ÇUkçġÒƏÑÝ@ţéWĊôŚUóXUġkţ¤ķ@@ƴōĊó@óÔğ¯ċ@@Ò¤kôˣŰ͓k»KX¯ċwƧôğɐÒôIVƯUķǬķn¼ôb°ÒȰVVÈÞ°ĸó¤V¼°V°²êlĢÒUƨ¦ôȰƴĊVV¼ǖIċĊÞɜénČW˸ǸařÈw±īçĸ¤ĊôwĸUĢ¦éǖĬĀô¼lÞkÒ°x°ƆÞxÆV²ǔ»b°wÞȘ¥°nŎV@°ʠèŰȂb"],encodeOffsets:[[80269,42396]]}},{type:"Feature",id:"6521",properties:{name:"吐鲁番地区",cp:[89.6375,42.4127],childNum:3},geometry:{type:"Polygon",coordinates:["@@ôKĉǪa²¼lÜô@ʠê°ĬôȂ²ÑÜbĢóɲĸ¤ŎUô@xƒǔ£ъxˎmÈÛ@_nĕÞōřǫğůlȯ¯ĸ»U»Ükôƛ°ůkť»Ŏŗ@¯@±͓óͿǓ@ķȁ¼Ϳ@Ƒ¼¯°ólġ¯xȗUġƑǩÒƧUÝ°˹Kóx@ǸōĬÅĬƑĠóƒǔêÆ°XÒʟŤUǼˋnn¼±V²°ȂUŌÝbʟǔɅô@żǬaҎÈ"],encodeOffsets:[[90248,44371]]}},{type:"Feature",id:"6540",properties:{name:"伊犁哈萨克自治州",cp:[82.5513,43.5498],childNum:10},geometry:{type:"MultiPolygon",coordinates:[["@@ĉÆŘȁ̐mÞ¯ĀX°±¼@ƾ¯ƴ°ŎÝþŋ¦WÜÞbȂĉźUÇmwVUȂóô@ȰÝnÆJnƾʠŌLČóǪ¯¥ǔaǖŌaôÝĢLxÆLɲm²VlwÈ@Uƒ°¯ǖxĊmUÑƨa°Å°WV¹aÇɃÈm¥°¯ŹóĸķǫUm»Å¼ÇVɱlÝŋnķÇÝX¯ͩÇɳaÝ`±_U±ĵnWa@ĸóķ¯ǓV±ÅĵJċ¹Ʌykwǯ£Åxʟ»lķI¯X¯ķêǕȭnķ»Ź`±kÞ@Ýô@Þ°xŤŎIƨÆUxō¯²ǔĬǬlUŚ"],["@@ÞĀlź¦¯ĸŤKÞċƨbVğwġ¯@ţƽJ"]],encodeOffsets:[[[82722,44337]],[[86817,45456]]]}},{type:"Feature",id:"6527",properties:{name:"博尔塔拉蒙古自治州",cp:[81.8481,44.6979],childNum:3},geometry:{type:"Polygon",coordinates:["@@ήƛϲÝĠÈKŌōÿmīw@¯ɛKV¯ğǟ°ƑwġKóÞŋbǕǓb¦ǩ°ċôŋKʟƽmÅImͿȯÞó@ȁôUVnxÈŹVȁĊÝabŻ£¯°lóxȂŤĸkĊÞyĊêĊmĢxVƨÈĠXΘÆĠÔźɆţ°LXƾŤŤb"],encodeOffsets:[[84555,46311]]}},{type:"Feature",id:"6501",properties:{name:"乌鲁木齐市",cp:[87.9236,43.5883],childNum:4},geometry:{type:"Polygon",coordinates:["@@WôŚUĠÈl¼Ċ¼ƪǖ@źȘƆ@ýlÜXVŘÞ¦V¼kĖóÒèkĊȁˮ֜@ǫnōĉǬōķÆÅ@±ÞV¼nwĢIôºl£ƾ»UŤJôçó¯īʟéó@kÛ±»ǩbĊóLҍÇǫb@ŻɆóʠǓaŋÞȁVʉłĉbĉɅô"],encodeOffsets:[[88887,44146]]}},{type:"Feature",id:"6502",properties:{name:"克拉玛依市",cp:[85.2869,45.5054],childNum:2},geometry:{type:"MultiPolygon",coordinates:[["@@ɜÞʊĊýVaÅm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI»ĉmğnaÝţL°ķóKĵĀV͈ĉłƾNJÆŤzXl°ÆL²¼źôÈĢǔ¦lô°"],["@@ƾIŤ@UUwōaĉÝJğÑÆŎkŎ"]],encodeOffsets:[[[87424,47245]],[[86817,45456]]]}},{type:"Feature",id:"659002",properties:{name:"阿拉尔市",cp:[81.2769,40.6549],childNum:1},geometry:{type:"Polygon",coordinates:["@@nIÇŃÛÝĊÑĠƏōгwȁ¥Ƨ°ŹÑķV¼ÞêĊ»lĵm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘ"],encodeOffsets:[[83824,41929]]}},{type:"Feature",id:"659003",properties:{name:"图木舒克市",cp:[79.1345,39.8749],childNum:1},geometry:{type:"Polygon",coordinates:["@@VéVÇţ°ğUĠ¯mk¯ó¥ķIġÿƏbĉa±ÒĸĀlKU_m»nwm@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁ"],encodeOffsets:[[81496,40962]]}},{type:"Feature",id:"659004",properties:{name:"五家渠市",cp:[87.5391,44.3024],childNum:1},geometry:{type:"Polygon",coordinates:["@@çôÑlĕU»¥ÝUŗWkÛ@þVńÝĔ@ńÅþĶUX¦Æ"],encodeOffsets:[[89674,45636]]}},{type:"Feature",id:"659001",properties:{name:"石河子市",cp:[86.0229,44.2914],childNum:1},geometry:{type:"Polygon",coordinates:["@@lŁǵmĉ@mż¼n°ÞmƼ@"],encodeOffsets:[[88178,45529]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/xi_zang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5424",properties:{name:"那曲地区",cp:[88.1982,33.3215],childNum:10},geometry:{type:"Polygon",coordinates:["@@ƨʔĸbܺÞwnxźbÞ°ô@ĶĸIȼĊJŎÈôU݃¤ǔLÞŎ@ĢȘblôLÇźçȤôL¥ÞIÞ¯ĶxʊťƨƿÑĉXVķŦ¯ȂKÇǕѯIU£¯Óƿ£VĕÅÞÿÆwƑ£ǖxÞĕ±ÇÝaUÑÈU¯UōÈÝwWŁĵ±ÝóĢÿ°IÞ±mÅĢ¯mÿ¥°UnÑŤĢĕĶwǬŻͪwŎ¼źÇĢĠĕˎŁ°óƨ¼Èam@¥°wǔǖ°ƨÇŤġƨŎŃôbÈÛŎĊ°@Ġw²ÑÞJÆÆb²°êĊUÞlȲVÈKĊÒĸĉ»ÅôťUÅÇk¯@ÇÑklÇÅlĢVÑó@°@ÛĸV¯ÇĊn¯Uĕƽ¯m¯bÈ@Ò°Ĭbĵ¼kxķýÇJk£ÝaUÑÅóĶǟkÓʉnĉݼƑó»Þmn£mČ¯@ȮÿV¯ĸk@Ýów»ğġ±ǓLōV¼Əèķĉè±b@ÒţUÑóakl£Ó@¯L@ÇlUóȁ¯aġÈÅĕÝLķ¯Ė¯@WĬxÒÈnW°ţôU²ǓÓġ²V°¯ôǔÝLċk»Ý»Ý¯ÞVwÛÝÇōͩÈĉċ»ĉm¯£W¥ţKkóġƏW@¯±kōÈb@ÒÇaƯakóÛǦÝa¯Ýĉ@Ç»ÛmǓxķƛ¯lVĀÅÞġbÇJUÅVĖƑWzō»ōWn@è¯ÞóVkwƩnkźÇÞÒÞ¯ýğÇUxÆÈnè±bĉÝ»ÈŃwwÞ@m»ÈV@ýÇ°ķxaݯXċ¥ÈóW@ôkxlnxVÈóĊkŤġ¼@°¯ŰƑL̻۱ŎÝVÞVÇÞÅÇakƞ@èğŎĸżƾ°ÒLÞôĠKȰĖźVÈÒĠ¤VôUÈþťL@ôǬÞlÜÈnÇÒUŚ@ĊƨW°°X@ČÇþƴĉÒķ¦@ĢôWĀôłUÞĢǬź°¼@ôV°bUÆnzm¤ƽĸÈ"],encodeOffsets:[[88133,36721]]}},{type:"Feature",id:"5425",properties:{name:"阿里地区",cp:[82.3645,32.7667],childNum:7},geometry:{type:"Polygon",coordinates:["@@Çƾķn£myVÅaU¯ó@¯»ŹġǫVÝóŁXÿġó@ĸ¥ĊÑƳÈý@ċW¯X¯ĉƧ@VřÈÑÇmkÛǫÝ@óŦKÇýVUó£ğÇÑŹUȯĕğLÝóK¯ÑƽķŻĠō@çlƝÈbÆÈÝUÝÞU²ō̼ůƒK°ů@¯UK±ĊƧbōÇmçÈġóÅóbźó¥kīƯólçKôĵUÅVŃķ¥nÅŏm¯¹Å»@ÑÇóxÝkʇȤU¤ķb@ƒ¯ĊÇx¯ĸĉKm°Āk¦lKnĬȀƾÛ¦WÆÅmNJĉ°ōUţ¤UŎ°ŎKÞłÆǓ¦Þř¯bmUÝl¯Umğl¯£șwÅǫaÝnĉĶk@¯Kō»ĉnaÞ»ťnkmlĸ¥UÅŻkÑťĉVôó°LôīĠUÿĉǕÅz±K¤²ō¤¯Ė¯UÝ¥VĵóÈťÝwķÈÑk¤óWýĵĕVĠVóǓķ°k±VU±ţ¦UǟÝÅJVÑ¥XUċUÅlÛƆǕÆȗƆ¯wŏÞÅ@ĉlÝóÒnUôÅlxólÝôÛ±LÛôÝL@ġ¯X¯ÇUżóaó¤¼XÒġŎóLk¦ôżĸĠ¼KġƆô¦ÆƑÔĉĶ¯ImÒ°¦n°¯ÞlÝČnƒÒKĠÞĕklýƾťôIĖŤÒnƜm¼¯lnżóÞ@Ůó¦ôƽĖċŚn°Ý°ôÈUƜblÞó@ǖô°UÈƆ°XþôôlѢ²Ėm¦°@¤XĊblÜzkºƒĖmXŎWVóÞn°lĠxȚa°»żLźb@Æ°XĠÝȚxĊĕŤaȚ°È@@èŤ¦Ü¼WÞkÈ@V°lŤkŎ±²¦ƐUlj°aÈÑŎbĢŎbÆ¥ÞIȘlôVÈUbkɲĶnmnXb̼òƾĖŎ@ĢȂÑôÓĠĖʊĊÔ"],encodeOffsets:[[88133,36721]]}},{type:"Feature",id:"5423",properties:{name:"日喀则地区",cp:[86.2427,29.5093],childNum:18},geometry:{type:"Polygon",coordinates:["@@ĶĖXþôl£ÒĸÇÞxÇŦôUĶÞ¦°V°ĕŎ£±£²LÆyĊǖĀğVóĬ¯KóôUĊŦlÒżVÆķ¦klnŦmݼbĊmŎ¼L@°lĊĵÞmǬbÆȚx°¤Ġkn°VÞkVn°aŚÝǔ¥ÅÝŁōL¯ōVŤ£ŎVĊ¯nljÆXÅÜ¥ǿƽmīLkl¥ÿn¯ĊL°ķÈw°ĉ@ƑĸaV£ʈȣÞlôwÈ@ҼưºŐnmÆĸ¦UńÆVóĶLèôkÅ°lĬ¦ŹôôaÆôÇĢnèŎÈƨaĉ²VLĢ»lţôĉUÇwkmlw@óôXÇȦ°WÞbwĸȯ@þÇUn¼Ý@xxÇńÞ¼Ċ²amçÅÇVwĠÈþ°ÝÑÈÝlŹƪmlxôU°Ý@çmXŎŎ¼yƒXĕÆUVÈIĢaÆÝUÿ°kĸƜǔwnÜȼĊ@Þ°ÞbÈ¥Üôl°bÅÈb@ÑaǯUU¯Vġ»¯aV¯Ç°ÅmnÑŤçǬVǬ±ĉ¯¥Vĕ¯Ýk£ōw@±ġÛ°ÇVÑ@Ûa@ČLƳÇa¯¤ÝIĵ¼U¥ƿōķÅţŻókÝóĕ¥¯U»Æ£X¯ġŃÛkÝ°V°ó¼¯èWôÞĖȎkĀƧĀówm¥¯JŹÝJÝōVVÅaÝƑ@ğŭǯ_ĵVnxÅónĵxÇĖĉVÝÈğVÒó¯±Żĉ£ķÆÅLLjĉýţÛ¯VnV¤ÝÈ@°ÅÞݤŰğŁm¦ÝxóK¥ɱÈUĠôêVôÛ¼ÇWÝçĵaō¦óĖƧlÇĢƑnŎÇV¼¼ºÛ@m¦ƽĉmm¯ÝKÛç¯bŏłĬb¼ÅLmxť°ÅUÝXkÝmĉ¦W¯KÒknÝaVÝè¯KɅńÝKnÞ¯¼"],encodeOffsets:[[84117,30927]]}},{type:"Feature",id:"5426",properties:{name:"林芝地区",cp:[95.4602,29.1138],childNum:7},geometry:{type:"Polygon",coordinates:["@@VÈłVôÈk@°K@Ôk¤lôbVÒŤ@ѲaçĸĊƐçU»ŎǔKĢ²Ġ¼ôx@ÞlƨĬUl¯ÈLVÞJ°ÜnʊwÜbXêVÞ¯°anaU°wƼɴÑWÑ°mÈýÈam¥Þ£Ť@¥ôblÞĢź¥ôxÈÅmÝĕÅV»ĉōŤōnó»ÈīķIUĠÑ°ġĸLÞ¯VÒÆ@Āb¼WôÈ@V¼ôóŤKÈÑU»wVǫżnWÒÈx¼lŦ£ĊōŤx²¯@ÆU¯çÆ@¤°£é°k°lůÈó@¯ŤÇÈĉkkÿó¥ÝXķÑÜ@ÒóŚÝ¯°ĉówDZ¦ÅJUÒĉĀķw¯°mĖ¯±akxÝÅn»lÑK@¯lU¯UVѯóĊ¯mōğVǓƅÞWÝÈÛ@ƿô¯ÜġzÅþ¯ólmôʇġĊÅUͿřŏȁˋŁóÇˡōƧÇbw°Ķôk¦ÒnUþġÒÔkǔķèó@²@ŘōńĵyzġaݤÅI¤Ƀť¦ğѯ¤ķbó¯ó±U²°¤ČÜVnÈÆŚŎ°ôĢþÆzèVĀÇĀÇXŹÑ¯¤ówċķk¦łUÒġzÇ@ÆÝx@²Þ@ƤUô¦U°xU"],encodeOffsets:[[94737,30809]]}},{type:"Feature",id:"5421",properties:{name:"昌都地区",cp:[97.0203,30.7068],childNum:11},geometry:{type:"Polygon",coordinates:["@@VĖm°ĉÈU°ķܯ@@ôUÒġkÆkÈlÒ@Èl°ÈVÆóŦƼaÅĢɄwnōw@¥Ŏ¦°ŹÞmV°wnÿwwÝw@¯mÞŗ°wĠĸkÞğlĔ²¦°@ĕĸwVóal@nĢÇĊn°@¦źUXçǔůĸVÆKÈÝĠ²ÅĔô@lÈ_mzǖlaU¼ôwV°¯¦ĬÈal@ČǼnIxô»ɜ@ƨ¥ɆŁŃǪȁkƛƨȍʊȡóĭ@ÈÇVůÞĸƅmēƨťÅÈʉVǵ°ġVŭÅɧ°ÿnɛ£mķ²ŃóÑUĉ°mÇ»¯@mxUĀ¯èţ°ȁÝçġU¯ÆÇţÈ@°ÇôŰ¯k¯lꯤ£Å@èV°Å@±°ţwĉŎť¤k»ÇwXÑŻmUǬxV¼ÇÒţLóôU»Ç@Xó»a@ÿÅUÑÝ°ķK¯ĢğÒVĸJÇĬ¼môţŎĊŎU¼ÆĖnÞÇÆówŹ¦ġkÝóa¦ţ@ݤn¦ÇbÇþ¯nXÒɳÒÅ»¯xVmbb¯Ý°UWéÛaxʉÛm¯ÝIUÇKk°VƧīķU°ȭĀ@ċ°nm¤Ýnô¼ƒÞ»ĊʊmlÔĵǠÆôVÒÞbl¤ÈIĸþlw»Ķa¯ī@ÑÇ°anƾ°"],encodeOffsets:[[97302,31917]]}},{type:"Feature",id:"5422",properties:{name:"山南地区",cp:[92.2083,28.3392],childNum:12},geometry:{type:"Polygon",coordinates:["@@°ÞUĖ°¦²ĊôÇÜLǖĀɜȘŰÞLĸźêÞ@UÜUŤ°ɞ¯Ü°WŦĀmŎ¦ĢyVÑŁl¥Čĸôx°£źÒWÈÿÈUÿçÅyýóġō¯řÅmÇÛUċ¯£V±²°ôôĸa°£ĠÒŦ¥Ʉ£ÆJÞ£ĢbyĶzŎŃ@ŗ±ô@ĸçlǓÓĢÑVýmÑl¥ĵó¯̻̥ƛǫÝһÇƧĉyţ¼ҍēVĶĉŎ°ĸmÞVÝĸÒÛaċóŹĖèÈÈl¼k¤ÝX@`Þŏ¼Æō¼ÇçĉKUÝÝ£ğ¤@¦ġl¯Òġĉ¯ómóxÝÞğVƴċK@b@ÜUÒ¯ÈĢÜ@²xŎl¤"],encodeOffsets:[[92363,29672]]}},{type:"Feature",id:"5401",properties:{name:"拉萨市",cp:[91.1865,30.1465],childNum:8},geometry:{type:"Polygon",coordinates:["@@Ŏ²l@°XĢƐlôŤLX¦°¤ĊnČ¼ÇĊŎͪÞÈÜxU°ÝÞÞ¼¼lČÞKǓ°óU¯Ģ±ǔÔV±ŤóX¯ÇmÑwXī°@°ĕĸÞKÆĖĢÇ°bȂÇŁUV¯wVó¥VÅ£Ý@@±ÞwÅÈ@¥nōťÿ¯XÛɝ°ţ¯ÛVVÝ@ŹéķÝKȗůɛǕÿÛKóÈǫǫUţèmÒn¯Æ°ÈU°b¼UĢV°°V"],encodeOffsets:[[92059,30696]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/yun_nan_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"5308",properties:{name:"普洱市",cp:[100.7446,23.4229],childNum:10},geometry:{type:"Polygon",coordinates:["@@Uô²a@²²Ķ¥V°Ķ²bl¤kVxl@°Ś²@y@ô¦¯@xxVxUVbVÜm¼ŎĢmºXXWÆ@ĀmmXU°ÅÒm¼Þx°w@°XêĠ°»nV°Ul@k@V±ôī@£ČŃÆ£KÞý@¥k@ya@nWVUVwm£Jknm@wmknXX¥mUUlUnb¯°nkVInlIUw°nmk@@mlanXlanmk@wVWUw_@éĠanmUaÜ£mX¥¯@@óUmݯ¯ÞÝlKnxô£»»ĠJ°aVUÝÿV¥ÛbI@wmón¯yÛL@WkÅmÈ`IWa¯K@¯mUnmaXmbmak¯ĢÒÝm¯mV¯KÇb¯KÛWWX@aVknċLUWVkXóW@ka@ób¯Uwmb¥UUlaU¥U£maķKXkmÝ@kwmѯk±ċbUUVakaġ¦kL@`a¯xmÅLUW@ċnÅUV°LkL@b°°@¤²nôôkl°kèÒÈzV¤ÈWôônV@¦@¼Ux"],encodeOffsets:[[101903,23637]]}},{type:"Feature",id:"5325",properties:{name:"红河哈尼族彝族自治州",cp:[103.0408,23.6041],childNum:13},geometry:{type:"Polygon",coordinates:["@@°°nÞôV@°@¦WnÛ¤Vbmnğb@ê`VxUX@xÆÞUnnWÞĸĢÈ@Çè@zÛÜWÅêl²KnV¯ĖĊx@bk@@°JÆ£Èblnnm°nlUkVUUwVmKnnVÞxVLX¥laX@@xl@VzÈVmk@b°ÈĸmV¦`WXbUbbX¼°x@aVVkn@lþnXUlVxŤÅyIUkaIŎĊ@lXx@bz@ô¥_V@ln@ôy@al_l`nmÈ»@kmXwWKU¯»aÅ@wmUÝKUaUUwW@w²»@kÆV£mm£VKkÑV@@»nw¥@kÆnllIVlnLVakalknJWmnaUaVÑVVÞn¥m@¯Uÿl@VçaXaV¯UyVLVk@nJlXLlkxlbla²Òl@nVJVkxKlkUaVķÝÑU@Åm¯@±Uó°ğńķĠmUÑ@ǯ¯Å¼@nml@°¯¯`@w£@¯Çk@»nmċ¯U»I¯LÇĶÛn@bó°Uwm¯UmǯaI@ykIVU¯bIğ¼¼ó¤mwkLÝÞ"],encodeOffsets:[[104243,23429]]}},{type:"Feature",id:"5326",properties:{name:"文山壮族苗族自治州",cp:[104.8865,23.5712],childNum:8},geometry:{type:"Polygon",coordinates:["@@wô@²¯maUmôUÆx@XbÞInlVUVwJVaUK°¥xmÞXnlKlnna°@ĊČÆwUmnkl@°£nyn@VV@Vak@@kÞÝbmx°Vnw°klÞInĖÞVlKl@Xa°KlVU@JnxU@ÈĢbUKlm@ak_wanWUk°l»k@Wk@lwU_@UalóU¥ÇnkJW@mVXx±bK@nV±a@Åa£ÝK²WknamKknÇk¯aVV¯ĀUÒ¥I@mm¯¯xÅW@@`k@ó»UU¯lm£ÅWlĵw@mmwÅmWU@y±UxmwU¯U¥Ý¥¯£m@kÇVUV°VbklLwUlUImk@±ÑkbkalwkWKkmI@UlUKVzU°WbbUè@kVĀ°@nm¦ÝUUUÒVbmbXnmIkllbUbmKUkkJmkÅ@l¦mx@¼U@lÒULn¤nU¤Å@l±¼@xXxVVVbÞLVn@xÆb°¼V"],encodeOffsets:[[106504,25037]]}},{type:"Feature",id:"5303",properties:{name:"曲靖市",cp:[103.9417,25.7025],childNum:9},geometry:{type:"Polygon",coordinates:["@@ȦlKÞĕUV¯Um¯ÇVUnVVUĉnĊÇƾLn°°ÈJÆw@lbÞa¦VXJ°¯W¯aÞJVkUa@lKnÅmWUk¯a¯»@m±@ÑkkbWWX_WÓU»_lkÑm@U»m@l@IWċn¯l@VanVUVUVwVxKÈVmUē@n@VÝÆLwVVwnVlmkUVÑÇ°ka@kÿÝaÞUl£ċĕX±±ĉa@UnVnalónk@wlUVmkÝJaW@ÅwóVVnnb±°@óxXLWxn@lǼnmk_k`@bózm@kU@`¦ó@nW@ÜÅXWw@yb¦@ÒlnUb@xlÜk@²Ç@U¯bmy@kV@bb¦U`lLVx@bLl¼Þ¤@°VVÞU@WÞUbJ@nn@lnnmxUUUbK@ÇwklkUVWakn@lbU@@ULVxkKUn°¯Ò@¼km¦m@klȰ@lUl¦@Vl°wnnþĊUÆbUxbVĖU°annaVal@@b"],encodeOffsets:[[106099,27653]]}},{type:"Feature",id:"5323",properties:{name:"楚雄彝族自治州",cp:[101.6016,25.3619],childNum:10},geometry:{type:"Polygon",coordinates:["@@mÒXU`Wn@Xl±¦Uxnbl°knmKUxxVôUx°¼ôÒÈ°JlnÞKĠW°¦Vx²JVw_°¥@UV@@wnymknK¯I@²b°£V¥wUV¤nLkÆJÈwôô°l»Č¯ġVUU@@°ÝXl@U»°Å@U¯@w±¯VmUUlm@mÑnIVyUwmak£Vwm±@Çw@n@UxkwlÇnLmkÅ@±kka@kóJV¯Ç»U£lw¯Xalbl¥¯UX@aUaÈL@ÇVIVkaU¯mmakLWkUJ¯Umxn@kUx¯xmWÅīÝkkbŤbkxWmXwWk¯wKkLŤċń@¤óĬU²@@lk¯VmU¯¼@xV@k°l°kbU°nmVnU@°UVèÞÆbUÒÞnU¦V¼lô@Vl"],encodeOffsets:[[103433,26196]]}},{type:"Feature",id:"5329",properties:{name:"大理白族自治州",cp:[99.9536,25.6805],childNum:12},geometry:{type:"Polygon",coordinates:["@@lbKVIUa@²m@bxôÒÜxXLmbnl@K°¼kUôxôlV¦nJUÆnm@xÆwbXÆôôLUVwôK@wlmaVw@WknmIUmlnJla@_@kÝmKUaÑm¯Xw°aUaVl»²JVbÆJkôĶĀ²VVkmbVwUówVwnLlmk¯maVw²¥Wk@XmV_WnÑUk@kó»UV¥ÝmVÑÅaÝUçV@¯VUmn¯mVlak¯l¯U@@wğWé¯@¯xÝw¯¯Jċa¯U¥mLU¤bÞȤbÇLWUwmIUVW¼kb`UVb¯L±ĊÛkÿÝKkwKţêUĉþÈV¯ÞVbU°KVk²ÝmImV@kmUkVxm¯KXÈķJU¦V°ULWxL@môb@bkx±LnVUVLnkÜWnwlLŃmW@kkJU_VWĊÞ"],encodeOffsets:[[101408,26770]]}},{type:"Feature",id:"5309",properties:{name:"临沧市",cp:[99.613,24.0546],childNum:8},geometry:{type:"Polygon",coordinates:["@@xĢl`²X°Vx@x°Þ°KXağUÑWbnIl`X²°bxl°V@xVxk¦mbl@xXVÆzX¤Æk°kx@lźêlaX»VUnJVxXÈKaÝȣaV£nKV¦°Čb°I°n»ÆÑV¯nWn@ÿXÅWWn¹ġōn»ÛUaUVUww@w°ó¥@z±@ř¯@kUwlk£±aĵ¯Uĵ¦±±@bó±VÝ@ó¤w¯I@mÅóm±X¯IólK@°UllbzkKlln@@ÔºUmVk²ôÒxŎUVóLbmÈnmbnlax@z@Ʀk"],encodeOffsets:[[101251,24734]]}},{type:"Feature",id:"5334",properties:{name:"迪庆藏族自治州",cp:[99.4592,27.9327],childNum:3},geometry:{type:"Polygon",coordinates:["@@WXw@akk@yk°īX¥Uóķ¯w@n»UaVaUÛ¯mV¼kÞċô@n¯xÛÒmV¯Ô@x@kwmÅa@UaݯVÅyVa@ÿn»ÝVmankmmÞÅô@n£±ğzÇmU¦VmnÜmbn@°nV@xmzÅ@mºV¦k°ln¤¼õôn@xkÆIUxU@Ť¦VmVkmkXW¤XzVx@Æx¼Þ¯b@lVĸÞVm¼Xm¦VÞ@ƹVón¥ÆKnKX¯x@èĊȱłXaÆxnlV@UÛlȻkğV¥m²ljmÅÞĕƒƛm°ÆmX¤mznÆV¦ÞVVb°bnÞWbn°l@VÈ@VĵĊ±@óInxÆw¥@£ÞW¯ĸ£UUKk±akkkbmWmÈķaÆÇUÈÆW@wmknmU¯"],encodeOffsets:[[102702,28401]]}},{type:"Feature",id:"5306",properties:{name:"昭通市",cp:[104.0955,27.6031],childNum:11},geometry:{type:"Polygon",coordinates:["@@mnK@wmUÅ¥móXǓŏmX@VmL@xţnk@mlUŻÒğŋ@L@mmLkm@bXÅW¼ka¯lÇŹ¯aÇ»ÝÝ_@m@@a@UklwUm@ak@bUmbmbV¯ĕUaVwÅaĉVmým¯xUk@k¥VUX¤VÈm`@ńÇÜ@ĀknĔkƞÆĠÞUVôƆÞI@UxƦnl@ĊĊnxUÒ°¦Vb¯WUnWIml@xnUbô¤¼ÈxlI»KV@ÈÔJkUĖ±ÆVb@nVÜVUVLwĠlknĠ@nx°¥Æ²mUw@mmÅUl¯UÑÑUmLllIl±@VkwW@w°@U»kUóI°»ĢÑL`nUĠ²lmbôV@nJUxƦX¦l@ŎUV@lVKVÅV£UaÞUnW@¯VU@ó"],encodeOffsets:[[107787,28244]]}},{type:"Feature",id:"5301",properties:{name:"昆明市",cp:[102.9199,25.4663],childNum:11},geometry:{type:"Polygon",coordinates:["@@n@VkVUn²°@x°V@¯ÆV¼k@WÞ¯@@VVUĢċ°k¼VĊx¤Ōx°mVkÑÈL°x°X°VmĊLVxUĖ°bX¦VW@kȯlkn@¥ln@»°Ñ¯VmlLUwVK@V@ka@lmXbUlVlkÈx@LVaVVwnmm@km@mIVaÝ@XVUݯU@Ý£k»K@aUwkKV_¥a@alU@nz°aVÈ@@±lÛk@wVakm@Ñ¥az@XxÆW@ÛX@m@y@aWw@kōĉJlbVJzţÆUwVkmWkým@UlU@b¯wVºUVUêĠXUaUbVĊUWXUmkKWnUUUVVVÝ@kk±¯Lk±WkXlVkl@wXbmLVUIVmk@Ubma@kkaVKUkmlXLWnJ¯ÒĊ°@zkºlLUŤn@@nô@lÆnmKkÈlxVw@@mÈx@n²Uxl¤nbVxUzmJÒn"],encodeOffsets:[[104828,25999]]}},{type:"Feature",id:"5307",properties:{name:"丽江市",cp:[100.448,26.955],childNum:5},geometry:{type:"Polygon",coordinates:["@@l@@w°ÓUnÜÑ°w@mČóÝlU»n°VÜUbVbm¼@°xôĸVW¦¯Ĭl@zll@bWxXaX@ÆĠÆaXwl@XaƦn¼Jn@mnKW¯È»V¯°akVanXVwl@VyUĕVUbÈīlaUk°k¯l²VUkƛô@I@mVwĊaVakaÆbUVLaXIWKUwaWÑÅKUaVk°@Uw¯¥XğÝLkm¯IÇóѯ»anUl±UĵÿlóÅIaU±Ik¼UVb¯bWxn°ÒVbnLlÞ@@`kbmIkVnJmnXl@Uxbkn@xóLUxVKóóÅWaÅxw@nÅmVôXLlVU¤b¦m¼@ĀbUzUÆ°ÞVb@Æbnx"],encodeOffsets:[[101937,28227]]}},{type:"Feature",id:"5328",properties:{name:"西双版纳傣族自治州",cp:[100.8984,21.8628],childNum:3},geometry:{type:"Polygon",coordinates:["@@l²°nÒlxÞ@nWlLĸnbV¤V¦kbVV¦nax°Vôa@b@lôXlWUVXČKlmU@bWXXÜ°LÈa°LnU°ÞnÑġ°lnba¯¯KWó@kmK@UĉV@k°VV¹a@y_ċl_nÓlL@anI@óWl£VUlkĕlKVwU@kVam¯ÅL@bÝk@VnUbÇbÝwÅ@ċ¥¯lk¼ÅÒ°b@¦nlUn@ÇVmÆbWôU@ÝÅōm¯aUmkWWw@±n¯UèaL¯mLkwl@°mnÈÒ¯ów@VxĀU¤°Į°Xl"],encodeOffsets:[[102376,22579]]}},{type:"Feature",id:"5305",properties:{name:"保山市",cp:[99.0637,24.9884],childNum:5},geometry:{type:"Polygon",coordinates:["@@X°Il@¦È¼m¼ÞaÞÅlÈxV¼lVôÈÆlLޣȺlkUUw¯UĕVwĊ@n¦mlnVĸIWÇ°LnUwlVn@lnUnJÞl±U¯LVUa°ÝUÇĊýVŤéLlxÞLĀÜl²ĉ°KUaV_Źé@klw¯lÅW£ÅyUW@wknal¥Uw@wUk¯w¯aW±k_mJaXVÒĠWb¯L¯Ý@wwU¯±Wk_ġwwōKmb@¤bk°lĖôUJVnÅlťU¯°VbnbWxXmÞWUĀLyWzÛKmbUxVKknÝkVĀċ¤Ux@¯m@¦"],encodeOffsets:[[100440,25943]]}},{type:"Feature",id:"5304",properties:{name:"玉溪市",cp:[101.9312,23.8898],childNum:9},geometry:{type:"Polygon",coordinates:["@@lL°xXlWxXnlwaţlaÞlÆĬnX°wVwl@mnw°VVIXllKbnnV°lbUUJ@ÈÇKVb@bW°Vk¦kaWb°kxV¤È¼U°ôI@llbl²@@ó@mm@VţkKl¹@yĉ¯°ÑIXmWKnklVULlb@lnbVal@UnVJUnKWax@lkkUlW²XlK°l²@lÞUUUVVVXmlLVnXWVUĉVaVbWğVéUVU¹W»aVaaWX_U¥nÇķ¯@alUnÇUyk@@wW@kbW¦UKÝwUmmLUnVxUVVlk¯mmnmkÇaŤ¯I@l@@aĉw°ĕmUL±kÆéXÜÛ@yÈç@ÇġÝķXmmÝVÅlmnkbmWkb@nl@nm¯VxkJmUJml¯°makVVnV¦WWmnl@xmnlI¤nxUVUmX@b@zl@¦Ýþ"],encodeOffsets:[[103703,24874]]}},{type:"Feature",id:"5333",properties:{name:"怒江傈僳族自治州",cp:[99.1516,26.5594],childNum:4},geometry:{type:"Polygon",coordinates:["@@WyX£lWlnnUU¥@ţVVwJlÅ@wmöó»£kml¯U¥n¹Æ@ny@wmU@¯mnamÛnUV¥ÈnĠy²m¤@ÆónÝnmlnbÞU¥aV£kUKWómIU¥ókwVól»¯Lk@mnaWKÛwóÑw@a±n@VbUJLkaÝXĉUV`lI@lnXÆƑkKmxÛXmlUKVmU²Klw@aaó@nKXwVKU¯V¥mUnkm¥ĉ@UxVĖ°VxVklmÞkKWĀkVWnl°Lnm@°UxlV@nk¦JVÈ°VÒ@nX°@ÆlUômlnô²nxmłnVV¯x@Èm°XblVUl°@xkXU¤WXXWXÆmkÅJmÞw±bxUīkKmÅVUĖÝèVkx@lXlnk¤LkĖk¦xUL°¯Ė@LnK@b°xVI¥Ua°Ñ@»nm@¹KŎÞÈWln²n"],encodeOffsets:[[101071,28891]]}},{type:"Feature",id:"5331",properties:{name:"德宏傣族景颇族自治州",cp:[98.1299,24.5874],childNum:5},geometry:{type:"Polygon",coordinates:["@@¥n@°@VwČ£ÿUlÞlmULVwnaÜLXyzKVÿXÝnWXwmaUa°¯VŦÆkUmVIókĕl¯a@£nama@¯m¯ó@óyţbġkÅm±ÛammVkLwU`Wk@VkUmÅlUUKmbkkUVUw¦ó°¼bn°ô¦lºz@x¯@U°nU¤ţU°VƆ@ÈmlnzÞl°¦ÆaxUxLkxWƒn@²ŰW@°ÈXl°Llx"],encodeOffsets:[[100440,25943]]}}],UTF8Encoding:!0}}),i("echarts/util/mapData/geoJson/zhe_jiang_geo",[],function(){return{type:"FeatureCollection",features:[{type:"Feature",id:"3311",properties:{name:"丽水市",cp:[119.5642,28.1854],childNum:9},geometry:{type:"Polygon",coordinates:["@@@VbVl@XnUXKV@¦nxlUXVnKVmnLUV@bn¤lLXK²`nnlJXIVJIVnn°KnnVll@VLXWV@UkVaVKzV@VVaUK@U»VUl@@WnUU@wVLn@Vwl@XW°LVbn@VU@Xl`@XnKVbkl@XVJlUnlVxlL@lnXl@VUnV°°@aUVLXblWVXn@VVUV@L¤VLVUVbnalLUUVX_laVaWVzXKV@@a@KUmImmXama@kU@yVIUKaVa@kXK@aWU@VIUmW@kkVmU@VwUa@K@k@U`@kUKVk@UV@VaUm²Vy@klUUWUkVmUa@_KVaXaXmU@mUlWkaUX@mmkL@wJnVVÅbWKXa@@I@aJUUÇ@VULW@akLmb@K@aXXw@mVmUVkUy@£@aU@@VkUWm@kUKXUWU_mW@wkkmJUUkLWWUXW@IkJ@k@mW_kÓ_UlLm@I@aUa¯m@ka¯LUJ@mVVxUba@LUKkXbm@Uak@@a@Um`IUbUJ@nUVW@@LnVV@lUbVlUX@`@blXklWUmXlm¦U@@V¯bml@@nUb@llnn@VbX@lV@UVULmU@JVnbVbkbVWxU@@nUVk@"],encodeOffsets:[[121546,28992]]}},{type:"Feature",id:"3301",properties:{name:"杭州市",cp:[119.5313,29.8773],childNum:6},geometry:{type:"Polygon",coordinates:["@@X@l°KXXlWb@²`bIX`l@@bWl@n@VnLUV@V@°¦@l@XVlU@@xVbUb@Vkb@@XVJVzJ@LÞ@VmLUxUJ@LUVxbxXUl@VaÈwbaÞa@Vl@XUVx@V@VLlbnVal@lbVnnLnKnL@VlbVJXalIb@KUU@mVInJUVl@xUVLnU@UÞaV@lkV@UanKL@UlKVUnbÆmn@@nUlVnVJl@@UXUL@WVIVJVxVLXV@IÜKnbn@V¥V@@I@y°b@UUwnk°ÆƨVlUçXm£aÇIkV@WV@@aWIUWUIkb@WW@UnK@UU@kaWVkVIVVnU@UWVUV@VmVkKkWIkVWaULU`UImJUImmU@wmwUVIUWVkUamaU@mVkb@KVU@aVU@anKULVJU@kÛUJUVkkVakU@aVwkW@UWkXmWaULUaUK@XJUUmVU@UVUkJ@ImwmKU@k@lUW@@akKmkamIkWl_UwVm@UkaVUUa@UamakbWlkL@aUalU@mkL@U@UlmK@XkKm@Ýakb@xnXb`nUUU@U@wU@@mKkkV¯U@lULUbVbUb@Va@LºÝb@bLmKx@VUL@bk@mxULWl"],encodeOffsets:[[121185,30184]]}},{type:"Feature",id:"3303",properties:{name:"温州市",cp:[120.498,27.8119],childNum:9},geometry:{type:"Polygon",coordinates:["@@ll@xnXV`VXWVL@lXnlV@UV@@b@¤VzUlnVU@nWxW@b@LnalK@bXVKUÈ@VVI@b@J@WbXLÆaUUmI@xlKnn@VWlbkXV@nVWnWbUbL@`VbUnVlVXkV@lUz±VnUbU@@VUlVL@l_@V@l@LVbV@XLV`VÈlxn@lU@aaVVk@XJ@nl@@LU`°LVbL°a@aUVy@anI@aanV@²wÜJX@VVV°kna@WVkaWwU@m@kaUĕÝÝŤnÈaaóI»@±XWkUķ@kV±kwUkWwUÝ»ÛkɳlImaUaWóXÿǬkUnWVmmkKţnŏÞğlUlUx@XWbV@JkX°mb@VULVxUVk@@LWWk@WIkUkJmUkVmI@y@UakLmU@mUUUkaVk@mK@UlUU@UmKmbUUUJ@n@KVLUL@VkJWXX`mnULWlkL@JVLVb@°kxkU@LVV@VLV`UL@VUX"],encodeOffsets:[[122502,28334]]}},{type:"Feature",id:"3302",properties:{name:"宁波市",cp:[121.5967,29.6466],childNum:6},geometry:{type:"Polygon",coordinates:["@@Ċ¦ĸĀ°nXÞVKkƨƑźÿ°»n@wô¥ÜbU°ÆXÞWóçĉݱIUÈ¥@U°wÆ»²mm_@aXVKÞVlk@akk̅@£X»VwÆXWa¯aȗbKƽŰĊxLók@@¯nKUL@xkLÑkWULUUmJUXVU@mUX¯@V`mbXbV@@nn¤WXx@kJ@nVVUVl²UbÝVUVk@Wx@V@VXzmlaL@VlLU`XUVVVUnl@VbnJlnUVVnlUKkbmnnVxlJnxmbU@UL@KUVX@xmb@lk@mnVVUè"],encodeOffsets:[[123784,30977]]}},{type:"Feature",id:"3309",properties:{name:"舟山市",cp:[122.2559,30.2234],childNum:3},geometry:{type:"Polygon",coordinates:["@@lƒʠþÆVĢLĊǬXĊÜXôVÑÆwlƏÈóVĭVǓ@ĉwɛkmK@ĉXīWaĉUĵÝm¯ĉwĉ±±nż¯x@VǦV²JĊÞôèÝXÅW¯VÛaó¦@xm¯¼ŹĀ"], +encodeOffsets:[[124437,30983]]}},{type:"Feature",id:"3310",properties:{name:"台州市",cp:[121.1353,28.6688],childNum:7},geometry:{type:"Polygon",coordinates:["@@lVIVWVz@bXJl@Xal@°nLll@nVxnVK@UJVb¦°k`UIWJXnÆ@bUJXl@lbWn@UzVV@bVVmVnnJVXnabKUKnUVVUnVLlKVLXaJm£@mU@WanaU_°@VWnV@UVWnIVVVKlXÒlK@wVKL°m@l@ôKwĉƾůUl£@»UVkm@ƅUaÛIŏmUk@mw@a£Wk@ţIm±@ankôUlaUUw¯ōabÇbţmÞÞVĖbl@@nVXxbUl@Xmb¯lUUUW@ÛI±xU@mb@bmJ@bUzV@b¯bKUa¯KV_@Kk@@mWI@lUUb@bkVm@kwUÇU_WKU@Ux@VUnllX@VnJ@UXV@bWL@lUbbVLUJ@zV@lnbWbnnnJV@L"],encodeOffsets:[[123312,29526]]}},{type:"Feature",id:"3307",properties:{name:"金华市",cp:[120.0037,29.1028],childNum:8},geometry:{type:"Polygon",coordinates:["@@nbVb@VbUVlb@VUnVxk`lXnJlbnlL@bX@V@klV@nLnx@JlIVU@VUVnVVI@WVLVbVKXbWnXl@VlXUxb@lVUbllVUIÜVnalKX@@bV@@aUUlUwUw@naWWUVaUUaVbLlxXJVk°UlkU¥@ka@LVlXLVlVWznVn@lxJl_@WX_@mVaa@alU@kVVnaKVLlKb@UUaVabnUWmXU@k@yVI@aÅWmXIVJl_¯¥UaVI@LmUUw@mkkmK¯k@Wbk@WI@aUyUXJkU@bU@WLUyXUbkbW`UVVkKmbUaVUUK£@KVUUUm@UWkXWaUKV@b¯¯mUV@UkmW@kkKwUmkkVUI@WlkUamL@Wk_W@UVm@Ua¯KWXk@Uxm@UK@xVmV@Xk@UVV¼@VLUbUU@yULUbVlU@@XlVUVVbU@lXXVW@XUVl@@VUVÈn@VVU@lVa@UmL@`X@`WL@VUX@lUL@xlx"],encodeOffsets:[[122119,29948]]}},{type:"Feature",id:"3308",properties:{name:"衢州市",cp:[118.6853,28.8666],childNum:5},geometry:{type:"Polygon",coordinates:["@@XkVKnwl@@aVK@UwnLK@aÞa¹@Kb@UVaUaVaVK@k°VUllnL@V@xV@V@VVm_Wam@wlaÞbn@lL@WnLk@V@VlK@nkVVb@blKXklakw@wVK@kVW@UXK@_W@_nKV@Ub@kVUUm@ÇVU@Uk@VU@WUXWW@kVUaVUkU@WWXUKk@Ukmm¯LmmUJUIWJkImm_±WLkKm£@aVUmKUnLmWUkVmw@¥ULVWm@WUka@UmmLmm@@bUX@@WUIm@UVUK@UVUUUVVJmb@bXnmV¼nnn¦mJUVLV@VW@UzUlVnUbl`UnVl@XU@kl@bmÈUxVk@@J@¼W@ÅaVVnzmV@WJk@kWJ@lXbWbXxmVnlLXb@°lKVXnWbWVXmbV@XlbI@Kn@@x@VLlm"],encodeOffsets:[[121185,30184]]}},{type:"Feature",id:"3306",properties:{name:"绍兴市",cp:[120.564,29.7565],childNum:6},geometry:{type:"Polygon",coordinates:["@@x@VnnVJnIVJV_VKXblUXJllLUUnU@UVVX@mVUUUJlXUlbV@@VLVmX@@XlaVJVXXJ@b@XU@lUJÈb¤ŌJçVUUnml@@kna@wWVU@LVKV@namwkIUwmnmlaVLkUmVUkmmIUak@VmUUVUWV_kK@UKbnkWyU@@UXwl@VUÞUVak±VUUU@mlI@wXWIWbUKkLUKVmUUmVVLLambUWmIUmnUU@aUUVym@Xkak@W@z@lWVXnmVaUbVb@VakLUKLmbUU@lkV@bbUb@nW`@Xk`Ikwm@mUXyUUkWKUk@Kb@lV¦klV¯UlWIkwKUabVVUbVXXmb@VxxkVVV@bU@@aW@kLmb@lVUIVKmL@bUV@bUV@LalnUV@nbVbUlVXJVUnx"],encodeOffsets:[[122997,30561]]}},{type:"Feature",id:"3304",properties:{name:"嘉兴市",cp:[120.9155,30.6354],childNum:6},geometry:{type:"Polygon",coordinates:["@@@blIX@@VÜVUnn@lklKnI°Þl`²LVKVbnbVaVLUVn@W¦@VkVVb@VI`@blLnLaX@VVb@U@XlVa@@kVaUKV»U_lWXU@albk@VllnLVKn@@UVIUw@y°IVVXU@VV@lwm@wVkƾaJLkΡƧƒlLÝUmW¯ķÿĉ¥IŋWnèkVƧU¯ÅmlVx@V¯az@@JU@U¦m@@nVmn@VLV"],encodeOffsets:[[123233,31382]]}},{type:"Feature",id:"3305",properties:{name:"湖州市",cp:[119.8608,30.7782],childNum:4},geometry:{type:"Polygon",coordinates:["@@kLlkm@VmÛU@UW@kJ@aUK@UnmmU@maÛL@JWUUKUwUIUJ@XKWV@Vk@UIUmVk@mm@ÅnmaUVkL@VKmLVbU@klU@ÝbV@mVUKV@wUkVmIUJ@nVV@LakJWbUIka@UmKmLKmmUUVk@@nmLX`WXUV@@nUlkmlU@UbxVVIlVnn@@nUÒ@°n@@xmb@VbnV@@b@`@L@L@x@blVklVbnnV@aXb°VlU@Wb°ULXWVUVVwÈwÜ»ĸaĠnUVw²X@V@lVU@wlaUUVm@knUV"],encodeOffsets:[[123379,31500]]}}],UTF8Encoding:!0}}),i("echarts/chart/gauge",["require","./base","../util/shape/GaugePointer","zrender/shape/Text","zrender/shape/Line","zrender/shape/Rectangle","zrender/shape/Circle","zrender/shape/Sector","../config","../util/ecData","../util/accMath","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../util/shape/GaugePointer"),a=e("zrender/shape/Text"),o=e("zrender/shape/Line"),r=e("zrender/shape/Rectangle"),s=e("zrender/shape/Circle"),l=e("zrender/shape/Sector"),h=e("../config");h.gauge={zlevel:0,z:2,center:["50%","50%"],clickable:!0,legendHoverLink:!0,radius:"75%",startAngle:225,endAngle:-45,min:0,max:100,splitNumber:10,axisLine:{show:!0,lineStyle:{color:[[.2,"#228b22"],[.8,"#48b"],[1,"#ff4500"]],width:30}},axisTick:{show:!0,splitNumber:5,length:8,lineStyle:{color:"#eee",width:1,type:"solid"}},axisLabel:{show:!0,textStyle:{color:"auto"}},splitLine:{show:!0,length:30,lineStyle:{color:"#eee",width:2,type:"solid"}},pointer:{show:!0,length:"80%",width:8,color:"auto"},title:{show:!0,offsetCenter:[0,"-40%"],textStyle:{color:"#333",fontSize:15}},detail:{show:!0,backgroundColor:"rgba(0,0,0,0)",borderWidth:0,borderColor:"#ccc",width:100,height:40,offsetCenter:[0,"40%"],textStyle:{color:"auto",fontSize:30}}};var m=e("../util/ecData"),V=e("../util/accMath"),U=e("zrender/tool/util");return t.prototype={type:h.CHART_TYPE_GAUGE,_buildShape:function(){var e=this.series;this._paramsMap={},this.selectedMap={};for(var t=0,i=e.length;i>t;t++)e[t].type===h.CHART_TYPE_GAUGE&&(this.selectedMap[e[t].name]=!0,e[t]=this.reformOption(e[t]),this.legendHoverLink=e[t].legendHoverLink||this.legendHoverLink,this._buildSingleGauge(t),this.buildMark(t));this.addShapeList()},_buildSingleGauge:function(e){var t=this.series[e];this._paramsMap[e]={center:this.parseCenter(this.zr,t.center),radius:this.parseRadius(this.zr,t.radius),startAngle:t.startAngle.toFixed(2)-0,endAngle:t.endAngle.toFixed(2)-0},this._paramsMap[e].totalAngle=this._paramsMap[e].startAngle-this._paramsMap[e].endAngle,this._colorMap(e),this._buildAxisLine(e),this._buildSplitLine(e),this._buildAxisTick(e),this._buildAxisLabel(e),this._buildPointer(e),this._buildTitle(e),this._buildDetail(e)},_buildAxisLine:function(e){var t=this.series[e];if(t.axisLine.show)for(var i,n,a=t.min,o=t.max-a,r=this._paramsMap[e],s=r.center,l=r.startAngle,h=r.totalAngle,V=r.colorArray,U=t.axisLine.lineStyle,d=this.parsePercent(U.width,r.radius[1]),p=r.radius[1],c=p-d,u=l,y=0,g=V.length;g>y;y++)n=l-h*(V[y][0]-a)/o,i=this._getSector(s,c,p,n,u,V[y][1],U,t.zlevel,t.z),u=n,i._animationAdd="r",m.set(i,"seriesIndex",e),m.set(i,"dataIndex",y),this.shapeList.push(i)},_buildSplitLine:function(e){var t=this.series[e];if(t.splitLine.show)for(var i,n,a,r=this._paramsMap[e],s=t.splitNumber,l=t.min,h=t.max-l,m=t.splitLine,V=this.parsePercent(m.length,r.radius[1]),U=m.lineStyle,d=U.color,p=r.center,c=r.startAngle*Math.PI/180,u=r.totalAngle*Math.PI/180,y=r.radius[1],g=y-V,b=0;s>=b;b++)i=c-u/s*b,n=Math.sin(i),a=Math.cos(i),this.shapeList.push(new o({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{xStart:p[0]+a*y,yStart:p[1]-n*y,xEnd:p[0]+a*g,yEnd:p[1]-n*g,strokeColor:"auto"===d?this._getColor(e,l+h/s*b):d,lineType:U.type,lineWidth:U.width,shadowColor:U.shadowColor,shadowBlur:U.shadowBlur,shadowOffsetX:U.shadowOffsetX,shadowOffsetY:U.shadowOffsetY}}))},_buildAxisTick:function(e){var t=this.series[e];if(t.axisTick.show)for(var i,n,a,r=this._paramsMap[e],s=t.splitNumber,l=t.min,h=t.max-l,m=t.axisTick,V=m.splitNumber,U=this.parsePercent(m.length,r.radius[1]),d=m.lineStyle,p=d.color,c=r.center,u=r.startAngle*Math.PI/180,y=r.totalAngle*Math.PI/180,g=r.radius[1],b=g-U,f=0,k=s*V;k>=f;f++)f%V!==0&&(i=u-y/k*f,n=Math.sin(i),a=Math.cos(i),this.shapeList.push(new o({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{xStart:c[0]+a*g,yStart:c[1]-n*g,xEnd:c[0]+a*b,yEnd:c[1]-n*b,strokeColor:"auto"===p?this._getColor(e,l+h/k*f):p,lineType:d.type,lineWidth:d.width,shadowColor:d.shadowColor,shadowBlur:d.shadowBlur,shadowOffsetX:d.shadowOffsetX,shadowOffsetY:d.shadowOffsetY}})))},_buildAxisLabel:function(e){var t=this.series[e];if(t.axisLabel.show)for(var i,n,o,r,s=t.splitNumber,l=t.min,h=t.max-l,m=t.axisLabel.textStyle,U=this.getFont(m),d=m.color,p=this._paramsMap[e],c=p.center,u=p.startAngle,y=p.totalAngle,g=p.radius[1]-this.parsePercent(t.splitLine.length,p.radius[1])-5,b=0;s>=b;b++)r=V.accAdd(l,V.accMul(V.accDiv(h,s),b)),i=u-y/s*b,n=Math.sin(i*Math.PI/180),o=Math.cos(i*Math.PI/180),i=(i+360)%360,this.shapeList.push(new a({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{x:c[0]+o*g,y:c[1]-n*g,color:"auto"===d?this._getColor(e,r):d,text:this._getLabelText(t.axisLabel.formatter,r),textAlign:i>=110&&250>=i?"left":70>=i||i>=290?"right":"center",textBaseline:i>=10&&170>=i?"top":i>=190&&350>=i?"bottom":"middle",textFont:U,shadowColor:m.shadowColor,shadowBlur:m.shadowBlur,shadowOffsetX:m.shadowOffsetX,shadowOffsetY:m.shadowOffsetY}}))},_buildPointer:function(e){var t=this.series[e];if(t.pointer.show){var i=t.max-t.min,a=t.pointer,o=this._paramsMap[e],r=this.parsePercent(a.length,o.radius[1]),l=this.parsePercent(a.width,o.radius[1]),h=o.center,V=this._getValue(e);V=V<t.max?V:t.max;var U=(o.startAngle-o.totalAngle/i*(V-t.min))*Math.PI/180,d="auto"===a.color?this._getColor(e,V):a.color,p=new n({zlevel:t.zlevel,z:t.z+1,clickable:this.query(t,"clickable"),style:{x:h[0],y:h[1],r:r,startAngle:o.startAngle*Math.PI/180,angle:U,color:d,width:l,shadowColor:a.shadowColor,shadowBlur:a.shadowBlur,shadowOffsetX:a.shadowOffsetX,shadowOffsetY:a.shadowOffsetY},highlightStyle:{brushType:"fill",width:l>2?2:l/2,color:"#fff"}});m.pack(p,this.series[e],e,this.series[e].data[0],0,this.series[e].data[0].name,V),this.shapeList.push(p),this.shapeList.push(new s({zlevel:t.zlevel,z:t.z+2,hoverable:!1,style:{x:h[0],y:h[1],r:a.width/2.5,color:"#fff"}}))}},_buildTitle:function(e){var t=this.series[e];if(t.title.show){var i=t.data[0],n=null!=i.name?i.name:"";if(""!==n){var o=t.title,r=o.offsetCenter,s=o.textStyle,l=s.color,h=this._paramsMap[e],m=h.center[0]+this.parsePercent(r[0],h.radius[1]),V=h.center[1]+this.parsePercent(r[1],h.radius[1]);this.shapeList.push(new a({zlevel:t.zlevel,z:t.z+(Math.abs(m-h.center[0])+Math.abs(V-h.center[1])<2*s.fontSize?2:1),hoverable:!1,style:{x:m,y:V,color:"auto"===l?this._getColor(e):l,text:n,textAlign:"center",textFont:this.getFont(s),shadowColor:s.shadowColor,shadowBlur:s.shadowBlur,shadowOffsetX:s.shadowOffsetX,shadowOffsetY:s.shadowOffsetY}}))}}},_buildDetail:function(e){var t=this.series[e];if(t.detail.show){var i=t.detail,n=i.offsetCenter,a=i.backgroundColor,o=i.textStyle,s=o.color,l=this._paramsMap[e],h=this._getValue(e),m=l.center[0]-i.width/2+this.parsePercent(n[0],l.radius[1]),V=l.center[1]+this.parsePercent(n[1],l.radius[1]);this.shapeList.push(new r({zlevel:t.zlevel,z:t.z+(Math.abs(m+i.width/2-l.center[0])+Math.abs(V+i.height/2-l.center[1])<o.fontSize?2:1),hoverable:!1,style:{x:m,y:V,width:i.width,height:i.height,brushType:"both",color:"auto"===a?this._getColor(e,h):a,lineWidth:i.borderWidth,strokeColor:i.borderColor,shadowColor:i.shadowColor,shadowBlur:i.shadowBlur,shadowOffsetX:i.shadowOffsetX,shadowOffsetY:i.shadowOffsetY,text:this._getLabelText(i.formatter,h),textFont:this.getFont(o),textPosition:"inside",textColor:"auto"===s?this._getColor(e,h):s}}))}},_getValue:function(e){return this.getDataFromOption(this.series[e].data[0])},_colorMap:function(e){var t=this.series[e],i=t.min,n=t.max-i,a=t.axisLine.lineStyle.color;a instanceof Array||(a=[[1,a]]);for(var o=[],r=0,s=a.length;s>r;r++)o.push([a[r][0]*n+i,a[r][1]]);this._paramsMap[e].colorArray=o},_getColor:function(e,t){null==t&&(t=this._getValue(e));for(var i=this._paramsMap[e].colorArray,n=0,a=i.length;a>n;n++)if(i[n][0]>=t)return i[n][1];return i[i.length-1][1]},_getSector:function(e,t,i,n,a,o,r,s,h){return new l({zlevel:s,z:h,hoverable:!1,style:{x:e[0],y:e[1],r0:t,r:i,startAngle:n,endAngle:a,brushType:"fill",color:o,shadowColor:r.shadowColor,shadowBlur:r.shadowBlur,shadowOffsetX:r.shadowOffsetX,shadowOffsetY:r.shadowOffsetY}})},_getLabelText:function(e,t){if(e){if("function"==typeof e)return e.call(this.myChart,t);if("string"==typeof e)return e.replace("{value}",t)}return t},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},U.inherits(t,i),e("../chart").define("gauge",t),t}),i("echarts/util/shape/GaugePointer",["require","zrender/shape/Base","zrender/tool/util","./normalIsCover"],function(e){function t(e){i.call(this,e)}var i=e("zrender/shape/Base"),n=e("zrender/tool/util");return t.prototype={type:"gauge-pointer",buildPath:function(e,t){var i=t.r,n=t.width,a=t.angle,o=t.x-Math.cos(a)*n*(n>=i/3?1:2),r=t.y+Math.sin(a)*n*(n>=i/3?1:2);a=t.angle-Math.PI/2,e.moveTo(o,r),e.lineTo(t.x+Math.cos(a)*n,t.y-Math.sin(a)*n),e.lineTo(t.x+Math.cos(t.angle)*i,t.y-Math.sin(t.angle)*i),e.lineTo(t.x-Math.cos(a)*n,t.y+Math.sin(a)*n),e.lineTo(o,r)},getRect:function(e){if(e.__rect)return e.__rect;var t=2*e.width,i=e.x,n=e.y,a=i+Math.cos(e.angle)*e.r,o=n-Math.sin(e.angle)*e.r;return e.__rect={x:Math.min(i,a)-t,y:Math.min(n,o)-t,width:Math.abs(i-a)+t,height:Math.abs(n-o)+t},e.__rect},isCover:e("./normalIsCover")},n.inherits(t,i),t}),i("echarts/chart/funnel",["require","./base","zrender/shape/Text","zrender/shape/Line","zrender/shape/Polygon","../config","../util/ecData","../util/number","zrender/tool/util","zrender/tool/color","zrender/tool/area","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Line"),o=e("zrender/shape/Polygon"),r=e("../config");r.funnel={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,x:80,y:60,x2:80,y2:60,min:0,max:100,minSize:"0%",maxSize:"100%",sort:"descending",gap:0,funnelAlign:"center",itemStyle:{normal:{borderColor:"#fff",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:10,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0},labelLine:{show:!0}}}};var s=e("../util/ecData"),l=e("../util/number"),h=e("zrender/tool/util"),m=e("zrender/tool/color"),V=e("zrender/tool/area");return t.prototype={type:r.CHART_TYPE_FUNNEL,_buildShape:function(){var e=this.series,t=this.component.legend;this._paramsMap={},this._selected={},this.selectedMap={};for(var i,n=0,a=e.length;a>n;n++)if(e[n].type===r.CHART_TYPE_FUNNEL){if(e[n]=this.reformOption(e[n]),this.legendHoverLink=e[n].legendHoverLink||this.legendHoverLink,i=e[n].name||"",this.selectedMap[i]=t?t.isSelected(i):!0,!this.selectedMap[i])continue;this._buildSingleFunnel(n),this.buildMark(n)}this.addShapeList()},_buildSingleFunnel:function(e){var t=this.component.legend,i=this.series[e],n=this._mapData(e),a=this._getLocation(e);this._paramsMap[e]={location:a,data:n};for(var o,r=0,s=[],h=0,m=n.length;m>h;h++)o=n[h].name,this.selectedMap[o]=t?t.isSelected(o):!0,this.selectedMap[o]&&!isNaN(n[h].value)&&(s.push(n[h]),r++);if(0!==r){for(var V,U,d,p,c=this._buildFunnelCase(e),u=i.funnelAlign,y=i.gap,g=r>1?(a.height-(r-1)*y)/r:a.height,b=a.y,f="descending"===i.sort?this._getItemWidth(e,s[0].value):l.parsePercent(i.minSize,a.width),k="descending"===i.sort?1:0,x=a.centerX,_=[],h=0,m=s.length;m>h;h++)if(o=s[h].name,this.selectedMap[o]&&!isNaN(s[h].value)){switch(V=m-2>=h?this._getItemWidth(e,s[h+k].value):"descending"===i.sort?l.parsePercent(i.minSize,a.width):l.parsePercent(i.maxSize,a.width),u){case"left":U=a.x;break;case"right":U=a.x+a.width-f;break;default:U=x-f/2}d=this._buildItem(e,s[h]._index,t?t.getColor(o):this.zr.getColor(s[h]._index),U,b,f,V,g,u),b+=g+y,p=d.style.pointList,_.unshift([p[0][0]-10,p[0][1]]),_.push([p[1][0]+10,p[1][1]]),0===h&&(0===f?(p=_.pop(),"center"==u&&(_[0][0]+=10),"right"==u&&(_[0][0]=p[0]),_[0][1]-="center"==u?10:15,1==m&&(p=d.style.pointList)):(_[_.length-1][1]-=5,_[0][1]-=5)),f=V}c&&(_.unshift([p[3][0]-10,p[3][1]]),_.push([p[2][0]+10,p[2][1]]),0===f?(p=_.pop(),"center"==u&&(_[0][0]+=10),"right"==u&&(_[0][0]=p[0]),_[0][1]+="center"==u?10:15):(_[_.length-1][1]+=5,_[0][1]+=5),c.style.pointList=_)}},_buildFunnelCase:function(e){var t=this.series[e];if(this.deepQuery([t,this.option],"calculable")){var i=this._paramsMap[e].location,n=10,a={hoverable:!1,style:{pointListd:[[i.x-n,i.y-n],[i.x+i.width+n,i.y-n],[i.x+i.width+n,i.y+i.height+n],[i.x-n,i.y+i.height+n]],brushType:"stroke",lineWidth:1,strokeColor:t.calculableHolderColor||this.ecTheme.calculableHolderColor||r.calculableHolderColor}};return s.pack(a,t,e,void 0,-1),this.setCalculable(a),a=new o(a),this.shapeList.push(a),a}},_getLocation:function(e){var t=this.series[e],i=this.zr.getWidth(),n=this.zr.getHeight(),a=this.parsePercent(t.x,i),o=this.parsePercent(t.y,n),r=null==t.width?i-a-this.parsePercent(t.x2,i):this.parsePercent(t.width,i);return{x:a,y:o,width:r,height:null==t.height?n-o-this.parsePercent(t.y2,n):this.parsePercent(t.height,n),centerX:a+r/2}},_mapData:function(e){function t(e,t){return"-"===e.value?1:"-"===t.value?-1:t.value-e.value}function i(e,i){return-t(e,i)}for(var n=this.series[e],a=h.clone(n.data),o=0,r=a.length;r>o;o++)a[o]._index=o;return"none"!=n.sort&&a.sort("descending"===n.sort?t:i),a},_buildItem:function(e,t,i,n,a,o,r,l,h){var m=this.series,V=m[e],U=V.data[t],d=this.getPolygon(e,t,i,n,a,o,r,l,h);s.pack(d,m[e],e,m[e].data[t],t,m[e].data[t].name),this.shapeList.push(d);var p=this.getLabel(e,t,i,n,a,o,r,l,h);s.pack(p,m[e],e,m[e].data[t],t,m[e].data[t].name),this.shapeList.push(p),this._needLabel(V,U,!1)||(p.invisible=!0);var c=this.getLabelLine(e,t,i,n,a,o,r,l,h);this.shapeList.push(c),this._needLabelLine(V,U,!1)||(c.invisible=!0);var u=[],y=[];return this._needLabelLine(V,U,!0)&&(u.push(c.id),y.push(c.id)),this._needLabel(V,U,!0)&&(u.push(p.id),y.push(d.id)),d.hoverConnect=u,p.hoverConnect=y,d},_getItemWidth:function(e,t){var i=this.series[e],n=this._paramsMap[e].location,a=i.min,o=i.max,r=l.parsePercent(i.minSize,n.width),s=l.parsePercent(i.maxSize,n.width);return(t-a)*(s-r)/(o-a)+r},getPolygon:function(e,t,i,n,a,r,s,l,h){var V,U=this.series[e],d=U.data[t],p=[d,U],c=this.deepMerge(p,"itemStyle.normal")||{},u=this.deepMerge(p,"itemStyle.emphasis")||{},y=this.getItemStyleColor(c.color,e,t,d)||i,g=this.getItemStyleColor(u.color,e,t,d)||("string"==typeof y?m.lift(y,-.2):y);switch(h){case"left":V=n;break;case"right":V=n+(r-s);break;default:V=n+(r-s)/2}var b={zlevel:U.zlevel,z:U.z,clickable:this.deepQuery(p,"clickable"),style:{pointList:[[n,a],[n+r,a],[V+s,a+l],[V,a+l]],brushType:"both",color:y,lineWidth:c.borderWidth,strokeColor:c.borderColor},highlightStyle:{color:g,lineWidth:u.borderWidth,strokeColor:u.borderColor}};return this.deepQuery([d,U,this.option],"calculable")&&(this.setCalculable(b),b.draggable=!0),new o(b)},getLabel:function(e,t,i,a,o,r,s,l,U){var d,p=this.series[e],c=p.data[t],u=this._paramsMap[e].location,y=h.merge(h.clone(c.itemStyle)||{},p.itemStyle),g="normal",b=y[g].label,f=b.textStyle||{},k=y[g].labelLine.length,x=this.getLabelText(e,t,g),_=this.getFont(f),L=i;b.position=b.position||y.normal.label.position,"inner"===b.position||"inside"===b.position||"center"===b.position?(d=U,L=Math.max(r,s)/2>V.getTextWidth(x,_)?"#fff":m.reverse(i)):d="left"===b.position?"right":"left";var W={zlevel:p.zlevel,z:p.z+1,style:{x:this._getLabelPoint(b.position,a,u,r,s,k,U),y:o+l/2,color:f.color||L,text:x,textAlign:f.align||d,textBaseline:f.baseline||"middle",textFont:_}};return g="emphasis",b=y[g].label||b,f=b.textStyle||f,k=y[g].labelLine.length||k,b.position=b.position||y.normal.label.position,x=this.getLabelText(e,t,g),_=this.getFont(f),L=i,"inner"===b.position||"inside"===b.position||"center"===b.position?(d=U,L=Math.max(r,s)/2>V.getTextWidth(x,_)?"#fff":m.reverse(i)):d="left"===b.position?"right":"left",W.highlightStyle={x:this._getLabelPoint(b.position,a,u,r,s,k,U),color:f.color||L,text:x,textAlign:f.align||d,textFont:_,brushType:"fill"},new n(W)},getLabelText:function(e,t,i){var n=this.series,a=n[e],o=a.data[t],r=this.deepQuery([o,a],"itemStyle."+i+".label.formatter");return r?"function"==typeof r?r.call(this.myChart,{seriesIndex:e,seriesName:a.name||"",series:a,dataIndex:t,data:o,name:o.name,value:o.value}):"string"==typeof r?r=r.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{a0}",a.name).replace("{b0}",o.name).replace("{c0}",o.value):void 0:o.name},getLabelLine:function(e,t,i,n,o,r,s,l,m){var V=this.series[e],U=V.data[t],d=this._paramsMap[e].location,p=h.merge(h.clone(U.itemStyle)||{},V.itemStyle),c="normal",u=p[c].labelLine,y=p[c].labelLine.length,g=u.lineStyle||{},b=p[c].label;b.position=b.position||p.normal.label.position;var f={zlevel:V.zlevel,z:V.z+1,hoverable:!1,style:{xStart:this._getLabelLineStartPoint(n,d,r,s,m),yStart:o+l/2,xEnd:this._getLabelPoint(b.position,n,d,r,s,y,m),yEnd:o+l/2,strokeColor:g.color||i,lineType:g.type,lineWidth:g.width}};return c="emphasis",u=p[c].labelLine||u,y=p[c].labelLine.length||y,g=u.lineStyle||g,b=p[c].label||b,b.position=b.position,f.highlightStyle={xEnd:this._getLabelPoint(b.position,n,d,r,s,y,m),strokeColor:g.color||i,lineType:g.type,lineWidth:g.width},new a(f)},_getLabelPoint:function(e,t,i,n,a,o,r){switch(e="inner"===e||"inside"===e?"center":e){case"center":return"center"==r?t+n/2:"left"==r?t+10:t+n-10;case"left":return"auto"===o?i.x-10:"center"==r?i.centerX-Math.max(n,a)/2-o:"right"==r?t-(a>n?a-n:0)-o:i.x-o;default:return"auto"===o?i.x+i.width+10:"center"==r?i.centerX+Math.max(n,a)/2+o:"right"==r?i.x+i.width+o:t+Math.max(n,a)+o}},_getLabelLineStartPoint:function(e,t,i,n,a){return"center"==a?t.centerX:n>i?e+Math.min(i,n)/2:e+Math.max(i,n)/2},_needLabel:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".label.show")},_needLabelLine:function(e,t,i){return this.deepQuery([t,e],"itemStyle."+(i?"emphasis":"normal")+".labelLine.show")},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},h.inherits(t,i),e("../chart").define("funnel",t),t}),i("echarts/chart/eventRiver",["require","./base","../layout/eventRiver","zrender/shape/Polygon","../component/axis","../component/grid","../component/dataZoom","../config","../util/ecData","../util/date","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondragend=function(){r.isDragend=!0},this.refresh(a)}var i=e("./base"),n=e("../layout/eventRiver"),a=e("zrender/shape/Polygon");e("../component/axis"),e("../component/grid"),e("../component/dataZoom");var o=e("../config");o.eventRiver={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,itemStyle:{normal:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0,position:"inside",formatter:"{b}"}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!0}}}};var r=e("../util/ecData"),s=e("../util/date"),l=e("zrender/tool/util"),h=e("zrender/tool/color");return t.prototype={type:o.CHART_TYPE_EVENTRIVER,_buildShape:function(){var e=this.series;this.selectedMap={},this._dataPreprocessing();for(var t=this.component.legend,i=[],a=0;a<e.length;a++)if(e[a].type===this.type){e[a]=this.reformOption(e[a]),this.legendHoverLink=e[a].legendHoverLink||this.legendHoverLink;var o=e[a].name||"";if(this.selectedMap[o]=t?t.isSelected(o):!0,!this.selectedMap[o])continue;this.buildMark(a),i.push(this.series[a])}n(i,this._intervalX,this.component.grid.getArea()),this._drawEventRiver(),this.addShapeList()},_dataPreprocessing:function(){for(var e,t,i=this.series,n=0,a=i.length;a>n;n++)if(i[n].type===this.type){e=this.component.xAxis.getAxis(i[n].xAxisIndex||0);for(var o=0,r=i[n].data.length;r>o;o++){t=i[n].data[o].evolution;for(var l=0,h=t.length;h>l;l++)t[l].timeScale=e.getCoord(s.getNewDate(t[l].time)-0),t[l].valueScale=Math.pow(t[l].value,.8)}}this._intervalX=Math.round(this.component.grid.getWidth()/40)},_drawEventRiver:function(){for(var e=this.series,t=0;t<e.length;t++){var i=e[t].name||"";if(e[t].type===this.type&&this.selectedMap[i])for(var n=0;n<e[t].data.length;n++)this._drawEventBubble(e[t].data[n],t,n)}},_drawEventBubble:function(e,t,i){var n=this.series,o=n[t],s=o.name||"",l=o.data[i],m=[l,o],V=this.component.legend,U=V?V.getColor(s):this.zr.getColor(t),d=this.deepMerge(m,"itemStyle.normal")||{},p=this.deepMerge(m,"itemStyle.emphasis")||{},c=this.getItemStyleColor(d.color,t,i,l)||U,u=this.getItemStyleColor(p.color,t,i,l)||("string"==typeof c?h.lift(c,-.2):c),y=this._calculateControlPoints(e),g={zlevel:o.zlevel,z:o.z,clickable:this.deepQuery(m,"clickable"),style:{pointList:y,smooth:"spline",brushType:"both",lineJoin:"round",color:c,lineWidth:d.borderWidth,strokeColor:d.borderColor},highlightStyle:{color:u,lineWidth:p.borderWidth,strokeColor:p.borderColor},draggable:"vertical",ondragend:this._ondragend};g=new a(g),this.addLabel(g,o,l,e.name),r.pack(g,n[t],t,n[t].data[i],i,n[t].data[i].name),this.shapeList.push(g)},_calculateControlPoints:function(e){var t=this._intervalX,i=e.y,n=e.evolution,a=n.length;if(!(1>a)){for(var o=[],r=[],s=0;a>s;s++)o.push(n[s].timeScale),r.push(n[s].valueScale);var l=[];l.push([o[0],i]);var s=0;for(s=0;a-1>s;s++)l.push([(o[s]+o[s+1])/2,r[s]/-2+i]);for(l.push([(o[s]+(o[s]+t))/2,r[s]/-2+i]),l.push([o[s]+t,i]),l.push([(o[s]+(o[s]+t))/2,r[s]/2+i]),s=a-1;s>0;s--)l.push([(o[s]+o[s-1])/2,r[s-1]/2+i]);return l}},ondragend:function(e,t){this.isDragend&&e.target&&(t.dragOut=!0,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1)},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},l.inherits(t,i),e("../chart").define("eventRiver",t),t}),i("echarts/layout/eventRiver",["require"],function(){function e(e,i,o){function r(e,t){var i=e.importance,n=t.importance;return i>n?-1:n>i?1:0}for(var s=4,l=0;l<e.length;l++){for(var h=0;h<e[l].data.length;h++){null==e[l].data[h].weight&&(e[l].data[h].weight=1);for(var m=0,V=0;V<e[l].data[h].evolution.length;V++)m+=e[l].data[h].evolution[V].valueScale;e[l].data[h].importance=m*e[l].data[h].weight}e[l].data.sort(r)}for(var l=0;l<e.length;l++){null==e[l].weight&&(e[l].weight=1);for(var m=0,h=0;h<e[l].data.length;h++)m+=e[l].data[h].weight;e[l].importance=m*e[l].weight}e.sort(r);for(var U=Number.MAX_VALUE,d=0,l=0;l<e.length;l++)for(var h=0;h<e[l].data.length;h++)for(var V=0;V<e[l].data[h].evolution.length;V++){var p=e[l].data[h].evolution[V].timeScale;U=Math.min(U,p),d=Math.max(d,p)}U=~~U,d=~~d;for(var c=function(){var e=d-U+1+~~i;if(0>=e)return[0];for(var t=[];e--;)t.push(0);return t}(),u=c.slice(0),y=[],g=0,b=0,l=0;l<e.length;l++)for(var h=0;h<e[l].data.length;h++){var f=e[l].data[h];f.time=[],f.value=[];for(var k,x=0,V=0;V<e[l].data[h].evolution.length;V++)k=e[l].data[h].evolution[V],f.time.push(k.timeScale),f.value.push(k.valueScale),x=Math.max(x,k.valueScale);n(f,i,U),f.y=a(u,f,function(e,t){return e.ypx[t]}),f._offset=a(c,f,function(){return s}),g=Math.max(g,f.y+x),b=Math.max(b,f._offset),y.push(f)}t(y,o,g,b)}function t(e,t,i,n){for(var a=t.height,o=n/a>.5?.5:1,r=t.y,s=(t.height-n)/i,l=0,h=e.length;h>l;l++){var m=e[l];m.y=r+s*m.y+m._offset*o,delete m.time,delete m.value,delete m.xpx,delete m.ypx,delete m._offset;for(var V=m.evolution,U=0,d=V.length;d>U;U++)V[U].valueScale*=s}}function i(e,t,i,n){if(e===i)throw new Error("x0 is equal with x1!!!");if(t===n)return function(){return t};var a=(t-n)/(e-i),o=(n*e-t*i)/(e-i);return function(e){return a*e+o}}function n(e,t,n){var a=~~t,o=e.time.length;e.xpx=[],e.ypx=[];for(var r,s=0,l=0,h=0,m=0,V=0;o>s;s++){l=~~e.time[s],m=e.value[s]/2,s===o-1?(h=l+a,V=0):(h=~~e.time[s+1],V=e.value[s+1]/2),r=i(l,m,h,V);for(var U=l;h>U;U++)e.xpx.push(U-n),e.ypx.push(r(U))}e.xpx.push(h-n),e.ypx.push(V)}function a(e,t,i){for(var n,a=0,o=t.xpx.length,r=0;o>r;r++)n=i(t,r),a=Math.max(a,n+e[t.xpx[r]]);for(r=0;o>r;r++)n=i(t,r),e[t.xpx[r]]=a+n;return a}return e}),i("echarts/chart/venn",["require","./base","zrender/shape/Text","zrender/shape/Circle","zrender/shape/Path","../config","../util/ecData","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("zrender/shape/Circle"),o=e("zrender/shape/Path"),r=e("../config");r.venn={zlevel:0,z:1,calculable:!1};var s=e("../util/ecData"),l=e("zrender/tool/util");return t.prototype={type:r.CHART_TYPE_VENN,_buildShape:function(){this.selectedMap={},this._symbol=this.option.symbolList,this._queryTarget,this._dropBoxList=[],this._vennDataCounter=0;for(var e=this.series,t=this.component.legend,i=0;i<e.length;i++)if(e[i].type===r.CHART_TYPE_VENN){e[i]=this.reformOption(e[i]);var n=e[i].name||"";if(this.selectedMap[n]=t?t.isSelected(n):!0,!this.selectedMap[n])continue;this._buildVenn(i)}this.addShapeList()},_buildVenn:function(e){var t,i,n=this.series[e],a=n.data;a[0].value>a[1].value?(t=this.zr.getHeight()/3,i=t*Math.sqrt(a[1].value)/Math.sqrt(a[0].value)):(i=this.zr.getHeight()/3,t=i*Math.sqrt(a[0].value)/Math.sqrt(a[1].value));var o=this.zr.getWidth()/2-t,r=(t+i)/2*Math.sqrt(a[2].value)/Math.sqrt((a[0].value+a[1].value)/2),s=t+i;0!==a[2].value&&(s=this._getCoincideLength(a[0].value,a[1].value,a[2].value,t,i,r,Math.abs(t-i),t+i));var l=o+s,h=this.zr.getHeight()/2;if(this._buildItem(e,0,a[0],o,h,t),this._buildItem(e,1,a[1],l,h,i),0!==a[2].value&&a[2].value!==a[0].value&&a[2].value!==a[1].value){var m=(t*t-i*i)/(2*s)+s/2,V=s/2-(t*t-i*i)/(2*s),U=Math.sqrt(t*t-m*m),d=0,p=0;a[0].value>a[1].value&&o+m>l&&(p=1),a[0].value<a[1].value&&o+V>l&&(d=1),this._buildCoincideItem(e,2,a[2],o+m,h-U,h+U,t,i,d,p)}},_getCoincideLength:function(e,t,i,n,a,o,r,s){var l=(n*n-a*a)/(2*o)+o/2,h=o/2-(n*n-a*a)/(2*o),m=Math.acos(l/n),V=Math.acos(h/a),U=n*n*Math.PI,d=m*n*n-l*n*Math.sin(m)+V*a*a-h*a*Math.sin(V),p=d/U,c=i/e,u=Math.abs(p/c);return u>.999&&1.001>u?o:.999>=u?(s=o,o=(o+r)/2,this._getCoincideLength(e,t,i,n,a,o,r,s)):(r=o,o=(o+s)/2,this._getCoincideLength(e,t,i,n,a,o,r,s))},_buildItem:function(e,t,i,n,a,o){var r=this.series,l=r[e],h=this.getCircle(e,t,i,n,a,o);if(s.pack(h,l,e,i,t,i.name),this.shapeList.push(h),l.itemStyle.normal.label.show){var m=this.getLabel(e,t,i,n,a,o);s.pack(m,l,e,l.data[t],t,l.data[t].name),this.shapeList.push(m)}},_buildCoincideItem:function(e,t,i,n,a,r,l,h,m,V){var U=this.series,d=U[e],p=[i,d],c=this.deepMerge(p,"itemStyle.normal")||{},u=this.deepMerge(p,"itemStyle.emphasis")||{},y=c.color||this.zr.getColor(t),g=u.color||this.zr.getColor(t),b="M"+n+","+a+"A"+l+","+l+",0,"+m+",1,"+n+","+r+"A"+h+","+h+",0,"+V+",1,"+n+","+a,f={color:y,path:b},k={zlevel:d.zlevel,z:d.z,style:f,highlightStyle:{color:g,lineWidth:u.borderWidth,strokeColor:u.borderColor}};k=new o(k),k.buildPathArray&&(k.style.pathArray=k.buildPathArray(f.path)),s.pack(k,U[e],0,i,t,i.name),this.shapeList.push(k)},getCircle:function(e,t,i,n,o,r){var s=this.series[e],l=[i,s],h=this.deepMerge(l,"itemStyle.normal")||{},m=this.deepMerge(l,"itemStyle.emphasis")||{},V=h.color||this.zr.getColor(t),U=m.color||this.zr.getColor(t),d={zlevel:s.zlevel,z:s.z,clickable:!0,style:{x:n,y:o,r:r,brushType:"fill",opacity:1,color:V},highlightStyle:{color:U,lineWidth:m.borderWidth,strokeColor:m.borderColor}};return this.deepQuery([i,s,this.option],"calculable")&&(this.setCalculable(d),d.draggable=!0),new a(d)},getLabel:function(e,t,i,a,o,r){var s=this.series[e],l=s.itemStyle,h=[i,s],m=this.deepMerge(h,"itemStyle.normal")||{},V="normal",U=l[V].label,d=U.textStyle||{},p=this.getLabelText(t,i,V),c=this.getFont(d),u=m.color||this.zr.getColor(t),y=d.fontSize||12,g={zlevel:s.zlevel,z:s.z,style:{x:a,y:o-r-y,color:d.color||u,text:p,textFont:c,textAlign:"center"}};return new n(g)},getLabelText:function(e,t,i){var n=this.series,a=n[0],o=this.deepQuery([t,a],"itemStyle."+i+".label.formatter");return o?"function"==typeof o?o(a.name,t.name,t.value):"string"==typeof o?(o=o.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),o=o.replace("{a0}",a.name).replace("{b0}",t.name).replace("{c0}",t.value)):void 0:t.name},refresh:function(e){e&&(this.option=e,this.series=e.series),this._buildShape()}},l.inherits(t,i),e("../chart").define("venn",t),t}),i("echarts/chart/treemap",["require","./base","zrender/tool/area","zrender/shape/Rectangle","zrender/shape/Text","zrender/shape/Line","../layout/TreeMap","../data/Tree","../config","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a);var r=this;r._onclick=function(e){return r.__onclick(e)},r.zr.on(V.EVENT.CLICK,r._onclick)}var i=e("./base"),n=e("zrender/tool/area"),a=e("zrender/shape/Rectangle"),o=e("zrender/shape/Text"),r=e("zrender/shape/Line"),s=e("../layout/TreeMap"),l=e("../data/Tree"),h=e("../config");h.treemap={zlevel:0,z:1,calculable:!1,clickable:!0,center:["50%","50%"],size:["80%","80%"],root:"",itemStyle:{normal:{label:{ +show:!0,x:5,y:12,textStyle:{align:"left",color:"#000",fontFamily:"Arial",fontSize:13,fontStyle:"normal",fontWeight:"normal"}},breadcrumb:{show:!0,textStyle:{}},borderWidth:1,borderColor:"#ccc",childBorderWidth:1,childBorderColor:"#ccc"},emphasis:{}}};var m=e("../util/ecData"),V=e("zrender/config"),U=(e("zrender/tool/event"),e("zrender/tool/util")),d=e("zrender/tool/color");return t.prototype={type:h.CHART_TYPE_TREEMAP,refresh:function(e){this.clear(),e&&(this.option=e,this.series=this.option.series),this._treesMap={};for(var t=this.series,i=this.component.legend,n=0;n<t.length;n++)if(t[n].type===h.CHART_TYPE_TREEMAP){t[n]=this.reformOption(t[n]);var a=t[n].name||"";if(this.selectedMap[a]=i?i.isSelected(a):!0,!this.selectedMap[a])continue;this._buildSeries(t[n],n)}},_buildSeries:function(e,t){var i=l.fromOptionData(e.name,e.data);this._treesMap[t]=i;var n=e.root&&i.getNodeById(e.root)||i.root;this._buildTreemap(n,t)},_buildTreemap:function(e,t){for(var i=this.shapeList,n=0;n<i.length;){var a=i[n];m.get(a,"seriesIndex")===t?(this.zr.delShape(i[n]),i.splice(n,1)):n++}for(var o=i.length,r=this.series[t],l=r.itemStyle,h=this.parsePercent(r.size[0],this.zr.getWidth())||400,V=this.parsePercent(r.size[1],this.zr.getHeight())||500,U=this.parseCenter(this.zr,r.center),d=U[0]-.5*h,p=U[1]-.5*V,c=h*V,u=0,y=[],g=e.children,n=0;n<g.length;n++)u+=g[n].data.value;for(var b=0;b<g.length;b++)y.push(g[b].data.value*c/u);for(var f=new s({x:d,y:p,width:h,height:V}),k=f.run(y),x=0;x<k.length;x++){var _=g[x].data,L=k[x],W=[_.itemStyle,l],X=this.deepMerge(W);X.normal.color||(X.normal.color=this.zr.getColor(x)),X.emphasis.color||(X.emphasis.color=X.normal.color),this._buildItem(_,X,L,t,x),_.children&&this._buildChildrenTreemap(_.children,X,L,t)}this.query(r,"itemStyle.normal.breadcrumb.show")&&this._buildBreadcrumb(e,t,d,p+V);for(var n=o;n<i.length;n++)this.zr.addShape(i[n])},_buildItem:function(e,t,i,n,a){var o=this.series,r=this.getRectangle(e,t,i);m.pack(r,o[n],n,e,a,e.name),this.shapeList.push(r)},getRectangle:function(e,t,i){var n=t.emphasis,o=t.normal,r=this.getLabel(t,i,e.name,e.value),s=this.option.hoverable,l={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:s,clickable:!0,style:U.merge({x:i.x,y:i.y,width:i.width,height:i.height,brushType:"both",color:o.color,lineWidth:o.borderWidth,strokeColor:o.borderColor},r.style,!0),highlightStyle:U.merge({color:n.color,lineWidth:n.borderWidth,strokeColor:n.borderColor},r.highlightStyle,!0)};return new a(l)},getLabel:function(e,t,i,a){var o=e.normal.label.textStyle,r=[e.emphasis.label.textStyle,o],s=this.deepMerge(r),l=e.normal.label.formatter,h=this.getLabelText(i,a,l),m=this.getFont(o),V=n.getTextWidth(h,m),U=n.getTextHeight(h,m),d=this.deepQuery([e.emphasis,e.normal],"label.formatter"),p=this.getLabelText(i,a,d),c=this.getFont(s),u=n.getTextWidth(h,c),y=n.getTextHeight(h,c);e.normal.label.show?(e.normal.label.x+V>t.width||e.normal.label.y+U>t.height)&&(h=""):h="",e.emphasis.label.show?(s.x+u>t.width||s.y+y>t.height)&&(p=""):p="";var g={style:{textX:t.x+e.normal.label.x,textY:t.y+e.normal.label.y,text:h,textPosition:"specific",textColor:o.color,textFont:m},highlightStyle:{textX:t.x+e.emphasis.label.x,textY:t.y+e.emphasis.label.y,text:p,textColor:s.color,textPosition:"specific"}};return g},getLabelText:function(e,t,i){return i?"function"==typeof i?i.call(this.myChart,e,t):"string"==typeof i?(i=i.replace("{b}","{b0}").replace("{c}","{c0}"),i=i.replace("{b0}",e).replace("{c0}",t)):void 0:e},_buildChildrenTreemap:function(e,t,i,n){for(var a=i.width*i.height,o=0,r=[],l=0;l<e.length;l++)o+=e[l].value;for(var h=0;h<e.length;h++)r.push(e[h].value*a/o);for(var V=new s({x:i.x,y:i.y,width:i.width,height:i.height}),U=V.run(r),d=t.normal.childBorderWidth,p=t.normal.childBorderColor,c=0;c<U.length;c++){var u=U[c],y=[];i.y.toFixed(2)!==u.y.toFixed(2)&&y.push(this._getLine(u.x,u.y,u.x+u.width,u.y,d,p)),i.x.toFixed(2)!==u.x.toFixed(2)&&y.push(this._getLine(u.x,u.y,u.x,u.y+u.height,d,p)),(i.y+i.height).toFixed(2)!==(u.y+u.height).toFixed(2)&&y.push(this._getLine(u.x,u.y+u.height,u.x+u.width,u.y+u.height,d,p)),(i.x+i.width).toFixed(2)!==(u.x+u.width).toFixed(2)&&y.push(this._getLine(u.x+u.width,u.y,u.x+u.width,u.y+u.height,d,p));for(var g=0;g<y.length;g++)m.set(y[g],"seriesIndex",n),this.shapeList.push(y[g])}},_getLine:function(e,t,i,n,a,o){var s={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:e,yStart:t,xEnd:i,yEnd:n,lineWidth:a,strokeColor:o}};return new r(s)},_buildBreadcrumb:function(e,t,i,n){for(var a=[],r=e;r;)a.unshift(r.data.name),r=r.parent;for(var s=this.series[t],l=this.query(s,"itemStyle.normal.breadcrumb.textStyle")||{},h=this.query(s,"itemStyle.emphasis.breadcrumb.textStyle")||{},V={y:n+10,textBaseline:"top",textAlign:"left",color:l.color,textFont:this.getFont(l)},p={brushType:"fill",color:h.color||d.lift(l.color,-.3),textFont:this.getFont(h)},c=0;c<a.length;c++){var u=new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:U.merge({x:i,text:a[c]+(a.length-1-c?" > ":"")},V),clickable:!0,highlightStyle:p});m.set(u,"seriesIndex",t),m.set(u,"name",a[c]),i+=u.getRect(u.style).width,this.shapeList.push(u)}},__onclick:function(e){var t=e.target;if(t){var i=m.get(t,"seriesIndex"),n=m.get(t,"name"),a=this._treesMap[i],o=a.getNodeById(n);o&&o.children.length&&this._buildTreemap(o,i)}}},U.inherits(t,i),e("../chart").define("treemap",t),t}),i("echarts/layout/TreeMap",["require"],function(){function e(e){({x:e.x,y:e.y,width:e.width,height:e.height});this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height}return e.prototype.run=function(e){var t=[];return this._squarify(e,{x:this.x,y:this.y,width:this.width,height:this.height},t),t},e.prototype._squarify=function(e,t,i){var n="VERTICAL",a=t.width,o=t.height;t.width<t.height&&(n="HORIZONTAL",a=t.height,o=t.width);for(var r=this._getShapeListInAbstractRow(e,a,o),s=0;s<r.length;s++){r[s].x=0,r[s].y=0;for(var l=0;s>l;l++)r[s].y+=r[l].height}var h={};if("VERTICAL"==n){for(var m=0;m<r.length;m++)i.push({x:r[m].x+t.x,y:r[m].y+t.y,width:r[m].width,height:r[m].height});h={x:r[0].width+t.x,y:t.y,width:t.width-r[0].width,height:t.height}}else{for(var V=0;V<r.length;V++)i.push({x:r[V].y+t.x,y:r[V].x+t.y,width:r[V].height,height:r[V].width});h={x:t.x,y:t.y+r[0].width,width:t.width,height:t.height-r[0].width}}var U=e.slice(r.length);0!==U.length&&this._squarify(U,h,i)},e.prototype._getShapeListInAbstractRow=function(e,t,i){if(1===e.length)return[{width:t,height:i}];for(var n=1;n<e.length;n++){var a=this._placeFixedNumberRectangles(e.slice(0,n),t,i),o=this._placeFixedNumberRectangles(e.slice(0,n+1),t,i);if(this._isFirstBetter(a,o))return a}},e.prototype._placeFixedNumberRectangles=function(e,t,i){for(var n=e.length,a=[],o=0,r=0;r<e.length;r++)o+=e[r];for(var s=o/i,l=0;n>l;l++){var h=i*e[l]/o;a.push({width:s,height:h})}return a},e.prototype._isFirstBetter=function(e,t){var i=e[0].height/e[0].width;i=i>1?1/i:i;var n=t[0].height/t[0].width;return n=n>1?1/n:n,Math.abs(i-1)<=Math.abs(n-1)?!0:!1},e}),i("echarts/data/Tree",["require","zrender/tool/util"],function(e){function t(e,t){this.id=e,this.depth=0,this.height=0,this.children=[],this.parent=null,this.data=t||null}function i(e){this.root=new t(e)}var n=e("zrender/tool/util");return t.prototype.add=function(e){var t=this.children;e.parent!==this&&(t.push(e),e.parent=this)},t.prototype.remove=function(e){var t=this.children,i=n.indexOf(t,e);i>=0&&(t.splice(i,1),e.parent=null)},t.prototype.traverse=function(e,t){e.call(t,this);for(var i=0;i<this.children.length;i++)this.children[i].traverse(e,t)},t.prototype.updateDepthAndHeight=function(e){var t=0;this.depth=e;for(var i=0;i<this.children.length;i++){var n=this.children[i];n.updateDepthAndHeight(e+1),n.height>t&&(t=n.height)}this.height=t+1},t.prototype.getNodeById=function(e){if(this.id===e)return this;for(var t=0;t<this.children.length;t++){var i=this.children[t].getNodeById(e);if(i)return i}},i.prototype.traverse=function(e,t){this.root.traverse(e,t)},i.prototype.getSubTree=function(e){var t=this.getNodeById(e);if(t){var n=new i(t.id);return n.root=t,n}},i.prototype.getNodeById=function(e){return this.root.getNodeById(e)},i.fromOptionData=function(e,n){function a(e,i){var n=new t(e.name,e);i.add(n);var o=e.children;if(o)for(var r=0;r<o.length;r++)a(o[r],n)}var o=new i(e),r=o.root;r.data={name:e,children:n};for(var s=0;s<n.length;s++)a(n[s],r);return o.root.updateDepthAndHeight(0),o},i.fromGraph=function(e){function n(t){for(var i=e.getNodeById(t.id),a=0;a<i.outEdges.length;a++){var r=i.outEdges[a],s=o[r.node2.id];t.children.push(s),n(s)}}for(var a={},o={},r=0;r<e.nodes.length;r++){var s,l=e.nodes[r];0===l.inDegree()?(a[l.id]=new i(l.id),s=a[l.id].root):s=new t(l.id),s.data=l.data,o[l.id]=s}var h=[];for(var m in a)n(a[m].root),a[m].root.updateDepthAndHeight(0),h.push(a[m]);return h},i}),i("echarts/chart/tree",["require","./base","../util/shape/Icon","zrender/shape/Image","zrender/shape/Line","zrender/shape/BezierCurve","../layout/Tree","../data/Tree","../config","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/util","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=.618,a=e("../util/shape/Icon"),o=e("zrender/shape/Image"),r=e("zrender/shape/Line"),s=e("zrender/shape/BezierCurve"),l=e("../layout/Tree"),h=e("../data/Tree"),m=e("../config");m.tree={zlevel:1,z:2,calculable:!1,clickable:!0,rootLocation:{},orient:"vertical",symbol:"circle",symbolSize:20,nodePadding:30,layerPadding:100,itemStyle:{normal:{label:{show:!0},lineStyle:{width:1,color:"#777",type:"curve"}},emphasis:{}}};var V=e("../util/ecData"),U=(e("zrender/config"),e("zrender/tool/event"),e("zrender/tool/util"));return t.prototype={type:m.CHART_TYPE_TREE,_buildShape:function(e,t){var i=e.data[0];this.tree=h.fromOptionData(i.name,i.children),this.tree.root.data=i,this._setTreeShape(e),this.tree.traverse(function(i){this._buildItem(i,e,t),i.children.length>0&&this._buildLink(i,e)},this);var n=e.roam===!0||"move"===e.roam,a=e.roam===!0||"scale"===e.roam;this.zr.modLayer(this.getZlevelBase(),{panable:n,zoomable:a}),(this.query("markPoint.effect.show")||this.query("markLine.effect.show"))&&this.zr.modLayer(m.EFFECT_ZLEVEL,{panable:n,zoomable:a}),this.addShapeList()},_buildItem:function(e,t,i){var n=[e.data,t],r=this.deepQuery(n,"symbol"),s=this.deepMerge(n,"itemStyle.normal")||{},l=this.deepMerge(n,"itemStyle.emphasis")||{},h=s.color||this.zr.getColor(),m=l.color||this.zr.getColor(),U=-e.layout.angle||0;e.id===this.tree.root.id&&(U=0);var d="right";Math.abs(U)>=Math.PI/2&&Math.abs(U)<3*Math.PI/2&&(U+=Math.PI,d="left");var p=[U,e.layout.position[0],e.layout.position[1]],c=new a({zlevel:this.getZlevelBase(),z:this.getZBase()+1,rotation:p,clickable:this.deepQuery(n,"clickable"),style:{x:e.layout.position[0]-.5*e.layout.width,y:e.layout.position[1]-.5*e.layout.height,width:e.layout.width,height:e.layout.height,iconType:r,color:h,brushType:"both",lineWidth:s.borderWidth,strokeColor:s.borderColor},highlightStyle:{color:m,lineWidth:l.borderWidth,strokeColor:l.borderColor}});c.style.iconType.match("image")&&(c.style.image=c.style.iconType.replace(new RegExp("^image:\\/\\/"),""),c=new o({rotation:p,style:c.style,highlightStyle:c.highlightStyle,clickable:c.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()})),this.deepQuery(n,"itemStyle.normal.label.show")&&(c.style.text=null==e.data.label?e.id:e.data.label,c.style.textPosition=this.deepQuery(n,"itemStyle.normal.label.position"),"radial"===t.orient&&"inside"!==c.style.textPosition&&(c.style.textPosition=d),c.style.textColor=this.deepQuery(n,"itemStyle.normal.label.textStyle.color"),c.style.textFont=this.getFont(this.deepQuery(n,"itemStyle.normal.label.textStyle")||{})),this.deepQuery(n,"itemStyle.emphasis.label.show")&&(c.highlightStyle.textPosition=this.deepQuery(n,"itemStyle.emphasis.label.position"),c.highlightStyle.textColor=this.deepQuery(n,"itemStyle.emphasis.label.textStyle.color"),c.highlightStyle.textFont=this.getFont(this.deepQuery(n,"itemStyle.emphasis.label.textStyle")||{})),V.pack(c,t,i,e.data,0,e.id),this.shapeList.push(c)},_buildLink:function(e,t){var i=t.itemStyle.normal.lineStyle;if("broken"===i.type)return void this._buildBrokenLine(e,i,t);for(var n=0;n<e.children.length;n++){var a=e.layout.position[0],o=e.layout.position[1],r=e.children[n].layout.position[0],s=e.children[n].layout.position[1];switch(i.type){case"curve":this._buildBezierCurve(e,e.children[n],i,t);break;case"broken":break;default:var l=this._getLine(a,o,r,s,i);this.shapeList.push(l)}}},_buildBrokenLine:function(e,t,i){var a=U.clone(t);a.type="solid";var o=[],r=e.layout.position[0],s=e.layout.position[1],l=i.orient,h=e.children[0].layout.position[1],m=r,V=s+(h-s)*(1-n),d=e.children[0].layout.position[0],p=V,c=e.children[e.children.length-1].layout.position[0],u=V;if("horizontal"===l){var y=e.children[0].layout.position[0];m=r+(y-r)*(1-n),V=s,d=m,p=e.children[0].layout.position[1],c=m,u=e.children[e.children.length-1].layout.position[1]}o.push(this._getLine(r,s,m,V,a)),o.push(this._getLine(d,p,c,u,a));for(var g=0;g<e.children.length;g++)y=e.children[g].layout.position[0],h=e.children[g].layout.position[1],"horizontal"===l?p=h:d=y,o.push(this._getLine(d,p,y,h,a));this.shapeList=this.shapeList.concat(o)},_getLine:function(e,t,i,n,a){return e===i&&(e=i=this.subPixelOptimize(e,a.width)),t===n&&(t=n=this.subPixelOptimize(t,a.width)),new r({zlevel:this.getZlevelBase(),hoverable:!1,style:U.merge({xStart:e,yStart:t,xEnd:i,yEnd:n,lineType:a.type,strokeColor:a.color,lineWidth:a.width},a,!0)})},_buildBezierCurve:function(e,t,i,a){var o=n,r=a.orient,l=e.layout.position[0],h=e.layout.position[1],m=t.layout.position[0],V=t.layout.position[1],d=l,p=(V-h)*o+h,c=m,u=(V-h)*(1-o)+h;if("horizontal"===r)d=(m-l)*o+l,p=h,c=(m-l)*(1-o)+l,u=V;else if("radial"===r)if(e.id===this.tree.root.id)d=(m-l)*o+l,p=(V-h)*o+h,c=(m-l)*(1-o)+l,u=(V-h)*(1-o)+h;else{var y=e.layout.originPosition[0],g=e.layout.originPosition[1],b=t.layout.originPosition[0],f=t.layout.originPosition[1],k=this.tree.root.layout.position[0],x=this.tree.root.layout.position[1];d=y,p=(f-g)*o+g,c=b,u=(f-g)*(1-o)+g;var _=(d-this.minX)/this.width*Math.PI*2;d=p*Math.cos(_)+k,p=p*Math.sin(_)+x,_=(c-this.minX)/this.width*Math.PI*2,c=u*Math.cos(_)+k,u=u*Math.sin(_)+x}var L=new s({zlevel:this.getZlevelBase(),hoverable:!1,style:U.merge({xStart:l,yStart:h,cpX1:d,cpY1:p,cpX2:c,cpY2:u,xEnd:m,yEnd:V,strokeColor:i.color,lineWidth:i.width},i,!0)});this.shapeList.push(L)},_setTreeShape:function(e){var t=new l({nodePadding:e.nodePadding,layerPadding:e.layerPadding});this.tree.traverse(function(t){var i=[t.data,e],n=this.deepQuery(i,"symbolSize");"number"==typeof n&&(n=[n,n]),t.layout={width:n[0],height:n[1]}},this),t.run(this.tree);var i=e.orient,n=e.rootLocation.x,a=e.rootLocation.y,o=this.zr.getWidth(),r=this.zr.getHeight();n="center"===n?.5*o:this.parsePercent(n,o),a="center"===a?.5*r:this.parsePercent(a,r),a=this.parsePercent(a,r),"horizontal"===i&&(n=isNaN(n)?10:n,a=isNaN(a)?.5*r:a),"radial"===i?(n=isNaN(n)?.5*o:n,a=isNaN(a)?.5*r:a):(n=isNaN(n)?.5*o:n,a=isNaN(a)?10:a);var s=this.tree.root.layout.position[0];if("radial"===i){var h=1/0,m=0,V=0;this.tree.traverse(function(e){m=Math.max(m,e.layout.position[0]),h=Math.min(h,e.layout.position[0]),V=Math.max(V,e.layout.width)}),this.width=m-h+2*V,this.minX=h}this.tree.traverse(function(t){var o,r;if("vertical"===i&&"inverse"===e.direction)o=t.layout.position[0]-s+n,r=a-t.layout.position[1];else if("vertical"===i)o=t.layout.position[0]-s+n,r=t.layout.position[1]+a;else if("horizontal"===i&&"inverse"===e.direction)r=t.layout.position[0]-s+a,o=n-t.layout.position[1];else if("horizontal"===i)r=t.layout.position[0]-s+a,o=t.layout.position[1]+n;else{o=t.layout.position[0],r=t.layout.position[1],t.layout.originPosition=[o,r];var l=r,m=(o-h)/this.width*Math.PI*2;o=l*Math.cos(m)+n,r=l*Math.sin(m)+a,t.layout.angle=m}t.layout.position[0]=o,t.layout.position[1]=r},this)},refresh:function(e){this.clear(),e&&(this.option=e,this.series=this.option.series);for(var t=this.series,i=this.component.legend,n=0;n<t.length;n++)if(t[n].type===m.CHART_TYPE_TREE){t[n]=this.reformOption(t[n]);var a=t[n].name||"";if(this.selectedMap[a]=i?i.isSelected(a):!0,!this.selectedMap[a])continue;this._buildSeries(t[n],n)}},_buildSeries:function(e,t){this._buildShape(e,t)}},U.inherits(t,i),e("../chart").define("tree",t),t}),i("echarts/layout/Tree",["require","zrender/tool/vector"],function(e){function t(e){e=e||{},this.nodePadding=e.nodePadding||30,this.layerPadding=e.layerPadding||100,this._layerOffsets=[],this._layers=[]}var i=e("zrender/tool/vector");return t.prototype.run=function(e){this._layerOffsets.length=0;for(var t=0;t<e.root.height+1;t++)this._layerOffsets[t]=0,this._layers[t]=[];this._updateNodeXPosition(e.root);var i=e.root;this._updateNodeYPosition(i,0,i.layout.height)},t.prototype._updateNodeXPosition=function(e){var t=1/0,n=-(1/0);e.layout.position=e.layout.position||i.create();for(var a=0;a<e.children.length;a++){var o=e.children[a];this._updateNodeXPosition(o);var r=o.layout.position[0];t>r&&(t=r),r>n&&(n=r)}e.layout.position[0]=e.children.length>0?(t+n)/2:0;var s=this._layerOffsets[e.depth]||0;if(s>e.layout.position[0]){var l=s-e.layout.position[0];this._shiftSubtree(e,l);for(var a=e.depth+1;a<e.height+e.depth;a++)this._layerOffsets[a]+=l}this._layerOffsets[e.depth]=e.layout.position[0]+e.layout.width+this.nodePadding,this._layers[e.depth].push(e)},t.prototype._shiftSubtree=function(e,t){e.layout.position[0]+=t;for(var i=0;i<e.children.length;i++)this._shiftSubtree(e.children[i],t)},t.prototype._updateNodeYPosition=function(e,t,i){e.layout.position[1]=t;for(var n=0,a=0;a<e.children.length;a++)n=Math.max(e.children[a].layout.height,n);var o=this.layerPadding;"function"==typeof o&&(o=o(e.depth));for(var a=0;a<e.children.length;a++)this._updateNodeYPosition(e.children[a],t+o+i,n)},t}),i("echarts/chart/wordCloud",["require","./base","zrender/shape/Text","../layout/WordCloud","../component/grid","../component/dataRange","../config","../util/ecData","zrender/tool/util","zrender/tool/color","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("zrender/shape/Text"),a=e("../layout/WordCloud");e("../component/grid"),e("../component/dataRange");var o=e("../config"),r=e("../util/ecData"),s=e("zrender/tool/util"),l=e("zrender/tool/color");return o.wordCloud={zlevel:0,z:2,clickable:!0,center:["50%","50%"],size:["40%","40%"],textRotation:[0,90],textPadding:0,autoSize:{enable:!0,minSize:12},itemStyle:{normal:{textStyle:{fontSize:function(e){return e.value}}}}},t.prototype={type:o.CHART_TYPE_WORDCLOUD,refresh:function(e){e&&(this.option=e,this.series=e.series),this._init()},_init:function(){var e=this.series;this.backupShapeList();for(var t=this.component.legend,i=0;i<e.length;i++)if(e[i].type===o.CHART_TYPE_WORDCLOUD){e[i]=this.reformOption(e[i]);var n=e[i].name||"";if(this.selectedMap[n]=t?t.isSelected(n):!0,!this.selectedMap[n])continue;this.buildMark(i),this._initSerie(e[i])}},_initSerie:function(e){var t=e.itemStyle.normal.textStyle,i=[this.parsePercent(e.size[0],this.zr.getWidth())||200,this.parsePercent(e.size[1],this.zr.getHeight())||200],n=this.parseCenter(this.zr,e.center),o={size:i,wordletype:{autoSizeCal:e.autoSize},center:n,rotate:e.textRotation,padding:e.textPadding,font:t.fontFamily,fontSize:t.fontSize,fontWeight:t.fontWeight,fontStyle:t.fontStyle,text:function(e){return e.name},data:e.data},r=new a(o),s=this;r.end(function(e){s._buildShapes(e)}),r.start()},_buildShapes:function(e){for(var t=e.length,i=0;t>i;i++)this._buildTextShape(e[i],0,i);this.addShapeList()},_buildTextShape:function(e,t,i){var a=this.series,o=a[t],s=o.name||"",h=o.data[i],m=[h,o],V=this.component.legend,U=V?V.getColor(s):this.zr.getColor(t),d=this.deepMerge(m,"itemStyle.normal")||{},p=this.deepMerge(m,"itemStyle.emphasis")||{},c=this.getItemStyleColor(d.color,t,i,h)||U,u=this.getItemStyleColor(p.color,t,i,h)||("string"==typeof c?l.lift(c,-.2):c),y=new n({zlevel:o.zlevel,z:o.z,hoverable:!0,clickable:this.deepQuery(m,"clickable"),style:{x:0,y:0,text:e.text,color:c,textFont:[e.style,e.weight,e.size+"px",e.font].join(" "),textBaseline:"alphabetic",textAlign:"center"},highlightStyle:{brushType:p.borderWidth?"both":"fill",color:u,lineWidth:p.borderWidth||0,strokeColor:p.borderColor},position:[e.x,e.y],rotation:[-e.rotate/180*Math.PI,0,0]});r.pack(y,o,t,h,i,h.name),this.shapeList.push(y)}},s.inherits(t,i),e("../chart").define("wordCloud",t),t}),i("echarts/layout/WordCloud",["require","../layout/WordCloudRectZero","zrender/tool/util"],function(e){function t(e){this._init(e)}var i=e("../layout/WordCloudRectZero"),n=e("zrender/tool/util");return t.prototype={start:function(){function e(){p.totalArea=r,U.autoSizeCal.enable&&p._autoCalTextSize(m,r,a,o,U.autoSizeCal.minSize),V.timer&&clearInterval(V.timer),V.timer=setInterval(t,0),t()}function t(){for(var e,t=+new Date,i=m.length;+new Date-t<V.timeInterval&&++s<i&&V.timer;)e=m[s],e.x=d[0]>>1,e.y=d[1]>>1,p._cloudSprite(e,m,s),e.hasText&&p._place(n,e,h)&&(l.push(e),e.x-=d[0]>>1,e.y-=d[1]>>1);s>=i&&(p.stop(),p._fixTagPosition(l),V.endcallback(l))}var n=null,a=0,o=0,r=0,s=-1,l=[],h=null,m=this.wordsdata,V=this.defaultOption,U=V.wordletype,d=V.size,p=this,c=new i({type:U.type,width:d[0],height:d[1]});return c.calculate(function(t){n=t.initarr,a=t.maxWit,o=t.maxHit,r=t.area,h=t.imgboard,e()},this),this},_fixTagPosition:function(e){for(var t=this.defaultOption.center,i=0,n=e.length;n>i;i++)e[i].x+=t[0],e[i].y+=t[1]},stop:function(){return this.defaultOption.timer&&(clearInterval(this.defaultOption.timer),this.defaultOption.timer=null),this},end:function(e){return e&&(this.defaultOption.endcallback=e),this},_init:function(e){this.defaultOption={},this._initProperty(e),this._initMethod(e),this._initCanvas(),this._initData(e.data)},_initData:function(e){var t=this,i=t.defaultOption;this.wordsdata=e.map(function(e,n){return e.text=i.text.call(t,e,n),e.font=i.font.call(t,e,n),e.style=i.fontStyle.call(t,e,n),e.weight=i.fontWeight.call(t,e,n),e.rotate=i.rotate.call(t,e,n),e.size=~~i.fontSize.call(t,e,n),e.padding=i.padding.call(t,e,n),e}).sort(function(e,t){return t.value-e.value})},_initMethod:function(e){function t(e){return e.name}function i(){return"sans-serif"}function n(){return"normal"}function a(e){return e.value}function o(){return 0}function r(e){return function(){return e[Math.round(Math.random()*(e.length-1))]}}function s(){return 0}function l(e){var t=e[0]/e[1];return function(e){return[t*(e*=.1)*Math.cos(e),e*Math.sin(e)]}}function h(e){var t=4,i=t*e[0]/e[1],n=0,a=0;return function(e){var o=0>e?-1:1;switch(Math.sqrt(1+4*o*e)-o&3){case 0:n+=i;break;case 1:a+=t;break;case 2:n-=i;break;default:a-=t}return[n,a]}}function m(e){return"function"==typeof e?e:function(){return e}}var V=this.defaultOption;V.text=e.text?m(e.text):t,V.font=e.font?m(e.font):i,V.fontSize=e.fontSize?m(e.fontSize):a,V.fontStyle=e.fontStyle?m(e.fontStyle):n,V.fontWeight=e.fontWeight?m(e.fontWeight):n,V.rotate=e.rotate?r(e.rotate):o,V.padding=e.padding?m(e.padding):s,V.center=e.center,V.spiral=l,V.endcallback=function(){},V.rectangularSpiral=h,V.archimedeanSpiral=l},_initProperty:function(e){var t=this.defaultOption;t.size=e.size||[256,256],t.wordletype=e.wordletype,t.words=e.words||[],t.timeInterval=1/0,t.timer=null,t.spirals={archimedean:t.archimedeanSpiral,rectangular:t.rectangularSpiral},n.merge(t,{size:[256,256],wordletype:{type:"RECT",areaPresent:.058,autoSizeCal:{enable:!0,minSize:12}}})},_initCanvas:function(){var e,t=Math.PI/180,i=64,n=2048,a=1;"undefined"!=typeof document?(e=document.createElement("canvas"),e.width=1,e.height=1,a=Math.sqrt(e.getContext("2d").getImageData(0,0,1,1).data.length>>2),e.width=(i<<5)/a,e.height=n/a):e=new Canvas(i<<5,n);var o=e.getContext("2d");o.fillStyle=o.strokeStyle="red",o.textAlign="center",this.defaultOption.c=o,this.defaultOption.cw=i,this.defaultOption.ch=n,this.defaultOption.ratio=a,this.defaultOption.cloudRadians=t},_cloudSprite:function(e,t,i){if(!e.sprite){var n=this.defaultOption.cw,a=this.defaultOption.ch,o=this.defaultOption.c,r=this.defaultOption.ratio,s=this.defaultOption.cloudRadians;o.clearRect(0,0,(n<<5)/r,a/r);var l=0,h=0,m=0,V=t.length;for(--i;++i<V;){e=t[i],o.save(),o.font=e.style+" "+e.weight+" "+~~((e.size+1)/r)+"px "+e.font;var U=o.measureText(e.text+"m").width*r,d=e.size<<1;if(e.rotate){var p=Math.sin(e.rotate*s),c=Math.cos(e.rotate*s),u=U*c,y=U*p,g=d*c,b=d*p;U=Math.max(Math.abs(u+b),Math.abs(u-b))+31>>5<<5,d=~~Math.max(Math.abs(y+g),Math.abs(y-g))}else U=U+31>>5<<5;if(d>m&&(m=d),l+U>=n<<5&&(l=0,h+=m,m=0),h+d>=a)break;o.translate((l+(U>>1))/r,(h+(d>>1))/r),e.rotate&&o.rotate(e.rotate*s),o.fillText(e.text,0,0),e.padding&&(o.lineWidth=2*e.padding,o.strokeText(e.text,0,0)),o.restore(),e.width=U,e.height=d,e.xoff=l,e.yoff=h,e.x1=U>>1,e.y1=d>>1,e.x0=-e.x1,e.y0=-e.y1,e.hasText=!0,l+=U}for(var f=o.getImageData(0,0,(n<<5)/r,a/r).data,k=[];--i>=0;)if(e=t[i],e.hasText){for(var U=e.width,x=U>>5,d=e.y1-e.y0,_=0;d*x>_;_++)k[_]=0;if(l=e.xoff,null==l)return;h=e.yoff;for(var L=0,W=-1,X=0;d>X;X++){for(var _=0;U>_;_++){var v=x*X+(_>>5),w=f[(h+X)*(n<<5)+(l+_)<<2]?1<<31-_%32:0;k[v]|=w,L|=w}L?W=X:(e.y0++,d--,X--,h++)}e.y1=e.y0+W,e.sprite=k.slice(0,(e.y1-e.y0)*x)}}},_place:function(e,t,i){function n(e,t,i){i>>=5;for(var n,a=e.sprite,o=e.width>>5,r=e.x-(o<<4),s=127&r,l=32-s,h=e.y1-e.y0,m=(e.y+e.y0)*i+(r>>5),V=0;h>V;V++){n=0;for(var U=0;o>=U;U++)if((n<<l|(o>U?(n=a[V*o+U])>>>s:0))&t[m+U])return!0;m+=i}return!1}function a(e,t){return t.row[e.y]&&t.cloumn[e.x]&&e.x>=t.row[e.y].start&&e.x<=t.row[e.y].end&&e.y>=t.cloumn[e.x].start&&e.y<=t.cloumn[e.x].end}for(var o,r,s,l=this.defaultOption.size,h=([{x:0,y:0},{x:l[0],y:l[1]}],t.x),m=t.y,V=Math.sqrt(l[0]*l[0]+l[1]*l[1]),U=this.defaultOption.spiral(l),d=Math.random()<.5?1:-1,p=-d;(o=U(p+=d))&&(r=~~o[0],s=~~o[1],!(Math.min(r,s)>V));)if(t.x=h+r,t.y=m+s,!(t.x+t.x0<0||t.y+t.y0<0||t.x+t.x1>l[0]||t.y+t.y1>l[1])&&!n(t,e,l[0])&&a(t,i)){for(var c,u=t.sprite,y=t.width>>5,g=l[0]>>5,b=t.x-(y<<4),f=127&b,k=32-f,x=t.y1-t.y0,_=(t.y+t.y0)*g+(b>>5),L=0;x>L;L++){c=0;for(var W=0;y>=W;W++)e[_+W]|=c<<k|(y>W?(c=u[L*y+W])>>>f:0);_+=g}return delete t.sprite,!0}return!1},_autoCalTextSize:function(e,t,i,n,a){function o(e){c.clearRect(0,0,(d<<5)/u,p/u),c.save(),c.font=e.style+" "+e.weight+" "+~~((e.size+1)/u)+"px "+e.font;var t=c.measureText(e.text+"m").width*u,r=e.size<<1;t=t+31>>5<<5,c.restore(),e.aw=t,e.ah=r;var s,l,h;if(e.rotate){var m=Math.sin(e.rotate*y),V=Math.cos(e.rotate*y),g=t*V,b=t*m,f=r*V,k=r*m;l=Math.max(Math.abs(g+k),Math.abs(g-k))+31>>5<<5,h=~~Math.max(Math.abs(b+f),Math.abs(b-f))}return e.size<=U||e.rotate&&t*r<=e.area&&i>=l&&n>=h||t*r<=e.area&&i>=t&&n>=r?void(e.area=t*r):(s=e.rotate&&l>i&&h>n?Math.min(i/l,n/h):t>i||r>n?Math.min(i/t,n/r):Math.sqrt(e.area/(e.aw*e.ah)),e.size=~~(s*e.size),e.size<a?void(e.size=a):o(e))}function r(e,t){for(var i=e.length,n=0;i--;)n+=t(e[i]);return n}for(var s,l,h=r(e,function(e){return e.size}),m=e.length,V=.25,U=a,d=this.defaultOption.cw,p=this.defaultOption.ch,c=this.defaultOption.c,u=this.defaultOption.ratio,y=this.defaultOption.cloudRadians;m--;)s=e[m],l=s.size/h,s.areapre=V?V>l?l:V:l,s.area=t*s.areapre,s.totalarea=t,o(s)}},t}),i("echarts/layout/WordCloudRectZero",["require"],function(){function e(e){this.defaultOption={type:"RECT"},this._init(e)}return e.prototype={RECT:"_calculateRect",_init:function(e){this._initOption(e),this._initCanvas()},_initOption:function(e){for(k in e)this.defaultOption[k]=e[k]},_initCanvas:function(){var e=document.createElement("canvas");e.width=1,e.height=1;var t=Math.sqrt(e.getContext("2d").getImageData(0,0,1,1).data.length>>2);if(e.width=this.defaultOption.width,e.height=this.defaultOption.height,e.getContext)var i=e.getContext("2d");this.canvas=e,this.ctx=i,this.ratio=t},calculate:function(e,t){var i=this.defaultOption.type,n=this[i];this[n].call(this,e,t)},_calculateReturn:function(e,t,i){t.call(i,e)},_calculateRect:function(e,t){var i={},n=this.defaultOption.width>>5<<5,a=this.defaultOption.height;i.initarr=this._rectZeroArray(n*a),i.area=n*a,i.maxHit=a,i.maxWit=n,i.imgboard=this._rectBoard(n,a),this._calculateReturn(i,e,t)},_rectBoard:function(e,t){for(var i=[],n=0;t>n;n++)i.push({y:n,start:0,end:e});for(var a=[],n=0;e>n;n++)a.push({x:n,start:0,end:t});return{row:i,cloumn:a}},_rectZeroArray:function(e){for(var t=[],i=e,n=-1;++n<i;)t[n]=0;return t}},e}),i("echarts/chart/heatmap",["require","./base","../layer/heatmap","../config","../util/ecData","zrender/tool/util","zrender/tool/color","zrender/shape/Image","../chart"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e("./base"),n=e("../layer/heatmap"),a=e("../config"),o=(e("../util/ecData"),e("zrender/tool/util")),r=(e("zrender/tool/color"),e("zrender/shape/Image"));return a.heatmap={zlevel:0,z:2,clickable:!0},t.prototype={type:a.CHART_TYPE_HEATMAP,refresh:function(e){this.clear(),e&&(this.option=e,this.series=e.series),this._init()},_init:function(){var e=this.series;this.backupShapeList();for(var t=e.length,i=0;t>i;++i)if(e[i].type===a.CHART_TYPE_HEATMAP){e[i]=this.reformOption(e[i]);var o=new n(e[i]),s=o.getCanvas(e[i].data,this.zr.getWidth(),this.zr.getHeight()),l=new r({position:[0,0],scale:[1,1],hoverable:this.option.hoverable,style:{x:0,y:0,image:s,width:s.width,height:s.height}});this.shapeList.push(l)}this.addShapeList()}},o.inherits(t,i),e("../chart").define("heatmap",t),t});var n=t("zrender");n.tool={color:t("zrender/tool/color"),math:t("zrender/tool/math"),util:t("zrender/tool/util"),vector:t("zrender/tool/vector"),area:t("zrender/tool/area"),event:t("zrender/tool/event")},n.animation={Animation:t("zrender/animation/Animation"),Cip:t("zrender/animation/Clip"),easing:t("zrender/animation/easing")};var a=t("echarts");a.config=t("echarts/config"),a.util={mapData:{params:t("echarts/util/mapData/params")}},t("echarts/chart/line"),t("echarts/chart/bar"),t("echarts/chart/scatter"),t("echarts/chart/k"),t("echarts/chart/pie"),t("echarts/chart/radar"),t("echarts/chart/chord"),t("echarts/chart/force"),t("echarts/chart/map"),t("echarts/chart/gauge"),t("echarts/chart/funnel"),t("echarts/chart/eventRiver"),t("echarts/chart/venn"),t("echarts/chart/treemap"),t("echarts/chart/tree"),t("echarts/chart/wordCloud"),t("echarts/chart/heatmap"),e.echarts=a,e.zrender=n}(window); \ No newline at end of file diff --git a/src/main/websrc/js/login/failure.js b/src/main/websrc/js/login/failure.js new file mode 100644 index 0000000..b71bc51 --- /dev/null +++ b/src/main/websrc/js/login/failure.js @@ -0,0 +1,40 @@ +(function(){ + angular.module("app.login") + .controller("failureCtrl",["$scope","UtilService","$http","$interval","$location",failureCtrl]); + + function failureCtrl($scope,UtilService,$http,$interval,$location){ + //loading加载 + $scope.showLoading = function(){ + document.getElementById("sysLoad").style.display = "block"; + } + $scope.hideLoading = function(){ + document.getElementById("sysLoad").style.display = "none"; + } + $scope.hasReged = true; + $scope.failureType =1; + $scope.registerMessage = $location.search().message; + $scope.registerFlag = $scope.registerMessage.substring(0,1); + $scope.registerId = $scope.registerMessage.substring(1,100); + $http.get("api/reged/find/"+$scope.registerId).success(function(data){ + $scope.registerEmail = data.content.email; + }); + + $scope.sendAgain = function(){ + $scope.failureType = 2; + $http.get("api/reged/sendeactivemail/"+$scope.registerId+"/"+$scope.registerFlag).success(function(data){ + $scope.hideLoading(); + if(data.content == "success"){ + UtilService.setCookie("regId",$scope.registerId,7); + UtilService.setCookie("regFlag",$scope.registerFlag,7); + UtilService.setCookie("regEmail",$scope.registerEmail,7); + window.location.href = "activation.html"; + } + else{ + $scope.failureText = "重新激活发送失败"; + } + }); + + } + + } +})(); \ No newline at end of file diff --git a/src/main/websrc/js/login/forget.js b/src/main/websrc/js/login/forget.js new file mode 100644 index 0000000..5e6a273 --- /dev/null +++ b/src/main/websrc/js/login/forget.js @@ -0,0 +1,121 @@ +(function(){ + angular.module("app.login") + .controller("forgetCtrl",["$scope","UtilService","$http","$interval","$location",forgetCtrl]); + + function forgetCtrl($scope,UtilService,$http,$interval,$location){ + //loading加载 + $scope.showLoading = function(){ + document.getElementById("sysLoad").style.display = "block"; + } + $scope.hideLoading = function(){ + document.getElementById("sysLoad").style.display = "none"; + } + $scope.hasReged = true; + $scope.forgettype = 'forget'; + $scope.newNoRegister = false; + $scope.save = function(){ + var par = { + email: $scope.email + }; + var verPar = { + email: { + key: 'email', + max:48, + val: par.email, + txt:"邮箱最长48位" + } + } + var reg = /^([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.|\-]?)*[a-zA-Z0-9]+\.[a-zA-Z]{1,63}$/; + $scope.tip = formJudge(verPar); + if($scope.email == undefined || $scope.email == ""){ + if ($scope.tip.succ == true) { + $scope.tip.succ = false; + } + $scope.tip.email = { + status:true, + txt:"必填" + } + } + if($scope.email != undefined && $scope.email != "" && !reg.test($scope.email)){ + if ($scope.tip.succ == true) { + $scope.tip.succ = false; + } + $scope.tip.email = { + status:true, + txt:"请输入正确的邮箱格式" + } + } + if($scope.email == 'admin@reyun.com' || $scope.email == 'demo@reyun.com'){ + if ($scope.tip.succ == true) { + $scope.tip.succ = false; + } + $scope.tip.email = { + status:true, + txt:"该账号密码不可修改" + } + } + if ($scope.tip.succ != true) { + return false; + } + $scope.errorMessage = ""; + $scope.showLoading(); + $http.get("/api/reged/sendforgetpwdemail?email="+$scope.email).success(function(data){ + $scope.hideLoading(); + if(data.content.message == "账号不存在"){ + $scope.tip = { + email:{ + status:true, + txt:"邮箱未注册过账号" + } + }; + }else if(data.content.message == "success"){ + $scope.forgettype = 'success'; + }else if(data.content.message == "newuser not actived"){ + $scope.registerId = data.content.id; + $scope.noActive = 1; + UtilService.setCookie("regId",data.content.id,7); + UtilService.setCookie("regEmail",$scope.email,7); + UtilService.setCookie("regFlag",0,7); + }else if(data.content.message == "new subAccount"){ + $scope.noActive = 1; + $scope.newNoRegister = true; + }else{ + $scope.tip = { + email:{ + status:true, + txt:"邮件发送失败" + } + }; + } + }); + } + + $scope.noActive = 0; + $scope.closeWin = function(){ + $scope.noActive = 0; + $scope.loginSend = 'yes'; + } + $scope.loginSend = 'yes'; + $scope.sendAgain = function(){ + $scope.loginSend = 'no'; + /*var sendPM = HttpService.getInfo("reged/sendeactivemail/"+$scope.registerId+"/"+0); + sendPM.then(function(data){ + window.location.href = "activation.html"; + });*/ + $http.get("/api/reged/sendeactivemail/"+$scope.registerId+"/"+0).success(function(data){ + window.location.href = "activation.html"; + }); + } + + $scope.loginEmail = function(){ + var mail = $scope.email.split("@"); + window.open("http://mail."+mail[1]); + } + $scope.keyEvt= function(e){ + if(e.keyCode == 13){ + $scope.save(); + } + } + + } +})(); \ No newline at end of file diff --git a/src/main/websrc/js/manage/activityevent.js b/src/main/websrc/js/manage/activityevent.js new file mode 100644 index 0000000..c1852e9 --- /dev/null +++ b/src/main/websrc/js/manage/activityevent.js @@ -0,0 +1,236 @@ +(function(){ + angular.module("app.manage") + .controller("activityeventCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$state","$timeout","$stateParams",activityeventCtrl]) + .controller("activityeventDetailCtrl",["$scope","$rootScope","HttpService","ToolService","UtilService","$q","$state","$stateParams","$timeout",activityeventDetailCtrl]); + + function activityeventCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$state,$timeout,$stateParams){ + $scope.query = function(){ + var eventPM = HttpService.getInfo("mng/virtual/find/"+$scope.appid); + ToolService.showLoading(); + eventPM.then(function(data){ + ToolService.hideLoading(); + $scope.eventList = data; + }); + } + $scope.$watch("appid",function(n){ + if(angular.isDefined(n)){ + $scope.query(); + } + }); + + $scope.$on('flipinfo',function(e,msg){ + $scope.flipPage = msg; + }); + + $scope.onUser = function(id){ + ToolService.showLoading(); + var userPM = HttpService.putInfo("mng/virtual/find/"+id+"/enable"); + userPM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips("启用成功") + $scope.query(); + }); + } + $scope.offUser = function(id){ + var userPM = HttpService.putInfo("mng/virtual/find/"+id+"/disable"); + ToolService.showLoading(); + userPM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips("停用成功") + $scope.query(); + }); + } + + $scope.gopage = function(info){ + if(angular.isDefined(info)){ + $state.go("collect.activityeventDetail",{aid:info}); + }else{ + $state.go("collect.activityeventDetail"); + } + } + } + + function activityeventDetailCtrl($scope,$rootScope,HttpService,ToolService,UtilService,$q,$state,$stateParams,$timeout){ + var editInfo = $stateParams.aid; + $scope.title = editInfo?"编辑虚拟事件":"新建虚拟事件"; + $scope.inputdis = false; + if(editInfo == null){ //新建虚拟事件 + editInfo = {eventList:[],type:'userdefine'}; + $scope.specialEvents = []; + $scope.name = ""; + } + else{ + $scope.name = editInfo.ch_name; + if(editInfo.type == 'userdefine'){ //虚拟事件 + $scope.specialEvents = []; + } + else{//活跃事件 + $scope.inputdis = true; + if($scope.isweb){ + $scope.specialEvents = ["pageview"]; + } + else{ + $scope.specialEvents = ["loggedin","reged","payment"]; + } + } + } + + + var listId = editInfo.id; + var chooseStr = editInfo.eventList; + $scope.$watch("appid",function(n){ + if(angular.isDefined(n)){ + $scope.query(); + } + }); + + /*var noFalse = []; + $scope.eventList.filter(function(item){ + if(item.status == true){ + noFalse.push(item); + } + });*/ + + $scope.query = function(){ + var url = ""; + if(editInfo!=null && editInfo.type != 'userdefine'){ + url = "mng/virtual/unselect/"+$scope.appid; + } + else{ + url = "mng/event/find/"+$scope.appid; + } + var eventPM = HttpService.getInfo(url); + ToolService.showLoading(); + eventPM.then(function(data){ + ToolService.hideLoading(); + + $scope.eventList = data.filter(function(item){ + if(item.status == true){ + if(chooseStr.indexOf(item.eventName) > -1 || $scope.specialEvents.indexOf(item.eventName)>-1){ + item.ischeck = true; + } + else{ + item.ischeck = false; + } + } + return item.status == true; + }); + }); + } + + + var chooseNum = 0,max = 5; + $scope.chooseItem = function(info){ + chooseNum = 0; + for(var i = 0; i < $scope.eventList.length; i++){ + if($scope.eventList[i].ischeck == true){ + chooseNum = chooseNum + 1; + } + } + if(chooseNum < max){ + info.ischeck = true; + } + else{ + ToolService.showTips("最多可以选择"+max+"个"); + } + + } + $scope.cancelItem = function(info){ + if($scope.specialEvents.indexOf(info.eventName)>-1){ + info.ischeck = true; + }else{ + info.ischeck = false; + } + } + $scope.selectAllEvent = function(){ + if($scope.eventList.length > max){ + ToolService.showTips("最多可以选择"+max+"个"); + } + else{ + $scope.selAll = !$scope.selAll; + $scope.eventList.filter(function(item){ + if($scope.specialEvents.indexOf(item.eventName)>-1){ + item.ischeck = true; + }else{ + item.ischeck = $scope.selAll; + } + }); + } + } + + $scope.save = function(){ + var chooseList = []; + for(var i = 0; i < $scope.eventList.length; i++){ + if($scope.eventList[i].ischeck == true){ + chooseList.push($scope.eventList[i].eventName); + } + } + var params = { + ch_name : $scope.name, + eventList : chooseList.join(",") + }; + + $scope.tip = {},error = false; + var verPar = { + name: { + key: 'spcname2', + val: params.ch_name, + txt: "含非法字符或过长(支持输入汉字、大小写字母、数字、下划线,长度限制40字符以内)" + } + }; + $scope.tip = formJudge(verPar); + if($scope.tip.succ != true) { + error = true; + } + + if(chooseList.length<2){ + $scope.tip.moreparams = { + status:true, + txt:'请至少选择2个事件' + } + return false; + } + if(error){return false;} + + var savePM = null,txt = "保存成功"; + if(listId){ + params.id = listId; + params.type = editInfo.type; + savePM = HttpService.putInfo("mng/virtual/update/"+$scope.appid,params); + } + else{ + txt = "新建成功"; + savePM = HttpService.postInfo("mng/virtual/userdefined/"+$scope.appid,params); + } + ToolService.showLoading(); + savePM.then(function(data){ + ToolService.hideLoading(); + if(data.code == -6001){ + $scope.tip.name = { + status:true, + txt:'名称重复' + } + ToolService.showTips("名称重复"); + } + else{ + $scope.cancel(); + ToolService.showTips(txt); + } + },function(data){ + ToolService.hideLoading(); + if(data.code == -6001){ + $scope.tip.name = { + status:true, + txt:'名称重复' + } + ToolService.showTips("名称重复"); + } + }); + } + + $scope.cancel = function(){ + $state.go("collect.activityevent"); + } + } +})(); + \ No newline at end of file diff --git a/src/main/websrc/js/manage/app.js b/src/main/websrc/js/manage/app.js new file mode 100644 index 0000000..887bc92 --- /dev/null +++ b/src/main/websrc/js/manage/app.js @@ -0,0 +1,483 @@ +(function(){ + angular.module("app.manage") + .controller("appCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$state","$timeout",appCtrl]) + .controller("appDetailCtrl",["$scope","$rootScope","HttpService","ToolService","UtilService","$q","$state","$stateParams","$filter","$timeout",appDetailCtrl]); + + var isLog = false; //标识是不是从列表直接进入到调试界面 + function appCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$state,$timeout){ + $scope.isDemo = ToolService.isDemoUser(); + + $scope.$on('flipinfo',function(e,msg){ + $scope.flipPage = msg; + }); + $scope.specialsAppkey = [ + "e31caee07ebedf8c172267e73204802f", + "f4c6764d10bec9a3c4bd4f79a442a947", + "022da4f8bd53ac212141bd7fdfa9532d", + "5eb29a7e239537f4bedef93f8289d1c6", + "e0b3000ebd3f54b791a405f68d3e520c"]; + $scope.doRemove = function(id){ + $scope.delstatus = true; + $scope.delId = id; + } + $scope.removeInfo = function(){ + var removePM = HttpService.deleteInfo("mng/app/delete/"+$scope.delId); + ToolService.showLoading(); + removePM.then(function(data){ + ToolService.hideLoading(); + $scope.delstatus = false; + ToolService.showTips("删除成功") + $scope.$emit("f5Applist",true); + }); + } + $timeout(function(){ + var clipboard = new Clipboard('.copyBtn'); + clipboard.on('success', function(e) { + $scope.$apply(function(){ + ToolService.showTips("复制成功"); + }); + }); + clipboard.on('error', function(e) { + $scope.$apply(function(){ + ToolService.showTips("复制失败"); + }); + }); + },200); + //启用停用 + $scope.onOff = function(id,flag){ + var url = "mng/app/enable/"+id,tipmsg = "启用成功"; + if(flag && flag==1){ + url = "mng/app/forbidden/"+id; + tipmsg = "停用成功"; + } + var userPM = HttpService.putInfo(url,{}); + ToolService.showLoading(); + userPM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips(tipmsg) + $scope.$emit("f5Applist",true); + }); + } + + $scope.gopage = function(id,flag){ + if(flag){ + isLog = true; + } + else{ + isLog = false; + } + if(angular.isDefined(id)){ + $state.go("collect.appDetail",{aid:id}); + }else{ + $state.go("collect.appDetail"); + } + } + + $scope.goReport = function(info){ + $rootScope.isweb = info.platform == 'H5'; + $scope.$emit("mngappTo",info.id); + + var url = $rootScope.firstMeau.substring(1).replace('/','.'); + $state.go(url); + } + } + + function appDetailCtrl($scope,$rootScope,HttpService,ToolService,UtilService,$q,$state,$stateParams,$filter,$timeout){ + var infoId = $scope.infoId = $scope.id = $stateParams.aid; + $scope.isLog = isLog; + + var boundOldID = "",oldName = ""; + + var gameTypeId = 38; + + if(!$scope.isLog){ + var typePM = HttpService.getInfo("mng/app/find/getcategorys"); + typePM.then(function(data){ + var typeArr = [],gameArr = []; + data.filter(function(item){ + item.name = item.categoryname; + if(item.isgame == 1){ + gameArr.push(item); + }else{ + typeArr.push(item); + } + }); + $scope.typeList = typeArr; + $scope.gameList = gameArr; + + $scope.appGenreInit = $scope.typeList[0].categoryid; + $scope.gameGenreInit = $scope.gameList[0].categoryid; + }); + } + $scope.downloadsdk = function(){ + } + $scope.$on("appGenre",function(e,msg){ + $scope.showGame = msg.info.categoryid == gameTypeId; + $scope.appGenre = msg.info.categoryid; + + $scope.appGenreName = msg.info.categoryname; + }); + $scope.$on("gameGenre",function(e,msg){ + $scope.gameGenre = msg.info.categoryid; + $scope.gameGenreName = msg.info.categoryname; + }); + + $scope.ckSync = function(){ + $scope.sync = !$scope.sync; + + if($scope.sync == true){ + ToolService.showTips("所有推广活动的下载地址将同步更新。",2000); + } + } + var init = function(){ + if(infoId!=null){ + if($scope.isLog){ + $scope.stepflag = 3; + } + else{ + $scope.stepflag = 1; + } + var editPM = HttpService.getInfo("mng/app/find/"+infoId); + ToolService.showLoading(); + editPM.then(function(data){ + $scope.platform = data.platform; + $scope.name = oldName = data.name; + $scope.url = data.url; + $scope.appkey = data.appkey; + // $scope.sync = data.sync; + $scope.sync = false; + $scope.bundleid = boundOldID = data.bundleid; + + if($scope.stepflag == 3){ + ToolService.hideLoading(); + $scope.queryLogInfo(); + } + }); + if($scope.stepflag == 1){ + $q.all([typePM,editPM]).then(function(data){ + ToolService.hideLoading(); + var info = data[1]; + $scope.appGenreInit = info.appGenre; + $scope.gameGenreInit = info.gameGenre; + }); + } + }else{ + $scope.stepflag = 1; + $scope.platform = 'iOS'; + $scope.sync = false; + } + } + init(); + + $scope.nameHas = false; + $scope.exixtName = function(){ + if(!$scope.tip){ + $scope.tip = {}; + } + if($scope.judgeNameChange(oldName,$scope.name)){ + ToolService.showLoading(); + var existPM = HttpService.getInfo("mng/app/validname",{name:$scope.name}); + existPM.then(function(data){ + ToolService.hideLoading(); + if(data==true){ + $scope.tip.name = { + status:true, + txt : "名称已存在" + }; + $scope.nameHas = true; + } + else{ + $scope.tip.name = { + status:false + }; + $scope.nameHas = false; + } + }); + } + else{ + $scope.tip.name = { + status:false + }; + $scope.nameHas = false; + } + } + + $scope.bundleHas = false; + $scope.existBundleid = function(flag){ + if(!$scope.tip){ + $scope.tip = {}; + } + if($scope.judgeNameChange(boundOldID,$scope.bundleid)){ + ToolService.showLoading(); + var existPM = HttpService.getInfo("mng/app/valid",{name:$scope.bundleid}); + existPM.then(function(data){ + ToolService.hideLoading(); + if(data==true){ + $scope.tip.bundleid = { + status:true, + txt : "bundleid已存在" + }; + $scope.bundleHas = true; + } + else{ + $scope.tip.bundleid = { + status:false + }; + $scope.bundleHas = false; + } + }); + } + else{ + $scope.tip.bundleid = { + status:false + }; + $scope.bundleHas = false; + } + } + + $scope.save = function(){ + if($scope.nameHas || $scope.bundleHas){ + return false; + } + var par = { + platform: $scope.platform, + name: $scope.name, + appGenre: $scope.appGenre, + sync: $scope.sync, + url: $scope.url + }; + if($scope.appGenre == gameTypeId){ + par.gameGenre = $scope.gameGenre; + }else{ + par.gameGenre = -1; + } + + var verPar = { + name: { + key: 'nameFormat', + val: $scope.name + }, + url: { + key: 'url', + val: $scope.url, + txt:"以http://或https://开头的合法url" + } + }; + + if($scope.platform=='iOS'){ + par["bundleid"] = $scope.bundleid; + verPar.bundleid = { + key : "num", + min : 9, + max : 10, + val : $scope.bundleid, + txt : '请输入9-10位数字' + } + } + + $scope.tip = formJudge(verPar); + if ($scope.tip.succ != true) { + ToolService.showTips($scope.formTipMsg); + return false; + } + + var savePM = null,txtTips = "添加成功"; + if(infoId!=null){ + par.id = infoId; + savePM = HttpService.putInfo("mng/app/update",par); + txtTips = "修改成功"; + }else{ + savePM = HttpService.postInfo("mng/app/create",par); + } + ToolService.showLoading(); + savePM.then(function(data){ + if(infoId!=null){ + ToolService.hideLoading(); + ToolService.showTips(txtTips); + $scope.cancel(); + }else{ + $scope.$emit("f5Applist",1); + $scope.id = data.id; + $scope.name = data.name; + $scope.appkey = data.appkey; + ToolService.hideLoading(); + $scope.stepflag = 2; + } + }); + } + + $scope.cancel = function(){ + $scope.$emit("f5Applist",true); + $state.go("collect.app"); + } + + $scope.changeStep = function(){ + if($scope.stepflag == 3){ + $scope.stepflag = 2; + } + } + + $scope.deviceList = [{'id':1,name:"全部设备"}]; + $scope.deviceInit = $scope.deviceList[0].id; + $scope.$on("deviceId",function(e,msg){ + if(msg.info.id == 1){ + $scope.deviceTxt = ""; + } + else{ + $scope.deviceTxt = msg.info.id; + } + }); + + var getV = function(v){ + if(UtilService.isNullStr(v)){ + return ""; + } + else{ + return v; + } + } + $scope.queryLogInfo = function(){ + $scope.logFlag = 0; + ToolService.showLoading(); + var testPM = HttpService.getInfo("mng/app/debug/event/list/"+$scope.id), + logPM = HttpService.getInfo("mng/app/debug/log/list/"+$scope.id), + totalPM = HttpService.getInfo("mng/app/debug/device/list/"+$scope.id); + + $scope.hasZeroEvt = 0; + $q.all([testPM,logPM,totalPM]).then(function(data){ + $scope.testInfos = data[0]; + $scope.testInfos.filter(function(item){ + if($scope.platform=="H5"){ + if(['pageview'].indexOf(item.eventName)>-1 && item.eventNumber==0){ + $scope.hasZeroEvt ++; + } + }else{ + if(['startup','install'].indexOf(item.eventName)>-1 && item.eventNumber==0){ + $scope.hasZeroEvt ++; + } + } + + }); + var logs = data[1]; + logs.map(function(item){ + item.xcontext = JSON.parse(item.xcontext); + + item.xcontext.osname = getV(item.xcontext._ryos || item.xcontext._os) + '' + getV(item.xcontext._ryosversion); + item.xcontext.channel = item.xcontext._campaignid || item.xcontext.channelid; + item.deviceId = item.xcontext._deviceid; + + item._network_type = item.xcontext._network_type || item.xcontext._network; + item._model = item.xcontext._model || item.xcontext._devicetype; + }); + $scope.logInfos = logs; + $scope.totalInfos = data[2]; + + var devList = [{'id':1,name:"全部设备"}]; + $scope.totalInfos.filter(function(item){ + devList.push({id:item.deviceId,name:item.deviceId}); + }); + $scope.deviceList = devList; + ToolService.hideLoading(); + }); + } + $scope.getPlatClass = function(plat){ + var plat = $filter("lowercase")(plat); + return {'ios':'apple','android':'android','h5':'web'}[plat]; + } + $scope.nextStep = function(){ + $scope.cancel(); + // $scope.stepflag = 3; + // $scope.queryLogInfo(); + } + $scope.lookEvents = function(info){ + $scope.eventDetails = [ + {name:'时间',key:'xwhen'}, + {name:'设备ID',key:'_deviceid',second:true}, + {name:'APPKEY',key:'',value:$scope.appkey}, + {name:'应用名称',key:'',value:$scope.name}, + {name:'分包渠道',key:'channel',second:true}, + {name:'系统',key:'osname',second:true}, + {name:'机型',key:'_model'}, + {name:'分辨率',key:'_resolution',second:true}, + {name:'网络',key:'_network_type'}, + {name:'SDK版本',key:'_lib_version',second:true}, + {name:'事件ID',key:'xwhat',isevent:true}, + {name:'事件名称',key:'eventName'} + ]; + $scope.curEvtLogInfo = info; + + $scope.logFlag = 1; + ToolService.showAlp(); + angular.element(document).on("click",function(){ + $scope.$apply(function(){ + $scope.hideDetails(); + }); + }); + } + $scope.commonParams = null; + $scope.lookParams = function(info){ + var getEventParams = function(){ + var xcontext = $scope.curEvtLogInfo.xcontext; + var myparams = []; + for(var k in xcontext){ + var temp = {'name':k,'value':xcontext[k],sortId:100}; + if(k.indexOf("_")==0){ + var ccc = $scope.commonParams[k]; + if(ccc){ + temp.name = ccc.alias; + temp.sortId = ccc.sortId; + } + myparams.push(temp); + } + else{ + myparams.push(temp); + } + } + UtilService.sortArray(myparams); + $scope.paramsList = myparams; + $scope.logFlag = 2; + } + if($scope.commonParams != null){ + getEventParams(); + } + else{ + ToolService.showLoading(); + var evtPM = HttpService.getInfo("mng/app/debug/find/common"); + evtPM.then(function(data){ + ToolService.hideLoading(); + var json = {}; + data.filter(function(item){ + json[item.param] = item; + }); + $scope.commonParams = json; + getEventParams(); + }); + } + } + + $scope.hideDetails = function(){ + ToolService.hideAlp(); + $scope.logFlag = 0; + } + $scope.finisStep = function(){ + ToolService.showLoading(); + var finshPM = HttpService.putInfo("mng/app/debug/complete/"+$scope.id); + finshPM.then(function(data){ + $scope.cancel(); + }); + } + $timeout(function(){ + var clipboard = new Clipboard('.sdkAppid'); + clipboard.on('success', function(e) { + $scope.$apply(function(){ + ToolService.showTips("复制成功"); + }); + }); + clipboard.on('error', function(e) { + $scope.$apply(function(){ + ToolService.showTips("复制失败"); + }); + }); + },200); + } +})(); diff --git a/src/main/websrc/js/manage/auth.js b/src/main/websrc/js/manage/auth.js new file mode 100644 index 0000000..0b69131 --- /dev/null +++ b/src/main/websrc/js/manage/auth.js @@ -0,0 +1,379 @@ +(function(){ + angular.module("app.manage") + .controller("authCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$state",authCtrl]) + .controller("authDetailCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$q","$state","$stateParams",authDetailCtrl]); + + function authCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$state){ + + $scope.demoUSuper = UtilService.getCookie("ryioUname") == 'demoadmin@reyun.com'; + $scope.deviceList = [ + {id:1,name:"已启用"}, + {id:2,name:"已停用"} + ]; + $scope.deviceInit = $scope.deviceList[0].id; + $scope.$on("deviceId",function(e,msg){ + $scope.seeFlag = msg.info.id; + if( $scope.seeFlag == 1){ + $scope.findName = 'enable'; + }else{ + $scope.findName = 'disable'; + } + + $scope.query(); + }); + if(!$rootScope.accountFlag){ + $rootScope.accountFlag = "account"; + } + + $scope.query = function(flag){ + if(flag){ + $rootScope.accountFlag = flag; + $rootScope.thirdtab = '子账号管理'; + } + if(angular.isUndefined($scope.findName)){return false;} + + $scope.authList = []; + var authPM = HttpService.getInfo("mng/auth"+$scope.getSuburl()+"/list/"+$scope.findName); + ToolService.showLoading(); + authPM.then(function(data){ + ToolService.hideLoading(); + $scope.authList = data; + }); + } + $scope.query(); + + $scope.$on('flipinfo',function(e,msg){ + $scope.flipPage = msg; + }); + + $scope.onUser = function(id){ + ToolService.showLoading(); + var userPM = HttpService.putInfo("mng/auth"+$scope.getSuburl()+"/"+id+"/enable"); + userPM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips("启用成功"); + $scope.query(); + }); + } + $scope.offUser = function(id){ + var userPM = HttpService.putInfo("mng/auth"+$scope.getSuburl()+"/"+id+"/disable"); + ToolService.showLoading(); + userPM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips("停用成功"); + $scope.query(); + }); + } + $scope.deleteAuth = function(d){ + $scope.delInfo = d; + $scope.wantDelete = true; + ToolService.showAlp(); + } + $scope.doDelete = function(){ + $scope.closeWin(); + ToolService.showLoading(); + var deletePM = HttpService.deleteInfo("mng/auth/"+$scope.delInfo.id+"/delete"); + deletePM.then(function(){ + ToolService.showTips("删除成功"); + ToolService.hideLoading(); + $scope.query(); + }); + } + $scope.sendEmailAgain = function(send){ + var sendPM = HttpService.postInfo("mng/auth/mail/"+send.id+"/resend"); + ToolService.showLoading(); + sendPM.then(function(data){ + ToolService.hideLoading(); + send.send = 1; + ToolService.showTips("发送成功"); + }); + } + $scope.closeWin = function(flag){ + $scope.wantDelete = false; + ToolService.hideAlp(); + } + $scope.gopage = function(info){ + if(angular.isDefined(info)){ + if(!info.valid){return false;} + + $state.go("collect.authDetail",{aid:info.id}); + }else{ + $state.go("collect.authDetail"); + } + } + $scope.getSuburl = function(){ + var suburl = ""; + if($rootScope.accountFlag == 'channel'){ + suburl = "/channel"; + } + return suburl; + } + $scope.isdetail = false; + $scope.showDetails = function(info){ + $scope.detailInfo = info; + ToolService.showAlp(); + $scope.isdetail = true; + angular.element(document).on("click",function(){ + $scope.$apply(function(){ + $scope.hideDetails(); + }); + }); + } + $scope.hideDetails = function(){ + ToolService.hideAlp(); + $scope.isdetail = false; + } + } + var copyArray = function(arr){ + return $.extend(true, [], arr); + } + function authDetailCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$q,$state,$stateParams){ + + var infoId = $scope.id = $stateParams.aid; + + $scope.$watch("applistInfo",function(data){ + if(angular.isDefined(data)){ + $scope.authapplist = copyArray(data); + if($scope.isAppManage && !UtilService.isNullStr(infoId)){ + var hasAuthAppsPM = HttpService.getInfo("app/find/"+infoId+"/AuthApp"); + hasAuthAppsPM.then(function(data){ + $scope.init(data); + }); + } + else{ + $scope.init(); + } + } + }); + + $scope.init = function(otherpowers){ + if(!UtilService.isNullStr(infoId)){ + ToolService.showLoading(); + var accountPM = HttpService.getInfo("mng/auth/"+infoId+"/find"); + accountPM.then(function(data){ + ToolService.hideLoading(); + + $scope.accountInfo = data; + $scope.email = $scope.oldEmail = data.email; + $scope.name = data.name; + $scope.remark = data.remark; + $scope.parentRole = data.parentRole; + if(UtilService.isNullStr(data.name)){ + $scope.nameNofix = false; + }else{ + $scope.nameNofix = true; + } + $scope.roleCategory = data.roleCategory; + + if($scope.roleCategory == 2){ + $scope.authapplist = copyArray($scope.appAlllistInfo); + } + else{ + $scope.authapplist = copyArray($scope.applistInfo); + } + + if($scope.isAppManage){ + var appids = []; + $scope.authapplist.filter(function(item){ + appids.push(item.id); + }); + otherpowers.filter(function(item){ + if(appids.indexOf(item.id)==-1){ + item.nopower = true;//当前子应用没有该app权限 + $scope.authapplist.push(item); + } + }); + } + + var authStr = data.authList; + authStr.filter(function(power){ + for(var i=0;i<$scope.authapplist.length;i++){ + var appinfo = $scope.authapplist[i]; + if(appinfo.id == power.app){ + $scope.authapplist[i].ischeck = true; + break; + } + } + }); + + $scope.steps = 1; + if($scope.roleCategory == 1){ + $scope.steps = 0; + $scope.maxstep = 0; + } + else if($scope.roleCategory == 2){//子应用管理员 + $scope.maxstep = 1; + } + }); + } + } + + $scope.steps = 0; + $scope.maxstep = 0; + $scope.changeRole = function(flag){ + switch(flag){ + case 1: //管理员 + $scope.steps = 0; + $scope.maxstep = 0; + break; + case 2: //子应用管理员 + $scope.steps = 1; + $scope.maxstep = 1; + break; + default: + break; + } + + if(flag == 2){ //子应用管理员可以赋予未调式的产品 + $scope.authapplist = copyArray($scope.appAlllistInfo); + } + else{ + $scope.authapplist = copyArray($scope.applistInfo); + } + + $scope.roleCategory = flag; + } + $scope.getTips = function(app){ + if(app.nopower){ + return "该应用权限由管理员添加,您无此应用权限"; + } + else{ + return ""; + } + } + //全选操作 + $scope.doCheck = function(k){ + var bol = $scope.isAllCheck = !$scope.isAllCheck; + + if(k == 'app'){ //选择应用时的全选 + $scope.authapplist.filter(function(item){ + if(!item.nopower){ + item.ischeck = bol; + } + }); + } + } + + $scope.isAllCheck = false; + //第一步选择app + $scope.selectApp = function(app){ + app.ischeck = true; + var checkbol = true; + for(var i=0;i<$scope.authapplist.length;i++){ + var item = $scope.authapplist[i]; + if(!item.nopower && !item.ischeck){ + checkbol = false; + break; + } + } + $scope.isAllCheck = checkbol; + } + $scope.removeApp = function(app){ + if(app.nopower){return false;} + + app.ischeck = false; + $scope.isAllCheck = false; + } + + $scope.nameNofix = false; + $scope.save = function(){ + var par = { + "email":$scope.email, + "name":$scope.name, + "roleCategory":$scope.roleCategory, + "remark":$scope.remark + }; + var verPar = { + email:{ + key:"email", + val:par.email, + nullTxt:"请填写邮箱" + }, + name:{ + key:"numLetter", + val:par.name, + nullTxt:"请填写姓名", + max:20, + txt:"请输入20位以内的中英文或数字" + } + }; + if(!UtilService.isNullStr(par.remark)){ + verPar.remark = { + key:'nameLen', + val:par.remark, + max:200, + txt:'最多可输入100字' + } + } + + $scope.tip = formJudge(verPar); + if($scope.tip.succ != true) { + ToolService.showTips($scope.formTipMsg); + return false; + } + else if(!$scope.roleCategory){ + ToolService.showTips("请选择角色"); + return false; + } + + if($scope.roleCategory ==2 ){ + var appAuth = []; + $scope.authapplist.filter(function(item){ + if(item.ischeck){ + appAuth.push({app:item.id}); + } + }); + + if(appAuth.length == 0){ + ToolService.showTips("请选择应用"); + return false; + } + par.authList = appAuth; + } + + var savePM = null,txtTips = "已为该账号发送激活邮件,请在72小时内联系相关人员激活并设置密码"; + if(infoId!=null){ + par.id = infoId; + savePM = HttpService.putInfo("mng/auth"+$scope.getSuburl()+"/"+infoId+"/update",par); + txtTips = "修改成功"; + } + else{ + savePM = HttpService.postInfo("mng/auth"+$scope.getSuburl()+"/create",par); + } + ToolService.showLoading(); + savePM.then(function(data){ + if(data.code == -6001){ + ToolService.hideLoading(); + ToolService.showTips("该邮箱已创建"); + } + else if(data.code == -300){ + ToolService.hideLoading(); + ToolService.showTips("最多可添加3个管理员"); + } + else{ + ToolService.hideLoading(); + ToolService.showTips(txtTips); + $scope.cancel(); + } + },function(data){ + if(data.code == -6001){ + ToolService.hideLoading(); + ToolService.showTips("该邮箱已创建"); + }else if(data.code == -300){ + ToolService.hideLoading(); + ToolService.showTips("最多可添加3个管理员"); + } + }); + } + $scope.getSuburl = function(){ + var suburl = ""; + if($scope.accountFlag == 'channel'){ + suburl = "/channel"; + } + return suburl; + } + $scope.cancel = function(){ + $state.go("collect.auth"); + } + } +})(); diff --git a/src/main/websrc/js/manage/channel.js b/src/main/websrc/js/manage/channel.js new file mode 100644 index 0000000..727e441 --- /dev/null +++ b/src/main/websrc/js/manage/channel.js @@ -0,0 +1,1874 @@ +(function(){ + angular.module("app.manage") + .controller("channelCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$state","$stateParams","$timeout","$location",channelCtrl]) + .controller("channelDetailCtrl",["$scope","$rootScope","HttpService","ToolService","UtilService","$q","$state","$stateParams",channelDetailCtrl]) + .controller("channelAddCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$q","$state","$stateParams",channelAddCtrl]) + .controller("channelSmCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$q","$state","$stateParams","DateService","$timeout",channelSmCtrl]) + .controller("channelAdwordsCtrl",["$rootScope","$scope","HttpService","ToolService","UtilService","$q","$state","$stateParams","DateService","$timeout",channelAdwordsCtrl]); + + function channelCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$state,$stateParams,$timeout,$location){ + if($rootScope.isSuper || $rootScope.isManage){ + $rootScope.editPower = true; + }else{ + $rootScope.editPower = false; + } + var judgeBacklist = function(){ + if($rootScope.isSuper || $rootScope.isManage){ + if($rootScope.limitInfo.abTest.blacklist == true){ + $scope.hasBlacklist = true; + }else{ + $scope.hasBlacklist = false; + } + }else{ + $scope.hasBlacklist = false; + } + } + if(angular.isDefined($rootScope.limitInfo)){ + judgeBacklist(); + } + else{ + $timeout(judgeBacklist,100); + } + + var type = $stateParams.aid; + if(!UtilService.isNullStr(type) && type != 'adwords' && type != 'smsearch' && type != 'gdt'){ + $scope.channType = type; + } + else{ + $scope.channType = 'ry_coop'; + } + $scope.pageFlag = 1;//2渠道账号列表 3新建渠道账号 + + $scope.filterTypeList = function(type){ + $scope.channType = type; + $rootScope.channeluniqueName = 'normal'; + $rootScope.thirdtab = {'ry_coop':'常规渠道','custom':'自定义渠道','ry_bd':'SEM渠道'}[type]; + $scope.query(); + } + + $scope.deviceList = [ + {id:1,name:"已启用"}, + {id:2,name:"已停用"} + ]; + $scope.deviceInit = $scope.deviceList[0].id; + $scope.$on("deviceId",function(e,msg){ + $scope.seeFlag = msg.info.id; + + if($scope.customList && $scope.channType == 'custom'){ + $scope.filterList(); + } + }); + + $scope.query = function(bol){ + var url = ''; + if($scope.channType == 'custom'){ + url = "mng/channel/find"; + if($scope.customList && !bol){ + $scope.filterList(); + return; + } + } + else{ + url = "mng/channel/find/unown"; + if($scope.coopList && !bol){ + $scope.filterList(); + return; + } + } + var channelPM = HttpService.getInfo(url); + ToolService.showLoading(); + channelPM.then(function(data){ + ToolService.hideLoading(); + if($scope.channType == 'custom'){ + $scope.customList = data; + $scope.filterList(); + } + else{ + $scope.coopList = data; + if($scope.channelType == 'ry_coop'){ + $scope.channelList = $scope.coopList.filter(function(item){ + return item.type == 'ry_bd'; + }); + }else{ + $scope.channelList = $scope.coopList.filter(function(item){ + return item.type == 'ry_coop'; + }); + } + } + $scope.filterList(); + //$scope.channelList = data; + }); + } + $scope.filterList = function(){ + if($scope.channType == 'custom'){ + $scope.channelList = $scope.customList.filter(function(item){ + if($scope.seeFlag == 1){return item.delFlag != true;} + if($scope.seeFlag == 2){return item.delFlag == true;} + }); + } + else{ + $scope.channelList = $scope.coopList.filter(function(item){ + if($scope.channType == "ry_bd"){ + return item.type == $scope.channType; + }else{ + return item.type == $scope.channType && item.category == 'ADVERTISING'; + } + + }); + } + } + $scope.query(); + + var curfilpPage = null,rmd = new Date().getTime(); + $scope.$on('flipinfo',function(e,msg){ + if(msg.listkey == 'account'){ + $scope.flipPage2 = msg; + }else if(msg.listkey == 'public'){ + $scope.flipPage = msg; + $scope.flipChange = ++ rmd; + }else{ + $scope.flipPage3 = msg; + } + }); + + $scope.doRemove = function(info){ + $scope.delId = info.id; + $scope.delInfo = info; + ToolService.showLoading(); + var prePM = HttpService.getInfo("mng/channel/delete/valid/"+$scope.delId); + prePM.then(function(data){ + ToolService.hideLoading(); + if(angular.isNumber(data) && data > 0){ + $scope.delflagStatus = 2; + $scope.campnum = data; + } + else{ + $scope.delflagStatus = 1; + } + $scope.delstatus = true; + }); + } + + $scope.removeInfo = function(){ + if($scope.delflagStatus == 2){ + $scope.delstatus = false; + return false; + } + var removePM = HttpService.deleteInfo("mng/channel/delete/"+$scope.delId); + ToolService.showLoading(); + $scope.delstatus = 0; + removePM.then(function(data){ + ToolService.hideLoading(); + + ToolService.showTips("停用成功") + $scope.query(true); + }); + } + $scope.enableInfo = function(info){ + var enablePM = HttpService.putInfo("mng/channel/enable/"+info.id); + ToolService.showLoading(); + enablePM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips("启用成功") + $scope.query(true); + }); + } + + $scope.gopage = function(info){ + if(angular.isDefined(info)){ + $state.go("collect.channelDetail",{aid:info}); + }else{ + $state.go("collect.channelDetail"); + } + } + + $scope.goGdt = function(info,flag){ + if(angular.isDefined(info)){ + info.step = flag; + $state.go("collect.channelAdd",{aid:info}); + }else{ + $state.go("collect.channelAdd"); + } + } + + $scope.goSm = function(info){ + if(angular.isDefined(info)){ + $state.go("collect.channelSm",{aid:info}); + }else{ + $state.go("collect.channelSm"); + } + } + + $scope.goAdwords = function(info,flag){ + if(angular.isDefined(info)){ + info.step = flag; + $state.go("collect.channelAdwords",{aid:info}); + }else{ + $state.go("collect.channelAdwords"); + } + } + + $scope.goSub = function(info,flag){ + $scope.curChannel = info; + if($scope.curChannel.name == 'adwords'){ + $scope.curChannel.nodeUrl = "http://doc.trackingio.com/qu-dao-pei-zhi-shuo-ming/adwords.html"; + } + if(flag){ + $scope.pageFlag = 3; + }else{ + $scope.backFlag(2); + } + + } + $scope.backFlag = function(flag){ + $scope.pageFlag = flag; + if(flag == 2){ + if($scope.curChannel == undefined){ + var subPM = HttpService.getInfo("mng/channelaccount/find/"+$scope.twoListID); + }else{ + var subPM = HttpService.getInfo("mng/channelaccount/find/"+$scope.curChannel.id); + } + ToolService.showLoading(); + subPM.then(function(data){ + ToolService.hideLoading(); + $scope.accountList = data; + }); + } + if(flag == 1){ + $scope.filterTypeList($scope.channType); + } + } + + if(($rootScope.channeluniqueName != "normal" && $rootScope.channeluniqueName != undefined && window.location.href.indexOf('channel')>-1) || type == 'adwords' || type == 'gdt' || type == 'smsearch'){ + if(type == 'adwords' || type == 'gdt' || type == 'smsearch'){ + $rootScope.channeluniqueName = type; + } + $scope.$watch("appid",function(n){ + if(angular.isDefined(n)){ + var gdtPM = HttpService.getInfo($scope.appid+"/channel/find/"+$rootScope.channeluniqueName); + gdtPM.then(function(data){ + ToolService.hideLoading(); + $scope.gdtData = data; + $scope.gdtDataId = data.id; + $scope.gdtName = data.name; + $scope.gdtUrl = data.nodeUrl; + if($rootScope.channeluniqueName == 'adwords'){ + $scope.gdtUrl = "http://doc.trackingio.com/qu-dao-pei-zhi-shuo-ming/adwords.html"; + } + }); + } + }); + $scope.$watch("gdtDataId",function(n){ + if(angular.isDefined(n)){ + $scope.pageFlag = 2; + var subPM = HttpService.getInfo("mng/channelaccount/find/"+$scope.gdtDataId); + ToolService.showLoading(); + subPM.then(function(data){ + ToolService.hideLoading(); + $scope.accountList = data; + }); + } + }); + //$rootScope.channeluniqueName = 'normal'; + } + + $scope.openUrl = function(url){ + if(url == "http://doc.trackingio.com/qu-dao-pei-zhi-shuo-ming/guang-dian-901a-lao-mo-shi.html"){ + url = "http://doc.trackingio.com/qu-dao-pei-zhi-shuo-ming/guang-dian-tong.html"; + } + window.open(url); + } + + $scope.isdetail = false; + $scope.showDetails = function(info){ + $scope.showDetailsInfo = info; + $scope.channelAlias = info.alias; + var listPM = null; + listPM = HttpService.getInfo("mng/channelaccount/app/find/"+info.id); + listPM.then(function(data){ + $scope.detailInfo = data; + }); + ToolService.showAlp(); + $scope.isdetail = true; + angular.element(document).on("click",function(){ + $scope.$apply(function(){ + $scope.hideDetails(); + }); + }); + } + $scope.hideDetails = function(){ + ToolService.hideAlp(); + $scope.isdetail = false; + } + + $scope.changeAccoutStatus = function(info,flag){ + var url = "",txt = ""; + if(flag == 1){ + url = "mng/channelaccount/forbidden/"+info.id; + txt = "停用成功"; + } + else{ + url = "mng/channelaccount/enable/"+info.id; + txt = "启用成功"; + } + + var enablePM = HttpService.putInfo(url); + ToolService.showLoading(); + enablePM.then(function(data){ + $scope.twoListID = data.channel; + ToolService.hideLoading(); + ToolService.showTips(txt) + $scope.backFlag(2); + }); + } + /*var oldname = ""; + $scope.subDetail = {}; + $scope.goSubDetail = function(info){ + $scope.pageFlag = 3; + $scope.tip = {}; + if(info){//编辑 + $scope.subDetail = info; + $scope.channelname = info.name; + $scope.channelpwd = info.password; + $scope.channeluname = oldname = info.alias; + $scope.channelRebate = info.rebate; + } + else{ + $scope.subDetail = {}; + $scope.channelname = ""; + $scope.channelpwd = ""; + $scope.channeluname = oldname = ""; + $scope.channelRebate = ""; + } + }*/ + //判断名称是否存在 + $scope.existName = function(flag){ + if($scope.judgeNameChange(oldname,$scope.channeluname)){ + ToolService.showLoading(); + var namePM = HttpService.getInfo("mng/channelaccount/valid",{name:$scope.channeluname}); + namePM.then(function(data){ + if(!$scope.tip){ + $scope.tip = {}; + } + ToolService.hideLoading(); + if(data!=true){//存在 + $scope.tip = { + channeluname:{ + status:true, + txt:"渠道账号别名已存在" + } + } + } + else{ + $scope.tip = { + channeluname:{ + status:false + } + } + if(flag && flag == 1){ + $scope.saveChannelUser(); + } + } + }); + } + else{ + $scope.tip = { + channeluname:{ + status:false + } + } + if(flag && flag == 1){ + $scope.saveChannelUser(); + } + } + } + $scope.saveChannelUser = function(){ + var par = { + name: $scope.channelname, + password: $scope.channelpwd, + alias: $scope.channeluname, + rebate:$scope.channelRebate, + channel:$scope.curChannel.id + }; + var verPar = { + channelname: { + key: 'isNull', + val: $scope.channelname + }, + channelpwd: { + key: 'isNull', + val: $scope.channelpwd + }, + channeluname: { + key: 'username', + val: $scope.channeluname, + txt: '支持16位内汉字或32位内字母数字' + } + } + + $scope.tip = formJudge(verPar); + if(!UtilService.isNullStr($scope.channelRebate)){ + if(!angular.isNumber($scope.channelRebate) || Number($scope.channelRebate) < 0 || Number($scope.channelRebate) > 100){ + $scope.tip.succ = false; + $scope.tip.channelRebate = { + status: true, + txt : "填写数值过大或过小(取值范围[0.01-100])" + } + } + else{ + $scope.tip.channelRebate = {}; + } + }else{ + $scope.tip.channelRebate = {}; + } + + if($scope.tip.succ != true) { + ToolService.showTips($scope.formTipMsg); + return false; + } + + var savePM = null,txtTips = "添加成功"; + if($scope.subDetail.id!=null){ + par.id = $scope.subDetail.id; + savePM = HttpService.putInfo("mng/channelaccount/update",par); + txtTips = "修改成功"; + }else{ + savePM = HttpService.postInfo("mng/channelaccount/create",par); + } + ToolService.showLoading(); + savePM.then(function(data){ + ToolService.hideLoading(); + if(!data.id){ + ToolService.showTips("账号或密码错误,请检查更新后重新创建"); + } + else{ + ToolService.showTips(txtTips); + $scope.backFlag(2); + } + }); + } + + + + + $scope.dayList = [ + {id:999,name:"未设置"}, + {id:1,name:"1天"}, + {id:2,name:"2天"}, + {id:3,name:"3天"}, + {id:4,name:"4天"}, + {id:5,name:"5天"}, + {id:6,name:"6天"}, + {id:7,name:"7天"}, + {id:15,name:"15天"}, + {id:30,name:"30天"} + ]; + $scope.dayList1 = [ + {id:1,name:"1天"}, + {id:2,name:"2天"}, + {id:3,name:"3天"}, + {id:4,name:"4天"}, + {id:5,name:"5天"}, + {id:6,name:"6天"}, + {id:7,name:"7天"}, + {id:15,name:"15天"}, + {id:30,name:"30天"} + ]; + $scope.$on("ciDay",function(e,msg){ + $scope.ciDay = msg.info.id; + }); + $scope.$on("ciDayOne",function(e,msg){ + $scope.ciDayOne = msg.info.id; + }); + $scope.cheatList = [ + {id:999,name:"未设置"}, + {id:0,name:"严格"}, + {id:1,name:"普通"}, + {id:2,name:"宽松"} + ]; + $scope.cheatList1 = [ + {id:0,name:"严格"}, + {id:1,name:"普通"}, + {id:2,name:"宽松"} + ]; + $scope.$on("cheat",function(e,msg){ + $scope.cheat = msg.info.id; + }); + $scope.$on("cheatOne",function(e,msg){ + $scope.cheatOne = msg.info.id; + }); + //全渠道设置 + var rmd = new Date().getTime(); + $scope.allSet = function(){ + $scope.pageFlag = 3; + var allPM = HttpService.getInfo("mng/channelparam/find/black"); + ToolService.showLoading(); + allPM.then(function(data){ + ToolService.hideLoading(); + $scope.allData = data.allChannelValidMatch; + $scope.allBlack = data.allChannelBlackMatch; + if($scope.allData == false){ + $scope.ciDayInit = 999; + }else{ + $scope.ciDayInit = data.ciDay; + } + if($scope.allBlack ==false || data.blacklistLevel == -1){ + $scope.cheatInit = 999; + }else{ + $scope.cheatInit = data.blacklistLevel; + } + + $scope.blackType = data.blacklistStatus; + $scope.datafresh2= ++rmd; + $scope.datafresh1= ++rmd; + }); + } + $scope.saveAllSet = function(id,flag){ + //应用全渠道限制 + if($scope.ciDay == 999 && id == 0 && flag == "valid"){ + return false; + } + if($scope.cheat == 999 && id == 0 && flag == "black" && $scope.blackType){ + return false; + } + + var isall = true; + if(id == 1){ + var isdefault = true; + }else{ + var isdefault = false; + } + var par = {}; + if($scope.ciDay == 999){ + par.blacklistStatus = $scope.blackType + } + if($scope.cheat == 999){ + par.ciDay = $scope.ciDay + } + if($scope.ciDay != 999 && $scope.cheat != 999){ + par.ciDay = $scope.ciDay; + par.blacklistStatus = $scope.blackType; + } + + if($scope.blackType == true){ + par.blacklistLevel = $scope.cheat; + }else{ + par.blacklistLevel = -1; + } + var allsavePM = HttpService.putInfo("mng/channelparam/update/"+flag+"?isall="+isall+"&isdefault="+isdefault,par); + ToolService.showLoading(); + allsavePM.then(function(data){ + ToolService.hideLoading(); + if(data == 'success'){ + ToolService.showTips("保存成功"); + } + if(flag == 'black'){ + $scope.allBlack = true; + }else{ + $scope.allData = true; + } + if(id == 1){ + $scope.allSet(); + } + }); + } + + //渠道单独设置 + var oneSetId = 0; + $scope.oneSet = function(info){ + $scope.pageFlag = 4; + $scope.channelParam = info; + + var onePM = HttpService.getInfo("mng/channelparam/find/"+info.id); + ToolService.showLoading(); + onePM.then(function(data){ + ToolService.hideLoading(); + oneSetId = data.id; + $scope.winciDayOne = $scope.ciDayOneInit = data.ciDay; + $scope.blackOneType = data.blacklistStatus; + $scope.cheatOne = $scope.wincheatOne = $scope.cheatOneInit = data.blacklistLevel; + /*if(data.blacklistLevel == -1){ + $scope.cheatOne = $scope.cheatOneInit = 1; + } */ + }); + } + + $scope.blackClick = function(id){ + if(id == 1){ + $scope.blackOneType = true; + if($scope.wincheatOne = -1){ + $scope.cheatOne = $scope.wincheatOne = $scope.cheatOneInit = 1; + } + }else{ + $scope.blackOneType = false; + } + } + + $scope.saveOne = function(id,flag){ + var isall = false; + if(id == 1){ + var isdefault = true; + }else{ + var isdefault = false; + } + + var par = { + id: oneSetId, + cid: $scope.channelParam.id, + ciDay: $scope.ciDayOne, + blacklistStatus:$scope.blackOneType + }; + if($scope.blackOneType == true){ + par.blacklistLevel = $scope.cheatOne; + }else{ + par.blacklistLevel = -1; + } + var onesavePM = HttpService.putInfo("mng/channelparam/update/"+flag+"?isall="+isall+"&isdefault="+isdefault,par); + ToolService.showLoading(); + onesavePM.then(function(data){ + ToolService.hideLoading(); + $scope.closeWin(); + ToolService.showTips("保存成功"); + oneSetId = data.id; + $scope.winciDayOne = $scope.ciDayOneInit = data.ciDay; + $scope.blackOneType = data.blacklistStatus; + $scope.cheatOne = $scope.wincheatOne = $scope.cheatOneInit = data.blacklistLevel; + }); + } + + //数据有效期设置 + $scope.setData = function(){ + ToolService.showAlp(); + $scope.winFlag = 2; + } + //黑名单设置 + $scope.setBlock = function(){ + ToolService.showAlp(); + $scope.winFlag = 3; + } + + //公共IP列表 + $scope.publicIP = function(){ + $scope.pageFlag = 5; + var publicPM = HttpService.getInfo("mng/channelparam/find"); + ToolService.showLoading(); + publicPM.then(function(data){ + ToolService.hideLoading(); + $scope.campaignList = data; + $scope.selectIDS = []; + $scope.searchtxt = ""; + }); + } + //公共IP操作 + $scope.saveIP = function(){ + var par = { + ip: $scope.ip + }; + var verPar = { + ip: { + key: 'ipError', + val: $scope.ip + } + }; + $scope.tip = formJudge(verPar); + if ($scope.tip.succ != true) { + ToolService.showTips($scope.formTipMsg); + return false; + } + if($scope.ip == oldIP){ + $scope.closeWin(); + return false; + } + var savePM = null,txtTips = "添加成功"; + if($scope.ipListId!=null){ + par.id = $scope.ipListId; + savePM = HttpService.putInfo("mng/channelparam/update",par); + txtTips = "修改成功"; + }else{ + savePM = HttpService.postInfo("mng/channelparam/create",par); + } + ToolService.showLoading(); + savePM.then(function(data){ + ToolService.hideLoading(); + if(data.code == -7000){ + $scope.tip = { + ip:{ + status:true, + txt:"IP地址已存在" + } + }; + }else{ + ToolService.showTips(txtTips); + $scope.closeWin(); + $scope.publicIP(); + } + },function(data){ + ToolService.hideLoading(); + if(data.code == -7000){ + $scope.tip = { + ip:{ + status:true, + txt:"IP地址已存在" + } + }; + } + }); + + } + + $scope.$watch("flipChange+campaignList",function(){ + if($scope.flipPage && $scope.campaignList){ + curfilpPage = {start:$scope.flipPage.start+1,end:$scope.flipPage.end}; + if(curfilpPage.end > $scope.campaignList.length){ + curfilpPage.end = $scope.campaignList.length; + } + } + }); + //新增或编辑IP + var oldIP = ""; + $scope.createIP = function(info){ + if(info == undefined){ + $scope.ip = ""; + $scope.ipListId = null; + }else{ + $scope.ipListId = info.id; + $scope.ip = info.ip; + oldIP = info.ip; + } + ToolService.showAlp(); + $scope.winFlag=1; + $scope.tip = { + ip:{ + status:false, + txt:"" + } + }; + } + $scope.closeWin = function(){ + ToolService.hideAlp(); + $scope.winFlag=0; + } + + $scope.clickCkx = function(id){ + var idx = $scope.selectIDS.indexOf(id); + if(idx > -1){ + $scope.selectIDS.splice(idx,1); + }else{ + $scope.selectIDS.push(id); + } + } + $scope.setCurrentList = function(){ + var curList = $scope.campaignList; + if(!UtilService.isNullStr($scope.searchTxt)){ + var myFilterList = $scope.campaignList.filter(function(item){ + if((item.name && angular.uppercase(String(item.name)).indexOf(angular.uppercase($scope.searchTxt))>-1) || (item.trackurl && angular.uppercase(String(item.trackurl)).indexOf(angular.uppercase($scope.searchTxt))>-1)){ + return true; + } + else{ + return false; + } + }); + curList = myFilterList; + } + $scope.curShowList = curList; + } + $scope.curPageAll = function(){ + if(!$scope.flipPage || !$scope.campaignList){return false;} + + $scope.setCurrentList(); + curfilpPage.end = $scope.curShowList.length>curfilpPage.end ? curfilpPage.end:$scope.curShowList.length; + var len = curfilpPage.end - curfilpPage.start,count = 0; + + for(var i = curfilpPage.start;i<curfilpPage.end;i++){ + var temp = $scope.curShowList[i]; + + if($scope.selectIDS.indexOf(temp.id)>-1){ + count ++; + } + } + $scope.onePageCount = count; + return len == count && len>0; + } + $scope.checkAllCurrent = function(){ + var bol = $scope.curPageAll(); + curfilpPage.end = $scope.curShowList.length>curfilpPage.end ? curfilpPage.end:$scope.curShowList.length; + for(var i = curfilpPage.start;i<curfilpPage.end;i++){ + var temp = $scope.curShowList[i],idx = $scope.selectIDS.indexOf(temp.id); + if(bol && idx>-1){ + $scope.selectIDS.splice(idx,1); + } + if(!bol && idx==-1){ + $scope.selectIDS.push(temp.id); + } + } + } + + $scope.checkAllPage = function(){ + $scope.selectIDS = []; + var len = $scope.curShowList.length,count = 0; + for(var i = 0;i<len;i++){ + $scope.selectIDS.push($scope.curShowList[i].id); + } + } + + $scope.NocheckAllPage = function(){ + $scope.selectIDS = []; + } + + $scope.$watch("searchTxt",function(n){ + if(angular.isDefined(n)){ + $scope.selectIDS = []; + } + }); + $scope.$watch("selectIDS",function(n){ + if($scope.selectIDS && $scope.selectIDS.length>0){ + $scope.iptHolder = "搜索后,所选内容将清除"; + } + else{ + $scope.iptHolder = "输入名称或短链搜索"; + } + }); + + $scope.doBatchRemove = function(){ + $scope.delIPbatch = true; + } + + $scope.removeBatchIP = function(){ + $scope.delIPbatch = false; + var removePM = HttpService.deleteInfo("mng/channelparam/delete/"+$scope.selectIDS.join(",")); + ToolService.showLoading(); + removePM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips("删除成功"); + $scope.publicIP(); + }); + } + + $scope.doRemoveIP = function(info){ + $scope.delIPTips = "是否删除 “"+info.ip+"” 这个IP地址?"; + $scope.delIPstatus = true; + $scope.delIPId = info.id; + } + $scope.removeInfoIP = function(){ + var removePM = HttpService.deleteInfo("mng/channelparam/delete/"+$scope.delIPId); + ToolService.showLoading(); + removePM.then(function(data){ + ToolService.hideLoading(); + $scope.delIPstatus = false; + ToolService.showTips("删除成功"); + $scope.publicIP(); + }); + } + } + + function channelDetailCtrl($scope,$rootScope,HttpService,ToolService,UtilService,$q,$state,$stateParams){ + var editInfo = $stateParams.aid,infoId = null; + if(angular.isDefined(editInfo) && editInfo!=null){ + infoId = $scope.id = editInfo.id; + } + + var channelPM = HttpService.getInfo("1/channel/findcoop"); + channelPM.then(function(data){ + $scope.channelList = data; + }); + + var inName = ""; + $scope.init = function(){ + if(angular.isDefined(editInfo) && editInfo!=null){ + $scope.name = inName = editInfo.name; + $scope.category = editInfo.category; + $scope.url = editInfo.url; + + $scope.osIos = editInfo.osIos; + $scope.osAndroid = editInfo.osAndroid; + $scope.osWeb = editInfo.osWeb; + + if(editInfo.osIos){ + $scope.os1 = 0; + } + if(editInfo.osAndroid){ + $scope.os2 = 1; + } + if(editInfo.osWeb){ + $scope.os3 = 2; + } + }else{ + $scope.osIos = false; + $scope.osAndroid = false; + $scope.osWeb = false; + $scope.category='ADVERTISING'; + $scope.os = 0; + inName = ""; + } + }; + $scope.tipStatus = false; + $scope.changeName = function(){ + if(angular.isDefined(editInfo) && editInfo!=null){ + + }else{ + var isCheck = !$scope.osIos && !$scope.osAndroid && !$scope.osWeb; + if(isCheck){ + $("#name").blur(); + ToolService.showTips("请先选择平台"); + } + } + } + //监控渠道类型 + $scope.$watch("category",function(n){ + if(angular.isDefined(n)){ + $scope.osIos = false; + $scope.osAndroid = false; + $scope.osWeb = false; + } + }); + $scope.filterName = function(){ + if(!$scope.name){return false;} + + if($scope.name!=inName){ + $scope.filterChannels = $scope.channelList.filter(function(item){ + var result = (item.name.indexOf($scope.name)>-1 || $scope.name.indexOf(item.name)>-1) && item.category == $scope.category; + if(!result){return false;} + + if($scope.osIos){ + result = result && item.osIos; + } + if($scope.osAndroid){ + result = result && item.osAndroid; + } + if($scope.osWeb){ + result = result && item.osWeb; + } + return result; + }); + $scope.tipStatus = false; + } + else{ + $scope.filterChannels = []; + } + } + + $scope.clearFilter = function(){ + $scope.filterChannels = []; + } + $scope.doTips = function(channel){ + $scope.coopchannel = channel; + $scope.name = channel.name; + $scope.tipStatus = true; + $scope.filterChannels = []; + } + + $scope.checkTypes = function(os){ + if(os==1){ + $scope.osIos = !$scope.osIos; + }else if(os==2){ + $scope.osAndroid = !$scope.osAndroid; + }else{ + $scope.osWeb = !$scope.osWeb; + } + if($scope.osIos || $scope.osAndroid || $scope.osWeb){ + $scope.typeTip = ""; + } + } + $scope.init(); + $scope.save = function(){ + var par = { + name: $scope.name, + category: $scope.category, + url: $scope.url, + // os:$scope.os, + osIos:$scope.osIos, + osAndroid:$scope.osAndroid, + osWeb:$scope.osWeb, + }; + var verPar = { + name: { + key: 'spcname', + val: par.name + } + } + $scope.tip = formJudge(verPar); + var isCheck = !$scope.osIos && !$scope.osAndroid && !$scope.osWeb; + if ($scope.tip.succ != true || (isCheck && !infoId)) { + if(isCheck && !infoId){$scope.typeTip = "请至少选择一个平台";} + ToolService.showTips($scope.formTipMsg); + return false; + } + var savePM = null,txtTips = "添加成功"; + if(infoId!=null){ + par.id = infoId; + savePM = HttpService.putInfo("mng/channel/update",par); + txtTips = "修改成功"; + }else{ + savePM = HttpService.postInfo("mng/channel/create",par); + } + ToolService.showLoading(); + savePM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips(txtTips); + $scope.cancel(); + }); + } + + $scope.cancel = function(){ + $state.go("collect.channel",{aid:'custom'}); + } + } + + + function channelAddCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$q,$state,$stateParams){ + if($rootScope.isSuper || $rootScope.isManage){ + $scope.editPower = true; + }else{ + $scope.editPower = false; + } + + $rootScope.channeluniqueName = 'gdt'; + $scope.stepflag = 1; //1、2、3步 + $scope.step1 = 'normal'; //第一步 normal failure success + var editInfo = $stateParams.aid; + if(angular.isDefined(editInfo) && editInfo!=null){ + infoId = $scope.id = editInfo.id; + if(editInfo.step == 3){ + $scope.stepflag = 3; + } + } + var oldname = ""; + var oldthirdAccountCode = ""; + var oldalias = ""; + $scope.pastStatus = false; + $scope.init = function(){ + if(angular.isDefined(editInfo) && editInfo!=null){ + $scope.state = oldname = editInfo.name; + $scope.accountid = oldthirdAccountCode = editInfo.thirdAccountCode; + $scope.rebate = parseFloat(editInfo.rebate); + $scope.alias = oldalias = editInfo.alias; + $scope.pastStatus = editInfo.pastStatus; + $scope.step1='success'; + + } + else{ + $scope.rebate = 0; + } + }; + $scope.init(); + + if($scope.id == undefined){ + $scope.flag = 1; + }else{ + $scope.flag = 0; + } + + $scope.cancel = function(){ + if($scope.empowerType == true){ + var savePM = null; + savePM = HttpService.deleteInfo("mng/channelaccount/delete/authorize/"+$scope.flag+"/"+$scope.state); + savePM.then(function(data){ + $state.go("collect.channel",{aid:'ry_coop'}); + }); + }else{ + $state.go("collect.channel",{aid:'ry_coop'}); + } + + } + + $scope.nextStep = function(){ + $scope.stepflag = $scope.stepflag + 1; + } + $scope.lastStep = function(){ + $scope.stepflag = $scope.stepflag - 1; + } + //弹窗 + $scope.openDialog = function(){ + window.open("http://doc.trackingio.com/qu-dao-pei-zhi-shuo-ming/guang-dian-tong.html"); + } + + $scope.empower = function(){ + if($scope.checkID != true && $scope.checkQQ != true){ + var par = { + state: $scope.state, + accountid: $scope.accountid + }; + var verPar = { + state: { + key: 'num', + val: par.state, + txt: '合法性为仅支持输入数字,长度不限' + }, + accountid: { + key: 'num', + val: par.accountid, + txt: '合法性为仅支持输入数字,长度不限' + } + } + $scope.tip = formJudge(verPar); + if ($scope.tip.succ != true) { + ToolService.showTips($scope.formTipMsg); + return false; + } + window.open("https://developers.e.qq.com/oauth/authorize?client_id=1106237187&redirect_uri=http://www.trackingio.com/api/mng/channelaccount/code&state="+$scope.state); + $scope.empowerType = true; + } + } + + $scope.empowerError = function(){ + $scope.empowerType = false; + } + + $scope.empowerOK = function(){ + var savePM = null; + savePM = HttpService.getInfo("mng/channelaccount/valid/qq?qq="+$scope.state); + savePM.then(function(data){ + $scope.empowerType = false; + if(data == true){ + $scope.step1 = 'success'; + }else{ + $scope.step1 = 'failure'; + } + }); + } + + $scope.powerAgain = function(){ + $scope.step1='normal'; + } + + $scope.exixtQQ = function(){ + if(oldname == $scope.state){ + $scope.checkQQ = false; + }else{ + if($scope.state == "" || $scope.state == undefined){ + return false; + } + var packPM = HttpService.getInfo("mng/channelaccount/valid/qq?qq="+$scope.state); + packPM.then(function(data){ + if(data.content == false){ + $scope.checkQQ = false; + $scope.tip = { + state:{ + status:false, + txt:'' + } + }; + }else{ + $scope.checkQQ = true; + $scope.tip = { + state:{ + status:true, + txt:'该渠道账号已被授权,如果需要对该账号重新授权,请到对应账号进行修改。' + } + }; + } + }); + } + } + + $scope.exixtID = function(){ + if(oldthirdAccountCode == $scope.accountid){ + $scope.checkID = false; + }else{ + if($scope.accountid == "" || $scope.accountid == undefined){ + return false; + } + var packPM = HttpService.getInfo("mng/channelaccount/valid/accountid?accountid="+$scope.accountid); + packPM.then(function(data){ + if(data.content == false){ + $scope.checkID = false; + $scope.tip = { + accountid:{ + status:false, + txt:'' + } + }; + }else{ + $scope.checkID = true; + $scope.tip = { + accountid:{ + status:true, + txt:'该账号id已被绑定到其他渠道账号,请到对应账号进行修改' + } + }; + } + }); + } + } + + $scope.saveOne = function(){ + var par = { + name: $scope.state, + thirdAccountCode: $scope.accountid + }; + var savePM = null; + savePM = HttpService.postInfo("mng/channelaccount/authorize",par); + savePM.then(function(data){ + $scope.aliasID = data.id; + $scope.stepflag = $scope.stepflag + 1; + }); + } + + + //第二步 + $scope.saveTwo = function(){ + if($scope.checkAlias == false){ + return false; + } + if($scope.aliasID == null || $scope.aliasID == undefined){ + $scope.aliasID = $scope.id + } + var parmas = { + alias: $scope.alias, + rebate: $scope.rebate, + id: $scope.aliasID + }; + var verParmas = { + alias: { + key: 'isNull', + val: $scope.alias + } + } + $scope.tip = formJudge(verParmas); + if ($scope.tip.succ != true) { + ToolService.showTips($scope.formTipMsg); + return false; + } + var savePM = null; + savePM = HttpService.putInfo("mng/channelaccount/alias",parmas); + savePM.then(function(data){ + if(data.id != null){ + $scope.createID = data.id; + $scope.stepflag = 3; + //$scope.tableList(); + } + }); + } + $scope.exixtAlias = function(){ + if(oldalias == $scope.alias){ + $scope.checkAlias = true; + }else{ + if($scope.alias == "" || $scope.alias == undefined){ + return false; + } + var packPM = HttpService.getInfo("mng/channelaccount/valid?name="+$scope.alias); + packPM.then(function(data){ + if(data == true){ + $scope.checkAlias = true; + $scope.tip = { + alias:{ + status:false, + txt:'' + } + }; + }else{ + $scope.checkAlias = false; + $scope.tip = { + alias:{ + status:true, + txt:'该渠道账号别名已经被占用' + } + }; + } + }); + } + } + + //第三步 + var rmd = new Date().getTime(); + $scope.productList = function(){ + var savePM = null; + if($scope.createID== null || $scope.createID == undefined){ + $scope.createID = $scope.id; + } + //savePM = HttpService.getInfo("mng/channelaccount/app/list?accountid="+$scope.accountid); + savePM = HttpService.getInfo("mng/channelaccount/"+$scope.createID+"/app/list?linkuserid="+$scope.createID+"&unique_name=gdt"); + savePM.then(function(data){ + $scope.dayList = data; + $scope.appnameInit = data[0].id; + $scope.$on("appname",function(e,msg){ + $scope.appname = msg.info.id; + $scope.appType = msg.info.platform; + $scope.appkey = msg.info.appkey; + }); + }); + $scope.datafresh = ++rmd; + } + + $scope.tableList = function(){ + var savePM = null; + if($scope.createID == null || $scope.createID == undefined){ + $scope.createID = $scope.id; + } + savePM = HttpService.getInfo("mng/channelaccount/app/find/"+$scope.createID); + savePM.then(function(data){ + $scope.tableData = data; + }); + } + + $scope.$watch("stepflag",function(n){ + if(angular.isDefined(n)){ + if($scope.stepflag == 3){ + $scope.tableList(); + } + } + }); + + //监测appname + $scope.$watch("appname",function(n){ + $scope.nodata(); + }); + + $scope.nodata = function(){ + $scope.createType = 'noadd'; + $scope.thirdAppId = ""; + $scope.userActionSetId = ""; + $scope.tip = { + thirdAppId:{ + status:false + } + }; + } + + $scope.addType = false; + $scope.addProduct = function(){ + if($scope.createType == "inadd" || $scope.createType == "erroradd" || $scope.createType == "openadd"){ + ToolService.showTips("请先完成当前产品测试,再添加下一个产品。"); + }else{ + $scope.userActionSetIdTxt = "点击右侧按钮获取行为数据源ID"; + $scope.createType = "openadd"; + $scope.addType = true; + $scope.productList(); + } + } + $scope.closeProduct = function(){ + $scope.addType = false; + $scope.nodata(); + } + + //获取行为数据源ID + $scope.getDmpCode = function(){ + var par = { + thirdAppId: $scope.thirdAppId, + linkUserId: $scope.createID, + appName: $scope.appname, + appType: $scope.appType, + accountId: $scope.accountid + }; + var verPar = { + thirdAppId: { + key: 'isNull', + val: par.thirdAppId + } + } + $scope.tip = formJudge(verPar); + if ($scope.tip.succ != true) { + ToolService.showTips($scope.formTipMsg); + return false; + } + var savePM = null; + savePM = HttpService.postInfo("mng/channelaccount/userid/create",par); + savePM.then(function(data){ + if(data.data != null || data.data != undefined){ + $scope.userActionSetId = data.data; + $scope.userActionSetIdTxt = ""; + }else{ + $scope.tip = { + thirdAppId:{ + status:true, + txt:data.msg + } + }; + } + }); + } + + //noadd未添加 openadd打开弹窗 inadd添加中 okadd添加成功 erroradd添加失败 + $scope.createType = "noadd"; + + //连接测试 + $scope.testDmp = function(){ + var par = { + thirdAppId: $scope.thirdAppId, + appName: $scope.appname, + appkey: $scope.appkey, + userActionSetId: $scope.userActionSetId, + linkUserId: $scope.createID, + appType: $scope.appType, + accountId: $scope.accountid + }; + var verPar = { + thirdAppId: { + key: 'isNull', + val: $scope.thirdAppId + }, + userActionSetId: { + key: 'isNull', + val: $scope.userActionSetId + } + } + $scope.tip = formJudge(verPar); + if ($scope.tip.succ != true) { + ToolService.showTips($scope.formTipMsg); + return false; + } + var savePM = null; + $scope.createType = "inadd"; + savePM = HttpService.postInfo("mng/channelaccount/app/create",par); + savePM.then(function(data){ + if(data.code == 0){ + $scope.createType = "okadd"; + $scope.tableList(); + $scope.closeProduct(); + }else{ + $scope.createType = "erroradd"; + $scope.failureText = data.message; + } + }); + } + + //删除 + $scope.deletePro = function(obj){ + $scope.delstatus = true; + $scope.delId = obj.id; + } + $scope.removeInfo = function(){ + var removePM = HttpService.deleteInfo("mng/channelaccount/delete/app/"+$scope.delId); + ToolService.showLoading(); + removePM.then(function(data){ + ToolService.hideLoading(); + $scope.delstatus = false; + ToolService.showTips("删除成功"); + $scope.tableList(); + }); + } + + //保存 + $scope.save = function(){ + $state.go("collect.channel",{aid:'ry_coop'}); + } + } + + function channelSmCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$q,$state,$stateParams,DateService,$timeout){ + $rootScope.channeluniqueName = 'smsearch'; + var editInfo = $stateParams.aid; + if(angular.isDefined(editInfo) && editInfo!=null){ + var infoId = $scope.id = editInfo.id; + } + + var oldalias = ""; + $scope.init = function(){ + if(angular.isDefined(editInfo) && editInfo!=null){ + $scope.alias = oldalias = editInfo.alias; + $scope.name = editInfo.name; + $scope.password = editInfo.password; + //pastStatus false为授权成功 + if(editInfo.pastStatus == false){ + $scope.step1 = 'success'; + }else{ + $scope.step1 = 'failure'; + } + } + }; + $scope.init(); + + var channelID = ""; + $scope.$watch("appid",function(n){ + if(angular.isDefined(n)){ + var gdtPM = HttpService.getInfo($scope.appid+"/channel/find/smsearch"); + gdtPM.then(function(data){ + ToolService.hideLoading(); + channelID = data.id; + }); + } + }); + + $scope.cancel = function(){ + $state.go("collect.channel",{aid:'ry_bd'}); + } + + $scope.exixtName = function(){ + if(oldalias == $scope.alias){ + $scope.checkName = true; + }else{ + if($scope.alias == "" || $scope.alias == undefined){ + return false; + } + ToolService.showLoading(); + var packPM = HttpService.getInfo("mng/channelaccount/valid?name="+$scope.alias); + packPM.then(function(data){ + ToolService.hideLoading(); + if(data == true){ + $scope.checkName = true; + $scope.tip = { + alias:{ + status:false, + txt:'' + } + }; + }else{ + $scope.checkName = false; + $scope.tip = { + alias:{ + status:true, + txt:'该账号别名已存在,请更换。' + } + }; + } + }); + } + } + $scope.empowerType = false; + $scope.empower = function(){ + if($scope.checkName == false){ + return false; + } + var par = { + channel: channelID, + alias: $scope.alias, + name: $scope.name, + password: $scope.password + }; + var verPar = { + alias: { + key: 'isNull', + val: par.alias + }, + name: { + key: 'isNull', + val: par.name + }, + password: { + key: 'isNull', + val: par.password + } + } + $scope.tip = formJudge(verPar); + if ($scope.tip.succ != true) { + return false; + } + ToolService.showLoading(); + var savePM = null; + if($scope.id!=null){ + par.id = $scope.id; + savePM = HttpService.putInfo("mng/channel/account/update",par); + }else{ + savePM = HttpService.postInfo("mng/channel/account/create",par); + } + savePM.then(function(data){ + ToolService.hideLoading(); + $scope.empowerType = true; + $scope.id = $scope.empowerID = data.id; + window.open("https://e.sm.cn/auth/OAuth2/authorizationRequest?response_type=code&state="+$scope.empowerID+"&scope=1,2&redirect_uri=http://www.trackingio.com/api/third/getToken&client_id=434&client_secret=3e1bdcb210290c0668566e414373c8c3"); + }); + } + $scope.failureAlert = false; + $scope.empowerOK = function(){ + var savePM = null; + savePM = HttpService.getInfo("mng/channel/account/checkstatus?id="+$scope.empowerID); + savePM.then(function(data){ + $scope.empowerType = false; + if(data == true){ + $scope.step1 = 'success'; + ToolService.showTips("授权成功"); + $scope.cancel(); + }else{ + $scope.step1 = 'failure'; + $scope.failureAlert = true; + } + }); + } + + $scope.empowerError = function(){ + $scope.empowerType = false; + $scope.pastStatus = true; + } + } + + function channelAdwordsCtrl($rootScope,$scope,HttpService,ToolService,UtilService,$q,$state,$stateParams,DateService,$timeout){ + if($rootScope.isSuper || $rootScope.isManage){ + $rootScope.editPower = true; + }else{ + $rootScope.editPower = false; + } + $scope.stepflag = 1; + + $rootScope.channeluniqueName = 'adwords'; + var editInfo = $stateParams.aid; + if(angular.isDefined(editInfo) && editInfo!=null){ + var infoId = $scope.id = editInfo.id; + if(editInfo.step == 2){ + $scope.stepflag = 2; + } + } + var oldname = ""; + var oldthirdAccountCode = ""; + var oldalias = ""; + $scope.pastStatus = false; + $scope.init = function(){ + if(angular.isDefined(editInfo) && editInfo!=null){ + $scope.name = oldname = editInfo.name; + $scope.thirdAccountCode = oldthirdAccountCode = editInfo.thirdAccountCode; + $scope.alias = oldalias = editInfo.alias; + } + }; + $scope.init(); + + $scope.cancel = function(){ + $state.go("collect.channel",{aid:'ry_coop'}); + } + + var channelID = ""; + $scope.$watch("appid",function(n){ + if(angular.isDefined(n)){ + var gdtPM = HttpService.getInfo($scope.appid+"/channel/find/adwords"); + gdtPM.then(function(data){ + ToolService.hideLoading(); + channelID = data.id; + }); + } + }); + + //弹窗 + $scope.openDialog = function(){ + window.open("http://doc.trackingio.com/qu-dao-pei-zhi-shuo-ming/adwords.html"); + } + + $scope.saveOne = function(){ + //$scope.stepflag = 2; + var par = { + channel: channelID, + alias: $scope.alias, + name: $scope.name, + thirdAccountCode: $scope.thirdAccountCode + }; + var verPar = { + alias: { + key: 'spcname', + max:40, + val: $scope.alias, + txt: "含非法字符或过长(支持输入汉字、大小写字母、数字、下划线、中划线,长度限制40字符以内)" + }, + name: { + key: 'isNull', + val: $scope.name + }, + thirdAccountCode: { + key: 'isNull', + val: $scope.thirdAccountCode + } + } + $scope.tip = formJudge(verPar); + if ($scope.tip.succ != true) { + return false; + } + var savePM = null; + if($scope.id!=null){ + par.id = $scope.id; + savePM = HttpService.putInfo("mng/channel/account/update",par); + }else{ + savePM = HttpService.postInfo("mng/channel/account/create",par); + } + savePM.then(function(data){ + ToolService.hideLoading(); + if(data.code == -5002){ + $scope.tip = { + alias:{ + status:true, + txt:data.message + } + }; + }else if(data.code == -5003){ + $scope.tip = { + thirdAccountCode:{ + status:true, + txt:data.message + } + }; + }else{ + $scope.createID = $scope.aliasID = data.id; + $scope.stepflag = $scope.stepflag + 1; + } + }); + } + + $scope.lastStep = function(){ + $scope.stepflag = $scope.stepflag - 1; + } + + + var rmd = new Date().getTime(); + $scope.productList = function(){ + var savePM = null; + if($scope.createID== null || $scope.createID == undefined){ + $scope.createID = $scope.id; + } + //应用列表 + savePM = HttpService.getInfo("mng/channelaccount/"+$scope.createID+"/app/list?linkuserid="+$scope.createID+"&unique_name=adwords"); + savePM.then(function(data){ + $scope.dayListALL = data; + $scope.dayList = $scope.dayListALL.filter(function(item){ + return item.platform == 'iOS'; + }) + $scope.appnameInit = $scope.dayList[0].id; + $scope.$on("appname",function(e,msg){ + $scope.appname = msg.info.id; + $scope.appType = msg.info.platform; + $scope.appkey = msg.info.appkey; + }); + }); + $scope.datafresh = ++rmd; + } + + //已保存产品列表 + $scope.tableList = function(){ + var savePM = null; + if($scope.createID == null || $scope.createID == undefined){ + $scope.createID = $scope.id; + } + savePM = HttpService.getInfo("mng/channelaccount/app/find/"+$scope.createID); + savePM.then(function(data){ + $scope.tableData = data; + }); + } + + $scope.$watch("stepflag",function(n){ + if(angular.isDefined(n)){ + if($scope.stepflag == 2){ + $scope.tableList(); + } + } + }); + + //监测appname + $scope.$watch("appname",function(n){ + $scope.nodata(); + }); + $scope.nodata = function(){ + $scope.createType = 'noadd'; + $scope.userActionSetId = ""; + $scope.tip = { + userActionSetId:{ + status:false, + txt:'' + } + }; + } + + //添加和关闭 + $scope.addType = false; + $scope.addProduct = function(){ + if($scope.createType == "inadd" || $scope.createType == "erroradd" || $scope.createType == "openadd"){ + ToolService.showTips("请先完成当前产品测试,再添加下一个产品。"); + }else{ + $scope.createType = "openadd"; + $scope.addType = true; + $scope.productList(); + } + } + $scope.closeProduct = function(){ + $scope.addType = false; + $scope.nodata(); + } + + //检测linkid + $scope.checkLinkID = false; + $scope.exixtLinkId = function(){ + var par = { + linkUserId: $scope.createID, + channel: channelID, + fieldkey: 'linkid', + fieldvalue: $scope.userActionSetId + }; + var verPar = { + fieldvalue: { + key: 'isNull', + val: par.fieldvalue + } + } + $scope.tip = formJudge(verPar); + if ($scope.tip.succ != true) { + return false; + } + var packPM = HttpService.getInfo("mng/channelaccount/109/app/checkname",par); + packPM.then(function(data){ + ToolService.hideLoading(); + if(data == true){ + $scope.checkLinkID = true; + $scope.tip = { + userActionSetId:{ + status:false, + txt:'' + } + }; + }else{ + $scope.checkLinkID = false; + $scope.tip = { + userActionSetId:{ + status:true, + txt:'该LinkID已存在,请更换。' + } + }; + } + }); + } + + //noadd未添加 openadd打开弹窗 inadd添加中 okadd添加成功 erroradd添加失败 + $scope.createType = "noadd"; + //连接测试 + $scope.testDmp = function(){ + if($scope.checkLinkID == false){ + return false; + } + var par = { + appName: $scope.appname, + appkey: $scope.appkey, + userActionSetId: $scope.userActionSetId, + linkUserId: $scope.createID, + appType: $scope.appType + }; + var verPar = { + userActionSetId: { + key: 'isNull', + val: par.userActionSetId + } + } + $scope.tip = formJudge(verPar); + if ($scope.tip.succ != true) { + ToolService.showTips($scope.formTipMsg); + return false; + } + var savePM = null; + $scope.createType = "inadd"; + savePM = HttpService.postInfo("mng/channelaccount/"+$scope.createID+"/app/create",par); + savePM.then(function(data){ + if(data.id != undefined){ + $scope.createType = "okadd"; + $scope.checkLinkID = false; + $scope.tableList(); + $scope.closeProduct(); + }else{ + $scope.createType = "erroradd"; + $scope.failureText = data.message; + } + }); + } + + //删除 + $scope.deletePro = function(obj){ + $scope.delstatus = true; + $scope.delId = obj.id; + } + $scope.removeInfo = function(){ + var removePM = HttpService.deleteInfo("mng/channelaccount/delete/app/"+$scope.delId); + ToolService.showLoading(); + removePM.then(function(data){ + ToolService.hideLoading(); + $scope.delstatus = false; + ToolService.showTips("删除成功"); + $scope.tableList(); + }); + } + + //保存 + $scope.save = function(){ + $state.go("collect.channel",{aid:'ry_coop'}); + } + + } +})(); diff --git a/src/main/websrc/js/manage/event.js b/src/main/websrc/js/manage/event.js new file mode 100644 index 0000000..ae97b05 --- /dev/null +++ b/src/main/websrc/js/manage/event.js @@ -0,0 +1,213 @@ +(function(){ + angular.module("app.manage") + .controller("eventCtrl",["$scope","HttpService","ToolService",eventCtrl]); + + function eventCtrl($scope,HttpService,ToolService){ + $scope.isevent = true; + $scope.query = function(){ + $scope.isevent = true; + var eventPM = HttpService.getInfo("mng/event/find/"+$scope.appid); + ToolService.showLoading(); + eventPM.then(function(data){ + ToolService.hideLoading(); + $scope.eventList = data; + + var seldatas = data.slice(0); + seldatas.unshift({eventName:"-all",eventNameAlias:"全部属性"}); + $scope.eventSelList = seldatas; + $scope.eventEditId = -1; + }); + } + $scope.$watch("appid",function(n){ + if(angular.isDefined(n)){ + $scope.query(); + } + }); + + $scope.$on('flipinfo',function(e,msg){ + if(msg.listkey == 'paramTab'){ + $scope.pflipPage = msg; + }else{ + $scope.flipPage = msg; + } + + }); + + var curEvent = null,rmd = 1; + $scope.clickEvent = function(event){ + if($scope.eventpidInit == event.eventName){ + $scope.isevent = false; + $scope.eventpidF5 = ++rmd; + }else{ + $scope.eventpidInit = event.eventName; + } + } + + $scope.$on("eventpid",function(e,msg){ + curEvent = msg.info; + $scope.getParamsList(); + }); + $scope.getParamsList = function(){ + var pams = {}; + if(curEvent!=null && curEvent.eventName && curEvent.eventName!='-all'){ + pams = {name:curEvent.eventName}; + } + var paramsPM = HttpService.getInfo("mng/event/find/one/"+$scope.appid,pams); + ToolService.showLoading(); + paramsPM.then(function(data){ + $scope.isevent = false; + ToolService.hideLoading(); + $scope.paramsList = data; + $scope.eventParamsId = -1; + }); + } + + $scope.doEdit = function(obj,flag){ + if(flag==1){ + $scope.eventEditId=obj.eventName; + obj.editname=obj.eventNameAlias; + } + if(flag==2){ + $scope.eventParamsId=obj.attr; + obj.editname=obj.attrAlias; + } + } + //启用停用 + $scope.onOff = function(name,flag){ + var url = "mng/event/enable/"+$scope.appid,tipmsg = "启用成功"; + if(flag && flag==1){ + url = "mng/event/forbidden/"+$scope.appid; + tipmsg = "停用成功"; + } + var userPM = HttpService.putInfo(url,{eventId:name}); + ToolService.showLoading(); + userPM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips(tipmsg) + $scope.query(); + }); + } + //事件更新 + $scope.updateEvent = function(info){ + var params = { + eventId:info.eventName, + alias:info.editname + } + if(info.editname==''){ + ToolService.showTips("事件名称不能为空") + return false; + } + var has = $scope.eventList.filter(function(item){ + return item.eventNameAlias == info.editname && item.eventName!=info.eventName; + }); + if(has.length>0){ + ToolService.showTips("事件名称不能重复") + return false; + } + + var tips = formJudge({ + name:{ + key:'spcname2', + val:params.alias + } + }); + if(tips.succ != true){ + ToolService.showTips("仅支持包含下划线的40位以内字符"); + return false; + } + var updatePM = HttpService.putInfo("mng/event/update/"+$scope.appid,params); + ToolService.showLoading(); + updatePM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips("修改成功") + $scope.query(); + }); + } + + //属性启用停用 + $scope.pramesOnOff = function(info,flag){ + var url = "mng/event/enable/attr/"+$scope.appid,tipmsg = "启用成功"; + if(flag && flag==1){ + url = "mng/event/forbidden/attr/"+$scope.appid; + tipmsg = "停用成功" + } + var userPM = HttpService.putInfo(url,{attribute:info}); + ToolService.showLoading(); + userPM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips(tipmsg) + $scope.getParamsList(); + }); + } + //属性更新 + $scope.updateParams = function(info){ + var params = { + attribute:info.attr, + alias:info.editname + } + if(info.editname==''){ + ToolService.showTips("属性名称不能为空") + return false; + } + var has = $scope.paramsList.filter(function(item){ + return item.attrAlias == info.editname && item.attr!=info.attr; + }); + if(has.length>0){ + ToolService.showTips("事件属性名称不能重复") + return false; + } + + var tips = formJudge({ + name:{ + key:'spcname2', + val:params.alias + } + }); + if(tips.succ != true){ + ToolService.showTips("仅支持包含下划线的40位以内字符"); + return false; + } + + var updatePM = HttpService.putInfo("mng/event/update/"+$scope.appid+"/one",params); + ToolService.showLoading(); + updatePM.then(function(data){ + ToolService.hideLoading(); + ToolService.showTips("修改成功") + $scope.getParamsList(); + }); + } + + $scope.changeStatus = function(flag,attr){ + var method = ""; + switch (flag) { + case 1: + method = "addStats"; + break; + case 2: + method = "delStats"; + break; + case 3: + method = "addCondition"; + break; + case 4: + method = "delCondition"; + break; + default: + break; + } + if(method!=''){ + var putPM = HttpService.putInfo("mng/event/"+method+"/"+$scope.appid,{attribute:attr}) + putPM.then(function(data){ + if(!localStorage.getItem("joinFiltrate") && flag==3){ + ToolService.showTips("操作成功,可以按属性名称在事件、漏斗或留存功能中查看或筛选",4000); + localStorage.setItem("joinFiltrate","joinFiltrate"); + }else{ + ToolService.showTips("操作成功"); + } + $scope.getParamsList(); + }); + } + } + } + +})(); \ No newline at end of file diff --git a/src/main/websrc/styles/animate.scss b/src/main/websrc/styles/animate.scss new file mode 100644 index 0000000..93ebe54 --- /dev/null +++ b/src/main/websrc/styles/animate.scss @@ -0,0 +1,1068 @@ +.toggle { + -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + /* easeOutQuad */ + -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + /* easeOutQuad */ +} +.toggle.ng-enter { + opacity: 0; + transition-duration: 250ms; + -webkit-transition-duration: 250ms; +} +.toggle.ng-enter-active { + opacity: 1; +} +.toggle.ng-leave { + opacity: 1; + transition-duration: 250ms; + -webkit-transition-duration: 250ms; +} +.toggle.ng-leave-active { + opacity: 0; +} +.toggle.ng-hide-add { + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.toggle.ng-hide-add.ng-hide-add-active { + opacity: 0; +} +.toggle.ng-hide-remove { + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + display: block !important; + opacity: 0; +} +.toggle.ng-hide-remove.ng-hide-remove-active { + opacity: 1; +} + +.slide-top { + -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + + -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); +} +.slide-top.ng-enter { + transform: translateY(60px); + -ms-transform: translateY(60px); + -webkit-transform: translateY(60px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 0; +} +.slide-top.ng-enter-active { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + opacity: 1; +} +.slide-top.ng-leave { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.slide-top.ng-leave-active { + transform: translateY(60px); + -ms-transform: translateY(60px); + -webkit-transform: translateY(60px); + opacity: 0; +} +.slide-top.ng-hide-add { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.slide-top.ng-hide-add.ng-hide-add-active { + transform: translateY(60px); + -ms-transform: translateY(60px); + -webkit-transform: translateY(60px); + opacity: 0; +} +.slide-top.ng-hide-remove { + transform: translateY(60px); + -ms-transform: translateY(60px); + -webkit-transform: translateY(60px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + display: block !important; + opacity: 0; +} +.slide-top.ng-hide-remove.ng-hide-remove-active { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + opacity: 1; +} + +.slide-right { + -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + + -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); +} +.slide-right.ng-enter { + transform: translateX(60px); + -ms-transform: translateX(60px); + -webkit-transform: translateX(60px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 0; +} +.slide-right.ng-enter-active { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + opacity: 1; +} +.slide-right.ng-leave { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.slide-right.ng-leave-active { + transform: translateX(60px); + -ms-transform: translateX(60px); + -webkit-transform: translateX(60px); + opacity: 0; +} +.slide-right.ng-hide-add { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.slide-right.ng-hide-add.ng-hide-add-active { + transform: translateX(60px); + -ms-transform: translateX(60px); + -webkit-transform: translateX(60px); + opacity: 0; +} +.slide-right.ng-hide-remove { + transform: translateX(60px); + -ms-transform: translateX(60px); + -webkit-transform: translateX(60px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + display: block !important; + opacity: 0; +} +.slide-right.ng-hide-remove.ng-hide-remove-active { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + opacity: 1; +} + +.slide-left { + -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + + -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); +} +.slide-left.ng-enter { + transform: translateX(-60px); + -ms-transform: translateX(-60px); + -webkit-transform: translateX(-60px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 0; +} +.slide-left.ng-enter-active { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + opacity: 1; +} +.slide-left.ng-leave { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.slide-left.ng-leave-active { + transform: translateX(-60px); + -ms-transform: translateX(-60px); + -webkit-transform: translateX(-60px); + opacity: 0; +} +.slide-left.ng-hide-add { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.slide-left.ng-hide-add.ng-hide-add-active { + transform: translateX(-60px); + -ms-transform: translateX(-60px); + -webkit-transform: translateX(-60px); + opacity: 0; +} +.slide-left.ng-hide-remove { + transform: translateX(-60px); + -ms-transform: translateX(-60px); + -webkit-transform: translateX(-60px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + display: block !important; + opacity: 0; +} +.slide-left.ng-hide-remove.ng-hide-remove-active { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + opacity: 1; +} + +.slide-down { + -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + + -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); +} +.slide-down.ng-enter { + transform: translateY(-60px); + -ms-transform: translateY(-60px); + -webkit-transform: translateY(-60px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 0; +} +.slide-down.ng-enter-active { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + opacity: 1; +} +.slide-down.ng-leave { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.slide-down.ng-leave-active { + transform: translateY(-60px); + -ms-transform: translateY(-60px); + -webkit-transform: translateY(-60px); + opacity: 0; +} +.slide-down.ng-hide-add { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.slide-down.ng-hide-add.ng-hide-add-active { + transform: translateY(-60px); + -ms-transform: translateY(-60px); + -webkit-transform: translateY(-60px); + opacity: 0; +} +.slide-down.ng-hide-remove { + transform: translateY(-60px); + -ms-transform: translateY(-60px); + -webkit-transform: translateY(-60px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + display: block !important; + opacity: 0; +} +.slide-down.ng-hide-remove.ng-hide-remove-active { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + opacity: 1; +} + +.bouncy-slide-top { + -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1); + -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -moz-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -ms-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -o-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + + -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1); + -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); +} +.bouncy-slide-top.ng-enter { + transform: translateY(240px); + -ms-transform: translateY(240px); + -webkit-transform: translateY(240px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 0; +} +.bouncy-slide-top.ng-enter-active { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + opacity: 1; +} +.bouncy-slide-top.ng-leave { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.bouncy-slide-top.ng-leave-active { + transform: translateY(240px); + -ms-transform: translateY(240px); + -webkit-transform: translateY(240px); + opacity: 0; +} +.bouncy-slide-top.ng-hide-add { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.bouncy-slide-top.ng-hide-add.ng-hide-add-active { + transform: translateY(240px); + -ms-transform: translateY(240px); + -webkit-transform: translateY(240px); + opacity: 0; +} +.bouncy-slide-top.ng-hide-remove { + transform: translateY(240px); + -ms-transform: translateY(240px); + -webkit-transform: translateY(240px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + display: block !important; + opacity: 0; +} +.bouncy-slide-top.ng-hide-remove.ng-hide-remove-active { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + opacity: 1; +} + +.bouncy-slide-right { + -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1); + + -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -moz-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -ms-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -o-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + + -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1); + + -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); +} +.bouncy-slide-right.ng-enter { + transform: translateX(240px); + -ms-transform: translateX(240px); + -webkit-transform: translateX(240px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 0; +} +.bouncy-slide-right.ng-enter-active { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + opacity: 1; +} +.bouncy-slide-right.ng-leave { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.bouncy-slide-right.ng-leave-active { + transform: translateX(240px); + -ms-transform: translateX(240px); + -webkit-transform: translateX(240px); + opacity: 0; +} +.bouncy-slide-right.ng-hide-add { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.bouncy-slide-right.ng-hide-add.ng-hide-add-active { + transform: translateX(240px); + -ms-transform: translateX(240px); + -webkit-transform: translateX(240px); + opacity: 0; +} +.bouncy-slide-right.ng-hide-remove { + transform: translateX(240px); + -ms-transform: translateX(240px); + -webkit-transform: translateX(240px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + display: block !important; + opacity: 0; +} +.bouncy-slide-right.ng-hide-remove.ng-hide-remove-active { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + opacity: 1; +} + +.bouncy-slide-left { + -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1); + + -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -moz-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -ms-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -o-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + + -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1); + + -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); +} +.bouncy-slide-left.ng-enter { + transform: translateX(-240px); + -ms-transform: translateX(-240px); + -webkit-transform: translateX(-240px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 0; +} +.bouncy-slide-left.ng-enter-active { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + opacity: 1; +} +.bouncy-slide-left.ng-leave { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.bouncy-slide-left.ng-leave-active { + transform: translateX(-240px); + -ms-transform: translateX(-240px); + -webkit-transform: translateX(-240px); + opacity: 0; +} +.bouncy-slide-left.ng-hide-add { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.bouncy-slide-left.ng-hide-add.ng-hide-add-active { + transform: translateX(-240px); + -ms-transform: translateX(-240px); + -webkit-transform: translateX(-240px); + opacity: 0; +} +.bouncy-slide-left.ng-hide-remove { + transform: translateX(-240px); + -ms-transform: translateX(-240px); + -webkit-transform: translateX(-240px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + display: block !important; + opacity: 0; +} +.bouncy-slide-left.ng-hide-remove.ng-hide-remove-active { + transform: translateX(0); + -ms-transform: translateX(0); + -webkit-transform: translateX(0); + opacity: 1; +} + +.bouncy-slide-down { + -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1); + + -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -moz-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -ms-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -o-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + + -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1); + + -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); +} +.bouncy-slide-down.ng-enter { + transform: translateY(-240px); + -ms-transform: translateY(-240px); + -webkit-transform: translateY(-240px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 0; +} +.bouncy-slide-down.ng-enter-active { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + opacity: 1; +} +.bouncy-slide-down.ng-leave { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.bouncy-slide-down.ng-leave-active { + transform: translateY(-240px); + -ms-transform: translateY(-240px); + -webkit-transform: translateY(-240px); + opacity: 0; +} +.bouncy-slide-down.ng-hide-add { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.bouncy-slide-down.ng-hide-add.ng-hide-add-active { + transform: translateY(-240px); + -ms-transform: translateY(-240px); + -webkit-transform: translateY(-240px); + opacity: 0; +} +.bouncy-slide-down.ng-hide-remove { + transform: translateY(-240px); + -ms-transform: translateY(-240px); + -webkit-transform: translateY(-240px); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + display: block !important; + opacity: 0; +} +.bouncy-slide-down.ng-hide-remove.ng-hide-remove-active { + transform: translateY(0); + -ms-transform: translateY(0); + -webkit-transform: translateY(0); + opacity: 1; +} + +.scale-fade { + -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + + -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); +} +.scale-fade.ng-enter { + transform: scale(0.7); + -ms-transform: scale(0.7); + -webkit-transform: scale(0.7); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 0; +} +.scale-fade.ng-enter-active { + transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + opacity: 1; +} +.scale-fade.ng-leave { + transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.scale-fade.ng-leave-active { + transform: scale(0.7); + -ms-transform: scale(0.7); + -webkit-transform: scale(0.7); + opacity: 0; +} +.scale-fade.ng-hide-add { + transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.scale-fade.ng-hide-add.ng-hide-add-active { + transform: scale(0.7); + -ms-transform: scale(0.7); + -webkit-transform: scale(0.7); + opacity: 0; +} +.scale-fade.ng-hide-remove { + transform: scale(0.7); + -ms-transform: scale(0.7); + -webkit-transform: scale(0.7); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + display: block !important; + opacity: 0; +} +.scale-fade.ng-hide-remove.ng-hide-remove-active { + transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + opacity: 1; +} + +.spin-toggle { + -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + + -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); +} +.spin-toggle.ng-enter { + transform: rotate(225deg); + -ms-transform: rotate(225deg); + -webkit-transform: rotate(225deg); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 0; +} +.spin-toggle.ng-enter-active { + transform: rotate(0deg); + -ms-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + opacity: 1; +} +.spin-toggle.ng-leave { + transform: rotate(0deg); + -ms-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.spin-toggle.ng-leave-active { + transform: rotate(90deg); + -ms-transform: rotate(90deg); + -webkit-transform: rotate(90deg); + opacity: 0; +} +.spin-toggle.ng-hide-add { + transform: rotate(0deg); + -ms-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.spin-toggle.ng-hide-add.ng-hide-add-active { + transform: rotate(90deg); + -ms-transform: rotate(90deg); + -webkit-transform: rotate(90deg); + opacity: 0; +} +.spin-toggle.ng-hide-remove { + transform: rotate(225deg); + -ms-transform: rotate(225deg); + -webkit-transform: rotate(225deg); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + display: block !important; + opacity: 0; +} +.spin-toggle.ng-hide-remove.ng-hide-remove-active { + transform: rotate(0deg); + -ms-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + opacity: 1; +} + +.scale-fade-in { + -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + + -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); +} +.scale-fade-in.ng-enter { + transform: scale(3); + -ms-transform: scale(3); + -webkit-transform: scale(3); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 0; +} +.scale-fade-in.ng-enter-active { + transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + opacity: 1; +} +.scale-fade-in.ng-leave { + transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.scale-fade-in.ng-leave-active { + transform: scale(3); + -ms-transform: scale(3); + -webkit-transform: scale(3); + opacity: 0; +} +.scale-fade-in.ng-hide-add { + transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + opacity: 1; +} +.scale-fade-in.ng-hide-add.ng-hide-add-active { + transform: scale(3); + -ms-transform: scale(3); + -webkit-transform: scale(3); + opacity: 0; +} +.scale-fade-in.ng-hide-remove { + transform: scale(3); + -ms-transform: scale(3); + -webkit-transform: scale(3); + transition-duration: 250ms; + -webkit-transition-duration: 250ms; + display: block !important; + opacity: 0; +} +.scale-fade-in.ng-hide-remove.ng-hide-remove-active { + transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + opacity: 1; +} + +.bouncy-scale-in { + -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1); + -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -moz-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -ms-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -o-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + + -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1); + + -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); +} +.bouncy-scale-in.ng-enter { + transform: scale(3); + -ms-transform: scale(3); + -webkit-transform: scale(3); + transition-duration: 450ms; + -webkit-transition-duration: 450ms; + opacity: 0; +} +.bouncy-scale-in.ng-enter-active { + transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + opacity: 1; +} +.bouncy-scale-in.ng-leave { + transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + transition-duration: 450ms; + -webkit-transition-duration: 450ms; + opacity: 1; +} +.bouncy-scale-in.ng-leave-active { + transform: scale(3); + -ms-transform: scale(3); + -webkit-transform: scale(3); + opacity: 0; +} +.bouncy-scale-in.ng-hide-add { + transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + transition-duration: 450ms; + -webkit-transition-duration: 450ms; + opacity: 1; +} +.bouncy-scale-in.ng-hide-add.ng-hide-add-active { + transform: scale(3); + -ms-transform: scale(3); + -webkit-transform: scale(3); + opacity: 0; +} +.bouncy-scale-in.ng-hide-remove { + transform: scale(3); + -ms-transform: scale(3); + -webkit-transform: scale(3); + transition-duration: 450ms; + -webkit-transition-duration: 450ms; + display: block !important; + opacity: 0; +} +.bouncy-scale-in.ng-hide-remove.ng-hide-remove-active { + transform: scale(1); + -ms-transform: scale(1); + -webkit-transform: scale(1); + opacity: 1; +} + +.flip-in { + -webkit-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition: all 0 cubic-bezier(0.25, 0.46, 0.45, 0.94); + + -webkit-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -moz-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -ms-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + -o-transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); + transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); +} +.flip-in.ng-enter { + transform: perspective(300px) rotateX(90deg); + -ms-transform: perspective(300px) rotateX(90deg); + -webkit-transform: perspective(300px) rotateX(90deg); + transition-duration: 550ms; + -webkit-transition-duration: 550ms; + opacity: 0.7; +} +.flip-in.ng-enter-active { + transform: perspective(300px) rotateX(0deg); + -ms-transform: perspective(300px) rotateX(0deg); + -webkit-transform: perspective(300px) rotateX(0deg); + opacity: 1; +} +.flip-in.ng-leave { + transform: perspective(300px) rotateX(0deg); + -ms-transform: perspective(300px) rotateX(0deg); + -webkit-transform: perspective(300px) rotateX(0deg); + transition-duration: 550ms; + -webkit-transition-duration: 550ms; + opacity: 1; +} +.flip-in.ng-leave-active { + transform: perspective(300px) rotateX(135deg); + -ms-transform: perspective(300px) rotateX(135deg); + -webkit-transform: perspective(300px) rotateX(135deg); + opacity: 0.7; +} +.flip-in.ng-hide-add { + transform: perspective(300px) rotateX(0deg); + -ms-transform: perspective(300px) rotateX(0deg); + -webkit-transform: perspective(300px) rotateX(0deg); + transition-duration: 550ms; + -webkit-transition-duration: 550ms; + opacity: 1; +} +.flip-in.ng-hide-add.ng-hide-add-active { + transform: perspective(300px) rotateX(135deg); + -ms-transform: perspective(300px) rotateX(135deg); + -webkit-transform: perspective(300px) rotateX(135deg); + opacity: 0; +} +.flip-in.ng-hide-remove { + transform: perspective(300px) rotateX(90deg); + -ms-transform: perspective(300px) rotateX(90deg); + -webkit-transform: perspective(300px) rotateX(90deg); + transition-duration: 550ms; + -webkit-transition-duration: 550ms; + display: block !important; + opacity: 0; +} +.flip-in.ng-hide-remove.ng-hide-remove-active { + transform: perspective(300px) rotateX(0deg); + -ms-transform: perspective(300px) rotateX(0deg); + -webkit-transform: perspective(300px) rotateX(0deg); + opacity: 1; +} + +.rotate-in { + -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1); + + -webkit-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -moz-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -ms-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + -o-transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + transition: all 0 cubic-bezier(0.175, 0.885, 0.32, 1.275); + + -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1); + + -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + transition-timing-function: cubic-bezier(0.175, 0.885, 0.45, 1.595); + + -webkit-transform-origin:center; + -moz-transform-origin:center; + -ms-transform-origin:center; + -o-transform-origin:center; + transform-origin:center; +} +.rotate-in.ng-enter { + transform: perspective(300px) rotateY(40deg); + -ms-transform: perspective(300px) rotateY(40deg); + -webkit-transform: perspective(300px) rotateY(40deg); + transition-duration: 550ms; + -webkit-transition-duration: 550ms; + opacity: 0.7; +} +.rotate-in.ng-enter-active { + transform: perspective(300px) rotateY(0deg); + -ms-transform: perspective(300px) rotateY(0deg); + -webkit-transform: perspective(300px) rotateY(0deg); + opacity: 1; +} +.rotate-in.ng-leave { + transform: perspective(300px) rotateY(0deg); + -ms-transform: perspective(300px) rotateY(0deg); + -webkit-transform: perspective(300px) rotateY(0deg); + transition-duration: 550ms; + -webkit-transition-duration: 550ms; + opacity: 1; +} +.rotate-in.ng-leave-active { + transform: perspective(300px) rotateY(-40deg); + -ms-transform: perspective(300px) rotateY(-40deg); + -webkit-transform: perspective(300px) rotateY(-40deg); + opacity: 0.7; +} +.rotate-in.ng-hide-add { + transform: perspective(300px) rotateY(0deg); + -ms-transform: perspective(300px) rotateY(0deg); + -webkit-transform: perspective(300px) rotateY(0deg); + transition-duration: 550ms; + -webkit-transition-duration: 550ms; + opacity: 1; +} +.rotate-in.ng-hide-add.ng-hide-add-active { + transform: perspective(300px) rotateY(-40deg); + -ms-transform: perspective(300px) rotateY(-40deg); + -webkit-transform: perspective(300px) rotateY(-40deg); + opacity: 0; +} +.rotate-in.ng-hide-remove { + transform: perspective(300px) rotateY(40deg); + -ms-transform: perspective(300px) rotateY(40deg); + -webkit-transform: perspective(300px) rotateY(40deg); + transition-duration: 550ms; + -webkit-transition-duration: 550ms; + display: block !important; + opacity: 0; +} +.rotate-in.ng-hide-remove.ng-hide-remove-active { + transform: perspective(300px) rotateY(0deg); + -ms-transform: perspective(300px) rotateY(0deg); + -webkit-transform: perspective(300px) rotateY(0deg); + opacity: 1; +} \ No newline at end of file diff --git a/src/main/websrc/template/collect/custommenu.html b/src/main/websrc/template/collect/custommenu.html new file mode 100644 index 0000000..e6fc0c6 --- /dev/null +++ b/src/main/websrc/template/collect/custommenu.html @@ -0,0 +1,442 @@ +<div ng-if="pageFlag==1"> + <div class="nodata"> + <h5>还没有看单</h5> + </div> + <div class="btn3" style="float:none;width:200px;margin:0 auto;text-align: center;" ng-click="showWin(1)" ng-if="hasEditPower()">创建第一个看单</div> + <dl class="tipsList statustip"> + <dt>1. 什么是“行业看单”?</dt> + <dd> + 行业看单提供的是的常用可分类的数据分析指标的查看,目前主要由事件,漏斗,留存构成,可以根据指标类型分类成不同的行业菜单,便于查看,我们叫做看单。 + </dd> + <dt>2. 怎么使用行业看单?</dt> + <dd> + 通过TrackingIO强大的数据分析,行业看单可以帮助解决以下问题:<br/> + a. 做详细的app数据分析,你可以快速组建成行业数据菜单,便于产品,市场,运营查看。<br/> + b. 你可以选择行业优秀者分享的看单模版,快速组建自己的行业数据看单。<br/><br/> + </dd> + <dd> + 关于行业看单,你可以根据产品特性合理配置看单名称和表单内容,创建出符合自己行业标准化的数据图表。比如电商,可以创建购买数据分析,包含购买用户趋势,购买金额趋势等,帮您分析用户的购买行为。 + </dd> + </dl> +</div> +<div ng-if="pageFlag==2"> + <div class="finshedWrap"> + <span class="finshedIcon"></span> + <span class="finshLabel">已完成</span> + </div> + <div class="btn3" style="float:none;width:100px;margin:0 auto;text-align: center;" ng-click="lookMyMenu()">查看我的看单</div> + <div class="descWrap"> + <p class="pTitle">该操作会自动帮你添加{{getEventTypeCount(reyunList)}}</p> + <ol class="olList"> + <li ng-repeat="ry in reyunList track by $index">{{ry.name}}</li> + </ol> + </div> +</div> +<!-- 看单缩略图 --> +<div class="clearfix" ng-if="pageFlag==3 && viewFlag>0"> + <ul class="customNav"> + <li ng-class="{'active':viewFlag==3}" ng-click="changeViewFlag(3)">行业看单模板</li> + <!-- <li ng-class="{'active':viewFlag==2}" ng-click="changeViewFlag(2)">我的收藏</li> --> + <li ng-class="{'active':viewFlag==1}" ng-click="changeViewFlag(1)">我的看单</li> + </ul> + <div class="filterBox clearfix" ng-show="viewFlag!=1"> + <!-- <div class="iconBtn right p" ng-class="{'active':selfilter}" ng-click="selfilter=!selfilter" ng-mouseleave='selfilter=false;'> + <span class="filterIcon"></span>排序 + <div class="optionList rightLayout" ng-show="selfilter" style="max-width:100px;width:100px;"> + <dl class="dlOperTitle popmenu"> + <dd ng-click="menuOrder(1)" ng-class="{'active':orderFlag==1}">默认排序</dd> + <dd ng-click="menuOrder(2)" ng-class="{'active':orderFlag==2}">按匹配度</dd> + <dd ng-click="menuOrder(3)" ng-class="{'active':orderFlag==3}">按使用次数</dd> + <dd ng-click="menuOrder(4)" ng-class="{'active':orderFlag==4}">按收藏次数</dd> + </dl> + </div> + </div> --> + <div class="searchWrap"> + <input type="text" class="searchIpt" ng-model="searchTxt" placeholder="输入搜索关键词"> + </div> + <div class="right"> + <select-list style="margin-right: 20px;height: 32px;line-height: 32px;background-color: #ffffff;" meau-info="industryList" meau-id="industryId" meau-data="industryInit" meau-name="industryNameInit"></select-list> + </div> + </div> + <div class="filterBox clearfix" ng-if="viewFlag==1"> + <p class="pinfo left">您的账号仅支持创建{{maxMenu}}个看单,如需增加,请联系商务</p> + <div class="iconBtn right" ng-click="showWin(1)" ng-class="{'disable':menuInfoList.length>=maxMenu}" ng-if="hasEditPower()"> + <span class="additionIcon"></span>添加一个新看单 + </div> + </div> + <div class="defineBox"> + <!-- drag-order drag-id="menu.id" drag-info="{{menu}}" drag-flag="menu" --> + <div class="defineBoxItem" ng-repeat="menu in menuInfoList | filter:{'name':searchTxt} | filter:{'categoryName':industryInitName} track by $index" ng-class-even="'rightLayoutWrap'" ng-style="{'width':viewFlag==1?'33.333%':''}"> + <div class="chartBox p" ng-style="{'min-height':viewFlag!=1?'320px':''}" style="padding-top: 10px;"> + + <!-- <div class="dropIcon p" ng-class="{'active':selme}" ng-click="selme=!selme" ng-mouseleave='selme=false;' ng-show="viewFlag==1"> + <div class="optionList" ng-show="selme" style="max-width:140px;width:140px;"> + <dl class="dlOperTitle popmenu"> + <dd ng-click="menuDetail(menu)">查看详情</dd> + <dd ng-click="showWin(2,menu)" ng-if="hasEditPower()">修改看单名称</dd> + <dd ng-click="showWin(4,menu)" ng-if="!menu.hasShare && menu.templates.length>0 && !menu.source">分享到行业看单模板</dd> + <dd ng-click="doShare(menu)" ng-if="menu.hasShare && !menu.source">取消分享</dd> + <dd ng-click="showWin(3,menu)" ng-if="hasEditPower()">删除该看单</dd> + </dl> + </div> + </div> + <div class="dropIcon p" ng-class="{'active':selme1}" ng-click="selme1=!selme1" ng-mouseleave='selme1=false;' ng-show="viewFlag==2 && !menu.shareValid"> + <div class="optionList" ng-show="selme1" style="max-width:100px;width:100px;"> + <dl class="dlOperTitle popmenu"> + <dd ng-click="doFavoriteByMenu(menu)">取消收藏</dd> + </dl> + </div> + </div> --> + + <h5 class="boxTitle" ng-mouseenter="menu.editShow=true" ng-mouseleave="menu.editShow=false" style="cursor: pointer;padding: 10px 0px;">{{menu.name}} + <span class="eidtbtn eidt" ng-click="showWin(2,menu)" ng-if="hasEditPower() && viewFlag==1" ng-show="menu.editShow"></span> + <span ng-if="viewFlag==3" style="color: #999;font-size: 13px;">({{menu.categoryName}})</span> + <span class="delbtn del right p" ng-click="showWin(3,menu)" ng-if="hasEditPower() && viewFlag==1 && menu.editShow"> + </span> + </h5> + <!-- <p class="pinfo" ng-if="viewFlag>1">{{getShareName(menu)}} {{menu.shareDate | date:'yyyy-MM-dd'}}</p> --> + <div class="snviewWrap hand" ng-click="menuDetail(menu)" ng-if="viewFlag!=2 || menu.shareValid" style="margin-top:10px"> + <div ng-repeat="temp in menu.templates track by $index" ng-if="$index<(viewFlag==1?4:6)" style="display: inline-block;text-align: center;"> + <div class="snviewItem" ng-class="temp.type?temp.type:temp.menuType"> + </div> + <div class="nowrap" style="color: #999;width:149px;margin:0px auto;margin-bottom:24px;">{{temp.name}}</div> + </div> + </div> + <div class="lostInfo" ng-if="viewFlag==2 && !menu.shareValid"> + <span class="wrongIcon"></span> + 已被删除 + </div> + <div ng-if="menu.templates.length == 0 && viewFlag==1 && !demoU" style="text-align:center;"> + <span class="emptyImg"></span> + <div style="margin-bottom: 20px;color:#999999;">当前还未添加报表</div> + <div class="iconBtn" ng-click="showWin(6,menu)" style="margin-left:0px;color:#666666;"> + <span class="additionIcon"></span>添加报表 + </div> + </div> + <div class="boxBottom" ng-if="viewFlag==1" style="display: inline;"> + <span class="item">{{menu.createAccountName}}</span> + <span class="item" style="margin-left: 10px;">创建于{{menu.createDate | date:'yyyy-MM-dd'}}</span> + </div> + <div class="boxBottom" ng-if="viewFlag==1"> + <span class="item">共{{menu.templates.length}}张报表</span> + </div> + <!-- <div class="boxBottom" ng-if="viewFlag>1"> + <span class="item">{{menu.useNumber}}人使用</span> + <span class="item">{{menu.favoriteNumber}}人已收藏</span> + <span class="item">{{menu.matchPercent*100 | numFixed}}%匹配度</span> + </div> --> + </div> + </div> + </div> +</div> + +<!-- 看单详情 --> +<div class="clearfix" ng-if="pageFlag==4"> + <div class="filterBox clearfix p" style="margin-top: 0px;"> + <div class="left"> + <div class="iconBtn left mr10" style="margin-left: 0px;" ng-click="backToMenu()"> + <span class="doBackIcon"></span>返回 + </div> + <h5 class="boxTitle left mr10 lh32"> + {{currentMenu.name}} + <span ng-click="showWin(2,menu)" ng-if="viewFlag==3" style="color: #999;font-size: 13px;">({{currentMenu.categoryName}}) + </span> + </h5> + <!-- <p class="pinfo left lh32" style="margin:0px;">({{getShareName(currentMenu)}} {{currentMenu.shareDate | date:'yyyy-MM-dd'}})</p> --> + </div> + <!-- <div class="right" ng-if="viewFlag!=1 && currentMenu.accountId!=currentAccountId"> + <div class="iconBtn" ng-click="changeMatchFlag(1)" ng-class="{'active':matchFlag==1}"> + <span class="matchIcon"></span>匹配度详情({{currentMenu.matchPercent*100 | numFixed}}%) + </div> + <div class="iconBtn" ng-class="{'hascollect':currentMenu.hasFavorite}" ng-click="doFavorite()" ng-show="hasEditPower()"> + <span class="collectionIcon"></span><span ng-if="currentMenu.hasFavorite">已</span>收藏({{currentMenu.favoriteNumber}}) + </div> + <div class="iconBtn" ng-class="{'hascollect':currentMenu.hasFavorite}" ng-if="!hasEditPower()"> + <span class="collectionIcon"></span><span ng-if="currentMenu.hasFavorite">已</span>收藏({{currentMenu.favoriteNumber}}) + </div> + <div class="iconBtn" ng-click="changeMatchFlag(2)" ng-class="{'active':matchFlag==2}" ng-if="!currentMenu.hasUsed && hasEditPower()"> + <span class="additionIcon"></span>加入我的看单({{currentMenu.useNumber}}) + </div> + <div class="iconBtn disable" ng-if="currentMenu.hasUsed"> + 已加入我的看单 + </div> + </div> --> + <my-datepicker class="dateRange rightDate right" init-day="date" ng-show="viewFlag==1"><span>{{datestr}}</span></my-datepicker> + <div class="right rigthM" style="padding-top: 0px;" ng-show="viewFlag==1"> + <ul class="btnGroup"> + <!-- <li ng-class="{'active':timeFlag=='hour','dis':disTimeFlag.indexOf('hour')>-1}" ng-click="changeTimeFlag('hour')">时</li> --> + <li ng-class="{'active':timeFlag=='day','dis':disTimeFlag.indexOf('day')>-1}" ng-click="changeTimeFlag('day')" style="padding:8px 15px;">天</li> + <li ng-class="{'active':timeFlag=='week','dis':disTimeFlag.indexOf('week')>-1}" ng-click="changeTimeFlag('week')" style="padding:8px 15px;">周</li> + <li ng-class="{'active':timeFlag=='month','dis':disTimeFlag.indexOf('month')>-1}" ng-click="changeTimeFlag('month')" style="padding:8px 15px;">月</li> + </ul> + </div> + <div class="iconBtn right rigthM imgbtn" style="margin-left: 10px;background-color: #ffffff;padding: 8px 10px;" ng-click="changeCount()" title="一行三张表" ng-show="viewFlag==1"> + <div ng-class="{'three':(!showCount || showCount==2),'two':showCount==3}"></div> + </div> + <select-list meau-info="menuInfoList" meau-id="menuId" meau-data="menuInit" meau-name="menuInitName" meau-refresh="typef5" style="background-color: #ffffff;float: right;z-index: 4;"></select-list> + <div class="conditionWin customWin" ng-class="{'c2':matchFlag==1,'c1':false}" ng-show="matchFlag>0"> + <div class="sanicon"></div> + <div class="condiCont"> + <div class="clearfix mb20" ng-if="matchFlag==2"> + <p class="label" style="margin-bottom: 15px">您正在将“{{currentMenu.name}}”加入您的看单?</p> + <div class="openBtnGroup clearfix left"> + <div class="btn8" ng-click="changeMatchFlag(0)" style="margin-right:20px;display: inline-block;">取消</div> + <div class="btn3 lh30 oneCenter mybtn" ng-class="{'disable':!canJoin()}" ng-click="addShareMenu()" style="display: inline-block;">确定</div> + </div> + </div> + <p class="pinfo">从行业看单模版加入到看单中心的看单,不能再次分享。</p> + <h5 class="boxTitle mr10 lh32">{{currentMenu.name}}</h5> + <p class="pinfo lh32" style="margin:0px;"> + 匹配度{{currentMenu.matchPercent*100 | numFixed}}% + <span class="ckblue" ng-click="tds=true" ng-show="!tds && matchFlag==2">查看详情</span> + <span class="ckblue" ng-click="tds=false" ng-show="tds && matchFlag==2">收起</span> + </p> + <div class="tableList" style="background-color: #fff;" ng-show="tds || matchFlag==1"> + <table> + <tr> + <th>{{currentMenu.name}}模板</th> + <th>我的事件对应关系</th> + <th>匹配状态</th> + </tr> + <tr ng-repeat="template in currentMenu.templates track by $index"> + <td>{{template.name}}</td> + <td> + {{template.eventname}} + <span class="matchEditIcon ml10" ng-show="matchFlag==2 && !template.isMatch" ng-click="editTemplateEvent(template,$index)"></span> + </td> + <td><span ng-class="{true:'matchOkIcon',false:'matchNoIcon'}[template.isMatch]"></span></td> + </tr> + + </table> + </div> + <div class="descWrap" style="width:100%;" ng-if="matchFlag==2 && canJoin()"> + <p class="pTitle lh32" style="margin-top: 10px;"> + 该操作会自动帮你添加{{getEventTypeCount(currentMenu.templates)}} + <span class="ckblue" ng-click="tdo=true" ng-show="!tdo">查看详情</span> + <span class="ckblue" ng-click="tdo=false" ng-show="tdo">收起</span> + </p> + <ol class="olList" ng-show="tdo"> + <li ng-repeat="temp in currentMenu.templates track by $index">{{temp.name}}</li> + </ol> + </div> + </div> + </div> + </div> + + <div class="conditionAlpha" ng-class="{'topAlp':showEditEvent}" ng-show="matchFlag>0" ng-click="changeMatchFlag(0)"></div> + + <div class="defineBox defineChartBox"> + <!-- drag-order drag-id="temp.info.id" drag-info="{{temp.info}}" --> + <div class="defineBoxItem" ng-repeat="temp in chartDatas track by temp.charts.rmd" ng-class-even="'rightLayoutWrap'" ng-style="{'width':showCount==3?'33.333%':''}" > + <div class="chartBox" style="min-height:455px"> + <!-- <div class="dropIcon p" ng-class="{'active':selme}" ng-click="selme=!selme" ng-mouseleave='selme=false;' ng-show="viewFlag==1 && hasEditPower()"> + <div class="optionList" ng-show="selme" style="max-width:140px;width:140px;" > + <dl class="dlOperTitle popmenu"> + <dd ng-click="reportDetail(temp.info)" ng-if="showMenu(temp.info.menuType) && (!limitInfo.abTest || !limitInfo.abTest.eventstats)">查看详情</dd> + <dd ng-click="showWin(7,temp.info)" ng-if="hasEditPower()">从该看单删除</dd> + </dl> + </div> + </div> --> + <div class="delbtn del right p" ng-show="viewFlag==1 && hasEditPower()" ng-click="showWin(7,temp.info)"> + </div> + <div class="right p mr10" style="z-index: 3;" ng-show="temp.chartList.length>0"> + <select-list style="margin-top:-5px;height: 31px;line-height: 26px;height:26px;margin-right: 0px;width:80px;background-color:#fbfbfb;color: #666666;border-radius: 0px 3px 3px 0px;border-color: #c9c9c9;" meau-info="temp.chartList" meau-id2="temp.charts.chartTypeId" meau-data="temp.charts.chartTypeInit"></select-list> + </div> + <div class="right p" style="z-index: 3;" ng-show="temp.rateList.length>0 || temp.group_List.length>0" ng-mouseleave="showDrop=false"> + <div class="btn" style="margin-top:-5px;height: 31px;line-height:26px;height:26px;margin-right: 0px;background-color:#fbfbfb;color: #666666;border-right: none;border-radius: 3px 0px 0px 3px;border-color: #c9c9c9;" ng-click="showDrop=true;" ng-class="{'active':showDrop}"> + <span class="mr10">{{temp.selectName}}</span> + <div class="arrowIcon" style="margin-right:0px;margin-top:10px;"></div> + </div> + <div class="rateWrap" ng-show="showDrop" style="width: 200px;left: 0px;"> + <ul class="rateInfo" ng-show="temp.group_List.length==0 || temp.charts.chartType=='table'" style=" width: 95%;"> + <li ng-repeat="rate in temp.rateList track by $index" ng-click="changeRate(temp,rate)" ng-class="{'dis':!canAdd(temp,1,rate)}" title="{{substrName(rate)}}"> + <span class="checkbox" ng-class="{'active':temp.rateListed.indexOf(rate)>-1}"></span>{{substrName(rate)}} + </li> + </ul> + <ul class="rateInfo" ng-show="temp.group_List.length>0 && temp.charts.chartType!='table'" style=" width: 95%;"> + <li ng-show="temp.group_List.length>1 && temp.charts.chartType=='pie'"> + <span ng-click="checkAll(temp)"> + <span class="checkbox" ng-class="{'active':temp.ischeckall}" style="margin-right: 6px;"></span>全选 + </span> + </li> + <li ng-repeat="group in temp.group_List track by $index" ng-click="changeGroup(temp,group)" ng-class="{'dis':!canAdd(temp,2,group)}" title="{{group}}"> + <span class="checkbox" ng-class="{'active':temp.grouped_List.indexOf(group)>-1}"></span>{{group}} + </li> + </ul> + </div> + </div> + <h5 class="boxTitle" style="cursor: pointer;"><span ng-click="gotoDetail(temp.info)">{{temp.info.name}}</span></h5> + <div style="height: 80px;text-align: center;"> + <div ng-if="temp.info.menuType=='eventstats' && (temp.charts.chartType=='columnstack' || temp.charts.chartType=='line')" style="height:100%;"> + <div class="tipDate" ng-if="temp.tooltipChart.length>0">{{temp.tooltipChart[0].name}}</div> + <span ng-repeat="t in temp.tooltipChart track by $index" ng-if="showCount==3?$index<3:$index<4" style="text-align: center;"> + <div class="tipVal" ng-style="{'color':t.color,'margin-right':!$last?'20px':''}"> + {{getFormatNumber(t.value)}}{{temp.charts.chartConfig.namesub[$index]}} + <div class="chartTip" ng-style="getTipWidth(temp)" title="{{t.seriesName}}"> + {{t.seriesName}} + </div> + </div> + </span> + </div> + <div ng-if="temp.charts.chartType=='table' && temp.group_List.length>0" style="text-align:center;"> + <select-list style="margin-top:40px;height: 31px;line-height: 26px;margin-right: 0px;width:110px;background-color:#ffffff;border:none;height: 100%;" class="dsSelect" meau-info="temp.dsList" meau-id2="temp.dsId" meau-data="temp.dsInit" icon-type="blue" ng-style="{'width':timeFlag!='day'?'185px':'120px'}"></select-list> + </div> + </div> + <min-chart ng-if="temp.charts.chartType!='table'" chart-data="temp.charts.chartData" chart-tp="temp.charts.chartType" chart-config="temp.charts.chartConfig" chart-loading="temp.charts.chartLoading" chart-back="temp.charts.rmd"></min-chart> + <div style="color:#999;font-size: 12px;text-align: center;margin-top:-20px;" ng-if="temp.charts.chartType=='pie'"> + <span ng-show="!temp.charts.chartLoading">{{substrName(temp.charts.chartData.key[0])}}</span> + </div> + <div class="chartWrap clearfix" ng-if="temp.charts.chartType=='table'"> + <div class="chartWrapItem"> + <is-loading ng-if="channeltopLoading"></is-loading> + <div class="fixedTable" ng-show="!channeltopLoading" big-table fixed-col="1" info-list="temp.infoList" fix-change="temp.fixrefresh" initf5="temp.initrefresh" no-all-scroll="true"> + <div class="tableHeader"> + <table> + <tr> + <th ng-repeat="title in temp.trendList.name track by $index"> + <div id="title_{{$index}}" ng-style="temp.colsStyle[$index]" class="tditem" style="height:23px;line-height:23px;"> + {{title}} + <span class="sortWrap" ng-click="temp.reverse=!temp.reverse;orderCol(temp,temp.trendList.columnkey[$index], temp.reverse)"> + <span class="ascIcon" ng-class="{'active':temp.sortCol==temp.trendList.columnkey[$index] && !temp.reverse}"></span> + <span class="descIcon" ng-class="{'active':temp.sortCol==temp.trendList.columnkey[$index] && temp.reverse}"></span> + </span> + </div> + </th> + </tr> + </table> + </div> + <div class="tableInfo" style="max-height:234px;min-height:234px;"> + <table> + <tr ng-repeat="info in temp.infoList | filter:{'ds':temp.ds} | limitTo:100 track by $index"> + <td ng-repeat="col in temp.trendList.columnkey track by $index "> + <div ng-style="temp.colsStyle[0]" class="tditem" ng-if="$index==0" style="height:23px;line-height:23px;"> + {{info[col]}} + </div> + <div ng-style="temp.colsStyle[$index]" class="tditem" ng-if="$index>0" style="height:23px;line-height:23px;"> + {{info[col] | formatRate:col:temp.trendList.format}} + </div> + </td> + </tr> + </table> + </div> + </div> + </div> + </div> + <div class="boxBottom" ng-if="viewFlag!=1" style="top:430px;color: #00a9e8;cursor: pointer;" ng-click="showDetail(temp)" stop-event>埋点及规则</div> + </div> + </div> + <div class="defineBoxItem" ng-class="{'disReport':chartDatas.length>=8}" ng-if="viewFlag<=1 && hasEditPower()" ng-style="{'width':showCount==3?'33.333%':''}"> + <div class="chartBox hand" ng-click="showWin(6)" title="{{getMaxTips()}}" style="min-height:455px"> + <div class="addReportIcon"></div> + <div class="addReportIconDesc">创建新表单</div> + </div> + </div> + </div> +</div> + + +<div class="openTipWin" ng-show="winFlag==3 || winFlag==7"> + <div class="closeGray" ng-click="closeWin()"></div> + <div class="tipCont"> + 是否删除 “{{delname}}” <span ng-if="winFlag==3">看单</span><span ng-if="winFlag==7">报表</span>? + </div> + <div class="openBtnGroup clearfix"> + <div class="btn8 mr20" ng-click="closeWin()">取消</div> + <div class="btn8" ng-click="doDelete(winFlag)">确定</div> + </div> +</div> +<div class="openTipWin" ng-show="winFlag==1 || winFlag==2"> + <div class="closeGray" ng-click="closeWin()"></div> + <div class="tipCont" style="text-align: left;padding-bottom: 30px;"> + <p>请输入您想添加看单的名称:</p> + <div> + <input type="text" class="iptform" ng-model="ename" style="width:300px;" placeholder="最多输入12个汉字"> + <div class="btn5 ml10 btnblock conwidth" ng-click="saveMenu()">确定</div> + </div> + </div> +</div> +<div class="openTipWin" ng-if="winFlag==4"> + <div class="closeGray" ng-click="closeWin()"></div> + <div class="tipCont"> + 您正在将您的看单 “{{mname}}” 分享为“行业看单”? + </div> + <div class="openBtnGroup clearfix"> + <div class="btn8 mr20" ng-click="closeWin()">取消</div> + <div class="btn8" ng-click="doShare()">确定</div> + </div> + <div class="descWrap"> + <p class="pTitle">分享“行业看单模板”后:</p> + <ol class="olList normal mb20"> + <li>您的看单将会展示在行业看单模版。</li> + <li>该操作不会透漏您的数据隐私,数据展示时,会随机乘于一个阿尔法值,该值范围为0.01到100。</li> + </ol> + </div> +</div> +<div class="openTipWin" ng-if="winFlag==5"> + <div class="closeGray" ng-click="closeWin()"></div> + <div class="tipCont"> + <div class="finshedWrap" style="margin:0px;"> + <span class="finshedIcon"></span> + <span class="finshLabel">已成功加入我的看单</span> + </div> + </div> + <div class="openBtnGroup clearfix" style="width:220px;"> + <div class="btn3 lh30 mr20" ng-click="lookMyMenu(2)">查看我的看单</div> + <div class="btn8" ng-click="closeWin(1)" style="width:100px;">返回到分享页</div> + </div> + <div class="descWrap"> + <p class="pTitle">该操作会自动帮你添加{{getEventTypeCount(currentMenu.templates)}}</p> + <ol class="olList mb20"> + <li ng-repeat="temp in currentMenu.templates track by $index">{{temp.name}}</li> + </ol> + </div> +</div> +<div class="openTipWin" ng-if="winFlag==6"> + <div class="closeGray" ng-click="closeWin()"></div> + <div class="tipCont" style="text-align: left;padding-bottom: 30px;"> + <p>请选择看单类型:</p> + <div class="customType"> + <div class="iconBtn" ng-class="{'active':customTypeFlag==1}" ng-click="changeCustomFlag(1)"> + <span class="customEventIcon"></span>事件 + </div> + <div class="iconBtn" ng-class="{'active':customTypeFlag==2}" ng-click="changeCustomFlag(2)"> + <span class="customRetentionIcon"></span>留存 + </div> + <div class="iconBtn" ng-class="{'active':customTypeFlag==3}" ng-click="changeCustomFlag(3)"> + <span class="customFunnelIcon"></span>漏斗 + </div> + </div> + <div style="margin-bottom: 40px;"> + <select-list meau-info="typeList" meau-id="typeId" meau-data="typeinit" meau-name="typeInitname" meau-refresh="typef5" style="width:230px;"></select-list> + </div> + <div class="btn3 lh30 oneCenter" ng-click="addReport()">确定</div> + </div> +</div> + +<custom-event type="currentTemplate.menuType" event-list="eventList" old-info="currentTemplate.jsonCondition" ng-if="showEditEvent"></custom-event> +<div class="leftTipsSlider" ng-class="{'sliderSw1':isdetail}" stop-event> + <div class="slideHeader" style="height: 44px;line-height: 44px;"> + {{custitle}}分析事件埋点及规则 + <div class="whiteClose" ng-click="hideDetail()"></div> + </div> + <div style="height:93%;overflow-y: auto;"> + <div ng-if="detailInfo.conversion" style="margin-left: 28px;margin-top: 20px;"> + <h3>转化有效期:{{detailInfo.conversion}}</h3> + </div> + <div class="spetableList ml30 mr5" ng-repeat="detail in detailInfo.data track by $index"> + <div class="mt20 mb10"><h3>{{detail.name}}</h3></div> + <table> + <tr ng-if="detail.name!='分组查看维度'"> + <th ng-repeat="title in detail.key track by $index"> + {{title}} + </th> + </tr> + <tr ng-repeat="info in detail.value track by $index"> + <td ng-repeat="col in detail.key track by $index"> + {{info[$index]}} + </td> + </tr> + </table> + </div> + </div> +</div> \ No newline at end of file diff --git a/src/main/websrc/template/collect/eventstats.html b/src/main/websrc/template/collect/eventstats.html new file mode 100644 index 0000000..3e414ce --- /dev/null +++ b/src/main/websrc/template/collect/eventstats.html @@ -0,0 +1,312 @@ +<div class="p" ng-show="defineList.length>0 || addFirst"> + <div class="conditionBox clearfix p pb20"> + <div class="left"> + <div class="selList" ng-class="{'active':selme,'noright':hasEditPower()}" ng-click="selme=!selme;" ng-mouseleave="selme=false;"> + <span ng-if="(currentDefine.id || currentDefine.id==0 || !showEventWin) && !showTempLook">{{define.name}}</span> + <span class="ckhand dark" ng-if="(!currentDefine.id && currentDefine.id!=0 && showEventWin) || showTempLook">{{addTitName}}</span> + <div class="arrowIcon"></div> + <div class="optionList even" ng-show="selme" style="width:320px;z-index:7;"> + <dl class="dlOperTitle bbb" ng-if="hasEditPower()"> + <dd ng-click="addComplexEvent(0)" ng-class="{'active':isShowCache}">{{addTitName}}</dd> + </dl> + <div ng-show="defineList.length>5" class="searchWrap ml10 searchSpec clearfix" style="float:none;width:300px;" stop-event> + <input type="text" class="searchIpt selectIpt" style="width:300px;" ng-model="seatxt" placeholder="关键字搜索"> + </div> + <ul> + <li ng-repeat="m in defineList | filter:{'name':seatxt} track by $index" ng-click="clickDefine(m)" ng-class="{'active':m.id == define.id && !isShowCache}" title="{{m.name}}" class="p"> + {{m.name}}<span class="delIcon s1" ng-click="deleteDefine(m)" stop-event ng-if="hasEditPower()"></span> + </li> + </ul> + </div> + </div> + <div class="btn8 dark btnblock btnNo" ng-class="{'active':currentDefine.id && showEventWin,'dis':(!define.id && !isShowCache) || (!isEditInfo && !isShowCache)}" ng-click="addComplexEvent(1,(!currentDefine.id && currentDefine.id!=0 && showEventWin) || showTempLook)" ng-show="hasEditPower()">编辑</div> + </div> + + <div class="right"> + <!-- range-days="7" --> + <my-datepicker class="dateRange rightDate" init-day="date" operation-sel="define.id>0 || isShowCache"><span>{{datestr}}</span></my-datepicker> + </div> + <div class="conditionWin eventBox" ng-show="showEventWin" ng-class="{'edit':currentDefine.id}" id="evtBox" style="z-index:6;"> + <div class="sanicon"></div> + <span style="position: absolute;left:40px;top:25px;">显示</span> + <div class="p mb20" ng-repeat="ex in currentEvent track by $index" ng-show="ex.show!=false"> + <span class="ml27"></span> + <span class="changeIcon" ng-click="changeForm(ex)"></span> + <span style="position:relative;"> + <input type="text" class="iptform" id="expression_{{$index}}" ng-model="ex.expressionName" style="width:500px;" ng-click="changeExpression(ex,$index)" stop-event ng-show="ex.expression" ng-style="{'border-color': ex.error || ex.extip?'#e74646':''}" ng-mousedown="getMouseXY($event)" ng-keydown="watchKey(ex,$event)"> + <span class="error" style="position: absolute;left: 0px;top:27px;">{{ex.extip}}</span> + </span> + <select-t-list meau-info="eventList" meau-id2="ex.eventId" meau-data="ex.eventInit" meau-name="eventinitname" meau-typekey="['nature','virtual']" meau-typename="['自然事件','虚拟事件']" keyid="id" keyname="name" meau-refresh="ex.evtrefresh" ng-show="!ex.expression" meau-red="ex.eventerror"></select-t-list> + <select-list meau-info="ex.epropertyList" meau-id2="ex.propertyId" meau-data="ex.propertyinit" meau-name="ex.propertyinitname" keyid="id" keyname="name" meau-refresh="ex.prorefresh" ng-show="!ex.expression && ex.propertyShow" meau-red="ex.proerror"></select-list> + <select-list meau-info="ex.targetList" meau-id2="ex.targetId" meau-data="ex.targetinit" meau-name="ex.targetinitname" keyid="id" keyname="name" meau-refresh="ex.tarrefresh" ng-show="!ex.expression && ex.targetShow" meau-red="ex.tarerror"></select-list> + <span class="ml20 mr5">命名为</span> + <span style="position:relative;"> + <input type="text" class="iptform" ng-model="ex.name" placeholder="请输入指标的名称" ng-style="{'border-color': ex.nameerror?'#e74646':''}"> + <span class="error" style="position: absolute;left: 0px;top:27px;">{{ex.tip.name.txt}}</span> + </span> + <span class="ml20 mr5" ng-show="ex.expression">以</span> + <select-list ng-show="ex.expression" meau-info="formatList" meau-id2="ex.format_id" meau-data="ex.formatInit" meau-name="formatinitname" keyid="format" keyname="name" style="width:80px;" meau-refresh="evtrefresh"></select-list> + <span class="ml5" ng-show="ex.expression">显示</span> + <span class="deleteIcon" ng-show="getEventNum()>1" ng-click="removeEvent(ex)"></span> + </div> + <div id="optionList" class="optionList" style="width:200px;min-width:200px;max-width:200px;" ng-show="showProList && epropertyList.length>0"> + <ul> + <div ng-show="epropertyList.length>5" class="searchWrap" style="width: 100%;margin-top:5px;margin-bottom: 5px;float:left;box-sizing: border-box;padding:0px 5px;" stop-event> + <input type="text" class="searchIpt selectIpt" ng-model="filterSearch" placeholder="关键字搜索" style="width:100%;border:1px solid #c9c9c9;"> + </div> + <div ng-repeat="type in typeKey track by $index" ng-class="{'border':$index>0 && haslist(type)}" ng-show="haslist(type) && typeKey.length>0"> + <div class="liTypeTitle" ng-if="typeName[$index]!='' && ((virtual==type || nature==type) || !filterSearch)">{{typeName[$index]}}</div> + <li ng-repeat="event in epropertyList | filter:{'name':filterSearch}" ng-click="getProperty(event)" ng-if="event.type == type || event.dimensionType == type" ng-class="{'active':$index==eventIndex}">{{event.name}}</li> + </div> + <li ng-repeat="event in epropertyList | filter:{'name':filterSearch}" ng-click="getProperty(event)" ng-style="{'border-bottom': event.border?'1px solid #dcdcdc':'','height':'35px'}" ng-show="event.type!='nature' && event.type!='virtual'" ng-class="{'active':$index==eventIndex}">{{event.name}}</li> + </ul> + </div> + <div class="addAttrBtn" style="border-bottom: 1px solid #dcdcdc;padding-left: 40px;padding-bottom: 20px;" ng-class="{'dis':getEventNum()>=10}"> + <span ng-click="addEvents()"><span class="addAttrIcon"></span><span class="ckhand">新增</span></span> + </div> + <div class="p mb20 mt20" style="border-bottom: 1px solid #dcdcdc;padding-left: 40px;padding-bottom: 20px;"> + <span class="mr10">按</span> + <input type="text" class="iptform" value="总体" disabled="true"> + <span class="ml10">查看</span> + <span class="newaddIcon" ng-class="{'adddis':getGroupByNum()>=3}" ng-click="addGroupby()"></span> + <div class="p mb20 mt20" ng-repeat="gby in groupbys track by $index" ng-show="gby.show!=false"> + <span class="mr10">按</span> + <select-t-list meau-info="dimensionList" meau-id2="gby.dimensionId" meau-name="dimensionname" meau-typekey="['event','profile']" meau-typename="['事件属性','用户属性']" meau-data="gby.dimenInit" meau-type="gby.type" keyid="param" keyname="alias" meau-red="gby.groerror" ></select-t-list> + <span class="ml10">查看</span> + <span class="deleteIcon" ng-click="removeGroupby(gby)"></span> + </div> + </div> + <div style="padding-bottom: 20px;" ng-class="{'conditionEventItem':event.params && getEventParamsNum(event)>5 && showFlow}"> + <div class="profileItemWrap p" ng-mouseleave="changeFlow()"> + <div class="operInfo" style="bottom:35px;" ng-show="event.params && getEventParamsNum(event)>1"> + <div class="operBtn" ng-click="changeRel()">{{eventRel}}</div> + </div> + <div class="profileItem" ng-repeat="item in event.params track by $index" ng-show="item.show!=false"> + <profile-item info-list="event.paramsList" item-info="item" item-type="event" item-event="eventId" common="true" ng-click="changeFlow(1)"></profile-item> + <span class="deleteIcon" ng-click="removeEventParams(event,item)"></span> + </div> + <div class="addAttrBtn" ng-class="{'dis':getEventParamsNum(event)>=maxparams}"> + <span ng-click="addEventParams(event)"><span class="addAttrIcon"></span><span class="ckhand">添加事件属性筛选</span></span> + </div> + </div> + + </div> + <div class="conditionBoxBottom"> + <div class="left mt20" ng-show="!isShowCache && currentDefine.id"> + <span style="margin-left: -20px;margin-right:10px;">事件分析名称</span> + <input type="text" class="iptform" ng-model="ename" placeholder="请输入事件分析名称" ng-style="{'border-color': enameerror?'#e74646':''}"> + </div> + <div class="right mt50"> + <span class="ckhand mr10" ng-click="initCondition()">重置条件</span> + <div class="btnMoreGroup"> + <div class="btn btnblock ml10 mybtn h30" ng-click="closeAddWin()">关闭</div> + </div> + <span class="btnMoreGroup" ng-show="!currentDefine.id"> + <div class="btn btnblock mr10 mybtn h30" ng-click="nameWin()">保存</div> + <div class="btn3 btnblock mybtn h30" ng-click="lookReport()">查看</div> + </span> + <div class="btnMoreGroup" ng-show="currentDefine.id" ng-mouseenter="bgroup=true" ng-mouseleave="bgroup=false;"> + <div class="primaryBtn" ng-click="save()">保存</div> + <div class="primarySelBtn"></div> + <ul class="btnMenu" ng-show="bgroup && event.id"> + <li ng-click="save()">保存</li> + <li ng-click="save(2)">另存为</li> + </ul> + </div> + </div> + </div> + </div> + </div> + <div class="conditionAlpha" ng-show="showEventWin" ng-click="closeAddWin()"></div> + + <div class="chartWrap bar one clearfix" style="margin-top: 0px;" ng-show="defineList.length>0 || showTempLook"> + <div class="chartWrapItem titleChart"> + <div class="chartModule"> + <span>{{getTrendTitle()}}</span> + <div class="right p mr10" style="z-index: 1;"> + <select-list style="margin-top: 8px;height: 31px;line-height: 31px;margin-right: 0px;width:80px;background-color:#ffffff;color: #999;" meau-info="chartList" meau-id="chartTypeId" meau-spe="group_List.length == 0" meau-data="chartTypeInit" operation-sel="!eventChartLoading"></select-list> + </div> + <div class="right p mr10" style="z-index: 1;" ng-mouseleave="showDrop=false" > + <div class="btn" style="margin-top: 8px;height: 31px;line-height: 31px;margin-right: 0px;color: #999;background-color: #ffffff;" ng-click="showDrop=true;" ng-class="{'active':showDrop}"> + <span class="mr10">显示设置</span> + <div class="arrowIcon" style="margin-right:0px;"></div> + </div> + <div class="rateWrap" ng-show="showDrop"> + <ul class="titWrap"> + <li ng-class="{'active':rateFlag==1}" ng-click="rateFlag=1">显示指标</li> + <li ng-class="{'active':rateFlag==2}" ng-click="rateFlag=2">显示分组</li> + </ul> + <ul class="rateInfo" ng-show="rateFlag==1"> + <li ng-repeat="rate in rateList track by $index" ng-click="changeRate(rate)" ng-class="{'dis':!canAdd(1,rate)}"> + <span class="checkbox" ng-class="{'active':rateListed.indexOf(rate)>-1}"></span>{{substrName(rate)}} + </li> + </ul> + <ul class="rateInfo" ng-show="rateFlag==2"> + <li ng-show="group_List.length>1 && chartType=='pie'"> + <span ng-click="checkAll()"> + <span class="checkbox" ng-class="{'active':ischeckall}" style="margin-right: 6px;"></span>全选 + </span> + </li> + <li ng-if="group_List.length==0">当前没有分组</li> + <li ng-repeat="group in group_List track by $index" ng-click="changeGroup(group)" ng-class="{'dis':!canAdd(2,group)}" title="{{group}}"> + <span class="checkbox" ng-class="{'active':grouped_List.indexOf(group)>-1}"></span>{{group}} + </li> + </ul> + </div> + </div> + <div class="right rigthM"> + <ul class="btnGroup"> + <!-- <li ng-class="{'active':timeFlag=='hour','dis':disTimeFlag.indexOf('hour')>-1}" ng-click="changeTimeFlag('hour')">时</li> --> + <li ng-class="{'active':timeFlag=='day','dis':disTimeFlag.indexOf('day')>-1}" ng-click="changeTimeFlag('day')">天</li> + <li ng-class="{'active':timeFlag=='week','dis':disTimeFlag.indexOf('week')>-1}" ng-click="changeTimeFlag('week')">周</li> + <li ng-class="{'active':timeFlag=='month','dis':disTimeFlag.indexOf('month')>-1}" ng-click="changeTimeFlag('month')">月</li> + </ul> + </div> + </div> + <div class="chartItem p"> + <div ng-class="{'lengedChart':dimenId && dimenId!='-all'}"> + <min-chart chart-data="myChartData" chart-tp="chartType" chart-config="eventChartConfig" chart-loading="eventChartLoading" chart-resize="yes"></min-chart> + <div style="color:#999;font-size: 13px;" ng-if="chartType=='pie'"> + <span ng-show="!eventChartLoading" ng-repeat="key in myChartData.key" ng-style="{'padding-left':(myChartData.key.length>1 && $index==0?panelw/4:panelw/2-($index==1?getwidth(myChartData.key[0])/2:0))-getwidth(key)/2+'px'}">{{substrName(key)}}</span> + </div> + </div> + </div> + </div> + </div> + + <div class="chartWrap clearfix" ng-show="defineList.length>0 || showTempLook"> + <div class="chartWrapItem grayhm titleChart nothborder"> + <div class="chartModule"> + <span>{{getTrendTitle()}}详情</span> + <export-button export-condition="myChartDataCondition" ng-if="infoList.length>0 && !istranfer"></export-button> + <div class="right mr10" style="padding-top: 10px;" ng-show="infoList.length>0"> + <ul class="btnGroup"> + <li ng-class="{'active':istranfer}" ng-click="changeFlag(1)">转换</li> + <li ng-class="{'active':ispercent}" ng-click="changeFlag(2)" ng-if="group_List.length>0 || istranfer"> + <span ng-if="istranfer">环比</span> + <span ng-if="!istranfer">占比</span> + </li> + </ul> + </div> + <div class="eptWrap right mt10 big" ng-show="!istranfer && !isShowCache && define.id && condList.length>2" ng-click="showOrderList()"> + <span class="orderIcon"></span> + </div> + <div class="right condiTitleWrap" style="padding-top: 9px;" ng-show="infoList.length>0 && !istranfer"> + <span class="hand" ng-click="isshowTotal = !isshowTotal"> + <span class="checkbox mr5" ng-class="{'active':isshowTotal}"></span> + <span class="label">显示合计</span> + </span> + </div> + </div> + <is-loading ng-if="chartListLoading"></is-loading> + <div class="tableList yeswrap hm-scroll" ng-show="!chartListLoading" style="max-height: inherit;"> + <table title-name="listname" fix-firtd="1" fix-list="flipPage" ng-show="infoList.length>0"> + <thead> + <tr> + <th> + {{listname[0]}} + <span class="sortWrap" ng-click="reverse1=!reverse1;order(listkey[0], reverse1,0)"> + <span class="ascIcon" ng-class="{'active':sortCol1==listkey[0] && !reverse1}"></span> + <span class="descIcon" ng-class="{'active':sortCol1==listkey[0] && reverse1}"></span> + </span> + </th> + <th ng-repeat="title in listname track by $index" ng-show="$index>0"> + {{title}} + <span class="sortWrap" ng-click="reverse=!reverse;order(listkey[$index], reverse,$index)"> + <span class="ascIcon" ng-class="{'active':(sortCol==listkey[$index] || sortCol1==listkey[$index]) && !reverse}"></span> + <span class="descIcon" ng-class="{'active':(sortCol==listkey[$index] || sortCol1==listkey[$index]) && reverse}"></span> + </span> + </th> + </tr> + </thead> + <tr ng-repeat="info in totalList track by $index" ng-init="len = totalList.length" ng-if="!istranfer && isshowTotal"> + <td ng-if="$index==0" rowspan="{{len}}" style="background-color: #fff;">{{info[listkey[0]]}}</td> + <td ng-repeat="col in listkey track by $index" ng-if="$index>0" style="padding-right: 10px;" ng-class="{'txright':($index>grouplen && !istranfer) || ($index > grouplen && istranfer)}"> + {{info[col] | formatRate:col:trendList.format:info._myzb}} + <span ng-if="ispercent && info[percentPre+col]" ng-class="{false:'red',true:'green'}[info[percentPre+col]>0]"><br/>{{info[percentPre+col] | numFixed}}%</span> + </td> + </tr> + <tr ng-repeat="info in currentDetailList track by $index"> + <td ng-if="info.isrs && !istranfer" rowspan="{{info.rsnum}}" style="background-color: #fff;">{{info[listkey[0]]}}</td> + + <td ng-if="info.isrs && istranfer" ng-repeat="g in trendList.groupfield track by $index" rowspan="{{info.rsnum}}" style="background-color: #fff;">{{info[listkey[$index]]}}</td> + + <td ng-repeat="col in listkey track by $index" ng-if="($index>0 && !istranfer) || (istranfer && $index>=grouplen)" style="padding-right: 10px;" ng-class="{'txright':($index>grouplen && !istranfer) || ($index > grouplen && istranfer)}"> + {{info[col] | formatRate:col:trendList.format:info._myzb}} + <span ng-if="ispercent && info[percentPre+col]" ng-class="{false:'red',true:'green'}[info[percentPre+col]>0]"><br/>{{info[percentPre+col] | numFixed}}%</span> + </td> + </tr> + </table> + <no-data ng-if="infoList.length==0"></no-data> + </div> + <flip-info list-info="pageAllList" list-refresh="listf5"></flip-info> + </div> + </div> +</div> + +<div ng-show="defineList.length==0 && !addFirst"> + <div class="nodata"> + <h5>还未创建事件统计细分</h5> + </div> + <div class="btn3" style="float:none;width:180px;margin:0 auto;text-align: center;" ng-click="addFirstEvent()" ng-if="hasEditPower()">创建第一个事件统计细分</div> + <dl class="tipsList statustip"> + <dt>1. 什么是“事件”?</dt> + <dd> + 事件是指用户在使用产品过程中发生的行为,如注册、登录、充值、付款等操作数据。 + </dd> + <dt>2. 怎么使用事件分析?</dt> + <dd>TrackingIO通过收集用户事件及对应属性,提供基于事件属性的事件及组合事件运算功能,用不同形式报表展现关注的单个事件或者多个事件经过数学运算后形成的新指标在不同维度的数据趋势。 + <br/> + <br/> + 事件分析可以帮您回答不同地域的游戏用户充值虚拟金币的金额是多少,不同渠道的游戏用户消费道具的频次是怎样等问题。您可以根据您的产品特性及需求,进行合理配置。</dd> + </dl> +</div> + +<div class="openTipWin" ng-show="wantDelete"> + <div class="closeGray" ng-click="closeWin()"></div> + <div class="tipCont"> + <span ng-show="custommenus.length>0"> + 报表“{{delDefine.name}}”正在被 + <span ng-repeat="custommenu in custommenus" ng-click="gotoCustonMenu(custommenu.id)"> + <span class="customname">{{custommenu.name}}</span> + <span ng-show="!$last">、</span></span> + {{custommenus.length}}个看单使用<br/> + 删除后对应看单将不会再显示该报表,是否确认删除? + </span> + <span ng-show="!custommenus"> + 您正在删除报表“{{delDefine.name}}”,是否确认删除? + </span> + </div> + <div class="openBtnGroup clearfix"> + <div class="btn8 mr20" ng-click="closeWin()">取消</div> + <div class="btn8" ng-click="doDelete()">确定</div> + </div> +</div> +<div class="openTipWin orderWrap" ng-show="showOrderWin"> + <div class="closeGray" ng-click="closeOrder()"></div> + <div class="tipCont"> + <p style="font-size: 14px;">指标顺序调整</p> + <p class="lglabel mb20">拖动指标名称调整顺序,表格内指标将按照调整后顺序显示。</p> + <ul class="orderUL"> + <li ng-repeat="cond in condList track by cond.id"> + <span>第{{cond.indexname}}列</span> + <div class="rate" drag-order drag-id="cond.id" drag-info="{{cond}}">{{cond.name}}</div> + </li> + </ul> + </div> + <div class="openBtnGroup clearfix" style="width: 160px;"> + <div class="btn8 mr20" ng-click="closeOrder()">取消</div> + <div class="btn9" ng-click="okOrderWin()">确定</div> + </div> +</div> +<div class="openTipWin" ng-show="wantSave"> + <div class="closeGray" ng-click="closeWin(2)"></div> + <div class="tipCont" style="text-align: left;"> + <p class="mb10">请输入事件统计细分名称:</p> + <div> + <input type="text" class="iptform" ng-model="ename" style="width:300px;" placeholder="文字限定在20个汉字以内"> + <div class="btn5 ml10 btnblock conwidth" ng-click="save(1)">保存</div> + </div> + </div> +</div> +<span id="ruler" style="display: none;"></span> \ No newline at end of file diff --git a/src/main/websrc/template/collect/funnel.html b/src/main/websrc/template/collect/funnel.html new file mode 100644 index 0000000..90e566a --- /dev/null +++ b/src/main/websrc/template/collect/funnel.html @@ -0,0 +1,192 @@ +<div ng-show="(!funnelList || funnelList.length==0) && !addFirst"> + <div class="nodata"> + <h5>还没有漏斗</h5> + </div> + <div class="btn3" style="float:none;width:150px;margin:0 auto;text-align: center;" ng-click="addFirstFunnel()" ng-if="hasEditPower()">创建第一个漏斗</div> + <dl class="tipsList statustip"> + <dt>1. 什么是“漏斗”?</dt> + <dd> + 漏斗是一种分析产品中一个多步骤的行为过程中每一步的转化情况的模型,它可以分析整体的转化情况,以及每一步具体的转化率。</br/> + 举例来说,用户首次进入游戏的过程可能包含:打开app,激活账号,loading页面加载完进入游戏。 + </dd> + <dt>2. 怎么使用漏斗分析?</dt> + <dd> + 通过TrackingIO强大的数据分析,漏斗分析可以帮助解决以下问题:<br/> + 游戏用户在进入游戏时,流失在哪个步骤。不同渠道的游戏用户在做某个任务时,为什么放弃了。 + </dd> + </dl> +</div> +<div ng-show="funnelList.length>0 || addFirst" class="p"> + <div class="conditionBox clearfix p pb20"> + <div class="left"> + <div class="selList" ng-class="{'active':selme,'noright':hasEditPower()}" ng-click="selme=!selme;" ng-mouseleave="selme=false;"> + <span ng-if="currentFunnel.id || currentFunnel.id==0 || !showEventWin">{{funnelInfo.name}}</span> + <span class="ckhand dark" ng-if="!currentFunnel.id && currentFunnel.id!=0 && showEventWin">新建漏斗</span> + <div class="arrowIcon"></div> + <div class="optionList even" ng-show="selme" style="width:320px;"> + <dl class="dlOperTitle bbb" ng-if="hasEditPower() && (funnelList.length<limitInfo.dataConversionFunnelNum || limitInfo.dataConversionFunnelNum==-1)"> + <dd ng-click="addFunnel()">新建漏斗</dd> + </dl> + <div ng-show="funnelList.length>5" class="searchWrap ml10 searchSpec clearfix" style="float:none;width:300px;" stop-event> + <input type="text" class="searchIpt selectIpt" style="width:300px;" ng-model="seatxt" placeholder="关键字搜索"> + </div> + <ul> + <li ng-repeat="m in funnelList | filter:{'name':seatxt} track by $index" ng-click="clickFunnel(m)" ng-class="{'active':m.id == funnelInfo.id}" title="{{m.name}}" class="p"> + {{m.name}}<span class="delIcon s1" ng-click="deleteFunnel(m)" stop-event ng-if="hasEditPower()"></span> + </li> + </ul> + </div> + </div> + <div class="btn8 dark btnblock btnNo" ng-class="{'active':isEditInfo==3 && showEventWin,'dis':!funnelInfo.id || isEditInfo==2}" ng-click="addFunnel(1)" ng-show="hasEditPower()">编辑</div> + </div> + + <div class="right"> + <!-- <select-t-list meau-info="dimensionList" meau-id="dimensionId" meau-name="dimensionname" meau-typekey="['whole','usergroup','population','source']" meau-typename="['','用户分群','人口维度','来源维度']" meau-data="dimenInit" meau-refresh="dimenRmd" operation-sel="funnelInfo.id>0"></select-t-list> --> + <select-t-list meau-info="dimensionList" meau-id="dimensionId" meau-name="dimensionname" meau-typekey="['whole','usergroup','eventlist',null]" meau-typename="['','用户分群','事件属性','用户属性']" meau-data="dimenInit" meau-id2="dimenEventType" meau-refresh="dimenRmd" operation-sel="funnelInfo.id>0"></select-t-list> + <my-datepicker class="dateRange rightDate" init-day="date" range-days2="rangday" operation-sel="funnelInfo.id>0"><span>{{datestr}}</span></my-datepicker> + </div> + <div class="conditionWin eventBox" ng-show="showEventWin" ng-class="{'edit':isEditInfo==3}"> + <div class="sanicon"></div> + <div class="funnelWrap" ng-class="{'max400':getEventNum()>=5}"> + <div ng-repeat="event in eventInfo track by $index" ng-show="event.show!=false"> + <div class="eventItem clearfix p" ng-style="event.style"> + <div class="label txtLabel">第{{event.steps}}步:</div> + <select-list meau-info="eventList" meau-id2="event.eventid" meau-data="event.eventinit" meau-name="eventinitname" class="eventItemsel" keyid="eventName" keyname="eventNameAlias" meau-red="event.nullevent"></select-list> + + <div class="profileItemWrap p"> + <div class="operInfo" style="bottom:35px;" ng-show="event.params && getEventParamsNum(event)>1"> + <div class="operBtn" ng-click="changeRel(event)">{{event.relation}}</div> + </div> + <div class="profileItem" ng-repeat="item in event.params track by $index" ng-show="item.show!=false"> + <profile-item info-list="event.paramsList" item-info="item" item-type="event" item-event="event.event"></profile-item> + <span class="removeSpan" ng-click="removeEventParams(event,item)">取消</span> + </div> + + <span class="ml10 addAttrBtn" ng-click="addEventParams(event)" ng-class="{'dis':getEventParamsNum(event)>=3}"> + <span class="addAttrIcon"></span><span class="ckhand">添加事件属性筛选</span> + </span> + </div> + <span class="delItemIcon right" ng-click="removeEvent(event)"></span> + </div> + <div class="relLine"></div> + </div> + <div class="addItemIcon" ng-click="addEvent()" ng-class="{'dis':getEventNum()>=maxStep}" style="margin-left: 15px;"></div> + </div> + <div class="formDetailItem ml15 mt20"> + <div class="iptlabel" style="width:120px;">转化有效期<help-tip class="help" style="margin-left: 2px;" name="转化有效期"></help-tip>:</div> + <select-list meau-info="dayList" meau-id="windows" meau-data="windowsinit" style="width:100px;" class="upSList" nosearch="true"></select-list> + <span class="desc">完成转化的时间超过此有效期的,为无效转化,即转化失败(流失)。</span> + </div> + <div class="conditionBoxBottom"> + <div class="right mt20"> + <span class="ckhand mr10" ng-class="{'dis':!canSave()}" ng-click="initCondition()">重置条件</span> + <span ng-show="!currentFunnel.id"> + <div class="btn btnblock mybtn h30" ng-click="nameWin()" ng-class="{'disable':!canSave()}">保存</div> + <!-- <div class="btn3 btnblock mybtn h30" ng-click="lookReport()" ng-class="{'disable':!canSave()}">查看</div> --> + </span> + <div class="btnMoreGroup" ng-show="currentFunnel.id" ng-mouseenter="bgroup=true" ng-mouseleave="bgroup=false;"> + <div class="primaryBtn" ng-click="save()" ng-class="{'dis':!canSave()}">保存</div> + <div class="primarySelBtn" ng-class="{'dis':!canSave()}"></div> + <ul class="btnMenu" ng-show="bgroup && canSave()"> + <li ng-click="save()">保存</li> + <li ng-click="nameWin(1)">另存为</li> + </ul> + </div> + </div> + </div> + </div> + </div> + <div class="conditionAlpha" ng-show="showEventWin && funnelList.length>0" ng-click="closeAddWin()"></div> + + <div class="chartWrap chart300 one clearfix" style="margin-top: 0px;" ng-show="funnelList.length>0"> + <div class="chartWrapItem titleChart"> + <div class="chartModule"> + <span>{{funnelInfo.name}}的漏斗分析</span> + <!-- <div class="right rigthM"> + <select-list meau-info="deviceList" meau-id="deviceId" meau-data="deviceInit" class="whitebg" style="width:100px;"></select-list> + </div> --> + </div> + <div class="chartItem p"> + <div ng-class="{'lengedChart':dimenId && dimenId!='-all'}"> + <min-chart chart-data="chartData" chart-type="funnel" chart-config="chartConfig" chart-loading="chartLoading"></min-chart> + </div> + <div class="lengedWrap" ng-show="dimenId && dimenId!='-all'"> + <div class="searchWrap searchSpec clearfix" style="float:none;"> + <input type="text" class="searchIpt selectIpt" ng-model="swtxt" placeholder="关键字搜索"> + </div> + <ul class="hm-scroll"> + <li ng-repeat="name in lengedNames | filter:swtxt track by $index" ng-click="setFunnelData(name,1)"> + <span class="sign" ng-style="getChartStyle(name)"></span>{{name}} + </li> + </ul> + </div> + </div> + </div> + </div> + + <div class="chartWrap clearfix" ng-show="funnelList.length>0"> + <div class="chartWrapItem nothborder"> + <div class="chartModule"> + <span>{{funnelInfo.name}}的漏斗分析详情</span> + <export-button export-condition="listInfoDataCondition" ng-if="listInfoData.val && listInfoData.val.length>0"></export-button> + </div> + <is-loading ng-if="listInfoLoading"></is-loading> + <div class="tableList" ng-show="!listInfoLoading"> + <table ng-show="listInfoData.val.length>0"> + <tr> + <th ng-repeat="title in listInfoData.name track by $index">{{title}}</th> + </tr> + <tr ng-repeat="info in listInfoData.val track by $index"> + <td>{{info[listInfoData.columnkey[0]]}}</td> + <td ng-repeat="col in listInfoData.columnkey track by $index" ng-if="$index>0" ng-class="{'lostinfo':col.indexOf('lost')==-1,'m':listInfoData.columnkey.length>7}"> + <div ng-if="col.indexOf('lost')==-1"> + <span class="tabBar"> + <div class="active" style="height:{{info['rate_'+col]}}%"></div> + </span> + <span style="display: inline-block;"> + {{info[col]}} + <p class="n">{{info['rate_'+col]}}%</p> + </span> + </div> + <div ng-if="col.indexOf('lost')>-1" class="lost"> + {{info[col]}} + <p>{{info['rate_' + col]}}%</p> + </div> + </td> + </tr> + </table> + <no-data ng-if="!listInfoData.val || listInfoData.val.length==0"></no-data> + </div> + </div> + </div> +</div> +<div class="openTipWin" ng-show="wantDelete"> + <div class="closeGray" ng-click="closeWin()"></div> + <div class="tipCont"> + <span ng-show="custommenus.length>0"> + 报表“{{delDefine.name}}”正在被 + <span ng-repeat="custommenu in custommenus" ng-click="gotoCustonMenu(custommenu.id)"> + <span class="customname">{{custommenu.name}}</span> + <span ng-show="!$last">、</span></span> + {{custommenus.length}}个看单使用<br/> + 删除后对应看单将不会再显示该报表,是否确认删除? + </span> + <span ng-show="!custommenus"> + 您正在删除报表“{{delDefine.name}}”,是否确认删除? + </span> + </div> + <div class="openBtnGroup clearfix"> + <div class="btn8 mr20" ng-click="closeWin()">取消</div> + <div class="btn8" ng-click="doDelete()">确定</div> + </div> +</div> +<div class="openTipWin" ng-show="wantSave"> + <div class="closeGray" ng-click="closeWin(2)"></div> + <div class="tipCont" style="text-align: left;"> + <p class="mb10">请输入漏斗名称:</p> + <div> + <input type="text" class="iptform" ng-model="ename" style="width:300px;" placeholder="文字限定在20个汉字以内"> + <div class="btn5 ml10 btnblock conwidth" ng-click="save(1)">保存</div> + </div> + </div> +</div> \ No newline at end of file diff --git a/src/main/websrc/template/common/channel.html b/src/main/websrc/template/common/channel.html new file mode 100644 index 0000000..2727225 --- /dev/null +++ b/src/main/websrc/template/common/channel.html @@ -0,0 +1,30 @@ +<div class="popchannellist" ng-show="popchannellist" ng-class="{'doshow':popchannellist}" stop-event> + <div class="title"> + <span ng-click="changeType('ry_coop')" ng-class="{'active': channType==='ry_coop'}" ng-if="!type">常规渠道</span> + + <span ng-click="changeType(null)" ng-class="{'active': channType===null}">自定义渠道</span> + + <span ng-click="changeType('ry_bd')" ng-class="{'active': channType==='ry_bd'}" ng-if="!type">SEM渠道</span> + + <div class="right" ng-click="popchannellist = false;"></div> + </div> + <div class="subtitle"> + <input type="text" class="iptform" ng-model="channelfilter" style="width:80px;height:25px;" placeholder="搜索关键字" /> + <span ng-click="letter='abcdefg'" ng-class="{active:letter=='abcdefg'}" class="ml10">A~G</span> + <span ng-click="letter='hijklmn'" ng-class="{active:letter=='hijklmn'}">H~N</span> + <span ng-click="letter='opqrst'" ng-class="{active:letter=='opqrst'}">O~T</span> + <span ng-click="letter='uvwxyz'" ng-class="{active:letter=='uvwxyz'}">U~Z</span> + <span ng-click="letter='0123456789'" ng-class="{active:letter=='0123456789'}">0~9</span> + <span ng-show="channType!='ry_bd' && appplattype==2" class="sline ml10"> + <span ng-click="category='ADVERTISING'" ng-class="{active:category == 'ADVERTISING'}">分链接</span> + <span ng-click="category='APPMARKET'" ng-class="{active:category == 'APPMARKET'}">分包</span> + </span> + <em class="ckhand right" ng-if="(channType===null || !channType) && isSuper" ng-click="goChannel()"> + 渠道管理 + </em> + </div> + + <ul class="poplist"> + <li ng-class="{'active':curchid == channel.id}" title="{{channel.name}}" ng-repeat="channel in curChannelList | charfilter:letter | filter:{name:channelfilter} | orderBy:'firstchar' track by $index" ng-click="clickChannel(channel)">{{channel.name}}</li> + </ul> +</div> \ No newline at end of file diff --git a/src/main/websrc/template/common/chart.html b/src/main/websrc/template/common/chart.html new file mode 100644 index 0000000..d2b386e --- /dev/null +++ b/src/main/websrc/template/common/chart.html @@ -0,0 +1,40 @@ +<div style="width:100%;" class="clearfix"> + <is-loading ng-if="chartLoading"></is-loading> + <div class="nodataTxt" ng-show="!chartLoading && chartData.val.length==0" style="height:308px;">NO DATA</div> + <div class="chartInfo" ng-show="!chartLoading && chartData.val.length>0 && isChart"></div> + <div class="tableList chartList hm-scroll" ng-if="!chartLoading && chartData.val.length>0 && !isChart"> + <table fix-header title-name="chartData.name"> + <thead> + <tr> + <!-- <th>序号</th> --> + <th>{{chartData.column[0]}}</th> + <th ng-repeat="title in chartData.name track by $index"> + {{title}} + <!-- <span class="sortWrap" ng-click="reverse=!reverse;order(listInfo.columnkey[$index], reverse)"> + <span class="ascIcon" ng-class="{'active':sortCol==listInfo.columnkey[$index] && !reverse}"></span> + <span class="descIcon" ng-class="{'active':sortCol==listInfo.columnkey[$index] && reverse}"></span> + </span> --> + </th> + </tr> + </thead> + <tbody> + <tr ng-repeat="k in chartData.key track by $index"> + <!-- <td>{{$index+1}}</td> --> + <td>{{k}}</td> + <td ng-repeat="col in chartData.name track by $index">{{chartData.val[$index][$parent.$index]}}</td> + </tr> + </tbody> + </table> + </div> + <div class="eptWrapGroup clearfix" style="margin-right: 0px;" ng-if="!chartLoading && chartData.val.length>0 && chartCondition"> + <div class="eptWrap lc" ng-click="changeChart(true)" ng-class="{'active':isChart}"> + <span class="eptChart"></span> + </div> + <div class="eptWrap rc" ng-click="changeChart(false)" ng-class="{'active':!isChart}"> + <span class="eptList"></span> + </div> + <div class="eptWrap ml10" ng-click="exportData()" ng-if="iscanExport"> + <span class="eptOut"></span> + </div> + </div> +</div> diff --git a/src/main/websrc/template/common/custom.html b/src/main/websrc/template/common/custom.html new file mode 100644 index 0000000..a47d9bc --- /dev/null +++ b/src/main/websrc/template/common/custom.html @@ -0,0 +1,93 @@ +<div class="customBigWin"> + <div class="conditionWin eventBox" style="top:0px;" ng-if="type=='eventstats'"> + <div class="conditionItem"> + <span>展示事件:</span> + <select-list meau-info="eventList" meau-id="eventId" meau-data="eventInit" meau-name="eventinitname" keyid="eventName" keyname="eventNameAlias" meau-refresh="evtrefresh" meau-red="evnullevent"></select-list> + <span ng-show="event.id"> + <span class="ml20">展示属性:</span> + <select-t-list meau-info="propertyList" meau-id="propertyId" meau-data="propertyInit" keyid="attr" keyname="attrAlias" meau-refresh="prorefresh" meau-name="properinitname" meau-typekey="['default','custom']" meau-typename="['默认属性','']" meau-red="evnullevent"></select-t-list> + </span> + <select-list meau-info="sumtypeList" meau-id="sumtypeId" meau-data="sumtypeInit" keyid="attr" keyname="attrAlias" meau-name="suminitname" ng-show="event.second" meau-red="evnullevent"></select-list> + </div> + <div style="padding-bottom: 20px;" ng-class="{'conditionEventItem':event.params && getEventParamsNum(event)>5}"> + <div class="profileItemWrap p"> + <div class="operInfo" style="bottom:35px;" ng-show="event.params && getEventParamsNum(event)>1"> + <div class="operBtn" ng-click="changeRel(event)">{{event.relation}}</div> + </div> + + <div class="profileItem" ng-repeat="item in event.params track by $index" ng-show="item.show!=false"> + <profile-item info-list="event.paramsList" item-info="item" item-type="event" item-event="eventId"></profile-item> + <span class="removeSpan" ng-click="removeEventParams(event,item)">取消</span> + </div> + <div class="addAttrBtn ml10" ng-click="addEventParams(event)" ng-class="{'dis':getEventParamsNum(event)>=3}"> + <span class="addAttrIcon"></span><span class="ckhand">添加事件属性筛选</span> + </div> + </div> + + </div> + <div class="conditionBoxBottom"> + <div class="right mt20"> + <div class="btn3 btnblock mr10 mybtn h30" ng-click="eventSave()">保存</div> + </div> + </div> + </div> + + <div class="conditionWin eventBox" ng-if="type=='retention'"> + <div class="funnelWrap clearfix" ng-repeat="event in eventInfo track by $index" ng-class="{'last':$index>0}"> + <div class="eventItem clearfix p" ng-style="event.style"> + <div class="label txtLabel" ng-if="$index==0">初始行为:</div> + <div class="label txtLabel" ng-if="$index==1">回访行为:</div> + <select-list meau-info="eventList" meau-id2="event.eventid" meau-data="event.eventinit" meau-name="event.eventinitname" class="eventItemsel" keyid="eventName" keyname="eventNameAlias" meau-red="event.nullevent"></select-list> + + <div class="profileItemWrap p"> + <div class="operInfo" style="bottom:35px;" ng-show="event.params && getEventParamsNum(event)>1"> + <div class="operBtn" ng-click="changeRel(event)">{{event.relation}}</div> + </div> + <div class="profileItem" ng-repeat="item in event.params track by $index" ng-show="item.show!=false"> + <profile-item info-list="event.paramsList" item-info="item" item-type="event" item-event="event.event"></profile-item> + <span class="removeSpan" ng-click="removeEventParams(event,item)">取消</span> + </div> + <span class="ml10 addAttrBtn" ng-click="addEventParams(event)" ng-class="{'dis':getEventParamsNum(event)>=3}" style="display: inline-block;"> + <span class="addAttrIcon"></span><span class="ckhand">添加事件属性筛选</span> + </span> + </div> + </div> + </div> + <div class="conditionBoxBottom"> + <div class="right mt20"> + <div class="btn3 btnblock mr10 mybtn h30" ng-click="okSave()">保存</div> + </div> + </div> + </div> + + <div class="conditionWin eventBox" ng-if="type=='funnel'"> + <div class="funnelWrap" ng-class="{'max400':eventInfo.length>=5}"> + <div ng-repeat="event in eventInfo track by $index" ng-show="event.show!=false"> + <div class="eventItem clearfix p" ng-style="event.style"> + <div class="label txtLabel">第{{event.steps}}步:</div> + <select-list meau-info="eventList" meau-id2="event.eventid" meau-data="event.eventinit" meau-name="event.eventinitname" class="eventItemsel" keyid="eventName" keyname="eventNameAlias" meau-red="event.nullevent"></select-list> + + <div class="profileItemWrap p"> + <div class="operInfo" style="bottom:35px;" ng-show="event.params && getEventParamsNum(event)>1"> + <div class="operBtn" ng-click="changeRel(event)">{{event.relation}}</div> + </div> + <div class="profileItem" ng-repeat="item in event.params track by $index" ng-show="item.show!=false"> + <profile-item info-list="event.paramsList" item-info="item" item-type="event" item-event="event.event"></profile-item> + <span class="removeSpan" ng-click="removeEventParams(event,item)">取消</span> + </div> + + <span class="ml10 addAttrBtn" ng-click="addEventParams(event)" ng-class="{'dis':getEventParamsNum(event)>=3}"> + <span class="addAttrIcon"></span><span class="ckhand">添加事件属性筛选</span> + </span> + </div> + <span class="delItemIcon right" ng-click="removeEvent(event)"></span> + </div> + </div> + </div> + <div class="conditionBoxBottom"> + <div class="right mt20"> + <div class="btn3 btnblock mr10 mybtn h30" ng-click="okSave()">保存</div> + </div> + </div> + </div> +</div> \ No newline at end of file diff --git a/src/main/websrc/template/common/datemonth.html b/src/main/websrc/template/common/datemonth.html new file mode 100644 index 0000000..97b8145 --- /dev/null +++ b/src/main/websrc/template/common/datemonth.html @@ -0,0 +1,36 @@ +<div stop-event ng-class="{'active':selme}" ng-click="selme=!selme;" ng-mouseleave="selme=false;"> + <span class="cal" ng-show="options.months>1"></span> + <el class="dateletter" stop-event ng-click="showDateTable()" ng-transclude></el> + <div class="arrowIcon"></div> + <div class="dateWarp" ng-show="showFlag" style="width:220px;" stop-event> + <div class="date-single date-month"> + <div class="date-title"> + <span class="iconleft left" ng-click="changeYear(-1)"></span> + <div class="date-label center-block">{{nowyear}}</div> + <span class="iconright right" ng-click="changeYear(1)"></span> + </div> + <table cellpadding="0" cellspacing="0" class="date-table"> + <tbody> + <tr ng-repeat="row in monthList"> + <td ng-repeat="cell in row"> + <a class="pika-button pika-day" + ng-click="chooseDate(cell)" + ng-class="cellClass(cell)"> + {{cell.month}}月 + </a> + </td> + </tr> + </tbody> + </table> + </div> + <div class='date-footer clearfix' ng-show="options.months>1"> + <div class="right"> + <a class="btn3 mr10" ng-click="complete()">确定</a> + <a class="btn2" ng-click="cancel()">取消</a> + </div> + </div> + <div class='date-footer clearfix' ng-show="options.months==1"> + <a class="btn3 mr5" ng-click="cancel()" style="float:right;">关闭</a> + </div> + </div> +</div> \ No newline at end of file diff --git a/src/main/websrc/template/common/datepicker.html b/src/main/websrc/template/common/datepicker.html new file mode 100644 index 0000000..ee1d174 --- /dev/null +++ b/src/main/websrc/template/common/datepicker.html @@ -0,0 +1,58 @@ +<div stop-event ng-class="{'active':selme && operSel}" ng-click="selme=!selme;showDateTable();" ng-mouseleave="selme=false;"> + <span class="cal" ng-show="panels.length>1"></span> + <el class="dateletter" ng-transclude></el> + <div class="arrowIcon"></div> + <div class="dateWarp dateTabRange" ng-show="showFlag" ng-style="wstyle" stop-event> + <div class="left"> + <div class="date-single" ng-repeat="p in panels" style="height:270px;"> + <div class="date-title"> + <span class="iconleft left" ng-click="changeMonth($index,p.date,-1)" ng-show="$index===0"></span> + <div class="date-label center-block">{{p.date | date: "yyyy-MM"}}</div> + <span class="iconright right" ng-click="changeMonth($index,p.date,1)" ng-show="$index===panels.length-1"></span> + </div> + <table cellpadding="0" cellspacing="0" class="date-table"> + <thead> + <th scope="col" ng-repeat="week in options.abbrWeeks">{{week}}</th> + </thead> + <tbody> + <tr ng-repeat="row in p.weeks"> + <td ng-repeat="cell in row"> + <a class="pika-button pika-day" + ng-click="chooseDate(cell)" + ng-class="cellClass(cell)"> + {{cell.day | date: "d"}} + </a> + </td> + </tr> + </tbody> + </table> + </div> + + <div class='date-footer' ng-show="panels.length>1"> + <span class='date-input'> + <label>日期范围:</label> + <input type="text" ng-model='customStrat' ng-blur='startDate()' readonly="true" style="width:90px;" /> + <label>至</label> + <input type="text" ng-model='customEnd' ng-blur='endDate()' readonly="true" style="width:90px;" /> + </span> + <div class="right"> + <a class="btn3 mr10" ng-click="complete()">确定</a> + <a class="btn2" ng-click="cancel()">取消</a> + </div> + </div> + <div class='date-footer clearfix' ng-show="panels.length==1"> + <a class="btn3 mr5" ng-click="cancel()" style="float:right;">关闭</a> + </div> + </div> + <div class="relativeDateWrap" ng-show="panels.length>1"> + <a class="btn" ng-click="setRelDate('yesday')" ng-class="{'active':selDayflag=='yesday'}">昨日</a> + <a class="btn" ng-click="setRelDate('d7')" ng-class="{'active':selDayflag=='d7'}">近7天</a> + <a class="btn" ng-click="setRelDate('d14')" ng-class="{'active':selDayflag=='d14'}">近14天</a> + <a class="btn" ng-click="setRelDate('d30')" ng-class="{'active':selDayflag=='d30'}">近30天</a> + <a class="btn" ng-click="setRelDate('-w1')" ng-class="{'active':selDayflag=='-w1'}">上周</a> + <a class="btn" ng-click="setRelDate('w0')" ng-class="{'active':selDayflag=='w0'}">本周</a> + <a class="btn" ng-click="setRelDate('-m1')" ng-class="{'active':selDayflag=='-m1'}">上月</a> + <a class="btn" ng-click="setRelDate('m0')" ng-class="{'active':selDayflag=='m0'}">本月</a> + </div> + </div> +</div> \ No newline at end of file diff --git a/src/main/websrc/template/common/daterange.html b/src/main/websrc/template/common/daterange.html new file mode 100644 index 0000000..bae2669 --- /dev/null +++ b/src/main/websrc/template/common/daterange.html @@ -0,0 +1,8 @@ +<div class="timeBtnWrap clearfix"> + <div class="btn" ng-class="{'active':timeflag=='today'}" ng-click="changeDate('today')" ng-show="noToday!=true">今日</div> + <div class="btn" ng-class="{'active':timeflag=='yesday'}" ng-click="changeDate('yesday')">昨日</div> + <div class="btn" ng-class="{'active':timeflag=='d7'}" ng-click="changeDate('d7')">近7天</div> + <div class="btn" ng-class="{'active':timeflag=='d14'}" ng-click="changeDate('d14')">近14天</div> + <div class="btn" ng-class="{'active':timeflag=='d30'}" ng-click="changeDate('d30')">近30天</div> + <my-datepicker class="dateRange" ng-show="!nodrange" init-day="mydate" max-day2="maxDay" range-days2="myrangeday"><span>{{datestr}}</span></my-datepicker> +</div> \ No newline at end of file diff --git a/src/main/websrc/template/common/dateweek.html b/src/main/websrc/template/common/dateweek.html new file mode 100644 index 0000000..cbf0a71 --- /dev/null +++ b/src/main/websrc/template/common/dateweek.html @@ -0,0 +1,36 @@ +<div stop-event ng-class="{'active':selme}" ng-click="selme=!selme;" ng-mouseleave="selme=false;"> + <span class="cal" ng-show="options.weeks>1"></span> + <el class="dateletter" stop-event ng-click="showDateTable()" ng-transclude></el> + <div class="arrowIcon"></div> + <div class="dateWarp" ng-show="showFlag" style="width:370px;" stop-event> + <div class="date-single date-week"> + <div class="date-title"> + <span class="iconleft left" ng-click="changeYear(-1)"></span> + <div class="date-label center-block">{{nowyear}}</div> + <span class="iconright right" ng-click="changeYear(1)"></span> + </div> + <table cellpadding="0" cellspacing="0" class="date-table"> + <tbody> + <tr ng-repeat="row in weeklist"> + <td ng-repeat="cell in row"> + <a class="pika-button pika-day" + ng-click="chooseDate(cell)" + ng-class="cellClass(cell)"> + 第{{cell.week}}周 + </a> + </td> + </tr> + </tbody> + </table> + </div> + <div class='date-footer clearfix' ng-show="options.weeks>1"> + <div class="right"> + <a class="btn3 mr10" ng-click="complete()">确定</a> + <a class="btn2" ng-click="cancel()">取消</a> + </div> + </div> + <div class='date-footer clearfix' ng-show="options.weeks==1"> + <a class="btn3 mr5" ng-click="cancel()" style="float:right;">关闭</a> + </div> + </div> +</div> \ No newline at end of file diff --git a/src/main/websrc/template/common/delwin.html b/src/main/websrc/template/common/delwin.html new file mode 100644 index 0000000..defee77 --- /dev/null +++ b/src/main/websrc/template/common/delwin.html @@ -0,0 +1,15 @@ +<div class="dialogWin tipwin" ng-show="status==true"> + <div class="dialogTitle"> + <label>提示</label> + <div class="closeIcon fr mt10 mr10" ng-click="hideWin()"></div> + </div> + <div class="dialogContent"> + <div class="formInfo"> + <p class="ptip" ng-transclude></p> + </div> + <div class="btnTwoWrap clearfix"> + <div class="btn6 mr10" ng-click="hideWin()" style="width:70px;text-align: center;">取消</div> + <div class="btn5" ng-click="delfn()" style="width:70px;text-align: center;">{{btnname}}</div> + </div> + </div> +</div> \ No newline at end of file diff --git a/src/main/websrc/template/common/export.html b/src/main/websrc/template/common/export.html new file mode 100644 index 0000000..c21fa26 --- /dev/null +++ b/src/main/websrc/template/common/export.html @@ -0,0 +1,3 @@ +<div class="eptWrap" ng-click="exportData()" ng-style="style1" ng-hide="iscanExport"> + <span class="eptOut"></span> +</div> diff --git a/src/main/websrc/template/common/flipinfo.html b/src/main/websrc/template/common/flipinfo.html new file mode 100644 index 0000000..d589911 --- /dev/null +++ b/src/main/websrc/template/common/flipinfo.html @@ -0,0 +1,12 @@ + +<div class="filpinfo" ng-show="page.totals > minNum"> + <select-list meau-info="everyList" meau-id="everyId" meau-data="everyInit" class="upSList" style="z-index: 5;"></select-list> + <span class="numlabel ml10">共计{{page.totals}}条</span> + <div class="right clearfix"> + <div class="btn2 big" ng-click="goto(2)" ng-class="{'dis':page.curpage==1}"><</div> + + <span class="numlabel left mr5">第<input type="number" min="1" max="{{page.totalpages}}" class="iptform iptnum" ng-enter="goto(5)" ng-blur="goto(5)" ng-model="gonum" style="width:60px;text-align: center;" />页/{{page.totalpages}}页</span> + + <div class="btn2 big" ng-click="goto(3)" ng-class="{'dis':page.curpage==page.totalpages || page.totalpages<=1}">></div> + </div> +</div> diff --git a/src/main/websrc/template/common/flipinfody.html b/src/main/websrc/template/common/flipinfody.html new file mode 100644 index 0000000..88b2c4c --- /dev/null +++ b/src/main/websrc/template/common/flipinfody.html @@ -0,0 +1,12 @@ + +<div class="filpinfo" ng-show="page.totals > minNum"> + <select-list meau-info="everyList" meau-id="everyId" meau-data="everyInit" class="upSList"></select-list> + <span class="numlabel ml10">共计{{page.totals}}条</span> + <div class="right clearfix"> + <div class="btn2 big" ng-click="goto(2)" ng-class="{'dis':page.curpage==1}"><</div> + + <span class="numlabel left mr5">第<input type="number" min="1" max="{{page.totalpages}}" class="iptform iptnum" ng-enter="goto(5)" ng-blur="goto(5)" ng-model="gonum" style="width:60px;text-align: center;" />页/{{page.totalpages}}页</span> + + <div class="btn2 big" ng-click="goto(3)" ng-class="{'dis':page.curpage==page.totalpages || page.totalpages<=1}">></div> + </div> +</div> diff --git a/src/main/websrc/template/home/demolist.html b/src/main/websrc/template/home/demolist.html new file mode 100644 index 0000000..ea40064 --- /dev/null +++ b/src/main/websrc/template/home/demolist.html @@ -0,0 +1,250 @@ +<div class="content padBottom80"> + <div class="demoListTitle">TrackingIO目前提供了下面五个产品体验Demo,点击即可查看。</div> + <div class="demoListNotes">注:Demo数据为非真实业务数据,仅为企业提供可适用的业务场景参考。</div> + + <div class="demoList">电商产品<span><a href ng-click="goDemo('5eb29a7e239537f4bedef93f8289d1c6')">点击查看>></a></span></div> + <div class="demoListWarp"> + <div class="demoListLeft"> + <li> + <p class="num">689573</p> + <p class="name">推广点击量</p> + </li> + <li> + <p class="num">84562</p> + <p class="name">推广激活量</p> + </li> + <li> + <p class="num">37935</p> + <p class="name">自然量激活</p> + </li> + <li> + <p class="num">56723</p> + <p class="name">作弊点击量</p> + </li> + <li> + <p class="num">5623</p> + <p class="name">作弊激活量</p> + </li> + </div> + <div class="demoListright"> + <li> + <p class="num">21</p> + <p class="name">事件种类数</p> + </li> + <li> + <p class="num">68</p> + <p class="name">事件属性数</p> + </li> + <li> + <p class="num">15</p> + <p class="name">用户属性数</p> + </li> + <li> + <p class="num">59832</p> + <p class="name">本月事件总次数</p> + </li> + <li> + <p class="num">61234</p> + <p class="name">上月事件总次数</p> + </li> + </div> + <div class="clear"></div> + </div> + + <div class="demoList">金融产品<span><a href ng-click="goDemo('f4c6764d10bec9a3c4bd4f79a442a947')">点击查看>></a></span></div> + <div class="demoListWarp"> + <div class="demoListLeft"> + <li> + <p class="num">944672</p> + <p class="name">推广点击量</p> + </li> + <li> + <p class="num">69234</p> + <p class="name">推广激活量</p> + </li> + <li> + <p class="num">52338</p> + <p class="name">自然量激活</p> + </li> + <li> + <p class="num">92343</p> + <p class="name">作弊点击量</p> + </li> + <li> + <p class="num">9235</p> + <p class="name">作弊激活量</p> + </li> + </div> + <div class="demoListright"> + <li> + <p class="num">22</p> + <p class="name">事件种类数</p> + </li> + <li> + <p class="num">72</p> + <p class="name">事件属性数</p> + </li> + <li> + <p class="num">18</p> + <p class="name">用户属性数</p> + </li> + <li> + <p class="num">89235</p> + <p class="name">本月事件总次数</p> + </li> + <li> + <p class="num">83472</p> + <p class="name">上月事件总次数</p> + </li> + </div> + <div class="clear"></div> + </div> + + <div class="demoList">直播产品<span><a href ng-click="goDemo('022da4f8bd53ac212141bd7fdfa9532d')">点击查看>></a></span></div> + <div class="demoListWarp"> + <div class="demoListLeft"> + <li> + <p class="num">589239</p> + <p class="name">推广点击量</p> + </li> + <li> + <p class="num">57093</p> + <p class="name">推广激活量</p> + </li> + <li> + <p class="num">48756</p> + <p class="name">自然量激活</p> + </li> + <li> + <p class="num">56723</p> + <p class="name">作弊点击量</p> + </li> + <li> + <p class="num">5623</p> + <p class="name">作弊激活量</p> + </li> + </div> + <div class="demoListright"> + <li> + <p class="num">18</p> + <p class="name">事件种类数</p> + </li> + <li> + <p class="num">39</p> + <p class="name">事件属性数</p> + </li> + <li> + <p class="num">12</p> + <p class="name">用户属性数</p> + </li> + <li> + <p class="num">93886</p> + <p class="name">本月事件总次数</p> + </li> + <li> + <p class="num">89659</p> + <p class="name">上月事件总次数</p> + </li> + </div> + <div class="clear"></div> + </div> + + <div class="demoList">H5产品<span><a href ng-click="goDemo('e0b3000ebd3f54b791a405f68d3e520c')">点击查看>></a></span></div> + <div class="demoListWarp"> + <div class="demoListLeft"> + <li> + <p class="num">78342</p> + <p class="name">推广点击量</p> + </li> + <li> + <p class="num">6098</p> + <p class="name">推广注册量</p> + </li> + <li> + <p class="num">4033</p> + <p class="name">自然注册量</p> + </li> + <li> + <p class="num">92124</p> + <p class="name">PV</p> + </li> + <li> + <p class="num">80934</p> + <p class="name">UV</p> + </li> + </div> + <div class="demoListright"> + <li> + <p class="num">10</p> + <p class="name">事件种类数</p> + </li> + <li> + <p class="num">80</p> + <p class="name">事件属性数</p> + </li> + <li> + <p class="num">15</p> + <p class="name">用户属性数</p> + </li> + <li> + <p class="num">120834</p> + <p class="name">本月事件总次数</p> + </li> + <li> + <p class="num">140934</p> + <p class="name">上月事件总次数</p> + </li> + </div> + <div class="clear"></div> + </div> + + <div class="demoList">常规产品<span><a ng-click="goDemo('e31caee07ebedf8c172267e73204802f')">点击查看>></a></span></div> + <div class="demoListWarp"> + <div class="demoListLeft"> + <li> + <p class="num">628765</p> + <p class="name">推广点击量</p> + </li> + <li> + <p class="num">78564</p> + <p class="name">推广激活量</p> + </li> + <li> + <p class="num">52378</p> + <p class="name">自然量激活</p> + </li> + <li> + <p class="num">42783</p> + <p class="name">作弊点击量</p> + </li> + <li> + <p class="num">4892</p> + <p class="name">作弊激活量</p> + </li> + </div> + <div class="demoListright"> + <li> + <p class="num">14</p> + <p class="name">事件种类数</p> + </li> + <li> + <p class="num">28</p> + <p class="name">事件属性数</p> + </li> + <li> + <p class="num">8</p> + <p class="name">用户属性数</p> + </li> + <li> + <p class="num">67235</p> + <p class="name">本月事件总次数</p> + </li> + <li> + <p class="num">71542</p> + <p class="name">上月事件总次数</p> + </li> + </div> + <div class="clear"></div> + </div> + +</div> \ No newline at end of file diff --git a/src/main/websrc/template/manage/activityevent.html b/src/main/websrc/template/manage/activityevent.html new file mode 100644 index 0000000..054edf5 --- /dev/null +++ b/src/main/websrc/template/manage/activityevent.html @@ -0,0 +1,46 @@ +<div class="clearfix longTip rightTip tip0"> + <ul class="customNav custleft"> + <li ng-click="goPage('collect.event')">APP事件管理</li> + <li class="active" ng-click="goPage('collect.activityevent')">虚拟事件管理</li> + + </ul> +</div> + +<div class="chartWrap clearfix" style="margin-top: 20px;"> + <div class="chartWrapItem grayhm titleChart nothborder"> + + <div class="chartModule"> + <span>虚拟事件管理</span> + <div class="searchWrap"> + <input type="text" class="searchIpt" ng-model="searchTxt" placeholder="输入包含事件搜索"> + </div> + <div class="btn10 mr10" style="float: right;margin-top: 9px;" ng-click="gopage()" ng-if="hasEditPower()"> + <span class="formAddIcon"></span>新增虚拟事件 + </div> + </div> + <div class="tableList"> + <table> + <tr> + <th>序号</th> + <th>虚拟事件名称</th> + <th>包含事件</th> + <th ng-if="hasEditPower()">操作</th> + </tr> + <tr ng-repeat="info in eventList | filterList:searchTxt:'eventListName' track by $index" ng-if="$index>flipPage.start && $index < flipPage.end"> + <td>{{$index+1}}</td> + <td>{{info.ch_name}}</td> + <td>{{info.eventListName}}</td> + <td class="formOper" ng-if="hasEditPower()"> + <div class="formBtn" ng-click="gopage(info)"> + <span class="editIcon"></span>编辑 + </div> + <div class="btn4" ng-if="info.enable==false && info.type=='userdefine'" ng-click="onUser(info.id)">启用</div> + <div class="btn2" ng-if="info.enable==true && info.type=='userdefine'" ng-click="offUser(info.id)">停用</div> + </td> + </tr> + </table> + <flip-info list-info="eventList" search-txt="searchTxt" search-name="eventList"></flip-info> + </div> + + </div> +</div> \ No newline at end of file diff --git a/src/main/websrc/template/manage/activityeventDetail.html b/src/main/websrc/template/manage/activityeventDetail.html new file mode 100644 index 0000000..b329d96 --- /dev/null +++ b/src/main/websrc/template/manage/activityeventDetail.html @@ -0,0 +1,44 @@ +<ul class="tabMenu formTab"> + <li class="ckblue" ng-click="cancel()"><span class="doBackIcon doBackIconBlue"></span>返回</li> + <li>{{title}}</li> +</ul> +<div class="formDetailInfo label150"> + <div class="clear"></div> + <div class="formDetailItem"> + <div class="iptlabel must">名称:</div> + <input type="text" class="iptform" ng-model="name" placeholder="请输入名称" ng-disabled="inputdis"> + <em class="error" ng-if="tip.name.status">{{tip.name.txt}}</em> + </div> + <div class="formDetailItem"> + <div class="iptlabel must">事件:</div> + <div class="powerSelectData" style="display: inline-block;"> + <div class="campaign"> + <div class="pt">未选事件</div> + <div class="datawrap one"> + <div class="clear"></div> + <ul class="campaignList"> + <!-- <li><span class="checkbox" ng-class="{'active':selAll}" ng-click="selectAllEvent()"></span>全选</li> --> + <li ng-repeat="params in eventList track by $index" ng-click="chooseItem(params)" ng-if="params.ischeck!=true" title="{{params.eventNameAlias}}"> + <span class="checkbox"></span>{{params.eventNameAlias}} + </li> + </ul> + </div> + </div> + <div class="campaign"> + <div class="pt">已选事件</div> + <div class="datawrap one"> + <ul class="campaignList"> + <li ng-repeat="params in eventList track by $index" ng-click="cancelItem(params)" ng-if="params.ischeck==true" title="{{params.eventNameAlias}}"> + <span class="checkbox active" ng-if="specialEvents.indexOf(params.eventName)==-1"></span>{{params.eventNameAlias}} + </li> + </ul> + </div> + </div> + <em class="error" ng-if="tip.moreparams.status" style="vertical-align: bottom;">{{tip.moreparams.txt}}</em> + </div> + </div> + <div class="formsaveBtnWrap clearfix"> + <div class="btn6" ng-click="cancel()">取消</div> + <div class="btn5" ng-click="save()">保存</div> + </div> +</div> \ No newline at end of file diff --git a/src/main/websrc/template/manage/app.html b/src/main/websrc/template/manage/app.html new file mode 100644 index 0000000..d00b3ba --- /dev/null +++ b/src/main/websrc/template/manage/app.html @@ -0,0 +1,45 @@ +<div class="btn3 mb20" ng-click="gopage()" ng-if="(appAlllistInfo.length<limitInfo.appNum || limitInfo.appNum==-1) && (isManage || isSuper)"><span class="formAddIcon"></span>新建产品</div> +<div class="btn2 big dis mb20" ng-if="(appAlllistInfo.length>=limitInfo.appNum && limitInfo.appNum!=-1) || (!isSuper && !isManage)"><span class="formAddIcon dis"></span>新建产品</div> +<span class="tiplabel" ng-if="limitInfo.appNum!=-1">主账号仅允许创建{{limitInfo.appNum}}个产品,如需升级请联系商务。</span> +<div class="clear"></div> +<div class="wrapTitle formTitleWrap"> + <span>产品管理</span> + <div class="searchWrap"> + <input type="text" class="searchIpt" ng-model="searchTxt" placeholder="搜索产品名称或APPKEY"> + </div> +</div> +<div class="tableList yeswrap"> + <table> + <tr> + <th>序号</th> + <th>平台</th> + <th>产品名称</th> + <th>APPKEY</th> + <th style="width:150px;">创建时间</th> + <th style="width:110px;">操作</th> + </tr> + <tr ng-repeat="info in appAlllistInfo | filterList:searchTxt:'name,appkey' track by $index" ng-if="$index>flipPage.start && $index < flipPage.end"> + <td>{{$index+1}}</td> + <td> + <div class="appicon" style="margin-left: 0px;" ng-class="{'iOS':'apple','Android':'android','H5':'web'}[info.platform]"></div> + </td> + <td ng-if="!info.isDebug"> + <span class="ckblue" ng-click="goReport(info)">{{info.name}}</span> + <span class="copyBtnIcon copyBtn" data-clipboard-text="{{info.name}}" title="点击复制"></span> + </td> + <td ng-if="info.isDebug"> + {{info.name}} + </td> + <td>{{info.appkey}}</td> + <td>{{info.createTime | date:'yyyy-MM-dd HH:mm:ss'}}</td> + <td class="formOper"> + <div class="formBtn" ng-click="gopage(info.id)" style="margin-right: 10px;"><span class="editIcon"></span>编辑</div> + <div class="formBtn" ng-click="doRemove(info.id)" ng-if="specialsAppkey.indexOf(info.appkey)==-1" style="margin-right: 10px;"><span class="removeIcon"></span>删除</div> + <!-- <div class="formBtn" ng-click="gopage(info.id,1)" ng-if="info.isDebug" style="margin-right: 10px;">调试</div> --> + <!-- <span class="label" ng-if="!info.isDebug" style="color:#999">已调试</span> --> + </td> + </tr> + </table> + <del-tip status="delstatus" delfn="removeInfo()">确定删除该产品?<br><b class="error">此应用的数据将彻底删除,无法恢复!</b></del-tip> +</div> +<flip-info list-info="appAlllistInfo" search-txt="searchTxt" search-name="name,appkey"></flip-info> diff --git a/src/main/websrc/template/manage/appDetail.html b/src/main/websrc/template/manage/appDetail.html new file mode 100644 index 0000000..d56e54f --- /dev/null +++ b/src/main/websrc/template/manage/appDetail.html @@ -0,0 +1,247 @@ +<div class="formDetailInfo appPageWrap"> + <div class="formDetailTitle" style="margin-bottom: 30px;"> + <a class="pretitle hand" ng-click="cancel()">产品中心</a> + <span ng-if="!infoId"> > 新建产品</span> + <span ng-if="infoId"> > 修改产品</span> + </div> + + <div class="clear"></div> + + <div class="circlewrap" ng-show="isLog || !infoId"> + <span class="active"> + <span class="circle">1</span> + <span class="circlelabel" ng-if="!infoId"> 新建产品</span> + <span class="circlelabel" ng-if="infoId"> 修改产品</span> + </span> + <span class="circleline"></span> + <span ng-class="{'active':stepflag>1}" class="hand"> <!--ng-click="changeStep()"--> + <span class="circle">2</span> + <span class="circlelabel">嵌入SDK</span> + </span> + <!-- <span class="circleline"></span> + <span ng-class="{'active':stepflag>2}"> + <span class="circle">3</span> + <span class="circlelabel">数据调试</span> + </span> --> + </div> + + <div ng-show="stepflag==1"> + <div class="formDetailItem"> + <div class="iptlabel must">产品名称:</div> + <input type="text" class="iptform" ng-model="name" ng-blur="exixtName()" placeholder="请输入应用名称"> + <em class="error" ng-if="tip.name.status">{{tip.name.txt}}</em> + </div> + <div class="formDetailItem"> + <div class="iptlabel must">平台:</div> + <div class="radioWrap" ng-show="!id"> + <div class="radiolabel" ng-click="platform='iOS'"> + <span class="radio" ng-class="{'active':platform=='iOS'}"></span> + iOS + </div> + <div class="radiolabel" ng-click="platform='Android'"> + <span class="radio" ng-class="{'active':platform=='Android'}"></span> + Android + </div> + <div class="radiolabel" ng-click="platform='H5'"> + <span class="radio" ng-class="{'active':platform=='H5'}"></span> + H5 + </div> + <!-- <div class="radiolabel" ng-click="platform='web'"> + <span class="radio" ng-class="{'active':platform=='web'}"></span> + web + </div> --> + </div> + <div class="radioWrap" ng-show="id"> + <span class="label">{{platform}}</span> + </div> + </div> + <div class="formDetailItem" ng-show="platform=='iOS'"> + <div class="iptlabel must">apple_appid:</div> + <input type="text" class="iptform" ng-model="bundleid" ng-blur="existBundleid()" placeholder="请输入apple_appid"> + <em class="error" ng-if="tip.bundleid.status">{{tip.bundleid.txt}}</em> + <div class="iptwrap desc">例:https://itunes.apple.com/cn/app/xxxxx/id1032170871 + 则apple_appid为1032170871,如果apple_appid暂时无法获取,请输入任意9-10位的数字,待应用上线后,请修改</div> + </div> + <div class="formDetailItem"> + <div class="iptlabel must">产品类别:</div> + <input type="text" class="iptform" ng-model="appGenreName" ng-disabled="true" ng-if="id"> + <select-list meau-info="typeList" meau-id="appGenre" meau-data="appGenreInit" keyid="categoryid" ng-show="!id"></select-list> + </div> + <div class="formDetailItem" ng-show="showGame"> + <div class="iptlabel must">游戏类别:</div> + <input type="text" class="iptform" ng-model="gameGenreName" ng-disabled="true" ng-if="id"> + <select-list meau-info="gameList" meau-id="gameGenre" meau-data="gameGenreInit" keyid="categoryid" ng-show="!id"></select-list> + </div> + <div class="formDetailItem"> + <div class="iptlabel must">下载地址:</div> + <input type="text" class="iptform" ng-model="url" placeholder="请输入下载地址"> + <em class="error" ng-if="tip.url.status">{{tip.url.txt}}</em> + </div> + <div class="formsaveBtnWrap clearfix"> + <div class="btn5" ng-click="save()"> + <span ng-if="!id">立即创建</span> + <span ng-if="id">保存</span> + </div> + <div class="btn6" ng-click="cancel()">取消</div> + </div> + </div> + + <div ng-show="stepflag==2"> + <div class="appsdk"> + <div class="appTitle">产品名称:</div> + <div class="appText">{{name}}</div> + </div> + <div class="appsdk"> + <div class="appTitle">您的APPKEY:</div> + <div class="appText appid"> + <span id="appidCopy">{{appkey}}</span> + <button class="sdkAppid" data-clipboard-action="copy" data-clipboard-target="#appidCopy">复制</button> + </div> + </div> + <div class="appsdk idenText"> + <div class="appTitle"> </div> + <div class="appText iden">(APPKEY是应用的唯一标识,用来集成到SDK中。)</div> + </div> + <div class="appsdk"> + <a href="http://doc.trackingio.com/sdkwen-dang.html" target="_blank"><div class="sdkButton" ng-click="downloadsdk()">查看集成文档并下载SDK</div></a> + </div> + <div class="useSdk"> + <p class="userTitle">使用流程:</p> + <p class="userText"> + 1.下载SDK<span class="circleline"></span> + 2.集成SDK + <!-- <span class="circleline"></span> --> + <!-- 3.数据调试 --> + </p> + </div> + <!-- <p class="userText error" style="padding-left: 38px; margin-top: 20px">数据调试结束后上报的数据才进入正常的数据统计。</p> --> + <div class="btn3 stepBtn" ng-click="nextStep()"> + 完成 + </div> + </div> + + <div ng-show="stepflag == 3"> + <div class="btn6 sdkLast" ng-click="changeStep()" style="width: 120px;">上一步</div> + <div class="btn3 sdkSave" ng-click="finisStep()" style="width: 130px;" ng-if="hasZeroEvt==0"> + 完成调试,保存新建 + </div> + <div class="btn2 big dis sdkSave" style="width: 150px;" ng-if="hasZeroEvt>0">完成调试,保存新建</div> + + <div class="clearfix"> + <div class="btn10 mr10" ng-click="queryLogInfo()" style="float: right;"> + <span class="f5IconGray"></span>数据刷新 + </div> + <span style="float: right;" class="error lh32" ng-if="(platform=='H5' && hasZeroEvt==1) || hasZeroEvt==2">我们还没有接收到来自您的任何数据,请继续进行集成工作。</span> + </div> + <div class="applogWrap clearfix"> + <div class="logTestWrap mr10"> + <div class="logTestTitle">LogTest</div> + <div class="logTestCont"> + <div class="appsdk"> + <div class="appTitle">您的APPKEY:</div> + <div class="appText appid"> + <span>{{appkey}}</span> + </div> + </div> + <dl class="tipsList"> + <dt>说明</dt> + <dd>1.打开集成好的客户端,SDK将自动帮助收集数据。</dd> + <dd>2.在任意平台有数据量产生后,您可随时完成调试,进入正式数据报表。</dd> + <dd>3.一个APP最多显示1W条测试数据,且保留最近7天数据。</dd> + </dl> + <div class="appEvtWrap hm-scroll"> + <div class="appEvtItem" ng-repeat="test in testInfos track by $index"> + <span>{{test.eventNameAlias}}</span> + <em>{{test.eventNumber}}</em> + </div> + </div> + </div> + </div> + <div class="logTestWrap"> + <div class="logTestTitle">日志 + <select-list meau-info="deviceList" meau-id="deviceId" meau-data="deviceInit" style="float:right;width:230px;" ng-show="logInfos.length>0"></select-list> + </div> + <div class="logTestCont"> + <dl class="tipsList" ng-if="logInfos.length==0"> + <dt>已经集成,依然查阅不到任何数据?请仔细检查下述事项: </dt> + <dd>1.仔细检查APPKEY是否填写正确,是否多输入了空格等字符。</dd> + <dd>2.检查您的测试设备是否网络正常。</dd> + </dl> + <ul class="chainWrap hm-scroll"> + <li ng-repeat="log in logInfos | filter:{'deviceId':deviceTxt} track by $index"> + <i></i> + <span>{{log.xcontext._deviceid}}</span> + <h6 ng-click="lookEvents(log)" stop-event>{{log.eventName}}</h6> + <em>{{log.xwhen}}</em> + </li> + </ul> + </div> + </div> + </div> + <div class="chartWrap clearfix"> + <div class="chartWrapItem nothborder" ng-if="platform!='H5'"> + <div class="chartModule"> + <span>调试设备列表</span> + </div> + <div class="tableList"> + <table> + <tr> + <th>平台</th> + <th>设备ID</th> + <!-- <th>分包渠道</th> --> + <th>最后测试时间</th> + <th>测试日志总数</th> + </tr> + <tr ng-repeat="total in totalInfos track by $index"> + <td> + <b class="platformIcon" ng-class="getPlatClass(total.os)"></b> + </td> + <td>{{total.deviceId}}</td> + <!-- <td> + <span ng-if="total.packetChannel!='_default_' && total.packetChannel!='unknown'">{{total.packetChannel}}</span> + </td> --> + <td>{{total.latestTime}}</td> + <td>{{total.number}}</td> + </tr> + </table> + </div> + </div> + </div> + </div> + + <div class="leftTipsSlider" ng-class="{'sliderLog':logFlag>0}" stop-event> + <div class="slideHeader" ng-show="logFlag==1"> + 日志详情 + <div class="whiteClose" ng-click="hideDetails()"></div> + </div> + <div class="slideHeader" ng-show="logFlag==2"> + <div class="backLog left" ng-click="logFlag=1">返回</div> + 事件属性 + <div class="whiteClose" ng-click="hideDetails()"></div> + </div> + <div class="tableList hm-scroll" style="max-height: 90%;overflow-y: auto;"> + <table ng-show="logFlag==1"> + <tr ng-repeat="event in eventDetails track by $index"> + <td>{{event.name}}</td> + <td ng-if="!event.isevent"> + <span ng-if="event.second"> + {{curEvtLogInfo.xcontext[event.key]}} + </span> + <span ng-if="!event.second"> + <span ng-if="!event.value">{{curEvtLogInfo[event.key]}}</span> + <span ng-if="event.value">{{event.value}}</span> + </span> + </td> + + <td class="ckEvt" ng-click="lookParams()" ng-if="event.isevent">{{curEvtLogInfo[event.key]}}</td> + </tr> + </table> + <table ng-show="logFlag==2"> + <tr ng-repeat="param in paramsList track by $index"> + <td>{{param.name}}</td> + <td>{{param.value}}</td> + </tr> + </table> + </div> + </div> +</div> diff --git a/src/main/websrc/template/manage/auth.html b/src/main/websrc/template/manage/auth.html new file mode 100644 index 0000000..d9b2084 --- /dev/null +++ b/src/main/websrc/template/manage/auth.html @@ -0,0 +1,82 @@ +<div class="chartWrap clearfix"> + <div class="chartWrapItem grayhm titleChart nothborder"> + <div class="chartModule"> + <span>子账户管理</span> + <div class="searchWrap" style="float: right;"> + <input type="text" class="searchIpt" ng-model="searchTxt" placeholder="输入账户名或姓名搜索"> + </div> + <div class="campaginAction"> + <select-list meau-info="deviceList" meau-id="deviceId" meau-data="deviceInit" class="whitebg mr10" style="width:100px;"></select-list> + + <div class="btn10 mr10" ng-click="gopage()"> + <span class="formAddIcon"></span> + <span>新建子账号</span> + </div> + </div> + </div> + <div class="tableList"> + <table> + <tr> + <th>序号</th> + <th>账户名</th> + <th>姓名</th> + <th>角色</th> + <th>状态</th> + <th>操作</th> + <th>操作记录</th> + </tr> + <tr ng-repeat="info in authList | filterList:searchTxt:'name,email' track by $index" ng-if="$index>flipPage.start && $index < flipPage.end"> + <td>{{$index+1}}</td> + <td>{{info.email}}</td> + <td>{{info.name}}</td> + <td ng-if="accountFlag!='channel'">{{info.roleName}}</td> + <td> + <span ng-if="info.status==-3">未激活</span> + <span ng-if="info.status!=-3 && info.valid">激活</span> + <span ng-if="info.status!=-3 && !info.valid">已过期</span> + </td> + <td class="formOper"> + <div ng-hide="(info.roleCategory == 1 && !isSuper) || info.email == 'demo@reyun.com' || (info.roleCategory==2 && isAppManage)"> + <div class="formBtn" ng-class="{'dis':!info.valid}" ng-click="gopage(info)" ng-show="info.status==1 && findName=='enable'"><span class="editIcon"></span>编辑</div> + <div class="btn4" ng-if="info.status!=-3 && findName=='disable' && info.valid" ng-click="onUser(info.id)">启用</div> + <div class="btn2" ng-if="info.status!=-3 && findName=='enable' && info.valid" ng-click="offUser(info.id)">停用</div> + <div class="formBtn" ng-if="info.status==-3 && !info.send" ng-click="sendEmailAgain(info)">重新发送激活邮件</div> + <div class="formBtn dis" ng-if="info.status==-3 && info.send == 1">发送成功</div> + <div class="formBtn" ng-click="deleteAuth(info)" ng-if="info.status==-3"><span class="removeIcon"></span>删除</div> + </div> + <div class="nopower" ng-if="info.roleCategory==2 && isAppManage" title="您已无此授权权限,请联系管理员"> + </div> + </td> + <td> + <div class="formBtn" ng-click="showDetails(info)" stop-event><span class="lookIcon"></span></div> + </td> + </tr> + </table> + <flip-info list-info="authList" search-txt="searchTxt" search-name="name,email"></flip-info> + </div> + </div> +</div> +<div class="openTipWin" ng-show="wantDelete"> + <div class="closeGray" ng-click="closeWin()"></div> + <div class="tipCont"> + 您正在删除 “{{delInfo.name}}” + <span>子账户</span>,请确认。 + </div> + <div class="openBtnGroup clearfix"> + <div class="btn8 mr20" ng-click="closeWin()">取消</div> + <div class="btn8" ng-click="doDelete()">确定</div> + </div> +</div> +<div class="leftTipsSlider" ng-class="{'sliderSw':isdetail}" stop-event> + <div class="slideHeader"> + 操作记录 + <div class="whiteClose" ng-click="hideDetails()"></div> + </div> + <div class="slideSub">账户名:{{detailInfo.email}}</div> + <ul class="tipsInfo"> + <li>创建人:{{detailInfo.createAccountName}}</li> + <li>创建时间:{{detailInfo.createTime | date:'yyyy-MM-dd HH:mm:ss'}}</li> + <li>最后编辑人:{{detailInfo.modifyAccountName}}</li> + <li>最后编辑时间:{{detailInfo.modifyTime | date:'yyyy-MM-dd HH:mm:ss'}}</li> + </ul> +</div> diff --git a/src/main/websrc/template/manage/authDetail.html b/src/main/websrc/template/manage/authDetail.html new file mode 100644 index 0000000..c3ccbf5 --- /dev/null +++ b/src/main/websrc/template/manage/authDetail.html @@ -0,0 +1,89 @@ +<ul class="tabMenu formTab smallTab"> + <li class="ckblue" ng-click="cancel()"><span class="doBackIcon doBackIconBlue"></span>返回</li> + <li ng-if="accountFlag=='account'"> + <span ng-if="id">修改子账号</span> + <span ng-if="!id">新建子账号</span> + </li> +</ul> +<div class="clear"></div> + +<div class="formDetailInfo" ng-class="{'notopr':!id}"> + <div class="formDetailItem"> + <div class="iptlabel must">邮箱 <help-tip class="help" name="邮箱" style="margin-left: 0px;"></help-tip> :</div> + <input type="text" class="iptform" ng-model="email" placeholder="请输入邮箱" ng-disabled="id"> + <em class="error" ng-if="tip.email.status">{{tip.email.txt}}</em> + </div> + <div class="formDetailItem"> + <div class="iptlabel must">姓名 :</div> + <input type="text" class="iptform" ng-model="name" placeholder="请输入姓名" ng-disabled="accountFlag=='channel' && id && nameNofix"> + <em class="error" ng-if="tip.name.status">{{tip.name.txt}}</em> + </div> + <div class="formDetailItem"> + <div class="iptlabel">备注 :</div> + <textarea class="iptform" ng-model="remark" style="height: 100px;line-height: 25px;"></textarea> + <em class="error" ng-if="tip.remark.status">{{tip.remark.txt}}</em> + </div> + <div class="authPowerWrap"> + <div class="powerHeader"> + <span>角色设置</span> + </div> + <ul class="roleList"> + <li ng-show="isSuper && (!parentRole || parentRole < 1)"> + <div class="radiolabel" ng-click="changeRole(1)"> + <span class="radio" ng-class="{'active':roleCategory==1}"></span> + <em>管理员</em> + </div> + 请谨慎勾选,该种用户将拥有公司下所有应用管理、查看权限,以及产品、成员、渠道管理、推广参数管理权限,且最多可新建3个管理员。 + </li> + <li ng-show="!isAppManage && (!parentRole || parentRole < 2 || roleCategory==2)"> + <div class="radiolabel" ng-click="changeRole(2)"> + <span class="radio" ng-class="{'active':roleCategory==2}"></span> + <em>子应用管理员</em> + </div> + 您可以为子应用选择该权限,该种用户拥有公司下某些应用的管理、查看权限,以及成员管理权限。 + </li> + </ul> + <div class="powerInfoWrap" ng-show="roleCategory>1"> + <p>产品权限:</p> + <div class="powerSelectWrap" ng-show="steps==1"> + <div class="leftSelectWrap"> + <div class="powerHeader bR"> + <div class="left ml10 hand" ng-click="doCheck('app')"> + <span class="checkbox mr5" ng-class="{'active':isAllCheck}"></span>全选 + </div> + 应用 + </div> + <div class="searchWrap"> + <input type="text" class="searchIpt" ng-model="searchTxt" placeholder="搜索产品"> + </div> + <div class="scrollItem"> + <ul class="selInfosWrap w3"> + <li ng-repeat="app in authapplist | filter:{'name':searchTxt} track by $index" ng-click="selectApp(app)" ng-class="{'checked checkedText':app.ischeck}" title="{{getTips(app)}}"> + <span class="checkbox"></span> + <span class="nopower" ng-if="app.nopower"></span> + {{app.name}} + </li> + </ul> + </div> + </div> + <div class="rightSelectWrap"> + <div class="powerHeader">已选择应用</div> + <ul class="selInfosWrap scrollItem" style="max-height: 350px;"> + <li ng-repeat="app in authapplist track by $index" ng-click="removeApp(app)" ng-if="app.ischeck" title="{{getTips(app)}}" ng-class="{'checked checkedText':app.nopower}"> + <span class="checkbox active"></span> + <span class="nopower" ng-if="app.nopower"></span> + {{app.name}} + </li> + </ul> + </div> + </div> + </div> + </div> + <div class="formsaveBtnWrap clearfix"> + <div class="btn6" ng-click="cancel()">取消</div> + <div class="btn5" ng-click="save()"> + <span ng-if="!id">完成</span> + <span ng-if="id">保存</span> + </div> + </div> +</div> diff --git a/src/main/websrc/template/manage/event.html b/src/main/websrc/template/manage/event.html new file mode 100644 index 0000000..679ecd4 --- /dev/null +++ b/src/main/websrc/template/manage/event.html @@ -0,0 +1,100 @@ +<div class="clearfix longTip rightTip tip0"> + <ul class="customNav custleft"> + <li class="active" ng-click="goPage('collect.event')">APP事件管理</li> + <li ng-click="goPage('collect.activityevent')">虚拟事件管理</li> + </ul> +</div> + +<div class="chartWrap clearfix" style="margin-top: 20px;"> + <div class="chartWrapItem grayhm titleChart nothborder"> + + <div ng-show="isevent"> + <div class="chartModule"> + <span>APP事件管理</span> + <div class="searchWrap"> + <input type="text" class="searchIpt" ng-model="searchTxt" placeholder="输入事件名称搜索"> + </div> + </div> + <div class="tableList"> + <table> + <tr> + <th>序号</th> + <th>事件ID</th> + <th>事件名称</th> + <th>操作</th> + </tr> + <tr ng-repeat="info in eventList | filter:{eventNameAlias:searchTxt} track by $index" ng-if="$index>flipPage.start && $index < flipPage.end"> + <td>{{$index+1}}</td> + <td>{{info.eventName}}</td> + <td> + <div ng-show="info.eventName!=eventEditId"> + {{info.eventNameAlias}}<div class="formBtn" ng-click="doEdit(info,1)" ng-if="hasEditPower() && info.common!=true"><span class="editIcon ml5"></span></div> + </div> + <div ng-show="info.eventName==eventEditId"> + <input type="text" class="iptform" ng-model="info.editname"><div class="btn3 ml5 toblock" ng-click="updateEvent(info)">确定</div> + </div> + </td> + <td class="formOper"> + <div class="formBtn" ng-click="clickEvent(info)"> + <span class="viewIcon"></span>详情 + </div> + <div class="btn4" ng-if="info.status==false && info.common!=true && hasEditPower()" ng-click="onOff(info.eventName)">启用</div> + <div class="btn2" ng-if="info.status==true && info.common!=true && hasEditPower()" ng-click="onOff(info.eventName,1)">停用</div> + </td> + </tr> + </table> + <flip-info list-info="eventList" search-txt="searchTxt" search-name="eventNameAlias"></flip-info> + </div> + </div> + + <div ng-show="!isevent"> + <div class="wrapTitle formTitleWrap"> + <span class="ckhand" ng-click="isevent=true">事件管理</span> > + <select-list meau-info="eventSelList" meau-id="eventpid" meau-data="eventpidInit" keyid="eventName" keyname="eventNameAlias" meau-refresh="eventpidF5" style="margin-top:-4px;"></select-list> + + <div class="searchWrap"> + <input type="text" class="searchIpt" ng-model="searchKey" placeholder="输入属性名称搜索"> + </div> + </div> + <div class="tableList"> + <table> + <tr> + <th>序号</th> + <th>属性ID</th> + <th>属性名称</th> + <th>类型</th> + <th ng-if="hasEditPower()">操作</th> + </tr> + <tr ng-repeat="info in paramsList | filter:{attrAlias:searchKey} track by $index" ng-if="$index>pflipPage.start && $index < pflipPage.end"> + <td>{{$index+1}}</td> + <td>{{info.attr}}</td> + <td> + <div ng-show="info.attr!=eventParamsId"> + {{info.attrAlias}} + <div class="formBtn" ng-click="doEdit(info,2)" ng-show="info.common!=true && hasEditPower()"> + <span class="editIcon ml5"></span> + </div> + </div> + <div ng-show="info.attr==eventParamsId"> + <input type="text" class="iptform" ng-model="info.editname"><div class="btn3 toblock ml5" ng-click="updateParams(info)">确定</div> + </div> + </td> + <td>{{info.dataType}}</td> + <td ng-if="hasEditPower()" class="formOper" style="width: 200px;"> + <div class="btn4" ng-if="info.status==false && info.common!=true" ng-click="pramesOnOff(info.attr)">启用</div> + <div class="btn2" ng-if="info.status==true && info.common!=true" ng-click="pramesOnOff(info.attr,1)">停用</div> + + <!-- <div class="btn4" ng-if="info.addStatsView==false && info.common!=true && info.dataType=='number'" ng-click="changeStatus(1,info.attr)">加入统计</div> + <div class="btn2" ng-if="info.addStatsView==true && info.common!=true && info.dataType=='number'" ng-click="changeStatus(2,info.attr)">取消统计</div> --> + + <div class="btn4" ng-if="info.addStatsCondition==false && info.common!=true" ng-click="changeStatus(3,info.attr)">加入筛选</div> + <div class="btn2" ng-if="info.addStatsCondition==true && info.common!=true" ng-click="changeStatus(4,info.attr)">取消筛选</div> + </td> + </tr> + </table> + <flip-info list-info="paramsList" search-txt="searchKey" search-name="attrAlias" list-key="paramTab"></flip-info> + </div> + </div> + + </div> +</div> \ No newline at end of file diff --git a/src/main/websrc/template/manage/img/1.png b/src/main/websrc/template/manage/img/1.png new file mode 100644 index 0000000..4ec8910 Binary files /dev/null and b/src/main/websrc/template/manage/img/1.png differ diff --git a/src/main/websrc/template/manage/img/2.png b/src/main/websrc/template/manage/img/2.png new file mode 100644 index 0000000..c6e47f3 Binary files /dev/null and b/src/main/websrc/template/manage/img/2.png differ diff --git a/src/main/websrc/template/manage/img/3.png b/src/main/websrc/template/manage/img/3.png new file mode 100644 index 0000000..19cf906 Binary files /dev/null and b/src/main/websrc/template/manage/img/3.png differ diff --git a/src/main/websrc/template/manage/img/4.png b/src/main/websrc/template/manage/img/4.png new file mode 100644 index 0000000..12e3c00 Binary files /dev/null and b/src/main/websrc/template/manage/img/4.png differ diff --git a/src/main/websrc/template/manage/img/5.png b/src/main/websrc/template/manage/img/5.png new file mode 100644 index 0000000..50009db Binary files /dev/null and b/src/main/websrc/template/manage/img/5.png differ diff --git a/src/main/websrc/template/manage/img/addchannel.png b/src/main/websrc/template/manage/img/addchannel.png new file mode 100644 index 0000000..aa48ac1 Binary files /dev/null and b/src/main/websrc/template/manage/img/addchannel.png differ diff --git a/src/main/websrc/template/manage/img/addchannel2.png b/src/main/websrc/template/manage/img/addchannel2.png new file mode 100644 index 0000000..e2e1970 Binary files /dev/null and b/src/main/websrc/template/manage/img/addchannel2.png differ diff --git a/src/main/websrc/template/manage/img/addchannel3.png b/src/main/websrc/template/manage/img/addchannel3.png new file mode 100644 index 0000000..5789be2 Binary files /dev/null and b/src/main/websrc/template/manage/img/addchannel3.png differ diff --git a/src/main/websrc/template/manage/img/adwords/1.png b/src/main/websrc/template/manage/img/adwords/1.png new file mode 100644 index 0000000..70ef888 Binary files /dev/null and b/src/main/websrc/template/manage/img/adwords/1.png differ diff --git a/src/main/websrc/template/manage/img/adwords/2.png b/src/main/websrc/template/manage/img/adwords/2.png new file mode 100644 index 0000000..f0d94a8 Binary files /dev/null and b/src/main/websrc/template/manage/img/adwords/2.png differ diff --git a/src/main/websrc/template/manage/img/adwords/3.png b/src/main/websrc/template/manage/img/adwords/3.png new file mode 100644 index 0000000..afb12b8 Binary files /dev/null and b/src/main/websrc/template/manage/img/adwords/3.png differ diff --git a/src/main/websrc/template/manage/img/adwords/4.png b/src/main/websrc/template/manage/img/adwords/4.png new file mode 100644 index 0000000..a358a87 Binary files /dev/null and b/src/main/websrc/template/manage/img/adwords/4.png differ diff --git a/src/main/websrc/template/manage/img/adwords/5.png b/src/main/websrc/template/manage/img/adwords/5.png new file mode 100644 index 0000000..f2e9bbb Binary files /dev/null and b/src/main/websrc/template/manage/img/adwords/5.png differ diff --git a/src/main/websrc/template/manage/img/adwords/6.png b/src/main/websrc/template/manage/img/adwords/6.png new file mode 100644 index 0000000..e4402b1 Binary files /dev/null and b/src/main/websrc/template/manage/img/adwords/6.png differ diff --git a/src/main/websrc/template/manage/img/baidu1.png b/src/main/websrc/template/manage/img/baidu1.png new file mode 100644 index 0000000..b93355b Binary files /dev/null and b/src/main/websrc/template/manage/img/baidu1.png differ diff --git a/src/main/websrc/template/manage/img/baidu2.png b/src/main/websrc/template/manage/img/baidu2.png new file mode 100644 index 0000000..cfed81e Binary files /dev/null and b/src/main/websrc/template/manage/img/baidu2.png differ diff --git a/src/main/websrc/template/manage/img/baidudsp.png b/src/main/websrc/template/manage/img/baidudsp.png new file mode 100644 index 0000000..3a460ec Binary files /dev/null and b/src/main/websrc/template/manage/img/baidudsp.png differ diff --git a/src/main/websrc/template/manage/img/wxmp/1.png b/src/main/websrc/template/manage/img/wxmp/1.png new file mode 100644 index 0000000..c9207f0 Binary files /dev/null and b/src/main/websrc/template/manage/img/wxmp/1.png differ diff --git a/src/main/websrc/template/manage/img/wxmp/2.png b/src/main/websrc/template/manage/img/wxmp/2.png new file mode 100644 index 0000000..f660ea8 Binary files /dev/null and b/src/main/websrc/template/manage/img/wxmp/2.png differ diff --git a/src/main/websrc/template/manage/img/wxmp/3.png b/src/main/websrc/template/manage/img/wxmp/3.png new file mode 100644 index 0000000..66eb758 Binary files /dev/null and b/src/main/websrc/template/manage/img/wxmp/3.png differ diff --git a/src/main/websrc/template/manage/img/wxmp/4.png b/src/main/websrc/template/manage/img/wxmp/4.png new file mode 100644 index 0000000..819c3f3 Binary files /dev/null and b/src/main/websrc/template/manage/img/wxmp/4.png differ diff --git a/src/main/websrc/template/manage/img/wxmp/5.png b/src/main/websrc/template/manage/img/wxmp/5.png new file mode 100644 index 0000000..ef3661d Binary files /dev/null and b/src/main/websrc/template/manage/img/wxmp/5.png differ diff --git a/src/main/websrc/template/manage/img/zht/1.png b/src/main/websrc/template/manage/img/zht/1.png new file mode 100644 index 0000000..1748f3c Binary files /dev/null and b/src/main/websrc/template/manage/img/zht/1.png differ diff --git a/src/main/websrc/template/manage/img/zht/2.png b/src/main/websrc/template/manage/img/zht/2.png new file mode 100644 index 0000000..ddad5ae Binary files /dev/null and b/src/main/websrc/template/manage/img/zht/2.png differ diff --git a/src/main/websrc/template/manage/img/zht/3.png b/src/main/websrc/template/manage/img/zht/3.png new file mode 100644 index 0000000..4054291 Binary files /dev/null and b/src/main/websrc/template/manage/img/zht/3.png differ diff --git a/src/main/websrc/template/manage/img/zht/4.png b/src/main/websrc/template/manage/img/zht/4.png new file mode 100644 index 0000000..d4cc56c Binary files /dev/null and b/src/main/websrc/template/manage/img/zht/4.png differ diff --git a/src/main/websrc/template/menu/collect.html b/src/main/websrc/template/menu/collect.html new file mode 100644 index 0000000..0f8a89d --- /dev/null +++ b/src/main/websrc/template/menu/collect.html @@ -0,0 +1,183 @@ +<div ng-if="!unfoldFlag" class="leftBig"> +<ul class="sidebarNav" ng-if="mainMenu=='behavior'"> + <li class="p" ng-class="{'active':pagePath=='custommenu'}" ng-if="showMenu('custommenu')" ng-click="goPage('collect.custommenu')"> + <i class="iconfont icon-custommenu"></i> + <a>行业看单</a> + </li> + <li ng-class="{'active':pagePath=='eventstats'}" ng-if="showMenu('eventstats')" ng-click="goPage('collect.eventstats')"> + <i class="iconfont icon-eventstats"></i> + <a>事件分析</a> + </li> + <li ng-class="{'active':pagePath=='funnel'}" ng-if="showMenu('funnel')" ng-click="goPage('collect.funnel')"> + <i class="iconfont icon-funnel"></i> + <a>漏斗转化</a> + </li> + <li ng-class="{'active':pagePath=='retention'}" ng-if="showMenu('retention')" ng-click="goPage('collect.retention')"> + <i class="iconfont icon-retention"></i> + <a>留存分析</a> + </li> + <li ng-class="{'active':pagePath=='intelligentpath'}" ng-if="showMenu('intelligentpath')" ng-click="goPage('collect.intelligentpath')"> + <i class="iconfont icon-intelligentpath"></i> + <a>智能路径</a> + </li> + <li ng-class="{'active':pagePath=='usergroup'}" ng-if="showMenu('usergroup')" ng-click="goPage('collect.usergroup')"> + <i class="iconfont icon-usergroup"></i> + <a>用户分群</a> + </li> + <li ng-click="getSubMenu('eventmanage')" ng-class="{'activemore':subflag=='eventmanage'}" ng-if="showMenu('eventmanage',1)"> + <i class="iconfont icon-event"></i> + <a>埋点管理</a> + <span class="downicon"></span> + </li> + <div class="subliWrap" ng-class="{'subshow':subflag=='eventmanage'}" ng-if="showMenu('eventmanage',1)"> + <li class="subli" ng-class="{'active':pagePath=='event'}" ng-click="goPage('collect.event')" ng-if="showMenu('event')"> + <a>APP事件管理</a> + </li> + <li class="subli" ng-class="{'active':pagePath=='profile'}" ng-click="goPage('collect.profile')" ng-if="showMenu('profile')"> + <a>用户属性管理</a> + </li> + </div> +</ul> +<ul class="sidebarNav" ng-if="mainMenu=='export'"> + <!-- <li ng-class="{'active':pagePath=='logtool'}" ng-click="goPage('collect.logtool')" ng-if="showMenu('logtool')"> + <i class="iconfont icon-logtool"></i> + <a>日志流</a> + </li> --> + <li ng-class="{'active':pagePath=='report'}" ng-click="goPage('collect.report')" ng-if="showMenu('report')"> + <i class="iconfont icon-report"></i> + <a>下载报表</a> + </li> +</ul> +<ul class="sidebarNav" ng-if="mainMenu=='management'"> + <li ng-click="goPage('collect.app')" ng-class="{'active':pagePath=='app'}" ng-if="showMenu('app') && !demoU"> + <i class="iconfont icon-app"></i> + <a>产品中心</a> + </li> + <li ng-click="goPage('collect.auth')" ng-class="{'active':pagePath=='auth'}" ng-if="showMenu('auth') && !demoU"> + <i class="iconfont icon-auth"></i> + <a>成员管理</a> + </li> +</ul> +</div> +<div ng-if="unfoldFlag" class="leftSmall"> +<ul class="sidebarNav" ng-if="mainMenu=='behavior'"> + <li class="p" ng-class="{'active':pagePath=='custommenu'}" ng-if="showMenu('custommenu')" ng-mouseenter="hoverMenu='行业看单'" ng-mouseleave="hoverMenu=''" ng-click="goPage('collect.custommenu')"> + <i class="iconfont icon-custommenu"></i> + <div class="outDiv" ng-if="hoverMenu=='行业看单'"> + <span class="arrIcon"></span> + <ul class="smallMenu"> + <li ng-class="{'active':pagePath=='custommenu'}"><a>行业看单</a></li> + </ul> + </div> + </li> + + <li ng-class="{'active':pagePath=='eventstats'}" ng-if="showMenu('eventstats')" ng-click="goPage('collect.eventstats')" ng-mouseenter="hoverMenu='事件分析'" ng-mouseleave="hoverMenu=''"> + <i class="iconfont icon-eventstats"></i> + <div class="outDiv" ng-if="hoverMenu=='事件分析'"> + <span class="arrIcon"></span> + <ul class="smallMenu"> + <li ng-class="{'active':pagePath=='eventstats'}"><a>事件分析</a></li> + </ul> + </div> + </li> + <li ng-class="{'active':pagePath=='intelligentpath'}" ng-if="showMenu('intelligentpath')" ng-click="goPage('collect.intelligentpath')" ng-mouseenter="hoverMenu='智能路径'" ng-mouseleave="hoverMenu=''"> + <i class="iconfont icon-intelligentpath"></i> + <div class="outDiv" ng-if="hoverMenu=='智能路径'"> + <span class="arrIcon"></span> + <ul class="smallMenu"> + <li ng-class="{'active':pagePath=='intelligentpath'}"><a>智能路径</a></li> + </ul> + </div> + </li> + <li ng-class="{'active':pagePath=='retention'}" ng-if="showMenu('retention')" ng-click="goPage('collect.retention')" ng-mouseenter="hoverMenu='留存分析'" ng-mouseleave="hoverMenu=''" > + <i class="iconfont icon-retention"></i> + <div class="outDiv" ng-if="hoverMenu=='留存分析'"> + <span class="arrIcon"></span> + <ul class="smallMenu"> + <li ng-class="{'active':pagePath=='retention'}"><a>留存分析</a></li> + </ul> + </div> + </li> + <li ng-class="{'active':pagePath=='funnel'}" ng-if="showMenu('funnel')" ng-click="goPage('collect.funnel')" ng-mouseenter="hoverMenu='漏斗转化'" ng-mouseleave="hoverMenu=''" > + <i class="iconfont icon-funnel"></i> + <div class="outDiv" ng-if="hoverMenu=='漏斗转化'"> + <span class="arrIcon"></span> + <ul class="smallMenu"> + <li ng-class="{'active':pagePath=='funnel'}"><a>漏斗转化</a></li> + </ul> + </div> + </li> + <li ng-class="{'active':pagePath=='usergroup'}" ng-if="showMenu('usergroup')" ng-click="goPage('collect.usergroup')" ng-mouseenter="hoverMenu='用户分群'" ng-mouseleave="hoverMenu=''" > + <i class="iconfont icon-usergroup"></i> + <div class="outDiv" ng-if="hoverMenu=='用户分群'"> + <span class="arrIcon"></span> + <ul class="smallMenu"> + <li ng-class="{'active':pagePath=='usergroup'}"><a>用户分群</a></li> + </ul> + </div> + </li> + <li ng-click="getSubMenu('eventmanage')" ng-class="{'activemore':subflag=='eventmanage'}" ng-if="showMenu('eventmanage',1)" ng-mouseenter="hoverMenu='埋点管理'" ng-mouseleave="hoverMenu=''"> + <i class="iconfont icon-event"></i> + <div class="outDiv" ng-if="hoverMenu=='埋点管理'"> + <span class="arrIcon"></span> + <ul class="smallMenu"> + <a style="padding-left:10px;">埋点管理</a> + <div class="subliWrap subshow"> + <li class="subli" ng-class="{'active':pagePath=='event'}" ng-click="goPage('collect.event')" ng-if="showMenu('event')"> + <a>APP事件管理</a> + </li> + <li class="subli" ng-class="{'active':pagePath=='profile'}" ng-click="goPage('collect.profile')" ng-if="showMenu('profile')"> + <a>用户属性管理</a> + </li> + </div> + </ul> + </div> + </li> +</ul> +<ul class="sidebarNav" ng-if="mainMenu=='export'"> + <!-- <li ng-class="{'active':pagePath=='logtool'}" ng-click="goPage('collect.logtool')" ng-if="showMenu('logtool')" ng-mouseenter="hoverMenu='日志流'" ng-mouseleave="hoverMenu=''" > + <i class="iconfont icon-logtool"></i> + <div class="outDiv" ng-if="hoverMenu=='日志流'"> + <span class="arrIcon"></span> + <ul class="smallMenu"> + <li ng-class="{'active':pagePath=='logtool'}"><a>日志流</a></li> + </ul> + </div> + </li> --> + <li ng-class="{'active':pagePath=='report'}" ng-click="goPage('collect.report')" ng-if="showMenu('report')" ng-mouseenter="hoverMenu='下载报表'" ng-mouseleave="hoverMenu=''" > + <i class="iconfont icon-report"></i> + <div class="outDiv" ng-if="hoverMenu=='下载报表'"> + <span class="arrIcon"></span> + <ul class="smallMenu"> + <li ng-class="{'active':pagePath=='report'}"><a>下载报表</a></li> + </ul> + </div> + </li> +</ul> +<ul class="sidebarNav" ng-if="mainMenu=='management'"> + <li ng-click="goPage('collect.app')" ng-class="{'active':pagePath=='app'}" ng-if="showMenu('app') && !demoU && !isAppManage" ng-mouseenter="hoverMenu='产品中心'" ng-mouseleave="hoverMenu=''" > + <i class="iconfont icon-app"></i> + <div class="outDiv" ng-if="hoverMenu=='产品中心'"> + <span class="arrIcon"></span> + <ul class="smallMenu"> + <li ng-class="{'active':pagePath=='app'}"><a>产品中心</a></li> + </ul> + </div> + </li> + <li ng-click="goPage('collect.auth')" ng-class="{'active':pagePath=='auth'}" ng-if="showMenu('auth') && !demoU" ng-mouseenter="hoverMenu='成员管理'" ng-mouseleave="hoverMenu=''" > + <i class="iconfont icon-auth"></i> + <div class="outDiv" ng-if="hoverMenu=='成员管理'"> + <span class="arrIcon"></span> + <ul class="smallMenu"> + <li ng-class="{'active':pagePath=='auth'}"><a>成员管理</a></li> + </ul> + </div> + </li> +</ul> +</div> +<div class="bigBtn" ng-show="!unfoldFlag" ng-click="toggleMenu()"> + <span class="unfold"></span><div >收起菜单</div> +</div> +<div class="smallBtn" ng-show="unfoldFlag" ng-click="toggleMenu()"> + <span class="nounfold"></span> +</div> -- libgit2 0.27.1