model

修改order_item,增加uid

appmodelorder_item.js

module.exports = app => {const mongoose = app.mongoose;const Schema = mongoose.Schema;const d = new Date();const OrderItem = new Schema({uid: { type: Schema.Types.ObjectId },order_id: { type: Schema.Types.ObjectId },product_title: { type: String },product_id: { type: Schema.Types.ObjectId },product_img: { type: String },product_price: { type: Number },product_num: { type: Number },add_time: {type: Number,default: d.getTime(),}});return mongoose.model('OrderItem', OrderItem, 'order_item');
};

controller

appcontrollerdefaultbuy.js

'use strict';const Controller = require('egg').Controller;class BuyController extends Controller {// 去结算async checkout() {// 获取购物车选中的商品let orderList = [];let allPrice = 0;let cartList = this.service.cookies.get('cartList');//签名防止重复提交订单var orderSign = await this.service.tools.md5(await this.service.tools.getRandomNum());this.ctx.session.orderSign = orderSign;if (cartList && cartList.length > 0) {for (let i = 0; i < cartList.length; i++) {if (cartList[i].checked) {orderList.push(cartList[i]);allPrice += cartList[i].price * cartList[i].num;}}// 获取当前用户的所有收货地址const uid = this.ctx.service.cookies.get('userinfo')._id;const addressList = await this.ctx.model.Address.find({ uid }).sort({ default_address: -1 });await this.ctx.render('default/checkout.html', {orderList,allPrice,addressList,orderSign: orderSign});} else {// 恶意操作this.ctx.redirect('/cart');}}//提交订单async doOrder() {/*1、获取收货地址信息2、需要获取购买商品的信息3、把这些信息  放在订单表  4、删除购物车里面的数据    *//*防止提交重复订单*/var orderSign = this.ctx.request.body.orderSign;if (orderSign != this.ctx.session.orderSign) {return false;}this.ctx.session.orderSign = null;const uid = this.ctx.service.cookies.get('userinfo')._id;let addressResult = await this.ctx.model.Address.find({ "uid": uid, "default_address": 1 });let cartList = this.service.cookies.get('cartList');if (addressResult && addressResult.length > 0 && cartList && cartList.length > 0) {var all_price = 0;let orderList = cartList.filter((value) => {if (value.checked) {all_price += value.price * value.num;return value;}})//执行提交订单的操作let order_id = await this.service.tools.getOrderId();let name = addressResult[0].name;let phone = addressResult[0].phone;let address = addressResult[0].address;let zipcode = addressResult[0].zipcode;let pay_status = 0;let pay_type = '';let order_status = 0;let orderModel = new this.ctx.model.Order({ order_id, uid, name, phone, address, zipcode, pay_status, pay_type, order_status, all_price });let orderResult = await orderModel.save();if (orderResult && orderResult._id) {//增加商品信息for (let i = 0; i < orderList.length; i++) {let json = {"uid": uid,"order_id": orderResult._id, //订单id"product_title": orderList[i].title,"product_id": orderList[i]._id,"product_img": orderList[i].goods_img,"product_price": orderList[i].price,"product_num": orderList[i].num}let orderItemModel = new this.ctx.model.OrderItem(json);await orderItemModel.save();}//删除购物车中已经购买的商品             var unCheckedCartList = cartList.filter((value) => {if (!value.checked) {return value;}})this.service.cookies.set('cartList', unCheckedCartList);this.ctx.redirect('/buy/confirm?id=' + orderResult._id);} else {this.ctx.redirect('/buy/checkout');}} else {this.ctx.redirect('/buy/checkout');}console.log('提交订单');}// 确认订单  支付async confirm() {var id = this.ctx.request.query.id;var orderResult = await this.ctx.model.Order.find({ "_id": id });if (orderResult && orderResult.length > 0) {//获取商品var orderItemResult = await this.ctx.model.OrderItem.find({ "order_id": id });await this.ctx.render('default/confirm.html', {orderResult: orderResult[0],orderItemResult: orderItemResult,id: id});} else {//错误this.ctx.redirect('/');}}//执行多次async getOrderPayStatus() {/*1、获取订单号2、查询当前订单的支付状态3、如果支付 返回成功   如果没有支付返回失败信息*/var id = this.ctx.request.query.id;if (id) {try {var orderReuslt = await this.ctx.model.Order.find({ "_id": id });if (orderReuslt && orderReuslt[0].pay_status == 1 && orderReuslt[0].order_status == 1) {this.ctx.body = {success: true,message: '已支付'}} else {this.ctx.body = {success: false,message: '未支付'}}} catch (error) {this.ctx.body = {success: false,message: '未支付'}}} else {this.ctx.body = {success: false,message: '未支付'}}}
}module.exports = BuyController;

