cy-element-ui 1.0.57 → 1.0.59

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 (291) hide show
  1. package/lib/autocomplete.js +25 -25
  2. package/lib/calendar.js +12 -12
  3. package/lib/carousel-item.js +4 -4
  4. package/lib/carousel.js +4 -4
  5. package/lib/cascader-panel.js +23 -23
  6. package/lib/cascader.js +32 -32
  7. package/lib/checkbox-button.js +4 -4
  8. package/lib/checkbox-group.js +4 -4
  9. package/lib/checkbox.js +4 -4
  10. package/lib/collapse-item.js +8 -8
  11. package/lib/color-picker.js +21 -21
  12. package/lib/date-picker.js +78 -78
  13. package/lib/descriptions.js +2 -2
  14. package/lib/dialog.js +8 -8
  15. package/lib/directives/repeat-click.js +2 -2
  16. package/lib/drawer.js +6 -6
  17. package/lib/dropdown-item.js +4 -4
  18. package/lib/dropdown-menu.js +4 -4
  19. package/lib/dropdown.js +12 -12
  20. package/lib/element-ui.common.js +598 -916
  21. package/lib/empty.js +4 -4
  22. package/lib/fileUpload.js +30 -30
  23. package/lib/form-item.js +8 -8
  24. package/lib/form.js +4 -4
  25. package/lib/image.js +19 -19
  26. package/lib/index.js +1 -1
  27. package/lib/infinite-scroll.js +4 -4
  28. package/lib/input-number.js +15 -15
  29. package/lib/input.js +10 -10
  30. package/lib/loading.js +8 -8
  31. package/lib/locale/format.js +1 -1
  32. package/lib/locale/index.js +1 -1
  33. package/lib/menu-item.js +6 -6
  34. package/lib/menu.js +6 -6
  35. package/lib/message-box.js +20 -20
  36. package/lib/message.js +6 -6
  37. package/lib/mixins/locale.js +1 -1
  38. package/lib/mixins/migrating.js +2 -2
  39. package/lib/notification.js +6 -6
  40. package/lib/option-group.js +4 -4
  41. package/lib/option.js +6 -6
  42. package/lib/page-header.js +4 -4
  43. package/lib/pagination.js +10 -10
  44. package/lib/popconfirm.js +8 -8
  45. package/lib/popover.js +8 -8
  46. package/lib/radio-button.js +4 -4
  47. package/lib/radio-group.js +4 -4
  48. package/lib/radio.js +4 -4
  49. package/lib/rate.js +8 -8
  50. package/lib/scrollbar.js +8 -8
  51. package/lib/select.js +37 -37
  52. package/lib/slider.js +15 -15
  53. package/lib/statistic.js +4 -4
  54. package/lib/steps.js +4 -4
  55. package/lib/submenu.js +6 -6
  56. package/lib/switch.js +8 -8
  57. package/lib/tabDialog.js +6 -6
  58. package/lib/table-column.js +8 -8
  59. package/lib/table.js +41 -41
  60. package/lib/tabs.js +6 -6
  61. package/lib/theme-chalk/alert.css +1 -0
  62. package/lib/theme-chalk/aside.css +1 -0
  63. package/lib/theme-chalk/autocomplete.css +1 -0
  64. package/lib/theme-chalk/avatar.css +1 -0
  65. package/lib/theme-chalk/backtop.css +1 -0
  66. package/lib/theme-chalk/badge.css +1 -0
  67. package/lib/theme-chalk/base.css +1 -1
  68. package/lib/theme-chalk/breadcrumb-item.css +0 -0
  69. package/lib/theme-chalk/breadcrumb.css +1 -0
  70. package/lib/theme-chalk/button-group.css +0 -0
  71. package/lib/theme-chalk/button.css +1 -0
  72. package/lib/theme-chalk/calendar.css +1 -0
  73. package/lib/theme-chalk/card.css +1 -0
  74. package/lib/theme-chalk/carousel-item.css +1 -0
  75. package/lib/theme-chalk/carousel.css +1 -0
  76. package/lib/theme-chalk/cascader-panel.css +1 -0
  77. package/lib/theme-chalk/cascader.css +1 -0
  78. package/lib/theme-chalk/checkbox-button.css +0 -0
  79. package/lib/theme-chalk/checkbox-group.css +0 -0
  80. package/lib/theme-chalk/checkbox.css +1 -0
  81. package/lib/theme-chalk/col.css +1 -0
  82. package/lib/theme-chalk/collapse-item.css +0 -0
  83. package/lib/theme-chalk/collapse.css +1 -0
  84. package/lib/theme-chalk/color-picker.css +1 -0
  85. package/lib/theme-chalk/container.css +1 -0
  86. package/lib/theme-chalk/date-picker.css +1 -0
  87. package/lib/theme-chalk/descriptions-item.css +1 -0
  88. package/lib/theme-chalk/descriptions.css +1 -0
  89. package/lib/theme-chalk/dialog.css +1 -0
  90. package/lib/theme-chalk/display.css +1 -0
  91. package/lib/theme-chalk/divider.css +1 -0
  92. package/lib/theme-chalk/drawer.css +1 -0
  93. package/lib/theme-chalk/dropdown-item.css +0 -0
  94. package/lib/theme-chalk/dropdown-menu.css +0 -0
  95. package/lib/theme-chalk/dropdown.css +1 -0
  96. package/lib/theme-chalk/element.css +1 -1
  97. package/lib/theme-chalk/empty.css +1 -0
  98. package/lib/theme-chalk/fileUpload.css +1 -1
  99. package/lib/theme-chalk/fonts/element-icons.ttf +0 -0
  100. package/lib/theme-chalk/fonts/element-icons.woff +0 -0
  101. package/lib/theme-chalk/footer.css +1 -0
  102. package/lib/theme-chalk/form-item.css +0 -0
  103. package/lib/theme-chalk/form.css +1 -0
  104. package/lib/theme-chalk/header.css +1 -0
  105. package/lib/theme-chalk/icon.css +1 -0
  106. package/lib/theme-chalk/image.css +1 -0
  107. package/lib/theme-chalk/index.css +1 -1
  108. package/lib/theme-chalk/infinite-scroll.css +0 -0
  109. package/lib/theme-chalk/infiniteScroll.css +0 -0
  110. package/lib/theme-chalk/input-number.css +1 -0
  111. package/lib/theme-chalk/input.css +1 -0
  112. package/lib/theme-chalk/link.css +1 -0
  113. package/lib/theme-chalk/loading.css +1 -0
  114. package/lib/theme-chalk/main.css +1 -0
  115. package/lib/theme-chalk/menu-item-group.css +0 -0
  116. package/lib/theme-chalk/menu-item.css +0 -0
  117. package/lib/theme-chalk/menu.css +1 -0
  118. package/lib/theme-chalk/message-box.css +1 -0
  119. package/lib/theme-chalk/message.css +1 -0
  120. package/lib/theme-chalk/notification.css +1 -0
  121. package/lib/theme-chalk/option-group.css +1 -0
  122. package/lib/theme-chalk/option.css +1 -0
  123. package/lib/theme-chalk/page-header.css +1 -0
  124. package/lib/theme-chalk/pagination.css +1 -0
  125. package/lib/theme-chalk/popconfirm.css +1 -0
  126. package/lib/theme-chalk/popover.css +1 -0
  127. package/lib/theme-chalk/popper.css +1 -0
  128. package/lib/theme-chalk/progress.css +1 -0
  129. package/lib/theme-chalk/radio-button.css +1 -0
  130. package/lib/theme-chalk/radio-group.css +1 -0
  131. package/lib/theme-chalk/radio.css +1 -0
  132. package/lib/theme-chalk/rate.css +1 -0
  133. package/lib/theme-chalk/reset.css +1 -0
  134. package/lib/theme-chalk/result.css +1 -0
  135. package/lib/theme-chalk/row.css +1 -0
  136. package/lib/theme-chalk/scrollbar.css +1 -0
  137. package/lib/theme-chalk/select-dropdown.css +1 -0
  138. package/lib/theme-chalk/select.css +1 -0
  139. package/lib/theme-chalk/selectDisplayInput.css +1 -1
  140. package/lib/theme-chalk/skeleton-item.css +1 -0
  141. package/lib/theme-chalk/skeleton.css +1 -0
  142. package/lib/theme-chalk/slider.css +1 -0
  143. package/lib/theme-chalk/spinner.css +1 -0
  144. package/lib/theme-chalk/statistic.css +1 -0
  145. package/lib/theme-chalk/step.css +1 -0
  146. package/lib/theme-chalk/steps.css +1 -0
  147. package/lib/theme-chalk/subTitle.css +1 -1
  148. package/lib/theme-chalk/submenu.css +0 -0
  149. package/lib/theme-chalk/switch.css +1 -0
  150. package/lib/theme-chalk/tab-pane.css +0 -0
  151. package/lib/theme-chalk/tabDialog.css +1 -1
  152. package/lib/theme-chalk/table-column.css +1 -0
  153. package/lib/theme-chalk/table.css +1 -0
  154. package/lib/theme-chalk/tabs.css +1 -0
  155. package/lib/theme-chalk/tag.css +1 -0
  156. package/lib/theme-chalk/time-picker.css +1 -0
  157. package/lib/theme-chalk/time-select.css +1 -0
  158. package/lib/theme-chalk/timeline-item.css +1 -0
  159. package/lib/theme-chalk/timeline.css +1 -0
  160. package/lib/theme-chalk/tooltip.css +1 -0
  161. package/lib/theme-chalk/transfer.css +1 -0
  162. package/lib/theme-chalk/tree.css +1 -0
  163. package/lib/theme-chalk/treeSelect.css +1 -1
  164. package/lib/theme-chalk/upload.css +1 -0
  165. package/lib/time-picker.js +37 -37
  166. package/lib/time-select.js +20 -20
  167. package/lib/tooltip.js +6 -6
  168. package/lib/transfer.js +23 -23
  169. package/lib/transitions/collapse-transition.js +1 -1
  170. package/lib/tree.js +23 -23
  171. package/lib/treeSelect.js +20 -20
  172. package/lib/upload.js +11 -11
  173. package/lib/utils/clickoutside.js +1 -1
  174. package/lib/utils/date-util.js +2 -2
  175. package/lib/utils/popup/index.js +2 -2
  176. package/lib/utils/popup/popup-manager.js +1 -1
  177. package/lib/utils/util.js +1 -1
  178. package/lib/utils/vdom.js +1 -1
  179. package/lib/utils/vue-popper.js +1 -1
  180. package/package.json +2 -2
  181. package/packages/autocomplete/src/autocomplete-suggestions.vue +3 -3
  182. package/packages/autocomplete/src/autocomplete.vue +6 -6
  183. package/packages/calendar/src/date-table.vue +2 -2
  184. package/packages/calendar/src/main.vue +5 -5
  185. package/packages/carousel/src/item.vue +1 -1
  186. package/packages/carousel/src/main.vue +1 -1
  187. package/packages/cascader/src/cascader.vue +15 -15
  188. package/packages/cascader-panel/src/cascader-menu.vue +3 -3
  189. package/packages/cascader-panel/src/cascader-node.vue +3 -3
  190. package/packages/cascader-panel/src/cascader-panel.vue +4 -4
  191. package/packages/cascader-panel/src/node.js +2 -2
  192. package/packages/cascader-panel/src/store.js +1 -1
  193. package/packages/checkbox/src/checkbox-button.vue +1 -1
  194. package/packages/checkbox/src/checkbox-group.vue +1 -1
  195. package/packages/checkbox/src/checkbox.vue +1 -1
  196. package/packages/collapse/src/collapse-item.vue +3 -3
  197. package/packages/color-picker/src/components/picker-dropdown.vue +4 -4
  198. package/packages/color-picker/src/main.vue +2 -2
  199. package/packages/date-picker/src/basic/date-table.vue +3 -3
  200. package/packages/date-picker/src/basic/month-table.vue +4 -4
  201. package/packages/date-picker/src/basic/time-spinner.vue +3 -3
  202. package/packages/date-picker/src/basic/year-table.vue +3 -3
  203. package/packages/date-picker/src/panel/date-range.vue +5 -5
  204. package/packages/date-picker/src/panel/date.vue +5 -5
  205. package/packages/date-picker/src/panel/month-range.vue +5 -5
  206. package/packages/date-picker/src/panel/time-range.vue +2 -2
  207. package/packages/date-picker/src/panel/time-select.vue +2 -2
  208. package/packages/date-picker/src/panel/time.vue +2 -2
  209. package/packages/date-picker/src/picker.vue +6 -6
  210. package/packages/descriptions/src/index.js +1 -1
  211. package/packages/dialog/src/component.vue +3 -3
  212. package/packages/drawer/src/main.vue +2 -2
  213. package/packages/dropdown/src/dropdown-item.vue +1 -1
  214. package/packages/dropdown/src/dropdown-menu.vue +1 -1
  215. package/packages/dropdown/src/dropdown.vue +6 -6
  216. package/packages/empty/src/index.vue +1 -1
  217. package/packages/fileUpload/src/main.vue +430 -430
  218. package/packages/form/src/form-item.vue +3 -3
  219. package/packages/form/src/form.vue +1 -1
  220. package/packages/image/src/image-viewer.vue +3 -3
  221. package/packages/image/src/main.vue +3 -3
  222. package/packages/infinite-scroll/src/main.js +2 -2
  223. package/packages/input/src/input.vue +4 -4
  224. package/packages/input-number/src/input-number.vue +3 -3
  225. package/packages/loading/src/directive.js +3 -3
  226. package/packages/loading/src/index.js +4 -4
  227. package/packages/menu/src/menu-item.vue +2 -2
  228. package/packages/menu/src/menu.vue +4 -4
  229. package/packages/menu/src/submenu.vue +3 -3
  230. package/packages/message/src/main.js +3 -3
  231. package/packages/message-box/src/main.js +2 -2
  232. package/packages/message-box/src/main.vue +7 -7
  233. package/packages/notification/src/main.js +3 -3
  234. package/packages/page-header/src/main.vue +1 -1
  235. package/packages/pagination/src/pagination.js +5 -5
  236. package/packages/popconfirm/src/main.vue +3 -3
  237. package/packages/popover/src/main.vue +4 -4
  238. package/packages/radio/src/radio-button.vue +1 -1
  239. package/packages/radio/src/radio-group.vue +1 -1
  240. package/packages/radio/src/radio.vue +1 -1
  241. package/packages/rate/src/main.vue +3 -3
  242. package/packages/scrollbar/src/bar.js +1 -1
  243. package/packages/scrollbar/src/main.js +3 -3
  244. package/packages/select/src/option-group.vue +1 -1
  245. package/packages/select/src/option.vue +2 -2
  246. package/packages/select/src/select-dropdown.vue +1 -1
  247. package/packages/select/src/select.vue +11 -11
  248. package/packages/selectDisplayInput/src/main.vue +75 -75
  249. package/packages/slider/src/button.vue +1 -1
  250. package/packages/slider/src/main.vue +2 -2
  251. package/packages/statistic/src/main.vue +1 -1
  252. package/packages/steps/src/steps.vue +1 -1
  253. package/packages/switch/src/component.vue +3 -3
  254. package/packages/tabDialog/src/main.vue +277 -277
  255. package/packages/table/src/config.js +1 -1
  256. package/packages/table/src/filter-panel.vue +7 -7
  257. package/packages/table/src/store/current.js +1 -1
  258. package/packages/table/src/store/index.js +1 -1
  259. package/packages/table/src/store/watcher.js +1 -1
  260. package/packages/table/src/table-body.js +4 -4
  261. package/packages/table/src/table-column.js +1 -1
  262. package/packages/table/src/table-header.js +2 -2
  263. package/packages/table/src/table-layout.js +1 -1
  264. package/packages/table/src/table-row.js +1 -1
  265. package/packages/table/src/table.vue +5 -5
  266. package/packages/table/src/util.js +1 -1
  267. package/packages/tabs/src/tab-bar.vue +1 -1
  268. package/packages/tabs/src/tab-nav.vue +1 -1
  269. package/packages/tooltip/src/main.js +3 -3
  270. package/packages/transfer/src/main.vue +4 -4
  271. package/packages/transfer/src/transfer-panel.vue +4 -4
  272. package/packages/tree/src/model/node.js +2 -2
  273. package/packages/tree/src/tree-node.vue +3 -3
  274. package/packages/tree/src/tree.vue +3 -3
  275. package/packages/treeSelect/src/main.vue +325 -325
  276. package/packages/upload/src/index.vue +2 -2
  277. package/packages/upload/src/upload-list.vue +2 -2
  278. package/src/directives/repeat-click.js +2 -2
  279. package/src/index.js +1 -1
  280. package/src/locale/format.js +1 -1
  281. package/src/locale/index.js +1 -1
  282. package/src/mixins/locale.js +1 -1
  283. package/src/mixins/migrating.js +2 -2
  284. package/src/transitions/collapse-transition.js +1 -1
  285. package/src/utils/clickoutside.js +1 -1
  286. package/src/utils/date-util.js +2 -2
  287. package/src/utils/popup/index.js +2 -2
  288. package/src/utils/popup/popup-manager.js +1 -1
  289. package/src/utils/util.js +1 -1
  290. package/src/utils/vdom.js +1 -1
  291. package/src/utils/vue-popper.js +1 -1
