75c32d5f
梁灏
rebuild Tree
|
1
|
<template>
|
37f4b7a8
梁灏
Tree add global s...
|
2
|
<collapse-transition :appear="appear">
|
d44420be
Sergio Crisostomo
refactor and make...
|
3
|
<ul :class="classes">
|
75c32d5f
梁灏
rebuild Tree
|
4
5
|
<li>
<span :class="arrowClasses" @click="handleExpand">
|
37f4b7a8
梁灏
Tree add global s...
|
6
7
|
<Icon v-if="showArrow" :type="arrowType" :custom="customArrowType" :size="arrowSize" />
<Icon v-if="showLoading" type="ios-loading" class="ivu-load-loop" />
|
75c32d5f
梁灏
rebuild Tree
|
8
9
|
</span>
<Checkbox
|
eae3e936
Aresn
Tree support tran...
|
10
11
|
v-if="showCheckbox"
:value="data.checked"
|
d44420be
Sergio Crisostomo
refactor and make...
|
12
|
:indeterminate="data.indeterminate"
|
eae3e936
Aresn
Tree support tran...
|
13
14
|
:disabled="data.disabled || data.disableCheckbox"
@click.native.prevent="handleCheck"></Checkbox>
|
97098fcd
梁灏
update Tree example
|
15
16
|
<Render v-if="data.render" :render="data.render" :data="data" :node="node"></Render>
<Render v-else-if="isParentRender" :render="parentRender" :data="data" :node="node"></Render>
|
174836c4
梁灏
update Tree Rende...
|
17
|
<span v-else :class="titleClasses" @click="handleSelect">{{ data.title }}</span>
|
75c32d5f
梁灏
rebuild Tree
|
18
|
<Tree-node
|
d44420be
Sergio Crisostomo
refactor and make...
|
19
|
v-if="data.expand"
|
37f4b7a8
梁灏
Tree add global s...
|
20
|
:appear="appearByClickArrow"
|
56c7cc0e
vanppo
Add new props 'ch...
|
21
|
v-for="(item, i) in children"
|
da76a837
Sergio Crisostomo
fix dom rendering...
|
22
|
:key="i"
|
eae3e936
Aresn
Tree support tran...
|
23
|
:data="item"
|
eae3e936
Aresn
Tree support tran...
|
24
|
:multiple="multiple"
|
56c7cc0e
vanppo
Add new props 'ch...
|
25
26
|
:show-checkbox="showCheckbox"
:children-key="childrenKey">
|
75c32d5f
梁灏
rebuild Tree
|
27
28
29
|
</Tree-node>
</li>
</ul>
|
eae3e936
Aresn
Tree support tran...
|
30
|
</collapse-transition>
|
75c32d5f
梁灏
rebuild Tree
|
31
32
33
|
</template>
<script>
import Checkbox from '../checkbox/checkbox.vue';
|
64633e8c
梁灏
fixed #612
|
34
|
import Icon from '../icon/icon.vue';
|
174836c4
梁灏
update Tree Rende...
|
35
|
import Render from './render';
|
eae3e936
Aresn
Tree support tran...
|
36
|
import CollapseTransition from '../base/collapse-transition';
|
75c32d5f
梁灏
rebuild Tree
|
37
|
import Emitter from '../../mixins/emitter';
|
b31aab71
梁灏
Tree add async lo...
|
38
|
import { findComponentUpward } from '../../utils/assist';
|
75c32d5f
梁灏
rebuild Tree
|
39
40
41
42
43
44
|
const prefixCls = 'ivu-tree';
export default {
name: 'TreeNode',
mixins: [ Emitter ],
|
467e2cf9
梁灏
Tree add check-di...
|
45
|
inject: ['TreeInstance'],
|
9b24f1ab
梁灏
Tree add Render f...
|
46
|
components: { Checkbox, Icon, CollapseTransition, Render },
|
75c32d5f
梁灏
rebuild Tree
|
47
48
49
50
51
52
53
54
55
56
57
|
props: {
data: {
type: Object,
default () {
return {};
}
},
multiple: {
type: Boolean,
default: false
},
|
56c7cc0e
vanppo
Add new props 'ch...
|
58
59
60
61
|
childrenKey: {
type: String,
default: 'children'
},
|
75c32d5f
梁灏
rebuild Tree
|
62
63
64
|
showCheckbox: {
type: Boolean,
default: false
|
37f4b7a8
梁灏
Tree add global s...
|
65
66
67
68
|
},
appear: {
type: Boolean,
default: false
|
75c32d5f
梁灏
rebuild Tree
|
69
70
71
72
|
}
},
data () {
return {
|
37f4b7a8
梁灏
Tree add global s...
|
73
74
|
prefixCls: prefixCls,
appearByClickArrow: false
|
75c32d5f
梁灏
rebuild Tree
|
75
76
|
};
},
|
75c32d5f
梁灏
rebuild Tree
|
77
78
79
80
|
computed: {
classes () {
return [
`${prefixCls}-children`
|
3c145e6f
梁灏
update Tree
|
81
|
];
|
75c32d5f
梁灏
rebuild Tree
|
82
83
84
85
86
87
88
89
90
91
92
93
94
|
},
selectedCls () {
return [
{
[`${prefixCls}-node-selected`]: this.data.selected
}
];
},
arrowClasses () {
return [
`${prefixCls}-arrow`,
{
[`${prefixCls}-arrow-disabled`]: this.data.disabled,
|
b31aab71
梁灏
Tree add async lo...
|
95
|
[`${prefixCls}-arrow-open`]: this.data.expand
|
75c32d5f
梁灏
rebuild Tree
|
96
97
98
99
100
101
102
103
104
105
|
}
];
},
titleClasses () {
return [
`${prefixCls}-title`,
{
[`${prefixCls}-title-selected`]: this.data.selected
}
];
|
b31aab71
梁灏
Tree add async lo...
|
106
107
|
},
showArrow () {
|
56c7cc0e
vanppo
Add new props 'ch...
|
108
|
return (this.data[this.childrenKey] && this.data[this.childrenKey].length) || ('loading' in this.data && !this.data.loading);
|
b31aab71
梁灏
Tree add async lo...
|
109
110
111
|
},
showLoading () {
return 'loading' in this.data && this.data.loading;
|
174836c4
梁灏
update Tree Rende...
|
112
113
114
115
116
117
118
119
120
121
122
123
|
},
isParentRender () {
const Tree = findComponentUpward(this, 'Tree');
return Tree && Tree.render;
},
parentRender () {
const Tree = findComponentUpward(this, 'Tree');
if (Tree && Tree.render) {
return Tree.render;
} else {
return null;
}
|
97098fcd
梁灏
update Tree example
|
124
125
126
127
|
},
node () {
const Tree = findComponentUpward(this, 'Tree');
if (Tree) {
|
6ff0e340
梁灏
update Tree Rende...
|
128
129
|
// 将所有的 node(即flatState)和当前 node 都传递
return [Tree.flatState, Tree.flatState.find(item => item.nodeKey === this.data.nodeKey)];
|
97098fcd
梁灏
update Tree example
|
130
|
} else {
|
6ff0e340
梁灏
update Tree Rende...
|
131
|
return [];
|
97098fcd
梁灏
update Tree example
|
132
|
}
|
56c7cc0e
vanppo
Add new props 'ch...
|
133
134
135
|
},
children () {
return this.data[this.childrenKey];
|
37f4b7a8
梁灏
Tree add global s...
|
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
|
},
// 3.4.0, global setting customArrow 有值时,arrow 赋值空
arrowType () {
let type = 'ios-arrow-forward';
if (this.$IVIEW) {
if (this.$IVIEW.tree.customArrow) {
type = '';
} else if (this.$IVIEW.tree.arrow) {
type = this.$IVIEW.tree.arrow;
}
}
return type;
},
// 3.4.0, global setting
customArrowType () {
let type = '';
if (this.$IVIEW) {
if (this.$IVIEW.tree.customArrow) {
type = this.$IVIEW.tree.customArrow;
}
}
return type;
},
// 3.4.0, global setting
arrowSize () {
let size = '';
if (this.$IVIEW) {
if (this.$IVIEW.tree.arrowSize) {
size = this.$IVIEW.tree.arrowSize;
}
}
return size;
|
75c32d5f
梁灏
rebuild Tree
|
171
172
173
174
|
}
},
methods: {
handleExpand () {
|
b31aab71
梁灏
Tree add async lo...
|
175
176
177
|
const item = this.data;
if (item.disabled) return;
|
37f4b7a8
梁灏
Tree add global s...
|
178
179
180
|
// Vue.js 2.6.9 对 transition 的 appear 进行了调整,导致 iView 初始化时无动画,加此方法来判断通过点击箭头展开时,加 appear,否则初始渲染时 appear 为 false
this.appearByClickArrow = true;
|
b31aab71
梁灏
Tree add async lo...
|
181
|
// async loading
|
56c7cc0e
vanppo
Add new props 'ch...
|
182
|
if (item[this.childrenKey].length === 0) {
|
b31aab71
梁灏
Tree add async lo...
|
183
184
|
const tree = findComponentUpward(this, 'Tree');
if (tree && tree.loadData) {
|
da76a837
Sergio Crisostomo
fix dom rendering...
|
185
186
187
188
|
this.$set(this.data, 'loading', true);
tree.loadData(item, children => {
this.$set(this.data, 'loading', false);
if (children.length) {
|
56c7cc0e
vanppo
Add new props 'ch...
|
189
|
this.$set(this.data, this.childrenKey, children);
|
da76a837
Sergio Crisostomo
fix dom rendering...
|
190
|
this.$nextTick(() => this.handleExpand());
|
b31aab71
梁灏
Tree add async lo...
|
191
192
193
194
195
196
|
}
});
return;
}
}
|
56c7cc0e
vanppo
Add new props 'ch...
|
197
|
if (item[this.childrenKey] && item[this.childrenKey].length) {
|
b31aab71
梁灏
Tree add async lo...
|
198
199
200
|
this.$set(this.data, 'expand', !this.data.expand);
this.dispatch('Tree', 'toggle-expand', this.data);
}
|
75c32d5f
梁灏
rebuild Tree
|
201
202
203
|
},
handleSelect () {
if (this.data.disabled) return;
|
467e2cf9
梁灏
Tree add check-di...
|
204
205
206
207
208
|
if (this.TreeInstance.showCheckbox && this.TreeInstance.checkDirectly) {
this.handleCheck();
} else {
this.dispatch('Tree', 'on-selected', this.data.nodeKey);
}
|
75c32d5f
梁灏
rebuild Tree
|
209
210
|
},
handleCheck () {
|
d44420be
Sergio Crisostomo
refactor and make...
|
211
212
213
214
215
216
|
if (this.data.disabled) return;
const changes = {
checked: !this.data.checked && !this.data.indeterminate,
nodeKey: this.data.nodeKey
};
this.dispatch('Tree', 'on-check', changes);
|
75c32d5f
梁灏
rebuild Tree
|
217
|
}
|
75c32d5f
梁灏
rebuild Tree
|
218
219
|
}
};
|
d44420be
Sergio Crisostomo
refactor and make...
|
220
|
</script>
|