eoss-ui 0.6.39 → 0.6.41

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