学习自:【黑马程序员Java项目实战《苍穹外卖》,最适合新手的SpringBoot+SSM的企业级Java项目实战】https://www.bilibili.com/video/BV1TP411v7v6?vd_source=9fed3cefc266aa5b3895aaab6e6214f5

本文是基于上述视频教程和视频配套文档的文字总结。

本篇文章是苍穹外卖前端的学习笔记。

前提条件:后端项目启动完成,后端服务地址为http://localhost:8080。

前端环境搭建

技术选型

  • node.js > 14.17.0 (typescript 要求 node.js版本大于 14.17.0 以上)
  • vue 2.6.10
  • Element UI 2.12.0
  • axios 0.19.0
  • vuex 3.1.1
  • vue-router 3.1.2
  • typescript 5.x具体不记得了

启动项目

注意到导入的初始工程里面并没有前端项目运行所以来的js包,需要执行npm install 命令来安装。生成的依赖包在node_moudles目录。如下图示。

然后运行npm run serve启动前端项目。

tips:什么时候用dev,什么时候用serve?只需要看package.json里面的script配置,与它保持一致。

前端项目启动如下:

登录的流程

  1. 获取登录页面路由地址
  2. 从main.ts中找到路由文件(/router/index.ts)
  3. 从路由文件中找到登录视图组件
  4. 从登录视图组件中找到登录的方法
  5. 找到登录方法后,跟踪登录方法的执行流程。具体来说,就是观察前后端的交互过程,例如前端如何发送axios请求,后端返回的数据格式等。

分页查询

员工的分页查询比较简单,这里以套餐的分页查询为例。

需求分析和接口设计

我们自己需要根据产品的原型来进行需求分析,并设计出对应的接口。产品的原型如下:

不难分析,我们的业务规则是:

  • 根据页码展示套餐的信息,例如套餐名称、分类、状态等
  • 每页展示10条数据
  • 分页查询时,可以选择查询的条件

分析完需求后,就要设计对应的接口。要展示出套餐的分页数据,需要两个接口:

  • 分类查询接口(用于套餐分类下拉框中分类数据的展示)
  • 套餐分页查询接口

(1)分类查询接口

基本信息

Path: /admin/category/list

Method: GET

请求参数

Query

参数名称 是否必须 示例 备注
type 2 分类类型:1为菜品分类,2为套餐分类

返回数据

名称 类型 是否必须 默认值 备注 其他信息
code integer 必须 format: int32
data object [] 非必须 item 类型: object
├─ createTime string 非必须 format: date-time
├─ createUser integer 非必须 format: int64
├─ id integer 非必须 format: int64
├─ name string 非必须
├─ sort integer 非必须 format: int32
├─ status integer 非必须 format: int32
├─ type integer 非必须 format: int32
├─ updateTime string 非必须 format: date-time
├─ updateUser integer 非必须 format: int64
msg string 非必须

这个接口用来查询套餐分类下具体的套餐类别,例如KFC套餐、麦当劳套餐等。

(2)套餐分页查询接口

基本信息

Path: /admin/setmeal/page

Method: GET

请求参数

Query

参数名称 是否必须 示例 备注
categoryId 分类id
name 套餐名称
page 页码
pageSize 每页记录数
status 套餐起售状态

返回数据

名称 类型 是否必须 默认值 备注 其他信息
code number 必须
msg null 非必须
data object 非必须
├─ total number 非必须
├─ records object [] 非必须 item 类型: object
├─ id number 必须
├─ categoryId number 必须
├─ name string 必须
├─ price number 必须
├─ status number 必须
├─ description string 必须
├─ image string 必须
├─ updateTime string 必须
├─ categoryName string 必须

查询参数中,只有page和pageSize是必须的,另外三个都是可选的。

代码开发

要进行套餐管理的代码开发,就要根据路由文件router.ts找到对应的组件。可以看到,套餐管理页面(组件)的位置为:src/view/setmeal/index.vue。我们只需要在此文件中开发套餐分页查询的前端代码即可。而整个前端代码的开发大致分为以下几个关键步骤:

  1. 根据产品原型,制作页面的头部效果(包含输入框,下拉框,查询按钮等)
  2. 填充套餐分类下拉框中的分类数据
  3. 为查询按钮绑定事件,发送axios请求,获得后端返回的数据
  4. 提供vue的初始化方法,在页面加载完成后就查询分页数据
  5. 使用ElmentUI提供的表格组件展示分页数据
  6. 使用ElementUI提供的分页条组件实现翻页的效果

一般来说,我们每开发完成一步,都需要进行测试,然后在继续进行开发

制作页面头部效果

产品原型如下:

参考ElementUI提供的文档,进行修改即可。我们需要在data()方法中绑定响应的模型数据。

动态的填充套餐分类下拉框的数据

这时,前端就需要发起请求,调用后端分类查询的接口,然后将后端返回的数据动态展示到下拉框中。按照项目规范,发起请求的方法代码被定义到src/api/category.ts 文件中。

然后我们将定义好的方法导入当前组件,在生命周期方法created中调用此方法,获取套餐分类数据,动态填充下拉框即可。具体如下:

这个时候我们就要去修改template部分中的代码,将绑定的数据改为catergoryId,将key和label的值修改为后端返回数据中的属性名。具体如下:

此时两个下拉框的测试效果如下:

动态获取分页数据

在这个操作中,我们需要为查询按钮绑定单击事件,在methods中定义分页查询的方法(pageQuery()),在api目录下的ts文件中定义getSetmealPage方法,实现发送axios请求获取分页数据。然后再套餐管理组件中导入定义好的getSetmealPage方法,并再data()方法中定义分页相关的数据模型。再pageQuery方法中调用getSetmealPage方法,实现前后端的数据交互。最后,在created方法中调用分页查询方法,确保每次页面加载完成后就进行分页数据的查询。

相关的代码如下:

使用表格展示分页数据

<template slot-scope> 或者<tempalte v-slot>插槽。通过scope.row获取当前行的数据。

使用分页条实现翻页效果

最后:删除套餐、新增套餐、启用禁用套餐。学会了套餐的分页查询,这几个功能的实现都是比较简单的了。不再赘述。