赞
踩
项目地址:https://github.com/jekip/naive-ui-admin
通过阅读源码,整理了基于Navie UI封装的较为完善的BasicTable组件的使用指南。
BasicTable的示例网址:https://v1.naiveadmin.com/#/list/basic-list
官网使用教程:https://docs.naiveadmin.com/components/table.html#basictable
BasicTable集成了很多功能,如下:
column
的edit
属性使该列渲染为可编辑组件,同时支持整行编辑。本节会帮你快速了解BasicTable的使用
创建一个vue文件,使用BasicTable
<template> <n-card :bordered="false" class="proCard"> <BasicTable :columns="columns" :request="loadDataTable" :row-key="(row) => row.id" :scroll-x="1000" @update:checked-row-keys="onCheckedRow" /> </n-card> </template> <script> import { defineComponent, reactive } from 'vue'; import { BasicTable } from '@/components/Table'; import { getPageList } from '@/api/system/role'; export const columns = [ { title: 'id', key: 'id', }, { title: '角色名称', key: 'roleName', }, { title: '角色编码', key: 'roleCode', }, { title: '创建时间', key: 'createTime', }, ]; export default defineComponent({ components: { BasicTable }, setup() { const params = reactive({ roleName: '', }); // 数据请求 const loadDataTable = async (res) => { return await getPageList({...res }, params); }; function onCheckedRow(rowKeys) { console.log(rowKeys); } return { columns, loadDataTable, onCheckedRow, }; }, }); </script> <style lang="less" scoped></style>
BasicTable基于NDataTable封装,其属性见:NDataTable.props
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
NDataTable.props | - | - | 原 UI 组件的 props |
title | string | null | 表格标题 |
titleTooltip | string | null | 表格标题的弹出提示 |
size | 'small'|'medium'|'large' | medium | 表格尺寸 |
dataSource | Array<object> | [] | 表格数据 |
columns | Array<object> | [] | 表格列信息 |
beforeRequest | (page: number, pageSize: number) => Promise<any> | undefined | 请求发起前数据处理 |
request | (page: number, pageSize: number) => Promise<any> | undefined | 发起请求 |
beforeRequest | (page: number, pageSize: number) => Promise<any> | undefined | 请求发起后数据处理 |
rowKey | string|(record) => string | undefined | 行的每一列key |
pagination | object|boolean | () => {} | 分页信息 |
actionColumn | object | null | Action列,对表格行的操作 |
canResize | boolean | true | 是否允许调整尺寸 |
resizeHeightOffset | number | 0 | 重置高度 |
方法的使用示例:@update:checked-row-keys="onCheckedRow"
名称 | 类型 | 说明 |
---|---|---|
fetch-success | (items: array, resultTotal: number) => void | 数据获取成功时触发函数 |
fetch-error | (error: string|object) | 数据获取失败时触发函数 |
update:checked-row-keys | (rowKeys) => void | 行选中事件 |
edit-end | (record, index, key, value) => void | 可修改单元格的数据提交事件触发函数 |
edit-cancel | (record, index, key, value) => void | 可修改单元格的取消编辑事件触发函数 |
edit-row-end | () => void | 该行每个可编辑单元格提交成功事件触发函数 |
edit-change | (colum: Array<object>, value: object, record) => void | 可修改单元格的编辑状态改变事件触发函数 |
名称 | 参数 | 说明 |
---|---|---|
tableTitle | () | 表格上方左区域的展示 |
toolbar | () | 表格上方右区域的展示 |
BasicTable的props中的columns,其可选性如下表:
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
edit | boolean | false | 该列是否可编辑 |
editRow | boolean | false | 只允许整行编辑操作,不能单独进入 |
editable | boolean | false | 以编辑模式显示,即不需点击进入 |
editComponent | NInput|NInputNumber|NSelect|NCheckbox|NSwitch|NDataPicker|NTimePicker | NInput | 可编辑时,编辑组件类型 |
editComponentProps | Recordable | undefined | 编辑组件的属性,例如编辑组件为下拉菜单时,需要提供的options |
editRule | boolean(text: string, record: Recordable) => Promise<string> | false | 校验规则 |
editValueMap | (value: any) => string | 自定义的value处理方法 | |
onEditRow | () => void | undefined | 编辑行 |
auth | Array<sting> | [] | 权限编码控制是否显示 |
ifShow | boolean|(column: BasicColumn) => boolean | true | 业务控制是否显示 |
draggable | boolean | true | 控制是否支持拖拽,默认支持 |
案例:
import { h } from 'vue'; export const columns = [ { title: 'id', key: 'id', width: 100, }, { title: '名称', key: 'name', editComponent: 'NInput', // 默认必填校验 edit:true, editRule: true, editRow: true, width: 200, editable: true, }, { title: '地址', key: 'address', editComponent: 'NSelect', editComponentProps: { options: [ { label: '广东省', value: 1, }, { label: '浙江省', value: 2, }, ], }, edit: true, width: 200, ellipsis: false, }, { title: '开始日期', key: 'beginTime', edit: true, width: 160, editComponent: 'NDatePicker', editComponentProps: { type: 'datetime', format: 'yyyy-MM-dd HH:mm:ss', valueFormat: 'yyyy-MM-dd HH:mm:ss', }, ellipsis: false, }, { title: '结束日期', key: 'endTime', width: 160, }, ];
export default { table: { apiSetting: { // 当前页的字段名 pageField: 'page', // 每页数量字段名 sizeField: 'pageSize', // 接口返回的数据字段名 listField: 'records', // 接口返回总页数字段名 totalField: 'pages', }, //默认分页数量 defaultPageSize: 10, //可切换每页数量集合 pageSizes: [10, 20, 30, 40, 50], }, upload: { //考虑接口规范不同 apiSetting: { // 集合字段名 infoField: 'data', // 图片地址字段名 imgField: 'photo', }, //最大上传图片大小 maxSize: 2, //图片上传类型 fileType: [ 'image/png', 'image/jpg', 'image/jpeg', 'image/gif', 'image/svg+xml', ], }, };
组件的实现可以参考:AdminPro JS版搭建流程 | 组件使用 | BasicTable
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。