伙伴云客服论坛»论坛 S区 S客户管理 查看内容

0 评论

0 收藏

分享

【VUE项目实战】57、订单管理功能介绍和根本构造搭建

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

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

【VUE项目实战】57、订单管理功能介绍和根本构造搭建-1.png

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

【VUE项目实战】57、订单管理功能介绍和根本构造搭建-2.png

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

【VUE项目实战】57、订单管理功能介绍和根本构造搭建-3.png


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

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

【VUE项目实战】57、订单管理功能介绍和根本构造搭建-4.png

然后在“Order.vue”文件中编写根本代码构造:
  1. <template>
  2.     <div>
  3.         <h3>订单列表组件页面</h3>
  4.     </div>
  5. </template>
  6. <script>
  7. export default {
  8.     data(){
  9.         return{}
  10.     },
  11.     created(){},
  12.     methods:{}
  13. }
  14. </script>
  15. <style scoped>
  16. </style>
复制代码
然后我们在“router/index.js”下引入Order组件(别名OrderList),并在路由规则中定义路由规则(“/orders”菜单的路由):
  1. import Vue from 'vue'
  2. import VueRouter from 'vue-router'
  3. import Login from '../components/Login.vue' //引用Login组件
  4. import Home from '../components/Home.vue'
  5. import Welcome from '../components/Welcome.vue'
  6. import Users from '../components/user/Users.vue'
  7. import Rights from '../components/power/Rights.vue'
  8. import Roles from '../components/power/Roles.vue'
  9. import Cate from '../components/goods/Cate.vue'
  10. import Params from '../components/goods/Params.vue'
  11. import GoodsList from '../components/goods/List.vue'
  12. import Add from '../components/goods/Add.vue'
  13. import Order from '../components/order/Order.vue'
  14. Vue.use(VueRouter)
  15. const routes = []
  16. const router = new VueRouter({
  17.   routes: [
  18.     { path: '/', redirect: '/login' },
  19.     { path: '/login', component: Login }, //定义访问页面的路由地址
  20.     {
  21.       path: '/home',
  22.       component: Home,
  23.       redirect: '/welcome',
  24.       children: [
  25.         {path:'/welcome',component:Welcome},
  26.         {path:'/users',component:Users},
  27.         {path:'/rights',component:Rights},
  28.         {path:'/roles',component:Roles},
  29.         {path:'/categories',component:Cate},
  30.         {path:'/params',component:Params},
  31.         {path:'/goods',component:GoodsList},
  32.         {path:'/goods/add',component:Add},
  33.         {path:'/orders',component:Order}
  34.       ]
  35.     }
  36.   ]
  37. })
  38. //挂载路由导航守卫
  39. //to是我们跳转的途径,from是来自的途径,next为放行函数
  40. router.beforeEach((to,from,next)=>{
  41.   //假设用户访问登录页,直接放行
  42.   if(to.path ==="/login") return next();
  43.   //从sessionStorage中获取到保管的token值
  44.   const tokenStr = window.sessionStorage.getItem("token");
  45.   //没有token,强迫跳转到登录页面
  46.   if(!tokenStr) return next("/login");
  47.   next();//有token,直接放行
  48. })
  49. export default router
复制代码
然后我们刷新页面,点击订单管理->订单列表菜单,就被路由到刚刚创建的组件上了:

【VUE项目实战】57、订单管理功能介绍和根本构造搭建-5.png


三、绘制订单列表根本规划

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

【VUE项目实战】57、订单管理功能介绍和根本构造搭建-6.png

我们先把左上角的面包屑导航和卡片视图做出来。
首先我们将在商品管理的面包屑导航直接拷贝过来修改,然后再通过“el-card”创建一个卡片视图区域以及搜索按钮:
  1. <template>
  2.     <div>
  3.         <!-- 面包屑导航 -->
  4.         <el-breadcrumb separator-class="el-icon-arrow-right">
  5.         <el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
  6.         <el-breadcrumb-item>订单管理</el-breadcrumb-item>
  7.         <el-breadcrumb-item>订单列表</el-breadcrumb-item>
  8.         </el-breadcrumb>
  9.         <!-- 卡片视图 -->
  10.         <el-card>
  11.             <el-row :gutter="20" ><!-- gutter是指定每个分栏的间隔 -->
  12.                 <!-- 分栏一共占24格,给搜索框7格 -->
  13.                 <el-col :span="7">
  14.                     <!-- 搜索与添加区域 -->
  15.                     <el-input placeholder="请输入内容" clearable>
  16.                         <el-button slot="append" icon="el-icon-search"></el-button>
  17.                     </el-input>
  18.                 </el-col>
  19.             </el-row>
  20.         </el-card>
  21.     </div>
  22. </template>
复制代码
效果:

【VUE项目实战】57、订单管理功能介绍和根本构造搭建-7.png


四、获取订单列表数据

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

【VUE项目实战】57、订单管理功能介绍和根本构造搭建-8.png

●响应数据格式:
  1. {
  2.     "data": {
  3.         "total": 1,
  4.         "pagenum": "1",
  5.         "goods": [
  6.             {
  7.                 "order_id": 47,
  8.                 "user_id": 133,
  9.                 "order_number": "itcast-59e7502d7993d",
  10.                 "order_price": 322,
  11.                 "order_pay": "1",
  12.                 "is_send": "是",
  13.                 "trade_no": "",
  14.                 "order_fapiao_title": "个人",
  15.                 "order_fapiao_company": "",
  16.                 "order_fapiao_content": "办公用品",
  17.                 "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;}",
  18.                 "pay_status": "1",
  19.                 "create_time": 1508331565,
  20.                 "update_time": 1508331565
  21.             }
  22.         ]
  23.     },
  24.     "meta": {
  25.         "msg": "获取胜利",
  26.         "status": 200
  27.     }
  28. }
