From efdd134b09e1d171a7247f8fa3e8a4b719783adb Mon Sep 17 00:00:00 2001 From: dd <535915157@qq.com> Date: Sun, 12 Dec 2021 14:55:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=8F=AF=E7=94=A8=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .dockerignore | 25 + .gitignore | 20 + .vs/IoTGateway/DesignTimeBuild/.dtbcache.v2 | Bin 0 -> 297944 bytes .vs/IoTGateway/config/applicationhost.config | 1025 ++ .vs/IoTGateway/project-colors.json | 41 + .vs/IoTGateway/v16/.suo | Bin 0 -> 58368 bytes .vs/IoTGateway/v17/.futdcache.v1 | Bin 0 -> 920 bytes .vs/IoTGateway/v17/.suo | Bin 0 -> 171520 bytes .vs/IoTGateway/v17/TestStore/0/007.testlog | Bin 0 -> 73821 bytes .../v17/TestStore/0/testlog.manifest | Bin 0 -> 24 bytes .vs/IoTGateway/v17/fileList.bin | Bin 0 -> 71449 bytes IoTGateway.DataAccess/DataContext.cs | 86 + .../IoTGateway.DataAccess.csproj | 24 + .../Migrations/20211209085327_ini.Designer.cs | 794 ++ .../Migrations/20211209085327_ini.cs | 462 + .../Migrations/DataContextModelSnapshot.cs | 792 ++ IoTGateway.Model/Common.cs | 20 + IoTGateway.Model/Device.cs | 44 + IoTGateway.Model/DeviceConfig.cs | 21 + IoTGateway.Model/DeviceVariable.cs | 35 + IoTGateway.Model/Driver.cs | 18 + IoTGateway.Model/FrameworkUser.cs | 37 + IoTGateway.Model/IVariable.cs | 26 + IoTGateway.Model/IoTGateway.Model.csproj | 18 + IoTGateway.Model/SystemConfig.cs | 19 + .../DeviceConfigVMs/DeviceConfigBatchVM.cs | 57 + .../DeviceConfigVMs/DeviceConfigImportVM.cs | 38 + .../DeviceConfigVMs/DeviceConfigListVM.cs | 88 + .../DeviceConfigVMs/DeviceConfigSearcher.cs | 32 + .../DeviceConfigVMs/DeviceConfigVM.cs | 81 + .../BasicData/DeviceVMs/CopyVM.cs | 109 + .../BasicData/DeviceVMs/DeleteDevices.cs | 68 + .../BasicData/DeviceVMs/DeviceBatchVM.cs | 84 + .../BasicData/DeviceVMs/DeviceImportVM.cs | 44 + .../BasicData/DeviceVMs/DeviceListVM.cs | 117 + .../BasicData/DeviceVMs/DeviceSearcher.cs | 34 + .../BasicData/DeviceVMs/DeviceVM.cs | 69 + .../DeviceVariableBatchVM.cs | 67 + .../DeviceVariableImportVM.cs | 44 + .../DeviceVariableVMs/DeviceVariableListVM.cs | 121 + .../DeviceVariableSearcher.cs | 37 + .../DeviceVariableVMs/DeviceVariableVM.cs | 69 + .../BasicData/DriverVMs/DriverBatchVM.cs | 35 + .../BasicData/DriverVMs/DriverImportVM.cs | 35 + .../BasicData/DriverVMs/DriverListVM.cs | 64 + .../BasicData/DriverVMs/DriverSearcher.cs | 23 + .../BasicData/DriverVMs/DriverVM.cs | 47 + .../BasicData/UpdateDevices.cs | 111 + .../SystemConfigVMs/SystemConfigBatchVM.cs | 35 + .../SystemConfigVMs/SystemConfigImportVM.cs | 37 + .../SystemConfigVMs/SystemConfigListVM.cs | 65 + .../SystemConfigVMs/SystemConfigSearcher.cs | 21 + .../Config/SystemConfigVMs/SystemConfigVM.cs | 41 + IoTGateway.ViewModel/HomeVMs/LoginVM.cs | 78 + IoTGateway.ViewModel/HomeVMs/RegVM.cs | 76 + .../IoTGateway.ViewModel.csproj | 14 + .../_Admin/ActionLogVMs/ActionLogBatchVM.cs | 27 + .../_Admin/ActionLogVMs/ActionLogListVM.cs | 100 + .../_Admin/ActionLogVMs/ActionLogSearcher.cs | 32 + .../_Admin/ActionLogVMs/ActionLogVM.cs | 9 + .../DataPrivilegeVMs/DataPrivilegeBatchVM.cs | 23 + .../DataPrivilegeVMs/DataPrivilegeListVM.cs | 142 + .../DataPrivilegeVMs/DataPrivilegeSearcher.cs | 34 + .../DataPrivilegeVMs/DataPrivilegeVM.cs | 289 + .../_Admin/DataPrivilegeVMs/DpListVM.cs | 68 + .../FrameworkGroupBatchVM.cs | 20 + .../FrameworkGroupImportVM.cs | 17 + .../FrameworkGroupVMs/FrameworkGroupListVM.cs | 45 + .../FrameworkGroupVMs/FrameworkGroupMDVM.cs | 100 + .../FrameworkGroupSearcher.cs | 19 + .../FrameworkGroupVMs/FrameworkGroupVM.cs | 51 + .../FrameworkMenuVMs/FrameworkActionListVM.cs | 111 + .../FrameworkMenuVMs/FrameworkMenuBatchVM.cs | 48 + .../FrameworkMenuVMs/FrameworkMenuListVM.cs | 243 + .../FrameworkMenuVMs/FrameworkMenuListVM2.cs | 73 + .../FrameworkMenuVMs/FrameworkMenuSearcher.cs | 29 + .../FrameworkMenuVMs/FrameworkMenuVM.cs | 380 + .../FrameworkMenuVMs/FrameworkMenuVM2.cs | 300 + .../FrameworkRoleVMs/FrameworkRoleBatchVM.cs | 20 + .../FrameworkRoleVMs/FrameworkRoleImportVM.cs | 17 + .../FrameworkRoleVMs/FrameworkRoleListVM.cs | 46 + .../FrameworkRoleVMs/FrameworkRoleMDVM.cs | 55 + .../FrameworkRoleVMs/FrameworkRoleMDVM2.cs | 128 + .../FrameworkRoleVMs/FrameworkRoleSearcher.cs | 19 + .../FrameworkRoleVMs/FrameworkRoleVM.cs | 49 + .../FrameworkUserVms/ChangePasswordVM.cs | 52 + .../FrameworkUserVms/FrameworkUserBatchVM.cs | 61 + .../FrameworkUserVms/FrameworkUserImportVM.cs | 38 + .../FrameworkUserVms/FrameworkUserListVM.cs | 88 + .../FrameworkUserVms/FrameworkUserSearcher.cs | 19 + .../FrameworkUserVms/FrameworkUserVM.cs | 185 + IoTGateway.sln | 71 + IoTGateway/.config/dotnet-tools.json | 12 + .../Controllers/DeviceConfigController.cs | 219 + .../BasicData/Controllers/DeviceController.cs | 289 + .../Controllers/DeviceVariableController.cs | 220 + .../BasicData/Controllers/DriverController.cs | 219 + .../BasicData/Views/Device/BatchDelete.cshtml | 12 + .../BasicData/Views/Device/BatchEdit.cshtml | 18 + .../Areas/BasicData/Views/Device/Copy.cshtml | 15 + .../BasicData/Views/Device/Create.cshtml | 18 + .../BasicData/Views/Device/CreateGroup.cshtml | 15 + .../BasicData/Views/Device/Delete.cshtml | 20 + .../BasicData/Views/Device/Details.cshtml | 17 + .../Areas/BasicData/Views/Device/Edit.cshtml | 24 + .../BasicData/Views/Device/Import.cshtml | 14 + .../Areas/BasicData/Views/Device/Index.cshtml | 13 + .../Views/DeviceConfig/BatchDelete.cshtml | 12 + .../Views/DeviceConfig/BatchEdit.cshtml | 15 + .../Views/DeviceConfig/Create.cshtml | 16 + .../Views/DeviceConfig/Delete.cshtml | 18 + .../Views/DeviceConfig/Details.cshtml | 15 + .../BasicData/Views/DeviceConfig/Edit.cshtml | 26 + .../Views/DeviceConfig/Import.cshtml | 14 + .../BasicData/Views/DeviceConfig/Index.cshtml | 13 + .../Views/DeviceVariable/BatchDelete.cshtml | 12 + .../Views/DeviceVariable/BatchEdit.cshtml | 19 + .../Views/DeviceVariable/Create.cshtml | 19 + .../Views/DeviceVariable/Delete.cshtml | 21 + .../Views/DeviceVariable/Details.cshtml | 18 + .../Views/DeviceVariable/Edit.cshtml | 20 + .../Views/DeviceVariable/Import.cshtml | 14 + .../Views/DeviceVariable/Index.cshtml | 15 + .../BasicData/Views/Driver/BatchDelete.cshtml | 12 + .../BasicData/Views/Driver/BatchEdit.cshtml | 14 + .../BasicData/Views/Driver/Create.cshtml | 14 + .../BasicData/Views/Driver/Delete.cshtml | 17 + .../BasicData/Views/Driver/Details.cshtml | 14 + .../Areas/BasicData/Views/Driver/Edit.cshtml | 16 + .../BasicData/Views/Driver/Import.cshtml | 14 + .../Areas/BasicData/Views/Driver/Index.cshtml | 9 + .../Controllers/SystemConfigController.cs | 219 + .../Views/SystemConfig/BatchDelete.cshtml | 12 + .../Views/SystemConfig/BatchEdit.cshtml | 14 + .../Config/Views/SystemConfig/Create.cshtml | 16 + .../Config/Views/SystemConfig/Delete.cshtml | 18 + .../Config/Views/SystemConfig/Details.cshtml | 15 + .../Config/Views/SystemConfig/Edit.cshtml | 17 + .../Config/Views/SystemConfig/Import.cshtml | 14 + .../Config/Views/SystemConfig/Index.cshtml | 8 + .../ApiControllers/AccountController.cs | 272 + .../ApiControllers/ActionLogController.cs | 90 + .../ApiControllers/DataPrivilegeController.cs | 146 + .../ApiControllers/FileApiController.cs | 155 + .../FrameworkGroupController.cs | 166 + .../ApiControllers/FrameworkMenuController.cs | 186 + .../ApiControllers/FrameworkRoleController.cs | 198 + .../ApiControllers/FrameworkUserController.cs | 200 + .../_Admin/Controllers/ActionLogController.cs | 80 + .../Controllers/DataPrivilegeController.cs | 136 + .../Controllers/FrameworkGroupController.cs | 185 + .../Controllers/FrameworkMenuController.cs | 215 + .../Controllers/FrameworkRoleController.cs | 188 + .../Controllers/FrameworkUserController.cs | 285 + .../_Admin/Views/ActionLog/BatchDelete.cshtml | 15 + .../_Admin/Views/ActionLog/Details.cshtml | 26 + .../Areas/_Admin/Views/ActionLog/Index.cshtml | 19 + .../_Admin/Views/DataPrivilege/Create.cshtml | 58 + .../_Admin/Views/DataPrivilege/Edit.cshtml | 51 + .../_Admin/Views/DataPrivilege/Index.cshtml | 11 + .../Views/FrameworkGroup/BatchDelete.cshtml | 15 + .../_Admin/Views/FrameworkGroup/Create.cshtml | 13 + .../Views/FrameworkGroup/DataFunction.cshtml | 41 + .../_Admin/Views/FrameworkGroup/Delete.cshtml | 17 + .../_Admin/Views/FrameworkGroup/Edit.cshtml | 14 + .../_Admin/Views/FrameworkGroup/Import.cshtml | 17 + .../_Admin/Views/FrameworkGroup/Index.cshtml | 11 + .../_Admin/Views/FrameworkMenu/Create.cshtml | 71 + .../_Admin/Views/FrameworkMenu/Delete.cshtml | 23 + .../_Admin/Views/FrameworkMenu/Details.cshtml | 19 + .../_Admin/Views/FrameworkMenu/Edit.cshtml | 67 + .../_Admin/Views/FrameworkMenu/Index.cshtml | 6 + .../Views/FrameworkMenu/UnsetPages.cshtml | 5 + .../Views/FrameworkRole/BatchDelete.cshtml | 15 + .../_Admin/Views/FrameworkRole/Create.cshtml | 13 + .../_Admin/Views/FrameworkRole/Delete.cshtml | 17 + .../_Admin/Views/FrameworkRole/Details.cshtml | 12 + .../_Admin/Views/FrameworkRole/Edit.cshtml | 14 + .../_Admin/Views/FrameworkRole/Import.cshtml | 17 + .../_Admin/Views/FrameworkRole/Index.cshtml | 11 + .../Views/FrameworkRole/PageFunction.cshtml | 17 + .../Views/FrameworkUser/BatchDelete.cshtml | 14 + .../Views/FrameworkUser/BatchEdit.cshtml | 18 + .../_Admin/Views/FrameworkUser/Create.cshtml | 46 + .../_Admin/Views/FrameworkUser/Delete.cshtml | 25 + .../_Admin/Views/FrameworkUser/Details.cshtml | 20 + .../_Admin/Views/FrameworkUser/Edit.cshtml | 48 + .../_Admin/Views/FrameworkUser/Import.cshtml | 17 + .../_Admin/Views/FrameworkUser/Index.cshtml | 14 + .../Views/FrameworkUser/Password.cshtml | 12 + .../Areas/_Admin/Views/_ViewImports.cshtml | 3 + IoTGateway/Areas/_ViewImports.cshtml | 4 + IoTGateway/Controllers/HomeController.cs | 154 + IoTGateway/Controllers/LoginController.cs | 148 + IoTGateway/Dockerfile | 30 + IoTGateway/IoTGateway.csproj | 33 + IoTGateway/IoTGateway.csproj.user | 10 + IoTGateway/Plugin.dll | Bin 0 -> 26112 bytes IoTGateway/Program.cs | 44 + .../PublishProfiles/FolderProfile.pubxml | 21 + .../PublishProfiles/FolderProfile.pubxml.user | 10 + IoTGateway/Properties/launchSettings.json | 35 + IoTGateway/Resources/Program.en.resx | 960 ++ IoTGateway/Resources/Program.zh.resx | 963 ++ IoTGateway/Startup.cs | 151 + IoTGateway/Views/Home/FrontPage.cshtml | 118 + IoTGateway/Views/Home/Index.cshtml | 1 + IoTGateway/Views/Home/Layout.cshtml | 186 + IoTGateway/Views/Home/PIndex.cshtml | 7 + IoTGateway/Views/Login/ChangePassword.cshtml | 13 + IoTGateway/Views/Login/Login.cshtml | 82 + IoTGateway/Views/Login/Reg.cshtml | 14 + IoTGateway/Views/Shared/_Layout.cshtml | 45 + IoTGateway/Views/_ViewImports.cshtml | 4 + IoTGateway/Views/_ViewStart.cshtml | 3 + IoTGateway/appsettings.json | 116 + IoTGateway/iotgateway.db | Bin 0 -> 253952 bytes IoTGateway/iotgateway.db-shm | Bin 0 -> 32768 bytes IoTGateway/iotgateway.db-wal | Bin 0 -> 1503832 bytes IoTGateway/wwwroot/echarts/chalk.js | 418 + IoTGateway/wwwroot/echarts/echarts.min.js | 45 + IoTGateway/wwwroot/echarts/essos.js | 418 + IoTGateway/wwwroot/echarts/json-fns.js | 56 + IoTGateway/wwwroot/echarts/macarons.js | 442 + IoTGateway/wwwroot/echarts/roma.js | 442 + IoTGateway/wwwroot/echarts/vintage.js | 423 + IoTGateway/wwwroot/echarts/walden.js | 414 + IoTGateway/wwwroot/echarts/westeros.js | 415 + IoTGateway/wwwroot/echarts/wonderland.js | 415 + IoTGateway/wwwroot/favicon.ico | Bin 0 -> 4286 bytes .../wwwroot/font-awesome/font-awesome.css | 2337 ++++ IoTGateway/wwwroot/font/iconfont.css | 257 + IoTGateway/wwwroot/font/iconfont.eot | Bin 0 -> 17796 bytes IoTGateway/wwwroot/font/iconfont.svg | 206 + IoTGateway/wwwroot/font/iconfont.ttf | Bin 0 -> 17824 bytes IoTGateway/wwwroot/font/iconfont.woff | Bin 0 -> 10636 bytes IoTGateway/wwwroot/font/iconfont.woff2 | Bin 0 -> 8960 bytes IoTGateway/wwwroot/images/code.png | Bin 0 -> 8328 bytes IoTGateway/wwwroot/images/icon-login01.png | Bin 0 -> 857 bytes IoTGateway/wwwroot/images/icon-login02.png | Bin 0 -> 1071 bytes IoTGateway/wwwroot/images/icon-login03.png | Bin 0 -> 1287 bytes IoTGateway/wwwroot/images/icon-login04.png | Bin 0 -> 1584 bytes IoTGateway/wwwroot/images/login-bj.png | Bin 0 -> 782635 bytes IoTGateway/wwwroot/images/logo.png | Bin 0 -> 10620 bytes IoTGateway/wwwroot/images/wangguan.png | Bin 0 -> 11669 bytes IoTGateway/wwwroot/images/wangguan_1.png | Bin 0 -> 8118 bytes IoTGateway/wwwroot/jquery.cookie.js | 89 + IoTGateway/wwwroot/jquery.min.js | 4 + IoTGateway/wwwroot/layui/css/layui.css | 1 + IoTGateway/wwwroot/layui/css/layui.mobile.css | 2 + IoTGateway/wwwroot/layui/css/modules/code.css | 1 + .../css/modules/laydate/default/laydate.css | 1 + .../css/modules/layer/default/icon-ext.png | Bin 0 -> 5911 bytes .../layui/css/modules/layer/default/icon.png | Bin 0 -> 11493 bytes .../layui/css/modules/layer/default/layer.css | 1 + .../css/modules/layer/default/loading-0.gif | Bin 0 -> 5793 bytes .../css/modules/layer/default/loading-1.gif | Bin 0 -> 701 bytes .../css/modules/layer/default/loading-2.gif | Bin 0 -> 1787 bytes .../layui/css/modules/layim/html/chatlog.html | 96 + .../layui/css/modules/layim/html/find.html | 38 + .../layui/css/modules/layim/html/getmsg.json | 87 + .../layui/css/modules/layim/html/msgbox.html | 208 + .../wwwroot/layui/css/modules/layim/layim.css | 2 + .../layui/css/modules/layim/mobile/layim.css | 2 + .../layui/css/modules/layim/skin/1.jpg | Bin 0 -> 18386 bytes .../layui/css/modules/layim/skin/2.jpg | Bin 0 -> 11883 bytes .../layui/css/modules/layim/skin/3.jpg | Bin 0 -> 18610 bytes .../layui/css/modules/layim/skin/4.jpg | Bin 0 -> 39279 bytes .../layui/css/modules/layim/skin/5.jpg | Bin 0 -> 33379 bytes .../layui/css/modules/layim/skin/logo.jpg | Bin 0 -> 3284 bytes .../layui/css/modules/layim/voice/default.mp3 | Bin 0 -> 9341 bytes IoTGateway/wwwroot/layui/font/iconfont.eot | Bin 0 -> 46684 bytes IoTGateway/wwwroot/layui/font/iconfont.svg | 554 + IoTGateway/wwwroot/layui/font/iconfont.ttf | Bin 0 -> 46508 bytes IoTGateway/wwwroot/layui/font/iconfont.woff | Bin 0 -> 30628 bytes IoTGateway/wwwroot/layui/font/iconfont.woff2 | Bin 0 -> 25964 bytes IoTGateway/wwwroot/layui/images/face/0.gif | Bin 0 -> 2689 bytes IoTGateway/wwwroot/layui/images/face/1.gif | Bin 0 -> 5514 bytes IoTGateway/wwwroot/layui/images/face/10.gif | Bin 0 -> 2797 bytes IoTGateway/wwwroot/layui/images/face/11.gif | Bin 0 -> 4121 bytes IoTGateway/wwwroot/layui/images/face/12.gif | Bin 0 -> 3361 bytes IoTGateway/wwwroot/layui/images/face/13.gif | Bin 0 -> 7425 bytes IoTGateway/wwwroot/layui/images/face/14.gif | Bin 0 -> 2375 bytes IoTGateway/wwwroot/layui/images/face/15.gif | Bin 0 -> 1793 bytes IoTGateway/wwwroot/layui/images/face/16.gif | Bin 0 -> 6721 bytes IoTGateway/wwwroot/layui/images/face/17.gif | Bin 0 -> 4439 bytes IoTGateway/wwwroot/layui/images/face/18.gif | Bin 0 -> 3017 bytes IoTGateway/wwwroot/layui/images/face/19.gif | Bin 0 -> 3040 bytes IoTGateway/wwwroot/layui/images/face/2.gif | Bin 0 -> 3222 bytes IoTGateway/wwwroot/layui/images/face/20.gif | Bin 0 -> 5144 bytes IoTGateway/wwwroot/layui/images/face/21.gif | Bin 0 -> 5191 bytes IoTGateway/wwwroot/layui/images/face/22.gif | Bin 0 -> 9823 bytes IoTGateway/wwwroot/layui/images/face/23.gif | Bin 0 -> 3792 bytes IoTGateway/wwwroot/layui/images/face/24.gif | Bin 0 -> 8096 bytes IoTGateway/wwwroot/layui/images/face/25.gif | Bin 0 -> 3127 bytes IoTGateway/wwwroot/layui/images/face/26.gif | Bin 0 -> 3291 bytes IoTGateway/wwwroot/layui/images/face/27.gif | Bin 0 -> 4377 bytes IoTGateway/wwwroot/layui/images/face/28.gif | Bin 0 -> 2793 bytes IoTGateway/wwwroot/layui/images/face/29.gif | Bin 0 -> 4854 bytes IoTGateway/wwwroot/layui/images/face/3.gif | Bin 0 -> 4017 bytes IoTGateway/wwwroot/layui/images/face/30.gif | Bin 0 -> 2555 bytes IoTGateway/wwwroot/layui/images/face/31.gif | Bin 0 -> 2002 bytes IoTGateway/wwwroot/layui/images/face/32.gif | Bin 0 -> 3481 bytes IoTGateway/wwwroot/layui/images/face/33.gif | Bin 0 -> 2454 bytes IoTGateway/wwwroot/layui/images/face/34.gif | Bin 0 -> 3700 bytes IoTGateway/wwwroot/layui/images/face/35.gif | Bin 0 -> 1800 bytes IoTGateway/wwwroot/layui/images/face/36.gif | Bin 0 -> 2331 bytes IoTGateway/wwwroot/layui/images/face/37.gif | Bin 0 -> 1513 bytes IoTGateway/wwwroot/layui/images/face/38.gif | Bin 0 -> 3615 bytes IoTGateway/wwwroot/layui/images/face/39.gif | Bin 0 -> 6495 bytes IoTGateway/wwwroot/layui/images/face/4.gif | Bin 0 -> 5689 bytes IoTGateway/wwwroot/layui/images/face/40.gif | Bin 0 -> 3154 bytes IoTGateway/wwwroot/layui/images/face/41.gif | Bin 0 -> 3644 bytes IoTGateway/wwwroot/layui/images/face/42.gif | Bin 0 -> 5305 bytes IoTGateway/wwwroot/layui/images/face/43.gif | Bin 0 -> 2674 bytes IoTGateway/wwwroot/layui/images/face/44.gif | Bin 0 -> 4126 bytes IoTGateway/wwwroot/layui/images/face/45.gif | Bin 0 -> 3417 bytes IoTGateway/wwwroot/layui/images/face/46.gif | Bin 0 -> 3007 bytes IoTGateway/wwwroot/layui/images/face/47.gif | Bin 0 -> 2333 bytes IoTGateway/wwwroot/layui/images/face/48.gif | Bin 0 -> 2689 bytes IoTGateway/wwwroot/layui/images/face/49.gif | Bin 0 -> 2315 bytes IoTGateway/wwwroot/layui/images/face/5.gif | Bin 0 -> 4567 bytes IoTGateway/wwwroot/layui/images/face/50.gif | Bin 0 -> 5866 bytes IoTGateway/wwwroot/layui/images/face/51.gif | Bin 0 -> 2785 bytes IoTGateway/wwwroot/layui/images/face/52.gif | Bin 0 -> 777 bytes IoTGateway/wwwroot/layui/images/face/53.gif | Bin 0 -> 2127 bytes IoTGateway/wwwroot/layui/images/face/54.gif | Bin 0 -> 2196 bytes IoTGateway/wwwroot/layui/images/face/55.gif | Bin 0 -> 1971 bytes IoTGateway/wwwroot/layui/images/face/56.gif | Bin 0 -> 2034 bytes IoTGateway/wwwroot/layui/images/face/57.gif | Bin 0 -> 2705 bytes IoTGateway/wwwroot/layui/images/face/58.gif | Bin 0 -> 2258 bytes IoTGateway/wwwroot/layui/images/face/59.gif | Bin 0 -> 10311 bytes IoTGateway/wwwroot/layui/images/face/6.gif | Bin 0 -> 2213 bytes IoTGateway/wwwroot/layui/images/face/60.gif | Bin 0 -> 3245 bytes IoTGateway/wwwroot/layui/images/face/61.gif | Bin 0 -> 2495 bytes IoTGateway/wwwroot/layui/images/face/62.gif | Bin 0 -> 2017 bytes IoTGateway/wwwroot/layui/images/face/63.gif | Bin 0 -> 5871 bytes IoTGateway/wwwroot/layui/images/face/64.gif | Bin 0 -> 6448 bytes IoTGateway/wwwroot/layui/images/face/65.gif | Bin 0 -> 3576 bytes IoTGateway/wwwroot/layui/images/face/66.gif | Bin 0 -> 3029 bytes IoTGateway/wwwroot/layui/images/face/67.gif | Bin 0 -> 2701 bytes IoTGateway/wwwroot/layui/images/face/68.gif | Bin 0 -> 1424 bytes IoTGateway/wwwroot/layui/images/face/69.gif | Bin 0 -> 2431 bytes IoTGateway/wwwroot/layui/images/face/7.gif | Bin 0 -> 3398 bytes IoTGateway/wwwroot/layui/images/face/70.gif | Bin 0 -> 4590 bytes IoTGateway/wwwroot/layui/images/face/71.gif | Bin 0 -> 5304 bytes IoTGateway/wwwroot/layui/images/face/8.gif | Bin 0 -> 4050 bytes IoTGateway/wwwroot/layui/images/face/9.gif | Bin 0 -> 4221 bytes IoTGateway/wwwroot/layui/lay/modules/all.js | 33 + .../wwwroot/layui/lay/modules/carousel.js | 314 + IoTGateway/wwwroot/layui/lay/modules/code.js | 60 + .../wwwroot/layui/lay/modules/colorpicker.js | 720 + IoTGateway/wwwroot/layui/lay/modules/demo.js | 135 + .../wwwroot/layui/lay/modules/dropdown.js | 527 + .../wwwroot/layui/lay/modules/element.js | 471 + IoTGateway/wwwroot/layui/lay/modules/flow.js | 176 + IoTGateway/wwwroot/layui/lay/modules/form.js | 719 + .../wwwroot/layui/lay/modules/jquery.js | 10981 ++++++++++++++++ IoTGateway/wwwroot/layui/lay/modules/lay.js | 456 + .../wwwroot/layui/lay/modules/laydate.js | 1550 +++ .../wwwroot/layui/lay/modules/layedit.js | 648 + IoTGateway/wwwroot/layui/lay/modules/layer.js | 1311 ++ .../wwwroot/layui/lay/modules/laypage.js | 309 + .../wwwroot/layui/lay/modules/laytpl.js | 122 + .../wwwroot/layui/lay/modules/layui.all.js | 13 + .../wwwroot/layui/lay/modules/mobile.js | 29 + IoTGateway/wwwroot/layui/lay/modules/rate.js | 218 + .../wwwroot/layui/lay/modules/slider.js | 383 + IoTGateway/wwwroot/layui/lay/modules/table.js | 2025 +++ .../wwwroot/layui/lay/modules/transfer.js | 437 + IoTGateway/wwwroot/layui/lay/modules/tree.js | 816 ++ .../wwwroot/layui/lay/modules/upload.js | 565 + IoTGateway/wwwroot/layui/lay/modules/util.js | 213 + IoTGateway/wwwroot/layui/layui.js | 644 + .../layuiadmin/component/autocomplete.js | 2 + .../wwwroot/layuiadmin/component/common.js | 2 + .../layuiadmin/component/formSelects.js | 2 + .../wwwroot/layuiadmin/component/ueditor.js | 13 + .../layuiadmin/component/ueditorconfig.js | 2 + IoTGateway/wwwroot/layuiadmin/config.js | 142 + .../wwwroot/layuiadmin/css/autocomplete.css | 2 + IoTGateway/wwwroot/layuiadmin/index.js | 2 + IoTGateway/wwwroot/layuiadmin/lib/admin.js | 2 + .../wwwroot/layuiadmin/lib/extend/echarts.js | 26 + .../layuiadmin/lib/extend/echartsTheme.js | 2 + IoTGateway/wwwroot/layuiadmin/lib/view.js | 2 + IoTGateway/wwwroot/layuiadmin/pindex.js | 2 + IoTGateway/wwwroot/layuiadmin/style/admin.css | 2 + .../wwwroot/layuiadmin/style/res/bg-none.jpg | Bin 0 -> 832 bytes .../wwwroot/layuiadmin/style/res/logo.png | Bin 0 -> 2163 bytes .../wwwroot/layuiadmin/style/res/wangguan.png | Bin 0 -> 1810 bytes .../layuiadmin/style/res/wangguan_1.png | Bin 0 -> 1514 bytes .../wwwroot/layuiadmin/ueditor/config.json | 94 + .../ueditor/dialogs/anchor/anchor.html | 1 + .../ueditor/dialogs/attachment/attachment.css | 2 + .../dialogs/attachment/attachment.html | 1 + .../ueditor/dialogs/attachment/attachment.js | 2 + .../attachment/fileTypeImages/icon_chm.gif | Bin 0 -> 923 bytes .../fileTypeImages/icon_default.png | Bin 0 -> 841 bytes .../attachment/fileTypeImages/icon_doc.gif | Bin 0 -> 1012 bytes .../attachment/fileTypeImages/icon_exe.gif | Bin 0 -> 949 bytes .../attachment/fileTypeImages/icon_jpg.gif | Bin 0 -> 950 bytes .../attachment/fileTypeImages/icon_mp3.gif | Bin 0 -> 986 bytes .../attachment/fileTypeImages/icon_mv.gif | Bin 0 -> 1001 bytes .../attachment/fileTypeImages/icon_pdf.gif | Bin 0 -> 996 bytes .../attachment/fileTypeImages/icon_ppt.gif | Bin 0 -> 1001 bytes .../attachment/fileTypeImages/icon_psd.gif | Bin 0 -> 1009 bytes .../attachment/fileTypeImages/icon_rar.gif | Bin 0 -> 1007 bytes .../attachment/fileTypeImages/icon_txt.gif | Bin 0 -> 970 bytes .../attachment/fileTypeImages/icon_xls.gif | Bin 0 -> 1005 bytes .../dialogs/attachment/images/alignicon.gif | Bin 0 -> 1051 bytes .../dialogs/attachment/images/alignicon.png | Bin 0 -> 3714 bytes .../ueditor/dialogs/attachment/images/bg.png | Bin 0 -> 2810 bytes .../dialogs/attachment/images/file-icons.gif | Bin 0 -> 20097 bytes .../dialogs/attachment/images/file-icons.png | Bin 0 -> 44070 bytes .../dialogs/attachment/images/icons.gif | Bin 0 -> 453 bytes .../dialogs/attachment/images/icons.png | Bin 0 -> 2678 bytes .../dialogs/attachment/images/image.png | Bin 0 -> 1672 bytes .../dialogs/attachment/images/progress.png | Bin 0 -> 1269 bytes .../dialogs/attachment/images/success.gif | Bin 0 -> 445 bytes .../dialogs/attachment/images/success.png | Bin 0 -> 1621 bytes .../ueditor/dialogs/background/background.css | 2 + .../dialogs/background/background.html | 1 + .../ueditor/dialogs/background/background.js | 2 + .../ueditor/dialogs/background/images/bg.png | Bin 0 -> 2810 bytes .../dialogs/background/images/success.png | Bin 0 -> 1621 bytes .../ueditor/dialogs/charts/chart.config.js | 2 + .../ueditor/dialogs/charts/charts.css | 2 + .../ueditor/dialogs/charts/charts.html | 1 + .../ueditor/dialogs/charts/charts.js | 2 + .../ueditor/dialogs/charts/images/charts0.png | Bin 0 -> 25306 bytes .../ueditor/dialogs/charts/images/charts1.png | Bin 0 -> 19263 bytes .../ueditor/dialogs/charts/images/charts2.png | Bin 0 -> 23016 bytes .../ueditor/dialogs/charts/images/charts3.png | Bin 0 -> 7823 bytes .../ueditor/dialogs/charts/images/charts4.png | Bin 0 -> 8344 bytes .../ueditor/dialogs/charts/images/charts5.png | Bin 0 -> 47084 bytes .../ueditor/dialogs/emotion/emotion.css | 2 + .../ueditor/dialogs/emotion/emotion.html | 1 + .../ueditor/dialogs/emotion/emotion.js | 2 + .../ueditor/dialogs/emotion/images/0.gif | Bin 0 -> 43 bytes .../ueditor/dialogs/emotion/images/bface.gif | Bin 0 -> 27167 bytes .../ueditor/dialogs/emotion/images/cface.gif | Bin 0 -> 8603 bytes .../ueditor/dialogs/emotion/images/fface.gif | Bin 0 -> 18479 bytes .../dialogs/emotion/images/jxface2.gif | Bin 0 -> 40706 bytes .../emotion/images/neweditor-tab-bg.png | Bin 0 -> 216 bytes .../ueditor/dialogs/emotion/images/tface.gif | Bin 0 -> 19805 bytes .../ueditor/dialogs/emotion/images/wface.gif | Bin 0 -> 49850 bytes .../ueditor/dialogs/emotion/images/yface.gif | Bin 0 -> 28409 bytes .../layuiadmin/ueditor/dialogs/help/help.css | 2 + .../layuiadmin/ueditor/dialogs/help/help.html | 1 + .../layuiadmin/ueditor/dialogs/help/help.js | 2 + .../ueditor/dialogs/image/image.css | 2 + .../ueditor/dialogs/image/image.html | 1 + .../layuiadmin/ueditor/dialogs/image/image.js | 3 + .../dialogs/image/images/alignicon.jpg | Bin 0 -> 16101 bytes .../ueditor/dialogs/image/images/bg.png | Bin 0 -> 2810 bytes .../ueditor/dialogs/image/images/icons.gif | Bin 0 -> 453 bytes .../ueditor/dialogs/image/images/icons.png | Bin 0 -> 2678 bytes .../ueditor/dialogs/image/images/image.png | Bin 0 -> 1672 bytes .../ueditor/dialogs/image/images/progress.png | Bin 0 -> 1269 bytes .../ueditor/dialogs/image/images/success.gif | Bin 0 -> 445 bytes .../ueditor/dialogs/image/images/success.png | Bin 0 -> 1621 bytes .../layuiadmin/ueditor/dialogs/internal.js | 2 + .../layuiadmin/ueditor/dialogs/link/link.html | 1 + .../layuiadmin/ueditor/dialogs/map/map.html | 1 + .../layuiadmin/ueditor/dialogs/map/show.html | 1 + .../ueditor/dialogs/preview/preview.html | 1 + .../ueditor/dialogs/scrawl/images/addimg.png | Bin 0 -> 628 bytes .../ueditor/dialogs/scrawl/images/brush.png | Bin 0 -> 608 bytes .../ueditor/dialogs/scrawl/images/delimg.png | Bin 0 -> 516 bytes .../ueditor/dialogs/scrawl/images/delimgH.png | Bin 0 -> 578 bytes .../ueditor/dialogs/scrawl/images/empty.png | Bin 0 -> 519 bytes .../ueditor/dialogs/scrawl/images/emptyH.png | Bin 0 -> 657 bytes .../ueditor/dialogs/scrawl/images/eraser.png | Bin 0 -> 43271 bytes .../ueditor/dialogs/scrawl/images/redo.png | Bin 0 -> 454 bytes .../ueditor/dialogs/scrawl/images/redoH.png | Bin 0 -> 536 bytes .../ueditor/dialogs/scrawl/images/scale.png | Bin 0 -> 435 bytes .../ueditor/dialogs/scrawl/images/scaleH.png | Bin 0 -> 330 bytes .../ueditor/dialogs/scrawl/images/size.png | Bin 0 -> 775 bytes .../ueditor/dialogs/scrawl/images/undo.png | Bin 0 -> 444 bytes .../ueditor/dialogs/scrawl/images/undoH.png | Bin 0 -> 511 bytes .../ueditor/dialogs/scrawl/scrawl.css | 2 + .../ueditor/dialogs/scrawl/scrawl.html | 1 + .../ueditor/dialogs/scrawl/scrawl.js | 2 + .../dialogs/searchreplace/searchreplace.html | 1 + .../dialogs/searchreplace/searchreplace.js | 2 + .../ueditor/dialogs/spechars/spechars.html | 1 + .../ueditor/dialogs/spechars/spechars.js | 2 + .../ueditor/dialogs/table/dragicon.png | Bin 0 -> 304 bytes .../ueditor/dialogs/table/edittable.css | 2 + .../ueditor/dialogs/table/edittable.html | 1 + .../ueditor/dialogs/table/edittable.js | 2 + .../ueditor/dialogs/table/edittd.html | 1 + .../ueditor/dialogs/table/edittip.html | 1 + .../ueditor/dialogs/template/config.js | 2 + .../ueditor/dialogs/template/images/bg.gif | Bin 0 -> 84 bytes .../ueditor/dialogs/template/images/pre0.png | Bin 0 -> 250 bytes .../ueditor/dialogs/template/images/pre1.png | Bin 0 -> 291 bytes .../ueditor/dialogs/template/images/pre2.png | Bin 0 -> 394 bytes .../ueditor/dialogs/template/images/pre3.png | Bin 0 -> 485 bytes .../ueditor/dialogs/template/images/pre4.png | Bin 0 -> 393 bytes .../ueditor/dialogs/template/template.css | 2 + .../ueditor/dialogs/template/template.html | 1 + .../ueditor/dialogs/template/template.js | 2 + .../wwwroot/layuiadmin/ueditor/lang/en/en.js | 2 + .../ueditor/lang/en/images/addimage.png | Bin 0 -> 3373 bytes .../lang/en/images/alldeletebtnhoverskin.png | Bin 0 -> 743 bytes .../lang/en/images/alldeletebtnupskin.png | Bin 0 -> 743 bytes .../ueditor/lang/en/images/background.png | Bin 0 -> 3854 bytes .../ueditor/lang/en/images/button.png | Bin 0 -> 4929 bytes .../ueditor/lang/en/images/copy.png | Bin 0 -> 1222 bytes .../ueditor/lang/en/images/deletedisable.png | Bin 0 -> 649 bytes .../ueditor/lang/en/images/deleteenable.png | Bin 0 -> 664 bytes .../ueditor/lang/en/images/listbackground.png | Bin 0 -> 3750 bytes .../ueditor/lang/en/images/localimage.png | Bin 0 -> 3083 bytes .../ueditor/lang/en/images/music.png | Bin 0 -> 91561 bytes .../lang/en/images/rotateleftdisable.png | Bin 0 -> 719 bytes .../lang/en/images/rotateleftenable.png | Bin 0 -> 952 bytes .../lang/en/images/rotaterightdisable.png | Bin 0 -> 754 bytes .../lang/en/images/rotaterightenable.png | Bin 0 -> 1007 bytes .../ueditor/lang/en/images/upload.png | Bin 0 -> 3941 bytes .../ueditor/lang/zh-cn/images/copy.png | Bin 0 -> 4319 bytes .../ueditor/lang/zh-cn/images/localimage.png | Bin 0 -> 6979 bytes .../ueditor/lang/zh-cn/images/music.png | Bin 0 -> 23106 bytes .../ueditor/lang/zh-cn/images/upload.png | Bin 0 -> 6608 bytes .../layuiadmin/ueditor/lang/zh-cn/zh-cn.js | 2 + .../ueditor/themes/default/css/ueditor.css | 2 + .../themes/default/css/ueditor.min.css | 6 + .../ueditor/themes/default/dialogbase.css | 2 + .../ueditor/themes/default/images/anchor.gif | Bin 0 -> 184 bytes .../ueditor/themes/default/images/arrow.png | Bin 0 -> 1173 bytes .../themes/default/images/arrow_down.png | Bin 0 -> 1610 bytes .../themes/default/images/arrow_up.png | Bin 0 -> 1649 bytes .../themes/default/images/button-bg.gif | Bin 0 -> 1114 bytes .../themes/default/images/cancelbutton.gif | Bin 0 -> 1227 bytes .../ueditor/themes/default/images/charts.png | Bin 0 -> 518 bytes .../themes/default/images/cursor_h.gif | Bin 0 -> 253 bytes .../themes/default/images/cursor_h.png | Bin 0 -> 175 bytes .../themes/default/images/cursor_v.gif | Bin 0 -> 370 bytes .../themes/default/images/cursor_v.png | Bin 0 -> 177 bytes .../themes/default/images/dialog-title-bg.png | Bin 0 -> 938 bytes .../themes/default/images/filescan.png | Bin 0 -> 4282 bytes .../themes/default/images/highlighted.gif | Bin 0 -> 111 bytes .../themes/default/images/icons-all.gif | Bin 0 -> 3750 bytes .../ueditor/themes/default/images/icons.gif | Bin 0 -> 20947 bytes .../ueditor/themes/default/images/icons.png | Bin 0 -> 19694 bytes .../themes/default/images/loaderror.png | Bin 0 -> 3209 bytes .../ueditor/themes/default/images/loading.gif | Bin 0 -> 734 bytes .../ueditor/themes/default/images/lock.gif | Bin 0 -> 1062 bytes .../default/images/neweditor-tab-bg.png | Bin 0 -> 216 bytes .../themes/default/images/pagebreak.gif | Bin 0 -> 54 bytes .../ueditor/themes/default/images/scale.png | Bin 0 -> 167 bytes .../themes/default/images/sortable.png | Bin 0 -> 2851 bytes .../ueditor/themes/default/images/spacer.gif | Bin 0 -> 43 bytes .../themes/default/images/sparator_v.png | Bin 0 -> 122 bytes .../default/images/table-cell-align.png | Bin 0 -> 1847 bytes .../default/images/tangram-colorpicker.png | Bin 0 -> 17355 bytes .../themes/default/images/toolbar_bg.png | Bin 0 -> 170 bytes .../themes/default/images/unhighlighted.gif | Bin 0 -> 111 bytes .../ueditor/themes/default/images/upload.png | Bin 0 -> 6608 bytes .../themes/default/images/videologo.gif | Bin 0 -> 1604 bytes .../ueditor/themes/default/images/word.gif | Bin 0 -> 1019 bytes .../themes/default/images/wordpaste.png | Bin 0 -> 6467 bytes .../layuiadmin/ueditor/themes/iframe.css | 2 + .../third-party/SyntaxHighlighter/shCore.js | 4 + .../SyntaxHighlighter/shCoreDefault.css | 2 + .../third-party/codemirror/codemirror.css | 2 + .../third-party/codemirror/codemirror.js | 3 + .../highcharts/adapters/mootools-adapter.js | 2 + .../adapters/mootools-adapter.src.js | 2 + .../highcharts/adapters/prototype-adapter.js | 2 + .../adapters/prototype-adapter.src.js | 2 + .../adapters/standalone-framework.js | 2 + .../adapters/standalone-framework.src.js | 2 + .../third-party/highcharts/highcharts-more.js | 2 + .../highcharts/highcharts-more.src.js | 2 + .../third-party/highcharts/highcharts.js | 6 + .../third-party/highcharts/highcharts.src.js | 6 + .../highcharts/modules/annotations.js | 2 + .../highcharts/modules/annotations.src.js | 2 + .../highcharts/modules/canvas-tools.js | 3 + .../highcharts/modules/canvas-tools.src.js | 3 + .../third-party/highcharts/modules/data.js | 2 + .../highcharts/modules/data.src.js | 2 + .../highcharts/modules/drilldown.js | 2 + .../highcharts/modules/drilldown.src.js | 2 + .../highcharts/modules/exporting.js | 2 + .../highcharts/modules/exporting.src.js | 2 + .../third-party/highcharts/modules/funnel.js | 2 + .../highcharts/modules/funnel.src.js | 2 + .../third-party/highcharts/modules/heatmap.js | 2 + .../highcharts/modules/heatmap.src.js | 2 + .../third-party/highcharts/modules/map.js | 2 + .../third-party/highcharts/modules/map.src.js | 2 + .../highcharts/modules/no-data-to-display.js | 2 + .../modules/no-data-to-display.src.js | 2 + .../highcharts/themes/dark-blue.js | 2 + .../highcharts/themes/dark-green.js | 2 + .../third-party/highcharts/themes/gray.js | 2 + .../third-party/highcharts/themes/grid.js | 2 + .../third-party/highcharts/themes/skies.js | 2 + .../ueditor/third-party/jquery-1.10.2.js | 4 + .../ueditor/third-party/jquery-1.10.2.min.js | 4 + .../ueditor/third-party/jquery-1.10.2.min.map | 1 + .../snapscreen/UEditorSnapscreen.exe | Bin 0 -> 519936 bytes .../ueditor/third-party/video-js/font/vjs.eot | Bin 0 -> 3536 bytes .../ueditor/third-party/video-js/font/vjs.svg | 65 + .../ueditor/third-party/video-js/font/vjs.ttf | Bin 0 -> 3372 bytes .../third-party/video-js/font/vjs.woff | Bin 0 -> 4228 bytes .../ueditor/third-party/video-js/video-js.css | 6 + .../third-party/video-js/video-js.min.css | 6 + .../ueditor/third-party/video-js/video.dev.js | 4 + .../ueditor/third-party/video-js/video.js | 3 + .../third-party/webuploader/webuploader.css | 2 + .../webuploader/webuploader.custom.js | 3 + .../webuploader/webuploader.custom.min.js | 3 + .../webuploader/webuploader.flashonly.js | 3 + .../webuploader/webuploader.flashonly.min.js | 3 + .../webuploader/webuploader.html5only.js | 3 + .../webuploader/webuploader.html5only.min.js | 3 + .../third-party/webuploader/webuploader.js | 3 + .../webuploader/webuploader.min.js | 3 + .../webuploader/webuploader.withoutimage.js | 3 + .../webuploader.withoutimage.min.js | 3 + .../layuiadmin/ueditor/third-party/xss.min.js | 2 + .../zeroclipboard/ZeroClipboard.js | 2 + .../zeroclipboard/ZeroClipboard.min.js | 2 + .../layuiadmin/ueditor/ueditor.parse.js | 2 + .../layuiadmin/ueditor/ueditor.parse.min.js | 2 + .../layuiadmin/views/system/theme.html | 22 + .../layuiadmin/views/template/tips/404.html | 1 + .../layuiadmin/views/template/tips/error.html | 1 + IoTGateway/wwwroot/logo.png | Bin 0 -> 16728 bytes IoTGateway/wwwroot/sitecss/logincss.css | 180 + IoTGateway/wwwroot/sitecss/wtm.css | 55 + .../DriverModbusTCP/DriverModbusTCP.csproj | 19 + Plugins/Drivers/DriverModbusTCP/ModbusTCP.cs | 283 + Plugins/Plugin/ConnnectSettingsMode.cs | 15 + Plugins/Plugin/DeviceService.cs | 197 + Plugins/Plugin/DeviceThread.cs | 140 + Plugins/Plugin/DriverInfo.cs | 13 + Plugins/Plugin/DrvierService.cs | 160 + Plugins/Plugin/IoTBackgroundService.cs | 58 + Plugins/Plugin/MyMqttClient.cs | 87 + Plugins/Plugin/Plugin.csproj | 16 + .../ConfigParameterAttribute.cs | 18 + Plugins/PluginInterface/DataTypeEnum.cs | 61 + .../DriverAddressIoArgModel.cs | 15 + .../PluginInterface/DriverInfoAttribute.cs | 23 + .../PluginInterface/DriverReturnValueModel.cs | 15 + .../DriverSupportedAttribute.cs | 20 + Plugins/PluginInterface/IDependency.cs | 12 + Plugins/PluginInterface/IDriver.cs | 16 + Plugins/PluginInterface/MethodAttribute.cs | 23 + .../PluginInterface/PluginInterface.csproj | 11 + Plugins/PluginInterface/ProtectTypeEnum.cs | 17 + Plugins/PluginInterface/SendModel.cs | 26 + .../PluginInterface/VaribaleStatusTypeEnum.cs | 22 + alpine.Dockerfile | 18 + 659 files changed, 50070 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 .vs/IoTGateway/DesignTimeBuild/.dtbcache.v2 create mode 100644 .vs/IoTGateway/config/applicationhost.config create mode 100644 .vs/IoTGateway/project-colors.json create mode 100644 .vs/IoTGateway/v16/.suo create mode 100644 .vs/IoTGateway/v17/.futdcache.v1 create mode 100644 .vs/IoTGateway/v17/.suo create mode 100644 .vs/IoTGateway/v17/TestStore/0/007.testlog create mode 100644 .vs/IoTGateway/v17/TestStore/0/testlog.manifest create mode 100644 .vs/IoTGateway/v17/fileList.bin create mode 100644 IoTGateway.DataAccess/DataContext.cs create mode 100644 IoTGateway.DataAccess/IoTGateway.DataAccess.csproj create mode 100644 IoTGateway.DataAccess/Migrations/20211209085327_ini.Designer.cs create mode 100644 IoTGateway.DataAccess/Migrations/20211209085327_ini.cs create mode 100644 IoTGateway.DataAccess/Migrations/DataContextModelSnapshot.cs create mode 100644 IoTGateway.Model/Common.cs create mode 100644 IoTGateway.Model/Device.cs create mode 100644 IoTGateway.Model/DeviceConfig.cs create mode 100644 IoTGateway.Model/DeviceVariable.cs create mode 100644 IoTGateway.Model/Driver.cs create mode 100644 IoTGateway.Model/FrameworkUser.cs create mode 100644 IoTGateway.Model/IVariable.cs create mode 100644 IoTGateway.Model/IoTGateway.Model.csproj create mode 100644 IoTGateway.Model/SystemConfig.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigBatchVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigImportVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigListVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigSearcher.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceVMs/CopyVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceVMs/DeleteDevices.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceBatchVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceImportVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceListVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceSearcher.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableBatchVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableImportVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableListVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableSearcher.cs create mode 100644 IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DriverVMs/DriverBatchVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DriverVMs/DriverImportVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DriverVMs/DriverListVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/DriverVMs/DriverSearcher.cs create mode 100644 IoTGateway.ViewModel/BasicData/DriverVMs/DriverVM.cs create mode 100644 IoTGateway.ViewModel/BasicData/UpdateDevices.cs create mode 100644 IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigBatchVM.cs create mode 100644 IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigImportVM.cs create mode 100644 IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigListVM.cs create mode 100644 IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigSearcher.cs create mode 100644 IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigVM.cs create mode 100644 IoTGateway.ViewModel/HomeVMs/LoginVM.cs create mode 100644 IoTGateway.ViewModel/HomeVMs/RegVM.cs create mode 100644 IoTGateway.ViewModel/IoTGateway.ViewModel.csproj create mode 100644 IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogBatchVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogListVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogSearcher.cs create mode 100644 IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeBatchVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeListVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeSearcher.cs create mode 100644 IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DpListVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupBatchVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupImportVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupListVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupMDVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupSearcher.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkActionListVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuBatchVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuListVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuListVM2.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuSearcher.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuVM2.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleBatchVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleImportVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleListVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleMDVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleMDVM2.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleSearcher.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkUserVms/ChangePasswordVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserBatchVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserImportVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserListVM.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserSearcher.cs create mode 100644 IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserVM.cs create mode 100644 IoTGateway.sln create mode 100644 IoTGateway/.config/dotnet-tools.json create mode 100644 IoTGateway/Areas/BasicData/Controllers/DeviceConfigController.cs create mode 100644 IoTGateway/Areas/BasicData/Controllers/DeviceController.cs create mode 100644 IoTGateway/Areas/BasicData/Controllers/DeviceVariableController.cs create mode 100644 IoTGateway/Areas/BasicData/Controllers/DriverController.cs create mode 100644 IoTGateway/Areas/BasicData/Views/Device/BatchDelete.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Device/BatchEdit.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Device/Copy.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Device/Create.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Device/CreateGroup.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Device/Delete.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Device/Details.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Device/Edit.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Device/Import.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Device/Index.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceConfig/BatchDelete.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceConfig/BatchEdit.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceConfig/Create.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceConfig/Delete.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceConfig/Details.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceConfig/Edit.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceConfig/Import.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceConfig/Index.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceVariable/BatchDelete.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceVariable/BatchEdit.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceVariable/Create.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceVariable/Delete.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceVariable/Details.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceVariable/Edit.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceVariable/Import.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/DeviceVariable/Index.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Driver/BatchDelete.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Driver/BatchEdit.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Driver/Create.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Driver/Delete.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Driver/Details.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Driver/Edit.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Driver/Import.cshtml create mode 100644 IoTGateway/Areas/BasicData/Views/Driver/Index.cshtml create mode 100644 IoTGateway/Areas/Config/Controllers/SystemConfigController.cs create mode 100644 IoTGateway/Areas/Config/Views/SystemConfig/BatchDelete.cshtml create mode 100644 IoTGateway/Areas/Config/Views/SystemConfig/BatchEdit.cshtml create mode 100644 IoTGateway/Areas/Config/Views/SystemConfig/Create.cshtml create mode 100644 IoTGateway/Areas/Config/Views/SystemConfig/Delete.cshtml create mode 100644 IoTGateway/Areas/Config/Views/SystemConfig/Details.cshtml create mode 100644 IoTGateway/Areas/Config/Views/SystemConfig/Edit.cshtml create mode 100644 IoTGateway/Areas/Config/Views/SystemConfig/Import.cshtml create mode 100644 IoTGateway/Areas/Config/Views/SystemConfig/Index.cshtml create mode 100644 IoTGateway/Areas/_Admin/ApiControllers/AccountController.cs create mode 100644 IoTGateway/Areas/_Admin/ApiControllers/ActionLogController.cs create mode 100644 IoTGateway/Areas/_Admin/ApiControllers/DataPrivilegeController.cs create mode 100644 IoTGateway/Areas/_Admin/ApiControllers/FileApiController.cs create mode 100644 IoTGateway/Areas/_Admin/ApiControllers/FrameworkGroupController.cs create mode 100644 IoTGateway/Areas/_Admin/ApiControllers/FrameworkMenuController.cs create mode 100644 IoTGateway/Areas/_Admin/ApiControllers/FrameworkRoleController.cs create mode 100644 IoTGateway/Areas/_Admin/ApiControllers/FrameworkUserController.cs create mode 100644 IoTGateway/Areas/_Admin/Controllers/ActionLogController.cs create mode 100644 IoTGateway/Areas/_Admin/Controllers/DataPrivilegeController.cs create mode 100644 IoTGateway/Areas/_Admin/Controllers/FrameworkGroupController.cs create mode 100644 IoTGateway/Areas/_Admin/Controllers/FrameworkMenuController.cs create mode 100644 IoTGateway/Areas/_Admin/Controllers/FrameworkRoleController.cs create mode 100644 IoTGateway/Areas/_Admin/Controllers/FrameworkUserController.cs create mode 100644 IoTGateway/Areas/_Admin/Views/ActionLog/BatchDelete.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/ActionLog/Details.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/ActionLog/Index.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/DataPrivilege/Create.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/DataPrivilege/Edit.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/DataPrivilege/Index.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkGroup/BatchDelete.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkGroup/Create.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkGroup/DataFunction.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkGroup/Delete.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkGroup/Edit.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkGroup/Import.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkGroup/Index.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkMenu/Create.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkMenu/Delete.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkMenu/Details.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkMenu/Edit.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkMenu/Index.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkMenu/UnsetPages.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkRole/BatchDelete.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkRole/Create.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkRole/Delete.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkRole/Details.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkRole/Edit.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkRole/Import.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkRole/Index.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkRole/PageFunction.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkUser/BatchDelete.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkUser/BatchEdit.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkUser/Create.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkUser/Delete.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkUser/Details.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkUser/Edit.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkUser/Import.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkUser/Index.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/FrameworkUser/Password.cshtml create mode 100644 IoTGateway/Areas/_Admin/Views/_ViewImports.cshtml create mode 100644 IoTGateway/Areas/_ViewImports.cshtml create mode 100644 IoTGateway/Controllers/HomeController.cs create mode 100644 IoTGateway/Controllers/LoginController.cs create mode 100644 IoTGateway/Dockerfile create mode 100644 IoTGateway/IoTGateway.csproj create mode 100644 IoTGateway/IoTGateway.csproj.user create mode 100644 IoTGateway/Plugin.dll create mode 100644 IoTGateway/Program.cs create mode 100644 IoTGateway/Properties/PublishProfiles/FolderProfile.pubxml create mode 100644 IoTGateway/Properties/PublishProfiles/FolderProfile.pubxml.user create mode 100644 IoTGateway/Properties/launchSettings.json create mode 100644 IoTGateway/Resources/Program.en.resx create mode 100644 IoTGateway/Resources/Program.zh.resx create mode 100644 IoTGateway/Startup.cs create mode 100644 IoTGateway/Views/Home/FrontPage.cshtml create mode 100644 IoTGateway/Views/Home/Index.cshtml create mode 100644 IoTGateway/Views/Home/Layout.cshtml create mode 100644 IoTGateway/Views/Home/PIndex.cshtml create mode 100644 IoTGateway/Views/Login/ChangePassword.cshtml create mode 100644 IoTGateway/Views/Login/Login.cshtml create mode 100644 IoTGateway/Views/Login/Reg.cshtml create mode 100644 IoTGateway/Views/Shared/_Layout.cshtml create mode 100644 IoTGateway/Views/_ViewImports.cshtml create mode 100644 IoTGateway/Views/_ViewStart.cshtml create mode 100644 IoTGateway/appsettings.json create mode 100644 IoTGateway/iotgateway.db create mode 100644 IoTGateway/iotgateway.db-shm create mode 100644 IoTGateway/iotgateway.db-wal create mode 100644 IoTGateway/wwwroot/echarts/chalk.js create mode 100644 IoTGateway/wwwroot/echarts/echarts.min.js create mode 100644 IoTGateway/wwwroot/echarts/essos.js create mode 100644 IoTGateway/wwwroot/echarts/json-fns.js create mode 100644 IoTGateway/wwwroot/echarts/macarons.js create mode 100644 IoTGateway/wwwroot/echarts/roma.js create mode 100644 IoTGateway/wwwroot/echarts/vintage.js create mode 100644 IoTGateway/wwwroot/echarts/walden.js create mode 100644 IoTGateway/wwwroot/echarts/westeros.js create mode 100644 IoTGateway/wwwroot/echarts/wonderland.js create mode 100644 IoTGateway/wwwroot/favicon.ico create mode 100644 IoTGateway/wwwroot/font-awesome/font-awesome.css create mode 100644 IoTGateway/wwwroot/font/iconfont.css create mode 100644 IoTGateway/wwwroot/font/iconfont.eot create mode 100644 IoTGateway/wwwroot/font/iconfont.svg create mode 100644 IoTGateway/wwwroot/font/iconfont.ttf create mode 100644 IoTGateway/wwwroot/font/iconfont.woff create mode 100644 IoTGateway/wwwroot/font/iconfont.woff2 create mode 100644 IoTGateway/wwwroot/images/code.png create mode 100644 IoTGateway/wwwroot/images/icon-login01.png create mode 100644 IoTGateway/wwwroot/images/icon-login02.png create mode 100644 IoTGateway/wwwroot/images/icon-login03.png create mode 100644 IoTGateway/wwwroot/images/icon-login04.png create mode 100644 IoTGateway/wwwroot/images/login-bj.png create mode 100644 IoTGateway/wwwroot/images/logo.png create mode 100644 IoTGateway/wwwroot/images/wangguan.png create mode 100644 IoTGateway/wwwroot/images/wangguan_1.png create mode 100644 IoTGateway/wwwroot/jquery.cookie.js create mode 100644 IoTGateway/wwwroot/jquery.min.js create mode 100644 IoTGateway/wwwroot/layui/css/layui.css create mode 100644 IoTGateway/wwwroot/layui/css/layui.mobile.css create mode 100644 IoTGateway/wwwroot/layui/css/modules/code.css create mode 100644 IoTGateway/wwwroot/layui/css/modules/laydate/default/laydate.css create mode 100644 IoTGateway/wwwroot/layui/css/modules/layer/default/icon-ext.png create mode 100644 IoTGateway/wwwroot/layui/css/modules/layer/default/icon.png create mode 100644 IoTGateway/wwwroot/layui/css/modules/layer/default/layer.css create mode 100644 IoTGateway/wwwroot/layui/css/modules/layer/default/loading-0.gif create mode 100644 IoTGateway/wwwroot/layui/css/modules/layer/default/loading-1.gif create mode 100644 IoTGateway/wwwroot/layui/css/modules/layer/default/loading-2.gif create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/html/chatlog.html create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/html/find.html create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/html/getmsg.json create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/html/msgbox.html create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/layim.css create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/mobile/layim.css create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/skin/1.jpg create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/skin/2.jpg create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/skin/3.jpg create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/skin/4.jpg create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/skin/5.jpg create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/skin/logo.jpg create mode 100644 IoTGateway/wwwroot/layui/css/modules/layim/voice/default.mp3 create mode 100644 IoTGateway/wwwroot/layui/font/iconfont.eot create mode 100644 IoTGateway/wwwroot/layui/font/iconfont.svg create mode 100644 IoTGateway/wwwroot/layui/font/iconfont.ttf create mode 100644 IoTGateway/wwwroot/layui/font/iconfont.woff create mode 100644 IoTGateway/wwwroot/layui/font/iconfont.woff2 create mode 100644 IoTGateway/wwwroot/layui/images/face/0.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/1.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/10.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/11.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/12.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/13.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/14.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/15.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/16.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/17.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/18.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/19.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/2.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/20.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/21.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/22.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/23.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/24.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/25.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/26.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/27.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/28.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/29.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/3.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/30.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/31.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/32.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/33.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/34.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/35.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/36.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/37.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/38.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/39.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/4.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/40.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/41.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/42.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/43.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/44.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/45.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/46.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/47.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/48.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/49.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/5.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/50.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/51.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/52.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/53.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/54.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/55.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/56.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/57.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/58.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/59.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/6.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/60.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/61.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/62.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/63.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/64.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/65.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/66.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/67.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/68.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/69.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/7.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/70.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/71.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/8.gif create mode 100644 IoTGateway/wwwroot/layui/images/face/9.gif create mode 100644 IoTGateway/wwwroot/layui/lay/modules/all.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/carousel.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/code.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/colorpicker.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/demo.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/dropdown.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/element.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/flow.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/form.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/jquery.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/lay.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/laydate.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/layedit.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/layer.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/laypage.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/laytpl.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/layui.all.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/mobile.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/rate.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/slider.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/table.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/transfer.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/tree.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/upload.js create mode 100644 IoTGateway/wwwroot/layui/lay/modules/util.js create mode 100644 IoTGateway/wwwroot/layui/layui.js create mode 100644 IoTGateway/wwwroot/layuiadmin/component/autocomplete.js create mode 100644 IoTGateway/wwwroot/layuiadmin/component/common.js create mode 100644 IoTGateway/wwwroot/layuiadmin/component/formSelects.js create mode 100644 IoTGateway/wwwroot/layuiadmin/component/ueditor.js create mode 100644 IoTGateway/wwwroot/layuiadmin/component/ueditorconfig.js create mode 100644 IoTGateway/wwwroot/layuiadmin/config.js create mode 100644 IoTGateway/wwwroot/layuiadmin/css/autocomplete.css create mode 100644 IoTGateway/wwwroot/layuiadmin/index.js create mode 100644 IoTGateway/wwwroot/layuiadmin/lib/admin.js create mode 100644 IoTGateway/wwwroot/layuiadmin/lib/extend/echarts.js create mode 100644 IoTGateway/wwwroot/layuiadmin/lib/extend/echartsTheme.js create mode 100644 IoTGateway/wwwroot/layuiadmin/lib/view.js create mode 100644 IoTGateway/wwwroot/layuiadmin/pindex.js create mode 100644 IoTGateway/wwwroot/layuiadmin/style/admin.css create mode 100644 IoTGateway/wwwroot/layuiadmin/style/res/bg-none.jpg create mode 100644 IoTGateway/wwwroot/layuiadmin/style/res/logo.png create mode 100644 IoTGateway/wwwroot/layuiadmin/style/res/wangguan.png create mode 100644 IoTGateway/wwwroot/layuiadmin/style/res/wangguan_1.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/config.json create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/anchor/anchor.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/attachment.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/attachment.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/attachment.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_chm.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_default.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_doc.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_exe.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_jpg.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_mp3.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_mv.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_pdf.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_ppt.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_psd.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_rar.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_txt.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/fileTypeImages/icon_xls.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/images/alignicon.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/images/alignicon.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/images/bg.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/images/file-icons.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/images/file-icons.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/images/icons.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/images/icons.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/images/image.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/images/progress.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/images/success.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/attachment/images/success.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/background/background.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/background/background.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/background/background.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/background/images/bg.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/background/images/success.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/charts/chart.config.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/charts/charts.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/charts/charts.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/charts/charts.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/charts/images/charts0.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/charts/images/charts1.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/charts/images/charts2.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/charts/images/charts3.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/charts/images/charts4.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/charts/images/charts5.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/emotion/emotion.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/emotion/emotion.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/emotion/emotion.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/emotion/images/0.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/emotion/images/bface.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/emotion/images/cface.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/emotion/images/fface.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/emotion/images/jxface2.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/emotion/images/neweditor-tab-bg.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/emotion/images/tface.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/emotion/images/wface.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/emotion/images/yface.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/help/help.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/help/help.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/help/help.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/image/image.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/image/image.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/image/image.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/image/images/alignicon.jpg create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/image/images/bg.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/image/images/icons.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/image/images/icons.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/image/images/image.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/image/images/progress.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/image/images/success.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/image/images/success.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/internal.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/link/link.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/map/map.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/map/show.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/preview/preview.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/addimg.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/brush.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/delimg.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/delimgH.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/empty.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/emptyH.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/eraser.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/redo.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/redoH.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/scale.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/scaleH.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/size.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/undo.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/images/undoH.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/scrawl.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/scrawl.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/scrawl/scrawl.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/searchreplace/searchreplace.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/searchreplace/searchreplace.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/spechars/spechars.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/spechars/spechars.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/table/dragicon.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/table/edittable.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/table/edittable.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/table/edittable.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/table/edittd.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/table/edittip.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/template/config.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/template/images/bg.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/template/images/pre0.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/template/images/pre1.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/template/images/pre2.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/template/images/pre3.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/template/images/pre4.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/template/template.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/template/template.html create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/dialogs/template/template.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/en.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/addimage.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/alldeletebtnhoverskin.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/alldeletebtnupskin.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/background.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/button.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/copy.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/deletedisable.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/deleteenable.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/listbackground.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/localimage.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/music.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/rotateleftdisable.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/rotateleftenable.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/rotaterightdisable.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/rotaterightenable.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/en/images/upload.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/zh-cn/images/copy.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/zh-cn/images/localimage.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/zh-cn/images/music.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/zh-cn/images/upload.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/lang/zh-cn/zh-cn.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/css/ueditor.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/css/ueditor.min.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/dialogbase.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/anchor.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/arrow.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/arrow_down.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/arrow_up.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/button-bg.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/cancelbutton.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/charts.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/cursor_h.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/cursor_h.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/cursor_v.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/cursor_v.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/dialog-title-bg.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/filescan.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/highlighted.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/icons-all.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/icons.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/icons.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/loaderror.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/loading.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/lock.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/neweditor-tab-bg.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/pagebreak.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/scale.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/sortable.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/spacer.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/sparator_v.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/table-cell-align.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/tangram-colorpicker.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/toolbar_bg.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/unhighlighted.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/upload.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/videologo.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/word.gif create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/default/images/wordpaste.png create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/themes/iframe.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/SyntaxHighlighter/shCore.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/SyntaxHighlighter/shCoreDefault.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/codemirror/codemirror.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/codemirror/codemirror.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/adapters/mootools-adapter.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/adapters/mootools-adapter.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/adapters/prototype-adapter.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/adapters/prototype-adapter.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/adapters/standalone-framework.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/adapters/standalone-framework.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/highcharts-more.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/highcharts-more.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/highcharts.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/highcharts.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/annotations.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/annotations.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/canvas-tools.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/canvas-tools.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/data.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/data.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/drilldown.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/drilldown.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/exporting.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/exporting.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/funnel.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/funnel.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/heatmap.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/heatmap.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/map.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/map.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/no-data-to-display.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/modules/no-data-to-display.src.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/themes/dark-blue.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/themes/dark-green.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/themes/gray.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/themes/grid.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/highcharts/themes/skies.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/jquery-1.10.2.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/jquery-1.10.2.min.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/jquery-1.10.2.min.map create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/snapscreen/UEditorSnapscreen.exe create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/video-js/font/vjs.eot create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/video-js/font/vjs.svg create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/video-js/font/vjs.ttf create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/video-js/font/vjs.woff create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/video-js/video-js.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/video-js/video-js.min.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/video-js/video.dev.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/video-js/video.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/webuploader/webuploader.css create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/webuploader/webuploader.custom.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/webuploader/webuploader.custom.min.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/webuploader/webuploader.flashonly.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/webuploader/webuploader.flashonly.min.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/webuploader/webuploader.html5only.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/webuploader/webuploader.html5only.min.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/webuploader/webuploader.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/webuploader/webuploader.min.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/webuploader/webuploader.withoutimage.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/webuploader/webuploader.withoutimage.min.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/xss.min.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/zeroclipboard/ZeroClipboard.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/third-party/zeroclipboard/ZeroClipboard.min.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/ueditor.parse.js create mode 100644 IoTGateway/wwwroot/layuiadmin/ueditor/ueditor.parse.min.js create mode 100644 IoTGateway/wwwroot/layuiadmin/views/system/theme.html create mode 100644 IoTGateway/wwwroot/layuiadmin/views/template/tips/404.html create mode 100644 IoTGateway/wwwroot/layuiadmin/views/template/tips/error.html create mode 100644 IoTGateway/wwwroot/logo.png create mode 100644 IoTGateway/wwwroot/sitecss/logincss.css create mode 100644 IoTGateway/wwwroot/sitecss/wtm.css create mode 100644 Plugins/Drivers/DriverModbusTCP/DriverModbusTCP.csproj create mode 100644 Plugins/Drivers/DriverModbusTCP/ModbusTCP.cs create mode 100644 Plugins/Plugin/ConnnectSettingsMode.cs create mode 100644 Plugins/Plugin/DeviceService.cs create mode 100644 Plugins/Plugin/DeviceThread.cs create mode 100644 Plugins/Plugin/DriverInfo.cs create mode 100644 Plugins/Plugin/DrvierService.cs create mode 100644 Plugins/Plugin/IoTBackgroundService.cs create mode 100644 Plugins/Plugin/MyMqttClient.cs create mode 100644 Plugins/Plugin/Plugin.csproj create mode 100644 Plugins/PluginInterface/ConfigParameterAttribute.cs create mode 100644 Plugins/PluginInterface/DataTypeEnum.cs create mode 100644 Plugins/PluginInterface/DriverAddressIoArgModel.cs create mode 100644 Plugins/PluginInterface/DriverInfoAttribute.cs create mode 100644 Plugins/PluginInterface/DriverReturnValueModel.cs create mode 100644 Plugins/PluginInterface/DriverSupportedAttribute.cs create mode 100644 Plugins/PluginInterface/IDependency.cs create mode 100644 Plugins/PluginInterface/IDriver.cs create mode 100644 Plugins/PluginInterface/MethodAttribute.cs create mode 100644 Plugins/PluginInterface/PluginInterface.csproj create mode 100644 Plugins/PluginInterface/ProtectTypeEnum.cs create mode 100644 Plugins/PluginInterface/SendModel.cs create mode 100644 Plugins/PluginInterface/VaribaleStatusTypeEnum.cs create mode 100644 alpine.Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3729ff0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,25 @@ +**/.classpath +**/.dockerignore +**/.env +**/.git +**/.gitignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/azds.yaml +**/bin +**/charts +**/docker-compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b43ad92 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +# Build and Release Folders +bin-debug/ +bin-release/ +[Oo]bj/ +[Bb]in/ + +# Other files and folders +.settings/ + +# Executables +*.swf +*.air +*.ipa +*.apk + +# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties` +# should NOT be excluded as they contain compiler settings and other important +# information for Eclipse / Flash Builder. +/LK/appsettings.json +/LK/appsettings.json diff --git a/.vs/IoTGateway/DesignTimeBuild/.dtbcache.v2 b/.vs/IoTGateway/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000000000000000000000000000000000000..6dfe2b3134c6e70feb968eed2fc7b677d938a007 GIT binary patch literal 297944 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 literal 0 HcmV?d00001 diff --git a/.vs/IoTGateway/config/applicationhost.config b/.vs/IoTGateway/config/applicationhost.config new file mode 100644 index 0000000..bd44eab --- /dev/null +++ b/.vs/IoTGateway/config/applicationhost.config @@ -0,0 +1,1025 @@ + + + + + + + +
+
+
+
+
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+ + +
+
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.vs/IoTGateway/project-colors.json b/.vs/IoTGateway/project-colors.json new file mode 100644 index 0000000..f8a58d0 --- /dev/null +++ b/.vs/IoTGateway/project-colors.json @@ -0,0 +1,41 @@ +{ + "Version": 1, + "ProjectMap": { + "61d79f77-09ef-4a98-a50b-043b1d72c111": { + "ProjectGuid": "61d79f77-09ef-4a98-a50b-043b1d72c111", + "DisplayName": "Plugin", + "ColorIndex": 0 + }, + "68abbdf2-1485-4756-9a94-6afa874d69a3": { + "ProjectGuid": "68abbdf2-1485-4756-9a94-6afa874d69a3", + "DisplayName": "IoTGateway", + "ColorIndex": 1 + }, + "00e91fc1-d5cf-416a-aaaf-61567e368dcd": { + "ProjectGuid": "00e91fc1-d5cf-416a-aaaf-61567e368dcd", + "DisplayName": "IoTGateway.ViewModel", + "ColorIndex": 2 + }, + "9e7c8c77-643f-45cf-8edc-5b032c51d563": { + "ProjectGuid": "9e7c8c77-643f-45cf-8edc-5b032c51d563", + "DisplayName": "IoTGateway.DataAccess", + "ColorIndex": 3 + }, + "c2978e5d-e71e-4882-8ef1-4014e8565a77": { + "ProjectGuid": "c2978e5d-e71e-4882-8ef1-4014e8565a77", + "DisplayName": "IoTGateway.Model", + "ColorIndex": 4 + }, + "7b432fc9-57e6-44bf-b8a7-2a1fb31d6add": { + "ProjectGuid": "7b432fc9-57e6-44bf-b8a7-2a1fb31d6add", + "DisplayName": "DriverModbusTCP", + "ColorIndex": 5 + }, + "16f2c5cc-d881-4fdf-82de-d6df3525d65d": { + "ProjectGuid": "16f2c5cc-d881-4fdf-82de-d6df3525d65d", + "DisplayName": "IoTGateway.Test", + "ColorIndex": 6 + } + }, + "NextColorIndex": 7 +} \ No newline at end of file diff --git a/.vs/IoTGateway/v16/.suo b/.vs/IoTGateway/v16/.suo new file mode 100644 index 0000000000000000000000000000000000000000..d1925ccb9fb93b07a9c7225acda37dc0de3b3259 GIT binary patch literal 58368 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 GKl1-0_pmkq literal 0 HcmV?d00001 diff --git a/.vs/IoTGateway/v17/.futdcache.v1 b/.vs/IoTGateway/v17/.futdcache.v1 new file mode 100644 index 0000000000000000000000000000000000000000..ec81832bdf8a53dc0be629f6ff0be6176238d9a1 GIT binary patch literal 920 zcmd;JU|?`^v5E;wEyyp9$;>ZFPb^6-Pppgy$SF}}w4f(%*o>C$xyfOG&0^HxhK4eUmazR@p}XUv@YFRxOWd$og5(jG#F9kE>T)s)n4C8p1TDY apjHHY6_Q$9f@~9rPokgxH?MvV^AiABHbdP2 literal 0 HcmV?d00001 diff --git a/.vs/IoTGateway/v17/.suo b/.vs/IoTGateway/v17/.suo new file mode 100644 index 0000000000000000000000000000000000000000..f7b2e7b08d1dce1eeab888da57d0a0fcb6cb3ebe GIT binary patch literal 171520 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 + /// DesignTimeFactory for EF Migration, use your full connection string, + /// EF will find this class and use the connection defined here to run Add-Migration and Update-Database + /// + public class DataContextFactory : IDesignTimeDbContextFactory + { + public DataContext CreateDbContext(string[] args) + { + return new DataContext("Data Source = ../IoTGateway/iotgateway.db", DBTypeEnum.SQLite); + } + } + +} diff --git a/IoTGateway.DataAccess/IoTGateway.DataAccess.csproj b/IoTGateway.DataAccess/IoTGateway.DataAccess.csproj new file mode 100644 index 0000000..338af31 --- /dev/null +++ b/IoTGateway.DataAccess/IoTGateway.DataAccess.csproj @@ -0,0 +1,24 @@ + + + + net5.0 + true + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + diff --git a/IoTGateway.DataAccess/Migrations/20211209085327_ini.Designer.cs b/IoTGateway.DataAccess/Migrations/20211209085327_ini.Designer.cs new file mode 100644 index 0000000..01403ef --- /dev/null +++ b/IoTGateway.DataAccess/Migrations/20211209085327_ini.Designer.cs @@ -0,0 +1,794 @@ +// +using System; +using IoTGateway.DataAccess; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace IoTGateway.DataAccess.Migrations +{ + [DbContext(typeof(DataContext))] + [Migration("20211209085327_ini")] + partial class ini + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "5.0.9"); + + modelBuilder.Entity("IoTGateway.Model.Device", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AutoStart") + .HasColumnType("INTEGER"); + + b.Property("CreateBy") + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("DeviceName") + .HasColumnType("TEXT"); + + b.Property("DeviceTypeEnum") + .HasColumnType("INTEGER"); + + b.Property("DriverId") + .HasColumnType("TEXT"); + + b.Property("Index") + .HasColumnType("INTEGER"); + + b.Property("ParentId") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("DriverId"); + + b.HasIndex("ParentId"); + + b.ToTable("Devices"); + }); + + modelBuilder.Entity("IoTGateway.Model.DeviceConfig", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("DeviceConfigName") + .HasColumnType("TEXT"); + + b.Property("DeviceId") + .HasColumnType("TEXT"); + + b.Property("EnumInfo") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("Value") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("DeviceId"); + + b.ToTable("DeviceConfigs"); + }); + + modelBuilder.Entity("IoTGateway.Model.DeviceVariable", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DataType") + .HasColumnType("INTEGER"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("DeviceAddress") + .HasColumnType("TEXT"); + + b.Property("DeviceId") + .HasColumnType("TEXT"); + + b.Property("Method") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ProtectType") + .HasColumnType("INTEGER"); + + b.Property("ValueFactor") + .HasColumnType("REAL"); + + b.HasKey("ID"); + + b.HasIndex("DeviceId"); + + b.ToTable("DeviceVariables"); + }); + + modelBuilder.Entity("IoTGateway.Model.Driver", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AssembleName") + .HasColumnType("TEXT"); + + b.Property("AuthorizesNum") + .HasColumnType("INTEGER"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("DriverName") + .HasColumnType("TEXT"); + + b.Property("FileName") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("Drivers"); + }); + + modelBuilder.Entity("IoTGateway.Model.SystemConfig", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("GatewayName") + .HasColumnType("TEXT"); + + b.Property("MqttIp") + .HasColumnType("TEXT"); + + b.Property("MqttPort") + .HasColumnType("INTEGER"); + + b.Property("MqttUName") + .HasColumnType("TEXT"); + + b.Property("MqttUPwd") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("SystemConfig"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.ActionLog", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ActionName") + .HasMaxLength(255) + .HasColumnType("TEXT"); + + b.Property("ActionTime") + .HasColumnType("TEXT"); + + b.Property("ActionUrl") + .HasMaxLength(250) + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Duration") + .HasColumnType("REAL"); + + b.Property("IP") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("ITCode") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("LogType") + .HasColumnType("INTEGER"); + + b.Property("ModuleName") + .HasMaxLength(255) + .HasColumnType("TEXT"); + + b.Property("Remark") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("ActionLogs"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.DataPrivilege", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Domain") + .HasColumnType("TEXT"); + + b.Property("GroupCode") + .HasColumnType("TEXT"); + + b.Property("RelateId") + .HasColumnType("TEXT"); + + b.Property("TableName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UserCode") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("DataPrivileges"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FileAttachment", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ExtraInfo") + .HasColumnType("TEXT"); + + b.Property("FileData") + .HasColumnType("BLOB"); + + b.Property("FileExt") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("TEXT"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HandlerInfo") + .HasColumnType("TEXT"); + + b.Property("Length") + .HasColumnType("INTEGER"); + + b.Property("Path") + .HasColumnType("TEXT"); + + b.Property("SaveMode") + .HasColumnType("TEXT"); + + b.Property("UploadTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FileAttachments"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkGroup", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("GroupCode") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("GroupRemark") + .HasColumnType("TEXT"); + + b.Property("TenantCode") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FrameworkGroups"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkMenu", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ActionName") + .HasColumnType("TEXT"); + + b.Property("ClassName") + .HasColumnType("TEXT"); + + b.Property("DisplayOrder") + .IsRequired() + .HasColumnType("INTEGER"); + + b.Property("Domain") + .HasColumnType("TEXT"); + + b.Property("FolderOnly") + .HasColumnType("INTEGER"); + + b.Property("Icon") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("IsInherit") + .HasColumnType("INTEGER"); + + b.Property("IsInside") + .IsRequired() + .HasColumnType("INTEGER"); + + b.Property("IsPublic") + .HasColumnType("INTEGER"); + + b.Property("MethodName") + .HasColumnType("TEXT"); + + b.Property("ModuleName") + .HasColumnType("TEXT"); + + b.Property("PageName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("ParentId") + .HasColumnType("TEXT"); + + b.Property("ShowOnMenu") + .HasColumnType("INTEGER"); + + b.Property("Url") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("ParentId"); + + b.ToTable("FrameworkMenus"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkRole", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("RoleCode") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("RoleRemark") + .HasColumnType("TEXT"); + + b.Property("TenantCode") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FrameworkRoles"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkUser", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Address") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("CellPhone") + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Email") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Gender") + .HasColumnType("INTEGER"); + + b.Property("HomePhone") + .HasMaxLength(30) + .HasColumnType("TEXT"); + + b.Property("ITCode") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("IsValid") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("TEXT"); + + b.Property("PhotoId") + .HasColumnType("TEXT"); + + b.Property("TenantCode") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("ZipCode") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("PhotoId"); + + b.ToTable("FrameworkUsers"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkUserGroup", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("GroupCode") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FrameworkUserGroups"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkUserRole", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("RoleCode") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FrameworkUserRoles"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FunctionPrivilege", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Allowed") + .IsRequired() + .HasColumnType("INTEGER"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("MenuItemId") + .HasColumnType("TEXT"); + + b.Property("RoleCode") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("MenuItemId"); + + b.ToTable("FunctionPrivileges"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.PersistedGrant", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreationTime") + .HasColumnType("TEXT"); + + b.Property("Expiration") + .HasColumnType("TEXT"); + + b.Property("RefreshToken") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UserCode") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("PersistedGrants"); + }); + + modelBuilder.Entity("IoTGateway.Model.Device", b => + { + b.HasOne("IoTGateway.Model.Driver", "Driver") + .WithMany() + .HasForeignKey("DriverId"); + + b.HasOne("IoTGateway.Model.Device", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId"); + + b.Navigation("Driver"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("IoTGateway.Model.DeviceConfig", b => + { + b.HasOne("IoTGateway.Model.Device", "Device") + .WithMany("DeviceConfigs") + .HasForeignKey("DeviceId"); + + b.Navigation("Device"); + }); + + modelBuilder.Entity("IoTGateway.Model.DeviceVariable", b => + { + b.HasOne("IoTGateway.Model.Device", "Device") + .WithMany("DeviceVariables") + .HasForeignKey("DeviceId"); + + b.Navigation("Device"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkMenu", b => + { + b.HasOne("WalkingTec.Mvvm.Core.FrameworkMenu", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkUser", b => + { + b.HasOne("WalkingTec.Mvvm.Core.FileAttachment", "Photo") + .WithMany() + .HasForeignKey("PhotoId") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("Photo"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FunctionPrivilege", b => + { + b.HasOne("WalkingTec.Mvvm.Core.FrameworkMenu", "MenuItem") + .WithMany("Privileges") + .HasForeignKey("MenuItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MenuItem"); + }); + + modelBuilder.Entity("IoTGateway.Model.Device", b => + { + b.Navigation("Children"); + + b.Navigation("DeviceConfigs"); + + b.Navigation("DeviceVariables"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkMenu", b => + { + b.Navigation("Children"); + + b.Navigation("Privileges"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/IoTGateway.DataAccess/Migrations/20211209085327_ini.cs b/IoTGateway.DataAccess/Migrations/20211209085327_ini.cs new file mode 100644 index 0000000..d73d422 --- /dev/null +++ b/IoTGateway.DataAccess/Migrations/20211209085327_ini.cs @@ -0,0 +1,462 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace IoTGateway.DataAccess.Migrations +{ + public partial class ini : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "ActionLogs", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + ModuleName = table.Column(type: "TEXT", maxLength: 255, nullable: true), + ActionName = table.Column(type: "TEXT", maxLength: 255, nullable: true), + ITCode = table.Column(type: "TEXT", maxLength: 50, nullable: true), + ActionUrl = table.Column(type: "TEXT", maxLength: 250, nullable: true), + ActionTime = table.Column(type: "TEXT", nullable: false), + Duration = table.Column(type: "REAL", nullable: false), + Remark = table.Column(type: "TEXT", nullable: true), + IP = table.Column(type: "TEXT", maxLength: 50, nullable: true), + LogType = table.Column(type: "INTEGER", nullable: false), + CreateTime = table.Column(type: "TEXT", nullable: true), + CreateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true), + UpdateTime = table.Column(type: "TEXT", nullable: true), + UpdateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ActionLogs", x => x.ID); + }); + + migrationBuilder.CreateTable( + name: "DataPrivileges", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + UserCode = table.Column(type: "TEXT", nullable: true), + GroupCode = table.Column(type: "TEXT", nullable: true), + TableName = table.Column(type: "TEXT", maxLength: 50, nullable: false), + RelateId = table.Column(type: "TEXT", nullable: true), + Domain = table.Column(type: "TEXT", nullable: true), + CreateTime = table.Column(type: "TEXT", nullable: true), + CreateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true), + UpdateTime = table.Column(type: "TEXT", nullable: true), + UpdateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_DataPrivileges", x => x.ID); + }); + + migrationBuilder.CreateTable( + name: "Drivers", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + DriverName = table.Column(type: "TEXT", nullable: true), + FileName = table.Column(type: "TEXT", nullable: true), + AssembleName = table.Column(type: "TEXT", nullable: true), + AuthorizesNum = table.Column(type: "INTEGER", nullable: false), + CreateTime = table.Column(type: "TEXT", nullable: true), + CreateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true), + UpdateTime = table.Column(type: "TEXT", nullable: true), + UpdateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Drivers", x => x.ID); + }); + + migrationBuilder.CreateTable( + name: "FileAttachments", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + FileName = table.Column(type: "TEXT", nullable: false), + FileExt = table.Column(type: "TEXT", maxLength: 10, nullable: false), + Path = table.Column(type: "TEXT", nullable: true), + Length = table.Column(type: "INTEGER", nullable: false), + UploadTime = table.Column(type: "TEXT", nullable: false), + SaveMode = table.Column(type: "TEXT", nullable: true), + FileData = table.Column(type: "BLOB", nullable: true), + ExtraInfo = table.Column(type: "TEXT", nullable: true), + HandlerInfo = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_FileAttachments", x => x.ID); + }); + + migrationBuilder.CreateTable( + name: "FrameworkGroups", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + GroupCode = table.Column(type: "TEXT", maxLength: 100, nullable: false), + GroupName = table.Column(type: "TEXT", maxLength: 50, nullable: false), + GroupRemark = table.Column(type: "TEXT", nullable: true), + TenantCode = table.Column(type: "TEXT", nullable: true), + CreateTime = table.Column(type: "TEXT", nullable: true), + CreateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true), + UpdateTime = table.Column(type: "TEXT", nullable: true), + UpdateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_FrameworkGroups", x => x.ID); + }); + + migrationBuilder.CreateTable( + name: "FrameworkMenus", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + PageName = table.Column(type: "TEXT", maxLength: 50, nullable: false), + ActionName = table.Column(type: "TEXT", nullable: true), + ModuleName = table.Column(type: "TEXT", nullable: true), + FolderOnly = table.Column(type: "INTEGER", nullable: false), + IsInherit = table.Column(type: "INTEGER", nullable: false), + ClassName = table.Column(type: "TEXT", nullable: true), + MethodName = table.Column(type: "TEXT", nullable: true), + Domain = table.Column(type: "TEXT", nullable: true), + ShowOnMenu = table.Column(type: "INTEGER", nullable: false), + IsPublic = table.Column(type: "INTEGER", nullable: false), + DisplayOrder = table.Column(type: "INTEGER", nullable: false), + IsInside = table.Column(type: "INTEGER", nullable: false), + Url = table.Column(type: "TEXT", nullable: true), + Icon = table.Column(type: "TEXT", maxLength: 50, nullable: true), + ParentId = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_FrameworkMenus", x => x.ID); + table.ForeignKey( + name: "FK_FrameworkMenus_FrameworkMenus_ParentId", + column: x => x.ParentId, + principalTable: "FrameworkMenus", + principalColumn: "ID", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "FrameworkRoles", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + RoleCode = table.Column(type: "TEXT", maxLength: 100, nullable: false), + RoleName = table.Column(type: "TEXT", maxLength: 50, nullable: false), + RoleRemark = table.Column(type: "TEXT", nullable: true), + TenantCode = table.Column(type: "TEXT", nullable: true), + CreateTime = table.Column(type: "TEXT", nullable: true), + CreateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true), + UpdateTime = table.Column(type: "TEXT", nullable: true), + UpdateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_FrameworkRoles", x => x.ID); + }); + + migrationBuilder.CreateTable( + name: "FrameworkUserGroups", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + UserCode = table.Column(type: "TEXT", nullable: false), + GroupCode = table.Column(type: "TEXT", nullable: false), + CreateTime = table.Column(type: "TEXT", nullable: true), + CreateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true), + UpdateTime = table.Column(type: "TEXT", nullable: true), + UpdateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_FrameworkUserGroups", x => x.ID); + }); + + migrationBuilder.CreateTable( + name: "FrameworkUserRoles", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + UserCode = table.Column(type: "TEXT", nullable: false), + RoleCode = table.Column(type: "TEXT", nullable: false), + CreateTime = table.Column(type: "TEXT", nullable: true), + CreateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true), + UpdateTime = table.Column(type: "TEXT", nullable: true), + UpdateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_FrameworkUserRoles", x => x.ID); + }); + + migrationBuilder.CreateTable( + name: "PersistedGrants", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + Type = table.Column(type: "TEXT", maxLength: 50, nullable: true), + UserCode = table.Column(type: "TEXT", nullable: true), + CreationTime = table.Column(type: "TEXT", nullable: false), + Expiration = table.Column(type: "TEXT", nullable: false), + RefreshToken = table.Column(type: "TEXT", maxLength: 50, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PersistedGrants", x => x.ID); + }); + + migrationBuilder.CreateTable( + name: "SystemConfig", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + GatewayName = table.Column(type: "TEXT", nullable: true), + MqttIp = table.Column(type: "TEXT", nullable: true), + MqttPort = table.Column(type: "INTEGER", nullable: false), + MqttUName = table.Column(type: "TEXT", nullable: true), + MqttUPwd = table.Column(type: "TEXT", nullable: true), + CreateTime = table.Column(type: "TEXT", nullable: true), + CreateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true), + UpdateTime = table.Column(type: "TEXT", nullable: true), + UpdateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_SystemConfig", x => x.ID); + }); + + migrationBuilder.CreateTable( + name: "Devices", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + DeviceName = table.Column(type: "TEXT", nullable: true), + Index = table.Column(type: "INTEGER", nullable: false), + Description = table.Column(type: "TEXT", nullable: true), + DriverId = table.Column(type: "TEXT", nullable: true), + AutoStart = table.Column(type: "INTEGER", nullable: false), + DeviceTypeEnum = table.Column(type: "INTEGER", nullable: false), + CreateTime = table.Column(type: "TEXT", nullable: true), + CreateBy = table.Column(type: "TEXT", nullable: true), + UpdateTime = table.Column(type: "TEXT", nullable: true), + UpdateBy = table.Column(type: "TEXT", nullable: true), + ParentId = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_Devices", x => x.ID); + table.ForeignKey( + name: "FK_Devices_Devices_ParentId", + column: x => x.ParentId, + principalTable: "Devices", + principalColumn: "ID", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_Devices_Drivers_DriverId", + column: x => x.DriverId, + principalTable: "Drivers", + principalColumn: "ID", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "FrameworkUsers", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + Email = table.Column(type: "TEXT", maxLength: 50, nullable: true), + Gender = table.Column(type: "INTEGER", nullable: true), + CellPhone = table.Column(type: "TEXT", nullable: true), + HomePhone = table.Column(type: "TEXT", maxLength: 30, nullable: true), + Address = table.Column(type: "TEXT", maxLength: 200, nullable: true), + ZipCode = table.Column(type: "TEXT", nullable: true), + CreateTime = table.Column(type: "TEXT", nullable: true), + CreateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true), + UpdateTime = table.Column(type: "TEXT", nullable: true), + UpdateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true), + ITCode = table.Column(type: "TEXT", maxLength: 50, nullable: false), + Password = table.Column(type: "TEXT", maxLength: 32, nullable: false), + Name = table.Column(type: "TEXT", maxLength: 50, nullable: false), + IsValid = table.Column(type: "INTEGER", nullable: false), + PhotoId = table.Column(type: "TEXT", nullable: true), + TenantCode = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_FrameworkUsers", x => x.ID); + table.ForeignKey( + name: "FK_FrameworkUsers_FileAttachments_PhotoId", + column: x => x.PhotoId, + principalTable: "FileAttachments", + principalColumn: "ID", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "FunctionPrivileges", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + RoleCode = table.Column(type: "TEXT", nullable: true), + MenuItemId = table.Column(type: "TEXT", nullable: false), + Allowed = table.Column(type: "INTEGER", nullable: false), + CreateTime = table.Column(type: "TEXT", nullable: true), + CreateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true), + UpdateTime = table.Column(type: "TEXT", nullable: true), + UpdateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_FunctionPrivileges", x => x.ID); + table.ForeignKey( + name: "FK_FunctionPrivileges_FrameworkMenus_MenuItemId", + column: x => x.MenuItemId, + principalTable: "FrameworkMenus", + principalColumn: "ID", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "DeviceConfigs", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + DeviceConfigName = table.Column(type: "TEXT", nullable: true), + Description = table.Column(type: "TEXT", nullable: true), + Value = table.Column(type: "TEXT", nullable: true), + EnumInfo = table.Column(type: "TEXT", nullable: true), + DeviceId = table.Column(type: "TEXT", nullable: true), + CreateTime = table.Column(type: "TEXT", nullable: true), + CreateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true), + UpdateTime = table.Column(type: "TEXT", nullable: true), + UpdateBy = table.Column(type: "TEXT", maxLength: 50, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_DeviceConfigs", x => x.ID); + table.ForeignKey( + name: "FK_DeviceConfigs_Devices_DeviceId", + column: x => x.DeviceId, + principalTable: "Devices", + principalColumn: "ID", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "DeviceVariables", + columns: table => new + { + ID = table.Column(type: "TEXT", nullable: false), + Name = table.Column(type: "TEXT", nullable: true), + Description = table.Column(type: "TEXT", nullable: true), + Method = table.Column(type: "TEXT", nullable: true), + DeviceAddress = table.Column(type: "TEXT", nullable: true), + DataType = table.Column(type: "INTEGER", nullable: false), + ValueFactor = table.Column(type: "REAL", nullable: false), + ProtectType = table.Column(type: "INTEGER", nullable: false), + DeviceId = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_DeviceVariables", x => x.ID); + table.ForeignKey( + name: "FK_DeviceVariables_Devices_DeviceId", + column: x => x.DeviceId, + principalTable: "Devices", + principalColumn: "ID", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateIndex( + name: "IX_DeviceConfigs_DeviceId", + table: "DeviceConfigs", + column: "DeviceId"); + + migrationBuilder.CreateIndex( + name: "IX_Devices_DriverId", + table: "Devices", + column: "DriverId"); + + migrationBuilder.CreateIndex( + name: "IX_Devices_ParentId", + table: "Devices", + column: "ParentId"); + + migrationBuilder.CreateIndex( + name: "IX_DeviceVariables_DeviceId", + table: "DeviceVariables", + column: "DeviceId"); + + migrationBuilder.CreateIndex( + name: "IX_FrameworkMenus_ParentId", + table: "FrameworkMenus", + column: "ParentId"); + + migrationBuilder.CreateIndex( + name: "IX_FrameworkUsers_PhotoId", + table: "FrameworkUsers", + column: "PhotoId"); + + migrationBuilder.CreateIndex( + name: "IX_FunctionPrivileges_MenuItemId", + table: "FunctionPrivileges", + column: "MenuItemId"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "ActionLogs"); + + migrationBuilder.DropTable( + name: "DataPrivileges"); + + migrationBuilder.DropTable( + name: "DeviceConfigs"); + + migrationBuilder.DropTable( + name: "DeviceVariables"); + + migrationBuilder.DropTable( + name: "FrameworkGroups"); + + migrationBuilder.DropTable( + name: "FrameworkRoles"); + + migrationBuilder.DropTable( + name: "FrameworkUserGroups"); + + migrationBuilder.DropTable( + name: "FrameworkUserRoles"); + + migrationBuilder.DropTable( + name: "FrameworkUsers"); + + migrationBuilder.DropTable( + name: "FunctionPrivileges"); + + migrationBuilder.DropTable( + name: "PersistedGrants"); + + migrationBuilder.DropTable( + name: "SystemConfig"); + + migrationBuilder.DropTable( + name: "Devices"); + + migrationBuilder.DropTable( + name: "FileAttachments"); + + migrationBuilder.DropTable( + name: "FrameworkMenus"); + + migrationBuilder.DropTable( + name: "Drivers"); + } + } +} diff --git a/IoTGateway.DataAccess/Migrations/DataContextModelSnapshot.cs b/IoTGateway.DataAccess/Migrations/DataContextModelSnapshot.cs new file mode 100644 index 0000000..a624960 --- /dev/null +++ b/IoTGateway.DataAccess/Migrations/DataContextModelSnapshot.cs @@ -0,0 +1,792 @@ +// +using System; +using IoTGateway.DataAccess; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace IoTGateway.DataAccess.Migrations +{ + [DbContext(typeof(DataContext))] + partial class DataContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "5.0.9"); + + modelBuilder.Entity("IoTGateway.Model.Device", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AutoStart") + .HasColumnType("INTEGER"); + + b.Property("CreateBy") + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("DeviceName") + .HasColumnType("TEXT"); + + b.Property("DeviceTypeEnum") + .HasColumnType("INTEGER"); + + b.Property("DriverId") + .HasColumnType("TEXT"); + + b.Property("Index") + .HasColumnType("INTEGER"); + + b.Property("ParentId") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("DriverId"); + + b.HasIndex("ParentId"); + + b.ToTable("Devices"); + }); + + modelBuilder.Entity("IoTGateway.Model.DeviceConfig", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("DeviceConfigName") + .HasColumnType("TEXT"); + + b.Property("DeviceId") + .HasColumnType("TEXT"); + + b.Property("EnumInfo") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("Value") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("DeviceId"); + + b.ToTable("DeviceConfigs"); + }); + + modelBuilder.Entity("IoTGateway.Model.DeviceVariable", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("DataType") + .HasColumnType("INTEGER"); + + b.Property("Description") + .HasColumnType("TEXT"); + + b.Property("DeviceAddress") + .HasColumnType("TEXT"); + + b.Property("DeviceId") + .HasColumnType("TEXT"); + + b.Property("Method") + .HasColumnType("TEXT"); + + b.Property("Name") + .HasColumnType("TEXT"); + + b.Property("ProtectType") + .HasColumnType("INTEGER"); + + b.Property("ValueFactor") + .HasColumnType("REAL"); + + b.HasKey("ID"); + + b.HasIndex("DeviceId"); + + b.ToTable("DeviceVariables"); + }); + + modelBuilder.Entity("IoTGateway.Model.Driver", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("AssembleName") + .HasColumnType("TEXT"); + + b.Property("AuthorizesNum") + .HasColumnType("INTEGER"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("DriverName") + .HasColumnType("TEXT"); + + b.Property("FileName") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("Drivers"); + }); + + modelBuilder.Entity("IoTGateway.Model.SystemConfig", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("GatewayName") + .HasColumnType("TEXT"); + + b.Property("MqttIp") + .HasColumnType("TEXT"); + + b.Property("MqttPort") + .HasColumnType("INTEGER"); + + b.Property("MqttUName") + .HasColumnType("TEXT"); + + b.Property("MqttUPwd") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("SystemConfig"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.ActionLog", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ActionName") + .HasMaxLength(255) + .HasColumnType("TEXT"); + + b.Property("ActionTime") + .HasColumnType("TEXT"); + + b.Property("ActionUrl") + .HasMaxLength(250) + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Duration") + .HasColumnType("REAL"); + + b.Property("IP") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("ITCode") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("LogType") + .HasColumnType("INTEGER"); + + b.Property("ModuleName") + .HasMaxLength(255) + .HasColumnType("TEXT"); + + b.Property("Remark") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("ActionLogs"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.DataPrivilege", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Domain") + .HasColumnType("TEXT"); + + b.Property("GroupCode") + .HasColumnType("TEXT"); + + b.Property("RelateId") + .HasColumnType("TEXT"); + + b.Property("TableName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UserCode") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("DataPrivileges"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FileAttachment", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ExtraInfo") + .HasColumnType("TEXT"); + + b.Property("FileData") + .HasColumnType("BLOB"); + + b.Property("FileExt") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("TEXT"); + + b.Property("FileName") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("HandlerInfo") + .HasColumnType("TEXT"); + + b.Property("Length") + .HasColumnType("INTEGER"); + + b.Property("Path") + .HasColumnType("TEXT"); + + b.Property("SaveMode") + .HasColumnType("TEXT"); + + b.Property("UploadTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FileAttachments"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkGroup", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("GroupCode") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("GroupRemark") + .HasColumnType("TEXT"); + + b.Property("TenantCode") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FrameworkGroups"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkMenu", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("ActionName") + .HasColumnType("TEXT"); + + b.Property("ClassName") + .HasColumnType("TEXT"); + + b.Property("DisplayOrder") + .IsRequired() + .HasColumnType("INTEGER"); + + b.Property("Domain") + .HasColumnType("TEXT"); + + b.Property("FolderOnly") + .HasColumnType("INTEGER"); + + b.Property("Icon") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("IsInherit") + .HasColumnType("INTEGER"); + + b.Property("IsInside") + .IsRequired() + .HasColumnType("INTEGER"); + + b.Property("IsPublic") + .HasColumnType("INTEGER"); + + b.Property("MethodName") + .HasColumnType("TEXT"); + + b.Property("ModuleName") + .HasColumnType("TEXT"); + + b.Property("PageName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("ParentId") + .HasColumnType("TEXT"); + + b.Property("ShowOnMenu") + .HasColumnType("INTEGER"); + + b.Property("Url") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("ParentId"); + + b.ToTable("FrameworkMenus"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkRole", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("RoleCode") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("RoleRemark") + .HasColumnType("TEXT"); + + b.Property("TenantCode") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FrameworkRoles"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkUser", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Address") + .HasMaxLength(200) + .HasColumnType("TEXT"); + + b.Property("CellPhone") + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("Email") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Gender") + .HasColumnType("INTEGER"); + + b.Property("HomePhone") + .HasMaxLength(30) + .HasColumnType("TEXT"); + + b.Property("ITCode") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("IsValid") + .HasColumnType("INTEGER"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(32) + .HasColumnType("TEXT"); + + b.Property("PhotoId") + .HasColumnType("TEXT"); + + b.Property("TenantCode") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("ZipCode") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("PhotoId"); + + b.ToTable("FrameworkUsers"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkUserGroup", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("GroupCode") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FrameworkUserGroups"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkUserRole", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("RoleCode") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.Property("UserCode") + .IsRequired() + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("FrameworkUserRoles"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FunctionPrivilege", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("Allowed") + .IsRequired() + .HasColumnType("INTEGER"); + + b.Property("CreateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("CreateTime") + .HasColumnType("TEXT"); + + b.Property("MenuItemId") + .HasColumnType("TEXT"); + + b.Property("RoleCode") + .HasColumnType("TEXT"); + + b.Property("UpdateBy") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UpdateTime") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.HasIndex("MenuItemId"); + + b.ToTable("FunctionPrivileges"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.PersistedGrant", b => + { + b.Property("ID") + .ValueGeneratedOnAdd() + .HasColumnType("TEXT"); + + b.Property("CreationTime") + .HasColumnType("TEXT"); + + b.Property("Expiration") + .HasColumnType("TEXT"); + + b.Property("RefreshToken") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("TEXT"); + + b.Property("UserCode") + .HasColumnType("TEXT"); + + b.HasKey("ID"); + + b.ToTable("PersistedGrants"); + }); + + modelBuilder.Entity("IoTGateway.Model.Device", b => + { + b.HasOne("IoTGateway.Model.Driver", "Driver") + .WithMany() + .HasForeignKey("DriverId"); + + b.HasOne("IoTGateway.Model.Device", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId"); + + b.Navigation("Driver"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("IoTGateway.Model.DeviceConfig", b => + { + b.HasOne("IoTGateway.Model.Device", "Device") + .WithMany("DeviceConfigs") + .HasForeignKey("DeviceId"); + + b.Navigation("Device"); + }); + + modelBuilder.Entity("IoTGateway.Model.DeviceVariable", b => + { + b.HasOne("IoTGateway.Model.Device", "Device") + .WithMany("DeviceVariables") + .HasForeignKey("DeviceId"); + + b.Navigation("Device"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkMenu", b => + { + b.HasOne("WalkingTec.Mvvm.Core.FrameworkMenu", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkUser", b => + { + b.HasOne("WalkingTec.Mvvm.Core.FileAttachment", "Photo") + .WithMany() + .HasForeignKey("PhotoId") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("Photo"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FunctionPrivilege", b => + { + b.HasOne("WalkingTec.Mvvm.Core.FrameworkMenu", "MenuItem") + .WithMany("Privileges") + .HasForeignKey("MenuItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MenuItem"); + }); + + modelBuilder.Entity("IoTGateway.Model.Device", b => + { + b.Navigation("Children"); + + b.Navigation("DeviceConfigs"); + + b.Navigation("DeviceVariables"); + }); + + modelBuilder.Entity("WalkingTec.Mvvm.Core.FrameworkMenu", b => + { + b.Navigation("Children"); + + b.Navigation("Privileges"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/IoTGateway.Model/Common.cs b/IoTGateway.Model/Common.cs new file mode 100644 index 0000000..5f32c80 --- /dev/null +++ b/IoTGateway.Model/Common.cs @@ -0,0 +1,20 @@ +using System.ComponentModel.DataAnnotations; + +namespace IoTGateway.Model +{ + public enum DeviceTypeEnum + { + [Display(Name = "采集组")] + Group = 0, + + [Display(Name = "采集点")] + Device = 1 + } + public enum AccessEnum + { + [Display(Name = "只读")] + ReadOnly = 0, + [Display(Name = "读写")] + ReadAndWrite = 1 + } +} \ No newline at end of file diff --git a/IoTGateway.Model/Device.cs b/IoTGateway.Model/Device.cs new file mode 100644 index 0000000..911303e --- /dev/null +++ b/IoTGateway.Model/Device.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; + +namespace IoTGateway.Model +{ + public class Device : TreePoco, IBasePoco + { + [Display(Name = "名称")] + public string DeviceName { get; set; } + + [Display(Name = "排序")] + public uint Index { get; set; } + + [Display(Name = "描述")] + public string Description { get; set; } + + public Driver Driver { get; set; } + [Display(Name = "驱动")] + public Guid? DriverId { get; set; } + + [Display(Name = "自启动")] + public bool AutoStart { get; set; } + + [Display(Name = "类型")] + public DeviceTypeEnum DeviceTypeEnum { get; set; } + + [Display(Name = "创建时间")] + public DateTime? CreateTime { get; set; } + [Display(Name = "创建人")] + public string CreateBy { get; set; } + [Display(Name = "更新时间")] + public DateTime? UpdateTime { get; set; } + [Display(Name = "更新人")] + public string UpdateBy { get; set; } + + public List DeviceConfigs { get; set; } + public List DeviceVariables { get; set; } + } +} diff --git a/IoTGateway.Model/DeviceConfig.cs b/IoTGateway.Model/DeviceConfig.cs new file mode 100644 index 0000000..97928e9 --- /dev/null +++ b/IoTGateway.Model/DeviceConfig.cs @@ -0,0 +1,21 @@ +using System; +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; + +namespace IoTGateway.Model +{ + public class DeviceConfig : BasePoco + { + [Display(Name = "名称")] + public string DeviceConfigName { get; set; } + [Display(Name = "描述")] + public string Description { get; set; } + [Display(Name = "值")] + public string Value { get; set; } + [Display(Name = "备注")] + public string EnumInfo { get; set; } + public Device Device { get; set; } + [Display(Name = "设备")] + public Guid? DeviceId { get; set; } + } +} diff --git a/IoTGateway.Model/DeviceVariable.cs b/IoTGateway.Model/DeviceVariable.cs new file mode 100644 index 0000000..979ac72 --- /dev/null +++ b/IoTGateway.Model/DeviceVariable.cs @@ -0,0 +1,35 @@ +using PluginInterface; +using System; +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; + +namespace IoTGateway.Model +{ + public class DeviceVariable : TopBasePoco, IVariable + { + [Display(Name = "变量名")] + public string Name { get; set; } + + [Display(Name = "描述")] + public string Description { get; set; } + + [Display(Name = "方法")] + public string Method { get; set; } + + [Display(Name = "地址")] + public string DeviceAddress { get; set; } + + [Display(Name = "数据类型")] + public PluginInterface.DataTypeEnum DataType { get; set; } + + [Display(Name = "倍率")] + public double ValueFactor { get; set; } + + [Display(Name = "权限")] + public ProtectTypeEnum ProtectType { get; set; } + + public Device Device { get; set; } + [Display(Name = "采集点")] + public Guid? DeviceId { get; set; } + } +} \ No newline at end of file diff --git a/IoTGateway.Model/Driver.cs b/IoTGateway.Model/Driver.cs new file mode 100644 index 0000000..1d6e06a --- /dev/null +++ b/IoTGateway.Model/Driver.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; + +namespace IoTGateway.Model +{ + public class Driver : BasePoco + { + [Display(Name = "驱动名")] + public string DriverName { get; set; } + [Display(Name = "文件名")] + public string FileName { get; set; } + [Display(Name = "程序集名")] + public string AssembleName { get; set; } + [Display(Name = "剩余授权数量")] + public int AuthorizesNum { get; set; } + } +} \ No newline at end of file diff --git a/IoTGateway.Model/FrameworkUser.cs b/IoTGateway.Model/FrameworkUser.cs new file mode 100644 index 0000000..5a048e2 --- /dev/null +++ b/IoTGateway.Model/FrameworkUser.cs @@ -0,0 +1,37 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace WalkingTec.Mvvm.Core +{ + /// + /// FrameworkUser + /// + [Table("FrameworkUsers")] + public class FrameworkUser : FrameworkUserBase + { + [Display(Name = "_Admin.Email")] + [RegularExpression("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$", ErrorMessage = "Validate.{0}formaterror")] + [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] + public string Email { get; set; } + + [Display(Name = "_Admin.Gender")] + public GenderEnum? Gender { get; set; } + + [Display(Name = "_Admin.CellPhone")] + [RegularExpression("^[1][3-9]\\d{9}$", ErrorMessage = "Validate.{0}formaterror")] + public string CellPhone { get; set; } + + [Display(Name = "_Admin.HomePhone")] + [StringLength(30, ErrorMessage = "Validate.{0}stringmax{1}")] + [RegularExpression("^[-0-9\\s]{8,30}$", ErrorMessage = "Validate.{0}formaterror")] + public string HomePhone { get; set; } + + [Display(Name = "_Admin.Address")] + [StringLength(200, ErrorMessage = "Validate.{0}stringmax{1}")] + public string Address { get; set; } + + [Display(Name = "_Admin.ZipCode")] + [RegularExpression("^[0-9]{6,6}$", ErrorMessage = "Validate.{0}formaterror")] + public string ZipCode { get; set; } + } +} diff --git a/IoTGateway.Model/IVariable.cs b/IoTGateway.Model/IVariable.cs new file mode 100644 index 0000000..dbf9a32 --- /dev/null +++ b/IoTGateway.Model/IVariable.cs @@ -0,0 +1,26 @@ +using PluginInterface; +using System.ComponentModel.DataAnnotations; + +namespace IoTGateway.Model +{ + public interface IVariable + { + [Display(Name = "变量名")] + public string Name { get; set; } + + [Display(Name = "描述")] + public string Description { get; set; } + + [Display(Name = "地址")] + public string DeviceAddress { get; set; } + + [Display(Name = "数据类型")] + public PluginInterface.DataTypeEnum DataType { get; set; } + + [Display(Name = "倍率")] + public double ValueFactor { get; set; } + + [Display(Name = "权限")] + public ProtectTypeEnum ProtectType { get; set; } + } +} \ No newline at end of file diff --git a/IoTGateway.Model/IoTGateway.Model.csproj b/IoTGateway.Model/IoTGateway.Model.csproj new file mode 100644 index 0000000..1221e71 --- /dev/null +++ b/IoTGateway.Model/IoTGateway.Model.csproj @@ -0,0 +1,18 @@ + + + + net5.0 + true + + + + + + + + + + + + + diff --git a/IoTGateway.Model/SystemConfig.cs b/IoTGateway.Model/SystemConfig.cs new file mode 100644 index 0000000..07dc854 --- /dev/null +++ b/IoTGateway.Model/SystemConfig.cs @@ -0,0 +1,19 @@ +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; + +namespace IoTGateway.Model +{ + public class SystemConfig : BasePoco + { + [Display(Name = "网关名称")] + public string GatewayName { get; set; } + [Display(Name = "Mqtt服务器")] + public string MqttIp { get; set; } + [Display(Name = "Mqtt端口")] + public int MqttPort { get; set; } + [Display(Name = "Mqtt用户名")] + public string MqttUName { get; set; } + [Display(Name = "Mqtt密码")] + public string MqttUPwd { get; set; } + } +} \ No newline at end of file diff --git a/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigBatchVM.cs b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigBatchVM.cs new file mode 100644 index 0000000..84dfa0d --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigBatchVM.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; +using Plugin; + +namespace IoTGateway.ViewModel.BasicData.DeviceConfigVMs +{ + public partial class DeviceConfigBatchVM : BaseBatchVM + { + public DeviceConfigBatchVM() + { + ListVM = new DeviceConfigListVM(); + LinkedVM = new DeviceConfig_BatchEdit(); + } + public override bool DoBatchDelete() + { + var ret = base.DoBatchDelete(); + if (ret) + { + var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + UpdateDevices.UpdateConfig(DC, deviceService, FC); + } + return ret; + } + + public override bool DoBatchEdit() + { + var ret = base.DoBatchEdit(); + if (ret) + { + var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + UpdateDevices.UpdateConfig(DC, deviceService, FC); + } + return ret; + } + } + + /// + /// Class to define batch edit fields + /// + public class DeviceConfig_BatchEdit : BaseVM + { + [Display(Name = "值")] + public String Value { get; set; } + + protected override void InitVM() + { + } + + } + +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigImportVM.cs b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigImportVM.cs new file mode 100644 index 0000000..31d0552 --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigImportVM.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; + + +namespace IoTGateway.ViewModel.BasicData.DeviceConfigVMs +{ + public partial class DeviceConfigTemplateVM : BaseTemplateVM + { + [Display(Name = "名称")] + public ExcelPropety DeviceConfigName_Excel = ExcelPropety.CreateProperty(x => x.DeviceConfigName); + [Display(Name = "描述")] + public ExcelPropety Description_Excel = ExcelPropety.CreateProperty(x => x.Description); + [Display(Name = "值")] + public ExcelPropety Value_Excel = ExcelPropety.CreateProperty(x => x.Value); + [Display(Name = "备注")] + public ExcelPropety EnumInfo_Excel = ExcelPropety.CreateProperty(x => x.EnumInfo); + public ExcelPropety Device_Excel = ExcelPropety.CreateProperty(x => x.DeviceId); + + protected override void InitVM() + { + Device_Excel.DataType = ColumnDataType.ComboBox; + Device_Excel.ListItems = DC.Set().GetSelectListItems(Wtm, y => y.DeviceName); + } + + } + + public class DeviceConfigImportVM : BaseImportVM + { + + } + +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigListVM.cs b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigListVM.cs new file mode 100644 index 0000000..7d8e32a --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigListVM.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; +using IoTGateway.Model; + + +namespace IoTGateway.ViewModel.BasicData.DeviceConfigVMs +{ + public partial class DeviceConfigListVM : BasePagedListVM + { + public List AllDevices { get; set; } + protected override List InitGridAction() + { + return new List + { + this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Create, Localizer["Sys.Create"],"BasicData", dialogWidth: 800), + this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Edit, Localizer["Sys.Edit"], "BasicData", dialogWidth: 800), + //this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Delete, Localizer["Sys.Delete"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Details, Localizer["Sys.Details"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.BatchEdit, Localizer["Sys.BatchEdit"], "BasicData", dialogWidth: 800), + //this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.BatchDelete, Localizer["Sys.BatchDelete"], "BasicData", dialogWidth: 800), + //this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.Import, Localizer["Sys.Import"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("DeviceConfig", GridActionStandardTypesEnum.ExportExcel, Localizer["Sys.Export"], "BasicData"), + }; + } + protected override void InitListVM() + { + AllDevices = DC.Set().AsNoTracking() + .OrderBy(x => x.Parent.Index).ThenBy(x => x.Parent.DeviceName) + .OrderBy(x => x.Index).ThenBy(x => x.DeviceName) + .GetTreeSelectListItems(Wtm, x => x.DeviceName); + foreach (var device in AllDevices) + { + foreach (var item in device.Children) + { + item.Text = item.Text; + item.Icon = "layui-icon layui-icon-link"; + item.Expended = true; + } + } + base.InitListVM(); + } + + + protected override IEnumerable> InitGridHeader() + { + return new List>{ + this.MakeGridHeader(x => x.DeviceConfigName), + this.MakeGridHeader(x => x.Description), + this.MakeGridHeader(x => x.Value), + this.MakeGridHeader(x => x.EnumInfo), + this.MakeGridHeader(x => x.DeviceName_view), + this.MakeGridHeaderAction(width: 200) + }; + } + + public override IOrderedQueryable GetSearchQuery() + { + var query = DC.Set() + .CheckContain(Searcher.DeviceConfigName, x=>x.DeviceConfigName) + .CheckContain(Searcher.Value, x=>x.Value) + .CheckEqual(Searcher.DeviceId, x=>x.DeviceId) + .Select(x => new DeviceConfig_View + { + ID = x.ID, + DeviceConfigName = x.DeviceConfigName, + Description = x.Description, + Value = x.Value, + EnumInfo = x.EnumInfo, + DeviceName_view = x.Device.DeviceName, + }) + .OrderBy(x => x.ID); + return query; + } + + } + + public class DeviceConfig_View : DeviceConfig{ + [Display(Name = "设备名")] + public String DeviceName_view { get; set; } + + } +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigSearcher.cs b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigSearcher.cs new file mode 100644 index 0000000..f44bfae --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigSearcher.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; +using Microsoft.EntityFrameworkCore; + +namespace IoTGateway.ViewModel.BasicData.DeviceConfigVMs +{ + public partial class DeviceConfigSearcher : BaseSearcher + { + [Display(Name = "名称")] + public String DeviceConfigName { get; set; } + [Display(Name = "值")] + public String Value { get; set; } + public List AllDevices { get; set; } + [Display(Name = "设备名")] + public Guid? DeviceId { get; set; } + + protected override void InitVM() + { + AllDevices = DC.Set().AsNoTracking().Where(x => x.DeviceTypeEnum == DeviceTypeEnum.Device) + .OrderBy(x => x.Parent.Index).ThenBy(x => x.Parent.DeviceName) + .ThenBy(x => x.Index).ThenBy(x => x.Parent.DeviceName) + .GetSelectListItems(Wtm, y => y.DeviceName); + } + + } +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigVM.cs b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigVM.cs new file mode 100644 index 0000000..298f97c --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceConfigVMs/DeviceConfigVM.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; +using Plugin; +using System.Text.Json; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Primitives; + +namespace IoTGateway.ViewModel.BasicData.DeviceConfigVMs +{ + public partial class DeviceConfigVM : BaseCRUDVM + { + public List AllDevices { get; set; } + public List AllTypes { get; set; } + + public DeviceConfigVM() + { + SetInclude(x => x.Device); + } + + protected override void InitVM() + { + AllDevices = DC.Set().AsNoTracking().Where(x => x.DeviceTypeEnum == DeviceTypeEnum.Device) + .OrderBy(x => x.Parent.Index).ThenBy(x => x.Parent.DeviceName) + .OrderBy(x => x.Index).ThenBy(x => x.DeviceName) + .GetSelectListItems(Wtm, y => y.DeviceName); + if (Entity.DeviceId != null) + { + if (Entity.EnumInfo != null) + { + AllTypes = new List(); + var EnumInfos = JsonSerializer.Deserialize>(Entity.EnumInfo); + foreach (var EnumInfo in EnumInfos) + { + var item = new ComboSelectListItem + { + Text = EnumInfo.Key, + Value = EnumInfo.Key, + Selected = Entity.Value == EnumInfo.Key ? true : false + }; + AllTypes.Add(item); + } + } + } + } + + public override void DoAdd() + { + base.DoAdd(); + UpdateConfig(); + } + + public override void DoEdit(bool updateAllFields = false) + { + base.DoEdit(updateAllFields); + UpdateConfig(); + } + + public override void DoDelete() + { + //先获取id + var id = UpdateDevices.FC2Guids(FC); + var deviceId = DC.Set().Where(x => id.Contains(x.ID)).Select(x => x.DeviceId).FirstOrDefault(); + FC["Entity.DeviceId"] = (StringValues)deviceId.ToString(); + base.DoDelete(); + UpdateConfig(); + } + + private void UpdateConfig() + { + var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + UpdateDevices.UpdateConfig(DC, deviceService, FC); + + } + } +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceVMs/CopyVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVMs/CopyVM.cs new file mode 100644 index 0000000..165131f --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceVMs/CopyVM.cs @@ -0,0 +1,109 @@ +using Microsoft.EntityFrameworkCore; +using Plugin; +using System; +using System.Collections.Generic; +using System.Linq; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; + +namespace IoTGateway.ViewModel.BasicData.DeviceVMs +{ + public class CopyVM : BaseVM + { + public string 设备名称 { get; set; } + public uint 复制数量 { get; set; } = 20; + public string 复制结果 { get; set; } + + public void Copy() + { + using (var transaction = DC.BeginTransaction()) + { + try + { + var device = DC.Set().Where(x => x.ID == Guid.Parse(FC["id"].ToString())).Include(x => x.Driver).FirstOrDefault(); + var devices = new List(); + if (device == null) + 复制结果 = "复制失败,找不到采集点"; + else if (device.DeviceTypeEnum == DeviceTypeEnum.Group) + 复制结果 = "复制失败,组不支持复制"; + else + { + var deviceConfigs = DC.Set().Where(x => x.DeviceId == device.ID).ToList(); + var deviceVariables = DC.Set().Where(x => x.DeviceId == device.ID).ToList(); + for (int i = 1; i <= 复制数量; i++) + { + var newDevice = new Device + { + ID = Guid.NewGuid(), + DeviceName = $"{device.DeviceName}-Copy{i}", + AutoStart = false, + ParentId = device.ParentId, + CreateBy = this.Wtm.LoginUserInfo.Name, + CreateTime = DateTime.Now, + Driver = device.Driver, + DriverId = device.DriverId, + Description = device.Description, + DeviceTypeEnum = device.DeviceTypeEnum + }; + DC.Set().Add(newDevice); + devices.Add(newDevice); + + foreach (var deviceConfig in deviceConfigs) + { + var newDeviceConfig = new DeviceConfig + { + DeviceId = newDevice.ID, + DeviceConfigName = deviceConfig.DeviceConfigName, + Description = deviceConfig.Description, + EnumInfo = deviceConfig.EnumInfo, + Value = deviceConfig.Value, + UpdateBy = this.Wtm.LoginUserInfo.Name, + UpdateTime = DateTime.Now + }; + DC.Set().Add(newDeviceConfig); + } + + foreach (var deviceVariable in deviceVariables) + { + var newDeviceVariable = new DeviceVariable + { + DeviceId = newDevice.ID, + Name = deviceVariable.Name, + Description = deviceVariable.Description, + DataType = deviceVariable.DataType, + Method = deviceVariable.Method, + ProtectType = deviceVariable.ProtectType, + ValueFactor = deviceVariable.ValueFactor, + DeviceAddress = deviceVariable.DeviceAddress + }; + DC.Set().Add(newDeviceVariable); + + } + } + } + DC.SaveChanges(); + transaction.Commit(); + 复制结果 = "复制成功"; + + var pluginManager = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + pluginManager?.CreateDeviceThreads(devices); + } + catch (Exception ex) + { + transaction.Rollback(); + + 复制结果 = $"复制失败,{ex}"; + } + } + } + + protected override void InitVM() + { + var device = DC.Set().AsNoTracking().Include(x => x.Parent).Where(x => x.ID == Guid.Parse(FC["id"].ToString())).FirstOrDefault(); + 设备名称 = $"{device?.Parent?.DeviceName}===>{device?.DeviceName}"; + + base.InitVM(); + } + } +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceVMs/DeleteDevices.cs b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeleteDevices.cs new file mode 100644 index 0000000..9263bfc --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeleteDevices.cs @@ -0,0 +1,68 @@ +using Plugin; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; + +namespace IoTGateway.ViewModel.BasicData.DeviceVMs +{ + static class DeleteDevices + { + public static DeleteRet doDelete(DeviceService pluginManager,IDataContext DC,List Ids) + { + DeleteRet deleteRet = new() { IsSuccess = false }; + using (var transaction = DC.BeginTransaction()) + { + try + { + var daps = DC.Set().Where(x => Ids.Contains(x.ID)).ToList(); + + foreach (var dap in daps) + { + if (dap == null) + { + deleteRet.Message = "采集点不存在,可能已经被删除了"; + return deleteRet; + } + else if (dap.DeviceTypeEnum == DeviceTypeEnum.Group) + { + deleteRet.Message = "有风险,暂不支持组删除"; + return deleteRet; + } + else + { + var dapConfigs = DC.Set().Where(x => x.DeviceId == dap.ID).ToList(); + var dapVariables = DC.Set().Where(x => x.DeviceId == dap.ID).ToList(); + DC.Set().RemoveRange(dapConfigs); + DC.Set().RemoveRange(dapVariables); + } + pluginManager.RemoveDeviceThread(dap); + } + DC.Set().RemoveRange(daps); + DC.SaveChanges(); + transaction.Commit(); + deleteRet.IsSuccess=true; + } + catch (Exception ex) + { + transaction.Rollback(); + + deleteRet.Message = $"其他错误,{ex}"; + } + } + + + return deleteRet; + } + } + + public class DeleteRet + { + public bool IsSuccess { get; set; } + public string Message { get; set; } + } +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceBatchVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceBatchVM.cs new file mode 100644 index 0000000..6e7825e --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceBatchVM.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; +using Microsoft.Extensions.Primitives; +using Plugin; + +namespace IoTGateway.ViewModel.BasicData.DeviceVMs +{ + public partial class DeviceBatchVM : BaseBatchVM + { + public DeviceBatchVM() + { + ListVM = new DeviceListVM(); + LinkedVM = new Device_BatchEdit(); + } + public override bool DoBatchDelete() + { + StringValues IdsStr = new(); + if (FC.ContainsKey("Ids")) + IdsStr = (StringValues)FC["Ids"]; + else if (FC.ContainsKey("Ids[]")) + IdsStr = (StringValues)FC["Ids[]"]; + List Ids = new(); + foreach (var item in IdsStr) + { + Ids.Add(Guid.Parse(item)); + } + + var pluginManager = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + var ret = DeleteDevices.doDelete(pluginManager, DC, Ids); + if (!ret.IsSuccess) + { + MSD.AddModelError("", ret.Message); + return false; + } + + return true; + } + protected override void InitVM() + { + base.InitVM(); + } + + public override bool DoBatchEdit() + { + var ret = base.DoBatchEdit(); + if (ret) + { + var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + UpdateDevices.UpdateDevice(DC, deviceService, FC); + } + return ret; + } + } + + /// + /// Class to define batch edit fields + /// + public class Device_BatchEdit : BaseVM + { + public List AllDrivers { get; set; } + public Guid? DriverId { get; set; } + [Display(Name = "自启动")] + public Boolean? AutoStart { get; set; } + [Display(Name = "类型")] + public DeviceTypeEnum? DeviceTypeEnum { get; set; } + public List AllParents { get; set; } + [Display(Name = "_Admin.Parent")] + public Guid? ParentId { get; set; } + + protected override void InitVM() + { + AllDrivers = DC.Set().GetSelectListItems(Wtm, y => y.DriverName); + AllParents = DC.Set().GetSelectListItems(Wtm, y => y.DeviceName); + } + + } + +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceImportVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceImportVM.cs new file mode 100644 index 0000000..d92c1eb --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceImportVM.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; + + +namespace IoTGateway.ViewModel.BasicData.DeviceVMs +{ + public partial class DeviceTemplateVM : BaseTemplateVM + { + [Display(Name = "名称")] + public ExcelPropety DeviceName_Excel = ExcelPropety.CreateProperty(x => x.DeviceName); + [Display(Name = "排序")] + public ExcelPropety Index_Excel = ExcelPropety.CreateProperty(x => x.Index); + [Display(Name = "描述")] + public ExcelPropety Description_Excel = ExcelPropety.CreateProperty(x => x.Description); + public ExcelPropety Driver_Excel = ExcelPropety.CreateProperty(x => x.DriverId); + [Display(Name = "自启动")] + public ExcelPropety AutoStart_Excel = ExcelPropety.CreateProperty(x => x.AutoStart); + [Display(Name = "类型")] + public ExcelPropety DeviceTypeEnum_Excel = ExcelPropety.CreateProperty(x => x.DeviceTypeEnum); + [Display(Name = "_Admin.Parent")] + public ExcelPropety Parent_Excel = ExcelPropety.CreateProperty(x => x.ParentId); + + protected override void InitVM() + { + Driver_Excel.DataType = ColumnDataType.ComboBox; + Driver_Excel.ListItems = DC.Set().GetSelectListItems(Wtm, y => y.DriverName); + Parent_Excel.DataType = ColumnDataType.ComboBox; + Parent_Excel.ListItems = DC.Set().GetSelectListItems(Wtm, y => y.DeviceName); + } + + } + + public class DeviceImportVM : BaseImportVM + { + + } + +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceListVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceListVM.cs new file mode 100644 index 0000000..f3e998e --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceListVM.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; +using IoTGateway.Model; +using Microsoft.Extensions.Primitives; + +namespace IoTGateway.ViewModel.BasicData.DeviceVMs +{ + public partial class DeviceListVM : BasePagedListVM + { + protected override List InitGridAction() + { + return new List + { + this.MakeAction("Device","Copy","设备复制","设备复制", GridActionParameterTypesEnum.SingleId,"BasicData",600).SetIconCls("layui-icon layui-icon-template-1").SetPromptMessage("你确定复制设备,包括配置参数和变量?").SetDialogTitle("复制设备确认").SetHideOnToolBar(true).SetShowInRow(true).SetBindVisiableColName("copy"), + this.MakeAction("Device","CreateGroup","创建组","创建组", GridActionParameterTypesEnum.NoId,"BasicData",600).SetIconCls("_wtmicon _wtmicon-zuzhiqunzu").SetDialogTitle("创建组").SetShowInRow(false), + this.MakeStandardAction("Device", GridActionStandardTypesEnum.Create, "创建设备","BasicData", dialogWidth: 800,name:"创建设备").SetIconCls("layui-icon layui-icon-senior"), + this.MakeStandardAction("Device", GridActionStandardTypesEnum.Edit, Localizer["Sys.Edit"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("Device", GridActionStandardTypesEnum.Delete, Localizer["Sys.Delete"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("Device", GridActionStandardTypesEnum.Details, Localizer["Sys.Details"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("Device", GridActionStandardTypesEnum.BatchEdit, Localizer["Sys.BatchEdit"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("Device", GridActionStandardTypesEnum.BatchDelete, Localizer["Sys.BatchDelete"], "BasicData", dialogWidth: 800), + //this.MakeStandardAction("Device", GridActionStandardTypesEnum.Import, Localizer["Sys.Import"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("Device", GridActionStandardTypesEnum.ExportExcel, Localizer["Sys.Export"], "BasicData"), + }; + } + + + protected override IEnumerable> InitGridHeader() + { + return new List>{ + this.MakeGridHeader(x => x.DeviceName), + this.MakeGridHeader(x => x.Index), + this.MakeGridHeader(x => x.Description), + this.MakeGridHeader(x => x.DriverName_view), + this.MakeGridHeader(x => x.AutoStart), + this.MakeGridHeader(x => x.DeviceTypeEnum), + this.MakeGridHeader(x => x.DeviceName_view), + this.MakeGridHeader(x=>"copy").SetHide().SetFormat((a,b)=>{ + if(a.DeviceTypeEnum== DeviceTypeEnum.Device) + return "true"; + return "false"; + }), + this.MakeGridHeaderAction(width: 280) + }; + } + + public override IOrderedQueryable GetSearchQuery() + { + var data = DC.Set().AsNoTracking().Where(x => x.DeviceTypeEnum == DeviceTypeEnum.Group).OrderBy(x => x.Index).ThenBy(x => x.DeviceName).ToList(); + + var dataRet = new List(); + + int order = 0; + foreach (var x in data) + { + var itemF = new Device_View + { + ID = x.ID, + Index = x.Index, + DeviceName = x.DeviceName, + Description = x.Description, + DeviceTypeEnum = x.DeviceTypeEnum, + DriverName_view = x.Driver?.DriverName, + ExtraOrder = order + }; + dataRet.Add(itemF); + order++; + + + StringValues Ids = new(); + if (FC.ContainsKey("Ids[]")) + { + Ids = (StringValues)FC["Ids[]"]; + } + var childrens = DC.Set().AsNoTracking().Where(y => y.ParentId == x.ID).Include(x => x.Driver).OrderBy(x => x.Index).ThenBy(x => x.DeviceName).ToList(); + if (Ids.Count != 0) + childrens = childrens.Where(x => Ids.Contains(x.ID.ToString())).ToList(); + + foreach (var y in childrens) + { + var itemC = new Device_View + { + ID = y.ID, + Index = y.Index, + DeviceName = "    " + y.DeviceName, + AutoStart = y.AutoStart, + Description = y.Description, + DeviceTypeEnum = y.DeviceTypeEnum, + DriverName_view = y.Driver?.DriverName, + DeviceName_view = itemF.DeviceName, + ExtraOrder = order + }; + dataRet.Add(itemC); + } + order++; + } + + return dataRet.AsQueryable().OrderBy(x => x.ExtraOrder); + } + + } + + public class Device_View : Device + { + [Display(Name = "驱动名")] + public String DriverName_view { get; set; } + [Display(Name = "父级名")] + public String DeviceName_view { get; set; } + public int ExtraOrder { get; set; } + } +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceSearcher.cs b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceSearcher.cs new file mode 100644 index 0000000..ec08d33 --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceSearcher.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; + + +namespace IoTGateway.ViewModel.BasicData.DeviceVMs +{ + public partial class DeviceSearcher : BaseSearcher + { + [Display(Name = "名称")] + public String DeviceName { get; set; } + public List AllDrivers { get; set; } + public Guid? DriverId { get; set; } + [Display(Name = "自启动")] + public Boolean? AutoStart { get; set; } + [Display(Name = "类型")] + public DeviceTypeEnum? DeviceTypeEnum { get; set; } + public List AllParents { get; set; } + [Display(Name = "_Admin.Parent")] + public Guid? ParentId { get; set; } + + protected override void InitVM() + { + AllDrivers = DC.Set().GetSelectListItems(Wtm, y => y.DriverName); + AllParents = DC.Set().GetSelectListItems(Wtm, y => y.DeviceName); + } + + } +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceVM.cs new file mode 100644 index 0000000..cd4df6b --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceVMs/DeviceVM.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; +using Plugin; +using Microsoft.EntityFrameworkCore; + +namespace IoTGateway.ViewModel.BasicData.DeviceVMs +{ + public partial class DeviceVM : BaseCRUDVM + { + public List AllDrivers { get; set; } + public List AllParents { get; set; } + + public DeviceVM() + { + SetInclude(x => x.Driver); + SetInclude(x => x.Parent); + } + + protected override void InitVM() + { + AllDrivers = DC.Set().GetSelectListItems(Wtm, y => y.DriverName); + AllParents = DC.Set().Where(x=>x.DeviceTypeEnum== DeviceTypeEnum.Group).GetSelectListItems(Wtm, y => y.DeviceName); + } + + public override void DoAdd() + { + try + { + base.DoAdd(); + //添加结束 + if (this.Entity.DeviceTypeEnum == DeviceTypeEnum.Device) + { + var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + deviceService._DrvierManager.AddConfigs(this.Entity.ID, this.Entity.DriverId); + var dap = DC.Set().Where(x => x.ID == Entity.ID).Include(x => x.Driver).SingleOrDefault(); + deviceService.CreateDeviceThread(dap); + } + } + catch (Exception ex) + { + MSD.AddModelError("", $"添加失败,{ex.Message}"); + } + } + + public override void DoEdit(bool updateAllFields = false) + { + base.DoEdit(updateAllFields); + //修改结束 + var pluginManager = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + UpdateDevices.UpdateDevice(DC, pluginManager, FC); + } + + public override void DoDelete() + { + List Ids = new List() { Guid.Parse(FC["id"].ToString()) }; + + var pluginManager = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + var ret = DeleteDevices.doDelete(pluginManager, DC, Ids); + if (!ret.IsSuccess) + MSD.AddModelError("", ret.Message); + } + } +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableBatchVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableBatchVM.cs new file mode 100644 index 0000000..5b2ae97 --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableBatchVM.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; +using PluginInterface; +using Plugin; + +namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs +{ + public partial class DeviceVariableBatchVM : BaseBatchVM + { + public DeviceVariableBatchVM() + { + ListVM = new DeviceVariableListVM(); + LinkedVM = new DeviceVariable_BatchEdit(); + } + + public override bool DoBatchDelete() + { + var ret = base.DoBatchDelete(); + if (ret) + { + var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + UpdateDevices.UpdateVaribale(DC, deviceService, FC); + } + return ret; + } + + public override bool DoBatchEdit() + { + var ret = base.DoBatchEdit(); + if (ret) + { + var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + UpdateDevices.UpdateVaribale(DC, deviceService, FC); + } + return ret; + } + } + + /// + /// Class to define batch edit fields + /// + public class DeviceVariable_BatchEdit : BaseVM + { + [Display(Name = "变量名")] + public String Name { get; set; } + [Display(Name = "地址")] + public String DeviceAddress { get; set; } + [Display(Name = "数据类型")] + public DataTypeEnum? DataType { get; set; } + [Display(Name = "倍率")] + public Double? ValueFactor { get; set; } + [Display(Name = "权限")] + public ProtectTypeEnum? ProtectType { get; set; } + + protected override void InitVM() + { + } + + } + +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableImportVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableImportVM.cs new file mode 100644 index 0000000..bafe895 --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableImportVM.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; +using PluginInterface; + + +namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs +{ + public partial class DeviceVariableTemplateVM : BaseTemplateVM + { + [Display(Name = "变量名")] + public ExcelPropety Name_Excel = ExcelPropety.CreateProperty(x => x.Name); + [Display(Name = "描述")] + public ExcelPropety Description_Excel = ExcelPropety.CreateProperty(x => x.Description); + [Display(Name = "方法")] + public ExcelPropety Method_Excel = ExcelPropety.CreateProperty(x => x.Method); + [Display(Name = "地址")] + public ExcelPropety DeviceAddress_Excel = ExcelPropety.CreateProperty(x => x.DeviceAddress); + [Display(Name = "数据类型")] + public ExcelPropety DataType_Excel = ExcelPropety.CreateProperty(x => x.DataType); + [Display(Name = "倍率")] + public ExcelPropety ValueFactor_Excel = ExcelPropety.CreateProperty(x => x.ValueFactor); + [Display(Name = "权限")] + public ExcelPropety ProtectType_Excel = ExcelPropety.CreateProperty(x => x.ProtectType); + public ExcelPropety Device_Excel = ExcelPropety.CreateProperty(x => x.DeviceId); + + protected override void InitVM() + { + Device_Excel.DataType = ColumnDataType.ComboBox; + Device_Excel.ListItems = DC.Set().GetSelectListItems(Wtm, y => y.DeviceName); + } + } + + public class DeviceVariableImportVM : BaseImportVM + { + + } + +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableListVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableListVM.cs new file mode 100644 index 0000000..79f15eb --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableListVM.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; +using IoTGateway.Model; +using PluginInterface; +using Plugin; + +namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs +{ + public partial class DeviceVariableListVM : BasePagedListVM + { + public List AllDevices { get; set; } + protected override List InitGridAction() + { + return new List + { + this.MakeStandardAction("DeviceVariable", GridActionStandardTypesEnum.Create, Localizer["Sys.Create"],"BasicData", dialogWidth: 800), + this.MakeStandardAction("DeviceVariable", GridActionStandardTypesEnum.Edit, Localizer["Sys.Edit"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("DeviceVariable", GridActionStandardTypesEnum.Delete, Localizer["Sys.Delete"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("DeviceVariable", GridActionStandardTypesEnum.Details, Localizer["Sys.Details"], "BasicData", dialogWidth: 800).SetBindVisiableColName("detail"), + this.MakeStandardAction("DeviceVariable", GridActionStandardTypesEnum.BatchEdit, Localizer["Sys.BatchEdit"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("DeviceVariable", GridActionStandardTypesEnum.BatchDelete, Localizer["Sys.BatchDelete"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("DeviceVariable", GridActionStandardTypesEnum.Import, Localizer["Sys.Import"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("DeviceVariable", GridActionStandardTypesEnum.ExportExcel, Localizer["Sys.Export"], "BasicData"), + }; + } + + protected override void InitListVM() + { + AllDevices = DC.Set().AsNoTracking() + .OrderBy(x => x.Parent.Index).ThenBy(x => x.Parent.DeviceName) + .OrderBy(x => x.Index).ThenBy(x => x.DeviceName) + .GetTreeSelectListItems(Wtm, x => x.DeviceName); + foreach (var device in AllDevices) + { + foreach (var item in device.Children) + { + item.Text = item.Text; + item.Icon = "layui-icon layui-icon-link"; + item.Expended = true; + } + } + base.InitListVM(); + } + protected override IEnumerable> InitGridHeader() + { + return new List>{ + this.MakeGridHeader(x => x.Name).SetSort(true).SetWidth(120), + //this.MakeGridHeader(x => x.Description), + this.MakeGridHeader(x => x.Method).SetSort(true).SetWidth(160), + this.MakeGridHeader(x => x.DeviceAddress).SetSort(true).SetWidth(80), + this.MakeGridHeader(x => x.DataType).SetSort(true).SetWidth(110), + this.MakeGridHeader(x => x.Value).SetWidth(80), + this.MakeGridHeader(x => x.State).SetWidth(80), + this.MakeGridHeader(x => x.ValueFactor).SetSort(true).SetWidth(80), + //this.MakeGridHeader(x => x.ProtectType).SetSort(true), + this.MakeGridHeader(x => x.DeviceName_view).SetSort(true).SetWidth(90), + this.MakeGridHeader(x=> "detail").SetHide().SetFormat((a,b)=>{ + return "false"; + }), + this.MakeGridHeaderAction(width: 150) + }; + } + + public override void AfterDoSearcher() + { + var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + foreach (var item in EntityList) + { + var DapThread = deviceService.DeviceThreads.Where(x => x.Device.ID == item.DeviceId).FirstOrDefault(); + if (DapThread?.DeviceValues != null && DapThread.DeviceValues.ContainsKey(item.ID)) + { + item.Value = DapThread.DeviceValues[item.ID].Value?.ToString(); + item.State = DapThread.DeviceValues[item.ID].StatusType.ToString(); + } + } + + } + public override IOrderedQueryable GetSearchQuery() + { + var query = DC.Set() + .CheckContain(Searcher.Name, x => x.Name) + .CheckContain(Searcher.Method, x => x.Method) + .CheckContain(Searcher.DeviceAddress, x => x.DeviceAddress) + .CheckEqual(Searcher.DataType, x => x.DataType) + .CheckEqual(Searcher.DeviceId, x => x.DeviceId) + .Select(x => new DeviceVariable_View + { + ID = x.ID, + DeviceId = x.DeviceId, + Name = x.Name, + Description = x.Description, + Method = x.Method, + DeviceAddress = x.DeviceAddress, + DataType = x.DataType, + ValueFactor = x.ValueFactor, + ProtectType = x.ProtectType, + DeviceName_view = x.Device.DeviceName, + }) + .OrderBy(x => x.ID); + return query; + } + + } + + public class DeviceVariable_View : DeviceVariable + { + [Display(Name = "设备名")] + public String DeviceName_view { get; set; } + [Display(Name = "值")] + public String Value { get; set; } + [Display(Name = "状态")] + public String State { get; set; } + + } +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableSearcher.cs b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableSearcher.cs new file mode 100644 index 0000000..3308278 --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableSearcher.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; +using PluginInterface; +using Microsoft.EntityFrameworkCore; + +namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs +{ + public partial class DeviceVariableSearcher : BaseSearcher + { + [Display(Name = "变量名")] + public String Name { get; set; } + [Display(Name = "方法")] + public String Method { get; set; } + [Display(Name = "地址")] + public String DeviceAddress { get; set; } + [Display(Name = "数据类型")] + public DataTypeEnum? DataType { get; set; } + public List AllDevices { get; set; } + [Display(Name = "设备名")] + public Guid? DeviceId { get; set; } + + protected override void InitVM() + { + AllDevices = DC.Set().AsNoTracking().Where(x => x.DeviceTypeEnum == DeviceTypeEnum.Device) + .OrderBy(x => x.Parent.Index).ThenBy(x => x.Parent.DeviceName) + .ThenBy(x => x.Index).ThenBy(x => x.Parent.DeviceName) + .GetSelectListItems(Wtm, y => y.DeviceName); + } + + } +} diff --git a/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableVM.cs b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableVM.cs new file mode 100644 index 0000000..d2a18f9 --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DeviceVariableVMs/DeviceVariableVM.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; +using Plugin; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Primitives; + +namespace IoTGateway.ViewModel.BasicData.DeviceVariableVMs +{ + public partial class DeviceVariableVM : BaseCRUDVM + { + public List AllDevices { get; set; } + public List AllMethods { get; set; } + + public DeviceVariableVM() + { + SetInclude(x => x.Device); + } + + protected override void InitVM() + { + AllDevices = DC.Set().AsNoTracking().Where(x => x.DeviceTypeEnum == DeviceTypeEnum.Device) + .OrderBy(x => x.Parent.Index).ThenBy(x => x.Parent.DeviceName) + .OrderBy(x => x.Index).ThenBy(x => x.DeviceName) + .GetSelectListItems(Wtm, y => y.DeviceName); + if (Entity.DeviceId != null) + { + var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + AllMethods = deviceService.GetDriverMethods(Entity.DeviceId); + var DapThread = deviceService.DeviceThreads.Where(x => x.Device.ID == Entity.DeviceId).FirstOrDefault(); + } + } + + public override void DoAdd() + { + base.DoAdd(); + UpdateVaribale(); + } + + public override void DoEdit(bool updateAllFields = false) + { + base.DoEdit(updateAllFields); + UpdateVaribale(); + } + + public override void DoDelete() + { + //先获取id + var id= UpdateDevices.FC2Guids(FC); + var deviceId = DC.Set().Where(x => id.Contains(x.ID)).Select(x=>x.DeviceId).FirstOrDefault(); + FC["Entity.DeviceId"] =(StringValues)deviceId.ToString(); + base.DoDelete(); + UpdateVaribale(); + } + + + private void UpdateVaribale() + { + var deviceService = Wtm.ServiceProvider.GetService(typeof(DeviceService)) as DeviceService; + UpdateDevices.UpdateVaribale(DC, deviceService, FC); + + } + } +} diff --git a/IoTGateway.ViewModel/BasicData/DriverVMs/DriverBatchVM.cs b/IoTGateway.ViewModel/BasicData/DriverVMs/DriverBatchVM.cs new file mode 100644 index 0000000..cd38505 --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DriverVMs/DriverBatchVM.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; + + +namespace IoTGateway.ViewModel.BasicData.DriverVMs +{ + public partial class DriverBatchVM : BaseBatchVM + { + public DriverBatchVM() + { + ListVM = new DriverListVM(); + LinkedVM = new Driver_BatchEdit(); + } + + } + + /// + /// Class to define batch edit fields + /// + public class Driver_BatchEdit : BaseVM + { + + protected override void InitVM() + { + } + + } + +} diff --git a/IoTGateway.ViewModel/BasicData/DriverVMs/DriverImportVM.cs b/IoTGateway.ViewModel/BasicData/DriverVMs/DriverImportVM.cs new file mode 100644 index 0000000..e79ccfb --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DriverVMs/DriverImportVM.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; + + +namespace IoTGateway.ViewModel.BasicData.DriverVMs +{ + public partial class DriverTemplateVM : BaseTemplateVM + { + [Display(Name = "驱动名")] + public ExcelPropety DriverName_Excel = ExcelPropety.CreateProperty(x => x.DriverName); + [Display(Name = "文件名")] + public ExcelPropety FileName_Excel = ExcelPropety.CreateProperty(x => x.FileName); + [Display(Name = "程序集名")] + public ExcelPropety AssembleName_Excel = ExcelPropety.CreateProperty(x => x.AssembleName); + [Display(Name = "剩余授权数量")] + public ExcelPropety AuthorizesNum_Excel = ExcelPropety.CreateProperty(x => x.AuthorizesNum); + + protected override void InitVM() + { + } + + } + + public class DriverImportVM : BaseImportVM + { + + } + +} diff --git a/IoTGateway.ViewModel/BasicData/DriverVMs/DriverListVM.cs b/IoTGateway.ViewModel/BasicData/DriverVMs/DriverListVM.cs new file mode 100644 index 0000000..d8b016b --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DriverVMs/DriverListVM.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; +using IoTGateway.Model; + + +namespace IoTGateway.ViewModel.BasicData.DriverVMs +{ + public partial class DriverListVM : BasePagedListVM + { + protected override List InitGridAction() + { + return new List + { + this.MakeStandardAction("Driver", GridActionStandardTypesEnum.Create, Localizer["Sys.Create"],"BasicData", dialogWidth: 800), + this.MakeStandardAction("Driver", GridActionStandardTypesEnum.Edit, Localizer["Sys.Edit"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("Driver", GridActionStandardTypesEnum.Delete, Localizer["Sys.Delete"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("Driver", GridActionStandardTypesEnum.Details, Localizer["Sys.Details"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("Driver", GridActionStandardTypesEnum.BatchEdit, Localizer["Sys.BatchEdit"], "BasicData", dialogWidth: 800), + this.MakeStandardAction("Driver", GridActionStandardTypesEnum.BatchDelete, Localizer["Sys.BatchDelete"], "BasicData", dialogWidth: 800), + //this.MakeStandardAction("Driver", GridActionStandardTypesEnum.Import, Localizer["Sys.Import"], "BasicData", dialogWidth: 800), + //this.MakeStandardAction("Driver", GridActionStandardTypesEnum.ExportExcel, Localizer["Sys.Export"], "BasicData"), + }; + } + + + protected override IEnumerable> InitGridHeader() + { + return new List>{ + this.MakeGridHeader(x => x.DriverName), + this.MakeGridHeader(x => x.FileName), + this.MakeGridHeader(x => x.AssembleName), + this.MakeGridHeader(x => x.AuthorizesNum), + this.MakeGridHeaderAction(width: 200) + }; + } + + public override IOrderedQueryable GetSearchQuery() + { + var query = DC.Set() + .CheckContain(Searcher.DriverName, x=>x.DriverName) + .Select(x => new Driver_View + { + ID = x.ID, + DriverName = x.DriverName, + FileName = x.FileName, + AssembleName = x.AssembleName, + AuthorizesNum = x.AuthorizesNum, + }) + .OrderBy(x => x.ID); + return query; + } + + } + + public class Driver_View : Driver{ + + } +} diff --git a/IoTGateway.ViewModel/BasicData/DriverVMs/DriverSearcher.cs b/IoTGateway.ViewModel/BasicData/DriverVMs/DriverSearcher.cs new file mode 100644 index 0000000..aa5e5c0 --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DriverVMs/DriverSearcher.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; + + +namespace IoTGateway.ViewModel.BasicData.DriverVMs +{ + public partial class DriverSearcher : BaseSearcher + { + [Display(Name = "驱动名")] + public String DriverName { get; set; } + + protected override void InitVM() + { + } + + } +} diff --git a/IoTGateway.ViewModel/BasicData/DriverVMs/DriverVM.cs b/IoTGateway.ViewModel/BasicData/DriverVMs/DriverVM.cs new file mode 100644 index 0000000..71aeb44 --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/DriverVMs/DriverVM.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; +using Plugin; + +namespace IoTGateway.ViewModel.BasicData.DriverVMs +{ + public partial class DriverVM : BaseCRUDVM + { + + public DriverVM() + { + } + + protected override void InitVM() + { + } + + public override void DoAdd() + { + var drvierService = Wtm.ServiceProvider.GetService(typeof(DrvierService)) as DrvierService; + Entity.AssembleName = drvierService.GetAssembleNameByFileName(Entity.FileName); + if (string.IsNullOrEmpty(Entity.AssembleName)) + { + MSD.AddModelError("", "程序集获取失败"); + return; + } + + base.DoAdd(); + } + + public override void DoEdit(bool updateAllFields = false) + { + base.DoEdit(updateAllFields); + } + + public override void DoDelete() + { + base.DoDelete(); + } + } +} diff --git a/IoTGateway.ViewModel/BasicData/UpdateDevices.cs b/IoTGateway.ViewModel/BasicData/UpdateDevices.cs new file mode 100644 index 0000000..78dcc03 --- /dev/null +++ b/IoTGateway.ViewModel/BasicData/UpdateDevices.cs @@ -0,0 +1,111 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Primitives; +using Plugin; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using IoTGateway.Model; + +namespace IoTGateway.ViewModel.BasicData +{ + internal static class UpdateDevices + { + internal enum FromVM + { + Variable, + Config, + Device + } + internal static void UpdateVaribale(IDataContext DC, DeviceService deviceService, Dictionary FC) + { + var devices = GetDevices(DC, deviceService, FromVM.Variable, FC); + deviceService.UpdateDevices(devices); + } + + internal static void UpdateConfig(IDataContext DC, DeviceService deviceService, Dictionary FC) + { + var devices = GetDevices(DC,deviceService, FromVM.Config,FC); + deviceService.UpdateDevices(devices); + } + + internal static void UpdateDevice(IDataContext DC, DeviceService deviceService, Dictionary FC) + { + var devices = GetDevices(DC, deviceService, FromVM.Device, FC); + deviceService.UpdateDevices(devices); + } + + + internal static List GetDevices(IDataContext DC, DeviceService deviceService, FromVM fromVM, Dictionary FC) + { + List devices = new(); + List Ids = FC2Guids(FC); + + if (FC.ContainsKey("Entity.DeviceId")) + { + StringValues id = (StringValues)FC["Entity.DeviceId"]; + var device = DC.Set().Where(x => x.ID == Guid.Parse(id)).Include(x => x.DeviceVariables).Include(x => x.Driver).SingleOrDefault(); + if (!devices.Where(x => x.ID == device.ID).Any()) + devices.Add(device); + } + foreach (var varId in Ids) + { + switch (fromVM) + { + case FromVM.Variable: + var deviceVariable = DC.Set().Where(x => x.ID == varId).SingleOrDefault(); + if (deviceVariable != null) + { + var device = DC.Set().Where(x => x.ID == deviceVariable.DeviceId).Include(x=>x.DeviceVariables).Include(x => x.Driver).SingleOrDefault(); + if (!devices.Where(x => x.ID == device.ID).Any()) + devices.Add(device); + } + break; + case FromVM.Config: + foreach (var deviceConfigId in Ids) + { + var deviceConfig = DC.Set().Where(x => x.ID == deviceConfigId).SingleOrDefault(); + if (deviceConfig != null) + { + var device = DC.Set().Where(x => x.ID == deviceConfig.DeviceId).Include(x => x.DeviceVariables).Include(x => x.Driver).SingleOrDefault(); + if (!devices.Where(x => x.ID == device.ID).Any()) + devices.Add(device); + } + } + break; + case FromVM.Device: + foreach (var deviceId in Ids) + { + var device = DC.Set().Where(x => x.ID == deviceId).Include(x => x.DeviceVariables).Include(x => x.Driver).SingleOrDefault(); + if (!devices.Where(x => x.ID == device.ID).Any()) + devices.Add(device); + } + break; + default: + break; + } + + } + return devices; + } + + internal static List FC2Guids(Dictionary FC) + { + List Ids = new(); + StringValues IdsStr = new(); + if (FC.ContainsKey("Ids")) + IdsStr = (StringValues)FC["Ids"]; + else if (FC.ContainsKey("Ids[]")) + IdsStr = (StringValues)FC["Ids[]"]; + else if (FC.ContainsKey("id")) + IdsStr = (StringValues)FC["id"]; + foreach (var item in IdsStr) + { + Ids.Add(Guid.Parse(item)); + } + return Ids; + } + } +} diff --git a/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigBatchVM.cs b/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigBatchVM.cs new file mode 100644 index 0000000..a2a2ca5 --- /dev/null +++ b/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigBatchVM.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; + + +namespace IoTGateway.ViewModel.Config.SystemConfigVMs +{ + public partial class SystemConfigBatchVM : BaseBatchVM + { + public SystemConfigBatchVM() + { + ListVM = new SystemConfigListVM(); + LinkedVM = new SystemConfig_BatchEdit(); + } + + } + + /// + /// Class to define batch edit fields + /// + public class SystemConfig_BatchEdit : BaseVM + { + + protected override void InitVM() + { + } + + } + +} diff --git a/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigImportVM.cs b/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigImportVM.cs new file mode 100644 index 0000000..bc4ea34 --- /dev/null +++ b/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigImportVM.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; + + +namespace IoTGateway.ViewModel.Config.SystemConfigVMs +{ + public partial class SystemConfigTemplateVM : BaseTemplateVM + { + [Display(Name = "网关名称")] + public ExcelPropety GatewayName_Excel = ExcelPropety.CreateProperty(x => x.GatewayName); + [Display(Name = "Mqtt服务器")] + public ExcelPropety MqttIp_Excel = ExcelPropety.CreateProperty(x => x.MqttIp); + [Display(Name = "Mqtt端口")] + public ExcelPropety MqttPort_Excel = ExcelPropety.CreateProperty(x => x.MqttPort); + [Display(Name = "Mqtt用户名")] + public ExcelPropety MqttUName_Excel = ExcelPropety.CreateProperty(x => x.MqttUName); + [Display(Name = "Mqtt密码")] + public ExcelPropety MqttUPwd_Excel = ExcelPropety.CreateProperty(x => x.MqttUPwd); + + protected override void InitVM() + { + } + + } + + public class SystemConfigImportVM : BaseImportVM + { + + } + +} diff --git a/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigListVM.cs b/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigListVM.cs new file mode 100644 index 0000000..77ab872 --- /dev/null +++ b/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigListVM.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; +using IoTGateway.Model; + + +namespace IoTGateway.ViewModel.Config.SystemConfigVMs +{ + public partial class SystemConfigListVM : BasePagedListVM + { + protected override List InitGridAction() + { + return new List + { + //this.MakeStandardAction("SystemConfig", GridActionStandardTypesEnum.Create, Localizer["Sys.Create"],"Config", dialogWidth: 800), + this.MakeStandardAction("SystemConfig", GridActionStandardTypesEnum.Edit, Localizer["Sys.Edit"], "Config", dialogWidth: 800), + //this.MakeStandardAction("SystemConfig", GridActionStandardTypesEnum.Delete, Localizer["Sys.Delete"], "Config", dialogWidth: 800), + this.MakeStandardAction("SystemConfig", GridActionStandardTypesEnum.Details, Localizer["Sys.Details"], "Config", dialogWidth: 800), + //this.MakeStandardAction("SystemConfig", GridActionStandardTypesEnum.BatchEdit, Localizer["Sys.BatchEdit"], "Config", dialogWidth: 800), + //this.MakeStandardAction("SystemConfig", GridActionStandardTypesEnum.BatchDelete, Localizer["Sys.BatchDelete"], "Config", dialogWidth: 800), + //this.MakeStandardAction("SystemConfig", GridActionStandardTypesEnum.Import, Localizer["Sys.Import"], "Config", dialogWidth: 800), + //this.MakeStandardAction("SystemConfig", GridActionStandardTypesEnum.ExportExcel, Localizer["Sys.Export"], "Config"), + }; + } + + + protected override IEnumerable> InitGridHeader() + { + return new List>{ + this.MakeGridHeader(x => x.GatewayName), + this.MakeGridHeader(x => x.MqttIp), + this.MakeGridHeader(x => x.MqttPort), + this.MakeGridHeader(x => x.MqttUName), + this.MakeGridHeader(x => x.MqttUPwd), + this.MakeGridHeaderAction(width: 200) + }; + } + + public override IOrderedQueryable GetSearchQuery() + { + var query = DC.Set() + .Select(x => new SystemConfig_View + { + ID = x.ID, + GatewayName = x.GatewayName, + MqttIp = x.MqttIp, + MqttPort = x.MqttPort, + MqttUName = x.MqttUName, + MqttUPwd = x.MqttUPwd, + }) + .OrderBy(x => x.ID); + return query; + } + + } + + public class SystemConfig_View : SystemConfig{ + + } +} diff --git a/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigSearcher.cs b/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigSearcher.cs new file mode 100644 index 0000000..7d2c956 --- /dev/null +++ b/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigSearcher.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; + + +namespace IoTGateway.ViewModel.Config.SystemConfigVMs +{ + public partial class SystemConfigSearcher : BaseSearcher + { + + protected override void InitVM() + { + } + + } +} diff --git a/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigVM.cs b/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigVM.cs new file mode 100644 index 0000000..c5d3e39 --- /dev/null +++ b/IoTGateway.ViewModel/Config/SystemConfigVMs/SystemConfigVM.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.Model; +using Plugin; + +namespace IoTGateway.ViewModel.Config.SystemConfigVMs +{ + public partial class SystemConfigVM : BaseCRUDVM + { + + public SystemConfigVM() + { + } + + protected override void InitVM() + { + } + + public override void DoAdd() + { + base.DoAdd(); + } + + public override void DoEdit(bool updateAllFields = false) + { + base.DoEdit(updateAllFields); + var myMqttClient = Wtm.ServiceProvider.GetService(typeof(MyMqttClient)) as MyMqttClient; + myMqttClient.InitClient(); + } + + public override void DoDelete() + { + base.DoDelete(); + } + } +} diff --git a/IoTGateway.ViewModel/HomeVMs/LoginVM.cs b/IoTGateway.ViewModel/HomeVMs/LoginVM.cs new file mode 100644 index 0000000..9ca30d9 --- /dev/null +++ b/IoTGateway.ViewModel/HomeVMs/LoginVM.cs @@ -0,0 +1,78 @@ +using System.ComponentModel.DataAnnotations; +using System.Linq; +using Microsoft.EntityFrameworkCore; +using WalkingTec.Mvvm.Core; + +namespace IoTGateway.ViewModel.HomeVMs +{ + public class LoginVM : BaseVM + { + [Display(Name = "_Admin.Account")] + [Required(ErrorMessage = "Validate.{0}required")] + [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] + public string ITCode { get; set; } + + [Display(Name = "_Admin.Password")] + [Required(ErrorMessage = "Validate.{0}required")] + [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] + public string Password { get; set; } + + [Display(Name = "Login.RememberMe")] + public bool RememberLogin { get; set; } + + private string _redirect; + public string Redirect + { + get + { + var rv = _redirect; + if (string.IsNullOrEmpty(rv) == false) + { + if (rv.StartsWith("/#") == false) + { + rv = "/#" + rv; + } + if(rv.Split("#/").Length > 2) + { + int index = rv.LastIndexOf("#/"); + rv = rv.Substring(0, index); + } + } + return rv; + } + set { _redirect = value; } + } + + [Display(Name = "Login.InputValidation")] + public string VerifyCode { get; set; } + + /// + /// 进行登录 + /// + /// 外部传递的页面权限 + /// 登录用户的信息 + public async System.Threading.Tasks.Task DoLoginAsync(bool ignorePris = false) + { + //根据用户名和密码查询用户 + var rv = await DC.Set().Where(x => x.ITCode.ToLower() == ITCode.ToLower() && x.Password == Utils.GetMD5String(Password) && x.IsValid).Select(x => new { itcode = x.ITCode, id = x.GetID() }).SingleOrDefaultAsync(); + + //如果没有找到则输出错误 + if (rv == null) + { + MSD.AddModelError("", Localizer["Sys.LoginFailed"]); + return null; + } + else + { + LoginUserInfo user = new LoginUserInfo + { + ITCode = rv.itcode, + UserId = rv.id.ToString() + }; + //读取角色,用户组,页面权限,数据权限等框架配置信息 + await user.LoadBasicInfoAsync(Wtm); + return user; + } + } + } +} diff --git a/IoTGateway.ViewModel/HomeVMs/RegVM.cs b/IoTGateway.ViewModel/HomeVMs/RegVM.cs new file mode 100644 index 0000000..15f225d --- /dev/null +++ b/IoTGateway.ViewModel/HomeVMs/RegVM.cs @@ -0,0 +1,76 @@ +using System.ComponentModel.DataAnnotations; +using System.Linq; +using WalkingTec.Mvvm.Core; + +namespace IoTGateway.ViewModel.HomeVMs +{ + public class RegVM : BaseVM + { + [Display(Name = "_Admin.Account")] + [Required(ErrorMessage = "Validate.{0}required")] + [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] + public string ITCode { get; set; } + + [Display(Name = "_Admin.Name")] + [Required(ErrorMessage = "Validate.{0}required")] + [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] + public string Name { get; set; } + + [Display(Name = "_Admin.Password")] + [Required(AllowEmptyStrings = false)] + [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] + public string Password { get; set; } + + [Display(Name = "_Admin.Password")] + [Required(AllowEmptyStrings = false)] + [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] + public string NewPasswordComfirm { get; set; } + + [Display(Name = "_Admin.Email")] + [RegularExpression("^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$", ErrorMessage = "Validate.{0}formaterror")] + [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] + public string Email { get; set; } + + [Display(Name = "_Admin.CellPhone")] + [RegularExpression("^[1][3-9]\\d{9}$", ErrorMessage = "Validate.{0}formaterror")] + public string CellPhone { get; set; } + + /// + /// 进行登录 + /// + /// 登录用户的信息 + public bool DoReg() + { + //检查两次新密码是否输入一致,如不一致则输出错误 + if (Password != NewPasswordComfirm) + { + MSD.AddModelError("NewPasswordComfirm", Localizer["Sys.PasswordNotSame"]); + return false; + } + + + //检查itcode是否重复 + var exist = DC.Set().Any(x => x.ITCode.ToLower() == ITCode.ToLower()); + + if (exist == true) + { + MSD.AddModelError("ITCode", Localizer["Login.ItcodeDuplicate"]); + return false; + } + + FrameworkUser user = new FrameworkUser + { + ITCode = ITCode, + Name = Name, + Password = Utils.GetMD5String(Password), + IsValid = true, + CellPhone = CellPhone, + Email = Email + }; + + DC.Set().Add(user); + DC.SaveChanges(); + return true; + } + } +} diff --git a/IoTGateway.ViewModel/IoTGateway.ViewModel.csproj b/IoTGateway.ViewModel/IoTGateway.ViewModel.csproj new file mode 100644 index 0000000..5121da2 --- /dev/null +++ b/IoTGateway.ViewModel/IoTGateway.ViewModel.csproj @@ -0,0 +1,14 @@ + + + + net5.0 + true + + + + + + + + + diff --git a/IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogBatchVM.cs b/IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogBatchVM.cs new file mode 100644 index 0000000..eedc021 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogBatchVM.cs @@ -0,0 +1,27 @@ +// WTM默认页面 Wtm buidin page +using System; +using WalkingTec.Mvvm.Core; + + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.ActionLogVMs +{ + public class ActionLogBatchVM : BaseBatchVM + { + public ActionLogBatchVM() + { + ListVM = new ActionLogListVM(); + LinkedVM = new ActionLog_BatchEdit(); + } + + } + + public class ActionLog_BatchEdit : BaseVM + { + + protected override void InitVM() + { + } + + } + +} diff --git a/IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogListVM.cs b/IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogListVM.cs new file mode 100644 index 0000000..566efdf --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogListVM.cs @@ -0,0 +1,100 @@ +// WTM默认页面 Wtm buidin page +using System.Collections.Generic; +using System.Linq; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.ActionLogVMs +{ + public class ActionLogListVM : BasePagedListVM + { + protected override List InitGridAction() + { + var actions = new List + { + this.MakeStandardAction("ActionLog", GridActionStandardTypesEnum.BatchDelete, "","_Admin", dialogWidth: 800), + this.MakeStandardAction("ActionLog", GridActionStandardTypesEnum.Details, "","_Admin", dialogWidth: 800).SetHideOnToolBar(true), + this.MakeStandardAction("ActionLog", GridActionStandardTypesEnum.ExportExcel, "","_Admin"), + }; + return actions; + } + + protected override IEnumerable> InitGridHeader() + { + var header = new List>(); + + header.Add(this.MakeGridHeader(x => x.LogType, 100).SetForeGroundFunc((entity)=> { + if(entity.LogType == ActionLogTypesEnum.Exception) + { + return "FF0000"; + } + else + { + return ""; + } + })); + header.Add(this.MakeGridHeader(x => x.ModuleName, 120)); + header.Add(this.MakeGridHeader(x => x.ActionName, 120)); + header.Add(this.MakeGridHeader(x => x.ITCode, 120)); + header.Add(this.MakeGridHeader(x => x.ActionUrl, 200)); + header.Add(this.MakeGridHeader(x => x.ActionTime, 200).SetSort(true).SetFormat((a, b) => a.ActionTime.ToString("yyyy-MM-dd HH:mm:ss"))); + header.Add(this.MakeGridHeader(x => x.Duration, 100).SetSort(true).SetForeGroundFunc((entity)=> { + if(entity.Duration <= 1) + { + return "008000"; + } + else if(entity.Duration <= 3) + { + return "FFC90E"; + } + else + { + return "FF0000"; + } + }).SetFormat((entity,v)=> { return ((double)v).ToString("f2"); })); + header.Add(this.MakeGridHeader(x => x.IP, 120)); + header.Add(this.MakeGridHeader(x => x.Remark).SetFormat((a,b)=> { + if (SearcherMode == ListVMSearchModeEnum.Search && a.Remark?.Length > 30) + { + a.Remark = a.Remark.Substring(0, 30) + "..."; + } + return a.Remark; + })); + header.Add(this.MakeGridHeaderAction(width: 120)); + + return header; + } + + public override IOrderedQueryable GetSearchQuery() + { + var query = DC.Set() + .CheckContain(Searcher.ITCode, x=>x.ITCode) + .CheckContain(Searcher.ActionUrl, x=>x.ActionUrl) + //.CheckEqual(Searcher.LogType, x=>x.LogType) + .CheckContain(Searcher.LogType, x=>x.LogType) + .CheckContain(Searcher.IP, x=>x.IP) + .CheckBetween(Searcher.ActionTime?.GetStartTime(), Searcher.ActionTime?.GetEndTime(), x=>x.ActionTime, includeMax:false) + .CheckWhere(Searcher.Duration,x=>x.Duration >= Searcher.Duration) + .Select(x=>new ActionLog() + { + ID = x.ID, + ModuleName = x.ModuleName, + ITCode = x.ITCode, + ActionTime = x.ActionTime, + ActionName = x.ActionName, + ActionUrl = x.ActionUrl, + Duration = x.Duration, + IP = x.IP, + LogType = x.LogType, + Remark = x.Remark, + CreateBy = x.CreateBy, + CreateTime = x.CreateTime, + UpdateBy = x.UpdateBy, + UpdateTime = x.UpdateTime + }) + .OrderByDescending(x=>x.ActionTime); + + return query; + } + } +} diff --git a/IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogSearcher.cs b/IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogSearcher.cs new file mode 100644 index 0000000..c762fea --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogSearcher.cs @@ -0,0 +1,32 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.ActionLogVMs +{ + public class ActionLogSearcher : BaseSearcher + { + + [Display(Name = "_Admin.Account")] + public string ITCode { get; set; } + + [Display(Name = "Url")] + public string ActionUrl { get; set; } + + [Display(Name = "_Admin.LogType")] + public List LogType { get; set; } + + [Display(Name = "_Admin.ActionTime")] + public DateRange ActionTime { get; set; } + + + [Display(Name = "IP")] + public string IP { get; set; } + + [Display(Name = "_Admin.Duration")] + public double? Duration { get; set; } + + } +} diff --git a/IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogVM.cs b/IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogVM.cs new file mode 100644 index 0000000..7a2e70c --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/ActionLogVMs/ActionLogVM.cs @@ -0,0 +1,9 @@ +// WTM默认页面 Wtm buidin page +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.ActionLogVMs +{ + public class ActionLogVM : BaseCRUDVM + { + } +} diff --git a/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeBatchVM.cs b/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeBatchVM.cs new file mode 100644 index 0000000..19b1617 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeBatchVM.cs @@ -0,0 +1,23 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.DataPrivilegeVMs +{ + public class DataPrivilegeBatchVM : BaseBatchVM + { + public DataPrivilegeBatchVM() + { + ListVM = new DataPrivilegeListVM(); + LinkedVM = new DataPrivilege_BatchEdit(); + } + + } + + public class DataPrivilege_BatchEdit : BaseVM + { + + } + +} diff --git a/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeListVM.cs b/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeListVM.cs new file mode 100644 index 0000000..2c18ad4 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeListVM.cs @@ -0,0 +1,142 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.DataPrivilegeVMs +{ + public class DataPrivilegeListVM : BasePagedListVM + { + + protected override List InitGridAction() + { + string tp = ""; + if (Searcher.DpType == DpTypeEnum.User) + { + tp = "User"; + } + if (Searcher.DpType == DpTypeEnum.UserGroup) + { + tp = "UserGroup"; + } + + return new List + { + this.MakeStandardAction("DataPrivilege", GridActionStandardTypesEnum.Create, "","_Admin", dialogWidth: 800).SetQueryString($"Type={tp}"), + this.MakeStandardAction("DataPrivilege", GridActionStandardTypesEnum.ExportExcel, "","_Admin"), + }; + } + + protected override IEnumerable> InitGridHeader() + { + return new List>{ + this.MakeGridHeader(x => x.Name, 200), + this.MakeGridHeader(x => x.TableName).SetFormat((entity,val)=>GetPrivilegeName(entity)), + this.MakeGridHeader(x => x.RelateIDs), + this.MakeGridHeader(x=>x.Edit,200).SetFormat((entity,val)=>GetOperation(entity)).SetHeader(Localizer["Sys.Operation"]).SetDisableExport(), + this.MakeGridHeader(x => x.DpType).SetHide(true), + this.MakeGridHeader(x => x.TargetId).SetHide(true) + }; + } + + + public string GetPrivilegeName(DataPrivilege_ListView item) + { + var temp = Wtm.DataPrivilegeSettings.Where(x => x.ModelName == item.TableName).SingleOrDefault(); + if (temp == null) + { + return ""; + } + else + { + return temp.PrivillegeName; + } + } + + public List GetOperation(DataPrivilege_ListView item) + { + string editurl = ""; + string delurl = ""; + if(Searcher.DpType == DpTypeEnum.User) + { + editurl = "/_Admin/DataPrivilege/Edit?ModelName=" + item.TableName + "&Type=User&Id=" + item.TargetId; + delurl = "/_Admin/DataPrivilege/Delete?ModelName=" + item.TableName + "&Type=User&Id=" + item.TargetId; + } + else + { + editurl = "/_Admin/DataPrivilege/Edit?ModelName=" + item.TableName + "&Type=UserGroup&Id=" + item.TargetId; + delurl = "/_Admin/DataPrivilege/Delete?ModelName=" + item.TableName + "&Type=UserGroup&Id=" + item.TargetId; + } + return new List + { + ColumnFormatInfo.MakeDialogButton(ButtonTypesEnum.Button,editurl,Localizer["Sys.Edit"],800,null,Localizer["Sys.Edit"]), + ColumnFormatInfo.MakeDialogButton(ButtonTypesEnum.Button,delurl,Localizer["Sys.Delete"],null,null,showDialog:false) + }; + } + + /// + /// 查询结果 + /// + public override IOrderedQueryable GetSearchQuery() + { + IOrderedQueryable query = null; + if (Searcher.DpType == DpTypeEnum.User) + { + query = DC.Set() + .Join(DC.Set(), ok => ok.UserCode, ik => ik.ITCode, (dp, user) => new { dp = dp, user = user }) + .CheckContain(Searcher.Name, x => x.user.Name) + .CheckContain(Searcher.TableName, x => x.dp.TableName) + .GroupBy(x => new { x.user.Name, x.user.ITCode, x.dp.TableName }, x => x.dp.RelateId) + .Select(x => new DataPrivilege_ListView + { + TargetId = x.Key.ITCode, + Name = x.Key.Name, + TableName = x.Key.TableName, + RelateIDs = x.Count(), + DpType = (int)Searcher.DpType + }) + .OrderByDescending(x => x.Name).OrderByDescending(x => x.TableName); + } + else + { + query = DC.Set() + .Join(DC.Set(), ok => ok.GroupCode, ik => ik.GroupCode, (dp, group) => new { dp = dp, group = group }) + .CheckContain(Searcher.Name, x => x.group.GroupName) + .CheckContain(Searcher.TableName, x => x.dp.TableName) + .GroupBy(x => new { x.group.GroupName, x.group.GroupCode, x.dp.TableName }, x => x.dp.RelateId) + .Select(x => new DataPrivilege_ListView + { + TargetId = x.Key.GroupCode, + Name = x.Key.GroupName, + TableName = x.Key.TableName, + RelateIDs = x.Count(), + DpType = (int)Searcher.DpType + }) + .OrderByDescending(x => x.Name).OrderByDescending(x => x.TableName); + + } + return query; + } + } + + public class DataPrivilege_ListView : BasePoco + { + [Display(Name = "_Admin.DpTargetName")] + public string Name { get; set; } + public string TargetId { get; set; } + [Display(Name = "_Admin.DataPrivilegeName")] + public string TableName { get; set; } + [Display(Name = "_Admin.DataPrivilegeCount")] + public int RelateIDs { get; set; } + public int DpType { get; set; } + public string DomainName { get; set; } + + public Guid? DomainID { get; set; } + + public string Edit { get; set; } + } + +} diff --git a/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeSearcher.cs b/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeSearcher.cs new file mode 100644 index 0000000..c5968f6 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeSearcher.cs @@ -0,0 +1,34 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.DataPrivilegeVMs +{ + public enum DpTypeEnum + { + [Display(Name = "_Admin.GroupDp")] + UserGroup, + [Display(Name = "_Admin.UserDp")] + User + } + + public class DataPrivilegeSearcher : BaseSearcher + { + [Display(Name = "_Admin.Account")] + public string Name { get; set; } + [Display(Name = "_Admin.Privileges")] + public string TableName { get; set; } + public List TableNames { get; set; } + + [Display(Name = "_Admin.DpType")] + public DpTypeEnum DpType { get; set; } + public Guid? DomainID { get; set; } + public List AllDomains { get; set; } + protected override void InitVM() + { + TableNames = new List(); + } + } +} diff --git a/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeVM.cs b/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeVM.cs new file mode 100644 index 0000000..39c173d --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DataPrivilegeVM.cs @@ -0,0 +1,289 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs; +using WalkingTec.Mvvm.Core.Extensions; +using System.Threading.Tasks; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.DataPrivilegeVMs +{ + public class DataPrivilegeVM : BaseCRUDVM + { + public List TableNames { get; set; } + public List AllItems { get; set; } + public List AllGroups { get; set; } + [Display(Name = "_Admin.AllowedDp")] + public List SelectedItemsID { get; set; } + + [Display(Name = "_Admin.DpType")] + public DpTypeEnum DpType { get; set; } + + public DpListVM DpList { get; set; } + [Display(Name = "_Admin.AllDp")] + public bool? IsAll { get; set; } + public DataPrivilegeVM() + { + DpList = new DpListVM(); + IsAll = false; + } + + protected override void InitVM() + { + TableNames = new List(); + if (ControllerName.Contains("/api") == false) + { + AllGroups = DC.Set().GetSelectListItems(Wtm, x => x.GroupName, x=>x.GroupCode); + TableNames = Wtm.DataPrivilegeSettings.ToListItems(x => x.PrivillegeName, x => x.ModelName); + } + SelectedItemsID = new List(); + List rids = null; + if (DpType == DpTypeEnum.User) + { + rids = DC.Set().Where(x => x.TableName == Entity.TableName && x.UserCode == Entity.UserCode).Select(x => x.RelateId).ToList(); + } + else + { + rids = DC.Set().Where(x => x.TableName == Entity.TableName && x.GroupCode == Entity.GroupCode).Select(x => x.RelateId).ToList(); + } + if (rids.Contains(null)) + { + IsAll = true; + } + else + { + SelectedItemsID.AddRange(rids.Select(x => x)); + } + + } + + protected override void ReInitVM() + { + TableNames = new List(); + AllItems = new List(); + TableNames = Wtm.DataPrivilegeSettings.ToListItems(x => x.PrivillegeName, x => x.ModelName); + if (ControllerName.Contains("/api") == false) + { + AllGroups = DC.Set().GetSelectListItems(Wtm, x => x.GroupName, x => x.GroupCode); + } + } + + public override void Validate() + { + if (DpType == DpTypeEnum.User) + { + if (string.IsNullOrEmpty(Entity.UserCode)) + { + MSD.AddModelError("Entity.UserCode", Localizer["Validate.{0}required", Localizer["_Admin.Account"]]); + } + else + { + var user = DC.Set().Where(x => x.ITCode == Entity.UserCode).FirstOrDefault(); + if (user == null) + { + MSD.AddModelError("Entity.UserCode", Localizer["Sys.CannotFindUser", Entity.UserCode]); + } + } + } + else + { + if(string.IsNullOrEmpty(Entity.GroupCode)) + { + MSD.AddModelError("Entity.GroupId", Localizer["Validate.{0}required", Localizer["_Admin.Group"]]); + } + } + + base.Validate(); + } + + public override async Task DoAddAsync() + { + if (SelectedItemsID == null && IsAll == false) + { + return; + } + List oldIDs = null; + + if (DpType == DpTypeEnum.User) + { + oldIDs = DC.Set().Where(x => x.UserCode == Entity.UserCode && x.TableName == this.Entity.TableName).Select(x => x.ID).ToList(); + } + else + { + oldIDs = DC.Set().Where(x => x.GroupCode == Entity.GroupCode && x.TableName == this.Entity.TableName).Select(x => x.ID).ToList(); + } + foreach (var oldid in oldIDs) + { + DataPrivilege dp = new DataPrivilege { ID = oldid }; + DC.Set().Attach(dp); + DC.DeleteEntity(dp); + } + if (DpType == DpTypeEnum.User) + { + if (IsAll == true) + { + DataPrivilege dp = new DataPrivilege(); + dp.RelateId = null; + dp.UserCode = Entity.UserCode; + dp.TableName = this.Entity.TableName; + DC.Set().Add(dp); + + } + else + { + foreach (var id in SelectedItemsID) + { + DataPrivilege dp = new DataPrivilege(); + dp.RelateId = id; + dp.UserCode = Entity.UserCode; + dp.TableName = this.Entity.TableName; + DC.Set().Add(dp); + } + } + } + else + { + if (IsAll == true) + { + DataPrivilege dp = new DataPrivilege(); + dp.RelateId = null; + dp.GroupCode = Entity.GroupCode; + dp.TableName = this.Entity.TableName; + DC.Set().Add(dp); + } + else + { + foreach (var id in SelectedItemsID) + { + DataPrivilege dp = new DataPrivilege(); + dp.RelateId = id; + dp.GroupCode = Entity.GroupCode; + dp.TableName = this.Entity.TableName; + DC.Set().Add(dp); + } + } + } + await DC.SaveChangesAsync(); + if (DpType == DpTypeEnum.User) + { + await Wtm.RemoveUserCache(Entity.UserCode); + } + else + { + var userids = DC.Set().Where(x => x.GroupCode == Entity.GroupCode).Select(x => x.UserCode).ToArray(); + await Wtm.RemoveUserCache(userids); + } + + } + + public override async Task DoEditAsync(bool updateAllFields = false) + { + List oldIDs = null; + + if (DpType == DpTypeEnum.User) + { + oldIDs = DC.Set().Where(x => x.UserCode == Entity.UserCode && x.TableName == this.Entity.TableName).Select(x => x.ID).ToList(); + } + else + { + oldIDs = DC.Set().Where(x => x.GroupCode == Entity.GroupCode && x.TableName == this.Entity.TableName).Select(x => x.ID).ToList(); + } + foreach (var oldid in oldIDs) + { + DataPrivilege dp = new DataPrivilege { ID = oldid }; + DC.Set().Attach(dp); + DC.DeleteEntity(dp); + } + if(IsAll == true) + { + if (DpType == DpTypeEnum.User) + { + DataPrivilege dp = new DataPrivilege(); + dp.RelateId = null; + dp.UserCode = Entity.UserCode; + dp.TableName = this.Entity.TableName; + DC.Set().Add(dp); + + } + else + { + DataPrivilege dp = new DataPrivilege(); + dp.RelateId = null; + dp.GroupCode = Entity.GroupCode; + dp.TableName = this.Entity.TableName; + DC.Set().Add(dp); + } + } + else { + if (SelectedItemsID != null) + { + if (DpType == DpTypeEnum.User) + { + foreach (var id in SelectedItemsID) + { + DataPrivilege dp = new DataPrivilege(); + dp.RelateId = id; + dp.UserCode = Entity.UserCode; + dp.TableName = this.Entity.TableName; + DC.Set().Add(dp); + } + + } + else + { + foreach (var id in SelectedItemsID) + { + DataPrivilege dp = new DataPrivilege(); + dp.RelateId = id; + dp.GroupCode = Entity.GroupCode; + dp.TableName = this.Entity.TableName; + DC.Set().Add(dp); + } + } + } + } + await DC.SaveChangesAsync(); + if (DpType == DpTypeEnum.User) + { + await Wtm.RemoveUserCache(Entity.UserCode); + } + else + { + var userids = DC.Set().Where(x => x.GroupCode == Entity.GroupCode).Select(x => x.UserCode).ToArray(); + await Wtm.RemoveUserCache(userids); + } + } + + public override async Task DoDeleteAsync() + { + List oldIDs = null; + + if (DpType == DpTypeEnum.User) + { + oldIDs = DC.Set().Where(x => x.UserCode == Entity.UserCode && x.TableName == this.Entity.TableName).Select(x => x.ID).ToList(); + } + else + { + oldIDs = DC.Set().Where(x => x.GroupCode == Entity.GroupCode && x.TableName == this.Entity.TableName).Select(x => x.ID).ToList(); + } + foreach (var oldid in oldIDs) + { + DataPrivilege dp = new DataPrivilege { ID = oldid }; + DC.Set().Attach(dp); + DC.DeleteEntity(dp); + } + await DC.SaveChangesAsync(); + if (DpType == DpTypeEnum.User) + { + await Wtm.RemoveUserCache(Entity.UserCode.ToString()); + } + else + { + var userids = DC.Set().Where(x => x.GroupCode == Entity.GroupCode).Select(x => x.UserCode).ToArray(); + await Wtm.RemoveUserCache(userids); + } + } + } +} diff --git a/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DpListVM.cs b/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DpListVM.cs new file mode 100644 index 0000000..aae6714 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/DataPrivilegeVMs/DpListVM.cs @@ -0,0 +1,68 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.DataPrivilegeVMs +{ + public class DpListVM : BasePagedListVM + { + public DpListVM() + { + NeedPage = false; + } + + protected override IEnumerable> InitGridHeader() + { + return new List>{ + this.MakeGridHeader(x => x.Name), + }; + } + + public override IOrderedQueryable GetSearchQuery() + { + + var dps = Wtm.DataPrivilegeSettings.Where(x => x.ModelName == Searcher.TableName).SingleOrDefault(); + if (dps != null) + { + return dps.GetItemList(Wtm, Searcher.Filter).Select(x => new DpView { ID = x.Value.ToString(), Name = x.Text }).AsQueryable().OrderBy(x => x.Name); + } + else + { + return new List().AsQueryable().OrderBy(x => x.Name); + } + } + + public override IOrderedQueryable GetBatchQuery() + { + var dps = Wtm.DataPrivilegeSettings.Where(x => x.ModelName == Searcher.TableName).SingleOrDefault(); + if (dps != null) + { + return dps.GetItemList(Wtm, null,Ids).Select(x => new DpView { ID = x.Value.ToString(), Name = x.Text }).AsQueryable().OrderBy(x => x.Name); + } + else + { + return new List().AsQueryable().OrderBy(x => x.Name); + } + } + } + + public class DpView : TopBasePoco + { + public new string ID { get; set; } + + [Display(Name = "_Admin.DataPrivilegeName")] + public string Name { get; set; } + } + + public class DpSearcher : BaseSearcher + { + public string TableName { get; set; } + [Display(Name = "_Admin.DataPrivilegeName")] + public string Filter { get; set; } + } + +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupBatchVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupBatchVM.cs new file mode 100644 index 0000000..c70f5f3 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupBatchVM.cs @@ -0,0 +1,20 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs +{ + public class FrameworkGroupBatchVM : BaseBatchVM + { + public FrameworkGroupBatchVM() + { + ListVM = new FrameworkGroupListVM(); + } + + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupImportVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupImportVM.cs new file mode 100644 index 0000000..067ec1e --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupImportVM.cs @@ -0,0 +1,17 @@ +// WTM默认页面 Wtm buidin page +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs +{ + public class FrameworkGroupTemplateVM : BaseTemplateVM + { + public ExcelPropety r1 = ExcelPropety.CreateProperty(x => x.GroupCode); + public ExcelPropety r2 = ExcelPropety.CreateProperty(x => x.GroupName); + public ExcelPropety r3 = ExcelPropety.CreateProperty(x => x.GroupRemark); + } + + public class FrameworkGroupImportVM : BaseImportVM + { + + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupListVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupListVM.cs new file mode 100644 index 0000000..2adc7cf --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupListVM.cs @@ -0,0 +1,45 @@ +// WTM默认页面 Wtm buidin page +using System.Collections.Generic; +using System.Linq; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs +{ + public class FrameworkGroupListVM : BasePagedListVM + { + protected override List InitGridAction() + { + return new List + { + this.MakeStandardAction("FrameworkGroup", GridActionStandardTypesEnum.Create, "","_Admin", dialogWidth: 800), + this.MakeStandardAction("FrameworkGroup", GridActionStandardTypesEnum.Edit, "","_Admin", dialogWidth: 800), + this.MakeStandardAction("FrameworkGroup", GridActionStandardTypesEnum.Delete, "", "_Admin",dialogWidth: 800), + this.MakeStandardAction("FrameworkGroup", GridActionStandardTypesEnum.BatchDelete, "","_Admin", dialogWidth: 800), + this.MakeStandardAction("FrameworkGroup", GridActionStandardTypesEnum.Import, "","_Admin", dialogWidth: 800), + this.MakeAction("FrameworkGroup","DataFunction",Localizer["_Admin.DataPrivilege"],Localizer["_Admin.DataPrivilege"], GridActionParameterTypesEnum.SingleId,"_Admin",800,null,null,x=>x.GroupCode).SetShowInRow(), + this.MakeStandardAction("FrameworkGroup", GridActionStandardTypesEnum.ExportExcel, "","_Admin"), + }; + } + + protected override IEnumerable> InitGridHeader() + { + return new List>{ + this.MakeGridHeader(x => x.GroupCode, 120), + this.MakeGridHeader(x => x.GroupName, 120), + this.MakeGridHeader(x => x.GroupRemark), + this.MakeGridHeaderAction(width: 300) + }; + } + + public override IOrderedQueryable GetSearchQuery() + { + var query = DC.Set() + .CheckContain(Searcher.GroupCode, x=>x.GroupCode) + .CheckContain(Searcher.GroupName, x=>x.GroupName) + .OrderBy(x => x.GroupCode); + return query; + } + + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupMDVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupMDVM.cs new file mode 100644 index 0000000..d792eb8 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupMDVM.cs @@ -0,0 +1,100 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.DataPrivilegeVMs; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs +{ + public class FrameworkGroupMDVM : BaseVM + { + + public string GroupCode { get; set; } + public List DpLists { get; set; } + + public FrameworkGroupMDVM() + { + } + + protected override void InitVM() + { + DpLists = new List(); + foreach (var item in Wtm.DataPrivilegeSettings) + { + DpListVM list = new DpListVM(); + list.Searcher = new DpSearcher(); + list.Searcher.TableName = item.ModelName; + DpLists.Add(new GroupDp { DpName = item.PrivillegeName, List = list, SelectedIds = new List() }); + } + var alldp = DC.Set().Where(x => x.GroupCode == GroupCode).ToList(); + foreach (var item in DpLists) + { + var select = alldp.Where(x => x.TableName == item.List.Searcher.TableName).Select(x => x.RelateId).ToList(); + if(select.Count == 0) + { + item.IsAll = null; + } + else if (select.Contains(null)) + { + item.IsAll = true; + } + else + { + item.IsAll = false; + item.SelectedIds = select; + } + } + } + + public bool DoChange() + { + List oldIDs = DC.Set().Where(x => x.GroupCode == GroupCode).Select(x => x.ID).ToList(); + + foreach (var oldid in oldIDs) + { + DataPrivilege dp = new DataPrivilege { ID = oldid }; + DC.Set().Attach(dp); + DC.DeleteEntity(dp); + } + foreach (var item in DpLists) + { + if(item.IsAll == true) + { + DataPrivilege dp = new DataPrivilege(); + dp.RelateId = null; + dp.GroupCode = GroupCode; + dp.TableName = item.List.Searcher.TableName; + DC.Set().Add(dp); + } + if (item.IsAll == false && item.SelectedIds != null) + { + foreach (var id in item.SelectedIds) + { + DataPrivilege dp = new DataPrivilege(); + dp.RelateId = id; + dp.GroupCode = GroupCode; + dp.TableName = item.List.Searcher.TableName; + DC.Set().Add(dp); + } + + } + } + DC.SaveChanges(); + return true; + } + + } + + public class GroupDp + { + public DpListVM List { get; set; } + public string DpName { get; set; } + + public List SelectedIds { get; set; } + + public bool? IsAll { get; set; } + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupSearcher.cs b/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupSearcher.cs new file mode 100644 index 0000000..19f7b68 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupSearcher.cs @@ -0,0 +1,19 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs +{ + public class FrameworkGroupSearcher : BaseSearcher + { + [Display(Name = "_Admin.GroupCode")] + public string GroupCode { get; set; } + + [Display(Name = "_Admin.GroupName")] + public string GroupName { get; set; } + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupVM.cs new file mode 100644 index 0000000..eb70752 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkGroupVMs/FrameworkGroupVM.cs @@ -0,0 +1,51 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs +{ + public class FrameworkGroupVM : BaseCRUDVM + { + public override DuplicatedInfo SetDuplicatedCheck() + { + var rv = CreateFieldsInfo(SimpleField(x => x.GroupName)); + rv.AddGroup(SimpleField(x => x.GroupCode)); + return rv; + } + + public override void DoEdit(bool updateAllFields = false) + { + if (FC.ContainsKey("Entity.GroupCode")) + { + FC.Remove("Entity.GroupCode"); + } + + base.DoEdit(updateAllFields); + } + + public override async Task DoDeleteAsync() + { + using (var tran = DC.BeginTransaction()) + { + try + { + await base.DoDeleteAsync(); + var ur = DC.Set().Where(x => x.GroupCode == Entity.GroupCode); + DC.Set().RemoveRange(ur); + DC.SaveChanges(); + tran.Commit(); + await Wtm.RemoveUserCache(ur.Select(x => x.UserCode).ToArray()); + } + catch + { + tran.Rollback(); + } + } + } + + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkActionListVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkActionListVM.cs new file mode 100644 index 0000000..fe14b0a --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkActionListVM.cs @@ -0,0 +1,111 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs +{ + public class FrameworkActionListVM : BasePagedListVM + { + + public FrameworkActionListVM() + { + NeedPage = false; + } + + protected override List InitGridAction() + { + var actions = new List + { + }; + return actions; + } + + protected override IEnumerable> InitGridHeader() + { + var header = new List>(); + + header.Add(this.MakeGridHeader(x => x.ModuleName, 150)); + header.Add(this.MakeGridHeader(x => x.ActionName, 150)); + header.Add(this.MakeGridHeader(x => x.ClassName, 150)); + header.Add(this.MakeGridHeader(x => x.MethodName, 150)); + + return header; + } + + /// + /// 查询结果 + /// + public override IOrderedQueryable GetSearchQuery() + { + var newdc = DC as FrameworkContext; + List actions = new List(); + var urls = newdc.BaseFrameworkMenus.Where(y => y.IsInside == true && y.FolderOnly == false).Select(y => y.Url).Distinct().ToList(); + if (ControllerName.Contains("/api") == false) + { + actions = Wtm.GlobaInfo.AllModule.SelectMany(x=>x.Actions) + .Where(x => urls.Contains(x.Url) == false) + .Select(x => new FrameworkAction_ListView + { + ID = x.ID, + ModuleID = x.ModuleId, + ModuleName = x.Module.ModuleName, + ActionName = x.ActionName, + ClassName = x.Module.ClassName, + MethodName = x.MethodName, + AreaName = x.Module.Area?.AreaName + }).ToList(); + } + else + { + actions = Wtm.GlobaInfo.AllModule.SelectMany(x => x.Actions) + .Where(x => x.Module.IsApi == true && urls.Contains(x.Url) == false) + .Select(x => new FrameworkAction_ListView + { + ID = x.ID, + ModuleID = x.ModuleId, + ModuleName = x.Module.ModuleName, + ActionName = x.ActionName, + ClassName = x.Module.ClassName, + MethodName = x.MethodName, + AreaName = x.Module.Area?.AreaName + }).ToList(); + + } + + var modules = Wtm.GlobaInfo.AllModule; + List toremove = new List(); + foreach (var item in actions) + { + var m = modules.Where(x => x.ClassName == item.ClassName && x.Area?.AreaName == item.AreaName).FirstOrDefault(); + var a = m?.Actions.Where(x => x.MethodName == item.MethodName).FirstOrDefault(); + if(m?.IgnorePrivillege == true || a?.IgnorePrivillege == true) + { + toremove.Add(item); + } + } + toremove.ForEach(x => actions.Remove(x)); + return actions.AsQueryable().OrderBy(x=>x.AreaName).ThenBy(x=>x.ModuleName).ThenBy(x=>x.MethodName); + } + + } + + public class FrameworkAction_ListView : BasePoco + { + public Guid? ModuleID { get; set; } + + [Display(Name = "Codegen.ModuleName")] + public string ModuleName { get; set; } + [Display(Name = "_Admin.ActionName")] + public string ActionName { get; set; } + [Display(Name = "_Admin.ClassName")] + public string ClassName { get; set; } + [Display(Name = "_Admin.MethodName")] + public string MethodName { get; set; } + + public string AreaName { get; set; } + + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuBatchVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuBatchVM.cs new file mode 100644 index 0000000..f8c070e --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuBatchVM.cs @@ -0,0 +1,48 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs +{ + public class FrameworkMenuBatchVM : BaseBatchVM + { + public FrameworkMenuBatchVM() + { + } + protected override void InitVM() + { + } + + public override bool DoBatchDelete() + { + if (Ids != null) + { + foreach (var item in Ids) + { + FrameworkMenu f = new FrameworkMenu { ID = Guid.Parse(item) }; + DC.CascadeDelete(f); + } + } + DC.SaveChanges(); + return true; + } + } + + + public class FrameworkMenu_BatchEdit : BaseVM + { + public List IDs { get; set; } + [Display(Name = "_Admin.ShowOnMenu")] + public bool ShowOnMenu { get; set; } + + [Display(Name = "_Admin.ParentFolder")] + public Guid? ParentID { get; set; } + public List AllParents { get; set; } + [Display(Name = "_Admin.Icon")] + public string Icon { get; set; } + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuListVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuListVM.cs new file mode 100644 index 0000000..fb43bed --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuListVM.cs @@ -0,0 +1,243 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs +{ + public class FrameworkMenuListVM : BasePagedListVM + { + public FrameworkMenuListVM() + { + this.NeedPage = false; + } + + protected override IEnumerable> InitGridHeader() + { + List> rv = new List>(); + switch (SearcherMode) + { + case ListVMSearchModeEnum.Batch: + rv.AddRange(new GridColumn[] { + this.MakeGridHeader(x => x.PageName), + this.MakeGridHeader(x => x.ModuleName, 200), + this.MakeGridHeader(x => x.ActionName, 150), + }); + break; + case ListVMSearchModeEnum.Custom1: + rv.AddRange(new GridColumn[] { + this.MakeGridHeader(x => x.PageName,300), + }); + break; + case ListVMSearchModeEnum.Custom2: + rv.AddRange(new GridColumn[] { + this.MakeGridHeader(x => x.PageName,200), + this.MakeGridHeader(x => x.ParentID).SetHeader(Localizer["Sys.Operation"]).SetFormat((item, cell) => GenerateCheckBox(item)).SetAlign(GridColumnAlignEnum.Left), + }); + break; + default: + rv.AddRange(new GridColumn[] { + this.MakeGridHeader(x => x.PageName,300), + this.MakeGridHeader(x => x.ModuleName, 150), + this.MakeGridHeader(x => x.ShowOnMenu), + this.MakeGridHeader(x => x.FolderOnly), + this.MakeGridHeader(x => x.IsPublic), + this.MakeGridHeader(x => x.DisplayOrder), + this.MakeGridHeader(x => x.Icon, 100).SetFormat(PhotoIdFormat), + this.MakeGridHeaderAction(width: 270) + }); + break; + } + return rv; + } + + private object GenerateCheckBox(FrameworkMenu_ListView item) + { + string rv = ""; + if (item.FolderOnly == false) + { + if (item.IsInside == true) + { + + var others = item.Children?.ToList(); + rv += UIService.MakeCheckBox(item.Allowed, Localizer["Sys.MainPage"], "menu_" + item.ID, "1"); + if (others != null) + { + foreach (var c in others) + { + string actionname = ""; + if(c.ActionName != null) + { + actionname = Localizer[c.ActionName]; + } + rv += UIService.MakeCheckBox(c.Allowed, actionname, "menu_" + c.ID, "1"); + } + } + } + else + { + rv += UIService.MakeCheckBox(item.Allowed, Localizer["Sys.MainPage"], "menu_" + item.ID, "1"); + } + } + return rv; + } + + + protected override List InitGridAction() + { + if (SearcherMode == ListVMSearchModeEnum.Search) + { + return new List{ + this.MakeAction("FrameworkMenu", "Create",Localizer["Sys.Create"], Localizer["Sys.Create"], GridActionParameterTypesEnum.SingleIdWithNull,"_Admin").SetIconCls("layui-icon layui-icon-add-1"), + this.MakeStandardAction("FrameworkMenu", GridActionStandardTypesEnum.Edit, "", "_Admin"), + this.MakeStandardAction("FrameworkMenu", GridActionStandardTypesEnum.Delete, "", "_Admin"), + this.MakeStandardAction("FrameworkMenu", GridActionStandardTypesEnum.Details, "", "_Admin"), + this.MakeAction( "FrameworkMenu", "UnsetPages", Localizer["_Admin.CheckPage"], Localizer["_Admin.UnsetPages"],GridActionParameterTypesEnum.NoId, "_Admin").SetIconCls("layui-icon layui-icon-ok"), + this.MakeAction("FrameworkMenu", "RefreshMenu", Localizer["_Admin.RefreshMenu"], Localizer["_Admin.RefreshMenu"], GridActionParameterTypesEnum.NoId,"_Admin").SetShowDialog(false).SetIconCls("layui-icon layui-icon-refresh"), + }; + } + else + { + return new List(); + } + } + + + private string PhotoIdFormat(FrameworkMenu_ListView entity, object val) + { + if (entity.Icon != null) + { + return $""; + } + else + { + return ""; + } + } + + public override IOrderedQueryable GetSearchQuery() + { + + var data = DC.Set().ToList(); + var topdata = data.Where(x => x.ParentId == null).ToList().FlatTree(x => x.DisplayOrder).Where(x => x.IsInside == false || x.FolderOnly == true || x.Url.EndsWith("/Index") || x.MethodName == null).ToList(); + foreach (var item in topdata) + { + if (item.PageName?.StartsWith("MenuKey.") == true) + { + item.PageName =Localizer[item.PageName]; + } + if (item.ModuleName?.StartsWith("MenuKey.") == true) + { + item.ModuleName = Localizer[item.ModuleName]; + } + + } + topdata.ForEach((x) => { int l = x.GetLevel(); for (int i = 0; i < l; i++) { x.PageName = "    " + x.PageName; } }); + if (SearcherMode == ListVMSearchModeEnum.Custom2) + { + var pris = DC.Set() + .Where(x => x.RoleCode == DC.Set().CheckID(Searcher.RoleID,null).Select(x=>x.RoleCode).FirstOrDefault()).ToList(); + var allowed = pris.Where(x => x.Allowed == true).Select(x => x.MenuItemId).ToList(); + var denied = pris.Where(x => x.Allowed == false).Select(x => x.MenuItemId).ToList(); + int order = 0; + var data2 = topdata.Select(x => new FrameworkMenu_ListView + { + ID = x.ID, + PageName = x.PageName, + ModuleName = x.ModuleName, + ActionName = x.ActionName, + ShowOnMenu = x.ShowOnMenu, + FolderOnly = x.FolderOnly, + IsPublic = x.IsPublic, + DisplayOrder = x.DisplayOrder, + Children = x.Children?.Select(y => new FrameworkMenu_ListView + { + ID = y.ID, + Allowed = allowed.Contains(y.ID), + ActionName = y.ActionName + }), + ExtraOrder = order++, + ParentID = x.ParentId, + Parent = x.Parent, + IsInside = x.IsInside, + HasChild = (x.Children != null && x.Children.Count() > 0) ? true : false, + Allowed = allowed.Contains(x.ID), + Denied = denied.Contains(x.ID) + }).OrderBy(x => x.ExtraOrder); + return data2.AsQueryable() as IOrderedQueryable; + } + else + { + int order = 0; + var data2 = topdata.Select(x => new FrameworkMenu_ListView + { + ID = x.ID, + PageName = x.PageName, + ModuleName = x.ModuleName, + ActionName = x.ActionName, + ShowOnMenu = x.ShowOnMenu, + FolderOnly = x.FolderOnly, + IsPublic = x.IsPublic, + DisplayOrder = x.DisplayOrder, + ExtraOrder = order++, + + ParentID = x.ParentId, + Icon = x.Icon, + HasChild = (x.Children != null && x.Children.Count() > 0) ? true : false + }).OrderBy(x => x.ExtraOrder); + + return data2.AsQueryable() as IOrderedQueryable; + + } + } + + } + + public class FrameworkMenu_ListView : BasePoco + { + [Display(Name = "_Admin.PageName")] + public string PageName { get; set; } + + [Display(Name = "Codegen.ModuleName")] + public string ModuleName { get; set; } + + [Display(Name = "_Admin.ActionName")] + public string ActionName { get; set; } + + [Display(Name = "_Admin.ShowOnMenu")] + public bool? ShowOnMenu { get; set; } + + [Display(Name = "_Admin.FolderOnly")] + public bool? FolderOnly { get; set; } + + [Display(Name = "_Admin.IsPublic")] + public bool? IsPublic { get; set; } + + [Display(Name = "_Admin.DisplayOrder")] + public int? DisplayOrder { get; set; } + + [Display(Name = "_Admin.Icon")] + public string Icon { get; set; } + + public bool Allowed { get; set; } + + public bool Denied { get; set; } + + public bool HasChild { get; set; } + + public string IconClass { get; set; } + + public IEnumerable Children { get; set; } + + public FrameworkMenu Parent { get; set; } + + public Guid? ParentID { get; set; } + + public int ExtraOrder { get; set; } + + public bool? IsInside { get; set; } + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuListVM2.cs b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuListVM2.cs new file mode 100644 index 0000000..9dd87b1 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuListVM2.cs @@ -0,0 +1,73 @@ +// WTM默认页面 Wtm buidin page +using System.Collections.Generic; +using System.Linq; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs +{ + public class FrameworkMenuListVM2 : BasePagedListVM + { + public FrameworkMenuListVM2() + { + this.NeedPage = false; + } + + protected override IEnumerable> InitGridHeader() + { + List> rv = new List>(); + rv.AddRange(new GridColumn[] { + this.MakeGridHeader(x => x.PageName, 300), + this.MakeGridHeader(x => x.ModuleName, 150), + this.MakeGridHeader(x => x.ShowOnMenu, 60), + this.MakeGridHeader(x => x.FolderOnly, 60), + this.MakeGridHeader(x => x.IsPublic, 60), + this.MakeGridHeader(x => x.DisplayOrder, 60), + this.MakeGridHeader(x => x.Icon, 100), + this.MakeGridHeader(x => x.Children, 100), + this.MakeGridHeader(x=>x.ParentID).SetHide(), + this.MakeGridHeaderAction(width: 290) + }); + return rv; + } + + public override IOrderedQueryable GetSearchQuery() + { + var data = DC.Set().ToList(); + var topdata = data.Where(x => x.ParentId == null).ToList().FlatTree(x => x.DisplayOrder).Where(x => x.IsInside == false || x.FolderOnly == true || string.IsNullOrEmpty(x.MethodName)).ToList(); + foreach (var item in topdata) + { + if (item.PageName?.StartsWith("MenuKey.") == true) + { + item.PageName = Localizer[item.PageName]; + } + if (item.ModuleName?.StartsWith("MenuKey.") == true) + { + item.ModuleName = Localizer[item.ModuleName]; + } + } + int order = 0; + var data2 = topdata.Select(x => new FrameworkMenu_ListView + { + ID = x.ID, + PageName = x.PageName, + ModuleName = x.ModuleName, + ActionName = x.ActionName, + ShowOnMenu = x.ShowOnMenu, + FolderOnly = x.FolderOnly, + IsPublic = x.IsPublic, + DisplayOrder = x.DisplayOrder, + ExtraOrder = order++, + ParentID = x.ParentId, + Icon = x.Icon, + HasChild = (x.Children != null && x.Children.Count() > 0) ? true : false + }).OrderBy(x => x.ExtraOrder).ToList(); + + return data2.AsQueryable() as IOrderedQueryable; + } + + + + } + +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuSearcher.cs b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuSearcher.cs new file mode 100644 index 0000000..b95d38d --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuSearcher.cs @@ -0,0 +1,29 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs +{ + public enum FrameworkMenuMode { Normal = 0, RoleMode = 1, RoleSetMode = 2 } + public class FrameworkMenuSearcher : BaseSearcher + { + [Display(Name = "_Admin.PageName")] + public string PageName { get; set; } + [Display(Name = "Codegen.ModuleName")] + public string ModuleName { get; set; } + [Display(Name = "_Admin.ActionName")] + public string ActionName { get; set; } + [Display(Name = "_Admin.ShowOnMenu")] + public bool? ShowOnMenu { get; set; } + [Display(Name = "_Admin.IsPublic")] + public bool? IsPublic { get; set; } + [Display(Name = "_Admin.FolderOnly")] + public bool? FolderOnly { get; set; } + + public Guid? RoleID { get; set; } + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuVM.cs new file mode 100644 index 0000000..08c503a --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuVM.cs @@ -0,0 +1,380 @@ +// WTM默认页面 Wtm buidin page +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text.Json.Serialization; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Core.Support.Json; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs +{ + public class FrameworkMenuVM : BaseCRUDVM + { + [Display(Name = "_Admin.IconFont")] + public string IconFont { get; set; } + + [Display(Name = "_Admin.Icon")] + public string IconFontItem { get; set; } + + [JsonIgnore] + public List AllParents { get; set; } + [JsonIgnore] + public List AllModules { get; set; } + [JsonIgnore] + public List AllActions { get; set; } + + [Display(Name = "_Admin.Action")] + public List SelectedActionIDs { get; set; } + + [Display(Name = "_Admin.Module")] + public string SelectedModule { get; set; } + + [Display(Name = "_Admin.AllowedRole")] + public List SelectedRolesIds { get; set; } + + [JsonIgnore] + public FrameworkRoleListVM RoleListVM { get; set; } + + public List IconSelectItems { get; set; } + + public FrameworkMenuVM() + { + RoleListVM = new FrameworkRoleListVM(); + AllActions = new List(); + AllModules = new List(); + + SelectedRolesIds = new List(); + } + + protected override void InitVM() + { + if (!string.IsNullOrEmpty(Entity.Icon)) + { + var res = Entity.Icon.Split(' '); + IconFont = res[0]; + IconFontItem = res[1]; + } + + SelectedRolesIds.AddRange(DC.Set().Where(x => x.MenuItemId == Entity.ID && x.RoleCode != null && x.Allowed == true).Select(x => x.RoleCode).ToList()); + + var data = DC.Set().AsNoTracking().ToList(); + var topMenu = data.Where(x => x.ParentId == null).ToList().FlatTree(x => x.DisplayOrder); + var pids = Entity.GetAllChildrenIDs(DC); + AllParents = data.Where(x => x.ID != Entity.ID && !pids.Contains(x.ID) && x.FolderOnly == true).ToList().ToListItems(y => y.PageName, x => x.ID); + + foreach (var p in AllParents) + { + if (p.Text.StartsWith("MenuKey.")) + { + p.Text = Localizer[p.Text]; + } + } + + var modules = Wtm.GlobaInfo.AllModule; + var toRemove = new List(); + foreach (var item in modules) + { + if (item.IgnorePrivillege) + { + toRemove.Add(item); + } + } + var m = Utils.ResetModule(modules); + toRemove.ForEach(x => m.Remove(x)); + + AllModules = m.ToListItems(y => y.ModuleName, y => y.FullName); + if (string.IsNullOrEmpty(SelectedModule) == false || (string.IsNullOrEmpty(Entity.Url) == false && Entity.IsInside == true)) + { + if (string.IsNullOrEmpty(SelectedModule)) + { + SelectedModule = m.Where(x => (x.FullName == Entity.ClassName)).FirstOrDefault()?.FullName; + } + var mm = m.Where(x => x.FullName == SelectedModule).SelectMany(x => x.Actions).Where(x => x.MethodName != "Index" && x.IgnorePrivillege == false).ToList(); + AllActions = mm.ToListItems(y => y.ActionName, y => y.Url); + if (SelectedActionIDs == null) + { + SelectedActionIDs = DC.Set().Where(x => AllActions.Select(y => y.Value).Contains(x.Url) && x.IsInside == true && x.FolderOnly == false).Select(x => x.Url).ToList(); + } + } + } + + + + public override void Validate() + { + if (Entity.IsInside == true && Entity.FolderOnly == false) + { + if (string.IsNullOrEmpty(SelectedModule) == true) + { + MSD.AddModelError("SelectedModule", Localizer["Validate.{0}required", Localizer["_Admin.Module"]]); + } + var modules = Wtm.GlobaInfo.AllModule; + var test = DC.Set().Where(x => x.ClassName == this.SelectedModule && (x.MethodName == null || x.MethodName == "Index") && x.ID != Entity.ID).FirstOrDefault(); + if (test != null) + { + MSD.AddModelError(" error", Localizer["_Admin.ModuleHasSet"]); + } + + } + base.Validate(); + } + + public override void DoEdit(bool updateAllFields = false) + { + Entity.Icon = $"{IconFont} {IconFontItem}"; + FC.Add("Entity.Icon", " "); + if (Entity.IsInside == false) + { + if (Entity.Url != null && Entity.Url != "" && Entity.Url.StartsWith("/") == false) + { + if (Entity.Url.ToLower().StartsWith("http://") == false && Entity.Url.ToLower().StartsWith("https://") == false) + { + Entity.Url = "http://" + Entity.Url; + } + } + if(Entity.Url != null) + { + Entity.Url = Entity.Url.TrimEnd('/'); + } + } + else + { + if (string.IsNullOrEmpty(SelectedModule) == false && Entity.FolderOnly == false) + { + var modules = Wtm.GlobaInfo.AllModule; + var m = Utils.ResetModule(modules, false); + var actionPage = m.Where(x => x.FullName == this.SelectedModule) + .SelectMany(x => x.Actions).Where(x => x.MethodName == "Index" || x.ActionDes?.IsPage == true) + .FirstOrDefault(); + if (actionPage == null && Entity.ShowOnMenu == true) + { + MSD.AddModelError("Entity.ModuleId", Localizer["_Admin.NoIndexInModule"]); + return; + } + List otherActions = null; + + var mainModule = m.Where(x => x.FullName == this.SelectedModule).FirstOrDefault(); + if (actionPage == null) + { + actionPage = new SimpleAction + { + Module = mainModule, + Url = "/" + mainModule.ClassName, + ActionName = mainModule.ModuleName + }; + } + var mainAction = actionPage; + + Entity.Url = mainAction.Url; + Entity.ModuleName = mainModule.ModuleName; + Entity.ActionName = mainAction.ActionDes?.Description ?? mainAction.ActionName; + Entity.ClassName = mainModule.FullName; + Entity.MethodName = null; + + otherActions = m.Where(x => x.FullName == this.SelectedModule) + .SelectMany(x => x.Actions) + .Where(x => x.MethodName != mainAction.MethodName) + .ToList(); + var actionsInDB = DC.Set().AsNoTracking().Where(x => x.ParentId == Entity.ID).ToList(); + int order = 1; + Entity.Children = new List(); + foreach (var action in otherActions) + { + if (SelectedActionIDs != null && SelectedActionIDs.Contains(action.Url)) + { + Guid aid = action.ID; + var adb = actionsInDB.Where(x => x.Url.ToLower() == action.Url.ToLower()).FirstOrDefault(); + if (adb != null) + { + aid = adb.ID; + } + var menu = new FrameworkMenu(); + menu.FolderOnly = false; + menu.IsPublic = Entity.IsPublic; + menu.Parent = Entity; + menu.ShowOnMenu = false; + menu.DisplayOrder = order++; + menu.Privileges = new List(); + menu.IsInside = true; + menu.Domain = Entity.Domain; + menu.PageName = action.ActionDes?.Description ?? action.ActionName; + menu.ModuleName = mainModule.ModuleName; + menu.ActionName = action.ActionDes?.Description ?? action.ActionName; + menu.ClassName = mainModule.FullName; + menu.MethodName = action.MethodName; + menu.Url = action.Url; + menu.ID = aid; + Entity.Children.Add(menu); + } + } + } + else + { + //Entity.Children = new List(); + Entity.Url = null; + } + } + if (Entity.FolderOnly == false) + { + if (FC.ContainsKey("Entity.Children") == false) + { + FC.Add("Entity.Children", 0); + FC.Add("Entity.Children[0].IsPublic", 0); + FC.Add("Entity.Children[0].PageName", 0); + FC.Add("Entity.Children[0].ModuleName", 0); + FC.Add("Entity.Children[0].ActionName", 0); + FC.Add("Entity.Children[0].ClassName", 0); + FC.Add("Entity.Children[0].MethodName", 0); + FC.Add("Entity.Children[0].Url", 0); + } + } + FC.Add("Entity.ModuleName", 0); + base.DoEdit(); + List guids = new List(); + guids.Add(Entity.ID); + if (Entity.Children != null) + { + guids.AddRange(Entity.Children?.Select(x => x.ID).ToList()); + } + AddPrivilege(guids); + } + + public override void DoAdd() + { + Entity.Icon = $"{IconFont} {IconFontItem}"; + if (Entity.IsInside == false) + { + if (Entity.Url != null && Entity.Url != "" && Entity.Url.StartsWith("/") == false) + { + if (Entity.Url.ToLower().StartsWith("http://") == false && Entity.Url.ToLower().StartsWith("https://") == false) + { + Entity.Url = "http://" + Entity.Url; + } + } + if(Entity.Url != null) + { + Entity.Url = Entity.Url.TrimEnd('/'); + } + } + else + { + + if (string.IsNullOrEmpty(SelectedModule) == false && Entity.FolderOnly == false) + { + var modules = Wtm.GlobaInfo.AllModule; + + var m = Utils.ResetModule(modules, false); + var actionPage = m.Where(x => x.FullName == this.SelectedModule) + .SelectMany(x => x.Actions).Where(x => x.MethodName == "Index" || x.ActionDes?.IsPage == true) + .FirstOrDefault(); + if (actionPage == null && Entity.ShowOnMenu == true) + { + MSD.AddModelError("Entity.ModuleId", Localizer["_Admin.NoIndexInModule"]); + return; + } + List otherActions = null; + var mainModule = m.Where(x => x.FullName == this.SelectedModule).FirstOrDefault(); + if(actionPage == null) + { + actionPage = new SimpleAction + { + Module = mainModule, + Url = "/" + mainModule.ClassName, + ActionName = mainModule.ModuleName + }; + } + var mainAction = actionPage; + + Entity.Url = mainAction.Url; + Entity.ModuleName = mainModule.ModuleName; + Entity.ActionName = mainAction.ActionDes?.Description ?? mainAction.ActionName; + Entity.ClassName = mainModule.FullName; + Entity.MethodName = null; + Entity.Children = new List(); + + otherActions = m.Where(x => x.FullName == this.SelectedModule).SelectMany(x => x.Actions).Where(x => x.MethodName != mainAction.MethodName).ToList(); + int order = 1; + foreach (var action in otherActions) + { + if (SelectedActionIDs?.Contains(action.Url) == true) + { + FrameworkMenu menu = new FrameworkMenu(); + menu.FolderOnly = false; + menu.IsPublic = Entity.IsPublic; + menu.Parent = Entity; + menu.ShowOnMenu = false; + menu.DisplayOrder = order++; + menu.Privileges = new List(); + menu.IsInside = true; + menu.Domain = Entity.Domain; + menu.PageName = action.ActionDes?.Description ?? action.ActionName; + menu.ModuleName = mainModule.ModuleName; + menu.ActionName = action.ActionDes?.Description ?? action.ActionName; + menu.ClassName = mainModule.FullName; + menu.MethodName = action.MethodName; + menu.Url = action.Url; + Entity.Children.Add(menu); + } + } + } + + else + { + Entity.Children = null; + Entity.Url = null; + } + + } + base.DoAdd(); + List guids = new List(); + guids.Add(Entity.ID); + if (Entity.Children != null) + { + guids.AddRange(Entity.Children?.Select(x => x.ID).ToList()); + } + AddPrivilege(guids); + } + + public void AddPrivilege(List menuids) + { + var admin = DC.Set().Where(x => x.RoleCode == "001").SingleOrDefault(); + if (admin != null && SelectedRolesIds.Contains(admin.RoleCode) == false) + { + SelectedRolesIds.Add(admin.RoleCode); + } + foreach (var menuid in menuids) + { + + if (SelectedRolesIds != null) + { + foreach (var code in SelectedRolesIds) + { + FunctionPrivilege fp = new FunctionPrivilege(); + fp.MenuItemId = menuid; + fp.RoleCode = code; + fp.Allowed = true; + DC.Set().Add(fp); + } + } + } + + DC.SaveChanges(); + } + + + public override void DoDelete() + { + try + { + DC.CascadeDelete(Entity); + DC.SaveChanges(); + } + catch + { } + } + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuVM2.cs b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuVM2.cs new file mode 100644 index 0000000..5cf84a3 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkMenuVMs/FrameworkMenuVM2.cs @@ -0,0 +1,300 @@ +// WTM默认页面 Wtm buidin page +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs +{ + public class FrameworkMenuVM2 : BaseCRUDVM + { + + [Display(Name = "_Admin.Action")] + public List SelectedActionIDs { get; set; } + + [Display(Name = "_Admin.Module")] + public string SelectedModule { get; set; } + + [Display(Name = "_Admin.AllowedRole")] + public List SelectedRolesCodes { get; set; } + + + public FrameworkMenuVM2() + { + SelectedRolesCodes = new List(); + } + + protected override void InitVM() + { + SelectedRolesCodes.AddRange(DC.Set().Where(x => x.MenuItemId == Entity.ID && x.RoleCode != null && x.Allowed == true).Select(x => x.RoleCode).ToList()); + + var data = DC.Set().ToList(); + var topMenu = data.Where(x => x.ParentId == null).ToList().FlatTree(x => x.DisplayOrder); + var modules = Wtm.GlobaInfo.AllModule; + + if (Entity.Url != null && Entity.IsInside == true) + { + SelectedModule = modules.Where(x => x.IsApi == true && (x.FullName == Entity.ClassName)).FirstOrDefault()?.FullName; + if (SelectedModule != null) + { + var urls = modules.Where(x => x.FullName == SelectedModule && x.IsApi == true).SelectMany(x => x.Actions).Where(x => x.IgnorePrivillege == false).Select(x => x.Url).ToList(); + SelectedActionIDs = DC.Set().Where(x => urls.Contains(x.Url) && x.IsInside == true && x.FolderOnly == false).Select(x => x.MethodName).ToList(); + } + else + { + SelectedModule = Entity.Url; + } + } + } + + public override void Validate() + { + if (Entity.IsInside == true && Entity.FolderOnly == false) + { + if (string.IsNullOrEmpty(SelectedModule) == true) + { + MSD.AddModelError("SelectedModule", Localizer["Validate.{0}required", Localizer["_Admin.Module"]]); + } + else + { + var modules = Wtm.GlobaInfo.AllModule; + var test = DC.Set().Where(x => x.Url != null && x.Url.ToLower() == this.Entity.Url.ToLower() && x.ID != Entity.ID).FirstOrDefault(); + if (test != null) + { + MSD.AddModelError(" error", Localizer["_Admin.ModuleHasSet"]); + } + } + } + base.Validate(); + } + + public override void DoEdit(bool updateAllFields = false) + { + if (Entity.IsInside == false) + { + if (Entity.Url != null && Entity.Url != "") + { + if (string.IsNullOrEmpty(Entity.Domain) == true) + { + if (Entity.Url.ToLower().StartsWith("http://") == false && Entity.Url.ToLower().StartsWith("https://") == false && Entity.Url.StartsWith("@") == false) + { + Entity.Url = "http://" + Entity.Url; + } + } + else + { + if (Entity.Url.StartsWith("/") == false) + { + Entity.Url = "/" + Entity.Url; + } + } + Entity.Url = Entity.Url.TrimEnd('/'); + } + } + else + { + + if (string.IsNullOrEmpty(SelectedModule) == false && Entity.FolderOnly == false) + { + var modules = Wtm.GlobaInfo.AllModule; + var ndc = DC.ReCreate(); + var actionsInDB = DC.Set().AsNoTracking().Where(x => x.ParentId == Entity.ID).ToList(); + var mo = modules.Where(x => x.FullName == this.SelectedModule && x.IsApi == true).FirstOrDefault(); + if (mo != null) + { + Entity.ModuleName = mo.ModuleName; + Entity.ClassName = mo.FullName; + Entity.MethodName = null; + + var otherActions = mo.Actions; + int order = 1; + Entity.Children = new List(); + foreach (var action in otherActions) + { + if (SelectedActionIDs != null && SelectedActionIDs.Contains(action.MethodName)) + { + Guid aid = action.ID; + var adb = actionsInDB.Where(x => x.Url.ToLower() == action.Url.ToLower()).FirstOrDefault(); + if (adb != null) + { + aid = adb.ID; + } + FrameworkMenu menu = new FrameworkMenu(); + menu.FolderOnly = false; + menu.IsPublic = Entity.IsPublic; + menu.Parent = Entity; + menu.ShowOnMenu = false; + menu.DisplayOrder = order++; + menu.Privileges = new List(); + menu.IsInside = true; + menu.Domain = Entity.Domain; + menu.PageName = action.ActionDes?.Description ?? action.ActionName; + menu.ModuleName = action.Module.ModuleName; + menu.ActionName = action.ActionDes?.Description ?? action.ActionName; + menu.Url = action.Url; + menu.ClassName = action.Module.FullName; + menu.MethodName = action.MethodName; + menu.ID = aid; + Entity.Children.Add(menu); + } + } + } + else + { + Entity.ModuleName = ""; + Entity.ClassName = ""; + Entity.MethodName = ""; + } + } + + else + { + Entity.Children = null; + Entity.Url = null; + } + } + if (FC.ContainsKey("Entity.Children") == false) + { + FC.Add("Entity.Children", 0); + FC.Add("Entity.Children[0].IsPublic", 0); + FC.Add("Entity.Children[0].PageName", 0); + FC.Add("Entity.Children[0].ModuleName", 0); + FC.Add("Entity.Children[0].ActionName", 0); + FC.Add("Entity.Children[0].ClassName", 0); + FC.Add("Entity.Children[0].MethodName", 0); + FC.Add("Entity.Children[0].Url", 0); + } + base.DoEdit(updateAllFields); + List guids = new List(); + guids.Add(Entity.ID); + if (Entity.Children != null) + { + guids.AddRange(Entity.Children?.Select(x => x.ID).ToList()); + } + AddPrivilege(guids); + } + + public override void DoAdd() + { + if (Entity.IsInside == false) + { + if (Entity.Url != null && Entity.Url != "") + { + if (string.IsNullOrEmpty(Entity.Domain) == true) + { + if (Entity.Url.ToLower().StartsWith("http://") == false && Entity.Url.ToLower().StartsWith("https://") == false && Entity.Url.StartsWith("@") == false) + { + Entity.Url = "http://" + Entity.Url; + } + } + else + { + if (Entity.Url.StartsWith("/") == false) + { + Entity.Url = "/" + Entity.Url; + } + } + Entity.Url = Entity.Url.TrimEnd('/'); + } + } + else + { + + if (string.IsNullOrEmpty(SelectedModule) == false && Entity.FolderOnly == false) + { + var modules = Wtm.GlobaInfo.AllModule; + + var mo = modules.Where(x => x.FullName == this.SelectedModule && x.IsApi == true).FirstOrDefault(); + if (mo != null) + { + Entity.ModuleName = mo.ModuleName; + Entity.ClassName = mo.FullName; + Entity.MethodName = null; + + var otherActions = mo.Actions; + int order = 1; + Entity.Children = new List(); + foreach (var action in otherActions) + { + if (SelectedActionIDs != null && SelectedActionIDs.Contains(action.MethodName)) + { + FrameworkMenu menu = new FrameworkMenu(); + menu.FolderOnly = false; + menu.IsPublic = Entity.IsPublic; + menu.Parent = Entity; + menu.ShowOnMenu = false; + menu.DisplayOrder = order++; + menu.Privileges = new List(); + menu.IsInside = true; + menu.Domain = Entity.Domain; + menu.PageName = action.ActionDes?.Description ?? action.ActionName; + menu.ModuleName = action.Module.ModuleName; + menu.ActionName = action.ActionDes?.Description ?? action.ActionName; + menu.Url = action.Url; + menu.ClassName = action.Module.FullName; + menu.MethodName = action.MethodName; + Entity.Children.Add(menu); + } + } + } + } + + else + { + Entity.Children = null; + Entity.Url = null; + } + + } + base.DoAdd(); + List guids = new List(); + guids.Add(Entity.ID); + if (Entity.Children != null) + { + guids.AddRange(Entity.Children?.Select(x => x.ID).ToList()); + } + AddPrivilege(guids); + } + + public void AddPrivilege(List menuids) + { + var admin = DC.Set().Where(x => x.RoleCode == "001").SingleOrDefault(); + if (admin != null && SelectedRolesCodes.Contains(admin.RoleCode) == false) + { + SelectedRolesCodes.Add(admin.RoleCode); + } + foreach (var menuid in menuids) + { + + if (SelectedRolesCodes != null) + { + foreach (var code in SelectedRolesCodes) + { + FunctionPrivilege fp = new FunctionPrivilege(); + fp.MenuItemId = menuid; + fp.RoleCode = code; + fp.Allowed = true; + DC.Set().Add(fp); + } + } + } + + DC.SaveChanges(); + } + + + public override void DoDelete() + { + try + { + DC.CascadeDelete(Entity); + DC.SaveChanges(); + } + catch + { } + } + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleBatchVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleBatchVM.cs new file mode 100644 index 0000000..dc1b0fd --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleBatchVM.cs @@ -0,0 +1,20 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs +{ + public class FrameworkRoleBatchVM : BaseBatchVM + { + public FrameworkRoleBatchVM() + { + ListVM = new FrameworkRoleListVM(); + } + + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleImportVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleImportVM.cs new file mode 100644 index 0000000..147f0c6 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleImportVM.cs @@ -0,0 +1,17 @@ +// WTM默认页面 Wtm buidin page +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs +{ + public class FrameworkRoleTemplateVM : BaseTemplateVM + { + public ExcelPropety r1 = ExcelPropety.CreateProperty(x => x.RoleCode); + public ExcelPropety r2 = ExcelPropety.CreateProperty(x => x.RoleName); + public ExcelPropety r3 = ExcelPropety.CreateProperty(x => x.RoleRemark); + } + + public class FrameworkRoleImportVM : BaseImportVM + { + + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleListVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleListVM.cs new file mode 100644 index 0000000..cfe100b --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleListVM.cs @@ -0,0 +1,46 @@ +// WTM默认页面 Wtm buidin page +using System.Collections.Generic; +using System.Linq; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs +{ + public class FrameworkRoleListVM : BasePagedListVM + { + protected override List InitGridAction() + { + return new List + { + this.MakeStandardAction("FrameworkRole", GridActionStandardTypesEnum.Create, "","_Admin", dialogWidth: 800), + this.MakeStandardAction("FrameworkRole", GridActionStandardTypesEnum.Edit, "","_Admin", dialogWidth: 800), + this.MakeStandardAction("FrameworkRole", GridActionStandardTypesEnum.Delete, "", "_Admin",dialogWidth: 800), + this.MakeStandardAction("FrameworkRole", GridActionStandardTypesEnum.Details, "","_Admin", dialogWidth: 800), + this.MakeStandardAction("FrameworkRole", GridActionStandardTypesEnum.BatchDelete, "","_Admin", dialogWidth: 800), + this.MakeStandardAction("FrameworkRole", GridActionStandardTypesEnum.Import, "","_Admin", dialogWidth: 800), + this.MakeAction("FrameworkRole","PageFunction",Localizer["_Admin.PageFunction"],Localizer["_Admin.PageFunction"], GridActionParameterTypesEnum.SingleId,"_Admin",800).SetShowInRow(), + this.MakeStandardAction("FrameworkRole", GridActionStandardTypesEnum.ExportExcel, "","_Admin"), + }; + } + + protected override IEnumerable> InitGridHeader() + { + return new List>{ + this.MakeGridHeader(x => x.RoleCode, 120), + this.MakeGridHeader(x => x.RoleName, 120), + this.MakeGridHeader(x => x.RoleRemark), + this.MakeGridHeaderAction(width: 300) + }; + } + + public override IOrderedQueryable GetSearchQuery() + { + var query = DC.Set() + .CheckContain(Searcher.RoleCode,x=>x.RoleCode) + .CheckContain(Searcher.RoleName,x=>x.RoleName) + .OrderBy(x => x.RoleCode); + return query; + } + + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleMDVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleMDVM.cs new file mode 100644 index 0000000..51bd7aa --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleMDVM.cs @@ -0,0 +1,55 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs +{ + public class FrameworkRoleMDVM : BaseCRUDVM + { + public FrameworkMenuListVM ListVM { get; set; } + + public FrameworkRoleMDVM() + { + ListVM = new FrameworkMenuListVM(); + } + + protected override void InitVM() + { + ListVM.CopyContext(this); + ListVM.Searcher.RoleID = Entity.ID; + } + + public async Task DoChangeAsync() + { + var all = FC.Where(x => x.Key.StartsWith("menu_")).ToList(); + List AllowedMenuIds = all.Where(x => x.Value.ToString() == "1").Select(x=> Guid.Parse(x.Key.Replace("menu_",""))).ToList(); + var torem = AllowedMenuIds.Distinct(); + var oldIDs = DC.Set().Where(x => x.RoleCode == Entity.RoleCode).Select(x => x.ID).ToList(); + + foreach (var oldid in oldIDs) + { + FunctionPrivilege fp = new FunctionPrivilege { ID = oldid }; + DC.Set().Attach(fp); + DC.DeleteEntity(fp); + } + foreach (var menuid in AllowedMenuIds) + { + FunctionPrivilege fp = new FunctionPrivilege(); + fp.MenuItemId = menuid; + fp.RoleCode = Entity.RoleCode; + fp.Allowed = true; + DC.Set().Add(fp); + } + await DC.SaveChangesAsync(); + var userids = DC.Set().Where(x => x.RoleCode == Entity.RoleCode).Select(x => x.UserCode).ToArray(); + await Wtm.RemoveUserCache(userids); + return true; + } + + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleMDVM2.cs b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleMDVM2.cs new file mode 100644 index 0000000..e775285 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleMDVM2.cs @@ -0,0 +1,128 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text.Json.Serialization; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs +{ + public class FrameworkRoleMDVM2 : BaseCRUDVM + { + public List Pages { get; set; } + + public FrameworkRoleMDVM2() + { + + } + + protected override void InitVM() + { + var allowedids = DC.Set() + .Where(x => x.RoleCode == Entity.RoleCode && x.Allowed == true).Select(x => x.MenuItemId) + .ToList(); + var data = DC.Set().ToList(); + var topdata = data.Where(x => x.ParentId == null).ToList().FlatTree(x => x.DisplayOrder).Where(x => x.IsInside == false || x.FolderOnly == true || x.MethodName == null).ToList(); + int order = 0; + var data2 = topdata.Select(x => new Page_View + { + ID = x.ID, + Name = x.PageName, + AllActions = x.FolderOnly == true ? null : x.Children.ToListItems(y => y.ActionName, y => y.ID, null), + ParentID = x.ParentId, + Level = x.GetLevel(), + IsFolder = x.FolderOnly, + ExtraOrder = order++ + }).OrderBy(x => x.ExtraOrder).ToList(); + + foreach (var item in data2) + { + if (item.Name?.StartsWith("MenuKey.") == true) + { + item.Name = Localizer[item.Name]; + } + if (item.AllActions == null) + { + item.AllActions = new List(); + } + foreach (var act in item.AllActions) + { + act.Text = Localizer[act.Text]; + } + item.AllActions.Insert(0, new ComboSelectListItem { Text = Localizer["Sys.MainPage"], Value = item.ID.ToString() }); + var ids = item.AllActions.Select(x => Guid.Parse(x.Value.ToString())); + item.Actions = ids.Where(x => allowedids.Contains(x)).ToList(); + } + Pages = data2; + } + + public async Task DoChangeAsync() + { + List AllowedMenuIds = new List(); + var torem = AllowedMenuIds.Distinct(); + + foreach (var page in Pages) + { + if (page.Actions != null) + { + foreach (var action in page.Actions) + { + if (AllowedMenuIds.Contains(action) == false) + { + AllowedMenuIds.Add(action); + } + } + } + } + + var oldIDs = DC.Set().Where(x => x.RoleCode == Entity.RoleCode).Select(x => x.ID).ToList(); + foreach (var oldid in oldIDs) + { + FunctionPrivilege fp = new FunctionPrivilege { ID = oldid }; + DC.Set().Attach(fp); + DC.DeleteEntity(fp); + } + foreach (var menuid in AllowedMenuIds) + { + FunctionPrivilege fp = new FunctionPrivilege(); + fp.MenuItemId = menuid; + fp.RoleCode = Entity.RoleCode; + fp.Allowed = true; + DC.Set().Add(fp); + } + await DC.SaveChangesAsync(); + var userids = DC.Set().Where(x => x.RoleCode == Entity.RoleCode).Select(x => x.UserCode).ToArray(); + await Wtm.RemoveUserCache(userids); + return true; + } + + } + + public class Page_View : TopBasePoco + { + [Display(Name = "_Admin.PageName")] + public string Name { get; set; } + [Display(Name = "_Admin.PageFunction")] + public List Actions { get; set; } + [Display(Name = "_Admin.PageFunction")] + public List AllActions { get; set; } + + public List Children { get; set; } + + public bool IsFolder { get; set; } + [JsonIgnore] + public int ExtraOrder { get; set; } + + public Guid? ParentID { get; set; } + + [JsonIgnore] + public Page_View Parent { get; set; } + + public int Level { get; set; } + + } + +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleSearcher.cs b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleSearcher.cs new file mode 100644 index 0000000..710965a --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleSearcher.cs @@ -0,0 +1,19 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs +{ + public class FrameworkRoleSearcher : BaseSearcher + { + [Display(Name = "_Admin.RoleCode")] + public string RoleCode { get; set; } + + [Display(Name = "_Admin.RoleName")] + public string RoleName { get; set; } + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleVM.cs new file mode 100644 index 0000000..26911fa --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkRoleVMs/FrameworkRoleVM.cs @@ -0,0 +1,49 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs +{ + public class FrameworkRoleVM : BaseCRUDVM + { + public override DuplicatedInfo SetDuplicatedCheck() + { + var rv = CreateFieldsInfo(SimpleField(x => x.RoleName)); + rv.AddGroup(SimpleField(x => x.RoleCode)); + return rv; + } + + public override void DoEdit(bool updateAllFields = false) + { + if (FC.ContainsKey("Entity.RoleCode")) + { + FC.Remove("Entity.RoleCode"); + } + base.DoEdit(updateAllFields); + } + + public override async Task DoDeleteAsync() + { + using (var tran = DC.BeginTransaction()) + { + try + { + await base.DoDeleteAsync(); + var ur = DC.Set().Where(x => x.RoleCode == Entity.RoleCode); + DC.Set().RemoveRange(ur); + DC.SaveChanges(); + tran.Commit(); + await Wtm.RemoveUserCache(ur.Select(x=>x.UserCode).ToArray()); + } + catch + { + tran.Rollback(); + } + } + } + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkUserVms/ChangePasswordVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkUserVms/ChangePasswordVM.cs new file mode 100644 index 0000000..47610e5 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkUserVms/ChangePasswordVM.cs @@ -0,0 +1,52 @@ +// WTM默认页面 Wtm buidin page +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms +{ + public class ChangePasswordVM : BaseVM + { + [Display(Name = "_Admin.Account")] + public string ITCode { get; set; } + + [Display(Name = "Login.OldPassword")] + [Required(AllowEmptyStrings = false)] + [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] + public string OldPassword { get; set; } + + [Display(Name = "Login.NewPassword")] + [Required(AllowEmptyStrings = false)] + [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] + public string NewPassword { get; set; } + + [Display(Name = "Login.NewPasswordComfirm")] + [Required(AllowEmptyStrings = false)] + [StringLength(50, ErrorMessage = "Validate.{0}stringmax{1}")] + public string NewPasswordComfirm { get; set; } + + public override void Validate() + { + List rv = new List(); + if (DC.Set().Where(x => x.ITCode == LoginUserInfo.ITCode && x.Password == Utils.GetMD5String(OldPassword)).SingleOrDefault() == null) + { + MSD.AddModelError("OldPassword", Localizer["Login.OldPasswrodWrong"]); + } + if (NewPassword != NewPasswordComfirm) + { + MSD.AddModelError("NewPasswordComfirm", Localizer["Login.PasswordNotSame"]); + } + } + + public void DoChange() + { + var user = DC.Set().Where(x => x.ITCode == LoginUserInfo.ITCode).SingleOrDefault(); + if (user != null) + { + user.Password = Utils.GetMD5String(NewPassword); + } + DC.SaveChanges(); + } + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserBatchVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserBatchVM.cs new file mode 100644 index 0000000..2239786 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserBatchVM.cs @@ -0,0 +1,61 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using Microsoft.EntityFrameworkCore; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms +{ + public class FrameworkUserBatchVM : BaseBatchVM + { + public FrameworkUserBatchVM() + { + ListVM = new FrameworkUserListVM(); + LinkedVM = new FrameworkUser_BatchEdit(); + } + + public override bool DoBatchEdit() + { + var entityList = DC.Set().AsNoTracking().CheckIDs(Ids.ToList()).ToList(); + foreach (var entity in entityList) + { + List todelete = new List(); + todelete.AddRange(DC.Set().AsNoTracking().Where(x => x.UserCode == entity.ITCode).Select(x => x.ID)); + foreach (var item in todelete) + { + DC.DeleteEntity(new FrameworkUserRole { ID = item }); + } + + if (LinkedVM.SelectedRolesCodes != null) + { + foreach (var rolecode in LinkedVM.SelectedRolesCodes) + { + FrameworkUserRole r = new FrameworkUserRole + { + RoleCode = rolecode, + UserCode = entity.ITCode + }; + DC.AddEntity(r); + } + } + } + return base.DoBatchEdit(); + } + } + + public class FrameworkUser_BatchEdit : BaseVM + { + [Display(Name = "_Admin.Role")] + public List SelectedRolesCodes { get; set; } + public List AllRoles { get; set; } + + protected override void InitVM() + { + AllRoles = DC.Set().GetSelectListItems(Wtm, y => y.RoleName, y => y.RoleCode); + } + } + +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserImportVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserImportVM.cs new file mode 100644 index 0000000..efba18b --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserImportVM.cs @@ -0,0 +1,38 @@ +// WTM默认页面 Wtm buidin page +using System.Collections.Generic; +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms +{ + public class FrameworkUserTemplateVM : BaseTemplateVM + { + public ExcelPropety c1 = ExcelPropety.CreateProperty(x => x.ITCode); + public ExcelPropety c2 = ExcelPropety.CreateProperty(x => x.Password); + public ExcelPropety c3 = ExcelPropety.CreateProperty(x => x.Name); + public ExcelPropety c5 = ExcelPropety.CreateProperty(x => x.Gender); + public ExcelPropety c6 = ExcelPropety.CreateProperty(x => x.CellPhone); + public ExcelPropety c7 = ExcelPropety.CreateProperty(x => x.HomePhone); + public ExcelPropety c8 = ExcelPropety.CreateProperty(x => x.Address); + public ExcelPropety c9 = ExcelPropety.CreateProperty(x => x.ZipCode); + + protected override void InitVM() + { + } + + } + + public class FrameworkUserImportVM : BaseImportVM + { + public override bool BatchSaveData() + { + SetEntityList(); + foreach (var item in EntityList) + { + item.IsValid = true; + item.Password = Utils.GetMD5String(item.Password); + } + return base.BatchSaveData(); + } + } + +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserListVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserListVM.cs new file mode 100644 index 0000000..5768162 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserListVM.cs @@ -0,0 +1,88 @@ +// WTM默认页面 Wtm buidin page +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms +{ + public class FrameworkUserListVM : BasePagedListVM + { + protected override List InitGridAction() + { + return new List + { + this.MakeStandardAction("FrameworkUser", GridActionStandardTypesEnum.Create, "", "_Admin",dialogWidth: 800), + this.MakeStandardAction("FrameworkUser", GridActionStandardTypesEnum.Edit, "", "_Admin",dialogWidth: 800), + this.MakeAction("FrameworkUser","Password",Localizer?["Login.ChangePassword"],Localizer?["Login.ChangePassword"], GridActionParameterTypesEnum.SingleId,"_Admin",400).SetShowInRow(true), + this.MakeStandardAction("FrameworkUser", GridActionStandardTypesEnum.Delete, "","_Admin",dialogWidth: 800), + this.MakeStandardAction("FrameworkUser", GridActionStandardTypesEnum.Details, "", "_Admin",dialogWidth: 600), + this.MakeStandardAction("FrameworkUser", GridActionStandardTypesEnum.BatchEdit, "","_Admin", dialogWidth: 800), + this.MakeStandardAction("FrameworkUser", GridActionStandardTypesEnum.BatchDelete, "","_Admin", dialogWidth: 800), + this.MakeStandardAction("FrameworkUser", GridActionStandardTypesEnum.Import, "","_Admin", dialogWidth: 800), + this.MakeStandardAction("FrameworkUser", GridActionStandardTypesEnum.ExportExcel, "","_Admin"), + }; + } + + protected override IEnumerable> InitGridHeader() + { + return new List>{ + this.MakeGridHeader(x => x.ITCode), + this.MakeGridHeader(x => x.Name), + this.MakeGridHeader(x => x.Gender,80), + this.MakeGridHeader(x => x.CellPhone,120), + this.MakeGridHeader(x => x.RoleName_view), + this.MakeGridHeader(x => x.GroupName_view), + this.MakeGridHeader(x=> x.PhotoId,170).SetFormat(PhotoIdFormat), + this.MakeGridHeader(x => x.IsValid).SetHeader(Localizer["Sys.Enable"]).SetWidth(80), + this.MakeGridHeaderAction(width: 280) + }; + } + + private List PhotoIdFormat(FrameworkUser_View entity, object val) + { + return new List + { + ColumnFormatInfo.MakeDownloadButton(ButtonTypesEnum.Button,entity.PhotoId), + ColumnFormatInfo.MakeViewButton(ButtonTypesEnum.Button,entity.PhotoId), + }; + } + + public override IOrderedQueryable GetSearchQuery() + { + var query = DC.Set() + .CheckContain(Searcher.ITCode,x=>x.ITCode) + .CheckContain(Searcher.Name, x=>x.Name) + .CheckEqual(Searcher.IsValid, x=>x.IsValid) + .Select(x => new FrameworkUser_View + { + ID = x.ID, + ITCode = x.ITCode, + Name = x.Name, + PhotoId = x.PhotoId, + CellPhone = x.CellPhone, + IsValid = x.IsValid, + RoleName_view = DC.Set().Where(y => y.UserCode == x.ITCode) + .Join(DC.Set(), ur => ur.RoleCode, role => role.RoleCode, (ur, role) => role.RoleName).ToSepratedString(null, ","), + GroupName_view = DC.Set().Where(y => y.UserCode == x.ITCode) + .Join(DC.Set(), ug => ug.GroupCode, group => group.GroupCode, (ug, group) => group.GroupName).ToSepratedString(null, ","), + Gender = x.Gender + }) + .OrderBy(x => x.ITCode); + return query; + } + + } + + public class FrameworkUser_View : FrameworkUser + { + [Display(Name = "_Admin.Role")] + public string RoleName_view { get; set; } + + [Display(Name = "_Admin.Group")] + public string GroupName_view { get; set; } + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserSearcher.cs b/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserSearcher.cs new file mode 100644 index 0000000..d0b3056 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserSearcher.cs @@ -0,0 +1,19 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.ComponentModel.DataAnnotations; +using WalkingTec.Mvvm.Core; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms +{ + public class FrameworkUserSearcher : BaseSearcher + { + [Display(Name = "_Admin.Account")] + public string ITCode { get; set; } + + [Display(Name = "_Admin.Name")] + public string Name { get; set; } + [Display(Name = "_Admin.IsValid")] + public bool? IsValid { get; set; } + + } +} diff --git a/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserVM.cs b/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserVM.cs new file mode 100644 index 0000000..7293b66 --- /dev/null +++ b/IoTGateway.ViewModel/_Admin/FrameworkUserVms/FrameworkUserVM.cs @@ -0,0 +1,185 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text.Json.Serialization; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; + +namespace WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms +{ + public class FrameworkUserVM : BaseCRUDVM + { + [JsonIgnore] + public List AllRoles { get; set; } + + [JsonIgnore] + public List AllGroups { get; set; } + [Display(Name = "_Admin.Role")] + public List SelectedRolesCodes { get; set; } + [Display(Name = "_Admin.Group")] + public List SelectedGroupCodes { get; set; } + + + public FrameworkUserVM() + { + } + + public override DuplicatedInfo SetDuplicatedCheck() + { + var rv = CreateFieldsInfo(SimpleField(x => x.ITCode)); + return rv; + } + + protected override void InitVM() + { + AllRoles = DC.Set().GetSelectListItems(Wtm, y => y.RoleName, y => y.RoleCode); + AllGroups = DC.Set().GetSelectListItems(Wtm, y => y.GroupName, y => y.GroupCode); + SelectedRolesCodes = DC.Set().Where(x => x.UserCode == Entity.ITCode).Select(x => x.RoleCode).ToList(); + SelectedGroupCodes = DC.Set().Where(x => x.UserCode == Entity.ITCode).Select(x => x.GroupCode).ToList(); + } + + protected override void ReInitVM() + { + AllRoles = DC.Set().GetSelectListItems(Wtm, y => y.RoleName, y => y.RoleCode); + AllGroups = DC.Set().GetSelectListItems(Wtm, y => y.GroupName, y => y.GroupCode); + } + + public override async Task DoAddAsync() + { + using (var trans = DC.BeginTransaction()) + { + if (SelectedRolesCodes != null) + { + foreach (var rolecode in SelectedRolesCodes) + { + FrameworkUserRole r = new FrameworkUserRole + { + RoleCode = rolecode, + UserCode = Entity.ITCode + }; + DC.AddEntity(r); + } + } + if (SelectedGroupCodes != null) + { + foreach (var groupcode in SelectedGroupCodes) + { + FrameworkUserGroup g = new FrameworkUserGroup + { + GroupCode = groupcode, + UserCode = Entity.ITCode + }; + DC.AddEntity(g); + } + } + Entity.IsValid = true; + Entity.Password = Utils.GetMD5String(Entity.Password); + await base.DoAddAsync(); + if (MSD.IsValid) + { + trans.Commit(); + } + else + { + trans.Rollback(); + } + } + } + + public override async Task DoEditAsync(bool updateAllFields = false) + { + if (FC.ContainsKey("Entity.ITCode")) + { + FC.Remove("Entity.ITCode"); + } + using (var trans = DC.BeginTransaction()) + { + if (SelectedRolesCodes != null) + { + List todelete = new List(); + todelete.AddRange(DC.Set().AsNoTracking().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ID)); + foreach (var item in todelete) + { + DC.DeleteEntity(new FrameworkUserRole { ID = item }); + } + } + if (SelectedGroupCodes != null) + { + List todelete = new List(); + todelete.AddRange(DC.Set().AsNoTracking().Where(x => x.UserCode == Entity.ITCode).Select(x => x.ID)); + foreach (var item in todelete) + { + DC.DeleteEntity(new FrameworkUserGroup { ID = item }); + } + } + if (SelectedRolesCodes != null) + { + foreach (var rolecode in SelectedRolesCodes) + { + FrameworkUserRole r = new FrameworkUserRole + { + RoleCode = rolecode, + UserCode = Entity.ITCode + }; + DC.AddEntity(r); + } + } + if (SelectedGroupCodes != null) + { + foreach (var groupcode in SelectedGroupCodes) + { + FrameworkUserGroup g = new FrameworkUserGroup + { + GroupCode = groupcode, + UserCode = Entity.ITCode + }; + DC.AddEntity(g); + } + } + await base.DoEditAsync(updateAllFields); + if (MSD.IsValid) + { + trans.Commit(); + await Wtm.RemoveUserCache(Entity.ITCode.ToString()); + } + else + { + trans.Rollback(); + } + } + } + + public override async Task DoDeleteAsync() + { + using (var tran = DC.BeginTransaction()) + { + try + { + await base.DoDeleteAsync(); + var ur = DC.Set().Where(x => x.UserCode == Entity.ITCode); + DC.Set().RemoveRange(ur); + var ug = DC.Set().Where(x => x.UserCode == Entity.ITCode); + DC.Set().RemoveRange(ug); + DC.SaveChanges(); + tran.Commit(); + } + catch + { + tran.Rollback(); + } + } + await Wtm.RemoveUserCache(Entity.ITCode.ToString()); + } + + public void ChangePassword() + { + Entity.Password = Utils.GetMD5String(Entity.Password); + DC.UpdateProperty(Entity, x => x.Password); + DC.SaveChanges(); + } + } +} diff --git a/IoTGateway.sln b/IoTGateway.sln new file mode 100644 index 0000000..fdd9b7c --- /dev/null +++ b/IoTGateway.sln @@ -0,0 +1,71 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31919.166 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IoTGateway", "IoTGateway\IoTGateway.csproj", "{68ABBDF2-1485-4756-9A94-6AFA874D69A3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IoTGateway.Model", "IoTGateway.Model\IoTGateway.Model.csproj", "{C2978E5D-E71E-4882-8EF1-4014E8565A77}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IoTGateway.DataAccess", "IoTGateway.DataAccess\IoTGateway.DataAccess.csproj", "{9E7C8C77-643F-45CF-8EDC-5B032C51D563}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IoTGateway.ViewModel", "IoTGateway.ViewModel\IoTGateway.ViewModel.csproj", "{00E91FC1-D5CF-416A-AAAF-61567E368DCD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{FBED048F-7AB9-4348-AD56-F9BF4D9E3A55}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Plugin", "Plugins\Plugin\Plugin.csproj", "{61D79F77-09EF-4A98-A50B-043B1D72C111}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PluginInterface", "Plugins\PluginInterface\PluginInterface.csproj", "{E5F79995-AB61-41F4-820D-BA39967B406B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Drivers", "Drivers", "{52D96C24-2F2F-49B5-9F29-00414DEA41D8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DriverModbusTCP", "Plugins\Drivers\DriverModbusTCP\DriverModbusTCP.csproj", "{7B432FC9-57E6-44BF-B8A7-2A1FB31D6ADD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {68ABBDF2-1485-4756-9A94-6AFA874D69A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68ABBDF2-1485-4756-9A94-6AFA874D69A3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {68ABBDF2-1485-4756-9A94-6AFA874D69A3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {68ABBDF2-1485-4756-9A94-6AFA874D69A3}.Release|Any CPU.Build.0 = Release|Any CPU + {C2978E5D-E71E-4882-8EF1-4014E8565A77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C2978E5D-E71E-4882-8EF1-4014E8565A77}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C2978E5D-E71E-4882-8EF1-4014E8565A77}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C2978E5D-E71E-4882-8EF1-4014E8565A77}.Release|Any CPU.Build.0 = Release|Any CPU + {9E7C8C77-643F-45CF-8EDC-5B032C51D563}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E7C8C77-643F-45CF-8EDC-5B032C51D563}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E7C8C77-643F-45CF-8EDC-5B032C51D563}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E7C8C77-643F-45CF-8EDC-5B032C51D563}.Release|Any CPU.Build.0 = Release|Any CPU + {00E91FC1-D5CF-416A-AAAF-61567E368DCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {00E91FC1-D5CF-416A-AAAF-61567E368DCD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {00E91FC1-D5CF-416A-AAAF-61567E368DCD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {00E91FC1-D5CF-416A-AAAF-61567E368DCD}.Release|Any CPU.Build.0 = Release|Any CPU + {61D79F77-09EF-4A98-A50B-043B1D72C111}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {61D79F77-09EF-4A98-A50B-043B1D72C111}.Debug|Any CPU.Build.0 = Debug|Any CPU + {61D79F77-09EF-4A98-A50B-043B1D72C111}.Release|Any CPU.ActiveCfg = Release|Any CPU + {61D79F77-09EF-4A98-A50B-043B1D72C111}.Release|Any CPU.Build.0 = Release|Any CPU + {E5F79995-AB61-41F4-820D-BA39967B406B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5F79995-AB61-41F4-820D-BA39967B406B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5F79995-AB61-41F4-820D-BA39967B406B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5F79995-AB61-41F4-820D-BA39967B406B}.Release|Any CPU.Build.0 = Release|Any CPU + {7B432FC9-57E6-44BF-B8A7-2A1FB31D6ADD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7B432FC9-57E6-44BF-B8A7-2A1FB31D6ADD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7B432FC9-57E6-44BF-B8A7-2A1FB31D6ADD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7B432FC9-57E6-44BF-B8A7-2A1FB31D6ADD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {61D79F77-09EF-4A98-A50B-043B1D72C111} = {FBED048F-7AB9-4348-AD56-F9BF4D9E3A55} + {E5F79995-AB61-41F4-820D-BA39967B406B} = {FBED048F-7AB9-4348-AD56-F9BF4D9E3A55} + {52D96C24-2F2F-49B5-9F29-00414DEA41D8} = {FBED048F-7AB9-4348-AD56-F9BF4D9E3A55} + {7B432FC9-57E6-44BF-B8A7-2A1FB31D6ADD} = {52D96C24-2F2F-49B5-9F29-00414DEA41D8} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1F219808-E6E8-4C1D-B846-41F2F7CF20FA} + EndGlobalSection +EndGlobal diff --git a/IoTGateway/.config/dotnet-tools.json b/IoTGateway/.config/dotnet-tools.json new file mode 100644 index 0000000..3ba0fe6 --- /dev/null +++ b/IoTGateway/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "6.0.0", + "commands": [ + "dotnet-ef" + ] + } + } +} \ No newline at end of file diff --git a/IoTGateway/Areas/BasicData/Controllers/DeviceConfigController.cs b/IoTGateway/Areas/BasicData/Controllers/DeviceConfigController.cs new file mode 100644 index 0000000..a7d4abb --- /dev/null +++ b/IoTGateway/Areas/BasicData/Controllers/DeviceConfigController.cs @@ -0,0 +1,219 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.ViewModel.BasicData.DeviceConfigVMs; + +namespace IoTGateway.Controllers +{ + [Area("BasicData")] + [ActionDescription("设备参数配置")] + public partial class DeviceConfigController : BaseController + { + #region Search + [ActionDescription("Sys.Search")] + public ActionResult Index() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [ActionDescription("Sys.Search")] + [HttpPost] + public string Search(DeviceConfigSearcher searcher) + { + var vm = Wtm.CreateVM(passInit: true); + if (ModelState.IsValid) + { + vm.Searcher = searcher; + return vm.GetJson(false); + } + else + { + return vm.GetError(); + } + } + + #endregion + + #region Create + [ActionDescription("Sys.Create")] + public ActionResult Create() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Create")] + public ActionResult Create(DeviceConfigVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoAdd(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + } + #endregion + + #region Edit + [ActionDescription("Sys.Edit")] + public ActionResult Edit(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Edit")] + [HttpPost] + [ValidateFormItemOnly] + public ActionResult Edit(DeviceConfigVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoEdit(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGridRow(vm.Entity.ID); + } + } + } + #endregion + + #region Delete + [ActionDescription("Sys.Delete")] + public ActionResult Delete(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Delete")] + [HttpPost] + public ActionResult Delete(string id, IFormCollection nouse) + { + var vm = Wtm.CreateVM(id); + vm.DoDelete(); + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + #endregion + + #region Details + [ActionDescription("Sys.Details")] + public ActionResult Details(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + #endregion + + #region BatchEdit + [HttpPost] + [ActionDescription("Sys.BatchEdit")] + public ActionResult BatchEdit(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchEdit")] + public ActionResult DoBatchEdit(DeviceConfigBatchVM vm, IFormCollection nouse) + { + if (!ModelState.IsValid || !vm.DoBatchEdit()) + { + return PartialView("BatchEdit",vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.BatchEditSuccess", vm.Ids.Length]); + } + } + #endregion + + #region BatchDelete + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult BatchDelete(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult DoBatchDelete(DeviceConfigBatchVM vm, IFormCollection nouse) + { + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return PartialView("BatchDelete",vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.BatchDeleteSuccess", vm.Ids.Length]); + } + } + #endregion + + #region Import + [ActionDescription("Sys.Import")] + public ActionResult Import() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Import")] + public ActionResult Import(DeviceConfigImportVM vm, IFormCollection nouse) + { + if (vm.ErrorListVM.EntityList.Count > 0 || !vm.BatchSaveData()) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.ImportSuccess", vm.EntityList.Count.ToString()]); + } + } + #endregion + + [ActionDescription("Sys.Export")] + [HttpPost] + public IActionResult ExportExcel(DeviceConfigListVM vm) + { + return vm.GetExportData(); + } + + } +} diff --git a/IoTGateway/Areas/BasicData/Controllers/DeviceController.cs b/IoTGateway/Areas/BasicData/Controllers/DeviceController.cs new file mode 100644 index 0000000..1807228 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Controllers/DeviceController.cs @@ -0,0 +1,289 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.ViewModel.BasicData.DeviceVMs; +using Plugin; + +namespace IoTGateway.Controllers +{ + [Area("BasicData")] + [ActionDescription("设备维护")] + public partial class DeviceController : BaseController + { + private DeviceService _DeviceService; + public DeviceController(DeviceService deviceService) + { + _DeviceService = deviceService; + } + #region Search + [ActionDescription("Sys.Search")] + public ActionResult Index() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [ActionDescription("Sys.Search")] + [HttpPost] + public string Search(DeviceSearcher searcher) + { + var vm = Wtm.CreateVM(passInit: true); + if (ModelState.IsValid) + { + vm.Searcher = searcher; + return vm.GetJson(false); + } + else + { + return vm.GetError(); + } + } + + #endregion + + #region Create + [ActionDescription("创建设备")] + public ActionResult Create() + { + var vm = Wtm.CreateVM(); + vm.Entity.DeviceTypeEnum = Model.DeviceTypeEnum.Device; + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("创建设备")] + public ActionResult Create(DeviceVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.Entity.DeviceTypeEnum = Model.DeviceTypeEnum.Device; + vm.DoAdd(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + } + #endregion + #region Create + [ActionDescription("Sys.Create")] + public ActionResult CreateGroup() + { + var vm = Wtm.CreateVM(); + vm.Entity.DeviceTypeEnum = Model.DeviceTypeEnum.Group; + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Create")] + public ActionResult CreateGroup(DeviceVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.Entity.DeviceTypeEnum = Model.DeviceTypeEnum.Group; + vm.DoAdd(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + } + #endregion + + #region Edit + [ActionDescription("Sys.Edit")] + public ActionResult Edit(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Edit")] + [HttpPost] + [ValidateFormItemOnly] + public ActionResult Edit(DeviceVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoEdit(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGridRow(vm.Entity.ID); + } + } + } + #endregion + + #region Delete + [ActionDescription("Sys.Delete")] + public ActionResult Delete(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Delete")] + [HttpPost] + public ActionResult Delete(string id, IFormCollection nouse) + { + var vm = Wtm.CreateVM(id); + vm.DoDelete(); + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + #endregion + + #region Details + [ActionDescription("Sys.Details")] + public ActionResult Details(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + #endregion + + #region BatchEdit + [HttpPost] + [ActionDescription("Sys.BatchEdit")] + public ActionResult BatchEdit(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchEdit")] + public ActionResult DoBatchEdit(DeviceBatchVM vm, IFormCollection nouse) + { + if (!ModelState.IsValid || !vm.DoBatchEdit()) + { + return PartialView("BatchEdit",vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.BatchEditSuccess", vm.Ids.Length]); + } + } + #endregion + + #region BatchDelete + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult BatchDelete(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult DoBatchDelete(DeviceBatchVM vm, IFormCollection nouse) + { + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return PartialView("BatchDelete",vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.BatchDeleteSuccess", vm.Ids.Length]); + } + } + #endregion + + #region Import + [ActionDescription("Sys.Import")] + public ActionResult Import() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Import")] + public ActionResult Import(DeviceImportVM vm, IFormCollection nouse) + { + if (vm.ErrorListVM.EntityList.Count > 0 || !vm.BatchSaveData()) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.ImportSuccess", vm.EntityList.Count.ToString()]); + } + } + #endregion + + [ActionDescription("Sys.Export")] + [HttpPost] + public IActionResult ExportExcel(DeviceListVM vm) + { + return vm.GetExportData(); + } + + #region 设备复制 + [ActionDescription("设备复制")] + public ActionResult Copy() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("设备复制")] + public ActionResult Copy(CopyVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.Copy(); + return FFResult().CloseDialog().RefreshGrid().Alert($"{vm.复制结果}"); + } + } + #endregion + + + public IActionResult GetMethods(Guid? ID) + { + return JsonMore(_DeviceService.GetDriverMethods(ID)); + } + } +} diff --git a/IoTGateway/Areas/BasicData/Controllers/DeviceVariableController.cs b/IoTGateway/Areas/BasicData/Controllers/DeviceVariableController.cs new file mode 100644 index 0000000..e75425c --- /dev/null +++ b/IoTGateway/Areas/BasicData/Controllers/DeviceVariableController.cs @@ -0,0 +1,220 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.ViewModel.BasicData.DeviceVariableVMs; + +namespace IoTGateway.Controllers +{ + [Area("BasicData")] + [ActionDescription("设备变量配置")] + public partial class DeviceVariableController : BaseController + { + #region Search + [ActionDescription("Sys.Search")] + public ActionResult Index() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [ActionDescription("Sys.Search")] + [HttpPost] + public string Search(DeviceVariableSearcher searcher) + { + var vm = Wtm.CreateVM(passInit: true); + if (ModelState.IsValid) + { + vm.Searcher = searcher; + return vm.GetJson(false); + } + else + { + return vm.GetError(); + } + } + + #endregion + + #region Create + [ActionDescription("Sys.Create")] + public ActionResult Create() + { + var vm = Wtm.CreateVM(); + vm.Entity.ValueFactor = 1; + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Create")] + public ActionResult Create(DeviceVariableVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoAdd(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + } + #endregion + + #region Edit + [ActionDescription("Sys.Edit")] + public ActionResult Edit(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Edit")] + [HttpPost] + [ValidateFormItemOnly] + public ActionResult Edit(DeviceVariableVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoEdit(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGridRow(vm.Entity.ID); + } + } + } + #endregion + + #region Delete + [ActionDescription("Sys.Delete")] + public ActionResult Delete(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Delete")] + [HttpPost] + public ActionResult Delete(string id, IFormCollection nouse) + { + var vm = Wtm.CreateVM(id); + vm.DoDelete(); + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + #endregion + + #region Details + [ActionDescription("Sys.Details")] + public ActionResult Details(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + #endregion + + #region BatchEdit + [HttpPost] + [ActionDescription("Sys.BatchEdit")] + public ActionResult BatchEdit(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchEdit")] + public ActionResult DoBatchEdit(DeviceVariableBatchVM vm, IFormCollection nouse) + { + if (!ModelState.IsValid || !vm.DoBatchEdit()) + { + return PartialView("BatchEdit",vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.BatchEditSuccess", vm.Ids.Length]); + } + } + #endregion + + #region BatchDelete + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult BatchDelete(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult DoBatchDelete(DeviceVariableBatchVM vm, IFormCollection nouse) + { + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return PartialView("BatchDelete",vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.BatchDeleteSuccess", vm.Ids.Length]); + } + } + #endregion + + #region Import + [ActionDescription("Sys.Import")] + public ActionResult Import() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Import")] + public ActionResult Import(DeviceVariableImportVM vm, IFormCollection nouse) + { + if (vm.ErrorListVM.EntityList.Count > 0 || !vm.BatchSaveData()) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.ImportSuccess", vm.EntityList.Count.ToString()]); + } + } + #endregion + + [ActionDescription("Sys.Export")] + [HttpPost] + public IActionResult ExportExcel(DeviceVariableListVM vm) + { + return vm.GetExportData(); + } + + } +} diff --git a/IoTGateway/Areas/BasicData/Controllers/DriverController.cs b/IoTGateway/Areas/BasicData/Controllers/DriverController.cs new file mode 100644 index 0000000..567c8ef --- /dev/null +++ b/IoTGateway/Areas/BasicData/Controllers/DriverController.cs @@ -0,0 +1,219 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.ViewModel.BasicData.DriverVMs; + +namespace IoTGateway.Controllers +{ + [Area("BasicData")] + [ActionDescription("驱动管理")] + public partial class DriverController : BaseController + { + #region Search + [ActionDescription("Sys.Search")] + public ActionResult Index() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [ActionDescription("Sys.Search")] + [HttpPost] + public string Search(DriverSearcher searcher) + { + var vm = Wtm.CreateVM(passInit: true); + if (ModelState.IsValid) + { + vm.Searcher = searcher; + return vm.GetJson(false); + } + else + { + return vm.GetError(); + } + } + + #endregion + + #region Create + [ActionDescription("Sys.Create")] + public ActionResult Create() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Create")] + public ActionResult Create(DriverVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoAdd(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + } + #endregion + + #region Edit + [ActionDescription("Sys.Edit")] + public ActionResult Edit(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Edit")] + [HttpPost] + [ValidateFormItemOnly] + public ActionResult Edit(DriverVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoEdit(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGridRow(vm.Entity.ID); + } + } + } + #endregion + + #region Delete + [ActionDescription("Sys.Delete")] + public ActionResult Delete(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Delete")] + [HttpPost] + public ActionResult Delete(string id, IFormCollection nouse) + { + var vm = Wtm.CreateVM(id); + vm.DoDelete(); + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + #endregion + + #region Details + [ActionDescription("Sys.Details")] + public ActionResult Details(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + #endregion + + #region BatchEdit + [HttpPost] + [ActionDescription("Sys.BatchEdit")] + public ActionResult BatchEdit(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchEdit")] + public ActionResult DoBatchEdit(DriverBatchVM vm, IFormCollection nouse) + { + if (!ModelState.IsValid || !vm.DoBatchEdit()) + { + return PartialView("BatchEdit",vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.BatchEditSuccess", vm.Ids.Length]); + } + } + #endregion + + #region BatchDelete + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult BatchDelete(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult DoBatchDelete(DriverBatchVM vm, IFormCollection nouse) + { + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return PartialView("BatchDelete",vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.BatchDeleteSuccess", vm.Ids.Length]); + } + } + #endregion + + #region Import + [ActionDescription("Sys.Import")] + public ActionResult Import() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Import")] + public ActionResult Import(DriverImportVM vm, IFormCollection nouse) + { + if (vm.ErrorListVM.EntityList.Count > 0 || !vm.BatchSaveData()) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.ImportSuccess", vm.EntityList.Count.ToString()]); + } + } + #endregion + + [ActionDescription("Sys.Export")] + [HttpPost] + public IActionResult ExportExcel(DriverListVM vm) + { + return vm.GetExportData(); + } + + } +} diff --git a/IoTGateway/Areas/BasicData/Views/Device/BatchDelete.cshtml b/IoTGateway/Areas/BasicData/Views/Device/BatchDelete.cshtml new file mode 100644 index 0000000..5d6fdd3 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Device/BatchDelete.cshtml @@ -0,0 +1,12 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVMs.DeviceBatchVM +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.BatchDeleteConfirm"] + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Device/BatchEdit.cshtml b/IoTGateway/Areas/BasicData/Views/Device/BatchEdit.cshtml new file mode 100644 index 0000000..f5e0881 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Device/BatchEdit.cshtml @@ -0,0 +1,18 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVMs.DeviceBatchVM +@inject IStringLocalizer Localizer; + + +
@Localizer["Sys.BatchEditConfirm"]
+ + + + + + + + + + + + +
diff --git a/IoTGateway/Areas/BasicData/Views/Device/Copy.cshtml b/IoTGateway/Areas/BasicData/Views/Device/Copy.cshtml new file mode 100644 index 0000000..f69a319 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Device/Copy.cshtml @@ -0,0 +1,15 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVMs.CopyVM +@inject IStringLocalizer Localizer; + + + + + @Model.设备名称 + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Device/Create.cshtml b/IoTGateway/Areas/BasicData/Views/Device/Create.cshtml new file mode 100644 index 0000000..4d8abe3 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Device/Create.cshtml @@ -0,0 +1,18 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVMs.DeviceVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Device/CreateGroup.cshtml b/IoTGateway/Areas/BasicData/Views/Device/CreateGroup.cshtml new file mode 100644 index 0000000..9930ddf --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Device/CreateGroup.cshtml @@ -0,0 +1,15 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVMs.DeviceVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Device/Delete.cshtml b/IoTGateway/Areas/BasicData/Views/Device/Delete.cshtml new file mode 100644 index 0000000..7c603c3 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Device/Delete.cshtml @@ -0,0 +1,20 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVMs.DeviceVM +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.DeleteConfirm"] + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Device/Details.cshtml b/IoTGateway/Areas/BasicData/Views/Device/Details.cshtml new file mode 100644 index 0000000..1971d27 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Device/Details.cshtml @@ -0,0 +1,17 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVMs.DeviceVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Device/Edit.cshtml b/IoTGateway/Areas/BasicData/Views/Device/Edit.cshtml new file mode 100644 index 0000000..e89dc3e --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Device/Edit.cshtml @@ -0,0 +1,24 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVMs.DeviceVM +@inject IStringLocalizer Localizer; + + + + + + + + @{ + if (Model.Entity.DeviceTypeEnum == IoTGateway.Model.DeviceTypeEnum.Device) + { + + + + } + } + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Device/Import.cshtml b/IoTGateway/Areas/BasicData/Views/Device/Import.cshtml new file mode 100644 index 0000000..0da01e8 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Device/Import.cshtml @@ -0,0 +1,14 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVMs.DeviceImportVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Device/Index.cshtml b/IoTGateway/Areas/BasicData/Views/Device/Index.cshtml new file mode 100644 index 0000000..8ec4b9a --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Device/Index.cshtml @@ -0,0 +1,13 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVMs.DeviceListVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceConfig/BatchDelete.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceConfig/BatchDelete.cshtml new file mode 100644 index 0000000..2de70f1 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceConfig/BatchDelete.cshtml @@ -0,0 +1,12 @@ +@model IoTGateway.ViewModel.BasicData.DeviceConfigVMs.DeviceConfigBatchVM +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.BatchDeleteConfirm"] + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceConfig/BatchEdit.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceConfig/BatchEdit.cshtml new file mode 100644 index 0000000..fafbee6 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceConfig/BatchEdit.cshtml @@ -0,0 +1,15 @@ +@model IoTGateway.ViewModel.BasicData.DeviceConfigVMs.DeviceConfigBatchVM +@inject IStringLocalizer Localizer; + + +
@Localizer["Sys.BatchEditConfirm"]
+ + + + + + + + + +
diff --git a/IoTGateway/Areas/BasicData/Views/DeviceConfig/Create.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceConfig/Create.cshtml new file mode 100644 index 0000000..e895873 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceConfig/Create.cshtml @@ -0,0 +1,16 @@ +@model IoTGateway.ViewModel.BasicData.DeviceConfigVMs.DeviceConfigVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceConfig/Delete.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceConfig/Delete.cshtml new file mode 100644 index 0000000..ce1ef71 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceConfig/Delete.cshtml @@ -0,0 +1,18 @@ +@model IoTGateway.ViewModel.BasicData.DeviceConfigVMs.DeviceConfigVM +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.DeleteConfirm"] + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceConfig/Details.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceConfig/Details.cshtml new file mode 100644 index 0000000..940a7fa --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceConfig/Details.cshtml @@ -0,0 +1,15 @@ +@model IoTGateway.ViewModel.BasicData.DeviceConfigVMs.DeviceConfigVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceConfig/Edit.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceConfig/Edit.cshtml new file mode 100644 index 0000000..0f8d016 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceConfig/Edit.cshtml @@ -0,0 +1,26 @@ +@model IoTGateway.ViewModel.BasicData.DeviceConfigVMs.DeviceConfigVM +@inject IStringLocalizer Localizer; + + + + + @{ + if (Model.Entity.EnumInfo != null) + { + + } + else + { + + } + } + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceConfig/Import.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceConfig/Import.cshtml new file mode 100644 index 0000000..2df2b60 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceConfig/Import.cshtml @@ -0,0 +1,14 @@ +@model IoTGateway.ViewModel.BasicData.DeviceConfigVMs.DeviceConfigImportVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceConfig/Index.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceConfig/Index.cshtml new file mode 100644 index 0000000..5e5a709 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceConfig/Index.cshtml @@ -0,0 +1,13 @@ +@model IoTGateway.ViewModel.BasicData.DeviceConfigVMs.DeviceConfigListVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceVariable/BatchDelete.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceVariable/BatchDelete.cshtml new file mode 100644 index 0000000..8e9e3a5 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceVariable/BatchDelete.cshtml @@ -0,0 +1,12 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVariableVMs.DeviceVariableBatchVM +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.BatchDeleteConfirm"] + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceVariable/BatchEdit.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceVariable/BatchEdit.cshtml new file mode 100644 index 0000000..369cb94 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceVariable/BatchEdit.cshtml @@ -0,0 +1,19 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVariableVMs.DeviceVariableBatchVM +@inject IStringLocalizer Localizer; + + +
@Localizer["Sys.BatchEditConfirm"]
+ + + + + + + + + + + + + +
diff --git a/IoTGateway/Areas/BasicData/Views/DeviceVariable/Create.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceVariable/Create.cshtml new file mode 100644 index 0000000..0134ed4 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceVariable/Create.cshtml @@ -0,0 +1,19 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVariableVMs.DeviceVariableVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceVariable/Delete.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceVariable/Delete.cshtml new file mode 100644 index 0000000..1d0bb00 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceVariable/Delete.cshtml @@ -0,0 +1,21 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVariableVMs.DeviceVariableVM +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.DeleteConfirm"] + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceVariable/Details.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceVariable/Details.cshtml new file mode 100644 index 0000000..cb60b25 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceVariable/Details.cshtml @@ -0,0 +1,18 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVariableVMs.DeviceVariableVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceVariable/Edit.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceVariable/Edit.cshtml new file mode 100644 index 0000000..7d35eed --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceVariable/Edit.cshtml @@ -0,0 +1,20 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVariableVMs.DeviceVariableVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceVariable/Import.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceVariable/Import.cshtml new file mode 100644 index 0000000..59241c2 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceVariable/Import.cshtml @@ -0,0 +1,14 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVariableVMs.DeviceVariableImportVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/DeviceVariable/Index.cshtml b/IoTGateway/Areas/BasicData/Views/DeviceVariable/Index.cshtml new file mode 100644 index 0000000..ccb0222 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/DeviceVariable/Index.cshtml @@ -0,0 +1,15 @@ +@model IoTGateway.ViewModel.BasicData.DeviceVariableVMs.DeviceVariableListVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Driver/BatchDelete.cshtml b/IoTGateway/Areas/BasicData/Views/Driver/BatchDelete.cshtml new file mode 100644 index 0000000..2903a3b --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Driver/BatchDelete.cshtml @@ -0,0 +1,12 @@ +@model IoTGateway.ViewModel.BasicData.DriverVMs.DriverBatchVM +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.BatchDeleteConfirm"] + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Driver/BatchEdit.cshtml b/IoTGateway/Areas/BasicData/Views/Driver/BatchEdit.cshtml new file mode 100644 index 0000000..8220a3b --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Driver/BatchEdit.cshtml @@ -0,0 +1,14 @@ +@model IoTGateway.ViewModel.BasicData.DriverVMs.DriverBatchVM +@inject IStringLocalizer Localizer; + + +
@Localizer["Sys.BatchEditConfirm"]
+ + + + + + + + +
diff --git a/IoTGateway/Areas/BasicData/Views/Driver/Create.cshtml b/IoTGateway/Areas/BasicData/Views/Driver/Create.cshtml new file mode 100644 index 0000000..e93f5a9 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Driver/Create.cshtml @@ -0,0 +1,14 @@ +@model IoTGateway.ViewModel.BasicData.DriverVMs.DriverVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Driver/Delete.cshtml b/IoTGateway/Areas/BasicData/Views/Driver/Delete.cshtml new file mode 100644 index 0000000..c4c2884 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Driver/Delete.cshtml @@ -0,0 +1,17 @@ +@model IoTGateway.ViewModel.BasicData.DriverVMs.DriverVM +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.DeleteConfirm"] + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Driver/Details.cshtml b/IoTGateway/Areas/BasicData/Views/Driver/Details.cshtml new file mode 100644 index 0000000..e574672 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Driver/Details.cshtml @@ -0,0 +1,14 @@ +@model IoTGateway.ViewModel.BasicData.DriverVMs.DriverVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Driver/Edit.cshtml b/IoTGateway/Areas/BasicData/Views/Driver/Edit.cshtml new file mode 100644 index 0000000..b306514 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Driver/Edit.cshtml @@ -0,0 +1,16 @@ +@model IoTGateway.ViewModel.BasicData.DriverVMs.DriverVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Driver/Import.cshtml b/IoTGateway/Areas/BasicData/Views/Driver/Import.cshtml new file mode 100644 index 0000000..c8c6d5d --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Driver/Import.cshtml @@ -0,0 +1,14 @@ +@model IoTGateway.ViewModel.BasicData.DriverVMs.DriverImportVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + diff --git a/IoTGateway/Areas/BasicData/Views/Driver/Index.cshtml b/IoTGateway/Areas/BasicData/Views/Driver/Index.cshtml new file mode 100644 index 0000000..b4ec6b1 --- /dev/null +++ b/IoTGateway/Areas/BasicData/Views/Driver/Index.cshtml @@ -0,0 +1,9 @@ +@model IoTGateway.ViewModel.BasicData.DriverVMs.DriverListVM +@inject IStringLocalizer Localizer; + + + + + + + diff --git a/IoTGateway/Areas/Config/Controllers/SystemConfigController.cs b/IoTGateway/Areas/Config/Controllers/SystemConfigController.cs new file mode 100644 index 0000000..2bf3579 --- /dev/null +++ b/IoTGateway/Areas/Config/Controllers/SystemConfigController.cs @@ -0,0 +1,219 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Core.Extensions; +using IoTGateway.ViewModel.Config.SystemConfigVMs; + +namespace IoTGateway.Controllers +{ + [Area("Config")] + [ActionDescription("系统配置")] + public partial class SystemConfigController : BaseController + { + #region Search + [ActionDescription("Sys.Search")] + public ActionResult Index() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [ActionDescription("Sys.Search")] + [HttpPost] + public string Search(SystemConfigSearcher searcher) + { + var vm = Wtm.CreateVM(passInit: true); + if (ModelState.IsValid) + { + vm.Searcher = searcher; + return vm.GetJson(false); + } + else + { + return vm.GetError(); + } + } + + #endregion + + #region Create + [ActionDescription("Sys.Create")] + public ActionResult Create() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Create")] + public ActionResult Create(SystemConfigVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoAdd(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + } + #endregion + + #region Edit + [ActionDescription("Sys.Edit")] + public ActionResult Edit(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Edit")] + [HttpPost] + [ValidateFormItemOnly] + public ActionResult Edit(SystemConfigVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoEdit(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGridRow(vm.Entity.ID); + } + } + } + #endregion + + #region Delete + [ActionDescription("Sys.Delete")] + public ActionResult Delete(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Delete")] + [HttpPost] + public ActionResult Delete(string id, IFormCollection nouse) + { + var vm = Wtm.CreateVM(id); + vm.DoDelete(); + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + #endregion + + #region Details + [ActionDescription("Sys.Details")] + public ActionResult Details(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + #endregion + + #region BatchEdit + [HttpPost] + [ActionDescription("Sys.BatchEdit")] + public ActionResult BatchEdit(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchEdit")] + public ActionResult DoBatchEdit(SystemConfigBatchVM vm, IFormCollection nouse) + { + if (!ModelState.IsValid || !vm.DoBatchEdit()) + { + return PartialView("BatchEdit",vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.BatchEditSuccess", vm.Ids.Length]); + } + } + #endregion + + #region BatchDelete + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult BatchDelete(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult DoBatchDelete(SystemConfigBatchVM vm, IFormCollection nouse) + { + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return PartialView("BatchDelete",vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.BatchDeleteSuccess", vm.Ids.Length]); + } + } + #endregion + + #region Import + [ActionDescription("Sys.Import")] + public ActionResult Import() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Import")] + public ActionResult Import(SystemConfigImportVM vm, IFormCollection nouse) + { + if (vm.ErrorListVM.EntityList.Count > 0 || !vm.BatchSaveData()) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.ImportSuccess", vm.EntityList.Count.ToString()]); + } + } + #endregion + + [ActionDescription("Sys.Export")] + [HttpPost] + public IActionResult ExportExcel(SystemConfigListVM vm) + { + return vm.GetExportData(); + } + + } +} diff --git a/IoTGateway/Areas/Config/Views/SystemConfig/BatchDelete.cshtml b/IoTGateway/Areas/Config/Views/SystemConfig/BatchDelete.cshtml new file mode 100644 index 0000000..4282f75 --- /dev/null +++ b/IoTGateway/Areas/Config/Views/SystemConfig/BatchDelete.cshtml @@ -0,0 +1,12 @@ +@model IoTGateway.ViewModel.Config.SystemConfigVMs.SystemConfigBatchVM +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.BatchDeleteConfirm"] + + + + + + + diff --git a/IoTGateway/Areas/Config/Views/SystemConfig/BatchEdit.cshtml b/IoTGateway/Areas/Config/Views/SystemConfig/BatchEdit.cshtml new file mode 100644 index 0000000..7e496ba --- /dev/null +++ b/IoTGateway/Areas/Config/Views/SystemConfig/BatchEdit.cshtml @@ -0,0 +1,14 @@ +@model IoTGateway.ViewModel.Config.SystemConfigVMs.SystemConfigBatchVM +@inject IStringLocalizer Localizer; + + +
@Localizer["Sys.BatchEditConfirm"]
+ + + + + + + + +
diff --git a/IoTGateway/Areas/Config/Views/SystemConfig/Create.cshtml b/IoTGateway/Areas/Config/Views/SystemConfig/Create.cshtml new file mode 100644 index 0000000..c746aa6 --- /dev/null +++ b/IoTGateway/Areas/Config/Views/SystemConfig/Create.cshtml @@ -0,0 +1,16 @@ +@model IoTGateway.ViewModel.Config.SystemConfigVMs.SystemConfigVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/Config/Views/SystemConfig/Delete.cshtml b/IoTGateway/Areas/Config/Views/SystemConfig/Delete.cshtml new file mode 100644 index 0000000..1f23668 --- /dev/null +++ b/IoTGateway/Areas/Config/Views/SystemConfig/Delete.cshtml @@ -0,0 +1,18 @@ +@model IoTGateway.ViewModel.Config.SystemConfigVMs.SystemConfigVM +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.DeleteConfirm"] + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/Config/Views/SystemConfig/Details.cshtml b/IoTGateway/Areas/Config/Views/SystemConfig/Details.cshtml new file mode 100644 index 0000000..96db607 --- /dev/null +++ b/IoTGateway/Areas/Config/Views/SystemConfig/Details.cshtml @@ -0,0 +1,15 @@ +@model IoTGateway.ViewModel.Config.SystemConfigVMs.SystemConfigVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/Config/Views/SystemConfig/Edit.cshtml b/IoTGateway/Areas/Config/Views/SystemConfig/Edit.cshtml new file mode 100644 index 0000000..2acf3ab --- /dev/null +++ b/IoTGateway/Areas/Config/Views/SystemConfig/Edit.cshtml @@ -0,0 +1,17 @@ +@model IoTGateway.ViewModel.Config.SystemConfigVMs.SystemConfigVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/Config/Views/SystemConfig/Import.cshtml b/IoTGateway/Areas/Config/Views/SystemConfig/Import.cshtml new file mode 100644 index 0000000..0522b4b --- /dev/null +++ b/IoTGateway/Areas/Config/Views/SystemConfig/Import.cshtml @@ -0,0 +1,14 @@ +@model IoTGateway.ViewModel.Config.SystemConfigVMs.SystemConfigImportVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + diff --git a/IoTGateway/Areas/Config/Views/SystemConfig/Index.cshtml b/IoTGateway/Areas/Config/Views/SystemConfig/Index.cshtml new file mode 100644 index 0000000..6eee90f --- /dev/null +++ b/IoTGateway/Areas/Config/Views/SystemConfig/Index.cshtml @@ -0,0 +1,8 @@ +@model IoTGateway.ViewModel.Config.SystemConfigVMs.SystemConfigListVM +@inject IStringLocalizer Localizer; + + + + + + diff --git a/IoTGateway/Areas/_Admin/ApiControllers/AccountController.cs b/IoTGateway/Areas/_Admin/ApiControllers/AccountController.cs new file mode 100644 index 0000000..a9740d0 --- /dev/null +++ b/IoTGateway/Areas/_Admin/ApiControllers/AccountController.cs @@ -0,0 +1,272 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Logging; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Core.Support.Json; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms; +using WalkingTec.Mvvm.Mvc.Auth; + +namespace WalkingTec.Mvvm.Admin.Api +{ + [AuthorizeJwtWithCookie] + [ApiController] + [Route("api/_[controller]")] + [ActionDescription("_Admin.LoginApi")] + [AllRights] + public class AccountController : BaseApiController + { + private readonly ILogger _logger; + private readonly ITokenService _authService; + public AccountController( + ILogger logger, + ITokenService authService) + { + _logger = logger; + _authService = authService; + } + + [AllowAnonymous] + [HttpPost("[action]")] + public async Task Login([FromForm] string account, [FromForm] string password, [FromForm] bool rememberLogin = false) + { + + var rv = await DC.Set().Where(x => x.ITCode.ToLower() == account.ToLower() && x.Password == Utils.GetMD5String(password) && x.IsValid).Select(x => new { itcode = x.ITCode, id = x.GetID() }).SingleOrDefaultAsync(); + + if (rv == null) + { + return BadRequest(Localizer["Sys.LoginFailed"].Value); + } + LoginUserInfo user = new LoginUserInfo + { + ITCode = rv.itcode, + UserId = rv.id.ToString() + }; + + await user.LoadBasicInfoAsync(Wtm); + Wtm.LoginUserInfo = user; + + AuthenticationProperties properties = null; + if (rememberLogin) + { + properties = new AuthenticationProperties + { + IsPersistent = true, + ExpiresUtc = DateTimeOffset.UtcNow.Add(TimeSpan.FromDays(30)) + }; + } + + var principal = Wtm.LoginUserInfo.CreatePrincipal(); + await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, properties); + List ms = new List(); + LoginUserInfo forapi = new LoginUserInfo(); + forapi.UserId = user.UserId; + forapi.ITCode = user.ITCode; + forapi.Name = user.Name; + forapi.Roles = user.Roles; + forapi.Groups = user.Groups; + forapi.PhotoId = user.PhotoId; + var roleIDs = Wtm.LoginUserInfo.Roles.Select(x => x.RoleCode).ToList(); + var data = DC.Set().Where(x => x.MethodName == null).ToList(); + var topdata = data.Where(x => x.ParentId == null && x.ShowOnMenu).ToList().FlatTree(x => x.DisplayOrder).Where(x => (x.IsInside == false || x.FolderOnly == true || string.IsNullOrEmpty(x.MethodName)) && x.ShowOnMenu).ToList(); + var allowed = DC.Set() + .AsNoTracking() + .Where(x => x.RoleCode != null && roleIDs.Contains(x.RoleCode)) + .Select(x => new { x.MenuItem.ID, x.MenuItem.Url }) + .ToList(); + + var allowedids = allowed.Select(x => x.ID).ToList(); + foreach (var item in topdata) + { + if (allowedids.Contains(item.ID)) + { + ms.Add(new SimpleMenuApi + { + Id = item.ID.ToString().ToLower(), + ParentId = item.ParentId?.ToString()?.ToLower(), + Text = item.PageName, + Url = item.Url, + Icon = item.Icon + }); + } + } + + LocalizeMenu(ms); + + List urls = new List(); + urls.AddRange(allowed.Select(x => x.Url).Distinct()); + urls.AddRange(GlobaInfo.AllModule.Where(x => x.IsApi == true).SelectMany(x => x.Actions).Where(x => (x.IgnorePrivillege == true || x.Module.IgnorePrivillege == true) && x.Url != null).Select(x => x.Url)); + forapi.Attributes = new Dictionary(); + forapi.Attributes.Add("Menus", ms); + forapi.Attributes.Add("Actions", urls); + + return Ok(forapi); + } + + + [AllowAnonymous] + [HttpPost("[action]")] + public async Task LoginJwt(SimpleLogin loginInfo) + { + + var rv = await DC.Set().Where(x => x.ITCode.ToLower() == loginInfo.Account.ToLower() && x.Password == Utils.GetMD5String(loginInfo.Password) && x.IsValid).Select(x => new { itcode = x.ITCode, id = x.GetID() }).SingleOrDefaultAsync(); + + if (rv == null) + { + ModelState.AddModelError(" ", Localizer["Sys.LoginFailed"]); + return BadRequest(ModelState.GetErrorJson()); + } + LoginUserInfo user = new LoginUserInfo + { + ITCode = rv.itcode, + UserId = rv.id.ToString() + }; + await user.LoadBasicInfoAsync(Wtm); + Wtm.LoginUserInfo = user; + + var authService = HttpContext.RequestServices.GetService(typeof(ITokenService)) as ITokenService; + + var token = await authService.IssueTokenAsync(Wtm.LoginUserInfo); + return Content(JsonSerializer.Serialize(token), "application/json"); + } + + + private void LocalizeMenu(List menus) + { + if (menus == null) + { + return; + } + foreach (var menu in menus) + { + if (menu.Text?.StartsWith("MenuKey.") == true) + { + menu.Text = Localizer[menu.Text]; + } + } + } + + [HttpPost("[action]")] + [Public] + [ProducesResponseType(typeof(Token), StatusCodes.Status200OK)] + public async Task RefreshToken(string refreshToken) + { + var rv = await _authService.RefreshTokenAsync(refreshToken); + if (rv == null) + { + return BadRequest(); + } + else + { + return Ok(rv); + } + } + + [AllRights] + [HttpGet("[action]")] + public IActionResult CheckUserInfo() + { + if (Wtm.LoginUserInfo == null) + { + return BadRequest(); + } + else + { + var forapi = new LoginUserInfo(); + forapi.UserId = Wtm.LoginUserInfo.UserId; + forapi.ITCode = Wtm.LoginUserInfo.ITCode; + forapi.Name = Wtm.LoginUserInfo.Name; + forapi.Roles = Wtm.LoginUserInfo.Roles; + forapi.Groups = Wtm.LoginUserInfo.Groups; + forapi.PhotoId = Wtm.LoginUserInfo.PhotoId; + + var ms = new List(); + var roleIDs = Wtm.LoginUserInfo.Roles.Select(x => x.RoleCode).ToList(); + var data = DC.Set().Where(x => x.MethodName == null).ToList(); + var topdata = data.Where(x => x.ParentId == null && x.ShowOnMenu).ToList().FlatTree(x => x.DisplayOrder).Where(x => (x.IsInside == false || x.FolderOnly == true || string.IsNullOrEmpty(x.MethodName)) && x.ShowOnMenu).ToList(); + var allowed = DC.Set() + .AsNoTracking() + .Where(x => x.RoleCode != null && roleIDs.Contains(x.RoleCode)) + .Select(x => new { x.MenuItem.ID, x.MenuItem.Url }) + .ToList(); + + var allowedids = allowed.Select(x => x.ID).ToList(); + foreach (var item in topdata) + { + if (allowedids.Contains(item.ID)) + { + ms.Add(new SimpleMenuApi + { + Id = item.ID.ToString().ToLower(), + ParentId = item.ParentId?.ToString()?.ToLower(), + Text = item.PageName, + Url = item.Url, + Icon = item.Icon + }); + } + } + + LocalizeMenu(ms); + + List urls = new List(); + urls.AddRange(allowed.Select(x => x.Url).Distinct()); + urls.AddRange(GlobaInfo.AllModule.Where(x => x.IsApi == true).SelectMany(x => x.Actions).Where(x => (x.IgnorePrivillege == true || x.Module.IgnorePrivillege == true) && x.Url != null).Select(x => x.Url)); + forapi.Attributes = new Dictionary(); + forapi.Attributes.Add("Menus", ms); + forapi.Attributes.Add("Actions", urls); + return Ok(forapi); + } + } + + + [AllRights] + [HttpPost("[action]")] + public IActionResult ChangePassword(ChangePasswordVM vm) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + vm.DoChange(); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(); + } + } + + } + + [AllRights] + [HttpGet("[action]")] + public async Task Logout() + { + HttpContext.Session.Clear(); + await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); + HttpContext.Response.Redirect("/"); + } + + } + + public class SimpleLogin + { + public string Account { get; set; } + public string Password { get; set; } + } +} diff --git a/IoTGateway/Areas/_Admin/ApiControllers/ActionLogController.cs b/IoTGateway/Areas/_Admin/ApiControllers/ActionLogController.cs new file mode 100644 index 0000000..5a38063 --- /dev/null +++ b/IoTGateway/Areas/_Admin/ApiControllers/ActionLogController.cs @@ -0,0 +1,90 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.AspNetCore.Mvc; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.ActionLogVMs; + +namespace WalkingTec.Mvvm.Admin.Api +{ + [AuthorizeJwtWithCookie] + [ActionDescription("_Admin.ActionLogApi")] + [ApiController] + [Route("api/_[controller]")] + public class ActionLogController : BaseApiController + { + [ActionDescription("Sys.Search")] + [HttpPost("[action]")] + public IActionResult Search(ActionLogSearcher searcher) + { + if (ModelState.IsValid) + { + var vm = Wtm.CreateVM(passInit:true); + vm.Searcher = searcher; + return Content(vm.GetJson()); + } + else + { + return BadRequest(ModelState.GetErrorJson()); + } + } + + [ActionDescription("Sys.Get")] + [HttpGet("{id}")] + public ActionLogVM Get(Guid id) + { + var vm = Wtm.CreateVM(id); + return vm; + } + + [HttpPost("[action]")] + [ActionDescription("Sys.Delete")] + public IActionResult BatchDelete(string[] ids) + { + var vm = Wtm.CreateVM(); + if (ids != null && ids.Count() > 0) + { + vm.Ids = ids; + } + else + { + return Ok(); + } + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(ids.Count()); + } + } + + + [ActionDescription("Sys.Export")] + [HttpPost("[action]")] + public IActionResult ExportExcel(ActionLogSearcher searcher) + { + var vm = Wtm.CreateVM(); + vm.Searcher = searcher; + vm.SearcherMode = ListVMSearchModeEnum.Export; + return vm.GetExportData(); + } + + [ActionDescription("Sys.ExportByIds")] + [HttpPost("[action]")] + public IActionResult ExportExcelByIds(string[] ids) + { + var vm = Wtm.CreateVM(); + if (ids != null && ids.Count() > 0) + { + vm.Ids = new List(ids); + vm.SearcherMode = ListVMSearchModeEnum.CheckExport; + } + return vm.GetExportData(); + } + } +} diff --git a/IoTGateway/Areas/_Admin/ApiControllers/DataPrivilegeController.cs b/IoTGateway/Areas/_Admin/ApiControllers/DataPrivilegeController.cs new file mode 100644 index 0000000..6424496 --- /dev/null +++ b/IoTGateway/Areas/_Admin/ApiControllers/DataPrivilegeController.cs @@ -0,0 +1,146 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.DataPrivilegeVMs; + +namespace WalkingTec.Mvvm.Admin.Api +{ + [AuthorizeJwtWithCookie] + [ActionDescription("_Admin.DataPrivilegeApi")] + [ApiController] + [Route("api/_[controller]")] + public class DataPrivilegeController : BaseApiController + { + [ActionDescription("Sys.Search")] + [HttpPost("[action]")] + public string Search(DataPrivilegeSearcher searcher) + { + var vm = Wtm.CreateVM(); + vm.Searcher = searcher; + return vm.GetJson(); + } + + [ActionDescription("Sys.Get")] + [HttpGet("[action]")] + public DataPrivilegeVM Get(string TableName, string TargetId, DpTypeEnum DpType) + { + DataPrivilegeVM vm = null; + if (DpType == DpTypeEnum.User) + { + vm = Wtm.CreateVM(values: x => x.Entity.TableName == TableName && x.Entity.UserCode == TargetId && x.DpType == DpType); + } + else + { + vm = Wtm.CreateVM(values: x => x.Entity.TableName == TableName && x.Entity.GroupCode == TargetId && x.DpType == DpType); + } + return vm; + } + + [ActionDescription("Sys.Create")] + [HttpPost("[action]")] + public async Task Add(DataPrivilegeVM vm) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + await vm.DoAddAsync(); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(vm.Entity); + } + } + + } + + [ActionDescription("Sys.Edit")] + [HttpPut("[action]")] + public async Task Edit(DataPrivilegeVM vm) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + await vm.DoEditAsync(false); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(vm.Entity); + } + } + } + + + [HttpPost("[action]")] + [ActionDescription("Sys.Delete")] + public async Task Delete(SimpleDpModel dp) + { + DataPrivilegeVM vm = null; + if (dp.Type == DpTypeEnum.User) + { + vm = Wtm.CreateVM(values: x => x.Entity.TableName == dp.ModelName && x.Entity.UserCode == dp.Id && x.DpType == dp.Type); + } + else + { + vm = Wtm.CreateVM(values: x => x.Entity.TableName == dp.ModelName && x.Entity.GroupCode == dp.Id && x.DpType == dp.Type); + } + await vm.DoDeleteAsync(); + return Ok(1); + } + + + + [AllRights] + [HttpGet("[action]")] + public ActionResult GetPrivilegeByTableName(string table) + { + var AllItems = new List(); + var dps =Wtm.DataPrivilegeSettings.Where(x => x.ModelName == table).SingleOrDefault(); + if (dps != null) + { + AllItems = dps.GetItemList(Wtm); + } + return Ok(AllItems); + } + + [AllRights] + [HttpGet("[action]")] + public ActionResult GetPrivileges() + { + var rv = Wtm.DataPrivilegeSettings.ToListItems(x => x.PrivillegeName, x => x.ModelName); + return Ok(rv); + } + + [AllRights] + [HttpGet("[action]")] + public ActionResult GetUserGroups() + { + var rv = DC.Set().GetSelectListItems(Wtm, x => x.GroupName); + return Ok(rv); + } + } + + public class SimpleDpModel + { + public string ModelName { get; set; } + public string Id { get; set; } + public DpTypeEnum Type { get; set; } + } +} diff --git a/IoTGateway/Areas/_Admin/ApiControllers/FileApiController.cs b/IoTGateway/Areas/_Admin/ApiControllers/FileApiController.cs new file mode 100644 index 0000000..bc735f5 --- /dev/null +++ b/IoTGateway/Areas/_Admin/ApiControllers/FileApiController.cs @@ -0,0 +1,155 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.StaticFiles; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Support.FileHandlers; +using WalkingTec.Mvvm.Mvc; + +namespace WalkingTec.Mvvm.Admin.Api +{ + [AuthorizeJwtWithCookie] + [ApiController] + [Route("api/_file")] + [AllRights] + [ActionDescription("_Admin.FileApi")] + public class FileApiController : BaseApiController + { + [HttpPost("[action]")] + [ActionDescription("UploadFile")] + public IActionResult Upload([FromServices] WtmFileProvider fp, string sm = null, string groupName = null, string subdir=null,string extra = null,string csName= null) + { + var FileData = Request.Form.Files[0]; + var file = fp.Upload(FileData.FileName, FileData.Length, FileData.OpenReadStream(),groupName,subdir,extra,sm,Wtm.CreateDC(cskey:csName)); + return Ok(new { Id = file.GetID(), Name = file.FileName }); + } + + [HttpPost("[action]")] + [ActionDescription("UploadPic")] + public IActionResult UploadImage([FromServices] WtmFileProvider fp,int? width = null, int? height = null, string sm = null, string groupName = null, string subdir = null, string extra = null, string csName = null) + { + if (width == null && height == null) + { + return Upload(fp,sm,groupName,csName); + } + var FileData = Request.Form.Files[0]; + + Image oimage = Image.FromStream(FileData.OpenReadStream()); + if (oimage == null) + { + return BadRequest(Localizer["Sys.UploadFailed"]); + } + if (width == null) + { + width = height * oimage.Width / oimage.Height; + } + if (height == null) + { + height = width * oimage.Height / oimage.Width; + } + MemoryStream ms = new MemoryStream(); + oimage.GetThumbnailImage(width.Value, height.Value, null, IntPtr.Zero).Save(ms, System.Drawing.Imaging.ImageFormat.Png); + ms.Position = 0; + var file = fp.Upload(FileData.FileName, FileData.Length, ms, groupName,subdir, extra, sm, Wtm.CreateDC(cskey: csName)); + oimage.Dispose(); + ms.Dispose(); + + if (file != null) + { + return Ok(new { Id = file.GetID(), Name = file.FileName }); + } + return BadRequest(Localizer["Sys.UploadFailed"]); + + } + + [HttpGet("[action]/{id}")] + [ActionDescription("GetFileName")] + public IActionResult GetFileName([FromServices] WtmFileProvider fp, string id, string csName = null) + { + return Ok(fp.GetFileName(id, ConfigInfo.CreateDC(csName))); + } + + [HttpGet("[action]/{id}")] + [ActionDescription("GetFile")] + public async Task GetFile([FromServices] WtmFileProvider fp, string id, string csName = null, int? width = null, int? height = null) + { + var file = fp.GetFile(id, true, ConfigInfo.CreateDC(csName)); + + + if (file == null) + { + return BadRequest(Localizer["Sys.FileNotFound"]); + } + try + { + if (width != null || height != null) + { + Image oimage = Image.FromStream(file.DataStream); + if (oimage != null) + { + if (width == null) + { + width = oimage.Width * height / oimage.Height; + } + if (height == null) + { + height = oimage.Height * width / oimage.Width; + } + var ms = new MemoryStream(); + oimage.GetThumbnailImage(width.Value, height.Value, null, IntPtr.Zero).Save(ms, System.Drawing.Imaging.ImageFormat.Png); + ms.Position = 0; + await ms?.CopyToAsync(Response.Body); + file.DataStream.Dispose(); + ms.Dispose(); + oimage.Dispose(); + return new EmptyResult(); + } + } + } + catch { } + + var ext = file.FileExt.ToLower(); + if (ext == "mp4") + { + return File(file.DataStream, "video/mpeg4", enableRangeProcessing: true); + } + else + { + await file.DataStream?.CopyToAsync(Response.Body); + file.DataStream.Dispose(); + return new EmptyResult(); + } + } + + [HttpGet("[action]/{id}")] + [ActionDescription("DownloadFile")] + public IActionResult DownloadFile([FromServices] WtmFileProvider fp, string id, string csName = null) + { + var file = fp.GetFile(id, true, ConfigInfo.CreateDC(csName)); + if (file == null) + { + return BadRequest(Localizer["Sys.FileNotFound"]); + } + var ext = file.FileExt.ToLower(); + var provider = new FileExtensionContentTypeProvider(); + string contentType; + if (!provider.TryGetContentType(file.FileName, out contentType)) + { + contentType = "application/octet-stream"; + } + return File(file.DataStream, contentType, file.FileName ?? (Guid.NewGuid().ToString() + ext)); + } + + [HttpGet("[action]/{id}")] + [ActionDescription("DeleteFile")] + public IActionResult DeletedFile([FromServices] WtmFileProvider fp, string id, string csName = null) + { + fp.DeleteFile(id, ConfigInfo.CreateDC(csName)); + return Ok(); + } + } +} diff --git a/IoTGateway/Areas/_Admin/ApiControllers/FrameworkGroupController.cs b/IoTGateway/Areas/_Admin/ApiControllers/FrameworkGroupController.cs new file mode 100644 index 0000000..133931d --- /dev/null +++ b/IoTGateway/Areas/_Admin/ApiControllers/FrameworkGroupController.cs @@ -0,0 +1,166 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs; + +namespace WalkingTec.Mvvm.Admin.Api +{ + [AuthorizeJwtWithCookie] + [ActionDescription("_Admin.GroupApi")] + [ApiController] + [Route("api/_[controller]")] + public class FrameworkGroupController : BaseApiController + { + [ActionDescription("Sys.Search")] + [HttpPost("[action]")] + public string Search(FrameworkGroupSearcher searcher) + { + var vm = Wtm.CreateVM(); + vm.Searcher = searcher; + return vm.GetJson(); + } + + [ActionDescription("Sys.Get")] + [HttpGet("{id}")] + public FrameworkGroupVM Get(Guid id) + { + var vm = Wtm.CreateVM(id); + return vm; + } + + [ActionDescription("Sys.Create")] + [HttpPost("[action]")] + public IActionResult Add(FrameworkGroupVM vm) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + vm.DoAdd(); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(vm.Entity); + } + } + + } + + [ActionDescription("Sys.Edit")] + [HttpPut("[action]")] + public IActionResult Edit(FrameworkGroupVM vm) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + vm.DoEdit(false); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(vm.Entity); + } + } + } + + [HttpPost("BatchDelete")] + [ActionDescription("Sys.Delete")] + public async Task BatchDelete(string[] ids) + { + var vm = Wtm.CreateVM(); + List GroupCode = new List(); + if (ids != null && ids.Count() > 0) + { + GroupCode = DC.Set().CheckIDs(new List(ids)).Select(x => x.GroupCode).ToList(); + vm.Ids = ids; + } + else + { + return Ok(); + } + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + var gr = DC.Set().Where(x => GroupCode.Contains(x.GroupCode)).ToList(); + var itcodes = gr.Select(x => x.UserCode).ToArray(); + DC.Set().RemoveRange(gr); + DC.SaveChanges(); + await Wtm.RemoveUserCache(itcodes); + return Ok(ids.Count()); + } + } + + [ActionDescription("Sys.Export")] + [HttpPost("[action]")] + public IActionResult ExportExcel(FrameworkGroupSearcher searcher) + { + var vm = Wtm.CreateVM(); + vm.Searcher = searcher; + vm.SearcherMode = ListVMSearchModeEnum.Export; + return vm.GetExportData(); + } + + [ActionDescription("Sys.ExportByIds")] + [HttpPost("[action]")] + public IActionResult ExportExcelByIds(string[] ids) + { + var vm = Wtm.CreateVM(); + if (ids != null && ids.Count() > 0) + { + vm.Ids = new List(ids); + vm.SearcherMode = ListVMSearchModeEnum.CheckExport; + } + return vm.GetExportData(); + } + + [ActionDescription("Sys.DownloadTemplate")] + [HttpGet("[action]")] + public IActionResult GetExcelTemplate() + { + var vm = Wtm.CreateVM(); + var qs = new Dictionary(); + foreach (var item in Request.Query.Keys) + { + qs.Add(item, Request.Query[item]); + } + vm.SetParms(qs); + var data = vm.GenerateTemplate(out string fileName); + return File(data, "application/vnd.ms-excel", fileName); + } + + [ActionDescription("Sys.Import")] + [HttpPost("[action]")] + public ActionResult Import(FrameworkGroupImportVM vm) + { + + if (vm.ErrorListVM.EntityList.Count > 0 || !vm.BatchSaveData()) + { + return BadRequest(vm.GetErrorJson()); + } + else + { + return Ok(vm.EntityList.Count); + } + } + + } +} diff --git a/IoTGateway/Areas/_Admin/ApiControllers/FrameworkMenuController.cs b/IoTGateway/Areas/_Admin/ApiControllers/FrameworkMenuController.cs new file mode 100644 index 0000000..3495bda --- /dev/null +++ b/IoTGateway/Areas/_Admin/ApiControllers/FrameworkMenuController.cs @@ -0,0 +1,186 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Core.Support.Json; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs; + +namespace WalkingTec.Mvvm.Admin.Api +{ + [AuthorizeJwtWithCookie] + [ActionDescription("_Admin.MenuApi")] + [ApiController] + [Route("api/_[controller]")] + public class FrameworkMenuController : BaseApiController + { + [ActionDescription("Sys.Search")] + [HttpPost("[action]")] + public string Search(BaseSearcher searcher) + { + var vm = Wtm.CreateVM(); + vm.Searcher = searcher; + return vm.GetJson(); + } + + [ActionDescription("Sys.Get")] + [HttpGet("{id}")] + public FrameworkMenuVM2 Get(Guid id) + { + var vm = Wtm.CreateVM(id); + return vm; + } + + [ActionDescription("Sys.Create")] + [HttpPost("[action]")] + public IActionResult Add(FrameworkMenuVM2 vm) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + vm.DoAdd(); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(vm.Entity); + } + } + + } + + [ActionDescription("Sys.Edit")] + [HttpPut("[action]")] + public IActionResult Edit(FrameworkMenuVM2 vm) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + vm.DoEdit(true); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(vm.Entity); + } + } + } + + [HttpPost("BatchDelete")] + [ActionDescription("Sys.Delete")] + public IActionResult BatchDelete(string[] ids) + { + var vm = Wtm.CreateVM(); + if (ids != null && ids.Count() > 0) + { + vm.Ids = ids; + } + else + { + return Ok(); + } + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(ids.Count()); + } + } + + [ActionDescription("Sys.Export")] + [HttpPost("[action]")] + public IActionResult ExportExcel(BaseSearcher searcher) + { + var vm = Wtm.CreateVM(); + vm.Searcher = searcher; + vm.SearcherMode = ListVMSearchModeEnum.Export; + return vm.GetExportData(); + } + + [ActionDescription("Sys.ExportByIds")] + [HttpPost("[action]")] + public IActionResult ExportExcelByIds(string[] ids) + { + var vm = Wtm.CreateVM(); + if (ids != null && ids.Count() > 0) + { + vm.Ids = new List(ids); + vm.SearcherMode = ListVMSearchModeEnum.CheckExport; + } + return vm.GetExportData(); + } + + [ActionDescription("_Admin.UnsetPages")] + [HttpGet("[action]")] + public string UnsetPages() + { + var vm = Wtm.CreateVM(); + return vm.GetJson(); + } + + [ActionDescription("_Admin.RefreshMenu")] + [HttpGet("[action]")] + public async Task RefreshMenu() + { + Cache.Delete("FFMenus"); + var userids = DC.Set().Select(x => x.ID.ToString().ToLower()).ToArray(); + await Wtm.RemoveUserCache(userids); + return Ok(Localizer["Sys.OprationSuccess"]); + } + + [ActionDescription("GetActionsByModelId")] + [HttpGet("GetActionsByModel")] + [AllRights] + public ActionResult GetActionsByModel(string ModelName) + { + var m = GlobaInfo.AllModule.Where(x => x.IsApi == true && x.FullName.ToLower() == ModelName.ToLower()).SelectMany(x => x.Actions).ToList(); + List toremove = new List(); + foreach (var item in m) + { + if (item.IgnorePrivillege == true || item.Module.IgnorePrivillege == true) + { + toremove.Add(item); + } + } + toremove.ForEach(x => m.Remove(x)); + var actions = m.ToListItems(y => y.ActionName, y => y.MethodName); + actions.ForEach(x => x.Selected = true); + return Ok(actions); + } + + [ActionDescription("GetFolders")] + [HttpGet("GetFolders")] + [AllRights] + public ActionResult GetFolders() + { + var AllParents = DC.Set().Where(x => x.FolderOnly == true).OrderBy(x => x.DisplayOrder).GetSelectListItems(Wtm, x => x.PageName); + foreach (var p in AllParents) + { + if (p.Text.StartsWith("MenuKey.")) + { + p.Text = Localizer[p.Text]; + } + } + + return Ok(AllParents); + } + + } + +} diff --git a/IoTGateway/Areas/_Admin/ApiControllers/FrameworkRoleController.cs b/IoTGateway/Areas/_Admin/ApiControllers/FrameworkRoleController.cs new file mode 100644 index 0000000..e2fbd18 --- /dev/null +++ b/IoTGateway/Areas/_Admin/ApiControllers/FrameworkRoleController.cs @@ -0,0 +1,198 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs; + +namespace WalkingTec.Mvvm.Admin.Api +{ + [AuthorizeJwtWithCookie] + [ActionDescription("_Admin.RoleApi")] + [ApiController] + [Route("api/_[controller]")] + public class FrameworkRoleController : BaseApiController + { + [ActionDescription("Sys.Search")] + [HttpPost("[action]")] + public string Search(FrameworkRoleSearcher searcher) + { + var vm = Wtm.CreateVM(); + vm.Searcher = searcher; + return vm.GetJson(); + } + + [ActionDescription("Sys.Get")] + [HttpGet("{id}")] + public FrameworkRoleVM Get(Guid id) + { + var vm = Wtm.CreateVM(id); + return vm; + } + + [ActionDescription("GetPageActions")] + [HttpGet("[action]/{id}")] + [AllRights] + public FrameworkRoleMDVM2 GetPageActions(Guid id) + { + var vm = Wtm.CreateVM(id); + return vm; + } + + [ActionDescription("_Admin.PageFunction")] + [HttpPut("[action]")] + public async Task EditPrivilege(FrameworkRoleMDVM2 vm) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + await vm.DoChangeAsync(); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(vm.Entity); + } + } + } + + [ActionDescription("Sys.Create")] + [HttpPost("[action]")] + public IActionResult Add(FrameworkRoleVM vm) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + vm.DoAdd(); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(vm.Entity); + } + } + + } + + [ActionDescription("Sys.Edit")] + [HttpPut("[action]")] + public IActionResult Edit(FrameworkRoleVM vm) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + vm.DoEdit(false); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(vm.Entity); + } + } + } + + [HttpPost("BatchDelete")] + [ActionDescription("Sys.Delete")] + public async Task BatchDelete(string[] ids) + { + var vm = Wtm.CreateVM(); + List RoleCode = new List(); + if (ids != null && ids.Count() > 0) + { + RoleCode = DC.Set().CheckIDs(new List(ids)).Select(x => x.RoleCode).ToList(); + vm.Ids = ids; + } + else + { + return Ok(); + } + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + var ur = DC.Set().Where(x => RoleCode.Contains(x.RoleCode)).ToList(); + var itcodes = ur.Select(x => x.UserCode).ToArray(); + DC.Set().RemoveRange(ur); + DC.SaveChanges(); + await Wtm.RemoveUserCache(itcodes); + return Ok(ids.Count()); + } + } + + [ActionDescription("Sys.Export")] + [HttpPost("[action]")] + public IActionResult ExportExcel(FrameworkRoleSearcher searcher) + { + var vm = Wtm.CreateVM(); + vm.Searcher = searcher; + vm.SearcherMode = ListVMSearchModeEnum.Export; + return vm.GetExportData(); + } + + [ActionDescription("Sys.ExportByIds")] + [HttpPost("[action]")] + public IActionResult ExportExcelByIds(string[] ids) + { + var vm = Wtm.CreateVM(); + if (ids != null && ids.Count() > 0) + { + vm.Ids = new List(ids); + vm.SearcherMode = ListVMSearchModeEnum.CheckExport; + } + return vm.GetExportData(); + } + + [ActionDescription("Sys.DownloadTemplate")] + [HttpGet("[action]")] + public IActionResult GetExcelTemplate() + { + var vm = Wtm.CreateVM(); + var qs = new Dictionary(); + foreach (var item in Request.Query.Keys) + { + qs.Add(item, Request.Query[item]); + } + vm.SetParms(qs); + var data = vm.GenerateTemplate(out string fileName); + return File(data, "application/vnd.ms-excel", fileName); + } + + [ActionDescription("Sys.Import")] + [HttpPost("[action]")] + public ActionResult Import(FrameworkRoleImportVM vm) + { + + if (vm.ErrorListVM.EntityList.Count > 0 || !vm.BatchSaveData()) + { + return BadRequest(vm.GetErrorJson()); + } + else + { + return Ok(vm.EntityList.Count); + } + } + + + } +} diff --git a/IoTGateway/Areas/_Admin/ApiControllers/FrameworkUserController.cs b/IoTGateway/Areas/_Admin/ApiControllers/FrameworkUserController.cs new file mode 100644 index 0000000..2aa2b05 --- /dev/null +++ b/IoTGateway/Areas/_Admin/ApiControllers/FrameworkUserController.cs @@ -0,0 +1,200 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms; + +namespace WalkingTec.Mvvm.Admin.Api +{ + [AuthorizeJwtWithCookie] + [ActionDescription("_Admin.UserApi")] + [ApiController] + [Route("api/_FrameworkUser")] + public class FrameworkUserController : BaseApiController + { + [ActionDescription("Sys.Search")] + [HttpPost("[action]")] + public string Search(FrameworkUserSearcher searcher) + { + var vm = Wtm.CreateVM(); + vm.Searcher = searcher; + return vm.GetJson(); + } + + [ActionDescription("Sys.Get")] + [HttpGet("{id}")] + public FrameworkUserVM Get(Guid id) + { + var vm = Wtm.CreateVM(id, passInit:true); + return vm; + } + + [ActionDescription("Sys.Create")] + [HttpPost("[action]")] + public async Task Add(FrameworkUserVM vm) + { + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + await vm.DoAddAsync(); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(vm.Entity); + } + } + + } + + [ActionDescription("Sys.Edit")] + [HttpPut("[action]")] + public async Task Edit(FrameworkUserVM vm) + { + ModelState.Remove("Entity.Password"); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + await vm.DoEditAsync(false); + if (!ModelState.IsValid) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + return Ok(vm.Entity); + } + } + } + + [HttpPost("BatchDelete")] + [ActionDescription("Sys.Delete")] + public async Task BatchDelete(string[] ids) + { + var vm = Wtm.CreateVM(); + List itcode = new List(); + if (ids != null && ids.Count() > 0) + { + vm.Ids = ids; + itcode = DC.Set().CheckIDs(new List(ids)).Select(x => x.ITCode).ToList(); + } + else + { + return Ok(); + } + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return BadRequest(ModelState.GetErrorJson()); + } + else + { + using (var tran = DC.BeginTransaction()) + { + try + { + var ur = DC.Set().Where(x => itcode.Contains(x.UserCode)); + DC.Set().RemoveRange(ur); + var ug = DC.Set().Where(x => itcode.Contains(x.UserCode)); + DC.Set().RemoveRange(ug); + DC.SaveChanges(); + tran.Commit(); + } + catch + { + tran.Rollback(); + } + } + + await Wtm.RemoveUserCache(itcode.ToArray()); + return Ok(ids.Count()); + } + } + + [ActionDescription("Sys.Export")] + [HttpPost("[action]")] + public IActionResult ExportExcel(FrameworkUserSearcher searcher) + { + var vm = Wtm.CreateVM(); + vm.Searcher = searcher; + vm.SearcherMode = ListVMSearchModeEnum.Export; + return vm.GetExportData(); + } + + [ActionDescription("Sys.ExportByIds")] + [HttpPost("[action]")] + public IActionResult ExportExcelByIds(string[] ids) + { + var vm = Wtm.CreateVM(); + if (ids != null && ids.Count() > 0) + { + vm.Ids = new List(ids); + vm.SearcherMode = ListVMSearchModeEnum.CheckExport; + } + return vm.GetExportData(); + } + + [ActionDescription("Sys.DownloadTemplate")] + [HttpGet("[action]")] + public IActionResult GetExcelTemplate() + { + var vm = Wtm.CreateVM(); + var qs = new Dictionary(); + if (Request != null) + { + foreach (var item in Request.Query.Keys) + { + qs.Add(item, Request.Query[item]); + } + } + vm.SetParms(qs); + var data = vm.GenerateTemplate(out string fileName); + return File(data, "application/vnd.ms-excel", fileName); + } + + [ActionDescription("Sys.Import")] + [HttpPost("[action]")] + public ActionResult Import(FrameworkUserImportVM vm) + { + + if (vm.ErrorListVM.EntityList.Count > 0 || !vm.BatchSaveData()) + { + return BadRequest(vm.GetErrorJson()); + } + else + { + return Ok(vm.EntityList.Count); + } + } + + [HttpGet("GetFrameworkRoles")] + [ActionDescription("GetRoles")] + [AllRights] + public ActionResult GetFrameworkRoles() + { + return Ok(DC.Set().GetSelectListItems(Wtm, x => x.RoleName)); + } + + [HttpGet("GetFrameworkGroups")] + [ActionDescription("GetGroups")] + [AllRights] + public ActionResult GetFrameworkGroups() + { + return Ok(DC.Set().GetSelectListItems(Wtm, x => x.GroupName)); + } + + } +} diff --git a/IoTGateway/Areas/_Admin/Controllers/ActionLogController.cs b/IoTGateway/Areas/_Admin/Controllers/ActionLogController.cs new file mode 100644 index 0000000..a414cf5 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Controllers/ActionLogController.cs @@ -0,0 +1,80 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.ActionLogVMs; + +namespace WalkingTec.Mvvm.Mvc.Admin.Controllers +{ + [Area("_Admin")] + [ActionDescription("MenuKey.ActionLog")] + [FixConnection(CsName = "defaultlog")] + public class ActionLogController : BaseController + { + [ActionDescription("Sys.Search")] + public IActionResult Index() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [ActionDescription("Sys.Search")] + [HttpPost] + public string Search(ActionLogSearcher searcher) + { + var vm = Wtm.CreateVM(passInit:true); + if (ModelState.IsValid) + { + vm.Searcher = searcher; + return vm.GetJson(false); + } + else + { + return vm.GetError(); + } + } + + + [HttpGet] + [ActionDescription("Sys.Details")] + public IActionResult Details(string id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Export")] + [HttpPost] + public IActionResult ExportExcel(ActionLogListVM vm) + { + return vm.GetExportData(); + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult BatchDelete(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult DoBatchDelete(ActionLogBatchVM vm, IFormCollection nouse) + { + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return PartialView("BatchDelete", vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.BatchDeleteSuccess", vm.Ids.Length]); + } + } + + } +} diff --git a/IoTGateway/Areas/_Admin/Controllers/DataPrivilegeController.cs b/IoTGateway/Areas/_Admin/Controllers/DataPrivilegeController.cs new file mode 100644 index 0000000..c7c077c --- /dev/null +++ b/IoTGateway/Areas/_Admin/Controllers/DataPrivilegeController.cs @@ -0,0 +1,136 @@ +// WTM默认页面 Wtm buidin page +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.AspNetCore.Mvc; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.DataPrivilegeVMs; +using WalkingTec.Mvvm.Core.Extensions; +using System.Threading.Tasks; + +namespace WalkingTec.Mvvm.Mvc.Admin.Controllers +{ + [Area("_Admin")] + [ActionDescription("MenuKey.DataPrivilege")] + public class DataPrivilegeController : BaseController + { + [ActionDescription("Sys.Search")] + public ActionResult Index() + { + var vm = Wtm.CreateVM(); + vm.Searcher.TableNames = Wtm.DataPrivilegeSettings.ToListItems(x => x.PrivillegeName, x => x.ModelName); + return PartialView(vm); + } + + [HttpPost] + public ActionResult Index(DataPrivilegeListVM vm) + { + vm.Searcher.TableNames = Wtm.DataPrivilegeSettings.ToListItems(x => x.PrivillegeName, x => x.ModelName); + return PartialView(vm); + } + + + [ActionDescription("Sys.Search")] + [HttpPost] + public string Search(DataPrivilegeSearcher searcher) + { + var vm = Wtm.CreateVM(passInit: true); + if (ModelState.IsValid) + { + vm.Searcher = searcher; + return vm.GetJson(false); + } + else + { + return vm.GetError(); + } + } + + [ActionDescription("Sys.Create")] + public ActionResult Create(DpTypeEnum Type) + { + var vm = Wtm.CreateVM(values:x=>x.DpType == Type); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Create")] + public async Task Create(DataPrivilegeVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + await vm.DoAddAsync(); + return FFResult().CloseDialog().RefreshGrid(); + } + } + + [ActionDescription("Sys.Edit")] + public ActionResult Edit(string ModelName, string Id, DpTypeEnum Type) + { + DataPrivilegeVM vm = null; + if (Type == DpTypeEnum.User) + { + vm = Wtm.CreateVM(values: x => x.Entity.TableName == ModelName && x.Entity.UserCode == Id && x.DpType == Type); + } + else + { + vm = Wtm.CreateVM(values: x => x.Entity.TableName == ModelName && x.Entity.GroupCode == Id && x.DpType == Type); + } + return PartialView(vm); + } + + [ActionDescription("Sys.Edit")] + [HttpPost] + public async Task Edit(DataPrivilegeVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + await vm.DoEditAsync(); + return FFResult().CloseDialog().RefreshGrid(); + } + } + + [ActionDescription("Sys.Delete")] + public async Task Delete(string ModelName, string Id, DpTypeEnum Type) + { + DataPrivilegeVM vm = null; + if (Type == DpTypeEnum.User) + { + vm = Wtm.CreateVM(values: x => x.Entity.TableName == ModelName && x.Entity.UserCode == Id && x.DpType == Type); + } + else + { + vm = Wtm.CreateVM(values: x => x.Entity.TableName == ModelName && x.Entity.GroupCode == Id && x.DpType == Type); + } + await vm.DoDeleteAsync(); + return FFResult().RefreshGrid(); + } + + [AllRights] + public ActionResult GetPrivilegeByTableName(string table) + { + var AllItems = new List(); + var dps = Wtm.DataPrivilegeSettings.Where(x => x.ModelName == table).SingleOrDefault(); + if (dps != null) + { + AllItems = dps.GetItemList(Wtm); + } + return JsonMore(AllItems); + } + + [ActionDescription("Sys.Export")] + [HttpPost] + public IActionResult ExportExcel(DataPrivilegeListVM vm) + { + return vm.GetExportData(); + } + } +} diff --git a/IoTGateway/Areas/_Admin/Controllers/FrameworkGroupController.cs b/IoTGateway/Areas/_Admin/Controllers/FrameworkGroupController.cs new file mode 100644 index 0000000..6155759 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Controllers/FrameworkGroupController.cs @@ -0,0 +1,185 @@ +// WTM默认页面 Wtm buidin page +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs; + +namespace WalkingTec.Mvvm.Mvc.Admin.Controllers +{ + [Area("_Admin")] + [ActionDescription("MenuKey.GroupManagement")] + public class FrameworkGroupController : BaseController + { + #region 查询 + [ActionDescription("Sys.Search")] + public ActionResult Index() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [ActionDescription("Sys.Search")] + [HttpPost] + public string Search(FrameworkGroupSearcher searcher) + { + var vm = Wtm.CreateVM(passInit: true); + if (ModelState.IsValid) + { + vm.Searcher = searcher; + return vm.GetJson(false); + } + else + { + return vm.GetError(); + } + } + #endregion + + [ActionDescription("Sys.Create")] + public ActionResult Create() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Create")] + public ActionResult Create(FrameworkGroupVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoAdd(); + return FFResult().CloseDialog().RefreshGrid(); + } + } + + [ActionDescription("Sys.Edit")] + public ActionResult Edit(Guid id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Edit")] + [ValidateFormItemOnly] + public ActionResult Edit(FrameworkGroupVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoEdit(); + return FFResult().CloseDialog().RefreshGrid(); + } + } + + [ActionDescription("Sys.Delete")] + public ActionResult Delete(Guid id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Delete")] + public async Task Delete(Guid id, IFormCollection noUse) + { + var vm = Wtm.CreateVM(id); + await vm.DoDeleteAsync(); + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult BatchDelete(Guid[] ids) + { + var vm = Wtm.CreateVM(Ids: ids); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public async Task DoBatchDelete(FrameworkGroupBatchVM vm, IFormCollection noUse) + { + List GroupCode = DC.Set().CheckIDs(new List(vm.Ids)).Select(x => x.GroupCode).ToList(); + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return PartialView("BatchDelete", vm); + } + else + { + var gr = DC.Set().Where(x => GroupCode.Contains(x.GroupCode)).ToList(); + var itcodes = gr.Select(x => x.UserCode).ToArray(); + DC.Set().RemoveRange(gr); + DC.SaveChanges(); + await Wtm.RemoveUserCache(itcodes); + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.OprationSuccess"]); + } + } + + [ActionDescription("Sys.Import")] + public ActionResult Import() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Import")] + public ActionResult Import(FrameworkGroupImportVM vm, IFormCollection nouse) + { + if (vm.ErrorListVM.EntityList.Count > 0 || !vm.BatchSaveData()) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.ImportSuccess", vm.EntityList.Count.ToString()]); + } + } + + [ActionDescription("_Admin.DataPrivilege")] + public PartialViewResult DataFunction(string groupcode) + { + var role = Wtm.CreateVM(values: x=>x.GroupCode == groupcode); + return PartialView(role); + } + + [ActionDescription("_Admin.DataPrivilege")] + [HttpPost] + public ActionResult DataFunction(FrameworkGroupMDVM vm, IFormCollection noUse) + { + vm.DoChange(); + return FFResult().CloseDialog().Alert(Localizer["Sys.OprationSuccess"]); + } + + [ActionDescription("Sys.Export")] + [HttpPost] + public IActionResult ExportExcel(FrameworkGroupListVM vm) + { + return vm.GetExportData(); + } + + } + +} diff --git a/IoTGateway/Areas/_Admin/Controllers/FrameworkMenuController.cs b/IoTGateway/Areas/_Admin/Controllers/FrameworkMenuController.cs new file mode 100644 index 0000000..5987081 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Controllers/FrameworkMenuController.cs @@ -0,0 +1,215 @@ +// WTM默认页面 Wtm buidin page +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Caching.Memory; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs; + +namespace WalkingTec.Mvvm.Mvc.Admin.Controllers +{ + [Area("_Admin")] + [ActionDescription("MenuKey.MenuMangement")] + public class FrameworkMenuController : BaseController + { + [ActionDescription("Sys.Search")] + public ActionResult Index() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [ActionDescription("Sys.Search")] + [HttpPost] + public string Search(FrameworkMenuSearcher searcher) + { + var vm = Wtm.CreateVM(passInit: true); + if (ModelState.IsValid) + { + vm.Searcher = searcher; + return vm.GetJson(false); + } + else + { + return vm.GetError(); + } + } + + [ActionDescription("Sys.Create")] + public ActionResult Create(Guid? id) + { + var vm = Wtm.CreateVM(); + if (id != null) + { + vm.Entity.ParentId = id; + } + vm.Entity.IsInside = true; + vm.Entity.IsPublic = false; + vm.Entity.FolderOnly = false; + vm.Entity.ShowOnMenu = true; + return PartialView(vm); + } + + [HttpPost] + [Public] + [ActionDescription("Sys.Create")] + public ActionResult Create(FrameworkMenuVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoAdd(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + } + + [ActionDescription("Sys.Edit")] + public ActionResult Edit(Guid id) + { + var vm = Wtm.CreateVM(id); + vm.IconSelectItems = !string.IsNullOrEmpty(vm.IconFont) && IconFontsHelper + .IconFontDicItems + .ContainsKey(vm.IconFont) + ? IconFontsHelper + .IconFontDicItems[vm.IconFont] + .Select(x => new ComboSelectListItem() + { + Text = x.Text, + Value = x.Value, + Icon = x.Icon + }).ToList() + : new List(); + + return PartialView(vm); + } + + [ActionDescription("Sys.Edit")] + [HttpPost] + public ActionResult Edit(FrameworkMenuVM vm) + { + if (!ModelState.IsValid) + { + vm.IconSelectItems = !string.IsNullOrEmpty(vm.IconFont) && IconFontsHelper + .IconFontDicItems + .ContainsKey(vm.IconFont) + ? IconFontsHelper + .IconFontDicItems[vm.IconFont] + .Select(x => new ComboSelectListItem() + { + Text = x.Text, + Value = x.Value, + Icon = x.Icon + }).ToList() + : new List(); + return PartialView(vm); + } + else + { + vm.DoEdit(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + } + + [ActionDescription("Sys.Delete")] + public ActionResult Delete(Guid id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Delete")] + [HttpPost] + public ActionResult Delete(Guid id, IFormCollection noUser) + { + var vm = Wtm.CreateVM(id); + vm.DoDelete(); + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + + [ActionDescription("Sys.Details")] + public PartialViewResult Details(Guid id) + { + var v = Wtm.CreateVM(id); + return PartialView("Details", v); + } + + [ActionDescription("_Admin.UnsetPages")] + public ActionResult UnsetPages() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [ActionDescription("_Admin.RefreshMenu")] + public async Task RefreshMenu() + { + Cache.Delete("FFMenus"); + var userids = DC.Set().Select(x => x.ID.ToString().ToLower()).ToArray(); + await Wtm.RemoveUserCache(userids); + return FFResult().Alert(Localizer["Sys.OprationSuccess"]); + } + + [ActionDescription("GetActionsByModelId")] + [AllRights] + public JsonResult GetActionsByModelId(string Id) + { + var modules = Wtm.GlobaInfo.AllModule; + var m =Utils.ResetModule(modules); + + List AllActions = new List(); + var action = m.Where(x => x.FullName == Id)?.FirstOrDefault().Actions; + if (action != null) + { + var mList = action?.Where(x => x.MethodName != "Index" && x.IgnorePrivillege == false)?.ToList(); + AllActions = mList.ToListItems(y => y.ActionName, y => y.Url); + AllActions.ForEach(x => x.Selected = true); + } + + return JsonMore(AllActions); + } + + [HttpGet] + [ResponseCache(Duration = 3600)] + [AllRights] + public IActionResult GetIconFontItems(string id) + { + if (!string.IsNullOrEmpty(id) && IconFontsHelper.IconFontDicItems.ContainsKey(id)) + return JsonMore(IconFontsHelper.IconFontDicItems[id]); + else + return JsonMore(null); + } + + } + +} diff --git a/IoTGateway/Areas/_Admin/Controllers/FrameworkRoleController.cs b/IoTGateway/Areas/_Admin/Controllers/FrameworkRoleController.cs new file mode 100644 index 0000000..8d4004e --- /dev/null +++ b/IoTGateway/Areas/_Admin/Controllers/FrameworkRoleController.cs @@ -0,0 +1,188 @@ +// WTM默认页面 Wtm buidin page +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs; + +namespace WalkingTec.Mvvm.Mvc.Admin.Controllers +{ + [Area("_Admin")] + [ActionDescription("MenuKey.RoleManagement")] + public class FrameworkRoleController : BaseController + { + [ActionDescription("Sys.Search")] + public ActionResult Index() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + [ActionDescription("Sys.Search")] + [HttpPost] + public string Search(FrameworkRoleSearcher searcher) + { + var vm = Wtm.CreateVM(passInit: true); + if (ModelState.IsValid) + { + vm.Searcher = searcher; + return vm.GetJson(false); + } + else + { + return vm.GetError(); + } + } + + [ActionDescription("Sys.Create")] + public ActionResult Create() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Create")] + public ActionResult Create(FrameworkRoleVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoAdd(); + return FFResult().CloseDialog().RefreshGrid(); + } + } + + [ActionDescription("Sys.Edit")] + public ActionResult Edit(Guid id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Edit")] + [ValidateFormItemOnly] + public ActionResult Edit(FrameworkRoleVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoEdit(); + return FFResult().CloseDialog().RefreshGrid(); + } + } + + [ActionDescription("Sys.Delete")] + public ActionResult Delete(Guid id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Delete")] + public async Task Delete(Guid id, IFormCollection noUse) + { + var vm = Wtm.CreateVM(id); + await vm.DoDeleteAsync(); + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult BatchDelete(Guid[] ids) + { + var vm = Wtm.CreateVM(Ids: ids); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public async Task DoBatchDelete(FrameworkRoleBatchVM vm, IFormCollection noUse) + { + List RoleCode = DC.Set().CheckIDs(new List(vm.Ids)).Select(x => x.RoleCode).ToList(); + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return PartialView("BatchDelete", vm); + } + else + { + var ur = DC.Set().Where(x => RoleCode.Contains(x.RoleCode)).ToList(); + var itcodes = ur.Select(x => x.UserCode).ToArray(); + DC.Set().RemoveRange(ur); + DC.SaveChanges(); + await Wtm.RemoveUserCache(itcodes); + return FFResult().CloseDialog().RefreshGrid(); + } + } + + [ActionDescription("Sys.Import")] + public ActionResult Import() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Import")] + public ActionResult Import(FrameworkRoleImportVM vm, IFormCollection nouse) + { + if (vm.ErrorListVM.EntityList.Count > 0 || !vm.BatchSaveData()) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.ImportSuccess", vm.EntityList.Count.ToString()]); + } + } + + [ActionDescription("Sys.Details")] + public PartialViewResult Details(Guid id) + { + var role = Wtm.CreateVM(id); + role.ListVM.SearcherMode = ListVMSearchModeEnum.Custom1; + return PartialView(role); + } + + [ActionDescription("_Admin.PageFunction")] + public PartialViewResult PageFunction(Guid id) + { + var role = Wtm.CreateVM(id); + role.ListVM.SearcherMode = ListVMSearchModeEnum.Custom2; + return PartialView(role); + } + + [ActionDescription("_Admin.PageFunction")] + [HttpPost] + public async Task PageFunction(FrameworkRoleMDVM vm, IFormCollection noUse) + { + await vm.DoChangeAsync(); + return FFResult().CloseDialog().Alert(Localizer["Sys.OprationSuccess"]); + } + + [ActionDescription("Sys.Export")] + [HttpPost] + public IActionResult ExportExcel(FrameworkRoleListVM vm) + { + return vm.GetExportData(); + } + } +} diff --git a/IoTGateway/Areas/_Admin/Controllers/FrameworkUserController.cs b/IoTGateway/Areas/_Admin/Controllers/FrameworkUserController.cs new file mode 100644 index 0000000..ea36acd --- /dev/null +++ b/IoTGateway/Areas/_Admin/Controllers/FrameworkUserController.cs @@ -0,0 +1,285 @@ +// WTM默认页面 Wtm buidin page +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Linq; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms; +using WalkingTec.Mvvm.Core.Extensions; +using System.Threading.Tasks; +using System.Collections.Generic; + +namespace WalkingTec.Mvvm.Mvc.Admin.Controllers +{ + [Area("_Admin")] + [ActionDescription("MenuKey.UserManagement")] + public class FrameworkUserController : BaseController + { + [ActionDescription("Sys.Search", IsPage = true)] + public ActionResult Index() + { + var vm = Wtm.CreateVM(); + vm.Searcher.IsValid = true; + return PartialView(vm); + } + + [ActionDescription("Sys.Search")] + [HttpPost] + public string Search(FrameworkUserSearcher searcher) + { + var vm = Wtm.CreateVM(passInit: true); + if (ModelState.IsValid) + { + vm.Searcher = searcher; + return vm.GetJson(false); + } + else + { + return vm.GetError(); + } + } + + + [ActionDescription("Sys.Create")] + public ActionResult Create() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Create")] + public async Task Create(FrameworkUserVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + await vm.DoAddAsync(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + } + + [ActionDescription("Sys.Edit")] + public ActionResult Edit(string id) + { + var vm = Wtm.CreateVM(id); + vm.Entity.Password = null; + return PartialView(vm); + } + + [ActionDescription("Sys.Edit")] + [HttpPost] + [ValidateFormItemOnly] + public async Task Edit(FrameworkUserVM vm) + { + if (ModelState.Any(x => x.Key != "Entity.Password" && x.Value.ValidationState == Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Invalid)) + { + return PartialView(vm); + } + else + { + ModelState.Clear(); + await vm.DoEditAsync(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGridRow(vm.Entity.ID); + } + } + } + + [ActionDescription("Login.ChangePassword")] + public ActionResult Password(Guid id) + { + var vm = Wtm.CreateVM(id, passInit: true); + vm.Entity.Password = null; + return PartialView(vm); + } + + [ActionDescription("Login.ChangePassword")] + [HttpPost] + public ActionResult Password(FrameworkUserVM vm) + { + var keys = ModelState.Keys.ToList(); + foreach (var item in keys) + { + if (item != "Entity.Password") + { + ModelState.Remove(item); + } + } + if (ModelState.IsValid == false) + { + return PartialView(vm); + } + else + { + vm.ChangePassword(); + if (!ModelState.IsValid) + { + vm.DoReInit(); + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGridRow(vm.Entity.ID); + } + } + } + + [ActionDescription("Sys.Delete")] + public ActionResult Delete(Guid id) + { + var vm = Wtm.CreateVM(id); + return PartialView(vm); + } + + [ActionDescription("Sys.Delete")] + [HttpPost] + public async Task Delete(Guid id, IFormCollection nouse) + { + var vm = Wtm.CreateVM(id); + await vm.DoDeleteAsync(); + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid(); + } + } + + [ActionDescription("Sys.Details")] + public PartialViewResult Details(Guid id) + { + var v = Wtm.CreateVM(id); + return PartialView("Details", v); + } + + [HttpPost] + [ActionDescription("Sys.BatchEdit")] + public ActionResult BatchEdit(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchEdit")] + public ActionResult DoBatchEdit(FrameworkUserBatchVM vm, IFormCollection nouse) + { + if (!ModelState.IsValid || !vm.DoBatchEdit()) + { + return PartialView("BatchEdit", vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.BatchEditSuccess", vm.Ids.Length]); + } + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public ActionResult BatchDelete(string[] IDs) + { + var vm = Wtm.CreateVM(Ids: IDs); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.BatchDelete")] + public async Task DoBatchDelete(FrameworkUserBatchVM vm, IFormCollection nouse) + { + List itcode = new List(); + itcode = DC.Set().CheckIDs(new List(vm.Ids)).Select(x => x.ITCode).ToList(); + if (!ModelState.IsValid || !vm.DoBatchDelete()) + { + return PartialView("BatchDelete", vm); + } + else + { + using (var tran = DC.BeginTransaction()) + { + try + { + var ur = DC.Set().Where(x => itcode.Contains(x.UserCode)); + DC.Set().RemoveRange(ur); + var ug = DC.Set().Where(x => itcode.Contains(x.UserCode)); + DC.Set().RemoveRange(ug); + DC.SaveChanges(); + tran.Commit(); + } + catch + { + tran.Rollback(); + } + } + + await Wtm.RemoveUserCache(itcode.ToArray()); + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.OprationSuccess"]); + } + } + + [ActionDescription("Sys.Import")] + public ActionResult Import() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [HttpPost] + [ActionDescription("Sys.Import")] + public ActionResult Import(FrameworkUserImportVM vm, IFormCollection nouse) + { + if (vm.ErrorListVM.EntityList.Count > 0 || !vm.BatchSaveData()) + { + return PartialView(vm); + } + else + { + return FFResult().CloseDialog().RefreshGrid().Alert(Localizer["Sys.ImportSuccess", vm.EntityList.Count.ToString()]); + } + } + + [ActionDescription("Sys.Enable")] + public ActionResult Enable(Guid id, bool enable) + { + FrameworkUser user = new FrameworkUser { ID = id }; + user.IsValid = enable; + DC.UpdateProperty(user, x => x.IsValid); + DC.SaveChanges(); + return FFResult().RefreshGrid(CurrentWindowId); + } + + [AllRights] + public ActionResult GetUserById(string keywords) + { + var users = DC.Set().Where(x => x.ITCode.ToLower().StartsWith(keywords.ToLower())).GetSelectListItems(Wtm, x => x.Name + "(" + x.ITCode + ")", x => x.ITCode); + return JsonMore(users); + + } + + [ActionDescription("Sys.Export")] + [HttpPost] + public IActionResult ExportExcel(FrameworkUserListVM vm) + { + return vm.GetExportData(); + } + } +} diff --git a/IoTGateway/Areas/_Admin/Views/ActionLog/BatchDelete.cshtml b/IoTGateway/Areas/_Admin/Views/ActionLog/BatchDelete.cshtml new file mode 100644 index 0000000..5c02192 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/ActionLog/BatchDelete.cshtml @@ -0,0 +1,15 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.ActionLogVMs.ActionLogBatchVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.BatchDeleteConfirm"] + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/ActionLog/Details.cshtml b/IoTGateway/Areas/_Admin/Views/ActionLog/Details.cshtml new file mode 100644 index 0000000..1ab34ec --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/ActionLog/Details.cshtml @@ -0,0 +1,26 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.ActionLogVMs.ActionLogVM + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/ActionLog/Index.cshtml b/IoTGateway/Areas/_Admin/Views/ActionLog/Index.cshtml new file mode 100644 index 0000000..3ba5457 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/ActionLog/Index.cshtml @@ -0,0 +1,19 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.ActionLogVMs.ActionLogListVM +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/DataPrivilege/Create.cshtml b/IoTGateway/Areas/_Admin/Views/DataPrivilege/Create.cshtml new file mode 100644 index 0000000..996616b --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/DataPrivilege/Create.cshtml @@ -0,0 +1,58 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.DataPrivilegeVMs.DataPrivilegeVM + + + + + + + + + + + + + + + + + + + +

+ + + + +
+ + + diff --git a/IoTGateway/Areas/_Admin/Views/DataPrivilege/Edit.cshtml b/IoTGateway/Areas/_Admin/Views/DataPrivilege/Edit.cshtml new file mode 100644 index 0000000..7effec9 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/DataPrivilege/Edit.cshtml @@ -0,0 +1,51 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.DataPrivilegeVMs.DataPrivilegeVM + + + + + + + + + + + + + + + + + + + +

+ + + + +
+ + + diff --git a/IoTGateway/Areas/_Admin/Views/DataPrivilege/Index.cshtml b/IoTGateway/Areas/_Admin/Views/DataPrivilege/Index.cshtml new file mode 100644 index 0000000..d1463e6 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/DataPrivilege/Index.cshtml @@ -0,0 +1,11 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.DataPrivilegeVMs.DataPrivilegeListVM + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkGroup/BatchDelete.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/BatchDelete.cshtml new file mode 100644 index 0000000..00fa949 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/BatchDelete.cshtml @@ -0,0 +1,15 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs.FrameworkGroupBatchVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.BatchDeleteConfirm"] + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Create.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Create.cshtml new file mode 100644 index 0000000..bba3fd1 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Create.cshtml @@ -0,0 +1,13 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs.FrameworkGroupVM + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkGroup/DataFunction.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/DataFunction.cshtml new file mode 100644 index 0000000..6d6927f --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/DataFunction.cshtml @@ -0,0 +1,41 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs.FrameworkGroupMDVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + @for (int i = 0; i < Model.DpLists.Count; i++) + { + + + + + + + + + + + + + + } + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Delete.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Delete.cshtml new file mode 100644 index 0000000..286c7a7 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Delete.cshtml @@ -0,0 +1,17 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs.FrameworkGroupVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.DeleteConfirm"] + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Edit.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Edit.cshtml new file mode 100644 index 0000000..8b5a3dd --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Edit.cshtml @@ -0,0 +1,14 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs.FrameworkGroupVM + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Import.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Import.cshtml new file mode 100644 index 0000000..2cc7af0 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Import.cshtml @@ -0,0 +1,17 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs.FrameworkGroupImportVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Index.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Index.cshtml new file mode 100644 index 0000000..f21a343 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkGroup/Index.cshtml @@ -0,0 +1,11 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkGroupVMs.FrameworkGroupListVM + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Create.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Create.cshtml new file mode 100644 index 0000000..4e59d87 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Create.cshtml @@ -0,0 +1,71 @@ +@using WalkingTec.Mvvm.Mvc; +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs.FrameworkMenuVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Delete.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Delete.cshtml new file mode 100644 index 0000000..c6838b6 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Delete.cshtml @@ -0,0 +1,23 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs.FrameworkMenuVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + @Localizer["Sys.DeleteConfirm"] + + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Details.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Details.cshtml new file mode 100644 index 0000000..d0095a7 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Details.cshtml @@ -0,0 +1,19 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs.FrameworkMenuVM + + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Edit.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Edit.cshtml new file mode 100644 index 0000000..484d590 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Edit.cshtml @@ -0,0 +1,67 @@ +@using WalkingTec.Mvvm.Mvc; +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs.FrameworkMenuVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Index.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Index.cshtml new file mode 100644 index 0000000..3ebad95 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkMenu/Index.cshtml @@ -0,0 +1,6 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs.FrameworkMenuListVM + +
+ + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkMenu/UnsetPages.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkMenu/UnsetPages.cshtml new file mode 100644 index 0000000..c307442 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkMenu/UnsetPages.cshtml @@ -0,0 +1,5 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkMenuVMs.FrameworkActionListVM + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkRole/BatchDelete.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkRole/BatchDelete.cshtml new file mode 100644 index 0000000..b8dc266 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkRole/BatchDelete.cshtml @@ -0,0 +1,15 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs.FrameworkRoleBatchVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.BatchDeleteConfirm"] + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkRole/Create.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkRole/Create.cshtml new file mode 100644 index 0000000..aa529c0 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkRole/Create.cshtml @@ -0,0 +1,13 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs.FrameworkRoleVM + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkRole/Delete.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkRole/Delete.cshtml new file mode 100644 index 0000000..0624c7b --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkRole/Delete.cshtml @@ -0,0 +1,17 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs.FrameworkRoleVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.DeleteConfirm"] + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkRole/Details.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkRole/Details.cshtml new file mode 100644 index 0000000..447a284 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkRole/Details.cshtml @@ -0,0 +1,12 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs.FrameworkRoleMDVM + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkRole/Edit.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkRole/Edit.cshtml new file mode 100644 index 0000000..5acc9f7 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkRole/Edit.cshtml @@ -0,0 +1,14 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs.FrameworkRoleVM + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkRole/Import.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkRole/Import.cshtml new file mode 100644 index 0000000..6cfbdb4 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkRole/Import.cshtml @@ -0,0 +1,17 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs.FrameworkRoleImportVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkRole/Index.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkRole/Index.cshtml new file mode 100644 index 0000000..e3c03bc --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkRole/Index.cshtml @@ -0,0 +1,11 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs.FrameworkRoleListVM + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkRole/PageFunction.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkRole/PageFunction.cshtml new file mode 100644 index 0000000..18e785e --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkRole/PageFunction.cshtml @@ -0,0 +1,17 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkRoleVMs.FrameworkRoleMDVM + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkUser/BatchDelete.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkUser/BatchDelete.cshtml new file mode 100644 index 0000000..f0a637d --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkUser/BatchDelete.cshtml @@ -0,0 +1,14 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms.FrameworkUserBatchVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + @Localizer["Sys.BatchDeleteConfirm"] + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkUser/BatchEdit.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkUser/BatchEdit.cshtml new file mode 100644 index 0000000..ad2c5a7 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkUser/BatchEdit.cshtml @@ -0,0 +1,18 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms.FrameworkUserBatchVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + +
@Localizer["Sys.BatchEditConfirm"]
+ + + + + + + + + +
+ + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkUser/Create.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Create.cshtml new file mode 100644 index 0000000..4997b72 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Create.cshtml @@ -0,0 +1,46 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms.FrameworkUserVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkUser/Delete.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Delete.cshtml new file mode 100644 index 0000000..fe5f0c0 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Delete.cshtml @@ -0,0 +1,25 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms.FrameworkUserVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + @Localizer["Sys.DeleteConfirm"] + + + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkUser/Details.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Details.cshtml new file mode 100644 index 0000000..4cf2939 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Details.cshtml @@ -0,0 +1,20 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms.FrameworkUserVM + + + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkUser/Edit.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Edit.cshtml new file mode 100644 index 0000000..07efbf7 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Edit.cshtml @@ -0,0 +1,48 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms.FrameworkUserVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkUser/Import.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Import.cshtml new file mode 100644 index 0000000..aaebcfc --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Import.cshtml @@ -0,0 +1,17 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms.FrameworkUserImportVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkUser/Index.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Index.cshtml new file mode 100644 index 0000000..5b69200 --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Index.cshtml @@ -0,0 +1,14 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms.FrameworkUserListVM +@using Microsoft.Extensions.Localization; +@inject IStringLocalizer Localizer; + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/FrameworkUser/Password.cshtml b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Password.cshtml new file mode 100644 index 0000000..96aa1fb --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/FrameworkUser/Password.cshtml @@ -0,0 +1,12 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms.FrameworkUserVM + + + + + + + + + + + diff --git a/IoTGateway/Areas/_Admin/Views/_ViewImports.cshtml b/IoTGateway/Areas/_Admin/Views/_ViewImports.cshtml new file mode 100644 index 0000000..78d9f0c --- /dev/null +++ b/IoTGateway/Areas/_Admin/Views/_ViewImports.cshtml @@ -0,0 +1,3 @@ +@using WalkingTec.Mvvm.TagHelpers.LayUI +@using Microsoft.Extensions.Localization; +@addTagHelper *, WalkingTec.Mvvm.TagHelpers.LayUI diff --git a/IoTGateway/Areas/_ViewImports.cshtml b/IoTGateway/Areas/_ViewImports.cshtml new file mode 100644 index 0000000..1517d40 --- /dev/null +++ b/IoTGateway/Areas/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@using WalkingTec.Mvvm.TagHelpers.LayUI +@using Microsoft.Extensions.Localization; +@using IoTGateway; +@addTagHelper *, WalkingTec.Mvvm.TagHelpers.LayUI diff --git a/IoTGateway/Controllers/HomeController.cs b/IoTGateway/Controllers/HomeController.cs new file mode 100644 index 0000000..b116aff --- /dev/null +++ b/IoTGateway/Controllers/HomeController.cs @@ -0,0 +1,154 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.DataProtection; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Auth; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Mvc; + +namespace IoTGateway.Controllers +{ + public class HomeController : BaseController + { + [AllRights] + public IActionResult Index() + { + ViewData["title"] = "IoTGateway"; + return View(); + } + + [AllowAnonymous] + public IActionResult PIndex() + { + return View(); + } + + [AllRights] + [ActionDescription("FrontPage")] + public IActionResult FrontPage() + { + return PartialView(); + } + + public IActionResult GetActionChart() + { + var areas = GlobaInfo.AllModule.Select(x => x.Area).Distinct(); + var data = new List(); + + foreach (var area in areas) + { + var controllers = GlobaInfo.AllModule.Where(x => x.Area == area); + data.Add(new ChartData + { + Category = "Controllers", + Value = controllers.Count(), + Series = area?.AreaName ?? "Default" + }); + data.Add(new ChartData + { + Category = "Actions", + Value = controllers.SelectMany(x=>x.Actions).Count(), + Series = area?.AreaName ?? "Default" + }); + } + var rv = data.ToChartData(); + return Json(rv); + } + + public IActionResult GetModelChart() + { + var models = new List(); + + var pros = Wtm.ConfigInfo.Connections.SelectMany(x => x.DcConstructor.DeclaringType.GetProperties(BindingFlags.Default | BindingFlags.Public | BindingFlags.Instance)); + if (pros != null) + { + foreach (var pro in pros) + { + if (pro.PropertyType.IsGeneric(typeof(DbSet<>))) + { + models.Add(pro.PropertyType.GetGenericArguments()[0]); + } + } + } + var data = new List(); + + foreach (var m in models) + { + data.Add(new ChartData + { + Value = m.GetProperties().Count(), + Category = m.GetPropertyDisplayName(), + Series = "Model" + }) ; + } + var rv = data.ToChartData(); + return Json(rv); + } + + public IActionResult GetSampleChart() + { + var data = new List(); + Random r = new Random(); + int maxi = r.Next(3, 10); + int maxy = r.Next(3, 10); + for (int i = 0; i < maxi; i++) + { + for (int j = 0; j < maxy; j++) + { + data.Add(new ChartData + { + Category = "x" + i, + Value = r.Next(100, 1000), + ValueX = r.Next(200, 2000), + Series = "y" + j, + Addition = r.Next(100, 1000), + + }); + } + } + var rv = data.ToChartData(); + return Json(rv); + } + + + [AllRights] + [ActionDescription("Layout")] + public IActionResult Layout() + { + ViewData["debug"] = Wtm.ConfigInfo.IsQuickDebug; + return PartialView(); + } + + [AllRights] + public IActionResult UserInfo() + { + if (HttpContext.Request.Cookies.TryGetValue(CookieAuthenticationDefaults.CookiePrefix + AuthConstants.CookieAuthName, out string cookieValue)) + { + var protectedData = Base64UrlTextEncoder.Decode(cookieValue); + var dataProtectionProvider = HttpContext.RequestServices.GetRequiredService(); + var _dataProtector = dataProtectionProvider + .CreateProtector( + "Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware", + CookieAuthenticationDefaults.AuthenticationScheme, + "v2"); + var unprotectedData = _dataProtector.Unprotect(protectedData); + + string cookieData = Encoding.UTF8.GetString(unprotectedData); + return JsonMore(cookieData); + } + else + return JsonMore("No Data"); + } + + } + +} diff --git a/IoTGateway/Controllers/LoginController.cs b/IoTGateway/Controllers/LoginController.cs new file mode 100644 index 0000000..28a8d91 --- /dev/null +++ b/IoTGateway/Controllers/LoginController.cs @@ -0,0 +1,148 @@ +using System; +using System.Threading.Tasks; +using System.Web; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Mvc; +using WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms; +using IoTGateway.ViewModel.HomeVMs; + +namespace IoTGateway.Controllers +{ + [AllRights] + public class LoginController : BaseController + { + + [Public] + [ActionDescription("Login")] + public IActionResult Login() + { + LoginVM vm = Wtm.CreateVM(); + vm.Redirect = HttpContext.Request.Query["ReturnUrl"]; + if (Wtm.ConfigInfo.IsQuickDebug == true) + { + vm.ITCode = "admin"; + vm.Password = "000000"; + } + return View(vm); + } + + [Public] + [HttpPost] + public async Task Login(LoginVM vm) + { + if (Wtm.ConfigInfo.IsQuickDebug == false) + { + var verifyCode = HttpContext.Session.Get("verify_code"); + if (string.IsNullOrEmpty(verifyCode) || verifyCode.ToLower() != vm.VerifyCode.ToLower()) + { + vm.MSD.AddModelError("", Localizer["Login.ValidationFail"]); + return View(vm); + } + } + + var user = await vm.DoLoginAsync(); + if (user == null) + { + return View(vm); + } + else + { + Wtm.LoginUserInfo = user; + string url = string.Empty; + if (!string.IsNullOrEmpty(vm.Redirect)) + { + url = vm.Redirect; + } + else + { + url = "/"; + } + + AuthenticationProperties properties = null; + if (vm.RememberLogin) + { + properties = new AuthenticationProperties + { + IsPersistent = true, + ExpiresUtc = DateTimeOffset.UtcNow.Add(TimeSpan.FromDays(30)) + }; + } + + var principal = user.CreatePrincipal(); + await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal, properties); + return Redirect(HttpUtility.UrlDecode(url)); + } + } + + [Public] + public IActionResult Reg() + { + var vm = Wtm.CreateVM(); + return PartialView(vm); + } + + [Public] + [HttpPost] + public IActionResult Reg(RegVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + var rv = vm.DoReg(); + if (rv == true) + { + return FFResult().CloseDialog().Message(Localizer["Reg.Success"]); + } + else + { + return PartialView(vm); + } + } + } + + [AllRights] + [ActionDescription("Logout")] + public async Task Logout() + { + await Wtm.RemoveUserCache(Wtm.LoginUserInfo.ITCode); + HttpContext.Session.Clear(); + await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); + HttpContext.Response.Redirect("/"); + } + + [AllRights] + [ActionDescription("ChangePassword")] + public ActionResult ChangePassword() + { + var vm = Wtm.CreateVM(); + vm.ITCode = Wtm.LoginUserInfo.ITCode; + return PartialView(vm); + } + + [AllRights] + [HttpPost] + [ActionDescription("ChangePassword")] + public ActionResult ChangePassword(ChangePasswordVM vm) + { + if (!ModelState.IsValid) + { + return PartialView(vm); + } + else + { + vm.DoChange(); + return FFResult().CloseDialog().Alert(Localizer["Login.ChangePasswordSuccess"]); + } + } + + } +} diff --git a/IoTGateway/Dockerfile b/IoTGateway/Dockerfile new file mode 100644 index 0000000..189a6cc --- /dev/null +++ b/IoTGateway/Dockerfile @@ -0,0 +1,30 @@ +#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. + +FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base +WORKDIR /app +EXPOSE 518 + +RUN apt-get update +RUN apt-get install libgdiplus -y +RUN apt-get install nano -y + +FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build +WORKDIR /src +COPY ["IoTGateway/IoTGateway.csproj", "IoTGateway/"] +COPY ["IoTGateway.ViewModel/IoTGateway.ViewModel.csproj", "IoTGateway.ViewModel/"] +COPY ["IoTGateway.Model/IoTGateway.Model.csproj", "IoTGateway.Model/"] +COPY ["IoTGateway.DataAccess/IoTGateway.DataAccess.csproj", "IoTGateway.DataAccess/"] +RUN dotnet restore "IoTGateway/IoTGateway.csproj" +COPY . . +WORKDIR "/src/IoTGateway" +RUN dotnet build "IoTGateway.csproj" -c Release -o /app/build + +FROM build AS publish +RUN dotnet publish "IoTGateway.csproj" -c Release -o /app/publish + +FROM base AS final +WORKDIR /app +COPY --from=publish /app/publish . + +ENV TZ=Asia/Shanghai +ENTRYPOINT ["dotnet", "IoTGateway.dll"] \ No newline at end of file diff --git a/IoTGateway/IoTGateway.csproj b/IoTGateway/IoTGateway.csproj new file mode 100644 index 0000000..4a8eca7 --- /dev/null +++ b/IoTGateway/IoTGateway.csproj @@ -0,0 +1,33 @@ + + + + net5.0 + true + InProcess + zh-Hans,en + + true + + Linux + + + + + + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/IoTGateway.csproj.user b/IoTGateway/IoTGateway.csproj.user new file mode 100644 index 0000000..81b1159 --- /dev/null +++ b/IoTGateway/IoTGateway.csproj.user @@ -0,0 +1,10 @@ + + + + IoTGateway + D:\Repos\iotgateway\IoTGateway\Properties\PublishProfiles\FolderProfile.pubxml + + + ProjectDebugger + + \ No newline at end of file diff --git a/IoTGateway/Plugin.dll b/IoTGateway/Plugin.dll new file mode 100644 index 0000000000000000000000000000000000000000..2378f81847e1ba0601a8ee02186c784ac32eee83 GIT binary patch literal 26112 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 XU;k@gz4HGVanHQ}wHEkaJ@EeomTU~q literal 0 HcmV?d00001 diff --git a/IoTGateway/Program.cs b/IoTGateway/Program.cs new file mode 100644 index 0000000..43a9ca3 --- /dev/null +++ b/IoTGateway/Program.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using WalkingTec.Mvvm.Core; + +namespace IoTGateway +{ + public class Program + { + public static void Main(string[] args) + { + CreateWebHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateWebHostBuilder(string[] args) + { + return + Host.CreateDefaultBuilder(args) + .ConfigureAppConfiguration((hostingContext, config) => + { + config.AddInMemoryCollection(new Dictionary { { "HostRoot", hostingContext.HostingEnvironment.ContentRootPath } }); + }) + .ConfigureLogging((hostingContext, logging) => + { + logging.ClearProviders(); + logging.AddConsole(); + logging.AddWTMLogger(); + }) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + webBuilder.UseKestrel(option => + { + option.ListenAnyIP(518); + }); + }); + //.UseServiceProviderFactory(new AutofacServiceProviderFactory()); + } + } +} diff --git a/IoTGateway/Properties/PublishProfiles/FolderProfile.pubxml b/IoTGateway/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..20ed980 --- /dev/null +++ b/IoTGateway/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,21 @@ + + + + + False + False + True + Release + Any CPU + FileSystem + bin\Release\net5.0\publish\ + FileSystem + + net5.0 + win-x64 + 68abbdf2-1485-4756-9a94-6afa874d69a3 + false + + \ No newline at end of file diff --git a/IoTGateway/Properties/PublishProfiles/FolderProfile.pubxml.user b/IoTGateway/Properties/PublishProfiles/FolderProfile.pubxml.user new file mode 100644 index 0000000..9a4d120 --- /dev/null +++ b/IoTGateway/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -0,0 +1,10 @@ + + + + + <_PublishTargetUrl>D:\Repos\iotgateway\IoTGateway\bin\Release\net5.0\publish\ + True|2021-12-12T06:11:08.8380502Z; + + \ No newline at end of file diff --git a/IoTGateway/Properties/launchSettings.json b/IoTGateway/Properties/launchSettings.json new file mode 100644 index 0000000..c73b2d7 --- /dev/null +++ b/IoTGateway/Properties/launchSettings.json @@ -0,0 +1,35 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:6652/", + "sslPort": 0 + } + }, + "profiles": { + "IoTGateway": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" + }, + "applicationUrl": "http://localhost:6652" + }, + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" + } + }, + "Docker": { + "commandName": "Docker", + "launchBrowser": true, + "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}", + "publishAllPorts": true + } + } +} \ No newline at end of file diff --git a/IoTGateway/Resources/Program.en.resx b/IoTGateway/Resources/Program.en.resx new file mode 100644 index 0000000..91ce954 --- /dev/null +++ b/IoTGateway/Resources/Program.en.resx @@ -0,0 +1,960 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Generate api only, no frontend code + + + Attachment + + + AuthMode + + + This will generate following files, are you sure? + + + ControllerNs + + + DataNs + + + The {0} field must start with characters or underscores + + + Field des + + + File name + + + Generate code + + + Generate Api + + + Please input module name, such as xxx management + + + Batch field + + + Form field + + + Import field + + + List field + + + Search field + + + Link type + + + ManyToMany + + + ModelNS + + + Module name + + + OneToMany + + + The model selected must inherit from TopBasePoco + + + Please select a module + + + Please setup fields + + + Start generation + + + Display field of linked poco + + + Code has been generated, please close the debug and rebuild the solution. + + + TestNs + + + VMNs + + + Change password + + + The password has been modified successfully. Please log in with the new password next time. + + + Please input password + + + Please input user name + + + Validation code + + + Account is duplicated + + + Login + + + LogOut + + + New passwrod + + + Passwrod again + + + Current + + + Current password is wrong + + + Inconsistent password + + + Register + + + New user registration + + + Remember me + + + Incorrect verification code + + + Log + + + Buildin Api + + + Data Privilege + + + Group Management + + + Login + + + Menu Mangement + + + Role Management + + + System + + + User Management + + + Registered successfully + + + Account + + + Admin + + + All + + + Api Doc + + + The value '{0}' is not valid for {1}. + + + Home + + + Batch delete + + + Are you sure to delete following data: + + + {0} rows have been deleted + + + Batch edit + + + Batch update following data + + + {0} rows have been edited + + + {0} is used, it cannot be deleted + + + Can not find user {0} + + + CellIndex + + + Check export + + + Close + + + Close all tags + + + Close other tags + + + Close this tag + + + CodeGen + + + Filters + + + ComboBox + + + Continue + + + Create + + + Data is used, it cannot be deleted + + + Data does not exist + + + between {0} and {1} + + + The address can only be accessed in debug mode + + + Default area + + + Delete + + + Are you sure to delete this data + + + Data is in use, delete failed. + + + Details + + + Download + + + Download template + + + The {0} field has duplicated data + + + The {0} fields has duplicated data + + + Edit + + + Edit failed + + + Enable + + + Error + + + Error handling + + + Error message + + + Export + + + CheckExport + + + Export Excel + + + Failed to load data + + + Female + + + File is not found + + + For selection + + + Get + + + Goto + + + GO + + + Have + + + Hide/Show + + + Home + + + Import + + + Error occurs during import + + + Click to download template + + + Upload your template with data + + + Import failed, please download error file for details + + + {0} rows have been imported + + + Info + + + Invalid + + + Layout + + + EN + + + Horizontal + + + Failed to load + + + Login failed + + + MainPage + + + Male + + + More + + + You havn't logged in or your login is expired, please login again. + + + No + + + No data + + + No matching data + + + None + + + You are not allowed to access this page + + + None + + + OK + + + Operation + + + Opration success + + + Page + + + Error occurred + + + Please input decimal + + + Please input with decimal format + + + Please use data existed in the combobox + + + Please input number + + + Please input with number format + + + Please input text + + + Please select + + + Please upload template + + + Preview + + + Print + + + Record(s) + + + + + + Refresh + + + Reset + + + Rollback + + + Row + + + Search + + + Conditions + + + Select + + + Selected + + + Please select a row + + + Please select only one row + + + Please select at least one row + + + Single + + + Submit + + + Failed to submit + + + Tabs + + + Theme + + + Total: + + + Update successfully + + + Vertical + + + Upload failed + + + Template + + + Valid + + + The value '{0}' is invalid. + + + Wrong template + + + The text is too long + + + WTM Doc + + + Yes + + + The {0} field has an error format + + + The {0} field's value does not exist + + + The {0} field's type is not supported + + + The {0} field has an error format + + + The {0} field must be digit + + + {0} must be less than {1} + + + {0} must be at least {1} + + + {0} must between {1} and {2} + + + The {0} field is required + + + The {0} field is limited {1} characters + + + Account + + + Action + + + Log management Api + + + Action name + + + Action time + + + Additional + + + Address + + + All privilege + + + Allowed + + + Allowed + + + Allowed roles + + + All privilege + + + Basic + + + CellPhone + + + Check Page + + + Children + + + ClassName + + + CreateBy + + + CreateTime + + + Data Privilege + + + Data privilege Api + + + Dp count + + + Dp name + + + Debug + + + Order + + + Domain + + + Target + + + Dp type + + + Duration + + + Email + + + Exception + + + Field name + + + File Api + + + File ext + + + Folder + + + Gender + + + Group + + + Group management Api + + + Group code + + + Group Dp + + + Group name + + + HomePhone + + + Icon + + + IconFont + + + Inside + + + Inherit + + + Domain + + + Public + + + IsValid + + + Length + + + Login Api + + + Log type + + + Menu management Api + + + MenuItem + + + Method name + + + Module + + + This module has already beed added + + + Name + + + There is no View in this Module + + + No privilege + + + Normal + + + Outside + + + Page privileges + + + Page name + + + Parent + + + Parent folder + + + Password + + + Path + + + Photo + + + Privileges + + + Refresh menu + + + Remark + + + Role + + + Role management Api + + + Role code + + + Role name + + + Model + + + Select privileges + + + Menu + + + Privilege name + + + Tenant + + + Unset pages + + + UpdateBy + + + Update time + + + User + + + User management Api + + + User Dp + + + Users + + + Zip + + \ No newline at end of file diff --git a/IoTGateway/Resources/Program.zh.resx b/IoTGateway/Resources/Program.zh.resx new file mode 100644 index 0000000..13cd764 --- /dev/null +++ b/IoTGateway/Resources/Program.zh.resx @@ -0,0 +1,963 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 勾选此项将只生成api,而没有前端代码 + + + 附件 + + + 认证方式 + + + 该操作将生成如下文件,是否确定? + + + Controller命名空间 + + + Data命名空间 + + + {0}只能以英文字母或下划线开头 + + + 字段描述 + + + 文件名 + + + 生成代码 + + + 生成Api + + + 请输入模块名称,比如xx管理 + + + 批量更新字段 + + + 表单字段 + + + 导入字段 + + + 列表展示 + + + 搜索条件 + + + 关联类型 + + + 多对多 + + + Model命名空间 + + + 模块名称 + + + 一对多 + + + 所选模型必须继承TopBasePoco基类 + + + 请选择一个模块 + + + 请进行字段配置 + + + 开始生成 + + + 关联表显示字段 + + + 生成成功!请关闭调试重新编译运行 + + + Test命名空间 + + + VM命名空间 + + + 修改密码 + + + 密码修改成功,下次请使用新密码登录。 + + + 请输入密码 + + + 请输入用户名 + + + 请输入验证码 + + + 账号重复 + + + 登 录 + + + 退出 + + + 新密码 + + + 新密码 + + + 当前密码 + + + 当前密码错误 + + + 两次新密码输入不一致 + + + 注 册 + + + 新用户注册 + + + 记住我 + + + 验证码不正确 + + + 日志 + + + 内置Api + + + 数据权限 + + + 用户组管理 + + + 登录 + + + 菜单管理 + + + 角色管理 + + + 系统管理 + + + 用户管理 + + + 菜单管理 + + + 注册成功 + + + 账号 + + + 超级管理员 + + + 全部 + + + Api文档 + + + '{0}' 不是 {1} 的有效格式 + + + 返回首页 + + + 批量删除 + + + 确定要删除以下数据么: + + + 成功删除{0}行数据 + + + 批量修改 + + + 批量修改以下数据 + + + 成功修改{0}行数据 + + + {0}已被使用,无法删除 + + + 无法找到账号为{0}的用户 + + + 列号 + + + 勾选导出 + + + 关闭 + + + 关闭全部标签页 + + + 关闭其它标签页 + + + 关闭当前标签页 + + + 代码生成器 + + + 筛选列 + + + 下拉菜单 + + + 继续 + + + 新建 + + + 数据被使用,无法删除 + + + 数据不存在 + + + 在{0}到{1}之间 + + + 该地址只能在调试模式下访问 + + + 默认区域 + + + 删除 + + + 确定要删除这条数据么: + + + 数据使用中,无法删除 + + + 详细 + + + 下载 + + + 下载模板 + + + {0}数据重复 + + + {0}组合字段重复 + + + 修改 + + + 修改失败 + + + 启用 + + + 错误 + + + 错误处理 + + + 错误信息 + + + 导出 + + + 勾选导出 + + + 导出Excel + + + 获取数据失败 + + + + + + 没有找到文件 + + + 待选择 + + + 获取 + + + 到第 + + + 确定 + + + + + + 侧边伸缩 + + + 首页 + + + 导入 + + + 导入时发生错误 + + + 点击右侧按钮下载模板 + + + 将编辑好的模板上传 + + + 导入失败,请下载错误文件查看详情 + + + 成功导入{0}行数据 + + + 信息 + + + 无效 + + + 布局 + + + CN + + + 左右结构 + + + 加载失败 + + + 登录失败 + + + 主页面 + + + + + + 更多设置 + + + 您没有登录或登录已过期,请重新登陆 + + + + + + 无数据 + + + 无匹配数据 + + + + + + 您没有访问该页面的权限 + + + + + + 确定 + + + 操作 + + + 操作成功 + + + + + + 页面发生错误 + + + 请输入小数 + + + 请输入小数格式 + + + 请输入下拉菜单中存在的数据 + + + 请输入数字 + + + 请输入数字格式 + + + 请输入文本 + + + 请选择 + + + 请上传模板文件 + + + 预览 + + + 打印 + + + + + + 条/页 + + + 刷新 + + + 重置 + + + 已回滚 + + + 行号 + + + 搜索 + + + 搜索条件 + + + 选择 + + + 已选择 + + + 请选择一行 + + + 最多只能选择一行 + + + 请至少选择一行 + + + 单页面 + + + 提交 + + + 提交失败 + + + 多标签 + + + 主题 + + + 合计: + + + 更新成功 + + + 上下结构 + + + 上传失败 + + + 上传模板 + + + 有效 + + + {0} 格式错误 + + + 错误的模板 + + + 文本长度不符合要求 + + + WTM文档 + + + + + + {0}格式错误 + + + {0}输入的值在数据库中不存在 + + + {0}输入的值不在允许的数据类型范围内 + + + {0}格式错误 + + + {0}必须是数字 + + + {0}至少是{1} + + + {0}必须是{1}到{2}之间的数 + + + {0}最多是{1} + + + {0}是必填项 + + + {0}最多输入{1}个字符 + + + 账号 + + + 动作 + + + 日志管理Api + + + 动作名称 + + + 操作时间 + + + 附加信息 + + + 地址 + + + 全部权限 + + + 允许 + + + 允许访问 + + + 允许角色 + + + 全部权限 + + + 基本信息 + + + 手机 + + + 检查页面 + + + 子项 + + + 类名 + + + 创建人 + + + 创建时间 + + + 数据权限 + + + 数据权限Api + + + 权限数量 + + + 权限名称 + + + 调试 + + + 顺序 + + + + + + 授权对象 + + + 权限类别 + + + 时长 + + + 邮箱 + + + 异常 + + + 字段名称 + + + 文件操作Api + + + 扩展名 + + + 目录 + + + 性别 + + + 用户组 + + + 用户组管理Api + + + 用户组编号 + + + 用户组权限 + + + 组名 + + + 座机 + + + 图标 + + + 图标库 + + + 内部 + + + 继承 + + + 地址类型 + + + 公开 + + + 是否有效 + + + 长度 + + + 账号操作Api + + + 类型 + + + 菜单管理Api + + + 菜单项 + + + 方法 + + + 模块 + + + 该模块已经配置过了 + + + 姓名 + + + 模块中没有找到页面 + + + 无权限 + + + 普通 + + + 外部 + + + 页面权限 + + + 页面名称 + + + 父级 + + + 父目录 + + + 密码 + + + 路径 + + + 照片 + + + 权限 + + + 刷新菜单 + + + 备注 + + + 角色 + + + 角色管理Api + + + 角色编号 + + + 角色名称 + + + 选择模型 + + + 选择权限 + + + 菜单显示 + + + 权限名称 + + + 租户 + + + 未设置页面 + + + 修改人 + + + 修改时间 + + + 用户 + + + 用户管理Api + + + 用户权限 + + + 包含用户 + + + 邮编 + + \ No newline at end of file diff --git a/IoTGateway/Startup.cs b/IoTGateway/Startup.cs new file mode 100644 index 0000000..737f3c6 --- /dev/null +++ b/IoTGateway/Startup.cs @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.AspNetCore.Mvc.Razor; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Plugin; +using WalkingTec.Mvvm.Core; +using WalkingTec.Mvvm.Core.Extensions; +using WalkingTec.Mvvm.Core.Support.FileHandlers; +using WalkingTec.Mvvm.Mvc; + +namespace IoTGateway +{ + public class Startup + { + public IConfiguration ConfigRoot { get; } + + public Startup(IWebHostEnvironment env, IConfiguration config) + { + ConfigRoot = config; + } + + + // This method gets called by the runtime. Use this method to add services to the container. + public void ConfigureServices(IServiceCollection services) + { + services.AddDistributedMemoryCache(); + services.AddWtmSession(3600, ConfigRoot); + services.AddWtmCrossDomain(ConfigRoot); + services.AddWtmAuthentication(ConfigRoot); + services.AddWtmHttpClient(ConfigRoot); + services.AddWtmSwagger(); + services.AddWtmMultiLanguages(ConfigRoot); + + services.AddMvc(options => + { + options.UseWtmMvcOptions(); + }) + .AddJsonOptions(options => { + options.UseWtmJsonOptions(); + }) + .SetCompatibilityVersion(CompatibilityVersion.Version_3_0) + .ConfigureApiBehaviorOptions(options => + { + options.UseWtmApiOptions(); + }) + .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) + .AddWtmDataAnnotationsLocalization(typeof(Program)); + + services.AddWtmContext(ConfigRoot, (options)=> { + options.DataPrivileges = DataPrivilegeSettings(); + options.CsSelector = CSSelector; + options.FileSubDirSelector = SubDirSelector; + options.ReloadUserFunc = ReloadUser; + }); + services.AddHostedService(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + } + + //public void ConfigureContainer(ContainerBuilder containerBuilder) + //{ + // containerBuilder.RegisterModule(); + //} + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IOptionsMonitor configs, DeviceService deviceService) + { + IconFontsHelper.GenerateIconFont(); + + app.UseExceptionHandler(configs.CurrentValue.ErrorHandler); + app.UseStaticFiles(); + app.UseWtmStaticFiles(); + app.UseRouting(); + app.UseWtmMultiLanguages(); + app.UseWtmCrossDomain(); + app.UseAuthentication(); + app.UseAuthorization(); + app.UseSession(); + app.UseWtmSwagger(); + app.UseWtm(); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllerRoute( + name: "areaRoute", + pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); + endpoints.MapControllerRoute( + name: "default", + pattern: "{controller=Home}/{action=Index}/{id?}"); + }); + + app.UseWtmContext(); + } + + /// + /// Wtm will call this function to dynamiclly set connection string + /// 框架会调用这个函数来动态设定每次访问需要链接的数据库 + /// + /// ActionContext + /// Connection string key name + public string CSSelector(ActionExecutingContext context) + { + //To override the default logic of choosing connection string, + //change this function to return different connection string key + //根据context返回不同的连接字符串的名称 + return null; + } + + /// + /// Set data privileges that system supports + /// 设置系统支持的数据权限 + /// + /// data privileges list + public List DataPrivilegeSettings() + { + List pris = new List(); + //Add data privilege to specific type + //指定哪些模型需要数据权限 + return pris; + } + + /// + /// Set sub directory of uploaded files + /// 动态设置上传文件的子目录 + /// + /// IWtmFileHandler + /// subdir name + public string SubDirSelector(IWtmFileHandler fh) + { + return null; + } + + /// + /// Custom Reload user process when cache is not available + /// 设置自定义的方法重新读取用户信息,这个方法会在用户缓存失效的时候调用 + /// + /// + /// + /// + public LoginUserInfo ReloadUser(WTMContext context, string account) + { + return null; + } + } +} diff --git a/IoTGateway/Views/Home/FrontPage.cshtml b/IoTGateway/Views/Home/FrontPage.cshtml new file mode 100644 index 0000000..de6cfde --- /dev/null +++ b/IoTGateway/Views/Home/FrontPage.cshtml @@ -0,0 +1,118 @@ +@model WalkingTec.Mvvm.Core.BaseVM +@using System.Text.Json + +
+ diff --git a/IoTGateway/Views/Home/Index.cshtml b/IoTGateway/Views/Home/Index.cshtml new file mode 100644 index 0000000..e410892 --- /dev/null +++ b/IoTGateway/Views/Home/Index.cshtml @@ -0,0 +1 @@ + diff --git a/IoTGateway/Views/Home/Layout.cshtml b/IoTGateway/Views/Home/Layout.cshtml new file mode 100644 index 0000000..57f8299 --- /dev/null +++ b/IoTGateway/Views/Home/Layout.cshtml @@ -0,0 +1,186 @@ +@using Microsoft.AspNetCore.Builder +@using Microsoft.AspNetCore.Localization +@using Microsoft.Extensions.Options +@model WalkingTec.Mvvm.Core.BaseVM +@inject IOptionsMonitor LocOptions + +@{ + var requestCulture = Context.Features.Get(); + var cultureItems = LocOptions.CurrentValue.SupportedUICultures + .Select(c => new SelectListItem { Value = c.Name, Text = c.NativeName }) + .ToList(); +} +
+
+ + + + +
+ + +
+
+ + +
+
+ + + + + +
+
+
+ + +
+
diff --git a/IoTGateway/Views/Home/PIndex.cshtml b/IoTGateway/Views/Home/PIndex.cshtml new file mode 100644 index 0000000..4fd00e7 --- /dev/null +++ b/IoTGateway/Views/Home/PIndex.cshtml @@ -0,0 +1,7 @@ +
+
+
+
+
+ + diff --git a/IoTGateway/Views/Login/ChangePassword.cshtml b/IoTGateway/Views/Login/ChangePassword.cshtml new file mode 100644 index 0000000..1a86567 --- /dev/null +++ b/IoTGateway/Views/Login/ChangePassword.cshtml @@ -0,0 +1,13 @@ +@model WalkingTec.Mvvm.Mvc.Admin.ViewModels.FrameworkUserVms.ChangePasswordVM + +

@Model.Localizer["Login.ChangePassword"]

+ + + + + + + + + + diff --git a/IoTGateway/Views/Login/Login.cshtml b/IoTGateway/Views/Login/Login.cshtml new file mode 100644 index 0000000..ad157ae --- /dev/null +++ b/IoTGateway/Views/Login/Login.cshtml @@ -0,0 +1,82 @@ +@model IoTGateway.ViewModel.HomeVMs.LoginVM + +@{ + Layout = null; + int bgnumber = new Random().Next(1, 6); +} + + + + + + + + + + + + + + IoTGateway + + + + + + + + + + + + + diff --git a/IoTGateway/Views/Login/Reg.cshtml b/IoTGateway/Views/Login/Reg.cshtml new file mode 100644 index 0000000..4b671ac --- /dev/null +++ b/IoTGateway/Views/Login/Reg.cshtml @@ -0,0 +1,14 @@ +@model IoTGateway.ViewModel.HomeVMs.RegVM + +

@Model.Localizer["Login.RegTitle"]

+ + + + + + + + + + + diff --git a/IoTGateway/Views/Shared/_Layout.cshtml b/IoTGateway/Views/Shared/_Layout.cshtml new file mode 100644 index 0000000..7358259 --- /dev/null +++ b/IoTGateway/Views/Shared/_Layout.cshtml @@ -0,0 +1,45 @@ + + + + + + @ViewData["title"] + + + + + + + + + + +
+ + + + + + + + + + + + + + + + @RenderBody() + + + diff --git a/IoTGateway/Views/_ViewImports.cshtml b/IoTGateway/Views/_ViewImports.cshtml new file mode 100644 index 0000000..1517d40 --- /dev/null +++ b/IoTGateway/Views/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@using WalkingTec.Mvvm.TagHelpers.LayUI +@using Microsoft.Extensions.Localization; +@using IoTGateway; +@addTagHelper *, WalkingTec.Mvvm.TagHelpers.LayUI diff --git a/IoTGateway/Views/_ViewStart.cshtml b/IoTGateway/Views/_ViewStart.cshtml new file mode 100644 index 0000000..efda124 --- /dev/null +++ b/IoTGateway/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "~/Views/Shared/_Layout.cshtml"; +} \ No newline at end of file diff --git a/IoTGateway/appsettings.json b/IoTGateway/appsettings.json new file mode 100644 index 0000000..d12bf79 --- /dev/null +++ b/IoTGateway/appsettings.json @@ -0,0 +1,116 @@ +{ + "Logging": { + "Console": { + "IncludeScopes": true, + "LogLevel": { + "Default": "Error" + } + }, + "Debug": { + "IncludeScopes": true, + "LogLevel": { + "Default": "Error" + } + }, + "WTM": { + "LogLevel": { + "Default": "Error" + } + } + }, + "Connections": [ + { + "Key": "default", + "Value": "Data Source = iotgateway.db", + "DbContext": "DataContext", + "DBType": "SQLite" //DataBase, you can choose mysql,sqlserver,pgsql,sqlite,oracle + } + ], + "CookiePre": "IoTGateway", //cookie prefix + "IsQuickDebug": false, //is debug mode + "CorsOptions": { + "EnableAll": true, + "Policy": [ + { + "Name": "Default", + "Domain": "http://localhost,https://localhost" + } + ] + }, + "ErrorHandler": "/_Framework/Error", + "Languages": "zh,en", + "BlazorMode": "server", // server or wasm + "UIOptions": { + "DataTable": { + "RPP": 100, //default records per page for all datagrid + "ShowPrint": true, + "ShowFilter": true + }, + "ComboBox": { + "DefaultEnableSearch": true + }, + "DateTime": { + "DefaultReadonly": true + }, + "SearchPanel": { + "DefaultExpand": false + } + }, + "PageMode": "Tab", //display mode,Single or Tab + "TabMode": "Simple", //Tab mode,Default or Simple + "IsFilePublic": false, //Can download or view attachment file without login + "FileUploadOptions": { + "UploadLimit": 2097152000, + "SaveFileMode": "local", //上传文件的保存方式,可选Database,local,oss + "Settings": { + "local": [ + { + "GroupName": "driver", + "GroupLocation": "" + } + ], + "oss": [ + { + "GroupName": "default", + "GroupLocation": "wtmimg", + "ServerUrl": "", + "Key": "", + "Secret": "" + } + ] + } + }, + "JwtOptions": { + "Issuer": "http://localhost", + "Audience": "http://localhost", + "Expires": 3600, + "SecurityKey": "superSecretKey@345", + "RefreshTokenExpires": 86400, + "LoginPath": "/_Framework/Redirect401" + }, + "CookieOptions": { + "Issuer": "http://localhost", + "Audience": "http://localhost", + "Domain": "", + "Expires": 3600, + "SlidingExpiration": true, + "SecurityKey": "superSecretKey@345", + "RefreshTokenExpires": 86400, + "LoginPath": "/Login/Login" + }, + "Domains": { + "server": { //Blazor Server模式下页面调用接口的内网地址 + "Address": "http://localhost:6652" + }, + "serverpub": { //Blazor Server模式下页面调用接口的外网地址,可为空,为空表示api和页面部署在同一地址下 + "Address": "http://localhost:6652" + }, + "github": { + "Address": "https://api.github.com" + } + }, + "AppSettings": { + "key1": "value1", + "key2": "value2" + } +} diff --git a/IoTGateway/iotgateway.db b/IoTGateway/iotgateway.db new file mode 100644 index 0000000000000000000000000000000000000000..18b7e20c49d66c898bc5633fc69cda1eba74b5d7 GIT binary patch literal 253952 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%0D*ph2_k?X7-rSd zlu|;Ad3(*FBnGNT;|y}70uV-m1X-d)$|Z#}V8y(>rbNX$4uh0NfF}Vmn7Ecf%D9e| z##>cMQq0?nj9{)C%p_1M3r`N{O^TWCSORmr{FUfp-kwJymkMiUBw9d6bMz67VY-jP zY(lE=jAGtigp5J%JctbD00A;I9I6LT1s6jYmzgldynV(LfwZV~QXnL7SBxYiATR^X zAPtsA#k_qOQiIKq2Bwf;;ZVe_y9%>F=Q)KgQ6AB_n779YCoOrD23ZW4vBF1U(ifs< zI_8AJVDc=l&)cIbSOkOF;li#Nivkgb67ze&8w+wcmc|tG_E5uIYMtP4rVQ{9cw9kf z4o}GxbQ}=tu$Z@JVV+3)RFX1W4rA2Vxn1ET!YtAdVJKKJZx8fjhRH;@Mh@)}Xj>BN znnRdKnnIhkD(3BZ0w;~Vq1JstAB%NeVG;)sJiVql<{?vB%-biJNK8|#Yf=V6i9-_E zsqPe3h;5{tVMUOX#k@VxOQFnhKw(T!3djf#;Q>}VU{w~OG%{f^Z!dME@`$7XLI2=V za?4B}0#=6Ac^MWLC8C(OSEwPK$YalZ1%$h#c^6 zZ~$;sSiWXwr#0c$&2fV8XZxrVNtMA&yb%c=4MT&5=NdCzsSyyFWIQhB?Q^6KumXfC ziWM&KYfwdm1Hgk|RKx+16!Z3q>dXkt9c4wTAP_^C^;8HS+%7Ovu}O+~dxE@xGc;kW ze}JrEGb!HgoW)T{rHTl=Ofhet=qxoU{8Orp-S3Rw;JV>BkQzwq<`C72d3%L#5O@S0 zt)=Ix^td&v=C z0bz(A41Qi_NGuGz6r64t;c>;heF#``rU@it-^dMb0HwexD5H_R5%@I|t76`s!s(|m zyh)l0>&-B$$^^ovBuZ%mv6ze&^Y#*PFeWjUhro)VW&|l0+-D%Aq)Eo1nyD=2?U56r zyYM~8Tw#SA9$z9N1OS2|5E}$FUd-DgV@z|z0ce;t1q6OXF6&Y`9DNwmSV>aM+oxD! zQKSkqvgVrMhfD|w;I9qRs0djkE#~c+LCT_FfLWTN9dLuClE_71Jv1X6&zG#2x5pYH zDl}9vVFqfZ;Z39@a91=J2~A>2nJMP&b10+E01An1631a-67d#tMEFgxdW^<-F>jB2 znj%gJgkcyC+!w+yL5o;_26ay%a26Hw_5^E42%}h<#vi zv7Q7r2uGrGNDpZ@e0Tx}6j4G1L9ojVFXrtP^2|I&@D*@E(4G`rr&$V#>KMr@x<%q* z-k!uEj1t+7kyan=5*7qjxT1{bG>j7bPl|basJq7cA3MQp;h`8NAk~3*Ob%xlVYO|N z7W4KIA{LgbVr?os3HoRU9(H&`@+^cGA@=R>#k{@CqL^ad-erYPF>mj(R=SwCcUfjr z%-g#x=Pc&!T_&!Jd3%?Yq{Y0w%hHQt-ri-EW-)K?vaqq3w|7}*SIpbHtkLK$BG;>| z(ZE=^$d8=7-YBTAFP$ole|&s?>>rQ5F!Ia8|8D4i8T`+KZyk87|MPt>_f7Xc*7ND^ z-|qTe*WPjn!pr}2@qz32%=4S~4-CBfhSIT>PL)wRcLJNC}*gVl432T!(rf6!iV(UOZR*MXVDG7}Wc%$Md}T+Z&y z=+!4zmR73^mD=*TrRqlQ${0Ib+c57xRae{KZSH@=j-ri2k)h{`*^uV45OV<@F-Cde@aq_#fq}FOzEIF~T(AS9{eDB1} zBiA&TxvgO4K`5j{AljW7U0bSMsT#`a#;LRQ2KqZO)pFg5xd+Dg%pbh%#({yyZUS?I zgZGu@U1DN`IdN)ZadqX$>KW@bbZw)$xU~M#$A0<6|M0Qx{^IBpr#5|tT3y*#TU}bJ zt*zhHynplFgC`5Wa$I1i%%>r z)y}{nF0RbNCBF3YUwY}IUwG*kp857CUbv(iY`eSf-~t*u*J#XTjo!t(M|bqzCAKws zZ~uiCuRHNZ?_YWTQ!jq>=P$>J+h%$Xo^JT`Wqfq%y&TyyfA`H~VBpa@_WMioE~!wX z_lMV3&!5{0LXG~v{Bxgs>7RV%<*z+^IV==y^=$EQ#^>zhvv7!bO?SZtx z!<9MW?ydgASZZ$FAKKAhS3SSnS^02L{&bI-lJ)?~=AQI^5TCGWwr`iJ7tSvRi>FpsCbxbKs^_0_S@wEysec=z56-&`UmA?s zf19ppi_uo+z9GGP$)) zcJGj|{kAi&*2_4t`dH64Ru9j+3`!fUwmZo!RySo^xXH_8weBys%hi6{nbp&4i?x-7 zbti5s-SDYwOt|7=~d%JM9y0+}Xmgw3uf170pgJnD5 z#Xl|%yUEqL#f8)5J@fZ&HerKJ>AsT7lN(I{kB!>$R&4@@*{q~ZH?iy?iZFQ?L^-A(P^d?_+fHk9EW^kYs?L}>YB1N9A6fra=dCsU zx+HIH_t)>;tedo5!3fq4_gw~}7mrR^Zw-!4)WxMxYH*nTX>io^t}WaYgYnDBfm@`o zS;%WP+bSWK%>3ffy*v1EnSAQVPhI~nKc{c8o6VZt7C$Z5ocMXqB>1te<3!zc94#SD zdi6Q7OYl?J`&BVjw6Ljo9XTrqoY*^jE4;-`)}UL zKCti*PcJTfz{xc{a0@tTuZX)$J?_qlEni<5EB4N=PR!T~PRy*_3})IZ;x5ypyEC)B zB7S9zZ7+6jFZ&k~+fL-f@a&r#QL9-IcbVqho#Fbx`pVd>-@CosUocm{WN26>$ z;SvW$hCHN&v6N8^WE2Ikq9}q+6h&O5L}TC~5|=0s2J$cx;3y9U6j{NLC<>R1MkC0# z);_hn>RkGKoP!i+rm$q}-hZ#!>)-!nUB30Lu}W*#CXVN=EzGqSw5~_Fps9s;#~IMX z7E@!Fdhk~xT|hup*4LyAom?d8n*9E|HH5o0t>j9sGC->@?Q+9Sj$kw`{r^9&4UNH( z{-5^#Q}^@k=^ej)xb*2g}+$%&iw6-Kbd=?{%5s6|E+WX*L|Vmw*(R%l~hl8 z{KE=nV3^}?w@!F;%B$Q$vS-3)S?yWsuT45GOjhdnE&du6835@iR4fn5mBV8TDo&jA ztFO6I#fbrwiuZU>@k05Er7v?Gd>I1zx~Ynjcft1bT=za$qpXgiH2%Ij{;1`J0PmW? z@SZ~BsT*Mn%C3Jalq#0bD8+IIfspBIfx#S)6_bBYrDx<;*izzn?X4iPcgwB7q_U4+ zZbOl2x6L9j(Hklv=lRw&S9 zTkeNjQ|jd3U+t@@Y9}943f^i$K~og0yZ{Dnekui*j~@HGM}K&y4B48769QIyY^vhK zb4tgn4d^%>Vq}o=>*^@xa_KQ{O}Fyzu6Ep1t@072(dE0x8dZ)c1L@yTqZMSc zkXfn@{+!a~hKt6!R4b6FI@nN`(hS+!*O@RuR^QL6)5LR5x6vBim_msSbt}z-t?4#l zTC8@@RJV!elx}x^2f9srp-gSZCc3F1ux$lZ%4$DtwU#=FQZ>5}s!m+ZKteLrDPvWq zG6`~k;D+5=f}*;br$p|?A5)o$%P)W)(>F6yJhP!5a*b|Hk%^mmS`~Rf>2mebcxzRG z0j9oZLtV<#cWc^|e|P0Np4O*)L}_&S`D2Z$L!GJe+fbwOP~VzHIJ{S`-f4C4=aep2 z?t+#6d*YXrNeCcPnL@;|E^0ha$EdKzx9)dU`=-j+mgc$Gw2X0H`u}&TZfu|XYsLxe?R|n<5!LP+_&nN)$Ux^-6sF=_`xd>QQ0XFp0Wr4Fmk58 zbv$otV?(l^Cc`LS64fFC%e}f9*-`~k7>LpFTP_!`4QA&3vRm8jeLyJtrU@zll;4@C z8%8B8$`4%>zS&YI=b~cOG_A2->#T>V(D~SF`;ywJ*iz6K+p=nbln)u)*zv>rB~mG$ zt~`*k+Ciq`c&y^uPq$*oOjK}uN%cfzDP(;N)=E;F`hbV`t%S^w%gc`6fFeYR;j02n;2kb*Z0pX(w$3?ki3U(vqcWH%>jl! zcjSbm*7~Q;#0YAc9*xG!v{IHKciC9k6(4bX*T#f1*j``Hi4l~Zhc6rJSzV6|H_gU+ zmJ4c|-?J3bTwlfVA*EgNhhvOXsa+_bo6V^_#@bbopNYNrr7>US>#iicDv2u_kAe;z zxpaK0RBMr8E*Wbvwc$mRa*b^BRGC<4)kQeU_C)FFuyI^VgQni3@k0U_TnG zSxxQOmH*OTs&YpvQ5s#RzR`g_u%xv_tMm}ySuu1K#kMl9o#xqD_lBP z@`Q1&j{m(&pprY4#A3*3PNC8U*r>6aa7sjIWp=0*_*7FB!>eQNrK+n(QEGqxV)2PY z?efe(CX1ogIfdHg39$8VS^oXiG51o%@)@PrfpDx?8OQ(vk)Z-Qg>s_&MZ2liL{@vW$bKUwywHruR zzZ`aa`9`@oq_m?va^ZO}bZFzbst%Be<8~{RyAy|Onpi@J^Cmwa(O zbeoQ(F?@|1>L$0@HZ?1+%9TLcv|{pzQtQxllb@_EUM<5exuIHRd}y1BtqL+tt5!aw zl)Lr&a&e5Kgc^nct0g+>fEg+9Bh-R``w5&`U~~dm7`kVn;T34##>(lDKJEFHF`!j9 zBDd43!$ZYx6lp52k@6`QCOiloB?ohVX}{stPx26)Qs5&6p%(}q1F%-b8ED%;#^$*> z2rj{8dI}w7?R*6qPOZ*q<(2n^((dL0Ufy&djp4Z*YqvJ&vJ&K4(Qm6!mkk4H8h2TF z$^~AoopfXM$Yhu*#|o~EO_WF4Hr?3iGqd`58aOMTQC{rf!T}eY(TftkI5POx;+!?Cx7{`{SeAT$-hjwPuNGS3cylJFrGOhURr+ z?Mi!To7$B^)`rSdyYeBW-I1%I-7X0Uo}=+=(DyLhv>R)uVY-QvbE}K9lCw5UraD&7 zDK+o93TnEd=1x@;a5IK@czrcN=mT=EmOYSU8keG42$skx{CEV5qaIFniG;bV*`6y(}@w3vPZu+-knusjbTFGSlQBH+oqlq zUSD^8Jtsy`dLH~P^qjW38H(*w=y}q(+3FTu->@mqS4d~{692zHf2cP6oxyqitaoSk zpLG7L{a;)EqxqN3GZ)WV2=Hk3&uj)}GccQhFF6Cp58pMu8BWH^h!z4HpO~e;z0I4U z6jG&fr!T+qA#-jXzxB>F9zB{9p#1~5mVHoJ3)eF!=3S88M;SP*!K040>ZkJPr_>vV zg16$)mx9(>GNngfKBau#zkdgGl*;b=OKiop;?aYKJ42%gJA^aufOH-V7Q)L8CVnrn zK=JKm<1e@>YOw;Yn2MpSe9UcW3ns&HSzVPzt3Kdyhg#fjQq_T5dqjpa+93 z@zoI;bqIqsDAQvTbm*Y91}i!!x)HNFg^m-p<5!^QgtWCzWU1}M5K860ePsMuE0xjL zAw?s5aIj<^7BpzN!3~cVE$CPRihTpb{Yicbm8Y!L?JVO7dvvW+S!z2mgwpo9+Y!&d za4G|n5q)OH+E#)0RW8Vu7`7(9RCV@NKQLMU$c6WBn~W7}tcq#J4H~j$0O$UdWeqg6iPN|Bwt({7#_FHu+uBfL^DgExc8T##( z=uKHHh>~iijoG^Tt(XBPtNFI6sjx!{(XykI*-;q9{zIiX#4Eu z7u|>ZAJt!OzTG)Cc)x4UADI6{y8v3!B@n#;-)Vo?JUstY=e?oRs|_Aoe5Adv{y}f4 z_u#NQ|2p~xzBIpU?vjOE`U1}VwDDH^RrCq`dHt-$Gxf*O0r0uScN?FhU*Mp^cJ@xx?{2-(5T3#p#A?CFX2v=NEl;BWgv6)-6jK>H1YMA%{Q6EYuW#g zNMdULKPD4+u<=lBnMtZ?|34-12?`51D6@(uJ-?9z_Hr@kAatJ z|33!Gsr~;LfaE33XKN2Kkiv^GaG8PVY5zZlCPw@JF=Q*+|Bs<8Df|Bs-TK_t1GOcF zIYayZG0YU&|Bs=4(Efi6eS-G?V>k$m_PwgKioA5(-r!cQ+T72VqZ zkEw^&{(nrt@de!uwky%CZwUjJnIc*3|Ho9IYX3im99jGSF_gpF|BvD8)&74B_pSE- zV<=^{{~yEEs{Q{M64Z0M&()R~I#KQa$FOy3|38KaQ~Uoh43cN{mTOB4FXNZ%|HtqL zYX3imi|^~b6PQP$QK0t!W9Z?|?4MIxX4u!xz`!M@vzYe(W4d;o-hZvO%yhdt4Fi{$ z9#Y!>kLl0E_x~H5fklC~yarmQqBSd8nrakNJDW?m9-Vj{D|H?1|HrUG^wH@3K?XeD z!@y;RWv&bVY>A-|)c$`=wTSlrW1yGX|Bvy6wf`RzSJnQ14C-tFZtD`0Oyc|h$viTx z1m<=%4z`(w0Ubzmn-A57?+l+CK0Lf}Xb(Gs_XaOEKOa0gI5ybZd~2|y|6%{t{*(QC z`}_K5_de~t(R;f0K<}E~`Q0zNZ+D+mm4CU<j?2i!LzJ2M)bJl+1RQyjR5=0KM4s^`WOkGs^?msT4JXfi_#UBcX*i0ugQ=*e{4|~Hp$uk~7U92)6 zby>N#GN%#%D$$KCuz6r3M=l^?=mbBCj65BshL=TNp2R`uXxxg*6o^DBk)i|B6zDS$ zi$uNyVv)!R0CCB&%-qaO^EkkdCpYLoFY)mz=?J3%`pHZmo$gcArG>0-$Ssu#eQUkOpnXAz{I&e*=J?Q8$9hjk= zb*B3EkW3Gi71DtgW-Uzpk!hP)6fqV>WLfbDb$Geyg}D(~$xS-Y2!c2U2+Yoah;p(l z90kakj6%tOqheHK3JB?kn zp!Pv+_*cXK(|^DItNKspcMkva@Lvu8!SLGQ1;cuKZ+l1U!`7>%| z{Yd?i`f0Tf=H8mm7uyT(F1)a?XW{hu-^{-iC8iBB>MRzHU4Q|E4$s=BL%vVI=A)!i3ZG z#$X0sFB8rTR2%^lchhac3_QqwYc)cdNZz#zN4ZGevTE&vyekXc5pGpn`XO%B&<&$e zsA%0!E@*)XYG|5ikQ4N5BkpMHwa$RN@GnEcfCFPC@3P_`z_%;a~(IOm9Of zTHv(;r^ZTD90BvwiX&hK8thN2yUIvZe~cNZ5eH`Ace=~<`xvWVaRki33q)&X;1WAf zaRkij+0|VJG>Pz(zb!w_3_K4Kml+%V4_IXsN5C8@iX&hKDvp2|cy8~t`hG?k#St(A z6-U4fR2%^_@GO}}W}xB-n1R2`e(P`akSJ#)ew}^CuMN8ObC_jzCi{*W_hTd~j({0> zI{VY7u>%!H!2Go02pA)72p8%zCRC<40%l;pR3=Gs-%CcG7bCD1z~l;D*Fyx%NBF^r zyvVdQ+Q~>PgKyF15*0_lNK_mFlPFgl0W(l>1kAuinI2}~0y}V?9oU#})arAMMy)OR zf1`C^P5!^k{%@B1m(2g#ynpLJ`;~Ftf0p&%G%_(8Fq?td49sR=HUqO6`2T(e!~$Vb zy$WVv+|5}m=afJJjpZ=&xQqQV1v^k<-ORVXhLw1L9e6c6@G5rTmF&Rpu>-%$4%DbG zOt*&2q*t3 zE@~e<{a{;0qfpfg5;Gr}xevf!26Pe_h@z3<+fihufHk?cVVF#zVKJ(t0z-tHUzm<^ zGZsjckF1&l6j2x^7OMBm$W3BMWvUX3?^IF~)brT}$i7m*>wuNZ+))(gIbPUKEzfcB z#sQ=cpDlIl8<8R4&wav#V{8_)vKYke&glOxb0ztCE_yzLhv0Se~*3 z^P0yR1d(eGzZq$u&}6{IJ4zzA z6TDIqh2bbq(LmD)Jgh7aWL-v-1Cj|8T9C@uVk$w4Z&p%4Mj!j82TZGlye3WnNc913 z^HMXm(W%ppTzOZfY_vG{q|_AO-2(R2h;2xX1DPuWh#x=p0b8`NS4AoV%PP*PqymwE ztUqv@ft>=fkfWJsgs(L60Lepfsbk`UK`K*_TAW=;^}*_9SaK4k8Fo|-!p}^2UPyRUHe$CshJyQ2(6r?*jY(U@*LxhbmXTNpbHja{ZWej zfZdb=!eARVBL0TSl)4sYRZ_7b!#D>PH&5}J4h%P7Aro6fM-Abw(2Ut8noo9K59cx86y>gs{ zVPaT5K*d3-r#3PlUXF7dYfo?}2F`&v$0~P1plA$CeiEC-H%>~0Py-Mma19Fl-2rSI zmWp8DF$K6+&}BhR7p6S7_+ju$9Rmv{#LnF^qoK!(5dyBzD7GJBR zqML;g1~>_m7;s&viM=I|>d0^{E6fwzz;b3Wg}=p_l~k0qW`T#zgtwAe3w&9K-Y5sl zCQkFjOmJ!AHY8B}#Tk`UBb9Y+=YZa$m;gv`a})spJBn=!I)K{3&vC_=3=Y58QAtIm zLWCm}9|{W$pA5qc#+b<{f`NfEMWkZA#$pfPGBjN* zCNGY$2w=Me0jMbRQJTy3=Ax@e;F|8pwoEfJ4I}omusE%f3iNd1%Q2lgCKh5~#yI4G zR8K-5T#q5Po=Rnq-^K4#QemUGd141JR%90>evBI?vao?|*Mjk8<7|`}aKIXha|ovn z*0vLXG&R6`jDV8QEdxVg-W7kVlInO~lzN7X>(3Tol$8q3Xd+}DoGD~fFZ2?NF)3n0zI9Jge+%|0CLN^` zfg2TrN-D;J6&1Io>06MRz=#dN6FSQA@dH1xZIEd~D&xTv{YokTH?}YIoEAzeaArk# z*ARDsZ)3i!B)4+3j=?S<3QUS#B{lRsY*XA;zJDklQIuB;~*F#5G3Ac#C!15gBW1H0MBA!kH5&@C71BM*yC zB{f36*Z}S7$c2u#yIUqFlw;B(Xj`cuV__L{WuC@2islxmr9SAfm-VTofGpqeSR(7qjhW}3qGiojM0sSJ{$ zn5(4XtHe3XLhJ%*@{|Jt0dFRTSrnQfE<|{+;u$f~zoK4A4I{(z{2VGrQgo%a0!ZLS z7D#$w3q>YQ0!U@B1;17P|BaP~FcaWDCD>&-E`2A)Rgdp%k6@bxNdmji#}$ov!`@5+ z?5-qqaC+dPMt><7oT#fxVSr)oW2-oPQY!8hxcR{d&I_zw17-=lX&6%}ytFWJbGTnJ zZ)i&uqWWoMSqU7Z0FDBH!Ttz$Rp!Z!0OPkfR7p+42tGADKKvd|kJN!*f%_8{x?{zL z1*>193Ji&4aYH3F%;7@;K#men7$^=@79MdJ!G4~@@(EoS{&-iW`(SZ>B{i{7E9e7U zY+4z1Bn(HKBbbW>UUY2ZRt{`AlbBw4#dVcbT!4OHi9w2^0%i|Rr^tp0=%IJD0|(8+ zc?qcu{b2F^N-7NV6mq>$hKeBAe6n{k7|FQoQ6?E%X=KU`!W7OF2P>(u;i53ku|^3_ zXSwe&1NfkF?|He2m{S;vH^CJ66h$Q!uzt*62(I@)oaNL4JOU@*w zwz0Ujl8PvpgJN2E{bHsg0)j|DVqrB#4$3m&sKue!CQP|qv0O>@vlJ@;cdYLt2!Q(- z2__5BUWiL$oPaRg|g?uRJO`(q&6$dJ*2pc3u=vyPSi^E|60`^ga_|*t!Xy}DDte-^I zD^n;}TwO_(3&hUljWdxqY20gj6#gtLfp9cUOt zIJrXu1#-nzl~mgdywt#sGGI4gWm&=`jw2>Dag$nM7{nT@V9KbAD=Vo8okWP8m=deN zyP~XCN)~XJ#Bl#H4S{Kuo{yaUs5yagfQ@a*L}AWH<=ujs)5Ld+?^RL}>chvDdkH2A z_7)u92!{y*QE)~P8_KY6F#}AIWbxffDr^TVSBcZXDk!})SnTlB<+Oq6gPU7+EJJo# zTv18QaaXz?Dv-krZXe2N&?pgp?vFm@dScnLo`FXLwl4`^#(3gwK@bGsK zoWW{|Bg9W^u*=(U(|wqz5(R^ODNx8DH?XXe2+F~D!H?khfrA(uxnJz7q@rp)$??Ki zrE(Y8!VVx+#94w*2rCLVoxCekPG97eRQUHngb3OQYyLXyGmFs zhX>$Bxae&Uv0$A6rVh49Dydcwzz)Y!jSz3adc~C=qY>u_YYG=Sj#W6>n3>-Fa zNK!X-5or|rlp$#?E~})%HG#1#5j|7#0f)(oQu_bbY+T`$CnfK-DZYAycoq*OR} z5?>UL5?>1?SFql2(q{%N4D2Bo3laxpSY3-tE2%zQLaZrR`w|9r5*O!d09Vk$eU;)S zl(wmm%22=-drwMD5%01Q0}pX>iB#ONDEh~yfVG8N$%1DHsZ3pYv8R&i;x5P$AV7Eq z5g5lr9Uzz;5W0|d5+PKNGqKPaKGx!rN-F$+T(aVOB3OYN6vhy|G&x^w#2Q>22?*9< zy{0gjMF+4ih=Y{kRxt6mq(e#UdB~WgNpW!{)q*dk-CXP-gRKpN1)e(gE&_ru4Gjy2 zgsfMFW3mV5ZX%a~$jJx62=R@7V-^2 zgpiQupkO;kzv4vi0)|z$Fe<6=r;zhNaM^}QhLaHQ8n`&KG6e8q1eCnUlX+z*c#GYY z)Ywf!7!qPlmhc6o8ee7jdbR&w_o-9l|HD6Kyg=P_qzd-%*gc%x(J?6j{gPtOEQAl9{^PWaFIsAm`)4D zofA?m&rA^d3=GL8BAfz0713~n+H%WAOdr`c_$W-5CI5n~5wVrU>0;CldsDiVt6+*KT@q$WU5`iQ2%`;~UU@T3v92D}86 zr9iX=$T`NEX(C!^6}MMXqY(K|V9G{FM1&UeTmFYTL+)_!6KwyYW5Kz{xBz;}P<&phG;1bv&WJ?gT(%c2p*tPgUCDleS z9Xkps<`hXRcJ;1hUP!K`;( z+W+sz-RJ6A^X=|CogK|*7k<-uaqv?AzQLu7@1nooX}y~C`$J#92ZqkV6OGS%OM}Pe z(Hm{?g~dk}?x{b%u(M&J``^P&tMS(2p7y@>t8+i^pVK^C|6u+TH2(Q`{`JB8!{_VS z+)szy<`=CudY?7hjfZ+C`X4o(ncvlWu>NxU?D?nUn3d`u=IbbLAG73?9ggWys=R&7 z;h@ZG47%X(+$FUo1~8z!eav~U^_I+Gt9)}zrvAEySv$cb-<7wI$)_uCAC)4pJX02sp=%}xpKY)%f2;@3Gj035Vz!`xw0b-F-c>sL33tDHKI$F!fWMjXJEru36 zn{$+3G5f|;0cJ{q!oB3}O98A!83UHIaApcr z8*ok_@m&*X-8cZ&)mGjnzHlc9hovQt*vD$zqDGHDdtk%KBhkF zo85=GwtnY|GE5bf*8ehX{gk(lsdd`fTjJXKDQ_QBk)*tROp%fD_Azxs-{?Kawe?fp zKBl_oYrW67wti<~Al24SdHa~MnjLIgKk5HRwe?fpKBk^UdHa|W73J+?s!oQ3$8aIB z{r{NS5asP-$~}~~k0HfW-ae)%qceD)qlawEc4bN@T4=&Y^(a){K8DUjdHa}}1?BBy z$`F*dkEtwZz|Z~a`~Nx3XO#c1`T1lAKw$uE9T@CA6$fDRt=2B-0k}R7V95g5d`9~J z&3FL6f>7{G#B2s;GccQh*$n)RoB=U;m@J(37GY9g$3!C2q3DPVWLgj2E(4h?(QT?s z3Jz!~t3mJ_6#~-G3n??ekAWUX;TJHurnOH868-;_jfyFU(-t-iQ-IQcQBhBQM}$W= ztH4o~Iobqgcn8$yp`*tPE?OH?Ff;;6YR+&ajbwW0C=+dhQ<(z!X{Ji_Mjc2ni_et< zH*XZE{sa||R*Be#@a$36;sPR$q7f9*p+FdTX#kHc)X>Lnrj4W+8YzuiQ4wzWX{Olo zdL2k0)is#O&_$@nOy_Xu02jktRW{GaU1W5D_qK)p!a=3_C^Chq0Hq2j??ZGmHTH_u zbRvZ*573}6!&IZ89@?v?6H-(*L$s!ok90QUtB>o`85af$aEoY7XRa732n|s%>^T}T zqZ6cj%9UsoxTjP5xaJ}MKX||UaQ~ylM_Sj+|EPCj{y@X5zdUzZ{qg?KBv;?~ymPGa zQ1k89`3pPy`x~v=FBV?u-`Cl(@SDY>?R)E4{j6TC{=vc%zyR!>|77vqg?qa8usi>H z=f%a-2QPKrTii4EtGS=Ip6)I8&jFsmY42;i)%;@alEEEwM_Lc`J{$g|aj5=5^T+L1 z2bcDiI*&Hn^}Bm-4sU9GTF<&Sw%%wwQ-8dDcKgZsr<#Ym&$T}sJl1@+_HpmQ;qy(a z{~8jg_(#4U1LF9Bh9LG^ z-42u?IA4EX&mMxt^_%4(wK+5Ex!oHj!M!=zs^@;5F)XKN2~dC` zF4g=$!$qq3f7rO2(u->TpJ5Cwof+VdHzNW4TJKHR6a=rQhT#~h&NC#f&#-Uq7@UE# zhal9{5EsLdsnHCE_EPiz43nki{~2=1p(w-fO=|lHhC;GGbZRFUR!GhNGenPFNL*sL z8#{VP5p;~|Tr&)d+P9A(P1JZD!-Kd8XY&n)+EDZV3|ry+@Rv9#2m-=}Ob^2;I42G< zLlY?d|120F!*_?R4Jjyx4iPbF8zsvjY_aueP6T-wQ(894%oG`F z>lM7aqYmDCsozxf?d;BPyL-Q$-TUiRr)_G3AC;XMR9f!-o?@CS~+;*+Oz`dy>CCf-z|}`^(th$>wcs=YvwGY5a+SJ>N?-`oV9S)vJm6! zDEDG6Msa81xFcO*U2p7SHFp+{eqLC=v&ZC-8BflNPypNmrjl_uRgO3m|oJTdgVjdf>py$z?qBV{6<8_{ITW6h}WjgEO zEX!GMXWP5p>%X;5?%2gyxTj|x*FEzJ&is8oR=BsTn`b)l&TM z-Wz)!)%tl}-%lse5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo z0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIVo0TB=Z5fA|p5CIYR-w-Hi zm8_2cDRzR!)$WJjHLP9&Gf2>bD{K-FsB6uwt@d6LR6;52egaJ`!#ZjA=L7twe4P)K zBqET10-1E%}W@lX6g5!EY^B~a{y5%`R6C~D;`&C;!v-hzbHL4gxN z;Aj4%m{qV^)>?Z%ZUO3xPh38!xcE8W@(X`a+?rV%)i)JOsGN72Knbg8wYBT>!EX%X zIFeI2m&>@3JGhH`d4Pv`j3;@Tclnr18);+2G9N4@Ni_mTaT@1wIjgyoySa}Cd4$JV z$1`l8tBumG-&Rnwnxe6dh9)AAoCLn$JAUPFN?B!Vpf@&7k<9hzDoGj2Q;Dk7q&|&k z>Utk#(1!M|k5muWuc@!=*EE2^3}Yk{nZk5tF_#4_W*K|35BqZ{NAo`2Y@AKBIX2%G zig_I7yL#zMzNfTRv4+;d+Nlz8a2Ii11xr!Z^-QZwHPUF{I)A0Rj(M$ISGEqWb6J+_ z(3VYq1~P=;zxdG3+1f3HL;GW z+zyLVk3%?~Q#gwYxs)~B&Wo()4c_4+dRn#(u@N@iW}ELet&ti8R;5OoNswhxN>G|| zRHO>ksX;9oy8gn=Trcz1w4b;?CjnY$YSM%dhzZRHlFK8-q)<`N<_vGd@X-hbPyh@TI1NV^IUm}Xrx)%d+qPqkD32oYyF*Tnm(wpAOC@-Ez#s-@i}MT*ME(F>dw>8 zTe<07pJnu`x7Pmtf*YSqe)HtR54O@T8?r*n-b(+&0|F3$00bZa0SG_<0uX=z1Rwx` zae-pP!u;~qle3wY=6oQ$#I}Qk*&^_m8QCWDfzWU^i(U{Mu1S1+&H|ASZ!U?odr_#SOs&Ro|U+}eeUHj~f z|Ae@}Txf380Rj+!00bZa0SG_<0uX=z1Rzi+Amaimy$vdH0flY}wDh`h1b_LT|5IQ0 z(w74{jv$l072^o%`0)b-AOHafKmY;|fB*y_009Uq`^`tk8oqM#}VB7C%^xfPkrd^Uq?Oy>~Ii(00bZa0SG_<0uX=z z1Rwx`0}0gTBe0EFxBSpz!ZBlJ8jeRP21LLTj~lV)=tki9Z>)R-@B6yD_J{9!@&^<1 z4(_GF1b9FI0uX=z1Rwwb2tWV=5P$##ATSpMBPc)B@}TwiUoA|;1(2t3 zF0?!9009U<00Izz00bZa0SG_<0uYb_hddv_2S0h%AD(ymkG_w51lZvq009U<00Izz z00bZa0SG_<0#gV~pMKQ9|91700bZa z0SG_<0uX=z1m=!FB_F}-2P0-Yj$qLb*0?|V<@e5-hzlSe!Q5$m)C2+$fB*y_009U< z00Izz00fS8fkU2;VBtSqeVYEYEhouw1lkf!%ifw5$2vN;9|91700bZa0SG_<0uX=z z1Rzi+P?L|~^>5wJa2x@xaAGx%qwBHdCrtNk8m{04KJy*nvrvfGwS2<}?6|TTzP{L7 zSX(M=8ZGmAPGI@IX&}{ z&GUZu>s6ZUFObFsp3Wj4fwaH_0uX=z1Rwwb2tWV=5P$##ATTEcC?CP=2O}D&svRof z1S)qb{X3%?7kFX)zx~%2p85ItHE{vtBbXEIj!HlP0uX=z1Rwwb2tWV=5P$##q<~sJ z0xH;{*k9nSa;eq0z^y}XT5|EumPR>_Ad|fn;|L@U9uR;41Rwwb2tWV=5P$##AOL|{ zfr$?OD!1-uIF6v0S(snmdU7_?(wsNKz_WatGvP)aGY!{efkjymqR5GCGxP!{F<&)~ zK%db#f{V_6_?&_BPkBQ27s${Mf-J@n)V4gHLjVF0fB*y_009U<00Izz00fS(fZ8~M z)s6WUm2d)WOx-vF>-tF1vmes@sFuwryItV}j0uX=z1Rwwb2tWV=5P-m(5l|aPK-E>vQ}{=6)2ew2 zKl#)zZvXC2=079H5j3>z)3W!p?Q3}?^L3Rkxg0#^n83om1wYGoHn--RTf$|UmXGw% zpkx-D8N&COY3mkq-Na{(BNE%9P?8%(&)@&}*j?9i7M8Yb7kc7^w&?^qGomhS5bCGi*ngeqpeG$cO{(Mlolm?;G?#Ct_Y; z(fXsrO=#(65X4l|q_(EE7f}8UDikD?io+D1!94DoEDVM2xt^YwBCf3|_hwU5LpaJc zZF-+}Pk!~Jsl|QUpu8X~=8?-xJx-YK>ttm*!iZc;1hG|HQ!(?3+Cmt%az%HoI-#|; zqAvZhVOb6nj!pQ19kakN494v!3`{F_g>TnZ)R;v@4a>BqQPJb;D(ZQTuuVH*US!Ih zCbF4l+JYIhLm5Ww2fl9BR@9t%MIFvf^`>9&Smw92qMj{`P|#jU-*sjtfysi%pd*AQ zJkcXtM3zxoQEN68wfVFvy1uret`Tr2bOiGRHMmK;J0151XTHfT*YOf7^6HKzdlnTH zVj4}q;IaCH$+m3Ab?G>=^eCo7C`gzqT%FmmX9<_Ph7;CR)R|31rz5&+Ra@OY8rp7b z2cFHGBr<6qO#(XVsmcb`$kL6(cZ8^IdUrMz_2__AKapl$scm|}gUAaLi#aiO=tN3q zd)Eo*d>x0j!(%HpjJi|)Y|f*GAq?e;?pnRLwf2nfBs>U&!&&6%5nUTR%DZHHCZp4k z>jjB${iN=w=d-ys(V0;FXrghI_tw_bN({p>^@JJRvzW={`H9E0EBJINjQrU4{IIs| zIiE%28=lRTO*L))+S-~@&MLzS+?e@BXj4rM+DkpUnERpYJDlDLL}A?tiqGQWH zsg(pio#A2@h4iMxv?GJLp<~kJpWX{OmgjK8t*hy5E>9+%@upGJ%jG za_Nnp=};20zzYp#B}t?UBj#r8)zx%1*C&e`>R0@>OEVj5Yf49cY#a2JRLatYlrHw3 z;~LD-=@Jlnap;G2@1gi?E>M;^jniq{rS-?Y&VA3Lx5P}CUcyYzvFO-x0!Al%-3$y@ z1WDcLl+Wf0WjU7miGSCsdDZi&FW>9a={?cu^3Eb*(G^PP^nNO_IGz2iklw-5+x@ui z3dLu0iK0&u%DX9jM!I|a3YAt=*OQ0`y1^npq_@qwm9T(&9!n_QUZT^xYRmEKcGH=j zO-;{s=^RtNlI}XQp*6pp-pIGmhof*=US&qU@p??N27-4R>8B!kD`N=P=#^EN_|znF zy56mO-Q4LCvViWTud94&%4b^hOPgD@=4ScvPE+}l=N|p=ejnIO-mSY`v}V_GoOIQ+ zs1@>)Y&9|U9taBtgYwJ*6GJRkr82tWV=5P$##AOHafOhcgU zrp${fcdy<|1)os4d9<|kHmy_T-p!jj8uJ;IdnYHzf-3hej&FTY+o5vr;5aI{UL|(F zgbH@5#Lly_jw-S1wziwJ9V)ToR=Gr#*zMxBM+jUYbh=2>GH0tqF6rZFW~EBtuqAt) zc9%-ru9*t%PzjqYpn~gFqE<~*uu~;yG{4d^uOG9SM@LPkO3b7&Z5g`J>RUcV{&Zi+ zTU0S~>4qPLuDR`nuIpQo)sW^XRJch?YwnQ8Y&9;hX^n3RF=57?FVXgOk)QsOH5-2 zDg|4z_iA^k6l|t~N-eX13M#cs6BSfynKX8wQpYrQpi(f69jFv+Xl&G4=y>gX-tDVW9uR0^hX0hNMjTtKB@8W&J0n8pQE3Z`)Zm4azp zK&4mf#syRgrf~t4f@xeprC=HtP$`(k1yl-F;{tVg3V$~8^}l>}n=s}40-5Zs zTK3kgnCZcbzk>h-AOHafKmY;|fB*y_009Ubl>!q91Z^Wq!iXmGFq4?3^)PLh`N9;; zihY{v$JYHI)+-4F#rk4zVQs0fX|$}*Q<>hNm|2)#-g@#lYAc{}RP8VD&W3xwf5CU2{if_MkjXwR=NEWd zzK#b3AOHafKmY;|fB*y_009U<00MJCKrK(9oL@jCoIqQ2D*c-nNATY4!#}f!Z00Izz00bZa0SG_<0uX>ey}(2V|HG7zz|=j*^Guh80gsp& zT7tQe$(azsa|}NTk~lg@;|P}g^ua5?*Z%EOYUUk8K7#tz$4?M|00bZa0SG_<0uX=z z1Rwx`BPgIYjzG>ks1i<~4XGPP@XHT9{ICD`k(2(SCN6++1V^y7v1$lF00Izz00bZa z0SG_<0uX>ey@1*{f|=$cxbc7Oe#<+8n@h+?P_K@kAOHafKmY;|fB*y_009U<00I*N zhhrQ8t!!d7DmVTQ(l~;@T=eAU|LUE+*VfECh;alH4UZ=ffB*y_009U<00Izz00bZa zfg>%THjaR5*`X3npmKHN2)00Izz00bZa0SG_<0uZPdnCRet znDP;XRuBryc9{`6KIJ1YP3C#N%Us_NZ6^x3aGZlQj^O4sh5z?2SAFTZnt2B?j-bBv z@e>3f009U<00Izz00bZa0SG|g2nwi;BarhBs)Q40L+Zv6Y`g8|=3SYK-&zwFz&L^< z*xFb%1Rwwb2tWV=5P$##AOHafK%ibgZ5+W&^AYSl?UBFz)`R<8IgX$qE41vb^glcx z009U<00Izz00bZa0SG_<0uUG%C^jt2FK<0Ln`vpzJ8q)urtp}nyCE|@(`LSHCCt$E zIQFf`@i?Dh2mfMbay2S9{%5!v+Nf1>!xo=&_I>@=_@{Qft+?ujSFZlK>@U!e-K%By zW-*RH0^tDx2tWV=5P$##AOHafKmY;|IPwA=jroj9Frs0m;|Run6m)#+PnPE<;sQ@o zZ~zYoKmY;|fB*y_009U<00Izz00icOKpGbaEZ?_$hXuMXn3)7IbGaQcgLB&pU6=YP zSZQ3qQ7A|o^;WrI)&2tS{NCAry5Q7v{0uX=z1Rwwb z2tWV=5SVKM-#iTY2xyy+$T)&OK1sJ*KYhKNcQB0$ARob8+xt)-2tWV=5P$##AOHaf zKmY;|IHmkAoBysRE`V_a$MpV&jfVgPAOHafKmY;|fB*y_ z0D-wBaDmG3fCj3w>NtXVa{H?J2o|38w^#ndlb?7@jw8rq&(^YMFIu-~oh*R|1Rwwb z2tWV=5P$##AfPTV?}7Y@Cu&;Qyz3gRC8WReA}cflBVwKzMa(p9kNLLcGb41ZICNsm za^s6e2G1>RuKZu4!<=TauMAaYq? zxen9)DD*`XJHBpAvBli&wj8Q%mo7}x)x}1t$d=yWk^bI++}8f$w%qElv}OD1oUHCp zX(V@fX>_R2mD^D49qzk=HfW$!sd2eGce+1Z>@A-j^p^YkqTZ3-(=VjIFP|P2xAylH zPnV17y84Q)zVa0#g9B?+O21Cg4OjFI7YnKjt}Q*W;7Sc^U#hL)t6!b?!*#uzi{;a& z`omYhTKU78R;_h63|oAtm|0S7)hjElYDYddbSGr4m&DYnflqt1Z!pg>UEA=4r}HUW z)#>I=x5>LW_YBuNP^(f~jT8??yQT}8M$1;pPe>kkr>V+Lx$s@qxR>9&tF_|g8h+pi z+h&nzCCrShfR2JBWRy)%c)qO*;U3saHIXG{+&^c3!Kxm;qmYM%}|HzFOZ>} z1lgyv*JZDxAMk(x1Rwwb2tWV=5P$##AOHafK;X~`T&)s5Y^3#Hpb~X!SlyU!Q3*`Y z0_*w6dc798N?q5{yEtQi{oHg2CDEAfy z`-f_7KviD8uy?q>chf+T?nDg~M~V|SVJ3p}ZkO(uo+I2dR~|S2v+o&tY{T~QNO7>M zXJ~8hKz||ZEsw<2`*z*A{E%E&Zlsj!qZe|eP4A;Sgt^k?xsmN#in-O}e=F;=S{ADO zc5Q#(aH(9ne55PBYNR++rh9zlu64uxgZ(4@TZ`qc4I{&J6XC+%0lJ^Kx~p|zE|=>a z$@P>ro<&=^t#^Buyce~$R45K~P26AWsx#=SB6LLk=^e}7;qC7gxg_k&^$+Eu?u*wK zx0K2k_m@UCR~C8kftG&p#L_RWUwU7;d!T=)nB&}-QSB;AlTERycc9qOBX1DW-PMue zRU^45T$8Ib)rR7*yjhqlr1uQRf1(!;>6rOFY~aTw}tIR{XeJH&8lV4yg>zwP8Jgf5Tbj>-{3x8B#}dXm!c zU?~5ta;tu*G+HhyY{SLry~mneesV4Qi%-5XAU;nBVkT1c0l zZq?d!;cD<%RXd^5_7apyZ86dZF@!jB{18*V`*kYPZxc(-xkw z`LfHXpT_25;ZM1^jCV}&_jHC!mvgY|a~_?YDs@Ww2S$p+6Ls>p_4bd*O6iyBuUDxx zxsAQ$D{}+XqVma_+=dZ40q2Hj+4Q`xL>G;+{C^cVSC+4@$pxj-K(UuPo|MDV;1;>h z7Y^F?t*4!dx}J1YHg0^EDM($a74_|qT~%b$(@zI&of4CdTH3Z%wHv>xe(UMSy3Jp8 zFt)$Dn;$Lx1s*wf@zekNQ;+;m_7`Z#?v?!o_M*SQVSdkw)jN4vcTmgiz4BArtl-7 zyJNdQ`NH+P`TAmSf%^Sz8ZGmADiajaR<4p;T8#^cwLKSI{I9qFzGi-br(Z(?FF^nT z5P$##AOHafKmY;|fB*y_a99P@@)XMX1ysTbRP|Ho-^9Fwi+^S_*7yUfCN6+Hg@?6$ zu`&oi00Izz00bZa0SG_<0uX?}YYC|3DU@*m#r^_y;|PBB=@r+#{r0DtX^wmg2&GN<>PCEhenW(0Q(vQAOHafKmY;| zfB*y_009UZ=0vJbd_!}8(ga8B}009U<00Izz z00bZa0SHVXpf-+Rruhi&+5O-4z4L9)twTP7Dfsbg2tWV=5P$##AOHafKmY;|fWYAx zM?lIG`3O{Q{2!!o1e<>U+2Qwp>(Niu%sYs21lZ#t009U<00Izz00bZa0SG_<0&_+{ zZ5#nrw?ieIK;`Pj5&X~Z@5vwksjppE6BocZf;rRns0aig009U<00Izz00bZa0SG`q zZ5#nP%_twi|MPO|&!1h{dN1-3U{8Yp1Rwwb2tWV=5P$##AOHafOd)VM#u3!!BZvhL zIHxQG9(O1ofor+U4Lpz8NhmDgM7|gJuO3IRzzHnhw|s{Mx-XcS1Tk~D9WjG*+Y4RS zw<3$SaFyK3#pj%TU;j1!slRvMym#+$C!AX|?;yqzOtBl_*ARdJ1Rwwb2tWV=5P$## zAOL~GFQ7J#K+Zd;5>BA{*Nr3i)m8uP_FbcmpR0)rU>w2WZ)B_y0uX=z1Rwwb2tWV= z5P$##ATWi1+Bkxl<|FvV|M6|@SKoi>Pmqsb3V!?=0uX=z1Rwwb2tWV=5P$##AaFRw z5s>mkJ_3~+{|9Lt!G*v4{CmE()%#4%yn`4=fIS`p5P$##AOHafKmY;|fB*y_FlPkR z#t~3;J5<66RIY9u!L>=||2}Qwe_dP?7r;1zIn(y22m~Mi0SG_<0uX=z1Rwwb2tYt> z90570<|AmArqy`|fA*%6vfn)Ap}%g;Zq=F=Z_pNRXnU&d^0rLt#}>Z~dk8=P0uX=z z1Rwwb2tWV=iUPYLY_wOD1=-vDF+%Z@-bX}iTt$0p|Zqx2I^e*AruCR=>S_AVJ<(GFZ)u>jQ zX4s)`3g2R}9!1RLUc`b(w^(3Ak>P}P6zcxQ{=s5tbmaMmuibac!}Q+^w>+d?o4$FA z@=I5qP+1!niJef(FxzqsW(tc8e9vHk9odO6xF5UDy3+8-bNB5X+kNNQ?k`%pP}$_c zMuJ|kva%8XsNnM)8xC{V6LBV7AJ-iMTzd(f#0*mFBFE0<#Nxuu{{rr-M*6x zr%R_VuClsaCp8e^$`iMxgaLPa%d!n7gv*)fMIQ4)TW3*XdT!#orj?lM&J8zi-%_M+ z&wb(1u}|N)!Qn#JceHPC=v#ZYzJ{Jr`?hy;`OK8hgnTATwRaooQ%gQIKcG@UYSYE0~Gl`b=8Hy2$7b%W7$o_0>53$h zL=!_s5l!V8+TILTLyfRXHbgZpa8c>ApZiL9%@eY}KqmXNoOkeP`8pmDfB*y_009U< z00Izz00bZa0SL?mfeTcE5$U{xD&Yj$qEqSLL_UJ|zIWHozxeo~pV!0%_RfW^Mjapk z0SG_<0uX=z1Rwwb2tWV=5Rd{FsPs0NPCkOVaRgubgY!N<^1jcWF2@lx&=3NQBfwq< z0SG_<0uX=z1Rwwb2tWV=5U3R>HcWQ#H)AJGBHLoV@6k8{%cEz39x*qz%-FPIpNCeZ zgTI&@M*R&|jdo`SBbA5P$##AOHafKmY;|fB*y_ zaO4E!+=wc{h#8L~cJvK@H;t6={N%Vh6e;7009U<00Izz00bZa0SG`~t_u_!Cp-8j zaTI%@=P@q`4QBeGU_odbjQd8M2**$2*r;^yHzqsy8)_Z=kLqy*9hWt1zvy$1e@XTi zXv|)hjw7INct8LG5P$##AOHafKmY;|fB*y_aL5E?HvpATM<LNATT?F1+@Ozxji= zATDso8XF6S00bZa0SG_<0uX=z1Rwwb2<#`IIy@ka3mnpX1W#V~i5>5M^uC+rID&a? zh4FC&^aKwGKmY;|fB*y_009U<00IzzzzhY7^Cmm^dx`5CrtL7@&U)g( zuRKr}7r2fB1b9FI0uX=z1Rwwb2tWV=5P$##ATT`v)!_kYTtH=bz@Z;U@XQVWysh}{ z|9*oUM=-zjm5Ff#^b`*WKmY;|fB*y_009U<00Iy=+60R8Cp-A-hM}9f>odH4AVRoZ6O;|MlgbN3%4rwsj<>@P4sYie0D`*e1179$CcwqqaL0|5v? z00Izz00bZa0SG_<0y7qn-2ha=DD&Td;|R_g`OQE6pL_aC6LA3<6`*kh6e7R_0uX=z z1Rwwb2tWV=5P$##AOHapP#qqS#syS{2h5>y1RuEe@lU_|ZyqeRW^dKz$#Ddt?Hg@{ z)>kl&0J}Z}AOHafKmY;|fB*y_0D+@W0OJU*-)&5G@Hf;t_%}>;@Hb;8P9oc4zVC(1 zv^;ti=n->c%ZyDc_IYSkI`~g}90Bcao0qqqoXxZ}=MUpJf|u`mDLS|LH`c=J)0B@O z9Y>IkB0xrhqwx60CP4rK5P$##AOHafKmY;|fWV9d-U#CeXu~>G!Uu?}k?V!$e$Qd=vr35zJ^;!5={Y0uX=z1Rwwb2tWV=5P-l@DDXxYM?mZyDnl5k z+*@T6RpSCLtbFdj-@N^a|4)u1XlyHB9D&5a0|F3$00bZa0SG_<0uX?}(JDZn{U-XV zt4ySad<0fx6_4t11a|H-pTF*(Kk`A@U!XC2iB`!)Kr;_sceEY^*e(b_00Izz00bZa z0SG_<0uX?}^aSW5bEirerwID)_b%Hm*9dwgk4Tp-OxfN=!V+ec6u0uX=z z1Rwwb2tWV=5P$##j$Q#77f|V=e)ieZx05zxAcotk4>09D&S6fP4f; z@4k#Jg8&2|009U<00Izz00fS40gNMejldBcM?kf>KqVN_Km}(sj^Lpe zf3f(>zq$3R6LA4Kir|v0iE#uqI{=>n_@i}MT*ME(F>OI3>dFxq!@s794{sQCq2)=`S1UOef z00Izz00bZa0SG_<0uX=z1SSOz$vA=wR6-fb;|Mw$^BI+B!hG7QQ|aFs)wsa3|GM^H ze|qEXm)6AvkdI)p@$n1-5P$##AOHafKmY;|fB*!Jd4WSRjzB5Rfbuv385d9)Zy@6W zb@>Q>{MZAdUmp9xM=cGEK`zdT0ce z&Y2;6pP9C9G1pCe<~Sm;Eh7xvD0=?>$H(rvp0lvDWxLQ5C$vo`(3ug%0W$;BX1=Z4 zEVS&vbwwo$xoOLuHXn0{fff5?af?nW`El%c-N8|p-qLDZu4 zM~R!z(#;@Hj_G?j+Wg2bjj6rRC6?wTwNh3>hYo|q!8ttt0rQ&WSom#WsZ z>3!Ng`PGxA7WZw#3_TX}$YrJ;C(QSCvN9cEM6M-**s86mn0ZBQAq-o&qPtd|&{|tj zm;TtWEQbl2nS`3sj#*$Bl)lxD!oaj*SNL{qMU7ch)UZrz8WlahuA-jj2-~z1=0&F5 zX(F3>rY)F3JCtF>e&Fk7ZAHzQSJdI$RB!qPk7a&aE9%+82nFqx^j&9W5|}KA3_3!1 z!V^8RMPwPZ6}4tlQJYVzqU&ob>KXxeLPs!9P=lMayVG%RaORubavd+RBCqafvS(3I zA*Rvv3m&UKm~6{-T$hd`OOIkYgo1>*!qu4_dzNsyYdB$DMV;AHbULEDR<+gbqoM7_ zcHr5}Ng|W>(IlXwo~mq6jV#?rd`F1drgvvkQI8H-)zj0$zRWANO)q#5d0}EPC*}^F zNa<|vIsu)p=nYjOKl^n91e&iN~}n_;e|Z{Mh#V zu(s_vpGD&vp3Rj_HEsUd+L}g@V_1P3Gv5eps;NPHsYe%cKXiSE(>sAEtUE#RSzMeP zQ%vJjs%i7?tgWeM#Gz~ZbOLqgyky1}|PW;bInr^rpnLBZIl2W76fH-U~UF=WxTVtLbbmPbQu5rcu+(?`msm`iA4V zG!l%)$P zUFyLe%`<_Q{iJ36Hgqfa0v%MKk!03dp zn}OkqAgMc@^4VOWEXPtm@$XtSuX;Z9<$HZPy(c;@q0)-#dJ^$KH(2C{^tM^I5*BdJV@YJ2iB9jTEyu6h zO=o&GH9gyM0y6en_*8FmMBi}+Fj>2Vml`i(<^_XT21n)M|Pet@r#t^R2E2}W^ zsY&Fx=+=#HQ|}V45Vr25ud94&%4b^hOPgD@=4ScvPE+}l=N|p=ejnIO-mSZ|YTdP* z%BpEmE958BYFyy*f4^^4ws6B;3+ZFnON&1zqAIe0(-0uX=z1Rwwb2tWV= z5SWHQ+fA7lRqkHBnF>Cka`R|u>up-6%DtO6$>G;3_fAfb1y$}{9N+q)wnOFK!Esb@ zy-MtU2^H*AiJfQDIp!2%*KKV#X**P6$F1q;bcNXM;^(s-TCMwve5;U4$X_?oL+03J(rc)(m(wMdk-DveK zpCW&{PuU5QAZ9Mz@T1T*x4qDHeJipWRyXEbRAL9T<_>wxR^tLcoOkz0pWEjCc_l9J zq?Ua-`()dVi|+NY$G0ufcBm9QjtZ_qlJRAfL&wI0!%h0uX=z1Rwwb2tZ(_0x~Y3a@#YF3#b%K z;{qxL)3|_2!89(QQZS7Rs1!`&0xAX5xPVH*G%lc0FpUeS6inj+Dh1QHfJ(tME}&8{ zjSHw0OydG71=F~IO2ITPpi(f63#b%K;{qxL)3|_2!89(QQm`5qsLMxi{+f53Xa4l3 zkIH-mnYMz~R>pG;@I$&@3CKAJQBqp-mHP`9_@33}Z?PUnWUrH7b9OIA#UKCy2tWV=5P$##AOHafKmY=VRY2w=&<#U3 zb=PN}ZFn>#sT0yOGiD*D*%XE8>NKfx+84k}T;HJAnND*l(`3LjrMs8-H0fe&1d$VZ zG*!8feF3gk31u`=!3)gTiD{xnng!GMLS|YtA+8_L{Jm~$nK4Z&?(@(}XEum^nk|=m zOt)j2hk&MbXMRFclSVWbXXN=-poji^THvYlZ({aU9=MuRjipi(f63#b%K;{qxLRp%#^ae=x#h5kSP zkN5rL%At?QJcXI;J;+n|M&I9&r%)}UBJva>PoY9GP2?$5NKcA9g~(H=GLjK_3YD%+ z$Ww?sg^IbJDf=Jt6uy4`Y~(3KoF9oE!Xi9EAnFGDKuH& z5Q<41?O71T33Y(y6M@5HG*2NN&`Mnurjw_zU7jVX^9%fw*MH{ATTUOA{ROlon%4Hz z;+Lym@>h6300Izz00bZa0SG_<0uWFTX#JRWPkzOUd~06Q{AIRjhjAQ+%#LFkh;7Ot z*)+hK=~3YOiOx+w5K(b!e_yeu@cjLckKJ{BPr)63(5GeB-S2r(+oTGP2pQC)}x4-+>7WlvTm`!h$6!Y?I_g!js1hg(&)(Z4_~|Q zmWS!T7jAh-y*AmcT5;*h6Dn)tBC!){8D?891uTR`2EJ#oz>e%h7~GFtXI*J{5HqZj&60ImS4W|#BC{Iz#ZSRXwpF;TnaOI5zR(O-6&X; zn4X*Xu4yIax^u&g+qV?y+jC!dbnMeNZg9BJ^&RaS9QxMYt*@bH)V}TATs|}9Ga;YJ zQtjPF`qYw7%@3$mP`hDQ@OhW0@=NjU-DOYKmY;|fB*y_009U<00Izz00fRw0qQk>mr8J`i3;ve ziPy-%`<*Hu_~)h50Vsq^()k5c;v5aM>JF8V9F?ofQ|Ncx{DWsMf5)dM`U@aW;ZeG~ zW3wOt0SG_<0uX=z1Rwwb2#~;G%2P(4uV*@e&WtDym>HNh^KHF8^XHqX;1enZm$p8xb*dD6 zlN|G{Qt$-Tg2%Tl(RQdT@i;2DUZvm?DyXzES=BnWwLPR($5z!PE^hmQS{)bBaD%f| zwwgY&W>%^cY{}lM-KA2nnF=bk%mON?)G|#}P^o3+t2)X)1xiblu>+-o4ULUji!3aU z^=e$;#qa*|%yYd@8i)%>6+9pS0SG_<0uX=z1Rwx`IUpe80x|);8^tu0yzkQ_`Mwh| zkM6B9GfLcqA_is<#A#eWrC=HtP$`(k1yl;AaRHTrXX-tDVW9uR0^hX0hNMj zTtKB@8W&J0n8pQE3Z`)Zm4azpK&4mf#syRgrf~t4f@xeprC=HtP$`(k1yl;A zaRHTr)wsZ^bex}2jSKAf%|*AJ^i=!XWLzN4M9=!zko_X<#7bE7lO(HWflKOl2+paUtRHM4-Eaw z`~E}bBWTDrY1wH=GJ_3OSnwa@{t}Ifu(b12%loB zHsw5ZDO)FV9LiB@8DZc?Q6*n2XJKi}cA=~ExS2?Y$#dN8w!Ch`=(2Rjc7*B6l&~ss zDynHxTT|N$gd0%+I7n;?3Jc1Y>T%a(VJLLZ_4LFPacxbxH=CLo!cnei)B7kB@9IfY zi~F`gxola?BbS*v<+=5Jo%*(!jxZwE5O>AqP7r*tz6Mvt4?UGt*A?XY*?1V zgkw|V2X;&eZw-Udc%?8ft=JX5U0YFO78Nxt)0##_kFTq!=Q)DXsZg5S$doq(BAa=p zEto+&lwrhv;Ok~>Ma`L4)ZyGzZ~6s~Wqw;L>e<2w1?`peU6-T3Ov)o{P>)8QaLV{= zi^wu+D{9TAqBdpRRXv)hqU&ob>Kc^CCUgWPU#12(X?LgN-r&qPx#c=uVntrv(PYn} zqC!lg=@&d!e=ymW?YJ%-N0uJNbO;3rbA_u@o@>vdM8hs+XRfQLGnZ zwB6VaJexU5WYRvG1a#C>l?|$qr5lOw2vOVg?rbXR(E+R4^b7kkuhcfZ;6dbtiN&0l zJ9HwYv%TvCl)*a=ZHLEJY#4Q?{MnpG4MP~p72UOZack`v-${572#2%C(zpk=ZCdz&-pAG-|%d%Y^rJV*VfiFiX6iV+?e@BXj4rM+Dkp^eC>y>?{Io25QTLo zD9WFu&_8>M>%A$aaVpicd3V;<)HCAHwS78)I&@w#V@uGflrE)_!$X&I;pv7`XF7|k zlVe)KQ#Nh8wBhdBnp#QV(-|&iQAlq}Ogo}X>!D-P+kkZB8b6kTtI$Z)nFAn{%?mZNr%>~Lbr*S%MyR`n;*SYUeqI;7G(@QAt zy<^d_3_dJ$F zwwdVkuG(_^y4`f9=P1*&T{_29ucTCuC-TebjeHAzI0~2L_y5SeE7#DPzCQlp$)UfE zY=J#Jq#AIT__KI`5$BOor9@1?0Sg z6Y~p1JI{Ra-MtUK7jc0@az4XCApijgKmY;|fB*y_0DfudkXIOgJ#BY-TnSI{*t%<5b*=0d!HCwP2;+Gw`FvjZkOZH z>jbA^;!aG{j8J;{wf#fuio^Y-!oEE_#~#@I!p_^Czkl!8NAKRZ=Z?X$ zq0>WU;QGM)Mfv5OODn52xIvR#(2OCm>C&7r5|X-+Qw8jRrUwb^#Bh_1{e#8Q=*aUA zU%T&?hv~l;Zh5G(I+eBc&0CaTy7Gj|+TtLhNmFR*51-~FVy0zE~SxI1q2~B&DusD$OiSbY{UyltIx{et; zu`gmP=-J{I3d6;6xo6$jo(INm-$^ribm{cPRaUp_qy{2fdE&OT<(xQ)&5$OBh-q>y zB8+LWfFP1HF1fy8B%Urpd)>L=#_d~*^zFGXJUaI28#g#KGGE`(zQLhy?cMqsdPWV{ z-p%DRQ$7>&nJm@bZKO{v`PBS?QUw=e7Rf_oTs;zgXwtM*M&Qaohwd^z)&;3k%!4M} z@RC@c!6D+R)P(lzQ{?VljSGBg$A|AdY1@)zvcEu6c9BMz2=-01W(Iyct8LG z5P$##AOHafKmY;|fB*!JQUQ6NT_yU{l-`h6h}Wd^3#f!z=E)_hgi9*(3n;`n()k5q zg?IzCbt-Ax|Ol6snA5M4m#W zYZLMmB2S@Wu4l^rhdhO^|85U?3X!K!UZ8fJIi82Gnx{}IhfvJe5-f;l&WFh16M;kIDNLAQ2E^k}Q|00Izz z00bZafj5Ex@)W*SB0l6Pl+*VkPa!j-#7!tpVg^B+#sySH_f_Kpb@L0{|EtntANT+M zB{{!9CVLO&7kDF_C10zKm|vhisyH#Ghv&H4jrj!vgSxD7n^Lu4egVuc@c7tW*K-z@ zwrsamLd#PeOqgE)^9!iF1Ht?PO4laLFEG(fczkegdWNEzzZGr{PH~DdE#dhE;D_8f) z{sI|FO_-&81Z|tuzT|T7fB*y_009U<00Izz00bZ~4FSwAfcXVH8VTTsuJ7=`(xcEw z#|U^v9MZ&qm|q~Ei3wQ}*=C~0JhB|Wkq)m;l{5p>nO~q?9<$ZBz^U`Tdv@`~(*|UJ z0d0wN3er^BIy5ewusjzR)&anq}zp(SR=kMP; z_R+id?YU#HZ0Ph*`AkQv9a`SGw6a=*ddmcUXtUUK9jX;U(nscyI(crvF~J<)O;zRMtkfg-4gJJfX6-IEW%YrcdNP&4b8H%LO2Z@1-M4pa_nl+Azi8<~aV1Muu2@-FNnnNvbz?|a9N07tfQN$ldTg-J zb7%rB}J?qByJTP|qPU@l4rPCKzTb=fq{PLA2ZcAIviIdn2oq)yE zS(XT6nx`*_;{rE)_u~J(=J?NDD*Fqhae=3)$H4fP{1qM$fB*y_009U< z00Izz00bZafumF)yH{JU68&kSf}JYyn)w8^LnYKQj|#3=371s*3n;`n8fb|fu|m9o z%B`k<6LEomzu<@GyySlJ+cj~4OR|?_7s)SK4i5-G00Izz00bZa0SG_<0uX?}Q7Rzg z0xGxI)3|_2!89(QQZS7Rs1#HmM?h`Vp|V6-PPS*YzrbIA3$k<`;Nb%f6g_ zvhBvjcc^^H<=_DU2tWV=5P$##AOHafK;R$?AWtFk6z-phFP(!xWrEL^?7iAuDg~RV z;0~373#j0Fm4Z!Fuv4Yr{Eo(aMx~&P9Vjg^jUA{gv6_#dE>EF;`ePf9`_J$0KwRJ; zpUJQ|2tWV=5P$##AOHafKwzc<$W!=QiTIGG5P1qcnrEXvPaz#^ohn&^s&Rq3JcaDM zFJAc<=lKHyI*Gvy`{M{iGK%PRSTu`ok{%=?EioEfK_4ZQdfG61JO|9H%a!qAi4BE2k~mwd#b{ z+KRgL$A)D&OgJ{3H3FJC26+lOH`SYd!DE@<){1(zFhb$dtVDt)h@okYXtvzQu$j*j zp6HP+BFm_4dTZuQ?{J$>tD@^`E9x2nrzBe9wdOjmttj#o?tfw3wW_V|Ugo zC^+MS@$}P$$-7@CPvJwW|8B+YU;gqzm~ti}b}<*`=HM-Xg$@+1F#^+lhQ z^9w9k{D_v_+V)i2C}pzQ-PQg?D}CdDMGdj{@JPQSqi9h^V-=zpvO+s0`WeDY)YgCcp3Zzwwv6 z(FKe0E3IW3twhrjC-JG1d&q)Nrvdf`P5cuGng=R~g>N{qL!H*Wwf#fuio^Y-!oEE_ z#~#@I!p_^Czkl!8NAKRZ=Z?X$q0>X9gZ4nvqWtpCrIpok?u%G>G?3q*Uf*UI1kCky zomtd{J_tOTbjr0i_74_Iqa)8heC@tl9;W|ZxaFbB>QvU&JD=8eVz#n2nT|d-Et~1C zO+EWV-(|GX4omdVG-zUh$hO3Wf!?hI`P_ZCj_v*;S6M~hyhZt?D^IAbLIjCz8$ryX z(5ET=5^ga!4oyb$75Pad3^|Lzy3+8-bNB5X+kGdk!qSDxN(LLLu~w|Cti($^JMk=< zrOS+IswPj6TI7Z-Ng~~LeAD(^qi2g>C=3_N<(_q8dmb3OeJ2-Amrh?w+qCPX269_@ z;u$ucy4?IZ2oTs|}9Ga;YJQtjPF`qYw7%@3$}>{^gnBoC1ai0;!wMFv?@ zn^G+k%VHjl>7XOVO>9f22I2k;4iQ(SCUo$eB9EYIT;Se)e>m?ww_b9)>@TpO?ZJB#sn_On%PB& z3%tR0eN-0$5P$##AOHafKmY;|fB*zYKz`;{xpSVz1yl;AaRHTrXX-tDVW9u zR0^hX0hNLTBu6Mr^cQ%%<@2|lb;sj|97oXD)S+e1Zu${@!vg{kfB*y_P$#g)33K((LYe6 z7mIzPBmG00b0b$2bHl~=j~2@#T~jQY+pf5&(6A)Gdd0G};etEZ2`zG?!ch09l7b1{ zr&*pOnj$&y43`Nn)T7WflUUgKErs5ZVx{+9ISIvCqy2?)Z-LT?ogVa-`}?Bak>1lQ zFJIU@+~2!tph!Os6i13Rb1)9kj~F5NMySE+mE%H!sL_B}(7ZP;EODGqk^3~lWl z=r4r5<&n6$&E2{DkX%@9q?GHU7jmUd?<@Avx65-Q)X_1wdi-x?eOAjtmEW%I?;9?a zOP7yy#aE3KhsvZ^?pin8KiEIgzqMHI+AuOqW*7Dj5ZCIi)`huTu6HEYQ`&eIZRNJ! z?Ohl47q_h~6^a906PwpnXV6te=!p9JWb5<}Z-1}IC1Gc-e<&AqU%bA!rBuGSzcjMB zvdD`MwDgN7mVR;l()-HY1N}qA9OuT2YFAmBY>G|21I3OW**;-uXry@6NG=N3m!#;?$ zk4lvzq~kEu+j0(|E_aCG(!fA*cz@f;R|s7m#T}I+Cf8qBlj})J!-JvxyL89T4V6aA zMTKp+*dH$TmTPwT$+he+KKaUoJatj7Zo)wC;HE+bd6Mx707w7M`*BvdifDw7FRL zQ!Xy!9aH>0o#E2u9PIj>M`x!>os#~6k>c<~o&0UR{Ufqc`epj-RccLcV{iG&+yJ$x ze6l9DVT4Y=xglCMJ?|^gMWZbLUj@#U>bMWm&4NF7P-$C4%+sur=4lI zw5_AEapSv8LF!ViHWcX$T}YdremZFDl$dnX(zdOt-S}1YTTegMZT_l*vHjiMe3zA} zyg%|M-XFP!A2`CcS!BvlCXp4ez)C_Izu*baw{;<0V~Y1j<8K_CF3+Z{6V^d|dsMq* z-PBEbJ2apEP4pL7bIED?mtOeITV#KM#_V+(^%Z!U(iP$X0SG_<0uX=z1Rwwb2tWV= z5P-lT6OerxRBp4R{RLERYoz@JR00#UNg26W)o}#x+_>Sd|M$b?UvIeJT#8KPE~khn z-9Rw3C0av+c4jU|MP(e}O!`-S`~f{l`y7n_B3)kf#VNke*SgNSTP~;}`%78mE!p2@ zf4OjM@%vjgEPQyu)h%zD|LB6ZHQYM?&$OR3T&(S(ubM}EeABXb8yT&Cs8GDB{Qd!| z=w-bWv`l}#EE(<{EN&|eUzsl#htC==jczGl#t-nz6F#^#yI@&oXXe_~Bl1qnM3MCr zFDuvov?N>~`y1ojMn5<=&b8OS*q-Z1L$SH`o~S*yF@D#^+H9nChL~2qdm87ea~8d{kwDL#P41+z6|+FNH=KqTT<=I=g|hf#>?xAgT2F7 zRtr!qs(-t&IMh2t;o-@J*Sr`~411&~XG1x_UshfWwjbc7$_<$*{;u+3-QTq??0nmj zre)`MzHa-aMm0^B{(RiEn_AOWyWyJpR$E&f8l7yl^ryBdS}lEXCapI9hX-i2b-kO5 zuhA@(_-Ji`8hN@MH#$)F*EKIDrGY|m`23*(vZuW$J}X{7v3FJ5wWr)ObOlYFGct9N zkiy30sn(y~5t!n|s5IEyKXib0-*81~+xbIMWa_o{l-G@J8tCtvxexfK9S-p8b-lxM*P*BI>X&K{*QDlfO&fml=&k%XxtQeq z^>NQx=gGr3*U>)l`_A0@IEmNC=Y{cxnv=%(UeqB^7oEBD&&x&exiOtw*2i?J=m|H< zBcx5~2&vR#^5mBOoc-Vj7A;tI+G&|Fv8>P~Iw|8%VW3F5IvA>R+8s^X>na2WURI?$>A?`Eq;}orLNxfz`HM*E@1W^`)Bg z+quP|&GLmQ59}=irQSmAHpVgpU6B|9`6VA--lvVTB(E;#r6AiW@0YeV%M?xp*q zr33ug*=hfj;r(8vqw*aKU$bHB1*u`{f3fI;?_IE9+4AL?YnP=B8x2#Bjp6e6x90kW z9RKY!8gSw-4$yFw*J_)trUmwI)tZ<5a=AE2Z;ht-OMjH^QxErFT`ZqBIyiL`9>#YT zths5KzkI4gZ=C2dKK`WTLoM?w?*P|UT7>o$>Pxeg+HG^OEccwrpPKe-pSl;P(@gvQ z;Q?ApzHhBPN!B#Tt4^RbuWgiXVryG!zXN4`ae&_79q6jpKIKLJFgD%WnqKRYSKk=a zf_01wJ~Ys{VA;thXRbdbZOF>oExO@fo_sd1z5yp+m`3B({?P#%?ls@YRsOcNeQMgS zXX6wNUiqs7zq_ft_8Od;_mRski<7nen=3-)|DU~g0k^9v&xPmO*R?Ne zEp8!22!SAk4bCtwbIdVk5M*8<3K~LIwJ2!F-U*Q;JIw{f)TiXgMeC!%S|5Z1*p{?{ zD8U{Ia}^#1VJ=X>7G_w{WYvS%Uo(>u$MMs$UzB3~zkHBWx{OTnOD34$& zYM$~4TKNxf=bAeEQ~JkD8?^4RhYzG8UmUsuJ z+t_4J2oM5$Rj#S2ip0L2UJgQt<=1uO?A==uz!W1E9>pR9=#FEDjGPVoX1FL2ES z@eUI2;68boJ8tz~dfvecu#>%@?HAbm;g2kcPWzYNFn)o`;5rZg(FY+w2oM5<03kpK zyhI3mqSkkGbG|=&OCy=mM{v1PXdSzDGw5G9v9Xmp-J<*6k50llFxzc#POyAjie*~) z6BA+NJbau-017uKLT<4##1&-Y&5b7hWL6dsG#v1Mq2^@YzZw)X(KFN zy=mpDwY!g(yX(1N?~0yjUTyNL-@|t+3@jSoFEM=Ui5uS4`g=F!e*4L7zJ0Dmo4>t7 zKVeU-YMZ!z&v#6rcEj3PoJIM53$o|I4h;1jFKU-jL}9y(UCi`R6cIE1en|HBz}QMX zCT4nKrhgfj=^=H|-QQaMZqeGc6YD|n(bgO|6D<6`@1Ihv9XGQf=EddLoB}2kOpYto zPp&y--FkT0pn7r2>dEDnI^Yyox90#?oe2m@Om14gd}6PzZ=4bBAGL~PR2kZt3nG95 zLi@+Nf3q#e@JcEl>{X-%ZN-E3_g`GigZ5L~(7h5l3VWBKRhCwZEnc;5!pQen0gFTL zOwdulHs>U>)oJ?${`Wt=ZupPh@s=N1zd++&uW@f`V|CUOxD* z&9Q2&Sslt|dtNhVnM@Vqz7$D<_!Xx7C@K?QYf*+uW@(h?Pv8I59ouf^em1%8I>Aba zjs@BXjpaq^2Wb%cP}2zgOoeF_i9+ZM+Bt&zh=Sq#6do;9@j@vVD5gU#g2ae;$s*-Z zUT{B15`@kq8c{Q;!u#_wD)ICnO$(H?>?~;*ry|N>l$IfWQDDy+^C;NJ9uU#a}86VW&nG85>P_?!7b znFfBEONZ4g06=52OzAp0seY8w5>QQ8g5-A43LoGyS(?>HYXp8~tK9N>_-r4kmr+J)}%GU*l zaHPO&AL$hHb&-Xd7pjo5Ys#O=JSwG-&IR2vf3(&)
  • AsnFcdW0qrWh$BA@;{Xbm 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⪙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.weChat=!0);e.canvasSupported=!!document.createElement("canvas").getContext,e.svgSupported="undefined"!=typeof SVGRect,e.touchEventsSupported="ontouchstart"in window&&!n.ie&&!n.edge,e.pointerEventsSupported="onpointerdown"in window&&(n.edge||n.ie&&+n.version>=11),e.domSupported="undefined"!=typeof document;var s=document.documentElement.style;e.transform3dSupported=(n.ie&&"transition"in s||n.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||n.ie&&+n.version>=9}(navigator.userAgent,a);var s={"[object Function]":!0,"[object RegExp]":!0,"[object Date]":!0,"[object Error]":!0,"[object CanvasGradient]":!0,"[object CanvasPattern]":!0,"[object Image]":!0,"[object Canvas]":!0},l={"[object Int8Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Int16Array]":!0,"[object Uint16Array]":!0,"[object Int32Array]":!0,"[object Uint32Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0},u=Object.prototype.toString,h=Array.prototype,c=h.forEach,p=h.filter,d=h.slice,f=h.map,g=function(){}.constructor,y=g?g.prototype:null,v={};function m(t,e){v[t]=e}var _=2311;function x(){return _++}function b(){for(var t=[],e=0;e>1)%2;a.style.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",i[s]+":0",r[l]+":0",i[1-s]+":auto",r[1-l]+":auto",""].join("!important;"),t.appendChild(a),n.push(a)}return n}(e,o),o,r);if(s)return s(t,n,i),!0}return!1}function Yt(t){return"CANVAS"===t.nodeName.toUpperCase()}var Zt="undefined"!=typeof window&&!!window.addEventListener,jt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,qt=[];function Kt(t,e,n,i){return n=n||{},i||!a.canvasSupported?$t(t,e,n):a.browser.firefox&&null!=e.layerX&&e.layerX!==e.offsetX?(n.zrX=e.layerX,n.zrY=e.layerY):null!=e.offsetX?(n.zrX=e.offsetX,n.zrY=e.offsetY):$t(t,e,n),n}function $t(t,e,n){if(a.domSupported&&t.getBoundingClientRect){var i=e.clientX,r=e.clientY;if(Yt(t)){var o=t.getBoundingClientRect();return n.zrX=i-o.left,void(n.zrY=r-o.top)}if(Xt(qt,t,i,r))return n.zrX=qt[0],void(n.zrY=qt[1])}n.zrX=n.zrY=0}function Jt(t){return t||window.event}function Qt(t,e,n){if(null!=(e=Jt(e)).zrX)return e;var i=e.type;if(i&&i.indexOf("touch")>=0){var r="touchend"!==i?e.targetTouches[0]:e.changedTouches[0];r&&Kt(t,r,e,n)}else{Kt(t,e,e,n);var o=function(t){var e=t.wheelDelta;if(e)return e;var n=t.deltaX,i=t.deltaY;if(null==n||null==i)return e;return 3*(0!==i?Math.abs(i):Math.abs(n))*(i>0?-1:i<0?1:n>0?-1:1)}(e);e.zrDelta=o?o/120:-(e.detail||0)/3}var a=e.button;return null==e.which&&void 0!==a&&jt.test(e.type)&&(e.which=1&a?1:2&a?3:4&a?2:0),e}function te(t,e,n,i){Zt?t.addEventListener(e,n,i):t.attachEvent("on"+e,n)}var ee=Zt?function(t){t.preventDefault(),t.stopPropagation(),t.cancelBubble=!0}:function(t){t.returnValue=!1,t.cancelBubble=!0};function ne(t){return 2===t.which||3===t.which}var ie=function(){function t(){this._track=[]}return t.prototype.recognize=function(t,e,n){return this._doTrack(t,e,n),this._recognize(t)},t.prototype.clear=function(){return this._track.length=0,this},t.prototype._doTrack=function(t,e,n){var i=t.touches;if(i){for(var r={points:[],touches:[],target:e,event:t},o=0,a=i.length;o1&&r&&r.length>1){var a=re(r)/re(o);!isFinite(a)&&(a=1),e.pinchScale=a;var s=[((i=r)[0][0]+i[1][0])/2,(i[0][1]+i[1][1])/2];return e.pinchX=s[0],e.pinchY=s[1],{type:"pinch",target:t[0].target,event:e}}}}},ae="silent";function se(){ee(this.event)}var le=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.handler=null,e}return n(e,t),e.prototype.dispose=function(){},e.prototype.setCursor=function(){},e}(Ft),ue=function(t,e){this.x=t,this.y=e},he=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],ce=function(t){function e(e,n,i,r){var o=t.call(this)||this;return o._hovered=new ue(0,0),o.storage=e,o.painter=n,o.painterRoot=r,i=i||new le,o.proxy=null,o.setHandlerProxy(i),o._draggingMgr=new Bt(o),o}return n(e,t),e.prototype.setHandlerProxy=function(t){this.proxy&&this.proxy.dispose(),t&&(P(he,(function(e){t.on&&t.on(e,this[e],this)}),this),t.handler=this),this.proxy=t},e.prototype.mousemove=function(t){var e=t.zrX,n=t.zrY,i=de(this,e,n),r=this._hovered,o=r.target;o&&!o.__zr&&(o=(r=this.findHover(r.x,r.y)).target);var a=this._hovered=i?new ue(e,n):this.findHover(e,n),s=a.target,l=this.proxy;l.setCursor&&l.setCursor(s?s.cursor:"default"),o&&s!==o&&this.dispatchToElement(r,"mouseout",t),this.dispatchToElement(a,"mousemove",t),s&&s!==o&&this.dispatchToElement(a,"mouseover",t)},e.prototype.mouseout=function(t){var e=t.zrEventControl;"only_globalout"!==e&&this.dispatchToElement(this._hovered,"mouseout",t),"no_globalout"!==e&&this.trigger("globalout",{type:"globalout",event:t})},e.prototype.resize=function(){this._hovered=new ue(0,0)},e.prototype.dispatch=function(t,e){var n=this[t];n&&n.call(this,e)},e.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},e.prototype.setCursorStyle=function(t){var e=this.proxy;e.setCursor&&e.setCursor(t)},e.prototype.dispatchToElement=function(t,e,n){var i=(t=t||{}).target;if(!i||!i.silent){for(var r="on"+e,o=function(t,e,n){return{type:t,event:n,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:n.zrX,offsetY:n.zrY,gestureEvent:n.gestureEvent,pinchX:n.pinchX,pinchY:n.pinchY,pinchScale:n.pinchScale,wheelDelta:n.zrDelta,zrByTouch:n.zrByTouch,which:n.which,stop:se}}(e,t,n);i&&(i[r]&&(o.cancelBubble=!!i[r].call(i,o)),i.trigger(e,o),i=i.__hostTarget?i.__hostTarget:i.parent,!o.cancelBubble););o.cancelBubble||(this.trigger(e,o),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer((function(t){"function"==typeof t[r]&&t[r].call(t,o),t.trigger&&t.trigger(e,o)})))}},e.prototype.findHover=function(t,e,n){for(var i=this.storage.getDisplayList(),r=new ue(t,e),o=i.length-1;o>=0;o--){var a=void 0;if(i[o]!==n&&!i[o].ignore&&(a=pe(i[o],t,e))&&(!r.topTarget&&(r.topTarget=i[o]),a!==ae)){r.target=i[o];break}}return r},e.prototype.processGesture=function(t,e){this._gestureMgr||(this._gestureMgr=new ie);var n=this._gestureMgr;"start"===e&&n.clear();var i=n.recognize(t,this.findHover(t.zrX,t.zrY,null).target,this.proxy.dom);if("end"===e&&n.clear(),i){var r=i.type;t.gestureEvent=r;var o=new ue;o.target=i.target,this.dispatchToElement(o,r,i.event)}},e}(Ft);function pe(t,e,n){if(t[t.rectHover?"rectContain":"contain"](e,n)){for(var i=t,r=void 0,o=!1;i;){if(i.ignoreClip&&(o=!0),!o){var a=i.getClipPath();if(a&&!a.contain(e,n))return!1;i.silent&&(r=!0)}var s=i.__hostTarget;i=s||i.parent}return!r||ae}return!1}function de(t,e,n){var i=t.painter;return e<0||e>i.getWidth()||n<0||n>i.getHeight()}P(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],(function(t){ce.prototype[t]=function(e){var n,i,r=e.zrX,o=e.zrY,a=de(this,r,o);if("mouseup"===t&&a||(i=(n=this.findHover(r,o)).target),"mousedown"===t)this._downEl=i,this._downPoint=[e.zrX,e.zrY],this._upEl=i;else if("mouseup"===t)this._upEl=i;else if("click"===t){if(this._downEl!==this._upEl||!this._downPoint||Lt(this._downPoint,[e.zrX,e.zrY])>4)return;this._downPoint=null}this.dispatchToElement(n,t,e)}}));function fe(t,e,n,i){var r=e+1;if(r===n)return 1;if(i(t[r++],t[e])<0){for(;r=0;)r++;return r-e}function ge(t,e,n,i,r){for(i===e&&i++;i>>1])<0?l=o:s=o+1;var u=i-s;switch(u){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;u>0;)t[s+u]=t[s+u-1],u--}t[s]=a}}function ye(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])>0){for(s=i-r;l0;)a=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}else{for(s=r+1;ls&&(l=s);var u=a;a=r-l,l=r-u}for(a++;a>>1);o(t,e[n+h])>0?a=h+1:l=h}return l}function ve(t,e,n,i,r,o){var a=0,s=0,l=1;if(o(t,e[n+r])<0){for(s=r+1;ls&&(l=s);var u=a;a=r-l,l=r-u}else{for(s=i-r;l=0;)a=l,(l=1+(l<<1))<=0&&(l=s);l>s&&(l=s),a+=r,l+=r}for(a++;a>>1);o(t,e[n+h])<0?l=h:a=h+1}return l}function me(t,e){var n,i,r=7,o=0;t.length;var a=[];function s(s){var l=n[s],u=i[s],h=n[s+1],c=i[s+1];i[s]=u+c,s===o-3&&(n[s+1]=n[s+2],i[s+1]=i[s+2]),o--;var p=ve(t[h],t,l,u,0,e);l+=p,0!==(u-=p)&&0!==(c=ye(t[l+u-1],t,h,c,c-1,e))&&(u<=c?function(n,i,o,s){var l=0;for(l=0;l=7||d>=7);if(f)break;g<0&&(g=0),g+=2}if((r=g)<1&&(r=1),1===i){for(l=0;l=0;l--)t[d+l]=t[p+l];return void(t[c]=a[h])}var f=r;for(;;){var g=0,y=0,v=!1;do{if(e(a[h],t[u])<0){if(t[c--]=t[u--],g++,y=0,0==--i){v=!0;break}}else if(t[c--]=a[h--],y++,g=0,1==--s){v=!0;break}}while((g|y)=0;l--)t[d+l]=t[p+l];if(0===i){v=!0;break}}if(t[c--]=a[h--],1==--s){v=!0;break}if(0!==(y=s-ye(t[u],a,0,s,s-1,e))){for(s-=y,d=(c-=y)+1,p=(h-=y)+1,l=0;l=7||y>=7);if(v)break;f<0&&(f=0),f+=2}(r=f)<1&&(r=1);if(1===s){for(d=(c-=i)+1,p=(u-=i)+1,l=i-1;l>=0;l--)t[d+l]=t[p+l];t[c]=a[h]}else{if(0===s)throw new Error;for(p=c-(s-1),l=0;l1;){var t=o-2;if(t>=1&&i[t-1]<=i[t]+i[t+1]||t>=2&&i[t-2]<=i[t]+i[t-1])i[t-1]i[t+1])break;s(t)}},forceMergeRuns:function(){for(;o>1;){var t=o-2;t>0&&i[t-1]=32;)e|=1&t,t>>=1;return t+e}(r);do{if((o=fe(t,n,i,e))s&&(l=s),ge(t,n,n+l,n+o,e),o=l}a.pushRun(n,o),a.mergeRuns(),r-=o,n+=o}while(0!==r);a.forceMergeRuns()}}}var xe=!1;function be(){xe||(xe=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function we(t,e){return t.zlevel===e.zlevel?t.z===e.z?t.z2-e.z2:t.z-e.z:t.zlevel-e.zlevel}var Se=function(){function t(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=we}return t.prototype.traverse=function(t,e){for(var n=0;n0&&(u.__clipPaths=[]),isNaN(u.z)&&(be(),u.z=0),isNaN(u.z2)&&(be(),u.z2=0),isNaN(u.zlevel)&&(be(),u.zlevel=0),this._displayList[this._displayListLen++]=u}var h=t.getDecalElement&&t.getDecalElement();h&&this._updateAndAddDisplayable(h,e,n);var c=t.getTextGuideLine();c&&this._updateAndAddDisplayable(c,e,n);var p=t.getTextContent();p&&this._updateAndAddDisplayable(p,e,n)}},t.prototype.addRoot=function(t){t.__zr&&t.__zr.storage===this||this._roots.push(t)},t.prototype.delRoot=function(t){if(t instanceof Array)for(var e=0,n=t.length;e=0&&this._roots.splice(i,1)}},t.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},t.prototype.getRoots=function(){return this._roots},t.prototype.dispose=function(){this._displayList=null,this._roots=null},t}(),Me="undefined"!=typeof window&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(t){return setTimeout(t,16)},Ie={linear:function(t){return t},quadraticIn:function(t){return t*t},quadraticOut:function(t){return t*(2-t)},quadraticInOut:function(t){return(t*=2)<1?.5*t*t:-.5*(--t*(t-2)-1)},cubicIn:function(t){return t*t*t},cubicOut:function(t){return--t*t*t+1},cubicInOut:function(t){return(t*=2)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},quarticIn:function(t){return t*t*t*t},quarticOut:function(t){return 1- --t*t*t*t},quarticInOut:function(t){return(t*=2)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},quinticIn:function(t){return t*t*t*t*t},quinticOut:function(t){return--t*t*t*t*t+1},quinticInOut:function(t){return(t*=2)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},sinusoidalIn:function(t){return 1-Math.cos(t*Math.PI/2)},sinusoidalOut:function(t){return Math.sin(t*Math.PI/2)},sinusoidalInOut:function(t){return.5*(1-Math.cos(Math.PI*t))},exponentialIn:function(t){return 0===t?0:Math.pow(1024,t-1)},exponentialOut:function(t){return 1===t?1:1-Math.pow(2,-10*t)},exponentialInOut:function(t){return 0===t?0:1===t?1:(t*=2)<1?.5*Math.pow(1024,t-1):.5*(2-Math.pow(2,-10*(t-1)))},circularIn:function(t){return 1-Math.sqrt(1-t*t)},circularOut:function(t){return Math.sqrt(1- --t*t)},circularInOut:function(t){return(t*=2)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},elasticIn:function(t){var e,n=.1;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=.4*Math.asin(1/n)/(2*Math.PI),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/.4))},elasticOut:function(t){var e,n=.1;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=.4*Math.asin(1/n)/(2*Math.PI),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/.4)+1)},elasticInOut:function(t){var e,n=.1,i=.4;return 0===t?0:1===t?1:(!n||n<1?(n=1,e=.1):e=i*Math.asin(1/n)/(2*Math.PI),(t*=2)<1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*.5+1)},backIn:function(t){var e=1.70158;return t*t*((e+1)*t-e)},backOut:function(t){var e=1.70158;return--t*t*((e+1)*t+e)+1},backInOut:function(t){var e=2.5949095;return(t*=2)<1?t*t*((e+1)*t-e)*.5:.5*((t-=2)*t*((e+1)*t+e)+2)},bounceIn:function(t){return 1-Ie.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*Ie.bounceIn(2*t):.5*Ie.bounceOut(2*t-1)+.5}},Te=function(){function t(t){this._initialized=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=t.life||1e3,this._delay=t.delay||0,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}return t.prototype.step=function(t,e){if(this._initialized||(this._startTime=t+this._delay,this._initialized=!0),!this._paused){var n=(t-this._startTime-this._pausedTime)/this._life;n<0&&(n=0),n=Math.min(n,1);var i=this.easing,r="string"==typeof i?Ie[i]:i,o="function"==typeof r?r(n):n;if(this.onframe&&this.onframe(o),1===n){if(!this.loop)return!0;this._restart(t),this.onrestart&&this.onrestart()}return!1}this._pausedTime+=e},t.prototype._restart=function(t){var e=(t-this._startTime-this._pausedTime)%this._life;this._startTime=t-e+this.gap,this._pausedTime=0},t.prototype.pause=function(){this._paused=!0},t.prototype.resume=function(){this._paused=!1},t}(),Ce=function(t){this.value=t},De=function(){function t(){this._len=0}return t.prototype.insert=function(t){var e=new Ce(t);return this.insertEntry(e),e},t.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},t.prototype.remove=function(t){var e=t.prev,n=t.next;e?e.next=n:this.head=n,n?n.prev=e:this.tail=e,t.next=t.prev=null,this._len--},t.prototype.len=function(){return this._len},t.prototype.clear=function(){this.head=this.tail=null,this._len=0},t}(),Ae=function(){function t(t){this._list=new De,this._maxSize=10,this._map={},this._maxSize=t}return t.prototype.put=function(t,e){var n=this._list,i=this._map,r=null;if(null==i[t]){var o=n.len(),a=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var s=n.head;n.remove(s),delete i[s.key],r=s.value,this._lastRemovedEntry=s}a?a.value=e:a=new Ce(e),a.key=t,n.insertEntry(a),i[t]=a}return r},t.prototype.get=function(t){var e=this._map[t],n=this._list;if(null!=e)return e!==n.tail&&(n.remove(e),n.insertEntry(e)),e.value},t.prototype.clear=function(){this._list.clear(),this._map={}},t.prototype.len=function(){return this._list.len()},t}(),Le={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function ke(t){return(t=Math.round(t))<0?0:t>255?255:t}function Pe(t){return t<0?0:t>1?1:t}function Oe(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?ke(parseFloat(e)/100*255):ke(parseInt(e,10))}function Re(t){var e=t;return e.length&&"%"===e.charAt(e.length-1)?Pe(parseFloat(e)/100):Pe(parseFloat(e))}function Ne(t,e,n){return n<0?n+=1:n>1&&(n-=1),6*n<1?t+(e-t)*n*6:2*n<1?e:3*n<2?t+(e-t)*(2/3-n)*6:t}function ze(t,e,n){return t+(e-t)*n}function Ee(t,e,n,i,r){return t[0]=e,t[1]=n,t[2]=i,t[3]=r,t}function Ve(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}var Be=new Ae(20),Fe=null;function Ge(t,e){Fe&&Ve(Fe,e),Fe=Be.put(t,Fe||e.slice())}function He(t,e){if(t){e=e||[];var n=Be.get(t);if(n)return Ve(e,n);var i=(t+="").replace(/ /g,"").toLowerCase();if(i in Le)return Ve(e,Le[i]),Ge(t,e),e;var r,o=i.length;if("#"===i.charAt(0))return 4===o||5===o?(r=parseInt(i.slice(1,4),16))>=0&&r<=4095?(Ee(e,(3840&r)>>4|(3840&r)>>8,240&r|(240&r)>>4,15&r|(15&r)<<4,5===o?parseInt(i.slice(4),16)/15:1),Ge(t,e),e):void Ee(e,0,0,0,1):7===o||9===o?(r=parseInt(i.slice(1,7),16))>=0&&r<=16777215?(Ee(e,(16711680&r)>>16,(65280&r)>>8,255&r,9===o?parseInt(i.slice(7),16)/255:1),Ge(t,e),e):void Ee(e,0,0,0,1):void 0;var a=i.indexOf("("),s=i.indexOf(")");if(-1!==a&&s+1===o){var l=i.substr(0,a),u=i.substr(a+1,s-(a+1)).split(","),h=1;switch(l){case"rgba":if(4!==u.length)return 3===u.length?Ee(e,+u[0],+u[1],+u[2],1):Ee(e,0,0,0,1);h=Re(u.pop());case"rgb":return 3!==u.length?void Ee(e,0,0,0,1):(Ee(e,Oe(u[0]),Oe(u[1]),Oe(u[2]),h),Ge(t,e),e);case"hsla":return 4!==u.length?void Ee(e,0,0,0,1):(u[3]=Re(u[3]),We(u,e),Ge(t,e),e);case"hsl":return 3!==u.length?void Ee(e,0,0,0,1):(We(u,e),Ge(t,e),e);default:return}}Ee(e,0,0,0,1)}}function We(t,e){var n=(parseFloat(t[0])%360+360)%360/360,i=Re(t[1]),r=Re(t[2]),o=r<=.5?r*(i+1):r+i-r*i,a=2*r-o;return Ee(e=e||[],ke(255*Ne(a,o,n+1/3)),ke(255*Ne(a,o,n)),ke(255*Ne(a,o,n-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Ue(t,e){var n=He(t);if(n){for(var i=0;i<3;i++)n[i]=e<0?n[i]*(1-e)|0:(255-n[i])*e+n[i]|0,n[i]>255?n[i]=255:n[i]<0&&(n[i]=0);return Je(n,4===n.length?"rgba":"rgb")}}function Xe(t){var e=He(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function Ye(t,e,n){if(e&&e.length&&t>=0&&t<=1){n=n||[];var i=t*(e.length-1),r=Math.floor(i),o=Math.ceil(i),a=e[r],s=e[o],l=i-r;return n[0]=ke(ze(a[0],s[0],l)),n[1]=ke(ze(a[1],s[1],l)),n[2]=ke(ze(a[2],s[2],l)),n[3]=Pe(ze(a[3],s[3],l)),n}}var Ze=Ye;function je(t,e,n){if(e&&e.length&&t>=0&&t<=1){var i=t*(e.length-1),r=Math.floor(i),o=Math.ceil(i),a=He(e[r]),s=He(e[o]),l=i-r,u=Je([ke(ze(a[0],s[0],l)),ke(ze(a[1],s[1],l)),ke(ze(a[2],s[2],l)),Pe(ze(a[3],s[3],l))],"rgba");return n?{color:u,leftIndex:r,rightIndex:o,value:i}:u}}var qe=je;function Ke(t,e,n,i){var r=He(t);if(t)return r=function(t){if(t){var e,n,i=t[0]/255,r=t[1]/255,o=t[2]/255,a=Math.min(i,r,o),s=Math.max(i,r,o),l=s-a,u=(s+a)/2;if(0===l)e=0,n=0;else{n=u<.5?l/(s+a):l/(2-s-a);var h=((s-i)/6+l/2)/l,c=((s-r)/6+l/2)/l,p=((s-o)/6+l/2)/l;i===s?e=p-c:r===s?e=1/3+h-p:o===s&&(e=2/3+c-h),e<0&&(e+=1),e>1&&(e-=1)}var d=[360*e,n,u];return null!=t[3]&&d.push(t[3]),d}}(r),null!=e&&(r[0]=function(t){return(t=Math.round(t))<0?0:t>360?360:t}(e)),null!=n&&(r[1]=Re(n)),null!=i&&(r[2]=Re(i)),Je(We(r),"rgba")}function $e(t,e){var n=He(t);if(n&&null!=e)return n[3]=Pe(e),Je(n,"rgba")}function Je(t,e){if(t&&t.length){var n=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(n+=","+t[3]),e+"("+n+")"}}function Qe(t,e){var n=He(t);return n?(.299*n[0]+.587*n[1]+.114*n[2])*n[3]/255+(1-n[3])*e:0}var tn=Object.freeze({__proto__:null,parse:He,lift:Ue,toHex:Xe,fastLerp:Ye,fastMapToColor:Ze,lerp:je,mapToColor:qe,modifyHSL:Ke,modifyAlpha:$e,stringify:Je,lum:Qe,random:function(){return"rgb("+Math.round(255*Math.random())+","+Math.round(255*Math.random())+","+Math.round(255*Math.random())+")"}}),en=Array.prototype.slice;function nn(t,e,n){return(e-t)*n+t}function rn(t,e,n,i){for(var r=e.length,o=0;oa)i.length=a;else for(var s=o;s=2&&this.interpolable},t.prototype.getAdditiveTrack=function(){return this._additiveTrack},t.prototype.addKeyframe=function(t,e){t>=this.maxTime?this.maxTime=t:this._needsSort=!0;var n=this.keyframes,i=n.length;if(this.interpolable)if(k(e)){var r=function(t){return k(t&&t[0])?2:1}(e);if(i>0&&this.arrDim!==r)return void(this.interpolable=!1);if(1===r&&"number"!=typeof e[0]||2===r&&"number"!=typeof e[0][0])return void(this.interpolable=!1);if(i>0){var o=n[i-1];this._isAllValueEqual&&(1===r&&ln(e,o.value)||(this._isAllValueEqual=!1))}this.arrDim=r}else{if(this.arrDim>0)return void(this.interpolable=!1);if("string"==typeof e){var a=He(e);a?(e=a,this.isValueColor=!0):this.interpolable=!1}else if("number"!=typeof e||isNaN(e))return void(this.interpolable=!1);if(this._isAllValueEqual&&i>0){o=n[i-1];(this.isValueColor&&!ln(o.value,e)||o.value!==e)&&(this._isAllValueEqual=!1)}}var s={time:t,value:e,percent:0};return this.keyframes.push(s),s},t.prototype.prepare=function(t){var e=this.keyframes;this._needsSort&&e.sort((function(t,e){return t.time-e.time}));for(var n=this.arrDim,i=e.length,r=e[i-1],o=0;o0&&o!==i-1&&sn(e[o].value,r.value,n);if(t&&this.needsAnimate()&&t.needsAnimate()&&n===t.arrDim&&this.isValueColor===t.isValueColor&&!t._finished){this._additiveTrack=t;var a=e[0].value;for(o=0;o=0&&!(o[n].percent<=e);n--);n=Math.min(n,a-2)}else{for(n=this._lastFrame;ne);n++);n=Math.min(n-1,a-2)}var h=o[n+1],c=o[n];if(c&&h){this._lastFrame=n,this._lastFramePercent=e;var p=h.percent-c.percent;if(0!==p){var d=(e-c.percent)/p,f=i?this._additiveValue:u?gn:t[s];if((l>0||u)&&!f&&(f=this._additiveValue=[]),this.useSpline){var g=o[n][r],y=o[0===n?n:n-1][r],v=o[n>a-2?a-1:n+1][r],m=o[n>a-3?a-1:n+2][r];if(l>0)1===l?hn(f,y,g,v,m,d,d*d,d*d*d):function(t,e,n,i,r,o,a,s){for(var l=e.length,u=e[0].length,h=0;h0)1===l?rn(f,c[r],h[r],d):function(t,e,n,i){for(var r=e.length,o=r&&e[0].length,a=0;a.5?e:t}(c[r],h[r],d),i?this._additiveValue=_:t[s]=_}i&&this._addToTarget(t)}}}},t.prototype._addToTarget=function(t){var e=this.arrDim,n=this.propName,i=this._additiveValue;0===e?this.isValueColor?(He(t[n],gn),on(gn,gn,i,1),t[n]=pn(gn)):t[n]=t[n]+i:1===e?on(t[n],t[n],i,1):2===e&&an(t[n],t[n],i,1)},t}(),vn=function(){function t(t,e,n){this._tracks={},this._trackKeys=[],this._delay=0,this._maxTime=0,this._paused=!1,this._started=0,this._clip=null,this._target=t,this._loop=e,e&&n?b("Can' use additive animation on looped animation."):this._additiveAnimators=n}return t.prototype.getTarget=function(){return this._target},t.prototype.changeTarget=function(t){this._target=t},t.prototype.when=function(t,e){return this.whenWithKeys(t,e,E(e))},t.prototype.whenWithKeys=function(t,e,n){for(var i=this._tracks,r=0;r0)){this._started=1;for(var n=this,i=[],r=0;r1){var a=o.pop();r.addKeyframe(a.time,t[i]),r.prepare(r.getAdditiveTrack())}}}},t}(),mn=function(t){function e(e){var n=t.call(this)||this;return n._running=!1,n._time=0,n._pausedTime=0,n._pauseStart=0,n._paused=!1,e=e||{},n.stage=e.stage||{},n.onframe=e.onframe||function(){},n}return n(e,t),e.prototype.addClip=function(t){t.animation&&this.removeClip(t),this._clipsHead?(this._clipsTail.next=t,t.prev=this._clipsTail,t.next=null,this._clipsTail=t):this._clipsHead=this._clipsTail=t,t.animation=this},e.prototype.addAnimator=function(t){t.animation=this;var e=t.getClip();e&&this.addClip(e)},e.prototype.removeClip=function(t){if(t.animation){var e=t.prev,n=t.next;e?e.next=n:this._clipsHead=n,n?n.prev=e:this._clipsTail=e,t.next=t.prev=t.animation=null}},e.prototype.removeAnimator=function(t){var e=t.getClip();e&&this.removeClip(e),t.animation=null},e.prototype.update=function(t){for(var e=(new Date).getTime()-this._pausedTime,n=e-this._time,i=this._clipsHead;i;){var r=i.next;i.step(e,n)?(i.ondestroy&&i.ondestroy(),this.removeClip(i),i=r):i=r}this._time=e,t||(this.onframe(n),this.trigger("frame",n),this.stage.update&&this.stage.update())},e.prototype._startLoop=function(){var t=this;this._running=!0,Me((function e(){t._running&&(Me(e),!t._paused&&t.update())}))},e.prototype.start=function(){this._running||(this._time=(new Date).getTime(),this._pausedTime=0,this._startLoop())},e.prototype.stop=function(){this._running=!1},e.prototype.pause=function(){this._paused||(this._pauseStart=(new Date).getTime(),this._paused=!0)},e.prototype.resume=function(){this._paused&&(this._pausedTime+=(new Date).getTime()-this._pauseStart,this._paused=!1)},e.prototype.clear=function(){for(var t=this._clipsHead;t;){var e=t.next;t.prev=t.next=t.animation=null,t=e}this._clipsHead=this._clipsTail=null},e.prototype.isFinished=function(){return null==this._clipsHead},e.prototype.animate=function(t,e){e=e||{},this.start();var n=new vn(t,e.loop);return this.addAnimator(n),n},e}(Ft),_n=a.domSupported,xn=(fn={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},{mouse:dn=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],touch:["touchstart","touchend","touchmove"],pointer:O(dn,(function(t){var e=t.replace("mouse","pointer");return fn.hasOwnProperty(e)?e:t}))}),bn=["mousemove","mouseup"],wn=["pointermove","pointerup"],Sn=!1;function Mn(t){var e=t.pointerType;return"pen"===e||"touch"===e}function In(t){t&&(t.zrByTouch=!0)}function Tn(t,e){for(var n=e,i=!1;n&&9!==n.nodeType&&!(i=n.domBelongToZr||n!==e&&n===t.painterRoot);)n=n.parentNode;return i}var Cn=function(t,e){this.stopPropagation=ft,this.stopImmediatePropagation=ft,this.preventDefault=ft,this.type=e.type,this.target=this.currentTarget=t.dom,this.pointerType=e.pointerType,this.clientX=e.clientX,this.clientY=e.clientY},Dn={mousedown:function(t){t=Qt(this.dom,t),this.__mayPointerCapture=[t.zrX,t.zrY],this.trigger("mousedown",t)},mousemove:function(t){t=Qt(this.dom,t);var e=this.__mayPointerCapture;!e||t.zrX===e[0]&&t.zrY===e[1]||this.__togglePointerCapture(!0),this.trigger("mousemove",t)},mouseup:function(t){t=Qt(this.dom,t),this.__togglePointerCapture(!1),this.trigger("mouseup",t)},mouseout:function(t){Tn(this,(t=Qt(this.dom,t)).toElement||t.relatedTarget)||(this.__pointerCapturing&&(t.zrEventControl="no_globalout"),this.trigger("mouseout",t))},wheel:function(t){Sn=!0,t=Qt(this.dom,t),this.trigger("mousewheel",t)},mousewheel:function(t){Sn||(t=Qt(this.dom,t),this.trigger("mousewheel",t))},touchstart:function(t){In(t=Qt(this.dom,t)),this.__lastTouchMoment=new Date,this.handler.processGesture(t,"start"),Dn.mousemove.call(this,t),Dn.mousedown.call(this,t)},touchmove:function(t){In(t=Qt(this.dom,t)),this.handler.processGesture(t,"change"),Dn.mousemove.call(this,t)},touchend:function(t){In(t=Qt(this.dom,t)),this.handler.processGesture(t,"end"),Dn.mouseup.call(this,t),+new Date-+this.__lastTouchMoment<300&&Dn.click.call(this,t)},pointerdown:function(t){Dn.mousedown.call(this,t)},pointermove:function(t){Mn(t)||Dn.mousemove.call(this,t)},pointerup:function(t){Dn.mouseup.call(this,t)},pointerout:function(t){Mn(t)||Dn.mouseout.call(this,t)}};P(["click","dblclick","contextmenu"],(function(t){Dn[t]=function(e){e=Qt(this.dom,e),this.trigger(t,e)}}));var An={pointermove:function(t){Mn(t)||An.mousemove.call(this,t)},pointerup:function(t){An.mouseup.call(this,t)},mousemove:function(t){this.trigger("mousemove",t)},mouseup:function(t){var e=this.__pointerCapturing;this.__togglePointerCapture(!1),this.trigger("mouseup",t),e&&(t.zrEventControl="only_globalout",this.trigger("mouseout",t))}};function Ln(t,e){var n=e.domHandlers;a.pointerEventsSupported?P(xn.pointer,(function(i){Pn(e,i,(function(e){n[i].call(t,e)}))})):(a.touchEventsSupported&&P(xn.touch,(function(i){Pn(e,i,(function(r){n[i].call(t,r),function(t){t.touching=!0,null!=t.touchTimer&&(clearTimeout(t.touchTimer),t.touchTimer=null),t.touchTimer=setTimeout((function(){t.touching=!1,t.touchTimer=null}),700)}(e)}))})),P(xn.mouse,(function(i){Pn(e,i,(function(r){r=Jt(r),e.touching||n[i].call(t,r)}))})))}function kn(t,e){function n(n){Pn(e,n,(function(i){i=Jt(i),Tn(t,i.target)||(i=function(t,e){return Qt(t.dom,new Cn(t,e),!0)}(t,i),e.domHandlers[n].call(t,i))}),{capture:!0})}a.pointerEventsSupported?P(wn,n):a.touchEventsSupported||P(bn,n)}function Pn(t,e,n,i){t.mounted[e]=n,t.listenerOpts[e]=i,te(t.domTarget,e,n,i)}function On(t){var e,n,i,r,o=t.mounted;for(var a in o)o.hasOwnProperty(a)&&(e=t.domTarget,n=a,i=o[a],r=t.listenerOpts[a],Zt?e.removeEventListener(n,i,r):e.detachEvent("on"+n,i));t.mounted={}}var Rn=function(t,e){this.mounted={},this.listenerOpts={},this.touching=!1,this.domTarget=t,this.domHandlers=e},Nn=function(t){function e(e,n){var i=t.call(this)||this;return i.__pointerCapturing=!1,i.dom=e,i.painterRoot=n,i._localHandlerScope=new Rn(e,Dn),_n&&(i._globalHandlerScope=new Rn(document,An)),Ln(i,i._localHandlerScope),i}return n(e,t),e.prototype.dispose=function(){On(this._localHandlerScope),_n&&On(this._globalHandlerScope)},e.prototype.setCursor=function(t){this.dom.style&&(this.dom.style.cursor=t||"default")},e.prototype.__togglePointerCapture=function(t){if(this.__mayPointerCapture=null,_n&&+this.__pointerCapturing^+t){this.__pointerCapturing=t;var e=this._globalHandlerScope;t?kn(this,e):On(e)}},e}(Ft),zn=1;"undefined"!=typeof window&&(zn=Math.max(window.devicePixelRatio||window.screen&&window.screen.deviceXDPI/window.screen.logicalXDPI||1,1));var En=zn,Vn="#333",Bn="#ccc";function Fn(){return[1,0,0,1,0,0]}function Gn(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t}function Hn(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function Wn(t,e,n){var i=e[0]*n[0]+e[2]*n[1],r=e[1]*n[0]+e[3]*n[1],o=e[0]*n[2]+e[2]*n[3],a=e[1]*n[2]+e[3]*n[3],s=e[0]*n[4]+e[2]*n[5]+e[4],l=e[1]*n[4]+e[3]*n[5]+e[5];return t[0]=i,t[1]=r,t[2]=o,t[3]=a,t[4]=s,t[5]=l,t}function Un(t,e,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4]+n[0],t[5]=e[5]+n[1],t}function Xn(t,e,n){var i=e[0],r=e[2],o=e[4],a=e[1],s=e[3],l=e[5],u=Math.sin(n),h=Math.cos(n);return t[0]=i*h+a*u,t[1]=-i*u+a*h,t[2]=r*h+s*u,t[3]=-r*u+h*s,t[4]=h*o+u*l,t[5]=h*l-u*o,t}function Yn(t,e,n){var i=n[0],r=n[1];return t[0]=e[0]*i,t[1]=e[1]*r,t[2]=e[2]*i,t[3]=e[3]*r,t[4]=e[4]*i,t[5]=e[5]*r,t}function Zn(t,e){var n=e[0],i=e[2],r=e[4],o=e[1],a=e[3],s=e[5],l=n*a-o*i;return l?(l=1/l,t[0]=a*l,t[1]=-o*l,t[2]=-i*l,t[3]=n*l,t[4]=(i*s-a*r)*l,t[5]=(o*r-n*s)*l,t):null}function jn(t){var e=[1,0,0,1,0,0];return Hn(e,t),e}var qn=Object.freeze({__proto__:null,create:Fn,identity:Gn,copy:Hn,mul:Wn,translate:Un,rotate:Xn,scale:Yn,invert:Zn,clone:jn}),Kn=Gn,$n=5e-5;function Jn(t){return t>$n||t<-5e-5}var Qn,ti,ei=[],ni=[],ii=[1,0,0,1,0,0],ri=Math.abs,oi=function(){function t(){}return t.prototype.setPosition=function(t){this.x=t[0],this.y=t[1]},t.prototype.setScale=function(t){this.scaleX=t[0],this.scaleY=t[1]},t.prototype.setSkew=function(t){this.skewX=t[0],this.skewY=t[1]},t.prototype.setOrigin=function(t){this.originX=t[0],this.originY=t[1]},t.prototype.needLocalTransform=function(){return Jn(this.rotation)||Jn(this.x)||Jn(this.y)||Jn(this.scaleX-1)||Jn(this.scaleY-1)},t.prototype.updateTransform=function(){var t=this.parent,e=t&&t.transform,n=this.needLocalTransform(),i=this.transform;n||e?(i=i||[1,0,0,1,0,0],n?this.getLocalTransform(i):Kn(i),e&&(n?Wn(i,t.transform,i):Hn(i,t.transform)),this.transform=i,this._resolveGlobalScaleRatio(i)):i&&Kn(i)},t.prototype._resolveGlobalScaleRatio=function(t){var e=this.globalScaleRatio;if(null!=e&&1!==e){this.getGlobalScale(ei);var n=ei[0]<0?-1:1,i=ei[1]<0?-1:1,r=((ei[0]-n)*e+n)/ei[0]||0,o=((ei[1]-i)*e+i)/ei[1]||0;t[0]*=r,t[1]*=r,t[2]*=o,t[3]*=o}this.invTransform=this.invTransform||[1,0,0,1,0,0],Zn(this.invTransform,t)},t.prototype.getLocalTransform=function(e){return t.getLocalTransform(this,e)},t.prototype.getComputedTransform=function(){for(var t=this,e=[];t;)e.push(t),t=t.parent;for(;t=e.pop();)t.updateTransform();return this.transform},t.prototype.setLocalTransform=function(t){if(t){var e=t[0]*t[0]+t[1]*t[1],n=t[2]*t[2]+t[3]*t[3],i=Math.atan2(t[1],t[0]),r=Math.PI/2+i-Math.atan2(t[3],t[2]);n=Math.sqrt(n)*Math.cos(r),e=Math.sqrt(e),this.skewX=r,this.skewY=0,this.rotation=-i,this.x=+t[4],this.y=+t[5],this.scaleX=e,this.scaleY=n,this.originX=0,this.originY=0}},t.prototype.decomposeTransform=function(){if(this.transform){var t=this.parent,e=this.transform;t&&t.transform&&(Wn(ni,t.invTransform,e),e=ni);var n=this.originX,i=this.originY;(n||i)&&(ii[4]=n,ii[5]=i,Wn(ni,e,ii),ni[4]-=n,ni[5]-=i,e=ni),this.setLocalTransform(e)}},t.prototype.getGlobalScale=function(t){var e=this.transform;return t=t||[],e?(t[0]=Math.sqrt(e[0]*e[0]+e[1]*e[1]),t[1]=Math.sqrt(e[2]*e[2]+e[3]*e[3]),e[0]<0&&(t[0]=-t[0]),e[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},t.prototype.transformCoordToLocal=function(t,e){var n=[t,e],i=this.invTransform;return i&&Rt(n,n,i),n},t.prototype.transformCoordToGlobal=function(t,e){var n=[t,e],i=this.transform;return i&&Rt(n,n,i),n},t.prototype.getLineScale=function(){var t=this.transform;return t&&ri(t[0]-1)>1e-10&&ri(t[3]-1)>1e-10?Math.sqrt(ri(t[0]*t[3]-t[2]*t[1])):1},t.getLocalTransform=function(t,e){e=e||[];var n=t.originX||0,i=t.originY||0,r=t.scaleX,o=t.scaleY,a=t.rotation||0,s=t.x,l=t.y,u=t.skewX?Math.tan(t.skewX):0,h=t.skewY?Math.tan(-t.skewY):0;return n||i?(e[4]=-n*r-u*i*o,e[5]=-i*o-h*n*r):e[4]=e[5]=0,e[0]=r,e[3]=o,e[1]=h*r,e[2]=u*o,a&&Xn(e,e,a),e[4]+=n+s,e[5]+=i+l,e},t.initDefaultProps=function(){var e=t.prototype;e.x=0,e.y=0,e.scaleX=1,e.scaleY=1,e.originX=0,e.originY=0,e.skewX=0,e.skewY=0,e.rotation=0,e.globalScaleRatio=1}(),t}(),ai=function(){function t(t,e){this.x=t||0,this.y=e||0}return t.prototype.copy=function(t){return this.x=t.x,this.y=t.y,this},t.prototype.clone=function(){return new t(this.x,this.y)},t.prototype.set=function(t,e){return this.x=t,this.y=e,this},t.prototype.equal=function(t){return t.x===this.x&&t.y===this.y},t.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},t.prototype.scale=function(t){this.x*=t,this.y*=t},t.prototype.scaleAndAdd=function(t,e){this.x+=t.x*e,this.y+=t.y*e},t.prototype.sub=function(t){return this.x-=t.x,this.y-=t.y,this},t.prototype.dot=function(t){return this.x*t.x+this.y*t.y},t.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},t.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},t.prototype.normalize=function(){var t=this.len();return this.x/=t,this.y/=t,this},t.prototype.distance=function(t){var e=this.x-t.x,n=this.y-t.y;return Math.sqrt(e*e+n*n)},t.prototype.distanceSquare=function(t){var e=this.x-t.x,n=this.y-t.y;return e*e+n*n},t.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},t.prototype.transform=function(t){if(t){var e=this.x,n=this.y;return this.x=t[0]*e+t[2]*n+t[4],this.y=t[1]*e+t[3]*n+t[5],this}},t.prototype.toArray=function(t){return t[0]=this.x,t[1]=this.y,t},t.prototype.fromArray=function(t){this.x=t[0],this.y=t[1]},t.set=function(t,e,n){t.x=e,t.y=n},t.copy=function(t,e){t.x=e.x,t.y=e.y},t.len=function(t){return Math.sqrt(t.x*t.x+t.y*t.y)},t.lenSquare=function(t){return t.x*t.x+t.y*t.y},t.dot=function(t,e){return t.x*e.x+t.y*e.y},t.add=function(t,e,n){t.x=e.x+n.x,t.y=e.y+n.y},t.sub=function(t,e,n){t.x=e.x-n.x,t.y=e.y-n.y},t.scale=function(t,e,n){t.x=e.x*n,t.y=e.y*n},t.scaleAndAdd=function(t,e,n,i){t.x=e.x+n.x*i,t.y=e.y+n.y*i},t.lerp=function(t,e,n,i){var r=1-i;t.x=r*e.x+i*n.x,t.y=r*e.y+i*n.y},t}(),si=Math.min,li=Math.max,ui=new ai,hi=new ai,ci=new ai,pi=new ai,di=new ai,fi=new ai,gi=function(){function t(t,e,n,i){n<0&&(t+=n,n=-n),i<0&&(e+=i,i=-i),this.x=t,this.y=e,this.width=n,this.height=i}return t.prototype.union=function(t){var e=si(t.x,this.x),n=si(t.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=li(t.x+t.width,this.x+this.width)-e:this.width=t.width,isFinite(this.y)&&isFinite(this.height)?this.height=li(t.y+t.height,this.y+this.height)-n:this.height=t.height,this.x=e,this.y=n},t.prototype.applyTransform=function(e){t.applyTransform(this,this,e)},t.prototype.calculateTransform=function(t){var e=this,n=t.width/e.width,i=t.height/e.height,r=[1,0,0,1,0,0];return Un(r,r,[-e.x,-e.y]),Yn(r,r,[n,i]),Un(r,r,[t.x,t.y]),r},t.prototype.intersect=function(e,n){if(!e)return!1;e instanceof t||(e=t.create(e));var i=this,r=i.x,o=i.x+i.width,a=i.y,s=i.y+i.height,l=e.x,u=e.x+e.width,h=e.y,c=e.y+e.height,p=!(of&&(f=_,gf&&(f=x,v=n.x&&t<=n.x+n.width&&e>=n.y&&e<=n.y+n.height},t.prototype.clone=function(){return new t(this.x,this.y,this.width,this.height)},t.prototype.copy=function(e){t.copy(this,e)},t.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},t.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},t.prototype.isZero=function(){return 0===this.width||0===this.height},t.create=function(e){return new t(e.x,e.y,e.width,e.height)},t.copy=function(t,e){t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height},t.applyTransform=function(e,n,i){if(i){if(i[1]<1e-5&&i[1]>-1e-5&&i[2]<1e-5&&i[2]>-1e-5){var r=i[0],o=i[3],a=i[4],s=i[5];return e.x=n.x*r+a,e.y=n.y*o+s,e.width=n.width*r,e.height=n.height*o,e.width<0&&(e.x+=e.width,e.width=-e.width),void(e.height<0&&(e.y+=e.height,e.height=-e.height))}ui.x=ci.x=n.x,ui.y=pi.y=n.y,hi.x=pi.x=n.x+n.width,hi.y=ci.y=n.y+n.height,ui.transform(i),pi.transform(i),hi.transform(i),ci.transform(i),e.x=si(ui.x,hi.x,ci.x,pi.x),e.y=si(ui.y,hi.y,ci.y,pi.y);var l=li(ui.x,hi.x,ci.x,pi.x),u=li(ui.y,hi.y,ci.y,pi.y);e.width=l-e.x,e.height=u-e.y}else e!==n&&t.copy(e,n)},t}(),yi={},vi="12px sans-serif";var mi={measureText:function(t,e){return Qn||(Qn=C().getContext("2d")),ti!==e&&(ti=Qn.font=e||vi),Qn.measureText(t)}};function _i(t,e){var n=yi[e=e||vi];n||(n=yi[e]=new Ae(500));var i=n.get(t);return null==i&&(i=mi.measureText(t,e).width,n.put(t,i)),i}function xi(t,e,n,i){var r=_i(t,e),o=Mi(e),a=wi(0,r,n),s=Si(0,o,i);return new gi(a,s,r,o)}function bi(t,e,n,i){var r=((t||"")+"").split("\n");if(1===r.length)return xi(r[0],e,n,i);for(var o=new gi(0,0,0,0),a=0;a=0?parseFloat(t)/100*e:parseFloat(t):t}function Ti(t,e,n){var i=e.position||"inside",r=null!=e.distance?e.distance:5,o=n.height,a=n.width,s=o/2,l=n.x,u=n.y,h="left",c="top";if(i instanceof Array)l+=Ii(i[0],n.width),u+=Ii(i[1],n.height),h=null,c=null;else switch(i){case"left":l-=r,u+=s,h="right",c="middle";break;case"right":l+=r+a,u+=s,c="middle";break;case"top":l+=a/2,u-=r,h="center",c="bottom";break;case"bottom":l+=a/2,u+=o+r,h="center";break;case"inside":l+=a/2,u+=s,h="center",c="middle";break;case"insideLeft":l+=r,u+=s,c="middle";break;case"insideRight":l+=a-r,u+=s,h="right",c="middle";break;case"insideTop":l+=a/2,u+=r,h="center";break;case"insideBottom":l+=a/2,u+=o-r,h="center",c="bottom";break;case"insideTopLeft":l+=r,u+=r;break;case"insideTopRight":l+=a-r,u+=r,h="right";break;case"insideBottomLeft":l+=r,u+=o-r,c="bottom";break;case"insideBottomRight":l+=a-r,u+=o-r,h="right",c="bottom"}return(t=t||{}).x=l,t.y=u,t.align=h,t.verticalAlign=c,t}var Ci="__zr_normal__",Di=["x","y","scaleX","scaleY","originX","originY","rotation","ignore"],Ai={x:!0,y:!0,scaleX:!0,scaleY:!0,originX:!0,originY:!0,rotation:!0,ignore:!1},Li={},ki=new gi(0,0,0,0),Pi=function(){function t(t){this.id=x(),this.animators=[],this.currentStates=[],this.states={},this._init(t)}return t.prototype._init=function(t){this.attr(t)},t.prototype.drift=function(t,e,n){switch(this.draggable){case"horizontal":e=0;break;case"vertical":t=0}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=e,this.decomposeTransform(),this.markRedraw()},t.prototype.beforeUpdate=function(){},t.prototype.afterUpdate=function(){},t.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},t.prototype.updateInnerText=function(t){var e=this._textContent;if(e&&(!e.ignore||t)){this.textConfig||(this.textConfig={});var n=this.textConfig,i=n.local,r=e.attachedTransform,o=void 0,a=void 0,s=!1;r.parent=i?this:null;var l=!1;if(r.x=e.x,r.y=e.y,r.originX=e.originX,r.originY=e.originY,r.rotation=e.rotation,r.scaleX=e.scaleX,r.scaleY=e.scaleY,null!=n.position){var u=ki;n.layoutRect?u.copy(n.layoutRect):u.copy(this.getBoundingRect()),i||u.applyTransform(this.transform),this.calculateTextPosition?this.calculateTextPosition(Li,n,u):Ti(Li,n,u),r.x=Li.x,r.y=Li.y,o=Li.align,a=Li.verticalAlign;var h=n.origin;if(h&&null!=n.rotation){var c=void 0,p=void 0;"center"===h?(c=.5*u.width,p=.5*u.height):(c=Ii(h[0],u.width),p=Ii(h[1],u.height)),l=!0,r.originX=-r.x+c+(i?0:u.x),r.originY=-r.y+p+(i?0:u.y)}}null!=n.rotation&&(r.rotation=n.rotation);var d=n.offset;d&&(r.x+=d[0],r.y+=d[1],l||(r.originX=-d[0],r.originY=-d[1]));var f=null==n.inside?"string"==typeof n.position&&n.position.indexOf("inside")>=0:n.inside,g=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),y=void 0,v=void 0,m=void 0;f&&this.canBeInsideText()?(y=n.insideFill,v=n.insideStroke,null!=y&&"auto"!==y||(y=this.getInsideTextFill()),null!=v&&"auto"!==v||(v=this.getInsideTextStroke(y),m=!0)):(y=n.outsideFill,v=n.outsideStroke,null!=y&&"auto"!==y||(y=this.getOutsideFill()),null!=v&&"auto"!==v||(v=this.getOutsideStroke(y),m=!0)),(y=y||"#000")===g.fill&&v===g.stroke&&m===g.autoStroke&&o===g.align&&a===g.verticalAlign||(s=!0,g.fill=y,g.stroke=v,g.autoStroke=m,g.align=o,g.verticalAlign=a,e.setDefaultTextStyle(g)),e.__dirty|=1,s&&e.dirtyStyle(!0)}},t.prototype.canBeInsideText=function(){return!0},t.prototype.getInsideTextFill=function(){return"#fff"},t.prototype.getInsideTextStroke=function(t){return"#000"},t.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?Bn:Vn},t.prototype.getOutsideStroke=function(t){var e=this.__zr&&this.__zr.getBackgroundColor(),n="string"==typeof e&&He(e);n||(n=[255,255,255,1]);for(var i=n[3],r=this.__zr.isDarkMode(),o=0;o<3;o++)n[o]=n[o]*i+(r?0:255)*(1-i);return n[3]=1,Je(n,"rgba")},t.prototype.traverse=function(t,e){},t.prototype.attrKV=function(t,e){"textConfig"===t?this.setTextConfig(e):"textContent"===t?this.setTextContent(e):"clipPath"===t?this.setClipPath(e):"extra"===t?(this.extra=this.extra||{},I(this.extra,e)):this[t]=e},t.prototype.hide=function(){this.ignore=!0,this.markRedraw()},t.prototype.show=function(){this.ignore=!1,this.markRedraw()},t.prototype.attr=function(t,e){if("string"==typeof t)this.attrKV(t,e);else if(X(t))for(var n=E(t),i=0;i0},t.prototype.getState=function(t){return this.states[t]},t.prototype.ensureState=function(t){var e=this.states;return e[t]||(e[t]={}),e[t]},t.prototype.clearStates=function(t){this.useState(Ci,!1,t)},t.prototype.useState=function(t,e,n,i){var r=t===Ci;if(this.hasState()||!r){var o=this.currentStates,a=this.stateTransition;if(!(D(o,t)>=0)||!e&&1!==o.length){var s;if(this.stateProxy&&!r&&(s=this.stateProxy(t)),s||(s=this.states&&this.states[t]),s||r){r||this.saveCurrentToNormalState(s);var l=!!(s&&s.hoverLayer||i);l&&this._toggleHoverLayerFlag(!0),this._applyStateObj(t,s,this._normalState,e,!n&&!this.__inHover&&a&&a.duration>0,a);var u=this._textContent,h=this._textGuide;return u&&u.useState(t,e,n,l),h&&h.useState(t,e,n,l),r?(this.currentStates=[],this._normalState={}):e?this.currentStates.push(t):this.currentStates=[t],this._updateAnimationTargets(),this.markRedraw(),!l&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=-2),s}b("State "+t+" not exists.")}}},t.prototype.useStates=function(t,e,n){if(t.length){var i=[],r=this.currentStates,o=t.length,a=o===r.length;if(a)for(var s=0;s0,d);var f=this._textContent,g=this._textGuide;f&&f.useStates(t,e,c),g&&g.useStates(t,e,c),this._updateAnimationTargets(),this.currentStates=t.slice(),this.markRedraw(),!c&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=-2)}else this.clearStates()},t.prototype._updateAnimationTargets=function(){for(var t=0;t=0){var n=this.currentStates.slice();n.splice(e,1),this.useStates(n)}},t.prototype.replaceState=function(t,e,n){var i=this.currentStates.slice(),r=D(i,t),o=D(i,e)>=0;r>=0?o?i.splice(r,1):i[r]=e:n&&!o&&i.push(e),this.useStates(i)},t.prototype.toggleState=function(t,e){e?this.useState(t,!0):this.removeState(t)},t.prototype._mergeStates=function(t){for(var e,n={},i=0;i=0&&e.splice(n,1)})),this.animators.push(t),n&&n.animation.addAnimator(t),n&&n.wakeUp()},t.prototype.updateDuringAnimation=function(t){this.markRedraw()},t.prototype.stopAnimation=function(t,e){for(var n=this.animators,i=n.length,r=[],o=0;o8)&&(r("position","_legacyPos","x","y"),r("scale","_legacyScale","scaleX","scaleY"),r("origin","_legacyOrigin","originX","originY"))}(),t}();function Oi(t,e,n,i,r){var o=[];zi(t,"",t,e,n=n||{},i,o,r);var a=o.length,s=!1,l=n.done,u=n.aborted,h=function(){s=!0,--a<=0&&(s?l&&l():u&&u())},c=function(){--a<=0&&(s?l&&l():u&&u())};a||l&&l(),o.length>0&&n.during&&o[0].during((function(t,e){n.during(e)}));for(var p=0;p0||r.force&&!a.length){for(var m=t.animators,_=[],x=0;x=0&&(n.splice(i,0,t),this._doAdd(t))}return this},e.prototype.replaceAt=function(t,e){var n=this._children,i=n[e];if(t&&t!==this&&t.parent!==this&&t!==i){n[e]=t,i.parent=null;var r=this.__zr;r&&i.removeSelfFromZr(r),this._doAdd(t)}return this},e.prototype._doAdd=function(t){t.parent&&t.parent.remove(t),t.parent=this;var e=this.__zr;e&&e!==t.__zr&&t.addSelfToZr(e),e&&e.refresh()},e.prototype.remove=function(t){var e=this.__zr,n=this._children,i=D(n,t);return i<0||(n.splice(i,1),t.parent=null,e&&t.removeSelfFromZr(e),e&&e.refresh()),this},e.prototype.removeAll=function(){for(var t=this._children,e=this.__zr,n=0;n0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},t.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},t.prototype.wakeUp=function(){this.animation.start(),this._stillFrameAccum=0},t.prototype.addHover=function(t){},t.prototype.removeHover=function(t){},t.prototype.clearHover=function(){},t.prototype.refreshHover=function(){this._needsRefreshHover=!0},t.prototype.refreshHoverImmediately=function(){this._needsRefreshHover=!1,this.painter.refreshHover&&"canvas"===this.painter.getType()&&this.painter.refreshHover()},t.prototype.resize=function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},t.prototype.clearAnimation=function(){this.animation.clear()},t.prototype.getWidth=function(){return this.painter.getWidth()},t.prototype.getHeight=function(){return this.painter.getHeight()},t.prototype.pathToImage=function(t,e){if(this.painter.pathToImage)return this.painter.pathToImage(t,e)},t.prototype.setCursorStyle=function(t){this.handler.setCursorStyle(t)},t.prototype.findHover=function(t,e){return this.handler.findHover(t,e)},t.prototype.on=function(t,e,n){return this.handler.on(t,e,n),this},t.prototype.off=function(t,e){this.handler.off(t,e)},t.prototype.trigger=function(t,e){this.handler.trigger(t,e)},t.prototype.clear=function(){for(var t=this.storage.getRoots(),e=0;e0){if(t<=r)return a;if(t>=o)return s}else{if(t>=r)return a;if(t<=o)return s}else{if(t===r)return a;if(t===o)return s}return(t-r)/l*u+a}function Zi(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?(n=t,n.replace(/^\s+|\s+$/g,"")).match(/%$/)?parseFloat(t)/100*e:parseFloat(t):null==t?NaN:+t;var n}function ji(t,e,n){return null==e&&(e=10),e=Math.min(Math.max(0,e),20),t=(+t).toFixed(e),n?t:+t}function qi(t){return t.sort((function(t,e){return t-e})),t}function Ki(t){if(t=+t,isNaN(t))return 0;if(t>1e-14)for(var e=1,n=0;n<15;n++,e*=10)if(Math.round(t*e)/e===t)return n;return $i(t)}function $i(t){var e=t.toString().toLowerCase(),n=e.indexOf("e"),i=n>0?+e.slice(n+1):0,r=n>0?n:e.length,o=e.indexOf("."),a=o<0?0:r-1-o;return Math.max(0,a-i)}function Ji(t,e){var n=Math.log,i=Math.LN10,r=Math.floor(n(t[1]-t[0])/i),o=Math.round(n(Math.abs(e[1]-e[0]))/i),a=Math.min(Math.max(-r+o,0),20);return isFinite(a)?a:20}function Qi(t,e,n){if(!t[e])return 0;var i=R(t,(function(t,e){return t+(isNaN(e)?0:e)}),0);if(0===i)return 0;for(var r=Math.pow(10,n),o=O(t,(function(t){return(isNaN(t)?0:t)/i*r*100})),a=100*r,s=O(o,(function(t){return Math.floor(t)})),l=R(s,(function(t,e){return t+e}),0),u=O(o,(function(t,e){return t-s[e]}));lh&&(h=u[p],c=p);++s[c],u[c]=0,++l}return s[e]/r}function tr(t,e){var n=Math.max(Ki(t),Ki(e)),i=t+e;return n>20?i:ji(i,n)}var er=9007199254740991;function nr(t){var e=2*Math.PI;return(t%e+e)%e}function ir(t){return t>-1e-4&&t=10&&e++,e}function lr(t,e){var n=sr(t),i=Math.pow(10,n),r=t/i;return t=(e?r<1.5?1:r<2.5?2:r<4?3:r<7?5:10:r<1?1:r<2?2:r<3?3:r<5?5:10)*i,n>=-20?+t.toFixed(n<0?-n:0):t}function ur(t,e){var n=(t.length-1)*e+1,i=Math.floor(n),r=+t[i-1],o=n-i;return o?r+o*(t[i]-r):r}function hr(t){t.sort((function(t,e){return s(t,e,0)?-1:1}));for(var e=-1/0,n=1,i=0;i=0||r&&D(r,s)<0)){var l=n.getShallow(s,e);null!=l&&(o[t[a][0]]=l)}}return o}}var Jr=$r([["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]]),Qr=function(){function t(){}return t.prototype.getAreaStyle=function(t,e){return Jr(this,t,e)},t}(),to=new Ae(50);function eo(t){if("string"==typeof t){var e=to.get(t);return e&&e.image}return t}function no(t,e,n,i,r){if(t){if("string"==typeof t){if(e&&e.__zrImageSrc===t||!n)return e;var o=to.get(t),a={hostEl:n,cb:i,cbPayload:r};return o?!ro(e=o.image)&&o.pending.push(a):((e=new Image).onload=e.onerror=io,to.put(t,e.__cachedImgObj={image:e,pending:[a]}),e.src=e.__zrImageSrc=t),e}return t}return e}function io(){var t=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;e=a;l++)s-=a;var u=_i(n,e);return u>s&&(n="",u=0),s=t-u,r.ellipsis=n,r.ellipsisWidth=u,r.contentWidth=s,r.containerWidth=t,r}function lo(t,e){var n=e.containerWidth,i=e.font,r=e.contentWidth;if(!n)return"";var o=_i(t,i);if(o<=n)return t;for(var a=0;;a++){if(o<=r||a>=e.maxIterations){t+=e.ellipsis;break}var s=0===a?uo(t,r,e.ascCharWidth,e.cnCharWidth):o>0?Math.floor(t.length*r/o):0;o=_i(t=t.substr(0,s),i)}return""===t&&(t=e.placeholder),t}function uo(t,e,n,i){for(var r=0,o=0,a=t.length;o0&&f+i.accumWidth>i.width&&(o=e.split("\n"),c=!0),i.accumWidth=f}else{var g=vo(e,h,i.width,i.breakAll,i.accumWidth);i.accumWidth=g.accumWidth+d,a=g.linesWidths,o=g.lines}}else o=e.split("\n");for(var y=0;y=33&&e<=255}(t)||!!go[t]}function vo(t,e,n,i,r){for(var o=[],a=[],s="",l="",u=0,h=0,c=0;cn:r+h+d>n)?h?(s||l)&&(f?(s||(s=l,l="",h=u=0),o.push(s),a.push(h-u),l+=p,s="",h=u+=d):(l&&(s+=l,h+=u,l="",u=0),o.push(s),a.push(h),s=p,h=d)):f?(o.push(l),a.push(u),l=p,u=d):(o.push(p),a.push(d)):(h+=d,f?(l+=p,u+=d):(l&&(s+=l,l="",u=0),s+=p))}else l&&(s+=l,h+=u),o.push(s),a.push(h),s="",l="",u=0,h=0}return o.length||s||(s=t,l="",u=0),l&&(s+=l),s&&(o.push(s),a.push(h)),1===o.length&&(h+=r),{accumWidth:h,lines:o,linesWidths:a}}var mo="__zr_style_"+Math.round(10*Math.random()),_o={shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"#000",opacity:1,blend:"source-over"},xo={style:{shadowBlur:!0,shadowOffsetX:!0,shadowOffsetY:!0,shadowColor:!0,opacity:!0}};_o[mo]=!0;var bo=["z","z2","invisible"],wo=["invisible"],So=function(t){function e(e){return t.call(this,e)||this}var i;return n(e,t),e.prototype._init=function(e){for(var n=E(e),i=0;i-1e-8&&tDo||t<-1e-8}function Eo(t,e,n,i,r){var o=1-r;return o*o*(o*t+3*r*e)+r*r*(r*i+3*o*n)}function Vo(t,e,n,i,r){var o=1-r;return 3*(((e-t)*o+2*(n-e)*r)*o+(i-n)*r*r)}function Bo(t,e,n,i,r,o){var a=i+3*(e-n)-t,s=3*(n-2*e+t),l=3*(e-t),u=t-r,h=s*s-3*a*l,c=s*l-9*a*u,p=l*l-3*s*u,d=0;if(No(h)&&No(c)){if(No(s))o[0]=0;else(M=-l/s)>=0&&M<=1&&(o[d++]=M)}else{var f=c*c-4*h*p;if(No(f)){var g=c/h,y=-g/2;(M=-s/a+g)>=0&&M<=1&&(o[d++]=M),y>=0&&y<=1&&(o[d++]=y)}else if(f>0){var v=Co(f),m=h*s+1.5*a*(-c+v),_=h*s+1.5*a*(-c-v);(M=(-s-((m=m<0?-To(-m,ko):To(m,ko))+(_=_<0?-To(-_,ko):To(_,ko))))/(3*a))>=0&&M<=1&&(o[d++]=M)}else{var x=(2*h*s-3*a*c)/(2*Co(h*h*h)),b=Math.acos(x)/3,w=Co(h),S=Math.cos(b),M=(-s-2*w*S)/(3*a),I=(y=(-s+w*(S+Lo*Math.sin(b)))/(3*a),(-s+w*(S-Lo*Math.sin(b)))/(3*a));M>=0&&M<=1&&(o[d++]=M),y>=0&&y<=1&&(o[d++]=y),I>=0&&I<=1&&(o[d++]=I)}}return d}function Fo(t,e,n,i,r){var o=6*n-12*e+6*t,a=9*e+3*i-3*t-9*n,s=3*e-3*t,l=0;if(No(a)){if(zo(o))(h=-s/o)>=0&&h<=1&&(r[l++]=h)}else{var u=o*o-4*a*s;if(No(u))r[0]=-o/(2*a);else if(u>0){var h,c=Co(u),p=(-o-c)/(2*a);(h=(-o+c)/(2*a))>=0&&h<=1&&(r[l++]=h),p>=0&&p<=1&&(r[l++]=p)}}return l}function Go(t,e,n,i,r,o){var a=(e-t)*r+t,s=(n-e)*r+e,l=(i-n)*r+n,u=(s-a)*r+a,h=(l-s)*r+s,c=(h-u)*r+u;o[0]=t,o[1]=a,o[2]=u,o[3]=c,o[4]=c,o[5]=h,o[6]=l,o[7]=i}function Ho(t,e,n,i,r,o,a,s,l,u,h){var c,p,d,f,g,y=.005,v=1/0;Po[0]=l,Po[1]=u;for(var m=0;m<1;m+=.05)Oo[0]=Eo(t,n,r,a,m),Oo[1]=Eo(e,i,o,s,m),(f=Pt(Po,Oo))=0&&f=0&&y1e-4)return s[0]=t-n,s[1]=e-i,l[0]=t+n,void(l[1]=e+i);if(ea[0]=Qo(r)*n+t,ea[1]=Jo(r)*i+e,na[0]=Qo(o)*n+t,na[1]=Jo(o)*i+e,u(s,ea,na),h(l,ea,na),(r%=ta)<0&&(r+=ta),(o%=ta)<0&&(o+=ta),r>o&&!a?o+=ta:rr&&(ia[0]=Qo(d)*n+t,ia[1]=Jo(d)*i+e,u(s,ia,s),h(l,ia,l))}var ca={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},pa=[],da=[],fa=[],ga=[],ya=[],va=[],ma=Math.min,_a=Math.max,xa=Math.cos,ba=Math.sin,wa=Math.sqrt,Sa=Math.abs,Ma=Math.PI,Ia=2*Ma,Ta="undefined"!=typeof Float32Array,Ca=[];function Da(t){return Math.round(t/Ma*1e8)/1e8%2*Ma}function Aa(t,e){var n=Da(t[0]);n<0&&(n+=Ia);var i=n-t[0],r=t[1];r+=i,!e&&r-n>=Ia?r=n+Ia:e&&n-r>=Ia?r=n-Ia:!e&&n>r?r=n+(Ia-Da(n-r)):e&&n0&&(this._ux=Sa(n/En/t)||0,this._uy=Sa(n/En/e)||0)},t.prototype.setDPR=function(t){this.dpr=t},t.prototype.setContext=function(t){this._ctx=t},t.prototype.getContext=function(){return this._ctx},t.prototype.beginPath=function(){return this._ctx&&this._ctx.beginPath(),this.reset(),this},t.prototype.reset=function(){this._saveData&&(this._len=0),this._lineDash&&(this._lineDash=null,this._dashOffset=0),this._pathSegLen&&(this._pathSegLen=null,this._pathLen=0),this._version++},t.prototype.moveTo=function(t,e){return this._drawPendingPt(),this.addData(ca.M,t,e),this._ctx&&this._ctx.moveTo(t,e),this._x0=t,this._y0=e,this._xi=t,this._yi=e,this},t.prototype.lineTo=function(t,e){var n=Sa(t-this._xi),i=Sa(e-this._yi),r=n>this._ux||i>this._uy;if(this.addData(ca.L,t,e),this._ctx&&r&&(this._needsDash?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),r)this._xi=t,this._yi=e,this._pendingPtDist=0;else{var o=n*n+i*i;o>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=e,this._pendingPtDist=o)}return this},t.prototype.bezierCurveTo=function(t,e,n,i,r,o){return this.addData(ca.C,t,e,n,i,r,o),this._ctx&&(this._needsDash?this._dashedBezierTo(t,e,n,i,r,o):this._ctx.bezierCurveTo(t,e,n,i,r,o)),this._xi=r,this._yi=o,this},t.prototype.quadraticCurveTo=function(t,e,n,i){return this.addData(ca.Q,t,e,n,i),this._ctx&&(this._needsDash?this._dashedQuadraticTo(t,e,n,i):this._ctx.quadraticCurveTo(t,e,n,i)),this._xi=n,this._yi=i,this},t.prototype.arc=function(t,e,n,i,r,o){Ca[0]=i,Ca[1]=r,Aa(Ca,o),i=Ca[0];var a=(r=Ca[1])-i;return this.addData(ca.A,t,e,n,n,i,a,0,o?0:1),this._ctx&&this._ctx.arc(t,e,n,i,r,o),this._xi=xa(r)*n+t,this._yi=ba(r)*n+e,this},t.prototype.arcTo=function(t,e,n,i,r){return this._ctx&&this._ctx.arcTo(t,e,n,i,r),this},t.prototype.rect=function(t,e,n,i){return this._ctx&&this._ctx.rect(t,e,n,i),this.addData(ca.R,t,e,n,i),this},t.prototype.closePath=function(){this._drawPendingPt(),this.addData(ca.Z);var t=this._ctx,e=this._x0,n=this._y0;return t&&(this._needsDash&&this._dashedLineTo(e,n),t.closePath()),this._xi=e,this._yi=n,this},t.prototype.fill=function(t){t&&t.fill(),this.toStatic()},t.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},t.prototype.setLineDash=function(t){if(t instanceof Array){this._lineDash=t,this._dashIdx=0;for(var e=0,n=0;nu.length&&(this._expandData(),u=this.data);for(var h=0;h0&&(this._ctx&&this._ctx.lineTo(this._pendingPtX,this._pendingPtY),this._pendingPtDist=0)},t.prototype._expandData=function(){if(!(this.data instanceof Array)){for(var t=[],e=0;e0&&d<=t||h<0&&d>=t||0===h&&(c>0&&f<=e||c<0&&f>=e);)d+=h*(n=o[i=this._dashIdx]),f+=c*n,this._dashIdx=(i+1)%g,h>0&&dl||c>0&&fu||a[i%2?"moveTo":"lineTo"](h>=0?ma(d,t):_a(d,t),c>=0?ma(f,e):_a(f,e));h=d-t,c=f-e,this._dashOffset=-wa(h*h+c*c)},t.prototype._dashedBezierTo=function(t,e,n,i,r,o){var a,s,l,u,h,c=this._ctx,p=this._dashSum,d=this._dashOffset,f=this._lineDash,g=this._xi,y=this._yi,v=0,m=this._dashIdx,_=f.length,x=0;for(d<0&&(d=p+d),d%=p,a=0;a<1;a+=.1)s=Eo(g,t,n,r,a+.1)-Eo(g,t,n,r,a),l=Eo(y,e,i,o,a+.1)-Eo(y,e,i,o,a),v+=wa(s*s+l*l);for(;m<_&&!((x+=f[m])>d);m++);for(a=(x-d)/v;a<=1;)u=Eo(g,t,n,r,a),h=Eo(y,e,i,o,a),m%2?c.moveTo(u,h):c.lineTo(u,h),a+=f[m]/v,m=(m+1)%_;m%2!=0&&c.lineTo(r,o),s=r-u,l=o-h,this._dashOffset=-wa(s*s+l*l)},t.prototype._dashedQuadraticTo=function(t,e,n,i){var r=n,o=i;n=(n+2*t)/3,i=(i+2*e)/3,t=(this._xi+2*t)/3,e=(this._yi+2*e)/3,this._dashedBezierTo(t,e,n,i,r,o)},t.prototype.toStatic=function(){if(this._saveData){this._drawPendingPt();var t=this.data;t instanceof Array&&(t.length=this._len,Ta&&this._len>11&&(this.data=new Float32Array(t)))}},t.prototype.getBoundingRect=function(){fa[0]=fa[1]=ya[0]=ya[1]=Number.MAX_VALUE,ga[0]=ga[1]=va[0]=va[1]=-Number.MAX_VALUE;var t,e=this.data,n=0,i=0,r=0,o=0;for(t=0;tn||Sa(y)>i||c===e-1)&&(f=Math.sqrt(A*A+y*y),r=g,o=_);break;case ca.C:var v=t[c++],m=t[c++],_=(g=t[c++],t[c++]),x=t[c++],b=t[c++];f=Wo(r,o,v,m,g,_,x,b,10),r=x,o=b;break;case ca.Q:f=qo(r,o,v=t[c++],m=t[c++],g=t[c++],_=t[c++],10),r=g,o=_;break;case ca.A:var w=t[c++],S=t[c++],M=t[c++],I=t[c++],T=t[c++],C=t[c++],D=C+T;c+=1;t[c++];d&&(a=xa(T)*M+w,s=ba(T)*I+S),f=_a(M,I)*ma(Ia,Math.abs(C)),r=xa(D)*M+w,o=ba(D)*I+S;break;case ca.R:a=r=t[c++],s=o=t[c++],f=2*t[c++]+2*t[c++];break;case ca.Z:var A=a-r;y=s-o;f=Math.sqrt(A*A+y*y),r=a,o=s}f>=0&&(l[h++]=f,u+=f)}return this._pathLen=u,u},t.prototype.rebuildPath=function(t,e){var n,i,r,o,a,s,l,u,h,c,p=this.data,d=this._ux,f=this._uy,g=this._len,y=e<1,v=0,m=0,_=0;if(!y||(this._pathSegLen||this._calculateLength(),l=this._pathSegLen,u=e*this._pathLen))t:for(var x=0;x0&&(t.lineTo(h,c),_=0),n=r=p[x++],i=o=p[x++],t.moveTo(r,o);break;case ca.L:a=p[x++],s=p[x++];var S=Sa(a-r),M=Sa(s-o);if(S>d||M>f){if(y){if(v+(j=l[m++])>u){var I=(u-v)/j;t.lineTo(r*(1-I)+a*I,o*(1-I)+s*I);break t}v+=j}t.lineTo(a,s),r=a,o=s,_=0}else{var T=S*S+M*M;T>_&&(h=a,c=s,_=T)}break;case ca.C:var C=p[x++],D=p[x++],A=p[x++],L=p[x++],k=p[x++],P=p[x++];if(y){if(v+(j=l[m++])>u){Go(r,C,A,k,I=(u-v)/j,pa),Go(o,D,L,P,I,da),t.bezierCurveTo(pa[1],da[1],pa[2],da[2],pa[3],da[3]);break t}v+=j}t.bezierCurveTo(C,D,A,L,k,P),r=k,o=P;break;case ca.Q:C=p[x++],D=p[x++],A=p[x++],L=p[x++];if(y){if(v+(j=l[m++])>u){Zo(r,C,A,I=(u-v)/j,pa),Zo(o,D,L,I,da),t.quadraticCurveTo(pa[1],da[1],pa[2],da[2]);break t}v+=j}t.quadraticCurveTo(C,D,A,L),r=A,o=L;break;case ca.A:var O=p[x++],R=p[x++],N=p[x++],z=p[x++],E=p[x++],V=p[x++],B=p[x++],F=!p[x++],G=N>z?N:z,H=Sa(N-z)>.001,W=E+V,U=!1;if(y)v+(j=l[m++])>u&&(W=E+V*(u-v)/j,U=!0),v+=j;if(H&&t.ellipse?t.ellipse(O,R,N,z,B,E,W,F):t.arc(O,R,G,E,W,F),U)break t;w&&(n=xa(E)*N+O,i=ba(E)*z+R),r=xa(W)*N+O,o=ba(W)*z+R;break;case ca.R:n=r=p[x],i=o=p[x+1],a=p[x++],s=p[x++];var X=p[x++],Y=p[x++];if(y){if(v+(j=l[m++])>u){var Z=u-v;t.moveTo(a,s),t.lineTo(a+ma(Z,X),s),(Z-=X)>0&&t.lineTo(a+X,s+ma(Z,Y)),(Z-=Y)>0&&t.lineTo(a+_a(X-Z,0),s+Y),(Z-=X)>0&&t.lineTo(a,s+_a(Y-Z,0));break t}v+=j}t.rect(a,s,X,Y);break;case ca.Z:if(_>0&&(t.lineTo(h,c),_=0),y){var j;if(v+(j=l[m++])>u){I=(u-v)/j;t.lineTo(r*(1-I)+n*I,o*(1-I)+i*I);break t}v+=j}t.closePath(),r=n,o=i}}},t.CMD=ca,t.initDefaultProps=function(){var e=t.prototype;e._saveData=!0,e._needsDash=!1,e._dashOffset=0,e._dashIdx=0,e._dashSum=0,e._ux=0,e._uy=0,e._pendingPtDist=0,e._version=0}(),t}();function ka(t,e,n,i,r,o,a){if(0===r)return!1;var s=r,l=0;if(a>e+s&&a>i+s||at+s&&o>n+s||oe+c&&h>i+c&&h>o+c&&h>s+c||ht+c&&u>n+c&&u>r+c&&u>a+c||ue+u&&l>i+u&&l>o+u||lt+u&&s>n+u&&s>r+u||sn||h+ur&&(r+=za);var p=Math.atan2(l,s);return p<0&&(p+=za),p>=i&&p<=r||p+za>=i&&p+za<=r}function Va(t,e,n,i,r,o){if(o>e&&o>i||or?s:0}var Ba=La.CMD,Fa=2*Math.PI;var Ga=[-1,-1,-1],Ha=[-1,-1];function Wa(t,e,n,i,r,o,a,s,l,u){if(u>e&&u>i&&u>o&&u>s||u1&&(h=void 0,h=Ha[0],Ha[0]=Ha[1],Ha[1]=h),f=Eo(e,i,o,s,Ha[0]),d>1&&(g=Eo(e,i,o,s,Ha[1]))),2===d?ve&&s>i&&s>o||s=0&&h<=1&&(r[l++]=h);else{var u=a*a-4*o*s;if(No(u))(h=-a/(2*o))>=0&&h<=1&&(r[l++]=h);else if(u>0){var h,c=Co(u),p=(-a-c)/(2*o);(h=(-a+c)/(2*o))>=0&&h<=1&&(r[l++]=h),p>=0&&p<=1&&(r[l++]=p)}}return l}(e,i,o,s,Ga);if(0===l)return 0;var u=Yo(e,i,o);if(u>=0&&u<=1){for(var h=0,c=Uo(e,i,o,u),p=0;pn||s<-n)return 0;var l=Math.sqrt(n*n-s*s);Ga[0]=-l,Ga[1]=l;var u=Math.abs(i-r);if(u<1e-4)return 0;if(u>=Fa-1e-4){i=0,r=Fa;var h=o?1:-1;return a>=Ga[0]+t&&a<=Ga[1]+t?h:0}if(i>r){var c=i;i=r,r=c}i<0&&(i+=Fa,r+=Fa);for(var p=0,d=0;d<2;d++){var f=Ga[d];if(f+t>a){var g=Math.atan2(s,f);h=o?1:-1;g<0&&(g=Fa+g),(g>=i&&g<=r||g+Fa>=i&&g+Fa<=r)&&(g>Math.PI/2&&g<1.5*Math.PI&&(h=-h),p+=h)}}return p}function Ya(t,e,n,i,r){for(var o,a,s,l,u=t.data,h=t.len(),c=0,p=0,d=0,f=0,g=0,y=0;y1&&(n||(c+=Va(p,d,f,g,i,r))),m&&(f=p=u[y],g=d=u[y+1]),v){case Ba.M:p=f=u[y++],d=g=u[y++];break;case Ba.L:if(n){if(ka(p,d,u[y],u[y+1],e,i,r))return!0}else c+=Va(p,d,u[y],u[y+1],i,r)||0;p=u[y++],d=u[y++];break;case Ba.C:if(n){if(Pa(p,d,u[y++],u[y++],u[y++],u[y++],u[y],u[y+1],e,i,r))return!0}else c+=Wa(p,d,u[y++],u[y++],u[y++],u[y++],u[y],u[y+1],i,r)||0;p=u[y++],d=u[y++];break;case Ba.Q:if(n){if(Oa(p,d,u[y++],u[y++],u[y],u[y+1],e,i,r))return!0}else c+=Ua(p,d,u[y++],u[y++],u[y],u[y+1],i,r)||0;p=u[y++],d=u[y++];break;case Ba.A:var _=u[y++],x=u[y++],b=u[y++],w=u[y++],S=u[y++],M=u[y++];y+=1;var I=!!(1-u[y++]);o=Math.cos(S)*b+_,a=Math.sin(S)*w+x,m?(f=o,g=a):c+=Va(p,d,o,a,i,r);var T=(i-_)*w/b+_;if(n){if(Ea(_,x,w,S,S+M,I,e,T,r))return!0}else c+=Xa(_,x,w,S,S+M,I,T,r);p=Math.cos(S+M)*b+_,d=Math.sin(S+M)*w+x;break;case Ba.R:if(f=p=u[y++],g=d=u[y++],o=f+u[y++],a=g+u[y++],n){if(ka(f,g,o,g,e,i,r)||ka(o,g,o,a,e,i,r)||ka(o,a,f,a,e,i,r)||ka(f,a,f,g,e,i,r))return!0}else c+=Va(o,g,o,a,i,r),c+=Va(f,a,f,g,i,r);break;case Ba.Z:if(n){if(ka(p,d,f,g,e,i,r))return!0}else c+=Va(p,d,f,g,i,r);p=f,d=g}}return n||(s=d,l=g,Math.abs(s-l)<1e-4)||(c+=Va(p,d,f,g,i,r)||0),0!==c}var Za=T({fill:"#000",stroke:null,strokePercent:1,fillOpacity:1,strokeOpacity:1,lineDashOffset:0,lineWidth:1,lineCap:"butt",miterLimit:10,strokeNoScale:!1,strokeFirst:!1},_o),ja={style:T({fill:!0,stroke:!0,strokePercent:!0,fillOpacity:!0,strokeOpacity:!0,lineDashOffset:!0,lineWidth:!0,miterLimit:!0},xo.style)},qa=["x","y","rotation","scaleX","scaleY","originX","originY","invisible","culling","z","z2","zlevel","parent"],Ka=function(t){function e(e){return t.call(this,e)||this}var i;return n(e,t),e.prototype.update=function(){var n=this;t.prototype.update.call(this);var i=this.style;if(i.decal){var r=this._decalEl=this._decalEl||new e;r.buildPath===e.prototype.buildPath&&(r.buildPath=function(t){n.buildPath(t,n.shape)}),r.silent=!0;var o=r.style;for(var a in i)o[a]!==i[a]&&(o[a]=i[a]);o.fill=i.fill?i.decal:null,o.decal=null,o.shadowColor=null,i.strokeFirst&&(o.stroke=null);for(var s=0;s.5?Vn:e>.2?"#eee":Bn}if(t)return Bn}return Vn},e.prototype.getInsideTextStroke=function(t){var e=this.style.fill;if(H(e)){var n=this.__zr;if(!(!n||!n.isDarkMode())===Qe(t,0)<.4)return e}},e.prototype.buildPath=function(t,e,n){},e.prototype.pathUpdated=function(){this.__dirty&=-5},e.prototype.createPathProxy=function(){this.path=new La(!1)},e.prototype.hasStroke=function(){var t=this.style,e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth>0))},e.prototype.hasFill=function(){var t=this.style.fill;return null!=t&&"none"!==t},e.prototype.getBoundingRect=function(){var t=this._rect,e=this.style,n=!t;if(n){var i=!1;this.path||(i=!0,this.createPathProxy());var r=this.path;(i||4&this.__dirty)&&(r.beginPath(),this.buildPath(r,this.shape,!1),this.pathUpdated()),t=r.getBoundingRect()}if(this._rect=t,this.hasStroke()&&this.path&&this.path.len()>0){var o=this._rectWithStroke||(this._rectWithStroke=t.clone());if(this.__dirty||n){o.copy(t);var a=e.strokeNoScale?this.getLineScale():1,s=e.lineWidth;if(!this.hasFill()){var l=this.strokeContainThreshold;s=Math.max(s,null==l?4:l)}a>1e-10&&(o.width+=s/a,o.height+=s/a,o.x-=s/a/2,o.y-=s/a/2)}return o}return t},e.prototype.contain=function(t,e){var n=this.transformCoordToLocal(t,e),i=this.getBoundingRect(),r=this.style;if(t=n[0],e=n[1],i.contain(t,e)){var o=this.path;if(this.hasStroke()){var a=r.lineWidth,s=r.strokeNoScale?this.getLineScale():1;if(s>1e-10&&(this.hasFill()||(a=Math.max(a,this.strokeContainThreshold)),function(t,e,n,i){return Ya(t,e,!0,n,i)}(o,a/s,t,e)))return!0}if(this.hasFill())return function(t,e,n){return Ya(t,0,!1,e,n)}(o,t,e)}return!1},e.prototype.dirtyShape=function(){this.__dirty|=4,this._rect&&(this._rect=null),this._decalEl&&this._decalEl.dirtyShape(),this.markRedraw()},e.prototype.dirty=function(){this.dirtyStyle(),this.dirtyShape()},e.prototype.animateShape=function(t){return this.animate("shape",t)},e.prototype.updateDuringAnimation=function(t){"style"===t?this.dirtyStyle():"shape"===t?this.dirtyShape():this.markRedraw()},e.prototype.attrKV=function(e,n){"shape"===e?this.setShape(n):t.prototype.attrKV.call(this,e,n)},e.prototype.setShape=function(t,e){var n=this.shape;return n||(n=this.shape={}),"string"==typeof t?n[t]=e:I(n,t),this.dirtyShape(),this},e.prototype.shapeChanged=function(){return!!(4&this.__dirty)},e.prototype.createStyle=function(t){return pt(Za,t)},e.prototype._innerSaveToNormal=function(e){t.prototype._innerSaveToNormal.call(this,e);var n=this._normalState;e.shape&&!n.shape&&(n.shape=I({},this.shape))},e.prototype._applyStateObj=function(e,n,i,r,o,a){t.prototype._applyStateObj.call(this,e,n,i,r,o,a);var s,l=!(n&&r);if(n&&n.shape?o?r?s=n.shape:(s=I({},i.shape),I(s,n.shape)):(s=I({},r?this.shape:i.shape),I(s,n.shape)):l&&(s=i.shape),s)if(o){this.shape=I({},this.shape);for(var u={},h=E(s),c=0;c0},e.prototype.hasFill=function(){var t=this.style.fill;return null!=t&&"none"!==t},e.prototype.createStyle=function(t){return pt($a,t)},e.prototype.setBoundingRect=function(t){this._rect=t},e.prototype.getBoundingRect=function(){var t=this.style;if(!this._rect){var e=t.text;null!=e?e+="":e="";var n=bi(e,t.font,t.textAlign,t.textBaseline);if(n.x+=t.x||0,n.y+=t.y||0,this.hasStroke()){var i=t.lineWidth;n.x-=i/2,n.y-=i/2,n.width+=i,n.height+=i}this._rect=n}return this._rect},e.initDefaultProps=void(e.prototype.dirtyRectTolerance=10),e}(So);Ja.prototype.type="tspan";var Qa=T({x:0,y:0},_o),ts={style:T({x:!0,y:!0,width:!0,height:!0,sx:!0,sy:!0,sWidth:!0,sHeight:!0},xo.style)};var es=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.createStyle=function(t){return pt(Qa,t)},e.prototype._getSize=function(t){var e=this.style,n=e[t];if(null!=n)return n;var i,r=(i=e.image)&&"string"!=typeof i&&i.width&&i.height?e.image:this.__image;if(!r)return 0;var o="width"===t?"height":"width",a=e[o];return null==a?r[t]:r[t]/r[o]*a},e.prototype.getWidth=function(){return this._getSize("width")},e.prototype.getHeight=function(){return this._getSize("height")},e.prototype.getAnimationStyleProps=function(){return ts},e.prototype.getBoundingRect=function(){var t=this.style;return this._rect||(this._rect=new gi(t.x||0,t.y||0,this.getWidth(),this.getHeight())),this._rect},e}(So);es.prototype.type="image";var ns=Math.round;function is(t,e,n){if(e){var i=e.x1,r=e.x2,o=e.y1,a=e.y2;t.x1=i,t.x2=r,t.y1=o,t.y2=a;var s=n&&n.lineWidth;return s?(ns(2*i)===ns(2*r)&&(t.x1=t.x2=os(i,s,!0)),ns(2*o)===ns(2*a)&&(t.y1=t.y2=os(o,s,!0)),t):t}}function rs(t,e,n){if(e){var i=e.x,r=e.y,o=e.width,a=e.height;t.x=i,t.y=r,t.width=o,t.height=a;var s=n&&n.lineWidth;return s?(t.x=os(i,s,!0),t.y=os(r,s,!0),t.width=Math.max(os(i+o,s,!1)-t.x,0===o?0:1),t.height=Math.max(os(r+a,s,!1)-t.y,0===a?0:1),t):t}}function os(t,e,n){if(!e)return t;var i=ns(2*t);return(i+ns(e))%2==0?i/2:(i+(n?1:-1))/2}var as=function(){this.x=0,this.y=0,this.width=0,this.height=0},ss={},ls=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new as},e.prototype.buildPath=function(t,e){var n,i,r,o;if(this.subPixelOptimize){var a=rs(ss,e,this.style);n=a.x,i=a.y,r=a.width,o=a.height,a.r=e.r,e=a}else n=e.x,i=e.y,r=e.width,o=e.height;e.r?function(t,e){var n,i,r,o,a,s=e.x,l=e.y,u=e.width,h=e.height,c=e.r;u<0&&(s+=u,u=-u),h<0&&(l+=h,h=-h),"number"==typeof c?n=i=r=o=c:c instanceof Array?1===c.length?n=i=r=o=c[0]:2===c.length?(n=r=c[0],i=o=c[1]):3===c.length?(n=c[0],i=o=c[1],r=c[2]):(n=c[0],i=c[1],r=c[2],o=c[3]):n=i=r=o=0,n+i>u&&(n*=u/(a=n+i),i*=u/a),r+o>u&&(r*=u/(a=r+o),o*=u/a),i+r>h&&(i*=h/(a=i+r),r*=h/a),n+o>h&&(n*=h/(a=n+o),o*=h/a),t.moveTo(s+n,l),t.lineTo(s+u-i,l),0!==i&&t.arc(s+u-i,l+i,i,-Math.PI/2,0),t.lineTo(s+u,l+h-r),0!==r&&t.arc(s+u-r,l+h-r,r,0,Math.PI/2),t.lineTo(s+o,l+h),0!==o&&t.arc(s+o,l+h-o,o,Math.PI/2,Math.PI),t.lineTo(s,l+n),0!==n&&t.arc(s+n,l+n,n,Math.PI,1.5*Math.PI)}(t,e):t.rect(n,i,r,o)},e.prototype.isZeroArea=function(){return!this.shape.width||!this.shape.height},e}(Ka);ls.prototype.type="rect";var us={fill:"#000"},hs={style:T({fill:!0,stroke:!0,fillOpacity:!0,strokeOpacity:!0,lineWidth:!0,fontSize:!0,lineHeight:!0,width:!0,height:!0,textShadowColor:!0,textShadowBlur:!0,textShadowOffsetX:!0,textShadowOffsetY:!0,backgroundColor:!0,padding:!0,borderColor:!0,borderWidth:!0,borderRadius:!0},xo.style)},cs=function(t){function e(e){var n=t.call(this)||this;return n.type="text",n._children=[],n._defaultStyle=us,n.attr(e),n}return n(e,t),e.prototype.childrenRef=function(){return this._children},e.prototype.update=function(){this.styleChanged()&&this._updateSubTexts();for(var e=0;ep&&u){var d=Math.floor(p/l);n=n.slice(0,d)}var f=p,g=h;if(r&&(f+=r[0]+r[2],null!=g&&(g+=r[1]+r[3])),t&&a&&null!=g)for(var y=so(h,o,e.ellipsis,{minChar:e.truncateMinChar,placeholder:e.placeholder}),v=0;v0,I=null!=t.width&&("truncate"===t.overflow||"break"===t.overflow||"breakAll"===t.overflow),T=i.calculatedLineHeight,C=0;Cl&&fo(n,t.substring(l,u),e,s),fo(n,i[2],e,s,i[1]),l=oo.lastIndex}lo){b>0?(m.tokens=m.tokens.slice(0,b),y(m,x,_),n.lines=n.lines.slice(0,v+1)):n.lines=n.lines.slice(0,v);break t}var C=w.width,D=null==C||"auto"===C;if("string"==typeof C&&"%"===C.charAt(C.length-1))P.percentWidth=C,h.push(P),P.contentWidth=_i(P.text,I);else{if(D){var A=w.backgroundColor,L=A&&A.image;L&&ro(L=eo(L))&&(P.width=Math.max(P.width,L.width*T/L.height))}var k=f&&null!=r?r-x:null;null!=k&&k=0&&"right"===(C=_[T]).align;)this._placeToken(C,t,b,f,I,"right",y),w-=C.width,I-=C.width,T--;for(M+=(n-(M-d)-(g-I)-w)/2;S<=T;)C=_[S],this._placeToken(C,t,b,f,M+C.width/2,"center",y),M+=C.width,S++;f+=b}},e.prototype._placeToken=function(t,e,n,i,r,o,a){var s=e.rich[t.styleName]||{};s.text=t.text;var l=t.verticalAlign,u=i+n/2;"top"===l?u=i+t.height/2:"bottom"===l&&(u=i+n-t.height/2),!t.isLineHolder&&ms(s)&&this._renderBackground(s,e,"right"===o?r-t.width:"center"===o?r-t.width/2:r,u-t.height/2,t.width,t.height);var h=!!s.backgroundColor,c=t.textPadding;c&&(r=ys(r,o,c),u-=t.height/2-c[0]-t.innerHeight/2);var p=this._getOrCreateChild(Ja),d=p.createStyle();p.useStyle(d);var f=this._defaultStyle,g=!1,y=0,v=gs("fill"in s?s.fill:"fill"in e?e.fill:(g=!0,f.fill)),m=gs("stroke"in s?s.stroke:"stroke"in e?e.stroke:h||a||f.autoStroke&&!g?null:(y=2,f.stroke)),_=s.textShadowBlur>0||e.textShadowBlur>0;d.text=t.text,d.x=r,d.y=u,_&&(d.shadowBlur=s.textShadowBlur||e.textShadowBlur||0,d.shadowColor=s.textShadowColor||e.textShadowColor||"transparent",d.shadowOffsetX=s.textShadowOffsetX||e.textShadowOffsetX||0,d.shadowOffsetY=s.textShadowOffsetY||e.textShadowOffsetY||0),d.textAlign=o,d.textBaseline="middle",d.font=t.font||vi,d.opacity=et(s.opacity,e.opacity,1),m&&(d.lineWidth=et(s.lineWidth,e.lineWidth,y),d.lineDash=tt(s.lineDash,e.lineDash),d.lineDashOffset=e.lineDashOffset||0,d.stroke=m),v&&(d.fill=v);var x=t.contentWidth,b=t.contentHeight;p.setBoundingRect(new gi(wi(d.x,x,d.textAlign),Si(d.y,b,d.textBaseline),x,b))},e.prototype._renderBackground=function(t,e,n,i,r,o){var a,s,l,u=t.backgroundColor,h=t.borderWidth,c=t.borderColor,p=u&&u.image,d=u&&!p,f=t.borderRadius,g=this;if(d||h&&c){(a=this._getOrCreateChild(ls)).useStyle(a.createStyle()),a.style.fill=null;var y=a.shape;y.x=n,y.y=i,y.width=r,y.height=o,y.r=f,a.dirtyShape()}if(d)(l=a.style).fill=u||null,l.fillOpacity=tt(t.fillOpacity,1);else if(p){(s=this._getOrCreateChild(es)).onload=function(){g.dirtyStyle()};var v=s.style;v.image=u.image,v.x=n,v.y=i,v.width=r,v.height=o}h&&c&&((l=a.style).lineWidth=h,l.stroke=c,l.strokeOpacity=tt(t.strokeOpacity,1),l.lineDash=t.borderDash,l.lineDashOffset=t.borderDashOffset||0,a.strokeContainThreshold=0,a.hasFill()&&a.hasStroke()&&(l.strokeFirst=!0,l.lineWidth*=2));var m=(a||s).style;m.shadowBlur=t.shadowBlur||0,m.shadowColor=t.shadowColor||"transparent",m.shadowOffsetX=t.shadowOffsetX||0,m.shadowOffsetY=t.shadowOffsetY||0,m.opacity=et(t.opacity,e.opacity,1)},e.makeFont=function(t){var e="";if(t.fontSize||t.fontFamily||t.fontWeight){var n="";n="string"!=typeof t.fontSize||-1===t.fontSize.indexOf("px")&&-1===t.fontSize.indexOf("rem")&&-1===t.fontSize.indexOf("em")?isNaN(+t.fontSize)?"12px":t.fontSize+"px":t.fontSize,e=[t.fontStyle,t.fontWeight,n,t.fontFamily||"sans-serif"].join(" ")}return e&&ot(e)||t.textFont||t.font},e}(So),ps={left:!0,right:1,center:1},ds={top:1,bottom:1,middle:1};function fs(t){if(t){t.font=cs.makeFont(t);var e=t.align;"middle"===e&&(e="center"),t.align=null==e||ps[e]?e:"left";var n=t.verticalAlign;"center"===n&&(n="middle"),t.verticalAlign=null==n||ds[n]?n:"top",t.padding&&(t.padding=it(t.padding))}}function gs(t,e){return null==t||e<=0||"transparent"===t||"none"===t?null:t.image||t.colorStops?"#000":t}function ys(t,e,n){return"right"===e?t-n[1]:"center"===e?t+n[3]/2-n[1]/2:t+n[3]}function vs(t){var e=t.text;return null!=e&&(e+=""),e}function ms(t){return!!(t.backgroundColor||t.borderWidth&&t.borderColor)}var _s=kr(),xs=1,bs={},ws=kr(),Ss=["emphasis","blur","select"],Ms=["normal","emphasis","blur","select"],Is=10,Ts="highlight",Cs="downplay",Ds="select",As="unselect",Ls="toggleSelect";function ks(t){return null!=t&&"none"!==t}var Ps=new Ae(100);function Os(t){if("string"!=typeof t)return t;var e=Ps.get(t);return e||(e=Ue(t,-.1),Ps.put(t,e)),e}function Rs(t,e,n){t.onHoverStateChange&&(t.hoverState||0)!==n&&t.onHoverStateChange(e),t.hoverState=n}function Ns(t){Rs(t,"emphasis",2)}function zs(t){2===t.hoverState&&Rs(t,"normal",0)}function Es(t){Rs(t,"blur",1)}function Vs(t){1===t.hoverState&&Rs(t,"normal",0)}function Bs(t){t.selected=!0}function Fs(t){t.selected=!1}function Gs(t,e,n){e(t,n)}function Hs(t,e,n){Gs(t,e,n),t.isGroup&&t.traverse((function(t){Gs(t,e,n)}))}function Ws(t,e){switch(e){case"emphasis":t.hoverState=2;break;case"normal":t.hoverState=0;break;case"blur":t.hoverState=1;break;case"select":t.selected=!0}}function Us(t,e){var n=this.states[t];if(this.style){if("emphasis"===t)return function(t,e,n,i){var r=n&&D(n,"select")>=0,o=!1;if(t instanceof Ka){var a=ws(t),s=r&&a.selectFill||a.normalFill,l=r&&a.selectStroke||a.normalStroke;if(ks(s)||ks(l)){var u=(i=i||{}).style||{};!ks(u.fill)&&ks(s)?(o=!0,i=I({},i),(u=I({},u)).fill=Os(s)):!ks(u.stroke)&&ks(l)&&(o||(i=I({},i),u=I({},u)),u.stroke=Os(l)),i.style=u}}if(i&&null==i.z2){o||(i=I({},i));var h=t.z2EmphasisLift;i.z2=t.z2+(null!=h?h:Is)}return i}(this,0,e,n);if("blur"===t)return function(t,e,n){var i=D(t.currentStates,e)>=0,r=t.style.opacity,o=i?null:function(t,e,n,i){for(var r=t.style,o={},a=0;a0){var o={dataIndex:r,seriesIndex:t.seriesIndex};null!=i&&(o.dataType=i),e.push(o)}}))})),e}function sl(t,e,n){pl(t,!0),Hs(t,Xs),ll(t,e,n)}function ll(t,e,n){var i=_s(t);null!=e?(i.focus=e,i.blurScope=n):i.focus&&(i.focus=null)}var ul=["emphasis","blur","select"],hl={itemStyle:"getItemStyle",lineStyle:"getLineStyle",areaStyle:"getAreaStyle"};function cl(t,e,n,i){n=n||"itemStyle";for(var r=0;r1&&(a*=xl(f),s*=xl(f));var g=(r===o?-1:1)*xl((a*a*(s*s)-a*a*(d*d)-s*s*(p*p))/(a*a*(d*d)+s*s*(p*p)))||0,y=g*a*d/s,v=g*-s*p/a,m=(t+n)/2+wl(c)*y-bl(c)*v,_=(e+i)/2+bl(c)*y+wl(c)*v,x=Tl([1,0],[(p-y)/a,(d-v)/s]),b=[(p-y)/a,(d-v)/s],w=[(-1*p-y)/a,(-1*d-v)/s],S=Tl(b,w);if(Il(b,w)<=-1&&(S=Sl),Il(b,w)>=1&&(S=0),S<0){var M=Math.round(S/Sl*1e6)/1e6;S=2*Sl+M%2*Sl}h.addData(u,m,_,a,s,x,S,c,o)}var Dl=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/gi,Al=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;var Ll=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.applyTransform=function(t){},e}(Ka);function kl(t){return null!=t.setData}function Pl(t,e){var n=function(t){var e=new La;if(!t)return e;var n,i=0,r=0,o=i,a=r,s=La.CMD,l=t.match(Dl);if(!l)return e;for(var u=0;uL*L+k*k&&(M=T,I=C),{cx:M,cy:I,x01:-h,y01:-c,x11:M*(r/b-1),y11:I*(r/b-1)}}function Kl(t,e){var n=Yl(e.r,0),i=Yl(e.r0||0,0),r=n>0;if(r||i>0){if(r||(n=i,i=0),i>n){var o=n;n=i,i=o}var a,s=!!e.clockwise,l=e.startAngle,u=e.endAngle;if(l===u)a=0;else{var h=[l,u];Aa(h,!s),a=Ul(h[0]-h[1])}var c=e.cx,p=e.cy,d=e.cornerRadius||0,f=e.innerCornerRadius||0;if(n>jl)if(a>Bl-jl)t.moveTo(c+n*Gl(l),p+n*Fl(l)),t.arc(c,p,n,l,u,!s),i>jl&&(t.moveTo(c+i*Gl(u),p+i*Fl(u)),t.arc(c,p,i,u,l,s));else{var g=Ul(n-i)/2,y=Zl(g,d),v=Zl(g,f),m=v,_=y,x=n*Gl(l),b=n*Fl(l),w=i*Gl(u),S=i*Fl(u),M=void 0,I=void 0,T=void 0,C=void 0;if((y>jl||v>jl)&&(M=n*Gl(u),I=n*Fl(u),T=i*Gl(l),C=i*Fl(l),ajl)if(_>jl){var N=ql(T,C,x,b,n,_,s),z=ql(M,I,w,S,n,_,s);t.moveTo(c+N.cx+N.x01,p+N.cy+N.y01),_jl&&a>jl)if(m>jl){N=ql(w,S,M,I,i,-m,s),z=ql(x,b,T,C,i,-m,s);t.lineTo(c+N.cx+N.x01,p+N.cy+N.y01),m=2){if(i&&"spline"!==i){var o=function(t,e,n,i){var r,o,a,s,l=[],u=[],h=[],c=[];if(i){a=[1/0,1/0],s=[-1/0,-1/0];for(var p=0,d=t.length;pn-2?n-1:l+1],d=t[l>n-3?n-1:l+2]);var f=u*u,g=u*f;i.push([eu(h[0],c[0],p[0],d[0],u,f,g),eu(h[1],c[1],p[1],d[1],u,f,g)])}return i}(r,n)),t.moveTo(r[0][0],r[0][1]);s=1;for(var c=r.length;sbu[1]){if(a=!1,r)return a;var u=Math.abs(bu[0]-xu[1]),h=Math.abs(xu[0]-bu[1]);Math.min(u,h)>i.len()&&(u0?l?e.animateFrom(n,{duration:f,delay:y||0,easing:g,done:o,force:!!o||!!a,scope:t,during:a}):e.animateTo(n,{duration:f,delay:y||0,easing:g,done:o,force:!!o||!!a,setToFinal:!0,scope:t,during:a}):(e.stopAnimation(),!l&&e.attr(n),o&&o())}else e.stopAnimation(),!l&&e.attr(n),a&&a(1),o&&o()}function Hu(t,e,n,i,r,o){Gu("update",t,e,n,i,r,o)}function Wu(t,e,n,i,r,o){Gu("init",t,e,n,i,r,o)}function Uu(t,e,n,i,r,o){Zu(t)||Gu("remove",t,e,n,i,r,o)}function Xu(t,e,n,i){t.removeTextContent(),t.removeTextGuideLine(),Uu(t,{style:{opacity:0}},e,n,i)}function Yu(t,e,n){function i(){t.parent&&t.parent.remove(t)}t.isGroup?t.traverse((function(t){t.isGroup||Xu(t,e,n,i)})):Xu(t,e,n,i)}function Zu(t){if(!t.__zr)return!0;for(var e=0;eMath.abs(o[1])?o[0]>0?"right":"left":o[1]>0?"bottom":"top"}function $u(t){return!t.isGroup}function Ju(t,e,n){if(t&&e){var i,r=(i={},t.traverse((function(t){$u(t)&&t.anid&&(i[t.anid]=t)})),i);e.traverse((function(t){if($u(t)&&t.anid){var e=r[t.anid];if(e){var i=o(t);t.attr(o(e)),Hu(t,i,n,_s(t).dataIndex)}}}))}function o(t){var e={x:t.x,y:t.y,rotation:t.rotation};return function(t){return null!=t.shape}(t)&&(e.shape=I({},t.shape)),e}}function Qu(t,e){return O(t,(function(t){var n=t[0];n=Cu(n,e.x),n=Du(n,e.x+e.width);var i=t[1];return i=Cu(i,e.y),[n,i=Du(i,e.y+e.height)]}))}function th(t,e){var n=Cu(t.x,e.x),i=Du(t.x+t.width,e.x+e.width),r=Cu(t.y,e.y),o=Du(t.y+t.height,e.y+e.height);if(i>=n&&o>=r)return{x:n,y:r,width:i-n,height:o-r}}function eh(t,e,n){var i=I({rectHover:!0},e),r=i.style={strokeNoScale:!0};if(n=n||{x:-1,y:-1,width:2,height:2},t)return 0===t.indexOf("image://")?(r.image=t.slice(8),T(r,n),new es(i)):Nu(t.replace("path://",""),i,n,"center")}function nh(t,e,n,i,r){for(var o=0,a=r[r.length-1];o=-1e-6)return!1;var f=t-r,g=e-o,y=rh(f,g,u,h)/d;if(y<0||y>1)return!1;var v=rh(f,g,c,p)/d;return!(v<0||v>1)}function rh(t,e,n,i){return t*i-n*e}function oh(t){var e=t.itemTooltipOption,n=t.componentModel,i=t.itemName,r=H(e)?{formatter:e}:e,o=n.mainType,a=n.componentIndex,s={componentType:o,name:i,$vars:["name"]};s[o+"Index"]=a;var l=t.formatterParamsExtra;l&&P(E(l),(function(t){dt(s,t)||(s[t]=l[t],s.$vars.push(t))}));var u=_s(t.el);u.componentMainType=o,u.componentIndex=a,u.tooltipConfig={name:i,option:T({content:i,formatterParams:s},r)}}Ou("circle",Nl),Ou("ellipse",El),Ou("sector",Jl),Ou("ring",tu),Ou("polygon",ru),Ou("polyline",au),Ou("rect",ls),Ou("line",uu),Ou("bezierCurve",du),Ou("arc",gu);var ah=Object.freeze({__proto__:null,extendShape:Lu,extendPath:Pu,registerShape:Ou,getShapeClass:Ru,makePath:Nu,makeImage:zu,mergePath:Vu,resizePath:Bu,subPixelOptimizeLine:function(t){return is(t.shape,t.shape,t.style),t},subPixelOptimizeRect:function(t){return rs(t.shape,t.shape,t.style),t},subPixelOptimize:Fu,updateProps:Hu,initProps:Wu,removeElement:Uu,removeElementWithFadeOut:Yu,isElementRemoved:Zu,getTransform:ju,applyTransform:qu,transformDirection:Ku,groupTransition:Ju,clipPointsByRect:Qu,clipRectByRect:th,createIcon:eh,linePolygonIntersect:nh,lineLineIntersect:ih,setTooltipConfig:oh,Group:Ei,Image:es,Text:cs,Circle:Nl,Ellipse:El,Sector:Jl,Ring:tu,Polygon:ru,Polyline:au,Rect:ls,Line:uu,BezierCurve:du,Arc:gu,IncrementalDisplayable:Tu,CompoundPath:yu,LinearGradient:mu,RadialGradient:_u,BoundingRect:gi,OrientedBoundingRect:Mu,Point:ai,Path:Ka}),sh={};function lh(t,e){for(var n=0;n-1?Eh:Bh;function Wh(t,e){t=t.toUpperCase(),Gh[t]=new Oh(e),Fh[t]=e}Wh(Vh,{time:{month:["January","February","March","April","May","June","July","August","September","October","November","December"],monthAbbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayOfWeekAbbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},legend:{selector:{all:"All",inverse:"Inv"}},toolbox:{brush:{title:{rect:"Box Select",polygon:"Lasso Select",lineX:"Horizontally Select",lineY:"Vertically Select",keep:"Keep Selections",clear:"Clear Selections"}},dataView:{title:"Data View",lang:["Data View","Close","Refresh"]},dataZoom:{title:{zoom:"Zoom",back:"Zoom Reset"}},magicType:{title:{line:"Switch to Line Chart",bar:"Switch to Bar Chart",stack:"Stack",tiled:"Tile"}},restore:{title:"Restore"},saveAsImage:{title:"Save as Image",lang:["Right Click to Save Image"]}},series:{typeNames:{pie:"Pie chart",bar:"Bar chart",line:"Line chart",scatter:"Scatter plot",effectScatter:"Ripple scatter plot",radar:"Radar chart",tree:"Tree",treemap:"Treemap",boxplot:"Boxplot",candlestick:"Candlestick",k:"K line chart",heatmap:"Heat map",map:"Map",parallel:"Parallel coordinate map",lines:"Line graph",graph:"Relationship graph",sankey:"Sankey diagram",funnel:"Funnel chart",gauge:"Gauge",pictorialBar:"Pictorial bar",themeRiver:"Theme River Map",sunburst:"Sunburst"}},aria:{general:{withTitle:'This is a chart about "{title}"',withoutTitle:"This is a chart"},series:{single:{prefix:"",withName:" with type {seriesType} named {seriesName}.",withoutName:" with type {seriesType}."},multiple:{prefix:". It consists of {seriesCount} series count.",withName:" The {seriesId} series is a {seriesType} representing {seriesName}.",withoutName:" The {seriesId} series is a {seriesType}.",separator:{middle:"",end:""}}},data:{allData:"The data is as follows: ",partialData:"The first {displayCnt} items are: ",withName:"the data for {name} is {value}",withoutName:"{value}",separator:{middle:", ",end:". "}}}}),Wh(Eh,{time:{month:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthAbbr:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayOfWeekAbbr:["日","一","二","三","四","五","六"]},legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}});var Uh=1e3,Xh=6e4,Yh=36e5,Zh=864e5,jh=31536e6,qh={year:"{yyyy}",month:"{MMM}",day:"{d}",hour:"{HH}:{mm}",minute:"{HH}:{mm}",second:"{HH}:{mm}:{ss}",millisecond:"{hh}:{mm}:{ss} {SSS}",none:"{yyyy}-{MM}-{dd} {hh}:{mm}:{ss} {SSS}"},Kh="{yyyy}-{MM}-{dd}",$h={year:"{yyyy}",month:"{yyyy}-{MM}",day:Kh,hour:"{yyyy}-{MM}-{dd} "+qh.hour,minute:"{yyyy}-{MM}-{dd} "+qh.minute,second:"{yyyy}-{MM}-{dd} "+qh.second,millisecond:qh.none},Jh=["year","month","day","hour","minute","second","millisecond"],Qh=["year","half-year","quarter","month","week","half-week","day","half-day","quarter-day","hour","minute","second","millisecond"];function tc(t,e){return"0000".substr(0,e-(t+="").length)+t}function ec(t){switch(t){case"half-year":case"quarter":return"month";case"week":case"half-week":return"day";case"half-day":case"quarter-day":return"hour";default:return t}}function nc(t){return t===ec(t)}function ic(t,e,n,i){var r=or(t),o=r[ac(n)](),a=r[sc(n)]()+1,s=Math.floor((a-1)/4)+1,l=r[lc(n)](),u=r["get"+(n?"UTC":"")+"Day"](),h=r[uc(n)](),c=(h-1)%12+1,p=r[hc(n)](),d=r[cc(n)](),f=r[pc(n)](),g=(i instanceof Oh?i:function(t){return Gh[t]}(i||Hh)||Gh.EN).getModel("time"),y=g.get("month"),v=g.get("monthAbbr"),m=g.get("dayOfWeek"),_=g.get("dayOfWeekAbbr");return(e||"").replace(/{yyyy}/g,o+"").replace(/{yy}/g,o%100+"").replace(/{Q}/g,s+"").replace(/{MMMM}/g,y[a-1]).replace(/{MMM}/g,v[a-1]).replace(/{MM}/g,tc(a,2)).replace(/{M}/g,a+"").replace(/{dd}/g,tc(l,2)).replace(/{d}/g,l+"").replace(/{eeee}/g,m[u]).replace(/{ee}/g,_[u]).replace(/{e}/g,u+"").replace(/{HH}/g,tc(h,2)).replace(/{H}/g,h+"").replace(/{hh}/g,tc(c+"",2)).replace(/{h}/g,c+"").replace(/{mm}/g,tc(p,2)).replace(/{m}/g,p+"").replace(/{ss}/g,tc(d,2)).replace(/{s}/g,d+"").replace(/{SSS}/g,tc(f,3)).replace(/{S}/g,f+"")}function rc(t,e){var n=or(t),i=n[sc(e)]()+1,r=n[lc(e)](),o=n[uc(e)](),a=n[hc(e)](),s=n[cc(e)](),l=0===n[pc(e)](),u=l&&0===s,h=u&&0===a,c=h&&0===o,p=c&&1===r;return p&&1===i?"year":p?"month":c?"day":h?"hour":u?"minute":l?"second":"millisecond"}function oc(t,e,n){var i="number"==typeof t?or(t):t;switch(e=e||rc(t,n)){case"year":return i[ac(n)]();case"half-year":return i[sc(n)]()>=6?1:0;case"quarter":return Math.floor((i[sc(n)]()+1)/4);case"month":return i[sc(n)]();case"day":return i[lc(n)]();case"half-day":return i[uc(n)]()/24;case"hour":return i[uc(n)]();case"minute":return i[hc(n)]();case"second":return i[cc(n)]();case"millisecond":return i[pc(n)]()}}function ac(t){return t?"getUTCFullYear":"getFullYear"}function sc(t){return t?"getUTCMonth":"getMonth"}function lc(t){return t?"getUTCDate":"getDate"}function uc(t){return t?"getUTCHours":"getHours"}function hc(t){return t?"getUTCMinutes":"getMinutes"}function cc(t){return t?"getUTCSeconds":"getSeconds"}function pc(t){return t?"getUTCSeconds":"getSeconds"}function dc(t){return t?"setUTCFullYear":"setFullYear"}function fc(t){return t?"setUTCMonth":"setMonth"}function gc(t){return t?"setUTCDate":"setDate"}function yc(t){return t?"setUTCHours":"setHours"}function vc(t){return t?"setUTCMinutes":"setMinutes"}function mc(t){return t?"setUTCSeconds":"setSeconds"}function _c(t){return t?"setUTCSeconds":"setSeconds"}function xc(t){if(!pr(t))return H(t)?t:"-";var e=(t+"").split(".");return e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:"")}function bc(t,e){return t=(t||"").toLowerCase().replace(/-(.)/g,(function(t,e){return e.toUpperCase()})),e&&t&&(t=t.charAt(0).toUpperCase()+t.slice(1)),t}var wc=it,Sc=/([&<>"'])/g,Mc={"&":"&","<":"<",">":">",'"':""","'":"'"};function Ic(t){return null==t?"":(t+"").replace(Sc,(function(t,e){return Mc[e]}))}function Tc(t,e,n){function i(t){return t&&ot(t)?t:"-"}function r(t){return!(null==t||isNaN(t)||!isFinite(t))}var o="time"===e,a=t instanceof Date;if(o||a){var s=o?or(t):t;if(!isNaN(+s))return ic(s,"{yyyy}-{MM}-{dd} {hh}:{mm}:{ss}",n);if(a)return"-"}if("ordinal"===e)return W(t)?i(t):U(t)&&r(t)?t+"":"-";var l=cr(t);return r(l)?xc(l):W(t)?i(t):"-"}var Cc=["a","b","c","d","e","f","g"],Dc=function(t,e){return"{"+t+(null==e?"":e)+"}"};function Ac(t,e,n){F(e)||(e=[e]);var i=e.length;if(!i)return"";for(var r=e[0].$vars||[],o=0;o':'':{renderMode:o,content:"{"+(n.markerId||"markerX")+"|} ",style:"subItem"===r?{width:4,height:4,borderRadius:2,backgroundColor:i}:{width:10,height:10,borderRadius:5,backgroundColor:i}}:""}function kc(t,e){return e=e||"transparent",H(t)?t:X(t)&&t.colorStops&&(t.colorStops[0]||{}).color||e}function Pc(t,e){if("_blank"===e||"blank"===e){var n=window.open();n.opener=null,n.location.href=t}else window.open(t,e)}var Oc=P,Rc=["left","right","top","bottom","width","height"],Nc=[["width","left","right"],["height","top","bottom"]];function zc(t,e,n,i,r){var o=0,a=0;null==i&&(i=1/0),null==r&&(r=1/0);var s=0;e.eachChild((function(l,u){var h,c,p=l.getBoundingRect(),d=e.childAt(u+1),f=d&&d.getBoundingRect();if("horizontal"===t){var g=p.width+(f?-f.x+p.x:0);(h=o+g)>i||l.newline?(o=0,h=g,a+=s+n,s=p.height):s=Math.max(s,p.height)}else{var y=p.height+(f?-f.y+p.y:0);(c=a+y)>r||l.newline?(o+=s+n,a=0,c=y,s=p.width):s=Math.max(s,p.width)}l.newline||(l.x=o,l.y=a,l.markRedraw(),"horizontal"===t?o=h+n:a=c+n)}))}var Ec=zc;B(zc,"vertical"),B(zc,"horizontal");function Vc(t,e,n){n=wc(n||0);var i=e.width,r=e.height,o=Zi(t.left,i),a=Zi(t.top,r),s=Zi(t.right,i),l=Zi(t.bottom,r),u=Zi(t.width,i),h=Zi(t.height,r),c=n[2]+n[0],p=n[1]+n[3],d=t.aspect;switch(isNaN(u)&&(u=i-s-p-o),isNaN(h)&&(h=r-l-c-a),null!=d&&(isNaN(u)&&isNaN(h)&&(d>i/r?u=.8*i:h=.8*r),isNaN(u)&&(u=d*h),isNaN(h)&&(h=u/d)),isNaN(o)&&(o=i-s-u-p),isNaN(a)&&(a=r-l-h-c),t.left||t.right){case"center":o=i/2-u/2-n[3];break;case"right":o=i-u-p}switch(t.top||t.bottom){case"middle":case"center":a=r/2-h/2-n[0];break;case"bottom":a=r-h-c}o=o||0,a=a||0,isNaN(u)&&(u=i-p-o-(s||0)),isNaN(h)&&(h=r-c-a-(l||0));var f=new gi(o+n[3],a+n[0],u,h);return f.margin=n,f}function Bc(t,e,n,i,r){var o=!r||!r.hv||r.hv[0],a=!r||!r.hv||r.hv[1],s=r&&r.boundingMode||"all";if(o||a){var l;if("raw"===s)l="group"===t.type?new gi(0,0,+e.width||0,+e.height||0):t.getBoundingRect();else if(l=t.getBoundingRect(),t.needLocalTransform()){var u=t.getLocalTransform();(l=l.clone()).applyTransform(u)}var h=Vc(T({width:l.width,height:l.height},e),n,i),c=o?h.x-l.x:0,p=a?h.y-l.y:0;"raw"===s?(t.x=c,t.y=p):(t.x+=c,t.y+=p),t.markRedraw()}}function Fc(t){var e=t.layoutMode||t.constructor.layoutMode;return X(e)?e:e?{type:e}:null}function Gc(t,e,n){var i=n&&n.ignoreSize;!F(i)&&(i=[i,i]);var r=a(Nc[0],0),o=a(Nc[1],1);function a(n,r){var o={},a=0,u={},h=0;if(Oc(n,(function(e){u[e]=t[e]})),Oc(n,(function(t){s(e,t)&&(o[t]=u[t]=e[t]),l(o,t)&&a++,l(u,t)&&h++})),i[r])return l(e,n[1])?u[n[2]]=null:l(e,n[2])&&(u[n[1]]=null),u;if(2!==h&&a){if(a>=2)return o;for(var c=0;c=0;a--)o=S(o,n[a],!0);e.defaultOption=o}return e.defaultOption},e.prototype.getReferringComponents=function(t,e){var n=t+"Index",i=t+"Id";return Er(this.ecModel,t,{index:this.get(n,!0),id:this.get(i,!0)},e)},e.prototype.getBoxLayoutParams=function(){var t=this;return{left:t.get("left"),top:t.get("top"),right:t.get("right"),bottom:t.get("bottom"),width:t.get("width"),height:t.get("height")}},e.protoInitialize=function(){var t=e.prototype;t.type="component",t.id="",t.name="",t.mainType="",t.subType="",t.componentIndex=0}(),e}(Oh);Yr(Xc,Oh),Kr(Xc),function(t){var e={};t.registerSubTypeDefaulter=function(t,n){var i=Wr(t);e[i.main]=n},t.determineSubType=function(n,i){var r=i.type;if(!r){var o=Wr(n).main;t.hasSubTypes(n)&&e[o]&&(r=e[o](i))}return r}}(Xc),function(t,e){function n(t,e){return t[e]||(t[e]={predecessor:[],successor:[]}),t[e]}t.topologicalTravel=function(t,i,r,o){if(t.length){var a=function(t){var i={},r=[];return P(t,(function(o){var a=n(i,o),s=function(t,e){var n=[];return P(t,(function(t){D(e,t)>=0&&n.push(t)})),n}(a.originalDeps=e(o),t);a.entryCount=s.length,0===a.entryCount&&r.push(o),P(s,(function(t){D(a.predecessor,t)<0&&a.predecessor.push(t);var e=n(i,t);D(e.successor,t)<0&&e.successor.push(o)}))})),{graph:i,noEntryList:r}}(i),s=a.graph,l=a.noEntryList,u={};for(P(t,(function(t){u[t]=!0}));l.length;){var h=l.pop(),c=s[h],p=!!u[h];p&&(r.call(o,h,c.originalDeps.slice()),delete u[h]),P(c.successor,p?f:d)}P(u,(function(){var t="";throw new Error(t)}))}function d(t){s[t].entryCount--,0===s[t].entryCount&&l.push(t)}function f(t){u[t]=!0,d(t)}}}(Xc,(function(t){var e=[];P(Xc.getClassesByMainType(t),(function(t){e=e.concat(t.dependencies||t.prototype.dependencies||[])})),e=O(e,(function(t){return Wr(t).main})),"dataset"!==t&&D(e,"dataset")<=0&&e.unshift("dataset");return e}));var Yc="";"undefined"!=typeof navigator&&(Yc=navigator.platform||"");var Zc="rgba(0, 0, 0, 0.2)",jc={darkMode:"auto",color:["#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#3ba272","#fc8452","#9a60b4","#ea7ccc"],gradientColor:["#f6efa6","#d88273","#bf444c"],aria:{decal:{decals:[{color:Zc,dashArrayX:[1,0],dashArrayY:[2,5],symbolSize:1,rotation:Math.PI/6},{color:Zc,symbol:"circle",dashArrayX:[[8,8],[0,8,8,0]],dashArrayY:[6,0],symbolSize:.8},{color:Zc,dashArrayX:[1,0],dashArrayY:[4,3],rotation:-Math.PI/4},{color:Zc,dashArrayX:[[6,6],[0,6,6,0]],dashArrayY:[6,0]},{color:Zc,dashArrayX:[[1,0],[1,6]],dashArrayY:[1,0,6,0],rotation:Math.PI/4},{color:Zc,symbol:"triangle",dashArrayX:[[9,9],[0,9,9,0]],dashArrayY:[7,2],symbolSize:.75}]}},textStyle:{fontFamily:Yc.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,stateAnimation:{duration:300,easing:"cubicOut"},animation:"auto",animationDuration:1e3,animationDurationUpdate:500,animationEasing:"cubicInOut",animationEasingUpdate:"cubicInOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1},qc=ht(["tooltip","label","itemName","itemId","seriesName"]),Kc="original",$c="arrayRows",Jc="objectRows",Qc="keyedColumns",tp="typedArray",ep="unknown",np="column",ip="row",rp=1,op=2,ap=3,sp=kr();function lp(t,e,n){var i={},r=hp(e);if(!r||!t)return i;var o,a,s=[],l=[],u=e.ecModel,h=sp(u).datasetMap,c=r.uid+"_"+n.seriesLayoutBy;P(t=t.slice(),(function(e,n){var r=X(e)?e:t[n]={name:e};"ordinal"===r.type&&null==o&&(o=n,a=f(r)),i[r.name]=[]}));var p=h.get(c)||h.set(c,{categoryWayDim:a,valueWayDim:0});function d(t,e,n){for(var i=0;ie)return t[i];return t[n-1]}(i,a):n;if((h=h||n)&&h.length){var c=h[l];return r&&(u[r]=c),s.paletteIdx=(l+1)%h.length,c}}var wp=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.init=function(t,e,n,i,r,o){i=i||{},this.option=null,this._theme=new Oh(i),this._locale=new Oh(r),this._optionManager=o},e.prototype.setOption=function(t,e,n){var i=Ip(e);this._optionManager.setOption(t,n,i),this._resetOption(null,i)},e.prototype.resetOption=function(t,e){return this._resetOption(t,Ip(e))},e.prototype._resetOption=function(t,e){var n=!1,i=this._optionManager;if(!t||"recreate"===t){var r=i.mountOption("recreate"===t);0,this.option&&"recreate"!==t?(this.restoreData(),this._mergeOption(r,e)):yp(this,r),n=!0}if("timeline"!==t&&"media"!==t||this.restoreData(),!t||"recreate"===t||"timeline"===t){var o=i.getTimelineOption(this);o&&(n=!0,this._mergeOption(o,e))}if(!t||"recreate"===t||"media"===t){var a=i.getMediaOption(this);a.length&&P(a,(function(t){n=!0,this._mergeOption(t,e)}),this)}return n},e.prototype.mergeOption=function(t){this._mergeOption(t,null)},e.prototype._mergeOption=function(t,e){var n=this.option,i=this._componentsMap,r=this._componentsCount,o=[],a=ht(),s=e&&e.replaceMergeMainTypeMap;sp(this).datasetMap=ht(),P(t,(function(t,e){null!=t&&(Xc.hasClass(e)?e&&(o.push(e),a.set(e,!0)):n[e]=null==n[e]?w(t):S(n[e],t,!0))})),s&&s.each((function(t,e){Xc.hasClass(e)&&!a.get(e)&&(o.push(e),a.set(e,!0))})),Xc.topologicalTravel(o,Xc.getAllClassMainTypes(),(function(e){var o=function(t,e,n){var i=dp.get(e);if(!i)return n;var r=i(t);return r?n.concat(r):n}(this,e,xr(t[e])),a=i.get(e),l=a?s&&s.get(e)?"replaceMerge":"normalMerge":"replaceAll",u=Mr(a,o,l);(function(t,e,n){P(t,(function(t){var i=t.newOption;X(i)&&(t.keyInfo.mainType=e,t.keyInfo.subType=function(t,e,n,i){return e.type?e.type:n?n.subType:i.determineSubType(t,e)}(e,i,t.existing,n))}))})(u,e,Xc),n[e]=null,i.set(e,null),r.set(e,0);var h=[],c=[],p=0;P(u,(function(t,n){var i=t.existing,r=t.newOption;if(r){var o="series"===e,a=Xc.getClass(e,t.keyInfo.subType,!o);if(!a)return;if(i&&i.constructor===a)i.name=t.keyInfo.name,i.mergeOption(r,this),i.optionUpdated(r,!1);else{var s=I({componentIndex:n},t.keyInfo);I(i=new a(r,this,this,s),s),t.brandNew&&(i.__requireNewView=!0),i.init(r,this,this),i.optionUpdated(null,!0)}}else i&&(i.mergeOption({},this),i.optionUpdated({},!1));i?(h.push(i.option),c.push(i),p++):(h.push(void 0),c.push(void 0))}),this),n[e]=h,i.set(e,c),r.set(e,p),"series"===e&&fp(this)}),this),this._seriesIndices||fp(this)},e.prototype.getOption=function(){var t=w(this.option);return P(t,(function(e,n){if(Xc.hasClass(n)){for(var i=xr(e),r=i.length,o=!1,a=r-1;a>=0;a--)i[a]&&!Ar(i[a])?o=!0:(i[a]=null,!o&&r--);i.length=r,t[n]=i}})),delete t["\0_ec_inner"],t},e.prototype.getTheme=function(){return this._theme},e.prototype.getLocaleModel=function(){return this._locale},e.prototype.getLocale=function(t){return this.getLocaleModel().get(t)},e.prototype.setUpdatePayload=function(t){this._payload=t},e.prototype.getUpdatePayload=function(){return this._payload},e.prototype.getComponent=function(t,e){var n=this._componentsMap.get(t);if(n){var i=n[e||0];if(i)return i;if(null==e)for(var r=0;r=e:"max"===n?t<=e:t===e})(i[a],t,o)||(r=!1)}})),r}var Op=P,Rp=X,Np=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];function zp(t){var e=t&&t.itemStyle;if(e)for(var n=0,i=Np.length;n=0;f--){var g=t[f];if(s||(c=g.data.rawIndexOf(g.stackedByDimension,h)),c>=0){var y=g.data.getByRawIndex(g.stackResultDimension,c);if(p>=0&&y>0||p<=0&&y<0){p=tr(p,y),d=y;break}}}return i[0]=p,i[1]=d,i}));a.hostModel.setData(l),e.data=l}))}var td,ed,nd,id,rd,od=function(t){this.data=t.data||(t.sourceFormat===Qc?{}:[]),this.sourceFormat=t.sourceFormat||ep,this.seriesLayoutBy=t.seriesLayoutBy||np,this.startIndex=t.startIndex||0,this.dimensionsDefine=t.dimensionsDefine,this.dimensionsDetectedCount=t.dimensionsDetectedCount,this.encodeDefine=t.encodeDefine,this.metaRawOption=t.metaRawOption};function ad(t){return t instanceof od}function sd(t,e,n,i){n=n||hd(t);var r=e.seriesLayoutBy,o=function(t,e,n,i,r){var o,a;if(!t)return{dimensionsDefine:cd(r),startIndex:a,dimensionsDetectedCount:o};if(e===$c){var s=t;"auto"===i||null==i?pd((function(t){null!=t&&"-"!==t&&(H(t)?null==a&&(a=1):a=0)}),n,s,10):a=U(i)?i:i?1:0,r||1!==a||(r=[],pd((function(t,e){r[e]=null!=t?t+"":""}),n,s,1/0)),o=r?r.length:n===ip?s.length:s[0]?s[0].length:null}else if(e===Jc)r||(r=function(t){var e,n=0;for(;nu&&(u=d)}s[0]=l,s[1]=u}},i=function(){return this._data?this._data.length/this._dimSize:0};function r(t){for(var e=0;e=1)&&(t=1),t}a===l&&s===u||(e="reset"),(this._dirty||"reset"===e)&&(this._dirty=!1,o=this._doReset(i)),this._modBy=l,this._modDataCount=u;var c=t&&t.step;if(this._dueEnd=n?n._outputDueEnd:this._count?this._count(this.context):1/0,this._progress){var p=this._dueIndex,d=Math.min(null!=c?this._dueIndex+c:1/0,this._dueEnd);if(!i&&(o||p1&&i>0?s:a}};return o;function a(){return e=t?null:oe},gte:function(t,e){return t>=e}},Nd=function(){function t(t,e){if("number"!=typeof e){var n="";0,vr(n)}this._opFn=Rd[t],this._rvalFloat=cr(e)}return t.prototype.evaluate=function(t){return"number"==typeof t?this._opFn(t,this._rvalFloat):this._opFn(cr(t),this._rvalFloat)},t}(),zd=function(){function t(t,e){var n="desc"===t;this._resultLT=n?1:-1,null==e&&(e=n?"min":"max"),this._incomparable="min"===e?-1/0:1/0}return t.prototype.evaluate=function(t,e){var n=typeof t,i=typeof e,r="number"===n?t:cr(t),o="number"===i?e:cr(e),a=isNaN(r),s=isNaN(o);if(a&&(r=this._incomparable),s&&(o=this._incomparable),a&&s){var l="string"===n,u="string"===i;l&&(r=u?t:0),u&&(o=l?e:0)}return ro?-this._resultLT:0},t}(),Ed=function(){function t(t,e){this._rval=e,this._isEQ=t,this._rvalTypeof=typeof e,this._rvalFloat=cr(e)}return t.prototype.evaluate=function(t){var e=t===this._rval;if(!e){var n=typeof t;n===this._rvalTypeof||"number"!==n&&"number"!==this._rvalTypeof||(e=cr(t)===this._rvalFloat)}return this._isEQ?e:!e},t}();function Vd(t,e){return"eq"===t||"ne"===t?new Ed("eq"===t,e):dt(Rd,t)?new Nd(t,e):null}var Bd=function(){function t(){}return t.prototype.getRawData=function(){throw new Error("not supported")},t.prototype.getRawDataItem=function(t){throw new Error("not supported")},t.prototype.cloneRawData=function(){},t.prototype.getDimensionInfo=function(t){},t.prototype.cloneAllDimensionInfo=function(){},t.prototype.count=function(){},t.prototype.retrieveValue=function(t,e){},t.prototype.retrieveValueFromItem=function(t,e){},t.prototype.convertValue=function(t,e){return kd(t,e)},t}();function Fd(t){var e=t.sourceFormat;if(!Yd(e)){var n="";0,vr(n)}return t.data}function Gd(t){var e=t.sourceFormat,n=t.data;if(!Yd(e)){var i="";0,vr(i)}if(e===$c){for(var r=[],o=0,a=n.length;o9e10&&(this._versionSignBase=0)},t.prototype._getVersionSign=function(){return this._sourceHost.uid+"_"+this._versionSignBase},t.prototype.prepareSource=function(){this._isDirty()&&this._createSource()},t.prototype._createSource=function(){this._setLocalSource([],[]);var t,e,n=this._sourceHost,i=this._getUpstreamSourceManagers(),r=!!i.length;if(qd(n)){var o=n,a=void 0,s=void 0,l=void 0;if(r){var u=i[0];u.prepareSource(),a=(l=u.getSource()).data,s=l.sourceFormat,e=[u._getVersionSign()]}else s=Z(a=o.get("data",!0))?tp:Kc,e=[];var h=this._getSourceMetaRawOption(),c=l?l.metaRawOption:null;t=[sd(a,{seriesLayoutBy:tt(h.seriesLayoutBy,c?c.seriesLayoutBy:null),sourceHeader:tt(h.sourceHeader,c?c.sourceHeader:null),dimensions:tt(h.dimensions,c?c.dimensions:null)},s,o.get("encode",!0))]}else{var p=n;if(r){var d=this._applyTransform(i);t=d.sourceList,e=d.upstreamSignList}else{t=[sd(p.get("source",!0),this._getSourceMetaRawOption(),null,null)],e=[]}}this._setLocalSource(t,e)},t.prototype._applyTransform=function(t){var e,n=this._sourceHost,i=n.get("transform",!0),r=n.get("fromTransformResult",!0);if(null!=r){var o="";1!==t.length&&Kd(o)}var a,s=[],l=[];return P(t,(function(t){t.prepareSource();var e=t.getSource(r||0),n="";null==r||e||Kd(n),s.push(e),l.push(t._getVersionSign())})),i?e=function(t,e,n){var i=xr(t),r=i.length,o="";r||vr(o);for(var a=0,s=r;a1||e>0&&!t.noHeader,i=0;P(t.blocks,(function(t){ef(t).planLayout(t);var e=t.__gapLevelBetweenSubBlocks;e>=i&&(i=e+(!n||e&&("section"!==t.type||t.noHeader)?0:1))})),t.__gapLevelBetweenSubBlocks=i},build:function(t,e,n,i){var r=e.noHeader,o=of(e),a=function(t,e,n,i){var r=[],o=e.blocks||[];rt(!o||F(o)),o=o||[];var a=t.orderMode;if(e.sortBlocks&&a){o=o.slice();var s={valueAsc:"asc",valueDesc:"desc"};if(dt(s,a)){var l=new zd(s[a],null);o.sort((function(t,e){return l.evaluate(t.sortParam,e.sortParam)}))}else"seriesDesc"===a&&o.reverse()}var u=of(e);if(P(o,(function(e,n){var o=ef(e).build(t,e,n>0?u.html:0,i);null!=o&&r.push(o)})),!r.length)return;return"richText"===t.renderMode?r.join(u.richText):af(r.join(""),n)}(t,e,r?n:o.html,i);if(r)return a;var s=Tc(e.header,"ordinal",t.useUTC),l=$d(i,t.renderMode).nameStyle;return"richText"===t.renderMode?sf(t,s,l)+o.richText+a:af('
    '+Ic(s)+"
    "+a,n)}},nameValue:{planLayout:function(t){t.__gapLevelBetweenSubBlocks=0},build:function(t,e,n,i){var r=t.renderMode,o=e.noName,a=e.noValue,s=!e.markerType,l=e.name,u=e.value,h=t.useUTC;if(!o||!a){var c=s?"":t.markupStyleCreator.makeTooltipMarker(e.markerType,e.markerColor||"#333",r),p=o?"":Tc(l,"ordinal",h),d=e.valueType,f=a?[]:F(u)?O(u,(function(t,e){return Tc(t,F(d)?d[e]:d,h)})):[Tc(u,F(d)?d[0]:d,h)],g=!s||!o,y=!s&&o,v=$d(i,r),m=v.nameStyle,_=v.valueStyle;return"richText"===r?(s?"":c)+(o?"":sf(t,p,m))+(a?"":function(t,e,n,i,r){var o=[r],a=i?10:20;return n&&o.push({padding:[0,0,0,a],align:"right"}),t.markupStyleCreator.wrapRichTextStyle(e.join(" "),o)}(t,f,g,y,_)):af((s?"":c)+(o?"":function(t,e,n){return''+Ic(t)+""}(p,!s,m))+(a?"":function(t,e,n,i){var r=n?"10px":"20px";return''+O(t,(function(t){return Ic(t)})).join("  ")+""}(f,g,y,_)),n)}}}};function rf(t,e,n,i,r,o){if(t){var a=ef(t);a.planLayout(t);var s={useUTC:r,renderMode:n,orderMode:i,markupStyleCreator:e};return a.build(s,t,0,o)}}function of(t){var e=t.__gapLevelBetweenSubBlocks;return{html:Jd[e],richText:Qd[e]}}function af(t,e){return'
    '+t+'
    '}function sf(t,e,n){return t.markupStyleCreator.wrapRichTextStyle(e,n)}function lf(t,e){return kc(t.getData().getItemVisual(e,"style")[t.visualDrawType])}function uf(t,e){var n=t.get("padding");return null!=n?n:"richText"===e?[8,10]:10}var hf=function(){function t(){this.richTextStyles={},this._nextStyleNameId=dr()}return t.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},t.prototype.makeTooltipMarker=function(t,e,n){var i="richText"===n?this._generateStyleName():null,r=Lc({color:e,type:t,renderMode:n,markerId:i});return H(r)?r:(this.richTextStyles[i]=r.style,r.content)},t.prototype.wrapRichTextStyle=function(t,e){var n={};F(e)?P(e,(function(t){return I(n,t)})):I(n,e);var i=this._generateStyleName();return this.richTextStyles[i]=n,"{"+i+"|"+t+"}"},t}();function cf(t){var e,n,i,r,o=t.series,a=t.dataIndex,s=t.multipleSeries,l=o.getData(),u=l.mapDimensionsAll("defaultedTooltip"),h=u.length,c=o.getRawValue(a),p=F(c),d=lf(o,a);if(h>1||p&&!h){var f=function(t,e,n,i,r){var o=e.getData(),a=R(t,(function(t,e,n){var i=o.getDimensionInfo(n);return t||i&&!1!==i.tooltip&&null!=i.displayName}),!1),s=[],l=[],u=[];function h(t,e){var n=o.getDimensionInfo(e);n&&!1!==n.otherDims.tooltip&&(a?u.push(tf("nameValue",{markerType:"subItem",markerColor:r,name:n.displayName,value:t,valueType:n.type})):(s.push(t),l.push(n.type)))}return i.length?P(i,(function(t){h(Md(o,n,t),t)})):P(t,h),{inlineValues:s,inlineValueTypes:l,blocks:u}}(c,o,a,u,d);e=f.inlineValues,n=f.inlineValueTypes,i=f.blocks,r=f.inlineValues[0]}else if(h){var g=l.getDimensionInfo(u[0]);r=e=Md(l,a,u[0]),n=g.type}else r=e=p?c[0]:c;var y=Dr(o),v=y&&o.name||"",m=l.getName(a),_=s?v:m;return tf("section",{header:v,noHeader:s||!y,sortParam:r,blocks:[tf("nameValue",{markerType:"item",markerColor:d,name:_,noName:!ot(_),value:e,valueType:n})].concat(i||[])})}var pf=kr();function df(t,e){return t.getName(e)||t.getId(e)}var ff=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._selectedDataIndicesMap={},e}return n(e,t),e.prototype.init=function(t,e,n){this.seriesIndex=this.componentIndex,this.dataTask=Dd({count:yf,reset:vf}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(t,n),(pf(this).sourceManager=new Zd(this)).prepareSource();var i=this.getInitialData(t,n);_f(i,this),this.dataTask.context.data=i,pf(this).dataBeforeProcessed=i,gf(this),this._initSelectedMapFromData(i)},e.prototype.mergeDefaultAndTheme=function(t,e){var n=Fc(this),i=n?Hc(t):{},r=this.subType;Xc.hasClass(r)&&(r+="Series"),S(t,e.getTheme().get(this.subType)),S(t,this.getDefaultOption()),br(t,"label",["show"]),this.fillDataTextStyle(t.data),n&&Gc(t,i,n)},e.prototype.mergeOption=function(t,e){t=S(this.option,t,!0),this.fillDataTextStyle(t.data);var n=Fc(this);n&&Gc(this.option,t,n);var i=pf(this).sourceManager;i.dirty(),i.prepareSource();var r=this.getInitialData(t,e);_f(r,this),this.dataTask.dirty(),this.dataTask.context.data=r,pf(this).dataBeforeProcessed=r,gf(this),this._initSelectedMapFromData(r)},e.prototype.fillDataTextStyle=function(t){if(t&&!Z(t))for(var e=["show"],n=0;nthis.getShallow("animationThreshold")&&(t=!1),!!t},e.prototype.restoreData=function(){this.dataTask.dirty()},e.prototype.getColorFromPalette=function(t,e,n){var i=this.ecModel,r=_p.prototype.getColorFromPalette.call(this,t,e,n);return r||(r=i.getColorFromPalette(t,e,n)),r},e.prototype.coordDimToDataDim=function(t){return this.getRawData().mapDimensionsAll(t)},e.prototype.getProgressive=function(){return this.get("progressive")},e.prototype.getProgressiveThreshold=function(){return this.get("progressiveThreshold")},e.prototype.select=function(t,e){this._innerSelect(this.getData(e),t)},e.prototype.unselect=function(t,e){var n=this.option.selectedMap;if(n)for(var i=this.getData(e),r=0;r=0&&n.push(r)}return n},e.prototype.isSelected=function(t,e){var n=this.option.selectedMap;return n&&n[df(this.getData(e),t)]||!1},e.prototype._innerSelect=function(t,e){var n,i,r=this.option.selectedMode,o=e.length;if(r&&o)if("multiple"===r)for(var a=this.option.selectedMap||(this.option.selectedMap={}),s=0;s0&&this._innerSelect(t,e)}},e.registerClass=function(t){return Xc.registerClass(t)},e.protoInitialize=function(){var t=e.prototype;t.type="series.__base__",t.seriesIndex=0,t.useColorPaletteOnData=!1,t.ignoreStyleOnData=!1,t.hasSymbolVisual=!1,t.defaultSymbol="circle",t.visualStyleAccessPath="itemStyle",t.visualDrawType="fill"}(),e}(Xc);function gf(t){var e=t.name;Dr(t)||(t.name=function(t){var e=t.getRawData(),n=e.mapDimensionsAll("seriesName"),i=[];return P(n,(function(t){var n=e.getDimensionInfo(t);n.displayName&&i.push(n.displayName)})),i.join(" ")}(t)||e)}function yf(t){return t.model.getRawData().count()}function vf(t){var e=t.model;return e.setData(e.getRawData().cloneShallow()),mf}function mf(t,e){e.outputData&&t.end>e.outputData.count()&&e.model.getRawData().cloneShallow(e.outputData)}function _f(t,e){P(r(t.CHANGABLE_METHODS,t.DOWNSAMPLE_METHODS),(function(n){t.wrapMethod(n,B(xf,e))}))}function xf(t,e){var n=bf(t);return n&&n.setOutputEnd((e||this).count()),e}function bf(t){var e=(t.ecModel||{}).scheduler,n=e&&e.getPipeline(t.uid);if(n){var i=n.currentTask;if(i){var r=i.agentStubMap;r&&(i=r.get(t.uid))}return i}}L(ff,Td),L(ff,_p),Yr(ff,Xc);var wf=function(){function t(){this.group=new Ei,this.uid=Nh("viewComponent")}return t.prototype.init=function(t,e){},t.prototype.render=function(t,e,n,i){},t.prototype.dispose=function(t,e){},t.prototype.updateView=function(t,e,n,i){},t.prototype.updateLayout=function(t,e,n,i){},t.prototype.updateVisual=function(t,e,n,i){},t.prototype.blurSeries=function(t,e){},t}();function Sf(){var t=kr();return function(e){var n=t(e),i=e.pipelineContext,r=!!n.large,o=!!n.progressiveRender,a=n.large=!(!i||!i.large),s=n.progressiveRender=!(!i||!i.progressiveRender);return!(r===a&&o===s)&&"reset"}}Ur(wf),Kr(wf);var Mf=kr(),If=Sf(),Tf=function(){function t(){this.group=new Ei,this.uid=Nh("viewChart"),this.renderTask=Dd({plan:Af,reset:Lf}),this.renderTask.context={view:this}}return t.prototype.init=function(t,e){},t.prototype.render=function(t,e,n,i){},t.prototype.highlight=function(t,e,n,i){Df(t.getData(),i,"emphasis")},t.prototype.downplay=function(t,e,n,i){Df(t.getData(),i,"normal")},t.prototype.remove=function(t,e){this.group.removeAll()},t.prototype.dispose=function(t,e){},t.prototype.updateView=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.updateLayout=function(t,e,n,i){this.render(t,e,n,i)},t.prototype.updateVisual=function(t,e,n,i){this.render(t,e,n,i)},t.markUpdateMethod=function(t,e){Mf(t).updateMethod=e},t.protoInitialize=void(t.prototype.type="chart"),t}();function Cf(t,e,n){t&&("emphasis"===e?js:qs)(t,n)}function Df(t,e,n){var i=Lr(t,e),r=e&&null!=e.highlightKey?function(t){var e=bs[t];return null==e&&xs<=32&&(e=bs[t]=xs++),e}(e.highlightKey):null;null!=i?P(xr(i),(function(e){Cf(t.getItemGraphicEl(e),n,r)})):t.eachItemGraphicEl((function(t){Cf(t,n,r)}))}function Af(t){return If(t.model)}function Lf(t){var e=t.model,n=t.ecModel,i=t.api,r=t.payload,o=e.pipelineContext.progressiveRender,a=t.view,s=r&&Mf(r).updateMethod,l=o?"incrementalPrepareRender":s&&a[s]?s:"render";return"render"!==l&&a[l](e,n,i,r),kf[l]}Ur(Tf),Kr(Tf);var kf={incrementalPrepareRender:{progress:function(t,e){e.view.incrementalRender(t,e.model,e.ecModel,e.api,e.payload)}},render:{forceFirstProgress:!0,progress:function(t,e){e.view.render(e.model,e.ecModel,e.api,e.payload)}}},Pf="\0__throttleOriginMethod",Of="\0__throttleRate",Rf="\0__throttleType";function Nf(t,e,n){var i,r,o,a,s,l=0,u=0,h=null;function c(){u=(new Date).getTime(),h=null,t.apply(o,a||[])}e=e||0;var p=function(){for(var t=[],p=0;p=0?c():h=setTimeout(c,-r),l=i};return p.clear=function(){h&&(clearTimeout(h),h=null)},p.debounceNextCall=function(t){s=t},p}function zf(t,e,n,i){var r=t[e];if(r){var o=r[Pf]||r,a=r[Rf];if(r[Of]!==n||a!==i){if(null==n||!i)return t[e]=o;(r=t[e]=Nf(o,n,"debounce"===i))[Pf]=o,r[Rf]=i,r[Of]=n}return r}}var Ef=kr(),Vf={itemStyle:$r(Lh,!0),lineStyle:$r(Ch,!0)},Bf={lineStyle:"stroke",itemStyle:"fill"};function Ff(t,e){var n=t.visualStyleMapper||Vf[e];return n||(console.warn("Unkown style type '"+e+"'."),Vf.itemStyle)}function Gf(t,e){var n=t.visualDrawType||Bf[e];return n||(console.warn("Unkown style type '"+e+"'."),"fill")}var Hf={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData(),i=t.visualStyleAccessPath||"itemStyle",r=t.getModel(i),o=Ff(t,i)(r),a=r.getShallow("decal");a&&(n.setVisual("decal",a),a.dirty=!0);var s=Gf(t,i),l=o[s],u=G(l)?l:null,h="auto"===o.fill||"auto"===o.stroke;if(!o[s]||u||h){var c=t.getColorFromPalette(t.name,null,e.getSeriesCount());o[s]||(o[s]=c,n.setVisual("colorFromPalette",!0)),o.fill="auto"===o.fill||"function"==typeof o.fill?c:o.fill,o.stroke="auto"===o.stroke||"function"==typeof o.stroke?c:o.stroke}if(n.setVisual("style",o),n.setVisual("drawType",s),!e.isSeriesFiltered(t)&&u)return n.setVisual("colorFromPalette",!1),{dataEach:function(e,n){var i=t.getDataParams(n),r=I({},o);r[s]=u(i),e.setItemVisual(n,"style",r)}}}},Wf=new Oh,Uf={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){if(!t.ignoreStyleOnData&&!e.isSeriesFiltered(t)){var n=t.getData(),i=t.visualStyleAccessPath||"itemStyle",r=Ff(t,i),o=n.getVisual("drawType");return{dataEach:n.hasItemOption?function(t,e){var n=t.getRawDataItem(e);if(n&&n[i]){Wf.option=n[i];var a=r(Wf);I(t.ensureUniqueItemVisual(e,"style"),a),Wf.option.decal&&(t.setItemVisual(e,"decal",Wf.option.decal),Wf.option.decal.dirty=!0),o in a&&t.setItemVisual(e,"colorFromPalette",!1)}}:null}}}},Xf={performRawSeries:!0,overallReset:function(t){var e=ht();t.eachSeries((function(t){if(t.useColorPaletteOnData){var n=e.get(t.type);n||(n={},e.set(t.type,n)),Ef(t).scope=n}})),t.eachSeries((function(e){if(e.useColorPaletteOnData&&!t.isSeriesFiltered(e)){var n=e.getRawData(),i={},r=e.getData(),o=Ef(e).scope,a=e.visualStyleAccessPath||"itemStyle",s=Gf(e,a);r.each((function(t){var e=r.getRawIndex(t);i[e]=t})),n.each((function(t){var a=i[t];if(r.getItemVisual(a,"colorFromPalette")){var l=r.ensureUniqueItemVisual(a,"style"),u=n.getName(t)||t+"",h=n.count();l[s]=e.getColorFromPalette(u,o,h)}}))}}))}},Yf=Math.PI;var Zf=function(){function t(t,e,n,i){this._stageTaskMap=ht(),this.ecInstance=t,this.api=e,n=this._dataProcessorHandlers=n.slice(),i=this._visualHandlers=i.slice(),this._allHandlers=n.concat(i)}return t.prototype.restoreData=function(t,e){t.restoreData(e),this._stageTaskMap.each((function(t){var e=t.overallTask;e&&e.dirty()}))},t.prototype.getPerformArgs=function(t,e){if(t.__pipeline){var n=this._pipelineMap.get(t.__pipeline.id),i=n.context,r=!e&&n.progressiveEnabled&&(!i||i.progressiveRender)&&t.__idxInPipeline>n.blockIndex?n.step:null,o=i&&i.modDataCount;return{step:r,modBy:null!=o?Math.ceil(o/r):null,modDataCount:o}}},t.prototype.getPipeline=function(t){return this._pipelineMap.get(t)},t.prototype.updateStreamModes=function(t,e){var n=this._pipelineMap.get(t.uid),i=t.getData().count(),r=n.progressiveEnabled&&e.incrementalPrepareRender&&i>=n.threshold,o=t.get("large")&&i>=t.get("largeThreshold"),a="mod"===t.get("progressiveChunkMode")?i:null;t.pipelineContext=n.context={progressiveRender:r,modDataCount:a,large:o}},t.prototype.restorePipelines=function(t){var e=this,n=e._pipelineMap=ht();t.eachSeries((function(t){var i=t.getProgressive(),r=t.uid;n.set(r,{id:r,head:null,tail:null,threshold:t.getProgressiveThreshold(),progressiveEnabled:i&&!(t.preventIncremental&&t.preventIncremental()),blockIndex:-1,step:Math.round(i||700),count:0}),e._pipe(t,t.dataTask)}))},t.prototype.prepareStageTasks=function(){var t=this._stageTaskMap,e=this.api.getModel(),n=this.api;P(this._allHandlers,(function(i){var r=t.get(i.uid)||t.set(i.uid,{}),o="";rt(!(i.reset&&i.overallReset),o),i.reset&&this._createSeriesStageTask(i,r,e,n),i.overallReset&&this._createOverallStageTask(i,r,e,n)}),this)},t.prototype.prepareView=function(t,e,n,i){var r=t.renderTask,o=r.context;o.model=e,o.ecModel=n,o.api=i,r.__block=!t.incrementalPrepareRender,this._pipe(e,r)},t.prototype.performDataProcessorTasks=function(t,e){this._performStageTasks(this._dataProcessorHandlers,t,e,{block:!0})},t.prototype.performVisualTasks=function(t,e,n){this._performStageTasks(this._visualHandlers,t,e,n)},t.prototype._performStageTasks=function(t,e,n,i){i=i||{};var r=!1,o=this;function a(t,e){return t.setDirty&&(!t.dirtyMap||t.dirtyMap.get(e.__pipeline.id))}P(t,(function(t,s){if(!i.visualType||i.visualType===t.visualType){var l=o._stageTaskMap.get(t.uid),u=l.seriesTaskMap,h=l.overallTask;if(h){var c,p=h.agentStubMap;p.each((function(t){a(i,t)&&(t.dirty(),c=!0)})),c&&h.dirty(),o.updatePayload(h,n);var d=o.getPerformArgs(h,i.block);p.each((function(t){t.perform(d)})),h.perform(d)&&(r=!0)}else u&&u.each((function(s,l){a(i,s)&&s.dirty();var u=o.getPerformArgs(s,i.block);u.skip=!t.performRawSeries&&e.isSeriesFiltered(s.context.model),o.updatePayload(s,n),s.perform(u)&&(r=!0)}))}})),this.unfinished=r||this.unfinished},t.prototype.performSeriesTasks=function(t){var e;t.eachSeries((function(t){e=t.dataTask.perform()||e})),this.unfinished=e||this.unfinished},t.prototype.plan=function(){this._pipelineMap.each((function(t){var e=t.tail;do{if(e.__block){t.blockIndex=e.__idxInPipeline;break}e=e.getUpstream()}while(e)}))},t.prototype.updatePayload=function(t,e){"remain"!==e&&(t.context.payload=e)},t.prototype._createSeriesStageTask=function(t,e,n,i){var r=this,o=e.seriesTaskMap,a=e.seriesTaskMap=ht(),s=t.seriesType,l=t.getTargetSeries;function u(e){var s=e.uid,l=a.set(s,o&&o.get(s)||Dd({plan:Jf,reset:Qf,count:ng}));l.context={model:e,ecModel:n,api:i,useClearVisual:t.isVisual&&!t.isLayout,plan:t.plan,reset:t.reset,scheduler:r},r._pipe(e,l)}t.createOnAllSeries?n.eachRawSeries(u):s?n.eachRawSeriesByType(s,u):l&&l(n,i).each(u)},t.prototype._createOverallStageTask=function(t,e,n,i){var r=this,o=e.overallTask=e.overallTask||Dd({reset:jf});o.context={ecModel:n,api:i,overallReset:t.overallReset,scheduler:r};var a=o.agentStubMap,s=o.agentStubMap=ht(),l=t.seriesType,u=t.getTargetSeries,h=!0,c=!1,p="";function d(t){var e=t.uid,n=s.set(e,a&&a.get(e)||(c=!0,Dd({reset:qf,onDirty:$f})));n.context={model:t,overallProgress:h},n.agent=o,n.__block=h,r._pipe(t,n)}rt(!t.createOnAllSeries,p),l?n.eachRawSeriesByType(l,d):u?u(n,i).each(d):(h=!1,P(n.getSeries(),d)),c&&o.dirty()},t.prototype._pipe=function(t,e){var n=t.uid,i=this._pipelineMap.get(n);!i.head&&(i.head=e),i.tail&&i.tail.pipe(e),i.tail=e,e.__idxInPipeline=i.count++,e.__pipeline=i},t.wrapStageHandler=function(t,e){return G(t)&&(t={overallReset:t,seriesType:ig(t)}),t.uid=Nh("stageHandler"),e&&(t.visualType=e),t},t}();function jf(t){t.overallReset(t.ecModel,t.api,t.payload)}function qf(t){return t.overallProgress&&Kf}function Kf(){this.agent.dirty(),this.getDownstream().dirty()}function $f(){this.agent&&this.agent.dirty()}function Jf(t){return t.plan?t.plan(t.model,t.ecModel,t.api,t.payload):null}function Qf(t){t.useClearVisual&&t.data.clearAllVisual();var e=t.resetDefines=xr(t.reset(t.model,t.ecModel,t.api,t.payload));return e.length>1?O(e,(function(t,e){return eg(e)})):tg}var tg=eg(0);function eg(t){return function(e,n){var i=n.data,r=n.resetDefines[t];if(r&&r.dataEach)for(var o=e.start;o0&&h===r.length-u.length){var c=r.slice(0,h);"data"!==c&&(e.mainType=c,e[u.toLowerCase()]=t,s=!0)}}a.hasOwnProperty(r)&&(n[r]=t,s=!0),s||(i[r]=t)}))}return{cptQuery:e,dataQuery:n,otherQuery:i}},t.prototype.filter=function(t,e){var n=this.eventInfo;if(!n)return!0;var i=n.targetEl,r=n.packedEvent,o=n.model,a=n.view;if(!o||!a)return!0;var s=e.cptQuery,l=e.dataQuery;return u(s,o,"mainType")&&u(s,o,"subType")&&u(s,o,"index","componentIndex")&&u(s,o,"name")&&u(s,o,"id")&&u(l,r,"name")&&u(l,r,"dataIndex")&&u(l,r,"dataType")&&(!a.filterForExposedEvent||a.filterForExposedEvent(t,e.otherQuery,i,r));function u(t,e,n,i){return null==t[n]||e[i||n]===t[n]}},t.prototype.afterTrigger=function(){this.eventInfo=null},t}(),yg={createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){var n=t.getData();if(t.legendIcon&&n.setVisual("legendIcon",t.legendIcon),t.hasSymbolVisual){var i=t.get("symbol"),r=t.get("symbolSize"),o=t.get("symbolKeepAspect"),a=t.get("symbolRotate"),s=t.get("symbolOffset"),l=G(i),u=G(r),h=G(a),c=G(s),p=l||u||h||c,d=!l&&i?i:t.defaultSymbol,f=u?null:r,g=h?null:a,y=c?null:s;if(n.setVisual({legendIcon:t.legendIcon||d,symbol:d,symbolSize:f,symbolKeepAspect:o,symbolRotate:g,symbolOffset:y}),!e.isSeriesFiltered(t))return{dataEach:p?function(e,n){var o=t.getRawValue(n),p=t.getDataParams(n);l&&e.setItemVisual(n,"symbol",i(o,p)),u&&e.setItemVisual(n,"symbolSize",r(o,p)),h&&e.setItemVisual(n,"symbolRotate",a(o,p)),c&&e.setItemVisual(n,"symbolOffset",s(o,p))}:null}}}};function vg(t,e,n){switch(n){case"color":return t.getItemVisual(e,"style")[t.getVisual("drawType")];case"opacity":return t.getItemVisual(e,"style").opacity;case"symbol":case"symbolSize":case"liftZ":return t.getItemVisual(e,n);default:0}}function mg(t,e){switch(e){case"color":return t.getVisual("style")[t.getVisual("drawType")];case"opacity":return t.getVisual("style").opacity;case"symbol":case"symbolSize":case"liftZ":return t.getVisual(e);default:0}}function _g(t,e,n,i){switch(n){case"color":t.ensureUniqueItemVisual(e,"style")[t.getVisual("drawType")]=i,t.setItemVisual(e,"colorFromPalette",!1);break;case"opacity":t.ensureUniqueItemVisual(e,"style").opacity=i;break;case"symbol":case"symbolSize":case"liftZ":t.setItemVisual(e,n,i);break;default:0}}var xg=2*Math.PI,bg=La.CMD,wg=["top","right","bottom","left"];function Sg(t,e,n,i,r){var o=n.width,a=n.height;switch(t){case"top":i.set(n.x+o/2,n.y-e),r.set(0,-1);break;case"bottom":i.set(n.x+o/2,n.y+a+e),r.set(0,1);break;case"left":i.set(n.x-e,n.y+a/2),r.set(-1,0);break;case"right":i.set(n.x+o+e,n.y+a/2),r.set(1,0)}}function Mg(t,e,n,i,r,o,a,s,l){a-=t,s-=e;var u=Math.sqrt(a*a+s*s),h=(a/=u)*n+t,c=(s/=u)*n+e;if(Math.abs(i-r)%xg<1e-4)return l[0]=h,l[1]=c,u-n;if(o){var p=i;i=Na(r),r=Na(p)}else i=Na(i),r=Na(r);i>r&&(r+=xg);var d=Math.atan2(s,a);if(d<0&&(d+=xg),d>=i&&d<=r||d+xg>=i&&d+xg<=r)return l[0]=h,l[1]=c,u-n;var f=n*Math.cos(i)+t,g=n*Math.sin(i)+e,y=n*Math.cos(r)+t,v=n*Math.sin(r)+e,m=(f-a)*(f-a)+(g-s)*(g-s),_=(y-a)*(y-a)+(v-s)*(v-s);return m<_?(l[0]=f,l[1]=g,Math.sqrt(m)):(l[0]=y,l[1]=v,Math.sqrt(_))}function Ig(t,e,n,i,r,o,a,s){var l=r-t,u=o-e,h=n-t,c=i-e,p=Math.sqrt(h*h+c*c),d=(l*(h/=p)+u*(c/=p))/p;s&&(d=Math.min(Math.max(d,0),1)),d*=p;var f=a[0]=t+d*h,g=a[1]=e+d*c;return Math.sqrt((f-r)*(f-r)+(g-o)*(g-o))}function Tg(t,e,n,i,r,o,a){n<0&&(t+=n,n=-n),i<0&&(e+=i,i=-i);var s=t+n,l=e+i,u=a[0]=Math.min(Math.max(r,t),s),h=a[1]=Math.min(Math.max(o,e),l);return Math.sqrt((u-r)*(u-r)+(h-o)*(h-o))}var Cg=[];function Dg(t,e,n){var i=Tg(e.x,e.y,e.width,e.height,t.x,t.y,Cg);return n.set(Cg[0],Cg[1]),i}function Ag(t,e,n){for(var i,r,o=0,a=0,s=0,l=0,u=1/0,h=e.data,c=t.x,p=t.y,d=0;d0){e=e/180*Math.PI,Lg.fromArray(t[0]),kg.fromArray(t[1]),Pg.fromArray(t[2]),ai.sub(Og,Lg,kg),ai.sub(Rg,Pg,kg);var n=Og.len(),i=Rg.len();if(!(n<.001||i<.001)){Og.scale(1/n),Rg.scale(1/i);var r=Og.dot(Rg);if(Math.cos(e)1&&ai.copy(Eg,Pg),Eg.toArray(t[1])}}}}function Bg(t,e,n){if(n<=180&&n>0){n=n/180*Math.PI,Lg.fromArray(t[0]),kg.fromArray(t[1]),Pg.fromArray(t[2]),ai.sub(Og,kg,Lg),ai.sub(Rg,Pg,kg);var i=Og.len(),r=Rg.len();if(!(i<.001||r<.001))if(Og.scale(1/i),Rg.scale(1/r),Og.dot(e)=a)ai.copy(Eg,Pg);else{Eg.scaleAndAdd(Rg,o/Math.tan(Math.PI/2-s));var l=Pg.x!==kg.x?(Eg.x-kg.x)/(Pg.x-kg.x):(Eg.y-kg.y)/(Pg.y-kg.y);if(isNaN(l))return;l<0?ai.copy(Eg,kg):l>1&&ai.copy(Eg,Pg)}Eg.toArray(t[1])}}}function Fg(t,e,n,i){var r="normal"===n,o=r?t:t.ensureState(n);o.ignore=e;var a=i.get("smooth");a&&!0===a&&(a=.3),o.shape=o.shape||{},a>0&&(o.shape.smooth=a);var s=i.getModel("lineStyle").getLineStyle();r?t.useStyle(s):o.style=s}function Gg(t,e){var n=e.smooth,i=e.points;if(i)if(t.moveTo(i[0][0],i[0][1]),n>0&&i.length>=3){var r=Lt(i[0],i[1]),o=Lt(i[1],i[2]);if(!r||!o)return t.lineTo(i[1][0],i[1][1]),void t.lineTo(i[2][0],i[2][1]);var a=Math.min(r,o)*n,s=Ot([],i[1],i[0],a/r),l=Ot([],i[1],i[2],a/o),u=Ot([],s,l,.5);t.bezierCurveTo(s[0],s[1],s[0],s[1],u[0],u[1]),t.bezierCurveTo(l[0],l[1],l[0],l[1],i[2][0],i[2][1])}else for(var h=1;h0&&o&&x(-h/a,0,a);var f,g,y=t[0],v=t[a-1];return m(),f<0&&b(-f,.8),g<0&&b(g,.8),m(),_(f,g,1),_(g,f,-1),m(),f<0&&w(-f),g<0&&w(g),u}function m(){f=y.rect[e]-i,g=r-v.rect[e]-v.rect[n]}function _(t,e,n){if(t<0){var i=Math.min(e,-t);if(i>0){x(i*n,0,a);var r=i+t;r<0&&b(-r*n,1)}else b(-t*n,1)}}function x(n,i,r){0!==n&&(u=!0);for(var o=i;o0)for(l=0;l0;l--){x(-(o[l-1]*c),l,a)}}}function w(t){var e=t<0?-1:1;t=Math.abs(t);for(var n=Math.ceil(t/(a-1)),i=0;i0?x(n,0,i+1):x(-n,a-i-1,a),(t-=n)<=0)return}}function Xg(t,e,n,i){return Ug(t,"y","height",e,n,i)}function Yg(t){if(t){for(var e=[],n=0;n=0&&n.attr(d.oldLayoutSelect),D(u,"emphasis")>=0&&n.attr(d.oldLayoutEmphasis)),Hu(n,s,e,a)}else if(n.attr(s),!_h(n).valueAnimation){var h=tt(n.style.opacity,1);n.style.opacity=0,Wu(n,{style:{opacity:h}},e,a)}if(d.oldLayout=s,n.states.select){var c=d.oldLayoutSelect={};Jg(c,s,Qg),Jg(c,n.states.select,Qg)}if(n.states.emphasis){var p=d.oldLayoutEmphasis={};Jg(p,s,Qg),Jg(p,n.states.emphasis,Qg)}bh(n,a,l,e,e)}if(i&&!i.ignore&&!i.invisible){r=(d=$g(i)).oldLayout;var d,f={points:i.shape.points};r?(i.attr({shape:r}),Hu(i,{shape:f},e)):(i.setShape(f),i.style.strokePercent=0,Wu(i,{style:{strokePercent:1}},e)),d.oldLayout=f}},t}();function ey(t,e){function n(e,n){var i=[];return e.eachComponent({mainType:"series",subType:t,query:n},(function(t){i.push(t.seriesIndex)})),i}P([[t+"ToggleSelect","toggleSelect"],[t+"Select","select"],[t+"UnSelect","unselect"]],(function(t){e(t[0],(function(e,i,r){e=I({},e),r.dispatchAction(I(e,{type:t[1],seriesIndex:n(i,e)}))}))}))}function ny(t,e,n,i,r){var o=t+e;n.isSilent(o)||i.eachComponent({mainType:"series",subType:"pie"},(function(t){for(var e=t.seriesIndex,i=r.selected,a=0;a0?(e=e||1,"dashed"===t?[4*e,2*e]:"dotted"===t?[e]:U(t)?[t]:F(t)?t:null):null}var my=new La(!0);function _y(t){var e=t.stroke;return!(null==e||"none"===e||!(t.lineWidth>0))}function xy(t){var e=t.fill;return null!=e&&"none"!==e}function by(t,e){if(null!=e.fillOpacity&&1!==e.fillOpacity){var n=t.globalAlpha;t.globalAlpha=e.fillOpacity*e.opacity,t.fill(),t.globalAlpha=n}else t.fill()}function wy(t,e){if(null!=e.strokeOpacity&&1!==e.strokeOpacity){var n=t.globalAlpha;t.globalAlpha=e.strokeOpacity*e.opacity,t.stroke(),t.globalAlpha=n}else t.stroke()}function Sy(t,e,n){var i=no(e.image,e.__image,n);if(ro(i)){var r=t.createPattern(i,e.repeat||"repeat");if("function"==typeof DOMMatrix&&r.setTransform){var o=new DOMMatrix;o.rotateSelf(0,0,(e.rotation||0)/Math.PI*180),o.scaleSelf(e.scaleX||1,e.scaleY||1),o.translateSelf(e.x||0,e.y||0),r.setTransform(o)}return r}}var My=["shadowBlur","shadowOffsetX","shadowOffsetY"],Iy=[["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]];function Ty(t,e,n,i,r){var o=!1;if(!i&&e===(n=n||{}))return!1;if(i||e.opacity!==n.opacity){o||(Ay(t,r),o=!0);var a=Math.max(Math.min(e.opacity,1),0);t.globalAlpha=isNaN(a)?_o.opacity:a}(i||e.blend!==n.blend)&&(o||(Ay(t,r),o=!0),t.globalCompositeOperation=e.blend||_o.blend);for(var s=0;s0&&vy(n.lineDash,n.lineWidth),w=n.lineDashOffset,S=!!t.setLineDash,M=e.getGlobalScale();if(u.setScale(M[0],M[1],e.segmentIgnoreThreshold),b){var I=n.strokeNoScale&&e.getLineScale?e.getLineScale():1;I&&1!==I&&(b=O(b,(function(t){return t/I})),w/=I)}var T=!0;(l||4&e.__dirty||b&&!S&&r)&&(u.setDPR(t.dpr),s?u.setContext(null):(u.setContext(t),T=!1),u.reset(),b&&!S&&(u.setLineDash(b),u.setLineDashOffset(w)),e.buildPath(u,e.shape,i),u.toStatic(),e.pathUpdated()),T&&u.rebuildPath(t,s?a:1),b&&S&&(t.setLineDash(b),t.lineDashOffset=w),i||(n.strokeFirst?(r&&wy(t,n),o&&by(t,n)):(o&&by(t,n),r&&wy(t,n))),b&&S&&t.setLineDash([])}(t,e,d,p),p&&(n.batchFill=d.fill||"",n.batchStroke=d.stroke||"")):e instanceof Ja?(3!==n.lastDrawType&&(l=!0,n.lastDrawType=3),Cy(t,e,u,l,n),function(t,e,n){var i=n.text;if(null!=i&&(i+=""),i){t.font=n.font||vi,t.textAlign=n.textAlign,t.textBaseline=n.textBaseline;var r=void 0;if(t.setLineDash){var o=n.lineDash&&n.lineWidth>0&&vy(n.lineDash,n.lineWidth),a=n.lineDashOffset;if(o){var s=n.strokeNoScale&&e.getLineScale?e.getLineScale():1;s&&1!==s&&(o=O(o,(function(t){return t/s})),a/=s),t.setLineDash(o),t.lineDashOffset=a,r=!0}}n.strokeFirst?(_y(n)&&t.strokeText(i,n.x,n.y),xy(n)&&t.fillText(i,n.x,n.y)):(xy(n)&&t.fillText(i,n.x,n.y),_y(n)&&t.strokeText(i,n.x,n.y)),r&&t.setLineDash([])}}(t,e,d)):e instanceof es?(2!==n.lastDrawType&&(l=!0,n.lastDrawType=2),function(t,e,n,i,r){Ty(t,Ly(e,r.inHover),n&&Ly(n,r.inHover),i,r)}(t,e,u,l,n),function(t,e,n){var i=e.__image=no(n.image,e.__image,e,e.onload);if(i&&ro(i)){var r=n.x||0,o=n.y||0,a=e.getWidth(),s=e.getHeight(),l=i.width/i.height;if(null==a&&null!=s?a=s*l:null==s&&null!=a?s=a/l:null==a&&null==s&&(a=i.width,s=i.height),n.sWidth&&n.sHeight){var u=n.sx||0,h=n.sy||0;t.drawImage(i,u,h,n.sWidth,n.sHeight,r,o,a,s)}else if(n.sx&&n.sy){var c=a-(u=n.sx),p=s-(h=n.sy);t.drawImage(i,u,h,c,p,r,o,a,s)}else t.drawImage(i,r,o,a,s)}}(t,e,d)):e instanceof Tu&&(4!==n.lastDrawType&&(l=!0,n.lastDrawType=4),function(t,e,n){var i=e.getDisplayables(),r=e.getTemporalDisplayables();t.save();var o,a,s={prevElClipPaths:null,prevEl:null,allClipped:!1,viewWidth:n.viewWidth,viewHeight:n.viewHeight,inHover:n.inHover};for(o=e.getCursor(),a=i.length;o=4&&(l={x:parseFloat(c[0]||0),y:parseFloat(c[1]||0),width:parseFloat(c[2]),height:parseFloat(c[3])})}if(l&&null!=a&&null!=s&&(u=sv(l,{x:0,y:0,width:a,height:s}),!e.ignoreViewBox)){var p=i;(i=new Ei).add(p),p.scaleX=p.scaleY=u.scale,p.x=u.x,p.y=u.y}return e.ignoreRootClip||null==a||null==s||i.setClipPath(new ls({shape:{x:0,y:0,width:a,height:s}})),{root:i,width:a,height:s,viewBoxRect:l,viewBoxTransform:u,named:r}},t.prototype._parseNode=function(t,e,n,i,r,o){var a,s=t.nodeName.toLowerCase(),l=i;if("defs"===s&&(r=!0),"text"===s&&(o=!0),"defs"===s||"switch"===s)a=e;else{if(!r){var u=Oy[s];if(u&&dt(Oy,s)){a=u.call(this,t,e);var h=t.getAttribute("name");if(h){var c={name:h,namedFrom:null,svgNodeTagLower:s,el:a};n.push(c),"g"===s&&(l=c)}else i&&n.push({name:i.name,namedFrom:i,svgNodeTagLower:s,el:a});e.add(a)}}var p=Zy[s];if(p&&dt(Zy,s)){var d=p.call(this,t),f=t.getAttribute("id");f&&(this._defs[f]=d)}}if(a&&a.isGroup)for(var g=t.firstChild;g;)1===g.nodeType?this._parseNode(g,a,n,l,r,o):3===g.nodeType&&o&&this._parseText(g,a),g=g.nextSibling},t.prototype._parseText=function(t,e){var n=new Ja({style:{text:t.textContent},silent:!0,x:this._textX||0,y:this._textY||0});Ky(e,n),Jy(t,n,this._defsUsePending,!1,!1),function(t,e){var n=e.__selfStyle;if(n){var i=n.textBaseline,r=i;i&&"auto"!==i?"baseline"===i?r="alphabetic":"before-edge"===i||"text-before-edge"===i?r="top":"after-edge"===i||"text-after-edge"===i?r="bottom":"central"!==i&&"mathematical"!==i||(r="middle"):r="alphabetic",t.style.textBaseline=r}var o=e.__inheritedStyle;if(o){var a=o.textAlign,s=a;a&&("middle"===a&&(s="center"),t.style.textAlign=s)}}(n,e);var i=n.style,r=i.fontSize;r&&r<9&&(i.fontSize=9,n.scaleX*=r/9,n.scaleY*=r/9);var o=(i.fontSize||i.fontFamily)&&[i.fontStyle,i.fontWeight,(i.fontSize||12)+"px",i.fontFamily||"sans-serif"].join(" ");i.font=o;var a=n.getBoundingRect();return this._textX+=a.width,e.add(n),n},t.internalField=void(Oy={g:function(t,e){var n=new Ei;return Ky(e,n),Jy(t,n,this._defsUsePending,!1,!1),n},rect:function(t,e){var n=new ls;return Ky(e,n),Jy(t,n,this._defsUsePending,!1,!1),n.setShape({x:parseFloat(t.getAttribute("x")||"0"),y:parseFloat(t.getAttribute("y")||"0"),width:parseFloat(t.getAttribute("width")||"0"),height:parseFloat(t.getAttribute("height")||"0")}),n.silent=!0,n},circle:function(t,e){var n=new Nl;return Ky(e,n),Jy(t,n,this._defsUsePending,!1,!1),n.setShape({cx:parseFloat(t.getAttribute("cx")||"0"),cy:parseFloat(t.getAttribute("cy")||"0"),r:parseFloat(t.getAttribute("r")||"0")}),n.silent=!0,n},line:function(t,e){var n=new uu;return Ky(e,n),Jy(t,n,this._defsUsePending,!1,!1),n.setShape({x1:parseFloat(t.getAttribute("x1")||"0"),y1:parseFloat(t.getAttribute("y1")||"0"),x2:parseFloat(t.getAttribute("x2")||"0"),y2:parseFloat(t.getAttribute("y2")||"0")}),n.silent=!0,n},ellipse:function(t,e){var n=new El;return Ky(e,n),Jy(t,n,this._defsUsePending,!1,!1),n.setShape({cx:parseFloat(t.getAttribute("cx")||"0"),cy:parseFloat(t.getAttribute("cy")||"0"),rx:parseFloat(t.getAttribute("rx")||"0"),ry:parseFloat(t.getAttribute("ry")||"0")}),n.silent=!0,n},polygon:function(t,e){var n,i=t.getAttribute("points");i&&(n=$y(i));var r=new ru({shape:{points:n||[]},silent:!0});return Ky(e,r),Jy(t,r,this._defsUsePending,!1,!1),r},polyline:function(t,e){var n,i=t.getAttribute("points");i&&(n=$y(i));var r=new au({shape:{points:n||[]},silent:!0});return Ky(e,r),Jy(t,r,this._defsUsePending,!1,!1),r},image:function(t,e){var n=new es;return Ky(e,n),Jy(t,n,this._defsUsePending,!1,!1),n.setStyle({image:t.getAttribute("xlink:href"),x:+t.getAttribute("x"),y:+t.getAttribute("y"),width:+t.getAttribute("width"),height:+t.getAttribute("height")}),n.silent=!0,n},text:function(t,e){var n=t.getAttribute("x")||"0",i=t.getAttribute("y")||"0",r=t.getAttribute("dx")||"0",o=t.getAttribute("dy")||"0";this._textX=parseFloat(n)+parseFloat(r),this._textY=parseFloat(i)+parseFloat(o);var a=new Ei;return Ky(e,a),Jy(t,a,this._defsUsePending,!1,!0),a},tspan:function(t,e){var n=t.getAttribute("x"),i=t.getAttribute("y");null!=n&&(this._textX=parseFloat(n)),null!=i&&(this._textY=parseFloat(i));var r=t.getAttribute("dx")||"0",o=t.getAttribute("dy")||"0",a=new Ei;return Ky(e,a),Jy(t,a,this._defsUsePending,!1,!0),this._textX+=parseFloat(r),this._textY+=parseFloat(o),a},path:function(t,e){var n=Ol(t.getAttribute("d")||"");return Ky(e,n),Jy(t,n,this._defsUsePending,!1,!1),n.silent=!0,n}}),t}(),Zy={lineargradient:function(t){var e=parseInt(t.getAttribute("x1")||"0",10),n=parseInt(t.getAttribute("y1")||"0",10),i=parseInt(t.getAttribute("x2")||"10",10),r=parseInt(t.getAttribute("y2")||"0",10),o=new mu(e,n,i,r);return jy(t,o),qy(t,o),o},radialgradient:function(t){var e=parseInt(t.getAttribute("cx")||"0",10),n=parseInt(t.getAttribute("cy")||"0",10),i=parseInt(t.getAttribute("r")||"0",10),r=new _u(e,n,i);return jy(t,r),qy(t,r),r}};function jy(t,e){"userSpaceOnUse"===t.getAttribute("gradientUnits")&&(e.global=!0)}function qy(t,e){for(var n=t.firstChild;n;){if(1===n.nodeType&&"stop"===n.nodeName.toLocaleLowerCase()){var i=n.getAttribute("offset"),r=void 0;r=i&&i.indexOf("%")>0?parseInt(i,10)/100:i?parseFloat(i):0;var o={};av(n,o,o);var a=o.stopColor||n.getAttribute("stop-color")||"#000000";e.colorStops.push({offset:r,color:a})}n=n.nextSibling}}function Ky(t,e){t&&t.__inheritedStyle&&(e.__inheritedStyle||(e.__inheritedStyle={}),T(e.__inheritedStyle,t.__inheritedStyle))}function $y(t){for(var e=nv(t),n=[],i=0;i0;o-=2){var a=i[o],s=i[o-1],l=nv(a);switch(r=r||[1,0,0,1,0,0],s){case"translate":Un(r,r,[parseFloat(l[0]),parseFloat(l[1]||"0")]);break;case"scale":Yn(r,r,[parseFloat(l[0]),parseFloat(l[1]||l[0])]);break;case"rotate":Xn(r,r,-parseFloat(l[0])*rv);break;case"skewX":Wn(r,[1,0,Math.tan(parseFloat(l[0])*rv),1,0,0],r);break;case"skewY":Wn(r,[1,Math.tan(parseFloat(l[0])*rv),0,1,0,0],r);break;case"matrix":r[0]=parseFloat(l[0]),r[1]=parseFloat(l[1]),r[2]=parseFloat(l[2]),r[3]=parseFloat(l[3]),r[4]=parseFloat(l[4]),r[5]=parseFloat(l[5])}}e.setLocalTransform(r)}}(t,e),av(t,a,s),i||function(t,e,n){for(var i=0;i>1^-(1&s),l=l>>1^-(1&l),r=s+=r,o=l+=o,i.push([s/n,l/n])}return i}function vv(t,e){return O(N((t=function(t){if(!t.UTF8Encoding)return t;var e=t,n=e.UTF8Scale;null==n&&(n=1024);for(var i=e.features,r=0;r0})),(function(t){var n=t.properties,i=t.geometry,r=[];if("Polygon"===i.type){var o=i.coordinates;r.push({type:"polygon",exterior:o[0],interiors:o.slice(1)})}"MultiPolygon"===i.type&&P(o=i.coordinates,(function(t){t[0]&&r.push({type:"polygon",exterior:t[0],interiors:t.slice(1)})}));var a=new pv(n[e||"name"],r,n.cp);return a.properties=n,a}))}for(var mv=[126,25],_v="南海诸岛",xv=[[[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]]],bv=0;bv0&&t.unfinished);t.unfinished||this._zr.flush()}}},e.prototype.getDom=function(){return this._dom},e.prototype.getId=function(){return this.id},e.prototype.getZr=function(){return this._zr},e.prototype.setOption=function(t,e,n){if(this._disposed)_m(this.id);else{var i,r,o;if(zv(e)&&(n=e.lazyUpdate,i=e.silent,r=e.replaceMerge,o=e.transition,e=e.notMerge),this.__flagInMainProcess=!0,!this._model||e){var a=new kp(this._api),s=this._theme,l=this._model=new wp;l.scheduler=this._scheduler,l.init(null,null,null,s,this._locale,a)}this._model.setOption(t,{replaceMerge:r},Sm),cm(this,o),n?(this.__optionUpdated={silent:i},this.__flagInMainProcess=!1,this.getZr().wakeUp()):(Zv(this),Kv.update.call(this),this._zr.flush(),this.__optionUpdated=!1,this.__flagInMainProcess=!1,tm.call(this,i),em.call(this,i))}},e.prototype.setTheme=function(){console.error("ECharts#setTheme() is DEPRECATED in ECharts 3.0")},e.prototype.getModel=function(){return this._model},e.prototype.getOption=function(){return this._model&&this._model.getOption()},e.prototype.getWidth=function(){return this._zr.getWidth()},e.prototype.getHeight=function(){return this._zr.getHeight()},e.prototype.getDevicePixelRatio=function(){return this._zr.painter.dpr||Vv&&window.devicePixelRatio||1},e.prototype.getRenderedCanvas=function(t){if(a.canvasSupported)return t=t||{},this._zr.painter.getRenderedCanvas({backgroundColor:t.backgroundColor||this._model.get("backgroundColor"),pixelRatio:t.pixelRatio||this.getDevicePixelRatio()})},e.prototype.getSvgDataURL=function(){if(a.svgSupported){var t=this._zr;return P(t.storage.getDisplayList(),(function(t){t.stopAnimation(null,!0)})),t.painter.toDataURL()}},e.prototype.getDataURL=function(t){if(!this._disposed){var e=(t=t||{}).excludeComponents,n=this._model,i=[],r=this;Rv(e,(function(t){n.eachComponent({mainType:t},(function(t){var e=r._componentsMap[t.__viewId];e.group.ignore||(i.push(e),e.group.ignore=!0)}))}));var o="svg"===this._zr.painter.getType()?this.getSvgDataURL():this.getRenderedCanvas(t).toDataURL("image/"+(t&&t.type||"png"));return Rv(i,(function(t){t.group.ignore=!1})),o}_m(this.id)},e.prototype.getConnectedDataURL=function(t){if(this._disposed)_m(this.id);else if(a.canvasSupported){var e="svg"===t.type,n=this.group,i=Math.min,r=Math.max,o=1/0;if(Lm[n]){var s=o,l=o,u=-1/0,h=-1/0,c=[],p=t&&t.pixelRatio||this.getDevicePixelRatio();P(Am,(function(o,a){if(o.group===n){var p=e?o.getZr().painter.getSvgDom().innerHTML:o.getRenderedCanvas(w(t)),d=o.getDom().getBoundingClientRect();s=i(d.left,s),l=i(d.top,l),u=r(d.right,u),h=r(d.bottom,h),c.push({dom:p,left:d.left,top:d.top})}}));var d=(u*=p)-(s*=p),f=(h*=p)-(l*=p),g=C(),y=Hi(g,{renderer:e?"svg":"canvas"});if(y.resize({width:d,height:f}),e){var v="";return Rv(c,(function(t){var e=t.left-s,n=t.top-l;v+=''+t.dom+""})),y.painter.getSvgRoot().innerHTML=v,t.connectedBackgroundColor&&y.painter.setBackgroundColor(t.connectedBackgroundColor),y.refreshImmediately(),y.painter.toDataURL()}return t.connectedBackgroundColor&&y.add(new ls({shape:{x:0,y:0,width:d,height:f},style:{fill:t.connectedBackgroundColor}})),Rv(c,(function(t){var e=new es({style:{x:t.left*p-s,y:t.top*p-l,image:t.dom}});y.add(e)})),y.refreshImmediately(),g.toDataURL("image/"+(t&&t.type||"png"))}return this.getDataURL(t)}},e.prototype.convertToPixel=function(t,e){return $v(this,"convertToPixel",t,e)},e.prototype.convertFromPixel=function(t,e){return $v(this,"convertFromPixel",t,e)},e.prototype.containPixel=function(t,e){var n;if(!this._disposed)return P(Or(this._model,t),(function(t,i){i.indexOf("Models")>=0&&P(t,(function(t){var r=t.coordinateSystem;if(r&&r.containPoint)n=n||!!r.containPoint(e);else if("seriesModels"===i){var o=this._chartsMap[t.__viewId];o&&o.containPoint&&(n=n||o.containPoint(e,t))}else 0}),this)}),this),!!n;_m(this.id)},e.prototype.getVisual=function(t,e){var n=Or(this._model,t,{defaultMainType:"series"}),i=n.seriesModel;var r=i.getData(),o=n.hasOwnProperty("dataIndexInside")?n.dataIndexInside:n.hasOwnProperty("dataIndex")?r.indexOfRawIndex(n.dataIndex):null;return null!=o?vg(r,o,e):mg(r,e)},e.prototype.getViewOfComponentModel=function(t){return this._componentsMap[t.__viewId]},e.prototype.getViewOfSeriesModel=function(t){return this._chartsMap[t.__viewId]},e.prototype._initEvents=function(){var t,e,n,i=this;Rv(mm,(function(t){var e=function(e){var n,r=i.getModel(),o=e.target,a="globalout"===t;if(a?n={}:o&&iy(o,(function(t){var e=_s(t);if(e&&null!=e.dataIndex){var i=e.dataModel||r.getSeriesByIndex(e.seriesIndex);return n=i&&i.getDataParams(e.dataIndex,e.dataType)||{},!0}if(e.eventData)return n=I({},e.eventData),!0}),!0),n){var s=n.componentType,l=n.componentIndex;"markLine"!==s&&"markPoint"!==s&&"markArea"!==s||(s="series",l=n.seriesIndex);var u=s&&null!=l&&r.getComponent(s,l),h=u&&i["series"===u.mainType?"_chartsMap":"_componentsMap"][u.__viewId];0,n.event=e,n.type=t,i._$eventProcessor.eventInfo={targetEl:o,packedEvent:n,model:u,view:h},i.trigger(t,n)}};e.zrEventfulCallAtLast=!0,i._zr.on(t,e,i)})),Rv(bm,(function(t,e){i._messageCenter.on(e,(function(t){this.trigger(e,t)}),i)})),Rv(["selectchanged"],(function(t){i._messageCenter.on(t,(function(e){this.trigger(t,e)}),i)})),t=this._messageCenter,e=this,n=this._api,t.on("selectchanged",(function(t){var i=n.getModel();t.isFromClick?(ny("map","selectchanged",e,i,t),ny("pie","selectchanged",e,i,t)):"select"===t.fromAction?(ny("map","selected",e,i,t),ny("pie","selected",e,i,t)):"unselect"===t.fromAction&&(ny("map","unselected",e,i,t),ny("pie","unselected",e,i,t))}))},e.prototype.isDisposed=function(){return this._disposed},e.prototype.clear=function(){this._disposed?_m(this.id):this.setOption({series:[]},!0)},e.prototype.dispose=function(){if(this._disposed)_m(this.id);else{this._disposed=!0,Vr(this.getDom(),Om,"");var t=this._api,e=this._model;Rv(this._componentsViews,(function(n){n.dispose(e,t)})),Rv(this._chartsViews,(function(n){n.dispose(e,t)})),this._zr.dispose(),delete Am[this.id]}},e.prototype.resize=function(t){if(this._disposed)_m(this.id);else{this._zr.resize(t);var e=this._model;if(this._loadingFX&&this._loadingFX.resize(),e){var n=e.resetOption("media"),i=t&&t.silent;this.__optionUpdated&&(null==i&&(i=this.__optionUpdated.silent),n=!0,this.__optionUpdated=!1),this.__flagInMainProcess=!0,n&&Zv(this),Kv.update.call(this,{type:"resize",animation:I({duration:0},t&&t.animation)}),this.__flagInMainProcess=!1,tm.call(this,i),em.call(this,i)}}},e.prototype.showLoading=function(t,e){if(this._disposed)_m(this.id);else if(zv(t)&&(e=t,t=""),t=t||"default",this.hideLoading(),Dm[t]){var n=Dm[t](this._api,e),i=this._zr;this._loadingFX=n,i.add(n)}},e.prototype.hideLoading=function(){this._disposed?_m(this.id):(this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null)},e.prototype.makeActionFromEvent=function(t){var e=I({},t);return e.type=bm[t.type],e},e.prototype.dispatchAction=function(t,e){if(this._disposed)_m(this.id);else if(zv(e)||(e={silent:!!e}),xm[t.type]&&this._model)if(this.__flagInMainProcess)this._pendingActions.push(t);else{var n=e.silent;Qv.call(this,t,n);var i=e.flush;i?this._zr.flush():!1!==i&&a.browser.weChat&&this._throttledZrFlush(),tm.call(this,n),em.call(this,n)}},e.prototype.updateLabelLayout=function(){var t=this._labelManager;t.updateLayoutConfig(this._api),t.layout(this._api),t.processLabelsOverall()},e.prototype.appendData=function(t){if(this._disposed)_m(this.id);else{var e=t.seriesIndex,n=this.getModel().getSeriesByIndex(e);0,n.appendData(t),this._scheduler.unfinished=!0,this.getZr().wakeUp()}},e.internalField=function(){function t(t){for(var e=[],n=t.currentStates,i=0;i0?{duration:o,delay:i.get("delay"),easing:i.get("easing")}:null;n.group.traverse((function(e){if(e.states&&e.states.emphasis){if(Zu(e))return;if(e instanceof Ka&&function(t){var e=ws(t);e.normalFill=t.style.fill,e.normalStroke=t.style.stroke;var n=t.states.select||{};e.selectFill=n.style&&n.style.fill||null,e.selectStroke=n.style&&n.style.stroke||null}(e),e.__dirty){var n=e.prevStates;n&&e.useStates(n)}if(r){e.stateTransition=a;var i=e.getTextContent(),o=e.getTextGuideLine();i&&(i.stateTransition=a),o&&(o.stateTransition=a)}e.__dirty&&t(e)}}))}Zv=function(t){var e=t._scheduler;e.restorePipelines(t._model),e.prepareStageTasks(),jv(t,!0),jv(t,!1),e.plan()},jv=function(t,e){for(var n=t._model,i=t._scheduler,r=e?t._componentsViews:t._chartsViews,o=e?t._componentsMap:t._chartsMap,a=t._zr,s=t._api,l=0;le.get("hoverLayerThreshold")&&!a.node&&!a.worker&&e.eachSeries((function(e){if(!e.preventUsingHoverLayer){var n=t._chartsMap[e.__viewId];n.__alive&&n.group.traverse((function(t){t.states.emphasis&&(t.states.emphasis.hoverLayer=!0)}))}}))}(t,n)},lm=function(t,e){Rv(Im,(function(n){n(t,e)}))},pm=function(t){t.__needsUpdateStatus=!0,t.getZr().wakeUp()},dm=function(e){e.__needsUpdateStatus&&(e.getZr().storage.traverse((function(e){Zu(e)||t(e)})),e.__needsUpdateStatus=!1)},um=function(t){return new(function(e){function i(){return null!==e&&e.apply(this,arguments)||this}return n(i,e),i.prototype.getCoordinateSystems=function(){return t._coordSysMgr.getCoordinateSystems()},i.prototype.getComponentByElement=function(e){for(;e;){var n=e.__ecComponentInfo;if(null!=n)return t._model.getComponent(n.mainType,n.index);e=e.parent}},i.prototype.enterEmphasis=function(e,n){js(e,n),pm(t)},i.prototype.leaveEmphasis=function(e,n){qs(e,n),pm(t)},i.prototype.enterBlur=function(e){Ks(e),pm(t)},i.prototype.leaveBlur=function(e){$s(e),pm(t)},i.prototype.enterSelect=function(e){Js(e),pm(t)},i.prototype.leaveSelect=function(e){Qs(e),pm(t)},i.prototype.getModel=function(){return t.getModel()},i.prototype.getViewOfComponentModel=function(e){return t.getViewOfComponentModel(e)},i.prototype.getViewOfSeriesModel=function(e){return t.getViewOfSeriesModel(e)},i}(Cp))(t)},hm=function(t){function e(t,e){for(var n=0;n=0)){Ym.push(n);var o=Zf.wrapStageHandler(n,r);o.__prio=e,o.__raw=n,t.push(o)}}function jm(t,e){Dm[t]=e}function qm(t,e,n){Av(t,e,n)}var Km=function(t){var e=(t=w(t)).type,n="";e||vr(n);var i=e.split(":");2!==i.length&&vr(n);var r=!1;"echarts"===i[0]&&(e=i[1],r=!0),t.__isBuiltIn=r,Ud.set(e,t)};Xm(Bv,Hf),Xm(Fv,Uf),Xm(Fv,Xf),Xm(Bv,yg),Xm(Fv,{createOnAllSeries:!0,performRawSeries:!0,reset:function(t,e){if(t.hasSymbolVisual&&!e.isSeriesFiltered(t))return{dataEach:t.getData().hasItemOption?function(t,e){var n=t.getItemModel(e),i=n.getShallow("symbol",!0),r=n.getShallow("symbolSize",!0),o=n.getShallow("symbolRotate",!0),a=n.getShallow("symbolOffset",!0),s=n.getShallow("symbolKeepAspect",!0);null!=i&&t.setItemVisual(e,"symbol",i),null!=r&&t.setItemVisual(e,"symbolSize",r),null!=o&&t.setItemVisual(e,"symbolRotate",o),null!=a&&t.setItemVisual(e,"symbolOffset",a),null!=s&&t.setItemVisual(e,"symbolKeepAspect",s)}:null}}}),Xm(7e3,(function(t,e){t.eachRawSeries((function(n){if(!t.isSeriesFiltered(n)){var i=n.getData();i.hasItemVisual()&&i.each((function(t){var n=i.getItemVisual(t,"decal");n&&(i.ensureUniqueItemVisual(t,"style").decal=Ey(n,e))}));var r=i.getVisual("decal");if(r)i.getVisual("style").decal=Ey(r,e)}}))})),Vm(Jp),Bm(900,(function(t){var e=ht();t.eachSeries((function(t){var n=t.get("stack");if(n){var i=e.get(n)||e.set(n,[]),r=t.getData(),o={stackResultDimension:r.getCalculationInfo("stackResultDimension"),stackedOverDimension:r.getCalculationInfo("stackedOverDimension"),stackedDimension:r.getCalculationInfo("stackedDimension"),stackedByDimension:r.getCalculationInfo("stackedByDimension"),isStackedByIndex:r.getCalculationInfo("isStackedByIndex"),data:r,seriesModel:t};if(!o.stackedDimension||!o.isStackedByIndex&&!o.stackedByDimension)return;i.length&&r.setCalculationInfo("stackedOnSeries",i[i.length-1].seriesModel),i.push(o)}})),e.each(Qp)})),jm("default",(function(t,e){T(e=e||{},{text:"loading",textColor:"#000",fontSize:12,fontWeight:"normal",fontStyle:"normal",fontFamily:"sans-serif",maskColor:"rgba(255, 255, 255, 0.8)",showSpinner:!0,color:"#5470c6",spinnerRadius:10,lineWidth:5,zlevel:0});var n=new Ei,i=new ls({style:{fill:e.maskColor},zlevel:e.zlevel,z:1e4});n.add(i);var r,o=new cs({style:{text:e.text,fill:e.textColor,fontSize:e.fontSize,fontWeight:e.fontWeight,fontStyle:e.fontStyle,fontFamily:e.fontFamily},zlevel:e.zlevel,z:10001}),a=new ls({style:{fill:"none"},textContent:o,textConfig:{position:"right",distance:10},zlevel:e.zlevel,z:10001});return n.add(a),e.showSpinner&&((r=new gu({shape:{startAngle:-Yf/2,endAngle:-Yf/2+.1,r:e.spinnerRadius},style:{stroke:e.color,lineCap:"round",lineWidth:e.lineWidth},zlevel:e.zlevel,z:10001})).animateShape(!0).when(1e3,{endAngle:3*Yf/2}).start("circularInOut"),r.animateShape(!0).when(1e3,{startAngle:3*Yf/2}).delay(300).start("circularInOut"),n.add(r)),n.resize=function(){var n=o.getBoundingRect().width,s=e.showSpinner?e.spinnerRadius:0,l=(t.getWidth()-2*s-(e.showSpinner&&n?10:0)-n)/2-(e.showSpinner&&n?0:5+n/2)+(e.showSpinner?0:n/2)+(n?0:s),u=t.getHeight()/2;e.showSpinner&&r.setShape({cx:l,cy:u}),a.setShape({x:l-s,y:u-s,width:2*s,height:2*s}),i.setShape({x:0,y:0,width:t.getWidth(),height:t.getHeight()})},n.resize(),n})),Hm({type:Ts,event:Ts,update:Ts},ft),Hm({type:Cs,event:Cs,update:Cs},ft),Hm({type:Ds,event:Ds,update:Ds},ft),Hm({type:As,event:As,update:As},ft),Hm({type:Ls,event:Ls,update:Ls},ft),Em("light",ug),Em("dark",fg);var $m=[],Jm={registerPreprocessor:Vm,registerProcessor:Bm,registerPostInit:Fm,registerPostUpdate:Gm,registerAction:Hm,registerCoordinateSystem:Wm,registerLayout:Um,registerVisual:Xm,registerTransform:Km,registerLoading:jm,registerMap:qm,PRIORITY:Gv,ComponentModel:Xc,ComponentView:wf,SeriesModel:ff,ChartView:Tf,registerComponentModel:function(t){Xc.registerClass(t)},registerComponentView:function(t){wf.registerClass(t)},registerSeriesModel:function(t){ff.registerClass(t)},registerChartView:function(t){Tf.registerClass(t)},registerSubTypeDefaulter:function(t,e){Xc.registerSubTypeDefaulter(t,e)},registerPainter:function(t,e){Wi(t,e)}};function Qm(t){F(t)?P(t,(function(t){Qm(t)})):D($m,t)>=0||($m.push(t),G(t)&&(t={install:t}),t.install(Jm))}function t_(t){return null==t?0:t.length||1}function e_(t){return t}var n_=function(){function t(t,e,n,i,r,o){this._old=t,this._new=e,this._oldKeyGetter=n||e_,this._newKeyGetter=i||e_,this.context=r,this._diffModeMultiple="multiple"===o}return t.prototype.add=function(t){return this._add=t,this},t.prototype.update=function(t){return this._update=t,this},t.prototype.updateManyToOne=function(t){return this._updateManyToOne=t,this},t.prototype.updateOneToMany=function(t){return this._updateOneToMany=t,this},t.prototype.remove=function(t){return this._remove=t,this},t.prototype.execute=function(){this[this._diffModeMultiple?"_executeMultiple":"_executeOneToOne"]()},t.prototype._executeOneToOne=function(){var t=this._old,e=this._new,n={},i=new Array(t.length),r=new Array(e.length);this._initIndexMap(t,null,i,"_oldKeyGetter"),this._initIndexMap(e,n,r,"_newKeyGetter");for(var o=0;o1){var u=s.shift();1===s.length&&(n[a]=s[0]),this._update&&this._update(u,o)}else 1===l?(n[a]=null,this._update&&this._update(s,o)):this._remove&&this._remove(o)}this._performRestAdd(r,n)},t.prototype._executeMultiple=function(){var t=this._old,e=this._new,n={},i={},r=[],o=[];this._initIndexMap(t,n,r,"_oldKeyGetter"),this._initIndexMap(e,i,o,"_newKeyGetter");for(var a=0;a1&&1===c)this._updateManyToOne&&this._updateManyToOne(u,l),i[s]=null;else if(1===h&&c>1)this._updateOneToMany&&this._updateOneToMany(u,l),i[s]=null;else if(1===h&&1===c)this._update&&this._update(u,l),i[s]=null;else if(h>1)for(var p=0;p1)for(var a=0;av[1]&&(v[1]=y)}e&&(this._nameList[d]=e[f],this._dontMakeIdFromName||d_(this,d))}this._rawCount=this._count=s,this._extent={},a_(this)},t.prototype._initDataFromProvider=function(t,e,n){if(!(t>=e)){for(var i=this._rawData,r=this._storage,o=this.dimensions,a=o.length,s=this._dimensionInfos,l=this._nameList,u=this._idList,h=this._rawExtent,c=i.getSource().sourceFormat===Kc,p=0;pb[1]&&(b[1]=x)}if(c&&!i.pure&&y){var w=y.name;null==l[v]&&null!=w&&(l[v]=Cr(w,null));var S=y.id;null==u[v]&&null!=S&&(u[v]=Cr(S,null))}this._dontMakeIdFromName||d_(this,v)}!i.persistent&&i.clean&&i.clean(),this._rawCount=this._count=e,this._extent={},a_(this)}},t.prototype.count=function(){return this._count},t.prototype.getIndices=function(){var t,e=this._indices;if(e){var n=e.constructor,i=this._count;if(n===Array){t=new n(i);for(var r=0;r=0&&e=0&&e=0&&ea&&(a=l)}return i=[o,a],this._extent[t]=i,i},t.prototype.getApproximateExtent=function(t){return t=this.getDimension(t),this._approximateExtent[t]||this.getDataExtent(t)},t.prototype.setApproximateExtent=function(t,e){e=this.getDimension(e),this._approximateExtent[e]=t.slice()},t.prototype.getCalculationInfo=function(t){return this._calculationInfo[t]},t.prototype.setCalculationInfo=function(t,e){b_(t)?I(this._calculationInfo,t):this._calculationInfo[t]=e},t.prototype.getSum=function(t){var e=0;if(this._storage[t])for(var n=0,i=this.count();n=this._rawCount||t<0)return-1;if(!this._indices)return t;var e=this._indices,n=e[t];if(null!=n&&nt))return o;r=o-1}}return-1},t.prototype.indicesOfNearest=function(t,e,n){var i=this._storage[t],r=[];if(!i)return r;null==n&&(n=1/0);for(var o=1/0,a=-1,s=0,l=0,u=this.count();l=0&&a<0)&&(o=c,a=h,s=0),h===a&&(r[s++]=l))}return r.length=s,r},t.prototype.getRawDataItem=function(t){if(this._rawData.persistent)return this._rawData.getItem(this.getRawIndex(t));for(var e=[],n=0;n=c&&b<=p||isNaN(b))&&(s[l++]=g),g++}f=!0}else if(2===o){y=d[h[0]];var m=d[h[1]],_=t[i[1]][0],x=t[i[1]][1];for(v=0;v=c&&b<=p||isNaN(b))&&(w>=_&&w<=x||isNaN(w))&&(s[l++]=g),g++}f=!0}}if(!f)if(1===o)for(v=0;v=c&&b<=p||isNaN(b))&&(s[l++]=S)}else for(v=0;vt[T][1])&&(M=!1)}M&&(s[l++]=this.getRawIndex(v))}return lx[1]&&(x[1]=_)}}}return a},t.prototype.downSample=function(t,e,n,i){for(var r=g_(this,[t]),o=r._storage,a=[],s=x_(1/e),l=o[t],u=this.count(),h=r._rawExtent[t],c=new(s_(this))(u),p=0,d=0;du-d&&(s=u-d,a.length=s);for(var f=0;fh[1]&&(h[1]=y),c[p++]=v}return r._count=p,r._indices=c,r.getRawIndex=h_,r},t.prototype.lttbDownSample=function(t,e){var n,i,r,o=g_(this,[]),a=o._storage[t],s=this.count(),l=new(s_(this))(s),u=0,h=x_(1/e),c=this.getRawIndex(0);l[u++]=c;for(var p=1;pn&&(n=i,r=S)}l[u++]=r,c=r}return l[u++]=this.getRawIndex(s-1),o._count=u,o._indices=l,o.getRawIndex=h_,o},t.prototype.getItemModel=function(t){var e=this.hostModel,n=this.getRawDataItem(t);return new Oh(n,e,e&&e.ecModel)},t.prototype.diff=function(t){var e=this;return new n_(t?t.getIndices():[],this.getIndices(),(function(e){return c_(t,e)}),(function(t){return c_(e,t)}))},t.prototype.getVisual=function(t){var e=this._visual;return e&&e[t]},t.prototype.setVisual=function(t,e){this._visual=this._visual||{},b_(t)?I(this._visual,t):this._visual[t]=e},t.prototype.getItemVisual=function(t,e){var n=this._itemVisuals[t],i=n&&n[e];return null==i?this.getVisual(e):i},t.prototype.hasItemVisual=function(){return this._itemVisuals.length>0},t.prototype.ensureUniqueItemVisual=function(t,e){var n=this._itemVisuals,i=n[t];i||(i=n[t]={});var r=i[e];return null==r&&(F(r=this.getVisual(e))?r=r.slice():b_(r)&&(r=I({},r)),i[e]=r),r},t.prototype.setItemVisual=function(t,e,n){var i=this._itemVisuals[t]||{};this._itemVisuals[t]=i,b_(e)?I(i,e):i[e]=n},t.prototype.clearAllVisual=function(){this._visual={},this._itemVisuals=[]},t.prototype.setLayout=function(t,e){if(b_(t))for(var n in t)t.hasOwnProperty(n)&&this.setLayout(n,t[n]);else this._layout[t]=e},t.prototype.getLayout=function(t){return this._layout[t]},t.prototype.getItemLayout=function(t){return this._itemLayouts[t]},t.prototype.setItemLayout=function(t,e,n){this._itemLayouts[t]=n?I(this._itemLayouts[t]||{},e):e},t.prototype.clearItemLayouts=function(){this._itemLayouts.length=0},t.prototype.setItemGraphicEl=function(t,e){var n=this.hostModel;if(e){var i=_s(e);i.dataIndex=t,i.dataType=this.dataType,i.seriesIndex=n&&n.seriesIndex,"group"===e.type&&e.traverse(v_,e)}this._graphicEls[t]=e},t.prototype.getItemGraphicEl=function(t){return this._graphicEls[t]},t.prototype.eachItemGraphicEl=function(t,e){P(this._graphicEls,(function(n,i){n&&t&&t.call(e,n,i)}))},t.prototype.cloneShallow=function(e){e||(e=new t(w_(this.dimensions,this.getDimensionInfo,this),this.hostModel));if(e._storage=this._storage,e._storageArr=this._storageArr,m_(e,this),this._indices){var n=this._indices.constructor;if(n===Array){var i=this._indices.length;e._indices=new n(i);for(var r=0;r65535?I_:C_},l_=function(t,e,n,i){var r=M_[e.type],o=e.name;if(i){var a=t[o],s=a&&a.length;if(s!==n){for(var l=new r(n),u=0;u=0?this._indices[t]:-1},c_=function(t,e){var n=t._idList[e];return null==n&&null!=t._idDimIdx&&(n=p_(t,t._idDimIdx,t._idOrdinalMeta,e)),null==n&&(n="e\0\0"+e),n},f_=function(t){return F(t)||(t=null!=t?[t]:[]),t},function(t,e){for(var n=0;n=0?(s[c]=(o=l[c],a=void 0,(a=o.constructor)===Array?o.slice():new a(o)),r._rawExtent[c]=y_(),r._extent[c]=null):s[c]=l[c],u.push(s[c]))}return r},y_=function(){return[1/0,-1/0]},v_=function(t){var e=_s(t),n=_s(this);e.seriesIndex=n.seriesIndex,e.dataIndex=n.dataIndex,e.dataType=n.dataType},m_=function(t,e){P(D_.concat(e.__wrappedMethods||[]),(function(n){e.hasOwnProperty(n)&&(t[n]=e[n])})),t.__wrappedMethods=e.__wrappedMethods,P(A_,(function(n){t[n]=w(e[n])})),t._calculationInfo=I({},e._calculationInfo)},d_=function(t,e){var n=t._nameList,i=t._idList,r=t._nameDimIdx,o=t._idDimIdx,a=n[e],s=i[e];if(null==a&&null!=r&&(n[e]=a=p_(t,r,t._nameOrdinalMeta,e)),null==s&&null!=o&&(i[e]=s=p_(t,o,t._idOrdinalMeta,e)),null==s&&null!=a){var l=t._nameRepeatCount,u=l[a]=(l[a]||0)+1;s=a,u>1&&(s+="__ec__"+u),i[e]=s}}}(),t}();function k_(t,e,n){ad(e)||(e=ld(e)),n=n||{},t=(t||[]).slice();for(var i=(n.dimsDef||[]).slice(),r=ht(),o=ht(),a=[],s=function(t,e,n,i){var r=Math.max(t.dimensionsDetectedCount||1,e.length,n.length,i||0);return P(e,(function(t){var e;X(t)&&(e=t.dimsDef)&&(r=Math.max(r,e.length))})),r}(e,t,i,n.dimCount),l=0;le[1]&&(e[1]=t[1])},t.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},t.prototype.getExtent=function(){return this._extent.slice()},t.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=t),isNaN(e)||(n[1]=e)},t.prototype.isInExtentRange=function(t){return this._extent[0]<=t&&this._extent[1]>=t},t.prototype.isBlank=function(){return this._isBlank},t.prototype.setBlank=function(t){this._isBlank=t},t}();Kr(G_);var H_=function(){function t(t){this.categories=t.categories||[],this._needCollect=t.needCollect,this._deduplication=t.deduplication}return t.createByAxisModel=function(e){var n=e.option,i=n.data,r=i&&O(i,W_);return new t({categories:r,needCollect:!r,deduplication:!1!==n.dedplication})},t.prototype.getOrdinal=function(t){return this._getOrCreateMap().get(t)},t.prototype.parseAndCollect=function(t){var e,n=this._needCollect;if("string"!=typeof t&&!n)return t;if(n&&!this._deduplication)return e=this.categories.length,this.categories[e]=t,e;var i=this._getOrCreateMap();return null==(e=i.get(t))&&(n?(e=this.categories.length,this.categories[e]=t,i.set(t,e)):e=NaN),e},t.prototype._getOrCreateMap=function(){return this._map||(this._map=ht(this.categories))},t}();function W_(t){return X(t)&&null!=t.value?t.value:t+""}var U_=ji;function X_(t,e,n,i){var r={},o=t[1]-t[0],a=r.interval=lr(o/e,!0);null!=n&&ai&&(a=r.interval=i);var s=r.intervalPrecision=Y_(a);return function(t,e){!isFinite(t[0])&&(t[0]=e[0]),!isFinite(t[1])&&(t[1]=e[1]),Z_(t,0,e),Z_(t,1,e),t[0]>t[1]&&(t[0]=t[1])}(r.niceTickExtent=[U_(Math.ceil(t[0]/a)*a,s),U_(Math.floor(t[1]/a)*a,s)],t),r}function Y_(t){return Ki(t)+2}function Z_(t,e,n){t[e]=Math.max(Math.min(t[e],n[1]),n[0])}function j_(t,e){return t>=e[0]&&t<=e[1]}function q_(t,e){return e[1]===e[0]?.5:(t-e[0])/(e[1]-e[0])}function K_(t,e){return t*(e[1]-e[0])+e[0]}var $_=function(t){function e(e){var n=t.call(this,e)||this;n.type="ordinal";var i=n.getSetting("ordinalMeta");return i||(i=new H_({})),F(i)&&(i=new H_({categories:O(i,(function(t){return X(t)?t.value:t}))})),n._ordinalMeta=i,n._extent=n.getSetting("extent")||[0,i.categories.length-1],n}return n(e,t),e.prototype.parse=function(t){return"string"==typeof t?this._ordinalMeta.getOrdinal(t):Math.round(t)},e.prototype.contain=function(t){return j_(t=this.parse(t),this._extent)&&null!=this._ordinalMeta.categories[t]},e.prototype.normalize=function(t){return q_(t=this._getTickNumber(this.parse(t)),this._extent)},e.prototype.scale=function(t){return t=Math.round(K_(t,this._extent)),this.getRawOrdinalNumber(t)},e.prototype.getTicks=function(){for(var t=[],e=this._extent,n=e[0];n<=e[1];)t.push({value:n}),n++;return t},e.prototype.getMinorTicks=function(t){},e.prototype.setSortInfo=function(t){if(null!=t){for(var e=t.ordinalNumbers,n=this._ordinalNumbersByTick=[],i=this._ticksByOrdinalNumber=[],r=0,o=this._ordinalMeta.categories.length,a=Math.min(o,e.length);r=0&&t=0&&t=t},e.prototype.getOrdinalMeta=function(){return this._ordinalMeta},e.prototype.niceTicks=function(){},e.prototype.niceExtent=function(){},e.type="ordinal",e}(G_);G_.registerClass($_);var J_=ji,Q_=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="interval",e._interval=0,e._intervalPrecision=2,e}return n(e,t),e.prototype.parse=function(t){return t},e.prototype.contain=function(t){return j_(t,this._extent)},e.prototype.normalize=function(t){return q_(t,this._extent)},e.prototype.scale=function(t){return K_(t,this._extent)},e.prototype.setExtent=function(t,e){var n=this._extent;isNaN(t)||(n[0]=parseFloat(t)),isNaN(e)||(n[1]=parseFloat(e))},e.prototype.unionExtent=function(t){var e=this._extent;t[0]e[1]&&(e[1]=t[1]),this.setExtent(e[0],e[1])},e.prototype.getInterval=function(){return this._interval},e.prototype.setInterval=function(t){this._interval=t,this._niceExtent=this._extent.slice(),this._intervalPrecision=Y_(t)},e.prototype.getTicks=function(t){var e=this._interval,n=this._extent,i=this._niceExtent,r=this._intervalPrecision,o=[];if(!e)return o;n[0]1e4)return[];var s=o.length?o[o.length-1].value:i[1];return n[1]>s&&(t?o.push({value:J_(s+e,r)}):o.push({value:n[1]})),o},e.prototype.getMinorTicks=function(t){for(var e=this.getTicks(!0),n=[],i=this.getExtent(),r=1;ri[0]&&h0&&(o=null===o?s:Math.min(o,s))}n[i]=o}}return n}(t),n=[];return P(t,(function(t){var i,r=t.coordinateSystem.getBaseAxis(),o=r.getExtent();if("category"===r.type)i=r.getBandWidth();else if("value"===r.type||"time"===r.type){var a=r.dim+"_"+r.index,s=e[a],l=Math.abs(o[1]-o[0]),u=r.scale.getExtent(),h=Math.abs(u[1]-u[0]);i=s?l/h*s:l}else{var c=t.getData();i=Math.abs(o[1]-o[0])/c.count()}var p=Zi(t.get("barWidth"),i),d=Zi(t.get("barMaxWidth"),i),f=Zi(t.get("barMinWidth")||1,i),g=t.get("barGap"),y=t.get("barCategoryGap");n.push({bandWidth:i,barWidth:p,barMaxWidth:d,barMinWidth:f,barGap:g,barCategoryGap:y,axisKey:ix(r),stackId:nx(t)})})),ax(n)}function ax(t){var e={};P(t,(function(t,n){var i=t.axisKey,r=t.bandWidth,o=e[i]||{bandWidth:r,remainedWidth:r,autoWidthCount:0,categoryGap:null,gap:"20%",stacks:{}},a=o.stacks;e[i]=o;var s=t.stackId;a[s]||o.autoWidthCount++,a[s]=a[s]||{width:0,maxWidth:0};var l=t.barWidth;l&&!a[s].width&&(a[s].width=l,l=Math.min(o.remainedWidth,l),o.remainedWidth-=l);var u=t.barMaxWidth;u&&(a[s].maxWidth=u);var h=t.barMinWidth;h&&(a[s].minWidth=h);var c=t.barGap;null!=c&&(o.gap=c);var p=t.barCategoryGap;null!=p&&(o.categoryGap=p)}));var n={};return P(e,(function(t,e){n[e]={};var i=t.stacks,r=t.bandWidth,o=t.categoryGap;if(null==o){var a=E(i).length;o=Math.max(35-4*a,15)+"%"}var s=Zi(o,r),l=Zi(t.gap,1),u=t.remainedWidth,h=t.autoWidthCount,c=(u-s)/(h+(h-1)*l);c=Math.max(c,0),P(i,(function(t){var e=t.maxWidth,n=t.minWidth;if(t.width){i=t.width;e&&(i=Math.min(i,e)),n&&(i=Math.max(i,n)),t.width=i,u-=i+l*i,h--}else{var i=c;e&&ei&&(i=n),i!==c&&(t.width=i,u-=i+l*i,h--)}})),c=(u-s)/(h+(h-1)*l),c=Math.max(c,0);var p,d=0;P(i,(function(t,e){t.width||(t.width=c),p=t,d+=t.width*(1+l)})),p&&(d-=p.width*l);var f=-d/2;P(i,(function(t,i){n[e][i]=n[e][i]||{bandWidth:r,offset:f,width:t.width},f+=t.width*(1+l)}))})),n}function sx(t,e,n){if(t&&e){var i=t[ix(e)];return null!=i&&null!=n?i[nx(n)]:i}}function lx(t,e){var n=rx(t,e),i=ox(n),r={};P(n,(function(t){var e=t.getData(),n=t.coordinateSystem,o=n.getBaseAxis(),a=nx(t),s=i[ix(o)][a],l=s.offset,u=s.width,h=n.getOtherAxis(o),c=t.get("barMinHeight")||0;r[a]=r[a]||[],e.setLayout({bandWidth:s.bandWidth,offset:l,size:u});for(var p=e.mapDimension(h.dim),d=e.mapDimension(o.dim),f=V_(e,p),g=h.isHorizontal(),y=px(o,h),v=0,m=e.count();v=0?"p":"n",w=y;f&&(r[a][x]||(r[a][x]={p:y,n:y}),w=r[a][x][b]);var S,M=void 0,I=void 0,T=void 0,C=void 0;if(g)M=w,I=(S=n.dataToPoint([_,x]))[1]+l,T=S[0]-y,C=u,Math.abs(T).5||(h=.5),{progress:function(t,e){for(var c,p=t.count,d=new ex(2*p),f=new ex(2*p),g=new ex(p),y=[],v=[],m=0,_=0;null!=(c=t.next());)v[u]=e.get(a,c),v[1-u]=e.get(s,c),y=n.dataToPoint(v,null),f[m]=l?i.x+i.width:y[0],d[m++]=y[0],f[m]=l?y[1]:i.y+i.height,d[m++]=y[1],g[_++]=c;e.setLayout({largePoints:d,largeDataIndices:g,largeBackgroundPoints:f,barWidth:h,valueAxisStart:px(r,o),backgroundStart:l?i.x:i.y,valueAxisHorizontal:l})}}}}};function hx(t){return t.coordinateSystem&&"cartesian2d"===t.coordinateSystem.type}function cx(t){return t.pipelineContext&&t.pipelineContext.large}function px(t,e,n){return e.toGlobalCoord(e.dataToCoord("log"===e.type?1:0))}var dx=function(t){function e(e){var n=t.call(this,e)||this;return n.type="time",n}return n(e,t),e.prototype.getLabel=function(t){var e=this.getSetting("useUTC");return ic(t.value,$h[function(t){switch(t){case"year":case"month":return"day";case"millisecond":return"millisecond";default:return"second"}}(ec(this._minLevelUnit))]||$h.second,e,this.getSetting("locale"))},e.prototype.getFormattedLabel=function(t,e,n){var i=this.getSetting("useUTC");return function(t,e,n,i,r){var o=null;if("string"==typeof n)o=n;else if("function"==typeof n)o=n(t.value,e,{level:t.level});else{var a=I({},qh);if(t.level>0)for(var s=0;s=0;--s)if(l[u]){o=l[u];break}o=o||a.none}if(F(o)){var h=null==t.level?0:t.level>=0?t.level:o.length+t.level;o=o[h=Math.min(h,o.length-1)]}}return ic(new Date(t.value),o,r,i)}(t,e,n,this.getSetting("locale"),i)},e.prototype.getTicks=function(t){var e=this._interval,n=this._extent,i=[];if(!e)return i;i.push({value:n[0],level:0});var r=this.getSetting("useUTC"),o=function(t,e,n,i){var r=1e4,o=Qh,a=0;function s(t,e,n,r,o,a,s){for(var l=new Date(e),u=e,h=l[r]();u1&&0===u&&o.unshift({value:o[0].value-p})}}for(u=0;u=i[0]&&v<=i[1]&&c++)}var m=(i[1]-i[0])/e;if(c>1.5*m&&p>m/1.5)break;if(u.push(g),c>m||t===o[d])break}h=[]}}0;var _=N(O(u,(function(t){return N(t,(function(t){return t.value>=i[0]&&t.value<=i[1]&&!t.notAdd}))})),(function(t){return t.length>0})),x=[],b=_.length-1;for(d=0;d<_.length;++d)for(var w=_[d],S=0;Sn&&(this._approxInterval=n);var o=fx.length,a=Math.min(function(t,e,n,i){for(;n>>1;t[r][1]16?16:t>7.5?7:t>3.5?4:t>1.5?2:1}function yx(t){return(t/=2592e6)>6?6:t>3?3:t>2?2:1}function vx(t){return(t/=Yh)>12?12:t>6?6:t>3.5?4:t>2?2:1}function mx(t,e){return(t/=e?Xh:Uh)>30?30:t>20?20:t>15?15:t>10?10:t>5?5:t>2?2:1}function _x(t){return lr(t,!0)}function xx(t,e,n){var i=new Date(t);switch(ec(e)){case"year":case"month":i[fc(n)](0);case"day":i[gc(n)](1);case"hour":i[yc(n)](0);case"minute":i[vc(n)](0);case"second":i[mc(n)](0),i[_c(n)](0)}return i.getTime()}G_.registerClass(dx);var bx=G_.prototype,Sx=Q_.prototype,Mx=ji,Ix=Math.floor,Tx=Math.ceil,Cx=Math.pow,Dx=Math.log,Ax=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="log",e.base=10,e._originalScale=new Q_,e._interval=0,e}return n(e,t),e.prototype.getTicks=function(t){var e=this._originalScale,n=this._extent,i=e.getExtent();return O(Sx.getTicks.call(this,t),(function(t){var e=t.value,r=ji(Cx(this.base,e));return r=e===n[0]&&this._fixMin?kx(r,i[0]):r,{value:r=e===n[1]&&this._fixMax?kx(r,i[1]):r}}),this)},e.prototype.setExtent=function(t,e){var n=this.base;t=Dx(t)/Dx(n),e=Dx(e)/Dx(n),Sx.setExtent.call(this,t,e)},e.prototype.getExtent=function(){var t=this.base,e=bx.getExtent.call(this);e[0]=Cx(t,e[0]),e[1]=Cx(t,e[1]);var n=this._originalScale.getExtent();return this._fixMin&&(e[0]=kx(e[0],n[0])),this._fixMax&&(e[1]=kx(e[1],n[1])),e},e.prototype.unionExtent=function(t){this._originalScale.unionExtent(t);var e=this.base;t[0]=Dx(t[0])/Dx(e),t[1]=Dx(t[1])/Dx(e),bx.unionExtent.call(this,t)},e.prototype.unionExtentFromData=function(t,e){this.unionExtent(t.getApproximateExtent(e))},e.prototype.niceTicks=function(t){t=t||10;var e=this._extent,n=e[1]-e[0];if(!(n===1/0||n<=0)){var i=ar(n);for(t/n*i<=.5&&(i*=10);!isNaN(i)&&Math.abs(i)<1&&Math.abs(i)>0;)i*=10;var r=[ji(Tx(e[0]/i)*i),ji(Ix(e[1]/i)*i)];this._interval=i,this._niceExtent=r}},e.prototype.niceExtent=function(t){Sx.niceExtent.call(this,t),this._fixMin=t.fixMin,this._fixMax=t.fixMax},e.prototype.parse=function(t){return t},e.prototype.contain=function(t){return j_(t=Dx(t)/Dx(this.base),this._extent)},e.prototype.normalize=function(t){return q_(t=Dx(t)/Dx(this.base),this._extent)},e.prototype.scale=function(t){return t=K_(t,this._extent),Cx(this.base,t)},e.type="log",e}(G_),Lx=Ax.prototype;function kx(t,e){return Mx(t,Ki(e))}Lx.getMinorTicks=Sx.getMinorTicks,Lx.getLabel=Sx.getLabel,G_.registerClass(Ax);var Px=function(){function t(t,e,n){this._prepareParams(t,e,n)}return t.prototype._prepareParams=function(t,e,n){n[1]s&&(a=NaN,s=NaN);var h=J(a)||J(s)||t&&!i;this._needCrossZero&&(a>0&&s>0&&!l&&(a=0),a<0&&s<0&&!u&&(s=0));var c=this._determinedMin,p=this._determinedMax;return null!=c&&(a=c,l=!0),null!=p&&(s=p,u=!0),{min:a,max:s,minFixed:l,maxFixed:u,isBlank:h}},t.prototype.modifyDataMinMax=function(t,e){this[Rx[t]]=e},t.prototype.setDeterminedMinMax=function(t,e){var n=Ox[t];this[n]=e},t.prototype.freeze=function(){this.frozen=!0},t}(),Ox={min:"_determinedMin",max:"_determinedMax"},Rx={min:"_dataMin",max:"_dataMax"};function Nx(t,e,n){var i=t.rawExtentInfo;return i||(i=new Px(t,e,n),t.rawExtentInfo=i,i)}function zx(t,e){return null==e?null:J(e)?NaN:t.parse(e)}function Ex(t,e){var n=t.type,i=Nx(t,e,t.getExtent()).calculate();t.setBlank(i.isBlank);var r=i.min,o=i.max,a=e.ecModel;if(a&&"time"===n){var s=rx("bar",a),l=!1;if(P(s,(function(t){l=l||t.getBaseAxis()===e.axis})),l){var u=ox(s),h=function(t,e,n,i){var r=n.axis.getExtent(),o=r[1]-r[0],a=sx(i,n.axis);if(void 0===a)return{min:t,max:e};var s=1/0;P(a,(function(t){s=Math.min(t.offset,s)}));var l=-1/0;P(a,(function(t){l=Math.max(t.offset+t.width,l)})),s=Math.abs(s),l=Math.abs(l);var u=s+l,h=e-t,c=h/(1-(s+l)/o)-h;return{min:t-=c*(s/u),max:e+=c*(l/u)}}(r,o,e,u);r=h.min,o=h.max}}return{extent:[r,o],fixMin:i.minFixed,fixMax:i.maxFixed}}function Vx(t,e){var n=Ex(t,e),i=n.extent,r=e.get("splitNumber");t instanceof Ax&&(t.base=e.get("logBase"));var o=t.type;t.setExtent(i[0],i[1]),t.niceExtent({splitNumber:r,fixMin:n.fixMin,fixMax:n.fixMax,minInterval:"interval"===o||"time"===o?e.get("minInterval"):null,maxInterval:"interval"===o||"time"===o?e.get("maxInterval"):null});var a=e.get("interval");null!=a&&t.setInterval&&t.setInterval(a)}function Bx(t,e){if(e=e||t.get("type"))switch(e){case"category":return new $_({ordinalMeta:t.getOrdinalMeta?t.getOrdinalMeta():t.getCategories(),extent:[1/0,-1/0]});case"time":return new dx({locale:t.ecModel.getLocaleModel(),useUTC:t.ecModel.get("useUTC")});default:return new(G_.getClass(e)||Q_)}}function Fx(t){var e,n,i=t.getLabelModel().get("formatter"),r="category"===t.type?t.scale.getExtent()[0]:null;return"time"===t.scale.type?(n=i,function(e,i){return t.scale.getFormattedLabel(e,i,n)}):"string"==typeof i?function(e){return function(n){var i=t.scale.getLabel(n);return e.replace("{value}",null!=i?i:"")}}(i):"function"==typeof i?(e=i,function(n,i){return null!=r&&(i=n.value-r),e(Gx(t,n),i,null!=n.level?{level:n.level}:null)}):function(e){return t.scale.getLabel(e)}}function Gx(t,e){return"category"===t.type?t.scale.getLabel(e):e.value}function Hx(t,e){var n=e*Math.PI/180,i=t.width,r=t.height,o=i*Math.abs(Math.cos(n))+Math.abs(r*Math.sin(n)),a=i*Math.abs(Math.sin(n))+Math.abs(r*Math.cos(n));return new gi(t.x,t.y,o,a)}function Wx(t){var e=t.get("interval");return null==e?"auto":e}function Ux(t){return"category"===t.type&&0===Wx(t.getLabelModel())}function Xx(t,e){var n={};return P(t.mapDimensionsAll(e),(function(e){n[B_(t,e)]=!0})),E(n)}var Yx=function(){function t(){}return t.prototype.getNeedCrossZero=function(){return!this.option.scale},t.prototype.getCoordSysModel=function(){},t}();var Zx={isDimensionStacked:V_,enableDataStack:E_,getStackedDimension:B_};var jx=Object.freeze({__proto__:null,createList:function(t){return F_(t.getSource(),t)},getLayoutRect:Vc,dataStack:Zx,createScale:function(t,e){var n=e;e instanceof Oh||(n=new Oh(e));var i=Bx(n);return i.setExtent(t[0],t[1]),Vx(i,n),i},mixinAxisModelCommonMethods:function(t){L(t,Yx)},getECData:_s,createTextStyle:function(t,e){return ph(t,null,null,"normal"!==(e=e||{}).state)},createDimensions:O_,createSymbol:fy,enableHoverEmphasis:sl}),qx=Object.freeze({__proto__:null,linearMap:Yi,round:ji,asc:qi,getPrecision:Ki,getPrecisionSafe:$i,getPixelPrecision:Ji,getPercentWithPrecision:Qi,MAX_SAFE_INTEGER:er,remRadian:nr,isRadianAroundZero:ir,parseDate:or,quantity:ar,quantityExponent:sr,nice:lr,quantile:ur,reformIntervals:hr,isNumeric:pr,numericToNumber:cr}),Kx=Object.freeze({__proto__:null,parse:or,format:ic}),$x=Object.freeze({__proto__:null,extendShape:Lu,extendPath:Pu,makePath:Nu,makeImage:zu,mergePath:Vu,resizePath:Bu,createIcon:eh,updateProps:Hu,initProps:Wu,getTransform:ju,clipPointsByRect:Qu,clipRectByRect:th,registerShape:Ou,getShapeClass:Ru,Group:Ei,Image:es,Text:cs,Circle:Nl,Ellipse:El,Sector:Jl,Ring:tu,Polygon:ru,Polyline:au,Rect:ls,Line:uu,BezierCurve:du,Arc:gu,IncrementalDisplayable:Tu,CompoundPath:yu,LinearGradient:mu,RadialGradient:_u,BoundingRect:gi}),Jx=Object.freeze({__proto__:null,addCommas:xc,toCamelCase:bc,normalizeCssArray:wc,encodeHTML:Ic,formatTpl:Ac,getTooltipMarker:Lc,formatTime:function(t,e,n){"week"!==t&&"month"!==t&&"quarter"!==t&&"half-year"!==t&&"year"!==t||(t="MM-dd\nyyyy");var i=or(e),r=n?"UTC":"",o=i["get"+r+"FullYear"](),a=i["get"+r+"Month"]()+1,s=i["get"+r+"Date"](),l=i["get"+r+"Hours"](),u=i["get"+r+"Minutes"](),h=i["get"+r+"Seconds"](),c=i["get"+r+"Milliseconds"]();return t=t.replace("MM",tc(a,2)).replace("M",a).replace("yyyy",o).replace("yy",o%100+"").replace("dd",tc(s,2)).replace("d",s).replace("hh",tc(l,2)).replace("h",l).replace("mm",tc(u,2)).replace("m",u).replace("ss",tc(h,2)).replace("s",h).replace("SSS",tc(c,3))},capitalFirst:function(t){return t?t.charAt(0).toUpperCase()+t.substr(1):t},truncateText:ao,getTextRect:function(t,e,n,i,r,o,a,s){return yr(),new cs({style:{text:t,font:e,align:n,verticalAlign:i,padding:r,rich:o,overflow:a?"truncate":null,lineHeight:s}}).getBoundingRect()}}),Qx=Object.freeze({__proto__:null,map:O,each:P,indexOf:D,inherits:A,reduce:R,filter:N,bind:V,curry:B,isArray:F,isString:H,isObject:X,isFunction:G,extend:I,defaults:T,clone:w,merge:S}),tb=kr();function eb(t){return"category"===t.type?function(t){var e=t.getLabelModel(),n=ib(t,e);return!e.get("show")||t.scale.isBlank()?{labels:[],labelCategoryInterval:n.labelCategoryInterval}:n}(t):function(t){var e=t.scale.getTicks(),n=Fx(t);return{labels:O(e,(function(e,i){return{formattedLabel:n(e,i),rawLabel:t.scale.getLabel(e),tickValue:e.value}}))}}(t)}function nb(t,e){return"category"===t.type?function(t,e){var n,i,r=rb(t,"ticks"),o=Wx(e),a=ob(r,o);if(a)return a;e.get("show")&&!t.scale.isBlank()||(n=[]);if(G(o))n=lb(t,o,!0);else if("auto"===o){var s=ib(t,t.getLabelModel());i=s.labelCategoryInterval,n=O(s.labels,(function(t){return t.tickValue}))}else n=sb(t,i=o,!0);return ab(r,o,{ticks:n,tickCategoryInterval:i})}(t,e):{ticks:O(t.scale.getTicks(),(function(t){return t.value}))}}function ib(t,e){var n,i,r=rb(t,"labels"),o=Wx(e),a=ob(r,o);return a||(G(o)?n=lb(t,o):(i="auto"===o?function(t){var e=tb(t).autoInterval;return null!=e?e:tb(t).autoInterval=t.calculateCategoryInterval()}(t):o,n=sb(t,i)),ab(r,o,{labels:n,labelCategoryInterval:i}))}function rb(t,e){return tb(t)[e]||(tb(t)[e]=[])}function ob(t,e){for(var n=0;n1&&h/l>2&&(u=Math.round(Math.ceil(u/l)*l));var c=Ux(t),p=a.get("showMinLabel")||c,d=a.get("showMaxLabel")||c;p&&u!==o[0]&&g(o[0]);for(var f=u;f<=o[1];f+=l)g(f);function g(t){var e={value:t};s.push(n?t:{formattedLabel:i(e),rawLabel:r.getLabel(e),tickValue:t})}return d&&f-l!==o[1]&&g(o[1]),s}function lb(t,e,n){var i=t.scale,r=Fx(t),o=[];return P(i.getTicks(),(function(t){var a=i.getLabel(t),s=t.value;e(t.value,a)&&o.push(n?s:{formattedLabel:r(t),rawLabel:a,tickValue:s})})),o}var ub=[0,1],hb=function(){function t(t,e,n){this.onBand=!1,this.inverse=!1,this.dim=t,this.scale=e,this._extent=n||[0,0]}return t.prototype.contain=function(t){var e=this._extent,n=Math.min(e[0],e[1]),i=Math.max(e[0],e[1]);return t>=n&&t<=i},t.prototype.containData=function(t){return this.scale.contain(t)},t.prototype.getExtent=function(){return this._extent.slice()},t.prototype.getPixelPrecision=function(t){return Ji(t||this.scale.getExtent(),this._extent)},t.prototype.setExtent=function(t,e){var n=this._extent;n[0]=t,n[1]=e},t.prototype.dataToCoord=function(t,e){var n=this._extent,i=this.scale;return t=i.normalize(t),this.onBand&&"ordinal"===i.type&&cb(n=n.slice(),i.count()),Yi(t,ub,n,e)},t.prototype.coordToData=function(t,e){var n=this._extent,i=this.scale;this.onBand&&"ordinal"===i.type&&cb(n=n.slice(),i.count());var r=Yi(t,n,ub,e);return this.scale.scale(r)},t.prototype.pointToData=function(t,e){},t.prototype.getTicksCoords=function(t){var e=(t=t||{}).tickModel||this.getTickModel(),n=O(nb(this,e).ticks,(function(t){return{coord:this.dataToCoord("ordinal"===this.scale.type?this.scale.getRawOrdinalNumber(t):t),tickValue:t}}),this);return function(t,e,n,i){var r=e.length;if(!t.onBand||n||!r)return;var o,a,s=t.getExtent();if(1===r)e[0].coord=s[0],o=e[1]={coord:s[0]};else{var l=e[r-1].tickValue-e[0].tickValue,u=(e[r-1].coord-e[0].coord)/l;P(e,(function(t){t.coord-=u/2})),a=1+t.scale.getExtent()[1]-e[r-1].tickValue,o={coord:e[r-1].coord+u*a},e.push(o)}var h=s[0]>s[1];c(e[0].coord,s[0])&&(i?e[0].coord=s[0]:e.shift());i&&c(s[0],e[0].coord)&&e.unshift({coord:s[0]});c(s[1],o.coord)&&(i?o.coord=s[1]:e.pop());i&&c(o.coord,s[1])&&e.push({coord:s[1]});function c(t,e){return t=ji(t),e=ji(e),h?t>e:t0&&t<100||(t=5),O(this.scale.getMinorTicks(t),(function(t){return O(t,(function(t){return{coord:this.dataToCoord(t),tickValue:t}}),this)}),this)},t.prototype.getViewLabels=function(){return eb(this).labels},t.prototype.getLabelModel=function(){return this.model.getModel("axisLabel")},t.prototype.getTickModel=function(){return this.model.getModel("axisTick")},t.prototype.getBandWidth=function(){var t=this._extent,e=this.scale.getExtent(),n=e[1]-e[0]+(this.onBand?1:0);0===n&&(n=1);var i=Math.abs(t[1]-t[0]);return Math.abs(i)/n},t.prototype.calculateCategoryInterval=function(){return function(t){var e=function(t){var e=t.getLabelModel();return{axisRotate:t.getRotate?t.getRotate():t.isHorizontal&&!t.isHorizontal()?90:0,labelRotate:e.get("rotate")||0,font:e.getFont()}}(t),n=Fx(t),i=(e.axisRotate-e.labelRotate)/180*Math.PI,r=t.scale,o=r.getExtent(),a=r.count();if(o[1]-o[0]<1)return 0;var s=1;a>40&&(s=Math.max(1,Math.floor(a/40)));for(var l=o[0],u=t.dataToCoord(l+1)-t.dataToCoord(l),h=Math.abs(u*Math.cos(i)),c=Math.abs(u*Math.sin(i)),p=0,d=0;l<=o[1];l+=s){var f,g,y=bi(n({value:l}),e.font,"center","top");f=1.3*y.width,g=1.3*y.height,p=Math.max(p,f,7),d=Math.max(d,g,7)}var v=p/h,m=d/c;isNaN(v)&&(v=1/0),isNaN(m)&&(m=1/0);var _=Math.max(0,Math.floor(Math.min(v,m))),x=tb(t.model),b=t.getExtent(),w=x.lastAutoInterval,S=x.lastTickCount;return null!=w&&null!=S&&Math.abs(w-_)<=1&&Math.abs(S-a)<=1&&w>_&&x.axisExtent0===b[0]&&x.axisExtent1===b[1]?_=w:(x.lastTickCount=a,x.lastAutoInterval=_,x.axisExtent0=b[0],x.axisExtent1=b[1]),_}(this)},t}();function cb(t,e){var n=(t[1]-t[0])/e/2;t[0]+=n,t[1]-=n}function pb(t){return document.createElementNS("http://www.w3.org/2000/svg",t)}function db(t,e,n,i,r){for(var o=e.length,a=n.length,s=t.newPos,l=s-i,u=0;s+1=i&&l+1>=r){for(var u=[],h=0;h=i&&c+1>=r)return gb(l.components);s[a]=l}else s[a]=void 0}var f;o++}for(;o<=a;){var p=c();if(p)return p}}(t,e,n)}var vb="none",mb=Math.round,_b=Math.sin,xb=Math.cos,bb=Math.PI,wb=2*Math.PI,Sb=180/bb,Mb=1e-4;function Ib(t){return mb(1e3*t)/1e3}function Tb(t){return mb(1e4*t)/1e4}function Cb(t){return t-1e-4}function Db(t,e){e&&Ab(t,"transform","matrix("+Ib(e[0])+","+Ib(e[1])+","+Ib(e[2])+","+Ib(e[3])+","+Tb(e[4])+","+Tb(e[5])+")")}function Ab(t,e,n){(!n||"linear"!==n.type&&"radial"!==n.type)&&t.setAttribute(e,n)}function Lb(t,e,n){var i=null==e.opacity?1:e.opacity;if(n instanceof es)t.style.opacity=i+"";else{if(function(t){var e=t.fill;return null!=e&&e!==vb}(e)){var r=e.fill;Ab(t,"fill",r="transparent"===r?vb:r),Ab(t,"fill-opacity",(null!=e.fillOpacity?e.fillOpacity*i:i)+"")}else Ab(t,"fill",vb);if(function(t){var e=t.stroke;return null!=e&&e!==vb}(e)){var o=e.stroke;Ab(t,"stroke",o="transparent"===o?vb:o);var a=e.lineWidth,s=e.strokeNoScale?n.getLineScale():1;Ab(t,"stroke-width",(s?a/s:0)+""),Ab(t,"paint-order",e.strokeFirst?"stroke":"fill"),Ab(t,"stroke-opacity",(null!=e.strokeOpacity?e.strokeOpacity*i:i)+"");var l=e.lineDash&&a>0&&vy(e.lineDash,a);if(l){var u=e.lineDashOffset;s&&1!==s&&(l=O(l,(function(t){return t/s})),u&&(u=mb(u/=s))),Ab(t,"stroke-dasharray",l.join(",")),Ab(t,"stroke-dashoffset",(u||0)+"")}else Ab(t,"stroke-dasharray","");e.lineCap&&Ab(t,"stroke-linecap",e.lineCap),e.lineJoin&&Ab(t,"stroke-linejoin",e.lineJoin),e.miterLimit&&Ab(t,"stroke-miterlimit",e.miterLimit+"")}else Ab(t,"stroke",vb)}}var kb=function(){function t(){}return t.prototype.reset=function(){this._d=[],this._str=""},t.prototype.moveTo=function(t,e){this._add("M",t,e)},t.prototype.lineTo=function(t,e){this._add("L",t,e)},t.prototype.bezierCurveTo=function(t,e,n,i,r,o){this._add("C",t,e,n,i,r,o)},t.prototype.quadraticCurveTo=function(t,e,n,i){this._add("Q",t,e,n,i)},t.prototype.arc=function(t,e,n,i,r,o){this.ellipse(t,e,n,n,0,i,r,o)},t.prototype.ellipse=function(t,e,n,i,r,o,a,s){var l=0===this._d.length,u=a-o,h=!s,c=Math.abs(u),p=Cb(c-wb)||(h?u>=wb:-u>=wb),d=u>0?u%wb:u%wb+wb,f=!1;f=!!p||!Cb(c)&&d>=bb==!!h;var g=Tb(t+n*xb(o)),y=Tb(e+i*_b(o));p&&(u=h?wb-1e-4:1e-4-wb,f=!0,l&&this._d.push("M",g,y));var v=Tb(t+n*xb(o+u)),m=Tb(e+i*_b(o+u));if(isNaN(g)||isNaN(y)||isNaN(n)||isNaN(i)||isNaN(r)||isNaN(Sb)||isNaN(v)||isNaN(m))return"";this._d.push("A",Tb(n),Tb(i),mb(r*Sb),+f,+h,v,m)},t.prototype.rect=function(t,e,n,i){this._add("M",t,e),this._add("L",t+n,e),this._add("L",t+n,e+i),this._add("L",t,e+i),this._add("L",t,e)},t.prototype.closePath=function(){this._d.length>0&&this._add("Z")},t.prototype._add=function(t,e,n,i,r,o,a,s,l){this._d.push(t);for(var u=1;u=0;--n)if(e[n]===t)return!0;return!1}),i}return null}return n[0]},t.prototype.doUpdate=function(t,e){if(t){var n=this.getDefs(!1);if(t[this._domName]&&n.contains(t[this._domName]))"function"==typeof e&&e(t);else{var i=this.add(t);i&&(t[this._domName]=i)}}},t.prototype.add=function(t){return null},t.prototype.addDom=function(t){var e=this.getDefs(!0);t.parentNode!==e&&e.appendChild(t)},t.prototype.removeDom=function(t){var e=this.getDefs(!1);e&&t[this._domName]&&(e.removeChild(t[this._domName]),t[this._domName]=null)},t.prototype.getDoms=function(){var t=this.getDefs(!1);if(!t)return[];var e=[];return P(this._tagNames,(function(n){for(var i=t.getElementsByTagName(n),r=0;r-1){var s=He(a)[3],l=Xe(a);o.setAttribute("stop-color","#"+l),o.setAttribute("stop-opacity",s+"")}else o.setAttribute("stop-color",n[i].color);e.appendChild(o)}t.__dom=e},e.prototype.markUsed=function(e){if(e.style){var n=e.style.fill;n&&n.__dom&&t.prototype.markDomUsed.call(this,n.__dom),(n=e.style.stroke)&&n.__dom&&t.prototype.markDomUsed.call(this,n.__dom)}},e}(zb);function Gb(t){return t&&(!!t.image||!!t.svgElement)}var Hb=new oy,Wb=function(t){function e(e,n){return t.call(this,e,n,["pattern"],"__pattern_in_use__")||this}return n(e,t),e.prototype.addWithoutUpdate=function(t,e){if(e&&e.style){var n=this;P(["fill","stroke"],(function(i){var r=e.style[i];if(Gb(r)){var o=n.getDefs(!0),a=Hb.get(r);a?o.contains(a)||n.addDom(a):a=n.add(r),n.markUsed(e);var s=a.getAttribute("id");t.setAttribute(i,"url(#"+s+")")}}))}},e.prototype.add=function(t){if(Gb(t)){var e=this.createElement("pattern");return t.id=null==t.id?this.nextId++:t.id,e.setAttribute("id","zr"+this._zrId+"-pattern-"+t.id),e.setAttribute("x","0"),e.setAttribute("y","0"),e.setAttribute("patternUnits","userSpaceOnUse"),this.updateDom(t,e),this.addDom(e),e}},e.prototype.update=function(t){if(Gb(t)){var e=this;this.doUpdate(t,(function(){var n=Hb.get(t);e.updateDom(t,n)}))}},e.prototype.updateDom=function(t,e){var n=t.svgElement;if(n instanceof SVGElement)n.parentNode!==e&&(e.innerHTML="",e.appendChild(n),e.setAttribute("width",t.svgWidth+""),e.setAttribute("height",t.svgHeight+""));else{var i=void 0,r=e.getElementsByTagName("image");if(r.length){if(!t.image)return void e.removeChild(r[0]);i=r[0]}else t.image&&(i=this.createElement("image"));if(i){var o=void 0,a=t.image;if("string"==typeof a?o=a:a instanceof HTMLImageElement?o=a.src:a instanceof HTMLCanvasElement&&(o=a.toDataURL()),o){i.setAttribute("href",o),i.setAttribute("x","0"),i.setAttribute("y","0");var s=no(o,i,{dirty:function(){}},(function(t){e.setAttribute("width",t.width+""),e.setAttribute("height",t.height+"")}));s&&s.width&&s.height&&(e.setAttribute("width",s.width+""),e.setAttribute("height",s.height+"")),e.appendChild(i)}}}var l="translate("+(t.x||0)+", "+(t.y||0)+") rotate("+(t.rotation||0)/Math.PI*180+") scale("+(t.scaleX||1)+", "+(t.scaleY||1)+")";e.setAttribute("patternTransform",l),Hb.set(t,e)},e.prototype.markUsed=function(e){e.style&&(Gb(e.style.fill)&&t.prototype.markDomUsed.call(this,Hb.get(e.style.fill)),Gb(e.style.stroke)&&t.prototype.markDomUsed.call(this,Hb.get(e.style.stroke)))},e}(zb);function Ub(t){var e=t.__clipPaths;return e&&e.length>0}var Xb=function(t){function e(e,n){var i=t.call(this,e,n,"clipPath","__clippath_in_use__")||this;return i._refGroups={},i._keyDuplicateCount={},i}return n(e,t),e.prototype.markAllUnused=function(){for(var e in t.prototype.markAllUnused.call(this),this._refGroups)this.markDomUnused(this._refGroups[e]);this._keyDuplicateCount={}},e.prototype._getClipPathGroup=function(t,e){if(Ub(t)){var n=t.__clipPaths,i=this._keyDuplicateCount,r=function(t){var e=[];if(t)for(var n=0;n0){var n=this.getDefs(!0),i=e[0],r=void 0,o=void 0;i._dom?(o=i._dom.getAttribute("id"),r=i._dom,n.contains(r)||n.appendChild(r)):(o="zr"+this._zrId+"-clip-"+this.nextId,++this.nextId,(r=this.createElement("clipPath")).setAttribute("id",o),n.appendChild(r),i._dom=r),this.getSvgProxy(i).brush(i);var a=this.getSvgElement(i);r.innerHTML="",r.appendChild(a),t.setAttribute("clip-path","url(#"+o+")"),e.length>1&&this.updateDom(r,e.slice(1))}else t&&t.setAttribute("clip-path","none")},e.prototype.markUsed=function(e){var n=this;e.__clipPaths&&P(e.__clipPaths,(function(e){e._dom&&t.prototype.markDomUsed.call(n,e._dom)}))},e.prototype.removeUnused=function(){t.prototype.removeUnused.call(this);var e={};for(var n in this._refGroups){var i=this._refGroups[n];this.isDomUnused(i)?i.parentNode&&i.parentNode.removeChild(i):e[n]=i}this._refGroups=e},e}(zb),Yb=function(t){function e(e,n){var i=t.call(this,e,n,["filter"],"__filter_in_use__","_shadowDom")||this;return i._shadowDomMap={},i._shadowDomPool=[],i}return n(e,t),e.prototype._getFromPool=function(){var t=this._shadowDomPool.pop();if(!t){(t=this.createElement("filter")).setAttribute("id","zr"+this._zrId+"-shadow-"+this.nextId++);var e=this.createElement("feDropShadow");t.appendChild(e),this.addDom(t)}return t},e.prototype.update=function(t,e){if(function(t){return t&&(t.shadowBlur||t.shadowOffsetX||t.shadowOffsetY)}(e.style)){var n=function(t){var e=t.style,n=t.getGlobalScale();return[e.shadowColor,(e.shadowBlur||0).toFixed(2),(e.shadowOffsetX||0).toFixed(2),(e.shadowOffsetY||0).toFixed(2),n[0],n[1]].join(",")}(e),i=e._shadowDom=this._shadowDomMap[n];i||(i=this._getFromPool(),this._shadowDomMap[n]=i),this.updateDom(t,e,i)}else this.remove(t,e)},e.prototype.remove=function(t,e){null!=e._shadowDom&&(e._shadowDom=null,t.style.filter="")},e.prototype.updateDom=function(t,e,n){var i=n.children[0],r=e.style,o=e.getGlobalScale(),a=o[0],s=o[1];if(a&&s){var l=r.shadowOffsetX||0,u=r.shadowOffsetY||0,h=r.shadowBlur,c=r.shadowColor;i.setAttribute("dx",l/a+""),i.setAttribute("dy",u/s+""),i.setAttribute("flood-color",c);var p=h/2/a+" "+h/2/s;i.setAttribute("stdDeviation",p),n.setAttribute("x","-100%"),n.setAttribute("y","-100%"),n.setAttribute("width","300%"),n.setAttribute("height","300%"),e._shadowDom=n;var d=n.getAttribute("id");t.style.filter="url(#"+d+")"}},e.prototype.removeUnused=function(){if(this.getDefs(!1)){var t=this._shadowDomPool;for(var e in this._shadowDomMap){var n=this._shadowDomMap[e];t.push(n)}this._shadowDomMap={}}},e}(zb);function Zb(t){return parseInt(t,10)}function jb(t){return t instanceof Ka?Pb:t instanceof es?Ob:t instanceof Ja?Nb:Pb}function qb(t,e){return e&&t&&e.parentNode!==t}function Kb(t,e,n){if(qb(t,e)&&n){var i=n.nextSibling;i?t.insertBefore(e,i):t.appendChild(e)}}function $b(t,e){if(qb(t,e)){var n=t.firstChild;n?t.insertBefore(e,n):t.appendChild(e)}}function Jb(t,e){e&&t&&e.parentNode===t&&t.removeChild(e)}function Qb(t){return t.__svgEl}var tw=function(){function t(t,e,n,i){this.type="svg",this.refreshHover=ew("refreshHover"),this.pathToImage=ew("pathToImage"),this.configLayer=ew("configLayer"),this.root=t,this.storage=e,this._opts=n=I({},n||{});var r=pb("svg");r.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns","http://www.w3.org/2000/svg"),r.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),r.setAttribute("version","1.1"),r.setAttribute("baseProfile","full"),r.style.cssText="user-select:none;position:absolute;left:0;top:0;";var o=pb("g");r.appendChild(o);var a=pb("g");r.appendChild(a),this._gradientManager=new Fb(i,a),this._patternManager=new Wb(i,a),this._clipPathManager=new Xb(i,a),this._shadowManager=new Yb(i,a);var s=document.createElement("div");s.style.cssText="overflow:hidden;position:relative",this._svgDom=r,this._svgRoot=a,this._backgroundRoot=o,this._viewport=s,t.appendChild(s),s.appendChild(r),this.resize(n.width,n.height),this._visibleList=[]}return t.prototype.getType=function(){return"svg"},t.prototype.getViewportRoot=function(){return this._viewport},t.prototype.getSvgDom=function(){return this._svgDom},t.prototype.getSvgRoot=function(){return this._svgRoot},t.prototype.getViewportRootOffset=function(){var t=this.getViewportRoot();if(t)return{offsetLeft:t.offsetLeft||0,offsetTop:t.offsetTop||0}},t.prototype.refresh=function(){var t=this.storage.getDisplayList(!0);this._paintList(t)},t.prototype.setBackgroundColor=function(t){this._backgroundRoot&&this._backgroundNode&&this._backgroundRoot.removeChild(this._backgroundNode);var e=pb("rect");e.setAttribute("width",this.getWidth()),e.setAttribute("height",this.getHeight()),e.setAttribute("x",0),e.setAttribute("y",0),e.setAttribute("id",0),e.style.fill=t,this._backgroundRoot.appendChild(e),this._backgroundNode=e},t.prototype.createSVGElement=function(t){return pb(t)},t.prototype.paintOne=function(t){var e=jb(t);return e&&e.brush(t),Qb(t)},t.prototype._paintList=function(t){var e=this._gradientManager,n=this._patternManager,i=this._clipPathManager,r=this._shadowManager;e.markAllUnused(),n.markAllUnused(),i.markAllUnused(),r.markAllUnused();for(var o=this._svgRoot,a=this._visibleList,s=t.length,l=[],u=0;u\n\r<"))},t}();function ew(t){return function(){b('In SVG mode painter not support method "'+t+'"')}}function nw(){return!1}function iw(t,e,n){var i=C(),r=e.getWidth(),o=e.getHeight(),a=i.style;return a&&(a.position="absolute",a.left="0",a.top="0",a.width=r+"px",a.height=o+"px",i.setAttribute("data-zr-dom-id",t)),i.width=r*n,i.height=o*n,i}var rw=function(t){function e(e,n,i){var r,o=t.call(this)||this;o.motionBlur=!1,o.lastFrameAlpha=.7,o.dpr=1,o.virtual=!1,o.config={},o.incremental=!1,o.zlevel=0,o.maxRepaintRectCount=5,o.__dirty=!0,o.__firstTimePaint=!0,o.__used=!1,o.__drawIndex=0,o.__startIndex=0,o.__endIndex=0,o.__prevStartIndex=null,o.__prevEndIndex=null,i=i||En,"string"==typeof e?r=iw(e,n,i):X(e)&&(e=(r=e).id),o.id=e,o.dom=r;var a=r.style;return a&&(r.onselectstart=nw,a.webkitUserSelect="none",a.userSelect="none",a.webkitTapHighlightColor="rgba(0,0,0,0)",a["-webkit-touch-callout"]="none",a.padding="0",a.margin="0",a.borderWidth="0"),o.domBack=null,o.ctxBack=null,o.painter=n,o.config=null,o.dpr=i,o}return n(e,t),e.prototype.getElementCount=function(){return this.__endIndex-this.__startIndex},e.prototype.afterBrush=function(){this.__prevStartIndex=this.__startIndex,this.__prevEndIndex=this.__endIndex},e.prototype.initContext=function(){this.ctx=this.dom.getContext("2d"),this.ctx.dpr=this.dpr},e.prototype.setUnpainted=function(){this.__firstTimePaint=!0},e.prototype.createBackBuffer=function(){var t=this.dpr;this.domBack=iw("back-"+this.id,this.painter,t),this.ctxBack=this.domBack.getContext("2d"),1!==t&&this.ctxBack.scale(t,t)},e.prototype.createRepaintRects=function(t,e,n,i){if(this.__firstTimePaint)return this.__firstTimePaint=!1,null;var r,o=[],a=this.maxRepaintRectCount,s=!1,l=new gi(0,0,0,0);function u(t){if(t.isFinite()&&!t.isZero())if(0===o.length){(e=new gi(0,0,0,0)).copy(t),o.push(e)}else{for(var e,n=!1,i=1/0,r=0,u=0;u=a)}}for(var h=this.__startIndex;h15)break}n.prevElClipPaths&&u.restore()};if(p)if(0===p.length)s=l.__endIndex;else for(var x=d.dpr,b=0;b0&&t>i[0]){for(s=0;st);s++);a=n[i[s]]}if(i.splice(s+1,0,t),n[t]=e,!e.virtual)if(a){var l=a.dom;l.nextSibling?o.insertBefore(e.dom,l.nextSibling):o.appendChild(e.dom)}else o.firstChild?o.insertBefore(e.dom,o.firstChild):o.appendChild(e.dom);e.__painter=this}else b("Layer of zlevel "+t+" is not valid")},t.prototype.eachLayer=function(t,e){for(var n=this._zlevelList,i=0;i0?sw:0),this._needsManuallyCompositing),u.__builtin__||b("ZLevel "+l+" has been used by unkown layer "+u.id),u!==o&&(u.__used=!0,u.__startIndex!==r&&(u.__dirty=!0),u.__startIndex=r,u.incremental?u.__drawIndex=-1:u.__drawIndex=r,e(r),o=u),1&s.__dirty&&!s.__inHover&&(u.__dirty=!0,u.incremental&&u.__drawIndex<0&&(u.__drawIndex=r))}e(r),this.eachBuiltinLayer((function(t,e){!t.__used&&t.getElementCount()>0&&(t.__dirty=!0,t.__startIndex=t.__endIndex=t.__drawIndex=0),t.__dirty&&t.__drawIndex<0&&(t.__drawIndex=t.__startIndex)}))},t.prototype.clear=function(){return this.eachBuiltinLayer(this._clearLayer),this},t.prototype._clearLayer=function(t){t.clear()},t.prototype.setBackgroundColor=function(t){this._backgroundColor=t,P(this._layers,(function(t){t.setUnpainted()}))},t.prototype.configLayer=function(t,e){if(e){var n=this._layerConfig;n[t]?S(n[t],e,!0):n[t]=e;for(var i=0;i-1&&(s.style.stroke=s.style.fill,s.style.fill="#fff",s.style.lineWidth=2),e},e.type="series.line",e.dependencies=["grid","polar"],e.defaultOption={zlevel:0,z:3,coordinateSystem:"cartesian2d",legendHoverLink:!0,clip:!0,label:{position:"top"},endLabel:{show:!1,valueAnimation:!0,distance:8},lineStyle:{width:2,type:"solid"},emphasis:{scale:!0,lineStyle:{width:"bolder"}},step:!1,smooth:!1,smoothMonotone:null,symbol:"emptyCircle",symbolSize:4,symbolRotate:null,showSymbol:!0,showAllSymbol:"auto",connectNulls:!1,sampling:"none",animationEasing:"linear",progressive:0,hoverLayerThreshold:1/0},e}(ff);function cw(t,e){var n=t.mapDimensionsAll("defaultedLabel"),i=n.length;if(1===i){var r=Md(t,e,n[0]);return null!=r?r+"":null}if(i){for(var o=[],a=0;a0?n=i[0]:i[1]<0&&(n=i[1]);return n}(r,n),a=i.dim,s=r.dim,l=e.mapDimension(s),u=e.mapDimension(a),h="x"===s||"radius"===s?1:0,c=O(t.dimensions,(function(t){return e.mapDimension(t)})),p=!1,d=e.getCalculationInfo("stackResultDimension");return V_(e,c[0])&&(p=!0,c[0]=d),V_(e,c[1])&&(p=!0,c[1]=d),{dataDimsForPoint:c,valueStart:o,valueAxisDim:s,baseAxisDim:a,stacked:!!p,valueDim:l,baseDim:u,baseDataOffset:h,stackedOverDimension:e.getCalculationInfo("stackedOverDimension")}}function xw(t,e,n,i){var r=NaN;t.stacked&&(r=n.get(n.getCalculationInfo("stackedOverDimension"),i)),isNaN(r)&&(r=t.valueStart);var o=t.baseDataOffset,a=[];return a[o]=n.get(t.baseDim,i),a[1-o]=r,e.dataToPoint(a)}var bw="undefined"!=typeof Float32Array,ww=bw?Float32Array:Array;function Sw(t){return F(t)?bw?new Float32Array(t):t:new ww(t)}var Mw=Math.min,Iw=Math.max;function Tw(t,e){return isNaN(t)||isNaN(e)}function Cw(t,e,n,i,r,o,a,s,l){for(var u,h,c,p,d,f,g=n,y=0;y=r||g<0)break;if(Tw(v,m)){if(l){g+=o;continue}break}if(g===n)t[o>0?"moveTo":"lineTo"](v,m),c=v,p=m;else{var _=v-u,x=m-h;if(_*_+x*x<.5){g+=o;continue}if(a>0){var b=g+o,w=e[2*b],S=e[2*b+1],M=y+1;if(l)for(;Tw(w,S)&&M=i||Tw(w,S))d=v,f=m;else{T=w-u,C=S-h;var L=v-u,k=w-v,P=m-h,O=S-m,R=void 0,N=void 0;"x"===s?(R=Math.abs(L),N=Math.abs(k),d=v-R*a,f=m,D=v+R*a,A=m):"y"===s?(R=Math.abs(P),N=Math.abs(O),d=v,f=m-R*a,D=v,A=m+R*a):(R=Math.sqrt(L*L+P*P),d=v-T*a*(1-(I=(N=Math.sqrt(k*k+O*O))/(N+R))),f=m-C*a*(1-I),A=m+C*a*I,D=Mw(D=v+T*a*I,Iw(w,v)),A=Mw(A,Iw(S,m)),D=Iw(D,Mw(w,v)),f=m-(C=(A=Iw(A,Mw(S,m)))-m)*R/N,d=Mw(d=v-(T=D-v)*R/N,Iw(u,v)),f=Mw(f,Iw(h,m)),D=v+(T=v-(d=Iw(d,Mw(u,v))))*N/R,A=m+(C=m-(f=Iw(f,Mw(h,m))))*N/R)}t.bezierCurveTo(c,p,d,f,v,m),c=D,p=A}else t.lineTo(v,m)}u=v,h=m,g+=o}return y}var Dw=function(){this.smooth=0,this.smoothConstraint=!0},Aw=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-polyline",n}return n(e,t),e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new Dw},e.prototype.buildPath=function(t,e){var n=e.points,i=0,r=n.length/2;if(e.connectNulls){for(;r>0&&Tw(n[2*r-2],n[2*r-1]);r--);for(;i=0){var y=a?(h-i)*g+i:(u-n)*g+n;return a?[t,y]:[y,t]}n=u,i=h;break;case o.C:u=r[l++],h=r[l++],c=r[l++],p=r[l++],d=r[l++],f=r[l++];var v=a?Bo(n,u,c,d,t,s):Bo(i,h,p,f,t,s);if(v>0)for(var m=0;m=0){y=a?Eo(i,h,p,f,_):Eo(n,u,c,d,_);return a?[t,y]:[y,t]}}n=d,i=f}}},e}(Ka),Lw=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e}(Dw),kw=function(t){function e(e){var n=t.call(this,e)||this;return n.type="ec-polygon",n}return n(e,t),e.prototype.getDefaultShape=function(){return new Lw},e.prototype.buildPath=function(t,e){var n=e.points,i=e.stackedOnPoints,r=0,o=n.length/2,a=e.smoothMonotone;if(e.connectNulls){for(;o>0&&Tw(n[2*o-2],n[2*o-1]);o--);for(;ri)return!1;return!0}(o,e))){var a=e.mapDimension(o.dim),s={};return P(o.getViewLabels(),(function(t){var e=o.scale.getRawOrdinalNumber(t.tickValue);s[e]=1})),function(t){return!s.hasOwnProperty(e.get(a,t))}}}}function Hw(t,e){return[t[2*e],t[2*e+1]]}function Ww(t,e,n,i){if(Nw(e,"cartesian2d")){var r=i.getModel("endLabel"),o=r.get("show"),a=r.get("valueAnimation"),s=i.getData(),l={lastFrameIndex:0},u=o?function(n,i){t._endLabelOnDuring(n,i,s,l,a,r,e)}:null,h=e.getBaseAxis().isHorizontal(),c=Pw(e,n,i,(function(){var e=t._endLabel;e&&n&&null!=l.originalX&&e.attr({x:l.originalX,y:l.originalY})}),u);if(!i.get("clip",!0)){var p=c.shape,d=Math.max(p.width,p.height);h?(p.y-=d,p.height+=2*d):(p.x-=d,p.width+=2*d)}return u&&u(1,c),c}return Ow(e,n,i)}var Uw=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.init=function(){var t=new Ei,e=new mw;this.group.add(e.group),this._symbolDraw=e,this._lineGroup=t},e.prototype.render=function(t,e,n){var i=this,r=t.coordinateSystem,o=this.group,a=t.getData(),s=t.getModel("lineStyle"),l=t.getModel("areaStyle"),u=a.getLayout("points")||[],h="polar"===r.type,c=this._coordSys,p=this._symbolDraw,d=this._polyline,f=this._polygon,g=this._lineGroup,y=t.get("animation"),v=!l.isEmpty(),m=l.get("origin"),_=_w(r,a,m),x=v&&function(t,e,n){if(!n.valueDim)return[];for(var i=e.count(),r=Sw(2*i),o=0;o=0;o--){var a=n[o].dimension,s=t.dimensions[a],l=t.getDimensionInfo(s);if("x"===(i=l&&l.coordDim)||"y"===i){r=n[o];break}}if(r){var u=e.getAxis(i),h=O(r.stops,(function(t){return{offset:0,coord:u.toGlobalCoord(u.dataToCoord(t.value,!0)),color:t.color}})),c=h.length,p=r.outerColors.slice();c&&h[0].coord>h[c-1].coord&&(h.reverse(),p.reverse());var d=h[0].coord-10,f=h[c-1].coord+10,g=f-d;if(g<.001)return"transparent";P(h,(function(t){t.offset=(t.coord-d)/g})),h.push({offset:c?h[c-1].offset:.5,color:p[1]||"transparent"}),h.unshift({offset:c?h[0].offset:.5,color:p[0]||"transparent"});var y=new mu(0,0,0,0,h,!0);return y[i]=d,y[i+"2"]=f,y}}}(a,r)||a.getVisual("style")[a.getVisual("drawType")];d&&c.type===r.type&&I===this._step?(v&&!f?f=this._newPolygon(u,x):f&&!v&&(g.remove(f),f=this._polygon=null),h||this._initOrUpdateEndLabel(t,r,kc(C)),g.setClipPath(Ww(this,r,!1,t)),b&&p.updateData(a,{isIgnore:w,clipShape:M,disableAnimation:!0,getSymbolPoint:function(t){return[u[2*t],u[2*t+1]]}}),zw(this._stackedOnPoints,x)&&zw(this._points,u)||(y?this._doUpdateAnimation(a,x,r,n,I,m):(I&&(u=Fw(u,r,I),x&&(x=Fw(x,r,I))),d.setShape({points:u}),f&&f.setShape({points:u,stackedOnPoints:x})))):(b&&p.updateData(a,{isIgnore:w,clipShape:M,disableAnimation:!0,getSymbolPoint:function(t){return[u[2*t],u[2*t+1]]}}),y&&this._initSymbolLabelAnimation(a,r,M),I&&(u=Fw(u,r,I),x&&(x=Fw(x,r,I))),d=this._newPolyline(u),v&&(f=this._newPolygon(u,x)),h||this._initOrUpdateEndLabel(t,r,kc(C)),g.setClipPath(Ww(this,r,!0,t)));var D=t.get(["emphasis","focus"]),A=t.get(["emphasis","blurScope"]);(d.useStyle(T(s.getLineStyle(),{fill:"none",stroke:C,lineJoin:"bevel"})),cl(d,t,"lineStyle"),d.style.lineWidth>0&&"bolder"===t.get(["emphasis","lineStyle","width"]))&&(d.getState("emphasis").style.lineWidth=+d.style.lineWidth+1);_s(d).seriesIndex=t.seriesIndex,sl(d,D,A);var L=Bw(t.get("smooth")),k=t.get("smoothMonotone"),R=t.get("connectNulls");if(d.setShape({smooth:L,smoothMonotone:k,connectNulls:R}),f){var N=a.getCalculationInfo("stackedOnSeries"),z=0;f.useStyle(T(l.getAreaStyle(),{fill:C,opacity:.7,lineJoin:"bevel",decal:a.getVisual("style").decal})),N&&(z=Bw(N.get("smooth"))),f.setShape({smooth:L,stackedOnSmooth:z,smoothMonotone:k,connectNulls:R}),cl(f,t,"areaStyle"),_s(f).seriesIndex=t.seriesIndex,sl(f,D,A)}var E=function(t){i._changePolyState(t)};a.eachItemGraphicEl((function(t){t&&(t.onHoverStateChange=E)})),this._polyline.onHoverStateChange=E,this._data=a,this._coordSys=r,this._stackedOnPoints=x,this._points=u,this._step=I,this._valueOrigin=m},e.prototype.dispose=function(){},e.prototype.highlight=function(t,e,n,i){var r=t.getData(),o=Lr(r,i);if(this._changePolyState("emphasis"),!(o instanceof Array)&&null!=o&&o>=0){var a=r.getLayout("points"),s=r.getItemGraphicEl(o);if(!s){var l=a[2*o],u=a[2*o+1];if(isNaN(l)||isNaN(u))return;if(this._clipShapeForSymbol&&!this._clipShapeForSymbol.contain(l,u))return;var h=t.get("zlevel"),c=t.get("z");(s=new dw(r,o)).x=l,s.y=u,s.setZ(h,c);var p=s.getSymbolPath().getTextContent();p&&(p.zlevel=h,p.z=c,p.z2=this._polyline.z2+1),s.__temp=!0,r.setItemGraphicEl(o,s),s.stopSymbolAnimation(!0),this.group.add(s)}s.highlight()}else Tf.prototype.highlight.call(this,t,e,n,i)},e.prototype.downplay=function(t,e,n,i){var r=t.getData(),o=Lr(r,i);if(this._changePolyState("normal"),null!=o&&o>=0){var a=r.getItemGraphicEl(o);a&&(a.__temp?(r.setItemGraphicEl(o,null),this.group.remove(a)):a.downplay())}else Tf.prototype.downplay.call(this,t,e,n,i)},e.prototype._changePolyState=function(t){var e=this._polygon;Ws(this._polyline,t),e&&Ws(e,t)},e.prototype._newPolyline=function(t){var e=this._polyline;return e&&this._lineGroup.remove(e),e=new Aw({shape:{points:t},segmentIgnoreThreshold:2,z2:10}),this._lineGroup.add(e),this._polyline=e,e},e.prototype._newPolygon=function(t,e){var n=this._polygon;return n&&this._lineGroup.remove(n),n=new kw({shape:{points:t,stackedOnPoints:e},segmentIgnoreThreshold:2}),this._lineGroup.add(n),this._polygon=n,n},e.prototype._initSymbolLabelAnimation=function(t,e,n){var i,r,o=e.getBaseAxis(),a=o.inverse;"cartesian2d"===e.type?(i=o.isHorizontal(),r=!1):"polar"===e.type&&(i="angle"===o.dim,r=!0);var s=t.hostModel,l=s.get("animationDuration");"function"==typeof l&&(l=l(null));var u=s.get("animationDelay")||0,h="function"==typeof u?u(null):u;t.eachItemGraphicEl((function(t,o){var s=t;if(s){var c=[t.x,t.y],p=void 0,d=void 0,f=void 0;if(n)if(r){var g=n,y=e.pointToCoord(c);i?(p=g.startAngle,d=g.endAngle,f=-y[1]/180*Math.PI):(p=g.r0,d=g.r,f=y[0])}else{var v=n;i?(p=v.x,d=v.x+v.width,f=t.x):(p=v.y+v.height,d=v.y,f=t.y)}var m=d===p?0:(f-p)/(d-p);a&&(m=1-m);var _="function"==typeof u?u(o):l*m+h,x=s.getSymbolPath(),b=x.getTextContent();s.attr({scaleX:0,scaleY:0}),s.animateTo({scaleX:1,scaleY:1},{duration:200,delay:_}),b&&b.animateFrom({style:{opacity:0}},{duration:300,delay:_}),x.disableLabelAnimation=!0}}))},e.prototype._initOrUpdateEndLabel=function(t,e,n){var i=t.getModel("endLabel");if(i.get("show")){var r=t.getData(),o=this._polyline,a=this._endLabel;a||((a=this._endLabel=new cs({z2:200})).ignoreClip=!0,o.setTextContent(this._endLabel),o.disableLabelAnimation=!0);var s=function(t){for(var e,n,i=t.length/2;i>0&&(e=t[2*i-2],n=t[2*i-1],isNaN(e)||isNaN(n));i--);return i-1}(r.getLayout("points"));s>=0&&(hh(o,ch(t,"endLabel"),{inheritColor:n,labelFetcher:t,labelDataIndex:s,defaultText:function(t,e,n){return null!=n?pw(r,n):cw(r,t)},enableTextSetter:!0},function(t,e){var n=e.getBaseAxis(),i=n.isHorizontal(),r=n.inverse,o=i?r?"right":"left":"center",a=i?"middle":r?"top":"bottom";return{normal:{align:t.get("align")||o,verticalAlign:t.get("verticalAlign")||a}}}(i,e)),o.textConfig.position=null)}else this._endLabel&&(this._polyline.removeTextContent(),this._endLabel=null)},e.prototype._endLabelOnDuring=function(t,e,n,i,r,o,a){var s=this._endLabel,l=this._polyline;if(s){t<1&&null==i.originalX&&(i.originalX=s.x,i.originalY=s.y);var u=n.getLayout("points"),h=n.hostModel,c=h.get("connectNulls"),p=o.get("precision"),d=o.get("distance")||0,f=a.getBaseAxis(),g=f.isHorizontal(),y=f.inverse,v=e.shape,m=y?g?v.x:v.y+v.height:g?v.x+v.width:v.y,_=(g?d:0)*(y?-1:1),x=(g?0:-d)*(y?-1:1),b=g?"x":"y",w=function(t,e,n){for(var i,r,o=t.length/2,a="x"===n?0:1,s=0,l=-1,u=0;u=e||i>=e&&r<=e){l=u;break}s=u,i=r}else i=r;return{range:[s,l],t:(e-i)/(r-i)}}(u,m,b),S=w.range,M=S[1]-S[0],I=void 0;if(M>=1){if(M>1&&!c){var T=Hw(u,S[0]);s.attr({x:T[0]+_,y:T[1]+x}),r&&(I=h.getRawValue(S[0]))}else{(T=l.getPointOn(m,b))&&s.attr({x:T[0]+_,y:T[1]+x});var C=h.getRawValue(S[0]),D=h.getRawValue(S[1]);r&&(I=Fr(n,p,C,D,w.t))}i.lastFrameIndex=S[0]}else{var A=1===t||i.lastFrameIndex>0?S[0]:0;T=Hw(u,A);r&&(I=h.getRawValue(A)),s.attr({x:T[0]+_,y:T[1]+x})}r&&_h(s).setLabelText(I)}},e.prototype._doUpdateAnimation=function(t,e,n,i,r,o){var a=this._polyline,s=this._polygon,l=t.hostModel,u=function(t,e,n,i,r,o,a,s){for(var l=function(t,e){var n=[];return e.diff(t).add((function(t){n.push({cmd:"+",idx:t})})).update((function(t,e){n.push({cmd:"=",idx:e,idx1:t})})).remove((function(t){n.push({cmd:"-",idx:t})})).execute(),n}(t,e),u=[],h=[],c=[],p=[],d=[],f=[],g=[],y=_w(r,e,a),v=t.getLayout("points")||[],m=e.getLayout("points")||[],_=0;_3e3||s&&Vw(c,d)>3e3)return a.setShape({points:p}),void(s&&s.setShape({points:p,stackedOnPoints:d}));a.shape.__points=u.current,a.shape.points=h;var f={shape:{points:p}};u.current!==h&&(f.shape.__points=u.next),a.stopAnimation(),Hu(a,f,l),s&&(s.setShape({points:h,stackedOnPoints:c}),s.stopAnimation(),Hu(s,{shape:{stackedOnPoints:d}},l),a.shape.points!==s.shape.points&&(s.shape.points=a.shape.points));for(var g=[],y=u.status,v=0;ve&&(e=t[n]);return isFinite(e)?e:NaN},min:function(t){for(var e=1/0,n=0;n10&&"cartesian2d"===o.type&&r){var s=o.getBaseAxis(),l=o.getOtherAxis(s),u=s.getExtent(),h=n.getDevicePixelRatio(),c=Math.abs(u[1]-u[0])*(h||1),p=Math.round(a/c);if(p>1){"lttb"===r&&t.setData(i.lttbDownSample(i.mapDimension(l.dim),1/p));var d=void 0;"string"==typeof r?d=Yw[r]:"function"==typeof r&&(d=r),d&&t.setData(i.downSample(i.mapDimension(l.dim),1/p,d,Zw))}}}}}var qw=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.getInitialData=function(t,e){return F_(this.getSource(),this,{useEncodeDefaulter:!0})},e.prototype.getMarkerPosition=function(t){var e=this.coordinateSystem;if(e){var n=e.dataToPoint(e.clampData(t)),i=this.getData(),r=i.getLayout("offset"),o=i.getLayout("size");return n[e.getBaseAxis().isHorizontal()?0:1]+=r+o/2,n}return[NaN,NaN]},e.type="series.__base_bar__",e.defaultOption={zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod"},e}(ff);ff.registerClass(qw);var Kw=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.getInitialData=function(){return F_(this.getSource(),this,{useEncodeDefaulter:!0,createInvertedIndices:!!this.get("realtimeSort",!0)||null})},e.prototype.getProgressive=function(){return!!this.get("large")&&this.get("progressive")},e.prototype.getProgressiveThreshold=function(){var t=this.get("progressiveThreshold"),e=this.get("largeThreshold");return e>t&&(t=e),t},e.prototype.brushSelector=function(t,e,n){return n.rect(e.getItemLayout(t))},e.type="series.bar",e.dependencies=["grid","polar"],e.defaultOption=zh(qw.defaultOption,{clip:!0,roundCap:!1,showBackground:!1,backgroundStyle:{color:"rgba(180, 180, 180, 0.2)",borderColor:null,borderWidth:0,borderType:"solid",borderRadius:0,shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,opacity:1},select:{itemStyle:{borderColor:"#212121"}},realtimeSort:!1}),e}(qw),$w=function(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=2*Math.PI,this.clockwise=!0},Jw=function(t){function e(e){var n=t.call(this,e)||this;return n.type="sausage",n}return n(e,t),e.prototype.getDefaultShape=function(){return new $w},e.prototype.buildPath=function(t,e){var n=e.cx,i=e.cy,r=Math.max(e.r0||0,0),o=Math.max(e.r,0),a=.5*(o-r),s=r+a,l=e.startAngle,u=e.endAngle,h=e.clockwise,c=Math.cos(l),p=Math.sin(l),d=Math.cos(u),f=Math.sin(u);(h?u-l<2*Math.PI:l-u<2*Math.PI)&&(t.moveTo(c*r+n,p*r+i),t.arc(c*s+n,p*s+i,a,-Math.PI+l,l,!h)),t.arc(n,i,o,l,u,!h),t.moveTo(d*o+n,f*o+i),t.arc(d*s+n,f*s+i,a,u-2*Math.PI,u-Math.PI,!h),0!==r&&(t.arc(n,i,r,u,l,h),t.moveTo(c*r+n,f*r+i)),t.closePath()},e}(Ka),Qw=[0,0],tS=Math.max,eS=Math.min;var nS=function(t){function e(){var n=t.call(this)||this;return n.type=e.type,n._isFirstFrame=!0,n}return n(e,t),e.prototype.render=function(t,e,n,i){this._model=t,this._removeOnRenderedListener(n),this._updateDrawMode(t);var r=t.get("coordinateSystem");("cartesian2d"===r||"polar"===r)&&(this._isLargeDraw?this._renderLarge(t,e,n):this._renderNormal(t,e,n,i))},e.prototype.incrementalPrepareRender=function(t){this._clear(),this._updateDrawMode(t),this._updateLargeClip(t)},e.prototype.incrementalRender=function(t,e){this._incrementalRenderLarge(t,e)},e.prototype._updateDrawMode=function(t){var e=t.pipelineContext.large;null!=this._isLargeDraw&&e===this._isLargeDraw||(this._isLargeDraw=e,this._clear())},e.prototype._renderNormal=function(t,e,n,i){var r,o=this.group,a=t.getData(),s=this._data,l=t.coordinateSystem,u=l.getBaseAxis();"cartesian2d"===l.type?r=u.isHorizontal():"polar"===l.type&&(r="angle"===u.dim);var h=t.isAnimationEnabled()?t:null,c=function(t,e){var n=t.get("realtimeSort",!0),i=e.getBaseAxis();0;if(n&&"category"===i.type&&"cartesian2d"===e.type)return{baseAxis:i,otherAxis:e.getOtherAxis(i)}}(t,l);c&&this._enableRealtimeSort(c,a,n);var p=t.get("clip",!0)||c,d=function(t,e){var n=t.getArea&&t.getArea();if(Nw(t,"cartesian2d")){var i=t.getBaseAxis();if("category"!==i.type||!i.onBand){var r=e.getLayout("bandWidth");i.isHorizontal()?(n.x-=r,n.width+=2*r):(n.y-=r,n.height+=2*r)}}return n}(l,a);o.removeClipPath();var f=t.get("roundCap",!0),g=t.get("showBackground",!0),y=t.getModel("backgroundStyle"),v=y.get("borderRadius")||0,m=[],_=this._backgroundEls,x=i&&i.isInitSort,b=i&&"changeAxisOrder"===i.type;function w(t){var e=aS[l.type](a,t),n=function(t,e,n){return new("polar"===t.type?Jl:ls)({shape:pS(e,n,t),silent:!0,z2:0})}(l,r,e);return n.useStyle(y.getItemStyle()),"cartesian2d"===l.type&&n.setShape("r",v),m[t]=n,n}a.diff(s).add((function(e){var n=a.getItemModel(e),i=aS[l.type](a,e,n);if(g&&w(e),a.hasValue(e)){var s=!1;p&&(s=iS[l.type](d,i));var y=rS[l.type](t,a,e,i,r,h,u.model,!1,f);sS(y,a,e,n,i,t,r,"polar"===l.type),x?y.attr({shape:i}):c?oS(c,h,y,i,e,r,!1,!1):Wu(y,{shape:i},t,e),a.setItemGraphicEl(e,y),o.add(y),y.ignore=s}})).update((function(e,n){var i=a.getItemModel(e),S=aS[l.type](a,e,i);if(g){var M=void 0;0===_.length?M=w(n):((M=_[n]).useStyle(y.getItemStyle()),"cartesian2d"===l.type&&M.setShape("r",v),m[e]=M);var I=aS[l.type](a,e);Hu(M,{shape:pS(r,I,l)},h,e)}var T=s.getItemGraphicEl(n);if(!a.hasValue(e))return o.remove(T),void(T=null);var C=!1;p&&(C=iS[l.type](d,S))&&o.remove(T),T||(T=rS[l.type](t,a,e,S,r,h,u.model,!!T,f)),b||sS(T,a,e,i,S,t,r,"polar"===l.type),x?T.attr({shape:S}):c?oS(c,h,T,S,e,r,!0,b):Hu(T,{shape:S},t,e,null),a.setItemGraphicEl(e,T),T.ignore=C,o.add(T)})).remove((function(e){var n=s.getItemGraphicEl(e);n&&Yu(n,t,e)})).execute();var S=this._backgroundGroup||(this._backgroundGroup=new Ei);S.removeAll();for(var M=0;Mo)return!0;o=u}return!1},e.prototype._isOrderDifferentInView=function(t,e){for(var n=e.scale,i=n.getExtent(),r=Math.max(0,i[0]),o=Math.min(i[1],n.getOrdinalMeta().categories.length-1);r<=o;++r)if(t.ordinalNumbers[r]!==n.getRawOrdinalNumber(r))return!0},e.prototype._updateSortWithinSameData=function(t,e,n,i){if(this._isOrderChangedWithinSameData(t,e,n)){var r=this._dataSort(t,n,e);this._isOrderDifferentInView(r,n)&&(this._removeOnRenderedListener(i),i.dispatchAction({type:"changeAxisOrder",componentType:n.dim+"Axis",axisId:n.index,sortInfo:r}))}},e.prototype._dispatchInitSort=function(t,e,n){var i=e.baseAxis,r=this._dataSort(t,i,(function(n){return t.get(t.mapDimension(e.otherAxis.dim),n)}));n.dispatchAction({type:"changeAxisOrder",componentType:i.dim+"Axis",isInitSort:!0,axisId:i.index,sortInfo:r,animation:{duration:0}})},e.prototype.remove=function(t,e){this._clear(this._model),this._removeOnRenderedListener(e)},e.prototype.dispose=function(t,e){this._removeOnRenderedListener(e)},e.prototype._removeOnRenderedListener=function(t){this._onRendered&&(t.getZr().off("rendered",this._onRendered),this._onRendered=null)},e.prototype._clear=function(t){var e=this.group,n=this._data;t&&t.isAnimationEnabled()&&n&&!this._isLargeDraw?(this._removeBackground(),this._backgroundEls=[],n.eachItemGraphicEl((function(e){Yu(e,t,_s(e).dataIndex)}))):e.removeAll(),this._data=null,this._isFirstFrame=!0},e.prototype._removeBackground=function(){this.group.remove(this._backgroundGroup),this._backgroundGroup=null},e.type="bar",e}(Tf),iS={cartesian2d:function(t,e){var n=e.width<0?-1:1,i=e.height<0?-1:1;n<0&&(e.x+=e.width,e.width=-e.width),i<0&&(e.y+=e.height,e.height=-e.height);var r=t.x+t.width,o=t.y+t.height,a=tS(e.x,t.x),s=eS(e.x+e.width,r),l=tS(e.y,t.y),u=eS(e.y+e.height,o),h=sr?s:a,e.y=c&&l>o?u:l,e.width=h?0:s-a,e.height=c?0:u-l,n<0&&(e.x+=e.width,e.width=-e.width),i<0&&(e.y+=e.height,e.height=-e.height),h||c},polar:function(t,e){var n=e.r0<=e.r?1:-1;if(n<0){var i=e.r;e.r=e.r0,e.r0=i}var r=eS(e.r,t.r),o=tS(e.r0,t.r0);e.r=r,e.r0=o;var a=r-o<0;if(n<0){i=e.r;e.r=e.r0,e.r0=i}return a}},rS={cartesian2d:function(t,e,n,i,r,o,a,s,l){var u=new ls({shape:I({},i),z2:1});(u.__dataIndex=n,u.name="item",o)&&(u.shape[r?"height":"width"]=0);return u},polar:function(t,e,n,i,r,o,a,s,l){var u=i.startAngle0?1:-1,a=i.height>0?1:-1;return{x:i.x+o*r/2,y:i.y+a*r/2,width:i.width-o*r,height:i.height-a*r}},polar:function(t,e,n){var i=t.getItemLayout(e);return{cx:i.cx,cy:i.cy,r0:i.r0,r:i.r,startAngle:i.startAngle,endAngle:i.endAngle}}};function sS(t,e,n,i,r,o,a,s){var l=e.getItemVisual(n,"style");s||t.setShape("r",i.get(["itemStyle","borderRadius"])||0),t.useStyle(l);var u=i.getShallow("cursor");if(u&&t.attr("cursor",u),!s){var h=a?r.height>0?"bottom":"top":r.width>0?"left":"right",c=ch(i);hh(t,c,{labelFetcher:o,labelDataIndex:n,defaultText:cw(o.getData(),n),inheritColor:l.fill,defaultOpacity:l.opacity,defaultOutsidePosition:h}),xh(t.getTextContent(),c,o.getRawValue(n),(function(t){return pw(e,t)}))}var p=i.getModel(["emphasis"]);sl(t,p.get("focus"),p.get("blurScope")),cl(t,i),function(t){return null!=t.startAngle&&null!=t.endAngle&&t.startAngle===t.endAngle}(r)&&(t.style.fill="none",t.style.stroke="none",P(t.states,(function(t){t.style&&(t.style.fill=t.style.stroke="none")})))}var lS=function(){},uS=function(t){function e(e){var n=t.call(this,e)||this;return n.type="largeBar",n}return n(e,t),e.prototype.getDefaultShape=function(){return new lS},e.prototype.buildPath=function(t,e){for(var n=e.points,i=this.__startPoint,r=this.__baseDimIdx,o=0;o=c&&y<=p&&(l<=v?h>=l&&h<=v:h>=v&&h<=l))return a[d]}return-1}(this,t.offsetX,t.offsetY);_s(this).dataIndex=e>=0?e:null}),30,!1);function pS(t,e,n){if(Nw(n,"cartesian2d")){var i=e,r=n.getArea();return{x:t?i.x:r.x,y:t?r.y:i.y,width:t?i.width:r.width,height:t?r.height:i.height}}var o=e;return{cx:(r=n.getArea()).cx,cy:r.cy,r0:t?r.r0:o.r0,r:t?r.r:o.r,startAngle:t?o.startAngle:0,endAngle:t?o.endAngle:2*Math.PI}}var dS=2*Math.PI,fS=Math.PI/180;function gS(t,e,n){e.eachSeriesByType(t,(function(t){var e=t.getData(),i=e.mapDimension("value"),r=function(t,e){return Vc(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}(t,n),o=t.get("center"),a=t.get("radius");F(a)||(a=[0,a]),F(o)||(o=[o,o]);var s=Zi(r.width,n.getWidth()),l=Zi(r.height,n.getHeight()),u=Math.min(s,l),h=Zi(o[0],s)+r.x,c=Zi(o[1],l)+r.y,p=Zi(a[0],u/2),d=Zi(a[1],u/2),f=-t.get("startAngle")*fS,g=t.get("minAngle")*fS,y=0;e.each(i,(function(t){!isNaN(t)&&y++}));var v=e.getSum(i),m=Math.PI/(v||y)*2,_=t.get("clockwise"),x=t.get("roseType"),b=t.get("stillShowZeroSum"),w=e.getDataExtent(i);w[0]=0;var S=dS,M=0,I=f,T=_?1:-1;if(e.setLayout({viewRect:r,r:d}),e.each(i,(function(t,n){var i;if(isNaN(t))e.setItemLayout(n,{angle:NaN,startAngle:NaN,endAngle:NaN,clockwise:_,cx:h,cy:c,r0:p,r:x?NaN:d});else{(i="area"!==x?0===v&&b?m:t*m:dS/y)n?a:o,h=Math.abs(l.label.y-n);if(h>u.maxY){var c=l.label.x-e-l.len2*r,p=i+l.len,f=Math.abs(c)0?"right":"left":L>0?"left":"right"}var F=y.get("rotate");if(O="number"==typeof F?F*(Math.PI/180):F?L<0?-A+Math.PI:-A:0,o=!!O,p.x=I,p.y=T,p.rotation=O,p.setStyle({verticalAlign:"middle"}),R){p.setStyle({align:D});var G=p.states.select;G&&(G.x+=p.x,G.y+=p.y)}else{var H=p.getBoundingRect().clone();H.applyTransform(p.getComputedTransform());var W=(p.style.margin||0)+2.1;H.y-=W/2,H.height+=W,r.push({label:p,labelLine:f,position:v,len:S,len2:M,minTurnAngle:w.get("minTurnAngle"),maxSurfaceAngle:w.get("maxSurfaceAngle"),surfaceNormal:new ai(L,k),linePoints:C,textAlign:D,labelDistance:m,labelAlignTo:_,edgeDistance:x,bleedMargin:b,rect:H})}s.setTextConfig({inside:R})}})),!o&&t.get("avoidLabelOverlap")&&function(t,e,n,i,r,o,a,s){for(var l=[],u=[],h=Number.MAX_VALUE,c=-Number.MAX_VALUE,p=0;p0){for(var l=o.getItemLayout(0),u=1;isNaN(l&&l.startAngle)&&u=n.r0}},e.type="pie",e}(Tf);function MS(t,e,n){e=F(e)&&{coordDimensions:e}||I({},e);var i=t.getSource(),r=O_(i,e),o=new L_(r,t);return o.initData(i,n),o}var IS=function(){function t(t,e){this._getDataWithEncodedVisual=t,this._getRawData=e}return t.prototype.getAllNames=function(){var t=this._getRawData();return t.mapArray(t.getName)},t.prototype.containName=function(t){return this._getRawData().indexOfName(t)>=0},t.prototype.indexOfName=function(t){return this._getDataWithEncodedVisual().indexOfName(t)},t.prototype.getItemVisual=function(t,e){return this._getDataWithEncodedVisual().getItemVisual(t,e)},t}(),TS=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.useColorPaletteOnData=!0,e}return n(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments),this.legendVisualProvider=new IS(V(this.getData,this),V(this.getRawData,this)),this._defaultLabelLine(e)},e.prototype.mergeOption=function(){t.prototype.mergeOption.apply(this,arguments)},e.prototype.getInitialData=function(){return MS(this,{coordDimensions:["value"],encodeDefaulter:B(up,this)})},e.prototype.getDataParams=function(e){var n=this.getData(),i=t.prototype.getDataParams.call(this,e),r=[];return n.each(n.mapDimension("value"),(function(t){r.push(t)})),i.percent=Qi(r,e,n.hostModel.get("percentPrecision")),i.$vars.push("percent"),i},e.prototype._defaultLabelLine=function(t){br(t,"labelLine",["show"]);var e=t.labelLine,n=t.emphasis.labelLine;e.show=e.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},e.type="series.pie",e.defaultOption={zlevel:0,z:2,legendHoverLink:!0,center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,minShowLabelAngle:0,selectedOffset:10,percentPrecision:2,stillShowZeroSum:!0,left:0,top:0,right:0,bottom:0,width:null,height:null,label:{rotate:0,show:!0,overflow:"truncate",position:"outer",alignTo:"none",edgeDistance:"25%",bleedMargin:10,distanceToLabelLine:5},labelLine:{show:!0,length:15,length2:15,smooth:!1,minTurnAngle:90,maxSurfaceAngle:90,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1},labelLayout:{hideOverlap:!0},emphasis:{scale:!0,scaleSize:5},avoidLabelOverlap:!0,animationType:"expansion",animationDuration:1e3,animationTypeUpdate:"transition",animationEasingUpdate:"cubicInOut",animationDurationUpdate:500,animationEasing:"cubicInOut"},e}(ff);var CS=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n}return n(e,t),e.prototype.getInitialData=function(t,e){return F_(this.getSource(),this,{useEncodeDefaulter:!0})},e.prototype.getProgressive=function(){var t=this.option.progressive;return null==t?this.option.large?5e3:this.get("progressive"):t},e.prototype.getProgressiveThreshold=function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?1e4:this.get("progressiveThreshold"):t},e.prototype.brushSelector=function(t,e,n){return n.point(e.getItemLayout(t))},e.type="series.scatter",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,symbolSize:10,large:!1,largeThreshold:2e3,itemStyle:{opacity:.8},emphasis:{scale:!0},clip:!0,select:{itemStyle:{borderColor:"#212121"}}},e}(ff),DS=function(){},AS=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultShape=function(){return new DS},e.prototype.buildPath=function(t,e){var n=e.points,i=e.size,r=this.symbolProxy,o=r.shape,a=t.getContext?t.getContext():t;if(a&&i[0]<4)this._ctx=a;else{this._ctx=null;for(var s=0;s=0;s--){var l=2*s,u=i[l]-o/2,h=i[l+1]-a/2;if(t>=u&&e>=h&&t<=u+o&&e<=h+a)return s}return-1},e}(Ka),LS=function(){function t(){this.group=new Ei}return t.prototype.isPersistent=function(){return!this._incremental},t.prototype.updateData=function(t,e){this.group.removeAll();var n=new AS({rectHover:!0,cursor:"default"});n.setShape({points:t.getLayout("points")}),this._setCommon(n,t,!1,e),this.group.add(n),this._incremental=null},t.prototype.updateLayout=function(t){if(!this._incremental){var e=t.getLayout("points");this.group.eachChild((function(t){if(null!=t.startIndex){var n=2*(t.endIndex-t.startIndex),i=4*t.startIndex*2;e=new Float32Array(e.buffer,i,n)}t.setShape("points",e)}))}},t.prototype.incrementalPrepareUpdate=function(t){this.group.removeAll(),this._clearIncremental(),t.count()>2e6?(this._incremental||(this._incremental=new Tu({silent:!0})),this.group.add(this._incremental)):this._incremental=null},t.prototype.incrementalUpdate=function(t,e,n){var i;this._incremental?(i=new AS,this._incremental.addDisplayable(i,!0)):((i=new AS({rectHover:!0,cursor:"default",startIndex:t.start,endIndex:t.end})).incremental=!0,this.group.add(i)),i.setShape({points:e.getLayout("points")}),this._setCommon(i,e,!!this._incremental,n)},t.prototype._setCommon=function(t,e,n,i){var r=e.hostModel;i=i||{};var o=e.getVisual("symbolSize");t.setShape("size",o instanceof Array?o:[o,o]),t.softClipShape=i.clipShape||null,t.symbolProxy=fy(e.getVisual("symbol"),0,0,0,0),t.setColor=t.symbolProxy.setColor;var a=t.shape.size[0]<4;t.useStyle(r.getModel("itemStyle").getItemStyle(a?["color","shadowBlur","shadowColor"]:["color"]));var s=e.getVisual("style"),l=s&&s.fill;if(l&&t.setColor(l),!n){var u=_s(t);u.seriesIndex=r.seriesIndex,t.on("mousemove",(function(e){u.dataIndex=null;var n=t.findDataIndex(e.offsetX,e.offsetY);n>=0&&(u.dataIndex=n+(t.startIndex||0))}))}},t.prototype.remove=function(){this._clearIncremental(),this._incremental=null,this.group.removeAll()},t.prototype._clearIncremental=function(){var t=this._incremental;t&&t.clearDisplaybles()},t}(),kS=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=t.getData();this._updateSymbolDraw(i,t).updateData(i,{clipShape:this._getClipShape(t)}),this._finished=!0},e.prototype.incrementalPrepareRender=function(t,e,n){var i=t.getData();this._updateSymbolDraw(i,t).incrementalPrepareUpdate(i),this._finished=!1},e.prototype.incrementalRender=function(t,e,n){this._symbolDraw.incrementalUpdate(t,e.getData(),{clipShape:this._getClipShape(e)}),this._finished=t.end===e.getData().count()},e.prototype.updateTransform=function(t,e,n){var i=t.getData();if(this.group.dirty(),!this._finished||i.count()>1e4||!this._symbolDraw.isPersistent())return{update:!0};var r=Xw("").reset(t,e,n);r.progress&&r.progress({start:0,end:i.count(),count:i.count()},i),this._symbolDraw.updateLayout(i)},e.prototype._getClipShape=function(t){var e=t.coordinateSystem,n=e&&e.getArea&&e.getArea();return t.get("clip",!0)?n:null},e.prototype._updateSymbolDraw=function(t,e){var n=this._symbolDraw,i=e.pipelineContext.large;return n&&i===this._isLargeDraw||(n&&n.remove(),n=this._symbolDraw=i?new LS:new mw,this._isLargeDraw=i,this.group.removeAll()),this.group.add(n.group),n},e.prototype.remove=function(t,e){this._symbolDraw&&this._symbolDraw.remove(!0),this._symbolDraw=null},e.prototype.dispose=function(){},e.type="scatter",e}(Tf),PS=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.type="grid",e.dependencies=["xAxis","yAxis"],e.layoutMode="box",e.defaultOption={show:!1,zlevel:0,z:0,left:"10%",top:60,right:"10%",bottom:70,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"},e}(Xc),OS=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getCoordSysModel=function(){return this.getReferringComponents("grid",Nr).models[0]},e.type="cartesian2dAxis",e}(Xc);L(OS,Yx);var RS={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},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#6E7079",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#E0E6F1"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(210,219,238,0.2)"]}}},NS=S({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},RS),zS=S({boundaryGap:[0,0],axisLine:{show:"auto"},axisTick:{show:"auto"},splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#F4F7FD",width:1}}},RS),ES={category:NS,value:zS,time:S({scale:!0,splitNumber:6,axisLabel:{showMinLabel:!1,showMaxLabel:!1,rich:{primary:{fontWeight:"bold"}}},splitLine:{show:!1}},zS),log:T({scale:!0,logBase:10},zS)},VS={value:1,category:1,time:1,log:1};function BS(t,e,i,r){P(VS,(function(o,a){var s=S(S({},ES[a],!0),r,!0),l=function(t){function i(){for(var n=[],i=0;ie[1]&&e.reverse(),e},e.prototype.pointToData=function(t,e){return this.coordToData(this.toLocalCoord(t["x"===this.dim?0:1]),e)},e.prototype.setCategorySortInfo=function(t){if("category"!==this.type)return!1;this.model.option.categorySortInfo=t,this.scale.setSortInfo(t)},e}(hb);function YS(t,e,n){n=n||{};var i=t.coordinateSystem,r=e.axis,o={},a=r.getAxesOnZeroOf()[0],s=r.position,l=a?"onZero":s,u=r.dim,h=i.getRect(),c=[h.x,h.x+h.width,h.y,h.y+h.height],p={left:0,right:1,top:0,bottom:1,onZero:2},d=e.get("offset")||0,f="x"===u?[c[2]-d,c[3]+d]:[c[0]-d,c[1]+d];if(a){var g=a.toGlobalCoord(a.dataToCoord(0));f[p.onZero]=Math.max(Math.min(g,f[1]),f[0])}o.position=["y"===u?f[p[l]]:c[0],"x"===u?f[p[l]]:c[3]],o.rotation=Math.PI/2*("x"===u?0:1);o.labelDirection=o.tickDirection=o.nameDirection={top:-1,bottom:1,left:-1,right:1}[s],o.labelOffset=a?f[p[s]]-f[p.onZero]:0,e.get(["axisTick","inside"])&&(o.tickDirection=-o.tickDirection),Q(n.labelInside,e.get(["axisLabel","inside"]))&&(o.labelDirection=-o.labelDirection);var y=e.get(["axisLabel","rotate"]);return o.labelRotate="top"===l?-y:y,o.z2=1,o}function ZS(t){return"cartesian2d"===t.get("coordinateSystem")}function jS(t){var e={xAxisModel:null,yAxisModel:null};return P(e,(function(n,i){var r=i.replace(/Model$/,""),o=t.getReferringComponents(r,Nr).models[0];e[i]=o})),e}var qS=function(){function t(t,e,n){this.type="grid",this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this.axisPointerEnabled=!0,this.dimensions=HS,this._initCartesian(t,e,n),this.model=t}return t.prototype.getRect=function(){return this._rect},t.prototype.update=function(t,e){var n=this._axesMap;this._updateScale(t,this.model),P(n.x,(function(t){Vx(t.scale,t.model)})),P(n.y,(function(t){Vx(t.scale,t.model)}));var i={};P(n.x,(function(t){$S(n,"y",t,i)})),P(n.y,(function(t){$S(n,"x",t,i)})),this.resize(this.model,e)},t.prototype.resize=function(t,e,n){var i=t.getBoxLayoutParams(),r=!n&&t.get("containLabel"),o=Vc(i,{width:e.getWidth(),height:e.getHeight()});this._rect=o;var a=this._axesList;function s(){P(a,(function(t){var e=t.isHorizontal(),n=e?[0,o.width]:[0,o.height],i=t.inverse?1:0;t.setExtent(n[i],n[1-i]),function(t,e){var n=t.getExtent(),i=n[0]+n[1];t.toGlobalCoord="x"===t.dim?function(t){return t+e}:function(t){return i-t+e},t.toLocalCoord="x"===t.dim?function(t){return t-e}:function(t){return i-t+e}}(t,e?o.x:o.y)}))}s(),r&&(P(a,(function(t){if(!t.model.get(["axisLabel","inside"])){var e=function(t){var e=t.model,n=t.scale;if(e.get(["axisLabel","show"])&&!n.isBlank()){var i,r,o=n.getExtent();r=n instanceof $_?n.count():(i=n.getTicks()).length;var a,s=t.getLabelModel(),l=Fx(t),u=1;r>40&&(u=Math.ceil(r/40));for(var h=0;h0&&i>0||n<0&&i<0)}(t)}var QS=Math.PI,tM=function(){function t(t,e){this.group=new Ei,this.opt=e,this.axisModel=t,T(e,{labelOffset:0,nameDirection:1,tickDirection:1,labelDirection:1,silent:!0,handleAutoShown:function(){return!0}});var n=new Ei({x:e.position[0],y:e.position[1],rotation:e.rotation});n.updateTransform(),this._transformGroup=n}return t.prototype.hasBuilder=function(t){return!!eM[t]},t.prototype.add=function(t){eM[t](this.opt,this.axisModel,this.group,this._transformGroup)},t.prototype.getGroup=function(){return this.group},t.innerTextLayout=function(t,e,n){var i,r,o=nr(e-t);return ir(o)?(r=n>0?"top":"bottom",i="center"):ir(o-QS)?(r=n>0?"bottom":"top",i="center"):(r="middle",i=o>0&&o0?"right":"left":n>0?"left":"right"),{rotation:o,textAlign:i,textVerticalAlign:r}},t.makeAxisEventDataBase=function(t){var e={componentType:t.mainType,componentIndex:t.componentIndex};return e[t.mainType+"Index"]=t.componentIndex,e},t.isLabelSilent=function(t){var e=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||e&&e.show)},t}(),eM={axisLine:function(t,e,n,i){var r=e.get(["axisLine","show"]);if("auto"===r&&t.handleAutoShown&&(r=t.handleAutoShown("axisLine")),r){var o=e.axis.getExtent(),a=i.transform,s=[o[0],0],l=[o[1],0];a&&(Rt(s,s,a),Rt(l,l,a));var u=I({lineCap:"round"},e.getModel(["axisLine","lineStyle"]).getLineStyle()),h=new uu({subPixelOptimize:!0,shape:{x1:s[0],y1:s[1],x2:l[0],y2:l[1]},style:u,strokeContainThreshold:t.strokeContainThreshold||5,silent:!0,z2:1});h.anid="line",n.add(h);var c=e.get(["axisLine","symbol"]),p=e.get(["axisLine","symbolSize"]),d=e.get(["axisLine","symbolOffset"])||0;if("number"==typeof d&&(d=[d,d]),null!=c){"string"==typeof c&&(c=[c,c]),"string"!=typeof p&&"number"!=typeof p||(p=[p,p]);var f=p[0],g=p[1];P([{rotate:t.rotation+Math.PI/2,offset:d[0],r:0},{rotate:t.rotation-Math.PI/2,offset:d[1],r:Math.sqrt((s[0]-l[0])*(s[0]-l[0])+(s[1]-l[1])*(s[1]-l[1]))}],(function(e,i){if("none"!==c[i]&&null!=c[i]){var r=fy(c[i],-f/2,-g/2,f,g,u.stroke,!0),o=e.r+e.offset;r.attr({rotation:e.rotate,x:s[0]+o*Math.cos(t.rotation),y:s[1]-o*Math.sin(t.rotation),silent:!0,z2:11}),n.add(r)}}))}}},axisTickLabel:function(t,e,n,i){var r=function(t,e,n,i){var r=n.axis,o=n.getModel("axisTick"),a=o.get("show");"auto"===a&&i.handleAutoShown&&(a=i.handleAutoShown("axisTick"));if(!a||r.scale.isBlank())return;for(var s=o.getModel("lineStyle"),l=i.tickDirection*o.get("length"),u=oM(r.getTicksCoords(),e.transform,l,T(s.getLineStyle(),{stroke:n.get(["axisLine","lineStyle","color"])}),"ticks"),h=0;hc[1]?-1:1,d=["start"===s?c[0]-p*h:"end"===s?c[1]+p*h:(c[0]+c[1])/2,rM(s)?t.labelOffset+l*h:0],f=e.get("nameRotate");null!=f&&(f=f*QS/180),rM(s)?o=tM.innerTextLayout(t.rotation,null!=f?f:t.rotation,l):(o=function(t,e,n,i){var r,o,a=nr(n-t),s=i[0]>i[1],l="start"===e&&!s||"start"!==e&&s;ir(a-QS/2)?(o=l?"bottom":"top",r="center"):ir(a-1.5*QS)?(o=l?"top":"bottom",r="center"):(o="middle",r=a<1.5*QS&&a>QS/2?l?"left":"right":l?"right":"left");return{rotation:a,textAlign:r,textVerticalAlign:o}}(t.rotation,s,f||0,c),null!=(a=t.axisNameAvailableWidth)&&(a=Math.abs(a/Math.sin(o.rotation)),!isFinite(a)&&(a=null)));var g=u.getFont(),y=e.get("nameTruncate",!0)||{},v=y.ellipsis,m=Q(t.nameTruncateMaxWidth,y.maxWidth,a),_=new cs({x:d[0],y:d[1],rotation:o.rotation,silent:tM.isLabelSilent(e),style:ph(u,{text:r,font:g,overflow:"truncate",width:m,ellipsis:v,fill:u.getTextColor()||e.get(["axisLine","lineStyle","color"]),align:u.get("align")||o.textAlign,verticalAlign:u.get("verticalAlign")||o.textVerticalAlign}),z2:1});if(oh({el:_,componentModel:e,itemName:r}),_.__fullText=r,_.anid="name",e.get("triggerEvent")){var x=tM.makeAxisEventDataBase(e);x.targetType="axisName",x.name=r,_s(_).eventData=x}i.add(_),_.updateTransform(),n.add(_),_.decomposeTransform()}}};function nM(t){t&&(t.ignore=!0)}function iM(t,e){var n=t&&t.getBoundingRect().clone(),i=e&&e.getBoundingRect().clone();if(n&&i){var r=Gn([]);return Xn(r,r,-t.rotation),n.applyTransform(Wn([],r,t.getLocalTransform())),i.applyTransform(Wn([],r,e.getLocalTransform())),n.intersect(i)}}function rM(t){return"middle"===t||"center"===t}function oM(t,e,n,i,r){for(var o=[],a=[],s=[],l=0;l=0||t===e}function lM(t){var e=uM(t);if(e){var n=e.axisPointerModel,i=e.axis.scale,r=n.option,o=n.get("status"),a=n.get("value");null!=a&&(a=i.parse(a));var s=hM(n);null==o&&(r.status=s?"show":"hide");var l=i.getExtent().slice();l[0]>l[1]&&l.reverse(),(null==a||a>l[1])&&(a=l[1]),a0&&!c.min?c.min=0:null!=c.min&&c.min<0&&!c.max&&(c.max=0);var p=a;null!=c.color&&(p=T({color:c.color},a));var d=S(w(c),{boundaryGap:t,splitNumber:e,scale:n,axisLine:i,axisTick:r,axisLabel:o,name:c.text,nameLocation:"end",nameGap:u,nameTextStyle:p,triggerEvent:h},!1);if(s||(d.name=""),"string"==typeof l){var f=d.name;d.name=l.replace("{value}",null!=f?f:"")}else"function"==typeof l&&(d.name=l(d.name,d));var g=new Oh(d,null,this.ecModel);return L(g,Yx.prototype),g.mainType="radar",g.componentIndex=this.componentIndex,g}),this);this._indicatorModels=c},e.prototype.getIndicatorModels=function(){return this._indicatorModels},e.type="radar",e.defaultOption={zlevel:0,z:0,center:["50%","50%"],radius:"75%",startAngle:90,axisName:{show:!0},boundaryGap:[0,0],splitNumber:5,axisNameGap:15,scale:!1,shape:"polygon",axisLine:S({lineStyle:{color:"#bbb"}},PM.axisLine),axisLabel:OM(PM.axisLabel,!1),axisTick:OM(PM.axisTick,!1),splitLine:OM(PM.splitLine,!0),splitArea:OM(PM.splitArea,!0),indicator:[]},e}(Xc),NM=["axisLine","axisTickLabel","axisName"],zM=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){this.group.removeAll(),this._buildAxes(t),this._buildSplitLineAndArea(t)},e.prototype._buildAxes=function(t){var e=t.coordinateSystem;P(O(e.getIndicatorAxes(),(function(t){return new tM(t.model,{position:[e.cx,e.cy],rotation:t.angle,labelDirection:-1,tickDirection:-1,nameDirection:1})})),(function(t){P(NM,t.add,t),this.group.add(t.getGroup())}),this)},e.prototype._buildSplitLineAndArea=function(t){var e=t.coordinateSystem,n=e.getIndicatorAxes();if(n.length){var i=t.get("shape"),r=t.getModel("splitLine"),o=t.getModel("splitArea"),a=r.getModel("lineStyle"),s=o.getModel("areaStyle"),l=r.get("show"),u=o.get("show"),h=a.get("color"),c=s.get("color"),p=F(h)?h:[h],d=F(c)?c:[c],f=[],g=[];if("circle"===i)for(var y=n[0].getTicksCoords(),v=e.cx,m=e.cy,_=0;_n[0]&&isFinite(c)&&isFinite(n[0]))}else{a.getTicks().length-1>r&&(u=o(u));c=ji((h=Math.ceil(n[1]/u)*u)-u*r);a.setExtent(c,h),a.setInterval(u)}}))},t.prototype.convertToPixel=function(t,e,n){return console.warn("Not implemented."),null},t.prototype.convertFromPixel=function(t,e,n){return console.warn("Not implemented."),null},t.prototype.containPoint=function(t){return console.warn("Not implemented."),!1},t.create=function(e,n){var i=[];return e.eachComponent("radar",(function(r){var o=new t(r,e,n);i.push(o),r.coordinateSystem=o})),e.eachSeriesByType("radar",(function(t){"radar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("radarIndex")||0])})),i},t.dimensions=[],t}();function BM(t){t.registerCoordinateSystem("radar",VM),t.registerComponentModel(RM),t.registerComponentView(zM),t.registerVisual({seriesType:"radar",reset:function(t){var e=t.getData();e.each((function(t){e.setItemVisual(t,"legendIcon","roundRect")})),e.setVisual("legendIcon","roundRect")}})}var FM="\0_ec_interaction_mutex";function GM(t,e){return!!HM(t)[e]}function HM(t){return t[FM]||(t[FM]={})}Hm({type:"takeGlobalCursor",event:"globalCursorTaken",update:"update"},(function(){}));var WM=function(t){function e(e){var n=t.call(this)||this;n._zr=e;var i=V(n._mousedownHandler,n),r=V(n._mousemoveHandler,n),o=V(n._mouseupHandler,n),a=V(n._mousewheelHandler,n),s=V(n._pinchHandler,n);return n.enable=function(t,n){this.disable(),this._opt=T(w(n)||{},{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),null==t&&(t=!0),!0!==t&&"move"!==t&&"pan"!==t||(e.on("mousedown",i),e.on("mousemove",r),e.on("mouseup",o)),!0!==t&&"scale"!==t&&"zoom"!==t||(e.on("mousewheel",a),e.on("pinch",s))},n.disable=function(){e.off("mousedown",i),e.off("mousemove",r),e.off("mouseup",o),e.off("mousewheel",a),e.off("pinch",s)},n}return n(e,t),e.prototype.isDragging=function(){return this._dragging},e.prototype.isPinching=function(){return this._pinching},e.prototype.setPointerChecker=function(t){this.pointerChecker=t},e.prototype.dispose=function(){this.disable()},e.prototype._mousedownHandler=function(t){if(!(ne(t)||t.target&&t.target.draggable)){var e=t.offsetX,n=t.offsetY;this.pointerChecker&&this.pointerChecker(t,e,n)&&(this._x=e,this._y=n,this._dragging=!0)}},e.prototype._mousemoveHandler=function(t){if(this._dragging&&YM("moveOnMouseMove",t,this._opt)&&"pinch"!==t.gestureEvent&&!GM(this._zr,"globalPan")){var e=t.offsetX,n=t.offsetY,i=this._x,r=this._y,o=e-i,a=n-r;this._x=e,this._y=n,this._opt.preventDefaultMouseMove&&ee(t.event),XM(this,"pan","moveOnMouseMove",t,{dx:o,dy:a,oldX:i,oldY:r,newX:e,newY:n,isAvailableBehavior:null})}},e.prototype._mouseupHandler=function(t){ne(t)||(this._dragging=!1)},e.prototype._mousewheelHandler=function(t){var e=YM("zoomOnMouseWheel",t,this._opt),n=YM("moveOnMouseWheel",t,this._opt),i=t.wheelDelta,r=Math.abs(i),o=t.offsetX,a=t.offsetY;if(0!==i&&(e||n)){if(e){var s=r>3?1.4:r>1?1.2:1.1;UM(this,"zoom","zoomOnMouseWheel",t,{scale:i>0?s:1/s,originX:o,originY:a,isAvailableBehavior:null})}if(n){var l=Math.abs(i);UM(this,"scrollMove","moveOnMouseWheel",t,{scrollDelta:(i>0?1:-1)*(l>3?.4:l>1?.15:.05),originX:o,originY:a,isAvailableBehavior:null})}}},e.prototype._pinchHandler=function(t){GM(this._zr,"globalPan")||UM(this,"zoom",null,t,{scale:t.pinchScale>1?1.1:1/1.1,originX:t.pinchX,originY:t.pinchY,isAvailableBehavior:null})},e}(Ft);function UM(t,e,n,i,r){t.pointerChecker&&t.pointerChecker(i,r.originX,r.originY)&&(ee(i.event),XM(t,e,n,i,r))}function XM(t,e,n,i,r){r.isAvailableBehavior=V(YM,null,n,i),t.trigger(e,r)}function YM(t,e,n){var i=n[t];return!t||i&&(!H(i)||e.event[i+"Key"])}function ZM(t,e,n){var i=t.target;i.x+=e,i.y+=n,i.dirty()}function jM(t,e,n,i){var r=t.target,o=t.zoomLimit,a=t.zoom=t.zoom||1;if(a*=e,o){var s=o.min||0,l=o.max||1/0;a=Math.max(Math.min(l,a),s)}var u=a/t.zoom;t.zoom=a,r.x-=(n-r.x)*(u-1),r.y-=(i-r.y)*(u-1),r.scaleX*=u,r.scaleY*=u,r.dirty()}var qM={axisPointer:1,tooltip:1,brush:1};function KM(t,e,n){var i=e.getComponentByElement(t.topTarget),r=i&&i.coordinateSystem;return i&&i!==n&&!qM.hasOwnProperty(i.mainType)&&r&&r.model!==n}var $M=["rect","circle","line","ellipse","polygon","polyline","path"],JM=ht($M),QM=ht($M.concat(["g"])),tI=ht($M.concat(["g"])),eI=kr();function nI(t){var e=t.getItemStyle(),n=t.get("areaColor");return null!=n&&(e.fill=n),e}var iI=function(){function t(t){var e=new Ei;this.uid=Nh("ec_map_draw"),this._controller=new WM(t.getZr()),this._controllerHost={target:e},this.group=e,e.add(this._regionsGroup=new Ei),e.add(this._svgGroup=new Ei)}return t.prototype.draw=function(t,e,n,i,r){var o="geo"===t.mainType,a=t.getData&&t.getData();o&&e.eachComponent({mainType:"series",subType:"map"},(function(e){a||e.getHostGeoModel()!==t||(a=e.getData())}));var s=t.coordinateSystem,l=this._regionsGroup,u=this.group,h=s.getTransformInfo(),c=h.raw,p=h.roam;!l.childAt(0)||r?(u.x=p.x,u.y=p.y,u.scaleX=p.scaleX,u.scaleY=p.scaleY,u.dirty()):Hu(u,p,t);var d=a&&a.getVisual("visualMeta")&&a.getVisual("visualMeta").length>0,f={api:n,geo:s,mapOrGeoModel:t,data:a,isVisualEncodedByVisualMap:d,isGeo:o,transformInfoRaw:c};"geoJSON"===s.resourceType?this._buildGeoJSON(f):"geoSVG"===s.resourceType&&this._buildSVG(f),this._updateController(t,e,n),this._updateMapSelectHandler(t,l,n,i)},t.prototype._buildGeoJSON=function(t){var e=this._regionsGroupByName=ht(),n=ht(),i=this._regionsGroup,r=t.transformInfoRaw,o=t.mapOrGeoModel,a=t.data,s=function(t){return[t[0]*r.scaleX+r.x,t[1]*r.scaleY+r.y]};i.removeAll(),P(t.geo.regions,(function(r){var l=r.name,u=e.get(l),h=n.get(l)||{},c=h.dataIdx,p=h.regionModel;u||(u=e.set(l,new Ei),i.add(u),c=a?a.indexOfName(l):null,p=t.isGeo?o.getRegionModel(l):a?a.getItemModel(c):null,n.set(l,{dataIdx:c,regionModel:p}));var d=new yu({segmentIgnoreThreshold:1,shape:{paths:[]}});u.add(d),P(r.geometries,(function(t){if("polygon"===t.type){for(var e=[],n=0;n=0)&&(p=r);var d=a?{normal:{align:"center",verticalAlign:"middle"}}:null;hh(e,ch(i),{labelFetcher:p,labelDataIndex:c,defaultText:n},d);var f=e.getTextContent();if(f&&(eI(f).ignore=f.ignore,e.textConfig&&a)){var g=e.getBoundingRect().clone();e.textConfig.layoutRect=g,e.textConfig.position=[(a[0]-g.x)/g.width*100+"%",(a[1]-g.y)/g.height*100+"%"]}e.disableLabelAnimation=!0}else e.removeTextContent(),e.removeTextConfig(),e.disableLabelAnimation=null}function aI(t,e,n,i,r,o){t.data?t.data.setItemGraphicEl(o,e):_s(e).eventData={componentType:"geo",componentIndex:r.componentIndex,geoIndex:r.componentIndex,name:n,region:i&&i.option||{}}}function sI(t,e,n,i,r){t.data||oh({el:e,componentModel:r,itemName:n,itemTooltipOption:i.get("tooltip")})}function lI(t,e,n,i,r){e.highDownSilentOnTouch=!!r.get("selectedMode");var o=i.getModel("emphasis"),a=o.get("focus");return sl(e,a,o.get("blurScope")),t.isGeo&&function(t,e,n){var i=_s(t);i.componentMainType=e.mainType,i.componentIndex=e.componentIndex,i.componentHighDownName=n}(e,r,n),a}var uI=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n,i){if(!i||"mapToggleSelect"!==i.type||i.from!==this.uid){var r=this.group;if(r.removeAll(),!t.getHostGeoModel()){if(this._mapDraw&&i&&"geoRoam"===i.type&&this._mapDraw.resetForLabelLayout(),i&&"geoRoam"===i.type&&"series"===i.componentType&&i.seriesId===t.id)(o=this._mapDraw)&&r.add(o.group);else if(t.needsDrawMap){var o=this._mapDraw||new iI(n);r.add(o.group),o.draw(t,e,n,this,i),this._mapDraw=o}else this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null;t.get("showLegendSymbol")&&e.getComponent("legend")&&this._renderSymbols(t,e,n)}}},e.prototype.remove=function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null,this.group.removeAll()},e.prototype.dispose=function(){this._mapDraw&&this._mapDraw.remove(),this._mapDraw=null},e.prototype._renderSymbols=function(t,e,n){var i=t.originalData,r=this.group;i.each(i.mapDimension("value"),(function(e,n){if(!isNaN(e)){var o=i.getItemLayout(n);if(o&&o.point){var a=o.point,s=o.offset,l=new Nl({style:{fill:t.getData().getVisual("style").fill},shape:{cx:a[0]+9*s,cy:a[1],r:3},silent:!0,z2:8+(s?0:11)});if(!s){var u=t.mainSeries.getData(),h=i.getName(n),c=u.indexOfName(h),p=i.getItemModel(n),d=p.getModel("label"),f=u.getItemGraphicEl(c);hh(l,ch(p),{labelFetcher:{getFormattedLabel:function(e,n){return t.getFormattedLabel(c,n)}}}),l.disableLabelAnimation=!0,d.get("position")||l.setTextConfig({position:"bottom"}),f.onHoverStateChange=function(t){Ws(l,t)}}r.add(l)}}}))},e.type="map",e}(Tf),hI=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.needsDrawMap=!1,n.seriesGroup=[],n.getTooltipPosition=function(t){if(null!=t){var e=this.getData().getName(t),n=this.coordinateSystem,i=n.getRegion(e);return i&&n.dataToPoint(i.getCenter())}},n}return n(e,t),e.prototype.getInitialData=function(t){for(var e=MS(this,{coordDimensions:["value"],encodeDefaulter:B(up,this)}),n=ht(),i=[],r=0,o=e.count();r-1&&(n.style.stroke=n.style.fill,n.style.fill="#fff",n.style.lineWidth=2),n},e.type="series.map",e.dependencies=["geo"],e.layoutMode="box",e.defaultOption={zlevel:0,z:2,coordinateSystem:"geo",map:"",left:"center",top:"center",aspectScale:null,showLegendSymbol:!0,boundingCoords:null,center:null,zoom:1,scaleLimit:null,selectedMode:!0,label:{show:!1,color:"#000"},itemStyle:{borderWidth:.5,borderColor:"#444",areaColor:"#eee"},emphasis:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{areaColor:"rgba(255,215,0,0.8)"}},select:{label:{show:!0,color:"rgb(100,0,0)"},itemStyle:{color:"rgba(255,215,0,0.8)"}},nameProperty:"name"},e}(ff);function cI(t){var e={};t.eachSeriesByType("map",(function(t){var n=t.getHostGeoModel(),i=n?"o"+n.id:"i"+t.getMapType();(e[i]=e[i]||[]).push(t)})),P(e,(function(t,e){for(var n,i,r,o=(n=O(t,(function(t){return t.getData()})),i=t[0].get("mapValueCalculation"),r={},P(n,(function(t){t.each(t.mapDimension("value"),(function(e,n){var i="ec-"+t.getName(n);r[i]=r[i]||[],isNaN(e)||r[i].push(e)}))})),n[0].map(n[0].mapDimension("value"),(function(t,e){for(var o="ec-"+n[0].getName(e),a=0,s=1/0,l=-1/0,u=r[o].length,h=0;h1?(s.width=a,s.height=a/d):(s.height=a,s.width=a*d),s.y=o[1]-s.height/2,s.x=o[0]-s.width/2;else{var g=t.getBoxLayoutParams();g.aspect=d,s=Vc(g,{width:c,height:p})}this.setViewRect(s.x,s.y,s.width,s.height),this.setCenter(t.get("center")),this.setZoom(t.get("zoom"))}L(vI,fI);var xI=new(function(){function t(){this.dimensions=vI.prototype.dimensions}return t.prototype.create=function(t,e){var n=[];t.eachComponent("geo",(function(t,i){var r=t.get("map"),o=new vI(r+i,r,{nameMap:t.get("nameMap"),nameProperty:t.get("nameProperty"),aspectScale:t.get("aspectScale")});o.zoomLimit=t.get("scaleLimit"),n.push(o),t.coordinateSystem=o,o.model=t,o.resize=_I,o.resize(t,e)})),t.eachSeries((function(t){if("geo"===t.get("coordinateSystem")){var e=t.get("geoIndex")||0;t.coordinateSystem=n[e]}}));var i={};return t.eachSeriesByType("map",(function(t){if(!t.getHostGeoModel()){var e=t.getMapType();i[e]=i[e]||[],i[e].push(t)}})),P(i,(function(t,i){var r=O(t,(function(t){return t.get("nameMap")})),o=new vI(i,i,{nameMap:M(r),nameProperty:t[0].get("nameProperty"),aspectScale:t[0].get("aspectScale")});o.zoomLimit=Q.apply(null,O(t,(function(t){return t.get("scaleLimit")}))),n.push(o),o.resize=_I,o.resize(t[0],e),P(t,(function(t){t.coordinateSystem=o,function(t,e){P(e.get("geoCoord"),(function(e,n){t.addGeoCoord(n,e)}))}(o,t)}))})),n},t.prototype.getFilledRegions=function(t,e,n,i){for(var r=(t||[]).slice(),o=ht(),a=0;a=0;){var o=e[n];o.hierNode.prelim+=i,o.hierNode.modifier+=i,r+=o.hierNode.change,i+=o.hierNode.shift+r}}(t);var o=(n[0].hierNode.prelim+n[n.length-1].hierNode.prelim)/2;r?(t.hierNode.prelim=r.hierNode.prelim+e(t,r),t.hierNode.modifier=t.hierNode.prelim-o):t.hierNode.prelim=o}else r&&(t.hierNode.prelim=r.hierNode.prelim+e(t,r));t.parentNode.hierNode.defaultAncestor=function(t,e,n,i){if(e){for(var r=t,o=t,a=o.parentNode.children[0],s=e,l=r.hierNode.modifier,u=o.hierNode.modifier,h=a.hierNode.modifier,c=s.hierNode.modifier;s=AI(s),o=LI(o),s&&o;){r=AI(r),a=LI(a),r.hierNode.ancestor=t;var p=s.hierNode.prelim+c-o.hierNode.prelim-u+i(s,o);p>0&&(PI(kI(s,t,n),t,p),u+=p,l+=p),c+=s.hierNode.modifier,u+=o.hierNode.modifier,l+=r.hierNode.modifier,h+=a.hierNode.modifier}s&&!AI(r)&&(r.hierNode.thread=s,r.hierNode.modifier+=c-l),o&&!LI(a)&&(a.hierNode.thread=o,a.hierNode.modifier+=u-h,n=t)}return n}(t,r,t.parentNode.hierNode.defaultAncestor||i[0],e)}function TI(t){var e=t.hierNode.prelim+t.parentNode.hierNode.modifier;t.setLayout({x:e},!0),t.hierNode.modifier+=t.parentNode.hierNode.modifier}function CI(t){return arguments.length?t:OI}function DI(t,e){return t-=Math.PI/2,{x:e*Math.cos(t),y:e*Math.sin(t)}}function AI(t){var e=t.children;return e.length&&t.isExpand?e[e.length-1]:t.hierNode.thread}function LI(t){var e=t.children;return e.length&&t.isExpand?e[0]:t.hierNode.thread}function kI(t,e,n){return t.hierNode.ancestor.parentNode===e.parentNode?t.hierNode.ancestor:n}function PI(t,e,n){var i=n/(e.hierNode.i-t.hierNode.i);e.hierNode.change-=i,e.hierNode.shift+=n,e.hierNode.modifier+=n,e.hierNode.prelim+=n,t.hierNode.change+=i}function OI(t,e){return t.parentNode===e.parentNode?1:2}var RI=function(){this.parentPoint=[],this.childPoints=[]},NI=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new RI},e.prototype.buildPath=function(t,e){var n=e.childPoints,i=n.length,r=e.parentPoint,o=n[0],a=n[i-1];if(1===i)return t.moveTo(r[0],r[1]),void t.lineTo(o[0],o[1]);var s=e.orient,l="TB"===s||"BT"===s?0:1,u=1-l,h=Zi(e.forkPosition,1),c=[];c[l]=r[l],c[u]=r[u]+(a[u]-r[u])*h,t.moveTo(r[0],r[1]),t.lineTo(c[0],c[1]),t.moveTo(o[0],o[1]),c[l]=o[l],t.lineTo(c[0],c[1]),c[l]=a[l],t.lineTo(c[0],c[1]),t.lineTo(a[0],a[1]);for(var p=1;pm.x)||(x-=Math.PI);var S=b?"left":"right",M=s.getModel("label"),I=M.get("rotate"),C=I*(Math.PI/180),D=y.getTextContent();D&&(y.setTextConfig({position:M.get("position")||S,rotation:null==I?-x:C,origin:"center"}),D.setStyle("verticalAlign","middle"))}var A=s.get(["emphasis","focus"]),L="ancestor"===A?a.getAncestorsIndices():"descendant"===A?a.getDescendantIndices():null;L&&(_s(n).focus=L),function(t,e,n,i,r,o,a,s){var l=e.getModel(),u=t.get("edgeShape"),h=t.get("layout"),c=t.getOrient(),p=t.get(["lineStyle","curveness"]),d=t.get("edgeForkPosition"),f=l.getModel("lineStyle").getLineStyle(),g=i.__edge;if("curve"===u)e.parentNode&&e.parentNode!==n&&(g||(g=i.__edge=new du({shape:FI(h,c,p,r,r)})),Hu(g,{shape:FI(h,c,p,o,a)},t));else if("polyline"===u)if("orthogonal"===h){if(e!==n&&e.children&&0!==e.children.length&&!0===e.isExpand){for(var y=e.children,v=[],m=0;me&&(e=i.height)}this.height=e+1},t.prototype.getNodeById=function(t){if(this.getId()===t)return this;for(var e=0,n=this.children,i=n.length;e=0&&this.hostTree.data.setItemLayout(this.dataIndex,t,e)},t.prototype.getLayout=function(){return this.hostTree.data.getItemLayout(this.dataIndex)},t.prototype.getModel=function(t){if(!(this.dataIndex<0))return this.hostTree.data.getItemModel(this.dataIndex).getModel(t)},t.prototype.getLevelModel=function(){return(this.hostTree.levelModels||[])[this.depth]},t.prototype.setVisual=function(t,e){this.dataIndex>=0&&this.hostTree.data.setItemVisual(this.dataIndex,t,e)},t.prototype.getVisual=function(t){return this.hostTree.data.getItemVisual(this.dataIndex,t)},t.prototype.getRawIndex=function(){return this.hostTree.data.getRawIndex(this.dataIndex)},t.prototype.getId=function(){return this.hostTree.data.getId(this.dataIndex)},t.prototype.isAncestorOf=function(t){for(var e=t.parentNode;e;){if(e===this)return!0;e=e.parentNode}return!1},t.prototype.isDescendantOf=function(t){return t!==this&&t.isAncestorOf(this)},t}(),$I=function(){function t(t){this.type="tree",this._nodes=[],this.hostModel=t}return t.prototype.eachNode=function(t,e,n){this.root.eachNode(t,e,n)},t.prototype.getNodeByDataIndex=function(t){var e=this.data.getRawIndex(t);return this._nodes[e]},t.prototype.getNodeById=function(t){return this.root.getNodeById(t)},t.prototype.update=function(){for(var t=this.data,e=this._nodes,n=0,i=e.length;n=0){var i=n.getData().tree.root,r=t.targetNode;if("string"==typeof r&&(r=i.getNodeById(r)),r&&i.contains(r))return{node:r};var o=t.targetNodeId;if(null!=o&&(r=i.getNodeById(o)))return{node:r}}}function QI(t){for(var e=[];t;)(t=t.parentNode)&&e.push(t);return e.reverse()}function tT(t,e){return D(QI(t),e)>=0}function eT(t,e){for(var n=[];t;){var i=t.dataIndex;n.push({name:t.name,dataIndex:i,value:e.getRawValue(i)}),t=t.parentNode}return n.reverse(),n}var nT=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.hasSymbolVisual=!0,e.ignoreStyleOnData=!0,e}return n(e,t),e.prototype.getInitialData=function(t){var e={name:t.name,children:t.data},n=t.leaves||{},i=new Oh(n,this,this.ecModel),r=$I.createTree(e,this,(function(t){t.wrapMethod("getItemModel",(function(t,e){var n=r.getNodeByDataIndex(e);return n&&n.children.length&&n.isExpand||(t.parentModel=i),t}))}));var o=0;r.eachNode("preorder",(function(t){t.depth>o&&(o=t.depth)}));var a=t.expandAndCollapse&&t.initialTreeDepth>=0?t.initialTreeDepth:o;return r.root.eachNode("preorder",(function(t){var e=t.hostTree.data.getRawDataItem(t.dataIndex);t.isExpand=e&&null!=e.collapsed?!e.collapsed:t.depth<=a})),r.data},e.prototype.getOrient=function(){var t=this.get("orient");return"horizontal"===t?t="LR":"vertical"===t&&(t="TB"),t},e.prototype.setZoom=function(t){this.option.zoom=t},e.prototype.setCenter=function(t){this.option.center=t},e.prototype.formatTooltip=function(t,e,n){for(var i=this.getData().tree,r=i.root.children[0],o=i.getNodeByDataIndex(t),a=o.getValue(),s=o.name;o&&o!==r;)s=o.parentNode.name+"."+s,o=o.parentNode;return tf("nameValue",{name:s,value:a,noValue:isNaN(a)||null==a})},e.prototype.getDataParams=function(e){var n=t.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(e);return n.treeAncestors=eT(i,this),n},e.type="series.tree",e.layoutMode="box",e.defaultOption={zlevel:0,z:2,coordinateSystem:"view",left:"12%",top:"12%",right:"12%",bottom:"12%",layout:"orthogonal",edgeShape:"curve",edgeForkPosition:"50%",roam:!1,nodeScaleRatio:.4,center:null,zoom:1,orient:"LR",symbol:"emptyCircle",symbolSize:7,expandAndCollapse:!0,initialTreeDepth:2,lineStyle:{color:"#ccc",width:1.5,curveness:.5},itemStyle:{color:"lightsteelblue",borderWidth:1.5},label:{show:!0},animationEasing:"linear",animationDuration:700,animationDurationUpdate:500},e}(ff);function iT(t,e){for(var n,i=[t];n=i.pop();)if(e(n),n.isExpand){var r=n.children;if(r.length)for(var o=r.length-1;o>=0;o--)i.push(r[o])}}function rT(t,e){t.eachSeriesByType("tree",(function(t){!function(t,e){var n=function(t,e){return Vc(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}(t,e);t.layoutInfo=n;var i=t.get("layout"),r=0,o=0,a=null;"radial"===i?(r=2*Math.PI,o=Math.min(n.height,n.width)/2,a=CI((function(t,e){return(t.parentNode===e.parentNode?1:2)/t.depth}))):(r=n.width,o=n.height,a=CI());var s=t.getData().tree.root,l=s.children[0];if(l){!function(t){var e=t;e.hierNode={defaultAncestor:null,ancestor:e,prelim:0,modifier:0,change:0,shift:0,i:0,thread:null};for(var n,i,r=[e];n=r.pop();)if(i=n.children,n.isExpand&&i.length)for(var o=i.length-1;o>=0;o--){var a=i[o];a.hierNode={defaultAncestor:null,ancestor:a,prelim:0,modifier:0,change:0,shift:0,i:o,thread:null},r.push(a)}}(s),function(t,e,n){for(var i,r=[t],o=[];i=r.pop();)if(o.push(i),i.isExpand){var a=i.children;if(a.length)for(var s=0;sh.getLayout().x&&(h=t),t.depth>c.depth&&(c=t)}));var p=u===h?1:a(u,h)/2,d=p-u.getLayout().x,f=0,g=0,y=0,v=0;if("radial"===i)f=r/(h.getLayout().x+p+d),g=o/(c.depth-1||1),iT(l,(function(t){y=(t.getLayout().x+d)*f,v=(t.depth-1)*g;var e=DI(y,v);t.setLayout({x:e.x,y:e.y,rawX:y,rawY:v},!0)}));else{var m=t.getOrient();"RL"===m||"LR"===m?(g=o/(h.getLayout().x+p+d),f=r/(c.depth-1||1),iT(l,(function(t){v=(t.getLayout().x+d)*g,y="LR"===m?(t.depth-1)*f:r-(t.depth-1)*f,t.setLayout({x:y,y:v},!0)}))):"TB"!==m&&"BT"!==m||(f=r/(h.getLayout().x+p+d),g=o/(c.depth-1||1),iT(l,(function(t){y=(t.getLayout().x+d)*f,v="TB"===m?(t.depth-1)*g:o-(t.depth-1)*g,t.setLayout({x:y,y:v},!0)})))}}}(t,e)}))}function oT(t){t.eachSeriesByType("tree",(function(t){var e=t.getData();e.tree.eachNode((function(t){var n=t.getModel().getModel("itemStyle").getItemStyle();I(e.ensureUniqueItemVisual(t.dataIndex,"style"),n)}))}))}var aT=function(){},sT=["treemapZoomToNode","treemapRender","treemapMove"];function lT(t){var e=t.getData().tree,n={};e.eachNode((function(e){for(var i=e;i&&i.depth>1;)i=i.parentNode;var r=xp(t.ecModel,i.name||i.dataIndex+"",n);e.setVisual("decal",r)}))}var uT=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.preventUsingHoverLayer=!0,n}return n(e,t),e.prototype.getInitialData=function(t,e){var n={name:t.name,children:t.data};hT(n);var i=t.levels||[],r=this.designatedVisualItemStyle={},o=new Oh({itemStyle:r},this,e),a=O((i=t.levels=function(t,e){var n,i,r=xr(e.get("color")),o=xr(e.get(["aria","decal","decals"]));if(!r)return;P(t=t||[],(function(t){var e=new Oh(t),r=e.get("color"),o=e.get("decal");(e.get(["itemStyle","color"])||r&&"none"!==r)&&(n=!0),(e.get(["itemStyle","decal"])||o&&"none"!==o)&&(i=!0)}));var a=t[0]||(t[0]={});n||(a.color=r.slice());!i&&o&&(a.decal=o.slice());return t}(i,e))||[],(function(t){return new Oh(t,o,e)}),this),s=$I.createTree(n,this,(function(t){t.wrapMethod("getItemModel",(function(t,e){var n=s.getNodeByDataIndex(e),i=n?a[n.depth]:null;return t.parentModel=i||o,t}))}));return s.data},e.prototype.optionUpdated=function(){this.resetViewRoot()},e.prototype.formatTooltip=function(t,e,n){var i=this.getData(),r=this.getRawValue(t);return tf("nameValue",{name:i.getName(t),value:r})},e.prototype.getDataParams=function(e){var n=t.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(e);return n.treePathInfo=eT(i,this),n},e.prototype.setLayoutInfo=function(t){this.layoutInfo=this.layoutInfo||{},I(this.layoutInfo,t)},e.prototype.mapIdToIndex=function(t){var e=this._idIndexMap;e||(e=this._idIndexMap=ht(),this._idIndexMapCount=0);var n=e.get(t);return null==n&&e.set(t,n=this._idIndexMapCount++),n},e.prototype.getViewRoot=function(){return this._viewRoot},e.prototype.resetViewRoot=function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getRawData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)},e.prototype.enableAriaDecal=function(){lT(this)},e.type="series.treemap",e.layoutMode="box",e.defaultOption={progressive:0,left:"center",top:"middle",width:"80%",height:"80%",sort:!0,clipWindow:"origin",squareRatio:.5*(1+Math.sqrt(5)),leafDepth:null,drillDownIcon:"▶",zoomToNodeRatio:.1024,roam:!0,nodeClick:"zoomToNode",animation:!0,animationDurationUpdate:900,animationEasing:"quinticInOut",breadcrumb:{show:!0,height:22,left:"center",top:"bottom",emptyItemWidth:25,itemStyle:{color:"rgba(0,0,0,0.7)",textStyle:{color:"#fff"}}},label:{show:!0,distance:0,padding:5,position:"inside",color:"#fff",overflow:"truncate"},upperLabel:{show:!1,position:[0,"50%"],height:20,overflow:"truncate",verticalAlign:"middle"},itemStyle:{color:null,colorAlpha:null,colorSaturation:null,borderWidth:0,gapWidth:0,borderColor:"#fff",borderColorSaturation:null},emphasis:{upperLabel:{show:!0,position:[0,"50%"],ellipsis:!0,verticalAlign:"middle"}},visualDimension:0,visualMin:null,visualMax:null,color:[],colorAlpha:null,colorSaturation:null,colorMappingBy:"index",visibleMin:10,childrenVisibleMin:null,levels:[]},e}(ff);function hT(t){var e=0;P(t.children,(function(t){hT(t);var n=t.value;F(n)&&(n=n[0]),e+=n}));var n=t.value;F(n)&&(n=n[0]),(null==n||isNaN(n))&&(n=e),n<0&&(n=0),F(t.value)?t.value[0]=n:t.value=n}var cT=function(){function t(t){this.group=new Ei,t.add(this.group)}return t.prototype.render=function(t,e,n,i){var r=t.getModel("breadcrumb"),o=this.group;if(o.removeAll(),r.get("show")&&n){var a=r.getModel("itemStyle"),s=a.getModel("textStyle"),l={pos:{left:r.get("left"),right:r.get("right"),top:r.get("top"),bottom:r.get("bottom")},box:{width:e.getWidth(),height:e.getHeight()},emptyItemWidth:r.get("emptyItemWidth"),totalWidth:0,renderList:[]};this._prepare(n,l,s),this._renderContent(t,l,a,s,i),Bc(o,l.pos,l.box)}},t.prototype._prepare=function(t,e,n){for(var i=t;i;i=i.parentNode){var r=Cr(i.getModel().get("name"),""),o=n.getTextRect(r),a=Math.max(o.width+16,e.emptyItemWidth);e.totalWidth+=a+8,e.renderList.push({node:i,text:r,width:a})}},t.prototype._renderContent=function(t,e,n,i,r){for(var o,a,s,l,u,h,c,p,d,f=0,g=e.emptyItemWidth,y=t.get(["breadcrumb","height"]),v=(o=e.pos,a=e.box,l=a.width,u=a.height,h=Zi(o.left,l),c=Zi(o.top,u),p=Zi(o.right,l),d=Zi(o.bottom,u),(isNaN(h)||isNaN(parseFloat(o.left)))&&(h=0),(isNaN(p)||isNaN(parseFloat(o.right)))&&(p=l),(isNaN(c)||isNaN(parseFloat(o.top)))&&(c=0),(isNaN(d)||isNaN(parseFloat(o.bottom)))&&(d=u),s=wc(s||0),{width:Math.max(p-h-s[1]-s[3],0),height:Math.max(d-c-s[0]-s[2],0)}),m=e.totalWidth,_=e.renderList,x=_.length-1;x>=0;x--){var b=_[x],w=b.node,S=b.width,M=b.text;m>v.width&&(m-=S-g,S=g,M=null);var I=new ru({shape:{points:pT(f,0,S,y,x===_.length-1,0===x)},style:T(n.getItemStyle(),{lineJoin:"bevel"}),textContent:new cs({style:{text:M,fill:i.getTextColor(),font:i.getFont()}}),textConfig:{position:"inside"},z2:1e5,onclick:B(r,w)});I.disableLabelAnimation=!0,this.group.add(I),dT(I,t,w),f+=S+8}},t.prototype.remove=function(){this.group.removeAll()},t}();function pT(t,e,n,i,r,o){var a=[[r?t:t-5,e],[t+n,e],[t+n,e+i],[r?t:t-5,e+i]];return!o&&a.splice(2,0,[t+n+5,e+i/2]),!r&&a.push([t,e+i/2]),a}function dT(t,e,n){_s(t).eventData={componentType:"series",componentSubType:"treemap",componentIndex:e.componentIndex,seriesIndex:e.componentIndex,seriesName:e.name,seriesType:"treemap",selfType:"breadcrumb",nodeData:{dataIndex:n&&n.dataIndex,name:n&&n.name},treePathInfo:n&&eT(n,e)}}var fT=function(){function t(){this._storage=[],this._elExistsMap={}}return t.prototype.add=function(t,e,n,i,r){return!this._elExistsMap[t.id]&&(this._elExistsMap[t.id]=!0,this._storage.push({el:t,target:e,duration:n,delay:i,easing:r}),!0)},t.prototype.finished=function(t){return this._finishedCallback=t,this},t.prototype.start=function(){for(var t=this,e=this._storage.length,n=function(){--e<=0&&(t._storage.length=0,t._elExistsMap={},t._finishedCallback&&t._finishedCallback())},i=0,r=this._storage.length;i3||Math.abs(t.dy)>3)){var e=this.seriesModel.getData().tree.root;if(!e)return;var n=e.getLayout();if(!n)return;this.api.dispatchAction({type:"treemapMove",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:n.x+t.dx,y:n.y+t.dy,width:n.width,height:n.height}})}},e.prototype._onZoom=function(t){var e=t.originX,n=t.originY;if("animating"!==this._state){var i=this.seriesModel.getData().tree.root;if(!i)return;var r=i.getLayout();if(!r)return;var o=new gi(r.x,r.y,r.width,r.height),a=this.seriesModel.layoutInfo,s=[1,0,0,1,0,0];Un(s,s,[-(e-=a.x),-(n-=a.y)]),Yn(s,s,[t.scale,t.scale]),Un(s,s,[e,n]),o.applyTransform(s),this.api.dispatchAction({type:"treemapRender",from:this.uid,seriesId:this.seriesModel.id,rootRect:{x:o.x,y:o.y,width:o.width,height:o.height}})}},e.prototype._initEvents=function(t){var e=this;t.on("click",(function(t){if("ready"===e._state){var n=e.seriesModel.get("nodeClick",!0);if(n){var i=e.findTarget(t.offsetX,t.offsetY);if(i){var r=i.node;if(r.getLayout().isLeafRoot)e._rootToNode(i);else if("zoomToNode"===n)e._zoomToNode(i);else if("link"===n){var o=r.hostTree.data.getItemModel(r.dataIndex),a=o.get("link",!0),s=o.get("target",!0)||"blank";a&&Pc(a,s)}}}}}),this)},e.prototype._renderBreadcrumb=function(t,e,n){var i=this;n||(n=null!=t.get("leafDepth",!0)?{node:t.getViewRoot()}:this.findTarget(e.getWidth()/2,e.getHeight()/2))||(n={node:t.getData().tree.root}),(this._breadcrumb||(this._breadcrumb=new cT(this.group))).render(t,e,n.node,(function(e){"animating"!==i._state&&(tT(t.getViewRoot(),e)?i._rootToNode({node:e}):i._zoomToNode({node:e}))}))},e.prototype.remove=function(){this._clearController(),this._containerGroup&&this._containerGroup.removeAll(),this._storage={nodeGroup:[],background:[],content:[]},this._state="ready",this._breadcrumb&&this._breadcrumb.remove()},e.prototype.dispose=function(){this._clearController()},e.prototype._zoomToNode=function(t){this.api.dispatchAction({type:"treemapZoomToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},e.prototype._rootToNode=function(t){this.api.dispatchAction({type:"treemapRootToNode",from:this.uid,seriesId:this.seriesModel.id,targetNode:t.node})},e.prototype.findTarget=function(t,e){var n;return this.seriesModel.getViewRoot().eachNode({attr:"viewChildren",order:"preorder"},(function(i){var r=this._storage.background[i.getRawIndex()];if(r){var o=r.transformCoordToLocal(t,e),a=r.shape;if(!(a.x<=o[0]&&o[0]<=a.x+a.width&&a.y<=o[1]&&o[1]<=a.y+a.height))return!1;n={node:i,offsetX:o[0],offsetY:o[1]}}}),this),n},e.type="treemap",e}(Tf);var ST=P,MT=X,IT=-1,TT=function(){function t(e){var n=e.mappingMethod,i=e.type,r=this.option=w(e);this.type=i,this.mappingMethod=n,this._normalizeData=zT[n];var o=t.visualHandlers[i];this.applyVisual=o.applyVisual,this.getColorMapper=o.getColorMapper,this._normalizedToVisual=o._normalizedToVisual[n],"piecewise"===n?(CT(r),function(t){var e=t.pieceList;t.hasSpecialVisual=!1,P(e,(function(e,n){e.originIndex=n,null!=e.visual&&(t.hasSpecialVisual=!0)}))}(r)):"category"===n?r.categories?function(t){var e=t.categories,n=t.categoryMap={},i=t.visual;if(ST(e,(function(t,e){n[t]=e})),!F(i)){var r=[];X(i)?ST(i,(function(t,e){var i=n[e];r[null!=i?i:IT]=t})):r[-1]=i,i=NT(t,r)}for(var o=e.length-1;o>=0;o--)null==i[o]&&(delete n[e[o]],e.pop())}(r):CT(r,!0):(rt("linear"!==n||r.dataExtent),CT(r))}return t.prototype.mapValueToVisual=function(t){var e=this._normalizeData(t);return this._normalizedToVisual(e,t)},t.prototype.getNormalizer=function(){return V(this._normalizeData,this)},t.listVisualTypes=function(){return E(t.visualHandlers)},t.isValidType=function(e){return t.visualHandlers.hasOwnProperty(e)},t.eachVisual=function(t,e,n){X(t)?P(t,e,n):e.call(n,t)},t.mapVisual=function(e,n,i){var r,o=F(e)?[]:X(e)?{}:(r=!0,null);return t.eachVisual(e,(function(t,e){var a=n.call(i,t,e);r?o=a:o[e]=a})),o},t.retrieveVisuals=function(e){var n,i={};return e&&ST(t.visualHandlers,(function(t,r){e.hasOwnProperty(r)&&(i[r]=e[r],n=!0)})),n?i:null},t.prepareVisualTypes=function(t){if(F(t))t=t.slice();else{if(!MT(t))return[];var e=[];ST(t,(function(t,n){e.push(n)})),t=e}return t.sort((function(t,e){return"color"===e&&"color"!==t&&0===t.indexOf("color")?1:-1})),t},t.dependsOn=function(t,e){return"color"===e?!(!t||0!==t.indexOf(e)):t===e},t.findPieceIndex=function(t,e,n){for(var i,r=1/0,o=0,a=e.length;ou[1]&&(u[1]=l);var h=e.get("colorMappingBy"),c={type:a.name,dataExtent:u,visual:a.range};"color"!==c.type||"index"!==h&&"id"!==h?c.mappingMethod="linear":(c.mappingMethod="category",c.loop=!0);var p=new TT(c);return VT(p).drColorMappingBy=h,p}(0,r,o,0,u,d);P(d,(function(t,e){if(t.depth>=n.length||t===n[t.depth]){var o=function(t,e,n,i,r,o){var a=I({},e);if(r){var s=r.type,l="color"===s&&VT(r).drColorMappingBy,u="index"===l?i:"id"===l?o.mapIdToIndex(n.getId()):n.getValue(t.get("visualDimension"));a[s]=r.mapValueToVisual(u)}return a}(r,u,t,e,f,i);FT(t,o,n,i)}}))}else s=GT(u),h.fill=s}}function GT(t){var e=HT(t,"color");if(e){var n=HT(t,"colorAlpha"),i=HT(t,"colorSaturation");return i&&(e=Ke(e,null,null,i)),n&&(e=$e(e,n)),e}}function HT(t,e){var n=t[e];if(null!=n&&"none"!==n)return n}function WT(t,e){var n=t.get(e);return F(n)&&n.length?{name:e,range:n}:null}var UT=Math.max,XT=Math.min,YT=Q,ZT=P,jT=["itemStyle","borderWidth"],qT=["itemStyle","gapWidth"],KT=["upperLabel","show"],$T=["upperLabel","height"],JT={seriesType:"treemap",reset:function(t,e,n,i){var r=n.getWidth(),o=n.getHeight(),a=t.option,s=Vc(t.getBoxLayoutParams(),{width:n.getWidth(),height:n.getHeight()}),l=a.size||[],u=Zi(YT(s.width,l[0]),r),h=Zi(YT(s.height,l[1]),o),c=i&&i.type,p=JI(i,["treemapZoomToNode","treemapRootToNode"],t),d="treemapRender"===c||"treemapMove"===c?i.rootRect:null,f=t.getViewRoot(),g=QI(f);if("treemapMove"!==c){var y="treemapZoomToNode"===c?function(t,e,n,i,r){var o,a=(e||{}).node,s=[i,r];if(!a||a===n)return s;var l=i*r,u=l*t.option.zoomToNodeRatio;for(;o=a.parentNode;){for(var h=0,c=o.children,p=0,d=c.length;per&&(u=er),a=o}ua[1]&&(a[1]=e)}))):a=[NaN,NaN];return{sum:i,dataExtent:a}}(e,a,s);if(0===u.sum)return t.viewChildren=[];if(u.sum=function(t,e,n,i,r){if(!i)return n;for(var o=t.get("visibleMin"),a=r.length,s=a,l=a-1;l>=0;l--){var u=r["asc"===i?a-l-1:l].getValue();u/n*ei&&(i=a));var l=t.area*t.area,u=e*e*n;return l?UT(u*i/l,l/(u*r)):1/0}function eC(t,e,n,i,r){var o=e===n.width?0:1,a=1-o,s=["x","y"],l=["width","height"],u=n[s[o]],h=e?t.area/e:0;(r||h>n[l[a]])&&(h=n[l[a]]);for(var c=0,p=t.length;ci&&(i=e);var o=i%2?i+2:i+3;r=[];for(var a=0;a0&&(m[0]=-m[0],m[1]=-m[1]);var x=v[0]<0?-1:1;if("start"!==i.__position&&"end"!==i.__position){var b=-Math.atan2(v[1],v[0]);u[0].8?"left":h[0]<-.8?"right":"center",p=h[1]>.8?"top":h[1]<-.8?"bottom":"middle";break;case"start":i.x=-h[0]*f+l[0],i.y=-h[1]*g+l[1],c=h[0]>.8?"right":h[0]<-.8?"left":"center",p=h[1]>.8?"bottom":h[1]<-.8?"top":"middle";break;case"insideStartTop":case"insideStart":case"insideStartBottom":i.x=f*x+l[0],i.y=l[1]+w,c=v[0]<0?"right":"left",i.originX=-f*x,i.originY=-w;break;case"insideMiddleTop":case"insideMiddle":case"insideMiddleBottom":case"middle":i.x=_[0],i.y=_[1]+w,c="center",i.originY=-w;break;case"insideEndTop":case"insideEnd":case"insideEndBottom":i.x=-f*x+u[0],i.y=u[1]+w,c=v[0]>=0?"right":"left",i.originX=f*x,i.originY=-w}i.scaleX=i.scaleY=r,i.setStyle({verticalAlign:i.__verticalAlign||p,align:i.__align||c})}}}function S(t,e){var n=t.__specifiedRotation;if(null==n){var i=a.tangentAt(e);t.attr("rotation",(1===e?-1:1)*Math.PI/2-Math.atan2(i[1],i[0]))}else t.attr("rotation",n)}},e}(Ei),VC=function(){function t(t){this.group=new Ei,this._LineCtor=t||EC}return t.prototype.isPersistent=function(){return!0},t.prototype.updateData=function(t){var e=this,n=this,i=n.group,r=n._lineData;n._lineData=t,r||i.removeAll();var o=BC(t);t.diff(r).add((function(n){e._doAdd(t,n,o)})).update((function(n,i){e._doUpdate(r,t,i,n,o)})).remove((function(t){i.remove(r.getItemGraphicEl(t))})).execute()},t.prototype.updateLayout=function(){var t=this._lineData;t&&t.eachItemGraphicEl((function(e,n){e.updateLayout(t,n)}),this)},t.prototype.incrementalPrepareUpdate=function(t){this._seriesScope=BC(t),this._lineData=null,this.group.removeAll()},t.prototype.incrementalUpdate=function(t,e){function n(t){t.isGroup||function(t){return t.animators&&t.animators.length>0}(t)||(t.incremental=!0,t.ensureState("emphasis").hoverLayer=!0)}for(var i=t.start;i=0?i+=u:i-=u:f>=0?i-=u:i+=u}return i}function qC(t,e){var n=[],i=Zo,r=[[],[],[]],o=[[],[]],a=[];e/=2,t.eachEdge((function(t,s){var l=t.getLayout(),u=t.getVisual("fromSymbol"),h=t.getVisual("toSymbol");l.__original||(l.__original=[mt(l[0]),mt(l[1])],l[2]&&l.__original.push(mt(l[2])));var c=l.__original;if(null!=l[2]){if(vt(r[0],c[0]),vt(r[1],c[2]),vt(r[2],c[1]),u&&"none"!==u){var p=_C(t.node1),d=jC(r,c[0],p*e);i(r[0][0],r[1][0],r[2][0],d,n),r[0][0]=n[3],r[1][0]=n[4],i(r[0][1],r[1][1],r[2][1],d,n),r[0][1]=n[3],r[1][1]=n[4]}if(h&&"none"!==h){p=_C(t.node2),d=jC(r,c[1],p*e);i(r[0][0],r[1][0],r[2][0],d,n),r[1][0]=n[1],r[2][0]=n[2],i(r[0][1],r[1][1],r[2][1],d,n),r[1][1]=n[1],r[2][1]=n[2]}vt(l[0],r[0]),vt(l[1],r[2]),vt(l[2],r[1])}else{if(vt(o[0],c[0]),vt(o[1],c[1]),wt(a,o[1],o[0]),Dt(a,a),u&&"none"!==u){p=_C(t.node1);bt(o[0],o[0],a,p*e)}if(h&&"none"!==h){p=_C(t.node2);bt(o[1],o[1],a,-p*e)}vt(l[0],o[0]),vt(l[1],o[1])}}))}function KC(t){return"view"===t.type}var $C=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(t,e){var n=new mw,i=new VC,r=this.group;this._controller=new WM(e.getZr()),this._controllerHost={target:r},r.add(n.group),r.add(i.group),this._symbolDraw=n,this._lineDraw=i,this._firstRender=!0},e.prototype.render=function(t,e,n){var i=this,r=t.coordinateSystem;this._model=t;var o=this._symbolDraw,a=this._lineDraw,s=this.group;if(KC(r)){var l={x:r.x,y:r.y,scaleX:r.scaleX,scaleY:r.scaleY};this._firstRender?s.attr(l):Hu(s,l,t)}qC(t.getGraph(),mC(t));var u=t.getData();o.updateData(u);var h=t.getEdgeData();a.updateData(h),this._updateNodeAndLinkScale(),this._updateController(t,e,n),clearTimeout(this._layoutTimeout);var c=t.forceLayout,p=t.get(["force","layoutAnimation"]);c&&this._startForceLayoutIteration(c,p),u.graph.eachNode((function(t){var e=t.dataIndex,n=t.getGraphicEl(),r=t.getModel();n.off("drag").off("dragend");var o=r.get("draggable");o&&n.on("drag",(function(){c&&(c.warmUp(),!i._layouting&&i._startForceLayoutIteration(c,p),c.setFixed(e),u.setItemLayout(e,[n.x,n.y]))})).on("dragend",(function(){c&&c.setUnfixed(e)})),n.setDraggable(o&&!!c),"adjacency"===r.get(["emphasis","focus"])&&(_s(n).focus=t.getAdjacentDataIndices())})),u.graph.eachEdge((function(t){var e=t.getGraphicEl();"adjacency"===t.getModel().get(["emphasis","focus"])&&(_s(e).focus={edge:[t.dataIndex],node:[t.node1.dataIndex,t.node2.dataIndex]})}));var d="circular"===t.get("layout")&&t.get(["circular","rotateLabel"]),f=u.getLayout("cx"),g=u.getLayout("cy");u.eachItemGraphicEl((function(t,e){var n=u.getItemModel(e).get(["label","rotate"])||0,i=t.getSymbolPath();if(d){var r=u.getItemLayout(e),o=Math.atan2(r[1]-g,r[0]-f);o<0&&(o=2*Math.PI+o);var a=r[0]=0&&t.call(e,n[r],r)},t.prototype.eachEdge=function(t,e){for(var n=this.edges,i=n.length,r=0;r=0&&n[r].node1.dataIndex>=0&&n[r].node2.dataIndex>=0&&t.call(e,n[r],r)},t.prototype.breadthFirstTraverse=function(t,e,n,i){if(e instanceof tD||(e=this._nodesMap[JC(e)]),e){for(var r="out"===n?"outEdges":"in"===n?"inEdges":"edges",o=0;o=0&&n.node2.dataIndex>=0}));for(r=0,o=i.length;r=0&&this[t][e].setItemVisual(this.dataIndex,n,i)},getVisual:function(n){return this[t][e].getItemVisual(this.dataIndex,n)},setLayout:function(n,i){this.dataIndex>=0&&this[t][e].setItemLayout(this.dataIndex,n,i)},getLayout:function(){return this[t][e].getItemLayout(this.dataIndex)},getGraphicEl:function(){return this[t][e].getItemGraphicEl(this.dataIndex)},getRawIndex:function(){return this[t][e].getRawIndex(this.dataIndex)}}}function iD(t,e,n,i,r){for(var o=new QC(i),a=0;a "+p)),u++)}var d,f=n.get("coordinateSystem");if("cartesian2d"===f||"polar"===f)d=F_(t,n);else{var g=Ap.get(f),y=g&&g.dimensions||[];D(y,"value")<0&&y.concat(["value"]);var v=O_(t,{coordDimensions:y});(d=new L_(v,n)).initData(t)}var m=new L_(["value"],n);return m.initData(l,s),r&&r(d,m),HI({mainData:d,struct:o,structAttr:"graph",datas:{node:d,edge:m},datasAttr:{node:"data",edge:"edgeData"}}),o.update(),o}L(tD,nD("hostGraph","data")),L(eD,nD("hostGraph","edgeData"));var rD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n}return n(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments);var n=this;function i(){return n._categoriesData}this.legendVisualProvider=new IS(i,i),this.fillDataTextStyle(e.edges||e.links),this._updateCategoriesData()},e.prototype.mergeOption=function(e){t.prototype.mergeOption.apply(this,arguments),this.fillDataTextStyle(e.edges||e.links),this._updateCategoriesData()},e.prototype.mergeDefaultAndTheme=function(e){t.prototype.mergeDefaultAndTheme.apply(this,arguments),br(e,"edgeLabel",["show"])},e.prototype.getInitialData=function(t,e){var n,i=t.edges||t.links||[],r=t.data||t.nodes||[],o=this;if(r&&i){uC(n=this)&&(n.__curvenessList=[],n.__edgeMap={},hC(n));var a=iD(r,i,this,!0,(function(t,e){t.wrapMethod("getItemModel",(function(t){var e=o._categoriesModels[t.getShallow("category")];return e&&(e.parentModel=t.parentModel,t.parentModel=e),t}));var n=Oh.prototype.getModel;function i(t,e){var i=n.call(this,t,e);return i.resolveParentPath=r,i}function r(t){if(t&&("label"===t[0]||"label"===t[1])){var e=t.slice();return"label"===t[0]?e[0]="edgeLabel":"label"===t[1]&&(e[1]="edgeLabel"),e}return t}e.wrapMethod("getItemModel",(function(t){return t.resolveParentPath=r,t.getModel=i,t}))}));return P(a.edges,(function(t){!function(t,e,n,i){if(uC(n)){var r=cC(t,e,n),o=n.__edgeMap,a=o[pC(r)];o[r]&&!a?o[r].isForward=!0:a&&o[r]&&(a.isForward=!0,o[r].isForward=!1),o[r]=o[r]||[],o[r].push(i)}}(t.node1,t.node2,this,t.dataIndex)}),this),a.data}},e.prototype.getGraph=function(){return this.getData().graph},e.prototype.getEdgeData=function(){return this.getGraph().edgeData},e.prototype.getCategoriesData=function(){return this._categoriesData},e.prototype.formatTooltip=function(t,e,n){if("edge"===n){var i=this.getData(),r=this.getDataParams(t,n),o=i.graph.getEdgeByIndex(t),a=i.getName(o.node1.dataIndex),s=i.getName(o.node2.dataIndex),l=[];return null!=a&&l.push(a),null!=s&&l.push(s),tf("nameValue",{name:l.join(" > "),value:r.value,noValue:null==r.value})}return cf({series:this,dataIndex:t,multipleSeries:e})},e.prototype._updateCategoriesData=function(){var t=O(this.option.categories||[],(function(t){return null!=t.value?t:I({value:0},t)})),e=new L_(["value"],this);e.initData(t),this._categoriesData=e,this._categoriesModels=e.mapArray((function(t){return e.getItemModel(t)}))},e.prototype.setZoom=function(t){this.option.zoom=t},e.prototype.setCenter=function(t){this.option.center=t},e.prototype.isAnimationEnabled=function(){return t.prototype.isAnimationEnabled.call(this)&&!("force"===this.get("layout")&&this.get(["force","layoutAnimation"]))},e.type="series.graph",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={zlevel:0,z:2,coordinateSystem:"view",legendHoverLink:!0,layout:null,circular:{rotateLabel:!1},force:{initLayout:null,repulsion:[0,50],gravity:.1,friction:.6,edgeLength:30,layoutAnimation:!0},left:"center",top:"center",symbol:"circle",symbolSize:10,edgeSymbol:["none","none"],edgeSymbolSize:10,edgeLabel:{position:"middle",distance:5},draggable:!1,roam:!1,center:null,zoom:1,nodeScaleRatio:.6,label:{show:!1,formatter:"{b}"},itemStyle:{},lineStyle:{color:"#aaa",width:1,opacity:.5},emphasis:{scale:!0,label:{show:!0}},select:{itemStyle:{borderColor:"#212121"}}},e}(ff),oD={type:"graphRoam",event:"graphRoam",update:"none"};var aD=function(){this.angle=0,this.width=10,this.r=10,this.x=0,this.y=0},sD=function(t){function e(e){var n=t.call(this,e)||this;return n.type="pointer",n}return n(e,t),e.prototype.getDefaultShape=function(){return new aD},e.prototype.buildPath=function(t,e){var n=Math.cos,i=Math.sin,r=e.r,o=e.width,a=e.angle,s=e.x-n(a)*o*(o>=r/3?1:2),l=e.y-i(a)*o*(o>=r/3?1:2);a=e.angle-Math.PI/2,t.moveTo(s,l),t.lineTo(e.x+n(a)*o,e.y+i(a)*o),t.lineTo(e.x+n(e.angle)*r,e.y+i(e.angle)*r),t.lineTo(e.x-n(a)*o,e.y-i(a)*o),t.lineTo(s,l)},e}(Ka);function lD(t,e){var n=null==t?"":t+"";return e&&("string"==typeof e?n=e.replace("{value}",n):"function"==typeof e&&(n=e(t))),n}var uD=2*Math.PI,hD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){this.group.removeAll();var i=t.get(["axisLine","lineStyle","color"]),r=function(t,e){var n=t.get("center"),i=e.getWidth(),r=e.getHeight(),o=Math.min(i,r);return{cx:Zi(n[0],e.getWidth()),cy:Zi(n[1],e.getHeight()),r:Zi(t.get("radius"),o/2)}}(t,n);this._renderMain(t,e,n,i,r),this._data=t.getData()},e.prototype.dispose=function(){},e.prototype._renderMain=function(t,e,n,i,r){for(var o=this.group,a=t.get("clockwise"),s=-t.get("startAngle")/180*Math.PI,l=-t.get("endAngle")/180*Math.PI,u=t.getModel("axisLine"),h=u.get("roundCap")?Jw:Jl,c=u.get("show"),p=u.getModel("lineStyle"),d=p.get("width"),f=(l-s)%uD||l===s?(l-s)%uD:uD,g=s,y=0;c&&y=t&&(0===e?0:i[e-1][0]).8?"bottom":"middle",align:u<-.4?"left":u>.4?"right":"center"},{inheritColor:R}),silent:!0}))}if(m.get("show")&&L!==x){P=(P=m.get("distance"))?P+l:l;for(var N=0;N<=b;N++){u=Math.cos(M),h=Math.sin(M);var z=new uu({shape:{x1:u*(f-P)+p,y1:h*(f-P)+d,x2:u*(f-S-P)+p,y2:h*(f-S-P)+d},silent:!0,style:D});"auto"===D.stroke&&z.setStyle({stroke:i((L+N/b)/x)}),c.add(z),M+=T}M-=T}else M+=I}},e.prototype._renderPointer=function(t,e,n,i,r,o,a,s,l){var u=this.group,h=this._data,c=this._progressEls,p=[],d=t.get(["pointer","show"]),f=t.getModel("progress"),g=f.get("show"),y=t.getData(),v=y.mapDimension("value"),m=+t.get("min"),_=+t.get("max"),x=[m,_],b=[o,a];function w(e,n){var i,o=y.getItemModel(e).getModel("pointer"),a=Zi(o.get("width"),r.r),s=Zi(o.get("length"),r.r),l=t.get(["pointer","icon"]),u=o.get("offsetCenter"),h=Zi(u[0],r.r),c=Zi(u[1],r.r),p=o.get("keepAspect");return(i=l?fy(l,h-a/2,c-s,a,s,null,p):new sD({shape:{angle:-Math.PI/2,width:a,r:s,x:h,y:c}})).rotation=-(n+Math.PI/2),i.x=r.cx,i.y=r.cy,i}function S(t,e){var n=f.get("roundCap")?Jw:Jl,i=f.get("overlap"),a=i?f.get("width"):l/y.count(),u=i?r.r-a:r.r-(t+1)*a,h=i?r.r:r.r-t*a,c=new n({shape:{startAngle:o,endAngle:e,cx:r.cx,cy:r.cy,clockwise:s,r0:u,r:h}});return i&&(c.z2=_-y.get(v,t)%_),c}(g||d)&&(y.diff(h).add((function(e){if(d){var n=w(e,o);Wu(n,{rotation:-(Yi(y.get(v,e),x,b,!0)+Math.PI/2)},t),u.add(n),y.setItemGraphicEl(e,n)}if(g){var i=S(e,o),r=f.get("clip");Wu(i,{shape:{endAngle:Yi(y.get(v,e),x,b,r)}},t),u.add(i),p[e]=i}})).update((function(e,n){if(d){var i=h.getItemGraphicEl(n),r=i?i.rotation:o,a=w(e,r);a.rotation=r,Hu(a,{rotation:-(Yi(y.get(v,e),x,b,!0)+Math.PI/2)},t),u.add(a),y.setItemGraphicEl(e,a)}if(g){var s=c[n],l=S(e,s?s.shape.endAngle:o),m=f.get("clip");Hu(l,{shape:{endAngle:Yi(y.get(v,e),x,b,m)}},t),u.add(l),p[e]=l}})).execute(),y.each((function(t){var e=y.getItemModel(t),n=e.getModel("emphasis");if(d){var r=y.getItemGraphicEl(t),o=y.getItemVisual(t,"style"),a=o.fill;if(r instanceof es){var s=r.style;r.useStyle(I({image:s.image,x:s.x,y:s.y,width:s.width,height:s.height},o))}else r.useStyle(o),"pointer"!==r.type&&r.setColor(a);r.setStyle(e.getModel(["pointer","itemStyle"]).getItemStyle()),"auto"===r.style.fill&&r.setStyle("fill",i(Yi(y.get(v,t),x,[0,1],!0))),r.z2EmphasisLift=0,cl(r,e),sl(r,n.get("focus"),n.get("blurScope"))}if(g){var l=p[t];l.useStyle(y.getItemVisual(t,"style")),l.setStyle(e.getModel(["progress","itemStyle"]).getItemStyle()),l.z2EmphasisLift=0,cl(l,e),sl(l,n.get("focus"),n.get("blurScope"))}})),this._progressEls=p)},e.prototype._renderAnchor=function(t,e){var n=t.getModel("anchor");if(n.get("show")){var i=n.get("size"),r=n.get("icon"),o=n.get("offsetCenter"),a=n.get("keepAspect"),s=fy(r,e.cx-i/2+Zi(o[0],e.r),e.cy-i/2+Zi(o[1],e.r),i,i,null,a);s.z2=n.get("showAbove")?1:0,s.setStyle(n.getModel("itemStyle").getItemStyle()),this.group.add(s)}},e.prototype._renderTitleAndDetail=function(t,e,n,i,r){var o=this,a=t.getData(),s=a.mapDimension("value"),l=+t.get("min"),u=+t.get("max"),h=new Ei,c=[],p=[],d=t.isAnimationEnabled();a.diff(this._data).add((function(t){c[t]=new cs({silent:!0}),p[t]=new cs({silent:!0})})).update((function(t,e){c[t]=o._titleEls[e],p[t]=o._detailEls[e]})).execute(),a.each((function(e){var n=a.getItemModel(e),o=a.get(s,e),f=new Ei,g=i(Yi(o,[l,u],[0,1],!0)),y=n.getModel("title");if(y.get("show")){var v=y.get("offsetCenter"),m=r.cx+Zi(v[0],r.r),_=r.cy+Zi(v[1],r.r);(C=c[e]).attr({style:ph(y,{x:m,y:_,text:a.getName(e),align:"center",verticalAlign:"middle"},{inheritColor:g})}),f.add(C)}var x=n.getModel("detail");if(x.get("show")){var b=x.get("offsetCenter"),w=r.cx+Zi(b[0],r.r),S=r.cy+Zi(b[1],r.r),M=Zi(x.get("width"),r.r),I=Zi(x.get("height"),r.r),T=t.get(["progress","show"])?a.getItemVisual(e,"style").fill:g,C=p[e],D=x.get("formatter");C.attr({style:ph(x,{x:w,y:S,text:lD(o,D),width:isNaN(M)?null:M,height:isNaN(I)?null:I,align:"center",verticalAlign:"middle"},{inheritColor:T})}),xh(C,{normal:x},o,(function(t){return lD(t,D)})),d&&bh(C,e,a,t,{getFormattedLabel:function(t,e,n,i,r,a){return lD(a?a.interpolatedValue:o,D)}}),f.add(C)}h.add(f)})),this.group.add(h),this._titleEls=c,this._detailEls=p},e.type="gauge",e}(Tf),cD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.visualStyleAccessPath="itemStyle",n.useColorPaletteOnData=!0,n}return n(e,t),e.prototype.getInitialData=function(t,e){return MS(this,["value"])},e.type="series.gauge",e.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,roundCap:!1,lineStyle:{color:[[1,"#E6EBF8"]],width:10}},progress:{show:!1,overlap:!0,width:10,roundCap:!1,clip:!0},splitLine:{show:!0,length:10,distance:10,lineStyle:{color:"#63677A",width:3,type:"solid"}},axisTick:{show:!0,splitNumber:5,length:6,distance:10,lineStyle:{color:"#63677A",width:1,type:"solid"}},axisLabel:{show:!0,distance:15,color:"#464646",fontSize:12},pointer:{icon:null,offsetCenter:[0,0],show:!0,length:"60%",width:6,keepAspect:!1},anchor:{show:!1,showAbove:!1,size:6,icon:"circle",offsetCenter:[0,0],keepAspect:!1,itemStyle:{color:"#fff",borderWidth:0,borderColor:"#5470c6"}},title:{show:!0,offsetCenter:[0,"20%"],color:"#464646",fontSize:16,valueAnimation:!1},detail:{show:!0,backgroundColor:"rgba(0,0,0,0)",borderWidth:0,borderColor:"#ccc",width:100,height:null,padding:[5,10],offsetCenter:[0,"40%"],color:"#464646",fontSize:30,fontWeight:"bold",lineHeight:30,valueAnimation:!1}},e}(ff);var pD=["itemStyle","opacity"],dD=function(t){function e(e,n){var i=t.call(this)||this,r=i,o=new au,a=new cs;return r.setTextContent(a),i.setTextGuideLine(o),i.updateData(e,n,!0),i}return n(e,t),e.prototype.updateData=function(t,e,n){var i=this,r=t.hostModel,o=t.getItemModel(e),a=t.getItemLayout(e),s=o.getModel("emphasis"),l=o.get(pD);l=null==l?1:l,i.useStyle(t.getItemVisual(e,"style")),i.style.lineJoin="round",n?(i.setShape({points:a.points}),i.style.opacity=0,Wu(i,{style:{opacity:l}},r,e)):Hu(i,{style:{opacity:l},shape:{points:a.points}},r,e),cl(i,o),this._updateLabel(t,e),sl(this,s.get("focus"),s.get("blurScope"))},e.prototype._updateLabel=function(t,e){var n=this,i=this.getTextGuideLine(),r=n.getTextContent(),o=t.hostModel,a=t.getItemModel(e),s=t.getItemLayout(e).label,l=t.getItemVisual(e,"style"),u=l.fill;hh(r,ch(a),{labelFetcher:t.hostModel,labelDataIndex:e,defaultOpacity:l.opacity,defaultText:t.getName(e)},{normal:{align:s.textAlign,verticalAlign:s.verticalAlign}}),n.setTextConfig({local:!0,inside:!!s.inside,insideStroke:u,outsideFill:u});var h=s.linePoints;i.setShape({points:h}),n.textGuideLineConfig={anchor:h?new ai(h[0][0],h[0][1]):null},Hu(r,{style:{x:s.x,y:s.y}},o,e),r.attr({rotation:s.rotation,originX:s.x,originY:s.y,z2:10}),Hg(n,Wg(a),{stroke:u})},e}(ru),fD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.ignoreLabelLineUpdate=!0,n}return n(e,t),e.prototype.render=function(t,e,n){var i=t.getData(),r=this._data,o=this.group;i.diff(r).add((function(t){var e=new dD(i,t);i.setItemGraphicEl(t,e),o.add(e)})).update((function(t,e){var n=r.getItemGraphicEl(e);n.updateData(i,t),o.add(n),i.setItemGraphicEl(t,n)})).remove((function(e){Yu(r.getItemGraphicEl(e),t,e)})).execute(),this._data=i},e.prototype.remove=function(){this.group.removeAll(),this._data=null},e.prototype.dispose=function(){},e.type="funnel",e}(Tf),gD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.useColorPaletteOnData=!0,n}return n(e,t),e.prototype.init=function(e){t.prototype.init.apply(this,arguments),this.legendVisualProvider=new IS(V(this.getData,this),V(this.getRawData,this)),this._defaultLabelLine(e)},e.prototype.getInitialData=function(t,e){return MS(this,{coordDimensions:["value"],encodeDefaulter:B(up,this)})},e.prototype._defaultLabelLine=function(t){br(t,"labelLine",["show"]);var e=t.labelLine,n=t.emphasis.labelLine;e.show=e.show&&t.label.show,n.show=n.show&&t.emphasis.label.show},e.prototype.getDataParams=function(e){var n=this.getData(),i=t.prototype.getDataParams.call(this,e),r=n.mapDimension("value"),o=n.getSum(r);return i.percent=o?+(n.get(r,e)/o*100).toFixed(2):0,i.$vars.push("percent"),i},e.type="series.funnel",e.defaultOption={zlevel:0,z:2,legendHoverLink:!0,left:80,top:60,right:80,bottom:60,minSize:"0%",maxSize:"100%",sort:"descending",orient:"vertical",gap:0,funnelAlign:"center",label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1}},itemStyle:{borderColor:"#fff",borderWidth:1},emphasis:{label:{show:!0}},select:{itemStyle:{borderColor:"#212121"}}},e}(ff);function yD(t,e){t.eachSeriesByType("funnel",(function(t){var n=t.getData(),i=n.mapDimension("value"),r=t.get("sort"),o=function(t,e){return Vc(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}(t,e),a=t.get("orient"),s=o.width,l=o.height,u=function(t,e){for(var n=t.mapDimension("value"),i=t.mapArray(n,(function(t){return t})),r=[],o="ascending"===e,a=0,s=t.count();a5)return;var i=this._model.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]);"none"!==i.behavior&&this._dispatchExpand({axisExpandWindow:i.axisExpandWindow})}this._mouseDownPoint=null},mousemove:function(t){if(!this._mouseDownPoint&&AD(this,"mousemove")){var e=this._model,n=e.coordinateSystem.getSlidedAxisExpandWindow([t.offsetX,t.offsetY]),i=n.behavior;"jump"===i&&this._throttledDispatchExpand.debounceNextCall(e.get("axisExpandDebounce")),this._throttledDispatchExpand("none"===i?null:{axisExpandWindow:n.axisExpandWindow,animation:"jump"===i?null:{duration:0}})}}};function AD(t,e){var n=t._model;return n.get("axisExpandable")&&n.get("axisExpandTriggerOn")===e}var LD=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(){t.prototype.init.apply(this,arguments),this.mergeOption({})},e.prototype.mergeOption=function(t){var e=this.option;t&&S(e,t,!0),this._initDimensions()},e.prototype.contains=function(t,e){var n=t.get("parallelIndex");return null!=n&&e.getComponent("parallel",n)===this},e.prototype.setAxisExpand=function(t){P(["axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth","axisExpandWindow"],(function(e){t.hasOwnProperty(e)&&(this.option[e]=t[e])}),this)},e.prototype._initDimensions=function(){var t=this.dimensions=[],e=this.parallelAxisIndex=[];P(N(this.ecModel.queryComponents({mainType:"parallelAxis"}),(function(t){return(t.get("parallelIndex")||0)===this.componentIndex}),this),(function(n){t.push("dim"+n.get("dim")),e.push(n.componentIndex)}))},e.type="parallel",e.dependencies=["parallelAxis"],e.layoutMode="box",e.defaultOption={zlevel:0,z:0,left:80,top:60,right:80,bottom:60,layout:"horizontal",axisExpandable:!1,axisExpandCenter:null,axisExpandCount:0,axisExpandWidth:50,axisExpandRate:17,axisExpandDebounce:50,axisExpandSlideTriggerArea:[-.15,.05,.4],axisExpandTriggerOn:"click",parallelAxisDefault:null},e}(Xc),kD=function(t){function e(e,n,i,r,o){var a=t.call(this,e,n,i)||this;return a.type=r||"value",a.axisIndex=o,a}return n(e,t),e.prototype.isHorizontal=function(){return"horizontal"!==this.coordinateSystem.getModel().get("layout")},e}(hb);function PD(t,e,n,i,r,o){t=t||0;var a=n[1]-n[0];if(null!=r&&(r=RD(r,[0,a])),null!=o&&(o=Math.max(o,null!=r?r:0)),"all"===i){var s=Math.abs(e[1]-e[0]);s=RD(s,[0,a]),r=o=RD(s,[r,o]),i=0}e[0]=RD(e[0],n),e[1]=RD(e[1],n);var l=OD(e,i);e[i]+=t;var u,h=r||0,c=n.slice();return l.sign<0?c[0]+=h:c[1]-=h,e[i]=RD(e[i],c),u=OD(e,i),null!=r&&(u.sign!==l.sign||u.spano&&(e[1-i]=e[i]+u.sign*o),e}function OD(t,e){var n=t[e]-t[1-e];return{span:Math.abs(n),sign:n>0?-1:n<0?1:e?-1:1}}function RD(t,e){return Math.min(null!=e[1]?e[1]:1/0,Math.max(null!=e[0]?e[0]:-1/0,t))}var ND=P,zD=Math.min,ED=Math.max,VD=Math.floor,BD=Math.ceil,FD=ji,GD=Math.PI,HD=function(){function t(t,e,n){this.type="parallel",this._axesMap=ht(),this._axesLayout={},this.dimensions=t.dimensions,this._model=t,this._init(t,e,n)}return t.prototype._init=function(t,e,n){var i=t.dimensions,r=t.parallelAxisIndex;ND(i,(function(t,n){var i=r[n],o=e.getComponent("parallelAxis",i),a=this._axesMap.set(t,new kD(t,Bx(o),[0,0],o.get("type"),i)),s="category"===a.type;a.onBand=s&&o.get("boundaryGap"),a.inverse=o.get("inverse"),o.axis=a,a.model=o,a.coordinateSystem=o.coordinateSystem=this}),this)},t.prototype.update=function(t,e){this._updateAxesFromSeries(this._model,t)},t.prototype.containPoint=function(t){var e=this._makeLayoutInfo(),n=e.axisBase,i=e.layoutBase,r=e.pixelDimIndex,o=t[1-r],a=t[r];return o>=n&&o<=n+e.axisLength&&a>=i&&a<=i+e.layoutLength},t.prototype.getModel=function(){return this._model},t.prototype._updateAxesFromSeries=function(t,e){e.eachSeries((function(n){if(t.contains(n,e)){var i=n.getData();ND(this.dimensions,(function(t){var e=this._axesMap.get(t);e.scale.unionExtentFromData(i,i.mapDimension(t)),Vx(e.scale,e.model)}),this)}}),this)},t.prototype.resize=function(t,e){this._rect=Vc(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()}),this._layoutAxes()},t.prototype.getRect=function(){return this._rect},t.prototype._makeLayoutInfo=function(){var t,e=this._model,n=this._rect,i=["x","y"],r=["width","height"],o=e.get("layout"),a="horizontal"===o?0:1,s=n[r[a]],l=[0,s],u=this.dimensions.length,h=WD(e.get("axisExpandWidth"),l),c=WD(e.get("axisExpandCount")||0,[0,u]),p=e.get("axisExpandable")&&u>3&&u>c&&c>1&&h>0&&s>0,d=e.get("axisExpandWindow");d?(t=WD(d[1]-d[0],l),d[1]=d[0]+t):(t=WD(h*(c-1),l),(d=[h*(e.get("axisExpandCenter")||VD(u/2))-t/2])[1]=d[0]+t);var f=(s-t)/(u-c);f<3&&(f=0);var g=[VD(FD(d[0]/h,1))+1,BD(FD(d[1]/h,1))-1],y=f/h*d[0];return{layout:o,pixelDimIndex:a,layoutBase:n[i[a]],layoutLength:s,axisBase:n[i[1-a]],axisLength:n[r[1-a]],axisExpandable:p,axisExpandWidth:h,axisCollapseWidth:f,axisExpandWindow:d,axisCount:u,winInnerIndices:g,axisExpandWindow0Pos:y}},t.prototype._layoutAxes=function(){var t=this._rect,e=this._axesMap,n=this.dimensions,i=this._makeLayoutInfo(),r=i.layout;e.each((function(t){var e=[0,i.axisLength],n=t.inverse?1:0;t.setExtent(e[n],e[1-n])})),ND(n,(function(e,n){var o=(i.axisExpandable?XD:UD)(n,i),a={horizontal:{x:o.position,y:i.axisLength},vertical:{x:0,y:o.position}},s={horizontal:GD/2,vertical:0},l=[a[r].x+t.x,a[r].y+t.y],u=s[r],h=[1,0,0,1,0,0];Xn(h,h,u),Un(h,h,l),this._axesLayout[e]={position:l,rotation:u,transform:h,axisNameAvailableWidth:o.axisNameAvailableWidth,axisLabelShow:o.axisLabelShow,nameTruncateMaxWidth:o.nameTruncateMaxWidth,tickDirection:1,labelDirection:1}}),this)},t.prototype.getAxis=function(t){return this._axesMap.get(t)},t.prototype.dataToPoint=function(t,e){return this.axisCoordToPoint(this._axesMap.get(e).dataToCoord(t),e)},t.prototype.eachActiveState=function(t,e,n,i){null==n&&(n=0),null==i&&(i=t.count());var r=this._axesMap,o=this.dimensions,a=[],s=[];P(o,(function(e){a.push(t.mapDimension(e)),s.push(r.get(e).model)}));for(var l=this.hasAxisBrushed(),u=n;ur*(1-h[0])?(l="jump",a=s-r*(1-h[2])):(a=s-r*h[1])>=0&&(a=s-r*(1-h[1]))<=0&&(a=0),(a*=e.axisExpandWidth/u)?PD(a,i,o,"all"):l="none";else{var p=i[1]-i[0];(i=[ED(0,o[1]*s/p-p/2)])[1]=zD(o[1],i[0]+p),i[0]=i[1]-p}return{axisExpandWindow:i,behavior:l}},t}();function WD(t,e){return zD(ED(t,e[0]),e[1])}function UD(t,e){var n=e.layoutLength/(e.axisCount-1);return{position:n*t,axisNameAvailableWidth:n,axisLabelShow:!0}}function XD(t,e){var n,i,r=e.layoutLength,o=e.axisExpandWidth,a=e.axisCount,s=e.axisCollapseWidth,l=e.winInnerIndices,u=s,h=!1;return t=0;n--)qi(e[n])},e.prototype.getActiveState=function(t){var e=this.activeIntervals;if(!e.length)return"normal";if(null==t||isNaN(+t))return"inactive";if(1===e.length){var n=e[0];if(n[0]<=t&&t<=n[1])return"active"}else for(var i=0,r=e.length;i6}(t)||o){if(a&&!o){"single"===s.brushMode&&pA(t);var l=w(s);l.brushType=AA(l.brushType,a),l.panelId=a===jD?null:a.panelId,o=t._creatingCover=rA(t,l),t._covers.push(o)}if(o){var u=PA[AA(t._brushType,a)];o.__brushOption.range=u.getCreatingRange(IA(t,o,t._track)),i&&(oA(t,o),u.updateCommon(t,o)),aA(t,o),r={isEnd:i}}}else i&&"single"===s.brushMode&&s.removeOnClick&&hA(t,e,n)&&pA(t)&&(r={isEnd:i,removeOnClick:!0});return r}function AA(t,e){return"auto"===t?e.defaultBrushType:t}var LA={mousedown:function(t){if(this._dragging)kA(this,t);else if(!t.target||!t.target.draggable){TA(t);var e=this.group.transformCoordToLocal(t.offsetX,t.offsetY);this._creatingCover=null,(this._creatingPanel=hA(this,t,e))&&(this._dragging=!0,this._track=[e.slice()])}},mousemove:function(t){var e=t.offsetX,n=t.offsetY,i=this.group.transformCoordToLocal(e,n);if(function(t,e,n){if(t._brushType&&!function(t,e,n){var i=t._zr;return e<0||e>i.getWidth()||n<0||n>i.getHeight()}(t,e.offsetX,e.offsetY)){var i=t._zr,r=t._covers,o=hA(t,e,n);if(!t._dragging)for(var a=0;a=0&&(o[r[a].depth]=new Oh(r[a],this,e));if(i&&n)return iD(i,n,this,!0,(function(t,e){t.wrapMethod("getItemModel",(function(t,e){var n=t.parentModel,i=n.getData().getItemLayout(e);if(i){var r=i.depth,o=n.levelModels[r];o&&(t.parentModel=o)}return t})),e.wrapMethod("getItemModel",(function(t,e){var n=t.parentModel,i=n.getGraph().getEdgeByIndex(e).node1.getLayout();if(i){var r=i.depth,o=n.levelModels[r];o&&(t.parentModel=o)}return t}))})).data},e.prototype.setNodePosition=function(t,e){var n=this.option.data[t];n.localX=e[0],n.localY=e[1]},e.prototype.getGraph=function(){return this.getData().graph},e.prototype.getEdgeData=function(){return this.getGraph().edgeData},e.prototype.formatTooltip=function(t,e,n){function i(t){return isNaN(t)||null==t}if("edge"===n){var r=this.getDataParams(t,n),o=r.data,a=r.value;return tf("nameValue",{name:o.source+" -- "+o.target,value:a,noValue:i(a)})}var s=this.getGraph().getNodeByIndex(t).getLayout().value,l=this.getDataParams(t,n).data.name;return tf("nameValue",{name:null!=l?l+"":null,value:s,noValue:i(s)})},e.prototype.optionUpdated=function(){},e.prototype.getDataParams=function(e,n){var i=t.prototype.getDataParams.call(this,e,n);if(null==i.value&&"node"===n){var r=this.getGraph().getNodeByIndex(e).getLayout().value;i.value=r}return i},e.type="series.sankey",e.defaultOption={zlevel:0,z:2,coordinateSystem:"view",left:"5%",top:"5%",right:"20%",bottom:"5%",orient:"horizontal",nodeWidth:20,nodeGap:8,draggable:!0,layoutIterations:32,label:{show:!0,position:"right",fontSize:12},levels:[],nodeAlign:"justify",lineStyle:{color:"#314656",opacity:.2,curveness:.5},emphasis:{label:{show:!0},lineStyle:{opacity:.5}},select:{itemStyle:{borderColor:"#212121"}},animationEasing:"linear",animationDuration:1e3},e}(ff);function ZA(t,e){t.eachSeriesByType("sankey",(function(t){var n=t.get("nodeWidth"),i=t.get("nodeGap"),r=function(t,e){return Vc(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()})}(t,e);t.layoutInfo=r;var o=r.width,a=r.height,s=t.getGraph(),l=s.nodes,u=s.edges;!function(t){P(t,(function(t){var e=iL(t.outEdges,nL),n=iL(t.inEdges,nL),i=t.getValue()||0,r=Math.max(e,n,i);t.setLayout({value:r},!0)}))}(l),function(t,e,n,i,r,o,a,s,l){(function(t,e,n,i,r,o,a){for(var s=[],l=[],u=[],h=[],c=0,p=0;p=0;v&&y.depth>d&&(d=y.depth),g.setLayout({depth:v?y.depth:c},!0),"vertical"===o?g.setLayout({dy:n},!0):g.setLayout({dx:n},!0);for(var m=0;mc-1?d:c-1;a&&"left"!==a&&function(t,e,n,i){if("right"===e){for(var r=[],o=t,a=0;o.length;){for(var s=0;s0;o--)KA(s,l*=.99,a),qA(s,r,n,i,a),rL(s,l,a),qA(s,r,n,i,a)}(t,e,o,r,i,a,s),function(t,e){var n="vertical"===e?"x":"y";P(t,(function(t){t.outEdges.sort((function(t,e){return t.node2.getLayout()[n]-e.node2.getLayout()[n]})),t.inEdges.sort((function(t,e){return t.node1.getLayout()[n]-e.node1.getLayout()[n]}))})),P(t,(function(t){var e=0,n=0;P(t.outEdges,(function(t){t.setLayout({sy:e},!0),e+=t.getLayout().dy})),P(t.inEdges,(function(t){t.setLayout({ty:n},!0),n+=t.getLayout().dy}))}))}(t,s)}(l,u,n,i,o,a,0!==N(l,(function(t){return 0===t.getLayout().value})).length?0:t.get("layoutIterations"),t.get("orient"),t.get("nodeAlign"))}))}function jA(t){var e=t.hostGraph.data.getRawDataItem(t.dataIndex);return null!=e.depth&&e.depth>=0}function qA(t,e,n,i,r){var o="vertical"===r?"x":"y";P(t,(function(t){var a,s,l;t.sort((function(t,e){return t.getLayout()[o]-e.getLayout()[o]}));for(var u=0,h=t.length,c="vertical"===r?"dx":"dy",p=0;p0&&(a=s.getLayout()[o]+l,"vertical"===r?s.setLayout({x:a},!0):s.setLayout({y:a},!0)),u=s.getLayout()[o]+s.getLayout()[c]+e;if((l=u-e-("vertical"===r?i:n))>0){a=s.getLayout()[o]-l,"vertical"===r?s.setLayout({x:a},!0):s.setLayout({y:a},!0),u=a;for(p=h-2;p>=0;--p)(l=(s=t[p]).getLayout()[o]+s.getLayout()[c]+e-u)>0&&(a=s.getLayout()[o]-l,"vertical"===r?s.setLayout({x:a},!0):s.setLayout({y:a},!0)),u=s.getLayout()[o]}}))}function KA(t,e,n){P(t.slice().reverse(),(function(t){P(t,(function(t){if(t.outEdges.length){var i=iL(t.outEdges,$A,n)/iL(t.outEdges,nL);if(isNaN(i)){var r=t.outEdges.length;i=r?iL(t.outEdges,JA,n)/r:0}if("vertical"===n){var o=t.getLayout().x+(i-eL(t,n))*e;t.setLayout({x:o},!0)}else{var a=t.getLayout().y+(i-eL(t,n))*e;t.setLayout({y:a},!0)}}}))}))}function $A(t,e){return eL(t.node2,e)*t.getValue()}function JA(t,e){return eL(t.node2,e)}function QA(t,e){return eL(t.node1,e)*t.getValue()}function tL(t,e){return eL(t.node1,e)}function eL(t,e){return"vertical"===e?t.getLayout().x+t.getLayout().dx/2:t.getLayout().y+t.getLayout().dy/2}function nL(t){return t.getValue()}function iL(t,e,n){for(var i=0,r=t.length,o=-1;++oi&&(i=e)})),P(e,(function(e){var r=new TT({type:"color",mappingMethod:"linear",dataExtent:[n,i],visual:t.get("color")}).mapValueToVisual(e.getLayout().value),o=e.getModel().get(["itemStyle","color"]);null!=o?(e.setVisual("color",o),e.setVisual("style",{fill:o})):(e.setVisual("color",r),e.setVisual("style",{fill:r}))}))}}))}var aL=function(){function t(){}return t.prototype.getInitialData=function(t,e){var n,i,r=e.getComponent("xAxis",this.get("xAxisIndex")),o=e.getComponent("yAxis",this.get("yAxisIndex")),a=r.get("type"),s=o.get("type");"category"===a?(t.layout="horizontal",n=r.getOrdinalMeta(),i=!0):"category"===s?(t.layout="vertical",n=o.getOrdinalMeta(),i=!0):t.layout=t.layout||"horizontal";var l=["x","y"],u="horizontal"===t.layout?0:1,h=this._baseAxisDim=l[u],c=l[1-u],p=[r,o],d=p[u].get("type"),f=p[1-u].get("type"),g=t.data;if(g&&i){var y=[];P(g,(function(t,e){var n;F(t)?(n=t.slice(),t.unshift(e)):F(t.value)?(n=t.value.slice(),t.value.unshift(e)):n=t,y.push(n)})),t.data=y}var v=this.defaultValueDimensions,m=[{name:h,type:r_(d),ordinalMeta:n,otherDims:{tooltip:!1,itemName:0},dimsDef:["base"]},{name:c,type:r_(f),dimsDef:v.slice()}];return MS(this,{coordDimensions:m,dimensionsCount:v.length+1,encodeDefaulter:B(lp,m,this)})},t.prototype.getBaseAxis=function(){var t=this._baseAxisDim;return this.ecModel.getComponent(t+"Axis",this.get(t+"AxisIndex")).axis},t}(),sL=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.defaultValueDimensions=[{name:"min",defaultTooltip:!0},{name:"Q1",defaultTooltip:!0},{name:"median",defaultTooltip:!0},{name:"Q3",defaultTooltip:!0},{name:"max",defaultTooltip:!0}],n.visualDrawType="stroke",n}return n(e,t),e.type="series.boxplot",e.dependencies=["xAxis","yAxis","grid"],e.defaultOption={zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,layout:null,boxWidth:[7,50],itemStyle:{color:"#fff",borderWidth:1},emphasis:{scale:!0,itemStyle:{borderWidth:2,shadowBlur:5,shadowOffsetX:1,shadowOffsetY:1,shadowColor:"rgba(0,0,0,0.2)"}},animationDuration:800},e}(ff);L(sL,aL,!0);var lL=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=t.getData(),r=this.group,o=this._data;this._data||r.removeAll();var a="horizontal"===t.get("layout")?1:0;i.diff(o).add((function(t){if(i.hasValue(t)){var e=cL(i.getItemLayout(t),i,t,a,!0);i.setItemGraphicEl(t,e),r.add(e)}})).update((function(t,e){var n=o.getItemGraphicEl(e);if(i.hasValue(t)){var s=i.getItemLayout(t);n?pL(s,n,i,t):n=cL(s,i,t,a),r.add(n),i.setItemGraphicEl(t,n)}else r.remove(n)})).remove((function(t){var e=o.getItemGraphicEl(t);e&&r.remove(e)})).execute(),this._data=i},e.prototype.remove=function(t){var e=this.group,n=this._data;this._data=null,n&&n.eachItemGraphicEl((function(t){t&&e.remove(t)}))},e.type="boxplot",e}(Tf),uL=function(){},hL=function(t){function e(e){var n=t.call(this,e)||this;return n.type="boxplotBoxPath",n}return n(e,t),e.prototype.getDefaultShape=function(){return new uL},e.prototype.buildPath=function(t,e){var n=e.points,i=0;for(t.moveTo(n[i][0],n[i][1]),i++;i<4;i++)t.lineTo(n[i][0],n[i][1]);for(t.closePath();ig){var x=[v,_];i.push(x)}}}return{boxData:n,outliers:i}}(e.getRawData(),t.config);return[{dimensions:["ItemName","Low","Q1","Q2","Q3","High"],data:i.boxData},{data:i.outliers}]}};var mL=["color","borderColor"],_L=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){this.group.removeClipPath(),this._updateDrawMode(t),this._isLargeDraw?this._renderLarge(t):this._renderNormal(t)},e.prototype.incrementalPrepareRender=function(t,e,n){this._clear(),this._updateDrawMode(t)},e.prototype.incrementalRender=function(t,e,n,i){this._isLargeDraw?this._incrementalRenderLarge(t,e):this._incrementalRenderNormal(t,e)},e.prototype._updateDrawMode=function(t){var e=t.pipelineContext.large;null!=this._isLargeDraw&&e===this._isLargeDraw||(this._isLargeDraw=e,this._clear())},e.prototype._renderNormal=function(t){var e=t.getData(),n=this._data,i=this.group,r=e.getLayout("isSimpleBox"),o=t.get("clip",!0),a=t.coordinateSystem,s=a.getArea&&a.getArea();this._data||i.removeAll(),e.diff(n).add((function(n){if(e.hasValue(n)){var a=e.getItemLayout(n);if(o&&SL(s,a))return;var l=wL(a,n,!0);Wu(l,{shape:{points:a.ends}},t,n),ML(l,e,n,r),i.add(l),e.setItemGraphicEl(n,l)}})).update((function(a,l){var u=n.getItemGraphicEl(l);if(e.hasValue(a)){var h=e.getItemLayout(a);o&&SL(s,h)?i.remove(u):(u?Hu(u,{shape:{points:h.ends}},t,a):u=wL(h),ML(u,e,a,r),i.add(u),e.setItemGraphicEl(a,u))}else i.remove(u)})).remove((function(t){var e=n.getItemGraphicEl(t);e&&i.remove(e)})).execute(),this._data=e},e.prototype._renderLarge=function(t){this._clear(),DL(t,this.group);var e=t.get("clip",!0)?Rw(t.coordinateSystem,!1,t):null;e?this.group.setClipPath(e):this.group.removeClipPath()},e.prototype._incrementalRenderNormal=function(t,e){for(var n,i=e.getData(),r=i.getLayout("isSimpleBox");null!=(n=t.next());){var o=wL(i.getItemLayout(n));ML(o,i,n,r),o.incremental=!0,this.group.add(o)}},e.prototype._incrementalRenderLarge=function(t,e){DL(e,this.group,!0)},e.prototype.remove=function(t){this._clear()},e.prototype._clear=function(){this.group.removeAll(),this._data=null},e.type="candlestick",e}(Tf),xL=function(){},bL=function(t){function e(e){var n=t.call(this,e)||this;return n.type="normalCandlestickBox",n}return n(e,t),e.prototype.getDefaultShape=function(){return new xL},e.prototype.buildPath=function(t,e){var n=e.points;this.__simpleBox?(t.moveTo(n[4][0],n[4][1]),t.lineTo(n[6][0],n[6][1])):(t.moveTo(n[0][0],n[0][1]),t.lineTo(n[1][0],n[1][1]),t.lineTo(n[2][0],n[2][1]),t.lineTo(n[3][0],n[3][1]),t.closePath(),t.moveTo(n[4][0],n[4][1]),t.lineTo(n[5][0],n[5][1]),t.moveTo(n[6][0],n[6][1]),t.lineTo(n[7][0],n[7][1]))},e}(Ka);function wL(t,e,n){var i=t.ends;return new bL({shape:{points:n?IL(i,t):i},z2:100})}function SL(t,e){for(var n=!0,i=0;i0?"borderColor":"borderColor0"])||n.get(["itemStyle",t>0?"color":"color0"]),o=n.getModel("itemStyle").getItemStyle(mL);e.useStyle(o),e.style.fill=null,e.style.stroke=r}var LL=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.defaultValueDimensions=[{name:"open",defaultTooltip:!0},{name:"close",defaultTooltip:!0},{name:"lowest",defaultTooltip:!0},{name:"highest",defaultTooltip:!0}],n}return n(e,t),e.prototype.getShadowDim=function(){return"open"},e.prototype.brushSelector=function(t,e,n){var i=e.getItemLayout(t);return i&&n.rect(i.brushRect)},e.type="series.candlestick",e.dependencies=["xAxis","yAxis","grid"],e.defaultOption={zlevel:0,z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,layout:null,clip:!0,itemStyle:{color:"#eb5454",color0:"#47b262",borderColor:"#eb5454",borderColor0:"#47b262",borderWidth:1},emphasis:{scale:!0,itemStyle:{borderWidth:2}},barMaxWidth:null,barMinWidth:null,barWidth:null,large:!0,largeThreshold:600,progressive:3e3,progressiveThreshold:1e4,progressiveChunkMode:"mod",animationEasing:"linear",animationDuration:300},e}(ff);function kL(t){t&&F(t.series)&&P(t.series,(function(t){X(t)&&"k"===t.type&&(t.type="candlestick")}))}L(LL,aL,!0);var PL=["itemStyle","borderColor"],OL=["itemStyle","borderColor0"],RL=["itemStyle","color"],NL=["itemStyle","color0"],zL={seriesType:"candlestick",plan:Sf(),performRawSeries:!0,reset:function(t,e){function n(t,e){return e.get(t>0?RL:NL)}function i(t,e){return e.get(t>0?PL:OL)}if(!e.isSeriesFiltered(t))return!t.pipelineContext.large&&{progress:function(t,e){for(var r;null!=(r=t.next());){var o=e.getItemModel(r),a=e.getItemLayout(r).sign,s=o.getItemStyle();s.fill=n(a,o),s.stroke=i(a,o)||s.fill,I(e.ensureUniqueItemVisual(r,"style"),s)}}}}},EL="undefined"!=typeof Float32Array?Float32Array:Array,VL={seriesType:"candlestick",plan:Sf(),reset:function(t){var e=t.coordinateSystem,n=t.getData(),i=function(t,e){var n,i=t.getBaseAxis(),r="category"===i.type?i.getBandWidth():(n=i.getExtent(),Math.abs(n[1]-n[0])/e.count()),o=Zi(tt(t.get("barMaxWidth"),r),r),a=Zi(tt(t.get("barMinWidth"),1),r),s=t.get("barWidth");return null!=s?Zi(s,r):Math.max(Math.min(r/2,o),a)}(t,n),r=["x","y"],o=n.mapDimension(r[0]),a=n.mapDimensionsAll(r[1]),s=a[0],l=a[1],u=a[2],h=a[3];if(n.setLayout({candleWidth:i,isSimpleBox:i<=1.3}),!(null==o||a.length<4))return{progress:t.pipelineContext.large?function(t,n){var i,r,a=new EL(4*t.count),c=0,p=[],d=[];for(;null!=(r=t.next());){var f=n.get(o,r),g=n.get(s,r),y=n.get(l,r),v=n.get(u,r),m=n.get(h,r);isNaN(f)||isNaN(v)||isNaN(m)?(a[c++]=NaN,c+=3):(a[c++]=BL(n,r,g,y,l),p[0]=f,p[1]=v,i=e.dataToPoint(p,null,d),a[c++]=i?i[0]:NaN,a[c++]=i?i[1]:NaN,p[1]=m,i=e.dataToPoint(p,null,d),a[c++]=i?i[1]:NaN)}n.setLayout("largePoints",a)}:function(t,n){var r;for(;null!=(r=t.next());){var a=n.get(o,r),c=n.get(s,r),p=n.get(l,r),d=n.get(u,r),f=n.get(h,r),g=Math.min(c,p),y=Math.max(c,p),v=w(g,a),m=w(y,a),_=w(d,a),x=w(f,a),b=[];S(b,m,0),S(b,v,1),b.push(I(x),I(m),I(_),I(v)),n.setItemLayout(r,{sign:BL(n,r,c,p,l),initBaseline:c>p?m[1]:v[1],ends:b,brushRect:M(d,f,a)})}function w(t,n){var i=[];return i[0]=n,i[1]=t,isNaN(n)||isNaN(t)?[NaN,NaN]:e.dataToPoint(i)}function S(t,e,n){var r=e.slice(),o=e.slice();r[0]=Fu(r[0]+i/2,1,!1),o[0]=Fu(o[0]-i/2,1,!0),n?t.push(r,o):t.push(o,r)}function M(t,e,n){var r=w(t,n),o=w(e,n);return r[0]-=i/2,o[0]-=i/2,{x:r[0],y:r[1],width:i,height:o[1]-r[1]}}function I(t){return t[0]=Fu(t[0],1),t}}}}};function BL(t,e,n,i,r){return n>i?-1:n0?t.get(r,e-1)<=i?1:-1:1}function FL(t,e){var n=e.rippleEffectColor||e.color;t.eachChild((function(t){t.attr({z:e.z,zlevel:e.zlevel,style:{stroke:"stroke"===e.brushType?n:null,fill:"fill"===e.brushType?n:null}})}))}var GL=function(t){function e(e,n){var i=t.call(this)||this,r=new dw(e,n),o=new Ei;return i.add(r),i.add(o),i.updateData(e,n),i}return n(e,t),e.prototype.stopEffectAnimation=function(){this.childAt(1).removeAll()},e.prototype.startEffectAnimation=function(t){for(var e=t.symbolType,n=t.color,i=this.childAt(1),r=0;r<3;r++){var o=fy(e,-1,-1,2,2,n);o.attr({style:{strokeNoScale:!0},z2:99,silent:!0,scaleX:.5,scaleY:.5});var a=-r/3*t.period+t.effectOffset;o.animate("",!0).when(t.period,{scaleX:t.rippleScale/2,scaleY:t.rippleScale/2}).delay(a).start(),o.animateStyle(!0).when(t.period,{opacity:0}).delay(a).start(),i.add(o)}FL(i,t)},e.prototype.updateEffectAnimation=function(t){for(var e=this._effectCfg,n=this.childAt(1),i=["symbolType","period","rippleScale"],r=0;r0&&(a=this._getLineLength(i)/l*1e3),(a!==this._period||s!==this._loop)&&(i.stopAnimation(),a>0)){var h=void 0;h="function"==typeof u?u(n):u,i.__t>0&&(h=-a*i.__t),i.__t=0;var c=i.animate("",s).when(a,{__t:1}).delay(h).during((function(){r._updateSymbolPosition(i)}));s||c.done((function(){r.remove(i)})),c.start()}this._period=a,this._loop=s}},e.prototype._getLineLength=function(t){return Lt(t.__p1,t.__cp1)+Lt(t.__cp1,t.__p2)},e.prototype._updateAnimationPoints=function(t,e){t.__p1=e[0],t.__p2=e[1],t.__cp1=e[2]||[(e[0][0]+e[1][0])/2,(e[0][1]+e[1][1])/2]},e.prototype.updateData=function(t,e,n){this.childAt(0).updateData(t,e,n),this._updateEffectSymbol(t,e)},e.prototype._updateSymbolPosition=function(t){var e=t.__p1,n=t.__p2,i=t.__cp1,r=t.__t,o=[t.x,t.y],a=o.slice(),s=Uo,l=Xo;o[0]=s(e[0],i[0],n[0],r),o[1]=s(e[1],i[1],n[1],r);var u=l(e[0],i[0],n[0],r),h=l(e[1],i[1],n[1],r);t.rotation=-Math.atan2(h,u)-Math.PI/2,"line"!==this._symbolType&&"rect"!==this._symbolType&&"roundRect"!==this._symbolType||(void 0!==t.__lastT&&t.__lastT=0&&!(i[o]<=e);o--);o=Math.min(o,r-2)}else{for(o=a;oe);o++);o=Math.min(o-1,r-2)}var s=(e-i[o])/(i[o+1]-i[o]),l=n[o],u=n[o+1];t.x=l[0]*(1-s)+s*u[0],t.y=l[1]*(1-s)+s*u[1];var h=u[0]-l[0],c=u[1]-l[1];t.rotation=-Math.atan2(c,h)-Math.PI/2,this._lastFrame=o,this._lastFramePercent=e,t.ignore=!1}},e}(UL),ZL=function(){this.polyline=!1,this.curveness=0,this.segs=[]},jL=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.prototype.getDefaultStyle=function(){return{stroke:"#000",fill:null}},e.prototype.getDefaultShape=function(){return new ZL},e.prototype.buildPath=function(t,e){var n=e.segs,i=e.curveness;if(e.polyline)for(var r=0;r0){t.moveTo(n[r++],n[r++]);for(var a=1;a0){var c=(s+u)/2-(l-h)*i,p=(l+h)/2-(u-s)*i;t.quadraticCurveTo(c,p,u,h)}else t.lineTo(u,h)}},e.prototype.findDataIndex=function(t,e){var n=this.shape,i=n.segs,r=n.curveness,o=this.style.lineWidth;if(n.polyline)for(var a=0,s=0;s0)for(var u=i[s++],h=i[s++],c=1;c0){if(Oa(u,h,(u+p)/2-(h-d)*r,(h+d)/2-(p-u)*r,p,d,o,t,e))return a}else if(ka(u,h,p,d,o,t,e))return a;a++}return-1},e}(Ka),qL=function(){function t(){this.group=new Ei}return t.prototype.isPersistent=function(){return!this._incremental},t.prototype.updateData=function(t){this.group.removeAll();var e=new jL({rectHover:!0,cursor:"default"});e.setShape({segs:t.getLayout("linesPoints")}),this._setCommon(e,t),this.group.add(e),this._incremental=null},t.prototype.incrementalPrepareUpdate=function(t){this.group.removeAll(),this._clearIncremental(),t.count()>5e5?(this._incremental||(this._incremental=new Tu({silent:!0})),this.group.add(this._incremental)):this._incremental=null},t.prototype.incrementalUpdate=function(t,e){var n=new jL;n.setShape({segs:e.getLayout("linesPoints")}),this._setCommon(n,e,!!this._incremental),this._incremental?this._incremental.addDisplayable(n,!0):(n.rectHover=!0,n.cursor="default",n.__startIndex=t.start,this.group.add(n))},t.prototype.remove=function(){this._clearIncremental(),this._incremental=null,this.group.removeAll()},t.prototype._setCommon=function(t,e,n){var i=e.hostModel;t.setShape({polyline:i.get("polyline"),curveness:i.get(["lineStyle","curveness"])}),t.useStyle(i.getModel("lineStyle").getLineStyle()),t.style.strokeNoScale=!0;var r=e.getVisual("style");if(r&&r.stroke&&t.setStyle("stroke",r.stroke),t.setStyle("fill",null),!n){var o=_s(t);o.seriesIndex=i.seriesIndex,t.on("mousemove",(function(e){o.dataIndex=null;var n=t.findDataIndex(e.offsetX,e.offsetY);n>0&&(o.dataIndex=n+t.__startIndex)}))}},t.prototype._clearIncremental=function(){var t=this._incremental;t&&t.clearDisplaybles()},t}(),KL={seriesType:"lines",plan:Sf(),reset:function(t){var e=t.coordinateSystem,n=t.get("polyline"),i=t.pipelineContext.large;return{progress:function(r,o){var a=[];if(i){var s=void 0,l=r.end-r.start;if(n){for(var u=0,h=r.start;h ")})},e.prototype.preventIncremental=function(){return!!this.get(["effect","show"])},e.prototype.getProgressive=function(){var t=this.option.progressive;return null==t?this.option.large?1e4:this.get("progressive"):t},e.prototype.getProgressiveThreshold=function(){var t=this.option.progressiveThreshold;return null==t?this.option.large?2e4:this.get("progressiveThreshold"):t},e.type="series.lines",e.dependencies=["grid","polar","geo","calendar"],e.defaultOption={coordinateSystem:"geo",zlevel:0,z:2,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,symbol:["none","none"],symbolSize:[10,10],geoIndex:0,effect:{show:!1,period:4,constantSpeed:0,symbol:"circle",symbolSize:3,loop:!0,trailLength:.2},large:!1,largeThreshold:2e3,polyline:!1,clip:!0,label:{show:!1,position:"end"},lineStyle:{opacity:.5}},e}(ff);function nk(t){return t instanceof Array||(t=[t,t]),t}var ik={seriesType:"lines",reset:function(t){var e=nk(t.get("symbol")),n=nk(t.get("symbolSize")),i=t.getData();return i.setVisual("fromSymbol",e&&e[0]),i.setVisual("toSymbol",e&&e[1]),i.setVisual("fromSymbolSize",n&&n[0]),i.setVisual("toSymbolSize",n&&n[1]),{dataEach:i.hasItemOption?function(t,e){var n=t.getItemModel(e),i=nk(n.getShallow("symbol",!0)),r=nk(n.getShallow("symbolSize",!0));i[0]&&t.setItemVisual(e,"fromSymbol",i[0]),i[1]&&t.setItemVisual(e,"toSymbol",i[1]),r[0]&&t.setItemVisual(e,"fromSymbolSize",r[0]),r[1]&&t.setItemVisual(e,"toSymbolSize",r[1])}:null}}};var rk=function(){function t(){this.blurSize=30,this.pointSize=20,this.maxOpacity=1,this.minOpacity=0,this._gradientPixels={inRange:null,outOfRange:null};var t=C();this.canvas=t}return t.prototype.update=function(t,e,n,i,r,o){var a=this._getBrush(),s=this._getGradient(r,"inRange"),l=this._getGradient(r,"outOfRange"),u=this.pointSize+this.blurSize,h=this.canvas,c=h.getContext("2d"),p=t.length;h.width=e,h.height=n;for(var d=0;d0){var I=o(v)?s:l;v>0&&(v=v*S+w),_[x++]=I[M],_[x++]=I[M+1],_[x++]=I[M+2],_[x++]=I[M+3]*v*256}else x+=4}return c.putImageData(m,0,0),h},t.prototype._getBrush=function(){var t=this._brushCanvas||(this._brushCanvas=C()),e=this.pointSize+this.blurSize,n=2*e;t.width=n,t.height=n;var i=t.getContext("2d");return i.clearRect(0,0,n,n),i.shadowOffsetX=n,i.shadowBlur=this.blurSize,i.shadowColor="#000",i.beginPath(),i.arc(-e,e,this.pointSize,0,2*Math.PI,!0),i.closePath(),i.fill(),t},t.prototype._getGradient=function(t,e){for(var n=this._gradientPixels,i=n[e]||(n[e]=new Uint8ClampedArray(1024)),r=[0,0,0,0],o=0,a=0;a<256;a++)t[e](a/255,!0,r),i[o++]=r[0],i[o++]=r[1],i[o++]=r[2],i[o++]=r[3];return i},t}();function ok(t){var e=t.dimensions;return"lng"===e[0]&&"lat"===e[1]}var ak=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i;e.eachComponent("visualMap",(function(e){e.eachTargetSeries((function(n){n===t&&(i=e)}))})),this.group.removeAll(),this._incrementalDisplayable=null;var r=t.coordinateSystem;"cartesian2d"===r.type||"calendar"===r.type?this._renderOnCartesianAndCalendar(t,n,0,t.getData().count()):ok(r)&&this._renderOnGeo(r,t,i,n)},e.prototype.incrementalPrepareRender=function(t,e,n){this.group.removeAll()},e.prototype.incrementalRender=function(t,e,n,i){var r=e.coordinateSystem;r&&(ok(r)?this.render(e,n,i):this._renderOnCartesianAndCalendar(e,i,t.start,t.end,!0))},e.prototype._renderOnCartesianAndCalendar=function(t,e,n,i,r){var o,a,s,l,u=t.coordinateSystem;if(Nw(u,"cartesian2d")){var h=u.getAxis("x"),c=u.getAxis("y");0,o=h.getBandWidth(),a=c.getBandWidth(),s=h.scale.getExtent(),l=c.scale.getExtent()}for(var p=this.group,d=t.getData(),f=t.getModel(["emphasis","itemStyle"]).getItemStyle(),g=t.getModel(["blur","itemStyle"]).getItemStyle(),y=t.getModel(["select","itemStyle"]).getItemStyle(),v=ch(t),m=t.get(["emphasis","focus"]),_=t.get(["emphasis","blurScope"]),x=Nw(u,"cartesian2d")?[d.mapDimension("x"),d.mapDimension("y"),d.mapDimension("value")]:[d.mapDimension("time"),d.mapDimension("value")],b=n;bs[1]||Il[1])continue;var T=u.dataToPoint([M,I]);w=new ls({shape:{x:Math.floor(Math.round(T[0])-o/2),y:Math.floor(Math.round(T[1])-a/2),width:Math.ceil(o),height:Math.ceil(a)},style:S})}else{if(isNaN(d.get(x[1],b)))continue;w=new ls({z2:1,shape:u.dataToRect([d.get(x[0],b)]).contentShape,style:S})}var C=d.getItemModel(b);if(d.hasItemOption){var D=C.getModel("emphasis");f=D.getModel("itemStyle").getItemStyle(),g=C.getModel(["blur","itemStyle"]).getItemStyle(),y=C.getModel(["select","itemStyle"]).getItemStyle(),m=D.get("focus"),_=D.get("blurScope"),v=ch(C)}var A=t.getRawValue(b),L="-";A&&null!=A[2]&&(L=A[2]+""),hh(w,v,{labelFetcher:t,labelDataIndex:b,defaultOpacity:S.opacity,defaultText:L}),w.ensureState("emphasis").style=f,w.ensureState("blur").style=g,w.ensureState("select").style=y,sl(w,m,_),w.incremental=r,r&&(w.states.emphasis.hoverLayer=!0),p.add(w),d.setItemGraphicEl(b,w)}},e.prototype._renderOnGeo=function(t,e,n,i){var r=n.targetVisuals.inRange,o=n.targetVisuals.outOfRange,a=e.getData(),s=this._hmLayer||this._hmLayer||new rk;s.blurSize=e.get("blurSize"),s.pointSize=e.get("pointSize"),s.minOpacity=e.get("minOpacity"),s.maxOpacity=e.get("maxOpacity");var l=t.getViewRect().clone(),u=t.getRoamTransform();l.applyTransform(u);var h=Math.max(l.x,0),c=Math.max(l.y,0),p=Math.min(l.width+l.x,i.getWidth()),d=Math.min(l.height+l.y,i.getHeight()),f=p-h,g=d-c,y=[a.mapDimension("lng"),a.mapDimension("lat"),a.mapDimension("value")],v=a.mapArray(y,(function(e,n,i){var r=t.dataToPoint([e,n]);return r[0]-=h,r[1]-=c,r.push(i),r})),m=n.getExtent(),_="visualMap.continuous"===n.type?function(t,e){var n=t[1]-t[0];return e=[(e[0]-t[0])/n,(e[1]-t[0])/n],function(t){return t>=e[0]&&t<=e[1]}}(m,n.option.range):function(t,e,n){var i=t[1]-t[0],r=(e=O(e,(function(e){return{interval:[(e.interval[0]-t[0])/i,(e.interval[1]-t[0])/i]}}))).length,o=0;return function(t){var i;for(i=o;i=0;i--){var a;if((a=e[i].interval)[0]<=t&&t<=a[1]){o=i;break}}return i>=0&&i0?1:o<0?-1:0}(n,o,r,i,c),function(t,e,n,i,r,o,a,s,l,u){var h,c=l.valueDim,p=l.categoryDim,d=Math.abs(n[p.wh]),f=t.getItemVisual(e,"symbolSize");h=F(f)?f.slice():null==f?["100%","100%"]:[f,f];h[p.index]=Zi(h[p.index],d),h[c.index]=Zi(h[c.index],i?d:Math.abs(o)),u.symbolSize=h,(u.symbolScale=[h[0]/s,h[1]/s])[c.index]*=(l.isHorizontal?-1:1)*a}(t,e,r,o,0,c.boundingLength,c.pxSign,u,i,c),function(t,e,n,i,r){var o=t.get(lk)||0;o&&(hk.attr({scaleX:e[0],scaleY:e[1],rotation:n}),hk.updateTransform(),o/=hk.getLineScale(),o*=e[i.valueDim.index]);r.valueLineWidth=o}(n,c.symbolScale,l,i,c);var p=c.symbolSize,d=n.get("symbolOffset");return F(d)&&(d=[Zi(d[0],p[0]),Zi(d[1],p[1])]),function(t,e,n,i,r,o,a,s,l,u,h,c){var p=h.categoryDim,d=h.valueDim,f=c.pxSign,g=Math.max(e[d.index]+s,0),y=g;if(i){var v=Math.abs(l),m=Q(t.get("symbolMargin"),"15%")+"",_=!1;m.lastIndexOf("!")===m.length-1&&(_=!0,m=m.slice(0,m.length-1));var x=Zi(m,e[d.index]),b=Math.max(g+2*x,0),w=_?0:2*x,S=pr(i),M=S?i:Dk((v+w)/b);b=g+2*(x=(v-M*g)/2/(_?M:M-1)),w=_?0:2*x,S||"fixed"===i||(M=u?Dk((Math.abs(u)+w)/b):0),y=M*b-w,c.repeatTimes=M,c.symbolMargin=x}var T=f*(y/2),C=c.pathPosition=[];C[p.index]=n[p.wh]/2,C[d.index]="start"===a?T:"end"===a?l-T:l/2,o&&(C[0]+=o[0],C[1]+=o[1]);var D=c.bundlePosition=[];D[p.index]=n[p.xy],D[d.index]=n[d.xy];var A=c.barRectShape=I({},n);A[d.wh]=f*Math.max(Math.abs(n[d.wh]),Math.abs(C[d.index]+T)),A[p.wh]=n[p.wh];var L=c.clipShape={};L[p.xy]=-n[p.xy],L[p.wh]=h.ecSize[p.wh],L[d.xy]=0,L[d.wh]=n[d.wh]}(n,p,r,o,0,d,s,c.valueLineWidth,c.boundingLength,c.repeatCutLength,i,c),c}function dk(t,e){return t.toGlobalCoord(t.dataToCoord(t.scale.parse(e)))}function fk(t){var e=t.symbolPatternSize,n=fy(t.symbolType,-e/2,-e/2,e,e);return n.attr({culling:!0}),"image"!==n.type&&n.setStyle({strokeNoScale:!0}),n}function gk(t,e,n,i){var r=t.__pictorialBundle,o=n.symbolSize,a=n.valueLineWidth,s=n.pathPosition,l=e.valueDim,u=n.repeatTimes||0,h=0,c=o[e.valueDim.index]+a+2*n.symbolMargin;for(Ik(t,(function(t){t.__pictorialAnimationIndex=h,t.__pictorialRepeatTimes=u,h0:i<0)&&(r=u-1-t),e[l.index]=c*(r-u/2+.5)+s[l.index],{x:e[0],y:e[1],scaleX:n.symbolScale[0],scaleY:n.symbolScale[1],rotation:n.rotation}}}function yk(t,e,n,i){var r=t.__pictorialBundle,o=t.__pictorialMainPath;o?Tk(o,null,{x:n.pathPosition[0],y:n.pathPosition[1],scaleX:n.symbolScale[0],scaleY:n.symbolScale[1],rotation:n.rotation},n,i):(o=t.__pictorialMainPath=fk(n),r.add(o),Tk(o,{x:n.pathPosition[0],y:n.pathPosition[1],scaleX:0,scaleY:0,rotation:n.rotation},{scaleX:n.symbolScale[0],scaleY:n.symbolScale[1]},n,i))}function vk(t,e,n){var i=I({},e.barRectShape),r=t.__pictorialBarRect;r?Tk(r,null,{shape:i},e,n):(r=t.__pictorialBarRect=new ls({z2:2,shape:i,silent:!0,style:{stroke:"transparent",fill:"transparent",lineWidth:0}}),t.add(r))}function mk(t,e,n,i){if(n.symbolClip){var r=t.__pictorialClipPath,o=I({},n.clipShape),a=e.valueDim,s=n.animationModel,l=n.dataIndex;if(r)Hu(r,{shape:o},s,l);else{o[a.wh]=0,r=new ls({shape:o}),t.__pictorialBundle.setClipPath(r),t.__pictorialClipPath=r;var u={};u[a.wh]=n.clipShape[a.wh],ah[i?"updateProps":"initProps"](r,{shape:u},s,l)}}}function _k(t,e){var n=t.getItemModel(e);return n.getAnimationDelayParams=xk,n.isAnimationEnabled=bk,n}function xk(t){return{index:t.__pictorialAnimationIndex,count:t.__pictorialRepeatTimes}}function bk(){return this.parentModel.isAnimationEnabled()&&!!this.getShallow("animation")}function wk(t,e,n,i){var r=new Ei,o=new Ei;return r.add(o),r.__pictorialBundle=o,o.x=n.bundlePosition[0],o.y=n.bundlePosition[1],n.symbolRepeat?gk(r,e,n):yk(r,0,n),vk(r,n,i),mk(r,e,n,i),r.__pictorialShapeStr=Mk(t,n),r.__pictorialSymbolMeta=n,r}function Sk(t,e,n,i){var r=i.__pictorialBarRect;r&&r.removeTextContent();var o=[];Ik(i,(function(t){o.push(t)})),i.__pictorialMainPath&&o.push(i.__pictorialMainPath),i.__pictorialClipPath&&(n=null),P(o,(function(t){Uu(t,{scaleX:0,scaleY:0},n,e,(function(){i.parent&&i.parent.remove(i)}))})),t.setItemGraphicEl(e,null)}function Mk(t,e){return[t.getItemVisual(e.dataIndex,"symbol")||"none",!!e.symbolRepeat,!!e.symbolClip].join(":")}function Ik(t,e,n){P(t.__pictorialBundle.children(),(function(i){i!==t.__pictorialBarRect&&e.call(n,i)}))}function Tk(t,e,n,i,r,o){e&&t.attr(e),i.symbolClip&&!r?n&&t.attr(n):n&&ah[r?"updateProps":"initProps"](t,n,i.animationModel,i.dataIndex,o)}function Ck(t,e,n){var i=n.dataIndex,r=n.itemModel,o=r.getModel("emphasis"),a=o.getModel("itemStyle").getItemStyle(),s=r.getModel(["blur","itemStyle"]).getItemStyle(),l=r.getModel(["select","itemStyle"]).getItemStyle(),u=r.getShallow("cursor"),h=o.get("focus"),c=o.get("blurScope"),p=o.get("scale");Ik(t,(function(t){if(t instanceof es){var e=t.style;t.useStyle(I({image:e.image,x:e.x,y:e.y,width:e.width,height:e.height},n.style))}else t.useStyle(n.style);var i=t.ensureState("emphasis");i.style=a,p&&(i.scaleX=1.1*t.scaleX,i.scaleY=1.1*t.scaleY),t.ensureState("blur").style=s,t.ensureState("select").style=l,u&&(t.cursor=u),t.z2=n.z2}));var d=e.valueDim.posDesc[+(n.boundingLength>0)];hh(t.__pictorialBarRect,ch(r),{labelFetcher:e.seriesModel,labelDataIndex:i,defaultText:cw(e.seriesModel.getData(),i),inheritColor:n.style.fill,defaultOpacity:n.style.opacity,defaultOutsidePosition:d}),sl(t,h,c)}function Dk(t){var e=Math.round(t);return Math.abs(t-e)<1e-4?e:Math.ceil(t)}var Ak=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.hasSymbolVisual=!0,n.defaultSymbol="roundRect",n}return n(e,t),e.prototype.getInitialData=function(e){return e.stack=null,t.prototype.getInitialData.apply(this,arguments)},e.type="series.pictorialBar",e.dependencies=["grid"],e.defaultOption=zh(qw.defaultOption,{symbol:"circle",symbolSize:null,symbolRotate:null,symbolPosition:null,symbolOffset:null,symbolMargin:null,symbolRepeat:!1,symbolRepeatDirection:"end",symbolClip:!1,symbolBoundingData:null,symbolPatternSize:400,barGap:"-100%",progressive:0,emphasis:{scale:!1},select:{itemStyle:{borderColor:"#212121"}}}),e}(qw);var Lk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._layers=[],n}return n(e,t),e.prototype.render=function(t,e,n){var i=t.getData(),r=this,o=this.group,a=t.getLayerSeries(),s=i.getLayout("layoutInfo"),l=s.rect,u=s.boundaryGap;function h(t){return t.name}o.x=0,o.y=l.y+u[0];var c=new n_(this._layersSeries||[],a,h,h),p=[];function d(e,n,s){var l=r._layers;if("remove"!==e){for(var u,h,c=[],d=[],f=a[n].indices,g=0;go&&(o=s),i.push(s)}for(var u=0;uo&&(o=c)}return{y0:r,max:o}}(l),h=u.y0,c=n/u.max,p=o.length,d=o[0].indices.length,f=0;fMath.PI/2?"right":"left"):w&&"center"!==w?"left"===w?(v=r.r0+b,a>Math.PI/2&&(w="right")):"right"===w&&(v=r.r-b,a>Math.PI/2&&(w="left")):(v=(r.r+r.r0)/2,w="center"),d.style.align=w,d.style.verticalAlign=f(o,"verticalAlign")||"middle",d.x=v*s+r.cx,d.y=v*l+r.cy;var S=f(o,"rotate"),M=0;"radial"===S?(M=-a)<-Math.PI/2&&(M+=Math.PI):"tangential"===S?(M=Math.PI/2-a)>Math.PI/2?M-=Math.PI:M<-Math.PI/2&&(M+=Math.PI):"number"==typeof S&&(M=S*Math.PI/180),d.rotation=M})),h.dirtyStyle()},e}(Jl),Nk="sunburstRootToNode",zk="sunburstHighlight";var Ek=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n,i){var r=this;this.seriesModel=t,this.api=n,this.ecModel=e;var o=t.getData(),a=o.tree.root,s=t.getViewRoot(),l=this.group,u=t.get("renderLabelForZeroData"),h=[];s.eachNode((function(t){h.push(t)}));var c=this._oldChildren||[];!function(i,r){if(0===i.length&&0===r.length)return;function s(t){return t.getId()}function h(s,h){!function(i,r){u||!i||i.getValue()||(i=null);if(i!==a&&r!==a)if(r&&r.piece)i?(r.piece.updateData(!1,i,t,e,n),o.setItemGraphicEl(i.dataIndex,r.piece)):function(t){if(!t)return;t.piece&&(l.remove(t.piece),t.piece=null)}(r);else if(i){var s=new Rk(i,t,e,n);l.add(s),o.setItemGraphicEl(i.dataIndex,s)}}(null==s?null:i[s],null==h?null:r[h])}new n_(r,i,s,s).add(h).update(h).remove(B(h,null)).execute()}(h,c),function(i,o){o.depth>0?(r.virtualPiece?r.virtualPiece.updateData(!1,i,t,e,n):(r.virtualPiece=new Rk(i,t,e,n),l.add(r.virtualPiece)),o.piece.off("click"),r.virtualPiece.on("click",(function(t){r._rootToNode(o.parentNode)}))):r.virtualPiece&&(l.remove(r.virtualPiece),r.virtualPiece=null)}(a,s),this._initEvents(),this._oldChildren=h},e.prototype._initEvents=function(){var t=this;this.group.off("click"),this.group.on("click",(function(e){var n=!1;t.seriesModel.getViewRoot().eachNode((function(i){if(!n&&i.piece&&i.piece===e.target){var r=i.getModel().get("nodeClick");if("rootToNode"===r)t._rootToNode(i);else if("link"===r){var o=i.getModel(),a=o.get("link");if(a)Pc(a,o.get("target",!0)||"_blank")}n=!0}}))}))},e.prototype._rootToNode=function(t){t!==this.seriesModel.getViewRoot()&&this.api.dispatchAction({type:Nk,from:this.uid,seriesId:this.seriesModel.id,targetNode:t})},e.prototype.containPoint=function(t,e){var n=e.getData().getItemLayout(0);if(n){var i=t[0]-n.cx,r=t[1]-n.cy,o=Math.sqrt(i*i+r*r);return o<=n.r&&o>=n.r0}},e.type="sunburst",e}(Tf),Vk=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.ignoreStyleOnData=!0,n}return n(e,t),e.prototype.getInitialData=function(t,e){var n={name:t.name,children:t.data};Bk(n);var i=O(t.levels||[],(function(t){return new Oh(t,this,e)}),this),r=$I.createTree(n,this,(function(t){t.wrapMethod("getItemModel",(function(t,e){var n=r.getNodeByDataIndex(e),o=i[n.depth];return o&&(t.parentModel=o),t}))}));return r.data},e.prototype.optionUpdated=function(){this.resetViewRoot()},e.prototype.getDataParams=function(e){var n=t.prototype.getDataParams.apply(this,arguments),i=this.getData().tree.getNodeByDataIndex(e);return n.treePathInfo=eT(i,this),n},e.prototype.getViewRoot=function(){return this._viewRoot},e.prototype.resetViewRoot=function(t){t?this._viewRoot=t:t=this._viewRoot;var e=this.getRawData().tree.root;t&&(t===e||e.contains(t))||(this._viewRoot=e)},e.prototype.enableAriaDecal=function(){lT(this)},e.type="series.sunburst",e.defaultOption={zlevel:0,z:2,center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,stillShowZeroSum:!0,nodeClick:"rootToNode",renderLabelForZeroData:!1,label:{rotate:"radial",show:!0,opacity:1,align:"center",position:"inside",distance:5,silent:!0},itemStyle:{borderWidth:1,borderColor:"white",borderType:"solid",shadowBlur:0,shadowColor:"rgba(0, 0, 0, 0.2)",shadowOffsetX:0,shadowOffsetY:0,opacity:1},emphasis:{focus:"descendant"},blur:{itemStyle:{opacity:.2},label:{opacity:.1}},animationType:"expansion",animationDuration:1e3,animationDurationUpdate:500,data:[],levels:[],sort:"desc"},e}(ff);function Bk(t){var e=0;P(t.children,(function(t){Bk(t);var n=t.value;F(n)&&(n=n[0]),e+=n}));var n=t.value;F(n)&&(n=n[0]),(null==n||isNaN(n))&&(n=e),n<0&&(n=0),F(t.value)?t.value[0]=n:t.value=n}var Fk=Math.PI/180;function Gk(t,e,n){e.eachSeriesByType(t,(function(t){var e=t.get("center"),i=t.get("radius");F(i)||(i=[0,i]),F(e)||(e=[e,e]);var r=n.getWidth(),o=n.getHeight(),a=Math.min(r,o),s=Zi(e[0],r),l=Zi(e[1],o),u=Zi(i[0],a/2),h=Zi(i[1],a/2),c=-t.get("startAngle")*Fk,p=t.get("minAngle")*Fk,d=t.getData().tree.root,f=t.getViewRoot(),g=f.depth,y=t.get("sort");null!=y&&Hk(f,y);var v=0;P(f.children,(function(t){!isNaN(t.getValue())&&v++}));var m=f.getValue(),_=Math.PI/(m||v)*2,x=f.depth>0,b=f.height-(x?-1:1),w=(h-u)/(b||1),S=t.get("clockwise"),M=t.get("stillShowZeroSum"),I=S?1:-1,T=function(t,e){if(t){var n=e;if(t!==d){var i=t.getValue(),r=0===m&&M?_:i*_;r1;)r=r.parentNode;var o=n.getColorFromPalette(r.name||r.dataIndex+"",e);return t.depth>1&&"string"==typeof o&&(o=Ue(o,(t.depth-1)/(i-1)*.5)),o}(r,t,i.root.height)),I(n.ensureUniqueItemVisual(r.dataIndex,"style"),o)}))}))}function Uk(t,e){return e=e||[0,0],O(["x","y"],(function(n,i){var r=this.getAxis(n),o=e[i],a=t[i]/2;return"category"===r.type?r.getBandWidth():Math.abs(r.dataToCoord(o-a)-r.dataToCoord(o+a))}),this)}function Xk(t,e){return e=e||[0,0],O([0,1],(function(n){var i=e[n],r=t[n]/2,o=[],a=[];return o[n]=i-r,a[n]=i+r,o[1-n]=a[1-n]=e[1-n],Math.abs(this.dataToPoint(o)[n]-this.dataToPoint(a)[n])}),this)}function Yk(t,e){var n=this.getAxis(),i=e instanceof Array?e[0]:e,r=(t instanceof Array?t[0]:t)/2;return"category"===n.type?n.getBandWidth():Math.abs(n.dataToCoord(i-r)-n.dataToCoord(i+r))}function Zk(t,e){return e=e||[0,0],O(["Radius","Angle"],(function(n,i){var r=this["get"+n+"Axis"](),o=e[i],a=t[i]/2,s="category"===r.type?r.getBandWidth():Math.abs(r.dataToCoord(o-a)-r.dataToCoord(o+a));return"Angle"===n&&(s=s*Math.PI/180),s}),this)}function jk(t,e,n,i){return t&&(t.legacy||!1!==t.legacy&&!n&&!i&&"tspan"!==e&&("text"===e||dt(t,"text")))}function qk(t,e,n){var i,r,o,a=t;if("text"===e)o=a;else{o={},dt(a,"text")&&(o.text=a.text),dt(a,"rich")&&(o.rich=a.rich),dt(a,"textFill")&&(o.fill=a.textFill),dt(a,"textStroke")&&(o.stroke=a.textStroke),r={type:"text",style:o,silent:!0},i={};var s=dt(a,"textPosition");n?i.position=s?a.textPosition:"inside":s&&(i.position=a.textPosition),dt(a,"textPosition")&&(i.position=a.textPosition),dt(a,"textOffset")&&(i.offset=a.textOffset),dt(a,"textRotation")&&(i.rotation=a.textRotation),dt(a,"textDistance")&&(i.distance=a.textDistance)}return Kk(o,t),P(o.rich,(function(t){Kk(t,t)})),{textConfig:i,textContent:r}}function Kk(t,e){e&&(e.font=e.textFont||e.font,dt(e,"textStrokeWidth")&&(t.lineWidth=e.textStrokeWidth),dt(e,"textAlign")&&(t.align=e.textAlign),dt(e,"textVerticalAlign")&&(t.verticalAlign=e.textVerticalAlign),dt(e,"textLineHeight")&&(t.lineHeight=e.textLineHeight),dt(e,"textWidth")&&(t.width=e.textWidth),dt(e,"textHeight")&&(t.height=e.textHeight),dt(e,"textBackgroundColor")&&(t.backgroundColor=e.textBackgroundColor),dt(e,"textPadding")&&(t.padding=e.textPadding),dt(e,"textBorderColor")&&(t.borderColor=e.textBorderColor),dt(e,"textBorderWidth")&&(t.borderWidth=e.textBorderWidth),dt(e,"textBorderRadius")&&(t.borderRadius=e.textBorderRadius),dt(e,"textBoxShadowColor")&&(t.shadowColor=e.textBoxShadowColor),dt(e,"textBoxShadowBlur")&&(t.shadowBlur=e.textBoxShadowBlur),dt(e,"textBoxShadowOffsetX")&&(t.shadowOffsetX=e.textBoxShadowOffsetX),dt(e,"textBoxShadowOffsetY")&&(t.shadowOffsetY=e.textBoxShadowOffsetY))}function $k(t,e,n){var i=t;i.textPosition=i.textPosition||n.position||"inside",null!=n.offset&&(i.textOffset=n.offset),null!=n.rotation&&(i.textRotation=n.rotation),null!=n.distance&&(i.textDistance=n.distance);var r=i.textPosition.indexOf("inside")>=0,o=t.fill||"#000";Jk(i,e);var a=null==i.textFill;return r?a&&(i.textFill=n.insideFill||"#fff",!i.textStroke&&n.insideStroke&&(i.textStroke=n.insideStroke),!i.textStroke&&(i.textStroke=o),null==i.textStrokeWidth&&(i.textStrokeWidth=2)):(a&&(i.textFill=t.fill||n.outsideFill||"#000"),!i.textStroke&&n.outsideStroke&&(i.textStroke=n.outsideStroke)),i.text=e.text,i.rich=e.rich,P(e.rich,(function(t){Jk(t,t)})),i}function Jk(t,e){e&&(dt(e,"fill")&&(t.textFill=e.fill),dt(e,"stroke")&&(t.textStroke=e.fill),dt(e,"lineWidth")&&(t.textStrokeWidth=e.lineWidth),dt(e,"font")&&(t.font=e.font),dt(e,"fontStyle")&&(t.fontStyle=e.fontStyle),dt(e,"fontWeight")&&(t.fontWeight=e.fontWeight),dt(e,"fontSize")&&(t.fontSize=e.fontSize),dt(e,"fontFamily")&&(t.fontFamily=e.fontFamily),dt(e,"align")&&(t.textAlign=e.align),dt(e,"verticalAlign")&&(t.textVerticalAlign=e.verticalAlign),dt(e,"lineHeight")&&(t.textLineHeight=e.lineHeight),dt(e,"width")&&(t.textWidth=e.width),dt(e,"height")&&(t.textHeight=e.height),dt(e,"backgroundColor")&&(t.textBackgroundColor=e.backgroundColor),dt(e,"padding")&&(t.textPadding=e.padding),dt(e,"borderColor")&&(t.textBorderColor=e.borderColor),dt(e,"borderWidth")&&(t.textBorderWidth=e.borderWidth),dt(e,"borderRadius")&&(t.textBorderRadius=e.borderRadius),dt(e,"shadowColor")&&(t.textBoxShadowColor=e.shadowColor),dt(e,"shadowBlur")&&(t.textBoxShadowBlur=e.shadowBlur),dt(e,"shadowOffsetX")&&(t.textBoxShadowOffsetX=e.shadowOffsetX),dt(e,"shadowOffsetY")&&(t.textBoxShadowOffsetY=e.shadowOffsetY),dt(e,"textShadowColor")&&(t.textShadowColor=e.textShadowColor),dt(e,"textShadowBlur")&&(t.textShadowBlur=e.textShadowBlur),dt(e,"textShadowOffsetX")&&(t.textShadowOffsetX=e.textShadowOffsetX),dt(e,"textShadowOffsetY")&&(t.textShadowOffsetY=e.textShadowOffsetY))}var Qk=La.CMD,tP=2*Math.PI,eP=["x","y"],nP=["width","height"],iP=[];function rP(t,e){return Math.abs(t-e)<1e-5}function oP(t){var e,n,i,r,o,a=t.data,s=t.len(),l=[],u=0,h=0,c=0,p=0;function d(t,n){e&&e.length>2&&l.push(e),e=[t,n]}function f(t,n,i,r){rP(t,i)&&rP(n,r)||e.push(t,n,i,r,i,r)}function g(t,n,i,r,o,a){var s=Math.abs(n-t),l=4*Math.tan(s/4)/3,u=nM:C2&&l.push(e),l}function aP(t,e){var n=t.length,i=e.length;if(n===i)return[t,e];for(var r=n0)for(var b=i/n,w=-i/2;w<=i/2;w+=b){var S=Math.sin(w),M=Math.cos(w),I=0;for(_=0;_c.width?1:0,r=nP[i],o=eP[i],a=c[r]/e,s=c[o],l=0;li[1]&&i.reverse(),{coordSys:{type:"polar",cx:t.cx,cy:t.cy,r:i[1],r0:i[0]},api:{coord:function(i){var r=e.dataToRadius(i[0]),o=n.dataToAngle(i[1]),a=t.coordToPoint([r,o]);return a.push(r,o*Math.PI/180),a},size:V(Zk,t)}}},calendar:function(t){var e=t.getRect(),n=t.getRangeInfo();return{coordSys:{type:"calendar",x:e.x,y:e.y,width:e.width,height:e.height,cellWidth:t.getCellWidth(),cellHeight:t.getCellHeight(),rangeInfo:{start:n.start,end:n.end,weeks:n.weeks,dayCount:n.allDay}},api:{coord:function(e,n){return t.dataToPoint(e,n)}}}}},BP=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.optionUpdated=function(){this.currentZLevel=this.get("zlevel",!0),this.currentZ=this.get("z",!0)},e.prototype.getInitialData=function(t,e){return F_(this.getSource(),this)},e.prototype.getDataParams=function(e,n,i){var r=t.prototype.getDataParams.call(this,e,n);return i&&(r.info=MP(i).info),r},e.type="series.custom",e.dependencies=["grid","polar","geo","singleAxis","calendar"],e.defaultOption={coordinateSystem:"cartesian2d",zlevel:0,z:2,legendHoverLink:!0,clip:!1},e}(ff),FP=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n,i){var r=this._data,o=t.getData(),a=this.group,s=aO(t,o,e,n);r||a.removeAll();var l=t.__transientTransitionOpt;if(!l||null!=l.from&&null!=l.to){var u=new bO(t,l),h=l?"multiple":"oneToOne";new n_(r?r.getIndices():[],o.getIndices(),GP(r,h,l&&l.from),GP(o,h,l&&l.to),null,h).add((function(e){lO(n,null,e,s(e,i),t,a,o,null)})).remove((function(e){vO(r.getItemGraphicEl(e),t,a)})).update((function(e,l){u.reset("oneToOne");var h=r.getItemGraphicEl(l);u.findAndAddFrom(h),u.hasFrom()&&(xO(h,a),h=null),lO(n,h,e,s(e,i),t,a,o,u),u.applyMorphing()})).updateManyToOne((function(e,l){u.reset("manyToOne");for(var h=0;h=0){!s&&(s=r[t]={});var f=E(l);for(c=0;c=0){var d=t.getAnimationStyleProps(),f=d?d.style:null;if(f){!a&&(a=r.style={});var g=E(i);for(h=0;h=p;d--)vO(e.childAt(d),r,e)}(t,e,n,i,r,s),l>=0?o.replaceAt(e,l):o.add(e),e}function hO(t,e){var n,i=MP(t),r=e.type,o=e.shape,a=e.style;return null!=r&&r!==i.customGraphicType||"path"===r&&((n=o)&&(dt(n,"pathData")||dt(n,"d")))&&mO(o)!==i.customPathData||"image"===r&&dt(a,"image")&&a.image!==i.customImagePath}function cO(t,e,n){var i=e?pO(t,e):t,r=e?dO(t,i,DP):t.style,o=t.type,a=i?i.textConfig:null,s=t.textContent,l=s?e?pO(s,e):s:null;if(r&&(n.isLegacy||jk(r,o,!!a,!!l))){n.isLegacy=!0;var u=qk(r,o,!e);!a&&u.textConfig&&(a=u.textConfig),!l&&u.textContent&&(l=u.textContent)}if(!e&&l){var h=l;!h.type&&(h.type="text")}var c=e?n[e]:n.normal;c.cfg=a,c.conOpt=l}function pO(t,e){return e?t?t[e]:null:t}function dO(t,e,n){var i=e&&e.style;return null==i&&n===DP&&t&&(i=t.styleEmphasis),i}function fO(t,e){var n=t&&t.name;return null!=n?n:"e\0\0"+e}function gO(t,e){var n=this.context,i=null!=t?n.newChildren[t]:null,r=null!=e?n.oldChildren[e]:null;uO(n.api,r,n.dataIndex,i,n.seriesModel,n.group,0,n.morphPreparation)}function yO(t){var e=this.context;vO(e.oldChildren[t],e.seriesModel,e.group)}function vO(t,e,n){if(t){var i=MP(t).leaveToProps;i?Hu(t,i,e,{cb:function(){n.remove(t)}}):n.remove(t)}}function mO(t){return t&&(t.pathData||t.d)}function _O(t){return t&&t instanceof Ka}function xO(t,e){t&&e.remove(t)}var bO=function(){function t(t,e){this._fromList=[],this._toList=[],this._toElOptionList=[],this._allPropsFinalList=[],this._toDataIndices=[],this._morphConfigList=[],this._seriesModel=t,this._transOpt=e}return t.prototype.hasFrom=function(){return!!this._fromList.length},t.prototype.findAndAddFrom=function(t){if(t&&(MP(t).canMorph&&this._fromList.push(t),t.isGroup))for(var e=t.childrenRef(),n=0;n=n?i-a:o;this._manyToOneForSingleTo(r,a>=i?null:a,s)}else if("oneToMany"===t)for(var l=Math.max(1,Math.floor(n/i)),u=0,h=0;u=n?n-u:l;this._oneToManyForSingleFrom(u,c,h>=i?null:h)}},t.prototype._oneToOneForSingleTo=function(t,e){var n,i=this._toList[t],r=this._toElOptionList[t],o=this._toDataIndices[t],a=this._allPropsFinalList[t],s=this._fromList[e],l=this._getOrCreateMorphConfig(o),u=l.duration;if(s&&gP(s)){if(UP(i,a,r.style),u){var h=yP([s],i,l,wO);this._processResultIndividuals(h,t,null)}}else{var c=u&&s&&(s!==i||(fP(n=s)||gP(n)))?s:null,p={};YP("shape",i,c,r,p,!1),YP("extra",i,c,r,p,!1),jP(i,c,r,p,!1),qP(i,c,r,r.style,p,!1),UP(i,a,r.style),c&&cP(c,i,l),XP(i,o,r,this._seriesModel,p,!1)}},t.prototype._manyToOneForSingleTo=function(t,e,n){var i=this._toList[t],r=this._toElOptionList[t];UP(i,this._allPropsFinalList[t],r.style);var o=this._getOrCreateMorphConfig(this._toDataIndices[t]);if(o.duration&&null!=e){for(var a=[],s=e;sa)return!0;if(o){var s=uM(t).seriesDataCount,l=i.getExtent();return Math.abs(l[0]-l[1])/s>a}return!1}return!0===n},t.prototype.makeElOption=function(t,e,n,i,r){},t.prototype.createPointerEl=function(t,e,n,i){var r=e.pointer;if(r){var o=SO(t).pointerEl=new ah[r.type](MO(e.pointer));t.add(o)}},t.prototype.createLabelEl=function(t,e,n,i){if(e.label){var r=SO(t).labelEl=new cs(MO(e.label));t.add(r),AO(r,i)}},t.prototype.updatePointerEl=function(t,e,n){var i=SO(t).pointerEl;i&&e.pointer&&(i.setStyle(e.pointer.style),n(i,{shape:e.pointer.shape}))},t.prototype.updateLabelEl=function(t,e,n,i){var r=SO(t).labelEl;r&&(r.setStyle(e.label.style),n(r,{x:e.label.x,y:e.label.y}),AO(r,i))},t.prototype._renderHandle=function(t){if(!this._dragging&&this.updateHandleTransform){var e,n=this._axisPointerModel,i=this._api.getZr(),r=this._handle,o=n.getModel("handle"),a=n.get("status");if(!o.get("show")||!a||"hide"===a)return r&&i.remove(r),void(this._handle=null);this._handle||(e=!0,r=this._handle=eh(o.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(t){ee(t.event)},onmousedown:IO(this._onHandleDragMove,this,0,0),drift:IO(this._onHandleDragMove,this),ondragend:IO(this._onHandleDragEnd,this)}),i.add(r)),kO(r,n,!1),r.setStyle(o.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var s=o.get("size");F(s)||(s=[s,s]),r.scaleX=s[0]/2,r.scaleY=s[1]/2,zf(this,"_doDispatchAxisPointer",o.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,e)}},t.prototype._moveHandleToValue=function(t,e){CO(this._axisPointerModel,!e&&this._moveAnimation,this._handle,LO(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},t.prototype._onHandleDragMove=function(t,e){var n=this._handle;if(n){this._dragging=!0;var i=this.updateHandleTransform(LO(n),[t,e],this._axisModel,this._axisPointerModel);this._payloadInfo=i,n.stopAnimation(),n.attr(LO(i)),SO(n).lastProp=null,this._doDispatchAxisPointer()}},t.prototype._doDispatchAxisPointer=function(){if(this._handle){var t=this._payloadInfo,e=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:t.cursorPoint[0],y:t.cursorPoint[1],tooltipOption:t.tooltipOption,axesInfo:[{axisDim:e.axis.dim,axisIndex:e.componentIndex}]})}},t.prototype._onHandleDragEnd=function(){if(this._dragging=!1,this._handle){var t=this._axisPointerModel.get("value");this._moveHandleToValue(t),this._api.dispatchAction({type:"hideTip"})}},t.prototype.clear=function(t){this._lastValue=null,this._lastStatus=null;var e=t.getZr(),n=this._group,i=this._handle;e&&n&&(this._lastGraphicKey=null,n&&e.remove(n),i&&e.remove(i),this._group=null,this._handle=null,this._payloadInfo=null)},t.prototype.doClear=function(){},t.prototype.buildLabel=function(t,e,n){return{x:t[n=n||0],y:t[1-n],width:e[n],height:e[1-n]}},t}();function CO(t,e,n,i){DO(SO(n).lastProp,i)||(SO(n).lastProp=i,e?Hu(n,i,t):(n.stopAnimation(),n.attr(i)))}function DO(t,e){if(X(t)&&X(e)){var n=!0;return P(e,(function(e,i){n=n&&DO(t[i],e)})),!!n}return t===e}function AO(t,e){t[e.get(["label","show"])?"show":"hide"]()}function LO(t){return{x:t.x||0,y:t.y||0,rotation:t.rotation||0}}function kO(t,e,n){var i=e.get("z"),r=e.get("zlevel");t&&t.traverse((function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=r&&(t.zlevel=r),t.silent=n)}))}function PO(t){var e,n=t.get("type"),i=t.getModel(n+"Style");return"line"===n?(e=i.getLineStyle()).fill=null:"shadow"===n&&((e=i.getAreaStyle()).stroke=null),e}function OO(t,e,n,i,r){var o=RO(n.get("value"),e.axis,e.ecModel,n.get("seriesDataIndices"),{precision:n.get(["label","precision"]),formatter:n.get(["label","formatter"])}),a=n.getModel("label"),s=wc(a.get("padding")||0),l=a.getFont(),u=bi(o,l),h=r.position,c=u.width+s[1]+s[3],p=u.height+s[0]+s[2],d=r.align;"right"===d&&(h[0]-=c),"center"===d&&(h[0]-=c/2);var f=r.verticalAlign;"bottom"===f&&(h[1]-=p),"middle"===f&&(h[1]-=p/2),function(t,e,n,i){var r=i.getWidth(),o=i.getHeight();t[0]=Math.min(t[0]+e,r)-e,t[1]=Math.min(t[1]+n,o)-n,t[0]=Math.max(t[0],0),t[1]=Math.max(t[1],0)}(h,c,p,i);var g=a.get("backgroundColor");g&&"auto"!==g||(g=e.get(["axisLine","lineStyle","color"])),t.label={x:h[0],y:h[1],style:ph(a,{text:o,font:l,fill:a.getTextColor(),padding:s,backgroundColor:g}),z2:10}}function RO(t,e,n,i,r){t=e.scale.parse(t);var o=e.scale.getLabel({value:t},{precision:r.precision}),a=r.formatter;if(a){var s={value:Gx(e,{value:t}),axisDimension:e.dim,axisIndex:e.index,seriesData:[]};P(i,(function(t){var e=n.getSeriesByIndex(t.seriesIndex),i=t.dataIndexInside,r=e&&e.getDataParams(i);r&&s.seriesData.push(r)})),H(a)?o=a.replace("{value}",o):G(a)&&(o=a(s))}return o}function NO(t,e,n){var i=[1,0,0,1,0,0];return Xn(i,i,n.rotation),Un(i,i,n.position),qu([t.dataToCoord(e),(n.labelOffset||0)+(n.labelDirection||1)*(n.labelMargin||0)],i)}function zO(t,e,n,i,r,o){var a=tM.innerTextLayout(n.rotation,0,n.labelDirection);n.labelMargin=r.get(["label","margin"]),OO(e,i,r,o,{position:NO(i.axis,t,n),align:a.textAlign,verticalAlign:a.textVerticalAlign})}function EO(t,e,n){return{x1:t[n=n||0],y1:t[1-n],x2:e[n],y2:e[1-n]}}function VO(t,e,n){return{x:t[n=n||0],y:t[1-n],width:e[n],height:e[1-n]}}function BO(t,e,n,i,r,o){return{cx:t,cy:e,r0:n,r:i,startAngle:r,endAngle:o,clockwise:!0}}var FO=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.makeElOption=function(t,e,n,i,r){var o=n.axis,a=o.grid,s=i.get("type"),l=GO(a,o).getOtherAxis(o).getGlobalExtent(),u=o.toGlobalCoord(o.dataToCoord(e,!0));if(s&&"none"!==s){var h=PO(i),c=HO[s](o,u,l);c.style=h,t.graphicKey=c.type,t.pointer=c}zO(e,t,YS(a.model,n),n,i,r)},e.prototype.getHandleTransform=function(t,e,n){var i=YS(e.axis.grid.model,e,{labelInside:!1});i.labelMargin=n.get(["handle","margin"]);var r=NO(e.axis,t,i);return{x:r[0],y:r[1],rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},e.prototype.updateHandleTransform=function(t,e,n,i){var r=n.axis,o=r.grid,a=r.getGlobalExtent(!0),s=GO(o,r).getOtherAxis(r).getGlobalExtent(),l="x"===r.dim?0:1,u=[t.x,t.y];u[l]+=e[l],u[l]=Math.min(a[1],u[l]),u[l]=Math.max(a[0],u[l]);var h=(s[1]+s[0])/2,c=[h,h];c[l]=u[l];return{x:u[0],y:u[1],rotation:t.rotation,cursorPoint:c,tooltipOption:[{verticalAlign:"middle"},{align:"center"}][l]}},e}(TO);function GO(t,e){var n={};return n[e.dim+"AxisIndex"]=e.index,t.getCartesian(n)}var HO={line:function(t,e,n){return{type:"Line",subPixelOptimize:!0,shape:EO([e,n[0]],[e,n[1]],WO(t))}},shadow:function(t,e,n){var i=Math.max(1,t.getBandWidth()),r=n[1]-n[0];return{type:"Rect",shape:VO([e-i/2,n[0]],[i,r],WO(t))}}};function WO(t){return"x"===t.dim?0:1}var UO=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="axisPointer",e.defaultOption={show:"auto",zlevel:0,z:50,type:"line",snap:!1,triggerTooltip:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#B9BEC9",width:1,type:"dashed"},shadowStyle:{color:"rgba(210,219,238,0.2)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,borderRadius:3},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}},e}(Xc),XO=kr(),YO=P;function ZO(t,e,n){if(!a.node){var i=e.getZr();XO(i).records||(XO(i).records={}),function(t,e){if(XO(t).initialized)return;function n(n,i){t.on(n,(function(n){var r=function(t){var e={showTip:[],hideTip:[]},n=function(i){var r=e[i.type];r?r.push(i):(i.dispatchAction=n,t.dispatchAction(i))};return{dispatchAction:n,pendings:e}}(e);YO(XO(t).records,(function(t){t&&i(t,n,r.dispatchAction)})),function(t,e){var n,i=t.showTip.length,r=t.hideTip.length;i?n=t.showTip[i-1]:r&&(n=t.hideTip[r-1]);n&&(n.dispatchAction=null,e.dispatchAction(n))}(r.pendings,e)}))}XO(t).initialized=!0,n("click",B(qO,"click")),n("mousemove",B(qO,"mousemove")),n("globalout",jO)}(i,e),(XO(i).records[t]||(XO(i).records[t]={})).handler=n}}function jO(t,e,n){t.handler("leave",null,n)}function qO(t,e,n,i){e.handler(t,n,i)}function KO(t,e){if(!a.node){var n=e.getZr();(XO(n).records||{})[t]&&(XO(n).records[t]=null)}}var $O=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=e.getComponent("tooltip"),r=t.get("triggerOn")||i&&i.get("triggerOn")||"mousemove|click";ZO("axisPointer",n,(function(t,e,n){"none"!==r&&("leave"===t||r.indexOf(t)>=0)&&n({type:"updateAxisPointer",currTrigger:t,x:e&&e.offsetX,y:e&&e.offsetY})}))},e.prototype.remove=function(t,e){KO("axisPointer",e)},e.prototype.dispose=function(t,e){KO("axisPointer",e)},e.type="axisPointer",e}(wf);function JO(t,e){var n,i=[],r=t.seriesIndex;if(null==r||!(n=e.getSeriesByIndex(r)))return{point:[]};var o=n.getData(),a=Lr(o,t);if(null==a||a<0||F(a))return{point:[]};var s=o.getItemGraphicEl(a),l=n.coordinateSystem;if(n.getTooltipPosition)i=n.getTooltipPosition(a)||[];else if(l&&l.dataToPoint)if(t.isStacked){var u=l.getBaseAxis(),h=l.getOtherAxis(u).dim,c=u.dim,p="x"===h||"radius"===h?1:0,d=o.mapDimension(c),f=[];f[p]=o.get(d,a),f[1-p]=o.get(o.getCalculationInfo("stackResultDimension"),a),i=l.dataToPoint(f)||[]}else i=l.dataToPoint(o.getValues(O(l.dimensions,(function(t){return o.mapDimension(t)})),a))||[];else if(s){var g=s.getBoundingRect().clone();g.applyTransform(s.transform),i=[g.x+g.width/2,g.y+g.height/2]}return{point:i,el:s}}var QO=kr();function tR(t,e,n){var i=t.currTrigger,r=[t.x,t.y],o=t,a=t.dispatchAction||V(n.dispatchAction,n),s=e.getComponent("axisPointer").coordSysAxesInfo;if(s){oR(r)&&(r=JO({seriesIndex:o.seriesIndex,dataIndex:o.dataIndex},e).point);var l=oR(r),u=o.axesInfo,h=s.axesInfo,c="leave"===i||oR(r),p={},d={},f={list:[],map:{}},g={showPointer:B(nR,d),showTooltip:B(iR,f)};P(s.coordSysMap,(function(t,e){var n=l||t.containPoint(r);P(s.coordSysAxesInfo[e],(function(t,e){var i=t.axis,o=function(t,e){for(var n=0;n<(t||[]).length;n++){var i=t[n];if(e.axis.dim===i.axisDim&&e.axis.model.componentIndex===i.axisIndex)return i}}(u,t);if(!c&&n&&(!u||o)){var a=o&&o.value;null!=a||l||(a=i.pointToData(r)),null!=a&&eR(t,a,g,!1,p)}}))}));var y={};return P(h,(function(t,e){var n=t.linkGroup;n&&!d[e]&&P(n.axesInfo,(function(e,i){var r=d[i];if(e!==t&&r){var o=r.value;n.mapper&&(o=t.axis.scale.parse(n.mapper(o,rR(e),rR(t)))),y[t.key]=o}}))})),P(y,(function(t,e){eR(h[e],t,g,!0,p)})),function(t,e,n){var i=n.axesInfo=[];P(e,(function(e,n){var r=e.axisPointerModel.option,o=t[n];o?(!e.useHandle&&(r.status="show"),r.value=o.value,r.seriesDataIndices=(o.payloadBatch||[]).slice()):!e.useHandle&&(r.status="hide"),"show"===r.status&&i.push({axisDim:e.axis.dim,axisIndex:e.axis.model.componentIndex,value:r.value})}))}(d,h,p),function(t,e,n,i){if(oR(e)||!t.list.length)return void i({type:"hideTip"});var r=((t.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};i({type:"showTip",escapeConnect:!0,x:e[0],y:e[1],tooltipOption:n.tooltipOption,position:n.position,dataIndexInside:r.dataIndexInside,dataIndex:r.dataIndex,seriesIndex:r.seriesIndex,dataByCoordSys:t.list})}(f,r,t,a),function(t,e,n){var i=n.getZr(),r="axisPointerLastHighlights",o=QO(i)[r]||{},a=QO(i)[r]={};P(t,(function(t,e){var n=t.axisPointerModel.option;"show"===n.status&&P(n.seriesDataIndices,(function(t){var e=t.seriesIndex+" | "+t.dataIndex;a[e]=t}))}));var s=[],l=[];P(o,(function(t,e){!a[e]&&l.push(t)})),P(a,(function(t,e){!o[e]&&s.push(t)})),l.length&&n.dispatchAction({type:"downplay",escapeConnect:!0,notBlur:!0,batch:l}),s.length&&n.dispatchAction({type:"highlight",escapeConnect:!0,notBlur:!0,batch:s})}(h,0,n),p}}function eR(t,e,n,i,r){var o=t.axis;if(!o.scale.isBlank()&&o.containData(e))if(t.involveSeries){var a=function(t,e){var n=e.axis,i=n.dim,r=t,o=[],a=Number.MAX_VALUE,s=-1;return P(e.seriesModels,(function(e,l){var u,h,c=e.getData().mapDimensionsAll(i);if(e.getAxisTooltipData){var p=e.getAxisTooltipData(c,t,n);h=p.dataIndices,u=p.nestestValue}else{if(!(h=e.getData().indicesOfNearest(c[0],t,"category"===n.type?.5:null)).length)return;u=e.getData().get(c[0],h[0])}if(null!=u&&isFinite(u)){var d=t-u,f=Math.abs(d);f<=a&&((f=0&&s<0)&&(a=f,s=d,r=u,o.length=0),P(h,(function(t){o.push({seriesIndex:e.seriesIndex,dataIndexInside:t,dataIndex:e.getData().getRawIndex(t)})})))}})),{payloadBatch:o,snapToValue:r}}(e,t),s=a.payloadBatch,l=a.snapToValue;s[0]&&null==r.seriesIndex&&I(r,s[0]),!i&&t.snap&&o.containData(l)&&null!=l&&(e=l),n.showPointer(t,e,s),n.showTooltip(t,a,l)}else n.showPointer(t,e)}function nR(t,e,n,i){t[e.key]={value:n,payloadBatch:i}}function iR(t,e,n,i){var r=n.payloadBatch,o=e.axis,a=o.model,s=e.axisPointerModel;if(e.triggerTooltip&&r.length){var l=e.coordSys.model,u=cM(l),h=t.map[u];h||(h=t.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},t.list.push(h)),h.dataByAxis.push({axisDim:o.dim,axisIndex:a.componentIndex,axisType:a.type,axisId:a.id,value:i,valueLabelOpt:{precision:s.get(["label","precision"]),formatter:s.get(["label","formatter"])},seriesDataIndices:r.slice()})}}function rR(t){var e=t.axis.model,n={},i=n.axisDim=t.axis.dim;return n.axisIndex=n[i+"AxisIndex"]=e.componentIndex,n.axisName=n[i+"AxisName"]=e.name,n.axisId=n[i+"AxisId"]=e.id,n}function oR(t){return!t||null==t[0]||isNaN(t[0])||null==t[1]||isNaN(t[1])}function aR(t){dM.registerAxisPointerClass("CartesianAxisPointer",FO),t.registerComponentModel(UO),t.registerComponentView($O),t.registerPreprocessor((function(t){if(t){(!t.axisPointer||0===t.axisPointer.length)&&(t.axisPointer={});var e=t.axisPointer.link;e&&!F(e)&&(t.axisPointer.link=[e])}})),t.registerProcessor(t.PRIORITY.PROCESSOR.STATISTIC,(function(t,e){t.getComponent("axisPointer").coordSysAxesInfo=aM(t,e)})),t.registerAction({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},tR)}var sR=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.makeElOption=function(t,e,n,i,r){var o=n.axis;"angle"===o.dim&&(this.animationThreshold=Math.PI/18);var a=o.polar,s=a.getOtherAxis(o).getExtent(),l=o.dataToCoord(e),u=i.get("type");if(u&&"none"!==u){var h=PO(i),c=lR[u](o,a,l,s);c.style=h,t.graphicKey=c.type,t.pointer=c}var p=function(t,e,n,i,r){var o=e.axis,a=o.dataToCoord(t),s=i.getAngleAxis().getExtent()[0];s=s/180*Math.PI;var l,u,h,c=i.getRadiusAxis().getExtent();if("radius"===o.dim){var p=[1,0,0,1,0,0];Xn(p,p,s),Un(p,p,[i.cx,i.cy]),l=qu([a,-r],p);var d=e.getModel("axisLabel").get("rotate")||0,f=tM.innerTextLayout(s,d*Math.PI/180,-1);u=f.textAlign,h=f.textVerticalAlign}else{var g=c[1];l=i.coordToPoint([g+r,a]);var y=i.cx,v=i.cy;u=Math.abs(l[0]-y)/g<.3?"center":l[0]>y?"left":"right",h=Math.abs(l[1]-v)/g<.3?"middle":l[1]>v?"top":"bottom"}return{position:l,align:u,verticalAlign:h}}(e,n,0,a,i.get(["label","margin"]));OO(t,n,i,r,p)},e}(TO);var lR={line:function(t,e,n,i){return"angle"===t.dim?{type:"Line",shape:EO(e.coordToPoint([i[0],n]),e.coordToPoint([i[1],n]))}:{type:"Circle",shape:{cx:e.cx,cy:e.cy,r:n}}},shadow:function(t,e,n,i){var r=Math.max(1,t.getBandWidth()),o=Math.PI/180;return"angle"===t.dim?{type:"Sector",shape:BO(e.cx,e.cy,i[0],i[1],(-n-r/2)*o,(r/2-n)*o)}:{type:"Sector",shape:BO(e.cx,e.cy,n-r/2,n+r/2,0,2*Math.PI)}}},uR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.findAxisModel=function(t){var e;return this.ecModel.eachComponent(t,(function(t){t.getCoordSysModel()===this&&(e=t)}),this),e},e.type="polar",e.dependencies=["radiusAxis","angleAxis"],e.defaultOption={zlevel:0,z:0,center:["50%","50%"],radius:"80%"},e}(Xc),hR=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getCoordSysModel=function(){return this.getReferringComponents("polar",Nr).models[0]},e.type="polarAxis",e}(Xc);L(hR,Yx);var cR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="angleAxis",e}(hR),pR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="radiusAxis",e}(hR),dR=function(t){function e(e,n){return t.call(this,"radius",e,n)||this}return n(e,t),e.prototype.pointToData=function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},e}(hb);dR.prototype.dataToRadius=hb.prototype.dataToCoord,dR.prototype.radiusToData=hb.prototype.coordToData;var fR=kr(),gR=function(t){function e(e,n){return t.call(this,"angle",e,n||[0,360])||this}return n(e,t),e.prototype.pointToData=function(t,e){return this.polar.pointToData(t,e)["radius"===this.dim?0:1]},e.prototype.calculateCategoryInterval=function(){var t=this,e=t.getLabelModel(),n=t.scale,i=n.getExtent(),r=n.count();if(i[1]-i[0]<1)return 0;var o=i[0],a=t.dataToCoord(o+1)-t.dataToCoord(o),s=Math.abs(a),l=bi(null==o?"":o+"",e.getFont(),"center","top"),u=Math.max(l.height,7)/s;isNaN(u)&&(u=1/0);var h=Math.max(0,Math.floor(u)),c=fR(t.model),p=c.lastAutoInterval,d=c.lastTickCount;return null!=p&&null!=d&&Math.abs(p-h)<=1&&Math.abs(d-r)<=1&&p>h?h=p:(c.lastTickCount=r,c.lastAutoInterval=h),h},e}(hb);gR.prototype.dataToAngle=hb.prototype.dataToCoord,gR.prototype.angleToData=hb.prototype.coordToData;var yR=function(){function t(t){this.dimensions=["radius","angle"],this.type="polar",this.cx=0,this.cy=0,this._radiusAxis=new dR,this._angleAxis=new gR,this.axisPointerEnabled=!0,this.name=t||"",this._radiusAxis.polar=this._angleAxis.polar=this}return t.prototype.containPoint=function(t){var e=this.pointToCoord(t);return this._radiusAxis.contain(e[0])&&this._angleAxis.contain(e[1])},t.prototype.containData=function(t){return this._radiusAxis.containData(t[0])&&this._angleAxis.containData(t[1])},t.prototype.getAxis=function(t){return this["_"+t+"Axis"]},t.prototype.getAxes=function(){return[this._radiusAxis,this._angleAxis]},t.prototype.getAxesByScale=function(t){var e=[],n=this._angleAxis,i=this._radiusAxis;return n.scale.type===t&&e.push(n),i.scale.type===t&&e.push(i),e},t.prototype.getAngleAxis=function(){return this._angleAxis},t.prototype.getRadiusAxis=function(){return this._radiusAxis},t.prototype.getOtherAxis=function(t){var e=this._angleAxis;return t===e?this._radiusAxis:e},t.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAngleAxis()},t.prototype.getTooltipAxes=function(t){var e=null!=t&&"auto"!==t?this.getAxis(t):this.getBaseAxis();return{baseAxes:[e],otherAxes:[this.getOtherAxis(e)]}},t.prototype.dataToPoint=function(t,e){return this.coordToPoint([this._radiusAxis.dataToRadius(t[0],e),this._angleAxis.dataToAngle(t[1],e)])},t.prototype.pointToData=function(t,e){var n=this.pointToCoord(t);return[this._radiusAxis.radiusToData(n[0],e),this._angleAxis.angleToData(n[1],e)]},t.prototype.pointToCoord=function(t){var e=t[0]-this.cx,n=t[1]-this.cy,i=this.getAngleAxis(),r=i.getExtent(),o=Math.min(r[0],r[1]),a=Math.max(r[0],r[1]);i.inverse?o=a-360:a=o+360;var s=Math.sqrt(e*e+n*n);e/=s,n/=s;for(var l=Math.atan2(-n,e)/Math.PI*180,u=la;)l+=360*u;return[s,l]},t.prototype.coordToPoint=function(t){var e=t[0],n=t[1]/180*Math.PI;return[Math.cos(n)*e+this.cx,-Math.sin(n)*e+this.cy]},t.prototype.getArea=function(){var t=this.getAngleAxis(),e=this.getRadiusAxis().getExtent().slice();e[0]>e[1]&&e.reverse();var n=t.getExtent(),i=Math.PI/180;return{cx:this.cx,cy:this.cy,r0:e[0],r:e[1],startAngle:-n[0]*i,endAngle:-n[1]*i,clockwise:t.inverse,contain:function(t,e){var n=t-this.cx,i=e-this.cy,r=n*n+i*i,o=this.r,a=this.r0;return r<=o*o&&r>=a*a}}},t.prototype.convertToPixel=function(t,e,n){return vR(e)===this?this.dataToPoint(n):null},t.prototype.convertFromPixel=function(t,e,n){return vR(e)===this?this.pointToData(n):null},t}();function vR(t){var e=t.seriesModel,n=t.polarModel;return n&&n.coordinateSystem||e&&e.coordinateSystem}function mR(t,e){var n=this,i=n.getAngleAxis(),r=n.getRadiusAxis();if(i.scale.setExtent(1/0,-1/0),r.scale.setExtent(1/0,-1/0),t.eachSeries((function(t){if(t.coordinateSystem===n){var e=t.getData();P(Xx(e,"radius"),(function(t){r.scale.unionExtentFromData(e,t)})),P(Xx(e,"angle"),(function(t){i.scale.unionExtentFromData(e,t)}))}})),Vx(i.scale,i.model),Vx(r.scale,r.model),"category"===i.type&&!i.onBand){var o=i.getExtent(),a=360/i.scale.count();i.inverse?o[1]+=a:o[1]-=a,i.setExtent(o[0],o[1])}}function _R(t,e){if(t.type=e.get("type"),t.scale=Bx(e),t.onBand=e.get("boundaryGap")&&"category"===t.type,t.inverse=e.get("inverse"),function(t){return"angleAxis"===t.mainType}(e)){t.inverse=t.inverse!==e.get("clockwise");var n=e.get("startAngle");t.setExtent(n,n+(t.inverse?-360:360))}e.axis=t,t.model=e}var xR={dimensions:yR.prototype.dimensions,create:function(t,e){var n=[];return t.eachComponent("polar",(function(t,i){var r=new yR(i+"");r.update=mR;var o=r.getRadiusAxis(),a=r.getAngleAxis(),s=t.findAxisModel("radiusAxis"),l=t.findAxisModel("angleAxis");_R(o,s),_R(a,l),function(t,e,n){var i=e.get("center"),r=n.getWidth(),o=n.getHeight();t.cx=Zi(i[0],r),t.cy=Zi(i[1],o);var a=t.getRadiusAxis(),s=Math.min(r,o)/2,l=e.get("radius");null==l?l=[0,"100%"]:F(l)||(l=[0,l]);var u=[Zi(l[0],s),Zi(l[1],s)];a.inverse?a.setExtent(u[1],u[0]):a.setExtent(u[0],u[1])}(r,t,e),n.push(r),t.coordinateSystem=r,r.model=t})),t.eachSeries((function(t){if("polar"===t.get("coordinateSystem")){var e=t.getReferringComponents("polar",Nr).models[0];0,t.coordinateSystem=e.coordinateSystem}})),n}},bR=["axisLine","axisLabel","axisTick","minorTick","splitLine","minorSplitLine","splitArea"];function wR(t,e,n){e[1]>e[0]&&(e=e.slice().reverse());var i=t.coordToPoint([e[0],n]),r=t.coordToPoint([e[1],n]);return{x1:i[0],y1:i[1],x2:r[0],y2:r[1]}}function SR(t){return t.getRadiusAxis().inverse?0:1}function MR(t){var e=t[0],n=t[t.length-1];e&&n&&Math.abs(Math.abs(e.coord-n.coord)-360)<1e-4&&t.pop()}var IR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.axisPointerClass="PolarAxisPointer",n}return n(e,t),e.prototype.render=function(t,e){if(this.group.removeAll(),t.get("show")){var n=t.axis,i=n.polar,r=i.getRadiusAxis().getExtent(),o=n.getTicksCoords(),a=n.getMinorTicksCoords(),s=O(n.getViewLabels(),(function(t){t=w(t);var e=n.scale,i="ordinal"===e.type?e.getRawOrdinalNumber(t.tickValue):t.tickValue;return t.coord=n.dataToCoord(i),t}));MR(s),MR(o),P(bR,(function(e){!t.get([e,"show"])||n.scale.isBlank()&&"axisLine"!==e||TR[e](this.group,t,i,o,a,r,s)}),this)}},e.type="angleAxis",e}(dM),TR={axisLine:function(t,e,n,i,r,o){var a,s=e.getModel(["axisLine","lineStyle"]),l=SR(n),u=l?0:1;(a=0===o[u]?new Nl({shape:{cx:n.cx,cy:n.cy,r:o[l]},style:s.getLineStyle(),z2:1,silent:!0}):new tu({shape:{cx:n.cx,cy:n.cy,r:o[l],r0:o[u]},style:s.getLineStyle(),z2:1,silent:!0})).style.fill=null,t.add(a)},axisTick:function(t,e,n,i,r,o){var a=e.getModel("axisTick"),s=(a.get("inside")?-1:1)*a.get("length"),l=o[SR(n)],u=O(i,(function(t){return new uu({shape:wR(n,[l,l+s],t.coord)})}));t.add(Vu(u,{style:T(a.getModel("lineStyle").getLineStyle(),{stroke:e.get(["axisLine","lineStyle","color"])})}))},minorTick:function(t,e,n,i,r,o){if(r.length){for(var a=e.getModel("axisTick"),s=e.getModel("minorTick"),l=(a.get("inside")?-1:1)*s.get("length"),u=o[SR(n)],h=[],c=0;cf?"left":"right",v=Math.abs(d[1]-g)/p<.3?"middle":d[1]>g?"top":"bottom";if(s&&s[c]){var m=s[c];X(m)&&m.textStyle&&(a=new Oh(m.textStyle,l,l.ecModel))}var _=new cs({silent:tM.isLabelSilent(e),style:ph(a,{x:d[0],y:d[1],fill:a.getTextColor()||e.get(["axisLine","lineStyle","color"]),text:i.formattedLabel,align:y,verticalAlign:v})});if(t.add(_),h){var x=tM.makeAxisEventDataBase(e);x.targetType="axisLabel",x.value=i.rawLabel,_s(_).eventData=x}}),this)},splitLine:function(t,e,n,i,r,o){var a=e.getModel("splitLine").getModel("lineStyle"),s=a.get("color"),l=0;s=s instanceof Array?s:[s];for(var u=[],h=0;h=0?"p":"n",T=x;m&&(i[s][M]||(i[s][M]={p:x,n:x}),T=i[s][M][I]);var C=void 0,D=void 0,A=void 0,L=void 0;if("radius"===c.dim){var k=c.dataToCoord(S)-x,P=o.dataToCoord(M);Math.abs(k)=e.y&&t[1]<=e.y+e.height:n.contain(n.toLocalCoord(t[1]))&&t[0]>=e.y&&t[0]<=e.y+e.height},t.prototype.pointToData=function(t){var e=this.getAxis();return[e.coordToData(e.toLocalCoord(t["horizontal"===e.orient?0:1]))]},t.prototype.dataToPoint=function(t){var e=this.getAxis(),n=this.getRect(),i=[],r="horizontal"===e.orient?0:1;return t instanceof Array&&(t=t[0]),i[r]=e.toGlobalCoord(e.dataToCoord(+t)),i[1-r]=0===r?n.y+n.height/2:n.x+n.width/2,i},t.prototype.convertToPixel=function(t,e,n){return XR(e)===this?this.dataToPoint(n):null},t.prototype.convertFromPixel=function(t,e,n){return XR(e)===this?this.pointToData(n):null},t}();function XR(t){var e=t.seriesModel,n=t.singleAxisModel;return n&&n.coordinateSystem||e&&e.coordinateSystem}var YR={create:function(t,e){var n=[];return t.eachComponent("singleAxis",(function(i,r){var o=new UR(i,t,e);o.name="single_"+r,o.resize(i,e),i.coordinateSystem=o,n.push(o)})),t.eachSeries((function(t){if("singleAxis"===t.get("coordinateSystem")){var e=t.getReferringComponents("singleAxis",Nr).models[0];t.coordinateSystem=e&&e.coordinateSystem}})),n},dimensions:UR.prototype.dimensions},ZR=["x","y"],jR=["width","height"],qR=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.makeElOption=function(t,e,n,i,r){var o=n.axis,a=o.coordinateSystem,s=JR(a,1-$R(o)),l=a.dataToPoint(e)[0],u=i.get("type");if(u&&"none"!==u){var h=PO(i),c=KR[u](o,l,s);c.style=h,t.graphicKey=c.type,t.pointer=c}zO(e,t,ER(n),n,i,r)},e.prototype.getHandleTransform=function(t,e,n){var i=ER(e,{labelInside:!1});i.labelMargin=n.get(["handle","margin"]);var r=NO(e.axis,t,i);return{x:r[0],y:r[1],rotation:i.rotation+(i.labelDirection<0?Math.PI:0)}},e.prototype.updateHandleTransform=function(t,e,n,i){var r=n.axis,o=r.coordinateSystem,a=$R(r),s=JR(o,a),l=[t.x,t.y];l[a]+=e[a],l[a]=Math.min(s[1],l[a]),l[a]=Math.max(s[0],l[a]);var u=JR(o,1-a),h=(u[1]+u[0])/2,c=[h,h];return c[a]=l[a],{x:l[0],y:l[1],rotation:t.rotation,cursorPoint:c,tooltipOption:{verticalAlign:"middle"}}},e}(TO),KR={line:function(t,e,n){return{type:"Line",subPixelOptimize:!0,shape:EO([e,n[0]],[e,n[1]],$R(t))}},shadow:function(t,e,n){var i=t.getBandWidth(),r=n[1]-n[0];return{type:"Rect",shape:VO([e-i/2,n[0]],[i,r],$R(t))}}};function $R(t){return t.isHorizontal()?0:1}function JR(t,e){var n=t.getRect();return[n[ZR[e]],n[ZR[e]]+n[jR[e]]]}var QR=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="single",e}(wf);var tN=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(e,n,i){var r=Hc(e);t.prototype.init.apply(this,arguments),eN(e,r)},e.prototype.mergeOption=function(e){t.prototype.mergeOption.apply(this,arguments),eN(this.option,e)},e.prototype.getCellSize=function(){return this.option.cellSize},e.type="calendar",e.defaultOption={zlevel:0,z:2,left:80,top:60,cellSize:20,orient:"horizontal",splitLine:{show:!0,lineStyle:{color:"#000",width:1,type:"solid"}},itemStyle:{color:"#fff",borderWidth:1,borderColor:"#ccc"},dayLabel:{show:!0,firstDay:0,position:"start",margin:"50%",nameMap:"en",color:"#000"},monthLabel:{show:!0,position:"start",margin:5,align:"center",nameMap:"en",formatter:null,color:"#000"},yearLabel:{show:!0,position:null,margin:30,formatter:null,color:"#ccc",fontFamily:"sans-serif",fontWeight:"bolder",fontSize:20}},e}(Xc);function eN(t,e){var n,i=t.cellSize;1===(n=F(i)?i:t.cellSize=[i,i]).length&&(n[1]=n[0]);var r=O([0,1],(function(t){return function(t,e){return null!=t[Nc[e][0]]||null!=t[Nc[e][1]]&&null!=t[Nc[e][2]]}(e,t)&&(n[t]="auto"),null!=n[t]&&"auto"!==n[t]}));Gc(t,e,{type:"box",ignoreSize:r})}var nN={EN:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],CN:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]},iN={EN:["S","M","T","W","T","F","S"],CN:["日","一","二","三","四","五","六"]},rN=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){var i=this.group;i.removeAll();var r=t.coordinateSystem,o=r.getRangeInfo(),a=r.getOrient();this._renderDayRect(t,o,i),this._renderLines(t,o,a,i),this._renderYearText(t,o,a,i),this._renderMonthText(t,a,i),this._renderWeekText(t,o,a,i)},e.prototype._renderDayRect=function(t,e,n){for(var i=t.coordinateSystem,r=t.getModel("itemStyle").getItemStyle(),o=i.getCellWidth(),a=i.getCellHeight(),s=e.start.time;s<=e.end.time;s=i.getNextNDay(s,1).time){var l=i.dataToRect([s],!1).tl,u=new ls({shape:{x:l[0],y:l[1],width:o,height:a},cursor:"default",style:r});n.add(u)}},e.prototype._renderLines=function(t,e,n,i){var r=this,o=t.coordinateSystem,a=t.getModel(["splitLine","lineStyle"]).getLineStyle(),s=t.get(["splitLine","show"]),l=a.lineWidth;this._tlpoints=[],this._blpoints=[],this._firstDayOfMonth=[],this._firstDayPoints=[];for(var u=e.start,h=0;u.time<=e.end.time;h++){p(u.formatedDate),0===h&&(u=o.getDateInfo(e.start.y+"-"+e.start.m));var c=u.date;c.setMonth(c.getMonth()+1),u=o.getDateInfo(c)}function p(e){r._firstDayOfMonth.push(o.getDateInfo(e)),r._firstDayPoints.push(o.dataToRect([e],!1).tl);var l=r._getLinePointsOfOneWeek(t,e,n);r._tlpoints.push(l[0]),r._blpoints.push(l[l.length-1]),s&&r._drawSplitline(l,a,i)}p(o.getNextNDay(e.end.time,1).formatedDate),s&&this._drawSplitline(r._getEdgesPoints(r._tlpoints,l,n),a,i),s&&this._drawSplitline(r._getEdgesPoints(r._blpoints,l,n),a,i)},e.prototype._getEdgesPoints=function(t,e,n){var i=[t[0].slice(),t[t.length-1].slice()],r="horizontal"===n?0:1;return i[0][r]=i[0][r]-e/2,i[1][r]=i[1][r]+e/2,i},e.prototype._drawSplitline=function(t,e,n){var i=new au({z2:20,shape:{points:t},style:e});n.add(i)},e.prototype._getLinePointsOfOneWeek=function(t,e,n){for(var i=t.coordinateSystem,r=i.getDateInfo(e),o=[],a=0;a<7;a++){var s=i.getNextNDay(r.time,a),l=i.dataToRect([s.time],!1);o[2*s.day]=l.tl,o[2*s.day+1]=l["horizontal"===n?"bl":"tr"]}return o},e.prototype._formatterLabel=function(t,e){return"string"==typeof t&&t?(n=t,P(e,(function(t,e){n=n.replace("{"+e+"}",i?Ic(t):t)})),n):"function"==typeof t?t(e):e.nameMap;var n,i},e.prototype._yearTextPositionControl=function(t,e,n,i,r){var o=e[0],a=e[1],s=["center","bottom"];"bottom"===i?(a+=r,s=["center","top"]):"left"===i?o-=r:"right"===i?(o+=r,s=["center","top"]):a-=r;var l=0;return"left"!==i&&"right"!==i||(l=Math.PI/2),{rotation:l,x:o,y:a,style:{align:s[0],verticalAlign:s[1]}}},e.prototype._renderYearText=function(t,e,n,i){var r=t.getModel("yearLabel");if(r.get("show")){var o=r.get("margin"),a=r.get("position");a||(a="horizontal"!==n?"top":"left");var s=[this._tlpoints[this._tlpoints.length-1],this._blpoints[0]],l=(s[0][0]+s[1][0])/2,u=(s[0][1]+s[1][1])/2,h="horizontal"===n?0:1,c={top:[l,s[h][1]],bottom:[l,s[1-h][1]],left:[s[1-h][0],u],right:[s[h][0],u]},p=e.start.y;+e.end.y>+e.start.y&&(p=p+"-"+e.end.y);var d=r.get("formatter"),f={start:e.start.y,end:e.end.y,nameMap:p},g=this._formatterLabel(d,f),y=new cs({z2:30,style:ph(r,{text:g})});y.attr(this._yearTextPositionControl(y,c[a],n,a,o)),i.add(y)}},e.prototype._monthTextPositionControl=function(t,e,n,i,r){var o="left",a="top",s=t[0],l=t[1];return"horizontal"===n?(l+=r,e&&(o="center"),"start"===i&&(a="bottom")):(s+=r,e&&(a="middle"),"start"===i&&(o="right")),{x:s,y:l,align:o,verticalAlign:a}},e.prototype._renderMonthText=function(t,e,n){var i=t.getModel("monthLabel");if(i.get("show")){var r=i.get("nameMap"),o=i.get("margin"),a=i.get("position"),s=i.get("align"),l=[this._tlpoints,this._blpoints];H(r)&&(r=nN[r.toUpperCase()]||[]);var u="start"===a?0:1,h="horizontal"===e?0:1;o="start"===a?-o:o;for(var c="center"===s,p=0;p=i.start.time&&n.timea.end.time&&t.reverse(),t},t.prototype._getRangeInfo=function(t){var e,n=[this.getDateInfo(t[0]),this.getDateInfo(t[1])];n[0].time>n[1].time&&(e=!0,n.reverse());var i=Math.floor(n[1].time/oN)-Math.floor(n[0].time/oN)+1,r=new Date(n[0].time),o=r.getDate(),a=n[1].date.getDate();r.setDate(o+i-1);var s=r.getDate();if(s!==a)for(var l=r.getTime()-n[1].time>0?1:-1;(s=r.getDate())!==a&&(r.getTime()-n[1].time)*l>0;)i-=l,r.setDate(s-l);var u=Math.floor((i+n[0].day+6)/7),h=e?1-u:u-1;return e&&n.reverse(),{range:[n[0].formatedDate,n[1].formatedDate],start:n[0],end:n[1],allDay:i,weeks:u,nthWeek:h,fweek:n[0].day,lweek:n[1].day}},t.prototype._getDateByWeeksAndDay=function(t,e,n){var i=this._getRangeInfo(n);if(t>i.weeks||0===t&&ei.lweek)return null;var r=7*(t-1)-i.fweek+e,o=new Date(i.start.time);return o.setDate(+i.start.d+r),this.getDateInfo(o)},t.create=function(e,n){var i=[];return e.eachComponent("calendar",(function(r){var o=new t(r,e,n);i.push(o),r.coordinateSystem=o})),e.eachSeries((function(t){"calendar"===t.get("coordinateSystem")&&(t.coordinateSystem=i[t.get("calendarIndex")||0])})),i},t.dimensions=["time","value"],t}();function sN(t){var e=t.calendarModel,n=t.seriesModel;return e?e.coordinateSystem:n?n.coordinateSystem:null}var lN=kr(),uN={path:null,compoundPath:null,group:Ei,image:es,text:cs},hN=function(t){var e=t.graphic;F(e)?e[0]&&e[0].elements?t.graphic=[t.graphic[0]]:t.graphic=[{elements:e}]:e&&!e.elements&&(t.graphic=[{elements:[e]}])},cN=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.preventAutoZ=!0,n}return n(e,t),e.prototype.mergeOption=function(e,n){var i=this.option.elements;this.option.elements=null,t.prototype.mergeOption.call(this,e,n),this.option.elements=i},e.prototype.optionUpdated=function(t,e){var n=this.option,i=(e?n:t).elements,r=n.elements=e?[]:n.elements,o=[];this._flatten(i,o,null);var a=Mr(r,o,"normalMerge"),s=this._elOptionsToUpdate=[];P(a,(function(t,e){var n=t.newOption;n&&(s.push(n),function(t,e){var n=t.existing;if(e.id=t.keyInfo.id,!e.type&&n&&(e.type=n.type),null==e.parentId){var i=e.parentOption;i?e.parentId=i.id:n&&(e.parentId=n.parentId)}e.parentOption=null}(t,n),function(t,e,n){var i=I({},n),r=t[e],o=n.$action||"merge";if("merge"===o){if(r)S(r,i,!0),Gc(r,i,{ignoreSize:!0}),Wc(n,r);else t[e]=i}else"replace"===o?t[e]=i:"remove"===o&&r&&(t[e]=null)}(r,e,n),function(t,e){if(!t)return;if(t.hv=e.hv=[gN(e,["left","right"]),gN(e,["top","bottom"])],"group"===t.type){var n=t,i=e;null==n.width&&(n.width=i.width=0),null==n.height&&(n.height=i.height=0)}}(r[e],n))}),this);for(var l=r.length-1;l>=0;l--)null==r[l]?r.splice(l,1):delete r[l].$action},e.prototype._flatten=function(t,e,n){P(t,(function(t){if(t){n&&(t.parentOption=n),e.push(t);var i=t.children;"group"===t.type&&i&&this._flatten(i,e,t),delete t.children}}),this)},e.prototype.useElOptionsToUpdate=function(){var t=this._elOptionsToUpdate;return this._elOptionsToUpdate=null,t},e.type="graphic",e.defaultOption={elements:[]},e}(Xc),pN=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(){this._elMap=ht()},e.prototype.render=function(t,e,n){t!==this._lastGraphicModel&&this._clear(),this._lastGraphicModel=t,this._updateElements(t),this._relocate(t,n)},e.prototype._updateElements=function(t){var e=t.useElOptionsToUpdate();if(e){var n=this._elMap,i=this.group;P(e,(function(e){var r=Cr(e.id,null),o=null!=r?n.get(r):null,a=Cr(e.parentId,null),s=null!=a?n.get(a):i,l=e.type,u=e.style;"text"===l&&u&&e.hv&&e.hv[1]&&(u.textVerticalAlign=u.textBaseline=u.verticalAlign=u.align=null);var h=e.textContent,c=e.textConfig;if(u&&jk(u,l,!!c,!!h)){var p=qk(u,l,!0);!c&&p.textConfig&&(c=e.textConfig=p.textConfig),!h&&p.textContent&&(h=p.textContent)}var d=function(t){return t=I({},t),P(["id","parentId","$action","hv","bounding","textContent"].concat(Rc),(function(e){delete t[e]})),t}(e);var f=e.$action||"merge";"merge"===f?o?o.attr(d):dN(r,s,d,n):"replace"===f?(fN(o,n),dN(r,s,d,n)):"remove"===f&&fN(o,n);var g=n.get(r);if(g&&h)if("merge"===f){var y=g.getTextContent();y?y.attr(h):g.setTextContent(new cs(h))}else"replace"===f&&g.setTextContent(new cs(h));if(g){var v=lN(g);v.__ecGraphicWidthOption=e.width,v.__ecGraphicHeightOption=e.height,function(t,e,n){var i=_s(t).eventData;t.silent||t.ignore||i||(i=_s(t).eventData={componentType:"graphic",componentIndex:e.componentIndex,name:t.name});i&&(i.info=n.info)}(g,t,e),oh({el:g,componentModel:t,itemName:g.name,itemTooltipOption:e.tooltip})}}))}},e.prototype._relocate=function(t,e){for(var n=t.option.elements,i=this.group,r=this._elMap,o=e.getWidth(),a=e.getHeight(),s=0;s=0;s--){var c,p,d;if(d=null!=(p=Cr((c=n[s]).id,null))?r.get(p):null){var f=d.parent;h=lN(f);Bc(d,c,f===i?{width:o,height:a}:{width:h.__ecGraphicWidth,height:h.__ecGraphicHeight},null,{hv:c.hv,boundingMode:c.bounding})}}},e.prototype._clear=function(){var t=this._elMap;t.each((function(e){fN(e,t)})),this._elMap=ht()},e.prototype.dispose=function(){this._clear()},e.type="graphic",e}(wf);function dN(t,e,n,i){var r=n.type;var o=dt(uN,r)?uN[r]:Ru(r);var a=new o(n);e.add(a),i.set(t,a),lN(a).__ecGraphicId=t}function fN(t,e){var n=t&&t.parent;n&&("group"===t.type&&t.traverse((function(t){fN(t,e)})),e.removeKey(lN(t).__ecGraphicId),n.remove(t))}function gN(t,e){var n;return P(e,(function(e){null!=t[e]&&"auto"!==t[e]&&(n=!0)})),n}var yN=["x","y","radius","angle","single"],vN=["cartesian2d","polar","singleAxis"];function mN(t){return t+"Axis"}function _N(t,e){var n,i=ht(),r=[],o=ht();t.eachComponent({mainType:"dataZoom",query:e},(function(t){o.get(t.uid)||s(t)}));do{n=!1,t.eachComponent("dataZoom",a)}while(n);function a(t){!o.get(t.uid)&&function(t){var e=!1;return t.eachTargetAxis((function(t,n){var r=i.get(t);r&&r[n]&&(e=!0)})),e}(t)&&(s(t),n=!0)}function s(t){o.set(t.uid,!0),r.push(t),t.eachTargetAxis((function(t,e){(i.get(t)||i.set(t,[]))[e]=!0}))}return r}function xN(t){var e=t.ecModel,n={infoList:[],infoMap:ht()};return t.eachTargetAxis((function(t,i){var r=e.getComponent(mN(t),i);if(r){var o=r.getCoordSysModel();if(o){var a=o.uid,s=n.infoMap.get(a);s||(s={model:o,axisModels:[]},n.infoList.push(s),n.infoMap.set(a,s)),s.axisModels.push(r)}}})),n}var bN=function(){function t(){this.indexList=[],this.indexMap=[]}return t.prototype.add=function(t){this.indexMap[t]||(this.indexList.push(t),this.indexMap[t]=!0)},t}(),wN=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._autoThrottle=!0,n._noTarget=!0,n._rangePropMode=["percent","percent"],n}return n(e,t),e.prototype.init=function(t,e,n){var i=SN(t);this.settledOption=i,this.mergeDefaultAndTheme(t,n),this._doInit(i)},e.prototype.mergeOption=function(t){var e=SN(t);S(this.option,t,!0),S(this.settledOption,e,!0),this._doInit(e)},e.prototype._doInit=function(t){var e=this.option;this._setDefaultThrottle(t),this._updateRangeUse(t);var n=this.settledOption;P([["start","startValue"],["end","endValue"]],(function(t,i){"value"===this._rangePropMode[i]&&(e[t[0]]=n[t[0]]=null)}),this),this._resetTarget()},e.prototype._resetTarget=function(){var t=this.get("orient",!0),e=this._targetAxisInfoMap=ht();this._fillSpecifiedTargetAxis(e)?this._orient=t||this._makeAutoOrientByTargetAxis():(this._orient=t||"horizontal",this._fillAutoTargetAxisByOrient(e,this._orient)),this._noTarget=!0,e.each((function(t){t.indexList.length&&(this._noTarget=!1)}),this)},e.prototype._fillSpecifiedTargetAxis=function(t){var e=!1;return P(yN,(function(n){var i=this.getReferringComponents(mN(n),zr);if(i.specified){e=!0;var r=new bN;P(i.models,(function(t){r.add(t.componentIndex)})),t.set(n,r)}}),this),e},e.prototype._fillAutoTargetAxisByOrient=function(t,e){var n=this.ecModel,i=!0;if(i){var r="vertical"===e?"y":"x";o(n.findComponents({mainType:r+"Axis"}),r)}i&&o(n.findComponents({mainType:"singleAxis",filter:function(t){return t.get("orient",!0)===e}}),"single");function o(e,n){var r=e[0];if(r){var o=new bN;if(o.add(r.componentIndex),t.set(n,o),i=!1,"x"===n||"y"===n){var a=r.getReferringComponents("grid",Nr).models[0];a&&P(e,(function(t){r.componentIndex!==t.componentIndex&&a===t.getReferringComponents("grid",Nr).models[0]&&o.add(t.componentIndex)}))}}}i&&P(yN,(function(e){if(i){var r=n.findComponents({mainType:mN(e),filter:function(t){return"category"===t.get("type",!0)}});if(r[0]){var o=new bN;o.add(r[0].componentIndex),t.set(e,o),i=!1}}}),this)},e.prototype._makeAutoOrientByTargetAxis=function(){var t;return this.eachTargetAxis((function(e){!t&&(t=e)}),this),"y"===t?"vertical":"horizontal"},e.prototype._setDefaultThrottle=function(t){if(t.hasOwnProperty("throttle")&&(this._autoThrottle=!1),this._autoThrottle){var e=this.ecModel.option;this.option.throttle=e.animation&&e.animationDurationUpdate>0?100:20}},e.prototype._updateRangeUse=function(t){var e=this._rangePropMode,n=this.get("rangeMode");P([["start","startValue"],["end","endValue"]],(function(i,r){var o=null!=t[i[0]],a=null!=t[i[1]];o&&!a?e[r]="percent":!o&&a?e[r]="value":n?e[r]=n[r]:o&&(e[r]="percent")}))},e.prototype.noTarget=function(){return this._noTarget},e.prototype.getFirstTargetAxisModel=function(){var t;return this.eachTargetAxis((function(e,n){null==t&&(t=this.ecModel.getComponent(mN(e),n))}),this),t},e.prototype.eachTargetAxis=function(t,e){this._targetAxisInfoMap.each((function(n,i){P(n.indexList,(function(n){t.call(e,i,n)}))}))},e.prototype.getAxisProxy=function(t,e){var n=this.getAxisModel(t,e);if(n)return n.__dzAxisProxy},e.prototype.getAxisModel=function(t,e){var n=this._targetAxisInfoMap.get(t);if(n&&n.indexMap[e])return this.ecModel.getComponent(mN(t),e)},e.prototype.setRawRange=function(t){var e=this.option,n=this.settledOption;P([["start","startValue"],["end","endValue"]],(function(i){null==t[i[0]]&&null==t[i[1]]||(e[i[0]]=n[i[0]]=t[i[0]],e[i[1]]=n[i[1]]=t[i[1]])}),this),this._updateRangeUse(t)},e.prototype.setCalculatedRange=function(t){var e=this.option;P(["start","startValue","end","endValue"],(function(n){e[n]=t[n]}))},e.prototype.getPercentRange=function(){var t=this.findRepresentativeAxisProxy();if(t)return t.getDataPercentWindow()},e.prototype.getValueRange=function(t,e){if(null!=t||null!=e)return this.getAxisProxy(t,e).getDataValueWindow();var n=this.findRepresentativeAxisProxy();return n?n.getDataValueWindow():void 0},e.prototype.findRepresentativeAxisProxy=function(t){if(t)return t.__dzAxisProxy;for(var e,n=this._targetAxisInfoMap.keys(),i=0;i=0}(e)){var n=mN(this._dimName),i=e.getReferringComponents(n,Nr).models[0];i&&this._axisIndex===i.componentIndex&&t.push(e)}}),this),t},t.prototype.getAxisModel=function(){return this.ecModel.getComponent(this._dimName+"Axis",this._axisIndex)},t.prototype.getMinMaxSpan=function(){return w(this._minMaxSpan)},t.prototype.calculateDataWindow=function(t){var e,n=this._dataExtent,i=this.getAxisModel().axis.scale,r=this._dataZoomModel.getRangePropMode(),o=[0,100],a=[],s=[];CN(["start","end"],(function(l,u){var h=t[l],c=t[l+"Value"];"percent"===r[u]?(null==h&&(h=o[u]),c=i.parse(Yi(h,o,n))):(e=!0,h=Yi(c=null==c?n[u]:i.parse(c),n,o)),s[u]=c,a[u]=h})),DN(s),DN(a);var l=this._minMaxSpan;function u(t,e,n,r,o){var a=o?"Span":"ValueSpan";PD(0,t,n,"all",l["min"+a],l["max"+a]);for(var s=0;s<2;s++)e[s]=Yi(t[s],n,r,!0),o&&(e[s]=i.parse(e[s]))}return e?u(s,a,n,o,!1):u(a,s,o,n,!0),{valueWindow:s,percentWindow:a}},t.prototype.reset=function(t){if(t===this._dataZoomModel){var e=this.getTargetSeriesModels();this._dataExtent=function(t,e,n){var i=[1/0,-1/0];CN(n,(function(t){!function(t,e,n){e&&P(Xx(e,n),(function(n){var i=e.getApproximateExtent(n);i[0]t[1]&&(t[1]=i[1])}))}(i,t.getData(),e)}));var r=t.getAxisModel(),o=Nx(r.axis.scale,r,i).calculate();return[o.min,o.max]}(this,this._dimName,e),this._updateMinMaxSpan();var n=this.calculateDataWindow(t.settledOption);this._valueWindow=n.valueWindow,this._percentWindow=n.percentWindow,this._setAxisModel()}},t.prototype.filterData=function(t,e){if(t===this._dataZoomModel){var n=this._dimName,i=this.getTargetSeriesModels(),r=t.get("filterMode"),o=this._valueWindow;"none"!==r&&CN(i,(function(t){var e=t.getData(),i=e.mapDimensionsAll(n);i.length&&("weakFilter"===r?e.filterSelf((function(t){for(var n,r,a,s=0;so[1];if(u&&!h&&!c)return!0;u&&(a=!0),h&&(n=!0),c&&(r=!0)}return a&&n&&r})):CN(i,(function(n){if("empty"===r)t.setData(e=e.map(n,(function(t){return function(t){return t>=o[0]&&t<=o[1]}(t)?t:NaN})));else{var i={};i[n]=o,e.selectRange(i)}})),CN(i,(function(t){e.setApproximateExtent(o,t)})))}))}},t.prototype._updateMinMaxSpan=function(){var t=this._minMaxSpan={},e=this._dataZoomModel,n=this._dataExtent;CN(["min","max"],(function(i){var r=e.get(i+"Span"),o=e.get(i+"ValueSpan");null!=o&&(o=this.getAxisModel().axis.scale.parse(o)),null!=o?r=Yi(n[0]+o,n,[0,100],!0):null!=r&&(o=Yi(r,[0,100],n,!0)-n[0]),t[i+"Span"]=r,t[i+"ValueSpan"]=o}),this)},t.prototype._setAxisModel=function(){var t=this.getAxisModel(),e=this._percentWindow,n=this._valueWindow;if(e){var i=Ji(n,[0,500]);i=Math.min(i,20);var r=t.axis.scale.rawExtentInfo;0!==e[0]&&r.setDeterminedMinMax("min",+n[0].toFixed(i)),100!==e[1]&&r.setDeterminedMinMax("max",+n[1].toFixed(i)),r.freeze()}},t}();var LN={getTargetSeries:function(t){function e(e){t.eachComponent("dataZoom",(function(n){n.eachTargetAxis((function(i,r){var o=t.getComponent(mN(i),r);e(i,r,o,n)}))}))}e((function(t,e,n,i){n.__dzAxisProxy=null}));var n=[];e((function(e,i,r,o){r.__dzAxisProxy||(r.__dzAxisProxy=new AN(e,i,o,t),n.push(r.__dzAxisProxy))}));var i=ht();return P(n,(function(t){P(t.getTargetSeriesModels(),(function(t){i.set(t.uid,t)}))})),i},overallReset:function(t,e){t.eachComponent("dataZoom",(function(t){t.eachTargetAxis((function(e,n){t.getAxisProxy(e,n).reset(t)})),t.eachTargetAxis((function(n,i){t.getAxisProxy(n,i).filterData(t,e)}))})),t.eachComponent("dataZoom",(function(t){var e=t.findRepresentativeAxisProxy();if(e){var n=e.getDataPercentWindow(),i=e.getDataValueWindow();t.setCalculatedRange({start:n[0],end:n[1],startValue:i[0],endValue:i[1]})}}))}};var kN=!1;function PN(t){kN||(kN=!0,t.registerProcessor(t.PRIORITY.PROCESSOR.FILTER,LN),function(t){t.registerAction("dataZoom",(function(t,e){P(_N(e,t),(function(e){e.setRawRange({start:t.start,end:t.end,startValue:t.startValue,endValue:t.endValue})}))}))}(t),t.registerSubTypeDefaulter("dataZoom",(function(){return"slider"})))}function ON(t){t.registerComponentModel(MN),t.registerComponentView(TN),PN(t)}var RN=function(){},NN={};function zN(t,e){NN[t]=e}function EN(t){return NN[t]}var VN=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.optionUpdated=function(){t.prototype.optionUpdated.apply(this,arguments);var e=this.ecModel;P(this.option.feature,(function(t,n){var i=EN(n);i&&(i.getDefaultOption&&(i.defaultOption=i.getDefaultOption(e)),S(t,i.defaultOption))}))},e.type="toolbox",e.layoutMode={type:"box",ignoreSize:!0},e.defaultOption={show:!0,z:6,zlevel:0,orient:"horizontal",left:"right",top:"top",backgroundColor:"transparent",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemSize:15,itemGap:8,showTitle:!0,iconStyle:{borderColor:"#666",color:"none"},emphasis:{iconStyle:{borderColor:"#3E98C5"}},tooltip:{show:!1,position:"bottom"}},e}(Xc);function BN(t,e){var n=wc(e.get("padding")),i=e.getItemStyle(["color","opacity"]);return i.fill=e.get("backgroundColor"),t=new ls({shape:{x:t.x-n[3],y:t.y-n[0],width:t.width+n[1]+n[3],height:t.height+n[0]+n[2],r:e.get("borderRadius")},style:i,silent:!0,z2:-1})}var FN=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n,i){var r=this.group;if(r.removeAll(),t.get("show")){var o=+t.get("itemSize"),a=t.get("feature")||{},s=this._features||(this._features={}),l=[];P(a,(function(t,e){l.push(e)})),new n_(this._featureNames||[],l).add(u).update(u).remove(B(u,null)).execute(),this._featureNames=l,function(t,e,n){var i=e.getBoxLayoutParams(),r=e.get("padding"),o={width:n.getWidth(),height:n.getHeight()},a=Vc(i,o,r);Ec(e.get("orient"),t,e.get("itemGap"),a.width,a.height),Bc(t,i,o,r)}(r,t,n),r.add(BN(r.getBoundingRect(),t)),r.eachChild((function(t){var e=t.__title,i=t.ensureState("emphasis"),a=i.textConfig||(i.textConfig={}),s=t.getTextContent(),l=s&&s.states.emphasis;if(l&&!G(l)&&e){var u=l.style||(l.style={}),h=bi(e,cs.makeFont(u)),c=t.x+r.x,p=!1;t.y+r.y+o+h.height>n.getHeight()&&(a.position="top",p=!0);var d=p?-5-h.height:o+8;c+h.width/2>n.getWidth()?(a.position=["100%",d],u.align="right"):c-h.width/2<0&&(a.position=[0,d],u.align="left")}}))}function u(u,h){var c,p=l[u],d=l[h],f=a[p],g=new Oh(f,t,t.ecModel);if(i&&null!=i.newTitle&&i.featureName===p&&(f.title=i.newTitle),p&&!d){if(function(t){return 0===t.indexOf("my")}(p))c={onclick:g.option.onclick,featureName:p};else{var y=EN(p);if(!y)return;c=new y}s[p]=c}else if(!(c=s[d]))return;c.uid=Nh("toolbox-feature"),c.model=g,c.ecModel=e,c.api=n;var v=c instanceof RN;p||!d?!g.get("show")||v&&c.unusable?v&&c.remove&&c.remove(e,n):(!function(i,a,s){var l,u,h=i.getModel("iconStyle"),c=i.getModel(["emphasis","iconStyle"]),p=a instanceof RN&&a.getIcons?a.getIcons():i.get("icon"),d=i.get("title")||{};"string"==typeof p?(l={})[s]=p:l=p;"string"==typeof d?(u={})[s]=d:u=d;var f=i.iconPaths={};P(l,(function(s,l){var p=eh(s,{},{x:-o/2,y:-o/2,width:o,height:o});p.setStyle(h.getItemStyle()),p.ensureState("emphasis").style=c.getItemStyle();var d=new cs({style:{text:u[l],align:c.get("textAlign"),borderRadius:c.get("textBorderRadius"),padding:c.get("textPadding"),fill:null},ignore:!0});p.setTextContent(d),oh({el:p,componentModel:t,itemName:l,formatterParamsExtra:{title:u[l]}}),p.__title=u[l],p.on("mouseover",(function(){var e=c.getItemStyle(),n="vertical"===t.get("orient")?null==t.get("right")?"right":"left":null==t.get("bottom")?"bottom":"top";d.setStyle({fill:c.get("textFill")||e.fill||e.stroke||"#000",backgroundColor:c.get("textBackgroundColor")}),p.setTextConfig({position:c.get("textPosition")||n}),d.ignore=!t.get("showTitle"),js(this)})).on("mouseout",(function(){"emphasis"!==i.get(["iconStatus",l])&&qs(this),d.hide()})),("emphasis"===i.get(["iconStatus",l])?js:qs)(p),r.add(p),p.on("click",V(a.onclick,a,e,n,l)),f[l]=p}))}(g,c,p),g.setIconStatus=function(t,e){var n=this.option,i=this.iconPaths;n.iconStatus=n.iconStatus||{},n.iconStatus[t]=e,i[t]&&("emphasis"===e?js:qs)(i[t])},c instanceof RN&&c.render&&c.render(g,e,n,i)):v&&c.dispose&&c.dispose(e,n)}},e.prototype.updateView=function(t,e,n,i){P(this._features,(function(t){t instanceof RN&&t.updateView&&t.updateView(t.model,e,n,i)}))},e.prototype.remove=function(t,e){P(this._features,(function(n){n instanceof RN&&n.remove&&n.remove(t,e)})),this.group.removeAll()},e.prototype.dispose=function(t,e){P(this._features,(function(n){n instanceof RN&&n.dispose&&n.dispose(t,e)}))},e.type="toolbox",e}(wf);var GN=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.onclick=function(t,e){var n=this.model,i=n.get("name")||t.get("title.0.text")||"echarts",r="svg"===e.getZr().painter.getType(),o=r?"svg":n.get("type",!0)||"png",s=e.getConnectedDataURL({type:o,backgroundColor:n.get("backgroundColor",!0)||t.get("backgroundColor")||"#fff",connectedBackgroundColor:n.get("connectedBackgroundColor"),excludeComponents:n.get("excludeComponents"),pixelRatio:n.get("pixelRatio")});if("function"!=typeof MouseEvent||!a.browser.newEdge&&(a.browser.ie||a.browser.edge))if(window.navigator.msSaveOrOpenBlob||r){var l=s.split(","),u=l[0].indexOf("base64")>-1,h=r?decodeURIComponent(l[1]):l[1];u&&(h=window.atob(h));var c=i+"."+o;if(window.navigator.msSaveOrOpenBlob){for(var p=h.length,d=new Uint8Array(p);p--;)d[p]=h.charCodeAt(p);var f=new Blob([d]);window.navigator.msSaveOrOpenBlob(f,c)}else{var g=document.createElement("iframe");document.body.appendChild(g);var y=g.contentWindow,v=y.document;v.open("image/svg+xml","replace"),v.write(h),v.close(),y.focus(),v.execCommand("SaveAs",!0,c),document.body.removeChild(g)}}else{var m=n.get("lang"),_='',x=window.open();x.document.write(_),x.document.title=i}else{var b=document.createElement("a");b.download=i+"."+o,b.target="_blank",b.href=s;var w=new MouseEvent("click",{view:document.defaultView,bubbles:!0,cancelable:!1});b.dispatchEvent(w)}},e.getDefaultOption=function(t){return{show:!0,icon:"M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0",title:t.getLocale(["toolbox","saveAsImage","title"]),type:"png",connectedBackgroundColor:"#fff",name:"",excludeComponents:["toolbox"],lang:t.getLocale(["toolbox","saveAsImage","lang"])}},e}(RN);GN.prototype.unusable=!a.canvasSupported;var HN="__ec_magicType_stack__",WN=[["line","bar"],["stack"]],UN=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.getIcons=function(){var t=this.model,e=t.get("icon"),n={};return P(t.get("type"),(function(t){e[t]&&(n[t]=e[t])})),n},e.getDefaultOption=function(t){return{show:!0,type:[],icon:{line:"M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4",bar:"M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7",stack:"M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z"},title:t.getLocale(["toolbox","magicType","title"]),option:{},seriesIndex:{}}},e.prototype.onclick=function(t,e,n){var i=this.model,r=i.get(["seriesIndex",n]);if(XN[n]){var o,a={series:[]};P(WN,(function(t){D(t,n)>=0&&P(t,(function(t){i.setIconStatus(t,"normal")}))})),i.setIconStatus(n,"emphasis"),t.eachComponent({mainType:"series",query:null==r?null:{seriesIndex:r}},(function(t){var e=t.subType,r=t.id,o=XN[n](e,r,t,i);o&&(T(o,t.option),a.series.push(o));var s=t.coordinateSystem;if(s&&"cartesian2d"===s.type&&("line"===n||"bar"===n)){var l=s.getAxesByScale("ordinal")[0];if(l){var u=l.dim+"Axis",h=t.getReferringComponents(u,Nr).models[0].componentIndex;a[u]=a[u]||[];for(var c=0;c<=h;c++)a[u][h]=a[u][h]||{};a[u][h].boundaryGap="bar"===n}}}));var s=n;"stack"===n&&(o=S({stack:i.option.title.tiled,tiled:i.option.title.stack},i.option.title),"emphasis"!==i.get(["iconStatus",n])&&(s="tiled")),e.dispatchAction({type:"changeMagicType",currentType:s,newOption:a,newTitle:o,featureName:"magicType"})}},e}(RN),XN={line:function(t,e,n,i){if("bar"===t)return S({id:e,type:"line",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},i.get(["option","line"])||{},!0)},bar:function(t,e,n,i){if("line"===t)return S({id:e,type:"bar",data:n.get("data"),stack:n.get("stack"),markPoint:n.get("markPoint"),markLine:n.get("markLine")},i.get(["option","bar"])||{},!0)},stack:function(t,e,n,i){var r=n.get("stack")===HN;if("line"===t||"bar"===t)return i.setIconStatus("stack",r?"normal":"emphasis"),S({id:e,stack:r?"":HN},i.get(["option","stack"])||{},!0)}};Hm({type:"changeMagicType",event:"magicTypeChanged",update:"prepareAndUpdate"},(function(t,e){e.mergeOption(t.newOption)}));var YN=new Array(60).join("-"),ZN="\t";function jN(t){return t.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}var qN=new RegExp("[\t]+","g");function KN(t,e){var n=t.split(new RegExp("\n*"+YN+"\n*","g")),i={series:[]};return P(n,(function(t,n){if(function(t){if(t.slice(0,t.indexOf("\n")).indexOf(ZN)>=0)return!0}(t)){var r=function(t){for(var e=t.split(/\n+/g),n=[],i=O(jN(e.shift()).split(qN),(function(t){return{name:t,data:[]}})),r=0;r=0)&&t(r,i._targetInfoList)}))}return t.prototype.setOutputRanges=function(t,e){return this.matchOutputRanges(t,e,(function(t,e,n){if((t.coordRanges||(t.coordRanges=[])).push(e),!t.coordRange){t.coordRange=e;var i=hz[t.brushType](0,n,e);t.__rangeOffset={offset:pz[t.brushType](i.values,t.range,[1,1]),xyMinMax:i.xyMinMax}}})),t},t.prototype.matchOutputRanges=function(t,e,n){P(t,(function(t){var i=this.findTargetInfo(t,e);i&&!0!==i&&P(i.coordSyses,(function(i){var r=hz[t.brushType](1,i,t.range,!0);n(t,r.values,i,e)}))}),this)},t.prototype.setInputRanges=function(t,e){P(t,(function(t){var n,i,r,o,a,s=this.findTargetInfo(t,e);if(t.range=t.range||[],s&&!0!==s){t.panelId=s.panelId;var l=hz[t.brushType](0,s.coordSys,t.coordRange),u=t.__rangeOffset;t.range=u?pz[t.brushType](l.values,u.offset,(n=l.xyMinMax,i=u.xyMinMax,r=fz(n),o=fz(i),a=[r[0]/o[0],r[1]/o[1]],isNaN(a[0])&&(a[0]=1),isNaN(a[1])&&(a[1]=1),a)):l.values}}),this)},t.prototype.makePanelOpts=function(t,e){return O(this._targetInfoList,(function(n){var i=n.getPanelRect();return{panelId:n.panelId,defaultBrushType:e?e(n):null,clipPath:RA(i),isTargetByCursor:zA(i,t,n.coordSysModel),getLinearBrushOtherExtent:NA(i)}}))},t.prototype.controlSeries=function(t,e,n){var i=this.findTargetInfo(t,n);return!0===i||i&&D(i.coordSyses,e.coordinateSystem)>=0},t.prototype.findTargetInfo=function(t,e){for(var n=this._targetInfoList,i=az(e,t),r=0;rt[1]&&t.reverse(),t}function az(t,e){return Or(t,e,{includeMainTypes:iz})}var sz={grid:function(t,e){var n=t.xAxisModels,i=t.yAxisModels,r=t.gridModels,o=ht(),a={},s={};(n||i||r)&&(P(n,(function(t){var e=t.axis.grid.model;o.set(e.id,e),a[e.id]=!0})),P(i,(function(t){var e=t.axis.grid.model;o.set(e.id,e),s[e.id]=!0})),P(r,(function(t){o.set(t.id,t),a[t.id]=!0,s[t.id]=!0})),o.each((function(t){var r=t.coordinateSystem,o=[];P(r.getCartesians(),(function(t,e){(D(n,t.getAxis("x").model)>=0||D(i,t.getAxis("y").model)>=0)&&o.push(t)})),e.push({panelId:"grid--"+t.id,gridModel:t,coordSysModel:t,coordSys:o[0],coordSyses:o,getPanelRect:uz.grid,xAxisDeclared:a[t.id],yAxisDeclared:s[t.id]})})))},geo:function(t,e){P(t.geoModels,(function(t){var n=t.coordinateSystem;e.push({panelId:"geo--"+t.id,geoModel:t,coordSysModel:t,coordSys:n,coordSyses:[n],getPanelRect:uz.geo})}))}},lz=[function(t,e){var n=t.xAxisModel,i=t.yAxisModel,r=t.gridModel;return!r&&n&&(r=n.axis.grid.model),!r&&i&&(r=i.axis.grid.model),r&&r===e.gridModel},function(t,e){var n=t.geoModel;return n&&n===e.geoModel}],uz={grid:function(){return this.coordSys.master.getRect().clone()},geo:function(){var t=this.coordSys,e=t.getBoundingRect().clone();return e.applyTransform(ju(t)),e}},hz={lineX:B(cz,0),lineY:B(cz,1),rect:function(t,e,n,i){var r=t?e.pointToData([n[0][0],n[1][0]],i):e.dataToPoint([n[0][0],n[1][0]],i),o=t?e.pointToData([n[0][1],n[1][1]],i):e.dataToPoint([n[0][1],n[1][1]],i),a=[oz([r[0],o[0]]),oz([r[1],o[1]])];return{values:a,xyMinMax:a}},polygon:function(t,e,n,i){var r=[[1/0,-1/0],[1/0,-1/0]];return{values:O(n,(function(n){var o=t?e.pointToData(n,i):e.dataToPoint(n,i);return r[0][0]=Math.min(r[0][0],o[0]),r[1][0]=Math.min(r[1][0],o[1]),r[0][1]=Math.max(r[0][1],o[0]),r[1][1]=Math.max(r[1][1],o[1]),o})),xyMinMax:r}}};function cz(t,e,n,i){var r=n.getAxis(["x","y"][t]),o=oz(O([0,1],(function(t){return e?r.coordToData(r.toLocalCoord(i[t]),!0):r.toGlobalCoord(r.dataToCoord(i[t]))}))),a=[];return a[t]=o,a[1-t]=[NaN,NaN],{values:o,xyMinMax:a}}var pz={lineX:B(dz,0),lineY:B(dz,1),rect:function(t,e,n){return[[t[0][0]-n[0]*e[0][0],t[0][1]-n[0]*e[0][1]],[t[1][0]-n[1]*e[1][0],t[1][1]-n[1]*e[1][1]]]},polygon:function(t,e,n){return O(t,(function(t,i){return[t[0]-n[0]*e[i][0],t[1]-n[1]*e[i][1]]}))}};function dz(t,e,n,i){return[e[0]-i[t]*n[0],e[1]-i[t]*n[1]]}function fz(t){return t?[t[0][1]-t[0][0],t[1][1]-t[1][0]]:[NaN,NaN]}var gz,yz,vz=P,mz=_r+"toolbox-dataZoom_",_z=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n,i){this._brushController||(this._brushController=new iA(n.getZr()),this._brushController.on("brush",V(this._onBrush,this)).mount()),function(t,e,n,i,r){var o=n._isZoomActive;i&&"takeGlobalCursor"===i.type&&(o="dataZoomSelect"===i.key&&i.dataZoomSelectActive);n._isZoomActive=o,t.setIconStatus("zoom",o?"emphasis":"normal");var a=new rz(bz(t),e,{include:["grid"]}).makePanelOpts(r,(function(t){return t.xAxisDeclared&&!t.yAxisDeclared?"lineX":!t.xAxisDeclared&&t.yAxisDeclared?"lineY":"rect"}));n._brushController.setPanels(a).enableBrush(!(!o||!a.length)&&{brushType:"auto",brushStyle:t.getModel("brushStyle").getItemStyle()})}(t,e,this,i,n),function(t,e){t.setIconStatus("back",function(t){return ez(t).length}(e)>1?"emphasis":"normal")}(t,e)},e.prototype.onclick=function(t,e,n){xz[n].call(this)},e.prototype.remove=function(t,e){this._brushController&&this._brushController.unmount()},e.prototype.dispose=function(t,e){this._brushController&&this._brushController.dispose()},e.prototype._onBrush=function(t){var e=t.areas;if(t.isEnd&&e.length){var n={},i=this.ecModel;this._brushController.updateCovers([]),new rz(bz(this.model),i,{include:["grid"]}).matchOutputRanges(e,i,(function(t,e,n){if("cartesian2d"===n.type){var i=t.brushType;"rect"===i?(r("x",n,e[0]),r("y",n,e[1])):r({lineX:"x",lineY:"y"}[i],n,e)}})),function(t,e){var n=ez(t);QN(e,(function(e,i){for(var r=n.length-1;r>=0&&!n[r][i];r--);if(r<0){var o=t.queryComponents({mainType:"dataZoom",subType:"select",id:i})[0];if(o){var a=o.getPercentRange();n[0][i]={dataZoomId:i,start:a[0],end:a[1]}}}})),n.push(e)}(i,n),this._dispatchZoomAction(n)}function r(t,e,r){var o=e.getAxis(t),a=o.model,s=function(t,e,n){var i;return n.eachComponent({mainType:"dataZoom",subType:"select"},(function(n){n.getAxisModel(t,e.componentIndex)&&(i=n)})),i}(t,a,i),l=s.findRepresentativeAxisProxy(a).getMinMaxSpan();null==l.minValueSpan&&null==l.maxValueSpan||(r=PD(0,r.slice(),o.scale.getExtent(),0,l.minValueSpan,l.maxValueSpan)),s&&(n[s.id]={dataZoomId:s.id,startValue:r[0],endValue:r[1]})}},e.prototype._dispatchZoomAction=function(t){var e=[];vz(t,(function(t,n){e.push(w(t))})),e.length&&this.api.dispatchAction({type:"dataZoom",from:this.uid,batch:e})},e.getDefaultOption=function(t){return{show:!0,filterMode:"filter",icon:{zoom:"M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1",back:"M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26"},title:t.getLocale(["toolbox","dataZoom","title"]),brushStyle:{borderWidth:0,color:"rgba(210,219,238,0.2)"}}},e}(RN),xz={zoom:function(){var t=!this._isZoomActive;this.api.dispatchAction({type:"takeGlobalCursor",key:"dataZoomSelect",dataZoomSelectActive:t})},back:function(){this._dispatchZoomAction(function(t){var e=ez(t),n=e[e.length-1];e.length>1&&e.pop();var i={};return QN(n,(function(t,n){for(var r=e.length-1;r>=0;r--)if(t=e[r][n]){i[n]=t;break}})),i}(this.ecModel))}};function bz(t){var e={xAxisIndex:t.get("xAxisIndex",!0),yAxisIndex:t.get("yAxisIndex",!0),xAxisId:t.get("xAxisId",!0),yAxisId:t.get("yAxisId",!0)};return null==e.xAxisIndex&&null==e.xAxisId&&(e.xAxisIndex="all"),null==e.yAxisIndex&&null==e.yAxisId&&(e.yAxisIndex="all"),e}gz="dataZoom",yz=function(t){var e=t.getComponent("toolbox",0),n=["feature","dataZoom"];if(e&&null!=e.get(n)){var i=e.getModel(n),r=[],o=Or(t,bz(i));return vz(o.xAxisModels,(function(t){return a(t,"xAxis","xAxisIndex")})),vz(o.yAxisModels,(function(t){return a(t,"yAxis","yAxisIndex")})),r}function a(t,e,n){var o=t.componentIndex,a={type:"select",$fromToolbox:!0,filterMode:i.get("filterMode",!0)||"filter",id:mz+e+o};a[n]=o,r.push(a)}},rt(null==dp.get(gz)&&yz),dp.set(gz,yz);var wz=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="tooltip",e.dependencies=["axisPointer"],e.defaultOption={zlevel:0,z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:null,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"#fff",shadowBlur:10,shadowColor:"rgba(0, 0, 0, .2)",shadowOffsetX:1,shadowOffsetY:2,borderRadius:4,borderWidth:1,padding:null,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#666",fontSize:14}},e}(Xc);function Sz(t){var e=t.get("confine");return null!=e?!!e:"richText"===t.get("renderMode")}function Mz(t){if(a.domSupported)for(var e=document.documentElement.style,n=0,i=t.length;n-1?(o+="top:50%",a+="translateY(-50%) rotate("+("left"===r?-225:-45)+"deg)"):(o+="left:50%",a+="translateX(-50%) rotate("+("top"===r?225:45)+"deg)");var s=e+" solid 1px;";return'
    '}(n.get("backgroundColor"),i,r)),H(t))o.innerHTML=t;else if(t){o.innerHTML="",F(t)||(t=[t]);for(var a=0;a=0?this._tryShow(n,i):"leave"===e&&this._hide(i))}),this))},e.prototype._keepShow=function(){var t=this._tooltipModel,e=this._ecModel,n=this._api;if(null!=this._lastX&&null!=this._lastY&&"none"!==t.get("triggerOn")){var i=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout((function(){!n.isDisposed()&&i.manuallyShowTip(t,e,n,{x:i._lastX,y:i._lastY,dataByCoordSys:i._lastDataByCoordSys})}))}},e.prototype.manuallyShowTip=function(t,e,n,i){if(i.from!==this.uid&&!a.node){var r=Xz(i,n);this._ticket="";var o=i.dataByCoordSys,s=function(t,e,n){var i=Rr(t).queryOptionMap,r=i.keys()[0];if(!r||"series"===r)return;var o,a=Er(e,r,i.get(r),{useDefault:!1,enableAll:!1,enableNone:!1}).models[0];if(!a)return;if(n.getViewOfComponentModel(a).group.traverse((function(e){var n=_s(e).tooltipConfig;if(n&&n.name===t.name)return o=e,!0})),o)return{componentMainType:r,componentIndex:a.componentIndex,el:o}}(i,e,n);if(s){var l=s.el.getBoundingRect().clone();l.applyTransform(s.el.transform),this._tryShow({offsetX:l.x+l.width/2,offsetY:l.y+l.height/2,target:s.el,position:i.position,positionDefault:"bottom"},r)}else if(i.tooltip&&null!=i.x&&null!=i.y){var u=Hz;u.x=i.x,u.y=i.y,u.update(),_s(u).tooltipConfig={name:null,option:i.tooltip},this._tryShow({offsetX:i.x,offsetY:i.y,target:u},r)}else if(o)this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,dataByCoordSys:o,tooltipOption:i.tooltipOption},r);else if(null!=i.seriesIndex){if(this._manuallyAxisShowTip(t,e,n,i))return;var h=JO(i,e),c=h.point[0],p=h.point[1];null!=c&&null!=p&&this._tryShow({offsetX:c,offsetY:p,target:h.el,position:i.position,positionDefault:"bottom"},r)}else null!=i.x&&null!=i.y&&(n.dispatchAction({type:"updateAxisPointer",x:i.x,y:i.y}),this._tryShow({offsetX:i.x,offsetY:i.y,position:i.position,target:n.getZr().findHover(i.x,i.y).target},r))}},e.prototype.manuallyHideTip=function(t,e,n,i){var r=this._tooltipContent;!this._alwaysShowContent&&this._tooltipModel&&r.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=this._lastDataByCoordSys=null,i.from!==this.uid&&this._hide(Xz(i,n))},e.prototype._manuallyAxisShowTip=function(t,e,n,i){var r=i.seriesIndex,o=i.dataIndex,a=e.getComponent("axisPointer").coordSysAxesInfo;if(null!=r&&null!=o&&null!=a){var s=e.getSeriesByIndex(r);if(s)if("axis"===Uz([s.getData().getItemModel(o),s,(s.coordinateSystem||{}).model],this._tooltipModel).get("trigger"))return n.dispatchAction({type:"updateAxisPointer",seriesIndex:r,dataIndex:o,position:i.position}),!0}},e.prototype._tryShow=function(t,e){var n=t.target;if(this._tooltipModel){this._lastX=t.offsetX,this._lastY=t.offsetY;var i=t.dataByCoordSys;if(i&&i.length)this._showAxisTooltip(i,t);else if(n){var r,o;this._lastDataByCoordSys=null,iy(n,(function(t){return null!=_s(t).dataIndex?(r=t,!0):null!=_s(t).tooltipConfig?(o=t,!0):void 0}),!0),r?this._showSeriesItemTooltip(t,r,e):o?this._showComponentItemTooltip(t,o,e):this._hide(e)}else this._lastDataByCoordSys=null,this._hide(e)}},e.prototype._showOrMove=function(t,e){var n=t.get("showDelay");e=V(e,this),clearTimeout(this._showTimout),n>0?this._showTimout=setTimeout(e,n):e()},e.prototype._showAxisTooltip=function(t,e){var n=this._ecModel,i=this._tooltipModel,r=[e.offsetX,e.offsetY],o=Uz([e.tooltipOption],i),a=this._renderMode,s=[],l=tf("section",{blocks:[],noHeader:!0}),u=[],h=new hf;Fz(t,(function(t){Fz(t.dataByAxis,(function(t){var e=n.getComponent(t.axisDim+"Axis",t.axisIndex),i=t.value;if(e&&null!=i){var r=RO(i,e.axis,n,t.seriesDataIndices,t.valueLabelOpt),o=tf("section",{header:r,noHeader:!ot(r),sortBlocks:!0,blocks:[]});l.blocks.push(o),P(t.seriesDataIndices,(function(l){var c=n.getSeriesByIndex(l.seriesIndex),p=l.dataIndexInside,d=c.getDataParams(p);d.axisDim=t.axisDim,d.axisIndex=t.axisIndex,d.axisType=t.axisType,d.axisId=t.axisId,d.axisValue=Gx(e.axis,{value:i}),d.axisValueLabel=r,d.marker=h.makeTooltipMarker("item",kc(d.color),a);var f=Cd(c.formatTooltip(p,!0,null));f.markupFragment&&o.blocks.push(f.markupFragment),f.markupText&&u.push(f.markupText),s.push(d)}))}}))})),l.blocks.reverse(),u.reverse();var c=e.position,p=o.get("order"),d=rf(l,h,a,p,n.get("useUTC"),o.get("textStyle"));d&&u.unshift(d);var f="richText"===a?"\n\n":"
    ",g=u.join(f);this._showOrMove(o,(function(){this._updateContentNotChangedOnAxis(t)?this._updatePosition(o,c,r[0],r[1],this._tooltipContent,s):this._showTooltipContent(o,g,s,Math.random()+"",r[0],r[1],c,null,h)}))},e.prototype._showSeriesItemTooltip=function(t,e,n){var i=this._ecModel,r=_s(e),o=r.seriesIndex,a=i.getSeriesByIndex(o),s=r.dataModel||a,l=r.dataIndex,u=r.dataType,h=s.getData(u),c=this._renderMode,p=t.positionDefault,d=Uz([h.getItemModel(l),s,a&&(a.coordinateSystem||{}).model],this._tooltipModel,p?{position:p}:null),f=d.get("trigger");if(null==f||"item"===f){var g=s.getDataParams(l,u),y=new hf;g.marker=y.makeTooltipMarker("item",kc(g.color),c);var v=Cd(s.formatTooltip(l,!1,u)),m=d.get("order"),_=v.markupFragment?rf(v.markupFragment,y,c,m,i.get("useUTC"),d.get("textStyle")):v.markupText,x="item_"+s.name+"_"+l;this._showOrMove(d,(function(){this._showTooltipContent(d,_,g,x,t.offsetX,t.offsetY,t.position,t.target,y)})),n({type:"showTip",dataIndexInside:l,dataIndex:h.getRawIndex(l),seriesIndex:o,from:this.uid})}},e.prototype._showComponentItemTooltip=function(t,e,n){var i=_s(e),r=i.tooltipConfig.option||{};if(H(r)){r={content:r,formatter:r}}var o=[r],a=this._ecModel.getComponent(i.componentMainType,i.componentIndex);a&&o.push(a),o.push({formatter:r.content});var s=t.positionDefault,l=Uz(o,this._tooltipModel,s?{position:s}:null),u=l.get("content"),h=Math.random()+"",c=new hf;this._showOrMove(l,(function(){var n=w(l.get("formatterParams")||{});this._showTooltipContent(l,u,n,h,t.offsetX,t.offsetY,t.position,e,c)})),n({type:"showTip",from:this.uid})},e.prototype._showTooltipContent=function(t,e,n,i,r,o,a,s,l){if(this._ticket="",t.get("showContent")&&t.get("show")){var u=this._tooltipContent,h=t.get("formatter");a=a||t.get("position");var c=e,p=this._getNearestPoint([r,o],n,t.get("trigger"),t.get("borderColor")).color;if(h&&H(h)){var d=t.ecModel.get("useUTC"),f=F(n)?n[0]:n;c=h,f&&f.axisType&&f.axisType.indexOf("time")>=0&&(c=ic(f.axisValue,c,d)),c=Ac(c,n,!0)}else if(G(h)){var g=Bz((function(e,i){e===this._ticket&&(u.setContent(i,l,t,p,a),this._updatePosition(t,a,r,o,u,n,s))}),this);this._ticket=i,c=h(n,i,g)}u.setContent(c,l,t,p,a),u.show(t,p),this._updatePosition(t,a,r,o,u,n,s)}},e.prototype._getNearestPoint=function(t,e,n,i){return"axis"===n||F(e)?{color:i||("html"===this._renderMode?"#fff":"none")}:F(e)?void 0:{color:i||e.color||e.borderColor}},e.prototype._updatePosition=function(t,e,n,i,r,o,a){var s=this._api.getWidth(),l=this._api.getHeight();e=e||t.get("position");var u=r.getSize(),h=t.get("align"),c=t.get("verticalAlign"),p=a&&a.getBoundingRect().clone();if(a&&p.applyTransform(a.transform),G(e)&&(e=e([n,i],o,r.el,p,{viewSize:[s,l],contentSize:u.slice()})),F(e))n=Gz(e[0],s),i=Gz(e[1],l);else if(X(e)){var d=e;d.width=u[0],d.height=u[1];var f=Vc(d,{width:s,height:l});n=f.x,i=f.y,h=null,c=null}else if(H(e)&&a){var g=function(t,e,n){var i=n[0],r=n[1],o=10,a=5,s=0,l=0,u=e.width,h=e.height;switch(t){case"inside":s=e.x+u/2-i/2,l=e.y+h/2-r/2;break;case"top":s=e.x+u/2-i/2,l=e.y-r-o;break;case"bottom":s=e.x+u/2-i/2,l=e.y+h+o;break;case"left":s=e.x-i-o-a,l=e.y+h/2-r/2;break;case"right":s=e.x+u+o+a,l=e.y+h/2-r/2}return[s,l]}(e,p,u);n=g[0],i=g[1]}else{g=function(t,e,n,i,r,o,a){var s=n.getOuterSize(),l=s.width,u=s.height;null!=o&&(t+l+o+2>i?t-=l+o:t+=o);null!=a&&(e+u+a>r?e-=u+a:e+=a);return[t,e]}(n,i,r,s,l,h?null:20,c?null:20);n=g[0],i=g[1]}if(h&&(n-=Yz(h)?u[0]/2:"right"===h?u[0]:0),c&&(i-=Yz(c)?u[1]/2:"bottom"===c?u[1]:0),Sz(t)){g=function(t,e,n,i,r){var o=n.getOuterSize(),a=o.width,s=o.height;return t=Math.min(t+a,i)-a,e=Math.min(e+s,r)-s,t=Math.max(t,0),e=Math.max(e,0),[t,e]}(n,i,r,s,l);n=g[0],i=g[1]}r.moveTo(n,i)},e.prototype._updateContentNotChangedOnAxis=function(t){var e=this._lastDataByCoordSys,n=!!e&&e.length===t.length;return n&&Fz(e,(function(e,i){var r=e.dataByAxis||[],o=(t[i]||{}).dataByAxis||[];(n=n&&r.length===o.length)&&Fz(r,(function(t,e){var i=o[e]||{},r=t.seriesDataIndices||[],a=i.seriesDataIndices||[];(n=n&&t.value===i.value&&t.axisType===i.axisType&&t.axisId===i.axisId&&r.length===a.length)&&Fz(r,(function(t,e){var i=a[e];n=n&&t.seriesIndex===i.seriesIndex&&t.dataIndex===i.dataIndex}))}))})),this._lastDataByCoordSys=t,!!n},e.prototype._hide=function(t){this._lastDataByCoordSys=null,t({type:"hideTip",from:this.uid})},e.prototype.dispose=function(t,e){a.node||(this._tooltipContent.dispose(),KO("itemTooltip",e))},e.type="tooltip",e}(wf);function Uz(t,e,n){var i,r=e.ecModel;n?(i=new Oh(n,r,r),i=new Oh(e.option,i,r)):i=e;for(var o=t.length-1;o>=0;o--){var a=t[o];a&&(a instanceof Oh&&(a=a.get("tooltip",!0)),H(a)&&(a={formatter:a}),a&&(i=new Oh(a,i,r)))}return i}function Xz(t,e){return t.dispatchAction||V(e.dispatchAction,e)}function Yz(t){return"center"===t||"middle"===t}var Zz=["rect","polygon","keep","clear"];function jz(t,e){var n=xr(t?t.brush:[]);if(n.length){var i=[];P(n,(function(t){var e=t.hasOwnProperty("toolbox")?t.toolbox:[];e instanceof Array&&(i=i.concat(e))}));var r=t&&t.toolbox;F(r)&&(r=r[0]),r||(r={feature:{}},t.toolbox=[r]);var o=r.feature||(r.feature={}),a=o.brush||(o.brush={}),s=a.type||(a.type=[]);s.push.apply(s,i),function(t){var e={};P(t,(function(t){e[t]=1})),t.length=0,P(e,(function(e,n){t.push(n)}))}(s),e&&!s.length&&s.push.apply(s,Zz)}}var qz=P;function Kz(t){if(t)for(var e in t)if(t.hasOwnProperty(e))return!0}function $z(t,e,n){var i={};return qz(e,(function(e){var r,o=i[e]=((r=function(){}).prototype.__hidden=r.prototype,new r);qz(t[e],(function(t,i){if(TT.isValidType(i)){var r={type:i,visual:t};n&&n(r,e),o[i]=new TT(r),"opacity"===i&&((r=w(r)).type="colorAlpha",o.__hidden.__alphaForOpacity=new TT(r))}}))})),i}function Jz(t,e,n){var i;P(n,(function(t){e.hasOwnProperty(t)&&Kz(e[t])&&(i=!0)})),i&&P(n,(function(n){e.hasOwnProperty(n)&&Kz(e[n])?t[n]=w(e[n]):delete t[n]}))}var Qz={lineX:tE(0),lineY:tE(1),rect:{point:function(t,e,n){return t&&n.boundingRect.contain(t[0],t[1])},rect:function(t,e,n){return t&&n.boundingRect.intersect(t)}},polygon:{point:function(t,e,n){return t&&n.boundingRect.contain(t[0],t[1])&&uv(n.range,t[0],t[1])},rect:function(t,e,n){var i=n.range;if(!t||i.length<=1)return!1;var r=t.x,o=t.y,a=t.width,s=t.height,l=i[0];return!!(uv(i,r,o)||uv(i,r+a,o)||uv(i,r,o+s)||uv(i,r+a,o+s)||gi.create(t).contain(l[0],l[1])||nh(r,o,r+a,o,i)||nh(r,o,r,o+s,i)||nh(r+a,o,r+a,o+s,i)||nh(r,o+s,r+a,o+s,i))||void 0}}};function tE(t){var e=["x","y"],n=["width","height"];return{point:function(e,n,i){if(e){var r=i.range;return eE(e[t],r)}},rect:function(i,r,o){if(i){var a=o.range,s=[i[e[t]],i[e[t]]+i[n[t]]];return s[1]e[0][1]&&(e[0][1]=o[0]),o[1]e[1][1]&&(e[1][1]=o[1])}return e&&hE(e)}};function hE(t){return new gi(t[0][0],t[1][0],t[0][1]-t[0][0],t[1][1]-t[1][0])}var cE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(t,e){this.ecModel=t,this.api=e,this.model,(this._brushController=new iA(e.getZr())).on("brush",V(this._onBrush,this)).mount()},e.prototype.render=function(t,e,n,i){this.model=t,this._updateController(t,e,n,i)},e.prototype.updateTransform=function(t,e,n,i){oE(e),this._updateController(t,e,n,i)},e.prototype.updateVisual=function(t,e,n,i){this.updateTransform(t,e,n,i)},e.prototype.updateView=function(t,e,n,i){this._updateController(t,e,n,i)},e.prototype._updateController=function(t,e,n,i){(!i||i.$from!==t.id)&&this._brushController.setPanels(t.brushTargetManager.makePanelOpts(n)).enableBrush(t.brushOption).updateCovers(t.areas.slice())},e.prototype.dispose=function(){this._brushController.dispose()},e.prototype._onBrush=function(t){var e=this.model.id,n=this.model.brushTargetManager.setOutputRanges(t.areas,this.ecModel);(!t.isEnd||t.removeOnClick)&&this.api.dispatchAction({type:"brush",brushId:e,areas:w(n),$from:e}),t.isEnd&&this.api.dispatchAction({type:"brushEnd",brushId:e,areas:w(n),$from:e})},e.type="brush",e}(wf),pE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.areas=[],n.brushOption={},n}return n(e,t),e.prototype.optionUpdated=function(t,e){var n=this.option;!e&&Jz(n,t,["inBrush","outOfBrush"]);var i=n.inBrush=n.inBrush||{};n.outOfBrush=n.outOfBrush||{color:"#ddd"},i.hasOwnProperty("liftZ")||(i.liftZ=5)},e.prototype.setAreas=function(t){t&&(this.areas=O(t,(function(t){return dE(this.option,t)}),this))},e.prototype.setBrushOption=function(t){this.brushOption=dE(this.option,t),this.brushType=this.brushOption.brushType},e.type="brush",e.dependencies=["geo","grid","xAxis","yAxis","parallel","series"],e.defaultOption={seriesIndex:"all",brushType:"rect",brushMode:"single",transformable:!0,brushStyle:{borderWidth:1,color:"rgba(210,219,238,0.3)",borderColor:"#D2DBEE"},throttleType:"fixRate",throttleDelay:0,removeOnClick:!0,z:1e4},e}(Xc);function dE(t,e){return S({brushType:t.brushType,brushMode:t.brushMode,transformable:t.transformable,brushStyle:new Oh(t.brushStyle).getItemStyle(),removeOnClick:t.removeOnClick,z:t.z},e,!0)}var fE=["rect","polygon","lineX","lineY","keep","clear"],gE=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.render=function(t,e,n){var i,r,o;e.eachComponent({mainType:"brush"},(function(t){i=t.brushType,r=t.brushOption.brushMode||"single",o=o||!!t.areas.length})),this._brushType=i,this._brushMode=r,P(t.get("type",!0),(function(e){t.setIconStatus(e,("keep"===e?"multiple"===r:"clear"===e?o:e===i)?"emphasis":"normal")}))},e.prototype.updateView=function(t,e,n){this.render(t,e,n)},e.prototype.getIcons=function(){var t=this.model,e=t.get("icon",!0),n={};return P(t.get("type",!0),(function(t){e[t]&&(n[t]=e[t])})),n},e.prototype.onclick=function(t,e,n){var i=this._brushType,r=this._brushMode;"clear"===n?(e.dispatchAction({type:"axisAreaSelect",intervals:[]}),e.dispatchAction({type:"brush",command:"clear",areas:[]})):e.dispatchAction({type:"takeGlobalCursor",key:"brush",brushOption:{brushType:"keep"===n?i:i!==n&&n,brushMode:"keep"===n?"multiple"===r?"single":"multiple":r}})},e.getDefaultOption=function(t){return{show:!0,type:fE.slice(),icon:{rect:"M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13",polygon:"M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2",lineX:"M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4",lineY:"M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4",keep:"M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z",clear:"M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2"},title:t.getLocale(["toolbox","brush","title"])}},e}(RN);var yE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.layoutMode={type:"box",ignoreSize:!0},n}return n(e,t),e.type="title",e.defaultOption={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:"bold",color:"#464646"},subtextStyle:{fontSize:12,color:"#6E7079"}},e}(Xc),vE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.render=function(t,e,n){if(this.group.removeAll(),t.get("show")){var i=this.group,r=t.getModel("textStyle"),o=t.getModel("subtextStyle"),a=t.get("textAlign"),s=tt(t.get("textBaseline"),t.get("textVerticalAlign")),l=new cs({style:ph(r,{text:t.get("text"),fill:r.getTextColor()},{disableBox:!0}),z2:10}),u=l.getBoundingRect(),h=t.get("subtext"),c=new cs({style:ph(o,{text:h,fill:o.getTextColor(),y:u.height+t.get("itemGap"),verticalAlign:"top"},{disableBox:!0}),z2:10}),p=t.get("link"),d=t.get("sublink"),f=t.get("triggerEvent",!0);l.silent=!p&&!f,c.silent=!d&&!f,p&&l.on("click",(function(){Pc(p,"_"+t.get("target"))})),d&&c.on("click",(function(){Pc(d,"_"+t.get("subtarget"))})),_s(l).eventData=_s(c).eventData=f?{componentType:"title",componentIndex:t.componentIndex}:null,i.add(l),h&&i.add(c);var g=i.getBoundingRect(),y=t.getBoxLayoutParams();y.width=g.width,y.height=g.height;var v=Vc(y,{width:n.getWidth(),height:n.getHeight()},t.get("padding"));a||("middle"===(a=t.get("left")||t.get("right"))&&(a="center"),"right"===a?v.x+=v.width:"center"===a&&(v.x+=v.width/2)),s||("center"===(s=t.get("top")||t.get("bottom"))&&(s="middle"),"bottom"===s?v.y+=v.height:"middle"===s&&(v.y+=v.height/2),s=s||"top"),i.x=v.x,i.y=v.y,i.markRedraw();var m={align:a,verticalAlign:s};l.setStyle(m),c.setStyle(m),g=i.getBoundingRect();var _=v.margin,x=t.getItemStyle(["color","opacity"]);x.fill=t.get("backgroundColor");var b=new ls({shape:{x:g.x-_[3],y:g.y-_[0],width:g.width+_[1]+_[3],height:g.height+_[0]+_[2],r:t.get("borderRadius")},style:x,subPixelOptimize:!0,silent:!0});i.add(b)}},e.type="title",e}(wf);var mE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.layoutMode="box",n}return n(e,t),e.prototype.init=function(t,e,n){this.mergeDefaultAndTheme(t,n),this._initData()},e.prototype.mergeOption=function(e){t.prototype.mergeOption.apply(this,arguments),this._initData()},e.prototype.setCurrentIndex=function(t){null==t&&(t=this.option.currentIndex);var e=this._data.count();this.option.loop?t=(t%e+e)%e:(t>=e&&(t=e-1),t<0&&(t=0)),this.option.currentIndex=t},e.prototype.getCurrentIndex=function(){return this.option.currentIndex},e.prototype.isIndexMax=function(){return this.getCurrentIndex()>=this._data.count()-1},e.prototype.setPlayState=function(t){this.option.autoPlay=!!t},e.prototype.getPlayState=function(){return!!this.option.autoPlay},e.prototype._initData=function(){var t,e=this.option,n=e.data||[],i=e.axisType,r=this._names=[];"category"===i?(t=[],P(n,(function(e,n){var i,o=Cr(Sr(e),"");X(e)?(i=w(e)).value=n:i=n,t.push(i),r.push(o)}))):t=n;var o={category:"ordinal",time:"time",value:"number"}[i]||"number";(this._data=new L_([{name:"value",type:o}],this)).initData(t,r)},e.prototype.getData=function(){return this._data},e.prototype.getCategories=function(){if("category"===this.get("axisType"))return this._names.slice()},e.type="timeline",e.defaultOption={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:{},label:{color:"#000"},data:[]},e}(Xc),_E=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="timeline.slider",e.defaultOption=zh(mE.defaultOption,{backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,orient:"horizontal",inverse:!1,tooltip:{trigger:"item"},symbol:"circle",symbolSize:12,lineStyle:{show:!0,width:2,color:"#DAE1F5"},label:{position:"auto",show:!0,interval:"auto",rotate:0,color:"#A4B1D7"},itemStyle:{color:"#A4B1D7",borderWidth:1},checkpointStyle:{symbol:"circle",symbolSize:15,color:"#316bf3",borderColor:"#fff",borderWidth:2,shadowBlur:2,shadowOffsetX:1,shadowOffsetY:1,shadowColor:"rgba(0, 0, 0, 0.3)",animation:!0,animationDuration:300,animationEasing:"quinticInOut"},controlStyle:{show:!0,showPlayBtn:!0,showPrevBtn:!0,showNextBtn:!0,itemSize:24,itemGap:12,position:"left",playIcon:"path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z",stopIcon:"path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z",nextIcon:"M2,18.5A1.52,1.52,0,0,1,.92,18a1.49,1.49,0,0,1,0-2.12L7.81,9.36,1,3.11A1.5,1.5,0,1,1,3,.89l8,7.34a1.48,1.48,0,0,1,.49,1.09,1.51,1.51,0,0,1-.46,1.1L3,18.08A1.5,1.5,0,0,1,2,18.5Z",prevIcon:"M10,.5A1.52,1.52,0,0,1,11.08,1a1.49,1.49,0,0,1,0,2.12L4.19,9.64,11,15.89a1.5,1.5,0,1,1-2,2.22L1,10.77A1.48,1.48,0,0,1,.5,9.68,1.51,1.51,0,0,1,1,8.58L9,.92A1.5,1.5,0,0,1,10,.5Z",prevBtnSize:18,nextBtnSize:18,color:"#A4B1D7",borderColor:"#A4B1D7",borderWidth:1},emphasis:{label:{show:!0,color:"#6f778d"},itemStyle:{color:"#316BF3"},controlStyle:{color:"#316BF3",borderColor:"#316BF3",borderWidth:2}},progress:{lineStyle:{color:"#316BF3"},itemStyle:{color:"#316BF3"},label:{color:"#6f778d"}},data:[]}),e}(mE);L(_E,Td.prototype);var xE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="timeline",e}(wf),bE=function(t){function e(e,n,i,r){var o=t.call(this,e,n,i)||this;return o.type=r||"value",o}return n(e,t),e.prototype.getLabelModel=function(){return this.model.getModel("label")},e.prototype.isHorizontal=function(){return"horizontal"===this.model.get("orient")},e}(hb),wE=Math.PI,SE=kr(),ME=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.init=function(t,e){this.api=e},e.prototype.render=function(t,e,n){if(this.model=t,this.api=n,this.ecModel=e,this.group.removeAll(),t.get("show",!0)){var i=this._layout(t,n),r=this._createGroup("_mainGroup"),o=this._createGroup("_labelGroup"),a=this._axis=this._createAxis(i,t);t.formatTooltip=function(t){return tf("nameValue",{noName:!0,value:a.scale.getLabel({value:t})})},P(["AxisLine","AxisTick","Control","CurrentPointer"],(function(e){this["_render"+e](i,r,a,t)}),this),this._renderAxisLabel(i,o,a,t),this._position(i,t)}this._doPlayStop(),this._updateTicksStatus()},e.prototype.remove=function(){this._clearTimer(),this.group.removeAll()},e.prototype.dispose=function(){this._clearTimer()},e.prototype._layout=function(t,e){var n,i,r,o,a=t.get(["label","position"]),s=t.get("orient"),l=function(t,e){return Vc(t.getBoxLayoutParams(),{width:e.getWidth(),height:e.getHeight()},t.get("padding"))}(t,e),u={horizontal:"center",vertical:(n=null==a||"auto"===a?"horizontal"===s?l.y+l.height/2=0||"+"===n?"left":"right"},h={horizontal:n>=0||"+"===n?"top":"bottom",vertical:"middle"},c={horizontal:0,vertical:wE/2},p="vertical"===s?l.height:l.width,d=t.getModel("controlStyle"),f=d.get("show",!0),g=f?d.get("itemSize"):0,y=f?d.get("itemGap"):0,v=g+y,m=t.get(["label","rotate"])||0;m=m*wE/180;var _=d.get("position",!0),x=f&&d.get("showPlayBtn",!0),b=f&&d.get("showPrevBtn",!0),w=f&&d.get("showNextBtn",!0),S=0,M=p;"left"===_||"bottom"===_?(x&&(i=[0,0],S+=v),b&&(r=[S,0],S+=v),w&&(o=[M-g,0],M-=v)):(x&&(i=[M-g,0],M-=v),b&&(r=[0,0],S+=v),w&&(o=[M-g,0],M-=v));var I=[S,M];return t.get("inverse")&&I.reverse(),{viewRect:l,mainLength:p,orient:s,rotation:c[s],labelRotation:m,labelPosOpt:n,labelAlign:t.get(["label","align"])||u[s],labelBaseline:t.get(["label","verticalAlign"])||t.get(["label","baseline"])||h[s],playPosition:i,prevBtnPosition:r,nextBtnPosition:o,axisExtent:I,controlSize:g,controlGap:y}},e.prototype._position=function(t,e){var n=this._mainGroup,i=this._labelGroup,r=t.viewRect;if("vertical"===t.orient){var o=[1,0,0,1,0,0],a=r.x,s=r.y+r.height;Un(o,o,[-a,-s]),Xn(o,o,-wE/2),Un(o,o,[a,s]),(r=r.clone()).applyTransform(o)}var l=y(r),u=y(n.getBoundingRect()),h=y(i.getBoundingRect()),c=[n.x,n.y],p=[i.x,i.y];p[0]=c[0]=l[0][0];var d,f=t.labelPosOpt;null==f||H(f)?(v(c,u,l,1,d="+"===f?0:1),v(p,h,l,1,1-d)):(v(c,u,l,1,d=f>=0?0:1),p[1]=c[1]+f);function g(t){t.originX=l[0][0]-t.x,t.originY=l[1][0]-t.y}function y(t){return[[t.x,t.x+t.width],[t.y,t.y+t.height]]}function v(t,e,n,i,r){t[i]+=n[i][r]-e[i][r]}n.setPosition(c),i.setPosition(p),n.rotation=i.rotation=t.rotation,g(n),g(i)},e.prototype._createAxis=function(t,e){var n=e.getData(),i=e.get("axisType"),r=function(t,e){if(e=e||t.get("type"))switch(e){case"category":return new $_({ordinalMeta:t.getCategories(),extent:[1/0,-1/0]});case"time":return new dx({locale:t.ecModel.getLocaleModel(),useUTC:t.ecModel.get("useUTC")});default:return new Q_}}(e,i);r.getTicks=function(){return n.mapArray(["value"],(function(t){return{value:t}}))};var o=n.getDataExtent("value");r.setExtent(o[0],o[1]),r.niceTicks();var a=new bE("value",r,t.axisExtent,i);return a.model=e,a},e.prototype._createGroup=function(t){var e=this[t]=new Ei;return this.group.add(e),e},e.prototype._renderAxisLine=function(t,e,n,i){var r=n.getExtent();if(i.get(["lineStyle","show"])){var o=new uu({shape:{x1:r[0],y1:0,x2:r[1],y2:0},style:I({lineCap:"round"},i.getModel("lineStyle").getLineStyle()),silent:!0,z2:1});e.add(o);var a=this._progressLine=new uu({shape:{x1:r[0],x2:this._currentPointer?this._currentPointer.x:r[0],y1:0,y2:0},style:T({lineCap:"round",lineWidth:o.style.lineWidth},i.getModel(["progress","lineStyle"]).getLineStyle()),silent:!0,z2:1});e.add(a)}},e.prototype._renderAxisTick=function(t,e,n,i){var r=this,o=i.getData(),a=n.scale.getTicks();this._tickSymbols=[],P(a,(function(t){var a=n.dataToCoord(t.value),s=o.getItemModel(t.value),l=s.getModel("itemStyle"),u=s.getModel(["emphasis","itemStyle"]),h=s.getModel(["progress","itemStyle"]),c={x:a,y:0,onclick:V(r._changeTimeline,r,t.value)},p=IE(s,l,e,c);p.ensureState("emphasis").style=u.getItemStyle(),p.ensureState("progress").style=h.getItemStyle(),sl(p);var d=_s(p);s.get("tooltip")?(d.dataIndex=t.value,d.dataModel=i):d.dataIndex=d.dataModel=null,r._tickSymbols.push(p)}))},e.prototype._renderAxisLabel=function(t,e,n,i){var r=this;if(n.getLabelModel().get("show")){var o=i.getData(),a=n.getViewLabels();this._tickLabels=[],P(a,(function(i){var a=i.tickValue,s=o.getItemModel(a),l=s.getModel("label"),u=s.getModel(["emphasis","label"]),h=s.getModel(["progress","label"]),c=n.dataToCoord(i.tickValue),p=new cs({x:c,y:0,rotation:t.labelRotation-t.rotation,onclick:V(r._changeTimeline,r,a),silent:!1,style:ph(l,{text:i.formattedLabel,align:t.labelAlign,verticalAlign:t.labelBaseline})});p.ensureState("emphasis").style=ph(u),p.ensureState("progress").style=ph(h),e.add(p),sl(p),SE(p).dataIndex=a,r._tickLabels.push(p)}))}},e.prototype._renderControl=function(t,e,n,i){var r=t.controlSize,o=t.rotation,a=i.getModel("controlStyle").getItemStyle(),s=i.getModel(["emphasis","controlStyle"]).getItemStyle(),l=i.getPlayState(),u=i.get("inverse",!0);function h(t,n,l,u){if(t){var h=Ii(tt(i.get(["controlStyle",n+"BtnSize"]),r),r),c=function(t,e,n,i){var r=i.style,o=eh(t.get(["controlStyle",e]),i||{},new gi(n[0],n[1],n[2],n[3]));r&&o.setStyle(r);return o}(i,n+"Icon",[0,-h/2,h,h],{x:t[0],y:t[1],originX:r/2,originY:0,rotation:u?-o:0,rectHover:!0,style:a,onclick:l});c.ensureState("emphasis").style=s,e.add(c),sl(c)}}h(t.nextBtnPosition,"next",V(this._changeTimeline,this,u?"-":"+")),h(t.prevBtnPosition,"prev",V(this._changeTimeline,this,u?"+":"-")),h(t.playPosition,l?"stop":"play",V(this._handlePlayClick,this,!l),!0)},e.prototype._renderCurrentPointer=function(t,e,n,i){var r=i.getData(),o=i.getCurrentIndex(),a=r.getItemModel(o).getModel("checkpointStyle"),s=this,l={onCreate:function(t){t.draggable=!0,t.drift=V(s._handlePointerDrag,s),t.ondragend=V(s._handlePointerDragend,s),TE(t,s._progressLine,o,n,i,!0)},onUpdate:function(t){TE(t,s._progressLine,o,n,i)}};this._currentPointer=IE(a,a,this._mainGroup,{},this._currentPointer,l)},e.prototype._handlePlayClick=function(t){this._clearTimer(),this.api.dispatchAction({type:"timelinePlayChange",playState:t,from:this.uid})},e.prototype._handlePointerDrag=function(t,e,n){this._clearTimer(),this._pointerChangeTimeline([n.offsetX,n.offsetY])},e.prototype._handlePointerDragend=function(t){this._pointerChangeTimeline([t.offsetX,t.offsetY],!0)},e.prototype._pointerChangeTimeline=function(t,e){var n=this._toAxisCoord(t)[0],i=qi(this._axis.getExtent().slice());n>i[1]&&(n=i[1]),n=0&&(a[o]=+a[o].toFixed(c)),[a,h]}var zE={min:B(NE,"min"),max:B(NE,"max"),average:B(NE,"average"),median:B(NE,"median")};function EE(t,e){var n=t.getData(),i=t.coordinateSystem;if(e&&!function(t){return!isNaN(parseFloat(t.x))&&!isNaN(parseFloat(t.y))}(e)&&!F(e.coord)&&i){var r=i.dimensions,o=VE(e,n,i,t);if((e=w(e)).type&&zE[e.type]&&o.baseAxis&&o.valueAxis){var a=D(r,o.baseAxis.dim),s=D(r,o.valueAxis.dim),l=zE[e.type](n,o.baseDataDim,o.valueDataDim,a,s);e.coord=l[0],e.value=l[1]}else{for(var u=[null!=e.xAxis?e.xAxis:e.radiusAxis,null!=e.yAxis?e.yAxis:e.angleAxis],h=0;h<2;h++)zE[u[h]]&&(u[h]=GE(n,n.mapDimension(r[h]),u[h]));e.coord=u}}return e}function VE(t,e,n,i){var r={};return null!=t.valueIndex||null!=t.valueDim?(r.valueDataDim=null!=t.valueIndex?e.getDimension(t.valueIndex):t.valueDim,r.valueAxis=n.getAxis(function(t,e){var n=t.getData(),i=n.dimensions;e=n.getDimension(e);for(var r=0;r=0&&"number"==typeof l&&(l=+l.toFixed(Math.min(f,20))),p.coord[h]=d.coord[h]=l,r=[p,d,{type:a,valueIndex:i.valueIndex,value:l}]}else r=[]}var g=[EE(t,r[0]),EE(t,r[1]),I({},r[2])];return g[2].type=g[2].type||null,S(g[2],g[0]),S(g[2],g[1]),g};function qE(t){return!isNaN(t)&&!isFinite(t)}function KE(t,e,n,i){var r=1-t,o=i.dimensions[t];return qE(e[r])&&qE(n[r])&&e[t]===n[t]&&i.getAxis(o).containData(e[t])}function $E(t,e){if("cartesian2d"===t.type){var n=e[0].coord,i=e[1].coord;if(n&&i&&(KE(1,n,i,t)||KE(0,n,i,t)))return!0}return BE(t,e[0])&&BE(t,e[1])}function JE(t,e,n,i,r){var o,a=i.coordinateSystem,s=t.getItemModel(e),l=Zi(s.get("x"),r.getWidth()),u=Zi(s.get("y"),r.getHeight());if(isNaN(l)||isNaN(u)){if(i.getMarkerPosition)o=i.getMarkerPosition(t.getValues(t.dimensions,e));else{var h=a.dimensions,c=t.get(h[0],e),p=t.get(h[1],e);o=a.dataToPoint([c,p])}if(Nw(a,"cartesian2d")){var d=a.getAxis("x"),f=a.getAxis("y");h=a.dimensions;qE(t.get(h[0],e))?o[0]=d.toGlobalCoord(d.getExtent()[n?0:1]):qE(t.get(h[1],e))&&(o[1]=f.toGlobalCoord(f.getExtent()[n?0:1]))}isNaN(l)||(o[0]=l),isNaN(u)||(o[1]=u)}else o=[l,u];t.setItemLayout(e,o)}var QE=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=OE.getMarkerModelFromSeries(t,"markLine");if(e){var i=e.getData(),r=ZE(e).from,o=ZE(e).to;r.each((function(e){JE(r,e,!0,t,n),JE(o,e,!1,t,n)})),i.each((function(t){i.setItemLayout(t,[r.getItemLayout(t),o.getItemLayout(t)])})),this.markerGroupMap.get(t.id).updateLayout()}}),this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,new VC);this.group.add(l.group);var u=function(t,e,n){var i;i=t?O(t&&t.dimensions,(function(t){return T({name:t},e.getData().getDimensionInfo(e.getData().mapDimension(t))||{})})):[{name:"value",type:"float"}];var r=new L_(i,n),o=new L_(i,n),a=new L_([],n),s=O(n.get("data"),B(jE,e,t,n));t&&(s=N(s,B($E,t)));var l=t?FE:function(t){return t.value};return r.initData(O(s,(function(t){return t[0]})),null,l),o.initData(O(s,(function(t){return t[1]})),null,l),a.initData(O(s,(function(t){return t[2]}))),a.hasItemOption=!0,{from:r,to:o,line:a}}(r,t,e),h=u.from,c=u.to,p=u.line;ZE(e).from=h,ZE(e).to=c,e.setData(p);var d=e.get("symbol"),f=e.get("symbolSize"),g=e.get("symbolRotate"),y=e.get("symbolOffset");function v(e,n,r){var o=e.getItemModel(n);JE(e,n,r,t,i);var s=o.getModel("itemStyle").getItemStyle();null==s.fill&&(s.fill=mg(a,"color")),e.setItemVisual(n,{symbolKeepAspect:o.get("symbolKeepAspect"),symbolOffset:tt(o.get("symbolOffset"),y[r?0:1]),symbolRotate:tt(o.get("symbolRotate",!0),g[r?0:1]),symbolSize:tt(o.get("symbolSize"),f[r?0:1]),symbol:tt(o.get("symbol",!0),d[r?0:1]),style:s})}F(d)||(d=[d,d]),F(f)||(f=[f,f]),F(g)||(g=[g,g]),F(y)||(y=[y,y]),u.from.each((function(t){v(h,t,!0),v(c,t,!1)})),p.each((function(t){var e=p.getItemModel(t).getModel("lineStyle").getLineStyle();p.setItemLayout(t,[h.getItemLayout(t),c.getItemLayout(t)]),null==e.stroke&&(e.stroke=h.getItemVisual(t,"style").fill),p.setItemVisual(t,{fromSymbolKeepAspect:h.getItemVisual(t,"symbolKeepAspect"),fromSymbolOffset:h.getItemVisual(t,"symbolOffset"),fromSymbolRotate:h.getItemVisual(t,"symbolRotate"),fromSymbolSize:h.getItemVisual(t,"symbolSize"),fromSymbol:h.getItemVisual(t,"symbol"),toSymbolKeepAspect:c.getItemVisual(t,"symbolKeepAspect"),toSymbolOffset:c.getItemVisual(t,"symbolOffset"),toSymbolRotate:c.getItemVisual(t,"symbolRotate"),toSymbolSize:c.getItemVisual(t,"symbolSize"),toSymbol:c.getItemVisual(t,"symbol"),style:e})})),l.updateData(p),u.line.eachItemGraphicEl((function(t,n){t.traverse((function(t){_s(t).dataModel=e}))})),this.markKeep(l),l.group.silent=e.get("silent")||t.get("silent")},e.type="markLine",e}(WE);var tV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.createMarkerModelFromSeries=function(t,n,i){return new e(t,n,i)},e.type="markArea",e.defaultOption={zlevel:0,z:1,tooltip:{trigger:"item"},animation:!1,label:{show:!0,position:"top"},itemStyle:{borderWidth:0},emphasis:{label:{show:!0,position:"top"}}},e}(OE),eV=kr(),nV=function(t,e,n,i){var r=EE(t,i[0]),o=EE(t,i[1]),a=r.coord,s=o.coord;a[0]=Q(a[0],-1/0),a[1]=Q(a[1],-1/0),s[0]=Q(s[0],1/0),s[1]=Q(s[1],1/0);var l=M([{},r,o]);return l.coord=[r.coord,o.coord],l.x0=r.x,l.y0=r.y,l.x1=o.x,l.y1=o.y,l};function iV(t){return!isNaN(t)&&!isFinite(t)}function rV(t,e,n,i){var r=1-t;return iV(e[r])&&iV(n[r])}function oV(t,e){var n=e.coord[0],i=e.coord[1];return!!(Nw(t,"cartesian2d")&&n&&i&&(rV(1,n,i)||rV(0,n,i)))||(BE(t,{coord:n,x:e.x0,y:e.y0})||BE(t,{coord:i,x:e.x1,y:e.y1}))}function aV(t,e,n,i,r){var o,a=i.coordinateSystem,s=t.getItemModel(e),l=Zi(s.get(n[0]),r.getWidth()),u=Zi(s.get(n[1]),r.getHeight());if(isNaN(l)||isNaN(u)){if(i.getMarkerPosition)o=i.getMarkerPosition(t.getValues(n,e));else{var h=[d=t.get(n[0],e),f=t.get(n[1],e)];a.clampData&&a.clampData(h,h),o=a.dataToPoint(h,!0)}if(Nw(a,"cartesian2d")){var c=a.getAxis("x"),p=a.getAxis("y"),d=t.get(n[0],e),f=t.get(n[1],e);iV(d)?o[0]=c.toGlobalCoord(c.getExtent()["x0"===n[0]?0:1]):iV(f)&&(o[1]=p.toGlobalCoord(p.getExtent()["y0"===n[1]?0:1]))}isNaN(l)||(o[0]=l),isNaN(u)||(o[1]=u)}else o=[l,u];return o}var sV=[["x0","y0"],["x1","y0"],["x1","y1"],["x0","y1"]],lV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.updateTransform=function(t,e,n){e.eachSeries((function(t){var e=OE.getMarkerModelFromSeries(t,"markArea");if(e){var i=e.getData();i.each((function(e){var r=O(sV,(function(r){return aV(i,e,r,t,n)}));i.setItemLayout(e,r),i.getItemGraphicEl(e).setShape("points",r)}))}}),this)},e.prototype.renderSeries=function(t,e,n,i){var r=t.coordinateSystem,o=t.id,a=t.getData(),s=this.markerGroupMap,l=s.get(o)||s.set(o,{group:new Ei});this.group.add(l.group),this.markKeep(l);var u=function(t,e,n){var i,r,o=["x0","y0","x1","y1"];t?(i=O(t&&t.dimensions,(function(t){var n=e.getData();return T({name:t},n.getDimensionInfo(n.mapDimension(t))||{})})),r=new L_(O(o,(function(t,e){return{name:t,type:i[e%2].type}})),n)):r=new L_(i=[{name:"value",type:"float"}],n);var a=O(n.get("data"),B(nV,e,t,n));t&&(a=N(a,B(oV,t)));var s=t?function(t,e,n,i){return t.coord[Math.floor(i/2)][i%2]}:function(t){return t.value};return r.initData(a,null,s),r.hasItemOption=!0,r}(r,t,e);e.setData(u),u.each((function(e){var n=O(sV,(function(n){return aV(u,e,n,t,i)})),o=r.getAxis("x").scale,s=r.getAxis("y").scale,l=o.getExtent(),h=s.getExtent(),c=[o.parse(u.get("x0",e)),o.parse(u.get("x1",e))],p=[s.parse(u.get("y0",e)),s.parse(u.get("y1",e))];qi(c),qi(p);var d=!!(l[0]>c[1]||l[1]p[1]||h[1]=0},e.prototype.getOrient=function(){return"vertical"===this.get("orient")?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},e.type="legend.plain",e.dependencies=["series"],e.defaultOption={zlevel:0,z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,symbolRotate:"inherit",inactiveColor:"#ccc",inactiveBorderColor:"#ccc",inactiveBorderWidth:"auto",itemStyle:{color:"inherit",opacity:"inherit",decal:"inherit",shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,borderColor:"inherit",borderWidth:"auto",borderCap:"inherit",borderJoin:"inherit",borderDashOffset:"inherit",borderMiterLimit:"inherit"},lineStyle:{width:"auto",color:"inherit",inactiveColor:"#ccc",inactiveWidth:2,opacity:"inherit",type:"inherit",cap:"inherit",join:"inherit",dashOffset:"inherit",miterLimit:"inherit",shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0},textStyle:{color:"#333"},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:" sans-serif",color:"#666",borderWidth:1,borderColor:"#666"},emphasis:{selectorLabel:{show:!0,color:"#eee",backgroundColor:"#666"}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1}},e}(Xc),hV=B,cV=P,pV=Ei,dV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.newlineDisabled=!1,n}return n(e,t),e.prototype.init=function(){this.group.add(this._contentGroup=new pV),this.group.add(this._selectorGroup=new pV),this._isFirstRender=!0},e.prototype.getContentGroup=function(){return this._contentGroup},e.prototype.getSelectorGroup=function(){return this._selectorGroup},e.prototype.render=function(t,e,n){var i=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),t.get("show",!0)){var r=t.get("align"),o=t.get("orient");r&&"auto"!==r||(r="right"===t.get("left")&&"vertical"===o?"right":"left");var a=t.get("selector",!0),s=t.get("selectorPosition",!0);!a||s&&"auto"!==s||(s="horizontal"===o?"end":"start"),this.renderInner(r,t,e,n,a,o,s);var l=t.getBoxLayoutParams(),u={width:n.getWidth(),height:n.getHeight()},h=t.get("padding"),c=Vc(l,u,h),p=this.layoutInner(t,r,c,i,a,s),d=Vc(T({width:p.width,height:p.height},l),u,h);this.group.x=d.x-p.x,this.group.y=d.y-p.y,this.group.markRedraw(),this.group.add(this._backgroundEl=BN(p,t))}},e.prototype.resetInner=function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl),this.getSelectorGroup().removeAll()},e.prototype.renderInner=function(t,e,n,i,r,o,a){var s=this.getContentGroup(),l=ht(),u=e.get("selectedMode"),h=[];n.eachRawSeries((function(t){!t.get("legendHoverLink")&&h.push(t.id)})),cV(e.getData(),(function(r,o){var a=r.get("name");if(!this.newlineDisabled&&(""===a||"\n"===a)){var c=new pV;return c.newline=!0,void s.add(c)}var p=n.getSeriesByName(a)[0];if(!l.get(a)){if(p){var d=p.getData(),f=d.getVisual("legendLineStyle")||{},g=d.getVisual("legendIcon"),y=d.getVisual("style");this._createItem(p,a,o,r,e,t,f,y,g,u).on("click",hV(fV,a,null,i,h)).on("mouseover",hV(yV,p.name,null,i,h)).on("mouseout",hV(vV,p.name,null,i,h)),l.set(a,!0)}else n.eachRawSeries((function(n){if(!l.get(a)&&n.legendVisualProvider){var s=n.legendVisualProvider;if(!s.containName(a))return;var c=s.indexOfName(a),p=s.getItemVisual(c,"style"),d=s.getItemVisual(c,"legendIcon"),f=He(p.fill);f&&0===f[3]&&(f[3]=.2,p.fill=Je(f,"rgba")),this._createItem(n,a,o,r,e,t,{},p,d,u).on("click",hV(fV,null,a,i,h)).on("mouseover",hV(yV,null,a,i,h)).on("mouseout",hV(vV,null,a,i,h)),l.set(a,!0)}}),this);0}}),this),r&&this._createSelector(r,e,i,o,a)},e.prototype._createSelector=function(t,e,n,i,r){var o=this.getSelectorGroup();cV(t,(function(t){var i=t.type,r=new cs({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){n.dispatchAction({type:"all"===i?"legendAllSelect":"legendInverseSelect"})}});o.add(r),hh(r,{normal:e.getModel("selectorLabel"),emphasis:e.getModel(["emphasis","selectorLabel"])},{defaultText:t.title}),sl(r)}))},e.prototype._createItem=function(t,e,n,i,r,o,a,s,l,u){var h=t.visualDrawType,c=r.get("itemWidth"),p=r.get("itemHeight"),d=r.isSelected(e),f=i.get("symbolRotate"),g=i.get("icon"),y=function(t,e,n,i,r,o,a){for(var s=e.getModel("itemStyle"),l=Lh.concat([["decal"]]),u={},h=0;h0?2:0:u[p]=y}var d=e.getModel("lineStyle"),f=Ch.concat([["inactiveColor"],["inactiveWidth"]]),g={};for(h=0;h0?2:0:g[p]=y}if("auto"===u.fill&&(u.fill=r.fill),"auto"===u.stroke&&(u.stroke=r.fill),"auto"===g.stroke&&(g.stroke=r.fill),!a){var v=e.get("inactiveBorderWidth"),m=u[t.indexOf("empty")>-1?"fill":"stroke"];u.lineWidth="auto"===v?r.lineWidth>0&&m?2:0:u.lineWidth,u.fill=e.get("inactiveColor"),u.stroke=e.get("inactiveBorderColor"),g.stroke=n.get("inactiveColor"),g.lineWidth=n.get("inactiveWidth")}return{itemStyle:u,lineStyle:g}}(l=g||l||"roundRect",i,r.getModel("lineStyle"),a,s,h,d),v=new pV,m=i.getModel("textStyle");if("function"!=typeof t.getLegendIcon||g&&"inherit"!==g){var _="inherit"===g&&t.getData().getVisual("symbol")?"inherit"===f?t.getData().getVisual("symbolRotate"):f:0;v.add(function(t){var e=t.icon||"roundRect",n=fy(e,0,0,t.itemWidth,t.itemHeight,t.itemStyle.fill);n.setStyle(t.itemStyle),n.rotation=(t.iconRotate||0)*Math.PI/180,n.setOrigin([t.itemWidth/2,t.itemHeight/2]),e.indexOf("empty")>-1&&(n.style.stroke=n.style.fill,n.style.fill="#fff",n.style.lineWidth=2);return n}({itemWidth:c,itemHeight:p,icon:l,iconRotate:_,itemStyle:y.itemStyle,lineStyle:y.lineStyle}))}else v.add(t.getLegendIcon({itemWidth:c,itemHeight:p,icon:l,iconRotate:f,itemStyle:y.itemStyle,lineStyle:y.lineStyle}));var x="left"===o?c+5:-5,b=o,w=r.get("formatter"),S=e;"string"==typeof w&&w?S=w.replace("{name}",null!=e?e:""):"function"==typeof w&&(S=w(e));var M=i.get("inactiveColor");v.add(new cs({style:ph(m,{text:S,x:x,y:p/2,fill:d?m.getTextColor():M,align:b,verticalAlign:"middle"})}));var I=new ls({shape:v.getBoundingRect(),invisible:!0}),T=i.getModel("tooltip");return T.get("show")&&oh({el:I,componentModel:r,itemName:e,itemTooltipOption:T.option}),v.add(I),v.eachChild((function(t){t.silent=!0})),I.silent=!u,this.getContentGroup().add(v),sl(v),v.__legendDataIndex=n,v},e.prototype.layoutInner=function(t,e,n,i,r,o){var a=this.getContentGroup(),s=this.getSelectorGroup();Ec(t.get("orient"),a,t.get("itemGap"),n.width,n.height);var l=a.getBoundingRect(),u=[-l.x,-l.y];if(s.markRedraw(),a.markRedraw(),r){Ec("horizontal",s,t.get("selectorItemGap",!0));var h=s.getBoundingRect(),c=[-h.x,-h.y],p=t.get("selectorButtonGap",!0),d=t.getOrient().index,f=0===d?"width":"height",g=0===d?"height":"width",y=0===d?"y":"x";"end"===o?c[d]+=l[f]+p:u[d]+=h[f]+p,c[1-d]+=l[g]/2-h[g]/2,s.x=c[0],s.y=c[1],a.x=u[0],a.y=u[1];var v={x:0,y:0};return v[f]=l[f]+p+h[f],v[g]=Math.max(l[g],h[g]),v[y]=Math.min(0,h[y]+c[1-d]),v}return a.x=u[0],a.y=u[1],this.group.getBoundingRect()},e.prototype.remove=function(){this.getContentGroup().removeAll(),this._isFirstRender=!0},e.type="legend.plain",e}(wf);function fV(t,e,n,i){vV(t,e,n,i),n.dispatchAction({type:"legendToggleSelect",name:null!=t?t:e}),yV(t,e,n,i)}function gV(t){for(var e,n=t.getZr().storage.getDisplayList(),i=0,r=n.length;in[r],f=[-c.x,-c.y];e||(f[i]=l[s]);var g=[0,0],y=[-p.x,-p.y],v=tt(t.get("pageButtonGap",!0),t.get("itemGap",!0));d&&("end"===t.get("pageButtonPosition",!0)?y[i]+=n[r]-p[r]:g[i]+=p[r]+v);y[1-i]+=c[o]/2-p[o]/2,l.setPosition(f),u.setPosition(g),h.setPosition(y);var m={x:0,y:0};if(m[r]=d?n[r]:c[r],m[o]=Math.max(c[o],p[o]),m[a]=Math.min(0,p[a]+y[1-i]),u.__rectSize=n[r],d){var _={x:0,y:0};_[r]=Math.max(n[r]-p[r]-v,0),_[o]=m[o],u.setClipPath(new ls({shape:_})),u.__rectSize=_[r]}else h.eachChild((function(t){t.attr({invisible:!0,silent:!0})}));var x=this._getPageInfo(t);return null!=x.pageIndex&&Hu(l,{x:x.contentPosition[0],y:x.contentPosition[1]},d?t:null),this._updatePageInfoView(t,x),m},e.prototype._pageGo=function(t,e,n){var i=this._getPageInfo(e)[t];null!=i&&n.dispatchAction({type:"legendScroll",scrollDataIndex:i,legendId:e.id})},e.prototype._updatePageInfoView=function(t,e){var n=this._controllerGroup;P(["pagePrev","pageNext"],(function(i){var r=null!=e[i+"DataIndex"],o=n.childOfName(i);o&&(o.setStyle("fill",r?t.get("pageIconColor",!0):t.get("pageIconInactiveColor",!0)),o.cursor=r?"pointer":"default")}));var i=n.childOfName("pageText"),r=t.get("pageFormatter"),o=e.pageIndex,a=null!=o?o+1:0,s=e.pageCount;i&&r&&i.setStyle("text",H(r)?r.replace("{current}",null==a?"":a+"").replace("{total}",null==s?"":s+""):r({current:a,total:s}))},e.prototype._getPageInfo=function(t){var e=t.get("scrollDataIndex",!0),n=this.getContentGroup(),i=this._containerGroup.__rectSize,r=t.getOrient().index,o=MV[r],a=IV[r],s=this._findTargetItemIndex(e),l=n.children(),u=l[s],h=l.length,c=h?1:0,p={contentPosition:[n.x,n.y],pageCount:c,pageIndex:c-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!u)return p;var d=m(u);p.contentPosition[r]=-d.s;for(var f=s+1,g=d,y=d,v=null;f<=h;++f)(!(v=m(l[f]))&&y.e>g.s+i||v&&!_(v,g.s))&&(g=y.i>g.i?y:v)&&(null==p.pageNextDataIndex&&(p.pageNextDataIndex=g.i),++p.pageCount),y=v;for(f=s-1,g=d,y=d,v=null;f>=-1;--f)(v=m(l[f]))&&_(y,v.s)||!(g.i=e&&t.s<=e+i}},e.prototype._findTargetItemIndex=function(t){return this._showController?(this.getContentGroup().eachChild((function(i,r){var o=i.__legendDataIndex;null==n&&null!=o&&(n=r),o===t&&(e=r)})),null!=e?e:n):0;var e,n},e.type="legend.scroll",e}(dV);function CV(t){Qm(xV),t.registerComponentModel(bV),t.registerComponentView(TV),function(t){t.registerAction("legendScroll","legendscroll",(function(t,e){var n=t.scrollDataIndex;null!=n&&e.eachComponent({mainType:"legend",subType:"scroll",query:t},(function(t){t.setScrollDataIndex(n)}))}))}(t)}var DV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="dataZoom.inside",e.defaultOption=zh(wN.defaultOption,{disabled:!1,zoomLock:!1,zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!1,preventDefaultMouseMove:!0}),e}(wN),AV=kr();function LV(t,e,n){AV(t).coordSysRecordMap.each((function(t){var i=t.dataZoomInfoMap.get(e.uid);i&&(i.getRange=n)}))}function kV(t,e){if(e){t.removeKey(e.model.uid);var n=e.controller;n&&n.dispose()}}function PV(t,e){t.dispatchAction({type:"dataZoom",animation:{easing:"cubicOut",duration:100},batch:e})}function OV(t,e,n,i){return t.coordinateSystem.containPoint([n,i])}function RV(t){t.registerProcessor(t.PRIORITY.PROCESSOR.FILTER,(function(t,e){var n=AV(e),i=n.coordSysRecordMap||(n.coordSysRecordMap=ht());i.each((function(t){t.dataZoomInfoMap=null})),t.eachComponent({mainType:"dataZoom",subType:"inside"},(function(t){P(xN(t).infoList,(function(n){var r=n.model.uid,o=i.get(r)||i.set(r,function(t,e){var n={model:e,containsPoint:B(OV,e),dispatchAction:B(PV,t),dataZoomInfoMap:null,controller:null},i=n.controller=new WM(t.getZr());return P(["pan","zoom","scrollMove"],(function(t){i.on(t,(function(e){var i=[];n.dataZoomInfoMap.each((function(r){if(e.isAvailableBehavior(r.model.option)){var o=(r.getRange||{})[t],a=o&&o(r.dzReferCoordSysInfo,n.model.mainType,n.controller,e);!r.model.get("disabled",!0)&&a&&i.push({dataZoomId:r.model.id,start:a[0],end:a[1]})}})),i.length&&n.dispatchAction(i)}))})),n}(e,n.model));(o.dataZoomInfoMap||(o.dataZoomInfoMap=ht())).set(t.uid,{dzReferCoordSysInfo:n,model:t,getRange:null})}))})),i.each((function(t){var e,n=t.controller,r=t.dataZoomInfoMap;if(r){var o=r.keys()[0];null!=o&&(e=r.get(o))}if(e){var a=function(t){var e,n="type_",i={type_true:2,type_move:1,type_false:0,type_undefined:-1},r=!0;return t.each((function(t){var o=t.model,a=!o.get("disabled",!0)&&(!o.get("zoomLock",!0)||"move");i[n+a]>i[n+e]&&(e=a),r=r&&o.get("preventDefaultMouseMove",!0)})),{controlType:e,opt:{zoomOnMouseWheel:!0,moveOnMouseMove:!0,moveOnMouseWheel:!0,preventDefaultMouseMove:!!r}}}(r);n.enable(a.controlType,a.opt),n.setPointerChecker(t.containsPoint),zf(t,"dispatchAction",e.model.get("throttle",!0),"fixRate")}else kV(i,t)}))}))}var NV=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.type="dataZoom.inside",e}return n(e,t),e.prototype.render=function(e,n,i){t.prototype.render.apply(this,arguments),e.noTarget()?this._clear():(this.range=e.getPercentRange(),LV(i,e,{pan:V(zV.pan,this),zoom:V(zV.zoom,this),scrollMove:V(zV.scrollMove,this)}))},e.prototype.dispose=function(){this._clear(),t.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){!function(t,e){for(var n=AV(t).coordSysRecordMap,i=n.keys(),r=0;r0?s.pixelStart+s.pixelLength-s.pixel:s.pixel-s.pixelStart)/s.pixelLength*(o[1]-o[0])+o[0],u=Math.max(1/i.scale,0);o[0]=(o[0]-l)*u+l,o[1]=(o[1]-l)*u+l;var h=this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();return PD(0,o,[0,100],0,h.minSpan,h.maxSpan),this.range=o,r[0]!==o[0]||r[1]!==o[1]?o:void 0}},pan:EV((function(t,e,n,i,r,o){var a=VV[i]([o.oldX,o.oldY],[o.newX,o.newY],e,r,n);return a.signal*(t[1]-t[0])*a.pixel/a.pixelLength})),scrollMove:EV((function(t,e,n,i,r,o){return VV[i]([0,0],[o.scrollDelta,o.scrollDelta],e,r,n).signal*(t[1]-t[0])*o.scrollDelta}))};function EV(t){return function(e,n,i,r){var o=this.range,a=o.slice(),s=e.axisModels[0];if(s)return PD(t(a,s,e,n,i,r),a,[0,100],"all"),this.range=a,o[0]!==a[0]||o[1]!==a[1]?a:void 0}}var VV={grid:function(t,e,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem.getRect();return t=t||[0,0],"x"===o.dim?(a.pixel=e[0]-t[0],a.pixelLength=s.width,a.pixelStart=s.x,a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=s.height,a.pixelStart=s.y,a.signal=o.inverse?-1:1),a},polar:function(t,e,n,i,r){var o=n.axis,a={},s=r.model.coordinateSystem,l=s.getRadiusAxis().getExtent(),u=s.getAngleAxis().getExtent();return t=t?s.pointToCoord(t):[0,0],e=s.pointToCoord(e),"radiusAxis"===n.mainType?(a.pixel=e[0]-t[0],a.pixelLength=l[1]-l[0],a.pixelStart=l[0],a.signal=o.inverse?1:-1):(a.pixel=e[1]-t[1],a.pixelLength=u[1]-u[0],a.pixelStart=u[0],a.signal=o.inverse?-1:1),a},singleAxis:function(t,e,n,i,r){var o=n.axis,a=r.model.coordinateSystem.getRect(),s={};return t=t||[0,0],"horizontal"===o.orient?(s.pixel=e[0]-t[0],s.pixelLength=a.width,s.pixelStart=a.x,s.signal=o.inverse?1:-1):(s.pixel=e[1]-t[1],s.pixelLength=a.height,s.pixelStart=a.y,s.signal=o.inverse?-1:1),s}};function BV(t){PN(t),t.registerComponentModel(DV),t.registerComponentView(NV),RV(t)}var FV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.type="dataZoom.slider",e.layoutMode="box",e.defaultOption=zh(wN.defaultOption,{show:!0,right:"ph",top:"ph",width:"ph",height:"ph",left:null,bottom:null,borderColor:"#d2dbee",borderRadius:3,backgroundColor:"rgba(47,69,84,0)",dataBackground:{lineStyle:{color:"#d2dbee",width:.5},areaStyle:{color:"#d2dbee",opacity:.2}},selectedDataBackground:{lineStyle:{color:"#8fb0f7",width:.5},areaStyle:{color:"#8fb0f7",opacity:.2}},fillerColor:"rgba(135,175,274,0.2)",handleIcon:"path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z",handleSize:"100%",handleStyle:{color:"#fff",borderColor:"#ACB8D1"},moveHandleSize:7,moveHandleIcon:"path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z",moveHandleStyle:{color:"#D2DBEE",opacity:.7},showDetail:!0,showDataShadow:"auto",realtime:!0,zoomLock:!1,textStyle:{color:"#6E7079"},brushSelect:!0,brushStyle:{color:"rgba(135,175,274,0.15)"},emphasis:{handleStyle:{borderColor:"#8FB0F7"},moveHandleStyle:{color:"#8FB0F7"}}}),e}(wN),GV=ls,HV="horizontal",WV="vertical",UV=["line","bar","candlestick","scatter"],XV={easing:"cubicOut",duration:100},YV=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._displayables={},n}return n(e,t),e.prototype.init=function(t,e){this.api=e,this._onBrush=V(this._onBrush,this),this._onBrushEnd=V(this._onBrushEnd,this)},e.prototype.render=function(e,n,i,r){if(t.prototype.render.apply(this,arguments),zf(this,"_dispatchZoomAction",e.get("throttle"),"fixRate"),this._orient=e.getOrient(),!1!==e.get("show")){if(e.noTarget())return this._clear(),void this.group.removeAll();r&&"dataZoom"===r.type&&r.from===this.uid||this._buildView(),this._updateView()}else this.group.removeAll()},e.prototype.dispose=function(){this._clear(),t.prototype.dispose.apply(this,arguments)},e.prototype._clear=function(){var t,e,n;(n=(t=this)[e="_dispatchZoomAction"])&&n[Pf]&&(t[e]=n[Pf]);var i=this.api.getZr();i.off("mousemove",this._onBrush),i.off("mouseup",this._onBrushEnd)},e.prototype._buildView=function(){var t=this.group;t.removeAll(),this._brushing=!1,this._displayables.brushRect=null,this._resetLocation(),this._resetInterval();var e=this._displayables.sliderGroup=new Ei;this._renderBackground(),this._renderHandle(),this._renderDataShadow(),t.add(e),this._positionGroup()},e.prototype._resetLocation=function(){var t=this.dataZoomModel,e=this.api,n=t.get("brushSelect")?7:0,i=this._findCoordRect(),r={width:e.getWidth(),height:e.getHeight()},o=this._orient===HV?{right:r.width-i.x-i.width,top:r.height-30-7-n,width:i.width,height:30}:{right:7,top:i.y,width:30,height:i.height},a=Hc(t.option);P(["right","top","width","height"],(function(t){"ph"===a[t]&&(a[t]=o[t])}));var s=Vc(a,r);this._location={x:s.x,y:s.y},this._size=[s.width,s.height],this._orient===WV&&this._size.reverse()},e.prototype._positionGroup=function(){var t=this.group,e=this._location,n=this._orient,i=this.dataZoomModel.getFirstTargetAxisModel(),r=i&&i.get("inverse"),o=this._displayables.sliderGroup,a=(this._dataShadowInfo||{}).otherAxisInverse;o.attr(n!==HV||r?n===HV&&r?{scaleY:a?1:-1,scaleX:-1}:n!==WV||r?{scaleY:a?-1:1,scaleX:-1,rotation:Math.PI/2}:{scaleY:a?-1:1,scaleX:1,rotation:Math.PI/2}:{scaleY:a?1:-1,scaleX:1});var s=t.getBoundingRect([o]);t.x=e.x-s.x,t.y=e.y-s.y,t.markRedraw()},e.prototype._getViewExtent=function(){return[0,this._size[0]]},e.prototype._renderBackground=function(){var t=this.dataZoomModel,e=this._size,n=this._displayables.sliderGroup,i=t.get("brushSelect");n.add(new GV({silent:!0,shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:t.get("backgroundColor")},z2:-40}));var r=new GV({shape:{x:0,y:0,width:e[0],height:e[1]},style:{fill:"transparent"},z2:0,onclick:V(this._onClickPanel,this)}),o=this.api.getZr();i?(r.on("mousedown",this._onBrushStart,this),r.cursor="crosshair",o.on("mousemove",this._onBrush),o.on("mouseup",this._onBrushEnd)):(o.off("mousemove",this._onBrush),o.off("mouseup",this._onBrushEnd)),n.add(r)},e.prototype._renderDataShadow=function(){var t=this._dataShadowInfo=this._prepareDataShadowInfo();if(this._displayables.dataShadowSegs=[],t){var e=this._size,n=t.series,i=n.getRawData(),r=n.getShadowDim?n.getShadowDim():t.otherDim;if(null!=r){var o=i.getDataExtent(r),a=.3*(o[1]-o[0]);o=[o[0]-a,o[1]+a];var s,l=[0,e[1]],u=[0,e[0]],h=[[e[0],0],[0,0]],c=[],p=u[1]/(i.count()-1),d=0,f=Math.round(i.count()/e[0]);i.each([r],(function(t,e){if(f>0&&e%f)d+=p;else{var n=null==t||isNaN(t)||""===t,i=n?0:Yi(t,o,l,!0);n&&!s&&e?(h.push([h[h.length-1][0],0]),c.push([c[c.length-1][0],0])):!n&&s&&(h.push([d,0]),c.push([d,0])),h.push([d,i]),c.push([d,i]),d+=p,s=n}}));for(var g=this.dataZoomModel,y=0;y<3;y++){var v=m(1===y);this._displayables.sliderGroup.add(v),this._displayables.dataShadowSegs.push(v)}}}function m(t){var e=g.getModel(t?"selectedDataBackground":"dataBackground"),n=new Ei,i=new ru({shape:{points:h},segmentIgnoreThreshold:1,style:e.getModel("areaStyle").getAreaStyle(),silent:!0,z2:-20}),r=new au({shape:{points:c},segmentIgnoreThreshold:1,style:e.getModel("lineStyle").getLineStyle(),silent:!0,z2:-19});return n.add(i),n.add(r),n}},e.prototype._prepareDataShadowInfo=function(){var t=this.dataZoomModel,e=t.get("showDataShadow");if(!1!==e){var n,i=this.ecModel;return t.eachTargetAxis((function(r,o){P(t.getAxisProxy(r,o).getTargetSeriesModels(),(function(t){if(!(n||!0!==e&&D(UV,t.get("type"))<0)){var a,s=i.getComponent(mN(r),o).axis,l={x:"y",y:"x",radius:"angle",angle:"radius"}[r],u=t.coordinateSystem;null!=l&&u.getOtherAxis&&(a=u.getOtherAxis(s).inverse),l=t.getData().mapDimension(l),n={thisAxis:s,series:t,thisDim:r,otherDim:l,otherAxisInverse:a}}}),this)}),this),n}},e.prototype._renderHandle=function(){var t=this.group,e=this._displayables,n=e.handles=[null,null],i=e.handleLabels=[null,null],r=this._displayables.sliderGroup,o=this._size,a=this.dataZoomModel,s=this.api,l=a.get("borderRadius")||0,u=a.get("brushSelect"),h=e.filler=new GV({silent:u,style:{fill:a.get("fillerColor")},textConfig:{position:"inside"}});r.add(h),r.add(new GV({silent:!0,subPixelOptimize:!0,shape:{x:0,y:0,width:o[0],height:o[1],r:l},style:{stroke:a.get("dataBackgroundColor")||a.get("borderColor"),lineWidth:1,fill:"rgba(0,0,0,0)"}})),P([0,1],(function(e){var o=a.get("handleIcon");!cy[o]&&o.indexOf("path://")<0&&o.indexOf("image://")<0&&(o="path://"+o);var s=fy(o,-1,0,2,2,null,!0);s.attr({cursor:ZV(this._orient),draggable:!0,drift:V(this._onDragMove,this,e),ondragend:V(this._onDragEnd,this),onmouseover:V(this._showDataInfo,this,!0),onmouseout:V(this._showDataInfo,this,!1),z2:5});var l=s.getBoundingRect(),u=a.get("handleSize");this._handleHeight=Zi(u,this._size[1]),this._handleWidth=l.width/l.height*this._handleHeight,s.setStyle(a.getModel("handleStyle").getItemStyle()),s.style.strokeNoScale=!0,s.rectHover=!0,s.ensureState("emphasis").style=a.getModel(["emphasis","handleStyle"]).getItemStyle(),sl(s);var h=a.get("handleColor");null!=h&&(s.style.fill=h),r.add(n[e]=s);var c=a.getModel("textStyle");t.add(i[e]=new cs({silent:!0,invisible:!0,style:ph(c,{x:0,y:0,text:"",verticalAlign:"middle",align:"center",fill:c.getTextColor(),font:c.getFont()}),z2:10}))}),this);var c=h;if(u){var p=Zi(a.get("moveHandleSize"),o[1]),d=e.moveHandle=new ls({style:a.getModel("moveHandleStyle").getItemStyle(),silent:!0,shape:{r:[0,0,2,2],y:o[1]-.5,height:p}}),f=.8*p,g=e.moveHandleIcon=fy(a.get("moveHandleIcon"),-f/2,-f/2,f,f,"#fff",!0);g.silent=!0,g.y=o[1]+p/2-.5,d.ensureState("emphasis").style=a.getModel(["emphasis","moveHandleStyle"]).getItemStyle();var y=Math.min(o[1]/2,Math.max(p,10));(c=e.moveZone=new ls({invisible:!0,shape:{y:o[1]-y,height:p+y}})).on("mouseover",(function(){s.enterEmphasis(d)})).on("mouseout",(function(){s.leaveEmphasis(d)})),r.add(d),r.add(g),r.add(c)}c.attr({draggable:!0,cursor:ZV(this._orient),drift:V(this._onDragMove,this,"all"),ondragstart:V(this._showDataInfo,this,!0),ondragend:V(this._onDragEnd,this),onmouseover:V(this._showDataInfo,this,!0),onmouseout:V(this._showDataInfo,this,!1)})},e.prototype._resetInterval=function(){var t=this._range=this.dataZoomModel.getPercentRange(),e=this._getViewExtent();this._handleEnds=[Yi(t[0],[0,100],e,!0),Yi(t[1],[0,100],e,!0)]},e.prototype._updateInterval=function(t,e){var n=this.dataZoomModel,i=this._handleEnds,r=this._getViewExtent(),o=n.findRepresentativeAxisProxy().getMinMaxSpan(),a=[0,100];PD(e,i,r,n.get("zoomLock")?"all":t,null!=o.minSpan?Yi(o.minSpan,a,r,!0):null,null!=o.maxSpan?Yi(o.maxSpan,a,r,!0):null);var s=this._range,l=this._range=qi([Yi(i[0],r,a,!0),Yi(i[1],r,a,!0)]);return!s||s[0]!==l[0]||s[1]!==l[1]},e.prototype._updateView=function(t){var e=this._displayables,n=this._handleEnds,i=qi(n.slice()),r=this._size;P([0,1],(function(t){var i=e.handles[t],o=this._handleHeight;i.attr({scaleX:o/2,scaleY:o/2,x:n[t]+(t?-1:1),y:r[1]/2-o/2})}),this),e.filler.setShape({x:i[0],y:0,width:i[1]-i[0],height:r[1]});var o={x:i[0],width:i[1]-i[0]};e.moveHandle&&(e.moveHandle.setShape(o),e.moveZone.setShape(o),e.moveZone.getBoundingRect(),e.moveHandleIcon&&e.moveHandleIcon.attr("x",o.x+o.width/2));for(var a=e.dataShadowSegs,s=[0,i[0],i[1],r[0]],l=0;le[0]||n[1]<0||n[1]>e[1])){var i=this._handleEnds,r=(i[0]+i[1])/2,o=this._updateInterval("all",n[0]-r);this._updateView(),o&&this._dispatchZoomAction(!1)}},e.prototype._onBrushStart=function(t){var e=t.offsetX,n=t.offsetY;this._brushStart=new ai(e,n),this._brushing=!0,this._brushStartTime=+new Date},e.prototype._onBrushEnd=function(t){if(this._brushing){var e=this._displayables.brushRect;if(this._brushing=!1,e){e.attr("ignore",!0);var n=e.shape;if(!(+new Date-this._brushStartTime<200&&Math.abs(n.width)<5)){var i=this._getViewExtent(),r=[0,100];this._range=qi([Yi(n.x,i,r,!0),Yi(n.x+n.width,i,r,!0)]),this._handleEnds=[n.x,n.x+n.width],this._updateView(),this._dispatchZoomAction(!1)}}}},e.prototype._onBrush=function(t){this._brushing&&(ee(t.event),this._updateBrushRect(t.offsetX,t.offsetY))},e.prototype._updateBrushRect=function(t,e){var n=this._displayables,i=this.dataZoomModel,r=n.brushRect;r||(r=n.brushRect=new GV({silent:!0,style:i.getModel("brushStyle").getItemStyle()}),n.sliderGroup.add(r)),r.attr("ignore",!1);var o=this._brushStart,a=this._displayables.sliderGroup,s=a.transformCoordToLocal(t,e),l=a.transformCoordToLocal(o.x,o.y),u=this._size;s[0]=Math.max(Math.min(u[0],s[0]),0),r.setShape({x:l[0],y:0,width:s[0]-l[0],height:u[1]})},e.prototype._dispatchZoomAction=function(t){var e=this._range;this.api.dispatchAction({type:"dataZoom",from:this.uid,dataZoomId:this.dataZoomModel.id,animation:t?XV:null,start:e[0],end:e[1]})},e.prototype._findCoordRect=function(){var t,e=xN(this.dataZoomModel).infoList;if(!t&&e.length){var n=e[0].model.coordinateSystem;t=n.getRect&&n.getRect()}if(!t){var i=this.api.getWidth(),r=this.api.getHeight();t={x:.2*i,y:.2*r,width:.6*i,height:.6*r}}return t},e.type="dataZoom.slider",e}(IN);function ZV(t){return"vertical"===t?"ns-resize":"ew-resize"}function jV(t){t.registerComponentModel(FV),t.registerComponentView(YV),PN(t)}var qV=function(t,e,n){var i=w((KV[t]||{})[e]);return n&&F(i)?i[i.length-1]:i},KV={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]}},$V=TT.mapVisual,JV=TT.eachVisual,QV=F,tB=P,eB=qi,nB=Yi,iB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n.stateList=["inRange","outOfRange"],n.replacableOptionKeys=["inRange","outOfRange","target","controller","color"],n.layoutMode={type:"box",ignoreSize:!0},n.dataBound=[-1/0,1/0],n.targetVisuals={},n.controllerVisuals={},n}return n(e,t),e.prototype.init=function(t,e,n){this.mergeDefaultAndTheme(t,n)},e.prototype.optionUpdated=function(t,e){var n=this.option;a.canvasSupported||(n.realtime=!1),!e&&Jz(n,t,this.replacableOptionKeys),this.textStyleModel=this.getModel("textStyle"),this.resetItemSize(),this.completeVisualOption()},e.prototype.resetVisual=function(t){var e=this.stateList;t=V(t,this),this.controllerVisuals=$z(this.option.controller,e,t),this.targetVisuals=$z(this.option.target,e,t)},e.prototype.getItemSymbol=function(){return null},e.prototype.getTargetSeriesIndices=function(){var t=this.option.seriesIndex,e=[];return null==t||"all"===t?this.ecModel.eachSeries((function(t,n){e.push(n)})):e=xr(t),e},e.prototype.eachTargetSeries=function(t,e){P(this.getTargetSeriesIndices(),(function(n){var i=this.ecModel.getSeriesByIndex(n);i&&t.call(e,i)}),this)},e.prototype.isTargetSeries=function(t){var e=!1;return this.eachTargetSeries((function(n){n===t&&(e=!0)})),e},e.prototype.formatValueText=function(t,e,n){var i,r=this.option,o=r.precision,a=this.dataBound,s=r.formatter;n=n||["<",">"],F(t)&&(t=t.slice(),i=!0);var l=e?t:i?[u(t[0]),u(t[1])]:u(t);return H(s)?s.replace("{value}",i?l[0]:l).replace("{value2}",i?l[1]:l):G(s)?i?s(t[0],t[1]):s(t):i?t[0]===a[0]?n[0]+" "+l[1]:t[1]===a[1]?n[1]+" "+l[0]:l[0]+" - "+l[1]:l;function u(t){return t===a[0]?"min":t===a[1]?"max":(+t).toFixed(Math.min(o,20))}},e.prototype.resetExtent=function(){var t=this.option,e=eB([t.min,t.max]);this._dataExtent=e},e.prototype.getDataDimension=function(t){var e=this.option.dimension,n=t.dimensions;if(null!=e||n.length){if(null!=e)return t.getDimension(e);for(var i=t.dimensions,r=i.length-1;r>=0;r--){var o=i[r];if(!t.getDimensionInfo(o).isCalculationCoord)return o}}},e.prototype.getExtent=function(){return this._dataExtent.slice()},e.prototype.completeVisualOption=function(){var t=this.ecModel,e=this.option,n={inRange:e.inRange,outOfRange:e.outOfRange},i=e.target||(e.target={}),r=e.controller||(e.controller={});S(i,n),S(r,n);var o=this.isCategory();function a(n){QV(e.color)&&!n.inRange&&(n.inRange={color:e.color.slice().reverse()}),n.inRange=n.inRange||{color:t.get("gradientColor")}}a.call(this,i),a.call(this,r),function(t,e,n){var i=t[e],r=t[n];i&&!r&&(r=t[n]={},tB(i,(function(t,e){if(TT.isValidType(e)){var n=qV(e,"inactive",o);null!=n&&(r[e]=n,"color"!==e||r.hasOwnProperty("opacity")||r.hasOwnProperty("colorAlpha")||(r.opacity=[0,0]))}})))}.call(this,i,"inRange","outOfRange"),function(t){var e=(t.inRange||{}).symbol||(t.outOfRange||{}).symbol,n=(t.inRange||{}).symbolSize||(t.outOfRange||{}).symbolSize,i=this.get("inactiveColor"),r=this.getItemSymbol()||"roundRect";tB(this.stateList,(function(a){var s=this.itemSize,l=t[a];l||(l=t[a]={color:o?i:[i]}),null==l.symbol&&(l.symbol=e&&w(e)||(o?r:[r])),null==l.symbolSize&&(l.symbolSize=n&&w(n)||(o?s[0]:[s[0],s[0]])),l.symbol=$V(l.symbol,(function(t){return"none"===t?r:t}));var u=l.symbolSize;if(null!=u){var h=-1/0;JV(u,(function(t){t>h&&(h=t)})),l.symbolSize=$V(u,(function(t){return nB(t,[0,h],[0,s[0]],!0)}))}}),this)}.call(this,r)},e.prototype.resetItemSize=function(){this.itemSize=[parseFloat(this.get("itemWidth")),parseFloat(this.get("itemHeight"))]},e.prototype.isCategory=function(){return!!this.option.categories},e.prototype.setSelected=function(t){},e.prototype.getSelected=function(){return null},e.prototype.getValueState=function(t){return null},e.prototype.getVisualMeta=function(t){return null},e.type="visualMap",e.dependencies=["series"],e.defaultOption={show:!0,zlevel:0,z:4,seriesIndex:"all",min:0,max:200,left:0,right:null,top:null,bottom:0,itemWidth:null,itemHeight:null,inverse:!1,orient:"vertical",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",contentColor:"#5793f3",inactiveColor:"#aaa",borderWidth:0,padding:5,textGap:10,precision:0,textStyle:{color:"#333"}},e}(Xc),rB=[20,140],oB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.optionUpdated=function(e,n){t.prototype.optionUpdated.apply(this,arguments),this.resetExtent(),this.resetVisual((function(t){t.mappingMethod="linear",t.dataExtent=this.getExtent()})),this._resetRange()},e.prototype.resetItemSize=function(){t.prototype.resetItemSize.apply(this,arguments);var e=this.itemSize;(null==e[0]||isNaN(e[0]))&&(e[0]=rB[0]),(null==e[1]||isNaN(e[1]))&&(e[1]=rB[1])},e.prototype._resetRange=function(){var t=this.getExtent(),e=this.option.range;!e||e.auto?(t.auto=1,this.option.range=t):F(e)&&(e[0]>e[1]&&e.reverse(),e[0]=Math.max(e[0],t[0]),e[1]=Math.min(e[1],t[1]))},e.prototype.completeVisualOption=function(){t.prototype.completeVisualOption.apply(this,arguments),P(this.stateList,(function(t){var e=this.option.controller[t].symbolSize;e&&e[0]!==e[1]&&(e[0]=e[1]/3)}),this)},e.prototype.setSelected=function(t){this.option.range=t.slice(),this._resetRange()},e.prototype.getSelected=function(){var t=this.getExtent(),e=qi((this.get("range")||[]).slice());return e[0]>t[1]&&(e[0]=t[1]),e[1]>t[1]&&(e[1]=t[1]),e[0]=n[1]||t<=e[1])?"inRange":"outOfRange"},e.prototype.findTargetDataIndices=function(t){var e=[];return this.eachTargetSeries((function(n){var i=[],r=n.getData();r.each(this.getDataDimension(r),(function(e,n){t[0]<=e&&e<=t[1]&&i.push(n)}),this),e.push({seriesId:n.id,dataIndex:i})}),this),e},e.prototype.getVisualMeta=function(t){var e=aB(this,"outOfRange",this.getExtent()),n=aB(this,"inRange",this.option.range.slice()),i=[];function r(e,n){i.push({value:e,color:t(e,n)})}for(var o=0,a=0,s=n.length,l=e.length;at[1])break;n.push({color:this.getControllerVisual(o,"color",e),offset:r/100})}return n.push({color:this.getControllerVisual(t[1],"color",e),offset:1}),n},e.prototype._createBarPoints=function(t,e){var n=this.visualMapModel.itemSize;return[[n[0]-e[0],t[0]],[n[0],t[0]],[n[0],t[1]],[n[0]-e[1],t[1]]]},e.prototype._createBarGroup=function(t){var e=this._orient,n=this.visualMapModel.get("inverse");return new Ei("horizontal"!==e||n?"horizontal"===e&&n?{scaleX:"bottom"===t?-1:1,rotation:-Math.PI/2}:"vertical"!==e||n?{scaleX:"left"===t?1:-1}:{scaleX:"left"===t?1:-1,scaleY:-1}:{scaleX:"bottom"===t?1:-1,rotation:Math.PI/2})},e.prototype._updateHandle=function(t,e){if(this._useHandle){var n=this._shapes,i=this.visualMapModel,r=n.handleThumbs,o=n.handleLabels,a=i.itemSize,s=i.getExtent();pB([0,1],(function(l){var u=r[l];u.setStyle("fill",e.handlesColor[l]),u.y=t[l];var h=cB(t[l],[0,a[1]],s,!0),c=this.getControllerVisual(h,"symbolSize");u.scaleX=u.scaleY=c/a[0],u.x=a[0]-c/2;var p=qu(n.handleLabelPoints[l],ju(u,this.group));o[l].setStyle({x:p[0],y:p[1],text:i.formatValueText(this._dataInterval[l]),verticalAlign:"middle",align:"vertical"===this._orient?this._applyTransform("left",n.mainGroup):"center"})}),this)}},e.prototype._showIndicator=function(t,e,n,i){var r=this.visualMapModel,o=r.getExtent(),a=r.itemSize,s=[0,a[1]],l=this._shapes,u=l.indicator;if(u){u.attr("invisible",!1);var h=this.getControllerVisual(t,"color",{convertOpacityToAlpha:!0}),c=this.getControllerVisual(t,"symbolSize"),p=cB(t,o,s,!0),d=a[0]-c/2,f={x:u.x,y:u.y};u.y=p,u.x=d;var g=qu(l.indicatorLabelPoint,ju(u,this.group)),y=l.indicatorLabel;y.attr("invisible",!1);var v=this._applyTransform("left",l.mainGroup),m="horizontal"===this._orient;y.setStyle({text:(n||"")+r.formatValueText(e),verticalAlign:m?v:"middle",align:m?"center":v});var _={x:d,y:p,style:{fill:h}},x={style:{x:g[0],y:g[1]}};if(r.ecModel.isAnimationEnabled()&&!this._firstShowIndicator){var b={duration:100,easing:"cubicInOut",additive:!0};u.x=f.x,u.y=f.y,u.animateTo(_,b),y.animateTo(x,b)}else u.attr(_),y.attr(x);this._firstShowIndicator=!1;var w=this._shapes.handleLabels;if(w)for(var S=0;Sr[1]&&(u[1]=1/0),e&&(u[0]===-1/0?this._showIndicator(l,u[1],"< ",a):u[1]===1/0?this._showIndicator(l,u[0],"> ",a):this._showIndicator(l,l,"≈ ",a));var h=this._hoverLinkDataIndices,c=[];(e||vB(n))&&(c=this._hoverLinkDataIndices=n.findTargetDataIndices(u));var p=function(t,e){var n={},i={};return r(t||[],n),r(e||[],i,n),[o(n),o(i)];function r(t,e,n){for(var i=0,r=t.length;i0:t.splitNumber>0)&&!t.calculable?"piecewise":"continuous"})),t.registerAction(_B,xB),P(bB,(function(e){t.registerVisual(t.PRIORITY.VISUAL.COMPONENT,e)})),t.registerPreprocessor(MB))}function DB(t){t.registerComponentModel(oB),t.registerComponentView(gB),CB(t)}var AB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n._pieceList=[],n}return n(e,t),e.prototype.optionUpdated=function(e,n){t.prototype.optionUpdated.apply(this,arguments),this.resetExtent();var i=this._mode=this._determineMode();this._pieceList=[],LB[this._mode].call(this,this._pieceList),this._resetSelected(e,n);var r=this.option.categories;this.resetVisual((function(t,e){"categories"===i?(t.mappingMethod="category",t.categories=w(r)):(t.dataExtent=this.getExtent(),t.mappingMethod="piecewise",t.pieceList=O(this._pieceList,(function(t){return t=w(t),"inRange"!==e&&(t.visual=null),t})))}))},e.prototype.completeVisualOption=function(){var e=this.option,n={},i=TT.listVisualTypes(),r=this.isCategory();function o(t,e,n){return t&&t[e]&&t[e].hasOwnProperty(n)}P(e.pieces,(function(t){P(i,(function(e){t.hasOwnProperty(e)&&(n[e]=1)}))})),P(n,(function(t,n){var i=!1;P(this.stateList,(function(t){i=i||o(e,t,n)||o(e.target,t,n)}),this),!i&&P(this.stateList,(function(t){(e[t]||(e[t]={}))[n]=qV(n,"inRange"===t?"active":"inactive",r)}))}),this),t.prototype.completeVisualOption.apply(this,arguments)},e.prototype._resetSelected=function(t,e){var n=this.option,i=this._pieceList,r=(e?n:t).selected||{};if(n.selected=r,P(i,(function(t,e){var n=this.getSelectedMapKey(t);r.hasOwnProperty(n)||(r[n]=!0)}),this),"single"===n.selectedMode){var o=!1;P(i,(function(t,e){var n=this.getSelectedMapKey(t);r[n]&&(o?r[n]=!1:o=!0)}),this)}},e.prototype.getItemSymbol=function(){return this.get("itemSymbol")},e.prototype.getSelectedMapKey=function(t){return"categories"===this._mode?t.value+"":t.index+""},e.prototype.getPieceList=function(){return this._pieceList},e.prototype._determineMode=function(){var t=this.option;return t.pieces&&t.pieces.length>0?"pieces":this.option.categories?"categories":"splitNumber"},e.prototype.setSelected=function(t){this.option.selected=w(t)},e.prototype.getValueState=function(t){var e=TT.findPieceIndex(t,this._pieceList);return null!=e&&this.option.selected[this.getSelectedMapKey(this._pieceList[e])]?"inRange":"outOfRange"},e.prototype.findTargetDataIndices=function(t){var e=[],n=this._pieceList;return this.eachTargetSeries((function(i){var r=[],o=i.getData();o.each(this.getDataDimension(o),(function(e,i){TT.findPieceIndex(e,n)===t&&r.push(i)}),this),e.push({seriesId:i.id,dataIndex:r})}),this),e},e.prototype.getRepresentValue=function(t){var e;if(this.isCategory())e=t.value;else if(null!=t.value)e=t.value;else{var n=t.interval||[];e=n[0]===-1/0&&n[1]===1/0?0:(n[0]+n[1])/2}return e},e.prototype.getVisualMeta=function(t){if(!this.isCategory()){var e=[],n=["",""],i=this,r=this._pieceList.slice();if(r.length){var o=r[0].interval[0];o!==-1/0&&r.unshift({interval:[-1/0,o]}),(o=r[r.length-1].interval[1])!==1/0&&r.push({interval:[o,1/0]})}else r.push({interval:[-1/0,1/0]});var a=-1/0;return P(r,(function(t){var e=t.interval;e&&(e[0]>a&&s([a,e[0]],"outOfRange"),s(e.slice()),a=e[1])}),this),{stops:e,outerColors:n}}function s(r,o){var a=i.getRepresentValue({interval:r});o||(o=i.getValueState(a));var s=t(a,o);r[0]===-1/0?n[0]=s:r[1]===1/0?n[1]=s:e.push({value:r[0],color:s},{value:r[1],color:s})}},e.type="visualMap.piecewise",e.defaultOption=zh(iB.defaultOption,{selected:null,minOpen:!1,maxOpen:!1,align:"auto",itemWidth:20,itemHeight:14,itemSymbol:"roundRect",pieces:null,categories:null,splitNumber:5,selectedMode:"multiple",itemGap:10,hoverLink:!0}),e}(iB),LB={splitNumber:function(t){var e=this.option,n=Math.min(e.precision,20),i=this.getExtent(),r=e.splitNumber;r=Math.max(parseInt(r,10),1),e.splitNumber=r;for(var o=(i[1]-i[0])/r;+o.toFixed(n)!==o&&n<5;)n++;e.precision=n,o=+o.toFixed(n),e.minOpen&&t.push({interval:[-1/0,i[0]],close:[0,0]});for(var a=0,s=i[0];a","≥"][e[0]]];t.text=t.text||this.formatValueText(null!=t.value?t.value:t.interval,!1,n)}),this)}};function kB(t,e){var n=t.inverse;("vertical"===t.orient?!n:n)&&e.reverse()}var PB=function(t){function e(){var n=null!==t&&t.apply(this,arguments)||this;return n.type=e.type,n}return n(e,t),e.prototype.doRender=function(){var t=this.group;t.removeAll();var e=this.visualMapModel,n=e.get("textGap"),i=e.textStyleModel,r=i.getFont(),o=i.getTextColor(),a=this._getItemAlign(),s=e.itemSize,l=this._getViewData(),u=l.endsText,h=Q(e.get("showLabel",!0),!u);u&&this._renderEndsText(t,u[0],s,h,a),P(l.viewPieceList,(function(i){var l=i.piece,u=new Ei;u.onclick=V(this._onItemClick,this,l),this._enableHoverLink(u,i.indexInModelPieceList);var c=e.getRepresentValue(l);if(this._createItemSymbol(u,c,[0,0,s[0],s[1]]),h){var p=this.visualMapModel.getValueState(c);u.add(new cs({style:{x:"right"===a?-n:s[0]+n,y:s[1]/2,text:l.text,verticalAlign:"middle",align:a,font:r,fill:o,opacity:"outOfRange"===p?.5:1}}))}t.add(u)}),this),u&&this._renderEndsText(t,u[1],s,h,a),Ec(e.get("orient"),t,e.get("itemGap")),this.renderBackground(t),this.positionGroup(t)},e.prototype._enableHoverLink=function(t,e){var n=this;t.on("mouseover",(function(){return i("highlight")})).on("mouseout",(function(){return i("downplay")}));var i=function(t){var i=n.visualMapModel;i.option.hoverLink&&n.api.dispatchAction({type:t,batch:hB(i.findTargetDataIndices(e),i)})}},e.prototype._getItemAlign=function(){var t=this.visualMapModel,e=t.option;if("vertical"===e.orient)return uB(t,this.api,t.itemSize);var n=e.align;return n&&"auto"!==n||(n="left"),n},e.prototype._renderEndsText=function(t,e,n,i,r){if(e){var o=new Ei,a=this.visualMapModel.textStyleModel;o.add(new cs({style:{x:i?"right"===r?n[0]:0:n[0]/2,y:n[1]/2,verticalAlign:"middle",align:i?r:"center",text:e,font:a.getFont(),fill:a.getTextColor()}})),t.add(o)}},e.prototype._getViewData=function(){var t=this.visualMapModel,e=O(t.getPieceList(),(function(t,e){return{piece:t,indexInModelPieceList:e}})),n=t.get("text"),i=t.get("orient"),r=t.get("inverse");return("horizontal"===i?r:!r)?e.reverse():n&&(n=n.slice().reverse()),{viewPieceList:e,endsText:n}},e.prototype._createItemSymbol=function(t,e,n){t.add(fy(this.getControllerVisual(e,"symbol"),n[0],n[1],n[2],n[3],this.getControllerVisual(e,"color")))},e.prototype._onItemClick=function(t){var e=this.visualMapModel,n=e.option,i=w(n.selected),r=e.getSelectedMapKey(t);"single"===n.selectedMode?(i[r]=!0,P(i,(function(t,e){i[e]=e===r}))):i[r]=!i[r],this.api.dispatchAction({type:"selectDataRange",from:this.uid,visualMapId:this.visualMapModel.id,selected:i})},e.type="visualMap.piecewise",e}(sB);function OB(t){t.registerComponentModel(AB),t.registerComponentView(PB),CB(t)}var RB={label:{enabled:!0},decal:{show:!1}},NB=kr(),zB={};function EB(t,e){var n=t.getModel("aria");if(n.get("enabled")){var i=w(RB);S(i.label,t.getLocaleModel().get("aria"),!1),S(n.option,i,!1),function(){if(n.getModel("decal").get("show")){var e=ht();t.eachSeries((function(t){if(t.useColorPaletteOnData){var n=e.get(t.type);n||(n={},e.set(t.type,n)),NB(t).scope=n}})),t.eachRawSeries((function(e){if(!t.isSeriesFiltered(e))if("function"!=typeof e.enableAriaDecal){var n=e.getData();if(e.useColorPaletteOnData){var i=e.getRawData(),r={},o=NB(e).scope;n.each((function(t){var e=n.getRawIndex(t);r[e]=t}));var a=i.count();i.each((function(t){var s=r[t],l=i.getName(t)||t+"",h=xp(e.ecModel,l,o,a),c=n.getItemVisual(s,"decal");n.setItemVisual(s,"decal",u(c,h))}))}else{var s=xp(e.ecModel,e.name,zB,t.getSeriesCount()),l=n.getVisual("decal");n.setVisual("decal",u(l,s))}}else e.enableAriaDecal();function u(t,e){var n=t?I(I({},e),t):e;return n.dirty=!0,n}}))}}(),function(){var i=t.getLocaleModel().get("aria"),o=n.getModel("label");if(o.option=T(o.option,i),!o.get("enabled"))return;var a=e.getZr().dom;if(o.get("description"))return void a.setAttribute("aria-label",o.get("description"));var s,l=t.getSeriesCount(),u=o.get(["data","maxCount"])||10,h=o.get(["series","maxCount"])||10,c=Math.min(l,h);if(l<1)return;var p=function(){var e=t.get("title");e&&e.length&&(e=e[0]);return e&&e.text}();if(p){var d=o.get(["general","withTitle"]);s=r(d,{title:p})}else s=o.get(["general","withoutTitle"]);var f=[],g=l>1?o.get(["series","multiple","prefix"]):o.get(["series","single","prefix"]);s+=r(g,{seriesCount:l}),t.eachSeries((function(e,n){if(n1?o.get(["series","multiple",a]):o.get(["series","single",a]),{seriesId:e.seriesIndex,seriesName:e.get("name"),seriesType:(_=e.subType,t.getLocaleModel().get(["series","typeNames"])[_]||"自定义图")});var s=e.getData();if(s.count()>u)i+=r(o.get(["data","partialData"]),{displayCnt:u});else i+=o.get(["data","allData"]);for(var h=[],p=0;p":"gt",">=":"gte","=":"eq","!=":"ne","<>":"ne"},FB=function(){function t(t){if(null==(this._condVal=H(t)?new RegExp(t):$(t)?t:null)){var e="";0,vr(e)}}return t.prototype.evaluate=function(t){var e=typeof t;return"string"===e?this._condVal.test(t):"number"===e&&this._condVal.test(t+"")},t}(),GB=function(){function t(){}return t.prototype.evaluate=function(){return this.value},t}(),HB=function(){function t(){}return t.prototype.evaluate=function(){for(var t=this.children,e=0;e { + const fnBody = value !== null && value !== undefined ? value.toString() : '' + + if (value instanceof Function || typeof value === 'function') { + if (fnBody.indexOf('function') !== 0) { + return ARROWFN_PREFIX + fnBody + } + + return fnBody + } + + if (value instanceof RegExp) { + return REGEXP_PREFIX + fnBody + } + + return value + } + + const reviver = (key, value) => { + if (typeof value !== 'string') { + return value + } + else if (value.indexOf('function') === 0) { + /* eslint-disable-next-line no-eval */ + return eval(`(${value})`) + } + else { + return value + } + + if ( + value.indexOf(ARROWFN_PREFIX) === 0 || + value.indexOf(REGEXP_PREFIX) === 0 + ) { + /* eslint-disable-next-line no-eval */ + return eval(value.slice(8)) + } + } + + return { + stringify: (obj, space) => JSON.stringify(obj, replacer, space), + parse: str => JSON.parse(str, reviver) + } +}) diff --git a/IoTGateway/wwwroot/echarts/macarons.js b/IoTGateway/wwwroot/echarts/macarons.js new file mode 100644 index 0000000..f80fac6 --- /dev/null +++ b/IoTGateway/wwwroot/echarts/macarons.js @@ -0,0 +1,442 @@ + +(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; + } + echarts.registerTheme('macarons', { + "color": [ + "#2ec7c9", + "#b6a2de", + "#5ab1ef", + "#ffb980", + "#d87a80", + "#8d98b3", + "#e5cf0d", + "#97b552", + "#95706d", + "#dc69aa", + "#07a2a4", + "#9a7fd1", + "#588dd5", + "#f5994e", + "#c05050", + "#59678c", + "#c9ab00", + "#7eb00a", + "#6f5553", + "#c14089" + ], + "backgroundColor": "rgba(0,0,0,0)", + "textStyle": {}, + "title": { + "textStyle": { + "color": "#008acd" + }, + "subtextStyle": { + "color": "#aaaaaa" + } + }, + "line": { + "itemStyle": { + "borderWidth": 1 + }, + "lineStyle": { + "width": 2 + }, + "symbolSize": 3, + "symbol": "emptyCircle", + "smooth": true + }, + "radar": { + "itemStyle": { + "borderWidth": 1 + }, + "lineStyle": { + "width": 2 + }, + "symbolSize": 3, + "symbol": "emptyCircle", + "smooth": true + }, + "bar": { + "itemStyle": { + "barBorderWidth": 0, + "barBorderColor": "#ccc" + } + }, + "pie": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "scatter": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "boxplot": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "parallel": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "sankey": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "funnel": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "gauge": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "candlestick": { + "itemStyle": { + "color": "#d87a80", + "color0": "#2ec7c9", + "borderColor": "#d87a80", + "borderColor0": "#2ec7c9", + "borderWidth": 1 + } + }, + "graph": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "lineStyle": { + "width": 1, + "color": "#aaaaaa" + }, + "symbolSize": 3, + "symbol": "emptyCircle", + "smooth": true, + "color": [ + "#2ec7c9", + "#b6a2de", + "#5ab1ef", + "#ffb980", + "#d87a80", + "#8d98b3", + "#e5cf0d", + "#97b552", + "#95706d", + "#dc69aa", + "#07a2a4", + "#9a7fd1", + "#588dd5", + "#f5994e", + "#c05050", + "#59678c", + "#c9ab00", + "#7eb00a", + "#6f5553", + "#c14089" + ], + "label": { + "color": "#eeeeee" + } + }, + "map": { + "itemStyle": { + "areaColor": "#dddddd", + "borderColor": "#eeeeee", + "borderWidth": 0.5 + }, + "label": { + "color": "#d87a80" + }, + "emphasis": { + "itemStyle": { + "areaColor": "rgba(254,153,78,1)", + "borderColor": "#444", + "borderWidth": 1 + }, + "label": { + "color": "rgb(100,0,0)" + } + } + }, + "geo": { + "itemStyle": { + "areaColor": "#dddddd", + "borderColor": "#eeeeee", + "borderWidth": 0.5 + }, + "label": { + "color": "#d87a80" + }, + "emphasis": { + "itemStyle": { + "areaColor": "rgba(254,153,78,1)", + "borderColor": "#444", + "borderWidth": 1 + }, + "label": { + "color": "rgb(100,0,0)" + } + } + }, + "categoryAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#008acd" + } + }, + "axisTick": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#333" + }, + "splitLine": { + "show": false, + "lineStyle": { + "color": [ + "#eee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "valueAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#008acd" + } + }, + "axisTick": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#333" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eee" + ] + } + }, + "splitArea": { + "show": true, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "logAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#008acd" + } + }, + "axisTick": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#333" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eee" + ] + } + }, + "splitArea": { + "show": true, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "timeAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#008acd" + } + }, + "axisTick": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#333" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "toolbox": { + "iconStyle": { + "borderColor": "#2ec7c9" + }, + "emphasis": { + "iconStyle": { + "borderColor": "#18a4a6" + } + } + }, + "legend": { + "textStyle": { + "color": "#333333" + } + }, + "tooltip": { + "axisPointer": { + "lineStyle": { + "color": "#008acd", + "width": "1" + }, + "crossStyle": { + "color": "#008acd", + "width": "1" + } + } + }, + "timeline": { + "lineStyle": { + "color": "#008acd", + "width": 1 + }, + "itemStyle": { + "color": "#008acd", + "borderWidth": 1 + }, + "controlStyle": { + "color": "#008acd", + "borderColor": "#008acd", + "borderWidth": 0.5 + }, + "checkpointStyle": { + "color": "#2ec7c9", + "borderColor": "#2ec7c9" + }, + "label": { + "color": "#008acd" + }, + "emphasis": { + "itemStyle": { + "color": "#a9334c" + }, + "controlStyle": { + "color": "#008acd", + "borderColor": "#008acd", + "borderWidth": 0.5 + }, + "label": { + "color": "#008acd" + } + } + }, + "visualMap": { + "color": [ + "#5ab1ef", + "#e0ffff" + ] + }, + "dataZoom": { + "backgroundColor": "rgba(47,69,84,0)", + "dataBackgroundColor": "#efefff", + "fillerColor": "rgba(182,162,222,0.2)", + "handleColor": "#008acd", + "handleSize": "100%", + "textStyle": { + "color": "#333333" + } + }, + "markPoint": { + "label": { + "color": "#eeeeee" + }, + "emphasis": { + "label": { + "color": "#eeeeee" + } + } + } + }); +})); diff --git a/IoTGateway/wwwroot/echarts/roma.js b/IoTGateway/wwwroot/echarts/roma.js new file mode 100644 index 0000000..c6a8772 --- /dev/null +++ b/IoTGateway/wwwroot/echarts/roma.js @@ -0,0 +1,442 @@ + +(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; + } + echarts.registerTheme('roma', { + "color": [ + "#e01f54", + "#001852", + "#f5e8c8", + "#b8d2c7", + "#c6b38e", + "#a4d8c2", + "#f3d999", + "#d3758f", + "#dcc392", + "#2e4783", + "#82b6e9", + "#ff6347", + "#a092f1", + "#0a915d", + "#eaf889", + "#6699ff", + "#ff6666", + "#3cb371", + "#d5b158", + "#38b6b6" + ], + "backgroundColor": "rgba(0,0,0,0)", + "textStyle": {}, + "title": { + "textStyle": { + "color": "#333333" + }, + "subtextStyle": { + "color": "#aaaaaa" + } + }, + "line": { + "itemStyle": { + "borderWidth": 1 + }, + "lineStyle": { + "width": 2 + }, + "symbolSize": 4, + "symbol": "emptyCircle", + "smooth": false + }, + "radar": { + "itemStyle": { + "borderWidth": 1 + }, + "lineStyle": { + "width": 2 + }, + "symbolSize": 4, + "symbol": "emptyCircle", + "smooth": false + }, + "bar": { + "itemStyle": { + "barBorderWidth": 0, + "barBorderColor": "#ccc" + } + }, + "pie": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "scatter": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "boxplot": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "parallel": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "sankey": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "funnel": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "gauge": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "candlestick": { + "itemStyle": { + "color": "#e01f54", + "color0": "#001852", + "borderColor": "#f5e8c8", + "borderColor0": "#b8d2c7", + "borderWidth": 1 + } + }, + "graph": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "lineStyle": { + "width": 1, + "color": "#aaaaaa" + }, + "symbolSize": 4, + "symbol": "emptyCircle", + "smooth": false, + "color": [ + "#e01f54", + "#001852", + "#f5e8c8", + "#b8d2c7", + "#c6b38e", + "#a4d8c2", + "#f3d999", + "#d3758f", + "#dcc392", + "#2e4783", + "#82b6e9", + "#ff6347", + "#a092f1", + "#0a915d", + "#eaf889", + "#6699ff", + "#ff6666", + "#3cb371", + "#d5b158", + "#38b6b6" + ], + "label": { + "color": "#eeeeee" + } + }, + "map": { + "itemStyle": { + "areaColor": "#eeeeee", + "borderColor": "#444444", + "borderWidth": 0.5 + }, + "label": { + "color": "#000000" + }, + "emphasis": { + "itemStyle": { + "areaColor": "rgba(255,215,0,0.8)", + "borderColor": "#444", + "borderWidth": 1 + }, + "label": { + "color": "rgb(100,0,0)" + } + } + }, + "geo": { + "itemStyle": { + "areaColor": "#eeeeee", + "borderColor": "#444444", + "borderWidth": 0.5 + }, + "label": { + "color": "#000000" + }, + "emphasis": { + "itemStyle": { + "areaColor": "rgba(255,215,0,0.8)", + "borderColor": "#444", + "borderWidth": 1 + }, + "label": { + "color": "rgb(100,0,0)" + } + } + }, + "categoryAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisTick": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#333" + }, + "splitLine": { + "show": false, + "lineStyle": { + "color": [ + "#ccc" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "valueAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisTick": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#333" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#ccc" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "logAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisTick": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#333" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#ccc" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "timeAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisTick": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#333" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#ccc" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "toolbox": { + "iconStyle": { + "borderColor": "#999999" + }, + "emphasis": { + "iconStyle": { + "borderColor": "#666666" + } + } + }, + "legend": { + "textStyle": { + "color": "#333333" + } + }, + "tooltip": { + "axisPointer": { + "lineStyle": { + "color": "#cccccc", + "width": 1 + }, + "crossStyle": { + "color": "#cccccc", + "width": 1 + } + } + }, + "timeline": { + "lineStyle": { + "color": "#293c55", + "width": 1 + }, + "itemStyle": { + "color": "#293c55", + "borderWidth": 1 + }, + "controlStyle": { + "color": "#293c55", + "borderColor": "#293c55", + "borderWidth": 0.5 + }, + "checkpointStyle": { + "color": "#e43c59", + "borderColor": "#c23531" + }, + "label": { + "color": "#293c55" + }, + "emphasis": { + "itemStyle": { + "color": "#a9334c" + }, + "controlStyle": { + "color": "#293c55", + "borderColor": "#293c55", + "borderWidth": 0.5 + }, + "label": { + "color": "#293c55" + } + } + }, + "visualMap": { + "color": [ + "#e01f54", + "#e7dbc3" + ] + }, + "dataZoom": { + "backgroundColor": "rgba(47,69,84,0)", + "dataBackgroundColor": "rgba(47,69,84,0.3)", + "fillerColor": "rgba(167,183,204,0.4)", + "handleColor": "#a7b7cc", + "handleSize": "100%", + "textStyle": { + "color": "#333333" + } + }, + "markPoint": { + "label": { + "color": "#eeeeee" + }, + "emphasis": { + "label": { + "color": "#eeeeee" + } + } + } + }); +})); diff --git a/IoTGateway/wwwroot/echarts/vintage.js b/IoTGateway/wwwroot/echarts/vintage.js new file mode 100644 index 0000000..b44817b --- /dev/null +++ b/IoTGateway/wwwroot/echarts/vintage.js @@ -0,0 +1,423 @@ + +(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; + } + echarts.registerTheme('vintage', { + "color": [ + "#d87c7c", + "#919e8b", + "#d7ab82", + "#6e7074", + "#61a0a8", + "#efa18d", + "#787464", + "#cc7e63", + "#724e58", + "#4b565b" + ], + "backgroundColor": "rgba(254,248,239,1)", + "textStyle": {}, + "title": { + "textStyle": { + "color": "#333333" + }, + "subtextStyle": { + "color": "#aaaaaa" + } + }, + "line": { + "itemStyle": { + "borderWidth": 1 + }, + "lineStyle": { + "width": 2 + }, + "symbolSize": 4, + "symbol": "emptyCircle", + "smooth": false + }, + "radar": { + "itemStyle": { + "borderWidth": 1 + }, + "lineStyle": { + "width": 2 + }, + "symbolSize": 4, + "symbol": "emptyCircle", + "smooth": false + }, + "bar": { + "itemStyle": { + "barBorderWidth": 0, + "barBorderColor": "#ccc" + } + }, + "pie": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "scatter": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "boxplot": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "parallel": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "sankey": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "funnel": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "gauge": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "candlestick": { + "itemStyle": { + "color": "#c23531", + "color0": "#314656", + "borderColor": "#c23531", + "borderColor0": "#314656", + "borderWidth": 1 + } + }, + "graph": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "lineStyle": { + "width": 1, + "color": "#aaa" + }, + "symbolSize": 4, + "symbol": "emptyCircle", + "smooth": false, + "color": [ + "#d87c7c", + "#919e8b", + "#d7ab82", + "#6e7074", + "#61a0a8", + "#efa18d", + "#787464", + "#cc7e63", + "#724e58", + "#4b565b" + ], + "label": { + "color": "#eee" + } + }, + "map": { + "itemStyle": { + "areaColor": "#eeeeee", + "borderColor": "#444444", + "borderWidth": 0.5 + }, + "label": { + "color": "#000000" + }, + "emphasis": { + "itemStyle": { + "areaColor": "rgba(255,215,0,0.8)", + "borderColor": "#444444", + "borderWidth": 1 + }, + "label": { + "color": "rgb(100,0,0)" + } + } + }, + "geo": { + "itemStyle": { + "areaColor": "#eeeeee", + "borderColor": "#444444", + "borderWidth": 0.5 + }, + "label": { + "color": "#000000" + }, + "emphasis": { + "itemStyle": { + "areaColor": "rgba(255,215,0,0.8)", + "borderColor": "#444444", + "borderWidth": 1 + }, + "label": { + "color": "rgb(100,0,0)" + } + } + }, + "categoryAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisTick": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#333" + }, + "splitLine": { + "show": false, + "lineStyle": { + "color": [ + "#ccc" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "valueAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisTick": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#333" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#ccc" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "logAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisTick": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#333" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#ccc" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "timeAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisTick": { + "show": true, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#333" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#ccc" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.3)", + "rgba(200,200,200,0.3)" + ] + } + } + }, + "toolbox": { + "iconStyle": { + "borderColor": "#999999" + }, + "emphasis": { + "iconStyle": { + "borderColor": "#666666" + } + } + }, + "legend": { + "textStyle": { + "color": "#333333" + } + }, + "tooltip": { + "axisPointer": { + "lineStyle": { + "color": "#cccccc", + "width": 1 + }, + "crossStyle": { + "color": "#cccccc", + "width": 1 + } + } + }, + "timeline": { + "lineStyle": { + "color": "#293c55", + "width": 1 + }, + "itemStyle": { + "color": "#293c55", + "borderWidth": 1 + }, + "controlStyle": { + "color": "#293c55", + "borderColor": "#293c55", + "borderWidth": 0.5 + }, + "checkpointStyle": { + "color": "#e43c59", + "borderColor": "#c23531" + }, + "label": { + "color": "#293c55" + }, + "emphasis": { + "itemStyle": { + "color": "#a9334c" + }, + "controlStyle": { + "color": "#293c55", + "borderColor": "#293c55", + "borderWidth": 0.5 + }, + "label": { + "color": "#293c55" + } + } + }, + "visualMap": { + "color": [ + "#bf444c", + "#d88273", + "#f6efa6" + ] + }, + "dataZoom": { + "backgroundColor": "rgba(47,69,84,0)", + "dataBackgroundColor": "rgba(47,69,84,0.3)", + "fillerColor": "rgba(167,183,204,0.4)", + "handleColor": "#a7b7cc", + "handleSize": "100%", + "textStyle": { + "color": "#333333" + } + }, + "markPoint": { + "label": { + "color": "#eee" + }, + "emphasis": { + "label": { + "color": "#eee" + } + } + } + }); +})); diff --git a/IoTGateway/wwwroot/echarts/walden.js b/IoTGateway/wwwroot/echarts/walden.js new file mode 100644 index 0000000..b002fea --- /dev/null +++ b/IoTGateway/wwwroot/echarts/walden.js @@ -0,0 +1,414 @@ + +(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; + } + echarts.registerTheme('walden', { + "color": [ + "#3fb1e3", + "#6be6c1", + "#626c91", + "#a0a7e6", + "#c4ebad", + "#96dee8" + ], + "backgroundColor": "rgba(252,252,252,0)", + "textStyle": {}, + "title": { + "textStyle": { + "color": "#666666" + }, + "subtextStyle": { + "color": "#999999" + } + }, + "line": { + "itemStyle": { + "borderWidth": "2" + }, + "lineStyle": { + "width": "3" + }, + "symbolSize": "8", + "symbol": "emptyCircle", + "smooth": false + }, + "radar": { + "itemStyle": { + "borderWidth": "2" + }, + "lineStyle": { + "width": "3" + }, + "symbolSize": "8", + "symbol": "emptyCircle", + "smooth": false + }, + "bar": { + "itemStyle": { + "barBorderWidth": 0, + "barBorderColor": "#ccc" + } + }, + "pie": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "scatter": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "boxplot": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "parallel": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "sankey": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "funnel": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "gauge": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "candlestick": { + "itemStyle": { + "color": "#e6a0d2", + "color0": "transparent", + "borderColor": "#e6a0d2", + "borderColor0": "#3fb1e3", + "borderWidth": "2" + } + }, + "graph": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "lineStyle": { + "width": "1", + "color": "#cccccc" + }, + "symbolSize": "8", + "symbol": "emptyCircle", + "smooth": false, + "color": [ + "#3fb1e3", + "#6be6c1", + "#626c91", + "#a0a7e6", + "#c4ebad", + "#96dee8" + ], + "label": { + "color": "#ffffff" + } + }, + "map": { + "itemStyle": { + "areaColor": "#eeeeee", + "borderColor": "#aaaaaa", + "borderWidth": 0.5 + }, + "label": { + "color": "#ffffff" + }, + "emphasis": { + "itemStyle": { + "areaColor": "rgba(63,177,227,0.25)", + "borderColor": "#3fb1e3", + "borderWidth": 1 + }, + "label": { + "color": "#3fb1e3" + } + } + }, + "geo": { + "itemStyle": { + "areaColor": "#eeeeee", + "borderColor": "#aaaaaa", + "borderWidth": 0.5 + }, + "label": { + "color": "#ffffff" + }, + "emphasis": { + "itemStyle": { + "areaColor": "rgba(63,177,227,0.25)", + "borderColor": "#3fb1e3", + "borderWidth": 1 + }, + "label": { + "color": "#3fb1e3" + } + } + }, + "categoryAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#999999" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "valueAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#999999" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "logAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#999999" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "timeAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#999999" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "toolbox": { + "iconStyle": { + "borderColor": "#999999" + }, + "emphasis": { + "iconStyle": { + "borderColor": "#666666" + } + } + }, + "legend": { + "textStyle": { + "color": "#999999" + } + }, + "tooltip": { + "axisPointer": { + "lineStyle": { + "color": "#cccccc", + "width": 1 + }, + "crossStyle": { + "color": "#cccccc", + "width": 1 + } + } + }, + "timeline": { + "lineStyle": { + "color": "#626c91", + "width": 1 + }, + "itemStyle": { + "color": "#626c91", + "borderWidth": 1 + }, + "controlStyle": { + "color": "#626c91", + "borderColor": "#626c91", + "borderWidth": 0.5 + }, + "checkpointStyle": { + "color": "#3fb1e3", + "borderColor": "#3fb1e3" + }, + "label": { + "color": "#626c91" + }, + "emphasis": { + "itemStyle": { + "color": "#626c91" + }, + "controlStyle": { + "color": "#626c91", + "borderColor": "#626c91", + "borderWidth": 0.5 + }, + "label": { + "color": "#626c91" + } + } + }, + "visualMap": { + "color": [ + "#2a99c9", + "#afe8ff" + ] + }, + "dataZoom": { + "backgroundColor": "rgba(255,255,255,0)", + "dataBackgroundColor": "rgba(222,222,222,1)", + "fillerColor": "rgba(114,230,212,0.25)", + "handleColor": "#cccccc", + "handleSize": "100%", + "textStyle": { + "color": "#999999" + } + }, + "markPoint": { + "label": { + "color": "#ffffff" + }, + "emphasis": { + "label": { + "color": "#ffffff" + } + } + } + }); +})); diff --git a/IoTGateway/wwwroot/echarts/westeros.js b/IoTGateway/wwwroot/echarts/westeros.js new file mode 100644 index 0000000..a4ad14a --- /dev/null +++ b/IoTGateway/wwwroot/echarts/westeros.js @@ -0,0 +1,415 @@ + +(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; + } + echarts.registerTheme('westeros', { + "color": [ + "#516b91", + "#59c4e6", + "#edafda", + "#93b7e3", + "#a5e7f0", + "#cbb0e3" + ], + "backgroundColor": "rgba(0,0,0,0)", + "textStyle": {}, + "title": { + "textStyle": { + "color": "#516b91" + }, + "subtextStyle": { + "color": "#93b7e3" + } + }, + "line": { + "itemStyle": { + "borderWidth": "2" + }, + "lineStyle": { + "width": "2" + }, + "symbolSize": "6", + "symbol": "emptyCircle", + "smooth": true + }, + "radar": { + "itemStyle": { + "borderWidth": "2" + }, + "lineStyle": { + "width": "2" + }, + "symbolSize": "6", + "symbol": "emptyCircle", + "smooth": true + }, + "bar": { + "itemStyle": { + "barBorderWidth": 0, + "barBorderColor": "#ccc" + } + }, + "pie": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "scatter": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "boxplot": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "parallel": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "sankey": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "funnel": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "gauge": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "candlestick": { + "itemStyle": { + "color": "#edafda", + "color0": "transparent", + "borderColor": "#d680bc", + "borderColor0": "#8fd3e8", + "borderWidth": "2" + } + }, + "graph": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "lineStyle": { + "width": 1, + "color": "#aaa" + }, + "symbolSize": "6", + "symbol": "emptyCircle", + "smooth": true, + "color": [ + "#516b91", + "#59c4e6", + "#edafda", + "#93b7e3", + "#a5e7f0", + "#cbb0e3" + ], + "label": { + "color": "#eee" + } + }, + "map": { + "itemStyle": { + "areaColor": "#f3f3f3", + "borderColor": "#516b91", + "borderWidth": 0.5 + }, + "label": { + "color": "#000" + }, + "emphasis": { + "itemStyle": { + "areaColor": "#a5e7f0", + "borderColor": "#516b91", + "borderWidth": 1 + }, + "label": { + "color": "#516b91" + } + } + }, + "geo": { + "itemStyle": { + "areaColor": "#f3f3f3", + "borderColor": "#516b91", + "borderWidth": 0.5 + }, + "label": { + "color": "#000" + }, + "emphasis": { + "itemStyle": { + "areaColor": "#a5e7f0", + "borderColor": "#516b91", + "borderWidth": 1 + }, + "label": { + "color": "#516b91" + } + } + }, + "categoryAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#999999" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "valueAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#999999" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "logAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#999999" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "timeAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#999999" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "toolbox": { + "iconStyle": { + "borderColor": "#999999" + }, + "emphasis": { + "iconStyle": { + "borderColor": "#666666" + } + } + }, + "legend": { + "textStyle": { + "color": "#999999" + } + }, + "tooltip": { + "axisPointer": { + "lineStyle": { + "color": "#cccccc", + "width": 1 + }, + "crossStyle": { + "color": "#cccccc", + "width": 1 + } + } + }, + "timeline": { + "lineStyle": { + "color": "#8fd3e8", + "width": 1 + }, + "itemStyle": { + "color": "#8fd3e8", + "borderWidth": 1 + }, + "controlStyle": { + "color": "#8fd3e8", + "borderColor": "#8fd3e8", + "borderWidth": 0.5 + }, + "checkpointStyle": { + "color": "#8fd3e8", + "borderColor": "#8a7ca8" + }, + "label": { + "color": "#8fd3e8" + }, + "emphasis": { + "itemStyle": { + "color": "#8fd3e8" + }, + "controlStyle": { + "color": "#8fd3e8", + "borderColor": "#8fd3e8", + "borderWidth": 0.5 + }, + "label": { + "color": "#8fd3e8" + } + } + }, + "visualMap": { + "color": [ + "#516b91", + "#59c4e6", + "#a5e7f0" + ] + }, + "dataZoom": { + "backgroundColor": "rgba(0,0,0,0)", + "dataBackgroundColor": "rgba(255,255,255,0.3)", + "fillerColor": "rgba(167,183,204,0.4)", + "handleColor": "#a7b7cc", + "handleSize": "100%", + "textStyle": { + "color": "#333" + } + }, + "markPoint": { + "label": { + "color": "#eee" + }, + "emphasis": { + "label": { + "color": "#eee" + } + } + } + }); +})); diff --git a/IoTGateway/wwwroot/echarts/wonderland.js b/IoTGateway/wwwroot/echarts/wonderland.js new file mode 100644 index 0000000..8e77799 --- /dev/null +++ b/IoTGateway/wwwroot/echarts/wonderland.js @@ -0,0 +1,415 @@ + +(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; + } + echarts.registerTheme('wonderland', { + "color": [ + "#4ea397", + "#22c3aa", + "#7bd9a5", + "#d0648a", + "#f58db2", + "#f2b3c9" + ], + "backgroundColor": "rgba(255,255,255,0)", + "textStyle": {}, + "title": { + "textStyle": { + "color": "#666666" + }, + "subtextStyle": { + "color": "#999999" + } + }, + "line": { + "itemStyle": { + "borderWidth": "2" + }, + "lineStyle": { + "width": "3" + }, + "symbolSize": "8", + "symbol": "emptyCircle", + "smooth": false + }, + "radar": { + "itemStyle": { + "borderWidth": "2" + }, + "lineStyle": { + "width": "3" + }, + "symbolSize": "8", + "symbol": "emptyCircle", + "smooth": false + }, + "bar": { + "itemStyle": { + "barBorderWidth": 0, + "barBorderColor": "#ccc" + } + }, + "pie": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "scatter": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "boxplot": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "parallel": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "sankey": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "funnel": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "gauge": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + } + }, + "candlestick": { + "itemStyle": { + "color": "#d0648a", + "color0": "transparent", + "borderColor": "#d0648a", + "borderColor0": "#22c3aa", + "borderWidth": "1" + } + }, + "graph": { + "itemStyle": { + "borderWidth": 0, + "borderColor": "#ccc" + }, + "lineStyle": { + "width": "1", + "color": "#cccccc" + }, + "symbolSize": "8", + "symbol": "emptyCircle", + "smooth": false, + "color": [ + "#4ea397", + "#22c3aa", + "#7bd9a5", + "#d0648a", + "#f58db2", + "#f2b3c9" + ], + "label": { + "color": "#ffffff" + } + }, + "map": { + "itemStyle": { + "areaColor": "#eeeeee", + "borderColor": "#999999", + "borderWidth": 0.5 + }, + "label": { + "color": "#28544e" + }, + "emphasis": { + "itemStyle": { + "areaColor": "rgba(34,195,170,0.25)", + "borderColor": "#22c3aa", + "borderWidth": 1 + }, + "label": { + "color": "#349e8e" + } + } + }, + "geo": { + "itemStyle": { + "areaColor": "#eeeeee", + "borderColor": "#999999", + "borderWidth": 0.5 + }, + "label": { + "color": "#28544e" + }, + "emphasis": { + "itemStyle": { + "areaColor": "rgba(34,195,170,0.25)", + "borderColor": "#22c3aa", + "borderWidth": 1 + }, + "label": { + "color": "#349e8e" + } + } + }, + "categoryAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#999999" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "valueAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#999999" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "logAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#999999" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "timeAxis": { + "axisLine": { + "show": true, + "lineStyle": { + "color": "#cccccc" + } + }, + "axisTick": { + "show": false, + "lineStyle": { + "color": "#333" + } + }, + "axisLabel": { + "show": true, + "color": "#999999" + }, + "splitLine": { + "show": true, + "lineStyle": { + "color": [ + "#eeeeee" + ] + } + }, + "splitArea": { + "show": false, + "areaStyle": { + "color": [ + "rgba(250,250,250,0.05)", + "rgba(200,200,200,0.02)" + ] + } + } + }, + "toolbox": { + "iconStyle": { + "borderColor": "#999999" + }, + "emphasis": { + "iconStyle": { + "borderColor": "#666666" + } + } + }, + "legend": { + "textStyle": { + "color": "#999999" + } + }, + "tooltip": { + "axisPointer": { + "lineStyle": { + "color": "#cccccc", + "width": 1 + }, + "crossStyle": { + "color": "#cccccc", + "width": 1 + } + } + }, + "timeline": { + "lineStyle": { + "color": "#4ea397", + "width": 1 + }, + "itemStyle": { + "color": "#4ea397", + "borderWidth": 1 + }, + "controlStyle": { + "color": "#4ea397", + "borderColor": "#4ea397", + "borderWidth": 0.5 + }, + "checkpointStyle": { + "color": "#4ea397", + "borderColor": "#3cebd2" + }, + "label": { + "color": "#4ea397" + }, + "emphasis": { + "itemStyle": { + "color": "#4ea397" + }, + "controlStyle": { + "color": "#4ea397", + "borderColor": "#4ea397", + "borderWidth": 0.5 + }, + "label": { + "color": "#4ea397" + } + } + }, + "visualMap": { + "color": [ + "#d0648a", + "#22c3aa", + "#adfff1" + ] + }, + "dataZoom": { + "backgroundColor": "rgba(255,255,255,0)", + "dataBackgroundColor": "rgba(222,222,222,1)", + "fillerColor": "rgba(114,230,212,0.25)", + "handleColor": "#cccccc", + "handleSize": "100%", + "textStyle": { + "color": "#999999" + } + }, + "markPoint": { + "label": { + "color": "#ffffff" + }, + "emphasis": { + "label": { + "color": "#ffffff" + } + } + } + }); +})); diff --git a/IoTGateway/wwwroot/favicon.ico b/IoTGateway/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0c3ef186274e2d8454b9fab660a444dd0400e255 GIT binary patch literal 4286 zcmeHKc~q2D6u*FgDS=p;nI1iOlRv^h4QTHX*}`xPo>vMDjFy<+pC|H~JBz3Kzxc`UP`(dskjPxEzDR2^vEF z4Q^)|4)Z+ThfuG2N4^Ys(QTD=+Y{7OFhX7J)-=O5_RZtobmJvp()N0Wo|eY=SmV1e zMQ4`r-Omoc|JM{PKQz zUphNU7g?4aUMgcOnP%9#&m3I)(0_mdawG6bbtlVsM*0U2E}od6X>}zvjJP*;jtq1M zMjPckFen2C1H|QITJ;E5pBIn3Vg3}+sU>5OVT(a=ntq1a(7w{jLB1q%BI(>@o&J8d z@wSYCc>rG2`+e;5_X6W)iBmV)7#mQ1b6fyjn5rYxyv5xt;|1v-coZEU7y2oBj(d-G zCt5MsEa#aAz%E8uVyLHgvu92_KTb`#!~ClN+Z@!@B$joj^~3#XW=}6iaDSHc&sbbd z3rqF$_}rd(Cgw&EFgKRjU;rNMfo8qU@jc7qT(>cauRGJJ6s-?$_A&{E`%-d-lxavxoQu8JRfQJl6N{Q%8NkL>6K z?$47ptUIt7-?&Lr`vrZ00rtUudRq(-&*p-7wfj#`!oa;DF~-nRuKRWAyCl=FfB&f9 zI<{Jhy%~e{z~G9s0|qB?Ml?A)sR9FN=8X*fIysM6N>LZR$mvQ^eytzF0DVTw2l!UK zo?c#eUdR0d?hF)H%)~t|pS+>|G{28`W#F_>`mf-@1foiIsa-pe_{KyhQ>?jMlQzI0 z&k`5lhI3rHvc9z)T3C65bFC9{SM0%sBgnn}(J`SE;njjVdp4)gwx8HVcr_>Ro_paT ztV%Nt$AHs&z=l{e5Hs_5h1?%pzI8H18!Q$^Qj-3kvvKPPHKF!y$bGG}t;okLL=i2F z_Tqk|gQG)K(53cbP8Zq$yr8Qtz<8Ci20TD7Bnq*f=Jo1G_zn!LeXP_I_8ZX8?#xr` znD9b5E!KEm&$qOWYJ`uPR#B?^j1UG3(AjIyWY$&bNCd{W|(v;TiV=?jNz@QX)n9wj$J=G4QgjE57A!PY86~ zhhE?uPEFJX+vdQ%4KB2Vwz7Xh436NMqPvVCYUa+GC}wpb=s#<&a`u8Zzd#G?pdVPr zX>knnEM5Pd%ny6rL@)TW&TfheaD_jm?rej6bEfz3bY2C{bNqcDb+>B>_uF)`P^ZyAQ$$tSgxa70+A`kYra>%JYxV2>@RMOrbYdH2=OqE9pLM#v_Vam z!jHmT+@J1%n?^Awg75m=!>)*VjkJICjs0?gfgA3JBo=qWxuflj`^Oz=2km4YymJ_L zi9BdKV~HM8u(XYZ*C592yAp$HaBqqQU8ROAwUK`1o9l)>b$sqK4{+|h2_IYKJnJX! z1O3H;Ar!CiAilGsr(59;b6(ou-J1t`t`D@f6>CDdHaXhi+-rxqXle5=?`YVxR^SsZ<`Ns#^6*Yt^b(+``4JxV4L0VS li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +.fa-border { + padding: .2em .25em .15em; + border: solid 0.08em #eeeeee; + border-radius: .1em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left { + margin-right: .3em; +} +.fa.fa-pull-right { + margin-left: .3em; +} +/* Deprecated as of 4.4.0 */ +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.fa.pull-left { + margin-right: .3em; +} +.fa.pull-right { + margin-left: .3em; +} +.fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); +} +@-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +.fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +.fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} +.fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} +.fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + transform: scale(-1, 1); +} +.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + -ms-transform: scale(1, -1); + transform: scale(1, -1); +} +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270, +:root .fa-flip-horizontal, +:root .fa-flip-vertical { + filter: none; +} +.fa-stack { + position: relative; + display: inline-block; + width: 2em; + height: 2em; + line-height: 2em; + vertical-align: middle; +} +.fa-stack-1x, +.fa-stack-2x { + position: absolute; + left: 0; + width: 100%; + text-align: center; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #ffffff; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper-pp:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-resistance:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} +.fa-reddit-alien:before { + content: "\f281"; +} +.fa-edge:before { + content: "\f282"; +} +.fa-credit-card-alt:before { + content: "\f283"; +} +.fa-codiepie:before { + content: "\f284"; +} +.fa-modx:before { + content: "\f285"; +} +.fa-fort-awesome:before { + content: "\f286"; +} +.fa-usb:before { + content: "\f287"; +} +.fa-product-hunt:before { + content: "\f288"; +} +.fa-mixcloud:before { + content: "\f289"; +} +.fa-scribd:before { + content: "\f28a"; +} +.fa-pause-circle:before { + content: "\f28b"; +} +.fa-pause-circle-o:before { + content: "\f28c"; +} +.fa-stop-circle:before { + content: "\f28d"; +} +.fa-stop-circle-o:before { + content: "\f28e"; +} +.fa-shopping-bag:before { + content: "\f290"; +} +.fa-shopping-basket:before { + content: "\f291"; +} +.fa-hashtag:before { + content: "\f292"; +} +.fa-bluetooth:before { + content: "\f293"; +} +.fa-bluetooth-b:before { + content: "\f294"; +} +.fa-percent:before { + content: "\f295"; +} +.fa-gitlab:before { + content: "\f296"; +} +.fa-wpbeginner:before { + content: "\f297"; +} +.fa-wpforms:before { + content: "\f298"; +} +.fa-envira:before { + content: "\f299"; +} +.fa-universal-access:before { + content: "\f29a"; +} +.fa-wheelchair-alt:before { + content: "\f29b"; +} +.fa-question-circle-o:before { + content: "\f29c"; +} +.fa-blind:before { + content: "\f29d"; +} +.fa-audio-description:before { + content: "\f29e"; +} +.fa-volume-control-phone:before { + content: "\f2a0"; +} +.fa-braille:before { + content: "\f2a1"; +} +.fa-assistive-listening-systems:before { + content: "\f2a2"; +} +.fa-asl-interpreting:before, +.fa-american-sign-language-interpreting:before { + content: "\f2a3"; +} +.fa-deafness:before, +.fa-hard-of-hearing:before, +.fa-deaf:before { + content: "\f2a4"; +} +.fa-glide:before { + content: "\f2a5"; +} +.fa-glide-g:before { + content: "\f2a6"; +} +.fa-signing:before, +.fa-sign-language:before { + content: "\f2a7"; +} +.fa-low-vision:before { + content: "\f2a8"; +} +.fa-viadeo:before { + content: "\f2a9"; +} +.fa-viadeo-square:before { + content: "\f2aa"; +} +.fa-snapchat:before { + content: "\f2ab"; +} +.fa-snapchat-ghost:before { + content: "\f2ac"; +} +.fa-snapchat-square:before { + content: "\f2ad"; +} +.fa-pied-piper:before { + content: "\f2ae"; +} +.fa-first-order:before { + content: "\f2b0"; +} +.fa-yoast:before { + content: "\f2b1"; +} +.fa-themeisle:before { + content: "\f2b2"; +} +.fa-google-plus-circle:before, +.fa-google-plus-official:before { + content: "\f2b3"; +} +.fa-fa:before, +.fa-font-awesome:before { + content: "\f2b4"; +} +.fa-handshake-o:before { + content: "\f2b5"; +} +.fa-envelope-open:before { + content: "\f2b6"; +} +.fa-envelope-open-o:before { + content: "\f2b7"; +} +.fa-linode:before { + content: "\f2b8"; +} +.fa-address-book:before { + content: "\f2b9"; +} +.fa-address-book-o:before { + content: "\f2ba"; +} +.fa-vcard:before, +.fa-address-card:before { + content: "\f2bb"; +} +.fa-vcard-o:before, +.fa-address-card-o:before { + content: "\f2bc"; +} +.fa-user-circle:before { + content: "\f2bd"; +} +.fa-user-circle-o:before { + content: "\f2be"; +} +.fa-user-o:before { + content: "\f2c0"; +} +.fa-id-badge:before { + content: "\f2c1"; +} +.fa-drivers-license:before, +.fa-id-card:before { + content: "\f2c2"; +} +.fa-drivers-license-o:before, +.fa-id-card-o:before { + content: "\f2c3"; +} +.fa-quora:before { + content: "\f2c4"; +} +.fa-free-code-camp:before { + content: "\f2c5"; +} +.fa-telegram:before { + content: "\f2c6"; +} +.fa-thermometer-4:before, +.fa-thermometer:before, +.fa-thermometer-full:before { + content: "\f2c7"; +} +.fa-thermometer-3:before, +.fa-thermometer-three-quarters:before { + content: "\f2c8"; +} +.fa-thermometer-2:before, +.fa-thermometer-half:before { + content: "\f2c9"; +} +.fa-thermometer-1:before, +.fa-thermometer-quarter:before { + content: "\f2ca"; +} +.fa-thermometer-0:before, +.fa-thermometer-empty:before { + content: "\f2cb"; +} +.fa-shower:before { + content: "\f2cc"; +} +.fa-bathtub:before, +.fa-s15:before, +.fa-bath:before { + content: "\f2cd"; +} +.fa-podcast:before { + content: "\f2ce"; +} +.fa-window-maximize:before { + content: "\f2d0"; +} +.fa-window-minimize:before { + content: "\f2d1"; +} +.fa-window-restore:before { + content: "\f2d2"; +} +.fa-times-rectangle:before, +.fa-window-close:before { + content: "\f2d3"; +} +.fa-times-rectangle-o:before, +.fa-window-close-o:before { + content: "\f2d4"; +} +.fa-bandcamp:before { + content: "\f2d5"; +} +.fa-grav:before { + content: "\f2d6"; +} +.fa-etsy:before { + content: "\f2d7"; +} +.fa-imdb:before { + content: "\f2d8"; +} +.fa-ravelry:before { + content: "\f2d9"; +} +.fa-eercast:before { + content: "\f2da"; +} +.fa-microchip:before { + content: "\f2db"; +} +.fa-snowflake-o:before { + content: "\f2dc"; +} +.fa-superpowers:before { + content: "\f2dd"; +} +.fa-wpexplorer:before { + content: "\f2de"; +} +.fa-meetup:before { + content: "\f2e0"; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} diff --git a/IoTGateway/wwwroot/font/iconfont.css b/IoTGateway/wwwroot/font/iconfont.css new file mode 100644 index 0000000..cb6251a --- /dev/null +++ b/IoTGateway/wwwroot/font/iconfont.css @@ -0,0 +1,257 @@ +@font-face {font-family: "_wtmicon"; + src: url('iconfont.eot?t=1567088881156'); /* IE9 */ + src: url('iconfont.eot?t=1567088881156#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), + url('iconfont.woff?t=1567088881156') format('woff'), + url('iconfont.ttf?t=1567088881156') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1567088881156#_wtmicon') format('svg'); /* iOS 4.1- */ +} + +._wtmicon { + font-family: "_wtmicon" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +._wtmicon-renminbi:before { + content: "\e63d"; +} + +._wtmicon-wxbzhanghu:before { + content: "\e61e"; +} + +._wtmicon-wxbsousuotuiguang:before { + content: "\e620"; +} + +._wtmicon-iconfontmingpian:before { + content: "\e629"; +} + +._wtmicon-iconfontriyongbaihuo:before { + content: "\e62c"; +} + +._wtmicon-file:before { + content: "\e804"; +} + +._wtmicon-tiaoshi:before { + content: "\eb61"; +} + +._wtmicon-guanfangbanben:before { + content: "\eb63"; +} + +._wtmicon-quanxianshenpi:before { + content: "\eb65"; +} + +._wtmicon-yingyongguanli:before { + content: "\eb67"; +} + +._wtmicon-zhanghaoquanxianguanli:before { + content: "\eb68"; +} + +._wtmicon-folder:before { + content: "\e650"; +} + +._wtmicon-icon_shezhi:before { + content: "\eb8d"; +} + +._wtmicon-tubiao-bingtu:before { + content: "\eb95"; +} + +._wtmicon-tubiao-qiapian:before { + content: "\eb96"; +} + +._wtmicon-tubiao-zhexiantu:before { + content: "\eb97"; +} + +._wtmicon-zuzhiqunzu:before { + content: "\ebd8"; +} + +._wtmicon-yingwen:before { + content: "\ebe0"; +} + +._wtmicon-zhongwen:before { + content: "\ebe2"; +} + +._wtmicon--lumingpai:before { + content: "\ebfb"; +} + +._wtmicon-fabu:before { + content: "\ec09"; +} + +._wtmicon-xiayibu:before { + content: "\ec0a"; +} + +._wtmicon-shangyibu:before { + content: "\ec0b"; +} + +._wtmicon-xiangxiazhanhang:before { + content: "\ec0c"; +} + +._wtmicon-xiangshangzhanhang:before { + content: "\ec0d"; +} + +._wtmicon-tupianjiazaishibai:before { + content: "\ec0e"; +} + +._wtmicon-huanyuanhuabu:before { + content: "\ec13"; +} + +._wtmicon-quanping:before { + content: "\ec14"; +} + +._wtmicon-DOC:before { + content: "\ec17"; +} + +._wtmicon-BMP:before { + content: "\ec18"; +} + +._wtmicon-GIF:before { + content: "\ec19"; +} + +._wtmicon-JPG:before { + content: "\ec1a"; +} + +._wtmicon-PNG:before { + content: "\ec1b"; +} + +._wtmicon-weizhigeshi:before { + content: "\ec1c"; +} + +._wtmicon-yunduanxiazai:before { + content: "\ec1d"; +} + +._wtmicon-yunduanshangchuan:before { + content: "\ec1e"; +} + +._wtmicon-wentijieda:before { + content: "\ec2e"; +} + +._wtmicon-dingwei:before { + content: "\ec32"; +} + +._wtmicon-xiaoxitongzhi:before { + content: "\ec35"; +} + +._wtmicon-xinhao:before { + content: "\ec4a"; +} + +._wtmicon-lanya:before { + content: "\ec4b"; +} + +._wtmicon-Wi-Fi:before { + content: "\ec4c"; +} + +._wtmicon-chaxun:before { + content: "\ec4d"; +} + +._wtmicon-anquan:before { + content: "\ec4e"; +} + +._wtmicon-hanshu:before { + content: "\ec56"; +} + +._wtmicon-chucun:before { + content: "\ec5e"; +} + +._wtmicon-bug:before { + content: "\ec63"; +} + +._wtmicon-js:before { + content: "\ec68"; +} + +._wtmicon-wuxiandianbo:before { + content: "\ec79"; +} + +._wtmicon-dianzan_kuai:before { + content: "\ec8c"; +} + +._wtmicon-zhihuan:before { + content: "\ec8d"; +} + +._wtmicon-aixin_shixin:before { + content: "\eca1"; +} + +._wtmicon-aixin:before { + content: "\eca2"; +} + +._wtmicon-shengyin_shiti:before { + content: "\eca5"; +} + +._wtmicon-shengyinkai:before { + content: "\eca6"; +} + +._wtmicon-shoucang_shixin:before { + content: "\eca7"; +} + +._wtmicon-shoucang:before { + content: "\eca8"; +} + +._wtmicon-shengyinwu:before { + content: "\eca9"; +} + +._wtmicon-shengyinjingyin:before { + content: "\ecaa"; +} + +._wtmicon-fenxiangfangshi:before { + content: "\ed2e"; +} + diff --git a/IoTGateway/wwwroot/font/iconfont.eot b/IoTGateway/wwwroot/font/iconfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..1c5e5fb61fd58c83a1347e31fea116a4a1857b0e GIT binary patch literal 17796 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

    ^B}E^n}U>;>6z?h?j?LD+t)>Fz37 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 literal 0 HcmV?d00001 diff --git a/IoTGateway/wwwroot/font/iconfont.svg b/IoTGateway/wwwroot/font/iconfont.svg new file mode 100644 index 0000000..017fe62 --- /dev/null +++ b/IoTGateway/wwwroot/font/iconfont.svg @@ -0,0 +1,206 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/IoTGateway/wwwroot/font/iconfont.ttf b/IoTGateway/wwwroot/font/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b94309f1e005c51b3f6550f0de76d68f6c6d48c4 GIT binary patch literal 17824 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 APyhe` literal 0 HcmV?d00001 diff --git a/IoTGateway/wwwroot/font/iconfont.woff b/IoTGateway/wwwroot/font/iconfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..59e3ef3f78c815e8b1b1dc4dadaaeb12c5ebe2ab GIT binary patch literal 10636 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 NkJyK<5XS(({{Zz!SG@oL literal 0 HcmV?d00001 diff --git a/IoTGateway/wwwroot/font/iconfont.woff2 b/IoTGateway/wwwroot/font/iconfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1d0ed57324202ea45d8c764498d86e8cb4c12661 GIT binary patch literal 8960 zcmV+bBmdlYPew8T0RR9103!eZ3jhEB07akx03xse0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/IoTGateway/wwwroot/images/icon-login04.png b/IoTGateway/wwwroot/images/icon-login04.png new file mode 100644 index 0000000000000000000000000000000000000000..15371c84360e3f932920f59ad9eec847e9e2287c GIT binary patch literal 1584 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

    ^FfAgCDhBAQD-~B#W=Y)@j}N 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

  • vt=vAO- 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 OmqoeAJJ;d0 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 literal 0 HcmV?d00001 diff --git a/.vs/IoTGateway/v17/TestStore/0/testlog.manifest b/.vs/IoTGateway/v17/TestStore/0/testlog.manifest new file mode 100644 index 0000000000000000000000000000000000000000..006f9b09bec25071d7a6cbb59e6cff6adb36bb0e GIT binary patch literal 24 bcmXR;&-W=QP7PsZU|?VeVi3?vvMU7uMS%o^ literal 0 HcmV?d00001 diff --git a/.vs/IoTGateway/v17/fileList.bin b/.vs/IoTGateway/v17/fileList.bin new file mode 100644 index 0000000000000000000000000000000000000000..ffcb6e71ea298e67d3fea04278b222e630eb72eb GIT binary patch literal 71449 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 FrameworkUsers { get; set; } + public DbSet Devices { get; set; } + public DbSet DeviceConfigs { get; set; } + public DbSet DeviceVariables { get; set; } + public DbSet Drivers { get; set; } + public DbSet SystemConfig { get; set; } + + + public DataContext(CS cs) + : base(cs) + { + } + + public DataContext(string cs, DBTypeEnum dbtype) + : base(cs, dbtype) + { + } + + public DataContext(string cs, DBTypeEnum dbtype, string version = null) + : base(cs, dbtype, version) + { + } + + + public DataContext(DbContextOptions options) : base(options) { } + + public override async Task DataInit(object allModules, bool IsSpa) + { + var state = await base.DataInit(allModules, IsSpa); + bool emptydb = false; + try + { + emptydb = Set().Count() == 0 && Set().Count() == 0; + } + catch { } + if (state == true || emptydb == true) + { + //when state is true, means it's the first time EF create database, do data init here + //当state是true的时候,表示这是第一次创建数据库,可以在这里进行数据初始化 + var user = new FrameworkUser + { + ITCode = "admin", + Password = Utils.GetMD5String("000000"), + IsValid = true, + Name = "Admin" + }; + + var userrole = new FrameworkUserRole + { + UserCode = user.ITCode, + RoleCode = "001" + }; + + Set().Add(user); + Set().Add(userrole); + await SaveChangesAsync(); + } + return state; + } + + } + + ///