eoss-ui 0.7.24 → 0.7.26

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 (292) hide show
  1. package/lib/button-group.js +3 -0
  2. package/lib/button.js +3 -0
  3. package/lib/calogin.js +236 -233
  4. package/lib/checkbox-group.js +3 -0
  5. package/lib/data-table-form.js +3 -0
  6. package/lib/data-table.js +3 -0
  7. package/lib/date-picker.js +3 -0
  8. package/lib/dialog.js +3 -0
  9. package/lib/eoss-ui.common.js +991 -1016
  10. package/lib/flow-group.js +3 -0
  11. package/lib/flow-list.js +109 -88
  12. package/lib/flow.js +459 -524
  13. package/lib/form.js +3 -0
  14. package/lib/handle-user.js +3 -0
  15. package/lib/handler.js +3 -0
  16. package/lib/icon.js +3 -0
  17. package/lib/index.js +1 -1
  18. package/lib/input-number.js +3 -0
  19. package/lib/input.js +3 -0
  20. package/lib/login.js +3 -0
  21. package/lib/main.js +165 -143
  22. package/lib/menu.js +6 -3
  23. package/lib/nav.js +3 -0
  24. package/lib/page.js +3 -0
  25. package/lib/pagination.js +3 -0
  26. package/lib/player.js +3 -0
  27. package/lib/qr-code.js +16 -13
  28. package/lib/radio-group.js +3 -0
  29. package/lib/retrial-auth.js +3 -0
  30. package/lib/select-ganged.js +3 -0
  31. package/lib/select.js +3 -0
  32. package/lib/selector-panel.js +3 -0
  33. package/lib/selector.js +3 -0
  34. package/lib/sizer.js +3 -0
  35. package/lib/steps.js +3 -0
  36. package/lib/switch.js +3 -0
  37. package/lib/table-form.js +3 -0
  38. package/lib/tabs.js +3 -0
  39. package/lib/theme-chalk/flow.css +1 -1
  40. package/lib/theme-chalk/index.css +1 -1
  41. package/lib/theme-chalk/main.css +1 -1
  42. package/lib/theme-chalk/menu.css +1 -1
  43. package/lib/theme-chalk/simplicity.css +1 -1
  44. package/lib/tips.js +3 -0
  45. package/lib/toolbar.js +4 -4
  46. package/lib/tree-group.js +3 -0
  47. package/lib/tree.js +3 -0
  48. package/lib/upload.js +3 -0
  49. package/lib/utils/util.js +3 -0
  50. package/lib/wujie.js +3 -0
  51. package/lib/wxlogin.js +3 -0
  52. package/package.json +160 -160
  53. package/packages/button/index.js +5 -5
  54. package/packages/button/src/main.vue +418 -418
  55. package/packages/button-group/index.js +5 -5
  56. package/packages/button-group/src/main.vue +346 -346
  57. package/packages/calendar/index.js +5 -5
  58. package/packages/calogin/index.js +5 -5
  59. package/packages/calogin/src/main.vue +412 -412
  60. package/packages/calogin/src/plugin.js +915 -915
  61. package/packages/card/index.js +5 -5
  62. package/packages/card/src/main.vue +156 -156
  63. package/packages/cascader/index.js +5 -5
  64. package/packages/cascader/src/main.vue +168 -168
  65. package/packages/checkbox-group/index.js +5 -5
  66. package/packages/checkbox-group/src/main.vue +333 -333
  67. package/packages/clients/index.js +5 -5
  68. package/packages/clients/src/main.vue +151 -151
  69. package/packages/data-table/index.js +5 -5
  70. package/packages/data-table/src/children.vue +39 -39
  71. package/packages/data-table/src/column.vue +988 -988
  72. package/packages/data-table/src/main.vue +1831 -1831
  73. package/packages/data-table/src/sizer.vue +195 -195
  74. package/packages/data-table-form/index.js +5 -5
  75. package/packages/data-table-form/src/checkbox.vue +101 -101
  76. package/packages/data-table-form/src/colgroup.vue +17 -17
  77. package/packages/data-table-form/src/main.vue +181 -181
  78. package/packages/data-table-form/src/radio.vue +65 -65
  79. package/packages/data-table-form/src/table.vue +233 -233
  80. package/packages/data-table-form/src/tbody.vue +336 -336
  81. package/packages/data-table-form/src/thead.vue +68 -68
  82. package/packages/date-picker/index.js +5 -5
  83. package/packages/date-picker/src/main.vue +236 -236
  84. package/packages/dialog/index.js +5 -5
  85. package/packages/enable-drag/index.js +5 -5
  86. package/packages/enterprise/index.js +5 -5
  87. package/packages/enterprise/src/main.vue +66 -66
  88. package/packages/error-page/index.js +5 -5
  89. package/packages/error-page/src/main.vue +44 -44
  90. package/packages/flow/index.js +5 -5
  91. package/packages/flow/src/component/Circulate.vue +413 -413
  92. package/packages/flow/src/component/CommonOpinions.vue +373 -373
  93. package/packages/flow/src/component/CustomPreset.vue +322 -322
  94. package/packages/flow/src/component/FileList.vue +97 -97
  95. package/packages/flow/src/component/FreeCirculation.vue +240 -240
  96. package/packages/flow/src/component/Preset.vue +255 -255
  97. package/packages/flow/src/component/SendMsg.vue +242 -242
  98. package/packages/flow/src/component/TimeLimit.vue +190 -190
  99. package/packages/flow/src/component/taskUnionExamine.vue +755 -738
  100. package/packages/flow/src/form.vue +121 -121
  101. package/packages/flow/src/freeStartFlow.vue +2847 -2847
  102. package/packages/flow/src/main.vue +3854 -3843
  103. package/packages/flow/src/processForm.vue +1363 -1370
  104. package/packages/flow/src/processReject.vue +308 -308
  105. package/packages/flow/src/reset.vue +941 -941
  106. package/packages/flow/src/startTaskRead.vue +691 -691
  107. package/packages/flow/src/supervise.vue +159 -159
  108. package/packages/flow/src/table.vue +58 -58
  109. package/packages/flow-group/index.js +5 -5
  110. package/packages/flow-group/src/main.vue +717 -717
  111. package/packages/flow-list/index.js +5 -5
  112. package/packages/flow-list/src/main.vue +1787 -1770
  113. package/packages/form/index.js +5 -5
  114. package/packages/form/src/main.vue +3901 -3901
  115. package/packages/form/src/table.vue +1512 -1512
  116. package/packages/handle-user/index.js +5 -5
  117. package/packages/handle-user/src/main.vue +137 -137
  118. package/packages/handler/index.js +5 -5
  119. package/packages/handler/src/main.vue +496 -496
  120. package/packages/icon/index.js +5 -5
  121. package/packages/icon/src/main.vue +104 -104
  122. package/packages/icons/index.js +5 -5
  123. package/packages/icons/src/main.vue +81 -81
  124. package/packages/input/index.js +5 -5
  125. package/packages/input/src/main.vue +356 -356
  126. package/packages/input-number/index.js +5 -5
  127. package/packages/input-number/src/main.vue +106 -106
  128. package/packages/label/index.js +5 -5
  129. package/packages/label/src/main.vue +457 -457
  130. package/packages/layout/index.js +5 -5
  131. package/packages/layout/src/item.vue +152 -152
  132. package/packages/layout/src/main.vue +31 -31
  133. package/packages/login/index.js +5 -5
  134. package/packages/login/src/main.vue +2020 -2020
  135. package/packages/login/src/resetPassword.vue +557 -557
  136. package/packages/main/index.js +5 -5
  137. package/packages/main/src/default/message.vue +249 -249
  138. package/packages/main/src/default/notice.vue +157 -157
  139. package/packages/main/src/default/userinfo.vue +502 -502
  140. package/packages/main/src/public/online.vue +89 -89
  141. package/packages/main/src/public/search.vue +464 -464
  142. package/packages/main/src/public/settings.vue +221 -221
  143. package/packages/main/src/simplicity/apps.vue +388 -388
  144. package/packages/main/src/simplicity/avatar.vue +82 -82
  145. package/packages/main/src/simplicity/handler.vue +263 -263
  146. package/packages/main/src/simplicity/index.vue +2135 -2125
  147. package/packages/main/src/simplicity/lists.vue +84 -84
  148. package/packages/main/src/simplicity/menu-list.vue +135 -135
  149. package/packages/main/src/simplicity/message.vue +259 -259
  150. package/packages/main/src/simplicity/notice.vue +190 -190
  151. package/packages/main/src/simplicity/router-page.vue +45 -45
  152. package/packages/main/src/simplicity/sub-menu.vue +264 -264
  153. package/packages/main/src/simplicity/user.vue +259 -259
  154. package/packages/main/src/simplicity/userinfo.vue +398 -398
  155. package/packages/menu/index.js +5 -5
  156. package/packages/menu/src/main.vue +596 -584
  157. package/packages/nav/index.js +5 -5
  158. package/packages/nav/src/main.vue +351 -351
  159. package/packages/notify/index.js +5 -5
  160. package/packages/notify/src/main.vue +538 -538
  161. package/packages/page/index.js +5 -5
  162. package/packages/page/src/main.vue +167 -167
  163. package/packages/pagination/index.js +5 -5
  164. package/packages/pagination/src/main.vue +96 -96
  165. package/packages/player/index.js +5 -5
  166. package/packages/player/src/main.vue +194 -194
  167. package/packages/qr-code/index.js +5 -5
  168. package/packages/qr-code/src/main.vue +170 -170
  169. package/packages/radio-group/index.js +6 -6
  170. package/packages/radio-group/src/main.vue +319 -319
  171. package/packages/retrial-auth/index.js +5 -5
  172. package/packages/retrial-auth/src/main.vue +280 -280
  173. package/packages/select/index.js +5 -5
  174. package/packages/select/src/main.vue +782 -782
  175. package/packages/select-ganged/index.js +5 -5
  176. package/packages/select-ganged/src/main.vue +724 -724
  177. package/packages/selector/index.js +5 -5
  178. package/packages/selector/src/main.vue +761 -761
  179. package/packages/selector-panel/index.js +5 -5
  180. package/packages/selector-panel/src/main.vue +1027 -1027
  181. package/packages/selector-panel/src/selection.vue +170 -170
  182. package/packages/selector-panel/src/tree.vue +129 -129
  183. package/packages/sizer/index.js +5 -5
  184. package/packages/sizer/src/main.vue +254 -254
  185. package/packages/steps/index.js +5 -5
  186. package/packages/steps/src/main.vue +181 -181
  187. package/packages/switch/index.js +5 -5
  188. package/packages/switch/src/main.vue +170 -170
  189. package/packages/table-form/index.js +5 -5
  190. package/packages/tabs/index.js +5 -5
  191. package/packages/tabs/src/main.vue +788 -788
  192. package/packages/tabs-panel/index.js +5 -5
  193. package/packages/tabs-panel/src/main.vue +29 -29
  194. package/packages/theme-chalk/lib/flow.css +1 -1
  195. package/packages/theme-chalk/lib/index.css +1 -1
  196. package/packages/theme-chalk/lib/main.css +1 -1
  197. package/packages/theme-chalk/lib/menu.css +1 -1
  198. package/packages/theme-chalk/lib/simplicity.css +1 -1
  199. package/packages/theme-chalk/src/base.scss +261 -261
  200. package/packages/theme-chalk/src/button-group.scss +176 -176
  201. package/packages/theme-chalk/src/button.scss +24 -24
  202. package/packages/theme-chalk/src/calendar.scss +113 -113
  203. package/packages/theme-chalk/src/card.scss +99 -99
  204. package/packages/theme-chalk/src/checkbox-group.scss +8 -8
  205. package/packages/theme-chalk/src/clients.scss +87 -87
  206. package/packages/theme-chalk/src/data-table-form.scss +67 -67
  207. package/packages/theme-chalk/src/data-table.scss +293 -293
  208. package/packages/theme-chalk/src/date-picker.scss +7 -7
  209. package/packages/theme-chalk/src/dialog.scss +77 -77
  210. package/packages/theme-chalk/src/enable-drag.scss +181 -181
  211. package/packages/theme-chalk/src/enterprise.scss +5 -5
  212. package/packages/theme-chalk/src/error-page.scss +18 -18
  213. package/packages/theme-chalk/src/flow-group.scss +110 -110
  214. package/packages/theme-chalk/src/flow-list.scss +39 -39
  215. package/packages/theme-chalk/src/flow.scss +351 -351
  216. package/packages/theme-chalk/src/form.scss +501 -501
  217. package/packages/theme-chalk/src/handle-user.scss +40 -40
  218. package/packages/theme-chalk/src/handler.scss +148 -148
  219. package/packages/theme-chalk/src/icon.scss +1817 -1817
  220. package/packages/theme-chalk/src/icons.scss +99 -99
  221. package/packages/theme-chalk/src/input.scss +9 -9
  222. package/packages/theme-chalk/src/label.scss +24 -24
  223. package/packages/theme-chalk/src/layout.scss +46 -46
  224. package/packages/theme-chalk/src/login.scss +987 -987
  225. package/packages/theme-chalk/src/main.scss +663 -663
  226. package/packages/theme-chalk/src/menu.scss +224 -222
  227. package/packages/theme-chalk/src/mixins/color.scss +117 -117
  228. package/packages/theme-chalk/src/nav.scss +111 -111
  229. package/packages/theme-chalk/src/page.scss +3 -3
  230. package/packages/theme-chalk/src/pagination.scss +29 -29
  231. package/packages/theme-chalk/src/player.scss +9 -9
  232. package/packages/theme-chalk/src/qr-code.scss +17 -17
  233. package/packages/theme-chalk/src/radio-group.scss +9 -9
  234. package/packages/theme-chalk/src/retrial-auth.scss +38 -38
  235. package/packages/theme-chalk/src/select-ganged.scss +8 -8
  236. package/packages/theme-chalk/src/select.scss +8 -8
  237. package/packages/theme-chalk/src/selector-panel.scss +204 -204
  238. package/packages/theme-chalk/src/selector.scss +92 -92
  239. package/packages/theme-chalk/src/simplicity.scss +1370 -1366
  240. package/packages/theme-chalk/src/sizer.scss +36 -36
  241. package/packages/theme-chalk/src/steps.scss +88 -88
  242. package/packages/theme-chalk/src/switch.scss +3 -3
  243. package/packages/theme-chalk/src/table-form.scss +1 -1
  244. package/packages/theme-chalk/src/tabs.scss +87 -87
  245. package/packages/theme-chalk/src/tips.scss +7 -7
  246. package/packages/theme-chalk/src/toolbar.scss +179 -179
  247. package/packages/theme-chalk/src/tree-group.scss +72 -72
  248. package/packages/theme-chalk/src/tree.scss +165 -165
  249. package/packages/theme-chalk/src/upload.scss +172 -172
  250. package/packages/theme-chalk/src/wxlogin.scss +3 -3
  251. package/packages/tips/index.js +5 -5
  252. package/packages/tips/src/main.vue +141 -141
  253. package/packages/toolbar/index.js +5 -5
  254. package/packages/toolbar/src/main.vue +430 -430
  255. package/packages/tree/index.js +5 -5
  256. package/packages/tree-group/index.js +5 -5
  257. package/packages/upload/index.js +5 -5
  258. package/packages/upload/src/main.vue +1343 -1343
  259. package/packages/upload/src/picture.js +15 -15
  260. package/packages/wujie/index.js +5 -5
  261. package/packages/wujie/src/main.vue +145 -145
  262. package/packages/wxlogin/index.js +5 -5
  263. package/packages/wxlogin/src/main.vue +128 -128
  264. package/src/config/api.js +315 -315
  265. package/src/config/image.js +2 -2
  266. package/src/index.js +163 -163
  267. package/src/utils/bus.js +3 -3
  268. package/src/utils/date-util.js +312 -312
  269. package/src/utils/http.js +50 -50
  270. package/src/utils/rules.js +18 -18
  271. package/src/utils/store.js +21 -21
  272. package/src/utils/util.js +3 -0
  273. package/src/utils/webSocket.js +107 -107
  274. package/packages/.DS_Store +0 -0
  275. package/packages/calogin/.DS_Store +0 -0
  276. package/packages/date-picker/.DS_Store +0 -0
  277. package/packages/date-picker/src/.DS_Store +0 -0
  278. package/packages/flow/.DS_Store +0 -0
  279. package/packages/flow/src/.DS_Store +0 -0
  280. package/packages/flow-list/.DS_Store +0 -0
  281. package/packages/form/.DS_Store +0 -0
  282. package/packages/login/.DS_Store +0 -0
  283. package/packages/main/.DS_Store +0 -0
  284. package/packages/main/src/.DS_Store +0 -0
  285. package/packages/menu/.DS_Store +0 -0
  286. package/packages/select/.DS_Store +0 -0
  287. package/packages/selector/.DS_Store +0 -0
  288. package/packages/selector-panel/.DS_Store +0 -0
  289. package/packages/theme-chalk/src/.DS_Store +0 -0
  290. package/packages/upload/.DS_Store +0 -0
  291. package/src/.DS_Store +0 -0
  292. package/src/utils/.DS_Store +0 -0