@@ -1,325 +1,325 @@
1
- <template>
2
- <div class="cy-tree-select">
3
- <el-popover v-model="popoverOpen" placement="bottom-start" width="300" trigger="click" :popper-class="popperClass" @show="popoverOpen = true" @hide="popoverOpen = false">
4
- <div class="cy-tree-select-select-con">
5
- <div v-if="filterable" class="cy-tree-select-select-con-s">
6
- <el-input
7
- v-model="filterText"
8
- placeholder="搜索"
9
- prefix-icon="el-icon-search"
10
- clearable
11
- size="small"
12
- ></el-input>
13
- </div>
14
- <div v-if="showCheckStrictly" class="cy-tree-select-select-con-t">
15
- <el-checkbox v-model="isCheckStrictly">父子节点联动</el-checkbox>
16
- </div>
17
-
18
- <div class="cy-tree-select-select-con-c">
19
- <el-tree
20
- ref="tree"
21
- :data="treeOptions"
22
- :show-checkbox="multiple"
23
- :node-key="defaultOptions.id"
24
- :check-strictly="!isCheckStrictly"
25
- :props="defaultOptions"
26
- :expand-on-click-node="false"
27
- :default-expand-all="defaultExpandAll"
28
- :filter-node-method="filterNode"
29
- @check="treeCheck"
30
- @node-click="treeClick"
31
- ></el-tree>
32
- </div>
33
- </div>
34
-
35
- <div slot="reference" class="cy-tree-select-select" :class="size" :style="vStyle">
36
- <div class="cy-tree-select-select-v">
37
- <span v-if="checkedArr.length < 1" class="cy-tree-select-select-v-placeholder">{{ placeholder }}</span>
38
- <span v-else>{{ checkedArr.map(item => item[defaultOptions.label]).join() }}</span>
39
- </div>
40
-
41
- <div class="cy-tree-select-select-v-icon" @mouseenter="isClearIcon = true" @mouseleave="isClearIcon = false">
42
- <i v-if="isClearIcon && clearable" class="el-icon-circle-close" @click.stop="handleClear"></i>
43
- <i v-else class="el-icon-arrow-down cy-tree-select-select-v-arrow" :class="{ 'cy-tree-select-select-v-arrow-show': popoverOpen }"></i>
44
- </div>
45
- </div>
46
- </el-popover>
47
- </div>
48
- </template>
49
-
50
- <script>
51
- import ElCheckbox from 'cy-element-ui/packages/checkbox';
52
- import ElPopover from 'cy-element-ui/packages/popover';
53
-
54
- export default {
55
- name: 'CyTreeSelect',
56
- component: [
57
- ElCheckbox,
58
- ElPopover
59
- ],
60
- model: {
61
- prop: 'value',
62
- event: 'change',
63
- },
64
- props: {
65
- value: {
66
- type: [String, Number, Array],
67
- default: ''
68
- },
69
-
70
- options: {
71
- type: Array,
72
- default: []
73
- },
74
-
75
- placeholder: {
76
- type: String,
77
- default: ''
78
- },
79
-
80
- // 尺寸
81
- size: {
82
- type: String,
83
- },
84
-
85
- // 是否显示搜索框
86
- filterable: {
87
- type: Boolean,
88
- default: false
89
- },
90
-
91
- // 是否显示 父子节点是否联动 多选框
92
- showCheckStrictly: {
93
- type: Boolean,
94
- default: true
95
- },
96
-
97
- // 父子节点是否联动
98
- checkStrictly: {
99
- type: Boolean,
100
- default: true
101
- },
102
-
103
- // 是否显示清空按钮
104
- clearable: {
105
- type: Boolean,
106
- default: false
107
- },
108
-
109
- // 是否多选
110
- multiple: {
111
- type: Boolean,
112
- default: false,
113
- },
114
-
115
- // 默认数据参数选项
116
- defaultOptions: {
117
- type: Object,
118
- default: () => {
119
- return {
120
- children: 'children',
121
- label: 'label',
122
- id: 'id'
123
- }
124
- }
125
- },
126
-
127
- // 显示的文本框样式
128
- vStyle: {
129
- type: [Array, String, Object],
130
- default: ''
131
- },
132
-
133
- // 树数据区域外层popover的class
134
- popperClass: {
135
- type: String,
136
- default: ''
137
- },
138
-
139
- // 是否默认展开所有节点
140
- defaultExpandAll: {
141
- type: Boolean,
142
- default: false
143
- }
144
- },
145
- data() {
146
- return {
147
- isCheckStrictly: true, // 父子节点是否联动
148
- popoverOpen: false, // 显示状态
149
- isClearIcon: false, // 清空按钮显示状态
150
-
151
- treeOptions: [], // 部门树列表
152
- treeArr: [], // 部门列表
153
- filterText: '', // 搜索关键词
154
- matchedNodeIds: [], // 匹配的节点ID集合
155
- }
156
- },
157
- computed: {
158
- // 当前选中的数组
159
- checkedArr() {
160
- if (this.multiple) {
161
- let arr = [];
162
- this.value && this.value.forEach(id => {
163
- let cItem = this.treeArr.filter(tItem => tItem[this.defaultOptions.id] === id)[0];
164
- if (cItem) arr.push(cItem);
165
- })
166
- return arr
167
- } else {
168
- let cItem = this.treeArr.filter(tItem => tItem[this.defaultOptions.id] === Number(this.value))[0];
169
- return cItem ? [cItem] : []
170
- }
171
- }
172
- },
173
- watch: {
174
- checkStrictly: {
175
- immediate: true,
176
- handler() {
177
- this.isCheckStrictly = this.checkStrictly;
178
- }
179
- },
180
-
181
- value: {
182
- immediate: true,
183
- deep: true,
184
- handler() {
185
- this.$nextTick(() => {
186
- this.init();
187
- })
188
- }
189
- },
190
-
191
- options: {
192
- deep: true,
193
- immediate: true,
194
- handler() {
195
- this.treeOptions = this.options;
196
- this.treeArr = this.turnFormatTreeData([], this.treeOptions, 0);
197
- }
198
- },
199
-
200
- filterText(val) {
201
- if (val) {
202
- // 先找出所有匹配的节点及其子节点
203
- this.matchedNodeIds = this.findMatchedNodes(val, this.treeOptions);
204
- // 执行过滤
205
- this.$refs.tree.filter(val);
206
- // 展开所有匹配的节点
207
- this.$nextTick(() => {
208
- this.expandMatchedNodes();
209
- });
210
- } else {
211
- this.matchedNodeIds = [];
212
- this.$refs.tree.filter(val);
213
- }
214
- }
215
- },
216
- created() {
217
-
218
- },
219
- methods: {
220
- /**
221
- * 树节点过滤
222
- */
223
- filterNode(value, data) {
224
- if (!value) return true;
225
- // 如果当前节点或其祖先节点匹配了,就显示
226
- return this.matchedNodeIds.includes(data[this.defaultOptions.id]);
227
- },
228
-
229
- /**
230
- * 查找所有匹配的节点及其子节点ID
231
- */
232
- findMatchedNodes(value, nodes, parentMatched = false) {
233
- let matchedIds = [];
234
-
235
- nodes.forEach(node => {
236
- const currentNodeMatched = node[this.defaultOptions.label].indexOf(value) !== -1;
237
- const shouldShow = currentNodeMatched || parentMatched;
238
-
239
- if (shouldShow) {
240
- matchedIds.push(node[this.defaultOptions.id]);
241
- }
242
-
243
- // 递归处理子节点,如果当前节点或其祖先匹配了,子节点也应该匹配
244
- if (node[this.defaultOptions.children] && node[this.defaultOptions.children].length > 0) {
245
- const childIds = this.findMatchedNodes(value, node[this.defaultOptions.children], shouldShow);
246
- matchedIds = matchedIds.concat(childIds);
247
- }
248
- });
249
-
250
- return matchedIds;
251
- },
252
-
253
- /**
254
- * 展开所有匹配的节点
255
- */
256
- expandMatchedNodes() {
257
- this.matchedNodeIds.forEach(nodeId => {
258
- const treeNode = this.$refs.tree.store.nodesMap[nodeId];
259
- if (treeNode) {
260
- treeNode.expand();
261
- }
262
- });
263
- },
264
-
265
- init() {
266
- // 初始化是根据value,设置已选中项
267
- let arr = [];
268
- if (this.multiple) {
269
- arr = this.value ? this.value : [];
270
- } else {
271
- arr = this.value ? [this.value] : []
272
- }
273
- this.$nextTick(() => {
274
- this.$refs.tree.setCheckedKeys(arr);
275
- })
276
- },
277
-
278
- /**
279
- * 树复选框点击
280
- */
281
- treeCheck(value, { checkedKeys, checkedNodes }) {
282
- let arr = [];
283
- arr = checkedNodes;
284
- let idArr = arr.map(item => item[this.defaultOptions.id]);
285
- // 返回id数组
286
- this.$emit('change', this.multiple ? idArr : idArr[0], this.multiple ? arr : arr[0]);
287
- },
288
-
289
- /**
290
- * 树节点点击
291
- */
292
- treeClick(value, node, event) {
293
- if (this.multiple) return;
294
-
295
- this.$emit('change', value.id, value);
296
- this.popoverOpen = false;
297
- },
298
-
299
- /**
300
- * 清空
301
- */
302
- handleClear() {
303
- this.$emit('change', this.multiple ? [] : '', this.multiple ? [] : null);
304
- this.$refs.tree.setCheckedKeys([]);
305
- },
306
-
307
- /**
308
- * 部门树 格式化为 单例数组
309
- */
310
- turnFormatTreeData(arr, data, pId) {
311
- data.forEach(item => {
312
- let cItem = JSON.parse(JSON.stringify(item));
313
- delete cItem[this.defaultOptions.children];
314
- cItem.pId = pId;
315
- arr.push(cItem);
316
-
317
- if (item[this.defaultOptions.children] && item[this.defaultOptions.children].length > 0) {
318
- this.turnFormatTreeData(arr, item[this.defaultOptions.children], item[this.defaultOptions.id]);
319
- }
320
- })
321
- return arr
322
- },
323
- }
324
- };
325
- </script>
1
+ <template>
2
+ <div class="cy-tree-select">
3
+ <el-popover v-model="popoverOpen" placement="bottom-start" width="300" trigger="click" :popper-class="popperClass" @show="popoverOpen = true" @hide="popoverOpen = false">
4
+ <div class="cy-tree-select-select-con">
5
+ <div v-if="filterable" class="cy-tree-select-select-con-s">
6
+ <el-input
7
+ v-model="filterText"
8
+ placeholder="搜索"
9
+ prefix-icon="el-icon-search"
10
+ clearable
11
+ size="small"
12
+ ></el-input>
13
+ </div>
14
+ <div v-if="showCheckStrictly" class="cy-tree-select-select-con-t">
15
+ <el-checkbox v-model="isCheckStrictly">父子节点联动</el-checkbox>
16
+ </div>
17
+
18
+ <div class="cy-tree-select-select-con-c">
19
+ <el-tree
20
+ ref="tree"
21
+ :data="treeOptions"
22
+ :show-checkbox="multiple"
23
+ :node-key="defaultOptions.id"
24
+ :check-strictly="!isCheckStrictly"
25
+ :props="defaultOptions"
26
+ :expand-on-click-node="false"
27
+ :default-expand-all="defaultExpandAll"
28
+ :filter-node-method="filterNode"
29
+ @check="treeCheck"
30
+ @node-click="treeClick"
31
+ ></el-tree>
32
+ </div>
33
+ </div>
34
+
35
+ <div slot="reference" class="cy-tree-select-select" :class="size" :style="vStyle">
36
+ <div class="cy-tree-select-select-v">
37
+ <span v-if="checkedArr.length < 1" class="cy-tree-select-select-v-placeholder">{{ placeholder }}</span>
38
+ <span v-else>{{ checkedArr.map(item => item[defaultOptions.label]).join() }}</span>
39
+ </div>
40
+
41
+ <div class="cy-tree-select-select-v-icon" @mouseenter="isClearIcon = true" @mouseleave="isClearIcon = false">
42
+ <i v-if="isClearIcon && clearable" class="el-icon-circle-close" @click.stop="handleClear"></i>
43
+ <i v-else class="el-icon-arrow-down cy-tree-select-select-v-arrow" :class="{ 'cy-tree-select-select-v-arrow-show': popoverOpen }"></i>
44
+ </div>
45
+ </div>
46
+ </el-popover>
47
+ </div>
48
+ </template>
49
+
50
+ <script>
51
+ import ElCheckbox from 'element-ui/packages/checkbox';
52
+ import ElPopover from 'element-ui/packages/popover';
53
+
54
+ export default {
55
+ name: 'CyTreeSelect',
56
+ component: [
57
+ ElCheckbox,
58
+ ElPopover
59
+ ],
60
+ model: {
61
+ prop: 'value',
62
+ event: 'change',
63
+ },
64
+ props: {
65
+ value: {
66
+ type: [String, Number, Array],
67
+ default: ''
68
+ },
69
+
70
+ options: {
71
+ type: Array,
72
+ default: []
73
+ },
74
+
75
+ placeholder: {
76
+ type: String,
77
+ default: ''
78
+ },
79
+
80
+ // 尺寸
81
+ size: {
82
+ type: String,
83
+ },
84
+
85
+ // 是否显示搜索框
86
+ filterable: {
87
+ type: Boolean,
88
+ default: false
89
+ },
90
+
91
+ // 是否显示 父子节点是否联动 多选框
92
+ showCheckStrictly: {
93
+ type: Boolean,
94
+ default: true
95
+ },
96
+
97
+ // 父子节点是否联动
98
+ checkStrictly: {
99
+ type: Boolean,
100
+ default: true
101
+ },
102
+
103
+ // 是否显示清空按钮
104
+ clearable: {
105
+ type: Boolean,
106
+ default: false
107
+ },
108
+
109
+ // 是否多选
110
+ multiple: {
111
+ type: Boolean,
112
+ default: false,
113
+ },
114
+
115
+ // 默认数据参数选项
116
+ defaultOptions: {
117
+ type: Object,
118
+ default: () => {
119
+ return {
120
+ children: 'children',
121
+ label: 'label',
122
+ id: 'id'
123
+ }
124
+ }
125
+ },
126
+
127
+ // 显示的文本框样式
128
+ vStyle: {
129
+ type: [Array, String, Object],
130
+ default: ''
131
+ },
132
+
133
+ // 树数据区域外层popover的class
134
+ popperClass: {
135
+ type: String,
136
+ default: ''
137
+ },
138
+
139
+ // 是否默认展开所有节点
140
+ defaultExpandAll: {
141
+ type: Boolean,
142
+ default: false
143
+ }
144
+ },
145
+ data() {
146
+ return {
147
+ isCheckStrictly: true, // 父子节点是否联动
148
+ popoverOpen: false, // 显示状态
149
+ isClearIcon: false, // 清空按钮显示状态
150
+
151
+ treeOptions: [], // 部门树列表
152
+ treeArr: [], // 部门列表
153
+ filterText: '', // 搜索关键词
154
+ matchedNodeIds: [], // 匹配的节点ID集合
155
+ }
156
+ },
157
+ computed: {
158
+ // 当前选中的数组
159
+ checkedArr() {
160
+ if (this.multiple) {
161
+ let arr = [];
162
+ this.value && this.value.forEach(id => {
163
+ let cItem = this.treeArr.filter(tItem => tItem[this.defaultOptions.id] === id)[0];
164
+ if (cItem) arr.push(cItem);
165
+ })
166
+ return arr
167
+ } else {
168
+ let cItem = this.treeArr.filter(tItem => tItem[this.defaultOptions.id] === Number(this.value))[0];
169
+ return cItem ? [cItem] : []
170
+ }
171
+ }
172
+ },
173
+ watch: {
174
+ checkStrictly: {
175
+ immediate: true,
176
+ handler() {
177
+ this.isCheckStrictly = this.checkStrictly;
178
+ }
179
+ },
180
+
181
+ value: {
182
+ immediate: true,
183
+ deep: true,
184
+ handler() {
185
+ this.$nextTick(() => {
186
+ this.init();
187
+ })
188
+ }
189
+ },
190
+
191
+ options: {
192
+ deep: true,
193
+ immediate: true,
194
+ handler() {
195
+ this.treeOptions = this.options;
196
+ this.treeArr = this.turnFormatTreeData([], this.treeOptions, 0);
197
+ }
198
+ },
199
+
200
+ filterText(val) {
201
+ if (val) {
202
+ // 先找出所有匹配的节点及其子节点
203
+ this.matchedNodeIds = this.findMatchedNodes(val, this.treeOptions);
204
+ // 执行过滤
205
+ this.$refs.tree.filter(val);
206
+ // 展开所有匹配的节点
207
+ this.$nextTick(() => {
208
+ this.expandMatchedNodes();
209
+ });
210
+ } else {
211
+ this.matchedNodeIds = [];
212
+ this.$refs.tree.filter(val);
213
+ }
214
+ }
215
+ },
216
+ created() {
217
+
218
+ },
219
+ methods: {
220
+ /**
221
+ * 树节点过滤
222
+ */
223
+ filterNode(value, data) {
224
+ if (!value) return true;
225
+ // 如果当前节点或其祖先节点匹配了,就显示
226
+ return this.matchedNodeIds.includes(data[this.defaultOptions.id]);
227
+ },
228
+
229
+ /**
230
+ * 查找所有匹配的节点及其子节点ID
231
+ */
232
+ findMatchedNodes(value, nodes, parentMatched = false) {
233
+ let matchedIds = [];
234
+
235
+ nodes.forEach(node => {
236
+ const currentNodeMatched = node[this.defaultOptions.label].indexOf(value) !== -1;
237
+ const shouldShow = currentNodeMatched || parentMatched;
238
+
239
+ if (shouldShow) {
240
+ matchedIds.push(node[this.defaultOptions.id]);
241
+ }
242
+
243
+ // 递归处理子节点,如果当前节点或其祖先匹配了,子节点也应该匹配
244
+ if (node[this.defaultOptions.children] && node[this.defaultOptions.children].length > 0) {
245
+ const childIds = this.findMatchedNodes(value, node[this.defaultOptions.children], shouldShow);
246
+ matchedIds = matchedIds.concat(childIds);
247
+ }
248
+ });
249
+
250
+ return matchedIds;
251
+ },
252
+
253
+ /**
254
+ * 展开所有匹配的节点
255
+ */
256
+ expandMatchedNodes() {
257
+ this.matchedNodeIds.forEach(nodeId => {
258
+ const treeNode = this.$refs.tree.store.nodesMap[nodeId];
259
+ if (treeNode) {
260
+ treeNode.expand();
261
+ }
262
+ });
263
+ },
264
+
265
+ init() {
266
+ // 初始化是根据value,设置已选中项
267
+ let arr = [];
268
+ if (this.multiple) {
269
+ arr = this.value ? this.value : [];
270
+ } else {
271
+ arr = this.value ? [this.value] : []
272
+ }
273
+ this.$nextTick(() => {
274
+ this.$refs.tree.setCheckedKeys(arr);
275
+ })
276
+ },
277
+
278
+ /**
279
+ * 树复选框点击
280
+ */
281
+ treeCheck(value, { checkedKeys, checkedNodes }) {
282
+ let arr = [];
283
+ arr = checkedNodes;
284
+ let idArr = arr.map(item => item[this.defaultOptions.id]);
285
+ // 返回id数组
286
+ this.$emit('change', this.multiple ? idArr : idArr[0], this.multiple ? arr : arr[0]);
287
+ },
288
+
289
+ /**
290
+ * 树节点点击
291
+ */
292
+ treeClick(value, node, event) {
293
+ if (this.multiple) return;
294
+
295
+ this.$emit('change', value.id, value);
296
+ this.popoverOpen = false;
297
+ },
298
+
299
+ /**
300
+ * 清空
301
+ */
302
+ handleClear() {
303
+ this.$emit('change', this.multiple ? [] : '', this.multiple ? [] : null);
304
+ this.$refs.tree.setCheckedKeys([]);
305
+ },
306
+
307
+ /**
308
+ * 部门树 格式化为 单例数组
309
+ */
310
+ turnFormatTreeData(arr, data, pId) {
311
+ data.forEach(item => {
312
+ let cItem = JSON.parse(JSON.stringify(item));
313
+ delete cItem[this.defaultOptions.children];
314
+ cItem.pId = pId;
315
+ arr.push(cItem);
316
+
317
+ if (item[this.defaultOptions.children] && item[this.defaultOptions.children].length > 0) {
318
+ this.turnFormatTreeData(arr, item[this.defaultOptions.children], item[this.defaultOptions.id]);
319
+ }
320
+ })
321
+ return arr
322
+ },
323
+ }
324
+ };
325
+ </script>
@@ -1,8 +1,8 @@
1
1
  <script>
2
2
  import UploadList from './upload-list';
3
3
  import Upload from './upload';
4
- import ElProgress from 'cy-element-ui/packages/progress';
5
- import Migrating from 'cy-element-ui/src/mixins/migrating';
4
+ import ElProgress from 'element-ui/packages/progress';
5
+ import Migrating from 'element-ui/src/mixins/migrating';
6
6
 
7
7
  function noop() {}
8
8
 
@@ -63,8 +63,8 @@
63
63
  </transition-group>
64
64
  </template>
65
65
  <script>
66
- import Locale from 'cy-element-ui/src/mixins/locale';
67
- import ElProgress from 'cy-element-ui/packages/progress';
66
+ import Locale from 'element-ui/src/mixins/locale';
67
+ import ElProgress from 'element-ui/packages/progress';
68
68
 
69
69
  export default {
70
70
 
@@ -1,5 +1,5 @@
1
- import { once, on } from 'cy-element-ui/src/utils/dom';
2
- import { isMac } from 'cy-element-ui/src/utils/util';
1
+ import { once, on } from 'element-ui/src/utils/dom';
2
+ import { isMac } from 'element-ui/src/utils/util';
3
3
 
4
4
  export default {
5
5
  bind(el, binding, vnode) {