最近新项目使用vue3+typescript开发后台管理系统,基本上展示内容一致表格的方式展示,所以使用vxe-table组件来开发,主要是为了方便使用工具栏,以及其他表格操作。
vxe-table
开发文档:https://vxetable.cn/#/table/start/install
全局安装
推荐使用 npm 的方式安装,它能更好地和 webpack、vite 等打包工具配合使用。
依赖库: xe-utils vue 3.2+(我用的是4.5.21版本,支持vue3,因此依赖库需要vue3.2+)
npm install vxe-table
import { App, createApp } from 'vue'
import VXETable from 'vxe-table'
import 'vxe-table/lib/style.css'
function useTable (app: App) {
app.use(VXETable)
}
createApp(App).use(useTable).mount('#app')
CDN
可以通过 unpkg 或 cdnjs 获取到最新版本的资源,并在页面上引入即可
(注:不建议将不受信任的CDN地址用于生产,因为该连接随时都可能会失效,导致项目挂掉,使用CDN方式记得锁定版本号,锁定版本的方法请查看 unpkg.com)
<!-- 引入样式 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vxe-table/lib/style.css">
<!-- 引入vue -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<!-- 引入组件 -->
<script src="https://cdn.jsdelivr.net/npm/xe-utils"></script>
<script src="https://cdn.jsdelivr.net/npm/vxe-table"></script>
注意:按需安装、快速入门、全局参数等,详见开发文档
query函数的使用
官方只展示了通过fetch来请求,所以想要扩展使用其他方法请求数据
vxe-table
是一个 Vue 的表格组件库,它提供了丰富的功能和自定义选项。query
函数是你为 vxe-table
组件定义的一个方法,用于构建和发送数据请求。这个函数的具体写法取决于你的应用需求和数据API的结构。
关于 query
函数的写法,并没有固定的模式或数量限制。你可以根据你的应用逻辑和数据API的要求来编写这个函数。以下是一些可能的 query
函数示例,它们展示了不同的处理逻辑和API调用方式:
示例 1: 基本的查询函数
query: ({ page, sorts, filters, form }) => {
const queryParams = {
...form,
page: page.currentPage,
size: page.pageSize,
...sorts.reduce((obj, sort, index) => ({
...obj,
[`sortField${index + 1}`]: sort.field,
[`sortOrder${index + 1}`]: sort.order
}),
...filters.reduce((obj, filter) => ({
...obj,
[filter.field]: filter.values.join(',')
}),
};
return fetch(`${serveApiUrl}/api/pub/page/list`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(queryParams)
}).then(response => response.json());
}
示例 2: 使用 axios 的查询函数
import axios from 'axios';
query: ({ page, sorts, filters, form }) => {
const queryParams = {
...form,
pageNum: page.currentPage,
pageSize: page.pageSize,
orderBy: sorts.map(sort => `${sort.field} ${sort.order}`).join(','),
...filters.reduce((obj, filter) => ({
...obj,
[filter.field]: filter.values.join(',')
}),
};
return axios.post(`${serveApiUrl}/api/pub/page/list`, queryParams)
.then(response => response.data);
}
示例 3: 复杂的查询逻辑
query: ({ page, sorts, filters, form }) => {
const queryParams = {
...form,
pageIndex: page.currentPage - 1, // 假设API从0开始计数
pageSize: page.pageSize,
};
// 处理排序条件,假设API接受排序字段和排序方向的数组
if (sorts.length > 0) {
queryParams.orderBy = sorts.map(sort => ({
field: sort.field,
order: sort.order
}));
}
// 处理筛选条件,假设API接受筛选字段和值的对象数组
if (filters.length > 0) {
queryParams.filter = filters.map(filter => ({
field: filter.field,
operator: 'IN', // 假设所有筛选条件使用IN运算符
value: filter.values
}));
}
return fetch(`${serveApiUrl}/api/pub/page/list`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(queryParams)
}).then(response => response.json());
}
每个示例都展示了不同的查询参数构建方式和API调用方法。你可以根据你的API要求和业务逻辑来编写自己的 query
函数。记住,最重要的是确保你的查询参数与API期望的格式相匹配,并且能够正确地获取和返回你所需的数据。