VUE项目实战57订单管理功能介绍和基本结构搭建

Posted 光仔December

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VUE项目实战57订单管理功能介绍和基本结构搭建相关的知识,希望对你有一定的参考价值。

接上篇《56、商品添加功能(六)-提交添加的商品
上一篇我们完成了商品列表及商品添加的所有功能功能。本篇我们开启新模块“订单管理”的开发,先进行模块的介绍和基本结构的搭建。

一、创建新分支

开发新的模块,我们需要创建新的git分支,在VScode打开终端,在控制台输入“git branch”查看我们所在的分支(可以看到是在master主分支上),然后我们使用“git checkout -b order”创建一个名为“order”的分支,可以看到自动切换到了新的分支上:

然后我们通过“git push -u origin order”指令,将本地的分支推送到云端:

然后我们前往gitee云端,可以看到新增了一个分支:

二、创建组件并定义路由规则

我们在components/路径下创建一个名为“order”的文件夹,然后在该文件夹下创建一个名为“Order.vue”的文件文件(订单列表管理组件):

然后在“Order.vue”文件中编写基本代码结构:

<template>
    <div>
        <h3>订单列表组件页面</h3>
    </div>
</template>
 
<script>
export default 
    data()
        return
    ,
    created(),
    methods:

</script>
 
<style scoped>
 
</style>

然后我们在“router/index.js”下引入Order组件(别名OrderList),并在路由规则中定义路由规则(“/orders”菜单的路由):

import Vue from 'vue'
import VueRouter from 'vue-router'
import Login from '../components/Login.vue' //引用Login组件
import Home from '../components/Home.vue' 
import Welcome from '../components/Welcome.vue' 
import Users from '../components/user/Users.vue' 
import Rights from '../components/power/Rights.vue' 
import Roles from '../components/power/Roles.vue' 
import Cate from '../components/goods/Cate.vue' 
import Params from '../components/goods/Params.vue' 
import GoodsList from '../components/goods/List.vue' 
import Add from '../components/goods/Add.vue'
import Order from '../components/order/Order.vue'
 
Vue.use(VueRouter)
const routes = []
 
const router = new VueRouter(
  routes: [
     path: '/', redirect: '/login' ,
     path: '/login', component: Login , //定义访问页面的路由地址
     
      path: '/home',
      component: Home,
      redirect: '/welcome',
      children: [
        path:'/welcome',component:Welcome,
        path:'/users',component:Users,
        path:'/rights',component:Rights,
        path:'/roles',component:Roles,
        path:'/categories',component:Cate,
        path:'/params',component:Params,
        path:'/goods',component:GoodsList,
        path:'/goods/add',component:Add,
        path:'/orders',component:Order
      ]
    
  ]
)
//挂载路由导航守卫
//to是我们跳转的路径,from是来自的路径,next为放行函数
router.beforeEach((to,from,next)=>
  //如果用户访问登录页,直接放行
  if(to.path ==="/login") return next();
  //从sessionStorage中获取到保存的token值
  const tokenStr = window.sessionStorage.getItem("token");
  //没有token,强制跳转到登录页面
  if(!tokenStr) return next("/login");
  next();//有token,直接放行
)
 
export default router

然后我们刷新页面,点击订单管理->订单列表菜单,就被路由到刚刚创建的组件上了:

三、绘制订单列表基本布局

在订单列表页面,除去最基本的面包屑导航以及开片视图区域,左上角是订单名称搜索框和按钮,下方是订单表格,分别显示订单的编号、价格、是否付款和下单时间,最右侧是“修改订单地址”和“物流信息”两个操作按钮,最下面就是分页:

我们先把左上角的面包屑导航和卡片视图做出来。
首先我们将在商品管理的面包屑导航直接拷贝过来修改,然后再通过“el-card”创建一个卡片视图区域以及搜索按钮:

<template>
    <div>
        <!-- 面包屑导航 -->
        <el-breadcrumb separator-class="el-icon-arrow-right">
        <el-breadcrumb-item :to=" path: '/home' ">首页</el-breadcrumb-item>
        <el-breadcrumb-item>订单管理</el-breadcrumb-item>
        <el-breadcrumb-item>订单列表</el-breadcrumb-item>
        </el-breadcrumb>
 
        <!-- 卡片视图 -->
        <el-card>
            <el-row :gutter="20" ><!-- gutter是指定每个分栏的间隔 -->
                <!-- 分栏一共占24格,给搜索框7格 -->
                <el-col :span="7">
                    <!-- 搜索与添加区域 -->
                    <el-input placeholder="请输入内容" clearable>
                        <el-button slot="append" icon="el-icon-search"></el-button>
                    </el-input>
                </el-col>
            </el-row>
        </el-card>
    </div>
</template>

效果:

四、获取订单列表数据

我们来看一下订单列表接口API的参数和响应结果:

●响应数据格式:


    "data": 
        "total": 1,
        "pagenum": "1",
        "goods": [
            
                "order_id": 47,
                "user_id": 133,
                "order_number": "itcast-59e7502d7993d",
                "order_price": 322,
                "order_pay": "1",
                "is_send": "是",
                "trade_no": "",
                "order_fapiao_title": "个人",
                "order_fapiao_company": "",
                "order_fapiao_content": "办公用品",
                "consignee_addr": "a:7:s:6:\\"cgn_id\\";i:1;s:7:\\"user_id\\";i:133;s:8:\\"cgn_name\\";s:9:\\"王二柱\\";s:11:\\"cgn_address\\";s:51:\\"北京市海淀区苏州街长远天地大厦305室\\";s:7:\\"cgn_tel\\";s:11:\\"13566771298\\";s:8:\\"cgn_code\\";s:6:\\"306810\\";s:11:\\"delete_time\\";N;",
                "pay_status": "1",
                "create_time": 1508331565,
                "update_time": 1508331565
            
        ]
    ,
    "meta": 
        "msg": "获取成功",
        "status": 200
    

