eoss-ui 0.6.37 → 0.6.39

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 (261) hide show
  1. package/lib/button-group.js +535 -374
  2. package/lib/button.js +535 -374
  3. package/lib/checkbox-group.js +536 -375
  4. package/lib/config/api.js +31 -19
  5. package/lib/data-table-form.js +547 -386
  6. package/lib/data-table.js +547 -382
  7. package/lib/date-picker.js +535 -374
  8. package/lib/dialog.js +535 -374
  9. package/lib/eoss-ui.common.js +12508 -5609
  10. package/lib/error-page.js +4 -4
  11. package/lib/flow-group.js +553 -377
  12. package/lib/flow-list.js +621 -460
  13. package/lib/flow.js +9822 -2988
  14. package/lib/form.js +552 -380
  15. package/lib/handle-user.js +536 -375
  16. package/lib/handler.js +536 -375
  17. package/lib/icon.js +536 -375
  18. package/lib/index.js +1 -1
  19. package/lib/input-number.js +535 -374
  20. package/lib/input.js +535 -374
  21. package/lib/layout.js +2 -2
  22. package/lib/login.js +550 -389
  23. package/lib/main.js +704 -543
  24. package/lib/nav.js +535 -374
  25. package/lib/notify.js +127 -109
  26. package/lib/page.js +535 -374
  27. package/lib/pagination.js +535 -374
  28. package/lib/player.js +535 -374
  29. package/lib/qr-code.js +548 -387
  30. package/lib/radio-group.js +536 -375
  31. package/lib/retrial-auth.js +538 -377
  32. package/lib/select-ganged.js +536 -375
  33. package/lib/select.js +536 -375
  34. package/lib/selector-panel.js +594 -409
  35. package/lib/selector.js +539 -378
  36. package/lib/sizer.js +541 -380
  37. package/lib/steps.js +535 -374
  38. package/lib/switch.js +535 -374
  39. package/lib/table-form.js +535 -374
  40. package/lib/tabs.js +539 -378
  41. package/lib/theme-chalk/flow.css +1 -1
  42. package/lib/theme-chalk/index.css +1 -1
  43. package/lib/tips.js +536 -375
  44. package/lib/tree-group.js +535 -374
  45. package/lib/tree.js +536 -375
  46. package/lib/upload.js +564 -392
  47. package/lib/utils/util.js +411 -268
  48. package/lib/wujie.js +535 -374
  49. package/lib/wxlogin.js +535 -374
  50. package/package.json +159 -158
  51. package/packages/button/index.js +5 -5
  52. package/packages/button/src/main.vue +418 -418
  53. package/packages/button-group/index.js +5 -5
  54. package/packages/button-group/src/main.vue +298 -298
  55. package/packages/calendar/index.js +5 -5
  56. package/packages/card/index.js +5 -5
  57. package/packages/card/src/main.vue +156 -156
  58. package/packages/cascader/index.js +5 -5
  59. package/packages/cascader/src/main.vue +168 -168
  60. package/packages/checkbox-group/index.js +5 -5
  61. package/packages/checkbox-group/src/main.vue +333 -333
  62. package/packages/clients/index.js +5 -5
  63. package/packages/clients/src/main.vue +144 -144
  64. package/packages/data-table/index.js +5 -5
  65. package/packages/data-table/src/children.vue +39 -39
  66. package/packages/data-table/src/column.vue +983 -983
  67. package/packages/data-table/src/main.vue +1820 -1816
  68. package/packages/data-table/src/sizer.vue +195 -195
  69. package/packages/data-table-form/index.js +5 -5
  70. package/packages/data-table-form/src/checkbox.vue +101 -101
  71. package/packages/data-table-form/src/colgroup.vue +17 -17
  72. package/packages/data-table-form/src/main.vue +181 -181
  73. package/packages/data-table-form/src/radio.vue +65 -65
  74. package/packages/data-table-form/src/table.vue +233 -233
  75. package/packages/data-table-form/src/tbody.vue +336 -336
  76. package/packages/data-table-form/src/thead.vue +68 -68
  77. package/packages/date-picker/index.js +5 -5
  78. package/packages/date-picker/src/main.vue +236 -236
  79. package/packages/dialog/index.js +5 -5
  80. package/packages/enterprise/index.js +5 -5
  81. package/packages/enterprise/src/main.vue +66 -66
  82. package/packages/error-page/index.js +5 -5
  83. package/packages/error-page/src/main.vue +44 -44
  84. package/packages/flow/index.js +5 -5
  85. package/packages/flow/src/component/CommonOpinions.vue +345 -341
  86. package/packages/flow/src/component/CustomPreset.vue +322 -322
  87. package/packages/flow/src/component/FileList.vue +99 -99
  88. package/packages/flow/src/component/Preset.vue +255 -255
  89. package/packages/flow/src/component/SendMsg.vue +229 -229
  90. package/packages/flow/src/component/TimeLimit.vue +190 -190
  91. package/packages/flow/src/component/taskUnionExamine.vue +603 -547
  92. package/packages/flow/src/form.vue +121 -121
  93. package/packages/flow/src/freeStartFlow.vue +2843 -0
  94. package/packages/flow/src/main.vue +2864 -2731
  95. package/packages/flow/src/processForm.vue +1007 -954
  96. package/packages/flow/src/processReject.vue +293 -293
  97. package/packages/flow/src/reset.vue +901 -0
  98. package/packages/flow/src/selectUser.vue +5 -0
  99. package/packages/flow/src/startTaskRead.vue +596 -596
  100. package/packages/flow/src/table.vue +58 -58
  101. package/packages/flow-group/index.js +5 -5
  102. package/packages/flow-group/src/main.vue +688 -684
  103. package/packages/flow-list/index.js +5 -5
  104. package/packages/flow-list/src/main.vue +1172 -1172
  105. package/packages/form/index.js +5 -5
  106. package/packages/form/src/main.vue +3584 -3582
  107. package/packages/form/src/table.vue +1420 -1420
  108. package/packages/handle-user/index.js +5 -5
  109. package/packages/handle-user/src/main.vue +138 -138
  110. package/packages/handler/index.js +5 -5
  111. package/packages/handler/src/main.vue +388 -388
  112. package/packages/icon/index.js +5 -5
  113. package/packages/icon/src/main.vue +101 -101
  114. package/packages/icons/index.js +5 -5
  115. package/packages/icons/src/main.vue +81 -81
  116. package/packages/input/index.js +5 -5
  117. package/packages/input/src/main.vue +356 -356
  118. package/packages/input-number/index.js +5 -5
  119. package/packages/input-number/src/main.vue +106 -106
  120. package/packages/label/index.js +5 -5
  121. package/packages/label/src/main.vue +457 -457
  122. package/packages/layout/index.js +5 -5
  123. package/packages/layout/src/item.vue +152 -152
  124. package/packages/layout/src/main.vue +31 -31
  125. package/packages/login/index.js +5 -5
  126. package/packages/login/src/main.vue +1892 -1894
  127. package/packages/login/src/resetPassword.vue +562 -562
  128. package/packages/main/index.js +5 -5
  129. package/packages/main/src/default/message.vue +249 -249
  130. package/packages/main/src/default/notice.vue +157 -157
  131. package/packages/main/src/default/userinfo.vue +505 -505
  132. package/packages/main/src/public/online.vue +89 -89
  133. package/packages/main/src/public/search.vue +454 -454
  134. package/packages/main/src/public/settings.vue +221 -221
  135. package/packages/main/src/simplicity/apps.vue +388 -388
  136. package/packages/main/src/simplicity/avatar.vue +82 -82
  137. package/packages/main/src/simplicity/handler.vue +221 -221
  138. package/packages/main/src/simplicity/index.vue +1993 -1993
  139. package/packages/main/src/simplicity/lists.vue +84 -84
  140. package/packages/main/src/simplicity/menu-list.vue +128 -128
  141. package/packages/main/src/simplicity/message.vue +259 -259
  142. package/packages/main/src/simplicity/notice.vue +190 -190
  143. package/packages/main/src/simplicity/router-page.vue +45 -45
  144. package/packages/main/src/simplicity/sub-menu.vue +241 -241
  145. package/packages/main/src/simplicity/user.vue +257 -257
  146. package/packages/main/src/simplicity/userinfo.vue +312 -312
  147. package/packages/menu/index.js +5 -5
  148. package/packages/menu/src/main.vue +536 -536
  149. package/packages/nav/index.js +5 -5
  150. package/packages/nav/src/main.vue +402 -402
  151. package/packages/notify/index.js +5 -5
  152. package/packages/notify/src/main.vue +538 -538
  153. package/packages/page/index.js +5 -5
  154. package/packages/page/src/main.vue +167 -167
  155. package/packages/pagination/index.js +5 -5
  156. package/packages/pagination/src/main.vue +96 -96
  157. package/packages/player/index.js +5 -5
  158. package/packages/player/src/main.vue +194 -194
  159. package/packages/qr-code/index.js +5 -5
  160. package/packages/qr-code/src/main.vue +170 -170
  161. package/packages/radio-group/index.js +6 -6
  162. package/packages/radio-group/src/main.vue +319 -319
  163. package/packages/retrial-auth/index.js +5 -5
  164. package/packages/retrial-auth/src/main.vue +280 -280
  165. package/packages/select/index.js +5 -5
  166. package/packages/select/src/main.vue +775 -775
  167. package/packages/select-ganged/index.js +5 -5
  168. package/packages/select-ganged/src/main.vue +724 -724
  169. package/packages/selector/index.js +5 -5
  170. package/packages/selector/src/main.vue +677 -677
  171. package/packages/selector-panel/index.js +5 -5
  172. package/packages/selector-panel/src/main.vue +1028 -1020
  173. package/packages/selector-panel/src/selection.vue +177 -160
  174. package/packages/selector-panel/src/tree.vue +129 -129
  175. package/packages/sizer/index.js +5 -5
  176. package/packages/sizer/src/main.vue +254 -254
  177. package/packages/steps/index.js +5 -5
  178. package/packages/steps/src/main.vue +181 -181
  179. package/packages/switch/index.js +5 -5
  180. package/packages/switch/src/main.vue +154 -154
  181. package/packages/table-form/index.js +5 -5
  182. package/packages/tabs/index.js +5 -5
  183. package/packages/tabs/src/main.vue +788 -788
  184. package/packages/tabs-panel/index.js +5 -5
  185. package/packages/tabs-panel/src/main.vue +29 -29
  186. package/packages/theme-chalk/lib/flow.css +1 -1
  187. package/packages/theme-chalk/lib/index.css +1 -1
  188. package/packages/theme-chalk/src/base.scss +260 -260
  189. package/packages/theme-chalk/src/button-group.scss +175 -175
  190. package/packages/theme-chalk/src/button.scss +24 -24
  191. package/packages/theme-chalk/src/calendar.scss +113 -113
  192. package/packages/theme-chalk/src/card.scss +99 -99
  193. package/packages/theme-chalk/src/checkbox-group.scss +8 -8
  194. package/packages/theme-chalk/src/clients.scss +87 -87
  195. package/packages/theme-chalk/src/data-table-form.scss +67 -67
  196. package/packages/theme-chalk/src/data-table.scss +293 -293
  197. package/packages/theme-chalk/src/date-picker.scss +7 -7
  198. package/packages/theme-chalk/src/dialog.scss +77 -77
  199. package/packages/theme-chalk/src/enterprise.scss +5 -5
  200. package/packages/theme-chalk/src/error-page.scss +18 -18
  201. package/packages/theme-chalk/src/flow-group.scss +110 -110
  202. package/packages/theme-chalk/src/flow-list.scss +36 -36
  203. package/packages/theme-chalk/src/flow.scss +310 -308
  204. package/packages/theme-chalk/src/form.scss +496 -496
  205. package/packages/theme-chalk/src/handle-user.scss +40 -40
  206. package/packages/theme-chalk/src/handler.scss +143 -143
  207. package/packages/theme-chalk/src/icon.scss +1760 -1760
  208. package/packages/theme-chalk/src/icons.scss +99 -99
  209. package/packages/theme-chalk/src/input.scss +9 -9
  210. package/packages/theme-chalk/src/label.scss +24 -24
  211. package/packages/theme-chalk/src/layout.scss +46 -46
  212. package/packages/theme-chalk/src/login.scss +939 -939
  213. package/packages/theme-chalk/src/main.scss +632 -632
  214. package/packages/theme-chalk/src/menu.scss +222 -222
  215. package/packages/theme-chalk/src/mixins/color.scss +117 -117
  216. package/packages/theme-chalk/src/nav.scss +125 -125
  217. package/packages/theme-chalk/src/page.scss +3 -3
  218. package/packages/theme-chalk/src/pagination.scss +29 -29
  219. package/packages/theme-chalk/src/player.scss +9 -9
  220. package/packages/theme-chalk/src/qr-code.scss +17 -17
  221. package/packages/theme-chalk/src/radio-group.scss +9 -9
  222. package/packages/theme-chalk/src/retrial-auth.scss +38 -38
  223. package/packages/theme-chalk/src/select-ganged.scss +8 -8
  224. package/packages/theme-chalk/src/select.scss +8 -8
  225. package/packages/theme-chalk/src/selector-panel.scss +204 -204
  226. package/packages/theme-chalk/src/selector.scss +91 -91
  227. package/packages/theme-chalk/src/simplicity.scss +1262 -1262
  228. package/packages/theme-chalk/src/sizer.scss +36 -36
  229. package/packages/theme-chalk/src/steps.scss +88 -88
  230. package/packages/theme-chalk/src/switch.scss +3 -3
  231. package/packages/theme-chalk/src/table-form.scss +1 -1
  232. package/packages/theme-chalk/src/tabs.scss +87 -87
  233. package/packages/theme-chalk/src/tips.scss +7 -7
  234. package/packages/theme-chalk/src/toolbar.scss +179 -179
  235. package/packages/theme-chalk/src/tree-group.scss +72 -72
  236. package/packages/theme-chalk/src/tree.scss +165 -165
  237. package/packages/theme-chalk/src/upload.scss +167 -167
  238. package/packages/theme-chalk/src/wxlogin.scss +3 -3
  239. package/packages/tips/index.js +5 -5
  240. package/packages/tips/src/main.vue +141 -141
  241. package/packages/toolbar/index.js +5 -5
  242. package/packages/toolbar/src/main.vue +430 -430
  243. package/packages/tree/index.js +5 -5
  244. package/packages/tree-group/index.js +5 -5
  245. package/packages/upload/index.js +5 -5
  246. package/packages/upload/src/main.vue +1334 -1323
  247. package/packages/upload/src/picture.js +15 -15
  248. package/packages/wujie/index.js +5 -5
  249. package/packages/wujie/src/main.vue +145 -145
  250. package/packages/wxlogin/index.js +5 -5
  251. package/packages/wxlogin/src/main.vue +128 -128
  252. package/src/config/api.js +248 -236
  253. package/src/config/image.js +2 -2
  254. package/src/index.js +1 -1
  255. package/src/utils/bus.js +3 -3
  256. package/src/utils/date-util.js +312 -312
  257. package/src/utils/http.js +50 -50
  258. package/src/utils/rules.js +18 -18
  259. package/src/utils/store.js +21 -21
  260. package/src/utils/util.js +398 -258
  261. package/src/utils/webSocket.js +107 -107
