Skip to content

Commit

Permalink
优化ZeroServer节点管理,完善页面查询
Browse files Browse the repository at this point in the history
  • Loading branch information
nnhy committed Jun 30, 2024
1 parent d6adf29 commit 2926328
Show file tree
Hide file tree
Showing 17 changed files with 347 additions and 56 deletions.
13 changes: 13 additions & 0 deletions Samples/IoTZero/Areas/IoT/Views/NodeOnline/_List_Search.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@using Stardust.Data.Nodes;
@using NewLife;
@using NewLife.Web;
@using XCode;
@{
var fact = ViewBag.Factory as IEntityFactory;
var page = ViewBag.Page as Pager;
}
<div class="form-group">
<label for="category" class="control-label">类别:</label>
@Html.ForDropDownList("category", Node.FindAllCategory(), page["category"], "全部", true)
</div>
@await Html.PartialAsync("_Area2", "")
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
@using NewLife.Common;
@using System.Collections.Generic;
@{
var set = ViewBag.PageSetting as PageSetting;
var page = ViewBag.Page as Pager;
}
@if (set.EnableSelect)
{
<button type="button" class="btn btn-success btn-sm" data-action="action" data-url="@Url.Action("CheckUpgrade")" data-fields="keys" disabled>
检查更新
</button>
<button type="button" class="btn btn-success btn-sm" data-action="action" data-url="@Url.Action("Restart")" data-fields="keys" disabled>
重启服务
</button>
<button type="button" class="btn btn-success btn-sm" data-action="action" data-url="@Url.Action("Reboot")" data-fields="keys" disabled>
重启系统
</button>
<div class="form-group">
<label for="command" class="control-label">命令:</label>
@Html.TextBox("command", page["command"])
<label for="argument" class="control-label">参数:</label>
@Html.TextBox("argument", page["argument"])
</div>
<button type="button" class="btn btn-purple btn-sm" data-action="action" data-url="@Url.Action("Execute")" data-fields="keys,command,argument">
执行命令
</button>
}
56 changes: 29 additions & 27 deletions Samples/ZeroServer/Areas/Nodes/Controllers/NodeController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,50 +14,52 @@ namespace ZeroServer.Areas.Nodes.Controllers;
/// <summary>节点</summary>
[Menu(30, true, Icon = "fa-table")]
[NodesArea]
public class NodeController : EntityController<Node>
public class NodeController : NodeEntityController<Node>
{
static NodeController()
{
//LogOnChange = true;
LogOnChange = true;

//ListFields.RemoveField("Id", "Creator");
ListFields.RemoveCreateField().RemoveRemarkField();

//{
// var df = ListFields.GetField("Code") as ListField;
// df.Url = "?code={Code}";
//}
//{
// var df = ListFields.AddListField("devices", null, "Onlines");
// df.DisplayName = "查看设备";
// df.Url = "Device?groupId={Id}";
// df.DataVisible = e => (e as Node).Devices > 0;
//}
//{
// var df = ListFields.GetField("Kind") as ListField;
// df.GetValue = e => ((Int32)(e as Node).Kind).ToString("X4");
//}
//ListFields.TraceUrl("TraceId");
{
var df = ListFields.GetField("Name") as ListField;
df.Url = "/Nodes/Node/Detail?id={Id}";
df.Target = "_blank";
}
{
var df = ListFields.AddListField("Log", "UpdateTime");
df.DisplayName = "日志";
df.Url = "/Admin/Log?category=节点&linkId={Id}";
df.Target = "_frame";
}
}

//private readonly ITracer _tracer;

//public NodeController(ITracer tracer)
//{
// _tracer = tracer;
//}

/// <summary>高级搜索。列表页查询、导出Excel、导出Json、分享页等使用</summary>
/// <param name="p">分页器。包含分页排序参数,以及Http请求参数</param>
/// <returns></returns>
protected override IEnumerable<Node> Search(Pager p)
{
//var deviceId = p["deviceId"].ToInt(-1);
//var enable = p["enable"]?.Boolean();
var nodeId = p["Id"].ToInt(-1);
if (nodeId > 0)
{
var node = Node.FindByKey(nodeId);
if (node != null) return [node];
}

var rids = p["areaId"].SplitAsInt("/");
var provinceId = rids.Length > 0 ? rids[0] : -1;
var cityId = rids.Length > 1 ? rids[1] : -1;

var category = p["category"];
var product = p["product"];
var version = p["version"];
var enable = p["enable"]?.ToBoolean();

var start = p["dtStart"].ToDateTime();
var end = p["dtEnd"].ToDateTime();

return Node.Search(start, end, p["Q"], p);
return Node.Search(provinceId, cityId, category, product, version, enable, start, end, p["Q"], p);
}
}
22 changes: 10 additions & 12 deletions Samples/ZeroServer/Areas/Nodes/Controllers/NodeHistoryController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ namespace ZeroServer.Areas.Nodes.Controllers;
/// <summary>节点历史</summary>
[Menu(10, true, Icon = "fa-table")]
[NodesArea]
public class NodeHistoryController : EntityController<NodeHistory>
public class NodeHistoryController : NodeEntityController<NodeHistory>
{
static NodeHistoryController()
{
//LogOnChange = true;

//ListFields.RemoveField("Id", "Creator");
ListFields.RemoveField("ProvinceName");
ListFields.RemoveCreateField().RemoveRemarkField();

//{
Expand All @@ -40,24 +40,22 @@ static NodeHistoryController()
ListFields.TraceUrl("TraceId");
}

//private readonly ITracer _tracer;

//public NodeHistoryController(ITracer tracer)
//{
// _tracer = tracer;
//}

/// <summary>高级搜索。列表页查询、导出Excel、导出Json、分享页等使用</summary>
/// <param name="p">分页器。包含分页排序参数,以及Http请求参数</param>
/// <returns></returns>
protected override IEnumerable<NodeHistory> Search(Pager p)
{
//var deviceId = p["deviceId"].ToInt(-1);
//var enable = p["enable"]?.Boolean();
var rids = p["areaId"].SplitAsInt("/");
var provinceId = rids.Length > 0 ? rids[0] : -1;
var cityId = rids.Length > 1 ? rids[1] : -1;

var nodeId = p["nodeId"].ToInt(-1);
var action = p["action"];
var success = p["success"]?.ToBoolean();

var start = p["dtStart"].ToDateTime();
var end = p["dtEnd"].ToDateTime();

return NodeHistory.Search(start, end, p["Q"], p);
return NodeHistory.Search(nodeId, provinceId, cityId, action, success, start, end, p["Q"], p);
}
}
20 changes: 8 additions & 12 deletions Samples/ZeroServer/Areas/Nodes/Controllers/NodeOnlineController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ namespace ZeroServer.Areas.Nodes.Controllers;
/// <summary>节点在线</summary>
[Menu(20, true, Icon = "fa-table")]
[NodesArea]
public class NodeOnlineController : EntityController<NodeOnline>
public class NodeOnlineController : NodeEntityController<NodeOnline>
{
static NodeOnlineController()
{
//LogOnChange = true;

//ListFields.RemoveField("Id", "Creator");
ListFields.RemoveField("ProvinceName", "Token");
ListFields.RemoveCreateField().RemoveRemarkField();

//{
Expand All @@ -40,24 +40,20 @@ static NodeOnlineController()
//ListFields.TraceUrl("TraceId");
}

//private readonly ITracer _tracer;

//public NodeOnlineController(ITracer tracer)
//{
// _tracer = tracer;
//}

/// <summary>高级搜索。列表页查询、导出Excel、导出Json、分享页等使用</summary>
/// <param name="p">分页器。包含分页排序参数,以及Http请求参数</param>
/// <returns></returns>
protected override IEnumerable<NodeOnline> Search(Pager p)
{
//var deviceId = p["deviceId"].ToInt(-1);
//var enable = p["enable"]?.Boolean();
var nodeId = p["nodeId"].ToInt(-1);
var rids = p["areaId"].SplitAsInt("/");
var provinceId = rids.Length > 0 ? rids[0] : -1;
var cityId = rids.Length > 1 ? rids[1] : -1;
var category = p["category"];

var start = p["dtStart"].ToDateTime();
var end = p["dtEnd"].ToDateTime();

return NodeOnline.Search(start, end, p["Q"], p);
return NodeOnline.Search(nodeId, provinceId, cityId, category, start, end, p["Q"], p);
}
}
34 changes: 34 additions & 0 deletions Samples/ZeroServer/Areas/Nodes/NodesArea.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,45 @@
using System.ComponentModel;
using Microsoft.AspNetCore.Mvc.Filters;
using NewLife;
using NewLife.Cube;
using NewLife.Cube.ViewModels;
using XCode;

