/// <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>
        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           = "导出Excel",
                DialogTitle    = "导出Excel",
                Area           = string.Empty,
                ControllerName = "_Framework",
                ActionName     = "GetExportExcel",
                ParameterType  = GridActionParameterTypesEnum.MultiIdWithNull,

                IconCls       = "layui-icon-download-circle",
                ShowInRow     = false,
                ShowDialog    = false,
                HideOnToolBar = false
            };

            return(action);
        }
        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
            });
        }
Beispiel #3
0
        /// <summary>
        /// 获取Jason格式的列表数据
        /// </summary>
        /// <param name="self">是否需要对数据进行Json编码</param>
        /// <param name="returnColumnObject">不在后台进行ColumnFormatInfo的转化,而是直接输出ColumnFormatInfo的json结构到前端,由前端处理,默认False</param>
        /// <returns>Json格式的数据</returns>
        public static string GetDataJson <T>(this IBasePagedListVM <T, BaseSearcher> self, bool returnColumnObject = false) where T : TopBasePoco, new()
        {
            var sb = new StringBuilder();

            self.GetHeaders();
            if (self.IsSearched == false)
            {
                self.DoSearch();
            }
            var el = self.GetEntityList().ToList();

            //如果列表主键都为0,则生成自增主键,避免主键重复
            if (el.All(x => x.ID == Guid.Empty))
            {
                el.ForEach(x => x.ID = Guid.NewGuid());
            }
            //循环生成列表数据
            for (int x = 0; x < el.Count; x++)
            {
                var sou = el[x];
                sb.Append(self.GetSingleDataJson(sou, returnColumnObject, x));
                if (x < el.Count - 1)
                {
                    sb.Append(",");
                }
            }
            return($"[{sb.ToString()}]");
        }
Beispiel #4
0
        /// <summary>
        /// 创建表头
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="V"></typeparam>
        /// <param name="self"></param>
        /// <param name="columnExp">绑定猎头表达式</param>
        /// <param name="width">宽度</param>
        /// <returns></returns>
        public static GridColumn <T> MakeGridHeader <T, V>(this IBasePagedListVM <T, V> self
                                                           , Expression <Func <T, object> > columnExp
                                                           )
            where T : TopBasePoco
            where V : ISearcher
        {
            MemberExpression me = null;

            if (columnExp is MemberExpression)
            {
                me = columnExp as MemberExpression;
            }
            else if (columnExp is LambdaExpression)
            {
                var le = columnExp as LambdaExpression;
                if (le.Body is MemberExpression)
                {
                    me = le.Body as MemberExpression;
                }
            }
            return(new GridColumn <T>(columnExp)
            {
                ColumnType = GridColumnTypeEnum.Normal
            });
        }
Beispiel #5
0
 /// <summary>
 /// 创建一个间隙列
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <typeparam name="V"></typeparam>
 /// <param name="self"></param>
 /// <returns></returns>
 public static GridColumn <T> MakeGridHeaderSpace <T, V>(this IBasePagedListVM <T, V> self)
     where T : TopBasePoco
     where V : ISearcher
 {
     return(new GridColumn <T>()
     {
         ColumnType = GridColumnTypeEnum.Space
     });
 }
Beispiel #6
0
 /// <summary>
 /// 创建一个父级表头
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <typeparam name="V"></typeparam>
 /// <param name="self"></param>
 /// <param name="title">标题</param>
 /// <returns></returns>
 public static GridColumn <T> MakeGridHeaderParent <T, V>(this IBasePagedListVM <T, V> self, string title
                                                          )
     where T : TopBasePoco
     where V : ISearcher
 {
     return(new GridColumn <T>()
     {
         Title = title
     });
 }
        /// <summary>
        /// 生成下载文件
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="self"></param>
        /// <param name="ExportName"></param>
        /// <returns></returns>
        public static FileContentResult GetExportData <T> (this IBasePagedListVM <T, BaseSearcher> self, string ExportName = "") where T : TopBasePoco, new()
        {
            self.SearcherMode = self.Ids != null && self.Ids.Count > 0 ? ListVMSearchModeEnum.CheckExport : ListVMSearchModeEnum.Export;
            var    data        = self.GenerateExcel();
            string ContentType = self.ExportExcelCount > 1 ? "application/x-zip-compresse" : "application/vnd.ms-excel";

            ExportName = string.IsNullOrEmpty(ExportName) ? typeof(T).Name : ExportName;
            ExportName = self.ExportExcelCount > 1 ? $"Export_{ExportName}_{DateTime.Now.ToString("yyyyMMddHHmmssffff")}.zip" : $"Export_{ExportName}_{DateTime.Now.ToString("yyyyMMddHHmmssffff")}.xlsx";
            FileContentResult Result = new FileContentResult(data, ContentType);

            Result.FileDownloadName = ExportName;
            return(Result);
        }
        /// <summary>
        /// Get json format string of ListVM's search result
        /// </summary>
        /// <typeparam name="T">Model type</typeparam>
        /// <param name="self">a listvm</param>
        /// <param name="PlainText">true to return plain text, false to return formated html, such as checkbox,buttons ...</param>
        /// <returns>json string</returns>
        public static string GetJson <T>(this IBasePagedListVM <T, BaseSearcher> self, bool PlainText = true) where T : TopBasePoco, new()
        {
            Hashtable ht = new Hashtable
            {
                ["Data"]      = self.GetDataJson(),
                ["Count"]     = self.Searcher.Count,
                ["Page"]      = self.Searcher.Page,
                ["PageCount"] = self.Searcher.PageCount,
                ["Msg"]       = "success",
                ["Code"]      = "200"
            };

            return(JsonSerializer.Serialize(ht));
        }