复制代码
可以看到传参的时候,传送的是query查询参数(模糊查询用的),以及pagenum和pagesize两个的分页参数,剩余的是用户ID、支付传统以及是否发货和订单的一些根本信息。
而返回的订单信息是封装在goods数组里的,遍历出来即可。
清楚了API的调用,我们来编写调用代码。首先在数据区域定义一个“orderlist”对象,用来承载商品列表数据,然后是“queryinfo”对象,为恳求数据的默认恳求参数对象;“total”为数据总数:
  1. <script>
  2. export default {
  3.     data(){
  4.         return{
  5.             //查询条件
  6.             queryInfo:{
  7.                 query: '',
  8.                 pagenum: 1,
  9.                 pagesize: 10
  10.             },
  11.             //订单列表,默认为空
  12.             orderlist: [],
  13.             total: 0 //数据总数
  14.         }
  15.     },
  16.     created(){},
  17.     methods:{}
  18. }
  19. </script>
复制代码
然后在方法区定义名为“getOrderList”方法,用来获取商品数据(同时该方法在created声明周期函数中调用):
  1. created(){
  2.     this.getOrderList();
  3. },
  4. methods:{
  5.     //根据分页获取对应的订单列表
  6.     async getOrderList(){
  7.         const {data: res} = await this.$http.get('orders',{params: this.queryInfo});
  8.         if(res.meta.status!==200){
  9.             return this.$message.error('获取订单列表失败!')
  10.         }
  11.         console.log(res.data);
  12.         //报数据列表,赋值给orderlist
  13.         this.orderlist = res.data.goods;
  14.         //为总数据条数赋值
  15.         this.total = res.data.total;
  16.     }
  17. }
复制代码
我们翻开阅读器访问商品列表模块,F12查看返回的数据构造:

【VUE项目实战】57、订单管理功能介绍和根本构造搭建-9.png

可以看到胜利获取到订单列表数据。
五、渲染订单列表

获取到数据后,我们渲染订单列表的表格。我们在卡片视图区域的“el-row”下面添加table表格区域:
  1. <!-- table 表格区域 -->
  2. <el-table :data="orderlist" border stripe>
  3.     <el-table-column type="index"></el-table-column><!-- 索引列 -->
  4.     <el-table-column label="订单编号" prop="order_number"></el-table-column>
  5.     <el-table-column label="订单价格" prop="order_price" width="90px"></el-table-column>
  6.     <el-table-column label="是否付款" prop="pay_status" width="70px">
  7.         <template slot-scope="scope">
  8.             <el-tag type="success" v-if="scope.row.pay_status=='1'">已付款</el-tag>
  9.             <el-tag type="danger" v-else>未付款</el-tag>
  10.         </template>
  11.     </el-table-column>
  12.     <el-table-column label="是否发货" prop="is_send" width="70px"></el-table-column>
  13.     <el-table-column label="下单时间" width="140px">
  14.         <template slot-scope="scope">
  15.             {{scope.row.create_time | dateFormat}}
  16.         </template>
  17.     </el-table-column>
  18.     <el-table-column label="操作" width="200px">
  19.         <template slot-scope="{}">
  20.             <el-button size= "mini" type="primary" icon="el-icon-edit"></el-button>
  21.             <el-button size= "mini" type="success" icon="el-icon-location"></el-button>
  22.         </template>
  23.     </el-table-column>
  24. </el-table>
复制代码
注:“是否付款”部分,我们通过scope作用域插槽,获取是否付款的字段,使用v-if条件根据1和0来判断显示红色选项卡还是绿色选项卡。然后订单日期格式处置,使用的是之前我们在main.js中注册一个全局的时间处置器“dateFormat”。
效果:

【VUE项目实战】57、订单管理功能介绍和根本构造搭建-10.png


六、分页效果

分页效果之前已经讲解过了,这里不再赘述,直接说结果。我们使用Element-UI提供的“Pagination分页”组件,在el-table下添加如下逻辑:
  1. <!-- 分页区域 -->
  2. <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
  3.     :current-page="queryInfo.pagenum" :page-sizes="[5, 10, 15, 20]" :page-size="queryInfo.pagesize"
  4.     layout="total, sizes, prev, pager, next, jumper" :total="total" background>
  5. </el-pagination>
复制代码
然后在方法区分别定义上面监听每页数量改变和页码值改变的方法:
  1. //监听 pagesize 改变的事件
  2. handleSizeChange(newSize){
  3.     console.log(newSize);
  4.     this.queryInfo.pagesize = newSize;//重新指定每页数据量
  5.     this.getOrderList();//带着新的分页恳求获取数据
  6. },
  7. //监听 页码值 改变的事件
  8. handleCurrentChange(newPage){
  9.     console.log(newPage);
  10.     this.queryInfo.pagenum = newPage;//重新指定当前页
  11.     this.getOrderList();//带着新的分页恳求获取数据
  12. }
复制代码
注:要在element.js注册“Pagination”组件,否则会不显示。
分页效果:

【VUE项目实战】57、订单管理功能介绍和根本构造搭建-11.png


至此我们的订单列表模块介绍和根底构造搭建完成。
下一篇我们继续编写订单修改收货地址的功能。
参考:黑马程序员(www.itheima.com)Vue项目实战教学视频
借鉴请注明出处:https://blog.csdn.net/acmman/article/details/125577526

回复

举报 使用道具

相关帖子
全部回复
暂无回帖,快来参与回复吧
本版积分规则 高级模式
B Color Image Link Quote Code Smilies

小儿上茶
注册会员
主题 20
回复 18
粉丝 0
|网站地图
快速回复 返回顶部 返回列表