1.0.8 • Published 7 months ago

@sxliqi/editable-table v1.0.8

Weekly downloads
-
License
-
Repository
-
Last release
7 months ago

安装

npm install @sxliqi/editable-table

引入依赖文件

import { createApp } from "vue";
import App from "./App.vue";

import "@sxliqi/editable-table/dist/index.css";
import EditableTable from "@sxliqi/editable-table";

createApp(App).use(EditableTable).mount("#app");

在页面编辑组件

<template>
    <div style="margin: 20px;padding:20px;border:1px solid #dedede;">
        <EditableTable
            ref="editTable"
            :columns="columns"
            v-model:data-source="dataSource"
            row-first-key="name"
            show-search
            show-footer
            :rules="rules"
        >
            <template #toolBtn>
                <vxe-button @click="insert5">新增5行</vxe-button>
                <vxe-button @click="insertAt(3)">在第3行处插入</vxe-button>
                <vxe-button @click="getSelect">获取选中</vxe-button>
                <vxe-button @click="getRecordSet">获取表格变动数据</vxe-button>
                <vxe-button @click="getTableData">获取表格数据</vxe-button>
                <vxe-button @click="updateTable">更新表格数据</vxe-button>
                <vxe-button @click="validateAll">校验表格数据</vxe-button>
            </template>
            <template #age_edit="{ row, rowIndex }">
                <input
                    type="text"
                    class="test-input"
                    v-model="row.age"
                    @keyup="($event) => onKeyUp($event, 'address', row, rowIndex)"
                />
            </template>
        </EditableTable>
    </div>
    <div>
        <div>[</div>
        <div style="text-indent: 2em">
            <div v-for="item in dataSource" :key="item">{{ JSON.stringify(item) }}</div>
        </div>
        <div>]</div>
    </div>
</template>

<script>
    import { ref } from "vue";
    import dataCheck from "./utils/dataCheck";

    export default {
        name: "App",
        setup() {
            const columns = [
                {
                    key: "name",
                    title: "姓名",
                    nextKey: "sex",
                    edit: true,
                    columnProps: {
                        minWidth: 200
                    }
                },
                {
                    key: "sex",
                    title: "性别",
                    nextKey: "age",
                    edit: true
                },
                {
                    key: "age",
                    title: "年龄",
                    nextKey: "address",
                    edit: false,
                    sum: true,
                    slots: {
                        edit: false
                    },
                    editRender: {
                        autofocus: ".test-input",
                        autoselect: true
                    }
                },
                {
                    key: "address",
                    title: "地址",
                    nextKey: "role",
                    edit: true
                },
                {
                    key: "role",
                    title: "角色",
                    nextKey: "nextLine",
                    edit: true
                }
            ];
            const rules = {
                name: [dataCheck.required({})],
                sex: [dataCheck.required({})]
            };
            const dataSource = ref([
                { id: 10001, name: "Test1", role: "Develop", sex: "Man", age: 28, address: "test abc" },
                { id: 10002, name: "Test2", role: "Test", sex: "Women", age: 22, address: "Guangzhou" },
                { id: 10003, name: "Test3", role: "PM", sex: "Man", age: 32, address: "Shanghai" },
                { id: 10004, name: "Test4", role: "Designer", sex: "Women", age: 24, address: "Shanghai" }
            ]);

            const editTable = ref();

            const insert5 = () => {
                const { insert } = editTable.value.tableEvent;
                insert(-1, [{}, {}, {}, {}, {}]);
            };
            const insertAt = (rowIndex) => {
                const { insert, getTableData } = editTable.value.tableEvent;
                insert(getTableData().tableData[rowIndex - 1]);
            };
            const getSelect = () => {
                const { getSelect } = editTable.value.tableEvent;
                getSelect();
            };
            const getRecordSet = () => {
                const { getRecordSet } = editTable.value.tableEvent;
                getRecordSet();
            };
            const getTableData = () => {
                const { getTableData } = editTable.value.tableEvent;
                getTableData();
            };
            const updateTable = () => {
                const { update } = editTable.value.tableEvent;
                update();
            };
            const validateAll = () => {
                const { validateAll } = editTable.value.tableEvent;
                validateAll()
                    .then(() => {
                    })
                    .catch((errMap) => {
                        console.log(errMap);
                    });
            };
            const onKeyUp = (e, nextKey, row, rowIndex) => {
                const { onKeyupToNext } = editTable.value.inputEvent;
                onKeyupToNext(e, nextKey, row, rowIndex);
            };

            return {
                columns,
                rules,
                dataSource,

                editTable,

                insert5,
                insertAt,
                getSelect,
                getRecordSet,
                getTableData,
                updateTable,
                validateAll,
                onKeyUp
            };
        }
    };