Beispiel #9
0
 public static GridColumn <T> MakeGridHeaderAction <T, V>(this IBasePagedListVM <T, V> self
                                                          , string title = null
                                                          , int?width    = 160
                                                          , int?rowspan  = null
                                                          )
     where T : TopBasePoco
     where V : ISearcher
 {
     return(new GridColumn <T>()
     {
         ColumnType = GridColumnTypeEnum.Action,
         Width = width,
         Fixed = GridColumnFixedEnum.Right,
         Title = title ?? Program._localizer["Operation"]
     });
 }
Beispiel #10
0
        /// <summary>
        /// 生成GridColumn
        /// </summary>
        /// <typeparam name="T">继承自TopBasePoco的类</typeparam>
        /// <typeparam name="V">继承自ISearcher的类</typeparam>
        /// <param name="self">self</param>
        /// <param name="ColumnExp">指向T中字段的表达式</param>
        /// <param name="Format">格式化显示内容的委托函数,函数接受两个参数,第一个是整行数据,第二个是所选列的数据</param>
        /// <param name="Header">表头名称</param>
        /// <param name="Width">列宽</param>
        /// <param name="Flex">是否填充</param>
        /// <param name="AllowMultiLine">是否允许多行</param>
        /// <param name="NeedGroup">是否需要分组</param>
        /// <param name="ForeGroundFunc">设置前景色的委托函数</param>
        /// <param name="BackGroundFunc">设置背景色的委托函数</param>
        /// <returns>返回设置好的GridColumn类的实例</returns>
        public static GridColumn <T> MakeGridColumn <T, V>(this IBasePagedListVM <T, V> self
                                                           , Expression <Func <T, object> > ColumnExp
                                                           , ColumnFormatCallBack <T> Format = null
                                                           , string Header                   = null
                                                           , int?Width                       = null
                                                           , int?Flex                        = null
                                                           , bool AllowMultiLine             = true
                                                           , bool NeedGroup                  = false
                                                           , Func <T, string> ForeGroundFunc = null
                                                           , Func <T, string> BackGroundFunc = null)
            where T : TopBasePoco
            where V : ISearcher
        {
            GridColumn <T> rv = new GridColumn <T>(ColumnExp, Format, Header, Width, Flex, AllowMultiLine, NeedGroup, ForeGroundFunc, BackGroundFunc);

            return(rv);
        }
        /// <summary>
        /// 获取Jason格式的列表数据
        /// </summary>
        /// <param name="self">是否需要对数据进行Json编码</param>
        /// <returns>Json格式的数据</returns>
        public static List <T> GetDataJson <T>(this IBasePagedListVM <T, BaseSearcher> self) where T : TopBasePoco, new()
        {
            var sb = new StringBuilder();

            self.GetHeaders();
            if (self.IsSearched == false)
            {
                self.DoSearch();
            }
            var el = self.GetEntityList().ToList();

            //如果列表主键都为0,则生成自增主键,避免主键重复
            if (el.All(x => x.ID == Guid.Empty))
            {
                el.ForEach(x => x.ID = Guid.NewGuid());
            }
            return(el);
        }
Beispiel #12
0
        /// <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()
            });
        }
