<template>
<div class="table"> <table border="1px" v-dragform>
<!-- 表格标题 -->
<thead>
<tr >
<th> </th>
<th><input type="checkbox" v-if="checkboxs" v-model='checked' v-on:click='checkedAll' class="chestyle"></th>
<th v-for="(item,key) in tebleTop" :key="key"><span class="formtitle" :title="item">{{item}}</span></th>
</tr>
</thead>
<!-- 表格内容 -->
<tbody>
<tr v-for="(item1 ,key1) in tebleDate" :key="key1" @dblclick.stop="tableEdit(key1,item1)">
<td>{{key1+1}}</td>
<td><input type="checkbox" v-if="checkboxs" :value="item1" v-model="tdPicth" class="chestyle"></td> <td v-for="(item2 ,key2) in tebleDate[key1]" :key="key2" >
<span v-if="key1==i && Editchent? !thshow:true" class="formtitle" :title="item2.title">{{(item2.title?item2.title:'')}}</span> <span v-if="key1==i&& Editchent ? thshow:false" >
<input type="text" v-model="itemModel[key2].title" v-if="(item2.data==null)&&(item2.time==null)"> <select v-model="item2.title " v-if="item2.data" @change ="dbselect(item2)"> <option :value= item3.value?item3.value:item3.prodCode v-for="(item3,key3) in item2.data" :key="key3">{{item3.text?item3.text:item3.prodName}}</option>
</select>
<input type="date" v-model="itemModel[key2].title" v-if="item2.time!=null">
</span>
</td>
</tr>
</tbody>
</table>
<div class="block"> <el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage4"
:page-sizes="[10, 20, 30, 40]"
:page-size="10"
layout="total, sizes, prev, pager, next, jumper"
:total=pageTotal>
</el-pagination>
<button @click="export2Excelshow=true" class="excelBut"><i></i>导出</button>
<export2Excel v-if="export2Excelshow" @closeExce = "export2Excelshow=false" :tebleDateAll= "tebleDateAll" :tebleDate= "tebleDate" :tebleTop="tebleTop"></export2Excel> </div> <el-dialog
title="提示"
:visible.sync="dialogVisible"
width="30%"
>
<span>{{dialogVisibleTitle}}</span>
<span slot="footer" class="dialog-footer">
<el-button @click="tabremoveBut(false)">取 消</el-button>
<el-button type="primary" @click="tabremoveBut(true)">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import export2Excel from "./exporExcel"
export default {
data() {
return {
currentPage4: 1,
// Edit:false,
dialogVisible: false, //提示面板
dialogVisibleTitle: "", // 面板提示信息
dialogVisibleType: "", //提示面板触发的事件
tebleDate: [], // 某一页的值
thshow: false, // 显示编辑
i: Number, // 行的下标
checkboxs: true,
export2Excelshow:false,
checked: false, //
tdPicth: [], // 点击选中
itemModel: null, // 点击行的值
tabkey: Number, // 编辑的下标
tebleDateSize: Array, // 获取到的列表数据
pagesize: 10, // 每页显示的条数
pageTotal: 0, //总共多少条数据 };
}, components:{export2Excel},
props: ["tebleDateAll", "addTableValue", "tebleTop", "Editchent"], // Editchent:是否需要编辑功能,tebleDateAll:格单内容,tebleTop:表格标题,dbselectShow:打开编码转换
watch: {
// 监听从父级传来的 表格数据变化
tebleDateAll(val) {
this.tablesave()
this.tebleDateSize = val;
this.tebleDate = val.slice(0, 10); // 页面默认显示10条数据
this.pageTotal = val.length;
}
}, methods: { dbselect(s) { // 转换编码
function convert(all, val) {
var title;
for (var i in all) {
if (all[i].prodCode == val) {
title = all[i].prodName;
}
if (all[i].value == val) {
title = all[i].text;
}
}
return title;
}
var that = this
function correlation(value) { // 关联数据
for (var i in value) {
console.log();
if (value[i].relevance) {
for (var j in value) {
if (
value[i].relevance &&
value[i].relevance == value[j].relevance
) {
if (i != j) {
if(that.dbselectShow){
if (convert(s.data, value[j].title)) {
value[i].title = convert(s.data, value[j].title);
}
}else{
value[i].title = value[j].title
} }
break;
}
}
}
}
} for (var i in this.tebleDate) {
correlation(this.tebleDate[i]);
}
},
handleSizeChange(val) {
// 选择每页显示的数据
console.log(`每页 ${val} 条`);
this.pagesize = val; function sliceArr(array, size) {
var result = [];
for (var x = 0; x < Math.ceil(array.length / size); x++) {
var start = x * size;
var end = start + size;
result.push(array.slice(start, end));
}
return result;
}
this.tebleDate = sliceArr(this.tebleDateSize, val)[0];
},
handleCurrentChange(val) {
// 选择显示第几页
function sliceArr(array, size) {
var result = [];
for (var x = 0; x < Math.ceil(array.length / size); x++) {
var start = x * size;
var end = start + size;
result.push(array.slice(start, end));
}
return result;
}
this.tebleDate = sliceArr(this.tebleDateSize, this.pagesize)[val - 1];
}, getTableVlue() {
//刷新 this.$store.dispatch("Warranty/getWarranty"); }, tableEdit(key, item) {
// 可编辑
console.log(this.Editchent);
this.itemModel = item; // 点击时行的值写入到输入默认
this.i = key; // 行的下标
this.thshow = true; // 显示可以输入
this.tabkey = key; // 输入行的下标
},
tablesave(title) {
//保存
if (title) {
this.dialogVisibleTitle = title;
this.dialogVisible = true;
this.dialogVisibleType = "tablesave";
} else {
if (this.tebleDate == "") {
// 判断添加时的值不能为空
return;
}
for (var i in this.tebleDate) {
for (var j in this.tebleDate[i]) {
if (this.tebleDate[i][j].title == "") {
console.log("输入不能为空");
return;
}
}
}
if (this.itemModel) {
console.log(this.itemModel); this.tebleDate[this.tabkey] = this.itemModel;
this.thshow = false;
console.log(this.tebleDate);
}
this.tabkey = null;
}
}, tabSaveSub(url) {
// 提交和保存
this.tablesave();
var that = this;
this.$store.dispatch(url, that);
}, checkedAll() {
// 全选和反选
var _this = this;
console.log(_this.checked);
if (this.checked) {
_this.tdPicth = [];
} else {
_this.tdPicth = [];
_this.tebleDate.forEach(function(item, key) {
_this.tdPicth.push(item);
});
}
}, tabremoveBut(v) {
// 提示面板事件
if (v) {
switch (this.dialogVisibleType) {
case "tabremove":
this.tabremove();
this.dialogVisible = false;
break;
case "tablesave":
this.tablesave();
this.dialogVisible = false;
break;
default:
}
} else {
this.dialogVisible = false;
}
}, tabremove(title) {
// 删除选中 if (title) {
this.dialogVisibleTitle = title;
this.dialogVisible = true;
this.dialogVisibleType = "tabremove";
} else {
console.log(this.tdPicth);
function remove(ob, val) {
var ob = ob;
var val = val;
var index = ob.indexOf(val);
if (index > -1) {
ob.splice(index, 1);
}
return ob;
} var tdPicth = this.tdPicth;
for (var j in tdPicth) {
console.log(j);
remove(this.tebleDate, this.tdPicth[j]);
// remove(this.tebleDateAll, this.tdPicth[j]);
} this.tdPicth = [];
}
},
addTable() {
//添加 table
this.itemModel = this.addTableValue;
this.i = this.tebleDate.length;
this.tebleDate.push(this.addTableValue);
this.tebleDateAll.push(this.addTableValue)
this.thshow = true;
}, }
};
</script>
<style scoped>
.table{
width:100%;
overflow-x: auto
}
th {
border: 1px solid #dcdfe6;
padding: 5px;
white-space: nowrap;
text-align: center;
box-sizing: border-box;
} td {
white-space: nowrap;
text-align: center;
border-width: 1px;
border-style: solid;
border: 1px solid #dcdfe6;
border-image: initial;
padding: 5px;
overflow: hidden;
box-sizing: border-box;
}
.formtitle {
display: block;
width: 150px;
overflow: hidden;
white-space: nowrap;
word-wrap: normal;
text-overflow: ellipsis; overflow: hidden;
}
.chestyle {
display: inline-block;
padding: 3px;
}
input {
display: inline-block;
max-width: 150px;
text-align: center;
border: 1px solid #dcdfe6;
padding: 5px;
}
table {
width: 200%;
display: block;
height: 430px;
overflow: auto;
cursor: default;
border-collapse:collapse
} select {
display: inline-block;
height: 30px;
line-height: 30px;
text-align: center;
padding-left: 10px;
border: 1px solid #dcdfe6;
}
.excelBut{
position: absolute;bottom: 5px;right: 25%;
border: 0;background: #fff;width: 70px;
background: url("../../assets/images/export.png")no-repeat 10% 53%;
color: #606266;
}
/* .excelBut i{width: 14px;height: 14px;display: inline-block;background: url("../../assets/images/export.png")no-repeat;} */
.block{position: relative}
</style>

   父组件

 <tables slot ref="tablesValue" :tebleDateAll = "tebleDateAll" :Editchent= true :dbselectShow= true :addTableValue= "addTableValue" :tebleTop = "tebleTop" ></tables>

  

