zoukankan      html  css  js  c++  java
  • 项目中订单管理思路

    1、前端页面,订单管理全在一个页面进行展示,根据不同的状态显示不同的显示不同的内容

    <template>
    <div class="box">
      <Header>
           <!-- <div slot="left"></div> -->
          <div slot="center">订单管理</div>
          <!-- <div slot="left"></div> -->
        </Header>
        <header class="order-header">
          <div :class="num===0 ? 'active' : ''" @click="order0()">全部</div>
          <div :class="num===1 ? 'active' : ''" @click="order1()">待付款</div>
          <div :class="num===2 ? 'active' : ''" @click="order2()">待收货</div>
          <div :class="num===3 ? 'active' : ''" @click="order3()">待评价</div>
          <div :class="num===4 ? 'active' : ''" @click="order4()">售后</div>
        </header>
        <div class="content">
          <div class="order-search">
            <input type="text" placeholder="搜索全部订购单">
            <button>搜索</button>
          </div>
          <div class="nothingorder" v-if="!flag">
            <img src="https://img.alicdn.com/tfs/TB1vJ_.vTqWBKNjSZFxXXcpLpXa-330-330.png" alt="没有了">
            <p>您还没有相关订单</p>
            <span>可以去看看哪些想买的</span>
            <router-link to="/home" tag="button">
            随便逛逛
          </router-link>
            <!-- {{orderlist}} -->
          </div>
          <div class="orderlist" v-else>
            <div class="listitem" v-for="item of orderlist" :key="item.orderid">
              <div class="list-top">
                <div>
                  <img src="http://gw.alicdn.com/tfs/TB1LmH7SXXXXXXYXFXXXXXXXXXX-63-63.png_50x50_.webp" alt="店铺名">
                  <span>店铺名</span>
                </div>
                <p style="color:#f55000">{{item.status==0?'待付款':item.status==1?'待收货':item.status==2?'待评价':item.status==3?'已完成':''}}</p>
              </div>
              <!-- <div class="pro"> -->
              <div class="list-pro" v-for="it of item.list" :key="it.proid" @click="goDetail(it.proid)">
                <img :src="it.proimg" alt="">
                <div class="itempro">
                  <p>{{it.proname}}</p>
                  <span>商品规格</span>
                </div>
                <div class="itemtotal">
                  <p>¥{{it.price.toFixed(2)}}</p>
                  <span>X {{it.num}}</span>
                </div>
              <!-- </div> -->
              </div>
              <div class="list-total">
                <span>共{{item.num}}件商品</span>
                <p>合计¥{{item.price}}元</p>
              </div>
              <div class="list-server">
                <p @click="delOrder(item.orderid)">删除订单</p>
                <p v-if="item.status!=1" @click="goShouhuo(item.orderid,item.status)">订单详情</p>
                <p v-else-if="item.status==1" @click="goShouhuo(item.orderid,item.status)">查看物流</p>
                <p v-if="item.status==0" @click="goPay(item.orderid)">去付款</p>
                <p v-else-if="item.status==1" @click="confirm(item.orderid)">确认收货</p>
                <p v-else-if="item.status==2" @click="goEvaluate(item.orderid)">评价</p>
                <p v-else-if="item.status==3" @click="service()">联系客服</p>
              </div>
            </div>
          </div>
        </div>
    </div>
    </template>
    <style lang="scss">
    @import '@/lib/reset.scss';
    .order-header {
       @include rect(100%, 0.44rem);
          @include background-color(#fff);
          @include flexbox();
          @include color(#333);
          @include justify-content(space-between);
          @include align-items();
          @include padding(0 10px);
          // font-size: 17px;
          div {
            height: 100%;
            line-height: 0.44rem;
          }
          .active {
            color: #ff5000;
            border-bottom: 3px solid #ff5000;
          }
    }
    .order-search {
      @include flexbox();
      @include justify-content(space-between);
      padding: 10px 20px 0;
      margin-top: .1rem;
      input {
        border-radius: 20px;
        width: 70%;
        height:0.3rem;
        outline: none;
        border: none;
        text-indent: 30px;
        background: #fff url("/images/search.png") no-repeat 10px center;
      }
      button {
        border-radius: 20px;
        background: #ff5000;
        color: #fff;
        width: 25%;
        outline: none;
        border: none;
        font-size:16px;
      }
    }
    .nothingorder {
      @include padding(1rem 0 0 0);
      @include flexbox();
      @include flex-direction(column);
      @include justify-content();
      @include align-items();
    
      img {
        width: 30%;
        margin-bottom: 0.2rem;
      }
      p {
        font-size:16px;
        margin-bottom: 0.05rem;
      }
      span {
        color: #999999;
        margin-bottom: 0.3rem;
      }
      button {
        border: none;
        width: 0.9rem;
        height: 0.35rem;
        border-radius: 20px;
        color: #fff;
        background-image: linear-gradient(to right, #fd9126, #ff5000);
      }
    }
    .orderlist {
      @include flexbox();
      @include margin(10px 5%);
      @include rect(90%, auto);
        @include flex-wrap(wrap);
      .listitem {
        margin: 10px 0;
        @include background-color(#fff);
        @include border-radius(15px);
        @include rect(100%, auto);
        @include flexbox();
        @include padding(5px 20px 10px 10px);
        @include flex-wrap(wrap);
        .list-top {
          width: 100%;
          @include rect(100%, .3rem);
          @include flexbox();
          @include justify-content(space-between);
          @include align-items();
          div {
          @include flexbox();
          @include align-items();
          img {
            margin-right: 10px;
            width:20px;
            display: block;
          }
          }
      }
      .list-pro {
        width: 100%;
        @include flexbox();
          @include justify-content(space-between);
          img {
            width: 25%;
            margin-right:10px;
          }
          .itempro {
        @include flexbox();
        @include flex-direction(column);
        @include flex();
        span {
          color:#aaa;
        }
          }
        .itemtotal {
        @include flexbox();
        @include flex-direction(column);
        width: 15%;
        span {
          color: #aaa;
        }
    
          }
      }
      .list-total {
        width: 100%;
        @include flexbox();
        @include justify-content(flex-end);
        margin-bottom: 10px;
        span {
          margin-right:10px;
          color: #aaa;
        }
      }
      .list-server {
        width: 100%;
        @include flexbox();
        @include justify-content(flex-end);
        p {
          width: 25%;
          border: 1px solid #aaa;
          border-radius: 20px;
          margin-right: 10px;
          text-align: center;
          height:.3rem;
          line-height: .28rem;
        }
      }
    }
    }
    </style>
    <script>
    import axios from '@/utils/request'
    import Header from '@/components/Header'
    import Vue from 'vue'
    import { Dialog, Toast } from 'vant'
    Vue.use(Dialog)
    Vue.use(Toast)
    export default {
      components: {
        Header
      },
      data () {
        return {
          active: parseInt(this.$route.query.num) || 0,
          flag: false,
          list: '', // 全部数据
          orderlist: '', //  显示的数据
          payment: '', //  待付款
          received: '', // 待收货
          evaluate: '', // 待评价
          aftersale: '' // 售后
        }
      },
      created () {
        // console.log(this.$route.query.num)
        // this.flag = true
        let order = this.$route.query.num * 1
        let userid = localStorage.getItem('userid')
        // 取得全部订单
        axios.get('/order/allorder?userid=' + userid).then(res => {
          this.list = res.data.data
        })
        // 取得待付款订单
        axios.get('/order/allorder?userid=' + userid + '&status=' + 0).then(res => {
          this.payment = res.data.data
        })
        // 取得待收货订单
        axios.get('/order/allorder?userid=' + userid + '&status=' + 1).then(res => {
          this.received = res.data.data
        })
        // 取得待评价订单
        axios.get('/order/allorder?userid=' + userid + '&status=' + 2).then(res => {
          this.evaluate = res.data.data
        })
        // 取得售后订单
        axios.get('/order/allorder?userid=' + userid + '&status=' + 3).then(res => {
          this.aftersale = res.data.data
          order === 0 ? this.order0() : order === 1 ? this.order1() : order === 2 ? this.order2() : order === 3 ? this.order3() : order === 4 ? this.order4() : this.order0()
        })
      },
      computed: {
        num () {
          return this.active
        }
      },
      methods: {
        order0 () {
          this.active = 0
          if (this.list.length > 0) {
            this.orderlist = this.list
            this.flag = true
          } else {
            this.flag = false
          }
          // console.log(this.orderlist)
        },
        order1 () {
          this.active = 1
          if (this.payment.length > 0) {
            this.orderlist = this.payment
            this.flag = true
          } else {
            this.flag = false
          }
          console.log(this.orderlist)
        },
        order2 () {
          this.active = 2
          if (this.received.length > 0) {
            this.orderlist = this.received
            this.flag = true
          } else {
            this.flag = false
          }
          console.log(this.orderlist)
        },
        order3 () {
          this.active = 3
          if (this.evaluate.length > 0) {
            this.orderlist = this.evaluate
            this.flag = true
          } else {
            this.flag = false
          }
        },
        order4 () {
          this.active = 4
          if (this.aftersale.length > 0) {
            this.orderlist = this.aftersale
            this.flag = true
          } else {
            this.flag = false
          }
        },
        delOrder (orderid) {
          // console.log(this.active)
          let index = this.active
          Dialog.confirm({
            title: '删除订单',
            message: '是否删除该订单'
          }).then(() => {
            axios.get('order/delete?orderid=' + orderid).then(res => {
              Toast('删除成功')
              this.$router.replace('userorder?num=' + index)
              location.reload()
            })
            console.log(orderid)
          }).catch(() => {
            // on cancel
          })
        },
        goPay (orderid) {
          this.$router.push('/order?orderid=' + orderid)
          // console.log(orderid)
        },
        confirm (orderid) {
          let index = this.active
          Dialog.confirm({
            title: '确认收货',
            message: '是否确认收货'
          }).then(() => {
            axios.get('/order/updatestatus?orderid=' + orderid + '&status=' + 2).then(res => {
              Toast('已收货')
              this.$router.replace('userorder?num=' + index)
              location.reload()
            })
            console.log(orderid)
          }).catch(() => {
            // on cancel
          })
        },
        goEvaluate (orderid) {
          this.$router.push('/evaluate?orderid=' + orderid)
        },
        service () {
          console.log('我能联系客服吗')
        },
        goDetail (proid) {
          this.$router.push('/detail?proid=' + proid)
        },
        goShouhuo (orderid, status) {
          this.$router.push('/shouhuo?orderid=' + orderid + '&status=' + status)
        }
      }
    }
    </script>

    订单接口

    var express = require('express');
    var router = express.Router();
    var sql = require('./../sql')
    var Order = require('./../sql/collection/orders');
    var Cart = require('./../sql/collection/carts');
    var uuid = require('node-uuid');
    
    // 查看订单
    router.get('/', function(req, res, next) {
      // 获取订单的状态
      let status = req.query.status;
      // 查询订单的信息 用户id和订单的id
      let findData = { userid: req.query.userid, orderid: req.query.orderid };
      if (status) { // 如果没有传值,那么查询全部的数据
        findData.status = status
      }
      sql.find(Order, findData, { _id: 0 }).then(data => {
        res.send({
          code: '200',
          message: '订单列表',
          len: data.length,
          data: data
        })
      })
    });
    //查询各种状态的订单
    router.get('/allorder', function(req, res, next) {
      let status = req.query.status
      let findData = { userid: req.query.userid }
      if (status) {
        findData.status = status
      }
      sql.find(Order, findData, { _id: 0 }).then(data => {
        res.send({
          code: '200',
          message: '所有订单',
          len: data.length,
          data: data
        })
      })
    });
    
    // 评价的接口
    router.get('/evaluate',function(req,res,next) {
      let orderid = req.query.orderid
      sql.find(Order,{orderid },{_id:0}).then( data => {
        res.send({
          code: '200',
          message: '待评价的订单',
          data: data
        })
      })
    })
    
    
    // 删除订单
    router.get('/delete', function(req, res, next) {
      // 查询订单的信息 用户id和订单的id
      console.log('??del')
      let findData = { orderid: req.query.orderid }
      sql.delete(Order, findData).then(data => {
        res.send({
          code: '200',
          message: '删除成功'
        })
      })
    });
    
    //修改订单状态
    router.get('/updatestatus', function(req, res, next) {
      let { orderid, status } = req.query
      sql.update(Order, {orderid}, { $set: { status: status }}).then(data => {
        res.send({
          code: '200',
          message: '修改状态成功'
        })
      })
    });
    
    // 修改订单
    router.get('/addinfo', (req, res, next) => {
      let { name, tel ,address } = req.query
      let note = req.query.note || ''
      sql.update(Order, { orderid: req.query.orderid }, { $set: {name, tel, address, note }}).then(data => {
        res.send({
          code: '200',
          message: '地址添加至订单'
        })
      })
    })
    // 生成订单删除购物车
    router.get('/add', (req, res, next) => {
      var now = new Date();
      var year = now.getFullYear(); //得到年份
      var month = now.getMonth();//得到月份
      var date = now.getDate();//得到日期
      month = month + 1;
      if (month < 10) month = "0" + month;
      if (date < 10) date = "0" + date;
      var time = "";
      time = year + "-" + month + "-" + date;
      // 1、获取前端提交的订单数据 "[{},{},{}]" -- 转成对象
      let list = JSON.parse(req.query.str)
      let userid = req.query.userid // 获取用户id
      let orderid = 'order_' + uuid.v1(); // 生成订单的id
      let num = req.query.num;
      let price = req.query.price;
      let arr = [] // 订单列表数据
      list.map(item => { // 遍历数据,获取订单的信息
        arr.push({
          proid: item.proid,
          proimg: item.proimg,
          proname: item.proname,
          price: item.price * 1,
          num: item.num * 1
        })
      })
      // 插入数据库
      sql.insert(Order, {
        orderid: orderid,
        userid: userid,
        status: 0, // 订单状态 0 待付款 1 待收货(已支付) 2 待评价
        name: '',
        tel: '',
        address: '',
        note: '',
        num,
        price,
        createtime:time,
        list: arr
      }).then(() => {
        // 生成订单后要删除购物车的数据
        let p1 = list.map(item => {
          return sql.delete(Cart, { cartid: item.cartid })
        })
        return Promise.all(p1)
      }).then(() => {
        res.send({
          code: '200',
          message: '生成订单',
          data: { // 用于在确认订单页面 查询订单的信息
            orderid: orderid
          }
        })
      })
    })
    module.exports = router;
  • 相关阅读:
    Java进阶之内部类
    Java进阶之集合框架
    Java进阶之异常
    Java进阶之JVM虚拟机(Java Virtual Machine)
    Java进阶之String类
    Java进阶之Nnumber类和Math
    Java基础之流程控制语句
    Java基础之标识符与修饰符
    Java基础之数据类型与运算符
    数据库事务与事务隔离级别
  • 原文地址:https://www.cnblogs.com/hy96/p/11853517.html
Copyright © 2011-2022 走看看