Beispiel #13
0
        /// <summary>
        /// 获取Jason格式的列表数据
        /// </summary>
        /// <param name="self">是否需要对数据进行Json编码</param>
        /// <returns>Json格式的数据</returns>
        public static string GetDataJson <T>(this IBasePagedListVM <T, BaseSearcher> self) where T : TopBasePoco, new()
        {
            var sb = new StringBuilder();

            self.GetHeaders();
            self.DoSearch();
            if (self.EntityDataTable != null)
            {
                for (int i = 0; i < self.EntityDataTable.Rows.Count; i++)
                {
                    sb.Append(self.GetSingleRowJson(self.EntityDataTable.Rows[i], i));
                    if (i < self.EntityDataTable.Rows.Count - 1)
                    {
                        sb.Append(",");
                    }
                }
            }
            else
            {
                var el = self.GetEntityList().ToList();
                //如果列表主键都为0,则生成自增主键,避免主键重复
                if (el.All(x => x.ID == Guid.Empty))
                {
                    el.ForEach(x => x.ID = Guid.NewGuid());
                }
                //循环生成列表数据
                for (int x = 0; x < el.Count; x++)
                {
                    var sou = el[x];
                    sb.Append(self.GetSingleDataJson(sou, x));
                    if (x < el.Count - 1)
                    {
                        sb.Append(",");
                    }
                }
            }
            return($"[{sb.ToString()}]");
        }
Beispiel #14
0
        /// <summary>
        /// 创建表头
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="V"></typeparam>
        /// <param name="self"></param>
        /// <param name="columnExp">绑定猎头表达式</param>
        /// <param name="width">宽度</param>
        /// <returns></returns>
        public static GridColumn <T> MakeGridHeader <T, V>(this IBasePagedListVM <T, V> self
                                                           , Expression <Func <T, object> > columnExp
                                                           , int?width = null
                                                           )
            where T : TopBasePoco
            where V : ISearcher
        {
            MemberExpression me = null;

            if (columnExp is MemberExpression)
            {
                me = columnExp as MemberExpression;
            }
            else if (columnExp is LambdaExpression)
            {
                var le = columnExp as LambdaExpression;
                if (le.Body is MemberExpression)
                {
                    me = le.Body as MemberExpression;
                }
            }
            var alignType = GridColumnAlignEnum.Center;

            if (me != null)
            {
                var propType = me.Type;
                if (propType == typeof(string))
                {
                    alignType = GridColumnAlignEnum.Left;
                }
            }

            return(new GridColumn <T>(columnExp, width)
            {
                ColumnType = GridColumnTypeEnum.Normal, Align = alignType
            });
        }
Beispiel #15
0
        /// <summary>
        /// 生成单条数据的Json格式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="self"></param>
        /// <param name="sou">数据</param>
        /// <returns>Json格式的数据</returns>
        public static string GetSingleDataJson <T>(this IBasePagedListVM <T, BaseSearcher> self, T sou) where T : TopBasePoco
        {
            var sb         = new StringBuilder();
            var RowBgColor = string.Empty;
            var RowColor   = string.Empty;

            RowBgColor = self.SetFullRowBgColor(sou);
            RowColor   = self.SetFullRowColor(sou);
            var isSelected = self.GetIsSelected(sou);

            //循环所有列
            sb.Append("{");
            var containsID = false;

            foreach (var baseCol in self.GetHeaders())
            {
                foreach (var col in baseCol.BottomChildren)
                {
                    if (col.ColumnType != GridColumnTypeEnum.Normal)
                    {
                        continue;
                    }
                    if (col.FieldName == "Id")
                    {
                        containsID = true;
                    }
                    var backColor = col.GetBackGroundColor(sou);
                    //获取ListVM中设定的单元格前景色
                    var foreColor = col.GetForeGroundColor(sou);

                    if (backColor == string.Empty)
                    {
                        backColor = RowBgColor;
                    }
                    if (foreColor == string.Empty)
                    {
                        foreColor = RowColor;
                    }
                    var style = string.Empty;
                    if (backColor != string.Empty)
                    {
                        style += $"background-color:#{backColor};";
                    }
                    if (foreColor != string.Empty)
                    {
                        style += $"color:#{foreColor};";
                    }
                    //设定列名,如果是主键ID,则列名为id,如果不是主键列,则使用f0,f1,f2...这种方式命名,避免重复
                    sb.Append($"\"{col.Field}\":");
                    var html = string.Empty;
                    var info = col.GetText(sou);

                    if (info is ColumnFormatInfo)
                    {
                        html = GetFormatResult(self as BaseVM, info as ColumnFormatInfo);
                    }
                    else if (info is List <ColumnFormatInfo> )
                    {
                        var temp = string.Empty;
                        foreach (var item in info as List <ColumnFormatInfo> )
                        {
                            temp += GetFormatResult(self as BaseVM, item);
                            temp += "&nbsp;&nbsp;";
                        }
                        html = temp;
                    }
                    else
                    {
                        html = info.ToString();
                    }

                    var ptype = col.FieldType;
                    //如果列是布尔值,直接返回true或false,让ExtJS生成CheckBox
                    if (ptype == typeof(bool) || ptype == typeof(bool?))
                    {
                        if (html.ToLower() == "true")
                        {
                            html = (self as BaseVM).UIService.MakeCheckBox(true, isReadOnly: true);
                        }
                        if (html.ToLower() == "false" || html == string.Empty)
                        {
                            html = (self as BaseVM).UIService.MakeCheckBox(false, isReadOnly: true);
                        }
                    }
                    //如果列是枚举,直接使用枚举的文本作为多语言的Key查询多语言文字
                    else if (ptype.IsEnumOrNullableEnum())
                    {
                        html = PropertyHelper.GetEnumDisplayName(ptype, html);
                    }
                    if (style != string.Empty)
                    {
                        html = $"<div style=\"{style}\">{html}</div>";
                    }
                    html = "\"" + html.Replace(Environment.NewLine, "").Replace("\n", string.Empty).Replace("\r", string.Empty).Replace("\\", "\\\\").Replace("\"", "\\\"") + "\"";
                    sb.Append(html);
                    sb.Append(",");
                }
            }
            sb.Append($"\"TempIsSelected\":\"{ (isSelected == true ? "1" : "0") }\"");
            if (containsID == false)
            {
                sb.Append($",\"ID\":\"{sou.ID}\"");
            }
            // 标识当前行数据是否被选中
            sb.Append($@",""LAY_CHECKED"":{sou.Checked.ToString().ToLower()}");
            sb.Append(string.Empty);
            sb.Append("}");
            return(sb.ToString());
        }
