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
|
@@ -1,96 +1,236 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<el-form-item label-width="0">
|
|
4
|
-
<el-divider class="custom-divider">前端导入设置</el-divider>
|
|
5
|
-
</el-form-item>
|
|
6
|
-
<el-form-item label="文件大小限制(M)" class="form-item-label-top">
|
|
7
|
-
<base-input-number v-model="optionModel.importFileLimitSize" :max="200"></base-input-number>
|
|
8
|
-
</el-form-item>
|
|
9
|
-
<el-form-item label="导入模板文件编码" class="form-item-label-top">
|
|
10
|
-
<el-input
|
|
11
|
-
class="search-input"
|
|
12
|
-
max="200"
|
|
13
|
-
:value="optionModel.importAttachCode"
|
|
14
|
-
clearable
|
|
15
|
-
@clear="optionModel.importAttachCode=null;optionModel.importAttachName=null;"
|
|
16
|
-
>
|
|
17
|
-
<i slot="suffix" class="el-input__icon el-icon-search" @click="showBdAttachSettingDialog = true"></i>
|
|
18
|
-
</el-input>
|
|
19
|
-
</el-form-item>
|
|
20
|
-
<el-form-item label="导入模板文件名称">
|
|
21
|
-
<span>{{ optionModel.importAttachName }}</span>
|
|
22
|
-
</el-form-item>
|
|
23
|
-
|
|
24
|
-
<el-form-item label="关联表格唯一名称" class="form-item-label-top">
|
|
25
|
-
<el-input v-model="optionModel.tableRef"></el-input>
|
|
26
|
-
</el-form-item>
|
|
27
|
-
<el-form-item label="
|
|
28
|
-
<
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
</el-form-item>
|
|
37
|
-
<el-form-item label="
|
|
38
|
-
<
|
|
39
|
-
|
|
40
|
-
<
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
<el-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
</
|
|
95
|
-
|
|
96
|
-
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<el-form-item label-width="0">
|
|
4
|
+
<el-divider class="custom-divider">前端导入设置</el-divider>
|
|
5
|
+
</el-form-item>
|
|
6
|
+
<el-form-item label="文件大小限制(M)" class="form-item-label-top">
|
|
7
|
+
<base-input-number v-model="optionModel.importFileLimitSize" :max="200"></base-input-number>
|
|
8
|
+
</el-form-item>
|
|
9
|
+
<el-form-item label="导入模板文件编码" class="form-item-label-top">
|
|
10
|
+
<el-input
|
|
11
|
+
class="search-input"
|
|
12
|
+
max="200"
|
|
13
|
+
:value="optionModel.importAttachCode"
|
|
14
|
+
clearable
|
|
15
|
+
@clear="optionModel.importAttachCode=null;optionModel.importAttachName=null;"
|
|
16
|
+
>
|
|
17
|
+
<i slot="suffix" class="el-input__icon el-icon-search" @click="showBdAttachSettingDialog = true"></i>
|
|
18
|
+
</el-input>
|
|
19
|
+
</el-form-item>
|
|
20
|
+
<el-form-item label="导入模板文件名称">
|
|
21
|
+
<span>{{ optionModel.importAttachName }}</span>
|
|
22
|
+
</el-form-item>
|
|
23
|
+
|
|
24
|
+
<el-form-item label="关联表格唯一名称" class="form-item-label-top">
|
|
25
|
+
<el-input v-model="optionModel.tableRef"></el-input>
|
|
26
|
+
</el-form-item>
|
|
27
|
+
<el-form-item label="入表去重字段" class="form-item-label-top">
|
|
28
|
+
<el-input v-model="optionModel.dedupField" placeholder="留空则不去重"></el-input>
|
|
29
|
+
</el-form-item>
|
|
30
|
+
<el-form-item label="必填校验方式" class="form-item-label-top">
|
|
31
|
+
<el-select v-model="optionModel.requiredCheckMode" style="width: 100%">
|
|
32
|
+
<el-option label="默认(有进度框逐行标记,否则整批拦)" value=""></el-option>
|
|
33
|
+
<el-option label="整批硬拦(一处不合规就整份不导)" value="strict"></el-option>
|
|
34
|
+
<el-option label="不校验(只信业务脚本)" value="off"></el-option>
|
|
35
|
+
</el-select>
|
|
36
|
+
</el-form-item>
|
|
37
|
+
<el-form-item label="显示导入进度">
|
|
38
|
+
<el-switch v-model="optionModel.showProgressDialog"></el-switch>
|
|
39
|
+
<el-tooltip effect="dark" placement="top">
|
|
40
|
+
<div slot="content">
|
|
41
|
+
打开后走进度弹框:逐行校验,成功/失败可点开看明细并导出,<br/>
|
|
42
|
+
校验通过的行才进表格。关闭则沿用整批导入(缺必填直接中止)。
|
|
43
|
+
</div>
|
|
44
|
+
<i class="el-icon-question label-tip-icon"></i>
|
|
45
|
+
</el-tooltip>
|
|
46
|
+
</el-form-item>
|
|
47
|
+
<el-form-item
|
|
48
|
+
label="每行处理方式"
|
|
49
|
+
class="form-item-label-top el-form-item-second"
|
|
50
|
+
v-if="optionModel.showProgressDialog"
|
|
51
|
+
>
|
|
52
|
+
<el-select v-model="optionModel.importMode" style="width: 100%">
|
|
53
|
+
<el-option label="塞入关联表格" value="table"></el-option>
|
|
54
|
+
<el-option label="逐行脚本处理" value="script"></el-option>
|
|
55
|
+
</el-select>
|
|
56
|
+
</el-form-item>
|
|
57
|
+
<el-form-item
|
|
58
|
+
label="启用后台校验"
|
|
59
|
+
class="el-form-item-second"
|
|
60
|
+
v-if="optionModel.showProgressDialog"
|
|
61
|
+
>
|
|
62
|
+
<el-switch v-model="optionModel.backendValidateEnabled"></el-switch>
|
|
63
|
+
<el-tooltip effect="dark" placement="top">
|
|
64
|
+
<div slot="content">
|
|
65
|
+
打开后,前台校验通过的行整批一次送给后台脚本:校验并补字段。<br/>
|
|
66
|
+
通过的行再按「每行处理方式」入表或走逐行脚本。<br/>
|
|
67
|
+
失败行进结果表,不入表格。
|
|
68
|
+
</div>
|
|
69
|
+
<i class="el-icon-question label-tip-icon"></i>
|
|
70
|
+
</el-tooltip>
|
|
71
|
+
</el-form-item>
|
|
72
|
+
<el-form-item
|
|
73
|
+
label="执行后台脚本编码"
|
|
74
|
+
class="form-item-label-top el-form-item-second"
|
|
75
|
+
v-if="optionModel.showProgressDialog && optionModel.backendValidateEnabled"
|
|
76
|
+
>
|
|
77
|
+
<el-input v-model="optionModel.importScriptCode"></el-input>
|
|
78
|
+
</el-form-item>
|
|
79
|
+
<el-form-item
|
|
80
|
+
label="请求额外参数脚本"
|
|
81
|
+
label-width="150px"
|
|
82
|
+
class="el-form-item-second"
|
|
83
|
+
v-if="optionModel.showProgressDialog && optionModel.backendValidateEnabled"
|
|
84
|
+
>
|
|
85
|
+
<a href="javascript:void(0);" class="a-link link-oneLind"
|
|
86
|
+
@click="editEventHandler('onImportParams', onImportParamsParams)">
|
|
87
|
+
<span>{{ optionModel.onImportParams }}</span>
|
|
88
|
+
<i class="el-icon-edit"></i>
|
|
89
|
+
</a>
|
|
90
|
+
<el-tooltip effect="dark" placement="top">
|
|
91
|
+
<div slot="content">
|
|
92
|
+
发请求前整批跑一次,返回对象作为 params。<br/>
|
|
93
|
+
不要在脚本里自己发请求。
|
|
94
|
+
</div>
|
|
95
|
+
<i class="el-icon-question label-tip-icon"></i>
|
|
96
|
+
</el-tooltip>
|
|
97
|
+
</el-form-item>
|
|
98
|
+
<el-form-item
|
|
99
|
+
label="启用图片处理"
|
|
100
|
+
class="el-form-item-second"
|
|
101
|
+
v-if="optionModel.showProgressDialog"
|
|
102
|
+
>
|
|
103
|
+
<el-switch v-model="optionModel.enabledImportPreHandle"></el-switch>
|
|
104
|
+
<el-tooltip effect="dark" placement="top">
|
|
105
|
+
<div slot="content">
|
|
106
|
+
模板里 <b>attachments_</b> 开头的列用于承载附件。<br/>
|
|
107
|
+
不开:只认单元格里的 URL 文本(支持逗号/换行分隔多个)。<br/>
|
|
108
|
+
打开:Excel 里贴的内嵌图片也会被取回并填进该列 —— 需先上传整个文件,<br/>
|
|
109
|
+
导入前多出「上传/校验/存储图片」三段进度。<br/>
|
|
110
|
+
仅在「显示导入进度」打开时可用。
|
|
111
|
+
</div>
|
|
112
|
+
<i class="el-icon-question label-tip-icon"></i>
|
|
113
|
+
</el-tooltip>
|
|
114
|
+
</el-form-item>
|
|
115
|
+
<el-form-item
|
|
116
|
+
label="逐行处理脚本"
|
|
117
|
+
label-width="150px"
|
|
118
|
+
class="el-form-item-second"
|
|
119
|
+
v-if="optionModel.showProgressDialog && optionModel.importMode === 'script'"
|
|
120
|
+
>
|
|
121
|
+
<a href="javascript:void(0);" class="a-link link-oneLind"
|
|
122
|
+
@click="editEventHandler('onImportRow', onImportRowParams)">
|
|
123
|
+
<span>{{ optionModel.onImportRow }}</span>
|
|
124
|
+
<i class="el-icon-edit"></i>
|
|
125
|
+
</a>
|
|
126
|
+
<el-tooltip effect="dark" placement="top">
|
|
127
|
+
<div slot="content">
|
|
128
|
+
每行调一次,必须调 done:done() 表示成功;<br/>
|
|
129
|
+
done({success:false, message:"未匹配到编码"}) 表示失败。<br/>
|
|
130
|
+
若启用了后台校验,row 已含后台补数字段。<br/>
|
|
131
|
+
更新:this.getWidgetRef(表格名) 比对后改现有行;插入可 addTableData([row])。<br/>
|
|
132
|
+
循环、让步与进度由组件负责,脚本里不要自己写整趟 for。
|
|
133
|
+
</div>
|
|
134
|
+
<i class="el-icon-question label-tip-icon"></i>
|
|
135
|
+
</el-tooltip>
|
|
136
|
+
</el-form-item>
|
|
137
|
+
<el-form-item label="逐行校验脚本" label-width="150px">
|
|
138
|
+
<a href="javascript:void(0);" class="a-link link-oneLind"
|
|
139
|
+
@click="editEventHandler('onValidateRow', onValidateRowParams)">
|
|
140
|
+
<span>{{ optionModel.onValidateRow }}</span>
|
|
141
|
+
<i class="el-icon-edit"></i>
|
|
142
|
+
</a>
|
|
143
|
+
<el-tooltip effect="dark" placement="top">
|
|
144
|
+
<div slot="content">返回 true 或不返回=通过;返回字符串=该行的错误文案。</div>
|
|
145
|
+
<i class="el-icon-question label-tip-icon"></i>
|
|
146
|
+
</el-tooltip>
|
|
147
|
+
</el-form-item>
|
|
148
|
+
<el-form-item label="点击前置事件" label-width="150px">
|
|
149
|
+
<a href="javascript:void(0);" class="a-link link-oneLind"
|
|
150
|
+
@click="editEventHandler('onBeforeClickButton', eventParams)">
|
|
151
|
+
<span>{{ optionModel.onBeforeClickButton }}</span>
|
|
152
|
+
<i class="el-icon-edit"></i>
|
|
153
|
+
</a>
|
|
154
|
+
</el-form-item>
|
|
155
|
+
<el-form-item label="启用确认回调">
|
|
156
|
+
<el-switch v-model="optionModel.onConfirmImportEnabled"></el-switch>
|
|
157
|
+
<el-tooltip effect="dark" placement="top">
|
|
158
|
+
<div slot="content">
|
|
159
|
+
选完文件点确定、Excel 解析完后立刻执行。<br/>
|
|
160
|
+
进度框开:前置钩子,done() 继续导入,close() 中止;不返回 false 则自动继续。<br/>
|
|
161
|
+
进度框关:由脚本接管整批导入,done() 结束并触发导入完成回调。
|
|
162
|
+
</div>
|
|
163
|
+
<i class="el-icon-question label-tip-icon"></i>
|
|
164
|
+
</el-tooltip>
|
|
165
|
+
</el-form-item>
|
|
166
|
+
<el-form-item label="确认回调" label-width="150px" v-if="optionModel.onConfirmImportEnabled" class="el-form-item-second">
|
|
167
|
+
<a href="javascript:void(0);" class="a-link link-oneLind"
|
|
168
|
+
@click="editEventHandler('onConfirmImport', onConfirmImportParams)">
|
|
169
|
+
<span>{{ optionModel.onConfirmImport }}</span>
|
|
170
|
+
<i class="el-icon-edit"></i>
|
|
171
|
+
</a>
|
|
172
|
+
</el-form-item>
|
|
173
|
+
<el-form-item label="导入完成回调" label-width="150px">
|
|
174
|
+
<a href="javascript:void(0);" class="a-link link-oneLind"
|
|
175
|
+
@click="editEventHandler('onSuccessImport', onSuccessImportParams)">
|
|
176
|
+
<span>{{ optionModel.onSuccessImport }}</span>
|
|
177
|
+
<i class="el-icon-edit"></i>
|
|
178
|
+
</a>
|
|
179
|
+
</el-form-item>
|
|
180
|
+
<el-form-item label="隐藏取消按钮" label-width="150px">
|
|
181
|
+
<el-switch v-model="optionModel.hideCancelButton"></el-switch>
|
|
182
|
+
</el-form-item>
|
|
183
|
+
|
|
184
|
+
<bdAttachSettingDialog v-if="showBdAttachSettingDialog" :visiable.sync="showBdAttachSettingDialog" :multi="false"
|
|
185
|
+
@confirm="confirmBdAttachSettingDialog"></bdAttachSettingDialog>
|
|
186
|
+
</div>
|
|
187
|
+
</template>
|
|
188
|
+
|
|
189
|
+
<script>
|
|
190
|
+
import i18n from "../../../../../../components/xform/utils/i18n";
|
|
191
|
+
import eventMixin
|
|
192
|
+
from "../../../../../../components/xform/form-designer/setting-panel/property-editor/event-handler/eventMixin";
|
|
193
|
+
import bdAttachSettingDialog from "../../../../../../views/bd/setting/bd_attach_setting/dialog.vue";
|
|
194
|
+
|
|
195
|
+
export default {
|
|
196
|
+
name: "import2-button-editor",
|
|
197
|
+
components: {bdAttachSettingDialog},
|
|
198
|
+
mixins: [i18n, eventMixin],
|
|
199
|
+
props: {
|
|
200
|
+
designer: Object,
|
|
201
|
+
selectedWidget: Object,
|
|
202
|
+
optionModel: Object,
|
|
203
|
+
},
|
|
204
|
+
data() {
|
|
205
|
+
return {
|
|
206
|
+
eventParams: ["dataId", "formCode", "done"],
|
|
207
|
+
showBdAttachSettingDialog: false,
|
|
208
|
+
onBeforeImportParams: ["dataId", "formCode", 'file', 'resultData', 'done'],
|
|
209
|
+
onConfirmImportParams: ["dataId", "formCode", 'resultData', 'file', 'done', "close"],
|
|
210
|
+
onSuccessImportParams: ["dataId", "formCode", 'resultData', 'file'],
|
|
211
|
+
onImportRowParams: ["dataId", "formCode", "row", "index", "done"],
|
|
212
|
+
onValidateRowParams: ["dataId", "formCode", "row", "index"],
|
|
213
|
+
onImportParamsParams: ["dataId", "formCode", "resultData", "file"]
|
|
214
|
+
};
|
|
215
|
+
},
|
|
216
|
+
methods: {
|
|
217
|
+
confirmBdAttachSettingDialog(rows) {
|
|
218
|
+
if (rows.length) {
|
|
219
|
+
let row = rows[0];
|
|
220
|
+
this.optionModel.importAttachName = row.name;
|
|
221
|
+
this.optionModel.importAttachCode = row.code;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
</script>
|
|
227
|
+
|
|
228
|
+
<style scoped>
|
|
229
|
+
.label-tip-icon {
|
|
230
|
+
margin-left: 4px;
|
|
231
|
+
color: #909399;
|
|
232
|
+
cursor: pointer;
|
|
233
|
+
font-size: 14px;
|
|
234
|
+
vertical-align: middle;
|
|
235
|
+
}
|
|
236
|
+
</style>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<base-input-number
|
|
3
|
+
:value="innerValue"
|
|
4
|
+
v-bind="$attrs"
|
|
5
|
+
v-on="listeners"
|
|
6
|
+
@input="onInput"
|
|
7
|
+
/>
|
|
8
|
+
</template>
|
|
9
|
+
|
|
10
|
+
<script>
|
|
11
|
+
/**
|
|
12
|
+
* 未配置(null / undefined / 非正数)时显示空白,而不是 el-input-number 默认的 0。
|
|
13
|
+
* 清空后回写 null,运行时会回落到全局逻辑参数。
|
|
14
|
+
*/
|
|
15
|
+
function toDisplayNumber(value) {
|
|
16
|
+
if (value == null || value === "") return undefined;
|
|
17
|
+
let num = Number(value);
|
|
18
|
+
if (!Number.isFinite(num) || num <= 0) return undefined;
|
|
19
|
+
return num;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function toStoredNumber(value) {
|
|
23
|
+
if (value == null || value === "") return null;
|
|
24
|
+
let num = Number(value);
|
|
25
|
+
if (!Number.isFinite(num) || num <= 0) return null;
|
|
26
|
+
return num;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export default {
|
|
30
|
+
name: "empty-number-input",
|
|
31
|
+
inheritAttrs: false,
|
|
32
|
+
props: {
|
|
33
|
+
value: {},
|
|
34
|
+
},
|
|
35
|
+
computed: {
|
|
36
|
+
innerValue() {
|
|
37
|
+
return toDisplayNumber(this.value);
|
|
38
|
+
},
|
|
39
|
+
listeners() {
|
|
40
|
+
let listeners = Object.assign({}, this.$listeners);
|
|
41
|
+
delete listeners.input;
|
|
42
|
+
return listeners;
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
methods: {
|
|
46
|
+
onInput(val) {
|
|
47
|
+
this.$emit("input", toStoredNumber(val));
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
</script>
|
|
@@ -19,10 +19,29 @@
|
|
|
19
19
|
></el-switch>
|
|
20
20
|
</el-form-item>
|
|
21
21
|
<el-form-item label="导出每页查询数量" class="form-item-label-top">
|
|
22
|
-
<
|
|
22
|
+
<empty-number-input
|
|
23
23
|
v-model="optionModel.exportPageSize"
|
|
24
24
|
:max="optionModel.showImageAtTable ? 150 : 1000"
|
|
25
|
-
|
|
25
|
+
:placeholder="'默认 ' + defaultPageSize"
|
|
26
|
+
></empty-number-input>
|
|
27
|
+
</el-form-item>
|
|
28
|
+
<el-form-item label="最大查询总数" class="form-item-label-top">
|
|
29
|
+
<empty-number-input
|
|
30
|
+
v-model="optionModel.maxQueryTotal"
|
|
31
|
+
:placeholder="'默认 ' + defaultMaxQueryTotal"
|
|
32
|
+
></empty-number-input>
|
|
33
|
+
<div class="export-item-columns-tip">
|
|
34
|
+
条件导出最多拉取的行数。留空则使用全局逻辑参数(默认 {{ defaultMaxQueryTotal }})
|
|
35
|
+
</div>
|
|
36
|
+
</el-form-item>
|
|
37
|
+
<el-form-item label="每个文件最大数据量" class="form-item-label-top">
|
|
38
|
+
<empty-number-input
|
|
39
|
+
v-model="optionModel.limitFileSize"
|
|
40
|
+
:placeholder="'默认 ' + defaultLimitFileSize"
|
|
41
|
+
></empty-number-input>
|
|
42
|
+
<div class="export-item-columns-tip">
|
|
43
|
+
单个 Excel 最多行数,超出则分多个文件。留空则使用全局逻辑参数(默认 {{ defaultLimitFileSize }})
|
|
44
|
+
</div>
|
|
26
45
|
</el-form-item>
|
|
27
46
|
<el-form-item label="导出参数" label-width="150px">
|
|
28
47
|
<a
|
|
@@ -80,12 +99,15 @@
|
|
|
80
99
|
import i18n from "../../../../utils/i18n";
|
|
81
100
|
import eventMixin from "../event-handler/eventMixin";
|
|
82
101
|
import exportItemColumnsDialog from "../container-data-table/exportItemColumns-dialog.vue";
|
|
102
|
+
import { DEFAULT_CONDITION_EXPORT_CONFIG } from "@base/components/excelExport/conditionExportConfig";
|
|
103
|
+
import emptyNumberInput from "./empty-number-input.vue";
|
|
83
104
|
|
|
84
105
|
export default {
|
|
85
106
|
name: "select-export-item-button-editor",
|
|
86
107
|
mixins: [i18n, eventMixin],
|
|
87
108
|
components: {
|
|
88
109
|
exportItemColumnsDialog,
|
|
110
|
+
emptyNumberInput,
|
|
89
111
|
},
|
|
90
112
|
props: {
|
|
91
113
|
designer: Object,
|
|
@@ -98,6 +120,9 @@ export default {
|
|
|
98
120
|
// 与数据表格属性面板同一套:脚本里可直接用 dataId / formCode
|
|
99
121
|
tableConfigParams: ["dataId", "formCode"],
|
|
100
122
|
showExportItemColumnsDialog: false,
|
|
123
|
+
defaultPageSize: DEFAULT_CONDITION_EXPORT_CONFIG.pageSize,
|
|
124
|
+
defaultMaxQueryTotal: DEFAULT_CONDITION_EXPORT_CONFIG.maxQueryTotal,
|
|
125
|
+
defaultLimitFileSize: DEFAULT_CONDITION_EXPORT_CONFIG.limitFileSize,
|
|
101
126
|
};
|
|
102
127
|
},
|
|
103
128
|
methods: {
|
|
@@ -13,8 +13,23 @@
|
|
|
13
13
|
<el-switch v-model="optionModel.showImageAtTable" @change="changeShowImageAtTable"></el-switch>
|
|
14
14
|
</el-form-item>
|
|
15
15
|
<el-form-item label="导出每页查询数量" class="form-item-label-top">
|
|
16
|
-
<
|
|
17
|
-
|
|
16
|
+
<empty-number-input v-model="optionModel.exportPageSize"
|
|
17
|
+
:max="optionModel.showImageAtTable?150:1000"
|
|
18
|
+
:placeholder="'默认 ' + defaultPageSize"></empty-number-input>
|
|
19
|
+
</el-form-item>
|
|
20
|
+
<el-form-item label="最大查询总数" class="form-item-label-top">
|
|
21
|
+
<empty-number-input v-model="optionModel.maxQueryTotal"
|
|
22
|
+
:placeholder="'默认 ' + defaultMaxQueryTotal"></empty-number-input>
|
|
23
|
+
<div class="export-limit-tip">
|
|
24
|
+
条件导出最多拉取的行数。留空则使用全局逻辑参数(默认 {{ defaultMaxQueryTotal }})
|
|
25
|
+
</div>
|
|
26
|
+
</el-form-item>
|
|
27
|
+
<el-form-item label="每个文件最大数据量" class="form-item-label-top">
|
|
28
|
+
<empty-number-input v-model="optionModel.limitFileSize"
|
|
29
|
+
:placeholder="'默认 ' + defaultLimitFileSize"></empty-number-input>
|
|
30
|
+
<div class="export-limit-tip">
|
|
31
|
+
单个 Excel 最多行数,超出则分多个文件。留空则使用全局逻辑参数(默认 {{ defaultLimitFileSize }})
|
|
32
|
+
</div>
|
|
18
33
|
</el-form-item>
|
|
19
34
|
<el-form-item label="导出参数" label-width="150px">
|
|
20
35
|
<a href="javascript:void(0);" class="a-link link-oneLind"
|
|
@@ -30,10 +45,15 @@
|
|
|
30
45
|
import i18n from "../../../../../../components/xform/utils/i18n";
|
|
31
46
|
import eventMixin
|
|
32
47
|
from "../../../../../../components/xform/form-designer/setting-panel/property-editor/event-handler/eventMixin";
|
|
48
|
+
import { DEFAULT_CONDITION_EXPORT_CONFIG } from "@base/components/excelExport/conditionExportConfig";
|
|
49
|
+
import emptyNumberInput from "./empty-number-input.vue";
|
|
33
50
|
|
|
34
51
|
export default {
|
|
35
52
|
name: "table-export-button-editor",
|
|
36
53
|
mixins: [i18n, eventMixin],
|
|
54
|
+
components: {
|
|
55
|
+
emptyNumberInput,
|
|
56
|
+
},
|
|
37
57
|
props: {
|
|
38
58
|
designer: Object,
|
|
39
59
|
selectedWidget: Object,
|
|
@@ -42,6 +62,9 @@ export default {
|
|
|
42
62
|
data() {
|
|
43
63
|
return {
|
|
44
64
|
eventParams: [],
|
|
65
|
+
defaultPageSize: DEFAULT_CONDITION_EXPORT_CONFIG.pageSize,
|
|
66
|
+
defaultMaxQueryTotal: DEFAULT_CONDITION_EXPORT_CONFIG.maxQueryTotal,
|
|
67
|
+
defaultLimitFileSize: DEFAULT_CONDITION_EXPORT_CONFIG.limitFileSize,
|
|
45
68
|
};
|
|
46
69
|
},
|
|
47
70
|
methods: {
|
|
@@ -57,4 +80,11 @@ export default {
|
|
|
57
80
|
};
|
|
58
81
|
</script>
|
|
59
82
|
|
|
60
|
-
<style scoped
|
|
83
|
+
<style scoped>
|
|
84
|
+
.export-limit-tip {
|
|
85
|
+
line-height: 18px;
|
|
86
|
+
color: #909399;
|
|
87
|
+
font-size: 12px;
|
|
88
|
+
margin-top: 4px;
|
|
89
|
+
}
|
|
90
|
+
</style>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<!-- 仅 H5 版式下显示:该选项在 PC/Pad 版式没有任何作用 -->
|
|
3
|
+
<el-form-item
|
|
4
|
+
v-if="showEditor"
|
|
5
|
+
:label="i18nt('designer.setting.h5Span')"
|
|
6
|
+
class="form-item-label-top"
|
|
7
|
+
>
|
|
8
|
+
<el-tooltip
|
|
9
|
+
:enterable="false"
|
|
10
|
+
effect="dark"
|
|
11
|
+
:content="i18nt('designer.setting.h5SpanHelp')"
|
|
12
|
+
placement="top"
|
|
13
|
+
popper-class="tooltip-skin"
|
|
14
|
+
>
|
|
15
|
+
<el-radio-group v-model="optionModel.h5Span" size="mini">
|
|
16
|
+
<el-radio-button label="full">
|
|
17
|
+
{{ i18nt("designer.setting.h5SpanFull") }}
|
|
18
|
+
</el-radio-button>
|
|
19
|
+
<el-radio-button label="half">
|
|
20
|
+
{{ i18nt("designer.setting.h5SpanHalf") }}
|
|
21
|
+
</el-radio-button>
|
|
22
|
+
</el-radio-group>
|
|
23
|
+
</el-tooltip>
|
|
24
|
+
</el-form-item>
|
|
25
|
+
</template>
|
|
26
|
+
|
|
27
|
+
<script>
|
|
28
|
+
import i18n from "../../../../../components/xform/utils/i18n";
|
|
29
|
+
|
|
30
|
+
export default {
|
|
31
|
+
name: "h5Span-editor",
|
|
32
|
+
mixins: [i18n],
|
|
33
|
+
props: {
|
|
34
|
+
designer: Object,
|
|
35
|
+
selectedWidget: Object,
|
|
36
|
+
optionModel: Object,
|
|
37
|
+
},
|
|
38
|
+
computed: {
|
|
39
|
+
showEditor() {
|
|
40
|
+
let formConfig = this.designer && this.designer.formConfig;
|
|
41
|
+
return !!formConfig && formConfig.layoutType === "H5";
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
// 注意:不要在 created 里给老表单自动回填 "full"。
|
|
45
|
+
// upgradeWidgetConfig 给老表单补新增 option 时补的是 null(不是默认值),
|
|
46
|
+
// 此时两个 radio 都不选中是可接受表现(等价整宽);自动回填会把所有老表单
|
|
47
|
+
// 标记成已修改。详见 docs/2026-08 xform H5 P0 实现规格.md §3.2 / §3.4。
|
|
48
|
+
};
|
|
49
|
+
</script>
|
|
50
|
+
|
|
51
|
+
<style scoped></style>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<el-form-item
|
|
3
|
+
:label="i18nt('designer.setting.itemStyle')"
|
|
4
|
+
class="form-item-label-top"
|
|
5
|
+
>
|
|
6
|
+
<el-tooltip
|
|
7
|
+
:enterable="false"
|
|
8
|
+
effect="dark"
|
|
9
|
+
:content="i18nt('designer.setting.itemStyleHelp')"
|
|
10
|
+
placement="top"
|
|
11
|
+
popper-class="tooltip-skin"
|
|
12
|
+
>
|
|
13
|
+
<el-radio-group v-model="optionModel.itemStyle" size="mini">
|
|
14
|
+
<el-radio-button label="plain">
|
|
15
|
+
{{ i18nt("designer.setting.itemStylePlain") }}
|
|
16
|
+
</el-radio-button>
|
|
17
|
+
<el-radio-button label="card">
|
|
18
|
+
{{ i18nt("designer.setting.itemStyleCard") }}
|
|
19
|
+
</el-radio-button>
|
|
20
|
+
</el-radio-group>
|
|
21
|
+
</el-tooltip>
|
|
22
|
+
</el-form-item>
|
|
23
|
+
</template>
|
|
24
|
+
|
|
25
|
+
<script>
|
|
26
|
+
import i18n from "../../../../../components/xform/utils/i18n";
|
|
27
|
+
|
|
28
|
+
export default {
|
|
29
|
+
name: "itemStyle-editor",
|
|
30
|
+
mixins: [i18n],
|
|
31
|
+
props: {
|
|
32
|
+
designer: Object,
|
|
33
|
+
selectedWidget: Object,
|
|
34
|
+
optionModel: Object,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<style scoped></style>
|
|
@@ -27,6 +27,15 @@ const COMMON_PROPERTIES = {
|
|
|
27
27
|
border: "border-editor",
|
|
28
28
|
labelWidth: "labelWidth-editor",
|
|
29
29
|
labelHidden: "labelHidden-editor",
|
|
30
|
+
/* 「H5 占宽」暂时隐藏(2026-09-01)。属性面板只渲染登记在这几张表里的属性
|
|
31
|
+
(setting-panel/indexMixin.js 的 hasPropEditor 逐条查),注释掉这一行,
|
|
32
|
+
面板上就不出这一项。要放出来,把注释去掉即可。
|
|
33
|
+
★ 只动面板,不动数据与运行期:字段原型仍带 h5Span:"full"
|
|
34
|
+
(widgetsConfig 的 applyH5FieldDefaults),已经存成 "half" 的老表单
|
|
35
|
+
照旧按两列渲染(form-item-wrapper 读的是实例 options)。
|
|
36
|
+
★ 明细列表列上那个「H5列宽」是另一处 UI(list-h5-editor 里的列表格),
|
|
37
|
+
不走这张表,不受影响。 */
|
|
38
|
+
// h5Span: "h5Span-editor",
|
|
30
39
|
rows: "rows-editor",
|
|
31
40
|
required: "required-editor",
|
|
32
41
|
// 'requiredHint': 'requiredHint-editor',
|
|
@@ -121,6 +130,7 @@ const COMMON_PROPERTIES = {
|
|
|
121
130
|
detailH5Container: "detail-h5-editor",
|
|
122
131
|
h5Card: "h5-card-editor",
|
|
123
132
|
listH5: "list-h5-editor",
|
|
133
|
+
itemStyle: "itemStyle-editor",
|
|
124
134
|
formScriptEnabled: "formScriptEnabled-editor",
|
|
125
135
|
textFlag: "textFlag-editor",
|
|
126
136
|
showRuleFlag: "showRuleFlag-editor",
|
|
@@ -17,9 +17,12 @@
|
|
|
17
17
|
>
|
|
18
18
|
<svg-icon icon-class="redo" />
|
|
19
19
|
</el-button>
|
|
20
|
-
<el-button-group
|
|
20
|
+
<el-button-group :title="layoutTypeLocked ? layoutTypeLockedTip : ''">
|
|
21
|
+
<!-- 锁定时只保留当前模式一个按钮,另一个不显示 -->
|
|
21
22
|
<el-button
|
|
23
|
+
v-if="!layoutTypeLocked || layoutType === 'PC'"
|
|
22
24
|
:type="layoutType === 'PC' ? 'info' : ''"
|
|
25
|
+
:disabled="layoutTypeLocked"
|
|
23
26
|
@click="changeLayoutType('PC')"
|
|
24
27
|
size="mini"
|
|
25
28
|
>
|
|
@@ -27,7 +30,9 @@
|
|
|
27
30
|
</el-button>
|
|
28
31
|
<!-- <el-button :type="layoutType === 'Pad' ? 'info' : ''" @click="changeLayoutType('Pad')">{{ i18nt('designer.toolbar.padLayout') }}</el-button>-->
|
|
29
32
|
<el-button
|
|
33
|
+
v-if="!layoutTypeLocked || layoutType === 'H5'"
|
|
30
34
|
:type="layoutType === 'H5' ? 'info' : ''"
|
|
35
|
+
:disabled="layoutTypeLocked"
|
|
31
36
|
@click="changeLayoutType('H5')"
|
|
32
37
|
size="mini"
|
|
33
38
|
>
|