Vben admin创建表格

1.创建表格

创建ts文件

TypeScript 复制代码
// 引入必要的 VxeTable 类型
import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';

// 引入国际化功能
import { $t } from '#/locales';

/**
 * 定义表格查询表单的结构配置
 * 用于表格上方的查询条件表单
 */
export function useGridFormSchema(): VbenFormSchema[] {
  return [
    {
      component: 'Input', // 使用输入框组件
      fieldName: 'name', // 字段名
      label: $t('system.tabletest.name'), // 角色名称查询条件
    },
    {
      component: 'Input',
      fieldName: 'id', // ID查询条件
      label: $t('system.tabletest.id'),
    },
    {
      component: 'Select', // 使用下拉选择组件
      componentProps: {
        allowClear: true, // 允许清除选择
        options: [
          // 下拉选项
          { label: $t('common.enabled'), value: 1 }, // 启用
          { label: $t('common.disabled'), value: 0 }, // 禁用
        ],
      },
      fieldName: 'status', // 状态查询条件
      label: $t('system.role.status'),
    },
  ];
}

/**
 * 定义表格列的配置
 * @param onActionClick 操作列点击回调函数
 * @param onStatusChange 状态改变回调函数
 * @returns 表格列配置数组
 */
export function useColumns(): VxeTableGridOptions['columns'] {
  return [
    {
      field: 'id', // 字段名
      title: $t('system.tabletest.id'), // 列标题(ID)
      // width: 250, // 列宽度
      sortable: true, // 可排序
      showOverflow: true, // 超出显示省略号
      fixed: 'left', // 固定在左侧
    },
    {
      field: 'gsId', // 字段名
      title: $t('gsId'),
      // width: 200, // 列宽度
    },
    {
      field: 'code', // 字段名
      title: $t('system.tabletest.code'),
      // width: 200, // 列宽度
    },
    {
      field: 'name', // 字段名
      title: $t('system.tabletest.name'),
      // width: 200, // 列宽度
    },
    {
      field: 'status', // 字段名
      title: $t('system.role.status'), // 列标题(状态)
      // width: 100, // 列宽度
    },
    {
      align: 'center', // 居中对齐

      field: 'operation', // 字段名
      fixed: 'right', // 固定在右侧
      title: $t('system.role.operation'), // 列标题(操作)
      // width: 130, // 列宽度
    },
  ];
}

创建vue文件

html 复制代码
<script lang="ts" setup>
// 这是一个自定义的 TypeScript 类型通常用于表示一个可以接受任意字符串键的对象类型

// import type TypeScript 的类型导入语法仅导入类型信息,不导入实际的值编译后会被完全移除,不影响运行时
// OnActionClickParams表格操作事件参数类型   VxeTableGridOptions: 表格配置参数类型
// #/adapter/vxe-table 这是一个适配器文件,用于配置和封装 vxe-table 组件
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
// SystemRoleApi:系统角色相关的 API 类型定义
// 通常包含与系统角色管理相关的数据接口和类型
// 在你的项目中代表系统角色的数据结构类型
import type { TableTestApi } from '#/api';

// Page:一个页面布局组件 useVbenDrawer:一个自定义的 Vue Composition API Hook
import { Page } from '@vben/common-ui';

// 消息提示组件
// useVbenVxeGrid专门用于创建和管理 vxe-table 表格组件
import { useVbenVxeGrid } from '#/adapter/vxe-table';
// 导入国际化功能
// 导入相关的 API
import { getTableTestList } from '#/api';

// 导入表格列配置和表单配置
import { useColumns, useGridFormSchema } from './data';