appcontrollerdefaultuser.js

'use strict';const Controller = require('egg').Controller;class UserController extends Controller {async welcome() {await this.ctx.render('default/user/welcome.html');}async order() {const uid = this.ctx.service.cookies.get('userinfo')._id;const page = this.ctx.request.query.page || 1;var order_status = this.ctx.request.query.order_status || -1;var keywords = this.ctx.request.query.keywords;var json = { "uid": this.app.mongoose.Types.ObjectId(uid) }; //查询当前用户下面的所有订单//筛选if (order_status != -1) {json = Object.assign(json, { "order_status": parseInt(order_status) });}//搜索if (keywords) {var orderItemJson = Object.assign({ "uid": this.app.mongoose.Types.ObjectId(uid) }, { "product_title": { $regex: new RegExp(keywords) } });var orderItemResult = await this.ctx.model.OrderItem.find(orderItemJson);if (orderItemResult.length > 0) {var tempArr = [];orderItemResult.forEach(value => {tempArr.push({_id: value.order_id});});json = Object.assign(json, {$or: tempArr})/*            { uid: 5c10c2dfd702ac47bc58ab45,'$or':[ { _id: 5c41955b10f6400bb0c850ab },{ _id: 5c42a48be6389d22a4396833 } ] }*/} else {json = Object.assign(json, {$or: [{ 1: -1 }]})}}console.log("aaa")console.log(JSON.stringify(json));const pageSize = 5;// 总数量const totalNum = await this.ctx.model.Order.find(json).countDocuments();//聚合管道要注意顺序const result = await this.ctx.model.Order.aggregate([{$lookup: {from: 'order_item',localField: '_id',foreignField: 'order_id',as: 'orderItems',},},{$sort: { "add_time": -1 }},{$match: json //条件},{$skip: (page - 1) * pageSize,},{$limit: pageSize,}]);await this.ctx.render('default/user/order.html', {list: result,totalPages: Math.ceil(totalNum / pageSize),page,order_status: order_status});}async orderinfo() {// this.ctx.body = '用户订单';await this.ctx.render('default/user/order_info.html');}async address() {this.ctx.body = '收货地址';}
}module.exports = UserController;

view

appviewdefaultuserorder.html

<% include  ../public/header.html%><!--end header --><!-- start banner_x --><% include  ../public/banner.html%><!-- end banner_x --><script src="/public/default/js/jqPaginator.js"></script><link rel="stylesheet" href="/public/default/css/order.css" /><!-- self_info --><div class="grzxbj"><div class="selfinfo center"><div class="lfnav fl"><% include  ./user_left.html%></div><div class="rtcont fr"><h1>我的订单</h1><div class="uc-content-box"><div class="box-hd"><div class="more clearfix"><ul class="filter-list J_orderType"><li class="first active"><a href="/user/order">全部有效订单</a></li><li><a href="/user/order?page=<%=page%>&order_status=0">待支付</a></li><li><a href="/user/order?page=<%=page%>&order_status=1">已支付</a></li><li><a href="/user/order?page=<%=page%>&order_status=3">待收货</a></li><li><a href="/user/order?page=<%=page%>&order_status=6">已关闭</a></li></ul><form id="J_orderSearchForm" class="search-form clearfix" action="#" method="get"><input class="search-text" type="search" id="J_orderSearchKeywords" name="keywords" autocomplete="off" placeholder="输入商品名称、商品编号、订单号"><input type="submit" class="search-btn iconfont" value="搜索"></form></div></div><div class="box-bd"><%if(list.length>0){%><table class="table"><%for(var i=0;i<list.length;i++){%><tr <%if(list[i].pay_status==0){%>class="order_pay"<%}%>><td colspan="2"><div class="order-summary"><h2><%if(list[i].order_status==0){%>已下单 未支付<%}else if(list[i].order_status==1){%>已付款<%}else if(list[i].order_status==2){%>已配货<%}else if(list[i].order_status==3){%>已发货<%}else if(list[i].order_status==4){%>交易成功<%}else if(list[i].order_status==5){%>已退货<%}else if(list[i].order_status==6){%>无效 已取消<%}%></h2><p><%=helper.formatTime(list[i].add_time) %> |<%=list[i].name%> | 订单号:<%=list[i].order_id%> | 在线支付 实付金额:<%=list[i].all_price%>元</p></div><%for(var j=0;j<list[i].orderItems.length;j++){%><div class="order-info clearfix"><div class="col_pic"><img src="<%=list[i].orderItems[j].product_img%>" /></div><div class="col_title"><p><%=list[i].orderItems[j].product_title%></p><p><%=list[i].orderItems[j].product_price%>元 ×<%=list[i].orderItems[j].product_num%></p></div></div><%}%></td><td><span><%if(list[i].pay_status==1){%><a class="delete btn" href="/user/orderinfo?id=<%=list[i]._id%>">订单详情</a><br><br><a class="delete btn" href="#">申请售后</a><%}else{%><a class="delete btn btn-primary" href="/buy/confirm?id=<%=list[i]._id%>">去支付</a><br><br><a class="delete btn" href="/user/orderinfo?id=<%=list[i]._id%>">订单详情</a><%}%>    </span></td></tr><%}%></table><div id="page" class="pagination fr"></div><%}else{%><p style="text-align:center; padding-top:100px;">没有查找到任何订到</p><%}%></div></div><script>$('#page').jqPaginator({totalPages: <%=totalPages%>,visiblePages: 8,currentPage: <%=page%>,onPageChange: function(num, type) {console.log('当前第' + num + '页', type);if (type == 'change') {location.href = "/user/order?page=" + num + '&order_status=' + <%=order_status%>;}}});</script></div><div class="clear"></div></div></div><!-- self_info --><footer class="mt20 center"><div class="mt20">小米商城|MIUI|米聊|多看书城|小米路由器|视频电话|小米天猫店|小米淘宝直营店|小米网盟|小米移动|隐私政策|Select Region</div><div>©mi.com 京ICP证110507号 京ICP备10046444号 京公网安备11010802020134号 京网文[2014]0059-0009号</div><div>违法和不良信息举报电话:185-0130-1238,本网站所列数据,除特殊说明,所有数据均出自我司实验室测试</div></footer></body></html>

效果

显示订单支付状态

根据订单状态筛选

搜索

egg(115)--egg之订单页面筛选,搜索相关推荐

  1. mysql结算订单表到用户_Luffy之结算订单页面(订单模型表的创建,订单的生成,以及订单详情展示等)...

    订单页面 在前面我们已经构建了,购物车的页面,接下来到了结算页面 1.首先,在购物车页面点击去结算按钮时,我们需要做如下动作 .前端发送生成订单的请求,点击标签内触发事件 create_order t ...

  2. 小程序tab选项卡请求我的订单数据筛选处理(待收货、代发货、已完成等)

    1.页面 <view class="navbar"><lable wx:for="{{navbar}}" data-idx="{{i ...

  3. ionic4.x仿京东 - 10.2.确认订单-去结算跳到确认订单(返回特定页面),确认订单页面布局

    购物车 => 确认订单 一.新建确认订单页面 ionic g page checkout 二.配置路由 ----------- tab3与checkout ----------- 1. 从tab ...

  4. 微店抢票如何构造订单页面分析

    文章目录 接口构造 订单页面构造 源码 总结 微店与之前的三篇文章 大麦支持选座位.定时等功能, 利用python分析秀动平台思路, 正在现场平台抢票脚本编写一样,都是抢票平台.本篇文章针对微信平台进 ...

  5. Taro跨端开发探索19——商城小程序确认订单页面开发

    前言 截止到昨天,我们已经将商城小程序的所有tabBar下对应的所有页面.到现在可以说我们的小程序的业务逻辑已经完成了70%了,剩下的逻辑比较重点的就是订单和售后页面了. 今天我们开始探索确认订单页面 ...

  6. dedecms联动筛选_织梦联动类别联动筛选搜索查询功能插件

    用织梦做医院网站首页的症状导诊时候,需要用到织梦联动类别联动枚举结合织梦搜索查询实现查询数据.效果图如下: 症状和病情描述是后台联动类别管理里添加的一级.二级选择 织梦联动类别搜索功能实现步骤: 具体 ...

  7. metaboxs.php,php – WooCommerce:将自定义Metabox添加到管理员订单页面

    我目前正在向我的WooCommerce产品页面成功添加一个字段,该字段显示了以下值: >在购物车(前端), >在结帐页面(前端), >在订单页面(前端), >和管理员个人订单页 ...

  8. 静态html页面关键字搜索高亮

    静态html页面关键字搜索高亮 最近项目要实现一个页面关键字搜索,刚好上网找了一款不错的插件,叫mark.js,官网地址,下面演示一个基于jq的案列,这个插件可以不依赖任何插件也可以实现这个功能,详情 ...

  9. WordPress页面和搜索页伪静态方法

    WordPress页面和搜索页设置伪静态的前提是服务器支持伪静态重写URL Rewrite功能.WordPress设置固定连接以后,文章页可以实现伪静态,页面依然不是html结尾的静态页面.下面介绍一 ...

最新文章

  1. 微软推出Python入门课,登上GitHub趋势榜第一(附视频)
  2. c#split方法拆分为数据_Dexplot:基于pandas,比matplotlib更简单的数据可视化和数据分析工具...
  3. 华为--PPP典型配置举例
  4. python【力扣LeetCode算法题库】136-只出现一次的数字
  5. 前端开发从项目中获得什么_我如何获得副项目的前10个客户以及从他们那里学到的东西...
  6. android studio中断,Android Studio是否有任何修复方法可以在Macbook Pro中断开测试设备的连接?...
  7. 深入理解 nvidia-docker 2.0
  8. 在linux系统中如何查看cpu,Linux中如何查看CPU的信息
  9. Python 安装pythoncom库和pyHook
  10. 循环矩阵的快速幂(bzoj 2510: 弱题)
  11. AtCoder Beginner Contest 238
  12. MySQL基于复制的架构方案
  13. ibm x5服务器系统重装,IBM 3850 X5 Server安装Windows 2003步骤说明
  14. 16种常用的数据分析方法汇总
  15. 你有被银行套路过吗?| 一文教你计算真实的年化利率
  16. ARM和Linux下 nanomsg 编译与使用
  17. 套接字Socket的常见面试题及答案
  18. 嵌入式系统开发笔记88:认识51微控制器系统架构
  19. mysql 主从 只读,mysql主从复制(从库只读)
  20. linux防护勒索病毒的补丁,抵御Petya勒索病毒的最新办法

热门文章

  1. 【leetcode】Permutations
  2. 控制台下星号密码输入的实现
  3. textarea在IE中和FF下不同的效果
  4. linux CentOS普通用户无法从ssh登录解决方案
  5. DDD-上下文映射图
  6. Java高级架构师(一)第05节:TortoiseGit的本地使用
  7. prompt不生效之解决
  8. OC基础15:内存管理和自动引用计数
  9. C#空接合操作符——??
  10. jquery背景动画插件使用