evui 2.0.8 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/dist/{adac9fa4f723f9d2cb5b6640517114a9.png → 0b8d1200e71cae8d747dce4e69c4efb6.png} +0 -0
  2. package/dist/1.css +4 -0
  3. package/dist/1.css.map +1 -0
  4. package/dist/1.evui.min.js +2 -0
  5. package/dist/1.evui.min.js.map +1 -0
  6. package/dist/1ba679c05036b34bf359aa2e6c450faa.ttf +0 -0
  7. package/dist/2.css +4 -0
  8. package/dist/2.css.map +1 -0
  9. package/dist/2.evui.min.js +2 -0
  10. package/dist/2.evui.min.js.map +1 -0
  11. package/dist/{e8c322de9658cbeb8a774b6624167c2c.woff2 → 278156e41e0ad908cf7f841b17130502.woff2} +0 -0
  12. package/dist/3.evui.min.js +2 -0
  13. package/dist/3.evui.min.js.map +1 -0
  14. package/dist/32be89b11725274cd3e801192ba88361.ttf +0 -0
  15. package/dist/{0ab54153eeeca0ce03978cc463b257f7.woff2 → 38c6d8bab26db77d8c806813e1497763.woff2} +0 -0
  16. package/dist/4.evui.min.js +2 -0
  17. package/dist/4.evui.min.js.map +1 -0
  18. package/dist/{faff92145777a3cbaf8e7367b4807987.woff → 425399f81e4ce7cbd967685402ba0260.woff} +0 -0
  19. package/dist/4730076470a665bbc7b783c56d29a72e.svg +261 -0
  20. package/dist/52e9a7f6ff3af5ad261e5292d07ebdca.eot +0 -0
  21. package/dist/{ad97afd3337e8cda302d10ff5a4026b8.ttf → 5367103510b27b78482794590e1ce3b0.ttf} +0 -0
  22. package/dist/{65363c4d55617bbeb57d8ce6dcd46099.svg → 57e963e3d6dd0a9cf05150b40eebf69b.svg} +0 -0
  23. package/dist/{c5ebe0b32dc1b5cc449a76c4204d13bb.ttf → 65a2fb6d9aaa164b41a039302093995b.ttf} +0 -0
  24. package/dist/{cd6c777f1945164224dee082abaea03a.woff2 → 687a4990ea22bb1a49d469a5d9319790.woff2} +0 -0
  25. package/dist/{7583da5c07275cd5eb364507616f998f.ttf → 6c1d906bf5ba48676f65b2d65e935e1a.ttf} +0 -0
  26. package/dist/6dafca5a4f1e31f2bdf11939b24ff422.ttf +0 -0
  27. package/dist/{701ae6abd4719e9c2ada3535a497b341.eot → 752905fa5edf21fc52a10a0c1ca9c7a4.eot} +0 -0
  28. package/dist/76c05d80dda67cdc5d03f345b7bd063f.ttf +0 -0
  29. package/dist/{b551b554a67e86a840bc80cbb8066c30.svg → 7d62eb50e7bb05eedb2a4656f7fe8f3b.svg} +0 -0
  30. package/dist/{8e3c7f5520f5ae906c6cf6d7f3ddcd19.eot → a01e3f2d6c83dc3aee175e2482b3f777.eot} +0 -0
  31. package/dist/{448f2aaa315fa9dce7b2cf6ce31caed6.svg → b30fd8419d7e6d5918856c7531d33482.svg} +0 -0
  32. package/dist/c57dd55fa982e8940f69ca1d69a8a999.woff +0 -0
  33. package/dist/{b87b9ba532ace76ae9f6edfe9f72ded2.ttf → c656b8caa454ed19b9a2ef7f4f5b8fea.ttf} +0 -0
  34. package/dist/{a046592bac8f2fd96e994733faf3858c.woff → cac87dc00c87a5d74711d0276713808a.woff} +0 -0
  35. package/dist/{13db00b7a34fee4d819ab7f9838cc428.eot → d68fa3e67dbb653a13cec44b1bcabcfe.eot} +0 -0
  36. package/dist/{ef60a4f6c25ef7f39f2d25a748dbecfe.woff → ddae9b1ba9b0b42f58809904b0b21349.woff} +0 -0
  37. package/dist/evui.min.js +12 -59485
  38. package/dist/evui.min.js.gz +0 -0
  39. package/dist/evui.min.js.map +1 -1
  40. package/dist/main.css +85 -0
  41. package/dist/main.css.gz +0 -0
  42. package/dist/main.css.map +1 -0
  43. package/package.json +58 -89
  44. package/src/common/emitter.js +20 -0
  45. package/src/common/utils.debounce.js +223 -0
  46. package/src/common/utils.js +51 -17
  47. package/src/common/utils.throttle.js +83 -0
  48. package/src/common/utils.tree.js +18 -0
  49. package/src/components/button/button.vue +316 -241
  50. package/src/components/chart/chart.core.js +699 -0
  51. package/src/components/chart/chart.vue +200 -204
  52. package/src/components/chart/element/element.bar.js +311 -0
  53. package/src/components/chart/element/element.bar.time.js +115 -0
  54. package/src/components/chart/element/element.line.js +288 -0
  55. package/src/components/chart/element/element.pie.js +86 -0
  56. package/src/components/chart/element/element.scatter.js +83 -0
  57. package/src/components/chart/element/element.tip.js +356 -0
  58. package/src/components/chart/helpers/helpers.canvas.js +237 -0
  59. package/src/components/chart/helpers/helpers.constant.js +138 -0
  60. package/src/components/chart/helpers/helpers.util.js +154 -0
  61. package/src/components/chart/index.js +0 -1
  62. package/src/components/chart/model/index.js +4 -0
  63. package/src/components/chart/model/model.series.js +86 -0
  64. package/src/components/chart/model/model.store.js +559 -0
  65. package/src/components/chart/plugins/plugins.interaction.js +324 -0
  66. package/src/components/chart/plugins/plugins.legend.js +589 -0
  67. package/src/components/chart/plugins/plugins.pie.js +179 -0
  68. package/src/components/chart/plugins/plugins.title.js +56 -0
  69. package/src/components/chart/plugins/plugins.tooltip.js +384 -0
  70. package/src/components/chart/scale/scale.js +272 -0
  71. package/src/components/chart/scale/scale.linear.js +30 -0
  72. package/src/components/chart/scale/scale.logarithmic.js +120 -0
  73. package/src/components/chart/scale/scale.step.js +197 -0
  74. package/src/components/chart/scale/scale.time.category.js +204 -0
  75. package/src/components/chart/scale/scale.time.js +40 -0
  76. package/src/components/checkbox/checkbox-group.vue +31 -12
  77. package/src/components/checkbox/checkbox.vue +269 -19
  78. package/src/components/codeview/code.vue +42 -29
  79. package/src/components/contextmenu/contextmenu.child.vue +79 -0
  80. package/src/components/contextmenu/contextmenu.vue +276 -0
  81. package/src/components/contextmenu/contextmenu.wrap.vue +189 -0
  82. package/src/components/contextmenu/index.js +3 -0
  83. package/src/components/datepicker/calendar.core.js +604 -510
  84. package/src/components/datepicker/calendar.vue +0 -3
  85. package/src/components/datepicker/datepicker.vue +73 -14
  86. package/src/components/datepicker/index.js +5 -1
  87. package/src/components/grid/grid.filter.vue +290 -0
  88. package/src/components/grid/grid.filter.window.vue +411 -0
  89. package/src/components/grid/grid.render.vue +45 -0
  90. package/src/components/grid/grid.vue +1338 -0
  91. package/src/components/icon/icon.vue +22 -7
  92. package/src/components/input/input.number.vue +309 -277
  93. package/src/components/label/label.vue +2 -2
  94. package/src/components/loadingmask/loadingmask.vue +52 -63
  95. package/src/components/loginfield/index.js +3 -0
  96. package/src/components/loginfield/loginfield.vue +339 -0
  97. package/src/components/markdown/index.js +3 -0
  98. package/src/components/markdown/markdown.vue +1001 -0
  99. package/src/components/menu/index.js +1 -3
  100. package/src/components/menu/menu.nav.item.vue +115 -0
  101. package/src/components/menu/menu.nav.sub.vue +42 -0
  102. package/src/components/menu/menu.nav.vue +71 -98
  103. package/src/components/message/index.js +3 -0
  104. package/src/components/message/message.js +63 -0
  105. package/src/components/message/message.vue +191 -0
  106. package/src/components/message-box/index.js +3 -0
  107. package/src/components/message-box/message-box.js +31 -0
  108. package/src/components/message-box/message-box.vue +298 -0
  109. package/src/components/notification/index.js +3 -0
  110. package/src/components/notification/notification.js +75 -0
  111. package/src/components/notification/notification.vue +242 -0
  112. package/src/components/radio/radio-group.vue +12 -2
  113. package/src/components/radio/radio.vue +186 -25
  114. package/src/components/selectbox/dropdown.vue +96 -39
  115. package/src/components/selectbox/listbox.vue +68 -29
  116. package/src/components/selectbox/option.vue +1 -1
  117. package/src/components/selectbox/selectbox.vue +445 -245
  118. package/src/components/slider/slider-tooltip.vue +7 -7
  119. package/src/components/slider/slider.vue +20 -25
  120. package/src/components/splitter/index.js +3 -0
  121. package/src/components/splitter/splitter.vue +294 -0
  122. package/src/components/table/table.black.css +1 -1
  123. package/src/components/table/table.filter.lite.vue +8 -8
  124. package/src/components/table/table.filter.vue +1 -1
  125. package/src/components/table/table.grey.css +5 -6
  126. package/src/components/table/table.navy.css +1 -1
  127. package/src/components/table/table.vue +60 -55
  128. package/src/components/tabs/tab-panel.vue +19 -5
  129. package/src/components/tabs/tabs.vue +182 -87
  130. package/src/components/textfield/textfield.vue +140 -80
  131. package/src/components/timepicker/index.js +2 -2
  132. package/src/components/timepicker/spinner.vue +15 -17
  133. package/src/components/timepicker/timepicker.vue +98 -53
  134. package/src/components/toggle/toggle.vue +206 -158
  135. package/src/components/tree/index.js +2 -6
  136. package/src/components/tree/render.js +17 -0
  137. package/src/components/tree/tree-node.vue +214 -0
  138. package/src/components/tree/tree.vue +296 -0
  139. package/src/components/tree-table/index.js +7 -0
  140. package/src/components/{tree → tree-table}/tree.table.black.css +0 -0
  141. package/src/components/{tree → tree-table}/tree.table.grey.css +12 -12
  142. package/src/components/{tree → tree-table}/tree.table.vue +151 -95
  143. package/src/components/tree-table/tree.util.js +119 -0
  144. package/src/components/window/window.vue +238 -183
  145. package/src/index.js +29 -12
  146. package/src/styles/base/base.scss +50 -0
  147. package/src/styles/base/index.scss +1 -0
  148. package/src/styles/default.scss +5 -0
  149. package/src/styles/{codemirror.css → lib/codemirror.css} +0 -0
  150. package/src/styles/{all.css → lib/fontawesome.css} +1 -1
  151. package/src/styles/lib/icon.css +792 -0
  152. package/src/styles/themes/index.scss +2 -0
  153. package/src/styles/themes/mixin.scss +33 -0
  154. package/src/styles/themes/variables.scss +206 -0
  155. package/src/styles/utils/colors.scss +222 -0
  156. package/src/styles/utils/index.scss +2 -0
  157. package/src/styles/utils/mixins.scss +34 -0
  158. package/src/styles/utils/variables.scss +27 -0
  159. package/src/webfonts/EVUI.eot +0 -0
  160. package/src/webfonts/EVUI.svg +251 -173
  161. package/src/webfonts/EVUI.ttf +0 -0
  162. package/src/webfonts/EVUI.woff +0 -0
  163. package/src/webfonts/Roboto-Bold.ttf +0 -0
  164. package/src/webfonts/Roboto-Medium.ttf +0 -0
  165. package/src/webfonts/Roboto-Regular.ttf +0 -0
  166. package/dist/3c9453211570a4ede66a4b4954a32bbb.ttf +0 -0
  167. package/dist/8634884f932627fc43782e6963b64ccd.svg +0 -183
  168. package/dist/b9e64d9b5fa6b500eb5df6fa980d3e5b.eot +0 -0
  169. package/dist/f0ac0c8b3c9cd3ef9002749985ae546f.woff +0 -0
  170. package/src/components/chart/charts/chart.bar.js +0 -334
  171. package/src/components/chart/charts/chart.base.js +0 -1075
  172. package/src/components/chart/charts/chart.line.js +0 -262
  173. package/src/components/chart/charts/chart.pie.js +0 -383
  174. package/src/components/chart/charts/chart.scatter.js +0 -349
  175. package/src/components/chart/charts/chart.sunburst.js +0 -193
  176. package/src/components/chart/core/axis/axis.js +0 -217
  177. package/src/components/chart/core/axis/axis.scale.auto.js +0 -69
  178. package/src/components/chart/core/axis/axis.scale.fixed.js +0 -65
  179. package/src/components/chart/core/axis/axis.scale.steps.js +0 -149
  180. package/src/components/chart/core/core.constant.js +0 -91
  181. package/src/components/chart/core/core.legend.js +0 -473
  182. package/src/components/chart/core/core.util.js +0 -66
  183. package/src/components/chart/core/data/data.js +0 -412
  184. package/src/components/chart/core/data/data.pie.js +0 -70
  185. package/src/components/chart/core/data/data.stack.js +0 -222
  186. package/src/components/chart/core/data/data.sunburst.js +0 -172
  187. package/src/components/menu/menu.context.children.vue +0 -201
  188. package/src/components/menu/menu.context.vue +0 -144
  189. package/src/components/tabs/jun/tab.vue +0 -123
  190. package/src/components/tabs/jun/tabs.vue +0 -484
  191. package/src/components/tree/tree.util.js +0 -39
  192. package/src/styles/evui.css +0 -386
  193. package/src/styles/icon.css +0 -557
