cloud-web-corejs 1.0.54-dev.794 → 1.0.54-dev.795
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/xform/form-designer/setting-panel/form-setting.vue +9 -1
- package/src/components/xform/form-render/container-item/data-table-mixin.js +5 -11
- package/src/components/xform/form-render/indexMixin.js +5 -23
- package/src/components/xform/mixins/defaultHandle.js +29 -37
package/package.json
CHANGED
|
@@ -285,7 +285,12 @@
|
|
|
285
285
|
</a>
|
|
286
286
|
</el-form-item>
|
|
287
287
|
</el-collapse-item>
|
|
288
|
-
<el-collapse-item name="4" title="
|
|
288
|
+
<el-collapse-item name="4" title="列表标签页信息(仅列表表单生效)">
|
|
289
|
+
<el-form-item>
|
|
290
|
+
<span style="color: #999; font-size: 12px; line-height: 1.6">
|
|
291
|
+
本组配置只从「查询列表页」所用的表单读取,在详情/编辑表单里设置不会生效
|
|
292
|
+
</span>
|
|
293
|
+
</el-form-item>
|
|
289
294
|
<el-form-item :label="i18nt('列表启用详情多标签')">
|
|
290
295
|
<el-switch v-model="formConfig.multiTabEnabled"></el-switch>
|
|
291
296
|
</el-form-item>
|
|
@@ -309,6 +314,9 @@
|
|
|
309
314
|
<el-radio label="closeToList">关闭页签并回列表刷新</el-radio>
|
|
310
315
|
<el-radio label="refreshCurrent">刷新当前页签</el-radio>
|
|
311
316
|
</el-radio-group>
|
|
317
|
+
<div style="color: #999; font-size: 12px; line-height: 1.6">
|
|
318
|
+
详情页「保存并提交」「直接启动流程」成功后的行为,不填默认「刷新当前页签」
|
|
319
|
+
</div>
|
|
312
320
|
</el-form-item>
|
|
313
321
|
</el-collapse-item>
|
|
314
322
|
<el-collapse-item name="5" title="其他标签页信息">
|
|
@@ -3892,13 +3892,11 @@ modules = {
|
|
|
3892
3892
|
}
|
|
3893
3893
|
if (transactional) {
|
|
3894
3894
|
let formRef = this.getFormRef();
|
|
3895
|
-
|
|
3896
|
-
|
|
3897
|
-
|
|
3898
|
-
: formRef?.reloadForm;
|
|
3899
|
-
if (typeof reloadMethod === "function") {
|
|
3895
|
+
// 整单刷新只能走宿主重挂载:就地 setFormData 会在表单已挂载时逐字段广播赋值,
|
|
3896
|
+
// 当场触发各字段 onChange(读到兄弟组件的旧值)并清空子表。
|
|
3897
|
+
if (typeof formRef?.reloadForm === "function") {
|
|
3900
3898
|
try {
|
|
3901
|
-
await
|
|
3899
|
+
await formRef.reloadForm();
|
|
3902
3900
|
} catch (error) {
|
|
3903
3901
|
let reloadError = error instanceof Error
|
|
3904
3902
|
? error
|
|
@@ -4071,17 +4069,13 @@ modules = {
|
|
|
4071
4069
|
}
|
|
4072
4070
|
this.treeSingleSavePending = true;
|
|
4073
4071
|
let keepSaveLocked = false;
|
|
4074
|
-
let reloadMethod
|
|
4075
|
-
= typeof formRef.reloadSavedFormData === "function"
|
|
4076
|
-
? formRef.reloadSavedFormData
|
|
4077
|
-
: formRef.reloadForm;
|
|
4078
4072
|
let installReloadRetry = () => {
|
|
4079
4073
|
let retryPromise = null;
|
|
4080
4074
|
this.treeSingleSaveReconcileTask = () => {
|
|
4081
4075
|
if (retryPromise) return retryPromise;
|
|
4082
4076
|
retryPromise = (async () => {
|
|
4083
4077
|
try {
|
|
4084
|
-
await
|
|
4078
|
+
await formRef.reloadForm();
|
|
4085
4079
|
delete obj.$table.editCloneRow;
|
|
4086
4080
|
this.treeSingleSaveReconcileTask = null;
|
|
4087
4081
|
this.treeSingleSavePending = false;
|
|
@@ -4489,29 +4489,11 @@ modules = {
|
|
|
4489
4489
|
return Promise.reject(error);
|
|
4490
4490
|
}
|
|
4491
4491
|
},
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
|
|
4495
|
-
|
|
4496
|
-
|
|
4497
|
-
throw new Error("缺少保存后的数据 ID,无法重新加载表单。");
|
|
4498
|
-
}
|
|
4499
|
-
let response = await this.loadFormData({
|
|
4500
|
-
dataId: nextDataId,
|
|
4501
|
-
replace: true,
|
|
4502
|
-
});
|
|
4503
|
-
if (!response || response.type !== "success") {
|
|
4504
|
-
throw new Error(response?.content || "保存后的表单数据重新加载失败。");
|
|
4505
|
-
}
|
|
4506
|
-
if (nextDataId !== undefined && nextDataId !== null) {
|
|
4507
|
-
this.$emit("update:dataId", nextDataId);
|
|
4508
|
-
}
|
|
4509
|
-
if (nextFormCode) {
|
|
4510
|
-
this.$emit("update:formCode", nextFormCode);
|
|
4511
|
-
}
|
|
4512
|
-
await new Promise((resolve) => this.$nextTick(resolve));
|
|
4513
|
-
return response;
|
|
4514
|
-
},
|
|
4492
|
+
// 注:此处曾有 reloadSavedFormData(就地整单取数 + setFormData)。它在表单已挂载时
|
|
4493
|
+
// 逐字段广播赋值,每个字段的 onChange 当场同步执行,先赋值组件的脚本读到的是后赋值
|
|
4494
|
+
// 组件的旧值(getFieldValue 取的是对方尚未刷新的 fieldModel),公式与 keyName 联动
|
|
4495
|
+
// 乱序,getOne 不返回的子表/表头附件字段还会被清空。整单刷新一律走 reloadForm
|
|
4496
|
+
// (宿主 toggle v-if 重挂载),保持「先填满 formDataModel 再挂载组件」这个前提。
|
|
4515
4497
|
saveForm(callback) {
|
|
4516
4498
|
this.validateForm((valid) => {
|
|
4517
4499
|
if (!valid) return;
|
|
@@ -270,14 +270,37 @@ modules = {
|
|
|
270
270
|
if (editFormCode) {
|
|
271
271
|
updateParam.formCode = editFormCode;
|
|
272
272
|
}
|
|
273
|
-
let reloadMethod
|
|
274
|
-
= typeof formRef.reloadSavedFormData === "function"
|
|
275
|
-
? formRef.reloadSavedFormData
|
|
276
|
-
: formRef.reloadForm;
|
|
277
273
|
// 保存成功后一律让宿主整页重挂载(toggle v-if):新增/编辑都需要出流程信息、
|
|
278
|
-
//
|
|
274
|
+
// 切编辑模板、按新状态重算显隐与只读——这些就地取数做不到。
|
|
279
275
|
// 唯一例外是「保存并提交」路径(skipHostReloadAfterSave=true),
|
|
280
276
|
// 它的刷新交给流程结束后的 onWfStartSuccess / onWfStartAbort,避免刷两次。
|
|
277
|
+
//
|
|
278
|
+
// 刷新前只同步「元数据」,绝不做整单 setFormData:表单已挂载时那是逐字段同步
|
|
279
|
+
// 广播赋值,每个字段的 onChange 会当场执行,先赋值组件的脚本读到的是后赋值
|
|
280
|
+
// 组件的旧值,公式与 keyName 联动乱序,子表还会被整体清空(getOne 不返回子表)。
|
|
281
|
+
// 首屏之所以正确,靠的是「先填满 formDataModel 再挂载组件」,就地整单赋值破坏
|
|
282
|
+
// 了这个前提,故整单刷新只能走重挂载。
|
|
283
|
+
let syncSavedMeta = () => {
|
|
284
|
+
let nextDataId = updateParam.dataId;
|
|
285
|
+
if (
|
|
286
|
+
nextDataId !== undefined
|
|
287
|
+
&& nextDataId !== null
|
|
288
|
+
&& nextDataId !== ""
|
|
289
|
+
) {
|
|
290
|
+
// 提交报文的主表以 currentFormData 打底(见 form-render getSubData2),
|
|
291
|
+
// 主键 id 不是表单控件,只能在此回写;否则 skip 路径下再次保存会重复入库。
|
|
292
|
+
if (
|
|
293
|
+
formRef.currentFormData
|
|
294
|
+
&& formRef.currentFormData.id == null
|
|
295
|
+
) {
|
|
296
|
+
formRef.currentFormData.id = nextDataId;
|
|
297
|
+
}
|
|
298
|
+
formRef.$emit("update:dataId", nextDataId);
|
|
299
|
+
}
|
|
300
|
+
if (updateParam.formCode) {
|
|
301
|
+
formRef.$emit("update:formCode", updateParam.formCode);
|
|
302
|
+
}
|
|
303
|
+
};
|
|
281
304
|
let runHostReload = async () => {
|
|
282
305
|
if (skipHostReloadAfterSave) return;
|
|
283
306
|
await formRef.reloadForm({ updateParam });
|
|
@@ -356,38 +379,7 @@ modules = {
|
|
|
356
379
|
};
|
|
357
380
|
showHostReloadFailure(false, error);
|
|
358
381
|
};
|
|
359
|
-
|
|
360
|
-
await reloadMethod.call(formRef, { updateParam });
|
|
361
|
-
} catch (error) {
|
|
362
|
-
keepSaveLocked = true;
|
|
363
|
-
let retryPromise = null;
|
|
364
|
-
formRef.formSaveReconcileTask = () => {
|
|
365
|
-
if (retryPromise) return retryPromise;
|
|
366
|
-
retryPromise = (async () => {
|
|
367
|
-
try {
|
|
368
|
-
await reloadMethod.call(formRef, { updateParam });
|
|
369
|
-
} catch (retryError) {
|
|
370
|
-
showHostReloadFailure(true, retryError);
|
|
371
|
-
retryPromise = null;
|
|
372
|
-
return false;
|
|
373
|
-
}
|
|
374
|
-
let result = await runPostReloadCallbacks();
|
|
375
|
-
try {
|
|
376
|
-
await runHostReload();
|
|
377
|
-
} catch (hostReloadError) {
|
|
378
|
-
installHostReloadRetry(hostReloadError);
|
|
379
|
-
return false;
|
|
380
|
-
}
|
|
381
|
-
clearReconcileState();
|
|
382
|
-
return result;
|
|
383
|
-
})();
|
|
384
|
-
return retryPromise;
|
|
385
|
-
};
|
|
386
|
-
showHostReloadFailure(false, error);
|
|
387
|
-
rejectOnce(error);
|
|
388
|
-
return;
|
|
389
|
-
}
|
|
390
|
-
|
|
382
|
+
syncSavedMeta();
|
|
391
383
|
await runPostReloadCallbacks();
|
|
392
384
|
try {
|
|
393
385
|
await runHostReload();
|