Skip to content
This repository was archived by the owner on Feb 18, 2024. It is now read-only.

Commit 694fe45

Browse files
committed
优化FSS UI,增加全部任务页面
1 parent 42363ab commit 694fe45

File tree

6 files changed

+270
-8
lines changed

6 files changed

+270
-8
lines changed
Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
1+
@page "/fss/tasks/alllist/{pageIndex:int}"
2+
@page "/fss/tasks/alllist"
3+
@using FOPS.Abstract.Fss.Server
4+
@using FOPS.Abstract.Fss.Entity
5+
@using FOPS.Abstract.Fss.Enum
6+
@using FS.Extends
7+
@using System.Timers
8+
@inject IIocManager _iocManager;
9+
@inject NavigationManager nav;
10+
@inject IJSRuntime js;
11+
@inject Blazored.LocalStorage.ILocalStorageService storage;
12+
@implements IDisposable;
13+
14+
<div class="layui-card">
15+
<div class="layui-card-header" id="anchor-play-header">
16+
全部任务列表
17+
<select style="display:inline;width: 200px;" @onchange="StatusChange">
18+
<option value="">全部</option>
19+
@foreach (var taskType in typeof(EumTaskType).ToList())
20+
{
21+
<option value="@taskType">@(((EumTaskType)taskType).GetName())</option>
22+
}
23+
</select>
24+
<div class="layui-right">
25+
<button class="layui-btn layui-btn-right" @onclick=GotoList><i class="am-icon-plus"></i>任务组列表</button>
26+
</div>
27+
</div>
28+
<div class="layui-card-body">
29+
<div class="layui-form layui-border-box layui-table-view" lay-filter="LAY-table-1" style=" ">
30+
<div class="layui-table-box">
31+
<div class="layui-table-header">
32+
<table cellspacing="0" cellpadding="0" border="0" class="layui-table" lay-skin="auto" lay-size="sm">
33+
<thead>
34+
<tr>
35+
<th data-field="Type">
36+
<div class="layui-table-cell laytable-cell-task-1">
37+
<span>任务名称</span>
38+
</div>
39+
</th>
40+
<th data-field="Type">
41+
<div class="layui-table-cell laytable-cell-task-2">
42+
<span>计划时间</span>
43+
</div>
44+
</th>
45+
<th data-field="Type">
46+
<div class="layui-table-cell laytable-cell-task-3">
47+
<span>超时时间</span>
48+
</div>
49+
</th>
50+
<th data-field="Type">
51+
<div class="layui-table-cell laytable-cell-task-4">
52+
<span>耗时</span>
53+
</div>
54+
</th>
55+
<th data-field="Type">
56+
<div class="layui-table-cell laytable-cell-task-5">
57+
<span>进度</span>
58+
</div>
59+
</th>
60+
<th data-field="Type">
61+
<div class="layui-table-cell laytable-cell-task-6">
62+
<span>状态</span>
63+
</div>
64+
</th>
65+
<th data-field="Type">
66+
<div class="layui-table-cell laytable-cell-task-7">
67+
<span>客户端ID</span>
68+
</div>
69+
</th>
70+
<th data-field="Type">
71+
<div class="layui-table-cell laytable-cell-task-8">
72+
<span>创建时间</span>
73+
</div>
74+
</th>
75+
</tr>
76+
</thead>
77+
</table>
78+
</div>
79+
<div class="layui-table-body layui-table-main">
80+
<table cellspacing="0" cellpadding="0" border="0" class="layui-table" lay-skin="auto" lay-size="sm">
81+
<tbody>
82+
@for (var index = 0; index < _lst.Count; index++)
83+
{
84+
var info = _lst[index];
85+
<tr data-index="@index">
86+
<td>
87+
<div class="laytable-cell-task-1">
88+
<a href="/fss/tasks/list/@info.TaskGroupId">【@info.JobName@info.Caption</a>
89+
</div>
90+
</td>
91+
<td>
92+
<div class="layui-table-cell laytable-cell-task-2">@info.StartAt.ToString("yyyy-MM-dd HH:mm:ss")</div>
93+
</td>
94+
<td>
95+
<div class="layui-table-cell laytable-cell-task-3">
96+
@{
97+
if (info.Status == EumTaskType.Working)
98+
{
99+
@info.RunAt.ToString("yyyy-MM-dd HH:mm:ss")
100+
}
101+
else if ((DateTime.Now - info.StartAt).TotalSeconds > 1)
102+
{
103+
<strong class='layui-badge layui-bg-red'>@($"超时 {(DateTime.Now - info.StartAt).GetDateDesc()}")</strong>
104+
}
105+
else
106+
{
107+
@($"等待 {(info.StartAt - DateTime.Now).GetDateDesc()}")
108+
}
109+
}
110+
</div>
111+
</td>
112+
<td>
113+
<div class="layui-table-cell laytable-cell-task-4">@info.RunSpeed ms</div>
114+
</td>
115+
<td>
116+
<div class="layui-table-cell laytable-cell-task-5">@info.Progress%</div>
117+
</td>
118+
<td>
119+
<div class="layui-table-cell laytable-cell-task-6">
120+
@switch (info.Status)
121+
{
122+
case EumTaskType.None:
123+
<button class="layui-btn layui-btn-xs layui-btn-primary">@info.Status.GetName()</button>
124+
break;
125+
case EumTaskType.Scheduler:
126+
<button class="layui-btn layui-btn-xs layui-btn-normal">@info.Status.GetName()</button>
127+
break;
128+
case EumTaskType.Working:
129+
<button class="layui-btn layui-btn-xs">@info.Status.GetName()</button>
130+
break;
131+
case EumTaskType.Fail:
132+
<button class="layui-btn layui-btn-xs layui-btn-danger">@info.Status.GetName()</button>
133+
break;
134+
case EumTaskType.Success:
135+
<button class="layui-btn layui-btn-xs">@info.Status.GetName()</button>
136+
break;
137+
case EumTaskType.ReScheduler:
138+
<button class="layui-btn layui-btn-xs layui-btn-danger">@info.Status.GetName()</button>
139+
break;
140+
}
141+
</div>
142+
</td>
143+
<td>
144+
<div class="layui-table-cell laytable-cell-task-7">@info.ClientId</div>
145+
</td>
146+
<td>
147+
<div class="layui-table-cell laytable-cell-task-8">@info.CreateAt.ToString("yyyy-MM-dd HH:mm:ss")</div>
148+
</td>
149+
</tr>
150+
}
151+
</tbody>
152+
</table>
153+
</div>
154+
</div>
155+
<PageSplit PageIndex="@PageIndex" PageSize="@_pageSize" TotalCount="@_totalCount" PageUrl="/fss/tasks/alllist/{index}"></PageSplit>
156+
</div>
157+
</div>
158+
</div>
159+
<style>
160+
.laytable-cell-task-1 {width: 300px;}
161+
.laytable-cell-task-2 {width: 150px;}
162+
.laytable-cell-task-3 {width: 150px;}
163+
.laytable-cell-task-4 {width: 100px;}
164+
.laytable-cell-task-5 {width: 100px;}
165+
.laytable-cell-task-6 {width: 80px;}
166+
.laytable-cell-task-7 {width: 180px;}
167+
.laytable-cell-task-8 {width: 150px;}
168+
</style>
169+
170+
@code{
171+
172+
private int _lastIndex;
173+
[Parameter]
174+
public int PageIndex { get; set; } = 1;
175+
private int _totalCount;
176+
private int _pageSize = 20;
177+
private List<TaskVO> _lst = new();
178+
private EumTaskType? _taskType;
179+
private Timer _timer;
180+
private bool _isFirst;
181+
182+
protected override async Task OnParametersSetAsync()
183+
{
184+
if (_isFirst && _lastIndex == PageIndex) return;
185+
_isFirst = true;
186+
187+
if (PageIndex < 1) PageIndex = 1;
188+
_lastIndex = PageIndex;
189+
await GetList();
190+
}
191+
192+
protected override Task OnAfterRenderAsync(bool firstRender)
193+
{
194+
if (firstRender)
195+
{
196+
_timer = new Timer(5000);
197+
_timer.Elapsed += async (_, _) =>
198+
{
199+
try
200+
{
201+
await GetList();
202+
await InvokeAsync(StateHasChanged);
203+
}
204+
catch (Exception e)
205+
{
206+
Console.WriteLine(e);
207+
}
208+
};
209+
_timer.Enabled = true;
210+
}
211+
return Task.FromResult(0);
212+
}
213+
214+
private async Task GetList()
215+
{
216+
var page = await _iocManager.Resolve<IFssApi>().GetAllTaskListAsync(storage, _taskType, _pageSize, PageIndex);
217+
_lst = page.List;
218+
_totalCount = page.TotalCount;
219+
}
220+
221+
private void GotoList()
222+
{
223+
nav.NavigateTo("/fss/task_group/list");
224+
}
225+
226+
private Task StatusChange(ChangeEventArgs args)
227+
{
228+
if (args.Value.ToString() == "") _taskType = null;
229+
else _taskType = (EumTaskType)args.Value.ConvertType(0);
230+
return GetList();
231+
}
232+
233+
public void Dispose()
234+
{
235+
_timer?.Dispose();
236+
}
237+
}

