【精选】[零基础][完结]vue后台管理系统开发流程全记录(五)_类别管理功能开发: 表单 | 表格 | 分页

文章目录

    • [一 分类列表数据接口制作与调用](#一 分类列表数据接口制作与调用 "#__6")
      • [1.1 接口制作](#1.1 接口制作 "#11__8")
      • [1.2 接口调用](#1.2 接口调用 "#12__36")
        • [1.2.1 封装接口](#1.2.1 封装接口 "#121__38")
        • [1.2.2 调用接口](#1.2.2 调用接口 "#122__53")
        • [1.2.3 数据使用](#1.2.3 数据使用 "#123__78")
    • [二 页面绘制](#二 页面绘制 "#__136")
      • [2.1 基础页面绘制](#2.1 基础页面绘制 "#21__138")
        • [2.1.1 表格绘制](#2.1.1 表格绘制 "#211__177")
        • [2.2.2 状态码绘制](#2.2.2 状态码绘制 "#222__221")
      • [2.2 添加分页查询](#2.2 添加分页查询 "#22__263")
      • [2.3 添加条件查询](#2.3 添加条件查询 "#23__306")

类别管理功能页用于对文章分类项进行列表化展示和管理。

先对开发成果做个预览。

一 分类列表数据接口制作与调用

1.1 接口制作

首先确定接口信息。

url: /article/category/search

method:post

描述:文章类别分页条件查询列表

json 复制代码
{
  "code": 20000,
  "message": "查询成功",
  "data": {
  	"total": "@integer(100, 200)",
  	"records|20": [{
  		"id|+1":10,
  		"name":"@cname",
  		"sort": "@integer(0,9)",
  		"remark": "@csentence(5, 15)",
  		"status|1":[0,1],
  		"createDate": "@date"
  	}]
  }
}

1.2 接口调用

1.2.1 封装接口
js 复制代码
import request from '@/utils/request'

export default {
    getList() {
        return request({
            url: '/article/category/search',
            method: 'post',
        })
    }
}
1.2.2 调用接口
js 复制代码
import api from '@/api/category.js'

export default {
	...
    created(){
        this.fetchData();
    },
    methods: {
        fetchData(){
            api.getList().then(response => {          
                console.log(response)             
            })
        }
    }
    ...
}

接口顺利使用。

1.2.3 数据使用

我们设计适合页面使用的数据格式,将接口数据处理后放置到data中。

数据有数据类表,页码相关,和查询条件,作为调用接口的参数和放置数据的位置。

注意,在此处添加参数后,在/api/category.js接口封装文件中也需要定义参数。

js 复制代码
import api from '@/api/category.js'

export default {
	...
	data() {    
        return {      
            list: [],      
            page: { // 分页相关          
                total: 0, // 总记录数          
                current: 1, // 当前页码          
                size: 20, // 每页显示20条数据,      
            },      
            query: {} // 查询条件    
        }  
    },
    created(){
        this.fetchData();
    },
    methods: {
        fetchData(){
            api.getList((this.query, this.page.current, this.page.size).then(response => 			{          
                console.log(response); 
                this.list = response.data.records;
                this.page.total = response.data.total;            
            }))
        }
    }
    ...
}
js 复制代码
import request from '@/utils/request'

export default {
    getList(query, current = 1, size = 20) {
        return request({
            url: '/article/category/search',
            method: 'post',
            data: {
                ...query,
                current,
                size
            }
        })
    }
}

二 页面绘制

2.1 基础页面绘制

这里首先绘制一个展示列表,使用element-table绘制。

参考链接: element.eleme.cn/#/zh-CN/com...

实例代码如下,其中border属性为添加竖边框,data为绑定list数据,list为一个子项为对象的数组,在子标签中prop属性对应的是该对象中的属性名。

html 复制代码
  <el-table
    :data="tableData"
    border
    style="width: 100%">
    <el-table-column
      prop="date"
      label="日期"
      width="180">
    </el-table-column>
    <el-table-column
      prop="address"
      label="地址">
      width="180">
    </el-table-column>
  </el-table>
json 复制代码
tableData:[
	{
		data: 123,
		address: 678
	},
	{
		data: 234,
		address: 789
	},
]
2.1.1 表格绘制

刚刚我们已经有了一个类似的数组list,现绘制表格,将list绑定到表格上即可。

html 复制代码
        <el-table
            :data="list"
            border
            style="width: 100%">
            <el-table-column
                align="center"
                type="index"
                label="序号"
                width="60">
            </el-table-column>
            <el-table-column
                align="center"
                prop="name"
                label="分类名称"
            >
            </el-table-column>
            <el-table-column
                align="center"
                prop="sort"
                label="排序"
            >
            </el-table-column>
            <el-table-column
                align="center"
                prop="remark"
                label="备注"
            >
            </el-table-column>
            <el-table-column
                align="center"
                prop="status"
                label="状态"
                width="160">
            </el-table-column>
        </el-table>
2.2.2 状态码绘制

注意此时在页面表格中,状态列显示的是数字,我们希望它转化为用户可识别的样式。

基本思路是使用element-tag实现。

不同状态间,标志颜色类型(type),文字不同。

这里我们定义一个过滤器,可将标志位转化为对应的颜色类型输出。

js 复制代码
    filters: {
        statusFilter(status) {
            const statusMap = {0: 'danger', 1: 'success'}      
            // status等于0返回danger, 1返回success      
            return statusMap[status]
        }
    }

在页面表格中修改状态列。

html 复制代码
            <el-table-column
                align="center"
                prop="status"
                label="状态"
                width="160">
                <template slot-scope="scope">
                    <el-tag :type="scope.row.status | statusFilter">
                        {{scope.row.status ? '正常':'禁用' }}
                    </el-tag>
                </template>
            </el-table-column>

上面代码中,slot-scope="scope"是固定用法,可以通过scope.row访问该行数据。

2.2 添加分页查询

参考地址: element.eleme.cn/#/zh-CN/com...

参照element文档中对分页组件的描述,将分页组件添加到页面表格下方,注意将我们已有的数据对应的添加到配置属性上。

html 复制代码
<template>
		<el-table>
			... ... 
		</el-table>
		<el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="page.current"
            :page-sizes="[10, 20, 50]"
            :page-size="page.size"
            layout="total, sizes, prev, pager, next, jumper"
            :total="page.total">
        </el-pagination>
</template>

下面我们添加两个方法handleSizeChange和handleCurrentChange。

js 复制代码
    methods: {
        ... ...
        handleSizeChange(val){
            this.page.size = val;
            this.fetchData();
        },
        handleCurrentChange(val){
            this.page.current = val;
            this.fetchData();
        }
    }

在换页和更改每页容量时,可以看到表格是刷新了的,但是由于目前模拟后端没有对传过去的参数进行处理,总条数没变,从控制台中可以查看请求头,请求参数已改变。

2.3 添加条件查询

参考链接: element.eleme.cn/#/zh-CN/com...

参考链接: element.eleme.cn/#/zh-CN/com...

首先分析一下功能,条件查询功能由一个输入框,一个下拉框和三个按钮组成,可以使用elelment-form制作。

elelment-form中选用与需求最为接近的行内表单。

将官方文档代码复制到el-table标签上方,更改对应属性。

html 复制代码
<template>
		<el-form :inline="true" :model="query" class="demo-form-inline" size="mini">
            <el-form-item label="分类名称">
                <el-input v-model="query.name"></el-input>
            </el-form-item>
            <el-form-item label="状态">
                <el-select v-model="query.status" clearable filterable style="width: 85px">
                    <el-option v-for="item in statusOptions" :key="item.code" :label="item.name" :value="item.code"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item>
                <el-button icon='el-icon-search' type="primary" @click="queryData">查询</el-button>    
                <el-button icon='el-icon-refresh' @click="reload">重置</el-button>    
                <el-button type="primary" icon="el-icon-circle-plus-outline" >新增</el-button>
            </el-form-item>
        </el-form>
    
    	<el-table>
			... ... 
		</el-table>
    	... ...
</template>

注意,在上面代码中我们用到了一个变量statusOptions,这个变量是下拉框的内容,是数组,子项为属性为name和code对象的形式。

js 复制代码
const statusOptions = [    
    {code: 0, name: '禁用'},    
    {code: 1, name: '正常'}
]
js 复制代码
    data() {    
        return {      
            list: [],      
            page: { // 分页相关          
                total: 0, // 总记录数          
                current: 1, // 当前页码          
                size: 20, // 每页显示20条数据,      
            },      
            query: {}, // 查询条件
            statusOptions     
        }  
    },

下面我们为按钮书写方法,上述代码的查询和重置按钮对应queryData & reload,查询方法中,由于表单内容已经使用v-model与data数据绑定,这里无需多做处理,直接刷新列表即可。

js 复制代码
queryData() {      
	// 将页码变为第1页      
	this.page.current = 1;      
	this.fetchData();    
}

重置按钮为将表单数据query置为初始值,也就是空,然后刷新列表。

js 复制代码
 reload() {      
 	this.query = {};      
 	this.fetchData();    
 }

这样,基础页面绘制完成了,到现在,我们做的是展示的工作,在下一章节,我们讲对分类进行增加,删除和修改功能。

相关推荐
嚣张农民1 小时前
推荐3个实用的760°全景框架
前端·vue.js·程序员
落魄小二2 小时前
el-table 表格索引不展示问题
javascript·vue.js·elementui
neter.asia2 小时前
vue中如何关闭eslint检测?
前端·javascript·vue.js
十一吖i2 小时前
前端将后端返回的文件下载到本地
vue.js·elementplus
光影少年2 小时前
vue2与vue3的全局通信插件,如何实现自定义的插件
前端·javascript·vue.js
熊的猫3 小时前
JS 中的类型 & 类型判断 & 类型转换
前端·javascript·vue.js·chrome·react.js·前端框架·node.js
mosen8684 小时前
Uniapp去除顶部导航栏-小程序、H5、APP适用
vue.js·微信小程序·小程序·uni-app·uniapp
别拿曾经看以后~5 小时前
【el-form】记一例好用的el-input输入框回车调接口和el-button按钮防重点击
javascript·vue.js·elementui
Gavin_9156 小时前
【JavaScript】模块化开发
前端·javascript·vue.js
Devil枫11 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试