首页 > 其他分享 >表格封装

表格封装

时间:2023-01-10 10:47:34浏览次数:36  
标签:封装 表格 record default keys selectedRowKeys return type

<template>
<div v-if="showTable" :style="cssVars">
<a-table
:columns="rowColumns"
:customRow="onClickRow"
:data-source="tableData"
:loading="tableLoading"
:pagination="false"
:row-selection="isSelection ? rowSelection : null"
:rowClassName="rowClassName"
:rowKey="myRowKey"
:scroll="{ x: 500 }"
>
<!-- :scroll="{ x: true }"-->
<!-- :scroll="{ x: 500, y: 600 }"-->
<template v-for="slot in Object.keys($scopedSlots)" :slot="slot" slot-scope="text, record, index">
<slot :name="slot" v-bind="{text, record, index}"></slot>
</template>
</a-table>
</div>
</template>

<script>
export default {
name: "commonTable",
props: {
/*
* 表头数据信息
* 例:
* title: "校区名称",
* dataIndex: "campusName",
* key: "campusName",
* */
columns: {
type: Array,
default: function () {
return []
},
},
// 是否显示表格复选框
isSelection: {
type: Boolean,
default: false
},
//是否显示表格单选框
isRadio: {
type: Boolean,
default: false
},
// 表格数据内容
tableData: {
type: Array,
default: function () {
return []
},
},
//是否开启表格加载动画
tableLoading: {
type: Boolean,
default: false
},
//暂无数据的上下撑开的外边距
noDataMg: {
type: Number,
default: 140
},
//表格最小高度
tableMinHeight: {
type: [Number, String],
default: '558px'
},
//表格是否开启内容不换行切溢出悬浮显示
ellipsis: {
type: Boolean,
default: true
},
isChangeRowColor: {
type: Number,
default: 0
},
//是否斑马纹
zebraStripe: {
type: [Number, Boolean, String],
default: 0
},
myRowKey: {
type: String,
default: 'index'
}
},
computed: {
cssVars() {
return {
"--tableMinHeight": this.tableMinHeight,
"--noDataMg": `${this.noDataMg}px`,
}
},
rowSelection() {
return {
selectedRowKeys: this.selectedRowKeys,
onChange: (selectedRowKeys, selectedRows) => {
console.log(
`selectedRowKeys: ${selectedRowKeys}`,
"selectedRows: ",
selectedRows
);
this.changeSelect(selectedRows, selectedRowKeys)
},
type: this.isRadio ? 'radio' : 'checkbox',
onSelect: (record, selected, selectedRows) => {
console.log(record, selected, selectedRows);
},
onSelectAll: (selected, selectedRows, changeRows) => {
console.log(selected, selectedRows, changeRows);
},
};
},
},
data() {
return {
rowColumns: [],
showTable: false,
selectedRowKeys: []
}
},
watch: {
columns: {
handler(arr) {
this.rowColumns = this.columns.map(item => {
return {...item, ellipsis: this.ellipsis}
})
console.log(this.rowColumns)
this.showTable = true;
},
deep: true,
immediate: true
},
tableData: {
handler(arr) {
console.log(arr)
},
deep: true,
immediate: true
}
},
mounted() {

},
methods: {
binding() {

},
changeSelect(rows, keys) {

},
onClickRow(record) {

return {
on: {
click: () => {
if (this.isRadio) {
let keys = []
keys.push(record[this.myRowKey])
this.selectedRowKeys = keys
} else if (this.isSelection) {
let keys = this.selectedRowKeys
if(keys.length>0 && keys.includes(record[this.myRowKey])){
keys.splice(keys.indexOf(record[this.myRowKey]),1)
}else{
keys.push(record[this.myRowKey])
}
this.selectedRowKeys = keys
}

}
}
}
},
//修改表格奇数偶数行样式
rowClassName(record, index) {
if (this.zebraStripe) {
if (index % 2 === 0) {

return 'table-back-odd-default'
} else {

return 'table-back-even-default'
}
}

},
}
}
</script>

<style lang="less" scoped>
::v-deep {

.ant-table-tbody > tr > td {
padding: 0 16px !important;
height: 48px;
line-height: 47px;
}


.ant-table {
min-height: var(--tableMinHeight) !important;
}

.ant-empty-normal {
margin: var(--noDataMg) 0 !important;
}

}
</style>

标签:封装,表格,record,default,keys,selectedRowKeys,return,type
From: https://www.cnblogs.com/connie256/p/17039402.html

相关文章

  • VUE3 AXIOS 封装
    网上找了很多AXIOS的封装但是都不是很满意,后来参考其他人的实现做了改动后特分享出来http.ts文件封装importtype{AxiosRequestConfig,AxiosResponse}from'axios......
  • mybatis接口方法中可以接收各种各样的参数,mybatis底层对于这些参数进行不同的封装处理
    mybatis底层将传进来的参数封装成map集合,每个集合中会有对应的参数值argx,因此假如不使用注解,会出现下面的错误,提醒找不到该参数###Errorqueryingdatabase.Cause:org......
  • 关于MyBatis查询属性封装到对象,对象为null的情况源码分析
    源码分析在DefaultResultSetHandler类中getRowValue方法创建映射类相应的对象,如果为列匹配到的值标识foundValues是false,表示没有为对象中任何一个字段映射到一个值,则......
  • 安卓苹果APP在线封装打包制作过程-H5手机网站转APP网站工具-免签封装绿标
    Webapp打包就是在一台机器上打包一个文件包或者程序包。在服务器端,应用软件与服务器端程序是分开的。在前端,应用软件通过浏览器安装到移动设备上。因此,移动应用程序应该与网......
  • 【首页】文字封装开发
    一、【首页】文字封装开发1.1在components/common目录中创建了Card.vue组件文件1.2在pages/index/index.vue中引入Card组件1.3Card组件是卡片完成效果为复用的文字1......
  • 多项式半家桶,但是未封装
    多项式乘法逆题意:给定\(n-1\)次多项式\(F(x)\),求多项式\(G(x)\),使得\(F(x)G(x)\equiv1\pmod{x^n}\)思路:设:\[F(x)g(x)\equiv1\pmod{x^m}\\\\\F......
  • vue2 element-ui组件二封-表单组件-按钮封装
    这里是一段我们公司过往项目的代码(增删改查项目中的查询/重置按钮)<el-button@click="query()"type="primary"size="mini"><iclass="el-icon-search">查询</i><......
  • 表格集算表高性能原理——怎样实现纯前端百万行数据秒级响应
    集算表(TableSheet)是一个具备高性能渲染、数据绑定功能、公式计算能力的数据表格,通过全新构建的关系型数据管理器结合结构化公式,在高性能表格的基础上提供排序、筛选、样......
  • 封装,继承和多态
    1.封装:属性私有,get/set 记住快捷键alt+insert2,继承 extends继承是类和类之间的关系,除此之外,类和类之间的关系还有依赖,组合,聚合等继承关系的两个类,子类(派生类)---父......
  • 封装
    1.我们程序设计追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。2.封装(数据的隐藏)通常,应禁止直接......