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.
Files changed (24) hide show
  1. package/package.json +1 -1
  2. package/src/components/fileLibrary/index.vue +113 -33
  3. 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
  4. 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
  5. package/src/components/xform/form-designer/form-widget/field-widget/fieldMixin.js +80 -14
  6. package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +18 -13
  7. package/src/components/xform/form-designer/form-widget/field-widget/number-widget.vue +11 -8
  8. package/src/components/xform/form-designer/form-widget/field-widget/script-input-widget.vue +143 -0
  9. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +87 -25
  10. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/table-column-dialog.vue +5 -0
  11. package/src/components/xform/form-designer/setting-panel/property-editor/container-table/table-dynamicField-editor.vue +80 -34
  12. package/src/components/xform/form-designer/setting-panel/property-editor/field-script-input/script-input-editor.vue +54 -0
  13. package/src/components/xform/form-designer/setting-panel/propertyRegister.js +1 -0
  14. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +56 -1
  15. package/src/components/xform/form-render/container-item/data-table-mixin.js +296 -118
  16. package/src/components/xform/form-render/container-item/dynamicFieldMixin.js +25 -37
  17. package/src/components/xform/form-render/container-item/list-h5-item.vue +5 -1
  18. package/src/components/xform/form-render/indexMixin.js +175 -6
  19. package/src/components/xform/lang/en-US.js +1 -0
  20. package/src/components/xform/lang/zh-CN.js +1 -0
  21. package/src/components/xform/utils/dynamicSchemaUtil.js +312 -0
  22. package/src/components/xform/utils/tableCellValidateUtil.js +148 -0
  23. package/src/components/xform/utils/tableColumnHelper.js +21 -1
  24. 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 (currentData[this.fieldKeyName] !== null) {
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(this.field.options.label, vldName);
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(this.field.options.label, "required");
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.rules.push({
942
- required: true,
943
- //trigger: ['blur', 'change'],
944
- trigger: [
945
- "blur",
946
- ] /* 去掉change事件触发校验,change事件触发时formModel数据尚未更新,导致radio/checkbox必填校验出错!! */,
947
- message: this.getRequiredHintMsg(),
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 = null;
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 { getSubFormNameByFieldId } from "../../../../../components/xform/utils/util";
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 (!!this.field.options.labelHidden) {
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 (!!this.field.options.labelHidden) {
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" || this.getIsFormItemUnabled()) {
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 (this.isVabsearchFlagWidget(rowWidget)) {
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
- let fieldModel = this.fieldModel;
89
- return fieldModel === null ? undefined : fieldModel;
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
- let newValue = val === undefined ? null : val;
93
- this.fieldModel = newValue
94
- let currentData =
95
- this.tableParam && this.tableParam.row
96
- ? this.tableParam.row
97
- : this.formModel;
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 v-if="optionModel.dynamicColumnSourceType === 'script'" class="dynamic-column-block">
139
- <div class="form-section-label">前端列脚本</div>
140
- <div class="form-section-desc">不调接口,脚本直接 return 列配置</div>
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 v-if="optionModel.dynamicColumnSourceType === 'api'" class="dynamic-column-block">
157
- <div class="form-section-label">接口动态列</div>
158
- <div class="form-section-desc">打开表单时请求后端脚本,返回列配置</div>
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=" getDynamicColumns"
201
+ placeholder="scriptCode 或 formCode/scriptCode"
165
202
  ></el-input>
166
203
  </el-form-item>
167
- <el-form-item label="请求参数">
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" style="line-height: 1.4; max-width: 320px">
184
- 将接口返回的
185
- <code>res</code> 转为列数组;不配置则按平台默认结构解析。
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="editEventHandler('onDynamicColumnsConvert', ['res'])"
239
+ @click="editDynamicSchemaConvert"
194
240
  >
195
- <span>{{ optionModel.onDynamicColumnsConvert }}</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 v-if="optionModel.dynamicColumnSourceType !== 'none'" class="dynamic-column-block">
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" style="line-height: 1.4; max-width: 320px">
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'" label="动态列模式">
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" style="line-height: 1.4; max-width: 320px">
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
- .form-section-desc {
1069
- font-size: 12px;
1124
+ .label-tip-icon {
1125
+ margin-left: 4px;
1070
1126
  color: #909399;
1071
- line-height: 18px;
1072
- margin: 2px 0 8px 8px;
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;