💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# table表格 ### 概述 Cap4EasyTable是一个可拓展的且内置各种操作与配置接口的table组件。支持宽高设置,序列号,选择框, 列宽可拖动,列拖拽,冻结列,操作列固定,hover颜色及点击颜色设置,水平border及垂直border显示,行 点击,列点击,自排序,列排序,数据可筛选等功能。并且可以支持大数据量显示模式(循环轮播原理)。 ---- ### 组件调用方法 ```js import Cap4EasyTable from 'cap4-business/lib/cap4-easy-table/index.js'; import 'cap4-business/lib/cap4-easy-table/css/cap4-easy-table.css'; // 或者cli3脚手架直接引用源码(一般采用相对路径或工程内别名路径) import Cap4EasyTable from 'component_doc/packages/cap4-easy-table/index.js'; ``` ### 基础表格 <template> <cap4EasyTable key="demo1" :height=500 :tableData="tableData" :msg="msg" :columns="columns" :tableConfig="tableConfig" > </cap4EasyTable> </template> <script> export default { data(){ return { tableData: [], msg: '', columns: [], tableConfig: { localStorageKey: "localStorageKey_demo1", bigDataModel: false, columnWidthDrag: false, columnPositionMove: false, frozenOperationCol: false, hasDropDown: false, hasFrozenOeration: false, titleClickChoose: false } } }, mounted() { window.setTimeout(() => { this.tableData = []; for (let i = 0; i < 10; i++) { let num = i * 16; this.tableData.push( {isLock:true, name:'赵伟',tel: ++num+'-'+ '156*****1987', '01':{showValue:'路飞',src:'http://open.seeyon.com/seeyon/img/group5.png'}, date: {showValue: '2018-10-12',config:{backgroundColor:'green'}}, tel3: 12312.56123, hobby: function (h) { return h('div', { style: '' }, '123'); }, address:'上海市黄浦区金陵东路569号17楼'}, {name:'李伟',tel: ++num+'-'+ '182*****1538', date: {showValue: '2018-10-11',config:{backgroundColor:'green'}}, hobby:'钢琴、书法、唱歌',address:'上海市奉贤区南桥镇立新路12号2楼'}, {isLock:true, name:'孙伟',tel: ++num+'-'+ '161*****0097', date: {showValue: '2018-10-01',config:{backgroundColor:'red'}}, hobby:'钢琴、书法、唱歌',address:'上海市崇明县城桥镇八一路739号'}, {name:'周伟',tel: ++num+'-'+ '197*****1123',hobby:'钢琴、书法、唱歌',address:'上海市青浦区青浦镇章浜路24号'}, {name:'吴伟',tel: ++num+'-'+ '183*****6678',hobby:'钢琴、书法、唱歌',address:'上海市松江区乐都西路867-871号'}, ); } this.columns = []; for (let i = 0; i < 3; i++) { const str = i === 0 ? '' : i; this.columns.push( {field: 'name' + str, title: '123', isEdit: true, sortable: false, isFrozen: false, width:0, filterable: true }, {field: 'tel' + str, title: '手机号码', sortable: true, filterable: true, searchable: true}, {field: 'operation' + str, type: 'slot', title: '操作', width:100, }, {field: '01' + str, title: '123123121313122123', type: 'img', columnAlign:'center', compute: true}, ) } }, 0); } }; </script> <!-- ::: demo ```html <cap4-code iconIndex='1'> </cap4-code> ``` ::: --> ### 带选择框表格 支持单选或多选 <template> <cap4EasyTable key="demo2" :height=500 :tableData="tableData" :filterData="filterData" :msg="msg" :columns="columns" :tableConfig="tableConfig" @titleClick="titleClick" @rowClick="rowClick" @rowDblclick="rowDblclick" @onSubComponent="onSubComponent" @cellEditDone="cellEditDone" @selectAll="selectAll" @selectChange="selectChange" @getFilterData="getFilterData" @filterTableContent="filterTableContent" > <template slot-scope="slotProps"> {{Math.random()}} </template> </cap4EasyTable> </template> <script> export default { data(){ return { tableData: [], filterData: [], msg: '', columns: [], tableConfig: { localStorageKey: "localStorageKey", serialNumber: { show: true, textAlign: 'left' }, selection: { show: true, isMultiple: true }, lockable: true, frozenOperationCol: true, isVerticalResize: false, showVerticalBorder: true, defaultSort: true }, pageData: { maxPageSize: 999, page: 1, pageSize: 20, total: 700, noBoundary: true, col: { isNumber: true, average: 6, number: 6, total: 6 } }, // 示例用,显示触发事件 triggerFunctionArr: [] } }, mounted() { window.setTimeout(() => { this.tableData = []; for (let i = 0; i < 10; i++) { let num = i * 16; this.tableData.push( {isLock:true, name:'赵伟',tel: ++num+'-'+ '156*****1987', '01':{showValue:'路飞',src:'http://open.seeyon.com/seeyon/img/group5.png'}, date: {showValue: '2018-10-12',config:{backgroundColor:'green'}}, tel3: 12312.56123, hobby: function (h) { return h('div', { style: '' }, '123'); }, address:'上海市黄浦区金陵东路569号17楼'}, {name:'李伟',tel: ++num+'-'+ '182*****1538', date: {showValue: '2018-10-11',config:{backgroundColor:'green'}}, hobby:'钢琴、书法、唱歌',address:'上海市奉贤区南桥镇立新路12号2楼'}, {isLock:true, name:'孙伟',tel: ++num+'-'+ '161*****0097', date: {showValue: '2018-10-01',config:{backgroundColor:'red'}}, hobby:'钢琴、书法、唱歌',address:'上海市崇明县城桥镇八一路739号'}, {name:'周伟',tel: ++num+'-'+ '197*****1123',hobby:'钢琴、书法、唱歌',address:'上海市青浦区青浦镇章浜路24号'}, {name:'吴伟',tel: ++num+'-'+ '183*****6678',hobby:'钢琴、书法、唱歌',address:'上海市松江区乐都西路867-871号'}, ); } this.filterData = []; this.columns = []; for (let i = 0; i < 3; i++) { const str = i === 0 ? '' : i; this.columns.push( {field: 'name' + str, title: '123', isEdit: true, sortable: false, isFrozen: false, width:0, filterable: true }, {field: 'tel' + str, title: '手机号码', sortable: true, filterable: true, searchable: true}, {field: 'operation' + str, type: 'slot', title: '操作', width:100, }, {field: '01' + str, title: '123123121313122123', type: 'img', columnAlign:'center', compute: true}, ) } }, 0); }, methods: { // 列点击 titleClick(params) { this.setTriggerFunction('列点击'); }, // 行点击 rowClick(params) { this.setTriggerFunction('行点击'); }, // 行双击 rowDblclick(params) { this.setTriggerFunction('行双击'); }, // 子组件回调 onSubComponent(params) { this.setTriggerFunction('子组件'); }, // 单元格编辑回调 cellEditDone(params) { this.setTriggerFunction('单元格'); }, // 全选 selectAll(params) { this.setTriggerFunction('全选'); }, // 选择 selectChange(params) { this.setTriggerFunction('选择'); }, // 排序 sortChange(params) { this.setTriggerFunction('排序'); }, // render renderSlot(slotProps) { const colData = slotProps.data.data.colData; const rowData = slotProps.data.data.rowData; let type = colData.type; return '<div>123</div>' }, // 获取筛选数据 getFilterData(params) { this.setTriggerFunction('筛选值'); }, // 筛选 filterTableContent(params) { this.setTriggerFunction('筛选'); }, // 设置triggerFunction setTriggerFunction(str) { const key = Math.random() + str; this.triggerFunctionArr.push({ key, name: str, }); if (this.triggerFunctionArr.length > 5) { setTimeout(() => { this.triggerFunctionArr.shift(); }); } setTimeout(() => { let index = this.triggerFunctionArr.findIndex(item => item.key === key); if (index > -1) { this.triggerFunctionArr.splice(index, 1); } }, 10000); }, }, computed: { }, }; </script> ### Attributes | 参数 | 说明 | 类型 | 可选值 | 默认值 | |--------------------|--------------------------------|----------|--------------|---------| |tableData |(必选)列表数据 |Array |— |[] | |columns |(必选)列信息 |Array |— |[] | |filterData |(可选)筛选信息 |Array |— |[] | |width |(可选)宽度 |Number |— |— | |height |(可选)高度 |Number |— |— | |tableConfig |(可选)配置项,详细说明见下方 |Object |— |{} | |showLoading |(可选)是否展示加载态 |Boolean |— |true | |minWidth |(可选)最小列宽度 |Boolean |— |63 | |titleRowHeight |(可选)行高 |Function |— |40 | |isPrint |(可选)是否打印态 |Boolean |— |false | |printStorageInfo |(可选)打印态需要传递浏览器缓存信息 |Object |— |{} | |page |(可选)第几页 |Number |— |1 | |pageSize |(可选)每页的条数 |Number |— |50 | ### tableConfig table配置项,用object传递减少直接传入参数 | 配置项 | 说明 | 类型 | 可选值 | 示例值 | |-----------------------|-------------------|-----------|------------|---------| |serialNumber |显示序号 |Object |— |{show: true, textAlign: 'left'} (显示序列号,且居左显示) | |selection |显示选择框 |Object |— |{show: true,isMultiple: true} (显示选择框,且支持多选) | |lockable |显示锁定列 |Boolean |true/false |true | |isHorizontalResize |水平自适应 |Boolean |true/false |true | |isVerticalResize |垂直自适应 |Boolean |true/false |true | |columnWidthDrag |列宽可拖动 |Boolean |true/false |true | |columnPositionMove |列位置可拖拽 |Boolean |true/false |true | |frozenOperationCol |右侧固定操作列 |Boolean |true/false |true | |localStorageKey |localStorage缓存key |String |— |'localStorageKey' (使用唯一值) | |rowHoverColor |行hover颜色 |Boolean |— |'#F5F5F5' | |titleBgColor |列头背景色 |Boolean |— |true | |operationBgColor |固定操作列背景色 |Boolean |— |true | |titleHoverColor |列头hover颜色 |Boolean |— |true | |rowClickColor |行点击选中色 |Boolean |— |true | |showHorizontalBorder |显示水平border |Boolean |true/false |true | |showVerticalBorder |显示垂直border |Boolean |true/false |true | |defaultSort |自排序 |Boolean |true/false |true | |titleRowHeight |行高 |Boolean |— |true | |bigDataModel |大数据量模式 |Boolean |true/false |true | |hasDropDown |显示下拉框 |Boolean |true/false |true | |titleClickSort |列头点击排序 |Boolean |true/false |true | |titleClickChoose |列点击可选中 |Boolean |true/false |true | |rowClickUncheck |行重复点击取消选中 |Boolean |true/false |true | ### col配置项属性 | 配置项 | 说明 | 类型 | 可选值 | 示例值 | |-----------------------|-------------------|-----------|------------|---------| |filterable |可筛选 |Boolean |true/false |true | |searchable |筛选可搜索 |Boolean |true/false |true | |sortable |可排序 |Boolean |true/false |true | |isFrozen |被冻结 |Boolean |true/false |true | |width |初始列宽度 |Number |- |100 | |field |key |String |- |'field01' | |type |类型 |String |'render'/'slot'/'normalText'/'normalObjText'(.v)/'normalObjectText(.value)'|'normalText' | |componentName |以组件加载 |String |- |- | ### Event | 事件名称 | 说明 | 回调参数 | |----------------------|------------------|-----------| |titleClick |列点击触发 |列信息 | |titleUnClick |列重复点击触发 |— | |rowClick |行点击触发 |行信息 | |onSubComponent |子组件触发 |— | |cellEditDone |td编辑触发 |— | |selectAll |全选时触发 |— | |selectChange |选择项改变触发 |— | |sortChange |列排序触发 |— | |getFilterData |列筛选获取数据触发 |— | |filterTableContent |列筛选触发 |— | <!-- ### Slot | 名称 | 说明 | |------------- |----------- | | | | --> <!-- ### Function | 名称 | 说明 | |------------- |----------- | | | | -->