@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.
Files changed (218) hide show
  1. package/dist/configs/components/dataView.d.ts +31 -0
  2. package/dist/configs/components/dataView.js +53 -16
  3. package/dist/configs/components/grid/col.d.ts +1 -1
  4. package/dist/configs/components/grid/col.js +1 -1
  5. package/dist/configs/components/grid/grid.d.ts +1 -1
  6. package/dist/configs/components/grid/grid.js +1 -1
  7. package/dist/configs/components/grid/row.d.ts +1 -1
  8. package/dist/configs/components/grid/row.js +1 -1
  9. package/dist/configs/components/listView.d.ts +148 -444
  10. package/dist/configs/components/listView.js +991 -703
  11. package/dist/configs/components/wd-bubble.d.ts +6 -6
  12. package/dist/configs/components/wd-cascader.d.ts +1 -1
  13. package/dist/configs/components/wd-checkbox.d.ts +1 -1
  14. package/dist/configs/components/wd-code-editor.d.ts +1 -1
  15. package/dist/configs/components/wd-date-range.d.ts +1 -1
  16. package/dist/configs/components/wd-date.d.ts +1 -1
  17. package/dist/configs/components/wd-department.d.ts +1 -1
  18. package/dist/configs/components/wd-form-arr.d.ts +1 -1
  19. package/dist/configs/components/wd-form-detail.d.ts +1 -1
  20. package/dist/configs/components/wd-form-obj.d.ts +1 -1
  21. package/dist/configs/components/wd-form.js +2 -1
  22. package/dist/configs/components/wd-input-email.d.ts +4 -3
  23. package/dist/configs/components/wd-input-number.d.ts +2 -2
  24. package/dist/configs/components/wd-input-phone.d.ts +4 -3
  25. package/dist/configs/components/wd-input-url.d.ts +4 -3
  26. package/dist/configs/components/wd-input.d.ts +3 -1
  27. package/dist/configs/components/wd-layout.d.ts +4 -0
  28. package/dist/configs/components/wd-layout.js +12 -0
  29. package/dist/configs/components/wd-location.d.ts +1 -1
  30. package/dist/configs/components/wd-member.d.ts +1 -1
  31. package/dist/configs/components/wd-menu-layout.d.ts +3 -0
  32. package/dist/configs/components/wd-menu-layout.js +6 -0
  33. package/dist/configs/components/wd-menu-list.d.ts +2 -0
  34. package/dist/configs/components/wd-menu-list.js +6 -0
  35. package/dist/configs/components/wd-modal.js +2 -0
  36. package/dist/configs/components/wd-progress.d.ts +2 -2
  37. package/dist/configs/components/wd-radio.d.ts +1 -1
  38. package/dist/configs/components/wd-rating.d.ts +2 -2
  39. package/dist/configs/components/wd-region.d.ts +1 -1
  40. package/dist/configs/components/wd-rich-text.d.ts +1 -1
  41. package/dist/configs/components/wd-select-multiple.d.ts +18 -1
  42. package/dist/configs/components/wd-select-multiple.js +17 -1
  43. package/dist/configs/components/wd-select.d.ts +18 -1
  44. package/dist/configs/components/wd-select.js +16 -0
  45. package/dist/configs/components/wd-side-tab.d.ts +12 -0
  46. package/dist/configs/components/wd-side-tab.js +47 -3
  47. package/dist/configs/components/wd-switch.d.ts +2 -2
  48. package/dist/configs/components/wd-table.d.ts +4 -4
  49. package/dist/configs/components/wd-table.js +2 -1
  50. package/dist/configs/components/wd-tag-select.d.ts +3 -3
  51. package/dist/configs/components/wd-tag.d.ts +21 -21
  52. package/dist/configs/components/wd-textarea.d.ts +8 -1
  53. package/dist/configs/components/wd-textarea.js +1 -0
  54. package/dist/configs/components/wd-time.d.ts +1 -1
  55. package/dist/configs/components/wd-top-tab.d.ts +12 -0
  56. package/dist/configs/components/wd-top-tab.js +47 -3
  57. package/dist/configs/components/wd-upload-file.d.ts +5 -1
  58. package/dist/configs/components/wd-upload-file.js +15 -0
  59. package/dist/configs/components/wd-upload-image.d.ts +1 -1
  60. package/dist/configs/index.d.ts +891 -1407
  61. package/dist/configs/type-utils/index.d.ts +1 -1
  62. package/dist/configs/type-utils/type-form.d.ts +29 -14
  63. package/dist/configs/type-utils/type-form.js +43 -10
  64. package/dist/configs/type-utils/x-runtime-default.d.ts +6 -0
  65. package/dist/configs/type-utils/x-runtime-default.js +6 -0
  66. package/dist/configs/utils/constants.d.ts +2 -0
  67. package/dist/configs/utils/constants.js +3 -0
  68. package/dist/configs/utils/get-combinations.d.ts +1 -0
  69. package/dist/configs/utils/get-combinations.js +13 -0
  70. package/dist/style/index.css +10478 -0
  71. package/dist/style/index.scss +1 -1
  72. package/dist/style/weda-ui.min.css +4 -0
  73. package/dist/web/actions/showMessage/index.js +5 -0
  74. package/dist/web/components/carousel/index.js +5 -0
  75. package/dist/web/components/chart/common/core/eChartBase.js +5 -0
  76. package/dist/web/components/chart/statisticsCard/index.js +6 -1
  77. package/dist/web/components/flow/process/constants.d.ts +10 -5
  78. package/dist/web/components/flow/process/constants.js +3 -2
  79. package/dist/web/components/flow/process/process.js +1 -1
  80. package/dist/web/components/form/form/index.js +9 -1
  81. package/dist/web/components/form/location/common/mapChoose.js +17 -3
  82. package/dist/web/components/form/location/common/mapView.js +18 -5
  83. package/dist/web/components/form/select/dropdown-select/h5.d.ts +3 -1
  84. package/dist/web/components/form/select/dropdown-select/h5.js +20 -20
  85. package/dist/web/components/form/select/dropdown-select/index.css +8 -0
  86. package/dist/web/components/form/select/dropdown-select/index.d.ts +6 -1
  87. package/dist/web/components/form/select/dropdown-select/index.js +64 -30
  88. package/dist/web/components/form/select/dropdown-select/pc.d.ts +2 -1
  89. package/dist/web/components/form/select/dropdown-select/pc.js +3 -3
  90. package/dist/web/components/form/select/dropdown-select/ui.d.ts +5 -0
  91. package/dist/web/components/form/select/dropdown-select/ui.js +8 -4
  92. package/dist/web/components/form/select/formats-util.d.ts +1 -0
  93. package/dist/web/components/form/select/formats-util.js +8 -0
  94. package/dist/web/components/form/select/h5.d.ts +1 -1
  95. package/dist/web/components/form/select/h5.js +6 -3
  96. package/dist/web/components/form/select/index.css +34 -3
  97. package/dist/web/components/form/select/index.d.ts +3 -0
  98. package/dist/web/components/form/select/index.js +6 -3
  99. package/dist/web/components/form/select/region/index.js +5 -1
  100. package/dist/web/components/form/select/request.js +2 -1
  101. package/dist/web/components/form/select/status/index.d.ts +2 -0
  102. package/dist/web/components/form/select/status/index.js +2 -0
  103. package/dist/web/components/form/selectMultiple/dropdown-select/h5.d.ts +3 -1
  104. package/dist/web/components/form/selectMultiple/dropdown-select/h5.js +31 -31
  105. package/dist/web/components/form/selectMultiple/dropdown-select/index.css +23 -0
  106. package/dist/web/components/form/selectMultiple/dropdown-select/index.d.ts +6 -1
  107. package/dist/web/components/form/selectMultiple/dropdown-select/index.js +58 -24
  108. package/dist/web/components/form/selectMultiple/dropdown-select/pc.d.ts +2 -1
  109. package/dist/web/components/form/selectMultiple/dropdown-select/pc.js +2 -2
  110. package/dist/web/components/form/selectMultiple/dropdown-select/ui.d.ts +5 -0
  111. package/dist/web/components/form/selectMultiple/dropdown-select/ui.js +7 -5
  112. package/dist/web/components/form/selectMultiple/h5.d.ts +1 -1
  113. package/dist/web/components/form/selectMultiple/h5.js +6 -3
  114. package/dist/web/components/form/selectMultiple/index.d.ts +5 -0
  115. package/dist/web/components/form/selectMultiple/index.js +7 -4
  116. package/dist/web/components/form/selectMultiple/request.js +2 -1
  117. package/dist/web/components/form/selectMultiple/status/index.d.ts +2 -0
  118. package/dist/web/components/form/selectMultiple/status/index.js +2 -0
  119. package/dist/web/components/form/uploader/index.css +26 -0
  120. package/dist/web/components/form/uploader/uploader.h5.d.ts +11 -3
  121. package/dist/web/components/form/uploader/uploader.h5.js +32 -96
  122. package/dist/web/components/form/uploader/uploader.pc.d.ts +9 -0
  123. package/dist/web/components/form/uploader/uploader.pc.js +38 -102
  124. package/dist/web/components/form/uploader/useUploadFile.d.ts +16 -0
  125. package/dist/web/components/form/uploader/useUploadFile.js +99 -0
  126. package/dist/web/components/form/uploader/util.d.ts +2 -0
  127. package/dist/web/components/form/uploader/util.js +87 -0
  128. package/dist/web/components/form/uploaderFile/uploadFile.h5.d.ts +2 -1
  129. package/dist/web/components/form/uploaderFile/uploadFile.h5.js +14 -4
  130. package/dist/web/components/form/uploaderFile/uploadFile.pc.d.ts +2 -1
  131. package/dist/web/components/form/uploaderFile/uploadFile.pc.js +21 -5
  132. package/dist/web/components/form/userOrgSelect/component/user-select-pc/user-model.js +5 -0
  133. package/dist/web/components/form/userOrgSelect/component/userOrgSelect.css +8 -0
  134. package/dist/web/components/form/userOrgSelect/departTreeSelect/departTreeSelect.h5.js +6 -0
  135. package/dist/web/components/form-date/index.d.ts +9 -10
  136. package/dist/web/components/form-depart-tree-select/index.d.ts +8 -8
  137. package/dist/web/components/form-email/index.d.ts +12 -19
  138. package/dist/web/components/form-image-uploader/index.d.ts +10 -13
  139. package/dist/web/components/form-input/index.d.ts +4 -4
  140. package/dist/web/components/form-input-hooks/index.js +7 -1
  141. package/dist/web/components/form-location/index.d.ts +8 -7
  142. package/dist/web/components/form-multi-region/index.d.ts +9 -10
  143. package/dist/web/components/form-phone/index.d.ts +12 -19
  144. package/dist/web/components/form-radio/index.d.ts +7 -6
  145. package/dist/web/components/form-region/index.d.ts +9 -10
  146. package/dist/web/components/form-rich-text/index.d.ts +8 -9
  147. package/dist/web/components/form-select/index.d.ts +12 -16
  148. package/dist/web/components/form-select-multiple/index.d.ts +9 -10
  149. package/dist/web/components/form-switch/index.d.ts +8 -7
  150. package/dist/web/components/form-text-area/index.d.ts +12 -19
  151. package/dist/web/components/form-time/index.d.ts +9 -10
  152. package/dist/web/components/form-upload-file/index.d.ts +10 -13
  153. package/dist/web/components/form-url/index.d.ts +12 -19
  154. package/dist/web/components/form-user-tree-select/index.d.ts +8 -8
  155. package/dist/web/components/grid/col.d.ts +6 -9
  156. package/dist/web/components/grid/grid.d.ts +6 -14
  157. package/dist/web/components/grid/row.d.ts +6 -12
  158. package/dist/web/components/listView/index.d.ts +21 -2
  159. package/dist/web/components/listView/index.js +0 -3
  160. package/dist/web/components/listView/interface.d.ts +4 -4
  161. package/dist/web/components/lottery/index.d.ts +13 -15
  162. package/dist/web/components/navigationBar/index.css +2 -1
  163. package/dist/web/components/richText/index.js +6 -0
  164. package/dist/web/components/richTextView/useImgTransform.js +6 -1
  165. package/dist/web/components/table/ImportFileModalByApi/index.js +6 -1
  166. package/dist/web/components/table/ImportFileModalByApi/uploadCSVFile.js +6 -1
  167. package/dist/web/components/wd-audio/wd-audio.js +5 -0
  168. package/dist/web/components/wd-canvas/wd-canvas.js +6 -1
  169. package/dist/web/components/wd-code-editor/wd-code-editor.js +7 -2
  170. package/dist/web/components/wd-date/elements/WheelPicker.js +7 -1
  171. package/dist/web/components/wd-form/index.d.ts +26 -40
  172. package/dist/web/components/wd-form/index.js +9 -2
  173. package/dist/web/components/wd-form-item/wd-form-item-read-only.d.ts +2 -0
  174. package/dist/web/components/wd-form-item/wd-form-item-read-only.js +15 -2
  175. package/dist/web/components/wd-form-item/wd-form-item.js +4 -3
  176. package/dist/web/components/wd-input/wd-input.d.ts +20 -42
  177. package/dist/web/components/wd-input-email/wd-input-email.d.ts +19 -41
  178. package/dist/web/components/wd-input-phone/wd-input-phone.d.ts +20 -42
  179. package/dist/web/components/wd-input-url/wd-input-url.d.ts +19 -41
  180. package/dist/web/components/wd-layout/wd-layout.d.ts +1 -1
  181. package/dist/web/components/wd-layout/wd-layout.js +2 -2
  182. package/dist/web/components/wd-markdown/wd-markdown.js +1 -1
  183. package/dist/web/components/wd-menu-layout/components/PlantMenu.js +1 -1
  184. package/dist/web/components/wd-menu-list/CommonMenuList.js +7 -1
  185. package/dist/web/components/wd-menu-list/HorizontalMenuList.js +7 -1
  186. package/dist/web/components/wd-select/relationalSetting.d.ts +7 -0
  187. package/dist/web/components/wd-select/relationalSetting.js +15 -0
  188. package/dist/web/components/wd-select/wd-select.css +43 -0
  189. package/dist/web/components/wd-select/wd-select.d.ts +2 -0
  190. package/dist/web/components/wd-select/wd-select.js +25 -6
  191. package/dist/web/components/wd-select-multiple/wd-select-multiple.css +4 -0
  192. package/dist/web/components/wd-select-multiple/wd-select-multiple.d.ts +6 -0
  193. package/dist/web/components/wd-select-multiple/wd-select-multiple.js +25 -6
  194. package/dist/web/components/wd-table/components/FieldRender/Form/Enum.js +18 -4
  195. package/dist/web/components/wd-table/components/FieldRender/index.js +34 -5
  196. package/dist/web/components/wd-table/utils/index.js +18 -4
  197. package/dist/web/components/wd-tabs/tabs-h5.js +2 -3
  198. package/dist/web/components/wd-tabs/tabs-pc.js +2 -3
  199. package/dist/web/components/wd-tabs/util.d.ts +1 -0
  200. package/dist/web/components/wd-tabs/util.js +21 -0
  201. package/dist/web/components/wd-textarea/wd-textarea.js +11 -1
  202. package/dist/web/components/wd-unified-link/utils.js +1 -1
  203. package/dist/web/components/wd-upload-file/wd-upload-file.js +2 -2
  204. package/dist/web/components/web-view/web-view.d.ts +14 -20
  205. package/dist/web/utils/color.js +5 -0
  206. package/dist/web/utils/datasource.js +30 -20
  207. package/dist/web/utils/error.d.ts +3 -1
  208. package/dist/web/utils/error.js +9 -4
  209. package/dist/web/utils/file.js +4 -1
  210. package/dist/web/utils/getModelParams.js +27 -2
  211. package/dist/web/utils/hooks/EnumHoc.js +3 -1
  212. package/dist/web/utils/hooks/useRecycle.d.ts +4 -0
  213. package/dist/web/utils/loadIconCss.js +2 -1
  214. package/dist/web/utils/moment.js +2 -1
  215. package/dist/web/utils/platform.js +5 -2
  216. package/dist/web/utils/tcb.js +5 -3
  217. package/dist/web/weda-ui.css +8 -4
  218. 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
