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+ }
0 commit comments