@zhijiancloud/bpm 0.0.6 → 0.0.7

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 (97) hide show
  1. package/components/api/batch-loader.js +61 -0
  2. package/components/api/index.js +108 -0
  3. package/components/css/bpmAudit.less +13 -0
  4. package/components/css/bpmMulFile.less +9 -5
  5. package/components/css/bpmSelectEntranceForm.less +62 -0
  6. package/components/css/bpmSelectHouseOwner.less +30 -0
  7. package/components/css/bpmSignature.less +40 -0
  8. package/components/css/bpmText.less +0 -10
  9. package/components/css/common.less +43 -0
  10. package/components/css/index.less +6 -1
  11. package/components/lib/bpmAudit/src/main.vue +35 -4
  12. package/components/lib/bpmAudit/src/part/auditor/audit-new.vue +534 -0
  13. package/components/lib/bpmAudit/src/part/auditor/audit-select.vue +127 -0
  14. package/components/lib/bpmAudit/src/part/auditor/audit-with-others.vue +634 -0
  15. package/components/lib/bpmAudit/src/part/auditor.vue +54 -0
  16. package/components/lib/bpmAudit/src/part/editor.vue +7 -5
  17. package/components/lib/bpmAudit/src/part/reader.vue +10 -9
  18. package/components/lib/bpmDateTime/src/part/editor.vue +3 -1
  19. package/components/lib/bpmField/src/main.vue +5 -150
  20. package/components/lib/bpmFieldsFilter/index.js +7 -0
  21. package/components/lib/bpmFieldsFilter/src/main.vue +324 -0
  22. package/components/lib/bpmFormField/index.js +7 -0
  23. package/components/lib/bpmFormField/src/lib/form_mixin.js +818 -0
  24. package/components/lib/bpmFormField/src/lib/mixin.js +245 -0
  25. package/components/lib/bpmFormField/src/main.vue +35 -0
  26. package/components/lib/bpmMulFile/src/main.vue +0 -1
  27. package/components/lib/bpmMulFile/src/part/editor.vue +1 -1
  28. package/components/lib/bpmMulFile/src/part/reader.vue +12 -33
  29. package/components/lib/bpmMulImage/src/main.vue +1 -2
  30. package/components/lib/bpmMulImage/src/part/editor.vue +5 -1
  31. package/components/lib/bpmMulImage/src/part/reader.vue +14 -4
  32. package/components/lib/bpmNumber/src/part/editor.vue +8 -9
  33. package/components/lib/bpmSelect/src/part/reader.vue +11 -2
  34. package/components/lib/bpmSelectCheckItem/src/part/editor.vue +3 -7
  35. package/components/lib/bpmSelectEntranceForm/index.js +7 -0
  36. package/components/lib/bpmSelectEntranceForm/src/main.vue +529 -0
  37. package/components/lib/bpmSelectFromField/src/main.vue +1 -0
  38. package/components/lib/bpmSelectFromField/src/part/editor.vue +27 -13
  39. package/components/lib/bpmSelectFromForm/src/part/editor.vue +2 -5
  40. package/components/lib/bpmSelectHouseOwner/index.js +7 -0
  41. package/components/lib/bpmSelectHouseOwner/src/main.vue +102 -0
  42. package/components/lib/bpmSelectHouseOwner/src/part/editor.vue +101 -0
  43. package/components/lib/bpmSelectHouseOwner/src/part/reader.vue +17 -0
  44. package/components/lib/bpmSelectIssue/index.js +7 -0
  45. package/components/lib/bpmSelectIssue/src/main.vue +180 -0
  46. package/components/lib/bpmSignature/index.js +7 -0
  47. package/components/lib/bpmSignature/src/main.vue +248 -0
  48. package/components/lib/bpmSubForm/src/main.vue +25 -3
  49. package/components/lib/bpmTime/src/part/editor.vue +3 -2
  50. package/components/lib/field-const.js +5 -2
  51. package/components/lib/index.ts +32 -2
  52. package/components/mixins/field_base_mixin.vue +188 -0
  53. package/components/vendor/draw.js +240 -0
  54. package/dist/bpmAudit.umd.js +1 -1
  55. package/dist/bpmDateTime.umd.js +1 -1
  56. package/dist/bpmField.umd.js +7 -1
  57. package/dist/bpmField.umd.js.LICENSE.txt +2 -0
  58. package/dist/bpmFieldsFilter.umd.js +8 -0
  59. package/dist/bpmFieldsFilter.umd.js.LICENSE.txt +1 -0
  60. package/dist/bpmFormField.umd.js +8 -0
  61. package/dist/bpmFormField.umd.js.LICENSE.txt +11 -0
  62. package/dist/bpmMulFile.umd.js +1 -1
  63. package/dist/bpmMulImage.umd.js +1 -1
  64. package/dist/bpmNumber.umd.js +1 -1
  65. package/dist/bpmSelect.umd.js +1 -1
  66. package/dist/bpmSelectCheckItem.umd.js +1 -1
  67. package/dist/bpmSelectEntranceForm.umd.js +8 -0
  68. package/dist/bpmSelectEntranceForm.umd.js.LICENSE.txt +1 -0
  69. package/dist/bpmSelectFromField.umd.js +1 -1
  70. package/dist/bpmSelectFromForm.umd.js +1 -1
  71. package/dist/bpmSelectHouseOwner.umd.js +1 -0
  72. package/dist/bpmSelectIssue.umd.js +1 -0
  73. package/dist/bpmSignature.umd.js +2 -0
  74. package/dist/bpmSignature.umd.js.LICENSE.txt +9 -0
  75. package/dist/bpmSubForm.umd.js +1 -1
  76. package/dist/bpmText.umd.js +1 -1
  77. package/dist/bpmTime.umd.js +1 -1
  78. package/dist/css/bpmAudit.css +1 -0
  79. package/dist/css/bpmMulFile.css +1 -1
  80. package/dist/css/bpmSelectEntranceForm.css +1 -0
  81. package/dist/css/bpmSelectHouseOwner.css +1 -0
  82. package/dist/css/bpmSignature.css +1 -0
  83. package/dist/css/bpmText.css +1 -1
  84. package/dist/css/common.css +1 -0
  85. package/dist/css/index.css +1 -1
  86. package/dist/demo.umd.js +1 -1
  87. package/dist/demo2.umd.js +1 -1
  88. package/dist/index.umd.js +7 -1
  89. package/dist/index.umd.js.LICENSE.txt +2 -0
  90. package/package.json +25 -18
  91. package/CHANGELOG.md +0 -27
  92. package/dist/bpmDateTime.umd.js.LICENSE.txt +0 -38
  93. package/dist/bpmNumber.umd.js.LICENSE.txt +0 -38
  94. package/dist/bpmSelect.umd.js.LICENSE.txt +0 -38
  95. package/dist/bpmSelectUser.umd.js +0 -1
  96. package/dist/bpmText.umd.js.LICENSE.txt +0 -38
  97. package/dist/bpmTime.umd.js.LICENSE.txt +0 -38