Beispiel #16
0
 /// <summary>
 /// Get json format string of ListVM's search result
 /// </summary>
 /// <typeparam name="T">Model type</typeparam>
 /// <param name="self">a listvm</param>
 /// <param name="PlainText">true to return plain text, false to return formated html, such as checkbox,buttons ...</param>
 /// <returns>json string</returns>
 public static string GetJson <T>(this IBasePagedListVM <T, BaseSearcher> self, bool PlainText = true) where T : TopBasePoco, new()
 {
     return($@"{{""Data"":{self.GetDataJson(PlainText)},""Count"":{self.Searcher.Count},""Page"":{self.Searcher.Page},""PageCount"":{self.Searcher.PageCount},""Msg"":""success"",""Code"":200}}");
 }
Beispiel #17
0
 public static string GetError <T>(this IBasePagedListVM <T, BaseSearcher> self) where T : TopBasePoco, new()
 {
     return($@"{{""Data"":{{}},""Count"":0,""Page"":0,""PageCount"":0,""Msg"":""{(self as BaseVM).MSD.GetFirstError()}"",""Code"":400}}");
 }
Beispiel #18
0
        /// <summary>
        /// 生成单条数据的Json格式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="self"></param>
        /// <param name="obj">数据</param>
        /// <param name="returnColumnObject">不在后台进行ColumnFormatInfo的转化,而是直接输出ColumnFormatInfo的json结构到前端,由前端处理,默认False</param>
        /// <param name="index">index</param>
        /// <returns>Json格式的数据</returns>
        public static string GetSingleDataJson <T>(this IBasePagedListVM <T, BaseSearcher> self, object obj, bool returnColumnObject, int index = 0) where T : TopBasePoco
        {
            bool inner      = false;
            var  sb         = new StringBuilder();
            var  RowBgColor = string.Empty;
            var  RowColor   = string.Empty;

            if (!(obj is T sou))
            {
                sou = self.CreateEmptyEntity();
            }
            RowBgColor = self.SetFullRowBgColor(sou);
            RowColor   = self.SetFullRowColor(sou);
            var isSelected = self.GetIsSelected(sou);

            //循环所有列
            sb.Append("{");
            bool containsID  = false;
            bool addHiddenID = false;
            Dictionary <string, (string, string)> colorcolumns = new Dictionary <string, (string, string)>();

            foreach (var baseCol in self.GetHeaders())
            {
                foreach (var col in baseCol.BottomChildren)
                {
                    if (col.ColumnType != GridColumnTypeEnum.Normal)
                    {
                        continue;
                    }
                    if (col.FieldName?.ToLower() == "id")
                    {
                        containsID = true;
                    }
                    var backColor = col.GetBackGroundColor(sou);
                    //获取ListVM中设定的单元格前景色
                    var foreColor = col.GetForeGroundColor(sou);

                    if (backColor == string.Empty)
                    {
                        backColor = RowBgColor;
                    }
                    if (foreColor == string.Empty)
                    {
                        foreColor = RowColor;
                    }
                    (string bgcolor, string forecolor)colors = (null, null);
                    if (backColor != string.Empty)
                    {
                        colors.bgcolor = backColor;
                    }
                    if (foreColor != string.Empty)
                    {
                        colors.forecolor = foreColor;
                    }
                    if (string.IsNullOrEmpty(colors.bgcolor) == false || string.IsNullOrEmpty(colors.forecolor) == false)
                    {
                        colorcolumns.Add(col.Field, colors);
                    }
                    //设定列名,如果是主键ID,则列名为id,如果不是主键列,则使用f0,f1,f2...这种方式命名,避免重复
                    var ptype = col.FieldType;
                    if (col.Field?.ToLower() == "children" && typeof(IEnumerable <T>).IsAssignableFrom(ptype))
                    {
                        var children = ((IEnumerable <T>)col.GetObject(obj))?.ToList();
                        if (children == null || children.Count() == 0)
                        {
                            continue;
                        }
                    }
                    sb.Append($"\"{col.Field}\":");
                    var html = string.Empty;

                    if (col.EditType == EditTypeEnum.Text || col.EditType == null)
                    {
                        if (typeof(IEnumerable <T>).IsAssignableFrom(ptype))
                        {
                            var children = ((IEnumerable <T>)col.GetObject(obj))?.ToList();
                            if (children != null)
                            {
                                html = "[";
                                for (int i = 0; i < children.Count; i++)
                                {
                                    var item = children[i];
                                    html += self.GetSingleDataJson(item, returnColumnObject);
                                    if (i < children.Count - 1)
                                    {
                                        html += ",";
                                    }
                                }
                                html += "]";
                            }
                            else
                            {
                                //html = "[]";
                            }
                            inner = true;
                        }
                        else
                        {
                            if (returnColumnObject == true)
                            {
                                html = col.GetText(sou, false).ToString();
                            }
                            else
                            {
                                var info = col.GetText(sou);

                                if (info is ColumnFormatInfo)
                                {
                                    html = GetFormatResult(self as BaseVM, info as ColumnFormatInfo);
                                }
                                else if (info is List <ColumnFormatInfo> )
                                {
                                    var temp = string.Empty;
                                    foreach (var item in info as List <ColumnFormatInfo> )
                                    {
                                        temp += GetFormatResult(self as BaseVM, item);
                                        temp += "&nbsp;&nbsp;";
                                    }
                                    html = temp;
                                }
                                else
                                {
                                    html = info.ToString();
                                }
                            }

                            //如果列是布尔值,直接返回true或false,让前台生成CheckBox
                            if (ptype == typeof(bool) || ptype == typeof(bool?))
                            {
                                if (returnColumnObject == false)
                                {
                                    if (html.ToLower() == "true")
                                    {
                                        html = (self as BaseVM).UIService.MakeCheckBox(true, isReadOnly: true);
                                    }
                                    if (html.ToLower() == "false" || html == string.Empty)
                                    {
                                        html = (self as BaseVM).UIService.MakeCheckBox(false, isReadOnly: true);
                                    }
                                }
                                else
                                {
                                    if (html != null && html != string.Empty)
                                    {
                                        html = html.ToLower();
                                    }
                                }
                            }
                            //如果列是枚举,直接使用枚举的文本作为多语言的Key查询多语言文字
                            else if (ptype.IsEnumOrNullableEnum())
                            {
                                if (int.TryParse(html, out int enumvalue))
                                {
                                    html = PropertyHelper.GetEnumDisplayName(ptype, enumvalue);
                                }
                            }
                        }
                    }
                    else
                    {
                        string val  = col.GetText(sou).ToString();
                        string name = $"{self.DetailGridPrix}[{index}].{col.Field}";
                        switch (col.EditType)
                        {
                        case EditTypeEnum.TextBox:
                            html = (self as BaseVM).UIService.MakeTextBox(name, val);
                            break;

                        case EditTypeEnum.CheckBox:
                            bool.TryParse(val, out bool nb);
                            html = (self as BaseVM).UIService.MakeCheckBox(nb, null, name, "true");
                            break;

                        case EditTypeEnum.ComboBox:
                            html = (self as BaseVM).UIService.MakeCombo(name, col.ListItems, val);
                            break;

                        default:
                            break;
                        }
                    }
                    if (string.IsNullOrEmpty(self.DetailGridPrix) == false && addHiddenID == false)
                    {
                        html       += $@"<input hidden name='{self.DetailGridPrix}[{index}].ID' value='{sou.GetID()}'/>";
                        addHiddenID = true;
                    }
                    if (inner == false)
                    {
                        html = "\"" + html.Replace(Environment.NewLine, "").Replace("\t", string.Empty).Replace("\n", string.Empty).Replace("\r", string.Empty).Replace("\\", "\\\\").Replace("\"", "\\\"") + "\"";
                    }
                    sb.Append(html);
                    sb.Append(",");
                }
            }
            sb.Append($"\"TempIsSelected\":\"{ (isSelected == true ? "1" : "0") }\"");
            foreach (var cc in colorcolumns)
            {
                if (string.IsNullOrEmpty(cc.Value.Item1) == false)
                {
                    string bg = cc.Value.Item1;
                    if (bg.StartsWith("#") == false)
                    {
                        bg = "#" + bg;
                    }
                    sb.Append($",\"{cc.Key}__bgcolor\":\"{bg}\"");
                }
                if (string.IsNullOrEmpty(cc.Value.Item2) == false)
                {
                    string fore = cc.Value.Item2;
                    if (fore.StartsWith("#") == false)
                    {
                        fore = "#" + fore;
                    }
                    sb.Append($",\"{cc.Key}__forecolor\":\"{fore}\"");
                }
            }
            if (containsID == false)
            {
                sb.Append($",\"ID\":\"{(sou as dynamic).ID}\"");
            }
            // 标识当前行数据是否被选中
            sb.Append($@",""LAY_CHECKED"":{sou.Checked.ToString().ToLower()}");
            sb.Append(string.Empty);
            sb.Append("}");
            return(sb.ToString());
        }
Beispiel #19
0
 public static string GetJson <T>(this IBasePagedListVM <T, BaseSearcher> self) where T : TopBasePoco, new()
 {
     return($@"{{""Data"":{self.GetDataJson(true)},""Count"":{self.Searcher.Count},""Page"":{self.Searcher.Page},""PageCount"":{self.Searcher.PageCount}}}");
 }
        /// <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
                                                           , string queryString  = null
                                                           , string urlParampter = 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;

            switch (standardType)
            {
            case GridActionStandardTypesEnum.Create:
                iconcls  = "layui-icon-add-1";
                gridname = "新建";
                paraType = GridActionParameterTypesEnum.NoId;
                break;

            case GridActionStandardTypesEnum.AddRow:
                iconcls  = "layui-icon-add-1";
                gridname = "新建";
                paraType = GridActionParameterTypesEnum.AddRow;
                break;

            case GridActionStandardTypesEnum.Edit:
                iconcls       = "layui-icon-edit";
                gridname      = "修改";
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.Delete:
                iconcls       = "layui-icon-delete";
                gridname      = "删除";
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.RemoveRow:
                iconcls       = "layui-icon-delete";
                gridname      = "删除";
                paraType      = GridActionParameterTypesEnum.RemoveRow;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.Details:
                iconcls       = "layui-icon-form";
                gridname      = string.IsNullOrEmpty(name) ? "详细" : name;
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.CustomAction:
                iconcls       = "layui-icon-form";
                gridname      = string.IsNullOrEmpty(name) ? "自定义" : name;
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.BatchEdit:
                iconcls  = "layui-icon-edit";
                gridname = "批量修改";
                paraType = GridActionParameterTypesEnum.MultiIds;
                break;

            case GridActionStandardTypesEnum.BatchDelete:
                iconcls  = "layui-icon-delete";
                gridname = "批量删除";
                paraType = GridActionParameterTypesEnum.MultiIds;
                break;

            case GridActionStandardTypesEnum.Import:
                iconcls  = "layui-icon-templeate-1";
                gridname = "导入";
                paraType = GridActionParameterTypesEnum.NoId;
                break;

            case GridActionStandardTypesEnum.Index:
                iconcls       = "layui-icon-templeate-1";
                gridname      = name == string.Empty?"跳转":name;
                paraType      = GridActionParameterTypesEnum.IndexUrl;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            default:
                break;
            }



            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,
                QueryString = queryString,
                UrlParam = urlParampter,
                IconCls = iconcls,
                DialogWidth = dialogWidth ?? 800,
                DialogHeight = dialogHeight,
                ShowInRow = showInRow,
                ShowDialog = true,
                HideOnToolBar = hideOnToolBar,
                whereStr = list.ToArray()
            });
        }
