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,826 +1,819 @@
1
- <template>
2
- <div v-if="formFlag">
3
- <!-- <el-row style="padding-bottom: 8px">
4
- <el-button type="primary" size="mini" plain icon="el-icon-circle-plus-outline" @click="add">
5
- {{ $t('imatrixUIPublicModel.add') }}
6
- </el-button>
7
- <el-button type="primary" size="mini" plain icon="el-icon-delete" @click="remove">
8
- {{ $t('imatrixUIPublicModel.delete') }}
9
- </el-button>
10
- </el-row> -->
11
- <el-table
12
- ref="table"
13
- :data="searchFormList"
14
- :row-class-name="tableRowClassName"
15
- border
16
- highlight-current-row
17
- style="width: 100%"
18
- @current-change="handleCurrentChange"
19
- >
20
- <el-table-column
21
- :label="$t('imatrixUIPublicModel.edit')"
22
- align="center"
23
- fixed="left"
24
- width="80"
25
- >
26
- <template v-slot="scope">
27
- <el-icon @click="add">
28
- <CirclePlus/>
29
- </el-icon>
30
- <el-icon @click="remove(scope.$index)">
31
- <Remove/>
32
- </el-icon>
33
- </template>
34
- </el-table-column>
35
- <el-table-column label="(" prop="leftBracket" width="90">
36
- <template v-slot="scope">
37
- <el-select
38
- v-model="scope.row.leftBracket"
39
- clearable
40
- size="small"
41
- @focus="selectRow(scope.row)"
42
- >
43
- <el-option label="" value=""/>
44
- <el-option label="(" value="("/>
45
- <el-option label="((" value="(("/>
46
- <el-option label="(((" value="((("/>
47
- </el-select>
48
- </template>
49
- </el-table-column>
50
- <el-table-column
51
- :label="$t('imatrixUIPublicModel.fieldName')"
52
- width="200"
53
- >
54
- <template v-slot="scope">
55
- <el-select
56
- v-model="scope.row.prop"
57
- clearable
58
- filterable
59
- size="small"
60
- @change="changeFieldName(scope.$index)"
61
- @focus="selectRow(scope.row)"
62
- >
63
- <el-option
64
- v-for="item in searchableColumns"
65
- :key="item.prop"
66
- :label="item.label"
67
- :value="item.prop"
68
- />
69
- </el-select>
70
- </template>
71
- </el-table-column>
72
- <el-table-column :label="$t('imatrixUIPublicModel.operator')" width="110">
73
- <template v-slot="scope">
74
- <el-select
75
- v-model="scope.row.operator"
76
- clearable
77
- size="small"
78
- @focus="selectRow(scope.row)"
79
- >
80
- <el-option
81
- v-for="option in operationArr[scope.$index]"
82
- :key="option.name"
83
- :label="option.label"
84
- :value="option.name"
85
- />
86
- </el-select>
87
- </template>
88
- </el-table-column>
89
- <el-table-column :label="$t('imatrixUIPublicModel.value')">
90
- <template v-if="scope.row.prop" v-slot="scope">
91
- <el-date-picker
92
- v-if="
93
- scope.row.dataType === 'DATE' ||
94
- scope.row.componentType === 'date'
95
- "
96
- v-model="scope.row.value"
97
- :end-placeholder="$t('imatrixUIMessage.endDate')"
98
- :range-separator="$t('imatrixUIPublicModel.to')"
99
- :start-placeholder="$t('imatrixUIMessage.startDate')"
100
- :style="scope.row.searchControlWidth"
101
- size="small"
102
- type="daterange"
103
- unlink-panels
104
- value-format="yyyy-MM-dd"
105
- @focus="selectRow(scope.row)"
106
- @input="setValueToModelProp(scope.$index, $event)"
107
- />
108
-
109
- <el-date-picker
110
- v-else-if="scope.row.componentType === 'dateTimePicker'"
111
- v-model="scope.row.value"
112
- :end-placeholder="$t('imatrixUIMessage.endDate')"
113
- :range-separator="$t('imatrixUIPublicModel.to')"
114
- :start-placeholder="$t('imatrixUIMessage.startDate')"
115
- :style="scope.row.searchControlWidth"
116
- size="small"
117
- type="datetimerange"
118
- unlink-panels
119
- value-format="yyyy-MM-dd HH:mm:ss"
120
- @focus="selectRow(scope.row)"
121
- @input="setValueToModelProp(scope.$index, $event)"
122
- />
123
-
124
- <el-date-picker
125
- v-else-if="
126
- scope.row.dataType === 'TIME' &&
127
- scope.row.componentType === 'timepicker'
128
- "
129
- v-model="scope.row.value"
130
- :end-placeholder="$t('imatrixUIMessage.endDate')"
131
- :range-separator="$t('imatrixUIPublicModel.to')"
132
- :start-placeholder="$t('imatrixUIMessage.startDate')"
133
- :style="scope.row.searchControlWidth"
134
- size="small"
135
- type="datetimerange"
136
- unlink-panels
137
- value-format="HH:mm:ss"
138
- @focus="selectRow(scope.row)"
139
- @input="setValueToModelProp(scope.$index, $event)"
140
- />
141
-
142
- <el-time-picker
143
- v-else-if="
144
- scope.row.componentType === 'timepicker' &&
145
- scope.row.dataType !== 'TIME' &&
146
- scope.row.dataType !== 'DATE'
147
- "
148
- v-model="scope.row.value"
149
- :placeholder="$t('imatrixUIMessage.selectTime')"
150
- size="small"
151
- style="width: 100%"
152
- type="fixed-time"
153
- value-format="HH:mm:ss"
154
- @focus="selectRow(scope.row)"
155
- @input="setValueToModelProp(scope.$index, $event)"
156
- />
157
-
158
- <organization-input
159
- v-else-if="componentTypeTypeIsTree(scope.row.componentType)"
160
- v-model:value="scope.row.value"
161
- :fields="getTreeFields(scope.row.orgTreeSet)"
162
- :models="searchForm"
163
- :multiple="getTreeIsMultiTree(scope.row.componentType)"
164
- :size="small"
165
- :tree-type="getTreeType(scope.row.componentType)"
166
- @clear="clearOrganizationInputEvent"
167
- @focus="selectRow(scope.row)"
168
- @setValue="organizationInputEvent"
169
- />
170
-
171
- <el-select
172
- v-else-if="
173
- ((scope.row.componentType &&
174
- scope.row.componentType === 'select') ||
175
- scope.row.dataType === 'BOOLEAN') &&
176
- !isDynamicDataSourceSource(scope.row)
177
- "
178
- v-model="scope.row.value"
179
- :placeholder="$t('imatrixUIMessage.pleaseSelect')"
180
- :style="scope.row.searchControlWidth"
181
- clearable
182
- size="small"
183
- @focus="selectRow(scope.row)"
184
- @input="setValueToModelProp(scope.$index, $event)"
185
- >
186
- <el-option
187
- v-for="item in scope.row.valueSet"
188
- :key="item.value"
189
- :label="item.label"
190
- :value="item.value"
191
- />
192
- </el-select>
193
- <el-select
194
- v-else-if="
195
- scope.row.componentType &&
196
- scope.row.componentType === 'multiselect' &&
197
- !isDynamicDataSourceSource(scope.row)
198
- "
199
- v-model="scope.row.value"
200
- :placeholder="$t('imatrixUIMessage.pleaseSelect')"
201
- :style="scope.row.searchControlWidth"
202
- clearable
203
- collapse-tags
204
- multiple
205
- size="small"
206
- @focus="selectRow(scope.row)"
207
- @input="setValueToModelProp(scope.$index, $event)"
208
- >
209
- <el-option
210
- v-for="item in scope.row.valueSet"
211
- :key="item.value"
212
- :label="item.label"
213
- :value="item.value"
214
- />
215
- </el-select>
216
-
217
- <dynamic-source-select
218
- v-else-if="
219
- scope.row.componentType &&
220
- (scope.row.componentType === 'multiselect' ||
221
- scope.row.componentType === 'select') &&
222
- isDynamicDataSourceSource(scope.row)
223
- "
224
- :base-props="{
225
- multiple:
226
- scope.row.componentType === 'multiselect' ? true : false,
227
- }"
228
- :entity="scope.row"
229
- :is-join-table="isJoinTable"
230
- :list-code="code"
231
- :options="getDynamicDataSourceOptions(scope.row)"
232
- :table-name="tableName"
233
- :value="scope.row.value"
234
- @input="setValueToModelProp(scope.$index, $event)"
235
- />
236
- <search-form-number
237
- v-else-if="
238
- scope.row.componentType &&
239
- scope.row.componentType === 'inputNumber'
240
- "
241
- :n="n"
242
- :r="r"
243
- size="small"
244
- @focus="selectRow(scope.row)"
245
- @setValue="setNumberValue"
246
- />
247
-
248
- <el-switch
249
- v-else-if="
250
- scope.row.componentType && scope.row.componentType === 'switch'
251
- "
252
- v-model="scope.row.value"
253
- :style="scope.row.searchControlWidth"
254
- active-color="#13ce66"
255
- inactive-color="#ff4949"
256
- size="small"
257
- @focus="selectRow(scope.row)"
258
- @input="setValueToModelProp(scope.$index, $event)"
259
- />
260
- <el-slider
261
- v-else-if="
262
- scope.row.componentType && scope.row.componentType === 'slider'
263
- "
264
- v-model="scope.row.value"
265
- :style="scope.row.searchControlWidth"
266
- size="small"
267
- @focus="selectRow(scope.row)"
268
- @input="setValueToModelProp(scope.$index, $event)"
269
- />
270
-
271
- <el-rate
272
- v-else-if="
273
- scope.row.componentType && scope.row.componentType === 'rate'
274
- "
275
- v-model="scope.row.value"
276
- :style="scope.row.searchControlWidth"
277
- size="small"
278
- @focus="selectRow(scope.row)"
279
- @input="setValueToModelProp(scope.$index, $event)"
280
- />
281
- <span v-else-if="customComponent(scope.row.prop) === true">
282
- <component
283
- :is="scope.row.componentName"
284
- :ref="scope.row.componentName"
285
- v-model:value="scope.row.value"
286
- :prop="scope.row.prop"
287
- :row="scope.row"
288
- class="customComponent"
289
- @focus="selectRow(scope.row)"
290
- @input="
291
- setValueToModelProp(
292
- scope.$index,
293
- $event,
294
- scope.row.componentName
295
- )
296
- "
297
- />
298
- </span>
299
- <el-input
300
- v-else
301
- v-model="scope.row.value"
302
- :style="scope.row.searchControlWidth"
303
- size="small"
304
- @focus="selectRow(scope.row)"
305
- @input="setValueToModelProp(scope.$index, $event)"
306
- @keyup.enter="submitForm('searchForm')"
307
- />
308
- </template>
309
- </el-table-column>
310
- <el-table-column label=")" prop="rightBracket" width="90">
311
- <template v-slot="scope">
312
- <el-select
313
- v-model="scope.row.rightBracket"
314
- clearable
315
- size="small"
316
- @focus="selectRow(scope.row)"
317
- >
318
- <el-option label="" value=""/>
319
- <el-option label=")" value=")"/>
320
- <el-option label="))" value="))"/>
321
- <el-option label=")))" value=")))"/>
322
- </el-select>
323
- </template>
324
- </el-table-column>
325
- <el-table-column
326
- :label="$t('imatrixUIPublicModel.andOr')"
327
- prop="logicOperator"
328
- width="110"
329
- >
330
- <template v-slot="scope">
331
- <el-select
332
- v-model="scope.row.joinSign"
333
- clearable
334
- size="small"
335
- @focus="selectRow(scope.row)"
336
- >
337
- <el-option :label="$t('imatrixUIPublicModel.perhaps')" value="or"/>
338
- <el-option :label="$t('imatrixUIPublicModel.also')" value="and"/>
339
- </el-select>
340
- </template>
341
- </el-table-column>
342
- <el-table-column
343
- :label="$t('imatrixUIPublicModel.whenTheVariableIsEmpty')"
344
- width="110"
345
- >
346
- <template v-slot="scope">
347
- <el-select
348
- v-model="scope.row.variableIsNull"
349
- clearable
350
- size="small"
351
- @focus="selectRow(scope.row)"
352
- >
353
- <el-option label="Null" value="null"/>
354
- <el-option
355
- :label="$t('imatrixUIPublicModel.ignore11')"
356
- value="1=1"
357
- />
358
- <el-option
359
- :label="$t('imatrixUIPublicModel.nonConformity')"
360
- value="1<>1"
361
- />
362
- </el-select>
363
- </template>
364
- </el-table-column>
365
- </el-table>
366
- </div>
367
- </template>
368
-
369
- <script>
370
- import {$emit} from '../../utils/gogocodeTransfer'
371
- import searchMethods from './search-methods'
372
- import searchFormNumber from './search-form-number.vue'
373
- // import { isOptionFunction, getSearchObject } from './utils'
374
- import store from './store'
375
- import SearchConditionInput from './search-condition-input.vue'
376
- import SearchConditionList from './search-condition-list.vue'
377
- import {getDynamicDataSourceOptions, isDynamicDataSourceSource} from './utils'
378
-
379
- export default {
380
- components: {
381
- searchFormNumber,
382
- SearchConditionInput,
383
- SearchConditionList,
384
- },
385
- name: 'SearchForm',
386
- props: {
387
- searchableColumns: {
388
- type: Array,
389
- default: null,
390
- },
391
- searchFormList: {
392
- type: Array,
393
- default: null,
394
- },
395
- propMap: {
396
- type: Object,
397
- default: null,
398
- },
399
- code: {
400
- type: String,
401
- default: null,
402
- },
403
- isSql: {
404
- type: Boolean,
405
- default: false,
406
- },
407
- },
408
- data() {
409
- const gridParams = store.get(this.code)
410
- let tableName
411
- if (gridParams && gridParams.basicInfo && gridParams.basicInfo.tableName) {
412
- tableName = gridParams.basicInfo.tableName
413
- }
414
- let isHasJoinTable
415
- if (
416
- gridParams &&
417
- gridParams.basicInfo &&
418
- gridParams.basicInfo.hasJoinTable
419
- ) {
420
- isHasJoinTable = gridParams.basicInfo.hasJoinTable
421
- }
422
- const customComponentNames = new Set()
423
- return {
424
- customComponentNames: customComponentNames,
425
- currentRow: null,
426
- formFlag: true,
427
- operationArr: [],
428
- tableName,
429
- isJoinTable: isHasJoinTable, // 是否是关联表
430
- }
431
- },
432
- computed: {},
433
- watch: {
434
- searchableColumns: {
435
- deep: true,
436
- handler(newValue, oldValue) {
437
- this.searchableColumns = newValue
438
- this.refreshOperators()
439
- this.formFlag = false
440
- this.$nextTick(() => {
441
- this.formFlag = true
442
- })
443
- },
444
- },
445
- },
446
- created() {
447
- this.refreshOperators()
448
- if (!this.searchFormList || this.searchFormList.length < 1) {
449
- this.add()
450
- }
451
- },
452
- methods: {
453
- ...searchMethods,
454
- getDynamicDataSourceOptions(column) {
455
- const gridParams = store.get(this.code)
456
- return getDynamicDataSourceOptions(
457
- column,
458
- this.isSql,
459
- gridParams.additionalParamMap
460
- )
461
- },
462
- // 值设置是否是动态数据源类型的数据源
463
- isDynamicDataSourceSource(column) {
464
- return isDynamicDataSourceSource(column)
465
- },
466
- refreshOperators() {
467
- if (this.searchableColumns && this.searchableColumns.length > 0) {
468
- for (var i = 0; i < this.searchableColumns.length; i++) {
469
- const prop = this.searchableColumns[i].prop
470
- const item = this.propMap[prop]
471
- this.operationArr[i] = this.getOperators(item)
472
- }
473
- }
474
- },
475
- handleCurrentChange(val) {
476
- this.currentRow = val
477
- },
478
- tableRowClassName({row, rowIndex}) {
479
- // 把每一行的索引放进row
480
- row.index = rowIndex
481
- },
482
- // 选择行
483
- selectRow(row) {
484
- this.$refs.table.setCurrentRow(row)
485
- },
486
- // 改变选择的属性
487
- changeFieldName(index) {
488
- const prop = this.currentRow.prop
489
- const item = this.propMap[prop]
490
- this.searchFormList[index].dataType = item.dataType
491
- this.searchFormList[index].orgProp = item.orgProp
492
- this.searchFormList[index].componentType = item.componentType
493
- this.searchFormList[index].componentName = item.componentName
494
- this.searchFormList[index].queryMatching = item.queryMatching
495
- this.searchFormList[index].searchControlWidth = item.searchControlWidth
496
- this.searchFormList[index].fuzzy = item.fuzzy
497
- this.searchFormList[index].valueSet = item.valueSet
498
- this.operationArr[index] = this.getOperators(item)
499
- },
500
- setValueToModelProp(index, value, componentName) {
501
- if (index !== null && index !== undefined) {
502
- this.searchFormList[index]['value'] = value
503
- }
504
- },
505
- componentTypeTypeIsTree(componentType) {
506
- if (componentType) {
507
- if (componentType.indexOf('DeptManTree') > 0) {
508
- // 说明是部门人员树
509
- return true
510
- }
511
- if (componentType.indexOf('DeptTree') > 0) {
512
- // 说明是部门树
513
- return true
514
- }
515
- if (componentType.indexOf('WgManTree') > 0) {
516
- // 说明是工作组人员树
517
- return true
518
- }
519
- if (componentType.indexOf('WgManTree') > 0) {
520
- // 说明是工作组树
521
- return true
522
- }
523
- }
524
- return false
525
- },
526
- getTreeFields(orgTreeSet) {
527
- if (orgTreeSet && orgTreeSet !== '') {
528
- return JSON.parse(orgTreeSet)
529
- }
530
- },
531
- getTreeIsMultiTree(componentType) {
532
- if (
533
- componentType &&
534
- componentType.indexOf('single') >= 0 &&
535
- componentType.indexOf('Tree') > 0
536
- ) {
537
- return false
538
- } else {
539
- return true
540
- }
541
- },
542
- getTreeType(componentType) {
543
- if (componentType) {
544
- if (componentType.indexOf('DeptManTree') > 0) {
545
- // 说明是部门人员树
546
- return 'DeptUserTree'
547
- }
548
- if (componentType.indexOf('DeptTree') > 0) {
549
- // 说明是部门树
550
- return 'DeptTree'
551
- }
552
- if (componentType.indexOf('WgTree') > 0) {
553
- // 说明是工作组人员树
554
- return 'WgTree'
555
- }
556
- if (componentType.indexOf('WgManTree') > 0) {
557
- // 说明是工作组树
558
- return 'WgUserTree'
559
- }
560
- }
561
- },
562
- // 组织结构树文本框值改变事件
563
- organizationInputEvent(prop, value) {
564
- if (this.currentRow) {
565
- this.currentRow['value'] = value
566
- }
567
- },
568
- // 组织结构树文本框值清空事件
569
- clearOrganizationInputEvent(prop) {
570
- if (this.currentRow) {
571
- this.currentRow['value'] = null
572
- }
573
- },
574
- customComponent(prop) {
575
- const column = this.propMap[prop]
576
- const gridParams = store.get(this.code)
577
- if (column.componentName && column.componentName !== '') {
578
- this.customComponentNames.add(column.componentName)
579
- return true
580
- }
581
- if (
582
- (!column.componentName || column.componentName === '') &&
583
- gridParams.options &&
584
- gridParams.options.search &&
585
- gridParams.options.search.customSearchElements
586
- ) {
587
- // 定义了自定义查询组件
588
- const propSearchEle =
589
- gridParams.options.search.customSearchElements[column.prop]
590
- // console.log('customComponent-customSearchElements-propSearchEle-', column.prop)
591
- if (propSearchEle) {
592
- column.componentName = 'custom-' + column.prop
593
- const component = propSearchEle.call(this, column)
594
- // console.log('customComponent-customSearchElements-')
595
- if (component) {
596
- this.customComponentNames.add(column.componentName)
597
- window.$vueApp.component(column.componentName, component)
598
- return true
599
- }
600
- }
601
- }
602
- return false
603
- },
604
- validateForm() {
605
- return new Promise((resolve, reject) => {
606
- resolve(true)
607
- })
608
- },
609
- resetForm() {
610
- if (this.customComponentNames && this.customComponentNames.length > 0) {
611
- for (const componentName of this.customComponentNames) {
612
- // 遍历
613
- this.$refs[componentName][0].resetField()
614
- }
615
- }
616
- // 当是保持页数默认赋值的查询字段resetFields()不会被清空,需要下面的方法遍历设未null
617
- $emit(this, 'resetForm')
618
- this.add()
619
- },
620
- setNumberValue(value, r, n) {
621
- if (this.currentRow) {
622
- this.currentRow['value'] = value
623
- }
624
- },
625
- // 添加
626
- add() {
627
- if (!this.searchFormList) {
628
- this.searchFormList = []
629
- }
630
- this.searchFormList.push({
631
- leftBracket: '',
632
- prop: '',
633
- operator: '',
634
- value: '',
635
- rightBracket: '',
636
- joinSign: 'or',
637
- dataType: '',
638
- propDbName: '',
639
- })
640
- this.operationArr.push([])
641
- },
642
- // 删除
643
- remove(index) {
644
- if (index !== null && index !== undefined && index !== -1) {
645
- this.searchFormList.splice(index, 1)
646
- } else {
647
- if (this.currentRow === null) {
648
- this.$alert(this.$t('message.pleaseSelectARow'))
649
- return
650
- }
651
- if (
652
- this.currentRow &&
653
- this.currentRow.index &&
654
- this.currentRow.index !== null &&
655
- this.currentRow.index !== undefined
656
- ) {
657
- this.searchFormList.splice(this.currentRow.index, 1)
658
- }
659
- }
660
- },
661
- // 实时根据类型改变连接符
662
- getOperators(item) {
663
- if (item) {
664
- if (
665
- item.dataType === 'INTEGER' ||
666
- item.dataType === 'LONG' ||
667
- item.dataType === 'DOUBLE' ||
668
- item.dataType === 'FLOAT'
669
- ) {
670
- return [
671
- {
672
- name: 'GT',
673
- label: this.$t('imatrixUIPublicModel.greaterThan'),
674
- },
675
- {
676
- name: 'LT',
677
- label: this.$t('imatrixUIPublicModel.lessThan'),
678
- },
679
- {
680
- name: 'EQ',
681
- label: this.$t('imatrixUIPublicModel.beEqualTo'),
682
- },
683
- {
684
- name: 'LET',
685
- label: this.$t('imatrixUIPublicModel.notGreaterThan'),
686
- },
687
- {
688
- name: 'GET',
689
- label: this.$t('imatrixUIPublicModel.notLessThan'),
690
- },
691
- {
692
- name: 'NET',
693
- label: this.$t('imatrixUIPublicModel.notEqualTo'),
694
- },
695
- {
696
- name: 'IS_NULL',
697
- label: this.$t('imatrixUIPublicModel.isNull'),
698
- },
699
- {
700
- name: 'IS_NOT_NULL',
701
- label: this.$t('imatrixUIPublicModel.isNotNull'),
702
- },
703
- ]
704
- } else if (item.dataType === 'DATE' || item.dataType === 'TIME') {
705
- return [
706
- {
707
- name: 'GT',
708
- label: this.$t('imatrixUIPublicModel.laterThan'),
709
- },
710
- {
711
- name: 'LT',
712
- label: this.$t('imatrixUIPublicModel.earlierThan'),
713
- },
714
- {
715
- name: 'EQ',
716
- label: this.$t('imatrixUIPublicModel.beEqualTo'),
717
- },
718
- {
719
- name: 'LET',
720
- label: this.$t('imatrixUIPublicModel.noLaterThan'),
721
- },
722
- {
723
- name: 'GET',
724
- label: this.$t('imatrixUIPublicModel.noEarlierThan'),
725
- },
726
- {
727
- name: 'IS_NULL',
728
- label: this.$t('imatrixUIPublicModel.isNull'),
729
- },
730
- {
731
- name: 'IS_NOT_NULL',
732
- label: this.$t('imatrixUIPublicModel.isNotNull'),
733
- },
734
- ]
735
- } else if (item.dataType === 'TEXT') {
736
- return [
737
- {
738
- name: 'EQ',
739
- label: this.$t('imatrixUIPublicModel.beEqualTo'),
740
- },
741
- {
742
- name: 'NET',
743
- label: this.$t('imatrixUIPublicModel.notEqualTo'),
744
- },
745
- {
746
- name: 'CONTAIN',
747
- label: this.$t('imatrixUIPublicModel.contain'),
748
- },
749
- {
750
- name: 'NOT_CONTAIN',
751
- label: this.$t('imatrixUIPublicModel.notIncluded'),
752
- },
753
- {
754
- name: 'IS_NULL',
755
- label: this.$t('imatrixUIPublicModel.isNull'),
756
- },
757
- {
758
- name: 'IS_NOT_NULL',
759
- label: this.$t('imatrixUIPublicModel.isNotNull'),
760
- },
761
- ]
762
- } else {
763
- return [
764
- {
765
- name: 'EQ',
766
- label: this.$t('imatrixUIPublicModel.beEqualTo'),
767
- },
768
- {
769
- name: 'NET',
770
- label: this.$t('imatrixUIPublicModel.notEqualTo'),
771
- },
772
- {
773
- name: 'IS_NULL',
774
- label: this.$t('imatrixUIPublicModel.isNull'),
775
- },
776
- {
777
- name: 'IS_NOT_NULL',
778
- label: this.$t('imatrixUIPublicModel.isNotNull'),
779
- },
780
- ]
781
- }
782
- } else {
783
- return [
784
- {
785
- name: 'EQ',
786
- label: this.$t('imatrixUIPublicModel.beEqualTo'),
787
- },
788
- {
789
- name: 'NET',
790
- label: this.$t('imatrixUIPublicModel.notEqualTo'),
791
- },
792
- {
793
- name: 'IS_NULL',
794
- label: this.$t('imatrixUIPublicModel.isNull'),
795
- },
796
- {
797
- name: 'IS_NOT_NULL',
798
- label: this.$t('imatrixUIPublicModel.isNotNull'),
799
- },
800
- ]
801
- }
802
- },
803
- },
804
- emits: ['resetForm'],
805
- }
806
- </script>
807
-
808
- <style scoped>
809
- .grid-search-form {
810
- overflow: auto;
811
- }
812
-
813
- .grid-search-form :deep(.el-form-item) {
814
- margin-bottom: 0px;
815
- }
816
-
817
- .grid-search-form :deep(.search-btn) {
818
- margin-bottom: 5px;
819
- text-align: center;
820
- }
821
-
822
- .grid-search-form :deep(.el-select),
823
- .grid-search-form :deep(.customComponent) {
824
- width: 100%;
825
- }
826
- </style>
1
+ <template>
2
+ <div v-if="formFlag">
3
+ <!-- <el-row style="padding-bottom: 8px">
4
+ <el-button type="primary" size="mini" plain icon="el-icon-circle-plus-outline" @click="add">
5
+ {{ $t('imatrixUIPublicModel.add') }}
6
+ </el-button>
7
+ <el-button type="primary" size="mini" plain icon="el-icon-delete" @click="remove">
8
+ {{ $t('imatrixUIPublicModel.delete') }}
9
+ </el-button>
10
+ </el-row> -->
11
+ <el-table
12
+ ref="table"
13
+ :data="searchFormList"
14
+ :row-class-name="tableRowClassName"
15
+ border
16
+ style="width: 100%"
17
+ highlight-current-row
18
+ @current-change="handleCurrentChange"
19
+ >
20
+ <el-table-column
21
+ :label="$t('imatrixUIPublicModel.edit')"
22
+ fixed="left"
23
+ align="center"
24
+ width="80"
25
+ >
26
+ <template v-slot="scope">
27
+ <el-icon @click="add"><CirclePlus /></el-icon>
28
+ <el-icon @click="remove(scope.$index)"><Remove /></el-icon>
29
+ </template>
30
+ </el-table-column>
31
+ <el-table-column prop="leftBracket" label="(" width="90">
32
+ <template v-slot="scope">
33
+ <el-select
34
+ v-model="scope.row.leftBracket"
35
+ size="small"
36
+ clearable
37
+ @focus="selectRow(scope.row)"
38
+ >
39
+ <el-option label="" value="" />
40
+ <el-option label="(" value="(" />
41
+ <el-option label="((" value="((" />
42
+ <el-option label="(((" value="(((" />
43
+ </el-select>
44
+ </template>
45
+ </el-table-column>
46
+ <el-table-column
47
+ :label="$t('imatrixUIPublicModel.fieldName')"
48
+ width="200"
49
+ >
50
+ <template v-slot="scope">
51
+ <el-select
52
+ v-model="scope.row.prop"
53
+ size="small"
54
+ clearable
55
+ filterable
56
+ @focus="selectRow(scope.row)"
57
+ @change="changeFieldName(scope.$index)"
58
+ >
59
+ <el-option
60
+ v-for="item in searchableColumns"
61
+ :key="item.prop"
62
+ :label="item.label"
63
+ :value="item.prop"
64
+ />
65
+ </el-select>
66
+ </template>
67
+ </el-table-column>
68
+ <el-table-column :label="$t('imatrixUIPublicModel.operator')" width="110">
69
+ <template v-slot="scope">
70
+ <el-select
71
+ v-model="scope.row.operator"
72
+ size="small"
73
+ clearable
74
+ @focus="selectRow(scope.row)"
75
+ >
76
+ <el-option
77
+ v-for="option in operationArr[scope.$index]"
78
+ :key="option.name"
79
+ :label="option.label"
80
+ :value="option.name"
81
+ />
82
+ </el-select>
83
+ </template>
84
+ </el-table-column>
85
+ <el-table-column :label="$t('imatrixUIPublicModel.value')">
86
+ <template v-if="scope.row.prop" v-slot="scope">
87
+ <el-date-picker
88
+ v-if="
89
+ scope.row.dataType === 'DATE' ||
90
+ scope.row.componentType === 'date'
91
+ "
92
+ v-model="scope.row.value"
93
+ type="daterange"
94
+ size="small"
95
+ :style="scope.row.searchControlWidth"
96
+ :range-separator="$t('imatrixUIPublicModel.to')"
97
+ unlink-panels
98
+ :start-placeholder="$t('imatrixUIMessage.startDate')"
99
+ :end-placeholder="$t('imatrixUIMessage.endDate')"
100
+ value-format="yyyy-MM-dd"
101
+ @input="setValueToModelProp(scope.$index, $event)"
102
+ @focus="selectRow(scope.row)"
103
+ />
104
+
105
+ <el-date-picker
106
+ v-else-if="scope.row.componentType === 'dateTimePicker'"
107
+ v-model="scope.row.value"
108
+ type="datetimerange"
109
+ :range-separator="$t('imatrixUIPublicModel.to')"
110
+ unlink-panels
111
+ size="small"
112
+ :style="scope.row.searchControlWidth"
113
+ :start-placeholder="$t('imatrixUIMessage.startDate')"
114
+ :end-placeholder="$t('imatrixUIMessage.endDate')"
115
+ value-format="yyyy-MM-dd HH:mm:ss"
116
+ @input="setValueToModelProp(scope.$index, $event)"
117
+ @focus="selectRow(scope.row)"
118
+ />
119
+
120
+ <el-date-picker
121
+ v-else-if="
122
+ scope.row.dataType === 'TIME' &&
123
+ scope.row.componentType === 'timepicker'
124
+ "
125
+ v-model="scope.row.value"
126
+ type="datetimerange"
127
+ :range-separator="$t('imatrixUIPublicModel.to')"
128
+ unlink-panels
129
+ size="small"
130
+ :style="scope.row.searchControlWidth"
131
+ :start-placeholder="$t('imatrixUIMessage.startDate')"
132
+ :end-placeholder="$t('imatrixUIMessage.endDate')"
133
+ value-format="HH:mm:ss"
134
+ @input="setValueToModelProp(scope.$index, $event)"
135
+ @focus="selectRow(scope.row)"
136
+ />
137
+
138
+ <el-time-picker
139
+ v-else-if="
140
+ scope.row.componentType === 'timepicker' &&
141
+ scope.row.dataType !== 'TIME' &&
142
+ scope.row.dataType !== 'DATE'
143
+ "
144
+ v-model="scope.row.value"
145
+ type="fixed-time"
146
+ size="small"
147
+ :placeholder="$t('imatrixUIMessage.selectTime')"
148
+ style="width: 100%"
149
+ value-format="HH:mm:ss"
150
+ @input="setValueToModelProp(scope.$index, $event)"
151
+ @focus="selectRow(scope.row)"
152
+ />
153
+
154
+ <organization-input
155
+ v-else-if="componentTypeTypeIsTree(scope.row.componentType)"
156
+ v-model:value="scope.row.value"
157
+ :fields="getTreeFields(scope.row.orgTreeSet)"
158
+ :models="searchForm"
159
+ :size="small"
160
+ :multiple="getTreeIsMultiTree(scope.row.componentType)"
161
+ :tree-type="getTreeType(scope.row.componentType)"
162
+ @setValue="organizationInputEvent"
163
+ @clear="clearOrganizationInputEvent"
164
+ @focus="selectRow(scope.row)"
165
+ />
166
+
167
+ <el-select
168
+ v-else-if="
169
+ ((scope.row.componentType &&
170
+ scope.row.componentType === 'select') ||
171
+ scope.row.dataType === 'BOOLEAN') &&
172
+ !isDynamicDataSourceSource(scope.row)
173
+ "
174
+ v-model="scope.row.value"
175
+ clearable
176
+ :style="scope.row.searchControlWidth"
177
+ :placeholder="$t('imatrixUIMessage.pleaseSelect')"
178
+ size="small"
179
+ @input="setValueToModelProp(scope.$index, $event)"
180
+ @focus="selectRow(scope.row)"
181
+ >
182
+ <el-option
183
+ v-for="item in scope.row.valueSet"
184
+ :key="item.value"
185
+ :label="item.label"
186
+ :value="item.value"
187
+ />
188
+ </el-select>
189
+ <el-select
190
+ v-else-if="
191
+ scope.row.componentType &&
192
+ scope.row.componentType === 'multiselect' &&
193
+ !isDynamicDataSourceSource(scope.row)
194
+ "
195
+ v-model="scope.row.value"
196
+ clearable
197
+ multiple
198
+ :style="scope.row.searchControlWidth"
199
+ collapse-tags
200
+ size="small"
201
+ :placeholder="$t('imatrixUIMessage.pleaseSelect')"
202
+ @input="setValueToModelProp(scope.$index, $event)"
203
+ @focus="selectRow(scope.row)"
204
+ >
205
+ <el-option
206
+ v-for="item in scope.row.valueSet"
207
+ :key="item.value"
208
+ :label="item.label"
209
+ :value="item.value"
210
+ />
211
+ </el-select>
212
+
213
+ <dynamic-source-select
214
+ v-else-if="
215
+ scope.row.componentType &&
216
+ (scope.row.componentType === 'multiselect' ||
217
+ scope.row.componentType === 'select') &&
218
+ isDynamicDataSourceSource(scope.row)
219
+ "
220
+ :value="scope.row.value"
221
+ :base-props="{
222
+ multiple:
223
+ scope.row.componentType === 'multiselect' ? true : false,
224
+ }"
225
+ :entity="scope.row"
226
+ :options="getDynamicDataSourceOptions(scope.row)"
227
+ :table-name="tableName"
228
+ :is-join-table="isJoinTable"
229
+ :list-code="code"
230
+ @input="setValueToModelProp(scope.$index, $event)"
231
+ />
232
+ <search-form-number
233
+ v-else-if="
234
+ scope.row.componentType &&
235
+ scope.row.componentType === 'inputNumber'
236
+ "
237
+ :r="r"
238
+ :n="n"
239
+ size="small"
240
+ @setValue="setNumberValue"
241
+ @focus="selectRow(scope.row)"
242
+ />
243
+
244
+ <el-switch
245
+ v-else-if="
246
+ scope.row.componentType && scope.row.componentType === 'switch'
247
+ "
248
+ v-model="scope.row.value"
249
+ active-color="#13ce66"
250
+ inactive-color="#ff4949"
251
+ size="small"
252
+ :style="scope.row.searchControlWidth"
253
+ @input="setValueToModelProp(scope.$index, $event)"
254
+ @focus="selectRow(scope.row)"
255
+ />
256
+ <el-slider
257
+ v-else-if="
258
+ scope.row.componentType && scope.row.componentType === 'slider'
259
+ "
260
+ v-model="scope.row.value"
261
+ size="small"
262
+ :style="scope.row.searchControlWidth"
263
+ @input="setValueToModelProp(scope.$index, $event)"
264
+ @focus="selectRow(scope.row)"
265
+ />
266
+
267
+ <el-rate
268
+ v-else-if="
269
+ scope.row.componentType && scope.row.componentType === 'rate'
270
+ "
271
+ v-model="scope.row.value"
272
+ :style="scope.row.searchControlWidth"
273
+ size="small"
274
+ @input="setValueToModelProp(scope.$index, $event)"
275
+ @focus="selectRow(scope.row)"
276
+ />
277
+ <span v-else-if="customComponent(scope.row.prop) === true">
278
+ <component
279
+ :is="scope.row.componentName"
280
+ :ref="scope.row.componentName"
281
+ v-model:value="scope.row.value"
282
+ class="customComponent"
283
+ :prop="scope.row.prop"
284
+ :row="scope.row"
285
+ @input="
286
+ setValueToModelProp(
287
+ scope.$index,
288
+ $event,
289
+ scope.row.componentName
290
+ )
291
+ "
292
+ @focus="selectRow(scope.row)"
293
+ />
294
+ </span>
295
+ <el-input
296
+ v-else
297
+ v-model="scope.row.value"
298
+ size="small"
299
+ :style="scope.row.searchControlWidth"
300
+ @focus="selectRow(scope.row)"
301
+ @keyup.enter="submitForm('searchForm')"
302
+ @input="setValueToModelProp(scope.$index, $event)"
303
+ />
304
+ </template>
305
+ </el-table-column>
306
+ <el-table-column prop="rightBracket" label=")" width="90">
307
+ <template v-slot="scope">
308
+ <el-select
309
+ v-model="scope.row.rightBracket"
310
+ size="small"
311
+ clearable
312
+ @focus="selectRow(scope.row)"
313
+ >
314
+ <el-option label="" value="" />
315
+ <el-option label=")" value=")" />
316
+ <el-option label="))" value="))" />
317
+ <el-option label=")))" value=")))" />
318
+ </el-select>
319
+ </template>
320
+ </el-table-column>
321
+ <el-table-column
322
+ :label="$t('imatrixUIPublicModel.andOr')"
323
+ prop="logicOperator"
324
+ width="110"
325
+ >
326
+ <template v-slot="scope">
327
+ <el-select
328
+ v-model="scope.row.joinSign"
329
+ size="small"
330
+ clearable
331
+ @focus="selectRow(scope.row)"
332
+ >
333
+ <el-option :label="$t('imatrixUIPublicModel.perhaps')" value="or" />
334
+ <el-option :label="$t('imatrixUIPublicModel.also')" value="and" />
335
+ </el-select>
336
+ </template>
337
+ </el-table-column>
338
+ <el-table-column
339
+ :label="$t('imatrixUIPublicModel.whenTheVariableIsEmpty')"
340
+ width="110"
341
+ >
342
+ <template v-slot="scope">
343
+ <el-select
344
+ v-model="scope.row.variableIsNull"
345
+ size="small"
346
+ clearable
347
+ @focus="selectRow(scope.row)"
348
+ >
349
+ <el-option label="Null" value="null" />
350
+ <el-option
351
+ :label="$t('imatrixUIPublicModel.ignore11')"
352
+ value="1=1"
353
+ />
354
+ <el-option
355
+ :label="$t('imatrixUIPublicModel.nonConformity')"
356
+ value="1<>1"
357
+ />
358
+ </el-select>
359
+ </template>
360
+ </el-table-column>
361
+ </el-table>
362
+ </div>
363
+ </template>
364
+
365
+ <script>
366
+ import { $on, $off, $once, $emit } from '../../utils/gogocodeTransfer'
367
+ import searchMethods from './search-methods'
368
+ import searchFormNumber from './search-form-number.vue'
369
+ // import { isOptionFunction, getSearchObject } from './utils'
370
+ import store from './store'
371
+ import SearchConditionInput from './search-condition-input.vue'
372
+ import SearchConditionList from './search-condition-list.vue'
373
+ import { getDynamicDataSourceOptions, isDynamicDataSourceSource } from './utils'
374
+ import * as Vue from 'vue'
375
+ export default {
376
+ components: {
377
+ searchFormNumber,
378
+ SearchConditionInput,
379
+ SearchConditionList,
380
+ },
381
+ name: 'SearchForm',
382
+ props: {
383
+ searchableColumns: {
384
+ type: Array,
385
+ default: null,
386
+ },
387
+ searchFormList: {
388
+ type: Array,
389
+ default: null,
390
+ },
391
+ propMap: {
392
+ type: Object,
393
+ default: null,
394
+ },
395
+ code: {
396
+ type: String,
397
+ default: null,
398
+ },
399
+ isSql: {
400
+ type: Boolean,
401
+ default: false,
402
+ },
403
+ },
404
+ data() {
405
+ const gridParams = store.get(this.code)
406
+ let tableName
407
+ if (gridParams && gridParams.basicInfo && gridParams.basicInfo.tableName) {
408
+ tableName = gridParams.basicInfo.tableName
409
+ }
410
+ let isHasJoinTable
411
+ if (
412
+ gridParams &&
413
+ gridParams.basicInfo &&
414
+ gridParams.basicInfo.hasJoinTable
415
+ ) {
416
+ isHasJoinTable = gridParams.basicInfo.hasJoinTable
417
+ }
418
+ const customComponentNames = new Set()
419
+ return {
420
+ customComponentNames: customComponentNames,
421
+ currentRow: null,
422
+ formFlag: true,
423
+ operationArr: [],
424
+ tableName,
425
+ isJoinTable: isHasJoinTable, // 是否是关联表
426
+ }
427
+ },
428
+ computed: {},
429
+ watch: {
430
+ searchableColumns: {
431
+ deep: true,
432
+ handler(newValue, oldValue) {
433
+ this.searchableColumns = newValue
434
+ this.refreshOperators()
435
+ this.formFlag = false
436
+ this.$nextTick(() => {
437
+ this.formFlag = true
438
+ })
439
+ },
440
+ },
441
+ },
442
+ created() {
443
+ this.refreshOperators()
444
+ if (!this.searchFormList || this.searchFormList.length < 1) {
445
+ this.add()
446
+ }
447
+ },
448
+ methods: {
449
+ ...searchMethods,
450
+ getDynamicDataSourceOptions(column) {
451
+ const gridParams = store.get(this.code)
452
+ return getDynamicDataSourceOptions(
453
+ column,
454
+ this.isSql,
455
+ gridParams.additionalParamMap
456
+ )
457
+ },
458
+ // 值设置是否是动态数据源类型的数据源
459
+ isDynamicDataSourceSource(column) {
460
+ return isDynamicDataSourceSource(column)
461
+ },
462
+ refreshOperators() {
463
+ if (this.searchableColumns && this.searchableColumns.length > 0) {
464
+ for (var i = 0; i < this.searchableColumns.length; i++) {
465
+ const prop = this.searchableColumns[i].prop
466
+ const item = this.propMap[prop]
467
+ this.operationArr[i] = this.getOperators(item)
468
+ }
469
+ }
470
+ },
471
+ handleCurrentChange(val) {
472
+ this.currentRow = val
473
+ },
474
+ tableRowClassName({ row, rowIndex }) {
475
+ // 把每一行的索引放进row
476
+ row.index = rowIndex
477
+ },
478
+ // 选择行
479
+ selectRow(row) {
480
+ this.$refs.table.setCurrentRow(row)
481
+ },
482
+ // 改变选择的属性
483
+ changeFieldName(index) {
484
+ const prop = this.currentRow.prop
485
+ const item = this.propMap[prop]
486
+ this.searchFormList[index].dataType = item.dataType
487
+ this.searchFormList[index].orgProp = item.orgProp
488
+ this.searchFormList[index].componentType = item.componentType
489
+ this.searchFormList[index].componentName = item.componentName
490
+ this.searchFormList[index].queryMatching = item.queryMatching
491
+ this.searchFormList[index].searchControlWidth = item.searchControlWidth
492
+ this.searchFormList[index].fuzzy = item.fuzzy
493
+ this.searchFormList[index].valueSet = item.valueSet
494
+ this.operationArr[index] = this.getOperators(item)
495
+ },
496
+ setValueToModelProp(index, value, componentName) {
497
+ if (index !== null && index !== undefined) {
498
+ this.searchFormList[index]['value'] = value
499
+ }
500
+ },
501
+ componentTypeTypeIsTree(componentType) {
502
+ if (componentType) {
503
+ if (componentType.indexOf('DeptManTree') > 0) {
504
+ // 说明是部门人员树
505
+ return true
506
+ }
507
+ if (componentType.indexOf('DeptTree') > 0) {
508
+ // 说明是部门树
509
+ return true
510
+ }
511
+ if (componentType.indexOf('WgManTree') > 0) {
512
+ // 说明是工作组人员树
513
+ return true
514
+ }
515
+ if (componentType.indexOf('WgManTree') > 0) {
516
+ // 说明是工作组树
517
+ return true
518
+ }
519
+ }
520
+ return false
521
+ },
522
+ getTreeFields(orgTreeSet) {
523
+ if (orgTreeSet && orgTreeSet !== '') {
524
+ return JSON.parse(orgTreeSet)
525
+ }
526
+ },
527
+ getTreeIsMultiTree(componentType) {
528
+ if (
529
+ componentType &&
530
+ componentType.indexOf('single') >= 0 &&
531
+ componentType.indexOf('Tree') > 0
532
+ ) {
533
+ return false
534
+ } else {
535
+ return true
536
+ }
537
+ },
538
+ getTreeType(componentType) {
539
+ if (componentType) {
540
+ if (componentType.indexOf('DeptManTree') > 0) {
541
+ // 说明是部门人员树
542
+ return 'DeptUserTree'
543
+ }
544
+ if (componentType.indexOf('DeptTree') > 0) {
545
+ // 说明是部门树
546
+ return 'DeptTree'
547
+ }
548
+ if (componentType.indexOf('WgTree') > 0) {
549
+ // 说明是工作组人员树
550
+ return 'WgTree'
551
+ }
552
+ if (componentType.indexOf('WgManTree') > 0) {
553
+ // 说明是工作组树
554
+ return 'WgUserTree'
555
+ }
556
+ }
557
+ },
558
+ // 组织结构树文本框值改变事件
559
+ organizationInputEvent(prop, value) {
560
+ if (this.currentRow) {
561
+ this.currentRow['value'] = value
562
+ }
563
+ },
564
+ // 组织结构树文本框值清空事件
565
+ clearOrganizationInputEvent(prop) {
566
+ if (this.currentRow) {
567
+ this.currentRow['value'] = null
568
+ }
569
+ },
570
+ customComponent(prop) {
571
+ const column = this.propMap[prop]
572
+ const gridParams = store.get(this.code)
573
+ if (column.componentName && column.componentName !== '') {
574
+ this.customComponentNames.add(column.componentName)
575
+ return true
576
+ }
577
+ if (
578
+ (!column.componentName || column.componentName === '') &&
579
+ gridParams.options &&
580
+ gridParams.options.search &&
581
+ gridParams.options.search.customSearchElements
582
+ ) {
583
+ // 定义了自定义查询组件
584
+ const propSearchEle =
585
+ gridParams.options.search.customSearchElements[column.prop]
586
+ // console.log('customComponent-customSearchElements-propSearchEle-', column.prop)
587
+ if (propSearchEle) {
588
+ column.componentName = 'custom-' + column.prop
589
+ const component = propSearchEle.call(this, column)
590
+ // console.log('customComponent-customSearchElements-')
591
+ if (component) {
592
+ this.customComponentNames.add(column.componentName)
593
+ window.$vueApp.component(column.componentName, component)
594
+ return true
595
+ }
596
+ }
597
+ }
598
+ return false
599
+ },
600
+ validateForm() {
601
+ return new Promise((resolve, reject) => {
602
+ resolve(true)
603
+ })
604
+ },
605
+ resetForm() {
606
+ if (this.customComponentNames && this.customComponentNames.length > 0) {
607
+ for (const componentName of this.customComponentNames) {
608
+ // 遍历
609
+ this.$refs[componentName][0].resetField()
610
+ }
611
+ }
612
+ // 当是保持页数默认赋值的查询字段resetFields()不会被清空,需要下面的方法遍历设未null
613
+ $emit(this, 'resetForm')
614
+ this.add()
615
+ },
616
+ setNumberValue(value, r, n) {
617
+ if (this.currentRow) {
618
+ this.currentRow['value'] = value
619
+ }
620
+ },
621
+ // 添加
622
+ add() {
623
+ if (!this.searchFormList) {
624
+ this.searchFormList = []
625
+ }
626
+ this.searchFormList.push({
627
+ leftBracket: '',
628
+ prop: '',
629
+ operator: '',
630
+ value: '',
631
+ rightBracket: '',
632
+ joinSign: 'or',
633
+ dataType: '',
634
+ propDbName: '',
635
+ })
636
+ this.operationArr.push([])
637
+ },
638
+ // 删除
639
+ remove(index) {
640
+ if (index !== null && index !== undefined && index !== -1) {
641
+ this.searchFormList.splice(index, 1)
642
+ } else {
643
+ if (this.currentRow === null) {
644
+ this.$alert(this.$t('message.pleaseSelectARow'))
645
+ return
646
+ }
647
+ if (
648
+ this.currentRow &&
649
+ this.currentRow.index &&
650
+ this.currentRow.index !== null &&
651
+ this.currentRow.index !== undefined
652
+ ) {
653
+ this.searchFormList.splice(this.currentRow.index, 1)
654
+ }
655
+ }
656
+ },
657
+ // 实时根据类型改变连接符
658
+ getOperators(item) {
659
+ if (item) {
660
+ if (
661
+ item.dataType === 'INTEGER' ||
662
+ item.dataType === 'LONG' ||
663
+ item.dataType === 'DOUBLE' ||
664
+ item.dataType === 'FLOAT'
665
+ ) {
666
+ return [
667
+ {
668
+ name: 'GT',
669
+ label: this.$t('imatrixUIPublicModel.greaterThan'),
670
+ },
671
+ {
672
+ name: 'LT',
673
+ label: this.$t('imatrixUIPublicModel.lessThan'),
674
+ },
675
+ {
676
+ name: 'EQ',
677
+ label: this.$t('imatrixUIPublicModel.beEqualTo'),
678
+ },
679
+ {
680
+ name: 'LET',
681
+ label: this.$t('imatrixUIPublicModel.notGreaterThan'),
682
+ },
683
+ {
684
+ name: 'GET',
685
+ label: this.$t('imatrixUIPublicModel.notLessThan'),
686
+ },
687
+ {
688
+ name: 'NET',
689
+ label: this.$t('imatrixUIPublicModel.notEqualTo'),
690
+ },
691
+ {
692
+ name: 'IS_NULL',
693
+ label: this.$t('imatrixUIPublicModel.isNull'),
694
+ },
695
+ {
696
+ name: 'IS_NOT_NULL',
697
+ label: this.$t('imatrixUIPublicModel.isNotNull'),
698
+ },
699
+ ]
700
+ } else if (item.dataType === 'DATE' || item.dataType === 'TIME') {
701
+ return [
702
+ {
703
+ name: 'GT',
704
+ label: this.$t('imatrixUIPublicModel.laterThan'),
705
+ },
706
+ {
707
+ name: 'LT',
708
+ label: this.$t('imatrixUIPublicModel.earlierThan'),
709
+ },
710
+ {
711
+ name: 'EQ',
712
+ label: this.$t('imatrixUIPublicModel.beEqualTo'),
713
+ },
714
+ {
715
+ name: 'LET',
716
+ label: this.$t('imatrixUIPublicModel.noLaterThan'),
717
+ },
718
+ {
719
+ name: 'GET',
720
+ label: this.$t('imatrixUIPublicModel.noEarlierThan'),
721
+ },
722
+ {
723
+ name: 'IS_NULL',
724
+ label: this.$t('imatrixUIPublicModel.isNull'),
725
+ },
726
+ {
727
+ name: 'IS_NOT_NULL',
728
+ label: this.$t('imatrixUIPublicModel.isNotNull'),
729
+ },
730
+ ]
731
+ } else if (item.dataType === 'TEXT') {
732
+ return [
733
+ {
734
+ name: 'EQ',
735
+ label: this.$t('imatrixUIPublicModel.beEqualTo'),
736
+ },
737
+ {
738
+ name: 'NET',
739
+ label: this.$t('imatrixUIPublicModel.notEqualTo'),
740
+ },
741
+ {
742
+ name: 'CONTAIN',
743
+ label: this.$t('imatrixUIPublicModel.contain'),
744
+ },
745
+ {
746
+ name: 'NOT_CONTAIN',
747
+ label: this.$t('imatrixUIPublicModel.notIncluded'),
748
+ },
749
+ {
750
+ name: 'IS_NULL',
751
+ label: this.$t('imatrixUIPublicModel.isNull'),
752
+ },
753
+ {
754
+ name: 'IS_NOT_NULL',
755
+ label: this.$t('imatrixUIPublicModel.isNotNull'),
756
+ },
757
+ ]
758
+ } else {
759
+ return [
760
+ {
761
+ name: 'EQ',
762
+ label: this.$t('imatrixUIPublicModel.beEqualTo'),
763
+ },
764
+ {
765
+ name: 'NET',
766
+ label: this.$t('imatrixUIPublicModel.notEqualTo'),
767
+ },
768
+ {
769
+ name: 'IS_NULL',
770
+ label: this.$t('imatrixUIPublicModel.isNull'),
771
+ },
772
+ {
773
+ name: 'IS_NOT_NULL',
774
+ label: this.$t('imatrixUIPublicModel.isNotNull'),
775
+ },
776
+ ]
777
+ }
778
+ } else {
779
+ return [
780
+ {
781
+ name: 'EQ',
782
+ label: this.$t('imatrixUIPublicModel.beEqualTo'),
783
+ },
784
+ {
785
+ name: 'NET',
786
+ label: this.$t('imatrixUIPublicModel.notEqualTo'),
787
+ },
788
+ {
789
+ name: 'IS_NULL',
790
+ label: this.$t('imatrixUIPublicModel.isNull'),
791
+ },
792
+ {
793
+ name: 'IS_NOT_NULL',
794
+ label: this.$t('imatrixUIPublicModel.isNotNull'),
795
+ },
796
+ ]
797
+ }
798
+ },
799
+ },
800
+ emits: ['resetForm'],
801
+ }
802
+ </script>
803
+
804
+ <style scoped>
805
+ .grid-search-form {
806
+ overflow: auto;
807
+ }
808
+ .grid-search-form :deep(.el-form-item) {
809
+ margin-bottom: 0px;
810
+ }
811
+ .grid-search-form :deep(.search-btn) {
812
+ margin-bottom: 5px;
813
+ text-align: center;
814
+ }
815
+ .grid-search-form :deep(.el-select),
816
+ .grid-search-form :deep(.customComponent) {
817
+ width: 100%;
818
+ }
819
+ </style>