Ext.app.RT.CartItem=Ext.data.Record.create([{name:"itemId",type:"int"},{name:"itemName"},{name:"specification"},{name:"modelNo"},{name:"mainImageId"},{name:"quantity",type:"float"},{name:"unitName"},{name:"sellingPrice",type:"float"},{name:"amount",type:"float"}]);AddressSelector=function(a){Ext.apply(this,a);this.store=new Ext.data.Store({reader:new Ext.data.ArrayReader({},Ext.app.RT.ShippingAddress)});this.grid=new Ext.app.AddressGrid({title:"选择预定义地址",store:this.store});this.form=new Ext.app.AddressForm({title:"输入新地址"});this.form.add({xtype:"checkbox",name:"save-addr",hideLabel:true,checked:true,hideParent:true,boxLabel:"自动保存该地址到发货地址清单以便下次使用"});this.items=[this.grid,this.form];AddressSelector.superclass.constructor.call(this)};Ext.extend(AddressSelector,Ext.TabPanel,{activeTab:0,initEvents:function(){AddressSelector.superclass.initEvents.call(this);this.form.on("activate",this.form.doLayout);this.on("show",this.loadAddress,this,{single:true})},loadAddress:function(){Ext.Ajax.request({url:"/user",jsonData:{version:"1.1",method:"getAddresses",params:{}},success:function(a){var b=Ext.decode(a.responseText);this.store.loadData(b.result);var c=this.store.getCount();if(c>0){this.grid.getSelectionModel().selectFirstRow();this.grid.enable();if(c>=5){var d=this.form.find("name","save-addr")[0];d.setValue(false);d.hide()}}else{this.grid.disable();this.activate(this.form)}},scope:this,nocache:true})},getAddress:function(){var a=this.getActiveTab();if(a===this.grid){var c=a.getSelectionModel().getSelected();return c?c.data:null}else{var b=a.getForm();return a.isValid()?b.getValues():null}},needSaveAddr:function(){return(this.getActiveTab()===this.form)&&(this.form.getForm().findField("save-addr").getValue())}});Ext.app.ShoppingCart=function(){var b=new Ext.ux.grid.ActionColumn({action:"delete",width:30,actionTooltip:{text:"删除该商品"},handler:function(d,c){d.store.remove(c);d.getView().refresh()}});this.store=new Ext.data.Store({reader:new Ext.data.ArrayReader({},Ext.app.RT.CartItem),listeners:{update:function(d,c){c.data.amount=c.data.sellingPrice*c.data.quantity;this.refreshSummaryData();this.refreshSummaryDisplay();Ext.getCmp("btn-cancel-cart").enable()},remove:function(){this.refreshSummaryData();this.refreshSummaryDisplay();Ext.getCmp("btn-cancel-cart").enable()},scope:this}});this.grid=new Ext.grid.EditorGridPanel({id:"cart-grid",store:this.store,cm:new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(),{header:"图片",width:10,dataIndex:"mainImageId",menuDisabled:true,align:"center",renderer:function(d,e,c){if(d!==null){return'<a target="_blank" href="/shop/item/'+c.data.itemId+'.html"><img width="30" height="30" src=/imglib/thumb/'+d+'.jpg onload="javascript:resizeImage(this, 30, 30)"/></a>'}else{return'<a target="_blank" href="/shop/item/'+c.data.itemId+'.html" >无图</a>'}}},{header:"商品名称",width:60,dataIndex:"itemName"},{header:"商品规格",width:40,dataIndex:"specification"},{header:"型号",width:20,sortable:true,dataIndex:"modelNo"},{header:"售价",width:25,align:"right",sortable:true,renderer:function(d,e,c){return Ext.util.Format.cnMoney(c.data.sellingPrice)+" / "+c.data.unitName},dataIndex:"sellingPrice"},{header:"数量",width:15,align:"right",sortable:true,summaryType:"sum",dataIndex:"quantity",editor:new Ext.form.NumberField({allowBlank:false,allowNegative:false,style:"text-align: center;"}),renderer:function(c,d){d.css="col-edit";return c}},{header:"金额",width:20,align:"right",sortable:true,summaryType:"sum",renderer:Ext.util.Format.cnMoney,dataIndex:"amount"},b]),sm:new Ext.grid.RowSelectionModel({singleSelect:true}),listeners:{viewready:function(c){c.getView().addListener("refresh",function(e){if(Ext.get("pop_img")===null){Ext.DomHelper.createTemplate('<div id="pop_img" class="x-hidden"><img id="pointer" src="/img/pointer.gif"/><a id="loading"><img src="/img/loading_img.gif" /></a><a id="popup-img" href="#" class="x-hidden"><img onload="javascript:resizePopupImage(this)" /></a></div>').append(Ext.getBody(),false)}var d=Ext.get("pop_img");var f=Ext.get("popup-img");d.setStyle("z-index",e.mainBody.findParent(".x-window",50,true).getStyle("z-index")+1);Ext.select(".x-grid3-cell-inner img").hover(function(){var g=Ext.get(this).dom.src.split("/").last();if(g!=="nopic_small.png"){f.dom.href=Ext.get(this).parent("a").dom.href;f.child("img").dom.src="/imglib/thumba/"+g;d.removeClass("x-hidden");d.alignTo(this,"l-tr",[0,0]);d.first().alignTo(this,"c-tr?",[8,10])}},function(h,g){d.addClass("x-hidden");Ext.get("loading").removeClass("x-hidden");f.addClass("x-hidden")})})}},buttons:[{id:"btn-close-cart",text:"继续购物",tooltip:"关闭购物车窗口，继续购物",iconCls:"x-icon-close",handler:function(){this.win.hide()},scope:this},{id:"btn-cancel-cart",text:"取消变更",iconCls:"btn-cancel",tooltip:"取消对购物车所做的更改",disabled:true,handler:function(){this.reload()},scope:this},{id:"btn-submit-cart",text:"提交订单",iconCls:"x-icon-next",handler:function(){if(this.store.getCount()>0){if(!Ext.app.loggedIn){loginWin.show(function(){this.checkUnpaidOrder()},this)}else{this.checkUnpaidOrder()}}else{Ext.Msg.show({title:"购物车没有商品",msg:"您的购物车没有商品，请添加商品后再提交。",buttons:Ext.Msg.OK,icon:Ext.Msg.ERROR})}},scope:this}],buttonAlign:"center",tbar:[{text:"清空购物车",tooltip:"从购物车中删除所有项目",iconCls:"btn-delete",handler:function(){this.clearCart();Ext.getCmp("btn-cancel-cart").enable()},scope:this}],plugins:[b,new Ext.ux.grid.GridSummary()],viewConfig:{forceFit:true},width:700,stripeRows:true,height:350,clicksToEdit:1,enableColumnMove:false,trackMouseOver:true});var a=new Ext.grid.CheckboxSelectionModel({singleSelect:true,listeners:{rowselect:function(c,e,d){Ext.getCmp("select-order").buttons[1].enable()},rowdeselect:function(c,e,d){Ext.getCmp("select-order").buttons[1].disable()},scope:this}});this.orderSelector=new Ext.grid.GridPanel({baseCls:"x-plain",flex:5,border:true,stripeRows:true,enableColumnMove:false,store:new Ext.data.Store({reader:new Ext.data.JsonReader({id:"order_id"},Ext.app.RT.Order),sortInfo:{field:"creation_date",direction:"ASC"}}),cm:new Ext.grid.ColumnModel({defaults:{sortable:false,menuDisabled:true,align:"center"},columns:[new Ext.grid.RowNumberer(),{header:"订单号",width:80,dataIndex:"order_id"},{header:"收货人",width:100,dataIndex:"shipping_address_party_name"},{header:"创建日期",width:100,dataIndex:"creation_date",renderer:Ext.util.Format.dateRenderer("Y-m-d")},{header:"发货日期",width:100,dataIndex:"shipping_date",renderer:Ext.util.Format.dateRenderer("Y-m-d")},{header:"总金额",width:100,summaryType:"sum",dataIndex:"amount",align:"right",renderer:Ext.util.Format.cnMoney},{header:"订单状态",width:150,dataIndex:"order_status",renderer:Ext.util.Format.storeRenderer(Ext.app.OrderStatus,"code","text")},a]}),sm:a});this.addressSelector=new AddressSelector({id:"select-address",baseCls:"x-plain",buttonAlign:"center",buttons:[{text:"上一步",iconCls:"x-icon-previous",handler:function(){this.win.getLayout().setActiveItem("cart-grid")},scope:this},{id:"btn-confirm-address",text:"下一步",tooltip:"填写发货日期等",iconCls:"x-icon-next",handler:function(){if(this.addressSelector.getAddress()){this.win.getLayout().setActiveItem("order-header")}else{Ext.Msg.show({title:"发货地址错误",msg:"您未选择选择发货地址或输入的地址有误。出错字段由红色边框标识，出错字段下可以看到出错原因。请检查更正后继续。",buttons:Ext.Msg.OK,icon:Ext.Msg.ERROR})}},scope:this}]});this.win=new Ext.Window({width:900,height:450,layout:"card",iconCls:"x-icon-cart",activeItem:0,title:"购物车",closable:true,closeAction:"hide",defaultButton:"btn-close-cart",plain:false,constrain:true,renderTo:Ext.getBody(),items:[this.grid,{id:"select-order",xtype:"panel",buttonAlign:"center",layout:{type:"vbox",align:"stretch"},items:[{xtype:"infopanel",border:true,flex:1.1,margin:"0px 0px 5px",collapsed:false,icon:Ext.ux.InfoPanel.INFO,startHidden:false,msg:'<p style="font-size:13px;">您尚有以下未付款的订单，您可以选择:</p><ol style="list-style:decimal inside; margin:5px 0px 5px 10px;"><li>如果您需要将购物车和现有订单一起付款发货的，可以选择将商品添加到现有未付款的订单中;</li><li>或者您也可以选择将购物车商品添加到一个全新的订单中。</li></ol>'},this.orderSelector],buttons:[{text:"上一步",iconCls:"x-icon-previous",handler:function(){this.win.getLayout().setActiveItem("cart-grid")},scope:this},{text:"添加到现有订单",disabled:true,iconCls:"x-icon-order-pending",tooltip:"将购物车中商品添加到选定的订单中",handler:function(){var c=this.orderSelector.getSelectionModel().getSelected().id;this.addToOrder(c)},scope:this},{text:"提交新订单",iconCls:"x-icon-order-new",tooltip:"将购物车中商品添加到新建订单中",handler:function(){this.win.getLayout().setActiveItem("select-address")},scope:this}]},this.addressSelector,{xtype:"form",id:"order-header",labelWidth:90,autoScroll:true,bodyStyle:"padding: 5px",defaults:{msgTarget:"under"},items:[{bodyStyle:"padding-bottom: 5px",border:false,html:"请输入订单的其他信息"},{xtype:"datefield",name:"shipping_date",fieldLabel:"要求发货日期*",itemCls:"required",allowBlank:false,format:"Y-m-d",altFormats:"Y/m/d|Y/m/j|Y/N/d|Y/N/j",width:100,minValue:new Date().clearTime()},{xtype:"textarea",name:"memo",autoScroll:true,fieldLabel:"订单备注",anchor:"95% -53"}],buttonAlign:"center",buttons:[{text:"上一步",iconCls:"x-icon-previous",handler:function(){this.win.getLayout().setActiveItem("select-address")},scope:this},{text:"提交订单",handler:function(){if(this.win.getComponent("order-header").getForm().isValid()){this.submitCart()}else{Ext.Msg.show({title:"表单错误",msg:"表单仍有错误，请修正后继续。",buttons:Ext.Msg.OK,icon:Ext.Msg.ERROR})}},scope:this}]},{xtype:"infopanel",id:"success-message",cls:"success-message",startHidden:false,collapsed:false,icon:Ext.ux.InfoPanel.SUCCESS,bodyStyle:"padding: 5px;",msg:'<p>感谢您购买我们的产品。您的订单已成功提交，订单编号为<span id="order-id"></span>。</p><p>您的订单现在尚处于等待大管家确认的状态，<b>不能直接付款</b>。我们的工作人员将于24小时内联系您确定订单中商品的库存状况以及物流方式和费用，并相应修改订单。订单处于<font color="red">"大管家已确认，请您付款"</font>状态后，您才可以对订单进行付款操作。</p><p>如果需要马上联系我们客服人员的，请点击以下图标：</p><p><a href="javascript:helpdesk();"><img border="0" src="/img/helpdesk_status.gif"></a></p>',buttonAlign:"center",buttons:[{text:"关闭",iconCls:"x-icon-close",handler:function(){this.win.hide()},scope:this}]}],tools:[{id:"help",handler:helpdesk}],listeners:{beforehide:this.onCloseCartWin,hide:function(){if(Ext.fly("cart")!==null){Ext.fly("cart").fadeOut({duration:1}).fadeIn({duration:1})}},show:function(){if(!this.loaded&&!this.loading){this.reload()}},scope:this}})};Ext.app.ShoppingCart.prototype={addToCart:function(a){this.loading=true;Ext.Ajax.request({url:"/cart",jsonData:{version:"1.1",method:"add",params:{items:a}},success:function(b){var c=Ext.decode(b.responseText);this.refresh(c.result);this.loading=false;this.loaded=true;this.grid.getView().focusRow(c.result.items.length-1)},scope:this})},checkUnpaidOrder:function(){if(!Ext.getCmp("btn-cancel-cart").disabled){this.updateCart(true)}Ext.Ajax.request({url:"/user",jsonData:{version:"1.1",method:"getOrders",params:["unpaid"]},success:function(b){var c=Ext.decode(b.responseText);var a=this.orderSelector;a.getSelectionModel().clearSelections();Ext.getCmp("select-order").buttons[1].disable();a.store.loadData(c.result);if(a.store.getCount()===0){this.win.getLayout().setActiveItem("select-address")}else{this.win.getLayout().setActiveItem("select-order")}},scope:this})},addToOrder:function(a){Ext.Ajax.request({url:"/cart",jsonData:{version:"1.1",method:"addToOrder",params:[a]},success:function(b){var c=Ext.decode(b.responseText);if(c.error===undefined){this.clearCart();this.win.close();Ext.Msg.show({title:"订单修改成功",msg:"您购物车中的商品已经成功添加到订单"+a+'中。我们的工作人员将重新审核修改后订单的库存和物流状况，并于24小时内联系您。请注意订单处于<font color="red">"大管家已确认，请您付款"</font>状态后，您才可以对订单进行付款操作。',buttons:Ext.Msg.OK,icon:"ux-ip-success"})}else{Ext.Msg.show({title:"订单修改失败",msg:"您购物车中的商品无法添加到订单"+a+"中。请联系我们客服人员反应这一情况。",buttons:Ext.Msg.OK,icon:Ext.Msg.ERROR})}},scope:this})},clearCart:function(){this.store.removeAll();this.refreshSummaryData();this.refreshSummaryDisplay()},updateCart:function(b){var a=[];this.store.each(function(c){a.push({item_id:c.data.itemId,quantity:c.data.quantity})});Ext.Ajax.request({url:"/cart",jsonData:{version:"1.1",method:"update",params:{items:a},async:b||false},success:function(c){var d=Ext.decode(c.responseText);this.refresh(d.result)},scope:this})},submitCart:function(){var b=function(){Ext.Ajax.request({url:"/cart",jsonData:{version:"1.1",method:"submit",params:{address:this.addressSelector.getAddress(),shipping_date:a,memo:e.findField("memo").getValue(),save_address:this.addressSelector.needSaveAddr()}},success:function(f){var g=Ext.decode(f.responseText);if(g.result){Ext.select("#success-message #order-id").update(g.result);this.win.getLayout().setActiveItem("success-message");this.clearCart()}},scope:this})}.createDelegate(this);var c,e=this.win.getComponent("order-header").getForm();var a=e.findField("shipping_date").getValue();Ext.Ajax.request({url:"/cart",jsonData:{version:"1.1",method:"today",params:{}},success:function(f){var g=Ext.decode(f.responseText);c=new Date(g.result)},async:false,nocache:true});var d=true;if(a-c>30*86400000){Ext.Msg.show({title:"发货日期",icon:Ext.Msg.WARNING,msg:"原则上大管家不接受发货日期超过一个月后的订单。如有特殊需要请联系大管家客服人员。<p>请确认输入的日期是否正确。</p>",buttons:{ok:"日期正确，继续",cancel:"修改发货日期"},width:500,fn:function(f){if(f==="ok"){b()}}})}else{b()}},reload:function(){Ext.Ajax.request({url:"/cart",jsonData:{version:"1.1",method:"data",params:{}},success:function(a){var b=Ext.decode(a.responseText);this.refresh(b.result);this.loaded=true},async:false,scope:this,nocache:true})},refresh:function(a){this.numberItems=a.numberItems;this.amount=a.amount;this.store.loadData(a.items);this.refreshSummaryDisplay();Ext.getCmp("btn-cancel-cart").disable()},onCloseCartWin:function(){if(!Ext.getCmp("btn-cancel-cart").disabled){Ext.Msg.confirm("购物车已更改","您的购物车商品已发生更改，是否需要保存所作的变动?",function(a){if(a==="yes"){this.updateCart()}else{this.reload()}},this)}this.win.getLayout().setActiveItem("cart-grid")},refreshSummaryData:function(){this.numberItems=this.store.getCount();this.amount=this.store.sum("amount")},refreshSummaryDisplay:function(){if(Ext.get("cart_items")!==null){Ext.get("cart_items").update(this.numberItems.toString());Ext.get("cart_amount").update(this.amount.toString())}},show:function(){this.win.center();this.win.show()}};function addToWishList(a){Ext.Msg.show({title:"收藏选项设置",msg:"您可以为该商品添加备注信息，如：主卫用。",multiline:true,closable:false,buttons:Ext.MessageBox.OK,minWidth:400,fn:function(b,c){Ext.Ajax.request({url:"/wishlist",jsonData:{version:"1.1",method:"add",params:[a,c]},success:function(d){var e=Ext.decode(d.responseText);Ext.Msg.show({title:"收藏成功",msg:'<b style="font-size:14px;">宝贝收藏成功!</b><br/>您有'+e.result+'个宝贝等待挑选。&nbsp;<a style="color:blue;" href="/user?activepane=wishlist"> 查看收藏夹>></a>',buttons:Ext.Msg.OK,icon:"ux-ip-success"})},nocache:true})}})}function initCartEvents(){Ext.app.globalCart=new Ext.app.ShoppingCart();var a=Ext.app.globalCart;Ext.select("#cart").on("click",function(){a.show()});Ext.select(".buy input").each(function(b){var c=new Ext.form.NumberField({applyTo:b})});Ext.select(".buy a.cart").on("click",function(f){var c=[];Ext.select(".buy input").each(function(e){var h=Number(e.getValue());if(h>0){var g=Number(e.dom.id);c.push({item_id:g,quantity:h});e.dom.value=""}});if(c.length===0){var b=Ext.fly(f.getTarget("div")).child("input");var d=Number(b.dom.id);c.push({item_id:d,quantity:1})}this.addToCart(c);this.show()},a);Ext.select(".buy a.wish").on("click",function(d,c){var b=Number(Ext.fly(c).parent().prev("input").dom.id);if(Ext.app.loggedIn){addToWishList(b)}else{loginWin.show(function(){addToWishList(b)})}})};
