vue2-client 1.10.33 → 1.10.35

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 (23) hide show
  1. package/package.json +107 -107
  2. package/src/App.vue +196 -196
  3. package/src/base-client/components/common/XAddNativeForm/demo.vue +43 -43
  4. package/src/base-client/components/common/XAddReport/XAddReport.vue +1 -1
  5. package/src/base-client/components/common/XConversation/XConversation.vue +12 -0
  6. package/src/base-client/components/common/XForm/XForm.vue +393 -393
  7. package/src/base-client/components/common/XForm/XFormItem.vue +1248 -1248
  8. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  9. package/src/base-client/components/common/XFormTable/XFormTable.vue +12 -0
  10. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  11. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +1 -1
  12. package/src/base-client/components/common/XReportGrid/XReport.vue +1079 -1070
  13. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +46 -47
  14. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +628 -628
  15. package/src/base-client/components/common/XReportGrid/XReportJsonRender.vue +380 -380
  16. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +1104 -1104
  17. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  18. package/src/base-client/components/common/XTab/XTab.vue +57 -25
  19. package/src/components/cache/AKeepAlive.js +179 -179
  20. package/src/layouts/BlankView.vue +78 -78
  21. package/src/pages/ReportGrid/index.vue +76 -76
  22. package/src/router/async/router.map.js +2 -2
  23. package/src/utils/microAppUtils.js +49 -49
