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这个文件就算是分析完毕了