order-model.js:

import {Base} from '../../utils/base.js'class Order extends Base{constructor(){super();this._storageKeyName='newOrder';}/*下订单*/doOrder(param,callBack){var that=this;var allParams = {url: 'order',type:'post',data:{products:param},sCallBack: function (data) {that.execSetStorageSync(true);callBack && callBack(data);},eCallBack:function(){}};this.request(allParams);}/** 拉起微信支付* params:* norderNumber - {int} 订单id* return:* callback - {obj} 回调方法 ,返回参数 可能值 0:商品缺货等原因导致订单不能支付;  1: 支付失败或者支付取消; 2:支付成功;* */execPay(orderNumber,callBack){var allParams = {url: 'pay/pre_order',type:'post',data:{id:orderNumber},sCallBack: function (data) {var timeStamp= data.timeStamp;if(timeStamp) { //可以支付wx.requestPayment({'timeStamp': timeStamp.toString(),'nonceStr': data.nonceStr,'package': data.package,'signType': data.signType,'paySign': data.paySign,success: function () {callBack && callBack(2);},fail: function () {callBack && callBack(1);}});}else{callBack && callBack(0);}}};this.request(allParams);}/*获得所有订单,pageIndex 从1开始*/getOrders(pageIndex,callBack){var allParams = {url: 'order/by_user',data:{page:pageIndex},type:'get',sCallBack: function (data) {callBack && callBack(data);  //1 未支付  2,已支付  3,已发货,4已支付,但库存不足}};this.request(allParams);}/*获得订单的具体内容*/getOrderInfoById(id,callBack){var that=this;var allParams = {url: 'order/'+id,sCallBack: function (data) {callBack &&callBack(data);},eCallBack:function(){}};this.request(allParams);}/*本地缓存 保存/更新*/execSetStorageSync(data){wx.setStorageSync(this._storageKeyName,data);};/*是否有新的订单*/hasNewOrder(){var flag = wx.getStorageSync(this._storageKeyName);return flag==true;}}export {Order};

order.js:

import {Order} from '../order/order-model.js';
import {Cart} from '../cart/cart-model.js';
import {Address} from '../../utils/address.js';var order=new Order();
var cart=new Cart();
var address=new Address();Page({data: {fromCartFlag:true,addressInfo:null},/** 订单数据来源包括两个:* 1.购物车下单* 2.旧的订单* */onLoad: function (options) {var flag=options.from=='cart',that=this;this.data.fromCartFlag=flag;this.data.account=options.account;//来自于购物车if(flag) {this.setData({productsArr: cart.getCartDataFromLocal(true),account:options.account,orderStatus:0});/*显示收获地址*/address.getAddress((res)=> {that._bindAddressInfo(res);});}//旧订单else{this.data.id=options.id;}},onShow:function(){if(this.data.id) {var that = this;//下单后,支付成功或者失败后,点左上角返回时能够更新订单状态 所以放在onshow中var id = this.data.id;order.getOrderInfoById(id, (data)=> {that.setData({orderStatus: data.status,productsArr: data.snap_items,account: data.total_price,basicInfo: {orderTime: data.create_time,orderNo: data.order_no},});// 快照地址var addressInfo=data.snap_address;addressInfo.totalDetail = address.setAddressInfo(addressInfo);that._bindAddressInfo(addressInfo);});}},/*修改或者添加地址信息*/editAddress:function(){var that=this;wx.chooseAddress({success: function (res) {var addressInfo = {name:res.userName,mobile:res.telNumber,totalDetail:address.setAddressInfo(res)};that._bindAddressInfo(addressInfo);//保存地址address.submitAddress(res,(flag)=>{if(!flag) {that.showTips('操作提示','地址信息更新失败!');}});}})},/*绑定地址信息*/_bindAddressInfo:function(addressInfo){this.setData({addressInfo: addressInfo});},/*下单和付款*/pay:function(){if(!this.data.addressInfo){this.showTips('下单提示','请填写您的收货地址');return;}if(this.data.orderStatus==0){this._firstTimePay();}else{this._oneMoresTimePay();}},/*第一次支付*/_firstTimePay:function(){var orderInfo=[],procuctInfo=this.data.productsArr,order=new Order();for(let i=0;i<procuctInfo.length;i++){orderInfo.push({product_id:procuctInfo[i].id,count:procuctInfo[i].counts});}var that=this;//支付分两步,第一步是生成订单号,然后根据订单号支付order.doOrder(orderInfo,(data)=>{//订单生成成功if(data.pass) {//更新订单状态var id=data.order_id;that.data.id=id;that.data.fromCartFlag=false;//开始支付that._execPay(id);}else{that._orderFail(data);  // 下单失败}});},/** 提示窗口* params:* title - {string}标题* content - {string}内容* flag - {bool}是否跳转到 "我的页面"*/showTips:function(title,content,flag){wx.showModal({title: title,content: content,showCancel:false,success: function(res) {if(flag) {wx.switchTab({url: '/pages/my/my'});}}});},/**下单失败* params:* data - {obj} 订单结果信息* */_orderFail:function(data){var nameArr=[],name='',str='',pArr=data.pStatusArray;for(let i=0;i<pArr.length;i++){if(!pArr[i].haveStock){name=pArr[i].name;if(name.length>15){name = name.substr(0,12)+'...';}nameArr.push(name);if(nameArr.length>=2){break;}}}str+=nameArr.join('、');if(nameArr.length>2){str+=' 等';}str+=' 缺货';wx.showModal({title: '下单失败',content: str,showCancel:false,success: function(res) {}});},/* 再次次支付*/_oneMoresTimePay:function(){this._execPay(this.data.id);},/**开始支付* params:* id - {int}订单id*/_execPay:function(id){if(!order.onPay) {this.showTips('支付提示','本产品仅用于演示,支付系统已屏蔽',true);//屏蔽支付,提示this.deleteProducts(); //将已经下单的商品从购物车删除return;}var that=this;order.execPay(id,(statusCode)=>{if(statusCode!=0){that.deleteProducts(); //将已经下单的商品从购物车删除   当状态为0时,表示var flag = statusCode == 2;wx.navigateTo({url: '../pay-result/pay-result?id=' + id + '&flag=' + flag + '&from=order'});}});},//将已经下单的商品从购物车删除deleteProducts:function() {var ids=[],arr=this.data.productsArr;for(let i=0;i<arr.length;i++){ids.push(arr[i].id);}cart.delete(ids);},}
)

微信小程序订单展示(3)相关推荐

  1. 微信小程序--订单查询页面

    微信小程序–订单查询页面 包含功能点: 订单查询 结构:order.wxml <tabs tabList="{{tabList}}" binditemChange=" ...

  2. 微信小程序订单扫码结算的步骤

    微信小程序订单扫码结算的步骤,在 小程序结算中,如果用户下单后到店自提或货到付款的方式,这种情况用户可以提现下单或预定下单,下单成功后,用户到店里自提或等待商家配送到家,在收到订单产品之后,商家扫码用 ...

  3. 微信小程序订单页面下拉刷新上拉分页加载

    微信小程序开发交流qq群   581478349    承接微信小程序开发.扫码加微信. 正文: 效果图: 代码: json代码: {"enablePullDownRefresh" ...

  4. 微信小程序订单生成支付二维码接口 code

    手机的小程序订单是直接拉起支付界面的,有些朋友需要生成支付二维码 这边就需要去调用微信的支付二维码接口了 需要的参数是 session_id, timeStamp, nonceStr, package ...

  5. 微信小程序--字体展示

    以下为微信小程序font-family中提供的十四种字体 如果同时设置font-size,有时会对font-family的效果产生干扰,导致字体设置无效,需注意字体大小问题. 字体一 font-fam ...

  6. 微信小程序map展示

    今天对微信小程序进行了运用,对于移动端自己做的比较少,现在大多数的项目就是百度,也就是CV工程师 微信小程序的代码 wxml <view class="" hover-cla ...

  7. 微信小程序订单管理源码_【程序源代码】微信小程序商城管理系统

    关键字:小程序 商城 管理系统  开发框架 正文 | 内容 01 - [微信小程序商城管理系统-视频介绍] 02 - [微信小程序商城管理系统-源码获取方式] [程序源代码]全端商城管理系统(后台+小 ...

  8. 通俗易懂的五星评价代码——微信小程序如何展示像淘宝天猫那样五星好评?

    项目背景 2020年起始,微信官方宣布支持小程序直播.陆续有很多的商家与开发者参与到这场微信生态直播大潮中,作为电商小程序评价内容必不可少的,官方没有提供评价组件只能自己动手丰衣足食.网上看了很多资料 ...

  9. 微信小程序订单页面格式

    我在开发一个点餐小程序时,遇到了一个问题,用户通过小程序进入商家,选中自己想下单的菜,如果同一个选了两份,那么订单会显示菜名乘以2,如果在餐厅吃的情况下是没有问题的,如果要有一份带走,那这时候出现的问 ...

最新文章

  1. ordfilt2函数功能说明
  2. 介绍4种HTML5 Canvas库
  3. 第3节 sqoop:3、sqoop的入门测试使用
  4. Java 单例设计模式
  5. DF以某一列的元素筛选其中属于某个集合的元素的所有行(2个版本函数)
  6. 《YES!B/S!》博客文章导读索引(20080612更新)
  7. 内连接查询的重点分析
  8. python连接linux堡垒机_利用Python Paramiko开发linux堡垒机
  9. HTTP和HTTPS的请求和响应
  10. 云原生高可用技术体系构建
  11. 远程桌面连接_Win10 系统远程桌面连接怎么打开
  12. 读取XML文件时,总报“前言中不允许有内容”错误-分析
  13. oracle 的“+”和“,”连接表的方式
  14. 经典算法(1)- 求1到N的质数
  15. Ext核心代码分析之Function.createDelegate
  16. 使用 requests 进行身份认证
  17. php gmssl,关于GmSSL
  18. 国产快速启动软件ALTRun推荐
  19. simulink电机仿真学习 - park变换,输入交流输出仍然是交流问题解决
  20. abaqus2020安装教程

热门文章

  1. MySQL数据库名字能不能用中划线 ‘-’ ?
  2. python请输入一个人的名字_print('曾经有一份真挚的爱情放在我面前,那个人的名字是' + goddess),Python旅程开始的地方!...
  3. 移远通信亮相CCBN2021,助推视听媒体等领域不断创新
  4. 使用ffmpeg直播推流总结
  5. Windows系统近年漏洞概况及攻击教程防御
  6. 【小常识】打印机身份证双面打印方法
  7. WFP实现的端口复用
  8. Google招聘需求分析
  9. 超简单禁止迅雷下载!(分析+方法)
  10. 一文读懂支付通道背后的江湖!——下