/// <summary>
            /// 查询数据
            /// </summary>
            public override void OnQuery(
                AjaxTableSearchRequest request, ref IQueryable <GenericTag> query)
            {
                // 在第一页显示所有分类
                request.PageNo   = 0;
                request.PageSize = 0x7ffffffe;
                // 提供类型给其他回调
                var app = new TController();

                request.Conditions["Type"] = app.Type;
                // 按类型
                query = query.Where(q => q.Type == app.Type);
                // 按关键词
                if (!string.IsNullOrEmpty(request.Keyword))
                {
                    query = query.Where(q => q.Name.Contains(request.Keyword) || q.Remark.Contains(request.Keyword));
                }
            }
Beispiel #2
0
 /// <summary>
 /// 添加列
 /// </summary>
 public override void OnResponse(
     AjaxTableSearchRequest request, AjaxTableSearchResponse response)
 {
     response.Columns.AddIdColumn("Id").StandardSetupFor <PaymentTransactionCrudController>(request);
     response.Columns.AddNoColumn();
     response.Columns.AddMemberColumn("Serial");
     response.Columns.AddMemberColumn("ExternalSerial");
     response.Columns.AddMemberColumn("Type");
     response.Columns.AddEditColumnFor <PaymentApiCrudController>("ApiName", "ApiId");
     response.Columns.AddMemberColumn("Amount");
     response.Columns.AddMemberColumn("PaymentFee");
     response.Columns.AddEditColumnFor <UserCrudController>("Payer", "PayerId");
     response.Columns.AddEditColumnFor <UserCrudController>("Payee", "PayeeId");
     response.Columns.AddMemberColumn("CreateTime");
     response.Columns.AddMemberColumn("UpdateTime");
     response.Columns.AddEnumLabelColumn("State", typeof(PaymentTransactionState));
     response.Columns.AddActionColumn().StandardSetupFor <PaymentTransactionCrudController>(request);
 }
            /// <summary>
            /// 选择数据
            /// </summary>
            public override void OnSelect(
                AjaxTableSearchRequest request, IList <EntityToTableRow <User> > pairs)
            {
                var userManager = Application.Ioc.Resolve <UserManager>();

                foreach (var pair in pairs)
                {
                    var userType = pair.Entity.GetUserType();
                    pair.Row["Id"]         = pair.Entity.Id;
                    pair.Row["Avatar"]     = userManager.GetAvatarWebPath(pair.Entity.Id);
                    pair.Row["Username"]   = pair.Entity.Username;
                    pair.Row["Roles"]      = string.Join(", ", pair.Entity.Roles.Select(r => r.Name));
                    pair.Row["CreateTime"] = pair.Entity.CreateTime.ToClientTimeString();
                    pair.Row["SuperAdmin"] = (
                        userType is IAmSuperAdmin ? EnumBool.True : EnumBool.False);
                    pair.Row["Deleted"] = pair.Entity.Deleted ? EnumDeleted.Deleted : EnumDeleted.None;
                }
            }
        /// <summary>
        /// 从数据库中的数据构建搜索回应
        /// 支持自动分页和配合表格回调设置结果
        /// </summary>
        /// <typeparam name="TData">数据类型</typeparam>
        /// <param name="request">搜索请求</param>
        /// <param name="callbacks">表格回调</param>
        /// <returns></returns>
        public static AjaxTableSearchResponse BuildResponseFromDatabase <TData>(
            this AjaxTableSearchRequest request, IEnumerable <IAjaxTableCallback <TData> > callbacks)
            where TData : class, IEntity
        {
            var response = new AjaxTableSearchResponse();

            UnitOfWork.Read(context => {
                // 从数据库获取数据,过滤并排序
                var query = context.Query <TData>();
                foreach (var callback in callbacks)
                {
                    callback.OnQuery(request, context, ref query);
                }
                foreach (var callback in callbacks)
                {
                    callback.OnSort(request, context, ref query);
                }
                // 分页并设置分页信息
                // 当前页没有任何内容时返回最后一页的数据
                var queryResult   = response.Pagination.Paging(request, query);
                response.PageNo   = request.PageNo;
                response.PageSize = request.PageSize;
                // 选择数据
                // 默认把对象转换到的字符串保存到ToString中
                var pairs = queryResult
                            .Select(r => new EntityToTableRow <TData>(r))
                            .ToList();
                foreach (var pair in pairs)
                {
                    pair.Row["ToString"] = pair.Entity.ToString();
                }
                foreach (var callback in callbacks)
                {
                    callback.OnSelect(request, pairs);
                }
                response.Rows = pairs.Select(p => p.Row).ToList();
                // 调用返回搜索回应前的回调,这里会添加需要的列
                foreach (var callback in callbacks)
                {
                    callback.OnResponse(request, response);
                }
            });
            return(response);
        }
 /// <summary>
 /// 查询数据
 /// </summary>
 public void OnQuery(
     AjaxTableSearchRequest request, IDatabaseContext context, ref IQueryable <ProductProperty> query)
 {
     // 按回收站
     query = query.FilterByRecycleBin(request);
     // 按关键字
     if (!string.IsNullOrEmpty(request.Keyword))
     {
         query = query.Where(q =>
                             q.Name.Contains(request.Keyword) ||
                             q.Remark.Contains(request.Keyword));
     }
     // 按是否销售属性
     if (request.Conditions.ContainsKey("IsSalesProperty"))
     {
         var isSalesProperty = request.Conditions.GetOrDefault <string>("IsSalesProperty") == "on";
         query = query.Where(q => q.IsSalesProperty == isSalesProperty);
     }
 }
        public virtual IActionResult SearchAction()
        {
            // 获取搜索请求
            var json    = Request.Get <string>("json");
            var request = AjaxTableSearchRequest.FromJson(json);
            // 搜索图片列表
            // 分页时如果没有结果,使用最后一页的结果
            var imageManager = Application.Ioc.Resolve <ImageManager>();
            var queryResult  = imageManager.Query(CategoryLower);

            if (!string.IsNullOrEmpty(request.Keyword))
            {
                queryResult = queryResult.Where(q =>
                                                q.FilenameWithoutExtension.Contains(request.Keyword)).ToList();
            }
            var response = new AjaxTableSearchResponse();
            var result   = response.Pagination.Paging(request, queryResult.AsQueryable());

            // 返回搜索结果
            response.PageNo   = request.PageNo;
            response.PageSize = request.PageSize;
            response.Rows.AddRange(result.Select(q => {
                var path = imageManager.GetImageWebPath(
                    CategoryLower, q.FilenameWithoutExtension, q.Extension);
                var thumbnailPath = imageManager.GetImageWebPath(
                    CategoryLower, q.FilenameWithoutExtension, imageManager.ImageThumbnailSuffix + q.Extension);
                var storageFile = imageManager.GetImageStorageFile(
                    CategoryLower, q.FilenameWithoutExtension, q.Extension);
                var lastWriteTime = storageFile.LastWriteTimeUtc.ToClientTimeString();
                var fileSize      = FileUtils.GetSizeDisplayName(storageFile.Length);
                return(new Dictionary <string, object>()
                {
                    { "name", q.FilenameWithoutExtension },
                    { "extension", q.Extension },
                    { "path", path },
                    { "thumbnailPath", thumbnailPath },
                    { "lastWriteTime", lastWriteTime },
                    { "fileSize", fileSize }
                });
            }));
            return(new JsonResult(response));
        }
