t20-common-lib 0.15.17 → 0.15.19

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "t20-common-lib",
3
- "version": "0.15.17",
3
+ "version": "0.15.19",
4
4
  "description": "T20",
5
5
  "private": false,
6
6
  "main": "dist/index.js",
@@ -58,7 +58,7 @@ export default {
58
58
  watch: {},
59
59
  methods: {
60
60
  changeFn(val) {
61
- this.$emit('change')
61
+ this.$emit('change', val)
62
62
  }
63
63
  }
64
64
  }
@@ -51,7 +51,9 @@ export default {
51
51
  return "";
52
52
  },
53
53
  set(val) {
54
- this.$emit("input", `${val},${this._value2 || this._value2===0?this._value2 : ''}`);
54
+ const nextValue = `${val},${this._value2 || this._value2===0?this._value2 : ''}`;
55
+ this.$emit("input", nextValue);
56
+ this.$emit("change", nextValue);
55
57
  },
56
58
  },
57
59
  _value2: {
@@ -62,7 +64,9 @@ export default {
62
64
  return "";
63
65
  },
64
66
  set(val) {
65
- this.$emit("input", `${this._value1},${val || val===0?val : ''}`);
67
+ const nextValue = `${this._value1},${val || val===0?val : ''}`;
68
+ this.$emit("input", nextValue);
69
+ this.$emit("change", nextValue);
66
70
  },
67
71
  },
68
72
  },
@@ -51,6 +51,7 @@ export default {
51
51
  set(value) {
52
52
  this.changeTime(value);
53
53
  this.$emit("input", value || []);
54
+ this.$emit("change", value || []);
54
55
  },
55
56
  },
56
57
  },
@@ -79,7 +79,9 @@ export default {
79
79
  return "";
80
80
  },
81
81
  set(val) {
82
- this.$emit("input", `${val}${this.value2}`);
82
+ const nextValue = `${val}${this.value2}`;
83
+ this.$emit("input", nextValue);
84
+ this.$emit("change", nextValue);
83
85
  },
84
86
  },
85
87
  value2: {
@@ -92,7 +94,9 @@ export default {
92
94
  return "D";
93
95
  },
94
96
  set(val) {
95
- this.$emit("input", `${this.value1}${val}`);
97
+ const nextValue = `${this.value1}${val}`;
98
+ this.$emit("input", nextValue);
99
+ this.$emit("change", nextValue);
96
100
  },
97
101
  },
98
102
  },
@@ -30,6 +30,7 @@ export default {
30
30
  },
31
31
  set(value) {
32
32
  this.$emit("input", value);
33
+ this.$emit("change", value);
33
34
  },
34
35
  },
35
36
  },
