using Furion.DependencyInjection; using Furion.ViewEngine; using Microsoft.AspNetCore.Http; using Nirvana.Common; using SqlSugar; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using YBDevice.Entity; namespace YBDevice.Application.ViewInfo { public class ViewEngineService : IViewEngineService, ITransient { private readonly ISqlSugarRepository repository; private readonly SqlSugarClient dbClient; private readonly IHttpContextAccessor _httpContextAccessor; private readonly IViewEngine _viewEngine; private readonly OperatorModel currentUser; public ViewEngineService(ISqlSugarRepository sqlSugarRepository, IHttpContextAccessor httpContextAccessor, IViewEngine viewEngine) { repository = sqlSugarRepository; dbClient = repository.Context; _httpContextAccessor = httpContextAccessor; _viewEngine = viewEngine; currentUser = BaseInfoService.GetUserInfo(); } /// /// 获取指定页面的按钮列表 /// /// public async Task GetBtnListAsync() { //根据请求的控制器和方法确定按钮列表 var request = _httpContextAccessor.HttpContext.Request; var path = request.Path.Value; var arr = path.Split('/'); if (arr.Length != 3) { return new ViewS2SDto(); } string controlname = arr[1].ToLower(); string actionname = arr[2].ToLower(); var list = new List(); if (currentUser.IsSuper) { list = await dbClient.Queryable().Where(x => x.ControlName == controlname && x.ActionName == actionname) .OrderBy(x => x.SortCode, OrderByType.Asc) .ToListAsync(); } else { list = await dbClient.Queryable() .Where(x => SqlFunc.Subqueryable() .Where(e => e.RoleId == currentUser.RoleId && e.ButtonId == x.Id).Any() && x.ControlName == controlname && x.ActionName == actionname) .OrderBy(x => x.SortCode, OrderByType.Asc) .ToListAsync(); } var toplist = list.Where(x => x.Type == MenuButtonPosition.Top).ToList(); var tabletoplist = list.Where(x => x.Type == MenuButtonPosition.TableTop).ToList(); var tablelist = list.Where(x => x.Type == MenuButtonPosition.Table).ToList(); var data = new ViewS2SDto(); if (toplist != null && toplist.Count > 0) { data.Top = await _viewEngine.RunCompileFromCachedAsync(@" @foreach(var item in Model) { } ", toplist); } if (tabletoplist != null && tabletoplist.Count > 0) { if (controlname == "code" && actionname == "template") { data.TableTop = await _viewEngine.RunCompileFromCachedAsync(@" @foreach(var item in Model) { @if(item.ButtonId ==""tpl"") { @item.ButtonName } else{ } }", tabletoplist); } else { data.TableTop = await _viewEngine.RunCompileFromCachedAsync(@" @foreach(var item in Model) { } ", tabletoplist); } } if (tablelist != null && tablelist.Count > 0) { if (controlname == "device" && actionname == "index") { data.Table = await _viewEngine.RunCompileFromCachedAsync(@" @foreach(var item in Model) { @if(item.ButtonId ==""Set"") { @:{{# if(d.status == 0){ }} 启用 @:{{# }else if(d.status==1){ }} 停用 @:{{# } }} } else{ @item.ButtonName } }", tablelist); } else if (controlname == "miniprogram" && actionname == "index") { data.Table = await _viewEngine.RunCompileFromCachedAsync(@" @foreach(var item in Model) { @if(item.ButtonId ==""detail"" || item.ButtonId ==""tycode"" || item.ButtonId ==""Update"" || item.ButtonId ==""Tpl"" || item.ButtonId ==""CService"") { @:{{# if(d.service_type_info !=""小程序""){ }} @item.ButtonName @:{{# }else{ }} @:{{# } }} } else{ @item.ButtonName } }", tablelist); } else if (controlname == "order" && actionname == "index") { data.Table = await _viewEngine.RunCompileFromCachedAsync(@" @foreach(var item in Model) { @if(item.ButtonId ==""Set"") { @:{{# if(d.status == 1){ }} 暂停 @:{{# }else if(d.status==2){ }} 开启 取消 @:{{# } }} } else if(item.ButtonId == ""edit""){ @:{{# if(d.status == 1){ }} @:{{# }else if(d.status==2){ }} 编辑 @:{{# } }} } else{ @item.ButtonName } }", tablelist); } else if ((controlname == "banner" || controlname == "info") && actionname == "index") { data.Table = await _viewEngine.RunCompileFromCachedAsync(@" @foreach(var item in Model) { @if(item.ButtonId ==""Set"") { @:{{# if(d.status == 0){ }} 发布 @:{{# }else{ }} 下架 @:{{# } }} } else{ @item.ButtonName } }", tablelist); } else if (controlname == "info" && actionname == "type") { data.Table = await _viewEngine.RunCompileFromCachedAsync(@" @foreach(var item in Model) { @if(item.ButtonId ==""Set"") { @:{{# if(d.status == 1){ }} 禁用 @:{{# }else{ }} 启用 @:{{# } }} } else{ @item.ButtonName } }", tablelist); } else if (controlname == "result" && actionname == "index") { data.Table = await _viewEngine.RunCompileFromCachedAsync(@" @foreach(var item in Model) { @if(item.ButtonId ==""print"") { @:{{# if(d.devtype == 2 || d.devtype ==9 || d.devtype ==11 || d.devtype == 17 || d.devtype == 23 || d.devtype == 36 || d.devtype == 37){ }} @item.ButtonName @:{{# }else{ }} @:{{# } }} } else{ @item.ButtonName } }", tablelist); } else if (controlname == "outproduct" && actionname == "index") { data.Table = await _viewEngine.RunCompileFromCachedAsync(@" @foreach(var item in Model) { @if(item.ButtonId ==""Set"") { @:{{# if(d.status == 0){ }} 打包 @:{{# }else if(d.status == 1){ }} 已发货 @:{{# }else if(d.status == 3){ }} 已收货 @:{{# } }} }else if(item.ButtonId == ""cancel""){ @:{{# if(d.status != 4 && d.status != 5){ }} 取消 @:{{# } }} } else{ @item.ButtonName } }", tablelist); } else { data.Table = await _viewEngine.RunCompileFromCachedAsync(@" @foreach(var item in Model) { @if(item.ButtonId ==""Set"") { @:{{# if(d.status == 0){ }} 启用 @:{{# }else if(d.status==1){ }} 停用 @:{{# } }} } else{ @item.ButtonName } }", tablelist); } } return data; } } }