vue2-client 1.15.11 → 1.15.13

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.
@@ -1,404 +1,419 @@
1
- <template>
2
- <div :style="{marginBottom: !visible ? '12px':''}">
3
- <div v-if="visible && realJsonData.length > 0" class="table-page-search-wrapper">
4
- <a-form-model
5
- v-if="loaded"
6
- ref="form"
7
- :model="form"
8
- :rules="rules"
9
- layout="inline">
10
- <a-row :gutter="24" type="flex">
11
- <x-form-item
12
- v-for="(item, index) in realJsonData.slice(0,7)"
13
- :showLabel="!simpleMode"
14
- :key="`${queryParamsName}-item-${index}`"
15
- :attr="item"
16
- :form="form"
17
- :service-name="serviceName"
18
- :get-data-params="getDataParams"
19
- :env="env"
20
- :setForm="setForm"
21
- @mounted="onItemMounted"
22
- />
23
- <template v-for="(groupItem, groupIndex) in groupJsonData">
24
- <x-form-item
25
- v-for="(item, index) in groupItem.groupItems"
26
- :showLabel="!simpleMode"
27
- :key="`group-${groupIndex}-item-${index}`"
28
- :attr="item"
29
- :form="form"
30
- :service-name="serviceName"
31
- :get-data-params="getDataParams"
32
- :env="env"
33
- :setForm="setForm"
34
- />
35
- </template>
36
- <x-form-item
37
- v-show="advanced"
38
- v-for="(item, index) in realJsonData.slice(7)"
39
- :showLabel="!simpleMode"
40
- :key="`advanced-${queryParamsName}-item-${index}`"
41
- :attr="item"
42
- :form="form"
43
- :service-name="serviceName"
44
- :get-data-params="getDataParams"
45
- :env="env"
46
- :setForm="setForm"
47
- @mounted="onItemMounted"
48
- />
49
- <a-col style="margin-left: auto">
50
- <span
51
- :style="advanced && { float: 'right', overflow: 'hidden' } || {} "
52
- class="table-page-search-submitButtons">
53
- <template v-if="realJsonData.length >7">
54
- <a @click="toggleAdvanced">
55
- <span v-if="!advanced" style="display: inline-flex; align-items: center;">
56
- <a-icon type="eye" :style="iconStyle"/>&nbsp;更多条件
57
- </span>
58
- <span v-else style="display: inline-flex; align-items: center;">
59
- <a-icon type="eye-invisible" :style="iconStyle"/>&nbsp;收起更多
60
- </span>
61
- </a>
62
- <a-divider type="vertical"/>
63
- </template>
64
- <a-button
65
- v-if="!simpleMode"
66
- htmlType="submit"
67
- type="primary"
68
- @click="onSubmit">
69
- <a-icon :style="iconStyle" type="search"/>查询
70
- </a-button>
71
- <a-button v-if="!simpleMode" style="margin-left: 8px" @click="resetForm">重置</a-button>
72
- <slot></slot>
73
- </span>
74
- </a-col>
75
- </a-row>
76
- </a-form-model>
77
- <div class="next-divider-dashed" role="separator"></div>
78
- </div>
79
- </div>
80
- </template>
81
- <script>
82
- import XFormItem from '@vue2-client/base-client/components/common/XForm/XFormItem'
83
- import { mapState } from 'vuex'
84
- import moment from 'moment'
85
- import { executeStrFunctionByContext } from '@vue2-client/utils/runEvalFunction'
86
- import { getConfigByNameAsync, runLogic } from '@vue2-client/services/api/common'
87
- import * as util from '@vue2-client/utils/util'
88
- import formValidationMixin from '@vue2-client/mixins/formValidationMixin'
89
-
90
- export default {
91
- name: 'XForm',
92
- components: {
93
- XFormItem
94
- },
95
- mixins: [formValidationMixin],
96
- data () {
97
- return {
98
- // 内容加载是否完成
99
- loaded: false,
100
- // 服务名称
101
- serviceName: undefined,
102
- // 是否展开条件
103
- advanced: false,
104
- // 表单Model
105
- form: undefined,
106
- // 校验
107
- rules: {},
108
- // 图标样式
109
- iconStyle: {
110
- position: 'relative',
111
- top: '1px'
112
- },
113
- // 表单项集合
114
- formItems: [],
115
- // 是否显示
116
- visible: true,
117
- // 调用logic获取数据源的追加参数
118
- getDataParams: {},
119
- // 当前环境
120
- env: 'prod',
121
- // 暂存 form 的默认值
122
- defaultMap: {},
123
- // 已经渲染得 x-from-item 为了让所有节点init执行完在调用 table 查询
124
- mountedCount: 0,
125
- // 是否简易模式
126
- simpleMode: false,
127
- queryParamsName: ''
128
- }
129
- },
130
- computed: {
131
- ...mapState('account', { currUser: 'user' }),
132
- // 过滤掉仅用于新增/修改场景的表单项
133
- realJsonData: function () {
134
- return this.formItems.filter(item => (!item.isOnlyAddOrEdit && item.type !== 'group') || (item.type === 'group' && item.groupItems.some(groupItem => !groupItem.isOnlyAddOrEdit)))
135
- },
136
- // 过滤出用于新增/修改场景的表单项
137
- groupJsonData: function () {
138
- return this.formItems.filter((item) => {
139
- return item.type === 'group'
140
- }).map((item) => {
141
- item.groupItems = item.groupItems.filter(item => !item.isOnlyAddOrEdit).map((groupItem) => {
142
- // 只保留第一个下划线后面的内容
143
- // groupItem.model = groupItem.model.substring(groupItem.model.indexOf('_') + 1)
144
- return groupItem
145
- })
146
- return item
147
- }
148
- )
149
- },
150
- },
151
- provide () {
152
- return {
153
- XFormContext: this,
154
- // 移除必填项
155
- removeRequired: this.removeRequired,
156
- // 设置必填项
157
- setRequired: this.setRequired,
158
- }
159
- },
160
- methods: {
161
- init (params) {
162
- const {
163
- formItems, serviceName, getDataParams = {}, env = 'prod', simpleMode = false, funcData = {},
164
- queryParamsName = 'localConfig'
165
- } = params
166
- this.mountedCount = 0
167
- this.queryParamsName = queryParamsName
168
- this.loaded = false
169
- this.formItems = JSON.parse(JSON.stringify(formItems))
170
- this.serviceName = serviceName
171
- this.env = env
172
- this.simpleMode = simpleMode
173
- const formData = {}
174
- for (let i = 0; i < this.realJsonData.length; i++) {
175
- const item = this.realJsonData[i]
176
- this.setFormProps(formData, item)
177
- }
178
- if (this.realJsonData.length === 0) {
179
- this.$nextTick(() => {
180
- this.$emit('itemsMounted')
181
- })
182
- }
183
- // 处理分组数据表单
184
- for (let i = 0; i < this.groupJsonData.length; i++) {
185
- const groupItem = this.groupJsonData[i]
186
- for (let j = 0; j < groupItem.groupItems.length; j++) {
187
- const item = groupItem.groupItems[j]
188
- this.setFormProps(formData, item)
189
- }
190
- }
191
- this.form = formData
192
- try {
193
- if (funcData.queryFormInit) {
194
- if (!funcData.queryFormInit.startsWith('async')) {
195
- funcData.queryFormInit = `async ${funcData.queryFormInit}`
196
- }
197
- executeStrFunctionByContext(this, funcData.queryFormInit, [util, runLogic, getConfigByNameAsync]).then(res => {
198
- this.form = Object.assign({}, this.form, res)
199
- })
200
- }
201
- } catch (e) {
202
- console.error('queryFormInit error', e)
203
- }
204
- this.getDataParams = getDataParams
205
- this.loaded = true
206
- },
207
- onItemMounted (_h) {
208
- this.mountedCount += 1
209
- if (this.mountedCount === this.realJsonData.length) {
210
- // 所有 x-from-item 挂载完成,触发父组件中的 xTable.init
211
- this.$emit('itemsMounted')
212
- }
213
- },
214
- // 时间组件赋默认值
215
- getDateRange ({ type, queryFormDefault: defaultValue, queryType, queryValueFormat: defaultFormat, name }) {
216
- const formatMap = {
217
- yearPicker: 'YYYY',
218
- yearRangePicker: 'YYYY',
219
- monthPicker: 'YYYY-MM',
220
- monthRangePicker: 'YYYY-MM',
221
- datePicker: 'YYYY-MM-DD',
222
- rangePicker: 'YYYY-MM-DD HH:mm:ss',
223
- }
224
- let format = formatMap[type]
225
-
226
- if (defaultFormat) {
227
- format = defaultFormat
228
- }
229
-
230
- let start, end
231
-
232
- switch (defaultValue) {
233
- case 'curYear':
234
- start = moment().startOf('year').format(format)
235
- end = moment().endOf('year').format(format)
236
- break
237
- case 'curMonth':
238
- start = moment().startOf('month').format(format)
239
- end = moment().endOf('month').format(format)
240
- break
241
- case 'curDay':
242
- start = moment().startOf('day').format(format)
243
- end = moment().endOf('day').format(format)
244
- break
245
- case 'curTime':
246
- start = moment().format(format)
247
- end = moment().format(format)
248
- break
249
- default:
250
- return undefined
251
- }
252
- if (['monthPicker', 'yearPicker', 'datePicker'].includes(type)) {
253
- if (queryType === 'BETWEEN') {
254
- return [start, end]
255
- }
256
- if (name.indexOf('开始') > -1 || name.indexOf('起始') > -1) {
257
- return start
258
- } else {
259
- return end
260
- }
261
- } else if (['rangePicker', 'yearRangePicker', 'monthRangePicker'].includes(type)) {
262
- return [start, end]
263
- }
264
- return [start, end]
265
- },
266
- setFormProps (formData, item) {
267
- formData[item.model] = undefined
268
- if (item.queryFormDefault) {
269
- if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(item.type)) {
270
- formData[item.model] = this.getDateRange(item)
271
- } else if (['treeSelect', 'select', 'checkbox'].includes(item.type) && ['curOrgId', 'curDepId', 'curUserId'].includes(item.queryFormDefault)) {
272
- if (item.queryFormDefault === 'curOrgId') {
273
- formData[item.model] = item.type === 'select' ? this.currUser.orgid : [this.currUser.orgid]
274
- }
275
- if (item.queryFormDefault === 'curDepId') {
276
- formData[item.model] = item.type === 'select' ? this.currUser.depids : [this.currUser.depids]
277
- }
278
- if (item.queryFormDefault === 'curUserId') {
279
- formData[item.model] = item.type === 'select' ? this.currUser.id : [this.currUser.id]
280
- }
281
- } else {
282
- formData[item.model] = item.queryFormDefault
283
- }
284
- if (item.forceQueryDefault) {
285
- this.defaultMap[item.model] = formData[item.model]
286
- }
287
- } else {
288
- if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(item.type)) {
289
- if (item.queryType === 'BETWEEN') {
290
- formData[item.model] = []
291
- }
292
- }
293
- }
294
- if (item.rule) {
295
- this.rules[item.model] = []
296
- const required = item.rule.queryRequired ? item.rule.queryRequired === true || item.rule.queryRequired === 'true' : false
297
- let trigger
298
- let message
299
- if (required) {
300
- switch (item.type) {
301
- case 'select':
302
- case 'checkbox':
303
- case 'radio':
304
- case 'treeSelect':
305
- case 'rangePicker':
306
- case 'monthPicker':
307
- case 'yearPicker':
308
- case 'datePicker':
309
- case 'file':
310
- case 'image':
311
- case 'citySelect':
312
- case 'addressSearch':
313
- case 'personSetting':
314
- message = '请选择' + item.name
315
- trigger = 'change'
316
- break
317
- default:
318
- message = '请输入' + item.name
319
- trigger = 'blur'
320
- }
321
- this.rules[item.model].push({
322
- required: true,
323
- message: message,
324
- trigger: trigger
325
- })
326
- }
327
-
328
- switch (item.rule.queryType) {
329
- case 'customJs': {
330
- this.rules[item.model].push({
331
- validator: (rule, value, callback) => {
332
- this.customJsValidate(rule, value, callback, item)
333
- },
334
- trigger: 'blur'
335
- })
336
- break
337
- }
338
- }
339
- }
340
- },
341
- customJsValidate (rule, value, callback, item) {
342
- if (item.rule.customQueryValidatorFunc) {
343
- executeStrFunctionByContext(this, item.rule.customQueryValidatorFunc, [rule, value, callback, this.form, item, util, runLogic, getConfigByNameAsync])
344
- } else {
345
- callback()
346
- }
347
- },
348
- toggleAdvanced () {
349
- this.advanced = !this.advanced
350
- this.$emit('toggleAdvanced')
351
- },
352
- toggleVisible () {
353
- this.visible = !this.visible
354
- return this.visible
355
- },
356
- resetForm () {
357
- this.$refs.form.resetFields()
358
- },
359
- onSubmit () {
360
- this.$refs.form.validate(valid => {
361
- for (const key of Object.keys(this.form)) {
362
- if (this.form[key] === null || this.form[key] === '') {
363
- this.form[key] = undefined
364
- }
365
- if (Array.isArray(this.form[key]) && this.form[key].length === 0) {
366
- this.form[key] = undefined
367
- }
368
- // 如果 form 中没有值,但是有默认值
369
- if (this.form[key] === undefined && this.defaultMap[key] !== undefined) {
370
- this.form = Object.assign({}, this.form, this.defaultMap)
371
- }
372
- }
373
- const requestParameters = Object.assign({}, this.form)
374
- const data = {
375
- valid: valid,
376
- form: requestParameters
377
- }
378
- this.$emit('onSubmit', data)
379
- })
380
- },
381
- exports () {
382
- this.$emit('exports', this.form)
383
- },
384
- setForm (obj) {
385
- this.form = Object.assign(this.form, obj)
386
- },
387
- }
388
- }
389
- </script>
390
- <style lang="less" scoped>
391
- :deep(.ant-form-inline .ant-form-item) {
392
- margin-right: 0px;
393
- margin-top: 0px;
394
- margin-bottom: 12px;
395
-
396
- .ant-form-item-control-wrapper {
397
- min-width: 0;
398
- }
399
- }
400
-
401
- :deep(.table-page-search-wrapper .table-page-search-submitButtons) {
402
- margin-top: 0px;
403
- }
404
- </style>
1
+ <template>
2
+ <div :style="{marginBottom: !visible ? '12px':''}">
3
+ <div v-if="visible && realJsonData.length > 0" class="table-page-search-wrapper">
4
+ <a-form-model
5
+ v-if="loaded"
6
+ ref="form"
7
+ :model="form"
8
+ :rules="rules"
9
+ layout="inline">
10
+ <a-row :gutter="24" type="flex">
11
+ <x-form-item
12
+ v-for="(item, index) in visibleItems"
13
+ :showLabel="!simpleMode"
14
+ :key="`${queryParamsName}-item-${index}`"
15
+ :attr="item.formItem"
16
+ :form="form"
17
+ :service-name="serviceName"
18
+ :get-data-params="getDataParams"
19
+ :env="env"
20
+ :setForm="setForm"
21
+ @mounted="onItemMounted"
22
+ />
23
+ <x-form-item
24
+ v-show="advanced"
25
+ v-for="(item, index) in hiddenItems"
26
+ :showLabel="!simpleMode"
27
+ :key="`advanced-${queryParamsName}-item-${index}`"
28
+ :attr="item.formItem"
29
+ :form="form"
30
+ :service-name="serviceName"
31
+ :get-data-params="getDataParams"
32
+ :env="env"
33
+ :setForm="setForm"
34
+ @mounted="onItemMounted"
35
+ />
36
+ <a-col style="margin-left: auto">
37
+ <span
38
+ :style="advanced ? { float: 'right', overflow: 'hidden' } : {}"
39
+ class="table-page-search-submitButtons">
40
+ <template v-if="hiddenItems.length > 0">
41
+ <a @click="toggleAdvanced">
42
+ <span v-if="!advanced" style="display: inline-flex; align-items: center;">
43
+ <a-icon type="eye" :style="iconStyle"></a-icon>&nbsp;更多条件
44
+ </span>
45
+ <span v-else style="display: inline-flex; align-items: center;">
46
+ <a-icon type="eye-invisible" :style="iconStyle"></a-icon>&nbsp;收起更多
47
+ </span>
48
+ </a>
49
+ <a-divider type="vertical"/>
50
+ </template>
51
+ <a-button
52
+ v-if="!simpleMode"
53
+ htmlType="submit"
54
+ type="primary"
55
+ @click="onSubmit">
56
+ <a-icon :style="iconStyle" type="search"></a-icon>查询
57
+ </a-button>
58
+ <a-button v-if="!simpleMode" style="margin-left: 8px" @click="resetForm">重置</a-button>
59
+ <slot></slot>
60
+ </span>
61
+ </a-col>
62
+ </a-row>
63
+ </a-form-model>
64
+ <div class="next-divider-dashed" role="separator"></div>
65
+ </div>
66
+ </div>
67
+ </template>
68
+ <script>
69
+ import XFormItem from '@vue2-client/base-client/components/common/XForm/XFormItem'
70
+ import { mapState } from 'vuex'
71
+ import moment from 'moment'
72
+ import { executeStrFunctionByContext } from '@vue2-client/utils/runEvalFunction'
73
+ import { getConfigByNameAsync, runLogic } from '@vue2-client/services/api/common'
74
+ import * as util from '@vue2-client/utils/util'
75
+ import formValidationMixin from '@vue2-client/mixins/formValidationMixin'
76
+
77
+ export default {
78
+ name: 'XForm',
79
+ components: {
80
+ XFormItem
81
+ },
82
+ mixins: [formValidationMixin],
83
+ data () {
84
+ return {
85
+ // 内容加载是否完成
86
+ loaded: false,
87
+ // 服务名称
88
+ serviceName: undefined,
89
+ // 是否展开条件
90
+ advanced: false,
91
+ // 表单Model
92
+ form: undefined,
93
+ // 校验
94
+ rules: {},
95
+ // 图标样式
96
+ iconStyle: {
97
+ position: 'relative',
98
+ top: '1px'
99
+ },
100
+ // 表单项集合
101
+ formItems: [],
102
+ // 是否显示
103
+ visible: true,
104
+ // 调用logic获取数据源的追加参数
105
+ getDataParams: {},
106
+ // 当前环境
107
+ env: 'prod',
108
+ // 暂存 form 的默认值
109
+ defaultMap: {},
110
+ // 已经渲染得 x-from-item 为了让所有节点init执行完在调用 table 查询
111
+ mountedCount: 0,
112
+ // 是否简易模式
113
+ simpleMode: false,
114
+ queryParamsName: '',
115
+ // 默认显示的表单项数量
116
+ visibleItemCount: 7
117
+ }
118
+ },
119
+ computed: {
120
+ ...mapState('account', { currUser: 'user' }),
121
+ // 过滤掉仅用于新增/修改场景的表单项
122
+ realJsonData: function () {
123
+ return this.formItems.filter(item => (!item.isOnlyAddOrEdit && item.type !== 'group') || (item.type === 'group' && item.groupItems.some(groupItem => !groupItem.isOnlyAddOrEdit)))
124
+ },
125
+ // 过滤出用于新增/修改场景的表单项
126
+ groupJsonData: function () {
127
+ return this.formItems.filter((item) => {
128
+ return item.type === 'group'
129
+ }).map((item) => {
130
+ item.groupItems = item.groupItems.filter(item => !item.isOnlyAddOrEdit).map((groupItem) => {
131
+ // 只保留第一个下划线后面的内容
132
+ // groupItem.model = groupItem.model.substring(groupItem.model.indexOf('_') + 1)
133
+ return groupItem
134
+ })
135
+ return item
136
+ }
137
+ )
138
+ },
139
+ // 合并所有来源的表单项
140
+ allFormItems: function () {
141
+ const normalItems = this.realJsonData.map(item => ({
142
+ type: 'normal',
143
+ formItem: item
144
+ }))
145
+
146
+ const groupItems = this.groupJsonData.flatMap(group =>
147
+ group.groupItems.map(item => ({
148
+ type: 'group',
149
+ formItem: item,
150
+ groupName: group.name || '分组'
151
+ }))
152
+ )
153
+
154
+ return [...normalItems, ...groupItems]
155
+ },
156
+ // 显示的表单项
157
+ visibleItems: function () {
158
+ return this.allFormItems.slice(0, this.visibleItemCount)
159
+ },
160
+ // 隐藏的表单项(需要点击展开才显示)
161
+ hiddenItems: function () {
162
+ return this.allFormItems.slice(this.visibleItemCount)
163
+ },
164
+ },
165
+ provide () {
166
+ return {
167
+ XFormContext: this,
168
+ // 移除必填项
169
+ removeRequired: this.removeRequired,
170
+ // 设置必填项
171
+ setRequired: this.setRequired,
172
+ }
173
+ },
174
+ methods: {
175
+ init (params) {
176
+ const {
177
+ formItems, serviceName, getDataParams = {}, env = 'prod', simpleMode = false, funcData = {},
178
+ queryParamsName = 'localConfig', visibleItemCount = 7
179
+ } = params
180
+ this.mountedCount = 0
181
+ this.queryParamsName = queryParamsName
182
+ this.loaded = false
183
+ this.formItems = JSON.parse(JSON.stringify(formItems))
184
+ this.serviceName = serviceName
185
+ this.env = env
186
+ this.simpleMode = simpleMode
187
+ this.visibleItemCount = visibleItemCount
188
+ const formData = {}
189
+ for (let i = 0; i < this.realJsonData.length; i++) {
190
+ const item = this.realJsonData[i]
191
+ this.setFormProps(formData, item)
192
+ }
193
+ if (this.realJsonData.length === 0) {
194
+ this.$nextTick(() => {
195
+ this.$emit('itemsMounted')
196
+ })
197
+ }
198
+ // 处理分组数据表单
199
+ for (let i = 0; i < this.groupJsonData.length; i++) {
200
+ const groupItem = this.groupJsonData[i]
201
+ for (let j = 0; j < groupItem.groupItems.length; j++) {
202
+ const item = groupItem.groupItems[j]
203
+ this.setFormProps(formData, item)
204
+ }
205
+ }
206
+ this.form = formData
207
+ try {
208
+ if (funcData.queryFormInit) {
209
+ if (!funcData.queryFormInit.startsWith('async')) {
210
+ funcData.queryFormInit = `async ${funcData.queryFormInit}`
211
+ }
212
+ executeStrFunctionByContext(this, funcData.queryFormInit, [util, runLogic, getConfigByNameAsync]).then(res => {
213
+ this.form = Object.assign({}, this.form, res)
214
+ })
215
+ }
216
+ } catch (e) {
217
+ console.error('queryFormInit error', e)
218
+ }
219
+ this.getDataParams = getDataParams
220
+ this.loaded = true
221
+ },
222
+ onItemMounted (_h) {
223
+ this.mountedCount += 1
224
+ if (this.mountedCount === this.allFormItems.length) {
225
+ // 所有 x-from-item 挂载完成,触发父组件中的 xTable.init
226
+ this.$emit('itemsMounted')
227
+ }
228
+ },
229
+ // 时间组件赋默认值
230
+ getDateRange ({ type, queryFormDefault: defaultValue, queryType, queryValueFormat: defaultFormat, name }) {
231
+ const formatMap = {
232
+ yearPicker: 'YYYY',
233
+ yearRangePicker: 'YYYY',
234
+ monthPicker: 'YYYY-MM',
235
+ monthRangePicker: 'YYYY-MM',
236
+ datePicker: 'YYYY-MM-DD',
237
+ rangePicker: 'YYYY-MM-DD HH:mm:ss',
238
+ }
239
+ let format = formatMap[type]
240
+
241
+ if (defaultFormat) {
242
+ format = defaultFormat
243
+ }
244
+
245
+ let start, end
246
+
247
+ switch (defaultValue) {
248
+ case 'curYear':
249
+ start = moment().startOf('year').format(format)
250
+ end = moment().endOf('year').format(format)
251
+ break
252
+ case 'curMonth':
253
+ start = moment().startOf('month').format(format)
254
+ end = moment().endOf('month').format(format)
255
+ break
256
+ case 'curDay':
257
+ start = moment().startOf('day').format(format)
258
+ end = moment().endOf('day').format(format)
259
+ break
260
+ case 'curTime':
261
+ start = moment().format(format)
262
+ end = moment().format(format)
263
+ break
264
+ default:
265
+ return undefined
266
+ }
267
+ if (['monthPicker', 'yearPicker', 'datePicker'].includes(type)) {
268
+ if (queryType === 'BETWEEN') {
269
+ return [start, end]
270
+ }
271
+ if (name.indexOf('开始') > -1 || name.indexOf('起始') > -1) {
272
+ return start
273
+ } else {
274
+ return end
275
+ }
276
+ } else if (['rangePicker', 'yearRangePicker', 'monthRangePicker'].includes(type)) {
277
+ return [start, end]
278
+ }
279
+ return [start, end]
280
+ },
281
+ setFormProps (formData, item) {
282
+ formData[item.model] = undefined
283
+ if (item.queryFormDefault) {
284
+ if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(item.type)) {
285
+ formData[item.model] = this.getDateRange(item)
286
+ } else if (['treeSelect', 'select', 'checkbox'].includes(item.type) && ['curOrgId', 'curDepId', 'curUserId'].includes(item.queryFormDefault)) {
287
+ if (item.queryFormDefault === 'curOrgId') {
288
+ formData[item.model] = item.type === 'select' ? this.currUser.orgid : [this.currUser.orgid]
289
+ }
290
+ if (item.queryFormDefault === 'curDepId') {
291
+ formData[item.model] = item.type === 'select' ? this.currUser.depids : [this.currUser.depids]
292
+ }
293
+ if (item.queryFormDefault === 'curUserId') {
294
+ formData[item.model] = item.type === 'select' ? this.currUser.id : [this.currUser.id]
295
+ }
296
+ } else {
297
+ formData[item.model] = item.queryFormDefault
298
+ }
299
+ if (item.forceQueryDefault) {
300
+ this.defaultMap[item.model] = formData[item.model]
301
+ }
302
+ } else {
303
+ if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(item.type)) {
304
+ if (item.queryType === 'BETWEEN') {
305
+ formData[item.model] = []
306
+ }
307
+ }
308
+ }
309
+ if (item.rule) {
310
+ this.rules[item.model] = []
311
+ const required = item.rule.queryRequired ? item.rule.queryRequired === true || item.rule.queryRequired === 'true' : false
312
+ let trigger
313
+ let message
314
+ if (required) {
315
+ switch (item.type) {
316
+ case 'select':
317
+ case 'checkbox':
318
+ case 'radio':
319
+ case 'treeSelect':
320
+ case 'rangePicker':
321
+ case 'monthPicker':
322
+ case 'yearPicker':
323
+ case 'datePicker':
324
+ case 'file':
325
+ case 'image':
326
+ case 'citySelect':
327
+ case 'addressSearch':
328
+ case 'personSetting':
329
+ message = '请选择' + item.name
330
+ trigger = 'change'
331
+ break
332
+ default:
333
+ message = '请输入' + item.name
334
+ trigger = 'blur'
335
+ }
336
+ this.rules[item.model].push({
337
+ required: true,
338
+ message: message,
339
+ trigger: trigger
340
+ })
341
+ }
342
+
343
+ switch (item.rule.queryType) {
344
+ case 'customJs': {
345
+ this.rules[item.model].push({
346
+ validator: (rule, value, callback) => {
347
+ this.customJsValidate(rule, value, callback, item)
348
+ },
349
+ trigger: 'blur'
350
+ })
351
+ break
352
+ }
353
+ }
354
+ }
355
+ },
356
+ customJsValidate (rule, value, callback, item) {
357
+ if (item.rule.customQueryValidatorFunc) {
358
+ executeStrFunctionByContext(this, item.rule.customQueryValidatorFunc, [rule, value, callback, this.form, item, util, runLogic, getConfigByNameAsync])
359
+ } else {
360
+ callback()
361
+ }
362
+ },
363
+ toggleAdvanced () {
364
+ this.advanced = !this.advanced
365
+ this.$emit('toggleAdvanced')
366
+ },
367
+ toggleVisible () {
368
+ this.visible = !this.visible
369
+ return this.visible
370
+ },
371
+ resetForm () {
372
+ this.$refs.form.resetFields()
373
+ },
374
+ onSubmit () {
375
+ this.$refs.form.validate(valid => {
376
+ for (const key of Object.keys(this.form)) {
377
+ if (this.form[key] === null || this.form[key] === '') {
378
+ this.form[key] = undefined
379
+ }
380
+ if (Array.isArray(this.form[key]) && this.form[key].length === 0) {
381
+ this.form[key] = undefined
382
+ }
383
+ // 如果 form 中没有值,但是有默认值
384
+ if (this.form[key] === undefined && this.defaultMap[key] !== undefined) {
385
+ this.form = Object.assign({}, this.form, this.defaultMap)
386
+ }
387
+ }
388
+ const requestParameters = Object.assign({}, this.form)
389
+ const data = {
390
+ valid: valid,
391
+ form: requestParameters
392
+ }
393
+ this.$emit('onSubmit', data)
394
+ })
395
+ },
396
+ exports () {
397
+ this.$emit('exports', this.form)
398
+ },
399
+ setForm (obj) {
400
+ this.form = Object.assign(this.form, obj)
401
+ },
402
+ }
403
+ }
404
+ </script>
405
+ <style lang="less" scoped>
406
+ :deep(.ant-form-inline .ant-form-item) {
407
+ margin-right: 0;
408
+ margin-top: 0;
409
+ margin-bottom: 12px;
410
+
411
+ .ant-form-item-control-wrapper {
412
+ min-width: 0;
413
+ }
414
+ }
415
+
416
+ :deep(.table-page-search-wrapper .table-page-search-submitButtons) {
417
+ margin-top: 0;
418
+ }
419
+ </style>