Beispiel #7
0
        /// <summary>
        /// 选择字段
        /// </summary>
        public override void OnSelect(
            AjaxTableSearchRequest request,
            IList <EntityToTableRow <Domain.Entities.ProductRating> > pairs)
        {
            var ratingManager = Application.Ioc.Resolve <ProductRatingManager>();

            foreach (var pair in pairs)
            {
                var rankDescription = new T(pair.Entity.Rank.GetDescription());
                pair.Row["Id"]              = pair.Entity.Id;
                pair.Row["Username"]        = ratingManager.StripUsername(pair.Entity.Owner.Username);
                pair.Row["Rank"]            = (int)pair.Entity.Rank;
                pair.Row["RankDescription"] = rankDescription;
                pair.Row["Comment"]         = string.IsNullOrEmpty(pair.Entity.Comment) ?
                                              rankDescription : pair.Entity.Comment;
                pair.Row["MatchParametersDescription"] = pair.Entity.Product.GetMatchParametersDescription(
                    pair.Entity.OrderProduct.MatchParameters);
                pair.Row["CreateTime"] = pair.Entity.CreateTime.ToClientTimeString();
            }
        }
Beispiel #8
0
            /// <summary>
            /// 查询数据
            /// </summary>
            public void OnQuery(
                AjaxTableSearchRequest request, IDatabaseContext context, ref IQueryable <Database.Product> query)
            {
                // 按回收站
                query = query.FilterByRecycleBin(request);
                // 按关键字
                if (!string.IsNullOrEmpty(request.Keyword))
                {
                    query = query.Where(q =>
                                        q.Name.Contains(request.Keyword) ||
                                        q.Remark.Contains(request.Keyword));
                }
                // 按类型
                var productType = request.Conditions.GetOrDefault <string>("ProductType");

                if (!string.IsNullOrEmpty(productType))
                {
                    query = query.Where(q => q.Type == productType);
                }
                // 按状态
                var productState = request.Conditions.GetOrDefault <string>("ProductState");

                if (!string.IsNullOrEmpty(productState))
                {
                    query = query.Where(q => q.State == productState);
                }
                // 按分类
                var productClass = request.Conditions.GetOrDefault <long>("ProductClass");

                if (productClass > 0)
                {
                    query = query.Where(q => q.Classes.Any(c => c.Id == productClass));
                }
                // 按标签
                var productTag = request.Conditions.GetOrDefault <long>("ProductTag");

                if (productTag > 0)
                {
                    query = query.Where(q => q.Tags.Any(t => t.Id == productTag));
                }
            }
 /// <summary>
 /// 选择数据
 /// </summary>
 public override void OnSelect(
     AjaxTableSearchRequest request, IList <EntityToTableRow <BuyerOrder> > pairs)
 {
     foreach (var pair in pairs)
     {
         var displayInfo = pair.Entity.ToDisplayInfo();
         pair.Row["Id"]              = pair.Entity.Id;
         pair.Row["Serial"]          = pair.Entity.SellerOrder.Serial;
         pair.Row["HeadingHtml"]     = displayInfo.GetTableHeadingHtml().ToString();
         pair.Row["OrderProducts"]   = displayInfo.OrderProducts.GetSummryListHtml().ToString();
         pair.Row["Price"]           = displayInfo.OrderProducts.GetPriceListHtml().ToString();
         pair.Row["Quantity"]        = displayInfo.OrderProducts.GetOrderCountListHtml().ToString();
         pair.Row["ShippedQuantity"] = displayInfo.OrderProducts.GetShippedCountListHtml().ToString();
         pair.Row["TotalCost"]       = displayInfo.GetTotalCostWithPartsHtml().ToString();
         pair.Row["State"]           = pair.Entity.SellerOrder.State;
         pair.Row["Seller"]          = displayInfo.Seller;
         pair.Row["SellerId"]        = displayInfo.SellerId;
         pair.Row["Deleted"]         = pair.Entity.Deleted ? EnumDeleted.Deleted : EnumDeleted.None;
         pair.Row["OrderActions"]    = displayInfo.GetOrderActionsTableCellHtml().ToString();
     }
 }