@@ -1,393 +1,393 @@
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'+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-show="!advanced" style="display: inline-flex; align-items: center;">
56
- <a-icon type="eye" :style="iconStyle"/>&nbsp;更多条件
57
- </span>
58
- <span v-show="advanced" 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
-
89
- export default {
90
- name: 'XForm',
91
- components: {
92
- XFormItem
93
- },
94
- data () {
95
- return {
96
- // 内容加载是否完成
97
- loaded: false,
98
- // 服务名称
99
- serviceName: undefined,
100
- // 是否展开条件
101
- advanced: false,
102
- // 表单Model
103
- form: undefined,
104
- // 校验
105
- rules: {},
106
- // 图标样式
107
- iconStyle: {
108
- position: 'relative',
109
- top: '1px'
110
- },
111
- // 表单项集合
112
- formItems: [],
113
- // 是否显示
114
- visible: true,
115
- // 调用logic获取数据源的追加参数
116
- getDataParams: {},
117
- // 当前环境
118
- env: 'prod',
119
- // 暂存 form 的默认值
120
- defaultMap: {},
121
- // 已经渲染得 x-from-item 为了让所有节点init执行完在调用 table 查询
122
- mountedCount: 0,
123
- // 是否简易模式
124
- simpleMode: false,
125
- queryParamsName: ''
126
- }
127
- },
128
- computed: {
129
- ...mapState('account', { currUser: 'user' }),
130
- // 过滤掉仅用于新增/修改场景的表单项
131
- realJsonData: function () {
132
- return this.formItems.filter(item => (!item.isOnlyAddOrEdit && item.type !== 'group') || (item.type === 'group' && item.groupItems.some(groupItem => !groupItem.isOnlyAddOrEdit)))
133
- },
134
- // 过滤出用于新增/修改场景的表单项
135
- groupJsonData: function () {
136
- return this.formItems.filter((item) => {
137
- return item.type === 'group'
138
- }).map((item) => {
139
- item.groupItems = item.groupItems.filter(item => !item.isOnlyAddOrEdit).map((groupItem) => {
140
- // 只保留第一个下划线后面的内容
141
- // groupItem.model = groupItem.model.substring(groupItem.model.indexOf('_') + 1)
142
- return groupItem
143
- })
144
- return item
145
- }
146
- )
147
- },
148
- },
149
- methods: {
150
- init (params) {
151
- const {
152
- formItems, serviceName, getDataParams = {}, env = 'prod', simpleMode = false, funcData = {},
153
- queryParamsName = 'localConfig'
154
- } = params
155
- this.mountedCount = 0
156
- this.queryParamsName = queryParamsName
157
- this.loaded = false
158
- this.formItems = JSON.parse(JSON.stringify(formItems))
159
- this.serviceName = serviceName
160
- this.env = env
161
- this.simpleMode = simpleMode
162
- const formData = {}
163
- for (let i = 0; i < this.realJsonData.length; i++) {
164
- const item = this.realJsonData[i]
165
- this.setFormProps(formData, item)
166
- }
167
- if (this.realJsonData.length === 0) {
168
- this.$nextTick(() => {
169
- this.$emit('itemsMounted')
170
- })
171
- }
172
- // 处理分组数据表单
173
- for (let i = 0; i < this.groupJsonData.length; i++) {
174
- const groupItem = this.groupJsonData[i]
175
- for (let j = 0; j < groupItem.groupItems.length; j++) {
176
- const item = groupItem.groupItems[j]
177
- this.setFormProps(formData, item)
178
- }
179
- }
180
- this.form = formData
181
- try {
182
- if (funcData.queryFormInit) {
183
- if (!funcData.queryFormInit.startsWith('async')) {
184
- funcData.queryFormInit = `async ${funcData.queryFormInit}`
185
- }
186
- executeStrFunctionByContext(this, funcData.queryFormInit, [util, runLogic, getConfigByNameAsync]).then(res => {
187
- this.form = Object.assign({}, this.form, res)
188
- })
189
- }
190
- } catch (e) {
191
- console.error('queryFormInit error', e)
192
- }
193
- this.getDataParams = getDataParams
194
- this.loaded = true
195
- },
196
- onItemMounted (_h) {
197
- this.mountedCount += 1
198
- if (this.mountedCount === this.realJsonData.length) {
199
- // 所有 x-from-item 挂载完成,触发父组件中的 xTable.init
200
- this.$emit('itemsMounted')
201
- }
202
- },
203
- // 时间组件赋默认值
204
- getDateRange ({ type, queryFormDefault: defaultValue, queryType, queryValueFormat: defaultFormat, name }) {
205
- const formatMap = {
206
- yearPicker: 'YYYY',
207
- yearRangePicker: 'YYYY',
208
- monthPicker: 'YYYY-MM',
209
- monthRangePicker: 'YYYY-MM',
210
- datePicker: 'YYYY-MM-DD',
211
- rangePicker: 'YYYY-MM-DD HH:mm:ss',
212
- }
213
- let format = formatMap[type]
214
-
215
- if (defaultFormat) {
216
- format = defaultFormat
217
- }
218
-
219
- let start, end
220
-
221
- switch (defaultValue) {
222
- case 'curYear':
223
- start = moment().startOf('year').format(format)
224
- end = moment().endOf('year').format(format)
225
- break
226
- case 'curMonth':
227
- start = moment().startOf('month').format(format)
228
- end = moment().endOf('month').format(format)
229
- break
230
- case 'curDay':
231
- start = moment().startOf('day').format(format)
232
- end = moment().endOf('day').format(format)
233
- break
234
- case 'curTime':
235
- start = moment().format(format)
236
- end = moment().format(format)
237
- break
238
- default:
239
- return undefined
240
- }
241
- if (['monthPicker', 'yearPicker', 'datePicker'].includes(type)) {
242
- if (queryType === 'BETWEEN') {
243
- return [start, end]
244
- }
245
- if (name.indexOf('开始') > -1 || name.indexOf('起始') > -1) {
246
- return start
247
- } else {
248
- return end
249
- }
250
- } else if (['rangePicker', 'yearRangePicker', 'monthRangePicker'].includes(type)) {
251
- return [start, end]
252
- }
253
- return [start, end]
254
- },
255
- setFormProps (formData, item) {
256
- formData[item.model] = undefined
257
- if (item.queryFormDefault) {
258
- if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(item.type)) {
259
- formData[item.model] = this.getDateRange(item)
260
- } else if (['treeSelect', 'select', 'checkbox'].includes(item.type) && ['curOrgId', 'curDepId', 'curUserId'].includes(item.queryFormDefault)) {
261
- if (item.queryFormDefault === 'curOrgId') {
262
- formData[item.model] = item.type === 'select' ? this.currUser.orgid : [this.currUser.orgid]
263
- }
264
- if (item.queryFormDefault === 'curDepId') {
265
- formData[item.model] = item.type === 'select' ? this.currUser.depids : [this.currUser.depids]
266
- }
267
- if (item.queryFormDefault === 'curUserId') {
268
- formData[item.model] = item.type === 'select' ? this.currUser.id : [this.currUser.id]
269
- }
270
- } else {
271
- formData[item.model] = item.queryFormDefault
272
- }
273
- if (item.forceQueryDefault) {
274
- this.defaultMap[item.model] = formData[item.model]
275
- }
276
- } else {
277
- if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(item.type)) {
278
- if (item.queryType === 'BETWEEN') {
279
- formData[item.model] = []
280
- }
281
- }
282
- }
283
- if (item.rule) {
284
- this.rules[item.model] = []
285
- const required = item.rule.queryRequired ? item.rule.queryRequired === true || item.rule.queryRequired === 'true' : false
286
- let trigger
287
- let message
288
- if (required) {
289
- switch (item.type) {
290
- case 'select':
291
- case 'checkbox':
292
- case 'radio':
293
- case 'treeSelect':
294
- case 'rangePicker':
295
- case 'monthPicker':
296
- case 'yearPicker':
297
- case 'datePicker':
298
- case 'file':
299
- case 'image':
300
- case 'citySelect':
301
- case 'addressSearch':
302
- case 'personSetting':
303
- message = '请选择' + item.name
304
- trigger = 'change'
305
- break
306
- default:
307
- message = '请输入' + item.name
308
- trigger = 'blur'
309
- }
310
- this.rules[item.model].push({
311
- required: true,
312
- message: message,
313
- trigger: trigger
314
- })
315
- }
316
-
317
- switch (item.rule.queryType) {
318
- case 'customJs': {
319
- this.rules[item.model].push({
320
- validator: (rule, value, callback) => {
321
- this.customJsValidate(rule, value, callback, item)
322
- },
323
- trigger: 'blur'
324
- })
325
- break
326
- }
327
- }
328
- }
329
- },
330
- customJsValidate (rule, value, callback, item) {
331
- if (item.rule.customQueryValidatorFunc) {
332
- executeStrFunctionByContext(this, item.rule.customQueryValidatorFunc, [rule, value, callback, this.form, item, util, runLogic, getConfigByNameAsync])
333
- } else {
334
- callback()
335
- }
336
- },
337
- toggleAdvanced () {
338
- this.advanced = !this.advanced
339
- this.$emit('toggleAdvanced')
340
- },
341
- toggleVisible () {
342
- this.visible = !this.visible
343
- return this.visible
344
- },
345
- resetForm () {
346
- this.$refs.form.resetFields()
347
- },
348
- onSubmit () {
349
- this.$refs.form.validate(valid => {
350
- for (const key of Object.keys(this.form)) {
351
- if (this.form[key] === null || this.form[key] === '') {
352
- this.form[key] = undefined
353
- }
354
- if (Array.isArray(this.form[key]) && this.form[key].length === 0) {
355
- this.form[key] = undefined
356
- }
357
- // 如果 form 中没有值,但是有默认值
358
- if (this.form[key] === undefined && this.defaultMap[key] !== undefined) {
359
- this.form = Object.assign({}, this.form, this.defaultMap)
360
- }
361
- }
362
- const requestParameters = Object.assign({}, this.form)
363
- const data = {
364
- valid: valid,
365
- form: requestParameters
366
- }
367
- this.$emit('onSubmit', data)
368
- })
369
- },
370
- exports () {
371
- this.$emit('exports', this.form)
372
- },
373
- setForm (obj) {
374
- this.form = Object.assign(this.form, obj)
375
- },
376
- }
377
- }
378
- </script>
379
- <style lang="less" scoped>
380
- :deep(.ant-form-inline .ant-form-item) {
381
- margin-right: 0px;
382
- margin-top: 0px;
383
- margin-bottom: 12px;
384
-
385
- .ant-form-item-control-wrapper {
386
- min-width: 0;
387
- }
388
- }
389
-
390
- :deep(.table-page-search-wrapper .table-page-search-submitButtons) {
391
- margin-top: 0px;
392
- }
393
- </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 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'+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-show="!advanced" style="display: inline-flex; align-items: center;">
56
+ <a-icon type="eye" :style="iconStyle"/>&nbsp;更多条件
57
+ </span>
58
+ <span v-show="advanced" 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
+
89
+ export default {
90
+ name: 'XForm',
91
+ components: {
92
+ XFormItem
93
+ },
94
+ data () {
95
+ return {
96
+ // 内容加载是否完成
97
+ loaded: false,
98
+ // 服务名称
99
+ serviceName: undefined,
100
+ // 是否展开条件
101
+ advanced: false,
102
+ // 表单Model
103
+ form: undefined,
104
+ // 校验
105
+ rules: {},
106
+ // 图标样式
107
+ iconStyle: {
108
+ position: 'relative',
109
+ top: '1px'
110
+ },
111
+ // 表单项集合
112
+ formItems: [],
113
+ // 是否显示
114
+ visible: true,
115
+ // 调用logic获取数据源的追加参数
116
+ getDataParams: {},
117
+ // 当前环境
118
+ env: 'prod',
119
+ // 暂存 form 的默认值
120
+ defaultMap: {},
121
+ // 已经渲染得 x-from-item 为了让所有节点init执行完在调用 table 查询
122
+ mountedCount: 0,
123
+ // 是否简易模式
124
+ simpleMode: false,
125
+ queryParamsName: ''
126
+ }
127
+ },
128
+ computed: {
129
+ ...mapState('account', { currUser: 'user' }),
130
+ // 过滤掉仅用于新增/修改场景的表单项
131
+ realJsonData: function () {
132
+ return this.formItems.filter(item => (!item.isOnlyAddOrEdit && item.type !== 'group') || (item.type === 'group' && item.groupItems.some(groupItem => !groupItem.isOnlyAddOrEdit)))
133
+ },
134
+ // 过滤出用于新增/修改场景的表单项
135
+ groupJsonData: function () {
136
+ return this.formItems.filter((item) => {
137
+ return item.type === 'group'
138
+ }).map((item) => {
139
+ item.groupItems = item.groupItems.filter(item => !item.isOnlyAddOrEdit).map((groupItem) => {
140
+ // 只保留第一个下划线后面的内容
141
+ // groupItem.model = groupItem.model.substring(groupItem.model.indexOf('_') + 1)
142
+ return groupItem
143
+ })
144
+ return item
145
+ }
146
+ )
147
+ },
148
+ },
149
+ methods: {
150
+ init (params) {
151
+ const {
152
+ formItems, serviceName, getDataParams = {}, env = 'prod', simpleMode = false, funcData = {},
153
+ queryParamsName = 'localConfig'
154
+ } = params
155
+ this.mountedCount = 0
156
+ this.queryParamsName = queryParamsName
157
+ this.loaded = false
158
+ this.formItems = JSON.parse(JSON.stringify(formItems))
159
+ this.serviceName = serviceName
160
+ this.env = env
161
+ this.simpleMode = simpleMode
162
+ const formData = {}
163
+ for (let i = 0; i < this.realJsonData.length; i++) {
164
+ const item = this.realJsonData[i]
165
+ this.setFormProps(formData, item)
166
+ }
167
+ if (this.realJsonData.length === 0) {
168
+ this.$nextTick(() => {
169
+ this.$emit('itemsMounted')
170
+ })
171
+ }
172
+ // 处理分组数据表单
173
+ for (let i = 0; i < this.groupJsonData.length; i++) {
174
+ const groupItem = this.groupJsonData[i]
175
+ for (let j = 0; j < groupItem.groupItems.length; j++) {
176
+ const item = groupItem.groupItems[j]
177
+ this.setFormProps(formData, item)
178
+ }
179
+ }
180
+ this.form = formData
181
+ try {
182
+ if (funcData.queryFormInit) {
183
+ if (!funcData.queryFormInit.startsWith('async')) {
184
+ funcData.queryFormInit = `async ${funcData.queryFormInit}`
185
+ }
186
+ executeStrFunctionByContext(this, funcData.queryFormInit, [util, runLogic, getConfigByNameAsync]).then(res => {
187
+ this.form = Object.assign({}, this.form, res)
188
+ })
189
+ }
190
+ } catch (e) {
191
+ console.error('queryFormInit error', e)
192
+ }
193
+ this.getDataParams = getDataParams
194
+ this.loaded = true
195
+ },
196
+ onItemMounted (_h) {
197
+ this.mountedCount += 1
198
+ if (this.mountedCount === this.realJsonData.length) {
199
+ // 所有 x-from-item 挂载完成,触发父组件中的 xTable.init
200
+ this.$emit('itemsMounted')
201
+ }
202
+ },
203
+ // 时间组件赋默认值
204
+ getDateRange ({ type, queryFormDefault: defaultValue, queryType, queryValueFormat: defaultFormat, name }) {
205
+ const formatMap = {
206
+ yearPicker: 'YYYY',
207
+ yearRangePicker: 'YYYY',
208
+ monthPicker: 'YYYY-MM',
209
+ monthRangePicker: 'YYYY-MM',
210
+ datePicker: 'YYYY-MM-DD',
211
+ rangePicker: 'YYYY-MM-DD HH:mm:ss',
212
+ }
213
+ let format = formatMap[type]
214
+
215
+ if (defaultFormat) {
216
+ format = defaultFormat
217
+ }
218
+
219
+ let start, end
220
+
221
+ switch (defaultValue) {
222
+ case 'curYear':
223
+ start = moment().startOf('year').format(format)
224
+ end = moment().endOf('year').format(format)
225
+ break
226
+ case 'curMonth':
227
+ start = moment().startOf('month').format(format)
228
+ end = moment().endOf('month').format(format)
229
+ break
230
+ case 'curDay':
231
+ start = moment().startOf('day').format(format)
232
+ end = moment().endOf('day').format(format)
233
+ break
234
+ case 'curTime':
235
+ start = moment().format(format)
236
+ end = moment().format(format)
237
+ break
238
+ default:
239
+ return undefined
240
+ }
241
+ if (['monthPicker', 'yearPicker', 'datePicker'].includes(type)) {
242
+ if (queryType === 'BETWEEN') {
243
+ return [start, end]
244
+ }
245
+ if (name.indexOf('开始') > -1 || name.indexOf('起始') > -1) {
246
+ return start
247
+ } else {
248
+ return end
249
+ }
250
+ } else if (['rangePicker', 'yearRangePicker', 'monthRangePicker'].includes(type)) {
251
+ return [start, end]
252
+ }
253
+ return [start, end]
254
+ },
255
+ setFormProps (formData, item) {
256
+ formData[item.model] = undefined
257
+ if (item.queryFormDefault) {
258
+ if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(item.type)) {
259
+ formData[item.model] = this.getDateRange(item)
260
+ } else if (['treeSelect', 'select', 'checkbox'].includes(item.type) && ['curOrgId', 'curDepId', 'curUserId'].includes(item.queryFormDefault)) {
261
+ if (item.queryFormDefault === 'curOrgId') {
262
+ formData[item.model] = item.type === 'select' ? this.currUser.orgid : [this.currUser.orgid]
263
+ }
264
+ if (item.queryFormDefault === 'curDepId') {
265
+ formData[item.model] = item.type === 'select' ? this.currUser.depids : [this.currUser.depids]
266
+ }
267
+ if (item.queryFormDefault === 'curUserId') {
268
+ formData[item.model] = item.type === 'select' ? this.currUser.id : [this.currUser.id]
269
+ }
270
+ } else {
271
+ formData[item.model] = item.queryFormDefault
272
+ }
273
+ if (item.forceQueryDefault) {
274
+ this.defaultMap[item.model] = formData[item.model]
275
+ }
276
+ } else {
277
+ if (['datePicker', 'rangePicker', 'yearPicker', 'monthPicker', 'yearRangePicker', 'monthRangePicker'].includes(item.type)) {
278
+ if (item.queryType === 'BETWEEN') {
279
+ formData[item.model] = []
280
+ }
281
+ }
282
+ }
283
+ if (item.rule) {
284
+ this.rules[item.model] = []
285
+ const required = item.rule.queryRequired ? item.rule.queryRequired === true || item.rule.queryRequired === 'true' : false
286
+ let trigger
287
+ let message
288
+ if (required) {
289
+ switch (item.type) {
290
+ case 'select':
291
+ case 'checkbox':
292
+ case 'radio':
293
+ case 'treeSelect':
294
+ case 'rangePicker':
295
+ case 'monthPicker':
296
+ case 'yearPicker':
297
+ case 'datePicker':
298
+ case 'file':
299
+ case 'image':
300
+ case 'citySelect':
301
+ case 'addressSearch':
302
+ case 'personSetting':
303
+ message = '请选择' + item.name
304
+ trigger = 'change'
305
+ break
306
+ default:
307
+ message = '请输入' + item.name
308
+ trigger = 'blur'
309
+ }
310
+ this.rules[item.model].push({
311
+ required: true,
312
+ message: message,
313
+ trigger: trigger
314
+ })
315
+ }
316
+
317
+ switch (item.rule.queryType) {
318
+ case 'customJs': {
319
+ this.rules[item.model].push({
320
+ validator: (rule, value, callback) => {
321
+ this.customJsValidate(rule, value, callback, item)
322
+ },
323
+ trigger: 'blur'
324
+ })
325
+ break
326
+ }
327
+ }
328
+ }
329
+ },
330
+ customJsValidate (rule, value, callback, item) {
331
+ if (item.rule.customQueryValidatorFunc) {
332
+ executeStrFunctionByContext(this, item.rule.customQueryValidatorFunc, [rule, value, callback, this.form, item, util, runLogic, getConfigByNameAsync])
333
+ } else {
334
+ callback()
335
+ }
336
+ },
337
+ toggleAdvanced () {
338
+ this.advanced = !this.advanced
339
+ this.$emit('toggleAdvanced')
340
+ },
341
+ toggleVisible () {
342
+ this.visible = !this.visible
343
+ return this.visible
344
+ },
345
+ resetForm () {
346
+ this.$refs.form.resetFields()
347
+ },
348
+ onSubmit () {
349
+ this.$refs.form.validate(valid => {
350
+ for (const key of Object.keys(this.form)) {
351
+ if (this.form[key] === null || this.form[key] === '') {
352
+ this.form[key] = undefined
353
+ }
354
+ if (Array.isArray(this.form[key]) && this.form[key].length === 0) {
355
+ this.form[key] = undefined
356
+ }
357
+ // 如果 form 中没有值,但是有默认值
358
+ if (this.form[key] === undefined && this.defaultMap[key] !== undefined) {
359
+ this.form = Object.assign({}, this.form, this.defaultMap)
360
+ }
361
+ }
362
+ const requestParameters = Object.assign({}, this.form)
363
+ const data = {
364
+ valid: valid,
365
+ form: requestParameters
366
+ }
367
+ this.$emit('onSubmit', data)
368
+ })
369
+ },
370
+ exports () {
371
+ this.$emit('exports', this.form)
372
+ },
373
+ setForm (obj) {
374
+ this.form = Object.assign(this.form, obj)
375
+ },
376
+ }
377
+ }
378
+ </script>
379
+ <style lang="less" scoped>
380
+ :deep(.ant-form-inline .ant-form-item) {
381
+ margin-right: 0px;
382
+ margin-top: 0px;
383
+ margin-bottom: 12px;
384
+
385
+ .ant-form-item-control-wrapper {
386
+ min-width: 0;
387
+ }
388
+ }
389
+
390
+ :deep(.table-page-search-wrapper .table-page-search-submitButtons) {
391
+ margin-top: 0px;
392
+ }
393
+ </style>