可以看到传参的时候,传递的是query查询参数(模糊查询用的),以及pagenum和pagesize两个的分页参数,剩余的是用户ID、支付传统以及是否发货和订单的一些基本信息。
而返回的订单信息是封装在goods数组里的,遍历出来即可。

清楚了API的调用,我们来编写调用代码。首先在数据区域定义一个“orderlist”对象,用来承载商品列表数据,然后是“queryinfo”对象,为请求数据的默认请求参数对象;“total”为数据总数:

<script>
export default 
    data()
        return
            //查询条件
            queryInfo:
                query: '',
                pagenum: 1,
                pagesize: 10
            ,
            //订单列表,默认为空
            orderlist: [],
            total: 0 //数据总数
        
    ,
    created(),
    methods:

</script>

然后在方法区定义名为“getOrderList”方法,用来获取商品数据(同时该方法在created声明周期函数中调用):

created()
    this.getOrderList();
,
methods:
    //根据分页获取对应的订单列表
    async getOrderList()
        const data: res = await this.$http.get('orders',params: this.queryInfo);
        if(res.meta.status!==200)
            return this.$message.error('获取订单列表失败!')
        
        console.log(res.data);
        //报数据列表,赋值给orderlist
        this.orderlist = res.data.goods;
        //为总数据条数赋值
        this.total = res.data.total;
    

我们打开浏览器访问商品列表模块,F12查看返回的数据结构:

可以看到成功获取到订单列表数据。

五、渲染订单列表

获取到数据后,我们渲染订单列表的表格。我们在卡片视图区域的“el-row”下面添加table表格区域:

<!-- table 表格区域 -->
<el-table :data="orderlist" border stripe>
    <el-table-column type="index"></el-table-column><!-- 索引列 -->
    <el-table-column label="订单编号" prop="order_number"></el-table-column>
    <el-table-column label="订单价格" prop="order_price" width="90px"></el-table-column>
    <el-table-column label="是否付款" prop="pay_status" width="70px">
        <template slot-scope="scope">
            <el-tag type="success" v-if="scope.row.pay_status=='1'">已付款</el-tag>
            <el-tag type="danger" v-else>未付款</el-tag>
        </template>
    </el-table-column>
    <el-table-column label="是否发货" prop="is_send" width="70px"></el-table-column>
    <el-table-column label="下单时间" width="140px">
        <template slot-scope="scope">
            scope.row.create_time | dateFormat
        </template>
    </el-table-column>
    <el-table-column label="操作" width="200px">
        <template slot-scope="">
            <el-button size= "mini" type="primary" icon="el-icon-edit"></el-button>
            <el-button size= "mini" type="success" icon="el-icon-location"></el-button>
        </template>
    </el-table-column>
</el-table>

注:“是否付款”部分,我们通过scope作用域插槽,获取是否付款的字段,使用v-if条件根据1和0来判断显示红色选项卡还是绿色选项卡。然后订单日期格式处理,使用的是之前我们在main.js中注册一个全局的时间处理器“dateFormat”。
效果:

六、分页效果

分页效果之前已经讲解过了,这里不再赘述,直接说结果。我们使用Element-UI提供的“Pagination分页”组件,在el-table下添加如下逻辑:

<!-- 分页区域 -->
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
    :current-page="queryInfo.pagenum" :page-sizes="[5, 10, 15, 20]" :page-size="queryInfo.pagesize" 
    layout="total, sizes, prev, pager, next, jumper" :total="total" background>
</el-pagination>

然后在方法区分别定义上面监听每页数量改变和页码值改变的方法:

//监听 pagesize 改变的事件
handleSizeChange(newSize)
    console.log(newSize);
    this.queryInfo.pagesize = newSize;//重新指定每页数据量
    this.getOrderList();//带着新的分页请求获取数据
,
//监听 页码值 改变的事件
handleCurrentChange(newPage)
    console.log(newPage);
    this.queryInfo.pagenum = newPage;//重新指定当前页
    this.getOrderList();//带着新的分页请求获取数据

注:要在element.js注册“Pagination”组件,否则会不显示。
分页效果:

至此我们的订单列表模块介绍和基础结构搭建完成。
下一篇我们继续编写订单列表的查询和删除功能。

参考:黑马程序员(www.itheima.com)Vue项目实战教学视频

转载请注明出处:https://blog.csdn.net/acmman/article/details/125577526

以上是关于VUE项目实战57订单管理功能介绍和基本结构搭建的主要内容,如果未能解决你的问题,请参考以下文章

VUE项目实战37商品分类功能介绍和基本结构搭建

VUE项目实战60数据报表模块介绍和基础框架搭建

VUE项目实战60数据报表模块介绍和基础框架搭建

VUE项目实战38实现商品分类的树形表格

Vue2.5 实战微信读书 媲美原生App的企业级web书城

Java SSM项目 day01 企业权限管理系统(IDEA版)源代码