虽互不曾谋面,但希望能和您成为笔尖下的朋友
以读书,技术,生活为主,偶尔撒点鸡汤
不作,不敷衍,意在真诚吐露,用心分享
点击左上方,可关注本刊
标星公众号(ID:itclanCoder)
背景
在做一些后台管理系统时,表格的数据信息展示是很常见的需求,而对应的都是一些增删改查的操作
有的表格甚至要求会做拖拽,排序等
涉及到的知识
1: 如何渲染表头数据以及表格数据
2: 最右侧管理的按钮(查看,编辑,上线,下线)是怎么插入进去的
3: 管理操作(查看,编辑,上线,下线)按钮的状态显示
4: 表格的分页数据展示
5: 表格的横向拖拽实现
操作按钮状态
它的状态是根据后端返回的具体status
来决定显示,隐藏以及是否禁用
1: "待发布",即编辑状态,下线按钮置灰
2: "待上线",即编辑状态,上线,下线按钮置灰
3: "已上线",即上线按钮置灰,查看按钮隐藏
100: "已结束,查看按钮显示,上下线按钮置灰
具体内容,代码就是最好的解释哈
具体实例效果(拖拽行)
点击文末左下方阅读原文即可体验
https://coder.itclan.cn/fontend/css/business-col-draw/
行拖拽的具体实现
这里的拖拽主要借用的是sortablejs实现的,具体代码如下所示
import Sortable from 'sortablejs'; // 引入sortable
// 拖拽方法
dropRow(endHandle) {
const tbody = document.querySelector(
".el-table__body-wrapper tbody"
);
if (tbody) {
Sortable.create(tbody, {
animation: 300,
delay: 0,
handle: '.drop_handle',
onEnd: endHandle,
});
}
},
// 在mounted函数中
// 表格拖拽
this.$nextTick(() => {
this.dropRow((oldIndex,newIndex) => {
const currRow = this.tableData.splice(oldIndex, 1)[0]
this.tableData.splice(newIndex, 0, currRow);
})
})
整个实例代码如下所示
tableRowDraw.vue
<template>
<div>
<!-- 表格内容展示开始 -->
<div class="table-content">
<tableComp
:pageSize="pageSize"
:pageNo="pageNo"
:total="total * 1"
:tableData="tableData.slice((pageNo - 1) * pageSize, pageNo * pageSize)"
:table-colist="tableColist"
@look="handleLook"
@copy="handleCopy"
@edit="handleEdit"
@online="handleOnline"
@offline="handleOffline"
@pageCurrentChange="pageCurrentChange"
@pageSizeChange="pageSizeChange"
>
</tableComp>
</div>
<!-- 表格内容展示结束 -->
<!-- 点击表格上下线按钮弹出模态框开始 -->
<el-dialog
:visible.sync="isDialogModel"
width="30%"
center
custom-class="dialog-model"
>
<p class="dalog-content">{
{ popModelContent }}</p>
<span slot="footer" class="dialog-footer">
<el-button @click="isDialogModel = false">取 消</el-button>
<el-button type="primary" @click="handleSubmit">确 定</el-button>
</span>
</el-dialog>
<!-- 点击表格上下线按钮弹出模态框结束 -->
</div>
</template>
<script>
import { tableColist } from "./tableColist.js"; // 表格表头配置数据
import tableComp from "./tableComp.vue";
import Sortable from 'sortablejs'; // 表格拖拽
export default {
components: {
tableComp,
},
name: "tableRowDraw",
data() {
return {
tableColist, // 表格列表头数据
// 当前页
pageNo: 1,
// 每页条数
pageSize:10,
// 总条数
total: "50",
tableData: [],
isDialogModel: false, // 上下线模态框
popModelContent: "",
};
},
created() {