cell-editable.vue
1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<style>
.eagle-table-cell-editable {
display: flex;
align-items: center;
}
.eagle-table-cell-editable .eagle-table-cell-editable__icon {
cursor: pointer;
vertical-align: middle;
padding-left: 5px;
fill: #2f54eb;
}
</style>
<template>
<div>
<!-- 可编辑状态 -->
<div v-if="editable" class="eagle-table-cell-editable">
<component
:value="$_get(row, item.fullKey)"
:is="item.type" v-bind="item.props" :style="item.style" size="mini"
@input="v => $emit('update', { oldValue, value: v, row, key: item.key, fullKey: item.fullKey })"
></component>
<span v-if="btnVisible !== false" @click="$emit('done')">
<svg class="eagle-table-cell-editable__icon" viewBox="0 0 1024 1024" width="24" height="24">
<path d="M235.946667 472.938667l-45.226667 45.312 210.090667 209.514666 432.362666-427.690666-45.013333-45.482667-387.157333 382.976z"></path>
</svg>
</span>
</div>
<!-- 渲染状态 -->
<template v-else>
<!-- 渲染插槽 -->
<template v-if="$scopedSlots['default']">
<slot></slot>
</template>
<!-- 默认渲染 -->
<template v-else>
{{ $_get(row, item.agentKey || item.fullKey) }}
</template>
</template>
</div>
</template>
<script>
import { get } from '../form-new/util';
export default {
name: 'cellEditable',
props: {
row: Object,
item: Object,
editable: Boolean,
btnVisible: Boolean,
},
methods: {
$_get: get,
},
data() {
return {
oldValue: undefined,
}
},
watch: {
editable: {
handler() {
this.oldValue = get(this.row, this.item.agentKey || this.item.fullKey);
},
immediate: true,
}
}
}
</script>