vue 可编辑表格组件
<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 可编辑表格组件 的全部内容, 来源链接: utcz.com/z/376382.html