cloud-web-corejs 1.0.54-dev.781 → 1.0.54-dev.783

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 (33) hide show
  1. package/package.json +1 -1
  2. package/src/components/VabUpload/index.vue +242 -242
  3. package/src/components/VabUpload/mixins.js +1971 -1971
  4. package/src/components/VabUpload/privateProfileDialog.vue +2 -2
  5. package/src/components/hiprint/view/design/index.vue +7 -2
  6. package/src/components/obsUpload/index.vue +234 -234
  7. package/src/components/obsUpload/mixins.js +1542 -1542
  8. package/src/components/vb-tabs/x-tabs.vue +7 -3
  9. package/src/components/xform/docs//346/240/221/350/241/250rowField/346/224/266/346/225/233-/350/220/275/345/234/260/346/226/207/346/241/243.md +1427 -0
  10. package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +2 -2
  11. package/src/components/xform/form-designer/form-widget/dialog/formDrawer.vue +2 -2
  12. package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +2 -2
  13. package/src/components/xform/form-designer/form-widget/field-widget/copy_button-widget.vue +11 -2
  14. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +369 -369
  15. package/src/components/xform/form-designer/setting-panel/property-editor/fileTypesSelect.vue +69 -23
  16. package/src/components/xform/form-render/container-item/data-table-item.vue +1 -1
  17. package/src/components/xform/form-render/container-item/data-table-mixin.js +1469 -428
  18. package/src/components/xform/form-render/indexMixin.js +379 -263
  19. package/src/components/xform/mixins/defaultHandle.js +234 -28
  20. package/src/components/xform/mixins/scriptHttp.js +4 -4
  21. package/src/components/xform/utils/treeTableUtil.js +1265 -0
  22. package/src/components/xform/utils/util.js +29 -14
  23. package/src/microRouter/index.js +3 -0
  24. package/src/mixins/tableTree/index.js +77 -14
  25. package/src/store/config/index.js +28 -28
  26. package/src/utils/menuAdapter.js +277 -277
  27. package/src/utils/resolveViewComponent.js +203 -203
  28. package/src/utils/vab.js +6 -3
  29. package/src/views/bd/setting/formVersion/ftHistoryDialog.vue +9 -2
  30. package/src/views/user/common_attribute/list.vue +1 -1
  31. package/src/views/user/form/vform/render.vue +17 -2
  32. package/src/views/user/form/view/list.vue +11 -10
  33. package/src/views/user/wf/wfReport/index.vue +625 -625
@@ -8,6 +8,8 @@ modules = {
8
8
  data() {
9
9
  return {
10
10
  timerMap: {},
11
+ formSavePending: false,
12
+ formSaveReconcileTask: null,
11
13
  };
12
14
  },
13
15
  beforeDestroy() {
@@ -55,7 +57,7 @@ modules = {
55
57
  if (!reqFormData) reqFormData = this.getReqFormData();
56
58
  return reqFormData.data[entity];
57
59
  },
58
- getReqFormData() {
60
+ getReqFormData(formDataOverride) {
59
61
  let formRef = this.getFormRef ? this.getFormRef() : this;
60
62
  let formConfig = formRef.formConfig;
61
63
  let entity = formConfig.entity;
@@ -64,7 +66,11 @@ modules = {
64
66
  let reportTemplate = formRef?.reportTemplate;
65
67
  let formCode = reportTemplate?.formCode;
66
68
 
67
- let formData = this.$baseLodash.cloneDeep(formRef.getRealFormData());
69
+ let sourceFormData
70
+ = arguments.length > 0
71
+ ? formDataOverride
72
+ : formRef.getRealFormData();
73
+ let formData = this.$baseLodash.cloneDeep(sourceFormData);
68
74
  let mainData = formData[formCode] || {};
69
75
  delete formData[formCode];
70
76
  formData[entity] = mainData;
@@ -147,13 +153,14 @@ modules = {
147
153
  option?.config?.confirmText ||
148
154
  this.$t1("您确定要保存并提交流程吗?");
149
155
 
150
- this.saveDefaultHandle({
156
+ return this.saveDefaultHandle({
151
157
  ...option,
152
158
  config: {
153
159
  ...option?.config,
154
160
  successMsg: option?.config?.successMsg ?? true,
155
161
  isConfirm: option?.config?.isConfirm ?? true,
156
162
  confirmText: option?.config?.confirmText || confirmText,
163
+ skipHostReloadAfterSave: true,
157
164
  success: (res) => {
158
165
  // ★ 保存成功后,只升级新增页签的「元数据」为编辑态(设 dataId/isAdd/formCode/标题),
159
166
  // 不重渲染详情内容。这样即便随后提交失败/取消候选人弹框,页签也已是编辑态,
@@ -183,35 +190,79 @@ modules = {
183
190
  },
184
191
  });
185
192
  },
186
- saveDefaultHandle(option) {
193
+ async saveDefaultHandle(option) {
187
194
  let formRef = this.getFormRef ? this.getFormRef() : this;
188
195
  let formConfig = formRef.formConfig;
189
196
  let entity = formConfig.entity;
190
197
  if (!entity) return;
191
- let dataId = formRef?.dataId;
192
- let reportTemplate = formRef?.reportTemplate;
193
- let formCode = reportTemplate?.formCode;
194
198
  let scriptCode = formConfig.saveScriptCode || "saveUpdate";
195
- let config = option?.config;
196
- // formRef.clearValidate();
197
- // formRef.$forceUpdate();
198
- // let formDataModel = formRef.formDataModel;
199
-
200
- formRef.validate((valid) => {
201
- if (valid) {
202
- let reqData = this.getReqFormData();
203
- let callback = (res, response) => {
204
- this.onAfterSaveHandle(reqData, res, response); //保存成功后处理
205
- option?.callback && option.callback(res); //回调
199
+ let config = { ...(option?.config || {}) };
200
+ let skipHostReloadAfterSave
201
+ = config.skipHostReloadAfterSave === true;
202
+ delete config.skipHostReloadAfterSave;
203
+ if (typeof formRef.formSaveReconcileTask === "function") {
204
+ return formRef.formSaveReconcileTask();
205
+ }
206
+ if (formRef.formSavePending) {
207
+ this.$message.warning(this.$t1("数据正在保存,请勿重复操作"));
208
+ return false;
209
+ }
210
+
211
+ formRef.formSavePending = true;
212
+ let keepSaveLocked = false;
213
+ try {
214
+ let valid = await new Promise((resolve, reject) => {
215
+ try {
216
+ formRef.validate(resolve);
217
+ } catch (error) {
218
+ reject(error);
219
+ }
220
+ });
221
+ if (!valid) return false;
222
+
223
+ let submitFormData
224
+ = typeof formRef.buildSubmitPayload === "function"
225
+ ? await formRef.buildSubmitPayload()
226
+ : formRef.getRealFormData();
227
+ let reqData = this.getReqFormData(submitFormData);
228
+ let shouldConfirm = config.isConfirm ?? true;
229
+ let confirmText
230
+ = config.confirmText || this.$t1("您确定要保存吗?");
231
+ if (shouldConfirm) {
232
+ try {
233
+ await this.$baseConfirm(confirmText);
234
+ } catch (error) {
235
+ return false;
236
+ }
237
+ }
238
+
239
+ let userSuccess = config.success;
240
+ let userFail = config.fail;
241
+ let userError = config.error;
242
+ let userCallback = config.callback;
243
+
244
+ return await new Promise((resolve, reject) => {
245
+ let settled = false;
246
+ let resolveOnce = (value) => {
247
+ if (settled) return;
248
+ settled = true;
249
+ resolve(value);
206
250
  };
207
- this.formHttp({
251
+ let rejectOnce = (error) => {
252
+ if (settled) return;
253
+ settled = true;
254
+ reject(error);
255
+ };
256
+ let requestTask = this.formHttp({
208
257
  // url: "/" + reportTemplate.serviceName + "/form_ins/saveUpdate",
209
258
  scriptCode: scriptCode,
210
259
  data: reqData,
211
260
  successMsg: true,
212
- isConfirm: true,
213
- confirmText: this.$t1("您确定要保存吗?"),
214
- success: (res) => {
261
+ ...config,
262
+ isConfirm: false,
263
+ confirmText,
264
+ callback: undefined,
265
+ success: async (res, response) => {
215
266
  let editFormCode = formConfig.editFormCode;
216
267
  let updateParam = {
217
268
  dataId: res.objx,
@@ -219,16 +270,171 @@ modules = {
219
270
  if (editFormCode) {
220
271
  updateParam.formCode = editFormCode;
221
272
  }
273
+ let reloadMethod
274
+ = typeof formRef.reloadSavedFormData === "function"
275
+ ? formRef.reloadSavedFormData
276
+ : formRef.reloadForm;
277
+ let runHostReload = async () => {
278
+ let currentFormCode = formRef.reportTemplate?.formCode;
279
+ if (
280
+ skipHostReloadAfterSave
281
+ || !editFormCode
282
+ || editFormCode === currentFormCode
283
+ ) {
284
+ return;
285
+ }
286
+ await formRef.reloadForm({ updateParam });
287
+ };
288
+ let callbacksStarted = false;
289
+ let runPostReloadCallbacks = async () => {
290
+ if (callbacksStarted) return res;
291
+ callbacksStarted = true;
292
+ let callbacks = [
293
+ () => this.onAfterSaveHandle(reqData, res, response),
294
+ typeof userSuccess === "function"
295
+ ? () => userSuccess(res)
296
+ : null,
297
+ typeof option?.callback === "function"
298
+ ? () => option.callback(res)
299
+ : null,
300
+ typeof userCallback === "function"
301
+ ? () => userCallback(res, response)
302
+ : null,
303
+ ].filter(Boolean);
304
+ let hasCallbackError = false;
305
+ let firstCallbackError;
306
+ for (let index = 0; index < callbacks.length; index++) {
307
+ try {
308
+ await callbacks[index]();
309
+ } catch (error) {
310
+ if (!hasCallbackError) {
311
+ hasCallbackError = true;
312
+ firstCallbackError = error;
313
+ }
314
+ }
315
+ }
316
+ if (hasCallbackError) {
317
+ let detail
318
+ = firstCallbackError?.message || firstCallbackError;
319
+ let message = this.$t1("已保存,后续处理失败");
320
+ this.$message.error(
321
+ detail ? `${message}:${detail}` : message
322
+ );
323
+ }
324
+ return res;
325
+ };
326
+ let clearReconcileState = () => {
327
+ formRef.formSaveReconcileTask = null;
328
+ formRef.formSavePending = false;
329
+ };
330
+ let showHostReloadFailure = (retry, error) => {
331
+ let detail = error?.message;
332
+ let message = this.$t1(
333
+ retry
334
+ ? "重新加载仍未成功,请手动刷新后再操作"
335
+ : "保存成功,但重新加载失败,请手动刷新后再操作"
336
+ );
337
+ this.$message.error(
338
+ detail ? `${message}:${detail}` : message
339
+ );
340
+ };
341
+ let installHostReloadRetry = (error) => {
342
+ keepSaveLocked = true;
343
+ let hostRetryPromise = null;
344
+ formRef.formSaveReconcileTask = () => {
345
+ if (hostRetryPromise) return hostRetryPromise;
346
+ hostRetryPromise = (async () => {
347
+ try {
348
+ await runHostReload();
349
+ clearReconcileState();
350
+ return res;
351
+ } catch (retryError) {
352
+ showHostReloadFailure(true, retryError);
353
+ return false;
354
+ } finally {
355
+ hostRetryPromise = null;
356
+ }
357
+ })();
358
+ return hostRetryPromise;
359
+ };
360
+ showHostReloadFailure(false, error);
361
+ };
362
+ try {
363
+ await reloadMethod.call(formRef, { updateParam });
364
+ } catch (error) {
365
+ keepSaveLocked = true;
366
+ let retryPromise = null;
367
+ formRef.formSaveReconcileTask = () => {
368
+ if (retryPromise) return retryPromise;
369
+ retryPromise = (async () => {
370
+ try {
371
+ await reloadMethod.call(formRef, { updateParam });
372
+ } catch (retryError) {
373
+ showHostReloadFailure(true, retryError);
374
+ retryPromise = null;
375
+ return false;
376
+ }
377
+ let result = await runPostReloadCallbacks();
378
+ try {
379
+ await runHostReload();
380
+ } catch (hostReloadError) {
381
+ installHostReloadRetry(hostReloadError);
382
+ return false;
383
+ }
384
+ clearReconcileState();
385
+ return result;
386
+ })();
387
+ return retryPromise;
388
+ };
389
+ showHostReloadFailure(false, error);
390
+ rejectOnce(error);
391
+ return;
392
+ }
222
393
 
223
- formRef.reloadForm({
224
- updateParam,
225
- });
394
+ await runPostReloadCallbacks();
395
+ try {
396
+ await runHostReload();
397
+ } catch (hostReloadError) {
398
+ installHostReloadRetry(hostReloadError);
399
+ rejectOnce(hostReloadError);
400
+ return;
401
+ }
402
+ resolveOnce(res);
403
+ },
404
+ fail: (res, response) => {
405
+ this.onAfterSaveHandle(reqData, res, response);
406
+ if (typeof option?.callback === "function") {
407
+ option.callback(res);
408
+ }
409
+ if (typeof userCallback === "function") {
410
+ userCallback(res, response);
411
+ }
412
+ Promise.resolve(
413
+ typeof userFail === "function" ? userFail(res) : null
414
+ ).then(() => resolveOnce(res), rejectOnce);
415
+ },
416
+ error: (error) => {
417
+ Promise.resolve(
418
+ typeof userError === "function" ? userError(error) : null
419
+ ).then(() => rejectOnce(error), rejectOnce);
226
420
  },
227
- ...config,
228
- callback: callback,
229
421
  });
422
+ if (requestTask && typeof requestTask.catch === "function") {
423
+ requestTask.catch(rejectOnce);
424
+ }
425
+ });
426
+ } catch (error) {
427
+ if (!keepSaveLocked) {
428
+ let message
429
+ = error?.message || error || this.$t1("保存失败");
430
+ this.$message.error(message);
230
431
  }
231
- });
432
+ return false;
433
+ } finally {
434
+ if (!keepSaveLocked) {
435
+ formRef.formSavePending = false;
436
+ }
437
+ }
232
438
  },
233
439
  setInterval(callback, millis) {
234
440
  let timer = setInterval(callback, millis);
@@ -122,7 +122,7 @@ modules = {
122
122
  fixeData: reportGlobalMap,
123
123
  ...reqData,
124
124
  },
125
- success: (res) => {
125
+ success: (res, response) => {
126
126
  if (res.objx) {
127
127
  res.objx = this.handleDecryptData(res.objx);
128
128
  }
@@ -133,7 +133,7 @@ modules = {
133
133
  duration: 1000,
134
134
  });
135
135
  }
136
- success && success(res);
136
+ success && success(res, response);
137
137
  if (opts.wfConfig) {
138
138
  let formTarget = this.getFormRef ? this.getFormRef() : this;
139
139
  let wfConfig = opts.wfConfig(res);
@@ -157,8 +157,8 @@ modules = {
157
157
  }
158
158
  resolve(res);
159
159
  },
160
- fail: (res) => {
161
- fail && fail(res);
160
+ fail: (res, response) => {
161
+ fail && fail(res, response);
162
162
  resolve(res);
163
163
  },
164
164
  error: (e) => {