From bba1c0bc95f830cd7361889de2dedc748a471015 Mon Sep 17 00:00:00 2001 From: wanggang <76527413@qq.com> Date: Mon, 21 Oct 2019 15:59:34 +0800 Subject: [PATCH] update Former-commit-id: 6f13b462eb3bff9605441e91a536aafced4570b6 --- docs/研发/v1.0任务分解.xlsx | Bin 23631 -> 25613 bytes projects/Infrastructure/Data/EfDbContext.cs | 16 +- .../Application/Domain/Entities/Category.cs | 2 +- .../Application/Domain/Entities/Node.cs | 6 - .../Application/Domain/Entities/Product.cs | 2 +- .../Application/Models/DeviceSearchMode.cs | 8 + .../Application/Models/EditCategoryModel.cs | 3 +- .../Application/Models/EditNodeModel.cs | 8 +- .../Application/Models/EditProductModel.cs | 5 +- .../Application/Models/HomeViewModel.cs | 12 -- .../Areas/Admin/Controlls/DeviceController.cs | 5 + projects/IoT.Shared/IoT.Shared.csproj | 4 +- projects/IoT.Shared/IoTServiceStartup.cs | 10 +- .../IoT.Shared/Views/Device/Details.cshtml | 4 +- projects/IoT.Shared/Views/Device/Index.cshtml | 4 +- projects/IoT.Shared/Views/Home/Node.cshtml | 142 +++++++++--------- .../IoT.Shared/wwwroot/{iot => images}/10.png | Bin .../IoT.Shared/wwwroot/{iot => images}/20.png | Bin .../IoT.Shared/wwwroot/{iot => images}/30.png | Bin .../IoT.Shared/wwwroot/{iot => images}/40.png | Bin .../wwwroot/{iot => images}/air.png | Bin projects/IoT.Shared/wwwroot/images/alarm.png | Bin 0 -> 2454 bytes projects/IoT.Shared/wwwroot/images/ap.png | Bin 0 -> 6845 bytes .../wwwroot/{iot => images}/button.png | Bin projects/IoT.Shared/wwwroot/images/camera.png | Bin 0 -> 3197 bytes .../IoT.Shared/wwwroot/images/classroom.png | Bin 0 -> 4635 bytes .../wwwroot/{iot => images}/close.png | Bin .../wwwroot/{iot => images}/co2.png | Bin .../wwwroot/{iot => images}/control.png | Bin .../IoT.Shared/wwwroot/images/curtain.png | Bin 0 -> 3017 bytes .../wwwroot/{iot => images}/door.png | Bin .../wwwroot/{iot => images}/electric.png | Bin .../IoT.Shared/wwwroot/images/gateway.png | Bin 0 -> 2872 bytes .../wwwroot/{iot => images}/humidity.png | Bin .../IoT.Shared/wwwroot/images/humiture.png | Bin 0 -> 4197 bytes .../IoT.Shared/wwwroot/images/infrared.png | Bin 0 -> 3229 bytes .../wwwroot/{iot => images}/left.png | Bin projects/IoT.Shared/wwwroot/images/light.png | Bin 0 -> 3179 bytes .../IoT.Shared/wwwroot/images/monitor.png | Bin 0 -> 2444 bytes .../wwwroot/{iot => images}/natural.png | Bin .../wwwroot/{iot => images}/off.png | Bin .../IoT.Shared/wwwroot/{iot => images}/on.png | Bin .../wwwroot/{iot => images}/open.png | Bin .../IoT.Shared/wwwroot/{iot => images}/pc.png | Bin .../wwwroot/{iot => images}/play.png | Bin .../wwwroot/{iot => images}/pm25.png | Bin .../wwwroot/{iot => images}/projector.png | Bin .../wwwroot/{iot => images}/right.png | Bin projects/IoT.Shared/wwwroot/images/safe.png | Bin 0 -> 3203 bytes .../wwwroot/{iot => images}/shot.png | Bin projects/IoT.Shared/wwwroot/images/smoke.png | Bin 0 -> 4280 bytes projects/IoT.Shared/wwwroot/images/socket.png | Bin 0 -> 2656 bytes .../IoT.Shared/wwwroot/{iot => images}/sp.png | Bin .../wwwroot/{iot => images}/stop.png | Bin .../wwwroot/{iot => images}/switch.png | Bin .../IoT.Shared/wwwroot/images/switch1.png | Bin 0 -> 2840 bytes .../IoT.Shared/wwwroot/images/switch2.png | Bin 0 -> 3214 bytes .../IoT.Shared/wwwroot/images/switch3.png | Bin 0 -> 3276 bytes .../wwwroot/{iot => images}/turndown.png | Bin .../wwwroot/{iot => images}/turnleft.png | Bin .../wwwroot/{iot => images}/turnright.png | Bin .../wwwroot/{iot => images}/turnup.png | Bin .../wwwroot/{iot => images}/warning.wav | Bin .../wwwroot/{iot => images}/zoomin.png | Bin .../wwwroot/{iot => images}/zoomout.png | Bin projects/IoT.Shared/wwwroot/iot/alarm.png | Bin 5074 -> 0 bytes projects/IoT.Shared/wwwroot/iot/ap.png | Bin 4340 -> 0 bytes projects/IoT.Shared/wwwroot/iot/camera.png | Bin 7878 -> 0 bytes projects/IoT.Shared/wwwroot/iot/classroom.jpg | Bin 46978 -> 0 bytes projects/IoT.Shared/wwwroot/iot/curtain.png | Bin 2541 -> 0 bytes projects/IoT.Shared/wwwroot/iot/gateway.png | Bin 1125 -> 0 bytes projects/IoT.Shared/wwwroot/iot/light.png | Bin 9941 -> 0 bytes projects/IoT.Shared/wwwroot/iot/lighting.png | Bin 1122 -> 0 bytes projects/IoT.Shared/wwwroot/iot/monitor.png | Bin 1597 -> 0 bytes projects/IoT.Shared/wwwroot/iot/safe.png | Bin 1164 -> 0 bytes projects/IoT.Shared/wwwroot/iot/smoke.png | Bin 3737 -> 0 bytes projects/IoT.Shared/wwwroot/iot/socket.png | Bin 3033 -> 0 bytes .../IoT.Shared/wwwroot/iot/temperature.png | Bin 6682 -> 0 bytes .../Areas/Admin/Controllers/HomeController.cs | 40 ++++- .../Admin/ViewModels/CategoryViewModel.cs | 13 ++ .../Admin/ViewModels/HomeIndexViewModel.cs | 12 ++ .../Areas/Admin/ViewModels/NodeViewModel.cs | 13 ++ .../Admin/ViewModels/ProductViewModel.cs | 12 ++ .../Areas/Admin/Views/Home/Index.cshtml | 58 ++++++- .../Areas/Admin/Views/_ViewImports.cshtml | 1 + .../IoTCenter/Controllers/AppController.cs | 1 - .../IoTCenter/Controllers/HomeController.cs | 2 - projects/IoTCenter/wwwroot/index.html | 23 +++ .../DeviceServices/BaseDeviceService.cs | 2 +- .../IoTNode/DeviceServices/FBee/DeviceId.cs | 2 +- .../DeviceServices/FBee/FBeeService.cs | 12 +- projects/IoTNode/Startup.cs | 6 +- projects/IoTNode/Views/_ViewImports.cshtml | 1 + 93 files changed, 292 insertions(+), 137 deletions(-) delete mode 100644 projects/IoT.Shared/Application/Models/HomeViewModel.cs rename projects/IoT.Shared/wwwroot/{iot => images}/10.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/20.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/30.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/40.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/air.png (100%) create mode 100644 projects/IoT.Shared/wwwroot/images/alarm.png create mode 100644 projects/IoT.Shared/wwwroot/images/ap.png rename projects/IoT.Shared/wwwroot/{iot => images}/button.png (100%) create mode 100644 projects/IoT.Shared/wwwroot/images/camera.png create mode 100644 projects/IoT.Shared/wwwroot/images/classroom.png rename projects/IoT.Shared/wwwroot/{iot => images}/close.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/co2.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/control.png (100%) create mode 100644 projects/IoT.Shared/wwwroot/images/curtain.png rename projects/IoT.Shared/wwwroot/{iot => images}/door.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/electric.png (100%) create mode 100644 projects/IoT.Shared/wwwroot/images/gateway.png rename projects/IoT.Shared/wwwroot/{iot => images}/humidity.png (100%) create mode 100644 projects/IoT.Shared/wwwroot/images/humiture.png create mode 100644 projects/IoT.Shared/wwwroot/images/infrared.png rename projects/IoT.Shared/wwwroot/{iot => images}/left.png (100%) create mode 100644 projects/IoT.Shared/wwwroot/images/light.png create mode 100644 projects/IoT.Shared/wwwroot/images/monitor.png rename projects/IoT.Shared/wwwroot/{iot => images}/natural.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/off.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/on.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/open.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/pc.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/play.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/pm25.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/projector.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/right.png (100%) create mode 100644 projects/IoT.Shared/wwwroot/images/safe.png rename projects/IoT.Shared/wwwroot/{iot => images}/shot.png (100%) create mode 100644 projects/IoT.Shared/wwwroot/images/smoke.png create mode 100644 projects/IoT.Shared/wwwroot/images/socket.png rename projects/IoT.Shared/wwwroot/{iot => images}/sp.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/stop.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/switch.png (100%) create mode 100644 projects/IoT.Shared/wwwroot/images/switch1.png create mode 100644 projects/IoT.Shared/wwwroot/images/switch2.png create mode 100644 projects/IoT.Shared/wwwroot/images/switch3.png rename projects/IoT.Shared/wwwroot/{iot => images}/turndown.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/turnleft.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/turnright.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/turnup.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/warning.wav (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/zoomin.png (100%) rename projects/IoT.Shared/wwwroot/{iot => images}/zoomout.png (100%) delete mode 100644 projects/IoT.Shared/wwwroot/iot/alarm.png delete mode 100644 projects/IoT.Shared/wwwroot/iot/ap.png delete mode 100644 projects/IoT.Shared/wwwroot/iot/camera.png delete mode 100644 projects/IoT.Shared/wwwroot/iot/classroom.jpg delete mode 100644 projects/IoT.Shared/wwwroot/iot/curtain.png delete mode 100644 projects/IoT.Shared/wwwroot/iot/gateway.png delete mode 100644 projects/IoT.Shared/wwwroot/iot/light.png delete mode 100644 projects/IoT.Shared/wwwroot/iot/lighting.png delete mode 100644 projects/IoT.Shared/wwwroot/iot/monitor.png delete mode 100644 projects/IoT.Shared/wwwroot/iot/safe.png delete mode 100644 projects/IoT.Shared/wwwroot/iot/smoke.png delete mode 100644 projects/IoT.Shared/wwwroot/iot/socket.png delete mode 100644 projects/IoT.Shared/wwwroot/iot/temperature.png create mode 100644 projects/IoTCenter/Areas/Admin/ViewModels/CategoryViewModel.cs create mode 100644 projects/IoTCenter/Areas/Admin/ViewModels/HomeIndexViewModel.cs create mode 100644 projects/IoTCenter/Areas/Admin/ViewModels/NodeViewModel.cs create mode 100644 projects/IoTCenter/Areas/Admin/ViewModels/ProductViewModel.cs create mode 100644 projects/IoTCenter/wwwroot/index.html diff --git a/docs/研发/v1.0任务分解.xlsx b/docs/研发/v1.0任务分解.xlsx index 67ef239e846adff2223c0b4a6fa889f333266c7c..19c7c0063c002cba301108cae2908773ebad293f 100644 GIT binary patch delta 15013 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

%G#o&ue5PNTd+!z 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 delta 13044 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 diff --git a/projects/Infrastructure/Data/EfDbContext.cs b/projects/Infrastructure/Data/EfDbContext.cs index 32d8e4e9..ca6c9abf 100644 --- a/projects/Infrastructure/Data/EfDbContext.cs +++ b/projects/Infrastructure/Data/EfDbContext.cs @@ -1,23 +1,17 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; using Infrastructure.Domain; using Infrastructure.Extensions; -using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; namespace Infrastructure.Data { public class EfDbContext : DbContext { - public static readonly LoggerFactory MyLoggerFactory = new LoggerFactory( - //new[] - //{ - // //new ConsoleLoggerProvider((_, __) => true, true) - //} - ); + public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); }); public EfDbContext(DbContextOptions options) : base(options) { diff --git a/projects/IoT.Shared/Application/Domain/Entities/Category.cs b/projects/IoT.Shared/Application/Domain/Entities/Category.cs index e1768ec4..37faff2e 100644 --- a/projects/IoT.Shared/Application/Domain/Entities/Category.cs +++ b/projects/IoT.Shared/Application/Domain/Entities/Category.cs @@ -13,7 +13,7 @@ namespace Application.Domain.Entities public string Number { get; set; } [Display(Name = "分类图标")] - public string Icon { get; set; } + public string Image { get; set; } public List Products { get; set; } = new List(); } diff --git a/projects/IoT.Shared/Application/Domain/Entities/Node.cs b/projects/IoT.Shared/Application/Domain/Entities/Node.cs index d259c63e..17ba6e69 100644 --- a/projects/IoT.Shared/Application/Domain/Entities/Node.cs +++ b/projects/IoT.Shared/Application/Domain/Entities/Node.cs @@ -14,12 +14,6 @@ namespace Application.Domain.Entities [Required] public string Number { get; set; } - [Display(Name = "是否在线")] - public bool IsOnline { get; set; } - - [Display(Name = "图标")] - public string Icon { get; set; } - [Display(Name = "图片")] public string Image { get; set; } diff --git a/projects/IoT.Shared/Application/Domain/Entities/Product.cs b/projects/IoT.Shared/Application/Domain/Entities/Product.cs index be8933d6..da2c61d6 100644 --- a/projects/IoT.Shared/Application/Domain/Entities/Product.cs +++ b/projects/IoT.Shared/Application/Domain/Entities/Product.cs @@ -16,7 +16,7 @@ namespace Application.Domain.Entities public string Number { get; set; } [Display(Name = "图标")] - public string Icon { get; set; } + public string Image { get; set; } [Display(Name = "ApiJson")] public string ApiJson { get; set; } diff --git a/projects/IoT.Shared/Application/Models/DeviceSearchMode.cs b/projects/IoT.Shared/Application/Models/DeviceSearchMode.cs index 29b3491a..762dca90 100644 --- a/projects/IoT.Shared/Application/Models/DeviceSearchMode.cs +++ b/projects/IoT.Shared/Application/Models/DeviceSearchMode.cs @@ -10,6 +10,14 @@ namespace Application.Models [Display(Name = "节点")] public Guid? NodeId { get; set; } + [DataType("SelectList")] + [Display(Name = "分类")] + public Guid? CategoryId { get; set; } + + [DataType("SelectList")] + [Display(Name = "产品")] + public Guid? ProductId { get; set; } + [Display(Name = "关键词")] public string Keyword { get; set; } } diff --git a/projects/IoT.Shared/Application/Models/EditCategoryModel.cs b/projects/IoT.Shared/Application/Models/EditCategoryModel.cs index 05521fa0..67048e23 100644 --- a/projects/IoT.Shared/Application/Models/EditCategoryModel.cs +++ b/projects/IoT.Shared/Application/Models/EditCategoryModel.cs @@ -18,6 +18,7 @@ namespace Application.Models [Display(Name = "Icon")] [Required(ErrorMessage = nameof(RequiredAttribute))] - public string Icon { get; set; } + [DataType(DataType.ImageUrl)] + public string Image { get; set; } } } \ No newline at end of file diff --git a/projects/IoT.Shared/Application/Models/EditNodeModel.cs b/projects/IoT.Shared/Application/Models/EditNodeModel.cs index 0baedf8d..33ae23f6 100644 --- a/projects/IoT.Shared/Application/Models/EditNodeModel.cs +++ b/projects/IoT.Shared/Application/Models/EditNodeModel.cs @@ -16,16 +16,10 @@ namespace Application.Models [Required(ErrorMessage = nameof(RequiredAttribute))] public string Number { get; set; } - [Display(Name = "Icon")] - [Required(ErrorMessage = nameof(RequiredAttribute))] - public string Icon { get; set; } - [Display(Name = "图片")] + [DataType(DataType.ImageUrl)] public string Image { get; set; } - [Display(Name = "是否在线")] - public bool IsOnline { get; set; } - [Display(Name = "经度")] public decimal Longitude { get; set; } diff --git a/projects/IoT.Shared/Application/Models/EditProductModel.cs b/projects/IoT.Shared/Application/Models/EditProductModel.cs index 1fc97890..20b8d5d7 100644 --- a/projects/IoT.Shared/Application/Models/EditProductModel.cs +++ b/projects/IoT.Shared/Application/Models/EditProductModel.cs @@ -17,8 +17,9 @@ namespace Application.Models [Display(Name = "产品型号")] public string Number { get; set; } - [Display(Name = "图标")] - public string Icon { get; set; } + [Display(Name = "图片")] + [DataType(DataType.ImageUrl)] + public string Image { get; set; } [Display(Name = "ApiJson")] [DataType(DataType.MultilineText)] diff --git a/projects/IoT.Shared/Application/Models/HomeViewModel.cs b/projects/IoT.Shared/Application/Models/HomeViewModel.cs deleted file mode 100644 index d6836d1e..00000000 --- a/projects/IoT.Shared/Application/Models/HomeViewModel.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Application.Domain.Entities; -using System.Collections.Generic; - -namespace Application.Models -{ - public class HomeViewModel - { - public Node Node { get; set; } = new Node(); - public List Devices { get; set; } = new List(); - public List Scenes { get; set; } = new List(); - } -} \ No newline at end of file diff --git a/projects/IoT.Shared/Areas/Admin/Controlls/DeviceController.cs b/projects/IoT.Shared/Areas/Admin/Controlls/DeviceController.cs index f05f1537..d74695d1 100644 --- a/projects/IoT.Shared/Areas/Admin/Controlls/DeviceController.cs +++ b/projects/IoT.Shared/Areas/Admin/Controlls/DeviceController.cs @@ -32,8 +32,13 @@ namespace IoT.Shared.Areas.Admin.Controlls { throw new ArgumentNullException(nameof(model)); } + ViewData.SelectList(o => model.NodeId, () => this._ajax.GetNodeSelectList(model.NodeId)); + ViewData.SelectList(o => model.CategoryId, () => this._ajax.GetCategorySelectList(model.CategoryId)); + ViewData.SelectList(o => model.ProductId, () => this._ajax.GetProductSelectList(model.ProductId)); return query .WhereIf(model.NodeId.HasValue, o => o.NodeId == model.NodeId.Value) + .WhereIf(model.CategoryId.HasValue, o => o.Product.CategoryId == model.CategoryId.Value) + .WhereIf(model.ProductId.HasValue, o => o.ProductId == model.ProductId.Value) .WhereIf(!string.IsNullOrEmpty(model.Keyword), o => o.Name.Contains(model.Keyword)); } diff --git a/projects/IoT.Shared/IoT.Shared.csproj b/projects/IoT.Shared/IoT.Shared.csproj index 531de393..023ab65a 100644 --- a/projects/IoT.Shared/IoT.Shared.csproj +++ b/projects/IoT.Shared/IoT.Shared.csproj @@ -26,7 +26,9 @@   - + + + diff --git a/projects/IoT.Shared/IoTServiceStartup.cs b/projects/IoT.Shared/IoTServiceStartup.cs index 3ed8b7fa..63fb6677 100644 --- a/projects/IoT.Shared/IoTServiceStartup.cs +++ b/projects/IoT.Shared/IoTServiceStartup.cs @@ -176,11 +176,11 @@ namespace IoT.UI.Shard }); dbContext.SaveChanges(); - dbContext.Set().Add(new Category { Id = Guid.Parse("BA92B82B-1E92-428B-92ED-28AD93FB7514"), Number = "00", Name = "网关", Icon = "gateway" }); - dbContext.Set().Add(new Category { Id = Guid.Parse("8E271914-622C-4B4D-BD33-78993F99BE43"), Number = "10", Name = "安防", Icon = "safe" }); - dbContext.Set().Add(new Category { Id = Guid.Parse("F510E634-5D1E-4398-A121-6945D43B5A5C"), Number = "20", Name = "电器", Icon = "electric" }); - dbContext.Set().Add(new Category { Id = Guid.Parse("AC2A427C-173C-4277-B9C5-3B73FFE841C9"), Number = "30", Name = "照明", Icon = "lighting" }); - dbContext.Set().Add(new Category { Id = Guid.Parse("67FC5B9D-6479-4714-8D07-E24EF0AEB502"), Number = "40", Name = "监测", Icon = "monitor" }); + dbContext.Set().Add(new Category { Id = Guid.Parse("BA92B82B-1E92-428B-92ED-28AD93FB7514"), Number = "00", Name = "网关", Image = "/images/gateway.png" }); + dbContext.Set().Add(new Category { Id = Guid.Parse("8E271914-622C-4B4D-BD33-78993F99BE43"), Number = "10", Name = "安防", Image = "/images/safe.png" }); + dbContext.Set().Add(new Category { Id = Guid.Parse("F510E634-5D1E-4398-A121-6945D43B5A5C"), Number = "20", Name = "电器", Image = "/images/socket.png" }); + dbContext.Set().Add(new Category { Id = Guid.Parse("AC2A427C-173C-4277-B9C5-3B73FFE841C9"), Number = "30", Name = "照明", Image = "/images/light.png" }); + dbContext.Set().Add(new Category { Id = Guid.Parse("67FC5B9D-6479-4714-8D07-E24EF0AEB502"), Number = "40", Name = "监测", Image = "/images/monitor.png" }); dbContext.SaveChanges(); } } diff --git a/projects/IoT.Shared/Views/Device/Details.cshtml b/projects/IoT.Shared/Views/Device/Details.cshtml index 664648c9..bd4e29ef 100644 --- a/projects/IoT.Shared/Views/Device/Details.cshtml +++ b/projects/IoT.Shared/Views/Device/Details.cshtml @@ -47,7 +47,7 @@

- {{model.DisplayName}} + {{model.DisplayName}}
@@ -160,7 +160,7 @@
- + diff --git a/projects/IoT.Shared/Views/Device/Index.cshtml b/projects/IoT.Shared/Views/Device/Index.cshtml index 5cea08bb..70a015f0 100644 --- a/projects/IoT.Shared/Views/Device/Index.cshtml +++ b/projects/IoT.Shared/Views/Device/Index.cshtml @@ -37,7 +37,7 @@
- {{device.DisplayName}} + {{device.DisplayName}}
@@ -126,7 +126,7 @@
- + diff --git a/projects/IoT.Shared/Views/Home/Node.cshtml b/projects/IoT.Shared/Views/Home/Node.cshtml index 0b4db400..b5d9e1ce 100644 --- a/projects/IoT.Shared/Views/Home/Node.cshtml +++ b/projects/IoT.Shared/Views/Home/Node.cshtml @@ -40,7 +40,7 @@
-
+
{{scene.Name}}
@@ -59,32 +59,32 @@
-
+
{{getDeviceDataValue(d,"温度")}} {{getDeviceDataValue(d,"湿度")}}
-
+
{{getDeviceDataValue(d,"二氧化碳")}}
-
+
{{getDeviceDataValue(d,"光照强度")}}
-
+
{{getDeviceDataValue(d,"粉尘")}}
-
+
{{getDeviceDataValue(d,"状态")}}
-
+
{{getDeviceDataValue(d,"状态")}}
@@ -97,14 +97,14 @@ 主机
- - + +
-
+
{{getDeviceDataValue(d,"计算机名")}}
@@ -114,9 +114,9 @@
发送:{{getDeviceDataValue(d,"发送")}} 接收{{getDeviceDataValue(d,"接收")}}
- - - + + +
@@ -131,7 +131,7 @@
-
+
{{getDeviceDataValue(d,"名称")}}
@@ -152,20 +152,20 @@ 窗帘
- - - + + +
-
+
{{d.DisplayName}} {{getDeviceDataValue(d,"状态")}}
- - - + + +
@@ -176,65 +176,65 @@ 开关
- - + +
-
+
{{d.DisplayName}} {{getDeviceDataValue(d,"状态")}}
- - + +
-
+
{{d.DisplayName}} {{getDeviceDataValue(d,"状态")}}
- - + +
-
+
{{d.DisplayName}}
- - + +
- - - - + + + +
-
+
{{d.DisplayName}}
- - + +
- - - - - - + + + + + +
@@ -245,18 +245,18 @@ 插座
- - + +
-
+
{{d.DisplayName}} {{getDeviceDataValue(d,"状态")}}
- - + +
@@ -267,18 +267,18 @@ 插座
- - + +
-
+
{{d.DisplayName}} {{getDeviceDataValue(d,"状态")}}
- - + +
@@ -289,18 +289,18 @@ 插座
- - + +
-
+
{{d.DisplayName}} {{getDeviceDataValue(d,"状态")}}
- - + +
@@ -311,16 +311,16 @@ 门锁
- +
-
+
{{d.DisplayName}} {{getDeviceDataValue(d,"状态")}}
- +
@@ -333,14 +333,14 @@
-
+
{{d.DisplayName}}