Beispiel #10
0
            /// <summary>
            /// 添加列和操作
            /// </summary>
            public void OnResponse(
                AjaxTableSearchRequest request, AjaxTableSearchResponse response)
            {
                response.Columns.AddIdColumn("Id").StandardSetupForCrudPage <ProductManageApp>(request);
                response.Columns.AddNoColumn();
                response.Columns.AddHtmlColumn("Name", "30%");
                response.Columns.AddMemberColumn("Price");
                response.Columns.AddMemberColumn("Stock");
                response.Columns.AddMemberColumn("CreateTime");
                response.Columns.AddMemberColumn("LastUpdated");
                response.Columns.AddMemberColumn("Type");
                response.Columns.AddMemberColumn("State");
                response.Columns.AddEditColumnForCrudPage <UserManageApp>("Seller", "SellerId");
                response.Columns.AddMemberColumn("DisplayOrder");
                response.Columns.AddEnumLabelColumn("Deleted", typeof(EnumDeleted));
                var actionColumn = response.Columns.AddActionColumn("150");

                actionColumn.AddButtonForOpenLink(new T("Preview"),
                                                  "btn btn-xs btn-success", "fa fa-eye", "/product/view?id=<%-row.Id%>", "_blank");
                actionColumn.StandardSetupForCrudPage <ProductManageApp>(request);
            }
            /// <summary>
            /// 添加列和操作
            /// </summary>
            public override void OnResponse(
                AjaxTableSearchRequest request, AjaxTableSearchResponse response)
            {
                response.Columns.AddIdColumn("Id").StandardSetupFor <OrderCrudController>(request);
                response.Columns.AddHtmlColumn("OrderProducts", "30%");
                response.Columns.AddHtmlColumn("Price", "70");
                response.Columns.AddHtmlColumn("Quantity", "70");
                response.Columns.AddHtmlColumn("ShippedQuantity", "70");
                response.Columns.AddHtmlColumn("TotalCost", "70");
                response.Columns.AddEnumLabelColumn("State", typeof(OrderState), "50");
                response.Columns.AddEditColumnFor <UserCrudController>("Buyer", "BuyerId", width: "70");
                response.Columns.AddEditColumnFor <UserCrudController>("Seller", "SellerId", width: "70");
                var actionColumn = response.Columns.AddActionColumn("5%");
                var deleted      = request.Conditions.GetOrDefault <bool>("Deleted");

                if (!deleted)
                {
                    actionColumn.AddEditActionFor <OrderCrudController>();
                }
                actionColumn.AddHtmlAction("OrderActions");
            }
        /// <summary>
        /// 搜索请求的处理函数
        /// </summary>
        /// <returns></returns>
        protected override IActionResult SearchAction()
        {
            // 检查权限
            var privilegeManager = Application.Ioc.Resolve <PrivilegeManager>();

            privilegeManager.Check(AllowedUserTypes, RequiredPrivileges);
            // 获取参数并转换到搜索请求
            var json    = HttpManager.CurrentContext.Request.Get <string>("json");
            var request = AjaxTableSearchRequest.FromJson(json);
            // 构建搜索回应
            var query = Translates.Select(t => new Translation()
            {
                Original = t.Key, Translated = t.Value
            });

            if (!string.IsNullOrEmpty(request.Keyword))
            {
                query = query.Where(q => q.Original.Contains(request.Keyword) || q.Translated.Contains(request.Keyword));
            }
            var response = new AjaxTableSearchResponse();
            var result   = response.Pagination.Paging(request, query.AsQueryable());

            response.PageNo   = request.PageNo;
            response.PageSize = request.PageSize;
            response.Rows.AddRange(result.Select(translation => new Dictionary <string, object>()
            {
                { "Id", HttpUtils.UrlEncode(translation.Original) },
                { "OriginalText", translation.Original },
                { "TranslatedText", translation.Translated },
                { "ToString", translation.ToString() }
            }));
            response.Columns.AddNoColumn();
            response.Columns.AddMemberColumn("OriginalText");
            response.Columns.AddMemberColumn("TranslatedText");
            var actionColumn = response.Columns.AddActionColumn("130");

            actionColumn.AddEditAction("Translation", EditUrl, dialogParameters: new { size = "size-wide" });
            actionColumn.AddDeleteAction("Translation", DeleteUrl);
            return(new JsonResult(response));
        }
            /// <summary>
            /// 查询数据
            /// </summary>
            public override void OnQuery(
                AjaxTableSearchRequest request, ref IQueryable <Product> query)
            {
                // 按关键字
                if (!string.IsNullOrEmpty(request.Keyword))
                {
                    query = query.Where(q =>
                                        q.Name.Contains(request.Keyword) ||
                                        q.Remark.Contains(request.Keyword));
                }
                // 按类型
                var productType = request.Conditions.GetOrDefault <string>("ProductType");

                if (!string.IsNullOrEmpty(productType))
                {
                    query = query.Where(q => q.Type == productType);
                }
                // 按状态
                var productState = request.Conditions.GetOrDefault <string>("ProductState");

                if (!string.IsNullOrEmpty(productState))
                {
                    query = query.Where(q => q.State == productState);
                }
                // 按分类
                var productClass = request.Conditions.GetOrDefault <Guid?>("ProductClass");

                if (productClass != null)
                {
                    query = query.Where(q => q.Classes.Any(c => c.Id == productClass));
                }
                // 按标签
                var productTag = request.Conditions.GetOrDefault <Guid?>("ProductTag");

                if (productTag != null)
                {
                    query = query.Where(q => q.Tags.Any(t => t.Id == productTag));
                }
            }
