CmsWing源码分析(13)客户订单(二)

2021SC@SDUSC

继续分析order.js这个文件

查看订单

先是获得服务器发送的各类信息大礼包

order就是订单这个类中包含的属性信息

goods为购物清单

user为购买人信息

 const id = this.get('id');
    this.meta_title = '查看订单';
    const order = await this.model('order').find(id);
    const goods = await this.model('order_goods').where({order_id: id}).select();
    let sum = [];
    for (const val of goods) {
      val.title = JSON.parse(val.prom_goods).title;
      val.pic = JSON.parse(val.prom_goods).pic;
      val.type = JSON.parse(val.prom_goods).type;
      val.sum = JSON.parse(val.prom_goods).price;
      sum.push(val.goods_nums);
    }
    sum = eval(sum.join('+'));
    this.assign('sum', sum);
    this.assign('goods', goods);
    const user = await this.model('member').find(order.user_id);
    this.assign('user', user);

根据order中的payment属性的值,判断显示订单的是否付款

但是有一个疑问,为什么不直接把payment改成文字属性...?省的现在还要一个一个判断

express_company是订单涉及的快递公司的名字

switch (order.payment) {
      case 100:
        order.payment = '预付款支付';
        break;
      case 1001:
        order.payment = '货到付款';
        break;
      default:
        order.payment = await this.model('pingxx').where({id: order.payment}).getField('title', true);
    }
    this.assign('order', order);
    const express_company = this.model('express_company').order('sort ASC').select();
    this.assign('express_company', express_company);

获取订单双方所在的省、城、市

然后现场计算运费

订单的价格,就成了商品原价+运费

const olde_order_amount = order.real_amount + order.real_freight;
    this.assign('olde_order_amount', olde_order_amount);
    const province = await this.model('area').where({parent_id: 0}).select();
    const city = await this.model('area').where({parent_id: order.province}).select();
    const county = await this.model('area').where({parent_id: order.city}).select();
    this.assign('province', province);
    this.assign('city', city);
    this.assign('county', county);
    return this.display();

编辑订单

涉及的属性和数据与查看订单几乎完全重合

就是修改需要重新给服务器传回数据

这边就放个完整代码看看吧

async editAction() {
    if (this.isPost) {
      const data = this.post();

      const order = await this.model('order').find(data.id);
      /**
             * 订单原价 = 商品真实价格 + 真实运费
             */
      const olde_order_amount = order.real_amount + order.real_freight;
      data.order_amount = Number(olde_order_amount) + Number(data.adjust_amount);
      // 更新订单信息
      const res = await this.model('order').update(data);
      if (res) {
        // 记录日志
        let log;
        if (data.adjust_amount == 0) {
          log = `修改了订单,订单编号:${order.order_no}`;
        } else {
          log = `修改了订单,订单编号:${order.order_no},并调整订单金额 ${data.adjust_amount} 元,原订单金额:${olde_order_amount} 元,调整后订单金额:${data.order_amount} 元`;
        }

        await this.model('cmswing/action').log('order', 'order', log, this.user.uid, this.ip, this.ctx.url);
        return this.success({name: '编辑成功!'});
      } else {
        return this.fail('编辑失败!');
      }
    } else {
      const id = this.get('id');
      // console.log(id);
      this.meta_title = '编辑订单';
      // 获取订单信息
      const order = await this.model('order').find(id);
      // 在订单同时没有付款,没有审核,没有完成的情况下才能编辑
      if (order.pay_status == 1 && item.status == 3 && item.delivery_status == 1) {
        return this.fail('订单已经付款,无法编辑!');
      }

      // 购物清单
      const goods = await this.model('order_goods').where({order_id: id}).select();
      let sum = [];
      for (const val of goods) {
        val.title = JSON.parse(val.prom_goods).title;
        val.pic = JSON.parse(val.prom_goods).pic;
        val.type = JSON.parse(val.prom_goods).type;
        val.sum = JSON.parse(val.prom_goods).price;
        sum.push(val.goods_nums);
      }
      sum = eval(sum.join('+'));
      this.assign('sum', sum);
      this.assign('goods', goods);
      // 获取购买人信息
      // 购买人信息
      const user = await this.model('member').find(order.user_id);
      console.log(user);
      this.assign('user', user);
      // 订单信息
      switch (order.payment) {
        case 100:
          order.payment = '预付款支付';
          break;
        case 1001:
          order.payment = '货到付款';
          break;
        default:
          order.payment = await this.model('pingxx').where({id: order.payment}).getField('title', true);
      }
      this.assign('order', order);
      // 获取 快递公司
      const express_company = this.model('express_company').order('sort ASC').select();
      this.assign('express_company', express_company);
      // 获取省份
      /**
             * 订单原价 = 商品真实价格 + 真实运费
             */
      const olde_order_amount = order.real_amount + order.real_freight;
      this.assign('olde_order_amount', olde_order_amount);
      const province = await this.model('area').where({parent_id: 0}).select();
      const city = await this.model('area').where({parent_id: order.province}).select();
      const county = await this.model('area').where({parent_id: order.city}).select();
      this.assign('province', province);
      this.assign('city', city);
      this.assign('county', county);
      return this.display();
    }
  }