@@ -0,0 +1,818 @@
1
+ import buildMixin from "./mixin"
2
+ export default function () {
3
+ let mixinOpts = buildMixin()
4
+ _.merge(mixinOpts, {
5
+ data() {
6
+ return {
7
+ unWatchList: [],
8
+ valueUnWatch: null,
9
+ valDependIds: [], //值联动
10
+ selectDependIds: [],// 下拉
11
+ remoteDependIds: [],
12
+ selectFields: null,
13
+ selectList: [], //下拉范围
14
+ quoteContent: {},//远程
15
+ unSelectDependValWatchList: [],
16
+ optAssWatchList: [],
17
+ hasAddOptAssWatch: false,
18
+ scopeDependIds: [],
19
+ subFormOldValMap: {},
20
+ isDelete: false,
21
+ displayHidden: false,
22
+ differenceRowIndexs: [],
23
+ elementMap: {},
24
+ topContainerMode: null,
25
+ nextRely: null,
26
+ loading: false,
27
+ firstFill: true,
28
+ hasFillDefault: false,
29
+ remoteData: []
30
+ }
31
+ },
32
+ created() {
33
+ this.topContainer.$once("beforeDataLoad", (form) => {
34
+ this.toggleValueWatch(false)
35
+ this.clearOptAssWatch()
36
+ })
37
+ this.topContainer.$once("dataLoaded", (form) => {
38
+ this.getMemory()
39
+ this.addOptAssWatch()
40
+ })
41
+ this.topContainer.$once("beforeReloadData", (form) => {
42
+ this.toggleValueWatch(false)
43
+ })
44
+
45
+ if (this.container.isSubForm) {
46
+ this.getMemory()
47
+ this.addOptAssWatch()
48
+ this.$emit('update:isNew', false);
49
+ }
50
+
51
+ this.$bpm.$on("beforeFormSubmit", ({
52
+ mode,
53
+ formData,
54
+ cc,
55
+ _formData
56
+ }) => {
57
+ console.log("触发beforeFormSubmit")
58
+ let fieldPath = this._getFieldPath(true)
59
+ let initVal = _.get(_formData, fieldPath)
60
+ let required = _.get(this.fieldConf, "check.required", false)
61
+ if (_.isNull(this.value) && required || (this.fieldConf.type == 'SelectHouseOwner' && (!this.value.name || !this.value.phone) && required)) {
62
+ _.unset(formData, fieldPath)
63
+ }
64
+ if (_.isArray(this.value) && _.isEmpty(this.value) || _.isNil(this.value) || this.value == '' && this.value !== 0) {
65
+ let size = _.get(this.fieldConf, "check.min_length")
66
+ size = size ? size : _.get(this.fieldConf, "check.min")
67
+ size = size ? size : _.get(this.fieldConf, "check.min_count")
68
+
69
+ if (!size && !required && initVal) {
70
+ _.unset(formData, fieldPath)
71
+ }
72
+ }
73
+
74
+ let container = this.container
75
+ let isSubForm = container.isSubForm
76
+ let optAssMap = _.get(this.fieldConf, "optAssMap")
77
+ if (!optAssMap || _.isEmpty(optAssMap)) return
78
+ let isInclude = true
79
+ _.map(optAssMap, (visibleVals, field) => {
80
+ field = field.replace(/&/g, ".")
81
+ let relField = _.split(field, ".")
82
+ relField = _.last(relField)
83
+ let typ = _.get(this.elementMap, `${relField}.type`)
84
+ let isMul = typ ? typ.substr(0, 3) == "Mul" : false
85
+ let path = this._getPath(relField)
86
+ if (path != relField && isSubForm) {
87
+ field = `${container.fieldConf.id}&${this.rowIndex}&${relField}`
88
+ }
89
+ field = field.replace(/&/g, ".")
90
+ let val = _.get(this.form, `formData.${field}`)
91
+
92
+ if (isMul) {
93
+ // let isIncludeInMul = false
94
+ // _.each(val, valItem => {
95
+ // valItem = _.toString(valItem)
96
+ // if (_.includes(visibleVals, valItem)) isIncludeInMul = true
97
+ // })
98
+ //visible = isInclude && isIncludeInMul
99
+ }
100
+ else {
101
+ let value = _.toString(val)
102
+ isInclude = isInclude && _.includes(visibleVals, value)
103
+ }
104
+
105
+ })
106
+ if (!isInclude) {
107
+ _.unset(formData, fieldPath)
108
+ }
109
+
110
+ })
111
+
112
+
113
+ this.$bpm.$on("afterFormSubmit", ({ mode, errors }) => {
114
+ console.log("触发afterFormSubmit")
115
+ if (!errors) {
116
+ // 检测是不是要做缓存
117
+ console.log("memorable", this.memorable)
118
+ if (this.memorable) {
119
+ let id = this.fieldConf.id
120
+ let type = _.get(this.fieldConf, "value_type")
121
+ this.$bpm.setMemory(mode, `${id}.${type}`, this.value)
122
+ }
123
+ }
124
+ });
125
+
126
+
127
+
128
+ this.$bpm.$on("handeInitRely", ({
129
+ id,
130
+ rowIndex,
131
+ oid,
132
+ lastField
133
+ }) => {
134
+ console.log("触发handeInitRely")
135
+ if (id == this.fieldConf.id && (!this.container.isSubForm || (!_.isNil(rowIndex) && this.container.isSubForm && rowIndex == this.rowIndex))) {
136
+ if (this.topContainer.isCache) {
137
+ this.openRelyInitLoadOnCache(oid, lastField)
138
+ }
139
+ else {
140
+ this.openInitRelyLoad(oid, lastField)
141
+ }
142
+ this.hasFillDefault = true
143
+
144
+ }
145
+ })
146
+ this.$bpm.$on("initRelyComplete", async (container, isLogField) => {
147
+ console.log("触发initRelyComplete")
148
+ if (container === this.container) {
149
+ if (!this.hasFillDefault) {
150
+ await this.fillDefaultValue()
151
+ }
152
+ if (!this.valueUnWatch) await this.toggleValueWatch(true)
153
+ this.addOptAssWatch()
154
+ if (isLogField) {
155
+ this.$emit("valueChanged")
156
+ }
157
+ }
158
+
159
+
160
+ })
161
+
162
+ this.$bpm.$on("handeRelyById", ({ id, rowIndex, oid, lastField }) => {
163
+ console.log("触发handeRelyById")
164
+ if (id == this.fieldConf.id && (!this.container.isSubForm || (!_.isNil(rowIndex) && this.container.isSubForm && rowIndex == this.rowIndex))) {
165
+ this.opeRelyById(oid, lastField)
166
+ }
167
+
168
+ })
169
+
170
+
171
+
172
+
173
+
174
+ },
175
+ provide(){
176
+ return {
177
+ selectOptions : () => this.selectList
178
+ }
179
+ },
180
+ destroyed() {
181
+ this.toggleValueWatch(false)
182
+ if (!this.container.isQuote) {
183
+ //this.$bpm.$off("beforeTableSearch")
184
+ this.$bpm.$off("dataLoaded")
185
+ this.$bpm.$off("beforeFormSubmit")
186
+ this.$bpm.$off("handeInitRely")
187
+ this.$bpm.$off("initRelyComplete")
188
+ this.$bpm.$off("handeRelyById")
189
+ }
190
+
191
+ },
192
+ computed: {
193
+ form() {
194
+ return this.topContainer
195
+ },
196
+ readonly() {
197
+ return !_.get(this.fieldConf, "perm.editable", false)
198
+ },
199
+ disWritable() {
200
+ return !_.get(this.fieldConf, "perm.editable", false) && !_.get(this.fieldConf, "perm.writable", false)
201
+ },
202
+ memorable() {
203
+ return _.get(this.fieldConf, "perm.memorable", false)
204
+ },
205
+ isDetailMode() {
206
+ return this.form.mode == "detail"
207
+ },
208
+ isDeleteMode() {
209
+ return this.form.mode == "delete"
210
+ },
211
+ elements() {
212
+ return _.get(this.form, "formSchema.elements", [])
213
+ },
214
+ description() {
215
+ return _.get(this.fieldConf, "desc", "")
216
+ },
217
+ hideName() {
218
+ return _.get(this.fieldConf, "display.hide_name", false)
219
+ },
220
+ // TODO bpm3 用不上visualAttrs,其功能大都用其他方式实现了,待确认全部处理完,可删除
221
+ visualAttrs() {
222
+ // 获取 error 信息
223
+ let fullFieldPath = this._getFieldPath(true).join(".")
224
+ let formErrors = this.form.formErrors
225
+ let err = formErrors ? formErrors[fullFieldPath] : false
226
+ let conf = this.fieldConf
227
+ let clsNames = []
228
+ let visible = _.get(conf, "perm.visible", false)
229
+ let required = _.get(conf, "check.required", false)
230
+
231
+ if (required && !this.isDetailMode) clsNames.push("q-field-required")
232
+ if (!visible || this.displayHidden) clsNames.push("q-field-hidden")
233
+ if (this.readonly) clsNames.push("readonly")
234
+ let hideName = _.get(this.fieldConf, "display.hide_name", false)
235
+ let isTipField = _.get(this.fieldConf, 'display.is_tip', false)
236
+ if (hideName) clsNames.push("hide-name")
237
+ if (isTipField) clsNames.push('tip-field')
238
+ if (err) {
239
+ this.scrollToElement()
240
+ }
241
+ let isVerticalTypography = this.$bpm.isVerticalTypography
242
+ let isVerticalField = _.includes(['MulImage', 'SubForm', 'XSubForm', 'MulFile', 'Spliter', 'Signature'], conf.type)
243
+ isVerticalTypography = isVerticalTypography && !_.includes(['SubForm', 'XSubForm', 'Spliter'], conf.type)
244
+ if (isVerticalTypography) {
245
+ clsNames.push("col-4")
246
+ }
247
+
248
+ if (conf.type == 'SelectHouseOwner') {
249
+ clsNames.push("select-house-owner")
250
+ }
251
+
252
+ return {
253
+ filled: true,
254
+ hideHint: true,
255
+ disable: !_.get(conf, "perm.editable", true),
256
+ error: !!err,
257
+ errorLabel: _.get(err, "message", ""),
258
+ "class": clsNames,
259
+ orientation: isVerticalField ? 'vertical' : (isVerticalTypography ? 'vertical' : "horizontal")
260
+ }
261
+ },
262
+ isRelyId() {
263
+ return _.includes(this.topContainer.relyIds, this.fieldConf.id)
264
+ },
265
+ isVerticalTypography() {
266
+ return this.$bpm.isVerticalTypography
267
+ }
268
+ },
269
+ mounted() {
270
+ if (this.description) this.insertDesc()
271
+
272
+ },
273
+ methods: {
274
+ getMemory() {
275
+ if (!this.memorable || this.value) return
276
+ //获取记住上一次的值
277
+ let id = this.fieldConf.id
278
+ let type = _.get(this.fieldConf, "value_type")
279
+ this.topContainerMode = this.topContainer.mode
280
+ this.$bpm.checkMemory(this.topContainerMode, (cache) => {
281
+ let value = _.get(cache, `f_fields.${id}.${type}`)
282
+ this.value = value
283
+ }, () => { });
284
+ },
285
+ scrollToElement() {
286
+ // let elem = $(this.$refs.field)
287
+ // elem = _.get(elem, "0.$el")
288
+ // this.topContainer.scrollToElement(elem, this.fieldConf.id)
289
+
290
+ },
291
+
292
+ async openRelyInitLoadOnCache(oid, lastField) {
293
+ await this.fillDefaultValue()
294
+ await this.loadSelectByDepends()
295
+ await this.loadRemoteByDepends(true)
296
+ this.$emit("valueChanged")
297
+ if (lastField == this.fieldConf.id) {
298
+ this.container.relyLoading = false
299
+ }
300
+ this.loading = false
301
+ if (this.container.handleNextRely) await this.container.handleNextRely(this.rowIndex, oid, lastField)
302
+ },
303
+ async openInitRelyLoad(oid, lastField) {
304
+ await this.fillDefaultValue()
305
+ await this.loadSelectByDepends()
306
+ let isBreak = await this.getBreakResult(oid)
307
+ if(!isBreak) await this.loadValByDepends()
308
+ await this.loadRemoteByDepends(true)
309
+ await this.loadRemoteByFieldMap(oid)
310
+ if (lastField == this.fieldConf.id) {
311
+ this.container.relyLoading = false
312
+ }
313
+ this.$emit("valueChanged")
314
+ this.loading = false
315
+
316
+ if (this.container.handleNextRely) await this.container.handleNextRely(this.rowIndex, oid, lastField)
317
+ },
318
+ async opeRelyById(oid, lastField) {
319
+ await this.fillDefaultValue()
320
+ await this.loadSelectByDepends()
321
+ let isBreak = await this.getBreakResult(oid)
322
+ if(!isBreak) await this.loadValByDepends()
323
+ await this.loadRemoteByDepends()
324
+ await this.loadRemoteByFieldMap(oid)
325
+ if (lastField == this.fieldConf.id) {
326
+ this.container.relyLoading = false
327
+ }
328
+ this.loading = false
329
+ if (this.container.handleNextRelyById) await this.container.handleNextRelyById(this.rowIndex, oid, lastField)
330
+
331
+ },
332
+ async getBreakResult(oid){
333
+ let breakRelyMap = this.$bpm.breakRelyMap
334
+ let fields = _.get(breakRelyMap, oid)
335
+ let isInclude = _.includes(fields, this.fieldConf.id)
336
+ return isInclude
337
+ },
338
+ async fillDefaultValue() {
339
+ let resetFields = this.topContainer.resetFields
340
+ if (this.hasFillDefault) {
341
+ this.loading = false
342
+ return
343
+ }
344
+ let isReset = _.includes(resetFields, this.fieldConf.id)
345
+ if (isReset) {
346
+ this.value = null
347
+ this.loading = false
348
+ this.hasFillDefault = true
349
+ return
350
+ }
351
+ let isEVCFirstElem = _.get(this.fieldConf, "default.value.type") == 'EVCFirstElem'
352
+ if (isEVCFirstElem) {
353
+ this.loadSelectListPre(async () => {
354
+ let defaultValue = await this.getConfDefaultValue()
355
+ if (_.isNil(this.value) || defaultValue == this.value) {
356
+ if (!_.isNil(defaultValue)) {
357
+ this.value = defaultValue
358
+ this.loading = false
359
+ this.hasFillDefault = true
360
+ }
361
+ }
362
+ this.loading = false
363
+ this.hasFillDefault = true
364
+ })
365
+ this.loading = false
366
+ return
367
+ }
368
+ let defaultValue = await this.getConfDefaultValue()
369
+ if (_.isNil(this.value) || defaultValue == this.value) {
370
+ if (!_.isNil(defaultValue)) {
371
+ this.value = defaultValue
372
+ }
373
+ }
374
+ this.loading = false
375
+ this.hasFillDefault = true
376
+ },
377
+ setEleMap() {
378
+ let elementMap = {}
379
+ let elements = this.elements
380
+ _.each(elements, (ele) => {
381
+ _.set(elementMap, ele.id, ele)
382
+ _.each(ele.elements || [], subEle => {
383
+ _.set(elementMap, ele.id, ele)
384
+ })
385
+ })
386
+ this.elementMap = elementMap
387
+ },
388
+ isPromise(e) {
389
+ return !!e && typeof e.then == "function";
390
+ },
391
+ toggleValueWatch(flag = true) {
392
+
393
+ if (this.valueUnWatch) {
394
+ this.valueUnWatch()
395
+ this.valueUnWatch = false
396
+ }
397
+
398
+ if (flag) {
399
+ let id = this.fieldConf.id
400
+ let mode = this.container.mode
401
+ let type = _.get(this.fieldConf, "value_type")
402
+ let _oldVal = JSON.stringify(this.value)
403
+ this.valueUnWatch = this.$watch("value", async (value, oldVal) => {
404
+ if (this.isSubForm || this.fieldConf.type == 'Area' || this.fieldConf.type == 'MulArea') {
405
+ let _val = JSON.stringify(value)
406
+ if (_oldVal == _val) {
407
+ if (this.container.handleNextRely) {
408
+ await this.container.handleNextRely(this.rowIndex)
409
+ }
410
+ return
411
+ }
412
+ }
413
+ else if (oldVal == value) {
414
+ if (this.container.handleNextRely) {
415
+ await this.container.handleNextRely(this.rowIndex)
416
+ }
417
+ return
418
+ }
419
+ _oldVal = JSON.stringify(value)
420
+ //值发生变化后触发相关的联动
421
+ this.$emit("valueChanged")
422
+ if (!this.topContainer.loading) {
423
+ this.$bpm.setLocalCache(mode, `${id}.${type}`, value)
424
+ }
425
+ if (!this.container.isSubForm || (this.container.isSubForm && !(_.isUndefined(oldVal) && _.isUndefined(value)))) {
426
+ if (this.container && this.container.handleRelyById) {
427
+ await this.loadRemoteByFieldMap()
428
+ let mappings = _.get(this.fieldConf, "mappings")
429
+ mappings = _.keys(mappings)
430
+ await this.container.handleRelyById(this.fieldConf.id, this.rowIndex, mappings)
431
+ }
432
+ }
433
+ this.firstFill = false
434
+ }, {
435
+ immediate: false,
436
+ deep: true
437
+ })
438
+ }
439
+ },
440
+ loadSelectListPre(cllack) {
441
+ if (this.$refs.fieldComp && this.$refs.fieldComp.preSearch) this.$refs.fieldComp.preSearch(cllack)
442
+ },
443
+ loadSelectByDepends() {
444
+ if (this.readonly) return
445
+ // this.loading = true
446
+ //增加可选列表依赖变化监听
447
+ this.selectDependIds = _.get(this.fieldConf, "range_remote.depends", [])
448
+
449
+ console.log("this.selectDependIds",this.selectDependIds)
450
+
451
+ this.loadSelectLinkage({
452
+ fieldId: this.fieldConf.id
453
+ }, (data) => {
454
+ if (this.fieldConf.type == 'Quote') {
455
+ this.value = _.map(data.data, "form_id")
456
+ this.quoteContent = data
457
+ this.loading = false
458
+ return
459
+ }
460
+ this.selectList = data
461
+
462
+ console.log("this.$refs",this.$refs)
463
+
464
+ //console.log("this.$refs['inner-component']['inner-component']",this.$refs['inner-component']['inner-component'])
465
+
466
+ //this.$refs['inner-component'].$refs['inner-component'].options = [6,6,6,6,6]
467
+
468
+
469
+
470
+
471
+
472
+ console.log("this.selectList",this.selectList)
473
+
474
+ this.loading = false
475
+ })
476
+ },
477
+ async loadRemoteByDepends(isForce) {
478
+ if (this.fieldConf.type != 'OrderSubForm') return
479
+ // this.loading = true
480
+ this.remoteDependIds = _.get(this.fieldConf, "remote.depends", [])
481
+ if (this.remoteDependIds.length || isForce) {
482
+ let depends = this.remoteDependIds
483
+ let dependData = this.getDependData(depends)
484
+ _.map(dependData, (item, key) => {
485
+ if (_.isUndefined(item)) {
486
+ _.unset(dependData, key)
487
+ }
488
+ })
489
+
490
+ if (_.isEmpty(dependData) && !isForce) {
491
+ this.loading = false
492
+ return
493
+ }
494
+ // this.loading = true
495
+ let params = {
496
+ 'fields': dependData,
497
+ 'include_sup': true
498
+ }
499
+ let fieldId = this.fieldConf.id
500
+ let data = await this.$bpm.loadSelectRemoteForm({
501
+ fieldId,
502
+ params,
503
+ cusFormName: this.container.cusFormId || _.get(this.container, "form.cusFormId"),
504
+ container: this.container
505
+ })
506
+
507
+ console.log("remoteData",data)
508
+
509
+ this.remoteData = data
510
+ this.loading = false
511
+ }
512
+ },
513
+ async loadValByDepends() {
514
+ this.valDependIds = this.disWritable ? [] : _.get(this.fieldConf, "linkage.depends")
515
+ this.scopeDependIds = _.get(this.fieldConf, "scope.depends")
516
+ let linkageMapping = _.get(this.fieldConf, "linkage.mapping")
517
+ let remoteFieldIdMapping = {}
518
+ _.each(linkageMapping, (remoteFieldId, fieldId) => {
519
+ _.set(remoteFieldIdMapping, remoteFieldId, fieldId)
520
+ })
521
+ await this.loadValLinkage({
522
+ fieldId: this.fieldConf.id,
523
+ remoteFieldIdMapping
524
+ })
525
+
526
+ },
527
+ async loadValLinkage({
528
+ fieldId,
529
+ remoteFieldIdMapping,
530
+ }, resolve) {
531
+ let depends = _.concat(this.valDependIds, this.scopeDependIds)
532
+ let dependData = this.getDependData(depends)
533
+ _.map(dependData, (item, key) => {
534
+ if (_.isUndefined(item)) {
535
+ _.unset(dependData, key)
536
+ }
537
+ })
538
+ if (_.isEmpty(dependData)) return
539
+ // this.loading = true
540
+ let params = {
541
+ 'fields': dependData
542
+ }
543
+ if (this.container.isSubForm) {
544
+ let isOnlyMeta = false
545
+ _.map(dependData, (items, value) => {
546
+ let item = _.get(items, this.rowIndex)
547
+ if (_.hasIn(item, "_meta") && _.size(item) == 1 || _.isEmpty(item)) {
548
+ isOnlyMeta = true
549
+ }
550
+ })
551
+ if (isOnlyMeta) {
552
+ this.loading = false
553
+ return
554
+ }
555
+ _.set(params, "idx", this.rowIndex)
556
+ }
557
+
558
+ //普通联动
559
+ let data = await this.$bpm.loadValLinkageResult({
560
+ fieldId,
561
+ params,
562
+ cusFormName: this.container.cusFormId || _.get(this.container, "form.cusFormId"),
563
+ container: this.container
564
+ })
565
+
566
+
567
+ //抄送联动
568
+ let type = _.get(this.fieldConf, "type")
569
+ let nodeId = _.get(this.fieldConf, "node")
570
+ if (_.includes(['"MulSelectUser4CC"'], type)) {
571
+ data = await this.$bpm.loadCCValLinkageResult({
572
+ nodeId,
573
+ params,
574
+ cusFormName: this.container.cusFormId || _.get(this.container, "form.cusFormId"),
575
+ container: this.container
576
+ })
577
+ }
578
+
579
+ //值的依赖,远程拉取为null的情况下不赋值
580
+ if (data === null) {
581
+ this.loading = false
582
+ return
583
+ }
584
+
585
+ if (this.isSubForm) {
586
+ let subFormValue = _.cloneDeep(this.value) || []
587
+ let isXSubForm = this.isXSubForm
588
+ _.each(data, (item, index) => {
589
+ let subFormItem = _.get(subFormValue, index)
590
+ if (!subFormItem) {
591
+ subFormItem = {}
592
+ if (isXSubForm) {
593
+ subFormItem = this.getItem(index)
594
+ }
595
+ }
596
+
597
+ _.each(item, (value, remoteFieldId) => {
598
+ let fieldId = remoteFieldIdMapping[remoteFieldId]
599
+ subFormItem[fieldId] = value
600
+ })
601
+ subFormValue[index] = subFormItem
602
+ })
603
+ this.value = subFormValue
604
+ } else
605
+ if (type == 'SelectHouseOwner') {
606
+ console.log("this.firstListVal", this.firstListVal)
607
+ if (data && !data.name && this.firstListVal) {
608
+ this.value = this.firstListVal
609
+ }
610
+ else {
611
+ this.value = data
612
+ }
613
+ }
614
+ else {
615
+ this.value = data
616
+ }
617
+ this.loading = false
618
+ if (resolve) resolve()
619
+ },
620
+ _getPath(dependId) {
621
+ let elements = this.elements
622
+ let path = dependId
623
+ _.each(elements, (ele) => {
624
+ _.each(ele.elements || [], subEle => {
625
+ if (subEle.id == dependId) {
626
+ path = ele.id
627
+ }
628
+ })
629
+ })
630
+ return path
631
+ },
632
+ getDependData(dependIds) {
633
+ let formData = this.form.formData
634
+ //传递依赖数据 ,并获取联动结果
635
+ let dependData = {}
636
+ _.each(dependIds, dependId => {
637
+ // ? todo: 子表单内,字段之间的依赖映射
638
+
639
+ let path = this._getPath(dependId)
640
+ let value = _.get(formData, path)
641
+ if (dependId != path) {
642
+ let list = []
643
+ _.each(value, (val, index) => {
644
+ let data = {}
645
+ let result = _.get(val, dependId)
646
+ if (result || result === 0) _.set(data, dependId, result)
647
+ //根据后端要求将xsubform的_meta传回
648
+ if (_.hasIn(val, "_meta")) _.set(data, "_meta", val._meta)
649
+ list.push(data)
650
+ })
651
+
652
+ if (dependData[path]) {
653
+ list = _.merge(dependData[path], list)
654
+ }
655
+ value = list
656
+ }
657
+ if (_.isArray(value)) {
658
+ _.each(value, val => {
659
+ _.unset(val, "isNew")
660
+ })
661
+ }
662
+ if (path) _.set(dependData, path, value)
663
+
664
+ })
665
+ return dependData
666
+ },
667
+ loadSelectDepends() {
668
+ let ids = _.get(this.fieldConf, "range_remote.depends", [])
669
+ let dependData = this.getDependData(ids)
670
+ console.log("dependData", dependData)
671
+ if (_.isEmpty(dependData)) return
672
+ this.selectFields = JSON.stringify(dependData)
673
+ },
674
+ async loadSelectLinkage({
675
+ fieldId,
676
+ mergeParams,
677
+ dependVal,
678
+ isForceLoad
679
+ }, resolve) {
680
+ let ids = _.get(this.fieldConf, "range_remote.depends", [])
681
+ let dependData = this.getDependData(ids)
682
+ if (_.isEmpty(dependData)) return
683
+ this.selectFields = JSON.stringify(dependData)
684
+ let params = {
685
+ 'fields': JSON.stringify(dependData)
686
+ }
687
+
688
+ if (this.container.isSubForm) _.set(params, "idx", this.rowIndex)
689
+ let type = this.fieldConf.type
690
+ if (type == "OnlineEditor") {
691
+ params = {
692
+ 'spec': JSON.stringify(dependData)
693
+ }
694
+ }
695
+ if (mergeParams) params = _.merge(params, mergeParams)
696
+ let data = null
697
+ if (_.includes(["MulSelectCheckItem", "SelectRootCategory", "SelectCheckItem", "SelectSort", "MulSelectSort"], type)) {
698
+ data = await this.$bpm.loadSelectLinkageResult({
699
+ fieldId,
700
+ params,
701
+ cusFormName: this.container.cusFormId || _.get(this.container, "form.cusFormId"),
702
+ filed: this.fieldSelf,
703
+ container: this.container
704
+
705
+ })
706
+ } else {
707
+ data = await this.$bpm.searchSelectOpts(
708
+ fieldId,
709
+ "",
710
+ this.container.cusFormId || _.get(this.container, "form.cusFormId"),
711
+ this.fieldSelf,
712
+ false,
713
+ params,
714
+ false
715
+ )
716
+ }
717
+
718
+ if (resolve) resolve(data)
719
+ return data
720
+
721
+ },
722
+ addOptAssWatch() {
723
+ if (this.hasAddOptAssWatch) return
724
+ let optAssMap = _.get(this.fieldConf, "optAssMap")
725
+ let defaultVisible = _.get(this.fieldConf, "perm.visible")
726
+ if (!optAssMap || _.isEmpty(optAssMap) || !defaultVisible) return
727
+ //let i = 0
728
+ let container = this.container
729
+ let isSubForm = container.isSubForm
730
+ _.map(optAssMap, (visibleVals, field) => {
731
+ field = field.replace(/&/g, ".")
732
+ let relField = _.split(field, ".")
733
+ relField = _.last(relField)
734
+ let path = this._getPath(relField)
735
+ let typ = _.get(this.elementMap, `${relField}.type`)
736
+ let isMul = typ ? typ.substr(0, 3) == "Mul" : false
737
+
738
+ let unWatchItem = this.$watch(isSubForm ? `form.formData.${container.fieldConf.id}` : `form.formData.${field}`, () => {
739
+ let visible = true
740
+ _.map(optAssMap, (visibleVals, field) => {
741
+ if (path != relField && isSubForm) {
742
+ field = `${container.fieldConf.id}&${this.rowIndex}&${relField}`
743
+ }
744
+ field = field.replace(/&/g, ".")
745
+ let val = _.get(this.form, `formData.${field}`)
746
+ if (isMul) {
747
+ let isInclude = false
748
+ _.each(val, valItem => {
749
+ valItem = _.toString(valItem)
750
+ if (_.includes(visibleVals, valItem)) isInclude = true
751
+ })
752
+ visible = visible && isInclude
753
+ }
754
+ else {
755
+ val = _.toString(val)
756
+ visible = visible && _.includes(visibleVals, val)
757
+ }
758
+
759
+ })
760
+
761
+ if (isSubForm) {
762
+ this.displayHidden = !visible
763
+
764
+ }
765
+ else {
766
+ this.fieldConf.perm.visible = visible
767
+ }
768
+ this.isDelete = !visible
769
+
770
+ }, {
771
+ immediate: true,
772
+ deep: isSubForm ? true : false
773
+ })
774
+ this.optAssWatchList.push(unWatchItem)
775
+ })
776
+ this.hasAddOptAssWatch = true
777
+ },
778
+ clearOptAssWatch() {
779
+ this.hasAddOptAssWatch = false
780
+ _.each(this.optAssWatchList, unwatchItem => {
781
+ unwatchItem()
782
+ })
783
+ },
784
+ // TODO 这个直接写,不必用插入来操作dom
785
+ insertDesc() {
786
+ //let desc = this.description
787
+ let field = this.$refs.field
788
+ if (field) {
789
+ // let ele = $(field)[0]['$el']
790
+ // $(ele).find(".q-field-label").append("<div style='font-size: 12px;color:#999;' class='desc'>" + this.$xss(desc) + "</div>");
791
+ }
792
+ },
793
+ async loadRemoteByFieldMap(oid) {
794
+ //如果是远程单选且有字段映射,并打断后面相关的字段联动
795
+ let mappings = _.get(this.fieldConf, "mappings")
796
+ if (this.fieldConf.type != 'SelectFromForm' || !mappings || _.isEmpty(mappings) || !this.value) return
797
+ let mappingsResult = await this.getRemoteByFieldMap()
798
+ if (this.container && this.container.changeValueByMapping) this.container.changeValueByMapping(oid, mappingsResult)
799
+ },
800
+ async getRemoteByFieldMap(){
801
+ let mappings = _.get(this.fieldConf, "mappings")
802
+ if (this.fieldConf.type != 'SelectFromForm' || !mappings || _.isEmpty(mappings) || !this.value) return
803
+ let fieldId = _.get(this.fieldConf, "id")
804
+ let data = await this.$bpm.loadRmoteFieldMap({
805
+ fieldId,
806
+ params: {
807
+ form_id: this.value
808
+ },
809
+ cusFormName: this.container.cusFormId || _.get(this.container, "form.cusFormId"),
810
+ container: this.container
811
+ })
812
+ return data.data
813
+ }
814
+
815
+ }
816
+ })
817
+ return mixinOpts
818
+ }