@cloudbase/weda-ui 3.4.3 → 3.4.4
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/dist/configs/components/chart/bar.json +4 -0
- package/dist/configs/components/chart/line.js +14 -10
- package/dist/configs/components/chart/pie.json +4 -0
- package/dist/configs/components/dataView.js +507 -0
- package/dist/configs/components/form/location.json +2 -1
- package/dist/configs/components/form/userTreeSelect.json +55 -0
- package/dist/configs/components/formdetail.json +12 -2
- package/dist/configs/components/grid/col.js +125 -0
- package/dist/configs/components/grid/grid.js +131 -0
- package/dist/configs/components/grid/row.js +143 -0
- package/dist/configs/components/image.js +11 -1
- package/dist/configs/components/link.js +11 -1
- package/dist/configs/components/listView.js +988 -0
- package/dist/configs/components/navigationBar.json +9 -1
- package/dist/configs/components/repeater-item.json +17 -0
- package/dist/configs/components/repeater.js +125 -0
- package/dist/configs/components/table.json +67 -24
- package/dist/configs/components/text.js +12 -1
- package/dist/configs/components/wd-bubble.js +204 -0
- package/dist/configs/components/wd-button.js +417 -0
- package/dist/configs/components/wd-divider.js +89 -0
- package/dist/configs/components/wd-icon.js +126 -0
- package/dist/configs/components/wd-image.js +164 -0
- package/dist/configs/components/wd-link.js +234 -0
- package/dist/configs/components/wd-table.js +59 -0
- package/dist/configs/components/wd-text.js +142 -0
- package/dist/configs/components/wxOpenApi/phone.js +2 -2
- package/dist/configs/components/wxOpenApi/phoneCode.js +2 -2
- package/dist/configs/index.js +34 -3
- package/dist/configs/type-utils/index.js +4 -1
- package/dist/docs/common/componentList.js +144 -0
- package/dist/docs/common/components/classes-view.js +34 -0
- package/dist/docs/common/components/event-view.js +46 -0
- package/dist/docs/common/components/json-schema-view.js +18 -0
- package/dist/docs/common/components/methods-view.js +32 -0
- package/dist/docs/common/components/properties-view.js +45 -0
- package/dist/docs/common/format.js +60 -35
- package/dist/docs/common/helper.js +1 -0
- package/dist/docs/common/tableView.js +61 -50
- package/dist/enum/index.js +521 -0
- package/dist/index.js +1 -1
- package/dist/style/index.scss +1 -0
- package/dist/web/actions/showMessage/index.css +0 -3
- package/dist/web/actions/showMessage/index.js +1 -1
- package/dist/web/actions/showModal/index.css +0 -3
- package/dist/web/components/button/index.css +2 -5
- package/dist/web/components/button/index.js +3 -3
- package/dist/web/components/calendar/index.css +29 -32
- package/dist/web/components/calendar/index.js +37 -35
- package/dist/web/components/carousel/index.css +11 -14
- package/dist/web/components/carousel/index.js +3 -1
- package/dist/web/components/chart/common/core/eChartBar.js +10 -2
- package/dist/web/components/chart/common/core/eChartLine.js +16 -8
- package/dist/web/components/chart/common/core/eChartPie.js +2 -1
- package/dist/web/components/chart/statisticsCard/index.css +12 -15
- package/dist/web/components/chart/statisticsCard/index.js +6 -1
- package/dist/web/components/dataView/index.js +3 -3
- package/dist/web/components/emptyContent/index.css +26 -0
- package/dist/web/components/emptyContent/index.js +46 -0
- package/dist/web/components/flow/components/FlowModuleText/index.css +1 -4
- package/dist/web/components/flow/components/FlowUserSelect/index.css +29 -32
- package/dist/web/components/flow/components/HighlightTextarea/index.css +5 -8
- package/dist/web/components/flow/components/UserSelectModel/UserSelect.js +5 -2
- package/dist/web/components/flow/components/UserSelectModel/UserSelectMobile.css +1 -4
- package/dist/web/components/flow/components/UserSelectModel/UserSelectMobile.js +8 -5
- package/dist/web/components/flow/components/WedaUserTransfer/index.css +0 -3
- package/dist/web/components/flow/frame/getCommonFlowData.js +3 -1
- package/dist/web/components/flow/frame/index.js +18 -1
- package/dist/web/components/flow/frame/types.js +6 -0
- package/dist/web/components/flow/frame/utils.js +20 -11
- package/dist/web/components/flow/modules/basic/Basic.css +3 -6
- package/dist/web/components/flow/modules/basic/BasicMobile.css +9 -12
- package/dist/web/components/flow/modules/chart/Chart.js +2 -2
- package/dist/web/components/flow/modules/chart/index.css +23 -26
- package/dist/web/components/flow/modules/chart/isString.js +5 -0
- package/dist/web/components/flow/modules/control/ApprovalDrawer.css +44 -47
- package/dist/web/components/flow/modules/control/ApprovalPopup.css +34 -37
- package/dist/web/components/flow/modules/control/ApprovalPopup.js +10 -6
- package/dist/web/components/flow/modules/control/Control.css +7 -10
- package/dist/web/components/flow/modules/control/Control.js +4 -1
- package/dist/web/components/flow/modules/control/ControlMobile.css +10 -13
- package/dist/web/components/flow/modules/control/FlowTaskInfoModal.css +0 -3
- package/dist/web/components/flow/modules/control/provider/useControlModel.js +18 -5
- package/dist/web/components/flow/modules/layout/index.css +0 -3
- package/dist/web/components/flow/modules/process/Process.js +1 -1
- package/dist/web/components/flow/modules/process/ProcessMobile.js +1 -1
- package/dist/web/components/flow/modules/process/index.css +49 -43
- package/dist/web/components/form/form/index.css +2 -5
- package/dist/web/components/form/form/index.js +48 -4
- package/dist/web/components/form/formcell/index.css +29 -17
- package/dist/web/components/form/input/index.css +5 -8
- package/dist/web/components/form/input/index.js +11 -0
- package/dist/web/components/form/location/common/mapChoose.css +88 -91
- package/dist/web/components/form/location/common/selectModal.css +10 -13
- package/dist/web/components/form/location/components/LocationH5/index.css +17 -20
- package/dist/web/components/form/location/components/LocationH5/location.h5.js +2 -3
- package/dist/web/components/form/location/components/LocationH5/location.module.css +0 -3
- package/dist/web/components/form/location/components/LocationPC/index.css +10 -13
- package/dist/web/components/form/location/components/LocationPC/location.PC.js +2 -3
- package/dist/web/components/form/location/index.css +0 -3
- package/dist/web/components/form/radio/index.css +0 -3
- package/dist/web/components/form/select/allTimePicker/calendar.css +15 -18
- package/dist/web/components/form/select/allTimePicker/index.css +53 -27
- package/dist/web/components/form/select/dropdown-select/h5.js +22 -11
- package/dist/web/components/form/select/dropdown-select/index.css +28 -28
- package/dist/web/components/form/select/dropdown-select/index.js +37 -4
- package/dist/web/components/form/select/dropdown-select/pc.js +57 -17
- package/dist/web/components/form/select/dropdown-select/ui.js +5 -2
- package/dist/web/components/form/select/index.css +12 -8
- package/dist/web/components/form/select/index.js +2 -2
- package/dist/web/components/form/select/status/index.css +10 -13
- package/dist/web/components/form/switch/switch.module.css +0 -3
- package/dist/web/components/form/textarea/index.css +1 -4
- package/dist/web/components/form/tips/index.css +11 -2
- package/dist/web/components/form/uploader/index.css +14 -17
- package/dist/web/components/form/uploaderFile/index.css +61 -64
- package/dist/web/components/form/userOrgSelect/common/fetch-data-service.js +120 -38
- package/dist/web/components/form/userOrgSelect/common/utils.js +89 -1
- package/dist/web/components/form/userOrgSelect/component/depart-breadcrumb.js +15 -0
- package/dist/web/components/form/userOrgSelect/component/depart-select/depart-select-pc.js +63 -0
- package/dist/web/components/form/userOrgSelect/component/depart-select/index.js +96 -0
- package/dist/web/components/form/userOrgSelect/component/depart-select/org-modal-pc.js +69 -0
- package/dist/web/components/form/userOrgSelect/{user-select-pc → component}/error-tips.js +0 -0
- package/dist/web/components/form/userOrgSelect/component/index.css +323 -0
- package/dist/web/components/form/userOrgSelect/component/input-tags.js +21 -0
- package/dist/web/components/form/userOrgSelect/component/modal-search-h5.js +25 -0
- package/dist/web/components/form/userOrgSelect/component/modal-search.js +11 -0
- package/dist/web/components/form/userOrgSelect/component/modal-select-h5.js +201 -0
- package/dist/web/components/form/userOrgSelect/component/org-tree-h5.js +19 -0
- package/dist/web/components/form/userOrgSelect/component/org-tree.js +33 -0
- package/dist/web/components/form/userOrgSelect/component/selected-list-h5.js +44 -0
- package/dist/web/components/form/userOrgSelect/component/selected-list.js +15 -0
- package/dist/web/components/form/userOrgSelect/component/user-org-list.js +55 -0
- package/dist/web/components/form/userOrgSelect/component/user-select-h5/index.js +151 -0
- package/dist/web/components/form/userOrgSelect/component/user-select-h5/user-list-h5.js +107 -0
- package/dist/web/components/form/userOrgSelect/component/user-select-h5/user-select-h5.js +50 -0
- package/dist/web/components/form/userOrgSelect/component/user-select-pc/error-tips.js +11 -0
- package/dist/web/components/form/userOrgSelect/{user-select-pc → component/user-select-pc}/model-user-list.js +9 -9
- package/dist/web/components/form/userOrgSelect/component/user-select-pc/org-tree.js +10 -0
- package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-model.js +75 -0
- package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-select-pc.js +65 -0
- package/dist/web/components/form/userOrgSelect/component/userOrgSelect.css +1160 -0
- package/dist/web/components/form/userOrgSelect/departTreeSelect/departTreeSelect.h5.js +54 -87
- package/dist/web/components/form/userOrgSelect/hooks/use-depart-data.js +30 -35
- package/dist/web/components/form/userOrgSelect/hooks/use-views-data.js +48 -0
- package/dist/web/components/formdetail/index.css +34 -31
- package/dist/web/components/formdetail/index.js +12 -3
- package/dist/web/components/graphicCard/index.css +15 -18
- package/dist/web/components/grid/_utils.css +67 -0
- package/dist/web/components/grid/col.js +33 -0
- package/dist/web/components/grid/grid.css +1185 -0
- package/dist/web/components/grid/grid.js +19 -0
- package/dist/web/components/grid/row.js +14 -0
- package/dist/web/components/image/image.js +9 -1
- package/dist/web/components/image/index.css +2 -5
- package/dist/web/components/index.js +17 -3
- package/dist/web/components/link/index.css +0 -3
- package/dist/web/components/listView/index.css +21 -23
- package/dist/web/components/listView/index.js +171 -34
- package/dist/web/components/lottery/index.css +72 -75
- package/dist/web/components/modal/h5.css +19 -21
- package/dist/web/components/modal/modal.h5.js +11 -10
- package/dist/web/components/navLayout/index.css +14 -139
- package/dist/web/components/navigationBar/common.js +5 -4
- package/dist/web/components/navigationBar/h5Menu.js +12 -10
- package/dist/web/components/navigationBar/horizontalMenu.js +42 -35
- package/dist/web/components/navigationBar/index.css +130 -86
- package/dist/web/components/navigationBar/index.js +6 -4
- package/dist/web/components/navigationBar/verticalMenu.js +13 -9
- package/dist/web/components/pageLayout/PageContent/index.css +7 -10
- package/dist/web/components/pageLayout/index.css +0 -3
- package/dist/web/components/pageLayout/index.js +2 -1
- package/dist/web/components/repeater/index.js +17 -0
- package/dist/web/components/repeater-item/index.js +9 -0
- package/dist/web/components/richText/index.css +5 -8
- package/dist/web/components/richText/index.js +4 -2
- package/dist/web/components/richText/richtext.module.css +1 -4
- package/dist/web/components/richTextView/index.css +7 -10
- package/dist/web/components/swiper/index.css +10 -13
- package/dist/web/components/swiper/index.js +19 -5
- package/dist/web/components/table/BaseTable.js +352 -283
- package/dist/web/components/table/ExportFileModalByApi/index.css +9 -0
- package/dist/web/components/table/ExportFileModalByApi/index.js +150 -0
- package/dist/web/components/table/FieldRender.js +25 -18
- package/dist/web/components/table/FilterFields.js +17 -11
- package/dist/web/components/table/Form/Location.css +2 -5
- package/dist/web/components/table/ImportFileModal/csvTemplate.json +65 -6
- package/dist/web/components/table/ImportFileModalByApi/index.css +130 -0
- package/dist/web/components/table/ImportFileModalByApi/index.js +321 -0
- package/dist/web/components/table/ImportFileModalByApi/uploadCSVFile.js +115 -0
- package/dist/web/components/table/InOrOutRecordModeal.js +139 -0
- package/dist/web/components/table/SelectableBlock/index.css +0 -2
- package/dist/web/components/table/UserDepartment/viewCell.css +3 -6
- package/dist/web/components/table/baseTable.css +579 -0
- package/dist/web/components/table/hooks/useImportingStatus.js +69 -0
- package/dist/web/components/table/hooks/useInOutFieldsRecords.js +23 -0
- package/dist/web/components/table/index.css +275 -508
- package/dist/web/components/table/index.js +6 -4
- package/dist/web/components/tabs/index.css +19 -18
- package/dist/web/components/tabs/tabs.h5.js +7 -16
- package/dist/web/components/text/index.css +6 -9
- package/dist/web/components/uploaderFileView/index.css +0 -3
- package/dist/web/components/uploaderView/index.css +5 -8
- package/dist/web/components/wd-bubble/index.js +3 -17
- package/dist/web/components/wd-bubble/wd-bubble.js +17 -0
- package/dist/web/components/wd-button/convert-legacy-props.js +14 -0
- package/dist/web/components/wd-button/index.js +3 -0
- package/dist/web/components/wd-button/wd-button.js +89 -0
- package/dist/web/components/wd-config-provider/index.js +1 -0
- package/dist/web/components/wd-config-provider/wd-config-context.js +5 -0
- package/dist/web/components/wd-config-provider/wd-config-provider.js +12 -0
- package/dist/web/components/wd-divider/index.js +3 -0
- package/dist/web/components/wd-divider/wd-divider.js +29 -0
- package/dist/web/components/wd-icon/convert-legacy-props.js +14 -0
- package/dist/web/components/wd-icon/index.js +3 -0
- package/dist/web/components/wd-icon/wd-icon.js +63 -0
- package/dist/web/components/wd-image/image.js +171 -0
- package/dist/web/components/wd-image/index.js +82 -0
- package/dist/web/components/wd-link/index.js +3 -0
- package/dist/web/components/wd-link/wd-link.js +105 -0
- package/dist/web/components/wd-table/index.js +3 -0
- package/dist/web/components/wd-table/wd-table.js +24 -0
- package/dist/web/components/wd-text/convert-legacy-props.js +14 -0
- package/dist/web/components/wd-text/index.js +3 -0
- package/dist/web/components/wd-text/wd-text.js +91 -0
- package/dist/web/components/wedaVideo/index.css +2 -5
- package/dist/web/components/wedaVideo/index.js +8 -6
- package/dist/web/index.js +1 -1
- package/dist/web/utils/config-context/index.js +1 -0
- package/dist/web/utils/config-context/use-config.js +9 -0
- package/dist/web/utils/constant.js +1 -0
- package/dist/web/utils/datasource.js +19 -7
- package/dist/web/utils/file.js +22 -0
- package/dist/web/utils/hooks/CreatePortal.js +6 -0
- package/dist/web/utils/hooks/EnumHoc.js +23 -3
- package/dist/web/utils/hooks/context.js +5 -1
- package/dist/web/utils/platform.js +31 -11
- package/dist/web/utils/pollingInterface.js +61 -0
- package/dist/web/utils/tcb.js +16 -0
- package/dist/web/utils/tool.js +88 -0
- package/dist/web/utils/widget-api/index.js +18 -0
- package/dist/web/weda-ui.css +128 -4
- package/package.json +50 -32
- package/dist/configs/components/dataView.json +0 -305
- package/dist/configs/components/listView.json +0 -515
- package/dist/configs/components/wd-bubble.json +0 -170
- package/dist/web/components/form/userOrgSelect/comTool.js +0 -102
- package/dist/web/components/form/userOrgSelect/departTreeSelect/departTreeSelect.pc.js +0 -155
- package/dist/web/components/form/userOrgSelect/departTreeSelect/index.js +0 -17
- package/dist/web/components/form/userOrgSelect/getUserService.js +0 -165
- package/dist/web/components/form/userOrgSelect/index.js +0 -17
- package/dist/web/components/form/userOrgSelect/user-select-pc/index.css +0 -216
- package/dist/web/components/form/userOrgSelect/user-select-pc/index.js +0 -195
- package/dist/web/components/form/userOrgSelect/user-select-pc/org-tree.js +0 -15
- package/dist/web/components/form/userOrgSelect/user-select-pc/search-user.js +0 -80
- package/dist/web/components/form/userOrgSelect/user-select-pc/selected-user-list.js +0 -12
- package/dist/web/components/form/userOrgSelect/user-select-pc/user-model.js +0 -36
- package/dist/web/components/form/userOrgSelect/userOrgSelect.css +0 -824
- package/dist/web/components/form/userOrgSelect/userTreeSelect.h5.js +0 -302
- package/dist/web/components/form/userOrgSelect/utils.js +0 -95
- package/dist/web/components/table/ImportFileModal/index.css +0 -263
- package/dist/web/components/wd-bubble/index.css +0 -21
- package/dist/web/utils/hooks/useRequest.js +0 -25
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { Modal, Button, Stepper, Dropdown, List, Status, Icon, } from 'tea-component';
|
|
3
|
+
import { UploadCSVFile } from './uploadCSVFile';
|
|
4
|
+
import { alertErrorMessage } from '../../../utils/platform';
|
|
5
|
+
import { useImportingStatus } from '../hooks/useImportingStatus';
|
|
6
|
+
import './index.css';
|
|
7
|
+
import { callWedaApi } from '../../../utils/tcb';
|
|
8
|
+
// 字段映射
|
|
9
|
+
const FileTitleDropdown = ({ fileHeader, fileItem, upddateFileJsonMap }) => {
|
|
10
|
+
const [currentItem, setCurrentItem] = useState(fileItem === null || fileItem === void 0 ? void 0 : fileItem.fileTitle);
|
|
11
|
+
return (React.createElement(Dropdown, { clearable: true, trigger: "click", appearance: "button", style: { marginRight: 10 }, button: currentItem, onClear: () => {
|
|
12
|
+
setCurrentItem(null);
|
|
13
|
+
upddateFileJsonMap(null);
|
|
14
|
+
} },
|
|
15
|
+
React.createElement(List, { type: "option" }, fileHeader.map((i, index) => (React.createElement(List.Item, { key: index, onClick: () => {
|
|
16
|
+
setCurrentItem(i);
|
|
17
|
+
upddateFileJsonMap(i);
|
|
18
|
+
} }, i))))));
|
|
19
|
+
};
|
|
20
|
+
// 提交前校验是否存在重复字段
|
|
21
|
+
const repeatabilityCheck = (fileJsonMap) => {
|
|
22
|
+
let repeatList = [];
|
|
23
|
+
const fileTitleList = [];
|
|
24
|
+
fileJsonMap.forEach((i) => {
|
|
25
|
+
if (!fileTitleList.includes(i.fileTitle)) {
|
|
26
|
+
fileTitleList.push(i.fileTitle);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
repeatList.push(i.fileTitle);
|
|
30
|
+
repeatList = [...new Set(repeatList)];
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
return repeatList;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* 菜单导航配置弹窗
|
|
37
|
+
*/
|
|
38
|
+
export function ImportFileModalByApi({ onCancel, handleInOrOutRecordModealVisible, visible, fields, datasourceTitle, dbName, refresh, }) {
|
|
39
|
+
const [file, setFile] = useState(null);
|
|
40
|
+
const [fileId, setFileIds] = useState(null);
|
|
41
|
+
const [fileHeader, setFileHeader] = useState([]);
|
|
42
|
+
const [fileJsonMap, setFileJsonMap] = useState([]);
|
|
43
|
+
const [disableNext, setDisableNext] = useState(true);
|
|
44
|
+
const [status, setStatus] = useState(null);
|
|
45
|
+
const [errorMessage, setErrorMessage] = useState([]);
|
|
46
|
+
const { fileImportStatus, fileImportErrorMessage } = useImportingStatus(fileId, dbName, 'import');
|
|
47
|
+
const [createDataImportQuery, setCreateDataImportQuery] = useState({
|
|
48
|
+
writeType: 'create',
|
|
49
|
+
isTriggerWorkflow: false,
|
|
50
|
+
fileId: '',
|
|
51
|
+
fileName: '',
|
|
52
|
+
fileSize: 0,
|
|
53
|
+
});
|
|
54
|
+
const importFileHandle = async () => {
|
|
55
|
+
var _a;
|
|
56
|
+
try {
|
|
57
|
+
// 设置上传参数
|
|
58
|
+
// 去除空字段,隐藏计算字段
|
|
59
|
+
const trimFields = fileJsonMap.filter((field) => {
|
|
60
|
+
var _a;
|
|
61
|
+
return field &&
|
|
62
|
+
typeof field === 'object' &&
|
|
63
|
+
((_a = Object.keys(field)) === null || _a === void 0 ? void 0 : _a.length) &&
|
|
64
|
+
field.format !== 'function';
|
|
65
|
+
});
|
|
66
|
+
const fieldMapAction = (_a = trimFields === null || trimFields === void 0 ? void 0 : trimFields.map(({ name, fileTitle, format, updateRelateByFieldsKey }) => {
|
|
67
|
+
const result = {
|
|
68
|
+
FieldId: name,
|
|
69
|
+
ColumnName: fileTitle,
|
|
70
|
+
};
|
|
71
|
+
if (format === 'related' ||
|
|
72
|
+
format === 'x-enum' ||
|
|
73
|
+
format === 'father-son') {
|
|
74
|
+
result['Strategy'] = updateRelateByFieldsKey;
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
})) === null || _a === void 0 ? void 0 : _a.filter((item) => item === null || item === void 0 ? void 0 : item.ColumnName); // 没有选择表列字段的过滤掉
|
|
78
|
+
const { fileSize, fileName, fileId, isTriggerWorkflow, writeType } = createDataImportQuery;
|
|
79
|
+
// 启动导入接口
|
|
80
|
+
const queryParams = {
|
|
81
|
+
action: 'CreateDataImport',
|
|
82
|
+
data: {
|
|
83
|
+
FileId: fileId,
|
|
84
|
+
FileName: fileName,
|
|
85
|
+
FileSize: fileSize,
|
|
86
|
+
WriteType: writeType,
|
|
87
|
+
TriggerWorkflow: isTriggerWorkflow,
|
|
88
|
+
DataSourceName: dbName,
|
|
89
|
+
FieldMap: fieldMapAction,
|
|
90
|
+
UpdateBy: 'identity',
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
const { FileId, Status, ErrorMessage } = await callWedaApi(queryParams);
|
|
94
|
+
if (Status === 'success') {
|
|
95
|
+
setStatus('success');
|
|
96
|
+
refresh();
|
|
97
|
+
}
|
|
98
|
+
else if (Status === 'failure') {
|
|
99
|
+
setErrorMessage(['导入文件失败', [ErrorMessage || '']]);
|
|
100
|
+
}
|
|
101
|
+
else if (Status === 'importing' || Status === 'init') {
|
|
102
|
+
// 轮询查询状态
|
|
103
|
+
setFileIds(FileId);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
setStatus('error');
|
|
108
|
+
setErrorMessage(['导入文件请求失败', [(error === null || error === void 0 ? void 0 : error.message) || '']]);
|
|
109
|
+
console.error('importFileHandle error', error);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
// 枚举 关联关系 主子明细根据可选「选项标识」「选项值」「主列字段」或「数据标识」作为导入匹配标识
|
|
113
|
+
const getUpdateRelateByFields = ({ format, updateRelateByFieldsValue, name, }) => {
|
|
114
|
+
const relatedMenuList = [
|
|
115
|
+
{
|
|
116
|
+
key: 'identity',
|
|
117
|
+
value: '数据标识',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
key: 'primary',
|
|
121
|
+
value: '主列字段',
|
|
122
|
+
},
|
|
123
|
+
];
|
|
124
|
+
const menuList = {
|
|
125
|
+
related: relatedMenuList,
|
|
126
|
+
'x-enum': [
|
|
127
|
+
{
|
|
128
|
+
key: 'key',
|
|
129
|
+
value: '选项标识',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
key: 'value',
|
|
133
|
+
value: '选项值',
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
'father-son': relatedMenuList,
|
|
137
|
+
};
|
|
138
|
+
const menu = (format) => {
|
|
139
|
+
var _a;
|
|
140
|
+
return (React.createElement(List, { type: "option" }, (_a = menuList === null || menuList === void 0 ? void 0 : menuList[format]) === null || _a === void 0 ? void 0 : _a.map((item) => (React.createElement(List.Item, { key: item.key, onClick: () => {
|
|
141
|
+
const list = fileJsonMap.map((fileItem) => {
|
|
142
|
+
if (fileItem.name === name) {
|
|
143
|
+
fileItem.updateRelateByFieldsValue = item.value;
|
|
144
|
+
fileItem.updateRelateByFieldsKey = item.key;
|
|
145
|
+
}
|
|
146
|
+
return fileItem;
|
|
147
|
+
});
|
|
148
|
+
setFileJsonMap(list);
|
|
149
|
+
} }, item.value)))));
|
|
150
|
+
};
|
|
151
|
+
if (format === 'related' ||
|
|
152
|
+
format === 'x-enum' ||
|
|
153
|
+
format === 'father-son') {
|
|
154
|
+
return (React.createElement(Dropdown, { trigger: "click", clickClose: true, button: updateRelateByFieldsValue, appearance: "button", className: "file-json-map-content_update_fileds" }, menu(format)));
|
|
155
|
+
}
|
|
156
|
+
return null;
|
|
157
|
+
};
|
|
158
|
+
const addUpdateFieldsBy = (fileJsonMapList, fileHeader, type) => {
|
|
159
|
+
const isExidsId = fileHeader === null || fileHeader === void 0 ? void 0 : fileHeader.find((item) => item === '数据标识');
|
|
160
|
+
const isSelectUpdateBy = (fileJsonMapList === null || fileJsonMapList === void 0 ? void 0 : fileJsonMapList.findIndex((item) => item.name === '_id')) !== -1;
|
|
161
|
+
if (!isSelectUpdateBy && type === 'add') {
|
|
162
|
+
fileJsonMapList === null || fileJsonMapList === void 0 ? void 0 : fileJsonMapList.unshift({
|
|
163
|
+
fileTitle: isExidsId || '请指定更新依据字段',
|
|
164
|
+
title: '数据标识(更新依据字段)',
|
|
165
|
+
name: '_id',
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
if (isSelectUpdateBy && type === 'remove') {
|
|
169
|
+
fileJsonMapList === null || fileJsonMapList === void 0 ? void 0 : fileJsonMapList.shift();
|
|
170
|
+
}
|
|
171
|
+
setFileJsonMap(fileJsonMapList);
|
|
172
|
+
};
|
|
173
|
+
useEffect(() => {
|
|
174
|
+
if (fileImportStatus === 'success') {
|
|
175
|
+
refresh();
|
|
176
|
+
setStatus('success');
|
|
177
|
+
}
|
|
178
|
+
else if (fileImportStatus === 'failure') {
|
|
179
|
+
setStatus('error');
|
|
180
|
+
setErrorMessage([fileImportErrorMessage === null || fileImportErrorMessage === void 0 ? void 0 : fileImportErrorMessage.ErrorMessage]);
|
|
181
|
+
}
|
|
182
|
+
}, [fileImportStatus, fileImportErrorMessage]);
|
|
183
|
+
const steps = [
|
|
184
|
+
{
|
|
185
|
+
id: 'uploadFile',
|
|
186
|
+
label: '选择文件',
|
|
187
|
+
component: (React.createElement(UploadCSVFile, { file: file, setFile: setFile, datasourceTitle: datasourceTitle, dbName: dbName, fields: fields, parseFile: ({ fileHeader }) => {
|
|
188
|
+
setFileHeader(fileHeader);
|
|
189
|
+
const fileJsonMapList = fields.map((i) => {
|
|
190
|
+
const item = { ...i };
|
|
191
|
+
item.fileTitle = fileHeader.find((j) => j === item.title);
|
|
192
|
+
if (i.format === 'x-enum') {
|
|
193
|
+
item.updateRelateByFieldsValue = '选项标识';
|
|
194
|
+
item.updateRelateByFieldsKey = 'key';
|
|
195
|
+
}
|
|
196
|
+
if (i.format === 'related' || i.format === 'father-son') {
|
|
197
|
+
item.updateRelateByFieldsValue = '主列字段';
|
|
198
|
+
item.updateRelateByFieldsKey = 'primary';
|
|
199
|
+
}
|
|
200
|
+
return item;
|
|
201
|
+
});
|
|
202
|
+
setFileJsonMap(fileJsonMapList);
|
|
203
|
+
setDisableNext(false);
|
|
204
|
+
}, setDisableNext: setDisableNext, createDataImportQuery: createDataImportQuery, setCreateDataImportQuery: setCreateDataImportQuery })),
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
id: 'fieldMap',
|
|
208
|
+
label: '映射字段',
|
|
209
|
+
component: (React.createElement("div", { className: "file-json-map-wrap" },
|
|
210
|
+
React.createElement("div", { className: "file-json-map-header" },
|
|
211
|
+
React.createElement("p", null, "\u6587\u6863\u5B57\u6BB5"),
|
|
212
|
+
React.createElement("span", { className: "arrow" }),
|
|
213
|
+
React.createElement("p", null, "\u8868\u683C\u5B57\u6BB5")),
|
|
214
|
+
React.createElement("div", { className: "file-json-map-container" }, fileJsonMap.map((i, index) => (React.createElement("div", { className: "file-json-map-content", key: index },
|
|
215
|
+
React.createElement(FileTitleDropdown, { fileHeader: fileHeader, fileItem: i, upddateFileJsonMap: (fileTitle) => {
|
|
216
|
+
const list = fileJsonMap.map((j) => {
|
|
217
|
+
const item = { ...j };
|
|
218
|
+
if (i.title === j.title) {
|
|
219
|
+
item.fileTitle = fileTitle;
|
|
220
|
+
}
|
|
221
|
+
return item;
|
|
222
|
+
});
|
|
223
|
+
setFileJsonMap(list);
|
|
224
|
+
} }),
|
|
225
|
+
React.createElement("span", { className: "arrow" }),
|
|
226
|
+
React.createElement("span", { className: "table-field" }, i.title),
|
|
227
|
+
getUpdateRelateByFields(i))))))),
|
|
228
|
+
nextAction: () => {
|
|
229
|
+
const { writeType } = createDataImportQuery;
|
|
230
|
+
const updateFieldsBystatus = writeType === 'update' || writeType === 'upsert';
|
|
231
|
+
addUpdateFieldsBy(fileJsonMap, fileHeader, updateFieldsBystatus ? 'add' : 'remove');
|
|
232
|
+
setCurrent(next ? next.id : null);
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
id: 'importFile',
|
|
237
|
+
label: '导入文件',
|
|
238
|
+
component: (React.createElement("div", { className: "import-file-result-wrap" },
|
|
239
|
+
status === 'error' && (React.createElement("div", { className: "error-container" },
|
|
240
|
+
React.createElement("div", { className: "error-tip" },
|
|
241
|
+
React.createElement(Icon, { type: "error", size: "s" }),
|
|
242
|
+
React.createElement("p", null, "\u6570\u636E\u5BFC\u5165\u5931\u8D25")),
|
|
243
|
+
React.createElement("div", { className: "error-content" },
|
|
244
|
+
React.createElement(List, null, Array.isArray(errorMessage)
|
|
245
|
+
? errorMessage === null || errorMessage === void 0 ? void 0 : errorMessage.map((i, index) => (React.createElement(List.Item, { key: index }, i)))
|
|
246
|
+
: errorMessage)))),
|
|
247
|
+
status !== 'validateError' && status !== 'error' && (React.createElement("div", { className: `status-wrap ${status}` },
|
|
248
|
+
React.createElement(Status, { icon: 'blank', size: 'm', title: status === 'success'
|
|
249
|
+
? '数据导入完成'
|
|
250
|
+
: '数据导入中,请稍后...', description: status !== 'success' ? (React.createElement("div", null,
|
|
251
|
+
"\u5173\u95ED\u5F39\u7A97\u540E\uFF0C\u5BFC\u5165\u4EFB\u52A1\u4F1A\u7EE7\u7EED\u6267\u884C\uFF0C\u53EF\u5728",
|
|
252
|
+
React.createElement("a", { onClick: () => {
|
|
253
|
+
handleInOrOutRecordModealVisible('import');
|
|
254
|
+
onCancel();
|
|
255
|
+
} }, "\u6211\u7684\u5BFC\u5165\u8BB0\u5F55"),
|
|
256
|
+
"\u67E5\u770B\u4EFB\u52A1\u8FDB\u5EA6")) : (React.createElement("div", null,
|
|
257
|
+
React.createElement("span", null,
|
|
258
|
+
"\u6210\u529F", fileImportErrorMessage === null || fileImportErrorMessage === void 0 ? void 0 :
|
|
259
|
+
fileImportErrorMessage.Success,
|
|
260
|
+
"\u6761\uFF0C\u5931\u8D25", fileImportErrorMessage === null || fileImportErrorMessage === void 0 ? void 0 :
|
|
261
|
+
fileImportErrorMessage.Failure,
|
|
262
|
+
"\u6761"),
|
|
263
|
+
!!(fileImportErrorMessage === null || fileImportErrorMessage === void 0 ? void 0 : fileImportErrorMessage.Failure) && (React.createElement("a", { target: '_blank', href: fileImportErrorMessage === null || fileImportErrorMessage === void 0 ? void 0 : fileImportErrorMessage.ErrorDownloadUrl, rel: "noreferrer", style: { marginLeft: '6px' } }, "\u4E0B\u8F7D\u9519\u8BEF\u62A5\u544A")))) }))))),
|
|
264
|
+
nextAction: () => {
|
|
265
|
+
var _a;
|
|
266
|
+
// 更新依据字段
|
|
267
|
+
const isSelectUpdateBy = fileJsonMap.find((item) => item.fileTitle === '请指定更新依据字段');
|
|
268
|
+
if (isSelectUpdateBy) {
|
|
269
|
+
alertErrorMessage({ message: `请指定更新依据字段才能更新数据` });
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
const repeatList = (_a = repeatabilityCheck(fileJsonMap)) === null || _a === void 0 ? void 0 : _a.filter((item) => !!item);
|
|
273
|
+
if (repeatList.length) {
|
|
274
|
+
let text = repeatList.reduce((res, i) => `${res}、${i}`);
|
|
275
|
+
text = text ? text === null || text === void 0 ? void 0 : text.replace('null', '空') : '空';
|
|
276
|
+
const modal = Modal.show({
|
|
277
|
+
size: 's',
|
|
278
|
+
children: (React.createElement(React.Fragment, null,
|
|
279
|
+
React.createElement(Modal.Body, null,
|
|
280
|
+
React.createElement(Modal.Message, { icon: "warning", message: "\u6587\u6863\u5B57\u6BB5\u91CD\u590D\u6620\u5C04", description: `文档的「${text}」字段被映射到多个表格字段,是否确认导入` })),
|
|
281
|
+
React.createElement(Modal.Footer, null,
|
|
282
|
+
React.createElement(Button, { onClick: () => {
|
|
283
|
+
modal.destroy();
|
|
284
|
+
} }, "\u53D6\u6D88"),
|
|
285
|
+
React.createElement(Button, { type: "primary", onClick: async () => {
|
|
286
|
+
modal.destroy();
|
|
287
|
+
importFileHandle();
|
|
288
|
+
setCurrent(next ? next.id : null);
|
|
289
|
+
} }, "\u786E\u8BA4\u5BFC\u5165")))),
|
|
290
|
+
onClose: () => modal.destroy(),
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
importFileHandle();
|
|
295
|
+
setCurrent(next ? next.id : null);
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
},
|
|
299
|
+
];
|
|
300
|
+
const [current, setCurrent] = useState('uploadFile');
|
|
301
|
+
const currentIndex = current ? steps.findIndex((x) => x.id === current) : -1;
|
|
302
|
+
const next = current && steps[currentIndex + 1];
|
|
303
|
+
const prev = current ? steps[currentIndex - 1] : steps[steps.length - 1];
|
|
304
|
+
return (React.createElement(Modal, { caption: "\u5BFC\u5165\u6570\u636E", visible: visible, onClose: onCancel, destroyOnClose: true, size: 'l', className: `weda-import-csv-file-modal weda-import-by-api-csv-file-modal ${current === 'importFile' && 'none-border'}` },
|
|
305
|
+
React.createElement(Modal.Body, null,
|
|
306
|
+
React.createElement("div", null,
|
|
307
|
+
React.createElement(Stepper, { steps: steps, current: current }),
|
|
308
|
+
React.createElement("section", { className: "modal-section" }, steps[currentIndex] && steps[currentIndex].component))),
|
|
309
|
+
React.createElement(Modal.Footer, null,
|
|
310
|
+
current === 'uploadFile' && (React.createElement(Button, { type: "link", style: { float: 'left' }, onClick: () => {
|
|
311
|
+
handleInOrOutRecordModealVisible('import');
|
|
312
|
+
onCancel();
|
|
313
|
+
} }, "\u6211\u7684\u5BFC\u5165\u8BB0\u5F55")),
|
|
314
|
+
current !== 'importFile' && (React.createElement(React.Fragment, null,
|
|
315
|
+
React.createElement(Button, { disabled: !prev, onClick: () => setCurrent(prev.id) }, "\u4E0A\u4E00\u6B65"),
|
|
316
|
+
React.createElement(Button, { type: "primary", disabled: (!next && !current) || disableNext, onClick: () => {
|
|
317
|
+
if (next.nextAction) {
|
|
318
|
+
next.nextAction();
|
|
319
|
+
}
|
|
320
|
+
}, style: { marginLeft: 10 } }, next ? '下一步' : '开始导入'))))));
|
|
321
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Upload, Form, Text, Status, Select } from 'tea-component';
|
|
3
|
+
import { exportData, getXlsxFileHeader } from '../../../utils/file';
|
|
4
|
+
import { callWedaApi } from '../../../utils/tcb';
|
|
5
|
+
import csvTemplate from '../ImportFileModal/csvTemplate.json';
|
|
6
|
+
// 下载模版
|
|
7
|
+
const getCSVTemplate = (fields, datasourceTitle) => {
|
|
8
|
+
const header = [];
|
|
9
|
+
const row = [];
|
|
10
|
+
fields.forEach((i) => {
|
|
11
|
+
var _a;
|
|
12
|
+
const value = (_a = csvTemplate.find((j) => j.type === i.type && j.format === i.format)) === null || _a === void 0 ? void 0 : _a.value;
|
|
13
|
+
header.push(i.title);
|
|
14
|
+
row.push(value || '');
|
|
15
|
+
});
|
|
16
|
+
exportData([header, row], 'xlsx', `_${datasourceTitle}_导入模版`);
|
|
17
|
+
};
|
|
18
|
+
// 上传csv文件
|
|
19
|
+
export function UploadCSVFile({ parseFile, fields, datasourceTitle, dbName, setDisableNext, setFile, file, createDataImportQuery, setCreateDataImportQuery, }) {
|
|
20
|
+
const [status, setStatus] = useState(null);
|
|
21
|
+
const [errorMsg, setErrorMsg] = useState('');
|
|
22
|
+
function handleStart(file) {
|
|
23
|
+
setFile(file);
|
|
24
|
+
getXlsxFileHeader(file, ({ headers }) => {
|
|
25
|
+
parseFile({ fileHeader: headers });
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function handleSuccess(value) {
|
|
29
|
+
const { code } = value;
|
|
30
|
+
if (code === 'BAD_REQUEST') {
|
|
31
|
+
setStatus('error');
|
|
32
|
+
setDisableNext(true);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
setStatus('success');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function handleError(error) {
|
|
39
|
+
console.error('handleError', error);
|
|
40
|
+
setStatus('error');
|
|
41
|
+
setErrorMsg('上传文件失败' + error);
|
|
42
|
+
setDisableNext(true);
|
|
43
|
+
}
|
|
44
|
+
function beforeUpload(file, fileList, isAccepted) {
|
|
45
|
+
if (!isAccepted) {
|
|
46
|
+
setStatus('error');
|
|
47
|
+
}
|
|
48
|
+
return isAccepted;
|
|
49
|
+
}
|
|
50
|
+
async function getUploadUrl(file) {
|
|
51
|
+
try {
|
|
52
|
+
const { name, size } = file;
|
|
53
|
+
const queryParams = {
|
|
54
|
+
action: 'CreateDataPreImport',
|
|
55
|
+
data: { FileName: name, DataSourceName: dbName },
|
|
56
|
+
};
|
|
57
|
+
const { UploadUrl, FileId } = await callWedaApi(queryParams);
|
|
58
|
+
setCreateDataImportQuery({
|
|
59
|
+
...createDataImportQuery,
|
|
60
|
+
fileId: FileId,
|
|
61
|
+
fileName: name,
|
|
62
|
+
fileSize: size,
|
|
63
|
+
});
|
|
64
|
+
return UploadUrl;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
setErrorMsg(`上传文件 CreateDataPreImport 接口调用失败,${(error === null || error === void 0 ? void 0 : error.message) || ''}`);
|
|
68
|
+
console.error('getUploadUrl error', error);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return (React.createElement("div", { className: "modal-upload-wrap" },
|
|
72
|
+
React.createElement(Form, { className: "weda_modal-upload-wrap_import_type" },
|
|
73
|
+
React.createElement(Form.Item, { label: "\u5BFC\u5165\u6A21\u5F0F" },
|
|
74
|
+
React.createElement(Select, { size: "m", appearance: "button", options: [
|
|
75
|
+
{ value: 'create', text: '仅新增' },
|
|
76
|
+
{ value: 'update', text: '仅更新' },
|
|
77
|
+
{ value: 'upsert', text: '新增或更新' },
|
|
78
|
+
], value: createDataImportQuery.writeType, onChange: (value) => setCreateDataImportQuery({
|
|
79
|
+
...createDataImportQuery,
|
|
80
|
+
writeType: value,
|
|
81
|
+
}) }))),
|
|
82
|
+
React.createElement(Form.Control, { status: status, message: status === 'error' ? errorMsg : '' },
|
|
83
|
+
React.createElement(Upload, { method: "put", action: getUploadUrl, send: (file) => file, accept: ".xlsx", maxSize: 1024 * 1024 * 2, onStart: handleStart, onSuccess: handleSuccess, onError: handleError, beforeUpload: beforeUpload }, ({ open, isDragging }) => (React.createElement(Upload.Dragger, { filename: file && file.name, button: React.createElement(Status, { className: "csv-file", icon: 'blank', size: 's', description: file && file.name, operation: React.createElement(React.Fragment, null,
|
|
84
|
+
React.createElement("a", { onClick: open }, "\u91CD\u65B0\u4E0A\u4F20"),
|
|
85
|
+
"\u00A0/\u00A0",
|
|
86
|
+
React.createElement("a", { onClick: () => {
|
|
87
|
+
setFile(null);
|
|
88
|
+
setDisableNext(true);
|
|
89
|
+
} }, "\u5220\u9664")) }) }, isDragging ? ('释放鼠标') : (React.createElement(Status, { className: "upload-file", icon: 'blank', size: 's', operation: React.createElement(React.Fragment, null,
|
|
90
|
+
React.createElement("a", { onClick: open }, "\u70B9\u51FB\u4E0A\u4F20"),
|
|
91
|
+
" /",
|
|
92
|
+
' ',
|
|
93
|
+
React.createElement(Text, { theme: "weak" }, "\u62D6\u62FD\u5230\u6B64\u533A\u57DF")) })))))),
|
|
94
|
+
React.createElement("div", { className: "modal-upload-text-wrap" },
|
|
95
|
+
React.createElement("ul", null,
|
|
96
|
+
React.createElement("li", null,
|
|
97
|
+
"1\u3001\u8BF7\u4E0B\u8F7D\u4F7F\u7528",
|
|
98
|
+
React.createElement("span", { onClick: () => {
|
|
99
|
+
getCSVTemplate(fields, datasourceTitle);
|
|
100
|
+
} }, "\u00A0 \u5BFC\u5165\u6A21\u7248"),
|
|
101
|
+
"\uFF0C\u5E76\u6309\u7167\u793A\u4F8B\u586B\u5199\u6570\u636E\uFF0C\u4EE5\u4FDD\u8BC1\u6570\u636E\u5BFC\u5165\u987A\u5229"),
|
|
102
|
+
React.createElement("li", null, "2\u3001\u652F\u6301xlsx\u7C7B\u578B\u6587\u4EF6\uFF0C\u8981\u6C42\u6587\u4EF6\u5927\u5C0F2M\u4EE5\u5185\uFF0C\u4E0D\u80FD\u8D85\u8FC710000\u884C"),
|
|
103
|
+
React.createElement("li", null,
|
|
104
|
+
React.createElement("div", null, "3\u3001\u5BFC\u5165\u66F4\u65B0\u8BF4\u660E"),
|
|
105
|
+
React.createElement("div", null, "\u00A01\uFF09\u652F\u6301\u4EE5\u300C\u6570\u636E\u6807\u8BC6\u300D\u4F5C\u4E3A\u4F9D\u636E\u5B57\u6BB5\uFF0C\u5BF9\u5DF2\u6709\u6570\u636E\u8FDB\u884C\u5339\u914D\u66F4\u65B0"),
|
|
106
|
+
React.createElement("div", null, "\u00A02\uFF09\u5BFC\u5165\u6A21\u5F0F\u4E3A\u300C\u65B0\u589E\u6216\u66F4\u65B0\u300D\u65F6\uFF0C\u5982\u300C\u6570\u636E\u6807\u8BC6\u300D\u5217\u4E3A\u7A7A\uFF0C\u8BE5\u884C\u6570\u636E\u4F1A\u6267\u884C\u65B0\u589E\u64CD\u4F5C")),
|
|
107
|
+
React.createElement("li", null,
|
|
108
|
+
React.createElement("div", null, "4\u3001\u6570\u636E\u683C\u5F0F\u8BF4\u660E"),
|
|
109
|
+
React.createElement("div", null, "\u00A0 1\uFF09\u679A\u4E3E\u7C7B\u578B\u6570\u636E\uFF1A\u652F\u6301\u9009\u62E9\u9009\u9879\u6807\u8BC6\u6216\u9009\u9879\u503C\u8FDB\u884C\u5BFC\u5165\uFF1A\u9009\u9879\u6807\u8BC6\u4E3A\u8868\u683C\u4E2D\u5C55\u793A\u7684\u4E1A\u52A1\u540D\u79F0\uFF1B\u9009\u9879\u503C\u4E3A\u9009\u9879\u7684\u7CFB\u7EDF\u552F\u4E00\u6807\u8BC6"),
|
|
110
|
+
React.createElement("div", null, "\u00A02\uFF09\u5173\u8054\u5173\u7CFB\u3001\u4E3B\u5B50\u660E\u7EC6\u7C7B\u578B\u6570\u636E\uFF1A\u652F\u6301\u9009\u62E9\u4E3B\u5217\u5B57\u6BB5\u6216\u6570\u636E\u6807\u8BC6\u8FDB\u884C\u5BFC\u5165\uFF1A\u4E3B\u5217\u5B57\u6BB5\u4E3A\u8868\u683C\u4E2D\u5C55\u793A\u7684\u5173\u8054\u6570\u636E\u4E1A\u52A1\u540D\u79F0\uFF1B\u6570\u636E\u6807\u8BC6\u4E3A\u5173\u8054\u6570\u636E\u7684\u7CFB\u7EDF\u552F\u4E00\u6807\u8BC6"),
|
|
111
|
+
React.createElement("div", null, "\u00A03\uFF09\u5E03\u5C14\u7C7B\u578B\u6570\u636E\uFF1A\u652F\u6301\u5BFC\u5165\u300C\u662F/\u5426\u300D\u6216\u300Ctrue/false\u300D"),
|
|
112
|
+
React.createElement("div", null, "\u00A04\uFF09\u56FE\u7247\u7C7B\u578B\u6570\u636E\uFF1A\u652F\u6301\u5BFC\u5165https\u6216cloud\u534F\u8BAE\u7684\u56FE\u7247\u5730\u5740"),
|
|
113
|
+
React.createElement("div", null, "\u00A05\uFF09\u6587\u4EF6\u7C7B\u578B\u6570\u636E\uFF1A\u652F\u6301cloud\u534F\u8BAE\u7684\u6587\u4EF6\u5730\u5740"),
|
|
114
|
+
React.createElement("div", null, "\u00A06\uFF09\u5730\u7406\u4F4D\u7F6E\u7C7B\u578B\u6570\u636E\uFF1A\u6570\u636E\u683C\u5F0F\u8981\u6C42\u4E3A\u5730\u70B9\u540D\u79F0(\u5750\u6807\u7ECF\u5EA6\uFF0C\u5750\u6807\u7EF4\u5EA6)"))))));
|
|
115
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { useInOutFieldsRecords } from './hooks/useInOutFieldsRecords';
|
|
3
|
+
import { mutate } from 'swr';
|
|
4
|
+
import { Modal, Table, Button, Text, StatusTip, Icon, List, } from 'tea-component';
|
|
5
|
+
import { moment } from '../form/select';
|
|
6
|
+
const fieldsStatusTextColor = {
|
|
7
|
+
init: 'warning',
|
|
8
|
+
importing: 'warning',
|
|
9
|
+
success: 'text',
|
|
10
|
+
failure: 'danger',
|
|
11
|
+
partialFailure: 'danger',
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* 菜单导航配置弹窗
|
|
15
|
+
*/
|
|
16
|
+
export function InOrOutRecordModeal({ visible, onCancel, dbName }) {
|
|
17
|
+
var _a, _b, _c, _d, _e;
|
|
18
|
+
const isImportRecord = visible && visible === 'import';
|
|
19
|
+
const titlePre = isImportRecord ? '导入' : '导出';
|
|
20
|
+
const fieldsStatus = {
|
|
21
|
+
init: `${titlePre}初始化中`,
|
|
22
|
+
importing: `${titlePre}中`,
|
|
23
|
+
exporting: `${titlePre}中`,
|
|
24
|
+
success: '成功',
|
|
25
|
+
failure: '失败',
|
|
26
|
+
partialFailure: '部分失败',
|
|
27
|
+
};
|
|
28
|
+
const [isLodaing, setIsLodaing] = useState(null);
|
|
29
|
+
const [errorFiles, setErrorFiles] = useState(null);
|
|
30
|
+
const { data, isError } = useInOutFieldsRecords({
|
|
31
|
+
type: visible || 'import',
|
|
32
|
+
dbName,
|
|
33
|
+
setIsLodaing,
|
|
34
|
+
});
|
|
35
|
+
const tableRecords = ((_a = data === null || data === void 0 ? void 0 : data.Files) === null || _a === void 0 ? void 0 : _a.map((item) => {
|
|
36
|
+
const result = { ...item };
|
|
37
|
+
// 整理出部分失败状态,成功条数不为0,失败条数不为0,partialFailure
|
|
38
|
+
const { ErrorMessage, ErrorDownloadUrl } = item;
|
|
39
|
+
const isPartialFailure = (ErrorMessage === null || ErrorMessage === void 0 ? void 0 : ErrorMessage.Failure) && (ErrorMessage === null || ErrorMessage === void 0 ? void 0 : ErrorMessage.Success);
|
|
40
|
+
if (ErrorMessage && ErrorDownloadUrl) {
|
|
41
|
+
ErrorMessage['ErrorDownloadUrl'] = ErrorDownloadUrl;
|
|
42
|
+
}
|
|
43
|
+
if (isPartialFailure) {
|
|
44
|
+
result['Status'] = 'partialFailure';
|
|
45
|
+
}
|
|
46
|
+
result['ErrorMessage'] = ErrorMessage;
|
|
47
|
+
return result;
|
|
48
|
+
})) || [];
|
|
49
|
+
const renderStatus = (item) => {
|
|
50
|
+
const status = item === null || item === void 0 ? void 0 : item.Status;
|
|
51
|
+
return (React.createElement("div", null,
|
|
52
|
+
status && (React.createElement(Text, { theme: fieldsStatusTextColor[status] }, fieldsStatus[status])),
|
|
53
|
+
status !== 'success' && (React.createElement("span", { style: { color: '#E7E7E7', margin: '0 7px' } }, "|")),
|
|
54
|
+
(status === 'importing' || status === 'init') && (React.createElement(Button, { type: "link", onClick: () => {
|
|
55
|
+
mutate(dbName + 'DescribeDataImportList');
|
|
56
|
+
} }, "\u5237\u65B0")),
|
|
57
|
+
(status === 'failure' || status === 'partialFailure') && (React.createElement(Button, { type: "link", onClick: () => {
|
|
58
|
+
setErrorFiles(item === null || item === void 0 ? void 0 : item.ErrorMessage);
|
|
59
|
+
} }, (item === null || item === void 0 ? void 0 : item.ErrorMessage) ? '查看原因' : '未查询到失败原因'))));
|
|
60
|
+
};
|
|
61
|
+
const { scrollable } = Table.addons;
|
|
62
|
+
const columns = [
|
|
63
|
+
{
|
|
64
|
+
key: 'FileName',
|
|
65
|
+
header: '文件名称',
|
|
66
|
+
render: (item) => React.createElement("span", null, (item === null || item === void 0 ? void 0 : item.FileName) || '-'),
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
key: 'CreateDate',
|
|
70
|
+
header: `${titlePre}时间`,
|
|
71
|
+
render: (item) => moment(item === null || item === void 0 ? void 0 : item.CreateDate).format('YYYY-MM-DD HH:mm:ss'),
|
|
72
|
+
},
|
|
73
|
+
{ key: 'Status', header: '状态', render: (item) => renderStatus(item) },
|
|
74
|
+
];
|
|
75
|
+
if (!isImportRecord) {
|
|
76
|
+
columns.push({
|
|
77
|
+
key: 'Operate',
|
|
78
|
+
header: '操作',
|
|
79
|
+
render: (item) => {
|
|
80
|
+
return (item === null || item === void 0 ? void 0 : item.DownloadUrl) ? (React.createElement("a", { target: '_blank', href: item === null || item === void 0 ? void 0 : item.DownloadUrl, rel: "noreferrer" }, "\u70B9\u51FB\u4E0B\u8F7D")) : (React.createElement("span", null, "-"));
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
const getTopTip = (isError, isLodaing, tableRecords) => {
|
|
85
|
+
let type = null;
|
|
86
|
+
if (isError) {
|
|
87
|
+
type = 'error';
|
|
88
|
+
}
|
|
89
|
+
else if (isLodaing) {
|
|
90
|
+
type = 'loading';
|
|
91
|
+
}
|
|
92
|
+
else if (!(tableRecords === null || tableRecords === void 0 ? void 0 : tableRecords.length)) {
|
|
93
|
+
type = 'empty';
|
|
94
|
+
}
|
|
95
|
+
return type && React.createElement(StatusTip, { status: type });
|
|
96
|
+
};
|
|
97
|
+
const getTitle = (isErrorMessage) => {
|
|
98
|
+
if (isErrorMessage) {
|
|
99
|
+
return (React.createElement(React.Fragment, null,
|
|
100
|
+
React.createElement("span", { className: "weda-import-or-modal__arrowarp", onClick: () => {
|
|
101
|
+
setErrorFiles([]);
|
|
102
|
+
} },
|
|
103
|
+
React.createElement("i", { className: "weda-import-or-modal__arrow" })),
|
|
104
|
+
React.createElement("span", null),
|
|
105
|
+
"\u5931\u8D25\u539F\u56E0\uFF1A", errorFiles === null || errorFiles === void 0 ? void 0 :
|
|
106
|
+
errorFiles.FileName));
|
|
107
|
+
}
|
|
108
|
+
return `${titlePre}数据`;
|
|
109
|
+
};
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
mutate(dbName + 'DescribeDataImportList');
|
|
112
|
+
}, []);
|
|
113
|
+
return (React.createElement(Modal, { caption: getTitle((_b = errorFiles === null || errorFiles === void 0 ? void 0 : errorFiles.ErrorMessage) === null || _b === void 0 ? void 0 : _b.length), visible: visible, onClose: onCancel, destroyOnClose: true, size: 'l', className: `weda-import-or-modal` },
|
|
114
|
+
React.createElement(Modal.Body, null, ((_c = errorFiles === null || errorFiles === void 0 ? void 0 : errorFiles.ErrorMessage) === null || _c === void 0 ? void 0 : _c.length) ? (React.createElement("div", { className: "error-container" },
|
|
115
|
+
React.createElement("div", { className: "error-tip" },
|
|
116
|
+
React.createElement(Icon, { type: "error", size: "s" }),
|
|
117
|
+
React.createElement("p", null,
|
|
118
|
+
"\u6570\u636E",
|
|
119
|
+
titlePre,
|
|
120
|
+
"\u5931\u8D25")),
|
|
121
|
+
React.createElement("div", { className: "error-content" },
|
|
122
|
+
React.createElement(List, null,
|
|
123
|
+
(errorFiles === null || errorFiles === void 0 ? void 0 : errorFiles.ErrorDownloadUrl) && (React.createElement(List.Item, null,
|
|
124
|
+
React.createElement("a", { target: '_blank', href: errorFiles === null || errorFiles === void 0 ? void 0 : errorFiles.ErrorDownloadUrl, rel: "noreferrer" }, "\u4E0B\u8F7D\u9519\u8BEF\u62A5\u544A"))),
|
|
125
|
+
Array.isArray(errorFiles === null || errorFiles === void 0 ? void 0 : errorFiles.ErrorMessage)
|
|
126
|
+
? (_d = errorFiles === null || errorFiles === void 0 ? void 0 : errorFiles.ErrorMessage) === null || _d === void 0 ? void 0 : _d.map((i, index) => (React.createElement(List.Item, { key: index }, i)))
|
|
127
|
+
: errorFiles === null || errorFiles === void 0 ? void 0 : errorFiles.ErrorMessage)))) : (React.createElement(Table, { records: tableRecords, recordKey: "CreateDate", columns: columns, topTip: getTopTip(isError, isLodaing, tableRecords), addons: [
|
|
128
|
+
scrollable({
|
|
129
|
+
maxHeight: 420,
|
|
130
|
+
}),
|
|
131
|
+
] }))),
|
|
132
|
+
React.createElement(Modal.Footer, null, !((_e = errorFiles === null || errorFiles === void 0 ? void 0 : errorFiles.ErrorMessage) === null || _e === void 0 ? void 0 : _e.length) && (React.createElement(Button, { type: "text", style: {
|
|
133
|
+
float: 'left',
|
|
134
|
+
pointerEvents: 'none',
|
|
135
|
+
marginLeft: '0',
|
|
136
|
+
paddingLeft: '0',
|
|
137
|
+
color: 'rgba(0, 0, 0, 0.6)',
|
|
138
|
+
} }, "\u4EC5\u5C55\u793A24\u5C0F\u65F6\u5185\u5BFC\u5165/\u5BFC\u51FA\u8BB0\u5F55")))));
|
|
139
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.view-cell-bubble .wedatea2td-bubble__inner {
|
|
2
|
-
padding:
|
|
3
|
-
font-size:
|
|
4
|
-
line-height:
|
|
2
|
+
padding: 5px 8px;
|
|
3
|
+
font-size: 14px;
|
|
4
|
+
line-height: 22px;
|
|
5
5
|
color: rgba(255, 255, 255, 0.9);
|
|
6
6
|
background: rgba(0, 0, 0, 0.9);
|
|
7
7
|
}
|
|
@@ -9,6 +9,3 @@
|
|
|
9
9
|
.view-cell-bubble .wedatea2td-bubble__inner::before {
|
|
10
10
|
border-bottom-color: rgba(0, 0, 0, 0.9);
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
/*# sourceURL=webpack://./src/web/components/table/UserDepartment/viewCell.css */
|
|
14
|
-
/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy93ZWIvY29tcG9uZW50cy90YWJsZS9Vc2VyRGVwYXJ0bWVudC92aWV3Q2VsbC5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSw4QkFBOEI7RUFDOUIsZUFBZTtFQUNmLHVCQUF1QjtFQUN2QiwrQkFBK0I7RUFDL0IsOEJBQThCO0FBQ2hDO0FBQ0E7O0VBRUUsdUNBQXVDO0FBQ3pDIiwic291cmNlc0NvbnRlbnQiOlsiLnZpZXctY2VsbC1idWJibGUgLndlZGF0ZWEydGQtYnViYmxlX19pbm5lciB7XG4gIHBhZGRpbmc6IDAuMzU3MTRyZW0gMC41NzE0M3JlbTtcbiAgZm9udC1zaXplOiAxcmVtO1xuICBsaW5lLWhlaWdodDogMS41NzE0M3JlbTtcbiAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjkpO1xufVxuLnZpZXctY2VsbC1idWJibGUgLndlZGF0ZWEydGQtYnViYmxlX19pbm5lcjo6YWZ0ZXIsXG4udmlldy1jZWxsLWJ1YmJsZSAud2VkYXRlYTJ0ZC1idWJibGVfX2lubmVyOjpiZWZvcmUge1xuICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9 */
|