cloud-web-corejs 1.0.283 → 1.0.285
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/VabUpload/mixins.js +126 -19
- package/src/components/VabUpload/view.vue +248 -209
- package/src/components/excelExport/conditionExportConfig.js +112 -0
- package/src/components/excelExport/exportType.js +8 -0
- package/src/components/excelExport/index.vue +7 -1
- package/src/components/excelExport/mixins.js +410 -259
- package/src/components/mobile/wf/addTaskUserdialog.vue +100 -80
- package/src/components/mobile/wf/content.vue +1705 -1556
- package/src/components/mobile/wf/deleteTaskUserDialog.vue +73 -54
- package/src/components/mobile/wf/mixins/wfModifyDialogMixin.js +8 -6
- package/src/components/mobile/wf/selectUserDialog.vue +118 -0
- package/src/components/mobile/wf/setCandidateDialog.vue +69 -48
- package/src/components/mobile/wf/urgingDialog.vue +75 -52
- package/src/components/mobile/wf/wfModifyDialog.vue +4 -0
- package/src/components/xform/docs/2026-08 xform H5 P0 /345/256/236/347/216/260/350/247/204/346/240/274.md" +528 -0
- package/src/components/xform/docs/2026-08 xform H5 P1 /345/256/236/347/216/260/350/247/204/346/240/274.md" +412 -0
- package/src/components/xform/docs/2026-08 xform H5 P2 /345/256/236/347/216/260/350/247/204/346/240/274.md" +287 -0
- package/src/components/xform/docs/2026-08 xform /347/247/273/345/212/250/347/253/257/345/270/203/345/261/200/345/257/271/351/275/220 bill_setting /346/226/271/346/241/210.md" +400 -0
- package/src/components/xform/form-designer/designer.js +5 -0
- package/src/components/xform/form-designer/form-widget/container-widget/detail-h5-widget.vue +243 -227
- package/src/components/xform/form-designer/form-widget/container-widget/h5-card-pane-widget.vue +228 -207
- package/src/components/xform/form-designer/form-widget/container-widget/h5-card-widget.vue +165 -136
- package/src/components/xform/form-designer/form-widget/dialog/fileReferenceDialog.vue +2 -3
- package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +3 -3
- package/src/components/xform/form-designer/form-widget/dialog/importDialog.vue +190 -185
- package/src/components/xform/form-designer/form-widget/dialog/importDialogMixin.js +2641 -1833
- package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +2 -3
- package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +39 -1
- package/src/components/xform/form-designer/form-widget/field-widget/import-button-widget.vue +18 -5
- package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +2 -1
- package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/table-export-button-widget.vue +2 -1
- package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +3 -2
- package/src/components/xform/form-designer/indexMixin.js +35 -1
- package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +19 -5
- package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import-button-editor.vue +62 -1
- package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +236 -96
- package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/empty-number-input.vue +51 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-item-button-editor.vue +27 -2
- package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/table-export-button-editor.vue +33 -3
- package/src/components/xform/form-designer/setting-panel/property-editor/h5Span-editor.vue +51 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/itemStyle-editor.vue +39 -0
- package/src/components/xform/form-designer/setting-panel/propertyRegister.js +10 -0
- package/src/components/xform/form-designer/toolbar-panel/index.vue +6 -1
- package/src/components/xform/form-designer/toolbar-panel/indexMixin.js +13 -0
- package/src/components/xform/form-designer/widget-panel/indexMixin.js +22 -6
- package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +88 -3
- package/src/components/xform/form-render/container-item/data-table-mixin.js +3 -1
- package/src/components/xform/form-render/container-item/detail-h5-item.vue +204 -34
- package/src/components/xform/form-render/container-item/h5-card-pane-item.vue +160 -140
- package/src/components/xform/form-render/container-item/list-h5-item.vue +1917 -1700
- package/src/components/xform/form-render/index.vue +7 -1
- package/src/components/xform/form-render/indexMixin.js +42 -4
- package/src/components/xform/lang/en-US.js +10 -0
- package/src/components/xform/lang/zh-CN.js +10 -0
- package/src/components/xform/styles/h5.scss +2305 -0
- package/src/directive/append-to-body/index.js +48 -0
- package/src/index.js +4 -0
- package/src/views/bd/setting/form_template/edit.vue +25 -3
- package/src/views/bd/setting/form_template/formDesignerDialog.vue +6 -0
- package/src/views/bd/setting/form_template/formTemplateType.js +43 -0
- package/src/views/bd/setting/form_template/list.vue +1 -0
- package/src/views/bd/setting/form_template/mixins/edit.js +64 -0
- package/src/views/bd/setting/form_template/mixins/list.js +27 -0
- package/src/views/user/form/vform/designer.vue +3 -1
- package/src/components/xform/docs/2026-09 /346/235/241/344/273/266/345/257/274/345/207/272/345/244/247/346/225/260/346/215/256/351/207/217/345/264/251/346/272/203/346/216/222/346/237/245.md" +0 -389
- package/src/components/xform/docs/2026-09 /347/274/226/350/276/221/350/241/250/350/241/214/345/206/205/344/277/235/345/255/230/346/240/241/351/252/214/350/214/203/345/233/264/344/270/216/345/210/227/345/277/205/345/241/253/350/247/243/346/236/220/344/277/256/345/244/215.md" +0 -233
- package/src/components/xform/form-render/container-item/list-h5-item2.vue +0 -1340
|
@@ -485,9 +485,8 @@ export default {
|
|
|
485
485
|
</script>
|
|
486
486
|
|
|
487
487
|
<style scoped lang="scss">
|
|
488
|
-
::v-deep .H5 .h5-fixed-bottom-btns
|
|
489
|
-
|
|
490
|
-
}
|
|
488
|
+
/* 原 ::v-deep .H5 .h5-fixed-bottom-btns{bottom:95px} 已删:本文件从未把 H5 类
|
|
489
|
+
绑到任何元素上,该选择器从来没生效过。H5 底栏已改为流内布局。 */
|
|
491
490
|
::v-deep .tree-container {
|
|
492
491
|
height: 100%;
|
|
493
492
|
.tree-box {
|
|
@@ -11,7 +11,12 @@
|
|
|
11
11
|
<template>
|
|
12
12
|
<div
|
|
13
13
|
class="field-wrapper"
|
|
14
|
-
:class="
|
|
14
|
+
:class="[
|
|
15
|
+
{ 'design-time-bottom-margin': !!this.designer },
|
|
16
|
+
isH5Field ? 'h5-field' : '',
|
|
17
|
+
field.options.h5Span === 'half' ? 'h5-half' : '',
|
|
18
|
+
isH5BlockField ? 'h5-block' : '',
|
|
19
|
+
]"
|
|
15
20
|
v-show="!field.options.hidden || designState === true"
|
|
16
21
|
>
|
|
17
22
|
<div>
|
|
@@ -258,6 +263,18 @@ import {
|
|
|
258
263
|
resolveTextMaskFlag,
|
|
259
264
|
} from "../../../../../components/xform/utils/textMaskUtil";
|
|
260
265
|
|
|
266
|
+
/* H5 版式下独占整行、左对齐的「宽内容」字段(见 isH5BlockField) */
|
|
267
|
+
const H5_BLOCK_FIELD_TYPES = [
|
|
268
|
+
"vabUpload",
|
|
269
|
+
"vabUpload2",
|
|
270
|
+
"baseAttachment",
|
|
271
|
+
"singleUpload",
|
|
272
|
+
"picture-upload",
|
|
273
|
+
"file-upload",
|
|
274
|
+
"rich-editor",
|
|
275
|
+
"html-text",
|
|
276
|
+
];
|
|
277
|
+
|
|
261
278
|
export default {
|
|
262
279
|
name: "form-item-wrapper",
|
|
263
280
|
mixins: [i18n],
|
|
@@ -362,6 +379,27 @@ export default {
|
|
|
362
379
|
: "";
|
|
363
380
|
},
|
|
364
381
|
|
|
382
|
+
isH5BlockField() {
|
|
383
|
+
return H5_BLOCK_FIELD_TYPES.indexOf(this.field.type) > -1;
|
|
384
|
+
},
|
|
385
|
+
|
|
386
|
+
/**
|
|
387
|
+
* H5 版式的字段行锚点。整套 H5 行版式(styles/h5.scss 块 C/C1/C2/C3/D/E)都挂在
|
|
388
|
+
* .field-wrapper.h5-field 上,与容器解耦。
|
|
389
|
+
*
|
|
390
|
+
* 原先锚在 `.h5-detail-wrap .h5-item .h5-form-box`,而 `.h5-item` 只有
|
|
391
|
+
* h5-card-pane 会吐(h5-card-pane-item.vue),h5-card 吐的是 `.grid-cell`,
|
|
392
|
+
* 字段/表格直挂 detail-h5.panes 时(设计器的 draggable 是单一 dragGroup,
|
|
393
|
+
* 任何容器都能拖进去)连 `.h5-form-box` 都没有 —— 这些摆法下整套行版式会
|
|
394
|
+
* 静默落空,表现为「标签右对齐、值左对齐」(element 默认),与卡片内的
|
|
395
|
+
* 「标签左、值右」对不上。
|
|
396
|
+
*
|
|
397
|
+
* PC 版式不打这个类,故 PC 表单零影响。
|
|
398
|
+
*/
|
|
399
|
+
isH5Field() {
|
|
400
|
+
return this.formConfig?.layoutType === "H5";
|
|
401
|
+
},
|
|
402
|
+
|
|
365
403
|
subFormName() {
|
|
366
404
|
return !!this.parentWidget ? this.parentWidget.options.name : "";
|
|
367
405
|
},
|
package/src/components/xform/form-designer/form-widget/field-widget/import-button-widget.vue
CHANGED
|
@@ -62,18 +62,31 @@ export default {
|
|
|
62
62
|
methods: {
|
|
63
63
|
importHandle() {
|
|
64
64
|
const done = () => {
|
|
65
|
-
let
|
|
66
|
-
let
|
|
67
|
-
|
|
65
|
+
let options = this.field.options;
|
|
66
|
+
let multi = options.importMultiple || false;
|
|
67
|
+
let multiSize = options.importMultiSize || 1;
|
|
68
|
+
let dialogOption = {
|
|
68
69
|
target: this,
|
|
69
|
-
importOption:
|
|
70
|
+
importOption: options,
|
|
70
71
|
importFrontOnly: false,
|
|
71
72
|
multi,
|
|
72
73
|
multiSize,
|
|
73
74
|
callback: (resultData, file, done) => {
|
|
74
75
|
|
|
75
76
|
}
|
|
76
|
-
}
|
|
77
|
+
};
|
|
78
|
+
// 逐行补默认值:弹框侧读的是 option.defaultValue(此前只有手写页能传,
|
|
79
|
+
// 表单里配不了),这里把设计器上的脚本包成同一形状交过去
|
|
80
|
+
if (options.importDefaultValue) {
|
|
81
|
+
dialogOption.defaultValue = (row) => {
|
|
82
|
+
return this.handleCustomEvent(
|
|
83
|
+
options.importDefaultValue,
|
|
84
|
+
["row"],
|
|
85
|
+
[row]
|
|
86
|
+
) || {};
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
this.getFormRef().openImportDialog(dialogOption);
|
|
77
90
|
}
|
|
78
91
|
if (this.field.options.onBeforeClickButton) {
|
|
79
92
|
if (this.handleCustomEvent(this.field.options.onBeforeClickButton, ["done"], [done]) !== false) {
|
|
@@ -44,6 +44,7 @@ import i18n from "../../../utils/i18n";
|
|
|
44
44
|
import fieldMixin from "./fieldMixin";
|
|
45
45
|
import StaticContentWrapper from "./static-content-wrapper.vue";
|
|
46
46
|
import { EXPORT_TYPE } from "../../../../excelExport/exportType";
|
|
47
|
+
import { pickConditionExportOverrides } from "@base/components/excelExport/conditionExportConfig";
|
|
47
48
|
|
|
48
49
|
export default {
|
|
49
50
|
name: "select-export-item-button-widget",
|
|
@@ -101,8 +102,8 @@ export default {
|
|
|
101
102
|
let opt = {
|
|
102
103
|
title: this.field.options.exportFileName || null,
|
|
103
104
|
targetRef: this.field.options.tableRef || null,
|
|
104
|
-
pageSize: this.field.options.exportPageSize || null,
|
|
105
105
|
showImageAtTable: this.field.options.showImageAtTable || null,
|
|
106
|
+
...pickConditionExportOverrides(this.field.options),
|
|
106
107
|
// 明细导出的列 / 脚本编码 / 取数参数三项各自独立:按钮上维护了哪项就以哪项为准,
|
|
107
108
|
// 留空的那项沿用数据表格属性上那套。参数脚本原样下发,由数据表格求值(this 是
|
|
108
109
|
// 表格组件,与配在表格属性上时同义)
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
:multi="field.options.limit!==1"
|
|
16
16
|
:limit="field.options.limit"
|
|
17
17
|
resultType="Array"
|
|
18
|
-
:edit="!field.options.disabled"
|
|
18
|
+
:edit="!field.options.disabled && !isReadMode"
|
|
19
19
|
@callback="submitFile"
|
|
20
20
|
:hideInfo="field.options.hideFileInfo"
|
|
21
21
|
:hideName="field.options.hideFileName"
|
package/src/components/xform/form-designer/form-widget/field-widget/table-export-button-widget.vue
CHANGED
|
@@ -32,6 +32,7 @@ import emitter from "../../../../../components/xform/utils/emitter";
|
|
|
32
32
|
import i18n from "../../../../../components/xform/utils/i18n";
|
|
33
33
|
import fieldMixin from "../../../../../components/xform/form-designer/form-widget/field-widget/fieldMixin";
|
|
34
34
|
import StaticContentWrapper from "../../../../../components/xform/form-designer/form-widget/field-widget/static-content-wrapper.vue";
|
|
35
|
+
import { pickConditionExportOverrides } from "@base/components/excelExport/conditionExportConfig";
|
|
35
36
|
|
|
36
37
|
export default {
|
|
37
38
|
name: "table-export-button-widget",
|
|
@@ -81,8 +82,8 @@ export default {
|
|
|
81
82
|
let opt = {
|
|
82
83
|
title: this.field.options.exportFileName || null,
|
|
83
84
|
targetRef: this.field.options.tableRef || null,
|
|
84
|
-
pageSize: this.field.options.exportPageSize || null,
|
|
85
85
|
showImageAtTable: this.field.options.showImageAtTable || null,
|
|
86
|
+
...pickConditionExportOverrides(this.field.options),
|
|
86
87
|
};
|
|
87
88
|
let tableExportParam = this.handleCustomEvent(this.field.options.tableExportParam);
|
|
88
89
|
let options = { ...opt, ...tableExportParam, type: type };
|
|
@@ -26,13 +26,14 @@
|
|
|
26
26
|
:file.sync="fieldModel"
|
|
27
27
|
:hidePasteArea.sync="isH5"
|
|
28
28
|
:uploadDialogCustomClass="isH5 ? 'dialog-upload-h5' : null"
|
|
29
|
+
:h5Preview="isH5"
|
|
29
30
|
:pickPrivateProfile="false"
|
|
30
31
|
:multi="field.options.limit !== 1"
|
|
31
32
|
:limit="field.options.limit"
|
|
32
33
|
:fileTypes="field.options.fileTypes || []"
|
|
33
34
|
resultType="Array"
|
|
34
|
-
:edit="!field.options.disabled"
|
|
35
|
-
:remove="!field.options.hideRemoveButton"
|
|
35
|
+
:edit="!field.options.disabled && !isReadMode"
|
|
36
|
+
:remove="!field.options.hideRemoveButton && !isReadMode"
|
|
36
37
|
@callback="submitFile"
|
|
37
38
|
:hideInfo="field.options.hideFileInfo"
|
|
38
39
|
:hideName="field.options.hideFileName"
|
|
@@ -93,6 +93,8 @@ modules = {
|
|
|
93
93
|
readonly: Boolean,
|
|
94
94
|
columnFlag: Boolean,
|
|
95
95
|
sourceData: Object,
|
|
96
|
+
/* 进入设计器时的布局模式(模板自带 layoutType 时不覆盖);传入即锁定,工具栏不允许再切换 */
|
|
97
|
+
defaultLayoutType: { type: String, default: "" },
|
|
96
98
|
},
|
|
97
99
|
data() {
|
|
98
100
|
return {
|
|
@@ -147,6 +149,8 @@ modules = {
|
|
|
147
149
|
serverFieldList: this.fieldList,
|
|
148
150
|
getServerSubFormList: () => this.subFormList,
|
|
149
151
|
getDesignerConfig: () => this.designerConfig,
|
|
152
|
+
/* 由表单模板等入口指定布局模式时,布局类型由模板类型决定,设计器内不可切换 */
|
|
153
|
+
getLayoutTypeLocked: () => !!this.defaultLayoutType,
|
|
150
154
|
getBannedWidgets: () => this.bannedWidgets,
|
|
151
155
|
saveReportTemplate: this.saveReportTemplate,
|
|
152
156
|
getReportTemplate: () => this.reportTemplate,
|
|
@@ -345,23 +349,51 @@ modules = {
|
|
|
345
349
|
baseRefUtil.changeLocale(langName);
|
|
346
350
|
},
|
|
347
351
|
|
|
352
|
+
/**
|
|
353
|
+
* 应用入口指定的布局模式:模板 JSON 自带 layoutType 时以模板为准,不覆盖
|
|
354
|
+
*/
|
|
355
|
+
applyDefaultLayoutType(loadedFormJson) {
|
|
356
|
+
if (!this.defaultLayoutType) {
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
if (loadedFormJson && loadedFormJson.formConfig?.layoutType) {
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
this.designer.changeLayoutType(this.defaultLayoutType);
|
|
363
|
+
},
|
|
364
|
+
|
|
348
365
|
setFormJson(formJson) {
|
|
349
366
|
let modifiedFlag = false;
|
|
367
|
+
let loadedFormJson = null;
|
|
350
368
|
if (!!formJson) {
|
|
351
369
|
if (typeof formJson === "string") {
|
|
352
370
|
let newFormJson = JSON.parse(formJson);
|
|
353
371
|
this.upgradeFormJson(newFormJson);
|
|
372
|
+
loadedFormJson = newFormJson;
|
|
354
373
|
modifiedFlag = this.designer.loadFormJson(newFormJson);
|
|
355
374
|
} else if (formJson.constructor === Object) {
|
|
356
375
|
this.upgradeFormJson(formJson);
|
|
376
|
+
loadedFormJson = formJson;
|
|
357
377
|
modifiedFlag = this.designer.loadFormJson(formJson);
|
|
358
378
|
}
|
|
359
379
|
|
|
360
380
|
if (modifiedFlag) {
|
|
361
381
|
this.designer.emitHistoryChange();
|
|
362
382
|
}
|
|
383
|
+
|
|
384
|
+
this.applyDefaultLayoutType(loadedFormJson);
|
|
385
|
+
/* 模板 JSON 里的 layoutType 此刻才写入;左侧面板 mounted 时仍是默认 PC,
|
|
386
|
+
必须再筛一次,否则进入 H5 模板时仍展示 PC 容器(data-table/detail 等) */
|
|
387
|
+
this.$nextTick(() => {
|
|
388
|
+
this.loadWidgets();
|
|
389
|
+
});
|
|
363
390
|
} else {
|
|
391
|
+
/* 新建模板 formViewContent 为空会走这里,同样要落入口默认布局 */
|
|
364
392
|
this.clearDesigner();
|
|
393
|
+
this.applyDefaultLayoutType(null);
|
|
394
|
+
this.$nextTick(() => {
|
|
395
|
+
this.loadWidgets();
|
|
396
|
+
});
|
|
365
397
|
}
|
|
366
398
|
},
|
|
367
399
|
|
|
@@ -826,7 +858,9 @@ modules = {
|
|
|
826
858
|
});
|
|
827
859
|
},
|
|
828
860
|
loadWidgets() {
|
|
829
|
-
this.$refs.widgetPanelRef
|
|
861
|
+
if (this.$refs.widgetPanelRef) {
|
|
862
|
+
this.$refs.widgetPanelRef.loadWidgets();
|
|
863
|
+
}
|
|
830
864
|
},
|
|
831
865
|
getBdEnv() {
|
|
832
866
|
getBdFlag({
|
|
@@ -59,11 +59,10 @@
|
|
|
59
59
|
<el-input v-model="scope.row.prop"></el-input>
|
|
60
60
|
</template>
|
|
61
61
|
</el-table-column>
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
</el-table-column>
|
|
62
|
+
<!-- 「列宽」已移除:H5 明细卡片是 dl/dt/dd 排版,不读列宽 —— 它当年是从数据表格
|
|
63
|
+
那套列配置沿用过来的,运行期只被塞进一个拼错的键(witdh)、无人读取。
|
|
64
|
+
列在卡片里占整行还是半行,由下面的「H5列宽」控制。
|
|
65
|
+
存量模板里残留的 width 值不用清,读不到就是了。 -->
|
|
67
66
|
<el-table-column :label="i18nt('designer.setting.visibleColumn')" width="70" prop="show">
|
|
68
67
|
<template slot-scope="scope">
|
|
69
68
|
<el-switch v-model="scope.row.show"></el-switch>
|
|
@@ -79,6 +78,21 @@
|
|
|
79
78
|
<el-switch v-model="scope.row.showForRow"></el-switch>
|
|
80
79
|
</template>
|
|
81
80
|
</el-table-column>
|
|
81
|
+
<!-- H5 明细卡片里这个字段占整行还是半行(半行=一行两个)。
|
|
82
|
+
不配即整行,运行期判等只认 'half'(存量列读到 undefined 就是整行),
|
|
83
|
+
不能写成 !== 'full'。样式见 xform/styles/h5.scss 块 I2。
|
|
84
|
+
★ 用 :value + $set 而不是 v-model:h5Span 是后加的键,存量列上没有,
|
|
85
|
+
Vue 2 只给赋值那一刻已存在的属性装 getter/setter,直接 v-model
|
|
86
|
+
新增属性追踪不到,选完不回显。 -->
|
|
87
|
+
<el-table-column label="H5列宽" width="110" prop="h5Span">
|
|
88
|
+
<template slot-scope="scope">
|
|
89
|
+
<el-select :value="scope.row.h5Span" clearable placeholder="整行"
|
|
90
|
+
@input="v => $set(scope.row, 'h5Span', v)">
|
|
91
|
+
<el-option value="full" label="整行"></el-option>
|
|
92
|
+
<el-option value="half" label="半行(一行两个)"></el-option>
|
|
93
|
+
</el-select>
|
|
94
|
+
</template>
|
|
95
|
+
</el-table-column>
|
|
82
96
|
<el-table-column :label="i18nt('designer.setting.formatOfColumn')" width="200" prop="formatS">
|
|
83
97
|
<template slot-scope="scope">
|
|
84
98
|
<el-select v-model="scope.row.formatS" @change="changeFormatS(scope.row)" clearable>
|
|
@@ -51,6 +51,18 @@
|
|
|
51
51
|
:max="200"
|
|
52
52
|
></base-input-number>
|
|
53
53
|
</el-form-item>
|
|
54
|
+
<el-form-item label="批量报文带附件信封">
|
|
55
|
+
<el-switch v-model="optionModel.importMultiAttachEnvelope"></el-switch>
|
|
56
|
+
<el-tooltip effect="dark" placement="top">
|
|
57
|
+
<div slot="content">
|
|
58
|
+
只在「批量导入」打开时生效。<br/>
|
|
59
|
+
关(默认):报文里 data 是裸行数组,附件列原样留在行里。<br/>
|
|
60
|
+
打开:每行包成 { 表名: {...行}, attachments_x: [...] },附件从实体里提到信封层,<br/>
|
|
61
|
+
与单行导入同构 —— <b>后端脚本需配套改</b>,不要在存量表单上随手打开。
|
|
62
|
+
</div>
|
|
63
|
+
<i class="el-icon-question label-tip-icon"></i>
|
|
64
|
+
</el-tooltip>
|
|
65
|
+
</el-form-item>
|
|
54
66
|
<el-form-item label="点击前置事件" label-width="150px">
|
|
55
67
|
<a href="javascript:void(0);" class="a-link link-oneLind"
|
|
56
68
|
@click="editEventHandler('onBeforeClickButton', eventParams)">
|
|
@@ -72,6 +84,45 @@
|
|
|
72
84
|
</a>
|
|
73
85
|
</el-form-item>
|
|
74
86
|
|
|
87
|
+
<el-form-item label="必填校验方式" class="form-item-label-top">
|
|
88
|
+
<el-select v-model="optionModel.requiredCheckMode" style="width: 100%">
|
|
89
|
+
<el-option label="默认(逐行标记失败,其余照常导入)" value=""></el-option>
|
|
90
|
+
<el-option label="整批硬拦(一处不合规就整份不导)" value="strict"></el-option>
|
|
91
|
+
<el-option label="不校验(只信业务脚本与后端)" value="off"></el-option>
|
|
92
|
+
</el-select>
|
|
93
|
+
</el-form-item>
|
|
94
|
+
<el-form-item label="逐行校验脚本" label-width="150px">
|
|
95
|
+
<a
|
|
96
|
+
href="javascript:void(0);"
|
|
97
|
+
class="a-link link-oneLind"
|
|
98
|
+
@click="editEventHandler('onValidateRow', onValidateRowParams)"
|
|
99
|
+
>
|
|
100
|
+
<span>{{ optionModel.onValidateRow }}</span>
|
|
101
|
+
<i class="el-icon-edit"></i>
|
|
102
|
+
</a>
|
|
103
|
+
<el-tooltip effect="dark" placement="top">
|
|
104
|
+
<div slot="content">返回 true 或不返回=通过;返回字符串=该行的错误文案。</div>
|
|
105
|
+
<i class="el-icon-question label-tip-icon"></i>
|
|
106
|
+
</el-tooltip>
|
|
107
|
+
</el-form-item>
|
|
108
|
+
<el-form-item label="逐行补默认值" label-width="150px">
|
|
109
|
+
<a
|
|
110
|
+
href="javascript:void(0);"
|
|
111
|
+
class="a-link link-oneLind"
|
|
112
|
+
@click="editEventHandler('importDefaultValue', importDefaultValueParams)"
|
|
113
|
+
>
|
|
114
|
+
<span>{{ optionModel.importDefaultValue }}</span>
|
|
115
|
+
<i class="el-icon-edit"></i>
|
|
116
|
+
</a>
|
|
117
|
+
<el-tooltip effect="dark" placement="top">
|
|
118
|
+
<div slot="content">
|
|
119
|
+
返回一个对象,发包前合并进该行(补组织、单据类型等固定字段)。<br/>
|
|
120
|
+
与"导入前数据处理"的区别:那个是整批一次,这个是逐行。
|
|
121
|
+
</div>
|
|
122
|
+
<i class="el-icon-question label-tip-icon"></i>
|
|
123
|
+
</el-tooltip>
|
|
124
|
+
</el-form-item>
|
|
125
|
+
|
|
75
126
|
<el-form-item label="导入完成回调" label-width="150px">
|
|
76
127
|
<a
|
|
77
128
|
href="javascript:void(0);"
|
|
@@ -116,6 +167,8 @@ export default {
|
|
|
116
167
|
onBeforeImportParams: ["dataId", "formCode", "file", "resultData", "done"],
|
|
117
168
|
onConfirmImportParams: ["dataId", "formCode", "resultData", "file", "done", "close"],
|
|
118
169
|
onSuccessImportParams: ["dataId", "formCode", "resultData", "file"],
|
|
170
|
+
onValidateRowParams: ["dataId", "formCode", "row", "index"],
|
|
171
|
+
importDefaultValueParams: ["dataId", "formCode", "row"],
|
|
119
172
|
};
|
|
120
173
|
},
|
|
121
174
|
methods: {
|
|
@@ -130,4 +183,12 @@ export default {
|
|
|
130
183
|
};
|
|
131
184
|
</script>
|
|
132
185
|
|
|
133
|
-
<style scoped
|
|
186
|
+
<style scoped>
|
|
187
|
+
.label-tip-icon {
|
|
188
|
+
margin-left: 4px;
|
|
189
|
+
color: #909399;
|
|
190
|
+
cursor: pointer;
|
|
191
|
+
font-size: 14px;
|
|
192
|
+
vertical-align: middle;
|
|
193
|
+
}
|
|
194
|
+
</style>
|