@@ -38,6 +38,7 @@ export default {
38
38
  methods: {
39
39
  changeTime(val) {
40
40
  this.$emit("input", val ? `${val[0]},${val[1]}` : '');
41
+ this.$emit("change", val ? `${val[0]},${val[1]}` : '');
41
42
  },
42
43
  },
43
44
  watch: {
@@ -118,7 +118,7 @@ export default {
118
118
  },
119
119
  async changeFn(val) {
120
120
  let item = Array.isArray(this.options) ? this.options.find(t => t.value == val) : {}
121
- this.$emit('change', item || {})
121
+ this.$emit('change', val, item || {})
122
122
  },
123
123
  async init() {
124
124
  if (!this.items?.api?.apiUrl || !this.items?.api?.requestMethod) {
@@ -34,6 +34,7 @@ export default {
34
34
  },
35
35
  set(value) {
36
36
  this.$emit("input", value);
37
+ this.$emit("change", value);
37
38
  },
38
39
  },
39
40
  },
@@ -30,6 +30,7 @@ export default {
30
30
  },
31
31
  set(value) {
32
32
  this.$emit("input", value);
33
+ this.$emit("change", value);
33
34
  },
34
35
  },
35
36
  _dNum() {
@@ -24,6 +24,7 @@ export default {
24
24
  changeTime() {
25
25
  this.$emit("update:label", this.startValue + "~" + this.endValue);
26
26
  this.$emit("input", [this.startValue, this.endValue]);
27
+ this.$emit("change", [this.startValue, this.endValue]);
27
28
  },
28
29
  },
29
30
  watch: {
@@ -243,7 +243,7 @@ export default {
243
243
  },
244
244
  changeFn(val) {
245
245
  let item = this.options.find(t => t.value == val);
246
- this.$emit("change", item)
246
+ this.$emit("change", val, item)
247
247
  },
248
248
  changVariable(val){
249
249
  if (val == '${inputValue}') return this.useDefaule ? (this.items?.api?.defaultInputValue || this.label ||this._value || "") : this.query;
@@ -41,6 +41,7 @@ export default {
41
41
  let res = (this.items.options || []).find(row => row.value == value)
42
42
  this.$emit(`update:label`, res?.label)
43
43
  this.$emit('input', value)
44
+ this.$emit('change', value)
44
45
  }
45
46
  },
46
47
  _options: {
@@ -39,6 +39,7 @@ export default {
39
39
  },
40
40
  set(value) {
41
41
  this.$emit("input", value);
42
+ this.$emit("change", value);
42
43
  },
43
44
  },
44
45
  },
@@ -129,7 +129,7 @@ export default {
129
129
  },
130
130
  changeTree(val) {
131
131
  let item = this.options.find(t => t[this.items?.api?.valueKey] == val)
132
- this.$emit('change', item)
132
+ this.$emit('change', val, item)
133
133
  }
134
134
  }
135
135
  }
@@ -25,6 +25,7 @@ export default {
25
25
  set(value) {
26
26
  this.$emit(`update:label`, value==1? this.$l('是'): this.$l('否'));
27
27
  this.$emit("input", value);
28
+ this.$emit("change", value);
28
29
  },
29
30
  },
30
31
  },
@@ -42,6 +42,7 @@ export default {
42
42
  },
43
43
  set(value) {
44
44
  this.$emit("input", value);
45
+ this.$emit("change", value);
45
46
  },
46
47
  },
47
48
  },
@@ -86,14 +86,8 @@
86
86
 
87
87
  <script>
88
88
  /**
89
- * 联动能力(由 linkageMethod / linkage 事件在页面侧编写逻辑):
90
- * 1. A 控制 B 显隐 — setFieldShow
91
- * 2. A 控制 B 必填 — setFieldRequired
92
- * 3. A 控制 B 可编辑 — setFieldEditable
93
- * 4. A 控制 B 值/名称回显或下拉项 — setFieldValue、setFieldLabelValue、setFieldOptions
94
- * 5. A 控制 B 渲染哪种组件 — setFieldElementType(须为 elementTypeChange 中已配置的枚举)
95
- *
96
- * fieldControlList:与 dynamicData 同时传入,仅在收到模版时按 fieldNo 与 elements[].prop 合并一次 isShow、showName→label、isRequired;之后渲染均以合并后的 mergedTemplateBase 为唯一数据源。
89
+ * fieldControlList:与 dynamicData 同时传入,仅在收到模版时按 fieldNo 与 elements[].prop
90
+ * 合并一次 isShow、showName→label、isRequired;之后渲染均以合并后的 mergedTemplateBase 为唯一数据源。
97
91
  */
98
92
  import { fileUploadTableMixin } from '../mixins/fileUpload'
99
93
  // 复用 Demo 中的字段组件,按模板的 elementType 动态渲染
@@ -124,11 +118,6 @@ export default {
124
118
  type: Object,
125
119
  default: () => ({})
126
120
  },
127
- // 页面侧联动处理函数,由外部自由编排联动逻辑
128
- linkageMethod: {
129
- type: Function,
130
- default: null
131
- },
132
121
  /** 字段控制配置,与 dynamicData 一并传入;仅整合一次 */
