cloud-web-corejs 1.0.54-dev.688 → 1.0.54-dev.689
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 +1 -1
- package/src/components/fileLibrary/index.vue +113 -33
- package/src/components/xform/docs//345/220/216/345/217/260/345/255/227/346/256/265/357/274/210/345/212/250/346/200/201/347/224/237/346/210/220/357/274/211JSON /350/257/264/346/230/216.md" +210 -305
- package/src/components/xform/docs//346/225/260/346/215/256/350/241/250/346/240/274/345/212/250/346/200/201/345/210/227 JSON /350/257/264/346/230/216.md" +657 -0
- package/src/components/xform/form-designer/form-widget/field-widget/fieldMixin.js +80 -14
- package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +18 -13
- package/src/components/xform/form-designer/form-widget/field-widget/number-widget.vue +11 -8
- package/src/components/xform/form-designer/form-widget/field-widget/script-input-widget.vue +143 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +87 -25
- package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/table-column-dialog.vue +5 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/container-table/table-dynamicField-editor.vue +80 -34
- package/src/components/xform/form-designer/setting-panel/property-editor/field-script-input/script-input-editor.vue +54 -0
- package/src/components/xform/form-designer/setting-panel/propertyRegister.js +1 -0
- package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +56 -1
- package/src/components/xform/form-render/container-item/data-table-mixin.js +296 -118
- package/src/components/xform/form-render/container-item/dynamicFieldMixin.js +25 -37
- package/src/components/xform/form-render/container-item/list-h5-item.vue +5 -1
- package/src/components/xform/form-render/indexMixin.js +175 -6
- package/src/components/xform/lang/en-US.js +1 -0
- package/src/components/xform/lang/zh-CN.js +1 -0
- package/src/components/xform/utils/dynamicSchemaUtil.js +312 -0
- package/src/components/xform/utils/tableCellValidateUtil.js +148 -0
- package/src/components/xform/utils/tableColumnHelper.js +21 -1
- package/src/components/xform/utils/util.js +126 -0
|
@@ -8,6 +8,9 @@ import {
|
|
|
8
8
|
getAccessUrl,
|
|
9
9
|
generateId,
|
|
10
10
|
trim,
|
|
11
|
+
isArrayValueWidgetType,
|
|
12
|
+
isAttachmentWidgetType,
|
|
13
|
+
isEmptyArrayFieldValue,
|
|
11
14
|
} from "../../../../../components/xform/utils/util";
|
|
12
15
|
import FormValidators, {
|
|
13
16
|
getRegExp,
|
|
@@ -326,7 +329,8 @@ modules = {
|
|
|
326
329
|
nullValue = undefined;
|
|
327
330
|
} else if (
|
|
328
331
|
widgetType === "checkbox" ||
|
|
329
|
-
(widgetType === "select" && this.field.options.multiple)
|
|
332
|
+
(widgetType === "select" && this.field.options.multiple) ||
|
|
333
|
+
isAttachmentWidgetType(widgetType)
|
|
330
334
|
) {
|
|
331
335
|
nullValue = [];
|
|
332
336
|
} else if (
|
|
@@ -339,11 +343,23 @@ modules = {
|
|
|
339
343
|
if (void 0 === currentData[this.fieldKeyName]) {
|
|
340
344
|
this.$set(currentData, this.fieldKeyName, nullValue);
|
|
341
345
|
}
|
|
346
|
+
if (
|
|
347
|
+
widgetType === "number" &&
|
|
348
|
+
currentData[this.fieldKeyName] === null
|
|
349
|
+
) {
|
|
350
|
+
this.$set(currentData, this.fieldKeyName, undefined);
|
|
351
|
+
}
|
|
342
352
|
if (flag) {
|
|
343
353
|
this.fieldModel = currentData[this.fieldKeyName];
|
|
344
|
-
} else if (
|
|
354
|
+
} else if (
|
|
355
|
+
currentData[this.fieldKeyName] !== null &&
|
|
356
|
+
currentData[this.fieldKeyName] !== undefined
|
|
357
|
+
) {
|
|
345
358
|
this.fieldModel = currentData[this.fieldKeyName];
|
|
346
359
|
} else {
|
|
360
|
+
if (widgetType === "number") {
|
|
361
|
+
this.fieldModel = undefined;
|
|
362
|
+
}
|
|
347
363
|
if (!dataId) {
|
|
348
364
|
//新增
|
|
349
365
|
if (
|
|
@@ -916,19 +932,40 @@ modules = {
|
|
|
916
932
|
result = this.$t1(value, { label });
|
|
917
933
|
return result;
|
|
918
934
|
},
|
|
935
|
+
resolveFieldValidateLabelCode() {
|
|
936
|
+
if (this.field.options.label) {
|
|
937
|
+
return this.field.options.label;
|
|
938
|
+
}
|
|
939
|
+
const columnConfig =
|
|
940
|
+
this.columnConfig || this.tableParam?.column?.params?.columnConfig;
|
|
941
|
+
if (columnConfig?.label) {
|
|
942
|
+
return columnConfig.label;
|
|
943
|
+
}
|
|
944
|
+
return (
|
|
945
|
+
(this.field.options.keyNameEnabled && this.field.options.keyName) ||
|
|
946
|
+
this.field.options.name ||
|
|
947
|
+
""
|
|
948
|
+
);
|
|
949
|
+
},
|
|
919
950
|
getValidationHintMsg() {
|
|
920
951
|
let vldName = this.field.options.validation;
|
|
921
952
|
if (this.field.options.validationHint) {
|
|
922
953
|
return this.$t1(this.field.options.validationHint);
|
|
923
954
|
} else {
|
|
924
|
-
return this.getValidateDefaultMsg(
|
|
955
|
+
return this.getValidateDefaultMsg(
|
|
956
|
+
this.resolveFieldValidateLabelCode(),
|
|
957
|
+
vldName
|
|
958
|
+
);
|
|
925
959
|
}
|
|
926
960
|
},
|
|
927
961
|
getRequiredHintMsg() {
|
|
928
962
|
if (this.field.options.requiredHint) {
|
|
929
963
|
return this.$t1(this.field.options.requiredHint);
|
|
930
964
|
} else {
|
|
931
|
-
return this.getValidateDefaultMsg(
|
|
965
|
+
return this.getValidateDefaultMsg(
|
|
966
|
+
this.resolveFieldValidateLabelCode(),
|
|
967
|
+
"required"
|
|
968
|
+
);
|
|
932
969
|
}
|
|
933
970
|
},
|
|
934
971
|
buildFieldRules() {
|
|
@@ -938,14 +975,37 @@ modules = {
|
|
|
938
975
|
|
|
939
976
|
this.rules.splice(0, this.rules.length); //清空已有
|
|
940
977
|
if (!!this.field.options.required) {
|
|
941
|
-
this.
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
978
|
+
if (isArrayValueWidgetType(this.field.type, this.field.options)) {
|
|
979
|
+
this.rules.push({
|
|
980
|
+
validator: (rule, value, callback) => {
|
|
981
|
+
const actualValue =
|
|
982
|
+
typeof this.getCurrentValue === "function"
|
|
983
|
+
? this.getCurrentValue()
|
|
984
|
+
: value;
|
|
985
|
+
if (
|
|
986
|
+
isEmptyArrayFieldValue(
|
|
987
|
+
actualValue,
|
|
988
|
+
this.field.type,
|
|
989
|
+
this.field.options
|
|
990
|
+
)
|
|
991
|
+
) {
|
|
992
|
+
callback(new Error(this.getRequiredHintMsg()));
|
|
993
|
+
} else {
|
|
994
|
+
callback();
|
|
995
|
+
}
|
|
996
|
+
},
|
|
997
|
+
trigger: ["change", "blur"],
|
|
998
|
+
});
|
|
999
|
+
} else {
|
|
1000
|
+
this.rules.push({
|
|
1001
|
+
required: true,
|
|
1002
|
+
//trigger: ['blur', 'change'],
|
|
1003
|
+
trigger: [
|
|
1004
|
+
"blur",
|
|
1005
|
+
] /* 去掉change事件触发校验,change事件触发时formModel数据尚未更新,导致radio/checkbox必填校验出错!! */,
|
|
1006
|
+
message: this.getRequiredHintMsg(),
|
|
1007
|
+
});
|
|
1008
|
+
}
|
|
949
1009
|
}
|
|
950
1010
|
|
|
951
1011
|
if (!!this.field.options.validation) {
|
|
@@ -1122,8 +1182,8 @@ modules = {
|
|
|
1122
1182
|
this.fieldModel = e;
|
|
1123
1183
|
}
|
|
1124
1184
|
} else if (widgetType === "number") {
|
|
1125
|
-
if (e === undefined) {
|
|
1126
|
-
e =
|
|
1185
|
+
if (e === undefined || e === null) {
|
|
1186
|
+
e = undefined;
|
|
1127
1187
|
this.fieldModel = e;
|
|
1128
1188
|
}
|
|
1129
1189
|
}
|
|
@@ -1592,9 +1652,15 @@ modules = {
|
|
|
1592
1652
|
: (this.fieldModel = ""));
|
|
1593
1653
|
},
|
|
1594
1654
|
getOptionItemValueKey() {
|
|
1655
|
+
if (this.field.options.commonAttributeEnabled) {
|
|
1656
|
+
return this.field.options.valueKey || "sn";
|
|
1657
|
+
}
|
|
1595
1658
|
return this.field.options.valueKey || "value";
|
|
1596
1659
|
},
|
|
1597
1660
|
getOptionItemLabelKey() {
|
|
1661
|
+
if (this.field.options.commonAttributeEnabled) {
|
|
1662
|
+
return this.field.options.labelKey || "value";
|
|
1663
|
+
}
|
|
1598
1664
|
return this.field.options.labelKey || "label";
|
|
1599
1665
|
},
|
|
1600
1666
|
loadRowGloatOptions: function (e) {
|
|
@@ -207,7 +207,10 @@
|
|
|
207
207
|
|
|
208
208
|
<script>
|
|
209
209
|
import i18n from "../../../../../components/xform/utils/i18n";
|
|
210
|
-
import {
|
|
210
|
+
import {
|
|
211
|
+
getSubFormNameByFieldId,
|
|
212
|
+
isVabsearchMultiWidget,
|
|
213
|
+
} from "../../../../../components/xform/utils/util";
|
|
211
214
|
|
|
212
215
|
export default {
|
|
213
216
|
name: "form-item-wrapper",
|
|
@@ -261,7 +264,7 @@ export default {
|
|
|
261
264
|
},
|
|
262
265
|
|
|
263
266
|
label() {
|
|
264
|
-
if (
|
|
267
|
+
if (this.shouldHideFieldLabel()) {
|
|
265
268
|
return "";
|
|
266
269
|
}
|
|
267
270
|
return this.getI18nLabel(this.field.options.label);
|
|
@@ -270,7 +273,7 @@ export default {
|
|
|
270
273
|
},
|
|
271
274
|
|
|
272
275
|
labelWidth() {
|
|
273
|
-
if (
|
|
276
|
+
if (this.shouldHideFieldLabel()) {
|
|
274
277
|
return (!!this.designState ? 5 : 0) + "px"; //设计期间标签最小宽度5像素,以便于鼠标点击可选中组件!!
|
|
275
278
|
}
|
|
276
279
|
|
|
@@ -322,6 +325,13 @@ export default {
|
|
|
322
325
|
this.initShowType();
|
|
323
326
|
},
|
|
324
327
|
methods: {
|
|
328
|
+
shouldHideFieldLabel() {
|
|
329
|
+
if (!!this.field.options.labelHidden) {
|
|
330
|
+
return true;
|
|
331
|
+
}
|
|
332
|
+
// 数据表格列内字段:表头已展示列名,隐藏 form-item 标签
|
|
333
|
+
return this.isSubFormItem();
|
|
334
|
+
},
|
|
325
335
|
isSubFormItem() {
|
|
326
336
|
return !!this.tableParam;
|
|
327
337
|
},
|
|
@@ -380,19 +390,11 @@ export default {
|
|
|
380
390
|
});
|
|
381
391
|
}
|
|
382
392
|
},
|
|
383
|
-
getIsFormItemUnabled() {
|
|
384
|
-
return (
|
|
385
|
-
this.field.type == "vabUpload" || this.field.type == "baseAttachment"
|
|
386
|
-
);
|
|
387
|
-
},
|
|
388
393
|
getRules() {
|
|
389
|
-
if (this.getIsFormItemUnabled()) {
|
|
390
|
-
return null;
|
|
391
|
-
}
|
|
392
394
|
return this.rules;
|
|
393
395
|
},
|
|
394
396
|
getPropName() {
|
|
395
|
-
if (this.formItemProp === "false"
|
|
397
|
+
if (this.formItemProp === "false") {
|
|
396
398
|
return null;
|
|
397
399
|
}
|
|
398
400
|
// if (this.formItemProp) {
|
|
@@ -439,7 +441,10 @@ export default {
|
|
|
439
441
|
let tableWidget = tableRef.widget;
|
|
440
442
|
let fieldKeyName = this.getFieldKeyName(tableWidget);
|
|
441
443
|
let property = this.getFieldKeyName(rowWidget);
|
|
442
|
-
if (
|
|
444
|
+
if (
|
|
445
|
+
this.isVabsearchFlagWidget(rowWidget) &&
|
|
446
|
+
!isVabsearchMultiWidget(rowWidget)
|
|
447
|
+
) {
|
|
443
448
|
property = rowWidget.options.vabSearchName || property;
|
|
444
449
|
}
|
|
445
450
|
let rowIndex = Math.max(obj.rowIndex, 0);
|
|
@@ -85,16 +85,19 @@ export default {
|
|
|
85
85
|
computed: {
|
|
86
86
|
numberValue: {
|
|
87
87
|
get() {
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
const fieldModel = this.fieldModel;
|
|
89
|
+
if (fieldModel === null || fieldModel === undefined) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
return fieldModel;
|
|
90
93
|
},
|
|
91
94
|
set(val) {
|
|
92
|
-
|
|
93
|
-
this.fieldModel = newValue
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
95
|
+
const newValue = val === undefined || val === null ? undefined : val;
|
|
96
|
+
this.fieldModel = newValue;
|
|
97
|
+
const currentData =
|
|
98
|
+
this.tableParam && this.tableParam.row
|
|
99
|
+
? this.tableParam.row
|
|
100
|
+
: this.formModel;
|
|
98
101
|
currentData[this.fieldKeyName] = newValue;
|
|
99
102
|
},
|
|
100
103
|
},
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<form-item-wrapper
|
|
3
|
+
:designer="designer"
|
|
4
|
+
:field="field"
|
|
5
|
+
:rules="rules"
|
|
6
|
+
:design-state="designState"
|
|
7
|
+
:parent-widget="parentWidget"
|
|
8
|
+
:parent-list="parentList"
|
|
9
|
+
:index-of-parent-list="indexOfParentList"
|
|
10
|
+
:sub-form-row-index="subFormRowIndex"
|
|
11
|
+
:sub-form-col-index="subFormColIndex"
|
|
12
|
+
:sub-form-row-id="subFormRowId"
|
|
13
|
+
>
|
|
14
|
+
<div v-if="designState" class="script-input-design-placeholder">
|
|
15
|
+
{{ getI18nLabel(field.options.placeholder) || "脚本输入框" }}
|
|
16
|
+
<span class="script-input-mode">({{ editorMode }})</span>
|
|
17
|
+
</div>
|
|
18
|
+
<template v-else-if="isReadMode">
|
|
19
|
+
<pre class="readonly-mode-field script-input-readonly">{{ fieldModel }}</pre>
|
|
20
|
+
</template>
|
|
21
|
+
<code-editor
|
|
22
|
+
v-else
|
|
23
|
+
v-model="fieldModel"
|
|
24
|
+
:mode="editorMode"
|
|
25
|
+
:readonly="field.options.readonly || field.options.disabled"
|
|
26
|
+
:height="editorHeight"
|
|
27
|
+
:min-lines="editorMinLines"
|
|
28
|
+
:max-lines="editorMaxLines"
|
|
29
|
+
:user-worker="userWorker"
|
|
30
|
+
:resize="!field.options.disabled && !field.options.readonly"
|
|
31
|
+
@input="onEditorInput"
|
|
32
|
+
/>
|
|
33
|
+
</form-item-wrapper>
|
|
34
|
+
</template>
|
|
35
|
+
|
|
36
|
+
<script>
|
|
37
|
+
import FormItemWrapper from "./form-item-wrapper";
|
|
38
|
+
import emitter from "../../../utils/emitter";
|
|
39
|
+
import i18n from "../../../utils/i18n";
|
|
40
|
+
import fieldMixin from "./fieldMixin";
|
|
41
|
+
|
|
42
|
+
export default {
|
|
43
|
+
name: "script-input-widget",
|
|
44
|
+
componentName: "FieldWidget",
|
|
45
|
+
mixins: [emitter, fieldMixin, i18n],
|
|
46
|
+
props: {
|
|
47
|
+
field: Object,
|
|
48
|
+
parentWidget: Object,
|
|
49
|
+
parentList: Array,
|
|
50
|
+
indexOfParentList: Number,
|
|
51
|
+
designer: Object,
|
|
52
|
+
designState: {
|
|
53
|
+
type: Boolean,
|
|
54
|
+
default: false,
|
|
55
|
+
},
|
|
56
|
+
subFormRowIndex: {
|
|
57
|
+
type: Number,
|
|
58
|
+
default: -1,
|
|
59
|
+
},
|
|
60
|
+
subFormColIndex: {
|
|
61
|
+
type: Number,
|
|
62
|
+
default: -1,
|
|
63
|
+
},
|
|
64
|
+
subFormRowId: {
|
|
65
|
+
type: String,
|
|
66
|
+
default: "",
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
components: {
|
|
70
|
+
FormItemWrapper,
|
|
71
|
+
},
|
|
72
|
+
inject: ["refList", "globalOptionData", "globalModel"],
|
|
73
|
+
data() {
|
|
74
|
+
return {
|
|
75
|
+
oldFieldValue: null,
|
|
76
|
+
fieldModel: null,
|
|
77
|
+
rules: [],
|
|
78
|
+
};
|
|
79
|
+
},
|
|
80
|
+
computed: {
|
|
81
|
+
editorMode() {
|
|
82
|
+
return this.field.options.editorMode || "javascript";
|
|
83
|
+
},
|
|
84
|
+
editorHeight() {
|
|
85
|
+
return this.field.options.editorHeight || "200px";
|
|
86
|
+
},
|
|
87
|
+
editorMinLines() {
|
|
88
|
+
return this.field.options.editorMinLines || 8;
|
|
89
|
+
},
|
|
90
|
+
editorMaxLines() {
|
|
91
|
+
return this.field.options.editorMaxLines || 30;
|
|
92
|
+
},
|
|
93
|
+
userWorker() {
|
|
94
|
+
return this.field.options.userWorker === true;
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
created() {
|
|
98
|
+
this.initFieldModel();
|
|
99
|
+
this.registerToRefList();
|
|
100
|
+
this.initEventHandler();
|
|
101
|
+
this.buildFieldRules();
|
|
102
|
+
this.handleOnCreated();
|
|
103
|
+
},
|
|
104
|
+
mounted() {
|
|
105
|
+
this.handleOnMounted();
|
|
106
|
+
},
|
|
107
|
+
beforeDestroy() {
|
|
108
|
+
this.unregisterFromRefList();
|
|
109
|
+
},
|
|
110
|
+
methods: {
|
|
111
|
+
onEditorInput(val) {
|
|
112
|
+
this.handleInputCustomEvent(val);
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
</script>
|
|
117
|
+
|
|
118
|
+
<style lang="scss" scoped>
|
|
119
|
+
@import "~@/styles/global.scss";
|
|
120
|
+
|
|
121
|
+
.script-input-design-placeholder {
|
|
122
|
+
min-height: 120px;
|
|
123
|
+
padding: 12px;
|
|
124
|
+
border: 1px dashed #c0c4cc;
|
|
125
|
+
border-radius: 4px;
|
|
126
|
+
color: #909399;
|
|
127
|
+
font-size: 13px;
|
|
128
|
+
background: #fafafa;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.script-input-mode {
|
|
132
|
+
margin-left: 6px;
|
|
133
|
+
color: #336699;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.script-input-readonly {
|
|
137
|
+
margin: 0;
|
|
138
|
+
white-space: pre-wrap;
|
|
139
|
+
word-break: break-all;
|
|
140
|
+
font-family: Consolas, Monaco, monospace;
|
|
141
|
+
font-size: 12px;
|
|
142
|
+
}
|
|
143
|
+
</style>
|
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div>
|
|
3
|
+
<!-- <el-form-item label-width="0">
|
|
4
|
+
<el-divider class="custom-divider-margin-top">数据集</el-divider>
|
|
5
|
+
</el-form-item>
|
|
6
|
+
<el-form-item :label="i18nt('designer.setting.required')">
|
|
7
|
+
<el-switch v-model="optionModel.required"></el-switch>
|
|
8
|
+
</el-form-item>
|
|
9
|
+
<el-form-item :label="i18nt('designer.setting.requiredHint')">
|
|
10
|
+
<el-input
|
|
11
|
+
v-model="optionModel.requiredHint"
|
|
12
|
+
clearable
|
|
13
|
+
placeholder="留空则使用默认提示"
|
|
14
|
+
></el-input>
|
|
15
|
+
</el-form-item> -->
|
|
16
|
+
<el-form-item label-width="0">
|
|
17
|
+
<el-divider class="custom-divider-margin-top">表格布局</el-divider>
|
|
18
|
+
</el-form-item>
|
|
3
19
|
<el-form-item :label="i18nt('designer.setting.tableWidth')">
|
|
4
20
|
<el-input v-model="optionModel.tableWidth"></el-input>
|
|
5
21
|
</el-form-item>
|
|
@@ -135,9 +151,19 @@
|
|
|
135
151
|
<el-radio label="api">接口动态列</el-radio>
|
|
136
152
|
</el-radio-group>
|
|
137
153
|
</el-form-item>
|
|
138
|
-
<div
|
|
139
|
-
|
|
140
|
-
|
|
154
|
+
<div
|
|
155
|
+
v-if="optionModel.dynamicColumnSourceType === 'script'"
|
|
156
|
+
class="dynamic-column-block"
|
|
157
|
+
>
|
|
158
|
+
<div class="form-section-label">
|
|
159
|
+
前端列脚本
|
|
160
|
+
<el-tooltip effect="light" placement="top">
|
|
161
|
+
<div slot="content" class="field-tip-content">
|
|
162
|
+
不调接口,脚本直接 return 列配置
|
|
163
|
+
</div>
|
|
164
|
+
<i class="el-icon-info label-tip-icon"></i>
|
|
165
|
+
</el-tooltip>
|
|
166
|
+
</div>
|
|
141
167
|
<div class="data-table-editor-subsection">
|
|
142
168
|
<el-form-item label="列脚本">
|
|
143
169
|
<a
|
|
@@ -153,18 +179,38 @@
|
|
|
153
179
|
</el-form-item>
|
|
154
180
|
</div>
|
|
155
181
|
</div>
|
|
156
|
-
<div
|
|
157
|
-
|
|
158
|
-
|
|
182
|
+
<div
|
|
183
|
+
v-if="optionModel.dynamicColumnSourceType === 'api'"
|
|
184
|
+
class="dynamic-column-block"
|
|
185
|
+
>
|
|
186
|
+
<div class="form-section-label">
|
|
187
|
+
接口动态列
|
|
188
|
+
<el-tooltip effect="light" placement="top">
|
|
189
|
+
<div slot="content" class="field-tip-content">
|
|
190
|
+
打开表单时请求后台脚本,返回字段/列定义(格式与「表头后台字段」一致,详见
|
|
191
|
+
docs/数据表格动态列 JSON 说明.md)
|
|
192
|
+
</div>
|
|
193
|
+
<i class="el-icon-info label-tip-icon"></i>
|
|
194
|
+
</el-tooltip>
|
|
195
|
+
</div>
|
|
159
196
|
<div class="data-table-editor-subsection">
|
|
160
197
|
<el-form-item label="脚本编码">
|
|
161
198
|
<el-input
|
|
162
199
|
v-model="optionModel.dynamicColumnScriptCode"
|
|
163
200
|
clearable
|
|
164
|
-
placeholder="
|
|
201
|
+
placeholder="scriptCode 或 formCode/scriptCode"
|
|
165
202
|
></el-input>
|
|
166
203
|
</el-form-item>
|
|
167
|
-
<el-form-item
|
|
204
|
+
<el-form-item>
|
|
205
|
+
<span slot="label">
|
|
206
|
+
额外参数
|
|
207
|
+
<el-tooltip effect="light" placement="top">
|
|
208
|
+
<div slot="content" class="field-tip-content">
|
|
209
|
+
格式: return { bizType: this.formModel.type }
|
|
210
|
+
</div>
|
|
211
|
+
<i class="el-icon-info label-tip-icon"></i>
|
|
212
|
+
</el-tooltip>
|
|
213
|
+
</span>
|
|
168
214
|
<a
|
|
169
215
|
href="javascript:void(0);"
|
|
170
216
|
class="a-link link-oneLind"
|
|
@@ -178,37 +224,40 @@
|
|
|
178
224
|
</el-form-item>
|
|
179
225
|
<el-form-item>
|
|
180
226
|
<span slot="label">
|
|
181
|
-
|
|
227
|
+
转换脚本
|
|
182
228
|
<el-tooltip effect="light" placement="top">
|
|
183
|
-
<div slot="content"
|
|
184
|
-
|
|
185
|
-
|
|
229
|
+
<div slot="content" class="field-tip-content">
|
|
230
|
+
可选。入参 res,返回标准定义数组;不填时默认取
|
|
231
|
+
res.objx(数组)或 res.objx.fields / res.objx.columns
|
|
186
232
|
</div>
|
|
187
|
-
<i class="el-icon-info"></i>
|
|
233
|
+
<i class="el-icon-info label-tip-icon"></i>
|
|
188
234
|
</el-tooltip>
|
|
189
235
|
</span>
|
|
190
236
|
<a
|
|
191
237
|
href="javascript:void(0);"
|
|
192
238
|
class="a-link link-oneLind"
|
|
193
|
-
@click="
|
|
239
|
+
@click="editDynamicSchemaConvert"
|
|
194
240
|
>
|
|
195
|
-
<span>{{
|
|
241
|
+
<span>{{ dynamicSchemaConvertDisplay }}</span>
|
|
196
242
|
<i class="el-icon-edit"></i>
|
|
197
243
|
</a>
|
|
198
244
|
</el-form-item>
|
|
199
245
|
</div>
|
|
200
246
|
</div>
|
|
201
|
-
<div
|
|
247
|
+
<div
|
|
248
|
+
v-if="optionModel.dynamicColumnSourceType !== 'none'"
|
|
249
|
+
class="dynamic-column-block"
|
|
250
|
+
>
|
|
202
251
|
<div class="data-table-editor-subsection">
|
|
203
252
|
<el-form-item>
|
|
204
253
|
<span slot="label">
|
|
205
254
|
加载条件
|
|
206
255
|
<el-tooltip effect="light" placement="top">
|
|
207
|
-
<div slot="content"
|
|
256
|
+
<div slot="content" class="field-tip-content">
|
|
208
257
|
表格初始化加载动态列前执行。<br />
|
|
209
258
|
<code>return false</code> 时不加载;不配置则默认加载。
|
|
210
259
|
</div>
|
|
211
|
-
<i class="el-icon-info"></i>
|
|
260
|
+
<i class="el-icon-info label-tip-icon"></i>
|
|
212
261
|
</el-tooltip>
|
|
213
262
|
</span>
|
|
214
263
|
<a
|
|
@@ -224,15 +273,15 @@
|
|
|
224
273
|
</el-form-item>
|
|
225
274
|
</div>
|
|
226
275
|
</div>
|
|
227
|
-
<el-form-item v-if="optionModel.dynamicColumnSourceType !== 'none'"
|
|
276
|
+
<el-form-item v-if="optionModel.dynamicColumnSourceType !== 'none'">
|
|
228
277
|
<span slot="label">
|
|
229
278
|
动态列模式
|
|
230
279
|
<el-tooltip effect="light" placement="top">
|
|
231
|
-
<div slot="content"
|
|
280
|
+
<div slot="content" class="field-tip-content">
|
|
232
281
|
对<strong>生效的动态列</strong>与静态列的合并方式:<br />
|
|
233
282
|
追加 — 静态列 + 动态列;替换 — 仅动态列。
|
|
234
283
|
</div>
|
|
235
|
-
<i class="el-icon-info"></i>
|
|
284
|
+
<i class="el-icon-info label-tip-icon"></i>
|
|
236
285
|
</el-tooltip>
|
|
237
286
|
</span>
|
|
238
287
|
<el-select v-model="optionModel.dynamicColumnMode" style="width: 100%">
|
|
@@ -700,6 +749,9 @@ export default {
|
|
|
700
749
|
this.optionModel.isNotShowQueryButton = !val;
|
|
701
750
|
},
|
|
702
751
|
},
|
|
752
|
+
dynamicSchemaConvertDisplay() {
|
|
753
|
+
return this.optionModel.dynamicSchemaConvert || "";
|
|
754
|
+
},
|
|
703
755
|
},
|
|
704
756
|
created: function () {
|
|
705
757
|
// this.reportTemplate = this.getReportTemplate();
|
|
@@ -724,6 +776,9 @@ export default {
|
|
|
724
776
|
}
|
|
725
777
|
},
|
|
726
778
|
methods: {
|
|
779
|
+
editDynamicSchemaConvert() {
|
|
780
|
+
this.editEventHandler("dynamicSchemaConvert", ["res"]);
|
|
781
|
+
},
|
|
727
782
|
dragSort: function () {
|
|
728
783
|
var e = this.$refs.singleTable.$el.querySelectorAll(
|
|
729
784
|
".el-table__body-wrapper > table > tbody"
|
|
@@ -1063,13 +1118,20 @@ export default {
|
|
|
1063
1118
|
font-weight: 500;
|
|
1064
1119
|
color: #303133;
|
|
1065
1120
|
line-height: 22px;
|
|
1121
|
+
margin-bottom: 8px;
|
|
1066
1122
|
}
|
|
1067
1123
|
|
|
1068
|
-
.
|
|
1069
|
-
|
|
1124
|
+
.label-tip-icon {
|
|
1125
|
+
margin-left: 4px;
|
|
1070
1126
|
color: #909399;
|
|
1071
|
-
|
|
1072
|
-
|
|
1127
|
+
cursor: pointer;
|
|
1128
|
+
font-size: 14px;
|
|
1129
|
+
vertical-align: middle;
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
.field-tip-content {
|
|
1133
|
+
line-height: 1.4;
|
|
1134
|
+
max-width: 320px;
|
|
1073
1135
|
}
|
|
1074
1136
|
|
|
1075
1137
|
.dynamic-column-hint {
|
|
@@ -771,6 +771,10 @@ export default {
|
|
|
771
771
|
value: "textarea",
|
|
772
772
|
label: "多行文本输入框",
|
|
773
773
|
},
|
|
774
|
+
{
|
|
775
|
+
value: "editScriptInput",
|
|
776
|
+
label: "脚本输入框",
|
|
777
|
+
},
|
|
774
778
|
{
|
|
775
779
|
value: "editSelect",
|
|
776
780
|
label: "下拉框",
|
|
@@ -1590,6 +1594,7 @@ export default {
|
|
|
1590
1594
|
row.prop = null;
|
|
1591
1595
|
row.label = null;
|
|
1592
1596
|
row.sortable = false;
|
|
1597
|
+
row.filterable = false;
|
|
1593
1598
|
} else {
|
|
1594
1599
|
let tmpId = "column" + generateId();
|
|
1595
1600
|
if (!row.width || row.width == 47) row.width = 150;
|