@@ -0,0 +1,214 @@
1
+ <template>
2
+ <ul :class="classes">
3
+ <li>
4
+ <span
5
+ :class="[`${prefixCls}-arrow`, {[`${prefixCls}-arrow-disabled`]: data.disabled}]"
6
+ @click="handleExpand"
7
+ >
8
+ <ev-icon v-if="showArrow" :cls="arrowClasses"/>
9
+ <ev-loading-mask v-if="showLoading"/>
10
+ </span>
11
+ <div :class="selectedCls">
12
+ <ev-checkbox
13
+ v-if="useCheckbox"
14
+ v-model="data.checked"
15
+ type="square"
16
+ size="small"
17
+ after-type="check"
18
+ :indeterminate.sync="data.indeterminate"
19
+ :disabled="data.disabled || data.disableCheckbox"
20
+ @on-click="handleCheck"
21
+ />
22
+ <Render v-if="data.render" :render="data.render" :data="data" :node="node"/>
23
+ <Render v-else-if="isParentRender" :render="parentRender" :data="data" :node="node"/>
24
+ <template v-else>
25
+ <ev-icon
26
+ v-if="data.icon"
27
+ :class="`${prefixCls}-icon`"
28
+ :cls="data.icon"
29
+ />
30
+ <span
31
+ :class="titleClasses"
32
+ @contextmenu="handleContextmenu"
33
+ @click="handleSelect"
34
+ @dblclick="handleDblclick"
35
+ >
36
+ {{ data[titleKey] }}
37
+ </span>
38
+ </template>
39
+ </div>
40
+ <tree-node
41
+ v-for="(item, i) in children"
42
+ v-if="data.expand"
43
+ :key="i"
44
+ :data="item"
45
+ :use-checkbox="useCheckbox"
46
+ :children-key="childrenKey"
47
+ :title-key="titleKey"
48
+ :expand-icon="expandIcon"
49
+ :collapse-icon="collapseIcon"
50
+ />
51
+ </li>
52
+ </ul>
53
+ </template>
54
+
55
+ <script>
56
+ import { findComponentUpward } from '@/common/utils.tree';
57
+ import Emitter from '@/common/emitter';
58
+ import Render from './render';
59
+
60
+ const prefixCls = 'ev-tree';
61
+
62
+ export default {
63
+ name: 'TreeNode',
64
+ components: {
65
+ Render,
66
+ },
67
+ mixins: [Emitter],
68
+ props: {
69
+ data: {
70
+ type: Object,
71
+ default() {
72
+ return {};
73
+ },
74
+ },
75
+ childrenKey: {
76
+ type: String,
77
+ default: 'children',
78
+ },
79
+ useCheckbox: {
80
+ type: Boolean,
81
+ default: false,
82
+ },
83
+ titleKey: {
84
+ type: String,
85
+ default: 'title',
86
+ },
87
+ expandIcon: {
88
+ type: String,
89
+ default: '',
90
+ },
91
+ collapseIcon: {
92
+ type: String,
93
+ default: '',
94
+ },
95
+ },
96
+ data() {
97
+ return {
98
+ prefixCls,
99
+ };
100
+ },
101
+ computed: {
102
+ classes() {
103
+ return [
104
+ `${prefixCls}-children`,
105
+ ];
106
+ },
107
+ selectedCls() {
108
+ return [
109
+ `${prefixCls}-node`,
110
+ {
111
+ [`${prefixCls}-node-selected`]: this.data.selected,
112
+ },
113
+ ];
114
+ },
115
+ arrowClasses() {
116
+ // return this.data.expand ? 'ei-arrow-down' : 'ei-arrow-right';
117
+ const expandIcon = this.expandIcon ? this.expandIcon : 'ei-arrow-right';
118
+ const collapseIcon = this.expandIcon ? this.collapseIcon : 'ei-arrow-down';
119
+ return this.data.expand ? collapseIcon : expandIcon;
120
+ },
121
+ titleClasses() {
122
+ return [
123
+ `${prefixCls}-title`,
124
+ {
125
+ [`${prefixCls}-title-selected`]: this.data.selected,
126
+ },
127
+ ];
128
+ },
129
+ showArrow() {
130
+ return (this.data[this.childrenKey] && this.data[this.childrenKey].length) || ('loading' in this.data && !this.data.loading);
131
+ },
132
+ showLoading() {
133
+ return 'loading' in this.data && this.data.loading;
134
+ },
135
+ isParentRender() {
136
+ const Tree = findComponentUpward(this, 'Tree');
137
+ return Tree && Tree.render;
138
+ },
139
+ parentRender() {
140
+ const Tree = findComponentUpward(this, 'Tree');
141
+ if (Tree && Tree.render) {
142
+ return Tree.render;
143
+ }
144
+ return null;
145
+ },
146
+ node() {
147
+ const Tree = findComponentUpward(this, 'Tree');
148
+ if (Tree) {
149
+ return [Tree.flatState, Tree.flatState.find(item => item.nodeKey === this.data.nodeKey)];
150
+ }
151
+ return [];
152
+ },
153
+ children() {
154
+ return this.data[this.childrenKey];
155
+ },
156
+ },
157
+ methods: {
158
+ handleExpand() {
159
+ const item = this.data;
160
+ if (item.disabled) {
161
+ return;
162
+ }
163
+ // async loading
164
+ if (!item[this.childrenKey].length) {
165
+ const tree = findComponentUpward(this, 'Tree');
166
+ if (tree && tree.loadData) {
167
+ this.$set(this.data, 'loading', true);
168
+ tree.loadData(item, (children) => {
169
+ this.$set(this.data, 'loading', false);
170
+ if (children.length) {
171
+ this.$set(this.data, this.childrenKey, children);
172
+ this.$nextTick(() => this.handleExpand());
173
+ }
174
+ });
175
+ return;
176
+ }
177
+ }
178
+ if (item[this.childrenKey] && item[this.childrenKey].length) {
179
+ this.$set(this.data, 'expand', !this.data.expand);
180
+ this.dispatch('Tree', 'toggle-expand', this.data);
181
+ }
182
+ },
183
+ handleSelect() {
184
+ if (this.data.disabled) {
185
+ return;
186
+ }
187
+ this.dispatch('Tree', 'on-selected', this.data.nodeKey);
188
+ },
189
+ handleDblclick() {
190
+ if (this.data.disabled) {
191
+ return;
192
+ }
193
+ this.dispatch('Tree', 'on-dbl-click', this.data.nodeKey);
194
+ },
195
+ handleCheck() {
196
+ if (this.data.disabled) {
197
+ return;
198
+ }
199
+ const changes = {
200
+ checked: this.data.checked,
201
+ nodeKey: this.data.nodeKey,
202
+ };
203
+ this.dispatch('Tree', 'on-click-checkbox', changes);
204
+ },
205
+ handleContextmenu() {
206
+ this.dispatch('Tree', 'on-context-menu', this.data.nodeKey);
207
+ },
208
+ },
209
+ };
210
+ </script>
211
+
212
+ <style scoped>
213
+
214
+ </style>
@@ -0,0 +1,296 @@
1
+ <template>
2
+ <div :class="prefixCls">
3
+ <tree-node
4
+ v-for="(item, i) in stateTree"
5
+ :key="i"
6
+ :data="item"
7
+ :use-checkbox="useCheckbox"
8
+ :children-key="childrenKey"
9
+ :title-key="titleKey"
10
+ :expand-icon="expandIcon"
11
+ :collapse-icon="collapseIcon"
12
+ />
13
+ <div v-if="!stateTree.length" :class="[prefixCls + '-empty']">
14
+ {{ emptyText }}
15
+ </div>
16
+ <ev-context-menu
17
+ ref="contextmenu"
18
+ :is-use="showContextmenu"
19
+ :items="menuItems"
20
+ @click="selectContextmenu"
21
+ @on-context-menu="initShowContextmenu"
22
+ />
23
+ </div>
24
+ </template>
25
+ <script>
26
+ import TreeNode from './tree-node';
27
+
28
+ const prefixCls = 'ev-tree';
29
+
30
+ export default {
31
+ name: 'Tree',
32
+ components: {
33
+ TreeNode,
34
+ },
35
+ props: {
36
+ data: {
37
+ type: Array,
38
+ default() {
39
+ return [];
40
+ },
41
+ },
42
+ useCheckbox: {
43
+ type: Boolean,
44
+ default: false,
45
+ },
46
+ emptyText: {
47
+ type: String,
48
+ default: 'No Data',
49
+ },
50
+ childrenKey: {
51
+ type: String,
52
+ default: 'children',
53
+ },
54
+ loadData: {
55
+ type: Function,
56
+ default: null,
57
+ },
58
+ render: {
59
+ type: Function,
60
+ default: null,
61
+ },
62
+ menuItems: {
63
+ type: Array,
64
+ default() {
65
+ return [];
66
+ },
67
+ },
68
+ titleKey: {
69
+ type: String,
70
+ default: 'title',
71
+ },
72
+ expandIcon: {
73
+ type: String,
74
+ default: '',
75
+ },
76
+ collapseIcon: {
77
+ type: String,
78
+ default: '',
79
+ },
80
+ },
81
+ data() {
82
+ return {
83
+ prefixCls,
84
+ stateTree: this.data,
85
+ flatState: [],
86
+ showContextmenu: false,
87
+ };
88
+ },
89
+ watch: {
90
+ data: {
91
+ deep: true,
92
+ handler() {
93
+ this.stateTree = this.data;
94
+ this.flatState = this.compileFlatState();
95
+ this.rebuildTree();
96
+ },
97
+ },
98
+ },
99
+ created() {
100
+ this.flatState = this.compileFlatState();
101
+ this.rebuildTree();
102
+ },
103
+ mounted() {
104
+ this.$on('on-click-checkbox', this.handleCheck);
105
+ this.$on('on-selected', this.handleSelect);
106
+ this.$on('on-dbl-click', this.handleDblclick);
107
+ this.$on('on-context-menu', this.handleContextmenu);
108
+ this.$on('toggle-expand', node => this.$emit('on-toggle-expand', node));
109
+ },
110
+ methods: {
111
+ compileFlatState() { // so we have always a relation parent/children of each node
112
+ let keyCounter = 0;
113
+ const childrenKey = this.childrenKey;
114
+ const flatTree = [];
115
+ function flattenChildren(n, parent) {
116
+ const node = n;
117
+ node.nodeKey = keyCounter++;
118
+ flatTree[node.nodeKey] = { node, nodeKey: node.nodeKey };
119
+ if (typeof parent !== 'undefined') {
120
+ flatTree[node.nodeKey].parent = parent.nodeKey;
121
+ flatTree[parent.nodeKey][childrenKey].push(node.nodeKey);
122
+ }
123
+ if (node[childrenKey]) {
124
+ flatTree[node.nodeKey][childrenKey] = [];
125
+ node[childrenKey].forEach(child => flattenChildren(child, node));
126
+ }
127
+ }
128
+ this.stateTree.forEach((rootNode) => {
129
+ flattenChildren(rootNode);
130
+ });
131
+ return flatTree;
132
+ },
133
+ rebuildTree() { // only called when `data` prop changes
134
+ const checkedNodes = this.getCheckedNodes();
135
+ checkedNodes.forEach((node) => {
136
+ this.updateTreeDown(node, { checked: true });
137
+ // propagate upwards
138
+ const parentKey = this.flatState[node.nodeKey].parent;
139
+ if (!parentKey && parentKey !== 0) {
140
+ return;
141
+ }
142
+ const parent = this.flatState[parentKey].node;
143
+ const childHasCheckSetter = typeof node.checked !== 'undefined' && node.checked;
144
+ if (childHasCheckSetter && parent.checked !== node.checked) {
145
+ this.updateTreeUp(node.nodeKey); // update tree upwards
146
+ }
147
+ });
148
+ },
149
+ updateTreeUp(nodeKey) {
150
+ const parentKey = this.flatState[nodeKey].parent;
151
+ if (typeof parentKey === 'undefined') {
152
+ return;
153
+ }
154
+ const node = this.flatState[nodeKey].node;
155
+ const parent = this.flatState[parentKey].node;
156
+ if (node.checked === parent.checked && node.indeterminate === parent.indeterminate) {
157
+ return; // no need to update upwards
158
+ }
159
+ if (node.checked === true) {
160
+ this.$set(parent, 'checked', parent[this.childrenKey].every(n => n.checked));
161
+ this.$set(parent, 'indeterminate', !parent.checked);
162
+ } else {
163
+ this.$set(parent, 'checked', false);
164
+ this.$set(parent, 'indeterminate', parent[this.childrenKey].some(n => n.checked || node.indeterminate));
165
+ }
166
+ this.updateTreeUp(parentKey);
167
+ },
168
+ updateTreeDown(node, changes = {}) {
169
+ /* eslint-disable */
170
+ for (const key in changes) {
171
+ this.$set(node, key, changes[key]);
172
+ }
173
+ /* eslint-enable */
174
+ if (node[this.childrenKey]) {
175
+ node[this.childrenKey].forEach((child) => {
176
+ this.updateTreeDown(child, changes);
177
+ });
178
+ }
179
+ },
180
+ getSelectedNodes() {
181
+ /* public API */
182
+ return this.flatState.filter(obj => obj.node.selected).map(obj => obj.node);
183
+ },
184
+ getCheckedNodes() {
185
+ /* public API */
186
+ return this.flatState.filter(obj => obj.node.checked).map(obj => obj.node);
187
+ },
188
+ handleSelect(nodeKey) {
189
+ const node = this.flatState[nodeKey].node;
190
+ const currentSelectedKey = this.flatState.findIndex(obj => obj.node.selected);
191
+ let beforeSelectedNode = null;
192
+ if (currentSelectedKey >= 0 && currentSelectedKey !== nodeKey) {
193
+ beforeSelectedNode = this.flatState[currentSelectedKey].node;
194
+ this.$set(beforeSelectedNode, 'selected', false);
195
+ }
196
+ this.$set(node, 'selected', !node.selected);
197
+ this.$emit('on-select', this.getSelectedNodes(), beforeSelectedNode);
198
+ this.$emit('on-click', node);
199
+ },
200
+ handleDblclick(nodeKey) {
201
+ const node = this.flatState[nodeKey].node;
202
+ this.$emit('on-dblclick', node);
203
+ },
204
+ handleCheck({ checked, nodeKey }) {
205
+ const node = this.flatState[nodeKey].node;
206
+ this.$set(node, 'checked', checked);
207
+ this.$set(node, 'indeterminate', false);
208
+ this.updateTreeUp(nodeKey); // propagate up
209
+ this.updateTreeDown(node, { checked, indeterminate: false }); // reset `indeterminate`
210
+ this.$emit('on-check-change', this.getCheckedNodes());
211
+ },
212
+ handleContextmenu(nodeKey) {
213
+ const node = this.flatState[nodeKey].node;
214
+ this.$emit('before-contextmenu', node);
215
+ this.showContextmenu = true;
216
+ },
217
+ selectContextmenu(item) {
218
+ this.$emit('select-contextmenu', item);
219
+ this.$refs.contextmenu.hide();
220
+ },
221
+ initShowContextmenu() {
222
+ this.showContextmenu = false;
223
+ },
224
+ },
225
+ };
226
+ </script>
227
+ <style lang="scss">
228
+ .ev-tree {
229
+ li {
230
+ ul {
231
+ margin: 0;
232
+ padding: 0 0 0 18px;
233
+ }
234
+ }
235
+ ul {
236
+ list-style: none;
237
+ margin: 0;
238
+ padding: 0;
239
+ font-size: 12px;
240
+ li {
241
+ list-style: none;
242
+ margin: 8px 0;
243
+ padding: 0;
244
+ white-space: nowrap;
245
+ outline: 0;
246
+ text-align: start;
247
+ user-select: none;
248
+ }
249
+ }
250
+ }
251
+ .ev-tree-arrow {
252
+ display: inline-block;
253
+ text-align: center;
254
+ margin-right: 2px;
255
+ vertical-align: middle;
256
+ i {
257
+ position: relative;
258
+ cursor: pointer;
259
+ transition: all .2s ease-in-out;
260
+ font-size: 14px;
261
+ vertical-align: middle;
262
+ }
263
+ }
264
+ .ev-tree-title {
265
+ border-radius: 3px;
266
+ cursor: pointer;
267
+ vertical-align: middle;
268
+ user-select: none;
269
+ &:hover {
270
+ background-color: #eaf4fe;
271
+ }
272
+ }
273
+ .ev-tree-title-selected, .ev-tree-title-selected:hover {
274
+ background-color: #d5e8fc;
275
+ }
276
+ .ev-tree-icon {
277
+ vertical-align: middle;
278
+ font-size: 16px;
279
+ }
280
+ .ev-tree-node {
281
+ display: inline-block;
282
+ width: calc(100% - 21px);
283
+ vertical-align: middle;
284
+ .ev-checkbox {
285
+ display: inline-block;
286
+ float: none;
287
+ .ev-checkbox-label {
288
+ display: inline;
289
+ padding-left: 20px;
290
+ }
291
+ }
292
+ .ev-tree-node-selected, .ev-tree-node-selected:hover {
293
+ background-color: #d5e8fc;
294
+ }
295
+ }
296
+ </style>
@@ -0,0 +1,7 @@
1
+ import TreeTable from './tree.table';
2
+ import util from './tree.util';
3
+
4
+ export {
5
+ TreeTable,
6
+ util,
7
+ };
@@ -545,8 +545,8 @@ button {
545
545
  /*display: inline-block;*/
546
546
  float: left;
547
547
  overflow: hidden;
548
- background: url('../../images/evui_icon.png') no-repeat -114px -554px;
549
- width: 16px;
548
+ background: url('../../images/evui_icon.png') no-repeat -119px -554px;
549
+ width: 11px;
550
550
  height: 19px;
551
551
  cursor: pointer;
552
552
  margin: 0;
@@ -557,8 +557,8 @@ button {
557
557
  /*display: inline-block;*/
558
558
  float: left;
559
559
  overflow: hidden;
560
- background: url('../../images/evui_icon.png') no-repeat -114px -570px;
561
- width: 16px;
560
+ background: url('../../images/evui_icon.png') no-repeat -119px -570px;
561
+ width: 11px;
562
562
  height: 19px;
563
563
  cursor: pointer;
564
564
  margin: 0;
@@ -570,7 +570,7 @@ button {
570
570
  float: left;
571
571
  overflow: hidden;
572
572
  /*background: url('../../images/evui_icon.png') no-repeat -114px -575px;*/
573
- width: 16px;
573
+ width: 11px;
574
574
  height: 19px;
575
575
  margin: 0;
576
576
  /*vertical-align: middle;*/
@@ -582,7 +582,7 @@ button {
582
582
  float: left;
583
583
  overflow: hidden;
584
584
  background: url('../../images/evui_icon.png') no-repeat -190px -261px;
585
- width: 16px;
585
+ width: 11px;
586
586
  height: 19px;
587
587
  cursor: pointer;
588
588
  margin: 0;
@@ -594,7 +594,7 @@ button {
594
594
  float: left;
595
595
  overflow: hidden;
596
596
  background: url('../../images/evui_icon.png') no-repeat -349px -261px;
597
- width: 16px;
597
+ width: 11px;
598
598
  height: 19px;
599
599
  cursor: pointer;
600
600
  margin: 0;
@@ -606,7 +606,7 @@ button {
606
606
  float: left;
607
607
  overflow: hidden;
608
608
  background: url('../../images/evui_icon.png') no-repeat -240px -261px;
609
- width: 16px;
609
+ width: 11px;
610
610
  height: 19px;
611
611
  margin: 0;
612
612
  /*vertical-align: middle;*/
@@ -617,7 +617,7 @@ button {
617
617
  float: left;
618
618
  overflow: hidden;
619
619
  background: url('../../images/evui_icon.png') no-repeat -268px -261px;
620
- width: 16px;
620
+ width: 11px;
621
621
  height: 19px;
622
622
  margin: 0;
623
623
  /*vertical-align: middle;*/
@@ -628,7 +628,7 @@ button {
628
628
  float: left;
629
629
  overflow: hidden;
630
630
  background: url('../../images/evui_icon.png') no-repeat -294px -261px;
631
- width: 16px;
631
+ width: 11px;
632
632
  height: 19px;
633
633
  cursor: pointer;
634
634
  margin: 0;
@@ -640,7 +640,7 @@ button {
640
640
  float: left;
641
641
  overflow: hidden;
642
642
  background: url('../../images/evui_icon.png') no-repeat -217px -261px;
643
- width: 16px;
643
+ width: 11px;
644
644
  height: 19px;
645
645
  cursor: pointer;
646
646
  margin: 0;
@@ -652,7 +652,7 @@ button {
652
652
  float: left;
653
653
  overflow: hidden;
654
654
  background: url('../../images/evui_icon.png') no-repeat -319px -261px;
655
- width: 16px;
655
+ width: 11px;
656
656
  height: 19px;
657
657
  margin: 0;
658
658
  /*vertical-align: middle;*/