namespace ZeroServer.Areas.Nodes;

[DisplayName("节点管理")]
public class NodesArea : AreaBase
{
public NodesArea() : base(nameof(NodesArea).TrimEnd("Area")) { }
}

/// <summary>节点管理控制器基类。抽象共性能力</summary>
/// <typeparam name="TEntity"></typeparam>
public abstract class NodeEntityController<TEntity> : EntityController<TEntity> where TEntity : Entity<TEntity>, new()
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);

var nodeId = GetRequest("Id").ToInt(-1);
if (nodeId <= 0) nodeId = GetRequest("nodeId").ToInt(-1);
if (nodeId > 0)
{
PageSetting.NavView = "_Node_Nav";
PageSetting.EnableNavbar = false;
}
}

protected override FieldCollection OnGetFields(ViewKinds kind, Object model)
{
var fields = base.OnGetFields(kind, model);

if (kind == ViewKinds.List)
{
var nodeId = GetRequest("nodeId").ToInt(-1);
if (nodeId > 0) fields.RemoveField("NodeName");
}

return fields;
}
}
22 changes: 22 additions & 0 deletions Samples/ZeroServer/Areas/Nodes/Views/Node/_List_Search.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
@using NewLife;
@using NewLife.Web;
@using NewLife.Cube;
@using XCode;
@{
var fact = ViewBag.Factory as IEntityFactory;
var page = ViewBag.Page as Pager;
}
<div class="form-group">
<label for="category" class="control-label">类别:</label>
@Html.ForDropDownList("category", Node.FindAllCategory(), page["category"], "全部", true)
</div>
<div class="form-group">
<label for="product" class="control-label">产品:</label>
@Html.ForDropDownList("product", Node.FindAllProduct(), page["product"], "全部", true)
</div>
<div class="form-group">
<label for="version" class="control-label">版本:</label>
@Html.ForDropDownList("version", Node.FindAllVersion(), page["version"], "全部", true)
</div>
@await Html.PartialAsync("_Area2", "")
@await Html.PartialAsync("_DateRange")
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
@using NewLife;
@using NewLife.Web;
@using NewLife.Cube;
@using XCode;
@{
var fact = ViewBag.Factory as IEntityFactory;
var page = ViewBag.Page as Pager;

var dic = new Dictionary<Int32, String>();
dic.Add(1, "成功");
dic.Add(0, "失败");
}
<div class="form-group">
<label for="success" class="control-label">状态:</label>
@Html.ForDropDownList("success", dic, page["success"], "全部", true)
</div>
@await Html.PartialAsync("_SelectNode", new SelectNodeModel { Id = "nodeId" })
@await Html.PartialAsync("_DateRange")
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
@using NewLife;
@using NewLife.Web;
@using XCode;
@{
var fact = ViewBag.Factory as IEntityFactory;
var page = ViewBag.Page as Pager;
}
<div class="form-group">
<label for="category" class="control-label">类别:</label>
@Html.ForDropDownList("category", Node.FindAllCategory(), page["category"], "全部", true)
</div>
@await Html.PartialAsync("_Area2", "")
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
@using NewLife.Common;
@using System.Collections.Generic;
@{
var set = ViewBag.PageSetting as PageSetting;
var page = ViewBag.Page as Pager;
}
@if (set.EnableSelect)
{
<button type="button" class="btn btn-success btn-sm" data-action="action" data-url="@Url.Action("CheckUpgrade")" data-fields="keys" disabled>
检查更新
</button>
<div class="form-group">
<label for="command" class="control-label">命令:</label>
@Html.TextBox("command", page["command"])
<label for="argument" class="control-label">参数:</label>
@Html.TextBox("argument", page["argument"])
</div>
<button type="button" class="btn btn-purple btn-sm" data-action="action" data-url="@Url.Action("Execute")" data-fields="keys,command,argument">
执行命令
</button>
}
9 changes: 9 additions & 0 deletions Samples/ZeroServer/Areas/Nodes/Views/_ViewImports.cshtml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@using NewLife
@using NewLife.Cube
@using NewLife.Reflection
@using NewLife.Web
@using XCode
@using XCode.Membership
@using Zero.Data.Nodes
@using ZeroServer.Models
12 changes: 12 additions & 0 deletions Samples/ZeroServer/Models/SelectNodeModel.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace ZeroServer.Models;

public class SelectNodeModel
{
public String Id { get; set; }

public String Category { get; set; }

public String Product { get; set; }

public Int32 NodeId { get; set; }
}
3 changes: 2 additions & 1 deletion Samples/ZeroServer/Services/NodeService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,8 @@ public IProducerConsumer<String> GetQueue(String deviceCode)
/// <param name="ip"></param>
public void WriteHistory(IDeviceModel model, String action, Boolean success, String remark, String ip)
{
NodeHistory.Create(model as Node, action, success, remark, Environment.MachineName, ip);
var history = NodeHistory.Create(model as Node, action, success, remark, Environment.MachineName, ip);
history.SaveAsync();
}
#endregion
}
Loading

0 comments on commit 2926328

Please sign in to comment.