Beispiel #21
0
        public static string GetSingleRowJson <T>(this IBasePagedListVM <T, BaseSearcher> self, DataRow obj, int index = 0) where T : TopBasePoco
        {
            var sb = new StringBuilder();

            //循环所有列
            sb.Append("{");
            bool containsID = false;

            foreach (var baseCol in self.GetHeaders())
            {
                foreach (var col in baseCol.BottomChildren)
                {
                    if (col.ColumnType != GridColumnTypeEnum.Normal)
                    {
                        continue;
                    }
                    if (col.Title.ToLower() == "Id")
                    {
                        containsID = true;
                    }
                    sb.Append($"\"{col.Title}\":");
                    var html = string.Empty;

                    if (col.EditType == EditTypeEnum.Text || col.EditType == null)
                    {
                        var info = obj[col.Title];

                        html = info.ToString();
                        var ptype = col.FieldType;
                        //如果列是布尔值,直接返回true或false,让ExtJS生成CheckBox
                        if (ptype == typeof(bool) || ptype == typeof(bool?))
                        {
                            if (html.ToLower() == "true")
                            {
                                html = (self as BaseVM).UIService.MakeCheckBox(true, isReadOnly: true);
                            }
                            if (html.ToLower() == "false" || html == string.Empty)
                            {
                                html = (self as BaseVM).UIService.MakeCheckBox(false, isReadOnly: true);
                            }
                        }
                        //如果列是枚举,直接使用枚举的文本作为多语言的Key查询多语言文字
                        else if (ptype.IsEnumOrNullableEnum())
                        {
                            html = PropertyHelper.GetEnumDisplayName(ptype, html);
                        }
                    }

                    html = "\"" + html.Replace(Environment.NewLine, "").Replace("\n", string.Empty).Replace("\r", string.Empty).Replace("\\", "\\\\").Replace("\"", "\\\"") + "\"";
                    sb.Append(html);
                    sb.Append(",");
                }
            }
            sb.Append($"\"TempIsSelected\":\"{"0" }\"");
            if (containsID == false)
            {
                sb.Append($",\"ID\":\"{Guid.NewGuid().ToString()}\"");
            }
            // 标识当前行数据是否被选中
            sb.Append($@",""LAY_CHECKED"":false");
            sb.Append(string.Empty);
            sb.Append("}");
            return(sb.ToString());
        }