@@ -1,782 +1,782 @@
1
- <script>
2
- import { findSysCode, getDictList } from 'eoss-ui/src/config/api.js';
3
- import { debounce } from 'throttle-debounce';
4
- import store from 'eoss-ui/src/utils/store';
5
- import util from 'eoss-ui/src/utils/util';
6
- export default {
7
- name: 'EsSelect',
8
- componentName: 'EsSelect',
9
- inheritAttrs: false,
10
- provide() {
11
- return {
12
- esSelect: this
13
- };
14
- },
15
- inject: {
16
- esForm: {
17
- default: ''
18
- }
19
- },
20
- props: {
21
- service: String,
22
- value: [String, Array, Object, Number],
23
- method: {
24
- type: String,
25
- default: 'get'
26
- },
27
- param: {
28
- type: Object,
29
- default() {
30
- return {};
31
- }
32
- },
33
- // 显示隐藏组件
34
- display: {
35
- type: Boolean,
36
- default: true
37
- },
38
- // 是否不渲染组件
39
- hide: {
40
- type: Boolean,
41
- default: false
42
- },
43
- valueType: {
44
- type: String,
45
- default: 'string',
46
- validator: function (value) {
47
- return ['string', 'object'].includes(value);
48
- }
49
- },
50
- // 选择项的值字段
51
- valueKey: {
52
- type: String,
53
- default: 'value'
54
- },
55
- // 指定选择项显示值的键名,data元素是对象类型时必填
56
- labelKey: {
57
- type: String,
58
- default: 'name'
59
- },
60
- data: {
61
- type: Array,
62
- default() {
63
- return [];
64
- }
65
- },
66
- // 远程搜索
67
- remote: Boolean,
68
- // 远程搜索的参数名
69
- remoteKey: {
70
- type: String,
71
- default: 'searchKey'
72
- },
73
- // 远程搜索的方法
74
- remoteMethod: Function,
75
- // 选择项远程地址
76
- url: String,
77
- // 选择项获取代码表数据(优先级大于url)
78
- sysCode: String,
79
- filtrate: [String, Object, Array],
80
- filtrateKey: {
81
- type: String,
82
- default: 'pid'
83
- },
84
- readonly: Boolean,
85
- separator: {
86
- type: String,
87
- default: '-'
88
- },
89
- symbol: {
90
- type: String,
91
- default: ','
92
- },
93
- plain: Boolean,
94
- where: Object,
95
- parseData: Function,
96
- disabled: Boolean,
97
- // 是否下拉树选择
98
- tree: {
99
- type: [Boolean, Object],
100
- default: false
101
- },
102
- // 父级是否可选
103
- parentCheck: {
104
- type: Boolean,
105
- default: true
106
- },
107
- // 父级可选时父级是否作为单独的值
108
- parentAsValue: {
109
- type: Boolean,
110
- default: true
111
- },
112
- group: Boolean,
113
- multiple: Boolean,
114
- defaultValue: Boolean,
115
- onExpand: Function,
116
- onLoadsub: Function,
117
- subParamKey: Object,
118
- lazy: Boolean,
119
- //是否请求代码表
120
- ajax: {
121
- type: Boolean,
122
- default: true
123
- },
124
- isNoParamRequest: {
125
- type: Boolean,
126
- default: true
127
- },
128
- dataKey: String
129
- },
130
- data() {
131
- return {
132
- loading: false,
133
- options: '',
134
- valKey: this.valueKey,
135
- label: this.labelKey,
136
- hidden: false,
137
- canceled: false
138
- };
139
- },
140
- computed: {
141
- isObject() {
142
- if (this.valueType === 'object') {
143
- return true;
144
- }
145
- if (
146
- util.isObject(this.value) ||
147
- (this.value && this.value[0] && util.isObject(this.value[0]))
148
- ) {
149
- return true;
150
- }
151
- return false;
152
- },
153
- isRemote() {
154
- return new Boolean(this.remote);
155
- },
156
- results() {
157
- if (this.options.length) {
158
- return this.options;
159
- }
160
- if (this.filtrate) {
161
- if (Array.isArray(this.filtrate) && this.filtrate.length) {
162
- let ary = [];
163
- this.filtrate.forEach((items) => {
164
- let val = typeof items === 'string' ? items : items[this.valKey];
165
- ary = ary.concat(
166
- this.data.filter((item) => {
167
- return item[this.filtrateKey] == val;
168
- })
169
- );
170
- });
171
- return ary;
172
- } else {
173
- let val =
174
- typeof this.filtrate === 'string'
175
- ? this.filtrate
176
- : this.filtrate[this.valKey];
177
- return this.data.filter((item) => {
178
- return item[this.filtrateKey] == val;
179
- });
180
- }
181
- }
182
- return this.data;
183
- },
184
- models: {
185
- get() {
186
- return this.value;
187
- },
188
- set(val) {
189
- return val;
190
- }
191
- },
192
- findCode() {
193
- if (this.service) {
194
- return `/${this.service}${getDictList}`;
195
- }
196
- return findSysCode;
197
- }
198
- },
199
- watch: {
200
- sysCode: {
201
- immediate: true,
202
- handler(val, old) {
203
- if (val && val !== old) {
204
- this.label = this.service ? 'label' : 'shortName';
205
- this.valKey = this.service ? 'value' : 'cciValue';
206
- const options = store.get(val);
207
- if (options) {
208
- this.options = JSON.parse(JSON.stringify(options));
209
- } else {
210
- this.getData(val);
211
- }
212
- }
213
- }
214
- },
215
- url: {
216
- immediate: true,
217
- handler(val, old) {
218
- if (val && old !== val && !this.sysCode) {
219
- this.getData(this.sysCode);
220
- }
221
- }
222
- },
223
- param: {
224
- deep: true,
225
- handler(val, old) {
226
- if (this.url && JSON.stringify(val) !== JSON.stringify(old)) {
227
- this.options = [];
228
- this.getData(this.sysCode);
229
- }
230
- }
231
- }
232
- },
233
- beforeCreate() {
234
- this.getData = debounce(500, (sysCode, param, reload) => {
235
- this.getDatas(sysCode, param, reload);
236
- });
237
- },
238
- created() {
239
- this.bindEventBus();
240
- },
241
- mounted() {},
242
- methods: {
243
- createOption({ filtrate, data, readonly = false, h }) {
244
- let filte =
245
- filtrate && util.isObject(filtrate) ? filtrate[this.valKey] : filtrate;
246
- let eles = [];
247
- data.forEach((item) => {
248
- if (this.models === undefined && item.selected) {
249
- this.$emit(
250
- 'input',
251
- this.valueType === 'object' ? item : item[this.valKey]
252
- );
253
- }
254
- if (
255
- (Object.prototype.hasOwnProperty.call(item, 'children') ||
256
- Object.prototype.hasOwnProperty.call(item, 'options')) &&
257
- (item.children || item.options)
258
- ) {
259
- const children = item.children || item.options;
260
- if (readonly) {
261
- eles.push(
262
- this.createOption({ filtrate, data: children, readonly, h })
263
- );
264
- } else {
265
- eles.push(
266
- h(
267
- 'el-option-group',
268
- { attrs: { label: item[this.label] || item.label } },
269
- this.createOption({ filtrate, data: children, readonly, h })
270
- )
271
- );
272
- }
273
- } else {
274
- if (readonly) {
275
- if (item[this.valKey] === filte) {
276
- eles.push(item[this.label] || item.label);
277
- }
278
- } else {
279
- if (
280
- filte === null ||
281
- filte === undefined ||
282
- filte === '' ||
283
- filte === item[this.filtrateKey]
284
- ) {
285
- if (typeof item === 'string') {
286
- eles.push(
287
- h('el-option', {
288
- attrs: {
289
- label: item,
290
- value: item
291
- }
292
- })
293
- );
294
- } else {
295
- let content = [];
296
- const labelContent = item[this.label] || item.label;
297
- //判断它是否是html字符串
298
- if (
299
- typeof labelContent === 'string' &&
300
- /<[^>]+>/.test(labelContent)
301
- ) {
302
- // 如果是 HTML 字符串,创建对应的 VNode
303
- content = [
304
- h('div', { domProps: { innerHTML: labelContent } })
305
- ];
306
- } else {
307
- content = [labelContent];
308
- }
309
- if (item.render) {
310
- content = [item.render(h, item)];
311
- }
312
- if (item.tips) {
313
- let attrs =
314
- typeof item.tips == 'string'
315
- ? { content: item.tips }
316
- : item.tips;
317
- content.push(
318
- h('es-tips', {
319
- attrs: attrs
320
- })
321
- );
322
- }
323
-
324
- eles.push(
325
- h(
326
- 'el-option',
327
- {
328
- attrs: {
329
- label: item[this.label] || item.label,
330
- value: this.isObject ? item : item[this.valKey],
331
- disabled: item.disabled
332
- },
333
- style: item.style
334
- },
335
- content
336
- )
337
- );
338
- }
339
- }
340
- }
341
- }
342
- });
343
- return eles;
344
- },
345
- getDatas(sysCode, param, reload) {
346
- if (
347
- !reload &&
348
- (!this.ajax ||
349
- (!this.isNoParamRequest && Object.keys(this.param).length == 0))
350
- ) {
351
- return false;
352
- }
353
- let params = {};
354
- if (this.results.length === 0 || reload) {
355
- params = util.extend(
356
- {},
357
- this.param,
358
- sysCode ? { sysAppCode: sysCode, code: sysCode } : {},
359
- param ? param : {}
360
- );
361
- } else {
362
- return false;
363
- }
364
- if (!sysCode && !this.url) {
365
- return false;
366
- }
367
- this.loading = true;
368
- util
369
- .ajax({
370
- url: sysCode ? this.findCode : this.url,
371
- method: this.method,
372
- params: params,
373
- data: params
374
- })
375
- .then((res) => {
376
- this.loading = false;
377
- this.canceled = false;
378
- if (res.rCode === 0) {
379
- if (this.parseData) {
380
- this.options = this.parseData(
381
- JSON.parse(JSON.stringify(res.results))
382
- );
383
- } else {
384
- this.options = JSON.parse(JSON.stringify(res.results));
385
- }
386
- if (sysCode || this.dataKey) {
387
- this.$emit('optionSuccess', this.options);
388
- const bus = this.bus || this.$root.Bus;
389
- bus &&
390
- bus.$emit(
391
- sysCode || this.dataKey,
392
- JSON.parse(JSON.stringify(this.options))
393
- );
394
- store.set(sysCode, JSON.parse(JSON.stringify(this.options)));
395
- }
396
- } else {
397
- this.$message.error(res.msg);
398
- }
399
- })
400
- .catch((err) => {
401
- this.loading = false;
402
- if (err.message) {
403
- if (err.message !== 'canceled') {
404
- this.$message.error(err.message);
405
- }
406
- if (err.message === 'canceled' && sysCode) {
407
- this.canceled = true;
408
- }
409
- }
410
- });
411
- },
412
- search(query) {
413
- if (query && query !== '') {
414
- if (this.url && this.url !== '') {
415
- this.loading = true;
416
- let params = {};
417
- params[this.remoteKey] = query;
418
- params = util.extend({}, this.param, params);
419
- util
420
- .ajax({
421
- url: this.url,
422
- method: this.method,
423
- params: params,
424
- data: params
425
- })
426
- .then((res) => {
427
- this.loading = false;
428
- if (res.rCode === 0) {
429
- this.options = JSON.parse(JSON.stringify(res.results));
430
- }
431
- })
432
- .catch((err) => {
433
- this.loading = false;
434
- if (err.message && err.message !== 'canceled') {
435
- this.$message.error(err.message);
436
- }
437
- });
438
- } else {
439
- this.options = [];
440
- }
441
- } else {
442
- this.options = this.data;
443
- }
444
- },
445
- renderd(doms, h, type) {
446
- if (typeof this.$attrs[type] === 'boolean') {
447
- if (this.$attrs.render) {
448
- if (typeof this.$attrs.render == 'string') {
449
- try {
450
- doms.push(
451
- h(
452
- 'template',
453
- { slot: type },
454
- util.toFunction(this.$attrs.render)(h, this)
455
- )
456
- );
457
- } catch (error) {
458
- throw error;
459
- }
460
- } else {
461
- doms.push(
462
- h('template', { slot: type }, this.$attrs.render(h, this))
463
- );
464
- }
465
- }
466
- } else if (typeof this.$attrs[type] === 'object') {
467
- doms.push(
468
- h(
469
- 'es-button',
470
- {
471
- slot: type,
472
- class: ['el-primeval', this.$attrs[type].class],
473
- props: {
474
- ...this.$attrs[type].props,
475
- size: this.$attrs[type].size
476
- ? this.$attrs[type].size
477
- : type === 'prefix' || type === 'suffix'
478
- ? 'small'
479
- : '',
480
- type: 'primary'
481
- },
482
- domProps: this.$attrs[type].icon
483
- ? { innerHTML: this.$attrs[type].icon }
484
- : {},
485
- on: {
486
- click: (e) => {
487
- this.$attrs[type].click &&
488
- this.$attrs[type].click(this, this.model);
489
- this.$attrs[type].event &&
490
- this.$attrs[type].event(this, this.model);
491
- }
492
- },
493
- ref: 'selectBtn'
494
- },
495
- [this.$attrs[type].text]
496
- )
497
- );
498
- } else {
499
- doms.push(h('template', { slot: type }, [this.$attrs[type]]));
500
- }
501
- },
502
- getLabel(value, data) {
503
- if ((value || value === 0) && data) {
504
- if (util.isObject(data)) {
505
- if (value === data[this.valKey]) {
506
- return data[this.label];
507
- } else if (value === data[this.label]) {
508
- return value;
509
- } else if (
510
- Object.prototype.hasOwnProperty.call(data, 'children') &&
511
- data.children &&
512
- data.children.length
513
- ) {
514
- let val = this.getLabel(value, data.children);
515
- if (val) {
516
- return val;
517
- }
518
- }
519
- } else {
520
- if (
521
- typeof data === 'string' ||
522
- (!data.length && !this.sysCode && !this.url)
523
- ) {
524
- return value;
525
- }
526
- if (Array.isArray(data) && data.length) {
527
- for (let i = 0; i < data.length; i++) {
528
- let val = this.getLabel(value, data[i]);
529
- if (val) {
530
- return val;
531
- }
532
- }
533
- }
534
- }
535
- }
536
- return '';
537
- },
538
- reload() {
539
- this.getData(...arguments);
540
- },
541
- handleExpand(data, node) {
542
- if (this.onExpand) {
543
- this.onExpand(data, node);
544
- } else {
545
- if (this.lazy) {
546
- this.loadsub(data, node);
547
- }
548
- this.$emit('node-expand', data, node);
549
- }
550
- },
551
- //请求子节点数据
552
- loadsub(data, node) {
553
- if (data.state !== '' && (!data.children || data.children.length === 0)) {
554
- let param = {};
555
- if (this.subParamKey) {
556
- for (let i in this.subParamKey) {
557
- param[i] = data[this.subParamKey[i]];
558
- }
559
- } else {
560
- param[this.valKey] = data[this.valKey];
561
- }
562
- let params = util.extend({}, this.param, this.where, param);
563
- if (this.parseParams) {
564
- params = this.parseParams({ data, params, node });
565
- }
566
- if (this.onLoadsub) {
567
- this.onLoadsub({ data, params, node })
568
- .then((res) => {
569
- this.loading = false;
570
- this.$set(data, 'children', JSON.parse(JSON.stringify(res)));
571
- if (this.dataKey && this.esForm) {
572
- this.esForm.setSysCodes(
573
- this.dataKey,
574
- JSON.parse(JSON.stringify(this.options))
575
- );
576
- }
577
- })
578
- .catch((e) => {
579
- this.loading = false;
580
- });
581
- } else {
582
- util
583
- .ajax({
584
- method: this.method,
585
- url: this.url,
586
- data: params,
587
- params: params
588
- })
589
- .then((res) => {
590
- if (res.rCode === 0) {
591
- this.loading = false;
592
- let results = JSON.parse(JSON.stringify(res.results));
593
- if (Array.isArray(results)) {
594
- if (data.id === results[0].id) {
595
- this.$set(data, 'children', results[0].children);
596
- } else {
597
- this.$set(data, 'children', results);
598
- }
599
- } else if (data.id === results.id) {
600
- this.$set(data, 'children', results.children);
601
- } else {
602
- console.error('tree数据格式错误');
603
- }
604
- if (this.dataKey && this.esForm) {
605
- this.esForm.setSysCodes(
606
- this.dataKey,
607
- JSON.parse(JSON.stringify(this.options))
608
- );
609
- }
610
- }
611
- })
612
- .catch((err) => {
613
- this.loading = false;
614
- if (err.message && err.message !== 'canceled') {
615
- this.$message.error(err.message);
616
- }
617
- });
618
- }
619
- }
620
- },
621
- toggleMenu() {
622
- this.$refs.elSelect.toggleMenu();
623
- },
624
- setOptions(val) {
625
- this.options = val;
626
- },
627
- bindEventBus() {
628
- const bus = this.bus || this.$root.Bus;
629
- bus && bus.$on(this.sysCode || this.dataKey, this.setOptions);
630
- },
631
- unbindEventBus() {
632
- const bus = this.bus || this.$root.Bus;
633
- bus && bus.$off(this.sysCode || this.dataKey, this.setOptions);
634
- }
635
- },
636
- beforeDestroy() {
637
- this.unbindEventBus();
638
- },
639
- render(h) {
640
- if (!this.hide) {
641
- if (this.readonly) {
642
- let dom = [];
643
- if (Array.isArray(this.models)) {
644
- dom = this.models.map((item) => {
645
- if (util.isObject(item)) {
646
- if (!item[this.label] && !item.label) {
647
- return this.getLabel(value[this.valKey], data);
648
- }
649
- return item[this.label] || item.label;
650
- }
651
- return this.getLabel(item, this.results);
652
- });
653
- } else if (util.isObject(this.models)) {
654
- if (!this.models[this.label] && !this.models.label) {
655
- dom = [this.getLabel(this.models[this.valKey], this.results)];
656
- } else {
657
- dom = [this.models[this.label] || this.models.label];
658
- }
659
- } else {
660
- dom = [this.getLabel(this.models, this.results)];
661
- }
662
- return h(
663
- 'div',
664
- {
665
- class: [
666
- {
667
- 'es-plain': this.plain,
668
- 'es-textarea__inner el-textarea__inner': this.multiple,
669
- 'el-input__inner es-input__inner': !this.multiple
670
- }
671
- ],
672
- domProps: {
673
- innerHTML: dom.join(this.symbol)
674
- }
675
- },
676
- []
677
- );
678
- }
679
- let doms = [];
680
- let cls = [];
681
- if (this.results.length && !this.tree) {
682
- if (this.filtrate && Array.isArray(this.filtrate)) {
683
- doms = this.filtrate.map((item) => {
684
- return h(
685
- 'el-option-group',
686
- {
687
- attrs: {
688
- label: item[this.label] || item.label,
689
- key: item[this.valKey]
690
- }
691
- },
692
- this.createOption({ filtrate: item, data: this.results, h })
693
- );
694
- });
695
- } else {
696
- doms = this.createOption({
697
- filtrate: this.filtrate,
698
- data: this.results,
699
- h
700
- });
701
- }
702
- }
703
- let { prefix, suffix, prepend, append, ...attrs } = this.$attrs;
704
- if (this.$slots.prefix) {
705
- doms.push(h('template', { slot: 'prefix' }, this.$slots.prefix));
706
- } else if (prefix) {
707
- this.renderd(doms, h, 'prefix');
708
- cls.push('es-select-button-prefix');
709
- }
710
- if (this.$slots.suffix) {
711
- doms.push(h('template', { slot: 'suffix' }, this.$slots.suffix));
712
- } else if (suffix) {
713
- this.renderd(doms, h, 'suffix');
714
- cls.push('es-select-button-suffix');
715
- }
716
- if (this.$slots.prepend) {
717
- doms.push(h('template', { slot: 'prepend' }, this.$slots.prepend));
718
- } else if (prepend) {
719
- this.renderd(doms, h, 'prepend');
720
- }
721
- if (this.$slots.append) {
722
- doms.push(h('template', { slot: 'append' }, this.$slots.append));
723
- } else if (append) {
724
- this.renderd(doms, h, 'append');
725
- }
726
- if (!this.models && this.results.length && this.defaultValue) {
727
- if (this.valueType === 'object') {
728
- this.models = this.results[0];
729
- //this.$emit('input', this.results[0]);
730
- } else {
731
- this.models = this.results[0][this.valKey];
732
- //this.$emit('input', this.results[0][this.valKey]);
733
- }
734
- this.$emit('change', this.results[0], 0);
735
- }
736
- return h(
737
- 'el-select',
738
- {
739
- class: cls,
740
- ref: 'elSelect',
741
- directives: [
742
- {
743
- name: 'show',
744
- value: this.display
745
- }
746
- ],
747
- props: {
748
- ...attrs,
749
- multiple: this.multiple,
750
- valueType: this.valueType,
751
- valueKey: this.valKey,
752
- labelKey: this.label,
753
- loading: this.loading,
754
- disabled: this.disabled,
755
- tree:
756
- typeof this.tree === 'boolean'
757
- ? this.tree
758
- : { ...this.tree, lazy: this.lazy },
759
- data: this.results,
760
- // 父级是否可选
761
- parentCheck: this.parentCheck,
762
- // 父级可选时父级是否作为单独的值
763
- parentAsValue: this.parentAsValue,
764
- value: this.models
765
- },
766
- attrs: {
767
- remoteMethod: !this.remoteMethod ? this.search : this.remoteMethod,
768
- remote: this.remote
769
- },
770
- on: {
771
- ...this.$listeners,
772
- 'node-expand': this.handleExpand
773
- }
774
- },
775
- this.$slots.default ? this.$slots.default : doms
776
- );
777
- } else {
778
- return '';
779
- }
780
- }
781
- };
782
- </script>
1
+ <script>
2
+ import { findSysCode, getDictList } from 'eoss-ui/src/config/api.js';
3
+ import { debounce } from 'throttle-debounce';
4
+ import store from 'eoss-ui/src/utils/store';
5
+ import util from 'eoss-ui/src/utils/util';
6
+ export default {
7
+ name: 'EsSelect',
8
+ componentName: 'EsSelect',
9
+ inheritAttrs: false,
10
+ provide() {
11
+ return {
12
+ esSelect: this
13
+ };
14
+ },
15
+ inject: {
16
+ esForm: {
17
+ default: ''
18
+ }
19
+ },
20
+ props: {
21
+ service: String,
22
+ value: [String, Array, Object, Number],
23
+ method: {
24
+ type: String,
25
+ default: 'get'
26
+ },
27
+ param: {
28
+ type: Object,
29
+ default() {
30
+ return {};
31
+ }
32
+ },
33
+ // 显示隐藏组件
34
+ display: {
35
+ type: Boolean,
36
+ default: true
37
+ },
38
+ // 是否不渲染组件
39
+ hide: {
40
+ type: Boolean,
41
+ default: false
42
+ },
43
+ valueType: {
44
+ type: String,
45
+ default: 'string',
46
+ validator: function (value) {
47
+ return ['string', 'object'].includes(value);
48
+ }
49
+ },
50
+ // 选择项的值字段
51
+ valueKey: {
52
+ type: String,
53
+ default: 'value'
54
+ },
55
+ // 指定选择项显示值的键名,data元素是对象类型时必填
56
+ labelKey: {
57
+ type: String,
58
+ default: 'name'
59
+ },
60
+ data: {
61
+ type: Array,
62
+ default() {
63
+ return [];
64
+ }
65
+ },
66
+ // 远程搜索
67
+ remote: Boolean,
68
+ // 远程搜索的参数名
69
+ remoteKey: {
70
+ type: String,
71
+ default: 'searchKey'
72
+ },
73
+ // 远程搜索的方法
74
+ remoteMethod: Function,
75
+ // 选择项远程地址
76
+ url: String,
77
+ // 选择项获取代码表数据(优先级大于url)
78
+ sysCode: String,
79
+ filtrate: [String, Object, Array],
80
+ filtrateKey: {
81
+ type: String,
82
+ default: 'pid'
83
+ },
84
+ readonly: Boolean,
85
+ separator: {
86
+ type: String,
87
+ default: '-'
88
+ },
89
+ symbol: {
90
+ type: String,
91
+ default: ','
92
+ },
93
+ plain: Boolean,
94
+ where: Object,
95
+ parseData: Function,
96
+ disabled: Boolean,
97
+ // 是否下拉树选择
98
+ tree: {
99
+ type: [Boolean, Object],
100
+ default: false
101
+ },
102
+ // 父级是否可选
103
+ parentCheck: {
104
+ type: Boolean,
105
+ default: true
106
+ },
107
+ // 父级可选时父级是否作为单独的值
108
+ parentAsValue: {
109
+ type: Boolean,
110
+ default: true
111
+ },
112
+ group: Boolean,
113
+ multiple: Boolean,
114
+ defaultValue: Boolean,
115
+ onExpand: Function,
116
+ onLoadsub: Function,
117
+ subParamKey: Object,
118
+ lazy: Boolean,
119
+ //是否请求代码表
120
+ ajax: {
121
+ type: Boolean,
122
+ default: true
123
+ },
124
+ isNoParamRequest: {
125
+ type: Boolean,
126
+ default: true
127
+ },
128
+ dataKey: String
129
+ },
130
+ data() {
131
+ return {
132
+ loading: false,
133
+ options: '',
134
+ valKey: this.valueKey,
135
+ label: this.labelKey,
136
+ hidden: false,
137
+ canceled: false
138
+ };
139
+ },
140
+ computed: {
141
+ isObject() {
142
+ if (this.valueType === 'object') {
143
+ return true;
144
+ }
145
+ if (
146
+ util.isObject(this.value) ||
147
+ (this.value && this.value[0] && util.isObject(this.value[0]))
148
+ ) {
149
+ return true;
150
+ }
151
+ return false;
152
+ },
153
+ isRemote() {
154
+ return new Boolean(this.remote);
155
+ },
156
+ results() {
157
+ if (this.options.length) {
158
+ return this.options;
159
+ }
160
+ if (this.filtrate) {
161
+ if (Array.isArray(this.filtrate) && this.filtrate.length) {
162
+ let ary = [];
163
+ this.filtrate.forEach((items) => {
164
+ let val = typeof items === 'string' ? items : items[this.valKey];
165
+ ary = ary.concat(
166
+ this.data.filter((item) => {
167
+ return item[this.filtrateKey] == val;
168
+ })
169
+ );
170
+ });
171
+ return ary;
172
+ } else {
173
+ let val =
174
+ typeof this.filtrate === 'string'
175
+ ? this.filtrate
176
+ : this.filtrate[this.valKey];
177
+ return this.data.filter((item) => {
178
+ return item[this.filtrateKey] == val;
179
+ });
180
+ }
181
+ }
182
+ return this.data;
183
+ },
184
+ models: {
185
+ get() {
186
+ return this.value;
187
+ },
188
+ set(val) {
189
+ return val;
190
+ }
191
+ },
192
+ findCode() {
193
+ if (this.service) {
194
+ return `/${this.service}${getDictList}`;
195
+ }
196
+ return findSysCode;
197
+ }
198
+ },
199
+ watch: {
200
+ sysCode: {
201
+ immediate: true,
202
+ handler(val, old) {
203
+ if (val && val !== old) {
204
+ this.label = this.service ? 'label' : 'shortName';
205
+ this.valKey = this.service ? 'value' : 'cciValue';
206
+ const options = store.get(val);
207
+ if (options) {
208
+ this.options = JSON.parse(JSON.stringify(options));
209
+ } else {
210
+ this.getData(val);
211
+ }
212
+ }
213
+ }
214
+ },
215
+ url: {
216
+ immediate: true,
217
+ handler(val, old) {
218
+ if (val && old !== val && !this.sysCode) {
219
+ this.getData(this.sysCode);
220
+ }
221
+ }
222
+ },
223
+ param: {
224
+ deep: true,
225
+ handler(val, old) {
226
+ if (this.url && JSON.stringify(val) !== JSON.stringify(old)) {
227
+ this.options = [];
228
+ this.getData(this.sysCode);
229
+ }
230
+ }
231
+ }
232
+ },
233
+ beforeCreate() {
234
+ this.getData = debounce(500, (sysCode, param, reload) => {
235
+ this.getDatas(sysCode, param, reload);
236
+ });
237
+ },
238
+ created() {
239
+ this.bindEventBus();
240
+ },
241
+ mounted() {},
242
+ methods: {
243
+ createOption({ filtrate, data, readonly = false, h }) {
244
+ let filte =
245
+ filtrate && util.isObject(filtrate) ? filtrate[this.valKey] : filtrate;
246
+ let eles = [];
247
+ data.forEach((item) => {
248
+ if (this.models === undefined && item.selected) {
249
+ this.$emit(
250
+ 'input',
251
+ this.valueType === 'object' ? item : item[this.valKey]
252
+ );
253
+ }
254
+ if (
255
+ (Object.prototype.hasOwnProperty.call(item, 'children') ||
256
+ Object.prototype.hasOwnProperty.call(item, 'options')) &&
257
+ (item.children || item.options)
258
+ ) {
259
+ const children = item.children || item.options;
260
+ if (readonly) {
261
+ eles.push(
262
+ this.createOption({ filtrate, data: children, readonly, h })
263
+ );
264
+ } else {
265
+ eles.push(
266
+ h(
267
+ 'el-option-group',
268
+ { attrs: { label: item[this.label] || item.label } },
269
+ this.createOption({ filtrate, data: children, readonly, h })
270
+ )
271
+ );
272
+ }
273
+ } else {
274
+ if (readonly) {
275
+ if (item[this.valKey] === filte) {
276
+ eles.push(item[this.label] || item.label);
277
+ }
278
+ } else {
279
+ if (
280
+ filte === null ||
281
+ filte === undefined ||
282
+ filte === '' ||
283
+ filte === item[this.filtrateKey]
284
+ ) {
285
+ if (typeof item === 'string') {
286
+ eles.push(
287
+ h('el-option', {
288
+ attrs: {
289
+ label: item,
290
+ value: item
291
+ }
292
+ })
293
+ );
294
+ } else {
295
+ let content = [];
296
+ const labelContent = item[this.label] || item.label;
297
+ //判断它是否是html字符串
298
+ if (
299
+ typeof labelContent === 'string' &&
300
+ /<[^>]+>/.test(labelContent)
301
+ ) {
302
+ // 如果是 HTML 字符串,创建对应的 VNode
303
+ content = [
304
+ h('div', { domProps: { innerHTML: labelContent } })
305
+ ];
306
+ } else {
307
+ content = [labelContent];
308
+ }
309
+ if (item.render) {
310
+ content = [item.render(h, item)];
311
+ }
312
+ if (item.tips) {
313
+ let attrs =
314
+ typeof item.tips == 'string'
315
+ ? { content: item.tips }
316
+ : item.tips;
317
+ content.push(
318
+ h('es-tips', {
319
+ attrs: attrs
320
+ })
321
+ );
322
+ }
323
+
324
+ eles.push(
325
+ h(
326
+ 'el-option',
327
+ {
328
+ attrs: {
329
+ label: item[this.label] || item.label,
330
+ value: this.isObject ? item : item[this.valKey],
331
+ disabled: item.disabled
332
+ },
333
+ style: item.style
334
+ },
335
+ content
336
+ )
337
+ );
338
+ }
339
+ }
340
+ }
341
+ }
342
+ });
343
+ return eles;
344
+ },
345
+ getDatas(sysCode, param, reload) {
346
+ if (
347
+ !reload &&
348
+ (!this.ajax ||
349
+ (!this.isNoParamRequest && Object.keys(this.param).length == 0))
350
+ ) {
351
+ return false;
352
+ }
353
+ let params = {};
354
+ if (this.results.length === 0 || reload) {
355
+ params = util.extend(
356
+ {},
357
+ this.param,
358
+ sysCode ? { sysAppCode: sysCode, code: sysCode } : {},
359
+ param ? param : {}
360
+ );
361
+ } else {
362
+ return false;
363
+ }
364
+ if (!sysCode && !this.url) {
365
+ return false;
366
+ }
367
+ this.loading = true;
368
+ util
369
+ .ajax({
370
+ url: sysCode ? this.findCode : this.url,
371
+ method: this.method,
372
+ params: params,
373
+ data: params
374
+ })
375
+ .then((res) => {
376
+ this.loading = false;
377
+ this.canceled = false;
378
+ if (res.rCode === 0) {
379
+ if (this.parseData) {
380
+ this.options = this.parseData(
381
+ JSON.parse(JSON.stringify(res.results))
382
+ );
383
+ } else {
384
+ this.options = JSON.parse(JSON.stringify(res.results));
385
+ }
386
+ if (sysCode || this.dataKey) {
387
+ this.$emit('optionSuccess', this.options);
388
+ const bus = this.bus || this.$root.Bus;
389
+ bus &&
390
+ bus.$emit(
391
+ sysCode || this.dataKey,
392
+ JSON.parse(JSON.stringify(this.options))
393
+ );
394
+ store.set(sysCode, JSON.parse(JSON.stringify(this.options)));
395
+ }
396
+ } else {
397
+ this.$message.error(res.msg);
398
+ }
399
+ })
400
+ .catch((err) => {
401
+ this.loading = false;
402
+ if (err.message) {
403
+ if (err.message !== 'canceled') {
404
+ this.$message.error(err.message);
405
+ }
406
+ if (err.message === 'canceled' && sysCode) {
407
+ this.canceled = true;
408
+ }
409
+ }
410
+ });
411
+ },
412
+ search(query) {
413
+ if (query && query !== '') {
414
+ if (this.url && this.url !== '') {
415
+ this.loading = true;
416
+ let params = {};
417
+ params[this.remoteKey] = query;
418
+ params = util.extend({}, this.param, params);
419
+ util
420
+ .ajax({
421
+ url: this.url,
422
+ method: this.method,
423
+ params: params,
424
+ data: params
425
+ })
426
+ .then((res) => {
427
+ this.loading = false;
428
+ if (res.rCode === 0) {
429
+ this.options = JSON.parse(JSON.stringify(res.results));
430
+ }
431
+ })
432
+ .catch((err) => {
433
+ this.loading = false;
434
+ if (err.message && err.message !== 'canceled') {
435
+ this.$message.error(err.message);
436
+ }
437
+ });
438
+ } else {
439
+ this.options = [];
440
+ }
441
+ } else {
442
+ this.options = this.data;
443
+ }
444
+ },
445
+ renderd(doms, h, type) {
446
+ if (typeof this.$attrs[type] === 'boolean') {
447
+ if (this.$attrs.render) {
448
+ if (typeof this.$attrs.render == 'string') {
449
+ try {
450
+ doms.push(
451
+ h(
452
+ 'template',
453
+ { slot: type },
454
+ util.toFunction(this.$attrs.render)(h, this)
455
+ )
456
+ );
457
+ } catch (error) {
458
+ throw error;
459
+ }
460
+ } else {
461
+ doms.push(
462
+ h('template', { slot: type }, this.$attrs.render(h, this))
463
+ );
464
+ }
465
+ }
466
+ } else if (typeof this.$attrs[type] === 'object') {
467
+ doms.push(
468
+ h(
469
+ 'es-button',
470
+ {
471
+ slot: type,
472
+ class: ['el-primeval', this.$attrs[type].class],
473
+ props: {
474
+ ...this.$attrs[type].props,
475
+ size: this.$attrs[type].size
476
+ ? this.$attrs[type].size
477
+ : type === 'prefix' || type === 'suffix'
478
+ ? 'small'
479
+ : '',
480
+ type: 'primary'
481
+ },
482
+ domProps: this.$attrs[type].icon
483
+ ? { innerHTML: this.$attrs[type].icon }
484
+ : {},
485
+ on: {
486
+ click: (e) => {
487
+ this.$attrs[type].click &&
488
+ this.$attrs[type].click(this, this.model);
489
+ this.$attrs[type].event &&
490
+ this.$attrs[type].event(this, this.model);
491
+ }
492
+ },
493
+ ref: 'selectBtn'
494
+ },
495
+ [this.$attrs[type].text]
496
+ )
497
+ );
498
+ } else {
499
+ doms.push(h('template', { slot: type }, [this.$attrs[type]]));
500
+ }
501
+ },
502
+ getLabel(value, data) {
503
+ if ((value || value === 0) && data) {
504
+ if (util.isObject(data)) {
505
+ if (value === data[this.valKey]) {
506
+ return data[this.label];
507
+ } else if (value === data[this.label]) {
508
+ return value;
509
+ } else if (
510
+ Object.prototype.hasOwnProperty.call(data, 'children') &&
511
+ data.children &&
512
+ data.children.length
513
+ ) {
514
+ let val = this.getLabel(value, data.children);
515
+ if (val) {
516
+ return val;
517
+ }
518
+ }
519
+ } else {
520
+ if (
521
+ typeof data === 'string' ||
522
+ (!data.length && !this.sysCode && !this.url)
523
+ ) {
524
+ return value;
525
+ }
526
+ if (Array.isArray(data) && data.length) {
527
+ for (let i = 0; i < data.length; i++) {
528
+ let val = this.getLabel(value, data[i]);
529
+ if (val) {
530
+ return val;
531
+ }
532
+ }
533
+ }
534
+ }
535
+ }
536
+ return '';
537
+ },
538
+ reload() {
539
+ this.getData(...arguments);
540
+ },
541
+ handleExpand(data, node) {
542
+ if (this.onExpand) {
543
+ this.onExpand(data, node);
544
+ } else {
545
+ if (this.lazy) {
546
+ this.loadsub(data, node);
547
+ }
548
+ this.$emit('node-expand', data, node);
549
+ }
550
+ },
551
+ //请求子节点数据
552
+ loadsub(data, node) {
553
+ if (data.state !== '' && (!data.children || data.children.length === 0)) {
554
+ let param = {};
555
+ if (this.subParamKey) {
556
+ for (let i in this.subParamKey) {
557
+ param[i] = data[this.subParamKey[i]];
558
+ }
559
+ } else {
560
+ param[this.valKey] = data[this.valKey];
561
+ }
562
+ let params = util.extend({}, this.param, this.where, param);
563
+ if (this.parseParams) {
564
+ params = this.parseParams({ data, params, node });
565
+ }
566
+ if (this.onLoadsub) {
567
+ this.onLoadsub({ data, params, node })
568
+ .then((res) => {
569
+ this.loading = false;
570
+ this.$set(data, 'children', JSON.parse(JSON.stringify(res)));
571
+ if (this.dataKey && this.esForm) {
572
+ this.esForm.setSysCodes(
573
+ this.dataKey,
574
+ JSON.parse(JSON.stringify(this.options))
575
+ );
576
+ }
577
+ })
578
+ .catch((e) => {
579
+ this.loading = false;
580
+ });
581
+ } else {
582
+ util
583
+ .ajax({
584
+ method: this.method,
585
+ url: this.url,
586
+ data: params,
587
+ params: params
588
+ })
589
+ .then((res) => {
590
+ if (res.rCode === 0) {
591
+ this.loading = false;
592
+ let results = JSON.parse(JSON.stringify(res.results));
593
+ if (Array.isArray(results)) {
594
+ if (data.id === results[0].id) {
595
+ this.$set(data, 'children', results[0].children);
596
+ } else {
597
+ this.$set(data, 'children', results);
598
+ }
599
+ } else if (data.id === results.id) {
600
+ this.$set(data, 'children', results.children);
601
+ } else {
602
+ console.error('tree数据格式错误');
603
+ }
604
+ if (this.dataKey && this.esForm) {
605
+ this.esForm.setSysCodes(
606
+ this.dataKey,
607
+ JSON.parse(JSON.stringify(this.options))
608
+ );
609
+ }
610
+ }
611
+ })
612
+ .catch((err) => {
613
+ this.loading = false;
614
+ if (err.message && err.message !== 'canceled') {
615
+ this.$message.error(err.message);
616
+ }
617
+ });
618
+ }
619
+ }
620
+ },
621
+ toggleMenu() {
622
+ this.$refs.elSelect.toggleMenu();
623
+ },
624
+ setOptions(val) {
625
+ this.options = val;
626
+ },
627
+ bindEventBus() {
628
+ const bus = this.bus || this.$root.Bus;
629
+ bus && bus.$on(this.sysCode || this.dataKey, this.setOptions);
630
+ },
631
+ unbindEventBus() {
632
+ const bus = this.bus || this.$root.Bus;
633
+ bus && bus.$off(this.sysCode || this.dataKey, this.setOptions);
634
+ }
635
+ },
636
+ beforeDestroy() {
637
+ this.unbindEventBus();
638
+ },
639
+ render(h) {
640
+ if (!this.hide) {
641
+ if (this.readonly) {
642
+ let dom = [];
643
+ if (Array.isArray(this.models)) {
644
+ dom = this.models.map((item) => {
645
+ if (util.isObject(item)) {
646
+ if (!item[this.label] && !item.label) {
647
+ return this.getLabel(value[this.valKey], data);
648
+ }
649
+ return item[this.label] || item.label;
650
+ }
651
+ return this.getLabel(item, this.results);
652
+ });
653
+ } else if (util.isObject(this.models)) {
654
+ if (!this.models[this.label] && !this.models.label) {
655
+ dom = [this.getLabel(this.models[this.valKey], this.results)];
656
+ } else {
657
+ dom = [this.models[this.label] || this.models.label];
658
+ }
659
+ } else {
660
+ dom = [this.getLabel(this.models, this.results)];
661
+ }
662
+ return h(
663
+ 'div',
664
+ {
665
+ class: [
666
+ {
667
+ 'es-plain': this.plain,
668
+ 'es-textarea__inner el-textarea__inner': this.multiple,
669
+ 'el-input__inner es-input__inner': !this.multiple
670
+ }
671
+ ],
672
+ domProps: {
673
+ innerHTML: dom.join(this.symbol)
674
+ }
675
+ },
676
+ []
677
+ );
678
+ }
679
+ let doms = [];
680
+ let cls = [];
681
+ if (this.results.length && !this.tree) {
682
+ if (this.filtrate && Array.isArray(this.filtrate)) {
683
+ doms = this.filtrate.map((item) => {
684
+ return h(
685
+ 'el-option-group',
686
+ {
687
+ attrs: {
688
+ label: item[this.label] || item.label,
689
+ key: item[this.valKey]
690
+ }
691
+ },
692
+ this.createOption({ filtrate: item, data: this.results, h })
693
+ );
694
+ });
695
+ } else {
696
+ doms = this.createOption({
697
+ filtrate: this.filtrate,
698
+ data: this.results,
699
+ h
700
+ });
701
+ }
702
+ }
703
+ let { prefix, suffix, prepend, append, ...attrs } = this.$attrs;
704
+ if (this.$slots.prefix) {
705
+ doms.push(h('template', { slot: 'prefix' }, this.$slots.prefix));
706
+ } else if (prefix) {
707
+ this.renderd(doms, h, 'prefix');
708
+ cls.push('es-select-button-prefix');
709
+ }
710
+ if (this.$slots.suffix) {
711
+ doms.push(h('template', { slot: 'suffix' }, this.$slots.suffix));
712
+ } else if (suffix) {
713
+ this.renderd(doms, h, 'suffix');
714
+ cls.push('es-select-button-suffix');
715
+ }
716
+ if (this.$slots.prepend) {
717
+ doms.push(h('template', { slot: 'prepend' }, this.$slots.prepend));
718
+ } else if (prepend) {
719
+ this.renderd(doms, h, 'prepend');
720
+ }
721
+ if (this.$slots.append) {
722
+ doms.push(h('template', { slot: 'append' }, this.$slots.append));
723
+ } else if (append) {
724
+ this.renderd(doms, h, 'append');
725
+ }
726
+ if (!this.models && this.results.length && this.defaultValue) {
727
+ if (this.valueType === 'object') {
728
+ this.models = this.results[0];
729
+ //this.$emit('input', this.results[0]);
730
+ } else {
731
+ this.models = this.results[0][this.valKey];
732
+ //this.$emit('input', this.results[0][this.valKey]);
733
+ }
734
+ this.$emit('change', this.results[0], 0);
735
+ }
736
+ return h(
737
+ 'el-select',
738
+ {
739
+ class: cls,
740
+ ref: 'elSelect',
741
+ directives: [
742
+ {
743
+ name: 'show',
744
+ value: this.display
745
+ }
746
+ ],
747
+ props: {
748
+ ...attrs,
749
+ multiple: this.multiple,
750
+ valueType: this.valueType,
751
+ valueKey: this.valKey,
752
+ labelKey: this.label,
753
+ loading: this.loading,
754
+ disabled: this.disabled,
755
+ tree:
756
+ typeof this.tree === 'boolean'
757
+ ? this.tree
758
+ : { ...this.tree, lazy: this.lazy },
759
+ data: this.results,
760
+ // 父级是否可选
761
+ parentCheck: this.parentCheck,
762
+ // 父级可选时父级是否作为单独的值
763
+ parentAsValue: this.parentAsValue,
764
+ value: this.models
765
+ },
766
+ attrs: {
767
+ remoteMethod: !this.remoteMethod ? this.search : this.remoteMethod,
768
+ remote: this.remote
769
+ },
770
+ on: {
771
+ ...this.$listeners,
772
+ 'node-expand': this.handleExpand
773
+ }
774
+ },
775
+ this.$slots.default ? this.$slots.default : doms
776
+ );
777
+ } else {
778
+ return '';
779
+ }
780
+ }
781
+ };
782
+ </script>