01_UserInterface(前端界面)/FOPS.Blazor/Pages/fss/tasks/UnRunList.razor

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,11 @@
8282
<td>
8383
<div class="layui-table-cell laytable-cell-task-3">
8484
@{
85-
if ((DateTime.Now - info.StartAt).TotalSeconds > 1)
85+
if (info.Status == EumTaskType.Working)
86+
{
87+
@info.RunAt.ToString("yyyy-MM-dd HH:mm:ss")
88+
}
89+
else if ((DateTime.Now - info.StartAt).TotalSeconds > 1)
8690
{
8791
<strong class='layui-badge layui-bg-red'>@($"超时 {(DateTime.Now - info.StartAt).GetDateDesc()}")</strong>
8892
}
@@ -110,7 +114,7 @@
110114
<button class="layui-btn layui-btn-xs layui-btn-normal">@info.Status.GetName()</button>
111115
break;
112116
case EumTaskType.Working:
113-
<button class="layui-btn layui-btn-xs layui-btn-normal">@info.Status.GetName()</button>
117+
<button class="layui-btn layui-btn-xs">@info.Status.GetName()</button>
114118
break;
115119
case EumTaskType.Fail:
116120
<button class="layui-btn layui-btn-xs layui-btn-danger">@info.Status.GetName()</button>

01_UserInterface(前端界面)/FOPS.Blazor/Shared/LeftMenu.razor

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@
4646
日志
4747
</NavLink>
4848
</dd>
49+
<dd data-name="grid">
50+
<NavLink class="nav-link" href="/fss/tasks/alllist" Match="NavLinkMatch.All">
51+
所有任务
52+
</NavLink>
53+
</dd>
4954
<dd data-name="grid">
5055
<NavLink class="nav-link" href="/fss/tasks/faillist" Match="NavLinkMatch.All">
5156
失败任务

01_UserInterface(前端界面)/FOPS.Blazor/Shared/TaskList.razor

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,15 +144,15 @@
144144
{
145145
if (firstRender)
146146
{
147-
_lst = await _iocManager.Resolve<IFssApi>().GetTopTaskListAsync(storage, 20);
147+
_lst = await _iocManager.Resolve<IFssApi>().GetTaskUnFinishListAsync(storage, 20);
148148
await InvokeAsync(StateHasChanged);
149149

150150
_timer = new Timer(3000);
151151
_timer.Elapsed += async (_, _) =>
152152
{
153153
try
154154
{
155-
_lst = await _iocManager.Resolve<IFssApi>().GetTopTaskListAsync(storage, 20);
155+
_lst = await _iocManager.Resolve<IFssApi>().GetTaskUnFinishListAsync(storage, 20);
156156
// 刷新页面
157157
await InvokeAsync(StateHasChanged);
158158
}

03_Abstract(组件接口)/FOPS.Abstract/Fss/Server/IFssApi.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Threading.Tasks;
33
using Blazored.LocalStorage;
44
using FOPS.Abstract.Fss.Entity;
5+
using FOPS.Abstract.Fss.Enum;
56
using FS.Core;
67
using FS.Core.Net;
78
using FS.DI;
@@ -62,7 +63,7 @@ public interface IFssApi: ISingletonDependency
6263
/// <summary>
6364
/// 获取全部任务列表
6465
/// </summary>
65-
Task<List<TaskVO>> GetTopTaskListAsync(ILocalStorageService localStorageService, int top);
66+
Task<List<TaskVO>> GetTaskUnFinishListAsync(ILocalStorageService localStorageService, int top);
6667
/// <summary>
6768
/// 获取指定任务组的任务列表
6869
/// </summary>
@@ -83,5 +84,9 @@ public interface IFssApi: ISingletonDependency
8384
/// 获取日志
8485
/// </summary>
8586
Task<DataSplitList<RunLogVO>> GetRunLogListAsync(ILocalStorageService localStorageService, string jobName, LogLevel? logLevel, int pageSize, int pageIndex);
87+
/// <summary>
88+
/// 获取所有任务
89+
/// </summary>
90+
Task<DataSplitList<TaskVO>> GetAllTaskListAsync(ILocalStorageService localStorageService, EumTaskType? status, int pageSize, int pageIndex);
8691
}
8792
}

04_Component(业务组件)/FOPS.Com.FssServer/FssApi.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Threading.Tasks;
33
using Blazored.LocalStorage;
44
using FOPS.Abstract.Fss.Entity;
5+
using FOPS.Abstract.Fss.Enum;
56
using FOPS.Abstract.Fss.Server;
67
using FS.Core;
78
using FS.Core.Http;
@@ -129,15 +130,25 @@ public async Task<int> TodayTaskFailCountAsync(ILocalStorageService localStorage
129130
}
130131

131132
/// <summary>
132-
/// 获取全部任务列表
133+
/// 获取进行中的任务
133134
/// </summary>
134-
public async Task<List<TaskVO>> GetTopTaskListAsync(ILocalStorageService localStorageService, int top)
135+
public async Task<List<TaskVO>> GetTaskUnFinishListAsync(ILocalStorageService localStorageService, int top)
135136
{
136137
var fssServer = await localStorageService.GetItemAsStringAsync("FssServer");
137-
var result = await HttpPostJson.TryPostAsync($"{fssServer}/meta/GetTopTaskList", JsonConvert.SerializeObject(new { Top = top }), ApiResponseJson<List<TaskVO>>.Error("出错了"), 2000);
138+
var result = await HttpPostJson.TryPostAsync($"{fssServer}/meta/GetTaskUnFinishList", JsonConvert.SerializeObject(new { Top = top }), ApiResponseJson<List<TaskVO>>.Error("出错了"), 2000);
138139
return result is { Status: true } ? result.Data : new();
139140
}
140141

142+
/// <summary>
143+
/// 获取所有任务
144+
/// </summary>
145+
public async Task<DataSplitList<TaskVO>> GetAllTaskListAsync(ILocalStorageService localStorageService, EumTaskType? status, int pageSize, int pageIndex)
146+
{
147+
var fssServer = await localStorageService.GetItemAsStringAsync("FssServer");
148+
var result = await HttpPostJson.TryPostAsync($"{fssServer}/meta/GetAllTaskList", JsonConvert.SerializeObject(new { Status = status, PageSize = pageSize, PageIndex = pageIndex }), ApiResponseJson<DataSplitList<TaskVO>>.Error("出错了"), 2000);
149+
return result is { Status: true } ? result.Data : new(new(), 0);
150+
}
151+
141152
/// <summary>
142153
/// 获取指定任务组的任务列表
143154
/// </summary>

0 commit comments

Comments
 (0)