imatrix-ui 0.2.0-up → 0.2.2-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 (213) 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 +787 -366
  5. package/lib/super-ui.umd.cjs +18 -18
  6. package/package.json +34 -34
  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 +350 -350
  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 +125 -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 -587
  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 +388 -388
  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/normal-column.vue +1221 -1221
  89. package/packages/super-grid/src/public-methods.js +30 -30
  90. package/packages/super-grid/src/row-operation.vue +193 -193
  91. package/packages/super-grid/src/search-button.vue +74 -74
  92. package/packages/super-grid/src/search-condition-input.vue +73 -73
  93. package/packages/super-grid/src/search-condition-list.vue +68 -68
  94. package/packages/super-grid/src/search-form-advancedQuery.vue +819 -826
  95. package/packages/super-grid/src/search-form-dialog.vue +77 -77
  96. package/packages/super-grid/src/search-form-item.vue +495 -495
  97. package/packages/super-grid/src/search-form-number.vue +111 -111
  98. package/packages/super-grid/src/search-form-open.vue +167 -159
  99. package/packages/super-grid/src/search-form-ordinarySearch.vue +239 -233
  100. package/packages/super-grid/src/search-form.vue +762 -765
  101. package/packages/super-grid/src/search-methods.js +592 -592
  102. package/packages/super-grid/src/selection-column.vue +46 -46
  103. package/packages/super-grid/src/super-grid-service.js +728 -728
  104. package/packages/super-grid/src/super-grid.vue +3009 -3009
  105. package/packages/super-grid/src/utils.js +880 -880
  106. package/packages/super-grid/src/view-image-dialog.vue +176 -176
  107. package/packages/super-nine-grid/index.js +7 -7
  108. package/packages/super-nine-grid/src/apis.js +108 -108
  109. package/packages/super-nine-grid/src/custom-formatter.js +73 -73
  110. package/packages/super-nine-grid/src/formatter.js +134 -134
  111. package/packages/super-nine-grid/src/search-form-number.vue +35 -35
  112. package/packages/super-nine-grid/src/search-form.vue +700 -703
  113. package/packages/super-nine-grid/src/search-methods.js +151 -151
  114. package/packages/super-nine-grid/src/super-grid-service.js +107 -107
  115. package/packages/super-nine-grid/src/super-nine-grid.vue +1164 -1164
  116. package/packages/super-nine-grid/src/utils.js +264 -264
  117. package/packages/svg-icon/index.js +6 -6
  118. package/packages/svg-icon/src/svg-icon.vue +43 -43
  119. package/packages/utils/date-util.js +292 -292
  120. package/packages/utils/dom.js +227 -227
  121. package/packages/utils/gogocodeTransfer.js +59 -59
  122. package/packages/utils/memory-cache-utils.js +117 -117
  123. package/packages/utils/utils.js +180 -180
  124. package/packages/utils/value-set.js +97 -97
  125. package/packages/valid-code/index.js +7 -7
  126. package/packages/valid-code/src/valid-code.vue +104 -104
  127. package/packages/workflow-button/index.js +6 -6
  128. package/packages/workflow-button/src/workflow-button.vue +550 -550
  129. package/packages/workflow-history-list/index.js +6 -6
  130. package/packages/workflow-history-list/src/api.js +7 -7
  131. package/packages/workflow-history-list/src/workflow-history-list.vue +291 -291
  132. package/packages/workgroup-tree/index.js +6 -6
  133. package/packages/workgroup-tree/src/workgroup-tree.vue +86 -86
  134. package/packages/workgroup-tree-inline/index.js +6 -6
  135. package/packages/workgroup-tree-inline/src/search-result.vue +222 -222
  136. package/packages/workgroup-tree-inline/src/workgroup-tree-inline.vue +516 -516
  137. package/packages/workgroup-tree-inline/src/workgroup-tree-service.js +93 -93
  138. package/packages/workgroup-user-tree/index.js +6 -6
  139. package/packages/workgroup-user-tree/src/workgroup-user-tree.vue +103 -103
  140. package/packages/workgroup-user-tree-inline/index.js +9 -9
  141. package/packages/workgroup-user-tree-inline/src/search-result.vue +266 -266
  142. package/packages/workgroup-user-tree-inline/src/workgroup-tree-inline-service.js +239 -239
  143. package/packages/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue +657 -657
  144. package/packages/year-range-picker/index.js +6 -6
  145. package/packages/year-range-picker/src/year-range-picker.vue +53 -53
  146. package/src/api/sso-service.js +172 -172
  147. package/src/api/tab.js +36 -36
  148. package/src/api/user-service.js +11 -11
  149. package/src/directives/permission/index.js +13 -13
  150. package/src/directives/permission/permission.js +20 -20
  151. package/src/i18n/langs/cn.js +259 -259
  152. package/src/i18n/langs/en.js +269 -269
  153. package/src/index.js +93 -93
  154. package/src/permission.js +160 -158
  155. package/src/plugins.js +18 -18
  156. package/src/router/index.js +110 -116
  157. package/src/store/getters.js +15 -15
  158. package/src/store/index.js +19 -19
  159. package/src/store/modules/app.js +54 -54
  160. package/src/store/modules/permission.js +145 -145
  161. package/src/store/modules/tab-content.js +36 -36
  162. package/src/store/modules/user.js +285 -285
  163. package/src/utils/auth-api.js +159 -159
  164. package/src/utils/calculator/calculator-factory-wf.js +558 -558
  165. package/src/utils/calculator/calculator-factory.js +145 -145
  166. package/src/utils/calculator/calculator-util.js +166 -166
  167. package/src/utils/eventBus.js +2 -2
  168. package/src/utils/iconUtils.js +28 -28
  169. package/src/utils/index.js +102 -102
  170. package/src/utils/jump-page-utils.js +824 -824
  171. package/src/utils/local-storage.js +7 -7
  172. package/src/utils/permission.js +31 -31
  173. package/src/utils/permissionAuth.js +96 -96
  174. package/src/utils/range-selector.js +188 -188
  175. package/src/utils/request.js +269 -269
  176. package/src/utils/restful-interface-utils.js +57 -57
  177. package/src/utils/util.js +698 -698
  178. package/src/utils/validate.js +34 -34
  179. package/src/utils/watermark.js +108 -108
  180. package/src/utils/workflow-util.js +93 -93
  181. package/src/views/404.vue +248 -248
  182. package/src/views/dsc-component/Sidebar/Item.vue +84 -84
  183. package/src/views/dsc-component/Sidebar/Link.vue +38 -38
  184. package/src/views/dsc-component/Sidebar/SidebarItem.vue +198 -198
  185. package/src/views/dsc-component/Sidebar/index.vue +228 -228
  186. package/src/views/dsc-component/tabs/tab-content.vue +203 -203
  187. package/src/views/error-page/401.vue +106 -106
  188. package/src/views/error-page/404.vue +248 -248
  189. package/src/views/layout/EmptyLayout.vue +3 -3
  190. package/src/views/layout/Layout.vue +81 -81
  191. package/src/views/layout/NewLayout.vue +18 -18
  192. package/src/views/layout/components/AppMain.vue +39 -39
  193. package/src/views/layout/components/Breadcrumb/index.vue +156 -156
  194. package/src/views/layout/components/Menubar/Item.vue +79 -79
  195. package/src/views/layout/components/Menubar/Link.vue +38 -38
  196. package/src/views/layout/components/Menubar/SidebarItem.vue +164 -164
  197. package/src/views/layout/components/Menubar/index.vue +210 -210
  198. package/src/views/layout/components/Sidebar/Item.vue +53 -53
  199. package/src/views/layout/components/Sidebar/Link.vue +38 -38
  200. package/src/views/layout/components/Sidebar/SidebarItem.vue +135 -135
  201. package/src/views/layout/components/Sidebar/index.vue +141 -141
  202. package/src/views/layout/components/iframe-page.vue +38 -38
  203. package/src/views/layout/components/index.js +4 -4
  204. package/src/views/layout/components/tabs/tab-content.vue +207 -207
  205. package/src/views/layout/mixin/ResizeHandler.js +41 -41
  206. package/src/views/layout/tab-content-iframe-index.vue +38 -38
  207. package/src/views/layout/tab-content-index.vue +93 -93
  208. package/src/views/login/authredirect.vue +10 -10
  209. package/src/views/login/index.vue +296 -296
  210. package/src/views/login/update-password.vue +243 -243
  211. package/src/views/redirect/index.vue +14 -14
  212. package/src/views/wf-history/tache-subprocess-history.vue +45 -45
  213. package/.vscode/extensions.json +0 -3