Beispiel #22
0
        /// <summary>
        /// 生成单条数据的Json格式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="self"></param>
        /// <param name="obj">数据</param>
        /// <param name="returnColumnObject">不在后台进行ColumnFormatInfo的转化,而是直接输出ColumnFormatInfo的json结构到前端,由前端处理,默认False</param>
        /// <param name="index">index</param>
        /// <returns>Json格式的数据</returns>
        public static string GetSingleDataJson <T>(this IBasePagedListVM <T, BaseSearcher> self, object obj, bool returnColumnObject, int index = 0) where T : TopBasePoco
        {
            var sb         = new StringBuilder();
            var RowBgColor = string.Empty;
            var RowColor   = string.Empty;

            if (!(obj is T sou))
            {
                sou = self.CreateEmptyEntity();
            }
            RowBgColor = self.SetFullRowBgColor(sou);
            RowColor   = self.SetFullRowColor(sou);
            var isSelected = self.GetIsSelected(sou);

            //循环所有列
            sb.Append("{");
            bool containsID  = false;
            bool addHiddenID = false;

            foreach (var baseCol in self.GetHeaders())
            {
                foreach (var col in baseCol.BottomChildren)
                {
                    if (col.ColumnType != GridColumnTypeEnum.Normal)
                    {
                        continue;
                    }
                    if (col.FieldName == "Id")
                    {
                        containsID = true;
                    }
                    var backColor = col.GetBackGroundColor(sou);
                    //获取ListVM中设定的单元格前景色
                    var foreColor = col.GetForeGroundColor(sou);

                    if (backColor == string.Empty)
                    {
                        backColor = RowBgColor;
                    }
                    if (foreColor == string.Empty)
                    {
                        foreColor = RowColor;
                    }
                    var style = string.Empty;
                    if (backColor != string.Empty)
                    {
                        style += $"background-color:#{backColor};";
                    }
                    if (foreColor != string.Empty)
                    {
                        style += $"color:#{foreColor};";
                    }
                    //设定列名,如果是主键ID,则列名为id,如果不是主键列,则使用f0,f1,f2...这种方式命名,避免重复
                    sb.Append($"\"{col.Field}\":");
                    var html = string.Empty;

                    if (col.EditType == EditTypeEnum.Text || col.EditType == null)
                    {
                        if (returnColumnObject == true)
                        {
                            html = col.GetText(sou, false).ToString();
                        }
                        else
                        {
                            var info = col.GetText(sou);

                            if (info is ColumnFormatInfo)
                            {
                                html = GetFormatResult(self as BaseVM, info as ColumnFormatInfo);
                            }
                            else if (info is List <ColumnFormatInfo> )
                            {
                                var temp = string.Empty;
                                foreach (var item in info as List <ColumnFormatInfo> )
                                {
                                    temp += GetFormatResult(self as BaseVM, item);
                                    temp += "&nbsp;&nbsp;";
                                }
                                html = temp;
                            }
                            else
                            {
                                html = info.ToString();
                            }
                        }

                        var ptype = col.FieldType;
                        //如果列是布尔值,直接返回true或false,让ExtJS生成CheckBox
                        if (ptype == typeof(bool) || ptype == typeof(bool?))
                        {
                            if (returnColumnObject == false)
                            {
                                if (html.ToLower() == "true")
                                {
                                    html = (self as BaseVM).UIService.MakeCheckBox(true, isReadOnly: true);
                                }
                                if (html.ToLower() == "false" || html == string.Empty)
                                {
                                    html = (self as BaseVM).UIService.MakeCheckBox(false, isReadOnly: true);
                                }
                            }
                            else
                            {
                                if (html != null && html != string.Empty)
                                {
                                    html = html.ToLower();
                                }
                            }
                        }
                        //如果列是枚举,直接使用枚举的文本作为多语言的Key查询多语言文字
                        else if (ptype.IsEnumOrNullableEnum())
                        {
                            if (int.TryParse(html, out int enumvalue))
                            {
                                html = PropertyHelper.GetEnumDisplayName(ptype, enumvalue);
                            }
                        }
                        if (style != string.Empty)
                        {
                            html = $"<div style=\"{style}\">{html}</div>";
                        }
                    }
                    else
                    {
                        string val  = col.GetText(sou).ToString();
                        string name = $"{self.DetailGridPrix}[{index}].{col.Field}";
                        switch (col.EditType)
                        {
                        case EditTypeEnum.TextBox:
                            html = (self as BaseVM).UIService.MakeTextBox(name, val);
                            break;

                        case EditTypeEnum.CheckBox:
                            bool.TryParse(val, out bool nb);
                            html = (self as BaseVM).UIService.MakeCheckBox(nb, null, name, "true");
                            break;

                        case EditTypeEnum.ComboBox:
                            html = (self as BaseVM).UIService.MakeCombo(name, col.ListItems, val);
                            break;

                        default:
                            break;
                        }
                    }
                    if (string.IsNullOrEmpty(self.DetailGridPrix) == false && addHiddenID == false)
                    {
                        html       += $@"<input hidden name=""{self.DetailGridPrix}[{index}].ID"" value=""{sou.ID}""/>";
                        addHiddenID = true;
                    }

                    html = "\"" + html.Replace(Environment.NewLine, "").Replace("\n", string.Empty).Replace("\r", string.Empty).Replace("\\", "\\\\").Replace("\"", "\\\"") + "\"";
                    sb.Append(html);
                    sb.Append(",");
                }
            }
            sb.Append($"\"TempIsSelected\":\"{ (isSelected == true ? "1" : "0") }\"");
            if (containsID == false)
            {
                sb.Append($",\"ID\":\"{sou.ID}\"");
            }
            // 标识当前行数据是否被选中
            sb.Append($@",""LAY_CHECKED"":{sou.Checked.ToString().ToLower()}");
            sb.Append(string.Empty);
            sb.Append("}");
            return(sb.ToString());
        }
