// 二次封裝table組件
<template>
<div class="lby_table">
<el-table
:data="dataSource"
:border="border"
v-loading="tableLoading"
@selection-change="handleSelectionChange"
>
<el-table-column
v-if="isSelection"
type="selection"
width="55"
/>
<template v-for="column in columns">
<el-table-column
v-if="column.slot"
:key="column.prop"
:label="column.label"
:prop="column.prop"
:min-width="column.width"
:width="column.width"
>
<template slot-scope="scope">
<slot
:name="column.slot"
:row="scope.row"
:column="column"
></slot>
</template>
</el-table-column>
<el-table-column
v-else
:key="column.prop"
:label="column.label"
:prop="column.prop"
:min-width="column.width"
:width="column.width"
:class-name="column.className"
>
</el-table-column>
</template>
</el-table>
<el-pagination
v-if="pagination"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pagination.pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="pagination.pageSize"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
></el-pagination>
</div>
</template>
export default {
name: "CustomTable",
props: {
columns: {
type: Array,
required: true,
default: () => [],
},
dataSource: {
type: Array,
required: true,
default: () => [],
},
pagination: {
type: Object,
default: () => {
return {
pageIndex: 1,
pageSize: 10
};
},
},
total: {
type: Number,
default: 0
},
border: {
type: Boolean,
default: false
},
tableLoading: {
type: Boolean,
default: false
},
isSelection: {
type: Boolean,
default: false
}
},
methods: {
handleSizeChange (pageSize) {
this.$emit("onSizeChange", pageSize);
},
handleCurrentChange (pageIndex) {
this.$emit("onCurrentChange", pageIndex);
},
// 復(fù)選框選中
handleSelectionChange (selection) {
this.$emit('onSelection', selection)
}
},
};
<style lang="scss" scoped>
.lby_table {
width: 100%;
border-radius: 4px;
background: #ffffff;
height: 0;
flex: 1;
display: flex;
flex-direction: column;
::v-deep .el-table {
height: calc(100% - 52px);
.el-table__body-wrapper {
height: calc(100% - 44px);
overflow-y: auto;
}
thead {
height: 40px;
border-radius: 4px;
font-weight: 400;
color: rgba(28, 31, 35, 0.6);
tr {
th {
border-bottom: 0;
font-size: 14px;
color: rgba(28, 31, 35, 0.6);
font-weight: 400;
background: #ffffff;
}
}
}
tbody {
th {
border-bottom: 0;
font-size: 14px;
color: rgba(28, 31, 35, 0.8);
font-weight: 400;
}
.el-table__cell {
border-bottom: 0;
}
.abnormal {
color: rgba(227, 79, 72, 1);
}
}
.cell {
line-height: 24px;
padding-left: 16px;
}
}
::v-deep .el-pagination {
padding: 12px 32px;
text-align: right;
box-shadow: 0px 4px 14px 0px rgba(0, 0, 0, 0.1);
}
}
</style>
// 調(diào)用
<template>
<CustomTable
:total='total'
:columns='columns'
:pagination='page'
:isSelection='true'
:dataSource='dataSource'
:tableLoading="tableLoading"
@onSelection='handleSelection'
@onSizeChange='handleSizeChange'
@onCurrentChange='handleCurrentChange'
>
<template v-slot:userCount="{ row }">
<div>{{row.userCount}}人</div>
</template>
<template v-slot:status="{ row }">
<dict-tag
:options="options"
:value="row.status"
/>
</template>
<template v-slot:operate="{ row }">
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="handleView(row)"
>查看</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(row)"
>編輯</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(row)"
>刪除</el-button>
</template>
</CustomTable>
</template>
import { columns } from './config.js'
export default {
// ........
data () {
// 表頭
columns,
total: 0,
page: {
pageIndex: 1,
pageSize: 10,
}
dataSource: [],
tableLoading: true,
},
},
mothods: {
handleSizeChange (pageSize) {
this.page.pageSize = pageSize
// 請求列表
this.xxx()
},
handleCurrentChange (pageIndex) {
this.page.pageIndex = pageIndex
// 請求列表
this.xxx()
},
// 省略............................
}
}
// config.js 配置文件
export const columns = [
{
prop: 'userName',
label: '用戶名稱',
},
{
prop: 'userCount',
label: '人員數(shù)量',
slot: 'userCount',
},
{
prop: 'status',
label: '狀態(tài)',
slot: 'status',
},
{
prop: 'createTime',
label: '創(chuàng)建時(shí)間'
},
{
prop: 'operate',
label: '操作',
slot: 'operate'
}
]
基于element-ui table組件二次封裝
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門厚棵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔼紧,你說我怎么就攤上這事窟感。” “怎么了歉井?”我有些...
- 文/不壞的土叔 我叫張陵柿祈,是天一觀的道長。 經(jīng)常有香客問我,道長躏嚎,這世上最難降的妖魔是什么蜜自? 我笑而不...
- 正文 為了忘掉前任,我火速辦了婚禮卢佣,結(jié)果婚禮上重荠,老公的妹妹穿的比我還像新娘。我一直安慰自己虚茶,他們只是感情好戈鲁,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嘹叫,像睡著了一般婆殿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罩扇,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捞高!你這毒婦竟也來了被啼?” 一聲冷哼從身側(cè)響起,我...
- 序言:老撾萬榮一對情侶失蹤棠枉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后泡挺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辈讶,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年娄猫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贱除。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響录语,放射性物質(zhì)發(fā)生泄漏倍啥。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一澎埠、第九天 我趴在偏房一處隱蔽的房頂上張望虽缕。 院中可真熱鬧,春花似錦蒲稳、人聲如沸氮趋。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽剩胁。三九已至,卻和暖如春决记,著一層夾襖步出監(jiān)牢的瞬間摧冀,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓扩借,卻偏偏與公主長得像椒惨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子潮罪,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 搜索了一下網(wǎng)上關(guān)于如何在storybook中引入基于element-ui二次封裝后的組件的資料幾乎沒用或者比較老舊...
- 安裝依賴 yarn global add @vue/cli vue create qiyun-el-ui vue ...
- 麻煩點(diǎn) 在使用element-ui的el-table組件時(shí)凌唬,需要手工寫入大量el-table-column椎镣,費(fèi)時(shí)費(fèi)...
- Table組件 因?yàn)檎P枨髞碚f表格都會(huì)帶翻頁,所以我就直接在一個(gè)組件里面做好了 JS 和 CSS 使用組件方法 ...
- 使用vue+elementui封裝table细层。組件中提供了含有分頁的表格惜辑,支持filter,支持render疫赎,支持...