AI 摘要

本文在 Spring Boot + Vue.js 的 EAM 系统中,完成资产列表前端搜索与分页:改造 List.vue,加入 el-form 搜索框与 el-pagination 分页组件;用 axios 按 name、pageNo 请求后端;Mock.js 实现模糊查询及 5 条/页的分页逻辑,并返回总记录与总页数,实现前后端联调效果。

开发笔记

修改资产列表视图页面组件(src/views/List.vue),编写资产搜索的表单组件。

<el-form :inline="true">
    <el-form-item label="资产名称">
        <el-input v-model="searchName" placeholder="请输入资产名称"></el-input>
    </el-form-item>
    <el-form-item>
        <el-button type="primary" @click="getList">查询</el-button>
    </el-form-item>
</el-form>

修改资产列表视图页面组件(src/views/List.vue),编写获取资产列表的方法。

data() {
    return {
        // ...
        searchName: ''
    }
},
methods: {
    // 定义获取资产列表的方法
    getList() {
        axios.get('/api/zichan/getList?name=' + this.searchName)
        // ...
    },
    // ...
}

修改 Mock.js 配置文件(src/mock/index.js),编写获取资产列表的接口。

// 获取资产列表
Mock.mock(new RegExp('/api/zichan/getList'), 'get', function (options) {
    let params = parseUrlParams(options.url)

    // 模糊查询,过滤出模糊查询后的资产列表
    let filterDatabase = []
    if(params.name) {
        // 使用filter过滤不满足条件的方法
        filterDatabase = zichanDatabase.filter(item => item.name.indexOf(params.name) !== -1)
    } else {
        // 无查询条件时返回全部数据
        filterDatabase = zichanDatabase
    }

    return {
        code: 200,
        message: 'success',
        data: filterDatabase
    }
})

运行项目,查看效果。

修改 Mock.js 配置文件(src/mock/index.js),编写获取资产列表的接口。

// 获取资产列表
Mock.mock(new RegExp('/api/zichan/getList'), 'get', function (options) {
    // ...

    // 分页
    let pageNo = params.pageNo // 获取页码
    let pageSize = 5    // 设置页大小
    // 使用数组的slice函数截取数组,得到分页后的资产数据列表
    // 参数1:数据起始下标,(页码-1)*页大小
    // 参数2:数据结束下标,页码*页大小
    let pageDatabase = filterDatabase.slice((pageNo - 1) * pageSize, pageNo * pageSize)

    return {
        code: 200,
        message: 'success',
        data: {
            list: pageDatabase,   // 分页数据列表
        pageNo: pageNo, // 页码
            pageSize: pageSize, // 页大小
            total: zichanDatabase.length,   // 数据总数
            pages: Math.ceil(zichanDatabase.length / pageSize)  // 页码总数,向上取整
        }
    }
})

修改资产列表视图页面组件(src/views/List.vue),编写获取资产列表的方法。

data() {
    return {
        // ...
        searchName: '',
        pager: {
            pageNo: 1,   // 页码
        pageSize: 5,    // 页大小
            total: 0,    // 数据总数
            pages: 0    // 页码总数
        }
    }
},
methods: {
    // 定义获取资产列表的方法
    getList() {
        axios.get('/api/zichan/getList?name=' + this.searchName + '&pageNo=' + this.pager.pageNo)
            .then(ret => {
                // 保存分页信息
                this.zichanList = ret.data.data.list
        this.pager.pageSize = ret.data.data.pageSize
                this.pager.total = ret.data.data.total
                this.pager.pages = ret.data.data.pages
            })
            .catch(error => {
                this.$message.error('请求失败')
            })
    },
    // ...
}

修改资产列表视图页面组件(src/views/List.vue),编写资产列表的分页组件。

<!-- ... -->
<!--
    page-size:页大小
    total:数据总数
    page-count:页码总数
    current-page:当前页码
    sync:修饰符,用于同步页码的变化
    current-change:页码改变时触发事件
-->
<el-pagination background layout="prev, pager, next"
   :page-size="pager.pageSize"
   :total="pager.total"
   :page-count="pager.pages"
   :current-page.sync="pager.pageNo"
   @current-change="getList">
</el-pagination>

运行项目,查看效果。