- option: [{ label: opt._id, value: opt._id }],
61
+ label: opt._id,
62
+ value: opt._id,
62
63
  })); // 兜底 正常来说一定有primaryField
63
64
  return !isEmpty(defaultData)
64
65
  ? { option: defaultData, isLoadMore: false }
@@ -1,3 +1,5 @@
1
+ import Loading from './loading';
2
+ export { Loading };
1
3
  export declare const Status: {
2
4
  ALl_EMPTY: number;
3
5
  LOADING: number;
@@ -1,3 +1,5 @@
1
+ import Loading from './loading';
2
+ export { Loading };
1
3
  export const Status = {
2
4
  ALl_EMPTY: -1,
3
5
  LOADING: 0,
@@ -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({ title: label, maxUploadCount, maxSize, acceptTypes, className, id, events, layout: _layout, defaultValue, single, disabled, requiredFlag, labelVisible, onChange, style, imgTypeCls, readOnly, sourceType, isCompressBeforeUpload, compressQuality, compressedHeight, compressedWidth, callbacks, }: H5UploaderProps): JSX.Element;
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
- src: string;
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 { getCloudInstance } from '../../../utils/tcb';
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
- const uploadPath = 'weda-uploader';
10
+ import { useUploader } from './useUploadFile';
11
+ import { errorHandler } from '../../../utils/error';
16
12
  /**
17
13
  * H5端
18
14
  */
19
- export function ImageUploaderH5({ title: label, maxUploadCount, maxSize = 10, acceptTypes = IMAGE_TYPES, className, id, events = emptyObject, layout: _layout, defaultValue, single = false, disabled = false, requiredFlag = false, labelVisible = true, onChange, style, imgTypeCls, readOnly, sourceType, isCompressBeforeUpload, compressQuality, compressedHeight, compressedWidth, callbacks, }) {
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 = (url) => {
52
- const value = single ? '' : fileIdList.filter((f) => f !== url);
53
- setInputValue(value);
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 = (ids, isDelete = false) => {
57
- const value = single ? ids[0] || '' : ids;
58
- setInputValue(value);
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 fileIdList.length < 1 && !uploading;
49
+ return tempFile.length < 1 && !uploading;
108
50
  }
109
- return fileIdList.length < maxUploadCount;
110
- }, [fileIdList, single, maxUploadCount, uploading]);
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 (fileIdList.length + files.length > finalMaxImgCount) {
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
- console.error('上传前处理函数抛错', err);
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 promiseAll = files.map(async (f) => {
161
- if (isCompressBeforeUpload) {
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: fileIdList.length, maxCount: finalMaxImgCount, requiredFlag: requiredFlag }) }), _jsxs("div", { className: "weui-uploader__bd", children: [_jsxs("ul", { className: "weui-uploader__files", id: "uploaderFiles", children: [(fileIdList !== null && fileIdList !== void 0 ? fileIdList : []).map((f) => (_jsx(SingleImage, { src: f, deleteBySrc: deleteFile, disabled: disabled || readOnly || sourceType === 'album', imgTypeCls: imgTypeCls }, f))), fileIdList.length < 1 && readOnly && _jsx(_Fragment, { children: "\u2014" }), uploading && (_jsx("li", { className: `weui-uploader__file weui-uploader__file_status ${imgTypeCls}`, children: _jsxs("div", { className: "weui-uploader__file-content", children: [progress, "%"] }) }))] }), showAdd && !readOnly && (_jsx("div", { className: `weui-uploader__input-box ${imgTypeCls}`, children: !disabled &&
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({ src, deleteBySrc, disabled, imgTypeCls, }) {
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(src);
137
+ deleteBySrc(tempFile);
202
138
  gallery.hide();
203
139
  }
204
140
  },
205
141
  });
206
142
  };
207
- return (_jsx("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) }));
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, defaultValue, // 需要兼容 cloud:和https: 协议,需要兼容 字符串和字符串数组
26
- acceptTypes = IMAGE_TYPES, uploadPath = 'weda-uploader', events, single = false, disabled = false, onChange, imgTypeCls, value, // 数据管理后台中,formily使用此字段传默认值
27
- readOnly, isCompressBeforeUpload, compressQuality, compressedHeight, compressedWidth, sourceType, callbacks, } = props;
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
- setfileIDList(ids);
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 (fileIDList.length + fileList.length > finalMaxImgCount) {
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
- console.error('上传前处理函数抛错', err);
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
- uploadTcbMulti(fileList);
121
- return Promise.reject(false);
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 = (fileID) => {
180
- const ids = fileIDList.filter((d) => d !== fileID);
181
- handleChange(ids, true);
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: [fileIDList.map((d) => (_jsx("div", { className: `_weda-fn-upload-result__item ${imgTypeCls}`, children: _jsx(TcbImage, { fileID: 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))), uploading && (_jsx("div", { className: `_weda-fn-upload-result__item ${imgTypeCls}`, children: _jsxs("div", { className: "_weda-fn-upload-result__status", children: [_jsx(Icon, { type: "loading" }), !!progress && (_jsxs("span", { className: "wedatea2td-mt-1n wedatea2td-text-label wedatea2td-fz-reset", children: ["\u4E0A\u4F20", progress, "%..."] }))] }, "_place_image") })), _jsxs("div", { className: `${CLASS_PREFIX}__input-box`, children: [readOnly && fileIDList.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 && fileIDList.length < maxUploadCount) ||
193
- (single && fileIDList.length < 1 && !uploading)) &&
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(fileID);
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
- setIsError(true);
216
- (props === null || props === void 0 ? void 0 : props.onError) && props.onError(e);
217
- } }, fileID));
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: fileID,
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 {};