// mall/placeOrder/placeOrder.js const app = getApp(); const regeneratorRuntime = app.loadAsync() const model = app.loadModel("index") const http = app.loadHttp() Page({ /** * 页面的初始数据 */ data: { system: app.globalData.system, //设备相关信息 pageTitle: "提交订单", //头部标题 isBack: true,//显示返回 mode: "1",//收货方式 1门店 2收货 remark: "",//订单备注 address: { all: "请选择收货地址", userName: "姓名", telNumber: "手机号" },//收货地址 store: { name: "亲! 请选择门店地址", address: "选择门店地址" },//门店地址信息 temCart: {},//购物车勾选的商品信息 oldCart: null,//购物车勾选中的信息原始样本 coupon: {},//优惠券 all: "",//总价 userInfo: {//用户姓名手机号 包河区 新艺苑 name: "", tel: "" }, giftCard: {},//卡劵 isgiftCard: "",//拼接的卡劵信息方便操作 isPay: 2,//1卡支付 2微信支付 postage: {},//邮费配置 }, // 订单备注 remarkInput(e) { this.setData({ remark: e.detail.value }) }, // 选择支付方式 selectPay(e) { let type = e.currentTarget.dataset.type let url = e.currentTarget.dataset.url if (type == 2) { this.setData({ isgiftCard: "", giftCard: {}, isPay: type }) } else if (type == 1) { wx.navigateTo({ url: url }) } this._calculation() }, // 获取选择的门店 async getStore() { let res = await model.storage.getSetting("storeChange") if (!!res) { model.storage.deleteStorage('storeChange') console.log(res) if (JSON.stringify(res.store) == '{}'){ this.setData({ store: { name: "未选择地址", address: "您未选择任何门店,请留意,客服电话!!!" }, userInfo: { name: res.name, tel: res.tel } }) }else{ this.setData({ store: res.store, userInfo: { name: res.name, tel: res.tel } }) } } }, // 获取默认收货人 async getConsignee() { let res = await http.http.request2({ url: `${http.api.defaultUserAddress}`, method: "POST" }) let add = res.data.data if (!!add.id) { add.all = add.provinceName + add.cityName + add.countryName + add.detail this.setData({ address: add }) } }, // 选择收货方式 wayDelivery(e) { let mode = e.currentTarget.dataset.mode this.setData({ mode: mode }) }, // 选择收货地址 receivingAdd() { if (this.data.mode == 1) { wx.navigateTo({ url: "/mall/chooseStores/chooseStores" }) return } wx.navigateTo({ url: "/user/addList/addList" }) }, // 获取收货地址并且赋值到页面 async getAdd() { let data = await model.storage.getSetting("address") if (!!data) { model.storage.deleteStorage('address') data.all = data.provinceName + data.cityName + data.countyName + data.detailInfo this.setData({ address: data || "" }) // If the wechat address is chosen and the back end doesn't want to handle it, // let me add the address interface and add it as the default address. if (!data.id) { let addData = { userName: data.userName, telNumber: data.telNumber, provinceName: data.provinceName, cityName: data.cityName, countryName: data.countyName, address: data.all, detail: data.detailInfo, is_default: 1 } http.http.request2({ url: `${http.api.userAddress}`, method: "POST", data: addData }) } } }, // 获取优惠券 async getCoupon() { let coupon = await model.storage.getSetting("coupon") if (!!coupon) { model.storage.deleteStorage('coupon') this.setData({ coupon: coupon }) } this._calculation() }, // 获取卡劵 async getGiftCard() { let giftCard = await model.storage.getSetting("giftCard") if (!!giftCard) { model.storage.deleteStorage('giftCard') this.setData({ giftCard: giftCard, isgiftCard: giftCard.title + " " + giftCard.price + '折', isPay: 1 }) } this._calculation() }, // 计算商品优惠完的总价格 // 总 - 优惠券 + 运费 _calculation() { let temCart = this.data.temCart let coupon = this.data.coupon.price || 0 let postage = this.data.postage let all = temCart.total - coupon if (all <= parseFloat(postage.satisfy_money)) { all += parseFloat(postage.postage_money) } if (this.data.mode == 1){ all-=10 } this.setData({ all: all.toFixed(2) }) }, // 商城下单 async storeOrder(e) { let formId = e.detail.formId if (!this.data.userInfo.tel && this.data.mode == 1) { model.msg.dataMsg({ type: "warning", content: "请选择收货手机号" }) return } if (!this.data.address.all && this.data.mode == 2) { model.msg.dataMsg({ type: "warning", content: "请选择收货地址" }) return } let products = this.data.temCart.allCart let oldCart = this.data.oldCart let arr3 = [] products.map((v, i) => { let data = { store_product_id: v.store_product_id, count: v.count, attr: v.attr, image: v.image } arr3[i] = data }) let data = { take_type: 1, shop_id: 0, username: "", telnum: 0, address_id: 0, products: arr3, remark: this.data.remark } if (this.data.mode == 1) { data.take_type = 2 data.username = this.data.userInfo.name data.telnum = this.data.userInfo.tel if (this.data.store.id !== 'null' || this.data.store.id !== 'undefined'){ data.shop_id = this.data.store.id || 0 } } else if (this.data.mode == 2) { data.address_id = this.data.address.id } let res = await http.http.request2({ url: `${http.api.storeOrder}`, method: "POST", data: data }) // 下单成功时候就清除购物车 let rel = res.data.data // 如果下单成功掉支付 if (rel.pass) { model.shopCart.deleteCart(oldCart) let payData = { orderID: rel.store_order_id, payType: this.data.isPay, form_id: formId, userCouponID: 0, userCardID: 0 } // 优惠券 if (!!this.data.coupon.id) { payData.userCouponID = this.data.coupon.id } // 卡 if (this.data.isPay == 1) { payData.userCardID = this.data.giftCard.id } // 吊起支付 let pay = await model.payment.pay(http.api.pre_order, payData) if(pay == 3) return; if (pay == 1) { wx.redirectTo({ url: "/mall/paid/paid?name=支付成功" }) return } setTimeout(() => { wx.redirectTo({ url: "/mall/paid/paid?name=待支付" }) }, 800) } }, // 获取当前邮费配置 async postage() { let res = await http.http.request2({ url: `${http.api.postage}`, method: "POST", data: { type: 1 } }) if (res.data.status) { this.setData({ postage: res.data.data }) } this._calculation() }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { this.getConsignee() var that = this app.setWatching('temCart', (n) => { // 深拷贝,保留一份原始选中,方便删除 var _obj = JSON.stringify(n), objClone = JSON.parse(_obj); let temCart = n let allCart = temCart.allCart let attr = "" allCart.map((v, i) => { allCart[i].count = allCart[i].num allCart[i].store_product_id = allCart[i].id if (!(typeof v.attr == "string")) { if (v.attr.length > 0) { v.attr.map((v, i) => { attr += v + "," }) allCart[i].attr = attr.substr(0, attr.length - 1) } else { allCart[i].attr = "" } attr = "" } }) temCart.allCart = allCart // temCart.total = (temCart.total).toFixed(2) that.setData({ temCart: temCart, oldCart: objClone }) }); }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { this.postage() this.getAdd() this.getCoupon() this.getStore() this.getGiftCard() }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { } })