使用element-plus封装一个统一的table组件并给出代码示例。要求:1.table列表的数据统一是json文件形式,2.操作按钮统一封装增删查改组件,3.table组件需要有扩展性,比如能扩展下载按钮等,4.查看和增加按钮根据需求渲染不同的form表单。
时间: 2024-03-03 07:48:55 浏览: 75
好的,我将给出一个使用element-plus封装一个统一的table组件的代码示例,满足您的要求:
```
<template>
<div>
<el-table :data="tableData" :columns="tableColumns">
<el-table-column label="操作">
<template #default="{row}">
<custom-button-group :rowData="row" @on-edit="editRow" @on-delete="deleteRow" @on-view="viewRow" />
</template>
</el-table-column>
<el-table-column v-if="showDownloadButton" label="下载">
<template #default="{row}">
<el-button type="primary" icon="el-icon-download" @click="download(row)">下载</el-button>
</template>
</el-table-column>
</el-table>
<custom-form-dialog ref="formDialog" :formType="formType" :rowData="rowData" @on-save="saveRow" />
</div>
</template>
<script>
import axios from "axios";
import CustomButtonGroup from "@/components/CustomButtonGroup.vue";
import CustomFormDialog from "@/components/CustomFormDialog.vue";
export default {
components: {
CustomButtonGroup,
CustomFormDialog,
},
props: {
showDownloadButton: {
type: Boolean,
default: false,
},
jsonUrl: {
type: String,
required: true,
},
tableColumns: {
type: Array,
required: true,
},
formFields: {
type: Array,
required: true,
},
},
data() {
return {
tableData: [],
formType: "",
rowData: {},
};
},
created() {
this.loadData();
},
methods: {
loadData() {
axios.get(this.jsonUrl).then((response) => {
this.tableData = response.data;
});
},
editRow(row) {
this.formType = "edit";
this.rowData = row;
this.$refs.formDialog.showDialog();
},
deleteRow(row) {
const index = this.tableData.indexOf(row);
if (index !== -1) {
this.tableData.splice(index, 1);
}
},
viewRow(row) {
this.formType = "view";
this.rowData = row;
this.$refs.formDialog.showDialog();
},
saveRow(form) {
if (this.formType === "add") {
this.tableData.push(form);
} else if (this.formType === "edit") {
const index = this.tableData.indexOf(this.rowData);
if (index !== -1) {
this.tableData.splice(index, 1, form);
}
}
},
download(row) {
// 下载逻辑
},
},
};
</script>
```
解释一下代码:
1. 首先,我们定义了一个el-table组件,通过props接收传递进来的数据和表头信息。
2. 在el-table中定义了一个el-table-column,用来渲染操作列。在操作列中调用了一个自定义的CustomButtonGroup组件,用来封装增删查改的操作按钮。同时,在el-table-column中使用了v-if来控制是否显示下载按钮,实现了扩展性需求。
3. 在组件中定义了一个自定义的CustomFormDialog组件,用来封装查看和增加按钮对应的form表单。通过props接收传递进来的表单字段和操作类型,并通过$refs来调用showDialog方法来显示对话框。
4. 在组件中定义了loadData方法,用来通过axios等方式获取json文件中的数据。
5. 对于增删查改的操作逻辑,我们在组件中定义了editRow、deleteRow、viewRow和saveRow四个方法,其中editRow和viewRow方法用来控制查看和编辑对应的form表单的显示,deleteRow方法用来删除对应的行数据,saveRow方法用来保存对应的表单数据。
6. 最后,在组件中定义了download方法,用来处理下载按钮的逻辑。
以上就是一个使用element-plus封装一个统一的table组件的代码示例,满足您的要求。
阅读全文