// useVbenVxeGrid Hook 创建一个功能完整的数据表格组件。
// 返回两个值:Grid(表格组件)和 gridApi(控制表格的API)
const [Grid, gridApi] = useVbenVxeGrid({
  // 配置与表格关联的查询表单选项
  formOptions: {
    // 将 createTime 字段映射到表单中的 startTime 和 endTime 两个字段
    fieldMappingTime: [['createTime', ['startTime', 'endTime']]],
    // 使用 useGridFormSchema() 函数提供的表单结构定义查询表单包含哪些输入项(如输入框、下拉框等
    schema: useGridFormSchema(),
    // 表单内容改变时自动提交查询
    submitOnChange: true,
    // 配置表单一行显示四列
    wrapperClass: 'grid-cols-4',
  },
  // 表格本身的配置选项
  gridOptions: {
    // 使用 useColumns 函数定义表格列传入两个回调函数:onActionClick(操作列点击)和 onStatusChange(状态改变)
    columns: useColumns(),
    // 表格高度自适应
    height: 'auto',
    // 保留原生数据,即使刷新页面也不会丢失已编辑的数据
    keepSource: true,
    // 导出功能配置
    exportConfig: {},
    // 代理配置,用于处理数据请求
    proxyConfig: {
      // AJAX 请求配置
      ajax: {
        // page 包含分页信息,formValues 是表单查询条件
        query: async ({ page }, formValues) => {
          // 调用 getRoleList API 获取角色列表数据
          const result = await getTableTestList({
            page: page.currentPage,
            pageSize: page.pageSize,
            ...formValues,
          });
          return result;
        },
      },
    },
    // 行配置,指定每行数据的唯一标识字段为 id
    rowConfig: {
      keyField: 'id',
    },

    // 工具栏配置
    toolbarConfig: {
      custom: true, // 自定义列
      export: true, // 导出数据
      refresh: true, // 刷新数据
      search: true, // 搜索功能
      zoom: true, // 全屏缩放
      // print: true, //打印
    },
    // 使用类型断言指定配置的类型SystemRoleApi.SystemRole 是数据的类型定义
  } as VxeTableGridOptions<TableTestApi.TableTest>,
});
</script>

<template>
  <Page auto-content-height>
    <FormDrawer />
    <Grid table-title="测试表格">
      <template #toolbar-tools> </template>
    </Grid>
  </Page>
</template>

2.模拟数据

mock数据方式一

模拟数据二(简单)

TypeScript 复制代码
 proxyConfig: {
      ajax: {
        query: async ({ page }) => {
          // 模拟分页逻辑
          const pageSize = page.pageSize || 10;
          const currentPage = page.currentPage || 1;
          const data = mockData[] || [];

          // 模拟分页结果
          const start = (currentPage - 1) * pageSize;
          const end = start + pageSize;
          const paginatedData = data.slice(start, end);

          return {
            total: data.length,
            records: paginatedData,
          };
        },
}

模拟数据三

直接在gridOptions配置data: mockData

3.后端接口联调

前端设置了对应的返回结果集字段名,后端要保持一致否则数据在页面渲染不出来

4.前端三种响应方式

查询请求参数设置

上传下载请求参数设置

相关推荐
国服第二切图仔25 分钟前
DevUI Design中后台产品开源前端解决方案之Carousel 走马灯组件使用指南
前端·开源
无限大632 分钟前
为什么浏览器能看懂网页代码?——从HTML到渲染引擎的奇幻之旅
前端
福尔摩斯张34 分钟前
Linux信号捕捉特性详解:从基础到高级实践(超详细)
linux·运维·服务器·c语言·前端·驱动开发·microsoft
2401_8603195237 分钟前
DevUI组件库实战:从入门到企业级应用的深度探索 ,如何快速安装DevUI
前端·前端框架
计算机毕设VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue服装商城系统(源码+数据库+文档)
数据库·vue.js·spring boot·课程设计
cc蒲公英1 小时前
javascript有哪些内置对象
java·前端·javascript
zhangwenwu的前端小站1 小时前
vue 对接 Dify 官方 SSE 流式响应
前端·javascript·vue.js
王林不想说话1 小时前
受控/非受控组件分析
前端·react.js·typescript
_杨瀚博1 小时前
VUE中使用AXIOS包装API代理
前端
张有志1 小时前
基于 Body 滚动的虚拟滚动组件技术实现
前端·react.js