Beispiel #23
0
        /// <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;

            switch (standardType)
            {
            case GridActionStandardTypesEnum.Create:
                iconcls  = "layui-icon layui-icon-add-1";
                gridname = Program._localizer["Create"];
                paraType = GridActionParameterTypesEnum.NoId;
                break;

            case GridActionStandardTypesEnum.AddRow:
                iconcls  = "layui-icon layui-icon-add-1";
                gridname = Program._localizer["Create"];
                paraType = GridActionParameterTypesEnum.AddRow;
                break;

            case GridActionStandardTypesEnum.Edit:
                iconcls       = "layui-icon layui-icon-edit";
                gridname      = Program._localizer["Edit"];
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.Delete:
                iconcls       = "layui-icon layui-icon-delete";
                gridname      = Program._localizer["Delete"];
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.RemoveRow:
                iconcls       = "layui-icon layui-icon-delete";
                gridname      = Program._localizer["Delete"];
                paraType      = GridActionParameterTypesEnum.RemoveRow;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.Details:
                iconcls       = "layui-icon layui-icon-form";
                gridname      = Program._localizer["Details"];
                paraType      = GridActionParameterTypesEnum.SingleId;
                showInRow     = true;
                hideOnToolBar = true;
                break;

            case GridActionStandardTypesEnum.BatchEdit:
                iconcls  = "layui-icon layui-icon-edit";
                gridname = Program._localizer["BatchEdit"];
                paraType = GridActionParameterTypesEnum.MultiIds;
                break;

            case GridActionStandardTypesEnum.BatchDelete:
                iconcls  = "layui-icon layui-icon-delete";
                gridname = Program._localizer["BatchDelete"];
                paraType = GridActionParameterTypesEnum.MultiIds;
                break;

            case GridActionStandardTypesEnum.Import:
                iconcls  = "layui-icon layui-icon-templeate-1";
                gridname = Program._localizer["Import"];
                paraType = GridActionParameterTypesEnum.NoId;
                break;

            case GridActionStandardTypesEnum.ExportExcel:
                iconcls       = "layui-icon layui-icon-download-circle";
                gridname      = Program._localizer["Export"];
                paraType      = GridActionParameterTypesEnum.MultiIdWithNull;
                name          = Program._localizer["ExportExcel"];
                showInRow     = false;
                showDialog    = false;
                hideOnToolBar = false;
                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,
                whereStr = list.ToArray()
            });
        }