Beispiel #14
0
 /// <summary>
 /// 选择数据
 /// </summary>
 public override void OnSelect(
     AjaxTableSearchRequest request, IList <EntityToTableRow <Product> > pairs)
 {
     foreach (var pair in pairs)
     {
         var matchedDatas = pair.Entity.MatchedDatas.ToList();
         var seller       = pair.Entity.Seller;
         pair.Row["Id"]           = pair.Entity.Id;
         pair.Row["Name"]         = pair.Entity.GetSummaryHtml().ToString();
         pair.Row["NameText"]     = pair.Entity.Name;
         pair.Row["Price"]        = matchedDatas.GetPriceString();
         pair.Row["Stock"]        = matchedDatas.GetTotalStockString();
         pair.Row["CreateTime"]   = pair.Entity.CreateTime.ToClientTimeString();
         pair.Row["UpdateTime"]   = pair.Entity.UpdateTime.ToClientTimeString();
         pair.Row["Type"]         = new T(pair.Entity.Type);
         pair.Row["State"]        = new T(pair.Entity.State);
         pair.Row["Seller"]       = seller?.Username;
         pair.Row["SellerId"]     = seller?.Id;
         pair.Row["DisplayOrder"] = pair.Entity.DisplayOrder;
         pair.Row["Deleted"]      = pair.Entity.Deleted ? EnumDeleted.Deleted : EnumDeleted.None;
     }
 }
