eoss-ui 0.7.14 → 0.7.16

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