formData() {  //计算属性
//表单数据
return {
f1: { title: "xxxx", name: "" },
f2: { title: "xxxx", name: "" },
f3: { title: "xxx", name: "" },
f4: {
title: "xxxx",
name: "",
data: this.tablecategory
},
f5: {
title: "xxx",
name: "",
data: this.tableForm
},
f6: { title: "创建时间从:", name: "", time: { time1: "", time2: "" } }
};
}, tebleTop: [
// 表格标题数据
"xxx",
"xxxx",
"xxxx",
"xxx(小类)",
"xxxx(小类)",
"xxxx",
"xxx",
"xxxxx"
]

  

vue 可编辑表格组件的更多相关文章

  1. LigerUI编辑表格组件单元格校验问题

    这几天在使用LigerUI(版本为1.2.2)编辑表格组件的时候,遇到几个小问题,从官方demo和api中没有找到解决的办法 问题1.从数据库查询出来的主键单元格不可编辑问题 主键单元格已经保存之前编 ...

  2. vue实现简单表格组件

    本来想这一周做一个关于vuex的总结的,但是由于朋友反应说还不知道如何用vue去写一个组件,所以在此写写一篇文章来说明下如何去写vue页面或者组件.vue的核心思想就是组件,什么是组件呢?按照我的理解 ...

  3. 封装Vue Element的可编辑table表格组件

    前一段时间,有博友在我那篇封装Vue Element的table表格组件的博文下边留言说有没有那种"表格行内编辑"的封装组件,我当时说我没有封装过这样的组件,因为一直以来在实际开发 ...

  4. 打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件

    第三章 建议学习时间8小时      总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...

  5. vue+element-ui+slot-scope或原生实现可编辑表格(日历)

    你们公司的产品是不是还在做一个可编辑表格功能? 1.前言 咱开发拿到需求大多数是去网上找成型的组件,找不到再看原生的方法能否实现,大牛除外哈,大牛一般喜欢封装组件框架. 2.思路 可编辑表格在后台管理 ...

  6. Vue + Element-ui实现后台管理系统(5)---封装一个Form表单组件和Table表格组件

    封装一个Form表单组件和Table组件 有关后台管理系统之前写过四遍博客,看这篇之前最好先看下这四篇博客.另外这里只展示关键部分代码,项目代码放在github上: mall-manage-syste ...

  7. Web jquery表格组件 JQGrid 的使用 - 7.查询数据、编辑数据、删除数据

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  8. 手把手教你用Vue造轮子(3):开发可排序的表格组件

    前言 最近闰土大叔跟Vue干上了,没办法,公司业务驱动,不用Vue没招啊,leader尝到了前后端分离带来的好处,除非你离职,哈哈哈,当然,那是不可能的,对于我这种要攒钱买房子的人来说.那还说什么呢, ...

  9. js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable

    js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable 一.总结 一句话总结:bootstrap能够做为最火的框架,绝对不仅仅只有我看到的位置,它应该还有很多位置可 ...