Beispiel #15
0
            /// <summary>
            /// 过滤数据
            /// </summary>
            public override void OnQuery(
                AjaxTableSearchRequest request, ref IQueryable <SellerOrder> query)
            {
                // 按状态
                var state = request.Conditions.GetOrDefault <OrderState?>("State");

                if (state != null)
                {
                    query = query.Where(o => o.State == state);
                }
                // 按关键字
                if (!string.IsNullOrEmpty(request.Keyword))
                {
                    query = query.Where(q =>
                                        q.Serial.Contains(request.Keyword) ||
                                        q.Remark.Contains(request.Keyword));
                }
                // 按买家
                var buyer = request.Conditions.GetOrDefault <string>("Buyer");

                if (!string.IsNullOrEmpty(buyer))
                {
                    query = query.Where(q => q.Buyer.Username == buyer);
                }
                // 按卖家
                var seller = request.Conditions.GetOrDefault <string>("Seller");

                if (!string.IsNullOrEmpty(seller))
                {
                    query = query.Where(q => q.Owner.Username == seller);
                }
                // 按备注旗帜
                var flags = request.Conditions.GetOrDefault <OrderRemarkFlags?>("RemarkFlags");

                if (flags != null)
                {
                    query = query.Where(q => q.RemarkFlags == flags);
                }
            }
            /// <summary>
            /// 添加列和操作
            /// </summary>
            public override void OnResponse(
                AjaxTableSearchRequest request, AjaxTableSearchResponse response)
            {
                response.Columns.AddIdColumn("Id").StandardSetupFor <PaymentApiCrudController>(request);
                response.Columns.AddNoColumn();
                response.Columns.AddMemberColumn("Name", "35%");
                response.Columns.AddMemberColumn("Type");
                response.Columns.AddEditColumnFor <PaymentApiCrudController>("Owner", "OwnerId");
                response.Columns.AddMemberColumn("CreateTime");
                response.Columns.AddMemberColumn("UpdateTime");
                response.Columns.AddMemberColumn("DisplayOrder");
                response.Columns.AddEnumLabelColumn("Deleted", typeof(EnumDeleted));
                var actionColumn = response.Columns.AddActionColumn("155");
                var deleted      = request.Conditions.GetOrDefault <bool>("Deleted");

                if (!deleted)
                {
                    actionColumn.AddButtonForOpenLink(
                        new T("TestPayment"), "btn btn-xs btn-warning", "fa fa-edit",
                        "/admin/payment_apis/test_payment?id=<%-row.Id%>");
                }
                actionColumn.StandardSetupFor <PaymentApiCrudController>(request);
            }