</script>

<style scoped></style>

API

Props

参数说明类型默认值
columns表格列的配置描述,具体项见下方array-
rowFirstKey表格第一列显示在字段string-
dataSource数据数组object
rules表单验证规则,具体见下表object
showToolBar是否显示顶部工具栏booleanbooleantrue
maxHeight表格最大高度number500
rowHeight表格行高,建议>=50number50
showSearch是否显示内容搜索模块booleanfalse
showFooter是否显示底部内容。默认显示合计。booleanfalse
footerMethod表尾的数据获取方法,返回一个二维数组,当showFootertrue时生效。默认为计算合计的方法。({ columns, data }) => any[][]
addNewLineAtLast是否在最后一行,最后一列点击Enter时新增一行空数据booleantrue
virtualScroll是否启用虚拟滚动技术,加载数据较多时使用。建议仅在查看数据时使用。booleanfalse
inputChange当输入框内容更改时触发的事件event,参数({value, key, row, rowIndex)

Column

参数说明类型默认值
key列数据在数据项中对应的字段string-
title列数据在数据项中对应的标题string-
nextKey点击Enter,跳转列对应的字段值,当设置为nextLine时跳转到下一行或新增一行string
sumshowFootertrue时,footerMethod为默认方法,自动计算对应列的合计booleanfalse
edit对应列的单元格是否允许编辑booleanfalse
slots分别对应相应插槽 edit,content,default,当对应属性开启时,可以使用对应的插槽,插槽名对应相应的设置。如:key:'age',slots:{edit:true},相应的插槽名age_editstring{edit:false,content:false,default:false}
editRenderedit设置true时,editRender才可配置,具体见 vxe-columnobject{ }
columnPropsvxe-tablecolumn的配置,除了title,field,edit-render均可配置,具体见 vxe-columnobject{ }
batch对应列是否允许批量设置booleanfalse
batchType对应列批量设置的类型string无,可选值date,number
batchCallback对应列批量设置后的回调function,参数row

Rules

参数说明类型默认值
trigger校验触发的时机'blur' | 'change' | ['change', 'blur']-
enum枚举类型string-
len字段长度number-
max最大长度number-
message校验文案string-
min最小长度number-
pattern正则表达式校验RegExp-
required是否必选booleanfalse
transform校验前转换字段值function(value) => transformedValue:any-
type内建校验类型,可选项string'string'
validator自定义校验(注意,callback 必须被调用function(rule, value, callback)-
whitespace必选时,空格是否会被视为错误booleanfalse

更多高级用法可研究 async-validator ,用法同 ant-design-vue

Events

事件名称说明参数
tableEvent.insert插入数据。参数row代表 表格数据中的某一行,不填的话,在第一行新增;填-1在最后一行新增;填表格数据某一行,在对应行新增。参数length代表添加的行数。Function(row = -1, length = 1)
tableEvent.remove删除选中的行数据
tableEvent.update更新dataSource数据源(一般不使用)
tableEvent.reloadData重新加载表格数据Function(data)
tableEvent.getTableData获取表格的数据 { footerData:[],fullData:[],tableData:[],visibleData:[] }
tableEvent.getSelect获取表格的选中数据
tableEvent.getRecordSet获取表格变动数据 { insertRecords:[],removeRecords:[],updateRecords:[] }
tableEvent.setActiveCell设置表格激活的单元格。参数row代表表格数据中的某一行,参数key代表对应列的字段。Function(row,key)
tableEvent.validateAll根据规则rules校验表格全部内容,返回Promise对象
inputEvent.onKeyupToNext当内部编辑输入框点击Enter按键时,自动跳转到下一列,当在最后一列,自动新增一行空数据。参数nextKey为跳转对应的字段值,当设置为nextLine时跳转到下一行或新增一行;row表示当前行数据,通过插槽获取;rowIndex表示当前行对应 的行数,通过插槽获取。Function($event, nextKey, row, rowIndex)
inputEvent.onInputChange输入框编辑内容更改时的事件Function(e, key, row, rowIndex)
1.0.8

7 months ago

1.0.7

9 months ago

1.0.5

2 years ago

1.0.2

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago