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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cloud-web-corejs",
3
3
  "private": false,
4
- "version": "1.0.54-dev.794",
4
+ "version": "1.0.54-dev.795",
5
5
  "scripts": {
6
6
  "dev": "vue-cli-service serve",
7
7
  "dev:micro": "vue-cli-service serve --port 17527",
@@ -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
- let reloadMethod
3896
- = typeof formRef?.reloadSavedFormData === "function"
3897
- ? formRef.reloadSavedFormData
3898
- : formRef?.reloadForm;
3899
- if (typeof reloadMethod === "function") {
3895
+ // 整单刷新只能走宿主重挂载:就地 setFormData 会在表单已挂载时逐字段广播赋值,
3896
+ // 当场触发各字段 onChange(读到兄弟组件的旧值)并清空子表。
3897
+ if (typeof formRef?.reloadForm === "function") {
3900
3898
  try {
3901
- await reloadMethod.call(formRef);
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 reloadMethod.call(formRef);
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
- async reloadSavedFormData(option = {}) {
4493
- let updateParam = option.updateParam || {};
4494
- let nextDataId = updateParam.dataId ?? this.dataId;
4495
- let nextFormCode = updateParam.formCode;
4496
- if (nextDataId === undefined || nextDataId === null || nextDataId === "") {
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
- // 切编辑模板、按新状态重算显隐与只读——这些就地取数(reloadSavedFormData)做不到。
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
- try {
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();