Beispiel #17
0
            /// <summary>
            /// 添加列和操作
            /// </summary>
            public override void OnResponse(
                AjaxTableSearchRequest request, AjaxTableSearchResponse response)
            {
                response.Columns.AddIdColumn("Id").StandardSetupFor <TController>(request);
                response.Columns.AddTreeNodeColumn("Name", "Level", "NoChilds");
                response.Columns.AddMemberColumn("CreateTime");
                response.Columns.AddMemberColumn("DisplayOrder");
                response.Columns.AddEnumLabelColumn("Deleted", typeof(EnumDeleted));
                var actionColumn     = response.Columns.AddActionColumn();
                var deleted          = request.Conditions.GetOrDefault <bool>("Deleted");
                var dialogParameters = new { size = "size-wide" };

                if (!deleted)
                {
                    actionColumn.AddEditActionFor <TController>(dialogParameters: dialogParameters);
                    actionColumn.AddDeleteActionFor <TController>();
                }
                else
                {
                    actionColumn.AddRecoverActionFor <TController>();
                    actionColumn.AddDeleteForeverActionFor <TController>();
                }
            }
            /// <summary>
            /// 选择数据
            /// </summary>
            public void OnSelect(
                AjaxTableSearchRequest request, List <EntityToTableRow <Database.GenericClass> > pairs)
            {
                // 按上下级关系重新生成数据列表
                var classMapping = pairs.ToDictionary(p => p.Entity.Id);
                var tree         = TreeUtils.CreateTree(pairs,
                                                        p => p, p => classMapping.GetOrDefault(p.Entity.Parent == null ? 0 : p.Entity.Parent.Id));

                pairs.Clear();
                foreach (var node in tree.EnumerateAllNodes().Skip(1))
                {
                    var pair = node.Value;
                    pair.Row["Id"]           = pair.Entity.Id;
                    pair.Row["Name"]         = pair.Entity.Name;
                    pair.Row["ParentId"]     = pair.Entity.Parent == null ? 0 : pair.Entity.Parent.Id;
                    pair.Row["CreateTime"]   = pair.Entity.CreateTime.ToClientTimeString();
                    pair.Row["DisplayOrder"] = pair.Entity.DisplayOrder;
                    pair.Row["Deleted"]      = pair.Entity.Deleted ? EnumDeleted.Deleted : EnumDeleted.None;
                    pair.Row["Level"]        = node.GetParents().Count() - 1;
                    pair.Row["NoChilds"]     = !node.Childs.Any();
                    pairs.Add(pair);
                }
            }
        /// <summary>
        /// 搜索请求的处理函数
        /// </summary>
        /// <returns></returns>
        protected override IActionResult SearchAction()
        {
            var json    = Request.Get <string>("json");
            var request = AjaxTableSearchRequest.FromJson(json);
            var query   = Translates.Select(t =>
                                            new CustomTranslation()
            {
                Id = t.Key, Translated = t.Value
            });

            if (!string.IsNullOrEmpty(request.Keyword))
            {
                query = query.Where(q =>
                                    q.Id.Contains(request.Keyword) || q.Translated.Contains(request.Keyword));
            }
            var response = new AjaxTableSearchResponse();
            var result   = response.Pagination.Paging(request, query.AsQueryable());

            response.PageNo   = request.PageNo;
            response.PageSize = request.PageSize;
            response.Rows.AddRange(result.Select(translation => new Dictionary <string, object>()
            {
                { "Id", HttpUtils.UrlEncode(translation.Id) },
                { "OriginalText", translation.Id },
                { "TranslatedText", translation.Translated },
                { "ToString", translation.ToString() }
            }));
            response.Columns.AddNoColumn();
            response.Columns.AddMemberColumn("OriginalText");
            response.Columns.AddMemberColumn("TranslatedText");
            var actionColumn = response.Columns.AddActionColumn("130");

            actionColumn.AddEditAction("Translation", EditUrl, dialogParameters: new { size = "size-wide" });
            actionColumn.AddDeleteAction("Translation", DeleteUrl);
            return(new JsonResult(response));
        }
 /// <summary>
 /// 排序数据
 /// </summary>
 public void OnSort(
     AjaxTableSearchRequest request, IDatabaseContext context, ref IQueryable <UserShippingAddress> query)
 {
     query = query.OrderByDescending(q => q.Id);
 }
Beispiel #21
0
 /// <summary>
 /// 排序数据
 /// </summary>
 public override void OnSort(
     AjaxTableSearchRequest request, ref IQueryable <Product> query)
 {
     query = query.OrderByDescending(q => q.Id);
 }
 /// <summary>
 /// 添加列和批量处理
 /// </summary>
 public abstract void OnResponse(
     AjaxTableSearchRequest request, AjaxTableSearchResponse response);
 /// <summary>
 /// 选择需要的字段
 /// </summary>
 public abstract void OnSelect(
     AjaxTableSearchRequest request, IList <EntityToTableRow <TEntity> > pairs);
 /// <summary>
 /// 过滤数据
 /// 默认不过滤数据
 /// </summary>
 public virtual void OnQuery(
     AjaxTableSearchRequest request, ref IQueryable <TEntity> query)
 {
 }
