iotgateway/WalkingTec.Mvvm/WalkingTec.Mvvm.Core/Grid/GridActionExtension.cs

425 lines
16 KiB
C#
Raw Normal View History

2021-12-14 06:10:44 +00:00
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
namespace WalkingTec.Mvvm.Core
{
/// <summary>
/// GridActionExtension
/// </summary>
public static class GridActionExtensions
{
#region MakeStandardAction
/// <summary>
/// 创建标准动作
/// </summary>
/// <typeparam name="T">继承自TopBasePoco的类</typeparam>
/// <typeparam name="V">继承自ISearcher的类</typeparam>
/// <param name="self">self</param>
/// <param name="controllerName">动作的Controller</param>
/// <param name="standardType">标准动作类型</param>
/// <param name="dialogTitle">弹出窗口的标题,可为空,代表使用默认文字</param>
/// <param name="areaName">域名</param>
/// <param name="dialogWidth">弹出窗口的宽度</param>
/// <param name="dialogHeight">弹出窗口的高度</param>
/// <param name="name">按钮显示的文字</param>
/// <param name="buttonId">Button的id 默认自动生成</param>
/// <param name="whereStr">whereStr</param>
/// <returns>列表动作</returns>
/// <remarks>
/// 根据标准动作类型,创建默认属性的标准动作
/// </remarks>
public static GridAction MakeStandardAction<T, V>(this IBasePagedListVM<T, V> self
, string controllerName
, GridActionStandardTypesEnum standardType
, string dialogTitle
, string areaName = null
, int? dialogWidth = null
, int? dialogHeight = null
, string name = null
, string buttonId = null
, params Expression<Func<T, object>>[] whereStr)
where T : TopBasePoco
where V : ISearcher
{
var iconcls = string.Empty;
var actionName = standardType.ToString();
var gridname = string.Empty;
var paraType = GridActionParameterTypesEnum.NoId;
var showInRow = false;
var hideOnToolBar = false;
var showDialog = true;
var isexport = false;
string msg = null;
var ispost = false;
string qs = null;
switch (standardType)
{
case GridActionStandardTypesEnum.Create:
iconcls = "layui-icon layui-icon-add-1";
gridname = CoreProgram._localizer?["Sys.Create"];
paraType = GridActionParameterTypesEnum.NoId;
break;
case GridActionStandardTypesEnum.AddRow:
iconcls = "layui-icon layui-icon-add-1";
gridname = CoreProgram._localizer?["Sys.Create"];
paraType = GridActionParameterTypesEnum.AddRow;
break;
case GridActionStandardTypesEnum.Edit:
iconcls = "layui-icon layui-icon-edit";
gridname = CoreProgram._localizer?["Sys.Edit"];
paraType = GridActionParameterTypesEnum.SingleId;
showInRow = true;
hideOnToolBar = true;
break;
case GridActionStandardTypesEnum.Delete:
iconcls = "layui-icon layui-icon-delete";
gridname = CoreProgram._localizer?["Sys.Delete"];
paraType = GridActionParameterTypesEnum.SingleId;
showInRow = true;
hideOnToolBar = true;
break;
case GridActionStandardTypesEnum.SimpleDelete:
iconcls = "layui-icon layui-icon-delete";
gridname = CoreProgram._localizer?["Sys.Delete"];
paraType = GridActionParameterTypesEnum.SingleIdWithNull;
showInRow = true;
hideOnToolBar = true;
showDialog = false;
actionName = "BatchDelete";
qs = "_donotuse_sd=1";
ispost = true;
msg = CoreProgram._localizer?["Sys.DeleteConfirm"];
break;
case GridActionStandardTypesEnum.RemoveRow:
iconcls = "layui-icon layui-icon-delete";
gridname = CoreProgram._localizer?["Sys.Delete"];
paraType = GridActionParameterTypesEnum.RemoveRow;
showInRow = true;
hideOnToolBar = true;
break;
case GridActionStandardTypesEnum.Details:
iconcls = "layui-icon layui-icon-form";
gridname = CoreProgram._localizer?["Sys.Details"];
paraType = GridActionParameterTypesEnum.SingleId;
showInRow = true;
hideOnToolBar = true;
break;
case GridActionStandardTypesEnum.BatchEdit:
iconcls = "layui-icon layui-icon-edit";
gridname = CoreProgram._localizer?["Sys.BatchEdit"];
paraType = GridActionParameterTypesEnum.MultiIds;
break;
case GridActionStandardTypesEnum.BatchDelete:
iconcls = "layui-icon layui-icon-delete";
gridname = CoreProgram._localizer?["Sys.BatchDelete"];
paraType = GridActionParameterTypesEnum.MultiIds;
break;
case GridActionStandardTypesEnum.SimpleBatchDelete:
iconcls = "layui-icon layui-icon-delete";
gridname = CoreProgram._localizer?["Sys.BatchDelete"];
paraType = GridActionParameterTypesEnum.MultiIds;
showDialog = false;
msg = CoreProgram._localizer?["Sys.BatchDeleteConfirm"];
actionName = "BatchDelete";
ispost = true;
break;
case GridActionStandardTypesEnum.Import:
iconcls = "layui-icon layui-icon-templeate-1";
gridname = CoreProgram._localizer?["Sys.Import"];
paraType = GridActionParameterTypesEnum.NoId;
break;
case GridActionStandardTypesEnum.ExportExcel:
iconcls = "layui-icon layui-icon-download-circle";
gridname = CoreProgram._localizer?["Sys.Export"];
paraType = GridActionParameterTypesEnum.MultiIdWithNull;
name = CoreProgram._localizer?["Sys.ExportExcel"];
showInRow = false;
showDialog = false;
hideOnToolBar = false;
isexport = true;
break;
default:
break;
}
if (string.IsNullOrEmpty(dialogTitle))
{
dialogTitle = gridname;
}
var list = new List<string>();
foreach (var item in whereStr)
{
list.Add(PropertyHelper.GetPropertyName(item));
}
return new GridAction
{
ButtonId = buttonId,
Name = (name ?? gridname),
DialogTitle = dialogTitle,
Area = areaName,
ControllerName = controllerName,
ActionName = actionName,
ParameterType = paraType,
IconCls = iconcls,
DialogWidth = dialogWidth ?? 800,
DialogHeight = dialogHeight,
ShowInRow = showInRow,
ShowDialog = showDialog,
HideOnToolBar = hideOnToolBar,
PromptMessage = msg,
ForcePost = ispost,
QueryString = qs,
IsExport = isexport,
whereStr = list.ToArray()
};
}
#endregion
#region MakeAction
/// <summary>
/// 创建标准动作
/// </summary>
/// <typeparam name="T">继承自TopBasePoco的类</typeparam>
/// <typeparam name="V">继承自ISearcher的类</typeparam>
/// <param name="self">self</param>
/// <param name="controllerName">动作的Controller</param>
/// <param name="actionName">actionName</param>
/// <param name="name">动作名,默认为‘新建’</param>
/// <param name="dialogTitle">弹出窗口的标题</param>
/// <param name="paraType">paraType</param>
/// <param name="areaName">域名</param>
/// <param name="dialogWidth">弹出窗口的宽度</param>
/// <param name="dialogHeight">弹出窗口的高度</param>
/// <param name="buttonId">Button的id 默认自动生成</param>
/// <param name="whereStr">whereStr</param>
/// <returns>列表动作</returns>
/// <remarks>
/// 根据标准动作类型,创建默认属性的标准动作
/// </remarks>
public static GridAction MakeAction<T, V>(this IBasePagedListVM<T, V> self
, string controllerName
, string actionName
, string name
, string dialogTitle
, GridActionParameterTypesEnum paraType
, string areaName = null
, int? dialogWidth = null
, int? dialogHeight = null
, string buttonId = null
, params Expression<Func<T, object>>[] whereStr)
where T : TopBasePoco
where V : ISearcher
{
var iconcls = string.Empty;
var list = new List<string>();
foreach (var item in whereStr)
{
list.Add(PropertyHelper.GetPropertyName(item));
}
return new GridAction
{
ButtonId = buttonId,
Name = name,
DialogTitle = dialogTitle,
Area = areaName,
ControllerName = controllerName,
ActionName = actionName,
ParameterType = paraType,
IconCls = iconcls,
DialogWidth = dialogWidth ?? 800,
DialogHeight = dialogHeight,
ShowDialog = true,
whereStr = list.ToArray()
};
}
public static GridAction MakeActionsGroup<T, V>(this IBasePagedListVM<T, V> self
, string name
, List<GridAction> subActions
, params Expression<Func<T, object>>[] whereStr)
where T : TopBasePoco
where V : ISearcher
{
var iconcls = string.Empty;
var list = new List<string>();
foreach (var item in whereStr)
{
list.Add(PropertyHelper.GetPropertyName(item));
}
return new GridAction
{
ButtonId = Guid.NewGuid().ToString(),
Name = name,
DialogTitle = "",
Area = "",
ControllerName = "",
ActionName = "ActionsGroup",
ParameterType = GridActionParameterTypesEnum.NoId,
IconCls = iconcls,
DialogWidth = 0,
DialogHeight = 0,
ShowDialog = false,
whereStr = list.ToArray(),
SubActions= subActions
};
}
#endregion
#region MakeStandardExportAction
/// <summary>
/// 创建标准导出按钮
/// </summary>
/// <typeparam name="T">继承自TopBasePoco的类</typeparam>
/// <typeparam name="V">继承自ISearcher的类</typeparam>
/// <param name="self">self</param>
/// <param name="gridid">vmGuid</param>
/// <param name="MustSelect"></param>
/// <param name="exportType">导出类型 默认null支持所有导出</param>
/// <param name="param">参数</param>
/// <returns></returns>
[Obsolete("Will be removed in future, use MakeStandardAction with GridActionStandardTypesEnum.ExportExcel instead")]
public static GridAction MakeStandardExportAction<T, V>(this IBasePagedListVM<T, V> self
, string gridid = null
, bool MustSelect = false
, ExportEnum? exportType = null
, params KeyValuePair<string, string>[] param)
where T : TopBasePoco
where V : ISearcher
{
exportType = ExportEnum.Excel;
var action = new GridAction
{
Name = CoreProgram._localizer?["Sys.ExportExcel"],
DialogTitle = CoreProgram._localizer?["Sys.ExportExcel"],
Area = string.Empty,
ControllerName = "_Framework",
ActionName = "GetExportExcel",
ParameterType = GridActionParameterTypesEnum.MultiIdWithNull,
IconCls = "layui-icon layui-icon-download-circle",
ShowInRow = false,
ShowDialog = false,
HideOnToolBar = false
};
return action;
}
#endregion
#region Set Property
/// <summary>
/// Set the dialog to be maximized
/// </summary>
/// <param name="self"></param>
/// <param name="Max"></param>
/// <returns></returns>
public static GridAction SetMax(this GridAction self, bool Max = true)
{
self.Max = Max;
return self;
}
/// <summary>
/// Set the dialog to be maximized
/// </summary>
/// <param name="self"></param>
/// <param name="buttonclass">button class.
/// Some of the layui defined class to control color:
/// layui-btn-primary
/// layui-btn-normal
/// layui-btn-warm
/// layui-btn-danger
/// </param>
/// <returns></returns>
public static GridAction SetButtonClass(this GridAction self, string buttonclass)
{
self.ButtonClass = buttonclass;
return self;
}
/// <summary>
/// Set the dialog to be maximized
/// </summary>
/// <param name="self"></param>
/// <param name="isDownload"></param>
/// <returns></returns>
public static GridAction SetIsDownload(this GridAction self, bool isDownload = true)
{
self.IsDownload = isDownload;
return self;
}
public static GridAction SetIsExport(this GridAction self, bool isExport= true)
{
self.IsExport = isExport;
return self;
}
/// <summary>
/// Set prompt message
/// </summary>
/// <param name="self"></param>
/// <param name="msg"></param>
/// <returns></returns>
public static GridAction SetPromptMessage(this GridAction self, string msg)
{
self.PromptMessage = msg;
return self;
}
/// <summary>
/// 是否在每行都显示
/// </summary>
/// <param name="self"></param>
/// <param name="showInRow"></param>
/// <returns></returns>
public static GridAction SetShowInRow(this GridAction self, bool showInRow = true)
{
self.ShowInRow = showInRow;
return self;
}
/// <summary>
/// 是否在工具栏上隐藏按钮
/// </summary>
/// <param name="self"></param>
/// <param name="hideOnToolBar"></param>
/// <returns></returns>
public static GridAction SetHideOnToolBar(this GridAction self, bool hideOnToolBar = true)
{
self.HideOnToolBar = hideOnToolBar;
return self;
}
/// <summary>
/// 把按钮当作容器,添加按钮的子按钮
/// </summary>
/// <param name="self"></param>
/// <param name="subActions">子按钮</param>
/// <returns></returns>
public static GridAction SetSubActions(this GridAction self, List<GridAction> subActions)
{
self.SubActions = subActions;
return self;
}
#endregion
}
}