/// <summary> /// 返回保存成功,并在一定时间后刷新当前页面 /// </summary> /// <param name="form">表单</param> /// <param name="milliseconds">刷新延迟</param> /// <returns></returns> public static object SaveSuccessAndRefreshPage(this IModelFormBuilder form, int milliseconds) { return(new { message = new T("Saved Successfully"), script = BaseScriptStrings.RefreshAfter(milliseconds) }); }
public IActionResult Rate(string serial) { var buyerOrderManager = Application.Ioc.Resolve <BuyerOrderManager>(); var productRatingManager = Application.Ioc.Resolve <ProductRatingManager>(); var buyerOrderId = buyerOrderManager.GetBuyerOrderIdFromSerial(serial); if (Request.Method == HttpMethods.GET) { // 显示可评价的商品 if (buyerOrderId == null && Context.GetIsEditingPage()) { var sessionManager = Application.Ioc.Resolve <SessionManager>(); var userId = sessionManager.GetSession().GetUser().Id; buyerOrderId = productRatingManager.SelectOneRatableBuyerOrder(userId); } var displayInfos = buyerOrderId == null ? new List <OrderProductDisplayInfo>() : productRatingManager.GetUnratedOrderProductDisplayInfos(buyerOrderId.Value); return(new TemplateResult("shopping.productrating/order_rate.html", new { displayInfos })); } // 提交评价 var arguments = Request.GetAllDictionary(); var files = Request.GetPostedFiles(); productRatingManager.AddRatingsFromRequestArguments(buyerOrderId.Value, arguments, files); return(new JsonResult(new { message = new T("Rating successful, Redirecting to order list..."), script = BaseScriptStrings.Redirect("/user/orders", 1500) })); }
public IActionResult UpdateTransactionState(Guid transactionId) { // 更新交易状态 var alipayMobileManager = Application.Ioc.Resolve <AlipayMobileManager>(); alipayMobileManager.UpdateTransactionState(transactionId); // 支付成功或失败时跳转到结果页 var transactionManager = Application.Ioc.Resolve <PaymentTransactionManager>(); var transaction = transactionManager.Get(transactionId); var resultUrl = transactionManager.GetResultUrl(transactionId); if (transaction.State == PaymentTransactionState.Success) { return(new JsonResult(new { message = new T("Alipay qrcode payment success, redirecting to result page..."), script = BaseScriptStrings.Redirect(resultUrl, 3000) })); } else if (!transaction.Check(t => t.IsPayable).First) { return(new JsonResult(new { message = new T("Alipay qrcode payment failed, redirecting to result page..."), script = BaseScriptStrings.Redirect(resultUrl, 3000) })); } return(new JsonResult(new { hint = "success but nothing changed" })); }
/// <summary> /// 提交表单 /// </summary> /// <returns></returns> protected override object OnSubmit() { var app = new PaymentApiCrudController(); var url = string.Format("{0}?type={1}", app.AddUrl, Type); return(new { script = BaseScriptStrings.RedirectModal(url) }); }
/// <summary> /// 添加列和操作 /// </summary> public override void OnResponse( AjaxTableSearchRequest request, AjaxTableSearchResponse response) { var idColumn = response.Columns.AddIdColumn("Id"); idColumn.StandardSetupFor <BuyerOrderCrudController>(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.AddMemberColumn("Seller", "70"); response.Columns.AddEnumLabelColumn("Deleted", typeof(EnumDeleted), "70"); var actionColumn = response.Columns.AddActionColumn("5%"); var deleted = request.Conditions.GetOrDefault <bool>("Deleted"); if (!deleted) { idColumn.AddConfirmActionForMultiChecked( new T("MergePayment"), "fa fa-credit-card", new T("Please select orders to merge payment"), new T("MergePayment"), BaseScriptStrings.ConfirmMessageTemplateForMultiSelected( new T("Sure to merge following order's payment?"), "ToString"), BaseScriptStrings.PostConfirmedActionForMultiSelected( "Serial", "/user/orders/merge_payment")); actionColumn.AddButtonForOpenLink( new T("View"), "btn btn-xs btn-info", "fa fa-edit", "/user/orders/edit?serial=<%-row.Serial%>"); } actionColumn.AddHtmlAction("OrderActions"); }
public IActionResult ApplyBackupTheme(string filename) { var themeManager = Application.Ioc.Resolve <VisualThemeManager>(); themeManager.ApplyBackupTheme(filename); return(new JsonResult(new { message = new T("Apply theme success, reloading this page......"), script = BaseScriptStrings.RefreshAfter(3000) })); }
public IActionResult Create() { this.RequireAjaxRequest(); var orderManager = Application.Ioc.Resolve <SellerOrderManager>(); var transactionManager = Application.Ioc.Resolve <PaymentTransactionManager>(); var sessionManager = Application.Ioc.Resolve <SessionManager>(); var createOrderParameters = Request .Get <CreateOrderParameters>("CreateOrderParameters") ?? new CreateOrderParameters(); createOrderParameters.SetLoginInfo(); var result = orderManager.CreateOrder(createOrderParameters); var transaction = result.CreatedTransactions.Last(); var resultUrl = transactionManager.GetResultUrl(transaction.Id); return(new JsonResult(new { script = BaseScriptStrings.Redirect(resultUrl) })); }
/// <summary> /// 提交表单 /// </summary> /// <returns></returns> protected override object OnSubmit() { var orderManager = Application.Ioc.Resolve <SellerOrderManager>(); var transactionManager = Application.Ioc.Resolve <PaymentTransactionManager>(); var sessionManager = Application.Ioc.Resolve <SessionManager>(); var createOrderParameters = string.IsNullOrEmpty(CreateOrderParameters) ? new CreateOrderParameters() : JsonConvert.DeserializeObject <CreateOrderParameters>(CreateOrderParameters); createOrderParameters.SetLoginInfo(); var result = orderManager.CreateOrder(createOrderParameters); var transaction = result.CreatedTransactions.Last(); var resultUrl = transactionManager.GetResultUrl(transaction.Id); return(new { script = BaseScriptStrings.Redirect(resultUrl) }); }
/// <summary> /// 添加删除按钮 /// 点击后弹出确认框,确认后把json=[数据Id]提交到删除url /// </summary> /// <param name="column">操作列</param> /// <param name="typeName">类型名称</param> /// <param name="deleteUrl">删除使用的Url</param> /// <param name="name">名称,不指定时使用默认值</param> /// <param name="buttonClass">按钮的Css类,不指定时使用默认值</param> /// <param name="iconClass">图标的Css类,不指定时使用默认值</param> /// <param name="titleTemplate">标题的模板,格式是underscore.js的格式,参数传入rows</param> /// <param name="urlTemplate">编辑Url的模板,格式是underscore.js的格式,参数传入rows</param> /// <param name="primaryKey">数据Id保存的名称,不指定时使用默认值</param> /// <param name="dialogParameters">弹出框的参数,不指定时使用默认值</param> public static void AddDeleteAction( this AjaxTableActionColumn column, string typeName, string deleteUrl, string name = null, string buttonClass = null, string iconClass = null, string titleTemplate = null, string urlTemplate = null, string primaryKey = null, object dialogParameters = null) { primaryKey = primaryKey ?? nameof(IEntity <Guid> .Id); column.AddConfirmActionForBelongedRow( name ?? new T("Delete"), buttonClass ?? "btn btn-xs btn-danger", iconClass ?? "fa fa-remove", titleTemplate ?? string.Format(new T("Delete {0}"), new T(typeName)), BaseScriptStrings.ConfirmMessageTemplateForMultiSelected( string.Format(new T("Sure to delete following {0}?"), new T(typeName)), "ToString"), BaseScriptStrings.PostConfirmedActionForMultiSelected(primaryKey, deleteUrl), dialogParameters ?? new { type = "type-danger" }); }
/// <summary> /// 添加恢复按钮 /// 点击后弹出确认框,确认后把json=[数据Id]提交到恢复url /// </summary> /// <param name="column">操作列</param> /// <param name="typeName">类型名称</param> /// <param name="recoverUrl">恢复使用的Url</param> /// <param name="name">名称,不指定时使用默认值</param> /// <param name="buttonClass">按钮的Css类,不指定时使用默认值</param> /// <param name="iconClass">图标的Css类,不指定时使用默认值</param> /// <param name="titleTemplate">标题的模板,格式是underscore.js的格式,参数传入rows</param> /// <param name="urlTemplate">编辑Url的模板,格式是underscore.js的格式,参数传入rows</param> /// <param name="primaryKey">数据Id保存的名称,不指定时使用默认值</param> /// <param name="dialogParameters">弹出框的参数,不指定时使用默认值</param> public static void AddRecoverAction( this AjaxTableActionColumn column, string typeName, string recoverUrl, string name = null, string buttonClass = null, string iconClass = null, string titleTemplate = null, string urlTemplate = null, string primaryKey = null, object dialogParameters = null) { primaryKey = primaryKey ?? nameof(IEntity <Guid> .Id); column.AddConfirmActionForBelongedRow( name ?? new T("Recover"), buttonClass ?? "btn btn-xs btn-info", iconClass ?? "fa fa-history", titleTemplate ?? string.Format(new T("Recover {0}"), new T(typeName)), BaseScriptStrings.ConfirmMessageTemplateForMultiSelected( string.Format(new T("Sure to recover following {0}?"), new T(typeName)), "ToString"), BaseScriptStrings.PostConfirmedActionForMultiSelected(primaryKey, recoverUrl), dialogParameters); }
protected IActionResult MergePayment() { var serials = Request.Get <IList <string> >("json"); var orderManager = Application.Ioc.Resolve <BuyerOrderManager>(); var orderIds = orderManager.GetBuyerOrderIdsFromSerials(serials); if (orderIds.Count != serials.Count) { throw new BadRequestException(new T("Some order not exists")); } else if (orderIds.Count <= 1) { throw new BadRequestException(new T("Merge payment required atleast 2 orders")); } var transactionId = orderManager.MergePayment(orderIds); var transactionManager = Application.Ioc.Resolve <PaymentTransactionManager>(); var checkoutUrl = transactionManager.GetResultUrl(transactionId); return(new JsonResult(new { script = BaseScriptStrings.Redirect(checkoutUrl) })); }
/// <summary> /// 提交表单 /// </summary> /// <returns></returns> protected override object OnSubmit() { // 检查支付密码是否正确 var apiData = Transaction.Api.ExtraData.GetOrDefault <ApiData>("ApiData") ?? new ApiData(); apiData.CheckPaymentPassword(PaymentPassword); // 按类型执行支付操作 var transactionManager = Application.Ioc.Resolve <PaymentTransactionManager>(); var state = PayType == (int)PayTypes.ImmediateArrival ? PaymentTransactionState.Success : PaymentTransactionState.SecuredPaid; transactionManager.Process(Transaction.Id, null, state); // 返回成功并跳转到交易结果页 var resultUrl = string.Format("/payment/transaction/pay_result?id={0}", Transaction.Id); return(new { message = new T("Payment Successfully, Redirecting to result page..."), script = BaseScriptStrings.Redirect(resultUrl, 3000) }); }
/// <summary> /// 提交表单 /// </summary> /// <returns></returns> protected override object OnSubmit() { // 创建交易 var api = GetApiFromRequest(); var sessionManager = Application.Ioc.Resolve <SessionManager>(); var payerId = sessionManager.GetSession().GetUser().Id; var payeeId = api.Owner?.Id; var transactionManager = Application.Ioc.Resolve <PaymentTransactionManager>(); var apiManager = Application.Ioc.Resolve <PaymentApiManager>(); var paymentFee = apiManager.CalculatePaymentFee(api.Id, Amount); var transaction = transactionManager.CreateTransaction( "TestTransaction", api.Id, Amount, paymentFee, Currency, payerId, payeeId, payerId, Description); // 跳转到支付url地址 var url = transactionManager.GetPaymentUrl(transaction.Id); return(new { message = new T("Create test transaction success, redirecting to payment page..."), script = BaseScriptStrings.Redirect(url, 3000) }); }
public object Add(Guid productId) { // 获取当前登录的用户 var sessionManager = Application.Ioc.Resolve <SessionManager>(); var session = sessionManager.GetSession(); var user = session.GetUser(); if (user == null) { // 用户不存在时跳转到登录页面 return(new { message = new T("Bookmark product require login, redirecting to login page..."), script = BaseScriptStrings.Redirect("/user/login", 1500) }); } // 调用管理器添加 var productBookmarkManager = Application.Ioc.Resolve <ProductBookmarkManager>(); if (!productBookmarkManager.Add(user.Id, productId)) { return(new { message = new T("Product already bookmarked"), bookmarked = true }); } return(new { message = new T("Bookmark product success"), bookmarked = true }); }
/// <summary> /// 添加删除相关的按钮 /// 如果数据类型可以回收,则添加批量删除或批量恢复和永久删除 /// 如果数据类型不可以回收,则添加批量永久删除 /// </summary> /// <param name="column">Id列</param> /// <param name="request">搜索请求</param> /// <param name="dataType">数据类型</param> /// <param name="typeName">类型名称</param> /// <param name="batchUrl">批量操作使用的Url</param> /// <param name="primaryKey">主键名称,不传入时使用默认</param> /// <param name="allowDeleteRecover">是否允许删除恢复,不传入时使用默认</param> /// <param name="allowDeleteForever">是否允许永久删除,不传入时使用默认</param> public static void AddDeleteActions( this AjaxTableIdColumn column, AjaxTableSearchRequest request, Type dataType, string typeName, string batchUrl, string primaryKey = null, bool?allowDeleteRecover = null, bool?allowDeleteForever = null) { // 判断需要添加哪些操作 bool addBatchDelete = false; bool addBatchRecover = false; bool addBatchDeleteForever = false; if (typeof(IHaveDeleted).GetTypeInfo().IsAssignableFrom(dataType)) { var deleted = request.Conditions.GetOrDefault <bool>("Deleted"); addBatchDelete = (allowDeleteRecover == false) ? false : !deleted; addBatchRecover = (allowDeleteRecover == false) ? false : deleted; addBatchDeleteForever = (allowDeleteForever == false) ? false : deleted; } else { addBatchDeleteForever = allowDeleteForever ?? true; } // 添加批量删除 typeName = new T(typeName); primaryKey = primaryKey ?? nameof(IEntity <Guid> .Id); if (addBatchDelete) { column.AddConfirmActionForMultiChecked( new T("Batch Delete"), "fa fa-recycle", new T("Please select {0} to delete", typeName), new T("Batch Delete"), BaseScriptStrings.ConfirmMessageTemplateForMultiSelected( new T("Sure to delete following {0}?", typeName), "ToString"), BaseScriptStrings.PostConfirmedActionForMultiSelected( primaryKey, batchUrl + "?action=delete"), new { type = "type-danger" }); } // 添加批量恢复 if (addBatchRecover) { column.AddConfirmActionForMultiChecked( new T("Batch Recover"), "fa fa-history", new T("Please select {0} to recover", typeName), new T("Batch Recover"), BaseScriptStrings.ConfirmMessageTemplateForMultiSelected( new T("Sure to recover following {0}?", typeName), "ToString"), BaseScriptStrings.PostConfirmedActionForMultiSelected( primaryKey, batchUrl + "?action=recover")); } // 添加批量永久删除 if (addBatchDeleteForever) { column.AddConfirmActionForMultiChecked( new T("Batch Delete Forever"), "fa fa-remove", new T("Please select {0} to delete", typeName), new T("Batch Delete Forever"), BaseScriptStrings.ConfirmMessageTemplateForMultiSelected( new T("Sure to delete following {0} forever?", typeName), "ToString"), BaseScriptStrings.PostConfirmedActionForMultiSelected( primaryKey, batchUrl + "?action=delete_forever"), new { type = "type-danger" }); } }
public IActionResult SwitchToLanguage(string language) { Context.PutCookie(LocaleUtils.LanguageKey, language); return(new JsonResult(new { script = BaseScriptStrings.RefreshAfter(0) })); }