iotgateway/WalkingTec.Mvvm/WalkingTec.Mvvm.Core/Grid/GridActionExtension.cs
2021-12-14 14:10:44 +08:00

425 lines
16 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
}