Files
dvcp_v2_webapp/packages/bigscreen/designer/components/tableEditor.vue

134 lines
2.7 KiB
Vue
Raw Normal View History

2024-01-22 17:12:32 +08:00
<script>
2024-01-22 18:19:56 +08:00
import Vue from 'vue'
2024-01-22 17:12:32 +08:00
export default {
name: "tableEditor",
2024-01-22 18:19:56 +08:00
model: {
event: "input",
prop: "tableData"
},
2024-01-22 17:12:32 +08:00
props: {
2024-01-23 18:17:48 +08:00
label: String,
2024-01-22 17:12:32 +08:00
tableData: {default: () => []},
configs: {default: () => []}
},
2024-01-23 18:17:48 +08:00
data() {
return {
records: []
}
},
2024-01-22 17:12:32 +08:00
computed: {
2024-01-23 18:17:48 +08:00
option() {
return {
size: 'mini',
filterDic: true,
cellBtn: true,
menuWidth: 120,
addBtn: false,
columnBtn: false,
refreshBtn: false,
border: true,
delBtnText: " ",
editBtnText: " ",
saveBtnText: " ",
saveBtnIcon: "el-icon-check",
cancelBtnText: " ",
cancelBtnIcon: "el-icon-close",
column: this.configs.map(e => {
const item = this.$copy(e)
delete item.$index
delete item.$cellEdit
return {...item, cell: true}
})
}
},
},
methods: {
rowSave(form, done) {
this.$emit("input", this.records)
this.$emit("data", this.getFormatData())
done()
},
getFormatData() {
return this.configs.map((c, i) => {
const item = {name: c.label}
this.records.map((row, j) => item[`v${j || ""}`] = row[`c${i || ""}`])
return item
})
}
2024-01-22 17:12:32 +08:00
},
2024-01-22 18:19:56 +08:00
created() {
Vue.use(window.AVUE, {
2024-01-23 18:17:48 +08:00
size: 'mini',
tableSize: 'mini',
calcHeight: 36,
2024-01-22 18:19:56 +08:00
})
2024-01-23 18:17:48 +08:00
this.records = this.tableData.map(e => ({$cellEdit: true, ...e}))
2024-01-22 18:19:56 +08:00
}
2024-01-22 17:12:32 +08:00
}
</script>
<template>
<section class="tableEditor">
2024-01-23 18:17:48 +08:00
<avue-crud :option="option" :data="records" @row-save="rowSave" @row-cancel="rowSave">
<template v-if="label" v-slot:menuLeft>
<div class="label" v-text="label"/>
</template>
<template v-slot:menuRight>
<div class="el-icon-plus pointer" @click="records.push({$cellEdit: true})">增加数据</div>
</template>
</avue-crud>
2024-01-22 17:12:32 +08:00
</section>
</template>
2024-01-22 18:19:56 +08:00
<style scoped lang="scss">
.tableEditor {
width: 100%;
height: auto;
2024-01-23 18:17:48 +08:00
margin-bottom: 10px;
:deep(.avue-crud__body) {
background-color: transparent;
.avue-crud__header, .el-table, tr {
background-color: transparent;
}
.avue-crud__header {
min-height: unset;
}
.el-table__cell {
color: white;
background-color: transparent;
input:disabled {
background-color: transparent;
border-color: transparent;
color: white;
padding: 0;
}
}
.label {
width: 60px;
color: #FFFFFF;
font-size: 12px;
text-align: right;
}
.el-icon-plus {
font-size: 12px;
color: $primaryColor;
&:before {
margin-right: 4px;
}
}
}
2024-01-22 18:19:56 +08:00
2024-01-23 18:17:48 +08:00
&:last-of-type {
margin-bottom: 0;
2024-01-22 18:19:56 +08:00
}
}
</style>