425 lines
16 KiB
C#
425 lines
16 KiB
C#
![]() |
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
|
|||
|
}
|
|||
|
}
|