imatrix-ui 0.2.6-up → 0.2.7-up

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 (206) hide show
  1. package/README.md +7 -7
  2. package/index.html +13 -13
  3. package/lib/super-ui.css +1 -1
  4. package/lib/super-ui.js +2724 -1932
  5. package/lib/super-ui.umd.cjs +24 -24
  6. package/package.json +1 -1
  7. package/packages/IntervalSelection/index.js +6 -6
  8. package/packages/IntervalSelection/src/quarterScope.vue +405 -405
  9. package/packages/IntervalSelection/src/sectionDate.vue +475 -475
  10. package/packages/breadcrumb/index.js +6 -6
  11. package/packages/breadcrumb/src/breadcrumb.vue +81 -81
  12. package/packages/department-tree/index.js +6 -6
  13. package/packages/department-tree/src/department-tree.vue +113 -113
  14. package/packages/department-tree-inline/index.js +6 -6
  15. package/packages/department-tree-inline/src/department-multi-tree-inline.vue +472 -472
  16. package/packages/department-tree-inline/src/department-single-tree-inline.vue +340 -340
  17. package/packages/department-tree-inline/src/department-tree-inline.vue +86 -86
  18. package/packages/department-tree-inline/src/department-tree-service.js +344 -344
  19. package/packages/department-tree-inline/src/search-result.vue +235 -235
  20. package/packages/department-user-tree/index.js +6 -6
  21. package/packages/department-user-tree/src/department-user-multiple-tree.vue +129 -129
  22. package/packages/department-user-tree/src/department-user-single-tree.vue +94 -94
  23. package/packages/department-user-tree/src/department-user-tree.vue +114 -114
  24. package/packages/department-user-tree-inline/index.js +9 -9
  25. package/packages/department-user-tree-inline/src/department-user-multiple-tree-inline.vue +731 -731
  26. package/packages/department-user-tree-inline/src/department-user-single-tree-inline.vue +334 -334
  27. package/packages/department-user-tree-inline/src/department-user-tree-inline.vue +87 -87
  28. package/packages/department-user-tree-inline/src/department-user-tree-multi-service.js +309 -309
  29. package/packages/department-user-tree-inline/src/department-user-tree-single-service.js +179 -179
  30. package/packages/department-user-tree-inline/src/search-result.vue +273 -273
  31. package/packages/directives/prevent-reclick.js +22 -22
  32. package/packages/dynamic-source-select/index.js +6 -6
  33. package/packages/dynamic-source-select/src/dynamic-source-select-service.js +106 -106
  34. package/packages/dynamic-source-select/src/dynamic-source-select.vue +675 -675
  35. package/packages/dynamic-source-select/src/events.js +78 -78
  36. package/packages/fs-preview/index.js +6 -6
  37. package/packages/fs-preview/src/fs-preview.vue +287 -287
  38. package/packages/fs-upload/index.js +6 -6
  39. package/packages/fs-upload/src/fs-upload-multi.vue +443 -443
  40. package/packages/fs-upload/src/fs-upload-single.vue +353 -353
  41. package/packages/fs-upload/src/fs-upload.vue +191 -191
  42. package/packages/fs-upload/src/see-big-picture.vue +67 -67
  43. package/packages/fs-upload-list/index.js +6 -6
  44. package/packages/fs-upload-list/src/fs-upload-list.vue +372 -372
  45. package/packages/hamburger/index.js +6 -6
  46. package/packages/hamburger/src/hamburger.vue +40 -40
  47. package/packages/index.js +123 -123
  48. package/packages/multipart-upload/index.js +6 -6
  49. package/packages/multipart-upload/src/index.vue +66 -66
  50. package/packages/multipart-upload/src/multipart-upload-form.vue +377 -377
  51. package/packages/multipart-upload/src/multipart-upload-list.vue +517 -517
  52. package/packages/organization-input/index.js +6 -6
  53. package/packages/organization-input/src/organization-input.vue +583 -583
  54. package/packages/plugins/export-data-new.js +623 -623
  55. package/packages/plugins/export-data.js +431 -431
  56. package/packages/plugins/index.js +15 -15
  57. package/packages/plugins/public-method.js +47 -47
  58. package/packages/remove-department/index.js +6 -6
  59. package/packages/remove-department/src/remove-department.vue +200 -200
  60. package/packages/remove-department/src/remove-dept-service.js +31 -31
  61. package/packages/remove-user/index.js +6 -6
  62. package/packages/remove-user/src/remove-user-service.js +31 -31
  63. package/packages/remove-user/src/remove-user.vue +226 -226
  64. package/packages/remove-workgroup/index.js +6 -6
  65. package/packages/remove-workgroup/src/remove-workgroup-service.js +31 -31
  66. package/packages/remove-workgroup/src/remove-workgroup.vue +183 -183
  67. package/packages/rich-editor/index.js +7 -7
  68. package/packages/rich-editor/index.vue +297 -297
  69. package/packages/rich-editor/langs/zh-Hans.js +438 -438
  70. package/packages/rich-editor/viewer.vue +105 -105
  71. package/packages/scan-code-input/index.js +6 -6
  72. package/packages/scan-code-input/src/events.js +34 -34
  73. package/packages/scan-code-input/src/scan-code-input-colse.vue +140 -140
  74. package/packages/scan-code-input/src/scan-code-input.vue +132 -132
  75. package/packages/secret-info/index.js +7 -7
  76. package/packages/secret-info/index.vue +100 -100
  77. package/packages/super-grid/index.js +7 -7
  78. package/packages/super-grid/src/apis.js +1092 -1092
  79. package/packages/super-grid/src/columns-config.vue +427 -427
  80. package/packages/super-grid/src/custom-formatter.js +394 -394
  81. package/packages/super-grid/src/eventBus.js +2 -2
  82. package/packages/super-grid/src/events.js +56 -56
  83. package/packages/super-grid/src/formValidatorUtil.js +300 -300
  84. package/packages/super-grid/src/formatter.js +196 -196
  85. package/packages/super-grid/src/group-column.vue +99 -99
  86. package/packages/super-grid/src/header-context-menu.vue +82 -82
  87. package/packages/super-grid/src/index-column.vue +69 -69
  88. package/packages/super-grid/src/public-methods.js +30 -30
  89. package/packages/super-grid/src/row-operation.vue +193 -193
  90. package/packages/super-grid/src/search-button.vue +74 -74
  91. package/packages/super-grid/src/search-condition-input.vue +73 -73
  92. package/packages/super-grid/src/search-condition-list.vue +68 -68
  93. package/packages/super-grid/src/search-form-advancedQuery.vue +819 -819
  94. package/packages/super-grid/src/search-form-dialog.vue +77 -77
  95. package/packages/super-grid/src/search-form-item.vue +495 -495
  96. package/packages/super-grid/src/search-form-number.vue +111 -111
  97. package/packages/super-grid/src/search-form-ordinarySearch.vue +239 -239
  98. package/packages/super-grid/src/search-form.vue +762 -762
  99. package/packages/super-grid/src/search-methods.js +592 -592
  100. package/packages/super-grid/src/selection-column.vue +46 -46
  101. package/packages/super-grid/src/store.js +3 -3
  102. package/packages/super-grid/src/super-grid-service.js +728 -728
  103. package/packages/super-grid/src/super-grid.vue +3011 -3011
  104. package/packages/super-grid/src/utils.js +880 -880
  105. package/packages/super-grid/src/view-image-dialog.vue +176 -176
  106. package/packages/super-nine-grid/index.js +7 -7
  107. package/packages/super-nine-grid/src/apis.js +108 -108
  108. package/packages/super-nine-grid/src/custom-formatter.js +73 -73
  109. package/packages/super-nine-grid/src/formatter.js +134 -134
  110. package/packages/super-nine-grid/src/search-form-number.vue +35 -35
  111. package/packages/super-nine-grid/src/search-form.vue +700 -700
  112. package/packages/super-nine-grid/src/search-methods.js +151 -151
  113. package/packages/super-nine-grid/src/store.js +3 -3
  114. package/packages/super-nine-grid/src/super-grid-service.js +107 -107
  115. package/packages/svg-icon/index.js +6 -6
  116. package/packages/svg-icon/src/svg-icon.vue +43 -43
  117. package/packages/utils/date-util.js +292 -292
  118. package/packages/utils/dom.js +227 -227
  119. package/packages/utils/gogocodeTransfer.js +59 -59
  120. package/packages/utils/memory-cache-utils.js +117 -117
  121. package/packages/utils/utils.js +180 -180
  122. package/packages/utils/value-set.js +97 -97
  123. package/packages/valid-code/index.js +7 -7
  124. package/packages/valid-code/src/valid-code.vue +104 -104
  125. package/packages/workflow-button/index.js +6 -6
  126. package/packages/workflow-button/src/workflow-button.vue +550 -550
  127. package/packages/workflow-history-list/index.js +6 -6
  128. package/packages/workflow-history-list/src/api.js +7 -7
  129. package/packages/workflow-history-list/src/workflow-history-list.vue +291 -291
  130. package/packages/workgroup-tree/index.js +6 -6
  131. package/packages/workgroup-tree/src/workgroup-tree.vue +86 -86
  132. package/packages/workgroup-tree-inline/index.js +6 -6
  133. package/packages/workgroup-tree-inline/src/search-result.vue +222 -222
  134. package/packages/workgroup-tree-inline/src/workgroup-tree-inline.vue +516 -516
  135. package/packages/workgroup-tree-inline/src/workgroup-tree-service.js +93 -93
  136. package/packages/workgroup-user-tree/index.js +6 -6
  137. package/packages/workgroup-user-tree/src/workgroup-user-tree.vue +103 -103
  138. package/packages/workgroup-user-tree-inline/index.js +9 -9
  139. package/packages/workgroup-user-tree-inline/src/search-result.vue +266 -266
  140. package/packages/workgroup-user-tree-inline/src/workgroup-tree-inline-service.js +239 -239
  141. package/packages/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue +657 -657
  142. package/packages/year-range-picker/index.js +6 -6
  143. package/packages/year-range-picker/src/year-range-picker.vue +53 -53
  144. package/src/api/sso-service.js +172 -172
  145. package/src/api/tab.js +36 -36
  146. package/src/api/user-service.js +11 -11
  147. package/src/directives/permission/index.js +13 -13
  148. package/src/directives/permission/permission.js +20 -20
  149. package/src/i18n/langs/cn.js +259 -259
  150. package/src/i18n/langs/en.js +269 -269
  151. package/src/index.js +93 -93
  152. package/src/plugins.js +18 -18
  153. package/src/router/index.js +8 -26
  154. package/src/store/getters.js +15 -15
  155. package/src/store/index.js +19 -19
  156. package/src/store/modules/app.js +54 -54
  157. package/src/store/modules/tab-content.js +36 -36
  158. package/src/store/modules/user.js +285 -285
  159. package/src/utils/auth.js +61 -61
  160. package/src/utils/calculator/calculator-factory-wf.js +558 -558
  161. package/src/utils/calculator/calculator-factory.js +145 -145
  162. package/src/utils/calculator/calculator-util.js +166 -166
  163. package/src/utils/eventBus.js +2 -2
  164. package/src/utils/iconUtils.js +28 -28
  165. package/src/utils/index.js +102 -102
  166. package/src/utils/jump-page-utils.js +824 -824
  167. package/src/utils/menu.js +19 -19
  168. package/src/utils/permission.js +31 -31
  169. package/src/utils/permissionAuth.js +96 -96
  170. package/src/utils/range-selector.js +188 -188
  171. package/src/utils/request.js +269 -269
  172. package/src/utils/restful-interface-utils.js +57 -57
  173. package/src/utils/util.js +703 -703
  174. package/src/utils/validate.js +34 -34
  175. package/src/utils/watermark.js +108 -108
  176. package/src/utils/workflow-util.js +93 -93
  177. package/src/views/404.vue +248 -248
  178. package/src/views/dsc-component/Sidebar/Item.vue +84 -84
  179. package/src/views/dsc-component/Sidebar/Link.vue +38 -38
  180. package/src/views/dsc-component/Sidebar/SidebarItem.vue +198 -198
  181. package/src/views/dsc-component/Sidebar/index.vue +229 -229
  182. package/src/views/dsc-component/tabs/tab-content.vue +203 -203
  183. package/src/views/error-page/401.vue +106 -106
  184. package/src/views/error-page/404.vue +248 -248
  185. package/src/views/layout/EmptyLayout.vue +3 -3
  186. package/src/views/layout/Layout.vue +81 -81
  187. package/src/views/layout/NewLayout.vue +18 -18
  188. package/src/views/layout/components/AppMain.vue +39 -39
  189. package/src/views/layout/components/Breadcrumb/index.vue +158 -158
  190. package/src/views/layout/components/Menubar/Item.vue +79 -79
  191. package/src/views/layout/components/Menubar/Link.vue +38 -38
  192. package/src/views/layout/components/Menubar/index.vue +210 -210
  193. package/src/views/layout/components/Sidebar/Item.vue +53 -53
  194. package/src/views/layout/components/Sidebar/Link.vue +38 -38
  195. package/src/views/layout/components/Sidebar/index.vue +141 -141
  196. package/src/views/layout/components/iframe-page.vue +38 -38
  197. package/src/views/layout/components/index.js +4 -4
  198. package/src/views/layout/components/tabs/tab-content.vue +207 -207
  199. package/src/views/layout/mixin/ResizeHandler.js +41 -41
  200. package/src/views/layout/tab-content-iframe-index.vue +38 -38
  201. package/src/views/layout/tab-content-index.vue +93 -93
  202. package/src/views/login/authredirect.vue +10 -10
  203. package/src/views/login/index.vue +296 -296
  204. package/src/views/login/update-password.vue +243 -243
  205. package/src/views/redirect/index.vue +14 -14
  206. package/src/views/wf-history/tache-subprocess-history.vue +45 -45
