@cloudbase/weda-ui 3.9.8 → 3.10.1
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/dataView.d.ts +31 -0
- package/dist/configs/components/dataView.js +53 -16
- package/dist/configs/components/grid/col.d.ts +1 -1
- package/dist/configs/components/grid/col.js +1 -1
- package/dist/configs/components/grid/grid.d.ts +1 -1
- package/dist/configs/components/grid/grid.js +1 -1
- package/dist/configs/components/grid/row.d.ts +1 -1
- package/dist/configs/components/grid/row.js +1 -1
- package/dist/configs/components/listView.d.ts +148 -444
- package/dist/configs/components/listView.js +991 -703
- package/dist/configs/components/wd-bubble.d.ts +6 -6
- package/dist/configs/components/wd-cascader.d.ts +1 -1
- package/dist/configs/components/wd-checkbox.d.ts +1 -1
- package/dist/configs/components/wd-code-editor.d.ts +1 -1
- package/dist/configs/components/wd-date-range.d.ts +1 -1
- package/dist/configs/components/wd-date.d.ts +1 -1
- package/dist/configs/components/wd-department.d.ts +1 -1
- package/dist/configs/components/wd-form-arr.d.ts +1 -1
- package/dist/configs/components/wd-form-detail.d.ts +1 -1
- package/dist/configs/components/wd-form-obj.d.ts +1 -1
- package/dist/configs/components/wd-form.js +2 -1
- package/dist/configs/components/wd-input-email.d.ts +4 -3
- package/dist/configs/components/wd-input-number.d.ts +2 -2
- package/dist/configs/components/wd-input-phone.d.ts +4 -3
- package/dist/configs/components/wd-input-url.d.ts +4 -3
- package/dist/configs/components/wd-input.d.ts +3 -1
- package/dist/configs/components/wd-layout.d.ts +4 -0
- package/dist/configs/components/wd-layout.js +12 -0
- package/dist/configs/components/wd-location.d.ts +1 -1
- package/dist/configs/components/wd-member.d.ts +1 -1
- package/dist/configs/components/wd-menu-layout.d.ts +3 -0
- package/dist/configs/components/wd-menu-layout.js +6 -0
- package/dist/configs/components/wd-menu-list.d.ts +2 -0
- package/dist/configs/components/wd-menu-list.js +6 -0
- package/dist/configs/components/wd-modal.js +2 -0
- package/dist/configs/components/wd-progress.d.ts +2 -2
- package/dist/configs/components/wd-radio.d.ts +1 -1
- package/dist/configs/components/wd-rating.d.ts +2 -2
- package/dist/configs/components/wd-region.d.ts +1 -1
- package/dist/configs/components/wd-rich-text.d.ts +1 -1
- package/dist/configs/components/wd-select-multiple.d.ts +18 -1
- package/dist/configs/components/wd-select-multiple.js +17 -1
- package/dist/configs/components/wd-select.d.ts +18 -1
- package/dist/configs/components/wd-select.js +16 -0
- package/dist/configs/components/wd-side-tab.d.ts +12 -0
- package/dist/configs/components/wd-side-tab.js +47 -3
- package/dist/configs/components/wd-switch.d.ts +2 -2
- package/dist/configs/components/wd-table.d.ts +4 -4
- package/dist/configs/components/wd-table.js +2 -1
- package/dist/configs/components/wd-tag-select.d.ts +3 -3
- package/dist/configs/components/wd-tag.d.ts +21 -21
- package/dist/configs/components/wd-textarea.d.ts +8 -1
- package/dist/configs/components/wd-textarea.js +1 -0
- package/dist/configs/components/wd-time.d.ts +1 -1
- package/dist/configs/components/wd-top-tab.d.ts +12 -0
- package/dist/configs/components/wd-top-tab.js +47 -3
- package/dist/configs/components/wd-upload-file.d.ts +5 -1
- package/dist/configs/components/wd-upload-file.js +15 -0
- package/dist/configs/components/wd-upload-image.d.ts +1 -1
- package/dist/configs/index.d.ts +891 -1407
- package/dist/configs/type-utils/index.d.ts +1 -1
- package/dist/configs/type-utils/type-form.d.ts +29 -14
- package/dist/configs/type-utils/type-form.js +43 -10
- package/dist/configs/type-utils/x-runtime-default.d.ts +6 -0
- package/dist/configs/type-utils/x-runtime-default.js +6 -0
- package/dist/configs/utils/constants.d.ts +2 -0
- package/dist/configs/utils/constants.js +3 -0
- package/dist/configs/utils/get-combinations.d.ts +1 -0
- package/dist/configs/utils/get-combinations.js +13 -0
- package/dist/style/index.css +10478 -0
- package/dist/style/index.scss +1 -1
- package/dist/style/weda-ui.min.css +4 -0
- package/dist/web/actions/showMessage/index.js +5 -0
- package/dist/web/components/carousel/index.js +5 -0
- package/dist/web/components/chart/common/core/eChartBase.js +5 -0
- package/dist/web/components/chart/statisticsCard/index.js +6 -1
- package/dist/web/components/flow/process/constants.d.ts +10 -5
- package/dist/web/components/flow/process/constants.js +3 -2
- package/dist/web/components/flow/process/process.js +1 -1
- package/dist/web/components/form/form/index.js +9 -1
- package/dist/web/components/form/location/common/mapChoose.js +17 -3
- package/dist/web/components/form/location/common/mapView.js +18 -5
- package/dist/web/components/form/select/dropdown-select/h5.d.ts +3 -1
- package/dist/web/components/form/select/dropdown-select/h5.js +20 -20
- package/dist/web/components/form/select/dropdown-select/index.css +8 -0
- package/dist/web/components/form/select/dropdown-select/index.d.ts +6 -1
- package/dist/web/components/form/select/dropdown-select/index.js +64 -30
- package/dist/web/components/form/select/dropdown-select/pc.d.ts +2 -1
- package/dist/web/components/form/select/dropdown-select/pc.js +3 -3
- package/dist/web/components/form/select/dropdown-select/ui.d.ts +5 -0
- package/dist/web/components/form/select/dropdown-select/ui.js +8 -4
- package/dist/web/components/form/select/formats-util.d.ts +1 -0
- package/dist/web/components/form/select/formats-util.js +8 -0
- package/dist/web/components/form/select/h5.d.ts +1 -1
- package/dist/web/components/form/select/h5.js +6 -3
- package/dist/web/components/form/select/index.css +34 -3
- package/dist/web/components/form/select/index.d.ts +3 -0
- package/dist/web/components/form/select/index.js +6 -3
- package/dist/web/components/form/select/region/index.js +5 -1
- package/dist/web/components/form/select/request.js +2 -1
- package/dist/web/components/form/select/status/index.d.ts +2 -0
- package/dist/web/components/form/select/status/index.js +2 -0
- package/dist/web/components/form/selectMultiple/dropdown-select/h5.d.ts +3 -1
- package/dist/web/components/form/selectMultiple/dropdown-select/h5.js +31 -31
- package/dist/web/components/form/selectMultiple/dropdown-select/index.css +23 -0
- package/dist/web/components/form/selectMultiple/dropdown-select/index.d.ts +6 -1
- package/dist/web/components/form/selectMultiple/dropdown-select/index.js +58 -24
- package/dist/web/components/form/selectMultiple/dropdown-select/pc.d.ts +2 -1
- package/dist/web/components/form/selectMultiple/dropdown-select/pc.js +2 -2
- package/dist/web/components/form/selectMultiple/dropdown-select/ui.d.ts +5 -0
- package/dist/web/components/form/selectMultiple/dropdown-select/ui.js +7 -5
- package/dist/web/components/form/selectMultiple/h5.d.ts +1 -1
- package/dist/web/components/form/selectMultiple/h5.js +6 -3
- package/dist/web/components/form/selectMultiple/index.d.ts +5 -0
- package/dist/web/components/form/selectMultiple/index.js +7 -4
- package/dist/web/components/form/selectMultiple/request.js +2 -1
- package/dist/web/components/form/selectMultiple/status/index.d.ts +2 -0
- package/dist/web/components/form/selectMultiple/status/index.js +2 -0
- package/dist/web/components/form/uploader/index.css +26 -0
- package/dist/web/components/form/uploader/uploader.h5.d.ts +11 -3
- package/dist/web/components/form/uploader/uploader.h5.js +32 -96
- package/dist/web/components/form/uploader/uploader.pc.d.ts +9 -0
- package/dist/web/components/form/uploader/uploader.pc.js +38 -102
- package/dist/web/components/form/uploader/useUploadFile.d.ts +16 -0
- package/dist/web/components/form/uploader/useUploadFile.js +99 -0
- package/dist/web/components/form/uploader/util.d.ts +2 -0
- package/dist/web/components/form/uploader/util.js +87 -0
- package/dist/web/components/form/uploaderFile/uploadFile.h5.d.ts +2 -1
- package/dist/web/components/form/uploaderFile/uploadFile.h5.js +14 -4
- package/dist/web/components/form/uploaderFile/uploadFile.pc.d.ts +2 -1
- package/dist/web/components/form/uploaderFile/uploadFile.pc.js +21 -5
- package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-model.js +5 -0
- package/dist/web/components/form/userOrgSelect/component/userOrgSelect.css +8 -0
- package/dist/web/components/form/userOrgSelect/departTreeSelect/departTreeSelect.h5.js +6 -0
- package/dist/web/components/form-date/index.d.ts +9 -10
- package/dist/web/components/form-depart-tree-select/index.d.ts +8 -8
- package/dist/web/components/form-email/index.d.ts +12 -19
- package/dist/web/components/form-image-uploader/index.d.ts +10 -13
- package/dist/web/components/form-input/index.d.ts +4 -4
- package/dist/web/components/form-input-hooks/index.js +7 -1
- package/dist/web/components/form-location/index.d.ts +8 -7
- package/dist/web/components/form-multi-region/index.d.ts +9 -10
- package/dist/web/components/form-phone/index.d.ts +12 -19
- package/dist/web/components/form-radio/index.d.ts +7 -6
- package/dist/web/components/form-region/index.d.ts +9 -10
- package/dist/web/components/form-rich-text/index.d.ts +8 -9
- package/dist/web/components/form-select/index.d.ts +12 -16
- package/dist/web/components/form-select-multiple/index.d.ts +9 -10
- package/dist/web/components/form-switch/index.d.ts +8 -7
- package/dist/web/components/form-text-area/index.d.ts +12 -19
- package/dist/web/components/form-time/index.d.ts +9 -10
- package/dist/web/components/form-upload-file/index.d.ts +10 -13
- package/dist/web/components/form-url/index.d.ts +12 -19
- package/dist/web/components/form-user-tree-select/index.d.ts +8 -8
- package/dist/web/components/grid/col.d.ts +6 -9
- package/dist/web/components/grid/grid.d.ts +6 -14
- package/dist/web/components/grid/row.d.ts +6 -12
- package/dist/web/components/listView/index.d.ts +21 -2
- package/dist/web/components/listView/index.js +0 -3
- package/dist/web/components/listView/interface.d.ts +4 -4
- package/dist/web/components/lottery/index.d.ts +13 -15
- package/dist/web/components/navigationBar/index.css +2 -1
- package/dist/web/components/richText/index.js +6 -0
- package/dist/web/components/richTextView/useImgTransform.js +6 -1
- package/dist/web/components/table/ImportFileModalByApi/index.js +6 -1
- package/dist/web/components/table/ImportFileModalByApi/uploadCSVFile.js +6 -1
- package/dist/web/components/wd-audio/wd-audio.js +5 -0
- package/dist/web/components/wd-canvas/wd-canvas.js +6 -1
- package/dist/web/components/wd-code-editor/wd-code-editor.js +7 -2
- package/dist/web/components/wd-date/elements/WheelPicker.js +7 -1
- package/dist/web/components/wd-form/index.d.ts +26 -40
- package/dist/web/components/wd-form/index.js +9 -2
- package/dist/web/components/wd-form-item/wd-form-item-read-only.d.ts +2 -0
- package/dist/web/components/wd-form-item/wd-form-item-read-only.js +15 -2
- package/dist/web/components/wd-form-item/wd-form-item.js +4 -3
- package/dist/web/components/wd-input/wd-input.d.ts +20 -42
- package/dist/web/components/wd-input-email/wd-input-email.d.ts +19 -41
- package/dist/web/components/wd-input-phone/wd-input-phone.d.ts +20 -42
- package/dist/web/components/wd-input-url/wd-input-url.d.ts +19 -41
- package/dist/web/components/wd-layout/wd-layout.d.ts +1 -1
- package/dist/web/components/wd-layout/wd-layout.js +2 -2
- package/dist/web/components/wd-markdown/wd-markdown.js +1 -1
- package/dist/web/components/wd-menu-layout/components/PlantMenu.js +1 -1
- package/dist/web/components/wd-menu-list/CommonMenuList.js +7 -1
- package/dist/web/components/wd-menu-list/HorizontalMenuList.js +7 -1
- package/dist/web/components/wd-select/relationalSetting.d.ts +7 -0
- package/dist/web/components/wd-select/relationalSetting.js +15 -0
- package/dist/web/components/wd-select/wd-select.css +43 -0
- package/dist/web/components/wd-select/wd-select.d.ts +2 -0
- package/dist/web/components/wd-select/wd-select.js +25 -6
- package/dist/web/components/wd-select-multiple/wd-select-multiple.css +4 -0
- package/dist/web/components/wd-select-multiple/wd-select-multiple.d.ts +6 -0
- package/dist/web/components/wd-select-multiple/wd-select-multiple.js +25 -6
- package/dist/web/components/wd-table/components/FieldRender/Form/Enum.js +18 -4
- package/dist/web/components/wd-table/components/FieldRender/index.js +34 -5
- package/dist/web/components/wd-table/utils/index.js +18 -4
- package/dist/web/components/wd-tabs/tabs-h5.js +2 -3
- package/dist/web/components/wd-tabs/tabs-pc.js +2 -3
- package/dist/web/components/wd-tabs/util.d.ts +1 -0
- package/dist/web/components/wd-tabs/util.js +21 -0
- package/dist/web/components/wd-textarea/wd-textarea.js +11 -1
- package/dist/web/components/wd-unified-link/utils.js +1 -1
- package/dist/web/components/wd-upload-file/wd-upload-file.js +2 -2
- package/dist/web/components/web-view/web-view.d.ts +14 -20
- package/dist/web/utils/color.js +5 -0
- package/dist/web/utils/datasource.js +30 -20
- package/dist/web/utils/error.d.ts +3 -1
- package/dist/web/utils/error.js +9 -4
- package/dist/web/utils/file.js +4 -1
- package/dist/web/utils/getModelParams.js +27 -2
- package/dist/web/utils/hooks/EnumHoc.js +3 -1
- package/dist/web/utils/hooks/useRecycle.d.ts +4 -0
- package/dist/web/utils/loadIconCss.js +2 -1
- package/dist/web/utils/moment.js +2 -1
- package/dist/web/utils/platform.js +5 -2
- package/dist/web/utils/tcb.js +5 -3
- package/dist/web/weda-ui.css +8 -4
- package/package.json +8 -3
|
@@ -3,7 +3,7 @@ import { defaultProps } from './index';
|
|
|
3
3
|
import { emptyObject } from '../../../utils/constant';
|
|
4
4
|
import { PureSelectH5 } from './dropdown-select/ui';
|
|
5
5
|
import { useSyncValue } from '../../../utils/hooks/useSyncValue';
|
|
6
|
-
export default function SelectH5({ events = emptyObject, name, placeholder, disabled = false, range = defaultProps.range, primaryField, dataSourceName, format, onChange, onSearchValueInput, defaultValue, readOnly, ignoreCase, staticSearchable, where, }) {
|
|
6
|
+
export default function SelectH5({ events = emptyObject, name, placeholder, disabled = false, range = defaultProps.range, primaryField, dataSourceName, format, onChange, onSearchValueInput, defaultValue, readOnly, ignoreCase, staticSearchable, where, childRef, addRelationButtonText, enableAddRelationButton, }) {
|
|
7
7
|
const [selectedValue, setSelectedValue] = useSyncValue(defaultValue);
|
|
8
8
|
let params = { controlledValue: range };
|
|
9
9
|
if (format === 'many-many' || format === 'one-many') {
|
|
@@ -15,10 +15,13 @@ export default function SelectH5({ events = emptyObject, name, placeholder, disa
|
|
|
15
15
|
controlledValue: range,
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
return (_jsx(PureSelectH5, { staticSearchable: staticSearchable, ignoreCase: ignoreCase, className: "weda-ui weda-picker", name: name, value: selectedValue, placeholder: placeholder, disabled: disabled, readOnly: readOnly, params: params, onChange: (value) => {
|
|
18
|
+
return (_jsx(PureSelectH5, { childRef: childRef, addRelationButtonText: addRelationButtonText, enableAddRelationButton: enableAddRelationButton, staticSearchable: staticSearchable, ignoreCase: ignoreCase, className: "weda-ui weda-picker", name: name, value: selectedValue, placeholder: placeholder, disabled: disabled, readOnly: readOnly, params: params, onChange: (value) => {
|
|
19
19
|
var _a;
|
|
20
20
|
setSelectedValue(value);
|
|
21
21
|
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
|
22
22
|
(_a = events.change) === null || _a === void 0 ? void 0 : _a.call(events, { value });
|
|
23
|
-
}, onSearchValueInput: onSearchValueInput
|
|
23
|
+
}, onSearchValueInput: onSearchValueInput, onAddRelationButtonClick: () => {
|
|
24
|
+
var _a;
|
|
25
|
+
(_a = events === null || events === void 0 ? void 0 : events.onAddRelationButtonClick) === null || _a === void 0 ? void 0 : _a.call(events);
|
|
26
|
+
} }));
|
|
24
27
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { CommonFormPropsType } from '../types';
|
|
3
3
|
import { IUseoptionsParams } from './request';
|
|
4
|
+
import { AttachContainer } from 'tea-component/lib/_util/get-overlay-root';
|
|
4
5
|
import './style';
|
|
5
6
|
export default function SelectMultiple(props: any): JSX.Element;
|
|
6
7
|
export interface PropsType extends CommonFormPropsType {
|
|
@@ -41,6 +42,10 @@ export interface PropsType extends CommonFormPropsType {
|
|
|
41
42
|
readOnly?: boolean;
|
|
42
43
|
ignoreCase?: boolean;
|
|
43
44
|
staticSearchable?: boolean;
|
|
45
|
+
childRef?: any;
|
|
46
|
+
addRelationButtonText?: string;
|
|
47
|
+
enableAddRelationButton?: boolean;
|
|
48
|
+
popupContainer?: AttachContainer;
|
|
44
49
|
}
|
|
45
50
|
export declare const defaultProps: {
|
|
46
51
|
events: {};
|
|
@@ -54,7 +54,7 @@ export const defaultProps = {
|
|
|
54
54
|
requiredFlag: false,
|
|
55
55
|
range: [],
|
|
56
56
|
};
|
|
57
|
-
function SelectPc({ dataSourceName, format, primaryField, defaultValue, placeholder = '请选择', events = emptyObject, disabled = false, range = defaultProps.range, size = defaultProps.size, onChange, onSearchValueInput, readOnly, ignoreCase, staticSearchable, where, }) {
|
|
57
|
+
function SelectPc({ dataSourceName, format, primaryField, defaultValue, placeholder = '请选择', events = emptyObject, disabled = false, range = defaultProps.range, size = defaultProps.size, onChange, onSearchValueInput, readOnly, ignoreCase, staticSearchable, where, childRef, addRelationButtonText, enableAddRelationButton, popupContainer, }) {
|
|
58
58
|
const [selectedValue, setSelectedValue] = useSyncValue(defaultValue);
|
|
59
59
|
let params = { controlledValue: range };
|
|
60
60
|
if (format === 'many-many' || format === 'one-many') {
|
|
@@ -67,13 +67,16 @@ function SelectPc({ dataSourceName, format, primaryField, defaultValue, placehol
|
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
69
|
const createDropdown = () => {
|
|
70
|
-
return (_jsx(PureSelectPc, { ignoreCase: ignoreCase, staticSearchable: staticSearchable, params: params, disabled: disabled, readOnly: readOnly, placeholder: placeholder, size: size, value: selectedValue, onChange: (value, triggerEvent) => {
|
|
70
|
+
return (_jsx(PureSelectPc, { childRef: childRef, addRelationButtonText: addRelationButtonText, enableAddRelationButton: enableAddRelationButton, ignoreCase: ignoreCase, staticSearchable: staticSearchable, params: params, disabled: disabled, readOnly: readOnly, placeholder: placeholder, size: size, value: selectedValue, onChange: (value, triggerEvent) => {
|
|
71
71
|
var _a;
|
|
72
72
|
onChange && onChange(value);
|
|
73
73
|
setSelectedValue(value);
|
|
74
74
|
triggerEvent && ((_a = events === null || events === void 0 ? void 0 : events.change) === null || _a === void 0 ? void 0 : _a.call(events, { value }));
|
|
75
|
-
}, onSearchValueInput: onSearchValueInput
|
|
75
|
+
}, onSearchValueInput: onSearchValueInput, onAddRelationButtonClick: () => {
|
|
76
|
+
var _a;
|
|
77
|
+
(_a = events === null || events === void 0 ? void 0 : events.onAddRelationButtonClick) === null || _a === void 0 ? void 0 : _a.call(events);
|
|
78
|
+
} }));
|
|
76
79
|
};
|
|
77
80
|
const dropdown = createDropdown();
|
|
78
|
-
return _jsx(ConfigProvider, { classPrefix: "wedatea2td", children: dropdown });
|
|
81
|
+
return (_jsx(ConfigProvider, { classPrefix: "wedatea2td", popupContainer: popupContainer, children: dropdown }));
|
|
79
82
|
}
|
|
@@ -58,7 +58,8 @@ export const requestFatherRelatedOption = async (params, pageNo, type, searchVal
|
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
const defaultData = results === null || results === void 0 ? void 0 : results.map((opt) => ({
|
|
61
|
-
|
|
61
|
+
label: opt._id,
|
|
62
|
+
value: opt._id,
|
|
62
63
|
})); // 兜底 正常来说一定有primaryField
|
|
63
64
|
return !isEmpty(defaultData)
|
|
64
65
|
? { option: defaultData, isLoadMore: false }
|
|
@@ -171,3 +171,29 @@
|
|
|
171
171
|
font-size: 16px;
|
|
172
172
|
margin: 0 16px;
|
|
173
173
|
}
|
|
174
|
+
.weui-uploader__files .weui-uploader__file_status:before {
|
|
175
|
+
z-index: 2;
|
|
176
|
+
}
|
|
177
|
+
.weui-uploader__files img.weui-uploader__file-content {
|
|
178
|
+
width: 100%;
|
|
179
|
+
height: 100%;
|
|
180
|
+
}
|
|
181
|
+
.weui-uploader__files .weui-uploader__file_status {
|
|
182
|
+
position: relative;
|
|
183
|
+
}
|
|
184
|
+
.weui-uploader__files .weui-uploader__file-progress {
|
|
185
|
+
position: absolute;
|
|
186
|
+
left: 50%;
|
|
187
|
+
top: 50%;
|
|
188
|
+
transform: translate(-50%, -50%);
|
|
189
|
+
z-index: 2;
|
|
190
|
+
color: #f2f2f2;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
._weda-fn-upload-result__item .loading_bac {
|
|
194
|
+
background-color: rgba(0, 0, 0, 0.6);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
._weda-fn-upload-result__status {
|
|
198
|
+
color: #f2f2f2;
|
|
199
|
+
}
|
|
@@ -6,12 +6,19 @@ import type { Except } from 'type-fest';
|
|
|
6
6
|
/**
|
|
7
7
|
* H5端
|
|
8
8
|
*/
|
|
9
|
-
export declare function ImageUploaderH5(
|
|
9
|
+
export declare function ImageUploaderH5(props: H5UploaderProps): JSX.Element;
|
|
10
|
+
interface TempFileProps {
|
|
11
|
+
progress?: number;
|
|
12
|
+
loading?: boolean;
|
|
13
|
+
realUrl?: string;
|
|
14
|
+
tempUrl?: string;
|
|
15
|
+
key?: string;
|
|
16
|
+
}
|
|
10
17
|
export interface SingleImageProps {
|
|
11
|
-
|
|
12
|
-
deleteBySrc: (url: string) => void;
|
|
18
|
+
deleteBySrc: (tempFile: TempFileProps) => void;
|
|
13
19
|
disabled: boolean;
|
|
14
20
|
imgTypeCls?: string;
|
|
21
|
+
tempFile: TempFileProps;
|
|
15
22
|
}
|
|
16
23
|
export interface H5UploaderProps extends Except<CommonFormPropsType, 'events'>, Except<CommonPropsType, 'events'>, EventsType, Pick<DataType, 'isCompressBeforeUpload' | 'compressQuality' | 'compressedHeight' | 'compressedWidth' | 'callbacks'> {
|
|
17
24
|
title?: string;
|
|
@@ -25,3 +32,4 @@ export interface H5UploaderProps extends Except<CommonFormPropsType, 'events'>,
|
|
|
25
32
|
onChange?: (v: any) => void;
|
|
26
33
|
readOnly?: boolean;
|
|
27
34
|
}
|
|
35
|
+
export {};
|
|
@@ -2,21 +2,19 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import weui from '../../../utils/weui';
|
|
4
4
|
import classNames from '../../../utils/classnames';
|
|
5
|
-
import {
|
|
6
|
-
import isObjectEqual from '../../../utils/isObjectEqual';
|
|
7
|
-
import { useSyncValue } from '../../../utils/hooks/useSyncValue';
|
|
8
|
-
import { randomStr, browserEnv } from '../../../utils/platform';
|
|
5
|
+
import { browserEnv } from '../../../utils/platform';
|
|
9
6
|
import { IMAGE_TYPES, encodeConvert } from './uploader.pc';
|
|
10
7
|
import { useTempUrl } from '../../../utils/hooks/use-cloud-id-temp-url';
|
|
11
|
-
import { emptyObject } from '../../../utils/constant';
|
|
12
|
-
import { compressImage } from './compress';
|
|
13
8
|
import { toBase64Uri } from '../../../utils/file2base64';
|
|
14
9
|
import { isNil } from '../../../utils/lodash';
|
|
15
|
-
|
|
10
|
+
import { useUploader } from './useUploadFile';
|
|
11
|
+
import { errorHandler } from '../../../utils/error';
|
|
16
12
|
/**
|
|
17
13
|
* H5端
|
|
18
14
|
*/
|
|
19
|
-
export function ImageUploaderH5(
|
|
15
|
+
export function ImageUploaderH5(props) {
|
|
16
|
+
var _a;
|
|
17
|
+
const { title: label, maxUploadCount, maxSize = 10, acceptTypes = IMAGE_TYPES, className, id, events, layout: _layout, single = false, disabled = false, requiredFlag = false, labelVisible = true, onChange, style, imgTypeCls, readOnly, sourceType, callbacks, } = props;
|
|
20
18
|
const layout = _layout !== 'vertical' ? 'horizontal' : 'vertical';
|
|
21
19
|
const layoutCls = layout === 'horizontal' ? 'weda-formcells weui-flex' : '';
|
|
22
20
|
const cls = classNames({
|
|
@@ -24,77 +22,21 @@ export function ImageUploaderH5({ title: label, maxUploadCount, maxSize = 10, ac
|
|
|
24
22
|
[className]: className,
|
|
25
23
|
});
|
|
26
24
|
const inputRef = React.useRef(null);
|
|
27
|
-
|
|
28
|
-
const [uploading, setUploading] = React.useState(false);
|
|
29
|
-
//上传进度
|
|
30
|
-
const [progress, setProgress] = React.useState(0);
|
|
31
|
-
const [inputValue, setInputValue] = useSyncValue(defaultValue, isObjectEqual);
|
|
32
|
-
const fileIdList = React.useMemo(() => {
|
|
33
|
-
// 兼容h5默认值为空时情况
|
|
34
|
-
if (inputValue === null) {
|
|
35
|
-
setInputValue('');
|
|
36
|
-
}
|
|
37
|
-
if (typeof inputValue === 'string') {
|
|
38
|
-
// single = true 传入的是字符串
|
|
39
|
-
return [inputValue].filter((i) => i.length > 0); // 排除空串
|
|
40
|
-
}
|
|
41
|
-
if (Array.isArray(inputValue)) {
|
|
42
|
-
return inputValue;
|
|
43
|
-
}
|
|
44
|
-
return [];
|
|
45
|
-
}, [inputValue]);
|
|
25
|
+
const { tempFile, uploading, upload, getTempFile } = useUploader(props);
|
|
46
26
|
const finalMaxImgCount = React.useMemo(() => {
|
|
47
27
|
if (single)
|
|
48
28
|
return 1;
|
|
49
29
|
return maxUploadCount;
|
|
50
30
|
}, [single, maxUploadCount]);
|
|
51
|
-
const deleteFile = (
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
handleChange([].concat(value), true);
|
|
31
|
+
const deleteFile = (file) => {
|
|
32
|
+
const fileList = tempFile.filter((d) => d.key !== file.key);
|
|
33
|
+
handleChange(fileList, true);
|
|
55
34
|
};
|
|
56
|
-
const handleChange = (
|
|
57
|
-
|
|
58
|
-
|
|
35
|
+
const handleChange = (allFile = [], isDelete = false) => {
|
|
36
|
+
var _a;
|
|
37
|
+
const value = getTempFile(allFile);
|
|
59
38
|
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
|
60
|
-
events === null || events === void 0 ? void 0 : events.change({ value, isDelete });
|
|
61
|
-
};
|
|
62
|
-
const onProgress = (progressEvent) => {
|
|
63
|
-
let percentCompleted = 0;
|
|
64
|
-
try {
|
|
65
|
-
percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
|
|
66
|
-
percentCompleted < 100 ? percentCompleted : 100;
|
|
67
|
-
}
|
|
68
|
-
catch (e) { }
|
|
69
|
-
setProgress(percentCompleted);
|
|
70
|
-
};
|
|
71
|
-
const uploadToTcb = async (file) => {
|
|
72
|
-
var _a, _b;
|
|
73
|
-
try {
|
|
74
|
-
setUploading(true);
|
|
75
|
-
const tcb = await getCloudInstance();
|
|
76
|
-
const cloudPath = `${uploadPath}/${randomStr()}-${file === null || file === void 0 ? void 0 : file.name.replace(/[%#]/g, '-')}`;
|
|
77
|
-
const { fileID } = await tcb.uploadFile({
|
|
78
|
-
cloudPath,
|
|
79
|
-
filePath: file,
|
|
80
|
-
onUploadProgress: onProgress,
|
|
81
|
-
});
|
|
82
|
-
(_a = events.success) === null || _a === void 0 ? void 0 : _a.call(events, { value: fileID, file });
|
|
83
|
-
setUploading(false);
|
|
84
|
-
return fileID;
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
(_b = window === null || window === void 0 ? void 0 : window.$w) === null || _b === void 0 ? void 0 : _b.utils.showModal({
|
|
88
|
-
title: '上传失败,请重试',
|
|
89
|
-
content: err.message,
|
|
90
|
-
showCancel: false,
|
|
91
|
-
});
|
|
92
|
-
events.error && events.error(err);
|
|
93
|
-
}
|
|
94
|
-
finally {
|
|
95
|
-
setUploading(false);
|
|
96
|
-
setProgress(0);
|
|
97
|
-
}
|
|
39
|
+
(_a = events === null || events === void 0 ? void 0 : events.change) === null || _a === void 0 ? void 0 : _a.call(events, { value, isDelete });
|
|
98
40
|
};
|
|
99
41
|
const accepts = React.useMemo(() => {
|
|
100
42
|
return acceptTypes.length === 0
|
|
@@ -104,10 +46,10 @@ export function ImageUploaderH5({ title: label, maxUploadCount, maxSize = 10, ac
|
|
|
104
46
|
const showAdd = React.useMemo(() => {
|
|
105
47
|
if (single) {
|
|
106
48
|
// single 模式时,当数组为空且不在上传文件过程中时显示
|
|
107
|
-
return
|
|
49
|
+
return tempFile.length < 1 && !uploading;
|
|
108
50
|
}
|
|
109
|
-
return
|
|
110
|
-
}, [
|
|
51
|
+
return tempFile.length < maxUploadCount;
|
|
52
|
+
}, [tempFile, single, maxUploadCount, uploading]);
|
|
111
53
|
const uploadChange = async (e) => {
|
|
112
54
|
var _a, _b, _c, _d, _e, _f;
|
|
113
55
|
let files = [...e.target.files];
|
|
@@ -126,7 +68,7 @@ export function ImageUploaderH5({ title: label, maxUploadCount, maxSize = 10, ac
|
|
|
126
68
|
});
|
|
127
69
|
return false;
|
|
128
70
|
}
|
|
129
|
-
if (
|
|
71
|
+
if (tempFile.length + files.length > finalMaxImgCount) {
|
|
130
72
|
(_f = (_e = window === null || window === void 0 ? void 0 : window.$w) === null || _e === void 0 ? void 0 : _e.utils) === null || _f === void 0 ? void 0 : _f.showToast({
|
|
131
73
|
title: `最多只能上传${finalMaxImgCount}张图片`,
|
|
132
74
|
icon: 'none',
|
|
@@ -150,29 +92,20 @@ export function ImageUploaderH5({ title: label, maxUploadCount, maxSize = 10, ac
|
|
|
150
92
|
}
|
|
151
93
|
}
|
|
152
94
|
catch (err) {
|
|
153
|
-
|
|
95
|
+
errorHandler({
|
|
96
|
+
code: 'BEFORE_UPLOAD_ERROR',
|
|
97
|
+
error: err,
|
|
98
|
+
});
|
|
154
99
|
shouldUploadToCos = false;
|
|
155
100
|
}
|
|
156
101
|
}
|
|
157
102
|
if (shouldUploadToCos === false) {
|
|
158
103
|
return;
|
|
159
104
|
}
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
const compressed = await compressImage(f, {
|
|
163
|
-
compressedHeight,
|
|
164
|
-
compressedWidth,
|
|
165
|
-
compressQuality,
|
|
166
|
-
});
|
|
167
|
-
return uploadToTcb(compressed);
|
|
168
|
-
}
|
|
169
|
-
return uploadToTcb(f);
|
|
170
|
-
});
|
|
171
|
-
const result = await Promise.all(promiseAll);
|
|
172
|
-
const ids = [].concat(fileIdList, result);
|
|
173
|
-
handleChange(ids);
|
|
105
|
+
const allFile = await upload(files);
|
|
106
|
+
handleChange(allFile);
|
|
174
107
|
};
|
|
175
|
-
return (_jsx("div", { className: cls, id: id, style: style, children: _jsxs("div", { className: classNames('weui-uploader weui-cells weui-cells_form weda-formcells', layout, layoutCls), children: [_jsx("div", { className: classNames('weui-uploader__hd', layout), children: _jsx(UploaderLabel, { layout: layout, label: label, labelVisible: labelVisible, currentCount:
|
|
108
|
+
return (_jsx("div", { className: cls, id: id, style: style, children: _jsxs("div", { className: classNames('weui-uploader weui-cells weui-cells_form weda-formcells', layout, layoutCls), children: [_jsx("div", { className: classNames('weui-uploader__hd', layout), children: _jsx(UploaderLabel, { layout: layout, label: label, labelVisible: labelVisible, currentCount: tempFile.length, maxCount: finalMaxImgCount, requiredFlag: requiredFlag }) }), _jsxs("div", { className: "weui-uploader__bd", children: [_jsxs("ul", { className: "weui-uploader__files", id: "uploaderFiles", children: [(_a = (tempFile !== null && tempFile !== void 0 ? tempFile : [])) === null || _a === void 0 ? void 0 : _a.map((f) => (_jsx(SingleImage, { tempFile: f, deleteBySrc: deleteFile, disabled: disabled || readOnly || sourceType === 'album', imgTypeCls: imgTypeCls }, f === null || f === void 0 ? void 0 : f.key))), tempFile.length < 1 && readOnly && _jsx(_Fragment, { children: "\u2014" })] }), showAdd && !readOnly && (_jsx("div", { className: `weui-uploader__input-box ${imgTypeCls}`, children: !disabled &&
|
|
176
109
|
sourceType !== 'album' &&
|
|
177
110
|
(sourceType === 'camera' ? (_jsx("input", { ref: inputRef, onClick: () => {
|
|
178
111
|
inputRef.current && (inputRef.current.value = '');
|
|
@@ -180,12 +113,15 @@ export function ImageUploaderH5({ title: label, maxUploadCount, maxSize = 10, ac
|
|
|
180
113
|
inputRef.current && (inputRef.current.value = '');
|
|
181
114
|
}, "data-testid": "uploaderh5_input", id: "uploaderInput", className: "weui-uploader__input", type: "file", accept: accepts.join(','), multiple: !single && !(browserEnv().android && browserEnv().weixin), onChange: uploadChange }))) }))] })] }) }));
|
|
182
115
|
}
|
|
183
|
-
function SingleImage({
|
|
116
|
+
function SingleImage({ deleteBySrc, disabled, imgTypeCls, tempFile, }) {
|
|
117
|
+
const { progress, loading, realUrl, tempUrl } = tempFile;
|
|
184
118
|
const cls = classNames({
|
|
185
119
|
'weui-uploader__file': true,
|
|
120
|
+
'weui-uploader__file_status': loading,
|
|
186
121
|
});
|
|
122
|
+
const src = realUrl !== null && realUrl !== void 0 ? realUrl : tempUrl;
|
|
187
123
|
const { data: realSrc, error } = useTempUrl(src);
|
|
188
|
-
const encodeSrc = encodeConvert(realSrc);
|
|
124
|
+
const encodeSrc = encodeConvert(realSrc !== null && realSrc !== void 0 ? realSrc : tempUrl);
|
|
189
125
|
// 圆括号冲突,加上引号引用url地址
|
|
190
126
|
const imgStyle = {
|
|
191
127
|
backgroundImage: 'url("' + encodeURI(encodeSrc) + '")',
|
|
@@ -198,13 +134,13 @@ function SingleImage({ src, deleteBySrc, disabled, imgTypeCls, }) {
|
|
|
198
134
|
className: galleryCls,
|
|
199
135
|
onDelete: function () {
|
|
200
136
|
if (!disabled) {
|
|
201
|
-
deleteBySrc(
|
|
137
|
+
deleteBySrc(tempFile);
|
|
202
138
|
gallery.hide();
|
|
203
139
|
}
|
|
204
140
|
},
|
|
205
141
|
});
|
|
206
142
|
};
|
|
207
|
-
return (
|
|
143
|
+
return (_jsxs("li", { className: `${cls} ${imgTypeCls}`, style: imgStyle, onClick: showGallery, "data-testid": "uploaderh5_imgStyle", children: [error || status ? (_jsx("div", { className: "weui-uploader__file-content", children: error ? (_jsx("i", { role: "img", "aria-label": "\u9519\u8BEF", className: "weui-icon-warn" })) : (_jsx("i", { className: `weui-loading ${imgTypeCls}`, style: { width: 30, height: 30 } })) })) : (false), loading && (_jsxs("div", { className: "weui-uploader__file-progress", children: [progress, "%"] }))] }));
|
|
208
144
|
}
|
|
209
145
|
const UploaderLabel = ({ layout, label, currentCount, maxCount, requiredFlag, labelVisible, }) => {
|
|
210
146
|
if (layout === 'horizontal') {
|
|
@@ -2,9 +2,17 @@ import * as React from 'react';
|
|
|
2
2
|
import { H5UploaderProps } from './uploader.h5';
|
|
3
3
|
export declare const CLASS_PREFIX = "weda-uploader-pc";
|
|
4
4
|
export declare const IMAGE_TYPES: string[];
|
|
5
|
+
interface TempFileProps {
|
|
6
|
+
progress?: number;
|
|
7
|
+
loading?: boolean;
|
|
8
|
+
realUrl?: string;
|
|
9
|
+
tempUrl?: string;
|
|
10
|
+
key?: string;
|
|
11
|
+
}
|
|
5
12
|
export declare function UploaderPCInner(props: PropsType): JSX.Element;
|
|
6
13
|
export interface TcbImageProps {
|
|
7
14
|
fileID?: string;
|
|
15
|
+
tempFile?: TempFileProps;
|
|
8
16
|
isZoom?: boolean;
|
|
9
17
|
onError?: (e: unknown) => void;
|
|
10
18
|
imgTypeCls?: string;
|
|
@@ -20,3 +28,4 @@ export interface PropsType extends H5UploaderProps {
|
|
|
20
28
|
readOnly?: boolean;
|
|
21
29
|
}
|
|
22
30
|
export declare function encodeConvert(src: any): any;
|
|
31
|
+
export {};
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { Upload, Icon, ErrorTip, ImagePreview, ConfigProvider, } from 'tea-component';
|
|
4
|
-
import { getCloudInstance } from '../../../utils/tcb';
|
|
5
|
-
import { randomStr } from '../../../utils/platform';
|
|
6
|
-
import isObjectEqual from '../../../utils/isObjectEqual';
|
|
7
4
|
import { useTempUrl } from '../../../utils/hooks/use-cloud-id-temp-url';
|
|
8
|
-
import { compressImage } from './compress';
|
|
9
5
|
import { toBase64Uri } from '../../../utils/file2base64';
|
|
10
6
|
import { isNil } from '../../../utils/lodash';
|
|
7
|
+
import { errorHandler } from '../../../utils/error';
|
|
11
8
|
import { WdIcon } from '../../wd-icon';
|
|
9
|
+
import { useUploader } from './useUploadFile';
|
|
12
10
|
// 默认组件类前缀
|
|
13
11
|
export const CLASS_PREFIX = 'weda-uploader-pc';
|
|
14
12
|
// 默认图片类型
|
|
@@ -22,32 +20,11 @@ export const IMAGE_TYPES = [
|
|
|
22
20
|
'image/gif',
|
|
23
21
|
];
|
|
24
22
|
export function UploaderPCInner(props) {
|
|
25
|
-
const { tips = '', btnTitle = '上传图片', maxUploadCount = 9, maxSize = 10,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
// 上传中
|
|
29
|
-
const [uploading, setUploading] = React.useState(false);
|
|
30
|
-
//上传进度
|
|
31
|
-
const [progress, setProgress] = React.useState(0);
|
|
32
|
-
// 文件列表
|
|
33
|
-
const [fileIDList, setfileIDList] = React.useState([]);
|
|
34
|
-
const defaultValueRef = React.useRef(null);
|
|
35
|
-
React.useEffect(() => {
|
|
36
|
-
if (isObjectEqual(defaultValueRef.current, defaultValue))
|
|
37
|
-
return;
|
|
38
|
-
let initialValue = []
|
|
39
|
-
.concat(value ? value : defaultValue)
|
|
40
|
-
.filter((d) => typeof d === 'string' && d !== '');
|
|
41
|
-
if (single) {
|
|
42
|
-
initialValue = initialValue[0] ? [initialValue[0]] : [];
|
|
43
|
-
}
|
|
44
|
-
defaultValueRef.current = defaultValue;
|
|
45
|
-
setfileIDList(initialValue);
|
|
46
|
-
}, [defaultValue, single]);
|
|
47
|
-
const handleChange = (ids, isDelete = false) => {
|
|
23
|
+
const { tips = '', btnTitle = '上传图片', maxUploadCount = 9, maxSize = 10, acceptTypes = IMAGE_TYPES, events, single = false, disabled = false, onChange, imgTypeCls, readOnly, sourceType, callbacks, } = props;
|
|
24
|
+
const { tempFile, uploading, upload, getTempFile } = useUploader(props);
|
|
25
|
+
const handleChange = (allFile = [], isDelete = false) => {
|
|
48
26
|
var _a;
|
|
49
|
-
|
|
50
|
-
const value = single ? ids[0] || '' : ids;
|
|
27
|
+
const value = getTempFile(allFile);
|
|
51
28
|
onChange === null || onChange === void 0 ? void 0 : onChange(value);
|
|
52
29
|
(_a = events === null || events === void 0 ? void 0 : events.change) === null || _a === void 0 ? void 0 : _a.call(events, { value, isDelete });
|
|
53
30
|
};
|
|
@@ -69,7 +46,12 @@ export function UploaderPCInner(props) {
|
|
|
69
46
|
icon: 'error',
|
|
70
47
|
});
|
|
71
48
|
}
|
|
72
|
-
catch (e) {
|
|
49
|
+
catch (e) {
|
|
50
|
+
errorHandler({
|
|
51
|
+
code: 'BEFORE_UPLOAD_ERROR',
|
|
52
|
+
error: e,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
73
55
|
return Promise.reject(false);
|
|
74
56
|
}
|
|
75
57
|
const ids = fileList.filter((f) => !!f.id);
|
|
@@ -83,7 +65,7 @@ export function UploaderPCInner(props) {
|
|
|
83
65
|
});
|
|
84
66
|
return Promise.reject(false);
|
|
85
67
|
}
|
|
86
|
-
if (
|
|
68
|
+
if (tempFile.length + fileList.length > finalMaxImgCount) {
|
|
87
69
|
(_f = (_e = window === null || window === void 0 ? void 0 : window.$w) === null || _e === void 0 ? void 0 : _e.utils) === null || _f === void 0 ? void 0 : _f.showToast({
|
|
88
70
|
title: `最多只能上传${finalMaxImgCount}张图片`,
|
|
89
71
|
icon: 'error',
|
|
@@ -110,75 +92,23 @@ export function UploaderPCInner(props) {
|
|
|
110
92
|
}
|
|
111
93
|
}
|
|
112
94
|
catch (err) {
|
|
113
|
-
|
|
95
|
+
errorHandler({
|
|
96
|
+
code: 'BEFORE_UPLOAD_ERROR',
|
|
97
|
+
error: err,
|
|
98
|
+
});
|
|
114
99
|
shouldUploadToCos = false;
|
|
115
100
|
}
|
|
116
101
|
}
|
|
117
102
|
if (shouldUploadToCos === false) {
|
|
118
103
|
return Promise.reject(false);
|
|
119
104
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
};
|
|
123
|
-
// 多张上传
|
|
124
|
-
const uploadTcbMulti = async (files) => {
|
|
125
|
-
const promiseAll = files.map(async (f) => {
|
|
126
|
-
if (isCompressBeforeUpload) {
|
|
127
|
-
const compressed = await compressImage(f, {
|
|
128
|
-
compressedHeight,
|
|
129
|
-
compressedWidth,
|
|
130
|
-
compressQuality,
|
|
131
|
-
});
|
|
132
|
-
return uploadTcb(compressed);
|
|
133
|
-
}
|
|
134
|
-
return uploadTcb(f);
|
|
135
|
-
});
|
|
136
|
-
const result = await Promise.all(promiseAll);
|
|
137
|
-
const ids = [].concat(fileIDList, result);
|
|
138
|
-
handleChange(ids);
|
|
139
|
-
};
|
|
140
|
-
// 自定义上传到 Tcb 的 COS
|
|
141
|
-
const uploadTcb = async (file) => {
|
|
142
|
-
var _a, _b, _c;
|
|
143
|
-
try {
|
|
144
|
-
setUploading(true);
|
|
145
|
-
const tcb = await getCloudInstance();
|
|
146
|
-
const cloudPath = `${uploadPath}/${randomStr()}-${file === null || file === void 0 ? void 0 : file.name.replace(/[%#]/g, '-')}`;
|
|
147
|
-
const { fileID } = await tcb.uploadFile({
|
|
148
|
-
cloudPath,
|
|
149
|
-
filePath: file,
|
|
150
|
-
onUploadProgress: onProgress,
|
|
151
|
-
});
|
|
152
|
-
(_a = events === null || events === void 0 ? void 0 : events.success) === null || _a === void 0 ? void 0 : _a.call(events, { value: fileID, file });
|
|
153
|
-
setUploading(false);
|
|
154
|
-
return fileID;
|
|
155
|
-
}
|
|
156
|
-
catch (err) {
|
|
157
|
-
(_c = (_b = window === null || window === void 0 ? void 0 : window.$w) === null || _b === void 0 ? void 0 : _b.utils) === null || _c === void 0 ? void 0 : _c.showToast({
|
|
158
|
-
title: `上传失败,请重试 ${err.message}`,
|
|
159
|
-
icon: 'error',
|
|
160
|
-
});
|
|
161
|
-
(events === null || events === void 0 ? void 0 : events.error) && events.error(err);
|
|
162
|
-
}
|
|
163
|
-
finally {
|
|
164
|
-
setUploading(false);
|
|
165
|
-
setProgress(0);
|
|
166
|
-
}
|
|
167
|
-
};
|
|
168
|
-
// 计算上传进度
|
|
169
|
-
const onProgress = (progressEvent) => {
|
|
170
|
-
let percentCompleted = 0;
|
|
171
|
-
try {
|
|
172
|
-
percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
|
|
173
|
-
percentCompleted < 100 ? percentCompleted : 100;
|
|
174
|
-
}
|
|
175
|
-
catch (e) { }
|
|
176
|
-
setProgress(percentCompleted);
|
|
105
|
+
const allFile = await upload(fileList);
|
|
106
|
+
handleChange(allFile);
|
|
177
107
|
};
|
|
178
108
|
// 删除图片
|
|
179
|
-
const deleteHandle = (
|
|
180
|
-
const
|
|
181
|
-
handleChange(
|
|
109
|
+
const deleteHandle = (fileItem) => {
|
|
110
|
+
const fileList = tempFile.filter((d) => d.key !== fileItem.key);
|
|
111
|
+
handleChange(fileList, true);
|
|
182
112
|
};
|
|
183
113
|
// 转换后的属性
|
|
184
114
|
const extraProps = {};
|
|
@@ -188,9 +118,9 @@ export function UploaderPCInner(props) {
|
|
|
188
118
|
acceptTypes.length === 0 ? IMAGE_TYPES : Array.from(new Set(acceptTypes));
|
|
189
119
|
tips && (extraProps['title'] = tips);
|
|
190
120
|
maxSize && (extraProps['maxSize'] = maxSize * 1024 * 1024);
|
|
191
|
-
const hasActions = !readOnly && !(disabled || sourceType === 'camera');
|
|
192
|
-
return (_jsx(ConfigProvider, { classPrefix: "wedatea2td", children: _jsxs("div", { className: "_weda-fn-upload-result", children: [
|
|
193
|
-
(single &&
|
|
121
|
+
const hasActions = !uploading && !readOnly && !(disabled || sourceType === 'camera');
|
|
122
|
+
return (_jsx(ConfigProvider, { classPrefix: "wedatea2td", children: _jsxs("div", { className: "_weda-fn-upload-result", children: [tempFile === null || tempFile === void 0 ? void 0 : tempFile.map((d) => (_jsx("div", { className: `_weda-fn-upload-result__item ${imgTypeCls}`, children: _jsx(TcbImage, { tempFile: d, imgTypeCls: imgTypeCls, isZoom: true, preivewIcon: "td:browse", actions: hasActions && (_jsx(WdIcon, { className: `${CLASS_PREFIX}__image-actions-delete`, name: "td:delete", onClick: () => deleteHandle(d), size: "sm" })) }) }, d.key))), _jsxs("div", { className: `${CLASS_PREFIX}__input-box`, children: [readOnly && tempFile.length < 1 && _jsx("div", { children: "\u2014" }), sourceType === 'camera' || (disabled && !readOnly) ? (_jsx("li", { className: `_weda-fn-upload-result__item wedatea2td-disabled ${imgTypeCls}`, children: _jsxs("div", { className: "_weda-fn-upload-result__status", children: [_jsx("i", { className: "wedatea2td-icon wedatea2td-icon-plus", role: "img", "aria-label": "plus" }), _jsx("span", { className: "wedatea2td-mt-1n wedatea2td-text-label wedatea2td-fz-reset", children: btnTitle })] }) })) : (((!single && tempFile.length < maxUploadCount) ||
|
|
123
|
+
(single && tempFile.length < 1 && !uploading)) &&
|
|
194
124
|
!readOnly && (
|
|
195
125
|
// single 模式时,当数组为空且不在上传文件过程中时显示
|
|
196
126
|
_jsx(Upload, { ...extraProps, beforeUpload: beforeHandle, children: _jsxs("li", {
|
|
@@ -202,24 +132,26 @@ export function UploaderPCInner(props) {
|
|
|
202
132
|
className: `_weda-fn-upload-result__item _weda-fn-upload-result__item--upload ${imgTypeCls}`, children: [imgTypeCls, _jsxs("div", { className: "_weda-fn-upload-result__status", children: [_jsx("i", { className: "wedatea2td-icon wedatea2td-icon-plus", role: "img", "aria-label": "plus" }), _jsx("span", { className: "wedatea2td-mt-1n wedatea2td-text-label wedatea2td-fz-reset", children: btnTitle })] })] }) })))] })] }) }));
|
|
203
133
|
}
|
|
204
134
|
export const TcbImage = (props) => {
|
|
205
|
-
const { fileID, isZoom, imgTypeCls, preivewIcon, actions, ...rest } = props;
|
|
135
|
+
const { fileID, tempFile = { progress: 100, loading: false, realUrl: null, tempUrl: null }, isZoom, imgTypeCls, preivewIcon, actions, ...rest } = props;
|
|
136
|
+
const { progress, loading, realUrl, tempUrl } = tempFile;
|
|
137
|
+
const fileCloudID = (realUrl !== null && realUrl !== void 0 ? realUrl : tempUrl) || fileID;
|
|
206
138
|
const [isError, setIsError] = React.useState(false);
|
|
207
|
-
const { data: src, error: requestError } = useTempUrl(
|
|
139
|
+
const { data: src, error: requestError } = useTempUrl(fileCloudID);
|
|
208
140
|
const encodeSrc = encodeConvert(src);
|
|
209
141
|
const renderImg = () => {
|
|
210
142
|
if (isError || requestError)
|
|
211
143
|
return _jsx(ErrorTip, {});
|
|
212
144
|
if (!src)
|
|
213
145
|
return null;
|
|
214
|
-
return (_jsx("img", { "data-testid": "uploaderpc_imgStyle", className: `${CLASS_PREFIX}__image ${imgTypeCls}`, ...rest, src: encodeURI(encodeSrc), onError: (e) => {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
146
|
+
return (_jsxs(_Fragment, { children: [_jsx("img", { "data-testid": "uploaderpc_imgStyle", className: `${CLASS_PREFIX}__image ${imgTypeCls}`, ...rest, src: encodeURI(encodeSrc), onError: (e) => {
|
|
147
|
+
setIsError(true);
|
|
148
|
+
(props === null || props === void 0 ? void 0 : props.onError) && props.onError(e);
|
|
149
|
+
} }), loading && (_jsxs("div", { className: "_weda-fn-upload-result__status loading_bac", children: [_jsx(Icon, { type: "loading" }), _jsxs("div", { className: "wedatea2td-mt-1n wedatea2td-fz-reset", children: [progress, "%"] })] }))] }));
|
|
218
150
|
};
|
|
219
151
|
if (!isZoom)
|
|
220
152
|
return renderImg();
|
|
221
153
|
const previewProps = {
|
|
222
|
-
key:
|
|
154
|
+
key: fileCloudID,
|
|
223
155
|
'data-testid': 'uploaderpc_imgStyle',
|
|
224
156
|
className: `${CLASS_PREFIX}__image ${imgTypeCls}`,
|
|
225
157
|
...rest,
|
|
@@ -245,6 +177,10 @@ export function encodeConvert(src) {
|
|
|
245
177
|
return decodeURIComponent(src);
|
|
246
178
|
}
|
|
247
179
|
catch (e) {
|
|
180
|
+
errorHandler({
|
|
181
|
+
code: 'EncodeConvert_Error',
|
|
182
|
+
error: e,
|
|
183
|
+
});
|
|
248
184
|
return src;
|
|
249
185
|
}
|
|
250
186
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const CLASS_PREFIX = "weda-uploader-pc";
|
|
2
|
+
export declare const IMAGE_TYPES: string[];
|
|
3
|
+
interface TempFileProps {
|
|
4
|
+
progress?: number;
|
|
5
|
+
loading?: boolean;
|
|
6
|
+
realUrl?: string;
|
|
7
|
+
tempUrl?: string;
|
|
8
|
+
key?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function useUploader(props: any): {
|
|
11
|
+
tempFile: TempFileProps[];
|
|
12
|
+
uploading: boolean;
|
|
13
|
+
upload: (fileList: any) => Promise<any[]>;
|
|
14
|
+
getTempFile: (allFile?: any[]) => any[];
|
|
15
|
+
};
|
|
16
|
+
export {};
|