@@ -1,677 +1,677 @@
1
- <template>
2
- <div
3
- v-if="isRender"
4
- class="es-selector"
5
- ref="esSelector"
6
- :class="{ 'es-pointer': !readonly && !filterable }"
7
- v-clickoutside="handleClose"
8
- >
9
- <template v-if="form">
10
- <el-button v-if="button" v-bind="button" @click="openDialog"
11
- ><slot>选择</slot></el-button
12
- >
13
- <template v-else>
14
- <div
15
- :class="[
16
- selectorSize ? 'el-select--' + selectorSize : 'es-selector-box',
17
- { 'es-selector-search': filterable }
18
- ]"
19
- @click.stop="toggleMenu"
20
- >
21
- <div
22
- v-if="multiple"
23
- ref="tags"
24
- class="el-select__tags"
25
- :class="{ 'es-selector-edit': !readonly }"
26
- >
27
- <div
28
- v-if="collapseTags && selected.length"
29
- class="es-selector-tags"
30
- :class="{ 'es-selector-more': selected.length > 1 }"
31
- >
32
- <el-tag
33
- :closable="!selectorDisabled && !readonly"
34
- type="info"
35
- disable-transitions
36
- @close="deleteTag($event, selected[0])"
37
- >
38
- <span class="el-select__tags-text">
39
- {{
40
- isObject(selected[0]) ? selected[0][labelKey] : selected[0]
41
- }}
42
- </span>
43
- </el-tag>
44
- <el-tag
45
- v-if="selected.length > 1"
46
- :closable="false"
47
- type="info"
48
- disable-transitions
49
- class="es-tags-more"
50
- >
51
- <span class="el-select__tags-text"
52
- >+ {{ selected.length - 1 }}</span
53
- >
54
- </el-tag>
55
- </div>
56
- <transition-group @after-leave="resetInputHeight">
57
- <el-tag
58
- v-for="(item, index) in selected"
59
- :key="getValueKey(item)"
60
- :closable="!selectorDisabled && !readonly"
61
- type="info"
62
- disable-transitions
63
- @close="deleteTag($event, item, index)"
64
- >
65
- <span class="el-select__tags-text">{{ getLabel(item) }}</span>
66
- </el-tag>
67
- </transition-group>
68
- </div>
69
- <div ref="reference" class="es-input__inner" v-if="readonly">
70
- <template v-if="!multiple">{{ selectedLabel }}</template>
71
- </div>
72
- <template v-else>
73
- <template v-if="multiple">
74
- <el-input
75
- type="text"
76
- ref="reference"
77
- autocomplete="off"
78
- v-model="words"
79
- :readonly="filterable ? false : true"
80
- :id="id"
81
- :placeholder="currentPlaceholder"
82
- :size="selectorSize"
83
- :disabled="selectorDisabled"
84
- :class="{
85
- 'is-focus': visible,
86
- 'es-plain': plain,
87
- 'es-pointer': !filterable,
88
- 'es-zindex-2': focus
89
- }"
90
- :tabindex="tabindex"
91
- v-popover:popover
92
- @dblclick.native="openDialog"
93
- @focus="handleFocus"
94
- @blur="handleBlur"
95
- >
96
- <template slot="append">
97
- <el-button
98
- ref="openDialog"
99
- v-if="filterable || showButton"
100
- @click.stop="openDialog"
101
- ><slot>选择</slot></el-button
102
- >
103
- </template>
104
- </el-input>
105
- <el-input
106
- v-model="selectedLabel"
107
- readonly
108
- :name="name"
109
- type="text"
110
- v-show="false"
111
- ></el-input>
112
- </template>
113
- <el-input
114
- v-else
115
- v-model="selectedLabel"
116
- type="text"
117
- ref="reference"
118
- autocomplete="off"
119
- :clearable="clearable"
120
- showClearIcon
121
- :name="name"
122
- :readonly="filterable ? false : true"
123
- :active="actived"
124
- :id="id"
125
- :placeholder="currentPlaceholder"
126
- :size="selectorSize"
127
- :disabled="selectorDisabled"
128
- :class="{
129
- 'is-focus': visible,
130
- 'es-plain': this.plain,
131
- 'es-pointer': !filterable
132
- }"
133
- :tabindex="tabindex"
134
- @dblclick.native="openDialog"
135
- @clear="handleClear"
136
- >
137
- <template slot="append">
138
- <el-button
139
- ref="openDialog"
140
- v-if="filterable || showButton"
141
- @click.stop="openDialog"
142
- ><slot>选择</slot></el-button
143
- >
144
- </template>
145
- </el-input>
146
- </template>
147
- </div>
148
- <el-popover
149
- v-model="show"
150
- placement="bottom-start"
151
- trigger="manual"
152
- popper-class="es-selector-popover"
153
- :width="minWidth"
154
- :queryParent="true"
155
- :reference="reference"
156
- :arrow-offset="20"
157
- >
158
- <el-scrollbar
159
- tag="ul"
160
- wrap-class="es-selector-dropdown__wrap"
161
- view-class="es-selector-dropdown__list"
162
- ref="scrollbar"
163
- v-show="options.length"
164
- maxHeight="228"
165
- >
166
- <li
167
- v-for="item in options"
168
- :key="item.id"
169
- @click="handleSelect(item)"
170
- class="es-selector-dropdown-item"
171
- :class="{ 'es-selected': item.selected }"
172
- >
173
- <span>{{ item[labelKey] }}</span>
174
- </li>
175
- </el-scrollbar>
176
- <p v-if="options.length == 0" class="el-select-dropdown__empty">
177
- {{ noMatchText }}
178
- </p>
179
- </el-popover>
180
- </template>
181
- </template>
182
- <es-dialog
183
- v-if="!readonly"
184
- :title="title"
185
- :visible.sync="visible"
186
- :width="width"
187
- :height="height"
188
- :css="false"
189
- :append-to-body="true"
190
- :close-on-click-modal="false"
191
- class="es-selector-dialog"
192
- >
193
- <es-selector-panel
194
- v-if="isReset"
195
- v-model="selected"
196
- v-bind="$attrs"
197
- :multiple="multiple"
198
- width="100%"
199
- height="100%"
200
- :value-key="valueKey"
201
- :label-key="labelKey"
202
- :host="host"
203
- :type="types"
204
- :mix="mix"
205
- :isShowLevel3="isShowLevel3"
206
- @tabschage="tabschage"
207
- @click.capture="stopd"
208
- @confirm="handleConfirm"
209
- @cancel="handleCancel"
210
- ></es-selector-panel>
211
- </es-dialog>
212
- </div>
213
- </template>
214
- <script>
215
- import util from 'eoss-ui/src/utils/util.js';
216
- import { getSelectorOrgDetail } from 'eoss-ui/src/config/api.js';
217
- import Clickoutside from 'eoss-element/src/utils/clickoutside';
218
- export default {
219
- name: 'EsSelector',
220
- inheritAttrs: false,
221
- inject: {
222
- elForm: {
223
- default: ''
224
- },
225
- elFormItem: {
226
- default: ''
227
- }
228
- },
229
- directives: { Clickoutside },
230
- props: {
231
- form: {
232
- type: Boolean,
233
- default: true
234
- },
235
- isShowLevel3: {
236
- type: Boolean,
237
- default: true
238
- },
239
- value: [Array, Object],
240
- action: {
241
- type: String,
242
- default: getSelectorOrgDetail
243
- },
244
- host: {
245
- type: String,
246
- default: ''
247
- },
248
- title: {
249
- type: String,
250
- default: '公用选择器'
251
- },
252
- width: {
253
- type: String,
254
- default: '900px'
255
- },
256
- height: {
257
- type: String,
258
- default: '560px'
259
- },
260
- multiple: {
261
- type: Boolean,
262
- default: true
263
- },
264
- valueKey: {
265
- type: String,
266
- default: 'showid'
267
- },
268
- labelKey: {
269
- type: String,
270
- default: 'showname'
271
- },
272
- valueType: {
273
- type: String,
274
- default: 'object',
275
- validator: function (value) {
276
- return ['string', 'object'].includes(value);
277
- }
278
- },
279
- size: String,
280
- id: String,
281
- disabled: Boolean,
282
- clearable: {
283
- type: Boolean,
284
- default: true
285
- },
286
- placeholder: {
287
- type: String,
288
- default: '请选择'
289
- },
290
- autocomplete: {
291
- type: String,
292
- default: 'off'
293
- },
294
- name: String,
295
- readonly: Boolean,
296
- collapseTags: {
297
- type: Boolean,
298
- default: false
299
- },
300
- plain: Boolean,
301
- types: {
302
- type: Array,
303
- default() {
304
- return ['enterprise', 'person'];
305
- }
306
- },
307
- tabindex: {
308
- type: [String, Number],
309
- default: -1
310
- },
311
- filterable: {
312
- type: Boolean,
313
- default: false
314
- },
315
- showButton: {
316
- type: Boolean,
317
- default: false
318
- },
319
- button: Object,
320
- active: String,
321
- keywords: {
322
- type: String,
323
- default: 'namelike'
324
- },
325
- //输入框搜索参数
326
- where: {
327
- type: Object,
328
- default() {
329
- return {
330
- mid: '0-0-0-0-0'
331
- };
332
- }
333
- },
334
- mix: {
335
- type: Boolean,
336
- default: false
337
- },
338
- noMatchText: {
339
- type: String,
340
- default: '无匹配数据'
341
- },
342
- emptySerach: {
343
- type: Boolean,
344
- default: false
345
- },
346
- reset: Boolean,
347
- useCaseCode: String,
348
- businessData: [String, Array, Object],
349
- inputHeight: {
350
- type: Number,
351
- default: 40
352
- }
353
- },
354
- data() {
355
- return {
356
- selected: [],
357
- visible: false,
358
- menuVisibleOnFocus: false,
359
- inputHovering: false,
360
- style: {},
361
- words: '',
362
- minWidth: '',
363
- options: '',
364
- show: false,
365
- focus: false,
366
- reference: undefined,
367
- timer: null
368
- };
369
- },
370
- computed: {
371
- isRender() {
372
- let useCaseCodes = util.getStorage('useCaseCodes');
373
- if (useCaseCodes && this.useCaseCode) {
374
- return useCaseCodes.indexOf(this.useCaseCode) > -1;
375
- }
376
- return true;
377
- },
378
- isReset() {
379
- return this.reset ? this.visible : true;
380
- },
381
- _elFormItemSize() {
382
- return (this.elFormItem || {}).elFormItemSize;
383
- },
384
- actived() {
385
- if (this.active) {
386
- return this.active;
387
- }
388
- return this.types[0];
389
- },
390
- selectorSize() {
391
- return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;
392
- },
393
- selectorDisabled() {
394
- return this.disabled || (this.elForm || {}).disabled;
395
- },
396
- selectedLabel: {
397
- get() {
398
- if (this.selected) {
399
- if (typeof this.selected === 'string') {
400
- return this.selected;
401
- } else if (util.isObject(this.selected)) {
402
- return this.selected[this.labelKey];
403
- } else if (Array.isArray(this.selected)) {
404
- return this.selected
405
- .map((item) => {
406
- return typeof item === 'string' ? item : item[this.labelKey];
407
- })
408
- .join(',');
409
- }
410
- }
411
- return '';
412
- },
413
- set(val) {
414
- this.selected = [val];
415
- this.words = val;
416
- return val;
417
- }
418
- },
419
- currentPlaceholder() {
420
- if (this.selected && this.selected.length) {
421
- return '';
422
- } else if (this.filterable) {
423
- return '输入关键字搜索';
424
- } else {
425
- return this.placeholder;
426
- }
427
- }
428
- },
429
- watch: {
430
- value: {
431
- immediate: true,
432
- deep: true,
433
- handler(val) {
434
- if (util.isExist(val)) {
435
- if (util.isObject(val)) {
436
- this.selected = [val];
437
- } else {
438
- this.selected = val;
439
- }
440
- } else {
441
- this.selected = [];
442
- }
443
- }
444
- },
445
- selected: {
446
- deep: true,
447
- handler(val) {
448
- this.$emit(
449
- 'change',
450
- Array.isArray(val) ? val : [val],
451
- this.businessData
452
- );
453
- if (this.multiple) {
454
- this.resetInputHeight();
455
- }
456
- }
457
- },
458
- words(val) {
459
- if (this.emptySerach || val !== '') {
460
- clearTimeout(this.timer);
461
- this.timer = setTimeout(this.handleSearch, 500);
462
- }
463
- }
464
- },
465
- created() {
466
- this.reference = this.$refs.esSelector;
467
- },
468
- mounted() {
469
- this.resetInputHeight();
470
- if (this.filterable) {
471
- this.$nextTick(() => {
472
- this.$refs.reference &&
473
- (this.minWidth = this.$refs.reference.$el.children[0].offsetWidth);
474
- });
475
- }
476
- if (this.$refs.openDialog) {
477
- this.$refs.openDialog.$el.parentNode.addEventListener('click', () => {
478
- this.openDialog();
479
- });
480
- }
481
- },
482
- methods: {
483
- isObject(obj) {
484
- return util.isObject(obj);
485
- },
486
- getValueKey(obj) {
487
- return util.isObject(obj) ? obj[this.valueKey] : obj;
488
- },
489
- toggleMenu() {
490
- if (!this.selectorDisabled && !this.readonly && !this.filterable) {
491
- this.visible = true;
492
- }
493
- },
494
- openDialog() {
495
- if (!this.selectorDisabled && !this.readonly) {
496
- this.visible = true;
497
- }
498
- },
499
- handleSearch() {
500
- if (this.filterable) {
501
- let params = {
502
- type: this.actived
503
- };
504
- params[this.keywords] = this.words;
505
- params = util.extend({}, params, this.where);
506
- util
507
- .ajax({
508
- url: this.action,
509
- params: params
510
- })
511
- .then((res) => {
512
- if (res.rCode === 0) {
513
- this.options = res.results;
514
- if (this.selected.length && this.multiple) {
515
- this.selected.forEach((item) => {
516
- let i = util.indexOfObj(this.options, item, this.valueKey);
517
- if (i > -1) {
518
- this.options[i].selected = true;
519
- }
520
- });
521
- }
522
- this.show = true;
523
- }
524
- })
525
- .catch((err) => {
526
- if (err.message && err.message !== 'canceled') {
527
- this.$message.error(err.message);
528
- }
529
- });
530
- }
531
- },
532
- handleFocus() {
533
- if (this.filterable) {
534
- this.focus = true;
535
- }
536
- },
537
- handleBlur() {
538
- this.focus = false;
539
- },
540
- tabschage(trees, active) {
541
- this.$emit('tabs-change', trees, active);
542
- },
543
- handleClose(res) {
544
- if (!this.multiple && this.selected[0] === this.words) {
545
- this.selected = [];
546
- }
547
- this.show = false;
548
- },
549
- handleSelect(res) {
550
- this.words = '';
551
- if (!res.selected) {
552
- if (this.multiple) {
553
- if (this.selected.length) {
554
- if (!res.selected) {
555
- res.selected = true;
556
- this.selected.push(res);
557
- this.selected = util.arrUnique(this.selected, this.valueKey);
558
- }
559
- } else {
560
- res.selected = true;
561
- this.selected = [res];
562
- }
563
- } else {
564
- res.selected = true;
565
- if (Array.isArray(this.selected)) {
566
- if (
567
- this.selected[0] &&
568
- typeof this.selected[0] !== 'string' &&
569
- this.selected[0][this.valueKey] !== res[this.valueKey]
570
- ) {
571
- this.selected[0].selected = false;
572
- }
573
- this.selected = [res];
574
- } else {
575
- if (
576
- this.selected &&
577
- typeof this.selected !== 'string' &&
578
- this.selected[this.valueKey] !== res[this.valueKey]
579
- ) {
580
- this.selected.selected = false;
581
- }
582
- this.selected = [res];
583
- }
584
- }
585
- }
586
- this.$emit('input', this.selected);
587
- this.$emit('confirm', this.selected);
588
- },
589
- handleConfirm(res) {
590
- this.visible = false;
591
- if (util.isObject(res)) {
592
- this.$emit('input', [res]);
593
- this.$emit('confirm', [res], this.businessData);
594
- } else {
595
- this.$emit('input', res);
596
- this.$emit('confirm', res, this.businessData);
597
- }
598
- let inputChildNodes = this.$refs.reference
599
- ? this.$refs.reference.$el.childNodes
600
- : null;
601
- let input = inputChildNodes
602
- ? [].filter.call(inputChildNodes, (item) => item.tagName === 'INPUT')[0]
603
- : null;
604
- if (input) {
605
- input.focus();
606
- input.blur();
607
- }
608
- if (this.reset) {
609
- this.selected = [];
610
- }
611
- },
612
- handleClear() {
613
- this.$emit('input', []);
614
- this.$emit('clear');
615
- },
616
- handleCancel() {
617
- this.visible = false;
618
- this.$emit('cancel');
619
- },
620
- deleteTag(event, item, index) {
621
- event;
622
- item;
623
- index = index === undefined ? 0 : index;
624
- this.selected.splice(index, 1);
625
- },
626
- resetInputHeight() {
627
- if (this.collapseTags) return;
628
- this.$nextTick(() => {
629
- if (!this.$refs.reference) return;
630
- const sizeInMap = this.inputHeight;
631
- let height = '';
632
- if (this.selected !== undefined && this.selected.length === 0) {
633
- height = sizeInMap + 'px';
634
- } else if (this.$refs.tags) {
635
- if (this.$refs.tags.clientHeight > sizeInMap) {
636
- height += this.$refs.tags.clientHeight + 2 + 'px';
637
- } else {
638
- height = sizeInMap + 'px';
639
- }
640
- }
641
- if (height) {
642
- if (this.readonly) {
643
- this.$refs.reference.style.height = height;
644
- } else {
645
- let inputChildNodes = this.$refs.reference.$el.childNodes;
646
- let input = [].filter.call(
647
- inputChildNodes,
648
- (item) => item.tagName === 'INPUT'
649
- )[0];
650
- input.style.height = height;
651
- }
652
- }
653
- });
654
- },
655
- getLabel(res) {
656
- let tag = '';
657
- if (this.mix) {
658
- tag = util.getTypeName(res.stype);
659
- }
660
- return (
661
- tag +
662
- (res[this.labelKey]
663
- ? res[this.labelKey]
664
- : res.label || res[this.valueKey])
665
- );
666
- }
667
- },
668
- beforeDestroy() {
669
- this.$el.removeEventListener('keyup', this.doSearch);
670
- if (this.$refs.openDialog) {
671
- this.$refs.openDialog.$el.parentNode.removeEventListener('click', () => {
672
- this.openDialog();
673
- });
674
- }
675
- }
676
- };
677
- </script>
1
+ <template>
2
+ <div
3
+ v-if="isRender"
4
+ class="es-selector"
5
+ ref="esSelector"
6
+ :class="{ 'es-pointer': !readonly && !filterable }"
7
+ v-clickoutside="handleClose"
8
+ >
9
+ <template v-if="form">
10
+ <el-button v-if="button" v-bind="button" @click="openDialog"
11
+ ><slot>选择</slot></el-button
12
+ >
13
+ <template v-else>
14
+ <div
15
+ :class="[
16
+ selectorSize ? 'el-select--' + selectorSize : 'es-selector-box',
17
+ { 'es-selector-search': filterable }
18
+ ]"
19
+ @click.stop="toggleMenu"
20
+ >
21
+ <div
22
+ v-if="multiple"
23
+ ref="tags"
24
+ class="el-select__tags"
25
+ :class="{ 'es-selector-edit': !readonly }"
26
+ >
27
+ <div
28
+ v-if="collapseTags && selected.length"
29
+ class="es-selector-tags"
30
+ :class="{ 'es-selector-more': selected.length > 1 }"
31
+ >
32
+ <el-tag
33
+ :closable="!selectorDisabled && !readonly"
34
+ type="info"
35
+ disable-transitions
36
+ @close="deleteTag($event, selected[0])"
37
+ >
38
+ <span class="el-select__tags-text">
39
+ {{
40
+ isObject(selected[0]) ? selected[0][labelKey] : selected[0]
41
+ }}
42
+ </span>
43
+ </el-tag>
44
+ <el-tag
45
+ v-if="selected.length > 1"
46
+ :closable="false"
47
+ type="info"
48
+ disable-transitions
49
+ class="es-tags-more"
50
+ >
51
+ <span class="el-select__tags-text"
52
+ >+ {{ selected.length - 1 }}</span
53
+ >
54
+ </el-tag>
55
+ </div>
56
+ <transition-group @after-leave="resetInputHeight">
57
+ <el-tag
58
+ v-for="(item, index) in selected"
59
+ :key="getValueKey(item)"
60
+ :closable="!selectorDisabled && !readonly"
61
+ type="info"
62
+ disable-transitions
63
+ @close="deleteTag($event, item, index)"
64
+ >
65
+ <span class="el-select__tags-text">{{ getLabel(item) }}</span>
66
+ </el-tag>
67
+ </transition-group>
68
+ </div>
69
+ <div ref="reference" class="es-input__inner" v-if="readonly">
70
+ <template v-if="!multiple">{{ selectedLabel }}</template>
71
+ </div>
72
+ <template v-else>
73
+ <template v-if="multiple">
74
+ <el-input
75
+ type="text"
76
+ ref="reference"
77
+ autocomplete="off"
78
+ v-model="words"
79
+ :readonly="filterable ? false : true"
80
+ :id="id"
81
+ :placeholder="currentPlaceholder"
82
+ :size="selectorSize"
83
+ :disabled="selectorDisabled"
84
+ :class="{
85
+ 'is-focus': visible,
86
+ 'es-plain': plain,
87
+ 'es-pointer': !filterable,
88
+ 'es-zindex-2': focus
89
+ }"
90
+ :tabindex="tabindex"
91
+ v-popover:popover
92
+ @dblclick.native="openDialog"
93
+ @focus="handleFocus"
94
+ @blur="handleBlur"
95
+ >
96
+ <template slot="append">
97
+ <el-button
98
+ ref="openDialog"
99
+ v-if="filterable || showButton"
100
+ @click.stop="openDialog"
101
+ ><slot>选择</slot></el-button
102
+ >
103
+ </template>
104
+ </el-input>
105
+ <el-input
106
+ v-model="selectedLabel"
107
+ readonly
108
+ :name="name"
109
+ type="text"
110
+ v-show="false"
111
+ ></el-input>
112
+ </template>
113
+ <el-input
114
+ v-else
115
+ v-model="selectedLabel"
116
+ type="text"
117
+ ref="reference"
118
+ autocomplete="off"
119
+ :clearable="clearable"
120
+ showClearIcon
121
+ :name="name"
122
+ :readonly="filterable ? false : true"
123
+ :active="actived"
124
+ :id="id"
125
+ :placeholder="currentPlaceholder"
126
+ :size="selectorSize"
127
+ :disabled="selectorDisabled"
128
+ :class="{
129
+ 'is-focus': visible,
130
+ 'es-plain': this.plain,
131
+ 'es-pointer': !filterable
132
+ }"
133
+ :tabindex="tabindex"
134
+ @dblclick.native="openDialog"
135
+ @clear="handleClear"
136
+ >
137
+ <template slot="append">
138
+ <el-button
139
+ ref="openDialog"
140
+ v-if="filterable || showButton"
141
+ @click.stop="openDialog"
142
+ ><slot>选择</slot></el-button
143
+ >
144
+ </template>
145
+ </el-input>
146
+ </template>
147
+ </div>
148
+ <el-popover
149
+ v-model="show"
150
+ placement="bottom-start"
151
+ trigger="manual"
152
+ popper-class="es-selector-popover"
153
+ :width="minWidth"
154
+ :queryParent="true"
155
+ :reference="reference"
156
+ :arrow-offset="20"
157
+ >
158
+ <el-scrollbar
159
+ tag="ul"
160
+ wrap-class="es-selector-dropdown__wrap"
161
+ view-class="es-selector-dropdown__list"
162
+ ref="scrollbar"
163
+ v-show="options.length"
164
+ maxHeight="228"
165
+ >
166
+ <li
167
+ v-for="item in options"
168
+ :key="item.id"
169
+ @click="handleSelect(item)"
170
+ class="es-selector-dropdown-item"
171
+ :class="{ 'es-selected': item.selected }"
172
+ >
173
+ <span>{{ item[labelKey] }}</span>
174
+ </li>
175
+ </el-scrollbar>
176
+ <p v-if="options.length == 0" class="el-select-dropdown__empty">
177
+ {{ noMatchText }}
178
+ </p>
179
+ </el-popover>
180
+ </template>
181
+ </template>
182
+ <es-dialog
183
+ v-if="!readonly"
184
+ :title="title"
185
+ :visible.sync="visible"
186
+ :width="width"
187
+ :height="height"
188
+ :css="false"
189
+ :append-to-body="true"
190
+ :close-on-click-modal="false"
191
+ class="es-selector-dialog"
192
+ >
193
+ <es-selector-panel
194
+ v-if="isReset"
195
+ v-model="selected"
196
+ v-bind="$attrs"
197
+ :multiple="multiple"
198
+ width="100%"
199
+ height="100%"
200
+ :value-key="valueKey"
201
+ :label-key="labelKey"
202
+ :host="host"
203
+ :type="types"
204
+ :mix="mix"
205
+ :isShowLevel3="isShowLevel3"
206
+ @tabschage="tabschage"
207
+ @click.capture="stopd"
208
+ @confirm="handleConfirm"
209
+ @cancel="handleCancel"
210
+ ></es-selector-panel>
211
+ </es-dialog>
212
+ </div>
213
+ </template>
214
+ <script>
215
+ import util from 'eoss-ui/src/utils/util.js';
216
+ import { getSelectorOrgDetail } from 'eoss-ui/src/config/api.js';
217
+ import Clickoutside from 'eoss-element/src/utils/clickoutside';
218
+ export default {
219
+ name: 'EsSelector',
220
+ inheritAttrs: false,
221
+ inject: {
222
+ elForm: {
223
+ default: ''
224
+ },
225
+ elFormItem: {
226
+ default: ''
227
+ }
228
+ },
229
+ directives: { Clickoutside },
230
+ props: {
231
+ form: {
232
+ type: Boolean,
233
+ default: true
234
+ },
235
+ isShowLevel3: {
236
+ type: Boolean,
237
+ default: true
238
+ },
239
+ value: [Array, Object],
240
+ action: {
241
+ type: String,
242
+ default: getSelectorOrgDetail
243
+ },
244
+ host: {
245
+ type: String,
246
+ default: ''
247
+ },
248
+ title: {
249
+ type: String,
250
+ default: '公用选择器'
251
+ },
252
+ width: {
253
+ type: String,
254
+ default: '900px'
255
+ },
256
+ height: {
257
+ type: String,
258
+ default: '560px'
259
+ },
260
+ multiple: {
261
+ type: Boolean,
262
+ default: true
263
+ },
264
+ valueKey: {
265
+ type: String,
266
+ default: 'showid'
267
+ },
268
+ labelKey: {
269
+ type: String,
270
+ default: 'showname'
271
+ },
272
+ valueType: {
273
+ type: String,
274
+ default: 'object',
275
+ validator: function (value) {
276
+ return ['string', 'object'].includes(value);
277
+ }
278
+ },
279
+ size: String,
280
+ id: String,
281
+ disabled: Boolean,
282
+ clearable: {
283
+ type: Boolean,
284
+ default: true
285
+ },
286
+ placeholder: {
287
+ type: String,
288
+ default: '请选择'
289
+ },
290
+ autocomplete: {
291
+ type: String,
292
+ default: 'off'
293
+ },
294
+ name: String,
295
+ readonly: Boolean,
296
+ collapseTags: {
297
+ type: Boolean,
298
+ default: false
299
+ },
300
+ plain: Boolean,
301
+ types: {
302
+ type: Array,
303
+ default() {
304
+ return ['enterprise', 'person'];
305
+ }
306
+ },
307
+ tabindex: {
308
+ type: [String, Number],
309
+ default: -1
310
+ },
311
+ filterable: {
312
+ type: Boolean,
313
+ default: false
314
+ },
315
+ showButton: {
316
+ type: Boolean,
317
+ default: false
318
+ },
319
+ button: Object,
320
+ active: String,
321
+ keywords: {
322
+ type: String,
323
+ default: 'namelike'
324
+ },
325
+ //输入框搜索参数
326
+ where: {
327
+ type: Object,
328
+ default() {
329
+ return {
330
+ mid: '0-0-0-0-0'
331
+ };
332
+ }
333
+ },
334
+ mix: {
335
+ type: Boolean,
336
+ default: false
337
+ },
338
+ noMatchText: {
339
+ type: String,
340
+ default: '无匹配数据'
341
+ },
342
+ emptySerach: {
343
+ type: Boolean,
344
+ default: false
345
+ },
346
+ reset: Boolean,
347
+ useCaseCode: String,
348
+ businessData: [String, Array, Object],
349
+ inputHeight: {
350
+ type: Number,
351
+ default: 40
352
+ }
353
+ },
354
+ data() {
355
+ return {
356
+ selected: [],
357
+ visible: false,
358
+ menuVisibleOnFocus: false,
359
+ inputHovering: false,
360
+ styles: {},
361
+ words: '',
362
+ minWidth: '',
363
+ options: '',
364
+ show: false,
365
+ focus: false,
366
+ reference: undefined,
367
+ timer: null
368
+ };
369
+ },
370
+ computed: {
371
+ isRender() {
372
+ let useCaseCodes = util.getStorage('useCaseCodes');
373
+ if (useCaseCodes && this.useCaseCode) {
374
+ return useCaseCodes.indexOf(this.useCaseCode) > -1;
375
+ }
376
+ return true;
377
+ },
378
+ isReset() {
379
+ return this.reset ? this.visible : true;
380
+ },
381
+ _elFormItemSize() {
382
+ return (this.elFormItem || {}).elFormItemSize;
383
+ },
384
+ actived() {
385
+ if (this.active) {
386
+ return this.active;
387
+ }
388
+ return this.types[0];
389
+ },
390
+ selectorSize() {
391
+ return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;
392
+ },
393
+ selectorDisabled() {
394
+ return this.disabled || (this.elForm || {}).disabled;
395
+ },
396
+ selectedLabel: {
397
+ get() {
398
+ if (this.selected) {
399
+ if (typeof this.selected === 'string') {
400
+ return this.selected;
401
+ } else if (util.isObject(this.selected)) {
402
+ return this.selected[this.labelKey];
403
+ } else if (Array.isArray(this.selected)) {
404
+ return this.selected
405
+ .map((item) => {
406
+ return typeof item === 'string' ? item : item[this.labelKey];
407
+ })
408
+ .join(',');
409
+ }
410
+ }
411
+ return '';
412
+ },
413
+ set(val) {
414
+ this.selected = [val];
415
+ this.words = val;
416
+ return val;
417
+ }
418
+ },
419
+ currentPlaceholder() {
420
+ if (this.selected && this.selected.length) {
421
+ return '';
422
+ } else if (this.filterable) {
423
+ return '输入关键字搜索';
424
+ } else {
425
+ return this.placeholder;
426
+ }
427
+ }
428
+ },
429
+ watch: {
430
+ value: {
431
+ immediate: true,
432
+ deep: true,
433
+ handler(val) {
434
+ if (util.isExist(val)) {
435
+ if (util.isObject(val)) {
436
+ this.selected = [val];
437
+ } else {
438
+ this.selected = val;
439
+ }
440
+ } else {
441
+ this.selected = [];
442
+ }
443
+ }
444
+ },
445
+ selected: {
446
+ deep: true,
447
+ handler(val) {
448
+ this.$emit(
449
+ 'change',
450
+ Array.isArray(val) ? val : [val],
451
+ this.businessData
452
+ );
453
+ if (this.multiple) {
454
+ this.resetInputHeight();
455
+ }
456
+ }
457
+ },
458
+ words(val) {
459
+ if (this.emptySerach || val !== '') {
460
+ clearTimeout(this.timer);
461
+ this.timer = setTimeout(this.handleSearch, 500);
462
+ }
463
+ }
464
+ },
465
+ created() {
466
+ this.reference = this.$refs.esSelector;
467
+ },
468
+ mounted() {
469
+ this.resetInputHeight();
470
+ if (this.filterable) {
471
+ this.$nextTick(() => {
472
+ this.$refs.reference &&
473
+ (this.minWidth = this.$refs.reference.$el.children[0].offsetWidth);
474
+ });
475
+ }
476
+ if (this.$refs.openDialog) {
477
+ this.$refs.openDialog.$el.parentNode.addEventListener('click', () => {
478
+ this.openDialog();
479
+ });
480
+ }
481
+ },
482
+ methods: {
483
+ isObject(obj) {
484
+ return util.isObject(obj);
485
+ },
486
+ getValueKey(obj) {
487
+ return util.isObject(obj) ? obj[this.valueKey] : obj;
488
+ },
489
+ toggleMenu() {
490
+ if (!this.selectorDisabled && !this.readonly && !this.filterable) {
491
+ this.visible = true;
492
+ }
493
+ },
494
+ openDialog() {
495
+ if (!this.selectorDisabled && !this.readonly) {
496
+ this.visible = true;
497
+ }
498
+ },
499
+ handleSearch() {
500
+ if (this.filterable) {
501
+ let params = {
502
+ type: this.actived
503
+ };
504
+ params[this.keywords] = this.words;
505
+ params = util.extend({}, params, this.where);
506
+ util
507
+ .ajax({
508
+ url: this.action,
509
+ params: params
510
+ })
511
+ .then((res) => {
512
+ if (res.rCode === 0) {
513
+ this.options = res.results;
514
+ if (this.selected.length && this.multiple) {
515
+ this.selected.forEach((item) => {
516
+ let i = util.indexOfObj(this.options, item, this.valueKey);
517
+ if (i > -1) {
518
+ this.options[i].selected = true;
519
+ }
520
+ });
521
+ }
522
+ this.show = true;
523
+ }
524
+ })
525
+ .catch((err) => {
526
+ if (err.message && err.message !== 'canceled') {
527
+ this.$message.error(err.message);
528
+ }
529
+ });
530
+ }
531
+ },
532
+ handleFocus() {
533
+ if (this.filterable) {
534
+ this.focus = true;
535
+ }
536
+ },
537
+ handleBlur() {
538
+ this.focus = false;
539
+ },
540
+ tabschage(trees, active) {
541
+ this.$emit('tabs-change', trees, active);
542
+ },
543
+ handleClose(res) {
544
+ if (!this.multiple && this.selected[0] === this.words) {
545
+ this.selected = [];
546
+ }
547
+ this.show = false;
548
+ },
549
+ handleSelect(res) {
550
+ this.words = '';
551
+ if (!res.selected) {
552
+ if (this.multiple) {
553
+ if (this.selected.length) {
554
+ if (!res.selected) {
555
+ res.selected = true;
556
+ this.selected.push(res);
557
+ this.selected = util.arrUnique(this.selected, this.valueKey);
558
+ }
559
+ } else {
560
+ res.selected = true;
561
+ this.selected = [res];
562
+ }
563
+ } else {
564
+ res.selected = true;
565
+ if (Array.isArray(this.selected)) {
566
+ if (
567
+ this.selected[0] &&
568
+ typeof this.selected[0] !== 'string' &&
569
+ this.selected[0][this.valueKey] !== res[this.valueKey]
570
+ ) {
571
+ this.selected[0].selected = false;
572
+ }
573
+ this.selected = [res];
574
+ } else {
575
+ if (
576
+ this.selected &&
577
+ typeof this.selected !== 'string' &&
578
+ this.selected[this.valueKey] !== res[this.valueKey]
579
+ ) {
580
+ this.selected.selected = false;
581
+ }
582
+ this.selected = [res];
583
+ }
584
+ }
585
+ }
586
+ this.$emit('input', this.selected);
587
+ this.$emit('confirm', this.selected);
588
+ },
589
+ handleConfirm(res) {
590
+ this.visible = false;
591
+ if (util.isObject(res)) {
592
+ this.$emit('input', [res]);
593
+ this.$emit('confirm', [res], this.businessData);
594
+ } else {
595
+ this.$emit('input', res);
596
+ this.$emit('confirm', res, this.businessData);
597
+ }
598
+ let inputChildNodes = this.$refs.reference
599
+ ? this.$refs.reference.$el.childNodes
600
+ : null;
601
+ let input = inputChildNodes
602
+ ? [].filter.call(inputChildNodes, (item) => item.tagName === 'INPUT')[0]
603
+ : null;
604
+ if (input) {
605
+ input.focus();
606
+ input.blur();
607
+ }
608
+ if (this.reset) {
609
+ this.selected = [];
610
+ }
611
+ },
612
+ handleClear() {
613
+ this.$emit('input', []);
614
+ this.$emit('clear');
615
+ },
616
+ handleCancel() {
617
+ this.visible = false;
618
+ this.$emit('cancel');
619
+ },
620
+ deleteTag(event, item, index) {
621
+ event;
622
+ item;
623
+ index = index === undefined ? 0 : index;
624
+ this.selected.splice(index, 1);
625
+ },
626
+ resetInputHeight() {
627
+ if (this.collapseTags) return;
628
+ this.$nextTick(() => {
629
+ if (!this.$refs.reference) return;
630
+ const sizeInMap = this.inputHeight;
631
+ let height = '';
632
+ if (this.selected !== undefined && this.selected.length === 0) {
633
+ height = sizeInMap + 'px';
634
+ } else if (this.$refs.tags) {
635
+ if (this.$refs.tags.clientHeight > sizeInMap) {
636
+ height += this.$refs.tags.clientHeight + 2 + 'px';
637
+ } else {
638
+ height = sizeInMap + 'px';
639
+ }
640
+ }
641
+ if (height) {
642
+ if (this.readonly) {
643
+ this.$refs.reference.style.height = height;
644
+ } else {
645
+ let inputChildNodes = this.$refs.reference.$el.childNodes;
646
+ let input = [].filter.call(
647
+ inputChildNodes,
648
+ (item) => item.tagName === 'INPUT'
649
+ )[0];
650
+ input.style.height = height;
651
+ }
652
+ }
653
+ });
654
+ },
655
+ getLabel(res) {
656
+ let tag = '';
657
+ if (this.mix) {
658
+ tag = util.getTypeName(res.stype);
659
+ }
660
+ return (
661
+ tag +
662
+ (res[this.labelKey]
663
+ ? res[this.labelKey]
664
+ : res.label || res[this.valueKey])
665
+ );
666
+ }
667
+ },
668
+ beforeDestroy() {
669
+ this.$el.removeEventListener('keyup', this.doSearch);
670
+ if (this.$refs.openDialog) {
671
+ this.$refs.openDialog.$el.parentNode.removeEventListener('click', () => {
672
+ this.openDialog();
673
+ });
674
+ }
675
+ }
676
+ };
677
+ </script>