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.
- package/package.json +1 -1
- package/src/components/VabUpload/index.vue +242 -242
- package/src/components/VabUpload/mixins.js +1971 -1971
- package/src/components/VabUpload/privateProfileDialog.vue +2 -2
- package/src/components/hiprint/view/design/index.vue +7 -2
- package/src/components/obsUpload/index.vue +234 -234
- package/src/components/obsUpload/mixins.js +1542 -1542
- package/src/components/vb-tabs/x-tabs.vue +7 -3
- 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
- package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +2 -2
- package/src/components/xform/form-designer/form-widget/dialog/formDrawer.vue +2 -2
- package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +2 -2
- package/src/components/xform/form-designer/form-widget/field-widget/copy_button-widget.vue +11 -2
- package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +369 -369
- package/src/components/xform/form-designer/setting-panel/property-editor/fileTypesSelect.vue +69 -23
- package/src/components/xform/form-render/container-item/data-table-item.vue +1 -1
- package/src/components/xform/form-render/container-item/data-table-mixin.js +1469 -428
- package/src/components/xform/form-render/indexMixin.js +379 -263
- package/src/components/xform/mixins/defaultHandle.js +234 -28
- package/src/components/xform/mixins/scriptHttp.js +4 -4
- package/src/components/xform/utils/treeTableUtil.js +1265 -0
- package/src/components/xform/utils/util.js +29 -14
- package/src/microRouter/index.js +3 -0
- package/src/mixins/tableTree/index.js +77 -14
- package/src/store/config/index.js +28 -28
- package/src/utils/menuAdapter.js +277 -277
- package/src/utils/resolveViewComponent.js +203 -203
- package/src/utils/vab.js +6 -3
- package/src/views/bd/setting/formVersion/ftHistoryDialog.vue +9 -2
- package/src/views/user/common_attribute/list.vue +1 -1
- package/src/views/user/form/vform/render.vue +17 -2
- package/src/views/user/form/view/list.vue +11 -10
- 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
|
|
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
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
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
|
-
|
|
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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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
|
-
|
|
224
|
-
|
|
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) => {
|