imatrix-ui 2.8.21-dw → 2.8.21

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 (181) hide show
  1. package/lib/super-ui.css +1 -1
  2. package/lib/super-ui.umd.min.js +5 -35
  3. package/package.json +4 -2
  4. package/packages/breadcrumb/index.js +6 -0
  5. package/packages/breadcrumb/src/breadcrumb.vue +71 -0
  6. package/packages/department-tree/index.js +6 -0
  7. package/packages/department-tree/src/department-tree.vue +108 -0
  8. package/packages/department-tree-inline/index.js +6 -0
  9. package/packages/department-tree-inline/src/department-multi-tree-inline.vue +402 -0
  10. package/packages/department-tree-inline/src/department-single-tree-inline.vue +284 -0
  11. package/packages/department-tree-inline/src/department-tree-inline.vue +86 -0
  12. package/packages/department-tree-inline/src/department-tree-service.js +245 -0
  13. package/packages/department-tree-inline/src/search-result.vue +176 -0
  14. package/packages/department-user-tree/index.js +6 -0
  15. package/packages/department-user-tree/src/department-user-multiple-tree.vue +116 -0
  16. package/packages/department-user-tree/src/department-user-single-tree.vue +76 -0
  17. package/packages/department-user-tree/src/department-user-tree.vue +101 -0
  18. package/packages/department-user-tree-inline/index.js +6 -0
  19. package/packages/department-user-tree-inline/src/department-user-multiple-tree-inline.vue +626 -0
  20. package/packages/department-user-tree-inline/src/department-user-single-tree-inline.vue +269 -0
  21. package/packages/department-user-tree-inline/src/department-user-tree-inline.vue +79 -0
  22. package/packages/department-user-tree-inline/src/department-user-tree-multi-service.js +230 -0
  23. package/packages/department-user-tree-inline/src/department-user-tree-single-service.js +122 -0
  24. package/packages/department-user-tree-inline/src/search-result.vue +197 -0
  25. package/packages/directives/prevent-reclick.js +19 -0
  26. package/packages/dynamic-source-select/index.js +6 -0
  27. package/packages/dynamic-source-select/src/dynamic-source-select-service.js +70 -0
  28. package/packages/dynamic-source-select/src/dynamic-source-select.vue +440 -0
  29. package/packages/dynamic-source-select/src/events.js +55 -0
  30. package/packages/fs-preview/index.js +6 -0
  31. package/packages/fs-preview/src/fs-preview.vue +226 -0
  32. package/packages/fs-upload/index.js +6 -0
  33. package/packages/fs-upload/src/fs-upload-multi.vue +420 -0
  34. package/packages/fs-upload/src/fs-upload-single.vue +312 -0
  35. package/packages/fs-upload/src/fs-upload.vue +189 -0
  36. package/packages/fs-upload/src/see-big-picture.vue +55 -0
  37. package/packages/fs-upload-list/index.js +6 -0
  38. package/packages/fs-upload-list/src/fs-upload-list.vue +287 -0
  39. package/packages/hamburger/index.js +6 -0
  40. package/packages/hamburger/src/hamburger.vue +38 -0
  41. package/packages/index.js +121 -0
  42. package/packages/multipart-upload/index.js +6 -0
  43. package/packages/multipart-upload/src/index.vue +73 -0
  44. package/packages/multipart-upload/src/multipart-upload-form.vue +297 -0
  45. package/packages/multipart-upload/src/multipart-upload-list.vue +378 -0
  46. package/packages/organization-input/index.js +6 -0
  47. package/packages/organization-input/src/organization-input.vue +542 -0
  48. package/packages/plugins/export-data-new.js +453 -0
  49. package/packages/plugins/export-data.js +361 -0
  50. package/packages/plugins/index.js +15 -0
  51. package/packages/plugins/public-method.js +43 -0
  52. package/packages/remove-department/index.js +6 -0
  53. package/packages/remove-department/src/remove-department.vue +172 -0
  54. package/packages/remove-department/src/remove-dept-service.js +20 -0
  55. package/packages/remove-user/index.js +6 -0
  56. package/packages/remove-user/src/remove-user-service.js +20 -0
  57. package/packages/remove-user/src/remove-user.vue +195 -0
  58. package/packages/remove-workgroup/index.js +6 -0
  59. package/packages/remove-workgroup/src/remove-workgroup-service.js +20 -0
  60. package/packages/remove-workgroup/src/remove-workgroup.vue +159 -0
  61. package/packages/rich-editor/index.js +7 -0
  62. package/packages/rich-editor/index.vue +278 -0
  63. package/packages/rich-editor/langs/zh-Hans.js +1 -0
  64. package/packages/rich-editor/viewer.vue +103 -0
  65. package/packages/scan-code-input/index.js +6 -0
  66. package/packages/scan-code-input/src/events.js +33 -0
  67. package/packages/scan-code-input/src/scan-code-input-colse.vue +131 -0
  68. package/packages/scan-code-input/src/scan-code-input.vue +116 -0
  69. package/packages/secret-info/index.js +7 -0
  70. package/packages/secret-info/index.vue +90 -0
  71. package/packages/super-grid/index.js +7 -0
  72. package/packages/super-grid/src/apis.js +763 -0
  73. package/packages/super-grid/src/columns-config.vue +335 -0
  74. package/packages/super-grid/src/custom-formatter.js +250 -0
  75. package/packages/super-grid/src/dynamic-input.vue +1279 -0
  76. package/packages/super-grid/src/eventBus.js +2 -0
  77. package/packages/super-grid/src/events.js +55 -0
  78. package/packages/super-grid/src/formValidatorUtil.js +226 -0
  79. package/packages/super-grid/src/formatter.js +181 -0
  80. package/packages/super-grid/src/group-column.vue +100 -0
  81. package/packages/super-grid/src/header-context-menu.vue +87 -0
  82. package/packages/super-grid/src/index-column.vue +51 -0
  83. package/packages/super-grid/src/normal-column.vue +769 -0
  84. package/packages/super-grid/src/public-methods.js +31 -0
  85. package/packages/super-grid/src/row-operation.vue +161 -0
  86. package/packages/super-grid/src/search-button.vue +66 -0
  87. package/packages/super-grid/src/search-condition-input.vue +61 -0
  88. package/packages/super-grid/src/search-condition-list.vue +59 -0
  89. package/packages/super-grid/src/search-form-advancedQuery.vue +653 -0
  90. package/packages/super-grid/src/search-form-dialog.vue +79 -0
  91. package/packages/super-grid/src/search-form-item.vue +386 -0
  92. package/packages/super-grid/src/search-form-number.vue +38 -0
  93. package/packages/super-grid/src/search-form-open.vue +162 -0
  94. package/packages/super-grid/src/search-form-ordinarySearch.vue +188 -0
  95. package/packages/super-grid/src/search-form.vue +634 -0
  96. package/packages/super-grid/src/search-methods.js +387 -0
  97. package/packages/super-grid/src/selection-column.vue +43 -0
  98. package/packages/super-grid/src/store.js +3 -0
  99. package/packages/super-grid/src/super-grid-service.js +561 -0
  100. package/packages/super-grid/src/super-grid.vue +2793 -0
  101. package/packages/super-grid/src/utils.js +763 -0
  102. package/packages/super-grid/src/view-image-dialog.vue +130 -0
  103. package/packages/super-nine-grid/index.js +7 -0
  104. package/packages/super-nine-grid/src/apis.js +103 -0
  105. package/packages/super-nine-grid/src/custom-formatter.js +66 -0
  106. package/packages/super-nine-grid/src/formatter.js +132 -0
  107. package/packages/super-nine-grid/src/search-form-number.vue +38 -0
  108. package/packages/super-nine-grid/src/search-form.vue +430 -0
  109. package/packages/super-nine-grid/src/search-methods.js +134 -0
  110. package/packages/super-nine-grid/src/store.js +3 -0
  111. package/packages/super-nine-grid/src/super-grid-service.js +91 -0
  112. package/packages/super-nine-grid/src/super-nine-grid.vue +872 -0
  113. package/packages/super-nine-grid/src/utils.js +261 -0
  114. package/packages/svg-icon/index.js +6 -0
  115. package/packages/svg-icon/src/svg-icon.vue +43 -0
  116. package/packages/utils/utils.js +152 -0
  117. package/packages/utils/value-set.js +86 -0
  118. package/packages/valid-code/index.js +7 -0
  119. package/packages/valid-code/src/valid-code.vue +95 -0
  120. package/packages/workflow-button/index.js +6 -0
  121. package/packages/workflow-button/src/workflow-button.vue +325 -0
  122. package/packages/workflow-history-list/index.js +6 -0
  123. package/packages/workflow-history-list/src/api.js +7 -0
  124. package/packages/workflow-history-list/src/workflow-history-list.vue +185 -0
  125. package/packages/workgroup-tree/index.js +6 -0
  126. package/packages/workgroup-tree/src/workgroup-tree.vue +76 -0
  127. package/packages/workgroup-tree-inline/index.js +6 -0
  128. package/packages/workgroup-tree-inline/src/workgroup-tree-inline.vue +317 -0
  129. package/packages/workgroup-tree-inline/src/workgroup-tree-service.js +43 -0
  130. package/packages/workgroup-user-tree/index.js +6 -0
  131. package/packages/workgroup-user-tree/src/workgroup-user-tree.vue +100 -0
  132. package/packages/workgroup-user-tree-inline/index.js +6 -0
  133. package/packages/workgroup-user-tree-inline/src/workgroup-tree-inline-service.js +163 -0
  134. package/packages/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue +436 -0
  135. package/packages/year-range-picker/index.js +6 -0
  136. package/packages/year-range-picker/src/year-range-picker.vue +51 -0
  137. package/src/i18n/i18n.js +1 -1
  138. package/src/i18n/langs/cn.js +4 -2
  139. package/src/i18n/langs/en.js +4 -2
  140. package/src/index.js +93 -0
  141. package/src/permission.js +7 -3
  142. package/src/plugins.js +3 -3
  143. package/src/router/index.js +24 -0
  144. package/src/store/getters.js +2 -1
  145. package/src/store/modules/app.js +10 -1
  146. package/src/styles/display-layout.scss +34 -0
  147. package/src/styles/index.scss +32 -4
  148. package/src/styles/theme/dark-blue/button.scss +9 -0
  149. package/src/styles/theme/dark-blue/card.scss +64 -0
  150. package/src/styles/theme/dark-blue/checkbox.scss +10 -0
  151. package/src/styles/theme/dark-blue/dark-blue-var.scss +8 -0
  152. package/src/styles/theme/dark-blue/dialog.scss +21 -0
  153. package/src/styles/theme/dark-blue/element-variables.scss +7 -0
  154. package/src/styles/theme/dark-blue/font.scss +71 -0
  155. package/src/styles/theme/dark-blue/form.scss +51 -0
  156. package/src/styles/theme/dark-blue/index.scss +247 -0
  157. package/src/styles/theme/dark-blue/input.scss +15 -0
  158. package/src/styles/theme/dark-blue/pagination.scss +14 -0
  159. package/src/styles/theme/dark-blue/scrollbar-style.scss +32 -0
  160. package/src/styles/theme/dark-blue/sidebar.scss +296 -0
  161. package/src/styles/theme/dark-blue/tab.scss +83 -0
  162. package/src/styles/theme/dark-blue/table.scss +60 -0
  163. package/src/styles/theme/dark-blue/tree.scss +31 -0
  164. package/src/styles/theme/dark-blue/var.scss +1028 -0
  165. package/src/styles/theme/gray/form-style.scss +2 -2
  166. package/src/styles/theme/gray/input-style.scss +8 -0
  167. package/src/utils/auth-api.js +115 -0
  168. package/src/utils/auth.js +34 -42
  169. package/src/utils/calculator/calculator-factory.js +2 -2
  170. package/src/utils/common-util.js +34 -0
  171. package/src/utils/jump-page-utils.js +29 -5
  172. package/src/utils/menu.js +19 -0
  173. package/src/utils/permission.js +4 -0
  174. package/src/utils/request.js +18 -2
  175. package/src/utils/util.js +7 -3
  176. package/src/views/dsc-component/Sidebar/Item.vue +4 -4
  177. package/src/views/dsc-component/Sidebar/Link.vue +11 -2
  178. package/src/views/dsc-component/Sidebar/SidebarItem.vue +36 -20
  179. package/src/views/dsc-component/Sidebar/index.vue +24 -12
  180. package/src/views/dsc-component/tabs/tab-content.vue +16 -1
  181. package/src/views/login/index.vue +1 -1