随机推荐

  1. Linux上db2安装

    Linux上db2安装:https://blog.csdn.net/nayanminxing/article/details/69372283

  2. 机器学习与R语言:kNN

    #---------------------------------------- # 功能描述:演示kNN建模过程 # 数据集:威斯康星乳腺癌诊断 # #---------------------- ...

  3. RabbitMQ学习之(二)_Centos6下安装RabbitMQ及管理配置

    首先yum方式安装依赖包 yum install ncurses-devel unixODBC unixODBC-devel 安装Erlang语言环境 wget http://erlang.org/d ...

  4. 深入 CommonJs 与 ES6 Module

    目前主流的模块规范 UMD CommonJs es6 module umd 模块(通用模块) (function (global, factory) { typeof exports === 'obj ...

  5. 仔细讨论 C/C++ 字节对齐问题⭐⭐

    原文:https://www.cnblogs.com/AlexMiller/p/5509609.html 字节对齐的原因 为了提高 CPU 的存储速度,编译器会对 struct 和 union的存储进 ...

  6. unicode下数据之间的转换

    首先mfc下字符串只有两种数据:char(一个字节)和wchar_t(两个字节),很多其他数据类型如TCHAR,WCHAR等都是这个两个基本类型的宏定义,BYTE是uchar 1.对话框打印char* ...

  7. 总结的一些json格式和对象/String/Map/List等的互转工具类

    总结的一些json格式和对象/String/Map/List等的互转工具类,有需要的可以看看,需要引入jackson-core-asl-1.7.1.jar.jackson-jaxrs-1.7.1.ja ...

  8. System.IO命名空间下常用的类

    System.IO System.IO.Directory 目录 System.IO.Path 文件路径(包含目录和文件名) System.IO.FileInfo 提供创建.复制.删除.移动和打开文件 ...

  9. 第七篇:Spark SQL 源码分析之Physical Plan 到 RDD的具体实现

    /** Spark SQL源码分析系列文章*/ 接上一篇文章Spark SQL Catalyst源码分析之Physical Plan,本文将介绍Physical Plan的toRDD的具体实现细节: ...

  10. 【cs231n】神经网络学习笔记1

    神经网络推荐博客: 深度学习概述 神经网络基础之逻辑回归 神经网络基础之Python与向量化 浅层神经网络 深层神经网络 前言 首先声明,以下内容绝大部分转自知乎智能单元,他们将官方学习笔记进行了很专 ...