Beispiel #25
0
        /// <summary>
        /// 添加删除相关的按钮
        /// 如果数据类型可以回收,则添加批量删除或批量恢复和永久删除
        /// 如果数据类型不可以回收,则添加批量永久删除
        /// </summary>
        /// <param name="column">Id列</param>
        /// <param name="request">搜索请求</param>
        /// <param name="dataType">数据类型</param>
        /// <param name="typeName">类型名称</param>
        /// <param name="batchUrl">批量操作使用的Url</param>
        public static void AddDeleteActions(
            this AjaxTableIdColumn column, AjaxTableSearchRequest request,
            Type dataType, string typeName, string batchUrl)
        {
            // 判断需要添加哪些操作
            bool addBatchDelete        = false;
            bool addBatchRecover       = false;
            bool addBatchDeleteForever = false;

            if (RecyclableTrait.For(dataType).IsRecyclable)
            {
                var deleted = request.Conditions.GetOrDefault <bool>("Deleted");
                addBatchDelete        = !deleted;
                addBatchRecover       = deleted;
                addBatchDeleteForever = deleted;
            }
            else
            {
                addBatchDeleteForever = true;
            }
            // 添加批量删除
            typeName = new T(typeName);
            var entityTrait = EntityTrait.For(dataType);

            if (addBatchDelete)
            {
                column.AddConfirmActionForMultiChecked(
                    new T("Batch Delete"),
                    "fa fa-recycle",
                    string.Format(new T("Please select {0} to delete"), typeName),
                    new T("Batch Delete"),
                    ScriptStrings.ConfirmMessageTemplateForMultiSelected(
                        string.Format(new T("Sure to delete following {0}?"), typeName), "ToString"),
                    ScriptStrings.PostConfirmedActionForMultiSelected(
                        entityTrait.PrimaryKey, batchUrl + "?action=delete"),
                    new { type = "type-danger" });
            }
            // 添加批量恢复
            if (addBatchRecover)
            {
                column.AddConfirmActionForMultiChecked(
                    new T("Batch Recover"),
                    "fa fa-history",
                    string.Format(new T("Please select {0} to recover"), typeName),
                    new T("Batch Recover"),
                    ScriptStrings.ConfirmMessageTemplateForMultiSelected(
                        string.Format(new T("Sure to recover following {0}?"), typeName), "ToString"),
                    ScriptStrings.PostConfirmedActionForMultiSelected(
                        entityTrait.PrimaryKey, batchUrl + "?action=recover"));
            }
            // 添加批量永久删除
            if (addBatchDeleteForever)
            {
                column.AddConfirmActionForMultiChecked(
                    new T("Batch Delete Forever"),
                    "fa fa-remove",
                    string.Format(new T("Please select {0} to delete"), typeName),
                    new T("Batch Delete Forever"),
                    ScriptStrings.ConfirmMessageTemplateForMultiSelected(
                        string.Format(new T("Sure to delete following {0} forever?"), typeName), "ToString"),
                    ScriptStrings.PostConfirmedActionForMultiSelected(
                        entityTrait.PrimaryKey, batchUrl + "?action=delete_forever"),
                    new { type = "type-danger" });
            }
        }
 /// <summary>
 /// 排序数据
 /// </summary>
 public void OnSort(
     AjaxTableSearchRequest request, IDatabaseContext context, ref IQueryable <Database.Article> query)
 {
     query = query.OrderByDescending(a => a.Id);
 }
 public void OnSort(AjaxTableSearchRequest request, ref IQueryable <User> query)
 {
 }
 public Func <TResult> WrapQueryMethod <TResult>(
     AjaxTableSearchRequest request, Func <TResult> queryMethod)
 {
     return(queryMethod);
 }
 /// <summary>
 /// 排序数据
 /// </summary>
 public void OnSort(
     AjaxTableSearchRequest request, IDatabaseContext context, ref IQueryable <User> query)
 {
     query = query.OrderByDescending(u => u.Id);
 }
 /// <summary>
 /// 排序数据
 /// </summary>
 public override void OnSort(
     AjaxTableSearchRequest request, ref IQueryable <Article> query)
 {
     query = query.OrderByDescending(a => a.Id);
 }