From 2fc5aef172d3065de29bd115a644e9001d31fa1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A7=E7=81=B0=E7=81=B0?= Date: Mon, 17 Oct 2022 02:00:50 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BF=AE=E5=A4=8D=E3=80=91=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=8B=BC=E5=9B=A2=E5=A4=B1=E8=B4=A5=E9=80=80=E6=AC=BE?= =?UTF-8?q?=E5=A4=B1=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CoreCms.Net.Configuration/GlobalConstVars.cs | 5 + .../Config/RedisMessageQueueSetup.cs | 1 + CoreCms.Net.RedisMQ/RefundSubscribe.cs | 89 +++++++++ .../Bill/CoreCmsBillPaymentsServices.cs | 1 + .../Bill/CoreCmsBillRefundServices.cs | 10 +- CoreCms.Net.Services/Pay/WeChatPayServices.cs | 2 +- .../Pintuan/CoreCmsPintuanRecordServices.cs | 49 ++--- .../pinTuan/pinTuanDetails/pinTuanDetails.vue | 15 ++ .../wwwroot/lib/layuiAdmin/lib/view.js | 173 +----------------- 9 files changed, 140 insertions(+), 205 deletions(-) create mode 100644 CoreCms.Net.RedisMQ/RefundSubscribe.cs diff --git a/CoreCms.Net.Configuration/GlobalConstVars.cs b/CoreCms.Net.Configuration/GlobalConstVars.cs index 9390fa59..94dc4a44 100644 --- a/CoreCms.Net.Configuration/GlobalConstVars.cs +++ b/CoreCms.Net.Configuration/GlobalConstVars.cs @@ -385,6 +385,11 @@ namespace CoreCms.Net.Configuration /// public const string AfterSalesReviewForPoint = "AfterSalesReviewForPoint"; + /// + /// 订单退款处理 + /// + public const string RefundSubscribeQueue = "RefundSubscribeQueue"; + /// /// 日志队列 diff --git a/CoreCms.Net.Core/Config/RedisMessageQueueSetup.cs b/CoreCms.Net.Core/Config/RedisMessageQueueSetup.cs index 84400a9a..1f901957 100644 --- a/CoreCms.Net.Core/Config/RedisMessageQueueSetup.cs +++ b/CoreCms.Net.Core/Config/RedisMessageQueueSetup.cs @@ -29,6 +29,7 @@ namespace CoreCms.Net.Core.Config //对应的订阅者类,需要new一个实例对象,当然你也可以传参,比如日志对象 m.ListSubscribe = new List() { typeof(MessagePushSubscribe), + typeof(RefundSubscribe), typeof(OrderAgentOrDistributionSubscribe), typeof(OrderAutomaticDeliverySubscribe), typeof(OrderFinishCommandSubscribe), diff --git a/CoreCms.Net.RedisMQ/RefundSubscribe.cs b/CoreCms.Net.RedisMQ/RefundSubscribe.cs new file mode 100644 index 00000000..f8930bac --- /dev/null +++ b/CoreCms.Net.RedisMQ/RefundSubscribe.cs @@ -0,0 +1,89 @@ +/*********************************************************************** + * Project: CoreCms + * ProjectName: 核心内容管理系统 + * Web: https://www.corecms.net + * Author: 大灰灰 + * Email: jianweie@163.com + * CreateTime: 2021/7/10 22:41:46 + * Description: 暂无 + ***********************************************************************/ + + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using CoreCms.Net.Configuration; +using CoreCms.Net.IServices; +using CoreCms.Net.Loging; +using CoreCms.Net.Model.Entities; +using InitQ.Abstractions; +using InitQ.Attributes; +using Newtonsoft.Json; + +namespace CoreCms.Net.RedisMQ +{ + /// + /// 订单退款处理 + /// + public class RefundSubscribe : IRedisSubscribe + { + + private readonly ICoreCmsOrderServices _orderServices; + private readonly ICoreCmsBillRefundServices _billRefundServices; + private readonly ISysTaskLogServices _taskLogServices; + + + public RefundSubscribe(ICoreCmsOrderServices orderServices, ICoreCmsBillRefundServices billRefundServices, ISysTaskLogServices taskLogServices) + { + _orderServices = orderServices; + _billRefundServices = billRefundServices; + _taskLogServices = taskLogServices; + } + + /// + /// 订单退款处理 + /// + /// + /// + [Subscribe(RedisMessageQueueKey.RefundSubscribeQueue)] + private async Task RefundSubscribeQueue(string msg) + { + try + { + var refundInfo = JsonConvert.DeserializeObject(msg); + + //去退款 + var toRefundResult = await _billRefundServices.ToRefund(refundInfo.refundId, (int)GlobalEnumVars.BillRefundStatus.STATUS_REFUND); + + //插入退款日志 + var log = new SysTaskLog + { + createTime = DateTime.Now, + isSuccess = toRefundResult.status, + name = "定时任务取消拼团订单退款日志", + parameters = JsonConvert.SerializeObject(toRefundResult) + }; + await _taskLogServices.InsertAsync(log); + + //更新订单状态为已退款已完成 + await _orderServices.UpdateAsync(p => new CoreCmsOrder() + { + payStatus = (int)GlobalEnumVars.OrderPayStatus.Refunded, + status = (int)GlobalEnumVars.OrderStatus.Complete + }, p => p.orderId == refundInfo.sourceId); + + NLogUtil.WriteAll(NLog.LogLevel.Info, LogType.RedisMessageQueue, "订单退款处理-成功", msg); + } + catch (Exception ex) + { + NLogUtil.WriteAll(NLog.LogLevel.Error, LogType.RedisMessageQueue, "订单退款处理-异常", msg, ex); + throw; + } + await Task.CompletedTask; + } + + + } +} diff --git a/CoreCms.Net.Services/Bill/CoreCmsBillPaymentsServices.cs b/CoreCms.Net.Services/Bill/CoreCmsBillPaymentsServices.cs index 53a1aab0..40f6da7f 100644 --- a/CoreCms.Net.Services/Bill/CoreCmsBillPaymentsServices.cs +++ b/CoreCms.Net.Services/Bill/CoreCmsBillPaymentsServices.cs @@ -828,6 +828,7 @@ namespace CoreCms.Net.Services } userId = orderInfo.userId; + type = orderInfo.orderType; } //::todo 校验支付方式是否存在 diff --git a/CoreCms.Net.Services/Bill/CoreCmsBillRefundServices.cs b/CoreCms.Net.Services/Bill/CoreCmsBillRefundServices.cs index 12aa8e06..46e294b7 100644 --- a/CoreCms.Net.Services/Bill/CoreCmsBillRefundServices.cs +++ b/CoreCms.Net.Services/Bill/CoreCmsBillRefundServices.cs @@ -129,8 +129,6 @@ namespace CoreCms.Net.Services if (status == (int)GlobalEnumVars.BillRefundStatus.STATUS_REFUND) { - //退款完成后的钩子 - jm.msg = "退款单退款成功"; //如果前端传过来的退款方式和退款单上的退款方式一样的话,就说明是原路返回,试着调用支付方式的退款方法,如果不一样的话,就直接做退款单的退款状态为已退款就可以了 if (paymentCodeStr == info.paymentCode && paymentCodeStr != "offline") @@ -152,7 +150,13 @@ namespace CoreCms.Net.Services //退款同意,先发退款消息和钩子,下面原路返回可能失败,但是在业务上相当于退款已经退过了,只是实际的款项可能还没到账 //发送退款消息 - await _messageCenterServices.SendMessage(info.userId, GlobalEnumVars.PlatformMessageTypes.RefundSuccess.ToString(), JObject.FromObject(info)); + if (jm.status) + { + await _messageCenterServices.SendMessage(info.userId, GlobalEnumVars.PlatformMessageTypes.RefundSuccess.ToString(), JObject.FromObject(info)); + + //退款完成后的钩子 + jm.msg = "退款单退款成功"; + } return jm; } diff --git a/CoreCms.Net.Services/Pay/WeChatPayServices.cs b/CoreCms.Net.Services/Pay/WeChatPayServices.cs index aea2c184..9dcddc6b 100644 --- a/CoreCms.Net.Services/Pay/WeChatPayServices.cs +++ b/CoreCms.Net.Services/Pay/WeChatPayServices.cs @@ -251,7 +251,7 @@ namespace CoreCms.Net.Services else { jm.status = false; - jm.msg = "退款失败"; + jm.msg = "退款失败:" + response.ErrCodeDes; jm.data = response; } diff --git a/CoreCms.Net.Services/Pintuan/CoreCmsPintuanRecordServices.cs b/CoreCms.Net.Services/Pintuan/CoreCmsPintuanRecordServices.cs index 2c9bb717..b0c333ba 100644 --- a/CoreCms.Net.Services/Pintuan/CoreCmsPintuanRecordServices.cs +++ b/CoreCms.Net.Services/Pintuan/CoreCmsPintuanRecordServices.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; +using CoreCms.Net.Caching.AutoMate.RedisCache; using CoreCms.Net.Configuration; using CoreCms.Net.IRepository; using CoreCms.Net.IRepository.UnitOfWork; @@ -44,12 +45,13 @@ namespace CoreCms.Net.Services private readonly IUnitOfWork _unitOfWork; private readonly IServiceProvider _serviceProvider; private readonly ISysTaskLogServices _taskLogServices; + private readonly IRedisOperationRepository _redisOperationRepository; public CoreCmsPinTuanRecordServices(IUnitOfWork unitOfWork , ICoreCmsPinTuanRecordRepository dal , ICoreCmsPinTuanRuleRepository pinTuanRuleRepository - , ICoreCmsUserRepository userRepository, IServiceProvider serviceProvider, ISysTaskLogServices taskLogServices) + , ICoreCmsUserRepository userRepository, IServiceProvider serviceProvider, ISysTaskLogServices taskLogServices, IRedisOperationRepository redisOperationRepository) { this._dal = dal; base.BaseDal = dal; @@ -58,6 +60,7 @@ namespace CoreCms.Net.Services _userRepository = userRepository; _serviceProvider = serviceProvider; _taskLogServices = taskLogServices; + _redisOperationRepository = redisOperationRepository; } @@ -260,6 +263,7 @@ namespace CoreCms.Net.Services var orderServices = container.ServiceProvider.GetService(); var billRefundServices = container.ServiceProvider.GetService(); + var billLadingServices = container.ServiceProvider.GetService(); var jm = new WebApiCallBack(); @@ -273,9 +277,7 @@ namespace CoreCms.Net.Services //获取开团数据 var teamList = await _dal.QueryListByClauseAsync(p => p.teamId == item.id); //更新开团失败数据 - await _dal.UpdateAsync( - p => new CoreCmsPinTuanRecord() { status = (int)GlobalEnumVars.PinTuanRecordStatus.Defeated }, - p => p.teamId == item.id); + await _dal.UpdateAsync(p => new CoreCmsPinTuanRecord() { status = (int)GlobalEnumVars.PinTuanRecordStatus.Defeated }, p => p.teamId == item.id); if (teamList == null || !teamList.Any()) continue; { @@ -298,7 +300,15 @@ namespace CoreCms.Net.Services if (orderInfo.shipStatus == (int)GlobalEnumVars.OrderShipStatus.Yes) { //如果已经发货了,就不管了,手动退款吧 - continue; + if (orderInfo.receiptType == (int)GlobalEnumVars.OrderReceiptType.SelfDelivery) + { + //清理掉未使用的提货单。 + await billLadingServices.DeleteAsync(p => p.orderId == orderInfo.orderId); + } + else + { + continue; + } } if (orderInfo.payStatus == (int)GlobalEnumVars.OrderPayStatus.No) @@ -310,40 +320,19 @@ namespace CoreCms.Net.Services else { //已支付,生成退款单,并直接退款,之后,更改订单状态 - var res = await billRefundServices.ToAdd(orderInfo.userId, orderInfo.orderId, 1, - orderInfo.payedAmount, ""); + var res = await billRefundServices.ToAdd(orderInfo.userId, orderInfo.orderId, (int)GlobalEnumVars.OrderType.PinTuan, orderInfo.payedAmount, ""); if (res.status == false) { continue; } - var refundInfo = await billRefundServices.QueryByClauseAsync(p => - p.sourceId == orderInfo.orderId && - p.status == (int)GlobalEnumVars.BillRefundType.Order && p.type == 1); + var refundInfo = await billRefundServices.QueryByClauseAsync(p => p.sourceId == orderInfo.orderId && p.status == (int)GlobalEnumVars.BillRefundType.Order && p.type == (int)GlobalEnumVars.OrderType.PinTuan); if (refundInfo == null) { //没有找到退款单 continue; } - //去退款 - var toRefundResult = await billRefundServices.ToRefund(refundInfo.refundId, (int)GlobalEnumVars.BillRefundStatus.STATUS_REFUND); - - //插入退款日志 - var log = new SysTaskLog - { - createTime = DateTime.Now, - isSuccess = toRefundResult.status, - name = "定时任务取消拼团订单退款日志", - parameters = JsonConvert.SerializeObject(toRefundResult) - }; - await _taskLogServices.InsertAsync(log); - - - //更新订单状态为已退款已完成 - await orderServices.UpdateAsync(p => new CoreCmsOrder() - { - payStatus = (int)GlobalEnumVars.OrderPayStatus.Refunded, - status = (int)GlobalEnumVars.OrderStatus.Complete - }, p => p.orderId == orderInfo.orderId); + //走队列 + await _redisOperationRepository.ListLeftPushAsync(RedisMessageQueueKey.RefundSubscribeQueue, JsonConvert.SerializeObject(refundInfo)); } } } diff --git a/CoreCms.Net.Uni-App/CoreShop/pages/activity/pinTuan/pinTuanDetails/pinTuanDetails.vue b/CoreCms.Net.Uni-App/CoreShop/pages/activity/pinTuan/pinTuanDetails/pinTuanDetails.vue index 70c1d0bb..ff549013 100644 --- a/CoreCms.Net.Uni-App/CoreShop/pages/activity/pinTuan/pinTuanDetails/pinTuanDetails.vue +++ b/CoreCms.Net.Uni-App/CoreShop/pages/activity/pinTuan/pinTuanDetails/pinTuanDetails.vue @@ -632,6 +632,21 @@ this.$store.commit('hasLogin', val); } }, + userInfo: { + get() { + return this.$store.state.userInfo; + }, + set(val) { + this.$store.commit('userInfo', val); + } + }, + pointSwitch() { return this.$store.state.config.pointSwitch }, + pointShowExchangePrice() { return this.$store.state.config.pointShowExchangePrice }, + pointDiscountedProportion() { return this.$store.state.config.pointDiscountedProportion }, + pointExchangeModel() { return this.$store.state.config.pointExchangeModel }, + pointShowName() { return this.$store.state.config.pointShowName }, + pointGetModel() { return this.$store.state.config.pointGetModel }, + pointShowPoint() { return this.$store.state.config.pointShowPoint }, shopName() { return this.$store.state.config.shopName; }, diff --git a/CoreCms.Net.Web.Admin/wwwroot/lib/layuiAdmin/lib/view.js b/CoreCms.Net.Web.Admin/wwwroot/lib/layuiAdmin/lib/view.js index 06051203..54cc0c61 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/lib/layuiAdmin/lib/view.js +++ b/CoreCms.Net.Web.Admin/wwwroot/lib/layuiAdmin/lib/view.js @@ -1,171 +1,2 @@ -; -layui.define(["laytpl", "layer"], function (e) { - var t = layui.jquery, - a = layui.laytpl, - n = layui.layer, - r = layui.setter, - o = (layui.device(), layui.hint()), - i = function (e) { - return new d(e) - }, s = "LAY_app_body", - d = function (e) { - this.id = e, this.container = t("#" + (e || s)) - }; - i.loading = function (e) { - e.append(this.elemLoad = t('')) - }, i.removeLoad = function () { - this.elemLoad && this.elemLoad.remove() - }, i.exit = function () { - layui.data(r.tableName, { - key: r.request.tokenName, - remove: !0 - }), location.hash = "/user/login" - }, i.req = function (e) { - var a = e.success, - n = e.error, - o = r.request, - s = r.response, - d = function () { - return r.debug ? "
URL:" + e.url : "" - }; - if (e.data = e.data || {}, e.headers = e.headers || {}, o.tokenName) { - var l = "string" == typeof e.data ? JSON.parse(e.data) : e.data; - e.data[o.tokenName] = o.tokenName in l ? e.data[o.tokenName] : layui.data(r.tableName)[o.tokenName] || "", e.headers[o.tokenName] = o.tokenName in e.headers ? e.headers[o.tokenName] : layui.data(r.tableName)[o.tokenName] || "" - } - return delete e.success, delete e.error, t.ajax(t.extend({ - type: "get", - dataType: "json", - success: function (t) { - var n = s.statusCode; - if (t[s.statusName] == n.ok) "function" == typeof e.done && e.done(t); - else if (t[s.statusName] == n.logout) i.exit(); - else { - var r = ["Error: " + (t[s.msgName] || "返回状态码异常"), d()].join("
"); - i.error(r) - } - "function" == typeof a && a(t) - }, - error: function (e, t) { - var a = ["请求异常,请重试
错误信息:" + t, d()].join(""); - i.error(a), "function" == typeof n && n.apply(this, arguments) - } - }, e)) - }, i.popup = function (e) { - var a = e.success, - r = e.skin; - return delete e.success, delete e.skin, n.open(t.extend({ - type: 0, - title: "提示", - content: "", - id: "LAY-system-view-popup", - skin: "layui-layer-admin" + (r ? " " + r : ""), - shadeClose: !0, - closeBtn: !1, - success: function (e, r) { - var o = t(''); - e.append(o), o.on("click", function () { - n.close(r) - }), "function" == typeof a && a.apply(this, arguments) - } - }, e)) - }, i.error = function (e, a) { - return i.popup(t.extend({ - content: e, - maxWidth: 500, - offset: "auto", - anim: 6, - id: "LAY_adminError" - }, a)) - }, d.prototype.render = function (e, a) { - var n = this; - layui.router(); - return e = r.views + e + r.engine, t("#" + s).children(".layadmin-loading").remove(), i.loading(n.container), t.ajax({ - url: e, - type: "get", - dataType: "html", - data: { - v: layui.cache.version - }, - success: function (e) { - e = "
" + e + "
"; - var r = t(e).find("title"), - o = r.text() || (e.match(/\([\s\S]*)\<\/title>/) || [])[1], - s = { - title: o, - body: e - }; - r.remove(), n.params = a || {}, n.then && (n.then(s), delete n.then), n.parse(e), i.removeLoad(), n.done && (n.done(s), delete n.done) - }, - error: function (e) { - return i.removeLoad(), n.render.isError ? i.error("请求视图文件异常,状态:" + e.status) : (404 === e.status ? n.render("template/tips/404") : n.render("template/tips/error"), void (n.render.isError = !0)) - } - }), n - }, d.prototype.parse = function (e, n, r) { - var s = this, - d = "object" == typeof e, - l = d ? e : t(e), - u = d ? e : l.find("*[template]"), - c = function (e) { - var n = a(e.dataElem.html()), - o = t.extend({ - params: y.params - }, e.res); - e.dataElem.after(n.render(o)), "function" == typeof r && r(); - try { - e.done && new Function("d", e.done)(o) - } catch (i) { - console.error(e.dataElem[0], "\n存在错误回调脚本\n\n", i) - } - }, y = layui.router(); - l.find("title").remove(), s.container[n ? "after" : "html"](l.children()), y.params = s.params || {}; - for (var p = u.length; p > 0; p--)! function () { - var e = u.eq(p - 1), - t = e.attr("lay-done") || e.attr("lay-then"), - n = a(e.attr("lay-url") || "").render(y), - r = a(e.attr("lay-data") || "").render(y), - s = a(e.attr("lay-headers") || "").render(y); - try { - r = new Function("return " + r + ";")() - } catch (d) { - o.error("lay-data: " + d.message), r = {} - } - try { - s = new Function("return " + s + ";")() - } catch (d) { - o.error("lay-headers: " + d.message), s = s || {} - } - n ? i.req({ - type: e.attr("lay-type") || "get", - url: n, - data: r, - dataType: "json", - headers: s, - success: function (a) { - c({ - dataElem: e, - res: a, - done: t - }) - } - }) : c({ - dataElem: e, - done: t - }) - }(); - return s - }, d.prototype.send = function (e, t) { - var n = a(e || this.container.html()).render(t || {}); - return this.container.html(n), this - }, d.prototype.refresh = function (e) { - var t = this, - a = t.container.next(), - n = a.attr("lay-templateid"); - return t.id != n ? t : (t.parse(t.container, "refresh", function () { - t.container.siblings('[lay-templateid="' + t.id + '"]:last').remove(), "function" == typeof e && e() - }), t) - }, d.prototype.then = function (e) { - return this.then = e, this - }, d.prototype.done = function (e) { - return this.done = e, this - }, e("view", i) -}); \ No newline at end of file +/** layuiAdmin.pro-v1.7.0 LPPL License */ + ;layui.define(["laytpl","layer"],function(e){var t=layui.jquery,a=layui.laytpl,n=layui.layer,r=layui.setter,o=(layui.device(),layui.hint()),i=function(e){return new d(e)},s="LAY_app_body",d=function(e){this.id=e,this.container=t("#"+(e||s))};i.loading=function(e){e.append(this.elemLoad=t(''))},i.removeLoad=function(){this.elemLoad&&this.elemLoad.remove()},i.exit=function(){layui.data(r.tableName,{key:r.request.tokenName,remove:!0}),location.hash="/user/login"},i.req=function(e){var a=e.success,n=e.error,o=r.request,s=r.response,d=function(){return r.debug?"
URL:"+e.url:""};if(e.data=e.data||{},e.headers=e.headers||{},o.tokenName){var l="string"==typeof e.data?JSON.parse(e.data):e.data;e.data[o.tokenName]=o.tokenName in l?e.data[o.tokenName]:layui.data(r.tableName)[o.tokenName]||"",e.headers[o.tokenName]=o.tokenName in e.headers?e.headers[o.tokenName]:layui.data(r.tableName)[o.tokenName]||""}return delete e.success,delete e.error,t.ajax(t.extend({type:"get",dataType:"json",success:function(t){var n=s.statusCode;if(t[s.statusName]==n.ok)"function"==typeof e.done&&e.done(t);else if(t[s.statusName]==n.logout)i.exit();else{var r=["Error: "+(t[s.msgName]||"返回状态码异常"),d()].join("");i.error(r)}"function"==typeof a&&a(t)},error:function(e,t){var a=["请求异常,请重试
错误信息:"+t,d()].join("");i.error(a),"function"==typeof n&&n.apply(this,arguments)}},e))},i.popup=function(e){var a=e.success,r=e.skin;return delete e.success,delete e.skin,n.open(t.extend({type:1,title:"提示",content:"",id:"LAY-system-view-popup",skin:"layui-layer-admin"+(r?" "+r:""),shadeClose:!0,closeBtn:!1,success:function(e,r){var o=t('');e.append(o),o.on("click",function(){n.close(r)}),"function"==typeof a&&a.apply(this,arguments)}},e))},i.error=function(e,a){return i.popup(t.extend({content:e,maxWidth:500,offset:"auto",anim:6,id:"LAY_adminError"},a))},d.prototype.render=function(e,a){var n=this;layui.router();return e=r.views+e+r.engine,t("#"+s).children(".layadmin-loading").remove(),i.loading(n.container),t.ajax({url:e,type:"get",dataType:"html",data:{v:layui.cache.version},success:function(e){e="
"+e+"
";var r=t(e).find("title"),o=r.text()||(e.match(/\([\s\S]*)\<\/title>/)||[])[1],s={title:o,body:e};r.remove(),n.params=a||{},n.then&&(n.then(s),delete n.then),n.parse(e),i.removeLoad(),n.done&&(n.done(s),delete n.done)},error:function(e){return i.removeLoad(),n.render.isError?i.error("请求视图文件异常,状态:"+e.status):(404===e.status?n.render("template/tips/404"):n.render("template/tips/error"),void(n.render.isError=!0))}}),n},d.prototype.parse=function(e,n,r){var s=this,d="object"==typeof e,l=d?e:t(e),u=d?e:l.find("*[template]"),c=function(e){var n=a(e.dataElem.html()),o=t.extend({params:y.params},e.res);e.dataElem.after(n.render(o)),"function"==typeof r&&r();try{e.done&&new Function("d",e.done)(o)}catch(i){console.error(e.dataElem[0],"\n存在错误回调脚本\n\n",i)}},y=layui.router();l.find("title").remove(),s.container[n?"after":"html"](l.children()),y.params=s.params||{};for(var p=u.length;p>0;p--)!function(){var e=u.eq(p-1),t=e.attr("lay-done")||e.attr("lay-then"),n=a(e.attr("lay-url")||"").render(y),r=a(e.attr("lay-data")||"").render(y),s=a(e.attr("lay-headers")||"").render(y);try{r=new Function("return "+r+";")()}catch(d){o.error("lay-data: "+d.message),r={}}try{s=new Function("return "+s+";")()}catch(d){o.error("lay-headers: "+d.message),s=s||{}}n?i.req({type:e.attr("lay-type")||"get",url:n,data:r,dataType:"json",headers:s,success:function(a){c({dataElem:e,res:a,done:t})}}):c({dataElem:e,done:t})}();return s},d.prototype.send=function(e,t){var n=a(e||this.container.html()).render(t||{});return this.container.html(n),this},d.prototype.refresh=function(e){var t=this,a=t.container.next(),n=a.attr("lay-templateid");return t.id!=n?t:(t.parse(t.container,"refresh",function(){t.container.siblings('[lay-templateid="'+t.id+'"]:last').remove(),"function"==typeof e&&e()}),t)},d.prototype.then=function(e){return this.then=e,this},d.prototype.done=function(e){return this.done=e,this},e("view",i)}); \ No newline at end of file