@@ -1,703 +1,700 @@
1
- <template>
2
- <el-form
3
- v-if="searchableColumns.length > 0"
4
- ref="searchForm"
5
- :label-position="query.queryLabelPosition"
6
- :label-width="labelWidth"
7
- :model="searchForm"
8
- :rules="rules"
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
- :label-width="
20
- searchableColumns[fieldNum * (r - 1) + (n - 1)].searchLabelWidth
21
- ? searchableColumns[fieldNum * (r - 1) + (n - 1)]
22
- .searchLabelWidth
23
- : '160px'
24
- "
25
- :prop="searchableColumns[fieldNum * (r - 1) + (n - 1)].prop"
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
- :end-placeholder="$t('imatrixUIMessage.endDate')"
59
- :model-value="
60
- getFormItemValue(
61
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
62
- )
63
- "
64
- :range-separator="$t('imatrixUIPublicModel.to')"
65
- :start-placeholder="$t('imatrixUIMessage.startDate')"
66
- :style="
67
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
68
- .searchControlWidth
69
- "
70
- type="daterange"
71
- unlink-panels
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
- :end-placeholder="$t('imatrixUIMessage.endDate')"
87
- :model-value="
88
- getFormItemValue(
89
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
90
- )
91
- "
92
- :range-separator="$t('imatrixUIPublicModel.to')"
93
- :start-placeholder="$t('imatrixUIMessage.startDate')"
94
- :style="
95
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
96
- .searchControlWidth
97
- "
98
- type="datetimerange"
99
- unlink-panels
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
- :end-placeholder="$t('imatrixUIMessage.endDate')"
117
- :model-value="
118
- getFormItemValue(
119
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
120
- )
121
- "
122
- :range-separator="$t('imatrixUIPublicModel.to')"
123
- :start-placeholder="$t('imatrixUIMessage.startDate')"
124
- :style="
125
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
126
- .searchControlWidth
127
- "
128
- type="datetimerange"
129
- unlink-panels
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
- :model-value="
149
- getFormItemValue(
150
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
151
- )
152
- "
153
- :placeholder="$t('imatrixUIMessage.selectTime')"
154
- style="width: 100%"
155
- type="fixed-time"
156
- value-format="HH:mm:ss"
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
- :model-value="
174
- getFormItemValue(
175
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
176
- )
177
- "
178
- :placeholder="$t('imatrixUIMessage.pleaseSelect')"
179
- :style="
180
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
181
- .searchControlWidth
182
- "
183
- clearable
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
- :model-value="
206
- getFormItemValue(
207
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
208
- )
209
- "
210
- :placeholder="$t('imatrixUIMessage.pleaseSelect')"
211
- :style="
212
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
213
- .searchControlWidth
214
- "
215
- clearable
216
- collapse-tags
217
- multiple
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
- :n="n"
247
- :r="r"
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
- :model-value="
258
- getFormItemValue(
259
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
260
- )
261
- "
262
- :style="
263
- searchableColumns[fieldNum * (r - 1) + (n - 1)]
264
- .searchControlWidth
265
- "
266
- active-color="#13ce66"
267
- inactive-color="#ff4949"
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
- :prop="searchableColumns[fieldNum * (r - 1) + (n - 1)].prop"
335
- :value="
336
- getFormItemValue(
337
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop
338
- )
339
- "
340
- class="customComponent"
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
- @input="
361
- setValueToModelProp(
362
- searchableColumns[fieldNum * (r - 1) + (n - 1)].prop,
363
- $event
364
- )
365
- "
366
- @keyup.enter="submitForm('searchForm')"
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
- size="mini"
377
- type="primary"
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 {$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
-
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 lang="scss" scoped>
686
- .grid-search-form {
687
- overflow: auto;
688
- }
689
-
690
- .grid-search-form :deep(.el-form-item) {
691
- margin-bottom: 0px;
692
- }
693
-
694
- .grid-search-form :deep(.search-btn) {
695
- margin-bottom: 5px;
696
- text-align: center;
697
- }
698
-
699
- .grid-search-form :deep(.el-select),
700
- .grid-search-form :deep(.customComponent) {
701
- width: 100%;
702
- }
703
- </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>