发货设置

当收到客户端传来的数据时

获取,生成订单编号

然后看看审核人员给通过了没有

给了就发货成功

if (this.isPost) {
      const data = this.post();
      data.admin = await get_nickname(this.user.uid);
      // 生成快递单编号
      const kid = ['k', new Date().getTime()];
      data.invoice_no = kid.join('');

      data.create_time = new Date().getTime();
      const res = await this.model('doc_invoice').add(data);
      if (res) {
        await this.model('order').where({id: data.order_id}).update({delivery_status: 1});
      }
      return this.success({'name': '发货成功!', 'url': this.referer()});

不给就无尽的等待

goods是购物清单

还可以把购物清单给人列一下

const id = this.get('id');
      const order = await this.model('order').find(id);
      if (order.status != 3) {
        return this.fail('订单还没审核!,请先审核订单。');
      }
      switch (order.payment) {
        case 100:
          order.payment = '预付款支付';
          break;
        case 1001:
          order.payment = '货到付款';
          break;
        default:
          order.payment = await this.model('pingxx').where({id: order.payment}).getField('title', true);
      }
      const goods = await this.model('order_goods').where({order_id: id}).select();
      let sum = [];
      for (const val of goods) {
        val.title = JSON.parse(val.prom_goods).title;
        val.pic = JSON.parse(val.prom_goods).pic;
        val.type = JSON.parse(val.prom_goods).type;
        val.sum = JSON.parse(val.prom_goods).price;
        sum.push(val.goods_nums);
      }

然后下方是会显示的你的个人发货信息

修改需要去个人主页修改,这边不行

// 购买人信息
      const user = await this.model('member').find(order.user_id);
      // 获取 快递公司
      const express_company = await this.model('express_company').order('sort ASC').select();
      this.assign('express_company', express_company);
      // 获取省份
      const province = await this.model('area').where({parent_id: 0}).select();
      const city = await this.model('area').where({parent_id: order.province}).select();
      const county = await this.model('area').where({parent_id: order.city}).select();
      this.assign('province', province);
      this.assign('city', city);
      this.assign('county', county);
      this.assign('user', user);
      sum = eval(sum.join('+'));
      this.assign('sum', sum);
      console.log(goods);
      this.assign('goods', goods);
      this.assign('order', order);
      this.meta_title = '发货';
      return this.display();
    }

收款单、发货单与退款单

先看收款单

获取匹配到的单子,然后像订单展示一样列出收款单的各种属性

id啊、商品id啊、交易双方id啊

async receivingAction() {
    const data = await this.model('doc_receiving').page(this.get('page')).order('create_time DESC').countSelect();
    const html = this.pagination(data);
    this.assign('pagerData', html);
    for (const val of data.data) {
      switch (val.payment_id) {
        case 100:
          val.channel = '预付款支付';
          break;
        case 1001:
          val.channel = '货到付款';
          break;
        default:
          val.channel = await this.model('pingxx').where({id: val.payment_id}).getField('title', true);
      }
      val.order_id = await this.model('order').where({id: val.order_id}).getField('order_no', true);
    }
    this.assign('list', data.data);
    this.meta_title = '收款单';
    return this.display();
  }

发货单则需要快递单号、快递公司名

 async invoiceAction() {
    const data = await this.model('doc_invoice').page(this.get('page')).order('create_time DESC').countSelect();
    const html = this.pagination(data);
    this.assign('pagerData', html); 
    for (const v of data.data) {
      v.express_company_id = await this.model('express_company').where({id: v.express_company_id}).getField('name', true);
    }
    this.assign('list', data.data);
    this.active = 'admin/order/receiving';
    this.meta_title = '发货单';
    return this.display();
  }

退款单

我怀疑他们没有做完这个功能...

 refundAction() {
    this.active = 'admin/order/receiving';
    this.meta_title = '退款单';
    return this.display();
  }
};

  至此,用户订单order.js这个文件就算是分析完毕了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值