@@ -0,0 +1,634 @@
1
+ <template>
2
+ <div>
3
+ <search-condition-list
4
+ v-if="searchConditions.length > 0"
5
+ ref="searchConditionList"
6
+ :search-type="searchType"
7
+ :search-conditions="searchConditions"
8
+ @remove-condition="removeCondition"
9
+ @select-condition="selectCondition"
10
+ />
11
+ <search-form-ordinarySearch
12
+ v-if="searchType === 'normal'"
13
+ ref="searchFormOrdinarySearch"
14
+ :searchable-columns="searchableColumns"
15
+ :search-form="searchForm"
16
+ :field-num="fieldNum"
17
+ :label-width="labelWidth"
18
+ :query="query"
19
+ :code="code"
20
+ :row-num="rowNum"
21
+ :span-num="spanNum"
22
+ :rules="rules"
23
+ :is-sql="isSql"
24
+ @submit-form="submitForm('searchForm')"
25
+ @reset-form="resetForm('searchForm')"
26
+ @save-condition="saveCondition()"
27
+ @open-fold="openFold"
28
+ />
29
+ <search-form-advancedQuery
30
+ v-if="searchType === 'advanced'"
31
+ ref="searchFormAdvancedQuery"
32
+ style="padding-bottom:10px"
33
+ :code="code"
34
+ :searchable-columns="advancedQueryColumns"
35
+ :search-form-list="searchFormList"
36
+ :prop-map="propMap"
37
+ :is-sql="isSql"
38
+ @resetForm="resetSearchFormList"
39
+ />
40
+ <div v-if="searchType === 'advanced'" style="padding-top:10px;padding-bottom:10px;text-align: center">
41
+ <el-button :loading="loading" type="primary" size="mini" @click="submitForm('searchForm')">
42
+ {{ $t('imatrixUIPublicModel.sure') }}
43
+ </el-button>
44
+ <el-button :loading="loading" size="mini" @click="resetForm('searchForm')">
45
+ {{ $t('imatrixUIPublicModel.reset') }}
46
+ </el-button>
47
+ <el-button size="mini" @click="saveCondition">
48
+ {{ $t('superGrid.saveCondition') }}
49
+ </el-button>
50
+ <span v-if="advancedQuery !== null && advancedQuery!== undefined && advancedQuery === true && normalQuery !== null && normalQuery!== undefined && normalQuery === true" style="margin-left:10px">
51
+ <el-button v-if="searchType === 'advanced'" size="mini" @click="searchType = 'normal'">
52
+ {{ $t('imatrixUIPublicModel.switchToNormalQuery') }}
53
+ </el-button>
54
+ <el-button v-if="searchType === 'normal'" size="mini" @click="searchType = 'advanced'">
55
+ {{ $t('imatrixUIPublicModel.switchToAdvancedQuery') }}
56
+ </el-button>
57
+ </span>
58
+ </div>
59
+ <search-condition-input v-if="isShowSearchCondition" @close="saveConditionValue" />
60
+ </div>
61
+ </template>
62
+ <style scoped>
63
+ .grid-search-form{
64
+ overflow: auto;
65
+ }
66
+ .grid-search-form >>> .el-form-item{
67
+ margin-bottom: 0px;
68
+ }
69
+
70
+ .grid-search-form >>> .search-btn{
71
+ margin-bottom: 5px;
72
+ text-align: center;
73
+ }
74
+ .grid-search-form >>> .el-select,.grid-search-form >>> .customComponent{
75
+ width: 100%;
76
+ }
77
+ </style>
78
+ <script>
79
+ import searchMethods from './search-methods'
80
+ // import searchFormNumber from './search-form-number'
81
+ import searchFormOrdinarySearch from './search-form-ordinarySearch'
82
+ // import searchFormAdvancedQuery from './search-form-advancedQuery'
83
+ import store from './store'
84
+ // import { isOptionFunction, getSearchObject } from './utils'
85
+ import { addDynamicProp, addDynamicPropDateSection } from './utils'
86
+ import Vue from 'vue'
87
+ import SearchConditionInput from './search-condition-input'
88
+ import SearchConditionList from './search-condition-list'
89
+ export default {
90
+ name: 'SearchForm',
91
+ components: {
92
+ // searchFormNumber,
93
+ SearchConditionInput,
94
+ SearchConditionList,
95
+ searchFormOrdinarySearch
96
+ // searchFormAdvancedQuery
97
+ },
98
+ props: {
99
+ columns: {
100
+ type: Array,
101
+ default: null
102
+ },
103
+ code: {
104
+ type: String,
105
+ default: null
106
+ },
107
+ url: {
108
+ type: String,
109
+ default: null
110
+ },
111
+ pagination: {
112
+ type: Object,
113
+ default: null
114
+ },
115
+ query: {
116
+ type: Object,
117
+ default: null
118
+ },
119
+ searchParam: {
120
+ type: Object,
121
+ default: null
122
+ },
123
+ initSearchProps: {
124
+ type: Array,
125
+ default: null
126
+ },
127
+ isSql: {
128
+ type: Boolean,
129
+ default: false
130
+ },
131
+ searchFormInfo: {
132
+ type: Object,
133
+ default: () => {
134
+ return {}
135
+ }
136
+ }
137
+
138
+ },
139
+ data() {
140
+ const customComponentNames = new Set()
141
+ const gridParams = store.get(this.code)
142
+ const propMap = {}
143
+ let searchForm = {}
144
+ if (this.searchParam !== null) {
145
+ searchForm = JSON.parse(JSON.stringify(this.searchParam))
146
+ }
147
+ const searchColumns = this.getSearchableColumns(null, null, propMap)
148
+ if (this.initSearchProps === undefined || this.initSearchProps === null) {
149
+ this.initSearchProps = []
150
+ }
151
+ console.log('searchForm=', searchColumns)
152
+ searchColumns.forEach(column => {
153
+ // propMap[column.prop] = column
154
+ if (this.initSearchProps.indexOf(column.prop) < 0) {
155
+ // 表示没有默认初始查询字段
156
+ if (column.prop && column.prop.indexOf('.') > 0) {
157
+ if (column.componentType === 'dateSection') {
158
+ addDynamicPropDateSection(searchForm, column.prop)
159
+ } else {
160
+ // 动态给searchForm添加属性,包括多级嵌套属性,属性的初始值都为 null
161
+ addDynamicProp(searchForm, column.prop)
162
+ }
163
+ } else {
164
+ if (column.componentType === 'dateSection') {
165
+ searchForm[column.prop] = [new Date(), new Date()]
166
+ } else if (column.componentType === 'yearRange') {
167
+ searchForm[column.prop] = ['', '']
168
+ } else {
169
+ searchForm[column.prop] = null
170
+ }
171
+ }
172
+ }
173
+ })
174
+ const spanNum = this.getSpanNum()
175
+ const fieldNum = this.getFieldNumPerRow()
176
+ const rowNum = Math.ceil(searchColumns.length / fieldNum)
177
+ const advancedQuery = this.query.advancedQuery
178
+ const normalQuery = this.query.normalQuery
179
+ // console.log('searchColumns.length=' + searchColumns.length + ',fieldNum=' + fieldNum + ',rowNum=' + rowNum)
180
+ // // -2是把
181
+ // const dateSpanNum = (spanNum - 2) / 2
182
+
183
+ return {
184
+ searchForm,
185
+ rules: {
186
+
187
+ },
188
+ searchParams: [],
189
+ labelWidth: gridParams.options.search && gridParams.options.search.labelWidth ? gridParams.options.search.labelWidth : '80px',
190
+ customComponentNames: customComponentNames,
191
+ componentName: '',
192
+ spanNum: spanNum,
193
+ fieldNum: fieldNum, // 每行放的字段个数
194
+ rowNum: rowNum, // 一共有几行
195
+ loading: false, // 是否正在查询,默认时否
196
+ isShowSearchCondition: false,
197
+ searchConditions: [],
198
+ propMap,
199
+ advancedQuery,
200
+ normalQuery,
201
+ searchFormList: [],
202
+ searchType: null
203
+ }
204
+ },
205
+ computed: {
206
+ searchableColumns() {
207
+ return this.getSearchableColumns()
208
+ },
209
+ advancedQueryColumns() {
210
+ return this.getAdvancedQueryColumns()
211
+ }
212
+ },
213
+ watch: {
214
+ searchForm: {
215
+ deep: true,
216
+ handler(val) {
217
+ this.$set(this.searchFormInfo, 'data', val)
218
+ }
219
+ }
220
+ },
221
+ created() {
222
+ console.log('加载查询页面', this.searchType)
223
+ this.listSearchConditions()
224
+ if (this.normalQuery) {
225
+ this.searchType = 'normal'
226
+ } else if (this.advancedQuery) {
227
+ this.searchType = 'advanced'
228
+ }
229
+ },
230
+ methods: {
231
+ ...searchMethods,
232
+ // 每行放的字段个数
233
+ getFieldNumPerRow() {
234
+ const gridParams = store.get(this.code)
235
+ return gridParams.options.search && gridParams.options.search.fieldNum ? gridParams.options.search.fieldNum : 3
236
+ },
237
+ // 根据每行显示的字段个数,确定栅栏个数,默认是4个字段。最多就只能放6个字段
238
+ getSpanNum() {
239
+ const fieldNum = this.getFieldNumPerRow()
240
+ if (fieldNum === 1) {
241
+ return 22
242
+ } else if (fieldNum === 2) {
243
+ return 10
244
+ } else if (fieldNum === 3) {
245
+ return 8
246
+ } else if (fieldNum === 4) {
247
+ return 6
248
+ } else {
249
+ // 6个字段
250
+ return 4
251
+ }
252
+ },
253
+ setValueToModelProp(prop, value, componentName, index) {
254
+ if (prop && prop.indexOf('.') > 0) {
255
+ const parentOjbect = this.getParentObject(prop)
256
+ // 嵌套属性中的最后一个属性是属于这个中间父对象的,所有要通过中间父对象来赋值
257
+ if (index != null && index !== undefined) {
258
+ // parentOjbect[prop.substring(prop.lastIndexOf('.') + 1)][index] = value
259
+ this.$set(parentOjbect[prop.substring(prop.lastIndexOf('.') + 1)], index, value)
260
+ } else {
261
+ parentOjbect[prop.substring(prop.lastIndexOf('.') + 1)] = value
262
+ }
263
+ } else {
264
+ if (index != null && index !== undefined) {
265
+ this.$set(this.searchForm[prop], index, value)
266
+ } else {
267
+ this.searchForm[prop] = value
268
+ }
269
+ }
270
+ },
271
+ getAdvancedQueryColumns(columns, searchColumns, propMap) {
272
+ if (!this.customComponentNames) {
273
+ this.customComponentNames = new Set()
274
+ }
275
+ if (!searchColumns) {
276
+ searchColumns = []
277
+ }
278
+ if (!columns) {
279
+ columns = this.columns
280
+ }
281
+ for (let i = 0; i < columns.length; i++) {
282
+ const column = columns[i]
283
+ if (propMap) {
284
+ propMap[column.prop] = column
285
+ }
286
+ if (column.prop === '$index' || column.prop === '$selection' || column.dynamic) {
287
+ // 序号和复选框列、动态列 不属于该组件的查询字段
288
+ continue
289
+ }
290
+ if (column.groupHeader) {
291
+ // 组合表头中子表头的字段查询
292
+ this.getSearchableColumns(column.children, searchColumns, propMap)
293
+ } else {
294
+ if (column.queryType === 'advanced' && !column.custom && column.prop !== '') {
295
+ // 表示是普通查询,且不是占位符列,是查询字段
296
+ if (typeof (column.componentType) === 'undefined' || column.componentType === '') {
297
+ column.componentType = 'input'
298
+ }
299
+ if (column.querySetting && column.querySetting !== '') {
300
+ const querySetting = JSON.parse(column.querySetting)
301
+ if (querySetting.width) {
302
+ column.searchControlWidth = 'width:' + querySetting.width + 'px'
303
+ }
304
+ if (querySetting.labelWidth) {
305
+ column.searchLabelWidth = querySetting.labelWidth + 'px'
306
+ }
307
+ if (querySetting.label) {
308
+ column.searchLabel = querySetting.label
309
+ }
310
+ }
311
+ // 行编辑时自定义编辑组件
312
+ if (column.componentType && column.componentType.indexOf('custom:') >= 0) {
313
+ column.componentName = column.componentType.substring(column.componentType.indexOf(':') + 1)
314
+ this.customComponentNames.add(column.componentName)
315
+ } else {
316
+ column.componentName = ''
317
+ }
318
+ // this.$set(this.propMap, column.prop, column)
319
+ // this.propMap[column.prop] = column
320
+ searchColumns.push(column)
321
+ }
322
+ }
323
+ }
324
+ return searchColumns
325
+ },
326
+ getSearchableColumns(columns, searchColumns, propMap) {
327
+ if (!this.customComponentNames) {
328
+ this.customComponentNames = new Set()
329
+ }
330
+ if (!searchColumns) {
331
+ searchColumns = []
332
+ }
333
+ if (!columns) {
334
+ columns = this.columns
335
+ }
336
+ for (let i = 0; i < columns.length; i++) {
337
+ const column = columns[i]
338
+ if (propMap) {
339
+ propMap[column.prop] = column
340
+ }
341
+ if (column.prop === '$index' || column.prop === '$selection' || column.dynamic) {
342
+ // 序号和复选框列、动态列 不属于该组件的查询字段
343
+ continue
344
+ }
345
+ if (column.groupHeader) {
346
+ // 组合表头中子表头的字段查询
347
+ this.getSearchableColumns(column.children, searchColumns, propMap)
348
+ } else {
349
+ if (column.queryType === 'normal' && !column.custom && column.prop !== '') {
350
+ // 表示是普通查询,且不是占位符列,是查询字段
351
+ if (typeof (column.componentType) === 'undefined' || column.componentType === '') {
352
+ column.componentType = 'input'
353
+ }
354
+ if (column.querySetting && column.querySetting !== '') {
355
+ const querySetting = JSON.parse(column.querySetting)
356
+ if (querySetting.width) {
357
+ column.searchControlWidth = 'width:' + querySetting.width + 'px'
358
+ }
359
+ if (querySetting.labelWidth) {
360
+ column.searchLabelWidth = querySetting.labelWidth + 'px'
361
+ }
362
+ if (querySetting.label) {
363
+ column.searchLabel = querySetting.label
364
+ }
365
+ }
366
+ // 行编辑时自定义编辑组件
367
+ if (column.componentType && column.componentType.indexOf('custom:') >= 0) {
368
+ column.componentName = column.componentType.substring(column.componentType.indexOf(':') + 1)
369
+ this.customComponentNames.add(column.componentName)
370
+ } else {
371
+ column.componentName = ''
372
+ }
373
+ // this.$set(this.propMap, column.prop, column)
374
+ // this.propMap[column.prop] = column
375
+ searchColumns.push(column)
376
+ }
377
+ }
378
+ }
379
+ return searchColumns
380
+ },
381
+ customComponent(column) {
382
+ const gridParams = store.get(this.code)
383
+ if (column.componentName && column.componentName !== '') {
384
+ this.customComponentNames.add(column.componentName)
385
+ return true
386
+ }
387
+ if ((!column.componentName || column.componentName === '') &&
388
+ gridParams.options &&
389
+ gridParams.options.search &&
390
+ gridParams.options.search.customSearchElements) {
391
+ // 定义了自定义查询组件
392
+ const propSearchEle = gridParams.options.search.customSearchElements[column.prop]
393
+ // console.log('customComponent-customSearchElements-propSearchEle-', column.prop)
394
+ if (propSearchEle) {
395
+ column.componentName = 'custom-' + column.prop
396
+ const component = propSearchEle.call(this, column)
397
+ // console.log('customComponent-customSearchElements-')
398
+ if (component) {
399
+ this.customComponentNames.add(column.componentName)
400
+ Vue.component(column.componentName, component)
401
+ return true
402
+ }
403
+ }
404
+ }
405
+ return false
406
+ },
407
+ submitForm() {
408
+ if (this.searchType === 'normal') {
409
+ this.$refs.searchFormOrdinarySearch.validateForm().then(valid => {
410
+ if (valid) {
411
+ // this.loading = true
412
+ this.searchParams = this.packageSearchParam()
413
+ this.$emit('search', this.searchParams)
414
+ } else {
415
+ return false
416
+ }
417
+ })
418
+ } else if (this.searchType === 'advanced') {
419
+ this.$refs.searchFormAdvancedQuery.validateForm().then(valid => {
420
+ if (valid) {
421
+ this.loading = true
422
+ this.searchParams = this.packageSearchParam()
423
+ this.$emit('search', this.searchParams)
424
+ } else {
425
+ return false
426
+ }
427
+ })
428
+ }
429
+ },
430
+ resetForm() {
431
+ if (this.$refs.searchConditionList) {
432
+ this.$refs.searchConditionList.editConditionId = null
433
+ }
434
+ if (this.searchType === 'normal') {
435
+ this.$refs.searchFormOrdinarySearch.resetForm()
436
+ } else if (this.searchType === 'advanced') {
437
+ this.$refs.searchFormAdvancedQuery.resetForm()
438
+ }
439
+ this.$emit('reset')
440
+ },
441
+ setNumberValue(value, r, n) {
442
+ let itemValue = this.getFormItemValue(this.searchableColumns[this.fieldNum * (r - 1) + (n - 1)].prop)
443
+ itemValue = value
444
+ this.setValueToModelProp(this.searchableColumns[this.fieldNum * (r - 1) + (n - 1)].prop, itemValue)
445
+ },
446
+ listSearchConditions() {
447
+ return new Promise((resolve, reject) => {
448
+ this.listSearchCondition(this.code).then((conditions) => {
449
+ this.searchConditions = conditions
450
+ resolve(conditions)
451
+ }).catch(error => {
452
+ reject(error)
453
+ })
454
+ })
455
+ },
456
+ saveCondition() {
457
+ const searchParams = this.packageSearchParam()
458
+ if (!searchParams || searchParams.length === 0) {
459
+ this.$message({
460
+ type: 'warning',
461
+ message: this.$t('imatrixUIMessage.pleaseInputSearchCondition'),
462
+ showClose: true
463
+ })
464
+ return
465
+ }
466
+ this.isShowSearchCondition = true
467
+ },
468
+ saveConditionValue(conditionName) {
469
+ if (conditionName) {
470
+ let searchParams
471
+ if (this.searchType === 'normal' || this.searchType === '' || this.searchType === null || this.searchType === undefined) {
472
+ searchParams = this.packageSearchParam()
473
+ } else {
474
+ searchParams = this.searchFormList
475
+ }
476
+ const condition = {
477
+ listCode: this.code,
478
+ queryType: this.searchType === 'normal' || this.searchType === '' || this.searchType === null || this.searchType === undefined ? 'FIXED' : 'CUSTOM',
479
+ name: conditionName,
480
+ queryCondition: JSON.stringify(searchParams)
481
+ }
482
+ this.saveSearchCondition(condition).then((condition) => {
483
+ this.$message({
484
+ type: 'success',
485
+ message: this.$t('imatrixUIMessage.saveSuccessfully'),
486
+ showClose: true
487
+ })
488
+ this.isShowSearchCondition = false
489
+ this.listSearchConditions().then(() => {
490
+ if (this.$refs.searchConditionList) {
491
+ // 选中刚刚保存的条件
492
+ this.$refs.searchConditionList.editConditionId = condition.id + ''
493
+ }
494
+ // 查询条件对应的数据
495
+ this.selectCondition(condition.id)
496
+ })
497
+ })
498
+ }
499
+ this.isShowSearchCondition = false
500
+ },
501
+ removeCondition(conditionId) {
502
+ if (conditionId) {
503
+ this.$confirm(this.$t('imatrixUIMessage.whetherToConfirmDeletion'), this.$t('imatrixUIMessage.tips'), {
504
+ confirmButtonText: this.$t('imatrixUIPublicModel.sure'),
505
+ cancelButtonText: this.$t('imatrixUIPublicModel.cancel'),
506
+ type: 'warning'
507
+ }).then(() => {
508
+ this.removeSearchCondition(conditionId).then(() => {
509
+ this.$message({
510
+ type: 'success',
511
+ message: this.$t('superGrid.deleteSuccessful'),
512
+ showClose: true
513
+ })
514
+ this.listSearchConditions()
515
+ })
516
+ })
517
+ }
518
+ },
519
+ selectCondition(conditionId) {
520
+ if (conditionId) {
521
+ this.getSearchCondition(conditionId).then((searchCondition) => {
522
+ if (searchCondition) {
523
+ const queryCondition = searchCondition.queryCondition
524
+ if (queryCondition) {
525
+ if (this.searchType === 'normal' || this.searchType === '' || this.searchType === null || this.searchType === undefined) {
526
+ const searchParams = JSON.parse(queryCondition)
527
+ const searchForm = this.packageSearchForm(searchParams)
528
+ if (searchForm) {
529
+ this.searchForm = searchForm
530
+ }
531
+ // 查询数据
532
+ this.loading = true
533
+ this.$emit('search', searchParams)
534
+ } else {
535
+ this.searchFormList = JSON.parse(queryCondition)
536
+ // 查询数据
537
+ this.loading = true
538
+ this.$emit('search', this.packageSearchParam())
539
+ }
540
+ }
541
+ }
542
+ })
543
+ }
544
+ },
545
+ // 封装searchForm
546
+ packageSearchForm(searchFormArr) {
547
+ if (searchFormArr && searchFormArr.length > 0) {
548
+ const searchForm = {}
549
+ const initSearchProps = []
550
+ searchFormArr.forEach(item => {
551
+ // 获得的是"isDeleted"
552
+ let prop = item.propName
553
+ // 获得的是“deleted”
554
+ const columnProp = item.columnProp
555
+ const dataType = item.dataType
556
+ if (dataType && dataType === 'BOOLEAN' && columnProp) {
557
+ prop = columnProp
558
+ }
559
+ if (initSearchProps.indexOf(prop) === -1) {
560
+ initSearchProps.push(prop)
561
+ }
562
+ const propValue = item.propValue
563
+ if (prop && prop.indexOf('.') > 0) {
564
+ // 动态给searchForm添加属性,包括多级嵌套属性,属性的初始值都为 null
565
+ addDynamicProp(searchForm, prop, propValue)
566
+ } else {
567
+ let isRangeQueryValue = false
568
+ if (dataType && (dataType === 'DATE' || dataType === 'TIME')) {
569
+ if (item.startValue && item.endValue) {
570
+ isRangeQueryValue = true
571
+ }
572
+ }
573
+ if (isRangeQueryValue) {
574
+ searchForm[prop] = [item.startValue, item.endValue]
575
+ } else {
576
+ if (searchForm[prop]) {
577
+ if (searchForm[prop] instanceof Array) {
578
+ searchForm[prop].push(propValue)
579
+ } else {
580
+ searchForm[prop] = [searchForm[prop], propValue]
581
+ }
582
+ } else {
583
+ searchForm[prop] = propValue
584
+ }
585
+ }
586
+ }
587
+ })
588
+
589
+ this.searchableColumns.forEach(column => {
590
+ if (initSearchProps) {
591
+ if (initSearchProps.indexOf(column.prop) < 0) {
592
+ // 表示没有默认初始查询字段
593
+ if (column.prop && column.prop.indexOf('.') > 0) {
594
+ if (column.componentType === 'dateSection') {
595
+ addDynamicPropDateSection(searchForm, column.prop)
596
+ } else {
597
+ // 动态给searchForm添加属性,包括多级嵌套属性,属性的初始值都为 null
598
+ addDynamicProp(searchForm, column.prop)
599
+ }
600
+ } else {
601
+ if (column.componentType === 'dateSection') {
602
+ searchForm[column.prop] = [new Date(), new Date()]
603
+ } else {
604
+ searchForm[column.prop] = null
605
+ }
606
+ }
607
+ } else {
608
+ if (column.componentType === 'multiselect' && searchForm[column.prop]) {
609
+ if (!(searchForm[column.prop] instanceof Array)) {
610
+ searchForm[column.prop] = [searchForm[column.prop]]
611
+ }
612
+ }
613
+ }
614
+ }
615
+ })
616
+
617
+ return searchForm
618
+ }
619
+ },
620
+ resetSearchFormList() {
621
+ this.searchFormList = null
622
+ },
623
+ openFold(isOpen) {
624
+ this.$emit('open-fold', isOpen)
625
+ },
626
+ // 查询完毕
627
+ searchComplete() {
628
+ if (this.$refs.searchFormOrdinarySearch) {
629
+ this.$refs.searchFormOrdinarySearch.searchComplete()
630
+ }
631
+ }
632
+ }
633
+ }
634
+ </script>