|
|
<template> <el-table :data="tableData" size="medium" fit :header-cell-style="{ height: '40px', padding: '0', background: '#f7f9fa', 'font-size': '16px', color: '#8590a6', }" ref="multipleTable" @sort-change="handleSort" highlight-current-row @filter-change="filterHandler" @row-click="handleRowClick" > <el-table-column v-for="(th, key) in tableHeader" :key="key" :prop="th.prop" :label="th.label" :fixed="th.fixed" :sortable="th.sortable ? 'custom' : false" :filters="th.filters" :column-key="th.columnKey" :filtered-value="th.filteredValue" :filter-multiple="th.filterMultiple" :min-width="th.minWidth" > <template slot-scope="scope"> <ex-slot v-if="th.render" :render="th.render" :row="scope.row" :index="scope.$index" :column="th" />
<span v-else>{{ scope.row[th.prop] || "" }}</span> </template> <template> <el-tag class="move" style="cursor: move; margin-left: 15px" draggable="true" > <i class="el-icon-d-caret" style="width: 1rem; height: 1rem"></i> </el-tag> </template> </el-table-column> </el-table></template>
<script>// 自定义内容的组件
var exSlot = { functional: true, props: { row: Object, render: Function, index: Number, column: { type: Object, default: null, }, }, render: (h, data) => { const params = { row: data.props.row, index: data.props.index, }; if (data.props.column) params.column = data.props.column; return data.props.render(h, params); },};export default { name: "comp-table", components: { exSlot }, props: { // 表格数据
tableData: { type: Array, default: function () { return []; }, }, // 表头数据
tableHeader: { type: Array, default: function () { return []; }, }, }, methods: { // 排序事件
handleSort(sort) { this.$emit("sort-events", sort); }, // 筛选事件
filterHandler(filters) { this.$emit("filter-events", filters); }, // 某一行被点击
handleRowClick(row) { // 点击选中是的颜色改变我给你看文档吧? 你这不是可以是的但是那个我用封装的就不行那边那个
// 你封装的那个js文件在哪里没有JS就是封装成组件调用
// 你现在是哪里不行 现在效果不是出来了?是的row可以传递过去拿的到你点击列表看看
// 你看我点击了哪个row那边传过去了 然后呢就选中效果没显示这一个问题背景没变
this.$refs.multipleTable.setCurrentRow(row); // multipleTable.
console.log("row", row); this.$emit("clickevents", row); }, },};</script>
|