cloud-web-corejs 1.0.54-dev.785 → 1.0.54-dev.787
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 +2 -1
- package/src/components/VabUpload/index.vue +1 -1
- package/src/components/excelImport/index.js +69 -7
- package/src/components/excelImport/mixins.js +841 -9
- package/src/components/fileLibrary/fileHistoryDialog.vue +1 -1
- package/src/components/fileLibrary/fileObjAuthEdit.vue +1 -1
- package/src/components/fileLibrary/filterDialog.vue +1 -1
- package/src/components/formDialog/README.md +324 -241
- package/src/components/formDialog/actionButtons.js +90 -0
- package/src/components/formDialog/index.js +48 -35
- package/src/components/formDialog/index.vue +802 -724
- package/src/components/formDrawer/drawer.vue +719 -0
- package/src/components/formDrawer/index.js +50 -0
- package/src/components/onlineTalk/talkUserDialog.vue +1 -1
- package/src/components/tempStorage/tempStorageDialog.vue +1 -1
- package/src/components/wf/addTaskUserdialog.vue +1 -1
- package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +115 -4
- package/src/components/xform/form-designer/form-widget/dialog/formDrawer.vue +102 -5
- package/src/components/xform/form-designer/form-widget/dialog/formFieldDialog.vue +1 -1
- package/src/components/xform/form-designer/form-widget/dialog/vabSearchDialog.vue +1 -1
- package/src/components/xform/form-designer/setting-panel/action-button-config-dialog.vue +241 -0
- package/src/components/xform/form-designer/setting-panel/form-setting.vue +116 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-editor.vue +6 -0
- package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +1 -0
- package/src/components/xform/form-render/container-item/data-table-mixin.js +1460 -1460
- package/src/components/xform/form-render/container-item/detail-item.vue +11 -2
- package/src/components/xform/form-render/indexMixin.js +389 -379
- package/src/components/xform/mixins/defaultHandle.js +5 -8
- package/src/index.js +506 -472
- package/src/utils/lazyPlugin.js +66 -0
- package/src/views/bd/setting/bd_attach_setting/dialog.vue +1 -1
- package/src/views/bd/setting/bd_attach_setting/list.vue +1 -1
- package/src/views/bd/setting/bd_company_env/dialog.vue +1 -1
- package/src/views/bd/setting/bd_company_env/list.vue +1 -1
- package/src/views/bd/setting/formVersion/ftHistoryDialog.vue +1 -1
- package/src/views/bd/setting/form_import_log/list.vue +1 -1
- package/src/views/bd/setting/form_script/dialog.vue +1 -1
- package/src/views/bd/setting/form_script/form_list.vue +1 -1
- package/src/views/bd/setting/form_script/list.vue +1 -1
- package/src/views/bd/setting/form_script/list1.vue +1 -1
- package/src/views/bd/setting/form_template/dialog.vue +1 -1
- package/src/views/bd/setting/form_template/ftHistoryDialog.vue +1 -1
- package/src/views/bd/setting/form_template/itemList.vue +1 -1
- package/src/views/bd/setting/form_template/list.vue +1 -1
- package/src/views/bd/setting/form_template/wf_list.vue +1 -1
- package/src/views/bd/setting/logic_param/list.vue +1 -1
- package/src/views/bd/setting/menu_kind/dialog.vue +1 -1
- package/src/views/bd/setting/menu_kind/list.vue +1 -1
- package/src/views/bd/setting/push_data/list.vue +1 -1
- package/src/views/bd/setting/push_data_h/list.vue +1 -1
- package/src/views/bd/setting/request_async_setting/list.vue +1 -1
- package/src/views/bd/setting/request_setting/list.vue +1 -1
- package/src/views/bd/setting/table_model/dialog.vue +1 -1
- package/src/views/bd/setting/table_model/list.vue +1 -1
- package/src/views/bd/setting/table_model/zdDialog.vue +1 -1
- package/src/views/support/export_template/list.vue +1 -1
- package/src/views/user/access_log/list.vue +1 -1
- package/src/views/user/access_log/list2.vue +1 -1
- package/src/views/user/api_request/list.vue +1 -1
- package/src/views/user/area/dialog.vue +1 -1
- package/src/views/user/area/list.vue +1 -1
- package/src/views/user/bill_setting/list.vue +1 -1
- package/src/views/user/bill_setting/userDialog.vue +1 -1
- package/src/views/user/code_rules/list.vue +1 -1
- package/src/views/user/common_attribute/list.vue +1 -1
- package/src/views/user/common_script/list.vue +1 -1
- package/src/views/user/company_info/dialog.vue +1 -1
- package/src/views/user/country/dialog.vue +1 -1
- package/src/views/user/country/list.vue +1 -1
- package/src/views/user/data_type_setting/dialog.vue +1 -1
- package/src/views/user/extend_datasource/dialog.vue +1 -1
- package/src/views/user/extend_datasource/list.vue +1 -1
- package/src/views/user/fieldTranslation/list.vue +1 -1
- package/src/views/user/field_values_invisible/list.vue +1 -1
- package/src/views/user/file_type/list.vue +1 -1
- package/src/views/user/file_view_area/list.vue +1 -1
- package/src/views/user/form/form_template/dialog.vue +1 -1
- package/src/views/user/form/form_template/itemList.vue +1 -1
- package/src/views/user/form/form_template/list.vue +1 -1
- package/src/views/user/form/form_template_field/dialog.vue +1 -1
- package/src/views/user/form/form_type/dialog.vue +1 -1
- package/src/views/user/form/form_type/list.vue +1 -1
- package/src/views/user/form/report_requestaccess/dialog.vue +1 -1
- package/src/views/user/form/report_requestaccess/list.vue +1 -1
- package/src/views/user/groups/dialog.vue +1 -1
- package/src/views/user/groups/list.vue +1 -1
- package/src/views/user/lang_tag/dialog.vue +1 -1
- package/src/views/user/lang_tag/list.vue +1 -1
- package/src/views/user/language_setting/list.vue +1 -1
- package/src/views/user/menu/list.vue +1 -1
- package/src/views/user/mobile_menu/list.vue +1 -1
- package/src/views/user/notify_message/list.vue +1 -1
- package/src/views/user/notify_template/list.vue +1 -1
- package/src/views/user/notify_template/list2.vue +1 -1
- package/src/views/user/oplog/list.vue +1 -1
- package/src/views/user/position/dialog.vue +1 -1
- package/src/views/user/position/list.vue +1 -1
- package/src/views/user/project_tag/dialog.vue +1 -1
- package/src/views/user/project_tag/list.vue +1 -1
- package/src/views/user/push_setting/list.vue +1 -1
- package/src/views/user/request_setting/list.vue +1 -1
- package/src/views/user/role/dialog.vue +1 -1
- package/src/views/user/role/list.vue +1 -1
- package/src/views/user/sale_org/dialog.vue +1 -1
- package/src/views/user/sale_org/list.vue +1 -1
- package/src/views/user/system_notice/list.vue +1 -1
- package/src/views/user/system_parameter/list.vue +1 -1
- package/src/views/user/user/dialog.vue +1 -1
- package/src/views/user/user/form_dialog.vue +1 -1
- package/src/views/user/user/form_list.vue +1 -1
- package/src/views/user/user/list.vue +2 -2
- package/src/views/user/user_log_classify/list.vue +1 -1
- package/src/views/user/wf/wfReport/index.vue +2 -2
- package/src/views/user/wf/wf_auto_submit_data/list.vue +2 -2
- package/src/views/user/wf/wf_manage/list.vue +2 -2
- package/src/views/user/wf/wf_manage/list2.vue +2 -2
- package/src/views/user/wf/wf_obj_config/dialog.vue +1 -1
- package/src/views/user/wf/wf_obj_config/list.vue +1 -1
- package/src/views/user/wf/wf_obj_config/list_form.vue +1 -1
- package/src/views/user/wf/wf_transfer_setting/list.vue +1 -1
- package/src/views/user/workbench_menu/list.vue +1 -1
|
@@ -52,19 +52,19 @@ import formulaDialog from "@base/components/xform/form-designer/form-widget/dial
|
|
|
52
52
|
import baseFormulaDialog from "@base/components/xform/form-designer/form-widget/dialog/baseFormulaDialog.vue";
|
|
53
53
|
import QRCode from "qrcode";
|
|
54
54
|
import { openLuckysheetDialog } from "@base/components/luckysheet";
|
|
55
|
-
import {
|
|
56
|
-
openComponentDialog as mountComponentDialog,
|
|
57
|
-
} from "@base/utils/componentDialog";
|
|
58
|
-
import {
|
|
59
|
-
buildTreeSubmitData,
|
|
60
|
-
copyTreeData,
|
|
61
|
-
getTreeLoadState,
|
|
62
|
-
isTemporaryTreeKey,
|
|
63
|
-
resolveTreeCopyConfig,
|
|
64
|
-
resolveTreeFields,
|
|
65
|
-
resolveTreeIdentityConfig,
|
|
66
|
-
resolveTreeSubmitConfig,
|
|
67
|
-
} from "../utils/treeTableUtil";
|
|
55
|
+
import {
|
|
56
|
+
openComponentDialog as mountComponentDialog,
|
|
57
|
+
} from "@base/utils/componentDialog";
|
|
58
|
+
import {
|
|
59
|
+
buildTreeSubmitData,
|
|
60
|
+
copyTreeData,
|
|
61
|
+
getTreeLoadState,
|
|
62
|
+
isTemporaryTreeKey,
|
|
63
|
+
resolveTreeCopyConfig,
|
|
64
|
+
resolveTreeFields,
|
|
65
|
+
resolveTreeIdentityConfig,
|
|
66
|
+
resolveTreeSubmitConfig,
|
|
67
|
+
} from "../utils/treeTableUtil";
|
|
68
68
|
|
|
69
69
|
let modules = {};
|
|
70
70
|
const baseRefUtil = {
|
|
@@ -153,6 +153,11 @@ modules = {
|
|
|
153
153
|
type: Object,
|
|
154
154
|
default: null,
|
|
155
155
|
},
|
|
156
|
+
plainDetailMode: {
|
|
157
|
+
// 素身详情模式(formDrawer 等宿主用):detail 容器不渲染标题栏、隐藏模块导航
|
|
158
|
+
type: Boolean,
|
|
159
|
+
default: false,
|
|
160
|
+
},
|
|
156
161
|
},
|
|
157
162
|
provide() {
|
|
158
163
|
let e = this;
|
|
@@ -1293,12 +1298,12 @@ modules = {
|
|
|
1293
1298
|
|
|
1294
1299
|
return hasModifyItem;
|
|
1295
1300
|
},
|
|
1296
|
-
loadFormData(options = {}) {
|
|
1297
|
-
let config = options.config || {};
|
|
1301
|
+
loadFormData(options = {}) {
|
|
1302
|
+
let config = options.config || {};
|
|
1298
1303
|
let that = this;
|
|
1299
1304
|
let formConfig = this.formConfig;
|
|
1300
1305
|
let entity = formConfig.entity;
|
|
1301
|
-
let dataId = options.dataId ?? this.dataId;
|
|
1306
|
+
let dataId = options.dataId ?? this.dataId;
|
|
1302
1307
|
let reportTemplate = this.reportTemplate;
|
|
1303
1308
|
let scriptCode = formConfig.formScriptCode || "getOne";
|
|
1304
1309
|
|
|
@@ -1327,13 +1332,13 @@ modules = {
|
|
|
1327
1332
|
...formScriptParam,
|
|
1328
1333
|
},
|
|
1329
1334
|
},
|
|
1330
|
-
...defaultOption,
|
|
1331
|
-
success: (res) => {
|
|
1332
|
-
formData = res.objx || {};
|
|
1333
|
-
this.setFormData(formData, {
|
|
1334
|
-
replace: options.replace === true,
|
|
1335
|
-
});
|
|
1336
|
-
options.callback && options.callback(formData);
|
|
1335
|
+
...defaultOption,
|
|
1336
|
+
success: (res) => {
|
|
1337
|
+
formData = res.objx || {};
|
|
1338
|
+
this.setFormData(formData, {
|
|
1339
|
+
replace: options.replace === true,
|
|
1340
|
+
});
|
|
1341
|
+
options.callback && options.callback(formData);
|
|
1337
1342
|
},
|
|
1338
1343
|
...config,
|
|
1339
1344
|
});
|
|
@@ -1434,6 +1439,9 @@ modules = {
|
|
|
1434
1439
|
config: {
|
|
1435
1440
|
successMsg: false,
|
|
1436
1441
|
isConfirm: false,
|
|
1442
|
+
// 这次保存是「启动流程」的一环,保存完就要接着提交,不能让宿主重挂载
|
|
1443
|
+
// 把当前表单销毁;刷新交给 onWfStartSuccess / onWfStartAbort。
|
|
1444
|
+
skipHostReloadAfterSave: true,
|
|
1437
1445
|
success: (res) => {
|
|
1438
1446
|
done();
|
|
1439
1447
|
},
|
|
@@ -1462,6 +1470,8 @@ modules = {
|
|
|
1462
1470
|
config: {
|
|
1463
1471
|
successMsg: false,
|
|
1464
1472
|
isConfirm: false,
|
|
1473
|
+
// 同上:流程通过前的自动保存,后续由流程侧刷新,此处不重挂载。
|
|
1474
|
+
skipHostReloadAfterSave: true,
|
|
1465
1475
|
success: (res) => {
|
|
1466
1476
|
done();
|
|
1467
1477
|
},
|
|
@@ -2001,22 +2011,22 @@ modules = {
|
|
|
2001
2011
|
n
|
|
2002
2012
|
);
|
|
2003
2013
|
},
|
|
2004
|
-
setFormData: function (e, options = {}) {
|
|
2005
|
-
let t = this;
|
|
2014
|
+
setFormData: function (e, options = {}) {
|
|
2015
|
+
let t = this;
|
|
2006
2016
|
/*Object.keys(this.formDataModel).forEach(function (i) {
|
|
2007
2017
|
e && e.hasOwnProperty(i) && (t.formDataModel[i] = baseRefUtil.deepClone(e[i]));
|
|
2008
2018
|
});*/
|
|
2009
|
-
let nextFormData = baseRefUtil.deepClone(e || {});
|
|
2010
|
-
if (options.replace === true) {
|
|
2011
|
-
Object.keys(t.formDataModel).forEach((key) => {
|
|
2012
|
-
t.$delete(t.formDataModel, key);
|
|
2013
|
-
});
|
|
2014
|
-
Object.keys(nextFormData).forEach((key) => {
|
|
2015
|
-
t.$set(t.formDataModel, key, nextFormData[key]);
|
|
2016
|
-
});
|
|
2017
|
-
} else {
|
|
2018
|
-
Object.assign(t.formDataModel, nextFormData);
|
|
2019
|
-
}
|
|
2019
|
+
let nextFormData = baseRefUtil.deepClone(e || {});
|
|
2020
|
+
if (options.replace === true) {
|
|
2021
|
+
Object.keys(t.formDataModel).forEach((key) => {
|
|
2022
|
+
t.$delete(t.formDataModel, key);
|
|
2023
|
+
});
|
|
2024
|
+
Object.keys(nextFormData).forEach((key) => {
|
|
2025
|
+
t.$set(t.formDataModel, key, nextFormData[key]);
|
|
2026
|
+
});
|
|
2027
|
+
} else {
|
|
2028
|
+
Object.assign(t.formDataModel, nextFormData);
|
|
2029
|
+
}
|
|
2020
2030
|
this.currentFormData = e || {};
|
|
2021
2031
|
this.broadcast("ContainerItem", "setFormData", this.formDataModel),
|
|
2022
2032
|
this.broadcast("FieldWidget", "setFormData", this.formDataModel);
|
|
@@ -3993,206 +4003,206 @@ modules = {
|
|
|
3993
4003
|
reject(msg);
|
|
3994
4004
|
});
|
|
3995
4005
|
});
|
|
3996
|
-
},
|
|
3997
|
-
getTreeTableUtilContext(tableTarget, $grid, source) {
|
|
3998
|
-
let treeConfig = $grid?.treeConfig || {};
|
|
3999
|
-
let originOption
|
|
4000
|
-
= $grid?.params?.originOption || $grid?.originOption || {};
|
|
4001
|
-
let fields = resolveTreeFields(treeConfig, {
|
|
4002
|
-
strict: true,
|
|
4003
|
-
});
|
|
4004
|
-
let identityConfig = resolveTreeIdentityConfig(
|
|
4005
|
-
treeConfig,
|
|
4006
|
-
originOption.treeIdentityConfig || {}
|
|
4007
|
-
);
|
|
4008
|
-
let copyConfig = resolveTreeCopyConfig(
|
|
4009
|
-
fields,
|
|
4010
|
-
identityConfig,
|
|
4011
|
-
originOption.treeCopyConfig || {}
|
|
4012
|
-
);
|
|
4013
|
-
let submitConfig = resolveTreeSubmitConfig(
|
|
4014
|
-
originOption.treeSubmitConfig || {}
|
|
4015
|
-
);
|
|
4016
|
-
let temporaryKeyRegistry
|
|
4017
|
-
= tableTarget?.treeTemporaryKeyRegistry || new Set();
|
|
4018
|
-
let knownFormalKeyRegistry
|
|
4019
|
-
= tableTarget?.treeKnownFormalKeyRegistry || new Set();
|
|
4020
|
-
|
|
4021
|
-
this.collectTreeRuntimeRows(source || [], treeConfig).forEach((row) => {
|
|
4022
|
-
let rowValue = row[fields.rowField];
|
|
4023
|
-
let marker = row._X_TREE_TEMP_KEY;
|
|
4024
|
-
if (marker !== undefined && marker !== null) {
|
|
4025
|
-
temporaryKeyRegistry.add(marker);
|
|
4026
|
-
}
|
|
4027
|
-
if (
|
|
4028
|
-
rowValue !== undefined
|
|
4029
|
-
&& rowValue !== null
|
|
4030
|
-
&& rowValue !== ""
|
|
4031
|
-
&& !isTemporaryTreeKey(row, fields.rowField, identityConfig)
|
|
4032
|
-
) {
|
|
4033
|
-
knownFormalKeyRegistry.add(rowValue);
|
|
4034
|
-
}
|
|
4035
|
-
});
|
|
4036
|
-
|
|
4037
|
-
return {
|
|
4038
|
-
fields,
|
|
4039
|
-
identityConfig,
|
|
4040
|
-
copyConfig,
|
|
4041
|
-
submitConfig,
|
|
4042
|
-
temporaryKeyRegistry,
|
|
4043
|
-
knownFormalKeyRegistry,
|
|
4044
|
-
};
|
|
4045
|
-
},
|
|
4046
|
-
collectTreeRuntimeRows(rows, treeConfig) {
|
|
4047
|
-
let result = [];
|
|
4048
|
-
let visited = new WeakSet();
|
|
4049
|
-
let childrenFields = [
|
|
4050
|
-
treeConfig?.children,
|
|
4051
|
-
treeConfig?.mapChildren || "_X_ROW_CHILD",
|
|
4052
|
-
].filter(Boolean);
|
|
4053
|
-
let visit = (items) => {
|
|
4054
|
-
if (!Array.isArray(items)) return;
|
|
4055
|
-
items.forEach((item) => {
|
|
4056
|
-
if (!item || typeof item !== "object" || visited.has(item)) return;
|
|
4057
|
-
visited.add(item);
|
|
4058
|
-
result.push(item);
|
|
4059
|
-
childrenFields.forEach((field) => {
|
|
4060
|
-
visit(item[field]);
|
|
4061
|
-
});
|
|
4062
|
-
});
|
|
4063
|
-
};
|
|
4064
|
-
visit(rows);
|
|
4065
|
-
return result;
|
|
4066
|
-
},
|
|
4067
|
-
getTreeRuntimeSource($grid, source) {
|
|
4068
|
-
let result = Array.isArray(source) ? source.slice() : [];
|
|
4069
|
-
let runtimeSources = [
|
|
4070
|
-
$grid?.getTableData?.()?.fullData,
|
|
4071
|
-
$grid?.$refs?.xTable?.tableFullTreeData,
|
|
4072
|
-
];
|
|
4073
|
-
runtimeSources.forEach((rows) => {
|
|
4074
|
-
if (!Array.isArray(rows)) return;
|
|
4075
|
-
rows.forEach((row) => {
|
|
4076
|
-
if (!result.includes(row)) result.push(row);
|
|
4077
|
-
});
|
|
4078
|
-
});
|
|
4079
|
-
return result;
|
|
4080
|
-
},
|
|
4081
|
-
getTreeUnloadedRows($grid, treeConfig) {
|
|
4082
|
-
let xTable = $grid?.$refs?.xTable;
|
|
4083
|
-
let fullData = this.getTreeRuntimeSource($grid, []);
|
|
4084
|
-
return this.collectTreeRuntimeRows(fullData, treeConfig).filter(
|
|
4085
|
-
(row) =>
|
|
4086
|
-
getTreeLoadState(row, {
|
|
4087
|
-
fields: resolveTreeFields(treeConfig),
|
|
4088
|
-
isTreeNodeLoaded:
|
|
4089
|
-
typeof xTable?.isTreeExpandLoaded === "function"
|
|
4090
|
-
? (targetRow) => xTable.isTreeExpandLoaded(targetRow)
|
|
4091
|
-
: null,
|
|
4092
|
-
}).requiresLoad
|
|
4093
|
-
);
|
|
4094
|
-
},
|
|
4095
|
-
async ensureTreeTableLoadState(formTemplateTableDTO, operation) {
|
|
4096
|
-
let tableTarget = this.getWidgetRef(formTemplateTableDTO.uniqueName);
|
|
4097
|
-
let $grid = tableTarget?.getGridTable?.();
|
|
4098
|
-
let treeConfig = $grid?.treeConfig;
|
|
4099
|
-
if (!$grid || !treeConfig?.lazy) return;
|
|
4100
|
-
|
|
4101
|
-
let treeContext = this.getTreeTableUtilContext(
|
|
4102
|
-
tableTarget,
|
|
4103
|
-
$grid,
|
|
4104
|
-
this.formDataModel[formTemplateTableDTO.name] || []
|
|
4105
|
-
);
|
|
4106
|
-
let strategy = operation === "copy"
|
|
4107
|
-
? treeContext.copyConfig.lazyStrategy
|
|
4108
|
-
: treeContext.submitConfig.unloadedChildrenStrategy;
|
|
4109
|
-
if (operation === "submit" && strategy === "omit") return;
|
|
4110
|
-
|
|
4111
|
-
let xTable = $grid.$refs?.xTable;
|
|
4112
|
-
if (
|
|
4113
|
-
!xTable
|
|
4114
|
-
|| typeof xTable.isTreeExpandLoaded !== "function"
|
|
4115
|
-
|| typeof $grid.setTreeExpand !== "function"
|
|
4116
|
-
) {
|
|
4117
|
-
throw new Error(
|
|
4118
|
-
`[${formTemplateTableDTO.tableAlias}]无法读取树节点加载状态`
|
|
4119
|
-
);
|
|
4120
|
-
}
|
|
4121
|
-
|
|
4122
|
-
let unloadedRows = this.getTreeUnloadedRows($grid, treeConfig);
|
|
4123
|
-
if (!unloadedRows.length) return;
|
|
4124
|
-
if (strategy !== "loadAll") {
|
|
4125
|
-
let action = operation === "copy" ? "复制" : "保存";
|
|
4126
|
-
throw new Error(
|
|
4127
|
-
`[${formTemplateTableDTO.tableAlias}]存在尚未加载的树节点,请先展开后再${action}`
|
|
4128
|
-
);
|
|
4129
|
-
}
|
|
4130
|
-
|
|
4131
|
-
let loopCount = 0;
|
|
4132
|
-
while (unloadedRows.length) {
|
|
4133
|
-
if (loopCount++ > 100) {
|
|
4134
|
-
throw new Error(
|
|
4135
|
-
`[${formTemplateTableDTO.tableAlias}]树节点层级过深,无法完成加载`
|
|
4136
|
-
);
|
|
4137
|
-
}
|
|
4138
|
-
let currentRows = unloadedRows;
|
|
4139
|
-
await Promise.all(
|
|
4140
|
-
currentRows.map((row) => $grid.setTreeExpand(row, true))
|
|
4141
|
-
);
|
|
4142
|
-
unloadedRows = this.getTreeUnloadedRows($grid, treeConfig);
|
|
4143
|
-
if (
|
|
4144
|
-
unloadedRows.length === currentRows.length
|
|
4145
|
-
&& unloadedRows.every((row) => currentRows.includes(row))
|
|
4146
|
-
) {
|
|
4147
|
-
throw new Error(
|
|
4148
|
-
`[${formTemplateTableDTO.tableAlias}]树节点加载未完成,已停止保存`
|
|
4149
|
-
);
|
|
4150
|
-
}
|
|
4151
|
-
}
|
|
4152
|
-
},
|
|
4153
|
-
async ensureTreeTableReadyForSubmit(formTemplateTableDTO) {
|
|
4154
|
-
return this.ensureTreeTableLoadState(
|
|
4155
|
-
formTemplateTableDTO,
|
|
4156
|
-
"submit"
|
|
4157
|
-
);
|
|
4158
|
-
},
|
|
4159
|
-
async prepareTreeTablesForCopy() {
|
|
4160
|
-
let treeTables = this.getFormTemplateTableDTOs().filter(
|
|
4161
|
-
(item) => item.isTreeTable
|
|
4162
|
-
);
|
|
4163
|
-
for (let index = 0; index < treeTables.length; index++) {
|
|
4164
|
-
await this.ensureTreeTableLoadState(treeTables[index], "copy");
|
|
4165
|
-
}
|
|
4166
|
-
},
|
|
4167
|
-
async buildSubmitPayload(option) {
|
|
4168
|
-
let treeTables = this.getFormTemplateTableDTOs().filter(
|
|
4169
|
-
(item) => item.isTreeTable
|
|
4170
|
-
);
|
|
4171
|
-
for (let index = 0; index < treeTables.length; index++) {
|
|
4172
|
-
await this.ensureTreeTableReadyForSubmit(treeTables[index]);
|
|
4173
|
-
}
|
|
4174
|
-
let formDataSnapshot = this.$baseLodash.cloneDeep(this.formDataModel);
|
|
4175
|
-
let subData = this.getSubData2(false, {
|
|
4176
|
-
mode: "submit",
|
|
4177
|
-
formDataModel: formDataSnapshot,
|
|
4178
|
-
});
|
|
4179
|
-
if (option) {
|
|
4180
|
-
let realFormData = {};
|
|
4181
|
-
Object.keys(option).forEach((key) => {
|
|
4182
|
-
realFormData[option[key]] = subData[key];
|
|
4183
|
-
});
|
|
4184
|
-
return realFormData;
|
|
4185
|
-
}
|
|
4186
|
-
return subData;
|
|
4187
|
-
},
|
|
4188
|
-
getSubData2(flag, context = {}) {
|
|
4006
|
+
},
|
|
4007
|
+
getTreeTableUtilContext(tableTarget, $grid, source) {
|
|
4008
|
+
let treeConfig = $grid?.treeConfig || {};
|
|
4009
|
+
let originOption
|
|
4010
|
+
= $grid?.params?.originOption || $grid?.originOption || {};
|
|
4011
|
+
let fields = resolveTreeFields(treeConfig, {
|
|
4012
|
+
strict: true,
|
|
4013
|
+
});
|
|
4014
|
+
let identityConfig = resolveTreeIdentityConfig(
|
|
4015
|
+
treeConfig,
|
|
4016
|
+
originOption.treeIdentityConfig || {}
|
|
4017
|
+
);
|
|
4018
|
+
let copyConfig = resolveTreeCopyConfig(
|
|
4019
|
+
fields,
|
|
4020
|
+
identityConfig,
|
|
4021
|
+
originOption.treeCopyConfig || {}
|
|
4022
|
+
);
|
|
4023
|
+
let submitConfig = resolveTreeSubmitConfig(
|
|
4024
|
+
originOption.treeSubmitConfig || {}
|
|
4025
|
+
);
|
|
4026
|
+
let temporaryKeyRegistry
|
|
4027
|
+
= tableTarget?.treeTemporaryKeyRegistry || new Set();
|
|
4028
|
+
let knownFormalKeyRegistry
|
|
4029
|
+
= tableTarget?.treeKnownFormalKeyRegistry || new Set();
|
|
4030
|
+
|
|
4031
|
+
this.collectTreeRuntimeRows(source || [], treeConfig).forEach((row) => {
|
|
4032
|
+
let rowValue = row[fields.rowField];
|
|
4033
|
+
let marker = row._X_TREE_TEMP_KEY;
|
|
4034
|
+
if (marker !== undefined && marker !== null) {
|
|
4035
|
+
temporaryKeyRegistry.add(marker);
|
|
4036
|
+
}
|
|
4037
|
+
if (
|
|
4038
|
+
rowValue !== undefined
|
|
4039
|
+
&& rowValue !== null
|
|
4040
|
+
&& rowValue !== ""
|
|
4041
|
+
&& !isTemporaryTreeKey(row, fields.rowField, identityConfig)
|
|
4042
|
+
) {
|
|
4043
|
+
knownFormalKeyRegistry.add(rowValue);
|
|
4044
|
+
}
|
|
4045
|
+
});
|
|
4046
|
+
|
|
4047
|
+
return {
|
|
4048
|
+
fields,
|
|
4049
|
+
identityConfig,
|
|
4050
|
+
copyConfig,
|
|
4051
|
+
submitConfig,
|
|
4052
|
+
temporaryKeyRegistry,
|
|
4053
|
+
knownFormalKeyRegistry,
|
|
4054
|
+
};
|
|
4055
|
+
},
|
|
4056
|
+
collectTreeRuntimeRows(rows, treeConfig) {
|
|
4057
|
+
let result = [];
|
|
4058
|
+
let visited = new WeakSet();
|
|
4059
|
+
let childrenFields = [
|
|
4060
|
+
treeConfig?.children,
|
|
4061
|
+
treeConfig?.mapChildren || "_X_ROW_CHILD",
|
|
4062
|
+
].filter(Boolean);
|
|
4063
|
+
let visit = (items) => {
|
|
4064
|
+
if (!Array.isArray(items)) return;
|
|
4065
|
+
items.forEach((item) => {
|
|
4066
|
+
if (!item || typeof item !== "object" || visited.has(item)) return;
|
|
4067
|
+
visited.add(item);
|
|
4068
|
+
result.push(item);
|
|
4069
|
+
childrenFields.forEach((field) => {
|
|
4070
|
+
visit(item[field]);
|
|
4071
|
+
});
|
|
4072
|
+
});
|
|
4073
|
+
};
|
|
4074
|
+
visit(rows);
|
|
4075
|
+
return result;
|
|
4076
|
+
},
|
|
4077
|
+
getTreeRuntimeSource($grid, source) {
|
|
4078
|
+
let result = Array.isArray(source) ? source.slice() : [];
|
|
4079
|
+
let runtimeSources = [
|
|
4080
|
+
$grid?.getTableData?.()?.fullData,
|
|
4081
|
+
$grid?.$refs?.xTable?.tableFullTreeData,
|
|
4082
|
+
];
|
|
4083
|
+
runtimeSources.forEach((rows) => {
|
|
4084
|
+
if (!Array.isArray(rows)) return;
|
|
4085
|
+
rows.forEach((row) => {
|
|
4086
|
+
if (!result.includes(row)) result.push(row);
|
|
4087
|
+
});
|
|
4088
|
+
});
|
|
4089
|
+
return result;
|
|
4090
|
+
},
|
|
4091
|
+
getTreeUnloadedRows($grid, treeConfig) {
|
|
4092
|
+
let xTable = $grid?.$refs?.xTable;
|
|
4093
|
+
let fullData = this.getTreeRuntimeSource($grid, []);
|
|
4094
|
+
return this.collectTreeRuntimeRows(fullData, treeConfig).filter(
|
|
4095
|
+
(row) =>
|
|
4096
|
+
getTreeLoadState(row, {
|
|
4097
|
+
fields: resolveTreeFields(treeConfig),
|
|
4098
|
+
isTreeNodeLoaded:
|
|
4099
|
+
typeof xTable?.isTreeExpandLoaded === "function"
|
|
4100
|
+
? (targetRow) => xTable.isTreeExpandLoaded(targetRow)
|
|
4101
|
+
: null,
|
|
4102
|
+
}).requiresLoad
|
|
4103
|
+
);
|
|
4104
|
+
},
|
|
4105
|
+
async ensureTreeTableLoadState(formTemplateTableDTO, operation) {
|
|
4106
|
+
let tableTarget = this.getWidgetRef(formTemplateTableDTO.uniqueName);
|
|
4107
|
+
let $grid = tableTarget?.getGridTable?.();
|
|
4108
|
+
let treeConfig = $grid?.treeConfig;
|
|
4109
|
+
if (!$grid || !treeConfig?.lazy) return;
|
|
4110
|
+
|
|
4111
|
+
let treeContext = this.getTreeTableUtilContext(
|
|
4112
|
+
tableTarget,
|
|
4113
|
+
$grid,
|
|
4114
|
+
this.formDataModel[formTemplateTableDTO.name] || []
|
|
4115
|
+
);
|
|
4116
|
+
let strategy = operation === "copy"
|
|
4117
|
+
? treeContext.copyConfig.lazyStrategy
|
|
4118
|
+
: treeContext.submitConfig.unloadedChildrenStrategy;
|
|
4119
|
+
if (operation === "submit" && strategy === "omit") return;
|
|
4120
|
+
|
|
4121
|
+
let xTable = $grid.$refs?.xTable;
|
|
4122
|
+
if (
|
|
4123
|
+
!xTable
|
|
4124
|
+
|| typeof xTable.isTreeExpandLoaded !== "function"
|
|
4125
|
+
|| typeof $grid.setTreeExpand !== "function"
|
|
4126
|
+
) {
|
|
4127
|
+
throw new Error(
|
|
4128
|
+
`[${formTemplateTableDTO.tableAlias}]无法读取树节点加载状态`
|
|
4129
|
+
);
|
|
4130
|
+
}
|
|
4131
|
+
|
|
4132
|
+
let unloadedRows = this.getTreeUnloadedRows($grid, treeConfig);
|
|
4133
|
+
if (!unloadedRows.length) return;
|
|
4134
|
+
if (strategy !== "loadAll") {
|
|
4135
|
+
let action = operation === "copy" ? "复制" : "保存";
|
|
4136
|
+
throw new Error(
|
|
4137
|
+
`[${formTemplateTableDTO.tableAlias}]存在尚未加载的树节点,请先展开后再${action}`
|
|
4138
|
+
);
|
|
4139
|
+
}
|
|
4140
|
+
|
|
4141
|
+
let loopCount = 0;
|
|
4142
|
+
while (unloadedRows.length) {
|
|
4143
|
+
if (loopCount++ > 100) {
|
|
4144
|
+
throw new Error(
|
|
4145
|
+
`[${formTemplateTableDTO.tableAlias}]树节点层级过深,无法完成加载`
|
|
4146
|
+
);
|
|
4147
|
+
}
|
|
4148
|
+
let currentRows = unloadedRows;
|
|
4149
|
+
await Promise.all(
|
|
4150
|
+
currentRows.map((row) => $grid.setTreeExpand(row, true))
|
|
4151
|
+
);
|
|
4152
|
+
unloadedRows = this.getTreeUnloadedRows($grid, treeConfig);
|
|
4153
|
+
if (
|
|
4154
|
+
unloadedRows.length === currentRows.length
|
|
4155
|
+
&& unloadedRows.every((row) => currentRows.includes(row))
|
|
4156
|
+
) {
|
|
4157
|
+
throw new Error(
|
|
4158
|
+
`[${formTemplateTableDTO.tableAlias}]树节点加载未完成,已停止保存`
|
|
4159
|
+
);
|
|
4160
|
+
}
|
|
4161
|
+
}
|
|
4162
|
+
},
|
|
4163
|
+
async ensureTreeTableReadyForSubmit(formTemplateTableDTO) {
|
|
4164
|
+
return this.ensureTreeTableLoadState(
|
|
4165
|
+
formTemplateTableDTO,
|
|
4166
|
+
"submit"
|
|
4167
|
+
);
|
|
4168
|
+
},
|
|
4169
|
+
async prepareTreeTablesForCopy() {
|
|
4170
|
+
let treeTables = this.getFormTemplateTableDTOs().filter(
|
|
4171
|
+
(item) => item.isTreeTable
|
|
4172
|
+
);
|
|
4173
|
+
for (let index = 0; index < treeTables.length; index++) {
|
|
4174
|
+
await this.ensureTreeTableLoadState(treeTables[index], "copy");
|
|
4175
|
+
}
|
|
4176
|
+
},
|
|
4177
|
+
async buildSubmitPayload(option) {
|
|
4178
|
+
let treeTables = this.getFormTemplateTableDTOs().filter(
|
|
4179
|
+
(item) => item.isTreeTable
|
|
4180
|
+
);
|
|
4181
|
+
for (let index = 0; index < treeTables.length; index++) {
|
|
4182
|
+
await this.ensureTreeTableReadyForSubmit(treeTables[index]);
|
|
4183
|
+
}
|
|
4184
|
+
let formDataSnapshot = this.$baseLodash.cloneDeep(this.formDataModel);
|
|
4185
|
+
let subData = this.getSubData2(false, {
|
|
4186
|
+
mode: "submit",
|
|
4187
|
+
formDataModel: formDataSnapshot,
|
|
4188
|
+
});
|
|
4189
|
+
if (option) {
|
|
4190
|
+
let realFormData = {};
|
|
4191
|
+
Object.keys(option).forEach((key) => {
|
|
4192
|
+
realFormData[option[key]] = subData[key];
|
|
4193
|
+
});
|
|
4194
|
+
return realFormData;
|
|
4195
|
+
}
|
|
4196
|
+
return subData;
|
|
4197
|
+
},
|
|
4198
|
+
getSubData2(flag, context = {}) {
|
|
4189
4199
|
let that = this;
|
|
4190
4200
|
let formCode = this.reportTemplate.formCode;
|
|
4191
4201
|
let tableFiledMap = this.getTableFiledMap();
|
|
4192
4202
|
let formTemplateTableDTOs = this.getFormTemplateTableDTOs();
|
|
4193
|
-
let formDataModel
|
|
4194
|
-
= context.formDataModel
|
|
4195
|
-
|| this.$baseLodash.cloneDeep(this.formDataModel);
|
|
4203
|
+
let formDataModel
|
|
4204
|
+
= context.formDataModel
|
|
4205
|
+
|| this.$baseLodash.cloneDeep(this.formDataModel);
|
|
4196
4206
|
let formConfig = this.formConfig;
|
|
4197
4207
|
|
|
4198
4208
|
let res = {};
|
|
@@ -4227,32 +4237,32 @@ modules = {
|
|
|
4227
4237
|
newFormData[tableAlias] = item ?? null;
|
|
4228
4238
|
} else {
|
|
4229
4239
|
if (formTemplateTableDTO.isTreeTable) {
|
|
4230
|
-
let tableTarget = this.getWidgetRef(
|
|
4231
|
-
formTemplateTableDTO.uniqueName
|
|
4232
|
-
);
|
|
4233
|
-
let $grid = tableTarget.getGridTable();
|
|
4234
|
-
let treeTaBm = newFormData.treeTaBm || [];
|
|
4235
|
-
treeTaBm.push(formTemplateTableDTO.tableAlias);
|
|
4236
|
-
newFormData.treeTaBm = treeTaBm;
|
|
4237
|
-
let modelRows = formDataModel[formTemplateTableDTO.name];
|
|
4238
|
-
let sourceRows = Array.isArray(modelRows) ? modelRows : [];
|
|
4239
|
-
let treeContext = this.getTreeTableUtilContext(
|
|
4240
|
-
tableTarget,
|
|
4241
|
-
$grid,
|
|
4242
|
-
sourceRows
|
|
4243
|
-
);
|
|
4244
|
-
newFormData[tableAlias] = buildTreeSubmitData(sourceRows, {
|
|
4245
|
-
...treeContext,
|
|
4246
|
-
submitConfig:
|
|
4247
|
-
context.mode === "submit"
|
|
4248
|
-
? treeContext.submitConfig
|
|
4249
|
-
: {
|
|
4250
|
-
...treeContext.submitConfig,
|
|
4251
|
-
orphanParentStrategy: "preserve",
|
|
4252
|
-
},
|
|
4253
|
-
strict: context.mode === "submit",
|
|
4254
|
-
});
|
|
4255
|
-
} else {
|
|
4240
|
+
let tableTarget = this.getWidgetRef(
|
|
4241
|
+
formTemplateTableDTO.uniqueName
|
|
4242
|
+
);
|
|
4243
|
+
let $grid = tableTarget.getGridTable();
|
|
4244
|
+
let treeTaBm = newFormData.treeTaBm || [];
|
|
4245
|
+
treeTaBm.push(formTemplateTableDTO.tableAlias);
|
|
4246
|
+
newFormData.treeTaBm = treeTaBm;
|
|
4247
|
+
let modelRows = formDataModel[formTemplateTableDTO.name];
|
|
4248
|
+
let sourceRows = Array.isArray(modelRows) ? modelRows : [];
|
|
4249
|
+
let treeContext = this.getTreeTableUtilContext(
|
|
4250
|
+
tableTarget,
|
|
4251
|
+
$grid,
|
|
4252
|
+
sourceRows
|
|
4253
|
+
);
|
|
4254
|
+
newFormData[tableAlias] = buildTreeSubmitData(sourceRows, {
|
|
4255
|
+
...treeContext,
|
|
4256
|
+
submitConfig:
|
|
4257
|
+
context.mode === "submit"
|
|
4258
|
+
? treeContext.submitConfig
|
|
4259
|
+
: {
|
|
4260
|
+
...treeContext.submitConfig,
|
|
4261
|
+
orphanParentStrategy: "preserve",
|
|
4262
|
+
},
|
|
4263
|
+
strict: context.mode === "submit",
|
|
4264
|
+
});
|
|
4265
|
+
} else {
|
|
4256
4266
|
newFormData[tableAlias] =
|
|
4257
4267
|
formDataModel[formTemplateTableDTO.name] ?? null;
|
|
4258
4268
|
}
|
|
@@ -4449,10 +4459,10 @@ modules = {
|
|
|
4449
4459
|
this.$baseReload();
|
|
4450
4460
|
}
|
|
4451
4461
|
},
|
|
4452
|
-
reloadForm(option) {
|
|
4453
|
-
let target1 = this.$attrs["parent-target"];
|
|
4454
|
-
let target2 = target1?.$attrs["parent-target"];
|
|
4455
|
-
let target = !target2 ? this : target1;
|
|
4462
|
+
reloadForm(option) {
|
|
4463
|
+
let target1 = this.$attrs["parent-target"];
|
|
4464
|
+
let target2 = target1?.$attrs["parent-target"];
|
|
4465
|
+
let target = !target2 ? this : target1;
|
|
4456
4466
|
/* if (this.$attrs['reloadDialog'] !== true) {
|
|
4457
4467
|
target = this.$attrs['parent-target'];
|
|
4458
4468
|
}else{
|
|
@@ -4462,44 +4472,44 @@ modules = {
|
|
|
4462
4472
|
for (let key in updateParam) {
|
|
4463
4473
|
target.$emit("update:" + key, updateParam[key]);
|
|
4464
4474
|
}*/
|
|
4465
|
-
try {
|
|
4466
|
-
let reloadListener = target?.$listeners?.reload;
|
|
4467
|
-
if (Array.isArray(reloadListener)) {
|
|
4468
|
-
return Promise.all(
|
|
4469
|
-
reloadListener.map((listener) => listener(target, option))
|
|
4470
|
-
);
|
|
4471
|
-
}
|
|
4472
|
-
if (typeof reloadListener === "function") {
|
|
4473
|
-
return Promise.resolve(reloadListener(target, option));
|
|
4474
|
-
}
|
|
4475
|
-
return Promise.resolve(target.$baseReload(option));
|
|
4476
|
-
} catch (error) {
|
|
4477
|
-
return Promise.reject(error);
|
|
4478
|
-
}
|
|
4479
|
-
},
|
|
4480
|
-
async reloadSavedFormData(option = {}) {
|
|
4481
|
-
let updateParam = option.updateParam || {};
|
|
4482
|
-
let nextDataId = updateParam.dataId ?? this.dataId;
|
|
4483
|
-
let nextFormCode = updateParam.formCode;
|
|
4484
|
-
if (nextDataId === undefined || nextDataId === null || nextDataId === "") {
|
|
4485
|
-
throw new Error("缺少保存后的数据 ID,无法重新加载表单。");
|
|
4486
|
-
}
|
|
4487
|
-
let response = await this.loadFormData({
|
|
4488
|
-
dataId: nextDataId,
|
|
4489
|
-
replace: true,
|
|
4490
|
-
});
|
|
4491
|
-
if (!response || response.type !== "success") {
|
|
4492
|
-
throw new Error(response?.content || "保存后的表单数据重新加载失败。");
|
|
4493
|
-
}
|
|
4494
|
-
if (nextDataId !== undefined && nextDataId !== null) {
|
|
4495
|
-
this.$emit("update:dataId", nextDataId);
|
|
4496
|
-
}
|
|
4497
|
-
if (nextFormCode) {
|
|
4498
|
-
this.$emit("update:formCode", nextFormCode);
|
|
4499
|
-
}
|
|
4500
|
-
await new Promise((resolve) => this.$nextTick(resolve));
|
|
4501
|
-
return response;
|
|
4502
|
-
},
|
|
4475
|
+
try {
|
|
4476
|
+
let reloadListener = target?.$listeners?.reload;
|
|
4477
|
+
if (Array.isArray(reloadListener)) {
|
|
4478
|
+
return Promise.all(
|
|
4479
|
+
reloadListener.map((listener) => listener(target, option))
|
|
4480
|
+
);
|
|
4481
|
+
}
|
|
4482
|
+
if (typeof reloadListener === "function") {
|
|
4483
|
+
return Promise.resolve(reloadListener(target, option));
|
|
4484
|
+
}
|
|
4485
|
+
return Promise.resolve(target.$baseReload(option));
|
|
4486
|
+
} catch (error) {
|
|
4487
|
+
return Promise.reject(error);
|
|
4488
|
+
}
|
|
4489
|
+
},
|
|
4490
|
+
async reloadSavedFormData(option = {}) {
|
|
4491
|
+
let updateParam = option.updateParam || {};
|
|
4492
|
+
let nextDataId = updateParam.dataId ?? this.dataId;
|
|
4493
|
+
let nextFormCode = updateParam.formCode;
|
|
4494
|
+
if (nextDataId === undefined || nextDataId === null || nextDataId === "") {
|
|
4495
|
+
throw new Error("缺少保存后的数据 ID,无法重新加载表单。");
|
|
4496
|
+
}
|
|
4497
|
+
let response = await this.loadFormData({
|
|
4498
|
+
dataId: nextDataId,
|
|
4499
|
+
replace: true,
|
|
4500
|
+
});
|
|
4501
|
+
if (!response || response.type !== "success") {
|
|
4502
|
+
throw new Error(response?.content || "保存后的表单数据重新加载失败。");
|
|
4503
|
+
}
|
|
4504
|
+
if (nextDataId !== undefined && nextDataId !== null) {
|
|
4505
|
+
this.$emit("update:dataId", nextDataId);
|
|
4506
|
+
}
|
|
4507
|
+
if (nextFormCode) {
|
|
4508
|
+
this.$emit("update:formCode", nextFormCode);
|
|
4509
|
+
}
|
|
4510
|
+
await new Promise((resolve) => this.$nextTick(resolve));
|
|
4511
|
+
return response;
|
|
4512
|
+
},
|
|
4503
4513
|
saveForm(callback) {
|
|
4504
4514
|
this.validateForm((valid) => {
|
|
4505
4515
|
if (!valid) return;
|
|
@@ -4894,69 +4904,69 @@ modules = {
|
|
|
4894
4904
|
getFormRef() {
|
|
4895
4905
|
return this;
|
|
4896
4906
|
},
|
|
4897
|
-
isObject(value) {
|
|
4898
|
-
return Object.prototype.toString.call(value) === "[object Object]";
|
|
4899
|
-
},
|
|
4900
|
-
handleCopyTreeData(value, widget) {
|
|
4901
|
-
if (!Array.isArray(value) || !widget) return;
|
|
4902
|
-
|
|
4903
|
-
let widgetName = widget.options.name;
|
|
4904
|
-
let gridRef = this.getWidgetRef(widgetName);
|
|
4905
|
-
let $grid = gridRef?.getGridTable?.();
|
|
4906
|
-
if (!$grid) {
|
|
4907
|
-
throw new Error(`[${widgetName}]树表尚未初始化`);
|
|
4908
|
-
}
|
|
4909
|
-
if (
|
|
4910
|
-
$grid.treeConfig?.lazy
|
|
4911
|
-
&& this.getTreeUnloadedRows($grid, $grid.treeConfig).length
|
|
4912
|
-
) {
|
|
4913
|
-
throw new Error(
|
|
4914
|
-
`[${widgetName}]存在尚未加载的树节点,无法复制不完整子树`
|
|
4915
|
-
);
|
|
4916
|
-
}
|
|
4917
|
-
|
|
4918
|
-
// prepareTreeTablesForCopy 会在深拷贝及 copyDataHandle 之前完成 loadAll,
|
|
4919
|
-
// 此处只消费准备好的副本;不能再混入 VXE 活对象,否则会覆盖脚本修改并产生同键冲突。
|
|
4920
|
-
let sourceRows = value;
|
|
4921
|
-
if (!sourceRows.length) return;
|
|
4922
|
-
|
|
4923
|
-
let treeContext = this.getTreeTableUtilContext(
|
|
4924
|
-
gridRef,
|
|
4925
|
-
$grid,
|
|
4926
|
-
sourceRows
|
|
4927
|
-
);
|
|
4928
|
-
let copiedRows = copyTreeData(sourceRows, {
|
|
4929
|
-
...treeContext,
|
|
4930
|
-
temporaryKeyRegistry: new Set(
|
|
4931
|
-
treeContext.temporaryKeyRegistry
|
|
4932
|
-
),
|
|
4933
|
-
targetRows: [],
|
|
4934
|
-
});
|
|
4935
|
-
let fields = treeContext.fields;
|
|
4936
|
-
let ignoredFields = new Set([
|
|
4937
|
-
fields.rowField,
|
|
4938
|
-
fields.parentField,
|
|
4939
|
-
fields.childrenField,
|
|
4940
|
-
fields.mapChildrenField,
|
|
4941
|
-
fields.hasChildField,
|
|
4942
|
-
treeContext.identityConfig.physicalIdField,
|
|
4943
|
-
"_X_ROW_KEY",
|
|
4944
|
-
"_X_ROW_CHILD",
|
|
4945
|
-
"_X_TREE_TEMP_KEY",
|
|
4946
|
-
"f_wbs",
|
|
4947
|
-
]);
|
|
4948
|
-
|
|
4949
|
-
copiedRows.forEach((row) => {
|
|
4950
|
-
this.handleCopyDefaultData(row);
|
|
4951
|
-
Object.keys(row).forEach((key) => {
|
|
4952
|
-
if (ignoredFields.has(key) || !Array.isArray(row[key])) return;
|
|
4953
|
-
this.handleCopyData(row[key], key);
|
|
4954
|
-
});
|
|
4955
|
-
});
|
|
4956
|
-
|
|
4957
|
-
value.splice(0, value.length, ...copiedRows);
|
|
4958
|
-
},
|
|
4959
|
-
handleCopyDefaultData(data) {
|
|
4907
|
+
isObject(value) {
|
|
4908
|
+
return Object.prototype.toString.call(value) === "[object Object]";
|
|
4909
|
+
},
|
|
4910
|
+
handleCopyTreeData(value, widget) {
|
|
4911
|
+
if (!Array.isArray(value) || !widget) return;
|
|
4912
|
+
|
|
4913
|
+
let widgetName = widget.options.name;
|
|
4914
|
+
let gridRef = this.getWidgetRef(widgetName);
|
|
4915
|
+
let $grid = gridRef?.getGridTable?.();
|
|
4916
|
+
if (!$grid) {
|
|
4917
|
+
throw new Error(`[${widgetName}]树表尚未初始化`);
|
|
4918
|
+
}
|
|
4919
|
+
if (
|
|
4920
|
+
$grid.treeConfig?.lazy
|
|
4921
|
+
&& this.getTreeUnloadedRows($grid, $grid.treeConfig).length
|
|
4922
|
+
) {
|
|
4923
|
+
throw new Error(
|
|
4924
|
+
`[${widgetName}]存在尚未加载的树节点,无法复制不完整子树`
|
|
4925
|
+
);
|
|
4926
|
+
}
|
|
4927
|
+
|
|
4928
|
+
// prepareTreeTablesForCopy 会在深拷贝及 copyDataHandle 之前完成 loadAll,
|
|
4929
|
+
// 此处只消费准备好的副本;不能再混入 VXE 活对象,否则会覆盖脚本修改并产生同键冲突。
|
|
4930
|
+
let sourceRows = value;
|
|
4931
|
+
if (!sourceRows.length) return;
|
|
4932
|
+
|
|
4933
|
+
let treeContext = this.getTreeTableUtilContext(
|
|
4934
|
+
gridRef,
|
|
4935
|
+
$grid,
|
|
4936
|
+
sourceRows
|
|
4937
|
+
);
|
|
4938
|
+
let copiedRows = copyTreeData(sourceRows, {
|
|
4939
|
+
...treeContext,
|
|
4940
|
+
temporaryKeyRegistry: new Set(
|
|
4941
|
+
treeContext.temporaryKeyRegistry
|
|
4942
|
+
),
|
|
4943
|
+
targetRows: [],
|
|
4944
|
+
});
|
|
4945
|
+
let fields = treeContext.fields;
|
|
4946
|
+
let ignoredFields = new Set([
|
|
4947
|
+
fields.rowField,
|
|
4948
|
+
fields.parentField,
|
|
4949
|
+
fields.childrenField,
|
|
4950
|
+
fields.mapChildrenField,
|
|
4951
|
+
fields.hasChildField,
|
|
4952
|
+
treeContext.identityConfig.physicalIdField,
|
|
4953
|
+
"_X_ROW_KEY",
|
|
4954
|
+
"_X_ROW_CHILD",
|
|
4955
|
+
"_X_TREE_TEMP_KEY",
|
|
4956
|
+
"f_wbs",
|
|
4957
|
+
]);
|
|
4958
|
+
|
|
4959
|
+
copiedRows.forEach((row) => {
|
|
4960
|
+
this.handleCopyDefaultData(row);
|
|
4961
|
+
Object.keys(row).forEach((key) => {
|
|
4962
|
+
if (ignoredFields.has(key) || !Array.isArray(row[key])) return;
|
|
4963
|
+
this.handleCopyData(row[key], key);
|
|
4964
|
+
});
|
|
4965
|
+
});
|
|
4966
|
+
|
|
4967
|
+
value.splice(0, value.length, ...copiedRows);
|
|
4968
|
+
},
|
|
4969
|
+
handleCopyDefaultData(data) {
|
|
4960
4970
|
data.create_by = null;
|
|
4961
4971
|
data._create_by = null;
|
|
4962
4972
|
data.create_date = null;
|
|
@@ -5011,22 +5021,22 @@ modules = {
|
|
|
5011
5021
|
});
|
|
5012
5022
|
}
|
|
5013
5023
|
},
|
|
5014
|
-
async openCopyEditTab(copyData) {
|
|
5015
|
-
try {
|
|
5016
|
-
await this.prepareTreeTablesForCopy();
|
|
5017
|
-
let formData = this.$baseLodash.cloneDeep(
|
|
5018
|
-
copyData || this.formDataModel
|
|
5019
|
-
);
|
|
5020
|
-
if (formData) {
|
|
5021
|
-
this.handleCopyData(formData);
|
|
5022
|
-
}
|
|
5023
|
-
this.$emit("openCopyEditTab", formData);
|
|
5024
|
-
return true;
|
|
5025
|
-
} catch (error) {
|
|
5026
|
-
this.$message.error(error?.message || "树表数据尚未准备完成");
|
|
5027
|
-
return false;
|
|
5028
|
-
}
|
|
5029
|
-
},
|
|
5024
|
+
async openCopyEditTab(copyData) {
|
|
5025
|
+
try {
|
|
5026
|
+
await this.prepareTreeTablesForCopy();
|
|
5027
|
+
let formData = this.$baseLodash.cloneDeep(
|
|
5028
|
+
copyData || this.formDataModel
|
|
5029
|
+
);
|
|
5030
|
+
if (formData) {
|
|
5031
|
+
this.handleCopyData(formData);
|
|
5032
|
+
}
|
|
5033
|
+
this.$emit("openCopyEditTab", formData);
|
|
5034
|
+
return true;
|
|
5035
|
+
} catch (error) {
|
|
5036
|
+
this.$message.error(error?.message || "树表数据尚未准备完成");
|
|
5037
|
+
return false;
|
|
5038
|
+
}
|
|
5039
|
+
},
|
|
5030
5040
|
|
|
5031
5041
|
async exportPdf() {
|
|
5032
5042
|
// statusEl.style.display = 'block';
|