element Table 表格

本文详细介绍了在使用 Element UI 的表格组件时,如何实现数据绑定、自适应宽度、序号显示、值转换及操作按钮等功能。通过具体代码示例,展示了如何利用 Vue.js 进行数据操作和事件处理。

记录一下我在使用element中表格时的常用功能。
html部分:

//绑定数据源:data="searchUsers"
//指定100%的宽度可以自适应页面的宽度
<el-table :data="searchUsers" highlight-current-row v-loading="listLoading" 
@selection-change="selsChange"style="width: 100%;">
            <el-table-column type="selection">
            </el-table-column>
            //指定宽度和使用序号功能type=index
            <el-table-column type="index" label="序号"  width="100">
            </el-table-column>
            //prop的值就是绑定数据源对象里的键名
            //formatter是一个很好用的功能,可以把值数据转换成想要显示的内容
            <el-table-column prop="id" label="编码" :formatter="formatStatus">
            </el-table-column>
     //这里是操作按钮,关键点就是scope,通过scope.row可以获取到数据源里的值,
     //例如row.id
            <el-table-column label="操作" width="150">
                <template scope="scope">
                    <el-button size="small" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
                    <el-button type="danger" size="small" @click="handleDel(scope.$index, scope.row)">停用</el-button>
                </template>
            </el-table-column>
        </el-table>

js部份

//点击编辑按钮,接收参数
            handleEdit: function (index, row) {
                this.$router.push({
                    name: '添加科室',
                    params: {
                        id: row.id
                    }
                })
            },

 // 点击停用按钮
            handleDel(index, row) {
                this.$confirm('确认停用该科室吗?', '提示', {
                    type: 'warning'
                }).then(() => {
                //调用接口
                    this.delApi(row.id)
                })            
            },
 // 预约状态值转换
            formatStatus(row, column) {
                let status = row.status
                return status === 1 ? '已下架' : status === 2 ? '进行中' : status === 3 ? '已结束' : '全部'
            },

效果图

<think>好的,我现在需要帮助用户找到关于Element Table实现表格拖拽功能的示例代码。根据用户之前的引用内容,他们提到了使用Vue和Element UI的el-table组件,并且涉及了一些拖拽事件和方法,比如node-drag-start、node-drag-end等。用户现在明确想要具体的实现示例,所以我要整理一个清晰的步骤和代码示例。 首先,我需要回忆Element UI的文档是否有官方的拖拽支持。Element UI的表格组件本身可能不直接支持行拖拽,但可以通过第三方库如vuedraggable来实现。不过用户提供的引用中已经有一些自定义的事件处理,比如@node-drag-start,这可能说明他们使用的是某个扩展或自定义指令。 接下来,我需要考虑如何将拖拽功能集成到el-table中。通常,这可能涉及到以下几个步骤: 1. **引入拖拽库**:比如使用Sortable.js或者vuedraggable,但需要确保与Vue的兼容性。 2. **包裹表格行**:可能需要将表格行设置为可拖拽,或者在表格外部包裹一个拖拽容器。 3. **处理拖拽事件**:实现拖拽开始、结束时的逻辑,更新数据顺序。 4. **更新表格数据**:当拖拽完成后,重新排列数据数组,触发视图更新。 然后,我需要检查用户提供的代码引用。他们使用了draggable属性,以及一些自定义的事件处理函数,比如handleDragStart、handleDragEnd等。这说明可能是在el-table上直接应用了某些拖拽指令或混入了拖拽功能。 需要注意的是,用户引用的代码中有类似@node-drag-start的事件,这可能是element自身提供的,但根据我的知识,Element UI的表格组件默认不支持行拖拽。因此,用户可能使用了第三方扩展或者自己实现了这些事件。例如,用户提到的引用链接中的博客可能提供了具体的实现方法,但无法直接访问链接内容。 因此,我需要根据常见的实现方式,给出一个可行的示例。通常,使用Sortable.js来实现拖拽是比较常见的做法。以下是可能的步骤: - 安装Sortable.js。 - 在Vue组件的mounted钩子中初始化Sortable,绑定到表格的tbody元素。 - 在拖拽结束时更新数据数组的顺序。 同时,要注意在Vue中使用第三方库操作DOM时,可能需要使用nextTick来确保DOM已经渲染完毕。 另外,用户可能还需要处理列的拖拽,但根据问题描述,主要关注行拖拽。如果需要列拖拽,可能需要类似的方法,但操作的是表头部分。 最后,确保提供的代码示例正确,并且包含必要的细节,比如引入Sortable.js,处理数据更新,以及样式调整(如拖拽时的视觉效果)。 现在,我需要将这些思考整理成一个结构化的回答,分步骤说明实现过程,并附上示例代码。同时,根据用户的要求,生成相关问题。</think>### Element Table实现表格拖拽功能示例 以下是基于Element UI实现表格行拖拽功能的完整步骤和代码示例(需依赖第三方库`Sortable.js`): --- #### 1. 安装依赖 ```bash npm install sortablejs --save ``` --- #### 2. 实现代码(Vue组件) ```html <template> <el-table :data="tableData" row-key="id" border style="width: 100%" @row-click="handleRowClick" > <el-table-column prop="id" label="ID" width="80"></el-table-column> <el-table-column prop="name" label="名称"></el-table-column> <el-table-column prop="date" label="日期"></el-table-column> </el-table> </template> <script> import Sortable from 'sortablejs'; export default { data() { return { tableData: [ { id: 1, name: '行1', date: '2023-01-01' }, { id: 2, name: '行2', date: '2023-01-02' }, { id: 3, name: '行3', date: '2023-01-03' } ] }; }, mounted() { this.setRowSortable(); }, methods: { // 初始化行拖拽 setRowSortable() { const table = this.$el.querySelector('.el-table__body-wrapper tbody'); Sortable.create(table, { animation: 150, ghostClass: 'sortable-ghost', onEnd: ({ newIndex, oldIndex }) => { const targetRow = this.tableData.splice(oldIndex, 1)[0]; this.tableData.splice(newIndex, 0, targetRow); } }); }, handleRowClick(row) { console.log('当前行数据:', row); } } }; </script> <style> /* 拖拽时的视觉反馈 */ .sortable-ghost { opacity: 0.5; background: #c8ebfb; } </style> ``` --- #### 3. 核心实现说明 1. **DOM操作**:通过`querySelector`获取表格的`tbody`元素 2. **Sortable配置**: - `animation`:拖拽动画时长 - `ghostClass`:拖拽时占位符的样式类 - `onEnd`:拖拽结束时触发数据更新 3. **数据更新**:通过`splice`方法直接修改原始数组实现行顺序交换 --- #### 4. 扩展功能 * **列拖拽**:可对表头元素`thead`使用Sortable实现列顺序调整 * **跨表格拖拽**:通过配置Sortable的`group`属性实现 * **数据持久化**:在`onEnd`事件中调用接口保存新顺序 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值