133
122
  fieldControlList: {
134
123
  type: Array,
@@ -173,7 +162,7 @@ export default {
173
162
  runtimeTemplate: { units: [] },
174
163
  // 联动写入的 options / elementType:每次从 mergedTemplateBase 克隆后会合并回来,避免被重置清空
175
164
  linkageFieldOverrides: {},
176
- // 避免联动写值导致 watch 循环触发
165
+ // 避免重建模板过程中 watch 循环触发
177
166
  isApplyingLinkage: false,
178
167
  // 模板字段类型 -> 组件名映射;后续扩展新组件时在这里补
179
168
  elementTypeChange: {
@@ -228,15 +217,10 @@ export default {
228
217
  deep: true,
229
218
  handler() {
230
219
  if (this.isApplyingLinkage) return
220
+ // 编辑场景下 value 可能由页面先行组装,等模板就绪后仅补齐缺失字段,不覆盖已传数据。
221
+ if (!this.formGroups.length) return
231
222
  this.ensureFormDataShape()
232
223
  }
233
- },
234
- formData: {
235
- deep: true,
236
- handler() {
237
- if (this.isApplyingLinkage) return
238
- this.applyFieldStates()
239
- }
240
224
  }
241
225
  },
242
226
  methods: {
@@ -366,14 +350,11 @@ export default {
366
350
  },
367
351
  setFieldValue(groupProp, fieldProp, value) {
368
352
  const sourceFormData = this.formData && typeof this.formData === 'object' ? this.formData : {}
369
- const groupData = {
370
- ...(sourceFormData[groupProp] || {})
371
- }
372
- groupData[fieldProp] = value
373
- this.formData = {
374
- ...sourceFormData,
375
- [groupProp]: groupData
353
+ if (!sourceFormData[groupProp] || typeof sourceFormData[groupProp] !== 'object' || Array.isArray(sourceFormData[groupProp])) {
354
+ this.$set(sourceFormData, groupProp, {})
376
355
  }
356
+ this.$set(sourceFormData[groupProp], fieldProp, value)
357
+ this.$emit('input', sourceFormData)
377
358
  },
378
359
  /**
379
360
  * 场景4:与 value 配套的展示字段(模板里的 nameProp),用于下拉等回显名称。
@@ -435,29 +416,6 @@ export default {
435
416
  })
436
417
  })
437
418
  },
438
- buildLinkageApi() {
439
- return {
440
- formData: this.formData,
441
- formGroups: this.formGroups,
442
- getGroup: this.getGroup,
443
- getField: this.getField,
444
- setGroupShow: this.setGroupShow,
445
- setFieldShow: this.setFieldShow,
446
- setFieldRequired: this.setFieldRequired,
447
- setFieldEditable: this.setFieldEditable,
448
- setFieldValue: this.setFieldValue,
449
- setFieldLabelValue: this.setFieldLabelValue,
450
- setFieldOptions: this.setFieldOptions,
451
- setFieldElementType: this.setFieldElementType
452
- }
453
- },
454
- runExternalLinkage() {
455
- const linkageApi = this.buildLinkageApi()
456
- if (typeof this.linkageMethod === 'function') {
457
- this.linkageMethod(linkageApi)
458
- }
459
- this.$emit('linkage', linkageApi)
460
- },
461
419
  applyFieldStates() {
462
420
  if (!this.mergedTemplateBase?.units) return
463
421
  this.isApplyingLinkage = true
@@ -473,14 +431,13 @@ export default {
473
431
  })
474
432
  this.runtimeTemplate = nextTemplate
475
433
  this.applyLinkageOverrides()
476
- this.runExternalLinkage()
477
434
  this.formGroups.forEach(group => {
478
435
  ;(group.elements || []).forEach(item => {
479
436
  this.setFieldRule(group.prop, item)
480
437
  })
481
438
  })
482
439
  this.$nextTick(() => {
483
- // linkageMethod 过程中可能改写显隐/必填规则,统一清理校验态,避免联动触发页面校验提示。
440
+ // 模板重建后统一清理校验态,避免规则变化导致页面出现历史校验提示。
484
441
  if (this.$refs.dynamicForms && typeof this.$refs.dynamicForms.clearValidate === 'function') {
485
442
  this.$refs.dynamicForms.clearValidate()
486
443
  }