@@ -1,700 +1,700 @@
1
- <template>
2
- <el-form
3
- v-if="searchableColumns.length > 0"
4
- ref="searchForm"
5
- :model="searchForm"
6
- :rules="rules"
7
- :label-width="labelWidth"
8
- :label-position="query.queryLabelPosition"
9
- class="grid-search-form"
10
- size="mini"
11
- >
12
- <table>
13
- <tr v-for="r of rowNum" :key="r">
14
- <td
15
- v-for="n of getColumnNumPerRow(r, searchableColumns.length)"
16
- :key="n"
17
- >
18
- <el-form-item
19
- :prop="searchableColumns[fieldNum * (r - 1) + (n - 1)].prop"
20
- :label-width="
21
- searchableColumns[fieldNum * (r - 1) + (n - 1)].searchLabelWidth
22
- ? searchableColumns[fieldNum * (r - 1) + (n - 1)]
23
- .searchLabelWidth
24
- : '160px'
25
- "
26
- :style="{ paddingLeft: '10px', minWidth: '200px' }"
27
- >
28
- <template v-slot:label>
29
- <span
30
- v-if="
31
- searchableColumns[fieldNum * (r - 1) + (n - 1)].searchLabel &&
32
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
33
- .searchLabel !== ''
34
- "
35
- v-html="
36
- searchableColumns[
37
- fieldNum * (r - 1) + (n - 1)
38
- ].searchLabel.replace(/\\n/g, '</br>')
39
- "
40
- />
41
- <span
42
- v-else
43
- v-html="
44
- searchableColumns[fieldNum * (r - 1) + (n - 1)].label.replace(
45
- /\\n/g,
46
- '</br>'
47
- )
48
- "
49
- />
50
- </template>
51
- <el-date-picker
52
- v-if="
53
- searchableColumns[fieldNum * (r - 1) + (n - 1)].dataType ===
54
- 'DATE' ||
55
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
56
- .componentType === 'date'
57
- "
58
- :model-value="
59
- getFormItemValue(
60
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
61
- )
62
- "
63
- type="daterange"
64
- :style="
65
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
66
- .searchControlWidth
67
- "
68
- :range-separator="$t('imatrixUIPublicModel.to')"
69
- unlink-panels
70
- :start-placeholder="$t('imatrixUIMessage.startDate')"
71
- :end-placeholder="$t('imatrixUIMessage.endDate')"
72
- value-format="yyyy-MM-dd"
73
- @input="
74
- setValueToModelProp(
75
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
76
- $event
77
- )
78
- "
79
- />
80
-
81
- <el-date-picker
82
- v-else-if="
83
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
84
- .componentType === 'dateTimePicker'
85
- "
86
- :model-value="
87
- getFormItemValue(
88
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
89
- )
90
- "
91
- type="datetimerange"
92
- :range-separator="$t('imatrixUIPublicModel.to')"
93
- unlink-panels
94
- :style="
95
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
96
- .searchControlWidth
97
- "
98
- :start-placeholder="$t('imatrixUIMessage.startDate')"
99
- :end-placeholder="$t('imatrixUIMessage.endDate')"
100
- value-format="yyyy-MM-dd HH:mm:ss"
101
- @input="
102
- setValueToModelProp(
103
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
104
- $event
105
- )
106
- "
107
- />
108
-
109
- <el-date-picker
110
- v-else-if="
111
- searchableColumns[fieldNum * (r - 1) + (n - 1)].dataType ===
112
- 'TIME' &&
113
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
114
- .componentType === 'timepicker'
115
- "
116
- :model-value="
117
- getFormItemValue(
118
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
119
- )
120
- "
121
- type="datetimerange"
122
- :range-separator="$t('imatrixUIPublicModel.to')"
123
- unlink-panels
124
- :style="
125
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
126
- .searchControlWidth
127
- "
128
- :start-placeholder="$t('imatrixUIMessage.startDate')"
129
- :end-placeholder="$t('imatrixUIMessage.endDate')"
130
- value-format="HH:mm:ss"
131
- @input="
132
- setValueToModelProp(
133
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
134
- $event
135
- )
136
- "
137
- />
138
-
139
- <el-time-picker
140
- v-else-if="
141
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
142
- .componentType === 'timepicker' &&
143
- searchableColumns[fieldNum * (r - 1) + (n - 1)].dataType !==
144
- 'TIME' &&
145
- searchableColumns[fieldNum * (r - 1) + (n - 1)].dataType !==
146
- 'DATE'
147
- "
148
- type="fixed-time"
149
- :placeholder="$t('imatrixUIMessage.selectTime')"
150
- style="width: 100%"
151
- value-format="HH:mm:ss"
152
- :model-value="
153
- getFormItemValue(
154
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
155
- )
156
- "
157
- @input="
158
- setValueToModelProp(
159
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
160
- $event
161
- )
162
- "
163
- />
164
- <el-select
165
- v-else-if="
166
- (searchableColumns[fieldNum * (r - 1) + (n - 1)]
167
- .componentType &&
168
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
169
- .componentType === 'select') ||
170
- searchableColumns[fieldNum * (r - 1) + (n - 1)].dataType ===
171
- 'BOOLEAN'
172
- "
173
- clearable
174
- :style="
175
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
176
- .searchControlWidth
177
- "
178
- :placeholder="$t('imatrixUIMessage.pleaseSelect')"
179
- :model-value="
180
- getFormItemValue(
181
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
182
- )
183
- "
184
- @input="
185
- setValueToModelProp(
186
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
187
- $event
188
- )
189
- "
190
- >
191
- <el-option
192
- v-for="item in searchableColumns[fieldNum * (r - 1) + (n - 1)]
193
- .valueSet"
194
- :key="item.value"
195
- :label="item.label"
196
- :value="item.value"
197
- />
198
- </el-select>
199
- <el-select
200
- v-else-if="
201
- searchableColumns[fieldNum * (r - 1) + (n - 1)].componentType &&
202
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
203
- .componentType === 'multiselect'
204
- "
205
- clearable
206
- multiple
207
- :style="
208
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
209
- .searchControlWidth
210
- "
211
- collapse-tags
212
- :placeholder="$t('imatrixUIMessage.pleaseSelect')"
213
- :model-value="
214
- getFormItemValue(
215
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
216
- )
217
- "
218
- @input="
219
- setValueToModelProp(
220
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
221
- $event
222
- )
223
- "
224
- >
225
- <el-option
226
- v-for="item in searchableColumns[fieldNum * (r - 1) + (n - 1)]
227
- .valueSet"
228
- :key="item.value"
229
- :label="item.label"
230
- :value="item.value"
231
- />
232
- </el-select>
233
- <!--
234
- <el-input-number
235
- v-else-if="searchableColumns[fieldNum*(r-1)+(n-1)].componentType && searchableColumns[fieldNum*(r-1)+(n-1)].componentType==='inputNumber'"
236
- :value="getFormItemValue(searchableColumns[fieldNum*(r-1)+(n-1)].prop)"
237
- @input="setValueToModelProp(searchableColumns[fieldNum*(r-1)+(n-1)].prop,$event)"
238
- /> -->
239
-
240
- <search-form-number
241
- v-else-if="
242
- searchableColumns[fieldNum * (r - 1) + (n - 1)].componentType &&
243
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
244
- .componentType === 'inputNumber'
245
- "
246
- :r="r"
247
- :n="n"
248
- @setValue="setNumberValue"
249
- />
250
-
251
- <el-switch
252
- v-else-if="
253
- searchableColumns[fieldNum * (r - 1) + (n - 1)].componentType &&
254
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
255
- .componentType === 'switch'
256
- "
257
- active-color="#13ce66"
258
- inactive-color="#ff4949"
259
- :style="
260
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
261
- .searchControlWidth
262
- "
263
- :model-value="
264
- getFormItemValue(
265
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
266
- )
267
- "
268
- @input="
269
- setValueToModelProp(
270
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
271
- $event
272
- )
273
- "
274
- />
275
- <el-slider
276
- v-else-if="
277
- searchableColumns[fieldNum * (r - 1) + (n - 1)].componentType &&
278
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
279
- .componentType === 'slider'
280
- "
281
- :model-value="
282
- getFormItemValue(
283
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
284
- )
285
- "
286
- :style="
287
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
288
- .searchControlWidth
289
- "
290
- @input="
291
- setValueToModelProp(
292
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
293
- $event
294
- )
295
- "
296
- />
297
-
298
- <el-rate
299
- v-else-if="
300
- searchableColumns[fieldNum * (r - 1) + (n - 1)].componentType &&
301
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
302
- .componentType === 'rate'
303
- "
304
- :model-value="
305
- getFormItemValue(
306
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
307
- )
308
- "
309
- :style="
310
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
311
- .searchControlWidth
312
- "
313
- @input="
314
- setValueToModelProp(
315
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
316
- $event
317
- )
318
- "
319
- />
320
- <span
321
- v-else-if="
322
- customComponent(
323
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
324
- ) === true
325
- "
326
- >
327
- <component
328
- :is="
329
- searchableColumns[fieldNum * (r - 1) + (n - 1)].componentName
330
- "
331
- :ref="
332
- searchableColumns[fieldNum * (r - 1) + (n - 1)].componentName
333
- "
334
- class="customComponent"
335
- :prop="searchableColumns[fieldNum * (r - 1) + (n - 1)].prop"
336
- :value="
337
- getFormItemValue(
338
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
339
- )
340
- "
341
- @input="
342
- setValueToModelProp(
343
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
344
- $event
345
- )
346
- "
347
- />
348
- </span>
349
- <el-input
350
- v-else
351
- :model-value="
352
- getFormItemValue(
353
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
354
- )
355
- "
356
- :style="
357
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
358
- .searchControlWidth
359
- "
360
- @keyup.enter="submitForm('searchForm')"
361
- @input="
362
- setValueToModelProp(
363
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
364
- $event
365
- )
366
- "
367
- />
368
- </el-form-item>
369
- </td>
370
- </tr>
371
- </table>
372
-
373
- <el-form-item class="search-btn">
374
- <el-button
375
- :loading="loading"
376
- type="primary"
377
- size="mini"
378
- @click="submitForm('searchForm')"
379
- >
380
- {{ $t('imatrixUIPublicModel.sure') }}
381
- </el-button>
382
- <el-button
383
- :loading="loading"
384
- size="mini"
385
- @click="resetForm('searchForm')"
386
- >
387
- {{ $t('imatrixUIPublicModel.reset') }}
388
- </el-button>
389
- </el-form-item>
390
- </el-form>
391
- </template>
392
-
393
- <script>
394
- import { $on, $off, $once, $emit } from '../../utils/gogocodeTransfer'
395
- import searchMethods from './search-methods'
396
- import searchFormNumber from './search-form-number.vue'
397
- import store from './store'
398
- // import { isOptionFunction, getSearchObject } from './utils'
399
- import { addDynamicProp } from './utils'
400
- import * as Vue from 'vue'
401
- export default {
402
- name: 'SearchForm',
403
- components: {
404
- searchFormNumber,
405
- },
406
- props: {
407
- columns: {
408
- type: Array,
409
- default: null,
410
- },
411
- code: {
412
- type: String,
413
- default: null,
414
- },
415
- url: {
416
- type: String,
417
- default: null,
418
- },
419
- pagination: {
420
- type: Object,
421
- default: null,
422
- },
423
- query: {
424
- type: Object,
425
- default: null,
426
- },
427
- searchParam: {
428
- type: Object,
429
- default: null,
430
- },
431
- initSearchProps: {
432
- type: Array,
433
- default: null,
434
- },
435
- // 九宫格组件的id
436
- gridId: {
437
- type: String,
438
- default: '_nineGrid',
439
- },
440
- },
441
- data() {
442
- const storeId = this.code + '~' + this.gridId
443
- const customComponentNames = new Set()
444
- const gridParams = store.get(storeId)
445
- let searchForm = {}
446
- if (this.searchParam !== null) {
447
- searchForm = JSON.parse(JSON.stringify(this.searchParam))
448
- // searchForm = this.searchParam
449
- }
450
- console.log('searchForm=', searchForm)
451
- const searchColumns = this.getSearchableColumns()
452
- if (this.initSearchProps === undefined || this.initSearchProps === null) {
453
- this.initSearchProps = []
454
- }
455
- searchColumns.forEach((column) => {
456
- if (this.initSearchProps.indexOf(column.prop) < 0) {
457
- // 表示没有默认初始查询字段
458
- if (column.prop.indexOf('.') > 0) {
459
- // 动态给searchForm添加属性,包括多级嵌套属性,属性的初始值都为 null
460
- addDynamicProp(searchForm, column.prop)
461
- } else {
462
- searchForm[column.prop] = null
463
- }
464
- }
465
- })
466
-
467
- const spanNum = this.getSpanNum(storeId)
468
- const fieldNum = this.getFieldNumPerRow(storeId)
469
- const rowNum = Math.ceil(searchColumns.length / fieldNum)
470
- // console.log('searchColumns.length=' + searchColumns.length + ',fieldNum=' + fieldNum + ',rowNum=' + rowNum)
471
- // // -2是把
472
- // const dateSpanNum = (spanNum - 2) / 2
473
-
474
- return {
475
- searchForm,
476
- rules: {},
477
- searchParams: [],
478
- labelWidth:
479
- gridParams.options.search && gridParams.options.search.labelWidth
480
- ? gridParams.options.search.labelWidth
481
- : '80px',
482
- customComponentNames: customComponentNames,
483
- componentName: '',
484
- spanNum: spanNum,
485
- fieldNum: fieldNum, // 每行放的字段个数
486
- rowNum: rowNum, // 一共有几行
487
- loading: false, // 是否正在查询,默认时否
488
- storeId, // 缓存的列表id
489
- }
490
- },
491
- computed: {
492
- searchableColumns() {
493
- return this.getSearchableColumns()
494
- },
495
- },
496
- methods: {
497
- ...searchMethods,
498
- // 获得每行排放的字段个数
499
- getColumnNumPerRow(rowIndex, searchColumnsLength) {
500
- let columnNumPerRow = this.fieldNum
501
- if (this.fieldNum * rowIndex > searchColumnsLength) {
502
- // 表示字段无法填满最后一行
503
- columnNumPerRow = searchColumnsLength - this.fieldNum * (rowIndex - 1)
504
- }
505
- return columnNumPerRow
506
- },
507
- // 每行放的字段个数
508
- getFieldNumPerRow(storeId) {
509
- const gridParams = store.get(storeId)
510
- // console.log('gridParamsgridParamsgridParamsgridParams', gridParams)
511
- return gridParams.options.search && gridParams.options.search.fieldNum
512
- ? gridParams.options.search.fieldNum
513
- : 4
514
- },
515
- // 根据每行显示的字段个数,确定栅栏个数,默认是4个字段。最多就只能放6个字段
516
- getSpanNum(storeId) {
517
- const fieldNum = this.getFieldNumPerRow(storeId)
518
- if (fieldNum === 1) {
519
- return 14
520
- } else if (fieldNum === 2) {
521
- return 10
522
- } else if (fieldNum === 3) {
523
- return 8
524
- } else if (fieldNum === 4) {
525
- return 6
526
- } else {
527
- // 6个字段
528
- return 4
529
- }
530
- },
531
- setValueToModelProp(prop, value) {
532
- if (prop.indexOf('.') > 0) {
533
- const parentOjbect = this.getParentObject(prop)
534
- // 嵌套属性中的最后一个属性是属于这个中间父对象的,所有要通过中间父对象来赋值
535
- parentOjbect[prop.substring(prop.lastIndexOf('.') + 1)] = value
536
- } else {
537
- this.searchForm[prop] = value
538
- }
539
- },
540
- getSearchableColumns(columns, searchColumns) {
541
- // console.log('columnscolumnscolumns', columns)
542
- if (!this.customComponentNames) {
543
- this.customComponentNames = new Set()
544
- }
545
- if (!searchColumns) {
546
- searchColumns = []
547
- }
548
- if (!columns) {
549
- columns = this.columns
550
- }
551
- for (let i = 0; i < columns.length; i++) {
552
- const column = columns[i]
553
- if (
554
- column.prop === '$index' ||
555
- column.prop === '$selection' ||
556
- column.dynamic
557
- ) {
558
- // 序号和复选框列、动态列 不属于该组件的查询字段
559
- continue
560
- }
561
- if (column.groupHeader) {
562
- // 组合表头中子表头的字段查询
563
- this.getSearchableColumns(column.children, searchColumns)
564
- } else {
565
- if (
566
- column.queryType === 'normal' &&
567
- !column.custom &&
568
- column.prop !== ''
569
- ) {
570
- // 表示是普通查询,且不是占位符列,是查询字段
571
- if (
572
- typeof column.componentType === 'undefined' ||
573
- column.componentType === ''
574
- ) {
575
- column.componentType = 'input'
576
- }
577
- if (column.querySetting && column.querySetting !== '') {
578
- const querySetting = JSON.parse(column.querySetting)
579
- if (querySetting.width) {
580
- column.searchControlWidth = 'width:' + querySetting.width + 'px'
581
- }
582
- if (querySetting.labelWidth) {
583
- column.searchLabelWidth = querySetting.labelWidth + 'px'
584
- }
585
- if (querySetting.label) {
586
- column.searchLabel = querySetting.label
587
- }
588
- }
589
- // 行编辑时自定义编辑组件
590
- if (column.componentType.indexOf('custom:') >= 0) {
591
- column.componentName = column.componentType.substring(
592
- column.componentType.indexOf(':') + 1
593
- )
594
- this.customComponentNames.add(column.componentName)
595
- } else {
596
- column.componentName = ''
597
- }
598
- searchColumns.push(column)
599
- }
600
- }
601
- }
602
- return searchColumns
603
- },
604
- customComponent(column) {
605
- const gridParams = store.get(this.storeId)
606
- if (column.componentName && column.componentName !== '') {
607
- this.customComponentNames.add(column.componentName)
608
- return true
609
- }
610
- if (
611
- (!column.componentName || column.componentName === '') &&
612
- gridParams.options &&
613
- gridParams.options.search &&
614
- gridParams.options.search.customSearchElements
615
- ) {
616
- // 定义了自定义查询组件
617
- const propSearchEle =
618
- gridParams.options.search.customSearchElements[column.prop]
619
- // console.log('customComponent-customSearchElements-propSearchEle-', column.prop)
620
- if (propSearchEle) {
621
- column.componentName = 'custom-' + column.prop
622
- const component = propSearchEle.call(this, column)
623
- // console.log('customComponent-customSearchElements-')
624
- if (component) {
625
- this.customComponentNames.add(column.componentName)
626
- window.$vueApp.component(column.componentName, component)
627
- return true
628
- }
629
- }
630
- }
631
- return false
632
- },
633
- submitForm(formName) {
634
- this.$refs[formName].validate((valid) => {
635
- if (valid) {
636
- // const searchDemo = [
637
- // { leftBracket: '', propName: 'name', enumName: '', operator: 'contain', propValue: '系统', rightBracket: '', joinSign: 'and', dataType: 'TEXT' },
638
- // { leftBracket: '', propName: 'createdTime', enumName: '', operator: 'eq', startValue: '2019-01-29', endValue: '2019-01-30', propValue: '2019-01-30', rightBracket: '', joinSign: 'and', dataType: 'DATE' },
639
- // { leftBracket: '', propName: 'enabledState', enumName: 'tech.imatrix.enumeration.MenuState', operator: 'eq', propValue: 'ENABLE', rightBracket: '', joinSign: 'and', dataType: 'ENUM' }
640
- // ]
641
- this.loading = true
642
- this.searchParams = this.packageSearchParam()
643
- $emit(this, 'search', this.searchParams, true)
644
- } else {
645
- // console.log('error submit!!')
646
- return false
647
- }
648
- })
649
- },
650
-
651
- resetForm(formName) {
652
- // console.log('customComponentNames=', this.customComponentNames)
653
- for (const componentName of this.customComponentNames) {
654
- // 遍历
655
- this.$refs[componentName][0].resetField()
656
- }
657
- // this.$refs[formName].resetFields()
658
-
659
- this.searchableColumns.forEach((column) => {
660
- // 表示没有默认初始查询字段
661
- if (column.prop.indexOf('.') > 0) {
662
- // 动态给searchForm添加属性,包括多级嵌套属性,属性的初始值都为 null
663
- addDynamicProp(this.searchForm, column.prop)
664
- } else {
665
- this.searchForm[column.prop] = null
666
- }
667
- })
668
- $emit(this, 'reset')
669
- },
670
- setNumberValue(value, r, n) {
671
- let itemValue = this.getFormItemValue(
672
- this.searchableColumns[this.fieldNum * (r - 1) + (n - 1)].prop
673
- )
674
- itemValue = value
675
- this.setValueToModelProp(
676
- this.searchableColumns[this.fieldNum * (r - 1) + (n - 1)].prop,
677
- itemValue
678
- )
679
- },
680
- },
681
- emits: ['search', 'reset'],
682
- }
683
- </script>
684
-
685
- <style scoped>
686
- .grid-search-form {
687
- overflow: auto;
688
- }
689
- .grid-search-form :deep(.el-form-item) {
690
- margin-bottom: 0px;
691
- }
692
- .grid-search-form :deep(.search-btn) {
693
- margin-bottom: 5px;
694
- text-align: center;
695
- }
696
- .grid-search-form :deep(.el-select),
697
- .grid-search-form :deep(.customComponent) {
698
- width: 100%;
699
- }
700
- </style>
1
+ <template>
2
+ <el-form
3
+ v-if="searchableColumns.length > 0"
4
+ ref="searchForm"
5
+ :model="searchForm"
6
+ :rules="rules"
7
+ :label-width="labelWidth"
8
+ :label-position="query.queryLabelPosition"
9
+ class="grid-search-form"
10
+ size="mini"
11
+ >
12
+ <table>
13
+ <tr v-for="r of rowNum" :key="r">
14
+ <td
15
+ v-for="n of getColumnNumPerRow(r, searchableColumns.length)"
16
+ :key="n"
17
+ >
18
+ <el-form-item
19
+ :prop="searchableColumns[fieldNum * (r - 1) + (n - 1)].prop"
20
+ :label-width="
21
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].searchLabelWidth
22
+ ? searchableColumns[fieldNum * (r - 1) + (n - 1)]
23
+ .searchLabelWidth
24
+ : '160px'
25
+ "
26
+ :style="{ paddingLeft: '10px', minWidth: '200px' }"
27
+ >
28
+ <template v-slot:label>
29
+ <span
30
+ v-if="
31
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].searchLabel &&
32
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
33
+ .searchLabel !== ''
34
+ "
35
+ v-html="
36
+ searchableColumns[
37
+ fieldNum * (r - 1) + (n - 1)
38
+ ].searchLabel.replace(/\\n/g, '</br>')
39
+ "
40
+ />
41
+ <span
42
+ v-else
43
+ v-html="
44
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].label.replace(
45
+ /\\n/g,
46
+ '</br>'
47
+ )
48
+ "
49
+ />
50
+ </template>
51
+ <el-date-picker
52
+ v-if="
53
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].dataType ===
54
+ 'DATE' ||
55
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
56
+ .componentType === 'date'
57
+ "
58
+ :model-value="
59
+ getFormItemValue(
60
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
61
+ )
62
+ "
63
+ type="daterange"
64
+ :style="
65
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
66
+ .searchControlWidth
67
+ "
68
+ :range-separator="$t('imatrixUIPublicModel.to')"
69
+ unlink-panels
70
+ :start-placeholder="$t('imatrixUIMessage.startDate')"
71
+ :end-placeholder="$t('imatrixUIMessage.endDate')"
72
+ value-format="yyyy-MM-dd"
73
+ @input="
74
+ setValueToModelProp(
75
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
76
+ $event
77
+ )
78
+ "
79
+ />
80
+
81
+ <el-date-picker
82
+ v-else-if="
83
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
84
+ .componentType === 'dateTimePicker'
85
+ "
86
+ :model-value="
87
+ getFormItemValue(
88
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
89
+ )
90
+ "
91
+ type="datetimerange"
92
+ :range-separator="$t('imatrixUIPublicModel.to')"
93
+ unlink-panels
94
+ :style="
95
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
96
+ .searchControlWidth
97
+ "
98
+ :start-placeholder="$t('imatrixUIMessage.startDate')"
99
+ :end-placeholder="$t('imatrixUIMessage.endDate')"
100
+ value-format="yyyy-MM-dd HH:mm:ss"
101
+ @input="
102
+ setValueToModelProp(
103
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
104
+ $event
105
+ )
106
+ "
107
+ />
108
+
109
+ <el-date-picker
110
+ v-else-if="
111
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].dataType ===
112
+ 'TIME' &&
113
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
114
+ .componentType === 'timepicker'
115
+ "
116
+ :model-value="
117
+ getFormItemValue(
118
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
119
+ )
120
+ "
121
+ type="datetimerange"
122
+ :range-separator="$t('imatrixUIPublicModel.to')"
123
+ unlink-panels
124
+ :style="
125
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
126
+ .searchControlWidth
127
+ "
128
+ :start-placeholder="$t('imatrixUIMessage.startDate')"
129
+ :end-placeholder="$t('imatrixUIMessage.endDate')"
130
+ value-format="HH:mm:ss"
131
+ @input="
132
+ setValueToModelProp(
133
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
134
+ $event
135
+ )
136
+ "
137
+ />
138
+
139
+ <el-time-picker
140
+ v-else-if="
141
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
142
+ .componentType === 'timepicker' &&
143
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].dataType !==
144
+ 'TIME' &&
145
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].dataType !==
146
+ 'DATE'
147
+ "
148
+ type="fixed-time"
149
+ :placeholder="$t('imatrixUIMessage.selectTime')"
150
+ style="width: 100%"
151
+ value-format="HH:mm:ss"
152
+ :model-value="
153
+ getFormItemValue(
154
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
155
+ )
156
+ "
157
+ @input="
158
+ setValueToModelProp(
159
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
160
+ $event
161
+ )
162
+ "
163
+ />
164
+ <el-select
165
+ v-else-if="
166
+ (searchableColumns[fieldNum * (r - 1) + (n - 1)]
167
+ .componentType &&
168
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
169
+ .componentType === 'select') ||
170
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].dataType ===
171
+ 'BOOLEAN'
172
+ "
173
+ clearable
174
+ :style="
175
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
176
+ .searchControlWidth
177
+ "
178
+ :placeholder="$t('imatrixUIMessage.pleaseSelect')"
179
+ :model-value="
180
+ getFormItemValue(
181
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
182
+ )
183
+ "
184
+ @input="
185
+ setValueToModelProp(
186
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
187
+ $event
188
+ )
189
+ "
190
+ >
191
+ <el-option
192
+ v-for="item in searchableColumns[fieldNum * (r - 1) + (n - 1)]
193
+ .valueSet"
194
+ :key="item.value"
195
+ :label="item.label"
196
+ :value="item.value"
197
+ />
198
+ </el-select>
199
+ <el-select
200
+ v-else-if="
201
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].componentType &&
202
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
203
+ .componentType === 'multiselect'
204
+ "
205
+ clearable
206
+ multiple
207
+ :style="
208
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
209
+ .searchControlWidth
210
+ "
211
+ collapse-tags
212
+ :placeholder="$t('imatrixUIMessage.pleaseSelect')"
213
+ :model-value="
214
+ getFormItemValue(
215
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
216
+ )
217
+ "
218
+ @input="
219
+ setValueToModelProp(
220
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
221
+ $event
222
+ )
223
+ "
224
+ >
225
+ <el-option
226
+ v-for="item in searchableColumns[fieldNum * (r - 1) + (n - 1)]
227
+ .valueSet"
228
+ :key="item.value"
229
+ :label="item.label"
230
+ :value="item.value"
231
+ />
232
+ </el-select>
233
+ <!--
234
+ <el-input-number
235
+ v-else-if="searchableColumns[fieldNum*(r-1)+(n-1)].componentType && searchableColumns[fieldNum*(r-1)+(n-1)].componentType==='inputNumber'"
236
+ :value="getFormItemValue(searchableColumns[fieldNum*(r-1)+(n-1)].prop)"
237
+ @input="setValueToModelProp(searchableColumns[fieldNum*(r-1)+(n-1)].prop,$event)"
238
+ /> -->
239
+
240
+ <search-form-number
241
+ v-else-if="
242
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].componentType &&
243
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
244
+ .componentType === 'inputNumber'
245
+ "
246
+ :r="r"
247
+ :n="n"
248
+ @setValue="setNumberValue"
249
+ />
250
+
251
+ <el-switch
252
+ v-else-if="
253
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].componentType &&
254
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
255
+ .componentType === 'switch'
256
+ "
257
+ active-color="#13ce66"
258
+ inactive-color="#ff4949"
259
+ :style="
260
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
261
+ .searchControlWidth
262
+ "
263
+ :model-value="
264
+ getFormItemValue(
265
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
266
+ )
267
+ "
268
+ @input="
269
+ setValueToModelProp(
270
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
271
+ $event
272
+ )
273
+ "
274
+ />
275
+ <el-slider
276
+ v-else-if="
277
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].componentType &&
278
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
279
+ .componentType === 'slider'
280
+ "
281
+ :model-value="
282
+ getFormItemValue(
283
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
284
+ )
285
+ "
286
+ :style="
287
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
288
+ .searchControlWidth
289
+ "
290
+ @input="
291
+ setValueToModelProp(
292
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
293
+ $event
294
+ )
295
+ "
296
+ />
297
+
298
+ <el-rate
299
+ v-else-if="
300
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].componentType &&
301
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
302
+ .componentType === 'rate'
303
+ "
304
+ :model-value="
305
+ getFormItemValue(
306
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
307
+ )
308
+ "
309
+ :style="
310
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
311
+ .searchControlWidth
312
+ "
313
+ @input="
314
+ setValueToModelProp(
315
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
316
+ $event
317
+ )
318
+ "
319
+ />
320
+ <span
321
+ v-else-if="
322
+ customComponent(
323
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
324
+ ) === true
325
+ "
326
+ >
327
+ <component
328
+ :is="
329
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].componentName
330
+ "
331
+ :ref="
332
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].componentName
333
+ "
334
+ class="customComponent"
335
+ :prop="searchableColumns[fieldNum * (r - 1) + (n - 1)].prop"
336
+ :value="
337
+ getFormItemValue(
338
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
339
+ )
340
+ "
341
+ @input="
342
+ setValueToModelProp(
343
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
344
+ $event
345
+ )
346
+ "
347
+ />
348
+ </span>
349
+ <el-input
350
+ v-else
351
+ :model-value="
352
+ getFormItemValue(
353
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
354
+ )
355
+ "
356
+ :style="
357
+ searchableColumns[fieldNum * (r - 1) + (n - 1)]
358
+ .searchControlWidth
359
+ "
360
+ @keyup.enter="submitForm('searchForm')"
361
+ @input="
362
+ setValueToModelProp(
363
+ searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
364
+ $event
365
+ )
366
+ "
367
+ />
368
+ </el-form-item>
369
+ </td>
370
+ </tr>
371
+ </table>
372
+
373
+ <el-form-item class="search-btn">
374
+ <el-button
375
+ :loading="loading"
376
+ type="primary"
377
+ size="mini"
378
+ @click="submitForm('searchForm')"
379
+ >
380
+ {{ $t('imatrixUIPublicModel.sure') }}
381
+ </el-button>
382
+ <el-button
383
+ :loading="loading"
384
+ size="mini"
385
+ @click="resetForm('searchForm')"
386
+ >
387
+ {{ $t('imatrixUIPublicModel.reset') }}
388
+ </el-button>
389
+ </el-form-item>
390
+ </el-form>
391
+ </template>
392
+
393
+ <script>
394
+ import { $on, $off, $once, $emit } from '../../utils/gogocodeTransfer'
395
+ import searchMethods from './search-methods'
396
+ import searchFormNumber from './search-form-number.vue'
397
+ import store from './store'
398
+ // import { isOptionFunction, getSearchObject } from './utils'
399
+ import { addDynamicProp } from './utils'
400
+ import * as Vue from 'vue'
401
+ export default {
402
+ name: 'SearchForm',
403
+ components: {
404
+ searchFormNumber,
405
+ },
406
+ props: {
407
+ columns: {
408
+ type: Array,
409
+ default: null,
410
+ },
411
+ code: {
412
+ type: String,
413
+ default: null,
414
+ },
415
+ url: {
416
+ type: String,
417
+ default: null,
418
+ },
419
+ pagination: {
420
+ type: Object,
421
+ default: null,
422
+ },
423
+ query: {
424
+ type: Object,
425
+ default: null,
426
+ },
427
+ searchParam: {
428
+ type: Object,
429
+ default: null,
430
+ },
431
+ initSearchProps: {
432
+ type: Array,
433
+ default: null,
434
+ },
435
+ // 九宫格组件的id
436
+ gridId: {
437
+ type: String,
438
+ default: '_nineGrid',
439
+ },
440
+ },
441
+ data() {
442
+ const storeId = this.code + '~' + this.gridId
443
+ const customComponentNames = new Set()
444
+ const gridParams = store.get(storeId)
445
+ let searchForm = {}
446
+ if (this.searchParam !== null) {
447
+ searchForm = JSON.parse(JSON.stringify(this.searchParam))
448
+ // searchForm = this.searchParam
449
+ }
450
+ console.log('searchForm=', searchForm)
451
+ const searchColumns = this.getSearchableColumns()
452
+ if (this.initSearchProps === undefined || this.initSearchProps === null) {
453
+ this.initSearchProps = []
454
+ }
455
+ searchColumns.forEach((column) => {
456
+ if (this.initSearchProps.indexOf(column.prop) < 0) {
457
+ // 表示没有默认初始查询字段
458
+ if (column.prop.indexOf('.') > 0) {
459
+ // 动态给searchForm添加属性,包括多级嵌套属性,属性的初始值都为 null
460
+ addDynamicProp(searchForm, column.prop)
461
+ } else {
462
+ searchForm[column.prop] = null
463
+ }
464
+ }
465
+ })
466
+
467
+ const spanNum = this.getSpanNum(storeId)
468
+ const fieldNum = this.getFieldNumPerRow(storeId)
469
+ const rowNum = Math.ceil(searchColumns.length / fieldNum)
470
+ // console.log('searchColumns.length=' + searchColumns.length + ',fieldNum=' + fieldNum + ',rowNum=' + rowNum)
471
+ // // -2是把
472
+ // const dateSpanNum = (spanNum - 2) / 2
473
+
474
+ return {
475
+ searchForm,
476
+ rules: {},
477
+ searchParams: [],
478
+ labelWidth:
479
+ gridParams.options.search && gridParams.options.search.labelWidth
480
+ ? gridParams.options.search.labelWidth
481
+ : '80px',
482
+ customComponentNames: customComponentNames,
483
+ componentName: '',
484
+ spanNum: spanNum,
485
+ fieldNum: fieldNum, // 每行放的字段个数
486
+ rowNum: rowNum, // 一共有几行
487
+ loading: false, // 是否正在查询,默认时否
488
+ storeId, // 缓存的列表id
489
+ }
490
+ },
491
+ computed: {
492
+ searchableColumns() {
493
+ return this.getSearchableColumns()
494
+ },
495
+ },
496
+ methods: {
497
+ ...searchMethods,
498
+ // 获得每行排放的字段个数
499
+ getColumnNumPerRow(rowIndex, searchColumnsLength) {
500
+ let columnNumPerRow = this.fieldNum
501
+ if (this.fieldNum * rowIndex > searchColumnsLength) {
502
+ // 表示字段无法填满最后一行
503
+ columnNumPerRow = searchColumnsLength - this.fieldNum * (rowIndex - 1)
504
+ }
505
+ return columnNumPerRow
506
+ },
507
+ // 每行放的字段个数
508
+ getFieldNumPerRow(storeId) {
509
+ const gridParams = store.get(storeId)
510
+ // console.log('gridParamsgridParamsgridParamsgridParams', gridParams)
511
+ return gridParams.options.search && gridParams.options.search.fieldNum
512
+ ? gridParams.options.search.fieldNum
513
+ : 4
514
+ },
515
+ // 根据每行显示的字段个数,确定栅栏个数,默认是4个字段。最多就只能放6个字段
516
+ getSpanNum(storeId) {
517
+ const fieldNum = this.getFieldNumPerRow(storeId)
518
+ if (fieldNum === 1) {
519
+ return 14
520
+ } else if (fieldNum === 2) {
521
+ return 10
522
+ } else if (fieldNum === 3) {
523
+ return 8
524
+ } else if (fieldNum === 4) {
525
+ return 6
526
+ } else {
527
+ // 6个字段
528
+ return 4
529
+ }
530
+ },
531
+ setValueToModelProp(prop, value) {
532
+ if (prop.indexOf('.') > 0) {
533
+ const parentOjbect = this.getParentObject(prop)
534
+ // 嵌套属性中的最后一个属性是属于这个中间父对象的,所有要通过中间父对象来赋值
535
+ parentOjbect[prop.substring(prop.lastIndexOf('.') + 1)] = value
536
+ } else {
537
+ this.searchForm[prop] = value
538
+ }
539
+ },
540
+ getSearchableColumns(columns, searchColumns) {
541
+ // console.log('columnscolumnscolumns', columns)
542
+ if (!this.customComponentNames) {
543
+ this.customComponentNames = new Set()
544
+ }
545
+ if (!searchColumns) {
546
+ searchColumns = []
547
+ }
548
+ if (!columns) {
549
+ columns = this.columns
550
+ }
551
+ for (let i = 0; i < columns.length; i++) {
552
+ const column = columns[i]
553
+ if (
554
+ column.prop === '$index' ||
555
+ column.prop === '$selection' ||
556
+ column.dynamic
557
+ ) {
558
+ // 序号和复选框列、动态列 不属于该组件的查询字段
559
+ continue
560
+ }
561
+ if (column.groupHeader) {
562
+ // 组合表头中子表头的字段查询
563
+ this.getSearchableColumns(column.children, searchColumns)
564
+ } else {
565
+ if (
566
+ column.queryType === 'normal' &&
567
+ !column.custom &&
568
+ column.prop !== ''
569
+ ) {
570
+ // 表示是普通查询,且不是占位符列,是查询字段
571
+ if (
572
+ typeof column.componentType === 'undefined' ||
573
+ column.componentType === ''
574
+ ) {
575
+ column.componentType = 'input'
576
+ }
577
+ if (column.querySetting && column.querySetting !== '') {
578
+ const querySetting = JSON.parse(column.querySetting)
579
+ if (querySetting.width) {
580
+ column.searchControlWidth = 'width:' + querySetting.width + 'px'
581
+ }
582
+ if (querySetting.labelWidth) {
583
+ column.searchLabelWidth = querySetting.labelWidth + 'px'
584
+ }
585
+ if (querySetting.label) {
586
+ column.searchLabel = querySetting.label
587
+ }
588
+ }
589
+ // 行编辑时自定义编辑组件
590
+ if (column.componentType.indexOf('custom:') >= 0) {
591
+ column.componentName = column.componentType.substring(
592
+ column.componentType.indexOf(':') + 1
593
+ )
594
+ this.customComponentNames.add(column.componentName)
595
+ } else {
596
+ column.componentName = ''
597
+ }
598
+ searchColumns.push(column)
599
+ }
600
+ }
601
+ }
602
+ return searchColumns
603
+ },
604
+ customComponent(column) {
605
+ const gridParams = store.get(this.storeId)
606
+ if (column.componentName && column.componentName !== '') {
607
+ this.customComponentNames.add(column.componentName)
608
+ return true
609
+ }
610
+ if (
611
+ (!column.componentName || column.componentName === '') &&
612
+ gridParams.options &&
613
+ gridParams.options.search &&
614
+ gridParams.options.search.customSearchElements
615
+ ) {
616
+ // 定义了自定义查询组件
617
+ const propSearchEle =
618
+ gridParams.options.search.customSearchElements[column.prop]
619
+ // console.log('customComponent-customSearchElements-propSearchEle-', column.prop)
620
+ if (propSearchEle) {
621
+ column.componentName = 'custom-' + column.prop
622
+ const component = propSearchEle.call(this, column)
623
+ // console.log('customComponent-customSearchElements-')
624
+ if (component) {
625
+ this.customComponentNames.add(column.componentName)
626
+ window.$vueApp.component(column.componentName, component)
627
+ return true
628
+ }
629
+ }
630
+ }
631
+ return false
632
+ },
633
+ submitForm(formName) {
634
+ this.$refs[formName].validate((valid) => {
635
+ if (valid) {
636
+ // const searchDemo = [
637
+ // { leftBracket: '', propName: 'name', enumName: '', operator: 'contain', propValue: '系统', rightBracket: '', joinSign: 'and', dataType: 'TEXT' },
638
+ // { leftBracket: '', propName: 'createdTime', enumName: '', operator: 'eq', startValue: '2019-01-29', endValue: '2019-01-30', propValue: '2019-01-30', rightBracket: '', joinSign: 'and', dataType: 'DATE' },
639
+ // { leftBracket: '', propName: 'enabledState', enumName: 'tech.imatrix.enumeration.MenuState', operator: 'eq', propValue: 'ENABLE', rightBracket: '', joinSign: 'and', dataType: 'ENUM' }
640
+ // ]
641
+ this.loading = true
642
+ this.searchParams = this.packageSearchParam()
643
+ $emit(this, 'search', this.searchParams, true)
644
+ } else {
645
+ // console.log('error submit!!')
646
+ return false
647
+ }
648
+ })
649
+ },
650
+
651
+ resetForm(formName) {
652
+ // console.log('customComponentNames=', this.customComponentNames)
653
+ for (const componentName of this.customComponentNames) {
654
+ // 遍历
655
+ this.$refs[componentName][0].resetField()
656
+ }
657
+ // this.$refs[formName].resetFields()
658
+
659
+ this.searchableColumns.forEach((column) => {
660
+ // 表示没有默认初始查询字段
661
+ if (column.prop.indexOf('.') > 0) {
662
+ // 动态给searchForm添加属性,包括多级嵌套属性,属性的初始值都为 null
663
+ addDynamicProp(this.searchForm, column.prop)
664
+ } else {
665
+ this.searchForm[column.prop] = null
666
+ }
667
+ })
668
+ $emit(this, 'reset')
669
+ },
670
+ setNumberValue(value, r, n) {
671
+ let itemValue = this.getFormItemValue(
672
+ this.searchableColumns[this.fieldNum * (r - 1) + (n - 1)].prop
673
+ )
674
+ itemValue = value
675
+ this.setValueToModelProp(
676
+ this.searchableColumns[this.fieldNum * (r - 1) + (n - 1)].prop,
677
+ itemValue
678
+ )
679
+ },
680
+ },
681
+ emits: ['search', 'reset'],
682
+ }
683
+ </script>
684
+
685
+ <style scoped>
686
+ .grid-search-form {
687
+ overflow: auto;
688
+ }
689
+ .grid-search-form :deep(.el-form-item) {
690
+ margin-bottom: 0px;
691
+ }
692
+ .grid-search-form :deep(.search-btn) {
693
+ margin-bottom: 5px;
694
+ text-align: center;
695
+ }
696
+ .grid-search-form :deep(.el-select),
697
+ .grid-search-form :deep(.customComponent) {
698
+ width: 100%;
699
+ }
700
+ </style>